| ============= |
| segbits files |
| ============= |
| |
| The *segbits files* are generated for every FPGA :term:`tile <Tile>` type. |
| They store the information about the combinations of bits in the bitstream |
| that are responsible for enabling different features inside the :term:`tile <Tile>`. |
| The features can be related to enabling some part of the primitive, setting some |
| initial state of the block, configuring pin pull-up on output pins, etc. |
| |
| Besides the features provided in this file that can be enabled, |
| the FPGA chip also has the default configuration. Due to that sometimes there |
| is no need for affecting the default configuration. |
| |
| Naming convention |
| ----------------- |
| |
| The naming scheme for the segbits files is the following:: |
| |
| segbits_<tile>.db |
| |
| Note that auxiliary ``segbits_<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 additional ``segbits_<tile>.<bus_name>.db`` |
| related to that bus. |
| |
| |
| Example files: |
| |
| - ``segbits_dsp_r.db`` |
| - ``segbits_bram_l.db`` (configured with default ``CLB_IO_CLK`` bus) |
| - ``segbits_bram_l.block_ram.db`` (configured with ``BLOCK_RAM`` bus) |
| |
| File format |
| ----------- |
| |
| The file consists of lines containing the information about the feature |
| and the list of bits that should be enabled/disabled to provide the feature's |
| functionality:: |
| |
| <feature> <bit_list> |
| |
| where: |
| |
| - ``<feature>`` is of the form ``<feature_name>.<feature_addr>`` |
| - ``<bit_list>`` is the list of bits. Each bit is of the form |
| ``<frame_address_offset>_<bit_possition>``. If the bit has the ``!`` |
| mark in front of it, that means it should be set to **0** for feature configuration, |
| otherwise it should be set to **1**. |
| |
| The names of the features are arbitrary. However, the naming convention allows for quick identifaction of the functionality that is being configured. |
| The feature names are used during the generation of the :doc:`FASM <../../../../fasm/docs/specification>` file. |
| |
| |
| Feature naming conventions |
| -------------------------- |
| |
| PIPs |
| ^^^^ |
| |
| The ``<feature>`` names for interconnect :term:`PIPs <PIP>` are stored in the |
| ``segbits_int_l.db`` and ``segbits_int_r.db`` database files. The features that |
| enable interconnect :term:`PIPs <PIP>` have the following syntax:: |
| |
| <tile_type>.<destination_wire>.<source_wire>. |
| |
| For example, consider the following entry in ``segbits_int_l.db``:: |
| |
| INT_L.NL1BEG1.NN6END2 07_32 12_33 |
| |
| CLBs |
| ^^^^ |
| The ``<feature>`` names for CLB tiles use a dot-separated hierarchy. |
| |
| For example:: |
| |
| CLBLL_L.SLICEL_X0.ALUT.INIT[00] |
| |
| This entry documents the initialization bits of the *LSB LUT* for the *ALUT* in |
| the *SLICEL_X0* within a *CLBLL_L tile.* |
| |
| Example |
| ------- |
| |
| Below there is a part of the ``segbits_liob33_l.db`` file for the *artix7* |
| architecture. The file describes the *CLBLL* :term:`tile <Tile>`:: |
| |
| <...> |
| LIOB33.IOB_Y0.IBUFDISABLE.I 38_82 |
| LIOB33.IOB_Y0.IN_TERM.NONE !38_120 !38_122 !39_121 !39_123 |
| LIOB33.IOB_Y0.IN_TERM.UNTUNED_SPLIT_40 38_120 38_122 39_121 39_123 |
| LIOB33.IOB_Y0.IN_TERM.UNTUNED_SPLIT_50 38_120 38_122 !39_121 39_123 |
| LIOB33.IOB_Y0.IN_TERM.UNTUNED_SPLIT_60 38_120 !38_122 !39_121 39_123 |
| LIOB33.IOB_Y0.INTERMDISABLE.I 39_89 |
| LIOB33.IOB_Y0.LVTTL.DRIVE.I24 38_64 !38_112 !38_118 38_126 39_65 39_117 39_119 !39_125 !39_127 |
| LIOB33.IOB_Y0.PULLTYPE.KEEPER 38_92 38_94 !39_93 |
| LIOB33.IOB_Y0.PULLTYPE.NONE !38_92 38_94 !39_93 |
| LIOB33.IOB_Y0.PULLTYPE.PULLDOWN !38_92 !38_94 !39_93 |
| LIOB33.IOB_Y0.PULLTYPE.PULLUP !38_92 38_94 39_93 |
| <...> |
| |
| For example, the line:: |
| |
| LIOB33.IOB_Y0.PULLTYPE.PULLUP !38_92 38_94 39_93 |
| |
| means that the feature ``LIOB33.IOB_Y0.PULLTYPE.PULLUP`` will be set by clearing |
| bit ``!38_92`` and setting bits ``38_94`` and ``39_93``. |
| |
| Generally, the ``<feature>`` name is linked with its functionality. |
| For example, ``LIOB33.IOB_Y0.PULLTYPE.PULLUP`` means that in the LIOB33 |
| :term:`tile <Tile>`, |
| in IOB_Y0 site the *pull type* will be set to *PULLUP*. |
| This simply means that all pins belonging to this particular IOB |
| will be configured with pull-up. |