Mam łańcuch JTAG łączący 4 układy FPGA Spartan 6, które programuję za pomocą ISE iMPACT. Oprogramowanie może pomyślnie zaprogramować dowolny ścisły podzbiór 4 układów FPGA w dowolnej kolejności. Jednak gdy próbuję zaprogramować wszystkie cztery układy FPGA, styk DONE ostatniego układu FPGA nie przechodzi w stan wysoki, a programowanie kończy się niepowodzeniem.
Co może być przyczyną tego dziwnego zachowania?
Uwagi:
- Po zaprogramowaniu trzech FPGA bit INIT_B rejestru stanu dla czwartej FPGA ma wartość 0, chociaż pin INIT_B jest wysoki. Tuż przed zaprogramowaniem trzeciego układu FPGA bit ten wynosił 1. To sugeruje, że czwarty układ FPGA został zamknięty.
- Podczas programowania w SelectMap mogę bez problemu zaprogramować wszystkie cztery układy FPGA.
- Kiedy programuję trzy układy FPGA za pomocą SelectMap, czwartego nadal nie można zaprogramować za pomocą JTAG.
- Każdy z czterech wykonanych pinów jest podciągany do 3V3 przez rezystory 4,7K Ohm, a następnie wiązany ze sobą.
Rzeczy, których próbowałem :
Odłączenie jednego z układów FPGA od łańcucha pozwala na zaprogramowanie pozostałych 3 układów FPGA.
Zamiana rezystora podciągającego 4,7 kOm z ostatniego układu FPGA na rezystor 330 omów nie rozwiązuje problemu.
"The first device in a serial daisy chain is the last to be configured."
Czy masz na myśli ostatni w łańcuchu czy ostatni do skonfigurowania (pierwszy w łańcuchu)? Czy możesz podać schemat?"If the Spartan-6 device is configured via JTAG, the configuration instructions occur independent from the mode pins."
DONE
szpilki są ze sobą powiązane. W przypadku JTAG programowanie wielu urządzeń nazywa się łańcuchem skanowania granic. WChapter 3: Boundary-Scan and JTAG Configuration
, jedyną wzmianką oDONE
szpilce jest"If JTAG is the only configuration mode, then PROGRAM_B, INIT_B, and DONE can be tied High to a 330 resistor."
Więc czyDONE
szpilka jest jedynym problemem? Czy programuje się poprawnie?Odpowiedzi:
DONE
Pin nie jest używany podczas programowania JTAG i może być związany wysokie:Jeśli jednak używane jest programowanie szeregowe, wszystkie
DONE
piny powinny być powiązane iDriveDone
powinny być wyłączone dla wszystkich urządzeń z wyjątkiem pierwszego:Jeśli mają być użyte oba, istnieją dwie opcje:
W twoim przypadku myślę, że
DONE
najlepszym sposobem jest połączenie ich i związanie ich wysoko przy wyłączeniu pinów.Wszystkie numery stron odnoszą się do Podręcznika użytkownika
źródło
INIT_B
wysoki, aINIT_B
bit w rejestrze stanu ma wartość 0, oznaczałoby to awarię sprzętu. Chyba że możesz zaprogramować ten układ niezależnie, co według mnie powiedziałeś, że możesz.DONE
Pin idzie wysokie-Z podczas programowania, więc nie wiem, co rejestr stanu robi w tym momencie. Jeśli LSB poprzedniego rejestru statusu FPGA wynosi 1, oznacza to błąd CRC w tym urządzeniu, który może uniemożliwić zaprogramowanie następnego.Okazało się, że winowajcą była
INIT_B
szpilka. Mimo wysokiego wyciągnięcia, gdy zaprogramowano kilka pierwszych układów FPGA,INIT_B
pin był stopniowo wyciągany coraz niżej z powodu wewnętrznego opuszczania.Po zaprogramowaniu trzech układów FPGA,
INIT_B
pin został pociągnięty wystarczająco nisko, aby czwarty układ FPGA mógł interpretowaćINIT_B
jako niski poziom logiczny, uniemożliwiając w ten sposób zaprogramowanie czwartego FGPA za pomocą JTAG.źródło
INIT_B
pin należy podciągnąć w górę zamiast w dół po programowaniu.