Prev Problem
Next Problem

53. 8-to-3 Priority Encoder

module priority_encoder8 (
    input  [7:0] req,
    output reg [2:0] code
);
    always @* begin
        code = 3'b000; // default when no request

        casez (req)
            8'b1???????: code = 3'b111; // req[7]
            8'b01??????: code = 3'b110; // req[6]
            8'b001?????: code = 3'b101; // req[5]
            8'b0001????: code = 3'b100; // req[4]
            8'b00001???: code = 3'b011; // req[3]
            8'b000001??: code = 3'b010; // req[2]
            8'b0000001?: code = 3'b001; // req[1]
            8'b00000001: code = 3'b000; // req[0]
            default:       code = 3'b000;
        endcase
    end
endmodule

đź’ˇRemember

  • Priority comes from the order of casez items — first match wins.
  • casez with ? wildcards is concise for “MSB-first” priority patterns (? and z are equivalent).
  • Always set defaults at block entry (avoid latch inference).