VHDL中可变数量的输入和输出

MI8*_*I89 7 generics vhdl

我应该在VHDL中创建一个具有可变数量的输入和输出的实体.这个引脚数应该从GENERIC结构中给出.我们假设有这样的代码:

entity HELLO is
    GENERIC(NUM_INPUT: integer:=4;
            NUM_OUTPUT: integer:=2
     );

    port(
         input1 : in std_logic_vector(31 downto 0);
         input2 : in std_logic_vector(31 downto 0);
         input3 : in std_logic_vector(31 downto 0);
         input4 : in std_logic_vector(31 downto 0);
         out1   : out std_logic_vector(31 downto 0); 
         out2   : out std_logic_vector(31 downto 0) 

     );
end entity HELLO; 
Run Code Online (Sandbox Code Playgroud)

显然,手动编写它们(如上例所示)会使GENERIC构造无效.

我希望这4个输入和2个输出根据GENERIC信息自动生成.怎么做?

sca*_*eff 10

我认为实现这一目标的最简单方法是为包中的32位字定义自定义数组类型,如:

type WORD_ARRAY_type is array (integer range <>) of std_logic_vector (31 downto 0);
Run Code Online (Sandbox Code Playgroud)

你的实体声明然后变成:

use work.HELLOPackage.all;

entity HELLO is
GENERIC (
  NUM_INPUT : integer := 4;
  NUM_OUTPUT : integer := 2
);
port (
  input1 : in WORD_ARRAY_type(NUM_INPUT-1 downto 0);
  out1   : out WORD_ARRAY_type(NUM_OUTPUT-1 downto 0)
);
end entity HELLO;
Run Code Online (Sandbox Code Playgroud)

您还可以使用无约束数组作为输入和输出:

entity HELLO is
GENERIC (
  NUM_INPUT : integer := 4;
  NUM_OUTPUT : integer := 2
);
port (
  input1 : in WORD_ARRAY_type;
  out1   : out WORD_ARRAY_type
);
end entity HELLO;
Run Code Online (Sandbox Code Playgroud)

然后使用泛型使用这些端口.实例化实体时,只需连接具有正确尺寸的数组即可匹配泛型.