blob: 9ec567bb9105e41077e9b0effcb802d81fda02e5 [file] [log] [blame]
<html><head><title>Phasing Overview</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script></head><body class="FramedContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
<!-- Generated by Natural Docs, version Development Release 01-12-2008 (1.35 base) -->
<!-- http://www.naturaldocs.org -->
<!-- saved from url=(0026)http://www.naturaldocs.org -->
<!--TOP - START OF CONTENT-->
<div id=Content>
<!--CONTENT index=0 -->
<div class="CSection"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="Phasing_Overview" href="../../src/overviews/phasing.txt">Phasing Overview</a></h1><div class=CBody><p>UVM implements an automated mechanism for phasing the execution of the various components in a testbench.</p>
<!--START_ND_SUMMARY index=0-->
<div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable>
<!-- index=0 -->
<tr class="SMain"><td colspan=2 class=SEntry><a href="#Phasing_Overview" >Phasing Overview</a></td></tr>
<tr class=SMain><td colspan=2 class=SWideDescription>UVM implements an automated mechanism for phasing the execution of the various components in a testbench.</td></tr></table></div></div><!--END_ND_SUMMARY-->
</div></div></div>
<!--CONTENT index=1 -->
<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="Phasing_Implementation" href="../../src/overviews/phasing.txt">Phasing Implementation</a></h2><div class=CBody><p>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.</p><p>Each schedule leaf node refers to a single phase that is compatible with that VIP&rsquo;s components and which executes the required behavior via a functor or delegate extending the phase into component context as required.</p><p>Execution threads are tracked on a per-component basis.</p><h4 class=CHeading>Class hierarchy</h4><p>A single class represents both the definition, the state, and the context of a phase.&nbsp; 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.)</p><img src="../../images/uvm_ref_phases_uml.gif" width="358" height="239"><p><b>The following classes related to phasing are defined herein</b></p><p><a href="../base/uvm_phase-svh.html#uvm_phase" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">uvm_phase</a> : The base class for defining a phase&rsquo;s behavior, state, context</p><p><a href="../base/uvm_domain-svh.html#uvm_domain" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">uvm_domain</a> : Phasing schedule node representing an independent branch of the schedule</p><p><a href="../base/uvm_bottomup_phase-svh.html#uvm_bottomup_phase" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">uvm_bottomup_phase</a> : A phase implemenation for bottom up function phases.</p><p><a href="../base/uvm_topdown_phase-svh.html#uvm_topdown_phase" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">uvm_topdown_phase</a> : A phase implemenation for topdown function phases.</p><p><a href="../base/uvm_task_phase-svh.html#uvm_task_phase" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">uvm_task_phase</a> : A phase implemenation for task phases.</p><p><b>Common, Run-Time and User-Defined Phases</b></p><p>The common phases to all <a href="../base/uvm_component-svh.html#uvm_component" class=LClass id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">uvm_component</a>s are described in <a href="../base/uvm_common_phases-svh.html#UVM_Common_Phases" class=LSection id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">UVM Common Phases</a>.</p><p>The run-time phases are described in <a href="../base/uvm_runtime_phases-svh.html#UVM_Run-Time_Phases" class=LSection id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">UVM Run-Time Phases</a>.</p><p>The ability to create user-defined phases is described <a href="test-phasing-txt.html#User-Defined_Phases" class=LSection id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">User-Defined Phases</a>.</p>
<!--START_ND_SUMMARY index=1-->
<div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable>
<!-- index=1 -->
<tr class="SClass"><td colspan=2 class=SEntry><a href="#Phasing_Implementation" >Phasing Implementation</a></td></tr>
<tr class=SMain><td colspan=2 class=SWideDescription>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.</td></tr></table></div></div><!--END_ND_SUMMARY-->
</div></div></div>
</div><!--Content-->
<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CClass>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>class uvm_phase extends uvm_object
</td></tr></table></blockquote>This base class defines everything about a phase: behavior, state, and context.</div></div><div class=CToolTip id="tt2"><div class=CClass>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>class uvm_domain extends uvm_phase
</td></tr></table></blockquote>Phasing schedule node representing an independent branch of the schedule. </div></div><div class=CToolTip id="tt3"><div class=CClass>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>virtual class uvm_bottomup_phase extends uvm_phase
</td></tr></table></blockquote>Virtual base class for function phases that operate bottom-up. </div></div><div class=CToolTip id="tt4"><div class=CClass>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>virtual class uvm_topdown_phase extends uvm_phase
</td></tr></table></blockquote>Virtual base class for function phases that operate top-down. </div></div><div class=CToolTip id="tt5"><div class=CClass>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>virtual class uvm_task_phase extends uvm_phase
</td></tr></table></blockquote>Base class for all task phases. </div></div><div class=CToolTip id="tt6"><div class=CClass>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>virtual class uvm_component extends uvm_report_object
</td></tr></table></blockquote>The uvm_component class is the root base class for UVM components. </div></div><div class=CToolTip id="tt7"><div class=CSection>The common phases are the set of function and task phases that all uvm_components execute together. </div></div><div class=CToolTip id="tt8"><div class=CSection>The run-time schedule is the pre-defined phase schedule which runs concurrently to the uvm_run_phase global run phase. </div></div><div class=CToolTip id="tt9"><div class=CSection>To define your own custom phase, use the following pattern.</div></div><!--END_ND_TOOLTIPS-->
<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>