UVM 1.2 Release Notes

# UVM 1. 2 Release Notes

Summary

UVM 1. 2 Release Notes
General Overview | This is release 1.2 of the Universal Verification Methodology (UVM) reference implementation from Accellera.
What’s Changed | Release 1.2 contains enhancements and fixes to errata.
1. 1 to 1. 2 Migration Script | Many of the backwards compatibility concerns caused when transitioning from UVM version 1.1 to 1.2 can be addressed with a reasonably simple search-and-replace in user code.
Mantis 3407 (+) | uvm_event should be a parameterized class
Mantis 3472 (*) | Deprecate get_config/set_config interface for configuration
Backwards Compatibility | Care must be taken when switching from set_config_object and get_config_object to uvm_config_object, as the clone functionality of the old API no longer exists.
Mantis 3557 | ref guide doesn’t show names of UVM runtime phases
Mantis 3586 (+) | UVM_DISABLE_AUTO_ITEM_RECORDING should be a run_time option
Mantis 3693 (+) | Setting enum values by name from command line doesn’t work
Mantis 3741 (+) | Phase’s default sequence should also have get_config string support
Mantis 3783 | Remove all $display calls from BCL, except report_server
Mantis 3887 (*) | request facility to identify unused factory overrides
Backwards Compatibility: | The undocumented uvm_pkg::factory variable has been removed, as it was unsafe during static initialization, and incompatible with the uvm_coreservice_t class.
Mantis 3893 (+) | Feature request to create a non-hierarchical objection
Mantis 3901 | Feature request to prevent objection from throwing decrement-below-zero error if the count is 0
Mantis 4032 (+) | Not possible to undo a factory override.
Mantis 4091 | bug in the get_full_name method of uvm_reg_file.
Mantis 4160 | uvm_comparer not using verbosity setting for print_msg()
Mantis 4181 (+) | transaction order unclear and cant be changed when bus/reg size differ
Mantis 4253 | Volatile fields should always need updating
Mantis 4269 (*) | Add UVM_ prefix to enumerated values
Backawards Compatibility | References to the values within uvm_sequence_state_enum and uvm_sequencer_arb_mode must now be prefixed with UVM_.
Mantis 4306 | Bad reference to “record_field_int” in reference guide
Mantis 4307 | Bad reference to “DEC” in reference guide
Mantis 4366 (+) | uvm_sequence_library documentation missing from html documentation
Mantis 4378 | Documentation of uvm_component::set_inst_override_by_type() incorrectly documents uvm_factory::set_inst_override_by_type()
Mantis 4382 (+) | some symbols in uvm_radix_enum undocumented
Mantis 4389 (+) | Deprecate hierarchical propagation of objections; add mode bit in interim
Mantis 4391 | Redundant code in uvm_port_base
Mantis 4416 (*) | Remove the confusing uvm_severity type
Backwards Compatibility | This change should have minimal effect on user code, as the old type was simply deprecated, as opposed to removed.
Mantis 4418 | set_report_verbosity doc unclear about setting value or threshold
Mantis 4425 | BUSY flag not cleared when register model is reset
Mantis 4430 (+) | Refactor start_phase_sequence logic to be able to kill sequence on phase ending
Backwards Compatibility | While technically acting different than the previous implementation, it is unlikely that this will result in any backwards incompatibility challenges, as the old mechanism simply terminated the process which launched the default_sequence, resulting in a “zombie” sequence.
Mantis 4431 (*)(+) | Enhance uvm_sequence::starting_phase
Backwards Compatibility | This change could potentially effect users, as references to the uvm_sequence_base::starting_phase variable will now miscompile.
Mantis 4432 (+) | Provide auto-object-to-phase in uvm_sequence_base
Mantis 4433 (*) | Clean up the number of objections created by phasing
Backwards Compatibility | While technically acting different than the previous implementation, it is unlikely that this will result in any backwards incompatibility challenges.
Mantis 4434 (+) | Provide get_objection_count in uvm_phase
Mantis 4439 (+) | seq_item_port.put_response is not documented
Mantis 4440 | jump logic too early in phase state pipeline
Mantis 4469 (+) | Provide schedule introspection via get_predecessor/successor_nodes
Mantis 4476 (+) | uvm_sequence fields req/rsp are not documented
Mantis 4488 (+) | sequencer_base should throw error if user allows wait_for_relevant to return while is_relevant=0
Mantis 4513 (+) | Add uvm_mem_mam_policy allocator to uvm_vreg::allocate()
Mantis 4516 (*) | Remove the unnecessary over-prioritization of uvm_sequence_base in default_sequence
Backwards Compatibility | While technically acting different than the previous implementation, it is unlikely that this will result in any backwards incompatibility challenges.
Mantis 4517 (+) | Add phase-transition callbacks
Mantis 4518 (*)(+) | Make UVM_OBJECT_MUST_HAVE_CONSTRUCTOR the default behavior
Why uvm_object constructors are now mandatory | The UVM recommends that the following constructor be specified for any class extended from uvm_object:
Backwards Compatibility | In UVM 1.2, the UVM object factory now requires that uvm_object have a constructor with a name argument.
Code migration script | Suitable constructors may be automatically added to classes that are missing them by using the add_uvm_object_new.pl script.
Migrating code using UVM 1.2 | To ease the process of migrating code to UVM 1.2, the old (incorrect) behavior remain available.
What will happen in UVM 1.3? | In UVM 1.3, the UVM object factory will have the corrected behavior ONLY.
Mantis 4519 (+) | Enable all flavors of phase jumping
Mantis 4532 | uvm_reg_access_seq ignoring regs with one RO field
Mantis 4533 | initialized memory on DPI side may survive reset and will cause bad behaviour
Mantis 4542 | uvm_test_done should be made “const”
Backwards Compatibility | The uvm_test_done variable is not part of the UVM standard, but may have been used by users coming from the OVM.
Mantis 4550 | are uvm tlm connections with non-uvm_object a legal/supported use model?
Mantis 4553 (+) | Infinite recursion in uvm_reg_field::get_access
Mantis 4548 | cleanup static dpi issues
Mantis 4566 | comparer.show_max can cause check to pass when length mismatches
Mantis 4567 | uvm_reg::do_predict ignoring UVM_NOT_OK
Mantis 4570 (*)(+) | Messaging System Revamp
Backwards Compatibility | The uvm_report_server::process_report and uvm_report_server::compose_message methods have been replaced by the object-based uvm_report_server::execute_report_message and uvm_report_server::compose_report_message methods.
Migrating code using UVM 1.2 | To ease the process of migrating code to UVM 1.2, the old behavior remains available to the user.
Mantis 4572 | packing/unpacking issues
Mantis 4587 | Bugs in UVM 1.1-c: uvm_reg_tlm_adapter::reg2bus()
Mantis 4588 | in-built sequence is not equipped to exclude a block from the test sequence
Mantis 4590 | update uvm_hdl.c to allow VCS/IUS to perform backdoor access to VHDL
Mantis 4606 | uvm_report_server is not really extendable/chainable
Backwards Compatibility | If users had previously extended uvm_report_server, then their code will likely no longer compile because they are not fully implementing the pure virtual interface which the report server now provides.
Mantis 4617 | uvm_report_cb::add_by_name example needs review
Mantis 4618 (*) | resource lookup broken/undefined when fieldname has wildcards
Backwards Compatibility | The previous behavior for meta characters within the field name was not fully defined.
Mantis 4621 | printing of int fields will mask Z values with X
Mantis 4622 | uvm_phase::unsync() does not work
Mantis 4643 | uvm_dpi_get_next_arg_c doesnt fully adhere to -1800-lrm
Mantis 4649 (+)(*) | Improve memory performance of ‘bitstream’ interfaces for report/record/etc.
Backwards Compatibility | In order to provide a consistent API, the uvm_printer::print_int method was deprecated and replaced by uvm_printer::print_field_int.
Mantis 4666 | uvm_config_db::set expects to be invoked in process context
Mantis 4677 | remove uvm_global_copy_map
Mantis 4686 (+) | predict updated not just the mirrored field
Mantis 4690 | Typo in uvm_sequence_base.vh (mehod should be method)
Mantis 4711 | uvm macros violate 1800lrm iterator requirements
Mantis 4731 | Static initialization races
Mantis 4732 (+) | uvm_phase_state initializes to incorrect value
Mantis 4734 | Bug in uvm_reg_map::get_size();
Mantis 4738 | DPI Code does not use UVM Messaging
Mantis 4743 (+) | Promote get_next_item, try_next_item, item_done, get, peek, and put to be a part of the standard
Mantis 4744 (*)(+) | Recording System Revamp
Backwards Compatibility | The changes made to the uvm_recorder API were primarily isolated to undocumented and non-standardized methods within uvm_recorder class.
Mantis 4766 (*) | Fix broken `uvm_record_field + `uvm_record_attribute interaction
Backwards Compatibility | Vendors which had provided an implementation of the `uvm_record_attribute macro need to add an implementation of uvm_recorder::use_record_attribute in their recorders to allow compatibility with the new macro implementation.
Mantis 4767 (+) | `uvm_pack_int and `uvm_unpack_int bypass the uvm_packer policy methods
Mantis 4772 | separate uvm_hdl* source into files-by-vendor
Mantis 4783 (*) | `uvm_record_* macros bypass uvm_recorder policy class
Backwards Compatibility | The changes to the macros should be transparent to most end users, however developers which were supporting the old undocumented macros may need to update their implementations.
Mantis 4786 (+) | print_real is undocumented
Mantis 4784 (+) | `uvm_record_int/string/time/real are undocumented
Mantis 4861 | Adding a uvm_reg_map to an existing regmap instance required both maps to have the same parent.
Mantis 4871 | Fixed a problem wherein multiple +uvm_set_* commands were ignored after a format error.
Mantis 4882 | The instance name of the phase objection was changed to reflect the name of the phase.
Mantis 4884 | A performance fix was implemented which avoided the copy of large QDA within the spell checker.
Mantis 4893 | Fixed a bug within uvm_leaf_scope which could lead to stall of simulation.
Mantis 4920 | Fixed random stability bug in lookup_name which caused instability when the config database was queried.
Mantis 4923 | A check was added for an out-of-bound queue access in uvm_misc.svh.
Mantis 4925 | The macros `UVM_MAX_STREAMBITS, `UVM_PACKER_MAX_BYTES and `UVM_DEFAULT_TIMEOUT were relocated to src/macros/uvm_global_defines.svh, which is included via uvm_macros.svh.
Mantis 4931 | Various typos and bad links within the reference guide were corrected.

### General Overview

This is release 1.2 of the Universal Verification Methodology (UVM) reference implementation from Accellera. This distribution includes a SystemVerilog based class library, examples, UVM Stardard Reference (PDF and HTML), and a User’s Guide.

The class library is a reference implementation of the standard. It, the examples, and User Guide provide guidance to users of the standard. For additional information on the Accellera standard, see

http://www.accellera.org/activities/vip

A good source for information, answers, and resources is http://www.accellera.org/community/uvm. It contains forums on methodology, tool specific issues, and commercial announcements. It also has links to additional resources, Accellera sponsored events, and other UVM events.

### What’s Changed

Release 1.2 contains enhancements and fixes to errata.

UVM 1.2 fixes the following enhancements and issues reported under the Mantis bug-tracking system. Issues affecting the reference documentation (API changes or semantic changes) are follwed with a plus sign (+). Issues affecting backward compatibility are folled with an asterisk (*)

For detailed information on a specific issue, refer to the Mantis database at http://www.eda.org/svdb/view.php?id=<id>, where <id> is the Mantis id.

### 1. 1 to 1. 2 Migration Script

Many of the backwards compatibility concerns caused when transitioning from UVM version 1.1 to 1.2 can be addressed with a reasonably simple search-and-replace in user code. To that end, the uvm11-to-uvm12.pl is provided.

The following command will update all SystemVerilog source files located in the current working directory and any sub-directory:

>     % uvm11-to-uvm12.pl --write

See the --help command-line option for additional details.

The script may not be able to automatically identify all cases of backwards incompatibility, and the user may need to fix some manually. Because most of these issues will result in a compile-time error, they should be easy to identify.

### Mantis 3407 (+)

uvm_event should be a parameterized class

The uvm_event class was split into two classes, an abstract uvm_event_base, and a parameterized uvm_event#(T).

This should have minimal backwards compatibility concerns, as any code using uvm_event without explicitly declaring a #(T) will default to uvm_event#(uvm_object).

### Mantis 3472 (*)

Deprecate get_config/set_config interface for configuration

The methods set_config_int, set_config_string and set_config_object (and their get counterparts) are now deprecated in favor of uvm_config_int, uvm_config_string and uvm_config_object.

### Backwards Compatibility

Care must be taken when switching from set_config_object and get_config_object to uvm_config_object, as the clone functionality of the old API no longer exists.

### Mantis 3557

ref guide doesn’t show names of UVM runtime phases

The documentation for UVM Common Phases and UVM Run-Time Phases has been updated to include a definition of how phases are named.

### Mantis 3586 (+)

UVM_DISABLE_AUTO_ITEM_RECORDING should be a run_time option

uvm_sqr_if_base#(REQ,RSP)::disable_auto_item_recording and uvm_sqr_if_base#(REQ,RSP)::is_auto_item_recording_enabled have been added to the uvm_sqr_if_base#(REQ,RSP) class, allowing the driver runtime control over whether or not a sequencer should automatically record the items which flow through the sequence item port.

### Mantis 3693 (+)

Setting enum values by name from command line doesn’t work

The uvm_enum_wrapper#(T) utility class has been added, which provides the ability to retrieve an enum value when provided with a string matching the enum.name() for that value.

This class is used by the `uvm_field_enum macro when performing auto-configuration, such that values can be set using uvm_config_db#(string) (or the uvm_cmdline_processor::+uvm_set_config_string plusarg).

### Mantis 3741 (+)

Phase’s default sequence should also have get_config string support

A new plusarg has been added (uvm_cmdline_processor::+uvm_set_default_sequence) which allows for the default_sequence a sequencer executes in uvm_sequencer_base::start_phase_sequence to be set directly from the command line.

General support for setting default_sequence as a string was not provided, as during runtime the default_sequence should always be set using either uvm_sequence_base or uvm_object_wrapper.

### Mantis 3783

Remove all $display calls from BCL, except report_server

All messaging is now routed via uvm_report_server.

### Mantis 3887 (*)

request facility to identify unused factory overrides

The uvm_factory class was split into two classes, an abstract uvm_factory, a default implementation of uvm_default_factory. This allows for alternate factories (including those with additional debug functionality) to be created.

Control over the global factory was migrated to the new uvm_coreservice_t class.

### Backwards Compatibility:

The undocumented uvm_pkg::factory variable has been removed, as it was unsafe during static initialization, and incompatible with the uvm_coreservice_t class. References to this variable need to be upgraded to retrieve the factory via uvm_factory::get.

### Mantis 3893 (+)

Feature request to create a non-hierarchical objection

uvm_objection::set_propagate_mode has been added to provide control over whether or not objections propagate.

### Mantis 3901

Feature request to prevent objection from throwing decrement-below-zero error if the count is 0

An error is no longer produced if uvm_objection::drop_objection is called with a count of 0, when the current object count is 0.

### Mantis 4032 (+)

Not possible to undo a factory override.

A factory override can now be “undone” by supplying a type as an override for itself.

i.e.

>     // Perform an override
>     set_type_override_by_type(old_type::get_type(), new_type::get_type());
>     // Undo the override
>     set_type_override_by_type(old_type::get_type(), old_type::get_type());

### Mantis 4091

bug in the get_full_name method of uvm_reg_file.

The get_full_name method of uvm_reg_file now includes the top-level block name.

### Mantis 4160

uvm_comparer not using verbosity setting for print_msg()

The uvm_comparer::print_msg method now obeys the uvm_comparer::verbosity setting.

### Mantis 4181 (+)

transaction order unclear and cant be changed when bus/reg size differ

The ordering of transactions generated when the size of a register/field is different than the size of the bus can now be controlled via the new uvm_reg_transaction_order_policy class.

### Mantis 4253

Volatile fields should always need updating

Volatile register fields will always cause a write(), even if mirrored and desired values are the same.

### Mantis 4269 (*)

Add UVM_ prefix to enumerated values

Various top-level enumeration values (such as those declared in uvm_sequence_state_enum) did not have the UVM_ prefix. This would cause compilation errors when the uvm_pkg was wildcard imported into a scope which had already declared the same names. These enumerations have been corrected to include the proper UVM_ prefix.

### Backawards Compatibility

References to the values within uvm_sequence_state_enum and uvm_sequencer_arb_mode must now be prefixed with UVM_.

### Mantis 4306

Bad reference to “record_field_int” in reference guide

A bad reference to record_field_int has been corrected to record_field inside of uvm_recorder.

### Mantis 4307

Bad reference to “DEC” in reference guide

Bad references to “DEC” have been corrected to UVM_DEC within uvm_object::do_print and uvm_object::do_record.

### Mantis 4366 (+)

uvm_sequence_library documentation missing from html documentation

The uvm_sequence_library class has been updated from “beta” to “official” status. As such, it is now documented in the reference guide.

### Mantis 4378

Documentation of uvm_component::set_inst_override_by_type() incorrectly documents uvm_factory::set_inst_override_by_type()

The documentation of uvm_component::set_inst_override_by_type as been updated to reflect the proper ordering of the parameters to uvm_factory::set_inst_override_by_type.

### Mantis 4382 (+)

some symbols in uvm_radix_enum undocumented

Documentation was added for UVM_UNFORMAT2, UVM_UNFORMAT4, UVM_REAL, UVM_REAL_DEC, and UVM_REAL_EXP within the uvm_radix_enum.

### Mantis 4389 (+)

Deprecate hierarchical propagation of objections; add mode bit in interim

Mantis 3893 (+) provides the mode bit for controlling propagation of objections. Hierarchical propagation was not outright deprecated in this release.

### Mantis 4391

Redundant code in uvm_port_base

Some redundant code in the uvm_port_base#(IF) was removed.

### Mantis 4416 (*)

Remove the confusing uvm_severity type

The confusing uvm_severity_type was deprecated, and replaced internally using uvm_severity.

### Backwards Compatibility

This change should have minimal effect on user code, as the old type was simply deprecated, as opposed to removed. The 1.1 to 1.2 Migration Script can be used to replace any occurances of the old type in user code.

### Mantis 4418

set_report_verbosity doc unclear about setting value or threshold

The documentation of uvm_report_object::set_report_verbosity_level, uvm_report_object::set_report_id_verbosity, and uvm_report_object::set_report_severity_id_verbosity were updated to provide a clearer definition of exactly what the verbosity values implied.

### Mantis 4425

BUSY flag not cleared when register model is reset

The register model was updated to clear the BUSY flag when reset.

### Mantis 4430 (+)

Refactor start_phase_sequence logic to be able to kill sequence on phase ending

The method uvm_sequencer_base::stop_phase_sequence was added which acts as the bookend to uvm_sequencer_base::start_phase_sequence. It will call uvm_sequence_base::kill on the default_sequence if the sequence is still executing when the phase ends.

### Backwards Compatibility

While technically acting different than the previous implementation, it is unlikely that this will result in any backwards incompatibility challenges, as the old mechanism simply terminated the process which launched the default_sequence, resulting in a “zombie” sequence.

### Mantis 4431 (*)(+)

Enhance uvm_sequence::starting_phase

The uvm_sequence_base::starting_phase variable was publicly accessible and not protected from writes-after-reads. This would result in strange behavior (including FATALS and HANGS) if the value was changed between a raise and drop of the objection within the phase.

The variable was removed, and is now only accessible via the uvm_sequence_base::set_starting_phase and uvm_sequence_base::get_starting_phase accessors. An error will be thrown if there are any attempts to ‘set’ the starting phase after it has been retrieved via a ‘get’.

### Backwards Compatibility

This change could potentially affect users, as references to the uvm_sequence_base::starting_phase variable will now miscompile (unless the deprecated behavior is restored by either defining UVM_DEPRECATED_STARTING_PHASE or not defining UVM_NO_DEPRECATED). The 1.1 to 1.2 Migration Script can be used to search-and-replace within the user code, updating it to the new methods.

### Mantis 4432 (+)

Provide auto-object-to-phase in uvm_sequence_base

The uvm_sequence_base::set_automatic_phase_objection method was added, simplifying the code required to object to the starting_phase inside of a phase.

### Mantis 4433 (*)

Clean up the number of objections created by phasing

Objections only make sense in uvm_task_phases which are of the UVM_PHASE_IMP type. For all other phases and types, the objections have been removed, and any attempt to access the objection will result in an error.

### Backwards Compatibility

While technically acting different than the previous implementation, it is unlikely that this will result in any backwards incompatibility challenges. Any user code which would cause the error to occur would have been silently ignored by the library in the past, which meant that whatever the user was trying to do wouldn’t have worked.

### Mantis 4434 (+)

Provide get_objection_count in uvm_phase

The method uvm_phase::get_objection_count was added, providing the user with a cleaner mechanism for dropping all raised objections.

>     // Old Code:
>     uvm_objection phase_done;
>     phase_done = phase.get_objection();
>     phase_done.drop_objection(this,
>                               "dropping all objections",
>                               phase_done.get_objection_count(this));

>     // New Code:
>     phase.drop_objection(this,
>                          "dropping all objections",
>                          phase.get_objection_count(this));

### Mantis 4439 (+)

seq_item_port.put_response is not documented

The previously undocumented uvm_sqr_if_base#(REQ,RSP)::put_response was added to the standard, providing a non-blocking mechanism for sending response information from a driver.

### Mantis 4440

jump logic too early in phase state pipeline

The previous implementation of the jump logic uvm_phase caused jumps during the phase_ended callback to be ignored. This has been corrected.

### Mantis 4469 (+)

Provide schedule introspection via get_predecessor/successor_nodes

The uvm_phase::get_adjacent_predecessor_nodes and uvm_phase::get_adjacent_successor_nodes methods were adding the uvm_phase api. This provides the user with the ability to programmatically traverse the entire phase graph.

### Mantis 4476 (+)

uvm_sequence fields req/rsp are not documented

The previously undocumented uvm_sequence#(REQ,RSP)::req and uvm_sequence#(REQ,RSP)::rsp fields were added to the standard.

### Mantis 4488 (+)

sequencer_base should throw error if user allows wait_for_relevant to return while is_relevant=0

An error will now be thrown if the sequencer exceeds the allowable number of returns from uvm_sequence_base::wait_for_relevant without uvm_sequence_base::is_relevant returning true. The allowable maximum number can be controlled via the uvm_sequencer_base::set_max_zero_time_wait_relevant_count method.

### Mantis 4513 (+)

Add uvm_mem_mam_policy allocator to uvm_vreg::allocate()

The uvm_vreg::allocate API was expanded to include an optional third alloc argument.

### Mantis 4516 (*)

Remove the unnecessary over-prioritization of uvm_sequence_base in default_sequence

The previous implementation of uvm_sequencer_base over-prioritized default_sequence configurations which were of type uvm_sequence_base, such that they would override configurations of type uvm_object_wrapper, even if the wrapper configurations were done with higher precedence.

### Backwards Compatibility

While technically acting different than the previous implementation, it is unlikely that this will result in any backwards incompatibility challenges. The previous implementation would have resulted in unexpected behavior at best.

### Mantis 4517 (+)

Add phase-transition callbacks

The uvm_phase_cb and uvm_phase_cb_pool were added to provide additional hooks into the phasing API.

### Mantis 4518 (*)(+)

Make UVM_OBJECT_MUST_HAVE_CONSTRUCTOR the default behavior

Mantis 3770 provided the ability to optionally enforce an explicit constructor with a string-type name argument in the UVM 1.1a, via the `UVM_OBJECT_MUST_HAVE_CONSTRUCTOR symbol. This functionality is now the default behavior for the UVM.

### Why uvm_object constructors are now mandatory

The UVM recommends that the following constructor be specified for any class extended from uvm_object:

>     class my_obj extends uvm_object;
>         ...
>         `uvm_object_utils(my_obj)

>         function new(string name = "my_obj")
>           super.new(name);
>           ...
>         endfunction
>         ...
>     endclass

However, in UVM 1.0 and UVM 1.1, the presence of such a constructor were not enforced by the library and they were technically optional. If no constructor was specified, a default constructor was provided by SystemVerilog:

>     class my_obj extends uvm_object;
>         ...
>         `uvm_object_utils(my_obj)

>         function new();
>         endfunction
>         ...
>     endclass

Note the important difference: in the default constructor, there is no name argument. Because the factory could not rely on the presence of that argument, uvm_object instances were created by calling new() without any arguments and subsequently setting the object instance name using uvm_object::set_name.

>     obj = new();
>     if (name != "") obj.set_name(name);

In most cases, this difference was not significant. However, for any class that makes use of the value of the name argument in the constructor,

>     class my_obj extends uvm_object;
>         your_obj sub;

>         `uvm_object_utils(my_obj)

>         function new(string name = "my_obj")
>           super.new(name);
>           sub = your_obj::type_id::create({name,".sub"});
>         endfunction
>         ...
>     endclass

a difference in behavior was observed between instantiating an object directly:

>     my_obj o = new("o");

and instantiating an object via the factory:

>     my_obj o = my_obj::type_id::create("o");

The difference could have been worked around by overriding the uvm_object::set_name method to percolate the effect of the name change. However, that work-around was often impossible or too late. In the examples above, the former creates an instance of your_obj named “o.sub” whereas the latter creates an instance named “my_obj.sub”. It made it impossible to control the sub-object factory based on the parent object name.

Instantiating coverage group is another example where the work-around did not work. Coverage groups cannot be renamed and must be instantiated in the encapsulating object’s constructor. The following example would create coverage groups that are always named “my_obj” when using the object factory.

>     class my_obj extends uvm_object;
>         covergroup my_cg(string name);
>            option.name = name;
>            ...
>         endgroup

>         `uvm_object_utils(my_obj)

>         function new(string name = "my_obj")
>           super.new(name);
>           my_cg = new(name);
>         endfunction
>         ...
>     endclass

Because the object factory is such a fundamental element of UVM, it is important that it be able to rely on the presence of a name argument in object constructors.

### Backwards Compatibility

In UVM 1.2, the UVM object factory now requires that uvm_object have a constructor with a name argument. Should this constructor be missing, a syntax error will be issued. However, because much of the factory code is hidden in the utility macros, the syntax error may not point to the ultimate cause of the problem and may be confusing the diagnose.

For example, this simple file

>     `include "uvm_macros.svh"
>     program test;

>     import uvm_pkg::*;

>     class my_obj extends uvm_object;
>        `uvm_object_utils(my_obj)
>     endclass

>     endprogram

will produce the following error messages:

#### Questa

>     TBD

#### IUS

>     file: test.sv
>     `uvm_object_utils(my_obj)
>                             |
>     ncvlog: *E,TOOMAC (test.sv,8|24): too many actual arguments [10.2.2][10.3(IEEE)].

#### VCS

>     Error-[TMAFTC] Too many arguments to function/task call
>     $UVM_HOME/src/base/uvm_registry.svh, 197
>     "my_obj::new(name)"
>       The above function/task call is done with more arguments than needed.

>     Error-[TMAFTC] Too many arguments to function/task call
>     test.sv, 6
>     "my_obj::new(name)"
>       The above function/task call is done with more arguments than needed.

When using VCS, ignore the first message reported in uvm_registry.svh and focus on the subsequent one identifying the invalid constructor being called. The reported line number will be on the endclass token of the class that is missing the required constructor.

### Code migration script

Suitable constructors may be automatically added to classes that are missing them by using the add_uvm_object_new.pl script. The following command will update all SystemVerilog source files located in the current working directory and any sub-directory:

>     % add_uvm_object_new.pl --write

See the --help command-line option for more details.

The script may not be able to automatically identify all classes with missing constructors, or users may prefer to manually modify their source files. The script is also unable to fix unsuitable constructors; those will need to be fixed manually. Because the error is a compile-time error, it will be easy to identify any remaining changes that are required.

### Migrating code using UVM 1.2

To ease the process of migrating code to UVM 1.2, the old (incorrect) behavior remain available. To restore the old behavior, it is necessary to define the `UVM_OBJECT_DO_NOT_NEED_CONSTRUCTOR symbol when compiling the UVM library:

>     % ... +define+UVM_OBJECT_DO_NOT_NEED_CONSTRUCTOR uvm_pkg.sv

Users must be aware that this may result in difference in behavior in code that now relies on the correct implementation of the UVM object factory.

### What will happen in UVM 1.3?

In UVM 1.3, the UVM object factory will have the corrected behavior ONLY. The old (incorrect) behavior will no longer remain available.

This is to encourage users to migrate their code forward and enable VIP providers to eventually rely on the correct behavior of the UVM object factory.

### Mantis 4519 (+)

Enable all flavors of phase jumping

The uvm_phase’s jump API was extended to include uvm_phase::set_jump_phase and uvm_phase::end_prematurely. These methods allow for a “softer” jump wherein the phase’s execution is not immediately terminated.

### Mantis 4532

uvm_reg_access_seq ignoring regs with one RO field

The uvm_reg_access_seq implementation was incorrectly skipping registers which contained any ‘RO’ fields, as opposed to registers which had only ‘RO’ fields. This behavior has been corrected.

### Mantis 4533

initialized memory on DPI side may survive reset and will cause bad behaviour

The C-side of the UVM’s internal DPI calls was not safe during a simulation reset, and could potentially cause memory leaks and bad behavior. This has been corrected.

### Mantis 4542

uvm_test_done should be made “const”

The undocumented and deprecated uvm_pkg::uvm_test_done reference was made const to prevent users from accidently changing it.

### Backwards Compatibility

The uvm_test_done variable is not part of the UVM standard, but may have been used by users coming from the OVM. As such, this change does not have any backward compatibility concerns for the UVM standard.

### Mantis 4550

are uvm tlm connections with non-uvm_object a legal/supported use model?

The TLM documentation was expanded to explicitly allow non-uvm_object-based types within their parameterization.

### Mantis 4553 (+)

Infinite recursion in uvm_reg_field::get_access

An error message within the uvm_reg_field::get_access method was recursively calling uvm_reg_field::get_access, resulting in an infinite recursion. This behavior was corrected.

Additionally, while fixing this mantis is was determined that the map of field accesses defined in uvm_reg_field::set_access was lacking a name for the scenario caused when a ‘RO’ field was added to a ‘WO’ map. The “NOACCESS” policy was added to handle this scenario.

### Mantis 4548

cleanup static dpi issues

This mantis wrapped various fixes within the C-side of DPI used within the UVM.

### Mantis 4566

comparer.show_max can cause check to pass when length mismatches

A bug in the uvm_comparer class caused queues of different sizes to false-pass when the uvm_comparer::show_max value was not equal to ‘1’. This behavior has been corrected.

### Mantis 4567

uvm_reg::do_predict ignoring UVM_NOT_OK

The uvm_reg::do_predict method was overwriting UVM_NOT_OK status under certain circumstances, and replacing it with UVM_IS_OK. This behavior has been corrected.

### Mantis 4570 (*)(+)

Messaging System Revamp

The reporting system was overhauled to use an object-based approach to passing information (as opposed to passing many fields multiple times). This simultaneously expanded the functionality of the messaging API while providing an easier path for adding functionality to this section of the standard in the future.

### Backwards Compatibility

The uvm_report_server::process_report and uvm_report_server::compose_message methods have been replaced by the object-based uvm_report_server::execute_report_message and uvm_report_server::compose_report_message methods. User code which used the old methods will not behave as expected with the new implementation.

### Migrating code using UVM 1.2

To ease the process of migrating code to UVM 1.2, the old behavior remains available to the user. To restore the old behavior, it is necessary to define the `UVM_DEPRECATED_REPORTING symbol when compiling the UVM library:

>     % ... +define+UVM_DEPRECATED_REPORTING uvm_pkg.sv

Users must be aware that this will result in different behavior in code that now relies on the new implementation of uvm_report_server.

### Mantis 4572

packing/unpacking issues

The uvm_packer::pack_int method (which has been renamed to uvm_packer::pack_field) was incorrectly implemented, causing big endian packs of 64+ bits to be preocessed incorrectly. Additionally, the `uvm_unpack_array implementation did not work properly when uvm_packer::use_metadata was set to ‘0’. These behaviors have been corrected.

### Mantis 4587

Bugs in UVM 1.1-c: uvm_reg_tlm_adapter::reg2bus()

Various fixes we provided for uvm_reg_tlm_adapter::reg2bus such that iw would properly adhere to uvm_tlm_gp rules for length, byte_enable, and byte_enable_length.

### Mantis 4588

in-built sequence is not equipped to exclude a block from the test sequence

The uvm_reg_hw_reset_seq was updated to ensure sub-blocks were properly excluded when relevant NO_REG_TEST attributes were set.

### Mantis 4590

update uvm_hdl.c to allow VCS/IUS to perform backdoor access to VHDL

The capability to allow VHDL UVM_REG backdoor access using VCS and IUS were added.

### Mantis 4606

uvm_report_server is not really extendable/chainable

In a fix similar to Mantis 3887 (*), uvm_report_server was also split into two classes, an abstract uvm_report_server and a default implementation of uvm_default_report_server. This allows uvm_report_server to be fully extended, and multiple report servers can be chained together using a “delegate” pattern.

Control over the global report server was migrated to the new uvm_coreservice_t class.

### Backwards Compatibility

If users had previously extended uvm_report_server, then their code will likely no longer compile because they are not fully implementing the pure virtual interface which the report server now provides. The fix to reinstate the previous functionality is to extend the uvm_default_report_server instead of the uvm_report_server.

The 1.1 to 1.2 Migration Script can be used to replace any occurances of the old type in user code.

### Mantis 4617

uvm_report_cb::add_by_name example needs review

A bad example in the documentation of uvm_report_cb::add_by_name has been fixed.

### Mantis 4618 (*)

resource lookup broken/undefined when fieldname has wildcards

Meta characters (globs or regular expressions) within the fieldname of a resource are no longer interpretted by the resource pool.

### Backwards Compatibility

The previous behavior for meta characters within the field name was not fully defined.

### Mantis 4621

printing of int fields will mask Z values with X

The uvm_printer::print_field and uvm_printer::print_field_int methods were incorrectly implemented, causing ‘Z’ values to appear as ‘X’ when printed. This behavior has been corrected.

### Mantis 4622

uvm_phase::unsync() does not work

The implementation of uvm_phase::unsync was updated to properly remove the sync relationship.

### Mantis 4643

uvm_dpi_get_next_arg_c doesnt fully adhere to -1800-lrm

The internal method uvm_dpi_get_next_arg_c was updated to completely adhere to the 1800 lrm.

### Mantis 4649 (+)(*)

Improve memory performance of ‘bitstream’ interfaces for report/record/etc.

The new uvm_integral_t was standardized, which is a less memory-expensive packed vector than the uvm_bitstream_t. Support for this new type was added to the uvm_printer, uvm_packer, uvm_recorder and uvm_comparer, as well as the auto-configuration provided by the `uvm_field_*macros.

### Backwards Compatibility

In order to provide a consistent API, the uvm_printer::print_int method was deprecated and replaced by uvm_printer::print_field_int.

### Mantis 4666

uvm_config_db::set expects to be invoked in process context

The implementation of uvm_config_db::set was improperly assuming that the method would be invoked within a process context (i.e. process.self() != null). This behavior has been corrected.

### Mantis 4677

remove uvm_global_copy_map

The internal and undocumented uvm_global_copy_map was removed and replaced by a simple associative array.

### Mantis 4686 (+)

predict updated not just the mirrored field

The documentation of the uvm_reg::predict and uvm_reg_field::predict methods was clarified to indicate that the methods update both the mirrored and desired values.

### Mantis 4690

Typo in uvm_sequence_base.vh (mehod should be method)

A typo in the documentation of uvm_sequence_base was corrected.

### Mantis 4711

uvm macros violate 1800lrm iterator requirements

The `uvm_field_*macros were updated to obey 1800 LRM requirements for the iterators of arrays.

### Mantis 4731

Static initialization races

The fix to Mantis 4606 accidently included a static race condition which was fixed.

### Mantis 4732 (+)

uvm_phase_state initializes to incorrect value

The new phase state UVM_PHASE_UNINITIALIZED was added to the uvm_phase_state. This new state is the default state for all phases after construction.

### Mantis 4734

Bug in uvm_reg_map::get_size();

The implementation of uvm_reg_map::get_size had a typo which resulted in the value of the last offset added being used instead of the value of the largest offset. This behavior has been corrected.

### Mantis 4738

DPI Code does not use UVM Messaging

Similar to Mantis 3783, the messages generated from the C-side implementation of the UVM dpi code have been refactored to route through standard UVM messaging.

### Mantis 4743 (+)

Promote get_next_item, try_next_item, item_done, get, peek, and put to be a part of the standard

The documentation of the uvm_sequencer#(REQ,RSP)::Sequencer Interface was expanded to include the implementations of the various methods.

### Mantis 4744 (*)(+)

Recording System Revamp

Similar to Mantis 4570 (*)(+), the recording system was overhauled to use an object-based approach to connecting to transaction databases. This resulted in two new classes uvm_tr_stream and uvm_tr_database, which provided an object-based implementation of the undocumented implementation API for the uvm_recorder.

Additionally, a new data policy uvm_link_base was added for expressing arbitrary relationships in a compile-safe manner.

### Backwards Compatibility

The changes made to the uvm_recorder API were primarily isolated to undocumented and non-standardized methods within uvm_recorder class. New examples are provided via uvm_text_recorder, uvm_text_tr_stream and uvm_text_tr_database to illustrate to developers how the new system works.

### Mantis 4766 (*)

Fix broken `uvm_record_field + `uvm_record_attribute interaction

The fix for this mantis involved creating a new method uvm_recorder::use_record_attribute. The new method allows for a conditional usage of the `uvm_record_attribute macro, allowing users to create their own recorders without interfering with vendor-specific recorders

### Backwards Compatibility

Vendors which had provided an implementation of the `uvm_record_attribute macro need to add an implementation of uvm_recorder::use_record_attribute in their recorders to allow compatibility with the new macro implementation.

### Mantis 4767 (+)

`uvm_pack_int and `uvm_unpack_int bypass the uvm_packer policy methods

The previous implementation of the `uvm_pack_* macros bypassed the uvm_packer policy methods, and directly accessed an undocumented member variable of the uvm_packer class. This implementation was refactored to use the policy methods without accessing any undocumented functionality.

Additionally, a new API was added to the uvm_packer to provide the ability to pack/unpack an arbrary number of bits from an array of bits, bytes or ints. This new API provides easier compatibility with the SystemVerilog stream operator.

### Mantis 4772

separate uvm_hdl* source into files-by-vendor

Related to Mantis 4588, the fix for this mantis separated the hdl vendor dpi implementations into vendor-specific files.

### Mantis 4783 (*)

`uvm_record_* macros bypass uvm_recorder policy class

The previously undocumented `uvm_record_* macros bypassed the uvm_recorder policy methods, and called undocumented and non-standard methods. Their implementation has been refactored to use the uvm_recorder policy methods by default.

### Backwards Compatibility

The changes to the macros should be transparent to most end users, however developers which were supporting the old undocumented macros may need to update their implementations.

### Mantis 4786 (+)

print_real is undocumented

A typo in the documentation of uvm_printer::print_real resulted in the method being absent from the standard. This has been corrected.

### Mantis 4784 (+)

`uvm_record_int/string/time/real are undocumented

After fixing Mantis 4783 (*), the previously undocumented `uvm_record_int, `uvm_record_field, `uvm_record_real, `uvm_record_string and `uvm_record_time have been officially added to the standard.

### Mantis 4861

Adding a uvm_reg_map to an existing regmap instance required both maps to have the same parent. The behavior was fixed and the bad error message corrected.

### Mantis 4871

Fixed a problem wherein multiple +uvm_set_* commands were ignored after a format error.

### Mantis 4882

The instance name of the phase objection was changed to reflect the name of the phase.

### Mantis 4884

A performance fix was implemented which avoided the copy of large QDA within the spell checker.

### Mantis 4893

Fixed a bug within uvm_leaf_scope which could lead to stall of simulation.

### Mantis 4920

Fixed random stability bug in lookup_name which caused instability when the config database was queried.

### Mantis 4923

A check was added for an out-of-bound queue access in uvm_misc.svh. This check caused no functional change, but prevents certain tools from throwing a warning when processing the code.

### Mantis 4925

The macros `UVM_MAX_STREAMBITS, `UVM_PACKER_MAX_BYTES and `UVM_DEFAULT_TIMEOUT were relocated to src/macros/uvm_global_defines.svh, which is included via uvm_macros.svh. These changes will make the UVM 1.2 Reference HTML out of sync with the UVM 1.2 Reference PDF, however this change is strictly contained to the formatting/location of documentation, not a functional difference.

### Mantis 4931

Various typos and bad links within the reference guide were corrected.

Convenience type for uvm_config_db#(uvm_object)

> virtual class uvm_coreservice_t

The singleton instance of uvm_coreservice_t provides a common point for all central uvm services such as uvm_factory, uvm_report_server, ...

> virtual class uvm_reg_file extends uvm_object

Register file abstraction base class
Defines current sequence state
Specifies a sequencer’s arbitration mode

> virtual class uvm_object extends uvm_void

The uvm_object class is the base class for all UVM data and hierarchical classes.

> pure virtual function void execute_report_message(
> | uvm_report_message | report_message,
> | string | composed_message
> )

Processes the provided message per the actions contained within.

> pure virtual function string compose_report_message(
> | uvm_report_message | report_message, |  |
> | string | report_object_name | = | ""
> )

Constructs the actual string sent to the file or command line from the severity, component name, report id, and the message itself.
uvm_report_server is a global server that processes all of the reports generated by a uvm_report_handler.

> virtual function void print_field_int (
> | string | name, |  |
> | uvm_integral_t | value, |  |
> | int | size, |  |
> | uvm_radix_enum | radix | = | UVM_NORADIX,
> | byte | scope_separator | = | ".",
> | string | type_name | = | ""
> )

Prints an integral field (up to 64 bits).

> virtual class uvm_recorder extends uvm_object

Abstract class which defines the recorder API.
Vendor-independent macro to hide tool-specific interface for recording attributes (fields) to a transaction database.

> virtual function bit use_record_attribute()

Indicates that this recorder does (or does not) support usage of the `uvm_record_attribute macro.
Defines the maximum bit vector size for integral types.
Defines the maximum bytes to allocate for packing an object using the uvm_packer.
The default timeout for simulation, if not overridden by uvm_root::set_timeout or uvm_cmdline_processor::+UVM_TIMEOUT

> virtual class uvm_event_base extends uvm_object

The uvm_event_base class is an abstract wrapper class around the SystemVerilog event construct.

> class uvm_event#(
> | type | T | = | uvm_object
> ) extends uvm_event_base

The uvm_event class is an extension of the abstract uvm_event_base class.
Convenience type for uvm_config_db#(uvm_bitstream_t)
Convenience type for uvm_config_db#(string)
The common phases are the set of function and task phases that all uvm_components execute together.
The run-time schedule is the pre-defined phase schedule which runs concurrently to the uvm_run_phase global run phase.

> virtual function void disable_auto_item_recording()

By default, item recording is performed automatically when get_next_item() and item_done() are called.

> virtual function bit is_auto_item_recording_enabled()

Return TRUE if automatic item recording is enabled for this port instance.

> virtual class uvm_sqr_if_base #(
> | type | T1 | = | uvm_object,
> |  | T2 | = | T1
> )

This class defines an interface for sequence drivers to communicate with sequencers.

> class uvm_enum_wrapper#(
> | type | T | = | uvm_active_passive_enum
> )

The uvm_enum_wrapper#(T) class is a utility mechanism provided as a convenience to the end user.
Implements the data operations for an enumerated property.
+uvm_set_config_int=<comp>,<field>,<value> and +uvm_set_config_string=<comp>,<field>,<value> work like their procedural counterparts: set_config_int() and set_config_string().
The +uvm_set_default_sequence=<seqr>,<phase>,<type> plusarg allows the user to define a default sequence from the command line, using the typename of that sequence.

> virtual function void start_phase_sequence(
> | uvm_phase | phase
> )

Start the default sequence for this phase, if any.

> class uvm_sequence_base extends uvm_sequence_item

The uvm_sequence_base class provides the interfaces needed to create streams of sequence items and/or other sequences.

> virtual class uvm_object_wrapper

The uvm_object_wrapper provides an abstract interface for creating object and component proxies.

> virtual class uvm_factory

As the name implies, uvm_factory is used to manufacture (create) UVM objects and components.

> class uvm_default_factory extends uvm_factory

Default implementation of the UVM factory.

> static function uvm_factory get()

Static accessor for uvm_factory

> function void set_propagate_mode (
> | bit | prop_mode
> )

Sets the propagation mode for this objection.

> virtual function void drop_objection (
> | uvm_object | obj | = | null,
> | string | description | = | "",
> | int | count | = | 1
> )

Drops the number of objections for the source object by count, which defaults to 1.

> function void print_msg (
> | string | msg
> )

Causes the error count to be incremented and the message, msg, to be appended to the miscompares string (a newline is used to separate messages).

> int unsigned verbosity = UVM_LOW

Sets the verbosity for printed messages.

> virtual class uvm_reg_transaction_order_policy extends uvm_object

Selects decimal (%d) format

> virtual function void do_print (
> | uvm_printer | printer
> )

The do_print method is the user-definable hook called by print and sprint that allows users to customize what gets printed or sprinted beyond the field information provided by the `uvm_field_* macros, Utility and Field Macros for Components and Objects.

> virtual function void do_record (
> | uvm_recorder | recorder
> )

The do_record method is the user-definable hook called by the record method.

> class uvm_sequence_library #(
> | type | REQ | = | uvm_sequence_item,
> |  | RSP | = | REQ
> ) extends uvm_sequence #(REQ,RSP)

The uvm_sequence_library is a sequence that contains a list of registered sequence types.

> function void set_inst_override_by_type(
> | string | relative_inst_path,
> | uvm_object_wrapper | original_type,
> | uvm_object_wrapper | override_type
> )

A convenience function for uvm_factory::set_inst_override_by_type, this method registers a factory override for components and objects created at this level of hierarchy or below.

> pure virtual function void set_inst_override_by_type (
> | uvm_object_wrapper | original_type,
> | uvm_object_wrapper | override_type,
> | string | full_inst_path
> )

Selects unformatted 2 value data (%u) format
Selects unformatted 4 value data (%z) format
Selects real (%g) in exponential or decimal format, whichever format results in the shorter printed output
Selects real (%f) in decimal format
Selects real (%e) in exponential format
Specifies the radix to print or record in.
Feature request to create a non-hierarchical objection

> virtual class uvm_port_base #(
> | type | IF | = | uvm_void
> ) extends IF

Transaction-level communication between components is handled via its ports, exports, and imps, all of which derive from this class.
Defines all possible values for report severity.
Many of the backwards compatibility concerns caused when transitioning from UVM version 1.1 to 1.2 can be addressed with a reasonably simple search-and-replace in user code.

> function void set_report_verbosity_level (
> | int | verbosity_level
> )

This method sets the maximum verbosity level for reports for this component.

> function void set_report_id_verbosity (
> | string | id,
> | int | verbosity
> )

> function void set_report_severity_id_verbosity (
> | uvm_severity | severity,
> | string | id,
> | int | verbosity
> )

These methods associate the specified verbosity threshold with reports of the given severity, id, or severity-id pair.

> virtual function void stop_phase_sequence(
> | uvm_phase | phase
> )

Stop the default sequence for this phase, if any exists, and it is still executing.

> function void kill()

This function will kill the sequence, and cause all current locks and requests in the sequence’s default sequencer to be removed.

> function void set_starting_phase(
> | uvm_phase | phase
> )

Sets the ‘starting phase’.

> function uvm_phase get_starting_phase()

Returns the ‘starting phase’.

> function void set_automatic_phase_objection(
> | bit | value
> )

Sets the ‘automatically object to starting phase’ bit.

> virtual class uvm_task_phase extends uvm_phase

Base class for all task phases.
The phase object is used to traverse the component hierarchy and call the component phase method as well as the phase_started and phase_ended callbacks.

> virtual function int get_objection_count(
> | uvm_object | obj | = | null
> )

Returns the current number of objections to ending this phase raised by the given object.

> virtual function void put_response(
> | input | T2 | t
> )

Sends a response back to the sequence that issued the request.

> class uvm_phase extends uvm_object

This base class defines everything about a phase: behavior, state, and context.

> function void get_adjacent_predecessor_nodes(
> | ref | uvm_phase | pred[]
> )

Provides an array of nodes which are predecessors to this phase node.

> function void get_adjacent_successor_nodes(
> | ref | uvm_phase | succ[]
> )

Provides an array of nodes which are successors to this phase node.

> REQ req

The sequence contains a field of the request type called req.

> RSP rsp

The sequence contains a field of the response type called rsp.

> virtual task wait_for_relevant()

This method is called by the sequencer when all available sequences are not relevant.

> virtual function bit is_relevant()

The default is_relevant implementation returns 1, indicating that the sequence is always relevant.

> virtual function void set_max_zero_time_wait_relevant_count(
> | int | new_val
> )

Can be called at any time to change the maximum number of times wait_for_relevant() can be called by the sequencer in zero time before an error is declared.

> virtual function uvm_mem_region allocate(
> | longint | unsigned | n, |  |
> |  | uvm_mem_mam | mam, |  |
> |  | uvm_mem_mam_policy | alloc | = | null
> )

Randomly implement, resize or relocate a virtual register array

> class uvm_sequencer_base extends uvm_component

Controls the flow of sequences, which generate the stimulus (sequence item transactions) that is passed on to drivers for execution.

> class uvm_phase_cb extends uvm_callback

This class defines a callback method that is invoked by the phaser during the execution of a specific node in the phase graph or all phase nodes.

> typedef uvm_callbacks#(
> | uvm_phase,
> | uvm_phase_cb
> ) uvm_phase_cb_pool

Convenience type for the uvm_callbacks#(uvm_phase, uvm_phase_cb) class.

> virtual function void set_name (
> | string | name
> )

Sets the instance name of this object, overwriting any previously given name.

> function void set_jump_phase(
> | uvm_phase | phase
> )

Specify a phase to transition to when phase is complete.

> function void end_prematurely()

Set a flag to cause the phase to end prematurely.

> class uvm_reg_access_seq extends uvm_reg_sequence #(
> | uvm_sequence | #(uvm_reg_item)
> )

Verify the accessibility of all registers in a block by executing the uvm_reg_single_access_seq sequence on every register within it.

> virtual function string get_access(
> | uvm_reg_map | map | = | null
> )

Get the access policy of the field

> virtual function string set_access(
> | string | mode
> )

Modify the access policy of the field

> class uvm_comparer

The uvm_comparer class provides a policy object for doing comparisons.

> int unsigned show_max = 1

Sets the maximum number of messages to send to the printer for miscompares of an object.
Operation completed with error
Operation completed successfully

> virtual function void pack_field (
> | uvm_bitstream_t | value,
> | int | size
> )

Packs an integral value (less than or equal to 4096 bits) into the packed array.
Unpack a dynamic array without having to also specify the bit size of its elements.

> bit use_metadata

This flag indicates whether to encode metadata when packing dynamic data, or to decode metadata when unpacking.

> virtual function uvm_sequence_item reg2bus(
> | const ref | uvm_reg_bus_op | rw
> )

Converts a uvm_reg_bus_op struct to a uvm_tlm_gp item.

> typedef uvm_tlm_generic_payload uvm_tlm_gp

This typedef provides a short, more convenient name for the uvm_tlm_generic_payload type.

> class uvm_reg_hw_reset_seq extends uvm_reg_sequence #(
> | uvm_sequence | #(uvm_reg_item)
> )

Test the hard reset values of registers
request facility to identify unused factory overrides

> class uvm_default_report_server extends uvm_report_server

Default implementation of the UVM report server.

> virtual function void print_field (
> | string | name, |  |
> | uvm_bitstream_t | value, |  |
> | int | size, |  |
> | uvm_radix_enum | radix | = | UVM_NORADIX,
> | byte | scope_separator | = | ".",
> | string | type_name | = | ""
> )

Prints an integral field (up to 4096 bits).

> function void unsync(
> | uvm_domain | target, |  |
> | uvm_phase | phase | = | null,
> | uvm_phase | with_phase | = | null
> )

Remove synchronization between two domains, fully or partially
The integral type is used as a argument type for passing integral values of 64 bits or less in such methods as uvm_printer::print_field_int, uvm_recorder::record_field_int, uvm_packer::pack_field_int and uvm_packer::unpack_field_int.
The bitstream type is used as a argument type for passing integral values in such methods as uvm_object::set_int_local, uvm_config_int, uvm_printer::print_field, uvm_recorder::record_field, uvm_packer::pack_field and uvm_packer::unpack_field.

> virtual class uvm_printer

The uvm_printer class provides an interface for printing uvm_objects in various formats.
The uvm_packer class provides a policy object for packing and unpacking uvm_objects.
Macros that implement data operations for scalar properties.

> static function void set(
> | uvm_component | cntxt,
> | string | inst_name,
> | string | field_name,
> | T | value
> )

Create a new or update an existing configuration setting for field_name in inst_name from cntxt.

> virtual function bit predict (
> | uvm_reg_data_t | value, |  |
> | uvm_reg_byte_en_t | be | = | -1,
> | uvm_predict_e | kind | = | UVM_PREDICT_DIRECT,
> | uvm_path_e | path | = | UVM_FRONTDOOR,
> | uvm_reg_map | map | = | null,
> | string | fname | = | "",
> | int | lineno | = | 0
> )

Update the mirrored and desired value for this register.

> function bit predict (
> | uvm_reg_data_t | value, |  |
> | uvm_reg_byte_en_t | be | = | -1,
> | uvm_predict_e | kind | = | UVM_PREDICT_DIRECT,
> | uvm_path_e | path | = | UVM_FRONTDOOR,
> | uvm_reg_map | map | = | null,
> | string | fname | = | "",
> | int | lineno | = | 0
> )

Update the mirrored and desired value for this field.
uvm_report_server is not really extendable/chainable
The state is uninitialized.
The set of possible states of a phase.
Remove all $display calls from BCL, except report_server
This is an interface for communicating with sequencers.
Messaging System Revamp

> virtual class uvm_tr_stream extends uvm_object

The uvm_tr_stream base class is a representation of a stream of records within a uvm_tr_database.

> virtual class uvm_tr_database extends uvm_object

The uvm_tr_database class is intended to hide the underlying database implementation from the end user, as these details are often vendor or tool-specific.

> virtual class uvm_link_base extends uvm_object

The uvm_link_base class presents a simple API for defining a link between any two objects.

> class uvm_text_recorder extends uvm_recorder

The uvm_text_recorder is the default recorder implementation for the uvm_text_tr_database.

> class uvm_text_tr_stream extends uvm_tr_stream

The uvm_text_tr_stream is the default stream implementation for the uvm_text_tr_database.

> class uvm_text_tr_database extends uvm_tr_database

The uvm_text_tr_database is the default implementation for the uvm_tr_database.
in-built sequence is not equipped to exclude a block from the test sequence

> virtual function void print_real (
> | string | name, |  |
> | real | value, |  |
> | byte | scope_separator | = | "."
> )

Prints a real field.
`uvm_record_* macros bypass uvm_recorder policy class
Macro for recording arbitrary name-value pairs into a transaction recording database.