ModelSim执行时会冻结[获取标准输入]

时间:2014-03-10 13:27:46

标签: tcl modelsim

我有一个TCL stript转向我的ModelSim模拟。我希望能够打破模拟,询问用户输入并继续。 vsim_break并不是我想要的。我试过了set user_input [gets stdin],但模拟器立刻冻结了。还有其他方法吗?

1 个答案:

答案 0 :(得分:0)

执行gets stdin时,Tcl(通常)会等到标准输入接收到一行。如果你想保持一个GUI(或其他后台处理系统),但仍然等待一条线,你需要一个稍微不同的方法。

proc getStdinLine {} {
    set ::user_input [gets stdin]
}
fileevent stdin readable getStdinLine
vwait ::user_input
# Unregister the callback
fileevent stdin readable {}

请注意! 此代码可能存在重入问题;如果你的脚本在等待时设法回到同一点,它很容易让自己陷入一团糟。这是因为vwait记录了C堆栈上等待的内容;即使在Tcl 8.6中也是如此(尽管如果ModelSim足够合作,它可以用来创建变通方法的协同程序)。