Glossary
========================

.. glossary::

  Arc
    A programmable connection between two nodes. Most arcs are unidirectional buffers that connect
    in one direction only, a few are bidirectional switch transistors (however these are mostly used in
    situations where this is one useful direction anyway).

  ASIC
    An application-specific integrated circuit (ASIC) is a chip that is
    designed and used for a specific purpose, such as video acceleration,
    machine learning acceleration, and many more purposes. In contrast to
    :term:`FPGAs <FPGA>`, the programming of an ASIC is fixed at the time of
    manufacture.

  Bitstream
    Binary data that is directly loaded into an :term:`FPGA` to perform
    configuration. Contains configuration :term:`frames <frame>` as well as
    programming sequences and other commands required to load and activate same.

  Database
    Contains information about programmable configuration bits, arc enable bits,
    and how wires are connected between tiles.

  FF
  Flip flop
    A flip flop (FF) is a logic element on the :term:`FPGA` that stores state.

  FPGA
    A field-programmable gate array (FPGA) is a reprogrammable integrated
    circuit, or chip. Reprogrammable means you can reconfigure the integrated
    circuit for different types of computing. You define the configuration via a
    hardware definition language (:term:`HDL`). The word "field" in
    *field-programmable gate array* means the circuit is programmable
    *in the field*, as opposed to during chip manufacture.

  Frame
    A frame contains a row of bits used to configure the FPGA, and is the basic unit
    that a bitstream is split into. The number of bits per frame, and frames per device
    varies for different ECP5 chips.


  Fuzzer
    Scripts and a makefile to generate one or more :term:`specimens <specimen>`
    and then convert the data from those specimens into a :term:`database`.

  General Routing
    Routing that connects together nearby :term:`tiles <tile>` horizontally or vertically, spanning up
    to about 15 tiles at most. Called "shortwires" in Lattice Diamond, but this also refers
    to internal routing.

  Global Routing
    Routing that connects to all :term:`tiles <tile>` in a quadrant for logic, and all tiles
    on an edge for IO. Normally used for routing clocks, or occasionally other high fanout
    signals. Called "longwires" in Lattice Diamond.

  Half
    Portion of a device defined by a virtual line dividing the two sets of global
    clock buffers present in a device. The two halves are referred to as
    the top and bottom halves.

  HDL
    You use a hardware definition language (HDL) to describe the behavior of an
    electronic circuit. Popular HDLs include Verilog (inspired by C) and VHDL
    (inspired by Ada).

  Internal Routing
    Routing that does not leave a single :term:`tile`.

  LUT
    A lookup table (LUT) is a logic element on the :term:`FPGA`. LUTs function
    as a ROM, apply combinatorial logic, and generate the output value for a
    given set of inputs.

  MUX
    A multiplexer (MUX) is a multi-input, single-output switch controled by
    logic.

  Node
    A routing node on the device. A node is a collection of :term:`wires <wire>`
    spanning one or more :term:`tiles <tile>`.
    Nodes that are local to a tile map 1:1 to a wire. A node that spans multiple
    tiles maps to multiple wires, one in each tile it spans.

  PnR
  Place and route
    Place and route (PnR) is the process of taking logic and placing it into
    hardware logic elements on the :term:`FPGA`, and then routing the signals
    between the placed elements. 

  Quadrant
    The ECP5 FPGAs are arranged into four quadrants for the purpose of global signal
    distribution, upper left (UL), upper right (UR), lower left (LL) and lower right (LR).

  Routing fabric
    The :term:`wires <wire>` and programmable interconnects (:term:`arcs <arc>`)
    connecting the logic blocks in an :term:`FPGA`.

  Site
    Locations inside a tile that can contain an instance of a primitive.

  Specimen
    A :term:`bitstream` of a (usually auto-generated) design with additional
    files containing information about the placed and routed design.
    These additional files are usually generated using programs included with Diamond
    to create debugging outputs.

  Tile
    Fundamental unit of physical structure containing a single type of
    resource or function. The whole chip is a grid of tiles, however, 
    multiple tiles may exist at one grid location.

  Wire
    Physical wire within a :term:`tile`.

