为什么这种设置有效?
component mux2to1 is
generic (M : integer := 1); -- Number of bits in the inputs and output
port (input0 : in m32_vector(M-1 downto 0) := (others => '0');
input1 : in m32_vector(M-1 downto 0) := (others => '0');
sel : in m32_1bit;
output : out m32_vector(M-1 downto 0));
end component;
我理解genric map的方式是(M:integer:1)将指定端口的位为1,但是当M-1 downto 0只是0时0,这没有任何意义。
答案 0 :(得分:1)
正如@ user1155120所说,你可以拥有一个包含1个元素的数组。 (0 downto 0)将有1个元素。
还有另一个要点:
在VHDL中,某种类型的1个元素的数组与元素类型的类型不同。因此,例如,std_logic
和std_logic_vector(0 downto 0)
是不同的类型。您不能将一个分配给另一个。 std_logic
是标量,而std_logic_vector(0 downto 0)
是数组类型。
To"转换"在这些类型之间,您需要索引数组类型。所以,有了信号
signal S : std_logic;
signal A : std_logic_vector(0 downto 0);
你不能将A分配给S,反之亦然,但你可以这样做:
A(0) <= S;
或者这个:
S <= A(0);
您还可以索引阵列端口。所以,用
entity HAS_ARRAY_PORT
port ( P : in std_logic_vector(0 downto 0));
end;
你可以这样做:
L: entity work.HAS_ARRAY_PORT port map (P(0) => S);