Forum: FPGA, VHDL & Co. Gleichzeitiger Lesezugriff bei Xilinx BRAM


von mh (Gast)


Lesenswert?

Hallo,

ich hätte eine Frage zu BRAMs in Xilinx-FPGAs.
Diese haben ja zwei Ports.
Kann man gleichzeitig von beiden Ports aus dem Speicher lesen?
Wenn ja, was muss man beim VHDL-Quelltext beachten, dass das 
Synthesetool nur einen BRAM verwendet?

Schonmal Danke!

: Verschoben durch Moderator
von Dennis B. (dcfoto)


Lesenswert?

Ja, man kann problemlos auf beiden Ports gleichzeitig lesen, sogar von 
der gleichen Adresse.

Dabei muss man nichts besonderes beachten. Allerdings ist das mit dem 
inferieren von Dual-Port-RAM immer so eine Sache. Wenn Du XST benutzt, 
solltest Du die Templates aus dem Manual kopieren, dann müsste es 
eigentlich klappen. Deutlich unproblematischer (aber nicht so flexibel) 
ist es, das RAM als Primitive zu instanziieren. Spätestens dann wenn Du 
das RAM mit Daten vorinitialisieren willst, geht es sowieso nur auf 
diesem Weg.

von Jan (Gast)


Lesenswert?

Dennis B. schrieb:
> Spätestens dann wenn Du
> das RAM mit Daten vorinitialisieren willst, geht es sowieso nur auf
> diesem Weg.
Diese Aussage stimmt aber seit mehreren Jahren schon nicht mehr. Im 
XST-User-Guide findet sich mindestens ein Beispiel, wie ein inferierter 
BRAM mit Werten vorbelegt werden kann.

Der Vorteil des Inferieren (=das Tool findet selbst heraus, das ein BRAM 
gebraucht wird): Es ist architekturunabhängig. Damit sind 
Designportierungen einfacher.

Viele Grüße,
Jan

von Falk B. (falk)


Lesenswert?

@Jan (Gast)


>Diese Aussage stimmt aber seit mehreren Jahren schon nicht mehr. Im
>XST-User-Guide findet sich mindestens ein Beispiel, wie ein inferierter
>BRAM mit Werten vorbelegt werden kann.

Mag sein, so toll ist das aber auch nicht wirklich.

>Der Vorteil des Inferieren (=das Tool findet selbst heraus, das ein BRAM
>gebraucht wird): Es ist architekturunabhängig. Damit sind
>Designportierungen einfacher.

Das sehe ich anders.

Beitrag "Re: Inferred True Dual Port RAM für Xilinx und Altera"

von mh (Gast)


Lesenswert?

Danke für die Antworten!

Hab nun herausgefunden warum immer 2 BRAMs verwendet wurden.

Mir fiel auf, dass XST ab einer bestimmten Speichergröße (ab der halben) 
immer zwei BRAMS synthetisiert hat (hier wurde scheinbar einfach alles 
doppelt abgespeichert).
Man muss den ROM als "shared variable" deklarieren, dass er einen 
"echten" Dual-Port-RAM daraus macht, auch wenn man darauf nur lesend 
zugreift.

von Markus F. (Gast)


Lesenswert?

Dennis B. schrieb:
> Allerdings ist das mit dem
> inferieren von Dual-Port-RAM immer so eine Sache. Wenn Du XST benutzt,
> solltest Du die Templates aus dem Manual kopieren,

Wieso? Was spricht gegen die Verwendung des Coregen?

von J. S. (engineer) Benutzerseite


Lesenswert?

mh schrieb:
> Man muss den ROM als "shared variable" deklarieren, dass er einen
> "echten" Dual-Port-RAM daraus macht,

Hast Du das Ram inferiert oder instanziiert?

von P. K. (pek)


Lesenswert?

Jürgen S. schrieb:
> Hast Du das Ram inferiert oder instanziiert?

Wenn er sich mit "shared variable" rumschlägt würde ich sagen, er hat es 
inferiert...

von J. S. (engineer) Benutzerseite


Lesenswert?

Kommt dann etwas auf die Beschreibung an, ob die Synthese das dann 
sieht. Ich plädiere, immer Instanzen zu nehmen und ausdrücklich zu 
verdrahten. Wer kompatibel bleiben möchte, baut einen Wrapper für das 
RAM, in dem er zwischen Distri, Block-RAM und gfs einem anderen 
Hersteller umschaltet. Das ist vom handling das Einfachste.

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.