Datenkommunikation zwischen 2 Clock Domänen

Gast #760913
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.
Gast #761055
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
Gast #761120
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.
Gast #761338
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.
#761344
@ 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
Gast #761356
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.
Gast #761510
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
#761522
@ 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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.