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

    Хочу рассказать о том, как развивается проект 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 поможет Вам быстрее освоить проектирование для ПЛИС.

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 39

    • UFO just landed and posted this here
        +1
        мы делаем плату прежде всего для себя. У меня дома несколько устройств работают под управлением платы Марсоход. На все платы ставить программатор мне не очень хочется — это просто дороже.
        • UFO just landed and posted this here
            +2
            Cтоимость комплектующих + увеличение размера PCB + увеличение стоимости монтажа и тестирования и т.д.
            Сэкономить можно, разве что, на упаковке.
            При этом, увеличение размера самого устройства — труднее куда-нибудь встраивать.
            Увеличение потребления энергии — многие девайсы питаются от батарей.
            Увеличение веса — есть девайс, который, практически, «летает»(«летающая тарелка»).
            Вообщем сплошные «минусы».
            • UFO just landed and posted this here
                0
                ~400..500р, к сожалению.
                • UFO just landed and posted this here
                    0
                    digilent кстати кажется делал платы с CPLD и ft2232 в роли jtag на борту.
                      0
                      Меня больше всего расстраивает в этой истории, что для изготовления программатора
                      на микроконтроллере нужен другой программатор — для микроконтроллера, а для изготовления другого программатора
                      нужен третий… эта цепочка может не закончится.
                      Конечно, на FTDI дороже, зато работает сразу, даже PID и VID зашивать не нужно.
                        0
                        ну всем микроконтроллерам нужен программатор. последнее время есть куча примеров программирования их через com-port (к примеру, для STM32 он не нужен)
                        –1
                        Цепочка закончится, когда вы начнёте что-то делать.
                        А встроенный програматор не нужен марсоходу, всегда можно из г-на и палок собрать программатор на LPT.И не смотрите на stm и lpc демо платы, эти монстры могут себе позволить насчёт объёмов такое.
                          0
                          *за счёт
                            +1
                            LPT в 21 веке? Не обижайтесь пожалуйста, но я процитирую известного персонажа, Карлсона: Ты что, с ума сошёл?

                            А если серьёзно сейчас самый доступный интерфейс это как раз USB! И именно на USB надо ориентироваться. Даже COM есть далеко не везде, а уж про LPT и говорить не хочется, да и спалить его можно чем угодно и как угодно.

                            p.s: так же хочу напомнить что USB хосты уже есть и в «совсем» мобильной технике: планшетах и коммуникаторах. В общем не надо опираться на старьё.
                          • UFO just landed and posted this here
                              –1
                              В любом случае, при производстве, программирование — еще одна технологическая операция,
                              которой хотелось-бы избежать.
              0
              Пишите дальше. Например как делать RS-триггеры и так дальше. Ну и среду(ы) разработки кратко опишите.
                0
                Меня всегда интересовал вопрос, ответ на который сходу не нагуглил.
                Этот JTAG умеет отлаживать AVR?

                З.Ы. Есть пара советов по поводу, что jtag'а, что марсохода, нужно увеличить степень презентабельности плат, а то выглядит как то не очень кавайно =) Сделать какую нить масочку цветную, по ней красивой шелкографией пройтись, да и сами дорожки сделать не такими топорным, ТОПОР вам в помощь =) Посмотрите как сделаны платы например у sparkfun.com LilyPad.
                  0
                  а они открывали свой протокол?

                  у Xilinx описание комманд и формата svf лежит в виде даташита, и ничего не останавливает вас от создания программатора на любом доступном железе, а AVR открывал свою реализацию JTAG?
                    0
                    В этом и был вопрос, понял спасибо, протокол jtag у AVR закрыт. А жаль =(
                    0
                    JTAG, вопреки распространненному мнению, это не отладочный интерфейс. Отладка через него это побочная фича. Которой может и не быть.
                    0
                    Как я понял, программатор не работает из Quartus, необходимо генерировать файлы и шить из отдельной утилиты?
                      0
                      зачем делать велосипед, если уже много лет существует UrJTAG — urjtag.org/book/_system_requirements.html, который поддерживает много кабелей и схем, и широкий спектр железа?

                      сам шил им CoolRunner-II.
                        0
                        Ну и как, по вашему, это подходит для «начинающих».
                          +1
                          а какой смысл изучать cpld и логику, при отсутствии элементарных навыков работы с командной строкой?
                          0
                          а еще вроде OpenOCD умеет проигрывать SVF
                          0
                          еще сущетвует SVF плеер на ft232 (дада, той самой за 3 бакса), правда у меня так и не получилось его нормально заставить работать.

                          openschemes.com/2011/10/28/ft232-bit-bang-jtag-programmer-revision-0-11/
                            0
                            а с ChipScope \ SignalTap он работать будет?
                              0
                              С ChipScope не знаю, а с SignalTap не будет. Для этого нужен свой драйвер.
                              Мы пробуем таковой написать, но пока «процесс в процессе». Надеемся…
                                0
                                а не было у Вас идей написать свой сhipscope\signaltap? с какой нибудь уникальной функциональностью?
                                сюда входит задача и парсинга HDL, которая несколько нетривиальна, имхо…
                              0
                              Прочитал уже не одну статью про ПЛИС, в т.ч. в википедии. Но так и не понял, чем ПЛИС отличается от микроконтроллеров (МК)? И то и то программируется, программатор для ПЛИС, судя по этой статье, такой же как для МК.
                                +2
                                Чтобы лучше понять что такое ПЛИС надо начать с истории.
                                Вначале была транзисторно-транзисторная логика (TTL). Эта логика как ни странно, содержала логические элементы. Из этих элементов делали всяческие схемы.

                                Но сложность схем все возрастала и необходимо было как то уменьшать количество используемых микросхем. Как вариант решения были созданы базовые матричные кристаллы (БМК). Но у них был один недостаток — это была фактически заказная микросхема и производилась только на заводах. Разработчикам таких схем было очень тяжело. Одна ошибка — и партию выкидывать. Да и не всегда нужно такое количество микросхем. Не будут же перестраивать производство для одной-двух микросхем.

                                Поэтому дальше были изобретены программируемые логические схемы (PAL). Здесь схема микросхемы определялась пережиганием специальных перемычек. Но у этих микросхем тоже был недостаток. Они были однократно программируемыми.

                                Поэтому следующим этапом стало появление многократно программируемых логических интегральных схем (ПЛИС). И здесь уже в зависимости от способа программирования возможны варианты. CPLD — схема коммутации модулей заносится в специальное ПЗУ. Такие схемы могут работать сразу после включения устройства. FPGA — схема коммутации заносится в оперативную память при включении питания. Поэтому для них нужна схема загрузки схемы (программы) для начала работы.
                                FPGA на данный момент является вершиной развития ПЛИС.

                                Что такое микропроцессор (микроконтроллер), я объяснять не буду.

                                Теперь про то, что роднит микропроцессоры и ПЛИС на превый взгляд — среда программирования.

                                Микропроцессор предназначен для выполнения только определенной на этапе разработке системы комманд. Шаг влево, шаг враво — расстрел вызывает ошибки выполнения кода.
                                ПЛИС же наоборот — набор логических элементов. Количество их доходит до миллиона. Создать такую схему (с миллионом логических элементов) можно, но работа будет та еще. Поэтому для облегчения труда проектировщика придумали всяческие языки высокого уровня (VHDL, Verilog и т.д.), которые помогают абстрагироваться от логических элементов и сосредоточится на логике работы устройства. А компилятор сам разберется какие модули как скоммутировать. На выходе мы получаем схему коммутации логических элементов ПЛИС.

                                Поэтому внешне программирование микропроцессоров и ПЛИС выглядит одинаково. Но вот физический смысл проиходящего разный.

                                Если посмотреть на ПЛИС как на черный ящик с n входами и m выходами, то ОЗУ или ПЗУ компьютера можно считать как вариант ПЛИС, где n — это адрес, m — данные.
                                  0
                                  эх, теперь бы это все в одно приложение уместить, чтобы девушкам, которые спрашивают «чем ты занимаешься?» можно было легко ответить. :)
                                    +1
                                    Не думаю, что объяснение таких подробностей девушкам приносит рассказчику +5 к обаянию
                                  0
                                  МК это небольшой компьютер, есть система команд, память, периферия. Все жестко задано и разработано уже заранее. Ты можешь только программу этого компа менять.

                                  Плис это набор ячеек из которых ты можешь сделать что угодно, в том числе тот же МК. Причем он может быть именно такой какой ты хочешь. Т.е. плис сложней, но универсальней.
                                  0
                                  За такие принципиальные схемы надо убивать лопатой :/
                                    0
                                    Да разве-ж это схема? В свою бытность начинал с ремонта телевизоров.
                                    Сначала были ламповые, черно-белые, потом появились цветные… — вот это были СХЕМЫ.
                                    А по существу, технический уровень люней бывает очень разный. Некоторым достаточно
                                    озвучить только идею, дальше они могут сделать все сами. Других нужно «ткнуть» в даташит.
                                    А вот что делать если и после этого человеку осталось ( мягко говоря ) не все понятно.
                                    Какой смысл перерисовывыть схему из даташита «один-в-один», нужно, наверное, как-то
                                    по другому. Как один из вариантов, на мой взгляд, «конструктивно-схемотехнически».
                                    Может можно/нужно и по другому, был-бы рад услышать как?
                                      +1
                                      Хрен с ними с гостами. Хрен с ними с стандартами, но подписать то выводы разьемов и микросхем было бы можно.

                                      USB например. Что это за хрень? Как новичку понять что имеется ввиду, какой провод куда? Где DP где DM? А может он не найдет точно такой разьем или разьем будет другого производителя и контакты будут по другом стоять?

                                      Правый разьем, что это? Зачем он нужен?

                                      Микросхема. Это ваще абзац. Ладно, примем за данность, что ардуиновая зараза проникла и в логово ПЛИС разработчиков, но выдать микруху даже не подписав все выводы это уже за гранью добра и зла.

                                      Новичок бывает в трех диодах и шести резистох такие баги наделает (у меня на страничке программатора Громова таких процентов 10), то тут же напутает и накосячит везде где только можно.
                                    0
                                    Спасибо, это уже более конструктивная критика, а-то сразу «лопатой».

                                    Only users with full accounts can post comments. Log in, please.