- ISBN:9787111674139
- 装帧:一般胶版纸
- 册数:暂无
- 重量:暂无
- 开本:24cm
- 页数:16,358页
- 出版时间:2021-04-01
- 条形码:9787111674139 ; 978-7-111-67413-9
本书特色
适读人群 :高校计算机专业的本科生、研究生,从事计算机芯片开发的技术人员、高校从事计算机组成、体系结构课程教学的教师(1)本书按照CPU设计的实际工程过程安排内容。全书分为三个部分:**部分从工程化的视角介绍业界进行CPU研发的过程,并且提炼出完成CPU设计应具备的FPGA设计、Verilog、软硬件平台等方面的基础知识;第二部分围绕一个基本的单周期CPU的设计,逐步引入流水线、指令、例外和中断、总线、高速缓存等部分的设计和实现,*终完成一个入门级的CPU设计;第三部分则在基本CPU的基础上进一步添加常见指令和功能,启发读者的创造力,使设计出的CPU更接近真实产品。通过这样循序渐进、层层深入的安排,引导读者逐步掌握CPU的设计方法。 (2)书中融入大量工程实践经验、设计原则、开发技巧、需要规避的设计风险、常见错误等内容,帮助读者理解在真实的工程场景中应该考虑的问题,学会在各种现实条件下进行权衡,根据目标找到*优的解决方案。 (3)涵盖设计思维、设计方法到设计工具的全面介绍,案例丰富,可操作性强。通过学习本书,读者不仅可以掌握CPU的设计方法,更能在这个过程中很好地训练工程设计思维,为今后的工作打下坚实的基础。
内容简介
本书面向CPU设计的初学者, 采用循序渐进、层层推进的方式介绍CPU的完整开发过程。全书包括三部分, **部分介绍工程化CPU的研发过程以及设计CPU需要掌握的基础知识 ; 第二部分从一个基本的单周期CPU设计开始, 逐步引入流水线、指令、例外、中断等功能, 并完成总线、TLB MMU、高速缓存等功能的设计 ; 第三部分为进阶设计内容, 涵盖Linux内核、提升主频、双发射流水、动态调度、访存优化、多核处理器等功能的实现。
目录
目 录
丛书序言
序
前言
第1章CPU芯片研发过程概述 1
1.1处理器和处理器核 1
1.2芯片产品的研制过程 2
1.3芯片设计的工作阶段 3
第2章硬件实验平台及FPGA设计流程 5
2.1硬件实验平台 5
2.1.1龙芯CPU设计与体系结构教学实验系统 5
2.1.2龙芯计算机系统能力培养远程实验平台 7
2.2FPGA的设计流程 8
2.2.1FPGA的一般设计流程 9
2.2.2基于Vivado的FPGA设计流程 10
2.2.3Vivado使用小贴士 33
2.3任务与实践 35
第3章数字逻辑电路设计基础 36
3.1数字逻辑电路设计与Verilog代码开发 36
3.1.1面向硬件电路的设计思维方式 37
3.1.2行为描述的Verilog编程风格 38
3.1.3自顶向下的设计划分过程 38
3.1.4常用数字逻辑电路的Verilog描述 39
3.2数字逻辑电路功能仿真的常见错误及其调试方法 55
3.2.1功能仿真波形分析 56
3.2.2波形异常类错误的调试 60
3.3进一步使用Vivado 66
3.3.1定制同步RAM IP核 66
3.3.2定制异步RAM IP核 68
3.3.3查看时序结果和资源利用率 69
3.4任务与实践 69
3.4.1实践任务一:寄存器堆仿真 70
3.4.2实践任务二:同步RAM和异步RAM仿真、综合与实现 71
3.4.3实践任务三:数字逻辑电路的设计与调试 72
第4章简单流水线CPU设计 74
4.1设计一个简单的单周期CPU 75
4.1.1设计单周期CPU的总体思路 75
4.1.2单周期CPU的数据通路设计 76
4.1.3单周期CPU的控制信号生成 88
4.1.4复位的处理 91
4.2不考虑相关冲突的流水线CPU设计 92
4.2.1添加流水级间缓存 92
4.2.2同步RAM的引入 93
4.2.3调整更新PC的数据通路 96
4.2.4不考虑相关冲突情况下流水线控制信号的设计 96
4.3CPU设计开发环境(CPU_CDE) 97
4.3.1快速上手CPU设计的开发环境 97
4.3.2CPU设计开发环境的组织与结构 99
4.3.3CPU设计开发环境使用进阶 113
4.4CPU设计的功能仿真调试技术 117
4.4.1为什么要用基于Trace比对的调试辅助手段 117
4.4.2基于Trace比对调试手段的盲区及其对策 119
4.4.3学会阅读汇编程序和反汇编代码 119
4.4.4CPU调试中要抓取的信号以及如何看这些信号 124
4.5指令相关与流水线冲突 125
4.5.1处理寄存器写后读数据相关引发的流水线冲突 126
4.5.2转移计算未完成 127
4.6流水线数据的前递设计 127
4.6.1前递的数据通路设计 128
4.6.2前递的流水线控制信号调整 130
4.6.3前递引发的主频下降 131
4.7任务与实践 131
4.7.1实践任务一:简单CPU参考设计调试 132
4.7.2实践任务二:用阻塞技术解决相关引发的冲突 132
4.7.3实践任务三:用前递技术解决相关引发的冲突 133
第5章在流水线中添加运算类指令 134
5.1算术逻辑运算类指令的添加 134
5.1.1ADD、ADDI和SUB指令的添加 134
5.1.2SLTI和SLTIU指令的添加 135
5.1.3ANDI、ORI和XORI指令的添加 135
5.1.4SLLV、SRLV和SRAV指令的添加 135
5.2乘除法运算类指令的添加 136
5.2.1调用Xilinx IP实现乘除法运算部件 136
5.2.2电路级实现乘法器 140
5.2.3电路级实现除法器 147
5.3乘除法配套数据搬运指令的添加 154
5.3.1乘法运算实现为单周期的情况 155
5.3.2乘法运算实现为多周期流水的情况 155
5.4任务与实践 156
第6章在流水线中添加转移指令和访存指令 157
6.1转移指令的添加 157
6.1.1BGEZ、BGTZ、BLEZ和BLTZ指令 158
6.1.2J指令 158
6.1.3BLTZAL和BGEZAL指令 158
6.1.4JALR指令 158
6.2访存指令的添加 158
6.2.1LB、LBU、LH和LHU指令的添加 158
6.2.2SB和SH指令的添加 159
6.2.3非对齐访存指令的说明 160
6.2.4LWL和LWR指令的添加 162
6.2.5SWL和SWR指令的添加 164
6.3任务与实践 164
第7章例外和中断的支持 166
7.1例外和中断的基本概念 166
7.1.1例外是一套软硬件协同处理的机制 166
7.1.2精确例外 167
7.2MIPS指令系统中与例外相关的功能定义 168
7.2.1CP0寄存器 168
7.2.2例外产生条件的判定 168
7.2.3例外入口 170
7.2.4MFC0和MTC0指令 170
7.2.5ERET指令 170
7.3流水线CPU实现例外和中断的设计要点 170
7.3.1例外检测逻辑 170
7.3.2精确例外的实现 172
7.3.3CP0寄存器 173
7.3.4CP0冲突 179
7.4任务与实践 180
7.4.1实践任务一:添加syscall例外支持 181
7.4.2实践任务二:添加其他例外支持 181
第8章AXI总线接口设计 184
8.1类SRAM总线 184
8.1.1主方和从方 185
8.1.2类SRAM总线接口信号的定义 185
8.1.3类SRAM总线的读写时序 186
8.1.4类SRAM总线的约束 189
8.2类SRAM总线的设计 189
8.2.1取指设计的考虑 190
8.2.2访存设计的考虑 195
8.3AXI总线协议 195
8.3.1AXI总线信号一览 195
8.3.2理解AXI总线协议 197
8.3.3类SRAM总线接口信号与AXI总线接口信号的关系 202
8.4类SRAM-AXI的转接桥设计 203
8.4.1转接桥的顶层接口 203
8.4.2转接桥的设计要求 204
8.4.3转接桥的设计建议 204
8.5任务与实践 205
8.5.1实践任务一:添加类SRAM总线支持 205
8.5.2实践任务二:添加AXI总线支持 208
8.5.3实践任务三:完成AXI随机延迟验证 210
第9章TLB MMU设计 211
9.1TLB模块的基础知识 212
9.1.1TLB的虚实地址转换 212
9.1.2TLB的软件访问 214
9.1.3TLB的软硬件交互机制 215
9.2TLB模块设计的分析 217
9.3TLB相关的CP0寄存器与指令的实现 219
9.4利用TLB进行虚实地址转换及TLB例外 221
9.5任务与实践 222
9.5.1实践任务一:TLB模块设计 222
9.5.2实践任务二:添加TLB相关指令和CP0寄存器 224
9.5.3实践任务三:添加TLB相关例外支持 225
第10章高速缓存设计 226
10.1Cache模块的设计 227
10.1.1Cache的设计规格 227
10.1.2Cache模块的数据通路设计 228
10.1.3Cache模块内部的控制逻辑设计 237
10.1.4Cache的硬件初始化问题 241
10.2将Cache模块集成至CPU中 242
10.2.1Cache命中情况下的CPU流水线适配 242
10.2.2Cache缺失情况下的CPU流水线适配 243
10.2.3Uncache访问的处理 243
10.3CACHE指令 245
10.3.1CACHE指令的定义 245
10.3.2CACHE指令的实现 247
10.4性能测试程序 247
10.4.1Dhrystone 247
10.4.2Coremark 250
10.5Cache的性能 251
10.6任务与实践 252
10.6.1实践任务一:Cache模块设计 252
10.6.2实践任务二:在CPU中集成ICache 254
10.6.3实践任务三:在CPU中集成DCache 255
10.6.4实践任务四:在CPU中添加CACHE指令 256
第11章进阶设计 258
11.1运行Linux内核 258
11.1.1复杂SoC搭建 259
11.1.2CPU的进一步完善 259
11.1.3调试建议 260
11.2提升主频的常用方法 261
11.2.1平衡各级流水线的延迟 261
11.2.2优化大概率事件的处理逻辑 261
11.2.3用面积和功耗换时序 262
11.2.4进一步切分流水线 262
11.3静态双发射流水线的实现 262
11.4动态调度机制的实现 263
11.4.1一个双发射动态调度流水线的设计实例 263
11.4.2动态调度中常见电路结构的RTL实现 266
11.5硬件转移预测技术 266
11.5.1硬件转移预测的流水线设计框架 267
11.5.2一个轻量级转移预测器的设计规格 268
11.6访存优化技术 269
11.6.1store buffer 269
11.6.2Non-blocking Cache 270
11.6.3访存乱序执行 271
11.6.4多级Cache 271
11.6.5Cache预取 272
11.7多核处理器的实现 272
11.7.1多核互联结构 273
11.7.2多核编号 273
11.7.3核间中断 273
11.7.4多核情况下的存储一致性 274
11.7.5LL-SC指令对的访存原子性 282
附录A龙芯CPU设计与体系结构教学实验系统 285
附录BVivado的安装 288
附录C简单MIPS指令系统规范 301
附录DVivado使用进阶 345
作者简介
汪文祥 工学博士,龙芯中科技术股份有限公司首席工程师,中国科学院大学岗位教授。主要研究方向为处理器体系结构设计、处理器验证及计算机系统性能分析优化等,参与了多项国家“核高基”、863 和 973 项目,在国内外各种期刊会议发表文章十余篇,申请专利数十项,授权专利十余项。2012年起任龙芯中科芯片研发部IP组组长,负责龙芯系列CPU IP核的开发研制及维护,参与制订龙芯指令系统架构规范。 邢金璋 硕士毕业于中国科学院计算技术研究所,2015年加入龙芯中科技术股份有限公司,从事处理器核结构设计工作,是龙芯小、中系列处理器核演进版本的主要结构设计者之一。近年来,积极参与“龙芯杯”全国大学生计算机系统能力培养大赛的技术支持、培训等工作。
-
全图解零基础word excel ppt 应用教程
¥15.6¥48.0 -
有限与无限的游戏:一个哲学家眼中的竞技世界
¥37.4¥68.0 -
硅谷之火-人与计算机的未来
¥12.7¥39.8 -
情感计算
¥66.8¥89.0 -
大模型RAG实战 RAG原理、应用与系统构建
¥69.3¥99.0 -
LINUX企业运维实战(REDIS+ZABBIX+NGINX+PROMETHEUS+GRAFANA+LNMP)
¥51.8¥69.0 -
AI虚拟数字人:商业模式+形象创建+视频直播+案例应用
¥67.4¥89.8 -
LINUX实战——从入门到精通
¥51.8¥69.0 -
UNIX环境高级编程(第3版)
¥164.9¥229.0 -
剪映AI
¥52.8¥88.0 -
快速部署大模型:LLM策略与实践(基于ChatGPT等大语言模型)
¥56.9¥79.0 -
数据驱动的工业人工智能:建模方法与应用
¥68.3¥99.0 -
深度学习高手笔记 卷2:经典应用
¥90.9¥129.8 -
纹样之美:中国传统经典纹样速查手册
¥81.8¥109.0 -
UG NX 12.0数控编程
¥24.8¥45.0 -
MATLAB计算机视觉与深度学习实战(第2版)
¥90.9¥128.0 -
UN NX 12.0多轴数控编程案例教程
¥24.3¥38.0 -
微机组装与系统维护技术教程(第二版)
¥37.8¥43.0 -
Go 语言运维开发 : Kubernetes 项目实战
¥38.7¥79.0 -
明解C语言:实践篇
¥62.9¥89.8