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