# Standard library

The `amaranth.lib` module, also known as the standard library, provides modules that falls into one of the three categories:

1. Modules that will used by essentially all idiomatic Amaranth code, and are necessary for interoperability. This includes `amaranth.lib.enum` (enumerations), `amaranth.lib.data` (data structures), and `amaranth.lib.wiring` (interfaces and components).

2. Modules that abstract common functionality whose implementation differs between hardware platforms. This includes `amaranth.lib.cdc`.

3. Modules that have essentially one correct implementation and are of broad utility in digital designs. This includes `amaranth.lib.coding`, `amaranth.lib.fifo`, and `amaranth.lib.crc`.

The Amaranth standard library is separate from the Amaranth language: everything provided in it could have been implemented in a third-party library.

- Enumerations
  - Metaclass
  - Base classes
  - View classes
- Data structures
  - Introduction
  - Modeling structured data
  - Common data layouts
  - Data views
  - Data classes
- Interfaces and connections
  - Introduction
  - Signatures
  - Interfaces
  - Making connections
  - Components
- Clock domain crossing
  - `FFSynchronizer`
  - `AsyncFFSynchronizer`
  - `ResetSynchronizer`
  - `PulseSynchronizer`
- Code conversion
  - One-hot coding
  - Priority coding
  - Gray coding
- First-in first-out queues
  - `FIFOInterface`
  - `SyncFIFO`
  - `SyncFIFOBuffered`
  - `AsyncFIFO`
  - `AsyncFIFOBuffered`
- Cyclic redundancy checks
  - `Algorithm`
  - `Parameters`
  - `Processor`
  - Predefined CRC Algorithms