【问题标题】:ModelSim Simulation Stops Earlier than ExpectedModelSim 仿真比预期提前停止
【发布时间】:2022-01-20 07:15:35
【问题描述】:

我正在尝试在 ModelSim 上运行测试平台。我成功地编译和分析了我的电路代码,只有一个警告:

Warning (20028): Parallel compilation is not licensed and has been disabled

这是我的测试台场景:

initial begin
   clk = 0;
end
        
initial begin 
    forever begin
        #1; 
        clk = ~clk;
    end 
end
        
initial begin
    inc_or_res = 1;
    ld_reg8 = 1;
    #10;
        
    inc_or_res = 0;
    #90;
end

如您所见,它必须在我定义的延迟下运行至少 100 ps。

这是我得到的模拟结果。如您所见,它在 11ps 处停止。所以我无法测试我的场景。是什么原因?它不会在我的其他测试台中给我这样的错误。

【问题讨论】:

  • 好的,我现在发现它给出了(vsim-3601)迭代限制达到错误。
  • 警告 (20028) 不是来自 Modelsim。 (vsim-3601) 达到迭代限制错误 意味着您要么有一个组合振荡循环,要么有一些其他无限程序循环。查看 Modelsim 用户手册了解调试技巧。

标签: verilog hdl modelsim quartus


【解决方案1】:

模型 sim 足够聪明,可以理解在 #90 延迟之后没有其他事情要做。为了节省模拟时间,它会在此点之前停止模拟。这就是为什么在此之后您看不到任何波形的原因。

有多种方法可以解决此问题:

  1. #90 延迟之后添加$finish() 语句。这应该使模拟器保持活力。如果这不起作用,您可以尝试在 $finish() 之前添加一些虚拟事务。
  2. 在模型 sim GUI 中,有一个选项可以在指定的时间内运行仿真。你可以用那个。如果您不想每次都点击的麻烦,我敢肯定必须有一个等效的命令行。
  3. 从技术上讲,如果您的设计内部可能存在任何活动(我无法检查,因为您还没有发布它),ModelSim 应该保持活跃。也许检查你的设计。

【讨论】:

  • 这不是正确的答案,因为forever 循环永远有一些事情要clk 在以后做。你需要一个显式的 $finish 或者你的 Tcl 运行脚本中的一些东西来让模拟停止。
【解决方案2】:

好的,我找到并解决了问题。

我试图实现一个时序电路,它肯定由一个寄存器组成。问题是我通过创建结构 D 触发器实现了这个寄存器,并创建了一个组合循环。然后这个循环导致(vsim-3601)迭代限制达到错误。

下面是寄存器的实现方式: https://www.intel.com/content/www/us/en/programmable/quartushelp/13.0/mergedProjects/hdl/vlog/vlog_pro_registers.htm

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    相关资源
    最近更新 更多