Preface |
|
xv | |
Acknowledgments |
|
xx | |
Part I Introduction |
|
|
1 The digital abstraction |
|
|
3 | (19) |
|
|
3 | (2) |
|
1.2 Digital signals tolerate noise |
|
|
5 | (3) |
|
1.3 Digital signals represent complex data |
|
|
8 | (3) |
|
1.3.1 Representing the day of the year |
|
|
10 | (1) |
|
1.3.2 Representing subtractive colors |
|
|
11 | (1) |
|
1.4 Digital logic functions |
|
|
11 | (2) |
|
1.5 VHDL description of digital circuits and systems |
|
|
13 | (3) |
|
1.6 Digital logic in systems |
|
|
16 | (1) |
|
|
17 | (1) |
|
|
18 | (1) |
|
|
18 | (4) |
|
2 The practice of digital system design |
|
|
22 | (21) |
|
|
22 | (6) |
|
|
22 | (2) |
|
2.1.2 Concept development and feasibility |
|
|
24 | (2) |
|
2.1.3 Partitioning and detailed design |
|
|
26 | (1) |
|
|
27 | (1) |
|
2.2 Digital systems are built from chips and boards |
|
|
28 | (4) |
|
2.3 Computer-aided design tools |
|
|
32 | (2) |
|
2.4 Moore's law and digital system evolution |
|
|
34 | (2) |
|
|
36 | (1) |
|
|
36 | (1) |
|
|
37 | (6) |
Part II Combinational logic |
|
|
|
43 | (15) |
|
|
43 | (1) |
|
|
44 | (2) |
|
|
46 | (1) |
|
|
47 | (1) |
|
3.5 From equations to gates |
|
|
48 | (3) |
|
3.6 Boolean expressions in VHDL |
|
|
51 | (3) |
|
|
54 | (1) |
|
|
55 | (1) |
|
|
55 | (3) |
|
|
58 | (24) |
|
|
58 | (4) |
|
4.2 Switch model of MOS transistors |
|
|
62 | (6) |
|
|
68 | (9) |
|
4.3.1 Basic CMOS gate circuit |
|
|
69 | (1) |
|
4.3.2 Inverters, NANDs, and NORs |
|
|
70 | (2) |
|
|
72 | (3) |
|
|
75 | (1) |
|
|
76 | (1) |
|
|
77 | (1) |
|
|
78 | (1) |
|
|
78 | (4) |
|
5 Delay and power of CMOS circuits |
|
|
82 | (23) |
|
5.1 Delay of static CMOS gates |
|
|
82 | (3) |
|
5.2 Fan-out and driving large loads |
|
|
85 | (1) |
|
5.3 Fan-in and logical effort |
|
|
86 | (3) |
|
|
89 | (3) |
|
|
92 | (2) |
|
|
94 | (4) |
|
5.7 Power dissipation in CMOS circuits |
|
|
98 | (3) |
|
|
98 | (1) |
|
|
99 | (1) |
|
|
100 | (1) |
|
|
101 | (1) |
|
|
101 | (1) |
|
|
102 | (3) |
|
6 Combinational logic design |
|
|
105 | (24) |
|
|
105 | (1) |
|
|
106 | (1) |
|
6.3 Truth tables, minterms, and normal form |
|
|
107 | (3) |
|
|
110 | (3) |
|
|
113 | (2) |
|
|
115 | (1) |
|
6.7 From a cover to gates |
|
|
116 | (1) |
|
6.8 Incompletely specified functions |
|
|
117 | (2) |
|
6.9 Product-of-sums implementation |
|
|
119 | (2) |
|
|
121 | (2) |
|
|
123 | (1) |
|
|
124 | (1) |
|
|
124 | (5) |
|
7 VHDL descriptions of combinational logic |
|
|
129 | (28) |
|
7.1 The prime number circuit in VHDL |
|
|
129 | (14) |
|
7.1.1 A VHDL design entity |
|
|
129 | (2) |
|
|
131 | (3) |
|
7.1.3 The case? statement |
|
|
134 | (2) |
|
|
136 | (1) |
|
7.1.5 Concurrent signal assignment statements |
|
|
136 | (1) |
|
7.1.6 Selected signal assignment statements |
|
|
137 | (1) |
|
7.1.7 Conditional signal assignment statements |
|
|
138 | (1) |
|
7.1.8 Structural description |
|
|
138 | (3) |
|
7.1.9 The decimal prime number function |
|
|
141 | (2) |
|
7.2 A testbench for the prime number circuit |
|
|
143 | (5) |
|
7.3 Example: a seven-segment decoder |
|
|
148 | (5) |
|
|
153 | (1) |
|
|
154 | (1) |
|
|
154 | (3) |
|
8 Combinational building blocks |
|
|
157 | (42) |
|
|
157 | (1) |
|
|
157 | (6) |
|
|
163 | (8) |
|
|
171 | (2) |
|
8.5 Arbiters and priority encoders |
|
|
173 | (7) |
|
|
180 | (3) |
|
|
183 | (1) |
|
|
184 | (5) |
|
|
189 | (3) |
|
8.10 Programmable logic arrays |
|
|
192 | (1) |
|
|
193 | (2) |
|
8.12 Intellectual property |
|
|
195 | (1) |
|
|
195 | (1) |
|
|
196 | (1) |
|
|
196 | (3) |
|
|
199 | (22) |
|
9.1 Multiple-of-3 circuit |
|
|
199 | (2) |
|
|
201 | (4) |
|
|
205 | (2) |
|
|
207 | (7) |
|
|
214 | (1) |
|
|
215 | (6) |
Part III Arithmetic circuits |
|
|
|
221 | (29) |
|
|
221 | (3) |
|
|
224 | (6) |
|
10.3 Negative numbers and subtraction |
|
|
230 | (7) |
|
|
237 | (3) |
|
|
240 | (4) |
|
|
244 | (1) |
|
|
245 | (5) |
|
11 Fixed- and floating-point numbers |
|
|
250 | (19) |
|
11.1 Representation error: accuracy, precision, and resolution |
|
|
250 | (2) |
|
|
252 | (5) |
|
|
252 | (3) |
|
|
255 | (2) |
|
11.3 Floating-point numbers |
|
|
257 | (8) |
|
|
257 | (1) |
|
11.3.2 Denormalized numbers and gradual underflow |
|
|
258 | (1) |
|
11.3.3 Floating-point multiplication |
|
|
259 | (1) |
|
11.3.4 Floating-point addition/subtraction |
|
|
260 | (5) |
|
|
265 | (1) |
|
|
265 | (1) |
|
|
265 | (4) |
|
12 Fast arithmetic circuits |
|
|
269 | (21) |
|
|
269 | (7) |
|
|
276 | (2) |
|
|
278 | (6) |
|
|
284 | (2) |
|
|
286 | (1) |
|
|
287 | (1) |
|
|
287 | (3) |
|
|
290 | (15) |
|
13.1 Complex multiplication |
|
|
290 | (1) |
|
13.2 Converting between fixed- and floating-point formats |
|
|
291 | (7) |
|
13.2.1 Floating-point format |
|
|
291 | (2) |
|
13.2.2 Fixed- to floating-point conversion |
|
|
293 | (4) |
|
13.2.3 Floating- to fixed-point conversion |
|
|
297 | (1) |
|
|
298 | (2) |
|
|
300 | (1) |
|
|
300 | (1) |
|
|
300 | (5) |
Part IV Synchronous sequential logic |
|
|
|
305 | (23) |
|
|
305 | (2) |
|
14.2 Synchronous sequential circuits |
|
|
307 | (2) |
|
14.3 Traffic-light controller |
|
|
309 | (3) |
|
|
312 | (1) |
|
14.5 Implementation of finite-state machines |
|
|
313 | (3) |
|
14.6 VHDL implementation of finite-state machines |
|
|
316 | (8) |
|
|
324 | (1) |
|
|
324 | (1) |
|
|
324 | (4) |
|
|
328 | (16) |
|
15.1 Propagation and contamination delay |
|
|
328 | (3) |
|
|
331 | (1) |
|
15.3 Setup- and hold-time constraints |
|
|
331 | (3) |
|
15.4 The effect of clock skew |
|
|
334 | (2) |
|
|
336 | (1) |
|
15.6 Timing and logic synthesis |
|
|
337 | (2) |
|
|
339 | (1) |
|
|
340 | (1) |
|
|
340 | (4) |
|
16 Datapath sequential logic |
|
|
344 | (31) |
|
|
344 | (8) |
|
|
344 | (2) |
|
16.1.2 Up/down/load counter |
|
|
346 | (3) |
|
|
349 | (3) |
|
|
352 | (4) |
|
16.2.1 A simple shift register |
|
|
352 | (1) |
|
16.2.2 Left/right/load (LRL) shift register |
|
|
353 | (1) |
|
16.2.3 Universal shifter/counter |
|
|
353 | (3) |
|
16.3 Control and data partitioning |
|
|
356 | (16) |
|
16.3.1 Example: vending machine FSM |
|
|
357 | (10) |
|
16.3.2 Example: combination lock |
|
|
367 | (5) |
|
|
372 | (1) |
|
|
372 | (3) |
|
17 Factoring finite-state machines |
|
|
375 | (23) |
|
|
375 | (7) |
|
17.2 Traffic-light controller |
|
|
382 | (11) |
|
|
393 | (1) |
|
|
394 | (4) |
|
|
398 | (33) |
|
18.1 Simple microcoded FSM |
|
|
398 | (4) |
|
18.2 Instruction sequencing |
|
|
402 | (6) |
|
|
408 | (2) |
|
18.4 Multiple instruction types |
|
|
410 | (4) |
|
18.5 Microcode subroutines |
|
|
414 | (6) |
|
|
420 | (7) |
|
|
427 | (1) |
|
|
427 | (1) |
|
|
428 | (3) |
|
|
431 | (22) |
|
|
431 | (1) |
|
|
432 | (7) |
|
|
439 | (1) |
|
19.4 Huffman encoder/decoder |
|
|
439 | (9) |
|
|
440 | (2) |
|
|
442 | (6) |
|
|
448 | (1) |
|
|
448 | (1) |
|
|
448 | (5) |
Part V Practical design |
|
|
|
453 | (14) |
|
|
453 | (3) |
|
20.1.1 Verification coverage |
|
|
453 | (1) |
|
|
454 | (1) |
|
20.1.3 Static timing analysis |
|
|
455 | (1) |
|
20.1.4 Formal verification |
|
|
455 | (1) |
|
|
456 | (1) |
|
|
456 | (5) |
|
|
456 | (1) |
|
20.2.2 Combinational testing |
|
|
457 | (1) |
|
20.2.3 Testing redundant logic |
|
|
457 | (1) |
|
|
458 | (1) |
|
20.2.5 Built-in self-test (BIST) |
|
|
459 | (1) |
|
|
460 | (1) |
|
|
461 | (1) |
|
|
462 | (1) |
|
|
462 | (5) |
Part VI System design |
|
|
|
467 | (12) |
|
21.1 System design process |
|
|
467 | (1) |
|
|
468 | (5) |
|
|
468 | (3) |
|
|
471 | (1) |
|
|
472 | (1) |
|
|
473 | (3) |
|
|
474 | (1) |
|
|
475 | (1) |
|
|
475 | (1) |
|
|
476 | (1) |
|
|
477 | (1) |
|
|
477 | (2) |
|
22 Interface and system-level timing |
|
|
479 | (18) |
|
|
479 | (3) |
|
22.1.1 Always valid timing |
|
|
479 | (1) |
|
22.1.2 Periodically valid signals |
|
|
480 | (1) |
|
|
481 | (1) |
|
22.2 Interface partitioning and selection |
|
|
482 | (1) |
|
22.3 Serial and packetized interfaces |
|
|
483 | (3) |
|
|
486 | (1) |
|
|
487 | (2) |
|
|
488 | (1) |
|
22.5.2 Pipelining and anticipatory timing |
|
|
488 | (1) |
|
22.6 Interface and timing examples |
|
|
489 | (4) |
|
|
489 | (1) |
|
|
489 | (4) |
|
|
493 | (1) |
|
|
493 | (1) |
|
|
494 | (3) |
|
|
497 | (24) |
|
|
497 | (3) |
|
|
500 | (2) |
|
23.3 Example: pipelining a ripple-carry adder |
|
|
502 | (3) |
|
|
505 | (2) |
|
|
507 | (4) |
|
|
511 | (1) |
|
|
512 | (4) |
|
|
516 | (1) |
|
|
517 | (1) |
|
|
518 | (1) |
|
|
518 | (3) |
|
|
521 | (11) |
|
24.1 Abstract interconnect |
|
|
521 | (1) |
|
|
522 | (2) |
|
|
524 | (3) |
|
24.4 Interconnection networks |
|
|
527 | (2) |
|
|
529 | (1) |
|
|
529 | (1) |
|
|
530 | (2) |
|
|
532 | (19) |
|
|
532 | (4) |
|
|
532 | (2) |
|
|
534 | (2) |
|
25.2 Bit-slicing and banking memory |
|
|
536 | (1) |
|
|
537 | (3) |
|
|
540 | (4) |
|
|
544 | (1) |
|
|
545 | (1) |
|
|
545 | (6) |
Part VII Asynchronous logic |
|
|
26 Asynchronous sequential circuits |
|
|
551 | (15) |
|
|
551 | (3) |
|
26.2 Flow-table synthesis: the toggle circuit |
|
|
554 | (4) |
|
26.3 Races and state assignment |
|
|
558 | (4) |
|
|
562 | (1) |
|
|
563 | (1) |
|
|
563 | (3) |
|
|
566 | (14) |
|
|
566 | (2) |
|
|
568 | (3) |
|
27.3 CMOS latches and flip-flops |
|
|
571 | (1) |
|
27.4 Flow-table derivation of the latch |
|
|
572 | (2) |
|
27.5 Flow-table synthesis of a D flip-flop |
|
|
574 | (2) |
|
|
576 | (1) |
|
|
577 | (1) |
|
|
577 | (3) |
|
28 Metastability and synchronization failure |
|
|
580 | (12) |
|
28.1 Synchronization failure |
|
|
580 | (1) |
|
|
581 | (3) |
|
28.3 Probability of entering and leaving an illegal state |
|
|
584 | (1) |
|
28.4 Demonstration of metastability |
|
|
585 | (4) |
|
|
589 | (1) |
|
|
590 | (1) |
|
|
590 | (2) |
|
|
592 | (19) |
|
29.1 Where are synchronizers used? |
|
|
592 | (1) |
|
29.2 Brute-force synchronizer |
|
|
593 | (2) |
|
29.3 The problem with multi-bit signals |
|
|
595 | (1) |
|
|
596 | (8) |
|
|
604 | (1) |
|
|
605 | (1) |
|
|
605 | (6) |
Part VIII Appendix: VHDL coding style and syntax guide |
|
|
Appendix A VHDL coding style |
|
|
611 | (11) |
|
|
611 | (1) |
|
A.2 All state should be in explicitly declared registers |
|
|
612 | (2) |
|
A.3 Define combinational design entities so that they are easy to read |
|
|
614 | (1) |
|
A.4 Assign all signals under all conditions |
|
|
615 | (2) |
|
A.5 Keep design entities small |
|
|
617 | (1) |
|
A.6 Large design entities should be structural |
|
|
617 | (1) |
|
A.7 Use descriptive signal names |
|
|
618 | (1) |
|
A.8 Use symbolic names for subfields of signals |
|
|
618 | (1) |
|
|
618 | (1) |
|
A.10 Comments should describe intention and give rationale, not state the obvious |
|
|
619 | (1) |
|
A.11 Never forget you are defining hardware |
|
|
620 | (1) |
|
A.12 Read and be a critic of VHDL code |
|
|
620 | (2) |
|
Appendix B VHDL syntax guide |
|
|
622 | (31) |
|
B.1 Comments, identifiers, and keywords |
|
|
623 | (1) |
|
|
623 | (4) |
|
|
624 | (1) |
|
|
624 | (1) |
|
|
624 | (1) |
|
|
625 | (1) |
|
|
625 | (1) |
|
|
626 | (1) |
|
|
626 | (1) |
|
B.2.8 Qualified expressions |
|
|
627 | (1) |
|
B.3 Libraries, packages, and using multiple files |
|
|
627 | (1) |
|
|
628 | (1) |
|
B.5 Slices, concatenation, aggregates, operators, and expressions |
|
|
629 | (2) |
|
B.6 Concurrent statements |
|
|
631 | (5) |
|
B.6.1 Concurrent signal assignment |
|
|
632 | (2) |
|
B.6.2 Component instantiation |
|
|
634 | (2) |
|
B.7 Multiple signal drivers and resolution functions |
|
|
636 | (2) |
|
|
638 | (2) |
|
|
640 | (8) |
|
B.9.1 The process sensitivity list and execution timing |
|
|
641 | (3) |
|
B.9.2 Wait and report statements |
|
|
644 | (1) |
|
|
644 | (1) |
|
B.9.4 Case and matching case statements |
|
|
644 | (2) |
|
B.9.5 Signal and variable assignment statements |
|
|
646 | (2) |
|
B.10 Synthesizable process statements |
|
|
648 | (5) |
|
B.10.1 Type 1: purely combinational |
|
|
649 | (1) |
|
B.10.2 Type 2: edge-sensitive |
|
|
649 | (1) |
|
B.10.3 Type 3: edge-sensitive with asynchronous reset |
|
|
650 | (3) |
References |
|
653 | (5) |
Index of VHDL design entities |
|
658 | (2) |
Subject index |
|
660 | |