CVC 実行方法と処理速度 ― 2015年08月27日 18:38
CVC をコンパイルしたので、これを使ってシミュレーションしてみる。
CVC には、インタープリターモードとコンパイルモードがある。
インタープリターモード(+interp)
・すぐに実行
・途中で止められる
・止まった時点でのレジスタ値、メモリ値などが見られる
・続きから実行できる
コンパイルモード
・コンパイルして実行ファイルが出来る→実行
・途中で止めたら終わり
それぞれ上のような特徴があるが、最も大きな違いは実行速度にある。
コンパイルして実行する場合、インタープリターモードで実行するよりも10倍速い。冗談ではなく、10倍速い。
コンパイルにかかる時間もわずかなので、インタープリターモードを使う意味はほとんどないと言えよう。内部のレジスタ値はVCDファイルにダンプしておけば見ることが出来るし。
試しにちょっと実行とか、ちょっと文法チェックなどの場合くらいしか使い道がないだろう。もちろん、時間のかからないシミュレーションであれば、インタープリターモードだけでも十分ではあるが。
主要な実行フラグを示しておく
詳細は、 http://www.tachyon-da.com/cvc-resources/ の Quick Start Guide を参照のこと。
試しにシミュレーションにかかった時間を比較してみる。
詳しくは明かせないが、ちょっとしたIP
Verilator にちょっと古いベンチマークがあるが、だいたい合っている感じ。
http://www.veripool.org/wiki/veripool/Verilog_Simulator_Benchmarks
以上。
CVC には、インタープリターモードとコンパイルモードがある。
インタープリターモード(+interp)
・すぐに実行
・途中で止められる
・止まった時点でのレジスタ値、メモリ値などが見られる
・続きから実行できる
コンパイルモード
・コンパイルして実行ファイルが出来る→実行
・途中で止めたら終わり
それぞれ上のような特徴があるが、最も大きな違いは実行速度にある。
コンパイルして実行する場合、インタープリターモードで実行するよりも10倍速い。冗談ではなく、10倍速い。
コンパイルにかかる時間もわずかなので、インタープリターモードを使う意味はほとんどないと言えよう。内部のレジスタ値はVCDファイルにダンプしておけば見ることが出来るし。
試しにちょっと実行とか、ちょっと文法チェックなどの場合くらいしか使い道がないだろう。もちろん、時間のかからないシミュレーションであれば、インタープリターモードだけでも十分ではあるが。
主要な実行フラグを示しておく
基本型 | cvc64 mytest.v | mytest.v をコンパイルし、cvcsimという実行ファイルが出来る | |
-f | 入力ファイルリスト指定 | cvc64 -f mylist.txt | Verilogファイルを列挙したテキストファイルを使用 |
-o | 出力ファイル名指定 | cvc64 -o mytest mytest.v | この場合、mytest という実行ファイルが出来る |
-O | 最適化 | cvc64 -O mytest.v | コンパイル時間が伸びるが実行は速くなる |
+2state | 2値処理 | cvc64 +2state mytest.v | 内部処理を4値(0/1/x/z)ではなく2値(0/1)で行う 若干速くなる |
+nbaopt | ノンブロッキング最適化 | cvc64 +nbaopt mytest.v | ノンブロッキング代入直前の遅延を無視して高速化 |
+dumpvars | VCD出力 | cvc64 +dumpvars mytest.v | 内部ノードをVCDファイルに出力 Verilogファイルの変更は不要 |
詳細は、 http://www.tachyon-da.com/cvc-resources/ の Quick Start Guide を参照のこと。
試しにシミュレーションにかかった時間を比較してみる。
詳しくは明かせないが、ちょっとしたIP
mode | flag | 分:秒 |
インタープリタモード | +interp | 40:29 |
コンパイルモード | 3:36 | |
コンパイルモード | -O | 3:33 |
コンパイルモード | +2state | 3:03 |
(参考)Cadence IES | 1:15 |
Verilator にちょっと古いベンチマークがあるが、だいたい合っている感じ。
http://www.veripool.org/wiki/veripool/Verilog_Simulator_Benchmarks
以上。
最近のコメント