RAM generisch in VHDL, wie initialisieren?

Gast #2457385
Lesenswert?
• ▲
▼
Hallo VHDL Spezl,

ich baue gerade die Instantiierung eines RAMs auf 'simple VHDL' um (da 
Plattformunabhaengig und schneller in der Simulation mit GHDL). Nur, wie 
initialisiere ich dieses RAM am einfachsten? Die 'zu Fuss Methode' folgt 
hier:
1
   
2
   type t_ram is array (0 to 255) of std_logic_vector (31 downto 0);
3
   signal ram : t_ram := (x"00018021",    --          00
4
                          x"00018001",    --          01
5
                          x"00018021",    --          02
6
                          x"00018011",    --          03
7
                          x"00018021",    --          04
8
                          x"00018031",    --          05
9
                          x"00000000",    --          06
10
                          x"00000000",    --          07
11
                          ...
12
                          ...             -- hier iss alles 0 oder don't care
13
                          ...             -- (ist halt 'ne Fleissarbeit!)
14
                          ...
15
                          x"00000000",    --          FB
16
                          x"00000000",    --          FC
17
                          x"00000000",    --          FD
18
                          x"00000000",    --          FE
19
                          x"00000000"     --          FF
20
                         );
Also ich will nur ein paar Eintraege initialisieren, der Rest ist Null 
(bzw. sogar don't care). Ich denke, das muss doch mit irgendeinem 
Konstrukt ala
1
(others => (others => '0'))
zu loesen sein, oder?
Das RAM wird teilweise (bei mir so ca. 40 Eintraege) als 
ROM/Codespeicher verwendet und muss deshalb richtig initialisiert 
werden, der Rest des RAMs ist wirklich zum Datenaustausch gedacht 
(dual-ported RAM halt)...

Hat da jemand den Zauberspruch fuer mich? Ich stehe gerade voll auf dem 
Schlauch...
Gast #2457397
Lesenswert?
• ▲
▼
Ich hab hier sowas:
1
architecture Xilinx of DualPortRAM is
2
   type ram_type is array(natural range 0 to ((2**BRAM_W)/4)-1) of unsigned(WORD
3
_SIZE-1 downto 0);
4

5
shared variable ram : ram_type:=
6
(
7
     0 => x"0b0b0b0b",
8
     1 => x"82700b0b",
9
     2 => x"0b97800c",
10
     3 => x"3a0b0b0b",
11
     4 => x"94c70400",
12
     5 => x"00000000",
13
     ...
14
others => x"00000000"
15
);
Gast #2457404
Lesenswert?
• ▲
▼
Rufus schrieb:
> signal ram : t_ram;
> ram          <= (others => (others => '0'));
> ram(0 to 39) <= (...);

hmm, in der 'architecture' die Deklaration und nach dem 'begin' 
Zuweisungen? Na, ich bin da skeptisch (aber wenn kein anderer Vorschlag 
kommt probier ich das mal aus!)
Gast #2457411
Lesenswert?
• ▲
▼
berndl schrieb:
> hmm, in der 'architecture' die Deklaration und nach dem 'begin'
> Zuweisungen?

Ja, so ist das gemeint.

berndl schrieb:
> Na, ich bin da skeptisch (aber wenn kein anderer Vorschlag
> kommt probier ich das mal aus!)

So in der Art habe ich das gemacht und es funktioniert.

Bei dem Vorschlag von Bastler stört mich, dass man für jedes Wort die 
Adresse mit angeben muss. Das soll der Compiler doch selber machen... 
;-)
Gast #2457412
Lesenswert?
• ▲
▼
Bastler schrieb:
> (
>      0 => x"0b0b0b0b",
>      1 => x"82700b0b",
>      2 => x"0b97800c",
>      3 => x"3a0b0b0b",
>      4 => x"94c70400",
>      5 => x"00000000",
>      ...
> others => x"00000000"
> );

Jepp, das laeuft zumindest syntaktisch durch (Simulation laeuft gerade). 
Da hab' ich irgendwie zu kompliziert gedacht... Merci!
Gast #2457420
Lesenswert?
• ▲
▼
Rufus schrieb:
> So in der Art habe ich das gemacht und es funktioniert.
>
> Bei dem Vorschlag von Bastler stört mich, dass man für jedes Wort die
> Adresse mit angeben muss. Das soll der Compiler doch selber machen...
> ;-)

ahhhh ja, aber ich habe gerne Deklaration und Implementierung 
'eindeutig', da gefaellt mir der 'Bastler' Vorschlag ganz gut. Aber 
merci fuer den Tipp! Muss ich mir merken!
Gast #2459436
Lesenswert?
• ▲
▼
Rufus schrieb:
> Bei dem Vorschlag von Bastler stört mich, dass man für jedes Wort die
> Adresse mit angeben muss. Das soll der Compiler doch selber machen...
> ;-)

Macht ein Konverterscript, welches aus dem binary die init-strings 
erzeugt.
Wird doch kaum einer die Daten von Hand eingeben, oder?

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