特权同学

Altera调用Modelsim仿真奇怪的复位问题

0
阅读(2354)

先贴一下相关的源代码:

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对最后的结果验证不会有影响,但是查看内部的寄存器就很困难,感觉很不爽。