The library implements the following public API beyond what is documented in 1800.2.
uvm_component | |||||
The library implements the following public API beyond what is documented in 1800.2. | |||||
Class Hierarchy | |||||
| |||||
Class Declaration | |||||
| |||||
new | Creates a new component with the given leaf instance name and handle to its parent. | ||||
Hierarchy Interface | These methods provide user access to information about the component hierarchy, i.e., topology. | ||||
get_parent | Returns a handle to this component’s parent, or null if it has no parent. | ||||
get_full_name | Returns the full hierarchical name of this object. | ||||
get_children | This function populates the end of the children array with the list of this component’s children. | ||||
get_first_child | These methods are used to iterate through this component’s children, if any. | ||||
get_num_children | Returns the number of this component’s children. | ||||
has_child | Returns 1 if this component has a child with the given name, 0 otherwise. | ||||
lookup | Looks for a component with the given hierarchical name relative to this component. | ||||
get_depth | Returns the component’s depth from the root level. | ||||
Phasing Interface | These methods implement an interface which allows all components to step through a standard schedule of phases, or a customized schedule, and also an API to allow independent phase domains which can jump like state machines to reflect behavior e.g. | ||||
build_phase | The uvm_build_phase phase implementation method. | ||||
connect_phase | The uvm_connect_phase phase implementation method. | ||||
end_of_elaboration_phase | The uvm_end_of_elaboration_phase phase implementation method. | ||||
start_of_simulation_phase | The uvm_start_of_simulation_phase phase implementation method. | ||||
run_phase | The <uvm_run_phase> phase implementation method. | ||||
pre_reset_phase | The <uvm_pre_reset_phase> phase implementation method. | ||||
reset_phase | The <uvm_reset_phase> phase implementation method. | ||||
post_reset_phase | The <uvm_post_reset_phase> phase implementation method. | ||||
pre_configure_phase | The <uvm_pre_configure_phase> phase implementation method. | ||||
configure_phase | The <uvm_configure_phase> phase implementation method. | ||||
post_configure_phase | The <uvm_post_configure_phase> phase implementation method. | ||||
pre_main_phase | The <uvm_pre_main_phase> phase implementation method. | ||||
main_phase | The <uvm_main_phase> phase implementation method. | ||||
post_main_phase | The <uvm_post_main_phase> phase implementation method. | ||||
pre_shutdown_phase | The <uvm_pre_shutdown_phase> phase implementation method. | ||||
shutdown_phase | The <uvm_shutdown_phase> phase implementation method. | ||||
post_shutdown_phase | The <uvm_post_shutdown_phase> phase implementation method. | ||||
extract_phase | The <uvm_extract_phase> phase implementation method. | ||||
check_phase | The <uvm_check_phase> phase implementation method. | ||||
report_phase | The <uvm_report_phase> phase implementation method. | ||||
final_phase | The uvm_final_phase phase implementation method. | ||||
phase_started | Invoked at the start of each phase. | ||||
phase_ready_to_end | Invoked when all objections to ending the given phase and all sibling phases have been dropped, thus indicating that phase is ready to begin a clean exit. | ||||
phase_ended | Invoked at the end of each phase. | ||||
set_domain | Apply a phase domain to this component and, if hier is set, recursively to all its children. | ||||
get_domain | Return handle to the phase domain set on this component | ||||
define_domain | Builds custom phase schedules into the provided domain handle. | ||||
set_phase_imp | Override the default implementation for a phase on this component (tree) with a custom one, which must be created as a singleton object extending the default one and implementing required behavior in exec and traverse methods | ||||
suspend | Suspend this component. | ||||
resume | Resume this component. | ||||
resolve_bindings | Processes all port, export, and imp connections. | ||||
Configuration Interface | Components can be designed to be user-configurable in terms of its topology (the type and number of children it has), mode of operation, and run-time parameters (knobs). | ||||
check_config_usage | Check all configuration settings in a components configuration table to determine if the setting has been used, overridden or not used. | ||||
apply_config_settings | Searches for all config settings matching this component’s instance path. | ||||
use_automatic_config | Returns 1 if the component should call apply_config_settings in the build_phase; otherwise, returns 0. | ||||
print_config_settings | Called without arguments, print_config_settings prints all configuration information for this component, as set by previous calls to <uvm_config_db::set()>. | ||||
print_config | Print_config prints all configuration information for this component, as set by previous calls to <uvm_config_db::set()> and exports to the resources pool. | ||||
print_config_with_audit | Operates the same as print_config except that the audit bit is forced to 1. | ||||
print_config_matches | Setting this static variable causes uvm_config_db::get() to print info about matching configuration settings as they are being applied. | ||||
Objection Interface | These methods provide object level hooks into the uvm_objection mechanism. | ||||
raised | The raised callback is called when this or a descendant of this component instance raises the specified objection. | ||||
dropped | The dropped callback is called when this or a descendant of this component instance drops the specified objection. | ||||
all_dropped | The all_droppped callback is called when all objections have been dropped by this component and all its descendants. | ||||
Factory Interface | The factory interface provides convenient access to a portion of UVM’s uvm_factory interface. | ||||
create_component | A convenience function for <uvm_factory::create_component_by_name>, this method calls upon the factory to create a new child component whose type corresponds to the preregistered type name, requested_type_name, and instance name, name. | ||||
create_object | A convenience function for uvm_factory::create_object_by_name, this method calls upon the factory to create a new object whose type corresponds to the preregistered type name, requested_type_name, and instance name, name. | ||||
set_type_override_by_type | A convenience function for uvm_factory::set_type_override_by_type, this method registers a factory override for components and objects created at this level of hierarchy or below. | ||||
set_inst_override_by_type | A convenience function for uvm_factory::set_inst_override_by_type, this method registers a factory override for components and objects created at this level of hierarchy or below. | ||||
set_type_override | A convenience function for uvm_factory::set_type_override_by_name, this method configures the factory to create an object of type override_type_name whenever the factory is asked to produce a type represented by original_type_name. | ||||
set_inst_override | A convenience function for uvm_factory::set_inst_override_by_name, this method registers a factory override for components created at this level of hierarchy or below. | ||||
print_override_info | This factory debug method performs the same lookup process as create_object and create_component, but instead of creating an object, it prints information about what type of object would be created given the provided arguments. | ||||
Hierarchical Reporting Interface | This interface provides versions of the set_report_* methods in the uvm_report_object base class that are applied recursively to this component and all its children. | ||||
set_report_id_verbosity_hier | |||||
set_report_severity_id_verbosity_hier | These methods recursively associate the specified verbosity with reports of the given severity, id, or severity-id pair. | ||||
set_report_severity_action_hier | |||||
set_report_id_action_hier | |||||
set_report_severity_id_action_hier | These methods recursively associate the specified action with reports of the given severity, id, or severity-id pair. | ||||
set_report_default_file_hier | |||||
set_report_severity_file_hier | |||||
set_report_id_file_hier | |||||
set_report_severity_id_file_hier | These methods recursively associate the specified FILE descriptor with reports of the given severity, id, or severity-id pair. | ||||
set_report_verbosity_level_hier | This method recursively sets the maximum verbosity level for reports for this component and all those below it. | ||||
pre_abort | This callback is executed when the message system is executing a UVM_EXIT action. | ||||
Recording Interface | These methods comprise the component-based transaction recording interface. | ||||
accept_tr | This function marks the acceptance of a transaction, tr, by this component. | ||||
do_accept_tr | The accept_tr method calls this function to accommodate any user-defined post-accept action. | ||||
begin_tr | Implementation of uvm_component::begin_tr as described in IEEE 1800.2-2017. | ||||
begin_child_tr | This function marks the start of a child transaction, tr, by this component. | ||||
do_begin_tr | The begin_tr and begin_child_tr methods call this function to accommodate any user-defined post-begin action. | ||||
end_tr | This function marks the end of a transaction, tr, by this component. | ||||
do_end_tr | The end_tr method calls this function to accommodate any user-defined post-end action. | ||||
record_error_tr | This function marks an error transaction by a component. | ||||
record_event_tr | This function marks an event transaction by a component. | ||||
print_enabled | This bit determines if this component should automatically be printed as a child of its parent object. | ||||
tr_database | Specifies the uvm_tr_database object to use for begin_tr and other methods in the Recording Interface. |
function new ( string name, uvm_component parent )
Creates a new component with the given leaf instance name and handle to its parent. If the component is a top-level component (i.e. it is created in a static module or interface), parent should be null.
The component will be inserted as a child of the parent object, if any. If parent already has a child by the given name, an error is produced.
If parent is null, then the component will become a child of the implicit top-level component, uvm_top.
All classes derived from uvm_component must call super.new(name,parent).
These methods provide user access to information about the component hierarchy, i.e., topology.
virtual function uvm_component get_parent ()
Returns a handle to this component’s parent, or null if it has no parent.
virtual function string get_full_name ()
Returns the full hierarchical name of this object. The default implementation concatenates the hierarchical name of the parent, if any, with the leaf name of this object, as given by uvm_object::get_name.
function void get_children( ref uvm_component children[$] )
This function populates the end of the children array with the list of this component’s children.
uvm_component array[$]; my_comp.get_children(array); foreach(array[i]) do_something(array[i]);
function int get_first_child ( ref string name )
These methods are used to iterate through this component’s children, if any. For example, given a component with an object handle, comp, the following code calls uvm_object::print for each child:
string name; uvm_component child; if (comp.get_first_child(name)) do begin child = comp.get_child(name); child.print(); end while (comp.get_next_child(name));
function int has_child ( string name )
Returns 1 if this component has a child with the given name, 0 otherwise.
function uvm_component lookup ( string name )
Looks for a component with the given hierarchical name relative to this component. If the given name is preceded with a ‘.’ (dot), then the search begins relative to the top level (absolute lookup). The handle of the matching component is returned, else null. The name must not contain wildcards.
function int unsigned get_depth()
Returns the component’s depth from the root level. uvm_top has a depth of 0. The test and any other top level components have a depth of 1, and so on.
These methods implement an interface which allows all components to step through a standard schedule of phases, or a customized schedule, and also an API to allow independent phase domains which can jump like state machines to reflect behavior e.g. power domains on the DUT in different portions of the testbench. The phase tasks and functions are the phase name with the _phase suffix. For example, the build phase function is build_phase.
All processes associated with a task-based phase are killed when the phase ends. See uvm_task_phase for more details.
virtual function void build_phase( uvm_phase phase )
The uvm_build_phase phase implementation method.
Any override should call super.build_phase(phase) to execute the automatic configuration of fields registered in the component by calling apply_config_settings. To turn off automatic configuration for a component, do not call super.build_phase(phase).
This method should never be called directly.
virtual function void connect_phase( uvm_phase phase )
The uvm_connect_phase phase implementation method.
This method should never be called directly.
virtual function void end_of_elaboration_phase( uvm_phase phase )
The uvm_end_of_elaboration_phase phase implementation method.
This method should never be called directly.
virtual function void start_of_simulation_phase( uvm_phase phase )
The uvm_start_of_simulation_phase phase implementation method.
This method should never be called directly.
virtual task run_phase( uvm_phase phase )
The <uvm_run_phase> phase implementation method.
This task returning or not does not indicate the end or persistence of this phase. Thus the phase will automatically end once all objections are dropped using phase.drop_objection().
Any processes forked by this task continue to run after the task returns, but they will be killed once the phase ends.
The run_phase task should never be called directly.
virtual task pre_reset_phase( uvm_phase phase )
The <uvm_pre_reset_phase> phase implementation method.
This task returning or not does not indicate the end or persistence of this phase. It is necessary to raise an objection using phase.raise_objection() to cause the phase to persist. Once all components have dropped their respective objection using phase.drop_objection(), or if no components raises an objection, the phase is ended.
Any processes forked by this task continue to run after the task returns, but they will be killed once the phase ends.
This method should not be called directly.
virtual task reset_phase( uvm_phase phase )
The <uvm_reset_phase> phase implementation method.
This task returning or not does not indicate the end or persistence of this phase. It is necessary to raise an objection using phase.raise_objection() to cause the phase to persist. Once all components have dropped their respective objection using phase.drop_objection(), or if no components raises an objection, the phase is ended.
Any processes forked by this task continue to run after the task returns, but they will be killed once the phase ends.
This method should not be called directly.
virtual task post_reset_phase( uvm_phase phase )
The <uvm_post_reset_phase> phase implementation method.
This task returning or not does not indicate the end or persistence of this phase. It is necessary to raise an objection using phase.raise_objection() to cause the phase to persist. Once all components have dropped their respective objection using phase.drop_objection(), or if no components raises an objection, the phase is ended.
Any processes forked by this task continue to run after the task returns, but they will be killed once the phase ends.
This method should not be called directly.
virtual task pre_configure_phase( uvm_phase phase )
The <uvm_pre_configure_phase> phase implementation method.
This task returning or not does not indicate the end or persistence of this phase. It is necessary to raise an objection using phase.raise_objection() to cause the phase to persist. Once all components have dropped their respective objection using phase.drop_objection(), or if no components raises an objection, the phase is ended.
Any processes forked by this task continue to run after the task returns, but they will be killed once the phase ends.
This method should not be called directly.
virtual task configure_phase( uvm_phase phase )
The <uvm_configure_phase> phase implementation method.
This task returning or not does not indicate the end or persistence of this phase. It is necessary to raise an objection using phase.raise_objection() to cause the phase to persist. Once all components have dropped their respective objection using phase.drop_objection(), or if no components raises an objection, the phase is ended.
Any processes forked by this task continue to run after the task returns, but they will be killed once the phase ends.
This method should not be called directly.
virtual task post_configure_phase( uvm_phase phase )
The <uvm_post_configure_phase> phase implementation method.
This task returning or not does not indicate the end or persistence of this phase. It is necessary to raise an objection using phase.raise_objection() to cause the phase to persist. Once all components have dropped their respective objection using phase.drop_objection(), or if no components raises an objection, the phase is ended.
Any processes forked by this task continue to run after the task returns, but they will be killed once the phase ends.
This method should not be called directly.
virtual task pre_main_phase( uvm_phase phase )
The <uvm_pre_main_phase> phase implementation method.
This task returning or not does not indicate the end or persistence of this phase. It is necessary to raise an objection using phase.raise_objection() to cause the phase to persist. Once all components have dropped their respective objection using phase.drop_objection(), or if no components raises an objection, the phase is ended.
Any processes forked by this task continue to run after the task returns, but they will be killed once the phase ends.
This method should not be called directly.
virtual task main_phase( uvm_phase phase )
The <uvm_main_phase> phase implementation method.
This task returning or not does not indicate the end or persistence of this phase. It is necessary to raise an objection using phase.raise_objection() to cause the phase to persist. Once all components have dropped their respective objection using phase.drop_objection(), or if no components raises an objection, the phase is ended.
Any processes forked by this task continue to run after the task returns, but they will be killed once the phase ends.
This method should not be called directly.
virtual task post_main_phase( uvm_phase phase )
The <uvm_post_main_phase> phase implementation method.
This task returning or not does not indicate the end or persistence of this phase. It is necessary to raise an objection using phase.raise_objection() to cause the phase to persist. Once all components have dropped their respective objection using phase.drop_objection(), or if no components raises an objection, the phase is ended.
Any processes forked by this task continue to run after the task returns, but they will be killed once the phase ends.
This method should not be called directly.
virtual task pre_shutdown_phase( uvm_phase phase )
The <uvm_pre_shutdown_phase> phase implementation method.
This task returning or not does not indicate the end or persistence of this phase. It is necessary to raise an objection using phase.raise_objection() to cause the phase to persist. Once all components have dropped their respective objection using phase.drop_objection(), or if no components raises an objection, the phase is ended.
Any processes forked by this task continue to run after the task returns, but they will be killed once the phase ends.
This method should not be called directly.
virtual task shutdown_phase( uvm_phase phase )
The <uvm_shutdown_phase> phase implementation method.
This task returning or not does not indicate the end or persistence of this phase. It is necessary to raise an objection using phase.raise_objection() to cause the phase to persist. Once all components have dropped their respective objection using phase.drop_objection(), or if no components raises an objection, the phase is ended.
Any processes forked by this task continue to run after the task returns, but they will be killed once the phase ends.
This method should not be called directly.
virtual task post_shutdown_phase( uvm_phase phase )
The <uvm_post_shutdown_phase> phase implementation method.
This task returning or not does not indicate the end or persistence of this phase. It is necessary to raise an objection using phase.raise_objection() to cause the phase to persist. Once all components have dropped their respective objection using phase.drop_objection(), or if no components raises an objection, the phase is ended.
Any processes forked by this task continue to run after the task returns, but they will be killed once the phase ends.
This method should not be called directly.
virtual function void extract_phase( uvm_phase phase )
The <uvm_extract_phase> phase implementation method.
This method should never be called directly.
virtual function void check_phase( uvm_phase phase )
The <uvm_check_phase> phase implementation method.
This method should never be called directly.
virtual function void report_phase( uvm_phase phase )
The <uvm_report_phase> phase implementation method.
This method should never be called directly.
virtual function void final_phase( uvm_phase phase )
The uvm_final_phase phase implementation method.
This method should never be called directly.
virtual function void phase_started ( uvm_phase phase )
Invoked at the start of each phase. The phase argument specifies the phase being started. Any threads spawned in this callback are not affected when the phase ends.
virtual function void phase_ready_to_end ( uvm_phase phase )
Invoked when all objections to ending the given phase and all sibling phases have been dropped, thus indicating that phase is ready to begin a clean exit. Sibling phases are any phases that have a common successor phase in the schedule plus any phases that sync’d to the current phase. Components needing to consume delta cycles or advance time to perform a clean exit from the phase may raise the phase’s objection.
phase.raise_objection(this,"Reason");
It is the responsibility of this component to drop the objection once it is ready for this phase to end (and processes killed). If no objection to the given phase or sibling phases are raised, then phase_ended() is called after a delta cycle. If any objection is raised, then when all objections to ending the given phase and siblings are dropped, another iteration of phase_ready_to_end is called. To prevent endless iterations due to coding error, after 20 iterations, phase_ended() is called regardless of whether previous iteration had any objections raised.
virtual function void phase_ended ( uvm_phase phase )
Invoked at the end of each phase. The phase argument specifies the phase that is ending. Any threads spawned in this callback are not affected when the phase ends.
function void set_domain( uvm_domain domain, int hier = 1 )
Apply a phase domain to this component and, if hier is set, recursively to all its children.
Calls the virtual define_domain method, which derived components can override to augment or replace the domain definition of its base class.
virtual protected function void define_domain( uvm_domain domain )
Builds custom phase schedules into the provided domain handle.
This method is called by set_domain, which integrators use to specify this component belongs in a domain apart from the default ‘uvm’ domain.
Custom component base classes requiring a custom phasing schedule can augment or replace the domain definition they inherit by overriding their defined_domain. To augment, overrides would call super.define_domain(). To replace, overrides would not call super.define_domain().
The default implementation adds a copy of the uvm phasing schedule to the given domain, if one doesn’t already exist, and only if the domain is currently empty.
Calling set_domain with the default uvm domain (i.e. uvm_domain::get_uvm_domain ) on a component with no define_domain override effectively reverts the that component to using the default uvm domain. This may be useful if a branch of the testbench hierarchy defines a custom domain, but some child sub-branch should remain in the default uvm domain, call set_domain with a new domain instance handle with hier set. Then, in the sub-branch, call set_domain with the default uvm domain handle, obtained via uvm_domain::get_uvm_domain.
Alternatively, the integrator may define the graph in a new domain externally, then call set_domain to apply it to a component.
function void set_phase_imp( uvm_phase phase, uvm_phase imp, int hier = 1 )
Override the default implementation for a phase on this component (tree) with a custom one, which must be created as a singleton object extending the default one and implementing required behavior in exec and traverse methods
The hier specifies whether to apply the custom functor to the whole tree or just this component.
virtual function void resolve_bindings ()
Processes all port, export, and imp connections. Checks whether each port’s min and max connection requirements are met.
It is called just before the end_of_elaboration phase.
Users should not call directly.
Components can be designed to be user-configurable in terms of its topology (the type and number of children it has), mode of operation, and run-time parameters (knobs). The configuration interface accommodates this common need, allowing component composition and state to be modified without having to derive new classes or new class hierarchies for every configuration scenario.
function void check_config_usage ( bit recurse = 1 )
Check all configuration settings in a components configuration table to determine if the setting has been used, overridden or not used. When recurse is 1 (default), configuration for this and all child components are recursively checked. This function is automatically called in the check phase, but can be manually called at any time.
To get all configuration information prior to the run phase, do something like this in your top object:
function void start_of_simulation_phase(uvm_phase phase); check_config_usage(); endfunction
virtual function void apply_config_settings ( bit verbose = 0 )
Searches for all config settings matching this component’s instance path. For each match, the appropriate set_*_local method is called using the matching config setting’s field_name and value. Provided the set_*_local method is implemented, the component property associated with the field_name is assigned the given value.
This function is called by uvm_component::build_phase.
The apply_config_settings method determines all the configuration settings targeting this component and calls the appropriate set_*_local method to set each one. To work, you must override one or more set_*_local methods to accommodate setting of your component’s specific properties. Any properties registered with the optional `uvm_*_field macros do not require special handling by the set_*_local methods; the macros provide the set_*_local functionality for you.
If you do not want apply_config_settings to be called for a component, then the build_phase() method should be overloaded and you should not call super.build_phase(phase). Likewise, apply_config_settings can be overloaded to customize automated configuration.
When the verbose bit is set, all overrides are printed as they are applied. If the component’s print_config_matches property is set, then apply_config_settings is automatically called with verbose = 1.
virtual function bit use_automatic_config()
Returns 1 if the component should call apply_config_settings in the build_phase; otherwise, returns 0.
function void print_config_settings ( string field = "", uvm_component comp = null, bit recurse = 0 )
Called without arguments, print_config_settings prints all configuration information for this component, as set by previous calls to <uvm_config_db::set()>. The settings are printing in the order of their precedence.
If field is specified and non-empty, then only configuration settings matching that field, if any, are printed. The field may not contain wildcards.
If comp is specified and non-null, then the configuration for that component is printed.
If recurse is set, then configuration information for all comp’s children and below are printed as well.
This function has been deprecated. Use print_config instead.
function void print_config( bit recurse = 0, bit audit = 0 )
Print_config prints all configuration information for this component, as set by previous calls to <uvm_config_db::set()> and exports to the resources pool. The settings are printed in the order of their precedence.
If recurse is set, then configuration information for all children and below are printed as well.
if audit is set then the audit trail for each resource is printed along with the resource name and value
@uvm-accellera The details of this API are specific to the Accellera implementation, and are not being considered for contribution to 1800.2
function void print_config_with_audit( bit recurse = 0 )
Operates the same as print_config except that the audit bit is forced to 1. This interface makes user code a bit more readable as it avoids multiple arbitrary bit settings in the argument list.
If recurse is set, then configuration information for all children and below are printed as well.
static bit print_config_matches
Setting this static variable causes uvm_config_db::get() to print info about matching configuration settings as they are being applied.
@uvm-accellera The details of this API are specific to the Accellera implementation, and are not being considered for contribution to 1800.2
These methods provide object level hooks into the uvm_objection mechanism.
virtual function void raised ( uvm_objection objection, uvm_object source_obj, string description, int count )
The raised callback is called when this or a descendant of this component instance raises the specified objection. The source_obj is the object that originally raised the objection. The description is optionally provided by the source_obj to give a reason for raising the objection. The count indicates the number of objections raised by the source_obj.
virtual function void dropped ( uvm_objection objection, uvm_object source_obj, string description, int count )
The dropped callback is called when this or a descendant of this component instance drops the specified objection. The source_obj is the object that originally dropped the objection. The description is optionally provided by the source_obj to give a reason for dropping the objection. The count indicates the number of objections dropped by the source_obj.
virtual task all_dropped ( uvm_objection objection, uvm_object source_obj, string description, int count )
The all_droppped callback is called when all objections have been dropped by this component and all its descendants. The source_obj is the object that dropped the last objection. The description is optionally provided by the source_obj to give a reason for raising the objection. The count indicates the number of objections dropped by the source_obj.
The factory interface provides convenient access to a portion of UVM’s uvm_factory interface. For creating new objects and components, the preferred method of accessing the factory is via the object or component wrapper (see uvm_component_registry #(T,Tname) and uvm_object_registry #(T,Tname)). The wrapper also provides functions for setting type and instance overrides.
function uvm_component create_component ( string requested_type_name, string name )
A convenience function for <uvm_factory::create_component_by_name>, this method calls upon the factory to create a new child component whose type corresponds to the preregistered type name, requested_type_name, and instance name, name. This method is equivalent to:
factory.create_component_by_name(requested_type_name, get_full_name(), name, this);
If the factory determines that a type or instance override exists, the type of the component created may be different than the requested type. See set_type_override and set_inst_override. See also uvm_factory for details on factory operation.
function uvm_object create_object ( string requested_type_name, string name = "" )
A convenience function for uvm_factory::create_object_by_name, this method calls upon the factory to create a new object whose type corresponds to the preregistered type name, requested_type_name, and instance name, name. This method is equivalent to:
factory.create_object_by_name(requested_type_name, get_full_name(), name);
If the factory determines that a type or instance override exists, the type of the object created may be different than the requested type. See uvm_factory for details on factory operation.
static function void set_type_override_by_type ( uvm_object_wrapper original_type, uvm_object_wrapper override_type, bit replace = 1 )
A convenience function for uvm_factory::set_type_override_by_type, this method registers a factory override for components and objects created at this level of hierarchy or below. This method is equivalent to:
factory.set_type_override_by_type(original_type, override_type,replace);
The relative_inst_path is relative to this component and may include wildcards. The original_type represents the type that is being overridden. In subsequent calls to uvm_factory::create_object_by_type or uvm_factory::create_component_by_type, if the requested_type matches the original_type and the instance paths match, the factory will produce the override_type.
The original and override type arguments are lightweight proxies to the types they represent. See set_inst_override_by_type for information on usage.
function void set_inst_override_by_type( string relative_inst_path, uvm_object_wrapper original_type, uvm_object_wrapper override_type )
A convenience function for uvm_factory::set_inst_override_by_type, this method registers a factory override for components and objects created at this level of hierarchy or below. In typical usage, this method is equivalent to:
factory.set_inst_override_by_type( original_type, override_type, {get_full_name(),".", relative_inst_path});
The relative_inst_path is relative to this component and may include wildcards. The original_type represents the type that is being overridden. In subsequent calls to uvm_factory::create_object_by_type or uvm_factory::create_component_by_type, if the requested_type matches the original_type and the instance paths match, the factory will produce the override_type.
The original and override types are lightweight proxies to the types they represent. They can be obtained by calling type::get_type(), if implemented by type, or by directly calling type::type_id::get(), where type is the user type and type_id is the name of the typedef to uvm_object_registry #(T,Tname) or uvm_component_registry #(T,Tname).
If you are employing the `uvm_*_utils macros, the typedef and the get_type method will be implemented for you. For details on the utils macros refer to Utility and Field Macros for Components and Objects.
class comp extends uvm_component; `uvm_component_utils(comp) ... endclass class mycomp extends uvm_component; `uvm_component_utils(mycomp) ... endclass class block extends uvm_component; `uvm_component_utils(block) comp c_inst; virtual function void build_phase(uvm_phase phase); set_inst_override_by_type("c_inst",comp::get_type(), mycomp::get_type()); endfunction ... endclass
static function void set_type_override( string original_type_name, string override_type_name, bit replace = 1 )
A convenience function for uvm_factory::set_type_override_by_name, this method configures the factory to create an object of type override_type_name whenever the factory is asked to produce a type represented by original_type_name. This method is equivalent to:
factory.set_type_override_by_name(original_type_name, override_type_name, replace);
The original_type_name typically refers to a preregistered type in the factory. It may, however, be any arbitrary string. Subsequent calls to create_component or create_object with the same string and matching instance path will produce the type represented by override_type_name. The override_type_name must refer to a preregistered type in the factory.
function void set_inst_override( string relative_inst_path, string original_type_name, string override_type_name )
A convenience function for uvm_factory::set_inst_override_by_name, this method registers a factory override for components created at this level of hierarchy or below. In typical usage, this method is equivalent to:
factory.set_inst_override_by_name(original_type_name, override_type_name, {get_full_name(),".", relative_inst_path} );
The relative_inst_path is relative to this component and may include wildcards. The original_type_name typically refers to a preregistered type in the factory. It may, however, be any arbitrary string. Subsequent calls to create_component or create_object with the same string and matching instance path will produce the type represented by override_type_name. The override_type_name must refer to a preregistered type in the factory.
function void print_override_info( string requested_type_name, string name = "" )
This factory debug method performs the same lookup process as create_object and create_component, but instead of creating an object, it prints information about what type of object would be created given the provided arguments.
This interface provides versions of the set_report_* methods in the uvm_report_object base class that are applied recursively to this component and all its children.
When a report is issued and its associated action has the LOG bit set, the report will be sent to its associated FILE descriptor.
function void set_report_id_verbosity_hier ( string id, int verbosity )
function void set_report_severity_id_verbosity_hier( uvm_severity severity, string id, int verbosity )
These methods recursively associate the specified verbosity with reports of the given severity, id, or severity-id pair. A verbosity associated with a particular severity-id pair takes precedence over a verbosity associated with id, which takes precedence over a verbosity associated with a severity.
For a list of severities and their default verbosities, refer to uvm_report_handler.
function void set_report_severity_action_hier ( uvm_severity severity, uvm_action action )
function void set_report_id_action_hier ( string id, uvm_action action )
function void set_report_severity_id_action_hier( uvm_severity severity, string id, uvm_action action )
These methods recursively associate the specified action with reports of the given severity, id, or severity-id pair. An action associated with a particular severity-id pair takes precedence over an action associated with id, which takes precedence over an action associated with a severity.
For a list of severities and their default actions, refer to uvm_report_handler.
function void set_report_default_file_hier ( UVM_FILE file )
function void set_report_severity_file_hier ( uvm_severity severity, UVM_FILE file )
function void set_report_id_file_hier ( string id, UVM_FILE file )
function void set_report_severity_id_file_hier( uvm_severity severity, string id, UVM_FILE file )
These methods recursively associate the specified FILE descriptor with reports of the given severity, id, or severity-id pair. A FILE associated with a particular severity-id pair takes precedence over a FILE associated with id, which take precedence over an a FILE associated with a severity, which takes precedence over the default FILE descriptor.
For a list of severities and other information related to the report mechanism, refer to uvm_report_handler.
function void set_report_verbosity_level_hier ( int verbosity )
This method recursively sets the maximum verbosity level for reports for this component and all those below it. Any report from this component subtree whose verbosity exceeds this maximum will be ignored.
See uvm_report_handler for a list of predefined message verbosity levels and their meaning.
virtual function void pre_abort
This callback is executed when the message system is executing a UVM_EXIT action. The exit action causes an immediate termination of the simulation, but the pre_abort callback hook gives components an opportunity to provide additional information to the user before the termination happens. For example, a test may want to executed the report function of a particular component even when an error condition has happened to force a premature termination you would write a function like:
function void mycomponent::pre_abort(); report(); endfunction
The pre_abort() callback hooks are called in a bottom-up fashion.
These methods comprise the component-based transaction recording interface. The methods can be used to record the transactions that this component “sees”, i.e. produces or consumes.
The API and implementation are subject to change once a vendor-independent use-model is determined.
function void accept_tr ( uvm_transaction tr, time accept_time = 0 )
This function marks the acceptance of a transaction, tr, by this component. Specifically, it performs the following actions:
virtual protected function void do_accept_tr ( uvm_transaction tr )
The accept_tr method calls this function to accommodate any user-defined post-accept action. Implementations should call super.do_accept_tr to ensure correct operation.
function int begin_tr ( uvm_transaction tr, string stream_name = "main", string label = "", string desc = "", time begin_time = 0, int parent_handle = 0 )
Implementation of uvm_component::begin_tr as described in IEEE 1800.2-2017.
function int begin_tr( uvm_transaction tr, string stream_name="main", string label="", string desc="", time begin_time=0, int parent_handle=0 );
As an added feature, this implementation will attempt to get a non-0 parent_handle from the parent sequence of the transaction tr if the parent_handle argument is 0 and the transaction can be cast to a uvm_sequence_item.
function int begin_child_tr ( uvm_transaction tr, int parent_handle = 0, string stream_name = "main", string label = "", string desc = "", time begin_time = 0 )
This function marks the start of a child transaction, tr, by this component. Its operation is identical to that of begin_tr, except that an association is made between this transaction and the provided parent transaction. This association is vendor-specific.
This function is deprecated
virtual protected function void do_begin_tr ( uvm_transaction tr, string stream_name, int tr_handle )
The begin_tr and begin_child_tr methods call this function to accommodate any user-defined post-begin action. Implementations should call super.do_begin_tr to ensure correct operation.
function void end_tr ( uvm_transaction tr, time end_time = 0, bit free_handle = 1 )
This function marks the end of a transaction, tr, by this component. Specifically, it performs the following actions:
The transaction’s properties are recorded to the database-transaction on which it was started, and then the transaction is ended. Only those properties handled by the transaction’s do_record method (and optional `uvm_*_field macros) are recorded.
The free_handle bit indicates that this transaction is no longer needed. The implementation of free_handle is vendor-specific.
function int record_error_tr ( string stream_name = "main", uvm_object info = null, string label = "error_tr", string desc = "", time error_time = 0, bit keep_active = 0 )
This function marks an error transaction by a component. Properties of the given uvm_object, info, as implemented in its uvm_object::do_record method, are recorded to the transaction database.
An error_time of 0 indicates to use the current simulation time. The keep_active bit determines if the handle should remain active. If 0, then a zero-length error transaction is recorded. A handle to the database-transaction is returned.
Interpretation of this handle, as well as the strings stream_name, label, and desc, are vendor-specific.
function int record_event_tr ( string stream_name = "main", uvm_object info = null, string label = "event_tr", string desc = "", time event_time = 0, bit keep_active = 0 )
This function marks an event transaction by a component.
An event_time of 0 indicates to use the current simulation time.
A handle to the transaction is returned. The keep_active bit determines if the handle may be used for other vendor-specific purposes.
The strings for stream_name, label, and desc are vendor-specific identifiers for the transaction.
bit print_enabled = 1
This bit determines if this component should automatically be printed as a child of its parent object.
By default, all children are printed. However, this bit allows a parent component to disable the printing of specific children.
uvm_tr_database tr_database
Specifies the uvm_tr_database object to use for begin_tr and other methods in the Recording Interface. Default is <uvm_coreservice_t::get_default_tr_database>.
The uvm_void class is the base class for all UVM classes.
virtual class uvm_void
The uvm_object class is the base class for all UVM data and hierarchical classes.
virtual class uvm_object extends uvm_void
The uvm_report_object provides an interface to the UVM reporting facility.
class uvm_report_object extends uvm_object
The library implements the following public API beyond what is documented in 1800.2.
virtual class uvm_component extends uvm_report_object
Creates a new component with the given leaf instance name and handle to its parent.
function new ( string name, uvm_component parent )
Returns a handle to this component’s parent, or null if it has no parent.
virtual function uvm_component get_parent ()
Returns the full hierarchical name of this object.
virtual function string get_full_name ()
This function populates the end of the children array with the list of this component’s children.
function void get_children( ref uvm_component children[$] )
These methods are used to iterate through this component’s children, if any.
function int get_first_child ( ref string name )
Returns the number of this component’s children.
function int get_num_children ()
Returns 1 if this component has a child with the given name, 0 otherwise.
function int has_child ( string name )
Looks for a component with the given hierarchical name relative to this component.
function uvm_component lookup ( string name )
Returns the component’s depth from the root level.
function int unsigned get_depth()
The uvm_build_phase phase implementation method.
virtual function void build_phase( uvm_phase phase )
Create and configure of testbench structure
class uvm_build_phase extends uvm_topdown_phase
The uvm_connect_phase phase implementation method.
virtual function void connect_phase( uvm_phase phase )
Establish cross-component connections.
class uvm_connect_phase extends uvm_bottomup_phase
The uvm_end_of_elaboration_phase phase implementation method.
virtual function void end_of_elaboration_phase( uvm_phase phase )
Fine-tune the testbench.
class uvm_end_of_elaboration_phase extends uvm_bottomup_phase
The uvm_start_of_simulation_phase phase implementation method.
virtual function void start_of_simulation_phase( uvm_phase phase )
Get ready for DUT to be simulated.
class uvm_start_of_simulation_phase extends uvm_bottomup_phase
The uvm_run_phase phase implementation method.
virtual task run_phase( uvm_phase phase )
The uvm_pre_reset_phase phase implementation method.
virtual task pre_reset_phase( uvm_phase phase )
The uvm_reset_phase phase implementation method.
virtual task reset_phase( uvm_phase phase )
The uvm_post_reset_phase phase implementation method.
virtual task post_reset_phase( uvm_phase phase )
The uvm_pre_configure_phase phase implementation method.
virtual task pre_configure_phase( uvm_phase phase )
The uvm_configure_phase phase implementation method.
virtual task configure_phase( uvm_phase phase )
The uvm_post_configure_phase phase implementation method.
virtual task post_configure_phase( uvm_phase phase )
The uvm_pre_main_phase phase implementation method.
virtual task pre_main_phase( uvm_phase phase )
The uvm_main_phase phase implementation method.
virtual task main_phase( uvm_phase phase )
The uvm_post_main_phase phase implementation method.
virtual task post_main_phase( uvm_phase phase )
The uvm_pre_shutdown_phase phase implementation method.
virtual task pre_shutdown_phase( uvm_phase phase )
The uvm_shutdown_phase phase implementation method.
virtual task shutdown_phase( uvm_phase phase )
The uvm_post_shutdown_phase phase implementation method.
virtual task post_shutdown_phase( uvm_phase phase )
The uvm_extract_phase phase implementation method.
virtual function void extract_phase( uvm_phase phase )
The uvm_check_phase phase implementation method.
virtual function void check_phase( uvm_phase phase )
The uvm_report_phase phase implementation method.
virtual function void report_phase( uvm_phase phase )
The uvm_final_phase phase implementation method.
virtual function void final_phase( uvm_phase phase )
Tie up loose ends.
class uvm_final_phase extends uvm_topdown_phase
Invoked at the start of each phase.
virtual function void phase_started ( uvm_phase phase )
Invoked when all objections to ending the given phase and all sibling phases have been dropped, thus indicating that phase is ready to begin a clean exit.
virtual function void phase_ready_to_end ( uvm_phase phase )
Invoked at the end of each phase.
virtual function void phase_ended ( uvm_phase phase )
Apply a phase domain to this component and, if hier is set, recursively to all its children.
function void set_domain( uvm_domain domain, int hier = 1 )
Return handle to the phase domain set on this component
function uvm_domain get_domain()
Builds custom phase schedules into the provided domain handle.
virtual protected function void define_domain( uvm_domain domain )
Override the default implementation for a phase on this component (tree) with a custom one, which must be created as a singleton object extending the default one and implementing required behavior in exec and traverse methods
function void set_phase_imp( uvm_phase phase, uvm_phase imp, int hier = 1 )
Suspend this component.
virtual task suspend ()
Resume this component.
virtual task resume ()
Processes all port, export, and imp connections.
virtual function void resolve_bindings ()
Check all configuration settings in a components configuration table to determine if the setting has been used, overridden or not used.
function void check_config_usage ( bit recurse = 1 )
Searches for all config settings matching this component’s instance path.
virtual function void apply_config_settings ( bit verbose = 0 )
Returns 1 if the component should call apply_config_settings in the build_phase; otherwise, returns 0.
virtual function bit use_automatic_config()
Called without arguments, print_config_settings prints all configuration information for this component, as set by previous calls to uvm_config_db::set().
function void print_config_settings ( string field = "", uvm_component comp = null, bit recurse = 0 )
Print_config prints all configuration information for this component, as set by previous calls to uvm_config_db::set() and exports to the resources pool.
function void print_config( bit recurse = 0, bit audit = 0 )
Operates the same as print_config except that the audit bit is forced to 1.
function void print_config_with_audit( bit recurse = 0 )
Setting this static variable causes uvm_config_db::get() to print info about matching configuration settings as they are being applied.
static bit print_config_matches
Objections provide a facility for coordinating status information between two or more participating components, objects, and even module-based IP.
class uvm_objection extends uvm_report_object
The raised callback is called when this or a descendant of this component instance raises the specified objection.
virtual function void raised ( uvm_objection objection, uvm_object source_obj, string description, int count )
The dropped callback is called when this or a descendant of this component instance drops the specified objection.
virtual function void dropped ( uvm_objection objection, uvm_object source_obj, string description, int count )
The all_droppped callback is called when all objections have been dropped by this component and all its descendants.
virtual task all_dropped ( uvm_objection objection, uvm_object source_obj, string description, int count )
As the name implies, uvm_factory is used to manufacture (create) UVM objects and components.
virtual class uvm_factory
A convenience function for uvm_factory::create_component_by_name, this method calls upon the factory to create a new child component whose type corresponds to the preregistered type name, requested_type_name, and instance name, name.
function uvm_component create_component ( string requested_type_name, string name )
A convenience function for uvm_factory::create_object_by_name, this method calls upon the factory to create a new object whose type corresponds to the preregistered type name, requested_type_name, and instance name, name.
function uvm_object create_object ( string requested_type_name, string name = "" )
pure virtual function uvm_object create_object_by_name ( string requested_type_name, string parent_inst_path = "", string name = "" )
A convenience function for uvm_factory::set_type_override_by_type, this method registers a factory override for components and objects created at this level of hierarchy or below.
static function void set_type_override_by_type ( uvm_object_wrapper original_type, uvm_object_wrapper override_type, bit replace = 1 )
pure virtual function void set_type_override_by_type ( uvm_object_wrapper original_type, uvm_object_wrapper override_type, bit replace = 1 )
A convenience function for uvm_factory::set_inst_override_by_type, this method registers a factory override for components and objects created at this level of hierarchy or below.
function void set_inst_override_by_type( string relative_inst_path, uvm_object_wrapper original_type, uvm_object_wrapper override_type )
pure virtual function void set_inst_override_by_type ( uvm_object_wrapper original_type, uvm_object_wrapper override_type, string full_inst_path )
A convenience function for uvm_factory::set_type_override_by_name, this method configures the factory to create an object of type override_type_name whenever the factory is asked to produce a type represented by original_type_name.
static function void set_type_override( string original_type_name, string override_type_name, bit replace = 1 )
Configures the factory to create an object of the override’s type whenever a request is made to create an object of the original type, provided no instance override applies.
pure virtual function void set_type_override_by_name ( string original_type_name, string override_type_name, bit replace = 1 )
A convenience function for uvm_factory::set_inst_override_by_name, this method registers a factory override for components created at this level of hierarchy or below.
function void set_inst_override( string relative_inst_path, string original_type_name, string override_type_name )
Configures the factory to create an object of the override’s type whenever a request is made to create an object of the original type using a context that matches full_inst_path.
pure virtual function void set_inst_override_by_name ( string original_type_name, string override_type_name, string full_inst_path )
This factory debug method performs the same lookup process as create_object and create_component, but instead of creating an object, it prints information about what type of object would be created given the provided arguments.
function void print_override_info( string requested_type_name, string name = "" )
function void set_report_id_verbosity_hier ( string id, int verbosity )
These methods recursively associate the specified verbosity with reports of the given severity, id, or severity-id pair.
function void set_report_severity_id_verbosity_hier( uvm_severity severity, string id, int verbosity )
function void set_report_severity_action_hier ( uvm_severity severity, uvm_action action )
function void set_report_id_action_hier ( string id, uvm_action action )
These methods recursively associate the specified action with reports of the given severity, id, or severity-id pair.
function void set_report_severity_id_action_hier( uvm_severity severity, string id, uvm_action action )
function void set_report_default_file_hier ( UVM_FILE file )
function void set_report_severity_file_hier ( uvm_severity severity, UVM_FILE file )
function void set_report_id_file_hier ( string id, UVM_FILE file )
These methods recursively associate the specified FILE descriptor with reports of the given severity, id, or severity-id pair.
function void set_report_severity_id_file_hier( uvm_severity severity, string id, UVM_FILE file )
This method recursively sets the maximum verbosity level for reports for this component and all those below it.
function void set_report_verbosity_level_hier ( int verbosity )
This callback is executed when the message system is executing a UVM_EXIT action.
virtual function void pre_abort
This function marks the acceptance of a transaction, tr, by this component.
function void accept_tr ( uvm_transaction tr, time accept_time = 0 )
The accept_tr method calls this function to accommodate any user-defined post-accept action.
virtual protected function void do_accept_tr ( uvm_transaction tr )
Implementation of uvm_component::begin_tr as described in IEEE 1800.2-2017.
function int begin_tr ( uvm_transaction tr, string stream_name = "main", string label = "", string desc = "", time begin_time = 0, int parent_handle = 0 )
This function marks the start of a child transaction, tr, by this component.
function int begin_child_tr ( uvm_transaction tr, int parent_handle = 0, string stream_name = "main", string label = "", string desc = "", time begin_time = 0 )
The begin_tr and begin_child_tr methods call this function to accommodate any user-defined post-begin action.
virtual protected function void do_begin_tr ( uvm_transaction tr, string stream_name, int tr_handle )
This function marks the end of a transaction, tr, by this component.
function void end_tr ( uvm_transaction tr, time end_time = 0, bit free_handle = 1 )
The end_tr method calls this function to accommodate any user-defined post-end action.
virtual protected function void do_end_tr ( uvm_transaction tr, int tr_handle )
This function marks an error transaction by a component.
function int record_error_tr ( string stream_name = "main", uvm_object info = null, string label = "error_tr", string desc = "", time error_time = 0, bit keep_active = 0 )
This function marks an event transaction by a component.
function int record_event_tr ( string stream_name = "main", uvm_object info = null, string label = "event_tr", string desc = "", time event_time = 0, bit keep_active = 0 )
This bit determines if this component should automatically be printed as a child of its parent object.
bit print_enabled = 1
Specifies the uvm_tr_database object to use for begin_tr and other methods in the Recording Interface.
uvm_tr_database tr_database
The uvm_tr_database class is intended to hide the underlying database implementation from the end user, as these details are often vendor or tool-specific.
virtual class uvm_tr_database extends uvm_object
Returns the name of the object, as provided by the name argument in the new constructor or set_name method.
virtual function string get_name ()
The print method deep-prints this object’s properties in a format and manner governed by the given printer argument; if the printer argument is not provided, the global uvm_default_printer is used.
function void print ( uvm_printer printer = null )
Base class for all task phases.
virtual class uvm_task_phase extends uvm_phase
Get a handle to the singleton uvm domain
static function uvm_domain get_uvm_domain()
pure virtual function uvm_object create_object_by_type ( uvm_object_wrapper requested_type, string parent_inst_path = "", string name = "" )
pure virtual function uvm_component create_component_by_type ( uvm_object_wrapper requested_type, string parent_inst_path = "", string name, uvm_component parent )
The uvm_report_handler is the class to which most methods in uvm_report_object delegate.
class uvm_report_handler extends uvm_object
Calling accept_tr indicates that the transaction item has been received by a consumer component.
function void accept_tr ( time accept_time = 0 )
This function indicates that the transaction execution has ended.
function void end_tr ( time end_time = 0, bit free_handle = 1 )
The do_record method is the user-definable hook called by the record method.
virtual function void do_record ( uvm_recorder recorder )