指令集作为软硬件之间的接口规范,是信息技术生态的起始原点.RISC-V是计算机体系结构走向开放的必然产物,其出现为系统研究领域带来了新的思路,即系统软件问题的研究深度可以进一步向下延伸至指令集架构,从而拓展甚至颠覆软件领域的“全栈”概念.对近年来RISC-V指令集架构相关的研究成果进行了综述.首先介绍了RISC-V指令集的发展现状,指出开展RISC-V研究应重点关注的指令集范围.然后分析了RISC-V处理器设计要点和适用范围.同时,围绕RISC-V系统设计问题,从指令集、功能实现、性能提升、安全策略这4个方面,论述了RISC-V处理器基本的研究思路,并分析了近年来的研究成果.最后借助具体的研究案例,阐述了RISC-V在领域应用的价值,并展望了RISC-V架构后续研究的可能切入点和未来发展方向.
ISA (instruction set architecture) is the interface specification between software and hardware, which is also the origin point of an information technology ecosystem. RISC-V is the inevitable product of computer architecture gradually moving towards openness. It brings a new paradigm for system research, i.e. software research issues can be tracked down to ISA, which expands or even subverts the traditional full-stack design theory on the system function, performance, security and other issues, showing a promising development prospect. This paper reviews the research results of RISC-V architecture in recent years. Firstly, the development status of RISC-V instruction set is introduced, and the scope of instruction set that should be paid attention to in RISC-V research is pointed out. Then, the current RISC-V CPU platforms, particularly RISC-V processors are analyzed, and the design points and application scope are summarized. Then, focusing on the design of RISC-V CPU, this paper discusses four fundamental research topics: instruction set, function implementation, performance improvement and security strategy, and reviews some research results in recent years. Finally, with the help of some specific cases, this paper expounds the role of risc-v in specific domains, analyzes the possible future directions of RISC-V research.
现代信息系统的设计正在出现几个新的趋势: (1) 注重软硬件协同的设计模式.例如, 英伟达公司推出CUDA通用并行计算架构[
RISC-V是一种新兴的开源精简指令集架构, 由加州大学伯克利分校在2010年首次发布[
因此, 对于RISC-V的研究已成为近年来学术界和工业界的一大热点, 涌现了许多突破性成果, 如西部数据公司研发的基于RISC-V的通用架构SweRV[
RISC-V作为一种指令集架构, 一方面, 它规定了硬件设备在设计电路、组装元件时应当实现的功能目标; 根据指令集的内容, 决定运算单元、存储单元等元件的种类、数目、位宽及接线方式.另一方面, 它是对硬件能力的一种抽象, 提供了机器所能完成的操作种类、地址空间大小、数据格式、访问权限信息; 上层软件应用可以将指令集视为硬件运行环境, 而无需特别关注具体的硬件实体.
系统对应用程序代码的翻译和执行过程
The translation and execution process of application code
对于RISC-V的研究将至少着眼于4个层面中的一个: 对于底层RISC-V硬件的研究、对于RISC-V指令集自身的研究、对于上层RISC-V系统(主要是基础软件)的研究, 对于顶层应用的研究.而在研究内容上, 普遍集中在系统或应用的功能、性能、安全这3个方面.本文围绕RISC-V体系结构设计过程和主要关注点, 从上述4个层面对相关研究进行了总结.这些研究工作均来源于对DBLP文献数据库的检索, 共涉及126篇论文文献(截至2021年7月).从论文发表的期刊和会议看, 有65篇来自CCF-A类期刊或会议中, 占比超过50%;有104篇发表在计算机体系结构领域的期刊或会议中, 占比超过82%, 其余22篇论文分别发表在网络与信息安全、软件工程、系统软件等领域的期刊或会议中.对这些RISC-V研究工作的分布统计见
主要研究成果来源分布
Source distribution of major research results
期刊/会议名称 | CCF级别 | 参考文献数目 |
Design, Automation & Test in Europe (DATE) | B | 23 |
Design Automation Conf. (DAC) | A | 13 |
Int’l Symp. on Computer Architecture (ISCA) | A | 12 |
Int’l Conf. on Architectural Support for Programming Languages and Operating Systems (ASPLOS) | A | 7 |
IEEE Trans. on Computer-aided Design of Integrated Circuits and System (TCAD) | A | 6 |
Int’l Conf. on Cryptographic Hardware and Embedded Systems (CHES) | B | 6 |
IEEE/ACM Int’l Symp. on MICROarchitecture (MICRO) | A | 5 |
ACM/SIGDA Int’l Symp. on Field-programmable Gate Arrays (FPGA) | B | 5 |
USENIX Security Symp. | A | 5 |
IEEE Trans. on Computers (TC) | A | 4 |
IEEE Trans. on Very Large Scale Integration Systems (TVLSI) | B | 4 |
Int’l Conf. on Computer Design (ICCD) | B | 4 |
Int’l Conf. on Parallel Processing (ICPP) | B | 4 |
ACM Conf. on Computer and Communications Security (CCS) | A | 3 |
ACM Symp. on Operating Systems Principles (SOSP) | A | 3 |
ACM Trans. on Architecture and Code Optimization (TACO) | B | 2 |
ACM Trans. on REconfigurable Technology and Systems (TRETS) | B | 2 |
Int’l Test Conf. (ITC) | B | 2 |
ACM SIGPLAN Conf. on Programming Language Design & Implementation (PLDI) | B | 2 |
IEEE Trans. on Parallel and Distributed Systems (TPDS) | A | 1 |
ACM Trans. On Design Automation of Electronic Systems (TODAES) | A | 1 |
ACM Trans. on Embedded Computing Systems (TECS) | B | 1 |
Journal of Systems Architecture: Embedded Software Design (JSA) | B | 1 |
High Performance Computer Architecture (HPCA) | A | 1 |
Int’l Conf. for High Performance Computing, Networking, Storage, and Analysis (SC) | A | 1 |
Code Generation and Optimization (CGO) | B | 1 |
European Conf. on Computer Systems (EuroSys) | B | 1 |
Int’l Conf. on High Performance and Embedded Architectures and Compilers (HiPEAC) | B | 1 |
Int’l Parallel & Distributed Processing Symp. (IPDPS) | B | 1 |
Int’l Symp. on High Performance Distributed Computing (HPDC) | B | 1 |
ACM SIGPLAN-SIGACT Symp. on Principles of Programming Languages (POPL) | A | 1 |
USENIX Symp. on Operating Systems Design and Implementations (OSDI) | A | 1 |
IEEE Symp. on Security and Privacy (S & P) | A | 1 |
本文第1节介绍RISC-V相关概念及其优势, 并对本文结构进行概述.第2节回顾近年来对于RISC-V指令集的研究, 包括对于各指令集扩展现状的分析.第3节总结处理器、加速器等支持RISC-V系统的硬件工作环境.第4节讨论各种RISC-V系统的设计及其要点.第5节介绍一些利用RISC-V实现性能、安全提升的应用案例.第6节展望RISC-V架构未来可能的发展方向和研究点.最后在第7节对本文内容进行总结.
RISC-V的指令集包括基础指令集和扩展指令集两类.RISC-V指令集架构被定义为一个基础指令集和若干可选扩展指令集的组合, 并在一种权限模式下进行工作.本节对RISC-V各指令集的当前状态进行了总结和分析, 并简要介绍了RISC-V的权限规则.
RISC-V的基础指令集包含了能够为编译器、汇编器、链接器、操作系统(结合额外的特权操作)等提供必要功能实现的最小指令集合.它们是构筑ISA和软件工具链的骨架, 可以围绕它们来构建更多定制的处理器ISA.根据最新的RISC-V规范[
RV32I指令集和RV64I指令集都使用32个通用寄存器(x寄存器)和一个额外的非特权寄存器(pc寄存器), 如
RISC-V整数指令集(RV32I/RV64I)的寄存器状态[
Register status of RV32I/RV64I[
通用寄存器x1~x31理论上可以用于各种用途, 但是根据标准调用约定[
标准调用约定下的各x寄存器含义
The meaning of each x register in standard calling convention
寄存器名 | ABI助记符 | 含义 | 是否跨调用保留 |
x0 | zero | 0 | −(不可变) |
x1 | ra | 返回地址 | 否 |
x2 | sp | 栈指针 | 是 |
x3 | gp | 全局指针 | −(不允许) |
x4 | tp | 线程指针 | −(不允许) |
x5~x7 | t0~t2 | 临时寄存器 | 否 |
x8~x9 | s0~s1 | 被调用者保存 | 是 |
x10~x17 | a0~a7 | 参数寄存器 | 否 |
x18~x27 | s2~s11 | 被调用者保存 | 是 |
x28~x31 | t3~t6 | 临时寄存器 | 否 |
RV32I有4种基础指令格式: R/I/S/U, 指令集中的任何指令都可以根据操作数的数量、种类、规模以及自身的功能需求, 选用其中一种格式.所有这些指令格式都是32位固定长度, 并且必须在内存中对齐到4字节的边界.
RV32I的4种基础指令格式[
Four basic instruction formats of RV32I[
RV64I采用与RV32I相同的指令格式, 只是将整数寄存器和所支持的用户地址空间扩展到了64位, 增加了一些操作低32位的“*W”指令.例如, RV32I中的ADDI指令可以将符号扩展的12位立即数加到寄存器中, 并将计算结果的低XLEN位(即低32位)作为指令的执行结果, 忽略计算溢出.RV64I沿用了该指令, 但寄存器和执行结果都被扩展到64位.同时RV64I新增了ADDIW指令, 用以产生32位的计算结果, 再将其符号扩展至64位并忽略计算溢出.
RV32E是专为嵌入式环境设计的指令集, 是对RV32I指令集的一种简化.根据RISC-V规范[
RV32E的寄存器状态[
Register status of RV32E[
由于寄存器数目不同, 适用于RV32I的标准调用约定与RV32E并不兼容.RV32E需要与之不同的调用约定和ABI(application binary interface, 应用程序二进制接口), 但目前还没有这方面较为统一而稳定的标准.作为临时的解决方案, RISC-V规范提供了一种专用于RV32E的调用约定ILP32E, 它要求栈指针对齐只能到32位边界; 而在寄存器的分配上, 采用与RV32I一致的分配方案.例如, 在高性能开源RISC-V微控制器核心SCR1[
RV128I是一个用于支持128位地址空间的指令集.根据RISC-V规范中的预测, 随着计算需求的增长和技术的不断演进, 很可能会在2030年之前就会需要超过64位的地址空间[
RV128I是对RV32I和RV64I的直接外扩, 仅仅是把整数寄存器宽度扩展到了128位(XLEN=128).由于大部分整数运算指令在XLEN位上定义, 所以无需变化.此外, RV128I保留了RV64I中用于操作低32位的“*W”指令, 只是把结果从32位符号扩展到128位; RV128I还新增了用于操作低64位的“*D”指令.
RVWMO指令集定义了RISC-V的内存一致性模型.内存一致性模型是一组规则的集合, 指定了内存的load操作所能返回的结果.RVWMO内存模型属于弱内存次序的, 即在一个多线程程序有许多种不同可能的执行, 而每种执行有其自己相应的全局内存次序.这里的“全局内存次序”是指所有硬件线程所产生的内存操作的总体次序.
RVWMO指令集为加载(load)和存储(store)等内存操作提供了一组内存模型原语, 用于对相关指令进行标注.
RVWMO指令集对内存操作指令的标注
Annotations of memory access instructions in RVWMO
与处理器一致 | 顺序一致 | |
加载 | acquire-RCpc | acquire-RCsc |
释放 | release-RCpc | release-RCsc |
RVWMO内存模型的定义基于依存句法(syntactic dependency)的概念, 即, 指令的源寄存器、目的寄存器, 和指令从源寄存器到目的寄存器含有依赖的方式.对于不同的RISC-V指令集中的不同指令, 会有各自不同的依存句法.
RVWMO对程序的执行提出了次序上的要求, 即, 全局内存次序需要遵循着各个硬件线程的内存次序中的一部分(但不是所有).这部分必须被遵循的次序子集被称为“保留的程序次序”.
内存模型原语、各指令的依存句法和保留的程序次序, 以及基于这些内容的3条公理[
RISC-V的扩展指令集用于为ISA提供特定方面的功能操作指令.一个ISA可以选择加入多个扩展指令集.而为了使多个指令集能够共存, 各指令集的编码空间均按照RISC-V国际基金会(RVI)的编码要求进行了划分, 以避免冲突.现有的RISC-V扩展指令集主要有以下24种.
(1) 乘法和除法扩展(M扩展): 用于将两个整数寄存器中的值进行相乘或相除.具体包含了MUL、DIV、REM等指令及对应于无符号数操作或64位操作相关的各种变体指令.
(2) 原子指令扩展(A扩展): 用于支持相同内存空间中的多个硬件线程间的同步.主要包含了对内存进行原子性读取、修改、写入的指令.
(3) 单精度浮点扩展(F扩展): 用于支持单精度浮点运算.添加了兼容IEEE 754-2008算术标准[
(4) 双精度浮点扩展(D扩展): 用于支持双精度浮点运算.它依赖于F扩展, 需要与F扩展共同使用.D扩展添加了兼容IEEE 754-2008算术标准的双精度浮点运算指令, 并把浮点寄存器f0~f31拓宽到64位.
(5) 四精度浮点扩展(Q扩展): 用于支持四精度浮点运算.它依赖于D扩展, 需要与D扩展和F扩展共同使用.Q扩展添加了兼容IEEE 754-2008算术标准[
(6) 压缩指令扩展(C扩展): C扩展增加了一些16位的短指令编码, 用于替代对应的某些32位常见操作指令, 以减少静态和动态的代码尺寸.它还移除了原始32位指令上的32位对齐限制, 允许指令可以从任何16位边界开始, 从而显著提高了代码密度.
(7) 计数器指令扩展(Counters扩展): Counters扩展提供了至多32个64位计数器或计时器, 可以通过特定的只读CSR寄存器0xC00-0xC1F进行访问.其中, 前3个计数器为专用计数器, 分别用于循环计数(CYCLE)、实时时钟(TIME)和过时指令(INSTRET); 其余的计数器可用于程序事件的计数.
(8) 十进制浮点扩展(L扩展): 用于支持IEEE 754-2008标准[
(9) 位操作扩展(B扩展): 用于支持位操作.主要包括了插入、提取、测试位域的指令, 以及移位、位与字节置换等操作指令.该扩展尚未进入实质性的设计阶段.
(10) 动态翻译语言扩展(J扩展): 用于支持动态翻译语言.该扩展注意到, 许多流行的语言都采用动态翻译的方式实现, 如Java和JavaScript.因此希望引入一些指令, 从ISA层面支持这些语言的动态检测、垃圾回收等行为, 从而获得收益.该扩展尚未进入实质性的设计阶段.
(11) 事务内存扩展(T扩展): 用于支持事务内存操作.T扩展将设立一个小型的、容量有限的事务内存缓冲区, 以支持涉及多个地址的原子性操作.该扩展尚未进入实质性的设计阶段.
(12) 组合单指令多数据流(packed single instruction multiple data, 简称Packed SIMD)指令扩展(P扩展): 用于支持小型RISC-V实现中的组合SIMD定点操作.该扩展曾被认为可以由V扩展上的大型浮点SIMD操作标准化代替, 而几近废弃; 但考虑到小型RISC-V的实际需要而得以保留, 并开始设计和定义新的P扩展.
(13) 向量操作扩展(V扩展): 用于支持32位指令编码空间中的数据并行执行功能.该扩展增强了处理器的SIMD操作, 引入了一组向量寄存器和向量操作指令, 允许将相同的操作应用于大批量的数据元素之中, 使RISC-V系统的数据处理能力发生质变, 同时保持指令代码的精简性.
(14) 控制和状态寄存器扩展(Zicsr扩展): RISC-V定义了一个独立的地址空间, 包含与各硬件线程相关的4 096个控制与状态寄存器(control and status register, 简称CSR).Zicsr扩展即提供了在此空间中操作CSR指令的完整集合.
(15) 屏障扩展(Zifencei扩展): 仅含有一条FENCE.I指令, 用于提供相同硬件线程上写指令内存与指令获取之间的显式同步.
(16) 非对齐原子操作扩展(Zam扩展): 用于对非对齐的原子内存操作(atomic memory operation, 简称AMO)提供标准化支持.它是对A扩展的扩展, 使AMO只需要针对具有相同地址和相同尺寸的其他访问(包括非原子性的加载和存储)进行原子化执行即可.
(17) 全存储排序扩展(Ztso扩展): 用于支持“全存储排序”[
(18) 提示暂停扩展(Zihintpause扩展): 用于指示当前硬件线程应当放缓指令的失效率.目前仅包含一条PAUSE指令, 并且不会引起架构相关状态的更改.
(19) 半精度浮点扩展(Zfh扩展): 用于支持半精度浮点运算.添加了兼容IEEE 754-2008算术标准[
(20) 半精度浮点最小集扩展(Zfhmin扩展): 是Zfh扩展的一个子集, 仅包含了数据转移转化相关的指令, 主要用于支持半精度数据的存储、以及执行更高精度的运算.与Zfh扩展一样, 它也依赖于F扩展, 需要与F扩展共同使用.
(21) 整数寄存器单精度浮点扩展(Zfinx扩展): 用于支持在整数寄存器中进行单精度浮点运算.指令功能与F扩展相似, 只是操作数来自于整数寄存器而非浮点寄存器, 而且不含FLW、FSW、FMV等转移指令.
(22) 整数寄存器双精度浮点扩展(Zdinx扩展): 用于支持在整数寄存器中进行双精度浮点运算.与D扩展类似, 只是操作数来自于整数寄存器而非浮点寄存器.它依赖于Zfinx扩展, 需要与Zfinx扩展共同使用.
(23) 整数寄存器半精度浮点扩展(Zhinx扩展): 用于支持在整数寄存器中进行半精度浮点运算.与Zfh扩展类似, 只是操作数来自于整数寄存器而非浮点寄存器.它依赖于Zfinx扩展, 需要与Zfinx扩展共同使用.
(24) 整数寄存器半精度浮点最小集扩展(Zhinxmin扩展): 是Zhinx扩展的一个子集, 与Zfhmin扩展的功能及定位类似.与Zhinx扩展一样, 它也依赖于Zfinx扩展, 需要与Zfinx扩展共同使用.
此外, RISC-V系统设计者还可以根据实际需要, 制定其他自定义扩展指令集, 并将其加入指令集架构中.
RISC-V指令集需要经过RISC-V国际基金会下属的技术工作组审批, 成为被批准的稳定版本, 才能作为一种统一的规范和标准, 供软件开发人员和硬件供应商们使用.尚未被批准的指令集可能处于“草案”或“冻结”状态: 草案状态的指令集随时有改动的可能, 是指令集研究中最活跃的部分; 冻结状态的指令集虽然还未被批准, 但在批准之前预计也不应有太显著的改动[
各RISC-V指令集的当前审批状态
The current approval status of each RISC-V instruction set
类别 | 指令集 | 内容 | 当前版本 | 审批状态 |
基本指令集 | RVWMO | 弱内存次序 | 2.0 | 已批准 |
RV32I | 32位整数 | 2.1 | 已批准 | |
RV64I | 64位整数 | 2.1 | 已批准 | |
RV32E | 32位嵌入式整数 | 1.9 | 草案 | |
RV128I | 128位整数 | 1.7 | 草案 | |
扩展指令集 | M | 乘法和除法 | 2.0 | 已批准 |
A | 原子指令 | 2.1 | 已批准 | |
F | 单精度浮点 | 2.2 | 已批准 | |
D | 双精度浮点 | 2.2 | 已批准 | |
Q | 四精度浮点 | 2.2 | 已批准 | |
C | 压缩指令 | 2.0 | 已批准 | |
Counters | 计数器和计时器 | 2.0 | 草案 | |
L | 十进制浮点 | 0.0 | 草案 | |
B | 位操作 | 0.0 | 草案 | |
J | 动态翻译语言 | 0.0 | 草案 | |
T | 事务内存 | 0.0 | 草案 | |
P | 组合SIMD指令 | 0.2 | 草案 | |
V | 向量操作 | 1.0-rc | 草案 | |
Zicsr | 控制和寄存器 | 2.0 | 已批准 | |
Zifencei | 屏障指令 | 2.0 | 已批准 | |
Zihintpause | 提示暂停 | 2.0 | 已批准 | |
Zam | 非对齐原子操作 | 0.1 | 草案 | |
Zfh | 半精度浮点 | 0.1 | 草案 | |
Zfhmin | 半精度浮点最小集 | 0.1 | 草案 | |
Zfinx | 整数寄存器单精度浮点 | 1.0.0-rc | 冻结 | |
Zdinx | 整数寄存器双精度浮点 | 1.0.0-rc | 冻结 | |
Zhinx | 整数寄存器半精度浮点 | 1.0.0-rc | 冻结 | |
Zhinxmin | 整数寄存器半精度浮点最小集 | 1.0.0-rc | 冻结 | |
Ztso | 全存储排序 | 0.1 | 冻结 |
根据
RISC-V指令集架构必须工作在一种确定的权限模式下.根据RISC-V权限规范[
RISC-V通过CSR来控制当前的权限模式.通过设置CSR中特定2位的值, 可以切换到不同的模式.具体取值见
RISC-V特权级模式设置
RISC-V privilege mode settings
等级 | CSR[9:8]编码 | 含义 | 备注 |
0 | 00 | U模式 | |
1 | 01 | S模式 | |
2 | 10 | H模式 | 保留用 |
3 | 11 | M模式 |
机器模式是RISC-V指令集架构中最高级别的权限模式, 具有执行任何机器操作的权限, 也是在系统设计中必须被实现的一个工作模式.相比之下, U/S/H等其他权限模式都是可选的, 不同的系统可以根据运行环境和实际需要, 决定是否支持实现某一级别的权限模式.
用户模式是RISC-V特权系统中最低级别的权限模式, 又被称作“非特权模式”.它通常用于执行来自用户等外部环境的不可信操作, 通过对其操作范围的限制来保护系统内的各种资源不受侵害.
管理模式具有比用户级更高的操作权限, 可以用于操作一台机器中的敏感资源.RISC-V管理模式需要与机器模式和用户模式共同实现, 因此, 不能出现系统中只存在S模式而不存在U模式的情况.
监视模式可用于管理跨机器的资源, 或者将机器整体作为组件承担更高级别的任务.如, H模式可以协助实现一台机器系统的虚拟化操作.
RISC-V权限规范[
RISC-V中各权限模式的执行范围[
Execution range of different privilege modes in RISC-V[
RISC-V指令集架构正处于发展的活跃期, 针对不同的应用环境提出了多种不同的指令集.RISC-V指令集有基础指令集与扩展指令集之分, 一个RISC-V系统需要至少完整实现一个基础指令集, 并在一种权限模式中进行工作.对于指令集本身的研究是推动RISC-V发展的核心问题, 所有指令集都需要经过批准才能成为统一而稳定的标准.目前尚有17个指令集未被批准, 其中12个处于草案状态, 5个处于冻结状态.
另外, 在RISC-V指令集发展过程中, 还出现了一些其他的研究和尝试.如, 2020年, Multanen等人[
RISC-V依托的硬件平台可以含有如下组件.
(1) 带有其他非兼容RISC-V核心(如, IP Core)的一个或多个兼容RISC-V的处理核心.
(2) 固定功能加速器——这里加速器是指一种不可编程的固定功能单元, 或者专用于特定任务的核心.
(3) 各种物理内存结构.
(4) I/O设备.
(5) 组件通信与交互结构.
从系统的角度看, 这些硬件平台组件可以有多种组织形式, 从单核心的微控制器到包含数千个节点的集群(每个节点都是一个共享内存的多核心服务器); 甚至可以在小型片上系统(system-on-a-chip, 简称SoC)中组织成多层多处理器结构, 来协助模块化开发或者提供子系统间的安全隔离.
RISC-V处理器是RISC-V硬件平台的主要研究对象, 它可以提供相对全面的组件功能和真实的RISC-V执行环境.此外, RISC-V模拟器能够在软件平台上模拟硬件执行环境, 因此虽然自身属于上层RISC-V体系, 但在研究中也应被视为RISC-V硬件平台的范围.本节将对RISC-V处理器和模拟器方面的主要研究成果进行介绍, 并总结其特征和适用性.
处理器的设计需要考虑如下问题.
(1) 所支持的指令集.这代表了该处理器能够完成的功能范围, 并包含了对于指令执行通路的需求.
(2) 组成指令执行通路的组件.包括算术逻辑单元(arithmetic and logic unit, 简称ALU)、程序计数器(program counter, 简称PC)、寄存器组、缓存和存储单元等.
(3) 指令的处理方式.包括控制信号、时钟周期、指令流水线等, 以及由此衍生出的任务调度、中断/陷入/异常问题的处理、数据同步等问题.
(4) 对于多核心处理器, 还应考虑核心结构(同构或异构)、核间通信等方面的设计.
根据应用场景的不同, RISC-V处理器可以划分为通用处理器、嵌入式处理器、教学研究用处理器.通用处理器不针对特定应用场景, 因此将支持最全的RISC-V指令集和最多的功能, 如SiFive公司在2016年推出的64位单发射五级流水线顺序处理器Rocket[
经RISC-V社区统计[
12种典型的通用RISC-V处理器
Twelve representative general-purpose RISC-V processors
处理器 | 开发者 | 位数 | 指令集 | 设计语言 | 许可证 | 描述 |
Rocket[ |
SiFive, UCB Bar | RV32 | 2.3-draft | Chisel | BSD | 顺序核心, 工具链成熟, 应用广泛 |
freedom[ |
SiFive | RV32, RV64 | 2.3-draft | Chisel | BSD | 用于Freedom E310 Arty FPGA平台 |
BOOM[ |
UCB Bar | RV64 | 2.3-draft | Chisel | BSD | Rocket的乱序版本 |
VexRiscv[ |
SpinalHDL | RV32 | RV32I[M][C][A] | SpinalHDL | MIT | 2~5级流水线 |
SCR5[ |
Syntacore | RV32, RV64 | RV[32/64]IMC[FDA] | SystemVerilog | 商用 | 多核心, 7~9级流水线 |
RiscyOO[ |
MIT CSAIL CSG | RV64 | RV64IMAFD | Bluespec | MIT | 乱序超标量缓存一致的多处理器核心 |
DarkRISCV[ |
Darklife | RV32 | most of RV32I | Verilog | BSD | 哈佛结构, 适用于Xilinx平台, 流水线无内锁 |
XuanTie C910[ |
T-Head | RV64 | RV64GCV + SV39 | Verilog | 阿里巴巴商用许可证 | ISA扩展+内存模型扩展+多核心 & 多集群(最多16核心) |
NEORV32[ |
Stephan Nolting | RV32 | 2.2, RV32[I/E][M][A][C][Zfinx][Zicsr][Zifencei] | VHDL | BSD | 大端字节序CPU |
A70X[ |
Codasip | RV64 | RV64IMAFDC | Verilog | Codasip EULA | 7~9级流水线, Codaship Studio设计工具集支持, 应用广泛 |
AX45[ |
Andes | RV64 | RV64GCP | Verilog | Andes商用许可证 | 顺序双发射8级流水线 |
NOEL-V[ |
Cobham Gaisler | RV32, RV64 | RV32GC, RV64GC | VHDL | GPL, 商用 | 双发射顺序 |
8种典型的嵌入式RISC-V处理器
Eight representative embedded RISC-V processors
处理器 | 开发者 | 位数 | 指令集 | 设计语言 | 许可证 | 描述 |
SCR1[ |
Syntacore | RV32 | RV32I/E[MC] | SystemVerilog | SHL v. 2.0 | 仅M模式; 2~4级流水线; 可选JTAG调试 |
Hummingbirdv2 E203[ |
Newclai | RV32 | RV32IMAC或RV32EMAC | Verilog | Apache 2.0 | 仅M模式; 2级流水线 |
SHAKTI E-CLASS[ |
IIT Madras | RV32, RV64 | RV64[ |
BSV | BSD 3-Clause | 3阶段顺序核心 |
Ibex[ |
lowRISC | RV32 | RV32I[M]C/RV32E[M]C | SystemVerilog | Apache 2.0 | 2阶段参数化 |
PicoRV32[ |
Clifford Wolf | RV32 | RV32I/E[MC] | Verilog | ISC | 支持双端口regfile; 指令平均周期=4 |
XuanTie E906[ |
T-Head | RV32 | RV32IMA[F][D]C | Verilog | 阿里巴巴商用许可证 | ISA扩展 |
CVA6[ |
OpenHW Group | RV32, RV64 | RV[32/64]GC | SystemVerilog | Solderpad Hardware License v. 0.51 | 6阶段单发射顺序 |
SweRV EH2[ |
Western Digital Corporation | RV32 | 2.1, RV32IMAC | SystemVerilog | Apache 2.0 | 仅M模式; 9阶段双线程双发射超标量 |
7种典型的教学研究用RISC-V处理器
Seven representative RISC-V processors for teaching and research
处理器 | 开发者 | 位数 | 指令集 | 设计语言 | 许可证 | 描述 |
DINO[ |
Jason Lowe-Power等 | RV32 | RV32I | Chisel | BSD-3-Clause | 单周期5级流水线 |
Tinyriscv[ |
Blue Liang | RV32 | 2.1, RV32I | Verilog | Apache 2.0 | 32位单核心; 3级流水线; 支持JTAG |
Taiga[ |
Reconfigurable Computing Lab, Simon Fraser University | RV32 | RV32IMA | SystemVerilog | Apache 2.0 | 提供程序级模拟工具 |
Maestro[ |
João Chrisóstomo | RV32 | 无FENCE/FENCE.I/CSR相关指令 | VHDL | MIT | 5阶段核心; 完全学术用 |
Kronos[ |
Sonal Pinto | RV32 | RV32I | SystemVerilog | Apache 2.0 | 3阶段顺序核心 |
NutShell(果壳)[ |
UCAS & ICT, CAS | RV32, RV64 | RV64IMAC | Chisel | Mulan Permissive Software License V2 | 基于NOOP的教育项目, 补全和增强了RV64 SoC功能 |
XiangShan |
UCAS & ICT, |
RV64 | RV64GCB | Chisel | Mulan Permissive Software License V2 | 11级流水线, |
从
嵌入式处理器的设计关键在于对有限资源的利用能力, 或者对于资源受限环境的适应性.从
尽管如此, 除嵌入式RISC-V处理器对资源管理的要求较为严格外, 大部分处理器都可以同时胜任通用目的、教学、研究等多种场景, 仅仅是在功能、性能、复杂度等不同方面有所侧重, 导致在不同场景中的表现有所差异; 许多RISC-V处理器还提供了配置机制, 可以根据用户的设定切换为嵌入式或其他工作模式(如Rocket、Ibex、CVA6等), 或者选用不同的指令集(如PicoRV32等), 通过有针对性的优化提升特定环境下的处理能力.
关于定制处理器的具体过程, 将作为RISC-V系统实现的一个环节, 在第4.1.1节进行详细论述.
模拟器是在软件层面对底层硬件平台或其他软件环境进行模拟的工具.它允许开发人员在非目标硬件设备上获得与目标硬件设备相同或相似的体验, 简化研发流程, 并有助于提前发现开发中的问题.例如, 在RISC-V平台中使用QEMU模拟器运行Linux操作系统就是一种很常见的做法.
根据RISC-V社区的统计[
24种RISC-V模拟器
Twenty-four RISC-V simulators
名称 | 许可证 | 支持位数 | 支持扩展 | 使用场景 |
riscvOVPsimPlus[ |
Proprietary freeware | 64位 | MACSU | 裸机、交叉编译 |
DBT-RISE-RISCV[ |
BSD 3-Clause | 32位或64位 | RV32IMAC/RV32GC/RC64I/RV64GC | 指令集模拟 |
FireSim[ |
BSD | 64位 | RV64 | 大规模集群加速硬件仿真 |
gem5[ |
BSD-style | 64位 | RV64I/A/C/D/F | 微架构模拟 |
OVPsim[ |
Proprietary & Apache License | 32位或64位 | IMAFDCNSUE | 多处理器共享内存配置和异构平台模拟 |
jor1k[ |
BSD 2-Clause | 32位或64位 | RV32/RV64 | OpenRISC、网络浏览器, 2/4/8/16核心 |
Jupiter[ |
GPL-3.0 | 32位 | RV32IMF | 教学 |
MARSS-RISCV[ |
MIT | 32位或64位 | RV32GC/RV64GC | 全系统模拟 |
QEMU[ |
GPL | 32位或64位 | RV32/RV64 | 标准化高性能, 全系统模拟 |
RARS[ |
MIT | 32位或64位 | IMFDN | 汇编执行模拟 |
Renode[ |
MIT | 32位或64位 | RV32/RV64 | 物联网 |
Ripes[ |
MIT | 32位 | RV32I/M | 可视化模拟、汇编编辑 |
RISC-V Virtual Prototype[ |
MIT | 32位或64位 | RV32GC/RV64GC | SystemC验证等 |
TinyEMU[ |
MIT | 32位/64位/128位 | IFDC | 系统模拟 |
Spike[ |
BSD 3-clause | 32位或64位 | IMAFDQCBKV、Zifencei、Zicsr | 硬件线程功能模型模拟 |
Swerv-ISS[ |
GPL-3 | 32位或64位 | ACDFIMSU | 指令集模拟 |
VLAB[ |
Proprietary | 32位 | RV32EC | 嵌入式为主 |
WebRISC-V[ |
BSD 3-clause | 64位 | RV64I/M | 教学 |
PQSE[ |
Proprietary | 32位 | RV32I/E/M/C | 密码安全 |
riscv-rust[ |
MIT | 32或64位 | RV32/64I/M/Q, 部分支持RV32/64F/D/A/C | Rust/JavaScript |
terminus[ |
MIT | 32或64位 | RV32/64I | Rust |
Vulcan[ |
MIT | 32位 | RV32I/M/F/A | 教学 |
riscv-vm[ |
MIT | 32位 | RV32I/M, 部分支持RV32F/A | RISCV-V处理器模型 |
EmulsiV[ |
MPL2.0 | 32位 | RV32I | Virgule核心教学 |
这些模拟器中, Spike和QEMU是RISC-V国际基金会推荐使用的: 它们支持几乎所有的RISC-V指令集, 功能齐全, 适用范围广, 可模拟通用和嵌入式等多种处理器环境.基于这两种模拟器的研究成果也很丰富, 如Li等人[
硬件平台是实现RISC-V系统的基础和依托, 而如何发挥出RISC-V硬件平台的优势, 使其能够正确而高效地完成各项任务, 则是RISC-V系统的设计目标.本节将从系统功能实现、系统性能提升、系统安全策略设计3个方面, 对RISC-V系统的设计过程及其研究进展进行归纳分析.
根据所含处理器核心的数目和组织形式的不同, RISC-V系统可以分为单处理器系统、多处理器系统、处理器集群系统3类.单处理器系统是最基础的系统形式, 只包含一个主处理器, 全权管理存储、运算、I/O等系统资源, 遵循冯·诺依曼结构[
单处理器的设计通常要经过如下环节[
(1) 指令集与微架构的设计与实现.
(2) 体系研究与性能建模.
(3) 高层次综合(high level synthesis, 简称HLS)或寄存器传输级(register transfer level, 简称RTL)实现.
(4) RTL验证.
(5) 关键速度相关部件(缓存、寄存器、算数逻辑单元)电路设计.
(6) 逻辑综合.
(7) 时序分析.
(8) 物理设计, 包括布局、布线、版图设计.
(9) 检查RTL、逻辑门层、晶体管层及物理层表示相符.
(10) 检查信号完整性、芯片可制造性.
在进行操作系统设计时, 可以使用系统程序设计语言(system programming language, 简称SPL)对系统功能模块进行描述和开发.SPL包括专用SPL和通用SPL两类, 前者针对特定平台, 如面向MCP操作系统的ESPOL语言[
在指令集与处理器架构设计层面, 需要根据实际功能需求, 合理安排功能组件与相关资源.在这一环节, 借助已有的处理器设计框架通常能起到事半功倍的作用.例如, 2018年, Zhang等人[
硬件描述语言(hardware description language, 简称HDL)是用于描述电子元件或数字逻辑电路的结构、行为、数据流向等信息的设计语言.处理器架构的设计方案经HDL描述后, 形成对数字系统的分层模块表示, 然后将进入电子设计自动化(electronic design automation, 简称EDA)工具逐层仿真验证、自动综合工具将模块组合转换为门级电路网表的过程, 最后便可使用专用集成电路(application specific integrated circuit, 简称ASIC)或现场可编程门阵列(FPGA)的自动布线工具, 将网表转换为具体的电路布线结构, 交至硬件实现.根据第3.1节对各种处理器的统计, RISC-V系统多采用Chisel、Verilog、SystemVerilog、SpinalHDL[
由于单处理器系统与多处理器系统、处理器集群系统存在结构和功能上的发展联系, 关于单处理器系统的设计方案和研究成果同样可以作为原型, 迁移到多处理器系统和处理器集群系统之中, 作为后者的研究基础和实践参考.
多处理器系统的设计, 在单处理器系统的基础之上, 更需要关注处理器核心增加带来的核间管理与通信问题, 关注数据的并行或并发处理能力.具体来说, 多处理器系统中可能存在如下挑战[
(1) 存储一致性与缓存共享问题.
(2) RTL电路大幅增长带来的复杂性问题.
(3) 组件依赖性问题.
(4) 通信延迟问题.
针对上述挑战, 研究人员作出了许多有益尝试, 提出了相应的解决方案.
例如, 对于存储一致性问题与RTL电路问题, 2017年, Manerkar等人[
对于组件依赖性问题, 2020年Kurth等人[
Pulte等人[
关于以通信延迟为代表的系统性能问题, 将在第4.2节展开讨论.
处理器集群系统由于需要对多个节点统筹管理, 因此在设计时往往需要考虑多方面因素, 包括节点的高性能、容错能力、可扩展性、稳定性、节点间耦合程度等[
其中, 集群各节点之间的耦合程度是处理器集群系统设计中的一个重点问题, 它将影响到节点的功能划分、节点间通信频率、单个作业规模等多个设计问题的决策.如Shi等人[
由于涉及到硬件成本问题, 系统的设计方案需要经过测试和验证, 确认其功能是否正确完整、性能是否达标、是否具备足够的安全性和稳定性后, 才能大规模投入生产.系统的测试是指, 在目标实验环境中对系统的各项指标数据进行提取, 探索其可达程度范围的过程; 系统的验证则是在给定一个预期表现后, 判断系统的表现是否与之相符的过程.二者都是对系统进行评估的有效手段.
在系统设计的任何一个环节都需要有与之对应的测试或验证方法来保障其正确性.比如, 在内存问题上, 2019年, Armstrong等人[
在处理器架构层面, 2019年, Deng等人[
在集群网络层面, 2018年Khamis等人[
在系统安全策略方面, 2019年Dessouky等人[
系统优化的主要目标在于提升系统的运行效率, 或者减少对资源和能源的消耗.系统运行的各个环节都可能涉及到对性能的评价, 而其中最主要的优化需求集中在处理器、内存、通信、能耗4个方面.本节即围绕这4个方面, 对RISC-V系统性能优化的思路和有关成果进行详述.
处理器中的性能优化主要体现在其利用率的提升.处理器利用率反映了处理器有效工作时间在总运行时间中的占比, 是一项描述处理器繁忙程度的指标.减少处理器空闲等待的时间, 提升处理器利用率, 将推动系统整体的计算能力或数据处理能力的提升, 使系统能够在更短时间内完成既定工作, 或者在相同时间内完成更多工作.
“冯·诺依曼瓶颈”是影响CPU利用率的一类典型问题.在冯·诺依曼结构[
相应地, 在2017年, 包云岗等人[
内存的设计直接制约着系统整体的组织形式和工作方式, 在数据存储、通信、同步、处理效率等多方面都对系统有关键性的影响.因此, 内存优化问题始终是系统性能研究的一大重点.
例如, 多核处理器中, 随着芯片上核心数量的增加, 会出现“缓存行乒乓”问题, 即, 当多个CPU共享同一缓存行中的变量时, 不同CPU对该变量的频繁读写会导致其他CPU的缓存行频繁失效.共享内存中, 硬件缓存一致性范式的线程同步算法, 其性能扩展问题会受到缓存行乒乓的阻碍.2019年, Dogan等人[
扩展基全局地址空间(extended base global address space, 简称xBGAS)是2018年Leidel等人[
例如, 2019年Williams等人在xBGAS的基础上, 提出了一种构建集体通信库的RISC-V微架构扩展方
案[
2020年Wang等人提出了一种远程原子扩展(remote atomic extension, 简称RAE)的设计[
通信是连接系统各组件、各成分之间的信息交换过程, 通信延迟将推迟目标获得所需信息的时间, 从而增大其空闲等待时间, 造成整体用时延长、目标利用率降低、或者能量空耗.缓解通信延迟, 除了期待相关硬件制作工艺的改进外, 提升系统的并行能力、掩盖通信延迟的不利影响也是一种可行的做法.
这方面, Morais等人[
能耗优化依赖于对系统负载结构的整体设计, 现有研究主要集中在功率控制、电源能效优化等方面.
关于功率控制, 2019年Zhou等人[
2020年Bambini等人基于RISC-V核心的并行超低功耗微控制, 提出了一种开源功率控制器系统(power controller system, 简称PCS)设计方案[
在电源的能源效率提升方面, Wright等人于2020年设计了一种双核RISC-V处理器[
系统在工作过程中随时会面临安全威胁, 有时是操作者自身的操作失误, 有时则是纯粹的恶意攻击和入侵.这些威胁可能导致系统异常和数据破坏, 进而造成更大的损失.因此, 系统需要采用一定的安全策略来应对这些威胁, 维护运行的可靠性和稳定性.本文根据安全威胁发生的主要渠道, 将系统可能遭受的安全威胁归纳为如下3个方面.
(1) 硬件微架构攻击.
这类攻击通过侵入系统所依赖的硬件微架构并将攻击代码注入底层硬件, 造成系统功能的偏差或失效.由于微处理器等各种集成电路的广泛应用, 即使仅针对一种型号发起攻击, 也可产生相当规模的破坏力.
(2) 内存攻击.
这类攻击以干扰或破坏内存功能为主要手段.内存是存储和提供处理器运算所需信息和数据的关键部件, 针对内存进行攻击将严重威胁系统功能的正常运行.不可信代码、软件漏洞、系统弱点都有可能被利用, 成为内存攻击的发起点.
在众多的内存攻击中, 程序控制流劫持攻击是较为常见和重要的一种攻击类型.这类攻击通常会制造和利用内存损坏, 然后将控制流重定向至攻击者指定的内存位置, 使程序脱离正常执行流程, 按攻击者的意图执行.
(3) 侧信道攻击(side channel attack, 简称SCA).
这类攻击往往从外部发起, 围绕构成系统的硬件设备的物理特征或电气特性实施, 意图通过测量、统计、物理观察等手段推测和获取系统敏感信息, 造成信息泄露.获得的信息更可作为其他攻击的基础, 形成组合攻击, 进一步损害系统安全性.
针对上述安全威胁, 学术界和工业界提出了许多安全策略.本文将相关方案要点梳理总结如下.
(1) 引入安全硬件, 将软件安全威胁转移到硬件层面解决.
(2) 模糊易受攻击的敏感信息, 增大攻击者搜索和获取敏感信息的时间或技术成本.
(3) 保护信息流完整性, 保障程序执行安全.
(4) 设置配套验证机制, 及时发现攻击行为.
(5) 必要时采用冗余设计, 增加系统容错性, 减少对特定设备的依赖.
以下是对各类有代表性的安全威胁及其应对措施的详细介绍和分析.
(1) 威胁分析
硬件微架构是指令集体系结构在处理器中具体执行方法的体现, 直接关系到指令系统实现系统功能的能力.由于硬件的生存周期相对较长, 一般可达数年之久, 通常需要经过多次的微代码更新来解决安全或功能性问题, 因此微架构与微代码的设计在引入一定的灵活性的同时, 也留给了恶意攻击侵入的空间.例如, 微码木马可以事先被注入到系统的供应链中, 并在硬件更新时完成潜入; 当满足特定执行条件时, 即可释放和执行所载有的恶意微码, 对系统造成侵害.2021年, Nils Albartus等人[
(2) 解决方案
应对硬件微架构攻击, 可以从供应链安全和微架构安全两方面着手.供应链安全可从源头切断恶意微码的注入渠道, 从而避免硬件微架构攻击的发生; 微架构安全需要在恶意微码已经侵入时进行有效遏制, 增加恶意攻击成功实施的困难程度.通常, 微码木马包括触发器和有效负载两部分, 前者用于在特定条件下触发木马, 后者包含具体的恶意攻击代码, 并将在木马被触发时发动攻击.因此, 对微码进行加密或对敏感区域进行隔离, 以防止相关信息泄露达成触发条件, 是一种常见的做法.2020年, Lee等人[
(1) 威胁分析
程序劫持攻击是通过对程序的控制流进行干扰、误导、破坏, 使程序按攻击者意图执行的一种攻击手段.制造并利用内存损坏, 然后将控制流重定向至攻击者指定的内存位置, 是程序劫持攻击中的典型做法[
缓冲区溢出攻击(a)及利用金丝雀字技术检测攻击(b)的过程
Process of buffer overflow attack (a) and detecting (b)
(2) 解决方案
控制流完整性(control-flow integrity, 简称CFI)[
为了防止攻击者事先猜测到金丝雀字的正确内容, De等人[
基于内存保护的设计也是对抗程序劫持攻击的一种基本方法, 具体可以包括边界检查、地址布局随机化、返回地址验证等内容.2020年, Li等人[
基于安全硬件的软硬件协作方案为实现控制流完整性、抵御程序劫持攻击提供了另一种思路.例如, 2018年Ferraiuolo等人[
(1) 威胁分析
基于内存的攻击不仅可以作为程序劫持攻击的基础, 还可能造成许多其他的威胁, 比如面向数据编程(data-oriented programming, 简称DOP)攻击.这一类型的攻击往往通过内存行为模拟操作, 对数据流中的非控制数据进行攻击.Hu等人[
(2) 解决方案
针对基于内存的攻击, 可以有软件和硬件两种不同的应对方式.软件方式如, 2019年Nyman等人[
2020年, De等人[
其他有代表性的研究成果还包括: Wong等人[
(1) 威胁分析
侧信道攻击是指攻击者从系统的物理实现出发, 通过测量、统计、物理观察等手段推测和获取系统敏感信息的攻击手段.侧信道攻击是密码系统安全的主要威胁之一, 因此长期受到业界关注.早在2011年, Persial等人[
此外, 侧信道攻击还可能与其他攻击手段相结合, 作为组合攻击的一个环节发起其他攻击.例如, 2019年, Van Bulck等人[
Ahmadi等人[
(2) 解决方案
经前文分析可知, 侧信道攻击可能通过多种渠道发起, 以基于功率、时间、电磁等为主.现有的解决方案, 也都是适用于其中一种或几种渠道的针对性防御方法.
例如, 2019年, De Mulder等人[
同年, Deng等人[
2020年, Sehatbakhsh等人[
RISC-V安全策略总结
Summary of RISC-V security mechanisms
威胁类别 | 防御原理 | 优势或能力 | 劣势或注意事项 | 相关工作 |
硬件微架构攻击 | 供应链安全 | 从源头防止恶意微代码的注入 | 要求对供应链各个环节都有足够的防护, 波及面广 | Keystone[ |
微架构安全 | 增强微码信息或代码执行信息的不透明度 | 力度有限, 难以完全防御 | Microcode CPU[ |
|
内存攻击(程序劫持) | 控制流完整性 | 保证控制流转移目标范围; 技术相对成熟 | 粗粒度CFI无法彻底保护控制流; 细粒度成本较高 | PUFCanary[ |
基于内存保护 | 规范内存边界, 在内存布局层面提供保护, 验证方便 | 要求栈空间具有足够的隔离性 | MAC[ |
|
基于安全硬件 | 通过安全的硬件代码设计和制定信息流策略; 可利用硬件信息进行防御, 减少对软件应用运行的干扰 | 需要定制安全硬件, 成本相对较高 | HyperFlow[ |
|
内存攻击 | 内存安全性约束 | 有效对抗DOP攻击 | 需结合辅助硬件使用 | RSE[ |
辅助硬件 | 从硬件层面根本上保证强隔离性和强对抗性, 简化 | 需要引入额外的辅助硬件, 成本相对较高 | Hardscope[ |
|
内存保护单元 | 通过加密设计提供轻量级但健壮的对抗方式 | 只针对已知攻击向量, 保护范围有限 | MPU[ |
|
程序验证 | 理论上支持对任意内存模型的检测 | 并非直接的对抗手段 | HMC[ |
|
侧信道攻击 | 电磁对策 | 有效对抗基于电磁的攻击 | 需结合具体威胁模型分析 | 对策集成[ |
时间对策 | 有效对抗基于时间的攻击 | 需结合具体威胁模型分析 | 安全TLB[ |
|
测试与检验 | 标准明确, 判断准确 | 并非直接的对抗手段 | EMSim[ |
本节将列举一些利用RISC-V促进特定领域应用研究的案例, 并对RISC-V在其中所能发挥的作用以及应用要点进行简要的分析.其中, 第1个应用[
在图形分析、机器学习、数据驱动的科学计算等新兴的数据密集型应用的推动下, HPC系统的结构逐渐复杂化, 大量数据集被映射到离散的节点中, 以实现分布式存储和计算.这种数据分布将导致频繁的跨节点数据事务.尤其是在全局原子操作中, 跨节点的读写修改等操作包含了多个操作步骤和特定的原子性管理, 导致了大量开销.解决开销问题需要一种有效的通信方法, 并结合相应的软件基础设施来实现对离散组件的集成, 减少跨设备的冗余软件例程.为此, 在2020年, Wang等人提出了一种RAE的设计[
RAE首先引入了已有的xBGAS扩展指令集以支持全局内存寻址功能.然后, 设计了一系列原子指令, 通过xBGAS寻址来执行远程原子操作.这些操作共有7类: fetch-and-add、fetch-and-xor、fetch-and-or、fetch-and-and、fetch-and-max、fetch-and-min、compare-and-swap, 每一类都包含一条远程原子操作指令和一条对应的本地原子指令, 均采用R型指令格式.因此, RAE扩展共包含了14条R型原子操作指令.
Fetch-and-add原子操作过程[
Fetch-and-add atomic operation process[
xBGAS中的原子设计架构[
Architecture of Atomic Design in xBGAS[
在此基础上, RAE还引入了网络接口控制器(network interface controller, 简称NIC)等基础设施来处理远程请求, 以及操作映射表(operation mapping table, 简称OMT)将远程请求解包并转换为本地操作, 以提供指令执行的效率.
对于RISC-V指令集自身的扩展研究需要考虑如下问题.
(1) 工作场景或功能目标
(2) 各指令的功能、格式信息
(3) 实现的可行性
在本例中, RAE将工作场景约束在了高性能系统中的分布式数据跨节点操作环境, 并以实现高效的远程原子操作为自身的功能目标, 从而确定了各指令应完成的功能.根据指令的功能, 判断其所含操作数的情况, 选择合适的指令格式进行设计.RAE的14条指令均带有两个操作数, 并且需要支持xBGAS全局寻址, 因此选择了R型格式.在指令的实现方面, RAE设计了各指令的具体工作流程, 并引入了NIC等相应的基础设施和OMT等机制, 给出了一套完整且效率理想的实现方案.
基因组数据正在个性化医疗和农业科技等领域发挥重要作用, 而基因组序列比对是其数据分析中最重要的任务之一, 目标是找到DNA序列之间的相似性和样式.完成该任务需要使用计算密集型算法处理大量数据.但现有的硬件设施均存在各自的劣势, 不适合直接用于序列比对: 通用CPU在处理大量数据时效率低下; GPU虽然提供优秀的性能和可编程性, 但功耗较高; FPGA具有良好的性能和功耗比, 但编程难度较大.为了在性能、功耗、可编程性之间取得较好的平衡, Di Tucci等人[
SALSA在设计上主要由一个流水线组成, 共分为4个阶段: 取码/解码、调度、加载/存储、计算, 每个阶段都与解决特定任务的硬件单元相关联.
(1) 取码/解码阶段: 从主处理器获取指令, 并将其传递给调度器;
(2) 调度阶段: 可以决定将指令发送至加载/存储阶段, 或直接发送至计算阶段;
(3) 加载/存储阶段: 直接连接内存控制器, 执行单个或多个加载/存储请求;
(4) 计算阶段: 与I/O完全分离, 完成具体的计算操作.
SALSA的顶层架构设计如
SALSA顶层架构设计[
Top level architecture of SALSA[
如第4.1节所述, RISC-V系统的功能设计主要考虑的是工作流通路的构造问题, 以及围绕该问题所衍生出的指令集选取、内存设计、通信、负载平衡等.在本例中, SALSA确定了其工作流为对DNA序列数据的解码和比对运算过程, 并根据其特点选定了以流水线形式的构造方案, 分四个阶段依次完成了对指令的获取、调度、内存处理、计算的过程.
为了使SALSA具有可编程性和可扩展性, 其指令建立在ROCC接口[
在图形分析、数据挖掘、机器学习、数据驱动的科学计算等新兴的数据密集型应用场景中, 对内存的访问呈现出越来越不规则的模式, 使得传统的基于缓存的处理器体系结构效率低下.3D栈存储设备, 如混合存储立方体(hybrid memory cube, 简称HMC)和高带宽存储器(high bandwidth memory, 简称HBM)等, 可以以较低的内存密度为代价, 大幅增加带宽, 对于内存受限的应用有很大吸引力.但是传统的内存接口与3D栈存储设备匹配性差, 无法充分利用后者的带宽优势.为此, Wang等人[
MAC设计架构[
Architecture of MAC design[
在这个设计中, MAC共包含两个组成部分: 原始请求聚合器和请求构建器.原始请求聚合器负责根据请求类型和物理地址对原始请求进行分组, 然后将落入同一行的原始请求合并, 分派到请求构建器.请求构建器根据体系结构提供的可扩展内存操作量和延迟, 确定聚合请求的数据包尺寸, 并组装生成具体的3D栈内存请求, 将其发送到3D栈内存.
在本地节点接收到来自本地3D栈内存的响应之后, 会先将数据存储到缓冲区中; 响应路由器对缓冲器中的数据进行分析, 根据每个请求的目标(TID、事务ID等)将实际数据定向到其目的地.此时, 若原始请求是远程的, 数据会经互连路由送入相应的远程节点; 否则, 数据将直接发往本地节点的处理器核.
对于RISC-V系统性能的优化, 可以从处理器、内存、通信、能耗等方面入手, 本例即是针对内存结构的优化.而在具体的设计和实施过程中, RISC-V构成了MAC的工作基础, 体现了在架构设计、资源管理、工具链等方面的优势.
MAC基于RISC-V核心及RV64IMAFDC指令集架构实现, 在处理器、内存、存储设备之间构造了新的数据通路, 而充分发挥了设备的带宽优势, 提升了数据吞吐率和处理效率.
实验验证的环境也采用RISC-V构建: 首先利用RISC-V spike模拟器实现了一个内存跟踪器, 可以捕获多处理器系统生成的内存操作; 然后在该模拟器中实现了处理器核心的SPM部分, 并扩展了RISC-V ISA及相应的交叉编译器, 以实现对SPM功能(预取、写回等)的管理.实验系统采用8个RISC-V核心, 每个核心有1MB的SPM和8GB的HMC设备.
实验结果表明, 系统的合并效率(使用MAC的合并请求数占未使用MAC的原始请求数的百分比)平均可达到52.86%, 即, MAC合并了一半以上的原始请求.
在一些安全敏感的操作场景(如金融、系统管理等)中会需要用户在特定设备(如电脑、智能手机等)上进行批准.Anish Athalye的团队[
(1) 为批准过程提供强力安全保障.
(2) 在单一设备上支持多种批准, 而不发生相互干扰和泄密.
Notary假定远程攻击者可以完全控制用户的计算机, 并且可以创建恶意代理, 诱骗用户安装和运行, 而恶意代理能够破坏其所在代理域的数字门抽象.但是远程攻击者无法与用户进行物理上的交互, 用户也能够正确使用Notary, 只批准期望批准的操作.
基于上述威胁模型, Notary在硬件层面被设计为一个带有小型显示屏和操作按钮的专用安全设备, 形状类似于小型U盘; 在软件层面, Notary被划分为3个域: 内核域、代理域、通信域, 每个域都独占一块SoC, 并通过UART链路相互连接.
Notary整体设计[
Overall design of Notary[
Notary使用3个独立的SoC构建构建其原型, 并在FPGA上实例化.其中, 使用基于PicoRV32 CPU的RISC-V SoC实现了代理域的设计, 利用了RISC-V的特权机制对域进行管理.Notary的代理域执行第三方提供的代理代码, 是抵御恶意代理的第1道关口.它独占显示屏和操作按钮的访问权限, 可以防止攻击者伪造虚假的屏幕输出, 或者伪造虚假的按钮输入.
Notary还需要实现多重代理之间的切换过程, 为此采用了一种基于重置的交换技术: 先重置SoC, 清除所有内部状态, 再执行引导程序, 令内核域从闪存中加载新的代理, 并通过UART线路更新其他域的数据.这个过程中, 基于RISC-V的工具简化了重置的过程, 正确清除了所有的SoC内部状态, 并显示出该技术应用到更复杂的SoC的可能性.
RISC-V是一种很有前景的指令集架构, 拥有十分广阔的发展空间.本文认为, 至少在以下一些方面, RISC-V能够取得可以预见的进展.
随着社会需求的不断增长和相关技术的不断进步, 会不断涌现出各种新类型硬件.如何适应新的工作环境, 适配这些新的硬件, 而继续保证RISC-V系统的功能完整性、性能优越性、安全稳定性, 将成为随之而来的问题.现有的一些RISC-V异构硬件解决方案将在解决这一问题中发挥重要的作用; 而在硬件方面取得新突破后, RISC-V架构自身是否也会随之发生新的变化, 同样值得关注.
特别地, 技术的进步和新硬件的出现也可能导致新的攻击形式产生, 使传统的系统安全防御方法失去作用.例如, 量子计算机的出现为密码安全带来了新的威胁, 需要后量子安全方案才能加以抑制.继续研究完善RISC-V指令集及其系统的安全机制和防御手段, 将是相当重要的工作方向.
RISC-V自身也可以与新技术结合, 在功能、性能、安全等领域实现新的突破.例如, 随着神经科学和脑科学的不断发展, 通过脑机接口技术, 可以实现生命体对机器的直接操控或影响; RISC-V便可以与此技术结合, 在生命医疗、自动化控制等领域发挥更大的作用.目前已有研究团队在此方向上进行了尝试, 如Karageorgos等人[
本文对近年来RISC-V体系结构相关的研究进行了分析和总结.首先介绍了RISC-V指令集的有关概念和发展现状, 总结了各基础指令集、扩展指令集的审批状态和RISC-V的几种权限模式.然后, 对RISC-V系统所依托的硬件平台(处理器、模拟器等)进行了总结分析.接着, 从功能实现、性能优化、安全策略这3个方面讨论了RISC-V系统的设计问题, 并通过一些具体的应用场景, 展示了RISC-V在促进特定领域应用研究方面所能发挥的作用.最后, 我们展望了RISC-V架构研究的未来研究和发展方向.根据本文的总结内容, RISC-V作为一种新兴的开放指令集架构, 在计算机系统研究和产业发展的诸多领域都展现出了良好前景.期望通过我们的工作, 能够给今后的研究者提供有益的参考, 不断扩大RISC-V的应用范围和影响力, 为相关技术的应用和发展做出更多贡献.
在此, 我们向给予本文工作各项支持和宝贵建议的评审老师和同行们表示衷心的感谢.
doi: 10.1109/ICSPC.2007.4728256]]]>
https://www.usenix.org/conference/usenixsecurity16/technical-sessions/presentation/costan ]]>
doi: 10.1109/MICRO.2014.58]]]>
doi: 10.1145/1463891.1463912]]]>
https://web.archive.org/web/20040920172248/http://cm.bell-labs.com/7thEdMan/v7vol2b.pdf ]]>
Budhiraja S, Mehrotra R. Mach: A new kernel foundation For UNIX development. Int'l Journal of Innovative Research in Technology (IJIRT). 2014, 7.
Waterman A, Lee Y, Patterson DA. The RISC-V Instruction Set Manual, Volume I: Base User-Level ISA. Vol. 1.2011.
https://newsroom.intel.com/editorials/x86-approaching-40-still-going-strong/ ]]>
https://riscv.org/about/history ]]>
® Architecture Reference Manual. Armv8, for A-profile architecture. ARM Developer. 2021. https://developer.arm.com/documentation/ddi0487/latest ]]>
Waterman A, Asanovic K. The RISC-V Instruction Set Manual, Volume I: Unprivileged ISA. Vol. 1. SiFive Inc., 2021.
Waterman A, Asanovic K, Hauser J. The RISC-V Instruction Set Manual, Volume Ⅱ: Privileged Architecture. SiFive Inc., 2021.
TM core microarchitecture, performance and CHIPS Alliance. Western Digital Corporation. 2019. https://riscv.org/wp-content/uploads/2019/04/RISC-V_SweRV_Roadshow-.pdf ]]>
doi: 10.1109/ISCA45697.2020.00016]]]>
doi: 10.1145/3431920.3439302]]]>
https://github.com/OpenXiangShan/XiangShan-doc ]]>
https://ipads.se.sjtu.edu.cn/zh/publications/FengOSDI21-preprint.pdf ]]>
doi: 10.1109/ICCD50377.2020.00103]]]>
doi: 10.1109/IPDPSW50202.2020.00033]]]>
https://github.com/riscv-non-isa/riscv-elf-psabi-doc/releases ]]>
https://github.com/syntacore/scr1/blob/master/docs/scr1_eas.pdf ]]>
doi: 10.1109/IEEESTD.2008.4610935]]]>
doi: 10.48456/tr-745]]]>
doi: 10.1109/ICCD50377.2020.00066]]]>
https://www2.eecs.berkeley.edu/Pubs/TechRpts/2016/EECS-2016-17.pdf ]]>
Zaruba F, Benini L. The cost of application-class processing: Energy and performance analysis of a Linux-Ready 1.7-GHz 64-Bit RISC-V core in 22-nm FDSOI technology. IEEE Trans. on Very Large Scale Integration (VLSI) Systems. 2019, 27(11): 2629-2640. [doi:10.1109/TVLSI.2019.2926114]
doi: 10.1145/3338698.3338892]]]>
https://github.com/OSCPU/NutShell ]]>
https://github.com/riscvarchive/riscv-cores-list ]]>
https://github.com/sifive/freedom ]]>
https://www2.eecs.berkeley.edu/Pubs/TechRpts/2015/EECS-2015-167.html ]]>
https://github.com/SpinalHDL/VexRiscv ]]>
https://syntacore.com/page/products/processor-ip/scr5 ]]>
https://github.com/csail-csg/riscy-OOO ]]>
https://github.com/darklife/darkriscv ]]>
https://github.com/stnolting/neorv32]]>
https://codasip.com/products/codasip-risc-v-processors/ ]]>
TM AX45 Overview. 2021. http://www.andestech.com/en/products-solutions/andescore-processors/riscv-ax45/ ]]>
https://www.gaisler.com/index.php/products/processors/noel-v ]]>
https://github.com/riscv-mcu/e203_hbirdv2 ]]>
https://gitlab.com/shaktiproject/cores/e-class/blob/master/README.md ]]>
https://github.com/lowRISC/ibex ]]>
https://github.com/cliffordwolf/picorv32 ]]>
https://occ.t-head.cn/vendor/cpu/index?id=3806463049662468096 ]]>
https://github.com/openhwgroup/cva6 ]]>
https://github.com/chipsalliance/Cores-SweRV-EH2 ]]>
https://github.com/liangkangnan/tinyriscv ]]>
https://gitlab.com/sfu-rcl/Taiga ]]>
https://github.com/Artoriuz/maestro ]]>
https://github.com/SonalPinto/kronos ]]>
https://github.com/OpenXiangShan/XiangShan ]]>
https://www.zhihu.com/question/466393646/answer/1955410750 ]]>
https://www.zhihu.com/question/466393646/answer/1955410750 ]]>
https://github.com/riscvarchive/riscv-software-list ]]>
Li JF, Xu Q, Li YY, et al. Efficient return address verification based on dislocated stack. IEEE Trans. on Computer-aided Design of Integrated Circuits and Systems, 2020, 39(11): 3398-3407. [doi:10.1109/TCAD.2020.3012645]
https://www.ovpworld.org/riscvOVP simPlus/ ]]>
https://github.com/Minres/DBT-RISE-RISCV ]]>
doi: 10.1109/ISCA.2018.00014]]]>
https://gem5.googlesource.com/public/gem5/ ]]>
https://www.ovpworld.org/info_riscv ]]>
https://github.com/s-macke/jor1k/ ]]>
https://github.com/andrescv/Jupiter ]]>
https://github.com/bucaps/marss-riscv ]]>
https://git.qemu.org/git/qemu.git/ ]]>
https://github.com/thethirdone/rars ]]>
https://github.com/renode/renode ]]>
https://github.com/mortbopet/Ripes ]]>
https://github.com/agra-uni-bremen/riscv-vp ]]>
https://bellard.org/tinyemu/ ]]>
https://github.com/riscv-software-src/riscv-isa-sim ]]>
https://github.com/chipsalliance/SweRV-ISS ]]>
https://vlabworks.com/vlab/ ]]>
doi: 10.1145/3338698.3338894]]]>
https://pqsoc.com/software/ ]]>
https://github.com/takahirox/riscv-rust ]]>
https://github.com/shady831213/terminus ]]>
https://github.com/vmmc2/Vulcan ]]>
https://github.com/bit-hack/riscv-vm ]]>
https://github.com/Guillaume-Savaton-ESEO/emulsiV ]]>
Neumann JV. First draft of a report on the EDVAC. IEEE Annals of the History of Computing. 1993, 15(4): 27-75. [doi:10.1109/85.238389]
https://en.wikipedia.org/wiki/Harvard_architecture ]]>
https://en.wikipedia.org/wiki/Modified_Harvard_architecture ]]>
doi: 10.1007/978-1-4419-9739-5_2]]]>
Hwang EO. Digital Logic and Microprocessor Design with VHDL. Cengage Learning, 2005.
http://bitsavers.org/pdf/burroughs/B5000_5500_5700/1032638_B5500_ESPOL_RefManOct67.pdf ]]>
Kernighan BW, Ritchie DM. The C Programming Language. Englewood Cliffs, NJ: Prentice Hall, 1978.
https://www.iso.org/standard/79358.html ]]>
https://doc.rust-lang.org/book/ ]]>
doi: 10.1145/3339186.3339193]]]>
doi: 10.1109/MM.2019.2910012]]]>
https://ieeexplore.ieee.org/abstract/document/8806953 ]]>
Tamimi S, Ebrahimi Z, Khaleghi B, et al. An efficient SRAM-based reconfigurable architecture for embedded processors. IEEE Trans. on Computer-aided Design of Integrated Circuits and Systems, 2019, 38(3): 466-479. [doi:10.1109/TCAD.2018.2812118]
Huang BY, Zhang HC, Subramanyan P, et al. Instruction-level abstraction (ILA): A uniform specification for system-on-chip (SoC) verification. ACM Trans. on Design Automation of Electronic Systems, 2019, 24(1): 1-24. [doi:10.1145/3282444]
doi: 10.1145/3373376.3378479]]]>
https://github.com/SpinalHDL/SpinalHDL ]]>
doi: 10.1145/3195970.3199848]]]>
doi: 10.1109/ICCAD.2006.320067]]]>
doi: 10.1145/3123939.3124536]]]>
doi: 10.1109/DAC18072.2020.9218661]]]>
doi: 10.1145/3314221.3314624]]]>
doi: 10.1007/978-3-540-74573-0]]]>
Glaser F, Tagliavini G, Rossi D, et al. Energy-efficient hardware-accelerated synchronization for shared-L1-memory multiprocessor clusters. IEEE Trans. on Parallel and Distributed Systems. 2021, 32(3): 633-648. [doi:10.1109/TPDS.2020.3028691]
doi: 10.1145/3316781.3317813]]]>
doi: 10.1145/3290384]]]>
doi: 10.1145/3290384]]]>
doi: 10.1145/3341301.3359641]]]>
doi: 10.1109/NOCARC.2018.8541158]]]>
https://dl.acm.org/doi/abs/10.5555/3361338.3361354 ]]>
https://www.usenix.org/conference/osdi20/presentation/nelson ]]>
Yu ZH, Huang B, Ma JY, et al. Labeled RISC-V: A new perspective on software-defined architecture. In: Proc. of the 1st Workshop on Computer Architecture Research with RISC-V (CARRV 2017) Co-located with MICRO. 2017.
doi: 10.7544/issn1000-1239.2019.20180771]]]>
https://crad.ict.ac.cn/CN/10.7544/issn1000-1239.2019.20180771[doi: 10.7544/issn1000-1239.2019.20180771]]]>
Schuiki F, Zaruba F, Hoefler T, et al. Stream semantic registers: A lightweight RISC-V ISA extension achieving full compute utilization in single-issue cores. IEEE Trans. on Computers, 2021, 70(2): 212-227. [doi:10.1109/TC.2020.2987314]
Dogan H, Ahmad M, Kahne B, et al. Accelerating synchronization using moving compute to data model at 1, 000-core multicore scale. ACM Trans. on Architecture and Code Optimization, 2019, 16(1): 1-27. [doi:10.1145/3300208]
doi: 10.1145/3286475.3286478]]]>
doi: 10.1145/3339186.3339196]]]>
doi: 10.1109/DAC18072.2020.9218589]]]>
doi: 10.1145/3352460.3358271]]]>
https://ieeexplore.ieee.org/document/8806775 ]]>
Bambini G, Balas R, Conficoni C, et al. An open-source scalable thermal and power controller for HPC processors. Proc. of the 38th IEEE Int'l Conf. on Computer Design (ICCD). 2020.364-367.
Wright JC, Schmidt C, Keller B, et al. A dual-core RISC-V vector processor with on-chip fine-grain power management in 28-nm FD-SOI. IEEE Trans. on Very Large Scale Integration (VLSI) Systems, 2020(28): 2721-2725. [doi:10.1109/TVLSI.2020.3030243]
https://www.usenix.org/conference/usenixsecurity21/presentation/albartus]]>
doi: 10.1145/3342195.3387532]]]>
Burow N, Carr SA, Nash J, et al. Control-flow integrity: Precision, security, and performance. ACM Computing Surveys, 2017(50): 1-33. [doi:10.1145/3054924]
https://web.archive.org/web/20100514141355/http://www.phrack.com/issues.html?issue=49&id=14&mode=txt ]]>
https://dl.acm.org/doi/10.5555/1267549.1267554 ]]>
Abadi M, Budiu M, Erlingsson U, et al. Control-flow integrity: Principles, implementations, and applications. Proc. of the 2005 ACM Conf. on Computer and Communications Security (CCS 2005). New York: Association for Computing Machinery, 2005, 13(1): 1-40. [doi:10.1145/1609956.1609960]
De A, Basu A, Ghosh S, et al. Hardware assisted buffer protection mechanisms for embedded RISC-V. IEEE Trans. on Computer-Aided Design of Integrated Circuits and Systems, 2020.4453-4465. [doi:10.1109/TCAD.2020.2984407]
Wilander J, Kamkar M. A comparison of publicly available tools for dynamic buffer overflow prevention. In: Proc. of the Network and Distributed System Security Symp., NDSS 2003.2003(3): 149-162.
doi: 10.1145/3243734.3243743]]]>
doi: 10.1145/3297858.3304037]]]>
Bresch C, Hely D, Lysecky R, et al. TrustFlow-X: A practical framework for fine-grained control-flow integrity in critical systems. ACM Trans. on Embedded Computing Systems, 2020, 19(5): 1-26. [doi:10.1145/3398327]
doi: 10.1109/SP.2016.62]]]>
Nyman T, Dessouky G, Zeitouni S, et al. HardScope: Hardening embedded systems against data-oriented attacks. In: Proc. of th 56th ACM/IEEE Design Automation Conf. (DAC). 2019.1-6.
doi: 10.1145/3092627.3092629]]]>
doi: 10.1145/3214292.3214298]]]>
doi: 10.1145/3373376.3378480]]]>
Joy PG, Prabhu M, Shanmugalakshmi R. Side channel attack-survey. Int'l Journal of Advanced Scientific Research and Review, 2011, 1(4): 54-57.
Guo DX, Chen KY, Zhang Y, et al. A survey of side-channel attack and security assessment for cryptographic equipment. Proc. of the 7th Int'l Conf. on Computer Engineering and Networks (CENet2017). 2017(299). [doi:10.22323/1.299.0042]
doi: 10.1109/ICACCCN.2018.8748811]]]>
doi: 10.1007/978-981-15-6198-6_20]]]>
doi: 10.1145/3319535.3363206]]]>
Spruyt A, Milburn A, Chmielewski Ł. Fault injection as an oscilloscope: Fault correlation Analysis. IACR Trans. on Cryptographic Hardware and Embedded Systems, 2021(1): 192-216. [doi:10.46586/tches.v2021.i1.192-216]
Ahmadi MM, Khalid F, Shafique M. Side-channel attacks on RISC-V processors: Current progress, challenges, and opportunities. In: Proc. of the CYBER 2020: The 5th Int'l Conf. on Cyber-Technologies and Cyber-systems. 2020.18-23.
doi: 10.1145/3316781.3323485]]]>
Deng SW, Xiong WJ, Szefer J. Secure TLBs. In: Proc. of the 46th ACM/IEEE Annual Int'l Symp. on Computer Architecture (ISCA). 2019.346-359.
doi: 10.1109/HPCA47549.2020.00016]]]>
doi: 10.1145/3337821.3337867]]]>
doi: 10.1145/3341301.3359661]]]>
doi: 10.1109/ISCA45697.2020.00041]]]>