Verstehen Sie das Timing des Schieberegisters

(Ich lerne das Design digitaler Schaltungen. Entschuldigen Sie, wenn dies eine naive Frage ist.)

Aus der Wikipedia habe ich das folgende Diagramm zum SIPO-Schieberegister gefunden:

Geben Sie hier die Bildbeschreibung ein

Soweit ich weiß, besteht dieses Schieberegister aus DFF (D Flip-Flop). DFF wird an der ansteigenden Flanke der Taktperiode getriggert. Bei jeder ansteigenden Flanke des ClockSignals werden die Daten von also Data Indurch eine Stufe des DFF geleitet.

Meine Frage ist, da das Clockvon allen DFFs geteilt wird, müssen sich alle 4 DFFs im getriggerten/transparenten Zustand befinden, wenn die steigende Flanke eintrifft. Was stellt also sicher, dass sich die Daten durch die only 1DFF-Stufe und nicht durch zwei oder mehr Stufen ausbreiten?

Sagen wir:

  • Tdist die interne Verzögerung für 1 DFF-Stufe, um Daten von D nach Q zu laden.
  • Trist die Dauer der steigenden Flanke der Uhr. Siehe Bild unten.

Geben Sie hier die Bildbeschreibung ein

Ich denke, um die Ausbreitung auf 1 Stufe zu beschränken, muss es sein:

Td < Tr < Td*2

Hab ich recht?

Aber im Link oben steht:

In dieser Konfiguration wird jedes Flipflop flankengetriggert. Das anfängliche Flip-Flop arbeitet mit der gegebenen Taktfrequenz. Jedes nachfolgende Flip-Flop halbiert die Frequenz seines Vorgängers, was sein Tastverhältnis verdoppelt . Infolgedessen dauert es doppelt so lange, bis die steigende/fallende Flanke jedes nachfolgende Flip-Flop auslöst; Dadurch wird die serielle Eingabe im Zeitbereich versetzt, was zu einer parallelen Ausgabe führt.

Es verwirrt mich über einige Dinge.

  • Was halves the frequencybedeutet?
  • Wie könnte ein DFF mit einer Frequenz charakterisiert werden?
  • Funktioniert ein DFF nicht nur an der steigenden Flanke des Takts und ist es im Allgemeinen egal, auf welcher Frequenz sich der Takt befindet?
  • Und wie könnte die Frequenz mit dem Arbeitszyklus zusammenhängen? Die Frequenz bezieht sich auf die Periode, während das Tastverhältnis nur den Prozentsatz einer Periode bedeutet, in der ein Signal oder System aktiv ist . Ich sehe keinen Zusammenhang zwischen Frequenz und Tastverhältnis.

HINZUFÜGEN 1

Wie Neil_UK in seiner Antwort unten sagte, ist das obige Wiki-Zitat einfach falsch. Und er hat die Wiki-Seite repariert.

Wie EM Fields in seiner Antwort unten sagte,

... bis zur nächsten steigenden Taktflanke kann nichts mehr passieren, da die Taktflanke, die die Arbeit erledigt hat, bereits gestorben ist ...

Genau genommen gibt es keine ideal senkrecht ansteigende Flanke. Es sollten einige vorhanden sein, Trwie in der obigen Abbildung gezeigt. Ich denke, um die Ausbreitung des Signals durch die DFF-Stufen zu begrenzen, muss die ansteigende Flanke lange genug dauern, damit sich das Signal durch eine Stufe ausbreitet, und kurz genug , damit sich das Signal nicht zur nächsten Stufe ausbreitet.

Ich denke nur, dass diese Art der Steuerung zu knifflig/empfindlich ist, um wahr zu sein. Aber wenn es wahr ist, wie wird es erreicht? (Ich habe gerade ein Kopfgeld für diese Frage ausgesetzt.)

Was genau meinst du mit "Tr ist die Dauer der steigenden Flanke der Uhr"?
@Elbehery Danke für die Antwort. Ich habe eine Illustration hinzugefügt. Da der Takt von allen DFF-Stufen geteilt wird Tr, denke ich, dass alle DFFs für die Eingabe transparent sein sollten. Deshalb denke ich, dass es notwendig ist, zu kontrollieren, wie weit sich das Signal ausbreiten kann.
Sie wurden durch einen dummen Wikipedia-Eintrag verwirrt. Sehen Sie sich meine Antwort und die aktualisierte Wikipedia-Seite an (möglicherweise müssen Sie Ihren Browser-Cache leeren, um die neue Seite anzuzeigen).

Antworten (9)

Meine Frage ist, da die Uhr von allen DFFs geteilt wird, müssen sich alle 4 DFFs im getriggerten/transparenten Zustand befinden, wenn die steigende Flanke eintrifft. Was stellt also sicher, dass sich die Daten durch nur eine Stufe des DFF statt durch zwei oder mehr Stufen ausbreiten?

Betrachten Sie die Timing-Anforderungen eines typischen D-Flip-Flops .

D-Flip-Flop-Timing

Wie Sie sehen können, gibt es eine Reihe von Parametern; Am wichtigsten sind hier Setup-Zeit, Haltezeit und Laufzeitverzögerung .

Der Eingang (bei D) muss über den angezeigten Zeitraum stabil sein (von t s u zu t h ).

Für diesen speziellen Teil beträgt die erforderliche Mindesthaltezeit 3 ​​ns. Dies ist die Mindestzeit, die der Eingang hinter der Uhr stabil sein muss, um eine garantierte Leistung zu erzielen (dh D wird an Q übertragen).

Aufbau- und Haltezeiten

Jeder Übergang des Eingangs danach wird vom Gerät effektiv ignoriert . Vorausgesetzt, die Taktperiode ist größer als t s u + t h es wird ordnungsgemäß funktionieren.

Schauen wir uns nun die Ausbreitungsverzögerungen an ( t p l h und t p h l )

Aus dem Datenblatt sind dies typischerweise 14 ns:

Ausbreitungsverzögerung

Da dieses Ereignis über die erforderliche Haltezeit hinaus auftritt, hat dieser Übergang am nächsten D-Eingang keine Auswirkung, da der Eingang nun effektiv durch den internen Rückkopplungsmechanismus gesperrt ist.

Beachten Sie, dass die maximale Rate, die ein Schieberegister erreichen kann, ist 1 t s u ( m ich n )   + t p r Ö p ( m a x ) da der D-Eingang mindestens für die Setup-Zeit stabil sein muss, nachdem der vorherige Q-Ausgang stabil geworden ist.

Sofern die Laufzeitverzögerung größer als die Haltezeit ist, kann sie für die maximale Taktrate vernachlässigt werden.

Das Fazit ist also, dass ein einzelnes Taktereignis sich nicht über mehr als ein Flipflop ausbreiten kann, vorausgesetzt, die Ausbreitungsverzögerung von D nach Q ist größer als die erforderliche Haltezeit.

Mit Ihrem Diagramm passiert die Uhr irgendwann t 0 . Die Ausgabe Q 1 nach der Ausbreitungsverzögerung des ersten Flip-Flops ändern wird, aber da dies nach der Eingangsaufbauzeit am zweiten Flip-Flop sein wird, vorausgesetzt, die Ausbreitungsverzögerung des ersten Flip-Flops ist größer als die Eingangshaltezeit des zweiten Flip-Flops (meiner Erfahrung nach immer), dann hat der Übergang bei Q1 (D des zweiten Flip-Flops) keine Auswirkung auf dieses Taktereignis .

Dieser Wikipedia-Link hatte eine falsche Beschreibung, er war für einen kaskadierten Division-durch-2-Zähler. Ich habe den Wikipedia-Eintrag jetzt so angepasst, dass er ein Schieberegister beschreibt. Es ist vielleicht nicht die beste Beschreibung (erledigt in einer Minute), aber zumindest ist es nicht einfach falsch!

Damit die Timings richtig funktionieren, muss die Haltezeit am D-Eingang kleiner sein als die Ausbreitungsverzögerung des Flipflops minus der Taktunsicherheit. Solange diese Bedingung wahr ist, ändern sich die neuen Daten vom vorherigen Flipflop nicht, bis die nächste Stufe die Daten zwischengespeichert hat.

Für einen NXP 74HC74 sehen wir aus dem Datenblatt, dass die Haltezeit im schlimmsten Fall 3 ns beträgt und die Ausbreitungsverzögerung typischerweise 14 ns beträgt, sodass ein Taktversatz von bis zu 11 ns bei diesen Timings kein Problem darstellt (bei 5 V). Beachten Sie jedoch, dass die Ausbreitungsverzögerung in der Regel nicht minimal ist, sodass die Ränder an einem bestimmten Teil viel enger sein können. Aus ziemlich offensichtlichen Gründen sind die meisten D-Flipflops jedoch so konzipiert, dass so etwas in Bezug auf das Timing funktioniert, da es wahrscheinlich auch sein wird, ein besonders schnelles zu bekommen haben kürzere Haltezeitanforderungen.

DFFs sind nicht transparent, sie arbeiten an der Flanke des Taktsignals. Die Taktflanke muss schnell genug sein, damit die Schaltungen richtig funktionieren.

Ein Beispiel ist unten gezeigt:Geben Sie hier die Bildbeschreibung ein

Die erste Stufe ist während der Low-Phase des Takts aktiv. Wenn der Takt ansteigt, speichern die ersten Back-to-Back-verbundenen Inverter (Latch) den aktuellen Zustand und der Eingang wird durch das Übertragungsgatter links zum Knoten X getrennt. Gleichzeitig wird der zweite TG transparent und steuert den zweiten Latch an. Sobald die Uhr wieder auf Low geht, behält der zweite Latch den Wert.

In der Wikipedia-Schaltung bilden die Flip-Flops ein Schieberegister, sie arbeiten alle mit der gleichen Frequenz. Sie könnten als Zähler oder Taktteiler verwendet werden, jedoch würde hierfür eine andere Konfiguration verwendet werden.

Aber wie erreichen Sie 100 % symmetrische phi und phi_bar? Wahrscheinlich würden Sie einen Inverter verwenden, der mindestens eine Gate-Verzögerung zwischen den beiden führt. Jetzt kann Ihr erstes Übertragungsgatter eine '0' etwas länger als eine '1' passieren, und das zweite Übertragungsgatter kann eine '1' etwas länger als eine '0' aufgrund ungleicher Takte passieren. Ähnliche Effekte treten bei den Tristate-Feedback-Geräten auf. Es gibt auch Metallführungen zwischen den Taktpunkten. Nichts ist genau. Diese ideale Analyse verbirgt also nur Probleme, die im wirklichen Leben existieren. Imo.
@jbord39 - Natürlich muss das Timing überprüft werden. Phi und phi_bar symmetrisch zu machen ist nicht so schwierig. Wenn eine Fehlerspanne benötigt wird, könnte eine Verzögerung zwischen den beiden TGs eingeführt werden. Routing ist nur lokal und sehr kurz. Verzögerungen werden in der Regel nach parasitärer Extraktion festgestellt und können ebenfalls verifiziert werden. Natürlich gibt es robustere Designs, aber ich habe dieses schon in Standard-Zellbibliotheken gesehen.
Ja, es ist die ganze Zeit in Standard-Zellbibliotheken, es ist das einfachste DFF. Aber die Uhren werden selten symmetrisch gemacht. Eine Verzögerung von 10 ps/Wechselrichter ist „gut genug“. Die Charakterisierungsmaschine nimmt Anstiegs-/Abfallunterschiede auf und stellt sie trotzdem in Tabellen dar. Mein Punkt ist, dass das OP eine völlig logische Frage aufwirft, die echte Fehler im Design verursacht hat. Es abzublasen, da "es es an der steigenden Flanke sofort erfasst", ist eine große Vereinfachung, aber imo keine sehr gute, wenn es um Nuancen im Timing geht.
@ jbord39 - Mein Punkt ist, dass dieses Design so robust wie nötig gemacht werden kann. Wenn dies zu einem Fehler im Design führt, muss der Designfluss korrigiert werden. Abgesehen davon denke ich, dass Sie zu viel in die Frage interpretieren. Ich verstehe jedoch Ihren Punkt.

Einfach gesagt, der von Ihnen beschriebenen Situation steht nichts außer dem eigenen Wissen des Designers beim Bau entgegen. Denken Sie daran, dass es eine endliche Verzögerung zwischen dem Auslösen der Taktflanke und dem Wechsel des Ausgangs gibt, die normalerweise als clk-to-q oder clk-to-out bezeichnet wird.

Mit einem gewöhnlichen DFF im Transmission-Gate-Stil (heute am häufigsten in CPUs verwendet) in der heutigen Technologie würden Sie höchstwahrscheinlich auf die von Ihnen beschriebene Situation stoßen. Dies wird als Halteverletzung bezeichnet.

Tatsächlich sind Hold-Verletzungen die tödlichsten für digitale Chips. Wenn eine Setup-Verletzung vorliegt, können Sie die Uhr einfach verlangsamen, bis der langsame Pfad nicht mehr fehlschlägt. Bei einer Hold-Verletzung ist jedoch normalerweise nichts zu tun (es sei denn, Sie setzen ausfallsichere Maßnahmen wie bewegliche Clock-Flanken pro Register). Weil sie so tödlich sind, ist es normal, heftig zu paddeln, um Verletzungen des Griffs zu verhindern. Wenn Sie also einen Zykluspfad haben (sagen wir 400 ps bei 2,5 GHz), ist das nur Flop-> Flop; Es gibt keinen Grund, nicht einige Puffer einzubauen. Dies wird sogar gefördert.

Andere erklärten auch, dass DFFs nicht transparent seien. Dies hängt sicherlich vom DFF ab , die meisten VLSI-FFs haben heute eine Transparenz von ein paar Pikosekunden. Andere werden absichtlich so modifiziert, dass sie länger transparent bleiben (Time-Borrowing-Flip-Flop – wodurch zusätzliche Zeit für die Einrichtung gewährt wird und Sie auch gezwungen werden, die gültigen Daten länger zu halten), indem die Master-Uhr relativ zum Slave verzögert wird.

Wenn das Signal das Flip-Flop überspringen würde, würde es als 0-Zyklus-Pfad betrachtet werden. Dies wird normalerweise als „Hold-Verletzung“ angesehen, was bedeutet, dass die Daten nicht lange genug aufbewahrt wurden.

Die Setup- und Haltezeiten jedes Flip-Flops sind unterschiedlich. Wenn sie für die Verwendung in einem Schieberegister entwickelt wurden, kann ich Ihnen fast garantieren, dass sie eine negative Haltezeit haben (verzögern Sie die Uhr zum Slave-Latch relativ zum Master-Latch, was dazu führt, dass der Master-Latch früher schließt und irgendwann nicht transparent wird bevor das Slave-Latch transparent wird). Entweder das, oder das clk->out dieser Flip-Flops kann viel länger als die Haltezeit sein. Oder sie haben eine Verzögerung zwischen den Stufen eingefügt; entweder auf dem Datenpfad oder dem Taktpfad (umgekehrt).

Es ist sehr einfach, dieses Problem zu beheben. Tatsächlich gibt es viele, viele, viele Möglichkeiten, das Problem zu beheben. Zwei einfache: Fügen Sie einfach eine geeignete Verzögerung zwischen jeder Flip-Flop-Stufe ein. Oder setzen Sie eine Verzögerung zwischen dem Takt zu jedem Flip-Flop im Schieberegister; beginnend mit dem letzten in der Kette. Dadurch wird sichergestellt, dass jedes Flip-Flop die stabilen Daten des vorherigen Flip-Flops übernimmt.

Dieses Schema zeigt die Logik der Übertragungsgatter und invertierenden Übertragungsgatter unmittelbar nach der aktiven ansteigenden Flanke des Takts, der die Reihe von Schaltern mit gerade genug Speicherkapazität steuert, damit ein Rückkopplungsschalter diesen Logikpegel isoliert vom Eingang aktiv halten kann.

Drei (3) Stufen von D-Flip-Flops sind unten als Teil eines Schieberegisters dargestellt, das Serial In Parallel Out (SIPO) oder Serial In Serial Out (SISO) sein könnte.

Obwohl der Takt zur bipolaren Ansteuerung von Transmission-Gates invertiert ist, ist er zum vereinfachten Verständnis symbolisch wie eine Relaissteuerung dargestellt.

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Das ist eigentlich eine sehr gute Frage! Wie DFF funktioniert, erfahren Sie hier , für Taktzeiten und Übergänge finden Sie hier eine Antwort , die Folgendes besagt

Die Schmitt-Trigger-Aktion im Takteingang macht die Schaltung sehr tolerant gegenüber langsameren Taktanstiegs- und -abfallzeiten.

Das Implementieren dieser Schmitt-Aktion entfernt die Metastabilität während des Taktübergangs maximal. Somit steigt die Uhr logischerweise nur einmal, wodurch der Trigger seinen Zustand nur einmal überprüft. Für die Taktfrequenz haben DFFs normalerweise Min- und Max-Werte in ihren Datenblättern, um eine synchrone Signalausbreitung innerhalb ihrer logischen Elemente sicherzustellen.

In der SIPO-Konfiguration besteht Ihre Aufgabe darin, sicherzustellen, dass die Ausbreitungsverzögerung durch das DFF kleiner als die Taktperiode plus etwas Schlupf ist, um sicherzustellen, dass das Signal in dem mit dem D-Eingang des nächsten DFF verbundenen Kabel stabil ist.

Wenn der Takteingang eines Flipflops vom "D"-Typ hoch geht, wird der Zustand des D-Eingangs - zu diesem Zeitpunkt - zum Q-Ausgang übertragen und Q bleibt in diesem Zustand, unabhängig von Änderungen in D bis zum nächsten hochlaufende Kante der Uhr.

Andererseits arbeitet ein transparenter Latch, indem Q D folgt, während der Takt hoch ist, und dann den Zustand von D in Q in dem Moment verriegelt, in dem der Takt niedrig wird.

In der Schaltung, die Sie zeigen, ist die Uhr parallel zu allen dflops, so dass, sobald die hochgehende Taktflanke erscheint und der Inhalt von D nach Q übertragen wird - und damit nach D der folgenden Stufe - bis nichts mehr passieren kann die nächste ansteigende Taktflanke, da die Taktflanke, die die Arbeit erledigt hat, bereits gestorben ist.

Im Folgenden wird Ihre Schaltung mit einigen Treibern zum Leben erweckt und ihre Reaktion mit einem Zeitdiagramm veranschaulicht.

Beachten Sie, dass die Ausgangszustände der vorherigen Stufen nur einmal für jede ansteigende Taktflanke durch die folgenden Stufen weitergegeben werden.

Geben Sie hier die Bildbeschreibung ein

Danke für die Antwort. Wie Sie sagten, ... bis zur nächsten steigenden Taktflanke kann nichts mehr passieren, da die Taktflanke, die die Arbeit erledigt hat, bereits gestorben ist . Genau genommen gibt es keine ideale vertikale ansteigende Flanke, wie die Trin meiner Frage zeigt. Ich denke also, dass die ansteigende Flanke lange genug dauern muss, damit sich das Signal durch eine Stufe ausbreitet, und kurz genug , damit sich das Signal nicht zur nächsten Stufe ausbreitet. Ich denke nur, dass diese Art der Steuerung zu knifflig/empfindlich ist, um wahr zu sein. Aber wenn es wahr ist, wie wird es erreicht?

Es funktioniert so, dass jeder DFF für einen sehr kurzen Zeitraum aktiviert wird. Um ein Latch in ein Flip-Flop zu verwandeln, verwenden Sie so etwas wie die folgende Schaltung auf seinem Freigabesignal. Uhr RandAls Eingang ist die Uhr angeschlossen. Bei steigender Flanke wird nur ein sehr kurzer Impuls erzeugt. Angenommen, der Takt ist anfangs auf 0. Die Ausgänge der NICHT-Gatter in das UND-Gatter sind hoch. Wenn Sie die ansteigende Flanke des Takts erhalten, sind beide Eingänge des UND-Gatters hoch und erzeugen Ihr hohes Aktivierungssignal. Kurz danach breitet sich jedoch der hohe Takt durch die Nicht-Gatter aus und der Ausgang des UND-Gatters wird wieder niedrig.

Sie können dies ziemlich genau zeitlich festlegen, indem Sie die Transistorabmessungen in den NICHT-Gattern auswählen. Der Freigabeimpuls hat genau die richtige Länge, damit sich das Signal in Ihrem Schieberegister einmal ändert und keine Mehrfachausbreitung hat. Dies ist natürlich prozessabhängig und ziemlich schwierig, es richtig zu machen.

Da muss ich dir widersprechen. Das Hinzufügen dieser Schaltung zu einem Latch macht es einfach zu einem "Impuls-Latch": eetimes.com/document.asp?doc_id=1271447 Um ein Latch in ein Flip-Flop (echtes FF) umzuwandeln, nehmen Sie zwei Latches, legen sie Rücken an Rücken und Geben Sie ihnen entgegengesetzte Phasentakte als Freigaben. Sie können dies mit jeder Art von Verriegelung tun. JK, D, SR usw.; es spielt keine Rolle - der grundlegende Unterschied zwischen einem Latch und einem Flip-Flop liegt in der Master-Slave-Topologie.
Obendrein stimmt es einfach nicht. Puls-Latches WERDEN verwendet, aber sie müssen wegen ihrer dynamischeren Natur stark am Rand gehalten werden. Zum Beispiel, wie Sie sicherstellen müssen, dass der Impuls lang genug ist, damit Daten sowohl bei niedrigen als auch bei hohen Spannungen über alle Temperaturen und Prozessecken hinweg geschrieben werden können. Dies ist sicherlich möglich, aber wahrscheinlich 3-5x schwieriger als ein herkömmliches Master-Slave-Flip-Flop.