我有一个TCL stript转向我的ModelSim模拟。我希望能够打破模拟,询问用户输入并继续。 vsim_break
并不是我想要的。我试过了set user_input [gets stdin]
,但模拟器立刻冻结了。还有其他方法吗?
答案 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足够合作,它可以用来创建变通方法的协同程序)。