uvm_component

The uvm_component class is the root base class for UVM components.  In addition to the features inherited from uvm_object and uvm_report_object, uvm_component provides the following interfaces:

Hierarchyprovides methods for searching and traversing the component hierarchy.
Phasingdefines a phased test flow that all components follow, with a group of standard phase methods and an API for custom phases and multiple independent phasing domains to mirror DUT behavior e.g. power
Configurationprovides methods for configuring component topology and other parameters ahead of and during component construction.
Reportingprovides a convenience interface to the uvm_report_handler.  All messages, warnings, and errors are processed through this interface.
Transaction recordingprovides methods for recording the transactions produced or consumed by the component to a transaction database (vendor specific).
Factoryprovides a convenience interface to the uvm_factory.  The factory is used to create new components and other objects based on type-wide and instance-specific configuration.

The uvm_component is automatically seeded during construction using UVM seeding, if enabled.  All other objects must be manually reseeded, if appropriate.  See uvm_object::reseed for more information.

Summary
uvm_component
The uvm_component class is the root base class for UVM components.
Class Hierarchy
Class Declaration
virtual class uvm_component extends uvm_report_object
newCreates a new component with the given leaf instance name and handle to to its parent.
Hierarchy InterfaceThese methods provide user access to information about the component hierarchy, i.e., topology.
get_parentReturns a handle to this component’s parent, or null if it has no parent.
get_full_nameReturns the full hierarchical name of this object.
get_childrenThis function populates the end of the children array with the list of this component’s children.
get_child
get_next_child
get_first_childThese methods are used to iterate through this component’s children, if any.
get_num_childrenReturns the number of this component’s children.
has_childReturns 1 if this component has a child with the given name, 0 otherwise.
set_nameRenames this component to name and recalculates all descendants’ full names.
lookupLooks for a component with the given hierarchical name relative to this component.
get_depthReturns the component’s depth from the root level.
Phasing InterfaceThese 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_phaseThe <Pre-Defined Phases::uvm_build_phase> phase implementation method.
connect_phaseThe <Pre-Defined Phases::uvm_connect_phase> phase implementation method.
end_of_elaboration_phaseThe <Pre-Defined Phases::uvm_end_of_elaboration_phase> phase implementation method.
start_of_simulation_phaseThe <Pre-Defined Phases::uvm_start_of_simulation_phase> phase implementation method.
run_phaseThe <Pre-Defined Phases::uvm_run_phase> phase implementation method.
pre_reset_phaseThe <Pre-Defined Phases::uvm_pre_reset_phase> phase implementation method.
reset_phaseThe <Pre-Defined Phases::uvm_reset_phase> phase implementation method.
post_reset_phaseThe <Pre-Defined Phases::uvm_post_reset_phase> phase implementation method.
pre_configure_phaseThe <Pre-Defined Phases::uvm_pre_configure_phase> phase implementation method.
configure_phaseThe <Pre-Defined Phases::uvm_configure_phase> phase implementation method.
post_configure_phaseThe <Pre-Defined Phases::uvm_post_configure_phase> phase implementation method.
pre_main_phaseThe <Pre-Defined Phases::uvm_pre_main_phase> phase implementation method.
main_phaseThe <Pre-Defined Phases::uvm_main_phase> phase implementation method.
post_main_phaseThe <Pre-Defined Phases::uvm_post_main_phase> phase implementation method.
pre_shutdown_phaseThe <Pre-Defined Phases::uvm_pre_shutdown_phase> phase implementation method.
shutdown_phaseThe <Pre-Defined Phases::uvm_shutdown_phase> phase implementation method.
post_shutdown_phaseThe <Pre-Defined Phases::uvm_post_shutdown_phase> phase implementation method.
extract_phaseThe <Pre-Defined Phases::uvm_extract_phase> phase implementation method.
check_phaseThe <Pre-Defined Phases::uvm_check_phase> phase implementation method.
report_phaseThe <Pre-Defined Phases::uvm_report_phase> phase implementation method.
final_phaseThe <Pre-Defined Phases::uvm_final_phase> phase implementation method.
phase_startedInvoked at the start of each phase.
phase_ready_to_endInvoked when all objections to ending the given phase have been dropped, thus indicating that phase is ready to end.
phase_endedInvoked at the end of each phase.
set_domainApply a phase domain to this component and, if hier is set, recursively to all its children.
get_domainReturn handle to the phase domain set on this component
define_domainBuilds custom phase schedules into the provided domain handle.
set_phase_impOverride 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
suspendSuspend this component.
resumeResume this component.
statusReturns the status of this component.
killKills the process tree associated with this component’s currently running task-based phase, e.g., run.
do_kill_allRecursively calls kill on this component and all its descendants, which abruptly ends the currently running task-based phase, e.g., run.
stop_phaseThe stop_phase task is called when this component’s enable_stop_interrupt bit is set and <global_stop_request> is called during a task-based phase, e.g., run.
enable_stop_interruptThis bit allows a component to raise an objection to the stopping of the current phase.
resolve_bindingsProcesses all port, export, and imp connections.
Configuration InterfaceComponents 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).
set_config_int
set_config_string
set_config_objectCalling set_config_* causes configuration settings to be created and placed in a table internal to this component.
get_config_int
get_config_string
get_config_objectThese methods retrieve configuration settings made by previous calls to their set_config_* counterparts.
check_config_usageCheck all configuration settings in a components configuration table to determine if the setting has been used, overridden or not used.
apply_config_settingsSearches for all config settings matching this component’s instance path.
print_config_settingsCalled without arguments, print_config_settings prints all configuration information for this component, as set by previous calls to set_config_*.
print_configPrint_config_settings prints all configuration information for this component, as set by previous calls to set_config_* and exports to the resources pool.
print_config_with_auditOperates the same as print_config except that the audit bit is forced to 1.
print_config_matchesSetting this static variable causes get_config_* to print info about matching configuration settings as they are being applied.
Objection InterfaceThese methods provide object level hooks into the uvm_objection mechanism.
raisedThe raised callback is called when this or a descendant of this component instance raises the specfied objection.
droppedThe dropped callback is called when this or a descendant of this component instance drops the specfied objection.
all_droppedThe all_droppped callback is called when all objections have been dropped by this component and all its descendants.
Factory InterfaceThe factory interface provides convenient access to a portion of UVM’s uvm_factory interface.
create_componentA 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_objectA 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_typeA 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_typeA 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_overrideA 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_overrideA convenience function for uvm_factory::set_inst_override_by_type, this method registers a factory override for components created at this level of hierarchy or below.
print_override_infoThis 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 InterfaceThis 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_hierThese 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_hierThese 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_hierThese methods recursively associate the specified FILE descriptor with reports of the given severity, id, or severity-id pair.
set_report_verbosity_level_hierThis method recursively sets the maximum verbosity level for reports for this component and all those below it.
pre_abortThis callback is executed when the message system is executing a UVM_EXIT action.
Recording InterfaceThese methods comprise the component-based transaction recording interface.
accept_trThis function marks the acceptance of a transaction, tr, by this component.
do_accept_trThe accept_tr method calls this function to accommodate any user-defined post-accept action.
begin_trThis function marks the start of a transaction, tr, by this component.
begin_child_trThis function marks the start of a child transaction, tr, by this component.
do_begin_trThe begin_tr and begin_child_tr methods call this function to accommodate any user-defined post-begin action.
end_trThis function marks the end of a transaction, tr, by this component.
do_end_trThe end_tr method calls this function to accommodate any user-defined post-end action.
record_error_trThis function marks an error transaction by a component.
record_event_trThis function marks an event transaction by a component.
print_enabledThis bit determines if this component should automatically be printed as a child of its parent object.
recorderSpecifies the uvm_recorder object to use for begin_tr and other methods in the Recording Interface.

new

function new ( string  name,
uvm_component  parent )

Creates a new component with the given leaf instance name and handle to 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).

Hierarchy Interface

These methods provide user access to information about the component hierarchy, i.e., topology.

get_parent

virtual function uvm_component get_parent ()

Returns a handle to this component’s parent, or null if it has no parent.

get_full_name

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.

get_children

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]);

get_child

function uvm_component get_child ( string  name )

get_next_child

function int get_next_child ( ref  string  name )

get_first_child

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));

get_num_children

function int get_num_children ()

Returns the number of this component’s children.

has_child

function int has_child ( string  name )

Returns 1 if this component has a child with the given name, 0 otherwise.

set_name

virtual function void set_name ( string  name )

Renames this component to name and recalculates all descendants’ full names.

lookup

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.

get_depth

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.

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. 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_phase::execute> for more details.

build_phase

virtual function void build_phase( uvm_phase  phase )

The <Pre-Defined Phases::uvm_build_phase> phase implementation method.

Any override should call super.build_phase(phase) to execute the automatic configuration of fields registed 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.

connect_phase

virtual function void connect_phase( uvm_phase  phase )

The <Pre-Defined Phases::uvm_connect_phase> phase implementation method.

This method should never be called directly.

end_of_elaboration_phase

virtual function void end_of_elaboration_phase( uvm_phase  phase )

The <Pre-Defined Phases::uvm_end_of_elaboration_phase> phase implementation method.

This method should never be called directly.

start_of_simulation_phase

virtual function void start_of_simulation_phase( uvm_phase  phase )

The <Pre-Defined Phases::uvm_start_of_simulation_phase> phase implementation method.

This method should never be called directly.

run_phase

virtual task run_phase( uvm_phase  phase )

The <Pre-Defined Phases::uvm_run_phase> phase implementation method.

This task returning or not does not indicate the end or persistence of this phase.  Unlike other task phases, it is not necessary to raise an objection to cause it to persist: it will persists until <global_stop_request()> is called.  However, if a single phase objection is raised using phase.raise_objection(), then the phase will automatically ends 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.

pre_reset_phase

virtual task pre_reset_phase( uvm_phase  phase )

The <Pre-Defined Phases::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.

reset_phase

virtual task reset_phase( uvm_phase  phase )

The <Pre-Defined Phases::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.

post_reset_phase

virtual task post_reset_phase( uvm_phase  phase )

The <Pre-Defined Phases::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.

pre_configure_phase

virtual task pre_configure_phase( uvm_phase  phase )

The <Pre-Defined Phases::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.

configure_phase

virtual task configure_phase( uvm_phase  phase )

The <Pre-Defined Phases::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.

post_configure_phase

virtual task post_configure_phase( uvm_phase  phase )

The <Pre-Defined Phases::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.

pre_main_phase

virtual task pre_main_phase( uvm_phase  phase )

The <Pre-Defined Phases::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.

main_phase

virtual task main_phase( uvm_phase  phase )

The <Pre-Defined Phases::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.

post_main_phase

virtual task post_main_phase( uvm_phase  phase )

The <Pre-Defined Phases::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.

pre_shutdown_phase

virtual task pre_shutdown_phase( uvm_phase  phase )

The <Pre-Defined Phases::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.

shutdown_phase

virtual task shutdown_phase( uvm_phase  phase )

The <Pre-Defined Phases::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.

post_shutdown_phase

virtual task post_shutdown_phase( uvm_phase  phase )

The <Pre-Defined Phases::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.

extract_phase

virtual function void extract_phase( uvm_phase  phase )

The <Pre-Defined Phases::uvm_extract_phase> phase implementation method.

This method should never be called directly.

check_phase

virtual function void check_phase( uvm_phase  phase )

The <Pre-Defined Phases::uvm_check_phase> phase implementation method.

This method should never be called directly.

report_phase

virtual function void report_phase( uvm_phase  phase )

The <Pre-Defined Phases::uvm_report_phase> phase implementation method.

This method should never be called directly.

final_phase

virtual function void final_phase( uvm_phase  phase )

The <Pre-Defined Phases::uvm_final_phase> phase implementation method.

This method should never be called directly.

phase_started

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.

phase_ready_to_end

virtual function void phase_ready_to_end ( uvm_phase  phase )

Invoked when all objections to ending the given phase have been dropped, thus indicating that phase is ready to end.  All this component’s processes forked for the given phase will be killed upon return from this method.  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");

This effectively resets the wait-for-all-objections-dropped loop for phase.  It is the responsibility of this component to drop the objection once it is ready for this phase to end (and processes killed).

phase_ended

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.

set_domain

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 ita base class.

get_domain

function uvm_domain get_domain()

Return handle to the phase domain set on this component

define_domain

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 <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 (see <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.

set_phase_imp

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.

suspend

virtual task suspend ()

Suspend this component.

This method must be implemented by the user to suspend the component according to the protocol and functionality it implements.  A suspended component can be subsequently resumed using resume().

resume

virtual task resume ()

Resume this component.

This method must be implemented by the user to resume a component that was previously suspended using suspend().  Some component may start in the suspended state and may need to be explicitly resumed.

status

function string status ()

Returns the status of this component.

Returns a string that describes the current status of the components.  Possible values include, but are not limited to

”<unknown>”Status is unknown (default)
”FINISHED”Component has stopped on its own accord.  May be resumed.
”RUNNING”Component is running.  May be suspended after normal completion of operation in progress.
”WAITING”Component is waiting.  May be suspended immediately.
”SUSPENDED”Component is suspended.  May be resumed.
”KILLED”Component has been killed and is unable to operate any further.  It cannot be resumed.

kill

virtual function void kill ()

Kills the process tree associated with this component’s currently running task-based phase, e.g., run.

An alternative mechanism for stopping the run phase is the stop request.  Calling <global_stop_request> causes all components’ run_phase processes to be killed, but only after all components have had the opportunity to complete in progress transactions and shutdown cleanly via their <stop> tasks.

do_kill_all

virtual function void do_kill_all ()

Recursively calls kill on this component and all its descendants, which abruptly ends the currently running task-based phase, e.g., run.  See run_phase for better options to ending a task-based phase.

stop_phase

virtual task stop_phase( uvm_phase  phase )

The stop_phase task is called when this component’s enable_stop_interrupt bit is set and <global_stop_request> is called during a task-based phase, e.g., run.

Before a phase is abruptly ended, e.g., when a test deems the simulation complete, some components may need extra time to shut down cleanly.  Such components may implement stop_phase to finish the currently executing transaction, flush the queue, or perform other cleanup.  Upon return from stop_phase, a component signals it is ready to be stopped.

The stop_phase method will not be called if enable_stop_interrupt is 0.

The default implementation is empty, i.e., it will return immediately.

This method should never be called directly.

enable_stop_interrupt

int enable_stop_interrupt = 0

This bit allows a component to raise an objection to the stopping of the current phase.  It affects only time consuming phases (such as the run phase).

When this bit is set, the <stop> task in the component is called as a result of a call to <global_stop_request>.  Components that are sensitive to an immediate killing of its run-time processes should set this bit and implement the stop task to prepare for shutdown.

resolve_bindings

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.

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).  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.

set_config_int

virtual function void set_config_int ( string  inst_name,
string  field_name,
uvm_bitstream_t  value )

set_config_string

virtual function void set_config_string ( string  inst_name,
string  field_name,
string  value )

set_config_object

virtual function void set_config_object ( string  inst_name,   
string  field_name,   
uvm_object  value,   
bit  clone  =  1 )

Calling set_config_* causes configuration settings to be created and placed in a table internal to this component.  There are similar global methods that store settings in a global table.  Each setting stores the supplied inst_name, field_name, and value for later use by descendent components during their construction.  (The global table applies to all components and takes precedence over the component tables.)

When a descendant component calls a get_config_* method, the inst_name and field_name provided in the get call are matched against all the configuration settings stored in the global table and then in each component in the parent hierarchy, top-down.  Upon the first match, the value stored in the configuration setting is returned.  Thus, precedence is global, following by the top-level component, and so on down to the descendent component’s parent.

These methods work in conjunction with the get_config_* methods to provide a configuration setting mechanism for integral, string, and uvm_object-based types.  Settings of other types, such as virtual interfaces and arrays, can be indirectly supported by defining a class that contains them.

Both inst_name and field_name may contain wildcards.

  • For set_config_int, value is an integral value that can be anything from 1 bit to 4096 bits.
  • For set_config_string, value is a string.
  • For set_config_object, value must be an uvm_object-based object or null.  Its clone argument specifies whether the object should be cloned.  If set, the object is cloned both going into the table (during the set) and coming out of the table (during the get), so that multiple components matched to the same setting (by way of wildcards) do not end up sharing the same object.

The following message tags are used for configuration setting.  You can use the standard uvm report messaging interface to control these messages.  CFGNTS -- The configuration setting was not used by any component.  This is a warning.  CFGOVR -- The configuration setting was overridden by a setting above.  CFGSET -- The configuration setting was used at least once.

See get_config_int, get_config_string, and get_config_object for information on getting the configurations set by these methods.

get_config_int

virtual function bit get_config_int ( string  field_name,
inout  uvm_bitstream_t  value )

get_config_string

virtual function bit get_config_string ( string  field_name,
inout  string  value )

get_config_object

virtual function bit get_config_object ( string  field_name,   
inout  uvm_object  value,   
input  bit  clone  =  1 )

These methods retrieve configuration settings made by previous calls to their set_config_* counterparts.  As the methods’ names suggest, there is direct support for integral types, strings, and objects.  Settings of other types can be indirectly supported by defining an object to contain them.

Configuration settings are stored in a global table and in each component instance.  With each call to a get_config_* method, a top-down search is made for a setting that matches this component’s full name and the given field_name.  For example, say this component’s full instance name is top.u1.u2.  First, the global configuration table is searched.  If that fails, then it searches the configuration table in component ‘top’, followed by top.u1.

The first instance/field that matches causes value to be written with the value of the configuration setting and 1 is returned.  If no match is found, then value is unchanged and the 0 returned.

Calling the get_config_object method requires special handling.  Because value is an output of type uvm_object, you must provide an uvm_object handle to assign to (not a derived class handle).  After the call, you can then $cast to the actual type.

For example, the following code illustrates how a component designer might call upon the configuration mechanism to assign its data object property, whose type myobj_t derives from uvm_object.

class mycomponent extends uvm_component;

  local myobj_t data;

  function void build_phase(uvm_phase phase);
    uvm_object tmp;
    super.build_phase(phase);
    if(get_config_object("data", tmp))
      if (!$cast(data, tmp))
        $display("error! config setting for 'data' not of type myobj_t");
      endfunction
    ...

The above example overrides the build_phase method.  If you want to retain any base functionality, you must call super.build_phase(uvm_phase phase).

The clone bit clones the data inbound.  The get_config_object method can also clone the data outbound.

See Members for information on setting the global configuration table.

check_config_usage

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.

Additional detail is provided by the following message tags

  • CFGOVR -- lists all configuration settings that have been overridden from above.
  • CFGSET -- lists all configuration settings that have been set.

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);
  set_report_id_action_hier("CFGOVR", UVM_DISPLAY);
  set_report_id_action_hier("CFGSET", UVM_DISPLAY);
  check_config_usage();
endfunction

apply_config_settings

virtual function void apply_config_settings ( bit  verbose  =  )

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.

print_config_settings

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 set_config_*.  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.

print_config

function void print_config( bit  recurse  =  0,
bit  audit  =  0 )

Print_config_settings prints all configuration information for this component, as set by previous calls to set_config_* and exports to the resources pool.  The settings are printing 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

print_config_with_audit

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.

print_config_matches

static bit print_config_matches = 0

Setting this static variable causes get_config_* 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

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 specfied 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.

dropped

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 specfied 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 the source_obj.

all_dropped

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 the source_obj.

Factory Interface

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.

create_component

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.

create_object

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.

set_type_override_by_type

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.

set_inst_override_by_type

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({get_full_name(),".",
                                   relative_inst_path},
                                   original_type,
                                   override_type);

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.

The following example shows `uvm_*_utils usage

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

set_type_override

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.

set_inst_override

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_type, 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({get_full_name(),".",
                                   relative_inst_path},
                                    original_type_name,
                                   override_type_name);

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.

print_override_info

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.

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.

When a report is issued and its associated action has the LOG bit set, the report will be sent to its associated FILE descriptor.

set_report_id_verbosity_hier

function void set_report_id_verbosity_hier ( string  id,
int  verbosity )

set_report_severity_id_verbosity_hier

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.  An verbosity associated with a particular severity-id pair takes precedence over an verbosity associated with id, which takes precedence over an an verbosity associated with a severity.

For a list of severities and their default verbosities, refer to uvm_report_handler.

set_report_severity_action_hier

function void set_report_severity_action_hier ( uvm_severity  severity,
uvm_action  action )

set_report_id_action_hier

function void set_report_id_action_hier ( string  id,
uvm_action  action )

set_report_severity_id_action_hier

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 an action associated with a severity.

For a list of severities and their default actions, refer to uvm_report_handler.

set_report_default_file_hier

function void set_report_default_file_hier ( UVM_FILE  file )

set_report_severity_file_hier

function void set_report_severity_file_hier ( uvm_severity  severity,
UVM_FILE  file )

set_report_id_file_hier

function void set_report_id_file_hier ( string  id,
UVM_FILE  file )

set_report_severity_id_file_hier

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.

set_report_verbosity_level_hier

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.

pre_abort

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

Recording Interface

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.

accept_tr

function void accept_tr ( uvm_transaction  tr,   
time  accept_time  =  )

This function marks the acceptance of a transaction, tr, by this component.  Specifically, it performs the following actions:

  • Calls the tr’s uvm_transaction::accept_tr method, passing to it the accept_time argument.
  • Calls this component’s do_accept_tr method to allow for any post-begin action in derived classes.
  • Triggers the component’s internal accept_tr event.  Any processes waiting on this event will resume in the next delta cycle.

do_accept_tr

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.

begin_tr

function integer begin_tr ( uvm_transaction  tr,   
string  stream_name  =  "main",
string  label  =  "",
string  desc  =  "",
time  begin_time  =  0,
integer  parent_handle  =  0 )

This function marks the start of a transaction, tr, by this component.  Specifically, it performs the following actions:

  • Calls tr’s uvm_transaction::begin_tr method, passing to it the begin_time argument.  The begin_time should be greater than or equal to the accept time.  By default, when begin_time = 0, the current simulation time is used.

If recording is enabled (recording_detail != UVM_OFF), then a new database-transaction is started on the component’s transaction stream given by the stream argument.  No transaction properties are recorded at this time.

  • Calls the component’s do_begin_tr method to allow for any post-begin action in derived classes.
  • Triggers the component’s internal begin_tr event.  Any processes waiting on this event will resume in the next delta cycle.

A handle to the transaction is returned.  The meaning of this handle, as well as the interpretation of the arguments stream_name, label, and desc are vendor specific.

begin_child_tr

function integer begin_child_tr ( uvm_transaction  tr,   
integer  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.

do_begin_tr

virtual protected function void do_begin_tr ( uvm_transaction  tr,
string  stream_name,
integer  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.

end_tr

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:

  • Calls tr’s uvm_transaction::end_tr method, passing to it the end_time argument.  The end_time must at least be greater than the begin time.  By default, when end_time = 0, the current simulation time is used.

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.

  • Calls the component’s do_end_tr method to accommodate any post-end action in derived classes.
  • Triggers the component’s internal end_tr event.  Any processes waiting on this event will resume in the next delta cycle.

The free_handle bit indicates that this transaction is no longer needed.  The implementation of free_handle is vendor-specific.

do_end_tr

virtual protected function void do_end_tr ( uvm_transaction  tr,
integer  tr_handle )

The end_tr method calls this function to accommodate any user-defined post-end action.  Implementations should call super.do_end_tr to ensure correct operation.

record_error_tr

function integer 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.

record_event_tr

function integer 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.

print_enabled

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.

recorder

uvm_recorder recorder

Specifies the uvm_recorder object to use for begin_tr and other methods in the Recording Interface.  Default is uvm_default_recorder.

The uvm_void class is the base class for all UVM classes.
virtual class uvm_object extends uvm_void
The uvm_object class is the base class for all UVM data and hierarchical classes.
class uvm_report_object extends uvm_object
The uvm_report_object provides an interface to the UVM reporting facility.
virtual class uvm_component extends uvm_report_object
The uvm_component class is the root base class for UVM components.
function new ( string  name,
uvm_component  parent )
Creates a new component with the given leaf instance name and handle to to its parent.
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.
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.
function uvm_component get_child ( string  name )
function int get_next_child ( ref  string  name )
function int get_first_child ( ref  string  name )
These methods are used to iterate through this component’s children, if any.
function int get_num_children ()
Returns the number of this component’s children.
function int has_child ( string  name )
Returns 1 if this component has a child with the given name, 0 otherwise.
virtual function void set_name ( string  name )
Renames this component to name and recalculates all descendants’ full names.
function uvm_component lookup ( string  name )
Looks for a component with the given hierarchical name relative to this component.
function int unsigned get_depth()
Returns the component’s depth from the root level.
virtual function void build_phase( uvm_phase  phase )
The Pre-Defined Phases::uvm_build_phase phase implementation method.
virtual function void connect_phase( uvm_phase  phase )
The Pre-Defined Phases::uvm_connect_phase phase implementation method.
virtual function void end_of_elaboration_phase( uvm_phase  phase )
The Pre-Defined Phases::uvm_end_of_elaboration_phase phase implementation method.
virtual function void start_of_simulation_phase( uvm_phase  phase )
The Pre-Defined Phases::uvm_start_of_simulation_phase phase implementation method.
virtual task run_phase( uvm_phase  phase )
The Pre-Defined Phases::uvm_run_phase phase implementation method.
virtual task pre_reset_phase( uvm_phase  phase )
The Pre-Defined Phases::uvm_pre_reset_phase phase implementation method.
virtual task reset_phase( uvm_phase  phase )
The Pre-Defined Phases::uvm_reset_phase phase implementation method.
virtual task post_reset_phase( uvm_phase  phase )
The Pre-Defined Phases::uvm_post_reset_phase phase implementation method.
virtual task pre_configure_phase( uvm_phase  phase )
The Pre-Defined Phases::uvm_pre_configure_phase phase implementation method.
virtual task configure_phase( uvm_phase  phase )
The Pre-Defined Phases::uvm_configure_phase phase implementation method.
virtual task post_configure_phase( uvm_phase  phase )
The Pre-Defined Phases::uvm_post_configure_phase phase implementation method.
virtual task pre_main_phase( uvm_phase  phase )
The Pre-Defined Phases::uvm_pre_main_phase phase implementation method.
virtual task main_phase( uvm_phase  phase )
The Pre-Defined Phases::uvm_main_phase phase implementation method.
virtual task post_main_phase( uvm_phase  phase )
The Pre-Defined Phases::uvm_post_main_phase phase implementation method.
virtual task pre_shutdown_phase( uvm_phase  phase )
The Pre-Defined Phases::uvm_pre_shutdown_phase phase implementation method.
virtual task shutdown_phase( uvm_phase  phase )
The Pre-Defined Phases::uvm_shutdown_phase phase implementation method.
virtual task post_shutdown_phase( uvm_phase  phase )
The Pre-Defined Phases::uvm_post_shutdown_phase phase implementation method.
virtual function void extract_phase( uvm_phase  phase )
The Pre-Defined Phases::uvm_extract_phase phase implementation method.
virtual function void check_phase( uvm_phase  phase )
The Pre-Defined Phases::uvm_check_phase phase implementation method.
virtual function void report_phase( uvm_phase  phase )
The Pre-Defined Phases::uvm_report_phase phase implementation method.
virtual function void final_phase( uvm_phase  phase )
The Pre-Defined Phases::uvm_final_phase phase implementation method.
virtual function void phase_started ( uvm_phase  phase )
Invoked at the start of each phase.
virtual function void phase_ready_to_end ( uvm_phase  phase )
Invoked when all objections to ending the given phase have been dropped, thus indicating that phase is ready to end.
virtual function void phase_ended ( uvm_phase  phase )
Invoked at the end of each phase.
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.
function uvm_domain get_domain()
Return handle to the phase domain set on this component
virtual protected function void define_domain( uvm_domain  domain )
Builds custom phase schedules into the provided domain handle.
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
virtual task suspend ()
Suspend this component.
virtual task resume ()
Resume this component.
function string status ()
Returns the status of this component.
virtual function void kill ()
Kills the process tree associated with this component’s currently running task-based phase, e.g., run.
virtual function void do_kill_all ()
Recursively calls kill on this component and all its descendants, which abruptly ends the currently running task-based phase, e.g., run.
virtual task stop_phase( uvm_phase  phase )
The stop_phase task is called when this component’s enable_stop_interrupt bit is set and global_stop_request is called during a task-based phase, e.g., run.
int enable_stop_interrupt = 0
This bit allows a component to raise an objection to the stopping of the current phase.
virtual function void resolve_bindings ()
Processes all port, export, and imp connections.
virtual function void set_config_int ( string  inst_name,
string  field_name,
uvm_bitstream_t  value )
virtual function void set_config_string ( string  inst_name,
string  field_name,
string  value )
virtual function void set_config_object ( string  inst_name,   
string  field_name,   
uvm_object  value,   
bit  clone  =  1 )
Calling set_config_* causes configuration settings to be created and placed in a table internal to this component.
virtual function bit get_config_int ( string  field_name,
inout  uvm_bitstream_t  value )
virtual function bit get_config_string ( string  field_name,
inout  string  value )
virtual function bit get_config_object ( string  field_name,   
inout  uvm_object  value,   
input  bit  clone  =  1 )
These methods retrieve configuration settings made by previous calls to their set_config_* counterparts.
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.
virtual function void apply_config_settings ( bit  verbose  =  )
Searches for all config settings matching this component’s instance path.
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 set_config_*.
function void print_config( bit  recurse  =  0,
bit  audit  =  0 )
Print_config_settings prints all configuration information for this component, as set by previous calls to set_config_* and exports to the resources pool.
function void print_config_with_audit( bit  recurse  =  0 )
Operates the same as print_config except that the audit bit is forced to 1.
static bit print_config_matches = 0
Setting this static variable causes get_config_* to print info about matching configuration settings as they are being applied.
class uvm_objection extends uvm_report_object
Objections provide a facility for coordinating status information between two or more participating components, objects, and even module-based IP.
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 specfied objection.
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 specfied objection.
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.
class uvm_factory
As the name implies, uvm_factory is used to manufacture (create) UVM objects and components.
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.
function uvm_component create_component_by_name ( string  requested_type_name,   
string  parent_inst_path  =  "",
string  name,   
uvm_component  parent    )
Creates and returns a component or object of the requested type, which may be specified by type or by name.
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.
function uvm_object create_object_by_name ( string  requested_type_name,   
string  parent_inst_path  =  "",
string  name  =  "" )
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.
function void set_type_override_by_type ( uvm_object_wrapper  original_type,   
uvm_object_wrapper  override_type,   
bit  replace  =  1 )
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.
function void set_inst_override_by_type ( uvm_object_wrapper  original_type,
uvm_object_wrapper  override_type,
string  full_inst_path )
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.
function void set_type_override_by_name ( 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.
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_type, this method registers a factory override for components created at this level of hierarchy or below.
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.
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.
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.
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.
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.
virtual function void pre_abort
This callback is executed when the message system is executing a UVM_EXIT action.
Terminates the simulation immediately.
function void accept_tr ( uvm_transaction  tr,   
time  accept_time  =  )
This function marks the acceptance of a transaction, tr, by this component.
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.
function integer begin_tr ( uvm_transaction  tr,   
string  stream_name  =  "main",
string  label  =  "",
string  desc  =  "",
time  begin_time  =  0,
integer  parent_handle  =  0 )
This function marks the start of a transaction, tr, by this component.
function integer begin_child_tr ( uvm_transaction  tr,   
integer  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.
virtual protected function void do_begin_tr ( uvm_transaction  tr,
string  stream_name,
integer  tr_handle )
The begin_tr and begin_child_tr methods call this function to accommodate any user-defined post-begin action.
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.
virtual protected function void do_end_tr ( uvm_transaction  tr,
integer  tr_handle )
The end_tr method calls this function to accommodate any user-defined post-end action.
function integer 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.
function integer 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.
bit print_enabled = 1
This bit determines if this component should automatically be printed as a child of its parent object.
uvm_recorder recorder
Specifies the uvm_recorder object to use for begin_tr and other methods in the Recording Interface.
class uvm_recorder extends uvm_object
The uvm_recorder class provides a policy object for recording uvm_objects.
These methods comprise the component-based transaction recording interface.
The uvm_report_handler is the class to which most methods in uvm_report_object delegate.
function void reseed ()
Calls srandom on the object to reseed the object using the UVM seeding mechanism, which sets the seed based on type name and instance name instead of based on instance position in a thread.
virtual function string get_name ()
Returns the name of the object, as provided by the name argument in the new constructor or set_name method.
function void print ( uvm_printer  printer  =  null )
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.
static function uvm_domain get_uvm_domain()
Get a handle to the singleton uvm domain
class uvm_component_registry #(
    type  T  =  uvm_component,
    string  Tname  =  "<unknown>"
) extends uvm_object_wrapper
The uvm_component_registry serves as a lightweight proxy for a component of type T and type name Tname, a string.
class uvm_object_registry #(
    type  T  =  uvm_object,
    string  Tname  =  "<unknown>"
) extends uvm_object_wrapper
The uvm_object_registry serves as a lightweight proxy for an uvm_object of type T and type name Tname, a string.
function uvm_object create_object_by_type ( uvm_object_wrapper  requested_type,   
string  parent_inst_path  =  "",
string  name  =  "" )
function uvm_component create_component_by_type (
    uvm_object_wrapper  requested_type,   
    string  parent_inst_path  =  "",
    string  name,   
    uvm_component  parent   
)
function void accept_tr ( time  accept_time  =  )
Calling accept_tr indicates that the transaction has been accepted for processing by a consumer component, such as an uvm_driver.
function integer begin_tr ( time  begin_time  =  )
This function indicates that the transaction has been started and is not the child of another transaction.
function void end_tr ( time  end_time  =  0,
bit  free_handle  =  1 )
This function indicates that the transaction execution has ended.
virtual function void do_record ( uvm_recorder  recorder )
The do_record method is the user-definable hook called by the record method.
uvm_recorder uvm_default_recorder = new()
The default recording policy.