| <html><head><title>Sequencer Classes</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="Sequencer_Classes" href="../../src/overviews/sequencers.txt">Sequencer Classes</a></h1><div class=CBody><p>The sequencer serves as an arbiter for controlling transaction flow from multiple stimulus generators. More specifically, the sequencer controls the flow of <a href="../seq/uvm_sequence_item-svh.html#uvm_sequence_item" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">uvm_sequence_item</a>-based transactions generated by one or more <a href="../seq/uvm_sequence-svh.html#uvm_sequence#(REQ,RSP)" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">uvm_sequence #(REQ,RSP)</a>-based sequences.</p><img src="../../images/uvm_ref_sequencer.gif" width="250" height="276"><p>There are two sequencer variants available.</p><ul><li><a href="../seq/uvm_sequencer-svh.html#uvm_sequencer#(REQ,RSP)" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">uvm_sequencer #(REQ,RSP)</a> - Requests for new sequence items are initiated by the driver. Upon such requests, the sequencer selects a sequence from a list of available sequences to produce and deliver the next item to execute. This sequencer is typically connected to a user-extension of <a href="../comps/uvm_driver-svh.html#uvm_driver#(REQ,RSP)" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">uvm_driver #(REQ,RSP)</a>.</li><li><a href="../seq/uvm_push_sequencer-svh.html#uvm_push_sequencer#(REQ,RSP)" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">uvm_push_sequencer #(REQ,RSP)</a> - Sequence items (from the currently running sequences) are pushed by the sequencer to the driver, which blocks item flow when it is not ready to accept new transactions. This sequencer is typically connected to a user-extension of <a href="../comps/uvm_push_driver-svh.html#uvm_push_driver#(REQ,RSP)" class=LClass id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">uvm_push_driver #(REQ,RSP)</a>.</li></ul><p>Sequencer-driver communication follows a <i>pull</i> or <i>push</i> semantic, depending on which sequencer type is used. However, sequence-sequencer communication is <i>always</i> initiated by the user-defined sequence, i.e. follows a push semantic.</p><p>See <a href="sequences-txt.html#Sequence_Classes" class=LSection id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">Sequence Classes</a> for an overview on sequences and sequence items.</p><h4 class=CHeading>Sequence Item Ports</h4><p>As with all UVM components, the sequencers and drivers described above use <a href="tlm_ifs_and_ports-txt.html#TLM_Interfaces" class=LSection id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">TLM Interfaces</a> to communicate transactions.</p><p>The <a href="../seq/uvm_sequencer-svh.html#uvm_sequencer#(REQ,RSP)" class=LClass id=link9 onMouseOver="ShowTip(event, 'tt3', 'link9')" onMouseOut="HideTip('tt3')">uvm_sequencer #(REQ,RSP)</a> and <a href="../comps/uvm_driver-svh.html#uvm_driver#(REQ,RSP)" class=LClass id=link10 onMouseOver="ShowTip(event, 'tt4', 'link10')" onMouseOut="HideTip('tt4')">uvm_driver #(REQ,RSP)</a> pair also uses a <i>sequence item pull port</i> to achieve the special execution semantic needed by the sequencer-driver pair.</p><img src="../../images/uvm_ref_seq_item_ports.gif" width="493" height="233"><p>Sequencers and drivers use a <i>seq_item_port</i> specifically supports sequencer-driver communication. Connections to these ports are made in the same fashion as the TLM ports.</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="#Sequencer_Classes" >Sequencer Classes</a></td></tr> |
| <tr class=SMain><td colspan=2 class=SWideDescription>The sequencer serves as an arbiter for controlling transaction flow from multiple stimulus generators. </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_sequence_item extends uvm_transaction |
| </td></tr></table></blockquote>The base class for user-defined sequence items and also the base class for the uvm_sequence class. </div></div><div class=CToolTip id="tt2"><div class=CClass> |
| <blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype> |
| <tr><td><table border=0 cellspacing=0 cellpadding=0><tr> |
| <td class=PBeforeParameters colspan=5>virtual class uvm_sequence #(</td> </tr><tr><td> </td> <td class=PType nowrap>type </td> |
| <td class=PParameter nowrap>REQ</td> |
| <td class=PDefaultValuePrefix> = </td> |
| <td class=PDefaultValue width=100%> uvm_sequence_item,</td> |
| </tr><tr><td> </td> <td class=PType nowrap>type </td> |
| <td class=PParameter nowrap>RSP</td> |
| <td class=PDefaultValuePrefix> = </td> |
| <td class=PDefaultValue width=100%> REQ</td> |
| </tr> |
| <tr> |
| <td class=PAfterParameters colspan=5>) extends uvm_sequence_base</td></tr> |
| </table></td></tr> |
| </table></blockquote> |
| The uvm_sequence class provides the interfaces necessary in order to create streams of sequence items and/or other sequences.</div></div><div class=CToolTip id="tt3"><div class=CClass> |
| <blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype> |
| <tr><td><table border=0 cellspacing=0 cellpadding=0><tr> |
| <td class=PBeforeParameters colspan=5>class uvm_sequencer #(</td> </tr><tr><td> </td> <td class=PType nowrap>type </td> |
| <td class=PParameter nowrap>REQ</td> |
| <td class=PDefaultValuePrefix> = </td> |
| <td class=PDefaultValue width=100%>uvm_sequence_item,</td> |
| </tr><tr><td> </td> <td class=PType nowrap> </td> |
| <td class=PParameter nowrap>RSP</td> |
| <td class=PDefaultValuePrefix> = </td> |
| <td class=PDefaultValue width=100%>REQ</td> |
| </tr> |
| <tr> |
| <td class=PAfterParameters colspan=5>) extends uvm_sequencer_param_base #(REQ, RSP)</td></tr> |
| </table></td></tr> |
| </table></blockquote> |
| </div></div><div class=CToolTip id="tt4"><div class=CClass> |
| <blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype> |
| <tr><td><table border=0 cellspacing=0 cellpadding=0><tr> |
| <td class=PBeforeParameters colspan=5>class uvm_driver #(</td> </tr><tr><td> </td> <td class=PType nowrap>type </td> |
| <td class=PParameter nowrap>REQ</td> |
| <td class=PDefaultValuePrefix> = </td> |
| <td class=PDefaultValue width=100%>uvm_sequence_item,</td> |
| </tr><tr><td> </td> <td class=PType nowrap>type </td> |
| <td class=PParameter nowrap>RSP</td> |
| <td class=PDefaultValuePrefix> = </td> |
| <td class=PDefaultValue width=100%>REQ</td> |
| </tr> |
| <tr> |
| <td class=PAfterParameters colspan=5>) extends uvm_component</td></tr> |
| </table></td></tr> |
| </table></blockquote> |
| The base class for drivers that initiate requests for new transactions via a uvm_seq_item_pull_port. </div></div><div class=CToolTip id="tt5"><div class=CClass> |
| <blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype> |
| <tr><td><table border=0 cellspacing=0 cellpadding=0><tr> |
| <td class=PBeforeParameters colspan=5>class uvm_push_sequencer #(</td> </tr><tr><td> </td> <td class=PType nowrap>type </td> |
| <td class=PParameter nowrap>REQ</td> |
| <td class=PDefaultValuePrefix> = </td> |
| <td class=PDefaultValue width=100%>uvm_sequence_item,</td> |
| </tr><tr><td> </td> <td class=PType nowrap> </td> |
| <td class=PParameter nowrap>RSP</td> |
| <td class=PDefaultValuePrefix> = </td> |
| <td class=PDefaultValue width=100%>REQ</td> |
| </tr> |
| <tr> |
| <td class=PAfterParameters colspan=5>) extends uvm_sequencer_param_base #(REQ, RSP)</td></tr> |
| </table></td></tr> |
| </table></blockquote> |
| </div></div><div class=CToolTip id="tt6"><div class=CClass> |
| <blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype> |
| <tr><td><table border=0 cellspacing=0 cellpadding=0><tr> |
| <td class=PBeforeParameters colspan=5>class uvm_push_driver #(</td> </tr><tr><td> </td> <td class=PType nowrap>type </td> |
| <td class=PParameter nowrap>REQ</td> |
| <td class=PDefaultValuePrefix> = </td> |
| <td class=PDefaultValue width=100%>uvm_sequence_item,</td> |
| </tr><tr><td> </td> <td class=PType nowrap>type </td> |
| <td class=PParameter nowrap>RSP</td> |
| <td class=PDefaultValuePrefix> = </td> |
| <td class=PDefaultValue width=100%>REQ</td> |
| </tr> |
| <tr> |
| <td class=PAfterParameters colspan=5>) extends uvm_component</td></tr> |
| </table></td></tr> |
| </table></blockquote> |
| Base class for a driver that passively receives transactions, i.e. </div></div><div class=CToolTip id="tt7"><div class=CSection>Sequences encapsulate user-defined procedures that generate multiple uvm_sequence_item-based transactions. </div></div><div class=CToolTip id="tt8"><div class=CSection>The UVM TLM library defines several abstract, transaction-level interfaces and the ports and exports that facilitate their use. </div></div><!--END_ND_TOOLTIPS--> |
| |
| <script language=JavaScript><!-- |
| if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> |