我对SystemVerilog和C之间的DPI连接有疑问。具体来说,我有一个看起来像这样的C函数:
unsigned short C_FUN(unsigned char* data)
我希望传递给它的是bit[7:0] my_darray[];
哪种方法最好? 提前谢谢。
答案 0 :(得分:1)
混合打包/解压缩动态数组在DPI的 C 层中作为svOpenArrayHandle
处理。您将不得不创建一个从 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 standard,第35节和附录H.
你基本上拥有一些很好的函数可以用来操作数组(在svdpi.h
文件中定义):
int svLength(const svOpenArrayHandle h, int d);
void *svGetArrElemPtr1(const svOpenArrayHandle, int indx1);
您可以使用这些函数循环遍历所有元素,并填充char
所指向的data
数组。