Программирование нескольких FPGA с использованием JTAG


9

У меня есть цепочка JTAG, соединяющая 4 спартанских 6 FPGA, которые я программирую, используя ISE iMPACT. Программное обеспечение может успешно программировать любое строгое подмножество 4 ПЛИС подряд и в любом порядке. Однако, когда я пытаюсь запрограммировать все четыре FPGA, вывод DONE последней FPGA не поднимается до высокого уровня, и программирование не выполняется.

Что может быть причиной этого странного поведения?

Ноты:

  1. После программирования трех FPGA бит INIT_B регистра состояния для четвертой FPGA равен 0, хотя вывод INIT_B высокий. Прямо перед программированием третьей FPGA этот бит был равен 1. Это говорит о том, что четвертая FPGA заблокирована.
  2. При программировании с помощью SelectMap я могу без проблем программировать все четыре ПЛИС.
  3. Когда я программирую три из ПЛИС с помощью SelectMap, четвертый все еще не может быть запрограммирован с использованием JTAG.
  4. Каждый из четырех готовых выводов подтягивается к резисторам от 3V3 до 4,7 кОм, а затем связывается вместе.

Вещи, которые я пробовал :

  1. Отключение одной из ПЛИС от цепи позволяет запрограммировать оставшиеся 3 ПЛИС.

  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 месяцев с тех пор, как я выполнил работу с ПЛИС), меня немного смущает ваша терминология. 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 могут быть привязаны High к резистору 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.


Ω

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