我的中国“芯”,手把手教你设计CPU

  1. 云栖社区>
  2. 博客>
  3. 正文

我的中国“芯”,手把手教你设计CPU

异步社区 2018-04-23 21:10:45 浏览2479
展开阅读全文

​点击关注 异步图书,置顶公众号

每天与你分享 IT好书 技术干货 职场知识​

9ccc0ca9gy1fqmvhi7nx9j208c05k3ys.jpg

​参与文末话题讨论,每日赠送异步图书。

——异步小编

永恒的热点——CPU                                                                                                                                                                                                               灯,等灯等灯……  —— Intel

如果要评选过去十数年间经典的科技广告音乐,想必Intel的广告音乐“灯,等灯等灯……”必然会榜上有名。而熟悉的蓝色贴标“Intel Inside”,也必是辨识度很高的广告图标。

中央处理单元(Center Processor Unit,CPU),虽然早已被大众所熟知,但在相当长的时间内,它一直是高端大气的代名词。你是否有着相同的印象,在早期的电脑杂志上,必然有着浓墨重彩的篇幅与专栏,详细介绍Intel或AMD公司推出的CPU芯片的详细参数,抑或MIPS与ARM的优劣之处,甚至是令人津津乐道的各家CPU的小道消息与幕后桥段。

而CPU代表的高端技术,也一直笼罩在神秘的面纱之下。CPU设计部门总能以其光环吸引着众多的应聘者竞争角逐。不无夸张地说,就像每个男孩心中都有一个军人梦一样,似乎每一个芯片设计人员都有一个CPU梦。

今天小编介绍2本书《手把手教你设计CPU》以及《自制编程语言》,并引出作者胡振波老师对于自制CPU的一些思考。希望对于对这个领域感兴趣的读者提供一些指导。

9ccc0ca9gy1fqmvjqs85fj207s09jwf0.jpg

​(2018年5月出版)

9ccc0ca9gy1fqmvjyyv2fj207s097aaf.jpg

​(2018年5月出版)

历 史

芯片,是整个电子信息产业的基石。目前,全球半导体市场规模达3200亿美元,全球54%的芯片都出口到了中国,但国产芯片的市场份额只占10%。中国芯片产业每年进口需要消耗2000多亿美元外汇,超过了石油和大宗商品,在进口商品中占有相当大的比重。 

CPU作为芯片的“心脏”,可谓“芯中之心”,国内的产业实力在此方面一直比较薄弱。CPU实现国产自主化对我国的发展至关重要,但是CPU的主流指令集架构(譬如x86和ARM)一直为国外公司所垄断,国内公司需要支付高昂的专利费用且受制于人。CPU作为一种特殊的芯片,其要求指令集架构具有普世的通用性且能够共享生态系统,因此囿于一国范围内发明一套封闭的指令集并不具备实用性,必须走与世界主流架构接轨的道路。在这种背景下,开放的RISC-V架构给中国CPU芯片产业的发展带来了巨大的战略机遇,有希望彻底实现CPU的国产自主化和架构主流化。

目前,我国正处于大力发展芯片设计行业的关键时期,实现中华民族伟大复兴的重任需要广大科研和工程工作者孜孜不倦地努力与拼搏,需要很多像作者这样求真务实的技术中坚力量来担负起国产芯片振兴的重任。而国内CPU领域人才的奇缺是长期制约行业发展的主要因素,《手把手教你设计CPU》作者作为一名长期工作在一线的资深CPU设计专家,将其经验撰写成书,资料翔实,文字生动。配合作者所在公司开发的蜂鸟E200系列处理器核作为实例,非常适合用于教学领域以及爱好者学习,对于普及CPU的设计技术具有十分正面的意义。

新兴的RISC-V架构在全球范围内已经掀起了一场热潮,在国内也引起了广泛的关注,但是由于没有很好的中文普及书籍,很多人对于RISC-V仍然是“只闻其声,未见其形”。作者作为国内第一批接触RISC-V架构,并最早研发成功RISC-V处理器的技术专家,在工作之余将其自研的处理器核开源,并著书详细解读其实现细节,体现了作者极高的专业水准和推进国产CPU产业发展的强烈情怀。

ISA请扛起这口锅——为什么国产CPU尚未足够成功

众所周知,芯片是我国信息产业发展的核心领域,而CPU则代表了芯片中的核心技术。在此方面,我国与发达国家相比有着明显的差距。虽然经过多年的努力,技术差距已经有了显著的缩小,但是在民用商业领域内,仍然没有看到太多国产CPU的身影。是什么原因造成国产商业CPU尚未足够成功这一现状呢?接下来,我们便细数一下国内自主开发CPU的公司与现状,以及它们选择的指令集流派。通过逐一分析其过去与现状,相信能够让读者得到答案。

MIPS系——龙芯和君正

新兴的RISC-V架构在全球范围内已经掀起了一场热潮,在国内也引起了广泛的关注,但是由于没有很好的中文普及书籍,很多人对于RISC-V仍然是“只闻其声,未见其形”。作者作为国内第一批接触RISC-V架构,并最早研发成功RISC-V处理器的技术专家,在工作之余将其自研的处理器核开源,并著书详细解读其实现细节,体现了作者极高的专业水准和推进国产CPU产业发展的强烈情怀。

1.龙芯

龙芯CPU由中国科学院计算技术所龙芯课题组研制,由中国科学院计算技术所授权的北京神州龙芯集成电路设计公司研发。以下是龙芯CPU芯片的相关简介。

  •  龙芯1号的频率为266MHz,最早在2002年开始使用,如图1-3所示。
  • 龙芯2号的频率最高为1GHz。
  •  龙芯3A系列是国产商用4核处理器。最新龙芯3A3000基于中芯28nm FDSOI工艺,设计为4核64位,主频为1.5GHz,功耗仅为30W,非常适合笔记本平台。
  •  龙芯3B系列是国产商用8核处理器,主频超过1GHz,支持向量运算加速,峰值计算能力达到128GFLOPS,具有很高的性能功耗比。龙芯3B系列主要用于高性能计算机、高性能服务器、数字信号处理等领域。

9ccc0ca9gy1fqmvtxrrvhj208c05k3ys.jpg

2.君正

国内的MIPS系还有另外一家公司——北京君正。君正和龙芯同属于MIPS阵营,与龙芯着力于桌面PC处理器不同,北京君正是国内较早专注于可穿戴、物联网领域的本土IC设计公司之一。由于嵌入式芯片的软件一般按需求定制。这导致在智能可穿戴市场,相当一部分可穿戴产品和应用软件具有专用性,软件生态链相对较短,加上应用需求的多样化,因此不能用一套通用方案来满足所有人的要求,所以在这个领域没有某个厂商可以实现垄断。因此,在智能穿戴市场不容易出现PC和移动手机市场那样被x86与ARM架构垄断的情况。

智能穿戴芯片和物联网芯片对性能要求不高,大部分应用场景更关注低功耗、廉价和尺寸等因素,君正的产品完全满足性能要求,x86处理器不可能应用于该领域,ARM阵营IC设计公司受制于相对较高的授权费,在芯片产量较小的情况下,并不具备价格上的竞争力。君正拥有十多年的芯片设计经验和技术积累,其最大的特点就是具有较高的性能功耗比。国内第一批上市的智能手表包括果壳的第一代智能手表、土曼一代、土曼二代智能手表等都采用了君正的方案。

x86系——北大众志、兆芯和海光

1.北大众志

北京北大众志微系统科技有限责任公司成立于2002年11月,是国家集成电路设计行业的重要骨干企业。2005年,AMD与中国政府达成了协议,科技部指定北大微电子中心接收AMD Geode-2处理器的技术授权,AMD的处理器无疑是x86架构,中国因此获得了x86技术。不过Geode处理器属于AMD嵌入式处理器,因此AMD授权给北大的x86技术属于嵌入式架构。

2.兆芯

另外一家使用x86架构的国内企业——兆芯,也许被更多的人所熟知。众所周知,核心的x86架构是 Intel和AMD公司的核心技术,美国政府也会严格控制其技术的授权。不过,除了Intel和AMD,另外一家中国台湾公司威盛(VIA)也曾经拥有x86架构授权。据称,如图1-8所示,兆芯自主研发的ZX-C处理器于2015年4月量产,28nm工艺,4核处理器,主频可达2.0GHz,并且支持国密算法加密。2017年兆芯宣布其最新一代ZX-D系列4核和8核通用处理器已经成功流片,并透露将在2018年推出16nm的ZX-E 8核CPU。

3.海光

除了上海兆芯,还有一家诞生不久的新锐公司——天津海光。2016年,AMD宣布与中国天津海光投资公司达成了协议,将x86技术授权给海光公司,获得授权费,并且双方还会成立合资公司,授权其生产服务器处理器。据称,为了打开中国高性能服务器市场,AMD这次授权给中国公司的x86很可能是最尖端的x86技术。对于海光的表现,也值得我们拭目以待。

Power系——中晟宏芯

蓝色巨人IBM的Power架构一直是高性能的代言。IBM于2013年联合NVIDIA等公司成立OpenPower开放联盟,其他公司也可以获得Power架构授权。此后还推动成立了中国POWER技术产业生态联盟,与多家中国公司签署了授权协议,中晟宏芯就是其中的一家。中晟宏芯成立于2013年,相信宏芯能用若干年的时间实现技术的消化吸收和推陈出新。

Alpha系——申威

申威处理器或申威CPU,简称“SW处理器”。

申威对自主的Alpha架构在不断深化升级,在双核Alpha基础上拓展了多核架构和SIMD等特色扩展指令集,主要面向高性能计算、服务器领域,在2016年国际超算大会评比中,基于申威26010处理器的“神威太湖之光”超级计算机系统(如图1-9所示)首次亮相并夺冠,其峰值性能达每秒12.5×108亿次浮点运算,成为世界首台运行速度超109亿次的超级计算机。

ARM系——飞腾、华为海思、展讯和华芯通

为了更好地理解本节的内容,有必要先对ARM的授权模式进行介绍。简而言之,ARM公司的主要授权模式可以分为两种。

  1.  授权“ARM处理器IP”给其他的芯片生产商(合作伙伴),后者直接使用ARM处理器IP设计SoC芯片。
  2. 授权“ARM架构”给其他的芯片生产商(合作伙伴),后者基于ARM架构自研其处理器核,然后使用自研处理器核设计SoC芯片。

1.飞腾

飞腾公司是中国国防科技大学高性能处理器研究团队建立的企业,国防科大多年来在CPU领域的耕耘积累了雄厚的技术实力。2016年天津飞腾公布了最新产品FT2000,它最早亮相于2015年的HotChips大会,代号“火星”,定位于高性能服务器、行业业务主机等。FT2000采用ARMv8指令集,但是使用自研内核,不同于市面上ARMv8的Cortex-A53\A57\A72(直接购买于ARM公司的内核)。

FT2000之所以引人注目还因为它在性能方面,包括高达64个FTC661处理器核,其公布的Spec 2006测试中,成绩为整数672、浮点585,足以和Xeon E5-2699v3相媲美。这也是国产服务器芯片第一次在性能上追平Intel,存储器控制芯片总聚合带宽为204.8GB/s,超过目前的E5V3和E7V3,接近IBM POWER8(230GB/s)。跑分与Intel的Xeon E5-2699v3相媲美意味着飞腾2000对于很多商业应用来说已经完全够用了,只要软件生态跟得上,完全可以在商业市场上取代Intel的某些产品。

2.华为海思

华为海思目前是我国技术最强大的芯片开发商之一。华为的麒麟芯片在性能上与高通、三星这些领先的芯片企业处于一个水平。同时华为目前也是国内四大服务器提供商之一,华为、联想、浪潮等国产服务器企业占有中国服务器市场的份额已经超过65%。华为在几年前便已经购买了ARM指令集架构授权,开始研发自有的处理器核,主攻服务器市场。

在“十二五”科技创新成就展上,华为展出了其第一台ARM平台服务器“泰山”,配备自主研发ARM架构64位处理器“Hi1612”,采用台积电16nm工艺,拥有多达16个核心,兼容ARMv8-A指令集。凭借华为强大的研发实力与市场运作能力,相信一定会有不俗的表现。

3.展讯

除华为之外,展讯是另一家国内手机芯片的翘楚。2016年展讯的芯片出货达到67000万套,2017年6月宣布成功研发其自主的ARM架构处理器,展讯宣称在SC9850 4核(Cortex-A7)芯片同样大的面积上实现了6核的设计,功耗和性能都可以按照自己的需求调配,标志着展讯成为了除苹果、三星两家智能手机厂商之外(三星和苹果的自主芯片主要都是自用),继高通之后,第二家拥有自主ARM CPU关键技术的手机芯片厂商。

4.华芯通

2016年,高通与中国贵州政府合资在华成立了一家芯片公司——华芯通半导体,旨在专门为中国市场设计与开发服务器专用芯片的公司。华芯通已获ARM v8-A架构授权,并表示中国成为全球第二大数据中心市场,该授权将帮助华芯通半导体在快速扩张的中国服务器市场推出先进服务器芯片组技术,帮助中国企业在本土市场提供基于ARM的服务器技术,从而推动高效服务器解决方案的大规模部署。

背锅侠ISA

从上述几个章节中,我们已经了解了国内CPU设计的英雄榜。但是如前文所述,目前在民用商业领域内,仍然没有看到太多国产CPU的身影。可以说,国产处理器在民用商业领域至今尚未足够成功的主要原因在于ISA,这口锅ISA必背无疑。

论述了指令集架构(ISA)对于CPU的重要性,那么对于一款CPU而言,绝对的硬件技术水平不是最重要的。

目前商业主流的指令集架构在不同的领域已经各自出现了明显的霸主格局。

  •  x86架构统治着桌面PC与服务器领域。
  • ARM架构统治着移动手持领域,同时对桌面PC和服务器领域全面进军。
  • ARM在嵌入式领域占据绝对优势。

因此作者之前一直认为,只有依附于x86与ARM阵营的商业公司,才能够真正地实现全面的商用化。相信这也是为什么在近几年来国内CPU设计的英雄榜上涌现出来的大多为x86或者ARM系的原因。

但是,国产自主对我国的国计民生又至关重要,追求国产自主安全可控是我国在战略上必须坚持的方向。从这个角度上来看,选择x86或者ARM架构终究也有其局限性,分别论述如下。

1.x86架构

· 由于Intel与AMD本身是芯片公司而不是知识产权(IP)公司,因此x86架构是其生命线,假设其他得到授权的芯片公司使用x86架构生产的芯片对Intel和AMD造成了实质威胁时,Intel与AMD完全可以拿起专利的大棒停止授权。

· x86架构的授权费用极为高昂,远非普通公司或者组织能够染指。

2.ARM架构

· ARM架构的局面会乐观很多,因为ARM架构虽然也是属于ARM公司且受专利保护的架构,但是ARM公司的商业模式是以开放共赢为基本原则。ARM公司是ARM生态的主导者和核心规则的制定者,通过基础架构授权、IP核授权等方式获得经济收益。而生态系统中大量的上下游软硬件企业则遵循ARM统一制定的标准规范,对接众多客户需求而实现经济利益的获取。

· 国内基于ARM生态的CPU产业已有较好基础,华为海思、展讯、联芯和飞腾等众多企业均已累积多年的ARM芯片研发经验,在移动终端领域我国芯片设计技术已与国际主流水平同步,国外的巨头高通、三星和谷歌等也属于ARM生态系统阵营的成员。因此,从全球范围来看,国内外的芯片公司能够在开放共赢的生态下进行公平的竞争。基于上述原因,国内CPU英雄榜上使用ARM架构的CPU公司,其成就更加令人可期。

· 尽管如此,ARM架构毕竟属于ARM公司,一方面需要为ARM公司支付极其高昂的授权费(一次数千万美金),另一方面被软银收购后ARM现在属于一家日本公司。因此,从绝对的自主可控的角度来看,受制于人那是在所难免的。

所谓“成也萧何,败也萧何”,读到此处,读者可能要问,难道就没有一种ISA具备如下几个特点吗?

(1)它开源共享,不属于某一家商业公司私有,因此也就不会有受制于人与自主可控的隐忧,更加不需要向商业公司支付高昂的授权费。

(2)它以开放共赢为基本原则,有一个统一的非盈利组织作为主导者和核心规则的制定者,任何公司和个人都可以永久免费地使用其架构。

  • 生态系统中大量的上下游软硬件企业应遵循该组织统一制定的标准规范,对接众多客户需求而实现经济利益的获取。
  •  同样从全球范围来看,国内国外的芯片公司能够在此开放共赢的生态下进行公平的竞争。

相信很多人都与作者一样,在很长的一段时间内,非常期待有这样一种ISA的出现,业界甚至出现过希望由国家主导指定一种国家标准ISA,从而统一国内CPU各ISA派系的声音。然而,国家标准ISA这种被局限在一国范围内的技术在当今全球化的趋势下,必然是格格不入且不可能成功的。于是所有人都认为不可能出现这样一种ISA了,作者作为一名CPU设计的老兵,也不得不用一首诗来表达一下彼时的心情:“死去元知万事空,但悲不见九州同。王师北定中原日,家祭无忘告乃翁”。

然而在2016年,有一位叫做RISC-V的新生突然自带光环登场。它完全符合上述提到的两个条件,属于全人类的免费开放架构,无任何专利的桎梏,众多国际知名大公司均加入其中,将以开放共赢的生态下进行公平的竞争。作者隐隐感到,如果这个ISA真能够发展起来,这似乎可能是国产CPU崛起的真正机会。刚才我们提到曾有人建议制定一种国家标准的指令集架构,而当RISC-V诞生不久,我们的邻国印度迅速地采用了RISC-V作为其国家标准的指令集,推荐其国内的大学和研究机构均采用RISC-V架构,并且已经制定规划且投入专项资金用于开发几个不同系列的RISC-V处理器。

有道是“山穷水尽疑无路,柳暗花明又一村”,有关新生的RISC-V架构。

人生已是如此艰难,你又何必拆穿——CPU从业者的无奈

对于每一个行业的普通从业者而言,都希望所在行业能够蓬勃发展、欣欣向荣,能够有大量的商业公司参与并产生大量工作岗位的需求。倘使所在的行业或是日暮西山,或是走向寡头化成为一潭死水,自然也就无法诞生大量的工作需求,那普通的从业者们可能就只有“寻寻觅觅,冷冷清清,凄凄惨惨戚戚”,或者“门前冷落鞍马稀,老大嫁作商人妇”了。

处理器设计便是一个典型的例子。虽然处理器设计是一门开放的学科,其所需的技术均已成熟,很多的工程师与从业人员都已经掌握,也具备开发的处理器的能力。但是:

· 由于处理器架构长期以来主要由以Intel(x86架构)与ARM(ARM架构)为代表的商业巨头公司所掌控,及其软件生态环境衍生出的寡头排他效应,成为了普通公司与个人无法逾越的天堑。

· 由于寡头的排他效应,众多的处理器体系结构走向消亡,国产的商用CPU也无法足够成功,从而造成了CPU设计这项工作变成了极少数商业公司的“堂前燕”,普通平民“只可远观,而不可亵玩焉”,国内长期没有形成有足够影响力的相关产业与商业公司。

综上,作者作为曾经在国际一流公司任职的CPU高级设计工程师,竟一度在换工作时面临择业无门的窘境,更扼腕叹息众多同仁被迫转行的情形。正可谓“曲高者和寡,大音者稀声”,CPU设计从业者,颇无奈也。读至此,被迫转行的同仁们可能已经老泪纵横:“人生已是如此的艰难,你又何必拆穿啊”。

好消息是最近几年来国内CPU产业的情形终于发生了的改观,由于中国的巨大市场与产业支持,国内涌现出了如上节中我们提到的兆芯、飞腾、华为、展讯、海光和华芯通等从事CPU设计的公司,且随着《手把手教你设计CPU》介绍的RISC-V架构之诞生,都将催生更多的市场需求。

东边日出西边雨,道是无晴却有晴——RISC-V登场

RISC-V架构主要由伯克利大学的Krste Asanovic教授、Andrew Waterman和Yunsup Lee等开发人员于2010年发明,并且得到了计算机体系结构领域的泰斗David Patterson的大力支持。伯克利大学的开发人员之所以发明一套新的指令集架构,而不是使用成熟的x86或者ARM架构,是因为这些架构经过多年的发展变得极为复杂和冗繁,并且存在着高昂的专利和架构授权问题。并且修改ARM处理器的RTL代码是不被支持的,而x86处理器的源代码根本不可能获得到。其他的开源架构(譬如SPARC、OpenRISC)均有着或多或少的问题(第2章将详细论述)。有感于计算机体系结构和指令集架构已经过数十年的发展非常成熟,但是像伯克利大学这样的研究机构竟然“无米下锅”(选择不出合适的指令集架构供其使用)。伯克利大学的教授与研发人员决定发明一种全新的、简单且开放免费的指令集架构,于是RISC-V架构诞生了。

有关RISC-V的诞生,有兴趣的读者可以自行到网络中查阅文章《伯克利希望将RISC-V开源架构推向主流》。

RISC-V(英文读作“risk-five”),是一种全新的指令集架构。“V”包含两层意思,一是这是Berkeley从RISC I开始设计的第五代指令集架构;二是它代表了变化(Variation)和向量(Vectors)。

经过几年的开发,伯克利大学为RISC-V架构开发除了完整的软件工具链以及若干开源的处理器实例,得到越来越多的人的关注。2016年,RISC-V基金会(Foundation)正式成立开始运作。RISC-V基金会是一个非盈利性的组织,负责维护标准的RISC-V指令集手册与架构文档,并推动RISC-V架构的发展。

RISC-V架构的目标如下。

  • 成为一种完全开放的指令集,可以被任何学术机构或商业组织所自由使用。
  • 成为一种真正适合硬件实现且稳定的标准指令集。

RISC-V基金会负责维护标准的RISC-V架构文档和编译器等CPU所需的软件工具链,任何组织和个人可以随时在RISC-V基金会网站上免费下载(无需注册)。

RISC-V的推出以及基金会的成立,受到了学术界与工业界的巨大欢迎。著名的科技行业分析公司Linley Group 将RISC-V评为“2016年最佳技术”,如图1-12所示。

开放而免费的RISC-V架构诞生,不仅对于高校与研究机构是个好消息;为前期资金缺乏的创业公司、或成本极其敏感的产品、或对现有软件生态依赖不大的领域,都提供了另外一种选择,而且得到了业界主要科技公司的拥戴,包括谷歌、惠普、Oracle和西部数据等硅谷巨头都是RISC-V基金会的创始会员,如图1-13所示。众多的芯片公司已经开始使用(譬如,三星、英伟达等)或者计划使用RISC-V开发其自有的处理器用于其产品。

RISC-V基金会组织每年举行两次公开的专题讨论会(Workshop),以促进RISC-V阵营的交流与发展,任何组织和个人均可以从RISC-V基金会的网站上下载到每次Workshop上演示的PPT与文档。RISC-V第六次Workshop于2017年5月在中国的上海交大举办,如图1-14所示,吸引了大批的中国公司和爱好者参与。

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

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

作者最为推崇的一种设计哲学便是:简单就是美,简单便意味着可靠。无数的实际案例已经佐证了“简单即意味着可靠”的真理,反之越复杂的机器则越容易出错。一个最好的例子便是著名的AK47冲锋枪,正是由于简单可靠的设计哲学,使其性价比和可靠性极其出众,成为世界上应用最广泛的单兵武器。

在格斗界,初学者往往容易陷入追求花式繁复技巧的泥淖,迷信于花拳绣腿。然而顶级的格斗高手,最终使用的都是简单、直接的招式。所谓大道至简,在IC设计的实际工作中,作者曾见过简洁的设计实现其安全可靠,也曾见过繁复的设计长时间无法稳定收敛。简洁的设计往往是可靠的,在大多数的项目实践中一次次得到检验。IC设计的工作性质非常特殊,其最终的产出是芯片,而一款芯片的设计和制造周期均很长,无法像软件代码那样轻易地进行升级和打补丁,每一次芯片的改版到交付都需要几个月的周期。不仅如此,芯片的制造成本费用高昂,从几十万美金到成百上千万美金不等。这些特性都决定了IC设计的试错成本极为高昂,因此能够有效地降低错误的发生就显得非常重要。现代的芯片设计规模越来越大,复杂度也越来越高,并不是要求设计者一味地逃避使用复杂的技术,而是应该将好钢用在刀刃上,将最复杂的设计用在最为关键的场景,在大多数有选择的情况下,尽量选择简洁的实现方案。

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

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

如果对ARM的架构文档熟悉的读者应该了解其篇幅。经过几十年的发展,现在的x86与ARM架构的架构文档多达数千页,打印出来能有半个桌子高,可真是“著作等身”。

想必x86与ARM架构在诞生之初,其篇幅也不至于像现在这般长篇累牍。之所以架构文档长达数千页,且版本众多,一个主要的原因是其架构发展的过程也伴随了现代处理器架构技术的不断发展成熟,并且作为商用的架构,为了能够保持架构的向后兼容性,不得不保留许多过时的定义,或者在定义新的架构部分时为了能够兼容已经存在的技术部分而显得非常的别扭。久而久之就变成了老太婆的裹脚布——极为冗长,可以说是积重难返。

那么现代成熟的架构是否能够选择重新开始,重新定义一个简洁的架构呢?可以说是几乎不可能。Intel也曾经在推出Itanium架构之时另起灶炉,放弃了向前兼容性,最终Intel的Itanium遭遇惨败,其中一个重要的原因便是其无法向前兼容,从而无法得到用户的接受。试想一下,如果我们买了一款具有新的处理器的计算机或者手机,之前所有的软件都无法运行,那肯定是无法让人接受的。

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

目前的“RISC-V架构文档”分为“指令集文档”和“特权架构文档”。“指令集文档”的篇幅为100多页,而“特权架构文档”的篇幅也仅为100页左右。熟悉体系结构的工程师仅需一两天便可将其通读,虽然“RISC-V的架构文档”还在不断地丰富,但是相比“x86的架构文档”与“ARM的架构文档”,RISC-V的篇幅可以说是极其短小精悍。

感兴趣的读者可以登录RISC-V基金会的网站,无需注册便可免费下载文档,如图1-1所示。

​  RISC-V基金会网站上的架构文档​ RISC-V基金会网站上的架构文档

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

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

这种模块化是x86与ARM架构所不具备的。以ARM的架构为例,ARM的架构分为A、R和M,共3个系列,分别针对应用操作系统(Application)、实时(Real-Time)和嵌入式(Embedded)3个领域,彼此之间并不兼容。但是模块化的RISC-V架构能够使得用户灵活地选择不同的模块进行组合,以满足不同的应用场景,可以说是“老少咸宜”。例如针对小面积、低功耗的嵌入式场景,用户可以选择RV32IC组合的指令集,仅使用机器模式(Machine Mode);而针对高性能应用操作系统场景,则可以选择例如RV32IMFDC的指令集,使用机器模式(Machine Mode)与用户模式(User Mode)两种模式。

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

短小精悍的架构和模块化的哲学,使得RISC-V架构的指令数目非常简洁。基本的RISC-V指令数目仅有40多条,加上其他的模块化扩展指令总共几十条指令。图2-2是RISC-V指令集图卡,请参见附录A了解RISC-V指令集的详细信息。

​ RISC-V指令集图卡​ RISC-V指令集图卡

这本书讲什么?

《手把手教你设计CPU》以极为通俗易懂的语言对RISC-V架构进行了系统而全面地介绍,并且结合蜂鸟E200系列开源处理器核对CPU设计技术进行了深入浅出的讲解,图文并茂,生动活泼,体现了作者深厚的专业技能以及将专业知识进行通俗化表述的优秀能力。令人印象深刻的是,本书作者在对RISC-V架构进行介绍的过程中,加入了大量的背景知识解读以及个人注解,使得枯燥的专业知识变得非常易于理解,可以说是难能可贵。这是一本凝聚了作者多年所学的精心之作,非常值得一读,对于RISC-V架构在国内的传播也将具有巨大的推动作用。本书作为国内不可多得的介绍RISC-V的中文书籍,相信一定会成为该领域的经典之作。

这本书目录

第一部分  CPU与RISC-V综述

第1章  一文读懂CPU之三生三世 2

1.1 眼看他起高楼,眼看他宴宾客,眼看他楼塌了——CPU众生相 3

1.1.1  ISA——CPU的灵魂 4

1.1.2  CISC与RISC 5

1.1.3  32位与64位架构 6

1.1.4  ISA众生相 6

1.1.5  CPU的领域之分 10

1.2 ISA请扛起这口锅——为什么国产CPU尚未足够成功 12

1.2.1  MIPS系——龙芯和君正 12

1.2.2  x86系——北大众志、兆芯和海光 13

1.2.3  Power系——中晟宏芯 13

1.2.4  Alpha系——申威 14

1.2.5  ARM系——飞腾、华为海思、展讯和华芯通 14

1.2.6  背锅侠ISA 15

1.3 人生已是如此艰难,你又何必拆穿——CPU从业者的无奈 17

1.4 无敌是多么寂寞——ARM统治着的世界 18

1.4.1  独乐乐与众乐乐——ARM公司的盈利模式 18

1.4.2  小个子有大力量——无处不在的Cortex-M系列 21

1.4.3  移动王者——Cortex-A系列在手持设备领域的巨大成功 23

1.4.4  进击的巨人——ARM进军PC与服务器领域的雄心 25

1.5 东边日出西边雨,道是无晴却有晴——RISC-V登场 25

1.6 原来你是这样的“薯片”——ARM的免费计划 28

1.7 旧时王谢堂前燕,飞入寻常百姓家——你也可以设计自己的处理器 28

第2章  大道至简——RISC-V架构之魂 29

2.1 简单就是美——RISC-V架构的设计

哲学 30

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

2.1.2  能屈能伸——模块化的

指令集 32

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

2.2 RISC-V指令集架构简介 33

2.2.1  模块化的指令子集 33

2.2.2  可配置的通用寄存器组 34

2.2.3  规整的指令编码 34

2.2.4  简洁的存储器访问指令 34

2.2.5  高效的分支跳转指令 35

2.2.6  简洁的子程序调用 36

2.2.7  无条件码执行 37

2.2.8  无分支延迟槽 37

2.2.9  零开销硬件循环 38

2.2.10  简洁的运算指令 38

2.2.11  优雅的压缩指令子集 39

2.2.12  特权模式 40

2.2.13  CSR寄存器 40

2.2.14  中断和异常 40

2.2.15  矢量指令子集 40

2.2.16  自定制指令扩展 41

2.2.17  总结与比较 41

2.3 RISC-V软件工具链 42

2.4 RISC-V和其他开放架构有何不同 44

2.4.1  平民英雄——OpenRISC 44

2.4.2  豪门显贵——SPARC 44

2.4.3  名校优生——RISC-V 45

第3章  乱花渐欲迷人眼——盘点RISC-V商业版本与开源版本 46

3.1 各商业与开源版本综述 47

3.1.1  Rocket Core(开源) 47

3.1.2  BOOM Core(开源) 49

3.1.3  Freedom SoC(开源) 50

3.1.4  LowRISC SoC(开源) 50

3.1.5  PULPino Core and SoC(开源) 50

3.1.6  PicoRV32 Core(开源) 51

3.1.7  SCR1 Core(开源) 51

3.1.8  ORCA Core(开源) 51

3.1.9  Andes Core(商业IP) 52

3.1.10  Microsemi Core(商业IP) 52

3.1.11  Codasip Core(商业IP) 53

3.1.12  蜂鸟E200 Core & SoC(开源) 53

3.2 总结 53

第4章  中国第一个开源RISC-V——蜂鸟E200系列超低功耗Core & SoC 54

4.1 与众不同的蜂鸟E200处理器 55

4.2 蜂鸟E200简介——蜂鸟虽小,

五脏俱全 56

4.3 蜂鸟E200型号系列 57

4.4 蜂鸟E200性能指标 58

4.5 蜂鸟E200配套SoC 59

4.6 蜂鸟E200配置选项 60

第二部分  手把手教你使用

Verilog设计CPU

第5章  先见森林,后观树木——蜂鸟E200设计总览和顶层介绍 65

5.1 处理器硬件设计概述 66

5.1.1  架构和微架构 66

5.1.2  CPU、处理器、Core和

处理器核 66

5.1.3  处理器设计和验证的特点 66

5.2 蜂鸟E200处理器核设计哲学 67

5.3 蜂鸟E200处理器核RTL代码风格

介绍 68

5.3.1  使用标准DFF模块例化生成

寄存器 68

5.3.2  推荐使用assign语法替代if-else和case语法 70

5.3.3  其他若干注意事项 71

5.3.4  小结 72

5.4 蜂鸟E200模块层次划分 72

5.5 蜂鸟E200处理器核源代码 73

5.6 蜂鸟E200处理器核配置选项 73

5.7 蜂鸟E200处理器核支持的RISC-V

指令子集 74

5.8 蜂鸟E200处理器流水线结构 74

5.9 蜂鸟E200处理器核顶层接口介绍 74

5.10 总结 77

第6章  流水线不是流水账——蜂鸟E200

               流水线介绍 78

6.1 处理器流水线概述 79

6.1.1  从经典的五级流水线说起 79

6.1.2  可否不要流水线——流水线和状态机的关系 81

6.1.3  深处种菱浅种稻,不深不浅种荷花——流水线的深度 81

6.1.4  向上生长——越来越深的

流水线 82

6.1.5  向下生长——越来越浅的

流水线 83

6.1.6  总结 83

6.2 处理器流水线中的乱序 83

6.3 处理器流水线中的反压 84

6.4 处理器流水线中的冲突 84

6.4.1  流水线中的资源冲突 84

6.4.2  流水线中的数据冲突 85

6.5 蜂鸟E200处理器的流水线 86

6.5.1  流水线总体结构 86

6.5.2  流水线中的冲突 87

6.6 总结 87

第7章  万事开头难吗——一切从取指令 开始 88

7.1 取指概述 89

7.1.1  取指特点 89

7.1.2  如何快速取指 90

7.1.3  如何处理非对齐指令 91

7.1.4  如何处理分支指令 92

7.2 RISC-V架构特点对于取指的简化 97

7.2.1  规整的指令编码格式 97

7.2.2  指令长度指示码放于低位 97

7.2.3  简单的分支跳转指令 98

7.2.4  没有分支延迟槽指令 100

7.2.5  提供明确的静态分支预测依据 100

7.2.6  提供明确的RAS依据 101

7.3 蜂鸟E200处理器的取指实现 101

7.3.1  IFU总体设计思路 102

7.3.2  Mini-Decode 103

7.3.3  Simple-BPU分支预测 105

7.3.4  PC生成 109

7.3.5  访问ITCM和BIU 111

7.3.6  ITCM 115

7.3.7  BIU 116

7.4 总结 116

第8章  一鼓作气,执行力是关键—— 执行 117

8.1 执行概述 118

8.1.1  指令译码 118

8.1.2  指令执行 118

8.1.3  流水线的冲突 119

8.1.4  指令的交付 119

8.1.5  指令发射、派遣、执行、写回的顺序 119

8.1.6  分支解析 121

8.1.7  小结 121

8.2 RISC-V架构特点对于执行的简化 122

8.2.1  规整的指令编码格式 122

8.2.2  优雅的16位指令 122

8.2.3  精简的指令个数 122

8.2.4  整数指令都是两操作数 123

8.3 蜂鸟E200处理器的执行实现 123

8.3.1  执行指令列表 123

8.3.2  EXU总体设计思路 123

8.3.3  译码 124

8.3.4  整数通用寄存器组 130

8.3.5  CSR寄存器 133

8.3.6  指令发射派遣 134

8.3.7  流水线冲突、长指令和OITF 139

8.3.8  ALU 145

8.3.9  高性能乘除法 157

8.3.10  浮点单元 158

8.3.11  交付 159

8.3.12  写回 159

8.3.13  协处理器扩展 160

8.3.14  小结 160

第9章  善始者实繁,克终者盖寡——交付 161

9.1 处理器交付、取消、冲刷 162

9.1.1  处理器交付、取消、冲刷简介 162

9.1.2  处理器交付常见实现策略 163

9.2 RISC-V架构特点对于交付的简化 164

9.3 蜂鸟E200处理器交付硬件实现 164

9.3.1  分支预测指令的处理 165

9.3.2  中断和异常的处理 168

9.3.3  多周期执行指令的交付 169

9.3.4  小结 169

第10章  让子弹飞一会儿——写回 170

10.1 处理器的写回 171

10.1.1  处理器写回功能简介 171

10.1.2  处理器写回常见策略 171

10.2 蜂鸟E200处理器的写回硬件实现 171

10.2.1  最终写回仲裁 172

10.2.2  OITF和长指令写回仲裁 174

10.2.3  小结 177

第11章  哈弗还是比亚迪—— 存储器架构 178

11.1 存储器架构概述 179

11.1.1  谁说处理器一定要有缓存 179

11.1.2  处理器一定要有存储器 180

11.1.3  ITCM和DTCM 182

11.2 RISC-V架构特点对于存储器访问指令的简化 183

11.2.1  仅支持小端格式 183

11.2.2  无地址自增自减模式 183

11.2.3  无“一次读多个数据”和“一次写多个数据”指令 183

11.3 RISC-V架构的存储器相关指令 184

11.3.1  Load和Store指令 184

11.3.2  Fence指令 184

11.3.3  “A”扩展指令 184

11.4 蜂鸟E200处理器存储器子系统硬件实现 185

11.4.1  存储器子系统总体设计思路 185

11.4.2  AGU 186

11.4.3  LSU 190

11.4.4  ITCM和DTCM 192

11.4.5  “A”扩展指令处理 195

11.4.6  Fence与Fence.I指令处理 200

11.4.7  BIU 202

11.4.8  ECC 202

11.4.9  小结 202

第12章  黑盒子的窗口——总线接口单元BIU 203

12.1 片上总线协议概述 204

12.1.1  AXI 204

12.1.2  AHB 204

12.1.3  APB 205

12.1.4  TileLink 205

12.1.5  总结比较 205

12.2 自定义总线协议ICB 206

12.2.1  ICB总线协议简介 206

12.2.2  ICB总线协议信号 207

12.2.3  ICB总线协议时序 207

12.3 ICB总线的硬件实现 210

12.3.1  一主多从 210

12.3.2  多主一从 211

12.3.3  多主多从 212

12.4 蜂鸟E200处理器核BIU 212

12.4.1  BIU简介 212

12.4.2  BIU微架构 213

12.4.3  BIU源码分析 214

12.5 蜂鸟E200处理器SoC总线 214

12.5.1  SoC总线简介 215

12.5.2  SoC总线微架构 215

12.5.3  SoC总线源码分析 216

12.6 总结 216

第13章  不得不说的故事——中断和异常 217

13.1 中断和异常概述 218

13.1.1  中断概述 218

13.1.2  异常概述 219

13.1.3  广义上的异常 219

13.2 RISC-V架构异常处理机制 221

13.2.1  进入异常 221

13.2.2  退出异常 224

13.2.3  异常服务程序 225

13.3 RISC-V架构中断定义 226

13.3.1  中断类型 226

13.3.2  中断屏蔽 228

13.3.3  中断等待 229

13.3.4  中断优先级与仲裁 230

13.3.5  中断嵌套 230

13.3.6  总结比较 231

13.4 RISC-V架构异常相关CSR

寄存器 232

13.5 蜂鸟E200异常处理的硬件实现 232

13.5.1  蜂鸟E200处理器的异常和中断实现要点 232

13.5.2  蜂鸟E200处理器的异常类型 233

13.5.3  蜂鸟E200处理器对于mepc的处理 234

13.5.4  蜂鸟E200处理器的中断接口 234

13.5.5  蜂鸟E200处理器CLINT微架构及源码分析 235

13.5.6  蜂鸟E200处理器PLIC微架构及源码分析 238

13.5.7  蜂鸟E200处理器交付模块对中断和异常的处理 242

13.5.8  小结 245

第14章  最不起眼的,其实是最难的——  调试机制 246

14.1 调试机制概述 247

14.1.1  交互调试概述 247

14.1.2  跟踪调试概述 249

14.2 RISC-V架构的调试机制 249

14.2.1  调试器软件的实现 250

14.2.2  调试模式 250

14.2.3  调试指令 251

14.2.4  调试机制CSR 251

14.2.5  调试中断 251

14.3 蜂鸟E200调试机制的硬件实现 251

14.3.1  蜂鸟E200交互式调试概述 251

14.3.2  DTM模块 253

14.3.3  硬件调试模块 253

14.3.4  调试中断处理 257

14.3.5  调试机制CSR寄存器的

实现 258

14.3.6  调试机制指令的实现 258

14.3.7  小结 259

第15章  动如脱兔,静若处子——低功耗的诀窍 260

15.1 处理器低功耗技术概述 261

15.1.1  软件层面低功耗 261

15.1.2  系统层面低功耗 261

15.1.3  处理器层面低功耗 262

15.1.4  单元层面低功耗 262

15.1.5  寄存器层面低功耗 263

15.1.6  锁存器层面低功耗 264

15.1.7  SRAM层面低功耗 264

15.1.8  组合逻辑层面低功耗 264

15.1.9  工艺层面低功耗 265

15.2 RISC-V架构的低功耗机制 265

WFI指令 265

15.3 蜂鸟E200低功耗机制的硬件实现 265

15.3.1  蜂鸟E200系统层面低功耗 265

15.3.2  蜂鸟E200处理器层面低功耗 267

15.3.3  蜂鸟E200单元层面低功耗 269

15.3.4  蜂鸟E200寄存器层面低功耗 269

15.3.5  蜂鸟E200锁存器层面低功耗 272

15.3.6  蜂鸟E200 SRAM层面低功耗 273

15.5.7  蜂鸟E200组合逻辑层面低功耗 274

15.5.8  蜂鸟E200工艺层面低功耗 275

15.4 总结 275

第16章  工欲善其事,必先利其器——RISC-V可扩展协处理器 276

16.1 专用领域架构DSA 277

16.2 RISC-V架构的可扩展性 278

16.2.1  RISC-V的预留指令编码

空间 278

16.2.2  RISC-V的预定义的Custom指令 279

16.3 蜂鸟E200的协处理器接口EAI 279

16.3.1  EAI指令的编码 279

16.3.2  EAI接口信号 280

16.3.3  EAI流水线接口 281

16.3.4  EAI存储器接口 282

16.3.5  EAI接口时序 283

16.4 蜂鸟E200的协处理器参考示例 286

16.4.1  示例协处理器需求 286

16.4.2  示例协处理器指令 287

16.4.3  示例协处理器实现 288

16.4.4  示例协处理器性能 289

16.4.5  示例协处理器代码 290

第三部分  使用Verilog进行仿真和在FPGA SoC原型上运行软件

第17章  冒个烟先——运行Verilog仿真测试 292

17.1 E200开源项目的代码层次结构 293

17.2 E200开源项目的测试用例 294

17.2.1  riscv-tests 自测试用例 294

17.2.2  编译ISA自测试用例 295

17.3 E200开源项目的测试平台

(TestBench) 298

17.4 在Verilog TestBench中运行

测试用例 299

第18章  套上壳子上路——实现SoC和FPGA原型 302

18.1 Freedom E310 SoC简介 303

18.2 HBird-E200-SoC简介 304

18.2.1  HBird-E200-SoC组成结构 304

18.2.2  HBird-E200-SoC代码结构 309

18.3 HBird-E200-SoC FPGA原型平台 311

18.3.1  FPGA开发板 311

18.3.2  生成mcs文件烧写FPGA 314

18.3.3  JTAG调试器 317

18.3.4  FPGA原型平台DIY

总结 320

18.4 蜂鸟E200专用FPGA开发板 320

第19章  画龙点睛——运行和调试软件示例 321

19.1 Freedom-E-SDK平台简介 322

19.2 SIRV-E-SDK平台简介 323

19.2.1  SIRV-E-SDK简介 323

19.2.2  SIRV-E-SDK代码结构 324

19.3 使用SIRV-E-SDK运行示例程序 325

19.4 使用GDB和OpenOCD调试示例

程序 328

19.5 Windows图形化IDE开发工具 331

第20章  是骡子是马?拉出来遛遛——运行跑分程序 332

20.1 跑分程序简介 333

20.2 Dhrystone简介 333

20.3 运行Dhrystone Benchmark 335

20.4 CoreMark简介 337

20.5 运行CoreMark Benchmark 338

20.6 总结与比较 340

附录A  RISC-V架构指令集介绍 342

附录B  RISC-V架构CSR寄存器介绍 374

附录C  RISC-V架构的PLIC介绍 384

附录D  存储器模型背景介绍 392

附录E  存储器原子操作指令背景介绍 397

附录F  RISC-V指令编码列表 400

附录G  RISC-V伪指令列表 404

相关好书

9ccc0ca9gy1fqmvppng3nj207s09jwf0.jpg

​《手把手教你设计CPU——RISC-V处理器篇》

胡振波 著

(2018年5月出版)


本书是一本介绍通用CPU设计的入门书,以通俗的语言系统介绍了CPU和RISC-V架构,力求为读者揭开CPU设计的神秘面纱,打开计算机体系结构的大门。 


本书共分为四部分。第一部分是CPU与RISC-V的综述,帮助初学者对CPU和RISC-V快速地建立起认识。第二部分讲解如何使用Verilog设计CPU,使读者掌握处理器核的设计精髓。第三部分主要介绍蜂鸟E203配套的SoC和软件平台,使读者实现蜂鸟E203 RISC-V处理器在FPGA原型平台上的运行。第四部分是附录,介绍了RISC-V指令集架构,辅以作者加入的背景知识解读和注解,以便于读者理解。 ​

9ccc0ca9gy1fqmvqu8u7rj208c08nt8z.jpg

​《操作系统真象还原》

郑钢 著

点击封面购买纸书


一本看得懂,学得会,作者用诙谐幽默语言讲述的深入理解操作系统原理的精品书,学完后读者可以轻松自制操作系统。操作系统并不深奥,本书给予权威解读。历时19个月,行文60余万字,用6000多行代码实现了一个完整的操作系统。 

本书用诙谐幽默的语言,把深奥的操作系统尽量讲解清楚,读者在轻松阅读中就学通了深奥的知识,学完后不但明白了操作系统,读者可以轻松自制一个操作系统,是一本难得的好书。​

9ccc0ca9gy1fqmvr3g8ufj207s097aaf.jpg

​《自制编程语言——基于C语言》

郑钢  著

(2018年5月出版)


“纯手工”:不需要第三方库和工具,充分了解各个细节的原理及实现。实现的是面向对象脚本语言,这涉及到虚拟机的实现,让读者领略脚本语言的内部实现。  

今日互动

你对自己设计CPU的看法?截止时间4月26日17时,留言+转发本活动到朋友圈,小编将抽奖选出5名读者赠送e读版100元异步社区代金券一张,(留言点赞最多的自动获得一张)。


推荐阅读

2018年4月新书书单

异步图书最全Python书单

一份程序员必备的算法书单

第一本Python神经网络编程图书

9ccc0ca9gy1fqgvkjm2cjj209k09ka9w.jpg

​长按二维码,可以关注我们哟

每天与你分享IT好文。


在“异步图书”后台回复“关注”,即可免费获得2000门在线视频课程;推荐朋友关注根据提示获取赠书链接,免费得异步e读版图书一本。赶紧来参加哦!

点击阅读原文,直接购买《操作系统真象还原》

阅读原文


网友评论

登录后评论
0/500
评论
异步社区
+ 关注