xix
Contents
5.6 Creating New Objects .................................................................... 135
5.6.1 Handles and Constructing Objects ................................... 135
5.6.2 Custom Constructor ......................................................... 136
5.6.3 Separating the Declaration and Construction ................... 137
5.6.4 The Difference Between New() and New[] ..................... 138
5.6.5 Getting a Handle on Objects ............................................ 138
5.7 Object Deallocation ........................................................................ 139
5.8 Using Objects ................................................................................. 140
5.9 Class Methods ................................................................................ 141
5.10 Defi ning Methods Outside of the Class ......................................... 142
5.11 Static Variables vs. Global Variables .............................................. 143
5.11.1 A Simple Static Variable .................................................. 143
5.11.2 Accessing Static Variables Through the Class Name ....... 144
5.11.3 Initializing Static Variables .............................................. 145
5.11.4 Static Methods .................................................................. 145
5.12 Scoping Rules................................................................................. 146
5.12.1 What is
This? ................................................................ 148
5.13 Using One Class Inside Another .................................................... 149
5.13.1 How Big or Small Should My Class Be? ......................... 151
5.13.2 Compilation Order Issue .................................................. 151
5.14 Understanding Dynamic Objects ................................................... 152
5.14.1 Passing Objects and Handles to Methods ........................ 152
5.14.2 Modifying a Handle in a Task .......................................... 153
5.14.3 Modifying Objects in Flight ............................................. 154
5.14.4 Arrays of Handles ............................................................ 155
5.15 Copying Objects ............................................................................. 156
5.15.1 Copying an Object with the New Operator ....................... 156
5.15.2 Writing Your Own Simple Copy Function ....................... 158
5.15.3 Writing a Deep Copy Function ........................................ 159
5.15.4 Packing Objects to and from Arrays Using
Streaming Operators......................................................... 161
5.16 Public vs. Local .............................................................................. 162
5.17 Straying Off Course ....................................................................... 163
5.18 Building a Testbench ...................................................................... 163
5.19 Conclusion...................................................................................... 164
5.20 Exercises ........................................................................................ 165
6 Randomization ........................................................................................ 169
6.1 Introduction .................................................................................... 169
6.2 What to Randomize ........................................................................ 170
6.2.1 Device Confi guration ....................................................... 170
6.2.2 Environment Confi guration .............................................. 171
6.2.3 Primary Input Data ........................................................... 171
6.2.4 Encapsulated Input Data .................................................. 171
6.2.5 Protocol Exceptions, Errors, and Violations .................... 172
6.2.6 Delays ............................................................................... 172