Sie sind auf Seite 1von 19

Migrating from OVM (or UVM-1.0ea) to UVM-1.

0
Product Version 10.2 May 6, 2011

Copyright Statement

2011 Cadence Design Systems, Inc. All rights reserved worldwide. Cadence and the Cadence logo are registered trademarks of Cadence Design Systems, Inc. All others are the property of their respective holders.

May 6, 2011

Product Version 10.2

Migrating from OVM (or UVM-1.0ea) to UVM-1.0

Contents
Purpose ........................................................................................................................ 4 Audience ...................................................................................................................... 4 Migration process ......................................................................................................... 4 Specific Migration Issues ............................................................................................. 5 Phasing Changes ..................................................................................................... 5 Sequence Changes .................................................................................................. 7 Configuration .......................................................................................................... 10 Other migration issues ............................................................................................ 12 Summary .................................................................................................................... 12 References ................................................................................................................. 13 Appendix A: Deprecation Warning Mapping .............................................................. 13 Appendix B: Removed Deprecated Functionality ....................................................... 18 Removed global variables ...................................................................................... 18 Removed global functions ...................................................................................... 19 Removed classes ................................................................................................... 19 Removed class methods ........................................................................................ 19 Removed Macros ................................................................................................... 19

May 6, 2011

Product Version 10.2

Migrating from OVM (or UVM-1.0ea) to UVM-1.0

Purpose
UVM-1.0 is the first standard release of UVM from Accellera. While UVM is based on OVM and moving a verification environment from OVM to UVM is largely a matter of replacing Os with Us, there are a number of things you must be aware of when converting your environment: Old, deprecated, OVM functionality was removed from UVM-1.0. Some OVM functionality was kept but deprecated, especially in the area of sequence libraries. Configuration, field macros and phasing underwent significant architectural changes in order to support new functionality which may affect OVM environments. The addition of runtime phases requires a new phasing semantic that is inconsistent with the OVM run phase semantic. This application notes describes the process for migrating an OVM (or UVM-1.0ea) environment to use UVM-1.0.

Audience
This document is intended for OVM users who are ready to move their environment to UVM-1.0. It is also applicable for users using UVM-1.0ea who are ready to move forward to UVM-1.0.

Migration process
The basic process for moving an environment is provided below: 1. Convert Os to Us using the ovm2uvm.pl script at <uvm_home>/bin/ovm2uvm.pl. For UVM-1.0ea users, this step is not needed. 2. Compile the environment, fixing old deprecated OVM functionality that was removed from UVM-1.0 (and thus will not compile). Refer to the appendix Removed Deprecated Functionality for a list of functionality that was removed (the appendix also contains the expected replacement). 3. Run the simulation with the option +UVM_USE_OVM_RUN_SEMANTIC. This option will allow the run phase to continue running past time 0 even without an objection having been raised.

May 6, 2011

Product Version 10.2

Migrating from OVM (or UVM-1.0ea) to UVM-1.0 4. Fix usage of deprecated functionality (warnings with the id UVM_DEPRECATED). Any deprecated functionality where it is possible for the UVM library to produce a warning will issue a UVM_DEPRECATED run-time warning. a. Fix usage of the default sequence first (i.e. replace the set_config_string of default_sequence to an appropriate uvm_config_db#(uvm_object_wrapper::set). This will ensure that traffic is still correctly generated before making other sequence library changes. b. Remove usage of any other deprecated configuration variables (e.g. count). c. Remove usage of the string based sequence library (`uvm_sequencer_utils, etc.). 5. Rerun the simulation with the define +define+UVM_NO_DEPRECATED. This will cause the usage of any other deprecated functionality to produce a compile time error.

Specific Migration Issues


This section goes into detail about specific migration issues. Note that the migration of the old deprecated OVM features is in the appendix Removed Deprecated Functionality since this is not specific to UVM-1.0, although UVM-1.0 forces the issue by removing the old deprecated functionality completely.

Phasing Changes
1. The phase implementation task/function prototypes have been changed to include _phase in the name and to include the phase object as an argument. All phase tasks/functions should be translated:
function void function void function void function function void function task run(); function void function void function void build(); function void build_phase(uvm_phase phase); connect(); function void connect_phase(uvm_phase phase); end_of_elaboration(); void end_of_elaboration_phase(uvm_phase phase); start_of_simulation(); void start_of_simulation_phase(uvm_phase phase); task run_phase(uvm_phase phase); extract(); function void extract_phase(uvm_phase phase); check(); function void check_phase(uvm_phase phase); report(); function void report_phase(uvm_phase phase);

2. It is no longer legal to manually call the build phase function. This will now result in a run-time warning. Any direct calls to <comp>.build() should be removed; allow the phasing system to automatically call the build method. In UVM-1.0 a direct call to build() will result in a deprecation message.

May 6, 2011

Product Version 10.2

Migrating from OVM (or UVM-1.0ea) to UVM-1.0


function void mycomponent::build(); child1 = mychild::type_id::create(child1,this); child1.build(); //just remove this direct call endfunction

3. UVM-1.0 adds run time phases (phases that execut in parallel to the run phase). These phases require user information in order to proceed forward. To facilitate this, the uvm_objection mechanism is used as the way for a component to indicate it has an objection to a phase moving forward. This is true for all task based phases, including the run phase. This new UVM-1.0 semantic means that a component somewhere in the environment must object to the run phase ending during the first delta-cycle of the run phase; if no component objects to the run phase ending, then the run phase will end at time 0. To get the old OVM style run semantic where a global_stop_request() or mid-simulation raise/drop of the ovm_test_done objection indicated the end of the run phase you must use the +UVM_USE_OVM_RUN_SEMANTIC command line argument. This will cause the run phase to use the old OVM style run semantic. You can also replace your global_stop_request() code with an explicit raise/drop of the run phase objection. For example:
//Old OVM code calling global stop request task mytest::run(); #5000 global_stop_request(); endtask //New UVM-1.0 code that will have an identical semantic task mytest::run_phase(uvm_phase phase); phase.raise_objection(this, Test objection for run phase); #5000 phase.drop_objection(this, Test objection for run phase); endtask

4. Associated with #3 above, sequences now have a starting_phase property which the sequence can raise/drop objections on. For example:
class mysequence extends uvm_sequence#(myitem); task pre_body; if(starting_phase != null) starting_phase.raise_objection(this, mysequence starting); endtask function void cleanup(); if(get_parent_seq() == null && starting_phase != null) starting_phase.drop_objection(this, mysequence ending); endfunction task post_body; cleanup(); endtask function do_kill(); cleanup(); endfunction task body; endtask endclass

May 6, 2011

Product Version 10.2

Migrating from OVM (or UVM-1.0ea) to UVM-1.0 5. The stop mechanism, global_stop_request() and the uvm_component::stop() callback are deprecated. The phase objections and the uvm_component::phase_ready_to_end() callback may be used in a similar way that the uvm_component::stop() callback was used in OVM. This means, if you are setting enable_stop_interrupt to 1 in any component, you should change your stop code to the run phase objection. If you need to do something specifically when everyone is ready to stop run, you can use the uvm_component::phase_ready_to_end() callback.
//Old OVM style stop mechanism task mycomponent::run; enable_stop_interrupt = 1; enable_stop_interrupt = 0; endtask task stop (string ph_name); wait(enable_stop_interrupt == 0); endtask

//UVM-1.0 replacement using objection task mycomponent::run_phase(uvm_phase phase); phase.raise_objection(this, mycomponent active); phase.drop_objection(this, mycomponent active); endtask

Sequence Changes
In UVM-1.0 the name-based sequence library has been deprecated. The name based sequence library has many deficiencies and Accellera has determined that it should not be part of the standard. In UVM-2.0 a type-based sequence library is planned to be released as part of the standard; it is currently available in an early access form as part of the UVM-1.0 distribution. The changes around sequence usage are for removing deprecated functionality. The deprecated functionality is likely to be removed from UVM-2.0 (or similar release) and therefore it is wise to remove deprecated usage as soon as possible. The deprecated sequence features are all around the name-based sequence library, including, special sequence/sequencer macros, simple/random/exhaustive predefined sequences and the string based default sequence. 1. String based default sequence,
set_config_string(<inst>,default_sequence,<seq>)

is deprecated. Use run

phase specific default sequence:


Example: set_config_string(seqr, default_sequence, myseq); to uvm_config_db#(uvm_object_wrapper)::set(this, seqr.run_phase,

May 6, 2011

Product Version 10.2

Migrating from OVM (or UVM-1.0ea) to UVM-1.0


default_sequence, myseq::type_id::get());

NOTE: with the type based style you may provide a factory object as shown in the example, or you may supply an explicit sequence instance using uvm_config_db#(uvm_sequence_base)::set(). NOTE2: if you are using a generated string for the default sequence (for example, getting a default sequence from the command line), you must convert the string to a factory wrapper object using uvm_factory::find_by_name(). For example:
set_config_string(seqr, default_sequence, somestring_variable); to uvm_config_db#(uvm_object_wrapper)::set(this, seqr.run_phase, default_sequence, factory.find_by_name(somestring_variable));

2. Setting the count config property, using uvm_config_int(<sequencer>, count, <value>) will result in a deprecation warning. This variable is only used for controlling the string-based default_sequence and the built-in random sequence, so it can safely be removed if the alternative default sequence in 1 is used (and random sequence is not being used). A count setting of 0 may be safely removed because the uvm_random_sequence is no longer started by default if the user does not specify a default sequence. 3. The simple, random and exhaustive sequences are deprecated. These sequences are loaded in the string based sequence library with the macro `uvm_update_sequence_lib_and_item (or the `uvm_update_sequence_lib) macro. Removing this macro will remove the deprecation warnings. If a simple, random or exhaustive sequence is needed, an object of the new uvm_sequence_library type can be created; this is a sequence derivative which contains the simple, random and exhaustive functionality. 4. The `uvm_sequence_utils macro, binding a specific sequence type to a specific sequencer type is deprecated. This macro was used to set up the string based sequence library for a particular sequencer type, but limited generic sequences to be bound to a specific sequencer type. This macro should be replaced with `uvm_object_utils (removing the sequencer type argument from the macro call). The macro `uvm_add_to_seq_lib can be used to add a particular sequence type to a specific sequence library type if this functionality is desired. NOTE: if the sequence needs to be bound to a specific sequencer type for proper operation (i.e. referring to the p_sequencer variable), then the macro `uvm_declare_p_sequencer should be used in conjunction with `uvm_object_utils to provide all of the necessary functionality to the sequence type.

May 6, 2011

Product Version 10.2

Migrating from OVM (or UVM-1.0ea) to UVM-1.0 5. The `uvm_sequencer_utils macro, setting up the string based sequence library in a sequencer, is deprecated. This macro can be replaced with `uvm_component_utils for basic component functionality. 6. The messaging facility, uvm_report_info/warning/error/fatal have been added into the uvm_sequence_item class so that the report macros may be used directly in sequences; it is no longer necessary to refer to the m_sequencer/p_sequencer to send a message. Below is a simple migration example which replaces all of the functionality with the new sequence library, etc. If the sequence library functionality is not required then it can be left out.

May 6, 2011

Product Version 10.2

Migrating from OVM (or UVM-1.0ea) to UVM-1.0 UVM-1.0EA (OVM)


class myitem extends uvm_sequence_item; function new(string name=myitem); super.new(name); endfunction `uvm_object_utils(myitem) endclass typedef class myseqr;

UVM-1.0
class myitem extends uvm_sequence_item; function new(string name=myitem); super.new(name); endfunction `uvm_object_utils(myitem) endclass typedef class myseqr; typedef uvm_sequence_library#(myitem) myseq_lib;

class myseq extends uvm_sequence#(myitem); `uvm_sequence_utils(myseq,myseqr)

task body; myitem item; for(int i=0; i<p_sequencer.cnt; ++i)begin p_sequencer.uvm_report_info(SEND, $sformatf(Sending item: %s, item.sprint()), UVM_MEDIUM); `uvm_do(item) end endtask endclass class myseqr extends uvm_sequencer#(myitem); `uvm_sequencer_utils(myseqr) function new(string name, uvm_component parent); super.new(name,parent); `uvm_update_sequence_lib_and_item(myitem) //or `uvm_update_sequence_lib endfunction rand int cnt = 10; endclass class test extends uvm_component; function void build; super.build(); set_config_string(agent.seqr, default_sequence, uvm_exhaustive_sequence); endfunction endclass

class myseq extends uvm_sequence#(myitem); `uvm_object_utils(myseq) `uvm_declare_p_sequencer(myseqr) `uvm_add_to_seq_lib(myseq, myseq_lib) task body; myitem item; for(int i=0; i<p_sequencer.cnt; ++i)begin `uvm_info(SEND, $sformatf(Sending item: %s, item.sprint()), UVM_MEDIUM) `uvm_do(item) end endtask endclass class myseqr extends uvm_sequencer#(myitem); `uvm_component_utils(myseqr) function new(string name, uvm_component parent); super.new(name,parent); endfunction rand int cnt = 10; endclass

class test extends uvm_component; function void build_phase(uvm_phase phase); super.build_phase(phase); myseq_lib slib = myseq_lib::type_id::create(slib,this); slib.selection_mode = UVM_SEQ_LIB_RANDC; void(slib.randomize()); uvm_config_seq::set(this, agent.seqr.run_phase, default_sequence, slib); endfunction endclass

Configuration
The configuration database from OVM was re-architected to provide a more general purpose system, referred to in UVM as the resource database. This database is a typebased system. The old OVM style access to the database through the set_config_* and get_config_* interface is still available. However, the resource database provides a type based system that may be used for storing and retrieving any object type, such as

May 6, 2011

10

Product Version 10.2

Migrating from OVM (or UVM-1.0ea) to UVM-1.0 virtual interfaces or configuration objects. One thing to be careful of is to ensure that the type used for a set operation is identical to the type that will be used by the get operation. For example, if a component uses get_config_int() to access an integral configuration property, then a setter should use set_config_int, or the equivalent uvm_config_db#(uvm_bitstream_t)::set(). NOTE: due to the rearchitecture of the configuration system, some issues have been found with respect to auto-configuration, especially in the use of wildcarded fields. It is a good practice (primarily for performance, but also for consistent semantics) to remove wildcard fields if possible (wildcard instances are fine to use). For example: Instead of: set_config_int(myinst.*, val*, 10); Do set_config_int(myinst.*, value, 10); set_config_int(myinst.*, value1,10); The resource database has three layers: the lowest level layer it the uvm_resource_pool where you work directly on queues of resources and resource containers, the middle layer uvm_resource_db which provides more convenient user access to values in resource containers, and the configuration layer uvm_config_db which provides the hierarchical configuration consistent with the OVM style configuration. For the purposes of migration, the uvm_config_db layer is most often what should be used. The uvm_resource_db layer would be used for those situations where there is no hierarchical context for the resource that is being used (i.e. it is a global resource that can be used from anywhere in the verification environment). While it is not necessary to replace set/get_config calls, it may be desirable to do so for consistency. Below are examples of how set/get_config calls can be replaced (note that the type shown in red is the type that would be used if the get side is using autoconfiguration):
From set_config_int(myinst.*,val,10); get_cofnig_int(val,value); To - uvm_config_db#(int)::set(this,myinst.*,val,10); uvm_config_db#(int)::get(this,,val,value); or - uvm_config_db#(uvm_bitstream_t)::set(this,myinst.*,val,10); uvm_config_db#(uvm_bitstream_t)::get(this,,val,value); From set_config_string(myinst.*,val,someval); get_config_string(this,,val,value); To - uvm_config_db#(string)::set(this,myinst.*,val,someval); uvm_config_db#(string)::get(this,,val,value);

May 6, 2011

11

Product Version 10.2

Migrating from OVM (or UVM-1.0ea) to UVM-1.0


From set_config_object(myinst.*,val,myobj); get_config_object(val,tmp); $cast(myobj,tmp); To - uvm_config_db#(myobj_type)::set(this,myinst.*,val,myobj); uvm_config_db#(myobj_type)::get(this,,val,myobj); uvm_config_db#(uvm_object)::set(this,myinst.*,val,myobj); uvm_config_db#(uvm_object)::get(this,,val,tmp); $cast(myobj,tmp);

Other migration issues


This section lists some additional differences between UVM-1.0 and OVM/UVM-1.0ea. These differences may affect some environments, but in general should not affect users. 1. The global variable uvm_top_levels was moved into the uvm_root class as a static variable. Any code which directly references uvm_top_levels will need to instead reference uvm_root::top_levels. 2. The class uvm_report_global_server is deprecated and the class uvm_report_server is now a proper singleton object. The variable uvm_report_global_server::server no longer exists (this was not intended to be user accessible but was unprotected because SystemVerilog does not have friend classes). Access to the report server should be done by calling uvm_report_server::get_server(). 3. The uvm_printer class table printer was changed to auto-size the table columns. Because of this change, many of the formatting options for the table printer are now ignored. 4. In OVM, the default phase timeout (ovm_root::phase_timeout) was set to 0 which caused a timeout of `OVM_DEFAULT_TIMEOUT-$time. In UVM the default phase timeout is set to `UVM_DEFAULT_TIMEOUT. In some cases, this change may cause a simulation time overflow or a situation where the timeout time is incorrect for your needs. The `UVM_DEFAULT_TIMEOUT can be set via the command line as +define+UVM_DEFAULT_TIMEOUT=0 (or whatever is appropriate) for the specific circumstances.

Summary
UVM-1.0 provides a standardized methodology library. OVM users have a significant advantage in moving to this library as opposed to user of other available methodology libraries. However, there are differences between OVM and UVM-1.0 that users must account for when making the move. This application note provids the process for

May 6, 2011

12

Product Version 10.2

Migrating from OVM (or UVM-1.0ea) to UVM-1.0 migration of an OVM (or UVM-1.0ea) environment to UVM-1.0 as well as detailed information on the most significant migration issues.

References
<ovm_home>/deprecated.txt deprecation list from an OVM-2.1.1 installation. <uvm_home>/release_notes.txt release notes from a UVM-1.0 installation. <uvm_home>/docs/uvm_ref_guide_1.0.pdf UVM-1.0 Library Reference from a UVM-1.0 installation.

Appendix A: Deprecation Warning Mapping


This appendix maps specific deprecation warnings back to the specific functionality that has been removed (in some cases it is not obvious how a particular deprecation warning maps back to a user visible feature). Message: build()/build_phase() has been called explicitly, outside of the
phasing system. This usage of build is deprecated and may lead to unexpected behavior."

Reason: The build method is explicitly being called by the parent component. Example:
function void mycomponent::build(); child = subcomponent::type_id::create(child, this); child.build(); endfunction

Resolution: Remove the explicit call to build. The phasing system will call build/build_phase() for all components, so the explicit call is unnecessary. Message: uvm_pkg::uvm_sequence_base.get_seq_kind deprecated." Reason: The get_seq_kind() method is the method that the old string-based sequence library used to convert the sequence name string into an integer that could be used for constraints. Example:
constraint myseq::no_rand_seq_ct { seq_kind != get_seq_kind(uvm_random_sequence); }

May 6, 2011

13

Product Version 10.2

Migrating from OVM (or UVM-1.0ea) to UVM-1.0 Resolution: Create a uvm_sequence_library type with the characteristics that you desire (including constraints on selection of sequence kinds). Message: uvm_pkg::uvm_sequence_base.get_sequence deprecated." Reason: The get_sequence() method is the method that the old string-based sequence library used to convert the sequence id (often obtained using get_seq_kind())into an actual sequence object. Example:
task myseq::body(); uvm_sequence_base s; s = get_sequence(get_seq_kind(myseq)); s.start(); endtask

Resolution: The example sequence above would best be converted to a uvm_sequence_library type of sequence. The method uvm_sequence_library::get_sequences() provides access to the sequences associated with the library, and can be used to search for a particular type of sequence to create it. Message: uvm_pkg::uvm_sequence_base.do_sequence_kind deprecated." Reason: The do_sequence_kind() method is the method that the old string-based sequence library used to start a sequence of a kind given by the kind id. Example:
task myseq::body(); uvm_sequence_base s; s = do_sequence_kind(get_seq_kind(myseq)); endtask

Resolution: The example sequence above would best be converted to a uvm_sequence_library type of sequence. The method uvm_sequence_library::get_sequences() provides access to the sequences associated with the library, and can be used to search for a particular type of sequence to create it. Message: uvm_pkg::uvm_sequence_base.get_sequence_by_name deprecated." Reason: The get_sequence_by_name() method is the method that the old string-based sequence library used to convert the string into an actual sequence object (basically doing get_sequence(get_seq_kind())). Example:
task myseq::body();

May 6, 2011

14

Product Version 10.2

Migrating from OVM (or UVM-1.0ea) to UVM-1.0


uvm_sequence_base s; s = get_sequence_by_name(myseq); s.start(); endtask

Resolution: The example sequence above would best be converted to a uvm_sequence_library type of sequence. The method uvm_sequence_library::get_sequences() provides access to the sequences associated with the library, and can be used to search for a particular type of sequence to create it. Message: uvm_pkg::uvm_sequence_base.create_and_start_sequence_by_name deprecated." Reason: The create_and_start_sequence_by_name() method is the method that the old string-based sequence library used to convert the string into an actual sequence object and then start the sequence. Example:
task myseq::body(); uvm_sequence_base s; s = create_and_start_sequence_by_name(myseq); endtask

Resolution: The example sequence above would best be converted to a uvm_sequence_library type of sequence. The method uvm_sequence_library::get_sequences() provides access to the sequences associated with the library, and can be used to search for a particular type of sequence to create it. Message: count config parameter is deprecated and not part of the UVM standard" Reason: The count configuration parameter was used in a set_config_int call in order to turn off the default sequence (setting to 0) or control the number of iterations of the uvm_random_sequence (the old default sequence if no user default sequence was set). Example:
function void mytest::build(); set_config_int(agent.seqr, count, 0); endfunction

Resolution: If the count variable was being set to 0 then the set_config_int call may be safely removed because the uvm_random_sequence is no longer started by default for the run phase. If a non-zero count was being used to control the random sequence, a sequence library object should be used; the sequence library object can be set as the run phases default sequence with an appropriate setting for the number of iterations.

May 6, 2011

15

Product Version 10.2

Migrating from OVM (or UVM-1.0ea) to UVM-1.0 Message: count config parameter is deprecated and not part of the UVM standard" Reason: The max_random_count configuration parameter was used in a set_config_int call in order control the number of iterations of the uvm_random_sequence (the old default sequence if no user default sequence was set). Example:
function void mytest::build(); set_config_int(agent.seqr, max_random_count, 10); endfunction

Resolution: A sequence library object should be used to generate the random sequence; the sequence library object can be set as the run phases default sequence with an appropriate setting for the number of iterations. Message: max_random_depth config parameter is deprecated and not part of the UVM standard" Reason: The max_random_depth configuration parameter was used in a set_config_int call in order control the maximum sequence depth when uvm_random_sequence is being used (e.g. the number of times that a random sequence is itself allowed to create a uvm_random_sequence as a sub sequence). Example:
function void mytest::build(); set_config_int(agent.seqr, max_random_depth, 3); endfunction

Resolution: A sequence library object should be used to generate the random sequence; the sequence library object can be set as the run phases default sequence with an appropriate settings to contain the subsequence depth. Message: pound_zero_count was set but ignored. Sequencer/driver
synchronization now uses 'uvm_wait_for_nba_region'

Reason: The pound_zero_count was used in OVM/UVM-1.0ea to add delta cycles for the try_get_next_item() to allow for delta cycle delays in the sequencer. However, this type of delaying is inherently unstable. UVM-1.0 moved to a full NBA region delay (essentially an infinite #0 delay) for the synchronization to provide better controllability. Example:
function void mytest::build(); set_config_int(agent.seqr, pound_zero_count, 100);

May 6, 2011

16

Product Version 10.2

Migrating from OVM (or UVM-1.0ea) to UVM-1.0


endfunction

Resolution: #0 delays are inherently unstable. UVM-1.0 moved to a full NBA region delay (essentially an infinite #0 delay) for the synchronization to provide better controllability. For this reason, settings of the pound_zero_delay property can safely be removed. Message: Registering sequence 'uvm_exhaustive_sequence' with sequencer '<some_seqr_name>' is deprecated. Registering sequence 'uvm_random_sequence' with sequencer '<some_seqr_name>' is deprecated. up a string based sequence library in the sequencer constructor of the <some_seqr_name> type. Example:
function myseqr::new(string name, uvm_component parent); super.new(name,parent); `uvm_update_sequence_lib endfunction

Reason: The macro `uvm_update_sequence_lib or `uvm_update_sequence_lib_and_item was used to set

Resolution: Remove the `uvm_update_sequence_lib (or `uvm_update_sequence_lib_and_item) macro calls. If a sequence library object is created then it will have a typewide sequence queue that may need to be updated. Message: Registering sequence 'uvm_simple_sequence' with sequencer '<some_seqr_name>' is deprecated. Reason: The macro `uvm_update_sequence_lib_and_item was used to set up a string based sequence library in the sequencer constructor of the <some_seqr_name> type. The _and_item variant sets up the uvm_simple_sequence which just generates an item. Example:
function myseqr::new(string name, uvm_component parent); super.new(name,parent); `uvm_update_sequence_lib_and_item(myitem) endfunction

Resolution: Remove the `uvm_update_sequence_lib_and_item macro calls. If a sequence library object is created then it will have a typewide sequence queue that may need to be updated.

May 6, 2011

17

Product Version 10.2

Migrating from OVM (or UVM-1.0ea) to UVM-1.0 Message: Registering sequence '<some_seq_type>' with sequencer '<some_seqr_name>' is deprecated. Reason: The macro `uvm_sequence_utils or the function add_sequence() was called on a sequencer to add a user sequence to the string-based sequence library. Example:
class mysequence extends uvm_sequence#(myitem); `uvm_sequence_utils(mysequence, myseqr) endclass

Resolution: Replace the `uvm_seqence_utils with `uvm_object_utils. If a uvm_sequence_library was created then a `uvm_add_to_seq_lib macro will need to be used in the sequence type to add the sequence type to the sequence library type. Message: Starting (deprecated) default sequence '<some_seq_type>' on sequencer '<some_sequencer>' Reason: The string configuration property default_sequence was used on a sequencer to start a default sequence from the string-based sequence library. Example:
function void mytest::build(); set_config_string(agent.seqr, default_sequence, my_seq); endfunction

Resolution: Change the use of the string based default_sequence to use the uvm_config_db to set a type based default sequence for the run phase. For example:
function void mytest::build(); uvm_config_db#(uvm_object_wrapper)::set(this, agent.seqr.run_phase, default_sequence, my_seq::type_id::get()); endfunction

Appendix B: Removed Deprecated Functionality


Removed global variables
ovm_test_top (removed) ovm_top_levels (moved to uvm_root::top_levels)

May 6, 2011

18

Product Version 10.2

Migrating from OVM (or UVM-1.0ea) to UVM-1.0 post_new_ph (removed) export_connections_ph (removed) import_connections_ph (removed) configure_ph (removed) _global_reporter (removed, use uvm_report_server::get_server())

Removed global functions


ovm_find_component (replaced by uvm_top.find()) avm_report_message/warning/error/fatal (removed)

Removed classes
ovm_threaded_component (replaced by uvm_component)

Removed class methods


ovm_object::do_sprint (use the ovm_object::do_print() method) ovm_root::print_topology (replaced by uvm_top.print()) ovm_root::print_unit_list (manual traversal) ovm_root::print_unit (uvm_component::print()) ovm_root::print_units (uvm_root::find/uvm_component::print) ovm_env::do_test (removed) ovm_env::do_task_phase (removed) ovm_env::run (removed) ovm_report_object::avm_report_message/warning/error/fatal (removed) ovm_sequence_item::set/get_parent_seq (replaced by uvm_sequence_item::get/set_parent_sequence) ovm_sequencer_base::start_sequence (replaced by ovm_sequencer_base::start())

Removed Macros
`OVM_REPORT_INFO/WARNING/ERROR/FATAL (replaced by `uvm_info/warning/error/fatal)

May 6, 2011

19

Product Version 10.2

Das könnte Ihnen auch gefallen