| ------------------------------------------------------------------------ |
| Release Notes for OVM-2.1.2 |
| May 26, 2011 |
| |
| ** Bug Fixes |
| |
| - ovm_comparer was not regarding its verbosity setting. |
| |
| - ovm_objection source object handle not set to ovm_top if not |
| supplied in raise/drop_objection. |
| |
| - ovm_report_object is no longer declared virtual. |
| |
| - allow phase_timeout and stop_timeout to be disabled (when set |
| to 0). |
| |
| - ovm_do_callbacks macros - fixed case that cause null-pointer |
| |
| - `ovm_field_sarray_* macros - fixed auto-config issue |
| |
| - `ovm_field_object macro - fix memory leak with object copy |
| |
| - produce error if the selected sequence for try_next_item |
| does not produce a sequence item during wait_for_sequences(). |
| This can occur if time is consumed between calls to start_item() |
| and finish_item(). |
| |
| - call set_sequencer()/reseed() in start() method to remove |
| dependency on create_item() |
| |
| - produce error if parent sequence finishes before releasing its |
| locks or before children are finished (can filter) |
| |
| ** Enhancements |
| |
| - ovm_pool - Added get_global method. |
| |
| - ovm_transaction/ovm_sequence_item - exposed event pool member |
| 'events' to public API. |
| |
| - move response queue handling to ovm_sequence_base to allow |
| polymorphic response handling |
| |
| |
| ------------------------------------------------------------------------ |
| Release Notes for OVM-2.1.1 |
| March 18, 2010 |
| |
| ** 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. |
| |
| |
| ------------------------------------------------------------------------ |
| Release Notes for OVM-2.1 |
| December 18, 2009 |
| |
| ** New Features |
| |
| - Added an objection mechanism for coordinating the end-of-test |
| condition, i.e. ending the run phase. Any number of objects, |
| components, and even module-based IP can participate in |
| the end-of-test decision. |
| |
| - Added a typesafe callback facility as an alternatve means |
| of customizing component behavior without inheritance. The |
| documentation will show that providing hooks in the form of |
| both virtual methods and callback objects affords users the |
| most flexibility for customizing component behavior. |
| |
| - Added a parameterized ovm_pool #(KEY, T) class. Both ovm_event_pool |
| and ovm_barrier_pool are now typedef'd to a specialization of |
| the parameterized pool. |
| |
| - Added a parameterized ovm_queue #(T) class. Class-based versions |
| of the associative array and queue allow for conditional |
| allocation and efficient pass-by-reference and store-by-reference |
| capabilities. |
| |
| - Added support for real fields via the new macro `ovm_field_real. |
| |
| - Added support for associative arrays of integral types indexed |
| by enumerated types with the macro `ovm_field_aa_int_enumkey. |
| |
| - Added the virtual function get_object_type() to the ovm_object |
| class to return the factory wrapper object that can be used to |
| construct the object type. |
| |
| - Added the get_count() method to the ovm_random_sequence class to |
| provide a means of accessing the random count that the sequence |
| is using. |
| |
| ** API Changes |
| |
| - Changed the interface methods (such as get_next_item()) in the sequencer |
| classes to be virtual. |
| |
| - Changed ovm_report_server::id_count array from local to protected |
| to allow access in ovm_report_server subtypes. |
| |
| - Documentation updated for ovm_report_* methods. Includes explanation |
| that verbosity is now ignored for warning, error, and fatal reports. |
| |
| ** Performance Optimizations |
| |
| - The ovm_report_enabled method was enhanced to also check whether |
| the configured action for a given report severity and id is not |
| OVM_NO_ACTION. This, in addition to the verbosity check, enables |
| disabled reports to be efficiently filtered out before incurring |
| the overhead of message string processing. |
| |
| ** Compatibility changes |
| |
| - AVM FILE Compatibility |
| |
| Methods in AVM that take a file descriptor used FILE as the argument |
| type, whereas in OVM the argument type is OVM_FILE. Users |
| using the FILE type will need to typedef it |
| | typedef OVM_FILE FILE; |
| or |
| | typedef int FILE; |
| |
| ** Example Updates: |
| |
| - The Xbus example was modified to use the objection mechanism. |
| |
| - An simple objection example was added. |
| |
| - An simple callback example was added. |
| |
| |
| ** Notable bugs fixed |
| |
| - A race condition existed in untimed simulations between the call |
| to stop_request and the process that is forked to monitor the |
| stop request. This has been fixed. |
| |
| - In Questa 6.5x and prior, running vlog with -noopt could cause the |
| simulation to timeout after normal completiion of all OVM phasing. |
| This issue has been fixed. |
| |
| |
| ------------------------------------------------------------------------ |
| Release Notes for OVM-2.0.3 |
| November 9, 2009 |
| |
| ------------------------ |
| |
| ** Performance Optimizations |
| |
| - Added message macros, `ovm_info, `ovm_warning, `ovm_error and |
| `ovm_fatal to help with performance and to allow for file and line |
| information in messages. |
| |
| - Fixed factory performance issue when a large number of instance |
| overrides are registered. The factory now keeps a seperate override |
| queue per requested type. |
| |
| - Added configuration cache and other optimizations to |
| increase configuration performance. |
| |
| ** Bugs Fixed: |
| |
| - convert2string was promoted from ovm_transaction to ovm_object. |
| Users can now return object information in the form of a string |
| without requiring use of the ovm_printer policy class. |
| Overrides of ovm_object::do_print are expected to use the |
| given ovm_printer policy class. |
| |
| - All OVM library ovm_report_warning, ovm_report_error, |
| and ovm_report_fatal messages were changed to have OVM_NONE |
| verbosity to prevent user-configured verbosity settings from |
| inadvertantly suppressing them. |
| |
| - Added macro OVM_PACKER_MAX_BYTES to allow for the internal packer |
| object to be increased in the case of overflow. |
| |
| - Fixed deep copy for `ovm_field_array_object, `ovm_field_sarray_object, |
| and `ovm_field_queue_object. Deep copy was unconditionally creating |
| a new array instead of reusing the lhs array. |
| |
| - Duplicate factory override WARNING changed to INFO. |
| |
| - Overriding a factory override message demoted from WARNING to INFO |
| |
| - Avoid compiler warnings by testing associative array entry for |
| existence before dereferencing. |
| |
| - Create method in `ovm_object_utils and ovm_object_registry #() |
| will not set the object's name if the given name is the empty |
| string. This allows object designers to choose a non-empty |
| default name that will not be overwritten by factory. |
| |
| - tlm_fifo::get_ap no longer emits transactions on peek operations |
| |
| - Fixed corruption of last byte/word in ovm_packer::get_bytes and |
| get_ints, which affected ovm_object::pack_bytes and pack_ints. |
| |
| - Added/corrected documentation for tlm_fifo methods: size, used, |
| is_full, is_empty. |
| |
| - Added OVM_MAX_STREAMBITS define to allow users to set the maximum |
| number of bits in value arguments to ovm_component::set_config_int, |
| ovm_packer::pack/unpack_field, ovm_printer::print_field, and |
| ovm_comparer::compare_field. Default is 4096 bits. |
| |
| - Added OVM_PACKER_MAX_BYTES define to allow users to set the |
| maximum capacity of the packer's internal bitstream, in bytes. |
| Default is 4096 bytes. |
| |
| - wait_for_relevant calls are now run in parallel to allow the |
| first available is_relevant sequence to be chosen. |
| |
| - A call to try_next_item could block if the chosen sequence |
| was locked. |
| |
| - Return value of ovm_object::pack/unpack_bits/bytes not consistent |
| with documentation. In all cases now, the number of actual bits |
| packed or unpacked is returned. |
| |
| - Changed the output of the CFGNTS message to be more clear. |
| |
| - ovm_sequencer::has_do_available now works with virtual sequences |
| |
| - Multiple deregistration of a sequence fixed. |
| |
| - A sequencer ungrab() without a previous grab() is now caught. |
| |
| ** Deprecations |
| |
| - The ovm_object::do_sprint method is now deprecated. Its default |
| implementation now calls convert2string. |
| |
| ** Documentation Changes: |
| |
| - Added documentation for the ovm_*_imp_decl macros. |
| |
| - Added documentation for the the declare_p_sequencer macro. |
| |
| - Added documentation for the convert2string method, which |
| is now a member of the ovm_object class. |
| |
| ** Example Changes: |
| |
| - All examples were changed to use the new reporting macros. |
| |
| |
| ------------------------------------------------------------------------ |
| Release Notes for OVM-2.0.2 |
| June 3, 2009 |
| |
| ------------------------ |
| |
| ** API Changes: |
| |
| - Added function for checking configuration usage: |
| function void check_config_usage (bit recurse = 1) |
| |
| Checks that all settings in the configuration table have been used. |
| Additional detail is available by setting the actions for the |
| following report ids: |
| CFGOVR -- reports settings that have been overridden from above. |
| CFGSET -- reports all settings that have been applied. |
| |
| - Changed ovm_report_server::summarize() to be virtual to allow |
| summaries to be changed in derivative server objects. |
| |
| - Changed the RSP argument in the tlm_req_rsp channel to default to |
| the REQ type instead of to int. |
| |
| ** Documentation Changes: |
| |
| - The Reference manual has been removed and replaced with Natural |
| Docs HTML code. All documentation for the reference is now |
| contained inside of the OVM source code. Natural Docs is used |
| to generate new documentation at release time. The intention is |
| to ensure that all of OVM is documented and the document stays |
| up to date with any code changes. |
| |
| ** Example Changes: |
| |
| - Fixed xbus slave connect to properly handle the active/passive |
| setting. |
| |
| - Changed xbus to use an import package methodology instead of an |
| included methodology. An ifdef is in place to allow previous IUS |
| versions to still work. |
| |
| ** Bugs Fixed: |
| |
| - Added configuration checking to verify that all configuration |
| settings are used. The check is done during the check phase |
| (after the run phase), but can be manually done at any time. |
| |
| - Fixed get_config() to search ovm_top. The global configuration |
| table was moved into ovm_top, so a set_config outside of a component |
| is now equivalent to ovm_top.set_config. |
| |
| - Fixed issue with automatic configuration that was causing excessive |
| build times in particular situations. |
| |
| - Fixed table printer to removed the column when a field is turned |
| off, without the need to explicitly set the field width to 0. |
| |
| - Fixed printing of dynamic arrays to print all elements when the |
| begin_elements knob is set to -1. |
| |
| - Fixed OVM_NOPRINT for fields of type `ovm_field_sarray_*. |
| |
| - Fixed packing of `ovm_field_enum types to not pack when the |
| OVM_NOPACK is set. |
| |
| - Removed all procedural assertions from the OVM code. The issue is |
| that many of the assertion expressions had side-effects, for |
| example, assert(foo.randomize()). If assertions are turned off |
| the expressions are never executed and the simulation fails. |
| |
| - Changed printing of sequence items to print the sequence name in the |
| same way as was done in OVM 1.1. |
| |
| - Fixed +OVM_VERBOSITY when `message is used in conjunction with |
| ovm_report_*. |
| |
| - Fixed OVM_FATAL messages to terminate immediately. They were |
| forking a thread in order to terminate at the end of the |
| delta which resulted in unexpected behaviors. |
| |
| - Fixed random instability caused by the recording_detail setting. |
| When the setting was OVM_NONE, the transaction event objects were |
| not being created, resulting in different random streams when the |
| setting was other than OVM_NONE. |
| |
| - Fixed issue with ovm_create_random_seed (and by extension, |
| ovm_object::reseed), that was causing seeds to be recycled under |
| certain circumstances. |
| |
| - Fixed issue with OVM hanging when a component's parent was set to itself. |
| |
| - Fixed issue with start_item where a items were not properly initialized by |
| create_item and a fatal error was being reported. Now, create_item does |
| the appropriate initialization. |
| |
| - Fixed issue with the sequencer grab() task calling the lock routines |
| instead of the grab routines. |
| |
| - Fixed ovm_sequencer::stop_sequences() to properly terminate all of the |
| sequences and empty the response queue. |
| |
| - Changed the ovm_sequencer_param_base::set_request() to honor the rerandomize |
| bit. When the rerandomize bit is set, the input item is randomized. |
| |
| - Changed all integers in the sequence code to be ints (2-state) to avoid |
| unexpected randomization issues when the variables default to x. |
| |
| - Fixed issue that caused sequences to get multiply registered. |
| |
| - Fixed message for terminated sequence to provide more information. |
| |
| - Made it illegal to specify a sequence priority of 0. In some cases a 0 |
| priority was causing a crash. |
| |
| - Fixed ovm_sequence::start() to check that the parent_sequence is non-null |
| before using it. This allows the parent sequence to have been set previously |
| without being overridden. |
| |
| - Fixed ovm_sequence_item::get_full_name() to generate the correct name. |
| |
| - Removed double allocation of sequence items in do macros. The double |
| allocation had previously been required for tool reasons. |
| |
| - Added a warning to not start the default sequence for the case that no user |
| defined sequence exists (and no simple sequence exists). |
| |
| - Fixed a number of linting errors in the OVM code. |
| |
| - Added ifdef around %p usage in the ovm_builtin_converter class to allow the |
| default implementation to run on IUS. |
| |
| - Fixed the ovm_*_utils macros to run on IUS with parameterized types. |
| Previously, IUS would issue an error about calling a built-in function |
| from a parameterized type. |
| |
| ------------------------------------------------------------------------ |
| Release Notes for OVM-2.0.1 |
| December 3, 2008 |
| |
| ------------------------- |
| |
| ** Bugs Fixed: |
| |
| - OVM factory registrations have been added for ovm_random_stimulus, |
| ovm_in_order_comparator, ovm_algorithmic_comparator, and |
| ovm_subscriber. |
| |
| - Fixed bug where unpack_field returned an incorrect x before actual |
| value. |
| |
| - Fixed inconsistent use of inst_path in ovm_factory. |
| |
| - Fixed bug so that phases can now be inserted during build phase. |
| |
| - Added deprecation warning messages for all deprecated features |
| (see deprecated.txt file for list of deprecated features). |
| |
| Here is the list of deprecated features which will now emit warning |
| messages if they are used: |
| |
| ovm_component::find_component |
| ovm_component::find_components |
| ovm_component::get_component |
| ovm_component::get_num_components |
| ovm_env::do_test |
| ovm_factory::auto_register |
| ovm_factory::set_type_override |
| ovm_factory::set_inst_override |
| ovm_factory::create_object |
| ovm_factory::create_component |
| ovm_factory::print_all_overrides |
| ovm_factory::print_override_info |
| ovm_find_component |
| ovm_print_topology |
| ovm_root::print_unit |
| ovm_root::print_units |
| ovm_root::print_unit_list |
| ovm_sequence::new (sequencer_ptr and parent_seq args) |
| ovm_sequencer_base::start_sequence |
| ovm_sequence_item::new (sequencer_ptr and parent_seq args) |
| ovm_sequence_item::set_parent_seq |
| ovm_sequence_item::get_parent_seq |
| |
| - Added missing "static" keyword in ovm_component_registry_param macro. |
| |
| - Added a check in ovm_sequencer.svh to check that sequence_id is not |
| -1, which indicates that set_id_info was not called. |
| |
| - Added error report if a sequence calls send_request() without first |
| having called wait_for_grant(). |
| |
| - Fixed ovm_file and ovm_line macros for Questa and IUS. |
| |
| - The +OVM_VERBOSITY command line option now properly sets the |
| verbosity threshold in the report server. |
| |
| The command line syntax is: +<verbosity_flag>=<verbosity_value> |
| |
| <verbosity_flag> = OVM_VERBOSITY | ovm_verbosity | VERBOSITY | verbosity |
| |
| <verbosity_value = OVM_NONE | NONE | OVM_LOW | LOW | LO |
| | OVM_MEDIUM | OVM_MED | MEDIUM | MED |
| | OVM_HIGH | OVM_HI | HIGH | HI | OVM_FULL |
| | FULL | OVM_DEBUG | DEBUG |
| | <verbosity_level> |
| |
| <verbosity_level> = integer >= 0 |
| |
| - The scenario compatibility layer default parameterization has been |
| fixed to match sequences. |
| |
| - Some verbosity values in the urm compatibility were corrected. |
| |
| - The verbosity values in ovm_comparer were fixed. |
| |
| - Fixed `ovm_update_seq_and_lib so that it uses |
| create_inst_override_by_type. |
| |
| - Moved all tlm defines to tlm_defines.svh file so that external use |
| of *_decl macros now works properly. |
| |
| - fixed broken _decl macros |
| |
| - Removed use of '-' in format specifiers in ovm_report_handler. |
| |
| - Fixed user defined phases to allow use from different class |
| hierarchies. |
| |
| - Fixed bug so that sequence kill now works properly. |
| |
| - Constructor for component registry has been fixed to use positional |
| rather than named arguments for function calls. |
| |
| - Fixed code in ovm_object and macros so that ABSTRACT flag now works |
| properly. |
| |
| - Fixed bug so that wait_for_sequence_state() now wakes up during the |
| correct state. |
| |
| - Made a performance optimization in ovm_report_server to not call |
| $swrite when not needed. |
| |
| - Fixed the internal buffer within ovm_packer to allow more than 4096 |
| total bits. |
| |
| - Fixed ovm_version strings to be constant parameters. |
| |
| - Fixed radix for comparison in field arrays. |
| |
| - Fixed default verbosity in urm compatibility area to OVM_MEDIUM to |
| be consistent with previous default. |
| |
| - Fixed binding defines in urm compatibility area. |
| |
| - Added check to emit error in ovm_sequence_item::start_item when the |
| sequencer is null. |
| |
| - Fixed bug so that grab followed by ungrab from a virtual sequence |
| will now properly process items. |
| |
| - Improved error messages from the OVM library when doing a sequence |
| on the wrong type of sequencer. |
| |
| - Fixed issue so that connect_if() can now be used for |
| sequencer.seq_item_cons_if for backwards compatibility (note that |
| connect_if() is deprecated still). |
| |
| - Added get_arbitration() function to ovm_sequencer_base.svh. |
| |
| - Fixed bug so that it is now possible to do items from virtual |
| sequences on driver sequencers. |
| |
| - Fixed bug in which global timeout was printed in hex for questa |
| (instead of %t). |
| |
| - Fixed bug in ovm_packer in which index error messages gave incorrect |
| "valid range". |
| |
| - Fixed bug in ovm_object::pack_ints & unpack_ints in which they |
| corrupted data. |
| |
| - Removed dead code in ovm_packer::put_bits. |
| |
| - Fixed bug in ovm_object::pack_ints. |
| |
| - Fixed bug in which parallel `ovm_do_on or wait_for_grant calls would |
| fail. |
| |
| - Fixed bug were sequence priority was not passed correctly from |
| built-in sequences. |
| |
| - Fixed bug so push_sequencer creates built-in sequences and starts |
| default sequence the same way as the pull sequencer. |
| |
| - Fixed bug so that inheritance hierarchy of sequences all have access |
| to p_sequencer in sequences with multiple inheritances. |
| |
| - Removed `ovm_sequence_param_utils macro. This macro did not function |
| correctly, and could give erroneous results. |
| |
| To use parameterized sequences in sequence libraries, wrap them in |
| a non-parameterized class. |
| |
| - Sequencer calls get_config in both new and build routines to allow |
| setting of default sequence in build phase to work. |
| |
| - _global_reporter is now aliased to ovm_top. This is part of the |
| process of deprecating _global_reporter. |
| |
| - modified the reporting interface in ovm_report_object by adding the |
| following functions: |
| |
| function int get_report_verbosity_level(); |
| function int get_report_action(ovm_severity severity, string id); |
| function int get_report_file_handle(ovm_severity severity, string id); |
| function int ovm_report_enabled(int verbosity); |
| |
| - Added the global function ovm_report_enabled(int verbosity). This |
| function checks to see if, given the supplied verbosity, whether or |
| not a report will print. It will be used in future releases of OVM |
| to determine if a report will be issued before undertaking the |
| report processing. |
| |
| |
| ------------------------------------------------------------------------ |
| Release Notes for OVM-2.0 |
| August 5, 2008 |
| |
| ------------------------- |
| |
| ** Unified sequences |
| |
| The new unified sequences facility unifies the ideas in the scenarios |
| and sequences facilities in OVM-1.1. The new facility draws from both |
| scenarios and sequences to provide a complete stimulus generation |
| capability. |
| |
| >> sequences |
| |
| - Sequences are parameterized with request and response types. The |
| response type defaults to that of the request. |
| |
| >> sequence items |
| |
| - Sequence items now contain id to enable routing of responses back to |
| the sequence from which the corresponding request originated. |
| |
| >> sequencer |
| |
| - Sequencers, like sequences are now parameterized request and |
| response types. The default type for the response is that of the |
| request. |
| |
| - A sequencer can route a response back to it the sequence that |
| initiated the request. |
| |
| - Sequences can be prioritized and executed based on their priority. |
| The sequencer manages the arbitration. |
| |
| - Push-mode sequencers are available to connect sequences to push-mode |
| drivers. |
| |
| >> sequencer/driver API |
| |
| - The sequencer/driver API consists of the following tasks and |
| functions: |
| |
| has_do_available() |
| wait_for_sequences() |
| get_next_item() |
| try_next_item() |
| item_done() |
| put() |
| get() |
| peek() |
| |
| - The driver and sequencer are connected using a port and export. A |
| custom port interface provides the necessary tasks and functions |
| that drivers use to access the services provided by sequences and |
| sequencers. These are all accessible via the ovm_sqr_pull_if. This |
| interface is bound using the ovm_seq_item_pull_port and _export. |
| The sequencer supplies the export to which the driver with the |
| corresponding port connects. The sequencer and driver are bound |
| using the usual port connect() function. |
| |
| >> sequence/sequencer API |
| |
| The sequencer supplies the following set of tasks and functions for |
| sequences to interact with it: |
| |
| wait_for_grant() |
| lock() |
| unlock() |
| grab() |
| ungrab() |
| is_grabbed() |
| send_request() |
| get_response() |
| |
| This collection of tasks and functions provides for the complete |
| interaction with the sequencer to enable late randomization along |
| with all the other features of sequences. A collect of `ovm_do_- |
| macros is also availale as a convenience layer and also to enable |
| in-line constraints. |
| |
| Lock differs only slightly from grab. Grab causes the grabbing |
| sequence to immediatly jump to the head of the queue to be serviced |
| next by the driver. Lock leaves the sequence in the same place in |
| the queue and the lock takes effect when the sequence reaches the |
| head of the queue. |
| |
| ** Factory |
| |
| Support for parameterized classes. This is accomplished by allowing |
| object handles to be used as keys as well as strings. |
| |
| ** Reorganize ovm_port and related classes |
| |
| The organization of the ovm_port_base class and associated helper |
| classes has been simplified. There are no implications for users |
| or existing user code. |
| |
| We retain the dual-class nature of the OVM port for backward |
| compatibility reasons: both ovm_component and ovm_port_base define a |
| connect( ) method with conflicting prototypes and semantics. Having |
| ovm_port_base inherit from ovm_component was not an option. The new |
| port infrastructure is fully implemented in a single file, |
| ovm_port_base.svh. Additionally, the TLM port, export, and imp |
| specializations in the tlm/ directory were updated to reflect the |
| new port hierarchy and optimized for code reduction. |
| |
| ** Port connectivity API |
| |
| Ovm_port has two functions, get_connected_to and get_provided_to, |
| each of which returns a list of ports. This enables users to write |
| code that traverses the connectivity of a design. |
| |
| ** Collapse ovm_threaded_component and ovm_component |
| |
| The functionality previously in ovm_threaded_component has now been |
| moved to ovm_component. Ovm_threaded_component remains as a typedef |
| of ovm_component for backward compatibility. |
| |
| ** Added banners in run_test() |
| |
| Run_test() now produces a banner when it starts and a message |
| summary when it completes. |
| |
| ** Bugs Fixed: |
| |
| - avm_analysis_imp is now present in in AVM backward compatibility. |
| |
| - typo in tlm_req_rsp.svh fixed |
| |
| - segfault in Questa in ovm_factory::print_override_info() has been |
| fixed. |
| |
| - Previously, back-to-back task phases did not operate correctly. |
| This has been fixed. |
| |
| - URM command line processor has been `ifdef'ed so now it is only |
| present in IUS simulations. |
| |
| ------------------------------------------------------------------------ |
| Release Notes for OVM-1.1 |
| April 1, 2008 |
| |
| ------------------------- |
| |
| ** Singleton top |
| |
| Created a new class, ovm_root, with a singleton instance named |
| ovm_top. This object serves as common top-level for component |
| hierarchies rooted in different modules and it allows many items that |
| were in global space to be moved to non-static members of ovm_root. |
| Further, this serves as a centralized phase/process control; all phsae |
| control is done in a single place instead of distributed amongst |
| components in the hierachy. |
| |
| ** Phase changes |
| |
| - Moved most functionality to ovm_root class. This results in a |
| simpler implemtation requiring less code which is more robust. Now |
| there is no local component state for phases other than current |
| phase handle and phase-related methods in ovm_component have been |
| reduced to two |
| |
| - Phase objects are shared globally |
| |
| - Phase comparison is done using object handles, not string names. |
| |
| - The set of phases has changed, with new phases added and old ones |
| deprecated. |
| |
| build |
| post_new (deprecated) |
| export_connections (deprecated) |
| connect |
| import_connections (deprecated) |
| configure (deprecated) |
| end_of_elaboration |
| start_of_simulation |
| pre_run (deprecated) |
| run |
| extract |
| check |
| report |
| |
| |
| ** Code reorganization |
| |
| The code has been reorgaized to support the singleton top as well as to |
| improve robustness and maintainability. Some methods have been added, |
| deleted, moved, and deprecated. Here is the full list: |
| |
| base/ovm_component.sv* |
| |
| Added do_func_phase |
| Added get_first_child |
| Added get_next_child |
| Added has_child |
| Added lookup (consolidate relative and absolute) |
| Added start_of_simulation (new phase, replaces pre_run) |
| Added local static bit m_phases_loaded = 0; |
| |
| Changed add_child to m_add_child |
| Changed extract_name to m_extract_name |
| Changed get_child arg is string, not int |
| Changed protected int m_curr_phase changed type to ovm_phase |
| Changed set_full_name to m_set_full_name |
| Changed stop to no args |
| |
| Deprecated absolute_lookup |
| Deprecated add_to_debug_list |
| Deprecated bit m_is_removed = 0; |
| Deprecated bit print_enabled = 1; |
| Deprecated build_debug_lists |
| Deprecated check_connection_size |
| Deprecated do_display |
| Deprecated export_connections |
| Deprecated import_connections |
| Deprecated post_new |
| Deprecated pre_run (added from ovm_threaded_component) |
| Deprecated protected ovm_component m_components[string]; |
| Deprecated protected ovm_component m_exports[string]; |
| Deprecated protected ovm_component m_implementations[string]; |
| Deprecated protected ovm_component m_ports[string]; |
| Deprecated relative_lookup |
| Deprecated static ovm_env m_env; (changed to static) |
| |
| Moved do_print to urm_message_compatibility.svh (recording_detail) |
| Moved find_component to ovm_root.find |
| Moved find_components to ovm_root.find_all |
| Moved get_current_global_phase to ovm_top.get_current_phase, |
| returns ovm_phase object |
| Moved global_stop_request to ovm_top.stop_request |
| Moved insert_phase to ovm_top.insert_phase, |
| args are both ovm_phase objects |
| Moved local event m_stop_event; to ovm_root |
| Moved set_global_stop_timeout to ovm_top.stop_timeout var |
| Moved set_global_timeout to ovm_top.phase_timeout var |
| Moved set_int_local to urm_message_compatibility.svh (recording) |
| Moved static bit m_do_test_mode to ovm_root |
| Moved static local time m_global_stop_timeout |
| to ovm_root; non-static; renamed stop_timeout, def=MAX) |
| Moved static protected int m_global_curr_phase |
| to ovm_root, type change to ovm_phase |
| Moved static protected ovm_phase m_global_phase_q[$] to ovm_root |
| Moved static protected time m_global_timeout = 0; |
| to ovm_root, non-static, renamed to phase_timeout, def=MAX) |
| Moved stop_request to ovm_top.stop_request |
| Moved/Deprecated print_unit to ovm_top.print_unit |
| Moved/Deprecated print_unit_list to ovm_top.print_unit_list |
| Moved/Deprecated print_units to ovm_top.print_unit.print_units |
| Moved kill to ovm_threaded_component |
| Moved m_kill_request to ovm_threaded_component |
| Moved m_phase_process to ovm_threaded_component |
| |
| Removed add_component |
| Removed bit top_dog; |
| Removed do_exit_action (ovm_top.stop_request) |
| Removed do_phase |
| Removed do_remove |
| Removed do_set_env |
| Removed execute |
| Removed get_component |
| Removed get_current_phase |
| Removed get_num_components |
| Removed is_removed |
| Removed m_do_current_phase |
| Removed m_do_task_phase |
| Removed m_get_global_phase_num |
| Removed m_get_phase_num |
| Removed m_global_stop_process |
| Removed m_phase_children |
| Removed m_phase_process_done |
| Removed m_stop_req |
| Removed ovm_find_component (global method) |
| Removed ovm_stop_enum (global space) |
| Removed protected ovm_phase m_phase_q[$] |
| Removed push_back_phase |
| Removed remove |
| Removed remove_child |
| Removed remove_children |
| Removed remove_component |
| Removed remove_component_by_name |
| Removed resolve_all_bindings |
| Removed static protected int m_global_phase_names[string] |
| Removed static protected ovm_component m_comp_list[$] |
| Removed static protected ovm_env s_current_env |
| Removed static protected ovm_event_pool m_global_epool |
| Removed static protected string m_global_curr_phase_name |
| Removed string m_leaf_name (use get_name() instead) |
| Removed trigger_stop_event |
| |
| base/ovm_env.sv* |
| |
| Deprecated do_test |
| Deprecated/Added m_do_test_mode |
| Deprecated/Added do_task_phase (override) |
| Deprecated run |
| |
| Moved/Deprecated pre_run to ovm_component |
| Moved run_test (global task) |
| Moved run_global_phase to non-static ovm_root, |
| arg is ovm_phase object |
| Moved static bit finish_on_completion = 1; |
| to non-static in ovm_root |
| Removed m_do_task_phase(ovm_phase phase) |
| Removed m_do_global_phase(string ph_name) |
| |
| Moved_GLOBAL_Deprecated run_test to ovm_root |
| Moved_GLOBAL_Deprecated ovm_print_topology to ovm_root |
| |
| base/ovm_phases.sv |
| |
| Changed call_task (added ovm_threaded_component or |
| ovm_component argument) |
| Changed call_func (added ovm_component argument) |
| |
| Added local event m_start_event; |
| Added local bit m_is_started=0; |
| Added local event m_done_event; |
| Added local bit m_is_done=0; |
| Added wait_start |
| Added wait_done |
| Added is_in_progress |
| Added is_done |
| Added reset |
| Added m_set_in_progress |
| Added m_set_done |
| |
| Removed local ovm_component m_parent; |
| Removed execute |
| Removed get_type_name |
| |
| macros/ovm_phase_defines.sv |
| |
| Removed macro execute |
| Removed macro m_parent |
| |
| Added macro `define ovm_phase_func_topdown_decl(NAME) |
| Added macro `define ovm_phase_func_bottomup_decl(NAME) |
| Added macro `define ovm_phase_task_topdown_decl(NAME) |
| Added macro `define ovm_phase_task_bottomup_decl(NAME) |
| |
| base/ovm_threaded_component.sv* |
| |
| Deprecated/Moved pre_run to ovm_component |
| Changed - status (for INCA; impl for INCA is "not implemented") |
| Added - m_phase_process (from ovm_component) |
| Added - m_kill_request (from ovm_component) |
| Added - m_phases_loaded=0; to prevent unnecessary calls to ovm_top.insert_phase |
| Added - do_task_phase (for invoking task-based phases) |
| |
| base/ovm_printer.sv |
| |
| changed to use get_first_child/get_child/get_next_child interface |
| |
| compatibility/urm_message_compatibility.svh |
| |
| added do_print and set_int_local overrides from ovm_component; |
| these overrides support the URM's recording_detail variable |
| |
| base/ovm_report_object.svh |
| |
| changed call to do_exit_action to top.stop_request(); (do_exit_action removed) |
| |
| base/ovm_connector_base.svh |
| |
| Removed ovm_connection_phase_e enum |
| Removed s_port_type_article[] |
| Removed s_connection_phase_methods[] |
| Removed initialization of above arrays (for INCA) |
| Changed all references to phase strings to ovm_phase objects |
| |
| methodology/layered_stimulus/ovm_scenario_controller.svh |
| |
| Changed connect call to export_connections, but may want to keep |
| as 'connect' |
| |
| methodology/sequences/ovm_sequencer_base.sv |
| |
| Removed 'run_forever'; not needed any longer, as run task will no |
| longer be killed upon return. Only a kill or stop_request cann |
| kill processes forked from the run task. |
| |
| |
| |
| ** Miscellaneous Fixes |
| |
| - Corrected problem where connect-time checks were not properly |
| identifying illegal connectionsin analysis port. The correction was |
| made by inserting a call to super.connect() in |
| ovm_analysis_port::connect(). |
| |
| - Fix ovm_component::get_name(). This function was returning the full |
| instance name instead of the leaf name. |
| |
| - Add timeunit to phase timeouts so that the timeout is not dependent |
| on the user's timescale. |
| |
| - Fix formatting for string values in table. When truncated, one too |
| few charcters were displayed. |
| |
| - IUS does not support multiple format strings for $psprintf. Messages |
| using multiple format strings were changed to use a single format |
| string. |
| |
| - Fix bug in URM message compatibility that caused `dut_error to |
| always exit (removed automatic OVM_EXIT action). |
| |
| - Add command line option OVM_SEVERITY for consistency with other |
| command line options. |
| |
| - Fix tlm_fifo bug around thread safety (multiple gets in same time |
| slice caused incorrect results). |
| |
| - Add support of one-dimensional static arrays using |
| `ovm_field_sarray_*. |
| |
| - Removed assertion from phase cast to allow mixing hierarchy. |
| |
| - Provide a non_blocking option for ovm_scenario_driver |
| get_next_item() call. |
| |
| - Macros `apply_with and `apply_send_with allow for randomize with |
| parameters. |
| |
| - Optional no_randomize argument added to ovm_scenario apply calls. |
| |
| |
| ------------------------------------------------------------------------ |