Wenn ich ein Design habe, das Uhr liest und Uhr schreibt, und ich möchte, dass es für die folgenden Szenarien funktioniert:
Ist dies möglich, ohne die Architektur von einem Szenario zum anderen zu ändern?
Zum Beispiel: Ich habe einen einzelnen Impuls, der von einer Taktdomäne in eine andere übergeht. Ich möchte, dass es in beiden Szenarien erkannt wird.
PS: Ich habe noch nie an CDC gearbeitet. Habe gerade angefangen, es zu recherchieren.
Zunächst hängt es von der Architektur Ihres Designs ab. Betrachten Sie beispielsweise das Streamen von „data“ und „dataValid“ von einer Domäne zu einer anderen.
Wenn der Takt der Quellenschaltung langsamer als der Takt der Zielschaltung ist, kann und wird die Schaltung dest sehen, dass „dataValid“ für mehr Takte geltend gemacht wird, als die Quelle beabsichtigte. Wenn der Quelltakt schneller als der Zieltakt ist, kann die Zielschaltung übersehen, dass „dataValid“ insgesamt hoch ist, oder es für weniger Takte als bestätigt ansehen, als die Quelle beabsichtigte.
Die Liste der Problembereiche lässt sich fortsetzen, aber der Punkt ist, dass die Schaltung unter Berücksichtigung des Datenflusses, der Laufzeiten und des Handshakes zwischen den beiden Schaltungen entworfen werden muss. Es ist oft wichtig, es von Anfang an einzuplanen, aber manchmal kann es später mit weniger Problemen hinzugefügt werden. Dann gibt es all die Probleme beim Entwerfen von Metastabilität.
Es kann alles getan werden, alles kann perfekt gemacht werden, aber es erfordert Verständnis und Planung. Es ist keine triviale Aufgabe.
Ja, eine Methode besteht darin, "Blasen" (Leerlauf) in die schnellere Seite einzufügen, um die Gesamtzahl der Zyklen zwischen beiden Seiten gleich zu halten. Dies ist eine Art Pseudo-Synchronisationstechnik für FIFOs.
Normalerweise würde dies nur auf der schnelleren Seite erfolgen. Wenn sich die Uhren ändern können, was schneller ist, dann könnten Sie eine auf jeder Seite platzieren und diejenige deaktivieren, die auf der langsameren Seite ist.
Oder Sie könnten sich für eine asynchrone FIFO-Lösung entscheiden, die nichts Besonderes für die langsamere/schnellere Seite erfordert. Um mit Metastabilität fertig zu werden, werden normalerweise zwei FFs verwendet, um den Schreibzeiger zu speichern (reduziert die Wahrscheinlichkeit einer Metastabilität stark auf ein statistisch vernachlässigbares Niveau), was einen zusätzlichen Verzögerungszyklus zwischen Lesen/Schreiben ergibt. Dies erhöht die Latenz, hat aber keine Auswirkung auf den Durchsatz.
Bobflux
Superkatze