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.
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
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.
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.
@ 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
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.
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
@ 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.