本书作为数字电路设计著作,为读者提供了一个系统级的视角,并为他们理解、分析和设计数字系统提供了相关资料和工具。它教授当前工业界数字系统设计中所需的硬件描述语言(VHDL)和现代
CAD 工具使用相关的技能。特别注意系统级问题,包括分解和划分数字系统、接口设计和接口时序。也涉及需要深入理解的相关问题,如时序分析、亚稳态和同步性。当然,本书还涵盖了组合和时序逻辑
电路的人工设计。
无
这本导论性教科书为学生提供了系统级的观点和用于理解、分析和设计数字系统的工具。书中讲解了这些模块如何用于构建完整的系统,这远远超越了简单的组合和时序模块设计。
●理解现代设计实践所需的所有重要主题,本书都涉及:
■ 组合和时序模块的设计与分析
■ 组合和时序模块的构成
■ 数据和控制分区
■ 有限状态机的分解和构成
■ 接口规格
■ 系统级时序
■ 同步性
●教授如何以高效和可维护的方式编写VHDL2008 HDL,这使得CAD工具可以处理很多烦琐的工作。
● 涵盖逻辑设计的基本原理,描述设计组合逻辑的有效方法,手动和使用现代CAD工具分析状态机。
数字设计的完整介绍是通过清晰的解释、延伸示例和在线VHDL文件给出的。完整的教学包包括课件幻灯片、实验和教师解决方案手册等。假设学生没有数字知识背景,那么这本教科书是本科阶段数字设计课程的理想选择,是为学习现代数字实践的学生准备的。
本书旨在帮助本科生学习和设计数字系统。它教授当前工业界数字系统设计中所需的硬件描述语言(VHDL)和现代CAD工具使用相关的技能。特别注意系统级问题,包括分解和划分数字系统、接口设计和接口时序。也涉及需要深入理解的相关问题,如时序分析、亚稳态和同步性。当然,本书还涵盖了组合和时序逻辑电路的人工设计。但是,因为与设计这样简单的模块相比数字系统设计要复杂很多,所以在此不详细叙述这些问题。
在完成本书的课程后,学生应该准备实践工业界的数字设计。虽然他们缺乏经验,但他们已经学习了实践所需要的所有工具。经验将随着时间而逐渐积累。
本书诞生于作者超过25年的本科生数字设计教学经验(加州理工学院CS181,麻省理工学院6004,斯坦福EE121和EE108A),以及工业界35年的数字系统设计经验(Bell Labs, Digital Equipment,Cray,Avici,Velio Communications,Stream Processors和Nvidia)。本书结合这两方面的经验来指导学生,在工业界中,已经在几代学生身上证明了本书所教授的知识是十分有用的。附录B中的VHDL语法指南是大不列颠哥伦比亚大学(EECE 353和EECE 259)本科生近十年的VHDL教学资料。
因为市场上没有一本可以涵盖系统级数字设计方面的书,所以我们写了这本书。另外,绝大多数关于组合和时序逻辑电路的人工设计主题的教科书也已经停止出版了。当今大多数教科书都使用硬件描述语言,但是它们绝大多数都介绍TTL风格的设计,尽管这类设计能够在7400系列芯片的面积内放置4个“与非”门元件(20世纪70年代),但没考虑让学生设计一个具有30亿个晶体管的GPU。今天的学生需要了解如何把状态机、划分设计和构建带有正确时序的接口等因素考虑在内。本书以深入浅出的方式描述这些问题。
本书大纲
下面的流程图显示了本书的组织结构及各章节之间的关系,如图1所示。附录B提供了一个VHDL2008语法的总结。
图1本书的结构图和各章节之间的关系
第一部分引言
第1章介绍数字系统,包括数字信号、噪声容限等信息的表示,数字逻辑在现代世界扮演的角色。第2章介绍工业界数字系统设计实践。其中包括设计过程、现代实现技术、计算机辅助设计工具和摩尔定律。
第二部分组合逻辑
第3~9章介绍组合逻辑电路——数字电路的输出仅取决于其输入的当前值。布尔代数是逻辑设计的理论基础,在第3章中讨论。第4章介绍开关逻辑和CMOS门电路。第5章介绍计算CMOS电路延时和功耗的简单模型。第6章介绍从基本的门开始手动设计组合逻辑电路的方法。第7章讨论如何通过对VHDL中组合逻辑的行为描述进行编码来使设计过程自动化。第8章介绍译码器、多路复用器等组合逻辑中的构建块,第9章列出了几个组合逻辑电路的设计实例。
第三部分算术运算电路
第10~13章描述了数字系统和算术运算电路。第10章描述在整数上执行四个函数+、 -、×和÷的数字表示和算术电路的基础知识。第11章介绍定点和浮点数表示及其精度,该章还包括对浮点单元设计的讨论。第12章描述构建快速运算电路的技术,包括超前进位、华莱士(Wallace)树和Booth重编码。最后,算术运算电路和系统的示例在第13章中给出。
第四部分同步时序逻辑
第14~19章描述同步时序逻辑电路——其状态仅在时钟边缘发生变化,以及设计有限状态机的过程。在学习了第14章的基础知识之后,时序约束在第15章中讨论。数据通路时序电路的设计——其行为由方程而不是状态表描述——是第16章的主题。第17章描述如何将复杂状态机分为几个更小更简单的状态机。第18章介绍存储程序控制的概念,以及如何使用微代码引擎构建有限状态机。本节将以第19章中的一些示例结束。
第五部分实践设计
第20章和附录讨论了数字设计项目的两个重要方面。验证逻辑正确性的过程和设计完成后的测试是第20章的主题。附录让学生学会合适的VHDL编码风格——良好的可读性和可维护性,并且使CAD工具能够生成优化的硬件。无论是在编写自己的VHDL之前、之中还是之后,学生都应阅读本章。
第六部分系统级设计
第21~25章讨论了系统级设计,并介绍了数字系统设计与分析的系统化方法。第21章介绍了系统设计的六个步骤。第22章讨论接口的系统级时序和约定。第23章介绍模块和系统的流水线,包括几个流水线示例。第24章介绍包括总线、交叉开关和网络在内的系统互连。第25章给出存储器系统的讨论。
第七部分异步逻辑
第26~29章讨论异步时序电路——其状态随着任何输入变化而变化,不需等待时钟上升沿。第26章介绍异步时序电路设计的基础知识,包括流程表分析和综合以及竞争问题。第27章给出这些技术的一个例子,分析作为异步电路的触发器和锁存器。亚稳态和同步故障的问题在第28章中有所描述。第29章讨论同步器设计——如何设计跨越异步边界安全移动信号的电路。
教学建议
本书适用于每学年三学期(Quarter制)或者每学年两学期(Semester制)的一学期课程,可用作10周(Quarter制)或13周(Semester制)的数字系统设计基础性课程教材。本书也可以作为大学高年级数字系统课程的教材。
使用本书做教材时,学生不需要任何正式的先修知识。高中数学知识是唯一需要掌握的。除了第5章和第28章之外,其他章节不需要微积分知识。在斯坦福大学,E40(电机工程简介)是EE108A(数字系统I)的先修课程,但学生在没有学习先修课程的情况下使用EE108A也没有问题。
每学期10周的数字系统设计入门课程可采用第1、3、6、7、8、10、(11)、14、15、16、(17)、21、22、(23)、26、28和29等章节的内容。对于每学期10周的课程,省略了CMOS电路的细节(第4、5章)、微代码(第18章)和更高级的系统问题(第24、25章)。括号中的3个章节是可选的,也可以跳过以稍微减慢课程节奏。在斯坦福大学讲授本课程时,我们通常会安排两次期中考试:第一次在学完第11章后,第二次在学完第22章后。
每学期13周的数字系统入门课程可以使用额外的3周学习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。——编辑注
为了支持这本书的教学,课程网站(wwwcambridgeorg/dallyVHDL)提供的教学材料包括:课件幻灯片、一系列函数(单元)库和习题答案。库是用于完善课程内容的补充材料,并且可以用来对仿真后的结果在FPGA上进行综合实现。
“基于在数字设计方面的卓越经验,Dally和Harting以一种清晰且具有建设性的方式融合了电路和架构设计。”
“通过了解不同的抽象层次和计算系统的观点,学生将会发现一种现代的和有效的方式来理解数字电路设计的基础知识。”
——Giovanni De Micheli,瑞士洛桑联邦理工学院
“在数字系统设计领域,为了从非常实用的角度出版一本能够培训未来工程师的有关理论知识的教科书,作者将数十年的学术和行业经验融合在一起,使学生不仅学习他们正在设计的内容,而且还学习他们在做什么。通过介绍关键的高级主题,如综合、延时和逻辑,以及同步性,在引导层面上,本书不仅有实用建议而且还有深层的理解,这是本书十分难得的一点。因此,本书可很好地帮助学生为未来工艺、工具和技术的日新月异做好准备。”
——David BlackSchaffer,乌普萨拉大学
“你将会期待从本书中找到的一切。数十年的实践经验经过提炼,以提供设计和组成完整数字系统所需的各种工具。本书涵盖基础知识和系统级问题,对于微处理器和未来的SoC设计师是一个理想的起点!”
——Robert Mullins,剑桥大学和Raspberry Pi基金会
“这本书为如何教授本科生数字系统设计建立了新标准。实用方法和具体例子可为任何想要了解或设计现代复杂的数字系统的人提供坚实的知识基础。”
——Steve Keckler,德克萨斯大学奥斯汀分校
“本书不仅教如何做数字设计,更重要的是教如何做好设计。它不只是强调使用清晰的接口进行模块化的重要性,还强调生产数字产品不仅要符合规格要求,而且要使别人容易理解。它巧妙地选择了合适的示例和用于实现它们的Verilog代码。”
“本书包括异步逻辑设计有关内容,随着能源消耗成为数字系统的主要关注点,这个主题可能日益重要起来。”
“最后关于Verilog编码风格的附录特别有用。本书不仅对学生有价值,而且还对该领域的从业人员有用。强烈推荐它。”
——Chuck Thacker,微软
“一本有着非常好的系统观点的好书。在数字设计中最有趣的、同时也最令人头疼的事情在这本书中都得到了体现,即工程师必须将从点到块、从信号到CPU的想法整合起来。本书在突出重点、从基础到系统的迁移等方面做了非常大的努力,特别是选用了适量的HDL(Verilog),使得所有的设计都切合实际并且相关。”
——Rob A.Rutenbar,伊利诺伊大学香槟分校
集成电路设计
“这本书为如何教授本科生数字系统设计建立了新标准。实用方法和具体例子可为任何想要了解和设计现代复杂的数字系统的人提供坚实的知识基础。”
—— Steve Keckler,德克萨斯大学奥斯汀分校
“你将会期待从本书中找到的一切。数十年的实践经验经过提炼,以提供设计和组成完整数字系统所需的各种工具。本书涵盖基础知识和系统级问题,对于微处理器和未来的SoC设计师是一个理想的起点!”
—— Robert Mulins,剑桥大学和 Raspberry Pi基金会
本书特色
理解现代设计实践所需要的所有重要方面,本书都涉及:
·组合和时序模块的设计和分析
·组合和时序模块的组成
·数据和控制分离
·有限状态机的组成
·接口定义
·同步性
教读者如何编写符合VHDL-2008并且有着高效和可持续风格的HDL代码,从而利用CAD工具去做大多数单调乏味的优化工作。
涉及逻辑设计的基础,描述了设计组合逻辑和状态机的有效方法,既可以手动设计也可以利用CAD工具。
本书通过给出详细的解释、扩展实例和在线的VHDL文件,完整地介绍了数字系统设计。
作者简介
William J. Dally 斯坦福大学工程系Willard R.和Inez Kerr Bell教授、NVIDIA公司首席科学家、美国国家工程院院士、IEEE/ACM/美国艺术与科学学院会员。他获得了许多荣誉,包括ACM Eckert-Mauchly奖,IEEE Seymour Cray奖和ACM Maurice Wilkes奖。
R. Curtis Harting 谷歌的软件工程师,拥有斯坦福大学博士学位。他于2007年毕业于杜克大学获得学士学位,主修电气与计算机工程和计算机科学。在2009年,他从斯坦福大学获得硕士学位。
Tor M. Aamodt 不列颠哥伦比亚大学电气与计算机工程系副教授。他与研究生一起开发了GPGPU-Sim模拟器。他的三篇关于通用GPU结构的论文已被选中作为IEEE杂志的“热门精选”,一篇作为美国计算机协会(ACM)杂志通信方向的“研究热点”。在2012-2013年度休假期间他是斯坦福大学计算机科学系客座副教授,从2004年至2006年,他在NVIDIA公司工作,研究GeForce 8系列GPU的内存系统架构(“帧缓冲器”)。
[美]威廉姆·J.戴利(William J. Dally )
R.柯蒂斯·哈丁(R. Curtis Harting) 托·M.阿莫特(Tor M.Aamodt) 著:William J. Dally 斯坦福大学工程系Willard R.和Inez Kerr Bell教授、NVIDIA公司首席科学家、美国国家工程院院士、IEEE/ACM/美国艺术与科学学院会员。他获得了许多荣誉,包括ACM Eckert-Mauchly奖,IEEE Seymour Cray奖和ACM Maurice Wilkes奖。
R. Curtis Harting 谷歌的软件工程师,拥有斯坦福大学博士学位。他于2007年毕业于杜克大学获得学士学位,主修电气与计算机工程和计算机科学。在2009年,他从斯坦福大学获得硕士学位。
Tor M. Aamodt 不列颠哥伦比亚大学电气与计算机工程系副教授。他与研究生一起开发了GPGPU-Sim模拟器。他的三篇关于通用GPU结构的论文已被选中作为IEEE杂志的“热门精选”,一篇作为美国计算机协会(ACM)杂志通信方向的“研究热点”。在2012 - 2013年度休假期间他是斯坦福大学计算机科学系客座副教授,从2004年至2006年,他在NVIDIA公司工作,研究GeForce 8系列GPU的内存系统架构(“帧缓冲器”)。
本书于2015年12月首次出版,原作者是William J. Dally、R. Curtis Hartin以及Tor M. Aamodt,这三位在数字电路设计领域都卓有建树。William J. Dally是斯坦福大学Willard R和Inez Kerr Bell教授以及NVIDIA公司的首席科学家,在学术界和工业界享有盛誉。R. Curtis Hartin博士是Google的软件工程师,而Tor M. Aamodt则是大不列颠哥伦比亚大学计算机工程系的副教授,同样有着丰富的电路设计经验。
数字电路设计发展到目前已经形成了相当成熟的体系,各种介绍数字电路设计的书籍也不胜枚举。但技术总是在不断进步,每发展到一个阶段,人们又会对技术产生更深的理解,用更高的角度重新审视现有的一切。本书作为数字电路设计著作,为读者提供了一个系统级的视角,并为他们理解、分析和设计数字系统提供了相关资料和工具。从最简单的组合逻辑和时序逻辑模块的设计,到如何使用这些模块搭建完整的系统,整个过程体现了真实世界的数字电路设计。
本书适用于微电子、电子信息与工程及计算机等专业的高年级本科生、研究生的教材,但同样适用于相关专业的研究生以及缺乏数字电路设计基础的同学。即便是有着相当丰富的数字电路设计经验的工程师,本书也能提供很多帮助。
本书的翻译工作由清华大学王志华教授主持,廖栋梁翻译了前言以及第1~7章,李卫翻译了第8~15章,杜智超翻译了第16~22章,成畅翻译了第23~29章以及附录A和附录B。最后。四位译者也做了交叉校阅,王志华教授审定了全部书稿。该书计划将于2019年春季学期起作为清华大学电子科学与技术学科研究生数字电路系统设计课程的教材。
非常荣幸能够参与本书的翻译工作中,这是一项非常有趣且有意义的工作,但同时这项工作也非常具有挑战性。虽然之前修过一些与之相关的课程,对翻译很有帮助,但在翻译过程中依然遇到过对书中内容理解不够透彻而使翻译无法顺利进行的地方,好在通过查阅文献,咨询老师,这些问题得到了很好的解决。
本书中文版中难免存在翻译欠妥之处,望读者朋友不吝赐教,欢迎与我们取得联系。
——译者于清华大学
2018年1月16日
出版者的话
本书赞誉
译者序
前言
致谢
作者简介
第一部分引言
第1章数字信息简述
11数字信号
12数字信号噪声容限
13数字信号表示复杂数据
14数字逻辑函数
15数字电路与系统的硬件描述语言(VHDL)
16系统中的数字逻辑
总结
文献解读
练习
第2章数字系统设计实践
21设计过程
22数字系统由芯片和电路板组成
23计算机辅助设计工具
24摩尔定律和数字系统发展
总结
文献解读
练习
第二部分组合逻辑
第3章布尔代数
31原理
32内容
33对偶函数
34标准型
35从方程式到逻辑门
36硬件描述语言中的布尔表达式
总结
文献解读
练习
第4章CMOS逻辑电路
41开关逻辑
42MOS晶体管的开关模型
43CMOS门电路
总结
文献解读
练习
第5章CMOS电路的延时和功耗
51CMOS静态延时
52大负载下的驱动扇出
53逻辑努力的扇入
54延时计算
55延时优化
56导线延时
57CMOS电路的功耗
总结
文献解读
练习
第6章组合逻辑电路
61组合逻辑
62闭包
63真值表、最小项、“与”门标准形式
64“与”电路的蕴含项
65卡诺图
66封装函数
67从封装转变为门
68不完全的指标函数
69实现和之积
610冒险
总结
文献解读
练习
第7章组合逻辑电路的VHDL描述
71基本数字电路的VHDL描述
72素数电路的测试文件
73七段译码器
总结
文献解读
练习
第8章组合逻辑电路基本单元
81多位标记
82译码器
83多路复用器
84编码器
85仲裁器和优先编码器
86比较器
87移位器
88ROM
89读/写存储器
810可编程逻辑阵列
811数据表
812知识产权模块
总结
文献解读
练习
第9章组合逻辑电路设计实例
91倍三电路
92明天电路
93优先级仲裁器
94井字游戏电路
总结
练习
第三部分算术运算电路
第10章算术运算电路
101二进制数
102二进制加法
103负数和减法
104乘法器
105除法
总结
练习
第11章定点数和浮点数
111误差的表示:准度、精度和分辨率
112定点数
113浮点数
总结
文献解读
练习
第12章快速运算电路
121超前进位
122Booth重编码
123华莱士树
124综合注意事项
总结
文献解读
练习
第13章算术运算电路设计实例
131复数乘法器
132定点格式和浮点格式之间的转换
133FIR滤波器
总结
文献解读
练习
第四部分同步时序逻辑
第14章时序逻辑
141时序电路
142同步时序电路
143交通灯控制器
144状态分配
145有限状态机的实现
146有限状态机的VHDL实现
总结
文献解读
练习
第15章时序约束
151传播延时和污染延时
152触发器
153建立时间和保持时间约束
154时钟偏移的影响
155时序示例
156时序和逻辑综合
总结
文献解读
练习
第16章数据通路的时序逻辑
161计数器
162移位寄存器
163控制和数据划分
总结
练习
第17章分解有限状态机
171闪光器设计
172交通信号灯控制器
总结
练习
第18章微代码
181简单的微代码状态机
182指令序列
183多路分支
184多种指令类型
185微代码子程序
186简单的计算器
总结
文献解读
练习
第19章时序示例
1913分频计数器
192SOS检测器
193井字棋游戏
194赫夫曼编码器/解码器
总结
文献解读
练习
第五部分实践设计
第20章验证和测试
201设计验证
202测试
总结
文献解读
练习
第六部分系统级设计
第21章系统级设计
211系统设计过程
212设计规范
213划分
总结
文献解读
练习
第22章接口和系统级时序
221接口时序
222接口划分和选择
223串行和打包接口
224同步时序
225时序表
226接口和时序示例
总结
练习
第23章流水线
231普通流水线
232流水线示例
233逐位进位加法器流水线结构设计示例
234流水线停滞
235双重缓冲
236负载平衡
237可变负载
238资源共享
总结
文献解读
练习
第24章互连
241抽象互连
242总线
243交叉开关
244互连网络
总结
文献解读
练习
第25章存储系统
251存储基元
252位片和堆存储器
253交叉存储器
254高速缓存
总结
文献解读
练习
第七部分异步逻辑
第26章异步时序电路
261流表分析
262流表综合:触发电路
263竞争和状态赋值
总结
文献解读
练习
第27章触发器
271锁存器内部结构
272触发器的内部结构
273CMOS锁存器和触发器
274锁存器的流表
275D触发器的流表综合
总结
文献解读
练习
第28章亚稳态和同步故障
281同步故障
282亚稳态
283进入并且留在非法状态的可能性
284亚稳态的验证
总结
文献解读
练习
第29章同步器的设计
291同步器的用途
292强力同步器
293多比特信号问题
294FIFO同步器
总结
文献解读
练习
附录VHDL编码风格和语法指南
附录AVHDL编码风格
附录BVHDL语法指南
参考文献