blob: b6851825f7de9afa3c5f035508b0c372305b52ea [file] [log] [blame]
General Routing
===============
The ECP5's general routing is unidirectional and relatively straightforward. They are detailed below. The inputs and
outputs of the routing inside tiles are:
- The inputs to BELs are named **A0**-**A7**, **B0**-**B7**, **C0**-**C7**, **D0**-**D7** (LUT inputs),
**M0**-**M7** ("miscellaneous" inputs for muxes and other functions); **LSR0** and **LSR1** (local set/reset);
**CLK0** and **CLK1** (clock) and **CE0**-**CE3** (clock enable), for logic tiles.
- The outputs are named **F0** to **F7** (LUT outputs) and **Q0** to **Q7** (FF outputs).
- CIB tiles have an identical routing configuration to logic tiles, regardless of what they connect to - effectively,
the logic slices are replaced by the special function - however, all the netnames aboved are prefixed with **J**.
Fixed arcs connect the CIB signals to the signals inside the special function tile.
Four types of routing resource are available:
- 8 ***X0** wires inside each tile (**H00L0x00**, **H00R0x00**, **V00T0x00**, and **V00B0x00**) do not leave a tile,
but can be driven from a variety of internal and external signals; and all of the horizontal or vertical signals
are inputs to all of the BEL input muxes.
- 8 **X1** "neighbour" wires originate, and terminate, in each tile (**H01E0x01**, **H01W0x00**, **V01S0x00** and
**V01N0x01**). These connect together adjacent tiles in the specified direction, and can be driven by any of the
LUT or FF outputs as well as a few other signals.
- 32 **X2** span-2 wires (**H02E0x01**, **H02W0x01**, **V02S0x01** and **V02N0x01**) originate in each tile, each
connecting to the two next tiles in a given direction.
- 16 **X6** span-6 wires (**H06E0x03**, **H06W0x03**, **V06S0x03** and **V06N0x03**) originate in each tile
connecting to two tiles, with a gap of 2 inbetween each, in a given direction.
In all cases, wires can only be driven inside one tile. **X2** and **X6** inputs only drive muxes in tiles other than
the tile they originate in; whereas **X0** and **X1** also "bounce back" internally (this being the very purpose of
**X0** tiles).