[来自自己实体的VHDL阵列

问题描述 投票:0回答:1

是否可以声明包含自己的实体的数组?

我正在尝试获取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;

我将如何实例化包含这些寄存器的数组?

vhdl xilinx hdl vivado
1个回答
0
投票

您可以像这样使用用于生成

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;

注:我介绍了一个时钟,因为同步逻辑中没有时钟的寄存器有点奇怪,您也应该添加一个复位。如果您正在执行一些异步逻辑,请忽略此注释。

© www.soinside.com 2019 - 2024. All rights reserved.