FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

格安のVerillogシミュレータ Veritak をコマンドラインから起動する方法

現在、趣味でのVerilog開発は、個人でも格安で使用可能なVerilogシミュレータであるVeritakを使用している。

japanese.sugawara-systems.com

Verilog-HDLを使用したシミュレータとしては、有料のものを含め以下のものが挙げられるのではないだろうか。簡単に一覧にしてみた。

名前 開発元 有料/無料
VCS Synopsys 有料 Big-3
NC-Verilog Cadence 有料 Big-3
QuestaSim Mentor 有料 Big-3
Vivado Simulator Xilinx 無料 Vivadoと統合されている
Veritak Sugawara-Systems 有料 Big-3と比較すると安価
Cver OSS 無料
Icarus Verilog OSS 無料
Verilator OSS 無料 2値のみサポート、高速

VeritakはSugawara-Systemsが開発した格安のシミュレータで、個人でも利用できる値段ながら、高速なシミュレーションと波形デバッグが可能なシミュレータだ。 僕も10年来このシミュレータを利用させて頂いている。 購入したのが学生のときで、5000円で高速シミュレータを手に入れられるというのはまさに夢のようなツールだった。 (最近更新が無いのでどうなっているのか気になっているが...)

さて、このVeritakだが、公式サイトを見て分かるように、GUIによるシミュレーションが基本となっている。 私も普段使用するときは、GUIで波形を取得しながらシミュレーションするのが一般的だ。

f:id:msyksphinz:20160923015033p:plain

シミュレーションとデバッグの手順としては、

  1. シミュレーション時にテキストログを出す
  2. 検証スクリプトを使ってログの正当性を確認
  3. ログに間違いが含まれていれば、取得したGUIで確認
  4. 1.に戻ってシミュレーション

となる。デバッグ中はこれで良いのだが、リグレッションなどのフェーズになるとGUIは不要となり、なるべくならばコマンドラインで実行したい。

これを実現するためには、Veritakシミュレーション時に生成されるveritak_command.txtを参考にすれば良い

veritak_command.txt を使用してコマンドラインからシミュレーションする方法を確立する

veritak_command.txtを確認すると、以下のような、シミュレーションを実行するためのコマンドのようなものが格納されていた。

VERITAK2 --t --C0 --M3 --w --a --ST --W "C:\msys64\home\masay\work\magnetor-1\hardware\mag_core\mag_top\veritak"  --D "FILENAME=\"coremark.riscv.hex\"" --D "SIMULATION" --i "../../../common/include" "../../../../hardware/mag_core/mag_top/sim/tb_mag_top.v" "../../../../hardware/mag_core/mag_top/sim/inst_logger.sv" "../../../../hardware/mag_core/mag_top/sim/pipe_logger.sv" "../../../../hardware/mag_core/mag_rnu/rtl/mag_rnu.v" "../../../../hardware/mag_core/mag_rnu/rtl/rnu_freelist.v" "../../../../hardware/mag_core/mag_rnu/rtl/rnu_future_file.v" "../../../../hardware/mag_core/mag_rnu/rtl/rnu_phy_rfile.v" "../../../../hardware/mag_core/mag_rnu/rtl/rnu_rename_map.v" "../../../../hardware/mag_core/mag_rnu/rtl/rnu_controller.v" "../../../../hardware/mag_core/mag_rnu/rtl/rnu_operand_slicer.v" "../../../../hardware/mag_core/mag_rnu/rtl/csu_main.v"
...

これをそのままコマンドライン上に貼り付けて、実行してみる。

$ veritak2.exe ...

compile done with 0 errors.

そのまま実行しても、コマンドラインモードでは実行が完了しなかった。どうやらシミュレーションが指定の時間に到達しても、実行は終了しないらしい。 以下のページに解説があったので、そのまま実行してみる。つまり、先頭に付属しているオプションを取り払って、必要なものだけを挿入する。

http://japanese.sugawara-systems.com/tutorial/veritak/newpage34.htm

/c/Users/masay/Downloads/veritakwinB383A/VERITAK2 --W "C:\msys64\home\masay\work\magnetor-1\hardware\mag_core\mag_top\veritak"  --D "FILENAME=\"coremark.riscv.hex\"" --D "SIMULATION" --i "../../../common/include" --n --G "../../../../hardware/mag_core/mag_top/sim/tb_mag_top.v" "../../../../hardware/mag_core/mag_top/sim/inst_logger.sv" "../../../../hardware/mag_core/mag_top/sim/pipe_logger.sv" "../../../../hardware/mag_core/mag_rnu/rtl/mag_rnu.v" "../../../../hardware/mag_core/mag_rnu/rtl/rnu_freelist.v" "../../../../hardware/mag_core/mag_rnu/rtl/rnu_future_file.v" "../../../../hardware/mag_core/mag_rnu/rtl/rnu_phy_rfile.v" "../../../../hardware/mag_core/mag_rnu/rtl/rnu_rename_map.v" "../../../../hardware/mag_core/mag_rnu/rtl/rnu_controller.v" "../../../../hardware/mag_core/mag_rnu/rtl/rnu_operand_slicer.v" "../../../../hardware/mag_core/mag_rnu/rtl/csu_main.v" "../../../../hardware/mag_core/mag_ifu/rtl/mag_ifu.v" "../../../../hardware/mag_core/mag_ifu/rtl/mag_inst_buf.v" "../../../../hardware/mag_core/mag_ifu/rtl/ifu_state.v"
...

追加したのは、--n --Gオプションだ。これらが何者なのかは解説は無かったが、重要なオプションであることは間違いない。

コマンドライン実行と、GUI実行の所要時間を取得する

GUIモードとCUIモードで実行時間を比較してみた。

GUIモード CUIモード
2:28 2:05

まあ、CUIの方がちょっとだけ速いかな。