了解RISC-V

发明

RISC发明者是美国加州大学伯克利分校教师David Patterson,RISC-V(拼做risk-five)是第五代精简指令集,也是由David Patterson指导的项目。2010年伯克利大学并行计算实验室(Par Lab) 的1位教授和2个研究生想要做一个项目,需要选一种计算机架构来做。当时面临的的是选择X86、ARM,还是其他指令集,不管选择哪个都或多或少有些问题,比如授权费价格高昂,不能开源,不能扩展更改等等。所以他们在2010年5月开始规划自己做一个新的、开源的指令集,就是RISC-V。

接着时间到2015年,这个指令集在学术界已经开始出名了,这时为了更好的推动这个指令集在技术和商业上的发展,3位创始人大佬做了下面两件事情。

技术方向,成立RISC-V基金会,维护指令集架构的完整性和非碎片化。

商业方向,成立SiFive公司,推动RISC-V的商业化。

基金会会员

目前加入RISC-V基金会的中国企业和机构有:阿里巴巴、华为、中科院计算所、华米科技、智芯科技、浪潮等。(具体会员名单可以在这里查看)

特点

设计哲学-简单就是美

  1. 无病一身轻——架构的篇幅。目前的“RISC-V架构文档”分为“指令集文档”(riscv-spec-v2.2.pdf)和“特权架构文档”(riscv-privileged-v1.10.pdf)。“指令集文档”的篇幅为145页,而“特权架构文档”的篇幅也仅为91页。熟悉体系结构的工程师仅需一至两天便可将其通读,虽然“RISC-V的手册”还在不断地丰富,但是相比“x86的架构文档”与“ARM的架构文档”,RISC-V的篇幅可以说是极其短小精悍。

  2. 能屈能伸——模块化的指令集。RISC-V架构相比其他成熟的商业架构的最大一个不同还在于它是一个模块化的架构。因此,RISC-V架构不仅短小精悍,而且其不同的部分还能以模块化的方式组织在一起,从而试图通过一套统一的架构满足各种不同的应用。这种模块化是x86与ARM架构所不具备的。以ARM的架构为例,ARM的架构分为A、R和M三个系列,分别针对于Application(应用操作系统)、Real-Time(实时)和Embedded(嵌入式)三个领域,彼此之间并不兼容。模块化的RISC-V架构能够使得用户能够灵活选择不同的模块组合,以满足不同的应用场景,可以说是“老少咸宜”

  3. 浓缩的都是精华——指令的数量。短小精悍的架构以及模块化的哲学,使得RISC-V架构的指令数目非常的简洁。基本的RISC-V指令数目仅有40多条,加上其他的模块化扩展指令总共几十条指令。

一定要仔细阅读《RISC-V手册》哦!!

指令集简介

  1. 模块化的指令子集。RISC-V的指令集使用模块化的方式进行组织,每一个模块使用一个英文字母来表示。RISC-V最基本也是唯一强制要求实现的指令集部分是由I字母表示的基本整数指令子集,使用该整数指令子集,便能够实现完整的软件编译器。其他的指令子集部分均为可选的模块,具有代表性的模块包括M/A/F/D/C。

  2. 规整的指令编码。RISC-V的指令集编码非常的规整,指令所需的通用寄存器的索引(Index)都被放在固定的位置。因此指令译码器(Instruction Decoder)可以非常便捷的译码出寄存器索引然后读取通用寄存器组(Register File,Regfile)。

  3. 优雅的压缩指令子集。基本的RISC-V基本整数指令子集(字母I表示 )规定的指令长度均为等长的32位,这种等长指令定义使得仅支持整数指令子集的基本RISC-V CPU非常容易设计。但是等长的32位编码指令也会造成代码体积(Code Size)相对较大的问题。为了满足某些对于代码体积要求较高的场景(譬如嵌入式领域),RISC-V定义了一种可选的压缩(Compressed)指令子集,由字母C表示,也可以由RVC表示。RISC-V具有后发优势,从一开始便规划了压缩指令,预留了足够的编码空间,16位长指令与普通的32位长指令可以无缝自由地交织在一起,处理器也没有定义额外的状态。

  4. 特权模式。RISC-V架构定义了三种工作模式,又称特权模式(Privileged Mode):Machine Mode:机器模式,简称M Mode。Supervisor Mode:监督模式,简称S Mode。User Mode:用户模式,简称U Mode。RISC-V架构定义M Mode为必选模式,另外两种为可选模式。通过不同的模式组合可以实现不同的系统。

  5. 自定制指令扩展。除了上述阐述的模块化指令子集的可扩展、可选择,RISC-V架构还有一个非常重要的特性,那就是支持第三方的扩展。用户可以扩展自己的指令子集,RISC-V预留了大量的指令编码空间用于用户的自定义扩展,同时,还定义了四条Custom指令可供用户直接使用,每条Custom指令都有几个比特位的子编码空间预留,因此,用户可以直接使用四条Custom指令扩展出几十条自定义的指令。

其他特点

可配置的通用寄存器组、简洁的存储器访问指令、高效的分支跳转指令、简洁的子程序调用、无条件码执行、无分支延迟槽、简洁的运算指令。

最后更新于