1

我对 SystemVerilog 和 C 之间的 DPI 连接有疑问。具体来说,我有一个 C 函数,如下所示:

unsigned short C_FUN(unsigned char* data)

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

最好的方法是什么?提前致谢。

4

1 回答 1

1

混合打包/解包动态数组在 DPIsvOpenArrayHandleC层中处理。您将不得不创建一个将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

于 2014-11-22T22:00:45.157 回答