Programmazione di più FPGA tramite JTAG


9

Ho una catena JTAG che collega 4 FPGA Spartan 6 che programma usando ISE iMPACT. Il software può programmare qualsiasi sottoinsieme rigoroso dei 4 FPGA di seguito e in qualsiasi ordine. Tuttavia, quando provo a programmare tutti e quattro gli FPGA, il pin FATTO dell'ultimo FPGA non aumenta e la programmazione fallisce.

Cosa potrebbe causare questo strano comportamento?

Appunti:

  1. Dopo aver programmato tre FPGA, il bit INIT_B del registro di stato per il quarto FPGA è 0, sebbene il pin INIT_B sia alto. Proprio prima di programmare il terzo FPGA, quel bit era 1. Questo suggerisce che il quarto FPGA si è bloccato.
  2. Durante la programmazione con SelectMap, posso programmare tutti e quattro gli FPGA senza alcun problema.
  3. Quando programma tre FPGA usando SelectMap, il quarto non può ancora essere programmato usando JTAG.
  4. Ognuno dei quattro pin completati viene tirato su da 3 a 3 resistori da 4,7 K Ohm e quindi legati insieme.

Cose che ho provato :

  1. La disconnessione di uno degli FPGA dalla catena consente di programmare ancora i 3 FPGA rimanenti.

  2. La sostituzione del resistore pull-up da 4,7 K Ohm dell'ultimo FPGA con un resistore da 330 Ohm non risolve il problema.


2
Cosa intendi con "ultimo FPGA"? Perché nella Guida per l'utente è indicato "The first device in a serial daisy chain is the last to be configured."Intendi l'ultimo nella catena o l'ultimo da configurare (primo nella catena)? Potresti fornire uno schema?
embedded.kyle,

2
Questa affermazione su p59 mi fa pensare diversamente,"If the Spartan-6 device is configured via JTAG, the configuration instructions occur independent from the mode pins."
embedded.kyle il

Dopo aver acquisito familiarità con la Guida dell'utente (sono passati circa 6 mesi da quando ho svolto il lavoro FPGA), sono un po 'confuso dalla tua terminologia. Daisy Chain viene utilizzato insieme alla programmazione seriale. Nel qual caso, i DONEperni sono legati insieme. Per JTAG, la programmazione di più dispositivi si chiama Boundary-Scan Chain. In Chapter 3: Boundary-Scan and JTAG Configuration, l'unica menzione del DONEpin è "If JTAG is the only configuration mode, then PROGRAM_B, INIT_B, and DONE can be tied High to a 330 resistor."Quindi il DONEpin basso è l'unico problema? Si programma correttamente?
embedded.kyle,


Penso che il fatto che tu possa ottenere 3 ma non 4 sia un indizio. Consulta il capitolo 4 della Guida del programmatore JTAG sulla progettazione di sistemi di scansione dei limiti
embedded.kyle

Risposte:


6

Il DONEpin non viene utilizzato durante la programmazione JTAG e può essere legato in alto:

Se JTAG è l'unica modalità di configurazione, PROGRAM_B, INIT_B e DONE possono essere collegati in alto a un resistore da 330 Ω. (P57)

Tuttavia, se si utilizza la programmazione seriale, tutti i DONEpin devono essere collegati insieme e DriveDonedevono essere disabilitati per tutti i dispositivi tranne il primo:

È importante collegare i pin DONE per tutti i dispositivi in ​​un collegamento a margherita seriale. La mancata connessione dei pin DONE può causare errori di configurazione. (P135)

Tutti i dispositivi tranne il primo dovrebbero disabilitare il driver sul pin DONE. (P135)

Se si devono usare entrambi, ci sono due opzioni:

In alternativa, il driver può essere disabilitato per tutti i pin DONE e una resistenza di pull-up esterna può essere aggiunta per tirare il segnale High dopo che tutti i dispositivi lo hanno rilasciato. (P135)

Ai fini del debug, è spesso utile avere un modo per disconnettere i singoli pin DONE dal segnale DONE comune, in modo che i dispositivi possano essere configurati individualmente attraverso l'interfaccia seriale o JTAG. (P135)

Nel tuo caso, penso che collegarli e legarli tutti in alto disabilitando il DONEpin sia il modo migliore per andare.

Tutti i numeri di pagina fanno riferimento alla Guida per l' utente


Hmmm ... Se hai legato INIT_Balto e il INIT_Bbit nel registro di stato è 0, ciò indicherebbe un errore hardware per me. A meno che tu non possa programmare quel chip in modo indipendente, cosa che penso tu abbia detto di poter fare. Il DONEpin diventa Z-High durante la programmazione, quindi non so cosa faccia il registro di stato durante quel punto. Se il precedente LSB del registro di stato FPGA è 1, ciò indica un errore CRC in quel dispositivo che potrebbe impedire la programmazione del successivo.
embedded.kyle il

Problema riscontrato (vedi la mia soluzione). Grazie per l'aiuto.
Randomblue,

3

Si è scoperto che il colpevole era il INIT_Bperno. Sebbene tirato in alto, poiché sono stati programmati i primi FPGA, il INIT_Bpin è stato gradualmente abbassato in basso e in basso a causa di un pull-down interno.

Dopo aver programmato tre FPGA, il INIT_Bpin è stato tirato abbastanza in basso da consentire al quarto FPGA di interpretare INIT_Bcome un minimo logico, impedendo così la programmazione del quarto FGPA con JTAG.


Ω

Si scopre che ci sono opzioni bitgen per specificare che il INIT_Bperno deve essere tirato su invece che abbassato dopo la programmazione.
Randomblue,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.