Ich frage mich, welche Art von Puffern / Techniken normalerweise zum Anschließen eines CPU-Registers (Flip-Flops?) An einen CPU-Bus (Daten / Adresse / Steuerung) verwendet werden. Da es viele Register auf einem einzelnen Bus gibt, weiß ich, dass es eine Art Tristate-Mechanismus geben muss, aber wie geben Sie an, welche Puffer schweben sollen?
Logischerweise sollte es eine Art Registerauswahlbit zusammen mit einem Lese-/Schreibbit geben, das umschaltet, welches Register verwendet wird und was es mit dem Wert macht. Obwohl dies für mich sinnvoll ist, halte ich es nicht für praktikabel, jeden Registereingang mit einem Registerauswahl- oder R / W-Bit zu UNDEN.
Ich habe im Internet nach Schaltplänen oder Dokumentationen gesucht und kann keine soliden Informationen finden. Die meisten CPU-Schaltpläne sind so kompliziert, dass ich Schwierigkeiten habe, sie zu verstehen. Jede Hilfe wird sehr geschätzt.
Bei einigen Gerätetechnologien sind Register unter Verwendung von Ausgängen mit drei Zuständen mit einem Bus verbunden. Ein solcher Ansatz hat einige Vorteile, erfordert jedoch im Allgemeinen entweder, dass zwischen dem Moment, in dem ein Register den Bus freigibt, und dem Moment, in dem ein anderes Register beginnt, ihn zu steuern, eine „Totzeit“ besteht, oder es besteht die Gefahr, dass ein Gerät mit dem Fahren beginnt den Bus, bevor das vorherige Gerät ihn vollständig freigegeben hat.
Bei anderen Technologien wird dieser Ansatz zugunsten der Verwendung verschachtelter Multiplexer vermieden. Wenn es 64 Register gibt, die an ein Busbit ausgeben können, könnte das Gerät acht 8-Wege-Multiplexer haben, von denen jeder Eingaben von einem Register akzeptiert, und einen weiteren 8-Wege-Multiplexer, der Eingaben von einem der ersten acht akzeptiert. Während dies etwas mehr Schaltungsaufwand erfordert als der busbasierte Ansatz, hat es den Vorteil, dass jedes Signal im gesamten System zu jeder Zeit von genau einem Gerät angesteuert wird.
Haben Sie vielleicht darüber nachgedacht, sich das Datenblatt eines Teils anzusehen, das früher zur Implementierung von Registern in einer CPU verwendet wurde, wie z. B. das 74HC574-Datenblatt ?
Es funktioniert genau so, wie Sie es vermutet haben:
Ein Registerauswahlbit (ein Pin namens CLK) für WRITE, das bei seiner ansteigenden Flanke dem Chip mitteilt, die Daten an seinen Eingangspins zu übernehmen und intern zu speichern. Eine CPU, die viele dieser Chips enthält, würde nur die Register takten, die den aktuellen Wert auf dem Datenbus speichern müssen, und nicht die anderen Register takten, die ihre internen Werte halten müssen.
Ein weiteres Registerauswahlbit (ein Pin, der manchmal "nOE" genannt wird) für READ, das, solange es niedrig ist, den Chip anweist, seine internen Daten auf den Datenbus zu treiben.
Registerdateien innerhalb eines FPGA sind konzeptionell gleich.
Wie geben Sie an, welche Puffer schweben sollen?
Typischerweise befindet sich an einer anderen Stelle in der CPU das Befehlsregister (IR). Typischerweise decodiert ein Decoder wie der 74HC138 das "Quellfeld" aus dem Befehlsregister in eine Reihe von nOE-Zeilen, eine für jedes Register. Der 74HC138 stellt sicher, dass höchstens ein Register gleichzeitig den Datenbus ansteuert, sodass es keinen Konflikt gibt. Der 74HC138 hält das nOE aller anderen Register hoch, sodass ihre Ausgangspins effektiv "getrennt" ("tristated", "disabled" usw.) sind. Ich würde jedoch nicht sagen, dass ihre Ausgangspins "schwebend" sind - jeder Pin, der mit einem bestimmten Bit des Datenbusses verbunden ist, wird von dem einen Chip, der vom 74HC138 ausgewählt wird, hoch oder niedrig getrieben.
Ein ähnlicher Demultiplexer decodiert das "Zielfeld" aus dem Befehlsregister in eine Reihe von CLK-Leitungen, eine für jedes Register, und der CPU-Designer fügt eine kleine zusätzliche Schaltung hinzu, um die Uhr genau im richtigen Moment zu pulsieren, kurz nachdem die Daten vorhanden sind auf dem Bus stabilisiert, und kurz bevor ein anderes Quellregister ausgewählt wurde und die Daten sich wieder zu ändern beginnen.
Jedes Signal im gesamten System wird zu jeder Zeit von genau einem Gerät angesteuert.
Das könnte funktionieren. In der Praxis habe ich jedoch noch nie eine Registerdatei gesehen – auf einem monolithischen IC oder aus TTL-Chips oder aus noch einfacheren Komponenten – die vollständig aus kaskadierenden Muxes aufgebaut ist. Die, die ich gesehen habe, enthalten immer irgendwo mindestens einen bidirektionalen 3-State-Bus.
davidcary