我有一个界面:
interface my_intf();
typedef enum logic [1:0] {
VAL_0 = 2'b00,
VAL_1 = 2'b01,
VAL_2 = 2'b10,
VAL_3 = 2'b11
} T_VAL;
T_VAL val;
endinterface
我的模块使用此界面:
my_intf intf;
问题是为val
分配enum
。
我可以将其指定为:
intf.val = 0;
(并收到警告或错误)
但不是:
intf.val=VAL_0;
也不是
intf.val = my_intf.T_VAL.VAL_0
我是如何克服这个问题的?
答案 0 :(得分:1)
我之前只处理过包含枚举的包,并避免使用接口。这就是我使用包的方式。在要使用它的模块定义之前导入包:
import my_intf_pkg::* ;
module bla(
output my_val_t intf
);
initial begin
intf = VAL_0 ;
end
endmodule
包含枚举的包可能如下所示:
package my_intf_pkg;
typedef enum logic [1:0] {
VAL_0 = 2'b00,
VAL_1 = 2'b01,
VAL_2 = 2'b10,
VAL_3 = 2'b11
} my_val_t;
endpackage : my_intf_pkg
请注意,VAL_0
等是全局的,不依赖于T_VAL
typedef。因此,我经常使它们更独特,包括名称中的typedef。 T_VAL_0
typedef等的T_VAL
。
答案 1 :(得分:0)
intf.val = 0;
应该是一个错误,因为你试图在没有强制转换的情况下为枚举分配一个整数类型。
intf.val = VAL_0;
是一个错误,因为VAL_0未在当前范围内定义。
你应该能够做到
intf.val = intf.VAL_0;
但是,将共享类型放入包中的最佳解决方案是,在需要的地方导入包。