Forum: FPGA, VHDL & Co. Clock-Crossing FIFO und phasenverschobene Clocks auf der Schreiben-Seite


von Anguel S. (anguel)


Lesenswert?

Hallo Leute!

Ich nutze ein mit dem Xilinx CoreGen generiertes Clock-Crossing FIFO. 
Die Schreiben-Seite wird mit WR_CLK90 getaktet, die Lesen-Seite mit 
RD_CLK. Das einzige Problem ist, dass mein FULL Signal in einem 
Zustandsautomaten ausgewertet wird, der nicht mit WR_CLK90, sondern mit 
einem um 90° phasenverschobenen Clock WR_CLK0 getaktet wird. Meine Frage 
ist, was in diesem Fall die beste Lösung ist, das FULL Signal von 
WR_CLK90 nach WR_CLK0 zu transferieren. Brauche ich da zwei Synch-FFs 
oder gibt es vielleicht eine elegantere Lösung? Evtl. Problem wäre auch, 
dass die 2 Synch-FFs das FULL Status-Signal um 2 Takte verzögern würden, 
so dass es in der FSM nicht rechtzeitig ankommt.
Danke schon mal für jeden Tipp!

Grüße,
Anguel

von SuperWilly (Gast)


Lesenswert?

Wozu wertest du ein Full-Flag aus ?

Gruß,
SuperWilly

von Matthias (Gast)


Lesenswert?

Wenn die Phasenbeziehung stabil ist sollte das ohne Synchronisieren 
möglich sein. Die Schwierigkeit ist da vmtl mehr, dem Tool das 
mitzuteilen, damit es beim Place and Route darauf achtet. Da muss man 
sich vmtl die Contraints genau anschauen und überprüfen, dass die 
Synthese den Pfad wirklich kurz genug gemacht hat, damit es sich 
ausgeht.

lg
Matthias

von SuperWilly (Gast)


Lesenswert?

Verwende doch einfach ein AlmostFull-Flag (Schwelle sollte einige 
Einträge kleiner als Full sein), dann kannst du sicher den 
Schreibvorgang in den Fifo anhalten.

Gruß,
SuperWilly

von Anguel S. (anguel)


Lesenswert?

Das Problem war genau, dass die Constraints nicht eingehalten wurden, 
als ich direkt von clk90 (FIFO) nach clk0 (FSM) gegangen bin. Habe jetzt 
aber 2 FFs dazwischen gesetzt und es scheint zu gehen. Evtl. reicht auch 
ein FF, wenn man nicht synchronisieren braucht?

Matthias schrieb:
> Wenn die Phasenbeziehung stabil ist sollte das ohne Synchronisieren
> möglich sein. Die Schwierigkeit ist da vmtl mehr, dem Tool das
> mitzuteilen, damit es beim Place and Route darauf achtet. Da muss man
> sich vmtl die Contraints genau anschauen und überprüfen, dass die
> Synthese den Pfad wirklich kurz genug gemacht hat, damit es sich
> ausgeht.
>
> lg
> Matthias

von Anguel S. (anguel)


Lesenswert?

Eigentlich verwende ich schon den PROG_FULL Flag, habe das aber nicht 
erwähnt, um die Sache nicht unnötig kompliziert zu machen :) Problem 
war, dass zum Zeitpunkt zu dem der nächste Zustand in der FSM bestimmt 
wird, die Daten noch immer zum FIFO fließen, so dass dieser noch gar 
nicht weiß, dass er doch noch PROG_FULL wird. Das macht die Sache etwas 
komplizierter, werde vermutlich zur Sicherheit den FIFO tiefer machen ;)

SuperWilly schrieb:
> Verwende doch einfach ein AlmostFull-Flag (Schwelle sollte einige
> Einträge kleiner als Full sein), dann kannst du sicher den
> Schreibvorgang in den Fifo anhalten.
>
> Gruß,
> SuperWilly

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.