現在、趣味でのVerilog開発は、個人でも格安で使用可能なVerilogシミュレータであるVeritakを使用している。
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で波形を取得しながらシミュレーションするのが一般的だ。
シミュレーションとデバッグの手順としては、
となる。デバッグ中はこれで良いのだが、リグレッションなどのフェーズになると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モード |
---|---|
2:28 | 2:05 |
まあ、CUIの方がちょっとだけ速いかな。