【发布时间】:2014-11-22 13:46:13
【问题描述】:
我对 SystemVerilog 和 C 之间的 DPI 连接有疑问。具体来说,我有一个 C 函数,如下所示:
unsigned short C_FUN(unsigned char* data)
我想传递给它的是bit[7:0] my_darray[];
最好的方法是什么? 提前致谢。
【问题讨论】:
标签: c system-verilog system-verilog-dpi
我对 SystemVerilog 和 C 之间的 DPI 连接有疑问。具体来说,我有一个 C 函数,如下所示:
unsigned short C_FUN(unsigned char* data)
我想传递给它的是bit[7:0] my_darray[];
最好的方法是什么? 提前致谢。
【问题讨论】:
标签: c system-verilog system-verilog-dpi
混合的打包/解包动态数组在 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 指向的数组。
【讨论】:
byte unsigned ,在C端使用char,效率会更高。编码数据中的长度或使用特殊的终止字符,如 @ 字符来解决它。在您的情况下,您可以写@dave_59 或直接开始写@dave,然后会弹出一个工具提示来选择全名。这样,当您发表评论时,收件人会收到收件箱消息。