Search and Find
Service
Contents
8
Preface
20
Acknowledgments
22
CHAPTER 1 Introduction
23
Background
25
What is Functional Verification?
26
Why Focus on C++?
26
A Tour of the Handbook
27
For Further Reading
28
Part I: C++ and Verification (The Why and How)
29
CHAPTER 2 Why C++?
31
Overview
32
C++: A Good Verification Language
33
A Look at Hardware-Verification Languages
35
Main Benefits of Using C++
37
Other Benefits of Using C++
38
Drawbacks of Using C++
39
For Further Reading
39
CHAPTER 3 OOP, C++, and Verification
41
Overview
42
The Evolution of OOP and C++
43
The Evolution of Functional Verification
47
OOP Using C++
51
Summary
63
For Further Reading
63
CHAPTER 4 A Layered Approach
65
Overview
66
A Whiteboard Drawing
68
The “Common-Currency” Components
70
The Interface Layer in Detail
71
The Top-Layer Components
76
What is a Test?
78
The Test Component
80
The Test Irritator
82
A Complete Test
83
Summary
85
For Further Reading
85
Part II: An Open-Source Environment with C++
87
CHAPTER 5 Teal Basics
89
Overview
90
Teal’s Main Components
93
Using Teal
95
Logging Output
98
Using Test Parameters
101
Accessing Memory
103
Constrained Random Numbers
106
Working with Simulation Events and Concurrency
108
Summary
110
For Further Reading
110
CHAPTER 6 Truss: A Standard Verification Framework
113
Overview
114
General Considerations
115
Major Classes and Their Roles
117
The verification_component Abstract Base Class
121
Detailed Responsibilities of the Major Components
122
Test Component and Irritator Classes
128
Summary
135
CHAPTER 7 Truss Flow
137
Overview
138
About verification_top.cpp
138
The Test Component Dance
141
The Irritator Dance
143
Compiling and Running Tests
144
The First Test: A Directed Test
147
The Second Test: Adding Channels and Random Parameters
149
The Remaining Tests: Mix-and-Match Test Components
158
Summary
159
CHAPTER 8 Truss Example
161
Overview
162
Directory Structure
162
Theory of Operation
164
Running the Simple ALU Example
166
Points of Interest
166
Power-on Reset
167
Driver and Monitor Protocol
168
The alu_test_component
169
Checking the Chip
169
Completing the Test
171
Summary
172
Part III: Using OOP for Verification (Best Practices)
175
CHAPTER 9 Thinking OOP
177
Overview
178
Sources of Complexity
179
Creating Adaptable Code
188
Architectural Considerations to Maximize Adaptability
190
Separating Interface from Implementation
192
Interface, Implementation, and Base Classes
193
Summary
195
For Further Reading
195
CHAPTER 10 Designing with OOP
197
Overview
198
Keeping the Abstraction Level Consistent
198
Using “Correct by Construction”
200
The Value of Namespaces
203
Data Duplication—A Necessary Evil
205
Designing Well, Optimizing Only When Necessary
206
Using the Interface, Only the Interface
207
Verification Close to the Programming Model
208
The Three Parts of Checking
209
Separating the Test from the Testbench
211
Summary
212
For Further Reading
213
CHAPTER 11 OOP Classes
215
Overview
216
Defining Classes
217
How Much Electricity?
217
Global Services
220
Class Instance Identifiers
225
Class Inheritance for Reuse
227
Class Inheritance for Interfaces
229
Operator Overloading for Common-Currency Classes
232
Creating Classes—What the Compiler Will Do for You
234
Advanced Class Techniques
236
Summary
237
For Further Reading
238
CHAPTER 12 OOP Connections
239
Overview
240
How Tight a Connection?
241
Types of Connections
243
Two Tight Connection Techniques
245
Threads and Connections
248
Fancier Connections
251
Summary
255
For Further Reading
256
CHAPTER 13 Coding OOP
257
Overview
258
“If” Tests—A Necessary Evil
258
Coding Tricks
266
Coding Idioms
270
Enumeration for Data, Integer for Interface
275
What’s in a Name?
279
Coding with Style
281
Using Templates
286
Summary
290
For Further Reading
291
Part IV: Examples (Putting It All Together)
293
CHAPTER 14 Block Level Testing
295
Overview
296
Theory of Operation
297
Running the UART Example
301
Points of Interest
302
Configuration
302
Configuring the Chip
308
Traffic Generation
312
The Checker
315
Connecting It All Together
318
More Tests
326
Summary
326
CHAPTER 15 Chip Level Testing
329
Overview
330
Theory of Operation
330
Running the UART Example
332
The quad_test_components Test
332
The quad_uart_irritators Test
334
The quad_uart_vectors Test
339
The uart_test_0 Test
341
Summary
341
CHAPTER 16 Things to Remember
343
Part I: Use C++ and Layers!
344
Part II: An Open-Source Approach
344
Part III: OOP—Best Practices
345
Part IV: Examples—Copy and Adapt!
346
Conclusion to the Conclusion
347
Index
349
All prices incl. VAT