RISC-V学习笔记(二):RISC-V寄存器和指令系统

RISC-V学习笔记(主线剧情)系列:

RISC-V 学习笔记(零):准备工作_星影沉璧的博客-CSDN博客

RISC-V学习笔记(一):RISC-V处理器和基础的RISC-V实现_星影沉璧的博客-CSDN博客

RISC-V学习笔记(二):RISC-V寄存器和指令系统_星影沉璧的博客-CSDN博客

RISC-V汇编学习笔记(支线剧情)系列:

RISC-V 学习笔记(零):准备工作_星影沉璧的博客-CSDN博客

RISC-V汇编学习笔记(一):RISC-V汇编语言和基础的算术指令_星影沉璧的博客-CSDN博客

RISC-V汇编学习笔记(二):RISC-V汇编语言访存指令_星影沉璧的博客-CSDN博客

RISC-V汇编学习笔记(三):RISC-V汇编语言和条件判断分支转移指令_星影沉璧的博客-CSDN博客

RISC-V汇编学习笔记(四):RISC-V汇编语言和逻辑运算指令_星影沉璧的博客-CSDN博客

RISC-V汇编学习笔记(五):RISC-V汇编语言和函数调用_星影沉璧的博客-CSDN博客

RISC-V汇编学习笔记(六):RISC-V汇编语言和栈的使用_星影沉璧的博客-CSDN博客

前提

在前面的主线剧情当中着重讲了RISC-V的基本实现,包括了RISC-V的CPU结构、RISC-V功能的实现等。实践部分的RISC-V项目:

1.寄存器的宽度为32位的RISC-V是RV32;寄存器的宽度为64位的RISC-V是RV64。(这里就解释了为什么实践项目里的位宽都没有超过32)

RISC-V寄存器

1.RISC-V寄存器堆:对数据通路至关重要的结构。由一组寄存器组成,可通过提供要访问的寄存器号来进行读写。(p437)和(p25) 

1.通用寄存器(regs.v)

在RISC-V当中一共拥有32个通用寄存器,在RV32中是32位宽,RV64中是64位宽。

RISC-V学习笔记(二):RISC-V寄存器和指令系统_第1张图片

注释:No代表Caller;Yes代表Callee;在函数调用关系中,通常将发起调用的函数称为调用函数(caller),将被调用函数称为被调用函数(callee)

接口名称 寄存器编号 说明
zero(零寄存器) x0 用于做源寄存器(rs)或目标寄存器(rd)
ra(链接寄存器) x1 用于保存返回时的返回地址
sp(栈指针寄存器) x2 用于指向栈的地址
gp(全局寄存器) x3 用于链接器松弛优化
tp(线程寄存器) x4 用于在OS中保存指向进程控制块(task_struct)数据结构的指针
t0 ~ t6(临时寄存器 x5 - x7和x28 - x31
s0 - s11 x8 - x9和x18 - x27 用于作为保存寄存器,保存原进程中的关键数据,避免在函数调用过程中被破坏。其中x8(s0/fp)又被称为帧指针寄存器
a0 - a7 x10 - x17 用于向调用的函数传递参数,a0和a1寄存器常用于传递返还值

                注释:x0寄存器的值总为0

2.系统寄存器(csr_reg.v)

系统寄存器:状态寄存器(CSR),属于CPU自带的一类寄存器,需要使用csrr、csrw、csrrw等特定指令进行访问。直接与RV32特权架构关联。

RISC-V学习笔记(二):RISC-V寄存器和指令系统_第2张图片

转载自:【RISC-V】RISC-V寄存器_一苇以航fp的博客-CSDN博客

RISC-V一共有三种模式:

RISC-V的权限模式和它们的编码:

RISC-V学习笔记(二):RISC-V寄存器和指令系统_第3张图片

1.M模式:机器模式,是RISC-V中的hart(硬件线程)可以执行的最高权限模式,是所有RISC-V处理器都必须要有的。(在项目csr_reg.v中可以知道使用的就是这种模式)

2.S模式:监督模式,可选,若支持,为 LinuxFreeBSD Windows 等操作系统提供支持,该模式可运行模式可运行Linux等os内核。

3.U模式:用户模式,实现对资源的保护,运行用户应用。

M模式
M模式下异常处理的八个控制状态寄存器(CSR):

1.mtvec(Machine Trap Vector):保存发生异常时处理器需要跳转到得地址。

2.mepc(Machine Exception PC):指向发生异常得指令。

3.mcause(Machine Exception Cause):指示发生异常得种类。

4.mie(Machine Interrupt Enable):指出处理器目前能处理和必须忽略的中断。

5.mip(Machine Interrupt Pending):列出目前正准备处理的中断。(csr_reg.v中不包含)

6.mtval(Machine Trap Value):保存了陷入(trap)的附加信息:地址例外出错的地址、发生非法指令例外的指令本身,对于其他异常,值为0。(csr_reg.v中不包含)

7.mscratch(Machine Scratch):暂时存放一个字大小的数据。

8.mstatus(Machine Status):保存全局中断使能,以及其他状态

RISC-V指令系统

RISC-V指令:计算机语言中的单词,它的词汇表被称为指令系统

RISC-V指令集

1.RISC-V指令集由基本指令集 + 扩展指令集组成,基础指令集是必选的,扩展指令是可选的。

2.RISC-V指令集中I(整数指令集)和E(嵌入式指令集,RV32E是32位特有)是基础指令集,在此基础上我们可以额外添加F(单精度浮点扩展)、M(整数乘除法)、A(原子扩展)等扩展指令。实践项目支持RV32IM指令集,也就是在RV32I的基础指令上添加了M扩展指令 。

3.实践项目使用的是RV32IM

RISC-V学习笔记(二):RISC-V寄存器和指令系统_第4张图片

基础指令集和扩展指令集描述:

RISC-V学习笔记(二):RISC-V寄存器和指令系统_第5张图片

转载自:RISC-V 入门笔记(新手必看!) - 知乎 (zhihu.com)

RV32IM指令
 1.RV32I基础指令(这玩意在支线任务里会讲,看完这你就能懂define.v里面的哪些R、J是啥玩意了)

RISC-V学习笔记(二):RISC-V寄存器和指令系统_第6张图片

注释:1.看这个图头大吧?我 当初第一次翻开书本看到这个图人都傻了,这个不重要啊,这                里我掏出来吓人的而已。

           2.把带下划线的字母从左到右连接就是RV32I的指令。花括号{}中的每个项目都是该指                令的变体。

6种基本指令格式:

RISC-V学习笔记(二):RISC-V寄存器和指令系统_第7张图片

注释:1.funct7:7位功能码,用于区分不同指令的种类。

           2.rs2:源寄存器2,需要读取得通用寄存器,该Bit域是寄存器的地址。

           3.rs1:源寄存器1,需要读取得通用寄存器,该Bit域是寄存器的地址。

           4.funct3:3位的功能码。

           5.rd:5位的目的寄存器,用于存储指令的运算结果。

           6.imm:不同长度的立即数 ,一般会扩展为32位再进行运算操作。

           7.opcode:7位指令操作码,用于区分不同的指令

1.R型指令:用于寄存器与寄存器之间算术运算操作。

2.I型指令:用于寄存器与立即数之间算术运算和读存储器操作。

3.S型指令:用于写存储器。

4.B型指令:用于分支转移操作(属于S型指令的变体,之前也叫SB型指令)。

5.U型指令:用于高20比特位立即数操作。

6.J型指令:用于直接跳转(属于U型指令的变体,之前也叫UJ型指令

RISC-V学习笔记(二):RISC-V寄存器和指令系统_第8张图片

2.RV32M扩展指令 

RISC-V学习笔记(二):RISC-V寄存器和指令系统_第9张图片

RISC-V学习笔记(二):RISC-V寄存器和指令系统_第10张图片

RISC-V学习笔记(二):RISC-V寄存器和指令系统_第11张图片

你可能感兴趣的:(RISC-V,risc-v,学习,笔记)