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