О самой Школе более подробно можно прочитать на сайте, здесь же детально рассмотрим последовательность действий, позволяющих адаптировать ещё одну плату для отладки примеров, изучаемых в Школе.
"Я его слепила из того, что было" или ещё одно применение бюджетной платы с ПЛИС
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 в окружение с примерами Школы синтеза цифровых схем
Я нигде не нашел пошаговой инструкции по интеграции новых отладочных плат в проект и решил восполнить этот недостаток:
-
Настройка окружения для поддержки ПЛИС 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
. -
Далее, в этой новой папке необходимо создать файл-обертку
board_specific_top.sv
, подключающий верхний уровень примеровlab_top.sv
к конкретной плате. Добавить в папку файл с описанием привязки портов ПЛИС к конкретным сигналамboard_specific.lpf
. Можно также добавить дополнительные.sv
и.v
файлы, необходимые для корректной работы - они также будут автоматически добавлены при синтезе. В моем случае это были файлы контроллера HDMIhdmi.v
и блок формирования тактовой частотыclock.v
. -
Добавить make-файл, описывающий синтез и конфигурирование ПЛИС. В моем случае это вызов
yosys
,nextpnr-ecp5
,ecppack
иopenFPGALoader
с подходящими параметрами.
Запуск примеров на плате
Для запуска примеров необходимо перейти в папку с конкретной лабораторной работой и выполнить скрипт 03_synthesize_for_fpga.bash
, который осуществляет синтез исходников и конфигурирование ПЛИС.
Примеры делятся на несколько классов:
За неимением i2c микрофона под рукой я не смог проверить на плате примеры 3_music
, а вот 1_basics
и 2_graphics
успешно отработали.
Следует отметить, что Yosys и Icarus Verilog имеют очень ограниченную поддержку SystemVerilog и некоторые примеры из microarchitecture
не запускались. Эта проблема решилась при помощи конвертора sv2v, который преобразовывает код на SystemVerilog в Verilog HDL.
Все исходные коды были переданы организаторам Школы и скоро появятся в основном репозитории.
Автор: KoolASIC