Clock-Crossing FIFO und phasenverschobene Clocks auf der Schreiben-Seite

OP #1702652
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
Gast #1702858
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
OP #1702945
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
OP #1702962
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren