我试图了解typedef和enum在SystemVerilog中的工作方式,尤其是是否有可能在模块的端口声明中使用“自定义”数据类型。
到目前为止,我已经能够在包中创建自定义数据类型,这里是:
super(height, width);
现在,我想在模块中定义类型为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
这可能吗?如果是这样,语法是否正确?我目前在Modelsim上遇到问题
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
);
但是我无法确定这是由于某个愚蠢的错误还是由于更严重的概念错误。
答案 0 :(得分:3)
如果将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
);