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 を使用して確認しました。
TCL コンソールでのいくつかの実験では、ファイル名がコマンド とコマンドによって異なる方法で処理されるvsim
ことが明らかになりました。最初のバックスラッシュはエスケープ シーケンスを示し、ファイル名の a はタブに展開されます。-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
の周りに別の中かっこのペアを追加します。この動作は意味がないため、バグと見なす必要があります。最後に、Windows ファイル システムでは決して見つからないというファイルを探します。エラー メッセージでは、ファイル名も中かっこで囲まれています。vsim
{c:\tmp\modelsim.ini}