是否可以在模块的端口声明中使用用 "typedef enum" 定义的类型?
Is it possible to use a type defined with "typedef enum" in a module's port declaration?
我正在尝试了解 SystemVerilog 中的 typedef 和枚举是如何工作的,特别是,是否可以在模块的端口声明中使用 "custom" 数据类型。
到目前为止,我已经能够在包中创建自定义数据类型,这里是:
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
);
我正在尝试了解 SystemVerilog 中的 typedef 和枚举是如何工作的,特别是,是否可以在模块的端口声明中使用 "custom" 数据类型。
到目前为止,我已经能够在包中创建自定义数据类型,这里是:
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
);