Acknowledgments |
|
xi | |
Introduction |
|
xv | |
Chapter 1 Programmatic and System-Level Considerations |
|
1 | (52) |
|
1.1 Introduction: SensorsThink |
|
|
1 | (1) |
|
1.2 Product Development Stages |
|
|
2 | (3) |
|
1.3 Product Development Stages: Tailoring |
|
|
5 | (1) |
|
1.4 Product Development: After Launch |
|
|
6 | (1) |
|
|
7 | (9) |
|
|
10 | (2) |
|
1.5.2 SensorsThink: Product Requirements |
|
|
12 | (1) |
|
1.5.3 Creating Useful Requirements |
|
|
13 | (3) |
|
1.5.4 Requirements: Finishing Up |
|
|
16 | (1) |
|
|
16 | (17) |
|
1.6.1 SEBoK: An Invaluable Resource |
|
|
17 | (3) |
|
1.6.2 SensorsThink: Back to the Journey |
|
|
20 | (1) |
|
1.6.3 Systems Engineering: An Overview |
|
|
21 | (2) |
|
1.6.4 Architecting the System, Logically |
|
|
23 | (1) |
|
1.6.5 Keep Things in Context (Diagrams) |
|
|
24 | (2) |
|
1.6.6 Monitor Your Activity (Diagrams) |
|
|
26 | (2) |
|
1.6.7 Know the Proper Sequence (Diagrams) |
|
|
28 | (1) |
|
1.6.8 Architecting the System Physically |
|
|
28 | (1) |
|
1.6.9 Physical Architecture: Playing with Blocks |
|
|
29 | (2) |
|
|
31 | (1) |
|
1.6.11 System Verification and Validation: Check Your Work |
|
|
32 | (1) |
|
|
33 | (5) |
|
|
33 | (1) |
|
1.7.2 Engineering Budgets: Some Examples |
|
|
34 | (4) |
|
1.7.3 Engineering Budgets: Finishing Up |
|
|
38 | (1) |
|
1.8 Interface Control Documents |
|
|
38 | (4) |
|
1.8.1 Sticking Together: Signal Grouping |
|
|
39 | (2) |
|
1.8.2 Playing with Legos: Connectorization |
|
|
41 | (1) |
|
1.8.3 Talking Among Yourselves: Internal ICDs |
|
|
42 | (1) |
|
|
42 | (5) |
|
|
43 | (1) |
|
1.9.2 How Much Testing Is Enough? |
|
|
43 | (1) |
|
1.9.3 Safely Navigating the World of Testing |
|
|
44 | (1) |
|
1.9.4 A Deeper Dive into Derivation (of Test Cases) |
|
|
45 | (2) |
|
1.10 Engineering Governance |
|
|
47 | (3) |
|
1.10.1 Not Just Support for Design Reviews |
|
|
48 | (1) |
|
1.10.2 Engineering Rule Sets |
|
|
48 | (1) |
|
|
49 | (1) |
|
|
49 | (1) |
|
|
50 | (3) |
Chapter 2 Hardware Design Considerations |
|
53 | (70) |
|
|
53 | (13) |
|
2.1.1 Key Component Identification for the SoC Platform |
|
|
53 | (4) |
|
2.1.2 Key Component Selection Example: The SoC |
|
|
57 | (6) |
|
2.1.3 Key Component Selection Example: Infrared Sensor |
|
|
63 | (2) |
|
2.1.4 Key Component Selection: Finishing Up |
|
|
65 | (1) |
|
2.2 Hardware Architecture |
|
|
66 | (6) |
|
2.2.1 Hardware Architecture for the SoC Platform |
|
|
66 | (4) |
|
2.2.2 Hardware Architecture: Interfaces |
|
|
70 | (2) |
|
2.2.3 Hardware Architecture: Data Flows |
|
|
72 | (1) |
|
2.2.4 Hardware Architecture: Finishing Up |
|
|
72 | (1) |
|
|
72 | (6) |
|
2.3.1 What to Worry About |
|
|
73 | (1) |
|
2.3.2 Power Supply Analysis, Architecture, and Simulation |
|
|
73 | (1) |
|
2.3.3 Processor and FPGA Pinout Assignments |
|
|
74 | (1) |
|
2.3.4 System Clocking Requirements |
|
|
75 | (1) |
|
2.3.5 System Reset Requirements |
|
|
75 | (1) |
|
2.3.6 System Programming Scheme |
|
|
75 | (1) |
|
|
76 | (1) |
|
2.3.8 Example: Zynq Power Sequence Requirements |
|
|
76 | (2) |
|
2.4 Decoupling Your Components |
|
|
78 | (4) |
|
2.4.1 Decoupling: By the Book |
|
|
78 | (1) |
|
2.4.2 To Understand the Component, You Must Be the Component |
|
|
78 | (1) |
|
2.4.3 Types of Decoupling |
|
|
79 | (1) |
|
2.4.4 Example: Zynq-7000 Decoupling |
|
|
80 | (1) |
|
2.4.5 Additional Thoughts: Specialized Decoupling |
|
|
81 | (1) |
|
2.4.6 Additional Thoughts: Simulation |
|
|
81 | (1) |
|
2.5 Connect with Your System |
|
|
82 | (5) |
|
2.5.1 Contemplating Connectors |
|
|
82 | (1) |
|
2.5.2 Example: System Communications |
|
|
83 | (4) |
|
2.6 Extend the Life of the System: De-Rate |
|
|
87 | (3) |
|
|
87 | (1) |
|
2.6.2 What Can Be De-Rated? |
|
|
87 | (2) |
|
2.6.3 Example: De-Rating the Zynq-7000 |
|
|
89 | (1) |
|
2.6.4 Additional Thoughts: Exceptions to the Rule |
|
|
89 | (1) |
|
|
90 | (7) |
|
2.7.1 Back to Basics: Pre-Power-On Checklist |
|
|
90 | (3) |
|
2.7.2 Check for Signs of Life: Crawl Before Walking |
|
|
93 | (1) |
|
2.7.3 Roll Up Your Sleeves and Get Ready to Run |
|
|
94 | (1) |
|
2.7.4 Example: I2C Interface |
|
|
95 | (2) |
|
2.7.5 Additional Thoughts |
|
|
97 | (1) |
|
2.8 Integrity: Important for Electronics |
|
|
97 | (7) |
|
|
98 | (1) |
|
|
98 | (1) |
|
2.8.3 Digging Deeper into Power Integrity |
|
|
99 | (1) |
|
2.8.4 Digging Deeper into Signal Integrity |
|
|
100 | (2) |
|
2.8.5 Example: ULPI Pre-Layout Analysis |
|
|
102 | (2) |
|
2.8.6 Suggested Additional Reading |
|
|
104 | (1) |
|
2.9 PCB Layout: Not for the Faint of Heart |
|
|
104 | (16) |
|
|
106 | (2) |
|
|
108 | (2) |
|
2.9.3 Mechanical Constraints |
|
|
110 | (1) |
|
2.9.4 Electrical Constraints |
|
|
111 | (2) |
|
|
113 | (6) |
|
|
119 | (1) |
|
|
120 | (3) |
Chapter 3 FPGA Design Considerations |
|
123 | (76) |
|
|
123 | (1) |
|
3.2 FPGA Development Process |
|
|
124 | (6) |
|
3.2.1 Introduction to the Target Device |
|
|
126 | (1) |
|
|
127 | (2) |
|
|
129 | (1) |
|
3.3 Accelerating Design Using IP Libraries |
|
|
130 | (1) |
|
3.4 Pin Planning and Constraints |
|
|
131 | (9) |
|
3.4.1 Physical Constraints |
|
|
134 | (3) |
|
|
137 | (1) |
|
|
138 | (1) |
|
3.4.4 Physical Constraints: Placement |
|
|
139 | (1) |
|
3.5 Clock Domain Crossing |
|
|
140 | (3) |
|
3.6 Test Bench and Verification |
|
|
143 | (5) |
|
3.6.1 What Is Verification? |
|
|
143 | (1) |
|
3.6.2 Self-Checking Test Benches |
|
|
144 | (1) |
|
3.6.3 Corner Cases, Boundary Conditions, and Stress Testing |
|
|
145 | (1) |
|
|
146 | (1) |
|
3.6.5 Test Functions and Procedures |
|
|
146 | (1) |
|
|
147 | (1) |
|
3.6.7 Using Text IO Files |
|
|
147 | (1) |
|
3.6.8 What Else Might We Consider? |
|
|
148 | (1) |
|
3.7 Finite State Machine Design |
|
|
148 | (9) |
|
3.7.1 Defining a State Machine |
|
|
148 | (1) |
|
3.7.2 Algorithmic State Diagrams |
|
|
149 | (1) |
|
3.7.3 Moore or Mealy: What Should I Choose? |
|
|
149 | (1) |
|
3.7.4 Implementing the State Machine |
|
|
150 | (1) |
|
3.7.5 State Machine Encoding |
|
|
151 | (2) |
|
3.7.6 Increasing Performance of State Machines |
|
|
153 | (2) |
|
3.7.7 Good Design Practices for FPGA Implementation |
|
|
155 | (1) |
|
3.7.8 FLIR Lepton Interface |
|
|
155 | (2) |
|
3.8 Defensive State Machine Design |
|
|
157 | (5) |
|
|
157 | (2) |
|
|
159 | (1) |
|
3.8.3 Deadlock and Other Issues |
|
|
160 | (1) |
|
3.8.4 Implementing Defensive State Machines in Xilinx Devices |
|
|
161 | (1) |
|
3.9 How Does FPGA Do Math? |
|
|
162 | (1) |
|
3.9.1 Representation of Numbers |
|
|
162 | (1) |
|
3.10 Fixed Point Mathematics |
|
|
163 | (7) |
|
|
164 | (2) |
|
|
166 | (1) |
|
3.10.3 Real-World Implementation |
|
|
167 | (2) |
|
3.10.4 RTL Implementation |
|
|
169 | (1) |
|
3.11 Polynomial Approximation |
|
|
170 | (3) |
|
3.11.1 The Challenge with Some Algorithms |
|
|
171 | (1) |
|
3.11.2 Capitalize on FPGA Resources |
|
|
172 | (1) |
|
3.11.3 Multiple Trend Lines Selected by Input Value |
|
|
173 | (1) |
|
3.12 The CORDIC Algorithm |
|
|
173 | (3) |
|
|
176 | (1) |
|
3.14 Where Are These Used? |
|
|
176 | (1) |
|
|
176 | (1) |
|
3.16 Implementing the CORDIC |
|
|
177 | (2) |
|
3.17 Digital Filter Design and Implementation |
|
|
179 | (5) |
|
3.17.1 Filter Types and Topologies |
|
|
179 | (2) |
|
3.17.2 Frequency Response |
|
|
181 | (1) |
|
|
181 | (1) |
|
|
182 | (1) |
|
3.17.5 Windowing the Filter |
|
|
182 | (2) |
|
3.18 Fast Fourier Transforms |
|
|
184 | (1) |
|
3.18.1 Time or Frequency Domain? |
|
|
184 | (1) |
|
3.19 How Do We Get There? |
|
|
184 | (5) |
|
3.19.1 Where Do We Use These? |
|
|
186 | (1) |
|
3.19.2 FPGA-Based Implementation |
|
|
186 | (2) |
|
3.19.3 Higher-Speed Sampling |
|
|
188 | (1) |
|
3.20 Working with ADC and DAC |
|
|
189 | (4) |
|
3.20.1 ADC and DAC Key Parameters |
|
|
189 | (2) |
|
3.20.2 The Frequency Spectrum |
|
|
191 | (1) |
|
|
191 | (1) |
|
|
192 | (1) |
|
|
192 | (1) |
|
3.21 High-Level Synthesis |
|
|
193 | (6) |
Chapter 4 When Reliability Counts |
|
199 | (41) |
|
4.1 Introduction to Reliability |
|
|
199 | (2) |
|
4.2 Mathematical Interpretation of System Reliability |
|
|
201 | (9) |
|
|
202 | (1) |
|
|
202 | (2) |
|
4.2.3 Early Life Failure Rate |
|
|
204 | (1) |
|
|
205 | (1) |
|
4.2.5 Repairable and Nonrepairable Systems |
|
|
206 | (1) |
|
4.2.6 MTTF, MTBF, and MTTR |
|
|
206 | (2) |
|
|
208 | (1) |
|
|
209 | (1) |
|
4.3 Calculating System Reliability |
|
|
210 | (6) |
|
4.3.1 Scenario 1: All Critical Components Connected in Series |
|
|
212 | (3) |
|
4.3.2 Scenario 2: All Critical Components Connected in Parallel |
|
|
215 | (1) |
|
4.3.3 Scenario 3: All Critical Components Are Connected in Series-Parallel Configuration |
|
|
216 | (1) |
|
4.4 Faults, Errors, and Failure |
|
|
216 | (5) |
|
4.4.1 Classification of Faults |
|
|
218 | (1) |
|
4.4.2 Fault Prevention Versus Fault Tolerance: Which One Can Address System Failure Better? |
|
|
219 | (2) |
|
4.5 Fault Tolerance Techniques |
|
|
221 | (6) |
|
4.5.1 Redundancy Technique for Hardware Fault Tolerance |
|
|
223 | (1) |
|
4.5.2 Software Fault Tolerance |
|
|
224 | (3) |
|
4.6 Worst-Case Circuit Analysis |
|
|
227 | (13) |
|
4.6.1 Sources of Variation |
|
|
230 | (3) |
|
4.6.2 Numerical Analysis Using SPICE Modeling |
|
|
233 | (7) |
Selected Bibliography |
|
240 | (1) |
About the Authors |
|
241 | (2) |
Index |
|
243 | |