步骤一:在SystemVerilog中调用DesignWare加法器IP并导出到C
1. 编写SystemVerilog代码
我们首先编写一个使用 DesignWare 加法器 IP 的 SystemVerilog 模块,使用 task
来处理时延问题,并将其导出到 C。
module adder_wrapper #(parameter WIDTH = 16)(
input logic [WIDTH-1:0] a,
input logic [WIDTH-1:0] b,
output logic [WIDTH-1:0] sum
);
// 使用 DesignWare 加法器IP
DW01_add #(WIDTH) u1 (
.A(a),
.B(b),
.CI(1'b0),
.SUM(sum),
.CO()
);
endmodule
2. 编写DPI接口,导出加法器结果到C语言
为了通过 C 语言调用 SystemVerilog 模块,我们使用 DPI 导出接口,并将包含时延的功能放到 task
中。
module sv_to_c_adder;
logic [15:0] a_sv, b_sv;
logic [15:0] sum_sv;
adder_wrapper #(16) u_adder (
.a(a_sv),
.b(b_sv),
.sum(sum_sv)
);
// 导出task到C语言
export "DPI-C" task call_adder;
task call_adder(input int a, input i