手把手教你设计CPU——RISC-V处理器篇 pdf

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

内容简介

胡振波,上海交通大学电子工程系本科、微电子学院硕士。拥有业界多年ASIC和CPU设计与验证经验,先后在Marvell任职ARM架构CPU设计高级工程师、在Synopsys任职研发经理、在比特大陆任职IC设计总监、在武汉聚芯微电子任职架构师,现致力于推动RISC-V架构在国内的传播和发展。

作者简介

本书是一本介绍通用CPU设计的入门书,以通俗的语言系统介绍了CPU和RISC-V架构,力求为读者揭开CPU设计的神秘面纱,打开计算机体系结构的大门。本书共分为四部分。第一部分是CPU与RISC-V的综述,帮助初学者对CPU和RISC-V快速地建立起认识。第二部分讲解如何使用Verilog设计CPU,使读者掌握处理器核的设计精髓。第三部分主要介绍蜂鸟E203配套的SoC和软件平台,使读者实现蜂鸟E203 RISC-V处理器在FPGA原型平台上的运行。第四部分是附录,介绍了RISC-V指令集架构,辅以作者加入的背景知识解读和注解,以便于读者理解。本书不仅适合CPU或芯片设计相关从业者阅读使用,也适合作为大中专院校相关师生学习RISC-V处理器设计(使用Verilog语言)和CPU设计的指导用书。

目录

第 一部分 CPU与RISC-V综述
第 1章 一文读懂CPU之三生三世 2
1.1 眼看他起高楼,眼看他宴宾客,眼看他楼塌了——CPU众生相 3
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.2 RISC-V指令集架构简介 33
2.3 RISC-V软件工具链 42
2.4 RISC-V和其他开放架构有何不同 44

第3章 乱花渐欲迷人眼——盘点RISC-V商业版本与开源版本 46
3.1 各商业版本与开源版本综述 47
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.2 蜂鸟E200处理器核设计哲学 67
5.3 蜂鸟E200处理器核RTL代码风格介绍 68
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.2 处理器流水线中的乱序 83
6.3 处理器流水线中的反压 84
6.4 处理器流水线中的冲突 84
6.5 蜂鸟E200处理器的流水线 86
6.6 总结 87
第7章 万事开头难吗—— 一切从取指令开始 88
7.1 取指概述 89
7.2 RISC-V架构特点对于取指的简化 97
7.3 蜂鸟E200处理器的取指实现 101
7.4 总结 116
第8章 一鼓作气,执行力是关键——执行 117
8.1 执行概述 118
8.2 RISC-V架构特点对于执行的简化 121
8.3 蜂鸟E200处理器的执行实现 123

第9章 善始者实繁,克终者盖寡——交付 161
9.1 处理器交付、取消、冲刷 162
9.2 RISC-V架构特点对于交付的简化 164
9.3 蜂鸟E200处理器交付硬件实现 164
第 10章 让子弹飞一会儿——写回 170
10.1 处理器的写回 171
10.2 蜂鸟E200处理器的写回硬件实现 171
第 11章 哈弗还是比亚迪——存储器架构 178
11.1 存储器架构概述 179
11.2 RISC-V架构特点对于存储器访问指令的简化 183
11.3 RISC-V架构的存储器相关指令 184
11.4 蜂鸟E200处理器存储器子系统硬件实现 185
第 12章 黑盒子的窗口——总线接口单元BIU 203
12.1 片上总线协议概述 204
12.2 自定义总线协议ICB 206
12.3 ICB总线的硬件实现 210
12.4 蜂鸟E200处理器核BIU 212
12.5 蜂鸟E200处理器SoC总线 214
12.6 总结 216
第 13章 不得不说的故事——中断和异常 217
13.1 中断和异常概述 218
13.2 RISC-V架构异常处理机制 221
13.3 RISC-V架构中断定义 226
13.4 RISC-V架构异常相关CSR寄存器 232
13.5 蜂鸟E200异常处理的硬件实现 232
第 14章 最不起眼的,其实是最难的——调试机制 246
14.1 调试机制概述 247
14.2 RISC-V架构的调试机制 249
14.3 蜂鸟E200调试机制的硬件实现 251

第 15章 动如脱兔,静若处子——低功耗的诀窍 260
15.1 处理器低功耗技术概述 261
15.2 RISC-V架构的低功耗机制 265
15.3 蜂鸟E200低功耗机制的硬件实现 265
15.4 总结 275
第 16章 工欲善其事,必先利其器——RISC-V可扩展协处理器 276
16.1 专用领域架构DSA 277
16.2 RISC-V架构的可扩展性 278
16.3 蜂鸟E200的协处理器接口EAI 279
16.4 蜂鸟E200的协处理器参考示例 286
第三部分 使用Verilog进行仿真和在FPGA SoC原型上运行软件
第 17章 冒个烟先——运行Verilog仿真测试 292
17.1 E200开源项目的代码层次结构 293
17.2 E200开源项目的测试用例 294
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.3 HBird-E200-SoC FPGA原型平台 311
18.4 蜂鸟E200专用FPGA开发板 320
第 19章 画龙点睛——运行和调试软件示例 321
19.1 Freedom-E-SDK平台简介 322
19.2 SIRV-E-SDK平台简介 323
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

附录部分 RISC-V架构详述附录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

感悟与笔记

CPU的众生相

  1. 指令集架构
    • CPU:Central Processing Unit,全称中央处理器单元,简称处理器。
    • CPU和Core的区别,平时我们讲的CPU通常指的是一块完整的SoC(处理器核Core+内部外设),在没有系统学习嵌入式的时候,很少有人会听到这个概念,因为习惯的原因,很多人也会把CPU误认为就是处理器核,忽略了内部外设,这是很糟糕的想法。总之,我们平时多遇到的也是SoC(System on Chip)。
    • CPU的核心-指令集架构,书上给了一张知名CPU指令集架构的诞生表,里面有吸引我的是这几个,我记录下:
      • Intel 8086的CPU指令集架构-1978年
      • ARM的CPU指令集架构–1985年
      • MIPS的CPU指令集架构–1985年(单字长定点指令平均执行速度)
      • Alpha的CPU指令集架构–1992年(阿尔法)
      • AMD64的CPU指令集架构(EMT64)–2003年
    • 指令:一组处理器进行操作的最小单元(比如:加减乘除、读写存储器等)。
    • 指令集架构:有时也说是“架构”或“处理器架构”,这个东西课本上没有定义,个人认为可以理解为在指令集(指令集合)的基础上,进一步添加一些规则之类的构成的一个层。注意,这里出现了分层的概念,简简单单的先分了三个层:硬件层、指令集架构层和软件层。不难发现,其实位于中间一层的指令集架构实际上是对一种相似硬件的描述,只要这个指令集架构是一样的(具体硬件层的实现方案微架构性能和成本会有不同),软件都无需做任何修改地能在同一款指令集架构的处理器上去运行。这点特别重要,因为软件是很复杂的,如果让硬件去适应软件,那么带来的第一个问题就是,硬件层出不穷,设计不便。因此,这种设计是合理的,我们需要让软件去适应硬件,在给定指令集架构的帮助下,完成对各种顶层功能的实现。
    • 指令集架构不仅仅是一组指令的集合,它还要定义任何软件程序员需要了解的硬件信息,包括:数据类型、存储模型、软件可见的处理器状态、指令集、系统模型和外部接口(课本上有图,看着挺详细的)。
    • 其实,从这点就不难发现,汇编语言难学的主要原因在于,我们学的时候,需要和相应的CPU指令集架构进行一对一的学习,不同指令集架构设计的CPU,汇编语言是不一样的,需要记忆的东西比较多,这里我想到了两款架构:X86和ARM。
    • X86架构:泛指一系列基于Intel 8086且向后兼容的中央处理器指令集架构。最早的8086处理器于1978年由Intel推出,为16位微处理器。
    • ARM:一个32位元精简指令集中央处理器架构。
  2. CISC和RISC
    • CISC:复杂指令集(Complex Instruction Set Computer),不仅包含处理器常用的指令集,还包含了许多不常用的特殊指令,指令数目比较多,我记得好像有200多条。
      RISC:精简指令集(Reduced Instruction Set Computer),只包含常有处理器常有的指令,对于不常用的操作,需要通过执行多条常有指令的方式来达到同样的效果。
    • 读到这里,我开始有些想法了,这两个概念在听朱老师的视频时,讲的特别详细。首先,Intel是CISC,ARM是RISC的,RISC的诞生其实是迫不得已的,当时那个年代,基本上都是CISC的天下,很多事情,设计CPU的人已经实现了,我们只需要在这个基础上进行指令背诵和开发就好了,而RISC不一样,CPU只实现了一小部分,很多东西,其实需要程序员自己去实现,提高了灵活性。
    • 当时的ARM被迫设计了RISC,却收获了意想不到的成绩,因为CISC随着发展,出现了很多问题,其中最为明显的就是功耗和面积:当今社会,电子产品如果不谈功耗,基本上就是一个废品,以前还行,现在人们日常的移动设备,耗电迅速的产品很快就会被市场淘汰,要不然低功耗算法设计的相关职位,也成为现在的热门。CISC由于指令越来越多,实现的功能越来越复杂,但是实际开发过程中,可能不会用到这么多指令,按书上说的,基本上只用到了20%,剩下的80%只能说是以备不时之需啊,可这些东西都是硬件电路实现的,如果一插上电源,CPU就会运转相关的电路,难免有无需损耗的电能流失,不经耗电快,发热也快,造成CPU老化迅速,并且设计硬件的时间成本和面积都是需要着重考虑的。

会员免费下载

链接:https://pan.baidu.com/s/1vbmBacY1XmgwDKjkhGyXYw

提取码: ****** 查看

¥69/年 开通VIP会员

成为本站VIP会员即可无限下载。 请先点击百度网盘,看资源是否还在,不在请点击链接通知站长补资源。

资源标签点击标签可查看对应分类的资源

其他

资源推荐

免费 图解数据结构:使用Java

C++ 程序设计语言:第4部分 标准库(原书第4版)

C++编程思想(两卷合订本)

CSS世界

JavaScript DOM编程艺术(第2版)

C++ Primer Plus(第6版) 中文版

Vue.js快速入门

Java编程思想(第4版) [thinking in java]

Copyright © 2021-2022 知识猫. All Rights Reserved.