RISC-V CPU
2024-10-31 14:17:47 阿炯

RISC-V(英语发音为“risk-five”)是一个基于精简指令集(RISC)原则的开源指令集架构(ISA),简易解释为与开源软件运动相对应的一种“开源硬件”。该项目于2010年在加州大学伯克利分校启动,但许多贡献者是该大学以外的志愿者和行业工作者。与大多数指令集相比,RISC-V指令集可以自由地用于任何目的,允许任何人设计、制造和销售RISC-V芯片和软件而不必支付给任何公司专利费。虽然这不是第一个开源指令集,但它具有重要意义,因为其设计使其适用于现代计算设备(如仓库规模云计算机、高端移动电话和微小嵌入式系统)。设计者考虑到了这些用途中的性能与功率效率。该指令集还具有众多支持的软件,这解决了新指令集通常的弱点。


RISC-V指令集的设计考虑了小型、快速、低功耗的现实情况来实做,但并没有对特定的微架构做过度的设计。字长/寄存器资料宽度:32、64、128;字节序为小端序。通用寄存器:16、32(包括一个始终为零的寄存器);浮点寄存器:32(可选,宽度取决于选用的扩展指令集,可为32、64、128位)。

截至2021年12月,RISC-V工作小组已经批准了版本 20191213 的非特权指令集(Unprivileged ISA,曾经称为用户级指令集 User-Level ISA),以及版本 20211203 的特权指令集(Privileged ISA)。

RISC-V的作者们旨在提供数种可以在BSD许可证之下自由使用的CPU设计。该许可证允许像是RISC-V芯片设计等派生作品可以像RISC-V本身一样是公开且自由发行,也可以是闭源或者是专有财产。相比而言,ARM控股和MIPS科技等商业芯片供应商会对使用其专利者收取高额的许可费用。[5]他们也要求在接收其描述设计优点的文件和指令集前,还需要签署保密协议。许多设计优点为完全专有,从来不会披露给客户。这种保密制度阻碍了公共教育用途和安全审核,以及开发公共、低成本的自由及开放源代码软件编译器和操作系统。

处理器设计需要多种专业的设计知识,包括电子逻辑、编译器和操作系统,这种资源很难在专业工程团队之外见到。所以现代且高质量的通用计算机指令集近年来除了学术环境以外并没有在任何地方被广泛使用,甚至没有被阐述。正因如此,许多RISC-V贡献者将此视为整个社群付出的成果,而这也是RISC-V有很多工程上的应用的一项原因。其作者们还有大量研究和用户经验来验证他们在硅片和仿真中的设计。RISC-V指令集是从一系列的学术计算机设计项目直接发展而来的。它一开始的目的有一部分是为了帮助这些项目。

RISC的历史可追溯到1980年左右。在此之前,人们觉得简单的计算机可能会有用,但是没有很多人去阐述其设计原则。这种简单而有效的计算机一直都是学术界的兴趣。学术界的学者们为了出版第一版的《计算机体系结构:量化研究方法》(Computer Architecture: A Quantitative Approach)ISBN 978-1558600690 ,所以于1990年订立了RISC指令集DLX。大卫·帕特森(David Patterson)是其中一位作者,后来协助RISC-V的开发。但是DLX只用于教育用途,学术界和业余爱好者使用FPGA来实做它,但并没有获取商业运用。

版本2及更早版本的ARM CPU具有公共域指令集,并且仍有GCC的支持。该指令集有三个开源内核,但从未被制造。OpenRISC是一款基于DLX的开源指令集,并且具有相关的RISC设计。OpenRISC 完全支持GCC并且有实做在Linux上,但是它很少有商业上的实做。

RISC-V基金会及RISC-V国际

加州伯克利分校的Krste Asanović教授发现开放源代码的电脑系统有很多用途。在2010年他决定用三个月的时间来开发并发表一个开放源代码的电脑系统。这个项目是用来帮助包括学术以及工业的用户。伯克利分校的大卫·帕特森教授也参加了这个项目。帕特森也是原来伯克利分校RISC的设计者,RISC-V只是他众多RISC CPU研究项目的一个.RISC-V项目早期一些经费来自DARPA。

有参与支持RISC-V基金会的公司以及机构包括了超微半导体、晶心科技、英国航太系统、加州大学伯克利分校、Bluespec、Cortus、Google、GreenWaves Technology、慧与科技、华为、IBM、Imperas Software、中国科学院、北京清华大学、印度理工学院、莱迪思半导体、迈伦科技、美高森美、美光科技、英伟达、恩智浦半导体、甲骨文公司、高通、Rambus、西部数据、SiFive、阿里巴巴集团、红帽公司、成为资本。

2019年6月,图灵奖得主、RISC-V基金会创始人之一大卫·帕特森(David Patterson)在瑞士宣布,将依托清华-伯克利深圳学院(TBSI),在内部建设RISC-V国际开源实验室(RISC-V International Open Source Laboratory),又称大卫帕特森RIOS图灵实验室。清华大学称实验室将瞄准世界CPU产业战略发展新方向和粤港澳大湾区产业创新需求,聚焦于开源指令集CPU研究,建设以深圳为根节点的RISC-V全球创新网络和以技术成果转移为主要使命的非营利组织,全面提升RISC-V生态系至最先进可商用水平。预判届时将面对国际大厂法律层面发起挑战问题上,伯克利加州大学和清华大学的法学院将与之建立联系。

2020年3月,RISC-V基金会为规避美国对中国的贸易限制而将总部搬迁至瑞士,并更名为RISC-V国际(英语:RISC-V International),以非盈利商业协会的身份在瑞士注册。


RISC设计者们认为指令集因为位于硬件和软件之间,所以是电脑主要的沟通桥梁,因此如果有一个设计良好的指令集是开源而且可以被任何人使用的,就可以让更多的资源能够重复利用,而大大的减少软件的成本。而这样的指令集也会增加硬件供应商市场的竞争力,因为硬件供应商们可以挪用更多资源来进行设计,减少处理软件支持的事务。

设计者声称在指令集设计领域里,新的设计准则渐渐变得罕见,而近四十年中,大多数成功的设计变得越来越相似。至于那些失败的指令集,大多数是因为他们的赞助商赚不了钱,而不是因为其指令集在技术上有多差。所以,一个在成熟的设计准则之下开发且设计良好的开源指令集想必能吸引许多供应商长期的支持。许多先前的开源指令集架构使用GNU通用公共许可协议来鼓励用户们允许他们的实现方法被其他人复制或是使用。

设计者们表示,RISC-V指令集是给实际上的电脑使用的,它不像其他学术上的指令集设计,只有为了比较好阐述理念而做优化。而RISC-V指令集有一些功能是可以增加电脑速度又可以减少成本和电源使用。这些特色包含,Load/store架构,在CPU里面的比特表示方法来简化数据多工器(MUX),以标准为基础来简化的浮点数,架构中立的设计和把最高有效位(Most significant bit,MSB)放到固定位置来加速符号扩充(Sign extension)。而sign extension常常就是静态时序分析里面的关键路径(Critical timing path)。

RISC-V指令集是设计来给各式各样的用途使用的,而它支持三个不同的字组大小,分别是32位、64位、128位以及与这三种字组大小有关的各式各样的指令子集。而这些指令子集的定义会按照那三个字组大小来做些微的改动。透过这些指令子集的向量处理器与数据中心等级的机柜式平行电脑/平行运算来帮助嵌入式系统、个人电脑和超级计算机。

该指令集采取不固定的编码长度而且还可以再扩展,因此在未来,还可以一直加入更多比特的编码方式。该指令集有特别留空间给128位的延伸版本,因为60年的产业界经验显示在指令集设计领域里,最无法撤销的错误就是缺少存储器寻址空间。截至2016年,128位的指令集仍然刻意地维持在“未冻结”的状态,这是因为到现在为止,人们很少有实际上操作这么大存储器的系统的经验。

然而,RISC-V也可以拿来做学术上的使用。它拥有简化的整数指令子集允许学生拿来做基本的练习,而整数指令子集就是一个简单的指令集架构(ISA)让软件可以控制研究上的机器。而不定长度的指令集架构也允许扩展来满足研究或是学生练习上的需求。分割出来的特权指令集可以支持在不重新设计编译器的情况下,进行操作系统方面的研究。RISC-V的开放的知识产权允许相关的设计被发布、使用和修改。

一个新的CPU指令集通常的问题是缺少CPU的硬件设计跟软件的支持。在RISC-V的网站有一个user mode指令集的规格,还有一个用来支持操作系统模式的优先指令集的初步规格。市面上已经有好几个使用RISC-V开源架构的CPU设计可以供参考,包括64-bit Berkeley Out of Order Machine(BOOM)、64-bit Rocket、伯克利设计的五个32-bit Sodor CPU、Clifford Wolf 的 picorv32、Syntacore 的 scr1、苏黎世联邦理工学院/波隆纳大学的 PULPino (Riscy and Zero-Riscy),以及很多其他的设计。使用三层指令分段的 Sodor CPU 是一个适合嵌入式设计的小型CPU。Rocket可能适用在小型低功耗的个人电脑或其他个人设备。BOOM 使用了大部分Rocket的架构,但是功能更加强大,适合个人电脑、服务器或超级计算机。picorv 跟 scr1 都是使用Verilog 设计的 32位 MCU 等级的 RV32IMC。PULPino的核心使用了一个适合微控制器的简单的 RV32IMC ISA架构(Zero-Riscy),以及另外一个更强大的DSP版本 RV32IMFC ISA 可以支持一些嵌入式信号处理的特别 DSP 指令集。

设计软件包括了一个设计编译器 Chisel,它可把设计编译成Verilog代码。网站上还有测试用的参考资料可以用来验证设计的正确性。RISC-V目前提供的软件有 GNU Compiler Collection (GCC) toolchain(具有调试器 GDB)、一套 LLVM toolchain、OVPsim模拟器(以及RISC-V快速处理器模式的软件参考库)、Spike 模拟器,以及一套在QEMU上运行的模拟器。

操作系统的支持包括 Linux 核心、FreeBSD,以及 NetBSD,但是监督模式的指令直到版本 1.11 的特权指令集才被标准化,所以这方面的支持还不是正式的。有一个早期的 RISC-V 的FreeBSD 操作系统已经在2016年2月上传到开放源代码社群,而且包含在 FreeBSD 11.0 。Debian跟Fedora的版本也有人在移植,并且在逐渐稳定中。已经有人做了一个 Das U-Boot 的移植版本。UEFI Spec v2.7 定义了RISC-V UFEI 的规格,而且慧与科技公司的工程师已经做好一个 TianoCore 的移植版本,并且将会上传到开放源代码社群。已经有人做好了一个 L4 microkernel family 的移植。还有一个在网页上用JavaScript写的 RISC-V Linux 系统模拟器。

设计

指令子集
RISC-V 指令使用模块化设计,包括几个可以互相替换的基本指令集,以及额外可以选择的扩展指令集。所有基本跟扩展的指令集都是由科技产业、研究机构跟学术界合作开发的。基本指令集规范了指令跟他们的编码、控制流程、寄存器数目(以及它们的长度)、存储器跟寻址方式、逻辑(整数)运算以及其他。只要有软件以及一个通用的编译器的支持,只用基本指令集就可以制作一个简单的通用型的电脑。

标准的扩展指令集可以搭配所有的基本指令集以及其他扩展指令集,而不会发生冲突。很多 RISC-V 电脑可能使用精简扩展指令集来降低电力消耗、程序的大小以及存储器的使用。未来也有项目支持hypervisor和虚拟化。只要再加上一个监督指令集 (S) 的扩展,以及以下 RVGC 指令集,就有足够的指令可以支持一个 Unix-style 操作系统。


为了分辨各种不同的指令组合,非特权指令集标准中订定了一些专有名词。首先先指明基本指令集的种类,包括表示 RISC-V 的代号 RV,然后是寄存器的宽度跟其他变化,例如 RV64I 或 RV32E。然后用上表的字母(以及表列的顺序)表示用了哪种扩展指令,例如 RV64IMAFD。

基本指令集、扩展整数或浮点运算、多CPU系统使用的同步指令扩展,标准扩展指令MAFD被认为是大部分的一般运算都需要的,所以有一个字母的简称 G 用来表示 IMAFDZicsr_Zifencei。使用嵌入式系统的一个小的32位电脑可能用 RV32EC,而大型的64位电脑可以用 RV64GC,即 RV64IMAFDCZicsr_Zifencei 的简称。随着扩展指令集数量的增加,指令集标准提供了另外一种命名方式,用 Z 前缀紧接着字母名称表示标准扩展,例如 Zifencei 表示指令抓取屏障扩展。

寄存器集
RISC-V 有 32 个整数寄存器(在嵌入式版本则是 16 个)。当浮点延伸集被实现的时候,还有 32 个浮点寄存器。除了“存储器访问指令”之外,一般指令“只能”寻址寄存器而无法访问存储器。

存储器访问
就像许多的 RISC 一样,RISC-V 属于加载-存储架构,只有 load 与 store 指令可以访问存储器。Load 和 Store 指令可以直接使用代码中的常量、在堆栈中的本地变量、或是数据结构中的内容。寻址的方式是使用基底寄存器与 12-bit 的 signed 相对地址 (± 2KB)。如果基底寄存器是 0,则资料或是常量可以在低地址,或是高地址(负的相对地址,导致绕回到高的存储器地址。比方说 ROM 的存储器地址)。

存储器的寻址单位是 8-bit 的 byte,以 little-endian 存放在存储器。Load 与 Store 支持的资料长度从 8-bit 到电脑的 word 大小。存储器访问并不需要对齐到 word 的大小,不过如果有对齐的话,可以增加性能。这项功能可以减小代码大小,而且透过软件的模拟,还可以简化硬件的设计(会触发一个“对齐失败”的中断)。和其他类似成功的电脑一样,RISC-V 也是 little-endian。这稍稍降低了复杂度与成本,因为所有大小的 word 的读取都遵循一样的顺序。举例来说,RISC-V 的指令集都是从最低地址的 byte 开始解码。RISC-V 的规格书保留了实现 big-endian 的可能性。

立即数
RISC-V 读取 32-bit 常量与地址是透过设置 upper 20-bit 的指令达到的。LUI 指令(Load Upper Immediate)把(指令中的)20-bit 读取到寄存器的 31~12 bits 当中。另一个 AUIPC 指令,也是一样读取 upper 20-bit,同时又加上 PC(Program Counter)之后,存放到某个基底寄存器。这个指令让地址无关代码能够支持“相对于代码位置的 32-bit 地址”。

这个基底寄存器可以再搭配 12-bit 位移,使用在 Load 与 Store 指令当中。如果需要的话,也可以使用 ADDI 指令,将 lower 12-bit 的常量加到一个寄存器中(注:这样就完成一个完整的 32-bit 常量读取)。在 64-bit 架构下,LUI 与 AUIPC 执行的结果会被比特扩展至 64-bit。有些高速的 CPU 会把一些指令“融合”成一个指令。比如说:上述的 LUI 与 AUIPC 就很适合和 Load/Save 指令一起融合。

函数调用、跳跃和分支
RISC-V 的函数调用 JAL(Jump and Link)把回传地址放入一个寄存器。由于相较于其他把回传地址存入堆栈的设计,它省下了一次对堆栈存储器的访问,所以在许多的处理器设计中是比较快速的。JAL 有一个 20-bit signed 位移。这个位移会被乘上 2 之后,加到 PC 当中,以产生指向 32 比特指令的相对地址。如果该地址没有对齐到 32-bit 地址(即不可被 4 整除),CPU 会触发一个例外。

算术和逻辑集
RISC-V 把数学运算指令归类到一个很小的 I 子集当中,包括:加法、减法、位移、位操作,及比较分支。这些可以使用软件的方式去模拟其他大部分的 RISC-V 指令(atomic 运算是值得一提的例外)。RISC-V 目前没有“数开头有几个零”以及一些用来加速软件浮点运算的位操作。整数乘法子集(M 子集)包括:有号数与无号数的乘法与除法。

浮点子集(F 子集)包括单精度运算,以及类似于整数的“比较分支”。它需要额外的 32 个浮点寄存器,这些寄存器是与整数寄存器分开的。双精度浮点子集(D 子集)一般假设浮点寄存器是 64 比特,而且会与 F 子集一起协作。RISC-V 亦有定义四精度 128-bit 浮点子集(Q 子集)。没有支持硬件浮点指令的 RISC-V CPU,依旧可以使用软件的浮点程序库。

RISC-V 在遇到运算错误的时候,并不会抛出异常,包括:overflow、underflow、subnormal 及 divide by zero。相反的,整数运算和浮点运算都会产生合理的默认数值,而且浮点运算指令还会设置状态比特。Divide-by-zero 可以透过在除法运算之后放置分支指令来发现。这些状态比特可以也可以被操作系统或是定期的中断检查到。

原子内存操作
RISC-V 支持计算机在多个 CPU 与线程之间共享存储器。RISC-V 的标准存储器同步模式是“释放一致”原则。也就是说,读取和写入顺序可以被重排,但是有些读取可以被设置成“获取”(acquire)运算,必须在其后的访问之前被执行;有些写入可以被当作“释放”(release)运算,必须在其之前的访问的后面执行。

处理器

商业实现

阿里巴巴玄铁910
阿里旗下半导体公司平头哥发布了它的首款 RISC-V 处理器“玄铁 910”(XuanTie910),名字取自金庸小说《神雕侠侣》。阿里巴巴称它是目前性能最强的 RISC-V 处理器,支持16核,主频 2.5GHz,单核性能达到 7.1 Coremark/MHz。官方称其性能突破源自两大创新:一是它采用3发射8执行的复杂乱序执行架构,是业界首个实现每周期 2 条内存访问的 RISC-V 处理器;二是它基于 RISC-V 扩展了 50 余条指令,系统性增强了 RISC-V 的计算、存储和多核等方面能力。


2021年平头哥半导体发布玄铁C910处理器开源项目,同时还发布出C910的LLVM编译器源代码。

SiFive公司的RISC-V半导体IP核系列
RISC-V创始人所创办的SiFive公司提供一系列RISC-V半导体IP核,包含高性能、高性能、低功耗及嵌入式RISC-V处理器。

晶心科技的RISC-V CPU IP系列
晶心提供可配置性高的32/64位高性能CPU核心,包含DSP、FPU、Vector、超标量 (Superscalar)、乱序执行 (Out-of-Order)及多核心系列。

开源实现

中国科学院“香山”
中科学院计算所在2020年发布“香山”高性能RISC-V处理器开源项目,香山以Chisel硬件描述语言开发。第一版“雁栖湖架构”使用台积电的28nm制程,工作频率为1.3GHz。

西部数据“SweRV”
西部数据在2018年发布SweRV RISC-V处理器开源项目,SweRV 目标应用环境为储存设备控制器,从开源以来已有多家厂商采用。


另外本站收录了与其发展相关的进程与记录:
RISC-V发展记事(202x)

RISC-V 基金会相关运作录


官方主页:https://riscv.org/

https://github.com/riscv