blob: 43c96ddd8d77158ab27a6b6ae07a7f3a0288b432 [file] [log] [blame]
<html><head><title>Virtual Registers</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="Virtual_Registers" href="../../src/reg/uvm_vreg.svh">Virtual Registers</a></h1><div class=CBody><p>A virtual register is a collection of fields, overlaid on top of a memory, usually in an array.&nbsp; The semantics and layout of virtual registers comes from an agreement between the software and the hardware, not any physical structures in the DUT.</p>
<!--START_ND_SUMMARY index=0-->
<div class=Summary><div class=STitle>Contents</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable>
<!-- index=0 -->
<tr class="SMain"><td class=SEntry><a href="#Virtual_Registers" >Virtual Registers</a></td><td class=SDescription>A virtual register is a collection of fields, overlaid on top of a memory, usually in an array. </td></tr>
<!-- index=1 -->
<tr class="SSMethod SMarked"><td class=SEntry><a href="#uvm_vreg" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">uvm_vreg</a></td><td class=SDescription>Virtual register abstraction base class</td></tr>
<!-- index=38 -->
<tr class="SSMethod"><td class=SEntry><a href="#uvm_vreg_cbs" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">uvm_vreg_cbs</a></td><td class=SDescription>Pre/post read/write callback facade class</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="uvm_vreg" href="../../src/reg/uvm_vreg.svh">uvm_vreg</a></h2><div class=CBody><p>Virtual register abstraction base class</p><p>A virtual register represents a set of fields that are logically implemented in consecutive memory locations.</p><p>All virtual register accesses eventually turn into memory accesses.</p><p>A virtual register array may be implemented on top of any memory abstraction class and possibly dynamically resized and/or relocated.</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="#uvm_vreg" id=link5 onMouseOver="ShowTip(event, 'tt1', 'link5')" onMouseOut="HideTip('tt1')">uvm_vreg</a></td></tr>
<tr class=SMain><td colspan=2 class=SWideDescription>Virtual register abstraction base class</td></tr>
<!-- HIERARCHY -->
<tr class="SHierarchy SIndent1 "><td colspan=2 class="SEntry SIndent1">Class Hierarchy</td></tr>
<tr class="SPrototype SIndent1"><td colspan=2 class=SDescription>
<div class=ClassHierarchy>
<table border=0 cellspacing=0 cellpadding=0>
<tr><td><div class=CHParent><div class=CHEntry><a href="../base/uvm_misc-svh.html#uvm_void" class=LGeneric id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">uvm_void</a></div></div></td></tr>
<tr><td><div class=CHParent><div class=CHEntry><a href="../base/uvm_object-svh.html#uvm_object" class=LClass id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">uvm_object</a></div></div></td></tr>
<tr><td><div class=CHCurrent><div class=CHEntry>uvm_vreg</div></div></td></tr>
</table>
</div>
</td></tr>
<!-- PROTOTYPE -->
<tr class="SPrototype SIndent1"><td colspan=2 class="SEntry SIndent1">Class Declaration</td></tr>
<tr class="SPrototype SIndent1"><td colspan=2 class=SDescription>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>class uvm_vreg extends uvm_object
</td></tr></table></blockquote></td></tr>
<!-- index=2 -->
<tr class="SGroup SIndent1"><td class=SEntry><a href="#uvm_vreg.Initialization" >Initialization</a></td><td class=SDescription></td></tr>
<!-- index=3 -->
<tr class="SMethod SIndent2"><td class=SEntry><a href="#uvm_vreg.new" id=link6 onMouseOver="ShowTip(event, 'tt5', 'link6')" onMouseOut="HideTip('tt5')">new</a></td><td class=SDescription>Create a new instance and type-specific configuration</td></tr>
<!-- index=4 -->
<tr class="SMethod SIndent2 SMarked"><td class=SEntry><a href="#uvm_vreg.configure" id=link7 onMouseOver="ShowTip(event, 'tt6', 'link7')" onMouseOut="HideTip('tt6')">configure</a></td><td class=SDescription>Instance-specific configuration</td></tr>
<!-- index=5 -->
<tr class="SMethod SIndent2"><td class=SEntry><a href="#uvm_vreg.implement" id=link8 onMouseOver="ShowTip(event, 'tt7', 'link8')" onMouseOut="HideTip('tt7')">implement</a></td><td class=SDescription>Dynamically implement, resize or relocate a virtual register array</td></tr>
<!-- index=6 -->
<tr class="SMethod SIndent2 SMarked"><td class=SEntry><a href="#uvm_vreg.allocate" id=link9 onMouseOver="ShowTip(event, 'tt8', 'link9')" onMouseOut="HideTip('tt8')">allocate</a></td><td class=SDescription>Randomly implement, resize or relocate a virtual register array</td></tr>
<!-- index=7 -->
<tr class="SMethod SIndent2"><td class=SEntry><a href="#uvm_vreg.get_region" id=link10 onMouseOver="ShowTip(event, 'tt9', 'link10')" onMouseOut="HideTip('tt9')">get_region</a></td><td class=SDescription>Get the region where the virtual register array is implemented</td></tr>
<!-- index=8 -->
<tr class="SMethod SIndent2 SMarked"><td class=SEntry><a href="#uvm_vreg.release_region" id=link11 onMouseOver="ShowTip(event, 'tt10', 'link11')" onMouseOut="HideTip('tt10')">release_region</a></td><td class=SDescription>Dynamically un-implement a virtual register array</td></tr>
<!-- index=9 -->
<tr class="SGroup SIndent1"><td class=SEntry><a href="#uvm_vreg.Introspection" >Introspection</a></td><td class=SDescription></td></tr>
<!-- index=10 -->
<tr class="SMethod SIndent2"><td class=SEntry><a href="#uvm_vreg.get_name" >get_name</a></td><td class=SDescription>Get the simple name</td></tr>
<!-- index=11 -->
<tr class="SMethod SIndent2 SMarked"><td class=SEntry><a href="#uvm_vreg.get_full_name" id=link12 onMouseOver="ShowTip(event, 'tt11', 'link12')" onMouseOut="HideTip('tt11')">get_full_name</a></td><td class=SDescription>Get the hierarchical name</td></tr>
<!-- index=12 -->
<tr class="SMethod SIndent2"><td class=SEntry><a href="#uvm_vreg.get_parent" id=link13 onMouseOver="ShowTip(event, 'tt12', 'link13')" onMouseOut="HideTip('tt12')">get_parent</a></td><td class=SDescription>Get the parent block</td></tr>
<!-- index=13 -->
<tr class="SMethod SIndent2 SMarked"><td class=SEntry><a href="#uvm_vreg.get_memory" id=link14 onMouseOver="ShowTip(event, 'tt13', 'link14')" onMouseOut="HideTip('tt13')">get_memory</a></td><td class=SDescription>Get the memory where the virtual regoster array is implemented</td></tr>
<!-- index=14 -->
<tr class="SMethod SIndent2"><td class=SEntry><a href="#uvm_vreg.get_n_maps" id=link15 onMouseOver="ShowTip(event, 'tt14', 'link15')" onMouseOut="HideTip('tt14')">get_n_maps</a></td><td class=SDescription>Returns the number of address maps this virtual register array is mapped in</td></tr>
<!-- index=15 -->
<tr class="SMethod SIndent2 SMarked"><td class=SEntry><a href="#uvm_vreg.is_in_map" id=link16 onMouseOver="ShowTip(event, 'tt15', 'link16')" onMouseOut="HideTip('tt15')">is_in_map</a></td><td class=SDescription>Return TRUE if this virtual register array is in the specified address <i>map</i></td></tr>
<!-- index=16 -->
<tr class="SMethod SIndent2"><td class=SEntry><a href="#uvm_vreg.get_maps" id=link17 onMouseOver="ShowTip(event, 'tt16', 'link17')" onMouseOut="HideTip('tt16')">get_maps</a></td><td class=SDescription>Returns all of the address <i>maps</i> where this virtual register array is mapped</td></tr>
<!-- index=17 -->
<tr class="SMethod SIndent2 SMarked"><td class=SEntry><a href="#uvm_vreg.get_rights" id=link18 onMouseOver="ShowTip(event, 'tt17', 'link18')" onMouseOut="HideTip('tt17')">get_rights</a></td><td class=SDescription>Returns the access rights of this virtual reigster array</td></tr>
<!-- index=18 -->
<tr class="SMethod SIndent2"><td class=SEntry><a href="#uvm_vreg.get_access" id=link19 onMouseOver="ShowTip(event, 'tt18', 'link19')" onMouseOut="HideTip('tt18')">get_access</a></td><td class=SDescription>Returns the access policy of the virtual register array when written and read via an address map.</td></tr>
<!-- index=19 -->
<tr class="SMethod SIndent2 SMarked"><td class=SEntry><a href="#uvm_vreg.get_size" id=link20 onMouseOver="ShowTip(event, 'tt19', 'link20')" onMouseOut="HideTip('tt19')">get_size</a></td><td class=SDescription>Returns the size of the virtual register array.</td></tr>
<!-- index=20 -->
<tr class="SMethod SIndent2"><td class=SEntry><a href="#uvm_vreg.get_n_bytes" id=link21 onMouseOver="ShowTip(event, 'tt20', 'link21')" onMouseOut="HideTip('tt20')">get_n_bytes</a></td><td class=SDescription>Returns the width, in bytes, of a virtual register.</td></tr>
<!-- index=21 -->
<tr class="SMethod SIndent2 SMarked"><td class=SEntry><a href="#uvm_vreg.get_n_memlocs" id=link22 onMouseOver="ShowTip(event, 'tt21', 'link22')" onMouseOut="HideTip('tt21')">get_n_memlocs</a></td><td class=SDescription>Returns the number of memory locations used by a single virtual register.</td></tr>
<!-- index=22 -->
<tr class="SMethod SIndent2"><td class=SEntry><a href="#uvm_vreg.get_incr" id=link23 onMouseOver="ShowTip(event, 'tt22', 'link23')" onMouseOut="HideTip('tt22')">get_incr</a></td><td class=SDescription>Returns the number of memory locations between two individual virtual registers in the same array.</td></tr>
<!-- index=23 -->
<tr class="SMethod SIndent2 SMarked"><td class=SEntry><a href="#uvm_vreg.get_fields" id=link24 onMouseOver="ShowTip(event, 'tt23', 'link24')" onMouseOut="HideTip('tt23')">get_fields</a></td><td class=SDescription>Return the virtual fields in this virtual register</td></tr>
<!-- index=24 -->
<tr class="SMethod SIndent2"><td class=SEntry><a href="#uvm_vreg.get_field_by_name" id=link25 onMouseOver="ShowTip(event, 'tt24', 'link25')" onMouseOut="HideTip('tt24')">get_field_by_name</a></td><td class=SDescription>Return the named virtual field in this virtual register</td></tr>
<!-- index=25 -->
<tr class="SMethod SIndent2 SMarked"><td class=SEntry><a href="#uvm_vreg.get_offset_in_memory" id=link26 onMouseOver="ShowTip(event, 'tt25', 'link26')" onMouseOut="HideTip('tt25')">get_offset_in_memory</a></td><td class=SDescription>Returns the offset of a virtual register</td></tr>
<!-- index=26 -->
<tr class="SMethod SIndent2"><td class=SEntry><a href="#uvm_vreg.get_address" id=link27 onMouseOver="ShowTip(event, 'tt26', 'link27')" onMouseOut="HideTip('tt26')">get_address</a></td><td class=SDescription>Returns the base external physical address of a virtual register</td></tr>
<!-- index=27 -->
<tr class="SGroup SIndent1"><td class=SEntry><a href="#uvm_vreg.HDL_Access" >HDL Access</a></td><td class=SDescription></td></tr>
<!-- index=28 -->
<tr class="SMethod SIndent2"><td class=SEntry><a href="#uvm_vreg.write" id=link28 onMouseOver="ShowTip(event, 'tt27', 'link28')" onMouseOut="HideTip('tt27')">write</a></td><td class=SDescription>Write the specified value in a virtual register</td></tr>
<!-- index=29 -->
<tr class="SMethod SIndent2 SMarked"><td class=SEntry><a href="#uvm_vreg.read" id=link29 onMouseOver="ShowTip(event, 'tt28', 'link29')" onMouseOut="HideTip('tt28')">read</a></td><td class=SDescription>Read the current value from a virtual register</td></tr>
<!-- index=30 -->
<tr class="SMethod SIndent2"><td class=SEntry><a href="#uvm_vreg.poke" id=link30 onMouseOver="ShowTip(event, 'tt29', 'link30')" onMouseOut="HideTip('tt29')">poke</a></td><td class=SDescription>Deposit the specified value in a virtual register</td></tr>
<!-- index=31 -->
<tr class="SMethod SIndent2 SMarked"><td class=SEntry><a href="#uvm_vreg.peek" id=link31 onMouseOver="ShowTip(event, 'tt30', 'link31')" onMouseOut="HideTip('tt30')">peek</a></td><td class=SDescription>Sample the current value in a virtual register</td></tr>
<!-- index=32 -->
<tr class="SMethod SIndent2"><td class=SEntry><a href="#uvm_vreg.reset" id=link32 onMouseOver="ShowTip(event, 'tt31', 'link32')" onMouseOut="HideTip('tt31')">reset</a></td><td class=SDescription>Reset the access semaphore</td></tr>
<!-- index=33 -->
<tr class="SGroup SIndent1"><td class=SEntry><a href="#uvm_vreg.Callbacks" >Callbacks</a></td><td class=SDescription></td></tr>
<!-- index=34 -->
<tr class="SMethod SIndent2"><td class=SEntry><a href="#uvm_vreg.pre_write" id=link33 onMouseOver="ShowTip(event, 'tt32', 'link33')" onMouseOut="HideTip('tt32')">pre_write</a></td><td class=SDescription>Called before virtual register write.</td></tr>
<!-- index=35 -->
<tr class="SMethod SIndent2 SMarked"><td class=SEntry><a href="#uvm_vreg.post_write" id=link34 onMouseOver="ShowTip(event, 'tt33', 'link34')" onMouseOut="HideTip('tt33')">post_write</a></td><td class=SDescription>Called after virtual register write.</td></tr>
<!-- index=36 -->
<tr class="SMethod SIndent2"><td class=SEntry><a href="#uvm_vreg.pre_read" id=link35 onMouseOver="ShowTip(event, 'tt34', 'link35')" onMouseOut="HideTip('tt34')">pre_read</a></td><td class=SDescription>Called before virtual register read.</td></tr>
<!-- index=37 -->
<tr class="SMethod SIndent2 SMarked"><td class=SEntry><a href="#uvm_vreg.post_read" id=link36 onMouseOver="ShowTip(event, 'tt35', 'link36')" onMouseOut="HideTip('tt35')">post_read</a></td><td class=SDescription>Called after virtual register read.</td></tr></table></div></div><!--END_ND_SUMMARY-->
</div></div></div>
<!--CONTENT index=2 -->
<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.Initialization" href="../../src/reg/uvm_vreg.svh">Initialization</a></h3></div></div>
<!--CONTENT index=3 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.new" href="../../src/reg/uvm_vreg.svh">new</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>function new(</td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>string&nbsp;</td>
<td class=PParameter nowrap>name,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>int&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>n_bits</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
<div class=CBody><p>Create a new instance and type-specific configuration</p><p>Creates an instance of a virtual register abstraction class with the specified name.</p><p><i>n_bits</i> specifies the total number of bits in a virtual register.&nbsp; Not all bits need to be mapped to a virtual field.&nbsp; This value is usually a multiple of 8.</p></div></div></div>
<!--CONTENT index=4 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.configure" href="../../src/reg/uvm_vreg.svh">configure</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>function void configure(</td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_reg_block&nbsp;</td>
<td class=PParameter nowrap>parent,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_mem&nbsp;</td>
<td class=PParameter nowrap>mem</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>size</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> 0,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_reg_addr_t&nbsp;</td>
<td class=PParameter nowrap>offset</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> 0,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>int&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>incr</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> 0</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
<div class=CBody><p>Instance-specific configuration</p><p>Specify the <i>parent</i> block of this virtual register array.&nbsp; If one of the other parameters are specified, the virtual register is assumed to be dynamic and can be later (re-)implemented using the <a href="#uvm_vreg.implement" class=LMethod id=link37 onMouseOver="ShowTip(event, 'tt7', 'link37')" onMouseOut="HideTip('tt7')">uvm_vreg::implement()</a> method.</p><p>If <i>mem</i> is specified, then the virtual register array is assumed to be statically implemented in the memory corresponding to the specified memory abstraction class and <i>size</i>, <i>offset</i> and <i>incr</i> must also be specified.&nbsp; Static virtual register arrays cannot be re-implemented.</p></div></div></div>
<!--CONTENT index=5 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.implement" href="../../src/reg/uvm_vreg.svh">implement</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual function bit implement(</td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>n,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_mem&nbsp;</td>
<td class=PParameter nowrap>mem</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_reg_addr_t&nbsp;</td>
<td class=PParameter nowrap>offset</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> 0,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>int&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>incr</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> 0</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
<div class=CBody><p>Dynamically implement, resize or relocate a virtual register array</p><p>Implement an array of virtual registers of the specified <i>size</i>, in the specified memory and <i>offset</i>.&nbsp; If an offset increment is specified, each virtual register is implemented at the specified offset increment from the previous one.&nbsp; If an offset increment of 0 is specified, virtual registers are packed as closely as possible in the memory.</p><p>If no memory is specified, the virtual register array is in the same memory, at the same base offset using the same offset increment as originally implemented.&nbsp; Only the number of virtual registers in the virtual register array is modified.</p><p>The initial value of the newly-implemented or relocated set of virtual registers is whatever values are currently stored in the memory now implementing them.</p><p>Returns TRUE if the memory can implement the number of virtual registers at the specified base offset and offset increment.&nbsp; Returns FALSE otherwise.</p><p>The memory region used to implement a virtual register array is reserved in the memory allocation manager associated with the memory to prevent it from being allocated for another purpose.</p></div></div></div>
<!--CONTENT index=6 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.allocate" href="../../src/reg/uvm_vreg.svh">allocate</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual function uvm_mem_region allocate(</td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>n,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_mem_mam&nbsp;</td>
<td class=PParameter nowrap>mam</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
<div class=CBody><p>Randomly implement, resize or relocate a virtual register array</p><p>Implement a virtual register array of the specified size in a randomly allocated region of the appropriate size in the address space managed by the specified memory allocation manager.</p><p>The initial value of the newly-implemented or relocated set of virtual registers is whatever values are currently stored in the memory region now implementing them.</p><p>Returns a reference to a <a href="uvm_mem_mam-svh.html#uvm_mem_region" class=LClass id=link38 onMouseOver="ShowTip(event, 'tt36', 'link38')" onMouseOut="HideTip('tt36')">uvm_mem_region</a> memory region descriptor if the memory allocation manager was able to allocate a region that can implement the virtual register array.&nbsp; Returns <i>null</i> otherwise.</p><p>A region implementing a virtual register array must not be released using the <a href="uvm_mem_mam-svh.html#uvm_mem_mam.release_region" class=LMethod id=link39 onMouseOver="ShowTip(event, 'tt37', 'link39')" onMouseOut="HideTip('tt37')">uvm_mem_mam::release_region()</a> method.&nbsp; It must be released using the <a href="#uvm_vreg.release_region" class=LMethod id=link40 onMouseOver="ShowTip(event, 'tt10', 'link40')" onMouseOut="HideTip('tt10')">uvm_vreg::release_region()</a> method.</p></div></div></div>
<!--CONTENT index=7 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.get_region" href="../../src/reg/uvm_vreg.svh">get_region</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>virtual function uvm_mem_region get_region()
</td></tr></table></blockquote><div class=CBody><p>Get the region where the virtual register array is implemented</p><p>Returns a reference to the <a href="uvm_mem_mam-svh.html#uvm_mem_region" class=LClass id=link41 onMouseOver="ShowTip(event, 'tt36', 'link41')" onMouseOut="HideTip('tt36')">uvm_mem_region</a> memory region descriptor that implements the virtual register array.</p><p>Returns <i>null</i> if the virtual registers array is not currently implemented.&nbsp; A region implementing a virtual register array must not be released using the <a href="uvm_mem_mam-svh.html#uvm_mem_mam.release_region" class=LMethod id=link42 onMouseOver="ShowTip(event, 'tt37', 'link42')" onMouseOut="HideTip('tt37')">uvm_mem_mam::release_region()</a> method.&nbsp; It must be released using the <a href="#uvm_vreg.release_region" class=LMethod id=link43 onMouseOver="ShowTip(event, 'tt10', 'link43')" onMouseOut="HideTip('tt10')">uvm_vreg::release_region()</a> method.</p></div></div></div>
<!--CONTENT index=8 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.release_region" href="../../src/reg/uvm_vreg.svh">release_region</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>virtual function void release_region()
</td></tr></table></blockquote><div class=CBody><p>Dynamically un-implement a virtual register array</p><p>Release the memory region used to implement a virtual register array and return it to the pool of available memory that can be allocated by the memory&rsquo;s default allocation manager.&nbsp; The virtual register array is subsequently considered as unimplemented and can no longer be accessed.</p><p>Statically-implemented virtual registers cannot be released.</p></div></div></div>
<!--CONTENT index=9 -->
<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.Introspection" href="../../src/reg/uvm_vreg.svh">Introspection</a></h3></div></div>
<!--CONTENT index=10 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.get_name" href="../../src/reg/uvm_vreg.svh">get_name</a></h3><div class=CBody><p>Get the simple name</p><p>Return the simple object name of this register.</p></div></div></div>
<!--CONTENT index=11 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.get_full_name" href="../../src/reg/uvm_vreg.svh">get_full_name</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>virtual function string get_full_name()
</td></tr></table></blockquote><div class=CBody><p>Get the hierarchical name</p><p>Return the hierarchal name of this register.&nbsp; The base of the hierarchical name is the root block.</p></div></div></div>
<!--CONTENT index=12 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.get_parent" href="../../src/reg/uvm_vreg.svh">get_parent</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>virtual function uvm_reg_block get_parent()
</td></tr></table></blockquote><div class=CBody><p>Get the parent block</p></div></div></div>
<!--CONTENT index=13 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.get_memory" href="../../src/reg/uvm_vreg.svh">get_memory</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>virtual function uvm_mem get_memory()
</td></tr></table></blockquote><div class=CBody><p>Get the memory where the virtual regoster array is implemented</p></div></div></div>
<!--CONTENT index=14 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.get_n_maps" href="../../src/reg/uvm_vreg.svh">get_n_maps</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>virtual function int get_n_maps ()
</td></tr></table></blockquote><div class=CBody><p>Returns the number of address maps this virtual register array is mapped in</p></div></div></div>
<!--CONTENT index=15 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.is_in_map" href="../../src/reg/uvm_vreg.svh">is_in_map</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>function bit is_in_map (</td> <td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
<div class=CBody><p>Return TRUE if this virtual register array is in the specified address <i>map</i></p></div></div></div>
<!--CONTENT index=16 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.get_maps" href="../../src/reg/uvm_vreg.svh">get_maps</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual function void get_maps (</td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>maps[$]</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
<div class=CBody><p>Returns all of the address <i>maps</i> where this virtual register array is mapped</p></div></div></div>
<!--CONTENT index=17 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.get_rights" href="../../src/reg/uvm_vreg.svh">get_rights</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual function string get_rights(</td> <td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
<div class=CBody><p>Returns the access rights of this virtual reigster array</p><p>Returns &ldquo;RW&rdquo;, &ldquo;RO&rdquo; or &ldquo;WO&rdquo;.&nbsp; The access rights of a virtual register array is always &ldquo;RW&rdquo;, unless it is implemented in a shared memory with access restriction in a particular address map.</p><p>If no address map is specified and the memory is mapped in only one address map, that address map is used.&nbsp; If the memory is mapped in more than one address map, the default address map of the parent block is used.</p><p>If an address map is specified and the memory is not mapped in the specified address map, an error message is issued and &ldquo;RW&rdquo; is returned.</p></div></div></div>
<!--CONTENT index=18 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.get_access" href="../../src/reg/uvm_vreg.svh">get_access</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual function string get_access(</td> <td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
<div class=CBody><p>Returns the access policy of the virtual register array when written and read via an address map.</p><p>If the memory implementing the virtual register array is mapped in more than one address map, an address <i>map</i> must be specified.&nbsp; If access restrictions are present when accessing a memory through the specified address map, the access mode returned takes the access restrictions into account.&nbsp; For example, a read-write memory accessed through an address map with read-only restrictions would return &ldquo;RO&rdquo;.</p></div></div></div>
<!--CONTENT index=19 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.get_size" href="../../src/reg/uvm_vreg.svh">get_size</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>virtual function int unsigned get_size()
</td></tr></table></blockquote><div class=CBody><p>Returns the size of the virtual register array.</p></div></div></div>
<!--CONTENT index=20 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.get_n_bytes" href="../../src/reg/uvm_vreg.svh">get_n_bytes</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>virtual function int unsigned get_n_bytes()
</td></tr></table></blockquote><div class=CBody><p>Returns the width, in bytes, of a virtual register.</p><p>The width of a virtual register is always a multiple of the width of the memory locations used to implement it.&nbsp; For example, a virtual register containing two 1-byte fields implemented in a memory with 4-bytes memory locations is 4-byte wide.</p></div></div></div>
<!--CONTENT index=21 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.get_n_memlocs" href="../../src/reg/uvm_vreg.svh">get_n_memlocs</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>virtual function int unsigned get_n_memlocs()
</td></tr></table></blockquote><div class=CBody><p>Returns the number of memory locations used by a single virtual register.</p></div></div></div>
<!--CONTENT index=22 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.get_incr" href="../../src/reg/uvm_vreg.svh">get_incr</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>virtual function int unsigned get_incr()
</td></tr></table></blockquote><div class=CBody><p>Returns the number of memory locations between two individual virtual registers in the same array.</p></div></div></div>
<!--CONTENT index=23 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.get_fields" href="../../src/reg/uvm_vreg.svh">get_fields</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual function void get_fields(</td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_vreg_field&nbsp;</td>
<td class=PParameter nowrap>fields[$]</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
<div class=CBody><p>Return the virtual fields in this virtual register</p><p>Fills the specified array with the abstraction class for all of the virtual fields contained in this virtual register.&nbsp; Fields are ordered from least-significant position to most-significant position within the register.</p></div></div></div>
<!--CONTENT index=24 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.get_field_by_name" href="../../src/reg/uvm_vreg.svh">get_field_by_name</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual function uvm_vreg_field get_field_by_name(</td> <td class=PType nowrap>string&nbsp;</td>
<td class=PParameter nowrap>name</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
<div class=CBody><p>Return the named virtual field in this virtual register</p><p>Finds a virtual field with the specified name in this virtual register and returns its abstraction class.&nbsp; If no fields are found, returns null.</p></div></div></div>
<!--CONTENT index=25 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.get_offset_in_memory" href="../../src/reg/uvm_vreg.svh">get_offset_in_memory</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual function uvm_reg_addr_t get_offset_in_memory(</td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
<div class=CBody><p>Returns the offset of a virtual register</p><p>Returns the base offset of the specified virtual register, in the overall address space of the memory that implements the virtual register array.</p></div></div></div>
<!--CONTENT index=26 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.get_address" href="../../src/reg/uvm_vreg.svh">get_address</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual function uvm_reg_addr_t get_address(</td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
<div class=CBody><p>Returns the base external physical address of a virtual register</p><p>Returns the base external physical address of the specified virtual reigster if accessed through the specified address <i>map</i>.</p><p>If no address map is specified and the memory implementing the virtual register array is mapped in only one address map, that address map is used.&nbsp; If the memory is mapped in more than one address map, the default address map of the parent block is used.</p><p>If an address map is specified and the memory is not mapped in the specified address map, an error message is issued.</p></div></div></div>
<!--CONTENT index=27 -->
<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.HDL_Access" href="../../src/reg/uvm_vreg.svh">HDL Access</a></h3></div></div>
<!--CONTENT index=28 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.write" href="../../src/reg/uvm_vreg.svh">write</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task write(</td> <td class=PTypePrefix nowrap>input longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>output&nbsp;</td>
<td class=PType nowrap>uvm_status_e&nbsp;</td>
<td class=PParameter nowrap>status,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_reg_data_t&nbsp;</td>
<td class=PParameter nowrap>value,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_path_e&nbsp;</td>
<td class=PParameter nowrap>path</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> UVM_DEFAULT_PATH,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_sequence_base&nbsp;</td>
<td class=PParameter nowrap>parent</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_object&nbsp;</td>
<td class=PParameter nowrap>extension</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>string&nbsp;</td>
<td class=PParameter nowrap>fname</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> &quot;&quot;,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>int&nbsp;</td>
<td class=PParameter nowrap>lineno</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> 0</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
<div class=CBody><p>Write the specified value in a virtual register</p><p>Write <i>value</i> in the DUT memory location(s) that implements the virtual register array that corresponds to this abstraction class instance using the specified access <i>path</i>.</p><p>If the memory implementing the virtual register array is mapped in more than one address map, an address <i>map</i> must be specified if a physical access is used (front-door access).</p><p>The operation is eventually mapped into set of memory-write operations at the location where the virtual register specified by <i>idx</i> in the virtual register array is implemented.</p></div></div></div>
<!--CONTENT index=29 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.read" href="../../src/reg/uvm_vreg.svh">read</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task read(</td> <td class=PTypePrefix nowrap>input longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>output&nbsp;</td>
<td class=PType nowrap>uvm_status_e&nbsp;</td>
<td class=PParameter nowrap>status,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>output&nbsp;</td>
<td class=PType nowrap>uvm_reg_data_t&nbsp;</td>
<td class=PParameter nowrap>value,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_path_e&nbsp;</td>
<td class=PParameter nowrap>path</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> UVM_DEFAULT_PATH,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_sequence_base&nbsp;</td>
<td class=PParameter nowrap>parent</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_object&nbsp;</td>
<td class=PParameter nowrap>extension</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>string&nbsp;</td>
<td class=PParameter nowrap>fname</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> &quot;&quot;,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>int&nbsp;</td>
<td class=PParameter nowrap>lineno</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> 0</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
<div class=CBody><p>Read the current value from a virtual register</p><p>Read from the DUT memory location(s) that implements the virtual register array that corresponds to this abstraction class instance using the specified access <i>path</i> and return the readback <i>value</i>.</p><p>If the memory implementing the virtual register array is mapped in more than one address map, an address <i>map</i> must be specified if a physical access is used (front-door access).</p><p>The operation is eventually mapped into set of memory-read operations at the location where the virtual register specified by <i>idx</i> in the virtual register array is implemented.</p></div></div></div>
<!--CONTENT index=30 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.poke" href="../../src/reg/uvm_vreg.svh">poke</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task poke(</td> <td class=PTypePrefix nowrap>input longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>output&nbsp;</td>
<td class=PType nowrap>uvm_status_e&nbsp;</td>
<td class=PParameter nowrap>status,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_reg_data_t&nbsp;</td>
<td class=PParameter nowrap>value,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_sequence_base&nbsp;</td>
<td class=PParameter nowrap>parent</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_object&nbsp;</td>
<td class=PParameter nowrap>extension</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>string&nbsp;</td>
<td class=PParameter nowrap>fname</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> &quot;&quot;,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>int&nbsp;</td>
<td class=PParameter nowrap>lineno</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> 0</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
<div class=CBody><p>Deposit the specified value in a virtual register</p><p>Deposit <i>value</i> in the DUT memory location(s) that implements the virtual register array that corresponds to this abstraction class instance using the memory backdoor access.</p><p>The operation is eventually mapped into set of memory-poke operations at the location where the virtual register specified by <i>idx</i> in the virtual register array is implemented.</p></div></div></div>
<!--CONTENT index=31 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.peek" href="../../src/reg/uvm_vreg.svh">peek</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task peek(</td> <td class=PTypePrefix nowrap>input longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>output&nbsp;</td>
<td class=PType nowrap>uvm_status_e&nbsp;</td>
<td class=PParameter nowrap>status,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>output&nbsp;</td>
<td class=PType nowrap>uvm_reg_data_t&nbsp;</td>
<td class=PParameter nowrap>value,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_sequence_base&nbsp;</td>
<td class=PParameter nowrap>parent</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_object&nbsp;</td>
<td class=PParameter nowrap>extension</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>string&nbsp;</td>
<td class=PParameter nowrap>fname</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> &quot;&quot;,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>int&nbsp;</td>
<td class=PParameter nowrap>lineno</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> 0</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
<div class=CBody><p>Sample the current value in a virtual register</p><p>Sample the DUT memory location(s) that implements the virtual register array that corresponds to this abstraction class instance using the memory backdoor access, and return the sampled <i>value</i>.</p><p>The operation is eventually mapped into set of memory-peek operations at the location where the virtual register specified by <i>idx</i> in the virtual register array is implemented.</p></div></div></div>
<!--CONTENT index=32 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.reset" href="../../src/reg/uvm_vreg.svh">reset</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>function void reset(</td> <td class=PType nowrap>string&nbsp;</td>
<td class=PParameter nowrap>kind</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> &quot;HARD&quot;</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
<div class=CBody><p>Reset the access semaphore</p><p>Reset the semaphore that prevents concurrent access to the virtual register.&nbsp; This semaphore must be explicitly reset if a thread accessing this virtual register array was killed in before the access was completed</p></div></div></div>
<!--CONTENT index=33 -->
<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.Callbacks" href="../../src/reg/uvm_vreg.svh">Callbacks</a></h3></div></div>
<!--CONTENT index=34 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.pre_write" href="../../src/reg/uvm_vreg.svh">pre_write</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task pre_write(</td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_reg_data_t&nbsp;</td>
<td class=PParameter nowrap>wdat,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_path_e&nbsp;</td>
<td class=PParameter nowrap>path,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
<div class=CBody><p>Called before virtual register write.</p><p>If the specified data value, access <i>path</i> or address <i>map</i> are modified, the updated data value, access path or address map will be used to perform the virtual register operation.</p><p>The registered callback methods are invoked after the invocation of this method.&nbsp; All register callbacks are executed after the corresponding field callbacks The pre-write virtual register and field callbacks are executed before the corresponding pre-write memory callbacks</p></div></div></div>
<!--CONTENT index=35 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.post_write" href="../../src/reg/uvm_vreg.svh">post_write</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task post_write(</td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_reg_data_t&nbsp;</td>
<td class=PParameter nowrap>wdat,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_path_e&nbsp;</td>
<td class=PParameter nowrap>path,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_status_e&nbsp;</td>
<td class=PParameter nowrap>status</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
<div class=CBody><p>Called after virtual register write.</p><p>If the specified <i>status</i> is modified, the updated status will be returned by the virtual register operation.</p><p>The registered callback methods are invoked before the invocation of this method.&nbsp; All register callbacks are executed before the corresponding field callbacks The post-write virtual register and field callbacks are executed after the corresponding post-write memory callbacks</p></div></div></div>
<!--CONTENT index=36 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.pre_read" href="../../src/reg/uvm_vreg.svh">pre_read</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task pre_read(</td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_path_e&nbsp;</td>
<td class=PParameter nowrap>path,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
<div class=CBody><p>Called before virtual register read.</p><p>If the specified access <i>path</i> or address <i>map</i> are modified, the updated access path or address map will be used to perform the register operation.</p><p>The registered callback methods are invoked after the invocation of this method.&nbsp; All register callbacks are executed after the corresponding field callbacks The pre-read virtual register and field callbacks are executed before the corresponding pre-read memory callbacks</p></div></div></div>
<!--CONTENT index=37 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg.post_read" href="../../src/reg/uvm_vreg.svh">post_read</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task post_read(</td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_reg_data_t&nbsp;</td>
<td class=PParameter nowrap>rdat,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_path_e&nbsp;</td>
<td class=PParameter nowrap>path,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_status_e&nbsp;</td>
<td class=PParameter nowrap>status</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
<div class=CBody><p>Called after virtual register read.</p><p>If the specified readback data or <i>status</i> is modified, the updated readback data or status will be returned by the register operation.</p><p>The registered callback methods are invoked before the invocation of this method.&nbsp; All register callbacks are executed before the corresponding field callbacks The post-read virtual register and field callbacks are executed after the corresponding post-read memory callbacks</p></div></div></div>
<!--CONTENT index=38 -->
<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="uvm_vreg_cbs" href="../../src/reg/uvm_vreg.svh">uvm_vreg_cbs</a></h2><div class=CBody><p>Pre/post read/write callback facade class</p>
<!--START_ND_SUMMARY index=38-->
<div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable>
<!-- index=38 -->
<tr class="SClass"><td colspan=2 class=SEntry><a href="#uvm_vreg_cbs" id=link47 onMouseOver="ShowTip(event, 'tt2', 'link47')" onMouseOut="HideTip('tt2')">uvm_vreg_cbs</a></td></tr>
<tr class=SMain><td colspan=2 class=SWideDescription>Pre/post read/write callback facade class</td></tr>
<!-- HIERARCHY -->
<tr class="SHierarchy SIndent1 "><td colspan=2 class="SEntry SIndent1">Class Hierarchy</td></tr>
<tr class="SPrototype SIndent1"><td colspan=2 class=SDescription>
<div class=ClassHierarchy>
<table border=0 cellspacing=0 cellpadding=0>
<tr><td><div class=CHParent><div class=CHEntry><a href="../base/uvm_misc-svh.html#uvm_void" class=LGeneric id=link44 onMouseOver="ShowTip(event, 'tt3', 'link44')" onMouseOut="HideTip('tt3')">uvm_void</a></div></div></td></tr>
<tr><td><div class=CHParent><div class=CHEntry><a href="../base/uvm_object-svh.html#uvm_object" class=LClass id=link45 onMouseOver="ShowTip(event, 'tt4', 'link45')" onMouseOut="HideTip('tt4')">uvm_object</a></div></div></td></tr>
<tr><td><div class=CHParent><div class=CHEntry><a href="../base/uvm_callback-svh.html#uvm_callback" class=LClass id=link46 onMouseOver="ShowTip(event, 'tt38', 'link46')" onMouseOut="HideTip('tt38')">uvm_callback</a></div></div></td></tr>
<tr><td><div class=CHCurrent><div class=CHEntry>uvm_vreg_cbs</div></div></td></tr>
</table>
</div>
</td></tr>
<!-- PROTOTYPE -->
<tr class="SPrototype SIndent1"><td colspan=2 class="SEntry SIndent1">Class Declaration</td></tr>
<tr class="SPrototype SIndent1"><td colspan=2 class=SDescription>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>class uvm_vreg_cbs extends uvm_callback
</td></tr></table></blockquote></td></tr>
<!-- index=39 -->
<tr class="SGroup SIndent1"><td class=SEntry><a href="#uvm_vreg_cbs.Methods" >Methods</a></td><td class=SDescription></td></tr>
<!-- index=40 -->
<tr class="SMethod SIndent2"><td class=SEntry><a href="#uvm_vreg_cbs.pre_write" id=link48 onMouseOver="ShowTip(event, 'tt39', 'link48')" onMouseOut="HideTip('tt39')">pre_write</a></td><td class=SDescription>Callback called before a write operation.</td></tr>
<!-- index=41 -->
<tr class="SMethod SIndent2 SMarked"><td class=SEntry><a href="#uvm_vreg_cbs.post_write" id=link49 onMouseOver="ShowTip(event, 'tt40', 'link49')" onMouseOut="HideTip('tt40')">post_write</a></td><td class=SDescription>Called after register write.</td></tr>
<!-- index=42 -->
<tr class="SMethod SIndent2"><td class=SEntry><a href="#uvm_vreg_cbs.pre_read" id=link50 onMouseOver="ShowTip(event, 'tt41', 'link50')" onMouseOut="HideTip('tt41')">pre_read</a></td><td class=SDescription>Called before register read.</td></tr>
<!-- index=43 -->
<tr class="SMethod SIndent2 SMarked"><td class=SEntry><a href="#uvm_vreg_cbs.post_read" id=link51 onMouseOver="ShowTip(event, 'tt42', 'link51')" onMouseOut="HideTip('tt42')">post_read</a></td><td class=SDescription>Called after register read.</td></tr>
<!-- index=44 -->
<tr class="SGroup SIndent1"><td class=SEntry><a href="#uvm_vreg_cbs.Types" >Types</a></td><td class=SDescription></td></tr>
<!-- index=45 -->
<tr class="SType SIndent2"><td class=SEntry><a href="#uvm_vreg_cbs.uvm_vreg_cb" >uvm_vreg_cb</a></td><td class=SDescription>Convenience callback type declaration</td></tr>
<!-- index=46 -->
<tr class="SType SIndent2 SMarked"><td class=SEntry><a href="#uvm_vreg_cbs.uvm_vreg_cb_iter" >uvm_vreg_cb_iter</a></td><td class=SDescription>Convenience callback iterator type declaration</td></tr></table></div></div><!--END_ND_SUMMARY-->
</div></div></div>
<!--CONTENT index=39 -->
<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg_cbs.Methods" href="../../src/reg/uvm_vreg.svh">Methods</a></h3></div></div>
<!--CONTENT index=40 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg_cbs.pre_write" href="../../src/reg/uvm_vreg.svh">pre_write</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task pre_write(</td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_vreg&nbsp;</td>
<td class=PParameter nowrap>rg,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_reg_data_t&nbsp;</td>
<td class=PParameter nowrap>wdat,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_path_e&nbsp;</td>
<td class=PParameter nowrap>path,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
<div class=CBody><p>Callback called before a write operation.</p><p>The registered callback methods are invoked after the invocation of the <a href="#uvm_vreg.pre_write" class=LMethod id=link52 onMouseOver="ShowTip(event, 'tt32', 'link52')" onMouseOut="HideTip('tt32')">uvm_vreg::pre_write()</a> method.&nbsp; All virtual register callbacks are executed after the corresponding virtual field callbacks The pre-write virtual register and field callbacks are executed before the corresponding pre-write memory callbacks</p><p>The written value <i>wdat</i>, access <i>path</i> and address <i>map</i>, if modified, modifies the actual value, access path or address map used in the virtual register operation.</p></div></div></div>
<!--CONTENT index=41 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg_cbs.post_write" href="../../src/reg/uvm_vreg.svh">post_write</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task post_write(</td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_vreg&nbsp;</td>
<td class=PParameter nowrap>rg,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_reg_data_t&nbsp;</td>
<td class=PParameter nowrap>wdat,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_path_e&nbsp;</td>
<td class=PParameter nowrap>path,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_status_e&nbsp;</td>
<td class=PParameter nowrap>status</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
<div class=CBody><p>Called after register write.</p><p>The registered callback methods are invoked before the invocation of the <a href="uvm_reg-svh.html#uvm_reg.post_write" class=LMethod id=link53 onMouseOver="ShowTip(event, 'tt43', 'link53')" onMouseOut="HideTip('tt43')">uvm_reg::post_write()</a> method.&nbsp; All register callbacks are executed before the corresponding virtual field callbacks The post-write virtual register and field callbacks are executed after the corresponding post-write memory callbacks</p><p>The <i>status</i> of the operation, if modified, modifies the actual returned status.</p></div></div></div>
<!--CONTENT index=42 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg_cbs.pre_read" href="../../src/reg/uvm_vreg.svh">pre_read</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task pre_read(</td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_vreg&nbsp;</td>
<td class=PParameter nowrap>rg,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_path_e&nbsp;</td>
<td class=PParameter nowrap>path,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
<div class=CBody><p>Called before register read.</p><p>The registered callback methods are invoked after the invocation of the <a href="uvm_reg-svh.html#uvm_reg.pre_read" class=LMethod id=link54 onMouseOver="ShowTip(event, 'tt44', 'link54')" onMouseOut="HideTip('tt44')">uvm_reg::pre_read()</a> method.&nbsp; All register callbacks are executed after the corresponding virtual field callbacks The pre-read virtual register and field callbacks are executed before the corresponding pre-read memory callbacks</p><p>The access <i>path</i> and address <i>map</i>, if modified, modifies the actual access path or address map used in the register operation.</p></div></div></div>
<!--CONTENT index=43 -->
<div class="CMethod"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg_cbs.post_read" href="../../src/reg/uvm_vreg.svh">post_read</a></h3>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task post_read(</td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_vreg&nbsp;</td>
<td class=PParameter nowrap>rg,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_reg_data_t&nbsp;</td>
<td class=PParameter nowrap>rdat,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_path_e&nbsp;</td>
<td class=PParameter nowrap>path,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_status_e&nbsp;</td>
<td class=PParameter nowrap>status</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
<div class=CBody><p>Called after register read.</p><p>The registered callback methods are invoked before the invocation of the <a href="uvm_reg-svh.html#uvm_reg.post_read" class=LMethod id=link55 onMouseOver="ShowTip(event, 'tt45', 'link55')" onMouseOut="HideTip('tt45')">uvm_reg::post_read()</a> method.&nbsp; All register callbacks are executed before the corresponding virtual field callbacks The post-read virtual register and field callbacks are executed after the corresponding post-read memory callbacks</p><p>The readback value <i>rdat</i> and the <i>status</i> of the operation, if modified, modifies the actual returned readback value and status.</p></div></div></div>
<!--CONTENT index=44 -->
<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg_cbs.Types" href="../../src/reg/uvm_vreg.svh">Types</a></h3></div></div>
<!--CONTENT index=45 -->
<div class="CType"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg_cbs.uvm_vreg_cb" href="../../src/reg/uvm_vreg.svh">uvm_vreg_cb</a></h3><div class=CBody><p>Convenience callback type declaration</p><p>Use this declaration to register virtual register callbacks rather than the more verbose parameterized class</p></div></div></div>
<!--CONTENT index=46 -->
<div class="CType"><div class=CTopic><h3 class=CTitle><a name="uvm_vreg_cbs.uvm_vreg_cb_iter" href="../../src/reg/uvm_vreg.svh">uvm_vreg_cb_iter</a></h3><div class=CBody><p>Convenience callback iterator type declaration</p><p>Use this declaration to iterate over registered virtual register callbacks rather than the more verbose parameterized class</p></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_vreg extends uvm_object
</td></tr></table></blockquote>Virtual register abstraction base class</div></div><div class=CToolTip id="tt2"><div class=CClass>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>class uvm_vreg_cbs extends uvm_callback
</td></tr></table></blockquote>Pre/post read/write callback facade class</div></div><div class=CToolTip id="tt3"><div class=CGeneric>The <i>uvm_void</i> class is the base class for all UVM classes. </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_object extends uvm_void
</td></tr></table></blockquote>The uvm_object class is the base class for all UVM data and hierarchical classes. </div></div><div class=CToolTip id="tt5"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>function new(</td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>string&nbsp;</td>
<td class=PParameter nowrap>name,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>int&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>n_bits</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Create a new instance and type-specific configuration</div></div><div class=CToolTip id="tt6"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>function void configure(</td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_reg_block&nbsp;</td>
<td class=PParameter nowrap>parent,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_mem&nbsp;</td>
<td class=PParameter nowrap>mem</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>size</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> 0,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_reg_addr_t&nbsp;</td>
<td class=PParameter nowrap>offset</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> 0,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>int&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>incr</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> 0</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Instance-specific configuration</div></div><div class=CToolTip id="tt7"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual function bit implement(</td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>n,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_mem&nbsp;</td>
<td class=PParameter nowrap>mem</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_reg_addr_t&nbsp;</td>
<td class=PParameter nowrap>offset</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> 0,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>int&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>incr</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> 0</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Dynamically implement, resize or relocate a virtual register array</div></div><div class=CToolTip id="tt8"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual function uvm_mem_region allocate(</td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>n,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_mem_mam&nbsp;</td>
<td class=PParameter nowrap>mam</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Randomly implement, resize or relocate a virtual register array</div></div><div class=CToolTip id="tt9"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>virtual function uvm_mem_region get_region()
</td></tr></table></blockquote>Get the region where the virtual register array is implemented</div></div><div class=CToolTip id="tt10"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>virtual function void release_region()
</td></tr></table></blockquote>Dynamically un-implement a virtual register array</div></div><div class=CToolTip id="tt11"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>virtual function string get_full_name()
</td></tr></table></blockquote>Get the hierarchical name</div></div><div class=CToolTip id="tt12"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>virtual function uvm_reg_block get_parent()
</td></tr></table></blockquote>Get the parent block</div></div><div class=CToolTip id="tt13"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>virtual function uvm_mem get_memory()
</td></tr></table></blockquote>Get the memory where the virtual regoster array is implemented</div></div><div class=CToolTip id="tt14"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>virtual function int get_n_maps ()
</td></tr></table></blockquote>Returns the number of address maps this virtual register array is mapped in</div></div><div class=CToolTip id="tt15"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>function bit is_in_map (</td> <td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Return TRUE if this virtual register array is in the specified address <i>map</i></div></div><div class=CToolTip id="tt16"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual function void get_maps (</td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>maps[$]</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Returns all of the address <i>maps</i> where this virtual register array is mapped</div></div><div class=CToolTip id="tt17"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual function string get_rights(</td> <td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Returns the access rights of this virtual reigster array</div></div><div class=CToolTip id="tt18"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual function string get_access(</td> <td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Returns the access policy of the virtual register array when written and read via an address map.</div></div><div class=CToolTip id="tt19"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>virtual function int unsigned get_size()
</td></tr></table></blockquote>Returns the size of the virtual register array.</div></div><div class=CToolTip id="tt20"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>virtual function int unsigned get_n_bytes()
</td></tr></table></blockquote>Returns the width, in bytes, of a virtual register.</div></div><div class=CToolTip id="tt21"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>virtual function int unsigned get_n_memlocs()
</td></tr></table></blockquote>Returns the number of memory locations used by a single virtual register.</div></div><div class=CToolTip id="tt22"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>virtual function int unsigned get_incr()
</td></tr></table></blockquote>Returns the number of memory locations between two individual virtual registers in the same array.</div></div><div class=CToolTip id="tt23"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual function void get_fields(</td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_vreg_field&nbsp;</td>
<td class=PParameter nowrap>fields[$]</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Return the virtual fields in this virtual register</div></div><div class=CToolTip id="tt24"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual function uvm_vreg_field get_field_by_name(</td> <td class=PType nowrap>string&nbsp;</td>
<td class=PParameter nowrap>name</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Return the named virtual field in this virtual register</div></div><div class=CToolTip id="tt25"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual function uvm_reg_addr_t get_offset_in_memory(</td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Returns the offset of a virtual register</div></div><div class=CToolTip id="tt26"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual function uvm_reg_addr_t get_address(</td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Returns the base external physical address of a virtual register</div></div><div class=CToolTip id="tt27"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task write(</td> <td class=PTypePrefix nowrap>input longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>output&nbsp;</td>
<td class=PType nowrap>uvm_status_e&nbsp;</td>
<td class=PParameter nowrap>status,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_reg_data_t&nbsp;</td>
<td class=PParameter nowrap>value,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_path_e&nbsp;</td>
<td class=PParameter nowrap>path</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> UVM_DEFAULT_PATH,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_sequence_base&nbsp;</td>
<td class=PParameter nowrap>parent</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_object&nbsp;</td>
<td class=PParameter nowrap>extension</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>string&nbsp;</td>
<td class=PParameter nowrap>fname</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> &quot;&quot;,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>int&nbsp;</td>
<td class=PParameter nowrap>lineno</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> 0</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Write the specified value in a virtual register</div></div><div class=CToolTip id="tt28"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task read(</td> <td class=PTypePrefix nowrap>input longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>output&nbsp;</td>
<td class=PType nowrap>uvm_status_e&nbsp;</td>
<td class=PParameter nowrap>status,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>output&nbsp;</td>
<td class=PType nowrap>uvm_reg_data_t&nbsp;</td>
<td class=PParameter nowrap>value,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_path_e&nbsp;</td>
<td class=PParameter nowrap>path</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> UVM_DEFAULT_PATH,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_sequence_base&nbsp;</td>
<td class=PParameter nowrap>parent</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_object&nbsp;</td>
<td class=PParameter nowrap>extension</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>string&nbsp;</td>
<td class=PParameter nowrap>fname</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> &quot;&quot;,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>int&nbsp;</td>
<td class=PParameter nowrap>lineno</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> 0</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Read the current value from a virtual register</div></div><div class=CToolTip id="tt29"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task poke(</td> <td class=PTypePrefix nowrap>input longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>output&nbsp;</td>
<td class=PType nowrap>uvm_status_e&nbsp;</td>
<td class=PParameter nowrap>status,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_reg_data_t&nbsp;</td>
<td class=PParameter nowrap>value,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_sequence_base&nbsp;</td>
<td class=PParameter nowrap>parent</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_object&nbsp;</td>
<td class=PParameter nowrap>extension</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>string&nbsp;</td>
<td class=PParameter nowrap>fname</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> &quot;&quot;,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>int&nbsp;</td>
<td class=PParameter nowrap>lineno</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> 0</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Deposit the specified value in a virtual register</div></div><div class=CToolTip id="tt30"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task peek(</td> <td class=PTypePrefix nowrap>input longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>output&nbsp;</td>
<td class=PType nowrap>uvm_status_e&nbsp;</td>
<td class=PParameter nowrap>status,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>output&nbsp;</td>
<td class=PType nowrap>uvm_reg_data_t&nbsp;</td>
<td class=PParameter nowrap>value,</td>
<td class=PDefaultValuePrefix>&nbsp;&nbsp;</td>
<td class=PDefaultValue width=100%></td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_sequence_base&nbsp;</td>
<td class=PParameter nowrap>parent</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_object&nbsp;</td>
<td class=PParameter nowrap>extension</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> null,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>string&nbsp;</td>
<td class=PParameter nowrap>fname</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> &quot;&quot;,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>int&nbsp;</td>
<td class=PParameter nowrap>lineno</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> 0</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Sample the current value in a virtual register</div></div><div class=CToolTip id="tt31"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>function void reset(</td> <td class=PType nowrap>string&nbsp;</td>
<td class=PParameter nowrap>kind</td>
<td class=PDefaultValuePrefix>&nbsp;=&nbsp;</td>
<td class=PDefaultValue width=100%> &quot;HARD&quot;</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Reset the access semaphore</div></div><div class=CToolTip id="tt32"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task pre_write(</td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_reg_data_t&nbsp;</td>
<td class=PParameter nowrap>wdat,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_path_e&nbsp;</td>
<td class=PParameter nowrap>path,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Called before virtual register write.</div></div><div class=CToolTip id="tt33"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task post_write(</td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_reg_data_t&nbsp;</td>
<td class=PParameter nowrap>wdat,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_path_e&nbsp;</td>
<td class=PParameter nowrap>path,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_status_e&nbsp;</td>
<td class=PParameter nowrap>status</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Called after virtual register write.</div></div><div class=CToolTip id="tt34"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task pre_read(</td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_path_e&nbsp;</td>
<td class=PParameter nowrap>path,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Called before virtual register read.</div></div><div class=CToolTip id="tt35"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task post_read(</td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_reg_data_t&nbsp;</td>
<td class=PParameter nowrap>rdat,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_path_e&nbsp;</td>
<td class=PParameter nowrap>path,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_status_e&nbsp;</td>
<td class=PParameter nowrap>status</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Called after virtual register read.</div></div><div class=CToolTip id="tt36"><div class=CClass>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>class uvm_mem_region
</td></tr></table></blockquote>Allocated memory region descriptor</div></div><div class=CToolTip id="tt37"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>function void release_region(</td> <td class=PType nowrap>uvm_mem_region&nbsp;</td>
<td class=PParameter nowrap>region</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Release the specified region</div></div><div class=CToolTip id="tt38"><div class=CClass>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>class uvm_callback extends uvm_object
</td></tr></table></blockquote>The <i>uvm_callback</i> class is the base class for user-defined callback classes. </div></div><div class=CToolTip id="tt39"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task pre_write(</td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_vreg&nbsp;</td>
<td class=PParameter nowrap>rg,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_reg_data_t&nbsp;</td>
<td class=PParameter nowrap>wdat,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_path_e&nbsp;</td>
<td class=PParameter nowrap>path,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Callback called before a write operation.</div></div><div class=CToolTip id="tt40"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task post_write(</td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_vreg&nbsp;</td>
<td class=PParameter nowrap>rg,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_reg_data_t&nbsp;</td>
<td class=PParameter nowrap>wdat,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_path_e&nbsp;</td>
<td class=PParameter nowrap>path,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_status_e&nbsp;</td>
<td class=PParameter nowrap>status</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Called after register write.</div></div><div class=CToolTip id="tt41"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task pre_read(</td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_vreg&nbsp;</td>
<td class=PParameter nowrap>rg,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_path_e&nbsp;</td>
<td class=PParameter nowrap>path,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Called before register read.</div></div><div class=CToolTip id="tt42"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task post_read(</td> <td class=PTypePrefix nowrap></td>
<td class=PType nowrap>uvm_vreg&nbsp;</td>
<td class=PParameter nowrap>rg,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>longint&nbsp;</td>
<td class=PType nowrap>unsigned&nbsp;</td>
<td class=PParameter nowrap>idx,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_reg_data_t&nbsp;</td>
<td class=PParameter nowrap>rdat,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_path_e&nbsp;</td>
<td class=PParameter nowrap>path,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>input&nbsp;</td>
<td class=PType nowrap>uvm_reg_map&nbsp;</td>
<td class=PParameter nowrap>map,</td>
</tr><tr><td></td> <td class=PTypePrefix nowrap>ref&nbsp;</td>
<td class=PType nowrap>uvm_status_e&nbsp;</td>
<td class=PParameter nowrap>status</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Called after register read.</div></div><div class=CToolTip id="tt43"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task post_write(</td> <td class=PType nowrap>uvm_reg_item&nbsp;</td>
<td class=PParameter nowrap>rw</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Called after register write.</div></div><div class=CToolTip id="tt44"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task pre_read(</td> <td class=PType nowrap>uvm_reg_item&nbsp;</td>
<td class=PParameter nowrap>rw</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Called before register read.</div></div><div class=CToolTip id="tt45"><div class=CMethod>
<blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype>
<tr><td><table border=0 cellspacing=0 cellpadding=0><tr>
<td class=PBeforeParameters nowrap>virtual task post_read(</td> <td class=PType nowrap>uvm_reg_item&nbsp;</td>
<td class=PParameter nowrap>rw</td>
<td class=PAfterParameters nowrap>)</td></tr>
</table></td></tr>
</table></blockquote>
Called after register read.</div></div><!--END_ND_TOOLTIPS-->
<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>