Используя 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 вниз до 0)
.
Также не забудьте где-нибудь объявить тип массива (обычно в файле пакета). Это будет выглядеть примерно так:
тип r_array - это массив (диапазон целых <>) из std_logic_vector (от 15 до 0);
Оператор (диапазон целых чисел <>)
является своего рода заполнителем для диапазон индекса массива - он будет заполнен позже, когда будет использоваться тип массива (например, в нашем объявлении компонента выше).
Я не уверен, отвечает ли это на ваш вопрос или нет. Я не буду вдаваться в подробности создания компонента reg8x16. По сути, вы просто создаете 16-битный регистр, выходные данные которого имеют тип std_logic_vector (15 вниз до 0);
(вы можете посмотреть, как это сделать в Интернете ... это довольно простой VHDL). Затем вы просто создаете экземпляры 8 из этих регистров и помещаете их в компонент с именем reg8x16
.
Массив похож на любую другую переменную или сигнал: если вы описываете поведение, которое означает, что он должен запоминать свое состояние от одного такта часов до другого, то триггеры (или блоки памяти, если условия верны) будут выведены синтезатором.
Любой массив с допустимым диапазоном будет отображаться на провода в сгенерированном списке соединений. Это довольно очевидно - оборудование содержит только вентили и провода. Что-то вроде (3 вниз до 0) (от 1 до 0) будет соответствовать проводам размером 4x2 или 8 бит. Теперь вы сопоставляете отдельные обращения, такие как (3) (1), с индексами в этом одномерном массиве. Таким образом, a (3) (1) по сути является (7).