System verilog SystemVerilog/DPI中的类型擦除

System verilog SystemVerilog/DPI中的类型擦除,system-verilog,system-verilog-dpi,System Verilog,System Verilog Dpi,是否可以将SystemVerilog结构强制转换为某种类型的已擦除指针,如void* 我需要将不同结构类型的对象从SV传递到C。我希望有一个DPI函数来处理任何类型的受支持结构 在SystemVerilog方面,我有许多类型: typedef struct { ... } stype1; typedef struct { ... } stype2; typedef struct { ... } stype3; typedef struct { ... } stype4; stype1 var1

是否可以将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);
我试着让钱德尔作为论据:

 import "DPI" function void  send_sv_data(string port_name, chandle data);

但是我还没有找到一种方法如何将struct类型的变量强制转换为chandle。

SystemVerilog中没有指针,也没有指针强制转换。最简单的方法是将SystemVerilog结构打包成一个字节数组,然后将它们解压缩到C结构中。

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

您使用的编程语言错误:-(.没有办法做你想做的事。
chandle
只是通过sv媒体将指针从dpi传递到dpi。是的,看起来我必须为每种类型编写一个单独的dpi函数。你使用了错误的编程语言:-(.没有办法做你想做的事。
chandle
只是通过sv媒体将指针从dpi传递到dpi。是的,看起来我必须为每种类型编写一个单独的dpi函数。