首页 > 平台 > RISCV > RISC-V相关资源

RISC-V相关资源

RISC-V相关资源
RISC-V介绍
简介
基于已建立的精简指令集计算机(RISC)原理的开源硬件指令集架构(ISA)

RISC-V(发音为“risk-five”)是基于已建立的精简指令集计算机(RISC)原理的开源硬件指令集架构(ISA)。该项目于2010年在加州大学伯克利分校开始,但许多贡献者都是不隶属于该大学的志愿者。2019年3月,用户端的版本2.2的ISA固定下来,大多数软件开发者可以继续进行开发。 特许模式的ISA的草案版本1.10可以使用。 调试规范可用作草案版本0.13.1。

RISC-V(发音为“risk-five”)是基于已建立的精简指令集计算机(RISC)原理的开源硬件指令集架构(ISA)。该项目于2010年在加州大学伯克利分校开始,但许多贡献者都是不隶属于该大学的志愿者。2019年3月,用户端的版本2.2的ISA固定下来,大多数软件开发者可以继续进行开发。 特许模式的ISA的草案版本1.10可以使用。 调试规范可用作草案版本0.13.1。
行业意义
全新、简单且开放免费的指令及架构

可用的新指令集架构(ISA)通常非常昂贵,计算机设计师通常无法免费工作。此外,开发CPU需要几个专业的设计专业知识:电子数字逻辑、编译器和操作系统。在专业工程组织之外找到这样一个团队是不容易的。团队通常是从他们的设计收取的钱中支付的。因此,计算机设计的商业供应商,如ARM Holdings和MIPS Technologies,就其设计,专利和版权的使用收取使用费。 在发布描述其设计详细优势和指令集的文档之前,他们还经常要求保密协议。在许多情况下,他们从未描述他们的设计选择的原因。 这种费用和保密性使得新硬件和软件的开发变得更加困难。它还会阻止安全审核。另一个结果是除了在学术环境中之外,尚未解释或提供现代的,高质量的通用计算机指令集。 RISC-V开始解决这些问题。我们的目标是制作一个开源的实用ISA,可以在任何硬件或软件设计中使用而无需使用版税。此外,至少在广义上解释了项目每个部分的基本原理。 RISC-V的作者是学术性的,但在计算机设计方面拥有丰富的经验。 RISC-V ISA是一系列学术计算机设计项目的直接开发。它的部分原因是为了帮助这些项目。 为了解决设计成本问题,该项目由DARPA资助的学术研究开始。为了构建一个庞大,持续的用户社区,从而积累设计和软件,RISC-V ISA设计人员计划支持各种实际用途:小型,快速和低功耗的实际实现,没有针对特定的微体系结构进行过度架构。对大量贡献者的需求是RISC-V被设计为适合如此多用途的部分原因。 因此,许多RISC-V贡献者将该项目视为一项统一的社区工作。

可用的新指令集架构(ISA)通常非常昂贵,计算机设计师通常无法免费工作。此外,开发CPU需要几个专业的设计专业知识:电子数字逻辑、编译器和操作系统。在专业工程组织之外找到这样一个团队是不容易的。团队通常是从他们的设计收取的钱中支付的。因此,计算机设计的商业供应商,如ARM Holdings和MIPS Technologies,就其设计,专利和版权的使用收取使用费。 在发布描述其设计详细优势和指令集的文档之前,他们还经常要求保密协议。在许多情况下,他们从未描述他们的设计选择的原因。 这种费用和保密性使得新硬件和软件的开发变得更加困难。它还会阻止安全审核。另一个结果是除了在学术环境中之外,尚未解释或提供现代的,高质量的通用计算机指令集。 RISC-V开始解决这些问题。我们的目标是制作一个开源的实用ISA,可以在任何硬件或软件设计中使用而无需使用版税。此外,至少在广义上解释了项目每个部分的基本原理。 RISC-V的作者是学术性的,但在计算机设计方面拥有丰富的经验。 RISC-V ISA是一系列学术计算机设计项目的直接开发。它的部分原因是为了帮助这些项目。 为了解决设计成本问题,该项目由DARPA资助的学术研究开始。为了构建一个庞大,持续的用户社区,从而积累设计和软件,RISC-V ISA设计人员计划支持各种实际用途:小型,快速和低功耗的实际实现,没有针对特定的微体系结构进行过度架构。对大量贡献者的需求是RISC-V被设计为适合如此多用途的部分原因。 因此,许多RISC-V贡献者将该项目视为一项统一的社区工作。
优势
架构简洁
重新定义一个简洁的架构可以说是几乎不可能。其中一个重要的原因便是其无法向前兼容,从而无法得到用户的接受。 RISC-V架构,则具备了后发优势,由于计算机体系结构经过多年的发展已经成为比较成熟的技术,多年来在不断成熟的过程中暴露的问题都已经被研究透彻,因此新的 RISC-V 架构能够加以规避,并且没有背负向后兼容的历史包袱。 目前的 “RISC-V 架构文档”分为“指令集文档”( riscv-spec-v2.2.pdf )和“特权架构文档”( riscv-privileged-v1.10.pdf )。“指令集文档”的篇幅为 145 页,而“特权架构文档”的篇幅也仅为 91 页。熟悉体系结构的工程师仅需一至两天便可将其通读,虽然“ RISC-V 的架构文档”还在不断地丰富,但是相比“ x86 的架构文档”与“ ARM 的架构文档”, RISC-V 的篇幅可以说是极其短小精悍。
模块化指令集
RISC-V架构相比其他成熟的商业架构的最大一个不同还在于它是一个模块化的架构。因此, RISC-V 架构不仅短小精悍,而且其不同的部分还能以模块化的方式组织在一起,从而试图通过一套统一的架构满足各种不同的应用。 但是模块化的 RISC-V架构能够使得用户能够灵活选择不同的模块组合,以满足不同的应用场景,可以说是“老少咸宜”。譬如针对于小面积低功耗嵌入式场景,用户可以选择 RV32IC 组合的指令集,仅使用 Machine Mode (机器模式);而高性能应用操作系统场景则可以选择譬如 RV32IMFDC 的指令集,使用 Machine Mode (机器模式)与 User Mode (用户模式)两种模式。而他们共同的部分则可以相互兼容。
精简指令集
短小精悍的架构以及模块化的哲学,使得 RISC-V架构的指令数目非常的简洁。基本的 RISC-V 指令数目仅有 40 多条,加上其他的模块化扩展指令总共几十条指令。
关于RISC-V
先驱者
RISC一词的历史可以追溯到1980年左右。在此之前,有一些知识认为更简单的计算机可能是有效的,但设计原则没有被广泛描述。简单有效的计算机一直是学术上的兴趣所在。 Academics于1990年为第一版计算机体系结构:定量方法创建了RISC指令集DLX.David Patterson是作者,后来协助RISC-V。 DLX用于教育用途。学者和业余爱好者使用现场可编程门阵列实现它。这不是商业上的成功。 ARM CPU(版本2及更早版本)具有公共域指令集,GNU编译器集合(GCC)仍然支持它,这是一种流行的自由软件编译器。这个ISA存在三个开源核心,但它们尚未制造出来。 OpenRISC是一个基于DLX的开源ISA,具有相关的RISC设计。它完全支持GCC和Linux实现。但是,它几乎没有商业实施。
学术用途
加州大学伯克利分校的KrsteAsanović发现了许多用于开源计算机系统的用途。 2010年,他决定在“夏季短期,三个月的项目”中开发和发布一个。该计划旨在帮助学术和工业用户。伯克利的大卫帕特森也帮助了这项努力。他最初确定了Berkeley RISC的属性,而RISC-V是他长期合作的RISC研究项目之一。在这个阶段,学生们可以廉价地提供初始软件,模拟和CPU设计。 RISC-V作者及其机构最初提供了ISA文档和BSD许可下的几种CPU设计,允许衍生作品(如RISC-V芯片设计)开放和免费,或封闭和专有。 早期的资金来自DARPA
基金会
商业问题要求ISA在可以使用可能持续多年的产品之前保持稳定。为了解决这个问题,RISC-V基金会的成立是为了拥有,维护和发布与RISC-V定义相关的知识产权。原作者和所有者已经放弃了他们对基金会的权利。 自2019年起,该基金会自由发布定义RISC-V的文档,并允许在软件和硬件设计中不受限制地使用ISA。但是,只有RISC-V基金会的付费会员才能投票批准更改或使用商标兼容性徽标。
真实世界的使用
支持RISC-V基金会的部分组织包括:Advanced Micro Devices(AMD),Andes Technology,Antmicro,BAE Systems,Berkeley Architecture Research,Bluespec,Inc.,Cortus,Google ,GreenWaves Technologies,Hewlett Packard Enterprise,华为,IBM,Imperas Software,计算技术研究院(ICT)中国科学院,IIT Madras,Lattice Semiconductor,Mellanox Technologies,Microsemi,Micron Technologies,Nvidia,NXP,Oracle,Qualcomm,Rambus密码学研究,Western Digital和SiFive。
奖项
2017年:Linley集团最佳技术分析师选择奖(针对指令集)
激励要求
设计人员说,指令集是计算机中的主要接口,因为它位于硬件和软件之间。如果一个好的指令集是开放的,可供所有人使用,它应该通过允许更多的重用来大大降低软件的成本。它还应该增加硬件提供商之间的竞争,硬件提供商可以使用更多的资源进行设计而不是软件支持。 设计人员断言,新原则在指令集设计中变得越来越少,因为过去四十年中最成功的设计变得越来越相似。在那些失败的人中,大多数都是这样做的,因为他们的赞助公司在商业上失败了,不是因为技术上的指令集很差。因此,使用完善的原则设计的精心设计的开放式指令集应该吸引许多供应商的长期支持。 大多数先前的开放式ISA使用GNU通用公共许可证(GPL),鼓励用户打开他们的实现以复制和使用他人。 与仅为简化说明而优化的其他学术设计不同,设计人员声称RISC-V指令集适用于实际计算机。据说它具有提高计算机速度,降低成本和功耗的功能。这些包括加载 - 存储架构,简化CPU中多路复用器的位模式,简化的基于标准的浮点,架构中立的设计,以及将最高有效位放置在固定位置以加速符号扩展。据说符号扩展通常位于关键时序路径上。 该指令集适用于广泛的用途。它支持三个字宽,32,64和128位,以及各种子集。对于三个字宽,每个子集的定义略有不同。这些子集支持小型嵌入式系统,个人计算机,带矢量处理器的超级计算机以及仓库级机架式并行计算机。 指令集是可变宽度和可扩展的,因此总是可以添加更多的编码位。 ISA的128位拉伸版本的空间被保留,因为60年的行业经验表明,指令集设计中最不可恢复的错误是缺少内存地址空间。截至2016年,128位ISA仍然是故意未定义的,因为这种大型内存系统的实际经验却很少。 但是,RISC-V也支持设计师的学术用途。整数子集的简单性允许基本的学生练习。整数子集是一个简单的ISA,使软件能够控制研究机器。可变长度ISA可以扩展学生练习和研究。分离的特权指令集允许研究操作系统支持,而无需重新设计编译器。RISC-V的开放知识产权允许其设计被发布,重用和修改。
软件
新指令集的正常问题是缺乏CPU设计和软件。这两个问题都限制了它的可用性并减少了采用率。RISC-V网站有一个用户模式指令规范,以及支持操作系统的通用特权指令集的初步规范。 有几种开源的RISC-V CPU设计,包括64位伯克利故障排除机(BOOM),64位火箭(Rocket),来自伯克利的五种32位Sodor CPU设计,来自Clifford Wolf的picorv32,来自Syntacore的scr1,来自ETHZürich/博洛尼亚大学的PULPino(Riscy和Zero-Riscy),等。三级Sodor CPU似乎适用于小型嵌入式CPU。火箭可能适合​​紧凑,低功率的中间计算机,如个人设备。 BOOM使用为Rocket创建的大部分基础架构,可用于个人,超级计算机和仓库级计算机。 picorv和scr1都是Verilog中的32位微控制器单元(MCU)级RV32IMC实现。 PULPino中的内核实现了一个简单的RV32IMC ISA,用于微控制器(Zero-Riscy)或更强大的RV32IMFC ISA,具有用于嵌入式信号处理的定制DSP扩展。 设计软件包括一个设计编译器Chisel,它可以将设计简化为Verilog用于设备。该网站包含用于测试核心实施的验证数据。 可用的RISC-V软件工具包括GNU编译器集合(GCC)工具链(带有GDB,调试器),LLVM工具链,OVPsim仿真器(以及RISC-V快速处理器模型库),Spike仿真器和模拟器QEMU。 Linux内核,FreeBSD和NetBSD都存在操作系统支持,但是管理员模式指令自2019年3月14日起未标准化,因此这种支持是临时的。 RISC-V架构的初步FreeBSD端口于2016年2月上市,并在FreeBSD 11.0中发布。Debian和Fedora的港口正在稳定下来。 Das U-Boot的端口存在。UEFI Spec v2.7已经定义了RISC-V绑定,而且一个TianoCore端口已经由HPE工程师完成并且预计将被升级。有一个seL4微内核的初步端口。存在一个模拟器,用于使用JavaScript在Web浏览器上运行RISC-V Linux系统。Hex Five发布了第一个支持FreeRTOS的RISC-V安全IoT协议栈。
采用者
SiFive是一家专门开发RISC-V硬件的公司,其处理器型号于2017年发布。其中包括RISC-V SoCa四核,64位片上系统。Syntacore是RISC-V基金会的创始成员之一,也是最早的商业RISC-V IP供应商之一,自2015年以来开发并授权RISC-V IP系列。截至2018年,产品线包括8个32和64位核心,包括开源SCR1 MCU核心。2016年首次展示了基于Syntacore IP的商用SoC。
2016年加入该联盟的RISC-V基金会的创始成员Andes Technology Corporation于2017年发布了其首批两个RISC-V内核.N25和NX25内核具有完整的设计生态系统和RISC-V合作伙伴的数量。安第斯山脉正在积极推动RISC-V生态系统的发展,并期望在2018年推出几款新的RISC-V产品。
Codasip和UltraSoC为RISC-V嵌入式SOC开发了完全支持的知识产权,将Codasip的RISC-V内核和其他IP与UltraSoC的调试,优化和分析相结合。
Imperas为RV32GC和RV64GC ISA变体的不同子集开发了一系列快速处理器模型,这些变体是OVPsim指令的一部分,用于嵌入式软件开发的精确模拟器分发。
GreenWaves Technologies于2018年2月宣布推出GAP8,一个32位1控制器,8个计算核心,32位SoC和开发板。他们的GAPuino GAP8开发板于2018年5月开始出货。
Hex Five宣布推出一般可用性MultiZone Security - 第一个使用标准RISC-V ISA和特权模式扩展的RISC-V可信执行环境(TEE)。
CloudBEAR是一家处理器IP公司,为各种应用开发自己的RISC-V内核。
在开发中
印度理工学院马德拉斯正在开发六种RISC-V开源CPU设计,用于六种不同的用途,从用于物联网(IoT)的小型32位CPU到专为仓库级计算机设计的大型64位CPU。作为基于RapidIO和Hybrid Memory Cube技术的服务器场。
Nvidia计划使用RISC-V替换他们的GeForce显卡上的Falcon处理器。
ASTC为嵌入式IC开发了RISC-V CPU。
Adapteva计划使用RISC-V,作为其多核加速器产品的后续产品
lowRISC是一个非盈利项目,旨在实现基于64位RISC-V ISA的完全开源硬件片上系统(SoC)。
剑桥大学计算机实验室与FreeBSD项目合作,将该操作系统移植到64位RISC-V,用作硬件 - 软件研究平台。
苏黎世联邦理工学院和博洛尼亚大学合作开发了开源RISC-V PULPino处理器,作为节能超低功耗(PULP)项目的一部分,用于节能物联网计算。
Western Digital宣布了将RISC-V处理器嵌入其未来产品的计划。
Esperanto Technologies宣布他们正在开发三种基于RISC-V的处理器:ET-Maxion高性能核心,ET-Minion节能核心和ET-Graphics图形处理器。
RISC-V指令集架构介绍
模块化的指令子集
RISC-V 的指令集使用模块化的方式进行组织,每一个模块使用一个英文字母来表示。 RISC-V 最基本也是唯一强制要求实现的指令集部分是由 I 字母表示的基本整数指令子集。使用该整数指令子集,便能够实现完整的软件编译器。其他的指令子集部分均为可选的模块,具有代表性的模块包括 M/A/F/D/C, 如表 2-1 所示。
以上模块 的一个特定 组 合 "IMAFD", 也被称为 “通用”组合,用英文字母G 表示。因此 RV32G 表示 RV32IM战 D, 同理 RV64G 表示 RV64IMAFD 。 为了提高代码密度,  RISC-V 架构也提供可选的 “压缩”指令子集,用英文字母C 表示。压缩 指令的指令 编码长 度 为 16 比特,而普通的非压缩指令的长度为 32 比特。 为 了 进 一步减少面 积 , RISC-V 架构还 提供一种 “嵌入式 ” 架构,用英文字母 E 表示。该 架构主要用于追求极 低面积 与功耗的深嵌入式 场 景。 该 架构 仅 需要支持 16 个通用整数寄器,而非嵌入式的普通架构则需要支持 32 个通用整数寄存器。 通过以上的模块化指令集,能够选择不同的组合来满足不同的应用。例如,追求小面积、低功耗的嵌入式场景可以选择使用 RV32EC 架构;而大型的 64 位架构则可以选择 RV64G 。
可配置的通用寄存器组
RISC-V 架构支持 32 位或者 64 位的架构, 32 位架构由 RV32 表示,其每个通用寄存器 的宽度为 32 比特; 64 位架构由 RV64 表示,其每个通用寄存器的宽度为 64 比特。 RISC-V 架构的整数通用寄存器组,包含 32 个 CI 架构)或者 16 个 CE 架构)通用整数 寄存器,其中整数寄存器 0 被预留为常数 o, 其他的 31 个 CI 架构)或者 15 个 CE 架构) 为普通的通用整数寄存器。 如果使用浮点模块 CF 或者 D), 则需要另外一个独立的浮点寄存器组,包含 32 个通用 浮点寄存器。如果仅使用 F 模块的浮点指令子集,则每个通用浮点寄存器的宽度为 32 比特; 如果使用了 D 模块的浮点指令子集,则每个通用浮点寄存器的宽度为 64 比特。
规整的指令编码
得益千后发优势和总结了多年来处理器发展的经验, RISC-V 的指令集编码非常规整,指令所需的通用寄存器的索引 (index)都被放在固定的位置,如图 2-3 所示。因此指令译码器 (Instruction Decoder) 可以非常图 2-3 RV32I 规整的指令编码格式便捷地译码出寄存器索引,然后读取通用寄存器组 (Register File, Regfile) 。
与所有的 RISC 处理器架构一样,  RISC-V 架构使用专用的存储器读 (Load) 指令和存储器写 (Store) 指令访问存储器 (Memory), 其他的普通指令无法访问存储器,这种架构是 RISC 架构常用的一个基本策略。这种策略使得处理器核的硬件设计变得简单。存储器访问 的基本单位是字节 (Byte) 。 RISC-V 的存储器读和存储器写指令支持一个字节 (8 位)、半字 (16 位)、单字 (32 位)为单位的存储器读写操作。如果是 64 位架构还可以支持一个双字 (64 位)为单位的存储器读写操作。 RISC-V 架构的存储器访问指令还有如下显著特点。 为了提高存储器读写的性能,  RISC-V 架构推荐使用地址对齐的存储器读写操作,但 是也支持地址非对齐的存储器操作 RISC-V 架构。处理器既可以选择用硬件来支持, 也可以选择用软件来支持。 由千现在的主流应用是小端格式 (Little-Endian), RISC-V 架构仅支持小端格式。有 关小端格式和大端格式的定义和区别,在此不做过多介绍。若对此不太了解的初学 者可以自行查阅学习。 很多的 RISC 处理器都支持地址自增或者自减模式,这种自增或者自减的模式虽然 能够提高处理器访问连续存储器地址区间的性能,但是也增加了设计处理器的难度。 RISC-V 架构的存储器读和存储器写指令不支持地址自增自减的模式。 RISC-V 架构采用松散存储器模型 (Relaxed Memory Model), 松散存储器模型对于 访问 不同地址的存 储 器 读 写指令的 执 行 顺 序不作要求,除非使用明确的存 储 器屏障 (Fence) 指令加以屏蔽。有关存储 器模型 (Memory.Model) 和存储 器屏障指令的更 多信息 .
高效的分支跳转 指令
RISC-V 架构有两条无条件跳转指令 (Unconditional Jump), 即 jal 指令与 jalr 指令。跳 转链接 Oump and Link) 指令一 jal 指令可用千进行子程序调用,同时将子程序返回地址 存在链接寄存器 (Link Register, 由某一个通用整数寄存器担任)中。跳转链接寄存器 Oumpand Link-Register) 指令一— jalr 指令能够用于子程序返回指令,通过将 jal 指令(跳转进入子程 序)保存的链接寄存器用千 jalr 指令的基地址寄存器,则可以从子程序返回。 RISC-V 架构有 6 条带条件跳转指令 (Conditional Branch) , 这种带条件的跳转指令跟普通的运算指令一样直接使用两个整数操作数,然后对其进行比较。如果比较的条件满足,则 进行跳转,因此此类指令将比较与跳转两个操作放在一条指令里完成。作为比较,很多其他的 RISC 架构的处理器需要使用两条独立的指令。第一条指令先使用比较指令,比较的结果被保存到状态寄存器之中;第二条指令使用跳转指令,判断前一条指令保存在状态寄存器当中的比较结果为真时,则进行跳转。相比而言, rusc~v 的这种带条件跳转指令不仅减少了指令的条数,同时硬件设计上更加简单。
简洁 的子程序 调 用
RISC-V 架构则放弃使用“一次读多个寄存器指令”和“一次写多个寄存器指令”。如果 有的场合比较介意 “保存现场”和“恢复现场”的指令条数,那么可以使用公用的程序库(专门用千保存和恢复现场)来进行,这样就可以省掉在每个子函数调用的过程中都放置数目不等的“保存现场”和“恢复现场”的指令。因为放弃“一次读多个寄存器指令”和“一次写多个寄存器指令”可以大幅简化CPU 的硬件设计,对于低功耗小面积的 CPU 可以选择非常简单的电路进行实现;而高性能超标量处理器由于硬件动态调度能力很强,可以有强大的分支预测电路保证 CPU 能够快速地跳转执行,从而可以选择使用公用的程序库(专门用千保存和恢复现场)的方式减少代码量,同时达到高性能。
无条件 码执 行
RISC-V 架构则放弃使用这种带“条件码”指令的方式,对于任何的条件判断都使用普 通的带条件分支跳转指令。此选择再次印证了 RISC-V 追求硬件简单的哲学,因为放弃带“条 件码 ”指令的方式可以大幅简化CPU 的硬件设计,对于低功耗小面积的 CPU 可以选择非常 简单的电路进行实现,而高性能超标量处理器由于硬件动态调度能力很强,可以有强大的分 支预测电路保证 CPU 能够快速地跳转执行达到高性能。
无分支延 迟 槽
分支延迟槽就是指在每一条分支指令后面紧跟的一条或者若干条指令不受分支跳转的影响,不管分支是否跳转,这后面的几条指令都一定会被执行 。 RISC-V 架构则放弃了分支延迟槽,再次印证了 RISC-V 力图简化硬件的哲学,因为现代的高性能处理器的分支预测算法精度已经非常高,可以有强大的分支预测电路保证 CPU 能够准确地预测跳转执行达到高性能。而对千低功耗、小面积的 CPU, 由于无须支持分支延迟槽,硬件得到极大简化,也能进一步减少功耗和提高时序。
零开 销 硬件循 环
很多 RISC 架构还支持零开销硬件循环 CZero Overhead Hardware Loop) 指令,其思想 是通过硬件的直接参与,设置某些循环次数寄存器 (Loop Count), 然后可以让程序自动地 进行循环,每一次循环则循环次数寄存器自动减 1, 这样持续循环直到循环次数寄存器的值 变成 O, 则退出循环。 之所以提出发明这种硬件协助的零开销循环是因为在软件代码中的 for 循环 (for i=O; i
简洁 的运算指令
RISC-V 架构使用模块化的方式组织不同的指令子集,最基本的整数指令子集 CI 字母表示)支持的运算包括加法、减法、移位、按位逻辑操作和比较操作。整数乘除法指令子集 CM 字母表示)支持的运算包括有符号或者无符号的乘法和除法操作。乘法操作能够 支持两个 32 位的整数相乘得到一个 64 位的结 果;除法 操作能够 支持两个 32 位的整数相除得到一个 32 位的商与 32 位的余数。单 精度浮点指令子集 CF 字母表示)与双精度浮点指令子集( D 字母表示)支持的运算包括浮点加减法、乘除法、乘累加、开平方根和比较等操作,同时提供整数与浮点、单精度与双精度浮点之间的格式转换操作。 很多 RISC 架构的处理器在运算指令产生错误之时,例如上溢 (Over 且 ow) 、下溢 (Underflow) 、非规格化浮点数 (Subnormal) 和除零 (Divide by Zero), 都会产生软件异常。 RISC-V 架构的一个特殊之处是对任何的运算指令错误(包括整数与浮点指令)均不产生异 常,而是产生某个特殊的默认值,同时设置某些状态寄存器的状态位。 RISC-V 架构推荐软 件通过其他方法来找到这些错误。
优 雅的 压缩 指令子集
基本的 RISC-V 基本整数指令子集(字母 I 表示)规定的指令长度均为等长的 32 位,这 种等长指令定义使得仅支持整数指令子集的基本 RISC-V CPU 非常容易设计。但是等长的 32 位编码指令也会造成代码体积 (Code Size) 相对较大的问题。 为了满足某些对于代码体积要求较高的场景(例如嵌入式领域), RISC-V 定义了一种可 选的压缩 (Compressed) 指令子集,用字母 C 表示,也可以用 RVC 表示。 RISC-V 具有后发 优势,从一开始便规划了压缩指令,预留了足够的编码空间, 16 位长指令与普通的 32 位长指令可以无缝自由地交织在一起,处理器也没有定义额外的状态。 RISC-V 压缩指令的另一个特别之处是, 16 位指令的压缩策略是将一部分普通最常用的 32 位指令中的信息进行压缩重排得到(例如假设一条指令使用了两个同样的操作数索引, 则可以省去其中一个索引的编码空间),因此每一条 16 位长的指令都能找到其一一对应的原始 32 位指令。因此程序编译成为压缩指令仅在汇编器阶段就可以完成,极大地简化了编译器工具链的负担。
特权模式
RISC-V 架构定义了 3 种工作模式,又称为特权模式 (Privileged Mode) 。 • Machine Mode: 机器模式,简称 MMode 。 • Supervisor Mode: 监督模式,简称 SMode 。 • UserMode: 用户模式,简称 UMode 。 RISC-V 架构定义 M Mode 为 必 选 模式,另外两种 为 可 选 模式,通 过 不同的模式 组 合可 以实现 不同的系 统
CSR 寄存器
RISC-V 架构定义了一些控制和状态寄存器 (Control and Status Register, CSR), 用千配 置或记录一些运行的状态。 CSR 寄存器是处理器核内部的寄存器,使用自己的地址编码空间和存储器寻址的地址区间完全无关系。
中断和异常
中断和异常机制往往是处理器指令集架构中最为复杂和关键的部分。 RISC-V 架构定义了一套相对简单基本的中断和异常机制,但是也允许用户对其进行定制和扩展 。
矢量指令子集
山于后发优势及借助矢量架构多年发展 成熟的结论, RISC-V 架构将使用可变长度的矢量,而不是矢量定长的 SIMD 指令集(例如 ARM 的 NEON 和 Intel 的 MMX), 从而能够灵活地支持不同的实现。追求低功耗、小面积 的 CPU 可以选择使用长度较短的硬件矢量进行实现,而高性能的 CPU 则可以选择较长的硬 件矢量进行实现,并且同样的软件代码能够互相兼容。
自定制指令 扩 展
RISC-V 预留了大量的指令编码 空 间 用千用 户 的自定 义扩 展,同 时还 定 义 了 4 条 Custom 指令可供用户直接使用。每条 Custom 指令都预 留了几个比特位的子 编码 空 间 ,因此用 户 可以直接使用 4 条 Custom 指令扩 展出几十条自定 义 的指令 。
RISC-V技术细节
RISC-V的架构开发者之一David Patterson在《RISC-V手册》这本书中介绍的RISC-V设计之初的目标是成为一个通用的指令集架构(ISA)
它要能适应包括从最袖珍的嵌入式控制器,到最快的高性能计算机等各种规模的处理器。
它应该能兼容各种流行的软件栈和编程语言。
它应该适应所有实现技术,包括现场可编程门阵列(FPGA)、专用集成电路(ASIC)、全定制芯片,甚至未来的设备技术。
它应该对所有微体系结构样式都有效:例如微编码或硬连线控制;顺序或乱序执行流水线; 单发射或超标量等等。
它应该支持广泛的专业化,成为定制加速器的基础,因为随着摩尔定律的消退,加速器的重要性日益提高。
它应该是稳定的,基础的指令集架构不应该改变。更重要的是,它不能像以前的专有指令集架构一样被弃用。
瞧小东干的好事
1410次阅读
2019-07-06