我正在编写一个顺序计数器,它由一系列使用D触发器组件的单计数器组件组成。在单一计数器中,我需要以'0'
的初始值q
开头,但我在初始化时遇到问题。
q
是STD_LOGIC
信号,我试图按如下方式对其进行初始化:
signal q : STD_LOGIC := '0';
但是,当我使用ModelSim运行程序时,它显示的值为U
,就好像它是未分配的一样。如果我在ModelSim中运行它时强制冻结'0'
到q
的信号,那么它就能正常工作。
实现此目的的唯一方法是检查行为描述开头的值,如果未分配则将其设置为'0'
?
如果我使用BIT
代替STD_LOGIC
,一切都会完美无缺。
我会发布我的代码,但我不想冒着违反学术诚信的风险,因为这是针对学校项目的。
答案 0 :(得分:0)
这适用于BIT而不是STD_LOGIC的原因是因为BIT有两个值' 1'和' 0' (没有表示未初始化的值)和STD_LOGIC有9个值,其中一个值是' U'这是用于表示&#34的值;此值尚未设置"。
正如评论中提到的那样,你可以通过在复位时指定一个值来解决这个问题 - 这是相当标准的做法 - 或者计算一个值来初始化输出(q)。
如果您想知道为什么信号声明中的初始化不起作用,因为并非所有综合工具都会承认这种初始化,而ModelSim就是其中之一。当你把它放在FPGA上时,Quartus会确认这种初始化,但Lattice Diamond或Xilinx ISE可能没有,但是如果你包含一个复位条件,大多数器件都会提供POR(上电复位),q将永远是这样做是很好的做法。