Forum: FPGA, VHDL & Co. Bram Interface CDC Problem


von mubin (Gast)


Lesenswert?

Hallo,

Ich muss an ein bestehendes Modul welches ein BRAM Interface hat 
anbinden und darüber Register beschreiben und lesen. Problematisch wird 
es dadurch, dass das von mir erstellte Modul mit 160MHz und das bereits 
bestehende Modul mit 250MHz laufen muss. Das BRAM Interface bietet 
leider auch keine Möglichkeit den Master zu bremsen(Handshake) und 
liefert im Falle eines Schreibvorgangs somit jeden Takt valide Daten. 
Nun bin ich etwas ratlos wie man ein bidirektionales CDC in diesem Fall 
gestalten kann und über jeden Tipp dankbar.

Xilinx BRAM-Controller:
https://www.xilinx.com/support/documentation/ip_documentation/axi_bram_ctrl/v4_0/pg078-axi-bram-ctrl.pdf

von Klakx (Gast)


Lesenswert?

So allgemein ist es schwierig, da prinzipiell das eine Interface zu 
schnell scheint.

Wenn es ein Datenstrom wäre, könnte man die Datenbreite verdoppeln um 
damit die Datenrate zu halbieren.

Oder ein FIFO wäre noch eine Möglichkeit, falls es auch wieder 
leerlaufen kann.

Wäre eines von beiden machbar?

von S. R. (svenska)


Lesenswert?

Wenn dein Modul die Daten konstant schneller liefert als der BRAM sie 
verarbeiten kann (oder umgekehrt), hast du verloren.

Ansonsten legst du einen hinreichend großen FIFO in den Pfad, der das 
Handshaking übernimmt.

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Was verstehst Du denn im Umfeld von FPGAs unter "CDC"? Ich kenne den 
Begriff in 3 Ausführungen und keiner will mir passen.

Zu der Frage mit dem Zugriff über FIFOs: Ja, das geht am Einfachsten, 
birgt aber das Problem der Datenkonsistenz. Was geschrieben wird, ist 
erstmal noch nicht im RAM und kann so bald nicht gelesen werden.

Dann: Du machst Dein BRAM-IF hoffentlich nicht über das langsame 
AXI-Gedöhns?

Wie sieht denn Dein timing des Zugriffs aus?

von Christian R. (supachris)


Lesenswert?

CDC ist hier clock domain crossing. Sowas geht halt dann über FIFOs, ist 
doch überall so. Da braucht man halt ein paar Handshake Signale, damit 
man weiß wann die Daten valide sind. Ist ja zum Beispiel am MIG auch 
nicht anders.
Und Axi Streaming ist auch nicht langsam, ist doch nur ein simples FIFO 
Interface.

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Gebonnt! Nur "ein paar Handshake"-Signale erfordern eben auch eine 
Abtastung durch die langsame domain und da geht das Tempo dann pauschal 
mal auf unter 80MHz runter. Angesichts der 250MHz an der Quelle wird es 
irgendwas mit 62,5MHz, wenn man alles mit der Quelle raussynched.

von Achim S. (Gast)


Lesenswert?

Weltbester FPGA-Pongo schrieb im Beitrag #4777299:
> Nur "ein paar Handshake"-Signale erfordern eben auch eine
> Abtastung durch die langsame domain und da geht das Tempo dann pauschal
> mal auf unter 80MHz runter.

Mit direktem Handshake zwischen Quelle und Abnehmer ist das so. Aber 
wenn man das FIFO in beiden Taktdomänen arbeiten lässt und mit 
almost-full bzw. almost-empty Flags arbeitet, dann kann die langsamere 
Seite ihre volle Bandbreite ausspielen (in diesem Fall also die 
160MByte/s).

Kostet halt ein bisschen Latenz (weil dazu mehrere Bytes im FIFO 
vorrätig sein müssen), und dass die schnellere Seite nicht ihre volle 
Bandbreite nutzen kann (weil die langsamere Seite die Daten nicht 
schnell genug abholen kann) wurde ja schon mehrfach beschrieben.

von mubin (Gast)


Lesenswert?

Danke für die zahlreichen Hinweise.
Ich konnte schlussendlich die Datenbreite verdoppeln und mir den 
Overhead der FIFOs sparen.

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.