为什么选择 RISC-V

RISC-V 作为一个开放标准的指令集架构(ISA),近年来在学术界和工业界都获得了广泛关注。与 ARM 和 x86 不同,RISC-V 采用完全开源的设计哲学,任何人都可以免费使用和实现。

RISC-V 的设计特点

  1. 简洁优雅 — 基础指令集仅有不到 50 条指令
  2. 模块化设计 — 基础指令集(I 后缀)+ 可选扩展(M/A/F/D/C 等)
  3. 开源免费 — 无需授权费用
  4. 可定制 — 允许添加自定义指令

RV32I 基础指令集

RV32I 是 RISC-V 的基础 32 位整数指令集,包含以下类型的指令:

1. 算术运算指令

# 加法:rd = rs1 + rs2
add t0, t1, t2

# 减法:rd = rs1 - rs2
sub t0, t1, t2

# 立即数加法:rd = rs1 + imm
addi t0, t1, 42

2. 逻辑运算指令

# 按位与
and t0, t1, t2

# 按位或
or t0, t1, t2

# 异或
xor t0, t1, t2

3. 内存访问指令

# 加载字:rd = MEM[rs1 + imm]
lw t0, 0(sp)

# 存储字:MEM[rs1 + imm] = rs2
sw t0, 4(sp)

实践:用 RISC-V 汇编实现斐波那契数列

下面是一个简单的斐波那契数列实现:

.section .text
.globl fibonacci

fibonacci:
    # 参数:a0 = n
    # 返回值:a0 = fib(n)
    
    li t0, 0          # fib(0) = 0
    li t1, 1          # fib(1) = 1
    
    beqz a0, return_0 # if n == 0, return 0
    li t2, 1
    beq a0, t2, return_1 # if n == 1, return 1
    
    mv t2, a0         # t2 = n (counter)
    
loop:
    add t3, t0, t1    # t3 = fib(n-2) + fib(n-1)
    mv t0, t1         # shift: t0 = t1
    mv t1, t3         # shift: t1 = t3
    addi t2, t2, -1   # counter--
    bgtz t2, loop     # if counter > 0, continue
    
    mv a0, t1         # return value
    ret

return_0:
    li a0, 0
    ret

return_1:
    li a0, 1
    ret

下一步学习计划

  • RV32I 基础指令集
  • RV32M 乘除法扩展
  • RV32F/D 浮点扩展
  • 特权架构和中断处理
  • 尝试用 Verilog 实现一个简易 RISC-V 核心

RISC-V 的世界非常广阔,期待在"烹饪"的过程中不断深入学习!