Многомерная Матрица сигналов в VHDL

у меня есть сигнал в VHDL, объявленный так:

signal Temp_Key : std_logic_vector(79 downto 0);

этой Temp_Key проходит через for цикл 31 раз, и он изменяется. Я хочу хранить все 31 различных Temp_Keys в массиве.

можно ли использовать многомерные массивы в VHDL для хранения 80-битных сигналов ?

3 ответов


Да, сначала вам нужно объявить тип:

type YOUR_ARRAY_TYPE is array (0 to 30) of std_logic_vector(79 downto 0);

Примечание. Вы также можете объявить тип неопределенной длины-так что вы можете указать, сколько 80-битных слов он имеет, когда вы объявляете свой сигнал. И с VHDL 2008 вы также можете оставить размер slv неуказанным, также должен быть объявлен при создании вашего сигнала. Например:

type slv_array is array (natural range <>) of std_logic_vector;

и затем использовать его

signal MY_SIGNAL : YOUR_ARRAY_TYPE;
...
MY_SIGNAL(0) <= data;
...
MY_SIGNAL(1) <= data;

посмотреть здесь для справки.


Как говорится в сообщении выше, вы можете создать любой многомерный тип данных массива. Другое дело, что вам нужно быть осторожным, является ли этот код синтезируемым (т. е. нацеленным на FPGAs или ASICs, или это чисто для моделирования). Вы можете выполнить итерацию от 0 до 31 с помощью FSM/counter или generate block В зависимости от того, насколько критично ваше время и сколько области вы готовы использовать. Экземпляр многомерного массива, показанный в приведенном выше сообщении, безусловно, синтезируется.


в VHDL есть два варианта

1
signal X is array (range) of ArrayType;
2
signal Y is array (range1, range2) of Type;

Я думаю, что Вариант 1 лучше, поддерживаемая средствами. Я также нахожу сходство между этими двумя вариантами и функциональное программирование, которое учит нас, что мы всегда можем Карри многомерная функция(x,y) в цепочку однопараметрических, f(x) -> f (y). Последний выглядит так:массив массивов.