Hallo, ich habe hier in meinem Design eine Recheneinheit, die einen Stellwert berechnet und eine weitere Einheit, die diesen Wert dann an das Zielgerät mit einem anderen Takt verschickt, als intern gerechnet wurde. Für den clock domain Übergang habe ich eine Xilinx FIFO aus dem Coregenerator genommen. Das ganze funktioniert, wie es soll. Jetzt muss ich dieselben Berechnungen mit teilweise anderen Koeffizienten parallel dazu ausführen. Das Duplizieren der Recheneinheit ist kein Problem, die Register, Addierer und Multiplizierer werden dupliziert das selbe Zeitverhalten haben (zumindest bzgl Synchronität zur Clock). Aber bei der FIFO bin ich mir da nicht mehr so sicher, da diese ja die Steuersignale wie full, empty, overflow zwischen den beiden Taktdomänen synchronisieren muss. Ich bin jetzt also der Meinung, dass diese Signale sich durch das Einsychronisieren anders verhalten können, dass also zb das Empty-Flag auf der Leseseite des FIFO nicht im selben Clock Cycle zurückgesetzt wird, auch wenn auf der Schreibseite im selben Clock Cycle die Daten geschrieben werden. Liege ich da richtig oder bin ich nur paranoid? LG M
>diese ja die Steuersignale wie full, empty, overflow zwischen den >beiden Taktdomänen synchronisieren muss. Das sollte das FIFO schon tun: Es gibt ja dann zwei Pointer read und write, jeweils für beide domains. Wenn Du noch eine Dritte domain hast, oder Taktprobleme auftauchen, laufen die auseinandere. Dun must halt auf der logischen Datenebene synchronisieren.
Ein Kollege hat mir die naheliegende und einfache Lösung gestern noch verraten: Ich mache meine FIFO doppelt so breit und schleuse beide Ergebnisse durch. Aber theoretisch interessiert mich das Thema jedenfalls noch, meinst du, dass ich dann zb zwei BRAMs nehme aber nur einmal die read und write pointer? Denn wenn ich diese Pointer zweimal habe ist ihr Verhalten nach meinem Verständnis von vielen Faktoren abhängig, zb wie die geplaced sind. Da würde das nicht funktionieren.
Wenn du zwei unabhaengige FIFOs hast, koennen die durchaus asynchron werden: Stell dir vor, ein Takt kommt von links in den FPGA, der andere von rechts, ein FIFO liegt links, einer rechts. Wenn die Taktflanken gerade zufaellig nahe beieinander sind, kann die Reihenfolge, in der sie bei den beiden FIFOs ankommen, bei beiden genau andersherum sein, also kann durchaus auch die Synchronisierung unterschiedlich ablaufen. Ergo: Nicht machen, oder beide FIFOs getrennt voneinander ansteuern oder nur lesen, wenn beide nicht leer sind, oder nur ein FIFO verwenden.
Jan M. wrote: > oder nur > lesen, wenn beide nicht leer sind Das war mein Plan bevor die einfachere Idee kam, eine FIFO zu verwenden.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.