Altera调用Modelsim仿真奇怪的复位问题<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
先贴一下相关的源代码:
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
仿真后的波形:
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
本意是要在复位信号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对最后的结果验证不会有影响,但是查看内部的寄存器就很困难,感觉很不爽。
用户377235 2014-2-10 09:48
用户184356 2012-4-16 10:29
用户1077587 2011-12-22 15:16
用户385471 2011-7-11 14:03
用户931629 2011-7-8 11:53
用户1480013 2011-7-6 16:23
fuxiao123_401762695 2011-7-6 09:18
ilove314_323192455 2009-7-3 19:22