Preface |
|
xv | |
1 Introduction |
|
1 | (34) |
|
|
1 | (2) |
|
1.2 Analog versus Digital |
|
|
3 | (4) |
|
|
7 | (1) |
|
1.4 Digital Logic Signals |
|
|
7 | (2) |
|
1.5 Logic Circuits and Gates |
|
|
9 | (4) |
|
1.6 Software Aspects of Digital Design |
|
|
13 | (3) |
|
|
16 | (3) |
|
1.8 Logic Families and CMOS |
|
|
19 | (1) |
|
|
20 | (5) |
|
1.10 Programmable Devices |
|
|
25 | (2) |
|
1.11 Application-Specific ICs |
|
|
27 | (1) |
|
1.12 Printed-Circuit Boards |
|
|
28 | (1) |
|
1.13 Digital-Design Levels |
|
|
29 | (4) |
|
1.14 The Name of the Game |
|
|
33 | (1) |
|
|
34 | (1) |
|
|
34 | (1) |
2 Number Systems And Codes |
|
35 | (54) |
|
2.1 Positional Number Systems |
|
|
36 | (1) |
|
2.2 Binary, Octal, and Hexadecimal Numbers |
|
|
37 | (2) |
|
2.3 Binary-Decimal Conversions |
|
|
39 | (3) |
|
2.4 Addition and Subtraction of Binary Numbers |
|
|
42 | (2) |
|
2.5 Representation of Negative Numbers |
|
|
44 | (4) |
|
2.5.1 Signed-Magnitude Representation |
|
|
|
2.5.2 Complement Number Systems |
|
|
|
2.5.3 Two's-Complement Representation |
|
|
|
2.5.4 Ones'-Complement Representation |
|
|
|
2.5.5 Excess Representations |
|
|
|
2.6 Two's-Complement Addition and Subtraction |
|
|
48 | (4) |
|
|
|
|
|
|
|
|
|
2.6.5 Two's-Complement and Unsigned Binary Numbers |
|
|
|
2.7 Ones'-Complement Addition and Subtraction |
|
|
52 | (2) |
|
2.8 Binary Multiplication |
|
|
54 | (2) |
|
|
56 | (1) |
|
2.10 Binary Codes for Decimal Numbers |
|
|
57 | (3) |
|
|
60 | (2) |
|
|
62 | (2) |
|
2.13 Codes for Actions, Conditions, and States |
|
|
64 | (2) |
|
2.14 n-Cubes and Distance |
|
|
66 | (1) |
|
2.15 Codes for Detecting and Correcting Errors |
|
|
67 | (11) |
|
2.15.1 Error-Detecting Codes |
|
|
|
2.15.2 Error-Correcting and Multiple-Error-Detecting Codes |
|
|
|
|
|
|
|
2.15.5 Two-Dimensional Codes |
|
|
|
|
|
|
|
2.16 Codes for Transmitting and Storing Serial Data |
|
|
78 | (4) |
|
2.16.1 Parallel and Serial Data |
|
|
|
|
|
|
82 | (1) |
|
|
83 | (2) |
|
|
85 | (4) |
3 Switching Algebra And Combinational Logic |
|
89 | (44) |
|
|
91 | (13) |
|
|
|
3.1.2 Single-Variable Theorems |
|
|
|
3.1.3 Two- and Three-Variable Theorems |
|
|
|
3.1.4 n-Variable Theorems |
|
|
|
|
|
3.1.6 Standard Representations of Logic Functions |
|
|
|
3.2 Combinational-Circuit Analysis |
|
|
104 | (6) |
|
3.3 Combinational-Circuit Synthesis |
|
|
110 | (12) |
|
3.3.1 Circuit Descriptions and Designs |
|
|
|
3.3.2 Circuit Manipulations |
|
|
|
3.3.3 Combinational-Circuit Minimization |
|
|
|
|
|
|
122 | (4) |
|
|
|
3.4.2 Finding Static Hazards Using Maps |
|
|
|
|
|
3.4.4 Designing Hazard-Free Circuits |
|
|
|
|
126 | (2) |
|
|
128 | (1) |
|
|
129 | (4) |
4 Digital Design Practices |
|
133 | (44) |
|
4.1 Documentation Standards |
|
|
133 | (21) |
|
|
|
|
|
4.1.3 Signal Names and Active Levels |
|
|
|
4.1.4 Active Levels for Pins |
|
|
|
4.1.5 Constant Logic Signals |
|
|
|
4.1.6 Bubble-to-Bubble Logic Design |
|
|
|
4.1.7 Signal Naming in HDL Models |
|
|
|
|
|
|
|
4.1.10 Additional Schematic Information |
|
|
|
|
154 | (11) |
|
|
|
|
|
4.2.3 Timing Specifications |
|
|
|
4.2.4 Sample Timing Specifications |
|
|
|
4.2.5 Timing Analysis Tools |
|
|
|
4.3 HDL-Based Digital Design |
|
|
165 | (7) |
|
|
|
|
|
4.3.3 EDA Tool Suites for HDLs |
|
|
|
4.3.4 HDL-Based Design Flow |
|
|
|
|
172 | (2) |
|
|
174 | (2) |
|
|
176 | (1) |
5 Verilog Hardware Description Language |
|
177 | (60) |
|
5.1 Verilog Models and Modules |
|
|
179 | (5) |
|
5.2 Logic System, Nets, Variables, and Constants |
|
|
184 | (5) |
|
5.3 Vectors and Operators |
|
|
189 | (4) |
|
|
193 | (1) |
|
5.5 Logical Operators and Expressions |
|
|
194 | (3) |
|
|
197 | (1) |
|
|
198 | (5) |
|
|
203 | (2) |
|
5.9 Behavioral Models (Procedural Code) |
|
|
205 | (15) |
|
5.9.1 Always Statements and Blocks |
|
|
|
5.9.2 Procedural Statements |
|
|
|
|
|
5.9.4 Assignment Statements |
|
|
|
|
|
5.9.6 if and if-else Statements |
|
|
|
|
|
|
|
|
220 | (4) |
|
|
224 | (1) |
|
|
225 | (1) |
|
|
226 | (6) |
|
5.14 Verilog Features for Sequential Logic Design |
|
|
232 | (1) |
|
|
232 | (1) |
|
|
233 | (1) |
|
|
234 | (1) |
|
|
235 | (2) |
6 Basic Combinational Logic Elements |
|
237 | (64) |
|
6.1 Read-Only Memories (ROMs) |
|
|
240 | (6) |
|
6.1.1 ROMs and Truth Tables |
|
|
|
6.1.2 Using ROMs for Arbitrary Combinational Logic Functions |
|
|
|
6.1.3 FPGA Lookup Tables (LUTs) |
|
|
|
|
246 | (4) |
|
6.2.1 Programmable Logic Arrays |
|
|
|
6.2.2 Programmable Array Logic Devices |
|
|
|
6.3 Decoding and Selecting |
|
|
250 | (31) |
|
6.3.1 A More Mathy Decoder Definition |
|
|
|
|
|
|
|
6.3.4 Decoders in Verilog |
|
|
|
|
|
6.3.6 Seven-Segment Decoders |
|
|
|
|
|
|
281 | (13) |
|
6.4.1 Gate-Level Multiplexer Circuits |
|
|
|
6.4.2 Expanding Multiplexers |
|
|
|
6.4.3 Multiplexers, Demultiplexers, and Buses |
|
|
|
6.4.4 Multiplexers in Verilog |
|
|
|
|
294 | (1) |
|
|
295 | (1) |
|
|
296 | (5) |
7 More Combinational Building Blocks |
|
301 | (70) |
|
|
302 | (10) |
|
7.1.1 Three-State Buffers |
|
|
|
7.1.2 Standard MSI Three-State Buffers |
|
|
|
7.1.3 Three-State Outputs in Verilog |
|
|
|
7.1.4 Three-State Outputs in FPGAs |
|
|
|
|
312 | (8) |
|
7.2.1 Cascading Priority Encoders |
|
|
|
7.2.2 Priority Encoders in Verilog |
|
|
|
7.3 Exclusive-OR Gates and Parity Functions |
|
|
320 | (11) |
|
7.3.1 Exclusive-OR and Exclusive-NOR Gates |
|
|
|
|
|
7.3.3 Parity-Checking Applications |
|
|
|
7.3.4 Exclusive-OR Gates and Parity Circuits in Verilog |
|
|
|
|
331 | (25) |
|
7.4.1 Comparator Structure |
|
|
|
|
|
7.4.3 An Iterative Comparator Circuit |
|
|
|
7.4.4 Magnitude Comparators |
|
|
|
7.4.5 Comparators in HDLs |
|
|
|
7.4.6 Comparators in Verilog |
|
|
|
7.4.7 Comparator Test Benches |
|
|
|
7.4.8 Comparing Comparator Performance |
|
|
|
7.5 A Random-Logic Example in Verilog |
|
|
356 | (7) |
|
|
363 | (1) |
|
|
364 | (7) |
8 Combinational Arithmetic Elements |
|
371 | (68) |
|
8.1 Adding and Subtracting |
|
|
372 | (31) |
|
8.1.1 Half Adders and Full Adders |
|
|
|
|
|
|
|
8.1.4 Carty-Lookahead Adders |
|
|
|
8.1.5 Group Ripple Adders |
|
|
|
8.1.6 Group-Carry Lookahead |
|
|
|
8.1.7 MSI Arithmetic and Logic Units |
|
|
|
|
|
8.1.9 Parallel-Prefix Adders |
|
|
|
8.1.10 FPGA CARRY4 Element |
|
|
|
8.2 Shifting and Rotating |
|
|
403 | (13) |
|
|
|
8.2.2 Barrel Shifters in Verilog |
|
|
|
|
416 | (10) |
|
8.3.1 Combinational Multiplier Structures |
|
|
|
8.3.2 Multiplication in Verilog |
|
|
|
|
426 | (7) |
|
8.4.1 Basic Unsigned Binary Division Algorithm |
|
|
|
8.4.2 Division in Verilog |
|
|
|
|
433 | (1) |
|
|
433 | (1) |
|
|
434 | (5) |
9 State Machines |
|
439 | (56) |
|
|
440 | (3) |
|
9.2 State-Machine Structure and Analysis |
|
|
443 | (12) |
|
9.2.1 State-Machine Structure |
|
|
|
|
|
9.2.3 State-Machine Timing |
|
|
|
9.2.4 Analysis of State Machines with D Flip-Flops |
|
|
|
9.3 State-Machine Design with State Tables |
|
|
455 | (17) |
|
9.3.1 State-Table Design Example |
|
|
|
|
|
|
|
9.3.4 Synthesis Using D Flip-Flops |
|
|
|
9.3.5 Beyond State Tables |
|
|
|
9.4 State-Machine Design with State Diagrams |
|
|
472 | (6) |
|
9.4.1 T-Bird Tail Lights Example |
|
|
|
9.5 State-Machine Design with ASM Charts |
|
|
478 | (5) |
|
9.5.1 T-Bird Tail Lights with ASM Charts |
|
|
|
9.6 State-Machine Design with Verilog |
|
|
483 | (3) |
|
|
486 | (1) |
|
|
487 | (3) |
|
|
490 | (5) |
10 Sequential Logic Elements |
|
495 | (58) |
|
|
496 | (3) |
|
|
|
|
|
10.1.3 Metastable Behavior |
|
|
|
10.2 Latches and Flip-Flops |
|
|
499 | (9) |
|
|
|
|
|
|
|
10.2.4 Edge-Triggered D Flip-Flop |
|
|
|
10.2.5 Edge-Triggered D Flip-Flop with Enable |
|
|
|
|
|
10.3 Latches and Flip-Flops in Verilog |
|
|
508 | (14) |
|
10.3.1 Instance Statements and Library Components |
|
|
|
10.3.2 Behavioral Latch and Flip-Flop Models |
|
|
|
10.3.3 More about clocking in Verilog |
|
|
|
10.4 Multibit Registers and Latches |
|
|
522 | (3) |
|
10.4.1 MSI Registers and Latches |
|
|
|
10.4.2 Multibit Registers and Latches in Verilog |
|
|
|
10.5 Miscellaneous Latch and Bistable Applications |
|
|
525 | (3) |
|
|
|
10.5.2 Bus-Holder Circuits |
|
|
|
|
528 | (3) |
|
10.7 FPGA Sequential Logic Elements |
|
|
531 | (3) |
|
10.8 Feedback Sequential Circuits |
|
|
534 | (10) |
|
|
|
10.8.2 Analyzing Circuits with Multiple Feedback Loops |
|
|
|
10.8.3 Feedback Sequential-Circuit Design |
|
|
|
10.8.4 Feedback Sequential Circuits in Verilog |
|
|
|
|
544 | (1) |
|
|
545 | (2) |
|
|
547 | (6) |
11 Counters And Shift Registers |
|
553 | (52) |
|
|
554 | (12) |
|
|
|
11.1.2 Synchronous Counters |
|
|
|
11.1.3 A Universal 4-Bit Counter Circuit |
|
|
|
11.1.4 Decoding Binary-Counter States |
|
|
|
11.1.5 Counters in Verilog |
|
|
|
|
566 | (27) |
|
11.2.1 Shift-Register Structure |
|
|
|
11.2.2 Shift-Register Counters |
|
|
|
|
|
|
|
11.2.5 Linear Feedback Shift-Register Counters |
|
|
|
11.2.6 Shift Registers in Verilog |
|
|
|
11.2.7 Timing-Generator Examples |
|
|
|
|
|
11.3 Iterative versus Sequential Circuits |
|
|
593 | (3) |
|
|
596 | (1) |
|
|
596 | (3) |
|
|
599 | (6) |
12 State Machines In Verilog |
|
605 | (68) |
|
12.1 Verilog State-Machine Coding Styles |
|
|
606 | (10) |
|
12.1.1 Basic Coding Style |
|
|
|
12.1.2 A Verilog State-Machine Example |
|
|
|
12.1.3 Combined State Memory and Next-State Logic |
|
|
|
|
|
12.1.5 Pipelined Moore Outputs in Verilog |
|
|
|
12.1.6 Direct Verilog Coding Without a State Table |
|
|
|
12.1.7 State-Machine Extraction |
|
|
|
12.2 Verilog State-Machine Test Benches |
|
|
616 | (10) |
|
12.2.1 State-Machine Test-Bench Construction Methods |
|
|
|
12.2.2 Example Test Benches |
|
|
|
12.2.3 Instrumenting Next-State Logic for Testing |
|
|
|
|
|
|
626 | (2) |
|
|
628 | (4) |
|
|
632 | (5) |
|
12.6 Reinventing Traffic-Light Controllers |
|
|
637 | (5) |
|
|
642 | (4) |
|
12.8 "Don't-Care" State Encodings |
|
|
646 | (2) |
|
12.9 Decomposing State Machines |
|
|
648 | (8) |
|
12.9.1 The Guessing Game Again |
|
|
|
|
656 | (8) |
|
|
664 | (1) |
|
|
664 | (2) |
|
|
666 | (7) |
13 Sequential-Circuit Design Practices |
|
673 | (60) |
|
13.1 Sequential-Circuit Documentation Practices |
|
|
674 | (7) |
|
13.1.1 General Requirements |
|
|
|
|
|
13.1.3 State-Machine Descriptions |
|
|
|
13.1.4 Timing Diagrams and Specifications |
|
|
|
13.2 Synchronous Design Methodology |
|
|
681 | (10) |
|
13.2.1 Synchronous System Structure |
|
|
|
13.2.2 A Synchronous System Design Example |
|
|
|
13.3 Difficulties in Synchronous Design |
|
|
691 | (10) |
|
|
|
|
|
13.3.3 Asynchronous Inputs |
|
|
|
13.4 Synchronizer Failure and Metastability |
|
|
701 | (9) |
|
13.4.1 Synchronizer Failure |
|
|
|
13.4.2 Metastability Resolution Time |
|
|
|
13.4.3 Reliable Synchronizer Design |
|
|
|
13.4.4 Analysis of Metastable Timing |
|
|
|
13.4.5 Better Synchronizers |
|
|
|
13.4.6 Other Synchronizer Designs |
|
|
|
13.5 Two-Clock Synchronization Example |
|
|
710 | (19) |
|
|
729 | (1) |
|
|
729 | (1) |
|
|
730 | (3) |
14 Digital Circuits |
|
733 | (80) |
|
|
735 | (10) |
|
|
|
|
|
14.1.3 Basic CMOS Inverter Circuit |
|
|
|
14.1.4 CMOS NAND and NOR Gates |
|
|
|
|
|
14.1.6 Noninverting Gates |
|
|
|
14.1.7 CMOS AND-OR-INVERT and OR-AND-INVERT Gates |
|
|
|
14.2 Electrical Behavior of CMOS Circuits |
|
|
745 | (3) |
|
|
|
14.2.2 Data Sheets and Specifications |
|
|
|
14.3 CMOS Static Electrical Behavior |
|
|
748 | (16) |
|
14.3.1 Logic Levels and Noise Margins |
|
|
|
14.3.2 Circuit Behavior with Resistive Loads |
|
|
|
14.3.3 Circuit Behavior with Nonideal Inputs |
|
|
|
|
|
14.3.5 Effects of Loading |
|
|
|
|
|
14.3.7 How to Destroy a CMOS Device |
|
|
|
14.4 CMOS Dynamic Electrical Behavior |
|
|
764 | (14) |
|
|
|
|
|
|
|
14.4.4 Current Spikes and Decoupling Capacitors |
|
|
|
|
|
14.4.6 Simultaneous Switching and Ground Bounce |
|
|
|
14.5 Other CMOS Input and Output Structures |
|
|
778 | (12) |
|
14.5.1 Transmission Gates |
|
|
|
14.5.2 Schmitt-Trigger Inputs |
|
|
|
14.5.3 Three-State Outputs |
|
|
|
14.5.4 Open-Drain Outputs |
|
|
|
14.5.5 Driving LEDs and Relays |
|
|
|
|
|
|
|
|
|
|
790 | (8) |
|
|
|
|
|
14.6.3 HC, HCT, AHC, and AHCT Electrical Characteristics |
|
|
|
|
|
|
|
14.7 Low-Voltage CMOS Logic and Interfacing |
|
|
798 | (6) |
|
14.7.1 3.3-V LVTTL and LVCMOS Logic Levels |
|
|
|
14.7.2 5-V Tolerant Inputs |
|
|
|
14.7.3 5-V Tolerant Outputs |
|
|
|
14.7.4 TTL/LVTTL Interfacing Summary |
|
|
|
14.7.5 Logic Levels Less Than 3.3 V |
|
|
|
14.8 Differential Signaling |
|
|
803 | (1) |
|
|
804 | (1) |
|
|
805 | (3) |
|
|
808 | (5) |
15 ROMS, RAMS, And FPGAS |
|
813 | (54) |
|
|
814 | (19) |
|
15.1.1 Internal ROM Structure |
|
|
|
15.1.2 Two-Dimensional Decoding |
|
|
|
15.1.3 Commercial ROM Types |
|
|
|
15.1.4 Parallel-ROM Interfaces |
|
|
|
15.1.5 Parallel-ROM Timing |
|
|
|
15.1.6 Byte-Serial Interfaces for NAND Flash Memories |
|
|
|
15.1.7 NAND Memory Timing and Access Bandwidth |
|
|
|
15.1.8 Storage Management for NAND Memories |
|
|
|
|
833 | (1) |
|
|
834 | (10) |
|
15.3.1 Static-RAM Inputs and Outputs |
|
|
|
15.3.2 Static-RAM Internal Structure |
|
|
|
|
|
15.3.4 Standard Asynchronous SRAMs |
|
|
|
|
|
|
844 | (7) |
|
15.4.1 Dynamic-RAM Structure |
|
|
|
|
|
|
|
15.5 Field-Programmable Gate Arrays (FPGAs) |
|
|
851 | (12) |
|
15.5.1 Xilinx 7-Series FPGA Family |
|
|
|
15.5.2 CLBs and Other Logic Resources |
|
|
|
15.5.3 Input/Output Block |
|
|
|
15.5.4 Programmable Interconnect |
|
|
|
|
863 | (1) |
|
|
864 | (3) |
Index |
|
867 | |