SystemVerilog DPI-C指针

时间:2014-11-22 13:46:13

标签: c system-verilog system-verilog-dpi

我对SystemVerilog和C之间的DPI连接有疑问。具体来说,我有一个看起来像这样的C函数:

unsigned short C_FUN(unsigned char* data)

我希望传递给它的是bit[7:0] my_darray[];

哪种方法最好? 提前谢谢。

1 个答案:

答案 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数组。