图书简介:
目 录
第1章 数字系统与二进制数 1
1.1 数字系统 1
1.2 二进制数 3
1.3 数制的转换 5
1.4 八进制数和十六进制数 7
1.5 补码 8
1.6 带符号二进制数 12
1.7 二进制码 15
1.8 二进制存储与寄存器 22
1.9 二进制逻辑 24
习题 27
参考文献 29
网络搜索主题 29
第2章 布尔代数和逻辑门 30
2.1 引言 30
2.2 基本定义 30
2.3 布尔代数的公理 31
2.4 布尔代数的基本定理和性质 34
2.5 布尔函数 36
2.6 规范式与标准式 40
2.7 其他逻辑运算 47
2.8 数字逻辑门 48
2.9 集成电路 53
习题 55
参考文献 59
网络搜索主题 59
第3章 门电路化简 60
3.1 引言 60
3.2 图形法化简 60
3.3 四变量卡诺图 64
3.4 和之积式的化简 68
3.5 无关条件 70
3.6 与非门和或非门实现 72
3.7 其他二级门电路实现 78
3.8 异或函数 82
3.9 硬件描述语言(HDL) 86
3.10 HDL中的真值表 99
习题 101
参考文献 105
网络搜索主题 106
第4章 组合逻辑 107
4.1 引言 107
4.2 组合电路 107
4.3 组合电路分析 108
4.4 设计步骤 111
4.5 二进制加减器 114
4.6 十进制加法器 121
4.7 二进制乘法器 123
4.8 数值比较器 125
4.9 译码器 126
4.10 编码器 130
4.11 数据选择器 132
4.12 组合电路的HDL模型 137
4.13 行为建模 156
4.14 编写一个简单的测试平台 162
4.15 逻辑仿真 167
习题 172
参考文献 178
网络搜索主题 179
第5章 同步时序逻辑 180
5.1 引言 180
5.2 时序电路 180
5.3 存储元件:锁存器 182
5.4 存储元件:触发器 185
5.5 钟控时序电路分析 191
5.6 时序电路的可综合HDL模型 200
5.7 状态化简与分配 219
5.8 设计过程 222
习题 228
参考文献 236
网络搜索主题 237
第6章 寄存器和计数器 238
6.1 寄存器 238
6.2 移位寄存器 240
6.3 行波计数器 247
6.4 同步计数器 250
6.5 其他计数器 255
6.6 寄存器和计数器的HDL描述 259
习题 268
参考文献 274
网络搜索主题 275
第7章 存储器和可编程逻辑器件 276
7.1 引言 276
7.2 随机存取存储器 277
7.3 存储器译码 282
7.4 检纠错 286
7.5 只读存储器 288
7.6 可编程逻辑阵列 293
7.7 可编程阵列逻辑 295
7.8 时序可编程器件 298
习题 311
参考文献 313
网络搜索主题 314
第8章 寄存器传输级设计 315
8.1 引言 315
8.2 寄存器传输级(RTL)定义 315
8.3 RTL描述 317
8.4 算法状态机(ASM) 329
8.5 设计举例(ASMD流程图) 335
8.6 设计举例的HDL描述 343
8.7 时序二进制乘法器 357
8.8 控制逻辑 361
8.9 二进制乘法器的HDL描述 366
8.10 用数据选择器进行设计 377
8.11 无竞争设计(软竞争条件) 391
8.12 无锁存设计(为什么浪费硅片面积?) 393
8.13 SystemVerilog语言简介 394
习题 399
参考文献 409
网络搜索主题 410
第9章 用标准IC和FPGA进行实验 411
9.1 实验介绍 411
9.2 实验1:二进制数和十进制数 414
9.3 实验2:数字逻辑门 416
9.4 实验3:布尔函数化简 418
9.5 实验4:组合电路 419
9.6 实验5:代码转换 421
9.7 实验6:使用数据选择器进行设计 422
9.8 实验7:加法器和减法器 423
9.9 实验8:触发器 424
9.10 实验9:时序电路 426
9.11 实验10:计数器 427
9.12 实验11:移位寄存器 429
9.13 实验12:串行加法 431
9.14 实验13:存储单元 432
9.15 实验14:灯式手球 434
9.16 实验15:时钟脉冲发生器 436
9.17 实验16:并行加法器和累加器 438
9.18 实验17:二进制乘法器 440
9.19 HDL仿真实验和使用FPGA的快速原型验证 443
第10章 标准图形符号 447
10.1 矩形符号 447
10.2 限定符号 449
10.3 相关符号 450
10.4 组合部件符号 451
10.5 触发器符号 453
10.6 寄存器符号 454
10.7 计数器符号 456
10.8 RAM符号 457
习题 458
参考文献 459
网络搜索主题 459
附录A 半导体和CMOS集成电路 460
部分习题解答 470
展开
前??言
今天,数字设备的处理速度、密度和复杂度,在很大程度上得益于物理处理工艺和数字设计方法的发展。除半导体工艺外,前沿设备的设计极大地依赖于硬件描述语言(HDL)和综合工具。有三种主流语言在数字设计流程中发挥了很大作用,它们是Verilog HDL(以下简称Verilog)、VHDL和SystemVerilog。掌握HDL和数字逻辑电路的基础知识,已成为计算机科学、计算机工程和电气工程等专业的学生进入数字设计世界的必备技能。
过去,电子工程专业毕业的学生必须要学会使用示波器;现在,则要求毕业生至少熟悉一门HDL。作为一名学生,掌握HDL将使他们在毕业后能更好地成为设计团队的一员。
鉴于设计领域中存在三种HDL,本书重点介绍Verilog和VHDL,而对SystemVerilog只做简要介绍。我们不要求学生同时掌握这三种语言,甚至是其中的两种。当教师讲授系统设计方法时,可以选择Verilog或VHDL中的一种,也可以选择SystemVerilog。当然,Verilog和VHDL现已被广泛应用,在电路设计领域占有主导地位。它们都以组合逻辑设计和时序逻辑设计这两个概念为基础,这对于高密度集成电路的综合是必不可少的。我们的教材同时提供了这两种语言的描述方式,学生选择其中的一种即可。在处理Verilog和VHDL时,没有强调某一种语言优于另一种语言,而是围绕它们在数字设计中的语言特征为主线加以介绍。每一章的最后都有大量习题,可以用Verilog或VHDL来实现求解过程。
本教材的重点是数字设计,HDL只是一个工具。因此,本书只提供支持数字设计入门所需的Verilog、VHDL和SystemVerilog的知识。另外,书中对每一种语言都给出了一些示例,并对示例的主题进行了标注,以便教师任选Verilog或VHDL中的一种进行教学。如果先强调Verilog,后介绍SystemVerilog,则并不影响我们的教学目标。SystemVerilog是可选教学部分,我们将其作为Verilog的扩展,在书中仅提供了一些示例,同样符合教学目标。我们不提倡同时教授多种语言,教师可以选择Verilog/SystemVerilog或VHDL作为数字设计介绍性课程的核心语言。但是,不管是哪种语言,我们的重点都是数字设计。
对基于HDL的示例,本书不仅尽量描述清楚,而且还重点说明了数字电路的建模和验证过程。书中对于Verilog和VHDL都没有进行完整介绍,这与所选择的语言无关,相关的示例讲解的是基于数字系统的计算机辅助建模概念的设计方法,该方法使用了主流的IEEE标准化硬件描述语言。
本书第六版的每章开头都列出学习目标,并在章末提供习题,此外还给出了大量的示例和练习。所有这些安排有助于学生完成学习目标,掌握数字设计的一些技巧。此外,书末给出了部分习题解答。教师可以在课堂上就某个问题的解决方法进行教学。
多模式学习
与以前的版本类似,本书第六版也支持多模式学习。所谓的VARK模式 , 确定了我们学习的4种主要方式:视(V)、听(A)、读(R)、动(K)。教材中相对高层次的讲解和插图涉及VARK的视(V),基础的讨论和大量的示例涉及读(R)。利用免费的Verilog、VHDL和SystemVerilog仿真器与综合工具,学生可以完成课后作业。通过动手获得学习体验,可以使学生感受到实际设计数字电路的乐趣。这时,VARK中剩余的是听(A)的体验,这取决于教师和学生的注意力。我们提供了大量的资料和示例来支持课堂教学。因此,使用本书作为教材的课程,在强调VARK模式的基础上,可以给学生带来丰富、均衡的学习体验。
在数字设计的第一节课上,需要对仍然质疑使用HDL的那些人说,我们强调的是工业上不使用基于原理图的设计方法。原理图可以描述电路的结构和布局,但是没有对功能结构进行说明,或者没有在附加文档中说明设计意图,任何人都很难在短时间内确定逻辑电路原理图所表示的功能。因此,当今工业上几乎完全依赖HDL来描述设计功能,HDL也是在基于标准单元的ASIC或FPGA中实现设计、仿真、测试和综合的。原理图的实用性在于描述的结果非常详细,设计单元的层次化结构都被细致地描绘出来。过去,设计师要依靠多年经验来设计原理图,从而实现相应功能。如今,设计师使用HDL可以直接、清楚地表达功能,使用综合工具自动生成原理图。工业上采用基于HDL的设计流程,而不是使用原理图,因为使用原理图会使我们在理解和设计大型、复杂的集成电路时效率低下。
我们在数字设计的第一节课中引入HDL的目的,并不是为了取代利用电路基本单元进行模块化的设计方法,也不是不需要人来参与设计。对学生来说,理解硬件的工作原理仍然很重要。因此,本书第六版保留了对组合和时序逻辑设计及布尔代数基础的完整描述。书中仍旧介绍了手工设计方法,并与通过HDL得到的结果进行了比较。尽管如此,我们要强调的是目前的硬件如何设计,以便学生对将来的职业生涯有所准备,毕竟在这个行业中,基于HDL的设计实践是占主导地位的。
灵活性
书中包含了手工设计和基于HDL的设计这两类示例。每章章末的习题是可以相互参考的,即使用手工设计方法得出的结果与使用HDL完成的指定任务可以相互对照。在书末的部分习题解答和(教师用)解答手册中,通过在程序中注释仿真结果,我们将手工设计方法和基于HDL的设计方法结合在一起。
第六版更新内容
本书第六版使用IEEE标准1364的最新特性,但仅限于对教学目标的支持。本书所做的修改和更新包括:
? 删除了前面课程中的逻辑电路和数字设计使用的特殊门电路内容(如RTL、DTL和ECL电路)。
? 在每章章末增加“网络搜索主题”部分,让学生了解网络上的相关内容。
? 修订了三分之一左右的习题。
? 对整本书的手工设计示例都给出了答案,包括所有的新问题。
? 精简了卡诺图的讨论内容。
? 综合了基本CMOS集成工艺和逻辑门。
? 附录部分介绍了半导体工艺。
? 使用VHDL和SystemVerilog进行数字设计。
设计方法论
本书系统描述了设计状态机来控制数字系统数据路径的方法,并给出了考虑实际情况的框架化结构。其中,从数据路径出来的信号被控制器使用,这就是所谓的系统反馈(响应)。因此,该方法为设计复杂且交互式的数字设计提供了基础,尽管它强调基于HDL的设计,但是这种方法既可以用于手工设计,也可以用于基于HDL的设计。
适量的HDL
书中只提供了Verilog、VHDL和SystemVerilog的基本语法元素,以满足基本的应用需求。另外,正确的语法并不能保证模型满足功能指标或者能被综合到物理硬件中。因此,我们向学生介绍基于工业实践的HDL模型编写规则,确保行为描述能够被综合到物理硬件中,并且综合后的电路功能和行为描述一致。如果不遵循规则,就会导致状态机的HDL模型中出现软竞争情形,用于验证模型的测试平台中也将出现竞争情形,并且仿真行为模型的结果和被综合的物理硬件之间出现不匹配。类似地,如果不遵守HDL工业规则,也许设计的仿真结果是正确的,但会引入硬件锁存器,原因就在于设计者使用的建模风格。书中介绍的基于工业的设计方法可以使设计中不会出现竞争和不需要的锁存器。所以,无论是否能获得综合工具,对学生来说,学习和遵循使用HDL模型的工业实践要求非常重要。
验证
工业上,一个重要步骤是验证电路是否能够正常工作,如此可以排除很多的失误。然而,现在对数字设计的验证环节没有足够的重视,而仅仅关注设计本身,验证通常被认为是次要的。我们凭借经验,往往会过早地主观认为“这个电路工作得很好”。类似地,通过确保投资的HDL模型是可靠的、可移植的和可重复使用的,工厂才能获得源源不断的投资收益。为了保证可重复使用和可移植性,需要对命名规则和参数使用进行规范。同时,我们提供了相关的解决方案和练习的测试平台,目的在于:
(1)验证电路功能。
(2)强调测试的重要性。
(3)向学生介绍重要概念,如测试平台中的自检。
提倡开发测试计划来指导开发测试平台,我们会在书中介绍测试方案,并且在书末的部分习题解答中进一步加以说明。
HDL内容
我们已经确认过书中所有的示例解决方案都符合数字硬件建模的工业实践。与上一版一样,HDL材料被放在一个单独的部分,这样可以按照教学需要进行删减。本书没有减少关于手工设计的论述,也没有指定授课的顺序。书中的描述适合同时需要学习数字电路和HDL的初学者。本书帮助学生自主设计项目,如此可以在后面的计算机体系结构和高级数字设计课程中有所收获。
教师可用资源
教师可以从出版商处获得相关的资源,包括:
? 所有测试用的Verilog示例的源代码。
? 插图和表格形式的PowerPoint文件。
? 解答手册。
HDL仿真器
学生可以从相关网站上下载两个仿真器。第一个仿真器是VeriLogger Pro,这是一个传统的仿真器,可以用于仿真本书中的HDL示例和验证HDL习题答案。此仿真器可以兼容IEEE-1995标准语法,因此对一些以前建立的模型非常有用。另一个仿真器VeriLogger Extreme是一种交互式的仿真器,兼容IEEE-1995和IEEE-2001标准语法,允许设计者在建立可用的完整仿真模型或原理图之前,对设计思路进行仿真和分析。这对学生十分有用,因为他们可以快速输入布尔方程和D触发器或锁存器方程,与用D触发器和锁存器的设计结果进行比较。学生还可以在网上下载支持FPGA设计、仿真和综合的设计工具。
每章内容摘要
下面是每章内容摘要。
第1章:介绍了几种数字系统中的信息表示方法,阐述了二进制数制系统和二进制代码,举例说明了二进制-十进制编码(BCD)的带符号二进制数和十进制数的加减法。
第2章:介绍了布尔代数的基本定理和布尔表达式与电路逻辑图之间的相关性,研究了两个变量所有可能的逻辑运算和数字电路系统设计中最有用的逻辑门,还介绍了基本CMOS逻辑门。
第3章:介绍了化简布尔表达式的卡诺图,可以用来化简与或门、与非门、或非门构成的数字电路。本章还介绍了其他所有二级门电路的简化方法和实现方法,并用Verilog和VHDL硬件描述语言描述了几个简单的门级模型。
第4章:介绍了分析和设计组合电路的基本步骤,还介绍了数字系统设计中需要用到的基本部件,如加法器和代码转换器等。对于经常使用的数字逻辑部件,如并行加法器和减法器、编码器和译码器、数据选择器及它们在数字电路中的应用,本章也给予了说明。Verilog示例采用了门级、数据流等形式,可以用Verilog和VHDL描述组合电路。本章还给出了一个简单的测试平台,可用于对硬件描述语言设计结果进行测试。
第5章:概述了分析和设计钟控(同步)时序电路的基本步骤,描述了几类触发器的门电路结构及电平触发和边沿触发的区别。时序电路的分析示例使用了状态表和状态图,时序电路的设计示例则使用了D触发器。本章还说明了Verilog和VHDL中时序电路的行为模型。相关的HDL示例用来说明Mealy型和Moore型时序电路模型。
第6章:介绍了多种时序电路部件,如寄存器、移位寄存器和计数器。这些数字部件是构成其他复杂数字电路的基本单元。本章还使用HDL对移位寄存器和计数器进行了描述。
第7章:介绍了随机存取存储器(RAM)和可编程逻辑器件,讨论了存储器的译码和纠错方法,介绍了ROM、PLA、CPLD和FPGA等组合和时序可编程逻辑器件。
第8章:介绍了数字系统的寄存器传输级表示方法,介绍了算法状态机(ASM)流程图,举例说明了数字系统设计中如何使用ASM流程图、ASMD流程图、RTL描述和HDL描述,详细介绍了使用有限状态机如何控制数据路径,以及如何利用状态机从数据路径中获取信号并控制它。本章是本书最重要的一章,将教会学生如何使用系统方法处理更高级的项目。
第9章:介绍了可以在实验室中用商业硬件平台进行的实验。实验中使用的集成电路功能可以参考前面章节中介绍的内容。对于本章介绍的每一个实验,我们都希望学生自己去设计电路,并总结在实验室验证其功能的步骤。实验也可以通过传统的方法完成,学生可以使用实验板和TTL电路,也可以使用基于FPGA的HDL/综合方法。现在,FPGA制造商可以免费提供用于综合的HDL模型和实现FPGA电路的软件,这使得学生在实验室使用原型开发板和其他资源之前,能够自己完成大量的设计工作。带有FPGA的速成型电路板价格低廉,其电路通常包括按钮、开关、七段数码管显示器、LCD、键盘和其他I/O设备。有了这些资源,学生可以按照规定进行练习或完成自己的项目,并立即得到结果。
第10章:介绍了使用ANSI/IEEE标准的逻辑函数图形符号,这些图形符号是为SSI和MSI的部件而开发的,因此用户可以从特殊的图形符号中识别出逻辑功能。本章还介绍了实验用的集成电路标准图形符号。
致谢
感谢本书第六版的审稿人,他们的专业意见与建议完善了本书的内容。他们是
Vijay Madisetti,Georgia Tech
Dmitri Donetski,SUNY Stony Brook
David Potter,Northeastern
Xiaolong Wu,California State-Long Beach
Avinash Kodi,Ohio University
Lee Belfore,Old Dominion University
感谢Pearson Education的编辑小组负责这本书的出版工作。同时,要感谢我们的家人Sandra和Jerilynn对我们工作的支持。
M. Morris Mano
加利福尼亚州立大学计算机工程名誉教授
Michael D. Ciletti
科罗拉多州立大学电子与计算机工程名誉教授
展开