Priority Encoders

// Chain priority: O(N) critical path
assign out = req[0] ? 3'd0 :
             req[1] ? 3'd1 :
             req[2] ? 3'd2 :
             req[3] ? 3'd3 :
             req[4] ? 3'd4 :
             req[5] ? 3'd5 :
             req[6] ? 3'd6 :
             req[7] ? 3'd7 : 3'd0;
^ This is Lower Latency?
// Tree priority: O(log N) critical path
wire [1:0] lo, hi;
wire lo_valid, hi_valid;
prio4 prio_lo(.req(req[3:0]), .out(lo),
              .valid(lo_valid));
prio4 prio_hi(.req(req[7:4]), .out(hi),
              .valid(hi_valid));
assign out = lo_valid ? {1'b0, lo}
                      : {1'b1, hi};
^ This is Lower Latency?

* For illustration purposes only, see FAQ for more details.