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