Forum: FPGA, VHDL & Co. mehrdimensionales array initialisieren


von stephan (Gast)


Lesenswert?

hey ho ;)
ich bin grad dabei ein 32 bit ram zu bauen, das allerdings aus vier 
8-bit ram blöcken besteht. funktioniert soweit auch super, nur kann ich 
es nicht mit der unten stehenden funktion initialisieren.
ein "komplettes" 32-bit ram zu initialisieren ist kein problem..
aber hier krieg ich immer die warnung: line 59: Default value is ignored 
for signal <MEM_FILE>

weiß einer von euch vielleicht woran das liegen könnte?

greetz
stephan

1
type RAM_8  is array(0 to MEM_SIZE - 1) of STD_LOGIC_VECTOR(7 downto 0);
2
type RAM_32 is array(3 downto 0) of RAM_8;
3
type RAM_IMAGE_TYPE is array (0 to MEM_SIZE - 1) of STD_LOGIC_VECTOR(31 downto 0);
4
  signal RAM_IMAGE : RAM_IMAGE_TYPE :=
5
  (
6
    000000 => x"0A001106",
7
    others => x"AE013FF7" 
8
  );
9
10
  function load_mem(IMAGE : RAM_IMAGE_TYPE) return RAM_32 is
11
    variable TEMP_MEM : RAM_32;
12
  begin
13
    for j in 0 to 3 loop
14
      for i in 0 to MEM_SIZE - 1 loop
15
        TEMP_MEM(j)(i) := IMAGE(i)(j*8+7 downto j*8);
16
      end loop;
17
    end loop;
18
    return TEMP_MEM;
19
  end load_mem;
20
21
  signal MEM_FILE : RAM_32 := load_mem(RAM_IMAGE);

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


Lesenswert?

Welche Toolchain?

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


Lesenswert?

Falls Xilinx ISE: probiers mal wie im 
Beitrag "Re: Signal initialisieren" beschrieben...

von stephan (Gast)


Lesenswert?

jo, is für die xilinx ise ^^

habs jetzt aber hinbekommen:
RAM_IMAGE muss eine konstante sein, kein signal...
macht ja irgendwo auch sinn ;)

trotzdem danke =)

stephan

von Duke Scarring (Gast)


Lesenswert?

stephan schrieb:
> habs jetzt aber hinbekommen:
> RAM_IMAGE muss eine konstante sein, kein signal...
> macht ja irgendwo auch sinn ;)
Nicht wirklich. Damit ist es ja ein ROM und kein schon irgendwie 
gefüllter RAM.

Duke

von stephan (Gast)


Lesenswert?

@Duke

über die konstante wird ja ein signal initialisiert... die xilinx ise 
synthese macht dann daraus ein block ram (bzw vier stück) die einen 
preset haben (kann man ja auch beim instantiieren von block ram 
primitiven mit angeben).

funktioniert bisher ganz gut... aber vielleicht kommt ja noch das böse 
erwachen ;)

lg
stephan

von Duke Scarring (Gast)


Lesenswert?

stephan schrieb:
> über die konstante wird ja ein signal initialisiert...
OK. Das war mir entgangen.

> die einen
> preset haben
Da dürfte es nur ein distributed RAM werden.

> (kann man ja auch beim instantiieren von block ram
> primitiven mit angeben)
Das sind generics. An einem BRAM gibt es kein Reset/Preset. Höchstens 
für die Register am Ausgang (wenn man welche hat).

Duke

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.