我对 SystemVerilog 和 C 之间的 DPI 连接有疑问。具体来说,我有一个 C 函数,如下所示:
unsigned short C_FUN(unsigned char* data)
我想传递给它的是bit[7:0] my_darray[];
最好的方法是什么?提前致谢。
我对 SystemVerilog 和 C 之间的 DPI 连接有疑问。具体来说,我有一个 C 函数,如下所示:
unsigned short C_FUN(unsigned char* data)
我想传递给它的是bit[7:0] my_darray[];
最好的方法是什么?提前致谢。
混合打包/解包动态数组在 DPIsvOpenArrayHandle
的C层中处理。您将不得不创建一个将SystemVerilog类型转换为您的类型的包装函数:
#include "svdpi.h"
unsigned short c_fun_wrapper(const svOpenArrayHandle a) {
unsigned char* data;
// convert 'a' to your type
// ...
// call your function
return c_fun(data);
}
有关如何转换的更多信息,请查看IEEE 1800-2012 标准、第 35 节和附件 H。
您基本上拥有一些不错的函数,可用于对数组进行操作(在svdpi.h
文件中定义):
int svLength(const svOpenArrayHandle h, int d);
void *svGetArrElemPtr1(const svOpenArrayHandle, int indx1);
char
您可以使用这些函数循环遍历所有元素并填充将指向的数组data
。