• Elektronik
  • Clock Domain Crossing sicher entwerfen

Clock Domain Crossing sicher entwerfen

Eckhard Heller • 20. Oktober 2026
Blockdiagramm zeigt clock domain crossing mit synchronen Blöcken (SYNC) und einem CORE. PLLs erzeugen verschiedene Takte.

Inhaltsverzeichnis

Ein Signal kann in einem FPGA oder SoC völlig korrekt aussehen und trotzdem sporadisch falsche Werte liefern, sobald es aus einer anderen Taktwelt kommt. Das sogenannte clock domain crossing beschreibt genau diesen Übergang zwischen Schaltungsteilen mit unterschiedlichen oder nicht phasenstabilen Takten. Ich zeige, warum dabei Metastabilität entsteht, welche Synchronisationsverfahren sich für einzelne Bits, Steuerimpulse und Datenbusse eignen und worauf ich bei Telekommunikations- und Infrastrukturdesigns besonders achte.

Die wichtigsten Regeln für sichere Taktgrenzen

  • Metastabilität entsteht, wenn ein Signal die Setup- oder Hold-Zeit des empfangenden Flipflops verletzt.
  • Für ein einzelnes Statusbit ist eine Synchronizer-Kette mit meist zwei Flipflops der typische Ausgangspunkt.
  • Ein mehrbitiger Datenbus gehört nicht einfach durch mehrere unabhängige Synchronizer. Dafür braucht man Handshake, Gray-Code oder eine asynchrone FIFO.
  • Ein kurzer Impuls muss oft als Toggle oder Handshake übertragen werden, damit er im langsameren Takt nicht verloren geht.
  • Reset-Signale, Timing-Constraints und CDC-Verifikation gehören zur Lösung dazu und sind keine nachträglichen Extras.

Schaltplan mit synchronen Registern und Multiplexern, die für clock domain crossing verwendet werden.

Warum unterschiedliche Taktdomänen problematisch sind

Eine Taktdomäne umfasst alle Register und Logikblöcke, die von demselben Takt oder von phasenbezogenen Takten angesteuert werden. Treffen beispielsweise ein Management-Block mit 50 MHz und ein Datenpfad mit 156,25 MHz aufeinander, kennt die empfangende Domäne den exakten Zeitpunkt einer Signaländerung nicht.

Besonders kritisch wird es, wenn ein Eingang genau rund um die aktive Taktflanke wechselt. Dann kann das Flipflop für kurze Zeit keinen stabilen logischen Zustand einnehmen. Dieser Zustand heißt Metastabilität. Er verschwindet normalerweise wieder, aber weder seine Dauer noch der letztlich gelesene Wert lassen sich im Voraus sicher bestimmen.

Für mich ist der wichtigste praktische Punkt dabei, dass Metastabilität kein gewöhnlicher Timing-Fehler ist. Eine Simulation mit idealen digitalen Signalen kann unauffällig bleiben, während das reale Bauteil unter Temperatur, Spannung, Fertigungstoleranzen oder höherer Datenrate sporadisch ausfällt. Genau deshalb sind Fehler in CDC-Pfaden oft schwer reproduzierbar.

Die Robustheit wird häufig mit der MTBF beschrieben, der mittleren Zeit zwischen metastabilitätsbedingten Ausfällen. Eine längere Synchronizer-Kette erhöht typischerweise die verfügbare Auflösungszeit, kostet aber zusätzliche Taktzyklen Latenz. Für ein Telekommunikationssystem muss ich deshalb nicht nur fragen, ob ein Signal ankommt, sondern auch, wie schnell und mit welcher zulässigen Fehlerrate es ankommen muss.

Welches Signal soll die Grenze überschreiten

Die richtige Schaltung hängt stärker vom Signaltyp ab als vom bloßen Frequenzverhältnis. Ein einzelnes Statusbit ist ein anderer Fall als ein 64-Bit-Messwert oder ein Datenstrom mit voller Auslastung. Ich teile die Aufgabe deshalb zuerst in Einzelbit, Impuls, Steuerdialog und Datenbus auf.

Signaltyp Geeignete Methode Wichtige Grenze
Stabiles Einzelbit Zwei- oder mehrstufiger Synchronizer Das Signal muss lange genug stabil bleiben
Kurzer Impuls Toggle-Synchronizer oder Puls-Handshake Ein einfacher Flipflop-Synchronizer kann den Impuls verpassen
Einzelner Mehrbitwert Handshake mit gehaltenem Datenregister Die Daten dürfen erst nach bestätigter Stabilität gelesen werden
Kontinuierlicher Datenstrom Asynchrone FIFO Durchsatz, FIFO-Tiefe und Rückstau müssen zusammenpassen
Zähler oder Pointer Gray-Code plus Synchronizer Pro Übergang sollte sich nur ein Gray-Bit ändern

Einzelne Statusbits synchronisieren

Für ein dauerhaftes Statussignal ist die klassische Lösung eine Kette aus zwei Flipflops im Zieltakt. Das erste Register kann metastabil werden, während das zweite Register mit hoher Wahrscheinlichkeit bereits einen stabilen Wert übernimmt. Zwischen beiden Registern darf keine zusätzliche Logik liegen.

Diese Lösung passt etwa für „Link aktiv“, „FIFO nicht leer“ oder eine Betriebsfreigabe. Sie überträgt aber nicht automatisch eine beliebige Folge schneller Zustandswechsel. Wenn der Sender ein Bit zweimal ändert, bevor der Empfänger es abtastet, kann der Empfänger beide Ereignisse übersehen.

Impulse und Ereignisse sicher übertragen

Ein kurzer Puls ist besonders tückisch. Ist er kürzer als eine Periode des Zieltakts, kann er vollständig zwischen zwei Abtastflanken liegen. Ich wandle solche Ereignisse daher häufig in einen Zustandswechsel um: Der Sender invertiert ein Toggle-Bit bei jedem Ereignis, und der Empfänger synchronisiert dieses Bit und erkennt die Änderung.

Wenn kein Ereignis verloren gehen darf, ist ein Handshake die verlässlichere Wahl. Der Sender legt die Daten an, setzt ein Request-Signal und wartet auf die synchronisierte Bestätigung des Empfängers. Das kostet Latenz, liefert dafür eine klare Rückmeldung und funktioniert auch dann, wenn die Taktraten stark voneinander abweichen.

Wann Handshake und asynchrone FIFO die bessere Wahl sind

Ein Mehrbitbus darf nicht einfach bitweise durch mehrere zweistufige Synchronizer laufen. Jedes Bit kann in einem anderen Zielzyklus sichtbar werden, sodass der Empfänger kurzzeitig eine Kombination liest, die der Sender nie erzeugt hat. Bei einem Zähler oder einem Steuerwort kann daraus ein falscher Zustand mit schwer erkennbaren Folgeschäden entstehen.

Ein Handshake mit stabilem Datenregister eignet sich für einzelne Wörter oder seltene Transaktionen. Der Sender hält den kompletten Bus unverändert, bis der Empfänger das Request-Signal erkannt und die Daten übernommen hat. Erst danach darf der Sender den Wert ändern oder die nächste Transaktion starten.

Für fortlaufende Daten, etwa zwischen einem Ethernet-MAC und einem Prozessor- oder Speicherbereich, verwende ich normalerweise eine asynchrone FIFO. Schreib- und Leseseite arbeiten mit eigenen Takten. Die FIFO trennt Datenablage und Taktübergang, während Statusinformationen wie „voll“ und „leer“ synchronisiert zwischen den Domänen ausgetauscht werden.

Bei solchen FIFOs werden Pointer oft in Gray-Code übertragen. Dabei ändert sich zwischen zwei aufeinanderfolgenden Werten nur ein Bit. Das reduziert das Risiko, dass mehrere gleichzeitig wechselnde Pointer-Bits als ungültige Zwischenkombination ankommen. Die FIFO ist trotzdem kein magischer Baustein: Eine zu geringe Tiefe führt bei ungleichen Taktraten zu Überlauf oder Unterlauf.

Für die Auswahl hilft mir diese Faustregel:

  • Seltenes Einzelereignis: Toggle oder Handshake.
  • Stabiler Zustand: zweistufiger Synchronizer.
  • Einzelnes Datenwort: Handshake mit gehaltenem Bus.
  • Viele Wörter oder kontinuierlicher Strom: asynchrone FIFO.

Reset, Timing und Verifikation entscheiden über die Qualität

Ein CDC-Entwurf ist erst dann vollständig, wenn auch der Reset sauber behandelt wird. Ein asynchron anliegender Reset kann beim Freigeben unterschiedliche Register zu unterschiedlichen Zeitpunkten aktivieren. Ich synchronisiere deshalb die Aufhebung des Resets in jeder Ziel-Taktdomäne, meist über mehrere Registerstufen.

Auch die Timing-Constraints müssen zur Schaltung passen. Zwischen wirklich asynchronen Takten ist eine normale Setup-and-Hold-Analyse oft nicht sinnvoll. Werden Pfade jedoch pauschal als False Path markiert, kann man echte Probleme verstecken. Herstellerwerkzeuge empfehlen deshalb je nach Architektur eine Kombination aus asynchronen Clock-Gruppen, kontrollierter Verzögerung und Skew-Begrenzung.

In einem FPGA-Projekt achte ich darauf, Synchronizer-Register mit den vorgesehenen Attributen oder Hersteller-Makros zu kennzeichnen. So erkennt das Implementierungswerkzeug ihre besondere Funktion und führt keine Optimierung durch, die den Abstand zwischen den Stufen oder die gewünschte MTBF verschlechtert.

Die statische Analyse findet strukturelle Risiken, ersetzt aber keine funktionale Prüfung. Für eine belastbare Freigabe gehören CDC-Reports, Assertions und gezielte Simulationen zusammen. Ich prüfe unter anderem zufällige Phasenlagen, Frequenzverhältnisse, Reset während laufender Übertragung sowie FIFO-Grenzfälle bei „voll“ und „leer“.

Ein typischer Fehler ist die Annahme, dass zwei Flipflops jede Art von Signal sicher machen. Sie reduzieren das Metastabilitätsrisiko eines einzelnen Signals, lösen aber weder Bus-Konsistenz noch Ereignisverlust noch falsche Reset-Sequenzen. Genau an dieser Stelle zeigt sich, ob ein Design wirklich verstanden wurde.

Typische Fehler in Telekommunikations- und Infrastrukturdesigns

In Kommunikationssystemen begegnen mir CDC-Pfade oft zwischen PHY, MAC, Paketpuffer, Management-CPU und Taktaufbereitung. Die Daten kommen dann beispielsweise aus einem schnellen SerDes- oder Ethernet-Bereich, während Konfiguration und Diagnose mit einem deutlich langsameren Registertakt laufen. Diese Pfade sehen im Blockdiagramm klein aus, tragen aber häufig kritische Zustandsinformationen.

Ein Datenbus wird bitweise synchronisiert

Das ist der häufigste konzeptionelle Fehler. Selbst wenn jedes Bit einzeln stabil wirkt, entsteht daraus nicht automatisch ein konsistentes Wort. Für ein einmaliges Steuerwort ist ein Handshake meist überschaubarer, für einen Datenstrom eine FIFO.

Ein Puls wird direkt an den langsameren Takt gelegt

Ein Impuls von 2 ns kann bei einem Zieltakt von 20 ns vollständig unsichtbar bleiben. Ich verwende dann ein Toggle, eine Impulsverlängerung mit Rückmeldung oder einen Handshake. Welche Lösung passt, hängt davon ab, ob Ereignisse zusammengefasst werden dürfen und wie viel Latenz akzeptabel ist.

Die Frequenz ist bekannt, die Phase aber nicht

Zwei Takte mit nominell 100 MHz sind nicht automatisch sicher synchron. Wenn ihre Phasenbeziehung nicht garantiert und im gesamten System eingehalten wird, behandle ich sie wie asynchrone Domänen. Das gilt auch für Takte aus unterschiedlichen PLLs, für wieder anlaufende Referenzen und für extern eingespeiste Taktsignale.

Lesen Sie auch: Impedanzformel verstehen – AC-Schaltungen meistern!

Die FIFO-Tiefe wird zu knapp gewählt

Eine FIFO muss nicht nur die durchschnittliche Rate ausgleichen, sondern auch Phasenlage, Burst-Verhalten und kurzzeitige Rückstaus. Bei einem Sender mit 125 MHz und einem Empfänger mit 100 MHz wächst der Füllstand langfristig, wenn beide dauerhaft Daten liefern. Ohne Begrenzung oder Durchsatzanpassung ist der Überlauf dann mathematisch unvermeidbar.

Eine pragmatische Prüfliste für den Entwurf

Ich beginne bei jedem Übergang mit einer einfachen Beschreibung: Was wird übertragen, wie oft passiert es und darf etwas verloren gehen? Diese drei Fragen verhindern, dass man vorschnell einen Standard-Synchronizer einsetzt, obwohl eigentlich ein Protokoll oder Speicherpuffer nötig wäre.

  1. Beide Taktdomänen und ihre mögliche Phasenbeziehung dokumentieren.
  2. Signaltyp, Datenbreite, Änderungsrate und maximale Ereignisfrequenz festhalten.
  3. Für jedes Signal eine konkrete CDC-Struktur auswählen.
  4. Synchronizer, Handshake oder FIFO räumlich und logisch sauber von Nutzlogik trennen.
  5. Reset-Freigabe in jeder Empfängerdomäne synchronisieren.
  6. Timing-Constraints und Werkzeugberichte auf fehlende oder widersprüchliche Pfade prüfen.
  7. Metastabilität, Ereignisverlust, Überlauf, Unterlauf und Reset-Fälle gezielt verifizieren.

Gerade bei Anlagen mit verteilten Kommunikationskomponenten lohnt sich außerdem eine klare Namensgebung. Ich benenne Signale möglichst mit Quell- und Zielbereich, etwa status_mac_to_ctrl oder data_rx_to_dma. Das klingt banal, macht CDC-Reviews aber deutlich schneller und verhindert, dass ein bereits synchronisiertes Signal versehentlich ein zweites Mal behandelt wird.

Was bei der Taktübertragung wirklich zählt

Sichere Domänenübergänge entstehen nicht durch eine einzelne Zauberformel, sondern durch die passende Kombination aus Synchronizer, Protokoll, FIFO, Reset-Strategie und Verifikation. Für ein einzelnes stabiles Bit reichen oft zwei Registerstufen. Für Busse und Datenströme muss die Übertragung dagegen als gemeinsamer Ablauf mit Gültigkeit, Rückmeldung und Speicherkapazität entworfen werden.

Mein praktischer Rat lautet daher, CDC nicht erst beim Auftreten eines sporadischen Fehlers zu untersuchen. Sobald ein System mehrere Takte, externe Schnittstellen oder unabhängige PLLs enthält, sollte jeder Übergang im Architekturentwurf sichtbar und begründet sein. Das spart später nicht nur Debugging-Zeit, sondern schützt auch die Zuverlässigkeit von Kommunikations- und Infrastruktursystemen unter realen Betriebsbedingungen.

Dieser Artikel dient ausschließlich Informations- und Bildungszwecken. Das Material wurde mit Unterstützung moderner Analyse- und Sprachwerkzeuge (KI) erstellt. Konsultieren Sie vor einer Entscheidung einen Experten.

Häufig gestellte Fragen

Metastabilität entsteht, wenn ein Signal die Setup- oder Hold-Zeit des empfangenden Flipflops verletzt. Das Flipflop kann dann vorübergehend keinen stabilen logischen Zustand einnehmen, wobei Dauer und gelesener Wert nicht sicher vorhersehbar sind.

Für ein dauerhaft stabiles Einzelbit wie Link aktiv oder FIFO nicht leer ist eine Kette aus meist zwei Flipflops im Zieltakt der typische Ausgangspunkt. Das Signal muss dabei lange genug stabil bleiben. Schnelle Zustandswechsel oder kurze Impulse können trotzdem verloren gehen.

Ein kurzer Impuls kann zwischen zwei Abtastflanken vollständig unsichtbar bleiben. Deshalb wird er häufig in einen Zustandswechsel umgewandelt und als Toggle synchronisiert. Wenn kein Ereignis verloren gehen darf, ist ein Handshake mit Request und synchronisierter Bestätigung die verlässlichere Lösung.

Die einzelnen Bits können in unterschiedlichen Zielzyklen sichtbar werden, sodass der Empfänger eine Datenkombination liest, die der Sender nie erzeugt hat. Für ein einzelnes Datenwort eignet sich ein Handshake mit gehaltenem Datenregister. Kontinuierliche Datenströme werden besser über eine asynchrone FIFO übertragen, häufig mit Gray-Code für die Pointer.

Artikel bewerten

Bewertung: 5.00 Stimmenanzahl: 1

Tags

handshake
fifo
metastabilität
synchronizer
gray-code
Autor Eckhard Heller
Eckhard Heller
Mein Name ist Eckhard Heller, und ich bringe 14 Jahre Erfahrung im Bereich Telekommunikation, Infrastruktur und Verbindungssysteme mit. Schon früh entwickelte ich ein Interesse an der Art und Weise, wie Technologie unser Leben verbindet und verändert. Diese Faszination motiviert mich, komplexe Themen verständlich zu machen und aktuelle Trends in der Branche zu analysieren. Ich schreibe über verschiedene Aspekte der Telekommunikation, von neuen Technologien bis hin zu Herausforderungen in der Infrastruktur. Dabei lege ich großen Wert auf die Genauigkeit meiner Informationen und überprüfe sorgfältig meine Quellen. Mein Ziel ist es, meinen Lesern nützliche und nachvollziehbare Inhalte zu bieten, die ihnen helfen, die Entwicklungen in diesem dynamischen Bereich besser zu verstehen.

Beitrag teilen

Kommentar schreiben