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