verilog $timeformat 在 modelsim 批处理模式下未正确评估(不起作用:(

verilog $timeformat not properly evaluated in modelsim batch mode (does not work :(

在我的 verilog 测试台中,我正在使用 timescale 1 ns / 1 ns$timeformat,如下所示:

initial $timeformat(-3 , 6, " ms", 14);

当 运行 处于 GUI 模式 (ModelSim) 时,调试提示符合预期,例如:

#    0.000000 ms          WDOG : *** tc_can_init_check alive: simulation break at 0.200000 ms
#    0.000225 ms       INFO : ############################################
#    0.000225 ms       INFO : #
#    0.000225 ms       INFO : # starting test sequence
#    0.000225 ms       INFO : #
#    0.000225 ms       INFO : ############################################

注意第一行simulation break at 0.200000 ms的时间格式和每行开头的时间戳格式一样(0.000225 ms表示225纳秒,对应``timescale ).

现在,当 运行 ModelSim 处于批处理模式时,似乎 $timeformat 不再被正确考虑:

#    0.000000 ms          WDOG : *** tc_can_init_check alive: simulation break at 0.200000 ms
#  224.999000 ms       INFO : ############################################
#  224.999000 ms       INFO : #
#  224.999000 ms       INFO : # starting test sequence
#  224.999000 ms       INFO : #
#  224.999000 ms       INFO : ############################################

请注意第一行simulation break at 0.200000 ms的格式仍然符合预期,但每行开头的时间戳格式错误! (224.999000 ms 这基本上是正确的时间,但移动了 6 位小数 - 即时间以纳秒显示)。

在我看来 $timeformat 在批处理模式下 (ModelSim) 运行 时会被忽略。

为什么?! 以及如何克服这个问题??

我能发现的这两种情况之间的唯一区别是 GUI 模式与批处理模式:

谁能给我提示?

一个简单的单个文件测试将证明问题不在于 $timeformat

`timescale 1ns/1ns
module top;
   initial begin
      $timeformat(-3 , 6, " ms", 14);
      #225000;
      $display("time : %t",$realtime);
   end
endmodule

在 GUI 中和批处理中尝试 运行 以上内容,看看是否存在差异。否则,您需要向我们展示您正在使用的确切命令行。

感谢 dave_59 提醒我分而治之:)

在实施您的示例并在我的环境中获得相同(坏)结果后,我从头开始创建了一个完全独立的测试环境:在这个新环境中,一切都按预期工作!

所以我尝试通过在我的脚本集中逐步评论部分来找出根本原因。

最终证明是 sim.do 文件导致了问题。无论是批处理模式还是 GUI 模式,它都会显示:

run 1 ns
restart -f
run -all

此序列的原因是为了加快模拟时间:在您发出 restart 命令后,模拟似乎 运行 更快。我无法解释,但这是我一开始就发现的。所以这个序列从那以后就在那里了 ;)

现在我修改成这样:

if [batch_mode] {
  run -all
} else {
  run 1 ns
  restart -f
  run -all
}

=> 有了这个修改,所有问题都消失了!

也许 ModelSim restart 命令在批处理模式下与在 GUI 模式下的行为略有不同?