我会将其重构为:
casez(A)
4'b1???: Y<=4'b1000;
4'b01??: Y<=4'b0100;
4'b001?: Y<=4'b0010;
4'b0001: Y<=4'b0001;
default: Y<=4'b0000;
endcase
那么就不用担心优先级了,每场比赛都是独一无二的。
来自 IEEE Std 1800-2009(IEEE SYSTEMVERILOG 标准)
12.5.2 case 语句中
的常量表达式 case_expression 可以使用常量表达式。常量表达式的值应与 case_item_expressions 进行比较。
以下示例通过对 3 位优先级编码器建模来演示用法:
logic [2:0] encode ;
case (1)
encode[2] : $display("Select Line 2") ;
encode[1] : $display("Select Line 1") ;
encode[0] : $display("Select Line 0") ;
default $display("Error: One of the bits expected ON");
endcase
12.5.3 unique-case、unique0-case 和priority-case
case、casez 和casex 关键字可以由priority、unique 或unique0 关键字限定以执行某些违规检查。这些统称为优先案例、独特案例或独特案例。优先案例仅对第一个匹配项起作用。Unique-case 和 unique0-case 断言没有重叠的 case_items,因此并行评估 case_items 是安全的。
...
priority casez(a) // values 4,5,6,7 cause a violation report
3’b00?: $display("0 or 1");
3’b0??: $display("2 or 3");
endcase
我不确定综合工具对优先案例陈述的支持程度如何。