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

verilog$timeformat在modelsim批处理模式下未正确评估(不工作:(,verilog,modelsim,time-format,Verilog,Modelsim,Time Format,在我的verilog测试台中,我使用时间刻度1ns/1ns和$timeformat如下: initial $timeformat(-3 , 6, " ms", 14); if [batch_mode] { run -all } else { run 1 ns restart -f run -all } 在GUI模式(ModelSim)下运行时,调试提示与预期一致,例如: # 0.000000 ms WDOG : *** tc_can_init_chec

在我的verilog测试台中,我使用
时间刻度1ns/1ns
$timeformat
如下:

initial $timeformat(-3 , 6, " ms", 14);
if [batch_mode] {
  run -all
} else {
  run 1 ns
  restart -f
  run -all
}
在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 : ############################################
请注意,第一行中0.200000 ms时模拟中断的时间格式与预期一致,以及每行开头的时间戳格式(
0.000225 ms
表示225纳秒,对应于“时间刻度”)

现在,在批处理模式下运行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 : ############################################
请注意,第一行中0.200000 ms时模拟中断的格式仍与预期一致,但每行开头的时间戳格式错误!(
224.999000 ms
基本上是正确的时间,但移动了6位小数-即时间以纳秒为单位显示)

在我看来,
$timeformat
在批处理模式下运行时被忽略

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

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

    有没有考虑开关?
  • 是否存在可能导致此类影响的编译(顺序)问题
  • 也许,是否存在任何已知的工具问题

有谁能给我一个提示吗?

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

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

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

Thanx dave_59提醒我分而治之:)

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

因此,我试图通过逐步注释脚本集中的部分来找出根本原因

最后发现问题出在
sim.do
文件上。不管批处理模式还是GUI模式,它都会读到:

run 1 ns
restart -f
run -all
使用此序列的原因是为了加快模拟时间:在发出
重新启动
命令后,模拟似乎运行得更快。我无法解释它,但这是我在一开始就发现的。因此,从那时起,此序列就在那里;)

现在我对它进行了如下修改:

initial $timeformat(-3 , 6, " ms", 14);
if [batch_mode] {
  run -all
} else {
  run 1 ns
  restart -f
  run -all
}
=>通过此修改,所有问题都消失了


如果在批处理模式下而不是在GUI模式下,ModelSim
restart
命令的行为可能略有不同?

我已经创建了您描述的模块,并将其添加到了我的编译列表中。然后我修改了调用模拟器的脚本,以使用
top
而不是我的测试台。结果和以前一样。我提供了两个日志文件,您也可以在其中找到正在执行的命令行。GUI模式:
\vsim../work.top-L cycloneive\ver-L altera\u mf\u ver-L altera\u lnsim\ver-L altera\u ver-L lpm\ver-logfile tc\u can\u init\u check.log-wlf-can\u init\u check.wlf-fc:/Users/georgm/Desktop/FOD/trunk/trunk/3\u design/4\u simulation/tc\u can\u-init check/do“sim”选项开始时间:时间:0.22.5000毫秒。时间:0.22.5000毫秒。5.5月5日,5月5日,5月5日,5月5日,5月5日,5月5日,5月5日,5月7日,7月7日,8月8日,6月8日,8月8日,8月19日,8月19日,8月19日,8月19日,8月19日,8月19日,9月19日,开始时间:开始时间:时间:时间:时间:时间:时间:时间:时间:时间:0.25.25.25.25.25.25.5.25.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5万毫秒,5.5.5.5.5万毫秒,5万毫秒,5万毫秒,5.5万ms,5万ms,5月5月5月5月5月5月5万ms,5月5月5 init_check.wlf“+TCNAME=tc_can_init_check”-do”sim.do“#开始时间:2018年6月20日07:17:51#加载../work.top##do sim.do#时间:225000.000000ms#结束时间:2018年6月20日07:17:52,运行时间:0:00:01#错误:0,警告:0
提到了两个文件
options
sim do
。它们在批处理和GUI模式下是相同的。我把他们的内容放在这里作为参考。选项
+TCNAME=tc_可以_init_check
sim.do
if[batch_mode]{do log.do}否则{do log.do do wave.do}运行1ns restart-f run-all if[batch_mode]{quit-f}
记住下次接受好答案,并用帖子答案结果修改您的原始帖子,而不是回复您的原始帖子:)