是否可以将SystemVerilog结构转换为某些类型擦除的指针,例如tf.map_fn
?
我需要将不同结构类型的对象从SV传递到C。并且我想拥有一个DPI函数来处理任何受支持的结构。
在SystemVerilog方面,我有很多类型:
void *
在C端,我有一个可以接受任何类型的函数:
typedef struct { ... } stype1;
typedef struct { ... } stype2;
typedef struct { ... } stype3;
typedef struct { ... } stype4;
stype1 var1;
stype2 var2;
stype3 var3;
stype4 var4;
我希望可以在SV端像这样使用它:
void send_sv_data(const char* type_name, void *ptr);
它通常可以正常工作,唯一的问题是SystemVerilog不支持重载。所以我只能为一种类型声明它:
send_sv_data("stype1", var1);
send_sv_data("stype2", var2);
我试着以碰头作为参数:
import "DPI" function void send_sv_data(string port_name, stype1 data);
但是我还没有找到一种方法来强制转换结构类型的变量。
答案 0 :(得分:1)
SystemVerilog中没有指针,也没有指针的转换。最简单的方法是将SystemVerilog结构打包为字节数组,然后将其解压缩为C结构。