如何在c中处理特定于SystemVerilog的类型,反之亦然?

时间:2016-03-19 08:12:42

标签: system-verilog

据我所知,在systemverilog中,没有char类型和字符串。 SystemVerilog特定的类型,包括打包类型(数组,结构,联合),2状态或4状态,在C中没有自然对应。

如果我们在c中使用char或string,如何处理c中的SystemVerilog特定类型,反之亦然?

2 个答案:

答案 0 :(得分:2)

我对" DPI-C"的建议用户是指除非您需要访问4状态值,否则请保持您的参数与C兼容。这意味着在语言边界中仅使用int s,byte s(char),ints / bytes的解压缩数组/结构或字符串(char *)。

Modelsim / Questa有一个开关-dpiheader filename,你应该在编译代码时使用它来为DPI-C例程生成适当的C参数类型。您的C代码应该包含此文件以确保您的C代码与所需的原型匹配。这样,如果他们没有编译器错误,而不是访问垃圾或破坏数据。

答案 1 :(得分:1)

SV string输入(到C)是const char *。 SV string输出或inout(来自C)是const char **

正如您可能想象的那样,4状态类型更复杂:

              SV TYPE - C TYPE
                logic - svLogic
packed array of logic - svLogicVecVal *
       unpacked array - svOpenArrayHandle

svLogicsvLogicVecValsvOpenArrayHandlesvdpi.h中的类型。 svLogicunsigned char的typedef,可以取值sv_0sv_1sv_xsv_z,它们是在中定义的宏svdpi.hsvLogicVecVal是一个struct,其中包含两个字段:avalbvalavalbval是32位int s(规范形式)。 (在IUS中,avalbval被称为ab。)

使用svOpenArrayHandle传递解压缩的数组要复杂得多。

我不知道如何通过structunion或即使有可能。 (虽然把这样的事情传递给C,我猜你可以做点流演员,但那会很混乱)。