1. memory
input clock,pcload,reset,IRload,Jmux
output IR
2. ALU (Arithmetic logic unit) 算术逻辑单元
- calpart计算单元
3. control unit
RISV-C
1.数据通路单元 datapath
存取指令 (两个状态单元,一个加法器)
指令存储器(Instruction memory)
程序计数器 PC 保存当前指令地址
加法器 增加PC值获取下一条指令,通过ALU实现
寄存器堆 处理器的32个通用寄存器
- 指令格式
- R型 funct7(7)-rs2(5)-rs1(5)-funct3(3)-rd(5)-opcode(7)
- I型 immediate(12)-rs1(5)-funct3(3)-rd(5)-opcode(7)
- S型 immediate [11:5]-rs2(5)-rs1(5)-funct3(3)-immediate [4:0]-opcode(7)
指令集 | RV32I | RV32M | RV32A | RV32D | RV32F | F和D共有 | RV32G |
---|---|---|---|---|---|---|---|
指令数 | 47 | 8 | 11 | 32 | 32 | 8 | 112 |
寄存器
寄存器 | ABI名称 | 说明 |
---|---|---|
x0 | zero | 硬编码为0,写入数据忽略,读取数据为0 |
x1 | ra | 返回地址 |
x2 | sp | 栈指针 |
x3 | gp | 通用指针 global pointer |
x4 | tp | 线程指针 |
x5 | t0 | 存放临时数据或者备用链接 |
x6-x7 | t1-t2 | 存放临时数据 |
x8 | s0/fp | 需要保存的寄存器或者帧指针寄存器 |
x9 | s1 | 需要保存寄存器 |
x10-x11 | a0-a1 | 函数参数或者返回值 |
x12-x17 | a2-a7 | 函数传递参数 |
x18-x27 | s2-s11 | 需要保存的寄存器 |
x28-x31 | t3-t6 | 存放临时数据 |
特权架构
level | Encoding | Name | Abbreviation |
---|---|---|---|
0 | 00 | User/Appliation 用户模式 | U |
1 | 01 | Supervisor 监管者模式 | S |
2 | 10 | Reserved 虚拟化 | H |
3 | 11 | Machine 机器模式最高权限 | M |
CSR寄存器
M模式CSR寄存器,需要使用csrr、csrw、csrrw等特定指令进行访问。
- mstatus
状态寄存器 保存全局中断使能状态和其他状态例如切换模式前保存当前模式。 - mtvec
异常入口基地址寄存器,保存发生异常时需要跳转的地址 - medeleg和mideleg
异常委托和中断委托。如在M模式下发生异常或中断时,可以通过这两个寄存器交给其他模式处理。 - mip和mie
中断使能和中断等待 - hpm Hardware Performance Monitor
硬件性能单元,用于性能计数u,包括 mphmcounter性能计数器 和 mphmevent用于配置性能事件 - mcounteren 计数器使能 和 mcountinhibit禁止计数
- mscratch 保存M模式指向hart上下文的指针并在进入M模式的处理程序时和用户寄存器交换。
- mepc 发生中断时当前PC值保存在mepc中,中断返回时会读取pc值
- mcause 保存发生中断或异常的情况 1中断0异常
- mvtal 发生异常时保存出错的地址