首页>参考读物>计算机科学与技术>计算机组织与体系结构

数字设计和计算机体系结构
作者 : David Money Harris Sarah L. Harris
译者 : 陈虎
丛书名 : 计算机科学丛书
出版日期 : 2009-05-11
ISBN : 7-111-25489-1
定价 : 58.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 395
开本 : 16开
原书名 : Digital Design and Computer Architecture
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

图书特色

图书前言

目前已经有很多优秀的数字逻辑设计书籍,也有一些很好的计算机体系结构教材(例如Patterson和Hennessy撰写的经典教材),为什么还需要再出版一本包含了数字逻辑设计和体系结构的书呢?这本书的独特之处在于从计算机体系结构的视角来讲解数字逻辑设计,内容从基本的二进制开始,直到引导学生完成MIPS处理器的设计。
  多年来,我们曾在Harvey Mudd学院使用了多个版本的《Computer Organization and Design》一书(由Patterson和Hennessy撰写)。我们特别欣赏该书涵盖了MIPS处理器的体系结构和微结构这种风格,MIPS处理器是获得了商业成功的体系结构,而且它也非常简单,可以用作学生的引导课程,也可由学生自主设计和实现。由于我们的课程没有预修课程,前半个学期需要介绍数字逻辑设计,而这部分内容《Computer Organization and Design》没有包含。其他大学也表示需要一本能包含数字电路设计和体系结构的教材。于是,我们开始着手准备这样一本包含了数字逻辑设计和体系结构的书。
  我们相信设计处理器对于电子工程和计算机专业的学生来说是一个特殊而重要的经历。对于外行而言,处理器内部的工作几乎像魔术一样,然而事实证明,如果详细解释的话,处理器的工作原理非常易于理解。数字逻辑设计本身是一个强有力且令人激动的主题。汇编语言程序揭示了处理器内部所用的语言。而微结构将两者联系在一起。
  这本书适合作为在一个学期内完成教学的数字逻辑设计和计算体系结构的入门课程,也可以用于两个学期的教学,以便有更多的时间来消化和理解书中所讲的知识并在实验室中进行实践。唯一需要的预修内容是熟悉一种高级程序设计语言(例如C、C++或Java)。本教材一般在大学本科二年级或者三年级使用,也可以提供给有编程经验和基础较好的一年级学生学习。
  特点
  这本书有以下特点。
  并列讲述Verilog和VHDL语言
  硬件描述语言(Hardware Description Languages, HDL)是现代数字逻辑设计实践的中心,而设计者分成了Verilog语言和VHDL语言两个阵营。在介绍组合逻辑和时序逻辑设计后,这本书紧接着就在第4章中介绍硬件描述语言。硬件描述语言将在第5章和第7章用于设计处理器的模块和整个处理器。然而,如果不讲授硬件描述语言的话,第4章可以跳过去,后续章节仍然可以继续使用。
  这本书的特色在于使用并列的方式讲述Verilog语言和VHDL语言,使得读者可以快速地对比两种语言。第4章描述了适用于这两种硬件描述语言的原则,而且并列给出了这两种语言的语法和示例。这种并列方法使得在教学中教师可以选择其中一种硬件描述语言讲述,也可以让读者在专业实践中很快地从一种描述语言转到另外一种描述语言。
  经典的MIPS体系结构和微结构
  本书的第6章和第7章主要介绍了MIPS体系结构。这部分内容主要改编自Patterson和Hennessy的论著。MIPS是一个理想的体系结构,因为每年有上百万实际产品投入使用,而且高效和易于学习。同时,世界各地上百所的大学已经围绕MIPS体系结构开发了教学内容、实验和工具。
  现实视角
  本书的第6~8章列举了Intel公司IA-32系列处理器的体系结构、微结构和存储器层次。这些章节以现实视角揭示了书中所讲的概念如何应用到大多数PC内部芯片的设计中。
  高级微结构概览
  第7章中介绍了现代高性能微结构的特征,包括分支预测、超标量、乱序执行操作、多线程和多核处理器。这些内容即使对于第一次上体系结构课程的学生也比较易于理解,展示了微结构原理如何扩展到现代处理器设计中。
  章末的练习和面试题目
  学习数字设计的最佳方式是实践。每章的结束部分都有很多练习来实际应用所讲述的内容。练习后面是一组工业领域的同事向申请工作的学生提出的面试题目。这些问题可以让学生了解到面试过程中可能遇见的典型问题类型。练习的答案可以通过本书的配套网址和教师支持网址获得。
  在线补充资料
  补充材料可以通过textbook.elsevier.com/9780123704979获得。这个出版公司对所有读者开放的网站包括了以下内容:
   奇数编号练习的答案;
   Xilinx 和Synplicityü咀ㄒ蛋婕扑慊ㄖ杓乒ぞ叩牧唇樱 PCSPIM(一个基于Windows的MIPS模拟器)的链接;
   MIPS处理器的硬件描述语言代码;
   Xilinx的Project Navigator工具的提示;
   PPT格式的电子教案;
   简单的课程和实验素材;
   勘误表。
  教师网站(链接到出版公司网站,仅提供给经textbooks.elsevier.com注册的使用者)包括:
   偶数编号练习的答案;
   Xilinx 和Synplicityü咀ㄒ蛋婕扑慊ㄖ杓乒ぞ叩牧唇樱蝗〉米矢袢现さ拇笱Ы淌梢曰竦妹夥训腟ynplicity工具,用于教学和实验。更详细的内容请参见教师网站;
   JPG格式和PPT格式的书中插图。
  关于在课程中使用Xilinx、Synplicity和PCSPIM工具以及构建实验的更详细内容请参见下文介绍。
  如何使用课程中的软件工具
  Xilinx ISE WebPACK
  Xilinx ISE WebPACK是Xilinx公司ISE Foundation FPGA设计工具的免费版本。基于此软件,学生可以使用原理图或者硬件描述语言(Verilog或VHDL)完成数字逻辑设计。在完成设计后,学生可以使用Xilinx WebPACK中包含的ModelSim MXE III Starter工具模拟电路。Xilinx WebPACK中还包含了用于综合Verilog或者VHDL程序的XST工具。
  WebPACK和Foundation两个软件的差异在于WebPACK仅仅支持Xilinx公司部分常用FPGA器件。ModelSim MXE III Starter和ModelSim商业版的区别在于Starter版本降低了10 000多行的硬件描述语言代码的模拟速度。
  Synplify Pro
  Synplify Pro 是一个面向FPGA和CPLD的高性能专业逻辑综合引擎。Synplify Pro包含了HDL Analyst(一个图形接口工具),用于根据硬件描述语言产生电路原理图。我们发现这个工具对于学习和调试过程有极大的帮助。
  Synplicity公司非常慷慨地向有资格的大学捐献Synplicity Pro软件,并提供许多许可证用于大学的实验室。教师可以访问教师网站获知如何申请Synplicify Pro的许可证。关于Synplicity更详细的信息可以访问www.synplicity.com/university网站。
  PCSPIM
  PCSPIM(又称为简单的SPIM)是一个基于Windows的可运行MIPS汇编代码的MIPS模拟器。学生可以在文本文件中输入MIPS汇编代码,通过PCSPIM进行模拟。PCSPIM显示了指令、存储器和寄存器的值。用户手册和示范文件的链接可以通过本书配套网站(textbooks. elsevier.com/9780123704979)访问。
  实验
  配套网站提供了从数字逻辑设计到计算机体系结构一系列实验的链接。这些实验教授学生如何使用Xilinx WebPACK或Foundation工具来输入、模拟、综合和实现他们的设计。这些实验也包含了使用PCSPIM模拟器完成汇编语言编程的内容。
  经过综合设计后,学生可以在Digilent公司的Spartan 3 Starter开发板或者XUP-Virtex 2 Pro(V2Pro)开发板上实现自己的设计。这些功能强大而且具有价格优势的开发板可以通过www.digilent.com获得。我们提供的实验描述了如何使用WebPACK在Digilent公司的Spartan 3开发板上实现一些设计。但是,Xilinx WebPACK不支持V2Pro开发板上的大容量FPGA。有资格的学校可以联系Xilinx大学合作计划以申请免费的完整Foundation工具。
  为了运行这些实验,学生需要下载并安装Xilinx WebPACK、PCSPIM和Synplify Pro(可选)。教师也需要选择软件安装在实验室的机器上。这些实验包括了如何在Digilent公司的Spartan 3 Starter开发板上实现项目的指导。这些实现步骤可以跳过,但是我们认为它有很大的价值。这些实验可以使用XST综合工具,但我们推荐使用Synplify Pro工具,因为电路的原理图将反馈给学生重要的信息。
  我们在Windows平台上测试了所有的实验,当然这些工具也可以在Linux上使用。
  错误
  正如所有有经验的程序员所知,比较复杂的程序毫无疑问都有潜在错误。这本书也不例外。我们花费了大量的精力查找和消除这本书的错误。然而,错误仍然不可避免。我们将在这本书的网站上维护和更新勘误表。
  请将你发现的错误发送到ddcabugs@onehotlogic.com。第一个报告实质性错误而且在后续版本中采用了其修改的读者可以得到1美元的奖励!(请确认包含了自己的邮件地址。)
  致谢
  首先,我们要感谢David Patterson和John Hennessy,他们在《Computer Organization and Design》一书中对MIPS处理器微结构进行了开创性的介绍。我们多年以来讲授了该书的多个版本。我们感谢他们对这本书慷慨的支持,以及允许在他们的微结构上进行设计。
  我们喜爱的卡通画作家Duane Bibby花了很长时间和努力来说明数字电路设计中有趣的奇遇。我们也很感激Morgan Kaufamann公司的Denise Penrose、Nate McFadden以及团队的其他同事,没有他们的热情这本书将无法面世。Graphic World出版服务公司的Joff Somers在出版过程中也提供了大力指导。
  很多审阅人也大大地提高了这本书的质量。他们包括:Ithaca学院的John Barr,Charleston Southern 大学的Jack V. Briner,SK通信公司的Andrew C. Brown,Harvey Mudd 学院的Carl Baumgaertner,Nvidia公司的A. Utku Diril,Idaho大学的Jim Frenzel,Rambus公司的Jaeha Kim,ShotSpotter公司的Phillip King,Claremont Mckenna学院的James Pinter-Lucke,Connecticut大学的Amir Roth和Z. Jerry Shi,Oklahoma州立大学的James E. Stine,Chapman 大学的Luke Teyssier和Peiyi Zhao,以及一位匿名评阅人。Simon Moore是作者David在剑桥大学进行学术休假时的东道主,而本书的大部分内容正是在此期间完成的。
  我们也非常感谢Harvey Mudd学院上这个课程的学生们,他们对此书的草稿提供了有帮助的反馈。需要特别记住的是Casey Schilling、Alice Clifton、Chris Acon和Stephen Brawner。
  本书作者David特别感谢他的妻子Jennifer。在这个项目开始的时候,他们的儿子Abraham降生。感谢她的耐心和生活最忙碌时对另一个项目的支持。

译者简介

陈虎:暂无简介

译者序

当译者从书店里第一次看到Harris所著的《Digital Design and Computer Architecture》的影印版时就被它深深吸引。这本书的与众不同之处在于以下方面:
  1) 将数字逻辑和计算机体系结构融合。计算机硬件课程体系自身应该是完整的,数字逻辑是微处理器的设计基础,而微处理器又为数字逻辑提供了广阔的应用和设计空间。但是,当前的主流课程设置将这两者分割,学生不能通过微处理器设计来进一步加强数字系统的实际设计能力,而且计算机组成原理和体系结构课程也变成了一门“理论”课,学生几乎没有机会独立设计一个完整的处理器系统,使得这些课程的效果大打折扣。本书所采用的新结构为解决计算机专业硬件课程的问题提供了新的方法和途径。
  2) 教学内容反映了当前数字电路设计的主流方法。集成电路是发展最快的领域,一个合格的数字电路设计工程师必须能掌握当前主流的数字电路设计方法和工具。遗憾的是,当前主流的数字逻辑课程还是以74系列的小规模集成电路为教学内容,对现代数字设计中最常用的硬件描述语言、FPGA等关键技术介绍不足,教学内容与工程实践脱节。本书通过大量的实例说明基于硬件描述语言和FPGA的数字电路设计方法,使得学生可以采用当前主流的CAD工具完成多个实验,大大增强了学生数字设计的实际应用能力。
  3) 突出计算机体系结构的工程特点。与纯理论课程不同的是,计算机体系结构本质上是面向复杂数字电路的设计工程,在设计过程中最重要的就是根据芯片面积、速度、功耗、成本等诸多约束条件,从多种可能的设计方案中做出合理的设计抉择和折中。这种工程化的设计思想对于学生未来从事大型系统设计具有重要意义,而这一点恰恰又是当前教学中所欠缺的一环。本书通过对多种设计方案的介绍和对比,在“一题多解”的基础上说明了大型工程设计中经常碰到的设计抉择问题。对学生建立工程化的设计方法和思想很有帮助。
  4) 非常易于理解。本书内容清新,文字流畅,没有冗长的概念解释,而是配以丰富的实例和清晰易懂的电路图和时序图。这对于帮助初学者理解数字电路的结构和常用表示方法无疑非常重要,可以帮助读者很快地理解数字电路和微处理器的基本原理和设计方法。
  本书不仅适合作为计算机、电子、电气与控制等专业的教材,而且对于从事数字电路设计的工程师和技术人员也可以作为参考手册。
  本书译者在华南理工大学软件学院和计算机学院使用本书的英文版对2007级本科学生进行双语教学,收到了很好的效果。
  本书由华南理工大学陈虎副教授主持翻译定稿。此外,杨涛、王俊和何健华等人也参加了本书的部分翻译工作,对于他们的支持和帮助,在此表示衷心的感谢。
  由于时间和水平有限,书中难免仍存在错误,敬请读者指正。
  
  译者
  2008年8月

图书目录

出版者的话
相关评论
译者序
前言
第1章  二进制 1
1.1  课程计划 1
1.2  控制复杂性的艺术 1
1.2.1  抽象 1
1.2.2  约束 2
1.2.3  三条原则 3
1.3  数字抽象 4
1.4  数字系统 5
1.4.1  十进制数 5
1.4.2  二进制数 5
1.4.3  十六进制数 6
1.4.4  字节,半字节和全字 8
1.4.5  二进制加法 8
1.4.6  有符号的二进制数 9
1.5  逻辑门 11
1.5.1  非门 12
1.5.2  缓冲 12
1.5.3  与门 12
1.5.4  或门 12
1.5.5  其他二输入逻辑门 12
1.5.6  多输入门 13
1.6  数字抽象之下 14
1.6.1  电源电压 14
1.6.2  逻辑电平 14
1.6.3  噪声容限 15
1.6.4  直流电压传输特性 15
1.6.5  静态约束 16
1.7  CMOS晶体管* 17
1.7.1  半导体 17
1.7.2  二极管 18
1.7.3  电容 18
1.7.4  nMOS和pMOS晶体管 18
1.7.5  CMOS非门 20
1.7.6  其他CMOS逻辑门 20
1.7.7  传输门 22
1.7.8  类nMOS逻辑 22
1.8  功耗* 23
1.9  总结和展望 23
习题 24
第2章  组合逻辑设计 32
2.1  引言 32
2.2  布尔表达式 34
2.2.1 术语 34
2.2.2  与或式 34
2.2.3  或与式 35
2.3  布尔代数 36
2.3.1  公理 36
2.3.2  单变量定理 36
2.3.3  多变量定理 37
2.3.4  定理的统一证明方法 39
2.3.5  等式化简 39
2.4  从逻辑到门 40
2.5  多级组合逻辑 42
2.5.1  减少硬件 43
2.5.2  推气泡 44
2.6  X和Z 45
2.6.1  非法值X 45
2.6.2  浮空值Z 45
2.7  卡诺图 46
2.7.1  画圈的原理 47
2.7.2  卡诺图化简逻辑 48
2.7.3  无关项 50
2.7.4  小结 51
2.8  组合逻辑模块 51
2.8.1  多路选择器 51
2.8.2 译码器 54
2.9  时序 55
2.9.1  传输延迟和最小延迟 56
2.9.2  毛刺 59
2.10  总结 60
习题 61
第3章  时序逻辑设计 65
3.1  引言 65
3.2  锁存器和触发器 65
3.2.1  SR锁存器 66
3.2.2  D锁存器 67
3.2.3  D触发器 68
3.2.4  寄存器 68
3.2.5  带使能端的触发器 69
3.2.6  带复位功能的触发器 70
3.2.7 晶体管级的锁存器和触发器设计* 70
3.2.8  小结 71
3.3  同步逻辑设计 72
3.3.1  一些有问题的电路 72
3.3.2  同步时序电路 74
3.3.3  同步和异步电路 75
3.4  有限状态机 75
3.4.1  有限状态机设计实例 75
3.4.2  状态编码 79
3.4.3  Moore型状态机和Mealy型状态机 82
3.4.4  状态机的分解 86
3.4.5  有限状态机小结 86
3.5  时序逻辑电路的时序 87
3.5.1  动态约束 88
3.5.2  系统时序 88
3.5.3  时钟偏移* 92
3.5.4  亚稳态 94
3.5.5  同步器 95
3.5.6  分辨时间的推导* 97
3.6  并行 99
3.7  总结 101
习题 102
第4章  硬件描述语言 109
4.1  引言 109
4.1.1  模块 109
4.1.2  硬件描述语言的起源 110
4.1.3  模拟和综合 111
4.2  组合逻辑 112
4.2.1  按位操作符 112
4.2.2  注释和空格 114
4.2.3  缩减运算符 114
4.2.4  条件赋值 115
4.2.5  内部变量 117
4.2.6  优先级 119
4.2.7  数字 120
4.2.8  z和x 120
4.2.9  位混合 122
4.2.10  延迟 123
4.2.11  VHDL 库和类型* 124
4.3  结构建模 126
4.4  时序逻辑 129
4.4.1  寄存器 129
4.4.2  可复位寄存器 131
4.4.3  带使能端的寄存器 132
4.4.4  多寄存器 133
4.4.5  锁存器 134
4.5  更多组合逻辑 135
4.5.1  选择语句 137
4.5.2  if语句 141
4.5.3  Verilog的casez语句* 142
4.5.4  阻塞式和非阻塞式赋值 142
4.6  有限状态机 146
4.7  参数化模块* 152
4.8  测试程序 155
4.9  总结 161
习题 162
第5章  常见数字模块 171
5.1  引言 171
5.2  算术电路 171
5.2.1  加法 171
5.2.2  减法 176
5.2.3  比较器 177
5.2.4  算术逻辑单元 178
5.2.5  移位器和循环移位器 179
5.2.6  乘法* 180
5.2.7  除法* 181
5.2.8  深入阅读 182
5.3  数制系统 182
5.3.1 定点数系统 183
5.3.2  浮点数系统* 183
5.4  时序电路模块 186
5.4.1  计数器 186
5.4.2  移位寄存器 187
5.5  存储器阵列 190
5.5.1  概述 190
5.5.2  动态随机访问存储器 192
5.5.3  静态随机访问存储器 193
5.5.4  面积和延迟 193
5.5.5  寄存器文件 193
5.5.6  只读存储器 193
5.5.7  使用存储器阵列的逻辑 195
5.5.8  存储器的硬件描述语言 195
5.6  逻辑阵列 197
5.6.1  可编程逻辑阵列 197
5.6.2  现场可编程门阵列 198
5.6.3  阵列实现* 202
5.7  总结 203
习题 203
第6章  体系结构 210
6.1 引言 210
6.2  汇编语言 210
6.2.1  指令 211
6.2.2  操作数:寄存器、存储器和常数 212
6.3  机器语言 216
6.3.1  R-类型指令 216
6.3.2  I-类型指令 217
6.3.3  J-类型指令 218
6.3.4  解释机器语言码 218
6.3.5  程序存储 219
6.4  编程 219
6.4.1  算术/逻辑指令 220
6.4.2  分支 222
6.4.3  条件语句 224
6.4.4  循环 225
6.4.5  数组 227
6.4.6  过程调用 230
6.5  寻址方式 236
6.6  编译、汇编和加载 238
6.6.1  内存图 238
6.6.2  转换成二进制代码和开始执行
程序 239
6.7  其他主题 242
6.7.1  伪指令 242
6.7.2  异常 242
6.7.3  有符号和无符号的指令 243
6.7.4  浮点指令 244
6.8  真实世界透视:IA-32结构* 245
6.8.1  IA-32的寄存器 246
6.8.2  IA-32的操作数 246
6.8.3  状态标志 247
6.8.4  IA-32指令集 247
6.8.5  IA-32指令编码 249
6.8.6  IA-32的其他特性 249
6.8.7  小结 250
6.9  总结 250
习题 251
第7章  微结构 258
7.1  引言 258
7.1.1  体系结构状态和指令集 258
7.1.2  设计过程 258
7.1.3  MIPS微结构 259
7.2  性能分析 260
7.3  单周期处理器 261
7.3.1  单周期数据路径 261
7.3.2  单周期控制 265
7.3.3  更多指令 267
7.3.4  性能分析 269
7.4  多周期处理器 270
7.4.1  多周期数据路径 270
7.4.2  多周期控制 275
7.4.3  更多指令 281
7.4.4  性能分析 282
7.5  流水线处理器 284
7.5.1  流水线数据路径 286
7.5.2  流水线控制 288
7.5.3  冲突 288
7.5.4  更多指令 297
7.5.5  性能分析 297
7.6  硬件描述语言表示* 299
7.6.1  单周期处理器 300
7.6.2  通用模块 306
7.6.3  测试程序 309
7.7  异常* 313
7.8  高级微结构* 315
7.8.1  深流水线 316
7.8.2  分支预测 317
7.8.3  超标量处理器 318
7.8.4  乱序处理器 319
7.8.5  寄存器重命名 321
7.8.6  单指令流多数据流 322
7.8.7  多线程 323
7.8.8  多处理器 323
7.9  现实世界透视:IA-32微结构* 324
7.10  总结 328
习题 329
第8章  存储器系统 333
8.1  引言 333
8.2  存储器系统性能分析 335
8.3  高速缓存 336
8.3.1  高速缓存中存放的数据 337
8.3.2  高速缓存中的数据查找 337
8.3.3  数据的替换 343
8.3.4  高级高速缓存设计* 344
8.3.5  MIPS处理器中高速缓存的发展* 347
8.4  虚拟存储器 347
8.4.1  地址转换 349
8.4.2  页表 350
8.4.3  地址转换后备缓冲 351
8.4.4  存储器保护 352
8.4.5  替换策略* 352
8.4.6  多级页表* 352
8.5  内存映射I/O* 354
8.6  现实世界透视:IA-32存储器和
I/O系统* 357
8.6.1  IA-32高速缓存系统 357
8.6.2  IA-32虚拟存储器 359
8.6.3  IA-32 的直接I/O编程机制 359
8.7  总结 359
习题 360
附录A  数字系统实现 365
附录B  MIPS指令 391
延伸阅读材料 394

教学资源推荐
作者: (美)David A. Patterson 加州大学伯克利分校 John L. Hennessy 斯坦福大学 著
作者: [美]戴维·莫尼·哈里斯(David Money Harris) 哈维玛德学院,莎拉 L.哈里斯(Sarah L. Harris) 哈维玛德学院 著
参考读物推荐
作者: [丹麦]克劳斯·埃尔克(Klaus Elk) 著
作者: 陆平 赵培 左奇 等编著
作者: Douglas Schmidt,Michaes Stal,Hans Rohnert,Frank Buschmann