Programmation de plusieurs FPGA à l'aide de JTAG

9

J'ai une chaîne JTAG connectant 4 FPGA Spartan 6 que je programme en utilisant ISE iMPACT. Le logiciel peut programmer n'importe quel sous-ensemble strict des 4 FPGA d'affilée avec succès et dans n'importe quel ordre. Cependant, lorsque j'essaie de programmer les quatre FPGA, la broche DONE du dernier FPGA ne monte pas et la programmation échoue.

Qu'est-ce qui pourrait être à l'origine de ce comportement étrange?

Remarques:

  1. Après avoir programmé trois des FPGA, le bit INIT_B du registre d'état du quatrième FPGA est égal à 0, bien que la broche INIT_B soit élevée. Juste avant de programmer le troisième FPGA, ce bit était de 1. Cela suggère que le quatrième FPGA s'est verrouillé.
  2. Lors de la programmation avec SelectMap, je peux programmer les quatre FPGA sans aucun problème.
  3. Lorsque je programme trois des FPGA à l'aide de SelectMap, le quatrième ne peut toujours pas être programmé à l'aide de JTAG.
  4. Chacune des quatre broches terminées est tirée jusqu'à des résistances de 3V3 à 4,7K Ohm, puis attachées ensemble.

Ce que j'ai essayé :

  1. La déconnexion de l'un des FPGA de la chaîne permet de programmer les 3 FPGA restants.

  2. L'échange de la résistance de rappel de 4,7 K Ohms du dernier FPGA contre une résistance de 330 Ohms ne résout pas le problème.

Randomblue
la source
2
Qu'entendez-vous par «dernier FPGA»? Parce que dans le Guide de l'utilisateur, il est dit "The first device in a serial daisy chain is the last to be configured."Voulez-vous dire le dernier de la chaîne ou le dernier à configurer (le premier de la chaîne)? Pourriez-vous fournir un schéma?
embedded.kyle
2
Cette déclaration sur p59 me fait penser le contraire,"If the Spartan-6 device is configured via JTAG, the configuration instructions occur independent from the mode pins."
embedded.kyle
Après m'être familiarisé avec le Guide de l'utilisateur (cela fait environ 6 mois que j'ai fait du travail FPGA), je suis un peu confus par votre terminologie. Daisy Chain est utilisé en conjonction avec la programmation série. Dans ce cas, les DONEbroches sont attachées ensemble. Pour JTAG, la programmation de plusieurs appareils s'appelle Boundary-Scan Chain. Dans Chapter 3: Boundary-Scan and JTAG Configuration, la seule mention de la DONEbroche est "If JTAG is the only configuration mode, then PROGRAM_B, INIT_B, and DONE can be tied High to a 330 resistor."donc la DONEbroche basse est-elle le seul problème? Est-ce qu'il se programme correctement?
embedded.kyle
Je pense que le fait que vous pouvez obtenir 3 mais pas 4 est un indice. Consultez le chapitre 4 du Guide du programmeur JTAG sur la conception de systèmes de balayage des limites: xilinx.com/support/sw_manuals/2_1i/download/jtag.pdf
embedded.kyle

Réponses:

6

La DONEbroche n'est pas utilisée pendant la programmation JTAG et peut être attachée haut:

Si JTAG est le seul mode de configuration, alors PROGRAM_B, INIT_B et DONE peuvent être liés High à une résistance de 330Ω. (p57)

Cependant, si la programmation série est utilisée, toutes les DONEbroches doivent être liées ensemble et DriveDonedésactivées pour tous les appareils, sauf le premier:

Il est important de connecter les broches DONE pour tous les appareils d'une connexion en série. Le fait de ne pas connecter les broches DONE peut entraîner l'échec de la configuration. (p135)

Tous les appareils, sauf le premier, doivent désactiver le pilote sur la broche DONE. (p135)

Si les deux doivent être utilisés, il existe deux options:

Alternativement, le pilote peut être désactivé pour toutes les broches DONE et une résistance de rappel externe peut être ajoutée pour tirer le signal haut une fois que tous les appareils l'ont libéré. (p135)

À des fins de débogage, il est souvent utile d'avoir un moyen de déconnecter les broches DONE individuelles du signal DONE commun, afin que les appareils puissent être configurés individuellement via l'interface série ou JTAG. (p135)

Dans votre cas, je pense que les connecter et les attacher tout en désactivant la DONEbroche est la meilleure façon de procéder.

Tous les numéros de page font référence au Guide de l' utilisateur

embedded.kyle
la source
Hmmm ... Si vous avez attaché INIT_Bhaut et que le INIT_Bbit dans le registre d'état est 0, cela m'indiquerait une défaillance matérielle. À moins que vous ne puissiez programmer cette puce indépendamment, ce que je pense que vous avez dit que vous pouviez. La DONEbroche passe en High-Z pendant la programmation, donc je ne sais pas ce que fait le registre d'état pendant ce point. Si le LSB du registre d'état FPGA précédent est 1, cela indique une erreur CRC dans cet appareil qui peut empêcher la programmation du suivant.
embedded.kyle
Problème trouvé (voir ma solution). Merci de votre aide.
Randomblue
3

Il s'est avéré que le coupable était l' INIT_Bépingle. Bien que tirée haut, au fur et à mesure que les premiers FPGA étaient programmés, la INIT_Bbroche a été progressivement tirée de plus en plus bas en raison d'un tirage interne.

Après la programmation de trois FPGA, la INIT_Bbroche a été tirée suffisamment bas pour que le quatrième FPGA puisse être interprété INIT_Bcomme un niveau logique bas, empêchant ainsi le quatrième FGPA d'être programmé avec JTAG.

Randomblue
la source
Ω
Il s'avère qu'il existe des options bitgen pour spécifier que la INIT_Bbroche doit être relevée au lieu d'être abaissée après la programmation.
Randomblue