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 `. The primitives are located under `//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 `//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**: `//common/primitives/` - **Tile**: `//archs//tiles/` 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 `//archs//devices//`. 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 `//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.