Warum reicht ein doppelter Synchronisierer allein nicht für die Multi-Byte-Übertragung zwischen zwei Taktdomänen?

Wenn Ein-Bit-Informationen zwischen zwei verschiedenen Taktdomänen übertragen werden, verwenden wir 2 Flip-Flops oder doppelte Synchronisierer. Aber wenn wir Multi-Bit-Signale über zwei verschiedene Taktdomänen übertragen, warum reichen dann doppelte Synchronisierer allein nicht aus? Warum benötigen wir in diesem Fall spezielle Handshake-Signale / Gray-Code usw. zusammen mit den doppelt synchronisierenden Flip-Flops, die das gesamte Setup verkomplizieren?

Mehrere Bits implizieren eine Bitrate, und wenn diese Bitrate (auf irgendeine Weise) nicht ausreichend synchronisiert ist, treten schließlich Fehler auf, die entweder zu viele Bits empfangen oder Bits fehlen.
Angenommen, wir sprechen von Bussen: Es gibt viele Ressourcen in Bezug auf Clock Domain Crossing, Metastabilität und ihre Auswirkungen. Gibt es also etwas Spezifisches zu diesem Thema und bestehenden Erklärungen, das unklar ist oder Ihnen einfach die richtigen Suchbegriffe gefehlt haben? Einige Ressourcen erklären schön, dass selbst Doppelsynchronisierer normalerweise nur die Wahrscheinlichkeit verringern, von einer Metastabilität getroffen zu werden, aber es kann immer noch passieren. Oder ist es vielleicht unklar, dass cdc tatsächlich impliziert, dass sich nicht alle Signale gleich verhalten / möglicherweise unterschiedliche Verzögerungs- und Stabilitätseigenschaften aufweisen?

Antworten (1)

Die Übertragung eines einzelnen Bits ist einfach. Es hat nur zwei Zustände, und wenn ein Übergang auftritt, kann es nur entweder im vorherigen Zustand oder im neuen Zustand sein. Daher ist die einzige Sorge die Metastabilität, und der Zwei-Flop-Synchronisierer reicht normalerweise aus, um dieses Problem anzugehen.

Ein Mehrbitbus hat jedoch ein zusätzliches Problem: Beim Überschreiten einer Taktdomänengrenze können aufgrund winziger Unterschiede in den Verzögerungen in der Logik und in der Verdrahtung unterschiedliche Bits als an unterschiedlichen Taktflanken sich ändernd wahrgenommen werden. Einige Bits können metastabil werden, während andere dies nicht tun, und sie benötigen möglicherweise unterschiedlich viel Zeit, um sich selbst aufzulösen. Jetzt haben Sie nicht nur den vorherigen Zustand und den nächsten Zustand – Sie können eine beliebige Anzahl von Zwischenzuständen haben, in denen nur einige der Bits ihre neuen Werte haben und einige der Bits noch ihre alten Werte haben.

Dieses zusätzliche Problem der Datenkohärenz ist der Grund, warum die zusätzliche Handshake-Logik erforderlich ist. Aus diesem Grund ist das Dual-Clock- oder asynchrone FIFO ein wichtiger Baustein in digitalen Systemen, die mehrere Taktdomänen umfassen – es fasst alle erforderlichen Elemente in einem ordentlichen Paket zusammen.

Das ist eine gute Erklärung. Ergänzend zu Daves Antwort könnte der Zeiger (für die Tiefe des FIFO) jetzt auch nach Verwendung des FIFO-Mechanismus für Nutzlasten immer noch ein Mehrbitsignal sein und der Schreibzeiger (Sendetaktdomäne) muss mit dem Lesen / Empfangen synchronisiert werden Uhrendomäne. Und hier ist Gray-Code nützlich, bei dem jeder Übergang (oder jedes Inkrement) durch eine einzelne Bitänderung dargestellt wird. Auf diese Weise kann der Handshake auf das Problem der Synchronisierung (Metastabilitätsbedenken und NICHT Datenkohärenzbedenken) einer Zwei-Zustandsänderung reduziert werden, wie im ersten Teil dieser Antwort erwähnt.
@RajeshS: All das ist in den asynchronen 2-Takt-FIFO eingebaut. Hier gibt es speziell eine Diskussion über Gray-Code .