Amiya · 2021年11月01日

谈谈Verilog/System Verilog 和C的几种交互方式

最近有群友问我system Verilog 和C怎么交互,在网上搜了一圈发现资料比较少,今天这里就和大家讲讲system Verilog 和C的交互。话不多说直接上干活。

第一种 Verilog 通过PLI调用C函数。

PLI全称 Program Language Interface,程序员可以通过PLI在verilog中调用C函数,这种访问是双向的。这些用户定义的系统任务和函数的名称必须以美元符号"$" 开头。大家用得比较多的PLI函数有$display,$finish等。

用户可以自定义PLI函数,下面是一个简单的PLI应用例子。

以下是一段C代码

image.png

下面是一段调用C的verilog的代码

image.png

第二种 System Verilog 通过DPI和C进行交互

为了更加简洁的连接C,system verilog 引入了DPI(Direct Programming Interface)。只要使用import声明和使用,导入一个C子程序,就可以像调用System Verilog中的子程序一样来调用它。相反,如果C想用system verilog里面的函数用export 声明即可。下面是一个简单的例子。

在System Verilog 里面调用C函数

C代码和上面一样

image.png

System Verilog的代码如下

image.png

在C中调用System Verilog 函数
System Verilog 的代码如下

image.png

C代码如下

image.png

第三中 System Verilog 和C的交互方式是通过TLM1.0或者TLM2.0 进行交互。

image.png

这种交互方式主要应用在System Verilog 和systemc 上。对于systemc一般人用得比较少,所以这类交互也比较少用。下面是一个简单的例子

Systemc 的编码,其中cnn_inst的接口in是tlm1/tlm2类型port。

image.png

System verilog 的编码,cpu_inst.out 为tlm1/tlm2类型的port。

image.png

第四种交互方式,通过CPU执行C代码,从而实现verilog 和C的交互。

C代码通过工具链编译成CPU可以执行的汇编指令,再将汇编指令转成对应的指令代码,然后通过CPU读取指令代码产生激励,实现C代码所描述的功能。

以上是Verilog/System Verilog 和C的几种交互模式,小伙伴们学会了吗?

作者:IC bug 猎人
原文链接:https://mp.weixin.qq.com/s/crY5DAuZupZr-NbMYWOeFA

推荐阅读

更多IC设计技术干货请关注IC设计技术专栏。
推荐阅读
关注数
10974
内容数
1216
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息