learn-tech/专栏/计算机基础实战课/02RISC特性与发展:RISC-V凭什么成为“半导体行业的Linux”?.md
2024-10-16 10:18:29 +08:00

13 KiB
Raw Blame History

                        因收到Google相关通知网站将会择期关闭。相关通知内容
                        
                        
                        02 RISC特性与发展RISC-V凭什么成为“半导体行业的Linux”
                        你好我是LMOS。

上节课我带你见证了两种计算机指令集的设计结构——CISC与RISC。而今天我们的“主角”就是RISC中的一个代表性特例它就是RISC-V。

作为未来芯片指令集的主流RISC-V是今后芯片设计的最佳方案甚至可以说它就是硬件行业里的Linux。

为什么这么说呢这节课我会从RISC-V发展历史、原理与技术特性几个方面入手带你弄明白为什么RISC-V在半导体行业中发展得如此迅猛。

RISC-V从何而来

让我们“穿越时空”把时间线拉回到2010年。在加州伯克利分校的校园中Krste Asanovic教授正为了学生们学习计算机架构而发愁。由于现存芯片指令集冗余且专利许可费用昂贵还有很多IP法律问题没有一款合适的CPU用于学习。

于是他想要带领一个研究团队来设计一款用于学生学习的CPU。研究团队在选择架构的时候对比了传统已经存在的ARM、MIPS、SPARC以及x86架构等发现这些架构指令集要么极其复杂要么极其昂贵。所以他们的研究团队最终决定设计一套全新的指令集。

这个研究团队最开始只有4个人却在三个月之内完成了指令集原型开发其能力可见一斑。后来这个项目被计算机体系结构方面的泰斗 David Patterson 发现,并且得到了他的大力支持。

早在1981年伯克利分校已经设计出了第一代RISC指令集之后又陆续设计了四代RISC指令集的架构。有了这些设计经验在设计RISC-V指令集架构时研究团队就变得驾轻就熟。

用RISC-V来命名该指令集架构有两层意思RISC-V中的“V”一方面代表第5代RISC另一方面“V”取“ Variation”之意代表变化。

虽然RISC-V在2010年才开始研发但在第二年2011年就进行了首次流片流片就是按照芯片设计生产出可以工作的芯片成品。从这以后基于RISC-V的CPU设计或者在SOC中集成RISC-V架构各种软件工具链的开发和各种基于RISC-V架构的操作系统移植在不断涌现。这给CPU整个行业带来了不小轰动当然这也离不开泰斗 David Patterson 的号召作用。

一个产品的成功技术当然是非常重要的原因但也需要非常给力的运营。在2015年由最初的25个成员一起成立了非盈利性组织RISC-V基金会RISC-V Foundation

之后有多达300个单位加入RISC-V基金会其中包括阿里、谷歌、华为、英伟达、高通、麻省理工学院、普林斯顿大学、印度理工学院、中科院计算所、联发科等。这些学术机构、芯片开发公司、设计服务与系统厂商的加入为RISC-V的发展建立了良好的生态环境。

RISC-V是什么

通过上节课我们知道了RISC就是指精简指令集计算机体系结构。而前面也说了RISC-V是伯克利分校设计出的第五代RISC指令集架构。但既然迅速走红的是RISC-V相比其他的RISC它必然有过人之处这样才能立足于市场不然很可能只沦为学生们的学习工具。

如果只是对RISC-V下一个定义会相当简单RISC-V是一套开放许可证书、免费的、由基金会维护的、一个整数运算指令集外加多个扩展指令集的CPU架构规范。

任何硬件开发商或者相关组织都可以免费使用这套规范构建CPU芯片产品。如果我们的目的只是想对RISC-V有个概念了解前面这些信息就足够了。不过想知道RISC-V为什么流行这个秘密显然我们还需要更详细的信息才能深入了解。

指令集命名方式

现在假定我们是一家芯片公司的芯片工程师公司有了新的业务对CPU提出了更高的要求让我们基于RISCV指令集架构实现一款全新的CPU。根据我们公司的业务场景我们只需要选择RISC-V架构中的一部分指令CPU的位宽也有特定的要求。

因此现在需要一些命名方式来对我们选择的RISCV架构进行命名。这样用户在阅读该CPU文档时马上就能了解这款CPU是多少位的、有哪些指令集它们具体有什么功能。

其实这个命名方式在RISC-V规范中有相关定义说明以RV为前缀然后是位宽最后是代表指令集的字母集合具体形式如下

RV[###][abc……xyz]

我用表格为你说明一下这个格式,如下所示:

举个例子比如RV64IMAC就表示64位的RISC-V支持整数指令、乘除法指令、原子指令和压缩指令。

指令集模块

接着我们一起来看看指令集模块。指令集是一款CPU架构的主要组成部分是CPU和上层软件交互的核心也是CPU主要功能的体现。

但RISC-V规范只定义了CPU需要包含基础整形操作指令如整型的储存、加载、加减、逻辑、移位、分支等。其它的指令称为可选指令或者用户扩展指令比如乘、除、取模、单精度浮点、双精度浮点、压缩、原子指令等这些都是扩展指令。扩展指令需要芯片工程师结合功能需求自定义。

所以RISC-V采用的是模块化的指令集易于扩展、组装。它适应于不同的应用场景可以降低CPU的实现成本。

我给你列了一张图图里展示的是RISC-V 指令集的各个组成部分。

RISC-V的基本指令集和扩展指令集你有个大致印象就可以更详细的技术讲解后面第五节课我再展开。下面我们去看看RISC-V的寄存器。

RISC-V寄存器

指令的操作数是来源于寄存器精简指令集架构的CPU都会提供大量的寄存器RISC-V当然也不例外。RISC-V 的规范定义了32个通用寄存器以及一个 PC寄存器这对于RV32I、RV64I、RV128I指令集都是一样的只是寄存器位宽不一样。

如果实现支持 F/D 扩展指令集的CPU则需要额外支持 32个浮点寄存器。而如果实现只支持RV32E指令集的嵌入式CPU则可以将32个通用寄存器缩减为16个通用寄存器。

为了帮助你聚焦要点不常用的32个浮点寄存器并没有列在这张表里。表中的ABI名称即应用程序二进制接口你可以理解为寄存器别名高级语言在生成汇编语言的时候会用到它们。

比如C语言处理函数调用时用哪些寄存器传递参数、返回值调用者应该保护哪些寄存器用什么寄存器管理栈帧等等。

定义好ABI标准我们就能在语言间互相调用函数了。比如C语言函数调用汇编语言函数这里我先卖个关子后面语言与指令的篇章再给你详细展开。

RISC-V特权级

研究完了RISC-V寄存器我们再来看看RISC-V的特权级。不同的特权级能访问的系统资源不同高特权级能访问低特权级的资源反之则不行。RISC-V 的规范文档定义了四个特权级别privilege level特权等级由高到低排列如下表所示。

一个RISC-V硬件线程hart相当于一个CPU内的独立的可执行核心在任一时刻只能运行在某一个特权级上这个特权级由CSR控制和状态寄存器指定和配置。

具体分级如下:

机器特权级MRISC-V中hart可以执行的最高权限模式。在M模式下运行的hart对内存、I/O和一些必要的底层功能启动和系统配置有着完全的控制权。因此它是唯一一个所有标准RISC-V CPU都必须实现的权限级。实际上普通的RISC-V微控制器仅支持机器特权级。 虚拟机监视特权级H为了支持虚拟机监视器而定义的特权级。 管理员特权级S主要用于支持现代操作系统如Linux、FreeBSD和Windows。 用户应用特权级U用于运行应用程序同样也适用于嵌入式系统。

好了关于RISC-V的特权级你了解这些在现阶段已经足够了。需要把握的重点是特权级起到了怎样的作用。

有了特权级的存在,就给指令加上了权力,从而去控制用指令编写的程序。应用程序只能干应用程序该干的事情,不能越权操作。操作系统则拥有更高的权力,能对系统的资源进行管理。

RISC-V因何流行

RISC-V指令集架构在2010年才开发出来到今天不过10多年的时间。这个时间从CPU行业的发展看是非常短的也可以说是非常年轻的。相比x86的40多岁的年纪还有ARM、MIPS、SPARC的30多的年纪RISC-V简直是个孩子。

要知道ARM、MIPS、SPARC都是RISC系的MIPS和SPARC甚至已经进入了死亡阶段。按道理讲RISC-V不应该在这么短的时间内流行起来成为芯片行业一颗耀眼的新星。

那么RISC-V流行起来肯定有其优势一是RISC-V完全开放二是RISC-V指令简单三是RISC-V实行模块化设计易于扩展。

我们先来看看为什么说RISC-V是开放的。之前硬件和软件一样都是小心地保护自己的“源代码”因为那是自己的命脉。

直到后来软件界出现了开源的Linux一经开源就迅速席卷了全球。在今天的互联网、云计算、手机等领域Linux已经无处不在。但是硬件依然保护着自己的“源代码”Intel和AMD还是以售卖x86芯片为主而ARM直接售卖ARM CPU的“源代码”连生产芯片的步骤都省了。

这种模式下无论厂商还是个人要获得CPU都要付出昂贵的代价。这时RISC-V应运而生它完全毫无保留地开放了CPU设计标准任何人都可以使用该标准自由地设计生产CPU不需要支付任何费用也没有任何法律问题。这相当于硬件界的“Linux”推动了开放硬件的运动和发展。

然后我们来看看为什么说RISC-V很简单RISC-V提供了一个非常强大且开放的精简指令集架构只有32个通用寄存器、40多条常用指令、4个特权级。如果需要其它功能则要进行指令集的扩展单核心的规范文档才不到300页一个人在一周之内就能搞清楚。

相比ARM、x86动不动就有8000多页的规范文档这实在是太简单了。其实简单也意味着可靠和高效同时可以让学生或者硬件开发者迅速入手降低学习和开发成本。

最后我们来说说RISC-V的模块化设计。RISC-V虽然简单但这并不意味着功能的缺失。通过模块化的设计就能实现对各种功能组件的剪裁和扩展。

事实上现代IT架构已经发生了巨大的改变。举几个我们身边的例子吧。你正在使用的网卡上面越来越多的网络处理任务和功能都从主处理器上移到了网卡中由网卡芯片自己来处理了。

数据处理器 (DPU) 也体现了这一点。由于通用处理器对大规模数据处理能力的限制所以我们需要专用的数据处理器。而人工智能领域现在也已经开始通过GPU运行相关算法。

这些例子都在告诉我们专用处理器芯片的需求在大量激增而这正是RISC-V的用武之地。RISC-V的标准开放指令功能模块可以自由组合所以用RISC-V就能定制一款满足特殊用途的处理器。芯片工程师会自由组合RISC-V现有的指令功能模块按需对齐进行修改优化或者实现一个新的指令功能模块就像你根据需要修改和使用Linux内核一样。

正是因为RISC-V开放、简单和模块化这三大特点硬件工程师和软件工程师才能站在巨人的肩膀上开发自由地调用和组装功能模块快速去实现特定业务场景下的芯片需求。因此才有了RISC-V引爆芯片行业迅速火热起来的现象这是推动开放硬件的革命性壮举。

重点回顾

今天的课程又到了尾声,我们还是来看一下,在这节课中,我们都学习了什么。

首先我们了解了RISC-V从何而来明白了RISC-V发源于加州伯克利分校是该校第五代RISC指令集即第五代精简指令集。起初是为了学生有一套用来学习研究的指令集。后来因为有技术泰斗David Patterson的加入又成立RISC-V基金会RISC-V慢慢流行了起来。

之后我们研究了RISC-V是什么我带你了解了RISC-V指令集的命名方式、组成模块、寄存器与特权级。这些部分共同组成了RISC-V指令集架构规范。任何硬件厂商都可以按照这个规范实现自己的RISC-V处理器。

最后我们讨论了RISC-V因何流行。RISC-V是开放的没有任何法律和许可证问题又极其简单指令集是模块化的易于剪裁和扩展。这种开放、简单、易于扩展的特点使得硬件工程师非常容易上手和定制满足特定功能需要的处理器这直接推动了开放硬件的革命。

课程里的重点内容,我整理成了导图,供你参考。

思考题

为什么RISC-V要定义特权级

欢迎你在留言区跟我交流互动如果觉得内容还不错也推荐你把这节课分享给更多朋友。下节课我们就进入手写miniCPU的部分敬请期待