О самой Школе более подробно можно прочитать на сайте, здесь же детально рассмотрим последовательность действий, позволяющих адаптировать ещё одну плату для отладки примеров, изучаемых в Школе.

"Я его слепила из того, что было" или ещё одно применение бюджетной платы с ПЛИС

Colorlight 5A-75B предназначена для управления светодиодными панелями и не является отладочной платой в привычном понимании этого понятия. Тем не менее, она набрала популярность в среде ПЛИС-энтузиастов благодаря своей доступности, низкой стоимости ( порядка 15$ ) и поддержке Open Source маршрута проектирования на базе Yosys.

Внешний вид платы
Внешний вид платы

Известны различные версии платы. Мне досталась версия v8.2, на которой установлены:

  • Lattice FPGA ECP5 LFE5U-25F-6BG256C ( 25k LUT4 )

  • Winbond 25Q32JVSIQ ( 32 Mbits SPI flash )

  • 2x Realtek RTL8211FP Gigabit Ethernet PHYs

  • 1x ESMT M12L64322A 2M 200MHz SDRAM ( 4 x 512k x 32bit )

  • 12x 74HC245T ( bus transceivers )

Подробную документацию на все компоненты и описание выводов можно найти в репозитории chubby75. Сборка Open Source маршрута со всем необходимым ПО для синтеза и моделирования цифровых схем называется OSS CAD. Последние версии сборки можно найти на вкладке Releases. Версии обновляются ежедневно. Для конфигурирования ПЛИС в состав OSS CAD входит OpenFPGALoader и можно использовать любой подходящий JTAG-адаптер. Список всех поддерживаемых адаптеров можно посмотреть командой openFPGALoader --list-cables. Я использовал имеющийся у меня digilent_hs3.

В репозитории Школы содержатся примеры и упражнения на SystemVerilog, последовательно подготавливающие слушателей к решению реальных микроархитектурных задач. Все примеры можно запускать не только на симуляторе, но и на реальных ПЛИС-макетах. Основными элементами управления и визуализации результатов на отладочных платах являются светодиоды, семисегментные индикаторы и кнопки. В некоторых примерах задействуется монитор.

Напрямую вывести картинку из платы Colorlight 5A-75B на монитор не представляется возможным - на ней не установлен нужный разъём и его приходится докупать. Вариантов тут два. Либо использовать плату расширения VGA PMOD ( стоимостью около 10$ ) с большим числом выводов, либо HDMI PMOD, которая дешевле, требует меньшего числа проводов для подключения, но для формирования HDMI-потока используется повышенная частота на которой работают сериалайзеры ( SerDes ). Я выбрал второй вариант, подключив к плате имеющуюся у меня плату расширения HDMI PMOD ( стоимостью порядка 3$ ) просто с помощью проводов. На сайте fpga4fun имеется хороший пример, позволяющий вывести картинку из ПЛИС-макета на монитор по интерфейсу HDMI, который я и использовал как отправную точку.

На плате имеются 8 разъемов ( J1 - J8 ) для подключения светодиодных панелей, сигналами на которых может управлять ПЛИС. Между разъемами и самой ПЛИС расположены микросхемы буферов, которые сконфигурированы на вывод данных из платы. Это обстоятельство накладывает некоторые ограничения на возможность использования J1-J8 для ввода данных в плату, но для HDMI это не критично. Таблица соответствия номеров контактов разъёмов и портов ПЛИС, к которым я подключил HDMI PMOD, приведена ниже. В такой конфигурации удалось вывести на монитор картинку в разрешении 640x480 24bpp 60Hz.

FPGA

J6-J7

Сигнал

R15

J6.1

blue_p

P13

J6.3

green_p

N14

J6.6

red_p

G16

J7.1

clock_p

T15

J6.2

blue_n

P14

J6.5

green_n

H15

J6.7

red_n

H14

J7.2

clock_n

На плате имеется всего одна кнопка и один светодиод, чего явно недостаточно. В репозитории Школы уже реализована поддержка платы расширения на основе микросхемы TM1638, позволяющей подключить 8 светодиодов, 8 семисегментных индикаторов и 8 кнопок. Подключение осуществляется по трехпроводному интерфейсу с сигналами stb, clk, dio ( двунаправленный ) и цепями земли gnd и питания vcc. Отдельную сложность представляет подключение двунаправленного сигнала dio, т.к. его нельзя завести на разъёмы J1 - J8, которые сконфигурированы только на вывод. Решением является использование разъема J19 на который выведен дублирующий сигнал с кнопки J28 key+ ( подключен к ПЛИС без буфера ), а также gnd и 3v3. Для оставшихся сигналов можно использовать разъем J5. Таблица соответствия номеров контактов разъёмов и портов ПЛИС, к которым был подключен блок кнопок и индикации, приведена ниже.

FPGA

J5, J19

Сигнал

R7

J19.key+

dio

J19.gnd

gnd

J19.3v3

vcc

R12

J5.2

clk

T14

J5.6

stb

Сигналы JTAG: TCK, TMS, TDI, TDO, Vref, GND подключаются к контактам J27, J31, J32, J30, J33 и J34 соответственно. Проще всего это сделать с обратной стороны платы. Тактовый сигнал 25МГц приходит на ПЛИС на порт P5.

Подключение блока питания к плате осуществляется через разъемы J35 или J36, которые непосредственно соединены с выходными буферами разъемов J1-J8. Таким образом, чтобы напряжение на разъемах J1-J8 не превысило допустимые значения, необходимо использовать 3.3В источник питания, а не 5В.

В конфигурации с PMOD HDMI и блоком кнопок и индикации TM1638 плата Colorlight 5A-75B представляет собой уже полноценную бюджетную отладку. Отдельным ее преимуществом является наличие двух гигабитных Ethernet-портов и SDRAM, что редко можно встретить в отладочных платах начального уровня в указанном ценовом диапазоне.

Добавление поддержки Colorlight 5A-75B в окружение с примерами Школы синтеза цифровых схем

Я нигде не нашел пошаговой инструкции по интеграции новых отладочных плат в проект и решил восполнить этот недостаток:

  1. Настройка окружения для поддержки ПЛИС Lattice ECP5 и OSS CAD осуществляется скриптами 00_setup.source_bash и 00_setup_yosys.source_bash. Беглый их анализ показал, что необходимо в директории boards основного репозитория basics-graphics-music создать папку, в названии которой обязательно должны быть слова yosys и ecp5, тогда скрипты автоматически добавляют новую плату при запуске основного скрипта настройки окружения check_setup_and_choose_fpga_board.bash.

  2. Далее, в этой новой папке необходимо создать файл-обертку board_specific_top.sv, подключающий верхний уровень примеров lab_top.sv к конкретной плате. Добавить в папку файл с описанием привязки портов ПЛИС к конкретным сигналам board_specific.lpf. Можно также добавить дополнительные .sv и .v файлы, необходимые для корректной работы - они также будут автоматически добавлены при синтезе. В моем случае это были файлы контроллера HDMI hdmi.v и блок формирования тактовой частоты clock.v.

  3. Добавить make-файл, описывающий синтез и конфигурирование ПЛИС. В моем случае это вызов yosys, nextpnr-ecp5, ecppack и openFPGALoader с подходящими параметрами.

Запуск примеров на плате

Для запуска примеров необходимо перейти в папку с конкретной лабораторной работой и выполнить скрипт 03_synthesize_for_fpga.bash, который осуществляет синтез исходников и конфигурирование ПЛИС.

Примеры делятся на несколько классов:

За неимением i2c микрофона под рукой я не смог проверить на плате примеры 3_music, а вот 1_basics и 2_graphics успешно отработали.

Демонстрация запуска на плате примеров из набора basics
Демонстрация запуска на плате примеров из набора basics
Демонстрация запуска на плате примеров из набора graphics
Демонстрация запуска на плате примеров из набора graphics

Следует отметить, что Yosys и Icarus Verilog имеют очень ограниченную поддержку SystemVerilog и некоторые примеры из microarchitecture не запускались. Эта проблема решилась при помощи конвертора sv2v, который преобразовывает код на SystemVerilog в Verilog HDL.

Все исходные коды были переданы организаторам Школы и скоро появятся в основном репозитории.

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


  1. KeisN13
    10.10.2024 07:31

    Больше плат в зоопарк Школы цифрового синтеза!


  1. radiolok
    10.10.2024 07:31

    О, круто, спасибо. Я как раз подобную платку вынужден буду использовать по прямому назначению - распределению изображений по газоразрядным панелями 64х64 :)

    А то что в нее еще можно залезть и под себя подпилить в случае чего - не знал. А родная прошивка бесследно исчезает? или где-то есть исходники по реализации HUB75 интерфейса?

    По хорошему, правда, нужна мастер-плата с HDMI или VGA входом, которая уже будет на тайлы все раскидывать. Так что от HDMI все равно не отделаться...


    1. KoolASIC Автор
      10.10.2024 07:31

      Родную прошивку в исходниках я не видел, но её же можно сдампить из внешней SPI-flash и сохранить ( чего я не сообразил сделать ). Беглый поиск по github показал, что HUB75 в исходниках - не проблема.


    1. DmitryZlobec
      10.10.2024 07:31

      Ну вот, Вы можете написать статью про целевое использование этой платы, ученикам Школы будет интересной узнать как используется ПЛИС, а то все ЦОС да RISC-V )))


      1. radiolok
        10.10.2024 07:31

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

        По HUB75 для начала надо новые драйвера запилить для газоразрядных тайлов 64х64. Ключи есть, с плисами на самих тайлах правда еще не определился - даже описанная в статье платка - дорого если их 12 штук в проект требуется.

        Эскиз проекта в масштабе пользователя
        Эскиз проекта в масштабе пользователя


  1. aystarik
    10.10.2024 07:31

    Есть более интересный вариант этой платы на той же FPGA с двумя 50 пин разъемами вместо этой "ёлочки". Если интересно, то могу куда-нить выложить пинаут, но его проверять надо...