Questasim中传递$args作为vsim参数报vish-3296错误的解决方案问询
vsim传递变量参数报错解决方案
你的推测完全正确,该报错是TCL语法特性导致的:默认情况下,带空格的字符串变量会被当做单个整体参数传递给过程(proc),因此vsim会把$args识别为一个名为-assertdebug -classdebug的不存在的选项,而非两个独立参数。
可行规避方案
方案1:使用TCL参数展开运算符(推荐,适用于TCL 8.5及以上版本)
直接在变量前加{*}运算符,即可将变量内容拆分为多个独立参数传递,修改后的代码如下:
vlog -sv time_diff_test.sv vopt time_diff_test +acc -o dbgver set args "-assertdebug -classdebug" vsim dbgver {*}$args # 可正常运行
方案2:搭配eval实现(兼容旧版本TCL)
如果你的Questasim版本较老,内置TCL版本不支持{*}语法,可以用列表存储参数,配合eval执行:
vlog -sv time_diff_test.sv vopt time_diff_test +acc -o dbgver # 用list存储参数,避免含特殊字符时解析错误 set args [list -assertdebug -classdebug] eval vsim dbgver $args # 可正常运行
注意事项
如果需要传递的参数中包含带空格的路径、自定义字符串等值,必须用list类型存储参数,不要直接用普通字符串赋值,避免参数展开时出现拆分错误。
内容的提问来源于stack exchange,提问作者eminakgn
相关产品推荐
相关产品推荐

