本书写给所有需要设计和构建真正的数字电路的读者。为达到这个目的,读者必须掌握数字电路的基本原理,同时理解它们在真实世界中是如何运转的。正是基于这一理念,我们选取了“原理与实践”这两大主题。
在过去的30年里,随着集成电路的速度和集成度的快速提高,数字设计实践经历了重大转变。过去,数字设计者用成千甚至上万的门电路和触发器来构建系统,因此专业课程的重点就是如何最小化和有效地利用芯片及板级资源。
今天,一个芯片可以包含几千万个晶体管,并且可以通过编程来构建片上系统。过去要实现这样的系统,需要用几百个包含上百万单个门电路和触发器的分立芯片。如今,产品开发能否成功更多地取决于设计团队正确、完整地定义产品详细功能的能力,而不是将需要的所有电路集成到一块电路板或芯片上的能力。因此,现代专业课程的重点是设计方法论和软件工具,包括硬件描述语言(HDL)。设计团队利用HDL便可以完成超大型分层数字系统的设计。
借助HDL,一方面可以看到典型设计的抽象层次变得更高,超越了单个门电路和触发器的层次。但与此同时,芯片级和电路板级数字电路的速度和集成度的提高,也迫使设计者必须在较低的电子电路级提升竞争力。
大多数优秀的数字设计师都精通或者至少熟悉上述两个抽象层次。本书提供了高级(HDL)、低级(电子电路)以及“广泛中间级”(门电路、触发器和一些较高级的数字设计构件)的多层次基础知识。
目标读者
本书可以作为电气工程、计算机工程或计算机科学专业数字逻辑设计课程的入门教材或中级教材。对于计算机科学专业的学生,如果不熟悉基本电子学概念或者对数字器件的电气特性不感兴趣,可以跳过第14章,书中其他章节基本上都不需要这一章内容作为预备知识。另一方面,具有基本电子学基础的读者,则可通过阅读第14章来快速掌握数字电子学知识。
虽然本书是入门级的,但却比普通的入门教材包含更多内容。我希望常规课程采用书中不超过三分之二的材料,但是,每门课程所用到的是不同的三分之二。因此,请各位教师或读者按照自己的需要决定阅读内容。为了帮助大家做选择,我已经在可选章节的标题上打了星号。一般情况下,可以跳过这些章节而不影响后续必选章节的内容连贯性。此外,矩形文本框(如下所示)中的材料也是可以跳过的。
这是一个简单 一些读者抱怨之前的版本太厚了,我缩减了这一版的篇幅,但依然要提醒大家注意:
的文本框示例 不必一字不落地读完所有内容,打星号的章节都可以略过。
写在这种框里的内容通常也可以略过。
我要求出版社调大了字号(本书采用11磅字,而大部分科技类教材都采用10磅字),这样不仅阅读起来更加舒服,而且图表的位置也更加合理。随手翻开一页,你会发现大部分图表和对图表内容的讲解都位于同一页。(我亲自做的排版工作,着实花了一番心血。)
本书的主题非常全面,在学习后续课程时,你可以再回头翻看相关知识点,甚至参加工作后,依然能从书里学到新东西。不过,教科书总会过时,难逃被丢进垃圾桶的厄运,但也有些“幸运儿”成了书架上的藏品,它的命运最终将系于读者之手。
有些课程会把本书当作中级教程或实验课本来使用。高年级学生可以跳过基础内容而直接进入感兴趣的章节。一旦掌握了基础知识,你会发现Verilog数字设计实例中包含更多重要的和有趣的知识。
建议读者好好利用贯穿全书的页边注释,这将帮助你把握重要的定义和知识点。
各章内容概述
接下来简短介绍一下本书15章的主要内容。这可能会让你想起一般软件指南中所说的,“写给不喜欢阅读手册的人”。看过这部分后,也许你就不必阅读本书的剩余内容了。
第1章给出了一些基本定义和重要主题的预览,还有一点关于数字电路的内容,使读者在不深入阅读第14章的情况下可以顺利学习其他内容。
第2章介绍二进制数制和编码。在软件课程中已经熟悉二进制数制的读者,仍需要阅读2.10~2.13节,以便理解硬件是如何使用二进制编码的。高年级学生可以阅读2.14节和2.15节,其中清楚地介绍了检错码。每个读者都应该阅读2.16.1节,因为在许多现代系统中都要用到它。
第3章讲解组合逻辑设计原理,包括开关代数、组合电路分析、综合与最小化。
. 第4章从文档标准开始介绍各种数字设计实践,文档标准可能是设计者开始实践时的第一步,也是很重要的一步。然后介绍定时的概念,特别是组合电路的定时,最后以关于HDL、设计流程和工具的讨论结束。
第5章是关于Verilog的教程和参考资料,Verilog是本书剩余部分所采用的硬件描述语言。所有读者都应该阅读前几节内容,但是部分读者可能希望跳过其余内容,直到需要时再开始阅读。这也是没问题的,因为新的Verilog结构集中在后续章节(主要是第6章),第一次用到时才会进行讲述。
第6章描述了两个通用的组合构件ROM和PLD。然后介绍两个最常用的功能构件—译码器和多路复用器,每一个都会给出门级和基于Verilog的设计。读者可以从这里直接跳到第9章的状态机,然后再回到第7章和第8章。
第7章继续讨论门级和用Verilog实现的组合构件,包括三态器件、优先编码器、异或门和奇偶函数以及比较器,然后用一个非平凡“随机逻辑”函数的Verilog设计实例引出结论。
第8章讨论实现算术功能的组合电路,包括加法和减法、移位、乘法和除法。
第9章介绍使用D触发器的传统状态机,包括采用状态表、状态图、ASM图和Verilog的状态机的分析和综合。
第10章介绍其他时序元件,包括锁存器、边沿触发器件及其Verilog行为模型。这一章还描述了用典型的FPGA实现的时序元件,并为感兴趣的读者准备了关于时序型PLD和反馈时序电路的章节。
第11章重点讲解两个最常用的时序电路构件—计数器和移位寄存器,包括它们的应用,以及门级和基于Verilog的例子。
第12章包含关于如何采用Verilog对状态机建模的更详细的内容,以及更多例子。
第13章讨论时序电路设计的重要实际概念,包括同步系统结构、时钟和时钟偏移、异步输入和亚稳定性,以及一个用Verilog实现的双时钟同步的详细例子。
第14章介绍数字电路运算,重点在于逻辑器件的外部特性。学习起点是基础的电子学知识,包括电压、电流和欧姆定律。对于如何使真实电路运作起来不感兴趣的读者,或者有权把这项辛苦活交给别人完成的读者可以跳过本章。
第15章全部都是关于存储器件和FPGA的内容。存储器方面包括只读存储器以及静态、动态读/写存储器的内部电路和功能行为特性。最后一节会详细介绍Xilinx 7系列的FPGA结构。
大多数章节都包含参考资料、训练题和练习题。训练题通常是简答题或“轻而易举”的问题,可以直接根据书中材料给出答案,而练习题通常需要花时间仔细思考。第14章的训练题尤其广泛,是为了帮助非电子工程师能较容易地理解本章内容而专门设计的。
与第4版的区别
对于用过本书之前版本的读者和教师而言,除了普通的更新之外,第5版还有以下关键的不同之处。
新版只涉及Verilog,没有VHDL。在不同语言之间跳转只会使人分神。另外,Verilog及其后继SystemVerilog是目前非官方背景下所选择的HDL。推荐大家阅读Steve Golson和Leah Clark的论文,“再论21世纪的语言之争:Verilog与VHDL”(2016 Synopsys Users Group Conference)。这是一篇精彩纷呈且论据充足的论文,如果你不想阅读全文的话,可以直接跳到最后一节。
新版有更多HDL的例子,更加强调设计流程和测试平台,包括纯粹的激励和自检信号。
对于并非旨在培养电子工程师的计算机工程专业的学生,为了使本书更容易阅读,关于CMOS电路的详细内容移到了第14章,而在第1章中加入了最少量的电子学知识,这样,学生就可以跳过整个关于CMOS的章节。
关于TTL、SSI、MSI、74系列逻辑、PLD以及CPLD的内容都删除了。
简化了卡诺图化简的内容。
尽管第5章依然是关于Verilog的综合性教程和参考资料,但Verilog的概念也散布在第6章和第7章的文本框中。它们会在需要相关知识点的地方及时出现,学生可以直接在那里找到“好东西”。
更强调基于FPGA的设计、FPGA结构特性、综合结果以及权衡。
原来关于组合逻辑元件的一章被分成了三章,以便有需要的读者可以直接从一开始就跳到状态机的内容。而且,还可以在最后讲解更多算术运算电路的内容。
用一整章内容讲解如何用Verilog实现状态机,包括许多例子。
关于同步设计方法论的章节目前包含一个详细的控制单元加数据通路的例子,以及一个关于采用异步FIFO的交叉时钟域的综合例子。
希望我在书里开的玩笑不会太糟糕。
数字设计软件工具
书中所有Verilog的例子都是采用Xilinx Vivado套件编译和测试的,这个套件包括以Xilinx 7系列FPGA为目标器件的Verilog、SystemVerilog以及VHDL。然而,这些例子一般并不特别要求采用Vivado编译,甚至不要求目标器件是Xilinx或任何其他FPGA。本书不包含关于Vivado的教程,而Xilinx有丰富的在线资源可供参考。因此,读者可以将本书与任何Verilog工具一起使用,包括下面提及的工具。
可以从Xilinx下载免费的Vivado“Webpack”版本。这个版本支持较小型的7系列FPGA,带有Zynq Soc的FPGA以及评估板。这是一个庞大的文件,超过10GB,但也是一个综合工具套件。支持前7系列FPGA以及较小型Zynq FPGA的Xilinx ISE(Integrated Software Environment)也包含在免费的“Webpack”版本中。注意,“legacy”模式支持ISE,而自从2013年后,ISE就再也没有更新过。要获取任何一种套件,可以登录www.xilinx.com,搜索“Webpack download”。
如果你正在使用Altera(现在是Intel的一部分了)器件,他们还提供了不错的“大学计划”和工具。你可以搜索“Altera university support”,然后导航到“For Student”网页。免费的工具包括Quartus Prime Lite版本,用于以入门级FPGA和CPLD为目标器件的Verilog、SystemVerilog和VHDL设计。还有一个配套的ModelSim模拟软件初始版本,这一版本也是符合工业标准的。
Altera和Xilinx都提供廉价的评估板,适用于直接或通过第三方等效实现基于FPGA的学生项目。这样的评估板可以包括开关、LED、模拟/数字转换器以及运动传感器,甚至包括USB和VGA接口。如果参与制造商的大学计划,你的总花费将少于100美元。
另一个长期支持大学计划的专业数字设计工具是Aldec(www.aldec.com)。他们提供一个流行的Active-HDL学生版本,用于设计入门和模拟。其中不仅包含常规的HDL,还包括方框图和状态机的图形编辑器。模拟器中还包括波形编辑器,用于创建交互激励信号。为利用这些特性,可以将Active-HDL模拟器作为Vivado的一个插件,取代Vivado模拟器。
上述工具以及大多数其他工程设计工具都是在Windows PC上运行的,所以,如果你是一个Mac迷,就必须习惯使用Window PC!你可以在Mac的Windows仿真环境(比如VMware)中运行,但是成功与否取决于具体的软件工具。要想使一款工具在你的PC上“快速运行”,最重要的条件就是配置固态硬盘驱动器而不是旋转硬盘驱动器。
即使你并未打算完成原创设计,也可以利用上述工具中的任何一个来测试和改进书中的例子,因为各章中的源代码都是在线提供的。
工程资源和www.ddpp.com
可以从Pearson的“Engineering Resource”网站上获得本书的丰富资源。在出版时,Pearson的链接是media.pearsoncmg.com/bc/abp/engineering-resources。但是,你知道输入一长串网址的麻烦。直接登录作者网站www.ddpp.com更为方便,其中包含到Pearson网站的链接。而且,作者网站中还包含最新的勘误表和其他增改资料,甚至某天还可能会写写博客。
Pearson网站上的资源包括书中所有Verilog模块的源代码下载、部分训练题和练习题答案以及补充材料,例如,针对非电子工程人员提供的20页电子学基础概念介绍。
教师资源
Pearson维护着一个专供教师使用的附加材料的集合。登录上述工程资源网站,导航到这本书,然后点击“Instructor Resources”链接。这个网站要求注册,可能需要花费几天时间等待以获得访问权限。所提供的资源包括附加的训练题和练习题答案、附加的源代码、更多的练习题,以及用于授课的简图和图表。本书之前版本的材料也会根据需求发布在网站上,以协助教师实现从旧版技术到新版课程的转换。
其他的教师资源还包括作者网站www.ddpp.com,以及Xilinx、Altera和Aldec的大学计划,登录www.ddpp.com可以找到这些资料的最新链接。制造商的网站提供各种产品资料和课程资料,还有芯片和电路板的折扣信息,其中包含很多数字设计实验课常用的器件。有些功能齐全的工具套件也会参与促销,折扣力度很大,开设相关高级课程的教师可以多多关注。
勘误
警告:本书可能包含错误。作者和出版社对于因错误引起的问题免责,包括偶然事故、精神损害以及其他方面的问题。
这样可以让律师感到轻松。现在,为了让你感到快乐,我向你保证我们为本书做了精心准备,尽可能地不出错。我渴望获知仍然存在的错误,以便在重印、再版以及改编版本中改正。我会通过PayPal向第一个发现本书印刷版中某个错误—技术错误、印刷错误或是其他错误—的人支付5美元。请通过www.ddpp.com上的相关链接将你的意见通过电子邮件发送给我。
www.ddpp.com上提供最新的勘误列表,希望这个列表不会很长。
致谢
由于许多人的帮助才使得本书顺利出版。大多数人都对前四版的出版给予了帮助,在那里我已经表示了感谢。关于本书的“原理”方面,我还是要特别感谢我的老师、研究生导师以及朋友Ed McCluskey。关于本书的“实践”方面,几位良师益友提供了很多好建议,包括我的朋友Jesse Jenkins,Xilinx的职员Parimal Patel和Trevor Bauer,以及McCluskey的同事—斯坦福大学的Subhasish Mitra教授。
自本书第4版出版以来,我从读者那里收到了许多有益的意见。除了提出改进建议外,读者还指出了大量印刷上的和技术上的错误,所有这些都在第5版中一并改正。
对这个版本最具实质性影响和贡献的是匿名(对我而言)的学术评审,他们都是使用本书第4版或其他同类书籍作为教材的教师。我尽量接受他们的建议,这通常意味着要删去一些像我这样的“老前辈”所过于固守的材料,而增加大量现代概念,例如与基于HDL的设计流程、测试平台、综合等相关的内容。
感谢Pearson的责任编辑Julie Bai在过去几年为这个项目所做的精心且细致的工作,实际上,她是采用本书之前版本作为教材教授过数字设计课程的第一个编辑。遗憾的是,她在项目差不多完成时离职了,我已经记不清这种状况是第四次还是第五次发生。这也使我更加确信,与我合作的编辑要么“不堪折磨逃离魔掌”,要么“历尽劫难浴火重生”,或者二者兼而有之。特别感谢她的老板的老板Marcia Horton,二三十年来她一直关注我的项目。还要感谢Scott Disanno和Michelle Bayman,他们负责这个版本的生产和发行过程。
还要感谢艺术家Peter Crowell,我在eBay上发现了他的画作,当时,编辑Julie Bai建议我们基于Piet Mondrian的作品设计封面,她说,Piet的某些作品“看起来几乎就像是逻辑电路的抽象”。Crowell的“Tuesday Matinee”完美地契合了我们的需求。他的画作“铺设”在封面和每章开篇的地方,与铺设在FPGA上的逻辑模块及其连接非常相像。封面设计师Marta Samsel采纳了我这个工程主义的观点,最终成品非常漂亮。
最后,妻子Joanne Jacobs非常支持这个项目,让我在楼上安静地工作,而她则在楼下处理教育博客。她甚至从未抱怨圣诞树在家里一直放到二月份还没有搬走。
John F. Wakerly
加利福尼亚州,洛思阿图斯