Ich verstehe, wie D-Flip-Flop funktioniert, verstehe aber immer noch nicht, wie es ein bisschen Daten in einem Register in einem laufenden Computer "speichert".

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:

  1. Daten darauf schreiben
  2. Solange ich nicht umschreibe, werden beim Lesen die zuletzt geschriebenen Daten zurückgegeben

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:

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Das D-Flip-Flop funktioniert wie folgt:

  1. Wenn CLK 0 ist, ändert sich Q nicht
  2. Wenn CLK 1 ist, bestimmt D Q

Jetzt kann ein 4-Bit-Register aus 4 D-Flip-Flops bestehen:

Geben Sie hier die Bildbeschreibung ein

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:

  • Angenommen zum Zeitpunkt t0: CLK ist 1, ich speichere im dritten D-Flip-Flop den Wert 1, indem ich den Eingang zu diesem Flip-Flop auf 1 setze. Unmittelbar danach, wenn ich von diesem Flip-Flop lese, erhalte ich 1.
  • t1: CLK ist 0: Wenn ich Q3 abrufe, ist der zurückgegebene Wert 1 -> Ich rufe erfolgreich den Wert ab, den ich zuvor in diesem Flip-Flop bei t0 gespeichert habe.
  • t2: CLK ist 1: Da jetzt CLK 1 ist, hängt Q3 vom Eingang dieses Flipflops ab. Wenn an diesem Punkt der Eingang 1 ist, dann ist der abgerufene Wert 0. Aber es gibt keine Garantie dafür, dass der Eingang dieses Flipflops an diesem Punkt 1 ist. Wenn der Eingang 0 ist, rufe ich 0 ab, was ist nicht der Wert, den ich zuvor bei t0 gespeichert habe.

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.

Ich denke, Sie verwechseln das Taktsignal, das die Flip-Flops antreibt, mit dem Gesamtsystemtakt, der die CPU betreibt. Sie sind nicht die gleiche Uhr.
@ Mike65535 eigentlich sind sie die gleiche Uhr. Was fehlt, ist das Konzept einer Ermöglichung .

Antworten (5)

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:Geben Sie hier die Bildbeschreibung ein

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:

  • Uhr niedrig: erste Stufe offen, zweite Stufe geschlossen
  • Taktanstieg: Datenübertragungen von der ersten zur zweiten Stufe
  • Uhr hoch: erste Stufe geschlossen, zweite Stufe offen (= gehaltene erste Stufe)
  • Uhr fallen: keine Aktion

In einem System ist der Hauptunterschied zwischen einem Latch und einem Flop also folgender:

  • Das Master-Slave-D-Flop-Timing bezieht sich nur auf eine Taktflanke.
  • Das D-Latch-Timing enthält auch die Latch-Open-Zeit (Takt hoch in Ihrem Diagramm).

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:Geben Sie hier die Bildbeschreibung ein

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: -

Geben Sie hier die Bildbeschreibung ein

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: -

Geben Sie hier die Bildbeschreibung ein

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.

In einem typischen System nicht wirklich wahr. Normalerweise ändert sich die Uhr in jedem Zyklus, aber es gibt eine eindeutige Freigabe , ohne die sie ignoriert wird. Das „Gating von Uhren“, so dass sie tatsächlich anhalten, wird als böse Designpraxis angesehen und ist normalerweise nur in langsameren alten oder peripheren Kontexten zu finden.

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.