| 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 |
| |
| <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. |
| |
| |
| 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=<id>, where <id> 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 |
| <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)~. |
| |
| 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 <uvm_config_int>, <uvm_config_string> and |
| <uvm_config_object>. |
| |
| Topic: 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. |
| |
| Group: 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. |
| |
| Group: 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. |
| |
| Group: 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). |
| |
| Group: 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>. |
| |
| Group: Mantis 3783 |
| Remove all $display calls from BCL, except report_server |
| |
| All messaging is now routed via <uvm_report_server>. |
| |
| Group: 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. |
| |
| Topic: 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>. |
| |
| Group: 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. |
| |
| 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 <uvm_objection::drop_objection> 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 <uvm_reg_file>. |
| |
| The ~get_full_name~ method of <uvm_reg_file> now includes the top-level block name. |
| |
| Group: Mantis 4160 |
| uvm_comparer not using verbosity setting for print_msg() |
| |
| The <uvm_comparer::print_msg> method now obeys the |
| <uvm_comparer::verbosity> 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 <uvm_reg_transaction_order_policy> 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 |
| <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. |
| |
| Topic: Backawards Compatibility |
| References to the values within <uvm_sequence_state_enum> and |
| <uvm_sequencer_arb_mode> 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 <uvm_recorder>. |
| |
| Group: 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>. |
| |
| Group: 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. |
| |
| Group: 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>. |
| |
| Group: 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>. |
| |
| Group: 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. |
| |
| Group: Mantis 4391 |
| Redundant code in uvm_port_base |
| |
| Some redundant code in the <uvm_port_base#(IF)> was removed. |
| |
| Group: Mantis 4416 (*) |
| Remove the confusing uvm_severity type |
| |
| The confusing ~uvm_severity_type~ was deprecated, and replaced |
| internally using <uvm_severity>. |
| |
| 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 |
| <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. |
| |
| 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 <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. |
| |
| 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 |
| <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'. |
| |
| 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 <uvm_sequence_base::set_automatic_phase_objection> 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 <uvm_task_phase>s 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. |
| |
| 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 <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)); |
| | |
| |
| Group: 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. |
| |
| Group: 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. |
| |
| Group: 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. |
| |
| Group: 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. |
| |
| 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 <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. |
| |
| Group: 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. |
| |
| Group: 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. |
| |
| 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 <uvm_phase_cb> and <uvm_phase_cb_pool> 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 <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. |
| |
| 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 <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. |
| |
| Group: 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. |
| |
| 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-<uvm_object>-based types within their parameterization. |
| |
| Group: 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. |
| |
| 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 <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. |
| |
| Group: 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. |
| |
| 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 <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. |
| |
| 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 <uvm_report_server>. |
| |
| Group: 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. |
| |
| Group: 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~. |
| |
| Group: 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. |
| |
| 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 <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. |
| |
| Topic: 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. |
| |
| 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 <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. |
| |
| Group: Mantis 4622 |
| uvm_phase::unsync() does not work |
| |
| The implementation of <uvm_phase::unsync> 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 <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>. |
| |
| Topic: 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>. |
| |
| Group: 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. |
| |
| 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 <uvm_reg::predict> and <uvm_reg_field::predict> |
| 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 <uvm_sequence_base> 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 <Mantis 4606> accidently included a static race condition |
| which was fixed. |
| |
| Group: 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. |
| |
| 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 <Mantis 3783>, 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 <uvm_sequencer#(REQ,RSP)::Sequencer Interface> |
| was expanded to include the implementations of the various methods. |
| |
| Group: 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. |
| |
| Topic: 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. |
| |
| Group: 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 |
| |
| Topic: 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. |
| |
| 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 |
| <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. |
| |
| Group: 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. |
| |
| Group: 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. |
| |
| 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 <uvm_printer::print_real> 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 <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. |
| |
| 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. |