Как стать автором
Обновить

Программатор для ПЛИС

Время на прочтение 3 мин
Количество просмотров 58K
Хочу рассказать о том, как развивается проект http://marsohod.org.

Цель проекта — популяризация проектирования для ПЛИС.
Тема ПЛИС постепенно набирает популярность — и совершенно заслуженно. Ведь теперь мы фактически получили простую возможность создать свою цифровую микросхему. Вам не потребуется нано-фаб и миллион долларов — все можно просто сделать имея компьютер и микросхему ПЛИС на плате разработчика. Вы знаете, что 90% производителей микросхем в мире не имеют собственных фабрик? Они проектируют и тестируют в ПЛИС, а производство заказывают сторонним производителям.

Когда-то и программирование микроконтроллеров считалось чуть ли не чудом. Теперь можно купить платку Ардуино и научить старшеклассника «мигать светодиодом».

Я хочу показать, что и ПЛИС — это вполне доступная технология.

Плата «Марсоход» — это самый простой и дешевый девелопер кит на микросхеме ПЛИС компании Альтера EPM240T100C5. Проект — опен соурс — схемы платы есть на нашем сайте. Кроме того, опубликованно уже более 50 проектов выполненных на базе нашей платы.

Дальше я расскажу о программаторе для ПЛИС. Считается, что учиться проектированию ПЛИС гораздо дороже, чем учиться микроконтроллерам. Отчасти это мнение связано с тем, что программаторы вендоров ПЛИС довольно дороги.

Теперь есть альтернатива. Вы сможете сделать простой программатор USB сами!

Мы разработали очень простой программатор на микросхема FTDI FT2232HL. Вот такой:

Это USB программатор с интерфейсом JTAG. Его схема так же есть на сайте, значит при желании вы сможете его сами сделать:

Программное обеспечение, которое мы сами написали к нему — это SVF Player. Кратко расскажу, как это работает.

Среда проектирования для ПЛИС Altera Quartus II позволяет в процессе компиляции вашего проекта создавать файлы для программаторов в разных форматах: POF, SOF, JAM, SVF. Среда проектирования Xilinx ISE так же позволяет создавать SVF файлы.

Файлы в формате SVF — это простой текстовый файл с описанием команд, которые нужно передать в микросхему ПЛИС через интерфейс JTAG для программирования. Файл SVF (Serial Vector Format) может выглядеть вот так:
!
FREQUENCY 10000000.00 HZ;
!
TRST ABSENT;
ENDDR IDLE;
ENDIR IRPAUSE;
STATE IDLE;
SIR 10 TDI (2CC);
RUNTEST IDLE 10003 TCK ENDSTATE IDLE;
!
!CHECKING SILICON ID
!
SIR 10 TDI (203);
RUNTEST 53 TCK;
SDR 13 TDI (0089);
SIR 10 TDI (205);
RUNTEST 53 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);
!
!BULK ERASE
!
SIR 10 TDI (203);
RUNTEST 53 TCK;
SDR 13 TDI (0011);
SIR 10 TDI (2F2);

В микросхеме позади интерфейса JTAG есть так называемый TAP контроллер, который управляет процессом тестирования и программирования микросхем ПЛИС. В TAP контроллере есть два регистра: регистр команд IR и регистр данных DR.

Основные команды в SVF файле — это передача данных в регистр инструкций (команда SIR) и передача в регистр данных (команда SDR).
Например, команда SIR 10 TDI (203); говорит, что нужно передать в регистр IR десятибитное число 0x203. Еще пример: команда SDR 16 TDI (FFFF) TDO (2AA2); говорит, что нужно передать в регистр DR шестнадцатибитное число 0xFFFF, но в ответ микросхема должна обязательно прислать число 0x2aa2. Еще одна важная команда — это RUNTEST. Она позволяет выдерживать паузы заданной длительности при программирования. Обычно паузы выдерживаются в состояниях TAP контроллера IDLE, IRPAUSE или DRPAUSE.

Правильно исполняя команды из SVF файла можно «зашить» микросхему ПЛИС. Это и делает наша программа SVF плеера MBFTDI.

Интерфейс программирования и тестирования микросхем JTAG имеет всего четыре основных сигнала для передачи данных: TCK — сигнал тактирования, TMS — сигнал управления передачей, сигнал TDI — данные передаваемые в микросхему и TDO — данные читаемые из микросхемы. Для передачи данных в регистры TAP контроллера IR и DR нужно понимать, как управлять состоянием этого контроллера. Попробуем с этим разобраться.

На самом деле все довольно просто. Состояния TAP контроллера описываются вот такой машиной состояний:

TAP контроллер меняет свое состояние во время импульса сигнала TCK и в зависимости от значения сигнала TMS.
Например, видно, что для того, чтобы сбросить TAP контроллер в состояние RESET из любого другого состояния достаточно держать TMS в единице не менее 6 импульсов TCK. Если нужно перейти из состояния RESET в IDLE нужно перевести TMS в ноль и подать хотя бы один импульс TCK. Из IDLE в состояние передачи данных в регистр инструкций SHIFT_IR — это просто 4 импульса TCK при изменении TMS на 1-1-0-0.

В нашем программаторе MBFTDI мы используем микросхему FTDI FT2232HL в которой уже реализовано управление всеми этими линиями JTAG. Наша программа SVF плеера MBFTDI считывает SVF файл, интрепретирует его и посылает команды микросхеме FTDI управляя линиями JTAG. Описание JTAG команд микросхемы FTDI есть вот здесь.

Мы уже протестировали наш программатор с микросхемами Altera серии MAX II, Cyclone II, Cyclone III и некоторыми микросхемами Xilinx.

Конечно, программатор работает и в Windows и в Linux.
Конечно исходники доступны на нашем сайте в разделе загрузки или на GITHUB.

Надеюсь наш проект http://marsohod.org поможет Вам быстрее освоить проектирование для ПЛИС.
Теги:
Хабы:
+38
Комментарии 39
Комментарии Комментарии 39

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн