IEEE 1800-2005
$264.33
IEEE Standard for SystemVerilog: Unified Hardware Design, Specification and Verification Language
Published By | Publication Date | Number of Pages |
IEEE | 2005 | 618 |
New IEEE Standard – Superseded. This standard represents a merger of two previous standards: IEEE 1364-2005 Verilog hardware description language (HDL) and IEEE 1800-2005 SystemVerilog unified hardware design, specification and verification language. The 2005 SystemVerilog standard defines extensions to the 2005 Verilog standard. These two standards were designed to be used as one language. Merging the base Verilog language and the SystemVerilog extensions into a single standard enables users to have all information regarding syntax and semantics in a single document.
PDF Catalog
PDF Pages | PDF Title |
---|---|
1 | IEEE P1800ā¢/D6(colored) Draft Standard for SystemVerilog: Unified Hardware Design, Specification and Verification Language |
13 | IEEE P1800/D6(colored) Draft Standard for SystemVerilog: Unified Hardware Design, Specification and Verification Language 1. Overview 1.1 Scope 1.2 Purpose |
15 | 1.3 Conventions used in this standard 1.4 Syntactic description |
16 | 1.5 Use of color in this document 1.6 Contents of this document |
19 | 1.7 Examples 1.8 Prerequisites |
20 | 2. Normative References |
21 | 3. Literal Values 3.1 Introduction 3.2 Literal value syntax 3.3 Integer and logic literals |
22 | 3.4 Real literals 3.5 Time literals 3.6 String literals |
23 | 3.7 Array literals 3.8 Structure literals |
25 | 4. Data Types 4.1 Introduction |
26 | 4.2 Data type syntax |
27 | 4.3 Integer data types 4.3.1 Integral types 4.3.2 2-state (two-value) and 4-state (four-value) data types 4.3.3 Signed and unsigned data types |
28 | 4.4 Real and shortreal data types 4.5 Void data type 4.6 chandle data type |
29 | 4.7 String data type |
31 | 4.7.1 len() 4.7.2 putc() |
32 | 4.7.3 getc() 4.7.4 toupper() 4.7.5 tolower() 4.7.6 compare() 4.7.7 icompare() 4.7.8 substr() 4.7.9 atoi(), atohex(), atooct(), atobin() |
33 | 4.7.10 atoreal() 4.7.11 itoa() 4.7.12 hextoa() 4.7.13 octtoa() 4.7.14 bintoa() 4.7.15 realtoa() 4.8 Event data type |
34 | 4.9 User-defined types |
35 | 4.10 Enumerations |
36 | 4.10.1 Defining new data types as enumerated types 4.10.2 Enumerated type ranges |
37 | 4.10.3 Type checking |
38 | 4.10.4 Enumerated types in numerical expressions 4.10.4.1 first() |
39 | 4.10.4.2 last() 4.10.4.3 next() 4.10.4.4 prev() 4.10.4.5 num() 4.10.4.6 name() 4.10.4.7 Using enumerated type methods |
40 | 4.11 Structures and unions |
44 | 4.12 Class |
45 | 4.13 Singular and aggregate types 4.14 Casting |
46 | 4.15 $cast dynamic casting |
47 | 4.16 Bit-stream casting |
49 | 4.17 Default attribute type |
50 | 5. Arrays 5.1 Introduction 5.2 Packed and unpacked arrays |
51 | 5.3 Multiple dimensions |
52 | 5.4 Indexing and slicing of arrays |
53 | 5.5 Array querying functions 5.6 Dynamic arrays 5.6.1 new[ ] |
54 | 5.6.2 size() 5.6.3 delete() |
55 | 5.7 Array assignment |
56 | 5.8 Arrays as arguments |
57 | 5.9 Associative arrays 5.9.1 Wildcard index type |
58 | 5.9.2 String index 5.9.3 Class index 5.9.4 Integer (or int) index 5.9.5 Signed packed array |
59 | 5.9.6 Unsigned packed array or packed struct 5.9.7 Other user-defined types |
60 | 5.10 Associative array methods 5.10.1 num() 5.10.2 delete() 5.10.3 exists() |
61 | 5.10.4 first() 5.10.5 last() 5.10.6 next() 5.10.7 prev() |
62 | 5.11 Associative array assignment 5.12 Associative array arguments 5.13 Associative array literals |
63 | 5.14 Queues 5.14.1 Queue Operators |
64 | 5.14.2 Queue methods 5.14.2.1 size() 5.14.2.2 insert() |
65 | 5.14.2.3 delete() 5.14.2.4 pop_front() 5.14.2.5 pop_back() 5.14.2.6 push_front() 5.14.2.7 push_back() 5.15 Array manipulation methods |
66 | 5.15.1 Array Locator Methods |
67 | 5.15.2 Array ordering methods |
68 | 5.15.3 Array reduction methods 5.15.4 Iterator index querying |
70 | 6. Data Declarations 6.1 Introduction 6.2 Data declaration syntax 6.3 Constants |
72 | 6.3.1 Parameter declaration syntax 6.3.2 Value parameters |
73 | 6.3.2.1 $ as a parameter value |
74 | 6.3.3 Type parameters 6.3.4 Parameter port lists |
75 | 6.3.5 Const constants 6.4 Variables |
76 | 6.5 Nets |
77 | 6.6 Scope and lifetime |
78 | 6.7 Nets, regs, and logic |
79 | 6.8 Signal aliasing |
81 | 6.9 Type compatibility 6.9.1 Matching types |
82 | 6.9.2 Equivalent types |
83 | 6.9.3 Assignment Compatible 6.9.4 Cast Compatible 6.9.5 Type Incompatible 6.10 Type operator |
85 | 7. Classes 7.1 Introduction |
86 | 7.2 Syntax |
87 | 7.3 Overview 7.4 Objects (class instance) |
88 | 7.5 Object properties |
89 | 7.6 Object methods 7.7 Constructors |
90 | 7.8 Static class properties 7.9 Static methods |
91 | 7.10 This 7.11 Assignment, re-naming and copying |
92 | 7.12 Inheritance and subclasses |
93 | 7.13 Overridden members 7.14 Super |
94 | 7.15 Casting 7.16 Chaining constructors |
95 | 7.17 Data hiding and encapsulation 7.18 Constant class properties |
96 | 7.19 Abstract classes and virtual methods |
97 | 7.20 Polymorphism: dynamic method lookup 7.21 Class scope resolution operator :: |
98 | 7.22 Out of block declarations |
99 | 7.23 Parameterized classes |
100 | 7.24 Typedef class |
101 | 7.25 Classes and structures 7.26 Memory management |
102 | 8. Operators and Expressions 8.1 Introduction 8.2 Operator syntax |
104 | 8.3 Assignment operators |
105 | 8.4 Operations on logic and bit types 8.5 Wild equality and wild inequality 8.6 Real operators |
106 | 8.7 Size 8.8 Sign 8.9 Operator precedence and associativity 8.10 Built-in methods |
107 | 8.10.1 Built-in package 8.11 Static Prefixes |
108 | 8.12 Concatenation |
109 | 8.13 Assignment patterns |
111 | 8.13.1 Array assignment patterns |
112 | 8.13.2 Structure assignment patterns |
114 | 8.14 Tagged union expressions and member access |
115 | 8.15 Aggregate expressions 8.16 Operator overloading |
117 | 8.17 Streaming operators (pack / unpack) |
118 | 8.17.1 Streaming dynamically-sized data |
120 | 8.18 Conditional operator |
121 | 8.19 Set membership |
122 | 9. Scheduling Semantics 9.1 Execution of a hardware model and its verification environment 9.2 Event simulation 9.3 The stratified event scheduler |
126 | 9.3.1 The SystemVerilog simulation reference algorithm |
127 | 9.4 The PLI callback control points |
128 | 10. Procedural Statements and Control Flow 10.1 Introduction 10.2 Statements |
129 | 10.3 Blocking and nonblocking assignments |
130 | 10.4 Selection statements |
132 | 10.4.1 Pattern matching |
133 | 10.4.1.1 Pattern matching in case statements |
135 | 10.4.1.2 Pattern matching in if statements |
136 | 10.4.1.3 Pattern matching in conditional expressions 10.5 Loop statements 10.5.1 The do…while loop |
137 | 10.5.2 Enhanced for loop 10.5.3 The foreach loop |
138 | 10.6 Jump statements |
139 | 10.7 Final blocks 10.8 Named blocks and statement labels |
140 | 10.9 Disable |
141 | 10.10 Event control |
142 | 10.10.1 Sequence events |
143 | 10.11 Level-sensitive sequence controls 10.12 Procedural assign and deassign removal |
144 | 11. Processes 11.1 Introduction 11.2 Combinational logic |
145 | 11.2.1 Implicit always_comb sensitivities 11.3 Latched logic 11.4 Sequential logic 11.5 Continuous assignments |
146 | 11.6 fork…join |
147 | 11.7 Process execution threads 11.8 Process control 11.8.1 Wait fork |
148 | 11.8.2 Disable fork |
149 | 11.9 Fine-grain process control |
151 | 12. Tasks and Functions 12.1 Introduction |
152 | 12.2 Tasks |
154 | 12.3 Functions |
155 | 12.3.1 Return values and void functions 12.3.2 Discarding function return values |
156 | 12.3.3 Constant function calls 12.4 Task and function argument passing 12.4.1 Pass by value 12.4.2 Pass by reference |
158 | 12.4.3 Default argument values 12.4.4 Argument binding by name |
159 | 12.4.5 Optional argument list 12.5 Import and export functions |
161 | 13. Random Constraints 13.1 Introduction 13.2 Overview |
163 | 13.3 Random variables |
165 | 13.3.1 rand modifier 13.3.2 randc modifier 13.4 Constraint blocks |
166 | 13.4.1 External constraint blocks |
167 | 13.4.2 Inheritance 13.4.3 Set membership 13.4.4 Distribution |
169 | 13.4.5 Implication |
170 | 13.4.6 if…else constraints 13.4.7 Iterative Constraints |
172 | 13.4.8 Global constraints 13.4.9 Variable ordering |
174 | 13.4.10 Static constraint blocks 13.4.11 Functions in Constraints |
175 | 13.4.12 Constraint guards |
178 | 13.5 Randomization methods 13.5.1 randomize() |
179 | 13.5.2 pre_randomize() and post_randomize() 13.5.3 Behavior of randomization methods |
180 | 13.6 In-line constraints – randomize() with |
181 | 13.7 Disabling random variables with rand_mode() |
182 | 13.8 Controlling constraints with constraint_mode() |
183 | 13.9 Dynamic constraint modification 13.10 In-line random variable control |
184 | 13.10.1 In-line constraint checker 13.11 Randomization of scope variables – std::randomize() |
185 | 13.11.1 Adding constraints to scope variables – std::randomize() with |
186 | 13.12 Random number system functions and methods 13.12.1 $urandom 13.12.2 $urandom_range() 13.12.3 srandom() |
187 | 13.12.4 get_randstate() 13.12.5 set_randstate() 13.13 Random stability 13.13.1 Random stability properties |
188 | 13.13.2 Thread stability |
189 | 13.13.3 Object stability 13.14 Manually seeding randomize |
190 | 13.15 Random weighted case – randcase |
191 | 13.16 Random sequence generation – randsequence |
193 | 13.16.1 Random production weights 13.16.2 If…else production statements |
194 | 13.16.3 Case production statements 13.16.4 Repeat production statements |
195 | 13.16.5 Interleaving productions – rand join |
196 | 13.16.6 Aborting productions – break and return 13.16.7 Value passing between productions |
200 | 14. Interprocess Synchronization and Communication 14.1 Introduction 14.2 Semaphores 14.2.1 new() |
201 | 14.2.2 put() 14.2.3 get() 14.2.4 try_get() 14.3 Mailboxes |
202 | 14.3.1 new() 14.3.2 num() 14.3.3 put() |
203 | 14.3.4 try_put() 14.3.5 get() 14.3.6 try_get() 14.3.7 peek() |
204 | 14.3.8 try_peek() 14.4 Parameterized mailboxes |
205 | 14.5 Event 14.5.1 Triggering an event 14.5.2 Nonblocking event trigger 14.5.3 Waiting for an event |
206 | 14.5.4 Persistent trigger: triggered property 14.6 Event sequencing: wait_order() |
207 | 14.7 Event variables 14.7.1 Merging events |
208 | 14.7.2 Reclaiming events 14.7.3 Events comparison |
210 | 15. Clocking Blocks 15.1 Introduction 15.2 Clocking block declaration |
212 | 15.3 Input and output skews |
213 | 15.4 Hierarchical expressions |
214 | 15.5 Signals in multiple clocking blocks 15.6 Clocking block scope and lifetime 15.7 Multiple clocking blocks example |
215 | 15.8 Interfaces and clocking blocks |
216 | 15.9 Clocking block events 15.10 Cycle delay: ## |
217 | 15.11 Default clocking |
218 | 15.12 Input sampling 15.13 Synchronous events |
219 | 15.14 Synchronous drives |
220 | 15.14.1 Drives and nonblocking assignments 15.14.2 Drive value resolution |
222 | 16. Program Block 16.1 Introduction 16.2 The program construct |
224 | 16.3 Eliminating testbench races |
225 | 16.3.1 Zero-skew clocking block races 16.4 Blocking tasks in cycle/event mode 16.5 Program-wide space and anonymous programs |
226 | 16.6 Program control tasks 16.6.1 $exit() |
227 | 17. Assertions 17.1 Introduction 17.2 Immediate assertions |
229 | 17.3 Concurrent assertions overview |
230 | 17.4 Boolean expressions 17.4.1 Operand types |
231 | 17.4.2 Variables 17.4.3 Operators |
232 | 17.5 Sequences |
235 | 17.6 Declaring sequences |
237 | 17.6.1 Typed formal arguments in sequence declarations 17.7 Sequence operations 17.7.1 Operator precedence |
238 | 17.7.2 Repetition in sequences |
241 | 17.7.3 Sampled value functions |
243 | 17.7.4 AND operation |
246 | 17.7.5 Intersection (AND with length restriction) |
247 | 17.7.6 OR operation |
249 | 17.7.7 first_match operation |
250 | 17.7.8 Conditions over sequences |
252 | 17.7.9 Sequence contained within another sequence 17.7.10 Detecting and using endpoint of a sequence |
253 | 17.8 Manipulating data in a sequence |
257 | 17.9 Calling subroutines on match of a sequence |
258 | 17.10 System functions |
259 | 17.11 Declaring properties |
261 | 17.11.1 Typed formal arguments in property declarations |
262 | 17.11.2 Implication |
265 | 17.11.3 Property examples |
266 | 17.11.4 Recursive properties |
270 | 17.11.5 Finite-length versus infinite-length behavior |
271 | 17.11.6 Non-degeneracy 17.12 Multiple clock support 17.12.1 Multiply-clocked sequences |
272 | 17.12.2 Multiply-clocked properties |
273 | 17.12.3 Clock flow |
275 | 17.12.4 Examples |
276 | 17.12.5 Detecting and using endpoint of a sequence in multi-clock context |
277 | 17.12.6 Sequence Methods |
278 | 17.13 Concurrent assertions |
279 | 17.13.1 assert statement 17.13.2 assume statement |
280 | 17.13.3 cover statement |
281 | 17.13.4 Using concurrent assertion statements outside of procedural code |
282 | 17.13.5 Embedding concurrent assertions in procedural code |
284 | 17.14 Clock resolution |
287 | 17.14.1 Clock resolution in multiply-clocked properties |
289 | 17.15 Binding properties to scopes or instances |
292 | 17.16 The expect statement |
293 | 17.17 Clocking blocks and concurrent assertions |
295 | 18. Coverage 18.1 Introduction 18.2 Defining the coverage model: covergroup |
298 | 18.3 Using covergroup in classes |
299 | 18.4 Defining coverage points |
302 | 18.4.1 Specifying bins for transitions |
304 | 18.4.2 Automatic bin creation for coverage points |
305 | 18.4.3 Wildcard specification of coverage point bins 18.4.4 Excluding coverage point values or transitions 18.4.5 Specifying Illegal coverage point values or transitions |
306 | 18.5 Defining cross coverage |
308 | 18.5.1 Example of user-defined cross coverage and select expressions |
309 | 18.5.2 Excluding cross products 18.5.3 Specifying Illegal cross products 18.6 Specifying coverage options |
312 | 18.6.1 Covergroup Type Options |
314 | 18.7 Predefined coverage methods 18.8 Predefined coverage system tasks and functions |
315 | 18.9 Organization of option and type_option members |
316 | 18.10 Coverage Computation 18.10.1 Coverpoint Coverage Computation |
317 | 18.10.2 Cross Coverage Computation |
318 | 19. Hierarchy 19.1 Introduction 19.2 Packages |
320 | 19.2.1 Referencing data in packages |
321 | 19.2.2 Search order Rules |
323 | 19.3 Compilation unit support |
324 | 19.4 Top-level instance |
325 | 19.5 Module declarations 19.6 Nested modules |
327 | 19.7 Extern modules |
328 | 19.8 Port declarations |
329 | 19.9 List of port expressions |
330 | 19.10 Time unit and precision |
331 | 19.11 Module instances |
332 | 19.11.1 Instantiation using positional port connections 19.11.2 Instantiation using named port connections 19.11.3 Instantiation using implicit .name port connections |
333 | 19.11.4 Instantiation using implicit .* port connections |
334 | 19.12 Port connection rules 19.12.1 Port connection rules for variables |
335 | 19.12.2 Port connection rules for nets 19.12.3 Port connection rules for interfaces 19.12.4 Compatible port types 19.12.5 Unpacked array ports and arrays of instances |
336 | 19.13 Name spaces |
337 | 19.14 Hierarchical names |
338 | 20. Interfaces 20.1 Introduction |
339 | 20.2 Interface syntax |
340 | 20.2.1 Example without using interfaces |
341 | 20.2.2 Interface example using a named bundle |
342 | 20.2.3 Interface example using a generic bundle |
343 | 20.3 Ports in interfaces |
344 | 20.4 Modports |
345 | 20.4.1 An example of a named port bundle |
346 | 20.4.2 An example of connecting a port bundle |
347 | 20.4.3 An example of connecting a port bundle to a generic interface 20.4.4 Modport expressions |
348 | 20.4.5 Clocking blocks and modports |
350 | 20.5 Interfaces and specify blocks 20.6 Tasks and functions in interfaces |
351 | 20.6.1 An example of using tasks in an interface |
352 | 20.6.2 An example of using tasks in modports |
353 | 20.6.3 An example of exporting tasks and functions |
354 | 20.6.4 An example of multiple task exports |
357 | 20.7 Parameterized interfaces |
358 | 20.8 Virtual interfaces |
360 | 20.8.1 Virtual interfaces and clocking blocks |
361 | 20.8.2 Virtual interfaces modports and clocking blocks |
363 | 20.9 Access to interface objects |
364 | 21. Configuration Libraries 21.1 Introduction 21.2 Libraries |
365 | 22. System Tasks and System Functions 22.1 Introduction 22.2 Typename function |
366 | 22.3 Expression size system function 22.4 Range system function |
367 | 22.5 Shortreal conversions 22.6 Array querying system functions |
369 | 22.7 Assertion severity system tasks |
370 | 22.8 Assertion control system tasks 22.9 Assertion system functions |
371 | 22.10 Random number system functions 22.11 Program control 22.12 Coverage system functions 22.13 Enhancements to Verilog system tasks |
373 | 22.14 $readmemb and $readmemh 22.14.1 Reading packed data 22.14.2 Reading 2-state types 22.15 $writememb and $writememh 22.15.1 Writing packed data 22.15.2 Writing 2-state types 22.15.3 Writing addresses to output file |
374 | 22.16 File format considerations for multidimensional unpacked arrays |
375 | 22.17 System task arguments for multidimensional unpacked arrays |
376 | 23. Compiler Directives 23.1 Introduction 23.2 ādefine macros |
377 | 23.3 `include 23.4 `begin_keywords, `end_keywords |
380 | 24. VCD Data 24.1 Introduction 24.2 VCD extensions |
381 | 25. Deprecated constructs 25.1 Introduction 25.2 Defparam statements 25.3 Procedural assign and deassign statements |
383 | 26. Direct Programming Interface (DPI) 26.1 Overview 26.1.1 Tasks and functions |
384 | 26.1.2 Data types 26.1.2.1 Data representation 26.2 Two layers of the DPI 26.2.1 DPI SystemVerilog layer 26.2.2 DPI foreign language layer |
385 | 26.3 Global name space of imported and exported functions 26.4 Imported tasks and functions 26.4.1 Required properties of imported tasks and functions – semantic constraints |
386 | 26.4.1.1 Instant completion of imported functions 26.4.1.2 input, output and inout arguments 26.4.1.3 Special properties pure and context 26.4.1.4 Memory management 26.4.1.5 Reentrancy of imported tasks |
387 | 26.4.1.6 C++ exceptions 26.4.2 Pure functions 26.4.3 Context tasks and functions |
388 | 26.4.4 Import declarations |
390 | 26.4.5 Function result 26.4.6 Types of formal arguments |
391 | 26.4.6.1 Open arrays 26.5 Calling imported functions |
392 | 26.5.1 Argument passing 26.5.1.1 āWhat You Specify Is What You Getā principle 26.5.2 Value changes for output and inout arguments |
393 | 26.6 Exported functions 26.7 Exported tasks |
394 | 26.8 Disabling DPI tasks and functions |
395 | 27. SystemVerilog VPI Object Model 27.1 Introduction |
397 | 27.2 Module (supersedes P1364 26.6.1) |
398 | 27.3 Interface 27.4 Modport 27.5 Interface task/function declaration |
399 | 27.6 Program |
400 | 27.7 Instance |
401 | 27.8 Instance arrays (supersedes P1364 26.6.2) |
402 | 27.9 Scope (supersedes P1364 26.6.3) |
403 | 27.10 IO declaration (supersedes P1364 26.6.4) |
404 | 27.11 Ports (supersedes P1364 26.6.5) |
405 | 27.12 Reference objects |
406 | 27.12.1 Examples |
409 | 27.13 Nets (supersedes P1364 26.6.6) |
412 | 27.14 Variables (supersedes P1364 26.6.7 and 26.6.8) |
415 | 27.15 Variable select (supersedes P1364 26.6.8) 27.16 Variable drivers and loads (supersedes P1364 26.6.23) |
416 | 27.17 Typespec |
418 | 27.18 Structures and unions 27.19 Named events (supersedes P1364 26.6.11) |
419 | 27.20 Parameter (supersedes P1364 26.6.12) |
420 | 27.21 Class definition |
421 | 27.22 Class variables and class objects |
423 | 27.23 Constraint, constraint ordering, distribution |
424 | 27.24 Constraint expression 27.25 Module path, path term (supersedes P1364 26.6.15) |
425 | 27.26 Task and function declaration (supersedes P1364 26.6.18) |
426 | 27.27 Task and function call (supersedes P1364 26.6.19) |
428 | 27.28 Frames (supersedes P1364 26.6.20) |
429 | 27.29 Threads |
430 | 27.30 Clocking block |
431 | 27.31 Assertion |
432 | 27.32 Concurrent assertions 27.33 Property declaration |
433 | 27.34 Property specification |
434 | 27.35 Sequence declaration |
435 | 27.36 Sequence expression |
436 | 27.37 Multi-clock sequence expression |
437 | 27.38 Simple expressions (supersedes P1364 26.6.25) |
438 | 27.39 Expressions (supersedes P1364 26.6.26) |
440 | 27.40 Atomic statement (supersedes atomic stmt in P1364 26.6.27) |
441 | 27.41 Event statement (supersedes event stmt in P1364 26.6.27) 27.42 Process (supersedes process in P1364 26.6.27) 27.43 Assignment (supersedes P1364 26.6.28) |
442 | 27.44 Event control (supersedes P1364 26.6.30) 27.45 Waits (supersedes wait in P1364 26.6.32) |
443 | 27.46 If, if-else (supersedes P1364 26.6.35) 27.47 Case, pattern (supersedes P1364 26.6.36) |
444 | 27.48 Expect 27.49 For (supersedes P1364 26.6.33) 27.50 Do-while, foreach |
445 | 27.51 Alias statement 27.51.1 Examples 27.52 Disables (supersedes P1364 26.6.38) 27.53 Return statement |
446 | 27.54 Attribute (supersedes P1364 26.6.42) |
447 | 27.55 Generates (supersedes P1364 26.6.44) |
449 | 28. SystemVerilog Assertion API 28.1 Requirements 28.2 Static information 28.2.1 Obtaining assertion handles |
450 | 28.2.2 Obtaining static assertion information 28.3 Dynamic information 28.3.1 Placing assertion system callbacks |
451 | 28.3.2 Placing assertions callbacks |
453 | 28.4 Control functions 28.4.1 Assertion system control 28.4.2 Assertion control |
455 | 29. SystemVerilog Code Coverage Control and API 29.1 Requirements 29.1.1 SystemVerilog API 29.1.2 Nomenclature |
456 | 29.2 SystemVerilog real-time coverage access 29.2.1 Predefined coverage constants in SystemVerilog 29.2.2 Built-in coverage access system functions 29.2.2.1 $coverage_control |
459 | 29.2.2.2 $coverage_get_max 29.2.2.3 $coverage_get |
460 | 29.2.2.4 $coverage_merge 29.2.2.5 $coverage_save |
461 | 29.3 FSM recognition 29.3.1 Specifying the signal that holds the current state 29.3.2 Specifying the part-select that holds the current state |
462 | 29.3.3 Specifying the concatenation that holds the current state 29.3.4 Specifying the signal that holds the next state 29.3.5 Specifying the current and next state signals in the same declaration 29.3.6 Specifying the possible states of the FSM 29.3.7 Pragmas in one-line comments |
463 | 29.3.8 Example 29.4 VPI coverage extensions 29.4.1 VPI entity/relation diagrams related to coverage 29.4.2 Extensions to VPI enumerations |
464 | 29.4.3 Obtaining coverage information |
466 | 29.4.4 Controlling coverage |
467 | 30. SystemVerilog Data Read API 30.1 Introduction 30.2 Requirements |
468 | 30.3 Extensions to VPI enumerations 30.3.1 Object types 30.3.2 Object properties 30.3.2.1 Static info |
469 | 30.3.2.2 Dynamic info 30.3.2.2.1 Control constants 30.3.3 System callbacks 30.4 VPI object type additions 30.4.1 Traverse object 30.4.2 VPI collection |
470 | 30.4.2.1 Operations on collections |
471 | 30.5 Object model diagrams |
473 | 30.6 Usage extensions to VPI routines |
474 | 30.7 VPI routines added in SystemVerilog |
475 | 30.8 Reading data |
476 | 30.8.1 VPI read initialization and load access initialization |
477 | 30.8.2 Object selection for traverse access |
478 | 30.8.3 Optionally loading objects 30.8.3.1 Iterating the design for the loaded objects 30.8.3.2 Iterating the object collection for its member objects |
479 | 30.8.4 Reading an object 30.8.4.1 Traversing value changes of objects |
481 | 30.8.4.2 Jump Behavior 30.8.4.3 Dump off regions |
482 | 30.8.5 Sample code using object (and traverse) collections |
484 | 30.8.6 Object-based traversal 30.8.7 Time-ordered traversal |
485 | 30.9 Optionally unloading the data 30.10 Reading data from multiple databases and/or different read library providers |
488 | 30.11 VPI routines extended in SystemVerilog |
489 | 30.12 VPI routines added in SystemVerilog 30.12.1 VPI reader routines |
493 | Annex A (normative) Formal Syntax A.1 Source text A.1.1 Library source text A.1.2 SystemVerilog source text |
495 | A.1.3 Module parameters and ports A.1.4 Module items |
496 | A.1.5 Configuration source text |
497 | A.1.6 Interface items A.1.7 Program items |
498 | A.1.8 Class items A.1.9 Constraints |
499 | A.1.10 Package items |
500 | A.2 Declarations A.2.1 Declaration types A.2.1.1 Module parameter declarations A.2.1.2 Port declarations A.2.1.3 Type declarations A.2.2 Declaration data types A.2.2.1 Net and variable types |
502 | A.2.2.2 Strengths A.2.2.3 Delays A.2.3 Declaration lists A.2.4 Declaration assignments |
503 | A.2.5 Declaration ranges A.2.6 Function declarations |
504 | A.2.7 Task declarations A.2.8 Block item declarations |
505 | A.2.9 Interface declarations A.2.10 Assertion declarations |
507 | A.2.11 Covergroup declarations |
508 | A.3 Primitive instances A.3.1 Primitive instantiation and instances |
509 | A.3.2 Primitive strengths A.3.3 Primitive terminals A.3.4 Primitive gate and switch types A.4 Module, interface and generated instantiation A.4.1 Instantiation A.4.1.1 Module instantiation |
510 | A.4.1.2 Interface instantiation A.4.1.3 Program instantiation A.4.2 Generated instantiation |
511 | A.5 UDP declaration and instantiation A.5.1 UDP declaration A.5.2 UDP ports A.5.3 UDP body |
512 | A.5.4 UDP instantiation A.6 Behavioral statements A.6.1 Continuous assignment and net alias statements A.6.2 Procedural blocks and assignments A.6.3 Parallel and sequential blocks |
513 | A.6.4 Statements A.6.5 Timing control statements |
514 | A.6.6 Conditional statements A.6.7 Case statements |
515 | A.6.7.1 Patterns A.6.8 Looping statements |
516 | A.6.9 Subroutine call statements A.6.10 Assertion statements A.6.11 Clocking block |
517 | A.6.12 Randsequence A.7 Specify section A.7.1 Specify block declaration |
518 | A.7.2 Specify path declarations A.7.3 Specify block terminals A.7.4 Specify path delays |
519 | A.7.5 System timing checks A.7.5.1 System timing check commands |
520 | A.7.5.2 System timing check command arguments A.7.5.3 System timing check event definitions |
521 | A.8 Expressions A.8.1 Concatenations A.8.2 Subroutine calls |
522 | A.8.3 Expressions |
523 | A.8.4 Primaries |
524 | A.8.5 Expression left-side values |
525 | A.8.6 Operators A.8.7 Numbers |
526 | A.8.8 Strings A.9 General A.9.1 Attributes A.9.2 Comments A.9.3 Identifiers |
528 | A.9.4 White space A.10 Footnotes (normative) |
531 | Annex B (normative) Keywords |
533 | Annex C (normative) Std Package C.1 General C.2 Semaphore C.3 Mailbox C.4 Randomize C.5 Process |
535 | Annex D (normative) Linked Lists D.1 General D.2 List definitions D.3 List declaration D.3.1 Declaring list variables D.3.2 Declaring list iterators |
536 | D.4 Linked list class prototypes D.4.1 List_Iterator class prototype D.4.2 List class prototype D.5 List_Iterator methods D.5.1 next() D.5.2 prev() D.5.3 eq() |
537 | D.5.4 neq() D.5.5 data() D.6 List methods D.6.1 size() D.6.2 empty() D.6.3 push_front() D.6.4 push_back() |
538 | D.6.5 front() D.6.6 back() D.6.7 pop_front() D.6.8 pop_back() D.6.9 start() D.6.10 finish() |
539 | D.6.11 insert() D.6.12 insert_range() D.6.13 erase() D.6.14 erase_range() D.6.15 set() |
540 | D.6.16 swap() D.6.17 clear() D.6.18 purge() |
541 | Annex E (normative) Formal Semantics of Concurrent Assertions E.1 Introduction |
542 | E.2 Abstract Syntax E.2.1 Abstract grammars |
543 | E.2.2 Notations E.2.3 Derived forms E.2.3.1 Derived non-overlapping implication operator E.2.3.2 Derived consecutive repetition operators E.2.3.3 Derived delay and concatenation operators |
544 | E.2.3.4 Derived non-consecutive repetition operators E.2.3.5 Other derived operators E.3 Semantics |
545 | E.3.1 Rewrite rules for clocks E.3.2 Tight satisfaction without local variables |
546 | E.3.3 Satisfaction without local variables E.3.3.1 Neutral satisfaction |
547 | E.3.3.2 Weak and strong satisfaction by finite words E.3.4 Local variable flow |
548 | E.3.5 Tight satisfaction with local variables |
549 | E.3.6 Satisfaction with local variables E.3.6.1 Neutral satisfaction |
550 | E.3.6.2 Weak and strong satisfaction by finite words E.4 Extended Expressions E.4.1 Extended booleans E.4.2 Past E.5 Recursive Properties |
552 | Annex F (normative) DPI C-layer F.1 Overview |
553 | F.2 Naming conventions F.3 Portability F.4 svdpi.h include file F.5 Semantic constraints |
554 | F.5.1 Types of formal arguments F.5.2 input arguments F.5.3 output arguments F.5.4 Value changes for output and inout arguments F.5.5 context and non-context tasks and functions |
555 | F.5.6 pure functions F.5.7 Memory management |
556 | F.6 Data types F.6.1 Limitations F.6.2 Duality of types: SystemVerilog types vs. C types F.6.3 Data representation |
557 | F.6.4 Basic types F.6.5 Normalized and linearized ranges |
558 | F.6.6 Mapping between SystemVerilog ranges and C ranges F.6.7 Canonical representation of packed arrays F.6.8 Unpacked aggregate arguments |
559 | F.7 Argument passing modes F.7.1 Overview F.7.2 Calling SystemVerilog tasks and functions from C F.7.3 Argument passing by value F.7.4 Argument passing by reference F.7.5 Allocating actual arguments for SystemVerilog-specific types F.7.6 Argument passing by handle-open arrays |
560 | F.7.7 input arguments F.7.8 inout and output arguments F.7.9 Function result F.7.10 String Arguments |
561 | F.8 Context tasks and functions F.8.1 Overview of DPI and VPI context F.8.2 Context of imported and export tasks and functions |
562 | F.8.3 Working with DPI context tasks and functions in C code |
563 | F.8.4 Example 1 – Using DPI context functions |
564 | F.8.5 Relationship between DPI and VPI/PLI interfaces |
565 | F.9 Include files F.9.1 Include file svdpi.h F.9.1.1 Scalars of type bit and logic F.9.1.2 Canonical representation of packed arrays |
566 | F.9.1.3 Implementation-dependent representation F.9.2 Example 2 – Simple packed array application |
567 | F.9.3 Example 3 – Application with complex mix of types |
568 | F.10 Arrays F.10.1 Example 4 – Using packed 2-state arguments F.10.2 Multidimensional arrays F.10.3 Example 5 – Using packed struct and union arguments |
569 | F.10.4 Direct access to unpacked arrays F.10.5 Utility functions for working with the canonical representation |
570 | F.11 Open arrays F.11.1 Actual ranges |
571 | F.11.2 Array querying functions F.11.3 Access functions F.11.4 Access to the actual representation |
572 | F.11.5 Access to elements via canonical representation |
573 | F.11.6 Access to scalar elements (bit and logic) F.11.7 Access to array elements of other types F.11.8 Example 6 – two-dimensional open array |
574 | F.11.9 Example 7 – open array |
575 | F.11.10 Example 8 – access to packed arrays |
576 | F.12 SystemVerilog 3.1a-compatible access to packed data (deprecated functionality) F.12.1 Determining the compatibility level of an implementation F.12.2 svdpi.h definitions for 3.1a-style packed data processing |
578 | F.12.3 Source-level compatibility include file svdpi_src.h F.12.4 Example 9 – Deprecated SystemVerilog 3.1a binary compatible application |
579 | F.12.5 Example 10 – Deprecated SystemVerilog 3.1a source compatible application F.12.6 Example 11 – Deprecated SystemVerilog 3.1a binary compatible calls of export functions |
581 | Annex G (normative) Include file svdpi.h |
590 | Annex H (normative) Inclusion of Foreign Language Code H.1 General H.2 Location independence |
591 | H.3 Object code inclusion |
592 | H.1.1 Bootstrap file H.1.2 Examples |
594 | Annex I (normative) sv_vpi_user.h |
603 | Annex J (informative) Glossary |
605 | Annex K (informative) Bibliography |
607 | Symbols Numerics A |
608 | B |
609 | C D |
610 | E F G H I J K |
611 | L M |
612 | N O P |
613 | Q R S |
614 | T U V |
618 | W X |