例如,我有一个组件(例如,具有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 :(得分: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)));