
本书以介绍数字设计的基础知识以及丰富案例为主要特色,并在第一版的基础上进行了全面的修订与更新,更加突出了数字设计相关技术的应用。本书内容包括:计算机与数字系统,数制系统,逻辑电路与布尔代数,组合逻辑电路分析与设计,时序逻辑电路简介,同步时序逻辑电路分析与设计,异步时序逻辑电路分析与设计,可编程逻辑器件,数字系统设计。本书对基本概念和理论的讲解具有一定的广度与深度,同时添加了非常实用的设计方法。
前 言 本书的写作目标 本书的第一版(1995年出版)由Nelson、Carroll、Nagle和Irwin共同编著,而且被美国多所大学的相关专业长期使用。本书介绍了组合逻辑电路和时序逻辑电路的分析与综合的基础知识,第二版对这些内容进行了大量的修订,并且拓宽和强化了数字设计部分,从而更好地适应当今学生学习的需求。 本书的第一版以介绍数字设计的广泛基础知识以及丰富实例为典型特色。在此基础上,第二版显著提升了数字设计的相关知识并更加有效地帮助学生学习。本书的作者均在课堂上使用此教材多年,非常清楚那些对于学生而言非常困惑或者难以掌握的概念和内容。本书强化的内容包括大量生动的实例,有助于提高学生对重要概念的理解。书中的实例包括数制转换、布尔代数表达式的变换、组合逻辑电路和时序逻辑电路的化简、数字电路分析与设计的步骤及其逐步应用。 本书的另一个特点是同时引入了两种硬件描述语言(HDL)进行数字电路的建模,即Verilog和VHDL语言。对于每一个实例,读者均可以选择使用Verilog或者VHDL语言编写的程序。这些程序模块能够用于仿真教材中描述的功能,或者自行综合多个电路模块。 本书的读者对象 我们推荐本书作为数字逻辑设计的入门教材,适用于电气工程与计算机工程专业的相关课程,或者可供计算机科学专业的大一、大二学生使用,便于学生使用和/或设计专用集成电路(ASIC)、计算机、嵌入式系统以及其他数字系统。目前,市面上有太多类似的书籍,这使得教师难以在具有权威性的、应用最先进技术的书籍以及最有利于学生学习和掌握基本概念的教材中做出选择。本书同时具备了较强的理论性和实践性,但是不会因过高的技术性或者数学语言描述而导致学生学习困难,书中展示了大量的最新知识,例如使用Verilog和VHDL进行编程建模,采用可编程逻辑器件进行设计,以及实现计算机辅助设计。此外,大量的注释、实例和习题能够帮助学生学会如何将理论付诸于工程实践。 学习本书无须电子电路或者计算机系统的基础知识,因此本书适用于数字系统的第一门专业课。但是,书中涵盖了丰富的、先进的技术资料以及具备足够的理论深度,同样也满足高年级学生的需求。本书可供教师根据专业课的需求来弹性选择有用的主题内容,也适合自学数字设计知识的读者,或者作为应用工程师的参考书。 本书的主要特色 本书是三所大学的四位教师合作编著的成果,并且得到了著名出版社指定专家的审稿。在本书正式出版前,已经在两所高校进行了试用,并且收集到一些学生和教师的反馈信息。此外,本书第一版的特色就是内容清晰和严谨,已经得到审阅专家和读者的赞誉,第二版将继续保持和加强这些特色,具体如下: 基本概念和理论的讲解具有一定的广度与深度,同时添加了非常实用的设计方法。 基础知识的讲述与解释形象、生动、实用性强。 在介绍理论之后即举例加以说明。 通过丰富的实例,展示复杂电路的层次化模块设计过程。 超过250个工作实例,着重提高学生使用系统方法来解决问题以及掌握数字电路的设计方法的能力。 超过600幅插图,使知识的展示更加直观、生动。 在每章末尾提供大量习题,难易程度不同,便于读者选择。 补充了层次化模块设计和标准的数字电路模块的相关内容。 通过单独一章来介绍数字电路的综合性设计过程。 补充了异步时序逻辑电路、HDL程序设计和可编程逻辑器件(PLD)的相关内容。 在为教师提供的习题解答手册中给出了大部分习题的详细解答。 本书第二版在第一版的基础上,补充了最新的数字电子技术和工程设计应用,具备如下新的特点: 在附录中增加了Verilog和VHDL这两种硬件描述语言的入门知识。 在可编程逻辑器件部分强化了FPGA器件的内容。 在第0章至第8章的章末增加了多个合作项目。 第1章至第8章给出了新的实例,更新了习题。 在每章开始列出了学习目标。 在第0章至第8章的章末给出了小结和难点复习。 第3章至第7章的总结性设计实例包含了多种硬件电路的实际约束问题。 整本书均通过扩展性实例来阐述基本概念和高级知识。 补充了固定逻辑器件和可编程逻辑器件的设计流程。 保持概念与器件的技术独立性。 内容精挑细选,紧扣主题,避免冗余。 第二版的新增内容 硬件描述语言 现代数字电路设计工程的复杂性要求采用计算机辅助设计方法和工具,包括采用硬件描述语言(HDL,如Verilog和VHDL)来辅助数字电路的建模、仿真与综合。因此,本书在第2章就介绍了Verilog和VHDL语言,并且把使用二者建模数字电路的设计实例贯穿整本书,其中也包括第7章和第8章的综合性设计实例。 对HDL建模方法的介绍强调其通用性,而不是将其认定为某些软件供应商的专业工具。这样,有助于学生应用该方法进行各种电路的建模、仿真以及开发可编程逻辑器件。另外,学生和教师还可以下载其他的仿真工具(通常可免费试用或费用很低)。 可编程逻辑器件 随着可编程逻辑器件(PLD)的不断升级,复杂数字系统的不断完善,本书第7章专门介绍这种先进技术,以纯技术探讨的形式介绍那些易获得的器件、开发工具以及器件开发商的系列产品。同时,本书阐述了FPGA器件的构成,以及使用其实现组合逻辑电路和时序逻辑电路的方法。通过设计实例简述了使用Verilog和VHDL模块,然后由FPGA器件实现的复杂数字电路功能。然后,又以类似的方式介绍了PLD技术、体系结构和器件结构以及设计实例。第7章列举了几个使用HDL模块,之后由FPGA和PLD实现数字系统功能的综合性设计实例。 本书的内容概要 本书首先介绍基本概念与原理,以便学生打下坚实的理论基础。然后,将原理应用于分析和设计简单的电路,进而优化电路的设计。最后,讨论相关实例的设计流程和方法,包括模块化设计方法以及采用HDL和PLD建模的流程。每章都通过大量的实例来阐述和增强学生对概念的理解。 背景介绍 由于对读者没有前期学习基础的特定要求,本书前两章介绍了一些背景资料,有助于理解数字电路的设计。 第0章介绍了数字电路和计算机,其中包括电子技术和摩尔定律、表达和实现数字系统的方法、数字系统的设计方法,以及计算机和其他数字系统的通用电路结构。 第1章介绍了数制系统,以及二进制数如何表示计算机和其他电路中的数字与信息。同时,该章介绍了二进制数的布尔代数规则,由此可实现计算机电路的多种运算功能。 组合逻辑电路 组合逻辑电路的分析和设计是本书第二部分的内容。第2章介绍基本的逻辑门电路、布尔代数基础知识、逻辑表达式的优化。第3章讲述逻辑电路的设计与模块化设计。 第2章首先介绍基本的逻辑门与功能,组合逻辑电路和时序逻辑电路的构成,以及数字HDL。然后,讲解布尔代数规则,由此展开讨论逻辑电路的设计方法。接着,介绍表示逻辑函数的方法,如真值表、逻辑表达式、电路图和HDL模块。该章还总结了采用卡诺图和Quine-McClusky方法化简逻辑表达式的规则与算法。 第3章讲述了如何使用基本概念来分析和设计由基本门电路构成的数字电路,并且描述了如何采用层次法和模块法,将标准逻辑电路(如编码器、数据选择器和运算电路等)构成数字电路。同时,上述实例多采用Verilog和VHDL模块来仿真。 时序逻辑电路 这部分讲述包含存储器的时序逻辑电路。第4章介绍了构成时序逻辑电路的存储单元,以及大量由存储单元构成的标准电路模块的设计与工作原理。第5章讲述了同步时序逻辑电路分析与设计的基础知识,包括优化电路的方法。其中,大多数实例均采用Verilog和VHDL模块来仿真。 第4章首先介绍时序逻辑电路,包括存储单元在这些电路中的作用。同时,分析了两种基本存储单元——锁存器和触发器的设计与工作原理。接着,介绍了一些标准数字逻辑电路如寄存器、移位寄存器和计数器的设计与工作原理。该章对每一种存储单元的设计与工作原理均有阐述,并且总结了一些典型电路的特点和使用方法。 第5章阐述了同步时序逻辑电路分析与设计的基础和技巧,如时序图、状态表、触发器驱动表等。该章介绍了使用电路优化方法来减少冗余状态,从而减少电路设计需要的存储单元的数量;最后,对几个同步时序逻辑系统的设计实例进行总结。 第6章分析了脉冲模式和基本模式的异步时序逻辑电路,介绍了每一种电路的分析和综合方法,例如对基本模式电路的竞争冒险的识别以及预防措施。 可编程逻辑器件 第7章介绍了可编程逻辑器件(PLD)技术,用于实现复杂的数字系统。该章简述了FPGA器件的组成,包括通过Verilog和VHDL模块来实现复杂数字电路的设计实例,阐述其用于设计组合逻辑电路和时序逻辑电路的方法。同样,该章也介绍了PLD的技术、体系结构和器件结构以及设计实例,通过几个实例展示了使用HDL模块并由FPGA和PLD实现数字系统功能的流程。 数字设计案例学习 第8章介绍了由Auburn大学和Texas大学Arlington分校的学生完成的4个综合性数字系统设计实例:小型RISC 4(TRISC 4)微处理器;用于指挥在一条单行道路上实施双向行驶的交通灯控制器;用于串行通信的通用异步接收机/发射机(UART);两层或三层电梯控制器。 附录——HDL的学习指导 为了支持本书的HDL建模实例与练习,附录A介绍了使用Verilog语言进行数字系统建模的学习指导,附录B介绍了使用VHDL语言进行数字系统建模的学习指导。 建议的课程教学目录 本书可用于开设一季度(3个月)或者一学期的课程,也可用于开设两季度(6个月)的课程。建议一门开设15周的课程按照本书的目录进行讲解,并且精简第2章和第5章的部分内容,补充第7章的PLD知识,有助于学生深入理解采用Verilog或VHDL语言进行数字系统建模和仿真的方法。 建议开设10周(3个月)的课程按照下面的目录开展教学: 第0章:绪论。 第1章:二进制数和逻辑代数。 第2章:逻辑门电路、布尔代数、开关函数和一种化简方法(通常使用卡诺图方法)。 第3章:组合逻辑电路的分析与设计,采用标准电路模块的层次法进行设计。 第4章:触发器和锁存器、简单顺序移位寄存器和计数器电路模块的设计与工作原理。 第5章:同步时序逻辑电路的分析与综合。 如果开设了以上课程之后第二阶段的10周课程,则应该开展更高级的系统设计,即采用Verilog或VHDL语言进行数字系统建模和仿真;然后,分别采用FPGA或者CPLD以及异步时序逻辑电路等来实现数字系统。 教师资源① 本书为教师提供了相关的教师资源,包含大部分章节习题的解答、PPT形式的教学资料以及本书中出现的所有Verilog和VHDL实例的程序源文件,这些程序可以仿真和/或综合可编程逻辑器件,以此帮助教师开展数字系统相关课程的备课和授课活动。 致谢 非常感谢本书的两位合著者H. Troy Nagle教授和J. David Irwin教授,他们为本书第一版撰写的内容同时纳入了第二版。 作者同时感谢Auburn大学和Texas大学Arlington分校的学生,他们试用了本书出版前的手稿。还要感谢使用试用教材开展教学的同事和研究生助教,他们是David Levine教授、Gergely Zaruba博士、Shawn Gieser博士、Sona Hasani、 Xavia Kirk、Peter Sassaman、Kevin Marnell、Rushi Dixit、Walter Oduk、Daniel Geiger博士、Adit Singh教授、Vishwani Agrawal教授、Spencer Millican教授、Jason Clark教授和Soo-Young Lee教授等。 同时,感谢本书的编辑Andrew Gilfillan、Julie Bai、Norrin Dias、Holly Stark和Carole Snyder,他们对本书的前期准备、撰写和设计提出了很多有益的建议并做了大量的工作。 另外,本书的多位审阅专家提出了非常有价值的意见和建议。 最后,作者向各自的家庭成员Margaret、Stephanie和Whitney表达感激之情,感谢她们的支持和理解。 Victor P. Nelson Bill D. Carroll
0 Computers and Digital Systems 1 Learning Objectives 1 0.1 A Brief History of Computing 1 0.1.1 Beginnings: Mechanical Computers 2 0.1.2 Early Electronic Computers 2 0.1.3 The First Four Generations of Computers 2 0.1.4 The Fifth Generation and Beyond 4 0.2 Digital Systems 4 0.2.1 Digital versus Analog Systems 5 0.2.2 Digital System Levels of Abstraction 5 0.3 Electronic Technologies 8 0.3.1 Moore’s “Law” 9 0.3.2 Fixed versus Programmable Logic 10 0.3.3 Microcontrollers 10 0.3.4 Design Evolution 10 0.4 Applications of Digital Systems 12 0.4.1 General-Purpose Digital Computers 12 0.4.2 Controllers 17 0.4.3 Internet of Things (IoT) 18 0.4.4 Interfacing 18 0.5 Summary and Review Questions 20 0.6 Collaboration Activities 20 References 21 1 Number Systems and Digital Codes 22 Learning Objectives 22 1.1 Number Systems 22 1.1.1 Positional and Polynomial Notations 23 1.1.2 Commonly Used Number Systems 23 1.2 Arithmetic 24 1.2.1 Binary Arithmetic 24 1.2.2 Hexadecimal Arithmetic 27 1.3 Base Conversions 29 1.3.1 Conversion Methods and Algorithms 29 1.3.2 Conversion between Base A and Base B When B = Ak 32 1.4 Signed Number Representation 33 1.4.1 Sign Magnitude Numbers 33 1.4.2 Complementary Number Systems 35 1.5 Digital Codes 45 1.5.1 Numeric Codes 46 1.5.2 Character and Other Codes 50 1.5.3 Error Detection and Correction Codes 53 1.6 Summary and Review Questions 58 1.7 Collaboration Activities 58 Problems 59 2 Logic Circuits and Boolean Algebra 61 Learning Objectives 61 2.1 Logic Gates and Logic Circuits 61 2.1.1 Truth Tables 61 2.1.2 Basic Logic Gates 62 2.1.3 Combinational Logic Circuits 65 2.1.4 Sequential Logic Circuits 68 2.2 Hardware Description Languages (HDLs) 69 2.2.1 Verilog 69 2.2.2 VHDL 70 2.3 Boolean Algebra 72 2.3.1 Postulates and Fundamental Theorems 72 2.3.2 Boolean (Logic) Functions and Equations 77 2.3.3 Minterms, Maxterms, and Canonical Forms 78 2.3.4 Incompletely Specified Functions (Don’t Cares) 81 2.4 Minimization of Logic Expressions 82 2.4.1 Minimization Goals and Methods 82 2.4.2 Karnaugh Maps (K-Maps) 84 2.4.3 Minimization of Logic Expressions Using K-Maps 91 2.4.4 Quine–McCluskey Method 106 2.5 Summary and Review Questions 111 2.6 Collaboration Activities 112 Problems 113 3 Combinational Logic Circuit Design and Analysis 123 Learning Objectives 123 3.1 Design of Combinational Logic Circuits 123 3.1.1 AND–OR and NAND–NAND Circuits 124 3.1.2 OR–AND and NOR–NOR Circuits 125 3.1.3 Two-Level Circuits 126 3.1.4 Multilevel Circuits and Factoring 128 3.1.5 EXCLUSIVE-OR (XOR) Circuits 131 3.2 Analysis of Combinational Circuits 134 3.2.1 Boolean Algebra 134 3.2.2 Truth Tables 136 3.2.3 Timing Diagrams 137 3.2.4 Positive and Negative Logic 142 3.3 Design Using Higher-Level Devices 143 3.3.1 Decoders 143 3.3.2 Encoders 155 3.3.3 Multiplexers and Demultiplexers 159 3.3.4 Arithmetic Circuits 169 3.4 Summative Design Examples 182 3.4.1 Design Flow 182 3.4.2 Bank Security-Lock Controller 182 3.4.3 Seven-Segment Display Decoder 186 3.4.4 Four-Function Arithmetic Logic Unit (add, subtract, AND, XOR) 192 3.4.5 Binary Array Multiplier 196 3.5 Summary and Review Questions 200 3.6 Collaboration Activities 201 Problems 202 4 Introduction to Sequential Circuits 213 Learning Objectives 213 4.1 Models and Classes of Sequential Circuits 214 4.1.1 Finite-State Machines 214 4.1.2 State Diagrams and State Tables 216 4.1.3 Algorithmic State Machines 219 4.2 Memory Devices 221 4.2.1 Latches 222 4.2.2 Flip-Flops 234 4.2.3 Latch and Flip-Flop Summary 244 4.3 Registers 244 4.4 Shift Registers 248 4.5 Counters 253 4.5.1 Synchronous Binary Counters 254 4.5.2 Asynchronous Binary Counters 257 4.5.3 Modulo-N Counters 258 4.5.4 Ring and Twisted-Ring Counters 263 4.6 Summative Design Examples 272 4.6.1 Register File 272 4.6.2 Multiphase Clock 273 4.6.3 Digital Timer 275 4.6.4 Programmable Baud Rate Generator 278 4.7 Summary and Review Questions 281 References 281 4.8 Collaboration Activities 282 Problems 283 5 Synchronous Sequential Logic Circuit Analysis and Design 291 Learning Objectives 291 5.1 Analysis of Sequential Circuits 291 5.1.1 Circuit Analysis Using State Diagrams and State Tables 291 5.1.2 Analysis of Sequential Circuit Logic Diagrams 293 5.1.3 Summary 305 5.2 Design of Synchronous Sequential Circuits 305 5.2.1 Design Procedure 306 5.2.2 Flip-Flop Input Tables 309 5.2.3 Design Examples 311 5.2.4 One-Hot Finite-State Machine Design Method 331 5.2.5 Incompletely Specified Sequential Circuits 336 5.3 State Reduction in Sequential Circuits 338 5.3.1 Redundant States 338 5.3.2 State Reduction in Completely Specified Circuits 340 5.4 Summative Design Examples 344 5.4.1 Drink Vending Machine Control Unit 344 5.4.2 Binary Multiplier 347 5.4.3 Traffic Light Controller 350 5.5 Summary and Review Questions 361 References 362 5.6 Collaboration Activities 362 Problems 366 6 Asynchronous Sequential Circuit Analysis and Design 377 Learning Objectives 377 6.1 Types of Asynchronous Circuits 377 6.2 Analysis and Design of Pulse-Mode Circuits 378 6.2.1 Analysis of Pulse-Mode Circuits 379 6.2.2 Design of Pulse-Mode Circuits 384 6.3 Analysis of Fundamental-Mode Circuits 390 6.3.1 Introduction 392 6.3.2 Excitation and Flow Tables 393 6.3.3 Analysis Procedure 394 6.4 Design of Fundamental-Mode Circuits 396 6.4.1 Flow Table Design and Realization 396 6.4.2 Races and Cycles 405 6.4.3 Eliminating Race Conditions 409 6.4.4 Hazards 418 6.5 Summative Design Examples 419 6.5.1 Design Flow 419 6.5.2 Asynchronous Vending Machine Controller 420 6.5.3 Asynchronous Bus Arbiters 422 6.6 Summary and Review Questions 429 6.7 Collaboration Activities 429 Problems 430 7 Programmable Digital Logic Devices 440 Learning Objectives 440 7.1 Programmable Digital Logic Device Technology 440 7.2 Field-Programmable Gate Arrays (FPGAs) 442 7.2.1 Configurable Logic Blocks 443 7.2.2 Input/Output Blocks 452 7.2.3 Interconnect Resources 454 7.2.4 Clock Resources 456 7.2.5 Other FPGA Resources and Options 457 7.2.6 FPGA Design Process and Examples 457 7.3 Programmable Logic Devices (PLDs) 466 7.3.1 Array Structures for Combinational Logic Functions 467 7.3.2 PLD Output and Feedback Options 484 7.3.3 PLDs for Sequential Circuit Applications 489 7.3.4 Complex PLDs (CPLDs) 492 7.3.5 Design Examples 493 7.4 Summative Design Examples 496 7.4.1 Binary Division Circuit 496 7.4.2 Multiplexed Seven-Segment Display Controller 502 7.5 Summary and Review Questions 510 References 510 7.6 Collaboration Activities 511 Problems 513 8 Design of Digital Systems 519 Learning Objectives 519 8.1 Design Processes 519 8.1.1 Hierarchical Design 519 8.1.2 Fixed Logic versus Programmable Logic 521 8.1.3 Digital System Design Flow 521 8.2 Design Examples 521 8.2.1 Tiny RISC 4 (TRISC4) Processor 522 8.2.2 One-Lane Traffic Controller 533 8.2.3 Universal Asynchronous Receiver/Transmitter (UART) 540 8.2.4 Elevator Controller 547 8.3 Summary and Review Questions 552 8.4 Collaboration Activities 552 Problems 552 Appendix A Verilog Primer 554 A.1 Introduction 554 A.2 General Concepts and Modules 554 A.2.1 Module Structure 555 A.2.2 Port Declarations 556 A.2.3 Data Types 556 A.2.4 Numbers 557 A.3 Gate-Level Structural Modeling 557 A.3.1 Gate Types 557 A.3.2 Gate Delays 557 A.4 Dataflow Modeling 558 A.4.1 Expressions, Operands, and Operators 558 A.4.2 Continuous Assignment Statements 558 A.4.3 Continuous Assignment Statement Delay 558 A.5 Behavioral Modeling 560 A.5.1 Procedural Blocks 560 A.5.2 Procedural Assignments 561 A.5.3 Timing Control 562 A.5.4 case Statements 563 A.5.5 if ... else Statements 563 A.5.6 Loop Statements 565 A.5.7 Block Execution 566 A.6 Hierarchical Modeling 567 A.6.1 Functions and Tasks 567 A.6.2 Structural Models 568 A.7 System Tasks and Compiler Directives 569 A.8 Test Benches 570 A.9 Summary of Features 571 References 572 Appendix B VHDL Primer 573 B.1 Introduction 573 B.2 Design Unit Structure 574 B.2.1 Signals and Data Types 574 B.2.2 Operators and Expressions 579 B.2.3 Design Entities 580 B.2.4 Design Architectures 583 B.3 Behavioral and Dataflow Models 583 B.3.1 Concurrent Signal Assignments 583 B.3.2 Signal Delays 584 B.3.3 Conditional Signal Assignments 585 B.3.4 Selected Signal Assignments 586 B.4 Structural and Hierarchical Models 587 B.4.1 Component Declaration 587 B.4.2 Component Instantiation 588 B.5 Mixed Modeling Styles 590 B.6 Modeling Sequential Behavioral 591 B.6.1 Process Construct 591 B.6.2 Sequential Statements 592 B.6.3 Sequential Circuit Models 594 B.6.4 Synchronous and Asynchronous Control Signals 596 B.6.5 Finite-State Machine Models 597 B.6.6 Register Transfer Level (RTL) Design 598 B.7 Subprograms, Packages, and Libraries 600 B.7.1 Functions and Procedures 600 B.7.2 Packages and Libraries 602 B.8 Test Benches 604 B.9 Summary of Features and Keywords 607 References 609