我有以下代码:
typedef enum logic [1:0] {
CMD1 = 2'b1?,
CMD2 = 2'b01,
CMD3 = 2'b00
} cmd_t;
基本上,如果MSB为1,则为CMD1(我将使用LSB作为部分索引)。如果MSB为0,则解码该命令的其余位。
然后我尝试使用always_comb进行解码:
cmd_t myCmd;
always_comb begin
casez(myCmd)
CMD1: isCmd1 = 1'b1;
CMD2: isCmd1 = 1'b0;
default: isCmd1 = 1'b0;
endcase
end
不幸的是,我从Spyglass收到此消息:
[12EE] W467 Based number 2'b1? contains a don't-care (?) - might lead to simulation/synthesis mismatch
此代码应该可合成,不是吗?可以安全放弃此望远镜警告吗?
答案 0 :(得分:2)
我怀疑这会正确地综合。我认为Spyglass消息具有误导性。在Verilog(和SystemVerilog)中,?
的含义与z
完全相同。您正在指定一个具有4状态基本类型值的枚举,其中CMD1
将由2'b1z
精确表示。