Дмитрий Гринберг опубликовал объёмный текст с разбором своей неприязни к RISC-V — статью можно прочитать здесь: RISC-V: They Should Have Known Better - Dmitry.GR. Материал попал на первую полосу Hacker News и вызвал бурную дискуссию на Lobsters. Это самая серьёзная критика архитектуры за последнее время, и хотя весь свой стек уже переведён со STM32 и ARM на RISC-V — год назад об этом даже было снято видео Goodbye STM32 ARM – Meet the CH32 RISC-V Chips That Replaced It! — многое в аргументации Гринберга выглядит предвзято.
Защищать комитет по разработке ISA не входит в задачу этого текста — RISC-V International в своё время отказал автору в членстве в своей «золотой башне». Что касается самой архитектуры: сжатые смещения при записи в память действительно выглядят странно, а то, что Zicsr не входит в базовый набор по умолчанию и его нужно отдельно запрашивать — тоже не самое удачное решение. С этими проблемами пришлось столкнуться лично, и о них написана почти готовая на 80% книга про CH32V003 — как раз один из тех чипов типа «RV32E», которые упоминает Гринберг.
Стоит сразу обозначить точку, с которой ведётся разговор — от неё зависит, какие части этого спора кажутся важными.
Работа ведётся из Тринидада и Тобаго — небольшого островного государства у берегов Венесуэлы. Когда нужна плата для разработки, речь не идёт о доставке на следующий день — сначала нужно выяснить, доставляет ли продавец сюда вообще, что сделает с посылкой таможня (если она вообще дойдёт), и сколько всё это будет стоить в местной валюте. «Бесплатная доставка» от Digikey, Mouser или любого американского или европейского производителя — это не про этот регион. За доставку чипов стоимостью в доллар приходится платить от $60 до $200, тогда как в других странах их получают бесплатно. Известная компания по производству печатных плат, которая сама предлагала спонсорство, в итоге отказала — исключительно из-за стоимости доставки в этот регион. Вот скриншот:

Студенты, которых хочется обучать, находятся в такой же ситуации — как и студенты в Нигерии, Бангладеш и везде, где о людях не думают, когда пишут блог-посты об индустрии. С этой позиции разница между деталью за десять центов и деталью за доллар — не погрешность округления и не мелочь, которую можно проигнорировать по пути к интересной дискуссии о кодировках инструкций. Это разница между классом из тридцати студентов, у каждого из которых есть свой чип, и классом из тридцати студентов, наблюдающих за одной демо-платой на всех (если она вообще есть). Заботиться об элегантности набора инструкций можно позволить себе только тогда, когда железо уже лежит на столе. А вот доберётся ли оно до стола вообще — вопрос первичный. Именно поэтому абзац, который большинство читателей пролистали мимо, представляется самым важным во всей статье Гринберга.
Гринберг упустил, что RISC-V создаёт пространство для тех 99%, что находятся за пределами «мира» (в этом контексте «мир» — это в основном США и Европа), и это никак не связано с архитектурой.
Он выводит требования и приходит к RV32EC
Прежде чем перейти к арифметике прерываний и жалобам на кодировки, Гринберг делает нечто аккуратное. Он задаётся вопросом, для чего вообще нужно дешёвое ядро микроконтроллера. Ответ: оно сидит внутри более крупного чипа, дёргая регистры и настраивая аппаратные блоки в «MP3-плеере, SD-карте, USB-флешке». Основную работу делает окружающая заказная логика. Из этого выводятся требования к такому ядру: низкая задержка прерываний, маленькая площадь кристалла и хорошая плотность кода, поскольку код хранится в ROM или SRAM, а оба типа памяти дороги в пересчёте на байт. Отсутствие аппаратного делителя, возможно даже умножителя, поскольку арифметики немного. Отсутствие разделения привилегий, потому что там никогда не выполняется недоверенный код.
Затем он сам формулирует вывод:
«Но, — скажете вы, — вы же просто описали RV32IC (или RV32EC)!»
А чуть раньше — прямым текстом:
Я на 100% уверен, что RISC-V со временем займёт нишу максимально дешёвых одноразовых микроконтроллеров.
Итак, самый убедительный критик RISC-V этого месяца сел, вывел из первых принципов, каким должно быть дешёвое ядро микроконтроллера, пришёл к набору инструкций, который реализует чип за десять центов, и заявил, что этот сегмент достанется RISC-V.
Он выводит обоснование существования чипа, а затем всю оставшуюся часть статьи выражает раздражение тем, что чип существует.
Это почти сатирично.
Претензия Гринберга — к тому, заслуженным ли путём достигнут этот результат. Это законный вопрос, и понятно, почему он его беспокоит. Однако это не тот вопрос, который влияет на выбор архитектуры для изучения — чип уже лежит на полке в любом случае.
В чём разногласие действительно серьёзное
Центральный тезис Гринберга — первый в статье, и он весомее любых претензий к кодировкам:
Проще говоря, то, что нужно высокопроизводительному процессору, диаметрально противоположно тому, что нужно маленькому экономичному ядру микроконтроллера.
Вывод, который он делает: ни одна ISA не может обслуживать оба конца спектра, и поклонники RISC-V обманывают сами себя. В теории посылка верна. Но вывод из неё не следует, и это легко показать на трёх чипах, лежащих сейчас на столе.
CH32V003. Дешёвый «RV32EC» с шестнадцатью регистрами, без умножителя, без делителя, только машинный режим, 2 КБ SRAM, 16 КБ флэша, десять центов — именно то ядро, которое описал Гринберг. На этих чипах уже выпущено два продукта: монитор заполненности мусорного бака с ToF-датчиком, светодиодом и air tag, и сельскохозяйственное устройство для клиента, открывающее и закрывающее дверь в заданное время. Также это отличная одноразовая деталь, как показано в проекте свистящего выключателя Clap Switch Is Dead. Here's the RISC-V Powered Whistle Switch!, и, на взгляд автора, лучшая замена переоценённому устаревшему Arduino — Did Arduino Q Ruin Arduino? - Here's how to Switch to RISC-V with the CH32V003.
CH32H417. Двухъядерный MCU, не имеющий равных по соотношению производительности и цены, находящийся на верхнем краю сегмента микроконтроллеров. У него есть ядро QingKe V5F на 400 МГц вместе с V3F на 144 МГц, 896 КБ SRAM, 960 КБ флэша, USB 3.2 Gen1 со встроенным трансивером 5 Гбит/с, 100M Ethernet MAC и PHY, изолированный SerDes-трансивер, высокоскоростной интерфейс 500 МБ/с, SDMMC, интерфейс камеры, контроллер дисплея, графический ускоритель и так далее. На этом чипе запущен веб-браузер — I Built a Web Browser on a RISC-V Microcontroller (No Linux), генерация изображений котов на основе квантовой энтропии по методу GAN — Schrödinger's De/Motivational Quantum Cat: GAN Image Generation on CH32 RISC-V Microcontroller, и распознавание лиц в реальном времени — Real Time Facial Recognition on The Edge With CH32H417 RISC-V MCU — всё это в менее чем 150 КБ ОЗУ. Есть и другие проекты, но записать удалось только некоторые из них.
Baochip. VexRISC-V с MMU, построенный на стеке, открытом от кремния до операционной системы — Baochip-1x: A Mostly-Open, 22nm SoC for High Assurance Applications « bunnie's blog — работающий под управлением Xous betrusted-io/xous-core: The Xous microkernel, спроектированной легендарным хакером железа «bunnie» Хуангом — Rust-микроядром с реальной изоляцией процессов. Разделение привилегий — именно то, что, по словам Гринберга, дешёвому сегменту не нужно и поэтому не предоставляется. Помимо Xous чип поддерживает такие ОС, как seL4 vk2seb/bao1x-seL4: seL4 port to baochip-1x и Linux pkoscik/baochip-linux: An attempt to boot mainline Linux on a stock Dabao board. Для этого чипа написан bare-metal C SDK ArmstrongSubero/dabao-sdk: Bare metal C SDK for the Baochip-1x RISC-V SoC, и именно этот чип оказался внутри бейджа DEFCON 34 в этом году The New Defcon Badges Pack a Unique Open Source Chip That Doubles as a Security Key | WIRED.
Можно упомянуть и эмулятор NES, написанный для доллларового чипа ESP32-C3 на базе RISC-V — NES Emulator on $1 ESP32-C3 RISC-V Microcontroller, или эксперименты с Linux на Orange Pi RV2 OrangePi RV2 5 Minute Unboxing and Setup | RISC-V Ubuntu Linux, настройка которого занимает пять минут и который работает без перерыва с момента первого включения.
Можно долго перечислять, насколько разнообразны и доступны выпускаемые сейчас чипы RISC-V, но это уже уведёт слишком далеко от темы.
Все эти ссылки нужны, чтобы показать: у всех этих чипов один и тот же базовый набор инструкций, и экспертиза по всем ним была наработана менее чем за год и менее чем за $100 по всему стеку — от одноразового кремния до уровня ПК, не считая, разумеется, вычислений уровня дата-центра.
Менее чем за $100 с доставкой удалось исследовать целый вертикальный стек на одной архитектуре. Из-за гонки в области ИИ Orange Pi RV2 сейчас подорожал, но на момент выпуска стоил $30 с бесплатной доставкой. Примерно за 7 долларов было куплено 50 штук CH32V003 вместе с отладчиком, плата CH32H417 стоит $20 на Analog Lamb и использует тот же дешёвый (и официальный) отладчик, что и CH32V003, а плата Baochip Dabao (о которой, кстати, написана книга — вот она: The Dabao Book - Payhip) на момент покупки на Crowd Supply стоила $9.50 — две платы с доставкой обошлись в $35, итого меньше $100. Для сравнения, один только отладчик Segger J-Link для ARM стоит около $600, а с учётом доставки — примерно $200 за EDU-версию без единого чипа или платы в комплекте.
Возвращаясь к RISC-V: базовый набор одинаков для всех этих чипов. А это значит одинаковая модель регистров, одинаковое соглашение о вызовах, одинаковый инструментарий. Да, расширения различаются, но то, что было изучено при написании ассемблера для десятицентового CH32V003, не переставало быть верным ни для одного из остальных чипов — будь то двухъядерный MCU, SBC с Linux или продвинутый заказной чип безопасности с новой операционной системой. Навыки переносились настолько хорошо, что в каждом случае за несколько часов удавалось настроить инструментарий, сосредоточиться на приложении и при отладке чувствовать себя как дома. Всё, что нужно для работы с этими чипами — руководство по ISA и компилятор C.
Теперь стоит прикинуть цену такого же пути по другую сторону — забыв про x86-64 и его дуополию, минное поле патентов и многотысячедолларовые отладочные пробники — на примере ARM.
Эквивалент CH32V003 — это Cortex-M0, ARMv6-M, что-то вроде STM32F030. Уровнем выше — Cortex-M7, ARMv7-M. Чтобы получить MMU в чипе для Linux, seL4 или Xous, нужен уже прикладной процессор уровня ARMv8-A. Это разные профили ARM с существенно разными моделями привилегий, исключений и системными моделями, так что переход на ступень выше требует куда более серьёзного переобучения, чем просто включение ещё одного расширения RISC-V. Пришлось поработать со всеми этими профилями лично, чтобы в этом убедиться.
А на верхнем краю этого диапазона разрыв — это уже не вопрос кривой обучения. Не существует микроконтроллера Cortex-M со встроенным PHY USB 3.0 SuperSpeed. Ближайший двухъядерный чип ARM — STM32H747, неплохой чип, но такого PHY в нём нет. Если нужен USB 3.0, приходится покидать класс микроконтроллеров вообще: i.MX 8 или RK3xxx, то есть Cortex-A. А там нужен MMU, Linux, DDR, PMIC, и плата, которую уже не развести в два слоя. Либо остаётся M7 плюс внешний мостовой чип.
Плата для разработки на H417 стоит около двадцати долларов. H747 в корпусе TFBGA240 имеет срок поставки от производителя в двадцать недель, стоит примерно столько же (только чип, без всего остального, к чему его подключить), и Mouser требует удостоверение личности перед оформлением заказа, а Digikey, как известно, отказывает в продаже в зависимости от местонахождения покупателя и его имени — об этом рассказывал известный ютубер Хусейн Али с канала NorthridgeFix: Starlink Repair - Digi-key refused my order. И ещё около $60-100+ за доставку в упомянутый регион. При этом H417 можно приобрести на официальном магазине WCH на Aliexpress с бесплатной доставкой и без всякой верификационной волокиты. И это ещё не касаясь чипов Cortex-A с MMU, их инструментов отладки и фрагментации экосистемы.
Граница — не техническая
Вот момент, который сильнее всего подрывает аргументацию Гринберга, и он не имеет никакого отношения к кодировкам. Он трактует разрыв между маленьким ядром и большим как архитектурный факт, вытекающий из противоположных требований. Для чипов ARM это не архитектурный факт. Это ГРАНИЦА ПРОДУКТОВОЙ ЛИНЕЙКИ, закреплённая лицензированием. Пробовал ли кто-нибудь добавить MMU в Cortex-M? Физические компромиссы реальны, но разница в том, что в случае RISC-V владелец ISA не решает за разработчика, где именно должна проходить эта граница. Если на ARM нужна виртуальная память — придётся лицензировать Cortex-A, другое семейство ядер, другой профиль, другие переговоры, другая royalty. Никакого постепенного пути нет — есть стена, а по ту сторону стены сидит отдел продаж.
Сравните это с тем, что произошло с Baochip. Привилегированная спецификация RISC-V определяет режим супервизора и постраничную адресацию Sv32 как опциональные вещи, которые реализация может предоставить. VexRISC-V — открытое ядро, кто-то добавил в него MMU. Bunnie собрал вокруг него чип и запустил на нём микроядро с настоящей изоляцией процессов, с которым инженер из Тринидада — страны, чьё название даже не всплывает в кругах, связанных с ISA — может экспериментировать за небольшие деньги и обучать этому других людей в регионе.
Вот как выглядит свобода.
Никто не спрашивал разрешения, никто ничего не подписывал, никто не платит royalty за каждый выпущенный чип, и любой желающий может изучить кремний вплоть до уровня RTL. Так что когда Гринберг в своей статье перечисляет разделение привилегий среди того, что дешёвому сегменту не нужно и потому не предоставляется, он на самом деле описывает свойство продуктовой сегментации ARM и приписывает его дизайну набора инструкций. В случае RISC-V это просто галочка в привилегированной спецификации: её не ставят в десятицентовом чипе, потому что она стоит площади кристалла, которую жалко тратить, и ставят, когда она нужна — а набор инструкций под капотом остаётся одним и тем же в обоих случаях.
Это и есть реальная разница между двумя экосистемами, и именно поэтому фраза «одна ISA не может обслуживать оба конца спектра» звучит по-разному в зависимости от того, с какой стороны на неё смотреть. С одной стороны концы разделены физикой и стоимостью, с другой — физикой, стоимостью и контрактом.
То, что Гринберг называет фрагментацией
Напоследок стоит затронуть позицию Гринберга по поводу фрагментации. Он прав в том, что механизм расширений фрагментирует стандарт. Отделение Zcb от C раздражает, отсутствие Zicsr в базовом наборе по умолчанию раздражает. Добавление вендорами собственного аппаратного обеспечения прерываний фрагментирует всё ещё сильнее — это было испытано на собственном опыте при портировании NuttX на CH32V307, Porting Apache NuttX RTOS to the WCH CH32V307: A Deep Dive into the PFIC and Everything That Went Wrong.
Но этот механизм — ответ на собственный же вопрос Гринберга, поставленный в начале статьи. Причина, по которой один и тот же набор инструкций умещается и в чипе за десять центов с шестнадцатью регистрами, и в чипе, работающем под защищённой многопроцессной операционной системой, именно в том, что маленький чип не тащит на себе багаж большого. Нет компромиссного ядра посередине, плохо обслуживающего оба сценария — а именно к такому компромиссу обычно вынуждают «диаметрально противоположные требования». Фрагментация и масштабируемость — это одно и то же свойство, одно не бывает без другого, и стоил ли этот компромисс того — вопрос честный, и однозначного ответа на него, пожалуй, нет.
Но в главном Гринберг прав — и прав таким образом, что это работает в пользу того, что он критикует. RISC-V займёт нишу дешёвых микроконтроллеров не потому, что его кодировка элегантна. Он займёт эту нишу потому, что чип стоит десять центов, и потому, что вся лестница над ним построена на том же наборе инструкций. Он туда придёт, потому что инженер embedded-систем в стране «третьего мира» может посветить дешёвым светодиодом и разглядеть транзисторы в кремнии — Infra-Red, In Situ (IRIS) Inspection of Silicon « bunnie's blog — и получить 50 чипов с отладчиком и бесплатным инструментарием разработки за цену чашки кофе, да ещё и с бесплатной доставкой. Это также означает, что первоклассные инженеры могут проектировать MMU в чипах, на которые привратники индустрии никогда не выдадут лицензию.
Гринберг пишет, что это произойдёт «не благодаря дизайну ISA, а вопреки ему», и подразумевает это как мягкое обвинение. С этой точки зрения это не обвинение вовсе. Победа за счёт цены и доступности — не менее достойный способ победить. Она определяет, кто вообще окажется в игре. Архитектура, которая приходит в такую страну по десять центов за чип, с открытым инструментарием и без лицензии, которую нужно согласовывать, делает embedded-системы доступными для людей, которые раньше могли только наблюдать за чужой демо-платой и потреблять чужие продукты, не имея шанса создать что-то сопоставимое. Это и есть сила свободы, открытости — демократия в самом истинном смысле.
Это более весомая причина, чем элегантность. И хочется сказать Гринбергу: слово «привилегия», которым он так свободно оперирует в своей статье, выходит далеко за пределы ISA — в зависимости от того, в какой точке мира находишься.
Достаточно сказано.