莲子有什么功效
基于RISC-V架构的开源处理器及SoC研究综述
本⽂作者:雷思磊,EETOP CPU 论坛版主,Urname:leishangwen,本⽂来⾃作者的博客,链接地址可以点击阅读原⽂查看
RISC-V是加州⼤学伯克利分校(University of California at Berkeley,以下简称UCB)设计并发布的⼀种开源指令集架构,其⽬标是成为指令集架构领域的Linux,应⽤覆盖IoT(Internet of Things)设备、桌⾯计算机、⾼性能计算机等众多领域。其产⽣是因为UCB的研究⼈员在研究指令集架构的过程中,发现当前指令集架构存在如下问题[1]。
(1)绝⼤多数指令集架构都是受专利保护的,⽐如:x86、MIPS、Alpha,使⽤这些架构需要授权,限制了竞争的同时也扼制了创新。
(2)当前的指令集架构都⽐较复杂,不适合学术研究,⽽且很多复杂性是因为⼀些糟糕的设计或者背负历史包袱所带来的。
(3)当前的指令集架构都是针对某⼀领域的,⽐如:x86主要是⾯向服务器、ARM主要是⾯向移动终端,为此对应的指令集架构针对该领域做了⼤量的领域特定优化,缺乏⼀个统⼀的架构可以适⽤多个领域。
(4)商业的指令集架构容易受企业发展状况的影响,⽐如:Alpha架构就随着DEC公司的被收购⽽⼏近消失。
(5)当前已有的各种指令集架构不便于针对特定的应⽤进⾏⾃定义扩展。
为此,UCB的研究⼈员Krste Asanovic、Andrew Waterman、Yunsup Lee决定设计⼀种新的指令级架构,并决定以BSD授权的⽅式开源,希望借此可以有更多创新的处理器产⽣、有更多的处理器开源,并以此降低电⼦产品成本[2]。RISC-V⾃2014年正式发布以来,受到了包括⾕歌、IBM、等在内的众多企业以及包括剑桥⼤学、苏黎世联邦理⼯⼤
学、印度理⼯学院、中国科学院在内的众多知名学府与研究机构的关注和参与,围绕RISC-V的⽣态环境逐渐完善,并涌现了众多开源处理器及SoC采⽤RISC-V,这些处理器既有标量处理器,也有超标量处理器,既有单核处理器,也有多核处理器,本⽂接下来将简单介绍RISC-V架构的基本设计,随后将详细描述⽬前采⽤RISC-V架构的开源处理器与SoC。
1 RISC-V简介1.1 RISC-V的基本设计
RISC-V是⼀个典型三操作数、加载-存储形式的RISC架构,包括三个基本指令集和6个扩展指令集,如表1所⽰,其中RV32E是RV32I的⼦集,不单独计算。
基本指令集的名称后缀都是I,表⽰Integer,任何⼀款采⽤RISC-V架构的处理器都要实现⼀个基本指令集,根据需要,可以实现多种扩展指令集,例如:如果实现了RV32IM,表⽰实现了32位基本指令集和乘法除法扩展指令集。如果实现了RV32IMAFD,那么可以使⽤RV32G来表⽰,表⽰实现了通⽤标量处理器指令集。本⽂只介绍RV32I的基本情况。
RV32I指令集有47条指令,能够满⾜现代运⾏的基本要求,47条指令按照功能可以分为如下⼏类。
(1)整数运算指令:实现算术、逻辑、⽐较等运算。
(2)分⽀转移指令:实现条件转移、⽆条件转移等运算,并且没有延迟槽。
(3)加载存储指令:实现字节、半字、字的加载、存储操作,采⽤的都是寄存器相对寻址⽅式。
(4)控制与状态寄存器访问指令:实现对系统控制与状态寄存器的原⼦读-写、原⼦读-修改、原⼦读-清零等操作。(5)系统调⽤指令:实现系统调⽤、调试等功能。
1.2 RISC-V的优势1.
2.1 与开源指令集架构⽐较
重介质在RISC-V发布之前,实际上已经有⼏种开源指令级架构,包括SPARC V8、OpenRISC,其中SUN发布的开源多核多
在RISC-V发布之前,实际上已经有⼏种开源指令级架构,包括SPARC V8、OpenRISC,其中SUN发布的开源多核多线程处理器OpenSparcT1、OpenSparcT2,以及欧空局的LEON3采⽤的就是SPARC V8,OpenRISC也有同名的开源处理器,在[2]中介绍了RISC-V与前两者的⽐较,如表2所⽰。此外,OpenRISC的许可证为GPL,这意味着所有的指令集改动都必须开源。⽽RISC-V的许可证是较为宽松的BSD Licen授权。
1.2.2 与商业指令集架构⽐较
UCB的研究⼈员设计了⼀款采⽤RISC-V指令集架构的开源处理器Rocket,并且已经成功流⽚了11次,其中采⽤台积电40nm⼯艺时的性能与采⽤同样⼯艺的,都是标量处理器的ARM Cortex-A5的性能对⽐如表3所⽰。可见Rocket占⽤更⼩的⾯积,使⽤更⼩的功耗,但是性能却更优。
2 基于RISC-V的开源处理器研究现状
⽬前基于RISC-V的开源处理器有很多,既有标量处理器Rocket,也有超标量处理器BOOM,还有⾯向领域的Z-scale、PicoRV32等。
2.1 标量处理器——Rocket
Rocket是UCB设计的⼀款64位、5级流⽔线、单发射顺序执⾏处理器,主要特点有:
•
⽀持MMU,⽀持分页虚拟内存,所以可以移植Linux操作系统
•
具有兼容IEEE 754-2008标准的FPU
•
具有分⽀预测功能,具有BTB(Branch Prediction Buff)、BHT(Branch History Table)、RAS(Return Address Stack)
Rocket是采⽤Chil(Constructing Hardware in an Embedded Language)编写的,这也是UCB设计的⼀种开源的硬件编程语⾔,是Scala语⾔的领域特定应⽤,可以充分利⽤Scala的优势,将⾯向对象(object orientation)、函数式编程(functional programming)、类型参数化(parameterized types)
、类型推断(type inference)等概念引⼊硬件编程语⾔,从⽽提供更加强⼤的硬件开发能⼒。Chil除了开源之外,还有⼀个优势就是使⽤Chil编写的硬件电路,可以通过编译得到对应的Verilog设计,还可以得到对应的C++模拟器。Rocket使⽤Chil编写,就可以很容易得到对应的软件模拟器。同时,因为Chil是⾯向对象的,所以Rocket的很多类可以被其他开源处理器、开源SoC直接使⽤。
Rocket已经被流⽚11次之多,其性能⽐较参考前⽂表3。
2.2 超标量乱序执⾏处理器——BOOM
BOOM(Berkeley Out-of-Order Machine)是UCB设计的⼀款64位超标量、乱序执⾏处理器,⽀持RV64G,也是采⽤Chil编写,利⽤Chil的优势,只使⽤了9000⾏代码,流⽔线可以划分为六个阶段:取指、译码/重命名/指令分配、发射/读寄存器、执⾏、访存、回写。
借助于Chil,BOOM是可参数化配置的超标量处理器,可配置的参数包括:
•
取指、译码、提交、指令发射的宽度
•
重排序缓存ROB(Re-Order Buffer)、物理寄存器的⼤⼩
•
取指令缓存、RAS、BTB、加载、存储队列的深度
•
有序发射还是⽆序发射
•
L1 cache的路数
•
MSHRs(Miss Status Handling Registers)的⼤⼩
•
是否使能L2 Cache许怀哲
UCB已经在40nm⼯艺上对BOOM进⾏了流⽚,结果如表4所⽰。可见BOOM与商业产品ARM Cortex-A9的性能要略优,体现在⾯积⼩、功耗低。
2.3 处理器家族——SHAKTI
SHAKTI[4]是印度理⼯学院的⼀个计划,⽬标是设计⼀系列适合不同应⽤环境的、基于RISC-V的开源处理器,以及⼀些IP核,以便搭建SoC。这些处理器是E-Class、C-Class、I-Class、M-Class、S-Class、H-Class、T-Class、N-Class,⽬前已经开源的是前三个,使⽤Bluespec System Verilog编写。
膝盖上面疼•
E-Class:32位标量处理器,3级流⽔线,⽀持RISC-V的C(Compress)扩展,⽬标是超低功耗处理器。
•
C-Class:32位或者64位标量处理器,3-8级流⽔线,⽀持MMU、具有容错功能、⽀持RISC-V的C扩展,⽬标也是超低功耗处理器。
•
I-Class:64位、1-8核,乱序执⾏处理器,共享L2 Cache、⽀持双线程、SIMD/VPU,⽬标是通⽤处理器。
•
M-Class:I-Class的增强版,增加了指令发射⼤⼩、⽀持四线程、最⾼⽀持16核,⽬标是通⽤处理器、低端服务器和移动应⽤。
•
S-Class:64位、超标量多线程处理器,⽀持L3 Cache、RapidIO、HMC(Hybrid Memory Cube)、向量处理单元,还有协处理器⽤于数据库访问、加密算法、机器学习,最⾼⽀持64核,⽬标是通⽤处理器、服务器。
•
H-Class:64位、32-128核、⽀持多线程、顺序或者乱序执⾏处理器,具有向量处理单元,⽬标是⾼性能计算。
•
卡通人物素描
T-Class:64或者128位处理器,其中通过为存储器引⼊Tag,从⽽增强其安全性。
•
N-Class:⽬标是通过⾃定义的扩展进⾏⽹络数据处理。
2.4 嵌⼊式应⽤处理器——ORCA
PicoRV32是由VectorBlox公司设计的⼀款32位标量处理器,⽬标是应⽤于嵌⼊式领域,采⽤VHDL编写,实现了
RV32IM,也可以移除其中的M扩展,也就是移除乘法除法扩展,从⽽减少芯⽚占⽤资源,甚⾄可以移除与定时器有关的指令,从⽽仅仅实现RV32E。当将ORCA作为⼀个软核下载到FPGA上的时候,其资源占⽤与主频如表5所⽰。
2.5 其他开源处理器
(1)RI5CY
RI5CY是由苏黎世联邦理⼯⼤学和波罗尼亚⼤学联合设计的⼀款⼩巧的4级流⽔线开源处理器,实现了
钻组词语
RV32IC,以及RV32M中乘法指令mul,其⽬标是作为并⾏超低功耗处理器项⽬PULP(Parallel Ultra Low Power)的处理器核,所以RI5CY在RISC-V的基础上增加了许多扩展,包括硬件循环、乘累加、⾼级算术指令等。采⽤UMC的65nm⼯艺进⾏流⽚,RI5CY主频可以达到654MHz,动态功耗是17.5uW/MHz[6]。采⽤SystemVerilog编写。
(2)RIDECORE
RIDECORE (RIsc-v Dynamic Execution CORE) 是由东京⼯业⼤学设计发布的⼀款超标量乱序执⾏处理器,实现了RV32IM,6级流⽔线,分别是取指、译码、指令分配、发射、执⾏、提交,可以同时取两条指令、对两条指令译码、提交两条指令。采⽤的是Gshare分⽀预测机制。
(3)Hwacha
Hwacha是由UCB开发的⼀款向量处理器,UCB将Hwacha作为RISC-V的⼀个⾮标准扩展Xhwacha,已经以28nm和45nm的⼯艺流⽚多次,主频在1.5GHz以上,⽬前还在研发中,正在修改OpenCL的编译器,以适合Hwacha,UCB计划以开源的形式发布其代码。
(4)f32c
好听的英语昵称f32c是由萨格勒布⼤学设计发布的32位、5级流⽔线、标量处理器,原本实现的是MIPS指令集,后来
添加实现了RISC-V指令集,处理器包括分⽀预测、直接映射缓存,同时发布的还有SDRAM控制器、SRAM控制器、视频FrameBuffer、SPI控制器、UART、GPIO等IP,使⽤VHDL编写代码。使⽤f32c处理器核,萨格勒布⼤学发布了FPGArduino项⽬,该项⽬将⼀块FPGA开发板变为⼀个Arduino板,并且可以使⽤Arduino IDE进⾏程序编译下载。
(5)Z-scale/V-scale
reviewsZ-scale是UCB发布的针对嵌⼊式环境的32位、3级流⽔线、单发射标量处理器,实现了RV32IM,指令总线和数据总线都是AHB-Lite。Z-scale采⽤是Chil编写代码,利⽤Rocket中的代码,仅增加了604⾏代码就实现了Z-scale。V-scale 是Z-scale对应的Verilog版本。
(6)sodor
sodor是UCB发布的针对教学的32位开源处理器系列,采⽤Chil编码实现,可以很容易的得到对应的C++模拟器。sodor系列有五种处理器,分别是单周期处理器、2级流⽔线处理器、3级流⽔线处理器、5级流⽔线处理器、可执⾏微码的处理器。
(7)PicoRV32
PicoRV32是由RISC-V开发者Clifford Wolf设计发布的⼀款⼤⼩经过优化的开源处理器,实现了RV32I
MC,并且根据不同环境可配置为实现RV32E、RV32I、RV32IC、RV32IM、RV32IMC。内置⼀个可选择的中断控制器。其特点是⼩巧,在Xilinx7系列芯⽚上占⽤750-2000个LUT,速度可以达到250-400MHz。PicoRV32采⽤Verilog编写代码。
(8)Tom Thumb
(8)Tom Thumb
Tom Thumb是由RISC-V开发者maikmerten设计发布的⼀款32位、6级流⽔线开源处理器,实现了RV32I,⽬标是尽量减少FPGA的资源占⽤,在Cyclone IV系列FPGA上⼤约占⽤资源1200 LEs。采⽤VHDL编写代码。
(9)FlexPRET
FlexPRET[7]是由UCB设计发布的5级流⽔线、多线程处理器,⽬标是使⽤在实时嵌⼊式应⽤中,线程数量可配置为1-8。为了提⾼嵌⼊式处理器的资源利⽤率,每个硬件线程被标记为硬实时(hard real-time thread)或者软实时(soft real-time thread),硬实时线程按照固定的频率被调度,如果当前没有硬实时线程可调度,再调度软实时线程。使⽤Chil编写代码。
(10)YARVI
YARVI(Yet Another RISC-V Implementation)是由RISC-V开发者Tommy Thorn设计发布的⼀款简单的、32位开源处理器,实现了RV32I,使⽤Verilog作为开发语⾔。其出发点不在于性能,⽽是要能够清晰、准确的实现RV32I。
3 基于RISC-V的开源SoC研究现状3.1 Rocket-Chip
UCB为了⽅便⽤户学习,同时也为了便于重复使⽤已设计好的硬件模块,在GitHub上建⽴了Rocket-Chip Generator的项⽬,其中包括了Chil、GCC、Rocket处理器,以及围绕Rocket的⼀系列总线单元、外设、缓存等,并且采⽤了参数化的配置⽅法,从⽽可以⽅便的创建不同性能要求的基于Rocket处理器的SoC。采⽤Chil编写,主要的⼦模块如下。
•
Chil:UCB设计的开源硬件编程语⾔。
•
Hardfloat:参数可配置的、兼容IEEE 754-2008标准的浮点单元。
•
Riscv-tools:开发⼯具,包括GCC、Newlib,以及移植的Linux。
•
Rocket:Rocket处理器,包括L1 Cache。
•
Uncore:实现了需要与Rocket紧密连接的功能单元,⽐如L2 Cache、L1 Coherence Hub等。
•
Juntions:实现了不同协议的接⼝之间的转换。
•
Rocketchip:顶层模块,同时也实现了内部总线TileLink向外部总线AXI或者AHB的转换。
前⽂介绍的BOOM、Z-scale都可以通过配置Rocket-Chip的不同参数得到。
3.2 LowRISC
LowRISC是由剑桥⼤学为主的⼀些研发⼈员成⽴的⾮营利性组织,主要是设计发布基于RISC-V指令集的64位开源SoC,其成员有树莓派的合作者,所以其⽬标是希望将设计的SoC做成类似于树莓派那样价格便宜、功能丰富、拥有⼤量⽤户的开源硬件。LowRISC发布的SoC的名称也是LowRISC,是在Rocket-Chip的基础上改进开发的,采⽤System Verilog编写改进部分的代码。主要特点是: