引言
本文介绍了一个最简单的例子,实现再sv中使用c函数,同时在c中使用sv中定义的task,编译器使用的是vcs
sv里的代码
sv想要引用c语言的函数,需要通过 import "DPI-C"的方式将c函数导入当前作用域,C语言与SV关于函数参数的映射关系可以参考绿皮书。
![sv代码](https://img-blog.csdnimg.cn/089f475f105248cfbb92d03a1dc178bd.png)
c代码
由于c函数中是不能添加延迟的,所以我们通过调用sv中的task来实现添加延迟的功能,将sv中的task导出供C模块使用用到的是export “DPI-C” task
![c代码](https://img-blog.csdnimg.cn/e530c98ea0c84e9dae2c59a47d097c04.png)
vcs需要添加如下参数(c文件跟sv文件混在一起编译)
![Makefile代码](https://img-blog.csdnimg.cn/07135f66ba5443b2ae808a807ef82e69.png)
仿真结果
![Alt 仿真结果](https://img-blog.csdnimg.cn/c9d4ae96da7b4028b2b906aa36d5bc1b.png)