SV通过DPI调用C

Verilog与C之间进行程序交互,PLI(Programming Language Interface)经过了TF,ACC,VPI等模式。

使用PLI可以生成延时计算器,来连接和同步多个仿真器,并可以通过波形显示等调试工具。

通过PLI方式连接一个简单的C程序,需要编写很多代码,并理解多仿真阶段的同步,调用段,实例指针等概念。

PLI方式给仿真带来了额外的负担,为了保护Verilog的数据结构,仿真器需要不断的在Verilog和C之间复制数据。

 

SystemVerilog引入了DPI(Direct Programming Interface),能够更简洁的连接C,C++或者其他非Verilog的编程语言。
只要使用import声明和使用,导入一个C子程序,就可以像调用SystemVerilog中的子程序一样来调用它。

 

SystemVerilog和C语言之间传递的最基本的数据类型是int,双状态的32位的数据类型,

通过import声明定义C任务和函数的原型,带有返回值的C函数被映射成一个systemverilog的函数(function),

void类型的C函数被映射为一个systemverilog的任务(task)或者void 函数(function)

通过“DPI-C”引入的C函数,可以直接在function中调用,但是只在该DPI被声明的空间内有效

所以可以在package中将所有的DPI函数在做封装,打包为function。然后在需要的地方,import package。

使用关键字DPI-C表示,使用压缩值(packed)的方式来保存数据类型。

 

import "DPI-C" function int factorial(input int i);

               program automatic test;     

                               initial  begin                

                                            for(int i=1;i<=10;i++)                

                                            $dispaly("%0d != %0d",i,factorial(i));  //像调用正常的function int一样。           

                                         end                                                       //凡是可以声明function的地方,module,program,interface,package都可以import DPI

              endprogram

 

如果C函数名和SystemVerilog中的命名冲突,可以在import导入时,赋予新的函数名。

import "DPI-C

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值