RISCBoy, портативная игровая консоль с открытым исходным кодом, спроектированная с нуля

RISCBoy, портативная игровая консоль с полностью открытым исходным кодом, которую автор (GitHub-пользователь Wren6991) спроектировал с нуля, без использования готовых чипов и решений. Проект включает собственное RISC-V-совместимое процессорное ядро, растровый графический конвейер и контроллер дисплея, остальную инфраструктуру микросхемы, шинную матрицу, контроллеры памяти, UART, GPIO и прочую периферию, а также разводку печатной платы в KiCad. Сам автор описывает RISCBoy так: «Это Game Boy Advance из параллельной вселенной, где RISC-V появился ещё в 2001 году, признание в любви портативным консолям моего детства и пьяное сообщение технологии, которая их питала, отправленное в три часа ночи».
Логика написана на синтезируемом Verilog 2005 и рассчитана на FPGA iCE40-HX8k, микросхему на основе 4-входовых таблиц соответствия (LUT4) с 7680 логическими элементами. По словам автора, уместить в такой скромный объём логики полноценную 32-битную игровую консоль, задача на грани возможного: «нужны лом и вазелин, или всё же аккуратное проектирование». Когда-то HX8k была крупнейшей FPGA, которую поддерживал открытый инструментарий Icestorm, но с тех пор этот инструментарий научился работать и с более крупными микросхемами. Процессорное ядро поддерживает набор инструкций RV32IMC, проходит официальный тестовый набор на соответствие спецификации RISC-V, набор формальной верификации riscv-formal, а также собственные формальные проверки автора, на согласованность обработки инструкций и соответствие шинному протоколу. Поддерживаются регистры CSR в режиме M-mode, обработка исключений и отдельное расширение для векторных внешних прерываний.
Весь путь от исходников до готовой прошивки FPGA тоже открыт: синтез выполняет Yosys, размещение и трассировку, nextpnr, а итоговый конфигурационный файл для FPGA (bitstream) собирает Project Icestorm. Сам автор собирал этот инструментарий только на Linux, по его словам, на Windows это тоже должно быть возможно, но он не проверял, а вот на Raspberry Pi инструментарий собирается и работает. Для программных тестов нужен отдельный набор компиляторов на базе RV32IMC, сборка RISC-V GNU Toolchain с нуля, инструкции для Ubuntu 20.04 приведены прямо в репозитории. На младших FPGA, вроде iCE40 UP5k, RISCBoy можно собрать с урезанным ядром RV32I вместо RV32IMC, но автор прямо предупреждает: если по ошибке слинковать программу для RV32I со стандартной библиотекой, собранной под RV32IMC, «это испортит вам весь день».
Показанная на фотографии плата, ревизия Rev A; она совместима с прототипированием у поставщика iTead, четырёхслойная плата размером 5×5 см обходится в 65 долларов за партию из 10 штук, а электрическая схема доступна в виде PDF. Ревизия Rev B будет выглядеть иначе, но автор ждёт, пока дозреют прошивка и загрузчик, прежде чем переходить к ней; пока его рабочий стенд похож на более ранний проект платы Snowflake. Помимо основной платформы на iCE40, в проекте есть экспериментальная, по определению самого автора, «не основная для разработки», поддержка платы на FPGA Lattice ECP5 (LEF5UM5G-85F-EVN): в этой сборке внешнюю память RISCBoy, 512 КиБ 16-битной SRAM, заменяют 256 КиБ 32-битной синхронной памяти, которую инструментарий Trellis формирует из встроенных блоков памяти самой ECP5.
Репозиторий разложен по назначению: board, файлы KiCad для основной платы и вспомогательных макетов; doc, исходники документации в LaTeX и собранный PDF; hdl, Verilog-код самой консоли, включающий шинную матрицу (busfabric: кроссбар AHB-lite и периферийную шину APB), блок обработки пикселей (graphics), полностью самостоятельное RISC-V-ядро под названием hazard5, контроллеры памяти (mem), мелкую периферию вроде UART/SPI/PWM (peris) и модули верхнего уровня, соединяющие всё вместе (riscboy_core, riscboy_fpga); reference, спецификации использованных стандартов в PDF, включая набор инструкций RISC-V; software, пока, по признанию автора, «не особо полезное» собрание файлов на языке C для системных тестов; test, регрессионные тесты на Verilog и программные тесты, запускаемые в симуляции процессора или всей системы. Симуляция HDL построена на Xilinx ISIM 14.x и проверена только на Linux-версии этого симулятора; для части тестов дополнительно требуется склонировать официальный набор тестов на соответствие RISC-V.
На Hacker News тему опубликовал пользователь mariuz; за 11 часов пост набрал 138 баллов и 20 комментариев.
Ключевые факты
- RISCBoy, портативная игровая консоль с открытым исходным кодом, спроектированная с нуля: собственное RISC-V-ядро, растровый графический конвейер, шинная инфраструктура и печатная плата в KiCad.
- Логика на Verilog 2005 рассчитана на FPGA iCE40-HX8k (7680 логических элементов LUT4); процессорное ядро поддерживает набор инструкций RV32IMC и проходит официальные тесты на соответствие RISC-V, набор riscv-formal и собственные формальные проверки автора.
- Вся цепочка сборки открыта: синтез выполняет Yosys, трассировку, nextpnr, генерацию прошивки FPGA, Project Icestorm; есть экспериментальная поддержка платы на FPGA Lattice ECP5.
- Печатная плата Rev A совместима с прототипированием у iTead, 65 долларов за партию из 10 четырёхслойных плат 5×5 см; ревизия Rev B ждёт, пока дозреют прошивка и загрузчик.
- На Hacker News пост (автор публикации, mariuz) за 11 часов набрал 138 баллов и 20 комментариев.
Почему это важно
RISCBoy показывает, что энтузиаст-одиночка сегодня способен довести проект открытого «железа» до сквозного результата: от собственного RISC-V-ядра и графического конвейера, до готовой печатной платы, используя при этом только открытый инструментарий для FPGA (Yosys, nextpnr, Project Icestorm) и открытые методы формальной верификации (riscv-formal). Это не демонстрационный пример «мигающего светодиода», а попытка воссоздать архитектуру портативной консоли уровня Game Boy Advance на современной открытой элементной базе. Живой отклик на Hacker News, 138 баллов и 20 комментариев всего за 11 часов, показывает, насколько силён интерес сообщества к открытому железу и проектам такого масштаба на RISC-V.
Кому это важно
Инженерам и энтузиастам, которые проектируют собственные процессоры и платы на FPGA, RISCBoy даёт готовый открытый образец с исходниками HDL, платы и документации. Студентам и всем, кто изучает архитектуру процессоров, потому что ядро hazard5 и его формальная верификация показывают, как проверяется корректность реального RISC-V-ядра, а не учебного примера. Сообществу открытого железа в целом, как ещё один заметный проект, где весь путь от исходников до прошивки FPGA остаётся открытым. И, конечно, любителям портативных консолей и ретро-игр, RISCBoy буквально задуман как признание в любви этому классу устройств.
Как это применить
Исходники, документация и файлы платы лежат в репозитории Wren6991/RISCBoy на GitHub; клонировать нужно с флагом --recursive, чтобы подтянуть все подмодули HDL и тестов. Для сборки прошивки FPGA понадобится открытый инструментарий Yosys + nextpnr + Project Icestorm, после чего команда make -f HX8k-EVN.mk bit соберёт образ для платы Lattice iCE40-HX8k-EVN (для платы ECP5-EVN, аналогичная, но помеченная как экспериментальная команда make -f ECP5-EVN.mk BUILD=full bit). Для компиляции программных тестов нужен отдельно собранный RISC-V GNU Toolchain под RV32IMC, инструкции для Ubuntu 20.04 приведены в репозитории. HDL-тесты запускаются командой ./runtests и требуют дополнительно склонированный официальный набор тестов на соответствие RISC-V, а отдельный тест можно отладить графически командой make TEST=helloworld gui. Для физической сборки платы Rev A (файлы, в папке board) можно воспользоваться прототипированием у iTead: 65 долларов за партию из 10 четырёхслойных плат размером 5×5 см.
Можно ли доверять
Ядру RISCBoy можно доверять в границах заявленного: процессор hazard5 проходит официальный набор тестов на соответствие спецификации RISC-V, отдельный набор формальной верификации riscv-formal и дополнительные формальные проверки, написанные самим автором, это заметно строже, чем просто «скомпилировалось и запустилось». При этом проект, работа одного разработчика в свободное время, а не продукт компании: часть компонентов сам автор прямо называет экспериментальной и «не основной для разработки» (поддержка платы на ECP5), а собрание программных тестов честно описывает как «пока не особо полезное». Ревизия платы Rev B ещё не готова, а симуляция HDL проверена только на Linux-версии проприетарного симулятора Xilinx ISIM 14.x, то есть часть процесса сборки опирается не на полностью открытый инструментарий.
Риски и подводные камни
Проект держится на одном авторе, значит, зависит от его личного времени и интереса: сроки ревизии Rev B напрямую привязаны к тому, когда «дозреют» прошивка и загрузчик, а не к заранее объявленному плану выпуска. Программная экосистема сама по себе ранняя: набор файлов на языке C для тестов автор описывает как «пока не особо полезный». Сборку инструментария на Windows автор лично не проверял, только «слышал, что это возможно». Отдельная ловушка ждёт тех, кто соберёт RISCBoy на младшей FPGA (например, iCE40 UP5k) с урезанным ядром RV32I: если по ошибке слинковать программу со стандартной библиотекой, собранной под RV32IMC, это, по словам автора, «испортит вам весь день». Поддержка платы на ECP5, экспериментальная и не является основной платформой разработки, то есть обкатана хуже, чем базовая связка с iCE40-HX8k. Наконец, сама целевая FPGA невелика, 7680 логических элементов LUT4, так что уместить в неё 32-битную консоль автор сам называет задачей на грани возможного, требующей либо изобретательности, либо компромиссов в проектировании.
«Это Game Boy Advance из параллельной вселенной, где RISC-V появился ещё в 2001 году, признание в любви портативным консолям моего детства и пьяное сообщение технологии, которая их питала, отправленное в три часа ночи.»
— Wren6991, автор проекта (README RISCBoy на GitHub)