Preface |
|
xv | |
Acknowledgments |
|
xix | |
Chapter 1 Introduction to Microelectronics |
|
1 | (40) |
|
|
1 | (3) |
|
1.2 Microelectronics Viewed From Different Perspectives |
|
|
4 | (16) |
|
1.2.1 The Guinness Book of Records Point of View |
|
|
4 | (1) |
|
1.2.2 The Marketing Point of View |
|
|
5 | (2) |
|
1.2.3 The Fabrication Point of View |
|
|
7 | (4) |
|
1.2.4 The Design Engineer's Point of View |
|
|
11 | (7) |
|
1.2.5 The Business Point of View |
|
|
18 | (2) |
|
|
20 | (14) |
|
1.3.1 The Y-chart, a Map of Digital Electronic Systems |
|
|
20 | (2) |
|
1.3.2 Major Stages in Digital VLSI Design |
|
|
22 | (9) |
|
|
31 | (1) |
|
1.3.4 Electronic Design Automation Software |
|
|
32 | (2) |
|
|
34 | (1) |
|
1.5 Appendix I: A Brief Glossary of Logic Families |
|
|
35 | (2) |
|
1.6 Appendix II: An Illustrated Glossary of Circuit-Related Terms |
|
|
37 | (4) |
Chapter 2 Field-Programmable Logic |
|
41 | (22) |
|
|
41 | (2) |
|
2.2 Configuration Technologies |
|
|
43 | (3) |
|
|
43 | (1) |
|
|
44 | (1) |
|
|
44 | (2) |
|
2.3 Organization of Hardware Resources |
|
|
46 | (7) |
|
2.3.1 Simple Programmable Logic Devices (SPLD) |
|
|
46 | (1) |
|
2.3.2 Complex Programmable Logic Devices (CPLD) |
|
|
47 | (1) |
|
2.3.3 Field-Programmable Gate Arrays (FPGA) |
|
|
47 | (6) |
|
|
53 | (2) |
|
2.4.1 An Overview on FPL Device Families |
|
|
53 | (1) |
|
2.4.2 The Price and the Benefits of Electrical Configurability |
|
|
53 | (2) |
|
2.5 Extensions of the Basic Idea |
|
|
55 | (4) |
|
|
59 | (2) |
|
|
61 | (2) |
Chapter 3 From Algorithms to Architectures |
|
63 | (116) |
|
3.1 The Goals of Architecture Design |
|
|
63 | (2) |
|
|
63 | (2) |
|
3.2 The Architectural Solution Space |
|
|
65 | (22) |
|
|
65 | (6) |
|
3.2.2 What Makes an Algorithm Suitable for a Dedicated VLSI Architecture? |
|
|
71 | (3) |
|
3.2.3 There is Plenty of Land Between the Antipodes |
|
|
74 | (1) |
|
3.2.4 Assemblies of General-Purpose and Dedicated Processing Units |
|
|
75 | (1) |
|
3.2.5 Host Computer with Helper Engines |
|
|
76 | (1) |
|
3.2.6 Application-Specific Instruction set Processors |
|
|
77 | (2) |
|
3.2.7 Reconfigurable Computing |
|
|
79 | (2) |
|
3.2.8 Extendable Instruction set Processors |
|
|
81 | (1) |
|
3.2.9 Platform ICs (DSPP) |
|
|
82 | (1) |
|
|
83 | (4) |
|
3.3 Dedicated VLSI Architectures and How to Design Them |
|
|
87 | (11) |
|
3.3.1 There is Room for Remodeling in the Algorithmic Domain |
|
|
87 | (2) |
|
3.3.2 ...and there is Room in the Architectural Domain |
|
|
89 | (1) |
|
3.3.3 Systems Engineers and VLSI Designers Must Collaborate |
|
|
90 | (2) |
|
3.3.4 A Graph-Based Formalism for Describing Processing Algorithms |
|
|
92 | (2) |
|
3.3.5 The Isomorphic Architecture |
|
|
94 | (1) |
|
3.3.6 Relative Merits of Architectural Alternatives |
|
|
95 | (2) |
|
3.3.7 Computation Cycle Versus Clock Period |
|
|
97 | (1) |
|
3.4 Equivalence Transforms for Combinational Computations |
|
|
98 | (22) |
|
|
99 | (1) |
|
3.4.2 Iterative Decomposition |
|
|
100 | (3) |
|
|
103 | (5) |
|
|
108 | (2) |
|
|
110 | (6) |
|
3.4.6 Associativity Transform |
|
|
116 | (1) |
|
3.4.7 Other Algebraic Transforms |
|
|
117 | (1) |
|
|
118 | (2) |
|
3.5 Options for Temporary Storage of Data |
|
|
120 | (6) |
|
3.5.1 Data Access Patterns |
|
|
120 | (1) |
|
3.5.2 Available Memory Configurations and Area Occupation |
|
|
120 | (1) |
|
|
121 | (1) |
|
3.5.4 Wiring and the Costs of Going Off-Chip |
|
|
122 | (1) |
|
|
122 | (1) |
|
|
123 | (3) |
|
3.6 Equivalence Transforms for Non-Recursive Computations |
|
|
126 | (7) |
|
|
126 | (1) |
|
3.6.2 Pipelining Revisited |
|
|
127 | (3) |
|
3.6.3 Systolic Conversion |
|
|
130 | (1) |
|
3.6.4 Iterative Decomposition and Time Sharing Revisited |
|
|
130 | (1) |
|
3.6.5 Replication Revisited |
|
|
131 | (1) |
|
|
132 | (1) |
|
3.7 Equivalence Transforms for Recursive Computations |
|
|
133 | (15) |
|
3.7.1 The Feedback Bottleneck |
|
|
133 | (1) |
|
3.7.2 Unfolding of First-Order Loops |
|
|
134 | (3) |
|
|
137 | (2) |
|
|
139 | (1) |
|
3.7.5 Nonlinear or General Loops |
|
|
140 | (4) |
|
3.7.6 Pipeline Interleaving, not Quite an Equivalence Transform |
|
|
144 | (2) |
|
|
146 | (2) |
|
3.8 Generalizations of the Transform Approach |
|
|
148 | (12) |
|
3.8.1 Generalization to other Levels of Detail |
|
|
148 | (2) |
|
3.8.2 Bit-Serial Architectures |
|
|
150 | (2) |
|
3.8.3 Distributed Arithmetic |
|
|
152 | (3) |
|
3.8.4 Generalization to other Algebraic Structures |
|
|
155 | (5) |
|
|
160 | (1) |
|
|
160 | (8) |
|
|
160 | (3) |
|
3.9.2 The Grand Architectural Alternatives from an Energy Point of View |
|
|
163 | (2) |
|
3.9.3 A Guide to Evaluating Architectural Alternatives |
|
|
165 | (3) |
|
|
168 | (2) |
|
3.11 Appendix I: A Brief Glossary of Algebraic Structures |
|
|
170 | (4) |
|
3.12 Appendix II: Area and Delay Figures of VLSI Subfunctions |
|
|
174 | (5) |
Chapter 4 Circuit Modeling with Hardware Description Languages |
|
179 | (122) |
|
4.1 Motivation and Background |
|
|
179 | (7) |
|
4.1.1 Why Hardware Synthesis? |
|
|
179 | (1) |
|
|
179 | (1) |
|
4.1.3 Alternatives for Modeling Digital Hardware |
|
|
180 | (1) |
|
4.1.4 The Genesis of VHDL and SystemVerilog |
|
|
180 | (2) |
|
4.1.5 Why Bother Learning Hardware Description Languages? |
|
|
182 | (2) |
|
4.1.6 A First Look at VHDL and SystemVerilog |
|
|
184 | (2) |
|
4.2 Key Concepts and Constructs of VHDL |
|
|
186 | (48) |
|
4.2.1 Circuit Hierarchy and Connectivity |
|
|
186 | (4) |
|
4.2.2 Interacting Concurrent Processes |
|
|
190 | (8) |
|
4.2.3 A Discrete Replacement for Electrical Signals |
|
|
198 | (8) |
|
4.2.4 An Event-Driven Scheme of Execution |
|
|
206 | (12) |
|
4.2.5 Facilities for Model Parametrization |
|
|
218 | (8) |
|
4.2.6 Concepts Borrowed from Programming Languages |
|
|
226 | (8) |
|
4.3 Key Concepts and Constructs of SystemVerilog |
|
|
234 | (28) |
|
4.3.1 Circuit Hierarchy and Connectivity |
|
|
234 | (3) |
|
4.3.2 Interacting Concurrent Processes |
|
|
237 | (6) |
|
4.3.3 A Discrete Replacement for Electrical Signals |
|
|
243 | (6) |
|
4.3.4 An Event-Driven Scheme of Execution |
|
|
249 | (5) |
|
4.3.5 Facilities for Model Parametrization |
|
|
254 | (3) |
|
4.3.6 Concepts Borrowed from Programming Languages |
|
|
257 | (5) |
|
4.4 Automatic Circuit Synthesis From HDL Models |
|
|
262 | (22) |
|
|
262 | (1) |
|
|
263 | (1) |
|
4.4.3 Finite State Machines and Sequential Subcircuits in General |
|
|
263 | (9) |
|
4.4.4 RAM and ROM Macrocells |
|
|
272 | (3) |
|
|
275 | (6) |
|
4.4.6 Limitations and Caveats |
|
|
281 | (1) |
|
4.4.7 How to Establish a Register Transfer Level Model Step by Step |
|
|
282 | (2) |
|
|
284 | (2) |
|
|
286 | (3) |
|
4.7 Appendix I: VHDL and SystemVerilog Side by Side |
|
|
289 | (4) |
|
4.8 Appendix II: VHDL Extensions and Standards |
|
|
293 | (8) |
|
4.8.1 Protected Shared Variables IEEE 1076a |
|
|
293 | (1) |
|
4.8.2 The Analog and Mixed-Signal Extension IEEE 1076.1 |
|
|
294 | (2) |
|
4.8.3 Mathematical Packages for Real and Complex Numbers IEEE 1076.2 |
|
|
296 | (1) |
|
4.8.4 The Arithmetic Packages IEEE 1076.3 |
|
|
296 | (1) |
|
4.8.5 The Standard Delay Format (SDF) IEEE 1497 |
|
|
297 | (1) |
|
4.8.6 A Handy Compilation of Type Conversion Functions |
|
|
298 | (2) |
|
|
300 | (1) |
Chapter 5 Functional Verification |
|
301 | (56) |
|
5.1 Goals of Design Verification |
|
|
301 | (2) |
|
|
302 | (1) |
|
5.2 How to Establish Valid Functional Specifications |
|
|
303 | (4) |
|
5.2.1 Formal Specification |
|
|
304 | (1) |
|
|
304 | (2) |
|
5.2.3 Hardware-Assisted Verification |
|
|
306 | (1) |
|
5.3 Preparing Effective Simulation and Test Vectors |
|
|
307 | (24) |
|
5.3.1 A First Glimpse at VLSI Testing |
|
|
307 | (1) |
|
5.3.2 Fully Automated Response Checking is a Must |
|
|
308 | (2) |
|
5.3.3 Assertion-Based Verification Checks from Within |
|
|
310 | (5) |
|
5.3.4 Exhaustive Verification Remains an Elusive Goal |
|
|
315 | (1) |
|
5.3.5 Directed Verification is Indispensable but has its Limitations |
|
|
316 | (6) |
|
5.3.6 Directed Random Verification Guards Against Human Omissions |
|
|
322 | (5) |
|
5.3.7 Statistical Coverage Analysis Produces Meaningful Metrics |
|
|
327 | (1) |
|
5.3.8 Collecting Test Cases from Multiple Sources Helps |
|
|
328 | (1) |
|
5.3.9 Separating Test Development from Circuit Design Helps |
|
|
329 | (2) |
|
5.4 Consistency and Efficiency Considerations |
|
|
331 | (10) |
|
5.4.1 A Coherent Schedule for Simulation and Test |
|
|
332 | (3) |
|
5.4.2 Protocol Adapters Help Reconcile Different Views on Data and Latency |
|
|
335 | (3) |
|
5.4.3 Calculating High-Level Figures of Merit |
|
|
338 | (1) |
|
5.4.4 Patterning Simulation Set-Ups after the Target System |
|
|
339 | (1) |
|
|
340 | (1) |
|
5.4.6 Trimming Run Times by Skipping Redundant Simulation Sequences |
|
|
340 | (1) |
|
5.5 Testbench Coding and HDL Simulation |
|
|
341 | (5) |
|
5.5.1 Modularity and Reuse are the Keys to Testbench Design |
|
|
341 | (1) |
|
5.5.2 Anatomy of a File-Based Testbench |
|
|
342 | (4) |
|
|
346 | (1) |
|
|
347 | (3) |
|
5.8 Appendix I: Formal Approaches to Functional Verification |
|
|
350 | (2) |
|
5.9 Appendix II: Deriving a Coherent Schedule for Simulation and Test |
|
|
352 | (5) |
Chapter 6 The Case for Synchronous Design |
|
357 | (34) |
|
|
357 | (2) |
|
6.2 The Grand Alternatives for Regulating State Changes |
|
|
359 | (5) |
|
6.2.1 Synchronous Clocking |
|
|
360 | (1) |
|
6.2.2 Asynchronous Clocking |
|
|
360 | (1) |
|
6.2.3 Self-Timed Clocking |
|
|
361 | (3) |
|
6.3 Why a Rigorous Approach to Clocking is Essential in VLSI |
|
|
364 | (6) |
|
6.3.1 The Perils of Hazards |
|
|
364 | (1) |
|
6.3.2 The Pros and Cons of Synchronous Clocking |
|
|
365 | (2) |
|
6.3.3 Clock-as-Clock-Can is not an Option in VLSI |
|
|
367 | (1) |
|
6.3.4 Fully Self-Timed Clocking is not Normally an Option Either |
|
|
368 | (1) |
|
6.3.5 Hybrid Approaches to System Clocking |
|
|
368 | (2) |
|
6.4 The Dos and Donts of Synchronous Circuit Design |
|
|
370 | (10) |
|
6.4.1 First Guiding Principle: Dissociate Signal Classes! |
|
|
370 | (1) |
|
6.4.2 Second Guiding Principle: Allow for Circuits to Settle Before Clocking! |
|
|
371 | (1) |
|
6.4.3 Synchronous Design Rules at a More Detailed Level |
|
|
372 | (8) |
|
|
380 | (1) |
|
|
381 | (1) |
|
6.7 Appendix: On Identifying Signals |
|
|
382 | (9) |
|
|
382 | (2) |
|
|
384 | (1) |
|
6.7.3 Signaling Waveforms |
|
|
385 | (1) |
|
6.7.4 Three-State Capability |
|
|
386 | (1) |
|
6.7.5 Inputs, Outputs and Bidirectional Ports |
|
|
386 | (1) |
|
6.7.6 Present State vs. Next State |
|
|
387 | (1) |
|
6.7.7 Signal Naming Convention Syntax |
|
|
387 | (1) |
|
6.7.8 Usage of Upper and Lower Case Letters in HDL Source Code |
|
|
388 | (1) |
|
6.7.9 A Note on the Portability of Names Across EDA Platforms |
|
|
389 | (2) |
Chapter 7 Clocking of Synchronous Circuits |
|
391 | (54) |
|
7.1 What is the Difficulty With Clock Distribution? |
|
|
391 | (3) |
|
|
392 | (1) |
|
7.1.2 Timing Quantities Related to Clock Distribution |
|
|
393 | (1) |
|
7.2 How Much Skew and Jitter Does a Circuit Tolerate? |
|
|
394 | (22) |
|
|
394 | (2) |
|
7.2.2 Single-Edge-Triggered One-Phase Clocking |
|
|
396 | (6) |
|
7.2.3 Dual-Edge-Triggered One-Phase Clocking |
|
|
402 | (2) |
|
7.2.4 Symmetric Level-Sensitive Two-Phase Clocking |
|
|
404 | (3) |
|
7.2.5 Unsymmetric Level-Sensitive Two-Phase Clocking |
|
|
407 | (4) |
|
7.2.6 Single-Wire Level-Sensitive Two-Phase Clocking |
|
|
411 | (1) |
|
7.2.7 Level-Sensitive One-Phase Clocking and Wave Pipelining |
|
|
412 | (4) |
|
7.3 How to Keep Clock Skew Within Tight Bounds |
|
|
416 | (7) |
|
|
416 | (1) |
|
7.3.2 Collective Clock Buffers |
|
|
417 | (2) |
|
7.3.3 Distributed Clock Buffer Trees |
|
|
419 | (2) |
|
7.3.4 Hybrid Clock Distribution Networks |
|
|
421 | (1) |
|
7.3.5 Clock Skew Analysis |
|
|
421 | (2) |
|
7.4 How to Achieve Friendly Input/Output Timing |
|
|
423 | (9) |
|
7.4.1 Friendly as Opposed to Unfriendly I/0 Timing |
|
|
423 | (1) |
|
7.4.2 Impact of Clock Distribution Delay on I/0 Timing |
|
|
424 | (2) |
|
7.4.3 Impact of PTV Variations on I/0 Timing |
|
|
426 | (1) |
|
7.4.4 Registered Inputs and Outputs |
|
|
427 | (1) |
|
7.4.5 Adding Artificial Contamination Delay to Data Inputs |
|
|
427 | (1) |
|
7.4.6 Driving Input Registers From an Early Clock |
|
|
428 | (1) |
|
7.4.7 Clock Tapped From Slowest Component in Clock Domain |
|
|
428 | (1) |
|
7.4.8 "Zero-Delay" Clock Distribution by Way of a DLL or PLL |
|
|
429 | (3) |
|
7.5 How to Implement Clock Gating Properly |
|
|
432 | (6) |
|
7.5.1 Traditional Feedback-Type Registers with Enable |
|
|
432 | (1) |
|
7.5.2 A Crude and Unsafe Approach to Clock Gating |
|
|
433 | (1) |
|
7.5.3 A Simple Clock Gating Scheme that May Work Under Certain Conditions |
|
|
434 | (1) |
|
7.5.4 Safe Clock Gating Schemes |
|
|
434 | (4) |
|
|
438 | (3) |
|
|
441 | (4) |
Chapter 8 Acquisition of Asynchronous Data |
|
445 | (28) |
|
|
445 | (2) |
|
8.2 Data Consistency in Vectored Acquisition |
|
|
447 | (10) |
|
8.2.1 Plain Bit-Parallel Synchronization |
|
|
447 | (1) |
|
8.2.2 Unit-Distance Coding |
|
|
448 | (1) |
|
8.2.3 Suppression of Jumbled Data Patterns |
|
|
449 | (1) |
|
|
450 | (3) |
|
8.2.5 Partial Handshaking |
|
|
453 | (1) |
|
|
454 | (3) |
|
8.3 Data Consistency in Scalar Acquisition |
|
|
457 | (3) |
|
8.3.1 No Synchronization Whatsoever |
|
|
457 | (1) |
|
8.3.2 Synchronization at Multiple Places |
|
|
457 | (1) |
|
8.3.3 Synchronization at a Single Place |
|
|
458 | (1) |
|
8.3.4 Synchronization From a Slow Clock |
|
|
458 | (2) |
|
8.4 Marginal Triggering and Metastability |
|
|
460 | (10) |
|
8.4.1 Metastability and How it Becomes Manifest |
|
|
460 | (3) |
|
8.4.2 Repercussions on Circuit Functioning |
|
|
463 | (1) |
|
8.4.3 A Statistical Model for Estimating Synchronizer Reliability |
|
|
464 | (2) |
|
8.4.4 Plesiochronous Interfaces |
|
|
466 | (1) |
|
8.4.5 Containment of Metastable Behavior |
|
|
466 | (4) |
|
|
470 | (1) |
|
|
471 | (2) |
Appendix A Elementary Digital Electronics |
|
473 | (50) |
|
|
473 | (5) |
|
A.1.1 Common Number Representation Schemes |
|
|
473 | (2) |
|
A.1.2 Floating Point Number Formats |
|
|
475 | (2) |
|
A.1.3 Notational Conventions for Two-Valued Logic |
|
|
477 | (1) |
|
A.2 Theoretical Background of Combinational Logic |
|
|
478 | (13) |
|
|
478 | (1) |
|
|
479 | (1) |
|
|
479 | (1) |
|
|
479 | (1) |
|
|
480 | (2) |
|
|
482 | (1) |
|
|
483 | (1) |
|
A.2.8 Symmetric and Monotone Functions |
|
|
484 | (1) |
|
A.2.9 Threshold Functions |
|
|
485 | (1) |
|
A.2.10 Complete Gate Sets |
|
|
485 | (1) |
|
A.2.11 Multi-Output Functions |
|
|
486 | (1) |
|
A.2.12 Logic Minimization |
|
|
487 | (4) |
|
A.3 Circuit Alternatives for Implementing Combinational Logic |
|
|
491 | (5) |
|
|
491 | (1) |
|
A.3.2 Programmable Logic Array (PLA) |
|
|
491 | (2) |
|
A.3.3 Read-Only Memory (ROM) |
|
|
493 | (1) |
|
|
493 | (1) |
|
|
494 | (2) |
|
A.4 Bistables and Other Memory Circuits |
|
|
496 | (12) |
|
A.4.1 Flip-Flops or Edge-Triggered Bistables |
|
|
497 | (3) |
|
A.4.2 Latches or Level-Sensitive Bistables |
|
|
500 | (1) |
|
A.4.3 Unclocked Bistables |
|
|
501 | (5) |
|
A.4.4 Random Access Memories (RAM) |
|
|
506 | (2) |
|
A.5 Transient Behavior of Logic Circuits |
|
|
508 | (5) |
|
A.5.1 Glitches, a Phenomenological Perspective |
|
|
508 | (1) |
|
A.5.2 Function Hazards, a Circuit-Independent Mechanism |
|
|
509 | (1) |
|
A.5.3 Logic Hazards, a Circuit-Dependent Mechanism |
|
|
510 | (2) |
|
|
512 | (1) |
|
|
513 | (6) |
|
A.6.1 Delay Parameters Serve for Combinational and Sequential Circuits |
|
|
513 | (2) |
|
A.6.2 Timing Conditions Get Imposed by Sequential Circuits Only |
|
|
515 | (2) |
|
A.6.3 Secondary Timing Quantities are Derived From Primary Ones |
|
|
517 | (1) |
|
A.6.4 Timing Constraints Address Synthesis Needs |
|
|
518 | (1) |
|
A.7 Basic Microprocessor Input/Output Transfer Protocols |
|
|
519 | (2) |
|
|
521 | (2) |
Appendix B Finite State Machines |
|
523 | (20) |
|
|
523 | (11) |
|
|
524 | (1) |
|
|
525 | (1) |
|
|
526 | (1) |
|
B.1.4 Relationships Between Finite State Machine Models |
|
|
527 | (4) |
|
B.1.5 Taxonomy of Finite State Machines |
|
|
531 | (1) |
|
|
532 | (2) |
|
B.2 Practical Aspects and Implementation Issues |
|
|
534 | (8) |
|
B.2.1 Parasitic States and Symbols |
|
|
534 | (2) |
|
B.2.2 Mealy-, Moore-, Medvedev-Type, and Combinational Output Bits |
|
|
536 | (1) |
|
B.2.3 Through Paths and Logic Instability |
|
|
537 | (1) |
|
|
538 | (1) |
|
|
539 | (3) |
|
|
542 | (1) |
Appendix C Symbols and Constants |
|
543 | (10) |
|
|
543 | (1) |
|
|
544 | (4) |
|
C.3 Physical and Material Constants |
|
|
548 | (5) |
Bibliography |
|
553 | (12) |
Index |
|
565 | |