Forum: FPGA, VHDL & Co. Ports von dual-ported Ram unabhängig?


von Martin O. (ossi-2)


Lesenswert?

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 ?

von SeriousSam (Gast)


Lesenswert?

Was sagt denn das Datenblatt?
Normalerweise müssen nur Schreibkonflikte vermieden werden. Deine 
Anwendung sollte also ohne Probleme funktionieren.

von S. R. (svenska)


Lesenswert?

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ß

von Strubi (Gast)


Lesenswert?

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).

von Martin O. (ossi-2)


Lesenswert?

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.

von Vancouver (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.