关于modelsim中出现红线或有值为Hiz的问题
最近在写verilog,写了一个多模块的工程并仿真,但遇到这样一个问题:
自己设置的时钟信号能够正常变化,顶层的输入正常,但复位信号rst的值一直为Hiz,输出的值也为x,波形图显示为一条红色直线。
解决问题
在csdn上翻看了大量大佬的文章并自己试着修改之后发现了问题所在:
仿真时,我只是将输入的值初始化了,并没有将输出的值也一并初始化,导致仿真时系统不知道输出的初值而判定为不定态,而不定态在仿真波形图中正是一条红色直线。
在testbench文件中将输出也一并初始化(通常是用复位信号rst)再进行仿真,得到了正确的仿真图
testbench文件中貌似不能直接给输出赋初值,故一般用中间变量的形式,让rst这个复位信号去赋予输出变量初值。
下面是一个用复位信号rst给输出一下初值的简单例子
input rst;
output a,b; //两个输出变量
always @(posedge rst) //检测敏感信号,视具体情况而定
begin
a = 1'b0;
b = 1'b0;
end
在这之后只需在testbench文件中给rst赋初值即可。
结尾语
这只是其中一种原因,且是我自己的一个个例,但仍然有其意义。以后在仿真时应该试着在testbench文件中初始化所有的输入输出。
其他的原因在csdn上有很多大佬已经找出来了,可以去耐心查阅一番。
verilog全靠自学和翻看csdn上大佬们的文章,如有不对和不恰当的地方还请指正。