我的问题与modelsim完成的初始化有关。 我想在特定范围内使用整数(例如,范围为0到511)。 这是VHDL中的声明:
signal cnt : natural range 0 to 511;
如果我不初始化此信号(例如在重置中),则默认情况下,modelsim将分配最左边的值。对于我的信号,它将为0。
我的问题是我想强制modelsim将模拟中的值初始化为'U'或'X'而不是最左边的值,这有可能吗?
答案 0 :(得分:2)
可以在声明时为信号提供一个初始化值:
signal foo: foo_type := foo_type_value;
请注意:=
赋值运算符,对于信号来说可能有点反常。
但是,不能,不能将'U'
或'X'
分配给类型为natural
的信号,因为它们不是natural
值。您可以做的是,确定信号的值512与U
等效,并在声明时分配它:
signal cnt : natural range 0 to 512 := 512;
由于不应在初始化后使用此额外的值,因此可以(应该)添加并发断言以检测不需要的情况:
assert cnt /= 512 report "Ooops! cnt=512" severity warning;
另一种选择是使用ieee.numeric_std.unsigned
代替natural
:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
...
signal cnt : unsigned(8 downto 0) := (others => 'U');
但是在使用它之前,请确保您了解它们之间的区别。例如,如果您尝试将自然cnt
的值减为0时递减,则将得到一个错误,而unsigned
版本的cnt
将默默地包装到"111111111"
。 / p>