logo资料库

RISCV手册中文版.pdf

第1页 / 共114页
第2页 / 共114页
第3页 / 共114页
第4页 / 共114页
第5页 / 共114页
第6页 / 共114页
第7页 / 共114页
第8页 / 共114页
资料共114页,剩余部分请下载后查看
第1章 介绍
1.1 RISC-V ISA概述
1.2 指令长度编码
1.3 异常、自陷和中断
第2章 RV32I基本整数指令集,2.0版
2.1 基本整数子集的程序员模型
2.2 基本指令格式
2.3 立即数编码变种
2.4 整数计算指令
整数寄存器-立即数指令
整数寄存器-寄存器操作
NOP指令
2.5 控制转移指令
无条件跳转
条件分支
2.6 Load和store指令
2.7 存储器模型
2.8 控制和状态寄存器指令
CSR指令
定时器和计数器
环境调用和断点
第3章 RV32E基本整数指令集,版本1.9
3.1 RV32E程序员模型
3.2 RV32E指令集
3.3 RV32E扩展
第4章 RV64I基本整数指令集,版本2.0
4.1 寄存器状态
4.2 整数计算指令
整数寄存器-立即数指令
整数寄存器-寄存器操作
4.3 Load和Store指令
4.4 系统指令
第5章 整数乘法除法的“M”标准扩展,版本2.0
5.1 乘法操作
5.2 除法操作
第6章 原子性指令的“A”标准扩展,版本2.0
6.1 原子性操作的指定顺序
6.2 Load-reserved/store-conditional指令
6.3 原子性存储器操作
第7章 单精度浮点的“F”标准扩展,版本2.0
7.1 F寄存器状态
7.2 浮点控制和状态寄存器
7.3 NaN生成和传递
7.4 非规格化数算术
7.5 单精度load和store指令
7.6 单精度浮点计算指令
7.7 单精度浮点转换和传输指令
7.8 单精度浮点比较指令
7.9 单精度浮点分类指令
第8章 双精度浮点的“D”标准扩展,版本2.0
8.1 D寄存器状态
8.2 双精度load和store指令
8.3 双精度浮点计算指令
8.4 双精度浮点转换和传输指令
8.5 双精度浮点比较指令
8.6 双精度浮点分类指令
第9章 RV32/64G指令集列表
第10章 扩展RISC-V
10.1 扩展术语
标准 vs. 非标准扩展
指令编码空间和前缀
绿地扩展 vs. 棕地扩展
标准兼容的全局编码
保证的非标准编码空间
10.2 RISC-V扩展设计理念
10.3 在固定32位指令格式内的扩展
可用的30位指令编码空间
可用的25位指令编码空间
可用的22位指令编码空间
其他空间
10.4 增加对齐的64位指令扩展
10.5 支持VLIW编码
定长指令组
编码长度指令组
固定大小指令束
前缀中“组结束位”
第11章 ISA子集命名约定
11.1 大小写敏感
11.2 基本整数ISA
11.3 指令扩展名字
11.4 版本号
11.5 非标准扩展命名
11.6 管理员级指令子集
11.7 管理员级扩展
11.8 子集命名约定
第12章 四精度浮点的“Q”标准扩展,版本2.0
12.1 四精度load和store指令
12.2 四精度计算指令
12.3 四精度转换和传输指令
12.4 四精度浮点比较指令
12.5 四精度浮点分类指令
第13章 十进制浮点的“L”标准扩展,版本0.0
13.1 十进制浮点寄存器
第14章 压缩指令的“C”标准扩展,版本1.9
14.1 概述
14.2 压缩指令格式
14.3 Load和store指令
基于栈指针的load和store
基于寄存器的Load和store
14.4 控制转移指令
14.5 整数计算指令
整数常数-生成指令
整数寄存器-立即数指令
整数寄存器-寄存器指令
预定义非法指令
NOP指令
断点指令
14.6 在LR/SC序列中使用C指令
14.7 RVC指令集列表
14.8 指令压缩统计
14.9 优化寄存器保存/恢复代码大小
第15章 向量操作的“V”标准扩展,版本0.0
第16章 位操作的“B”标准扩展,版本0.0
第17章 事务存储器的“T”标准扩展,版本0.0
第18章 打包SIMD指令的“P”标准扩展,版本0.1
第19章 RV128I基本整数指令集,版本1.7
第20章 调用约定
20.1 C数据类型和对齐
20.2 RVG调用约定
20.3 软浮点调用约定
20.4 RV32E调用约定
第21章 RISC-V汇编程序员手册
第22章 历史和致谢
22.1 到ISA手册1.0版本以前的历史
22.2 从ISA手册2.0版本以来的历史
致谢
22.3 版本2.1的历史
致谢
22.4 资助
参考文献
RISC-V 指令集手册 卷 1:用户级指令集体系结构(User-Level ISA) 2.1 版 (翻译:要你命 3000@EETOP 翻译版本 1.0) Andrew Waterman, Yunsup Lee, David Patterson, Krste Asanović CS Division, EECS Department, University of California, Berkeley {waterman|yunsup|pattrsn|krste}@eecs.berkeley.edu 2016 年 5 月 31 日 该文档同时也是 UCB/EECS-2016-118 技术报告
序言 这是描述 RISC-V 用户级体系结构文档的 2.1 版。注意已经冻结的基本用户级 ISA 和 2.0 版的 IMAFDQ 扩展从该文档的上一个版本[30]以来并没有发生变化,但是填充了一些规范的 “空洞”以及改善了文档。对软件约定做了一些改变。  对注释部分做了大量地添加和改进。  每一章有单独的版本号。  修改了>64 位的长指令编码,以避免在非常长的指令格式里移动 rd 区分符。  现在使用基本整数格式来描述 CSR 指令,引入了计数器寄存器,不同于(以前版本)  仅在后面的浮点部分(和特权体系结构手册中)引入。 SCALL 指令和 SBREAK 指令被分别重命名为 ECALL 指令和 EBREAK 指令。它们的编码 和功能并没有改变。  澄清了浮点 NaN 的处理,以及一个新的规定的 NaN 值。  澄清了浮点到整数转换溢出时的返回值。  澄清了 LR/SC 允许的成功和要求的失败,包括在序列中使用压缩指令。  一个新的 RV32E 基本 ISA 提案,可减少整数寄存器数量。  修订了调用约定。  放松了软浮点调用约定的栈对齐,描述了 RV32E 调用约定。  一个修订的 C 压缩扩展提案,版本 1.9。 2.0 版的序言 用户指令集体系结构规范的第二个发布版本,我们试图保持这个基本的用户 ISA 加上通 用扩展(就是 IMAFD),在未来版本中保持固定不变。从这个 ISA 的 1.0 版本[29]以来,有如 下变化: ISA 被划分为一个整数基本内核和几个标准扩展。   重新组织了指令格式,使得立即数编码更加高效。  基本的 ISA 被定义为拥有一个小端(little-endian)的存储器系统,而大端、双端作 为非标准的变种。 Load-Reserved/Store-Conditional(LR/SC)指令被添加进原子指令集扩展。   AMO 和 LR/SC 指令可以支持释放一致性模型(release consistency model)。   加入了 fetch-and-XOR 的 AMO(AMOXOR),对 AMOSWAP 的编码进行了修改,以便 FENCE 指令提供了细粒度的存储器和 I/O 序列化(orderings)。 留出空间。   将 20 位立即数加到 PC 上的 AUIPC 指令,替换了 RDNPC 指令,AUIPC 指令只读取 当前的 PC 值。这导致对位置无关代码(position-independent code)的大量简化。 JAL 指令现在被移动到 U 类型格式,具有一个显示的(explicit)目标寄存器,而 J 指令被 rd=x0 的 JAL 指令所代替。这个改变,消除了唯一一条需要隐式(implicit) 目标寄存器的指令,并且从标准 ISA 中去掉了 J 类型指令格式。这虽然是 JAL 指令 的一个附加效果,但是却极大地减少了基本 ISA 的复杂性。  去掉了 JALR 指令的静态提示(static hints)。对于使用标准调用约定编译的代码来 说,这些提示和 rd、rs1 寄存器是冗余的。 Copyright ©2010-2016, The Regents of the University of California. All rights reserved. ii
 JALR 指令现在清除了计算出来的目标地址的最低位,以简化硬件并允许在函数指 针中存储附加信息。  MFTX.S、MFTX.D 指令被分别命名为 FMV.X.S、FMV.X.D 指令,MXTF.S、MXTF.D 指令 被分别命名为 FMV.S.X、FMV.D.X 指令。  MFFSR、MTFSR 指令被分别命名为 FRCSR、FSCSR 指令,新增了 FRRM、FSRM、 FRFLAGS 和 FSFLAGS 指令,用于独立地访问 fcsr 寄存器的舍入模式和异常标志。 FMV.X.S、FMV.X.D 指令现在使用 rs1 作为源操作数,而不是 rs2。这样可以简化数 据通路设计。   新增了 FCLASS.S、FCLASS.D 浮点指令。  采用了一种更简单的 NaN 生成和传播模式。  对于 RV32I,系统性能计数器被扩展成 64 位宽度,可以单独读取高 32 位和低 32 位。  定义了规定的(Canonical)NOP 和 MV 指令编码。  对于 48 位、64 位和大于 64 位指令,定义了标准指令长度编码。  新增了一个 128 位地址空间变种 RV128 的描述。  32 位基本指令格式中的大部分操作码分配给用户自定义的定制扩展。  一个印刷错误被纠正:store 的源操作数来源于 rd,其实应该来源于 rs2。 Copyright ©2010-2016, The Regents of the University of California. All rights reserved. iii
目录 2.5 2.6 2.7 2.8 第 1 章 1.1 1.2 1.3 第 2 章 2.1 2.2 2.3 2.4 介绍 ........................................................................................................................... 1 RISC-V ISA 概述 ......................................................................................................... 3 指令长度编码 ........................................................................................................... 5 异常、自陷和中断 ................................................................................................... 6 RV32I 基本整数指令集,2.0 版 .............................................................................. 8 基本整数子集的程序员模型 ................................................................................... 8 基本指令格式 ........................................................................................................... 9 立即数编码变种 ..................................................................................................... 10 整数计算指令 ......................................................................................................... 11 整数寄存器-立即数指令................................................................................................ 12 整数寄存器-寄存器操作................................................................................................ 13 NOP 指令 ........................................................................................................................ 14 控制转移指令 ......................................................................................................... 14 无条件跳转 ..................................................................................................................... 14 条件分支 ......................................................................................................................... 15 Load 和 store 指令 .................................................................................................. 17 存储器模型 ............................................................................................................. 18 控制和状态寄存器指令 ......................................................................................... 20 CSR 指令 ......................................................................................................................... 20 定时器和计数器 ............................................................................................................. 22 环境调用和断点 ............................................................................................................. 23 RV32E 基本整数指令集,版本 1.9 ....................................................................... 24 RV32E 程序员模型 ................................................................................................. 24 RV32E 指令集 ......................................................................................................... 24 RV32E 扩展 ............................................................................................................. 25 RV64I 基本整数指令集,版本 2.0 ........................................................................ 26 寄存器状态 ............................................................................................................. 26 整数计算指令 ......................................................................................................... 26 整数寄存器-立即数指令................................................................................................ 26 整数寄存器-寄存器操作................................................................................................ 28 Load 和 Store 指令 ................................................................................................. 28 4.3 系统指令 ................................................................................................................. 29 4.4 第 5 章 整数乘法除法的“M”标准扩展,版本 2.0 ....................................................... 30 乘法操作 ................................................................................................................. 30 5.1 除法操作 ................................................................................................................. 30 5.2 第 6 章 原子性指令的“A”标准扩展,版本 2.0 ............................................................. 32 原子性操作的指定顺序 ......................................................................................... 32 6.1 Load-reserved/store-conditional 指令 .................................................................... 33 6.2 原子性存储器操作 ................................................................................................. 36 6.3 第 7 章 单精度浮点的“F”标准扩展,版本 2.0 ............................................................. 38 F 寄存器状态 .......................................................................................................... 38 7.1 浮点控制和状态寄存器 ......................................................................................... 39 7.2 Copyright ©2010-2016, The Regents of the University of California. All rights reserved. 第 3 章 3.1 3.2 3.3 第 4 章 4.1 4.2 iv
7.3 7.4 7.5 7.6 7.7 7.8 7.9 第 8 章 8.1 8.2 8.3 8.4 8.5 8.6 第 9 章 第 10 章 NaN 生成和传递 ..................................................................................................... 40 非规格化数算术 ..................................................................................................... 41 单精度 load 和 store 指令...................................................................................... 41 单精度浮点计算指令 ............................................................................................. 41 单精度浮点转换和传输指令 ................................................................................. 42 单精度浮点比较指令 ............................................................................................. 44 单精度浮点分类指令 ............................................................................................. 44 双精度浮点的“D”标准扩展,版本 2.0 ............................................................ 46 D 寄存器状态 ......................................................................................................... 46 双精度 load 和 store 指令...................................................................................... 46 双精度浮点计算指令 ............................................................................................. 47 双精度浮点转换和传输指令 ................................................................................. 47 双精度浮点比较指令 ............................................................................................. 49 双精度浮点分类指令 ............................................................................................. 49 RV32/64G 指令集列表 ........................................................................................... 50 扩展 RISC-V ............................................................................................................. 55 10.1 扩展术语 ................................................................................................................. 55 标准 vs. 非标准扩展 .................................................................................................... 55 指令编码空间和前缀 ..................................................................................................... 55 绿地扩展 vs. 棕地扩展 ................................................................................................ 56 标准兼容的全局编码 ..................................................................................................... 57 保证的非标准编码空间 ................................................................................................. 57 RISC-V 扩展设计理念 ............................................................................................. 57 10.2 10.3 在固定 32 位指令格式内的扩展 ........................................................................... 58 可用的 30 位指令编码空间 ........................................................................................... 58 可用的 25 位指令编码空间 ........................................................................................... 58 可用的 22 位指令编码空间 ........................................................................................... 58 其他空间 ......................................................................................................................... 58 10.4 增加对齐的 64 位指令扩展 ................................................................................... 59 10.5 支持 VLIW 编码 ...................................................................................................... 59 定长指令组 ..................................................................................................................... 59 编码长度指令组 ............................................................................................................. 59 固定大小指令束 ............................................................................................................. 59 前缀中“组结束位” ..................................................................................................... 60 ISA 子集命名约定 ................................................................................................... 61 11.1 大小写敏感 ............................................................................................................. 61 11.2 基本整数 ISA ........................................................................................................... 61 11.3 指令扩展名字 ......................................................................................................... 61 11.4 版本号 ..................................................................................................................... 61 11.5 非标准扩展命名 ..................................................................................................... 62 11.6 管理员级指令子集 ................................................................................................. 62 11.7 管理员级扩展 ......................................................................................................... 62 11.8 子集命名约定 ......................................................................................................... 62 四精度浮点的“Q”标准扩展,版本 2.0 ............................................................ 64 Copyright ©2010-2016, The Regents of the University of California. All rights reserved. 第 11 章 第 12 章 v
第 14 章 第 13 章 12.1 四精度 load 和 store 指令...................................................................................... 64 12.2 四精度计算指令 ..................................................................................................... 64 12.3 四精度转换和传输指令 ......................................................................................... 65 12.4 四精度浮点比较指令 ............................................................................................. 66 12.5 四精度浮点分类指令 ............................................................................................. 67 十进制浮点的“L”标准扩展,版本 0.0 ............................................................. 68 13.1 十进制浮点寄存器 ................................................................................................. 68 压缩指令的“C”标准扩展,版本 1.9 ................................................................. 69 14.1 概述 ......................................................................................................................... 69 14.2 压缩指令格式 ......................................................................................................... 71 Load 和 store 指令 .................................................................................................. 72 14.3 基于栈指针的 load 和 store .......................................................................................... 73 基于寄存器的 Load 和 store .......................................................................................... 74 14.4 控制转移指令 ......................................................................................................... 75 14.5 整数计算指令 ......................................................................................................... 76 整数常数-生成指令 ....................................................................................................... 76 整数寄存器-立即数指令................................................................................................ 77 整数寄存器-寄存器指令................................................................................................ 79 预定义非法指令 ............................................................................................................. 80 NOP 指令 ........................................................................................................................ 80 断点指令 ......................................................................................................................... 81 14.6 在 LR/SC 序列中使用 C 指令 ................................................................................. 81 RVC 指令集列表 ..................................................................................................... 81 14.7 14.8 指令压缩统计 ......................................................................................................... 85 14.9 优化寄存器保存/恢复代码大小 ........................................................................... 88 向量操作的“V”标准扩展,版本 0.0 ................................................................. 90 第 15 章 位操作的“B”标准扩展,版本 0.0 ....................................................................... 91 第 16 章 事务存储器的“T”标准扩展,版本 0.0 ............................................................. 92 第 17 章 打包 SIMD 指令的“P”标准扩展,版本 0.1 ...................................................... 93 第 18 章 RV128I 基本整数指令集,版本 1.7 ...................................................................... 95 第 19 章 调用约定 ................................................................................................................. 96 第 20 章 C 数据类型和对齐 .................................................................................................. 96 20.1 RVG 调用约定 ......................................................................................................... 96 20.2 20.3 软浮点调用约定 ..................................................................................................... 99 RV32E 调用约定 ..................................................................................................... 99 20.4 第 21 章 RISC-V 汇编程序员手册 ....................................................................................... 100 历史和致谢 ........................................................................................................... 102 第 22 章 22.1 到 ISA 手册 1.0 版本以前的历史 ......................................................................... 102 22.2 从 ISA 手册 2.0 版本以来的历史 ......................................................................... 102 致谢 ............................................................................................................................... 104 22.3 版本 2.1 的历史 .................................................................................................... 104 致谢 ............................................................................................................................... 104 22.4 资助 ....................................................................................................................... 104 参考文献....................................................................................................................................... 106 Copyright ©2010-2016, The Regents of the University of California. All rights reserved. vi
Copyright ©2010-2016, The Regents of the University of California. All rights reserved. vii
第1章 介绍 RISC-V(读音“risk-five”)是一个新的指令集体系结构(ISA),它最初用于支持计算机 体系结构研究和教学,但现在我们希望它也成为一个对于工业实现来说标准、免费、开放的 体系结构。我们定义 RISC-V 的目的包括:  一个完全开放的ISA,能够自由地提供给学术界和工业界使用。  一个真正的ISA,能够适合直接在硬件上实现,而不仅仅是适用于模拟或者二进制 翻译。  一个避免对某一种微体系结构风格(例如微编码、按序、去耦合、乱序等)或者实 现技术(例如全定制、ASIC、FPGA)“过度体系结构化(over-architecting)”的 ISA, 但是也能够非常高效地利用任何一种技术实现。  包含一个小的基本整数 ISA(可以作为一个定制的加速器的基础或者作为教学用途) 和多个可选的标准扩展的 ISA,可以支持通用的软件开发。 ISA 支持丰富的用户级 ISA 扩展和各种特殊的变种。  支持修订的 2008 IEEE-754 浮点标准[10]。   对应用程序、操作系统内核、硬件实现的 32 位、64 位地址空间变种。   可选的变长指令,以支持扩展可用的指令编码空间、支持一个可选的密集指令编码, ISA 支持高度并行的多核、众核实现,包括异构多处理器等。 以提高性能、静态代码大小和能耗效率。  一个可完全虚拟化的 ISA,以简化虚拟机监督管理器(Hypervisor)的开发。  ISA 支持新的管理员级(supervisor-level)和虚拟机监督管理级(hypervisor-level) ISA 设计。 我们的设计考虑,将出现在类似的文本段落内,如果读者只关心规范,则 可以跳过这些段落。 RISC-V 这个名字,代表了UC Berkeley 大学设计的第五代主要的RISC ISA(前 四个是RISC-I[18]、RISC-II[11]、SOAR[27]和SPUR[14])。罗马数字“V”也暗示 了“变种(Variations)”和“向量(Vectors)”,以支持各种体系结构研究,包 括各种数据并行加速器,也是这个ISA 设计的明确目标。 我们研发 RISC-V 以满足我们自己的科研和教学需求,我们对如何在真实 硬件上实现一些研究思想特别感兴趣(自从这个规范的第一个版本发布之后, 我们已经完成了11 块不同的RISC-V 硅片的制造),在课堂上提供给学生真实 的实现(在Berkeley,RISC-V 处理器的RTL 设计代码已经用于多个本科生、研 究生的课程)。在我们当前的研究中,由于传统晶体管不断变小带来的能耗约 束,我们对特殊、异构的加速器特别感兴趣。我们需要一个高度灵活、高度可 扩展的基本ISA,在此基础上可以构建我们自己的研究。 我们总被问及这样一个问题“为什么要开发一个新的ISA?”。使用一个已 有的商业化的ISA,其显而易见最大的优势在于其已经具备了丰富和广泛支持 Copyright ©2010-2016, The Regents of the University of California. All rights reserved. 1
分享到:
收藏