System verilog 是否可以使用用“定义”定义的类型;typedef enum";在模块中';港口申报单?

System verilog 是否可以使用用“定义”定义的类型;typedef enum";在模块中';港口申报单?,system-verilog,System Verilog,我试图了解typedef和enum在SystemVerilog中是如何工作的,特别是,是否可以在模块的端口声明中使用“自定义”数据类型 到目前为止,我已经能够在包中创建自定义数据类型,如下所示: typedef enum logic[2:0] { add_conf = 3'b000, sub_conf = 3'b001, and_conf = 3'b010, or_conf = 3'b011, xor_conf =

我试图了解typedef和enum在SystemVerilog中是如何工作的,特别是,是否可以在模块的端口声明中使用“自定义”数据类型

到目前为止,我已经能够在包中创建自定义数据类型,如下所示:

typedef enum logic[2:0] {
        add_conf = 3'b000,
        sub_conf = 3'b001,
        and_conf = 3'b010,
        or_conf = 3'b011,
        xor_conf = 3'b100,
        sll_conf = 3'b101,
        srl_conf = 3'b110,
        sra_conf = 3'b111
} iexu_conf
现在,我想在模块中定义类型为
iexu_conf
的输入端口,如下所示:

module iexu_decoder
(
    input iexu_conf conf,
    output logic add_ctrl,
    output logic[1:0] logic_ctrl,
    output logic[1:0] shifter_ctrl,
    output logic[1:0] outmux_ctrl
);
这可能吗?如果是,语法是否正确?我目前在Modelsim上遇到问题

** Error: (vlog-13069) iexu_decoder.sv(5): near "conf": syntax error, unexpected IDENTIFIER, expecting ')'.

但我无法判断这是因为一些愚蠢的错误还是由于更严重的概念错误。

如果将
typedef
放在一个包中,则需要显式引用该包或
import
以使其在所有使用它的模块声明中可见

package pkg;
  typedef enum logic[2:0] {
        ...
  } iexu_conf;
endpackage
明确引用:

module iexu_decoder
(
    input pkg::iexu_conf conf,
    output logic add_ctrl,
    output logic[1:0] logic_ctrl,
    output logic[1:0] shifter_ctrl,
    output logic[1:0] outmux_ctrl
);
模块头导入:

module import pkg::*; iexu_decoder
(
    input iexu_conf conf,
    output logic add_ctrl,
    output logic[1:0] logic_ctrl,
    output logic[1:0] shifter_ctrl,
    output logic[1:0] outmux_ctrl
);

是的,这是可能的。你使用了哪种编译器?您是否在系统verilog模式下编译?typedef decl后面缺少分号。还有其他错误吗?我没有复制粘贴分号,但它在那里,我使用的是ModelSim-Intel FPGA Edition vlog 10.5b编译器。事实上,我没有正确导入包,所以难怪编译器不能识别类型。谢谢,事实上我没有正确导入包。我认为“include”constants.sv起了作用,我错了。