Clock Domain Crossing für Impuls- und Pegelsignal

Für Puls verwenden wir Pulse-Synchronizer und für Level-Signal verwenden wir 2-Flop-Synchronizer, aber was ist, wenn das Signal ein Puls- oder Level-Verhalten haben kann? Gibt es eine Möglichkeit das zu synchronisieren?

BEARBEITEN:

Nach der Antwort von @Paebbels gibt es eine Änderung in Circuit, es sollte so sein, die Signaltransformation befindet sich in der TX-Clock-Domäne anstelle der RX-Clock-Domäne.

Geben Sie hier die Bildbeschreibung ein

und seine Simulation ist wie unten,

Geben Sie hier die Bildbeschreibung ein

Aber jetzt geht es darum, die Anzahl der Zyklen auf der TX-Clock-Seite auf die RX-Clock-Seite umzuwandeln. Mindestens CDC auf Ebene konvergiert auf Ebene in der rx-Taktdomäne, wir können die Einschränkung der Anzahl der Zyklustransformationen aufheben.

Können Sie die grundlegende Schaltungsarchitektur Ihrer beiden Synchronisierer zeigen? Manchmal kann der 2- oder 3-Flop-Synchronisierer einen Impuls weitergeben, wenn der Impuls im Vergleich zur Taktrate der Flops breit ist. Dann können Sie Flankenerkennungstechniken am Ausgang des Synchronisierers anwenden, um bei Bedarf den Impuls zu erzeugen.
@MichaelKaras Ich möchte, dass die Schaltung unabhängig von der bekannten Taktrate funktioniert, sodass Ihre Annahme, einen Impuls am Ausgangssynchronisator zu erzeugen, die Kriterien nicht erfüllt.

Antworten (2)

Sie können dem Puls/Strobe-Synchronizer eine Flankenerkennung hinzufügen.

Wie funktioniert ein normaler Puls/Strobe-Synchronizer?

  1. Wenn es ein Besetztzeichen unterstützt, wird der Eingang blockiert, bis die Schaltung bereit ist
  2. Das Signal wird von Impuls zu Pegeländerung durch ein T-FF (D-FF + XOR) transformiert
  3. Das Level/Flag-Signal wird durch 2 D-FF in die andere Taktdomäne übertragen
  4. Der Impuls wird durch ein weiteres XOR-Gatter und eine Verzögerung (D-FF) wiederhergestellt.
  5. 2 weitere D-FF übertragen das Signal zurück in die Source-Clock-Domäne, sodass ein Belegtsignal abgeleitet werden kann (XOR).

Was kann mit dieser Schaltung passieren, wenn Pulse ein konstantes Signal bilden?

Die Schaltung beginnt zu schalten und erzeugt viele Impulse am Ausgang.

Lösung:

Dieses Umschalten kann durch Hinzufügen einer Flankenerkennung am Eingang (D-FF + NOT + AND) oder wenn der Sender dem Besetztzeichen nachkommt, gestoppt werden.

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Quelle: PoC.misc.sync.Strobe

Vielen Dank für Ihre klare Erklärung. Ich werde Verilog-Code schreiben und sehen, ob er funktioniert oder nicht. Außerdem werde ich sicherstellen, dass er den CDC-Regeln entspricht, und Sie wissen lassen. Wenn es ein Problem gibt.
Sie zielen auf einen ASIC ab? Stellen Sie sicher, dass Sie für den 2-FF-Synchronizer geeignete Flip-Flops verwenden, die besser für Metastabilität geeignet sind. In unserer FPGA-Lösung verwenden wir entweder Anbieterprimitive + Einschränkungen (Xilinx) oder VHDL-Attribute (Altera). Beispielsweise müssen Sie möglicherweise die Schieberegisterextraktion deaktivieren, da sonst die Synthese diese 2 FF zu einem kleinen Schieber mit schlechteren Metastabilitätseigenschaften kombinieren könnte. Wir verwenden auch relative Platzierungsbeschränkungen, um die Pfadlänge zwischen diesen 2 FF einzuschränken. PS Sehen Sie sich unsere anderen Sync-Module an, um mehr als 1-Bit-Signale zu synchronisieren :).
Ja, ich ziele sowohl auf ASIC als auch auf FPGA ab. Aber nun, Sorge ist nur Methode, und Sie haben es sehr gut erklärt.
Sind Sie sicher, dass Ihr "Signal Transformation"-Block nicht durch Metastabilität beeinträchtigt wird?
da die Ausgabe von XOR kombinatorisch ist und vom Signal abhängt (Sie haben an dieser Stelle "changed_clk1" erwähnt), das asynchron ist und dieses FF beeinflussen kann.
Können Sie sich bitte die bearbeitete Frage ansehen?
@PrakashDarji Du hast Recht, ich habe einen Fehler in der Zeichnung gemacht, T1 muss von Clock1 und nicht von Clock2 angetrieben werden!
Haben Sie dann eine Lösung oder Idee für die zweite Frage? Können wir in einer Domäne eine Ebene zu einer anderen erreichen, indem wir dasselbe Modul verwenden?
Nein, das ist nicht möglich, in einer gemeinsamen Lösung. Die vorgestellte Schaltung kann Impulse übertragen. Mit der Anstiegsflankenerkennung kommt er auch mit Pegeln zurecht, denn Pegel werden auf den Anstiegsflankenimpuls des Pegels verkürzt. Wenn Sie wirklich beides brauchen, dann brauchen Sie einen FIFO, um 1 bis n Impulse zu übertragen. Vielleicht könnten Sie einen Pegel übertragen, wenn Sie 2-3 solcher Schaltungen verwenden: 1) Impuls senden (steigende Flanke), 2) zweiten Zyklus des Pegels senden (Signal ist immer noch hoch) 3) fallende Flanke eines Pegels (Sie müssen erkennen die Folge 1-1-0 => 2 D-FF). 2) löst ein S eines RS-FF aus, 3) löst R auf diesem FF aus.
Wenn es sich also um einen Pegel handelt, wird ein RS-FF aktiviert, um den Pegel auf der Empfängerseite zu halten, bis der Pegel auf der Senderseite abfällt ... eine andere Lösung würde Zähler verwenden, um oder so. Aber in Wirklichkeit sollten Sie Ihr Design überarbeiten, wenn ein Signal beide Signalarten (Impuls und Pegel) übertragen kann. Das ist kein gutes Design :).
Ja du hast Recht! Je nach Anwendung müssen wir den CDC-Mechanismus auswählen. Ich denke, es gibt keinen verallgemeinerten Mechanismus für Puls und Pegel.
Selbst wenn Sie eine solche Schaltung bauen könnten, ist sie sehr groß, um alle Eckfälle abzudecken. Es erhöht auch die Verzögerungs-/Umlaufzeit von einer Domäne zu einer anderen.
Ja. Das glaube ich auch!

Hängt davon ab, welche Informationen über das Signal wichtig sind. Wenn Sie sowohl einen relativ konstanten Pegel als auch relativ kurze Impulse haben, die eng beieinander liegen, müssen Sie möglicherweise einen asynchronen FIFO verwenden und den Wert des Signals im FIFO speichern, wenn er sich ändert. Pegel- und Puls-Synchronisierer funktionieren nur gut mit 'spärlichen' Signalen, die sich nicht sehr oft ändern. Wenn Ihre Impulse jedoch mindestens mehrere Taktzyklen lang sind, könnte ein Pegelsynchronisierer in Ordnung sein.