Altera调用Modelsim仿真奇怪的复位问题
时间:08-26 11:08 阅读:1201次
*温馨提示:点击图片可以放大观看高清大图
简介:不知道大家是不是遇到过类似的问题。尽管这个小bug对最后的结果验证不会有影响,但是查看内部的寄存器就很困难,感觉很不爽。
先贴一下相关的源代码:
output[14:0] sram_addr; // SRAM地址总线
reg[14:0] addr_r; // SRAM地址总线
always @ (posedge clk or negedge rst_n)
if(!rst_n) addr_r <= 15'd0;
else if(delay == 26'd29999) addr_r <= addr_r+1'b1; //写入地址自增1
assign sram_addr = addr_r;
testbench中的 复位:
initial begin
rst_n = 0;
#200; rst_n = 1;
end
仿真后的波形:
本意是要在复位信号rst_n=0时,sram_addr=addr_r=15’d0,但是上面仿真后很奇怪的是sram_addr=15’d0(正确),而与其直接连接的reg变量addr_r=15’b0000000zzzzzzzz,无法复位,这个addr_r是内部寄存 器,不作为外部输出。但是在复位后,Modelsim中居然出现高阻态,再看下面的波形,当代码运行到一定时候addr_r需要增加1时:
以黄线为界,sram_addr自增1,而addr_r低8位依然为高阻态。出现这种情况很是郁闷,这不是第一次了,上回也是纳闷了很久,最后实在找不出毛病敷 衍了事,因为对最后的输出没有影响(和上面的情况基本是一样的)。但是这回又出现了同样的问题,以前我也都是这么写代码,testbench里这么复位都很正常,这回用Quartus II 8.1和Modelsim SE 5.7d仿真时居然接二连三的出这个bug,不知道大家是不是 遇到过类似的问题。尽管这个小bug对最后的结果验证不会有影响,但是查看内部的寄存器就很困难,感觉很不爽。