General interconnect
The SiliconBlue general interconnect structure involves the following tile types:
PLB
andINT_BRAM
: the "center" tiles of the interconnect, connecting to four neighbouring tilesIOI_W
,IOI_E
,IOI_S
,IOI_N
: the "edge" tiles of the interconnect, connecting to three neighbouring tiles
GLOBAL
wires
There are 8 global wires:
GLOBAL.[0-7]
: global wires
They are driven by the global interconnect. They can directly drive IMUX.CLK
, IMUX.IO.ICLK
, IMUX.IO.OCLK
, IMUX.CE
, IMUX.RST
multiplexers. In addition to that, every non-IO
tile has 4 special intermediate wires that can be driven by the GLOBAL.*
wires and can be used to route them further to the LOCAL.*
lines:
GOUT.[0-3]
: intermediate wires for routingGLOBAL.*
toLOCAL.*
; can only be driven byGLOBAL.*
OUT
wires
Every tile (including the corner tiles, otherwise devoid of interconnect) has 8 output wires, which are driven by the various bels within the FPGA:
-
OUT.LC[0-7]
: bel output wires; note that, depending on tile type, some of them may actually alias otherOUT
wires, effectively making for fewer than 8 distinct outputs per tile:PLB
: all 8 wires are distinct;OUT.LC{i}
corresponds directly to the output of LCi
INT_BRAM
: all 8 wires are distinctIOI_*
: there are 4 distinct wires;OUT.LC[4-7]
are aliased toOUT.LC[0-3]
:OUT.LC[04]
isIO0.DIN0
OUT.LC[15]
isIO0.DIN1
OUT.LC[26]
isIO1.DIN0
OUT.LC[37]
isIO1.DIN1
- corner tiles: there's only one distinct wire (all 8 wires are aliased to each other)
The OUT
wires are also visible in the 8 directly neighbouring tiles:
OUT.LC[0-7].W
: the same asOUT.LC[0-7]
of tile(x + 1, y)
OUT.LC[0-7].E
: the same asOUT.LC[0-7]
of tile(x - 1, y)
OUT.LC[0-7].S
: the same asOUT.LC[0-7]
of tile(x, y + 1)
OUT.LC[0-7].N
: the same asOUT.LC[0-7]
of tile(x, y - 1)
OUT.LC[0-7].WS
: the same asOUT.LC[0-7]
of tile(x + 1, y + 1)
OUT.LC[0-7].WN
: the same asOUT.LC[0-7]
of tile(x + 1, y - 1)
OUT.LC[0-7].ES
: the same asOUT.LC[0-7]
of tile(x - 1, y + 1)
OUT.LC[0-7].EN
: the same asOUT.LC[0-7]
of tile(x - 1, y - 1)
QUAD
and LONG
wires
The long-distance backbone of the interconnect consists of the QUAD
(span-4) and LONG
(span-12) wires:
-
QUAD.H[0-11].[0-4]
: horizontal length-4 wiresQUAD.Ha.b
in tile(x, y)
is the same asQUAD.Ha.(b+1)
in tile(x + 1, y)
-
QUAD.V[0-11].[0-4]
,QUAD.V[0-11].[1-4].W
: vertical length-4 wiresQUAD.Va.b
in tile(x, y)
is the same asQUAD.Va.(b+1)
in tile(x, y + 1)
QUAD.Va.b.W
in tile(x, y)
is the same asQUAD.Va.b
in tile(x + 1, y)
-
LONG.H[01].[0-12]
: horizontal length-12 wiresLONG.Ha.b
in tile(x, y)
is the same asLONG.Ha.(b+1)
in tile(x + 1, y)
-
LONG.V[01].[0-12]
: vertical length-12 wiresLONG.Va.b
in tile(x, y)
is the same asLONG.Va.(b+1)
in tile(x, y + 1)
The interconnect in IO
tiles is special:
- in the
IOI_W
andIOI_E
tiles:- there are no vertical
LONG
wires - there are only 4 sets of vertical
QUAD
wires (QUAD.V[0-3].*
)
- there are no vertical
- in the
IOI_S
andIOI_N
tiles:- there are no horizontal
LONG
wires - there are only 4 sets of horizontal
QUAD
wires (QUAD.H[0-3].*
)
- there are no horizontal
Further, the corner tiles are special: the QUAD.H*.*
wires of the horizontally adjacent IOI_[WE]
tile are connected directly to the QUAD.V*.*
wires of the vertically adjacent IOI_[SN]
or PLB
tile.
The LONG
wires can be driven:
- at many points along the wire: from
OUT
wires - at endpoints within "center" tiles: from endpoints of other
LONG
wires
The QUAD
wires can be driven:
- at many points along the wire: from
OUT
wires - at endpoints within "center" tiles: from endpoints of other
QUAD
wires - at
.1
(for horizontal wires) or.3
(for vertical wires): from various segments ofLONG
wires of the same direction - at
IO
tiles: from otherQUAD
wires
LOCAL
wires
Every tile has 32 (PLB
, INT_BRAM
) or 16 (IOI_*
) local wires:
-
LOCAL.[0-3].[0-7]
: local wiresIOI_*
tiles only haveLOCAL.[0-1].[0-7]
The LOCAL
wires are an intermediate step between IMUX.*
wires and other interconnect — every signal routed to IMUX.*
must first pass through a LOCAL
wire, except for some multiplexers that can also be directly driven by GLOBAL
wires. They can be driven by:
QUAD
wiresLONG
wiresOUT
wires (including ones of the 8 immediately neighbouring tiles)GOUT
wires (not inIO
tiles)
IMUX
wires
IMUX
wires directly drive bel inputs. PLB
and INT_BRAM
tiles contain the following wires:
IMUX.LC[0-7].I[0-3]
: "normal" inputs; inPLB
tiles, they correspond to LCs in the obvious wayIMUX.CLK
: a clock input; freely invertible, can be driven directly by allGLOBAL
wiresIMUX.CE
: a clock enable input; gates theIMUX.CLK
input, can be driven directly by someGLOBAL
wiresIMUX.RST
: a reset input; can be driven directly by someGLOBAL
wires
IOI_*
tiles contain the following wires:
IMUX.IO[0-1].DOUT[0-1]
: "normal" inputs, I/O dataIMUX.IO[0-1].OE
: "normal" inputs, I/O output enableIMUX.IO.EXTRA
: "normal" input, used for various irregularly placed bels (such as PLLs)IMUX.IO.ICLK
andIMUX.IO.OCLK
: clock inputs; freely invertible, can be driven directly by allGLOBAL
wiresIMUX.CE
: a clock enable input; gates theIMUX.IO.ICLK
andIMUX.IO.OCLK
inputs, can be driven directly by someGLOBAL
wires
The IMUX
wires can be driven by LOCAL
wires. Some of them can also be driven by GLOBAL
wires.
If an IMUX
wire is not driven at all (the MUX
field in the bitstream is set to NONE
), it takes on a default value. The default value is 1
for IMUX.CE
, 0
for all other IMUX
wires.