SystemVerilog 中的错误消息“抱歉:当前不支持 always_* 进程中的常量选择(将包含所有位)。”

Error message ”sorry: constant selects in always_* processes are not currently supported (all bits will be included).“ in SystemVerilog

我需要用“case”语句来实现一个4位优先级的编码器,代码如下:

module case2(
    input [3 : 0] in,
    output logic [1 : 0] pos
);
    always_comb begin
        case(1)
            in[0]:pos=2'b00;
            in[1]:pos=2'b01;
            in[2]:pos=2'b10;
            in[3]:pos=2'b11;
            default:pos=2'b00;
        endcase
    end
endmodule

在 always_comb block.I 中搜索的 google 中,我似乎无法使用 '1' 作为大小写表达式,但是 acquired.How 没有任何帮助] 我可以解决这个问题吗?常量不能用作case的expr吗?我认为这是不合理的。 谢谢你的建议!

"当前不支持" 表示该工具认为代码有效,但尚未实施。你没有说你用的是什么工具。

总有蛮力方法:

always_comb 
        case(in)
        4'b0001,4'b0011, ...     4'b1111 :pos=2'b00;
        4'b0010,4'b0110, 4'b1010,4'b1110 :pos=2'b01;
        4'b0100,4'b1100                  :pos=2'b10;
        4'b1000                          :pos=2'b11;
        default                          :pos=2'b00;
endcase

另一种写法是使用 priority if 语句

always_comb
  priority if (in[0]) pos=2'b00;
      else if (in[1]) pos=2'b01;
      else if (in[2]) pos=2'b10;
      else if (in[3]) pos=2'b11;
      else            pos=2'b00;