考虑以下模块声明:
module DFF(d, q, CLK, RESET);
parameter W = 2;
input [W-1:0] d;
input CLK;
input RESET;
output logic [W-1:0] q;
//....
endmodule
在d和q为枚举类型的情况下实例化它的正确方法是什么?这是我的枚举类型:
typedef enum logic [1:0] {ENUM_IDLE = 0,
ENUM_S1 ,
ENUM_S2
} T_STATE;
我想为T_STATE变量类型实例化DFF:
T_STATE d, q;
DFF dff_inst (.d(d), .q(q), .CLK(CLK), .RESET(RESET));
这会生成编译/枚举错误。我也没有成功尝试过:
DFF dff_inst (.d(logic'(d)), .q(logic'(q)), .CLK(CLK), .RESET(RESET));
和
DFF dff_inst (.d(logic[1:0]'(d)), .q(logic[1:0]'(q)), .CLK(CLK), .RESET(RESET));
我想保持DFF定义不变,但将枚举类型转换为逻辑。
修改
在IEEE Std 1800-2012,6.24.1中建议的这个也会产生一个细化错误:
typedef logic [$bits(T_STATE) - 1 : 0] T_STATE_LOGIC;
DFF dff_inst (.d(T_STATE_LOGIC'(d)), .q(T_STATE_LOGIC'(q)), .CLK(CLK), .RESET(RESET));
答案 0 :(得分:3)
d
不需要投放。
我只能使用ModelSim重现错误,我可以访问的所有其他模拟器都没有生成任何错误或警告并正确模拟。
对于ModelSim,我发现这有效:
DFF dff_inst (.q(q[1:0]), .*);
这很有效:
DFF dff_inst (.q({q}), .*);
上的工作示例