Digital Logic
Encoder
A combinational circuit that converts a one-hot or binary-active input to a compact binary code.
Detailed Explanation
A priority encoder accepts multiple inputs and outputs the binary index of the highest-priority active input. If inputs 0, 2, and 5 are active, a priority encoder with LSB priority outputs 0; with MSB priority, it outputs 5.
Standard encoders assume exactly one input is active (one-hot input). Priority encoders handle multiple active inputs by prioritizing. A valid output indicates whether any input was active.
Code Example
systemverilog
// Priority encoder (MSB priority)
module priority_enc #(parameter N = 8) (
input logic [N-1:0] in,
output logic [$clog2(N)-1:0] out,
output logic valid
);
always_comb begin
out = '0;
valid = |in;
for (int i = 0; i < N; i++)
if (in[i]) out = i[$clog2(N)-1:0];
end
endmodule