Größe v. Array erst bei Übergabe an procedure angeben

Gast #815078
Lesenswert?

Hallo Forum,

ich habe ein Problem was das Übergeben eines Arrays an eine procedure, 
die sich in einem Package (nicht synthesefähig) befindet, betrifft.
Folgender Code funktioniert nicht:
1
  procedure busBlockRead (
2
      constant len      : in  natural;
3
    constant data     : out array of (0 to len - 1) of std_ulogic_vector(cDataWidth - 1 downto 0) is
4
  begin
5
...

VHDl erwartet ja das das Array vorher als typ definiert wird, also:
1
type aDataArray is array (0 to ??? - 1) of std_ulogic_vector(cDataWidth - 1 downto 0);

und
1
  procedure busBlockRead (
2
      constant len      : in  natural;
3
    constant data     : out aDataArray)  is
4
  begin
5
...

Dies funktioniert, nur erlaubt mir dieser Ansatz keine dynamische Angabe 
der Arraygröße.

Gibt es eine schöne Möglichkeit dieses Dilemma zu umegehen?

Viele Danke!

lg,
Otto
Gast #815117
Lesenswert?

Das kannst Du machen, indem Du als Array-Größe "natural range <>" 
angibst.
Wenn Du es dann instanziierst, gibst Du die Größe an.
1
type aDataArray is array (natural range <>) of std_ulogic_vector(cDataWidth - 1 downto 0);
2

3
variable one_array: aDataArray(0 to 63);

Wenn es nicht synthetiserbar sein muss, brauchst Du garnicht die Länge 
des Arrays zu übergeben. Das kannst Du über die entsprechenden Attribute 
herausfinden.
1
one_array'length

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