本书从系统的视角,通过准确、清晰的讲解以及示例和Verilog文件,展示了如何使用简单的组合和时序模块来构建完整的系统。本书共分七部分,不仅涵盖了组合逻辑电路、算术运算电路、时序逻辑电路和同步时序电路等基本的数字逻辑课程的内容,还给出了有限状态机、流水线、接口规范、系统时序、存储系统等计算机组成原理课程的知识。
Dally和Harting基于他们在数字设计领域的特殊经验,以一种清晰和建设性的方式结合了数字电路和体系结构设计。通过本书接触计算系统的不同抽象层次和视角,学生将发现一种现代和高效的方式来理解数字设计背后的基础知识和技术。
—— Giovanni De Micheli,瑞士联邦理工学院
所有你期望了解的数字设计的知识都可以从这本Dally教授的书中学到。作者基于几十年的实践经验,提炼出设计和组成完整数字系统所必需的方法和技术。本书条理清晰、叙述简洁,很好地覆盖了数字设计的基础知识和系统层面的技术。学习本书是将来有志成为微处理器和SoC设计师的学生的一个理想起点!
—— Robert Mullins,剑桥大学和树莓派基金会
这本书设立了本科讲授数字系统设计的新标准。书中实用的方法和具体的实例为任何想要理解和设计现代复杂数字系统的人提供了一个坚实的基础。
—— Steve Keckler,得克萨斯大学奥斯汀分校
这本书不仅讲如何做数字设计,而且更重要的是,它展示了如何做好的数字设计。本书强调尽量采用简洁接口进行模块化的重要性,生成不仅满足规范而且可以容易被其他人理解的数字工件的重要性。本书将不仅对于学生非常有用,而且对于该领域的实践者同样是一本非常有价值的参考书。
—— Chuck Thacker,微软公司
一本采用系统视角来讲解数字设计的非常棒的书。这本书是一个伟大的工作,专注于数字设计中的重要内容,从基础到系统,采用硬件描述语言HDL(Verilog)使得书中内容更加实用和符合工业界需求。
—— Rob A. Rutenbar,伊利诺伊大学厄巴纳-香槟分校
本书从系统的视角介绍了数字系统设计的全过程,不仅涵盖了组合逻辑电路、算术运算电路、时序逻辑电路和同步时序电路等基本的数字逻辑课程的内容,还给出了有限状态机、流水线、接口规范、系统时序、存储系统等计算机组成原理课程的知识。作者William J. Dally曾担任斯坦福大学计算机科学系主任,他不仅是斯坦福大学的教授,还是英伟达公司的首席科学家,具有丰富的教学经验和杰出的工程经验。
前
作者简介
威廉 J. 达利
(William J. Dally)
斯坦福大学工程学院Willard R.和Inez Kerr Bell教授,英伟达公司首席科学家;曾担任斯坦福大学计算机科学系主任。他和他的团队开发了系统结构、网络体系结构、信令、路由和同步技术,这些技术可以在当今大多数大型并行计算机中找到。他在工业界和学术界有着多年的工作经验,曾在贝尔实验室、加州理工学院和麻省理工学院任职,并曾在数字设备公司、克雷研究公司和英特尔公司当过顾问。他是美国国家工程院院士、IEEE会士、ACM会士、美国艺术与科学院院士。他曾获得很多荣誉,其中包括ACM Eckert-Mauchly奖、IEEE Seymour Cray奖、ACM Maurice Wilkes奖。他发表过200多篇论文,拥有超过75项授权专利,并且是《Digital Systems Engineering》《Principles and Practices of Interconnection Networks》的作者。
R. 柯蒂斯·哈廷
(R. Curtis Harting)
目前就职于谷歌公司。分别于2012年和2009年获得斯坦福大学博士学位和硕士学位,2007年获得杜克大学学士学位。他的主要研究兴趣是计算机体系结构,重点是并行、高性能和高能效的设计。
后
译者简介
韩德强
北京工业大学信息学部计算机学院实验中心主任,高级工程师。曾在企业从事过12年的x86工控机主板开发、控制工程研发,长期从事微机原理与接口、单片机技术、计算机控制、嵌入式系统等教学工作。与Intel、Microsoft、TI和Xilinx等国际知名企业有着深入合作关系。
本书的目的是教大学生理解并设计数字系统。书中采用硬件描述语言(Verilog)和现代CAD工具讲授当前工业数字系统设计所需的技能;特别关注系统级的问题,其中包括数字系统的分解和划分、接口设计和接口时序;涵盖深入理解数字电路所需的主题,如时序分析、亚稳态和同步;还涉及手工设计组合逻辑电路和时序逻辑电路的内容。然而,对于数字系统设计而言,除了设计简单的模块之外还有很多内容,我们不会详述这些话题。
当完成了本书的相关课程后,学生就应该具备在企业中进行数字设计的能力了。尽管缺乏实践经验,但他们已经掌握了数字设计实践中所需的全部工具。经验会随着时间慢慢增长。
本书是在作者25年以上本科生数字设计课程的教学经验(加州理工学院的CS181、麻省理工学院的6004以及斯坦福大学的EE121和EE108A),以及35年设计数字系统的经验(贝尔实验室、DEC公司、Cray公司、Avici公司、Velio通信、流处理器公司以及NVIDIA公司)基础上编著而成的。结合这两种经验,本书将教给学生实际工作中需要的有用知识,而所采用的方法已经被历届学生证明是有效的。
我们写这本书的初衷是市面上暂时找不到任何一本从系统级层面介绍数字设计的书。绝大部分同类教科书讲述的都是组合逻辑电路和时序的手工设计。虽然现如今的很多教科书都采用了硬件描述语言,但绝大多数采用的都是古老的TTL类型的设计风格,它只适用于使用7400四与非门器件的年代(20世纪70年代),无法培养可以设计出具有30亿晶体管的GPU的学生。如今,学生需要掌握如何分解状态机、划分设计,并构建正确时序的接口。对于这些话题,我们会采用一种简单的方式介绍,而不会陷入细节。
本书概要
图1所示流程图给出了本书的组织结构及各个章节的依赖关系。本书分为绪论、5个主要部分以及关于风格和验证的章节。
图1本书的组织结构及各章节的相互关系
第一部分绪论
第1章介绍数字系统,涵盖了信息表现形式的数字信号、噪声容限以及数字逻辑在当今世界中的作用。第2章介绍数字设计在工业中的应用,包括设计流程、现代实现技术、计算机辅助设计工具和摩尔定律。
第二部分组合逻辑
第3~9章论述了组合逻辑电路——输出值仅取决于当前输入值的数字电路。第3章介绍逻辑设计的理论基础——布尔代数。第4章介绍开关逻辑和CMOS门电路。第5章介绍用来计算CMOS电路延迟和功耗的简单模型。第6章介绍利用基础门电路手工设计组合电路的方法。第7章介绍利用Verilog硬件描述语言对组合逻辑的行为描述进行编码的自动设计过程。第8章介绍组合逻辑基础单元、解码器和多路选择器等。第9章给出了一些组合电路设计的实例。
第三部分算术电路
第10~13章介绍计数制(数制系统)和算术电路。第10章介绍数的基本表示法以及完成整数的+、-、×、÷四则运算的算术电路。第11章介绍定点数和浮点数的表示方法及其精度,还包括对浮点单元设计的讨论。第12章介绍快速算术电路的构建方法,包括超前进位、华莱士树和布斯编码。第13章介绍算术电路和系统的实例。
第四部分同步时序逻辑
第14~19章介绍同步时序逻辑电路(即状态仅在时钟边沿发生改变的时序电路)以及有限状态机的设计过程。第14章介绍基础知识。第15章介绍时序约束。第16章介绍的主题是数据通路时序电路的设计——其行为是由一个表达式而不是一个状态表进行描述的。第17章描述如何将复杂的状态机分解成几个更小、更简单的状态机。第18章介绍存储程序控制的概念,以及如何利用微码引擎建立有限状态机。这一部分以第19章的一系列实例作为结束。
第五部分实用设计
第20章和附录讨论了数字设计项目中的两个重要方面。第20章的主要内容是验证逻辑的正确性以及生产后测试是否能正确工作。附录的内容是教给学生恰当的Verilog编码风格。这种风格令代码具有可读性、可维护性,并使得CAD工具可以产生优化的硬件。学生应该在编写自己的Verilog程序之前、之中及之后都读一读附录的内容。
第六部分系统设计
第21~25章讨论系统设计并介绍一种数字系统设计和分析的系统化方法。第21章介绍系统设计过程中的6个步骤。第22章讨论系统级时序和接口时序的约定。第23章讲述模块和系统的流水线,还包括一些流水线的实例。第24章描述系统的互连,包括总线、交叉开关和网络等内容。第25章讨论存储器系统。
第七部分异步逻辑
第26~29章讨论异步时序电路——无须等待时钟沿,任何输入的变化能即刻引起状态变化的电路。第26章介绍流表的分析与综合以及竞争问题等异步电路设计的基础知识。第27章给出了上述技术的实例,分析作为异步电路的触发器和锁存器。第28章介绍亚稳态和同步失效等问题。第29章是这一部分也是本书的结尾,讨论同步器的设计——如何设计出可以使得信号安全地跨越异步边界的电路。
教学建议
本书适用于为期一个季度(10周)或一个学期(13周)的数字系统设计的入门课程,也可以作为更高级的第二门数字系统课程的主教材。
使用本书不需要任何先修课程,只需要对高中数学有较好的理解即可。除了第5章和第28章外,其余章节仅涉及导数的内容,并且不需要微积分的知识。在斯坦福大学,虽然E40(电气工程导论)是EE108A(数字系统Ⅰ)的先修课程,但是学生即使没有学习这门先修课程,通常也可以学习EE108A。
对于一个季度的数字系统设计入门课程,可以涵盖第1、3、6、7、8、10、(11)、14、15、16、(17)、21、22、(23)、26、28和29章的内容。对于一个季度的课程而言,可以省去CMOS电路(第4和5章)、微码(第18章)和高级系统(第24和25章)的内容。括号中的三章内容是可选的,当课程节奏较为缓慢时可以跳过这些内容。在斯坦福大学开设这门课程时,我们通常会进行两次考试:第一次是在讲完第11章之后,第二次则是在讲完第22章之后。
对于一个学期的数字系统设计入门课程,可以利用增加的三周时间讲解CMOS电路和一些高级系统的内容。一般而言,一个学期的课程包含第1、2、3、4、(5)、6、7、8、9、10、(11)、13、14、15、16、(17)、(18)、(19)、21、22、(23)、(24)、(25)、26、(27)、28和29章的内容。
本书也可以用于数字系统设计的高级课程。此类课程更深入地介绍入门课程的内容,同时涵盖了入门课程里略去的高级内容。此类课程通常会包括一个有意义的学生项目。
素材
为了支撑本书的教学,课程网站提供了教学素材关于本书教辅资源,只有使用本书作为教材的教师才可以申请,需要的教师可向剑桥大学出版社北京代表处申请,电子邮件:solutions@cambridgeorg。——编辑注 ,包括讲课幻灯片、一系列实验和部分习题的答案。实验旨在加强对课程内容的理解,可通过软件仿真,或是在FPGA上通过仿真和实际操作相结合的方式实现。
致谢
向那些为本书出版做出贡献的人致以最衷心的感谢。本书在麻省理工学院(6004)和斯坦福大学(EE108A)多年的数字设计课程教学中不断完善。感谢那些参与这门课程早期版本的几代学生,是他们提供的反馈信息让我们不断地改进教学方法。Subhasish Mitra教授、Phil Levis教授和My Le教授使用早期版本的教材在斯坦福大学授课,并且提出了很多有价值的建议,引导我们不断提高。多年来,本书和课程也得益于很多助教的贡献。特别感谢Paul Hartke、David BlackShaffer、Frank Nothaft和David Schneider,还要感谢Frank对习题答案的贡献。Gill Pratt、Greg Papadopolous、Steve Ward、Bert Halstead和Anant Agarwal在麻省理工学院讲授6004课程的经历,帮助我们改进了本书中提到的数字设计的教学方法。
剑桥大学出版社的Julie Lancashire和Kerry Cahill在整个项目中一直在帮助我们。在此,感谢Irene Pizzie的文字编辑,感谢Abigail Jones从手稿中一些杂乱的段落中整理内容,并最终完成本书的出版工作。
最后,要感谢我们的家庭成员Sharon、Jenny、Katie和Liza Dally以及Jacki Armiak、Eric Harting和Susanna Temkin给予我们极大的支持并做出了有意义的牺牲,没有他们,我们无法专心投入写作。
计算机\硬件
Dally和Harting基于他们在数字设计领域的特殊经验,以一种清晰和建设性的方式结合了数字电路和体系结构设计。作者通过接触计算系统的不同抽象层次和视角,学生将发现一种现代和高效的方式来理解数字设计背后的基础知识和技术。
——Giovanni De Micheli,瑞士联邦理工学院
所有你期望了解的数字设计的知识都可以从这本Dally教授的书中学到。作者基于几十年的实践经验,提炼出设计和组成完整数字系统所必需的方法和技术。本书条理清晰、叙述简洁,很好地覆盖了数字设计的基础知识和系统层面的技术。学习本书是将来有志成为微处理器和SoC设计师的学生的一个理想起点!”——Robert Mullins,剑桥大学和树莓派基金会
这本书设立了本科讲授数字系统设计的新标准。书中实用的方法和具体的实例为任何想要理解和设计现代复杂数字系统的人提供了一个坚实的基础。——Steve Keckler,得克萨斯大学奥斯汀分校
这本书不仅讲如何做数字设计,而且更重要的是,它展示了如何做好的数字设计。本书强调尽量采用简洁接口进行模块化的重要性,生成(不仅满足规范而且可以容易被其他人理解的)数字工件的重要性。本书将不仅对于学生非常有用,而且对于该领域的实践者同样是一本非常有价值的参考书。——Chuck Thacker,微软公司
一本采用系统视角来讲解数字设计的非常棒的书。这本书是一个伟大的工作,专注于数字设计中的重要内容,从基础到系统,采用硬件描述语言HDL(Verilog)使得书中内容更加实用和符合工业界需求。——Rob A. Rutenbar,伊利诺伊大学香槟分校
本书从系统的视角介绍了数字系统设计的全过程,不仅涵盖了组合逻辑电路、算术运算电路、时序逻辑电路和同步时序电路等基本的数字逻辑课程的内容,还给出了有限状态机、流水线、接口规范、系统时序、存储系统等计算机组成原理课程的知识。作者William J. Dally曾担任斯坦福大学计算机科学系主任,他不仅是斯坦福大学的教授,还是英伟达公司的首席科学家,具有丰富的教学经验和杰出的工程经验。
[美]威廉 J.达利(William J. Dally)R.柯蒂斯·哈廷(R. Curtis Harting) 著:
威廉 J. 达利(William J. Dally) 斯坦福大学工程学院Willard R.和Inez Kerr Bell教授,英伟达公司首席科学家;曾担任斯坦福大学计算机科学系主任。他和他的团队开发了系统结构、网络体系结构、信令、路由和同步技术,这些技术可以在当今大多数大型并行计算机中找到。他在工业界和学术界有着多年的工作经验,曾在贝尔实验室、加州理工学院和麻省理工学院任职,并曾在数字设备公司、克雷研究公司和英特尔公司当过顾问。他是美国国家工程院院士、IEEE会士、ACM会士、美国艺术与科学院院士。他曾获得很多荣誉,其中包括ACM Eckert–Mauchly奖、IEEE Seymour Cray奖、ACM Maurice Wilkes奖。他发表过200多篇论文,拥有超过75项授权专利,并且是《Digital Systems Engineering》《Principles and Practices of Interconnection Networks》的作者。 R. 柯蒂斯?哈廷(R. Curtis Harting) 目前就职于谷歌公司。分别于2012年和2009年博士和硕士毕业于斯坦福大学,2007年毕业于杜克大学。他的主要研究兴趣是计算机体系结构,重点是并行、高性能和高能效的设计。
韩德强 等译:暂无简介
正如原书作者所言:“Digital systems are pervasive in modern society”我们平时常用到的图像、音视频都已经被数字化,就连人的思维也在被数字化, AI(Artificial Intelligence,人工智能)已成为研究的热点。
本书从系统的视角介绍了数字系统设计的全过程,不仅涵盖了组合逻辑电路、算术运算电路、时序逻辑电路和同步时序电路等基本的数字逻辑课程的内容,还给出了有限状态机、流水线、接口规范、系统时序、存储系统等计算机组成原理课程的知识。William J Dally不仅是斯坦福大学的教授,还是英伟达(NVIDIA)公司的首席科学家。他不仅具有丰富的教学经验,还具有杰出的工程经验。
在本书的翻译过程中,我被书中的内容深深吸引,甚至到了不可自拔的地步。该书与国内同类教材有着本质的区别。首先,国内教材大多采用数学的方法讲述计算机,而本书采用的是计算机的方法讲授计算机。譬如,计算机运算本就是一个有限字长的运算,整数和小数的位数是约定的。因此,在数制转换时根本无须考虑整数部分的“除基取余”法、小数部分的“乘基取整”法,而采用权重法可以轻而易举地将十进制数转换成二进制数。我在讲授这部分时,经常问学生的一句话是:“你们是喜欢做加减法,还是喜欢做乘除法?”这是一个将问题简单化还是复杂化的问题!其次,本书在讲述数字系统设计流程时,给出了国内教材很少涉及的风险评估以及缓解这些风险的方法,还给出了芯片和电路板设计中的一些工程方法。再次,本书给出了数字系统在实际工程中的巧妙应用之法,如在减色法中利用原色的逻辑或,可以正确得到间色和复色。诸如此类,举不胜举!
正如微软的Chuck Thacker所言:“这本书不仅介绍了如何做数字设计,更重要的是展示了如何做‘好的’设计。”我以近20年的计算机硬件和嵌入式系统教学、项目开发经验以及十几年的企业产品研发经验,强烈推荐这本教材!
本书由北京工业大学信息学部计算机学院的部分教师翻译。其中前言等文前内容和第1、2章由韩德强翻译;第3~7章由邵温翻译;第8、9章由高雪园翻译;第10~13章由杨淇善翻译;第14~19章由张丽艳翻译;第20~25章以及附录部分由鲁鹏程翻译;第26~29章由王宗侠翻译。全书的审校由韩德强完成。
本书在翻译过程中得到了机械工业出版社华章分社朱劼女士的大力支持,在此表示由衷的感谢!
限于译者的水平,翻译中难免有错误或不妥之处,真诚希望各位读者批评指正。
韩德强
2017年5月于北京工业大学
出版者的话
推荐语
译者序
前言
第一部分绪论
第1章数字抽象化
11数字信号
12数字信号容忍噪声
13数字信号表示复杂数据
131表示一年中的某一天
132表示减色法
14数字逻辑函数
15数字电路和系统的Verilog描述
16系统中的数字逻辑
小结
文献说明
习题
第2章数字系统设计实践
21设计流程
211设计规格
212概念开发与可行性
213划分与详细设计
214验证
22数字系统由芯片和电路板构建
23计算机辅助设计工具
24摩尔定律和数字系统演变
小结
文献说明
习题
第二部分组合逻辑
第3章布尔代数
31公理
32性质
33对偶函数
34标准形式
35从公式到门电路
36用Verilog描述布尔表达式
小结
文献说明
习题
第4章CMOS逻辑电路
41开关逻辑
42MOS晶体管的开关模型
43CMOS门电路
431基本的CMOS 门电路
432反相器、与非门、或非门
433复杂门
434三态电路
435应避免使用的电路
小结
文献说明
习题
第5章CMOS电路的延迟和功耗
51静态CMOS门的延迟
52扇出和驱动大电容负载
53扇入和逻辑功效
54延迟计算
55延迟优化
56连线延迟
57CMOS电路的功率损耗
571动态功耗
572静态功耗
573功率调节
小结
文献说明
习题
第6章组合逻辑设计
61组合逻辑
62闭合
63真值表、最小项和标准形式
64蕴涵项和立方体
65卡诺图
66函数的覆盖
67由覆盖转化成门电路
68不完全确定函数
69“和之积”形式的实现
610险象
小结
文献说明
习题
第7章使用Verilog描述组合逻辑
71用Verilog描述素数电路
711Verilog模块
712case语句
713casex语句
714assign语句
715结构描述
716十进制素数函数
72素数电路的测试平台
73实例:七段译码器
小结
文献说明
习题
第8章组合电路基础单元
81多位信号的表示
82译码器
83多路选择器
84编码器
85仲裁器和优先编码器
86比较器
87移位器
88只读存储器
89读写存储器
810可编程逻辑阵列
811数据手册
812知识产权
小结
文献说明
习题
第9章组合电路实例
913的倍数电路
92明天电路
93优先级仲裁器
94井字棋游戏
小结
习题
第三部分算术电路
第10章算术电路
101二进制数
102二进制加法
103负数和减法
104乘法
105除法
小结
习题
第11章定点数和浮点数
111误差的表示方法:准度、精度和分辨率
112定点数
1121表示方法
1122运算
113浮点数
1131表示方法
1132未规格化数和逐级下溢
1133浮点数乘法
1134浮点数加/减法
小结
文献说明
习题
第12章快速算术电路
121超前进位
122布斯编码
123华莱士树
124综合说明
小结
文献说明
习题
第13章算术运算实例
131复数乘法
132定点和浮点格式之间的转换
1321浮点格式
1322定点数到浮点数的转换
1323浮点数到定点数的转换
133FIR 滤波器
小结
文献说明
习题
第四部分同步时序逻辑
第14章时序逻辑
141时序电路
142同步时序电路
143交通灯控制器
144状态分配
145实现有限状态机
146Verilog编程实现有限状态机
小结
文献说明
习题
第15章时序约束
151传播和污染延迟
152D触发器
153设置和保持时序约束
154时钟偏差的影响
155时序实例
156时序和逻辑综合
小结
文献说明
习题
第16章数据通路时序逻辑
161计数器
1611简单计数器
1612加一/减一/载入计数器
1613定时器
162移位寄存器
1621一个简单的移位寄存器
1622左移/右移/载入移位寄存器
1623通用移位器/计数器
163控制和数据分区
1631实例:自动售货机FSM
1632实例:密码锁
小结
习题
第17章分解有限状态机
171闪光信号灯
172交通灯控制器
小结
习题
第18章微码
181简单的微编码FSM
182指令序列
183多路分支
184多种指令类型
185微码子程序
186简单计算机
小结
文献说明
习题
第19章时序电路实例
1913分频计数器
192SOS探测器
193井字棋游戏
194赫夫曼编码/译码
1941赫夫曼编码器
1942赫夫曼解码器
小结
文献说明
习题
第五部分实用设计
第20章验证与测试
201设计验证
2011覆盖率的验证
2012测试的类型
2013静态时序分析
2014形式验证
2015缺陷跟踪
202测试
2021故障模型
2022组合逻辑测试
2023测试冗余逻辑
2024扫描
2025内置自测试
2026特性测试
小结
文献说明
习题
第六部分系统设计
第21章系统级设计
211系统设计过程
212规格
2121Pong
2122DES破解器
2123音乐播放器
213系统划分
2131Pong
2132DES破解器
2133音乐合成器
小结
文献说明
习题
第22章接口和系统级时序
221接口时序
2211常有效时序
2212周期性有效信号
2213流控制
222接口划分与选择
223接口的串行化与分包
224同步时序
225时序表
2251事件流
2252流水线和时序预测
226接口与时序实例
2261Pong
2262DES破解器
2263音乐播放器
小结
习题
第23章流水线
231流水线基础
232流水线举例
233实例:行波进位加法器流水线
234流水线停顿
235双缓冲
236负载均衡
237可变负载
238资源共享
小结
文献说明
习题
第24章互连
241互连简述
242总线
243交叉开关
244互连网络
小结
文献说明
习题
第25章存储器系统
251存储器的基本存储体
2511SRAM阵列
2512DRAM芯片
252用位片和存储体构造存储器
253交叉存储器
254高速缓存
小结
文献说明
习题
第七部分异步逻辑
第26章异步时序电路
261流表分析
262流表综合:触发电路
263竞争与状态分配
小结
文献说明
习题
第27章触发器
271锁存器的内部结构
272触发器的内部结构
273CMOS锁存器与触发器
274锁存器的流表推理
275D触发器的流表综合
小结
文献说明
习题
第28章亚稳态和同步失效
281同步失效
282亚稳态
283进入和脱离非法状态的概率
284亚稳态的演示
小结
文献说明
习题
第29章同步器设计
291何处使用同步器
292蛮力同步器
293多位信号的问题
294FIFO同步器
小结
文献说明
习题
附录Verilog编码风格
参考文献
Verilog模块索引
主题词索引