PRESET und CLEAR in einem D-Flip-Flop

Ich versuche zu verstehen, wie PRESET und CLEAR bei einem durch eine positive Flanke ausgelösten D-Flip-Flop funktionieren, aber ich vermisse möglicherweise etwas, von dem ich hoffe, dass jemand es bitte klären kann.

Abbildung 1 unten zeigt das betreffende Flip-Flop. Ich benutze rot für hoch und blau für niedrig. Die positive Flankenerkennungsvorrichtung ist ein UND-Gatter mit einem NICHT-Gatter. Der Ausgang des Flankendetektors in diesem Diagramm ist niedrig, sodass der Zustand des Flipflops nicht durch eine Änderung von D geändert werden kann.

Abbildung 2 unten zeigt einen kurzen Moment, in dem die Taktflanke ansteigt. Der Ausgang des Flankendetektors ist hoch, also ändert sich Q, um mit D übereinzustimmen.

Und Abbildung 3 unten ist ein weiterer Moment, in dem die Taktflanke ansteigt, also tastet Q wieder D ab und ändert sich entsprechend.

Solange PRE und CLR beide hoch sind, verhält sich das Flip-Flop genau so, wie ich es erwarten würde. Ein NAND-Gatter mit drei Eingängen gibt nur dann eine 0 aus, wenn alle drei seiner Eingänge hoch sind.

Aber hier ist meine Anfrage. In Abbildung 4 unten geht der aktive Low-CLR-Eingang auf Low, während eine steigende Flanke vorhanden ist, sodass das Flip-Flop aktiviert ist. Die Umkehrung von Q ist jetzt hoch, aber Q ist nicht wie erwartet auf 0 gesetzt. Es gibt immer noch einen niedrigen Eingang zum oberen rechten NAND-Gatter, also ist Q immer noch hoch.

In Abbildung 5 unten wurde der aktive Low-PRE-Eingang auf Low gesetzt. Dies geschieht wieder an der steigenden Flanke, während D niedrig ist. Es wird Q so hoch machen, wie es sollte, aber die Umkehrung von Q ist auch hoch.

Die meiste Zeit gibt es keine steigende Flanke, und PRE und CLEAR verhalten sich korrekt, wie in Abbildung 6 und Abbildung 7. Ich mache mir Sorgen, weil viel Literatur (Websites usw.) sagt, dass die PRE- und CLR-Eingänge asynchron und völlig unabhängig vom Eingang an D und vom Takt sind. Kann mir das bitte jemand erklären?

Geben Sie hier die Bildbeschreibung ein

Sie sind asynchron klar und voreingestellt. Dies sollte offensichtlich sein, da sie mit dem Ausgang über ein NAND-Gatter interagieren, das nicht von der Uhr gesteuert wird.

Antworten (1)

Sie sind asynchron PRESET und CLEAR (aktiv niedrig). Bei diesem Aufbau gibt es die Einschränkung, dass PRE und CLR nicht beide gleichzeitig aktiv (niedrig) sein können (andernfalls sind sowohl Q als auch Q' 1). Sie könnten einer Priorität geben, wenn Sie wollten, indem Sie die Topologie ein wenig ändern.

Wenn außerdem entweder PRE oder CLR an der steigenden Taktflanke aktiv (niedrig) sind, werden die Ausgangszustände nicht unbedingt invertiert (wie Sie darauf hingewiesen haben). Da der Flankendetektorimpuls jedoch schmal ist, breiten sich PRE oder CLR schnell durch Q und Q' aus, nachdem der Flankendetektorimpuls endet, vorausgesetzt, sie werden über die Länge des Impulses gehalten .

Im Wesentlichen gewinnt, was länger hält: Entweder werden die Daten durchgelassen, wenn der Flankendetektorimpuls länger aktiv bleibt als die PRE/CLR-Signale aktiv (niedrig) bleiben, oder die PRE/CLR-Signale bleiben länger aktiv als die Flanke Detektorimpuls und überschreiben, was auch immer D dort eingegeben hat.

In der Praxis würden diese Beschränkungen durch die Charakterisierungsdateien der Bibliothek dargestellt. Es würde einen Setup-and-Hold-Bogen geben, der das Timing zwischen dem Takt, d, PRE und CLR definiert, um unerwünschte Zustände zu verhindern.

Oder, wenn die Schaltung auf eine kundenspezifischere Weise verwendet würde, müssten ihre Designer sicherstellen, dass sie die Funktionsweise des Impulsspeichers (nicht wirklich ein Flip-Flop, imo) verstehen und wie man ihn richtig aktiviert oder zurücksetzt.

Sie können leicht erkennen, dass PRE und CLR asynchron sind, indem Sie sich den Signalfluss ansehen. PRESET und CLR werden ohne Gating durch das CLK-Signal (was sie synchron machen würde) zum Ausgang geleitet.

Um sich das selbst zu beweisen, gehen Sie davon aus, dass die Uhr nicht umschaltet und sowohl PRESET als auch CLEAR '1' (inaktiv) sind. Außerdem kann diese Schaltung nicht gleichzeitig sowohl PRE als auch CLR niedrig haben.

Nehmen Sie auch die Anfangszustände für Q und Q' an:

PRE = 1, CLEAR = 1
Q = 1, Q' = 0

Solange Sie nichts berühren, bleibt alles so wie es ist (gerastet).

Ziehen Sie jetzt CLR auf '0' herunter, ohne die Uhr oder die Daten umzuschalten.

Beispiel

Wie in der Abbildung oben gezeigt, wird dadurch Q von „1“ auf „0“ gelöscht. Und die Uhr wurde nicht umgeschaltet. Dies bedeutet, dass die Schaltung asynchron ist. Von hier aus kann das CLR-Signal deaktiviert (auf High zurückgeführt) werden und die Schaltung behält weiterhin ihren Zustand.

Gut zu erkennen ist das Gating des Taktgebers relativ zu den Clear/Enable/Reset-Signalen.

Tausend Dank für die klare Antwort. Der von Ihnen erwähnte Setup-Bogen verdeutlicht dies für mich - ich nehme an, dass entweder PRE oder CLR normalerweise länger als die Dauer der Kante niedrig gehalten werden. Sie sagten, dass mein Diagramm Ihrer Meinung nach eher ein Latch als ein FF zeigte, und ich frage mich, warum? Ich dachte, dass ein FF per Definition ein flankengesteuertes Gerät ist und dass mein Diagramm ein solches Gerät zeigt? Dies wirft eine andere Frage auf; Warum verwenden einige D-FFs die Master-Slave-Konfiguration zur Flankenerkennung und nicht die Kombination aus UND- und NICHT-Gatter in meinem Diagramm (was viel einfacher ist)?
Ich würde es als Impuls-Latch bezeichnen, da es sich nicht um eine echte Master-Slave-Topologie, sondern um ein Latch in Kombination mit einem Impulsgenerator handelt. Das Speicherelement ist also für die Dauer des Impulses pegelempfindlich. Im Gegensatz zu einem normalen Master-Slave, der (wenn es keinen Taktversatz gibt) wirklich flankengetriggert ist. Sie werden in der Praxis ein gutes Stück verwendet, haben aber Nachteile. Durch die Dauer des Impulses ist ein „Zeitborgen“ eingebaut. Dies könnte gut sein, wenn Sie ein paar % des Zyklus mehr benötigen (die Setup-Zeit wird immer geringer, je länger der Impuls gehalten wird, aber diese Verzögerung zeigt sich im nächsten Zyklus).
Der häufigste Grund, warum sie nicht verwendet werden, ist, dass es nicht garantiert ist, dass normale CMOS tatsächlich funktionieren (sie werden häufig in benutzerdefinierten Blöcken in bestimmten Unternehmen verwendet). Sie müssen es für alle Ecken (langsame nmos/schnelle pmos usw.) eingrenzen, damit der Impuls vom Kantendetektor breit genug ist, um die Eingangsdaten D tatsächlich vollständig zu erfassen. Dies kann schwierig sein, insbesondere bei niedriger Spannung, ohne Ausweichen zu unerschwinglich großen Verzögerungsketten im Flankendetektor (1 Inverter reicht normalerweise nicht aus, würde wahrscheinlich 3 benötigen).
@Drummy: Ich bin mir nicht sicher, ob Sie die Funktion "Antwort akzeptieren" kennen. Nur für den Fall, dass Sie dachten, das wäre das, wonach Sie suchen :P