2014-10-07 156 views
0

例如,我有一个组件(例如一个具有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倍?

+0

std_logic_vector:实际 实现更容易,因为result可以像多路复用器可以生成? – godel9 2014-10-07 02:31:35

+0

我编辑了我的问题,使其更清楚。我的问题是,128个端口手动输入太多。非常感谢! – mhz 2014-10-07 03:32:02

回答

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 <= data(to_integer(unsigned(sel))); 
+0

谢谢你帮我编辑和解决我的问题!如果我们将每个输入/输出宽度从std_logic(1bit)扩展到std_logic_vector(7 downto 0),那么我可以将数据定义为自定义类型“std_logic_vector(7 downto 0)”数组。之后,我们仍然有类似result <= data(to_integer(unsigned(sel)))。我对吗? – mhz 2014-10-07 05:51:24

+0

如果你把'data'作为'std_logic_vector(7 downto 0)'的数组'',那么你仍然可以通过'data(to_integer(unsigned(sel)))'来选择。 – 2014-10-07 06:48:39

+0

我现在明白了。非常感谢! – mhz 2014-10-07 07:15:52