为什么模拟卡在vivado中?

问题描述 投票:0回答:1

我试图开发一个备用内存代码,但是模拟陷入了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

https://i.stack.imgur.com/DHmZR.jpg

verilog vivado
1个回答
1
投票

我怀疑您没有为测试台中的延迟使用适当的时间标度。从IEEE Std 1800-2017,第22.7节`timescale

如果未指定`时标,或已由`resetall指令,默认时间单位和精度为特定于工具。

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

`timescale 1ns/1ns

正如我认为的那样,我看到模拟在时间0挂起。我怀疑由于时间精度与时间单位相同(对我来说都是1ns),因此clk的0.1延迟舍入为0,从而导致clk always中出现无限循环阻止。

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

`timescale 1ns/100ps

此设置的精度小于单位,允许clk正确切换。

© www.soinside.com 2019 - 2024. All rights reserved.