Указатели SystemVerilog DPI-C
У меня есть вопрос о соединении DPI между SystemVerilog и C. В частности, у меня есть функция C, которая выглядит следующим образом:
unsigned short C_FUN(unsigned char* data)
и что я хочу передать это bit[7:0] my_darray[];
Какой лучший способ сделать это? Заранее спасибо.
1 ответ
Смешанный упакованный / распакованный динамический массив обрабатывается как svOpenArrayHandle
в С слой DPI. Вам нужно будет создать функцию-оболочку, которая преобразует тип 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
,