基本信息

【插图】

编辑推荐
深入剖析CPU设计与开发的关键环节
从零开始逐步构建一个功能完善的CPU
全面培养CPU设计的工程化思维与实战能力
内容简介
作译者
邢金璋 硕士毕业于中国科学院计算技术研究所,2015年加入龙芯中科技术股份有限公司,从事处理器核结构设计工作,是龙芯小、中系列处理器核演进版本的主要结构设计者之一。近年来,积极参与“龙芯杯”全国大学生计算机系统能力培养大赛的技术支持、培训等工作。
目录
序
前言
第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.2 FPGA的设计流程 8
2.2.1 FPGA的一般设计流程 9
2.2.2 基于Vivado的FPGA设计流程 10
2.2.3 Vivado使用小贴士 33
2.3 任务与实践 35
第3章 数字逻辑电路设计基础 36
3.1 数字逻辑电路设计与Verilog代码开发 36
3.1.1 面向硬件电路的设计思维方式 37
3.1.2 行为描述的Verilog编程风格 38
前言
那么CPU设计到底难不难呢?实话说,要做出具有世界一流水平的产品确实不容易。别看CPU个头不大,它却是一个复杂度极高的系统。设计CPU挑战的是一个团队进行复杂系统工程研发的能力。不过,从20世纪60年代第一款CPU问世至今,CPU设计所涉及的基本技术已经很成熟了。同时,自动化设计工具的水平也有了大幅度提升。普通学习者想在CPU设计领域初窥堂奥,不再是无法实现的梦想。
本书作者在给新入行的工程师进行培训以及给高校学生授课的过程中,得到的反馈却并不乐观。对于大多数新手来说,设计一个入门级的CPU还是很有难度的。结合我们在研发工作中的成长经历,以及在培训和教学过程中获得的反馈,我们认为最大的难点在于设计一个CPU需要综合掌握多方面的知识,而初学者往往在“综合”这个环节遇到了困难。毫不夸张地说,对于设计一个入门级CPU所需要的各方面知识,我们都能找出很多优秀的教材、讲义、论文、代码。如果仅仅把这些资料交给一个初学者,让他通过自学这些资料来设计CPU,那么能把CPU设计出来的只有少数“悟性高”的人。我们都知道,一个国家要想提高某项体育运动的水平,关键的因素是从事该项运动的人数足够多。同理,要想在信息技术的核心领域做到世界一流,没有一大批“懂行”的技术开发人员是很难实现的。面对当前急需芯片开发人才的形势,要想在短时间内培养出大量行业急需的高素质人才,仅仅指望学习者自身“悟性高”是行不通的,需要找到行之有效的学习和训练方法。
本书作者所在的龙芯团队自主研发CPU产品近20年,在CPU设计方面积累了丰富的实战经验。在本书中,我们将结合自身的研发实践,尽可能深入浅出地介绍如何从零开始一步步设计出一个入门级的CPU,以及在这个过程中应该掌握哪些知识、遵守哪些设计原则、规避哪些设计风险、使用哪些开发技巧。我们希望这些从工程实践中总结的经验能作为高校课程教学中知识讲授环节的有益补充,帮助更多初学者更快、更扎实地掌握CPU设计的知识,具备CPU设计能力。
本书的内容安排
本书分为三个部分。第1~3章为第一部分,介绍业界进行CPU研发的过程以及硬件/云端平台、FPGA设计、Verilog等CPU设计中必要的基础知识。第4~10章为第二部分。在第二部分,我们从设计一个简单的单周期CPU开始,逐步引入流水线设计,添加指令,增加例外和中断的支持,并完成AXI总线接口、TLB MMU和高速缓存(Cache)的设计与实现,最终完成一个入门级CPU的设计。这样一个处理器核已经不再是用来玩“过家家”游戏的玩具,而是一个能够满足绝大多数实际的嵌入式应用场景需求、可以运行教学用的操作系统的真实产品。第11章为第三部分,在这里,我们会对一些进阶设计内容给出建议,例如会介绍如何在第二部分完成的产品基础上添加少量的指令和功能,再在CPU上运行Linux内核。
各章的内容简要介绍如下。
第1章介绍CPU芯片产品的研发过程,使读者对CPU产品开发的全过程有初步的认识和了解,为后续各章的学习奠定基础。
第2章介绍硬件实验平台及FPGA设计流程,包括“龙芯CPU设计与体系结构教学实验系统”硬件实验平台的介绍,以及FPGA的一般设计流程和基于Vivado工具的FPGA设计流程。
第3章介绍数字逻辑电路设计。这一章会结合CPU的实际设计开发工作,对如何使用Verilog代码进行数字逻辑电路设计给出建议,并给出CPU设计中常用的数字逻辑电路的可综合Verilog描述。此外,这一章还会介绍数字逻辑电路功能仿真中常见的错误及其调试方法。对于缺少电路仿真调试经验的初学者来说,这部分内容具有很好的指导作用。
第4章介绍简单流水线CPU设计。这一章将从一个支持19条指令的单周期CPU设计开始,先讨论如何将其改造成不考虑相关冲突的流水线,然后考虑用阻塞解决相关冲突,最后引入数据前递设计。在介绍设计方法的同时,这一章还对书中所采用的实验开发环境进行介绍,并讲解相关的仿真调试技术。
第5章介绍如何在流水线CPU中添加运算类指令。主要内容包括如何在第4章完成的简单流水线CPU基础之上添加算术逻辑运算类指令、乘除法运算类指令,以及乘除法配套的数据搬运指令。
第6章介绍如何在流水线CPU中添加转移指令和访存指令。主要内容包括如何在第5章完成的CPU基础之上添加条件分支、间接跳转和Link类转移三类转移指令,以及添加对齐与非对齐访存指令。
第7章介绍例外和中断。这一章首先对例外和中断的基本概念,以及MIPS指令系统中的例外和中断的定义进行简要的梳理,然后介绍如何在第6章完成的CPU基础之上添加对于例外和中断的支持。CPU有了这两部分的支持之后,就可以运行一些简单的嵌入式操作系统了。
第8章介绍AXI总线接口设计。这一章首先对完成CPU设计所需要的AXI总线协议的相关内容加以回顾,然后通过实现类SRAM总线接口、实现类SRAM-AXI转接桥、集成类SRAM-AXI转接桥三个阶段性任务来完成CPU中AXI总线接口的添加。
第9章介绍TLB MMU的设计。这一章首先对TLB相关的知识点进行梳理,然后通过TLB模块的设计实现、TLB相关CP0寄存器与指令的实现、将TLB模块集成到流水线中完成虚实地址转换功能并支持TLB例外这三个阶段性任务来完成整个TLB MMU的设计。
第10章介绍高速缓存(Cache)设计。这一章只介绍最简单的Cache设计,其设计任务同样被分解成Cache模块设计、Cache模块集成、CACHE指令支持三个循序渐进的阶段性任务。
第11章就一些进阶设计问题给出我们的建议,主要涉及启动内核需要补充哪些设计、如何进一步提升主频、如何进行超标量设计、如何设计动态调度机制、如何设计转移预测器、如何优化访存性能、如何设计动态调度机制以及如何添加多核支持。
本书的附录分别对本书案例相关的开发板、Vivado的安装与进阶使用、MIPS指令系统规范、在线调试等内容进行了补充介绍。
可以看到,本书主体内容是围绕着一系列进阶任务展开的。在第二部分的每一章中,都会给出有针对性的任务,同时给出与之对应的知识点与设计建议。完成本书各章“任务与实践”部分所需资源可登录华章网站(www.hzbook.com)下载。我们希望读者在时间和精力允许的情况下,先尝试根据自己的想法完成设计任务,有了自己的深入思考和亲身实践后,再来看书中给出的讲解,相信会有不一样的体会,正所谓“不愤不启,不悱不发”。之所以推荐这种比较“虐”自己的学习方式,源于作者在长期的研发工作中得到的一个感悟:好的工程师是bug“喂”出来的。对于CPU设计与开发这种工程性、实践性极强的工作来说,眼观千遍不如手过一遍。前辈们千叮咛、万嘱咐不要犯的错,非要自己错过一次才能刻骨铭心;教科书上、论文中已经写得清清楚楚的设计思路,只有自己在设计的路上碰壁无数次之后才会有如获至宝的欣喜。要想真正进入CPU设计的大门,仅仅靠坐在图书馆里看书几十个小时是远远不够的,它需要走路、吃饭甚至是睡觉的时候都在思考如何设计的那种“为伊消得人憔悴”,更需要通宵达旦调试的那份执着与坚持。
序言
计算机专业教育既要凝练计算技术发展中的“不变要素”,也要更好地体现时代变化引发的教育内容的更新;既要突出计算机科学与技术专业的核心地位与基础作用,也需兼顾新设专业对专业知识结构所带来的影响。适应智能时代需求的计算机类高素质人才,除了应具备科学思维、创新素养、敏锐感知、协同意识、终身学习和持续发展等综合素养与能力外,还应具有深厚的数理理论基础、扎实的计算思维与系统思维、新型计算系统创新设计以及智能应用系统综合研发等专业素养和能力。
智能时代计算机类专业教育计算机类专业系统能力培养2.0研究组在分析计算机科学技术及其应用发展特征、创新人才素养与能力需求的基础上,重构和优化了计算机类专业在数理基础、计算平台、算法与软件以及应用共性各层面的知识结构,形成了计算与系统思维、新型系统设计创新实践等能力体系,并将所提出的智能时代计算机类人才专业素养及综合能力培养融于专业教育的各个环节之中,构建了适应时代的计算机类专业教育主流模式。
自2008年开始,教育部计算机类专业教学指导委员会就组织专家组开展计算机系统能力培养的研究、实践和推广,以注重计算系统硬件与软件有机融合、强化系统设计与优化能力为主体,取得了很好的成效。2018年以来,为了适应智能时代计算机教育的重要变化,计算机类专业教学指导委员会及时扩充了专家组成员,继续实施和深化智能时代计算机类专业教育的研究与实践工作,并基于这些工作形成计算机类专业系统能力培养2.0。
本系列教材就是依据智能时代计算机类专业教育研究结果而组织编写并出版的。其中的教材在智能时代计算机专业教育研究组起草的指导大纲框架下,形成不同风格,各有重点与侧重。其中多数将在已有优秀教材的基础上,依据智能时代计算机类专业教育改革与发展需求,优化结构、重组知识,既注重不变要素凝练,又体现内容适时更新;有的对现有计算机专业知识结构依据智能时代发展需求进行有机组合与重新构建;有的打破已有教材内容格局,支持更为科学合理的知识单元与知识点群,方便在有效教学时间范围内实施高效的教学;有的依据新型计算理论与技术或新型领域应用发展而新编,注重新型计算模型的变化,体现新型系统结构,强化新型软件开发方法,反映新型应用形态。
本系列教材在编写与出版过程中,十分关注计算机专业教育与新一代信息技术应用的深度融合,将实施教材出版与MOOC模式的深度结合、教学内容与新型试验平台的有机结合,以及教学效果评价与智能教育发展的紧密结合。
本系列教材的出版,将支撑和服务智能时代我国计算机类专业教育,期望得到广大计算机教育界同人的关注与支持,恳请提出建议与意见。期望我国广大计算机教育界同人同心协力,努力培养适应智能时代的高素质创新人才,以推动我国智能科技的发展以及相关领域的综合应用,为实现教育强国和国家发展目标做出贡献。
智能时代计算机类专业教育计算机类专业系统能力培养2.0研究组
2020年1月
媒体评论
本书作者从事CPU产品自主研发工作近20年,在CPU设计方面积累了丰富的经验,并一直尝试在教学过程中将这些经验转化为教学内容,探索一条培养CPU设计人才的行之有效的途径。本书是作者在这项工作上的总结。
本书特点:
按照CPU设计的实际工程过程安排内容。本书分为三个部分:第一部分从工程化的视角介绍业界进行CPU研发的过程,并且提炼出完成CPU设计应具备的FPGA设计、Verilog、软硬件平台等方面的基础知识;第二部分围绕一个基本的单周期CPU的设计,逐步引入流水线、指令、例外和中断、总线、高速缓存等部分的设计和实现,最终完成一个入门级的CPU设计;第三部分则在基本CPU的基础上进一步添加常见指令和功能,启发读者的创造力,使设计出的CPU更接近真实产品。通过这样循序渐进、层层深入的安排,引导读者逐步掌握CPU的设计方法。
融入大量工程实践经验、设计原则、开发技巧、需要规避的设计风险、常见错误等内容,帮助读者理解在真实的工程场景中应该考虑的问题,学会在各种现实条件下进行权衡,根据目标找到最优的解决方案。
涵盖设计思维、设计方法到设计工具的全面介绍,案例丰富,可操作性强。通过学习本书,读者不仅可以掌握CPU的设计方法,更能在这个过程中很好地训练工程设计思维,为今后的工作打下坚实的基础。