Hallo,
mir ist bekannt dass man in VHDL Array-Typen mit (natural range <>)
deklarieren kann, so dass man die eigentliche Länge in der jeweiligen
Dimension erst bei der Signal-/Variablendeklaration bestimmt.
In einer bestimmten Situation benötige ich aber Arrays aus Arrays (array
of std_logic_vector) oder Arrays aus Integern (array of integer).
Hierbei muss ich aber in der Typendeklaration die Länge des zugrunde
liegenden Array Typs festsetzen, also z.B.
1 | type at1 is array (natural range <>) of std_logic_vector(3 downto 0);
|
oder
1 | type at2 is array (natural range <>) of integer range 0 to 123;
|
Lösbar ist dieses Problem zumindest für die std_logics mit 2D-Arrays:
1 | type at3 is array (natural range <>, natural range <>) of std_logic;
|
Dieser Ansatz scheitert aber am Fehlen von Slices aus 2D Arrays in VHDL.
Folgender Code funktioniert also nicht:
1 | signal s1 : at3 (3 downto 0, 7 downto 0);
|
2 | signal s2 : std_logic_vector(7 downto 0);
|
3 | ...
|
4 | s2 <= s1(2, 7 downto 0);
|
Wie ist das Problem zu Lösen. Für jede benötigte Arraygröße und Range
einen eigenen Typ anzulegen ist an der Stelle natürlich auch nicht
praktikabel, insbesondere wenn die Dimensionen zusätzlich noch per
Generic anpassbar sein müssen.