Выпущено программное обеспечение, которое позволяет сделать из Raspberry Pi3 сетевой JTAG программатор для САПР Altera Quartus Prime. Это решение позволяет удаленно загружать FPGA Altera/Intel и даже вести удаленную отладку с помощью инструмента SignalTap. Далее расскажу,
как использовать это ПО.

Вообще-то все это ПО создавалось ради платы расширения Марсоход2RPI, которая показана выше на фото. Плата имеет на борту ПЛИС Intel Cyclone IV и может подключаться через переходник к Raspberry Pi3 / Pi2 / Pi-Zero. Описывать здесь плату пожалуй подробно не буду, о ней уже писали на geektimes. Однако, ничто не мешает использовать это же программное обеспечение самостоятельно с другими FPGA платами — все, что нужно сделать — это изготовить простой JTAG провод и подключить его к GPIO микрокомпьютера распберри. Там всего-то нужны четыре сигнала tck > GPIO7, tms > GPIO0, tdi > GPIO11 и tdo < GPIO1, ну и конечно, хорошая «Земля»/GND.

Честно говоря, использовать Raspberry Pi в качестве JTAG программатора было возможно и раньше. САПР Quartus Prime позволяет при компиляции проектов генерировать SVF файлы, а сервер OpenOCD может загружать SVF файлы в ПЛИС через GPIO пины распберри.

Однако, к сожалению, OpenOCD нельзя использовать в связке с самой САПР Quartus.
Теперь у нас есть другое ПО, где это возможно. Программное обеспечение можно скачать бесплатно без регистрации и без SMS вот здесь, на сайте проекта.

Архив содержит два файла.

Файл nw_jtag_srv — это исполняемый файл для raspberry pi. Является JTAG сервером, управляемым по UDP/TCP сети.

Вот так запускается nw_jtag_srv на распберри в консоли терминала. Использую sudo, так как нужен доступ к GPIO:



Второй файл из архива jtag_hw_net_blaster64.dll — это драйвер для Altera Quartus Prime. Его нужно переписать в папку c:\altera\17.0\quartus\bin64 ну или другую папку в зависимости от используемой версии квартуса.

После этого, запуская «программатор» из среды квартуса можно обнаружить новый сетевой программатор (конечно если между вашим компьютером и распберри есть сеть/связь). Имя обнаруженного сетевого программатора содержит IP адрес распберри:



Далее все как обычно. Можно делать определение подключенного чипа, загружать ПЛИС.
Более того, сетевой программатор обнаруживается в Altera SignalTap и можно удаленно смотреть сигналы в анализируемой ПЛИС:



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

Надеюсь этот инструмент покажется интересен читателям хабра, а кто-то возможно захочет использовать его в своей разработке.

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


  1. Khort
    30.11.2017 09:02

    «Сетевой программатор» используют уже два десятка лет. Рядом со стендом ставится ноут с программатором (BB1/2, USBblaster, MasterBlaster и т.д.), поднимается Altera JTAG сервер. На удаленной машине ставится клиентская часть. Всё, можно работать удаленно.
    + На ноуте еще часто делают удаленный ресет и включение питания стенда.


    1. Kopart
      30.11.2017 23:57

      Помню было время, когда на Linux в разы медленнее выгружались данные в Signaltap при подключении напрямую к Altera UsbBlaster'у. Исправлял подключением UsbBlaster к компьютеру с Windows и открытием «сетевого доступа» для Linux.


  1. xztau
    30.11.2017 09:18

    А под raspberry pi 2 будет работать?
    А будет ли развиваться программатор MBTF, в частности драйвер под Linux?


    1. nckma Автор
      30.11.2017 09:31

      С распберри пи2 работать будет.
      И под Ubuntu Linux mbtfdi работает с квартусом: marsohod.org/11-blog/335-mbftdi-quartus-ubuntu


      1. xztau
        30.11.2017 11:28

        Спасибо ребята!
        Надо попробовать на своей marsohod 2 с Cyclone III. Есть нюансы работы драйверов на 13-м квартусе?


  1. ValeriyS
    30.11.2017 22:44

    Это супер круто! Уже год как мучаюсь пытаясь получить стабильную работу SignalTap over Ethernet (WiFi) без EthernetBlaster.
    Купил за $7 USB Blaster clone на EBay, подключил к Raspberry PI 3 и установил VirtualHere USB Server на нём. На Windows 10 — VirtualHere USB Client. Основные операции проходят нормально — прошивка, запуск SignalTap, выгрузка внутренних данных и т.п. Однако долговременный коннект (with polling) нестабильный. Примерно через минуты две ожидания триггера SignalTap выдаёт ошибку — что-то вроде «Unexpected data». Когда этот USB Blaster подключен локально никаких проблем нет.
    PS: ноутбук рядом поставить нельзя, т.к. устройство работает на улице.