Einführung in Clock Domain Crossing: Double Flopping

In diesem Artikel wird eine bekannte Technik namens “Double Flopping” zur Übertragung eines Ein-Bit-Steuersignals zwischen zwei Clock-Domänen behandelt.

Es ist üblich, mehrere Taktsignale in einem digitalen System zu verwenden. Da die Taktsignale verschiedener Taktdomänen im Allgemeinen unabhängig sind, kann die Übertragung von Daten zwischen den verschiedenen Taktdomänen eine herausfordernde Aufgabe sein. In diesem Artikel wird eine bekannte Technik namens “Double Flopping” beschrieben, um ein Ein-Bit-Steuersignal zwischen zwei Taktdomänen zu übertragen.

Warum brauchen wir mehrere Uhren?

Die allgemeine digitale Entwurfsmethodik empfiehlt die Verwendung eines Taktsignals für das gesamte System, hauptsächlich weil es sowohl das Entwurfsverfahren als auch die Systemzeitanalyse vereinfacht. Diese Methode bietet jedoch nicht immer die effizienteste Lösung, und manchmal ist es nicht einmal möglich, eine einzelne Uhr für das gesamte System zu haben. Betrachten Sie beispielsweise ein FPGA-Design, das mit 20 MHz arbeitet und mit zwei externen Geräten über Schnittstellen kommuniziert, die mit 100 MHz und 150 MHz arbeiten. Hier haben wir es mit drei verschiedenen Taktfrequenzen zu tun. Beachten Sie, dass die Taktfrequenz der Schnittstellen vordefiniert werden kann und wir sie möglicherweise nicht basierend auf dem im FPGA verwendeten Takt auswählen können.

Manchmal können wir die Taktfrequenz für die verschiedenen Teile des Systems auswählen, aber selbst in diesem Fall ist es möglicherweise keine gute Idee, das gesamte System mit einer bestimmten Taktfrequenz zu betreiben. Angenommen, das gesamte System kann mit 20 MHz betrieben werden, mit Ausnahme eines Subsystems, das einen 100-MHz-Takt benötigt. Wenn wir uns entscheiden, ein Taktsignal für das gesamte System zu verwenden, müssten wir das System mit 100 MHz betreiben, um die höchste im System verfügbare Taktrate unterzubringen. Dies ist offensichtlich nicht sinnvoll, da wir nicht nur einen großen Teil des Systems überdesignt haben (Teile, die mit 20 MHz betrieben werden könnten), sondern auch den dynamischen Stromverbrauch des Systems unnötig erhöht haben. Wie Sie sehen, gibt es viele Umstände, unter denen wir unterschiedliche Taktraten für verschiedene Teile des Systems verwenden müssen.

Ein Abschnitt des Designs, in dem alle synchronen Elemente, wie Flip-Flops und RAMs, dasselbe Taktsignal verwenden, wird als Taktdomäne bezeichnet. Verschiedene Uhrendomänen zu haben, kann vorteilhaft sein, ist aber nicht so einfach, wie es scheint. Im nächsten Abschnitt werden einige der Probleme erläutert, mit denen wir bei der Verwendung eines Systems mit mehreren Uhren konfrontiert sein können.

Das Metastabilitätsproblem

Angenommen, wir haben zwei Logikabschnitte, A und B, die bei 50 MHz bzw. 100 MHz arbeiten. Dies ist in Abbildung 1 dargestellt.

Abbildung 1

In unserem einfachen Beispiel hat die B-Sektion einen Eingang, En_In, der mit dem En_Out-Ausgang der A-Sektion verbunden ist. Diese Verbindung entspricht einem Aktiv-Hoch-Freigabesignal, das einen Algorithmus in B initiiert, nachdem eine bestimmte Operation von A ausgeführt wurde. Abbildung 1 zeigt das Register, das das Freigabesignal in A erzeugt, und das Register, das es in B empfängt.

Angenommen, die Taktverläufe sind wie in Abbildung 2 dargestellt und das System wird mit steigender Flanke getriggert. Da das En_Out-Signal von der A-Taktdomäne erzeugt wird, kann sein Übergang von niedrig nach hoch nach einer ansteigenden Flanke von clk1 auftreten, wie in der Abbildung gezeigt. Die Verzögerung zwischen der clk1-Anstiegsflanke und dem En_Out-Übergang entspricht der Takt-zu-Q-Verzögerung ($$T_{clk-zu-Q, DFF1} $$) des Flip-Flops im A-Logikabschnitt. Nun erwarten wir, dass das DFF2-Register in der B-Domäne das Freigabesignal bei der nächsten ansteigenden Flanke von clk2 bei $$ t = t_2 $$ abtastet. Die Abtastung wird erfolgreich durchgeführt, vorausgesetzt, die zeitlichen Anforderungen des DFF2 sind erfüllt, dh $$t_1+T_{clk-to-Q, \; DFF1} \leq t_2-T_{setup, \; DFF2}$$.

Abbildung 2

In Abbildung 2 ist die Bedingung $$t_1+T_{clk-to-Q, \; DFF1} \leq t_2-T_{setup, \; DFF2}$$ erfüllt, dies ist jedoch nicht immer der Fall. Beachten Sie, dass die Taktsignale verschiedener Taktdomänen im Allgemeinen unabhängig sind. Wir kennen ihre Phasenbeziehung nicht und die Wellenformen können wie in Abbildung 3 gezeigt sein. In diesem Fall liegt der Low-High-Übergang des Enable-Signals so nahe an der ansteigenden Flanke von clk2, dass die Bedingung $$t_1+T_{clk-to-Q, \; DFF1} \leq t_2-T_{q, \;DFF2}$$ nicht erfüllt ist.

Abbildung 3

Da sich die Eingangsdaten von DFF2 innerhalb der Rüstzeit geändert haben, ist das Registerverhalten unvorhersehbar. Aufgrund der Rüstzeitverletzung könnte die Registerausgangsspannung der Wert sein, der ein logisches High, ein logisches Low oder noch schlimmer einen Wert zwischen der logischen High- und der logischen Low-Spannung darstellt. Diese drei Fälle sind möglich, während die Eingangsdaten bei der entsprechenden Taktflanke tatsächlich logisch hoch waren. In ähnlicher Weise ist der Ausgangswert des Registers unvorhersehbar, wenn die Registerhaltezeit verletzt wird, d. h. En_Out ändert sich innerhalb eines Zeitfensters nach der aktiven Taktflanke, die durch die Registerhaltezeit definiert ist. Wenn der Ausgang des Registers bei einer Spannung zwischen den logisch hohen und logisch niedrigen Spannungen unterbrochen wird, sagen wir, dass das Flip-Flop in einen metastabilen Zustand eingetreten ist.

Lassen Sie uns die drei möglichen Fälle aus der Verletzung von Abbildung 3 einzeln untersuchen:

  • Nehmen wir als ersten Fall an, dass der Ausgangswert des DFF2 logisch hoch wird, wobei die clk2-Flanke bei $$t= t_2 $$ ansteigt. In diesem Fall liegt kein Fehler vor und das Flip-Flop enthält gültige Daten, obwohl wir eine Verletzung der Einrichtungszeit hatten. Die Daten gehen erwartungsgemäß ohne Fehler über.
  • Der zweite Fall: Angenommen, der DFF2-Ausgang geht logisch niedrig mit der clk2-Anstiegsflanke bei $$t= t_2 $$. In diesem Fall wird das Freigabesignal in der B-Taktdomäne nicht erfolgreich abgetastet. Dies ist jedoch kein Problem, da En_Out aus der A-Taktdomäne stammt und für mindestens eine Periode von clk1 hoch ist, wie in Abbildung 3 gezeigt. Daher wird die nächste steigende Flanke von clk2 bei $$ t = t_3 $$ den En_Out-Wert korrekt abtasten. Für diese Taktflanke sind die Timing-Anforderungen von DFF2 erfüllt, da sich En_Out für mehr als eine Periode von clk2 nicht geändert hat. In diesem Fall nehmen wir En_Out etwa eine Taktperiode später ab, als es tatsächlich übergegangen ist. Dies ist jedoch kein Problem, da die Uhren der beiden Uhrendomänen als unabhängig angenommen wurden und wir keine Annahme über die Ankunftszeit des En_Out-Signals gemacht haben. Tatsächlich realisiert die Schaltung in der B-Taktdomäne das Ende von Berechnungen der A-Taktdomäne mit einer zusätzlichen Verzögerung von einer clk2-Periode.
  • Als nächstes wird angenommen, dass das DFF2-Register in den metastabilen Zustand eintritt. In diesem Fall wird der Registerausgang bei einer Spannung zwischen den logisch hohen und logisch niedrigen Spannungen unterbrochen, aber dies wird vorübergehend sein. Das Flip-Flop wird schließlich den metastabilen Zustand verlassen und zu logic High oder Logic low gehen. Die Zeit, die benötigt wird, um den metastabilen Zustand zu verlassen, wird als Auflösungszeit $$T_r$$ bezeichnet. Dies ist in Abbildung 4 dargestellt. In dieser Figur ist die Rüstzeitverletzung aufgetreten und das Flip-Flop ist für ein Zeitintervall von $$T_r$$ in den metastabilen Zustand eingetreten. Nach $$T_r $$ geht der Flip-Flop-Ausgang entweder auf logisch hoch ($$Q2_{meta-to-1} $$) oder logisch niedrig ($$Q2_{meta-to-0} $$).

Abbildung 4

Die Auflösungszeit ist nicht deterministisch und wird als Wahrscheinlichkeitsverteilungsfunktion beschrieben

$$P(T_r)=e^{\frac{-T_r}{\tau}}$$

Wobei $$\ tau $$ die “Abklingzeitkonstante” ist und durch die elektrischen Eigenschaften des Flip-Flops bestimmt wird. Ein typischer Wert für diesen Parameter beträgt etwa einen Bruchteil einer Nanosekunde.

Die obige Gleichung gibt die Wahrscheinlichkeit an, nach der Abtasttaktflanke für ein Zeitintervall gleich $$T_r$$ im metastabilen Zustand zu verbleiben. Aufgrund der exponentiellen Eigenschaft der Gleichung nimmt die Wahrscheinlichkeit schnell ab, wenn wir den Wert von $$ T_r $$ erhöhen. Zum Beispiel erhalten wir für $$ \ tau = 0,5 $$ ns und $$ T_r = 5 $$ ns eine Wahrscheinlichkeit von $$ \ ca. 4,5 \ mal 10 ^{-5} $$.

Zusammenfassend können wir die Metastabilität nicht verhindern, da die Taktsignale der beiden Taktdomänen voneinander unabhängig sind. Wenn wir das Flip-Flop jedoch mit einer ausreichend großen Auflösungszeit versehen, wird es mit hoher Wahrscheinlichkeit in einen stabilen Zustand aufgelöst. Wenn unser Design Flip-Flops enthält, die in den Metastabilitätszustand eintreten könnten, sollten wir dem Flip-Flop genügend Zeit geben, um die Metastabilität zu verlassen. Dann können wir den Wert des Flip-Flops sicher an die nachgeschalteten Logikzellen weitergeben. Beachten Sie, dass die Verwendung eines metastabilen Werts das gesamte System in einen unbekannten Zustand versetzen kann. Es kann zu einem hohen Stromfluss und im schlimmsten Fall sogar zum Chip-Burnout kommen. Daher sollten wir vermeiden, instabile Daten in das System einzuspeisen.

Double Flopping

Wir haben gesehen, dass eine ausreichende Zeit für das Flip-Flop die Wahrscheinlichkeit, im metastabilen Zustand zu bleiben, erheblich verringern kann. Mal sehen, wie dies verwendet werden kann, um die Ausbreitung metastabiler Daten im System zu vermeiden. Betrachten Sie das Blockdiagramm in Abbildung 5. Dies zeigt einen typischen Pfad in der B-Taktdomäne von Abbildung 1, der das En_In-Signal empfängt und verarbeitet.

Abbildung 5

Die minimale Taktperiode, die zum Betrieb dieser Schaltung verwendet werden kann, ist

$$T_{clk, \; min} = T_{clk-to-Q} + T_{comb, \; max} + T_{einrichten}$$

wobei $$T_{clk-to-Q}$$ und $$T_{setup}$$ die Clock-to-Q und die Rüstzeit der Flip-Flops sind und $$T_{comb, \; max}$$ die maximale Verzögerung ist, die die Kombinationsschaltung “Comb.”, Exponate. Diese Gleichung wird erhalten, indem angenommen wird, dass die Ausgangsdaten von DFF2 stabil sind. Wenn dies nicht der Fall ist, müssen wir eine Auflösungszeit wie in der folgenden Gleichung berücksichtigen:

$$T_{clk, \; min} = T_{clk-to-Q} + T_r + T_{comb, \; max} + T_{einrichten}$$

Der Wert der Auflösungszeit bestimmt die Wahrscheinlichkeit, aus dem metastabilen Zustand herauszukommen. Angenommen, die Periode von clk2 ist $$T_{clk2}$$. Dann ist der Wert der verfügbaren Auflösungszeit

$$T_r = T_{clk2} – \big ( T_{clk-to-Q} + T_{comb, \; max} + T_{setup} \big )$$

Um die Wahrscheinlichkeit zu verringern, in einem metastabilen Zustand zu bleiben, sollten wir $$ T_r $$ erhöhen. Bei einer gegebenen Taktperiode $$T_{clk2}$$ besteht die einzige Designoption darin, den Parameter $$T_{comb, \; max}$$ zu minimieren. Deshalb sollten wir besser den “Kamm” setzen.” blockieren Sie nach dem DFF3-Flip-Flop wie in Abbildung 6 gezeigt. Auf diese Weise ist $$T_{comb, \; max}$$ theoretisch Null für den Pfad zwischen DFF2 und DFF3. Daher haben wir die maximal mögliche Auflösungszeit.

Abbildung 6

Diese Technik wird als Double Flopping bezeichnet und wird häufig verwendet, wenn Steuersignale wie das obige Freigabesignal zwischen zwei Taktdomänen übertragen werden. Beachten Sie, dass das zusätzliche Register eine weitere Verzögerung von einer Taktperiode in das von der B-Taktdomäne erfasste Freigabesignal einführt. Diese Verzögerung ist jedoch den Vorteil wert, metastabile Zustände im System zu vermeiden.

In diesem Artikel wurde das Übergeben eines Aktivierungssignals von einer langsamen Taktdomäne an eine schnelle Taktdomäne behandelt. Möglicherweise müssen Sie sich mit verschiedenen anderen Techniken vertraut machen, z. B. dem Übergeben eines Steuersignals von der schnellen in die langsame Taktdomäne, der Handschütteltechnik und der FIFO-basierten Datenübertragung zwischen den Taktdomänen. Einige Details finden Sie in Kapitel 16 von RTL Hardware Design Using VHDL: Coding for Efficiency, Portability, and Scalability und Kapitel 6 von Advanced FPGA Design: Architektur, Implementierung und Optimierung.

Zusammenfassung

  • Es gibt viele Umstände, unter denen wir unterschiedliche Taktraten für verschiedene Teile des Systems verwenden müssen.
  • Da die Taktsignale verschiedener Taktdomänen im Allgemeinen unabhängig sind, kann die Übertragung von Daten zwischen den verschiedenen Taktdomänen eine herausfordernde Aufgabe sein.
  • Der Ausgabewert eines Registers ist unvorhersehbar, wenn eine Rüstzeit- oder Haltezeit-Verletzung auftritt. Es könnte den Wert enthalten, der ein logisch hohes, ein logisch niedriges oder noch schlimmer einen Wert zwischen den Spannungen logisch hoch und logisch niedrig darstellt.
  • Die Zeit, die benötigt wird, um den metastabilen Zustand zu verlassen, wird als Auflösungszeit $$T_r$$ bezeichnet.
  • Wenn unser Design Flip-Flops enthält, die in den Metastabilitätszustand eintreten könnten, sollten wir dem Flip-Flop genügend Zeit geben, um die Metastabilität zu verlassen.
  • Die “Double Flopping” -Technik wird häufig verwendet, um Ein-Bit-Steuersignale zwischen zwei Taktdomänen zu übertragen.

Um eine vollständige Liste meiner Artikel zu sehen, besuchen Sie bitte diese Seite.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.