Многомерный массив сигналов в VHDL - PullRequest
9 голосов
/ 14 марта 2012

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

signal Temp_Key : std_logic_vector(79 downto 0);

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

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

Ответы [ 3 ]

22 голосов
/ 14 марта 2012

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

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;

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

0 голосов
/ 03 декабря 2012

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

Вариант 1

signal X is array (range) of ArrayType;

Вариант 2

signal Y is array (range1, range2) of Type;

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

0 голосов
/ 14 марта 2012

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

...