这是否应该被视为一个错误是值得怀疑的,因为 TCL 要求使用正斜杠而不是反斜杠指定文件名。当然,人们会期望在调用vcom
or时以相同的方式处理文件名vsim
。所以从这个角度来看的解决方案是用正斜杠指定路径:
C:\Mentor\QuestaSim64\10.4c\win64\vsim.exe -do "do D:/git/PoC/sim/vSim.batch.tcl" -c -modelsimini D:/git/PoC/temp/precompiled/vsim/modelsim.ini -error 3473 -t 1fs test.arith_prng_tb
在 Windows 下使用 ModelSim 10.1d 和我的临时目录中的 modelsim.ini 在这里检查它。
TCL 控制台下的一些实验vsim
表明, and命令对-modelsimini
文件名的处理方式不同。起初,反斜杠表示转义序列,文件名中的 a 扩展为制表符,例如:vcom
vsim
\t
vcom -modelsimini c:\tmp\modelsim.ini test.vhdl
# ** Error: (vcom-7) Failed to open -modelsimini file "c: mpmodelsim.ini" in read mode.
#
# Invalid argument. (errno = EINVAL)
# D:/altera/13.1_web/modelsim_ase/win32aloem/vcom failed.
为了防止这种情况,可以将参数放在花括号{}
中,例如:
vcom -modelsimini {c:\tmp\modelsim.ini} test.vhdl
# ** Error: (vcom-7) Failed to open -modelsimini file "c:\tmp\modelsim.ini" in read mode.
#
# No such file or directory. (errno = ENOENT)
# D:/altera/13.1_web/modelsim_ase/win32aloem/vcom failed.
我指定了一个不存在的文件,以便可以看到扩展。如果我创建文件c:\tmp\modelsim.ini
,vcom
将按预期进行。是的,这里允许文件名中的反斜杠。
如果我们给 相同的参数vsim
,错误消息(和实际行为)将会不同:
vsim -modelsimini c:\tmp\modelsim.ini test
# vsim -modelsimini {{c: mpmodelsim.ini}} test
# ** Error: (vsim-7) Failed to open -modelsimini file "{c: mpmodelsim.ini}" in read mode.
#
# No such file or directory. (errno = ENOENT)
# Error loading design
vsim -modelsimini {c:\tmp\modelsim.ini} test
# vsim -modelsimini {{c:\tmp\modelsim.ini}} test
# ** Error: (vsim-7) Failed to open -modelsimini file "{c:\tmp\modelsim.ini}" in read mode.
#
# Invalid argument. (errno = EINVAL)
# Error loading design
文件名参数的处理方式与以前相同。但随后脚本在扩展参数vsim
周围添加了另一对花括号。这种行为应该被视为一个错误,因为它没有任何意义。最后寻找一个在 Windows 文件系统上永远找不到的名为的文件。在您的错误消息中,文件名也用大括号括起来。vsim
{c:\tmp\modelsim.ini}