1. RISC-V架构概述

各位同学,今天我们来聊聊RISC-V。说实话,我第一次接触RISC-V是在2016年,当时还在做ARM Cortex-M系列的固件开发。记得有个客户问我:「你们能不能用RISC-V?」我当时的反应是——这啥?

几年后的今天,我已经在好几个量产项目里用RISC-V了。这个架构的发展速度,说实话,超出了我的预期。

1.1 RISC-V的发展历史

RISC-V的故事要从2010年说起。当时加州大学伯克利分校的Krste Asanović教授团队想做几个项目,需要用到开源指令集。他们环顾四周——ARM要授权费,x86不开放,MIPS虽然开放但历史包袱太重。

于是他们决定:自己造一个。

2011年,第一版RISC-V指令集发布。我印象很深,当时只有RV32I,总共也就40多条指令。简单到让人怀疑——这玩意儿真能用?

后来的事情大家都知道了:

  • 2014年:RV64I发布,开始支持64位寻址
  • 2015年:RISC-V基金会成立,管理权从伯克利移交
  • 2019年:RISC-V International成立,总部搬到瑞士
  • 2021年至今:大量芯片公司投入量产,阿里平头哥、SiFive、StarFive等厂商纷纷推出产品

我个人觉得,RISC-V能火起来,核心原因就一个——它真的「开放」。不是那种「我开放但你要签NDA」的假开放,而是真正的、连指令集手册都能随便下载的真开放。

1.2 设计哲学:少即是多

RISC-V的设计哲学,说白了就是「够用就好」。我刚开始做RISC-V开发时,总觉得指令太少,写起来费劲。但用久了才发现——少,恰恰是它的优势。

核心设计原则有三条:

  1. 简洁性:基础指令集只有40多条指令,比ARM少一个数量级
  2. 模块化:基础指令集+可选扩展,按需组合
  3. 可扩展性:预留了大量编码空间,方便自定义指令

关键理解:RISC-V不是「功能最全」的架构,而是「最灵活」的架构。它把选择权交给了芯片设计者。

举个例子。我在做IoT芯片时,只需要RV32IMC就够了——32位、乘除法、压缩指令。不需要浮点,不需要向量。这在ARM生态里,你得选Cortex-M0+或者M3,但它们的指令集是固定的,你没法砍掉不需要的部分。

1.3 指令集模块化详解

RISC-V的模块化设计,是我最喜欢的地方。它不像ARM那样给你一个「套餐」,而是让你自己「点菜」。

基础指令集:RV32I 和 RV64I

这是所有RISC-V处理器都必须实现的部分。RV32I是32位版本,RV64I是64位版本。两者指令格式完全一样,只是寄存器宽度和地址空间不同。

RV32I包含:

  • 算术运算:ADD、SUB、AND、OR、XOR等
  • 逻辑移位:SLL、SRL、SRA
  • 内存访问:LB、LH、LW、SB、SH、SW
  • 分支跳转:BEQ、BNE、JAL、JALR
  • 立即数操作:ADDI、ANDI、ORI等

你可能会问:「就这么点?」对,就这么点。但别小看它——图灵完备,能跑任何程序。

我的经验:刚开始写RISC-V汇编时,总觉得没有条件移动指令很不方便。但后来发现,用分支指令组合一下,性能损失其实很小。而且编译器优化做得很好,大部分时候你根本不需要手写汇编。

标准扩展

基础指令集之外,RISC-V定义了一系列标准扩展:

扩展名称说明
M乘除法扩展MUL、DIV、REM等指令,处理整数乘除
A原子操作扩展LR/SC指令,用于多核同步
F单精度浮点32位浮点运算,需要32个浮点寄存器
D双精度浮点64位浮点运算,依赖F扩展
C压缩指令扩展16位指令,代码密度提升约25-30%

命名规则很简单:RV64IMAFD,就是64位基础+乘除+原子+双精度浮点。如果加上压缩,就是RV64IMAFDC,俗称「通用组合」。

嗯,这里要注意——C扩展在嵌入式领域几乎是必选的。为什么?因为Flash空间贵啊!我曾经在一个项目里,用C扩展把固件从128KB压缩到了96KB,省了一颗Flash芯片的钱,老板开心得不得了。

1.4 与其他架构的对比

我经常被问到:「RISC-V和ARM、x86比,到底怎么样?」

这个问题其实没有标准答案,因为应用场景不同。但我可以给你一些实际感受:

RISC-V vs ARM

  • 授权模式:ARM要交授权费,RISC-V完全免费。这不是小钱——一个Cortex-M3的授权费可能几十万美元起步。
  • 指令集复杂度:ARMv7-M有约150条指令,RISC-V的RV32IMC只有不到60条。指令越少,硬件实现越简单,功耗越低。
  • 生态成熟度:ARM完胜。编译器、调试器、RTOS支持,ARM都更成熟。RISC-V这几年进步很快,但差距还在。
  • 定制灵活性:RISC-V允许你添加自定义指令。我在一个AI加速项目里,加了几个矩阵运算指令,性能提升了3倍。这在ARM生态里基本不可能。

RISC-V vs x86

  • 复杂度:x86的指令集手册几千页,RISC-V的不到300页。x86一条指令可能几十个字节,RISC-V固定32位或16位。
  • 功耗:x86的功耗管理复杂到令人发指。RISC-V的功耗模型简单直接,特别适合嵌入式场景。
  • 性能:x86在桌面和服务器领域仍然遥遥领先。RISC-V目前主要在中低端市场发力。

避坑提醒:我曾经在一个项目里试图用RISC-V替代x86做边缘计算网关,结果发现性能差了一个数量级。RISC-V不是万能的,选型时一定要看应用场景。

1.5 知识体系总览

为了让你对RISC-V有个整体认识,我画了一张图:

RISC-V 知识体系总览 RISC-V 核心 RV32I / RV64I 基础整数指令 M / A / F / D / C 可选扩展模块 自定义扩展 用户自定义指令 嵌入式系统 AI加速器 服务器芯片 设计哲学:简洁 · 模块化 · 可扩展 对比:ARM(封闭生态) | x86(复杂指令) | RISC-V(开放灵活) 图1:RISC-V知识体系结构图

这张图展示了RISC-V的核心结构。你可以看到,基础指令集在最底层,上面是各种扩展模块,再往上才是具体的应用场景。这种分层设计,让RISC-V既能做简单的MCU,也能做复杂的应用处理器。

1.6 小结

好了,这一章的内容就到这里。我们聊了RISC-V的来龙去脉、设计哲学、指令集模块化,还和ARM、x86做了对比。

我个人觉得,RISC-V最大的价值不是「免费」,而是「自由」。你可以按需裁剪、可以自定义指令、可以深度优化。这种自由度,在封闭架构里是永远得不到的。

下一章,我们会深入启动流程——从复位向量到C运行时环境初始化。这部分内容,我在实际项目中踩过不少坑,到时候会一一分享给你。


专注资料整理