В конце сентября - начале октября в рамках межрегионального форума «ИТ-трансформация 2025: профессионалы цифрового будущего» [https://itforumaltai.ru/2025/], проходившего в г.Барнаул проводился кейс-чемпионат «Код успеха». В номинации «Промышленная разработка» два из тех кейсов были посвящены проектам на ПЛИС:
Данный кейс родился спонтанно, под влиянием книг Steven Hugg «Making Games for the NES» и «Designing Video Game Hardware in Verilog», а также ряда дискуссий в чате «Школы синтеза цифровых схем» и от этого кейса ожидались как минимум яркие красивые картинки, да и обычно вывод на дисплей/экран и манипуляции с картинками доставляют яркие и незабываемые эмоции (особенно при отладке, да…)
Кейс 2. «RTL-SoC-challenge» – разработка и прототипирование системы-на-кристалле на базе FPGA
Второй кейс родился по образу и подобию SoC Design Challenge 2025 [https://edu.yadro.com/soc-design-challenge/ https://habr.com/ru/companies/yadro/articles/909410/], но в несколько упрощенном (??ооочень не точно) варианте – только RTL синтез с небольшими включениями тестирования модулей.
В этом кейсе участникам в качестве подопытного кролика был предложен вариант многопоточной архитектуры процессора RISC-V, разработанного для учебного курса [https://riscv-alliance.ru/material/risc-v-dlya-fpga-arhitektura-mikroarhitekturnye-realizaczii/] созданного в рамках выполнения гранта Альянса RISC-V на разработку учебных материалов.
Соревнование собрало команды и индивидуальных участников из АлтГУ, ИТМО, МИЭМ НИУ ВШЭ, РТУ МИРЭА, Санкт-Петербургского политехнического университета. Работы оценивали специалисты компании YADRO (огромное спасибо Юрию Гринишкину и Евгению Максимову за помощь и организацию процесса). В целом инженерами отмечен высокий уровень участников и большой объем работы, проделанный за неполные две недели, отведенные на решение задач.
С ночи 21го сентября и до глубооокой ночи 6го октября командам и одиночным участникам были открыты задания.
Сами задачи, как их увидели участники (перечень ПО и оборудования – приблизительный и рассчитывался на случай массового очного участия на финальных стадиях)) – хорошо или плохо, но этого не произошло)):
Кейс 1. Retro Game Console – разработка устройства вывода графики, анимации и текста с интерактивными эффектами ПО – Irarus Verilog, GTK Wave, RARS, Quartus Prime (или иное опционально, в зависимости от вендора плат в наличии у участника). Оборудование - плата(ы) Omdazz CyclonIV (а также совместимые с ними, или опционально любые из списка плат, адаптированных для «Школы синтеза цифровых схем»), переходник UASRT-USB, PS/2-клавиатура (или иная при наличии – например 16-кнопочная для Arduino-плат). Вводные данные(легенда) –участникам предлагается разработать демонстрационный вариант игровой консоли в ретро стиле. Комментарий PM: «ASAP! Сделайте так, чтобы все поверили, что она работает! Пусть хотя бы картинку крутит да текст выдаёт!» Имеется: - допускается использование готовых блоков с открытым исходным кодом при должном ревью и понимании кода (особенно тогда, когда предполагается работа с HDMI-выводом); - при наличии участники могут использовать FPGA-платы отличные, от упомянутых в задании. Workflow: 1 – реализовать контроллер графического дисплея (VGA – по умолчанию, любого другого в зависимости от желания и/или наличия у участника на заочном этапе – от OLED до HDMI), привести его документированное описание, тестирование, демонстрацию работы/запуска; 2 – разработать пиксельный шрифт для цифр и символов латинского алфавита, знаки препинания (по желанию участника набор символов им может быть расширен), продемонстрировать проект шрифта; 3 – добиться вывода заданного блока текста в определенную область дисплея, привести отчет, исходные тексты, результаты моделирования(если проводилось) и тестирования; 4 – разработать пиксельную картинку (битовое поле/спрайт) в формате данных, приемлемом для созданного/выбранного графического контролера 5 – добиться вывода пиксельной картинки в заданную область дисплея, возможность перемещения картинки будет дополнительно оцениваться 6 – разработать векторную каркасную картинку-чертёж (можно в псевдо 3Д), задаваемую координатами точек в картинной плоскости дисплея 7 – добиться вывода векторной картинки в определенную область дисплея, привести отчет, исходные тексты, результаты моделирования (если проводилось) и тестирования; 8 – используя встроенные кнопки платы, или подключив внешнюю клавиатуру добиться эффекта вращения векторной картинки. 9 - создать финальную/отчетную презентацию проекта, представить доклад .
Кейс 2. «RTL-SoC-challenge» – разработка и прототипирование системы-на-кристалле на базе FPGAВводные данные(легенда) – сторонним разработчиком предоставлено легаси-ПО в виде набора исходных текстов многопоточного 32-битного процессора (IP-ядро софт процессора), совместимого (по заявлению разработчика) с открытой архитектурой RISC-V (поддерживаемый набор команд - I+Zcsr). Имеется: - исходные тексты узлов процессора и модуля топ-уровня (самого процессора-заготовки), тестбенчи центрального модуля и отдельных узлов; - документация – описание многотактной микроархитетуры процессора, описание многопоточного варианта, описание отдельных модулей и принципов их построения; - спецификация архитектуры RISC-V. Workflow[возможна более детальная разбивка по этапам/работам – каждый «шаг» оценивается в определенное количество баллов, отчетность идет за каждый «шаг», «шаги» 1-6(7) – заочный этап, 8 (возможно 7-8) – очно/онлайн трансляция]: 1 - изучение исходников и «код-ревью» - рассмотреть исходные тексты, дать оценку «качеству» кода (анахронизмы, стиль, наличие неоптимальных/громоздких конструкций, по возможности «подчистить код», привести отчет по внесенным изменениям, дать обоснования); 2 - как было указано в исходной документации и показал (ну сложно это не заметить код-ревью) блок CSR-регистров – фиктивный («заглушка»), следовательно: добавить «живые» регистры специального назначения согласно списка (таймеры, версии архитектуры, указатель потока, состояние потока), разработать тестбенчи и проверить в симуляции работу добавленных регистров и возможность к ним программного доступа; 3 - добавить в блок CSR-регистров регистры, описанные в документе «harts.pdf» из начальной документации, протестировать их работу(возможность программного чтения-записи); 4 - добиться управления отдельными потоками программным образом (через биты в соотвествующих регистрах, определенных выше), продемонстрировать работоспособность; 5 - модифицировать модуль памяти процессора таким образом, чтобы при активном сигнале сброса была возможность загружать/инициализировать память программ процессора при помощи получения байт с UART-интерфейса, продемонстрировать работоспособность; 6 - синтезировать полученное решение для выбранной/указанной платы FPGA с использованием соответствующей IDE, получить отчеты по задействованным ресурсам, частотным характеристикам работы и тп., изменить настройки оптимизации проекта в среде разработки по одному/ нескольким параметрам – размер/скорость/энергопотребление (можно проработать несколько вариантов и сравнить их между собой); 7 - с учетом интерактивных возможностей отладочной платы разработать демонстрационное приложение, показывающее работу нескольких программных потоков выполнения [очно/онлайн]; 8 - создать финальную/отчетную презентацию проекта, представить доклад
Изначально для удобства выполнения и дальнейшего оценивания работ кейсы были разбиты на несколько этапов.
Однако, по первому кейсу по желанию участников было принято решение, что предлагаемый в задании ход работ — вещь рекомендательная, а не жесткое руководство к действию — и многие с воодушевлением взялись реально за разработку собственных игровых консолей и игр к ним. Требования к «железу» также свели к «что есть под рукой». Конечно, это решение поломало всякие намеки на выстраивание системы оценивания, но….открыло путь к творчеству.
Кейс Retro Game Console ожидаемо стал наиболее популярным среди участников – с ним боролись три «одиночки» и три команды. При этом только двое участников-одиночек пошли по «предписанному» пути решения кейса, остальные – покусились на создание своей игры/консоли. Следует отметить, что все участники подошли к решению задач очень ответственно и комплексно – практически все перед началом воплощения своих идей в HDL коде проводили их программное моделирование – вплоть до создания интерактивных графических приложений.
Алексей Федоров, по видимому, один из самых старших участников – пошел по пути последовательного выполнения заданий кейса, проявив изрядное мастерство и упорство, в итоге таки добившись цели - https://github.com/32FedorovAlexey/retro_game_console - чисто «хардовое» решение в духе аркадных игр.

Неожиданностью стало получение решения от Стрениной Татьяны – да, 3й курс АлтГУ но непрофильной специальности – Информационная безопасность – вполне достойное выступление. Татьяна также пошла по пути выполнения кейса.
Команда ИМТО (К. А. Котов, А. К. Шереметьев, Д.Л. Симоновский) - ребятами была выбрана амбициозная идея - разработка свой собственной игры.
По изначальному плану игра представляет собой минималистичную сцену, где игрок оказывается в тёмной комнате без границ. В центре пространства парит вращающийся куб, над которым расположен единственный источник света, освещающий только этот объект. Камера всегда зафиксирована на кубе, поэтому куда бы ни двигался игрок, взгляд остаётся направленным в его центр. Задача игрока в каждом раунде заключается в том, чтобы по состоянию сцены определить наличие какого-либо “события” и принять верное решение: приблизиться к кубу (если события нет) или отойти от него (если событие было обнаружено). Управление строится на простых действиях: можно приближаться к кубу, отдаляться от него или двигаться вокруг него по окружности влево и вправо, сохраняя текущую дистанцию. Каждый раунд продолжается до тех пор, пока игрок не достигнет предельно допустимого расстояния, а именно не приблизится слишком близко или отойдет слишком далеко от куба. После этого раунд завершается, персонаж переносится на случайную дистанцию, а таймер обнуляется. Демонстрационная версия изначальной задумки (папка game_python): https://github.com/Otkuda/fpga-game-hack/tree/main/game_python.

Отдельно стоит выделить сборную команду Петербурга (Политехнический, МИЭМ НИУ ВШЭ, ИТМО – А.Григорьев, М. Исаева, С.Монастырская, Л. Мирошниченко) – буквально титаническое упорство и нацеленность на результат (и даже после окончания конкурса – «я заставлю это двигаться…»(с) !

Павлов Кирилл из РТУ МИРЭА представил элегантный и остроумный проект учебной игровой ретро-приставки «Брус-16» [https://github.com/Papr1ka/brus16].
Основные элементы Брус-16
- 16-битный стековый CPU. Стековая архитектура выбрана для упрощения создания компилятора:
- 16-битная стековая архитектура с фреймами — локальными переменными в памяти данных;
- код (8192 16-битных слова) и данные (8192) разделены;
- два аппаратных стека: операций (32 ячейки) и возвратов (16 ячеек);
- команда фиксированной длины 16 бит;
- адресация только словами;
- четыре регистра: PC, SP, RP, FP;
- только абсолютные переходы.
- GPU на прямоугольниках и без фреймбуфера:
- кадр строится из 64 аппаратных прямоугольников, для которых задаются X, Y, W, H, цвет и признак абсолютных координат, что облегчает процесс создания игр даже для тех, кто не умеет рисовать. (Нет фреймбуфера — меньше аппаратных ресурсов).



Вэб-демонстрашки игр и анимации можно посмотреть тут: https://true-grue.github.io/Brus-16-Apps/brus16.html. А сам "Брус-16" стал аппаратной частью междисциплинарного проекта выполняемого Кириллом под руководством П.Н. Советова.
Второй кейс мужественно и упорно «грыз» Тимофей Ташевский (ИМиТ АлтГУ) – более десятка исходников на Verilog, простенькие тестбенчи, симуляция работы только по временным диаграммам – всё это было переосмыслено и проанализировано [https://github.com/tashevsky/xmos-mt ]:
- произведён массовый рефакторинг модулей, исправлены присваивания в комбинационной логике;
- модули многопортовых регистровых файлов теперь синтезируются грамотно и задействуют память, а не регистры;
- внедрены дополнительные поддерживающие модули для синтезации на FPGA, а также исправления (особенно в части ROM);
- и… многое другое...
В результате Тимофею удалось добиться того, что «творение сумрачного гения безумного плисовода» начал синтезироваться на Cyclone V (отладочная плата DE0-CV) и даже с приличными ~100МГц…(возможны, конечно нюансы, но...то, что оно в принципе собралось - уже достижение!).


Конечно, решению далеко до продакшн, но….это всего 2 недели, и всего один человек!
В заключение….
Это был мой первый опыт организации подобных конкурсов, по субъективным ощущениям даже не сильно комом (учитывая, что на разработку задач и вообще понятия в каком направлении и что делать также были неполные две недели сентября, да еще совместно со стартовавшим учебным годом)))). Огромное спасибо всем, кто остался неравнодушным, огромное уважение и восхищение участниками и спасибо отделу образовательных инициатив YADRO за информационную и прочую поддержку.
Надеюсь, что проведённое мероприятие и сей опус послужат на благо популяризации и развития ПЛИСоводства и повышения интереса к техническому творчеству в целом.
KeisN13
Балин, круто! Давай еще че нить для конфы плисовой придумаем ) Времени до 29 ноября есть.
forther Автор
Вождь, ну на ту публику можно вообще почти что угодно))) а особенно, если еще в живую и на платах....
инженерный калькулятор;
АЛУ на CORDIC-ах;
повтор творчества Чака Мура
прикрутить векторное расширение к..ну пусть к PicoRV
Ну это пока так, в "порядке бреда"))
KeisN13
Всё што угодно без риск-5 xD