购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

PREFACE

与汪文祥老师相识源于2016年。彼时,以本科生开发CPU、操作系统、编译器为目标的系统能力培养教学改革已进入第10个年头。在教育部高等学校计算机类专业教学指导委员会(以下简称“教指委”)的大力推动下,在北京大学、北京航空航天大学、国防科技大学、南京大学、清华大学、上海交通大学、浙江大学、中国科学技术大学这8所系统能力培养示范高校的带动下,全国数十所高校加入教学改革的行列,系统能力培养逐渐成为计算机类专业教学研究与改革的热点之一。

“十年磨一剑,霜刃未曾试”。系统能力之“剑”磨了十年,其锋利程度如何呢?经过深入考虑和多方调研,我们决定举办全国大学生计算机系统能力大赛,以此来检验教学改革的成效,进一步推进教学改革,并建立产学协同育人的生态。这个想法得到了龙芯公司的积极响应,并指派汪老师加入大赛的技术组。

大赛从哪个环节开始呢?从技术角度,CPU是计算机系统乃至信息技术领域的基石。从产业的角度,如果我国有一大批熟知CPU等硬件系统原理与特性的人才,那么他们必将在我国信息技术产业中发挥重要的作用;从教学改革的角度,CPU相关的教学改革启动早、持续久、体系全、影响大;从学生培养的角度,能做出CPU的学生必定是一流的学生,其专业基础与能力毋庸置疑,更重要的是这些学生有过做出CPU的“巅峰体验”,这势必极大增强其挑战未来的信心与雄心。最终,我们决定于2017年先行启动CPU赛道,这在一定程度上也是为其他赛道“探路”。

从2017年到2023年,连续七届大赛让我们看到了学生们对CPU设计的热情,他们的学习能力、工程能力与创新能力超出我们的想象。更令人高兴的是,一些高校将系统能力大赛技术方案融入课程教学中,实现了教学支撑竞赛、竞赛牵引教学的良性循环。

但同时,我们注意到对于本科二年级、三年级的学生来说,开发一个CPU并非易事。人才培养的核心要义在于普惠。教育者必须努力寻找和构建一个适合绝大多数学生的技术路线,不仅要降低他们的学习难度,还应使他们能运用工程化的方法完成具有挑战性的成果。因此,必须要进一步缩小教学与竞赛的难度差。

在我们技术组几位成员的“游说”下,汪老师勇挑重担,在2021年出版了《CPU设计实战》一书,这本书的出版为读者进行CPU设计实战带来了极大的参考价值,成为很多全国大学生计算机系统能力大赛CPU设计赛参赛选手的必读书目之一,伴随他们度过比赛之旅。

随着龙芯公司LoongArch指令集的成熟和产业应用的不断扩大,高校开始在课程体系中嵌入LoongArch指令集的实践内容,同时全国大学生计算机系统能力大赛CPU设计赛也开始支持LoongArch指令集。基于这样的背景,汪老师决定基于LoongArch指令集重新编写《CPU设计实战》。这本书的独特之处很多,印象最深的有以下几点:

1)对初学者非常友好。这本书从介绍工业界真实的CPU设计流程开始,一步步带领读者从单周期CPU设计逐步深入到流水线、添加指令、增加异常与中断的支持,并完成AX总线接口、TLB MMU和Cache的设计,最终开发出一个入门级CPU。在此基础上还可以增加指令、运行Linux,进一步完善CPU的功能和性能。读者完全可以按照书中的指导设计出自己的CPU。

2)融入了很多工程经验。产品化的CPU开发要考虑很多工程因素、注意很多工程细节,这些知识通常在教科书中是不会讲到的。汪老师结合自己丰富的开发经验,在书中给出了很多提示和指引来帮助读者解决设计过程中那些看似不起眼但常常会困扰大家的问题,甚至对如何阅读、理解指令系统规范,汪老师也分享了自己的经验。对于读者来说,这些实践中的真知灼见不仅对于设计CPU是非常宝贵的,对于未来的工作也具有重要的参考价值。

3)适合作为计算机组成、体系结构相关课程的配套实践教材。汪老师长期兼任中国科学院大学本科体系结构课程的教师,深谙系统类课程教学的痛点和难点。本书很多素材来源于汪老师在教学中的实践和思考,他很好地将理论课程中离散的知识点熔接为一套系统化的知识体系,从而有助于提升教与学的质量。

系统能力培养是计算机类专业的一次教育、教学改革的重大探索与实践。对于正在或即将开展系统能力培养教学改革的众多高校与任课教师,对于积极备战全国大学生计算机系统能力大赛的广大参赛选手,这本书都能提供有益的参考。

祝各位阅读愉快!

高小鹏
北京航空航天大学 Ag83eDcac/0XGafMsHhygXv9YF/l7mL35Tjx8+GwZU2UNmhZVAI3ckmH9at6Nl/e



PREFACE
前言

CPU ,中文全称为“ 中央处理器 ”,简称“ 处理器 ”,是现代电子计算机的核心器件。如果你想了解一台计算机是如何构建并工作起来的,那么深入了解CPU的设计非常有用。不过,这个美好的愿望是否会遭遇“骨感”的现实呢?毕竟一谈及CPU,大家马上会想到的是英特尔(Intel)、超微半导体(AMD)、苹果(Apple)、安谋(ARM)、高通(Qualcomm)这些国际知名公司生产的产品,进而认为CPU设计是一件遥不可及的事情,普通学习者要想掌握它简直就是天方夜谭。

那么CPU设计到底难不难呢?说实话,要做出具有世界一流水平的产品确实不容易。别看CPU个头不大,它却是一个复杂度极高的系统。设计CPU挑战的是一个团队进行复杂系统工程研发的能力。不过,从20世纪60年代第一款CPU问世至今,CPU设计所涉及的基本技术已经很成熟了,同时,自动化设计工具的水平也有了大幅度提升,普通学习者想在CPU设计领域初窥堂奥,不再是无法实现的梦想。

我们在给新入行的工程师进行培训以及给高校学生授课的过程中,得到的反馈却并不乐观。对于大多数新人来说,设计一个入门级的CPU还是很有难度的。结合我们在研发工作中的成长经历,以及在培训和教学过程中获得的反馈,我们认为最大的难点在于设计一个CPU需要综合掌握多方面的知识,而初学者往往在“综合”这个环节遇到困难。毫不夸张地说,对于设计一个入门级CPU所需要的各方面知识,我们都能找出很多对应的优秀教材、讲义、论文、代码。如果仅仅把这些资料交给一个初学者,让他通过自学这些资料来设计CPU,那么能把CPU设计出来的只有少数“悟性高”的人。我们都知道,一个国家要想切实提高某项体育运动的整体水平,关键是要增加参与和从事该项运动的人员数量。同理,要想在信息技术的核心领域做到世界一流,没有一大批“懂行”的技术开发人员是很难实现的。面对当前急需芯片开发人才的现状,要想在短时间内培养出大量行业急需的高素质人才,仅仅指望学习者自身“悟性高”是行不通的,需要找到行之有效的学习和训练方法。

我们所在的龙芯团队进行CPU产品自主研发已有20余年,在CPU设计方面积累了丰富的实战经验。在本书中,我们将结合自身的研发实践,尽可能深入浅出地介绍如何从零开始一步步设计出一个入门级的CPU,以及在这个过程中应该掌握哪些知识、遵守哪些设计原则、规避哪些设计风险、可以使用哪些开发技巧。我们希望这些从工程实践中总结的经验能作为高校相关课程教学中知识讲授环节的有益补充,帮助更多初学者更快、更扎实地掌握CPU设计的知识,从而具备CPU设计能力。

本书内容安排

本书从逻辑上分为三个部分。第1~3章为第一部分,介绍产业界进行CPU研发的过程以及本地与远程FPGA实验平台、FPGA上板实现、Verilog应用实例等CPU设计中必要的基础知识。第4~10章为第二部分。第二部分从一个仅实现5条指令的单周期CPU设计开始,逐步引入流水线设计,添加指令,增加异常和中断的支持,并完成AXI总线接口、TLB MMU和高速缓存(Cache)的设计与实现,最终完成一个入门级CPU的设计。这样一个CPU已经不再是一个大作业级别的课程设计,而是一个能够满足绝大多数实际的嵌入式应用场景需求、可以运行教学用的操作系统的真实作品。第11和12章为第三部分,在这一部分,我们为准备进阶设计的读者提供一些指导和建议,包括进阶实验开发环境与常用的设计优化方案。

全书各章的内容简要介绍如下。

第1章简要介绍CPU芯片产品的研发过程,使读者对CPU产品开发的全过程有初步的认识和了解,为后续各章的学习奠定基础。

第2章介绍硬件实验平台及FPGA设计流程,包括龙芯体系结构教学硬件实验平台的介绍,以及FPGA的一般设计流程和基于Vivado工具的FPGA实现流程。

第3章复习数字逻辑电路设计相关内容。结合CPU的实际设计开发需求,对如何使用Verilog代码进行数字逻辑电路设计给出建议,并给出CPU设计中常用的数字逻辑电路的可综合Verilog描述示例。此外,这一章还会讲述数字逻辑电路功能仿真的常见错误及调试方法。对于缺少电路仿真调试经验的初学者来说,这部分内容具有很好的指导作用。

第4章介绍单周期CPU设计。这一章将从一个支持5条指令的单周期CPU设计开始,逐步扩展设计直至支持20条指令。在讲述设计的过程中,这一章还将穿插介绍验证设计所需的实验环境以及基于trace比对的仿真调试方法。

第5章介绍简单流水线CPU设计。这一章将对前一章完成的单周期CPU设计进行流水化改进,先讨论如何将其改造成不考虑相关冲突的流水线,然后考虑用阻塞解决相关冲突,最后引入数据前递设计。在介绍设计方法的同时,这一章还将分享一些CPU设计的仿真调试技术。

第6章介绍如何在流水线CPU中继续实现更多普通用户态指令的支持,具体包括算术逻辑运算类指令、乘除法运算类指令、转移指令和访存指令。

第7章介绍异常和中断的实现。这一章首先对异常和中断的基本概念,以及LoongArch指令系统中的异常和中断的具体定义进行简要的梳理,然后介绍如何在前一章完成的CPU基础之上实现异常和中断的支持。有了这两部分的支持之后,CPU就可以运行一些简单的嵌入式操作系统了。

第8章介绍AXI总线接口设计。这一章首先对完成CPU设计所需要的AXI总线协议的相关内容加以简要回顾,然后通过实现类SRAM总线接口、实现类SRAM-AXI转接桥、集成类SRAM-AXI转接桥三个阶段性任务来完成CPU中AXI总线接口的添加。

第9章介绍存储管理单元(MMU)的设计。这一章首先对MMU相关的知识点进行梳理,然后通过TLB模块的设计实现、MMU相关CSR(控制状态寄存器)与指令的实现,以及TLB模块集成到流水线中并支持MMU相关异常几个阶段性任务来完成整个MMU的设计。

第10章介绍高速缓存(Cache)设计。这一章只介绍最简单的Cache设计,其设计任务同样被分解成Cache模块设计、Cache模块集成、Cache维护指令支持这三个循序渐进的阶段性任务。

第11章介绍进阶实验开发环境。这一章介绍的实验开发环境主要基于龙芯教育开源芯片开发平台chiplab构建,具体涉及整个开发环境的组织与构成、软件仿真功能验证和FPGA上板功能验证。

第12章就一些进阶设计优化方案给出建议,主要涉及如何进一步提升主频、如何进行超标量设计、如何设计动态调度机制、如何设计转移预测器、如何优化访存性能以及如何添加多核支持。

本书后面的附录分别对书中使用的本地实验环境、Vivado软件的安装和使用等内容进行了补充介绍。

可以看到,本书主体内容是围绕着一系列进阶任务展开的。第二部分的每一章都会给出有针对性的任务,同时给出与之对应的知识点与设计建议。我们希望读者在时间和精力允许的情况下,先尝试根据自己的想法完成设计任务,经过深入思考和亲身实践后,再来看书中给出的讲解,相信一定会有不一样的体会,正所谓“不愤不启,不悱不发”。之所以推荐这种比较“自虐”的学习方式,源于作者在长期的研发工作中得到的一个感悟:好的工程师是bug“喂”出来的。对于CPU设计与开发这种工程性、实践性极强的工作来说,眼观千遍不如手过一遍。前辈们千叮咛、万嘱咐不要犯的错,非要自己错过一次才能刻骨铭心;教科书上、论文中已经写得清清楚楚的设计思路,只有自己在设计的路上碰壁无数次之后才会有如获至宝的欣喜。要想真正迈入CPU设计的大门,仅仅靠坐在图书馆里看几十个小时书是远远不够的,它需要走路、吃饭甚至睡觉的时候都在思考如何设计的那种“为伊消得人憔悴”,更需要通宵达旦调试的那份执着与坚持。

致谢

本书的写作得到了我们所任职的龙芯中科技术股份有限公司的大力支持。正是在多个部门的众多同事的帮助之下,我们才能从零开始写完本书并完成所有的实验任务的开发。在此感谢他们对本书的无私支持!特别感谢龙芯公司芯片研发部、教育事业部和龙芯实验室的同事和同学们,没有他们的辛勤付出,本书将无法面世。

我们也非常感谢教育部高等学校计算机类专业教学指导委员会、系统能力培养教学研究专家组,以及机械工业出版社的各位专家和老师,感谢所有致力于我国大学生计算机系统能力培养的老师们,正是他们的满腔热情和不懈努力激励着我们写出本书。我们衷心希望本书能为我国大学生计算机系统能力培养事业尽一份绵薄之力。

我们还要特别感谢中国科学院大学参与计算机体系结构研讨课的同学们,以及历届全国大学生计算机系统能力大赛CPU设计赛(龙芯杯)的参赛选手们,他们的反馈让这本书的内容更加充实和完整。

由于CPU设计和开发工作体系庞大、内容繁多,尽管我们已经尽力展现其中的核心内容,但难免有挂一漏万之处,恳请各位老师和读者批评、指正。

作者 Ag83eDcac/0XGafMsHhygXv9YF/l7mL35Tjx8+GwZU2UNmhZVAI3ckmH9at6Nl/e

点击中间区域
呼出菜单
上一章
目录
下一章
×