4. RISC-V架构入门:从诞生理念到模块化设计
说实话,我第一次接触RISC-V时,心里是有点抵触的。那时候ARM已经统治了嵌入式世界,我心想:又来一个新架构?能活多久?
但当我真正读完它的指令集手册,我意识到——这东西不一样。它背后藏着一种全新的设计哲学。
4.1 RISC-V的诞生:一个教授的小项目
2010年,加州大学伯克利分校的Krste Asanović教授团队,需要为一个项目选CPU架构。他们看了看ARM——授权费太贵。看了看x86——不开放。看了看OpenRISC——嗯,太老了,设计上也有不少问题。
于是他们决定:自己做一个。
这个「自己做一个」的项目,最初只是几个研究生在暑假里写的。谁也没想到,十几年后它会成为与ARM分庭抗礼的存在。
RISC-V的名字很有意思:
- RISC:精简指令集计算机,这是它的血统
- V:罗马数字5,代表这是伯克利的第五代RISC项目
- 连起来读就是「RISC Five」,不是「RISC-V-E」
核心要点:RISC-V不是某家公司的产品,它是一个开放的指令集架构(ISA)标准。任何人都可以免费使用,不需要交授权费。
4.2 设计理念:少即是多
RISC-V的设计哲学,说白了就一句话:做减法。
我见过太多架构,为了兼容老代码,背了几十年的历史包袱。x86里那些古董指令,现在谁还用?但为了兼容,芯片里必须留着那些电路。
RISC-V不一样。它从零开始,只保留最核心、最必要的指令。
举个例子:
- ARM有超过1000条指令(ARMv8)
- x86有超过1500条指令
- RISC-V的基础指令集(RV32I)只有47条指令
47条!我当时看到这个数字,第一反应是:够用吗?
答案是:够。而且非常够。
我的经验:我在一个IoT项目中,用RV32I实现了完整的RTOS和TCP/IP协议栈。47条指令,一个都没多。简洁的指令集让编译器优化变得异常轻松,生成的代码密度甚至超过了ARM Thumb模式。
4.3 模块化设计:按需定制
RISC-V最聪明的设计,就是它的模块化架构。
你想想看,一个智能手表的芯片和一个服务器的芯片,需要的指令集能一样吗?
传统架构的做法是:给你一个巨大的指令集,你用不用是你的事,但芯片里都得有。
RISC-V的做法是:我给你一个最小的核心,你需要什么功能,自己往上加。
这个核心就是基础指令集:
| 基础指令集 | 位数 | 指令数 | 适用场景 |
|---|---|---|---|
| RV32I | 32位 | 47条 | 嵌入式、IoT |
| RV64I | 64位 | 47条(地址宽度扩展) | 应用处理器、服务器 |
| RV128I | 128位 | 47条(未来扩展) | 高性能计算、AI |
然后,RISC-V定义了一系列标准扩展:
- M扩展:整数乘除法指令。没有它,乘法得用软件模拟,慢得很
- F扩展:单精度浮点。做DSP、传感器融合必备
- D扩展:双精度浮点。科学计算、AI推理用得上
- C扩展:压缩指令。代码密度提升25%-30%,我特别喜欢这个
- A扩展:原子操作。多核同步的基石
组合方式很简单:RV32IMAC 表示32位基础指令集 + 乘除法 + 原子操作 + 压缩指令。
注意:不是所有扩展都能随便组合。比如F扩展依赖M扩展(浮点转整数需要乘除法),D扩展依赖F扩展。设计芯片时一定要检查依赖关系。
4.4 基础指令集:47条指令的优雅
RV32I的47条指令,分为几类:
- 算术运算:ADD、SUB、ADDI等。没有MUL和DIV,它们在M扩展里
- 逻辑运算:AND、OR、XOR、SLL、SRL等
- 比较指令:SLT、SLTU。比较结果存到寄存器里
- 分支跳转:BEQ、BNE、JAL、JALR。条件分支只有相等/不等,没有大于/小于
- 访存指令:LB、LH、LW、LBU、LHU、SB、SH、SW。对齐访问,简单粗暴
- 控制状态寄存器:CSRRW、CSRRS等。用于中断、异常处理
这里有个细节我特别欣赏:RISC-V没有条件码寄存器。
ARM和x86都有标志位(N、Z、C、V),每次运算都会更新。这在乱序执行中会造成很大的麻烦——指令之间的依赖关系太复杂了。
RISC-V的做法是:比较指令直接把结果写到通用寄存器。分支指令直接读寄存器。干净、利落、没有副作用。
// 一个简单的循环:计算1到100的和
// RISC-V汇编示例
li a0, 0 // sum = 0
li a1, 1 // i = 1
li a2, 100 // limit = 100
loop:
add a0, a0, a1 // sum += i
addi a1, a1, 1 // i++
blt a1, a2, loop // if i < 100, goto loop
// 结果在a0中
你看,没有标志位,没有复杂的寻址模式。每条指令做一件事,清清楚楚。
4.5 开源与开放标准:不只是免费
很多人以为RISC-V的优势就是「免费」。其实没那么简单。
开源的是指令集规范,不是芯片设计。
你可以免费下载RISC-V的指令集手册,但你不能免费下载一个RISC-V处理器的GDSII文件。你得自己设计,或者买别人的IP核。
那RISC-V到底开放了什么?
- 指令集规范:完全公开,任何人都可以阅读、实现
- 扩展机制:你可以自定义指令,不需要任何人批准
- 生态工具:GCC、LLVM、Linux、FreeRTOS都已支持
我曾经在一个AI加速器项目中,给RISC-V加了一条自定义的矩阵乘法指令。从定义指令编码,到修改编译器,到设计硬件,整个过程不到两周。这在ARM上?想都别想。
开放标准的意义:你不再被某一家公司绑定。你可以选择不同的RISC-V核供应商,甚至自己设计。你的软件生态是通用的,换一个核,重新编译就行。
当然,开放也有代价。没有统一的ARM那样的一致性测试。你买的RISC-V核,可能和另一个供应商的核在行为上有细微差异。嗯,这需要你在选型时多留个心眼。
4.6 一张图看懂RISC-V架构
下面这张图,是我梳理的RISC-V知识体系。你可以把它当作本章的「地图」:
这张图展示了RISC-V的五个层次:从核心哲学,到基础指令集,到标准扩展,再到开源生态和自定义扩展。每一层都建立在前一层之上。
4.7 我的建议:什么时候选RISC-V?
做了这么多年芯片,我总结了几条选型经验:
- 如果你在做IoT、传感器、可穿戴设备:RISC-V的简洁性和低功耗优势非常明显。RV32IMC组合,代码密度高,功耗低,成本低。
- 如果你在做AI加速器、专用处理器:RISC-V的自定义扩展能力是杀手锏。你可以把最耗时的运算做成一条指令,性能提升10倍以上。
- 如果你在创业,预算有限:RISC-V没有授权费,没有版税。省下来的钱,可以多雇两个工程师。
- 如果你在做手机SoC、高端服务器:嗯,目前RISC-V的生态还不够成熟。ARM和x86仍然是更稳妥的选择。
一个小技巧:如果你不确定RISC-V是否适合你的项目,可以先在FPGA上跑一个RISC-V软核(比如SweRV或VexRiscv)。花几百块钱,一周时间,就能得到真实的性能数据。比看PPT靠谱多了。
RISC-V不是万能的,但它给了我们一个选择。一个不受制于任何公司的选择。对我来说,这就够了。
公众号:蓝海资料掘金营,微信deep3321