是否可以声明包含自己的实体的数组?
我正在尝试获取16个寄存器(4位地址),并希望使用数组访问它们。我有一个“注册”实体和一个注册管理器实体,由ALU通过以下地址访问:
注册:
entity register is
port(en : in STD_LOGIC;
d_in : in STD_LOGIC_VECTOR(7 downto 0);
d_out : out STD_LOGIC_VECTOR(7 downto 0));
end register;
注册管理者:
entity register_manager is
port(en : in STD_LOGIC;
addr : in STD_LOGIC_VECTOR(3 downto 0);
data : in STD_LOGIC_VECTOR(7 downto 0));
end register_manager;
我将如何实例化包含这些寄存器的数组?
您可以像这样使用用于生成:
type t_array is array (0 to 15) of STD_LOGIC_VECTOR(7 downto 0);
signal data_array : t_array;
...
process(clk)
begin
if rising_edge(clk) then
for I in 0 to 15 loop
if to_integer(unsigned(addr)) = I then
data_array(I) <= data;
end if;
end loop;
end if;
end process;
for I in 0 to 15 generate
inst_register : register
port map
(
en => en,
clk => clk,
d_in => data_array(I),
d_out => open -- Your register_manager has no ouput
);
end generate;
注:我介绍了一个时钟,因为同步逻辑中没有时钟的寄存器有点奇怪,您也应该添加一个复位。如果您正在执行一些异步逻辑,请忽略此注释。