Forum: FPGA, VHDL & Co. Datenkommunikation zwischen 2 Clock Domänen


von FPGA-Fragender (Gast)


Lesenswert?

Hallo zusammen,

zu folgender Problemstellung würd ich gerne euren Rat erbitten:

Gegeben sind 2 völlig unabhängige Clock Domänen

1. Domäne ( z.B. 42 MHz )

schreiben in ein DP-RAM in einem FPGA

2. Domäne ( 50 MHz Takt konstant )

lesen von Daten aus einem DP-RAM


Nun wird das DP-RAM zum umsortieren der Daten und gleichzeit zum 
"übewinden" der unterschiedlichen Takte benutzt.

Das ganze soll als quasi Ringpuffer laufen.

Nun meine eigentliche Frage.

In der 2. Domäne möchte ich den quasi Füllstand der 1. Domäne abfragen, 
damit ich für das auslesen wait-states einfügen kann, solange der 
Ringpuffer nicht genügend gefüllt ist.

Wie frage ich nun die Zustände aus der 1. Domäne professionel ab ??

Meine Idee
===========

Die Daten ( z.B. Zähler, Busy Signale usw. ) aus, der ersten 1. Domäne 
die ich abfragen will, dürfen sich nur mit jeder 2. Flanke ( bezogen auf 
den Takt der 1. Domäne ändern. )

So ist sichergestellt, dass die Daten 2 Takte lang ( bezogen auf die 1. 
Domäne ) stabil anliegen und aus der 2. Domäne sicher abgefragt werden 
können.

Bitte um eure Tipps, bzw. auf welche Probleme ich besonders achten muss.

von Kest (Gast)


Lesenswert?

Ein Dual-Clock FIFO mit almost full und almost empty flags sollte 
reichen. Nimm einfach einen aus dem Core Generator (ob Altera oder 
Xilinx ist egal).


Grüße,
Kest

von T.M. (Gast)


Lesenswert?

Ich rate dir ebenfalls zu mit einem Coregenerator deines 
FPGA-Herstellers generierten FIFO-Cores.

Falls du jedoch keine asynch. Fifos auf dem FPGA hast, kannst du dich 
auch an folgenden Papern orientieren (in Verilog, aber einfach in VHDL 
umsetzbar):
http://www.sunburst-design.com/papers/CummingsSNUG2002SJ_FIFO1.pdf
http://www.sunburst-design.com/papers/CummingsSNUG2002SJ_FIFO2.pdf

Prinzipiell müssen die Full/Empty-Flags auch synchronisiert werden. Das 
macht man zB. mit Graycountern, die dann in der Clockdomain des 
jeweiligen Signals einsynchronisiert und verglichen werden.

von FPGA-Fragender (Gast)


Lesenswert?

Hallo zusammen,

>Ein Dual-Clock FIFO mit almost full und almost empty flags sollte
>reichen. Nimm einfach einen aus dem Core Generator (ob Altera oder
>Xilinx ist egal).

Euer Rat ist gut gemeint, aber geht in meinem Fall nicht, weil die Daten 
umsortiert werden müssen.

Ich hab auch schon  eure Löstung durchdacht, aber dann müßte ich einen 
relativ großen FIFO nehmen, weil die Daten recht stoßweise und dann z.b. 
mit 75 Mhz kommen und danach in der FPGA Domäne 50 MHz bräuchte ich 
nochmals ein großes DP-RAM für die Umsortierung.

Das alles verschlingt zu viel Speicher.

Daher meine Frage bzgl der Synchronisierung der Signale.

von Falk B. (falk)


Lesenswert?

@ FPGA-Fragender (Gast)

>Euer Rat ist gut gemeint, aber geht in meinem Fall nicht, weil die Daten
>umsortiert werden müssen.

FALSCH! Erst müssen die Daten über die taktgrenze gebracht werden, DANN 
kannst du sie umsortieren. Du brauchst ja nur ein sehr kleines 
asynchrones FIFO, das schreibt dann seine Daten in den BRAM. Der läuft 
dann mit EINEM Takt vollkommen synchron, dabei kannst du dann 
umsortirene wie du willst.
Glaub uns, esn Asynchroner FIFO ist nicht zu unterschätzen. Dann auch 
noch umsotieren zu wollen geht mal fix daneben.

>Ich hab auch schon  eure Löstung durchdacht, aber dann müßte ich einen
>relativ großen FIFO nehmen, weil die Daten recht stoßweise und dann z.b.
>mit 75 Mhz kommen und danach in der FPGA Domäne 50 MHz bräuchte ich
>nochmals ein großes DP-RAM für die Umsortierung.

Nein, ein kleines reicht.

MFG
Falk

von FPGA Spezialist (Gast)


Lesenswert?

Du brachst doch nur die Zähler zweimal einsynchronsieren und auf 
Stabilität prüfen. Du erhälst 2 Werte, einmal in der linken und einmal 
der rechten Domäne. Ein Asynch Fifo macht auch nichts anderes.

von FPGA-Fragender (Gast)


Lesenswert?

Hallo zusammen,

nochmals Danke für Eure Ratschläge.

Ich hab jetzt mal ein Modul mit DPRAM inkl. Taktsync und Umsortierung in 
einem Schritt entworfen.

Wenn ichs nicht zum Laufen bring, werde ich in jedem FAll die 
vorgelagerte FIFO Lösung machen müssen.

Ich werds mal simulieren und dann schauen ob ichs zum Laufen bring...

Gruß vom FPGA-Fragenden

von Falk B. (falk)


Lesenswert?

@ FPGA-Fragender (Gast)

>Ich hab jetzt mal ein Modul mit DPRAM inkl. Taktsync und Umsortierung in
>einem Schritt entworfen.

Deine Entscheidung.

>Ich werds mal simulieren und dann schauen ob ichs zum Laufen bring...

Na dann mal viel Spass. Vor allem mit Einzelfehlern, die nur selten zu 
ganz bestimmten Konstellationen auftreten . . .

MfG
Falk

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.