Указатели 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,

Другие вопросы по тегам