Vhdl vsim不接受Windows上的-modelsimini参数

Vhdl vsim不接受Windows上的-modelsimini参数,vhdl,modelsim,questasim,Vhdl,Modelsim,Questasim,我正在使用命令行参数-modelsimini为大多数QuestaSim/modelsim可执行文件指定我自己的modelsim.ini文件 对于Linux上的vcom和vsim,以及Windows上的vcom,这都非常有效。但是Windowsvsim会中止并抛出一个错误: C:\Mentor\QuestaSim64\10.4c\win64\vsim.exe -do "do D:/git/PoC/sim/vSim.batch.tcl" -c -modelsimini D:\git\PoC\temp

我正在使用命令行参数
-modelsimini
为大多数QuestaSim/modelsim可执行文件指定我自己的
modelsim.ini
文件

对于Linux上的
vcom
vsim
,以及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
配置文件传递到
vsim.exe

QuestaSim在Windows上的
vsim
可执行文件无法处理
-modelsimini
命令行开关中的Windows路径(使用
\
作为路径分隔符)。路径需要以posix写入(使用
/
分隔符)


就我所见,
vcom
对于正确的路径分隔符符号没有问题。

这是否应该被视为一个bug是值得怀疑的,因为TCL需要它而不是反向斜杠。当然,在调用
vcom
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进行检查


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.
为了防止出现这种情况,可以将参数放在大括号中,例如:

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
脚本在扩展的参数周围添加了另一对大括号。这种行为应该被视为bug,因为它没有任何意义
vsim
最后查找一个名为
{c:\tmp\modelsim.ini}
的文件,该文件在Windows文件系统中永远找不到。在错误消息中,文件名也用大括号括起来。

虽然我不是下选程序,但在Windows系统中,只要看到所描述的-modelsimini命令行参数,路径分隔符就应该是正斜杠(/)。大约在10个地方。Questasim用户手册中至少有一个地方有相同的句子(我首先在那里找到的)。这种行为可能不像你发现的那么奇怪。@Gab抱歉。这不是我的本意。报道的问题似乎更广泛了。@TaW因为这个答案解决了我的特定问题,所以它是一个定义上的答案。此外,这是将正确答案标记为解决方案的唯一方法。你不能接受评论。我也没有自我回答的名声,如果你担心的话。。。顺便说一句,简短的回答,但正确的答案仍然是答案。@Paebbels你不通过自我回答获得声誉是什么意思?我相信,除非它被标记为社区维基,否则你确实会获得声誉。@Paebbels即使你接受自己的答案(但请记住,你仍然会获得Upvots的声誉)而没有获得任何声誉,你仍然必须接受回答说“问题解决了,解决方案是这样的:“你不需要为了声誉而做标记,但对于那些有同样问题并需要解决问题的未来用户个人来说,自我回答问题不会有问题。早期的Modelsim命令行解释器似乎一直将反斜杠视为路径分隔符,直到VHDL中出现扩展标识符'93.有一个开关用于启用扩展标识符,它要求路径分隔符使用正斜杠。参见第CR-15页,也是CR-11扩展标识符,我们发现这是命令行参数限制。这似乎是一个有意义的观点问题。