Release Notes for UVM-1.0
February 17, 2011

** Overview

  - This is the first release of the Universal Verification Methodology (UVM) 
    reference implementation from Accellera.  This distribution includes a 
    SystemVerilog based class library, examples, and User's Guide. 

    The UVM Standard is available at
    http://www.accellera.org/activities/vip; 

    The class library is a reference implementation of the standard; the 
    examples and User Guide provide guidance to users of the library. For 
    additional information on the Accellera standard, see the URL above.

  - In addition to the UVM Standard, a list of errata fixes were also documented 
    by this committee.  This can also be found at the URL above.  The errata fixes
    and the UVM Standard represent the implementation found in this release. For end
    users this committee encourages the use of the HTML API documentation found in the 
    release at distrib/docs/html.  Just click on index.html located in this folder.
    This is identical to the UVM Standard but also includes the errata.

  - The UVM is built on the code base of OVM-2.1.1 but there are changes
    to UVM 1.0 that create incompatibilities for certain OVM environments.
    Backward compatibility issues are listed in the Compatibility section
    of these notes. The key issue is that ALL environments which use the
    global_stop_request() mechanism from OVM to stop the run phase must
    add the switch +UVM_USE_OVM_RUN_SEMANTIC to keep the run phase
    from ending immediately.

** Bug Fixes

  - The UVM (VIP-TSC) committee tracked all issues through the Mantis DB 
    on EDA.org.  All enhancements, bugs, and documentation issues were tracked
    here.  Anyone can see the full list of issues by going to this website:

    http://www.eda.org/svdb/main_page.php

    Select the 'Project' --> VIP, and then click on 'View Issues'

  - If you would like to file a bug, you need reporter access to Mantis. To 
    do this please follow the cheatsheet here:

    http://www.accellera.org/activities/vip/Reporting_bugs_and_enhancement_requests_for_UVM.pdf

  - By way of notification, we have included all the fixes applied to Mantis 
    at the bottom of these release notes under 'Mantis Issues Resolved'

** New Features - added since UVM-1.0EA

  - Register modeling with uvm_reg. Provides the base classes for creating
    register verification models and stimulating and checking the DUT
    registers. Also includes backdoor access to DUT registers.

  - Runtime phases. Provides the ability to section the run phase into
    multiple run time phases. Components can further be sectioned into
    seperate domains for fine grained phase synchronization. And, it is 
    possible to jump from phases either forward or backward giving full 
    control of the phasing control flow.

  - TLM 2 SystemVerilog implementation. Provides a SystemVerilog
    implementation for many of the classes from TLM 2, including (but not
    limited to), generic payload and sockets.

  - Resource and configuration database. Extends the configuration mechanism
    to allow generic datatypes to be used for configuration. And, allows for
    resources to be disassociated from the verification hierarchy.

  - Command line processor. Provides access to all simulator command line
    arguments (similar to the SystemVerilog $value$plusargs but with access to
    all argument matches, not just first matches).

  - Sequence library. This functionality replaces the string based sequence
    library that was available in UVM 1.0EA. The sequence library is not yet 
    part of the standard. It is a late addition to serve as a replacement for
    the deprecated string based sequence library.

  - Regular expression matching. The glob style expression matching from UVM
    1.0EA has been enhanced to allow for posix regular expression matching on
    top of the glob style matching.

  ** Note: the regular expression matching, HDL backdoor and command line
     processor all require DPI import functions. The c++ file,
     $UVM_HOME/src/dpi/uvm_dpi.cc provides the necessary implementation code.

** API changes and backward incompatibilities with UVM 1.0EA

  - The API for defining user-defined phases is changed. If a user is
    using user defined phases, they will either need to change to use
    the new runtime phases, or they will need to create their own
    custom phases using the new phasing API.

  - The run phase semantic is changed to match the semantics of the new
    runtime phases. The run phase is now immediately ready to end unless a
    component has explicitly raised the phase_done objection for the run phase
    during the first nba region of the phase, whereas, in the past the run 
    phase would not be ready to end unless there was an explicit call to 
    global_stop_request() or a test_done objection was raised/dropped. The OVM
    semantic can be used if the option +UVM_USE_OVM_RUN_SEMANTIC is specified.
    Note: the use of the OVM semantic is deprecated and is intended only
    as a temporary convenience for migration purposes.

  - The stop mechanism, including the uvm_component::stop() callback and
    the stop_request function is deprecated. Users should use the 
    uvm_component::phase_ready_to_end() callback for similar
    capability.

  - The use of the default_sequence and the `uvm_sequence_utils,
    `uvm_declare_sequence_lib, `uvm_update_sequence_lib,
    `uvm_update_sequence_lib_and_item and `uvm_sequencer_utils are deprecated.
    It is suggested that users move to the new uvm_sequence_library for the 
    same functionality.

  - The default_sequence may be used as a deprecated mechanism to start a
    sequence for the run phase, but it is suggested that users switch to
    using the phase specific default_sequence for the run phase.

  - Some policy object, printer/comparer knobs and functions removed. For
    example, the table printer now auto-sizes based on column widths so the
    knobs for controlling the column widths no longer apply.

  - Phase function/task names have a new signature. The old signature will
    continue to work, but is deprecated. The new signature includes _phase in
    the name and takes the uvm_phase as an argument. For example:

      function void connect(); 
    becomes
      function void connect_phase(uvm_phase phase);


-----------------------------------------------------------------------------
Release Notes for UVM-1.0EA
May 17, 2010

** Overview

  - This is the first early adopter release of the Universal Verification 
    Methodology (UVM) from Accellera.  The UVM includes a SystemVerilog base 
    class library, a Reference Guide, and a User Guide.

  - The UVM is built on the same code base as OVM-2.1.1, with the following 
    new feature enhancements which are described in greater detail in the  
    "New Features" section below and any API changes described in the
    "API Changes" section.
	- All ovm_* symbols converted to uvm_*.
	- Enhancements to the OVM callback facility, including a new message 
	catching facility. These enhancements introduce some minor backward 
        incompatibilities to the OVM callback facility.
	- Enhancements to the OVM objection mechanism.  These enhancements 
        introduce some minor backward incompatibilities to the OVM objection
        mechanism.
       	- These new feature enhancements have been fully tested but they are
	  considered as "Early Adopter" in this first release of UVM.

** New Features - added since OVM 2.1.1

   - uvm_callbacks added support for typewide callbacks by using a null
     object identifier.

   - Added better runtime type checking for callbacks to ensure that 
     callbacks are only registered with objects that can use them.

     * added type-callback registration macro, `uvm_register_cb.
     * added ability to specify inheritence hierarchy of objects using
       callbacks via the `uvm_set_super_type macro.

   - Added the ability to register callbacks to uvm_components by
     name with the uvm_callbacks#(T,CB)::add_by_name() method.

   - uvm_report_catcher callback mechanism for reports. Allows messages to
     be processed and potentially changed. Catcher callbacks can be added
     globally or to specific report objects using the uvm_callbacks add
     methods.

   - Added a uvm_heartbeat class which allows environments to set up
     heartbeat criteria to monitor the liveness of the components in the
     hierarchy.

   - Added the ability to configure the global timeout using the configuration
     mechanism. ovm_top.set_config("","timeout",<value>) will set the
     timeout value for the task based phases.

   - Added tracing to the objection mechanism. The tracing can be enabled
     procedurally with uvm_objection::trace_mode() or can be set via the
     command line with +UVM_OBJECTION_TRACE.

   - Added raised, dropped, and all_dropped callbacks to the uvm_objection
     class. This allows external callbacks to be attached to objections
     (not just via the virtual methods in the component class).

** API Changes

   - All ovm identifiers changed to uvm.

     * ovm_ replaced with uvm_
     * OVM_ replaced with UVM_
     * tlm_ replaced with uvm_tlm_
     * TLM_ replaced with UVM_TLM_
     * A conversion script is provided, <root>/bin/OVM_UVM_Rename.pl

   - All deprecated OVM features were removed (refer to the file 
     <ovmhome>/deprecated.txt for a complete list). This includes the
     removal of the URM and AVM compatibility layers.

   - Callback queues are no longer accessed via uvm_callbacks#(T,CB)::get_global_cbs.
     Users are now expected to use the new callback iterator class,
     uvm_callback_iter#(T,CB) (or the iteration macros) for iteration,
     and use uvm_callbacks#(T,CB)::add() for adding callbacks.

   - Added a string description argument to the add/drop_objection 
     methods. This primarily effects the uvm_component raised, dropped
     and all_dropped callback methods because their signatures must be
     changed to match the new signature which includes the string argument.

** Documentation Fixes

   - Reference manual and User Guide modified with UVM name changes, 
     callback facility enhancements, and Accellera organization changes.
	
The OVM-2.1.1 release notes can be reviewed for additional information on 
previous releases of the core functionality of UVM - please reference the
file "release-notes.txt" available in the OVM-2.1.1 release which can be
downloaded at http://ovmworld.org/downloads.php.


** Mantis Issues Resolved for this release

  http://www.eda.org/svdb/main_page.php

  To see the details of any one of these specific issues, please go to the 
  website above and in the box that has 'Issue #' in it, enter the number
  below and click on jump.

Id	    Summary	
-------------------------------------------------------------------				
3396    cmdline arguments are not honored when supplied via -F file and the DPI cmdline parsing is in effect
3381    Not all macros have the prototype in the reference manual.
3379    Default semantic for 'run_phase' and clean exit for all rt-phases
3328    Various errata in $fdisplay calls
3310	Please augment the ILLCRT fatal error with the component being created's name and also the parent specified.					
3083	Callback trace messages don't always print					
3096	uvm_objection_cb missing the objection argument in raise/drop/all_dropped					
3097	invalid code with check_config_usage()					
3128	In uvm_simple_sequence there are fields which are null when randomization is called					
3138	Macro's that contain $uvm_report_warning/error should use `uvm_warning/error					
3143	Documentation of `uvm_do[_obj]_callbacks_exit_on is misleading					
3148	uvm_active_passive_enum is lacking documentation					
3152	try_next_item() can actually block and consume time.					
3153	Sequences should make use of the sequencer's (on which they operate) report handler--not the global report handler.					
3159	uvm_report_server issue with simulators.					
3167	is_active field not included in uvm_agent?					
3170	Need better fatal message for an erroneous item_done() call.					
3174	Need a hook() in sequences to action(s) when stop_sequences() or sequence.kill() is called.					
3175	Need a means to control message emission that is based on more than purely 'verbosity'.					
3186	display_objections Natural Docs output actually shows m_display_objections prototype					
3187	Objection reporting code does not use messaging macros and is unsafe due to warnings and errors being sensitive to verbosity.
3214	drop_objection is not safe when the drop is done in a fork and then followed by disable fork					
3235	UVM TLM2 needs to address requirement to match simulation host endianness as per SC TLM2 LRM					
3239	protected rand fileds in GP prevent use with inline constraints within sequences					
3244	John Aynsley:  Naming this "SV implementation of TLM2" is misleading and confusing					
3247	John Aynsley/Stuart Swan: Global Quantum and the Quantum keeper					
3251	uvm_objection::m_forked_drop does not properly handle the case where obj is unknown					
3271	Race condition in callbacks causes simulator failure					
3294	Refactor code to avoid file.sv/.svh explosion					
3302	Auto-config for container objects does not poke into containers					
3308	New Phase Names Can Conflict with User Legacy Code					
3309	Change Legacy Phase Names to be Consistent with New Phase Names					
3330	Add Checks to Make Sure that We Are Still in Time Point 0 When entering start_of_simulation() & run()					
3332	Components, like tlm_fifo, should be registered with the factory					
3339	Need to decide and document semantics of phasing shutdown across domains.					
3341	ovm run phase semantic inconsistent with new runtime phase semantics					
3351	ensure test coverage for fixed mantis items POST-API-FREEZE					
3367	Phasing semantics and reduction of complexity.					
3329	The reference register data base is updated by default unlike discussed					
3345	Cannot print addressMap / register					
3348	Shared register (RO and WO register at same offset) doesnât work with explicit monitoring.					
3358	uvm_transaction in the reference guide					
3359	ref related issues					
3372	the register user guide does not reflect the latest implimentation or recommend methodology					
3301	phase_ended() not being called  when subcomponents have non-0-time phases					
3303	Natural Docs for phasing refers to "task void exec_task"					
3306	add_phase() does not check before_phase is after after_phase					
3322	Need clear semantics for standard phases					
3324	uvm_phase_schedule::sync() summary of usage does not match implementation					
3333	uvm_thread_mode_t					
3334	raise_objection description and argument					
3350	add is(), is_after(), is_before() to uvm_phase_schedule					
3356	uvm_component::stop(string ph_name) is only API using string					
3363	uvm_sequence_base::starting_phase is undocumented					
3365	phase termination conditions					
3380	phase_ended() not called upon jump, making get_jump_target() useless					
3292	Do not auto-start sequence if none specified by user					
3315	Deprecate sequence library in sequencer in favor of new seq_library base class					
3317	uvm_objection performance issue					
3331	uvm_pair and uvm_algorithmic_comparator not UVM compliant					
3337	Remove set_phase_seq in favor of config/resources; add ability to configure default sequence instance					
3323	Name clashes with Methodology source code					
3327	Check enhancement for set_config_object(0 method					
3103	Enum name() method should be used to get enum name string.					
3133	example set_object_local for is not compiling					
3223	Race condition with uvm_top initialization					
3226	Add ANSI coloring to severity					
3234	%m.%s in error message					
3288	bad virtual interface connection example					
3319	Make uvm.sv the main, top-level file and delete uvm.svh					
3344	Field macros do not operate properly when combining flags using BITWISE-OR operator					
3354	null object handle de-referenced in uvm_field_object() macro					
3361	UVM_NOPACK not honored by field macros					
3364	Add error message if model is not locked					
3368	Add a UVM_INFO message on phase transitions					
3370	Suspending, resetting and turning off components then resuming them					
3129	Killing a sequence does not remove it from the sequence queue					
3132	Global report methods can cause null pointer derefernce/crash					
3189	When error count is hit UVM dies instead of going to report phase					
3218	Data field macros incur extra, unnecessary overhead					
3220	UVM uses $time instead of $realtime so time information is lost					
3227	Memory leak in objections when objections are raised/dropped in sequences					
3228	uvm_pool::add issues warning if element exists					
3252	uvm_recoder::record_real dosn't do bits to real conversion					
3256	get_config difference at run time vs. build time					
3257	Build precedence for wildcard resolution is not backward compatible at build time					
3261	glob to re conversion is incorrect					
3262	argument ordering is inconsistent between config and resources					
3263	there is no concept of hiearchy associated with resources					
3266	rename the uvm_resource_proxy class					
3267	need a way to turn off auditing completely and/or remove accessor information					
3273	Can not set override from uvm_resource_db					
3277	fields generate MLTFLD errors					
3282	phase callbacks need to happen before/after phase methods					
3283	thread cleanup should not be done in the uvm_phase_imp::execute method					
3284	phase processes are never removed from the phase process list					
3285	robustness of uvm_component::get_current_phase()					
3311	Pesistent and proactive thread semantics are not working					
3312	domains are implicitly created					
3314	add back the uvm_top_levels					
3316	domains are being synchronized by default					
3325	phase.kill does not seem to be properly killing the phase					
3340	uvm_test_done objection causes immediate jump to extract					
3375	ubus example incorrectly redefines is_active field					
