Ich habe eine JTAG-Kette, die 4 Spartan 6-FPGAs verbindet, die ich mit ISE iMPACT programmiere. Die Software kann jede strenge Teilmenge der 4 FPGAs hintereinander erfolgreich und in beliebiger Reihenfolge programmieren. Wenn ich jedoch versuche, alle vier FPGAs zu programmieren , geht der DONE-Pin des letzten FPGA nicht hoch und die Programmierung schlägt fehl.
Was könnte dieses seltsame Verhalten verursachen?
Anmerkungen:
- Nach dem Programmieren von drei der FPGAs ist das INIT_B-Bit des Statusregisters für das vierte FPGA 0, obwohl der INIT_B-Pin hoch ist. Kurz vor dem Programmieren des dritten FPGA war dieses Bit 1. Dies deutet darauf hin, dass das vierte FPGA blockiert ist.
- Bei der Programmierung mit SelectMap kann ich problemlos alle vier FPGAs programmieren.
- Wenn ich drei der FPGAs mit SelectMap programmiere, kann das vierte immer noch nicht mit JTAG programmiert werden.
- Jeder der vier fertigen Pins wird über 4,7 kOhm Widerstände auf 3V3 hochgezogen und dann miteinander verbunden.
Dinge, die ich versucht habe :
Durch Trennen eines der FPGAs von der Kette können die verbleibenden 3 FPGAs noch programmiert werden.
Das Austauschen des 4,7-K-Ohm-Pull-up-Widerstands des letzten FPGA gegen einen 330-Ohm-Widerstand löst das Problem nicht.
"The first device in a serial daisy chain is the last to be configured."
Meinst du das Letzte in der Kette oder das Letzte, das konfiguriert werden soll (das Erste in der Kette)? Könnten Sie einen Schaltplan bereitstellen?"If the Spartan-6 device is configured via JTAG, the configuration instructions occur independent from the mode pins."
DONE
Stifte miteinander verbunden. Für JTAG wird die Programmierung mehrerer Geräte als Boundary-Scan-Kette bezeichnet. InChapter 3: Boundary-Scan and JTAG Configuration
, die einzige Erwähnung desDONE
Pins ist"If JTAG is the only configuration mode, then PROGRAM_B, INIT_B, and DONE can be tied High to a 330 resistor."
Also ist derDONE
Pin niedrig das einzige Problem? Programmiert es richtig?Antworten:
Der
DONE
Pin wird während der JTAG-Programmierung nicht verwendet und kann hochgebunden werden:Wenn jedoch die serielle Programmierung verwendet wird, sollten alle
DONE
Pins miteinander verbunden undDriveDone
für alle Geräte außer dem ersten deaktiviert sein:Wenn beide verwendet werden sollen, gibt es zwei Möglichkeiten:
In Ihrem Fall denke ich, dass
DONE
es der beste Weg ist, sie zu verbinden und alle hoch zu binden, während der Pin deaktiviert wird.Alle Seitenzahlen beziehen sich auf das Benutzerhandbuch
quelle
INIT_B
hoch gebunden haben und dasINIT_B
Bit im Statusregister 0 ist, würde dies auf einen Hardwarefehler für mich hinweisen. Es sei denn, Sie können diesen Chip unabhängig programmieren, was Sie meiner Meinung nach könnten. DerDONE
Pin geht während des Programmierens auf High-Z, daher weiß ich nicht, was das Statusregister während dieses Punktes tut. Wenn das LSB des vorherigen FPGA-Statusregisters 1 ist, weist dies auf einen CRC-Fehler in diesem Gerät hin, der möglicherweise die Programmierung des nächsten verhindert.Es stellte sich heraus, dass der Schuldige der
INIT_B
Stift war. Obwohl hochgezogen, als die ersten FPGAs programmiert wurden, wurde derINIT_B
Stift aufgrund eines internen Pulldowns allmählich tiefer und tiefer gezogen.Nachdem drei FPGAs programmiert worden waren, wurde der
INIT_B
Pin so tief gezogen, dass das vierte FPGAINIT_B
als logisch niedrig interpretiert werden konnte , wodurch verhindert wurde, dass der vierte FGPA mit JTAG programmiert wurde.quelle
INIT_B
Stift nach dem Programmieren nach oben anstatt nach unten gezogen wird.