Что такое JTAG

JTAG - это аппаратный интерфейс для программирования, тестирования и отладки печатных плат. Об этом интерфейсе, уже много написано. Например, можно почитать здесь: http://ru.wikipedia.org/wiki/JTAG

Еще очень хорошее описание на английском языке можно найти на сайте http://www.fpga4fun.com/JTAG.html

Ну и конечно, компания Altera предоставляет исчерпывающую документацию по использованию JTAG и BST (Boundary Scan Test) в своих микросхемах FPGA и CPLD:

JTAG in Altera devices ( 369066 bytes )

На нашей плате Марсоход тоже есть разъем JTAG для подключения программатора UsbBlaster или ByteBlaster. Через этот разъем мы программируем нашу ПЛИС.

Попробую рассказать, что же такое JTAG своими словами.

Еще в 1980 году группа разработчиков Joint Test Action Group (JTAG) разработала спецификацию для тестирования межсоединений на плате: "boundary-scan testing". Позже эта спецификация была стандартизована как IEEE Std. 1149.1.

Печатная плата и много проводников

Представьте себе, что Вы разрабатываете плату скажем с 5 микросхемами и у каждой микросхемы 100-1000 контактов. Микросхемы соединены между собой тысячами соединений на плате. На заводе плата будет выпускаться партиями десятками тысяч экземпляров. Понятно, что часть плат после монтажа компонентов будет браком. Где-то не пропаяются контакты, где-то трещина в PCB или не получилось переходное отверстие между слоями платы и так далее. Как же все таки тестировать устройства?

Вот собственно первоначальное предназначение JTAG - предоставить производителям средство тестирования собранных устройств.

Производители микросхем обязывались выпускать JTAG совместимые микросхемы. Все микросхемы на плате соединялись специальным последовательным интерфейсом из 4х сигналов TDI, TDO, TMS, TCK.

Boundary Scan Chain

Каждый контакт микросхемы снабжается специальной логикой Boundary Scan Cell. Все эти ячейки Boundary Scan Cell всех микросхем на плате получаются объеденены в одну последовательную цепочку. Это позволяет по запросу с компьютера через интерфейс JTAG менять состояние почти любого вывода любой микросхемы, активизировать его как выход или как вход. Выход одной микросхемы выдает сигнал который передается по проводникам печатной платы и принимается входом другой микросхемы - так проверяется соединение на плате.

Внутри каждой микросхемы с JTAG есть специальный TAP контроллер (Test Access Port), который принимает последовательные команды и выполняет их. TAP контроллер управляет всеми ячейками Boundary Scan Cells. Кроме этого, через TAP контроллер можно выполнять всяческие специфические для каждой микросхемы команды.

Так, например, микросхемы компании Альтера можно: программировать CPLD, загружать образ в FPGA, считывать внутреннее состояние виртуальных пинов, использовать "внутренний цифровой осцилограф" SignalTap (для FPGA) и прочее. Для некоторых микросхем процессоров через JTAG и соответственно TAP контроллер можно вести пошаговую отладку программ, считывать состояния регистров процессора и встроенных контроллеров. В общем, довольно универсальный интерфейс.

Давайте посмотрим, как устроен TAP контроллер.
Работа TAP контроллера описывается вот таким автоматом (state-machine):

TAP (Test Access Port)
Кажется не понятным, но на самом деле все просто.
Интерфейс JTAG передает TAP контроллеру 3 сигнала TDI, TMS и TCK.
TCK - это тактовая частота, на которой работает интерфейс. Состояние контроллера меняется по фронту тактовой частоты TCK согласно состоянию линии TMS. Сигнал TMS определает в какое состояние переходит контроллер на следующем шаге.

Рассмотрим конкретную ситуацию.
Предположим мы находимся в начальном состоянии TEST_LOGIC/RESET. Если TMS=1, то при каждом новом импульсе тактовой частоты TCK мы так и будем оставаться в этом состоянии.

Если на вход микросхемы TMS подать ноль, то при очередном импульсе TCK контроллер переходит в новое состояние RUN_TEST/IDLE.

Если держать TMS=0, то мы так и будем оставаться в этом состоянии. Однако наша цель - это достичь два других возможных состояния CAPTURE_DR или CAPTURE_IR. Если мы попадем в эти состояния меняя TMS соответствующим образом, то дальше мы можем последовательно передать контроллеру либо команду (состояния SHIFT_IR) либо данные (SHIFT_DR).

Передача в контроллер выполняется через сигнал TDI в одном исз состояний SHIFT_IR или SHIFT_DR. Одновременно контроллер может отдавать уже свои данные через сигнал TDO.

Обратите внимание, что из любого состояния можно вернуться в исходное состояние TEST_LOGIC/RESET если держать TMS=1 несколько тактов подряд.

Таким образом, через JTAG интерфейс в микросхему и ее TAP контроллер можно передавать разные команды и данные. Набор команд для каждых микросхем конечно свой и определяется производителем. Нас в первую очередь интересуют команды для программирования микросхем Альтера. Где бы их узнать?

На самом деле и это в общем не проблема. Среда разработки Altera Quartus может генерировать файлы в формате *.SVF. Это текстовый файл, который на специальном языке описывает последовательность действий для программирования микросхемы через JTAG/TAP. В принципе, есть некоторое описание языка SVF. Не знаю насколько это стандарт - вы можете его скачать у нас на сайте (

). В принципе там в текстовом файле SVF и так все довольно понятно интуитивно.

Если Вам нужен файл для программирования микросхемы Altera в формате *.SVF, то зайдите в меню среды Quartus Assignments\Device найдите и нажмите кнопку Device and Pin Options и увидите вот такое диалоговое окно:

 Настройки проекта Quartis II

Нужно установить флажок на Serial Vector Format File (*.svf).
Теперь после компиляции проекта у вас появится этот файл и вы сможете его внимательно посмотреть.

Вот фрагмент этого файла:


!
!CHECKING SILICON ID
!
SIR 10 TDI (203);
RUNTEST 93 TCK;
SDR 13 TDI (0089);
SIR 10 TDI (205);
RUNTEST 93 TCK;
SDR 16 TDI (FFFF) TDO (8232) MASK (FFFF);
SDR 16 TDI (FFFF) TDO (2AA2);
SDR 16 TDI (FFFF) TDO (4A82);
SDR 16 TDI (FFFF) TDO (0C2C);
SDR 16 TDI (FFFF) TDO (0000);


Из этого можно понять, что для того что бы проверить ID (тип) микросхемы перед прошивкой нужно:

  • передать в регистр команд IR 10ти битное число 0x203;
  • выждать паузу 93 такта;
  • передать данные в регистр DR из 13ти бит 0x0089;
  • передать в регистр команд IR десятибитное число 0x205;
  • выждать паузу 93 такта;
  • передавая 5 раз 16ти битное число 0xFFFF одновременно принимаем с TDO собственно ID 0x8232, 0x2aa2, 0x4A82, 0x0c2c и 0x0000

Вот эта последовательность и есть ID микросхемы платы Марсоход EPM240T100C5

  

Добавить комментарий