| Global Routing | |
| =============== | |
| The ECP5's global clock routing is split into a number of parts. A high level overview of its structure is contained | |
| in Lattice Technical Note TN1263. | |
| From a point of view of clock distribution, the device is split into four quadrants: upper left (UL), upper right (UR), | |
| lower left (LL) and lower right (LR). Throughout this document, *qq* refers to any quadrant named in this way, | |
| *s* refers to a side of the device (B, T, L, or R). | |
| This document is a work in progress! Some information is still incomplete and subject to change. | |
| Mid Muxes | |
| ---------- | |
| The mid muxes are located in the middle of each edge of the device, and take clock inputs from a range of sources | |
| (clock input pins, PLL ouputs, CLKDIV outputs, etc) and feed them into the centre clock muxes. | |
| Depending on the location, mid muxes have between 12 and 16 outputs to the centre muxes. | |
| Between each mid mux multiplexer output and the centre mux is a Dynamic Clock Control component (DCC), | |
| which provides glitch free clock disable. | |
| Inputs to the mid muxes are named as follows: | |
| - **PCLKx_y** for the dedicated clock input pins | |
| - **qqC_PCLKGPLLx_y** for the PLL outputs | |
| - **s_CDIVX_x** for the clock divider outputs | |
| - **qqQ_PCLKCIB_x** and **qqM_PCLKCIBx** have unknown function, most likely a connection to fabric (TODO: check) | |
| - **PCSx_TXCLK_y** and **PCSx_RXCLK_y** are the SERDES transmit and receive clocks | |
| - **SERDES_REFCLK_x** are the SERDES reference clocks | |
| Outputs from the muxes themselves into the DCCs are named **sDCC00CLKI** through **sDCCnnCLKI**. | |
| The outputs from the DCCs into the centre muxes are named **HPFE0000** through **HPFE1300** for the left side; | |
| **HPFW0000** through **HPFW1300** for the right side; **VPFN0000** through **VPFN1500** for the bottom side and | |
| **VPFS0000** through **VPFS1100** for the top side. | |
| The left and right muxes are located in a single tile, **LMID_0** and **RMID_0** respectively. The top side is | |
| split between **TMID_0** and **TMID_1**, and the bottom side between **BMID_0** and **BMID_2V**. | |
| Centre Muxes | |
| ------------ | |
| The centre muxes select the 16 global clocks for each quadrant from the outputs of the mid muxes and from a few other | |
| sources. They also contain a total of two Dynamic Clock Select blocks, for glitch-free clock switching. | |
| There are four fabric entries to the centre muxes from each of the four quadrants. These connect through DCCs in the | |
| same way as the mid mux outputs (but in this case the DCC is considered as part of the centre mux rather than mid mux). | |
| The fabric entries come from nearby CIBs, but the exact net still need to be traced. | |
| Inputs to the mid muxes (and DCSs) are named as follows: | |
| - **HPFExx00**, **HPFWxx00**, **VPFNxx00** and **VPFSxx00** for the mid mux (via DCC) outputs | |
| - **qqCPCLKCIB0** for the fabric clock inputs (via DCC) | |
| - **DCSx** for the DCS outputs | |
| - **VCC_INT** for constant one | |
| Outputs from the centre muxes, going into the spine tiles, are named **qqPCLK0** through **qqPCLK15**. | |
| Centre muxes also contain *CLKTEST*, a component with unknown function used in Lattice's testing. | |
| The exact split of centre mux functionality between tiles varies depending on device, this is an example | |
| for the LFE5U-85F. | |
| +-------------+---------------+-----------------------------------------+-----------------+ | |
| | Tile | Tile Type | Functions | Notes | | |
| +=============+===============+=========================================+=================+ | |
| | MIB_R22C66 | EBR_CMUX_UL | DCS0 config, CLKTEST | Shared with EBR | | |
| +-------------+---------------+-----------------------------------------+-----------------+ | |
| | MIB_R22C67 | CMUX_UL_0 | UL clocks mux, DCS0CLK0 input mux, DCC2 | | | |
| +-------------+---------------+-----------------------------------------+-----------------+ | |
| | MIB_R22C68 | CMUX_UR_0 | UR clocks mux, DCS0CLK1 input mux, DCC3 | | | |
| +-------------+---------------+-----------------------------------------+-----------------+ | |
| | MIB_R22C69 | EBR_CMUX_UR | CLKTEST | Shared with EBR | | |
| +-------------+---------------+-----------------------------------------+-----------------+ | |
| | MIB_R70C66 | EBR_CMUX_LL | DCS1 config, CLKTEST | Shared with EBR | | |
| +-------------+---------------+-----------------------------------------+-----------------+ | |
| | MIB_R70C67 | CMUX_LL_0 | LL clocks mux, DCS1CLK0 input mux, DCC0 | | | |
| +-------------+---------------+-----------------------------------------+-----------------+ | |
| | MIB_R70C68 | CMUX_LR_0 | LR clocks mux, DCS1CLK1 input mux, DCC1 | | | |
| +-------------+---------------+-----------------------------------------+-----------------+ | |
| | MIB_R70C69 | EBR_CMUX_LR | CLKTEST | Shared with EBR | | |
| +-------------+---------------+-----------------------------------------+-----------------+ | |
| Spine Tiles | |
| ------------ | |
| The outputs from the centre muxes go horizontally into each quadrant and connect to a few spine tiles (there are three | |
| spine tiles per quadrant in the 85k part). Spine tiles are located adjacent to a column of TAP_DRIVEs (see next section) | |
| and are combined with another function (EBR or DSP). | |
| The purpose of a spine tile is to selectively connect the centre mux outputs to the vertical global wires feeding the | |
| adjacent column of TAP_DRIVEs through a buffer. There is one buffer per wire, with a 1:1 mapping - the only reason | |
| spine tiles are configurable is to disable unused buffers to save power, there is no other routing or selection | |
| capability in them. | |
| The inputs to spine tiles from the quadrant's centre mux are named **qqPCLK0** through **qqPCLK15**. | |
| The outputs are named **VPTX0000** through **VPTX15000**, which feed a column of tap drives. | |
| TAP_DRIVE Tiles | |
| --------------- | |
| TAP_DRIVE tiles are arranged in columns throughout the device. | |
| The purpose of TAP_DRIVE tiles is to selectively connect the vertical global wires coming out of the adjacent spine tile | |
| to horizontal wires serving tiles to the left and right of the TAP_DRIVE. A TAP_DRIVE will typically serve a row of | |
| about 20 tiles, 10 to the left and 10 to the right. | |
| Like spine tiles, TAP_DRIVE tiles have a 1:1 input-output mapping and only offer the ability to turn on/of buffers | |
| to save power. | |
| The outputs are named **HPBX0000** through **HPBX15000**, with a net location on the left or right for the left or | |
| right outputs (signified as **L_** or **R_** in the Project Trellis database. | |
| Non-Clock Global Usage | |
| ----------------------- | |
| Inside PLBs, global nets can not only be connected to the clock signal, but also to clock enable, set/reset and general | |
| local wires. This does not seem to be commonly used by Diamond, which prefers to use general routing and the GSR signal. | |
| Not all globals can be used for all functions, the allowed usage depending on net is shown below. | |
| +--------+-----+-----+-----+-------+ | |
| | Global | CLK | LSR | CEN | Local | | |
| +--------+-----+-----+-----+-------+ | |
| | 0 | Y | | | Y | | |
| +--------+-----+-----+-----+-------+ | |
| | 1 | Y | | | Y | | |
| +--------+-----+-----+-----+-------+ | |
| | 2 | Y | | | Y | | |
| +--------+-----+-----+-----+-------+ | |
| | 3 | Y | | | Y | | |
| +--------+-----+-----+-----+-------+ | |
| | 4 | Y | Y | | Y | | |
| +--------+-----+-----+-----+-------+ | |
| | 5 | Y | Y | | Y | | |
| +--------+-----+-----+-----+-------+ | |
| | 6 | Y | Y | | Y | | |
| +--------+-----+-----+-----+-------+ | |
| | 7 | Y | Y | | Y | | |
| +--------+-----+-----+-----+-------+ | |
| | 8 | Y | Y | | | | |
| +--------+-----+-----+-----+-------+ | |
| | 9 | Y | | Y | | | |
| +--------+-----+-----+-----+-------+ | |
| | 10 | Y | | Y | | | |
| +--------+-----+-----+-----+-------+ | |
| | 11 | Y | | Y | | | |
| +--------+-----+-----+-----+-------+ | |
| | 12 | Y | | Y | | | |
| +--------+-----+-----+-----+-------+ | |
| | 13 | Y | | Y | | | |
| +--------+-----+-----+-----+-------+ | |
| | 14 | Y | Y | Y | | | |
| +--------+-----+-----+-----+-------+ | |
| | 15 | Y | Y | Y | | | |
| +--------+-----+-----+-----+-------+ |