I have a JTAG chain connecting 4 Spartan 6 FPGAs that I program using ISE iMPACT. The software can program any strict subset of the 4 FPGAs in a row successfully, and in any order. However, when I attempt to program all four FPGAs, the DONE pin of the last FPGA does not go high, and the programming fails.
What could be causing this strange behaviour?
Notes:
- After programming three of the FPGAs, the INIT_B bit of the status register for the fourth FPGA is 0, although the INIT_B pin is high. Right before programming the third FPGA, that bit was 1. This suggests the fourth FPGA has locked up.
- When programming with SelectMap, I can program all four FPGAs without any problem.
- When I program three of the FPGAs using SelectMap, the fourth one still cannot be programmed using JTAG.
- Each of the four done pins are pulled-up to 3V3 through 4.7K Ohm resistors, and then tied together.
Things I have tried:
Disconnecting one of the FPGAs from the chain allows for the remaining 3 FPGAs to still be programmed.
Swapping the 4.7K Ohm pull-up resistor of the last FPGA for a 330 Ohm resistor doesn't solve the problem.
"The first device in a serial daisy chain is the last to be configured."Do you mean last in the chain or last to be configured (first in the chain)? Could you provide a schematic? \$\endgroup\$"If the Spartan-6 device is configured via JTAG, the configuration instructions occur independent from the mode pins."\$\endgroup\$DONEpins are tied together. For JTAG, multiple device programming is called Boundary-Scan Chain. InChapter 3: Boundary-Scan and JTAG Configuration, the only mention of the theDONEpin is"If JTAG is the only configuration mode, then PROGRAM_B, INIT_B, and DONE can be tied High to a 330 resistor."So is theDONEpin low the only problem? Does it program correctly? \$\endgroup\$