Tcl 使用脚本捕获vsim退出代码或当前模拟器状态

Tcl 使用脚本捕获vsim退出代码或当前模拟器状态,tcl,modelsim,Tcl,Modelsim,我正在尝试编写一个Tcl脚本,它在ModelSim中加载模拟,然后执行其他一些操作,因此它需要确定模拟是否成功加载。但是vsim命令似乎没有返回任何值,至少我可以找到如何捕获。作为测试,我做了: set rv [vsim $sim_name] 无论sim卡是否加载,$rv始终为空,因此使用catch不起作用。我目前的解决方法是在加载后尝试一些只在模拟上下文中有效并且确实返回值的方法,然后捕获它。例如: vsim $sim_name if {[catch {log *} ... 但这远非理想。

我正在尝试编写一个Tcl脚本,它在ModelSim中加载模拟,然后执行其他一些操作,因此它需要确定模拟是否成功加载。但是
vsim
命令似乎没有返回任何值,至少我可以找到如何捕获。作为测试,我做了:

set rv [vsim $sim_name]
无论sim卡是否加载,
$rv
始终为空,因此使用
catch
不起作用。我目前的解决方法是在加载后尝试一些只在模拟上下文中有效并且确实返回值的方法,然后捕获它。例如:

vsim $sim_name
if {[catch {log *} ...

但这远非理想。是否有更好的方法来检测
vsim
是否成功运行?

要在模拟启动时处理细化错误,可以使用
onElabError
命令关联回调。您的回调可以设置一个全局变量,稍后再检查:

onElabError {global vsim_init_failure; set vsim_init_failure 1}
...
set vsim_init_failure 0
vsim $sim_name
if {$vsim_init_failure} ...

这似乎正是我想要的,尽管我仍然很惊讶vsim没有返回任何值。作为进一步的阐述,您可以将其封装在vsim命令的包装器中,该包装器根据需要返回状态代码或引发异常。