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

.. glossary::

  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.

  basic element
  BEL
  basic logic element
  BLE
    Basic elements (BELs) or basic logic element (BLEs)
    are the basic logic units in an :term:`FPGA`, including
    carry or fast adders (:term:`CFAs <cfa>`), flip flops (:term:`FFs <ff>`),
    lookup tables (:term:`LUTs <lut>`), multiplexers (:term:`MUXes <mux>`), and
    other element types. Note: Programmable interconnects (:term:`PIPs <pip>`)
    are not counted as BELs.

    BELs come in two forms:

    * Basic BEL - A logic unit which does things.
    * Routing BEL - A unit which is statically configured at routing time.


  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.

  Block RAM
    Block RAM is inbuilt, configurable memory on an :term:`FPGA`, able to store
    more data than the :term:`flip flops <ff>`. The block RAM can function as
    dual or single-port memory. Xilinx 7 series devices offer a number of 36 Kb
    block RAMs, each with two independently controlled 18 Kb RAMs. The number of
    block RAMs available depends on the specific device.

  CFA
    A carry or fast adder (CFA) is a logic element on the :term:`FPGA` that
    performs fast arithmetic operations.

  Clock
    A clock is a square-wave timing signal (50% on, 50% off) generated by an
    external oscillator and passed into the :term:`FPGA`. The clock frequency
    drives the sequential logic elements in the FPGA, most importantly
    the :term:`flip flops <ff>`. For example, the FPGA may use a
    50 megahertz clock. An FGPA can use one or more clocks and can thus have
    one or more :term:`clock domains <clock domain>`.

  Clock backbone
  Clock spine
    In Xilinx 7 series devices, the clock backbone or clock spine divides the
    :term:`clock regions <clock region>` on the device into two sides, the left
    and the right side.

  Clock domain
    Portion of the device controlled by one :term:`clock`. A clock domain is
    part of a :term:`horizontal clock row` to one side of the global
    :term:`clock spine`. The term also often refers to the
    :term:`tiles <tile>` that are associated with these clocks.

  Clock region
    Portion of a device including up to 12 :term:`clock domains <clock domain>`.
    A clock region is situated to the left or right of the global clock spine,
    and is 50 :term:`CLBs <clb>` tall on Xilinx 7 series devices. The clock
    region includes all synchronous elements in the 50 CLBs and one I/O bank,
    with a :term:`horizontal clock row` at its center.

  Column
    A term used in :term:`bitstream` configuration to denote
    a collection of :term:`tiles <tile>`, physically organized as
    a vertical line, and configured by the same set of configuration frames.
    Logic columns span 50 tiles vertically and 2 tiles horizontally
    (pairs of logic tiles and interconnect tiles).

  Configurable logic block
  CLB
    A configurable logic block (CLB) is the configurable logic unit of an
    :term:`FPGA`. Also called a **logic cell**. A CLB is a combination of basic
    logic elements (:term:`BELs <bel>`).

  Database
    Text files containing meaningful labels for bit positions within
    :term:`segments <segment>`.

  Fabric sub region
  FSR
    Another name for :term:`clock region`.

  Flip flop
  FF
    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
    The fundamental unit of :term:`bitstream` configuration data consisting of
    101 :term:`words <word>`.
    Each frame has a 32-bit frame address and 101 payload words, 32 bits each.
    The 50th payload word is an EEC.
    The 7 LSB bits of the frame address are the frame index within the
    configuration :term:`column` (called *minor frame address* in the Xilinx
    documentation). The rest of the frame address identifies the configuration
    column (called *base frame address* in Project X-Ray nomenclature).

    The bits in an individual frame are spread out over the entire column.
    For example, in a logic column with 50 tiles, the first tile is configured
    with the first two words in each frame, the next tile with the next two
    words, and so on.

  Frame base address
    The first configuration frame address for a :term:`column`. A frame base
    address has always the 7 LSB bits cleared.

  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`.

  Half
    Portion of a device defined by a virtual line dividing the two sets of
    global :term:`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).

  Horizontal clock row
  HROW
    Portion of a device including 12 horizontal :term:`clocks <clock>` and the
    50 interconnect and function tiles associated with them. A :term:`half`
    contains one or more horizontal clock rows and each half may have a
    different number of rows.

  I/O block
    One of the configurable input/output blocks that connect the :term:`FPGA`
    to external devices.

  Interconnect tile
  INT
    An interconnect tile (`INT_L`, `INT_R`) is used to connect other tiles to
    the fabric. It is also frequently called a switch box.

  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.

  PIP
  Programmable interconnect point
    A programmable interconnect point (PIP) is a connection point between two
    wires in a tile that may be enabled or disabled by the configuration.

  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.

  Region of interest
  ROI
    Region of interest (ROI) is used in *Project X-Ray* to denote a
    rectangular region on the :term:`FPGA` that is the focus of our study.
    The current region of interest is `SLICE_X12Y100:SLICE_X27Y149`
    on a `xc7a50tfgg484-1` chip.

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

  Segment
    All configuration bits for a horizontal slice of a :term:`column`.
    This corresponds to two ranges: a range of :term:`frames <frame>`
    and a range of :term:`words <word>` within frames. A segment of a logic
    column is 36 frames wide and 2 words high.

  Site
    Portion of a tile where :term:`BELs <bel>` can be placed. The
    :term:`slices <slice>` in a :term:`CLB` tile are sites.

  Slice
    Portion of a :term:`tile` that contains :term:`BELs <bel>`.
    A `CLBLL_L/CLBLL_R` tile contains two `SLICEL` slices.
    A `CLBLM_L/CLBLM_R` tile contains one `SLICEL` slice and one `SLICEM` slice.
    `SLICEL` and `SLICEM` are the most common types of slice, containing the
    :term:`LUTs <lut>` and :term:`flip flops <ff>` that are the basic logic
    units of the FPGA.

  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 Vivado TCL scripts
    querying the Vivado design database.

  Tile
    Fundamental unit of physical structure containing a single type of
    resource or function. A container for :term:`sites <site>` and
    :term:`slices <slice>`. The FPGA chip is a grid of tiles.

    The most important tile types are left and right interconnect tiles
    (`INT_L` and `INT_R`) and left and right :term:`CLB` logic/memory tiles
    (`CLBLL_L`, `CLBLL_R`, `CLBLM_L`, `CLBLM_R`).

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

  Word
    32 bits stored in big-endian order. Fundamental unit of :term:`bitstream`
    format.
