SystemVerilog / DPI中的类型擦除

时间:2019-06-18 21:16:55

标签: system-verilog

是否可以将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);

但是我还没有找到一种方法来强制转换结构类型的变量。

1 个答案:

答案 0 :(得分:1)

SystemVerilog中没有指针,也没有指针的转换。最简单的方法是将SystemVerilog结构打包为字节数组,然后将其解压缩为C结构。