Vengineerの妄想(準備期間)

人生は短いけど、長いです。人生を楽しみましょう!

DPI-Cとは?

Verification Engineerの戯言

DPI-C(Direct Programming Interface)とは?

SystemVerilogでC言語がPLI/VPIより簡単に使えるためのもの!

PLI/VPIでは、Verilog HDL側からC言語が呼び出せるメカニズムですが、
DPI-Cでは、SystemVerilog側からC言語が呼び出せるだけではなく。
C言語からSystemVerilog側のコード(moduleおよびprogram内のtask/function部)が呼び出せます。
(class内のtask/functionは呼び出せません)。

SystemVerilog側からC言語を呼び出すときも、PLI/VPIに比べると遙かに簡単な手続きで使えます。

SystemVerilog側のコード

import "DPI-C" function int add( input int a, input b );

と書くだけで、C言語の関数addが利用できます。
(import "DPI-C"を"DPI"としているコードがありますが、
IEEE 1800-2005では、"DPI-C"がC言語に対するものです。
DPIそのものはC言語に限定されるものではないので)

これだけのことをPLI/VPIでやると何倍のコードを書かなくてはいけません。
(Verilog HDL側では何のコードも必要ありませんが、C言語で面倒なことをたくさんやらなくてはいけません)

C言語側からSystemVerilogのコードを呼び出すときは、

export "DPI-C" function sv_sub;

と書くだけで、SystemVerilogのsv_subという関数をC言語側で呼び出すことができます。
(C言語側では、関数のプロトタイプ宣言のみ必要です)

いかがですか?

DPI-Cを使えば、C言語はSystemVerilogの一部になったもの同然です。

まずは、入門として下記のサイトをのぞいてみてください。

「Project VeriPage」: http://www.project-veripage.com/dpi_tutorial_1.php
「doulos」http://www.doulos.com/knowhow/sysverilog/tutorial/dpi/