What is DPI-C?
DPI-C 是systemverilog为了与其他语言(c/c++)进行交互而设计的机制,通过DPI-C可以完成:
- SV call C function
- C call SV function
Example
testbench.sv :
module dpi_test;
export "DPI-C" function sv_print;
import "DPI-C" context function void c_print();
initial begin
$display("Before calling API\n");
c_print();
$display("After calling API\n");
end
function void sv_print();
$display("sv side : print\n");
endfunction
endmodule
c_print.cpp:
#include "svdpi.h"
#include "stdio.h"
extern "C" void sv_print();
extern "C" void c_print() {
printf("C side : print\n");
sv_print();
}
vcs cmd:
vcs -timescale=1ns/1ns +vcs+flush+all +warn=all -sverilog testbench.sv c_print.cpp
restriction
- DPI-C 不能import/export class methods