andeyqi 发表于 2024-11-23 18:48

【读书】《RISC-V 体系结构编程与实践(第2版)》-- RISC-V 架构寄存器学习

本帖最后由 andeyqi 于 2024-11-24 16:42 编辑

## 简介

很高兴能够与参加论坛的《RISC-V 体系结构编程与实践(第2版)》的读书活动,借此读书活动学习了解RISC-V架构的知识,收到了论坛邮寄的书籍,先来张书籍崭新的封面,查看目录发现内容还是很丰富的,熟悉RISC-V 先从架构的基本的寄存器开始学习。



### RISC-V 寄存器
#### 通用寄存器
RISC-V 体系结构提供32个通用整型寄存器(X0-X31),寄存器的长度则根据处理器的位数相关,64位处理器寄存器长度位64位,32位处理器则是32位,长度位XLENG根据处理器的长度一致,浮点数运行RISC-V处理器也提供32个浮点数通用寄存器f0-f31。书中对寄存器也有详细描述,对应内容如下。


RISC-V 对寄存器划分了特定的功能用途对应如下。

- x0 寄存器别名为zer0,寄存器内容全是0,可以作为源寄存器,也可以作为目标寄存器
- x1 寄存器别名为ra 链接寄存器,用于保存函数返回地址
- x2 寄存器别名为sp 栈指针寄存器,指向栈地址
- x3 寄存器别名为gp 全局寄存器,用于链接器松弛优化
- x4 寄存器别名为tp 线程寄存器,通常在操作系统中保存指向进程控制块 task_struct 指针
- x5-x7 以及 x28-x31 寄存器为临时寄存器,它们别名分别是t0~t6
- x8-x9 以及 x18-x27 寄存器的别名分别为s0-s11,称为Callee-saved registers 寄存器用户在程序中使用需要保存到栈中
- x10-x17 寄存器别名为a0-a7,在函数调用时传递参数和返回值

以下是**通用寄存器**的number 和 别名的对应关系



以下是**浮点寄存器**的number 和 别名的对应关系


#### 系统寄存器
除了上述系统必须的通用寄存器外,RISC-V 还定义了其他的系统控制和状态寄存器(Control and Status Registers,CSRs),通过特定的CSR 指令去访问这些寄存器。CSR 指令编码中预留了12bit 的编码空间(csr)用来作为索引访问特定的系统寄存器,对应的CSR 指令编码格式如下。


其中12bit 的编码空间可以用来索引4096 个寄存器,其中12bit 编码管理方式如下:
1. CSR 用来表示系统寄存器的读写属性,0b11 表示只读,其余表示可读可写
2. CSR 表示允许访问该系统处理器的模式,0b00 表示U模式,0b11 S模式,0b11 M模式 ,0b10 HS/VS 模式

以下是RISC-V 规范(riscv-privileged-20211203.pdf)中对CSR 寄存器管理的说明


**U模式下的CSR寄存器定义说明**


**S模式的CSR寄存器定义说明**


**M模式下的CSR寄存器定义说明**


##### GD32VF103 MCU CSR 寄存器的定义说明
对于CSR 寄存器我们查看GD32VF103基于RISC-V 32bit 的 Bumblebee 内核的处理器芯片的手册查看其中定义了如下的CSR寄存器


从上述CSR 寄存器定义可以看出GD32VF103 的芯片只实现支持了M模式和U模式,支持了部分的RISC-V 标准的CSR寄存器外还自定义了部分的CSR 寄存器。

CSR 寄存器访问索引中定义了寄存器访问的模式及读写属性,该特性可以用于芯片的访问权限的管理,以下是GD32VF103基于RISC-V 32bit 的 Bumblebee 内核的 的管理方法说明。

lemonboard 发表于 2024-11-24 10:33

<p>RISC-V在国内的份量越来越重了</p>

andeyqi 发表于 2024-11-24 22:29

lemonboard 发表于 2024-11-24 10:33
RISC-V在国内的份量越来越重了

<p>嗯&nbsp; 国内市面上的RISC-V 的芯片也越来越多了</p>
页: [1]
查看完整版本: 【读书】《RISC-V 体系结构编程与实践(第2版)》-- RISC-V 架构寄存器学习