Wie funktioniert ein Systembus?
Ich verstehe nicht, wie eine Schaltung Eingangs- / Ausgangsprobleme mit einem Bus vermeiden kann. Ich habe ein Bild eingefügt, um meine Gedanken besser zu erklären.
Die Schaltung hat 2 Mehrzweckregister, die mit einem Systembus verbunden sind. Die linken Drähte jedes GP-Registers werden eingegeben und die rechten Drähte ausgegeben. Derzeit geht der Eingang in den Ausgang, was dazu führt, dass Logisim den Draht rot markiert (Fehler). Welche Lösungen gibt es, um dies zu vermeiden?
Hier ist die Blackbox für die Register.
Anstelle von UND-Gattern müssen Sie Tristate-Treiber verwenden. Diese Treiber gehen in einen hochohmigen Zustand, wenn sie nicht aktiviert sind, was es einem anderen Gerät auf dem Bus ermöglicht, die Bussignalspannungen zu steuern. Vermutlich lässt die Steuerlogik zu, dass nur ein Registerausgang zu einem gegebenen Zeitpunkt freigegeben wird.
Logisim bezeichnet diese Treiber übrigens als "kontrollierten Puffer".
Joe Hass deckt den traditionellen Weg ab und ersetzt die UND-Gatter durch Tristate-Logik. So wurde es in den 1970er Jahren mit TTL-Chips gemacht und es ist auf PCB-Ebene immer noch üblich.
Innerhalb eines FPGAs werden Tri-State-Puffer jedoch seit etwa Anfang dieses Jahrhunderts nicht mehr unterstützt (außer an den externen Pins). (ASICs unterscheiden sich in dieser Hinsicht; danke an Joe Hass für die Korrektur) Das Synthesetool akzeptiert möglicherweise eine Schaltungsbeschreibung basierend auf Tristates, implementiert sie jedoch, indem es die Schaltung in etwas völlig anderes umwandelt ... normalerweise ist die erste Stufe eine Reihe von UND-Gattern, die wie in Ihrem Beispiel mit dem Enable verbunden sind.
Wenn Ihr Register wirklich UND-Gatter auf der Freigabeleitung hat, handelt es sich um ein neueres Design, und Sie benötigen eine zusätzliche Logikstufe, um den Bus zu erstellen.
Diese Stufe ist einfach ein ODER-Gatter auf jedem Busbit mit N Eingängen, ein Eingang für jede Quelle (GP-Register usw.), die den Bus ansteuert. Die Ausgänge jeder Quelle werden einfach ODER-verknüpft, und der Ausgang des ODER-Gatters treibt den Bus. Das N-Eingangs-ODER-Gatter kann auf verschiedene Arten implementiert werden - zB als Baum von 2-Eingangs-ODER-Gattern, wenn Ihr Logiksystem dies bietet.
Dies funktioniert, weil wenn ein Enable hoch ist, alle anderen Quellen 0 auf dem Bus treiben.
Es ist zuverlässiger als der Tri-State-Ansatz, denn wenn mehrere Enables hoch sind, ist das Ergebnis bedeutungsloser Unsinn (mehrere Ausgänge mit ODER verknüpft) anstelle eines Kurzschlusses über der Stromversorgung (wobei eine Quelle "0" und die andere " 1'), was möglicherweise ein kleines Feuer verursacht...
Beide Ansätze funktionieren: Wenn Sie jedoch Logik in einem FPGA oder ASIC entwerfen, wird dieser stark bevorzugt.
(Eine alternative Möglichkeit, Tristates zu eliminieren, basiert auf einem N:1-Multiplexer. Wenn Sie die übliche Implementierung eines 2:1-Multiplexers herausziehen, werden Sie feststellen, dass die beiden Ansätze im Wesentlichen gleich sind).
Justin D.
Schabab
RBerteig