如何将参数从cmd传递到ModelSim的tcl脚本

如何将参数从cmd传递到ModelSim的tcl脚本,tcl,modelsim,Tcl,Modelsim,我从python程序在cmd中运行Modelsim。 我使用以下代码调用运行modelsim的tcl脚本: os.systemvsim-c-do top\u tb\u simulate\u reg.tcl tcl脚本包含以下内容: vsim-voptargs=+acc+UVM\u测试名称=测试名称+UVM\u最大值\u退出\u计数=1+UVM\u冗余度=UVM\u低\ -t 1ps-L unisims\u verm-L通用\u基本块\u v2\u 1\u 0-L axi\u基础设施\u v1\u

我从python程序在cmd中运行Modelsim。 我使用以下代码调用运行modelsim的tcl脚本:

os.systemvsim-c-do top\u tb\u simulate\u reg.tcl tcl脚本包含以下内容:

vsim-voptargs=+acc+UVM\u测试名称=测试名称+UVM\u最大值\u退出\u计数=1+UVM\u冗余度=UVM\u低\ -t 1ps-L unisims\u verm-L通用\u基本块\u v2\u 1\u 0-L axi\u基础设施\u v1\u 0\ -L dds_编译器_v6_0_12-lib xil_defaultlib xil_defaultlib.girobo2_tb_top\ xil_defaultlib.glbl 我希望+UVM_TESTNAME的值将是我在执行时从cmd传递的参数:

os.systemvsim-c-do top\u tb\u simulate\u reg.tcl 我怎么做

我尝试了以下方法,但没有成功:

Python脚本:

os.system("vsim -c -do top_tb_simulate_reg.tcl axi_rd_only_test" )
模拟文件tcl脚本

vsim -voptargs="+acc" +UVM_TESTNAME=$argv +UVM_MAX_QUIT_COUNT=1 +UVM_VERBOSITY=UVM_LOW \
    -t 1ps -L unisims_verm -L generic_baseblocks_v2_1_0 -L axi_infrastructure_v1_1_0 \
    -L dds_compiler_v6_0_12 -lib xil_defaultlib xil_defaultlib.girobo2_tb_top \
    xil_defaultlib.glbl
我得到了以下错误:

# ** Error: (vsim-3170) Could not find 'C:/raft/raftortwo/girobo2/ver/sim/work.axi_rd_only_test'. 问题是,vsim二进制文件正在自己处理参数,这会造成干扰。是的,您可以通过阅读vsim文档找到解决方法,最简单的方法是通过环境变量传递值。它们由一个进程从其父进程继承,可以用于传递大多数内容。例外情况是安全令牌,应该始终在具有正确设置权限的文件中传递,而不是在环境变量或命令行参数中传递

在python代码中:

将值存储在*可继承*环境中 os.environ[MY_TEST_CASE]=仅axi_rd_测试 打电话;环境在幕后被忽略了 os.systemvsim-c-do top\u tb\u simulate\u reg.tcl 在您的tcl代码中:

从继承的环境中读取 设置名称$envMY_测试_案例 用它!可以这样做作为一行,但这很难阅读 vsim-voptargs=+acc+UVM\U TESTNAME=$name+UVM\U MAX\U QUIT\U COUNT=1+UVM\U冗余度=UVM\U低\ -t 1ps-L unisims\u verm-L通用\u基本块\u v2\u 1\u 0-L axi\u基础设施\u v1\u 0\ -L dds_编译器_v6_0_12-lib xil_defaultlib xil_defaultlib.girobo2_tb_top\ xil_defaultlib.glbl
晚会迟到了,但我为你的障碍找到了一个很好的解决办法。Modelsim的TCL实例中的do命令不接受参数。看

vsim-c-do filename.tcl不能接受参数,但可以使用vsim-c-do filename.tcl参数

在您的例子中,这转换为os.system的“vsim-c-do top\u tb\u simulate\u reg.tcl axi\u rd\u only\u test”。.tcl脚本将找到通过变量$1传递的参数


我希望能帮助任何人

您应该说明错误消息是什么。或者我们可以玩“蒙着眼睛猜问题”…您可以将所有vsim命令、tcl脚本及其参数转储到一个临时shell脚本中-动态创建并执行os.system“foo.sh”。这非常有用,但假设您也必须通过环境变量传递plusargs类型的参数。奎斯塔西姆会识别出这样的东西吗:+A=123+B=456?我也不知道如何解决。这可能是平台的不同,但在Windows下似乎不起作用。这可能是因为带空格的文件名是合法的,因此引用被解释为完整的文件名。