Eu tenho uma cadeia JTAG conectando 4 Spartan 6 FPGAs que eu programo usando o ISE iMPACT. O software pode programar qualquer subconjunto estrito dos 4 FPGAs seguidos com êxito e em qualquer ordem. No entanto, quando tento programar todos os quatro FPGAs, o pino DONE do último FPGA não aumenta e a programação falha.
O que poderia estar causando esse comportamento estranho?
Notas:
- Após programar três dos FPGAs, o bit INIT_B do registro de status para o quarto FPGA é 0, embora o pino INIT_B esteja alto. Logo antes de programar o terceiro FPGA, esse bit era 1. Isso sugere que o quarto FPGA foi bloqueado.
- Ao programar com o SelectMap, posso programar todos os quatro FPGAs sem nenhum problema.
- Quando programa três dos FPGAs usando o SelectMap, o quarto ainda não pode ser programado usando o JTAG.
- Cada um dos quatro pinos prontos é puxado para resistores de 3V3 a 4,7K Ohm e, em seguida, amarrados.
Coisas que tentei :
Desconectar um dos FPGAs da cadeia permite que os 3 FPGAs restantes ainda sejam programados.
A troca do resistor pull-up de 4.7K Ohm do último FPGA por um resistor de 330 Ohm não resolve o problema.
"The first device in a serial daisy chain is the last to be configured."
Você quer dizer o último da cadeia ou o último a ser configurado (o primeiro da cadeia)? Você poderia fornecer um esquema?"If the Spartan-6 device is configured via JTAG, the configuration instructions occur independent from the mode pins."
DONE
pinos estão amarrados. Para o JTAG, a programação de vários dispositivos é chamada Cadeia de varredura de limites. EmChapter 3: Boundary-Scan and JTAG Configuration
, a única menção doDONE
pino é"If JTAG is the only configuration mode, then PROGRAM_B, INIT_B, and DONE can be tied High to a 330 resistor."
Então, oDONE
pino baixo é o único problema? Programa corretamente?Respostas:
O
DONE
pino não é usado durante a programação JTAG e pode ser amarrado alto:No entanto, se a programação serial for usada, todos os
DONE
pinos deverão ser amarrados eDriveDone
desabilitados para todos os dispositivos, exceto o primeiro:Se ambos forem usados, há duas opções:
No seu caso, acho que conectá-los e amarrá-los todos altos enquanto desabilitar o
DONE
pino é o melhor caminho a percorrer.Todos os números de página fazem referência ao Guia do Usuário
fonte
INIT_B
alto e oINIT_B
bit no registro de status é 0, isso indicaria uma falha de hardware para mim. A menos que você possa programar esse chip independentemente, acho que você disse que poderia. ODONE
pino fica alto-Z durante a programação, então não sei o que o registro de status faz durante esse ponto. Se o LSB do registro de status anterior do FPGA for 1, isso indica um erro de CRC nesse dispositivo que pode impedir a programação do próximo.Acabou que o culpado era o
INIT_B
alfinete. Embora puxado alto, como os primeiros FPGAs foram programados, oINIT_B
pino foi gradualmente puxado para baixo e para baixo devido a um puxão interno.Após a programação de três FPGAs, o
INIT_B
pino foi puxado baixo o suficiente para o quarto FPGA interpretarINIT_B
como uma lógica baixa, impedindo assim que o quarto FGPA fosse programado com o JTAG.fonte
INIT_B
pino seja puxado para cima em vez de puxado para baixo após a programação.