Configurable Logic Block
Note
This document describes Spartan 3 and Virtex 4 CLBs, since they are very similar.
The main logic resource in Spartan 3 and Virtex 4 devices is the CLB (Configurable Logic Block). It is based on the Virtex 2 CLB, but has significant changes, particularly to the LUT RAM structures.
A CLB corresponds one-to-one with the INT.CLB
interconnect tile (on Spartan 3), or to an INT
interconnect tile (on Virtex 4). Every CLB has four SLICE
s. The SLICE
s come in two kinds:
SLICEM
: the full-featured version ofSLICE
, with LUT RAM capabilitySLICEL
: logic-onlySLICE
, without LUT RAM capability; it is a strict subset ofSLICEM
The SLICE
s within a CLB are organized as follows (this is different from Virtex 2):
SLICE0
:SLICEM
, on the bottom left of the CLBSLICE1
:SLICEL
, to the right ofSLICE0
SLICE2
:SLICEM
, aboveSLICE0
SLICE3
:SLICEL
, to the right ofSLICE2
and aboveSLICE1
Every slice has:
two 4-input LUTs, named
F
andG
each of them has four inputs, named
F[1-4]
andG[1-4]
in
SLICEM
s, each LUT can be used as LUT RAM or shift register
two “bypass inputs” used for various purposes
BX
, associated with theF
LUTBY
, associated with theG
LUT
two wide multiplexers
F5
, associated with theF
LUT, multiplexingF
andG
FX
, associated with theG
LUT, multiplexingF5
andFX
outputs of this and otherSLICE
s
carry logic with a carry chain, going vertically upwards through the CLB column
two main combinational outputs
X
, associated with theF
LUTY
, associated with theG
LUT
(Virtex 4 only) two secondary combinational outputs
XMUX
, associated with theF
LUTYMUX
, associated with theG
LUT
two “bypass” combinational outputs, used for long shift registers and carry chains
XB
, associated with theF
LUTYB
, associated with theG
LUT
two registers and their outputs
FFX
andXQ
, associated with theF
LUTFFY
andYQ
, associated with theG
LUT
shared control inputs:
CLK
, the clock inputSR
, the set/reset input (also used as LUT RAM write enable inSLICEM
)CE
, the clock enable input
In summary, a single SLICE
has the following pins:
F[1-4]
andG[1-4]
: general interconnect inputs, used as LUT inputs and LUT RAM write addressBX
andBY
: general interconnect freely-invertible inputs, used for various purposesCLK
,SR
,CE
: general interconnect freely-invertible inputsX
,Y
,XQ
,YQ
,XB
,YB
: general interconnect outputs(Virtex 4 only)
XMUX
,YMUX
: general interconnect outputsCOUT
: dedicated output (carry output)CIN
: dedicated input (carry input), routed fromCOUT
of the slice belowSHIFTOUT
: dedicated output (shift register output)SHIFTIN
: dedicated input (shift register input), routed fromSHIFTOUT
of the previous slice in sequenceF5
andFX
: dedicated outputs (wide multiplexer outputs)FXINA
andFXINB
: dedicated inputs (wide multiplexer inputs), routed fromF5
andFX
of neighbouring slicesDIG
: dedicated output (SLICEM
only)ALTDIG
: dedicated input (SLICEM
only)
Additionally, some pins and circuitry are shared between SLICEM
s within the same CLB.
Note that on Virtex 4, the CLB tile is interconnect-limitted: only up to 16 out of the [XY]Q
, [XY]MUX
, and [XY]B
outputs within a single CLB can be used at a time due to the OMUX
bottleneck. The main [XY]
outputs don’t count towards that limit, since they can use other interconnect resources.
The CLK
, SR
, and CE
inputs are invertible on the interconnect level.
The BX
and BY
inputs are invertible within the CLB. The BXINV
attribute, if set, inverts the BX
signal from the interconnect. Likewise, BYINV
inverts the BY
signal.
LUTs
There are two 4-input LUTs in each slice, F
and G
. The F
LUT has inputs F[1-4]
, with F1
being the LSB and F4
being the MSB. The G
LUT likewise has inputs G[1-4]
.
The initial LUT contents are determined by the F
and G
attributes in the bitstream.
The LUT outputs go to:
(Spartan 3) the
FXMUX
andGYMUX
multiplexers(Virtex 4) the
F
output goes directly to theX
output; theG
output goes directly to theY
output(Virtex 4) the
FFX
andFFY
registers, viaDXMUX
andDYMUX
multiplexersthe carry logic
the
F5
wide multiplexer
LUT RAM
This section is only applicable to SLICEM
. SLICEL
s don’t have LUT RAM capability.
The F_RAM
and G_RAM
attributes, when set, turn F
and G
(respectively) into LUT RAM mode.
The signals used in RAM mode are:
CLK
is the write clockSR
is the write enableG[1-4]
are write address for both theF
andG
LUTsDIF
andDIG
are the data input for theF
andG
LUTs, respectivelyBX
: bit 4 of the write address, when enabledSLICEWE1
: bit 5 of the write address, when enabled
The DIF_MUX
determines the value of DIF
:
BX
: use theBX
pin (used for 16×X single-port RAMs)ALT
: use theDIG
value (used for dual-port RAMs, 32×X RAMs, or 64×1 RAMs)
The DIG_MUX
determines the value of DIG
:
BY
: use theBY
pin (used for 16×X and 32×X RAMs andSLICE2
in 64×X RAMs)ALT
: use theALTDIG
value (used forSLICE0
in 64×1 RAMs)
ALTDIG
is determined as follows:
SLICE0.ALTDIG
is connected toSLICE2.DIG
SLICE2.ALTDIG
is indeterminate (and should not be used)
Note that DI[FG]_MUX
attributes are also used in the shift register mode, but with different meaning.
On Spartan 3, when SLICEWE0USED
is set, the BX
signal is used as bit 4 of write address. The F
LUT is written when it is 1, the G
LUT is written when it is 0. Otherwise, the signal is ignored, and both LUTs are written at the same time.
On Virtex 4, the attribute is replaced with F_SLICEWE0USED
and G_SLICEWE0USED
, which are per-LUT.
The SLICEWE1
signal is routed as follows:
SLICE0.SLICEWE1 = SLICE0.BY
SLICE2.SLICEWE1 = !SLICE0.BY
On Spartan 3, if SLICE0.SLICEWE1USED
is set, both SLICEM
s within the CLB will use their SLICEWE1
signal as a write enable — the LUTs are only written when SLICEWE1
is 1. Otherwise, all SLICEWE1
signals are ignored.
Note that SLICE2
doesn’t have a SLICEWE1USED
bit — it is controlled by the same configuration bit as SLICE0
.
On Virtex 4, the attribute is replaced with F_SLICEWE1USED
and G_SLICEWE1USED
, which are per-LUT, and appear in both slices.
Single-port 16×X RAM
Single-port 16×X RAM can be implemented as follows:
pick a
SLICEM
pick a LUT within the slice for each 16×1 subblock
G
can always be usedF
can be used ifG
is also used with the same address
connect
CLK
to write clockconnect
SR
to write enablefor the 16×1 slice in
F
LUT:connect
F[1-4]
to the read/write addressconnect
BX
to write dataset
DIF_MUX
toBX
use
F
output as read data
for the 16×1 slice in
G
LUT:connect
G[1-4]
to the read/write addressconnect
BY
to write dataset
DIG_MUX
toBY
use
G
output as read data
Dual-port 16×X RAM
Dual-port 16×X RAM can be implemented as follows:
pick a
SLICEM
connect
CLK
to write clockconnect
SR
to write enableconnect
G[1-4]
to the write addressconnect
F[1-4]
to the read addressconnect
BY
to write dataset
DIF_MUX
toALT
set
DIG_MUX
toBY
use
F
andG
outputs as read data
Single-port 32×X RAM
Single-port 32×X RAM can be implemented as follows:
pick a
SLICEM
connect
CLK
to write clockconnect
SR
to write enableF
LUT corresponds to addresses0x0X
G
LUT corresponds to addresses0x1X
connect
F[1-4]
andG[1-4]
to low 4 bits of the read/write addressconnect
BX
to bit 4 of read/write addressset
SLICEWE0USED
connect
BY
to write dataset
DIF_MUX
toALT
set
DIG_MUX
toBY
use
F5
output as read data
Single-port 64×1 RAM
Single-port 64×1 RAM can be implemented as follows:
use both
SLICE0
andSLICE2
connect
CLK
to write clockconnect
SR
to write enableSLICE0.G
LUT corresponds to addresses0x0X
SLICE0.F
LUT corresponds to addresses0x1X
connect
F[1-4]
andG[1-4]
to low 4 bits of the read/write addressconnect both
BX
to bit 4 of read/write addressset
SLICEWE0USED
connect
SLICE0.BY
to bit 5 of read/write addressset
SLICE0.SLICEWE1USED
connect
SLICE2.BY
to write dataset
DIF_MUX
toALT
set
SLICE2.DIG_MUX
toBY
set
SLICE0.DIG_MUX
toALT
use
SLICE0.FX
output as read data
Shift registers
This section is only applicable to SLICEM
. SLICEL
s don’t have LUT RAM capability.
The F_SHIFT
and G_SHIFT
attributes, when set, turn F
and G
(respectively) into shift register mode.
The signals used in shift register mode are:
CLK
is the write clockSR
is the write enableDIF
andDIG
are the data input for theF
andG
LUTs, respectively
The LUTs in shift register mode have shift-out outputs, FMC15
and GMC15
, which are the next bit to be shifted out. They can be connected to another LUT’s data input to assemble larger shift registers.
The DIF_MUX
determines the value of DIF
:
BX
: use theBX
pinALT
: use theGMC15
value
The DIG_MUX
determines the value of DIG
:
BY
: use theBY
pinALT
: use theSHIFTIN
pin
SHIFTIN
is routed as follows:
SLICE0.SHIFTIN = SLICE2.SHIFTOUT = SLICE2.FMC15
SLICE2.SHIFTIN
is indeterminate.
Note that DI[FG]_MUX
attributes are also used in the LUT RAM mode, but with different meaning.
The external write data is written to bit 0 of the LUT. Bit 15 is shifted out.
Todo
do LUT RAM and shift register modes interfere within a SLICE
?
Wide multiplexers
Every SLICE
has two wide multiplexers: F5
and FX
, used to combine smaller LUTs into larger LUTs. Their function is hardwired:
F5 = BX ? F : G
FX = BY ? FXINA : FXINB
The F5
output goes to the FXMUX
multiplexer, and further wide multiplexers. The FX
output goes to the GYMUX
multiplexer, and further wide multiplexers.
The FXINA
and FXINB
inputs are routed as follows:
|
|
|
effective primitive |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Note
The routing is different from Virtex 2.
The FX
output isn’t connected across any interconnect holes — a MUXF8
cannot be made of two CLBs separated by a hole.
Carry logic
The carry logic implements the MUXCY
and XORCY
primitives described in Xilinx documentation. There are several bitstream attributes controlling carry logic operation.
The CYINIT
mux determines the start of the carry chain in the slice:
CIN
: connected fromCOUT
of theSLICE
belowBX
On Spartan 3, the CYSELF
mux determines the “propagate” (or select) input of the lower MUXCY
:
F
: propagate is connected toF
LUT output1
: propagate is connected to const-1 (ie. theMUXCY
is effectively skipped from the chain)
On Virtex 4, the CYSELF
mux doesn’t exist, and the propagate signal is hardwired to F
output.
The CY0F
mux determines the “generate” input of the lower MUXCY
:
0
(constant)1
(constant)(Spartan 3)
F1
F2
(Virtex 4)
F3
BX
(Spartan 3)
PROD
: equal toF1 & F2
, implementing theMULT_AND
primitive(Virtex 4)
PROD
: equal toF2 & F3
, implementing theMULT_AND
primitive
On Spartan 3, the CYSELG
mux determines the “propagate” (or select) input of the upper MUXCY
:
G
: propagate is connected toG
LUT output1
: propagate is connected to const-1 (ie. theMUXCY
is effectively skipped from the chain)
On Virtex 4, the CYSELG
mux doesn’t exist, and the propagate signal is hardwired to F
output.
The CY0G
mux determines the “generate” input of the upper MUXCY
:
0
(constant)1
(constant)(Spartan 3)
G1
G2
(Virtex 4)
G3
BY
(Spartan 3)
PROD
: equal toG1 & G2
, implementing theMULT_AND
primitive(Virtex 4)
PROD
: equal toG2 & G3
, implementing theMULT_AND
primitive
The hardwired logic implemented is:
(Spartan 3)
FCY = CYSELF ? CY0F : CIN
(lowerMUXCY
)(Spartan 3)
COUT = GCY = CYSELG ? CY0G : FCY
(upperMUXCY
)(Virtex 4)
FCY = F ? CY0F : CIN
(lowerMUXCY
)(Virtex 4)
COUT = GCY = G ? CY0G : FCY
(upperMUXCY
)FXOR = F ^ CIN
(lowerXORCY
)GXOR = G ^ FCY
(upperXORCY
)
The dedicated CIN
input is routed from:
SLICE0.CIN
: fromSLICE2.COUT
of CLB belowSLICE1.CIN
: fromSLICE3.COUT
of CLB belowSLICE2.CIN
: fromSLICE0.COUT
SLICE3.CIN
: fromSLICE1.COUT
The carry chains are not connected over interconnect holes. The SLICE[01].CIN
inputs in the row above bottom IOI or any kind of interconnect hole are indeterminate.
The sum-of-products feature of Virtex 2 no longer exists on Spartan 3 and Virtex 4.
Output multiplexers — Spartan 3
The Spartan 3 output multiplexers are unchanged from Virtex 2, except for SOPOUT
removal.
The FXMUX
multiplexer controls the X
output. It has three inputs:
F
(the LUT output)F5
FXOR
The GYMUX
multiplexer controls the Y
output. It has three inputs:
G
(the LUT output)FX
GXOR
The XBMUX
multiplexer controls the XB
output. It has two inputs:
FCY
FMC15
: shift register output ofF
The YBMUX
multiplexer controls the YB
output. It has two inputs:
GCY
(equal toCOUT
)GMC15
: shift register output ofG
The DXMUX
mulitplexer controls the FFX
data input. It has two inputs:
X
(theFXMUX
output)BX
The DYMUX
mulitplexer controls the FFY
data input. It has two inputs:
Y
(theGYMUX
output)BY
Output multiplexers — Virtex 4
The FXMUX
multiplexer controls the XMUX
output. It has two inputs:
F5
FXOR
The GYMUX
multiplexer controls the YMUX
output. It has two inputs:
FX
GXOR
The X
output is directly connected to F
output and doesn’t have a mux. Likewise, Y
output is directly connected to G
output.
The XBMUX
multiplexer controls the XB
output. It has two inputs:
FCY
FMC15
: shift register output ofF
The YBMUX
multiplexer controls the YB
output. It has two inputs:
GCY
(equal toCOUT
)GMC15
: shift register output ofG
The DXMUX
mulitplexer controls the FFX
data input. It has five inputs:
X
(theF
output)F5
FXOR
XB
BX
The DYMUX
mulitplexer controls the FFY
data input. It has five inputs:
Y
(theG
output)FX
GXOR
YB
BY
Registers
The registers are unchanged from Virtex 2.
A SLICE
contains two registers:
FFX
, with input determined byDXMUX
and output connected toXQ
FFY
, with input determined byDYMUX
and output connected toYQ
Both registers share the same control signals:
CLK
: posedge-triggered clock in FF mode or active-low gate in latch modeCE
: active-high clock or gate enableSR
: ifFF_SR_EN
, the set/reset signalBY
: ifFF_REV_EN
, the alternate set/reset signal
The following attributes determine register function:
FF_LATCH
: if set, the registers are latches andCLK
behaves as active-low gate; otherwise, the registers are flip-flops andCLK
is a posedge-triggered clockFF_SYNC
: if set, theSR
andBY
(if enabled) implement synchronous set/reset (with priority overCE
); otherwise, they implement asynchronous set/reset; should not be set together withFF_LATCH
FF[XY]_INIT
: determines the initial or captured value of given registerwhen the global
GSR
signal is pulsed (for example, as part of the configuration process), the register is set to the value of this bitwhen the global
GCAP
signal is pulsed (for example, by theCAPTURE
primitive), this bit captures the current state of the register
FF[XY]_SRVAL
: determines the set/reset value of given registerFF_SR_EN
: if set,SR
is used as the set/reset signal for both registers, setting them to theirFF[XY]_SRVAL
FF_REV_EN
: if set,BY
behaves as secondary set/reset signal for both registers, setting them to the opposite of theirFF[XY]_SRVAL
Bitstream
The data for a CLB is located in the same bitstream tile as the associated INT.CLB
tile.
SLICE0:F | [0, 0, 0] | [0, 0, 1] | [0, 0, 2] | [0, 0, 3] | [0, 0, 4] | [0, 0, 5] | [0, 0, 6] | [0, 0, 7] | [0, 0, 8] | [0, 0, 9] | [0, 0, 10] | [0, 0, 11] | [0, 0, 12] | [0, 0, 13] | [0, 0, 14] | [0, 0, 15] |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
SLICE0:G | [0, 0, 16] | [0, 0, 17] | [0, 0, 18] | [0, 0, 19] | [0, 0, 20] | [0, 0, 21] | [0, 0, 22] | [0, 0, 23] | [0, 0, 24] | [0, 0, 25] | [0, 0, 26] | [0, 0, 27] | [0, 0, 28] | [0, 0, 29] | [0, 0, 30] | [0, 0, 31] |
SLICE1:F | [0, 3, 0] | [0, 3, 1] | [0, 3, 2] | [0, 3, 3] | [0, 3, 4] | [0, 3, 5] | [0, 3, 6] | [0, 3, 7] | [0, 3, 8] | [0, 3, 9] | [0, 3, 10] | [0, 3, 11] | [0, 3, 12] | [0, 3, 13] | [0, 3, 14] | [0, 3, 15] |
SLICE1:G | [0, 3, 16] | [0, 3, 17] | [0, 3, 18] | [0, 3, 19] | [0, 3, 20] | [0, 3, 21] | [0, 3, 22] | [0, 3, 23] | [0, 3, 24] | [0, 3, 25] | [0, 3, 26] | [0, 3, 27] | [0, 3, 28] | [0, 3, 29] | [0, 3, 30] | [0, 3, 31] |
SLICE2:F | [0, 0, 32] | [0, 0, 33] | [0, 0, 34] | [0, 0, 35] | [0, 0, 36] | [0, 0, 37] | [0, 0, 38] | [0, 0, 39] | [0, 0, 40] | [0, 0, 41] | [0, 0, 42] | [0, 0, 43] | [0, 0, 44] | [0, 0, 45] | [0, 0, 46] | [0, 0, 47] |
SLICE2:G | [0, 0, 48] | [0, 0, 49] | [0, 0, 50] | [0, 0, 51] | [0, 0, 52] | [0, 0, 53] | [0, 0, 54] | [0, 0, 55] | [0, 0, 56] | [0, 0, 57] | [0, 0, 58] | [0, 0, 59] | [0, 0, 60] | [0, 0, 61] | [0, 0, 62] | [0, 0, 63] |
SLICE3:F | [0, 3, 32] | [0, 3, 33] | [0, 3, 34] | [0, 3, 35] | [0, 3, 36] | [0, 3, 37] | [0, 3, 38] | [0, 3, 39] | [0, 3, 40] | [0, 3, 41] | [0, 3, 42] | [0, 3, 43] | [0, 3, 44] | [0, 3, 45] | [0, 3, 46] | [0, 3, 47] |
SLICE3:G | [0, 3, 48] | [0, 3, 49] | [0, 3, 50] | [0, 3, 51] | [0, 3, 52] | [0, 3, 53] | [0, 3, 54] | [0, 3, 55] | [0, 3, 56] | [0, 3, 57] | [0, 3, 58] | [0, 3, 59] | [0, 3, 60] | [0, 3, 61] | [0, 3, 62] | [0, 3, 63] |
Inverted | ~[15] | ~[14] | ~[13] | ~[12] | ~[11] | ~[10] | ~[9] | ~[8] | ~[7] | ~[6] | ~[5] | ~[4] | ~[3] | ~[2] | ~[1] | ~[0] |
SLICE0:CYSELF | [0, 1, 0] |
---|---|
SLICE1:CYSELF | [0, 2, 0] |
SLICE2:CYSELF | [0, 1, 32] |
SLICE3:CYSELF | [0, 2, 32] |
1 | 0 |
F | 1 |
SLICE0:XBMUX | [0, 1, 1] |
---|---|
SLICE2:XBMUX | [0, 1, 33] |
FCY | 0 |
FMC15 | 1 |
SLICE0:FXMUX | [0, 1, 16] | [0, 1, 2] |
---|---|---|
SLICE1:FXMUX | [0, 2, 16] | [0, 2, 2] |
SLICE2:FXMUX | [0, 1, 48] | [0, 1, 34] |
SLICE3:FXMUX | [0, 2, 48] | [0, 2, 34] |
F | 0 | 0 |
F5 | 0 | 1 |
FXOR | 1 | 1 |
SLICE0:CYSELG | [0, 1, 3] |
---|---|
SLICE1:CYSELG | [0, 2, 3] |
SLICE2:CYSELG | [0, 1, 35] |
SLICE3:CYSELG | [0, 2, 35] |
1 | 0 |
G | 1 |
SLICE0:CYINIT | [0, 1, 4] |
---|---|
SLICE1:CYINIT | [0, 2, 4] |
SLICE2:CYINIT | [0, 1, 36] |
SLICE3:CYINIT | [0, 2, 36] |
BX | 0 |
CIN | 1 |
SLICE0:YBMUX | [0, 1, 5] |
---|---|
SLICE2:YBMUX | [0, 1, 37] |
GCY | 0 |
GMC15 | 1 |
SLICE0:FFX_INIT | [0, 1, 18] |
---|---|
SLICE0:FFX_SRVAL | [0, 1, 14] |
SLICE0:FFY_INIT | [0, 1, 21] |
SLICE0:FFY_SRVAL | [0, 1, 24] |
SLICE0:FF_SR_ENABLE | [0, 1, 17] |
SLICE0:F_RAM | [0, 1, 13] |
SLICE0:F_SHIFT | [0, 1, 8] |
SLICE0:G_RAM | [0, 1, 12] |
SLICE0:G_SHIFT | [0, 1, 6] |
SLICE1:FFX_INIT | [0, 2, 18] |
SLICE1:FFX_SRVAL | [0, 2, 14] |
SLICE1:FFY_INIT | [0, 2, 21] |
SLICE1:FFY_SRVAL | [0, 2, 24] |
SLICE2:FFX_INIT | [0, 1, 50] |
SLICE2:FFX_SRVAL | [0, 1, 46] |
SLICE2:FFY_INIT | [0, 1, 53] |
SLICE2:FFY_SRVAL | [0, 1, 56] |
SLICE2:FF_SR_ENABLE | [0, 1, 49] |
SLICE2:F_RAM | [0, 1, 45] |
SLICE2:F_SHIFT | [0, 1, 40] |
SLICE2:G_RAM | [0, 1, 44] |
SLICE2:G_SHIFT | [0, 1, 38] |
SLICE3:FFX_INIT | [0, 2, 50] |
SLICE3:FFX_SRVAL | [0, 2, 46] |
SLICE3:FFY_INIT | [0, 2, 53] |
SLICE3:FFY_SRVAL | [0, 2, 56] |
Inverted | ~[0] |
SLICE0:CY0F | [0, 1, 10] | [0, 1, 7] | [0, 1, 9] |
---|---|---|---|
SLICE1:CY0F | [0, 2, 10] | [0, 2, 7] | [0, 2, 9] |
SLICE2:CY0F | [0, 1, 42] | [0, 1, 39] | [0, 1, 41] |
SLICE3:CY0F | [0, 2, 42] | [0, 2, 39] | [0, 2, 41] |
BX | 0 | 0 | 0 |
F2 | 0 | 0 | 1 |
F1 | 0 | 1 | 1 |
PROD | 1 | 0 | 0 |
1 | 1 | 0 | 1 |
0 | 1 | 1 | 1 |
SLICE0:DXMUX | [0, 1, 11] |
---|---|
SLICE1:DXMUX | [0, 2, 11] |
SLICE2:DXMUX | [0, 1, 43] |
SLICE3:DXMUX | [0, 2, 43] |
BX | 0 |
X | 1 |
SLICE0:DIF_MUX | [0, 1, 15] |
---|---|
SLICE2:DIF_MUX | [0, 1, 47] |
ALT | 0 |
BX | 1 |
SLICE0:FF_LATCH | [0, 1, 22] |
---|---|
SLICE0:FF_REV_ENABLE | [0, 1, 23] |
SLICE0:FF_SR_SYNC | [0, 1, 19] |
SLICE0:INV.BX | [0, 5, 14] |
SLICE0:INV.BY | [0, 5, 27] |
SLICE0:SLICEWE0USED | [0, 2, 17] |
SLICE0:SLICEWE1USED | [0, 1, 20] |
SLICE1:FF_LATCH | [0, 2, 22] |
SLICE1:FF_REV_ENABLE | [0, 2, 23] |
SLICE1:FF_SR_SYNC | [0, 2, 19] |
SLICE1:INV.BX | [0, 5, 28] |
SLICE1:INV.BY | [0, 5, 31] |
SLICE2:FF_LATCH | [0, 1, 54] |
SLICE2:FF_REV_ENABLE | [0, 1, 55] |
SLICE2:FF_SR_SYNC | [0, 1, 51] |
SLICE2:INV.BX | [0, 5, 32] |
SLICE2:INV.BY | [0, 5, 35] |
SLICE2:SLICEWE0USED | [0, 2, 49] |
SLICE3:FF_LATCH | [0, 2, 54] |
SLICE3:FF_REV_ENABLE | [0, 2, 55] |
SLICE3:FF_SR_SYNC | [0, 2, 51] |
SLICE3:INV.BX | [0, 5, 36] |
SLICE3:INV.BY | [0, 5, 49] |
Non-inverted | [0] |
SLICE0:GYMUX | [0, 1, 28] | [0, 1, 25] |
---|---|---|
SLICE1:GYMUX | [0, 2, 28] | [0, 2, 25] |
SLICE2:GYMUX | [0, 1, 60] | [0, 1, 57] |
SLICE3:GYMUX | [0, 2, 60] | [0, 2, 57] |
G | 0 | 0 |
FX | 0 | 1 |
GXOR | 1 | 1 |
SLICE0:DIG_MUX | [0, 1, 26] |
---|---|
SLICE2:DIG_MUX | [0, 1, 58] |
ALT | 0 |
BY | 1 |
SLICE0:DYMUX | [0, 1, 27] |
---|---|
SLICE1:DYMUX | [0, 2, 27] |
SLICE2:DYMUX | [0, 1, 59] |
SLICE3:DYMUX | [0, 2, 59] |
BY | 0 |
Y | 1 |
SLICE0:CY0G | [0, 1, 30] | [0, 1, 31] | [0, 1, 29] |
---|---|---|---|
SLICE1:CY0G | [0, 2, 30] | [0, 2, 31] | [0, 2, 29] |
SLICE2:CY0G | [0, 1, 62] | [0, 1, 63] | [0, 1, 61] |
SLICE3:CY0G | [0, 2, 62] | [0, 2, 63] | [0, 2, 61] |
BY | 0 | 0 | 0 |
G2 | 0 | 0 | 1 |
G1 | 0 | 1 | 1 |
PROD | 1 | 0 | 0 |
1 | 1 | 0 | 1 |
0 | 1 | 1 | 1 |
RESERVED_ANDOR
TODO: wtf is this even
RANDOR
This tile overlaps IOI.*
.
RANDOR bittile 0 | ||||
---|---|---|---|---|
Row | Column | |||
0 | 1 | 2 | 3 | |
0 | - | - | - | - |
1 | - | - | - | - |
2 | - | - | - | - |
3 | - | - | - | - |
4 | - | - | - | - |
5 | - | - | - | - |
6 | - | - | - | - |
7 | - | - | - | - |
8 | - | - | - | - |
9 | - | - | - | - |
10 | - | - | - | - |
11 | - | - | - | - |
12 | - | - | - | - |
13 | - | - | - | - |
14 | - | - | - | - |
15 | - | - | - | - |
16 | - | - | - | - |
17 | - | - | - | - |
18 | - | - | - | - |
19 | - | - | - | RANDOR:MODE |
RANDOR:MODE | [0, 3, 19] |
---|---|
OR | 0 |
AND | 1 |
RANDOR_INIT
This tile overlaps top-left interconnect tile.
RANDOR_INIT bittile 0 | |
---|---|
Row | Column |
0 | |
0 | RANDOR_INIT:MODE |
RANDOR_INIT:MODE | [0, 0, 0] |
---|---|
OR | 0 |
AND | 1 |