1.4 SiFive研发团队技术沿革
SiFive公司位于旧金山,是由RISC-Ⅴ开创者Krste Asanović,以及Yunsup Lee和Andrew Waterman所创建最早的RISC-Ⅴ处理器公司,其创始人即发明并开发RISC-Ⅴ的美国加州大学伯克利分校团队。目前三分之一的员工为RISC-Ⅴ研发团队的成员,可谓是百分之百继承RISC-Ⅴ血统的公司。Andrew Waterman在伯克利参与RISC-Ⅴ发明工作,现任SiFive联合创始人与首席工程师。Yunsup Lee是SiFive联合创始人与首席技术官,Krste Asanović教授还是伯克利的教授与SiFive联合创始人与首席架构师。Krste Asanović教授认为“指令集架构是计算机系统中最重要的交互接口,RISC-Ⅴ作为开源指令集,以其操作简便、没有历史包袱、模块性强、稳定性强等优势迅速被业界认可。基准检测证明,RISC-Ⅴ在性能功耗比上具有优势”。
1.4.1 Rocket Chip SoC生成器
近来,开源处理器项目RISC-Ⅴ在半导体业界掀起一股新的浪潮。这股浪潮同时带来敏捷芯片开发的设计概念。对于敏捷开发,芯片设计工程师比较少提及,但是它在软件开发中占有重要地位,主要是指开发团队在面对客户多变的需求时,能快速实现版本迭代,在短时间内快速提交高质量的代码。加州大学伯克利分校在开发RISC-Ⅴ标准和设计处理器内核的过程中,引入并改进用Scala嵌入式语言构造硬件的Chisel语言,同时开源了一款兼容RISC-Ⅴ指令集的Rocket Chip处理器,这个项目在GitHub上作为标志性的Chisel项目,包含一个可定制性强的处理器内核、缓存和总线互联等IP的模块库,以此为基础构成了一个完整的SoC设计,并可以生成可综合的Verilog RTL代码。
什么是Rockets Chip SoC生成器?它能生成什么?Rocket Chip SoC生成器是一个用Chisel写的参数化SoC生成器,它产生了一些内核块(Tile),内核块是用于缓存一致性的生成器模板,这些内核块可以包含一个Rocket内核和一些缓存,以及与Rocket内核组成Tile内核块的组件,如FPU和RoCC协处理器。内核块和加速器的数量和类型是可配置的,私有缓存的组织也是如此。它还产生了Uncore,Uncore是除内核块以外的外部逻辑代码,包括外部存储系统。其中包括一个一致性代理(Coherence Agent),共享缓存,DMA引擎和内存控制器。Rockets Chip SoC生成器也把所有的碎片设计黏合在一起。
以早期的Rocket Chip SoC生成器为例进行说明。Rocket Chip可以看作是一个处理器组件库,最初为Rocket Chip设计的几个模块被其他设计重复使用,包括功能单元、缓存、TLB、页表遍历器和特权体系架构实现,也就是控制和状态寄存器文件(Register File)。图1-18所示是Rocket Chip SoC生成器的框图,它生成任意数量的内核块,内核块由Rocket Core组成,是可选的浮点单元。RoCC是Rocket自定义协处理器接口,用于特定应用程序的协处理器的模板,它可以公开自己的参数,有助于Rocket处理器和附加协处理器之间的解耦通信。RoCC加速器代表Rocket自定义协处理器,读者可以在这里实例化自己喜欢的加速器。读者也可以生成一个L1指令缓存和一个非阻塞的L1数据缓存。Rocket Chip SoC生成器还生成了主机目标接口(HTIF)模块,在这个SoC生成器中,HTIF模块是一个宿主DMA引擎,在这个引擎中,主机可以在没有任何处理器干预的情况下,在目标内存中进行读写操作。然后,它还可以生成Uncore,实现了需要与Rocket紧密连接的功能单元,包括L1 Crossbar和一致性管理器(Coherence Manager),并添加了一些转换器,使复杂的内存IO转换成为一个更简单的Memio。
图1-18 Rocket Chip SoC生成器框图
为什么需要写这些SoC生成器?因为当芯片开发人员试图将RTL移植到不同的工艺节点上时,在不同的性能、功耗与面积的约束条件下,SoC生成器确实有助于快速调整设计。特别是很容易改变设计上的缓存大小和流水线的级数,甚至是面对不同应用的处理器微架构。所以,能调整的参数包括处理器内核的数量、是否要实例化浮点单元或矢量单元、可以改变缓存的大小、缓存的关联方式、设置TLB条目的数量,甚至还可以设置缓存一致性协议。当然,还能改变浮点单元的流水线数量,以及片外IO的宽度,等等。
1.4.2 使用Chisel语言编写Rocket Chip生成器
读者知道了为什么需要写SoC生成器,那为什么要用Chisel语言编写SoC产生器呢?什么是Chisel语言呢?Chisel语言是加州大学伯克利分校开发的一种硬件描述语言,正如Chisel的英文全称所明示,这是一种用Scala嵌入式语言来描述硬件的方式,现在已经开发到第三版——Chisel3了。选择基于Scala的Chisel语言来写SoC生成器,是因为Scala是一种功能非常强大的语言,它依靠面向对象编程、函数式编程等现代软件工程技术,使硬件设计者的工作变得更有效率,而且使编码变得更轻松,以至于现在伯克利的硬件设计工程师不会再去写Verilog。Scala是一门多范式、函数式和面向对象的编程语言。读者只要记住Scala很适合用于领域特定语言(Domain-Specific Language,DSL)就行了。当然,函数式编程语言往往和硬件模块存在一些等价转换关系,DSL可以像积木一样被组合或者塑造成新的语言。因为Chisel RTL(即Rocket Chip源代码)是一个Scala程序,所以需要在机器上安装Java来执行,并且确保Rocket Chip环境变量指向rocket-chip存储库。
使用Chisel语言可以做什么呢?如图1-19所示,Chisel可以为三个目标生成代码:一个是高性能的循环精度验证程序,一个是FPGA优化的Verilog,还有一个是为VLSI优化的Verilog。一旦读者用Chisel编写Rocket Chip生成器,它可以瞄准三个后端,分别是C++代码后端,FPGA后端及ASIC后端。因此,读者可以生成C++代码,编译并运行它,它会给一个周期精确的软件模拟器,速度会比Synopsis VCS仿真器快10倍。更重要的是,使用软件模拟器不需要License文件,这个软件模拟器甚至可以转储(Dump)波形。读者可以用波形文件查看工具GTKWave打开值变转储(Value Change Dump,VCD)文件,所以读者可以在没有License文件的情况下开发硬件和RTL仿真。
图1-19 Chisel程序的最终目标
开发人员使用Chisel编写的代码,可以生成可综合、可参数化的Verilog电路。Chisel生成通用的Verilog,也可以生成为FPGA优化的Verilog。读者可以把它映射到FPGA上,运行长时间的软件工作负荷,如十亿或者更长的周期。一旦读者在FPGA调试完成Verilog源代码,还可以把它转成ASIC Verilog。使用芯片打算流片的代工厂所提供的标准ASIC库,配合Synopsys DC工具进行综合,接着后端工具生成一个GDS布局上传代工厂准备流片。
1.4.3 Rocket标量处理器
参考Yunsup Lee博士在ESSCIRC所发表的论文(A45nm1.3GHz16.7 double- precision GFLOPS/W RISC-Ⅴ processor with vector accelerators)中介绍的Rocket标量处理器。如图1-20所示的流水线是一个执行64位标量RISC-Ⅴ指令集的5级流水线,单发射顺序处理器,实现了RV32G和RV64G的指令集。读者可以在计算机组成的教科书上看到5级流水线,分别是产生程序计数器(PC)值-指令读取-指令译码-执行-访问内存和写回等不同阶段。Rocket标量内核经过精心设计,以尽量减少过长时钟对高速缓存使用编译器生成SRAM的输出延迟影响,设计团队将分支解析移到访问内存阶段以减少关键的数据缓存旁路路径。实际上这增加了分支解析延迟,但是可以通过分支预测来缓解问题。
图1-20 Rocket标量处理器的流水线
处理器部署了一个具有分支预测的前端,带有一个64个条目的分支目标缓冲器(BTB),在两个条目中有256个条目分支历史表(BHT),两级分支预测器和一个返回地址堆栈(RAS),一起减轻这些控制危险增加的性能影响。分支预测是可配置的,所有这些设计的数量在生成器内都是可调整的。Rocket标量内核实现了一个支持基于页面的虚拟内存MMU,能够引导包括Linux在内的现代操作系统。所有的指令缓存和非阻塞数据缓存实际上都是索引的,物理上都用并行TLB查找进行标记。对于浮点,Rocket标量内核使用了Chisel实现的浮点单元,支持一个可选且符合IEEE754-2008标准的FPU实例。它可以执行单精度和双精度浮点运算,包括融合乘法加法(FMA),硬件支持次正规值和其他异常值。全流水线双精度FMA单元具有三个时钟周期的延迟。所有进入加速器的Rocket指令被送进提交(Commit)阶段,然后被发送到Rocket加速器。
Rocket标量内核还支持RISC-Ⅴ机器、监督和用户特权级别。内核公开了许多参数,包括支持一些可选的M、A、F、D ISA扩展、浮点流水线的级数以及缓存和TLB大小。如图1-21所示为加州大学伯克利分校几款RISC-Ⅴ处理器的流片时间轴,这些处理器是使用早期版本的Rocket Chip SoC生成器创建的。轴上方的28nm Raven芯片结合64位RISC-Ⅴ矢量处理器、片内开关电容DC-DC转换器和自适应时钟。已经有4个芯片在STMicro 28nm FD-SOI工艺上流片。轴下方的45nm EOS芯片采用64位双核RISC-Ⅴ矢量处理器,具有单集成硅光子链,6个芯片在IBM 45nm SOI工艺上流片。时间轴的末端是SWERVE芯片在台积电28nm工艺上流片。Rocket Chip SoC生成器成功地成为这11个不同SoC的共享代码库;每个芯片的设计思路都被合并到代码库中,确保了最大程度地设计复用,也就是使这三个不同的芯片系列用于评估不同的设计思想。
图1-21 加州大学伯克利分校几款RISC-Ⅴ处理器的流片时间轴
1.4.4 SiFive强力推动RISC-Ⅴ生态发展
从2015年开始,SiFive公司基于Rocket Chip SoC生成器发布了许多基于RISC-Ⅴ的处理器内核,满足从发烧友到系统制造商的不同级别开发需求。2017年,SiFive公司发布了U54-MC内核,这是第一款基于RISC-Ⅴ的芯片,并可以支持Linux、Unix和FreeBSD。2019年,SiFive公司通过推出用于嵌入式架构的64位微控制器S2 Core IP系列扩展了其产品组合。SiFive公司的S2系列目标是处理越来越多连接设备的处理需求,处理实时工作负载,并在不同程度上用于人工智能和机器学习应用。
2019年6月SiFive公司宣布完成101个RISC-Ⅴ设计采用订单,包括高通和SK海力士在内全球排名前十的半导体公司,有六家公司成为SiFive的客户,说明大型芯片设计公司也能接受RISC-Ⅴ的技术。不仅替换过去既有的产品,也用于新的产品线。基于SiFive设计的芯片已被用于商业发行的产品中,包括中国可穿戴设备公司华米科技(Huami)生产的智能手表和韩国初创企业FADU生产的存储设备。高通作为ARM最大的客户之一也参与投资了SiFive,这预示着高通未来将开发基于RISC-Ⅴ架构的处理器,摆脱对ARM的完全依赖。SiFive的开源为芯片设计界带来活水,SiFive、Google、西部数据等公司成立了CHIPS联盟,继续构建RISC-Ⅴ的生态圈。
图1-22所示为SiFive RISC-Ⅴ 2/3/5/7系列核及已经可以提供的特性。目前,SiFive已经完成了RISC-Ⅴ领域最为完整的商业品质CPU产品线。针对应用场景包含32位嵌入式E内核处理器、64位嵌入式S内核处理器和64位应用U内核处理器。相较32位E内核,64位S内核将用于更大的系统。U内核是应用处理器,可以用来运行大型操作系统,如Linux操作系统,希望将来也支持运行Android和Windows等操作系统,让我们可以设计基于RISC-Ⅴ的计算机应用程序。
针对性能、功耗、面积不同的要求,目前已有产品涵盖了超小面积2系列超低功耗内核,能效比领先的3/5系列内核,高性能的7系列内核和超高性能的8/9系列内核。在功能方面,全系列产品将支持多核与异构多核、浮点运算,矢量运算、安全方案与Trace调试功能,全系列支持客户云端定制。为了客户评估使用,SiFive创建了许多预先配置的标准内核。建议开发人员先使用预配置的标准内核,然后根据需要添加或删除功能。
图1-22 SiFive RISC-Ⅴ 2/3/5/7系列核及可以提供的特性
芯片设计公司可以跟SiFive授权一个配置和验证好的标准内核,也可以使用SiFive在云端的Core Designer来定制需要客制的处理器。所产生并交付的开发包可以提供源代码、FPGA参考代码跟配套软件,SiFive产品的特点是在每个季度都能推出新的特性,客户可以享受到更新的特性,像手机应用软件的更新一样方便。SiFive有一些现成配置的标准核,大部分都有对标ARM的内核,但嵌入式64位的S内核还没有ARM的对标产品,里面有一些独特的技术,因为64位宽得到较好的性能,特别适合SSD存储控制器的设计。E31内核专为低功耗、高性能的32位嵌入式应用设计,如边缘运算、智能物联网或可穿戴设备等。其性能与ARM Cortex M3或M4处理器大致相当,性能达到1.61 DMIPS/MHz。在28nm工艺可以到达1.5GHz的高速,内核面积只有0.026平方毫米,适用于物联网、可穿戴设备与嵌入式微控制器等领域,有很强的竞争力。
SiFive一直参与RISC-Ⅴ社区,建立独特的矢量扩展和矢量技术。Krste Asanović教授渴望开发一种用于计算机研究的开放体系架构,而关键领域之一就是矢量技术的研究。RISC-Ⅴ技术有很强的发展势头和增长空间,而且基础体系架构里的矢量扩展已经完全到位。SiFive矢量技术团队是由Krste Asanović教授领导的,作为RISC-Ⅴ矢量工作组主席,他不仅主持矢量扩展工作组,还在RISC-Ⅴ社区内共同推动矢量规范发展。SiFive已经为RISC-Ⅴ汇编器和RISC-Ⅴ Spike ISS纯软件指令集模拟器模型开发了矢量扩展。SiFive将这些工作作为内部项目,完成后再将它们贡献给开源社区,而SiFive智能处理器产品线是基于RISC-Ⅴ基础技术来构建的商业解决方案。
SiFive智能处理器是什么呢?首先,这是采用矢量智能(Vector Intelligence,VI)技术的RISC-Ⅴ内核IP组合,支持RISC-Ⅴ矢量(RVV)扩展。无论是软件还是硬件都是以高度可扩展的方式定义指令集架构。其中VI2系列内核作为最先推出的内核,可扩展并适用于各种市场。SiFive一直在开发真正满足客户需求的解决方案,特别是智能语音和音频市场,而且它一般适用于DSP、人工智能和通用计算应用程序。因此,它本质上是通用的8到32位宽整数、定点和浮点数据类型,它基于RISC-Ⅴ RVV-ISA矢量可扩展的SiFive微体系架构,而且它利用架构中内置的可伸缩性来提供矢量计算引擎可以执行的性能。实际上,SiFive分离了标量流水线和矢量流水线,给予单独的数据路径,并初始默认配置。
图1-23所示是SiFive智能处理器VI2系列内核的框图。VI2系列内核的一些性能参数,初始矢量单位默认配置是一个128位宽的数据路径。在32个寄存器架构中,每个寄存器具有512位矢量长度(VLEN)。实际上,用户可以通过LMUL将寄存器扩展到可处理长达4096位的矢量。需要强调的是,因为数据路径宽度、矢量寄存器长度、数据类型和其他参数是可配置的,所以需要有一个特定的初始默认配置。建立矢量技术的前提是要能够评估用户的代码运行状况,并对其进行调试和跟踪。而且,矢量技术要能直接用于SiFive现有的内核IP调试和跟踪硬件解决方案中,才可以轻松地与第三方工具配合使用。可见的矢量寄存器和控制寄存器是解决方案的一部分,所以SiFive先跟一些第三方供应商交流,它们已经在Freedom Studio工具中支持并显示出矢量寄存器和控制寄存器的格式。
SiFive公司从最早开源了简洁模块化的处理器内核,到成立公司提供商业处理器,将处理器与外设结合后流片,设计芯片配套开发板来证明处理器的正确性。SiFive所做的事情与RISC-Ⅴ的生态发展息息相关,SiFive公司跟所有的合作伙伴一起经营生态。生态越健康,SiFive才能成长得越快。RISC-Ⅴ如Linux操作系统一样开放,高效低能耗,没有专利或许可证方面的顾虑,而且允许企业添加自有指令集拓展而不必开放共享,具有根据自己的特定需求优化内核设计等诸多优点,吸引了无数业界人士的关注。此外,矢量技术在RISC-Ⅴ社区正在成为现实。2020年是RISC-Ⅴ的矢量之年,而且SiFive公司的计划使矢量技术成为现实,不仅投资于硬件,而且还有支持RISC-Ⅴ矢量扩展解决方案的软件,RISC-Ⅴ指令集架构的时代已经开启。
图1-23 SiFive智能处理器VI2系列内核框图