首页 > 技术资料 > RISC-V 基础
RISC(Reduced Instruction Set Computer)精简指令系统
RISC-V (发音risc-five)“V”也表示变化(variation)和向量(vectors)
CPU的灵魂--ISA 指令集架构 Instruction Set Architecture
模块化ISA:提供短小精干的基本指令集+标准扩展(1+N),预留足够空间。
基本及标准扩展ISA不会再改变,通过可选扩展而非更新ISA的方式来增加指令。
RISC-V ISA modules:
基本指令集 | 指令数 | 描述 |
RV32I | 47 | 32位地址空间与整数指令,支持32个通用整数寄存器 |
RV32E | 47 | 嵌入式架构RV32I的子集,仅支持16个通用整数寄存器 |
RV64I | 59 | 64位地址空间与整数指令,及一部分32位的整数指令 |
RV128I | 71 | 128位地址空间与整数指令,及一部分64位和32位的指令 |
扩展指令集 | 指令数 | 描述 |
M | 8 | 整数乘法与除法指令 |
A | 11 | 存储器原子(Atormic)操作指令和Load-Reserved/Store-Conditional指令 |
F | 26 | 单精度(32bit)浮点指令 |
D | 26 | 双精度(64bit)浮点指令,必须支持F扩展指令 |
C | 46 | compressed 压缩指令,指令长度为16位每一条16位的指令都能找到对应的原始32位指令 |
misa寄存器低26位各域表示的模块化指令子集
bit gharacter description
0 A atomic extension
1 B tentatively reserved for bit operations extensiion
2 C compressed extension
3 D double-precision floating-point extension
4 E RV32E
base ISA
5 F single-precision floating-point extension
6 G additional standard extensions present
7 H reserved
8 I RV32I/64I/128I/base ISA
9 J tentatively reserved for dynamically translated languages extension
10 K reserved
11 L tentatively reserved for decimal floating-point extension
12 M integer multiply/divide extension
13 N user-level interrupts supported
14 O reserved
15 P tentatively reserved for packed-SIMD
extension
16 Q quad-precision floating-point extension
17 R reserved
18 S supervisor mode implemented
19 T tentatively reserved for transactional memory extension
20 U user mode implemented
21 V tentatively reserved
for vector extension
22 W reserved
23 X non-standard extensions present
24 Y reserved
25 Z reserved
RV32G(通用)组合 表示RV32IMAFD RV64G=RV64IMAFD
RV32EC 小面积低功耗嵌入式场景,不支持浮点指令子集F和D
vector矢量指令子集:人工智能和高性能计算需求
自定制指令扩展,4条custom指令,可扩展出几十条自定义的指令
指令集规整简单,从而可以设计出更高的主频与更低的面积,存储器的资源更加丰富;
RISC-V架构定义了3种工作模式:
M 机器模式 Machine mode 直接操作物理地址的嵌入式系统
S 监督模式 supervisor mode
U 用户模式 user mode 直接操作虚拟地址的操作系统
存储器访问指令:存储器读指令Load 存储器写指令Store 指令访问存储器Memory
通用寄存器 general purpose registers
32个通用整数寄存器x0~x31
CSR控制和状态寄存器 control and status register
CSR寄存器是处理器内部的寄存器,使用自己的地址编码空间,和存储器寻址的地址空间没关系。CSR寄存器使用专有的12位地址编码空间。
Hart概念hardware thread硬件线程
一个处理器核实现多份硬件线程,每套线程有自己独立的寄存器组等资源,多数运算资源均能被所有硬件线程复用。
memory model 存储器模型
假设不同的core需要同时访问及读写共享的存储器区间,由于不同的核在执行程序时存在随机性和不确定性,就会对运行多核程序的系统造成不稳定性,ISA为了给上层软件明确规定多核程序访问共享数据的结果,在指令集中引入了存储器模型的概念。
3种代表性的存储器模型:
1 按序一致性模型 sequential consistency model
2 松散一致性模型 relaxed consistency model
引入了特殊的存储器屏障memory FENCE指令,保证在FENCE之前的数据访问结果比之后的先执行。
3 释放一致性模型 release consistency model
定义了释放release指令屏蔽其之前的存储器访问操作;
获取acquire指令屏蔽其之后的操作;
存储器模型不仅适用于多核场景,也适用于多线程场景;
存储器原子操作指令
多核软件开发中经常需要进行“上锁”(如spin_Lock和mutex_Lock等)典型三核场景如core0,core1,core2共享一片数据区间,但同一时间只有一个core能够独占此数据区间,core0/1/2约定一个共享的全局变量作为Lock
程序的全局变量在硬件上的本质是存储器中分配一个地址保存该变量的值,每个core都能访问该地址;Lock中的值为0表示共享数据区间空闲,1表示被独占。
为了解决独占时面临的竞争问题,引入原子操作,让发现锁空闲的第一次Load和下一次store操作成为一个整体,期间不被别的core访问打断,便可以保证一次只能有一个core上锁成功。
原子操作的弊端:锁定总线导致其他的core无法访问,所以又引入exclusive互斥类型的存储器访问指令。
中断和异常
interrupt 中断机制
interrupt request 中断请求
interrupt surce 中断源,通常来自于外围设备
ISR interrupt service routine 中断服务程序
保存现场,恢复现场,中断仲裁,中断优先级,中断嵌套
PLIC平台级别中断控制器
RISC-V 整数和浮点寄存器的汇编助记符
寄存器 Register |
接口名称 ABI name |
描述 | description |
x0 | zero | hard-wired zero | 硬编码0 |
x1 | ra | return address | 返回地址 |
x2 | sp | stack pointer | 栈指针 |
x3 | gp | global pointer | 全局指针 |
x4 | tp | thread pointer | 线程指针 |
x5 | t0 | temporary/alternate link register | 临时寄存器、备用链接寄存器 |
x6-7 | t1-2 | temporaries | 临时寄存器 |
x8 | s0/fp | saved register/frame pointer | 保存寄存器、帧指针 |
x9 | s1 | saved register | 保存寄存器 |
x10-11 | a0-1 | function arguments/return values | 函数参数、返回值 |
x12-17 | a2-7 | function arguments | 函数参数 |
x18-27 | s2-11 | saved registers | 保存寄存器 |
x28-31 | t3-6 | temporaries | 临时寄存器 |
f0-7 | ft0-7 | FP temporaries | 浮点临时寄存器 |
f8-9 | fs0-1 | FP saved registers | 浮点保存寄存器 |
f10-11 | fa0-1 | FP arguments/return values | 浮点参数、返回值 |
f12-17 | fa2-7 | FP arguments | 浮点参数 |
f18-27 | fs2-11 | FP saved registers | 浮点保存寄存器 |
f28-31 | ft8-11 | FP temporaries | 浮点临时寄存器 |