Кастомная прошивка ПЛИС

Для чего все это?
Начав изучать ПЛИС ALTRA EPM240 я сделал отладочную плату с надеждой получить модуль способный выполнить множество задач при объединении преимуществ двух разных архитектур (высокую скорость и параллелизм обработки с гибкостью и многофункциональностью).
Получилось вот это. Да, как вы догадались, эта плата — жалкая попытка симбиоза EPM240 & ATmega8 (+ DRAM + other). Ах да, еще из-за моего низкого интеллекта, ее сделали зеркальной…

Платку мне сделали в университете, за что им большое спасибо.
На платке испытывался экран и камера от телефона S65. В дальнейшем предполагается создание платы с использованием ARM, FLASH, внешних интерфейсов USB, UART, MMC, обязательно дисплея и т.д. Эх, мечты… Печатка разрабатывалась в игле (первый раз в нем работал) по принципу лишь бы работало.
На пикте к плате видны присоединенные провода интерфейса 232 и разъемы для конфигурации ПЛИС и АВР. Когда фотал, забыл присоединить жгут к PORT и JTAG, ну вы поняли…


Для прошивки плиски использую жгут проводов из лпт-порта стационарного компа, но доступ к нему не всегда возможен в связи, с чем пришлось извращаться. В ноуте были юсб, а посему — через USB-RS232 переходник данные попадают в мегу8 на плате, которая, уже в свою очередь, если вывод PD3 подключен к земле, прошивает плиску. Через USB-RS232 прошивается и сама авр-ка, по типу бутлоадера.

Для виртуального USB-RS232 я пользуюсь — www.getchip.net/posts/041-uart-to-usb-prostojj-preobrazovatel-na-attiny2313/.

Процесс прошивки ПЛИС таков – в проге _ProgCom.exe указываем файл *.svf, выбираем очистку и запись, жмакаем Program (кнопка большая, чтоб легче было попадать мышкой) и через ~65 секунд чип готов. Скорость такая меня пока устраивает, пока. Для увеличения скорости всего-то и требуеться, что в проге высылать сразу массив данных, а в аврке ускорить работу приема данных, типо того, вроде. Прога примитивная, делалась абы работало, не ругайте ее, ругайте меня. Программа выполнена в Bilder 6, но, я считаю, нужно переходить на что-то другое, да и код не содержит странных библиотек. Пока поддерживается только EPM240T100C5 — TQFP100 :( и АТмега8А, да мне больше и не надо, пока :)

EPM240 прошивается через универсальный интерфейс JTAG (кстати, можно попробовать и для других микросхем с JTAG, например STM).
Про интерфейс JTAG написано немало разными фирмами и вот захотелось разобраться в нем, для чего пришлось разбираться в TAP-контроллере и его управлении. Вот блок-схема:

В основном, все действия сводятся к переходу СДВИГ РИ, загрузкой его 13-битной командой и переходу к состоянию СДВИГ РД, где мы загружаем его данными(максимум 16 бит) с одновременным считыванием данных которые там появились (или были) после исполнения инструкции. Не обошлось и без граблей – долго не мог понять причину неправильной записи инструкции – оказывается, поднимать линию TMS (выход в состояние ВЫХОД1 ИР) нужно уже при последнем бите! Ну что ж, учиться можно бесконечно…
Алгоритм прошивки таков:

— сначала определяем, есть ли чип у нас на линии, для чего читаем сигнатуру и ID коды.
— очищаем кристалл.
— зашиваем в кристалл 3328*2 байта данных CFM.
— зашиваем 512*2 байт UFM.
— пишем DONEBIT, а то будут одни нули (это касается только CFM).

По уарту данные почти не проверяются на ошибки — можно добавит все, что есть у любого бутлоадера – проверку CRC или шифрование данных, например.

Команды программирования кристалла описаны в 1532 BSDL файлах на сайте Альтеры, там же есть и коды команд для режима граничного сканирования, ID сигнатуры.
Вообще чип содержит две сигнатуры, что, на мой взгляд, странно (причем доступ ко второй возможен только из режима программирования), а еще и user code…
Данные выдираются из *.svf. Можно было поступить проще и сразу передавать *.pof – файл, но я не стал разбираться с его структурой, а выбрал файл формата *.svf, за его много операторность и высокую подстраиваемость. Для того, чтобы генерировался файл *.svf нужно убедиться, что установлена галочка в:Assignments->Settings->Device (Device and pin options) ->Programming Files-> Serial Vector Format file.

Схема проста – от переходника два провода идут к выводам PD0 и PD0, а от меги к плиске – PC0-3 включительно.Данные алгоритмы, я считаю, пригодны для обновления прошивки CPLD удаленно, по типу бутлоадера.

АВР работает на частоте 12МГц без делителя. PD3 – перемычка разрешения программирования ПЛИС. Вот фузы для USBASP_AVRDUDE_PROG (биты защиты бутлоадера не вкл.).


В архиве исходник проги и прошивки аврки, мож кому-то интересно.

ЗЫ
1.На момент написания статьи было замечено, что на сайте марсохода тоже занимаются подобным, но раз уж сделал, то не пропадать же…
2. Посоветуйте алгоритм по типу jpg для сжатия картинок с камеры, а то в bmp на флешку сохранять не совсем то.
  • +4
  • 10 июля 2011, 12:27
  • KT3012
  • 1
Файлы в топике: P_PLIS.zip

Комментарии (11)

RSS свернуть / развернуть
Спасибо, интересная статья
Натолкнуло на много мыслей:
JTAG протокол он для всех ведь одинаков? можно ли тогда прошивать плисы не USB-Blaster? а допустим J-link'oм?
На сайте марсохода практически сразу нашел статью про JTAG, так там упоминалось про средство SignalTap. По описанию клевая вешь! Кто-нить её использовал? Не очень понятно сам кристалл должен её поддерживать или он там в виде ip блока идет? И можно ли обойтись квартусом Web Edition из программынх средств?
0
Про сигналтап уже была статья. Вкратце, никакой поддержки в кристалле не требуется, подходит любая FPGA, в WebEdition работает.
0
А чем для JTAG'а не угодил интерфейс SPI на меге? AFAIK JTAG — вариация SPI.
0
  • avatar
  • Vga
  • 10 июля 2011, 13:58
А вдруг SPI занят? я его сделал программным с таким расчетом.
0
Ну, SPI — он, как бы, поддерживает несколько устройств на шине. Правда, каждому требуется свой SS.
0
А ведь реально это SPI вылитый. Ща посмотрел у Xilinx такой же способ прошивки.
зря мучачолся с lpt программатором
0
1+
А почему кастомная прошивка? ))
По сути есть стоковая, тобишь промышленная, а термин кастом (custom) вошел в наш лексикон от фрикеров, которые делали и делают так называемые свои прошивки взамен промышленных.
Или имеется ввиду способ прошивки?
0
Да, последнее. Вообще для меня название подобрать труднее всего.
0
Серьёзное устройство…
0
TQFP100 вверх ногами — сразу видно студента ХИРЭ. Когда они мне первый раз плату делали тоже зеркально было)
0
Хорошая статья.
Ди, перенеси пожалуйста в ПЛИС. Имхо там ей место.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.