TITLE: Phasing Overview

UVM implements an automated mechanism for phasing the execution of
the various components in a testbench.

Class: Phasing Implementation
                                                                             
The API described here provides a general purpose testbench phasing         
solution, consisting of a phaser machine, traversing a master schedule      
graph, which is built by the integrator from one or more instances of       
template schedules provided by UVM or by 3rd-party VIP, and which supports  
implicit or explicit synchronization, runtime control of threads and jumps. 
                                                                            
Each schedule leaf node refers to a single phase that is compatible with    
that VIP's components and which executes the required behavior via a        
functor or delegate extending the phase into component context as required.

Execution threads are tracked on a per-component basis.
                                                                            
Class hierarchy:

A single class represents both the definition, the state, and the context
of a phase. It is instantiated once as a singleton IMP and one or more times
as nodes in a graph which represents serial and parallel phase relationships
and stores current state as the phaser progresses,
and the phase implementation which specifies required component behavior
(by extension into component context if non-default behavior required.)

(see uvm_ref_phases_uml.gif)

*The following classes related to phasing are defined herein*

<uvm_phase> : The base class for defining a phase's behavior, state, context

<uvm_domain> : Phasing schedule node representing an independent branch of the schedule

<uvm_bottomup_phase> : A phase implementation for bottom up function phases.

<uvm_topdown_phase> : A phase implementation for topdown function phases.

<uvm_task_phase> : A phase implementation for task phases.

*Common, Run-Time and User-Defined Phases*

The common phases to all <uvm_component>s are described in <UVM Common
Phases>.

The run-time phases are described in <UVM Run-Time Phases>.

The ability to create user-defined phases is described <User-Defined Phases>.
