Подтвердить что ты не робот

Vsim не принимает параметр -modelsimini в Windows

Я использую аргумент командной строки -modelsimini <modelsim.ini> для указания моего собственного файла modelsim.ini для большинства исполняемых файлов QuestaSim/ModelSim.

Это отлично работает в Linux для vcom и vsim, а также для vcom в Windows. Но 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?

4b9b3361

Ответ 1

Несомненно, следует ли это считать ошибкой или нет, потому что 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

Проверено здесь с ModelSim 10.1d под Windows и modelim.ini в моем временном каталоге.


Некоторые эксперименты в консоли vsim TCL показывают, что -modelsimini имя файла обрабатывается по-разному с помощью команд vcom и vsim. Сначала обратная косая черта указывает escape-последовательность, a \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 script добавляет еще одну пару фигурных скобок вокруг аргумента расширенный. Это поведение следует рассматривать как ошибку, потому что это не имеет никакого смысла. vsim наконец ищет файл с именем {c:\tmp\modelsim.ini}, который никогда не может быть найден в файловой системе Windows. В сообщении об ошибке имя файла также заключено в фигурные скобки.

Ответ 2

QuestaSim vsim исполняемый файл Windows не может справиться с путями Windows (используя \ в качестве знака ограничения пути) в командной строке -modelsimini. Путь должен быть заключен в posix (используя разделители /).

Насколько я вижу, vcom не имеет проблем с правильным значком разделителя пути.