计算机原理与设计pdf李亚民
计算机原理与设计pdf 李亚民 扫描版序言李亚民教授长期从事计算机原理和体系结构的教学与研究,他出版过三本教科书53637,发表过大量的杂志与会议文章。本书是他近年来执教和科研的实践总结。他的《计算机组成与系统结构》教科书在2000年由清华大学出版社出版;2005年清华大学出版社出版的《CPU芯片逻辑设计技术》是基于李亚民教授在清华大学系列讲座的内容而整理出版的。李亚民教授的这本新书和上述两本书相比,有很多新的发展和不同点。统观全书,它贯穿了用 Verilog hdl来描述计算机的各种部件和用 Verilog HDL技术来设计CPU各部件。这是本书一个很重要的特点。这种描述和设计技术是要作者花费很大工夫自己去理解和实践的。单从这点而言,可见本书作者在著写本书时,要投入比著写一般“计算机原理”书籍更多的时间和心血。这个特点带给读者的好处是:学完本书后,不仅懂了计算机原理,也可以基本掌握计算机的一种重要的设计技术。此外,这本书的内容也增加了一些重要的环节,如CPU中的多核和多线程技术。大家知道,多核和多线程是今后计算机较长期间的发展方向,尤其是近年来高性能计算进入千万亿次时代以后,多核和多线程技术会有更蓬勃的发展。本书这方面的内容也是计算机学生应该掌握的新内容。本书还增加了浮点部件FPU设计浮点和整数部件结合成整体的完整的流水线CPU设计、带有 Cache和TLB的多核CPU的设计、常用IO接口的设计。本书中所讲授的计算机各部件,都尽量给出了 Verilog HDL源代码。这些 Verilog HDL源代码都经过 QuartusⅡ或者 Verilog的验证。这也体现了作者写书的严谨性和所花费的精力。中国的计算机事业在改革开放以来,取得了飞速的发展。在高性能计算、网络技术、软件、计算机产业等方面都取得了举世瞩目的成就。然而,我国必须继续重视计算机发展的基础,这就是计算机的设计技术,尤其是计算机芯片设计技术。这方面的不足是和计算机教育分不开的。我国很多大学的“计算机原理”、“计算机组成与结构”的课程讲授和计算机设计技术基础脱离,学生学完计算机原理与组成却点未掌握计算机设计技术。本书特点是理论和实践的密切结合。希望本书的出版和推广,能加强大学计算机教学领域内的理论与实践的结合。很多工程领域的结构都好像是个金字塔,只有基础更广泛和更结实了,金字塔的塔尖才可以构建得更高。我们寄希望于广大的大学生和研究生!只有更多的年轻人掌握了计算机和CPU的设计技术,我国的计算机和cPU设计技术才会攀登新的高峰!李三立中国工程院院士清华大学教授2011年5月1日前言欢迎阅读本书。首先郑重声明:本书所载的 Verilog hdl源代码可以随便使用、随便更改。但本书作者对任何大学、研究所、公司或者个人由于使用本书所载的Verilog hdl源代码设计CPU或者任何其他电路所造成的任何损失不承拒任何责任。也许有读者会问:“现在出版的计算机原理、计算机组成与结构的教科书已经很多了,你为什么还要写这本书?”诚如本书书名《计算机原理与设计—Ⅴ erilog hDL版》所提示的那样,本书不光讲计算机原理,也讲计算机设计,而且是用 VerilogHDL讲计算机设计。如果只看教科书讲的原理而不自己动手设计,就如同有人向你描述有一种水果是什么什么味道,听了半天也只能感觉和想象。还不如花一分钟亲口尝一尝:噢,原来是这个味道,这就是传说中的梨子吗?计读者知道如何自己动手用 Verilog hDl设计CPU及I/O接口和总线是作者要写本书的原因之一。本书的一个特点是所有CPU和IO接口及总线的 Verilog HDL源代码全部由作者本人写出并经过CAD/CAE软件验证。作者在2000年由清华大学出版社出版过一本《计算机组成与系统结构》的教科书,得到广大读者和网友的好评及推荐,有些大学也选其作为课程教材或参考书使用。与那本书不同,这本《计算机原理与设计— Verilog HDL版》给出具体的CPU、I/O接口和总线设计的Verilog hdl源代码并附有仿真波形,以使读者能加深理解和供读者在设计自己的电路时参考,同时也增加了多线程和多核技术等内容。另一个原因是现在用硬件描述语言来设计电路变得很流行,已成主流,用逻辑图的方法直接设计电路的人越来越少了。但大部分介绍硬件描述语言的书都只停留在简单的数字电路的设计上,因此作者想把它引人到计算机原理的教科书中。也许有读者还会问:“那你为什么选用 Verilog HDL,而不是其他的硬件描述语言呢?”回答这个问题其实有些难。目前比较流行的硬件描述语言主要有 Verilog HDl和ⅤHDL两种。大家都说 Verilog HDL像C语言,而VHDL像C++(实际上像Ad语言)。由于作者对C比对C艹+更熟悉一些,所以开始自学硬件描述语言时就自然而然选了 Verilog hdl。据作者后来有限的调查得知,一些大公司也都使用 VerilogHDL。调查的对象仅限作者指导过的本科生和研究生,他们毕业之后有些人目前在著名的大公司从事集成电路的设计工作。看来作者当初的选择是对的。作者不是说选择VHDL就不对,其实用熟练了都一样,都是很好的设计硬件的语言工具。考虑到初学者的需要,本书从最基本的二进制数的运算和逻辑电路的设计讲起,顺便介绍 Verilog hDl。因此学习本书时不需要任何先修科目,不懂C语言也没有关系。“那是不是这本书的内容太过简单了呢?”不是。本书要讲到如何设计一个带有整数部件( nteger Unit,U)、浮点部件( Floating Point Unit,FPU)、指令 Cache(一种特殊的小容量的快速存储器)、数据 Cache、指令TLB( Translation LookasideBuffer,一种用于地址转换的快速缓冲区)和数据TLB的多核CPU。其中的 Cache完全由硬件控制;TLB不命中时产生异常,在异常处理程序中访问用于存储器管理的页表( Page Table),然后填充TLB;FPU能对IEEE754单精度浮点数进行加、减前言乘、除和开方运算:加减法用先行进位加减法器实现、乘法用 Wallace Tree实现、除法和开方用 Newton- Raphson算法实现。这些都是实际的CPU设计中常用的部件和算法。一般的教科书都是分开讲它们的原理。本书也讲原理,但更重要的是把它们有机地结合在一起,设计出一个完整的CPU。当然, Verilog HDL源代码和仿真波形也在书中给出。稍微讲具体一些。本书的内容包括:计算机基础知识及性能评价;逻辑电路及 Verilog hdl简介;计算机算法及 Verilog HDL实现;指令系统及ALU( ArithmeticLogic Unit)设计;单周期、多周期和流水线 CPU Verilog HDL设计;精确中断和异常处理及电路实现;浮点算法及FPUⅤ erilog HDL设计;带有FPU的流水线CPUVerilog hdl设计;多线程 CPU Verilog HDL设计;存储器和虚拟存储器管理;带有Cache、TLB及FPU的CPU设计;多核 CPU Verilog HDL设计;输入输出接口和总线设计;高性能计算机及互联网络设计。更详细的内容就只有看目录了。除了 Newton- Raphson算法,本书也介绍 Goldschmidt除法和开方算法。这两种算法都被著名的公司(比如ntel和BM)在设计cPU时使用。输入输出接口部分除了介绍基本的概念和原理之外,还给出了常用I/O接口及总线的具体的设计方法,比如异步通信接口UART、PS/2鼠标和键盘接口、ⅤGA接口、I2C串行总线和PCI并行总线等。除了PS/2鼠标,其他的接口和总线都给出了具体的 Verilog HDL设计实例。PS/2鼠标讲了原理,设计部分当做习题留给了读者。髙性能计算机及互联网络设计部分除了讲述一般的设计方法之外,也描述了由作者提出的新型互联网络,包括Dual-Cube15、 Metacubel2和RDN( Recursive dual-Net)19。这些互联网络具有用较少的端口连接更多的CPU和存储器板并且保证它们之间的通信距离比较短的优点,非常适合用来构建下一代超大规模的超高性能计算机。“好像内容太多了,一个学期学不完。”以上内容可分成两部分,一部分放在本科讲,另一部分给研究生讲。举例来讲,TLB设计、FPU设计、多线程和多核CPU设计、高性能计算杋及互联网络设计等内容可在研究生课程中讲授,其余部分在本科课程中教授。如果在本科阶段能设计出流水线CPU就已经很好了,课时充裕的话再加上中断和 Cache设计。存储器管理要讲,但不一定要设计TLB。以上只是举例,大家可以根据学校的具体情况做出不同的安排。“那么需要什么样的环境呢?如果只想验证用 erilog hDL设计的电路的逻辑功能是否正确,只要有一台普通的PC就行,所需的软件可以从网上下载,免费的,而且也不用注册,安装后马上就能用,而且相当好用。比如作者使用的 Icarus verilogVerilog)和 Altera公司的 Quartus II Web Edition就是这样的软件。如果想要用FPGA实现,买些FPGA实验板,即可实现诸如“计算机原理与设计实验”等课程所要求的内容。 Altera公司也与国内很多高校合作建立了硬件实验室,免费提供FPGA实验板。其实买也不贵。如果使用 Xilinx FPga板,则部分代码需要修改。“如果想自学,读这本书合适吗?”自学很重要,不管是出于工作需要还是个人兴趣。对已经参加工作的技术人员或在校的非计算机专业的学生来讲,如果想自学,可以慢慢读、慢慢做,因为咱没有期末考试。本书的写作风格就是试图把复杂前言的概念通俗易懂地讲出来,让人容易理解,所以本书非常适合自学者阅读。“如果只想学原理不想学设计,读这本书合适吗?”对每个基本概念,本书都是先讲它的原理,再讲设计。如果只想学原理,只要不看设计部分就行了。不过还是都学为好,因为设计的过程也是学习的过程。如果读者已经懂了原理,直接看设计部分就行了,这样效率会更高。“每章最后的习题有没有标准答案?没有。有些题目尤其是设计类型的题目的做法有很多种,只要到了罗马(到了北京也行),都得100分,都是标准答案。有新意的,加10分。有些题目附加了提示,仅供读者参考。作者鼓励大家发挥自己的创造性,找一些书上没有的题目来做。作者欣喜地看到,计算机的硬件实验教学终于开始受到重视,从2009年开始在南京大学召开的全国计算机组成与结构课程群实验教学研讨会就是一个证明。作者有幸受邀和参加会议的各位老师进行了交流。大家一致认为,计算机偏硬件类课程在整个计算机学科的教学中居于非常重要的位置,应该从现在起加强对这方面的投入,包括教师队伍的建设、教材的更新以及实验环境的准备等。本书的出版,也算是响应这个会议的号召吧。希望读者在学完本书之后,在对计算机原理与设计和 Verilog hdl的理解和使用上,比没有阅读之前有一定程度的提高。从个人的角度讲,熟练地掌握了CPU设计技术,至少会增加一种就业机会,而且一不小心就成了专家。从大局着眼,相信读者会为我国的CPU设计水平的提高做出自己的贡献。另外,本教科书的这种写法是种新的尝试,因此作者也期待有更多的与本书风格类似的教科书出现,大家一起来繁荣我国的计算机基础教育事业—也就是清华大学教授李三立院士在“序言”中提到的—把金字塔的基础打牢。本书得以出版,作者感谢李三立教授。李教授为本书的写作和出版提供了很好的建议和帮助。另外,大约从十年前开始,李教授就为作者联系了很多高校,在暑假期间开设CPU设计系列讲座,比如清华大学、东南大学和浙江大学等。作者也感谢清华大学出版社对本书的支持。本书中所有的 Verilog HDL源代码均经过 Quartus II Web Edition或者 Verilog的验证,C语言程序由gce编译。本书初稿在 Linux/ CentOS环境下完成:中文输人用emacs+ chinat,除了从屏幕截取的仿真波形图,其他所有的图几乎都是用tgif或gnuplot画成,PDF文件用ⅤTeX/ Linux+CJK生成。以上均为免费软件,作者一并向这些软件开发者和相关公司表示感谢。由于作者水平有限,本书所载的 Verilog HDL源代码写得不太漂亮,而且只是一家之言。希望读者能写出质量更高的代码并对本书的错误之处加以指正。来信请寄: yamin(@ 1eee. org或者 yamine@ computer. org。李亚民2011年5月5日目录第1章计算机基础知识及性能评价1.1计算机系统概述1.1.1计算机系统的组成1.1.2计算机发展简史21.1.3计算机指令结构1.14CIsC和RISC711.5一些基本单位的意义1.2计算机的基本结构12.1 RISC CPU的基本结构101.2.2多线程CPU和多核CPU1.2.3存储层次和虚拟存储器管理124IO接口和总线141.3如何提高计算机的性能151.3.1计算机性能和性能评价..151.32踪迹驱动模拟和执行驱动模拟1.3.3高性能计算机和互联网络1814硬件描述语言1.5习题21第2章逻辑电路及 Verilog hdL简介·,·.222.1基本逻辑门和常用逻辑门2222用 Verilog hdl实现基本的逻辑操作2423逻辑门的CMOS晶体管实现以及晶体管级的 Verilog hdl29231CMOs反向器29232CMOS与非门和或非广3124四种风格的 erilog hDL描述33241晶体管开关级的 Verilog hdl33242逻辑门级的 Verilog HDL35243数据流风格的 Verilog HDL36244功能描述风格的Ⅴ erilog HDL3725常用的组合电路及其设计402.5.1多路选择器设计4252译码器设计25332位移位器设计26时序电路的设计方法47目录2.61D锁存器472.62D触发器492.63状态转移图及时序电路设计522.7习题58第3章计算机算法及其 Verilog HDL实现613.1二进制整数3.1.1无符号二进制整数623.1.2补码表示的带符号二进制整数6232加减法算法及 Verilog HDL实现32.1加法器和减法器设计32.2先行进位加法器设计33乘法算法及 verilog hdl实现331无符号数乘法器设计733.32带符号数乘法器设计74333无符号数 Wallace树型乘法器设计77334带符号数 Wallace树型乘法器设计8234除法算法及 Verilog hdl实现.8434.1恢复余数除法器设计84342不恢复余数除法器设计86343带符号数不恢复余数除法器设计89344 Goldschmidt除法算法91345 Newton-Raphson除法算法943.5开方算法及 Verilog hdl实现9731恢复余数开方算法973.52不恢复余数开方算法3.53 Goldschmidt开方算法105354 Newton- Raphson开方算法10836习题第4章指令系统及ALU设计,,,,1134.1指令系统结构4.1.1操作数类型1134.1.2数据在存储器中的存放方法1144.13指令类型1154.1.4指令结构曾曹鲁曹加..,,,1174.1.5寻址方式..1184,2MIPS指令格式和通用寄存器定义119第1章计算机基础知识及性能评价欢迎阅读这本《计算机原理与设计— Verilog hdl版》教科书。本书将从最基本的逻辑电路及其 Verilog hDL设计讲起,由浅入深,逐步讲到如何用 Verilog hdl设计一个带有分开的指令及数据 TLB/Cache和能执行浮点加、减、乘、除及开方指令的浮点部件FPU的多核CPU。本书也给出常用的输入/输出接口的设计方法,包括异步通信接口UART、PS/2键盘与鼠标接口、视频图像阵列ⅴGA接口、12C和PCI总线接口。以上CPU和IO接口基本上都有 Verilog hDl源代码,供读者在设计自己的电路时参考。另外,我们也将描述高性能计算机及其互联网络的设计方法。本章主要讲解一些基本的概念,对计算机原理与设计和计算机性能评价做一个简单的介绍,以便为学习以后各章打下一点基础并留下一个整体印象。1.1计算机系统概述假设你有一台PC,存储器有16GB,CPU主频为3GHz。问:上述的两个G是否相同?本节最后将给出这个问题的答案。在此之前,我们简要介绍计算机和计算机系统各自包含的内容、计算机发展简史、计算机的指令结构以及RISC和CISC的基本概念与不同之处。1.11计算机系统的组成读者可能知道什么是单片机,或者至少听说过(没听说过也没关系)。单片机的全称是单片计算机( Single Chip Computer),它就是一个芯片,内部集成有CPUCentral Processing Unit))、存储器( Memory)和一些常用的IO接口( nput/Output Inter-face)。由此可见,包含了以上三种部件的芯片或电路板就叫计算机。那么,一般的用户能不能直接使用这个计算机呢?答案是不能。我们常说的计算机实际上是指计算机系统( Computer Systems)。计算机系统中除了包含有计算机(CPU、存储器和IO接口)之外,还有计算机软件( Software)和IO设备( Input/OutputDevices)。当然还少不了电源。最基本的软件是操作系统( Operating System)。它负责管理计算机系统的所有硬件资源,为用户使用计算机系统提供一个界面。最基本的也是最常用的操作系统有Ms-DOS和 Linux核( Kernel)。微软的各种版本的 Windows或诸如 Fedora和 Centos等可被认为是在基本的操作系统基础上开发的高级图形界面。软件是用计算机语言(高级语言或汇编语言)编写的程序再经过编译或汇编后生成的可执行的二进制代码。编译器( Compiler)和汇编器( Assembler)本身也是软件,有时也称为软件工具。其他的软件工具还有编辑器 eDitor)和软件调试器( Debugger)。计算机系统还配有常用的实用程序库( Utilities)。除此之外的其他软件可以统称为应用程序( Applications)。提问:第一个汇编器是用汇编语言编写的吗?第1章计算机基础知识及性能评价软件的开发过程大致如下。首先选用一种(或几种)高级语言(或汇编语言),用个编辑器来编写源程序。编好后存入硬盘。再用编译器或汇编器把它转换成目标码(CPU可执行的二进制的机器码)。生成好的机器码程序仍存放在硬盘上。然后通过操作系统执行它,看看软件能否正常工作。第一次执行一般都通不过。这时可用调试器来跟踪程序的执行,找出错误所在。一个成熟的软件要经过成百上千次调试才能趋于完善(注意是“趋于”)。IO设备(或称外部设备)就像一辆车的轮子和方向盘。大家知道,常用的IO设备有键盘、鼠标、显示器、硬盘、打印机。网络接口也可归于此类。不太常用的IO设备有扫描仪和磁带机。由早期不太常用变为常用或越来越常用的IO设备有视频摄像头、扬声器、话筒、CD/DVD驱动器和优盘( USB Memory)。实际上,高档手机就是一个微型的计算机系统。综合以上的描述,我们给出图1.1所示的计算机系统的组成结构。有关CPU内部的ALU、FPU、 Cache、TLB、寄存器堆和控制部件等内容,将在以后各章详细描述并给出电路设计的 Verilog HDL源代码。ALU、FPUCPU(处理机)<寄存器堆、控制部件计算机〈存储器Cache、TLBIO接口操作系统、编译器、汇编器、链接器软件实用程序库计算机系统应用程序键盘、鼠标、显示器、硬盘、打印机、网络接口I/O设备〈磁带机、扫描仪视频摄像头、扬声器、话筒、优盘、 CD/DVD驱动器电源图1.1计算机系统组成好像可以把计算机和ⅠO设备统称为硬件( Hardware)。这样就可以讲一个计算机系统由硬件和软件组成(电源不提也罢)。从这个意义上讲,一个大学有了计算机学院再成立一个软件学院也是有道理的。不过两个学院要紧密协作,因为计算机系统的设计要讲究 Hardware/Software Co- Design。外设学院好像还没听说过。1.12计算机发展简史计算机经历了机械时代和机电时代,于20世纪40年代进人电子时代(第一代),其标志是40年代中期使用电子管的计算机 ENIAC的诞生。第一代计算机没有编程工具,程序员必须通过控制面板上的开关来向计算机输入指令。
下载地址
用户评论
寫得不錯, 可以參考
嗯 还行可以
原理讲的不错,但是verilog代码参考和学习意义不大,都是用primitive写的,一是工程上没法借鉴;二是自己学习起来也没有啥可读性,和netlist差不多,正常写RTL不会这么写。