Shopping Cart

No products in the cart.

IEEE 1647 2016:2017 Edition

$182.00

IEEE Standard for the Functional Verification Language e

Published By Publication Date Number of Pages
IEEE 2017 558
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]

Revision Standard – Superseded. The e functional verification language is an application-specific programming language, aimed at automating the task of verifying a hardware or software design with respect to its specification. Verification environments written in e provide a model of the environment in which the design is expected to function, including the kinds of erroneous conditions the design needs to withstand. A typical verification environment is capable of generating user-controlled test inputs with statistically interesting characteristics. Such an environment can check the validity of the design responses. Functional coverage metrics are used to control the verification effort and gauge the quality of the design. e verification environments can be used throughout the design cycle, from a high-level architectural model to a fully realized system. A definition of the e language syntax and semantics and how tool developers and verification engineers should use them are contained in this standard.

PDF Catalog

PDF Pages PDF Title
1 IEEE Std 1647-2016 Front cover
2 Title page
4 Important Notices and Disclaimers Concerning IEEE Standards Documents
7 Participants
8 Introduction
10 Contents
16 IMPORTANT NOTICE
1. Overview
1.1 Scope
1.2 Purpose
1.3 Verification environments
17 1.4 Basic concepts relating to this standard
18 1.4.1 Fundamental considerations
1.4.2 Organization of e programs
1.4.3 Modes of execution
1.4.3.1 Stand-alone execution
1.4.3.2 Co-execution with a master simulator
19 1.4.4 Execution phases
1.4.5 Major semantic components
20 1.4.5.1 Types
1.4.5.2 Packages, aspects, and information hiding
21 1.4.5.3 Numeric expressions and values
1.4.5.4 Constraints and generation
22 1.4.5.5 Concurrent execution
1.4.5.6 Functional coverage
23 1.4.5.7 Checking, printing, and reporting
1.5 Conventions used
1.5.1 Visual cues (meta-syntax)
1.5.2 Syntax notation within a construct
24 1.5.3 Syntax examples
1.6 Use of color in this standard
25 1.7 Contents of this standard
27 2. Normative references
3. Definitions, acronyms, and abbreviations
3.1 Definitions
29 3.2 Acronyms and abbreviations
31 4. e basics
4.1 Lexical conventions
4.1.1 File structure
4.1.2 Code segments
4.1.3 Comments and white space
32 4.1.4 Literals and constants
4.1.4.1 Unsized numbers
33 4.1.4.2 Sized numbers
4.1.4.3 MVL literals
34 4.1.4.3.1 Syntax rules
35 4.1.4.3.2 Examples
4.1.4.3.3 Considerations
4.1.4.4 Predefined constants
36 4.1.4.5 Literal string
4.1.4.6 Literal character
4.1.5 Names and keywords
4.1.5.1 Legal e names
4.1.5.2 e file names
4.1.5.3 e keywords
37 4.1.5.4 Preprocessor names
38 4.1.5.5 String matching pseudo-variables
4.2 Syntactic elements
4.2.1 Statements
39 4.2.2 Struct members
40 4.2.3 Actions
41 4.2.3.1 Creating or modifying variables
4.2.3.2 Executing actions conditionally
4.2.3.3 Executing actions iteratively
42 4.2.3.4 Controlling program flow
4.2.3.5 Invoking methods and routines
4.2.3.6 Emitting an event
4.2.3.7 Performing time-consuming actions
43 4.2.3.8 Generating data item
4.2.3.9 Detecting and handling errors
4.2.3.10 Printing
4.2.4 Expressions
44 4.3 Struct hierarchy and name resolution
4.3.1 Struct hierarchy
4.3.1.1 Global struct
4.3.1.2 Files struct
4.3.1.3 Packing struct
4.3.1.4 Sys struct
45 4.3.1.5 Session struct
4.3.1.5.1 session.check_ok
4.3.1.5.2 session.events
4.3.2 Referencing e entities
4.3.2.1 Structs and fields
46 4.3.2.2 Naming and referencing methods and routines
47 4.3.2.3 Enumerated type values
4.3.3 Implicit variables
4.3.3.1 it
48 4.3.3.2 me
4.3.3.3 result
4.3.3.4 index
4.3.3.5 prev
49 4.3.4 Name resolution rules
4.3.4.1 Names that include a path
4.3.4.2 Names that do not include a path
50 4.4 Ranges
51 4.5 Operator precedence
52 4.6 Evaluation order of expressions
4.7 Bitwise operators
4.7.1 ~
53 4.7.2 & | ^
4.7.3 >> <<
54 4.8 Boolean operators
4.8.1 ! (not)
4.8.2 && (and)
55 4.8.3 || (or)
4.8.4 =>
56 4.8.5 now
4.9 Arithmetic operators
4.9.1 Unary + –
57 4.9.2 + – * / %
4.10 Comparison operators
4.10.1 < >=
58 4.10.2 == !=
59 4.10.3 === !==
60 4.10.4 ~ !~
61 4.10.5 in
4.11 String matching
4.11.1 Native e string matching
62 4.11.2 AWK-style string matching
63 4.12 Extraction and concatenation operators
64 4.12.1 [ ]
4.12.2 [ : ]
65 4.12.2.1 Slice and size of the result
4.12.2.2 Accessing nonexistent bits
4.12.3 [ .. ]
66 4.12.4 {… ; …}
67 4.12.5 %{… , …}
4.13 Scalar modifiers
4.13.1 [ range,…]
68 4.13.2 (bits | bytes : width-exp)
4.14 Parentheses
4.15 list.method()
69 4.16 Special-purpose operators
4.16.1 is [not] a, is [not] an
70 4.16.2 new
71 4.16.3 Dot operator (.)
4.16.4 Apostrophes (‘)
72 4.16.5 Conditional operator (? 🙂
73 5. Data types
5.1 e data types
5.1.1 Scalar types
5.1.2 Scalar subtypes
5.1.2.1 Scalar modifiers
74 5.1.2.2 Named scalar subtypes
5.1.2.3 Unbounded integers
75 5.1.3 Enumerated scalar types
76 5.1.4 Casting of enumerated types in comparisons
5.1.5 Struct types
5.1.6 Struct subtypes
77 5.1.7 Referencing fields in when constructs
5.1.8 List types
5.1.9 Keyed lists
78 5.1.10 The set type
5.1.11 The string type
79 5.1.12 The real type
5.1.13 The external_pointer type
5.1.14 The “untyped” pseudo type
5.2 Untyped expressions
80 5.3 Assignment rules
5.3.1 What is an assignment?
81 5.3.2 Assignments create identical references
5.3.3 Assignment to different (but compatible) types
82 5.3.3.1 Assignment of numeric types
5.3.3.2 Assignment of Boolean types
5.3.3.3 Assignment of enumerated types
5.3.3.4 Assignment of structs
5.3.3.5 Assignment of strings
83 5.3.3.6 Assignment of lists
5.3.3.7 Assignment of sets
5.4 Real data type
5.4.1 Real data type usage
84 5.4.2 Real literals
5.4.3 Real constants
85 5.4.4 Real type limitations
5.5 Precision rules for numeric operations
86 5.5.1 Determining the context of an expression
87 5.5.2 Deciding precision and performing data conversion and sign extension
5.6 Automatic type casting
88 5.6.1 Conversion between real and integer data types
5.6.2 Real data type precision, data conversion, and sign extension
5.7 Defining and extending scalar types
89 5.7.1 type enumerated scalar
5.7.2 type scalar subtype
90 5.7.3 type sized scalar
5.7.4 extend type
91 5.8 Type-related constructs
5.8.1 as_a()
5.8.2 unsafe()
92 5.8.2.1 Type conversion between scalars and lists of scalars
93 5.8.2.2 Type conversion between strings and scalars or lists of scalars
94 5.8.2.3 Type conversion between structs, struct subtypes, and lists of structs
95 5.8.2.4 Type conversion between simple lists and keyed lists
5.8.2.5 Type conversion between reals and non-numeric scalars
96 5.8.2.6 Type conversion between numeric lists and sets
5.8.3 all_values()
97 5.8.4 set_of_values()
5.8.5 full_set_of_values()
98 6. Structs, subtypes, and fields
6.1 Structs overview
99 6.2 Defining structs: struct
100 6.3 Extending structs: extend type
6.4 Restrictions on inheritance
101 6.5 Extending subtypes
6.6 Creating subtypes with when
102 6.6.1 when
103 6.7 Extending when subtypes
6.7.1 Coverage and when subtypes
6.7.2 Extending methods in when subtypes
104 6.8 Defining fields: field
6.8.1 Constant values
6.8.1.1 Initializing const fields
105 6.8.1.2 Restrictions
6.8.2 Physical fields
6.8.3 Ungenerated fields
6.8.4 Assigning values to fields
106 6.9 Defining list fields
6.9.1 list of
107 6.9.2 list(key) of
108 6.10 Projecting list of fields
6.11 Defining attribute fields
110 7. Units
7.1 Overview
111 7.1.1 Units versus structs
7.1.2 HDL paths and units
112 7.1.3 Methodology limitations and recommendations
113 7.2 Defining units and fields of type unit
7.2.1 unit
114 7.2.2 field: unit-type is instance
7.2.3 field: unit-type
115 7.2.4 field: list of unit instances
7.2.5 field: list of unit-type
116 7.3 Unit attributes
7.3.1 hdl_path()
117 7.3.2 agent()
7.4 Predefined methods of any_unit
118 7.4.1 full_hdl_path()
7.4.2 e_path()
7.4.3 get_parent_unit()
119 7.5 Unit-related predefined methods of any_struct
7.5.1 get_unit()
120 7.5.2 get_enclosing_unit()
7.5.3 try_enclosing_unit()
121 7.5.4 set_unit()
7.6 Unit-related predefined routines
122 7.6.1 set_config_max()
7.6.2 get_all_units()
123 8. Template types
8.1 Defining a template type
8.1.1 Template type parameters and defaults
124 8.1.2 Template parameter type categories
8.1.3 Template base types
125 8.1.4 Template body
8.1.5 Template definition example
126 8.2 Extending a template
127 8.2.1 Template extension example
8.3 Instantiating a template type
128 8.4 Template subtype instances
130 9. e ports
9.1 Introduction to e ports
9.1.1 Creating port instances
131 9.1.2 Using ports
9.1.3 Using port values and attributes in constraints
9.2 Using simple ports
132 9.2.1 Accessing simple ports and their values
9.2.2 MVL on simple ports
133 9.2.3 @sim temporal expressions with external simple ports
9.3 Using buffer ports
9.3.1 Rendezvous-zero size buffer queue
134 9.4 Using event ports
9.4.1 Accessing event ports
135 9.5 Using method ports
9.5.1 Method types
9.5.2 Input method ports
136 9.5.3 Output method ports
9.5.4 Invoking method ports
9.5.5 Binding method ports
137 9.6 Defining and referencing ports
9.6.1 simple_port
138 9.6.2 buffer_port
139 9.6.3 event_port
140 9.6.4 method_port
9.6.5 method_type method-type-name
141 9.6.6 Port reference
9.6.7 Port: $
142 9.6.8 Port bit slice access
9.6.9 Force simple port
143 9.6.10 Force simple port bit slice
9.6.11 Release simple port
144 9.6.12 Method port reference
9.6.13 Method port: $
145 9.7 Port attributes
9.7.1 Generic port attributes
146 9.7.2 Port attributes for HDL simulators
148 9.7.2.1 bind()
9.7.2.1.1 Rules
9.7.2.1.2 Checking of ports
149 9.7.2.1.3 Disconnected ports
9.7.2.2 buffer_size()
150 9.7.2.3 declared_range()
9.7.2.4 delayed()
151 9.7.2.5 driver()
9.7.2.6 driver_delay()
152 9.7.2.7 driver_initial_value()
9.7.2.8 edge()
153 9.7.2.9 hdl_path()
9.7.2.10 pack_options()
154 9.7.2.11 pass_by_pointer()
9.7.2.12 verilog_drive()
155 9.7.2.13 verilog_drive_hold()
9.7.2.14 verilog_forcible()
156 9.7.2.15 verilog_strobe()
9.7.2.16 verilog_wire()
157 9.7.2.17 vhdl_delay_mode()
9.8 Buffer port methods
9.8.1 get()
158 9.8.2 put()
9.8.3 is_empty()
159 9.8.4 is_full()
9.9 MVL methods for simple ports
9.9.1 MVL four-value logic
160 9.9.2 MVL string
9.9.3 put_mvl()
161 9.9.4 get_mvl()
9.9.5 put_mvl_list()
9.9.6 fill_mvl_list()
162 9.9.7 get_mvl_list()
9.9.8 put_mvl_string()
163 9.9.9 get_mvl_string()
9.9.10 get_mvl4()
9.9.11 fill_mvl4_list()
164 9.9.12 get_mvl4_list()
9.9.13 get_mvl4_string()
165 9.9.14 put_mvl_to_bit_slice()
9.9.15 force_mvl()
166 9.9.16 force_mvl_list()
9.9.17 force_mvl_string()
167 9.9.18 force_mvl_to_bit_slice()
9.9.19 has_mvl_value()
168 9.9.20 has_x()
9.9.21 has_z()
9.9.22 has_unknown()
169 9.9.23 set_default_value()
170 9.9.24 set_default_mvl_value()
9.10 Global MVL routines
9.10.1 string_to_mvl()
171 9.10.2 mvl_to_string()
9.10.3 mvl_to_int()
172 9.10.4 int_to_mvl()
9.10.5 mvl_to_bits()
173 9.10.6 bits_to_mvl()
9.10.7 mvl_to_mvl4()
9.10.8 convert_mvl_list_to_mvl4_list()
174 9.10.9 mvl_list_to_mvl4_list()
9.10.10 string_to_mvl4()
9.11 Comparative analysis of ports and tick access
175 9.12 e port binding
176 9.12.1 do_bind()
9.13 Transaction level modeling interface ports in e
177 9.13.1 interface_port
9.13.1.1 Special port types
9.13.1.1.1 Export
178 9.13.1.2 Analysis port
9.13.2 Defining input e TLM interface ports
9.13.3 Binding e TLM interface ports
9.13.3.1 Binding rules for TLM interface ports
179 9.13.3.2 Declarative and procedural binding
9.13.3.2.1 connect()—language-neutral binding
180 9.13.4 Supported TLM interfaces
9.13.4.1 tlm_event predefined struct
9.13.4.2 Supported unidirectional TLM interfaces
181 9.13.4.3 Supported bidirectional TLM interfaces
183 9.13.4.4 Supported analysis TLM interface
9.13.4.5 Required semantics of TLM interface methods
9.13.4.5.1 put(value:type)
9.13.4.5.2 try_put(value:type) : bool
9.13.4.5.3 can_put() : bool
184 9.13.4.5.4 ok_to_put() : tlm_event
9.13.4.5.5 get(value:*type)
9.13.4.5.6 try_get(value:*type) : bool
9.13.4.5.7 can_get() : bool
9.13.4.5.8 ok_to_get() : tlm_event
9.13.4.5.9 peek(value:*type)
9.13.4.5.10 try_peek(value:*type) : bool
9.13.4.5.11 can_peek() : bool
9.13.4.5.12 ok_to_peek() : tlm_event
9.13.4.5.13 transport(request: req-type, response: *rsp-type)
185 9.13.4.5.14 write(value : type)
9.14 TLM Sockets in e
9.14.1 tlm_initiator_socket/tlm_target_socket
186 9.14.1.1 nb_transport_bw(trans:tlm_generic_payload, p:*tlm_phase_enum,t:*time):tlm_syn_enum
9.14.1.2 nb_transport_fw(trans:tlm_generic_payload, p:*tlm_phase_enum,t:*time):tlm_syn_enum
9.14.1.3 b_transport(trans:tlm_generic_payload, ,t:*time)@sys.any
9.14.1.4 transport_dbg(trans:tlm_generic_payload):uint
9.14.1.5 set_bus_width (num:uint)
9.14.1.6 get_bus_width ():uint
187 9.14.2 Predefined types related to TLM socket based transactions
9.14.2.1 tlm_command
9.14.2.2 tlm_endianness
9.14.2.3 tlm_extension
9.14.2.4 tlm_generic_payload
189 9.14.2.5 tlm_phase_enum
190 9.14.2.6 tlm_response_status
9.14.2.7 tlm_sync_enum
9.14.3 Binding e TLM sockets
9.14.3.1 Binding rules for TLM sockets
191 9.14.3.1.1 connect()-language-neutral binding
192 10. Constraints and generation
10.1 Types of constraints
10.2 Generation concepts
193 10.2.1 Generation action
10.2.1.1 Pre-run generation actions
10.2.1.2 On-the-fly generation actions
10.2.2 Generatable variable
10.2.3 Connected field sets (CFS)
194 10.2.4 Inputs
195 10.2.5 Unidirectional and bidirectional relations
10.2.6 Inconsistently connected field sets (ICFS)
10.2.7 Order of CFSs
196 10.2.7.1 Structural dependencies
10.2.7.1.1 when subtype dependencies in constraints
197 10.2.7.2 Input dependencies
10.2.7.2.1 Dependencies of method calls
10.2.8 Basic flow of generation
198 10.2.9 Using methods in constraints
199 10.2.9.1 Classification of methods
200 10.2.9.2 Number of calls
10.2.10 Generatable paths and the sampling of inputs
201 10.2.11 Scope of constraints
202 10.2.12 Soft constraints
203 10.2.12.1 keep gen-item.reset_soft()
204 10.2.12.2 keep soft… select
10.2.13 Constraining non-scalar data types
205 10.2.13.1 Constraining structs
10.2.13.1.1 Struct equality
206 10.2.13.1.2 Struct inequality
10.2.13.2 Allocation versus aliasing
10.2.13.3 Constraining lists
207 10.2.13.3.1 List equality and inequality
10.2.13.3.2 List item
10.2.13.3.3 Item in list
10.2.13.3.4 List in list
208 10.2.13.3.5 Permutations
10.2.13.3.6 List attributes
209 10.2.13.3.7 Constraining all list items: keep for each
10.2.13.3.8 All solutions
210 10.3 Type constraints
211 10.3.1 keep type
212 10.3.2 Type constraints and struct fields
10.3.3 Type constraints and list fields
10.3.4 Type constraints and like subtypes
213 10.4 Defining constraints
10.4.1 keep
10.4.1.1 Constraint overriding
214 10.4.2 keep
10.4.3 keep all of {…}
215 10.4.4 keep struct-list.is_all_iterations()
10.4.5 keep soft
216 10.4.6 read_only()
10.4.7 constraint-bool-exp
218 10.4.8 gen-item
10.5 Invoking generation
219 10.5.1 gen
10.5.2 pre_generate()
220 10.5.3 post_generate()
221 11. Temporal struct members
11.1 Events
11.1.1 Causes of events
11.1.2 Scope of events
11.1.3 Defining and emitting named events
222 11.1.3.1 event
223 11.1.3.2 emit
11.1.4 Predefined events
11.1.4.1 General predefined events
224 11.1.4.1.1 sys.any
11.1.4.1.2 sys.tick_start
11.1.4.1.3 sys.tick_end
11.1.4.1.4 session.start_of_test
11.1.4.1.5 session.end_of_test
11.1.4.1.6 struct.quit
11.1.4.1.7 sys.new_time
11.1.4.2 Simulation time and ticks
225 11.2 on
226 11.3 on event-port
227 11.4 expect | assume
228 11.5 Procedural API for temporal operators on event and expect struct members
11.5.1 do_abort_on_event()
229 11.5.2 do_stop_on_event()
11.5.3 do_start_on_event()
230 11.5.4 do_abort_on_expect()
11.5.5 do_stop_on_expect()
231 11.5.6 do_start_on_expect()
11.5.7 do_abort_on_struct()
232 11.5.8 do_stop_on_struct()
11.5.9 do_start_on_struct()
233 11.5.10 apply_abort_on_struct()
11.5.11 apply_stop_on_struct()
234 11.5.12 apply_start_on_struct()
11.5.13 do_abort_on_all_events()
235 11.5.14 do_stop_on_all_events()
11.5.15 do_start_on_all_events()
236 11.5.16 do_abort_on_all_expects()
11.5.17 do_stop_on_all_expects()
237 11.5.18 do_start_on_all_expects()
11.5.19 do_abort_on_subtree()
238 11.5.20 do_stop_on_subtree()
11.5.21 do_start_on_subtree()
239 11.5.22 propagate_abort_on_subtree()
11.5.23 propagate_stop_on_subtree()
240 11.5.24 propagate_start_on_subtree()
11.5.25 do_abort_on_all_instance_fields()
241 11.5.26 do_stop_on_all_instance_fields()
11.5.27 do_start_on_all_instance_fields()
242 12. Temporal expressions
12.1 Overview
12.1.1 Terminology
12.1.1.1 holds
12.1.1.2 holds tightly
243 12.1.1.3 occurs, occurrence
12.1.1.4 path
12.1.1.5 prefix
12.1.1.6 proposition
12.1.1.7 sampling event
12.1.1.8 sampled normal form
12.1.1.9 state
12.1.1.10 strict prefix
12.1.1.11 sub-path
12.1.1.12 success
12.1.1.13 temporal atom
12.1.1.14 tight satisfaction
244 12.1.1.15 top-level temporal expression
12.1.2 Temporal atoms
12.1.3 Sampling event
12.1.4 Sampling propagation and sampled normal form
245 12.2 Temporal operators and constructs
246 12.2.1 Precedence of temporal operators
12.2.2 cycle
247 12.2.3 true(exp)
12.2.4 @ unary event operator
248 12.2.5 @ sampling operator (binary @)
12.2.6 and
249 12.2.7 or
12.2.8 { exp ; exp }
250 12.2.9 [ exp ]
251 12.2.10 ~[ exp..exp ]
252 12.2.11 [ exp..exp ]
253 12.2.12 fail
254 12.2.13 =>
255 12.2.14 eventually
12.2.15 detach
256 12.2.16 not
257 12.2.17 change(exp), fall(exp), rise(exp)
259 12.2.18 delay
260 12.2.19 exec
12.3 Success and failure of a temporal expression
12.3.1 Success of a temporal expression
261 12.3.2 Failure of a temporal expression
12.3.3 Start of an evaluation of a temporal expression
262 13. Time-consuming actions
13.1 Synchronization actions
13.1.1 Synchronization semantics
263 13.1.2 sync
13.1.3 wait
264 13.2 Concurrency actions
13.2.1 all of
265 13.2.2 first of
13.3 State machines
13.3.1 Overview
266 13.3.2 state machine action
267 13.3.3 Simple state transition: state => state
268 13.3.4 Wild card state transition: * => state
13.3.5 state action
270 14. Coverage constructs
14.1 Defining coverage groups: cover
272 14.1.1 Using the instance_no_collect option for per unit instance coverage
273 14.2 Defining basic coverage items: item
276 14.2.1 Coverage per instance
14.2.2 per_instance item errors
277 14.2.3 Relationship of type and instance based coverage items
278 14.3 Defining cross coverage items: cross
280 14.4 Defining transition coverage items: transition
282 14.5 Extending coverage groups: cover … using also … is also
283 14.6 Extending coverage items: item … using also
14.7 Coverage API
14.7.1 Methods of user_cover_struct
284 14.7.1.1 scan_cover()
14.7.1.2 start_group()
285 14.7.1.3 start_instance()
14.7.1.4 start_item()
286 14.7.1.5 scan_bucket()
14.7.1.6 end_item()
287 14.7.1.7 end_instance()
14.7.1.8 end_group()
14.7.2 Fields of user_cover_struct
289 14.8 Coverage methods for the covers struct
290 14.8.1 include_tests()
14.8.2 set_weight()
291 14.8.3 set_at_least()
14.8.4 set_cover()
292 14.8.5 get_contributing_runs()
14.8.6 get_unique_buckets()
293 14.8.7 write_cover_file()
14.8.8 get_overall_grade()
14.8.9 get_ecov_name()
294 14.8.10 get_test_name()
14.8.11 get_seed()
295 15. Macros
15.1 Overview
15.1.1 e syntactic structure
15.1.2 Macro definition
296 15.2 define-as statement
15.3 define-as-computed statement
297 15.4 Match expression structure
15.4.1 Match expression terms
15.4.2 Match expression operators
298 15.4.3 Submatches and labels
15.4.4 Meta-grammar of match expression
299 15.4.5 Proto-syntax
15.5 Interpretation of match expressions
15.5.1 Priority on production choices
300 15.5.2 Recursive-decent interpretation
15.6 Macro expansion code
303 16. Print, checks, and error handling
16.1 print
16.2 Handling DUT errors
304 16.2.1 check that
16.2.1.1 Using named check actions
305 16.2.2 dut_error()
306 16.2.3 dut_errorf()
307 16.2.4 dut_error_struct
308 16.2.5 set_check()
309 16.3 Handling user errors
16.3.1 warning()
16.3.2 error()
310 16.3.3 fatal()
16.3.4 try
311 16.4 Handling programming errors: assert
312 17. Methods
17.1 Rules for defining and extending methods
314 17.1.1 method is
315 17.1.2 method @event is
316 17.1.3 method [@event] is (also | first | only)
319 17.1.4 method [@event] is (undefined | empty)
17.2 Invoking methods
320 17.2.1 tcm()
321 17.2.2 start tcm()
322 17.2.3 method()
323 17.2.4 compute method() or tcm()
17.2.5 return
324 17.3 Parameter passing
17.3.1 Scalar parameter passing
325 17.3.2 Compound parameter passing
17.3.3 Passing by reference
17.3.4 Default parameter values
326 17.4 Using the C interface
17.4.1 routine … is C routine
327 17.4.2 method … is C routine
17.4.3 C export
328 18. Creating and modifying e variables
18.1 About e variables
18.2 var
329 18.3 =
18.4 op=
330 18.5 <=
332 19. Packing and unpacking
19.1 Basic packing
19.1.1 pack()
333 19.1.2 unpack()
334 19.1.3 swap()
335 19.2 Predefined pack options
19.2.1 pack_options struct
19.2.1.1 reverse_fields
19.2.1.2 reverse_list_items
19.2.1.3 final_reorder
19.2.1.4 scalar_reorder
19.2.2 Predefined settings
336 19.2.3 packing.high
19.2.4 packing.low
19.2.5 packing.global_default
19.3 Customizing pack options
19.4 Packing and unpacking specific types
19.4.1 Packing and unpacking structs
337 19.4.1.1 Customizing packing for a particular struct
19.4.1.1.1 do_pack()
338 19.4.1.1.2 do_unpack()
339 19.4.1.2 A simple example of packing
340 19.4.1.3 A simple example of unpacking
341 19.4.2 Packing and unpacking lists
342 19.4.3 Packing and unpacking scalar expressions
19.4.4 Packing and unpacking strings
19.4.5 Packing values for real types
19.5 Implicit packing and unpacking
343 20. Control flow actions
20.1 Conditional actions
20.1.1 if then else
344 20.1.2 case labeled-case-item
345 20.1.3 case bool-case-item
20.2 Iterative actions
346 20.2.1 while
20.2.2 repeat until
347 20.2.3 for each in
348 20.2.4 for each in set
349 20.2.5 for from to
20.2.6 for
350 20.3 File iteration actions
20.3.1 for each line in file
351 20.3.2 for each file matching
20.4 Actions for controlling the program flow
20.4.1 break
352 20.4.2 continue
353 21. Importing and preprocessor directives
21.1 Importing e modules
21.1.1 import
354 21.1.2 Cyclic referencing and importing
21.2 #ifdef, #ifndef
355 21.3 #define
356 21.4 #undef
357 22. Encapsulation constructs
22.1 package: package-name
22.2 package: type-declaration
358 22.3 package | protected | private: struct-member
359 22.4 Scope operator (::)
360 23. Simulation-related constructs
23.1 force
23.2 release
361 23.3 Tick access: ‘hdl-pathname’
362 24. Messages
24.1 Overview
24.2 Message model
24.3 Message execution
363 24.4 Structured debug messages
365 24.4.1 msg_started()
366 24.4.2 msg_ended()
367 24.4.3 msg_transformed()
24.4.4 msg_changed()
368 24.4.5 msg_info()
369 24.5 message and messagef
24.6 Tag
370 24.7 Verbosity
24.8 Predefined type sdm_handler
24.8.1 sdm_handler
371 24.8.2 sdm_started_handler
24.8.3 sdm_ended_handler
24.8.4 sdm_transformed_handler
372 24.8.5 sdm_changed_handler
24.8.6 sdm_info_handler
24.9 Messages Interface
24.9.1 Message configuration and customization
24.9.1.1 Initial presupplied default message settings
24.9.1.2 Modifying initial default message settings
373 24.9.2 Predefined types and methods
24.9.2.1 recording_config
24.9.2.1.1 register_all_field_attributes()
24.9.2.1.2 register_callback_attribute()
374 24.9.2.1.3 register_callback_attributes()
24.9.2.1.4 register_callback_state_var()
24.9.2.1.5 register_field_attribute()
375 24.9.2.1.6 register_field_attributes()
24.9.2.1.7 register_field_state_var()
376 24.9.2.1.8 register_method_attribute()
377 24.9.2.1.9 register_method_state_var()
24.9.2.1.10 set_attribute_format()
378 24.9.2.1.11 set_attribute_sampling()
24.9.2.1.12 set_label_attribute()
379 24.9.2.1.13 set_text_attribute()
24.9.2.1.14 set_text_state_var()
24.9.2.2 any_unit Recording Configuration API extensions
24.9.2.2.1 assign_recording_config()
380 24.9.2.2.2 get_recording_config()
24.9.2.2.3 tr_get_state_var_value()
24.9.2.3 any_struct Recording Configuration API extensions
381 24.9.2.3.1 tr_get_attribute_value()
382 24.9.2.4 tr_sampling_point_t
24.9.2.5 message_manager API
383 24.9.2.5.1 set_screen_messages
384 24.9.2.5.2 set_screen_messages_off
24.9.2.5.3 set_transaction_messages
385 24.9.2.5.4 set_transaction_messages_off
386 24.9.2.5.5 set_file_messages
24.9.2.5.6 set_file_messages_off
387 24.9.2.5.7 set_message_format
24.9.2.6 message_format
388 24.9.2.7 message_action
24.9.2.7.1 get_id()
24.9.2.7.2 get_tag()
24.9.2.7.3 get_verbosity()
389 24.9.2.7.4 get_source_method_layer()
24.9.2.7.5 get_source_line_num()
24.9.2.7.6 get_source_struct()
24.9.2.7.7 get_time()
390 24.9.2.7.8 get_format()
24.9.2.7.9 get_sdm_handler()
24.9.2.8 sdm_handler
24.9.2.8.1 Predefined fields
24.9.2.8.2 get_kind_string()
391 24.9.2.8.3 get_attribute_string()
24.9.2.8.4 collect_text_attributes()
24.9.2.9 sdm_started_handler
24.9.2.9.1 Predefined fields
24.9.2.10 sdm_ended_handler
24.9.2.10.1 Predefined fields
392 24.9.2.11 sdm_transformed_handler
24.9.2.11.1 Predefined fields
24.9.2.12 sdm_changed_handler
24.9.2.12.1 Predefined fields
24.9.2.13 sdm_info_handler
24.9.2.13.1 Predefined fields
24.9.2.14 any_unit message API
24.9.2.14.1 create_formatted_messsage()
394 25. Sequences
25.1 Overview
395 25.1.1 Object model
25.1.2 Virtual sequences
396 25.2 Sequence statement
25.2.1 Predefined sequence kinds
25.2.1.1 MAIN
397 25.2.1.2 SIMPLE
25.2.1.3 RANDOM
398 25.2.2 Examples
25.3 do sequence action
399 25.4 Sequence struct types and members
400 25.4.1 Sequence item API
25.4.2 Sequence API
402 25.4.3 Sequence driver API
404 25.5 BFM-driver-sequence flow diagrams
25.5.1 sequence.start_sequence() flow
25.5.2 do subsequence flow
406 25.5.3 do item flow in pull mode using get_next_item()
25.5.4 do item flow in pull mode using try_next_item()
408 26. List pseudo-methods library
26.1 Pseudo-methods overview
26.2 Using list pseudo-methods
26.3 Pseudo-methods to modify lists
409 26.3.1 add(item)
26.3.2 add(list)
410 26.3.3 add0(item)
26.3.4 add0(list)
411 26.3.5 clear()
26.3.6 delete()
412 26.3.7 fast_delete()
26.3.8 insert(index, item)
413 26.3.9 insert(index, list)
26.3.10 pop()
414 26.3.11 pop0()
26.3.12 push()
415 26.3.13 push0()
26.3.14 push(list)
416 26.3.15 push0(list)
26.3.16 resize()
417 26.4 General list pseudo-methods
26.4.1 all_different()
418 26.4.2 apply()
419 26.4.3 copy()
26.4.4 count()
420 26.4.5 exists()
26.4.6 first()
421 26.4.7 first_index()
26.4.8 flatten()
422 26.4.9 get_indices()
26.4.10 has()
423 26.4.11 is_a_permutation()
26.4.12 is_empty()
424 26.4.13 last()
26.4.14 last_index()
425 26.4.15 max()
26.4.16 max_index()
426 26.4.17 max_value()
26.4.18 min()
427 26.4.19 min_index()
26.4.20 min_value()
428 26.4.21 reverse()
26.4.22 size()
429 26.4.23 sort()
26.4.24 sort_by_field()
430 26.4.25 split()
26.4.26 top()
431 26.4.27 top0()
26.4.28 unique()
432 26.4.29 all()
26.4.30 all_indices()
26.5 Math and logic pseudo-methods
433 26.5.1 and_all()
26.5.2 or_all()
434 26.5.3 average()
26.5.4 product()
435 26.5.5 sum()
26.6 List CRC pseudo-methods
26.6.1 crc_8()
436 26.6.2 crc_32()
437 26.6.3 crc_32_flip()
26.7 Keyed list pseudo-methods
438 26.7.1 key()
26.7.2 key_index()
439 26.7.3 key_exists()
26.7.4 Restrictions on keyed lists
440 27. Predefined methods library
27.1 Predefined methods of sys
27.2 Predefined methods of any_struct
27.2.1 Setting unit relationships
27.2.1.1 get_unit()
27.2.1.2 set_unit()
27.2.2 Methods called during execution phases
27.2.2.1 init() method of any_struct
441 27.2.2.2 pre_generate()
27.2.2.3 post_generate()
27.2.2.4 run() method of any_struct
442 27.2.2.5 quit() method of any_struct
27.2.3 Methods called for customizing specific operations
27.2.3.1 do_pack()
27.2.3.2 do_unpack()
443 27.2.3.3 do_print() method of any_struct
27.2.3.4 print_line() method of any_struct
27.3 Methods and predefined attributes of unit any_unit
444 27.4 Set Pseudo-methods
27.4.1 union()
27.4.2 intersect()
27.4.3 diff()
445 27.4.4 size()
27.4.5 uint_size()
27.4.6 size_is_uint()
446 27.4.7 min()
27.4.8 uint_min()
27.4.9 min_is_uint()
447 27.4.10 int_min()
27.4.11 min_is_int()
27.4.12 max()
448 27.4.13 uint_max()
27.4.14 max_is_uint()
27.4.15 int_max()
449 27.4.16 max_is_int()
27.4.17 get_all_ranges()
27.4.18 collect_all_ranges()
450 27.4.19 get_range()
27.4.20 get_range_below()
451 27.4.21 get_range_above()
27.5 Other pseudo-methods
452 27.5.1 copy() method of any_struct
27.5.2 as_a()
27.5.3 get_enclosing_unit()
453 27.5.4 to_string()
27.5.5 try_enclosing_unit()
27.6 Coverage methods
454 28. Predefined routines library
28.1 Deep copy and compare routines
28.1.1 deep_copy()
455 28.1.2 deep_compare()
457 28.1.3 deep_compare_physical()
28.2 Integer arithmetic routines
458 28.2.1 min()
28.2.2 max()
28.2.3 abs()
459 28.2.4 odd()
28.2.5 even()
28.2.6 ilog2()
460 28.2.7 ilog10()
28.2.8 ipow()
28.2.9 isqrt()
461 28.2.10 div_round_up()
28.3 Real arithmetic routines
462 28.4 bitwise_op()
463 28.5 get_all_units()
28.6 String routines
28.6.1 append()
464 28.6.2 appendf()
28.6.3 bin()
465 28.6.4 dec()
28.6.5 hex()
28.6.6 quote()
466 28.6.7 str_chop()
28.6.8 str_empty()
28.6.9 str_exactly()
467 28.6.10 str_insensitive()
28.6.11 str_join()
28.6.12 str_len()
468 28.6.13 str_lower()
28.6.14 str_match()
469 28.6.15 str_pad()
28.6.16 str_replace()
470 28.6.17 str_split()
28.6.18 str_split_all()
471 28.6.19 str_sub()
28.6.20 str_upper()
28.7 Output routines
472 28.7.1 out()
28.7.2 outf()
28.7.3 Format string
473 28.8 Operating system interface routines
474 28.8.1 spawn()
28.8.2 spawn_check()
28.8.3 system()
475 28.8.4 output_from()
28.8.5 output_from_check()
28.8.6 get_symbol()
476 28.8.7 date_time()
28.8.8 getpid()
477 28.9 set_config()
28.10 Random routines
28.11 Simulation-related routines
478 28.11.1 simulator_command()
28.11.2 stop_run()
479 28.11.3 get_timescale()
480 29. Predefined file routines library
29.1 File names and search paths
29.2 File handles
29.3 Low-level file methods
29.3.1 add_file_type()
481 29.3.2 close()
29.3.3 flush()
482 29.3.4 open()
29.3.5 read()
483 29.3.6 read_lob()
29.3.7 write()
484 29.3.8 write_lob()
29.3.9 writef()
485 29.4 General file routines
29.4.1 file_age()
29.4.2 file_append()
486 29.4.3 file_copy()
29.4.4 file_delete()
29.4.5 file_exists()
487 29.4.6 file_extension()
29.4.7 file_is_dir()
488 29.4.8 file_is_link()
29.4.9 file_is_readable()
29.4.10 file_is_regular()
489 29.4.11 file_is_temp()
29.4.12 file_is_text()
490 29.4.13 file_rename()
29.4.14 file_size()
29.4.15 new_temp_file()
491 29.4.16 write_string_list()
29.5 Reading and writing structs
29.5.1 read_ascii_struct()
492 29.5.2 read_binary_struct()
29.5.3 write_ascii_struct()
493 29.5.4 write_binary_struct()
494 30. Reflection API
30.1 Introduction
30.1.1 Representation
30.1.2 Structure
30.1.3 Terminology and conventions
495 30.2 Type information
30.2.1 Named entities
30.2.1.1 rf_named_entity
30.2.1.2 rf_type
496 30.2.2 Struct types: rf_struct
497 30.2.3 Struct members
498 30.2.3.1 rf_struct_member
30.2.3.2 rf_field
499 30.2.3.3 rf_deep_attr
30.2.3.4 rf_method
500 30.2.3.5 rf_parameter
30.2.3.6 rf_event
501 30.2.3.7 rf_expect
30.2.3.8 rf_check
30.2.3.9 rf_constraint
30.2.4 Inheritance and when subtypes
502 30.2.4.1 Canonical names
30.2.4.2 Explicit and significant subtypes
30.2.4.3 Generalized relationships
503 30.2.4.4 rf_like_struct
30.2.4.5 rf_when_subtype
504 30.2.5 List types
30.2.5.1 rf_list
30.2.5.2 rf_keyed_list
30.2.6 Scalar types
30.2.6.1 rf_scalar
505 30.2.6.2 rf_numeric
30.2.6.3 rf_enum
30.2.6.4 rf_enum_item
30.2.6.5 rf_bool
506 30.2.6.6 rf_real
30.2.6.7 rf_set
30.2.6.8 rf_string
30.2.7 Port types
30.2.7.1 rf_port
30.2.7.2 rf_simple_port
507 30.2.7.3 rf_buffer_port
30.2.7.4 rf_event_port
30.2.7.5 rf_method_port
30.2.7.6 rf_interface_port
30.2.7.7 rf_tlm_socket
30.2.8 Sequence types
30.2.8.1 rf_sequence
30.2.8.2 rf_bfm_sequence
30.2.8.3 rf_virtual_sequence
508 30.2.9 Template types
30.2.9.1 rf_template
30.2.9.2 rf_template_instance
30.2.10 Macros: rf_macro
509 30.2.11 Routines: rf_routine
30.2.12 Querying for types: rf_manager
510 30.3 Aspect information
30.3.1 Definition elements
30.3.1.1 Extensible entities and layers
511 30.3.1.2 Anomalies of definition elements
30.3.1.3 rf_definition_element
512 30.3.2 Type layers
30.3.2.1 rf_type_layer
30.3.2.2 rf_enum_layer
30.3.2.3 rf_struct_layer
513 30.3.3 Struct member layers
30.3.3.1 rf_struct_member_layer
30.3.3.2 rf_method_layer
514 30.3.3.3 rf_extension_mode
30.3.3.4 rf_event_layer
30.3.3.5 rf_check_layer
30.3.3.6 rf_expect_layer
30.3.3.7 rf_check_action
515 30.3.3.8 rf_constraint_layer
30.3.4 Modules and packages
30.3.4.1 rf_module
516 30.3.4.2 rf_package
30.3.5 Querying for aspects
30.4 Value query and manipulation
517 30.4.1 Types of objects
30.4.2 Values and value holders
518 30.4.3 Object operators
519 30.4.4 List operators
521 31. Predefined resource sharing control structs
31.1 Semaphore methods
522 31.2 How to use the semaphore struct
31.2.1 up() and down()
523 31.2.2 try_up() and try_down()
31.2.3 set_value() and get_value()
524 31.2.4 set_max_value() and get_max_value()
525 31.2.5 lock() and release()
526 32. Intellectual property protection
32.1 Encryption
32.2 Decryption
527 32.3 Reflection API
32.4 Encryption targets
528 Annex A (informative) Bibliography
529 Annex B (normative) Source code serialization
B.1 Ordering problem in e
530 B.2 Within a single module
B.2.1 Use scope
B.2.2 Definition order
531 B.3 Importing and dependency
532 B.4 Concrete load order
533 B.5 Visibility scope of preprocessor directives
B.5.1 Overview
534 B.5.2 Cases where order differs
B.5.2.1 Case 1
B.5.2.2 Case 2
535 B.5.3 Examples
537 Annex C (informative) Comparison of when and like inheritance
C.1 Summary of when versus like
C.1.1 A simple example of when inheritance
539 C.1.2 A simple example of like inheritance
540 C.2 Advantages of using when inheritance for modeling
C.2.1 Determinant fields can be explicitly referenced
541 C.2.2 Multiple orthogonal subtypes can be used
542 C.2.3 Lists of objects with varying subtypes can be used
543 C.2.4 The struct can be extended later
C.2.5 A new type can be created by simple extension
C.3 Advantages of using like inheritance
544 C.4 When to use like inheritance
545 Annex D (normative) Name spaces
D.1 The naming problem in e
D.2 Resolution overview
D.2.1 Packages as name spaces
D.2.2 Name spaces for other named entities
546 D.2.3 Name resolution
D.2.4 The use relation
D.2.5 Reserved type names
D.3 Qualified and unqualified names
D.3.1 Name rules
547 D.3.2 Type reference resolution
D.3.3 e_core types
D.4 Use relation
548 D.4.1 Load clusters
D.4.2 Examples
D.4.2.1 Example 1
549 D.4.2.2 Example 2
D.4.2.3 Example 3
550 D.5 Built-in APIs
D.5.1 Reflection and name spaces
D.5.2 Coverage callback support
551 D.6 Code comparison
553 Annex E (informative) Reflection API examples
E.1 Type information interface
554 E.2 Aspect information interface
555 E.3 Value query interface
557 Annex F (informative) Encryption targets
F.1 Files
F.2 IP Components
IEEE 1647 2016
$182.00