CDC
Initialism für Clock Domain Crossing.
CDC: wenn digitale Signale zwischen Taktwelten springen
Ein Clock Domain Crossing tritt auf, wenn ein digitales Signal von einem Schaltungsteil mit einer Taktfrequenz zu einem anderen Teil mit einer anderen Taktfrequenz oder von einer asynchronen Quelle in ein synchrones System wechselt. In der Praxis muss ein Signal, das in einer Taktdomäne erzeugt und verwendet wird, irgendwie in eine andere Domäne gelangen und dort sicher einsatzbar sein. Das Problem: Der empfangende Takt kann das eingehende Signal in einem ungünstigen Moment abtasten und erwischt es während des Wechsels, was zu Metastabilität führt. Das empfangende Flip-Flop gerät in einen undefinierten Zustand zwischen 0 und 1 und beschädigt möglicherweise die Daten in nachgelagerten Schaltungen.
Metastabilität ist kein kleiner Fehler. Wenn ein Flip-Flop in einen metastabilen Zustand gerät, kann es eine unvorhersehbare Zeit dauern, bis es sich auf einen stabilen Logikpegel einstellt, und manchmal stabilisiert es sich überhaupt nicht, bevor die nächste Taktflanke es erneut abtastet. Das führt zu Logikfehlern, Timingverletzungen und Systemausfällen. Deshalb ist das Überqueren von Taktdomänen eine der gefährlichsten Operationen im digitalen Design. Ein Design, das in der Simulation läuft, kann im Feld stillschweigend fehlschlagen, weil Metastabilität probabilistisch ist: Sie tritt selten auf, aber bei genügend Taktzyklen wird sie auftreten.
Synchronisierungsstrategien
Die Standardlösung ist ein Synchronizer: eine Kette aus zwei oder mehr Flip-Flops, die vom Ziel-Takt gesteuert werden, mit dem eingehenden Signal am ersten Flip-Flop. Selbst wenn das erste Flip-Flop metastabil wird, hat das zweite Flip-Flop Zeit, einen stabilen Ausgang zu sehen und ihn sauber abzutasten. Bei einzelnen Steuerbits reicht ein zweistufiger Synchronizer oft aus. Das Überqueren von Multi-Bit-Daten erfordert komplexere Strukturen wie Gray-Code-Zähler oder Handshake-Protokolle, da mehrere Bits nicht ohne Skew-Risiko zwischen den Bits zusammen synchronisiert werden können.
Clock Domain Crossing ist in realen Systemen alltäglich. Ein Chip kann mehrere interne Taktdomänen für das Energiemanagement haben, oder externe asynchrone Signale (Reset-Tasten, Sensoreingaben, empfangene Daten) müssen auf einen internen Takt synchronisiert werden. FPGAs und ASICs, die Hochgeschwindigkeitsschnittstellen verarbeiten, kreuzen häufig zwischen dem Schnittstellen-Takt und einem System-Takt. Wer CDC nicht richtig handhabt, produziert versteckte, schwer zu findende Fehler im Silicon, deshalb ist die formale Verifikation von CDC in professionellen Design-Flows zunehmend Standard.