ModelSim:在'内部使用静音停止命令。块

时间:2015-02-19 20:33:43

标签: tcl modelsim

我正在尝试让ModelSim模拟在特定事件发生时或超时后停止,以先到者为准。

我尝试了一种纯软件方法,使用while循环并在每次迭代时发出run 1 ns命令并检查条件是否已满足:

set clockCycles 0
set clockCycleLimit 200
while {/some_signal != 1 && $clockCycles < $clockCycleLimit} {
    run 1 ns
    set clockCycles [expr {$clockCycles + 1}]
}

这有效,但有点慢。因此,我尝试使用when命令的新方法。

when {/some_signal == '1'} {
    stop
}
run 200 ns

这种方式运行得非常快,而且更加优雅。我遇到的唯一问题是它在Transcript窗口中显示一条恼人的消息:每次运行此代码时都会“请求模拟停止”。

我使用此代码作为交互式ModelSim会话的一部分,这些消息不断出现,破坏了用户体验。我试图找到一种方法来禁用它们。到目前为止,我还没有发现任何有用的东西。

有人能帮忙吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

使用stop或断点机制的所有内容似乎都会生成该消息;它甚至可能来自模拟引擎本身。似乎没有办法告诉stop保持沉默(当然没有联系客户支持和希望)。

这意味着我能想到的唯一方法 - 这是一个丑陋的黑客 - 就是在when&#39; s中启动另一个Tcl事件循环的副本回调脚本(使用vwaittkwait)来支持GUI交互。代码很短,但你真的一定不能让模拟继续运行被杀掉,除非完成这个内部事件循环然后让{{1}回调完成(或调用嘈杂的when)。想想“运行模态对话框”而不是“运行整个GUI”。

如果模拟引擎本身使用Tcl事件循环来管理事物的调度,它仍然可能不起作用。 可能不是......但是我真的无法告诉你,所以你必须小心谨慎(不,我绝对不是被许可人,所以我不能为你测试)。这样做会导致C堆栈爆炸并导致实际问题,所以要小心。

答案 1 :(得分:0)

要将Modelsim配置为不生成此类消息(可从5.6版获得),请键入下一个TCL命令:

set PrefMain(noRunMsg) 1