Можно ли привести структуру SystemVerilog к какому-либо стертому указателю, например void *
?
Мне нужно передать объекты различных структурных типов из SV в C. И я хочу иметь одну функцию DPI для обработки любого вида поддерживаемой структуры.
На стороне SystemVerilog у меня много типов:
typedef struct { ... } stype1;
typedef struct { ... } stype2;
typedef struct { ... } stype3;
typedef struct { ... } stype4;
stype1 var1;
stype2 var2;
stype3 var3;
stype4 var4;
На стороне C у меня есть одна функция, которая принимает любой тип:
void send_sv_data(const char* type_name, void *ptr);
Я надеялся использовать его на стороне SV:
send_sv_data("stype1", var1);
send_sv_data("stype2", var2);
И это работает в общем, с единственной проблемой, что SystemVerilog не поддерживает перегрузку. Поэтому я могу объявить это только для одного типа:
import "DPI" function void send_sv_data(string port_name, stype1 data);
Я пытался использовать chandle в качестве аргумента:
import "DPI" function void send_sv_data(string port_name, chandle data);
Но я не нашел способа, как я приведу переменную типа структуры к чандлу.