2023年12月11日 星期一

SystemVerilog DPI 介紹 (1)

什麼是 DPI?

自 SystemVerilog3.1a之後,SystemVerilog 推出了一個與第三方語言介接的功能,稱之為DPI(Direct Programming Interface),可以方便在SystemVerilog中引入其它的語言來使用。在本文中將介紹其中最常被使用的 C語言,說明如何在 SystemVerilog中運行以 C語言所寫成的功能。


基本用法

在 SystemVerilog 使用 import 來呼叫 C function。
import 的語法:

import "DPI" [from_c_name =] [pure][context] function type to_sv_name(args);
import "DPI" [from_c_name =] [context] task to_sv_ame (args);


lab1.sv
module top;
    import "DPI-C" context function void helloDPI();
    initial begin
        helloDPI();
    end
endmodule

helloDPI.c
#include <stdio.h>
void helloDPI()
{
    printf("-----------\n");
    printf(" Hello DPI\n");
    printf("-----------\n");
}

run.do
vlib work

# Compile the HDL source(s)
vlog -sv -dpiheader dpiheader.h lab1.sv helloDPI.c

# Simulate the design.
onerror {quit -sim}
vsim -c top
run -all
quit -f

編譯指令

vsim -c -do run.do

運行結果





SystemVerilog DPI 介紹 (1)

什麼是 DPI? 自 SystemVerilog3.1a之後,SystemVerilog 推出了一個與第三方語言介接的功能,稱之為DPI(Direct Programming Interface),可以方便在SystemVerilog中引入其它的語言來使用。在本文中將介紹其中最常...