Wenn die Ausgabe eines D-Flip-Flops sofort an der Taktflanke erscheint, wie kann die vorherige Ausgabe verwendet werden?

So wie ich es verstehe, erscheint der Eingangswert (D) eines D-Typ-Flipflops sofort am Ausgang (Q) eines D-Typ-Flipflops, wenn er durch eine positive Taktflanke ausgelöst wird. Wenn dies der Fall ist, wie kann dann der Wert vor der Taktflanke als Eingabe für ein anderes getaktetes Flipflop verwendet werden? Nach diesem Modell gibt es am Rande der Uhr überhaupt keinen besonderen Wert.

Natürlich funktionieren Flip-Flops, also ist mein Verständnismodell falsch. Kann das also jemand etwas genauer ausführen?

Antworten (4)

Wenn Sie das Datenblatt für einen echten D-FF genau untersuchen, sehen Sie einen Punkt namens "Setup-Zeit". Tatsächlich erfasst der FF den Wert nicht genau zum Zeitpunkt der Taktflanke; Die Daten müssen für die letzten 20 ns oder so stabil sein, bevor die Uhr ansteigt, und das ist der Wert, der übertragen wird. Außerdem braucht der Wert am Ausgang einige ns, um sich auf den (möglicherweise) geänderten Wert einzupendeln. Wenn Sie also eine Reihe von D-FFs miteinander verketten, Q von einem in das D des nächsten, funktioniert alles, weil während der kritischen Zeit für den D-Eingang jeder Stufe die Qs stabil sind; die Q's ändern sich nur sehr kurz nach der aktiven Taktflanke.

Die Schlüsselspezifikation ist nicht die Rüstzeit, sondern die Haltezeit; siehe meine Antwort unten.

Die Setup- und Hold-Zeiten eines D-Flip-Flops spezifizieren zusammen ein Intervall, während dessen jede Änderung an der Dateneingabe willkürliches Verhalten hervorrufen kann. Wenn ein Flip-Flop eine Setup-Zeit von 7 ns und eine Haltezeit von 5 ns hat, bedeutet dies, dass das Verhalten des Latch nicht garantiert ist, wenn eine Taktflanke innerhalb von 7 ns nach einer Eingangsänderung auftritt oder sich der Eingang innerhalb von 5 ns nach einer Taktflanke ändert . Es ist möglich, dass entweder die Setup- oder die Haltezeit (aber nicht beide) negativ sind; die Größe des anderen Zeitüberschusses größer sein als die der negativen Zeit. Hätte ein Latch z. B. eine vorgegebene Setup-Zeit von 11ns und eine Haltezeit von -4ns, würde das bedeuten, dass das Verhalten des Latch garantiert wäre, es sei denn, der Takteingang ändert sich zwischen 11 und 4ns nach einer Änderung des Dateneingangs.

Beachten Sie, dass Setup- und Hold-Zeiten zwar normalerweise als Maxima angegeben werden, aber in Wirklichkeit absolute Worst-Case-Werte sind, da der Hersteller keine Garantie dafür übernimmt, was passieren würde, wenn sie verletzt würden. Nehmen wir zum Beispiel an, dass Chip X Setup- und Haltezeiten von 10 ns hat, während Chip Y Setup- und Haltezeiten von 1 ns hat und dass beiden Chips ein Datensignal zugeführt wird, das sich 7 ns vor einer Taktflanke ändert. Chip Y wäre erforderlich, um das Datensignal korrekt zwischenzuspeichern; Chip X könnte fast alles tun - einschließlich des korrekten Zwischenspeicherns des Datensignals - und als spezifikationsgerecht angesehen werden. Es wäre für einen Hersteller sinnlos, eine minimale Einrichtungszeit anzugeben (es sei denn, die Absicht war wirklich, anzugeben, dass die maximale Haltezeit negativ ist, in diesem Fall sollte dies in der Spezifikation stehen).

Nahezu jeder Prozess, der zur Herstellung von Flip-Flops verwendet wird, garantiert effektiv, dass die kürzeste Ausbreitungszeit für alle Flip-Flops auf dem Chip länger ist als die längste Einrichtungszeit für alle ähnlich spezifizierten Flip-Flops. In den meisten Fällen scheint sich diese Garantie effektiv auf andere Chips im selben Herstellungslos zu erstrecken, aber es ist unklar, wie weit sie wirklich reicht. In vielen Fällen spezifizieren Hersteller, dass die Haltezeit eines Chips nicht länger als ein bestimmter Betrag sein wird und dass die Ausbreitungszeit nicht länger als ein bestimmter Betrag sein wird, es sei denn, die Haltezeit ist null oder negativ oder es wird eine minimale Ausbreitungszeit angegeben Es ist länger als die erforderliche Haltezeit. Ich glaube nicht, dass die Datenblätter tatsächlich den korrekten Betrieb für kaskadierende Verriegelungen angeben. Sicherlich es'

Ein Ansatz, der bei einigen Protokollen wie SPI verwendet wird und den ich gerne häufiger sehen würde, besteht darin, die Ausgangsstufe jedes Latch auf der entgegengesetzten Taktflanke des Eingangs ändern zu lassen. Ich bin mir nicht sicher, warum dieser Ansatz nicht mehr verwendet wird; während es Zeiten gibt, in denen es unnötig und verschwenderisch wäre (wenn man weiß, dass die Ausbreitungszeit der Schaltung zwischen zwei Latches ausreichen würde, um die Haltezeit des nachgeschalteten Latches zu erfüllen, wenn sich der Ausgang des vorgeschalteten Latches im selben Takt ändert Flanke beim Abtasten des Downstream-Latch würde höhere Taktgeschwindigkeiten ermöglichen), macht es auch möglich, die Korrektheit vieler Schaltungen zu garantieren, die gemischte Logikfamilien beinhalten – etwas, das andernfalls schwierig sein könnte.

Die Datenänderung an der negativen Taktflanke ist tatsächlich so, wie mein Lehrer sagte, dass es sich verhält, aber es scheint, dass dies nicht sehr häufig vorkommt, und das hat mich verwirrt. Aber jetzt macht es auf jeden Fall Sinn :)
@Emil Eriksson: Ich bin überrascht, dass es nicht mehr "Jellybean" -Chips (74xx und 40xx usw.) gibt, die an einer Kante abtasten und an der anderen ausgeben. Bei Designs innerhalb eines Chips ist es im Allgemeinen kein Problem sicherzustellen, dass die Takte verteilt werden, um die Setup/Hold-Anforderungen zu erfüllen, und Latches, die sich gegenseitig speisen, können als Teil desselben Prozesslos angenommen werden (da sie sich natürlich auf demselben befinden). sterben). Beim Wechseln zwischen den Chips ist es schwieriger sicherzustellen, dass die Setup/Hold-Zeiten eingehalten werden. Ich bin wirklich neugierig, warum das Split-Clock-Verhalten nicht häufiger vorkommt ...
@Emil Eriksson: ... zumal es in Silizium tatsächlich einfacher zu implementieren ist als ein Chip, bei dem sich der Ausgang an derselben Kante wie der Eingang ändert.

Ausbreitungsverzögerung.

Genau wie bei einem Inverter oder tatsächlich jedem anderen Logikgatter ändert sich der Ausgang nicht sofort mit dem Eingang.

Beispielsweise sind für den 74F74 , ein Dual-D-Flip-Flop mit dedizierten S- und R-Eingängen, zwei Ausbreitungsverzögerungen spezifiziert: "Ausbreitungsverzögerung CPn zu Qn oder Qn#" und "Ausbreitungsverzögerung "SDn#, RDn# zu Qn". oder Qn#". Beide benötigen im ungünstigsten Fall weniger als 11 ns.

Nun macht es Spaß, darüber nachzudenken, was passieren würde, wenn Logikgatter keine Laufzeitverzögerung hätten. Nehmen wir den D-Typ, der als Binärzähler eingerichtet ist. Angenommen Q = 0, Q# = 1. Am Taktstift tritt eine steigende Flanke auf. Sofort (in Nullzeit) wird Q# auf Q übertragen. Jetzt kann die Logik zum Erkennen der ansteigenden Flanke bei allen Logikgattern für einige Zeit, sagen wir einige ns, eine ansteigende Flanke ausgeben. Für diese wenigen ns (muss aus Stabilitätsgründen kürzer als die Ausbreitungsverzögerung sein, aber in diesem Fall größer) erhalten wir Oszillationen. Q# wird 0 und wird an Q übertragen. Dann wird Q# 1 und wird an Q übertragen ... und so weiter. Die Ausgabe wird als unbestimmt bezeichnet .

Dies bedeutet nicht, dass das D-Flipflop, das den Ausgang ausgibt, sofort
das Eingangssignal gemäß seinen Anschlüssen auswertet und den Ausgang ausgibt.
Ich werde Sie nur an die Wahrheitstabelle von JK-Flipflop erinnern:

Geben Sie hier die Bildbeschreibung ein

Hier in D-Flipflop sieht der Schaltplan so aus:Geben Sie hier die Bildbeschreibung ein

und es Wahrheitstabelle ist:
Geben Sie hier die Bildbeschreibung ein

Verwenden Sie hier diese Eingänge für diese Schaltung, indem Sie den vorherigen Zustand berücksichtigen. Dann
erhalten Sie die gleiche Ausgabe wie die Eingabe, die Sie dem D-Flip-Flop gegeben haben.
Das bedeutet jedoch nicht, dass der vorherige Zustand nicht verwendet wird .