在.sv文件中正确包含.vh?

时间:2015-06-08 18:44:23

标签: 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]{ //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包括真的很棒。

0 个答案:

没有答案