| ========== | 
 | mask files | 
 | ========== | 
 |  | 
 | The *mask files* are generated for every FPGA :term:`tile <Tile>` type. | 
 | They store the information which bits in the bitstream can configure the given | 
 | :term:`tile <Tile>` type. | 
 |  | 
 | Naming convention | 
 | ----------------- | 
 |  | 
 | The naming scheme for the mask files is the following:: | 
 |  | 
 |    mask_<tile>.db | 
 |  | 
 | Note that auxiliary ``mask_<tile>.origin_info.db`` files | 
 | provide additional information about the :term:`fuzzer <Fuzzer>`, | 
 | which produced the :term:`database <Database>` file. This file is optional. | 
 |  | 
 | Every :term:`tile <Tile>` is configured at least by one of three configurational | 
 | buses mentioned in the :doc:`Configuration Section <../../architecture/configuration>`. | 
 | The default bus is called ``CLB_IO_CLK``. | 
 | If the :term:`tile <Tile>` can also be configured by another bus, it has an additional ``mask_<tile>.<bus_name>.db`` | 
 | related to that bus. | 
 |  | 
 | For example: | 
 |  | 
 |    - ``mask_dsp_r.db`` | 
 |    - ``mask_bram_l.db`` (configured with default ``CLB_IO_CLK`` bus) | 
 |    - ``mask_bram_l.block_ram.db`` (configured with ``BLOCK_RAM`` bus) | 
 |  | 
 | File format | 
 | ----------- | 
 |  | 
 | The file consists of records that describe the configuration bits for | 
 | the particular :term:`tile <Tile>` type. Each entry inside the file is of the form:: | 
 |  | 
 |    bit <frame_address_offset>_<bit_position> | 
 |  | 
 | This means that the :term:`tile <Tile>` can be configured by a bit located in the | 
 | :term:`frame <Frame>` at the address ``<base_frame_addr> + <frame_address_offset>``, | 
 | at position ``<tile_offset> + <bit_position>``. Information about ``<base_frame_address>`` | 
 | and ``<tile_offset>`` can be taken from part specific ``tilegrid.json`` file. | 
 |  | 
 | Example | 
 | ------- | 
 |  | 
 | Below there is a part of artix7 ``mask_clbll_l.db`` file describing a FPGA *CLBLL* | 
 | :term:`tile <Tile>`:: | 
 |  | 
 |    <...> | 
 |    bit 00_61 | 
 |    bit 00_62 | 
 |    bit 00_63 | 
 |    bit 01_00 | 
 |    bit 01_01 | 
 |    bit 01_02 | 
 |    <...> | 
 |  | 
 | The line ``bit 01_02`` means that the *CLBL_LL* :term:`tile <Tile>` can be | 
 | configured by the bit located in the :term:`frame <Frame>` at the address | 
 | ``<base_frame_address> + 0x01``, at position ``<tile_offset> + 0x2``. | 
 |  | 
 | The ``tilegrid.json`` is a file specific to a given chip package. | 
 | For *xc7a35tcpg236-1* we can find an exemplary *CLBLL_L* entry:: | 
 |  | 
 |     "CLBLL_L_X2Y0": { | 
 |         "bits": { | 
 |             "CLB_IO_CLK": { | 
 |                 "baseaddr": "0x00400100", | 
 |                 "frames": 36, | 
 |                 "offset": 0, | 
 |                 "words": 2 | 
 |             } | 
 |         }, | 
 |         "clock_region": "X0Y0", | 
 |         "grid_x": 10, | 
 |         "grid_y": 155, | 
 |         "pin_functions": {}, | 
 |         "sites": { | 
 |             "SLICE_X0Y0": "SLICEL", | 
 |             "SLICE_X1Y0": "SLICEL" | 
 |         }, | 
 |         "type": "CLBLL_L" | 
 |     }, | 
 |  | 
 | The ``<base_frame_addr>`` can be found as a argument of the *"baseaddr"* key | 
 | and for *CLBLL_L_X2Y0* :term:`tile <Tile>` it is equal to ``0x00400100``. The ``<tile_offset>`` | 
 | on the other hand is an argument of the *"offset"* key. Here it is equal to 0. | 
 |  | 
 | Finally, we are able to compute the bit location associated with the | 
 | ``bit 01_02`` entry. | 
 |  | 
 | The configuration bit for this record can be found in the following | 
 | :term:`frame <Frame>` address:: | 
 |  | 
 |    0x00400100 + 0x01 = 0x00400101 | 
 |  | 
 | Located at the bit position:: | 
 |  | 
 |    0x0 + 0x2 = 0x2 | 
 |  | 
 | More about the configuration process and the meaning of the :term:`frame <Frame>` | 
 | can be found in the :doc:`Configuration Section <../../architecture/configuration>`. |