mehrere unterschiedliche BRAM Initialisierungen in einer Entity

Gast #3131557
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
Gast #3131773
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
Gast #3131866
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
Gast #3132592
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
Moderator (Firma: Titel) Persönliche Seite #3132734
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"

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren