| 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). |