Structure
=========

Directories
-----------

* ``XXX/device/`` - Full architecture definitions of a given device for `Verilog To Routing <https://verilogtorouting.org/>`__

  * ``XXX/device/YYYY-virt`` - Verilog to Routing architecture definitions generally are not able to able to generate
    the **exact** model of many FPGA routing interconnects, but this is a pretty close.

* ``XXX/primitives/`` - The primitives that make up the architecture.
  These are generally used inside the tiles.
* ``XXX/tiles/`` - The tiles found in the architecture.
* ``XXX/tests/`` - Tests for making sure the architecture specific features works with VPR.
* :ghsrc:`vpr` - Common defines used by multiple architectures.

Files
-----

* `pb_type.xml` - The Verilog to Routing `Complex Block <https://docs.verilogtorouting.org/en/latest/arch/reference/#complex-blocks>`__
  defintinition.

  * Inside ``primitives`` directory they should be intermediate or primitive ``<pb_type>`` and thus allow setting the
    ``num_pb`` attribute.

  * Inside ``tiles`` directory they should be top level ``<pb_type>`` and thus have,

    * ``capacity`` (if a pin type),
    * ``width`` & ``height`` (and maybe ``area``)

* ``model.xml`` - The Verilog to Routing `Recognized BLIF Models <https://docs.verilogtorouting.org/en/latest/arch/reference/#recognized-blif-models-models>`__
  defintinition.

* ``sim.v`` - A Verilog definition of the object.
  It should:

  - [ ] Match the definition in ``model.xml`` (should be one ``module`` in ``sim.v`` for every ``model`` in ``model.xml``)

  - [ ] Include a ``ifndef BLACKBOX`` section which actually defines how the Verilog works.

* ``macro.v`` - A Verilog definition of the object which a user might instantiate in their own code when specifying a
  primitive.
  This should match the definition provided by a manufacturer.
  Examples would be the definitions in:

  - `Lattice iCE Technology Library <http://www.latticesemi.com/~/media/LatticeSemi/Documents/TechnicalBriefs/SBTICETechnologyLibrary201504.pdf>`__
  - `UG953: Vivado Design Suite 7 Series FPGA and Zynq-7000 All Programmable SoC Libraries Guide <https://www.xilinx.com/support/documentation/sw_manuals/xilinx2017_3/ug953-vivado-7series-libraries.pdf>`__

Names
-----

* ``BLK_MB-block_1_name-block_2_name`` - ``BLOCK`` which is a "**m**\ ega **b**\ lock".
  A "mega block" is a top level block which is made up of other blocks.

* ``BLK_XX-name``       - ``BLOCK`` which is the hierarchy.
  Maps to ``BLK_SI`` -> ``SITE`` and ``BLK_TI`` -> ``TILE`` in Xilinx terminology.

* ``BLK_IG-name``       - ``BLOCK`` which is ignored.
  They don't appear in the output hierarchy and are normally used when something is needed in the description which
  doesn't match actual architecture.

* ``BEL_RX-mux_name``   - ``BEL`` which is a **r**\ outing mu\ **x**.
  Routing muxes are statically configured at PnR time.

* ``BEL_MX-mux_name``   - ``BEL`` which is a **m**\ u\ **x** .

* ``BEL_LT-lut_name``   - ``BEL`` which is a **l**\ ook up **t**\ able.

* ``BEL_MM-mem_name``   - ``BEL`` which is a **m**\ e**m**\ ory.

* ``BEL_FF-ff_name``    - ``BEL`` which is a **f**\ lip **f**\ lop (``FF``).

* ``BEL_LL-latch_name`` - ``BEL`` which is a **l**\ atch (``LL``).

* ``BEL_BB-name``       - ``BEL`` which is a **b**\ lack **b**\ ox (``BB``).

* ``PAD_IN-name``       - A signal input location.

* ``PAD_OT-name``       - A signal output location.

Notes
-----

* Unless there is a good reason otherwise, all muxes should be generated via `mux_gen.py <utils/mux_gen.py>`__.

* DRY (Don't repeat yourself) - Uses :wikipedia:`XML XIncludes <XInclude>` to reuse stuff!
