Verilator的DPI-C机制:实现跨平台的函数调用

笔者正在搞ysyx,需要用到Verilator的DPI-C机制。虽然STFM比较容易学会,但本着学习和记录的目的,还是写一篇文章出来。

DPI-C机制,简单来说就是你可以在C语言中实现一个函数,却在Verilog中调用!在验证的过程中无疑会有很大的助力!

 

下面来个例子吧:

import "DPI-C" function int add (input int a, input int b);
module our(
	input wire [31:0] a,
	input wire [31:0] b,
	output reg [31:0] ans
);
always@(*) begin
	ans = add(a, b);
end
endmodule

比如我需要在.v中调用一个add函数,那就把import那句话添加进来。然后,就可以在你需要的地方直接使用这个函数。

在这个例子中,我对引出的信号ans赋值为add(a, b),也就相当于ans = a + b了。

#include "Vour__Dpi.h"
#include "svdpi.h"
#include "Vour.h"

Vour *top = new Vour;
int add(int a, int b) {return a + b;}
int main() {
	top->a = 1;
	top->b = 1;
	top->eval();
	printf("The value is %d\n", top->ans);
	delete top;
	exit(0);
	return 0;
}

这是验证所需要的.cpp,需要自己进行设计和编写。这里对上面的.v中的add函数进行了定义,并在main函数中进行了验证的操作。

当然,DPI-C机制可以有很多妙用。不过也不要太过依赖,不要本末倒置。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值