Thought Leadership

OVM 2.1.1 Now Ready for Download

By Dennis Brophy

Download OVM 2.2.1 from Verification Academy

logo_OVM An important OVM update is now available for download and production use.  Several bugs have been corrected, features altered to improve performance, documentation issues addressed and miscellaneous items improved.

A list of OVM 2.1.1 items from the Release Notes is shown below.  And if you ever have a use issue with OVM and want to contact the OVM Team about it, you can always do so online.

Bug Fixes

  • ovm_report_enabled() method now also tests the configured action as well as its verbosity when determining whether to process the report. If a report’s action is configured to OVM_NO_ACTION, or if its verbosity is higher than the configured verbosity, ovm_report_enabled() returns 0.  Because the `ovm_* report macros use ovm_report_enabled(), they too benefit from this performance improvement.
  • Verbosity was not being ignored for fatals, errors, and warnings. This is now fixed.
  • Added is_locked() method to ovm_sequence_base.
  • Fixed ovm_queue #(T) to not assume its parameter, T, was an object.
  • A FATAL report is issued if an attempt is made to connect() ports at or after the end_of_elaboration phase.
  • Fixed multi-field configuration matching for ovm_field macros. In OVM 2.1 only the first matching field in a component was applied, now all matching fields are applied.
  • Sequence arbitration was broken when in strict_fifo or strict_random modes.  When used in conjunction with is_relevant() or is_blocked(), the priority queue was incorrectly determined, resulting in blocked or irrelevant sequences potentially being chosen. This has been fixed.
  • Fixed bug in transaction recording that was resulting in nested objects not being recorded.
  • Fixed ovm_field_int_*_unsigned macros by removing unnecessary attempt to cast to ‘int unsigned’.
  • Added force_stop() method to ovm_test_done_objection that forces a stop despite outstanding objections. This effectively cancels an objection.   By default, the objection state is printed if there are outstanding objections at the time of the call.
  • Fixed ovm_sequence’s kill() and ovm_sequencer’s stop_sequences() behavior whereby a killed/stopped sequence’s post_body method was allowed to execute.  Now, calls to kill() or stop_sequences() will absolutely kill the affected sequence(s) and leave the sequence in the STOPPED state.

Documentation Fixes

  • Corrected documentation for (un)pack_string.
  • Fixed HTML documentation ‘search’ engine to include macros. It was not properly handling the macros’ leading backtick (`).
  • Changed macro documentation to be consistent: The backtick is included, whereas the arguments are not.
  • Documented do_kill_all() method as a means of recursively killing the processes forked during a component’s run phase. The objection and stop mechanisms remain the preferred way to end the run phase.


  • Turned off auto-config for all port objects.
  • ovm_sequencer_base::get_seq_kind() was changed to issue a WARNING instead of an FATAL if the named sequence is not found. This allows users to check if a specifically named sequence is registered. A return value of -1 indicates the sequence does not exist.
  • Removed an old, unnecessary ifdef INCA in the ovm_component::find() code.
  • Changed internal macros in ovm_object_defines.svh to use m_ to provide visual indication that the macros are for internal use only.
  • ovm_port_base::connect() and resolve_bindings() were made virtual to allow their override in port derivatives.
  • Made sequence registration methods protected and virtual to allow internal tools to work with them.

Leave a Reply

This article first appeared on the Siemens Digital Industries Software blog at