Spartan-6 dynamic reconfiguration of the switch matrix

We saw in the previous post, that "NL1E3 -> LOGICIN_B32" was used by the slice M design. Those PIP names match the names used in the list here [1] for interconnection switches in FLR protocol: NL1E3 -> LOGICIN_B32 is the switch id 2168.

The switch is in the following wire chain:

in[1] -> [...] -> NL1E3 -> LOGICIN_B32 -> M_A4 -> [...] -> out[3]

Question: Is it possible to reconfigure an individual switch in the Spartan-6 switch matrix using the partial reconfiguration feature without stopping the FPGA?

FLR get switch request

In [2], it was found that the switch matrix configuration bitstream is the same for all switch matrixes of the Spartan-6 FPGA. In other words, the bits controlling the activation of a switch in the matrix are always located at the same bitstream position, no matter if the switch is not actually available in the silicium die.

Knowing the switch id, the same operation can be applied to any switch matrixes.

[TX8]0x0002000f00001500 <- read the 20 first minors at (row:0, maj:15)
[TX8]0x0030000f0d087800 <- get the status of the switch 2168 in matrix:13
[RX8]0x00b0000000000001 <- the switch is activated! (bit the 1 at the end)
[TX8]0x0030000f0d087900 <- get the status of the switch 2169
[RX8]0x00b0000000000000 <- the switch is not activated (ok)

Note: this preliminary implementation does not follow the FLR specifications.

FLR set switch request

[TX8]0x0031000f0d087800 <- disable the switch 2168 in matrix:13
[TX8]0x0003000000157800 <- write the patched switch matrix to target

By activating/desactivating the switch id 2168, one can disable or enable the 4th input in the LUT_A (driving the 4th output). See previous post for details about the implemented design.

Experimental results comfirm this dynamic behavior.

[1]List of the Programmable Interconnect Point (PIP) in the Xilinx Spartan-6 LX9
[2]From the bitstream to the netlist