Generischen RAM mit Daten vorbelegen

OP #1121509
Lesenswert?

Servus,
wie beschreibt man einen RAM mit variabler Breite / Tiefe und belegt 
diesen mit Daten vor?

Bei fixer Groesse (z.B. 8x16) ist es einfach:
1
ram_t : is array(0 to 7) of std_logic_vector
2
...
3
generic(content : ram_t := XYZ);
4
...
5
signal ram : ram_t := content;

Variable Groesse ohne Vorbelegung ebenso:
1
generic(width : integer = 16, depth = 8)
2
...
3
ram_t is array(0 to depth-1) of std_logic_vector(width-1 downto 0);
4
signal ram : ram_t;

(Die Beschreibung des eigentlichen RAM-Verhaltens ist natuerlich auch 
kein Problem, deswegen habe ich sie hier weggelassen.)

Ich habe zwar einige Beschreibungen probiert, aber keine davon 
entspricht dem VHDL-Standard oder wird von den Tools richtig umgesetzt:
1
generic(width : integer = 8; depth: integer = 8; content : array(0 to depth-1) of std_logic_vector(width-1 downto 0) := XYZ);
ist kein gueltiges VHDL (klar). Aendere ich das in
1
content : std_logic_vector := XYZ
funktioniert natuerlich die Zuweisung
1
signal ram : ram_t := content;
nicht mehr. (Kann man hier irgendeinen Cast machen?) Und mit
1
 signal ram : std_logic_vector(depth*width-1 downto 0);
erkennt xst das nicht mehr als RAM und packt es in Flipflops...

Die Benutzung von templates aus IP-Cores entfaellt, bei sehr 
unterschiedlichen RAM-Groessen und mindestens vier Zielplattformen ist 
das zu zeitaufwendig.
OP #1121546
Lesenswert?

Dann kannst du mir sicher auch sagen, in welchem Datasheet ich suchen 
muss. Im xst user guide ist dieser Fall jedenfalls nicht beschrieben.

Dort sind nur Varianten gezeigt, die den RAM innerhalb der selben Entity 
mit Werten vorbelegen. Ich moechte aber einen RAM, der in einer 
component beschrieben wird von ausserhalb mit Daten belegen.
Gast #1121632
Lesenswert?

im libguide. es gibt auch noch ein weiteres paper das dieses problem 
sehr ausführlich mit versionsunterschieden und dynamischen inhalt 
(files) behandelt. ab ise 7 kannst du auch in den examples nachgucken. 
da steht auch ein bissel was. falls du mit files arbeitest, so lass dir 
gesagt sein, dass der mapper nur textfiles untersützt und keine 
binaries!
Gast #1124181
Lesenswert?

Mach Dir ein package, wo Du Deinen ram_t-Typen deklarierst.
Dann kannst Du sowohl Dein ram-Signal, das Du vorbelegen willst, sowie 
Dein generic als diesen Typ deklarieren.

Das eigentliche RAM-Vorbelegungssignal mit den Werten, die Du Deiner 
Komponente als generic übergibst, musst Du dann als constant und 
nicht als signal deklarieren, sonst bekommst Du einen Fehler vom Typ 
"The actual value associated with a generic must be a globally static 
expression", oder so ähnlich. Dämlich aber leider VHDL.

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