RISC-V 架构入门:从原理到第一块开发板

RISC-V 架构入门:从原理到第一块开发板

写在前面

过去二十年,处理器架构市场基本被两家瓜分:Intel 的 x86 统治 PC 和服务,ARM 统治移动端和 IoT。你想自己做一颗芯片?抱歉,先交一笔不便宜的授权费。

RISC-V 的出现打破了这个局面。

RISC-V 是一个完全开源的指令集架构(ISA)。任何人可以免费使用它设计、制造、销售芯片或基于 RISC-V 的产品,而无需向任何公司支付许可费。它由加州大学伯克利分校的 Krste Asanović教授和团队于 2010 年发起,现已成为芯片行业最热门的新势力。

这篇文章,我会从指令集的基本概念讲起,帮你理解 RISC-V 到底有什么不同,然后带你挑选一块开发板,运行你的第一个 RISC-V 程序。

一、什么是指令集架构(ISA)?

1.1 最简单的理解

指令集架构,就是 CPU 和软件之间的\"合同\"——它规定了:

  • CPU 能执行哪些基本操作(加法、减法、加载数据、跳转……)
  • 有多少个寄存器,每个多宽
  • 内存怎么寻址
  • 指令的编码格式

你可以把它理解为 CPU 的\"语言规范\"。 软件用这种语言写指令,CPU 听懂并执行。

1.2 x86 vs ARM vs RISC-V

x86 ARM RISC-V
开发者 Intel/AMD Arm Ltd. RISC-V 基金会(开源)
授权模式 封闭 授权收费 完全免费开源
指令类型 CISC(复杂指令集) RISC(精简指令集) RISC(精简指令集)
主要领域 PC/服务器 手机/嵌入式 IoT/嵌入式/AI/全领域
可扩展性 不可扩展 有限扩展 高度可扩展

RISC-V 的杀手锏是两个字:自由。

你不需要获得任何人的许可就能使用 RISC-V ISA。你可以根据需求自定义指令集扩展。你可以设计一颗极简的 32 位 MCU,也可以设计一颗支持向量扩展的 AI 加速器——都合法,都免费。

1.3 为什么叫 \"V\"?

V 代表\"五\"(罗马数字)。伯克利团队之前已经设计了四代 RISC 处理器(ROCK I~IV),第五代就叫 RISC-V。同时 V 也暗示\"Variable\"(可变),因为 RISC-V 的指令集是可扩展的。

二、RISC-V 架构核心特点

2.1 精简指令集(RISC)

RISC-V 遵循精简指令集哲学:

  • 指令长度固定为 32 位(基础 ISA)——解码简单,硬件设计简洁
  • Load/Store 架构——只有 load 和 store 指令能访问内存,算术运算只能在寄存器之间进行
  • 寄存器数量充足——32 个通用整数寄存器(x0~x31),比 x86 的 16 个多一倍

这种设计让硬件实现更简单,功耗更低,非常适合嵌入式场景。

2.2 模块化设计

RISC-V 不是\"一套指令集适合所有场景\",而是按模块组合:

扩展 名称 说明
RV32I / RV64I 基础整数 ISA 必选,所有 RISC-V 处理器都包含
M 乘除扩展 硬件乘除法指令
A 原子操作扩展 多核同步用的原子指令
F 单精度浮点 硬件单精度浮点运算
D 双精度浮点 硬件双精度浮点运算
C 压缩指令 16 位编码的压缩指令,减小代码体积
V 向量扩展 SIMD 向量运算,适合 AI/多媒体

典型组合示例:

  • 极简 IoT 节点:RV32I + C(最小代码体积)
  • 通用 MCU:RV32IMAC(带乘除、原子、压缩)
  • 应用处理器:RV64IMAFDC(64 位 + 全功能)
  • AI 加速器:RV64IMAFDCV(加上向量扩展)

2.3 特权级别

RISC-V 定义了三种特权级别:

级别 名称 用途
U 模式 User(用户模式) 运行用户应用
S 模式 Supervisor(监管模式) 运行操作系统内核
M 模式 Machine(机器模式) 固件/Bootloader,最高权限

MCU 通常只需要 M 模式;跑 Linux 的 SoC 需要 M+S+U。

三、RISC-V 生态现状

3.1 芯片厂商

RISC-V 已经不再只是学术项目,各大厂商都在量产:

厂商 代表产品 定位
平头哥(T-Head) C906/C910/C920 高性能应用处理器
兆易创新(GigaDevice) GD32V MCU,Arduino 兼容
乐鑫(Espressif) ESP32-C3 WiFi/BLE IoT
沁恒(WCH) CH32V 低成本 MCU
SiFive E/P/U 系列 通用 RISC-V IP
Andes Technology RISC-V IP IoT/汽车电子

3.2 操作系统支持

  • Linux:2019 年合并到主线内核(5.0+),完全支持
  • FreeRTOS:官方支持
  • Zephyr:官方支持
  • RT-Thread:官方支持
  • Bare-metal:各种裸机 SDK 可用

3.3 开发板推荐

开发板 芯片 价格 适合场景
Sipeed Longan Nano GD32VF103 ¥30-50 入门学习,带 LCD
ESP32-C3 ESP32-C3 ¥15-25 IoT 开发,WiFi+BLE
Milk-V Duo CV1800B ¥50-80 Linux 应用处理器
StarFive VisionFive 2 JH7110 ¥500-700 完整 Linux SBC
HiFive1 Rev B FE310-G002 ¥300+ 官方推荐入门板

入门推荐:ESP32-C3 或 Sipeed Longan Nano——便宜、资料多、上手快。

四、实战:在 RISC-V 开发板上跑起第一个程序

4.1 硬件准备

我们以 ESP32-C3 为例——它搭载 RISC-V 单核处理器,支持 WiFi 和 BLE 5.0,价格不到 20 块。

你需要:

  • ESP32-C3 开发板(如 ESP32-C3-DevKitM-1)
  • USB-C 数据线
  • 电脑(Windows/Mac/Linux 均可)

4.2 搭建开发环境

方案一:Arduino IDE(最简单)

  1. 安装 Arduino IDE 2.x
  2. 偏好设置 → 附加开发板管理器网址,添加:
    https://espressif.github.io/arduino-esp32/package_esp32_index.json
  3. 开发板管理器 → 搜索\"ESP32\" → 安装(包含 ESP32-C3 的 RISC-V 支持)
  4. 选择开发板为 \"ESP32C3 Dev Module\"
  5. 编写代码 → 上传
// ESP32-C3 Blink 示例
void setup() {
  pinMode(8, OUTPUT);
  Serial.begin(115200);
  Serial.println(\"Hello from RISC-V!\");
}

void loop() {
  digitalWrite(8, HIGH);
  delay(500);
  digitalWrite(8, LOW);
  delay(500);
}

就这样——你已经在 RISC-V 处理器上运行代码了。

方案二:ESP-IDF(官方 SDK,更灵活)

如果你需要更底层的控制,用 Espressif 的官方 SDK:

# 1. 安装 ESP-IDF 工具链
git clone --recursive https://github.com/espressif/esp-idf.git
cd esp-idf
./install.sh esp32c3  # 指定 RISC-V 芯片

# 2. 设置环境
. ./export.sh

# 3. 创建项目
idf.py create-project my_riscv_app
cd my_riscv_app

# 4. 编辑 main/main.c
# 5. 编译(注意这里编译的是 RISC-V 目标代码)
idf.py set-target esp32c3
idf.py build

# 6. 烧录
idf.py -p /dev/ttyUSB0 flash monitor

4.3 方案三:裸机开发(纯 RISC-V 学习)

如果你想从最底层理解 RISC-V,可以尝试纯裸机开发:

# 安装 RISC-V GCC 工具链
# Ubuntu/Debian:
sudo apt install gcc-riscv64-unknown-elf gdb-riscv64-unknown-elf

# 或者用预编译版本:
wget https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/latest/download/xpack-riscv-none-elf-gcc-linux-x64.tar.gz
tar xzf xpack-riscv-none-elf-gcc-linux-x64.tar.gz

写一段最基础的汇编程序:

# hello.S - 在 RISC-V 上打印字符到串口
.section .text
.globl _start

_start:
    # 设置栈指针
    la sp, _stack_top

    # 打印 \"Hello RISC-V!\"
    la a0, hello_msg
    jal uart_puts

    # 停机
1:  j 1b

.section .rodata
hello_msg:
    .string \"Hello RISC-V!\\n\"

编译:

riscv64-unknown-elf-gcc -march=rv32imac -mabi=ilp32 -nostdlib hello.S -o hello.elf

这就是你在裸 RISC-V 硬件上能跑的最小程序。

五、深入理解 RISC-V 指令

5.1 基础指令(RV32I)

掌握这几条核心指令,你就理解了 RISC-V 的基本运作方式:

指令 格式 示例 说明
addi rd, rs1, imm addi x1, x0, 10 x1 = x0 + 10 = 10
add rd, rs1, rs2 add x2, x1, x1 x2 = x1 + x1 = 20
lw rd, offset(rs1) lw x3, 0(x4) 从内存加载
sw rs2, offset(rs1) sw x3, 0(x4) 写入内存
beq rs1, rs2, label beq x1, x2, equal 条件跳转
jal rd, label jal ra, my_func 跳转并链接

5.2 一个完整的小程序

// 用 C 写的 RISC-V 程序,编译器会生成对应的 RISC-V 汇编
int fibonacci(int n) {
    if (n <= 1) return n;
    return fibonacci(n-1) + fibonacci(n-2);
}

int main() {
    int result = fibonacci(10);  // result = 55
    return 0;
}

编译后生成的 RISC-V 汇编大概是这样的(简化版):

fibonacci:
    addi sp, sp, -32        # 分配栈空间
    sw ra, 28(sp)           # 保存返回地址
    sw s0, 24(sp)           # 保存帧指针
    addi s0, sp, 32
    sw a0, -20(s0)          # 保存参数 n

    lw a5, -20(s0)
    li a4, 1
    bgt a5, a4, .L2         # if n > 1, skip return

    lw a5, -20(s0)
    mv a0, a5               # return n
    j .L3

.L2:
    lw a5, -20(s0)
    addi a5, a5, -1
    mv a0, a5
    jal fibonacci           # fibonacci(n-1)

    mv a5, a0
    lw a4, -20(s0)
    addi a4, a4, -2
    mv a0, a4
    jal fibonacci           # fibonacci(n-2)

    add a0, a5, a0          # result = fib(n-1) + fib(n-2)

.L3:
    lw ra, 28(sp)
    lw s0, 24(sp)
    addi sp, sp, 32
    jr ra

虽然看起来复杂,但 RISC-V 的汇编非常规整——每条指令做一件事,没有 x86 那种\"一条指令干三件事\"的魔幻操作。这也是 RISC 哲学在代码层面的体现。

六、RISC-V vs 传统架构:嵌入式场景对比

6.1 功耗

架构 典型待机电流 典型工作电流 适合电池应用
RISC-V (ESP32-C3) ~10μA ~50mA ✅ 优秀
ARM Cortex-M (STM32) ~5μA ~30mA ✅ 优秀
x86 (Atom) ~1mA ~500mA ❌ 不适用

RISC-V 和 ARM 在低功耗领域旗鼓相当。RISC-V 的优势在于没有授权费,可以大规模量产而不增加成本。

6.2 性能

指标 RISC-V (C906) ARM Cortex-A53 说明
Dhrystone DMIPS/MHz ~2.8 ~2.0 RISC-V 略优
时钟频率 最高 2GHz 最高 1.5GHz 取决于芯片实现
多核支持 两者都支持

重要提醒:RISC-V 只是 ISA,具体性能取决于芯片实现。 同样的 RISC-V ISA,平头哥 C906 和一颗简单的 MCU 性能差距巨大——就像同样的 x86 ISA,i9 和 Celeron 不是一个量级。

6.3 开发生态

RISC-V ARM
编译器支持 GCC/Clang 主线 GCC/Clang 主线
RTOS 支持 FreeRTOS/Zephyr 全支持 全支持
Linux 支持 主线内核 5.0+ 成熟
IDE 支持 PlatformIO/VSCode/CLion Keil/IAR/STM32CubeIDE
社区教程 增长中(中文资料较多) 非常丰富
芯片选型 快速增长中 极其丰富

RISC-V 的生态还在快速成长期。对于常规嵌入式开发,工具和生态已经够用;但如果你需要特定的外设库或评估板支持,ARM 的选择面仍然更广。

七、常见问题

Q: RISC-V 能跑 Linux 吗?

能。 从 2019 年 Linux 5.0 内核开始,RISC-V 就是主线支持的目标架构。Milk-V Duo、StarFive VisionFive 2 等开发板都能跑完整的 Linux 发行版。

Q: RISC-V 和 ARM 哪个更好?

没有绝对答案。如果你在做商业产品且成本敏感,RISC-V 没有授权费是巨大优势。如果你需要成熟的生态和现成的库支持,ARM 目前更丰富。 但 RISC-V 的追赶速度极快,预计 3-5 年内生态差距会显著缩小。

Q: 入门应该选哪块开发板?

  • 预算最低:ESP32-C3(¥15,WiFi+BLE,Arduino 兼容)
  • 想学裸机开发:Sipeed Longan Nano(¥30,带 LCD 和 RGB LED)
  • 想跑 Linux:Milk-V Duo(¥50)或 VisionFive 2(¥500)

Q: RISC-V 的未来会怎样?

乐观地说,非常好。Google 宣布 Android 15 支持 RISC-V,NVIDIA 也在 RISC-V 上投入研发。嵌入式领域更是 RISC-V 的主场——ESP32-C3 已经证明 RISC-V 在 IoT 场景完全可用。

八、总结

RISC-V 不是\"又一个处理器架构\",它是一次架构民主化的尝试——任何人都可以自由设计和使用处理器,不再被授权费和技术壁垒束缚。

核心要点回顾:

  • RISC-V 是开源指令集,免费且可扩展
  • 采用模块化设计(I/M/A/F/D/C/V),按需组合
  • ESP32-C3 等芯片已量产,生态快速成熟
  • 入门门槛低,¥15 的开发板就能上手
  • 适合 IoT、嵌入式、AI 加速等多种场景

如果你之前只接触过 Arduino(AVR)或 STM32(ARM),RISC-V 会给你带来全新的视角。下一期,我会聊聊 ESP32 的 RISC-V 系列(C2/C3/C6)相比传统 Xtensa 架构的优劣对比。

本文测试环境:ESP32-C3-DevKitM-1 + Arduino IDE 2.x + ESP-IDF 5.0