# Code conversion

The `amaranth.lib.coding` module provides building blocks for conversion between different encodings of binary numbers.

## One-hot coding

class amaranth.lib.coding.Encoder

  Encode one-hot to binary.

  If one bit in `i` is asserted, `n` is low and `o` indicates the asserted bit. Otherwise, `n` is high and `o` is `0`.

  Parameters:

    width (int) – Bit width of the input

  Attributes:

    - i (Signal(width), in) – One-hot input.

    - o (Signal(range(width)), out) – Encoded natural binary.

    - n (Signal, out) – Invalid: either none or multiple input bits are asserted.

class amaranth.lib.coding.Decoder

  Decode binary to one-hot.

  If `n` is low, only the `i`-th bit in `o` is asserted. If `n` is high, `o` is `0`.

  Parameters:

    width (int) – Bit width of the output.

  Attributes:

    - i (Signal(range(width)), in) – Input binary.

    - o (Signal(width), out) – Decoded one-hot.

    - n (Signal, in) – Invalid, no output bits are to be asserted.

## Priority coding

class amaranth.lib.coding.PriorityEncoder

  Priority encode requests to binary.

  If any bit in `i` is asserted, `n` is low and `o` indicates the least significant asserted bit. Otherwise, `n` is high and `o` is `0`.

  Parameters:

    width (int) – Bit width of the input.

  Attributes:

    - i (Signal(width), in) – Input requests.

    - o (Signal(range(width)), out) – Encoded natural binary.

    - n (Signal, out) – Invalid: no input bits are asserted.

class amaranth.lib.coding.PriorityDecoder

  Decode binary to priority request.

  Identical to `Decoder`.

## Gray coding

class amaranth.lib.coding.GrayEncoder

  Encode binary to Gray code.

  Parameters:

    width (int) – Bit width.

  Attributes:

    - i (Signal(width), in) – Natural binary input.

    - o (Signal(width), out) – Encoded Gray code.

class amaranth.lib.coding.GrayDecoder

  Decode Gray code to binary.

  Parameters:

    width (int) – Bit width.

  Attributes:

    - i (Signal(width), in) – Gray code input.

    - o (Signal(width), out) – Decoded natural binary.