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?
- 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.
DONEpin in not used during JTAG programming and can be tied high:
However, if Serial programming is used, then all the
DONEpins should be tied together and the
DriveDoneshould be disabled for all devices except the first:
If both are to be used, there are two options:
In your case, I think connecting them and tying them all high while disabling the
DONEpin is the best way to go.
All page numbers reference the User Guide