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.