本文为《RISC-V CPU设计》专栏和《RISC-V嵌入式软件开发》专栏系列文章之一。
注:本文节选自“硅农亚历山大”所著国内第一本系统介绍CPU与RISC-V设计的中文书籍《手把手教你设计CPU:RISC-V处理器篇》(预计将于2018年3~4月上市)。

原文出处:大道至简——RISC-V架构之魂(上)

“大道至简——RISC-V架构之魂”——分成上中下三篇,本文是上篇。关注文末公众号后可查询上中下三篇的内容。

注意:本文中将会多次出现“RISC处理器”或“RISC架构”以及“RISC-V处理器”或“RISC-V架构”等关键词。请初学者务必注意加以区别:

  • RISC表示精简指令集(Reduced Instruction Set Computer,RISC)。
  • RISC-V只是伯克利发明的一种特定指令集架构(属于RISC类型)。

1 简单就是美——RISC-V架构的设计哲学

RISC-V架构作为一种指令集架构,在介绍细节之前,让我们先了解设计的哲学。所谓设计的“哲学”便是其推崇的一种策略,譬如说我们熟知的日本车的设计哲学是经济省油,美国车的设计哲学是霸气外漏等。RISC-V架构的设计哲学是什么呢?是“大道至简”。

笔者最为推崇的一种设计原则便是:简单就是美,简单便意味着可靠。无数的实际案例已经佐证了“简单即意味着可靠的”真理,反之越复杂的机器越则越容易出错。

所谓大道至简,在IC设计的实际工作中,笔者曾见过最简洁的设计实现安全可靠,也曾见过最繁复的设计长时间无法稳定收敛。最简洁的设计往往是最可靠的,在大多数的项目实践中一次次的得到检验。

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

现代的芯片设计规模越来越大,复杂度越来越高,并不是说要求设计者一味的逃避使用复杂的技术,而是应该将好钢用在刀刃上,将最复杂的设计用在最为关键的场景,在大多数有选择的情况下,尽量选择简洁的实现方案。

笔者在第一次阅读了RISC-V架构文档之时,不禁击节赞叹,拍案惊奇,因为RISC-V架构在其文档中不断地明确强调,其设计哲学是“大道至简”,力图通过架构的定义使得硬件的实现足够简单。其简单就是美的哲学,可以从几个方面容易看出,后续小节将一一加以论述。

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

在处理器领域,目前主流的架构为x86与ARM架构,笔者曾经参与设计ARM架构的应用处理器,因此需要阅读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基金会的网站上(https://riscv.org/specifications/)无需注册便可免费下载其文档,如图1所示。

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

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(用户模式)两种模式。而他们共同的部分则可以相互兼容。

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

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

2 RISC-V指令集架构简介

本章将对RISC-V的指令集架构多方面的特性进行简要介绍。

2.1 模块化的指令子集

RISC-V的指令集使用模块化的方式进行组织,每一个模块使用一个英文字母来表示。RISC-V最基本也是唯一强制要求实现的指令集部分是由I字母表示的基本整数指令子集,使用该整数指令子集,便能够实现完整的软件编译器。其他的指令子集部分均为可选的模块,具有代表性的模块包括M/A/F/D/C,如表1所示。

表1 RISC-V的模块化指令集

为了提高代码密度,RISC-V架构也提供可选的“压缩”指令子集,由英文字母C表示。压缩指令的指令编码长度为16比特,而普通的非压缩指令的长度为32比特。以上这些模块的一个特定组合“IMAFD”,也被称为“通用”组合,由英文字母G表示。因此RV32G表示RV32IMAFD,同理RV64G表示RV64IMAFD。

为了进一步减少面积,RISC-V架构还提供一种“嵌入式”架构,由英文字母E表示。该架构主要用于追求极低面积与功耗的深嵌入式场景。该架构仅需要支持16个通用整数寄存器,而非嵌入式的普通架构则需要支持32个通用整数寄存器。

通过以上的模块化指令集,能够选择不同的组合来满足不同的应用。譬如,追求小面积低功耗的嵌入式场景可以选择使用RV32EC架构;而大型的64位架构则可以选择RV64G。

除了上述的模块,还有若干的模块包括L、B、P、V和T等。这些扩展目前大多数还在不断完善和定义中,尚未最终确定,因此本文在此不做详细论述。

2.2 可配置的通用寄存器组

RISC-V架构支持32位或者64位的架构,32位架构由RV32表示,其每个通用寄存器的宽度为32比特;64位架构由RV64表示,其每个通用寄存器的宽度为64比特。

RISC-V架构的整数通用寄存器组,包含32个(I架构)或者16个(E架构)通用整数寄存器,其中整数寄存器0被预留为常数0,其他的31个(I架构)或者15个(E架构)为普通的通用整数寄存器。

如果使用了浮点模块(F或者D),则需要另外一个独立的浮点寄存器组,包含32个通用浮点寄存器。如果仅使用F模块的浮点指令子集,则每个通用浮点寄存器的宽度为32比特;如果使用了D模块的浮点指令子集,则每个通用浮点寄存器的宽度为64比特。

“大道至简——RISC-V架构之魂”——分成上中下三篇,本文是上篇。关注文末公众号后可查询上中下三篇的内容。

(未完待续:后续请参见《大道至简——RISC-V架构之魂(中)》)

更多信息

感兴趣的读者可以通过下面二维码关注公众号“硅农亚历山大”,了解Verilog、IC设计、CPU、RISC-V和人工智能AI相关的更多设计技巧和经验分享,注意:由于干货太多,请自备茶水。

大道至简——RISC-V架构之魂(上)相关推荐

  1. 《大道至简》阅读笔记

    <大道至简>这本书在大一上导论课的时候主任就给我们推荐过,那时候有简单的翻阅,近期又抽出时间细读了一下.感觉这本书的语言还是很生动的.没有像其他书那样死板,还是比较能看的下去的. 开篇即引 ...

  2. 大道至简——RISC-V架构之魂(中)

    本文为<RISC-V CPU设计>专栏和<RISC-V嵌入式软件开发>专栏系列文章之一. 注:本文节选自"硅农亚历山大"所著国内第一本系统介绍CPU与RIS ...

  3. 大道至简——RISC-V架构之魂(下)

    本文为<RISC-V CPU设计>专栏和<RISC-V嵌入式软件开发>专栏系列文章之一. 注:本文节选自"硅农亚历山大"所著国内第一本系统介绍CPU与RIS ...

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

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

  5. 如何解读《微信技术总监谈架构:微信之道——大道至简》

    [http://www.52im.net/thread-201-1-1.html]学习一下 一.前言 最近在朋友圈看到有人分享腾讯微信技术总监周颢的一个技术报告,题目是< 微信技术总监谈架构:微 ...

  6. 《架构真经:互联网技术架构的设计》大道至简

    本节书摘来自华章出版社<架构真经:互联网技术架构的设计>一书中的第1章,第1节,作者 小象学院 杨 磊,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 大道至简 ...

  7. vim 键盘宏操作 -- 大道至简

    最近利用vim做一些文本处理时 发现vim 支持的键盘宏是一个好东西啊,高效优雅得处理大量需要重复性操作的文本,让人爱不释手!!! 希望接下来对键盘宏的分享能够实际帮助到大家. 后文中描述的一些vim ...

  8. 《大道至简》的幕后故事

      一.大道至简与愚公移山 ======= <大道至简>一书最初的领悟来自那张EHM图.这个故事我在书中已经讲过:在一次Delphi.NET培训的准备工作中,我顿悟"语言只是工具 ...

  9. Golang 受欢迎的原因:大道至简

    前言 Golang自2009年发布第一个版本,2012年发布1.0版本.在这10年的时间里,不断有开发者加入Golang的阵营中,不断共建Golang生态.其中比较有代表性的Golang编写软件作品是 ...

最新文章

  1. Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
  2. Target runtime Apache Tomcat v7.0 is not defined.
  3. linux 磁盘维护 swapon swapoff 简介
  4. EOS账户系统(7)权限评估
  5. boost::container模块实现显式实例集的测试程序
  6. 【Linux】一步一步学Linux——batch命令(134)
  7. 手册中数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留的理解
  8. wps 选择 高亮_简单实用:一组WPS表格技巧
  9. c++ mat赋值_Mat 的几种初始化和赋值方法
  10. Python函数之进阶
  11. 如何在几秒钟内退出所有 Mac 应用程序?
  12. 深入了解STL中set与hash_set,hash表基础
  13. 直线电机原理动画_直线振动筛工作原理结构图以及结构解析
  14. 解决Ubuntu16.04更新源时显示“暂时不能解析域名”问题
  15. 如何让自己的CS水平更进一步?(二)了解武器
  16. 《OpenCV3编程入门》毛星云编著
  17. pythonsdk_Python SDK下载
  18. Kindle使用的一些方法
  19. 【云原生之kubernetes实战】在k8s环境下部署BookBrowser电子书浏览器
  20. 2018拼多多校招笔试贪心编程题小熊吃糖详解

热门文章

  1. 中考计算机加试及格多少分,中考总分多少 中考各科分数是多少
  2. 一个产品经理的自述:我在腾讯工作的这一年
  3. html 网页 简体中文 繁体中文 英文自适应,css页面字体替换源代码和页面显示不一样问题解决...
  4. LinkCloud:云计算服务 没有优惠活动就是最好的优惠
  5. 计算机主板 辐射,想当年单反镜头竟然还有核辐射?
  6. [ 物联网篇 ] 02 - Yocto Project (YP)快速入门
  7. 罗森伯格助力杭州G20峰会保电工程-清江智能化变电站
  8. Java基础 DAY07
  9. Excel学习——制作周报
  10. matlab仿真直流电机,[转载]基于Matlab/Simulink的无刷直流电机控制仿真研究