在可综合SystemVerilog中的枚举typedef中使用“不在乎”

时间:2019-06-26 23:41:31

标签: system-verilog synthesis

我有以下代码:

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

此代码应该可合成,不是吗?可以安全放弃此望远镜警告吗?

1 个答案:

答案 0 :(得分:2)

我怀疑这会正确地综合。我认为Spyglass消息具有误导性。在Verilog(和SystemVerilog)中,?的含义与z完全相同。您正在指定一个具有4状态基本类型值的枚举,其中CMD1将由2'b1z精确表示。