来自第三世界嵌入式工程师的回应:评 RISC-V '他们本应做得更好'
我想教的学生也处在同样的处境,尼日利亚、孟加拉国以及全球各地的学生都一样——而那些在行业里写博客的人根本不会想到这些。从这个处境出发,一美分器件和一美元器件之间的差距不是可以四舍五入的误差,也不是你在讨论指令编码时可以一笔带过的细节。差距就在于:一班三十个学生,人手一片芯片自己动手;还是一班三十个学生,围着一块开发板看演示——如果有板子的话。指令集的优雅性是芯片已经摆在你桌上之后你才有资格关心的事;而芯片能不能到你桌上,才是首先要解决的问题。所以,大多数人一眼带过的那段,在我看来恰恰是整篇文章最重要的部分。
Grinberg 没看到这一点:RISC-V 为"世界"之外的另外 99% 创造了一个空间(这里的"世界"主要指美国和欧洲),而这跟架构本身毫无关系。
他从需求推导,最终得出 RV32EC
在讨论中断开销和抱怨指令编码之前,他做了一件很严谨的事。他先问:一个廉价微控制器核心到底是干什么用的?他的答案是:它内嵌在一颗更大的芯片里,戳戳寄存器、配置硬件模块,比如用在"MP3 播放器、SD 卡、U 盘"里。真正的工作由芯片里的定制逻辑完成。由此他推导出一个这样的核心需要什么:低中断延迟、小芯片面积、良好的代码密度,因为代码存放在 ROM 或 SRAM 里,而这两者每个字节的成本都很高。不需要硬件除法器,甚至可能连乘法器都不需要,因为这类场景下算术运算本来就不多。也不需要特权隔离,因为根本没有不可信的代码会在上面运行。
然后他自己写出了这句话:
"但是你可能会说:'你刚才描述的不就是 RV32IC(或 RV32EC)吗!'"
更早之前,他还直白地说:
我百分之百确信,RISC-V 最终会拿下那些廉价到极致的、一次性微控制器市场。
所以本月最靠谱的 RISC-V 批评者坐下来,从第一性原理推导出廉价微控制器核心应该是什么样,得出了一颗十美分芯片所采用的指令集,然后断言这个细分市场必将属于 RISC-V。
他亲手推导出了这颗芯片存在的合理性,然后在文章剩下的篇幅里,对这颗芯片的存在感到恼火。
这几乎讽刺到家了。
他不满的是这个结果是否实至名归。这确实是个真问题,我理解他为什么会介意。但这个问题对任何想决定学什么架构的人来说毫无影响,因为不管怎样,这颗芯片已经摆在货架上了。
我真正强烈反对的地方
他的核心论点是文章开头的第一条,而且这条比所有编码层面的吐槽都重要:
简单来说,高端 CPU 所需的东西与省成本的小型微控制器核心所需的东西是完全对立的。
他由此得出结论:没有哪种 ISA 能同时兼顾两端,RISC-V 的拥趸是在自欺欺人。理论上这个前提没错,但结论站不住脚,我手头现成的三个例子就能说明问题。
CH32V003。这就是他描述的那类廉价的"RV32EC":16 个寄存器,没有硬件乘法器和除法器,只有机器模式,2KB SRAM,16KB Flash,十美分一颗,简直就是他说的那种核心的完美化身。我用这颗芯片出过两款产品,一款是带 ToF 传感器、LED 和 AirTag 的垃圾桶监测器;另一款是给客户做的农业产品,在特定时间自动开关门。它也是做一次性部件的好选择,我在我做的口哨开关里有演示——拍手开关已死,这是一款由 RISC-V 驱动的口哨开关!。在我看来,它也是替代那些又贵又过时的 Arduino 的最佳选择,Arduino Q 是否毁了 Arduino?下面教你如何用 CH32V003 切换到 RISC-V。
CH32H417。这是一颗双核 MCU,性价比无出其右,在 MCU 产品线中属于高端型号。它搭载一颗 400 MHz 的 QingKe V5F 核心和一颗 144 MHz 的 V3F 核心,配有 896KB SRAM 和 960KB Flash。集成了 USB 3.2 Gen1(含 5 Gbps 收发器)、100M 以太网 MAC 和 PHY、隔离 SerDes 收发器、500 MB/s 高速接口、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,以及仅用不到 150KB RAM 就实现的实时人脸识别Real Time Facial Recognition on The Edge With CH32H417 RISC-V MCU。此外我还做了不少其他项目,但上面这些只是我有时间录下来并发布的。
Baochip。这是一颗内置 MMU 的 VexRISC-V 芯片,整套技术栈从硅到 OS 全栈开源Baochip-1x: A Mostly-Open, 22nm SoC for High Assurance Applications « bunnie's blog,运行 Xous 操作系统betrusted-io/xous-core: The Xous microkernel,由传奇硬件黑客"bunnie"黄(Andrew "bunnie" Huang)设计,是一个带真正进程隔离的 Rust 微内核。特权分级,正是那位作者说低端芯片不需要所以也不会拥有的东西。除了 Xous,它还支持 SEL4vk2seb/bao1x-seL4: seL4 port to baochip-1x 和 Linuxpkoscik/baochip-linux: An attempt to boot mainline Linux on a stock Dabao board 等操作系统。我为这颗芯片编写了裸机 C SDKArmstrongSubero/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。
我还可以提到我为一块价值 1 美元的 ESP32C3 RISC-V 芯片写的 NES 模拟器NES Emulator on $1 ESP32-C3 RISC-V Microcontroller,或者是在 Orange Pi RV2 上体验 Linux 的经历OrangePi RV2 5 Minute Unboxing and Setup | RISC-V Ubuntu Linux,从安装到跑起来只花了 5 分钟,并且从开机那天起就一直稳定运行至今。
总之,我能滔滔不绝地讲下去,列举现在能买到的 RISC-V 芯片有多么多样和容易上手,但那样就偏离主题太远了。
我之所以列出这些,是想说:这些芯片都基于同一套基础指令集,我在不到一年时间里,花费不到 100 美元,就掌握了从一次性试用品到 PC 级别的整个技术栈(当然数据中心级算力除外)。
花不到 100 美元(含运费),我就用一个架构走通了整个垂直栈。受 AI 竞赛影响,OrangePi RV2 现在涨价了,但首发时只要 30 美元还包邮。我大约花了 7 美元买了 50 颗 CH32V003 芯片加一个调试器;CH32H417 开发板在 Analog Lamb 上售价 20 美元,复用同一款廉价(而且是官方的)调试器;包罗板(Baochip Dabao)我在 Crowd Supply 上买的时候是 9.5 美元,顺手还给它写了本书(The Dabao Book - Payhip),两块板子加运费一共 35 美元,总计不到 100 美元。相比之下,光一个 ARM 的 Segger J-Link 调试器就要 600 美元,不过据说花 100 美元、再加 100 美元运费,也就是大约 200 美元,可以买到教育版的 J-Link,但芯片和开发板就别想了。真棒。
回到 RISC-V 的话题——这些芯片的基础指令集完全相同,意味着寄存器模型、调用约定、工具链也都是一致的。虽然扩展指令各有不同,但我在十美分级别的 CH32V003 上学到的汇编知识,在其他任何平台上都同样适用:不管是双核 MCU、跑 Linux 的 SBC,还是运行全新操作系统的高级定制安全芯片。我的技能完全可迁移,每次上手往往几小时内就能搭好工具链,迅速进入应用开发,调试时也游刃有余。我只需要 ISA 手册和一款 C 编译器就能开干。
现在再来看看另一边的同类方案。忘掉 x86-64,忘掉那种双寡头垄断、布满专利雷区的生态,还有动辄几千美元的调试探针,我们只谈 ARM。
和 CH32V003 对位的是 ARMv6-M 架构的 Cortex-M0,比如 STM32F030;往上走是 ARMv7-M 的 Cortex-M7;要上带 MMU、能跑 Linux 或 SEL4、Xous 的型号,就得到 ARMv8-A 这类应用处理器。这些分属不同的 Arm profile,权限、特权级、异常和系统模型差异都很大,沿栈往上走意味着大量重新学习,远不只是多开一个 RISC-V 扩展那么简单。这些我都用过,信我。
而且到了高端,根本不是学习曲线的问题。市面上没有任何一款 Cortex-M 单片机集成 USB 3.0 SuperSpeed PHY。最接近的双核 Arm 芯片是 STM32H747,这颗本身不错,但也没集成 PHY。要用 USB 3.0 就得彻底离开单片机领域:上 i.MX 8 或 RK3xxx,也就是 Cortex-A。这意味着你需要 MMU、Linux、DDR、PMIC,以及一块你没法用两层板画完的板子。要么你也可以保留 M7,外挂一颗桥接芯片。
H417 的评估板大概二十美元。而 H747(TFBGA240 封装)单独一颗芯片就要二十周的工厂交期,价格也差不多,这还只是芯片本身,连可用的开发板都还没算上。更别提 Mouser 下单前还要你提供身份信息;DigiKey 拒单也是出了名的——管你人在哪儿,只要名字像"Hussein Ali"就可能被拒。NorthridgeFix 的知名 YouTube 博主就描述过修 Starlink 时被 Digi-Key 拒单的经历。哦对了,光运费到我这里就要 60 到 100 多美元。反过来我能在阿里速卖通的 WCH 官方店直接买 H417,免运费,也没什么身份验证的麻烦。至于那些带 MMU 的 Cortex-A 芯片、它们的调试工具,以及生态碎片化的问题,我们还没开始聊呢。
界限不在技术层面
最能直接拆掉他那套框架的论点其实跟编码方式毫无关系。他把小型核心和大型核心之间的差距当成一个架构层面的事实,似乎是相互对立的需求自然产生的结果。但在 ARM 芯片上,这根本不是架构层面的事。这是产品边界,靠授权机制来维系。有人试过给 Cortex-M 加上 MMU 吗?物理层面的权衡确实存在,区别在于:使用 RISC-V 时,ISA 的所有者不会替你决定这条边界必须划在哪里。想要 ARM 的虚拟内存?去授权一颗 Cortex-A 吧,那是不同的核心系列、不同的 profile、不同的谈判流程、不同的授权费。没有渐进的路径可走。只有一堵墙,墙另一边站着一支销售团队。
对比一下 Baochip 走过的路。RISC-V 的特权规范把 supervisor 模式和 Sv32 分页定义为可选项,实现方可以选择是否提供。VexRISC-V 是一个开源核心,有人给它加上了 MMU,bunnie 围绕它做了一颗芯片,在这上面跑了一个能真正实现进程隔离的微内核,让身处千里达这个连 ISA 圈子里都很少提起的国家的我,可以低成本地进行试验,还能把相关知识教给本地区的其他人。
这就是自由的样子。
没有人需要征求许可,没有人要签任何协议,没有人为每颗出货的芯片支付授权费,任何人都可以一路学到芯片赖以构建的 RTL。Grinberg 在文章中把特权隔离归入低端不需要、因此也不会拥有的特性,他其实是在描述 ARM 产品线划分的特性,却把它归结为指令集设计的必然。在 RISC-V 上,这不过是特权规范里的一个选项:在十美分成本的器件里关掉它,因为开启会吃掉你不想花掉的面积;需要的时候打开它,底层的指令集始终保持不变。
这才是两个生态之间真正的差别,也正是为什么"一种 ISA 无法同时兼顾两端"这句话,站在不同立场读起来意思完全不同。一边,两端的差异来自物理和成本;另一边,差异来自物理、成本,以及一份合同。
他口中所谓的碎片化
在结束之前,我想回应一下他对碎片化问题的看法。他说扩展机制造成了标准碎片化,这一点并没有错。Zcb 从 C 分离出去很烦人,Zicsr 不被基础指令集隐式包含也很烦人。厂商添加专有中断硬件确实让碎片化更加严重——我在把 NuttX 移植到 CH32V307 时就亲身经历过 将 Apache NuttX RTOS 移植到 WCH CH32V307:深入剖析 PFIC 及踩坑全记录。
但这个机制恰恰回答了他文章开头的那个问题。同一套指令集既能存在于只有十六个寄存器、售价十美分的小芯片上,也能运行在受保护的多进程操作系统里,原因正是小芯片不需要背负大芯片的包袱。这中间不存在一个两头都照顾不好的折中核心,而"截然相反的需求"通常就意味着不得不做这样的折中。碎片化和可扩展性本质上是同一枚硬币的两面,缺一不可,至于这笔交易是否值得,见仁见智,我觉得并没有显而易见的答案。
但有一点我确信:他抓住了真正重要的部分,而且这种肯定恰好有利于他批评的对象。RISC-V 不会因为编码优雅就拿下廉价微控制器市场。它拿下这个市场,靠的是芯片只要十美分,靠的是向上延伸的每一级都共用同一套指令集。靠的是第三世界国家的嵌入式工程师能点亮一颗便宜的 LED、用红外光看穿硅片里的晶体管 硅片的红外原位(IRIS)检测《bunnie 的博客》,花一杯咖啡的钱就能拿到 50 颗芯片加调试器加免费开发工具,还包邮。这也意味着世界级的工程师可以把 MMU 设计进那些守门人永远不会授权许可的芯片里。
他写道,这一切会"不是因其 ISA 设计,而是尽管如此"才会发生,他的语气算是温和的批评。但你顺着读下去就会发现,这根本算不上批评。靠价格和供货能力胜出,不是一种次等的赢法。它决定谁能上桌。一种架构以每个零件十美分的价格进入我的国家,搭配开放的工具链,无需谈判授权,就能让以前只能看别人演示板、只能消费别人产品却永远无法匹敌的那些人,也够得着嵌入式系统了。这就是自由与开放的力量,也是民主最本真的含义。
这比优雅更有分量。我想告诉 Grinberg 先生,他在文章里随手抛出的"特权"这个词,超越了 ISA 本身,取决于你身处世界的哪个角落。
言尽于此。
Armstrong Subero 是一名嵌入式系统工程师,也是 Apress/Springer 的签约作者。他在特立尼达和多巴哥搭建 RISC-V 教育平台 Rovari。