| ============= | |
| tilegrid file | |
| ============= | |
| The ``tilegrid.json`` is a list of all :term:`tiles <Tile>` in the device. | |
| This information is used at various stages of the flow i.e. for | |
| :term:`database <Database>` generation or creating a :term:`bitstream <Bitstream>`. | |
| The most important parts of the file are related to :term:`frame <Frame>` addressing | |
| within the :term:`bitstream <Bitstream>`, grid and :term:`clock region <Clock region>` | |
| location, list of underlying :term:`sites <Site>`, or the type of the | |
| :term:`tile <Tile>` itself. | |
| Before diving into this section, it is advised to familiarize yourself with the | |
| 7-Series :doc:`Bitstream Format <../../architecture/bitstream_format>` chapter and | |
| :doc:`Configuration <../../architecture/configuration>` chapter. | |
| File format | |
| ----------- | |
| The file consists of the entries describing every :term:`tile <Tile>` in | |
| the FPGA chip. The file is of the form:: | |
| { | |
| "<TILE_NAME>": { | |
| "bits": { | |
| "<CONFIGURATION_BUS>": { | |
| "baseaddr": "<BASE_ADDR>, | |
| "frames": 28, | |
| "offset": 97, | |
| "words": 2 | |
| }, | |
| <...> | |
| }, | |
| "clock_region": <CLOCK_REGION>, | |
| "grid_x": <GRID_X>, | |
| "grid_y": <GRID_Y>, | |
| "pin_functions": { | |
| "<PIN_NAME">: "<PIN_FUNCTION>", | |
| <...> | |
| }, | |
| "prohibited_sites": [ | |
| "<SITE_TYPE>", | |
| <...> | |
| ], | |
| "sites": { | |
| "<SITE_NAME>": <SITE_TYPE>, | |
| <...> | |
| }, | |
| "type": "INT_R" | |
| } | |
| The ``<TILE_NAME>`` indicates the name of the :term:`tile <Tile>` described | |
| in the entry. The naming convention matches Vivado. | |
| Each :term:`tile <Tile>` entry in the file has the following fields: | |
| - ``"bits"`` - contains the data related to :term:`tile <Tile>` configuration over | |
| the ``<CONFIGURATION_BUS>``. There are three types of the configuration | |
| buses in 7-Series FPGAs: ``CLB_IO_CLK``, ``BLOCK_RAM`` and ``CFG_CLB``. | |
| Every ``<CONFIGURATION_BUS>`` has the following fields: | |
| - ``baseaddr`` - Basic address of the configuration :term:`frame <Frame>`. | |
| Every configuration :term:`frame <Frame>` consist of 101 of 32bit | |
| :term:`words <Word>`. Note that a single :term:`frame <Frame>` usually configures | |
| a bunch of :term:`tiles <Tile>` connected to the single configuration bus. | |
| - ``"frames"`` - Number of :term:`frames <Frame>` that can configure the | |
| :term:`tile <Tile>`. | |
| - ``offset`` - How many words of offset is present in the :term:`frame <Frame>` | |
| before the first :term:`word <Word>` that configures the :term:`tile <Tile>`. | |
| - ``words`` - How many 32bit :term:`words <Word>` configure the :term:`tile <Tile>`. | |
| - ``clock_region`` - indicates to which :term:`clock region <Clock region>` the | |
| :term:`tile <Tile>` belongs to. | |
| - ``grid_x`` - :term:`tile <Tile>` column, increasing right | |
| - ``grid_y`` - :term:`tile <Tile>` row, increasing down | |
| - ``pin_functions`` - indicates the special functions of the :term:`tile <Tile>` pins. | |
| Usually it is related to IOB blocks and indicates i.e. differential output pins. | |
| - ``prohibited_sites`` - Indicates which :term:`site <Site>` types cannot be used | |
| in the :term:`tile <Tile>` | |
| - ``sites`` - dictionary which contains information about the :term:`sites <Site>` | |
| which can be found inside the :term:`tile <Tile>`. Every entry in | |
| the dictionary contains the following information: | |
| - ``"<SITE_NAME>"`` - The unique name of the :term:`site <Site>` inside | |
| the :term:`tile <Tile>`. | |
| - ``"<SITE_TYPE>`` - The type of the :term:`site <Site>` | |
| - ``type`` - The type of the :term:`tile <Tile>` | |
| Examples | |
| -------- | |
| .. code-block:: javascript | |
| "CLBLL_L_X16Y149": { | |
| "bits": { | |
| "CLB_IO_CLK": { | |
| "baseaddr": "0x00020800", | |
| "frames": 36, | |
| "offset": 99, | |
| "words": 2 | |
| } | |
| }, | |
| "clock_region": "X0Y2", | |
| "grid_x": 43, | |
| "grid_y": 1, | |
| "pin_functions": {}, | |
| "sites": { | |
| "SLICE_X24Y149": "SLICEL", | |
| "SLICE_X25Y149": "SLICEL" | |
| }, | |
| "type": "CLBLL_L" | |
| } | |
| Interpreted as: | |
| - :term:`Tile <Tile>` is named ``CLBLL_L_X16Y149`` | |
| - :term:`Frame <Frame>` base address is ``0x00020800`` | |
| - For each :term:`frame <Frame>`, skip the first 99 words loaded into FDRI | |
| - Since it's 2 FDRI words out of possible 101, it's the last 2 words | |
| - It spans across 36 different :term:`frame <Frame>` loads | |
| - Located in :term:`clock region <Clock region>` ``X0Y2`` | |
| - Located at row 1, column 43 | |
| - Contains two :term:`sites <Site>`, both of which are SLICEL | |
| - Is a ``CLBLL_L`` type :term:`tile <Tile>` | |
| More information about :term:`frames <Frame>` and the FPGA configuration can be found in the | |
| :doc:`Configuration <../../architecture/configuration>` chapter. | |
| Example of absolute :term:`frame <Frame>` address calculation can be found in the | |
| :doc:`mask file <../common/mask>` chapter. |