アダルト・ヴァイオリン May the force be with you..

2005年7月24日

VerilogからCへのコンバータ(Verilator)

Filed under: 組込みシステム — @ 11:26 PM


しばらくホームページを見ないうちに開発者が二人も増えて、
強烈にアクティブに開発が進んでいる。
もともと強力なツールなのであるが、バグフィックスのペースが上がり、
VCDへのダンプ機能やらシステム関数やらサポートされるものが増えて便利になってきた。

CygwinへのVerilatorインストール備忘録

VerilogPerl
SystemPerl

のパッケージを先にインストールすること。

このとき、LIB環境変数にVisualC++のものが設定されていると失敗する。
export LIB=
で環境変数をクリアしておく。

次に、私の環境ではVerilogPerlがlibstdc++.aを見つけられなかった。
ln -s /lib/gcc/i686-pc-cygwin/libstdc++.a /lib
として、シンボリックリンクを張る。

Verilatorのパッケージを展開して、
./configure –prefix=/usr/local/verilator
make;make test
で(SystemCは入れていないので)SystemC以外のテストが通ればOK。

make install

でインストールするが、この時にコピー忘れが発生していて、このままでは
動作しないので、

mkdir /usr/local/verilator/include
install -c include/* /usr/local/verilator/include
install -c bin/verilator_* /usr/local/verilator/bin
install -c verilator_* /usr/local/verilator

として、手動でコピーする。
export VERILATOR_ROOT=/usr/local/verilator
とすることで、

verilator –cc test.v

がコンパイルできるようになる。

sfl2vlが変換したVerilogファイルはほぼ問題なく変換できるので、便利である。

次のファイルをtest.sflとして用意する。

module test {
input a;
output f;
f=^a;
}

これをsfl2vlで変換した test.vを用いて、次のテストスクリプトとともに
コンパイルする。

#include <verilated.cpp>
#include “Vtest.h”

Vtest *test;

int main() {
int i;
test = new Vtest;
for(i=0;i<10;i++) { test->a = i&1;
test->eval();
printf(“a=%x, f=%xn”, test->a, test->f);
}
}

すると、その結果は
$ ./test_main
a=0, f=1
a=1, f=0
a=0, f=1
a=1, f=0
a=0, f=1
a=1, f=0
a=0, f=1
a=1, f=0
a=0, f=1
a=1, f=0

のようになる。
Verilatorを用いているから当たり前のことだが、論理回路を自由にC言語でテストできるようになる。

verilatorのオプションに–traceをつけると、VCDファイルを作成できる。
これで、GTKWAVEの波形を表示可能である。

コメントはまだありません »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress