Вы должны использовать постоянный размер для ваших массивов, поскольку вы пишете модель реального оборудования на VHDL. Сигнал похож на провод на печатной плате - вы не можете добавлять или удалять их динамически.
Если вы хотите использовать этот код, вам придется использовать generi c (который является локальной константой ), чтобы объявить размер вектора. Фактически вы уже прокомментировали это в своем коде, но он должен выглядеть так:
entity UnconArray is
generic (
depth : integer := 2
);
port (
clk_1 : in std_logic;
LED_0 : out std_logic
);
end UnconArray;
architecture Behavioral of UnconArray is
type Array_type is array (integer range <>) of integer;
signal MyUnconArray : Array_type (0 to depth);
...
Затем, когда вы создаете экземпляр компонента:
A1: UnconArray
generic map (
depth => 2
)
port map (
clk_1 => clk,
LED_0 => LED0
);
Однако, если вы не установите при глубине generi c до 3 вы по-прежнему будете получать ошибки, поскольку при назначении данных вы обрабатываете его как фиксированный размер. Вы также используете только элемент 0, так что остальная часть массива будет удалена во время минимизации синтеза. необходимо объявить.
Например, предположим, что вы хотите использовать в своем коде 2 разных целочисленных массива с разным количеством элементов в них. Вы можете объявить 2 типа ограниченных массивов с разными размерами или 1 неограниченный массив.