一个简单的 RISC-V CPU 设计与实现
一个简单的 RISC-V CPU 设计与实现
之前写的RISCV五级流水CPU设计不够详细,本篇算是一个补充。
RISC-V 指令集介绍
- 除压缩扩展外,所有指令均为32bits长
- 压缩扩展指令为16bits长
RV32I 基础整数指令集
- 32个32bits通用寄存器,x0 - x31
- x0 零寄存器 zero
- x1 返回地址 ra
- x2 栈指针 sp
- x3 全局指针 gp
- x4 线程指针 tp
- x5 - x7 临时寄存器 t0 - t2
- x8 保存寄存器 s0 帧指针 fp
- x9 保存寄存器 s1
- x10 - x17 参数寄存器 a0 - a7
- x18 - x27 保存寄存器 s2 - s11
- x28 - x31 临时寄存器 t3 - t6
- 32bits的PC寄存器
- 4类/6种指令类型
- 用于寄存器-寄存器操作的R型
- 用于寄存器-立即数操作的I型
- 用于STORE操作的S型
- 用于分支操作的B型
- 用于立即数操作的U型
- 用于跳转操作的J型
- 用于跳转操作的J型
- 整数计算指令
- I型指令
- ADDI 相加指令
- SLTI[U] (无符号)比较指令
- ANDI、ORI、XORI 逻辑运算指令
- SLLI、SRLI、SRAI 逻辑和算数位移指令
- U型指令
- LUI 加载立即数高20位
- AUIPC 令PC增加立即数高20位并将结果存入寄存器
- R型指令
- ADD
- SLT[U]
- AND、OR、XOR
- SLL、SRL、SRA
- SUB 相减指令
- I型指令
- 控制转移指令
- I型指令
- JALR JAL的寄存器寻址版本
- J型指令
- JAL 跳转并将下一指令地址存入寄存器
- B型指令
- BEQ、BNE 相等/不相等跳转
- BLT[U] (无符号)小于跳转
- BGE[U] (无符号)大于等于跳转
- I型指令
- 访存指令
- I型指令
- LW、LH[U]、LB[U]
- S型
- I型指令