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

时间:2018-06-19 17:28:48

标签: verilog modelsim time-format

在我的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模式与批处理模式:

  • 有什么需要考虑的选择吗?
  • 是否存在任何可能引起这种影响的编译(顺序)问题?
  • 也许,是否存在任何已知的工具问题?

有人可以给我提示吗?

2 个答案:

答案 0 :(得分:0)

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

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

尝试在GUI中批量运行以上命令,看看是否有区别。否则,您需要向我们显示您正在使用的确切命令行。

答案 1 :(得分:0)

感谢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模式下的行为略有不同?