首页 > 解决方案 > 如何修改modelsim完成的初始化?

问题描述

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

signal cnt : natural range 0 to 511;

如果我不初始化这个信号(例如在复位中),modelsim 将默认分配最左边的值。对于我的信号,它将是 0。

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

标签: vhdlmodelsim

解决方案


可以在声明时给信号一个初始化值:

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 时减少 natural ,您将收到错误,而unsigned版本cnt将默默地换行到"111111111".


推荐阅读