Verilog 是否正确地将.vh包含在.sv文件中?

Verilog 是否正确地将.vh包含在.sv文件中?,verilog,system-verilog,Verilog,System Verilog,在过去的几天里,我一直在为一个特别棘手的问题而挣扎。我正在编写的SV模型大量使用预定义结构,有点像: typedef logic [ADR_MAX:ADR_MIN] addr; typedef struct packed{ logic opid; logic [COMP_ID_SIZE-1:0] comp_id; } type_A_struct; typedef enum logic [X_TYPE_WIDTH-1:0]{ //parame

在过去的几天里,我一直在为一个特别棘手的问题而挣扎。我正在编写的SV模型大量使用预定义结构,有点像:

typedef logic [ADR_MAX:ADR_MIN] addr;
typedef struct packed{
    logic                    opid;
    logic [COMP_ID_SIZE-1:0] comp_id;
} type_A_struct;

typedef enum logic [X_TYPE_WIDTH-1:0]{ //parameter X_TYPE_WIDTH = 3;
    X_TYPE_C2U,
    X_TYPE_U2C,
    X_TYPE_SX,
    X_TYPE_SR
}
在struct.svh中定义的。但是,我尝试实现的模型使用的是另一个名为structs.vh的定义文件,该文件如下所示(逻辑->节点):

这个问题有两个方面。结构定义通过.sv文件作为包包含:

 package ALL_STRUCTS
     `include structs.svh //This compiles.
     `include structs.vh  //This does not.
 endpackage : ALL_STRUCTS
尝试使用structs.vh编译时,每行中都会出现一个语法错误,其中包含节点

*Error* Syntax error at : //For typedef node [ADR_MAX:ADR_MIN] addr;
所以我想出了一个可怕的解决办法:

typedef node logic; //Also tried with bit and reg
这会产生两个错误:

 *Error* Syntax error at logic          //At the line where the typedef is
 *Error* Illegal enumeration base type. //For every typedef enum logic

现在我没有主意了。我不能为我的东西包含.svh文件,因为模型的其他部分使用.vh文件,这会产生冲突。我假设include不正确,或者节点和逻辑之间的typedef无法编译。如果有人能为我指出解决这个问题的正确方向。vh include那真是太棒了。

什么类型的节点是
node
?我认为不允许您重写
逻辑
类型。您可以尝试:
typedef逻辑节点
表示
节点
是一种逻辑类型<代码>节点必须已在某个位置定义,因此仍然存在冲突。你可能需要创建一个单独的包。就是这样!未定义节点。我认为这是因为它是一个官方图书馆的一部分,但我的假设一定是有些人可能会使用不同的定义。因此,每个人都有自己的定义。我现在需要一些茶。现在变得更聪明似乎是显而易见的。试图将逻辑定义为节点毫无意义。谢谢@Greg!简,在英特尔,他们使用
node
来交换2值模拟和4值模拟。模拟器过去不支持这种功能,但我相信所有大型模拟器解决方案都允许使用编译时开关在2-val和4-val之间进行交换。
 *Error* Syntax error at logic          //At the line where the typedef is
 *Error* Illegal enumeration base type. //For every typedef enum logic