VHDL:genric地图设置

时间:2016-04-06 02:04:42

标签: vhdl

为什么这种设置有效?

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,这没有任何意义。

1 个答案:

答案 0 :(得分:1)

正如@ user1155120所说,你可以拥有一个包含1个元素的数组。 (0 downto 0)将有1个元素。

还有另一个要点:

在VHDL中,某种类型的1个元素的数组与元素类型的类型不同。因此,例如,std_logicstd_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);