RISC-V的前世今生
RISC-V是什么?
RISC全名Reduced Instruction Set Computer ,即精简指令集计算机。V是罗马字母,代表第五代RISC(精简指令集计算机),可读作RISC-FIVE。
RISC-V指令集,类似于INTEL的X86 ,ARM指令集,是一个被CPU读取到内存后,指导计算机运行的指令集合。使用了该指令集的CPU,能执行指令集中规定的所有基本指令,使其按该套指令集编译的程序能够无障碍运行,且具有同系列CPU可移植和兼容性。RISC-V的起源?
RISC-V源于 2010年,当时加州大学伯克利分校的一个研究团队要设计一款CPU,为该项目选架构的时候研究团队对比了当时的ARM、MIPS、SPARC和X86等,发现这些指令集不仅越来越复杂,还有很多IP法律问题,再加上X86授权难以获取,ARM授权价格昂贵,所以该研究团队最终决定设计一套全新的指令集。于是成立了一个四人小组,仅用了3个月的时间就完成了RISC-V指令集的开发。其目标是新的指令集能满足从微控制器到超级计算机等各种尺寸的处理器。
讲到这里,小伙伴们估计要坐不住了,3个月就可以开发一套指令集,为什么我们还在受制于芯片。仅仅是因为生态建设问题吗?其实在RISC-V指令集架构之前,伯克利分校已经有了四代RISC指令集架构的设计经验,第一代RISC指令集早在1981年就已经出现,因此指令集的开发简单与否并不是那么容易得出结论。
技术当然是成功的重要方面,但也需要成功的运营。从2015年非盈利性组织RISC-V基金会(RISC-V Foundation)成立时的25个成员,至今已经有300多个单位加入,为RISC-V的发展建立了良好的生态环境。除了学术机构外,像芯片开发、软件工具、设计服务与系统等厂商,都有加入。其中包括阿里、谷歌、华为、英伟达、高通、麻省理工学院、普林顿大学、印度理工学院、中科院计算所、英伟达、联发科、Mentor Graphics、Express Logic(于2019年4月被微软收购)、西部数据、希捷等(了解更多可以访问其官网查看https://riscv.org/)。
由此可以看出RISC-V出身名门,又有BSD许可证(商业公司最喜欢的开源许可证之一)的加持。那作为名校优等生,本身究竟有哪些特点呢?
1.简洁
在IC的设计工作中,简洁通常意味着可靠、高效。IC设计的最终目标都是产出芯片,而芯片从设计到制造的周期一般都比较长,并且不同于软件开发可以后期通过打补丁来修复,其试错的成本极其高昂。所以简洁就意味着出错的概率低,出成果的效率高。
相对X86足足几千页的指令集手册,RISC-V是相当的简洁。我们打开官网https://riscv.org/specifications/查看RISC-V的“指令集手册,当前版本一共是236页。中文手册可以访问中国开放生态联盟网站获取:http://crva.io/(以上无需注册即可直接下载)
ISA页数字数(英文)
RISC-V23676,702
ARM-322736895,032
X86-3221982,186,259
以上数据出自RISC-V-Reader-Chinese-v2p1.pdf
2.模块化
它的核心是一个名为RV32I的基础ISA,运行一个完整的软件栈。RV32I是固定的,永远不会改变。这为编译器编写者,操作系统开发人员和汇编语言程序员提供了稳定的目标。模块化来源于可选的标准扩展,根据应用程序的需要,硬件可以包含或不包含这些扩展。这种模块化特性使得RISC-V具有了袖珍化、低能耗的特点,而这对于嵌入式应用可能至关重要。RISC-V编译器得知当前硬件包含哪些扩展后,便可以生成当前硬件条件下的最佳代码。惯例是把代表扩展的字母附加到指令集名称之后作为指示。例如,RV32IMFD将乘法(RV32M),单精度浮点(RV32F)和双精度浮点(RV32D)的扩展添加到了基础指令集(RV32I)中。
基础模块版本状态描述
RV32IV2.1批准基础的32位整数指令集,32位地址空间,寄存器是32位
RV64IV2.1批准基础的64位整数指令集,64位地址空间,寄存器是64位
RV32EV1.9草案嵌入式架构,仅有16个整数寄存器。
RV128EV1.7草案基础的128位整数指令集,支持128位地址空间。
扩展模块版本状态描述
AV2.0冻结支持原子操作指令
BV0.0草案标准扩展,位操作
CV2.0批准支持编码长度为16的压缩指令
DV2.2批准双精度浮点指令
FV2.2批准单精度浮点指令
JV0.0草案标准扩展,动态翻译语言
LV0.0草案十进制浮点
MV2.0批准标准扩展,支持乘法和除法指令
NV1.1草案标准扩展,用户态中断
PV0.2草案标准扩展,封闭的单指令多数据(Packed-SIMD)指令
QV2.2批准标准扩展,四精度浮点
模块化的RISC-V架构使得用户能够灵活选择不同的模块组合,以满足不同的应用场景,可以说是“面面俱到”。譬如针对于小面积低功耗嵌入式场景,用户可以选择RV32IC组合的指令集,仅使用Machine Mode(机器模式);而高性能应用操作系统场景则可以选择譬如RV32IMFDC的指令集,使用Machine Mode(机器模式)与User Mode(用户模式)两种模式。而他们共同的部分则可以相互兼容。
3.整齐
得益于后发优势和总结了多年来处理器发展的教训,RISC-V的指令集编码非常的规整,指令所需的通用寄存器的索引(Index)都被放在固定的位置,如图下图所示。因此指令译码器(Instruction Decoder)可以非常便捷的译码出寄存器索引然后读取通用寄存器组(Register File,Regfile)。
RISC-V指令格式。我们用生成的立即数值中的位置(而不是通常的指令立即数域中的位置) (imm)标记每个立即数子域。(本图基于Waterman和Asanovi'c 2017的图 2.2)
关于RISC-V本身的特点还有很多,例如:简洁的存储器访问指令、高效的分支跳转指令、简洁的子程序调用、无条件码执行、无分支延迟槽(Delay Slot)、无零开销硬件循环(Zero Overhead HardwareLoop)、简洁的运算指令、优雅的压缩指令子集、特权模式(机器模式M Mode;监督模式S Mode;用户模式U Mode)、矢量指令子集、自定义指令扩展等。我们就不在此一一赘述,感兴趣的小伙伴可以网上查找,也可以给我们留言讨论。下面我们以表格的形式将RISC-V设计时从其它指令集中所汲取的经验展示出一部分,供大家参考。
类别过去的教训吸取的经验改进
ARM-32 (1986) MIPS-32 (1986)x86-32 (1978)RV32I (2011)
简洁性无零寄存器、条件指令执行、复杂的寻址模式、栈操作指令(push/pop)、算术/逻辑指令中存在移位立即数支持零扩展及符号扩展、一些算术指令会造成溢出异常无零寄存器、复杂的过程调用指令(enter/leave)、栈指令(push/pop)、复杂寻址模式、循环指令寄存器x0专门用于存放常数0、立即数只进行符号扩展、一种数据寻址模式、没有条件执行、没有复杂的函数调用指令以及栈指令、算术指令不抛异常、使用单独的移位指令来处理移位操作
性能分支指令使用条件码、在不同格式的指令中,源和目的寄存器的位置不同、加载多个计算得到的立即数、PC是一个通用寄存器在不同格式的指令中,源和目的寄存器的位置不同分支指令使用条件码、每个指令中最多只能使用两个寄存器使用同一条指令实现比较及跳转(不使用条件码)、每条指令三个寄存器 、不能一次load多个数据、不同指令格式中,源及目的寄存器字段位置固定、立即数是常数(不是由计算得出的)、PC不是通用寄存器
架构和具体实现的分离将PC像普通寄存器一样读写,这样暴露了流水线长度分支指令延迟槽、Load指令延迟槽、乘除法使用单独的HI,LO寄存器寄存器不是通用的(AX,CX,DX, DI,SI有特殊用途)分支指令没有延迟槽、Load指令无延迟槽、通用寄存器
增长空间有限的指令码空间有限的指令码空间 大量可用的指令码空间
程序大小仅有32bit指令 (Thumb-2是作为一个独立的ISA)仅32bit指令(microMIPS是作为一个独立的ISA)指令长度可以是不同字节,但这是一个很不好的选择32位指令+16位 RV32C 扩展
易于编程 编译 链接仅15个寄存器内存数据必须对齐、不规则的数据寻址模式、不一致的性能计数器内存数据必须对齐、不规则的数据寻址模式、不一致的性能计数器仅15个寄存器内存数据必须对齐、不规则的数据寻址模式、不一致的性能计数器31个寄存器、数据可用不对齐、PC相对的数据寻址模式 、对称的数据寻址模式、定义在架构中的性能计数器
通常的教训是避免过去的ISA“优化”。经验和教训在简单性和性能下列出的许多指令集特性可以互换,因为这只是设计的偏好问题,但不管它们出现在哪里,它们都很重要。以上摘自RISC-V中文手册。
既然RISC-V具备这些优势,那我们再来探讨一下RISC-V的现状。时至今日,RISC-V指令集的支持工具已经相对完善。芯片设计公司不再担心工具链问题,只需专注于芯片设计,RISC-V社区已经提供了完整的工具链,并且RISC-V基金会将会持续维护该工具链。 IAR现已推出适用于RISC-V的工具链新版本。1.20版增加了对基本指令集RV32E的支持,以及对原子操作(A)的标准扩展。这使OEM以及SoC供应商能够根据应用程序或产品所需的确切定义来设计自定义内核。通过不断增加更多的支持和功能,IAR Systems可使这些公司充分利用领先的嵌入式开发工具链的功能来开发基于定制内核的应用程序。
UltraSoC宣布将通过OpenHW集团提供其业界领先的RISC-V跟踪编码器的开源实现。可用的生产级、符合标准的处理器跟踪解决方案是开发进步的关键推动力,其支持基于开源处理器为开发创建开放的、商业级的生态系统。
Microchip及其Mi-V合作伙伴提供了基于RISC-V的SoCFPGA以及其Mi-V生态系统,正在推动嵌入式领域的创新。Mi-VRISC-V生态系统是由Microchip和众多第三方开发的一套全面的工具和设计资源,以全面支持RISC-V设计。
今年2月,西部数据(Western Digital)发布了基于RISC-V指令集的自研通用架构SweRV,这是西部数据努力引领ISA(指令集架构)及其生态系统的一部分,也是他们向免授权CPU核心过渡的一部分。迄今为止西部数据已经开发出了三款RISC-V核心的产品。
12月11日Cobham Gaisler在加利福尼亚州圣何塞举行的RISC-V峰会上宣布,它将发布实现RISC-V指令集体系结构(ISA)的处理器IP内核新线。该系列的第一款产品NOEL-V处理器IP内核将于12月25日上市,可下载到Xilinx的Kintex UltraSCALE FPGA中。
根据分析机构Semico Research的最新报告《RISC-V市场分析:新兴市场》估计,到2025年,市场将总共消费624亿个RISC-VCPU内核,预计工业领域将是最大的细分市场,拥有167亿个内核。Semico预测RISC-V CPU内核的复合年增长率(CAGR),估计包括计算机,消费者,通讯,运输和工业市场在内的细分市场在2018年至2025年之间的平均复合年增长率为146.2%。
RISC-V 基金会于 11 月 25 日正式宣布,总部注册地将从美国迁往中立国家瑞士,只待瑞士监管机构的最终审核。此举在于试图避免受到地缘政治氛围的负面影响
RISC-V在中国的火热程度甚至超过美国,这背后也有地缘政治的原因。伴随着中美之间的贸易摩擦,科技冷战也开始打响。美国政府加大美国先进技术对中国企业的出口管制,迫使以华为为首的中国高科技企业寻求自主创新之道。虽然多年来中国科研院所和企业先后购买Intel、AMD、MIPS和Arm架构授权,但在微处理器研发和产业化方面都没能形成突破性进展,更谈不上“自主可控”了。RISC-V恰逢其时,短短两年时间内就在中国半导体业界形成“芯芯之火”的燎原之势。
专门负责RISC-V架构及指令标准制定的RISC-V基金会特别重视中国市场,不但有专门的中国委员会,还积极推动与中国RISC-V机构合作。立足上海的中国 RISC-V 产业联盟(CRVIC)以围绕RISC-V的芯片设计产业发展为主,而立足北京的中国开放指令生态(RISC-V)联盟CRVA则以RISC-V生态的设计工具和软件开发为主。深圳在今年11月份将RISC-V的开山鼻祖 DavidPatterson教授请来并在清华-伯克利深圳学院(TBSI)成立以Patterson教授命名的RISC-V国际开源实验室(RIOS),RIOS在西班牙语里是“河流”的意思,寓意这个RISC-V研究机构将像河流一样汇聚来自全球的资源和智力,催生和孕育RISC-V生态的健康发展,并推动RISC-V发展成为未来50年的计算架构标准。
2018 年下半年起,除了早早入局的华为和阿里,还有有华米、中天微、乐鑫等代表性企业表示支持 RISC-V。首先,华米科技发布黄山一号芯片,没有采用传统的 ARM 架构处理器,成为全球第一款采用 RISC-V 开源指令架构的穿戴式处理器,相比 ARM Cortex-M4 处理器的运算效率高出 38%,凸显 RISC-V 与低功耗市场的契合。
阿里巴巴旗下的中天微和平头哥也双双拿出成果。前者宣布推出支持 RISC-V 第三代指令系统架构处理器 CK902,后者在今年推出了运用 12 纳米工艺,搭载 16 个核心,号称“业界最强”的 RISC-V 处理器玄铁 910。
成立于 2008 年的上海乐鑫公司也基于RISC-V指令集架构开发物联网芯片,致力于研发 WiFi 和蓝牙组成的双模物联网。此外,还有芯来、君正、芯原和核芯等中国公司也在从事 RISC-V 架构的相关研发
随着RISC-V生态建设的不断推进,我们相信未来一段时间内,RISC-V将与ARM同行发展,即一个设计中,既能使用ARM也能使用RISC-V,或者同一颗芯片里,可以同时有两种内核。期望未来RISC-V的生态环境建设从围绕芯片设计转向开发者教育和实践阶段,为培养更多的行业人才而努力。
参考资料及更多信息可访问以下网站获取:RISC-V基金会:https://riscv.org/中国开放生态联盟:http://crva.io/IAR公司:https://www.iar.com/
页:
[1]