Перейти к содержанию
    

JTAG странно работает с ПЛИС

Всем привет!
В общем ситуация следующая, я хочу считать конфигурационную память из ПЛИС Spartan 6. Судя по документации в ней есть 3 интерфейса для этого: ICAP, SelectMAP и JTAG. Выбор был сделан в пользу последнего так как есть множество МК, которые управляются и реализуют JTAG интерфейс, но есть проблема.

Для управления считыванием был выбран МК FT2232 и через него была реализована программа на C, которая уже работала с другим МК, поэтом сомневаться в работе программы не приходиться. Проблема заключается в том что это программа была переделана с учетом bsdl конкретной ПЛИС и перед тем как стучаться за конфигурационной памятью были проведены обычные тесты на считывание Idcode и прочего. TCK, TDI и TMS выдают верную последовательность (судя по осциллографу), но на выходе TDO получается какая то ерунда, не совпадающая ни с чем (IDCODE по bsdl не совпадает).

Стало быть вывод простой, плата или ПЛИС на ней не исправны и что тут думать, но фокус в том, через САПР и родной программатор ПЛИС , при нажатии на команду в iMPACT "Get IDCode" выдает верный код (судя по bsdl) и более того, плата программируется без каких либо проблем и ошибок. Отсюда вытекает следующая идея, подключить осциллограф к JTAG и посмотреть, что будет на входах и выходах JTAG, когда мы будем в iMPACT запрашивать IDCODE.И тут начинается самое интересное.
Во-первых, в программе iMPACT стоит частота JTAG 6 МГц, но при запросе команд он выдает в консоле, что максимальная частота TCK 2,5 МГц, но все работает и шьется. Во-вторых, сигнал TCK на осциллографе имеет странную форму (см.картинку, схематичное изображение), он выходит пачками по 4 такта и с длительным перерывом между пачками, а в конце вообще выдает 1 или 2 одиночных такта, что вообще не похоже на стандартный протокол JTAG.
Люди добрые прошу помощи, очень долго с этим бьюсь и по ощущениям все намного легче должно быть с ридбэком памяти, но ним одни проблема. Заранее благодарю!
Касаемо SelectMAP и ICAP, я буду рад если кто то объяснит как с этим работать, тоже пока не удается ничего сделать. Спасибо за внимание!

изображение_2024-06-26_190212312.png

Изменено пользователем 0xd3f48817

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возьмите, например, OpenOCD и попробуйте работать через него с TAP в ПЛИС. И посмотрите, что при этом происходит на сигналах интерфейса, а далее можно будет делать выводы. Пока же в вашем уравнении слишком много неизвестных.

5 часов назад, 0xd3f48817 сказал:

Во-вторых, сигнал TCK на осциллографе имеет странную форму (см.картинку, схематичное изображение), он выходит пачками по 4 такта и с длительным перерывом между пачками, а в конце вообще выдает 1 или 2 одиночных такта, что вообще не похоже на стандартный протокол JTAG.

Это нормально.

5 часов назад, 0xd3f48817 сказал:

Касаемо SelectMAP и ICAP, я буду рад если кто то объяснит как с этим работать, тоже пока не удается ничего сделать. Спасибо за внимание!

Spartan-6 FPGA Configuration User Guide (UG380) вы читали? Что именно вам в нём непонятно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяюсь к предложению начать с известного инструмента, исключив на первом этапе неизвестный софт (после прохождения IDCODE можете попробовать c собственным софтом и сравнить результаты).

Для начала давайте добъемся правильного считывания IDCODE через OpenOCD. Для этого никаких особых скриптов писать не надо, понадобится только небольшой cfg-file под ваш случай. Все остальное в OpenOCD уже есть, в том числе для работы с вашим USB JTAG Adpater'ом на FT2232.

Вы знакомы с OpenOCD? Знаете, где взять готовый под вашу ОС? Кстати, на какой ОС вы работаете - Linux, Windows?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 часов назад, 0xd3f48817 сказал:

Во-вторых, сигнал TCK на осциллографе имеет странную форму (см.картинку, схематичное изображение), он выходит пачками по 4 такта и с длительным перерывом между пачками, а в конце вообще выдает 1 или 2 одиночных такта, что вообще не похоже на стандартный протокол JTAG.

 

Это нормально - видимо софт (ISE) шлёт команды адаптеру маленькими пачками и ждёт пока они пройдут через usb-стек. От этого появляются задержки. Целевому устройству всё равно - он работает по фронтам TCK, неважно, сколько времени между ними. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 часов назад, makc сказал:

Возьмите, например, OpenOCD и попробуйте работать через него с TAP в ПЛИС. И посмотрите, что при этом происходит на сигналах интерфейса, а далее можно будет делать выводы. Пока же в вашем уравнении слишком много неизвестных.

Благодарю за совет! Думал что можно это проще все сделать, но видимо не судьба.
 

 

17 часов назад, makc сказал:

Это нормально.

Буду знать, просто я консультировался у человека, который работал с JTAG только для контроллеров и ему это тоже показалось странным.

 

17 часов назад, makc сказал:

Spartan-6 FPGA Configuration User Guide (UG380) вы читали? Что именно вам в нём непонятно?

Да, читал. К сожалению в целом не понял как работать с интерефейсами, как записывать и как считывать данные , алгоритм вроде понятен, но не понятно каким образом записать данные по шине, биты которой разбросаны по плате. Вероятно я не в состоянии осознать как это сделать, буду благодарен если поделитесь более понятным манулом или хотя бы малым примером реализации.

15 часов назад, Raven сказал:

Присоединяюсь к предложению начать с известного инструмента, исключив на первом этапе неизвестный софт (после прохождения IDCODE можете попробовать c собственным софтом и сравнить результаты).

Видел в нескольких статьях по ридбеку, но как сказал выше надеялся без стороннего софта это реализовать. 

 

15 часов назад, Raven сказал:

Для начала давайте добъемся правильного считывания IDCODE через OpenOCD. Для этого никаких особых скриптов писать не надо, понадобится только небольшой cfg-file под ваш случай. Все остальное в OpenOCD уже есть, в том числе для работы с вашим USB JTAG Adpater'ом на FT2232.

А есть какой нибудь мануал или пример эксплуатации? Буду благодарен)
 

 

15 часов назад, Raven сказал:

Вы знакомы с OpenOCD? Знаете, где взять готовый под вашу ОС? Кстати, на какой ОС вы работаете - Linux, Windows?

Нет, не знаком, вроде как скачал архив, а что с ним делать не вникал из-за спешки и большого количества вариантов того. ОС Windows

10 часов назад, ObKo сказал:

Это нормально - видимо софт (ISE) шлёт команды адаптеру маленькими пачками и ждёт пока они пройдут через usb-стек. От этого появляются задержки. Целевому устройству всё равно - он работает по фронтам TCK, неважно, сколько времени между ними. 

Я предполагал такой вариант, но все же не понятно тогда почему, когда ему посылаешь подряд тактовые сигналы информация выходит не верная.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 минут назад, 0xd3f48817 сказал:

Я предполагал такой вариант, но все же не понятно тогда почему, когда ему посылаешь подряд тактовые сигналы информация выходит не верная.

Вы понимаете, как работает конечный автомат TAP? И через какие состояния он проходит?

 

16 минут назад, 0xd3f48817 сказал:

Да, читал. К сожалению в целом не понял как работать с интерефейсами, как записывать и как считывать данные , алгоритм вроде понятен, но не понятно каким образом записать данные по шине, биты которой разбросаны по плате. Вероятно я не в состоянии осознать как это сделать, буду благодарен если поделитесь более понятным манулом или хотя бы малым примером реализации.

Смотрим картинку  

image.thumb.png.7f01065109cbe691a70616290a8ea439.png

Соединяем всё как нарисовано на ней.

Внимательно читаем раздел SelectMAP Data Loading и воспроизводим временные диаграммы на шине, чтобы было как на временной диаграмме:

image.thumb.png.67f3b5bb26e2eccca3e76c72df64cade.png

Читаем раздел Bitstream Overview и далее раздел Configuration Packets, откуда понимаем логику работы с регистрами и далее делаем то, что нужно.

Общие вопросы дают общие ответы. Читайте, разбирайтесь и задавайте более конкретные вопросы.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

23 hours ago, 0xd3f48817 said:

В общем ситуация следующая, я хочу считать конфигурационную память из ПЛИС Spartan 6.

 

Главный вопрос - зачем? Если вам нужна копия конфигурации, то ее лучше прочитать откуда-то из другого места. Например, оттуда, откуда она в этот Спартан загружается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, Flood сказал:

Главный вопрос - зачем? Если вам нужна копия конфигурации, то ее лучше прочитать откуда-то из другого места. Например, оттуда, откуда она в этот Спартан загружается.

Возможно это такое задание, которое поставили ТС чтобы он разобрался со Spartan-6 и/или в общем с работой JTAG. Например, учебная работа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 минут назад, makc сказал:

Возможно это такое задание, которое поставили ТС чтобы он разобрался со Spartan-6 и/или в общем с работой JTAG. Например, учебная работа.

Вы правы, это задание на обучение, но проблема в том, что тот кто его дал сам не знает как это сделать. Спасибо вам за советы, в скором времени после ознакомления со всеми возможными вариантами я отпишусь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

56 минут назад, makc сказал:

Читайте, разбирайтесь и задавайте более конкретные вопросы.

Конкретный вопрос. Простите если вопрос глупый, но я не понимаю как подключаться по этим пинам SelectMAP. Дело в том что они не распаяны на плате, то есть они внутренние , как их вывести куда либо, чтобы подключиться к ним? Заранее благодарю за ответ

17 часов назад, Raven сказал:

понадобится только небольшой cfg-file под ваш случай.

Не подскажите где найти этот файл? Заранее спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, 0xd3f48817 сказал:

Конкретный вопрос. Простите если вопрос глупый, но я не понимаю как подключаться по этим пинам SelectMAP. Дело в том что они не распаяны на плате, то есть они внутренние , как их вывести куда либо, чтобы подключиться к ним? Заранее благодарю за ответ

Глупый вопрос: как мы должны догадаться что у вас за корпус ПЛИС, какая плата, какая у неё схема, чтобы дать вам ответ на ваш конкретный вопрос? Иными словами, подключайтесь проводками. 😉

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 hours ago, 0xd3f48817 said:

А есть какой нибудь мануал или пример эксплуатации? Буду благодарен)

Есть, сколько угодно.

1. Собственно, родной официальный OOCD User's Guide.

2. Перевод мануала от microsin, дополненный кое-где полезными примерами и примечаниями из практики.

3. Статья "Программируем/отлаживаем микроконтроллеры STM32 при помощи OpenOCD и FT2232HL" - близко к вашему случаю, правда, там используется SWD, а не JTAG - но это различие мы по ходу движения скорректируем, зато там конспективно почти все шаги описаны.

4. "SCR1 SDK. Digilent Arty Edition. Quick Start Guide" - описаны подготовительные действия (установка WinUSB драйвера для FT2232 через Zadig) и типовая сессия работы с OpenOCD.

Есть и еще, достаточно погуглить.

Сам готовый, собранный OpenOCD можно взять опять же в массе мест:

1. С одного из Unofficial Binary Packages, указанных на сайте самого OOCD.

2. C одного из порталов, выкладывающих сборки GNU Tools, например: SysProgs

 

10 hours ago, 0xd3f48817 said:

Не подскажите где найти этот файл? Заранее спасибо

Этот файлик нужно будет составить самому, возможно, с помощью форума. Поможем. Особенно, если вы здесь приведете привязку портов/пинов FT2232 к сигналам JTAG в вашем адаптере. Ну, либо если у вас такая связь осуществляется проводками, то лучше сделать наоборот - повторить у себя раскладку какого-нибудь известного поддержанного адаптера, например, Olimex.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 hours ago, 0xd3f48817 said:

А есть какой нибудь мануал или пример эксплуатации? Буду благодарен)

В ISE IMPACT есть  JTAG debugger с визуальной катринкой  состояний автомата TAP.  Позволяет в ручном режиме  посылать команды и отлаживать JTAG цепочку.   

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 minutes ago, RobFPGA said:

В ISE IMPACT есть  JTAG debugger с визуальной катринкой  состояний автомата TAP.  Позволяет в ручном режиме  посылать команды и отлаживать JTAG цепочку.   

Это да, но к сожалению, он не умеет работать с произвольным JTAG адаптером на FT2232. А это вторая сторона вопроса у ТС. Да и нет у него проблем с собственно JTAG-цепочкой, с Xilinx JTAG адаптером все нормально работает, iMPACT прекрасно считывает IDCODE (см. самое первое сообщение).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 минут назад, Raven сказал:

Это да, но к сожалению, он не умеет работать с произвольным JTAG адаптером на FT2232.

Умеет, через виртуальный кабель по протоколу xvc.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...