| Tiles | |
| ================= | |
| The ECP5 FPGA is structured as a grid of tiles. This grid can be visualised | |
| by looking at the HTML output of ``tile_html.py``. | |
| Tiles have a name, for example *MIB_R13C6* and a type, for example **MIB_DSP2**. | |
| The name also encodes a position, in this case row 13, column 6. Multiple tiles may be | |
| located in the same grid square. | |
| Tiles also have an offset in the bitstream in terms of frames and bits within frames, and | |
| a bitstream size in terms of frames and bits within frames. | |
| Logic Tiles | |
| ----------- | |
| All logic tiles are of type **PLC2**. | |
| Logic Tiles contain 4 slices and routing fabric. The routing fabric in a logic tile | |
| can connect slices to general and global routing; and connect together general routing | |
| wires. | |
| Each slice contains 2 LUTs, 2 flip-flops and fast carry logic. All slices can also be configured | |
| to function as distributed RAM. | |
| Common Interconnect Blocks (CIBs) | |
| ---------------------------------- | |
| Common Interconnect Blocks (CIBs) are used to connect special functions - everything other than slices - to the routing fabric. | |
| They are effectively a logic tile with the slices removed, and the signals that would connect to the slice | |
| are connected to inputs and outputs from those special functions. Special functions in this context includes | |
| IO, EBR, DSPs, PLLs, etc. Note that the names of these signals do not reflect the IO of the special function, but are always | |
| named as if they were connected to a slice. Part of Project Trellis will thus be determining this mapping. | |
| There are several types of CIB depending on what they connect to and their location on the chip. For example: | |
| - **CIB** tiles connect to top and bottom IO, and **CIB_LR** connect to left and right IO. | |
| - **CIB_EBR** tiles connect to EBR. | |
| - **CIB_DSP** tiles connect to the hard DSPs. | |
| - **CIB_PLLx** tiles connect to the PLLs. | |
| - **CIB_DCUx** tiles connect to the SERDES duals (DCUs). | |
| Most CIBs contain a **CIBTEST** component, which has an unknown function in Lattice testing but is not used for user designs. | |
| IO Tiles | |
| --------- | |
| There are several different types of IO tiles depending on the position in the device. In all cases, each | |
| IO pin is represented by two sites: an IO buffer (``PIO``) and IO registers/gearboxes (``IOLOGIC``). | |
| Depending on the location in the device, IO pins are arranged in quads (A-D) or pairs (A-B). | |
| - IO at the top of the device uses a total of four tiles for each pair of IO. **PIOT0** and **PIOT1** contain ``PIOA`` and ``PIOB`` | |
| split between them, and **PICT0** and **PICT1** contain ``IOLOGICA`` and ``IOLOGICB``. | |
| - IO at the left and right of the device use a total of three tiles for each quad of IO. Note that in this | |
| context *x* is **L** for left IO and **R** for right IO. **PICx1** contains all four PIO, **PICx0** contains ``IOLOGICA`` and ``IOLOGICB``, | |
| and **PICx2** usually contains ``IOLOGICC`` and ``IOLOGICD``. In some cases, ``IOLOGICC`` and ``IOLOGICD`` are placed inside a **MIB_CIB_LR** tile | |
| instead. | |
| - IO at the bottom of the device uses a total of two tiles for each pair of IO. **PICB0** and **PICB1** contain both PIO and IOLOGIC split | |
| between them. | |
| Additionally **BANKREFx** tiles contain per-bank IO configuration for reference voltages and VccIO. | |
| Global Clock Tiles | |
| ------------------- | |
| Several different tiles have functions in global clock routing. See :doc:`Global Routing <global_routing>` for more information on exact | |
| connections and blocks involved. | |
| - **TAP_DRIVE** and **TAP_DRIVE_CIB** tiles, arranged in several columns and present in all rows, selectively connect | |
| vertical global clocks coming in from the spine for the relevant quadrant to horizontal clock routing | |
| for the associated row section. | |
| - **CMUX_xx** tiles form the central global clock muxes for each quadrant, selecting clocks from the **xMID** tiles, feeding the spine tiles. | |
| In some cases these are split and/or combined with another function (such as DSP or EBR). These also contain the two clock selectors (DCSs). | |
| - **xMID_x** tiles select various input clocks and feed them to the central clock mux, providing a clock gate (DCC) | |
| for each clock. | |
| - **ECLK_L** and **ECLK_R** select the IO edge clocks. | |
| - **x_SPINE_xx** tiles selectively connect the outputs from the central clock muxes to the vertical wires feeding the **TAP_DRIVE** s. These are combined with another function, EBR or DSP | |
| and located in EBR/DSP rows. | |
| Embedded Block RAM (EBR) | |
| ------------------------ | |
| The EBR is distributed such that 9 columns contain 4 EBRs (each EBR is 18kbit). The tiles containing | |
| the EBR sites themselves, and the EBR configuration bits, are named **MIB_EBR0** to **MIB_EBR8**. The | |
| EBR is connected to the routing fabric using **CIB_EBR** tiles in the same row as the **MIB_EBRx** tiles. | |
| The meaning of *MIB* is unknown, it likely comes from Maco Interface Tile (Maco was a hybrid FPGA/ASIC technology | |
| previously used by Lattice). | |
| The EBR configuration is split thus: | |
| +-----+-----------------------------------------------+ | |
| | EBR | Tiles | | |
| +=====+===============================================+ | |
| | 0 | **MIB_EBR0**, **MIB_EBR1** | | |
| +-----+-----------------------------------------------+ | |
| | 1 | **MIB_EBR2**, **MIB_EBR3**, **MIB_EBR4** | | |
| +-----+-----------------------------------------------+ | |
| | 2 | **MIB_EBR4**, **MIB_EBR5**, **MIB_EBR6** | | |
| +-----+-----------------------------------------------+ | |
| | 3 | **MIB_EBR6**, **MIB_EBR7**, **MIB_EBR8** | | |
| +-----+-----------------------------------------------+ | |
| EBR initialisation is done using separate commands in the bitstream, not from within the EBR tiles themselves. | |
| DSP Tiles | |
| ---------- | |
| DSPs are distributed such that 9 columns contain 2 18x18 sysDSP slices. Two tiles per column (on the same row) | |
| contain the DSP sites themselves, and the DSP configuration bits, and are named **MIB_DSP0** to **MIB_DSP8** and | |
| **MIB2_DSP0** to **MIB2_DSP8**. The DSPs are connected to the routing fabric using **CIB_DSP** | |
| tiles in the same row as the **MIBx_DSPx** tiles. | |
| System and Config Tiles | |
| ------------------------ | |
| There are several tiles, usually only one of each per device, which contain miscellaneous system functions and global | |
| device settings. For example: | |
| - **EFBx_PICBx** tiles (which are combined with bottom IO tiles) contain config port related settings such as which ports are | |
| enabled after configuration, whether TransFR is enabled, and the speed of the internal oscillator. They also contain configuration | |
| related to the global set/reset signal. | |
| - **DTR** contains the Digital Temperature Readout function. | |
| - **POR** contains a single bit to disable power-on reset. | |
| - **OSC** contains the internal oscillator. | |
| - **PVT_COUNTx** are related to Process/Voltage/Temperature compensation and contain a PVTTEST component for Lattice testing. | |