vsim在Windows上不接受-modelsimini参数
我正在使用命令行参数-modelsimini <modelsim.ini>
为大多数QuestaSim / ModelSim可执行文件指定我自己的modelsim.ini
文件。
在vcom
和vsim
Linux上以及在Windows上的vcom
上,这个工作方式都很好。 但是,Windows的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 Reading C:/Mentor/QuestaSim64/10.4c/tcl/vsim/pref.tcl # 10.4c # ** Error: (vsim-7) Failed to open -modelsimini file "{D:\git\PoC\temp\precompiled\vsim\modelsim.ini}" in read mode. # # Invalid argument. (errno = EINVAL) # Error loading design Error loading design # Errors: 1, Warnings: 0
modelsim.ini
文件存在并具有以下内容:
[Library] others = $MODEL_TECH/../modelsim.ini
(如果供应商工具添加库映射,则该文件将包含更多行。)
我怎样才能将我自己的modelsim.ini
configuration文件传递给vsim.exe
?
这是否应该被视为错误是值得怀疑的,因为TCL要求文件名是用正斜杠而不是反斜杠来指定的 。 当然,人们会希望在调用vcom
或vsim
时文件名的处理方式也是一样的。 所以从这个angular度来看,解决scheme是用正斜杠指定path:
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检查它。
在vsim
TCL控制台下的一些实验显示, -modelsimini
文件名由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.
我指定了一个不存在的文件,以便可以看到扩展。 如果我创build文件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
脚本在扩展的参数周围增加了另一对花括号。 这种行为应该被视为一个错误,因为它没有任何意义。 vsim
最终会查找名为{c:\tmp\modelsim.ini}
,这在Windows文件系统中永远无法find。 在你的错误信息中,文件名也被大括号括起来。
Windows上的QuestaSim的vsim
可执行文件无法应对-modelsimini
命令行开关中的Windowspath(使用\
作为path分隔符号)。 path需要以posix写入(使用/
分隔符)。
据我所见, vcom
没有正确的path分隔符号的问题。