| Foreword |
|
xv | |
| Preface to the Second Edition |
|
xvii | |
| Acknowledgements |
|
xxi | |
|
|
|
1 | (10) |
|
|
|
2 | (2) |
|
|
|
3 | (1) |
|
|
|
3 | (1) |
|
Virtual Socket Interface Alliance |
|
|
4 | (1) |
|
Design for Reuse: The Challenge |
|
|
4 | (3) |
|
|
|
5 | (1) |
|
|
|
5 | (1) |
|
|
|
6 | (1) |
|
Design Reuse: A Business Model |
|
|
7 | (4) |
|
Changing Roles in SoC Design |
|
|
7 | (1) |
|
Retooling Skills for New Roles |
|
|
7 | (1) |
|
Sources of IP for SoC Designs |
|
|
8 | (1) |
|
|
|
8 | (1) |
|
|
|
9 | (2) |
|
The System-on-a-Chip Design Process |
|
|
11 | (14) |
|
|
|
11 | (1) |
|
|
|
12 | (6) |
|
|
|
13 | (2) |
|
|
|
15 | (2) |
|
|
|
17 | (1) |
|
|
|
17 | (1) |
|
The Specification Problem |
|
|
18 | (2) |
|
Specification Requirements |
|
|
19 | (1) |
|
|
|
19 | (1) |
|
The System Design Process |
|
|
20 | (5) |
|
System-Level Design Issues: Rules and Tools |
|
|
25 | (28) |
|
|
|
25 | (4) |
|
|
|
27 | (1) |
|
The Role of Full Custom Design in Reuse |
|
|
28 | (1) |
|
Design for Timing Closure: Logic Design Issues |
|
|
29 | (7) |
|
Interfaces and Timing Closure |
|
|
29 | (4) |
|
Synchronous vs. Asynchronous Design Style |
|
|
33 | (1) |
|
|
|
34 | (1) |
|
|
|
35 | (1) |
|
Timing Exceptions and Multicycle Paths |
|
|
36 | (1) |
|
Design for Timing Closure: Physical Design Issues |
|
|
36 | (2) |
|
|
|
36 | (1) |
|
Synthesis Strategy and Timing Budgets |
|
|
36 | (1) |
|
|
|
37 | (1) |
|
|
|
37 | (1) |
|
Design for Verification: Verification Strategy |
|
|
38 | (1) |
|
System Interconnect and On-Chip Buses |
|
|
39 | (5) |
|
|
|
39 | (1) |
|
|
|
40 | (1) |
|
Reuse Issues and On-Chip Buses |
|
|
41 | (1) |
|
|
|
42 | (1) |
|
Design for Bring-Up and Debug: On-Chip Debug Structures |
|
|
43 | (1) |
|
|
|
44 | (5) |
|
Lowering the Supply Voltage |
|
|
44 | (1) |
|
Reducing Capacitance and Switching Activity |
|
|
45 | (3) |
|
Sizing and Other Synthesis Techniques |
|
|
48 | (1) |
|
|
|
48 | (1) |
|
Design for Test: Manufacturing Tests Strategies |
|
|
49 | (1) |
|
|
|
49 | (1) |
|
|
|
49 | (1) |
|
|
|
49 | (1) |
|
|
|
49 | (1) |
|
|
|
50 | (1) |
|
|
|
50 | (3) |
|
|
|
50 | (1) |
|
|
|
51 | (2) |
|
|
|
53 | (20) |
|
|
|
53 | (5) |
|
Contents of a Design Specification |
|
|
58 | (2) |
|
|
|
60 | (3) |
|
Top-Level Macro Design Process |
|
|
60 | (2) |
|
|
|
62 | (1) |
|
|
|
63 | (3) |
|
|
|
63 | (2) |
|
|
|
65 | (1) |
|
|
|
66 | (3) |
|
|
|
66 | (2) |
|
|
|
68 | (1) |
|
Soft Macro Productization |
|
|
69 | (4) |
|
|
|
69 | (2) |
|
|
|
71 | (2) |
|
|
|
73 | (54) |
|
Overview of the Coding Guidelines |
|
|
73 | (1) |
|
|
|
74 | (13) |
|
General Naming Conventions |
|
|
74 | (2) |
|
Naming Conventions for VITAL Support |
|
|
76 | (1) |
|
Architecture Naming Conventions |
|
|
77 | (1) |
|
Include Headers in Source Files |
|
|
77 | (2) |
|
|
|
79 | (1) |
|
Keep Commands on Separate Lines |
|
|
79 | (1) |
|
|
|
79 | (1) |
|
|
|
80 | (1) |
|
Do Not Use HDL Reserved Words |
|
|
81 | (1) |
|
|
|
81 | (1) |
|
Port Maps and Generic Maps |
|
|
82 | (1) |
|
VHDL Entity, Architecture, and Configuration Sections |
|
|
83 | (1) |
|
|
|
84 | (1) |
|
|
|
85 | (1) |
|
|
|
86 | (1) |
|
|
|
87 | (4) |
|
Use Only IEEE Standard Types |
|
|
87 | (1) |
|
Do Not Use Hard-Coded Numeric Values |
|
|
88 | (1) |
|
|
|
88 | (1) |
|
|
|
89 | (1) |
|
Avoid Embedding dc_shell Scripts |
|
|
89 | (1) |
|
Use Technology-Independent Libraries |
|
|
89 | (1) |
|
Coding For Translation (VHDL to Verilog) |
|
|
90 | (1) |
|
Guidelines for Clocks and Resets |
|
|
91 | (6) |
|
|
|
91 | (2) |
|
|
|
93 | (1) |
|
|
|
93 | (1) |
|
Avoid Internally Generated Clocks |
|
|
94 | (1) |
|
Gated Clocks and Low Power Designs |
|
|
94 | (2) |
|
Avoid Internally Generated Resets |
|
|
96 | (1) |
|
|
|
97 | (17) |
|
|
|
97 | (2) |
|
|
|
99 | (3) |
|
|
|
102 | (1) |
|
Avoid Combinational Feedback |
|
|
102 | (1) |
|
Specify Complete Sensitivity Lists |
|
|
103 | (2) |
|
Blocking and Nonblocking Assignments (Verilog) |
|
|
105 | (2) |
|
Signal vs. Variable Assignments (VHDL) |
|
|
107 | (1) |
|
Case Statements versus if-then-else Statements |
|
|
108 | (2) |
|
|
|
110 | (4) |
|
Partitioning for Synthesis |
|
|
114 | (9) |
|
|
|
114 | (1) |
|
Locate Related Combinational Logic in a Single Module |
|
|
115 | (1) |
|
Separate Modules That Have Different Design Goals |
|
|
116 | (2) |
|
|
|
118 | (1) |
|
Arithmetic Operators: Merging Resources |
|
|
118 | (1) |
|
Partitioning for Synthesis Runtime |
|
|
119 | (1) |
|
Avoid Point-to-Point Exceptions and False Paths |
|
|
120 | (1) |
|
Eliminate Glue Logic at the Top Level |
|
|
121 | (1) |
|
|
|
122 | (1) |
|
|
|
123 | (2) |
|
|
|
125 | (2) |
|
Macro Synthesis Guidelines |
|
|
127 | (18) |
|
Overview of the Synthesis Problem |
|
|
127 | (1) |
|
|
|
128 | (5) |
|
|
|
128 | (1) |
|
|
|
129 | (1) |
|
Synthesis in the Design Process |
|
|
129 | (1) |
|
Subblock Synthesis Process |
|
|
130 | (1) |
|
|
|
130 | (1) |
|
|
|
131 | (1) |
|
Preserve Clock and Reset Networks |
|
|
131 | (1) |
|
Code Checking Before Synthesis |
|
|
132 | (1) |
|
Code Checking After Synthesis |
|
|
132 | (1) |
|
High-Performance Synthesis |
|
|
133 | (1) |
|
|
|
133 | (1) |
|
High-Performance Synthesis |
|
|
134 | (1) |
|
|
|
134 | (1) |
|
RAM and Datapath Generators |
|
|
134 | (8) |
|
|
|
134 | (1) |
|
|
|
135 | (3) |
|
Design Flow Using Module Compiler |
|
|
138 | (2) |
|
|
|
140 | (1) |
|
Design Reuse with Datapath and RAM Compilers |
|
|
140 | (2) |
|
Coding Guidelines for Synthesis Scripts |
|
|
142 | (3) |
|
Macro Verification Guidelines |
|
|
145 | (26) |
|
Overview of Macro Verification |
|
|
145 | (7) |
|
|
|
146 | (1) |
|
|
|
147 | (4) |
|
|
|
151 | (1) |
|
|
|
151 | (1) |
|
|
|
152 | (1) |
|
|
|
152 | (1) |
|
Inspection as Verification |
|
|
152 | (2) |
|
|
|
154 | (1) |
|
|
|
155 | (14) |
|
|
|
155 | (1) |
|
|
|
156 | (3) |
|
|
|
159 | (1) |
|
Automated Response Checking |
|
|
160 | (1) |
|
Verification Suite Design |
|
|
161 | (5) |
|
|
|
166 | (3) |
|
|
|
169 | (2) |
|
|
|
171 | (28) |
|
|
|
171 | (2) |
|
Why and When to use Hard Macros |
|
|
172 | (1) |
|
Design Process for Hard vs. Soft Macros |
|
|
173 | (1) |
|
Design Issues for Hard Macros |
|
|
173 | (6) |
|
|
|
173 | (1) |
|
|
|
174 | (1) |
|
|
|
175 | (1) |
|
|
|
176 | (1) |
|
|
|
177 | (1) |
|
|
|
177 | (1) |
|
|
|
178 | (1) |
|
|
|
178 | (1) |
|
The Hard Macro Design Process |
|
|
179 | (2) |
|
Block Integration for Hard Macros |
|
|
181 | (1) |
|
Productization of Hard Macros |
|
|
181 | (5) |
|
|
|
181 | (3) |
|
|
|
184 | (1) |
|
|
|
185 | (1) |
|
|
|
185 | (1) |
|
Model Development for Hard Macros |
|
|
186 | (11) |
|
|
|
186 | (8) |
|
Synthesis and Floorplanning Models |
|
|
194 | (3) |
|
|
|
197 | (2) |
|
Macro Deployment: Packaging for Reuse |
|
|
199 | (8) |
|
Delivering the Complete Product |
|
|
199 | (6) |
|
|
|
200 | (2) |
|
|
|
202 | (2) |
|
|
|
204 | (1) |
|
Contents of the User Guide |
|
|
205 | (2) |
|
System Integration with Reusable Macros |
|
|
207 | (22) |
|
|
|
207 | (1) |
|
Integrating Macros into an SoC Design |
|
|
208 | (3) |
|
Problems in Integrating IP |
|
|
208 | (1) |
|
Strategies for Managing Interfacing Issues |
|
|
209 | (1) |
|
Interfacing Hard Macros to the Rest of the Design |
|
|
210 | (1) |
|
|
|
211 | (2) |
|
|
|
211 | (1) |
|
|
|
212 | (1) |
|
|
|
212 | (1) |
|
|
|
213 | (1) |
|
|
|
213 | (1) |
|
|
|
213 | (1) |
|
|
|
214 | (15) |
|
Design Planning to Initial Placement |
|
|
216 | (7) |
|
|
|
223 | (2) |
|
|
|
225 | (2) |
|
Verifying the Physical Design |
|
|
227 | (1) |
|
|
|
228 | (1) |
|
System-Level Verification Issues |
|
|
229 | (24) |
|
The Importance of Verification |
|
|
229 | (1) |
|
The Verification Strategy |
|
|
230 | (1) |
|
|
|
231 | (3) |
|
|
|
231 | (1) |
|
Data or Behavioral Verification |
|
|
232 | (2) |
|
|
|
234 | (1) |
|
|
|
234 | (3) |
|
Application-Based Verification |
|
|
237 | (3) |
|
FPGA and LPGA Prototyping |
|
|
238 | (1) |
|
|
|
239 | (1) |
|
|
|
239 | (1) |
|
|
|
240 | (4) |
|
|
|
240 | (2) |
|
|
|
242 | (1) |
|
Gate-Level Simulation with Unit-Delay Timing |
|
|
243 | (1) |
|
Gate-Level Simulation with Full Timing |
|
|
243 | (1) |
|
Specialized Hardware for System Verification |
|
|
244 | (9) |
|
Accelerated Verification Overview |
|
|
246 | (1) |
|
|
|
247 | (1) |
|
Software Driven Verification |
|
|
248 | (1) |
|
Traditional In-Circuit Verification |
|
|
248 | (1) |
|
Support for Intellectual Property |
|
|
249 | (1) |
|
Design Guidelines for Accelerated Verification |
|
|
249 | (1) |
|
Testbenches for Emulation |
|
|
249 | (4) |
|
Data and Project Management |
|
|
253 | (8) |
|
|
|
253 | (4) |
|
|
|
253 | (2) |
|
|
|
255 | (1) |
|
|
|
255 | (1) |
|
|
|
256 | (1) |
|
|
|
256 | (1) |
|
|
|
257 | (4) |
|
|
|
257 | (1) |
|
|
|
257 | (1) |
|
|
|
258 | (3) |
|
Implementing a Reuse Process |
|
|
261 | (16) |
|
Key Steps in Implementing a Reuse Process |
|
|
261 | (2) |
|
Managing the Transition to Reuse |
|
|
263 | (7) |
|
|
|
263 | (1) |
|
Key Elements in Reuse-Based Design |
|
|
263 | (2) |
|
|
|
265 | (5) |
|
Organizational Issues in Reuse |
|
|
270 | (5) |
|
|
|
272 | (1) |
|
|
|
272 | (1) |
|
|
|
273 | (1) |
|
|
|
274 | (1) |
|
Redesign for Reuse: Dealing with Legacy Designs |
|
|
275 | (2) |
|
|
|
275 | (1) |
|
|
|
275 | (1) |
|
|
|
276 | (1) |
|
Tools for Using Legacy Designs |
|
|
276 | (1) |
|
|
|
276 | (1) |
| Glossary |
|
277 | (2) |
| Bibliography |
|
279 | (2) |
| Index |
|
281 | |