Програмування декількох FPGA за допомогою JTAG


9

У мене є ланцюг JTAG, що з'єднує 4 спартанські 6 FPGA, які я програмую за допомогою ISE iMPACT. Програмне забезпечення може програмувати будь-яку сувору підмножину з 4 FPGA підряд успішно та в будь-якому порядку. Однак, коли я намагаюся запрограмувати всі чотири FPGA, штиф DONE останнього FPGA не надходить, і програмування не вдалося.

Що може бути причиною цієї дивної поведінки?

Примітки:

  1. Після програмування трьох FPGA, біт INIT_B регістра статусу для четвертої FPGA дорівнює 0, хоча штифт INIT_B високий. Перед програмуванням третьої FPGA цей біт був 1. Це говорить про те, що четверта FPGA заблокувалась.
  2. Під час програмування за допомогою SelectMap я можу програмувати всі чотири FPGA без проблем.
  3. Коли я програмую три FPGA за допомогою SelectMap, четвертий все ще не може бути запрограмований за допомогою JTAG.
  4. Кожен із чотирьох зроблених штифтів підтягується до резисторів від 3V3 до 4,7 К Ом, а потім з'єднується.

Що я спробував :

  1. Відключення однієї з FPGA з ланцюга дозволяє ще три програмувати FPGA.

  2. Заміна 4,7 К Ом підтягуючого резистора останнього ПЛІС на резистор 330 Ом не вирішує проблему.


2
Що ви маєте на увазі під "останнім FPGA"? Тому що в Посібнику користувача сказано: "The first device in a serial daisy chain is the last to be configured."Ви маєте на увазі "останнє в ланцюзі" або "останнє", яке потрібно налаштувати (спочатку в ланцюжку)? Не могли б ви надати схему?
embedded.kyle

2
Ця заява на p59 змушує мене думати інакше,"If the Spartan-6 device is configured via JTAG, the configuration instructions occur independent from the mode pins."
embedded.kyle

Ознайомившись з Посібником користувача (минуло 6 місяців з моменту роботи FPGA), я трохи заплутався у вашій термінології. Daisy Chain використовується разом із послідовним програмуванням. У цьому випадку DONEшпильки зав'язують між собою. Для JTAG програмування декількох пристроїв називається ланцюгом сканування кордонів. В Chapter 3: Boundary-Scan and JTAG Configuration, Єдине згадування DONEшпильки: "If JTAG is the only configuration mode, then PROGRAM_B, INIT_B, and DONE can be tied High to a 330 resistor."Так чи є DONEшпилька низькою єдиною проблемою? Це правильно програмується?
embedded.kyle


Я думаю, що факт, що ти можеш отримати 3, а не 4, - це підказка. Ознайомтеся з розділом 4 Посібника програміста JTAG щодо проектування систем граничного сканування: xilinx.com/support/sw_manuals/2_1i/download/jtag.pdf
embedded.kyle

Відповіді:


6

DONEШтифт в не використовуються при програмуванні JTAG і може бути пов'язана з високими:

Якщо JTAG - єдиний режим конфігурації, то PROGRAM_B, INIT_B і DONE можна прив’язати до високого резистора 330 Ом. (p57)

Однак якщо використовується послідовне програмування, усі DONEштифти повинні бути зв'язані між собою, а їх DriveDoneслід вимкнути для всіх пристроїв, крім першого:

Важливо з'єднати штифти DONE для всіх пристроїв в ланцюжку послідовної ромашки. Якщо не підключити штифти DONE, це може призвести до відмови конфігурації. (p135)

Усі пристрої, окрім першого, повинні відключити драйвер на штифті DONE. (p135)

Якщо потрібно використовувати обидва, є два варіанти:

Крім того, драйвер може бути відключений для всіх штифтів DONE, а зовнішній резистор, що підтягується, може бути доданий для витягування сигналу High після того, як усі пристрої відпустили його. (p135)

Для налагодження часто корисно мати спосіб відключення окремих штифтів DONE від загального сигналу DONE, щоб пристрої могли бути індивідуально налаштовані через послідовний або JTAG інтерфейс. (p135)

У вашому випадку я думаю, DONEщо найкращим способом є з'єднання їх та зав’язування їх усіх під час відключення шпильки.

Всі номери сторінок посилаються на Посібник користувача


Хммм ... Якщо ви зв'язали INIT_Bвисоко, а INIT_Bбіт в реєстрі статусу дорівнює 0, це вказувало б на апаратний збій для мене. Якщо ви не зможете запрограмувати цей чіп самостійно, я думаю, ви сказали, що можете. DONEКонтактний йде High-Z при програмуванні , так що я не знаю , що регістр стану робить в цей момент. Якщо LSB попереднього реєстру статусу FPGA дорівнює 1, то це вказує на помилку CRC в цьому пристрої, що може перешкодити програмуванню наступного.
embedded.kyle

Проблема знайдена (див. Моє рішення). Дякую за твою допомогу.
Randomblue

3

Виявився винуватцем INIT_Bшпильки. Хоча підтягнуто високо, як перші кілька FPGA були запрограмовані,INIT_B штифт поступово витягувався все нижче і нижче через внутрішнє пониження.

Після того, як були запрограмовані три FPGA, INIT_Bштифт був витягнутий досить низько, щоб четвертий FPGA інтерпретував INIT_Bяк логічний низький, тим самим запобігаючи програмуванню четвертого FGPA за допомогою JTAG.


Дякуємо, що поділилися першопричиною. Я постійно перевіряв це питання на відповідь, оскільки це було таке дивне поведінка. Яким було вирішення проблеми? Сильніший підйом, ніж 330Ω?
embedded.kyle

Виявляється, є варіанти бітгенів, щоб вказати, що INIT_Bпісля програмування шпильку потрібно підтягувати, а не тягнути вниз.
Randomblue
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.