Аппаратное представление массивов в VHDL

Используя VHDL, я хочу иметь несколько регистров, в каждом из которых хранится 16 бит. Итак, я обнаружил, что VHDL имеет встроенный массив, и я хочу использовать его для хранения 16 бит в каждом элементе в iy, поэтому я хочу знать, отображает ли VHDL этот массив в фактические регистры или нет?


person ahmed elbagoury    schedule 10.03.2010    source источник


Ответы (4)


Короткий ответ - нет - тип массива не отображается в регистр.

Длинный ответ:

Тип массива в VHDL — это просто индексированная коллекция элементов одного типа. В вашем случае вы, вероятно, использовали бы массив в качестве вывода из банка регистров.

Итак, скажем, у вас есть банк из 8 регистров, каждый из которых содержит 16 бит. Выходом из этого банка будет массив (размером 8) 16-битных векторов. Объявление компонента для этого банка регистров будет выглядеть примерно так:

 component reg8x16
  port(
   clock: in std_logic;
   reset: in std_logic;
   enable: in std_logic;
   rout : out r_array(0 to 7)
   );
 end component; 

rout - это ваш массив зарегистрированных выходов из банка регистров. Таким образом, вы можете разыменовать вывод регистра 0 из банка, используя rout(0), который имеет тип std_logic_vector(15 downto 0).

Также не забудьте где-нибудь объявить тип массива (обычно в файле пакета). Это будет выглядеть примерно так:

type r_array is array (integer range <>) of std_logic_vector(15 downto 0);

Оператор (integer range <>) является своего рода заполнителем для диапазона индексов массива — он будет заполнен позже, когда будет использоваться тип массива (например, в нашем объявлении компонента выше).

Я не уверен, отвечает ли это на ваш вопрос или нет. Я не буду вдаваться в подробности создания компонента reg8x16. По сути, вы просто создаете 16-битный регистр, вывод которого имеет тип std_logic_vector(15 downto 0); (вы можете посмотреть, как это сделать в Интернете... это довольно простой VHDL). Затем вы просто создаете экземпляры 8 из этих регистров и помещаете их в компонент с именем reg8x16.

person Community    schedule 10.03.2010

Массив подобен любой другой переменной или сигналу: если вы описываете поведение, которое означает, что он должен помнить свое состояние от одного такта до другого, то триггеры (или блоки памяти, если условия верны) будут выведены синтезатором.

person Martin Thompson    schedule 11.03.2010

Любой массив с допустимым диапазоном будет отображаться на провода в сгенерированном списке соединений. Это довольно очевидно — оборудование содержит только вентили и провода. Что-то вроде (от 3 до 0) (от 1 до 0) будет соответствовать размеру провода 4x2 или 8 бит. Теперь вы сопоставляете отдельные обращения, такие как a(3)(1), с индексами в этом одномерном массиве. Таким образом, a(3)(1) — это, по сути, a(7).

person Fanatic23    schedule 02.06.2010

проверьте эту страницу, а также проверьте зарегистрировать vhdl

в основном это массив std_logic_vector с требуемой длиной

person Amir Shenouda    schedule 07.06.2012