Короткий ответ - нет - тип массива не сопоставляется с регистром.
Длинный ответ:
Тип массива в 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
.