端口映射是否有多个端口

时间:2014-10-07 02:12:05

标签: vhdl

例如,我有一个组件(例如,具有128个输入和1个输出的多路复用器)。我想实例化这个组件。所以我需要这128个输入的端口映射。我的问题是:有没有更简单的方法来进行128端口的映射而不是写128个语句? 非常感谢!

假设我们有这个组件:

component MUX_1bit is   
port(   

    data0       : IN STD_LOGIC ;
    data1       : IN STD_LOGIC ;
    ......
    data127     : IN STD_LOGIC ;
    select      : IN STD_LOGIC_VECTOR (6 DOWNTO 0);
    result      : OUT STD_LOGIC);
end component;  

现在,如果我想实例化它,

myMUX : MUX_1bit port map(  
    data0 => signal0,  
    data1 => signal1,  
   ..................
);

有没有更简单的方法而不是重复128次?

1 个答案:

答案 0 :(得分:1)

使用STD_LOGIC_VECTOR作为data的类型,因此:

component MUX_1bit is
  port(
    data   : in STD_LOGIC_VECTOR(127 downto 0);
    sel    : IN STD_LOGIC_VECTOR (6 DOWNTO 0);
    result : OUT STD_LOGIC);
end component;

请注意,select是一个保留的VHDL字,因此已更改为上面的sel

对于组件的使用,那么VHDL具有灵活性,所以单个位或 范围或全部可用于数据,如:

myMUX_1 : MUX_1bit port map(
  data   => dut_data,
  sel    => dut_sel,
  result => dut_result);

myMUX_2 : MUX_1bit port map(
  data(0)              => dut_data(0),
  data(1)              => dut_data(1),
  data(2)              => dut_data(2),
  data(7 downto 3)     => "10101",
  data(124 downto 8)   => (others => '0'),
  data(127 downto 125) => dut_data(127 downto 125),
  sel                  => dut_sel,
  result               => dut_result);

将数据作为STD_LOGIC_VECTOR也可以实现 实现起来要容易得多,因为可以为多路复用器生成result,如:

result <= data(to_integer(unsigned(sel)));