Аппаратное представление для массивов в VHDL
-
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).