Forum: FPGA, VHDL & Co. Wie werden die RAM Blöcke synthetisiert


von Kinuflu (Gast)


Lesenswert?

Hallo Leute,

ich brauche für ein Projekt einen kleinen FPGA mit RAM. Bin dabei auf 
ICE von Lattice gestoßen. Kann ich die RAM Anordnung so wählen, dass ich 
einen durchgehend adressierbaren Speicher habe? Habe mir paar Appnotes 
angeschaut. Dort werden Primitiven für die RAM-Ansteuerung benutzt. Was 
ich brauche ist z.B. 8000 x 16 Bit. Wird so was erfolgreich in die 
Hardware umgesetzt?

von Christian R. (supachris)


Lesenswert?

Prinzipiell geht das natürlich. Wie genau, steht im User Guide des 
entsprechenden Synthesizers, prinzipiell aber mit einem Array aus 
Vektoren. Bei Xilinx wird ein Block Ram inferriert, wenn die 
Lese-Adresse getaktet angelegt wird. Außerdem gibts dann immer noch ein 
paar Besonderheiten für die Read-First, Write-First, No-Change 
Operationen und noch etwas spezieller für True Dual Port RAMs. Bei 
Xilinx ist das der einzige mir bekannte Fall, wofür man shared Variablen 
braucht.
Abe rwie gesagt, schau in den User Guide deines Synthesizers.

von Elektroniker (Gast)


Lesenswert?

Christian R. schrieb:
> Bei
>
> Xilinx ist das der einzige mir bekannte Fall, wofür man shared Variablen
>
> braucht.

Wofür braucht man die?

Ich habe die noch nie gebraucht, baue aber wöchtenlich Xilinx RAMs.(?)

@TE: du instanziierst EIN einzige grosses RAM und kannt dieses dann 
auch so beteiben.

Dazu instanziierst du mehrere weitere, für andere Applikations im FPGA, 
die du parallel betreibst.

Sollte es Bereiche geben, die sich inhaltlich überschneiden, kann man 
die zusammenfassen (lassen): Die Synthes prüft dazu, ob es Phasen gibt, 
in denen die Zugriffe ausschliesslich, oder bei Adressüberschniedung 
identisch sind. Dann werden die RAMs zusammengefasst und ein weiterer 
Anschluss ausserhalb des RAMs drangehängt. Bei manchen Altera RAMs mit 
einseitem zugriff baut die Synthese einen weiteren RAM-Anschluss dran, 
der für den DP-Zugriff vorgesehen ist.

Das alles geht automatisch.

von Elektroniker (Gast)


Lesenswert?

Kinuflu schrieb:
> Was
>
> ich brauche ist z.B. 8000 x 16 Bit. Wird so was erfolgreich in die
>
> Hardware umgesetzt?

Die RAMs können in verschiedenen Konfigs erzeugt werden. Ein Extrem sind 
z.B. DP-RAMs mit einem Bit Eingang und 1024 Bits Ausgang.

Damit hat man einen SER-PAR Wandler, der mit einem Schlag les- und 
löschbar ist.

von Schlumpf (Gast)


Lesenswert?

Kinuflu schrieb:
> Wird so was erfolgreich in die
> Hardware umgesetzt?

ja, wird es
Und wenn du den nicht selber aus RAM-Blöcken zusammenbasteln willst, 
dann gibt es ein Tool in der Entwicklungsumgebung (IPExpress).
Da kannsts du dir dann den RAM zusammenklicken, wie du ihn brauchst und 
das Tool spuckt dir ne HDL Datei aus, die genau diesen RAM beschreibt. 
Diese Component kannst du dann in deinem Dasign einfach verwenden.

von Rudolph (Gast)


Lesenswert?

Elektroniker schrieb:
> Christian R. schrieb:
>> Bei
>>
>> Xilinx ist das der einzige mir bekannte Fall, wofür man shared Variablen
>>
>> braucht.
>
> Wofür braucht man die?

Für True Dual Port RAMs, wie supachris auch schrieb.

von Christian R. (supachris)


Lesenswert?

Elektroniker schrieb:
> Wofür braucht man die?
>
> Ich habe die noch nie gebraucht, baue aber wöchtenlich Xilinx RAMs.(?)

Wenn du einen True Dual Port RAM mit zwei beschreibbaren Ports in VHDL 
beschreiben willst, brauchst du (bei Xilinx zumindest) eine shared 
variable, denn du musst Seite A und Seite B jeweils aus einem getrennten 
Prozess heraus beschreiben. Für "normale" RAMs, die nur einen 
Schreib-Port haben, reicht das Array aus Vektoren als Signal.

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.