System verilog 如何在c中处理SystemVerilog特定类型,反之亦然?
正如我所知,在systemverilog中,没有字符类型和字符串。 SystemVerilog特定类型,包括压缩类型(数组、结构、联合)、2状态或4状态,这些类型在C中没有自然对应关系System verilog 如何在c中处理SystemVerilog特定类型,反之亦然?,system-verilog,System Verilog,正如我所知,在systemverilog中,没有字符类型和字符串。 SystemVerilog特定类型,包括压缩类型(数组、结构、联合)、2状态或4状态,这些类型在C中没有自然对应关系 如果我们在c中使用字符或字符串,如何在c中处理SystemVerilog特定类型,反之亦然 SV字符串输入(到C)是一个常量字符*。SVstringoutput或inout(来自C)是const char** 正如您可能想象的那样,4状态类型更为复杂: SV TYPE - C TYPE
如果我们在c中使用字符或字符串,如何在c中处理SystemVerilog特定类型,反之亦然 SV
字符串
输入(到C)是一个常量字符*
。SVstring
output或inout(来自C)是const char**
正如您可能想象的那样,4状态类型更为复杂:
SV TYPE - C TYPE
logic - svLogic
packed array of logic - svLogicVecVal *
unpacked array - svOpenArrayHandle
svLogic
、svlogicval
和svOpenArrayHandle
是svdpi.h
中的类型svLogic
是无符号字符的typedef
,它可以采用sv_0
、sv_1
、sv_x
和sv_z
中定义的宏值svLogicVecVal
是一个struct
,有两个字段:aval
和bval
aval
和bval
是32位int
s(标准格式)。(在IUS中,aval
和bval
称为a
和b
)
使用svOpenArrayHandle
传递未打包的数组要复杂得多
我不知道如何传递struct
s或union
s,甚至不知道是否可能。(虽然要将这样的东西传递给C,我想你可以做一点流式转换,但那会很麻烦)。我对“DPI-C”用户的建议是,除非你需要访问4状态值,否则要保持你的参数C兼容。这意味着跨语言边界仅使用int
s、byte
s(char)、int/bytes的解包数组/结构或字符串(char*)
Modelsim/Questa有一个开关-dpiheader filename
,您应该在编译为DPI-C例程生成正确C参数类型的代码时使用它。您的C代码应该包含此文件,以确保您的C代码与所需原型匹配。这样,如果编译器没有错误,就会出现编译器错误,而不是访问垃圾或损坏数据