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


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.
von mubin (Gast)


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


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


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


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


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


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


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


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

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]
  • [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.