Forum: FPGA, VHDL & Co. Größe v. Array erst bei Übergabe an procedure angeben


von Otto (Gast)


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

von Mathi (Gast)


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

von Mathi (Gast)


Lesenswert?

Bei length fehlt noch die Dimension :(

von Otto (Gast)


Lesenswert?

vielen Danke Mathi!

.. genau nach der Lösung habe ich vergeblich gesucht ;)

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.