Preface |
|
xix | |
Features |
|
xx | |
Online Supplements |
|
xxi | |
How to Use the Software Tools in a Course |
|
xxii | |
Labs |
|
xxii | |
Bugs |
|
xxiii | |
Acknowledgments |
|
xxiv | |
|
Chapter 1 From Zero to One |
|
|
3 | (52) |
|
|
3 | (1) |
|
1.2 The Art of Managing Complexity |
|
|
4 | (3) |
|
|
4 | (1) |
|
|
5 | (1) |
|
|
6 | (1) |
|
1.3 The Digital Abstraction |
|
|
7 | (2) |
|
|
9 | (10) |
|
|
9 | (1) |
|
|
9 | (2) |
|
1.4.3 Hexadecimal Numbers |
|
|
11 | (2) |
|
1.4.4 Bytes, Nibbles, and All That Jazz |
|
|
13 | (1) |
|
|
14 | (1) |
|
1.4.6 Signed Binary Numbers |
|
|
15 | (4) |
|
|
19 | (3) |
|
|
20 | (1) |
|
|
20 | (1) |
|
|
20 | (1) |
|
|
21 | (1) |
|
1.5.5 Other Two-Input Gates |
|
|
21 | (1) |
|
1.5.6 Multiple-Input Gates |
|
|
21 | (1) |
|
1.6 Beneath the Digital Abstraction |
|
|
22 | (4) |
|
|
22 | (1) |
|
|
22 | (1) |
|
|
23 | (1) |
|
1.6.4 DC Transfer Characteristics |
|
|
24 | (1) |
|
1.6.5 The Static Discipline |
|
|
24 | (2) |
|
|
26 | (8) |
|
|
27 | (1) |
|
|
27 | (1) |
|
|
28 | (1) |
|
1.7.4 nMOS and pMOS Transistors |
|
|
28 | (3) |
|
|
31 | (1) |
|
1.7.6 Other CMOS Logic Gates |
|
|
31 | (2) |
|
|
33 | (1) |
|
|
33 | (1) |
|
|
34 | (1) |
|
1.9 Summary and a Look Ahead |
|
|
35 | (20) |
|
|
37 | (15) |
|
|
52 | (3) |
|
Chapter 2 Combinational Logic Design |
|
|
55 | (54) |
|
|
55 | (3) |
|
|
58 | (2) |
|
|
58 | (1) |
|
2.2.2 Sum-of-Products Form |
|
|
58 | (2) |
|
2.2.3 Product-of-Sums Form |
|
|
60 | (1) |
|
|
60 | (6) |
|
|
61 | (1) |
|
2.3.2 Theorems of One Variable |
|
|
61 | (1) |
|
2.3.3 Theorems of Several Variables |
|
|
62 | (2) |
|
2.3.4 The Truth Behind It All |
|
|
64 | (1) |
|
2.3.5 Simplifying Equations |
|
|
65 | (1) |
|
|
66 | (3) |
|
2.5 Multilevel Combinational Logic |
|
|
69 | (4) |
|
|
70 | (1) |
|
|
71 | (2) |
|
|
73 | (2) |
|
|
73 | (1) |
|
|
74 | (1) |
|
|
75 | (8) |
|
|
76 | (1) |
|
2.7.2 Logic Minimization with K-Maps |
|
|
77 | (4) |
|
|
81 | (1) |
|
|
82 | (1) |
|
2.8 Combinational Building Blocks |
|
|
83 | (5) |
|
|
83 | (3) |
|
|
86 | (2) |
|
|
88 | (7) |
|
2.9.1 Propagation and Contamination Delay |
|
|
88 | (4) |
|
|
92 | (3) |
|
|
95 | (14) |
|
|
97 | (9) |
|
|
106 | (3) |
|
Chapter 3 Sequential Logic Design |
|
|
109 | (64) |
|
|
109 | (1) |
|
3.2 Latches and Flip-Flops |
|
|
109 | (10) |
|
|
111 | (2) |
|
|
113 | (1) |
|
|
114 | (1) |
|
|
114 | (1) |
|
|
115 | (1) |
|
3.2.6 Resettable Flip-Flop |
|
|
116 | (1) |
|
3.2.7 Transistor-Level Latch and Flip-Flop Designs |
|
|
116 | (2) |
|
3.2.8 Putting It All Together |
|
|
118 | (1) |
|
3.3 Synchronous Logic Design |
|
|
119 | (4) |
|
3.3.1 Some Problematic Circuits |
|
|
119 | (1) |
|
3.3.2 Synchronous Sequential Circuits |
|
|
120 | (2) |
|
3.3.3 Synchronous and Asynchronous Circuits |
|
|
122 | (1) |
|
3.4 Finite State Machines |
|
|
123 | (18) |
|
|
123 | (6) |
|
|
129 | (3) |
|
3.4.3 Moore and Mealy Machines |
|
|
132 | (2) |
|
3.4.4 Factoring State Machines |
|
|
134 | (3) |
|
3.4.5 Deriving an FSM from a Schematic |
|
|
137 | (3) |
|
|
140 | (1) |
|
3.5 Timing of Sequential Logic |
|
|
141 | (16) |
|
3.5.1 The Dynamic Discipline |
|
|
142 | (1) |
|
|
142 | (6) |
|
|
148 | (3) |
|
|
151 | (1) |
|
|
152 | (2) |
|
3.5.6 Derivation of Resolution Time |
|
|
154 | (3) |
|
|
157 | (4) |
|
|
161 | (12) |
|
|
162 | (9) |
|
|
171 | (2) |
|
Chapter 4 Hardware Description Languages |
|
|
173 | (66) |
|
|
173 | (4) |
|
|
173 | (1) |
|
|
174 | (1) |
|
4.1.3 Simulation and Synthesis |
|
|
175 | (2) |
|
|
177 | (13) |
|
|
177 | (3) |
|
4.2.2 Comments and White Space |
|
|
180 | (1) |
|
4.2.3 Reduction Operators |
|
|
180 | (1) |
|
4.2.4 Conditional Assignment |
|
|
181 | (1) |
|
|
182 | (2) |
|
|
184 | (1) |
|
|
185 | (1) |
|
|
186 | (2) |
|
|
188 | (1) |
|
|
188 | (2) |
|
|
190 | (3) |
|
|
193 | (5) |
|
|
193 | (1) |
|
4.4.2 Resettable Registers |
|
|
194 | (2) |
|
|
196 | (1) |
|
|
197 | (1) |
|
|
198 | (1) |
|
4.5 More Combinational Logic |
|
|
198 | (11) |
|
|
201 | (1) |
|
|
202 | (3) |
|
4.5.3 Truth Tables with Don't Cares |
|
|
205 | (1) |
|
4.5.4 Blocking and Nonblocking Assignments |
|
|
205 | (4) |
|
4.6 Finite State Machines |
|
|
209 | (4) |
|
|
213 | (4) |
|
|
214 | (1) |
|
|
215 | (2) |
|
4.8 Parameterized Modules |
|
|
217 | (3) |
|
|
220 | (4) |
|
|
224 | (15) |
|
|
226 | (11) |
|
|
237 | (2) |
|
Chapter 5 Digital Building Blocks |
|
|
239 | (56) |
|
|
239 | (1) |
|
|
239 | (16) |
|
|
239 | (7) |
|
|
246 | (1) |
|
|
246 | (2) |
|
|
248 | (3) |
|
5.2.5 Shifters and Rotators |
|
|
251 | (1) |
|
|
252 | (2) |
|
|
254 | (1) |
|
|
255 | (1) |
|
|
255 | (4) |
|
5.3.1 Fixed-Point Number Systems |
|
|
255 | (1) |
|
5.3.2 Floating-Point Number Systems |
|
|
256 | (3) |
|
5.4 Sequential Building Blocks |
|
|
259 | (5) |
|
|
260 | (1) |
|
|
261 | (3) |
|
|
264 | (7) |
|
|
264 | (2) |
|
5.5.2 Dynamic Random Access Memory (DRAM) |
|
|
266 | (1) |
|
5.5.3 Static Random Access Memory (SRAM) |
|
|
267 | (1) |
|
|
267 | (1) |
|
|
268 | (1) |
|
|
268 | (2) |
|
5.5.7 Logic Using Memory Arrays |
|
|
270 | (1) |
|
|
271 | (1) |
|
|
271 | (10) |
|
5.6.1 Programmable Logic Array |
|
|
272 | (2) |
|
5.6.2 Field Programmable Gate Array |
|
|
274 | (5) |
|
5.6.3 Array Implementations |
|
|
279 | (2) |
|
|
281 | (14) |
|
|
282 | (11) |
|
|
293 | (2) |
|
|
295 | (90) |
|
|
295 | (1) |
|
|
296 | (7) |
|
|
297 | (1) |
|
6.2.2 Operands: Registers, Memory, and Constants |
|
|
298 | (5) |
|
|
303 | (26) |
|
6.3.1 Data-processing Instructions |
|
|
303 | (3) |
|
|
306 | (2) |
|
|
308 | (1) |
|
6.3.4 Conditional Statements |
|
|
309 | (3) |
|
|
312 | (1) |
|
|
313 | (4) |
|
|
317 | (12) |
|
|
329 | (10) |
|
6.4.1 Data-processing Instructions |
|
|
329 | (4) |
|
6.4.2 Memory Instructions |
|
|
333 | (1) |
|
6.4.3 Branch Instructions |
|
|
334 | (2) |
|
|
336 | (1) |
|
6.4.5 Interpreting Machine Language Code |
|
|
336 | (1) |
|
6.4.6 The Power of the Stored Program |
|
|
337 | (2) |
|
6.5 Lights, Camera, Action: Compiling, Assembling, and Loading |
|
|
339 | (6) |
|
|
339 | (1) |
|
|
340 | (2) |
|
|
342 | (1) |
|
|
343 | (1) |
|
|
344 | (1) |
|
|
345 | (5) |
|
|
345 | (1) |
|
|
346 | (1) |
|
|
347 | (3) |
|
6.7 Evolution of ARM Architecture |
|
|
350 | (10) |
|
6.7.1 Thumb Instruction Set |
|
|
351 | (1) |
|
|
352 | (5) |
|
6.7.3 Floating-Point Instructions |
|
|
357 | (1) |
|
6.7.4 Power-Saving and Security Instructions |
|
|
358 | (1) |
|
|
358 | (2) |
|
6.7.6 64-bit Architecture |
|
|
360 | (1) |
|
6.8 Another Perspective: x86 Architecture |
|
|
360 | (8) |
|
|
362 | (1) |
|
|
362 | (1) |
|
|
363 | (1) |
|
|
364 | (1) |
|
6.8.5 x86 Instruction Encoding |
|
|
364 | (3) |
|
6.8.6 Other x86 Peculiarities |
|
|
367 | (1) |
|
|
368 | (1) |
|
|
368 | (17) |
|
|
370 | (13) |
|
|
383 | (2) |
|
Chapter 7 Microarchitecture |
|
|
385 | (102) |
|
|
385 | (4) |
|
7.1.1 Architectural State and Instruction Set |
|
|
385 | (1) |
|
|
386 | (2) |
|
|
388 | (1) |
|
|
389 | (1) |
|
7.3 Single-Cycle Processor |
|
|
390 | (16) |
|
7.3.1 Single-Cycle Datapath |
|
|
390 | (7) |
|
7.3.2 Single-Cycle Control |
|
|
397 | (5) |
|
|
402 | (1) |
|
7.3.4 Performance Analysis |
|
|
402 | (4) |
|
|
406 | (19) |
|
7.4.1 Multicycle Datapath |
|
|
407 | (6) |
|
|
413 | (8) |
|
7.4.3 Performance Analysis |
|
|
421 | (4) |
|
|
425 | (18) |
|
|
428 | (2) |
|
|
430 | (1) |
|
|
431 | (10) |
|
7.5.4 Performance Analysis |
|
|
441 | (2) |
|
|
443 | (13) |
|
7.6.1 Single-Cycle Processor |
|
|
444 | (5) |
|
7.6.2 Generic Building Blocks |
|
|
449 | (3) |
|
|
452 | (4) |
|
7.7 Advanced Microarchitecture |
|
|
456 | (14) |
|
|
457 | (1) |
|
|
458 | (1) |
|
|
459 | (2) |
|
7.7.4 Superscalar Processor |
|
|
461 | (2) |
|
7.7.5 Out-of-Order Processor |
|
|
463 | (2) |
|
|
465 | (2) |
|
|
467 | (1) |
|
|
468 | (2) |
|
7.8 Real-World Perspective: Evolution of ARM Microarchitecture |
|
|
470 | (6) |
|
|
476 | (11) |
|
|
478 | (6) |
|
|
484 | (3) |
|
|
487 | (44) |
|
|
487 | (4) |
|
8.2 Memory System Performance Analysis |
|
|
491 | (1) |
|
|
492 | (16) |
|
8.3.1 What Data is Held in the Cache? |
|
|
493 | (1) |
|
|
494 | (8) |
|
8.3.3 What Data is Replaced? |
|
|
502 | (1) |
|
8.3.4 Advanced Cache Design |
|
|
503 | (4) |
|
8.3.5 The Evolution of ARM Caches |
|
|
507 | (1) |
|
|
508 | (10) |
|
8.4.1 Address Translation |
|
|
510 | (2) |
|
|
512 | (2) |
|
8.4.3 The Translation Lookaside Buffer |
|
|
514 | (1) |
|
|
515 | (1) |
|
8.4.5 Replacement Policies |
|
|
516 | (1) |
|
8.4.6 Multilevel Page Tables |
|
|
516 | (2) |
|
|
518 | (13) |
|
|
519 | (1) |
|
|
520 | (9) |
|
|
529 | (2) |
|
|
531 | (2) |
|
|
531 | (1) |
|
Chapter 9 Is available as an online supplement |
|
|
531 | (1) |
|
|
531 | (1) |
|
|
531 | (1) |
|
|
531 | (1) |
|
9.3.1 BCM2835 System-on-Chip |
|
|
531 | (1) |
|
|
531 | (1) |
|
9.3.3 General-Purpose Digital I/O |
|
|
531 | (1) |
|
|
531 | (1) |
|
|
531 | (1) |
|
|
531 | (1) |
|
|
531 | (1) |
|
9.4 Other Microcontroller Peripherals |
|
|
531 | (1) |
|
|
531 | (1) |
|
|
531 | (1) |
|
9.4.3 Bluetooth Wireless Communication |
|
|
531 | (1) |
|
|
531 | (1) |
|
|
531 | (1) |
|
|
531 | (1) |
|
9.5.2 Memory and Peripheral Interface Example |
|
|
531 | (1) |
|
|
531 | (1) |
|
|
531 | (1) |
|
9.6.2 PCI and PCI Express |
|
|
531 | (1) |
|
|
531 | (1) |
|
|
531 | (1) |
|
|
531 | (1) |
|
9.6.6 Interfacing to a PC |
|
|
531 | (1) |
|
|
531 | (2) |
|
Appendix A Digital System Implementation |
|
|
533 | (2) |
|
|
533 | (1) |
|
Appendix A Is available as an online supplement |
|
|
533 | (1) |
|
|
533 | (1) |
|
|
533 | (1) |
|
|
533 | (1) |
|
|
533 | (1) |
|
|
533 | (1) |
|
|
533 | (1) |
|
|
533 | (1) |
|
|
533 | (1) |
|
A.4 Application-Specific Integrated Circuits |
|
|
533 | (1) |
|
|
533 | (1) |
|
|
533 | (1) |
|
A.7 Packaging and Assembly |
|
|
533 | (1) |
|
|
533 | (1) |
|
A.8.1 Matched Termination |
|
|
533 | (1) |
|
|
533 | (1) |
|
|
533 | (1) |
|
A.8.4 Mismatched Termination |
|
|
533 | (1) |
|
A.8.5 When to Use Transmission Line Models |
|
|
533 | (1) |
|
A.8.6 Proper Transmission Line Terminations |
|
|
533 | (1) |
|
|
533 | (1) |
|
A.8.8 Derivation of the Reflection Coefficient |
|
|
533 | (1) |
|
A.8.9 Putting It All Together |
|
|
533 | (1) |
|
|
533 | (2) |
|
Appendix B ARM Instructions |
|
|
535 | (6) |
|
B.1 Data-Processing Instructions |
|
|
535 | (3) |
|
B.1.1 Multiply Instructions |
|
|
537 | (1) |
|
|
538 | (1) |
|
|
539 | (1) |
|
B.4 Miscellaneous Instructions |
|
|
539 | (1) |
|
|
540 | (1) |
|
|
541 | (2) |
|
|
541 | (1) |
|
Appendix C Is available as an online supplement |
|
|
541 | (1) |
|
|
541 | (1) |
|
|
541 | (1) |
|
C.2.1 C Program Dissection |
|
|
541 | (1) |
|
C.2.2 Running a C Program |
|
|
541 | (1) |
|
|
541 | (1) |
|
|
541 | (1) |
|
|
541 | (1) |
|
|
541 | (1) |
|
|
541 | (1) |
|
C.4.1 Primitive Data Types |
|
|
541 | (1) |
|
C.4.2 Global and Local Variables |
|
|
541 | (1) |
|
C.4.3 Initializing Variables |
|
|
541 | (1) |
|
|
541 | (1) |
|
|
541 | (1) |
|
C.7 Control-Flow Statements |
|
|
541 | (1) |
|
C.7.1 Conditional Statements |
|
|
541 | (1) |
|
|
541 | (1) |
|
|
541 | (1) |
|
|
541 | (1) |
|
|
541 | (1) |
|
|
541 | (1) |
|
|
541 | (1) |
|
|
541 | (1) |
|
|
541 | (1) |
|
C.8.7 Dynamic Memory Allocation |
|
|
541 | (1) |
|
|
541 | (1) |
|
|
541 | (1) |
|
|
541 | (1) |
|
|
541 | (1) |
|
|
541 | (1) |
|
|
541 | (1) |
|
C.10 Compiler and Command Line Options |
|
|
541 | (1) |
|
C.10.1 Compiling Multiple C Source Files |
|
|
541 | (1) |
|
|
541 | (1) |
|
C.10.3 Command Line Arguments |
|
|
541 | (1) |
|
|
541 | (2) |
Index |
|
543 | |