【问题标题】:Why is the simulation stuck in Vivado为什么仿真卡在 Vivado 中
【发布时间】:2020-04-29 13:19:57
【问题描述】:

我尝试开发备用内存代码,但模拟卡在 vivado 中。我不能确切地说它是否被卡住,但模拟没有运行。我已经附上了我无法清楚表达的问题的图片。代码的测试平台在这里。 vivado在尝试获得模拟波形时并没有给出模拟,而是在Icarus Verilog中完全工作,并且在GTK波中模拟波形清晰。

module trial_tb;
    
      reg clk;
      reg rst_n;
      reg bist_enable;
      reg we;
      reg [5:0] wraddr;
      reg data_in;
      reg re;
      reg [5:0] rdaddr;
    
      wire data_out; 
      wire repair_fail;
      wire repair_finish;
    
      integer m;
      integer idx;
    
      SRAM_repair uut (clk, rst_n, bist_enable, we, wraddr, data_in, re, rdaddr, data_out, repair_fail, repair_finish);
    
      initial
      begin
        clk = 0;  
        rst_n <= 0;
        bist_enable <= 0;
        rdaddr <= 'b0;
        wraddr <= 'b0;
        we <= 1'b0;
        re <= 1'b0;
        data_in <= 1'b0;
        
        #5.0 rst_n <= 1;
        #5.0 bist_enable <= 1;
        #52.9 bist_enable <= 1'b0;
        
        
        we <= 1'b1; 
        data_in <= 1'b0;
       
        for ( m=0 ; m<=32; m=m+1) begin
        wraddr <= m;
        #0.2;
        end
    
        data_in <= 1'b1;
        
        for ( m=33 ; m<=63; m=m+1) begin
        wraddr <= m;
        #0.2;
        end
            
        #0.2;
        we <= 1'b0;
        re <= 1'b1;
    
        for ( m=0 ; m<64; m= m+1) begin
        rdaddr <= m;
        #0.2;
        end
                          
      end
    
      initial 
      begin
        $dumpfile ("SRAM_repair.vcd");
        $dumpvars( 0, trial_tb);
       // $dumpvars( 0, trial_tb.uut.i_bisr_controller.fcr\[0\]);
       // $dumpvars( 0, trial_tb.uut.i_bisr_controller.fcr\[1\]);
      //  $dumpvars( 0, trial_tb.uut.i_bisr_controller.fcr\[2\]);
      //  $dumpvars( 0, trial_tb.uut.i_bisr_controller.fcr\[3\]);
      //  $dumpvars( 0, trial_tb.uut.i_bisr_controller.fcr\[4\]);
     //   $dumpvars( 0, trial_tb.uut.i_bisr_controller.fcr\[5\]);
        #90 $finish;
      end
            
      always #0.1 clk = ~clk;
    endmodule

【问题讨论】:

    标签: verilog vivado test-bench


    【解决方案1】:

    我怀疑您没有为测试平台的延迟使用适当的时间表。来自 IEEE Std 1800-2017,第 22.7 节 `timescale

    如果没有指定 `timescale 或它已被 `resetall 指令,默认时间单位和精度为 特定工具。

    未指定时,我的模拟器默认为:

    `timescale 1ns/1ns
    

    我看到模拟在时间 0 挂起,就像我想的那样。由于时间精度与时间单位相同(对我来说都是1ns),所以clk的0.1延迟向下舍入为0,导致clkalways块中的无限循环。

    我通过在模块之前添加这个明确的时间刻度来解决这个问题:

    `timescale 1ns/100ps
    

    这会将精度设置为小于单位,从而允许clk 正确切换。

    您看到的 Vivado 和 Icarus 之间的差异可能是由于使用了不同的时间尺度。要查看生效的时间刻度,请将此代码添加到您的测试平台:

    initial $printtimescale;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多