| <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 class="CSection"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="Sequencer_Classes" href="../../ovm_ref/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="../files/methodology/sequences/ovm_sequence_item-svh.html#ovm_sequence_item" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">ovm_sequence_item</a>-based transactions generated by one or more <a href="../files/methodology/sequences/ovm_sequence-svh.html#ovm_sequence#(REQ,RSP)" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">ovm_sequence #(REQ,RSP)</a>-based sequences.</p><img src="nd/Images/ovm_ref_sequencer.gif" width="250" height="276"><p>There are two sequencer variants available.</p><ul><li><a href="../files/methodology/sequences/ovm_sequencer-svh.html#ovm_sequencer#(REQ,RSP)" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">ovm_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="../files/methodology/ovm_driver-svh.html#ovm_driver#(REQ,RSP)" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">ovm_driver #(REQ,RSP)</a>.</li><li><a href="../files/methodology/sequences/ovm_push_sequencer-svh.html#ovm_push_sequencer#(REQ,RSP)" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">ovm_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="../files/methodology/ovm_push_driver-svh.html#ovm_push_driver#(REQ,RSP)" class=LClass id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">ovm_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 OVM components, the sequencers and drivers described above use <a href="tlm_ifs_and_ports-txt.html#TLM_Interfaces,Ports,and_Exports" class=LSection id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">TLM Interfaces, Ports, and Exports</a> to communicate transactions.</p><p>The <a href="../files/methodology/sequences/ovm_sequencer-svh.html#ovm_sequencer#(REQ,RSP)" class=LClass id=link9 onMouseOver="ShowTip(event, 'tt3', 'link9')" onMouseOut="HideTip('tt3')">ovm_sequencer #(REQ,RSP)</a> and <a href="../files/methodology/ovm_driver-svh.html#ovm_driver#(REQ,RSP)" class=LClass id=link10 onMouseOver="ShowTip(event, 'tt4', 'link10')" onMouseOut="HideTip('tt4')">ovm_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="nd/Images/ovm_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></div></div></div> |
| <div class=CToolTip id="tt1"><div class=CClass><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>class ovm_sequence_item extends ovm_transaction</td></tr></table></blockquote>The base class for user-defined sequence items and also the base class for the ovm_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 ovm_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%> ovm_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 ovm_sequence_base</td></tr></table></td></tr></table></blockquote>The ovm_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 ovm_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%> ovm_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 ovm_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 nowrap>class ovm_driver #(</td><td class=PType nowrap>type </td><td class=PParameter nowrap>REQ</td><td class=PDefaultValuePrefix> = </td><td class=PDefaultValue width=100%>ovm_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><td class=PAfterParameters nowrap>) extends ovm_component</td></tr></table></td></tr></table></blockquote>The base class for drivers that initiate requests for new transactions via a ovm_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 ovm_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%> ovm_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 ovm_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 nowrap>class ovm_push_driver #(</td><td class=PType nowrap>type </td><td class=PParameter nowrap>REQ</td><td class=PDefaultValuePrefix> = </td><td class=PDefaultValue width=100%>ovm_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><td class=PAfterParameters nowrap>) extends ovm_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 ovm_sequence_item-based transactions. </div></div><div class=CToolTip id="tt8"><div class=CSection>The OVM 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> |