コマンドライン引数-modelsimini <modelsim.ini>
を使用して、ほとんどの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
に渡すにはどうすればよいですか?
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.
展開を確認できるように、存在しないファイルを指定しました。ファイル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
File-name引数は、以前と同じ方法で処理されます。ただし、vsim
スクリプトは、expanded引数の前後にもう1組の中括弧を追加します。この動作は意味がないため、バグと見なす必要があります。 vsim
は、最終的に{c:\tmp\modelsim.ini}
というファイルを探します。このファイルは、Windowsファイルシステムでは見つけることができません。エラーメッセージでは、ファイル名も中括弧で囲まれています。
Windows上のQuestaSimのvsim
実行可能ファイルは、\
コマンドラインスイッチのWindowsパス(パス区切り記号として-modelsimini
を使用)を処理できません。パスはposix書き込みである必要があります(/
区切り文字を使用)。
私が見る限り、vcom
は正しいパス区切り記号に問題はありません。