Forum: FPGA, VHDL & Co. mehrere unterschiedliche BRAM Initialisierungen in einer Entity


von Mario (Gast)


Lesenswert?

Hallo,

ich bin neu hier im Forum und habe hier bisher immer gute 
Hilfestellungen entdeckt.

Als ziemlicher VHDL-Anfänger beschäftige ich mich gerade mit dem BRAM 
auf einem Spartan 3AN.
Vielleicht ist die Frage auch trivial, aber bisher habe ich noch nichts 
dazu gefunden:
Ist es möglich mehrere BRAM-Blöcke unterschiedlich zu initialisieren? 
Soll heißen, ich möchte einen BRAM-Block als ROM nutzen, einen als 
Single Port RAM und einen als "Simple Dual-Port RAM".
Funktioniert sowas innerhalb einer Entity oder muss ich mich auf einen 
Typ festlegen und Kompromisse bzgl. Speicherausnutzung etc. hinnehmen?

Ich hoffe meine Frage ist klar genug beschrieben...

Danke schonmal für eure Hilfe!

MfG
Mario

von Duke Scarring (Gast)


Lesenswert?

Mario schrieb:
> Ist es möglich mehrere BRAM-Blöcke unterschiedlich zu initialisieren?
Ja.

> Soll heißen, ich möchte einen BRAM-Block als ROM nutzen, einen als
> Single Port RAM und einen als "Simple Dual-Port RAM".
Ja.

> Funktioniert sowas innerhalb einer Entity
Ja.

> oder muss ich mich auf einen
> Typ festlegen und Kompromisse bzgl. Speicherausnutzung etc. hinnehmen?
Nein.
Vorrausgesetzt Du hast genügend BRAMs. Ich finde allerdings, daß die 
direkte Instanziierung von BRAMs sehr kryptisch zu lesen ist. Ich würde 
einen Blick in den XST User Guide werfen. Da finden sich 
synthetisierbare Beschreibungen drin, die auch einigermaßen lesbar sind 
(leider mit std_logic_arith).

Duke

von Hinweiser (Gast)


Lesenswert?

Mario schrieb:
> Ist es möglich mehrere BRAM-Blöcke unterschiedlich zu initialisieren?
> Soll heißen, ich möchte einen BRAM-Block als ROM nutzen, einen als
> Single Port RAM und einen als "Simple Dual-Port RAM".
> Funktioniert sowas innerhalb einer Entity oder muss ich mich auf einen
> Typ festlegen und Kompromisse bzgl. Speicherausnutzung etc. hinnehmen?

Schau dir mal dieses Projekt an:
http://www.mikrocontroller.net/articles/Retrocomputing_auf_FPGA

Da hat es auch quelltext zu

BRAM als ROM : 
http://www.mikrocontroller.net/svnbrowser/redz0mb1e/src/vhdl/ROM.vhd?view=markup

BRAM als vor (initalisierte) RAM:
http://www.mikrocontroller.net/svnbrowser/redz0mb1e/src/vhdl/RAM.vhd?revision=129&view=markup

BRAM als dualPort (Video-) RAM:
http://www.mikrocontroller.net/svnbrowser/redz0mb1e/src/vhdl/video_ram.vhd?revision=75&view=markup

Alles mit XST für den Spartan3 übersetzbar.

MfG

von Christian R. (supachris)


Lesenswert?

Duke Scarring schrieb:
> Ich würde
> einen Blick in den XST User Guide werfen. Da finden sich
> synthetisierbare Beschreibungen drin, die auch einigermaßen lesbar sind
> (leider mit std_logic_arith).

Die klappen natürlich genauso gut mit der numeric_std, die Adresse 
möchte das Array ja eh als Integer haben.

von Mario (Gast)


Lesenswert?

Guten Morgen @all!


Zunächst einmal Vielen Dank für die schnellen & kompetenten Antworten!!!

@Duke Scarring
> Vorrausgesetzt Du hast genügend BRAMs. Ich finde allerdings, daß die
> direkte Instanziierung von BRAMs sehr kryptisch zu lesen ist.
Da der Spartan 3AN 20 zur Verfügung hatte, wollte ich neben einem 
"Font-ROM" die anderen Daten, die bei meinem Projekt anfallen eben in 
unterschiedliche BRAMs packen.

Das hätte eben den Vorteil, dass ich die Daten so hineinschreiben kann, 
wie sie anfallen - also ein 16Bit-Wort in den BRAM mit den spezifischen 
Einstellungen. Dagegen sollen eben Daten die nur gelesen (und nur 1x 
instanziiert/initialisiert werden) werden oder mit anderen Wortbreiten 
in ihrem jeweiligen Speicher Platz finden...

@Hinweiser
Vielen Dank auch für deine Links zu dem Projekt - so ähnlich sieht es 
bei mir auch aus, zumindest was die gedachte Struktur betrifft. :-)

Dann kann ich mein Projekt also so aufziehen, wie ich es mir gedacht 
habe. Jeden Speicher als eigene Entity mit eigenen Einstellungen (RAM, 
ROM...) und dann als Component einbinden in mein TopLevel.


MfG

Mario

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Mario schrieb:
> Dann kann ich mein Projekt also so aufziehen, wie ich es mir gedacht
> habe. Jeden Speicher als eigene Entity mit eigenen Einstellungen (RAM,
> ROM...) und dann als Component einbinden in mein TopLevel.
Ja. Und wenn du den XST User Guide durchliest, dann findest du sogar 
raus, wie du diese RAMS komplett generisch beschreiben kannst. Du musst 
also gar keine Komponenten instatiieren, das macht der Synthesizer für 
dich:
http://www.lothar-miller.de/s9y/archives/20-RAM.html#extended
Und auch die Initialisierung geht direkt im Quelltext:
http://www.lothar-miller.de/s9y/archives/37-DDFS-mit-BROM.html
Und dort im Anhang LCD_CTRL.vhd als initialisiertes DPRAM:
Beitrag "Re: EA DOG-M initialisieren"

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Auch sehr empfehlenswert zu lesen.


http://www.fbeit.htwk-leipzig.de/~reinhold/files/xilinx/Docs/RAMs%20in%20XST-VHDL.pdf

Ein ROM ist ein RAM, dass beim initialisierte Werte hat.

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.