DPI就是SV与C语言之间交流的一个媒介,所以只要知道他们两个里面的东西怎么交流起来就好了。 SV和C怎么连接起来?连接起来后两个之间的函数调用,参数传递?
-
SV和SC怎么连接起来?只需要C里面加载支持SV的库。然后编译的时候将C code编译进去就好了。C语言里面需要写入:
#include <svdpi.h>
引入svdpi的库,这样就可以实现sv与c语言之间的互联了。 - SV与C之间的函数调用与参数传递:
- 在SV里面使用import关键字引入C函数
- 使用export将SV函数暴露给C,C里面使用extern接收SV传出来的函数。
- SV里面调用C函数:
import "DPI-C" function void show(input logic s);
导入C里面的show函数。然后可以直接使用show(s), 对函数进行调用, 这样可以将SV里面的参数传递到C里面进行处理。 - C里面调用SV函数: 需要分为两步完成。
- 在SV里面把函数或者任务暴露给C,
export "DPI-C" task apb_write;
- 在C里面引入函数或者任务:
extern void apb_write(int, int);
如果sv里面的函数传入的参数是ref形式的,那么可以将C里面的值直接赋值到sv里面(如scoreboard.).
- 在SV里面把函数或者任务暴露给C,
- SV里面调用C函数:
- 需要注意下参数传递的类型。 两者可以通过结构体进行传递,需要传输方和接收方都声明一个结构体,然后进行结构体传递。 具体的使用细节后面再进行进一步的完善。
本文原创,错误之处在所难免!盼指出!