Ich lese dieses Buch "Computer Architecture and Organization" von Subrata Ghosal, weil ich neugierig bin, wie Daten im CPU-Register "gespeichert" werden.
Wenn ich sage „Daten werden gespeichert“, stelle ich mir etwas vor, das mir erlaubt:
Und das Buch behauptet, dass das Computerregister diese Fähigkeit zulässt.
Laut dem Buch kann ein Register aus vielen getakteten D-Flip-Flops bestehen, die wiederum aus einem SR-Latch bestehen können:
Das D-Flip-Flop funktioniert wie folgt:
Jetzt kann ein 4-Bit-Register aus 4 D-Flip-Flops bestehen:
Ich stelle mir vor, dass sich dieses Register in einem LAUFENDEN Computer befindet, dann wechselt der CLK in bestimmten Intervallen zwischen 1 und 0. Meine Frage bezieht sich also auf diese Situation:
Um also den korrekten Wert abzurufen, den ich zu einem früheren Zeitpunkt "gespeichert" habe, ist eine notwendige Bedingung, dass auch die korrekte Eingabe in das Flip-Flop erfolgen muss, aber dafür gibt es nichts, um dies zu garantieren. Das klingt für mich nicht nach "Speichern von Daten".
Irgendwas muss ich falsch verstanden haben, konnte es aber nicht nachvollziehen.
Die Schaltung, die Sie in Abb. 3.19 zeigen, ist (meiner Meinung nach) fälschlicherweise als D-Flip-Flop bezeichnet . Es ist eigentlich eindeutiger als ein geschlossener D-Latch zu identifizieren .
Gated D-Latches werden manchmal auch verwirrend als "pegelgetriggerte Flip-Flops" bezeichnet. Auch hier ist es besser, den Begriff Latch zu verwenden , um klarer zu sein.
Zurück zum Diagramm. Die „Uhr“ würde korrekterweise „Schreiben“ oder „Aktivieren“ heißen. Sie würden normalerweise keinen freilaufenden Takt verwenden, um einen Latch zu steuern, sondern ihn stattdessen mit einem Schreibfreigabesignal steuern.
Wie auch immer Sie es nennen, der gated D-Latch hält seine Daten, solange die „Uhr“ (wirklich, Freigabe) niedrig gehalten wird, und folgt dem Eingang, während Freigabe hoch gehalten wird, also ist zumindest diese Beschreibung korrekt.
Während D-Latches oder ihre Äquivalente (wie SRAM-Zellen) für die Speicherung verwendet werden können (und oft verwendet werden), sind Flops, die für Register verwendet werden , typischerweise vom "Master-Slave"-D-Flip-Flop-Typ. Dieses Diagramm sieht so aus:
Simulieren Sie es hier: Master-Slave-D-Flip-Flop
Master-Slave-Flops werden manchmal als flankengetriggerte Register bezeichnet , da sie ihren Zustand nur an der Taktflanke ändern. Master-Slave-Flops bestehen aus zwei D-Latch-Stufen, wobei jede Stufe bei entgegengesetzter Taktphase angesteuert wird.
Bei einem Flop mit positiver Flanke wie dem oben gezeigten steuert die Uhr die Stufen wie folgt:
In einem System ist der Hauptunterschied zwischen einem Latch und einem Flop also folgender:
Das bedeutet, dass beim D-Flop Clock-to-Q nur mit dem Takt zusammenhängt. Dies vereinfacht die zeitliche Abstimmung.
Eine Sache noch. Sie können D-Flip-Flops aus Multiplexern konstruieren. In CMOS ist dies die gebräuchlichste Methode. Hier ist ein Beispiel:
Simulieren Sie es hier: Master-Slave-Flop mit Muxes
Wenn Sie es so betrachten, können Sie das Follow-Hold-Verhalten jedes Latches deutlicher erkennen.
Der Trick ist, ein Register hat einige Signale mehr und das FF ist nur ein Grundbaustein.
Normalerweise haben Sie den Dateneingang, den Datenausgang, den Takteingang und ein Freigabesignal. Daten werden nur bei gültiger Freigabe in das Register übertragen.
Natürlich können Sie auch die Uhr wie Marcus Müller sagte, aber das ist ungewöhnlich, wenn Sie Logik für FPGAs oder ASICs codieren.
Speicher oder Register für Peripheriegeräte, die an einen Bus angeschlossen sind, haben mehr Dinge wie Adressdecoder zum Generieren der Freigabesignale usw.
Das einfache D-FF ist also nur eine Vereinfachung, um das Grundkonzept zu transportieren. So wird es in der Realität nicht gemacht. Es gibt Multiplexer, Komparatoren und viele andere Dinge, damit es funktioniert.
Und während Register synthetisierte Logik ist, ist Speicher normalerweise spezialisiertes IP mit einem dichten Layout, um Geschwindigkeit, geringen Stromverbrauch, geringen Flächenverbrauch, ...
Ich stelle mir vor, dass sich dieses Register in einem LAUFENDEN Computer befindet, dann wechselt der CLK in bestimmten Intervallen zwischen 1 und 0.
Der Takt wird nur gepulst, wenn Daten in das Register geschrieben werden. Zu allen anderen Zeiten (einschließlich Lesen des Registers) ist die Uhr inaktiv, sodass die Daten gespeichert bleiben.
Die Dateneingänge können als Bus mit mehreren Registern verbunden werden . Nur in dem getakteten Register werden die Daten gespeichert. Die anderen Register ignorieren einfach die Daten und halten ihren Inhalt.
Um Daten aus einem bestimmten Register auf den Bus zu lesen, müssen seine Ausgänge über Tri-State -Puffer oder einen Multiplexer verbunden werden . Das Lesen des Registers wird dann erreicht, indem der Puffer aktiviert oder der entsprechende Eingang des Multiplexers ausgewählt wird. Die Uhr der Registrierkasse wird beim Lesen nicht getaktet.
Hier ist ein Teil des Schemas der Registerplatine im C74-6502 , einer hausgemachten Reproduktion der 6502-CPU mit TTL-ICs: -
Dieses Design verfügt über separate Schreib- und Lesedatenbusse, die jeweils 8 Bit breit sind (die blauen Linien im Schaltplan).
Die 74AC238 und 74AC138 decodieren die Register-Schreib- bzw. -Leseleitungen. Die X- und Y-Register verwenden beide ein 74AC574 Octal D Flip/Flop. Seine Tri-State-Datenausgänge werden aktiviert, wenn der OC (/OE)-Eingang niedrig ist.
Hier ist das interne Logikdiagramm des 74AC574: -
dann wechselt der CLK in bestimmten Intervallen zwischen 1 und 0.
nein, das ist die Schreibuhr. Das ändert sich nur, wenn es gültige Daten zum Speichern im Flip-Flop gibt.
Die reine Flip-Flop-Logik, die Sie dort haben, wird bei jedem Taktzyklus aktualisiert, was nicht das ist, was Sie wollen.
Um diese als Register zu verwenden, gibt es auch ein "Write Enable"-Signal, das niedrig bleibt, es sei denn, das Register soll in diesem Zyklus überschrieben werden.
Mike65535
Chris Stratton