【问题标题】:Passing $args as a substitution for vsim arguments gives an error传递 $args 作为 vsim 参数的替代会产生错误
【发布时间】:2021-10-19 17:58:56
【问题描述】:

我想用 $args 代替一些 vsim 参数。

** UI-Msg: (vish-3296) 未知选项'-assertdebug -classdebug'

vlog -sv time_diff_test.sv
vopt time_diff_test +acc -o dbgver
set args "-assertdebug -classdebug"
vsim dbgver $args # error
vsim dbgver -assertdebug -classdebug # runs fine

我认为 vsim 被定义为模拟器(questasim)端的一个过程,它把 $args 识别为一个单独的参数。所以它会抛出一个错误,因为没有这样的参数可用。有人知道这个问题的解决方法吗?

【问题讨论】:

    标签: tcl modelsim questasim


    【解决方案1】:

    这可能是正确的:

    vsim dbgver {*}$args

    【讨论】:

    • 同意。 {*} 运算符将在执行 vsim 命令之前将 $args 扩展为单个单词。
    • 成功了,谢谢!
    • 从历史上看,该语法是在 Tcl 8.5 中添加的(这是tcl-lang.org/man/tcl8.6/TclCmd/Tcl.htm 中的规则#5)。在此之前,答案是eval [linsert $args 0 vsim dbgver]
    • eval [list vsim dbgver] [lrange $args 0 end](或其他各种可能效率不高的选项)。让事情既正确又快速是 困难 并且经常出错,所以扩展语法(它有点像一个运算符,但不是正式的,因为它是由 Tcl 语言核心处理的,而不是have operator) 被添加了,我们立即用它来修复 Tcl 本身的各种错误......
    猜你喜欢
    • 2019-01-25
    • 2011-07-22
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    相关资源
    最近更新 更多