忍者ブログ

EDA Blog

Verilog、SystemVerilog、SystemCなど、ハードウェア記述言語についてのブログです。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

現在、新しいコメントを受け付けない設定になっています。

[Verilog] ModelSimでDPIを使う

ほとんどModelSimのユーザーマニュアルに書かれている例そのままですが、ModelSimでSystemVerilogのDPIを使用する例です。

Cのソースコード(hello_c.c)を用意します。
この例では、Hello from c_task()と表示した後、Verilog内で定義されているタスクverilog_taskを呼び出します。
最後に、渡された変数iの値を2倍にします。

ヘッダーファイルのうち、svdpi.hはModelSimに付属しています。
dpiheader.hvlogコマンドで作成します。

#include "svdpi.h"
#include "dpiheader.h"

int c_task(int i, int *o) {
printf("Hello from c_task()\n");
verilog_task(i, o);
*o = 2 * i;
return (0);
}


Verilogのソースコード(hello_top.v)です。
export "DPI-C"宣言で、タスクverilog_taskがC言語から呼び出せるようにエクスポートしています。
import "DPI-C"宣言で、先ほどhello_c.cで宣言した関数c_taskを呼び出せるようにしています。

module hello_top;
int ret;
export "DPI-C" task verilog_task;
task verilog_task(input int i, output int o);
#10;
$display("Hello from verilog_task()");
endtask // verilog_task
import "DPI-C" context task c_task(input int i, output int o);
initial begin
c_task(1, ret);
$display("ret=%d", ret);
end
endmodule // hello_top


コンパイルとリンクの手順は下記のとおりです。
$(MODELSIM)は、ModelSimをインストールしたディレクトリです。
  1. vlog -sv -dpiheader dpiheader.h hello.v

  2. vsim -dpiexportobj exportobj hello_top

  3. gcc -c -I $(MODELSIM)/include hello_c.c

  4. gcc -shared -Bsymbolic -o hello_c.dll hello_c.o exportobj.obj -L $(MODELSIM)win32aloem -lmtipli

  5. vsim -c -sv_lib hello_c -do "run -all; quit" hello_top



実行すると下記のように表示されます。。

# Hello from c_task()
# Hello from verilog_task()
# ret= 2

拍手[1回]

PR

コメント

お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字

カレンダー

03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

フリーエリア

最新CM

[04/11 なつたん]

最新TB

プロフィール

HN:
aston_martin
性別:
非公開

ブログ内検索

カウンター

アクセス解析