Zweistufiger Synchronisierer vs. Toggle-Synchronisierer vs. Handshake vs. asynchrones FIFO: übertragbare Signale, Übertragungsgeschwindigkeit und Einschränkungen

Zwischen asynchronen Taktdomänen kommt unweigerlich der Moment, in dem das empfangende Flipflop seine Setup- oder Hold-Zeit nicht einhalten kann; Signale werden daher über Schaltungen übertragen, die von vornherein mit Metastabilität rechnen. Die Grundlage ist der Synchronisierer, der ein 1-Bit-Pegelsignal über zwei Flipflops empfängt. Für kurze Pulse nimmt man einen Toggle-Synchronisierer, für gelegentliche Mehrbitdaten einen Handshake und für kontinuierliche, große Datenmengen ein asynchrones FIFO. Allen gemeinsam ist der Grundsatz: Synchronisiert wird nur ein 1-Bit-Signal oder ein Gray-Code, der sich pro Schritt nur in einem Bit ändert.

MerkmalZweistufiger SynchronisiererToggle-SynchronisiererHandshakeAsynchrones FIFO
Was übertragen werden kannEin 1-Bit-Pegelsignal (ein sich langsam änderndes Steuersignal)Ein 1-Bit-Puls (das Eintreten eines Ereignisses)Mehrbitdaten (gelegentlich jeweils ein Wort)Ein Strom von Mehrbitdaten (kontinuierlich, in großer Menge)
FunktionsweiseDas Signal läuft mit dem Empfangstakt durch zwei Flipflops; man wartet, bis sich die Metastabilität der ersten Stufe gelegt hat, bevor die zweite Stufe übernimmtAuf der Sendeseite entsteht ein Pegelsignal, das bei jedem Puls kippt; es wird synchronisiert und auf der Empfangsseite per XOR mit dem um eine Stufe verzögerten Wert wieder in einen Puls verwandeltDie Daten werden gehalten, während req synchronisiert übertragen wird; hat die Empfangsseite übernommen, wird ack synchronisiert zurückgegebenDie Daten werden in einen Dual-Port-Speicher geschrieben; die in Gray-Code gewandelten Zeiger werden in die jeweils andere Domäne synchronisiert, um full und empty zu bestimmen
Synchronisierte SignaleDas Signal selbstDas Toggle-Signal (1 Bit)req und ack (je 1 Bit); die Daten werden nicht synchronisiertDie Gray-Code-Zeiger (ändern sich pro Schritt nur in einem Bit)
ÜbertragungsgeschwindigkeitDas Signal muss sich deutlich langsamer ändern als die Periode der EmpfangsseiteZwischen Pulsen müssen mindestens die wenigen Zyklen liegen, die die Empfangsseite zum Erkennen der Änderung brauchtLangsam: Beim 4-Phasen-Handshake braucht eine Übertragung in beiden Domänen zusammen 8 Zyklen oder mehrSchnell: In jedem Zyklus kann ein Wort geschrieben und gelesen werden
Typische Latenz bis zur EmpfangsseiteEtwa 2 Zyklen des EmpfangstaktsEtwa 2–3 Zyklen des EmpfangstaktsEtwa 2 Zyklen, bis req ankommt; bis ack zurückkommt und das Nächste gesendet werden kann, kommt noch einmal ein Hin- und Rückweg hinzuEtwa 2–3 Zyklen, bis ein geschriebenes Wort auf der Leseseite sichtbar ist
Wichtigste FallstrickeBei Mehrbitsignalen werden die Bits in verschiedenen Zyklen übernommen, sodass Zwischenwerte sichtbar werden; kurze Pulse aus einer schnelleren Domäne können verloren gehenLiegen Pulse zu dicht, kippt das Toggle-Signal zurück, und zwei Ereignisse werden übersehenDie Daten dürfen sich nicht ändern, bevor ack zurückgekommen istDie Tiefe ergibt sich aus der Burstlänge und dem Unterschied zwischen Schreib- und Lesegeschwindigkeit, zuzüglich einer Reserve für die Synchronisationslatenz
Schaltungsumfang2 Flipflops (bei schnellen Takten manchmal 3 Stufen)Einige Flipflops und ein XORSynchronisierer für req/ack und Zustandsautomaten auf beiden SeitenSpeicher, Zeiger und Gray-Code-Wandlung, Synchronisierer sowie Logik für full und empty
Typischer EinsatzSteuersignale wie Enable, asynchrone externe EingängeFertig- oder Interruptmeldungen, die in einer schnellen Domäne nur einen Zyklus lang anliegenÜbergabe von Einstellwerten für SteuerregisterDatenübertragung zwischen Bussen oder Schnittstellen, die mit verschiedenen Takten laufen

Die Zahlenwerte sind typische Größenordnungen und variieren je nach Prozessgeneration und Produkt.

Wann welche Variante?

Zweistufiger Synchronisierer
Für ein 1-Bit-Pegelsignal, das deutlich länger als die Periode der Empfangsseite anliegt. Er ist die Grundlage aller Verfahren; bei schnellen Takten oder wenn die MTBF noch länger werden soll, nimmt man 3 Stufen.
Toggle-Synchronisierer
Wenn kurze Pulse aus einer schnellen Domäne ohne Verlust an eine langsame Domäne weitergegeben werden sollen. Nur möglich, wenn bis zum nächsten Puls mindestens einige Zyklen der Empfangsseite vergehen.
Handshake
Wenn Mehrbitdaten wie Einstellwerte gelegentlich zuverlässig übergeben werden sollen. Er ist bei jedem Frequenzverhältnis sicher, doch eine Übertragung dauert viele Zyklen.
Asynchrones FIFO
Wenn Daten kontinuierlich oder sehr häufig übertragen werden sollen. Es fängt Geschwindigkeitsunterschiede und Bursts ab, ist aber die größte Schaltung.

Häufige Fragen

Warum darf man Mehrbitdaten nicht Bit für Bit mit zweistufigen Synchronisierern übertragen?

Weil für jedes Bit offen ist, ob die Änderung an der aktuellen oder erst an der nächsten Flanke übernommen wird. Wechselt der Wert etwa von 0111 auf 1000, kann einen Zyklus lang 1111 oder 0000 empfangen werden, wenn nur einige Bits schon den neuen Wert haben. Man nimmt stattdessen einen Handshake, der die Daten selbst unsynchronisiert stabil hält und nur ein 1-Bit-Steuersignal synchronisiert, oder ein asynchrones FIFO. Bei Zählerwerten kann man auch in Gray-Code wandeln, damit sich jeweils nur ein Bit ändert.

Was ändert sich, wenn der Synchronisierer von 2 auf 3 Stufen erweitert wird?

Die Zeit, in der sich die Metastabilität legen kann, verlängert sich um etwa eine Periode, und die mittlere Zeit zwischen Ausfällen (MTBF) wird exponentiell länger. Die MTBF lässt sich grob als e^(t_r/τ) ÷ (T_0 × f_clk × f_data) ausdrücken; mit τ = 20 ps wächst sie zum Beispiel um den Faktor e^50 (mehr als 10 hoch 21), wenn sich t_r um 1 ns verlängert. Dafür steigt die Latenz bis zur Empfangsseite um einen Zyklus.

Warum werden die Zeiger eines asynchronen FIFOs in Gray-Code geführt?

Bei binären Zeigern ändern sich mehrere Bits gleichzeitig, etwa von 0111 auf 1000; werden sie einzeln synchronisiert, kann ein völlig unzusammenhängender Wert empfangen werden. Beim Gray-Code ändert sich pro Schritt nur ein Bit; wird dieses Bit metastabil und kippt zum alten oder neuen Wert, ist das Ergebnis also der Wert vor oder nach dem Schritt. Man sieht schlimmstenfalls einen etwas veralteten Wert, daher fällt die Bestimmung von full und empty immer zur sicheren Seite aus.

Wie wird die Tiefe eines asynchronen FIFOs bestimmt?

Nach der größten Datenmenge, die sich während eines Schreib-Bursts ansammelt, weil das Lesen nicht hinterherkommt. Bei 100 MHz auf der Schreib- und 80 MHz auf der Leseseite, einem Burst von 100 Wörtern, der in jedem Zyklus geschrieben, und Lesen in jedem Zyklus sind das 100 × (1 − 80/100) = 20 Wörter. In echten Entwürfen kommt eine Reserve für die Synchronisationslatenz der Zeiger hinzu.

Verständnis prüfen

Wie ändert sich die mittlere Zeit zwischen Ausfällen durch Metastabilität (MTBF), wenn ein 2-stufiger Flipflop-Synchronisierer auf 3 Stufen erweitert wird?

  1. ADie zum Abklingen der Metastabilität verfügbare Zeit wächst um etwa 1 Periode, und die MTBF verlängert sich exponentiell
  2. BProportional zur Stufenzahl wird die MTBF 1,5-mal so lang
  3. CDa die Wahrscheinlichkeit für Metastabilität von der Eingangsseite bestimmt wird, ändert sich die MTBF nicht
Antwort und Erläuterung anzeigen

Antwort: A. Die zum Abklingen der Metastabilität verfügbare Zeit wächst um etwa 1 Periode, und die MTBF verlängert sich exponentiell

Die MTBF eines Synchronisierers lässt sich näherungsweise als MTBF = e^(t_r/τ) ÷ (T_0 × f_clk × f_data) ausdrücken. t_r ist die zum Abklingen der Metastabilität verfügbare Zeit, τ und T_0 sind durch die Eigenschaften des Flipflops bestimmte Konstanten. Mit jeder zusätzlichen Stufe verlängert sich t_r um etwa 1 Periode (genauer: 1 Periode abzüglich der Ausgangsverzögerung des Flipflops und der Setup-Zeit). Wächst t_r beispielsweise bei τ = 20 ps um 1 ns, verlängert sich die MTBF um den Faktor e^50, also um mehr als das 10^21-Fache. Die Wahrscheinlichkeit, dass die erste Stufe metastabil wird, ändert sich nicht, doch die Wahrscheinlichkeit, dass der Zustand abklingt, bevor er sich weiter ausbreitet, steigt stark an.

Jedes Bit eines 4-Bit-Datenworts wurde mit einem eigenen 2-stufigen Synchronisierer in eine andere Taktdomäne übertragen. Welches Problem kann auftreten, wenn sich die Daten von 0111 auf 1000 ändern?

  1. ADie Bits werden in unterschiedlichen Zyklen übernommen, sodass Zwischenwerte wie 1111 oder 0000 empfangen werden können
  2. BDurch die Synchronisierer werden alle Bits im selben Zyklus ausgerichtet, daher tritt kein Problem auf
  3. CAlle 4 Bits werden metastabil und kehren dauerhaft weder zu 0 noch zu 1 zurück
Antwort und Erläuterung anzeigen

Antwort: A. Die Bits werden in unterschiedlichen Zyklen übernommen, sodass Zwischenwerte wie 1111 oder 0000 empfangen werden können

Bei einem 2-stufigen Synchronisierer ist für jedes Bit einzeln unbestimmt, ob eine Änderung an der aktuellen oder an der nächsten Flanke übernommen wird. Bei der Änderung von 0111 auf 1000 ändern sich alle 4 Bits, sodass für 1 Zyklus Werte wie 1111, 0000 oder 0100 empfangen werden können, bei denen nur ein Teil der Bits den neuen Wert hat. Verwendet die Empfangsseite diesen Wert, kommt es zu Fehlfunktionen. Metastabilität klingt mit der Zeit zu 0 oder 1 ab. Zählerstände werden in Gray-Code umgewandelt, sodass sich nur 1 Bit ändert; für beliebige Daten werden Handshake oder asynchroner FIFO verwendet.

Welches Verfahren, auf der Empfangsseite den ursprünglichen Impuls zurückzugewinnen, ist bei der Toggle-Synchronisierung (einem Verfahren, bei dem auf der Sendeseite ein Pegelsignal erzeugt und übertragen wird, das bei jedem Impuls invertiert) richtig?

  1. ADas synchronisierte Toggle-Signal direkt als Impuls verwenden
  2. BDas synchronisierte Toggle-Signal mit dem Empfangstakt per AND verknüpfen, um einen Impuls von 1 Zyklus Breite zu erhalten
  3. CDas synchronisierte Toggle-Signal mit dem um eine weitere Stufe verzögerten Signal per XOR verknüpfen
Antwort und Erläuterung anzeigen

Antwort: C. Das synchronisierte Toggle-Signal mit dem um eine weitere Stufe verzögerten Signal per XOR verknüpfen

Bei der Toggle-Synchronisierung wird auf der Sendeseite bei jedem Impuls der Wert eines Flipflops invertiert, und das Ereignis wird als Wechsel von 0 auf 1 bzw. von 1 auf 0 dargestellt. Da es sich um ein Pegelsignal handelt, geht es auch bei Impulsen, die kürzer als die Periode der Empfangsseite sind, nicht verloren. Auf der Empfangsseite wird nach der 2-stufigen Synchronisierung eine XOR-Verknüpfung mit dem um eine weitere Stufe verzögerten Wert gebildet; so erhält man einen Impuls von 1 Zyklus Breite, der nur in dem Zyklus mit einer Änderung 1 ist. Verwendet man das Toggle-Signal direkt, wird das zweite Ereignis übersehen, wenn das Signal auf 0 zurückkehrt. Logische Verknüpfungen mit dem Takt verursachen Glitches.

  1. Welcher Nachteil der Datenübertragung zwischen Taktdomänen per Handshake ist richtig?
  2. Was ist der richtige Grund dafür, dass bei einem asynchronen FIFO Schreib- und Lesezeiger vor der Synchronisierung in die jeweils andere Domäne in Gray-Code umgewandelt werden?
  3. Bei einem asynchronen FIFO mit 100 MHz auf der Schreibseite und 80 MHz auf der Leseseite schreibt die Schreibseite einen Burst von 100 Wörtern mit 1 Wort pro Zyklus, und die Leseseite liest 1 Wort pro Zyklus. Zwischen den Bursts gibt es ausreichende Pausen. Welche Tiefe ist mindestens erforderlich, um einen Überlauf zu vermeiden (Verzögerung durch Synchronisierung vernachlässigt)?

Übungsfragen zu Timing-Analyse und CDC

Wichtige Begriffe erklärt

Synchronisierer
Schaltung, die ein asynchrones Signal auf den Empfangstakt ausrichtet. Die Grundform besteht aus zwei in Reihe geschalteten Flipflops, was die Wahrscheinlichkeit erhöht, dass eine Metastabilität der ersten Stufe vor der nächsten Flanke abklingt.
Toggle-Synchronisierer
Verfahren, das jeden Puls auf der Sendeseite in einen Pegelwechsel eines Signals umsetzt, dieses synchronisiert und auf der Empfangsseite durch XOR mit dem um einen Takt älteren Wert wieder einen Puls gewinnt. Pulse, die kürzer als die Empfangstaktperiode sind, gehen nicht verloren, die Pulse müssen aber mehrere Empfangstakte auseinanderliegen.
Handshake
Verfahren, das Daten zuverlässig durch den Austausch einer Anforderung (req) des Senders und einer Bestätigung (ack) des Empfängers überträgt. Zwischen Taktdomänen werden nur req und ack synchronisiert, während die Daten stabil gehalten werden; das ist sicher, benötigt aber mehrere Takte oder mehr pro Übertragung.
Asynchrones FIFO
FIFO, das mit getrennten Takten beschrieben und gelesen wird, um Mehrbitdaten zwischen Taktdomänen zu übergeben. Seine Zeiger werden in Gray-Code umgewandelt, bevor sie in die andere Domäne synchronisiert werden, um „voll“ (full) und „leer“ (empty) zu bestimmen. Die Zeiger haben ein Bit mehr als die Adresse, um den Umlauf (Wrap-around) zu unterscheiden.
Taktdomäne
Gruppe von Flipflops, die vom selben Takt oder von Takten mit fester Frequenz- und Phasenbeziehung getrieben werden. Die Übergabe eines Signals zwischen zueinander asynchronen Taktdomänen erfordert einen Synchronisierer.
Metastabilität
Zustand, in dem der Ausgang eines Flipflops bei verletzter Setup- oder Hold-Zeit eine Zeit lang weder 0 noch 1 ist. Asynchrone Signale werden mit einem zweistufigen Flipflop synchronisiert.
Gray-Code
Code, bei dem sich zwischen benachbarten Werten nur ein Bit ändert. Er verhindert Lesefehler bei Drehgebern und bei der Übergabe von Zählerwerten zwischen verschiedenen Taktdomänen.
MTBF (mittlere Betriebsdauer zwischen Ausfällen)
Mittlerer Abstand zwischen Ausfällen. Bei einem Synchronisierer ist es die mittlere Zeit zwischen metastabilen Ereignissen, die nicht abklingen und weitergegeben werden, gegeben durch MTBF = e^(t_r/τ) ÷ (T_0 × f_clk × f_data). Zusätzliche Stufen verlängern die Abklingzeit t_r und erhöhen die MTBF exponentiell.

Verwandte Vergleiche