Priority encoder with casez

// synthesis verilog_input_version verilog_2001
/*
解释:
4'bzzz1:这个掩码表示 in[3:1] 可以是任何值,只要 in[0] 为 1。输出 pos 为 0。
4'bzz1z:这个掩码表示 in[3] 和 in[1:0] 可以是任何值,只要 in[1] 为 1。输出 pos 为 1。
4'bz1zz:这个掩码表示 in[3] 和 in[0] 可以是任何值,只要 in[2] 为 1。输出 pos 为 2。
4'b1zzz:这个掩码表示 in[2:0] 可以是任何值,只要 in[3] 为 1。输出 pos 为 3。
*/

module top_module (
    input [7:0] in,
    output reg [2:0] pos );
    always@(*) begin
        casez(in)
            8'bzzzzzzz1 : pos = 0;
            8'bzzzzzz1z : pos = 1;
            8'bzzzzz1zz : pos = 2;
            8'bzzzz1zzz : pos = 3;
            8'bzzz1zzzz : pos = 4;
            8'bzz1zzzzz : pos = 5;
            8'bz1zzzzzz : pos = 6;
            8'b1zzzzzzz : pos = 7;
            default : pos = 0;
        endcase
    end
endmodule