Device Architecture Notes
=========================

The following notes describe in more details the approach required to add new architectures, or enhance an already
existing architecture with additional tiles and primitives.

Adding new tiles and primitives
-------------------------------

In Symbiflow Architecture Definitions, this process requires modifications of two parts in the flow which can be
summarized in the following points:

- **VTR** Physical Block type definition
- **Yosys** techmap definition

Physical Block Type Definition
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This is a VTR-related file which includes a detailed description of the internal logic of the block, as well as its I/O
interface.

More details can be gathered in the :ref:`official VTR documentation <vtr:arch_reference>`.

The primitives are located under `<vendor>/<fpga-family>/common/primitives/`.
In general, there should be one subdirectory for each different primitive, or in alternative for each intermediate site
that contains a primitive.

It is common that a primitive is included in a hierarchy of Physical Block Types (PB types) before reaching the
Top-level one.

The PB types must conform to the physical representation of the primitive/site that needs to be modeled.
To understand the interconnections and composition of each primitive/site, usually it is necessary to read the
vendor-provided documentation of the particular block that needs to be modeled.

CMake is used to generate all the targets to include the newly added primitive to the architecture

The Symbiflow Architecture Definitions project provides a well documented CMake library of functions to aid in this
process.
The common functions are located under `common/cmake/` while the vendor-specific ones are located under
`<vendor>/<fpga-family>/common/cmake`.

The new tiles and primitives must be enabled by creating new `CMakeLists.txt` files within the corresponding directories
in the following locations:

- **Primitives**: `<vendor>/<fpga-family>/common/primitives/<primitive>`
- **Tile**: `<vendor>/<fpga-family>/archs/<arch>/tiles/<tile>`

Moreover, each new directory needs to be added to the parent `CMakeLists.txt`, so that CMake can find and process the
new additions.

The enable a new tile/pb_type in a target device, the device CMake file needs to be changed accordingly, as follows:

.. code-block:: cmake

   add_xc_device_define_type(
     ARCH artix7
     DEVICE xc7a50t
     TILE_TYPES
       CLBLL_L
       CLBLL_R
       CLBLM_L
       CLBLM_R
       NEW_TILE
     PB_TYPES
       SLICEL
       SLICEM
       NEW_PB_TYPE
   )

The device `CMakeLists.txt` file is located under `<vendor>/<fpga-family>/archs/<arch>/devices/<device>/`.

Yosys Techmap and Simulation models
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Yosys is the synthesis tool used in Symbiflow, but, to allow VPR to elaborate Yosys output netlist, we need to perform a
technology mapping pass to transform the Yosys-generated primitives to the VPR-compatible ones.

To do so, there are two relevant files to modify, both located under `<vendor>/<fpga-family>/techmap`:

- `cellmap.v`: Defines how specific cells need to be re-mapped.
- `cellsim.v`: Defines the VPR-specific cells that will be present in the `.eblif` output.
