RISC-V架构

  • RISC-V简介
  • RISC-V起源
    • RISC-V大事件
  • RISC-V 指令特点
    • 设计哲学-简单就是美
      • 无病一身轻——架构的篇幅
      • 能屈能伸——模块化的指令集
      • 浓缩的都是精华——指令的数量
  • RISC-V指令集简介
    • 模块化的指令子集
    • 规整的指令编码
    • 优雅的压缩指令子集
    • 特权模式
    • 自定制指令扩展
    • 总结
  • RISC-V开源处理器研究现状
    • 标量处理器——Rocket
    • 超标量乱序执行处理器——BOOM
    • SHAKTI
  • 引用

RISC-V简介

在芯片领域,应用范围最广的指令集都是收费的(X86基本不对外授权,ARM费用相当不菲。所以芯片设计领域迫切需要一个行业认可的,高品质的指令集,它应该是OPEN的,免费的,一个世界范围可以参考使用的芯片指令标准。这时候就要求出现一个新的指令集。RISC-V是个开源的指令集架构,类似于INTEL的X86 ,ARM指令集,是一个被CPU读取到内存后,指导计算机运行的指令集合。实现了该指令集的CPU,能执行指令集中规定的所有基本指令,使按该套指令集编译的程序能够无障碍运行,且具有同系列CPU可移植和兼容性。

RISC-V起源

伯克利实验室于2010年5月启动RISC-V指令集,该指令集是UC Berkeley并行计算实验室(Par Lab)的一部分。RISC-V发明之后,许多项目都在使用它,包括由美国国防高级研究计划局(DARPA)资助的研究计划,遍及许多地方和许多公司。加州大学伯克利分校ASPIRE实验室接班,持续了2013年至2018年,并导致构建了多个RISC-V兼容微处理器。RISC-V基金会成立于2015年,旨在基于RISC-V ISA建立一个开放的软件和硬件创新者协作社区。基金会是一个由其成员控制的非营利性公司,它指导开发以推动RISC-V ISA的最初采用。

RISC-V大事件

  • 全球第一大硬盘产商西部数据(Western Digital)将以每年10亿到20亿颗的预期来推动RISC-V,逐步完成全线产品迁移到RISC-V定制架构;
  • MicroSemi提供基于Risc-V+Linux+CNN加速器的AI解决方案;
  • 印度政府则大力资助基于RISC-V的处理器项目,使RISC-V成为了印度的事实国家指令集;
  • RISC-V基金会的会员已经增加到150多个,大学、科研院所和企业大量使用或评估基于RISC-V的应用,参与度之高,覆盖面之广,盛况空前;指令集架构的生态链正在成长和完善,工具链、RTOS/Linux操作系统的移植等工作都取得关键突破;
  • 2018年11月,RISC-V基金会宣布了与Linux基金会的联合合作。作为合作的一部分,Linux基金会还将为RISC-V生态系统提供大量资源,如培训项目、基础设施工具、社区推广、市场营销和法律专业知识;
  • 2019年6月,Debian 移植 RISC-V 64 架构已完成 90%,LLVM 成阻碍,不过开发者预计今年将会完成对 LLVM for RISC-V 64 的支持。

RISC-V 指令特点

设计哲学-简单就是美

大道至简,在IC设计的实际工作中,最简洁的设计往往是最可靠的,在大多数的项目实践中一次次的得到检验。

IC设计的工作性质非常特殊,其最终的产出是芯片,而一款芯片的设计和制造周期均很长,无法像软件代码那样轻易的升级和打补丁,每一次芯片的改版到交付都需要几个月的周期。不仅如此,芯片的一次制造成本费用高昂,从几十万美金到百千万美金不等。这些特性都决定了IC设计的试错成本极为高昂,因此能够有效的降低错误的发生就显得非常的重要。

无病一身轻——架构的篇幅

后发优势,RISC-V设计汲取X86和ARM架构中的经验,前人踩过的坑不用再犯,同时无需向下兼容老旧的设计和已经过时的指令。想想去看一本架构文档,里面一大半的篇幅都在讲过时的指令和设计,是不是感觉宝贵的时间都被浪费了。

在处理器领域,目前主流的架构为x86与ARM架构。经过几十年的发展,现代的x86与ARM架构的架构文档长达几百数千页。打印出来能有半个桌子高,可真是“著作等身”。之所以现代x86与ARM架构的文档长达数千页,且版本众多,一个主要的原因是因为其架构的发展的过程也伴随了现代处理器架构技术的不断发展成熟。并且作为商用的架构,为了能够保持架构的向后兼容性,其不得不保留许多过时的定义,或者在定义新的架构部分时为了能够将就已经存在的技术部分而显得非常的别扭。久而久之就变得极为冗长。

而现在才推出的RISC-V架构,则具备了后发优势,由于计算机体系结构经过多年的发展已经成为比较成熟的技术,多年来在不断成熟的过程中暴露的问题都已经被研究透彻,因此新的RISC-V架构能够加以规避,并且没有背负向后兼容的历史包袱,可以说是无病一身轻。

目前的“RISC-V架构文档”分为“指令集文档”(riscv-spec-v2.2.pdf)和“特权架构文档”(riscv-privileged-v1.10.pdf)。“指令集文档”的篇幅为145页,而“特权架构文档”的篇幅也仅为91页。熟悉体系结构的工程师仅需一至两天便可将其通读,虽然“RISC-V的架构文档”还在不断地丰富,但是相比“x86的架构文档”与“ARM的架构文档”,RISC-V的篇幅可以说是极其短小精悍。

能屈能伸——模块化的指令集

RISC-V架构相比其他成熟的商业架构的最大一个不同还在于它是一个模块化的架构。因此,RISC-V架构不仅短小精悍,而且其不同的部分还能以模块化的方式组织在一起,从而试图通过一套统一的架构满足各种不同的应用。

这种模块化是x86与ARM架构所不具备的。以ARM的架构为例,ARM的架构分为A、R和M三个系列,分别针对于Application(应用操作系统)、Real-Time(实时)和Embedded(嵌入式)三个领域,彼此之间并不兼容。

但是模块化的RISC-V架构能够使得用户能够灵活选择不同的模块组合,以满足不同的应用场景,可以说是“老少咸宜”。譬如针对于小面积低功耗嵌入式场景,用户可以选择RV32IC组合的指令集,仅使用Machine Mode(机器模式);而高性能应用操作系统场景则可以选择譬如RV32IMFDC的指令集,使用Machine Mode(机器模式)与User Mode(用户模式)两种模式。而他们共同的部分则可以相互兼容。

浓缩的都是精华——指令的数量

短小精悍的架构以及模块化的哲学,使得RISC-V架构的指令数目非常的简洁。基本的RISC-V指令数目仅有40多条,加上其他的模块化扩展指令总共几十条指令。

RISC-V指令集简介

模块化的指令子集

RISC-V的指令集使用模块化的方式进行组织,每一个模块使用一个英文字母来表示。RISC-V是一个典型三操作数、加载-存储形式的RISC架构,包括三个基本指令集和6个扩展指令集。RISC-V最基本也是唯一强制要求实现的指令集部分是由I字母表示的基本整数指令子集,使用该整数指令子集,便能够实现完整的软件编译器。其他的指令子集部分均为可选的模块,具有代表性的模块包括M/A/F/D/C。
基本指令集的名称后缀都是I,表示Integer,任何一款采用RISC-V架构的处理器都要实现一个基本指令集,根据需要,可以实现多种扩展指令集,例如:如果实现了RV32IM,表示实现了32位基本指令集和乘法除法扩展指令集。如果实现了RV32IMAFD,那么可以使用RV32G来表示,表示实现了通用标量处理器指令集。本文只介绍RV32I的基本情况。RV32I指令集有47条指令,能够满足现代操作系统运行的基本要求,47条指令按照功能可以分为如下几类。

  1. 整数运算指令:实现算术、逻辑、比较等运算。
  2. 分支转移指令:实现条件转移、无条件转移等运算,并且没有延迟槽。
  3. 加载存储指令:实现字节、半字、字的加载、存储操作,采用的都是寄存器相对寻址方式。
  4. 控制与状态寄存器访问指令:实现对系统控制与状态寄存器的原子读-写、原子读-修改、原子读-清零等操作。
  5. 系统调用指令:实现系统调用、调试等功能。

规整的指令编码

在流水线中能够尽早尽快的读取通用寄存器组,往往是处理器流水线设计的期望之一,这样可以提高处理器性能和优化时序。这个看似简单的道理在很多现存的商用RISC架构中都难以实现,因为经过多年反复修改不断添加新指令后,其指令编码中的寄存器索引位置变得非常的凌乱,给译码器造成了负担。

得益于后发优势和总结了多年来处理器发展的教训,RISC-V的指令集编码非常的规整,指令所需的通用寄存器的索引(Index)都被放在固定的位置,如图2所示。因此指令译码器(Instruction Decoder)可以非常便捷的译码出寄存器索引然后读取通用寄存器组(Register File,Regfile)。

优雅的压缩指令子集

基本的RISC-V基本整数指令子集(字母I表示 )规定的指令长度均为等长的32位,这种等长指令定义使得仅支持整数指令子集的基本RISC-V CPU非常容易设计。但是等长的32位编码指令也会造成代码体积(Code Size)相对较大的问题。

为了满足某些对于代码体积要求较高的场景(譬如嵌入式领域),RISC-V定义了一种可选的压缩(Compressed)指令子集,由字母C表示,也可以由RVC表示。RISC-V具有后发优势,从一开始便规划了压缩指令,预留了足够的编码空间,16位长指令与普通的32位长指令可以无缝自由地交织在一起,处理器也没有定义额外的状态。

特权模式

RISC-V架构定义了三种工作模式,又称特权模式(Privileged Mode):

  • Machine Mode:机器模式,简称M Mode。
  • Supervisor Mode:监督模式,简称S Mode。
  • User Mode:用户模式,简称U Mode。
    RISC-V架构定义M Mode为必选模式,另外两种为可选模式。通过不同的模式组合可以实现不同的系统

自定制指令扩展

除了上述阐述的模块化指令子集的可扩展、可选择,RISC-V架构还有一个非常重要的特性,那就是支持第三方的扩展。用户可以扩展自己的指令子集,RISC-V预留了大量的指令编码空间用于用户的自定义扩展,同时,还定义了四条Custom指令可供用户直接使用,每条Custom指令都有几个比特位的子编码空间预留,因此,用户可以直接使用四条Custom指令扩展出几十条自定义的指令。

总结

RISC-V开源处理器研究现状

目前基于RISC-V架构的开源处理器有很多,既有标量处理器Rocket,也有超标量处理器BOOM,还有面向嵌入式领域的Z-scale、PicoRV32等。

标量处理器——Rocket

Rocket是UCB设计的一款64位、5级流水线、单发射顺序执行处理器,主要特点有:

支持MMU,支持分页虚拟内存,所以可以移植Linux操作系统

具有兼容IEEE 754-2008标准的FPU

具有分支预测功能,具有BTB(Branch Prediction Buff)、BHT(Branch History Table)、RAS(Return Address Stack)

Rocket是采用Chisel(Constructing Hardware in an Scala Embedded Language)编写的,这也是UCB设计的一种开源的硬件编程语言,是Scala语言的领域特定应用,可以充分利用Scala的优势,将面向对象(object orientation)、函数式编程(functional programming)、类型参数化(parameterized types)、类型推断(type inference)等概念引入硬件编程语言,从而提供更加强大的硬件开发能力。Chisel除了开源之外,还有一个优势就是使用Chisel编写的硬件电路,可以通过编译得到对应的Verilog设计,还可以得到对应的C++模拟器。Rocket使用Chisel编写,就可以很容易得到对应的软件模拟器。同时,因为Chisel是面向对象的,所以Rocket的很多类可以被其他开源处理器、开源SoC直接使用。

超标量乱序执行处理器——BOOM

BOOM(Berkeley Out-of-Order Machine)是UCB设计的一款64位超标量、乱序执行处理器,支持RV64G,也是采用Chisel编写,利用Chisel的优势,只使用了9000行代码,流水线可以划分为六个阶段:取指、译码/重命名/指令分配、发射/读寄存器、执行、访存、回写。
借助于Chisel,BOOM是可参数化配置的超标量处理器,可配置的参数包括:
取指、译码、提交、指令发射的宽度
重排序缓存ROB(Re-Order Buffer)、物理寄存器的大小
取指令缓存、RAS、BTB、加载、存储队列的深度
有序发射还是无序发射
L1 cache的路数
MSHRs(Miss Status Handling Registers)的大小
是否使能L2 Cache
UCB已经在40nm工艺上对BOOM进行了流片,测试结果如表4所示。可见BOOM与商业产品ARM Cortex-A9的性能要略优,体现在面积小、功耗低。

SHAKTI

SHAKTI是印度理工学院的一个计划,目标是设计一系列适合不同应用环境的、基于RISC-V的开源处理器,以及一些IP核,以便搭建SoC。这些处理器是E-Class、C-Class、I-Class、M-Class、S-Class、H-Class、T-Class、N-Class,目前已经开源的是前三个,使用Bluespec System Verilog编写。

引用

RISC-V官网
终于有人把RISC-V讲明白了
RISC-V生态架构浅析(认识RISC-V)

RISC-V架构学习相关推荐

  1. RISC V (RV32+RV64) 架构 整体介绍

    文章目录 riscv 市场 芯片介绍 软件介绍 开发板介绍 PC介绍 riscv 架构 编程模型(指令集/寄存器/ABI/SBI) 运行状态 指令集 寄存器 riscv32和riscv64两者的区别 ...

  2. 计组学习笔记2(RISC v版)

    指令集解释 (规定:R[r]表示通用寄存器r的内容,M[addr]表示存储单元addr的内容,SEXT[imm]表示对imm进行符号扩展,ZEXT[imm]表示对imm进行零扩展) 整数运算类 -U型 ...

  3. MIPS架构学习笔记

    MIPS架构学习笔记 来源: ChinaUnix博客 日期: 2007.03.13 23:18 (共有条评论) 我要评论 MIPS架构学习笔记                              ...

  4. javaweb k8s_K8S微服务核心架构学习指南 ASP.NET Core微服务基于K8S 架构师必备Kubernetes教程...

    K8S微服务核心架构学习指南 ASP.NET Core微服务基于K8S 架构师必备Kubernetes教程 课程内容是关于Kubernetes微服务架构学习课程,基于K8S开展ASP.NET核心进行微 ...

  5. ZT Android4.2蓝牙基础架构学习

    Android4.2蓝牙基础架构学习 分类: Jellybean Bluetooth Bluetooth 2013-10-13 23:58 863人阅读 评论(3) 收藏 举报 androidblue ...

  6. 时序图 分支_BOOM微架构学习(1)——取指单元与分支预测

    之前在RISC-V的"Demo"级项目--Rocket-chip一文中曾经简介过BOOM处理器的流水线,这次我们开始一个系列,深入学习一下BOOM的微架构,这样对于乱序执行的超标量 ...

  7. bpmn2.0业务过程模型和符号_IT帮业务架构学习小组学习内容

    关于学习内容,担心大家学完的可能不多,所以考虑是先选择一小部分来学.但考虑到业务架构属于组织级学科,本身就要求体系全面,所以还是决定把全套内容放入到本期学习.下面我列举一下我们这8个月在业务架构自主学 ...

  8. SpringCloud微服务架构学习(二)常见的微服务架构

    SpringCloud微服务架构学习(二)常见的微服务架构 1.Dubbo 阿里开源微服务框架 官网地址:http://dubbo.apache.org/en-us/ 简介: Dubbo是阿里巴巴SO ...

  9. 《InsideUE4》GamePlay架构学习_Level和World

    <InsideUE4>GamePlay架构学习 Level和World 前话 Unity To UE 思考 为什么AWorldSettings[0]的位置,而ALevelScriptAct ...

  10. 高性能架构学习路线图-分布式架构演进,mybatis一对一一对多面试题

    架构演进一: 早期雏形 架构演进二: 数据库开发(LAMP特长) 架构演进三:  javaweb的雏形 架构演进四:  javaweb的集群发展​ 架构演进五:  javaweb的分布式发展 架构演进 ...

最新文章

  1. 1亿组图文对,填补中文开源多模态数据集空白!还附带基础模型,来自华为诺亚方舟实验室...
  2. SSM整合Shiro 身份验证及密码加密简单实现
  3. java测试时找不到类,我在class文件运行不了测试文件,提示找junit4找不到任何的测试项目...
  4. ML之RF/kNNC/LoRC/SVMC/RFC/GBDTC:利用Pipeline(客户年龄/职业/婚姻/教育/违约/余额/住房等)预测客户是否购买该银行的产品二分类(评估、调优、推理)
  5. operator模块
  6. 网络爬虫--25.【selenium实战】实现拉勾网爬虫之--selenium获取数据
  7. Riverbed调查:惊人发现95%的中国受访者高度关注应用性能
  8. C++实践笔记(四)----AVL树的简单实现
  9. 法国电信:5G加速数字化落地 物联网是首座金矿
  10. 茶 —— 一片树叶的故事(茶叶的品类)
  11. python-14:迭代器 生成器,3种方法:g.__next__() next(g) g.send(value)
  12. 网页上的html表格导出excel表格,网页表格导出至Excel
  13. fanuc系统屏蔽服务器,FANUC系统常见的3种锁轴方法及坐标轴字母含义
  14. 【Power BI--- M 语言】M语言与DAX 语言的区别
  15. GET 请求参数过大导致HTTP错误码 414 / 500 的问题
  16. Java学习之AWT绘图“奥运五环”
  17. Java初学者的学习路线建议
  18. 2021年广州市学历入户全流程(持续更新)
  19. java八大基本数据类型基本用法(含数据输入输出)
  20. 11、Nepxion Discovery 之全链路界面操作蓝绿灰度发布

热门文章

  1. 程序安装报错0x80070660的解决
  2. 七个初学者必下载的Python编程器
  3. 软件测试多次点击按钮叫什么方法,常见控件的测试点 - 爱昵容儿 的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  4. Python从Bing壁纸的API接口保存图片
  5. 毕业两年,一年工作经验,一个月拿下腾讯T4 offer
  6. 《Android深入透析》之Android事件分发机制
  7. FP7195转模拟恒流调光芯片在机器视觉光源的应用优势
  8. 阅读理解(1)|TED演讲_20岁光阴不再来
  9. SCT2601TVBR、LMR16006XDDCR、MP2456GJ-Z参数
  10. python实现爬取非小号相关性(btc)数据