Programando vários FPGAs usando JTAG

9

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:

  1. 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.
  2. Ao programar com o SelectMap, posso programar todos os quatro FPGAs sem nenhum problema.
  3. Quando programa três dos FPGAs usando o SelectMap, o quarto ainda não pode ser programado usando o JTAG.
  4. Cada um dos quatro pinos prontos é puxado para resistores de 3V3 a 4,7K Ohm e, em seguida, amarrados.

Coisas que tentei :

  1. Desconectar um dos FPGAs da cadeia permite que os 3 FPGAs restantes ainda sejam programados.

  2. A troca do resistor pull-up de 4.7K Ohm do último FPGA por um resistor de 330 Ohm não resolve o problema.

Randomblue
fonte
2
O que você quer dizer com "último FPGA"? Porque no Guia do Usuário diz: "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?
embedded.kyle
2
Esta declaração sobre P59 me faz pensar o contrário,"If the Spartan-6 device is configured via JTAG, the configuration instructions occur independent from the mode pins."
embedded.kyle
Depois de me familiarizar com o Guia do Usuário (faz seis meses desde que eu fiz o trabalho no FPGA), estou um pouco confuso com sua terminologia. O Daisy Chain é usado em conjunto com a programação serial. Nesse caso, os DONEpinos estão amarrados. Para o JTAG, a programação de vários dispositivos é chamada Cadeia de varredura de limites. Em Chapter 3: Boundary-Scan and JTAG Configuration, a única menção do DONEpino é "If JTAG is the only configuration mode, then PROGRAM_B, INIT_B, and DONE can be tied High to a 330 resistor."Então, o DONEpino baixo é o único problema? Programa corretamente?
embedded.kyle
vamos continuar essa discussão no chat
embedded.kyle
Eu acho que o fato de você conseguir 3, mas não 4, é uma pista. Confira Capítulo 4 do Manual do programador do JTAG em projetar boundary-scan Sistemas: xilinx.com/support/sw_manuals/2_1i/download/jtag.pdf
embedded.kyle

Respostas:

6

O DONEpino não é usado durante a programação JTAG e pode ser amarrado alto:

Se JTAG é o único modo de configuração, PROGRAM_B, INIT_B e DONE podem ser ligados alto a um resistor de 330Ω. (p57)

No entanto, se a programação serial for usada, todos os DONEpinos deverão ser amarrados e DriveDonedesabilitados para todos os dispositivos, exceto o primeiro:

É importante conectar os pinos DONE a todos os dispositivos em uma série de séries. Deixar de conectar os pinos DONE pode causar falha na configuração. (p135)

Todos os dispositivos, exceto o primeiro, devem desativar o driver no pino DONE. (p135)

Se ambos forem usados, há duas opções:

Como alternativa, o driver pode ser desativado para todos os pinos DONE e um resistor de pull-up externo pode ser adicionado para puxar o sinal High depois que todos os dispositivos o liberarem. (p135)

Para fins de depuração, geralmente é útil ter uma maneira de desconectar pinos DONE individuais do sinal DONE comum, para que os dispositivos possam ser configurados individualmente por meio da interface serial ou JTAG. (p135)

No seu caso, acho que conectá-los e amarrá-los todos altos enquanto desabilitar o DONEpino é o melhor caminho a percorrer.

Todos os números de página fazem referência ao Guia do Usuário

embedded.kyle
fonte
Hmmm ... Se você empatou INIT_Balto e o INIT_Bbit 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. O DONEpino 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.
embedded.kyle
Problema encontrado (veja minha solução). Obrigado pela ajuda.
Randomblue 19/07/12
3

Acabou que o culpado era o INIT_Balfinete. Embora puxado alto, como os primeiros FPGAs foram programados, o INIT_Bpino 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_Bpino foi puxado baixo o suficiente para o quarto FPGA interpretar INIT_Bcomo uma lógica baixa, impedindo assim que o quarto FGPA fosse programado com o JTAG.

Randomblue
fonte
Ω
Acontece que existem opções de bitgen para especificar que o INIT_Bpino seja puxado para cima em vez de puxado para baixo após a programação.
Randomblue 19/07/12