VHDL初始化std_logic

时间:2015-05-09 18:49:39

标签: vhdl modelsim

我正在编写一个顺序计数器,它由一系列使用D触发器组件的单计数器组件组成。在单一计数器中,我需要以'0'的初始值q开头,但我在初始化时遇到问题。

qSTD_LOGIC信号,我试图按如下方式对其进行初始化:

signal q : STD_LOGIC := '0';

但是,当我使用ModelSim运行程序时,它显示的值为U,就好像它是未分配的一样。如果我在ModelSim中运行它时强制冻结'0'q的信号,那么它就能正常工作。

实现此目的的唯一方法是检查行为描述开头的值,如果未分配则将其设置为'0'

如果我使用BIT代替STD_LOGIC,一切都会完美无缺。

我会发布我的代码,但我不想冒着违反学术诚信的风险,因为这是针对学校项目的。

1 个答案:

答案 0 :(得分:0)

这适用于BIT而不是STD_LOGIC的原因是因为BIT有两个值' 1'和' 0' (没有表示未初始化的值)和STD_LOGIC有9个值,其中一个值是' U'这是用于表示&#34的值;此值尚未设置"。

正如评论中提到的那样,你可以通过在复位时指定一个值来解决这个问题 - 这是相当标准的做法 - 或者计算一个值来初始化输出(q)。

如果您想知道为什么信号声明中的初始化不起作用,因为并非所有综合工具都会承认这种初始化,而ModelSim就是其中之一。当你把它放在FPGA上时,Quartus会确认这种初始化,但Lattice Diamond或Xilinx ISE可能没有,但是如果你包含一个复位条件,大多数器件都会提供POR(上电复位),q将永远是这样做是很好的做法。