Raspberry Pi Pico 2 上的 RISC-V
RP2350 上的 Hazard 3 RISC-V 核心是由 Raspberry Pi 的 Luke Wren 在业余时间设计的,而且由于它是开源的,您可以下载设计文件,深入研究这个未来将应用于数百万设备的芯片。正如 Eben Upton 所说:“在 RP2350 上添加 Hazard3,我们的目标是为软件开发人员提供一个稳定且支持良好的环境来实验 RISC-V 架构,并推广 Hazard3 作为一个简洁、开放的核心,适合在其他设备中直接使用,或作为进一步开发的基础。” Luke 的反思首次刊登在《The MagPi》第 145 期上。
我从学生时代起就利用业余时间做逻辑设计。这是非常令人上瘾的,我认为与其说我是一个芯片设计师有一个爱好,不如说我是一个在芯片设计领域工作的业余爱好者!这是一个开源的处理器设计,任何人都可以将其集成到自己的芯片中,用来运行 RISC-V 代码。你也可以在 FPGA 板上运行它,或者在你自己的机器上运行模拟器。所有这些都是使用开源工具构建的,比如 yosys、nextpnr 和 gtkwave。
最好的入门方式是获取一个 FPGA 板,然后开始尝试。编写 RTL(寄存器传输级)代码一开始有些难以理解——你可以把它看作一个所有语句同时执行的 C 程序,而不是顺序执行的程序——但看到自己设计的硬件“活起来”的那一刻足以让你继续前进。从点亮一个 LED 开始,然后不断深入。
Hazard3 完全是我自己的设计。它是 Hazard5 的一个分支,我为 RISCBoy 设计的处理器,RISCBoy 是我开源的 Game Boy Advance 竞品。Hazard5 是一个五级流水线——因此有很多“风险”:数据流、控制流和结构性——而“hazard”也是一种“风险”,就像指令集的名称一样。
Hazard5 的目标是在 iCE40 FPGA 上以最高的频率运行,这样我就可以让 RISCBoy 的图形核心也以更高的频率运行。而 Hazard3 则是一个生产级处理器,旨在其小巧的面积和我预期的微控制器设计频率范围内提供尽可能多的性能。它是 Hazard5 的生产版本,具有更短的流水线、硬件调试功能以及一些人们在实际系统中所期望的安全和内存保护特性。
从分支 Hazard5 到运行 CoreMark 的 Hazard3,用时不到一周。从那时起到第一次 RP2350 流片大约是两年,期间断断续续地工作。现在仍在进行维护工作,并计划未来的扩展——它永远不会“完成”,只是从开发阶段过渡到稳定发布。
在我开始开发 RISCBoy 之前,我有一个名为 Tarantula 的项目,它是一个实现 Armv6-M 指令集的八线程桶式处理器,因为那是我当时最熟悉的 ISA,在一次暑期实习中我写过一些汇编。我放弃了这个项目,因为我意识到我永远无法与别人分享它,而且我认为我甚至不再拥有那个源代码了。
那段经历改变了我从那时起看待事物的方式。当我决定要从头开始制作一台游戏机,包括处理器时,我环顾了一下当时可用的指令集,大约是 2018 年,有一些有趣的选择——Hitachi SuperH 刚刚变得不那么受法律限制——但 RISC-V 脱颖而出,因为它是一个我可以相对容易实现的指令集。
基础指令集非常简洁和简单,而且你可以从一系列扩展中增加更多的复杂性。我可以与其他人分享它,他们也可以真正使用它,我还可以使用像 GCC 或 LLVM 这样的生产级编译器进行编程。
那已经是很久以前的事情了,而 RISC-V 从技术上和社区上都走了很长一段路。随着 RISC-V 的发展,还有其他指令集变得更加开放,但我认为显而易见的是,RISC-V 才是当前的主流。尽管很容易对基础 ISA 中的一些技术决策提出批评——我们真的需要 31 个链接寄存器吗?——但对我来说,社区才是最重要的。
我对 RISC-V 感到兴奋,因为它让你可以在一个干净且标准的架构之上进行你的“疯狂科学家”式的架构实验。如果你看看像 CHERI 这样的项目,这是嵌入式安全领域一个非常令人兴奋的发展,那些人已经编写了一个规范,你可以直接去实现它——不需要等待别人为你准备好。