www.mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: FPGA-Fragender (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Kest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: T.M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/CummingsSNUG...
http://www.sunburst-design.com/papers/CummingsSNUG...

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.

Autor: FPGA-Fragender (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: FPGA Spezialist (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: FPGA-Fragender (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.