mikrocontroller.net

Forum: FPGA, VHDL & Co. 2 FIFOs mit asynchronen Clocks gleiches Verhalten?


Autor: Matthias F. (flint)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe hier in meinem Design eine Recheneinheit, die einen Stellwert 
berechnet und eine weitere Einheit, die diesen Wert dann an das 
Zielgerät mit einem anderen Takt verschickt, als intern gerechnet wurde. 
Für den clock domain Übergang habe ich eine Xilinx FIFO aus dem 
Coregenerator genommen. Das ganze funktioniert, wie es soll.

Jetzt muss ich dieselben Berechnungen mit teilweise anderen 
Koeffizienten parallel dazu ausführen. Das Duplizieren der Recheneinheit 
ist kein Problem, die Register, Addierer und Multiplizierer werden 
dupliziert das selbe Zeitverhalten haben (zumindest bzgl Synchronität 
zur Clock). Aber bei der FIFO bin ich mir da nicht mehr so sicher, da 
diese ja die Steuersignale wie full, empty, overflow zwischen den beiden 
Taktdomänen synchronisieren muss.

Ich bin jetzt also der Meinung, dass diese Signale sich durch das 
Einsychronisieren anders verhalten können, dass also zb das Empty-Flag 
auf der Leseseite des FIFO nicht im selben Clock Cycle zurückgesetzt 
wird, auch wenn auf der Schreibseite im selben Clock Cycle die Daten 
geschrieben werden.

Liege ich da richtig oder bin ich nur paranoid?

LG
M

Autor: Terry (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>diese ja die Steuersignale wie full, empty, overflow zwischen den
>beiden Taktdomänen synchronisieren muss.

Das sollte das FIFO schon tun: Es gibt ja dann zwei Pointer read und 
write, jeweils für beide domains. Wenn Du noch eine Dritte domain hast, 
oder Taktprobleme auftauchen, laufen die auseinandere.

Dun must halt auf der logischen Datenebene synchronisieren.

Autor: Matthias F. (flint)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Kollege hat mir die naheliegende und einfache Lösung gestern noch 
verraten: Ich mache meine FIFO doppelt so breit und schleuse beide 
Ergebnisse durch.

Aber theoretisch interessiert mich das Thema jedenfalls noch, meinst du, 
dass ich dann zb zwei BRAMs nehme aber nur einmal die read und write 
pointer? Denn wenn ich diese Pointer zweimal habe ist ihr Verhalten nach 
meinem Verständnis von vielen Faktoren abhängig, zb wie die geplaced 
sind. Da würde das nicht funktionieren.

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du zwei unabhaengige FIFOs hast, koennen die durchaus asynchron 
werden: Stell dir vor, ein Takt kommt von links in den FPGA, der andere 
von rechts, ein FIFO liegt links, einer rechts. Wenn die Taktflanken 
gerade zufaellig nahe beieinander sind, kann die Reihenfolge, in der sie 
bei den beiden FIFOs ankommen, bei beiden genau andersherum sein, also 
kann durchaus auch die Synchronisierung unterschiedlich ablaufen. Ergo: 
Nicht machen, oder beide FIFOs getrennt voneinander ansteuern oder nur 
lesen, wenn beide nicht leer sind, oder nur ein FIFO verwenden.

Autor: Matthias F. (flint)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jan M. wrote:
> oder nur
> lesen, wenn beide nicht leer sind

Das war mein Plan bevor die einfachere Idee kam, eine FIFO zu verwenden.

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
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
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.