聚合体
(foo'high => '1', foo'high - 1 downto foo'low => '0')
具有索引范围方向“到”。您的警告是说:不要仅仅因为您在其中包含一个定义为 'downto' 的数组,就认为它的方向是 'downto'。
为什么默认方向是“到”?好吧,我们需要考虑一下这个聚合是什么类型。(来吧 - 这是 VHDL - 它必须有一个类型)。
在我的代码中,它的类型是unsigned
. 为什么?好吧,因为我已将它与 type 过程的输入相关联unsigned
。在您的代码中,它的类型也是unsigned
. 为什么?好吧,因为它是=
运算符的右手参数,其左手参数肯定是unsigned
。只有一种可能的=
运算符版本,即测试两个unsigned
s 的版本。
现在,我们需要看看该类型unsigned
是如何声明的,当我们这样做时,我们看到它被声明为一个索引类型为 的无约束数组natural
:
type unsigned is array (natural range <>) of std_logic;
type 的左侧值为natural
0。因此,这就是您的聚合具有索引范围方向“到”的原因。
如果执行此代码,您可以看到 VHDL 如何定义聚合上的索引:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
entity E is
end entity ;
architecture A of E is
signal foo : unsigned(4 downto 0);
begin
process
procedure display (constant foo : in unsigned) is
begin
report "foo'left= " & integer'image(foo'left);
report "foo'right= " & integer'image(foo'right);
report "foo'high= " & integer'image(foo'high);
report "foo'low= " & integer'image(foo'low);
end procedure;
begin
display((foo'high => '1', foo'high - 1 downto foo'low => '0'));
wait;
end process;
end architecture A;