如何修改由Modelim完成的初始化?

时间:2018-07-25 09:02:52

标签: vhdl modelsim

我的问题与modelsim完成的初始化有关。 我想在特定范围内使用整数(例如,范围为0到511)。 这是VHDL中的声明:

signal cnt : natural range 0 to 511;

如果我不初始化此信号(例如在重置中),则默认情况下,modelsim将分配最左边的值。对于我的信号,它将为0。

我的问题是我想强制modelsim将模拟中的值初始化为'U'或'X'而不是最左边的值,这有可能吗?

1 个答案:

答案 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>