modelsim で DPI-C

DPI-C

systemverilogの機能で、C(C++)でかかれた関数をverilogで実行する機能。(またはその逆)

環境

xilinxは残念ながら高いmodelsimを買わなくてはならないが、alteraだとmodelsim AEがあるため無料でも可能とのこと。

あとは、windowsならばMinGW等が必要でインストールしてgccのフォルダにパスを通しておけば準備完了

Cプログラム

関数宣言ヘッダについてはsystem verilogの定義部分から自動的に生成するため作る必要はないが、インクルードはやっておく必要がある。

#include "dpiheader.h"

実行手順

modelsimであれば、テストベンチ(systemverilog),Cプログラム関数を用意して以下の手順で可能

vlib work
vlog -dpiheader dpiheader.h hoge_top.v -sv
vlog *.v
vcom *.vhd
gcc -c -I$(MODELSIM)/include hoge.c
gccc -shared -Bsymbolic -o hoge.dll hoge.o
vsim -sv_lib hoge hoge_top -do "add waveとか"

vlog *.cで裏でCコンパイラ実行している。そのためCコンパイルを明示的にやらなくてもいいらしい。gcc コマンドのほうがよさげ?