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

StackOverflow https://stackoverflow.com/questions/2418432

  •  19-09-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

Тип массива в 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.

Другие советы

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

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

Проверьте это страница, также проверьте регистр VHDL

В основном это массив std_logic_vector с необходимой длиной

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top