これをリファクタリングします:
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 STANDARD FOR SYSTEMVERILOG)から
12.5.2caseステートメント
の定数式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キーワードで修飾して、特定の違反チェックを実行できます。これらはまとめて、priority-case、unique-case、またはunique0-caseと呼ばれます。優先ケースは、最初の試合にのみ作用します。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
ただし、優先ケースステートメントが合成ツールでどの程度サポートされているかはわかりません。