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.
| Merkmal | Zweistufiger Synchronisierer | Toggle-Synchronisierer | Handshake | Asynchrones FIFO |
|---|---|---|---|---|
| Was übertragen werden kann | Ein 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) |
| Funktionsweise | Das 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 übernimmt | Auf 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 verwandelt | Die Daten werden gehalten, während req synchronisiert übertragen wird; hat die Empfangsseite übernommen, wird ack synchronisiert zurückgegeben | Die 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 Signale | Das Signal selbst | Das Toggle-Signal (1 Bit) | req und ack (je 1 Bit); die Daten werden nicht synchronisiert | Die Gray-Code-Zeiger (ändern sich pro Schritt nur in einem Bit) |
| Übertragungsgeschwindigkeit | Das Signal muss sich deutlich langsamer ändern als die Periode der Empfangsseite | Zwischen Pulsen müssen mindestens die wenigen Zyklen liegen, die die Empfangsseite zum Erkennen der Änderung braucht | Langsam: Beim 4-Phasen-Handshake braucht eine Übertragung in beiden Domänen zusammen 8 Zyklen oder mehr | Schnell: In jedem Zyklus kann ein Wort geschrieben und gelesen werden |
| Typische Latenz bis zur Empfangsseite | Etwa 2 Zyklen des Empfangstakts | Etwa 2–3 Zyklen des Empfangstakts | Etwa 2 Zyklen, bis req ankommt; bis ack zurückkommt und das Nächste gesendet werden kann, kommt noch einmal ein Hin- und Rückweg hinzu | Etwa 2–3 Zyklen, bis ein geschriebenes Wort auf der Leseseite sichtbar ist |
| Wichtigste Fallstricke | Bei Mehrbitsignalen werden die Bits in verschiedenen Zyklen übernommen, sodass Zwischenwerte sichtbar werden; kurze Pulse aus einer schnelleren Domäne können verloren gehen | Liegen Pulse zu dicht, kippt das Toggle-Signal zurück, und zwei Ereignisse werden übersehen | Die Daten dürfen sich nicht ändern, bevor ack zurückgekommen ist | Die Tiefe ergibt sich aus der Burstlänge und dem Unterschied zwischen Schreib- und Lesegeschwindigkeit, zuzüglich einer Reserve für die Synchronisationslatenz |
| Schaltungsumfang | 2 Flipflops (bei schnellen Takten manchmal 3 Stufen) | Einige Flipflops und ein XOR | Synchronisierer für req/ack und Zustandsautomaten auf beiden Seiten | Speicher, Zeiger und Gray-Code-Wandlung, Synchronisierer sowie Logik für full und empty |
| Typischer Einsatz | Steuersignale wie Enable, asynchrone externe Eingänge | Fertig- oder Interruptmeldungen, die in einer schnellen Domäne nur einen Zyklus lang anliegen | Übergabe von Einstellwerten für Steuerregister | Datenübertragung zwischen Bussen oder Schnittstellen, die mit verschiedenen Takten laufen |
Die Zahlenwerte sind typische Größenordnungen und variieren je nach Prozessgeneration und Produkt.