Shopping Cart

No products in the cart.

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
Guaranteed Safe Checkout
Category:

If you have any questions, feel free to reach out to our online customer service team by clicking on the bottom right corner. Weā€™re here to assist you 24/7.
Email:[email protected]

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
IEEE 1800-2005
$264.33