Section: UVM 1.2 Release Notes Topic: 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 A good source for information, answers, and resources is . 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. Topic: 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=, where is the Mantis id. Topic: 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. Group: Mantis 3407 (+) uvm_event should be a parameterized class The ~uvm_event~ class was split into two classes, an abstract , and a parameterized . 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)~. Group: 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 , and . Topic: Backwards Compatibility Care must be taken when switching from ~set_config_object~ and ~get_config_object~ to , as the ~clone~ functionality of the old API no longer exists. Group: Mantis 3557 ref guide doesn't show names of UVM runtime phases The documentation for and has been updated to include a definition of how phases are named. Group: Mantis 3586 (+) UVM_DISABLE_AUTO_ITEM_RECORDING should be a run_time option and have been added to the class, allowing the driver runtime control over whether or not a sequencer should automatically record the items which flow through the sequence item port. Group: Mantis 3693 (+) Setting enum values by name from command line doesn't work The 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 plusarg). Group: Mantis 3741 (+) Phase's default sequence should also have get_config string support A new plusarg has been added () which allows for the ~default_sequence~ a sequencer executes in 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 or . Group: Mantis 3783 Remove all $display calls from BCL, except report_server All messaging is now routed via . Group: Mantis 3887 (*) request facility to identify unused factory overrides The ~uvm_factory~ class was split into two classes, an abstract , a default implementation of . This allows for alternate factories (including those with additional debug functionality) to be created. Control over the global factory was migrated to the new class. Topic: Backwards Compatibility: The undocumented ~uvm_pkg::factory~ variable has been removed, as it was unsafe during static initialization, and incompatible with the class. References to this variable need to be upgraded to retrieve the factory via . Group: Mantis 3893 (+) Feature request to create a non-hierarchical objection has been added to provide control over whether or not objections propagate. Group: 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 is called with a count of ~0~, when the current object count is ~0~. Group: 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()); Group: Mantis 4091 bug in the ~get_full_name~ method of . The ~get_full_name~ method of now includes the top-level block name. Group: Mantis 4160 uvm_comparer not using verbosity setting for print_msg() The method now obeys the setting. Group: 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 class. Group: 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. Group: Mantis 4269 (*) Add UVM_ prefix to enumerated values Various top-level enumeration values (such as those declared in ) 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. Topic: Backawards Compatibility References to the values within and must now be prefixed with ~UVM_~. Group: 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 . Group: Mantis 4307 Bad reference to "DEC" in reference guide Bad references to "DEC" have been corrected to within and . Group: Mantis 4366 (+) uvm_sequence_library documentation missing from html documentation The class has been updated from "beta" to "official" status. As such, it is now documented in the reference guide. Group: Mantis 4378 Documentation of uvm_component::set_inst_override_by_type() incorrectly documents uvm_factory::set_inst_override_by_type() The documentation of as been updated to reflect the proper ordering of the parameters to . Group: Mantis 4382 (+) some symbols in uvm_radix_enum undocumented Documentation was added for , , , , and within the . Group: Mantis 4389 (+) Deprecate hierarchical propagation of objections; add mode bit in interim provides the mode bit for controlling propagation of objections. Hierarchical propagation was not outright deprecated in this release. Group: Mantis 4391 Redundant code in uvm_port_base Some redundant code in the was removed. Group: Mantis 4416 (*) Remove the confusing uvm_severity type The confusing ~uvm_severity_type~ was deprecated, and replaced internally using . Topic: 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. Group: Mantis 4418 set_report_verbosity doc unclear about setting value or threshold The documentation of , , and were updated to provide a clearer definition of exactly what the ~verbosity~ values implied. Group: Mantis 4425 BUSY flag not cleared when register model is reset The register model was updated to clear the BUSY flag when reset. Group: Mantis 4430 (+) Refactor start_phase_sequence logic to be able to kill sequence on phase ending The method was added which acts as the bookend to . It will call on the ~default_sequence~ if the sequence is still executing when the phase ends. Topic: 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. Group: 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 and accessors. An error will be thrown if there are any attempts to 'set' the starting phase after it has been retrieved via a 'get'. Topic: Backwards Compatibility This change could potentially effect users, as references to the ~uvm_sequence_base::starting_phase~ variable will now miscompile. 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. Group: Mantis 4432 (+) Provide auto-object-to-phase in uvm_sequence_base The method was added, simplifying the code required to object to the ~starting_phase~ inside of a phase. Group: Mantis 4433 (*) Clean up the number of objections created by phasing Objections only make sense in s which are of the type. For all other phases and types, the objections have been removed, and any attempt to access the objection will result in an error. Topic: 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. Group: Mantis 4434 (+) Provide get_objection_count in uvm_phase The method 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)); | Group: Mantis 4439 (+) seq_item_port.put_response is not documented The previously undocumented was added to the standard, providing a non-blocking mechanism for sending response information from a driver. Group: Mantis 4440 jump logic too early in phase state pipeline The previous implementation of the ~jump~ logic caused jumps during the ~phase_ended~ callback to be ignored. This has been corrected. Group: Mantis 4469 (+) Provide schedule introspection via get_predecessor/successor_nodes The and methods were adding the api. This provides the user with the ability to programmatically traverse the entire phase graph. Group: Mantis 4476 (+) uvm_sequence fields req/rsp are not documented The previously undocumented and fields were added to the standard. Group: 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 without returning true. The allowable maximum number can be controlled via the method. Group: Mantis 4513 (+) Add uvm_mem_mam_policy allocator to uvm_vreg::allocate() The API was expanded to include an optional third ~alloc~ argument. Group: Mantis 4516 (*) Remove the unnecessary over-prioritization of uvm_sequence_base in default_sequence The previous implementation of over-prioritized ~default_sequence~ configurations which were of type , such that they would override configurations of type , even if the wrapper configurations were done with higher precedence. Topic: 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. Group: Mantis 4517 (+) Add phase-transition callbacks The and were added to provide additional hooks into the phasing API. Group: 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. Topic: Why uvm_object constructors are now mandatory The UVM recommends that the following constructor be specified for any class extended from : | 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, instances were created by calling ~new()~ without any arguments and subsequently setting the object instance name using . | 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 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. Topic: 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. Topic: 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. Topic: 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. Topic: 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. Group: Mantis 4519 (+) Enable all flavors of phase jumping The 's ~jump~ API was extended to include and . These methods allow for a "softer" ~jump~ wherein the phase's execution is not immediately terminated. Group: Mantis 4532 uvm_reg_access_seq ignoring regs with one RO field The implementation was incorrectly skipping registers which contained ~any~ 'RO' fields, as opposed to registers which had ~only~ 'RO' fields. This behavior has been corrected. Group: 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. Group: 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. Topic: 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. Group: Mantis 4550 are uvm tlm connections with non-uvm_object a legal/supported use model? The ~TLM~ documentation was expanded to explicitly allow non--based types within their parameterization. Group: Mantis 4553 (+) Infinite recursion in uvm_reg_field::get_access An error message within the method was recursively calling , 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 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. Group: Mantis 4548 cleanup static dpi issues This mantis wrapped various fixes within the C-side of DPI used within the UVM. Group: Mantis 4566 comparer.show_max can cause check to pass when length mismatches A bug in the class caused queues of different sizes to false-pass when the value was not equal to '1'. This behavior has been corrected. Group: Mantis 4567 uvm_reg::do_predict ignoring UVM_NOT_OK The ~uvm_reg::do_predict~ method was overwriting status under certain circumstances, and replacing it with . This behavior has been corrected. Group: 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. Topic: Backwards Compatibility The ~uvm_report_server::process_report~ and ~uvm_report_server::compose_message~ methods have been replaced by the object-based and methods. User code which used the old methods will not behave as expected with the new implementation. Topic: 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 . Group: Mantis 4572 packing/unpacking issues The ~uvm_packer::pack_int~ method (which has been renamed to ) 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 was set to '0'. These behaviors have been corrected. Group: Mantis 4587 Bugs in UVM 1.1-c: uvm_reg_tlm_adapter::reg2bus() Various fixes we provided for such that iw would properly adhere to rules for ~length~, ~byte_enable~, and ~byte_enable_length~. Group: Mantis 4588 in-built sequence is not equipped to exclude a block from the test sequence The was updated to ensure sub-blocks were properly excluded when relevant ~NO_REG_TEST~ attributes were set. Group: 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. Group: Mantis 4606 uvm_report_server is not really extendable/chainable In a fix similar to , ~uvm_report_server~ was also split into two classes, an abstract and a default implementation of . This allows 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 class. Topic: Backwards Compatibility If users had previously extended , 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 instead of the . The <1.1 to 1.2 Migration Script> can be used to replace any occurances of the old type in user code. Group: 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. Group: 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. Topic: Backwards Compatibility The previous behavior for meta characters within the field name was not fully defined. Group: Mantis 4621 printing of int fields will mask Z values with X The and methods were incorrectly implemented, causing 'Z' values to appear as 'X' when printed. This behavior has been corrected. Group: Mantis 4622 uvm_phase::unsync() does not work The implementation of was updated to properly remove the sync relationship. Group: 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. Group: Mantis 4649 (+)(*) Improve memory performance of 'bitstream' interfaces for report/record/etc. The new was standardized, which is a less memory-expensive packed vector than the . Support for this new type was added to the , , and , as well as the auto-configuration provided by the <`uvm_field_*macros>. Topic: Backwards Compatibility In order to provide a consistent API, the ~uvm_printer::print_int~ method was deprecated and replaced by . Group: Mantis 4666 uvm_config_db::set expects to be invoked in process context The implementation of was improperly assuming that the method would be invoked within a process context (i.e. process.self() != null). This behavior has been corrected. Group: Mantis 4677 remove uvm_global_copy_map The internal and undocumented ~uvm_global_copy_map~ was removed and replaced by a simple associative array. Group: Mantis 4686 (+) predict updated not just the mirrored field The documentation of the and methods was clarified to indicate that the methods update ~both~ the mirrored and desired values. Group: Mantis 4690 Typo in uvm_sequence_base.vh (mehod should be method) A typo in the documentation of was corrected. Group: Mantis 4711 uvm macros violate 1800lrm iterator requirements The <`uvm_field_*macros> were updated to obey 1800 LRM requirements for the iterators of arrays. Group: Mantis 4731 Static initialization races The fix to accidently included a static race condition which was fixed. Group: Mantis 4732 (+) uvm_phase_state initializes to incorrect value The new phase state was added to the . This new state is the default state for all phases after construction. Group: 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. Group: Mantis 4738 DPI Code does not use UVM Messaging Similar to , the messages generated from the C-side implementation of the UVM dpi code have been refactored to route through standard UVM messaging. Group: 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 was expanded to include the implementations of the various methods. Group: Mantis 4744 (*)(+) Recording System Revamp Similar to , the recording system was overhauled to use an object-based approach to connecting to transaction databases. This resulted in two new classes and , which provided an object-based implementation of the undocumented implementation API for the ~uvm_recorder~. Additionally, a new data policy was added for expressing arbitrary relationships in a compile-safe manner. Topic: Backwards Compatibility The changes made to the API were primarily isolated to undocumented and non-standardized methods within class. New examples are provided via , and to illustrate to developers how the new system works. Group: Mantis 4766 (*) Fix broken `uvm_record_field + `uvm_record_attribute interaction The fix for this mantis involved creating a new method . 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 Topic: Backwards Compatibility Vendors which had provided an implementation of the <`uvm_record_attribute> macro need to add an implementation of in their recorders to allow compatibility with the new macro implementation. Group: 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 policy methods, and directly accessed an undocumented member variable of the class. This implementation was refactored to use the policy methods without accessing any undocumented functionality. Additionally, a new API was added to the 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. Group: Mantis 4772 separate uvm_hdl* source into files-by-vendor Related to , the fix for this mantis separated the hdl vendor dpi implementations into vendor-specific files. Group: Mantis 4783 (*) `uvm_record_* macros bypass uvm_recorder policy class The previously undocumented ~`uvm_record_*~ macros bypassed the policy methods, and called undocumented and non-standard methods. Their implementation has been refactored to use the policy methods by default. Topic: 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. Group: Mantis 4786 (+) print_real is undocumented A typo in the documentation of resulted in the method being absent from the standard. This has been corrected. Group: Mantis 4784 (+) `uvm_record_int/string/time/real are undocumented After fixing , 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. Group: 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. Group: Mantis 4871 Fixed a problem wherein multiple ~+uvm_set_*~ commands were ignored after a format error. Group: Mantis 4882 The instance name of the phase objection was changed to reflect the name of the phase. Group: Mantis 4884 A performance fix was implemented which avoided the copy of large QDA within the spell checker. Group: Mantis 4893 Fixed a bug within uvm_leaf_scope which could lead to stall of simulation. Group: Mantis 4920 Fixed random stability bug in ~lookup_name~ which caused instability when the config database was queried. Group: 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. Group: 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. Group: Mantis 4931 Various typos and bad links within the reference guide were corrected.