Mein Design liest aus einem Ram(Port1) Werte aus, zu Testzwecken lese ich derzeit zyklisch aus und gebe die Werte per DAC aus. Um die Werte ins Ram zu bekommen verwende ich einen zweiten Port des Rams (Port 2). Ich schreibe darüber ins Ram und lese zur Kontrolle zurück. Manchmal lese ich nicht die richtigen Werte zurück, manchmal werden auch anscheinend nicht die richtigen Werte geschrieben. Wenn das Auslesen (Port 1) und Schreib/Lesen (Port 2) mit dem gleichen Takt passieren, passieren keine Fehler. Verwendet Port 2 eine andere Taktdomäne passieren die Fehler. Ich arbeite auf einem Xilinx Zynq, das Ram wird aud BRAM Blöcken synthetisiert. Folgende konkreten Fragen: Dürfen die beiden Ports eines dual-porte Rams verschiedene Clock-Domains benutzen? Sind die beiden Ports wirklich unabhängig voneinander ?
Was sagt denn das Datenblatt? Normalerweise müssen nur Schreibkonflikte vermieden werden. Deine Anwendung sollte also ohne Probleme funktionieren.
Hi, guck mal hier https://danstrother.com/2010/09/11/inferring-rams-in-fpgas/ (suche auf der Seite nach "excerpt"). Da hast du ein Beispiel für die Abhängigkeiten voneinander. Gruß
Moin, klingt nach dem Dual-Clock-FIFO-Klassiker. Wenn du gleichzeitig auf dieselbe Adresse schreibst und ausliest, gibt's schon mal falsche Werte, du musst also Write/Read-Pointer über die Clockdomains hinweg vergleichen. Das klappt nur wirklich 100% zuverlässig mit Gray-Codierung der Pointer. Sonst könntest du vorher per Dualclock-FIFO aus dem IP-Generator deiner Wahl schon mal das Problem entschärfen, opferst halt dafür nochmal ein BRAM-Atom :-) Weiss nicht, ob es bei Xilinx inzwischen auch Dual Clock "FIRO" (First in, Random out) IP gibt, bisher hielt sich das Rätsel, warum man das immer selbermachen muss(te).
Sieht nach einem echten Problem aus. Vielen Dank für eure Infos. Ich hab die ganze Geschichte jetzt total anders gelöst, und es scheint zu funktionieren.
Martin O. schrieb: > Sieht nach einem echten Problem aus. Vielen Dank für eure Infos. Ich empfehle Dir einen Blick in den "Vivado Design Suite User Guide: Synthesis UG901". Dort gibt einen Abschnitt "Block RAM Read/Write Synchronization Modes" und seitenweise Coding examples zu jedem erdenklichen Sonderfall.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.