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/