I have designed a Xilinx Spartan-6 PCI card with SPI configuration interface (please check Figure 2-12 of ug380.pdf user guide). I can program the serial flash through JTAG cable, I can also modify/program the serial flash through the PCI bridge chip, for field upgrade purposes. Unfortunately I forgot to connect one of the GPIO pins from the PCI chip to the FPGA's PROGRAM_B pin, now I have to power cycle the computer to restart the configuration.
Is there a way that FPGA firmware can "FORCE" the configuration process without external assertion?
Best Answer
This question has been stuck in the back of my head for a while and I just stumbled across the answer in the Virtex 6 configuration guide and then cross-referenced it to the Spartan 6 configuration guide. See the IPROG reconfiguration section in UG380 on page 128. This page includes the sequence of words to write to the ICAP_SPARTAN6 interface to emulate a PROGRAM_B assert from user logic. This is designed for re-starting configuration with a different base address if you have multiple FPGA images stored in the same flash chip. I will reproduce the sequence here for posterity:
It may be possible to skip step 2 and just send the sync word and IPROG command to use the default values for the start addresses.
Byte sequence:
You might be able to get away with: