Аппаратное представление для массивов в VHDL - PullRequest
5 голосов
/ 10 марта 2010

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

Ответы [ 4 ]

3 голосов
/ 11 марта 2010

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

3 голосов
/ 10 марта 2010

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

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

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

1 голос
/ 02 июня 2010

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

0 голосов
/ 08 июня 2012

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

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

...