CVC 実行方法と処理速度2015年08月27日 18:38

CVC をコンパイルしたので、これを使ってシミュレーションしてみる。
CVC には、インタープリターモードとコンパイルモードがある。

インタープリターモード(+interp)
・すぐに実行
・途中で止められる
・止まった時点でのレジスタ値、メモリ値などが見られる
・続きから実行できる

コンパイルモード
・コンパイルして実行ファイルが出来る→実行
・途中で止めたら終わり

それぞれ上のような特徴があるが、最も大きな違いは実行速度にある。
コンパイルして実行する場合、インタープリターモードで実行するよりも10倍速い。冗談ではなく、10倍速い
コンパイルにかかる時間もわずかなので、インタープリターモードを使う意味はほとんどないと言えよう。内部のレジスタ値はVCDファイルにダンプしておけば見ることが出来るし。
試しにちょっと実行とか、ちょっと文法チェックなどの場合くらいしか使い道がないだろう。もちろん、時間のかからないシミュレーションであれば、インタープリターモードだけでも十分ではあるが。

主要な実行フラグを示しておく
基本型cvc64 mytest.vmytest.v をコンパイルし、cvcsimという実行ファイルが出来る
-f入力ファイルリスト指定cvc64 -f mylist.txtVerilogファイルを列挙したテキストファイルを使用
-o出力ファイル名指定cvc64 -o mytest mytest.vこの場合、mytest という実行ファイルが出来る
-O最適化cvc64 -O mytest.vコンパイル時間が伸びるが実行は速くなる
+2state2値処理cvc64 +2state mytest.v内部処理を4値(0/1/x/z)ではなく2値(0/1)で行う
若干速くなる
+nbaoptノンブロッキング最適化cvc64 +nbaopt mytest.vノンブロッキング代入直前の遅延を無視して高速化
+dumpvarsVCD出力cvc64 +dumpvars mytest.v内部ノードをVCDファイルに出力
Verilogファイルの変更は不要

詳細は、 http://www.tachyon-da.com/cvc-resources/ の Quick Start Guide を参照のこと。

試しにシミュレーションにかかった時間を比較してみる。
詳しくは明かせないが、ちょっとしたIP
modeflag分:秒
インタープリタモード+interp40:29
コンパイルモード3:36
コンパイルモード-O3:33
コンパイルモード+2state3:03
(参考)Cadence IES1:15

Verilator にちょっと古いベンチマークがあるが、だいたい合っている感じ。
http://www.veripool.org/wiki/veripool/Verilog_Simulator_Benchmarks
以上。

CVC verilog simulator コンパイル2015年08月26日 18:53

Verilog のシミュレータでCVCというのを見つけた。
http://www.tachyon-da.com/

個人的には Veritak が使いやすくていいのだが、System Verilog には未対応だし、大きなシミュレーションは難しい。(SystemVerilog対応版も菅原さんが地道に開発を進められている)
フリーソフトでは、icarus が有名だが、いかんせんシミュレーションが遅い。
Verilator は速いみたいだけど、最上位をC++で書かないといけないし、ちょっと癖がありすぎる感じ。まあ、一番上は、クロックとリセット、終了判断だけにして決まった記述にすればいいのでチャレンジしようかと思っていた矢先ではあるが・・・

とりあえず、CVCをダウンロードしてインストール(というかコンパイル)してみたのでメモに残す。

環境は、CentOS7 (minimal)。

0) まずは、必要なパッケージの準備。
 ダウンロードしたファイルを解凍するための bzip2、コンパイルのための make と gcc、CVC が使用する zlib をインストール。
yum install bzip2
yum install make
yum install gcc
yum install zlib zlib-devel
make するときに、カレントディレクトリを参照できるように、パスを追加。
PATH=$PATH:.
これでコンパイルの準備完了。

1) 適当なディレクトリにファイルをダウンロード
 open_src_cvc_700c_tar.bz2 というファイル名だった。

2) ファイルを展開
tar xvf open_src_cvc_700c_tar.bz2
 open-src-cvc-700c というディレクトリが出来る。

3) open-src-cvc-700c/src に移動して make する
cd open-src-cvc-700c/src
make -f makefile.cvc64
 問題なければ、src ディレクトリに cvc64 という実行ファイルが生成される。

4) 動作確認
 検証用のシミュレーションを通してみる。
 cvc64 を /tmp ディレクトリにコピーして、open_src_cvc_700c/tests_and_examples/install.test ディレクトリにある inst_test.sh と inst_test_interp.sh を実行
cp cvc64 /tmp
cd ../tests_and_examples/install.test
inst_test.sh cvc64
inst_test_interp.sh cvc64
2つのテストでそれぞれ
>>>> Install test completed (this should be only message printed).
と表示されれば成功。
inst_test_interp.sh は、インタープリターモードなので時間がかかる。ちなみに引数の cvc64 は、ファイル名ではなく単なるフラグらしい。
最終的に必要なのは、この cvc64 という実行ファイルだけ。パスの通った適当なディレクトリに置いておけばいい。

詳細は、http://www.tachyon-da.com/cvc-resources/を参照のこと。