在过去的这些日子里,我一直在努力解决一个特别持久的问题。我正在编写的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的定义文件,它看起来像这样(逻辑 - >节点):
typedef node [ADR_MAX:ADR_MIN] addr;
typedef struct packed{
node opid;
node [COMP_ID_SIZE-1:0] comp_id;
} type_A_struct;
typedef enum node [X_TYPE_WIDTH-1:0]{ //parameter X_TYPE_WIDTH = 3;
X_TYPE_C2U,
X_TYPE_U2C,
X_TYPE_SX,
X_TYPE_SR
}
问题是双重的。结构定义通过.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包括真的很棒。