《手把手教你设计CPU——RISC-V处理器篇》读书笔记(二)

二、RISC寄存器

RV32 IMAFDC?IMAFD=G

又E子集是只有16个通用寄存器的子集。

寄存器组包括通用寄存器和控制与状态寄存器(CSR)。通用寄存器别名如下图所示。

X0是预留的0。

X1是返回地址。

X2是栈指针。

X3是全局指针。

X4是线程指针。

X5是临时链接寄存器。

X6-7是临时寄存器。

X8是保存寄存器0或框架指针。

X9是保存寄存器1。

X10-11是函数参数或者返回值。

X12-17是函数参数。

X18-27是保存寄存器。

X28-31是临时寄存器。

可见,实现非嵌入式指令集需要的寄存器种类和嵌入式指令集需要的寄存器种类一致。

PC = Instruction Program Counter

CSR寄存器用以配置和记录一些运行的状态。E203只支持机器模式相关的CSR寄存器。

Misa指令集架构寄存器,最高两位用于指示处理器支持的架构位数。低26位分别表示对ISA模块化子集的支持。本来是可读可写,能够动态配置,E203中只读。

Mvendorid只读,反应供应商编号。0表示不是商业处理器。

Marchid只读,反应微架构编号。0表示未实现。

Mstatus寄存器是机器模式下的状态寄存器。

4.mstatus的XS域

XS域和FS域的作用类似,维护或反应用户自定义的扩展指令单元状态。

Mtvec配置异常的入口地址。

Mepc 保存进入异常之前的PC值,作为异常的返回地址。Mepc可读可写。中断发生时,mepc指向下一条未执行的指令。异常发生时,mepc指向原来的指令地址,需要被改写返回地址以防止死循环。

异步异常不能被精确定位。

Mcause保存异常之前的原因,以便调试。最高一位中断域,低31位是异常编号域,两个域的组合可以指示12种中断类型和16种异常类型。

Mtval 异常出错时,出错指令操作的地址值或者编码值。如果是存储访问造成的异常,则

Mcycle和mcycleh计数器始终自增,e203可以停止。

Minstrect 成功执行指令数,衡量性能用。

Msip,软件触发的同步中断。