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