Altera调用Modelsim仿真奇怪的复位问题
          
            时间:08-26 11:08 阅读:1371次
*温馨提示:点击图片可以放大观看高清大图
                
         
        
		  
               简介:不知道大家是不是遇到过类似的问题。尽管这个小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对最后的结果验证不会有影响,但是查看内部的寄存器就很困难,感觉很不爽。