- RISC-V处理器与片上系统设计:基于FPGA与云平台的实验教程
- 陈宏铭 程玉华编著
- 6803字
- 2021-02-26 16:39:14
第1章 RISC-Ⅴ的历史和机遇
1.1 RISC-Ⅴ发明团队与历史
中央处理器(Central Processing Unit,CPU)相当于电子产品的大脑,在通信领域,几乎所有的重要信息都要被这个“大脑”掌控,处理器芯片和操作系统是网络信息领域里最基础的核心技术。以手机领域为例,市场上几乎所有的手机处理器芯片都是采用处理器行业的一家知名企业——ARM(Advanced RISC Machine)公司的架构,很多芯片设计厂商在自研处理器时多少都会触及ARM的技术。操作系统面临的挑战是生态圈是否成熟。在市场份额上,手机所用的安卓系统和个人电脑上所用的微软系统都是操作系统行业龙头,主要原因在于它们有完整且丰富的生态圈,有无数的软件开发者支持,使大多数用户都习惯于使用微软和安卓的操作系统。
RISC-Ⅴ为非营利组织RISC-Ⅴ基金会(RISC-Ⅴ Foundation)所推动的开源指令集体系架构(Instruction Set Architecture,ISA)。由于RISC-Ⅴ具有精简、模块化及可扩充等优点,近期在全球各地及各种重要应用领域快速崛起。除了基本的运算功能,RISC-Ⅴ规格里更预留了客制指令集的空间,以便于加入领域特定体系架构(Domain-Specific Architecture,DSA)的扩充指令,以便于支持如新世代存储、网络互联、AR/VR、ADAS及人工智等应用。要了解什么是RISC-Ⅴ指令集,就要先谈RISC指令集的发展历史。从1979年开始,美国旧金山湾区的一所知名大学,加州大学伯克利分校的计算机科学教授David Patterson提出了精简指令集计算机(Reduced Instruction Set Computing,RISC)的设计概念,创造了RISC这一术语,并且长期领导加州大学伯克利分校的RISC研发项目。由于在RISC领域开创性贡献的杰出成就,Patterson教授在2017年获得被誉为计算机界诺贝尔奖的图灵奖。
在David Patterson的领导下,1981年,加州大学伯克利分校的一个研究团队开发了RISC-Ⅰ处理器,它是今天RISC架构的鼻祖。RISC-Ⅰ原型芯片共有44500个晶体管,具有31条指令,包含78个32位寄存器,分为6个窗口,每个窗口包含14个寄存器,还有18个全局变量。寄存器占据了绝大部分芯片面积,控制和指令只占用芯片面积的6%。1983年发布的RISC-Ⅱ原型芯片有39000个晶体管,包含138个寄存器,分为8个窗口,每个窗口有16个寄存器,另外还有10个全局变量。1984年和1988年分别发布了RISC-Ⅲ和RISC-Ⅳ,而RISC的设计概念也催生出了许多我们熟知的处理器架构,如DEC有Alpha、MIPS、SUN SPARC,IBM有Power及现在占据绝大部分嵌入式市场的ARM指令集架构。这些指令集架构的市场较分散,操作系统常常是各做各的,或只是在开源代码上做优化。图1-1所示为加州大学伯克利分校研发的五代RISC架构处理器。
图1-1 加州大学伯克利分校的五代RISC处理器
RISC-Ⅴ指令集始于2010年,是由加州大学伯克利分校设计并发布的一种开源指令集体系架构。加州大学伯克利分校从20世纪80年代就开始研究RISC精简指令集,架构小组的研究项目多年来使用MIPS、SPARC和x86等不同指令集的处理器,具有丰富的处理器开发与使用经验,也是许多处理器设计项目的研究基础。计算机架构研究者Andrew Waterman和Yunsup Lee作为博士研究生,在2010年与他们的指导教授Kreste Asanović一同开始尝试为下一个硬件设计的项目选择指令集架构,并且最终要制造出有特殊功能的芯片。这三位科研人员被认为是RISC-Ⅴ的发明与主要推动者。他们初期需要一个简单的处理器来支持为新项目所设计的矢量引擎,他们有很多商业指令集可以选择,如英特尔x86跟ARM都是合理的选择,因为这两种ISA在业界很受欢迎。
经过细致的评估后,开发团队认为x86指令集太复杂了,打开厚重的x86指令集手册就知道这显然不是一个好的选择。看到第一条指令叫做AAA,用于加法的ASCII码调整。将存放在AL中的二进制和数,调整为用ASCII码表示的结果,其中AL寄存器是默认的源和目标。早在1971年推出的Intel 4004是一个计算器芯片,当时的AAA指令实际上是用来实现二进制编码十进制(Binary-coded decimal,BCD)算法,是BCD指令集中的一个指令,用于在两个未打包的BCD值相加后,调整AL和AH寄存器的内容,虽然它是单字节指令,仍然使用了很大一部分的编码空间。事实上x86还有很多这类因为一些历史的原因现在看来不太好的设计,也导致它的设计很复杂。还有IP知识产权问题导致它背后有一大堆的法律问题,所以他们认为x86个处理器不合适给学术界使用。
另一个选择是2010年在低功耗片上系统(System on a Chip,SoC)设计中已经很流行的ARM架构处理器。在当时,ARMv7还是ARM最新的指令集架构,大家通常都认为ARM是一个相当简单的ISA,但是如果读者试着读它的用户手册,还是有许多非常复杂的指令。笔者经常提到的例子是LDMIAEQ,这是一个非常复杂的指令。不选择ARM的原因,除了ISA比较复杂,2010年的ARMv7只有32位没有64位的处理器IP,并且IP授权费用太高。不合适选这个架构来做学术项目,因为它既不能开源也不能分享。于是他们选择自己开发新的指令集,设计一个可以扩展的简单指令集体系架构用于教学和研究。这个新指令集能满足从微控制器到超级计算机等各种性能需求的处理器,能支持从FPGA到ASIC等各种硬件实现,能快速地实现各种处理器的微架构,能支持多种定制与扩展加速功能,能很好地适配现有软件栈与编程语言。最重要的一点就是要稳定,即不会频繁改变版本,未来也不会被芯片开发者弃用。
此外,RISC-Ⅴ指令集发明团队在2011年思考的一个问题启发他们做开源处理器,团队看到,在互联、操作系统、编译器、数据库与图像等在业界都有开放的标准或开源的代码,见表1-1。指令集标准是计算机系统连接软硬件最重要的环节,为何在处理器指令集领域没有免费开放的标准体系架构?而不像其他领域有许多的开源架构可以供爱好者使用。RISC-Ⅴ指令集规范可以类比为操作系统领域的POSIX系统调用标准,而开源的RISC-Ⅴ处理器核则可以类比为Linux操作系统。如同开源软件涵盖的内容要远远超过Linux操作系统,RISC-Ⅴ还包含GCC/LLVM等编译器、MySQL数据库等软件、GitHub托管平台等。RISC-Ⅴ的目标是成为指令集架构领域的Linux,应用覆盖物联网、桌面计算、高性能计算、机器学习与人工智能等众多领域。
表1-1 开放的软件及标准化运作
加州大学伯克利分校的Kreste Asanović教授、Andrew Waterman和Yunsup Lee在2010年夏季开始了“三个月的项目”,以开发简洁而且开放的指令集架构,“三个月的项目”也让RISC-Ⅴ处理器诞生了。他们完成了RISC-Ⅴ指令集的初始设计,这是一种不断成长的指令集架构。RISC-Ⅴ在2011年完成了被称为Raven-Ⅰ处理器的部分,接着在2011年5月发布第一次公开标准。2014年RISC-Ⅴ的第一版标准定型。原本计划只需三个月的暑期项目做了四年,后来这个项目越做越好。RISC-Ⅴ是指令集不断发展和成熟的全新指令。RISC-Ⅴ指令集完全开源、设计简单、易于移植Linux系统,采用模块化设计,拥有完整的软件开发工具链。
Krste Asanović教授认为矢量扩展(Vector Extension)指令集的设计宗旨是它应具有超强扩展能力,可以支持从微控制器到超级计算机使用相同二进制代码,帮助开发边缘到云端数据中心的人工智能应用,所以V也表示开发团队对于矢量扩展指令集的爱护。而他本人也在RISC-Ⅴ基金会中领导矢量扩展定义,用来实现数据并行执行,有利于机器学习和推理,以及DSP、加密、图形等高性能计算。
RISC-Ⅴ在学术领域也正在成为热门研究,早在2016年,MIT的研究人员就在Sanctum项目中使用RISC-Ⅴ实现Intel SGX类似功能的基础概念验证程序(Proof of Concept,PoC)。密歇根、康奈尔、华盛顿及加州大学圣迭戈分校等几个大学也迅速开发出500多个RISC-Ⅴ核的SoC,甚至有的还采用先进的16nm FinFET工艺。作为RISC-Ⅴ的大本营伯克利,联合能够模拟Rocket Chip的基于云平台的FireSim软硬件协同设计环境和仿真平台,在云中开展建模1024个四核RISC-Ⅴ的服务,剑桥大学开发出信息安全领域的RISC-Ⅴ芯片。
1.1.1 商业公司的指令集架构载浮载沉
处理器主要有两大指令集:一个是复杂指令集(Complex Instruction Set Computer,CISC),其架构的主流是x86,另一个是RISC精简指令集,其架构的主流是ARM、MIPS和RISC-Ⅴ。在半导体的历史上,x86与ARM作为主流处理器架构一直都占有很大的市场份额。
指令集的生态一旦形成是坚不可摧的。1961年年底,在IBM的System-360项目中,IBM凭一己之力攻克了指令集、集成电路、可兼容操作系统与数据库等软硬件多道难关,获得了300多项专利。20世纪60年代,IBM为开发System-360,在3年多时间里投入了52.5亿美元,甚至超过制造原子弹的曼哈顿计划。IBM差点因这个项目资金链断裂,其他小厂家则更加难以参与到电子产业内。
1968年英特尔成立,这催生了半导体设计从计算机中分化,也产生了一批做芯片设计、制造、封装测试的公司。到20世纪70年代,随着硬件技术进步,市场对软件的需求提高了,软件成为单独的行业,1975年微软公司成立。在20世纪70年代开始萌发的个人电脑(Personal Computer)市场上,英特尔与微软的Wintel联盟逐渐成形。前者做x86指令集架构的CPU成为传统个人电脑市场的主流,后者做Windows操作系统,最终占据垄断地位。
英特尔的高性能CPU特性善于处理大量数据,在传统个人电脑与服务器领域处于霸主地位,在笔记本、桌面与服务器市场有90%的占有率,设计专利掌握在英特尔和AMD手中。这带来了半导体产业的一个特殊的“指令集壁垒”生态现象,而英特尔是第一个建立“指令集壁垒”的半导体公司。2000年之后,英特尔进一步利用自己市场出货量大、成本低的优势,向更高端的服务器市场进军,用较低的价格打败了Power、SPARC、Alpha等传统指令集,改写了整个服务器市场的生态。英特尔连续25年(1991——2017年)获得全球半导体第一厂商的荣誉,关键在于他们掌握了x86指令集这个电子产业基础标准。
1981年,ARM的前身Acorn计算机公司主要生产一款供英国中小学校使用的电脑,Acorn基于当时学界提出的RISC精简指令集概念研发了32位、6MHz,使用自研指令集的处理器,命名为ARM。到1990年,已更名为ARM的新公司专注于芯片业务。但英特尔等厂商已占据了大量个人电脑市场,卖芯片的ARM生意不佳,只能将IP核授权给其他公司。20世纪90年代,随着垂直分工的开始,台积电的代工模式加上ARM的IP授权模式兴起,ARM和台积电承担了产业链的头尾,芯片设计逐渐发展成不做工厂生产或做底层基于处理器研发SoC的无工厂(Fabless)厂商。
在手机带来的科技革命趋势下,需要快速处理数据。ARM架构主要以处理快速数据为主,在手机处理器IP领域一统江湖,也有少量使用在便携笔记本中,IP被牢牢掌握在ARM公司。ARM已经占领手机的生态,超过95%的移动手机及平板市场的芯片都是基于ARM v7/v8指令集架构。目前全球排名前20的半导体厂商中,近一半是1990年后成立的无工厂厂商,而这些新公司多是ARM和台积电的客户。软银集团以40%的溢价收购了ARM,再将25%的股权卖给了Abu Dhabi基金。ARM也将把中国子公司51%的股份出售给中国投资者,作价7.75亿美元。ARM以开放的IP授权模式与服务器端CPU的霸主英特尔屹立两头,组成了当下全球半导体产处理器的两大标准。
自2010年RISC-Ⅴ诞生以后,处理器架构隐约呈现出三足鼎立的趋势。相较于x86与ARM指令集架构,RISC-Ⅴ指令集架构还是相对弱小。RISC-Ⅴ的基本生态圈已经建立起来,试图挑战现行主流的指令集架构却也面临种种挑战。如在桌面、服务器和高端嵌入式领域已经形成了技术、专利和生态环境壁垒,RISC-Ⅴ想进入这些领域甚至替代之前的技术还需要假以时日。但是随着物联网时代的来临,RISC-Ⅴ在新型的物联网等市场似乎有更多机会。因为物联网领域对人工智能芯片既要求有高计算能力又需要低延迟,所以物联网芯片设计的速度要快、成本要低且能量身定制。同时,嵌入式市场具备少量多样的特点,在各细分应用场景并未形成真正壁垒,架构的选择也是五花八门,这正是RISC-Ⅴ绝佳的突破口。RISC-Ⅴ作为新兴的架构,以其精简的设计初衷还有很大的机会在未来的无线物联网领域中取得绝对的优势。
其实,在 RISC-Ⅴ 到来之前,业内已存在几种开源指令级架构,包括SPARC V8和OpenRISC,其中SUN公司发布的开源多核多线程处理器OpenSparcT1和T2,后被Oracle公司并购。欧洲航天总局的LEON3都是采用SPARC V8指令集,OpenRISC也有同名的开源处理器。既然已经有开源指令集架构,为何还要研发RISC-Ⅴ?RISC-Ⅴ能够在短短几年内快速发展并得到多家商业公司的支持,主要凭借两点优势。第一,RISC-Ⅴ吸收各开源指令集的优点,其功能更加丰富。第二,OpenRISC的许可证为GPL,意味着所有的指令集改动后都必须开源,而RISC-Ⅴ的许可证为BSD License授权,即修改也无须再开源。这一点吸引了很多机构和公司使用RISC-Ⅴ开发商用处理器。此外,RISC-Ⅴ支持压缩指令与128位寻址空间,这也是SPARC V8、OpenRISC所没有的。
根据过往的经验,用商业公司运营来维护指令集的存续会有很大的风险,风险在于指令集的存亡与公司的经营息息相关。如何经营一个好的生态,才能让指令集有更好的生命力,是一个开发团队在开发出全新的RISC-Ⅴ指令集后最应关注的问题。
1.1.2 RISC-Ⅴ指令集架构有什么不同
RISC-Ⅴ最大的特性就在于精简。虽然与ARM同属于精简指令集架构,但因RISC-Ⅴ是近几年才推出的,没有背负向后兼容的历史包袱,因此RISC-Ⅴ远比其他商业指令集架构短小精干。相比于x86和ARM架构的文档长达数千页且版本众多的不足,RISC-Ⅴ的规范文档仅有145页,且特权架构文档的篇幅也只有91页,熟悉体系架构的工程师仅需一两天便可读懂。RISC-Ⅴ的开源既能降低成本,也能让用户按需定制自由修改,RISC-Ⅴ生态与敏捷设计同源。目前,国内外已有多家芯片企业投入大量资金研发RISC-Ⅴ在物联网领域的应用。SiFive是RISC-Ⅴ商业化的探索者,未来可能成为领导者。
从技术角度,SiFive利用伯克利在过去三十年指令集设计的经验来开发一个全新而且与工艺节点无关的指令集,以社区的方式来设计与维护指令集标准,RISC-Ⅴ与其他指令集的不同点有以下方面。
●模块化:RISC-Ⅴ架构可让用户灵活选用不同的模块组合,以软件模块化的思维来定义硬件标准,将不同的部分以模块化的方式整合在一起,并通过一套统一的架构来满足各种不同的应用场景。例如,针对小面积低功耗嵌入式场景,用户可以选择RV32IC组合指令集,仅使用机器模式(Machine Mode);而高性能应用操作系统场景可以选择RV32MFDC指令集,使用机器模式和用户模式(User Mode)两个模式,而且它们之间的共同部分可以兼容。这种模块化是x86与ARM架构所不具备的。
●指令数目少:受益于短小精干的架构及模块化的特性,RISC-Ⅴ架构的指令数目非常简洁。基本的RISC-Ⅴ指令数目仅有40多条,加上其他的模块化扩展指令总共有几十条指令。
●全面开源:RISC-Ⅴ具有全套开源免费的编译器、开发工具和软件开发环境(IDE),其开源的特性允许任何用户自由修改、扩展,从而能满足量身定制的需求,大大降低指令集修改的门槛。
相较于其他商用的指令集,RISC-Ⅴ指令集架构简洁得多。全新的设计吸取了前辈指令集的经验和教训,对用户和特权指令集可以做到明确分离,以及基于指令集架构具体处理器硬件实现的微架构,甚至与代工厂的工艺技术脱钩。模块化指令集架构精简的基本指令集加上标准扩展指令集,为将来的应用升级预留了足够的空间。稳定性要求在于基本及标准扩展指令集不会再改变,通过可选扩展而非更新指令集的方式来增加指令。由领先的行业或学术专家以及软件开发者组成的社区,通过社区进行设计。
有一个生动的例子可以用来形容传统处理器增量指令集架构和21世纪RISC-Ⅴ指令集架构,例如,顾客到了餐厅想点选比萨、牛肉面、青菜豆腐汤、海鲜、牛排或日料等不同菜品,一顿自助餐就能满足顾客所有的需求,但是吃不吃都要花费300块钱。RISC-Ⅴ提供的菜单是基础的RV32I指令集,可以编译与运行简单软件,还有可选的RV32M乘法、RV32F单精度浮点数、RV32D双精度浮点、RV32C压缩指令,还有RV32V矢量扩展等,这些都是模块化的标准扩展,可依照应用来选择是否采用,不需要多付额外的费用来选择不需要的功能,这里的费用还包括了芯片面积所导致的成本上升。
1.1.3 RISC-Ⅴ发展史及其标志性事件
如图1-2所示说明从2010年到2019年第四季的RISC-Ⅴ发展史,自全新指令集项目开始到2011年5月发布了被称为RISC-Ⅴ基本用户指令集v1.0规范,这代表加州大学伯克利分校的第五代RISC指令集。2011年将所设计的Raven-1芯片采用了28nm FD-SOI工艺流片,以验证RISC-Ⅴ架构的可行性。2012年首个Rocket Chip采用45纳米工艺流片,2013年首次移植Linux操作系统,2014年发布冻结的基本用户指令集v2.0 IMAFD。
伯克利研发团队在开发处理器的同时,将RISC-Ⅴ指令集架构从学校推广到全世界。后来陆续开始有人询问有关于RISC-Ⅴ指令集架构的问题,并且想使用它来设计芯片,RISC-Ⅴ才变成了一个真正为世人所接受的项目,也促成了RISC-Ⅴ基金会的成立。在2015年,伯克利研发团队想要成立非营利性组织RISC-Ⅴ基金会来维护指令集架构,Krste Asanović教授也是现任RISC-Ⅴ基金会董事会主席。一些大公司如英伟达(NVIDIA)等也加入RISC-Ⅴ基金会。接着有了几份出版物,有了许多研讨会视频,还有了许多RISC-Ⅴ软件的支持。同时成立了SiFive公司从事商业化处理器IP的运营,为商业客户提供所需的处理器内核及芯片物理实现的设计服务。
最先采用RISC-Ⅴ作为工业标准架构的公司是英伟达公司。2016年,英伟达公司发布了首个商业软核,这也是第一个RISC-Ⅴ商业SoC,公开宣布他们未来所有的GPU都会使用RISC-Ⅴ架构。2017年,西部数据发布了特权架构v1.10,这也是商业RISC-Ⅴ应用的另一款SoC。他们宣布计划一年出货十亿以上的RISC-Ⅴ内核,并逐步取代其他商业内核。
图1-2 RISC-Ⅴ发展史
印度是第一个将RISC-Ⅴ作为国家指令集标准的国家,美国的国防高级研究计划局(DARPA)最近在向国会发出的安全呼吁提案中建议使用授权RISC-Ⅴ。以色列创新管理局创建了RISC-Ⅴ GenPro孵化器,欧洲、俄罗斯等国家开始全国推行。2019年8月,RedHat也宣布加入RISC-Ⅴ基金会,未来在RISC-Ⅴ针对服务器领域开展合作,Fedora已经投注很多人力在RISC-Ⅴ处理器上开发操作系统。
SiFive公司在2019年12月举办的RISC-Ⅴ Summit 2019发表了几场重要的演讲,分别是The Open Secure Platform Architecture of SiFive Shield、SiFive Intelligence cores for vector processing、Introducing Scalable New Core IP for Mission Critical Use,以及Building RISC-Ⅴ IoT Applications using AWS FreeRTOS,持续引领RISC-Ⅴ业界的领先技术,成为业界关注的焦点。笔者也以中文网课的形式在上海赛昉科技的公众号介绍了相关的技术信息。