Forum: FPGA, VHDL & Co. 2 FIFOs mit asynchronen Clocks gleiches Verhalten?


von Matthias F. (flint)


Lesenswert?

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

von Terry (Gast)


Lesenswert?

>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.

von Matthias F. (flint)


Lesenswert?

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.

von Jan M. (mueschel)


Lesenswert?

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.

von Matthias F. (flint)


Lesenswert?

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
Noch kein Account? Hier anmelden.