##はじめに
数か月前に、Tachyon Design Automation社のVerilogシミュレーター「CVC」がOSSになっていることに気づきました。
Tachyon Design Automation社のVerilogシミュレータがOSSになっとった…。
— tethys (@tethys_seesaa) 2014, 9月 16
当初はTachyon社のWebサイトが未整理だったので手をつけていませんでしたが、だいぶ整ってきてみたようなのでダウンロード、インストールして試してみることにしました。そのメモ書きです。
##CVCの特徴
主にこちらに書かれています。Verilogシミュレーターとしては商用シミュレーターと遜色はありません。波形ビューワーはGTKWaveに対応し、波形ファイルとしてFSTフォーマットで出力できます。対応OSはLinuxで、32/64bit両対応です。
目につく特徴として、X伝播評価アルゴリズム・2値化シミュレーションがあります。
VHDLは非対応です。
SystemVerilogの対応は限定的で、DPIサポートのみです。とはいえDPIのサポートで、C言語で比較的柔軟な検証環境を構築できます。またSystemVerilog固有の変数では、bit
/logic
/int
/byte
/shortint
/longint
をサポートし、DPI用にchandle
をサポートしています。
##ライセンス
CVCはOSSですが、ライセンスはArtistic license
をモディファイしたOSS CVC dual licenseを独自に作成しています。dualとは、ユーザーから見ておおざっぱに言うと、サポートの有無になります。学習向けは問題ないと思いますが、開発・商用で使用する場合はライセンス条項をよくお読みください。
##ダウンロード、コンパイル、インストール、動作テスト
ここではCentOS6.6で試してみました。ドキュメントには64bit推奨と書かれていたので、64bit版を前提に書きます。
ダウンロードにはユーザー登録(メールアドレス)が必要です。
非サポート用はCVCのバイナリを作る作業から開始します。
まずダウンロードしたファイルを解凍します。
$ tar xvfi open_src_cvc_700c_tar.bz2
最初は、プラットフォームがCVCに対応しているか確認し、以下のようにメッセージが出ればOKです。
$ open-src-cvc.700c/bin/checkcvc
System configuration is fine for CVC compilation.
次に、コンパイルを行います。src
ディレクトリに移動し、Makeを実行します。
自分の環境ではカレントディレクトリにPATHを通していないため、Makefile内で、生成したファイルをそのままカレントディレクトリで実行しているところ(hexasm)を ./hexasmのように書き直しました。
$ cd open-src-cvc.700c/src/
$ make -f makefile.cvc64
エラー無くコンパイルが終了すると、cvc64というバイナリができます。これがシミュレーターの本体となります。
次に、生成したバイナリが正常に動作するか確認を行います。以下のようにcvc64を/tmp
にコピーし、スクリプトを実行します。
最後のようなメッセージが出れば正常に動作していることになります。
$ cp cvc64 /tmp
$ cd ../tests_and_examples/install.test/
$ $ ./inst_test.sh cvc64
>>>> Install test completed (this should be only message printed).
あとはcvc64をPATHの通っているディレクトリにコピーすれば、インストールは完了です。
##使い方
tests_and_examples
ディレクトリにCVCの特徴を生かしたサンプルとOpencoresを使用したサンプルがあります。適宜実行すると動きがわかると思います。
ここでは簡単にHello, world!的なVerilogモジュールで試してみます。
module tb();
initial begin
$display("Hello, world!");
$finish(1);
end
endmodule
まず、対象ファイルをコンパイルします。
$ cvc64 tb.v
OSS_CVC_7.00b-x86_64-rhel6x of 07/07/14 (Linux-elf).
Copyright (c) 1991-2014 Tachyon Design Automation Corp.
All Rights reserved. Licensed software subject to prohibitions and
restrictions. See OSS CVC artistic license included with release.
Today is Wed Jan 21 21:29:13 2015.
Elaborating source file "tb.v"
Highest level modules:
tb
Compiling module 1 of 1.
CVC compilation 0.1 seconds elapsed.
EXECUTABLE SAVED TO 'cvcsim'.
End of OSS_CVC_7.00b-x86_64-rhel6x at Wed Jan 21 21:29:13 2015 (elapsed 0.1 seconds).
エラー無く終了すると、cvcsimというファイルが出来上がります。これを実行することでシミュレーションを行います。
$ ./cvcsim
OSS_CVC_7.00b-x86_64-rhel6x of 07/07/14 (Linux-elf).
Copyright (c) 1991-2014 Tachyon Design Automation Corp.
All Rights reserved. Licensed software subject to prohibitions and
restrictions. See OSS CVC artistic license included with release.
Today is Wed Jan 21 21:30:04 2015.
Highest level modules:
tb
Hello, world!
Halted at location **tb.v(5) time 0 from call to $finish.
実行可能なCのバイナリに変換してシミュレーションを行う形式は、Synopsys社のVCSやOSSのVerilatorを連想させますね。
##おわりに
元プロプライエタリなシミュレーターであるため、コンパクトながら多彩な機能を持ち、チューニングのために様々なオプションが入っています。またDPIが使えるのもうれしいところです。
本格的に使うのもよし、簡単なSyntaxチェックに使うのもよし、手元にダウンロードして手元に置いても損のないツールと思います。Icarus VerilogやVerilatorらとパフォーマンス比較すると面白いかもしれません。