本书是一本以产教融合思想为指引,面向处理器与系统芯片设计人才培养的新型教材,主要分为基础和实验两部分。基础部分侧重于基于开源指令架构RISC-V并结合阿里平头哥半导体公司的玄铁C910等先进处理器案例讲授计算机体系结构的基本原理。RISC-V架构的开放性与良好生态为理论知识的教学提供了更好的蓝本,通过剖析业界先进的RISC-V处理器也使理论知识能够更好地联系具体应用。实验部分详细介绍基于RISC-V开源项目开发的系列实验,包括编译与仿真工具链实验、体系结构探索实验、SoC设计实验等内容,充分利用了平头哥XuanTie处理器、Wujian100 SoC平台等工业级的开发资源,使学生可以切实感受体系结构知识的实践运用和完整的软硬件开发流程。
1.融入主流应用,系统性凝练知识体系。
2.结合企业实际,注重培养工程师实践能力。
3.依托前沿场景,聚焦业务逻辑,实现应用开发。
这本教材,把最新的RISC-V技术发展动态融合进理论授课中,引入真实的工业级处理器案例和软硬件开发流程,让学生紧跟产业前沿,并通过相关的实验教学内容构建理论联系实际的学习过程。
韩军,复旦大学教授,中国计算机学会计算机工程与工艺专业委员会常务委员及教育工作组组长、复旦大学集成芯片与系统全国重点实验室 IP 与芯片架构创新中心主任、国家重点研发计划“光电子与微电子器件及集成”重点专项“高能效人机交互芯片技术”项目首席科学家、国家自然科学基金重点项目负责人。以第一作者和通信作者在国内外重要的学术期刊与会议上发表论文 90 篇,获 30 项国家发明专利。担任《电子学报》、Microelectronics Journal 和Chinese Journal of Electronics编委会委员。长期致力于开展处理器架构与系统芯片的产学合作。
第 一章 计算机体系结构简介 1
1.1 计算机的过去,现在和未来 1
1.1.1 计算机的历史回顾 1
1.1.2 计算机的发展现状 4
1.1.3 计算机的未来趋势 8
1.2 计算机体系结构的定义 13
1.2.1 ISA 14
1.2.2 微架构 16
1.2.3 硬件实现 18
1.3 主流ISA介绍 18
1.3.1 ISA的诞生 19
1.3.2 CISC架构指令集 19
1.3.3 RISC架构指令集 21
1.4 案例学习:平头哥C910处理器介绍 27
1.4.1 平头哥公司介绍 27
1.4.2 玄铁C910简介 28
1.4.3 玄铁C910的处理器微架构 28
1.4.4 玄铁C910的工作模式 32
1.5 本章小结 32
第二章 指令集基本原理 34
2.1 指令集的发展历史与分类 34
2.1.1 CISC和RISC之争 35
2.1.2 指令集的分类 36
2.2 指令寻址模式 37
2.2.1 指令的组成 38
2.2.2 常见的指令寻址模式 38
2.3 数据类型与指令操作 39
2.3.1 RISC-V指令集的数据类型 39
2.3.2 指令操作分类 40
2.3.3 控制流指令 42
2.4 指令集编码 42
2.4.1 可变长度编码与固定长度编码 43
2.4.2 操作码的编码 44
2.4.3 RISC-V的指令编码 45
2.5 特权等级与CSR 46
2.5.1 特权等级 47
2.5.2 RISC-V指令集的CSR 48
2.6 指令集的ABI规定 49
2.7 案例学习:平头哥C910处理器的自定义指令 50
2.7.1 Cache指令子集 51
2.7.2 多核同步指令子集 51
2.7.3 算术运算指令子集 52
2.7.4 位操作指令子集 52
2.7.5 存储指令子集 53
2.8 本章小结 53
第三章 处理器流水线结构 55
3.1 实现RISC指令集的典型硬件结构 55
3.1.1 微架构与指令集的关系 55
3.1.2 RV32I指令集的数据通路 56
3.2 基础流水线 60
3.2.1 流水线的基本概念 60
3.2.2 基础流水线的性能分析 64
3.3 流水线冲突 66
3.3.1结构冲突(structural hazard) 66
3.3.2控制冲突(control hazard) 66
3.3.3数据冲突(data hazard) 67
3.4 前馈 69
3.5 乱序执行和超标量流水线 72
3.5.1 基础流水线的性能瓶颈 72
3.5.2 多发射(multiple issue)技术与超标量(superscalar)技术 73
3.5.3 乱序执行与动态调度 74
3.5.4 重排序缓冲区(reorder buffer,ROB) 77
3.5.5 寄存器重命名和Tomasulo算法 80
3.6 分支预测 85
3.6.1 静态预测 85
3.6.2 局部预测器 86
3.6.3 相关预测器 90
3.6.4 预测跳转地址 91
3.6.5 指令复用 94
3.6.6 预测的代价 95
3.6.7 BOOM中的分支预测器 96
3.7 指令级并行的过去与未来 102
3.8 案例学习:平头哥C910处理器的指令级并行 104
3.9 本章小结 105
第四章 计算机存储系统 107
4.1 半导体存储技术 107
4.1.1 SRAM 108
4.1.2 DRAM 108
4.1.3 flash 109
4.1.4 RRAM 111
4.1.5存储技术在计算机中的应用 111
4.2 虚拟存储(virtual memory) 112
4.2.1 虚拟存储的工作原理 112
4.2.2 保护进程 114
4.2.3 页式虚拟存储的可能结构 115
4.3 处理器与内存的速度差距:内存墙 117
4.4 缓存 118
4.4.1 缓存的概念 118
4.4.2 缓存的基本性质 119
4.5 缓存结构示例 124
4.6 缓存的性能和基本优化手段 124
4.6.1 增加缓存容量,以降低缺失率 125
4.6.2 增加路数,以降低缺失率 125
4.6.3 增加块粒度,以降低缺失率 126
4.6.4 缓存读优先于缓存写,以降低缺失惩罚 126
4.6.5 多级缓存,以降低缺失惩罚 126
4.6.6 地址翻译和缓存索引并行,以减少命中时间 127
4.7 多核处理器中的缓存一致性 128
4.7.1 缓存一致性协议的分类和比较 129
4.7.2 MSI一致性协议 131
4.8 案例学习:平头哥C910处理器的存储系统 133
4.8.1 平头哥玄铁C910的缓存层次 134
4.8.2 平头哥玄铁C910缓存优化手段 136
4.8.3 平头哥玄铁C910的虚拟内存系统 137
4.9 本章小结 139
第五章 计算机I/O原理 140
5.1 I/O概述 140
5.1.1 I/O设备 141
5.1.2 I/O接口和I/O总线 142
5.2 I/O设备与主机间的通信 145
5.2.1 处理器查询方式 145
5.2.2 中断方式 147
5.2.3 DMA方式 148
5.3 常见的I/O总线协议 151
5.3.1 PCI,PCI-X,PCI-E 151
5.3.2 SCSI,SAS,iSCSI 152
5.3.3 ATA,SATA 153
5.4 磁盘的基本原理 154
5.4.1 磁盘的经典结构 154
5.4.2 磁盘的演化 155
5.4.3 磁盘阵列 157
5.5 排队论简介 163
5.5.1 队列系统的简单抽象 163
5.5.2 队列系统的表示——Kendall表示法 164
5.5.3 Little定理 165
5.5.4 用排队论评估简单的I/O系统 165
5.6 案例学习:wujian100的USI模块 167
5.6.1 UART 169
5.6.2 SPI 170
5.6.3 I2C 172
5.7 本章小结 173
第六章 SoC系统设计 175
6.1 SoC概述 175
6.1.1 SoC简介 175
6.1.2 SoC的基本组成 176
6.1.3 SoC的优势 178
6.1.4 SoC面临的发展挑战 180
6.2 系统总线 181
6.2.1 总线概述 181
6.2.2 AMBA总线 183
6.3 SoC软硬件协同开发 189
6.3.1 SoC的软件环境 189
6.3.2 SoC的软硬件协同设计 190
6.4 案例学习:wujian100 SoC平台 195
6.5 本章小结 198
第七章 嵌入式操作系统 200
7.1 操作系统简介 200
7.1.1 操作系统的基本概念 200
7.1.2 操作系统的发展历史 201
7.1.3 嵌入式操作系统的主要特点 203
7.2 进程与保护 204
7.2.1 进程的基本概念 204
7.2.2 进程保护 207
7.3 进程调度 209
7.3.1 单处理器进程调度 210
7.3.2 实时调度 213
7.4 文件管理 215
7.4.1 文件系统 215
7.4.2 目录 217
7.4.3 文件 219
7.5 案例学习:在RISC-V处理器上运行Linux系统 220
7.5.1 GNU和LLVM项目 220
7.5.2 准备交叉编译环境 222
7.5.3 编译内核 223
7.5.4 根文件系统和引导程序 224
7.6 本章小结 226
第八章 体系结构仿真器实验 227
8.1 RISC-V交叉编译和仿真环境的安装与配置 227
8.1.1 实验目的 227
8.1.2 实验介绍 227
8.1.3 实验内容 229
8.2 QEMU运行裸机程序与Linux系统并调试 234
8.2.1 实验目的 234
8.2.2 实验介绍 234
8.2.3 实验内容 236
8.3 RISC-V汇编程序编程练习 247
8.3.1 实验目的 247
8.3.2 实验介绍 247
8.3.3 实验内容 250
8.4 QEMU上运行YOLO算法 254
8.4.1 实验目的 254
8.4.2 实验介绍 254
8.4.3 实验内容 259
8.5 本章小结 264
第九章 RTL级的SoC平台仿真实验 265
9.1 SMART平台基础操作实验 265
9.1.1 实验目的 265
9.1.2 实验介绍 265
9.1.3 实验内容 268
9.2 缓存操作实验 270
9.2.1 实验目的 270
9.2.2 实验介绍 270
9.2.3 实验内容 271
9.3 分支预测实验 275
9.3.1 实验目的 275
9.3.2 实验介绍 275
9.3.3 实验内容 276
9.4 YOLO综合仿真实验 278
9.4.1 实验目的 278
9.4.2 实验介绍 278
9.4.3 实验内容 281
9.5 本章小结 285
第十章 基于FPGA的SoC板级测试实验 286
10.1 wujian100平台介绍和FPGA测试 286
10.1.1 实验目的 286
10.1.2 实验介绍 286
10.1.3 实验内容 288
10.2 语音识别电子系统综合设计 295
10.2.1 实验目的 295
10.2.2 实验介绍 295
10.2.3 实验内容 301
10.3 本章小结 303