Thought Leadership
OVM 2.1.1 Now Ready for Download
Download OVM 2.2.1 from Verification Academy
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.
Miscellaneous
- 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.