URL
https://opencores.org/ocsvn/lpffir/lpffir/trunk
Subversion Repositories lpffir
[/] [lpffir/] [trunk/] [uvm/] [tools/] [uvm_syoscb/] [docs/] [html/] [cl__syoscb__queue__std_8svh_source.html] - Rev 4
Compare with Previous | Blame | View Log
<!-- This comment will put IE 6, 7 and 8 in quirks mode --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <title>SyoSil ApS UVM Scoreboard: cl_syoscb_queue_std.svh Source File</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javaScript" src="search/search.js"></script> <link href="doxygen.css" rel="stylesheet" type="text/css"/> </head> <body onload='searchBox.OnSelectItem(0);'> <!-- Generated by Doxygen 1.6.1 --> <script type="text/javascript"><!-- var searchBox = new SearchBox("searchBox", "search",false,'Search'); --></script> <script type="text/javascript"> <!-- function changeDisplayState (e){ var num=this.id.replace(/[^[0-9]/g,''); var button=this.firstChild; var sectionDiv=document.getElementById('dynsection'+num); if (sectionDiv.style.display=='none'||sectionDiv.style.display==''){ sectionDiv.style.display='block'; button.src='open.gif'; }else{ sectionDiv.style.display='none'; button.src='closed.gif'; } } function initDynSections(){ var divs=document.getElementsByTagName('div'); var sectionCounter=1; for(var i=0;i<divs.length-1;i++){ if(divs[i].className=='dynheader'&&divs[i+1].className=='dynsection'){ var header=divs[i]; var section=divs[i+1]; var button=header.firstChild; if (button!='IMG'){ divs[i].insertBefore(document.createTextNode(' '),divs[i].firstChild); button=document.createElement('img'); divs[i].insertBefore(button,divs[i].firstChild); } header.style.cursor='pointer'; header.onclick=changeDisplayState; header.id='dynheader'+sectionCounter; button.src='closed.gif'; section.id='dynsection'+sectionCounter; section.style.display='none'; section.style.marginLeft='14px'; sectionCounter++; } } } window.onload = initDynSections; --> </script> <div class="navigation" id="top"> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> <li><a href="dirs.html"><span>Directories</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <img id="MSearchSelect" src="search/search.png" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/> <input type="text" id="MSearchField" value="Search" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> </div> </li> </ul> </div> <div class="tabs"> <ul> <li><a href="files.html"><span>File List</span></a></li> </ul> </div> <div class="navpath"><a class="el" href="dir_562324e130495ce1321e3e3f14c8d761.html">src</a> </div> </div> <div class="contents"> <h1>cl_syoscb_queue_std.svh</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/// Standard implementation of a queue. Uses a normal SystemVerilog queue as</span> <a name="l00002"></a>00002 <span class="comment"></span><span class="comment">/// implementation. The class implements the queue API as defined by the queue</span> <a name="l00003"></a>00003 <span class="comment"></span><span class="comment">/// base class.</span> <a name="l00004"></a><a class="code" href="classcl__syoscb__queue__std.html">00004</a> <span class="comment"></span><span class="keyword">class </span><a class="code" href="classcl__syoscb__queue__std.html" title="Standard implementation of a queue.">cl_syoscb_queue_std</a> <span class="keyword">extends</span> <a class="code" href="classcl__syoscb__queue.html" title="Class which base concet of a queue.">cl_syoscb_queue</a>; <a name="l00005"></a>00005 <span class="comment">//-------------------------------------</span> <a name="l00006"></a>00006 <span class="comment">// Non randomizable variables</span> <a name="l00007"></a>00007 <span class="comment">//-------------------------------------</span><span class="comment"></span> <a name="l00008"></a>00008 <span class="comment"> /// Poor mans queue implementation as a SV queue</span> <a name="l00009"></a>00009 <span class="comment"></span> local <a class="code" href="classcl__syoscb__item.html" title="The UVM scoreboard item.">cl_syoscb_item</a> items[$]; <a name="l00010"></a>00010 <a name="l00011"></a>00011 <span class="comment">//-------------------------------------</span> <a name="l00012"></a>00012 <span class="comment">// UVM Macros</span> <a name="l00013"></a>00013 <span class="comment">//-------------------------------------</span> <a name="l00014"></a>00014 `uvm_component_utils_begin(cl_syoscb_queue_std) <a name="l00015"></a>00015 `uvm_field_queue_object(items, UVM_DEFAULT) <a name="l00016"></a>00016 `uvm_component_utils_end <a name="l00017"></a>00017 <a name="l00018"></a>00018 <span class="comment">//-------------------------------------</span> <a name="l00019"></a>00019 <span class="comment">// Constructor</span> <a name="l00020"></a>00020 <span class="comment">//-------------------------------------</span> <a name="l00021"></a>00021 extern function new(string name, uvm_component parent); <a name="l00022"></a>00022 <a name="l00023"></a>00023 <span class="comment">//-------------------------------------</span> <a name="l00024"></a>00024 <span class="comment">// Queue API</span> <a name="l00025"></a>00025 <span class="comment">//-------------------------------------</span> <a name="l00026"></a>00026 <span class="comment">// Basic queue functions</span> <a name="l00027"></a>00027 extern <span class="keyword">virtual</span> function bit <a class="code" href="classcl__syoscb__queue__std.html#a68f61e7f53901acb3cc50a9001193c0f" title="Queue API: See cl_syoscb_queue for more details">add_item</a>(string producer, uvm_sequence_item item); <a name="l00028"></a>00028 extern <span class="keyword">virtual</span> function bit <a class="code" href="classcl__syoscb__queue__std.html#a9cae04fa7b9a40a5554ef24bfaac851b" title="Queue API: See cl_syoscb_queue for more details">delete_item</a>(int unsigned idx); <a name="l00029"></a>00029 extern <span class="keyword">virtual</span> function <a class="code" href="classcl__syoscb__item.html" title="The UVM scoreboard item.">cl_syoscb_item</a> <a class="code" href="classcl__syoscb__queue__std.html#a42efb916d933e56e9865919504054499" title="Queue API: See cl_syoscb_queue for more details">get_item</a>(int unsigned idx); <a name="l00030"></a>00030 extern <span class="keyword">virtual</span> function int unsigned <a class="code" href="classcl__syoscb__queue__std.html#ac91a26574353c8c24789a993d3ffc12d" title="Queue API: See cl_syoscb_queue for more details">get_size</a>(); <a name="l00031"></a>00031 extern <span class="keyword">virtual</span> function bit <a class="code" href="classcl__syoscb__queue__std.html#a812d7f4d7143c9bef1f3181e24347d5c" title="Queue API: See cl_syoscb_queue for more details">empty</a>(); <a name="l00032"></a>00032 extern <span class="keyword">virtual</span> function bit <a class="code" href="classcl__syoscb__queue__std.html#ad293b78071120f596e3884980e36a9fa" title="Queue API: See cl_syoscb_queue for more details">insert_item</a>(string producer, uvm_sequence_item item, int unsigned idx); <a name="l00033"></a>00033 <a name="l00034"></a>00034 <span class="comment">// Iterator support functions</span> <a name="l00035"></a>00035 extern <span class="keyword">virtual</span> function <a class="code" href="classcl__syoscb__queue__iterator__base.html" title="Queue iterator base class defining the iterator API used for iterating queues.">cl_syoscb_queue_iterator_base</a> <a class="code" href="classcl__syoscb__queue__std.html#a84149180e88153757ac3df08fe6dd3ce" title="Queue API: See cl_syoscb_queue for more details">create_iterator</a>(); <a name="l00036"></a>00036 extern <span class="keyword">virtual</span> function bit <a class="code" href="classcl__syoscb__queue__std.html#ada80798fcd391e309e0e85f68cda98e1" title="Queue API: See cl_syoscb_queue for more details">delete_iterator</a>(cl_syoscb_queue_iterator_base iterator); <a name="l00037"></a>00037 endclass: <a class="code" href="classcl__syoscb__queue__std.html" title="Standard implementation of a queue.">cl_syoscb_queue_std</a> <a name="l00038"></a>00038 <a name="l00039"></a>00039 function <a class="code" href="classcl__syoscb__queue__std.html" title="Standard implementation of a queue.">cl_syoscb_queue_std</a>::new(string name, uvm_component parent); <a name="l00040"></a>00040 super.new(name, parent); <a name="l00041"></a>00041 endfunction: new <a name="l00042"></a>00042 <span class="comment"></span> <a name="l00043"></a>00043 <span class="comment">/// <b>Queue API:</b> See cl_syoscb_queue for more details</span> <a name="l00044"></a><a class="code" href="classcl__syoscb__queue__std.html#a68f61e7f53901acb3cc50a9001193c0f">00044</a> <span class="comment"></span>function bit <a class="code" href="classcl__syoscb__queue__std.html" title="Standard implementation of a queue.">cl_syoscb_queue_std</a>::<a class="code" href="classcl__syoscb__queue__std.html#a68f61e7f53901acb3cc50a9001193c0f" title="Queue API: See cl_syoscb_queue for more details">add_item</a>(string producer, uvm_sequence_item item); <a name="l00045"></a>00045 <a class="code" href="classcl__syoscb__item.html" title="The UVM scoreboard item.">cl_syoscb_item</a> new_item; <a name="l00046"></a>00046 <a name="l00047"></a>00047 <span class="comment">// Check that the max_queue_size for this queue is not reached</span> <a name="l00048"></a>00048 if(this.cfg.get_max_queue_size(this.get_name())>0 && <a name="l00049"></a>00049 this.<a class="code" href="classcl__syoscb__queue__std.html#ac91a26574353c8c24789a993d3ffc12d" title="Queue API: See cl_syoscb_queue for more details">get_size</a>()==this.<a class="code" href="classcl__syoscb__queue.html#ab92efb1fb67ec7cc8dfe928a474a3e2b" title="Handle to the configuration.">cfg</a>.get_max_queue_size(this.get_name())) begin <a name="l00050"></a>00050 `uvm_error("QUEUE_ERROR", $sformatf("[%s]: Maximum number of items (%0d) for queue: %s reached", <a name="l00051"></a>00051 this.cfg.get_scb_name(), <a name="l00052"></a>00052 this.cfg.get_max_queue_size(this.get_name()), <a name="l00053"></a>00053 this.get_name())) <a name="l00054"></a>00054 return(1'b0); <a name="l00055"></a>00055 end <a name="l00056"></a>00056 <a name="l00057"></a>00057 <span class="comment">// Create the new scoreboard item with META data which wraps the</span> <a name="l00058"></a>00058 <span class="comment">// uvm_sequence_item</span> <a name="l00059"></a>00059 <span class="comment">//</span> <a name="l00060"></a>00060 <span class="comment">// *NOTE*: No need for using create.</span> <a name="l00061"></a>00061 <span class="comment">// New is okay since no customization is needed here</span> <a name="l00062"></a>00062 <span class="comment">//</span> <a name="l00063"></a>00063 <span class="comment">// *NOTE*: Create it once with a default name to be able to retrieve the unique</span> <a name="l00064"></a>00064 <span class="comment">// instance id and then rename the object with a uniqueue name</span> <a name="l00065"></a>00065 new_item = new(.name("default-item")); <a name="l00066"></a>00066 new_item.set_name({producer,"-item-", $psprintf("%0d", new_item.get_inst_id())}); <a name="l00067"></a>00067 <a name="l00068"></a>00068 <span class="comment">// Transfer the producer to the item</span> <a name="l00069"></a>00069 <span class="comment">// *NOTE*: No need to check the producer since this is checked by the parent component</span> <a name="l00070"></a>00070 new_item.set_producer(.producer(producer)); <a name="l00071"></a>00071 <a name="l00072"></a>00072 <span class="comment">// Transfer the UVM sequence item to the item</span> <a name="l00073"></a>00073 <span class="comment">// *NOTE*: No need to copy it since it has been copied by the parent</span> <a name="l00074"></a>00074 new_item.set_item(.item(item)); <a name="l00075"></a>00075 <a name="l00076"></a>00076 <span class="comment">// Insert the item in the queue</span> <a name="l00077"></a>00077 this.items.push_back(new_item); <a name="l00078"></a>00078 <a name="l00079"></a>00079 <span class="comment">// Count the number of inserts</span> <a name="l00080"></a>00080 this.cnt_add_item++; <a name="l00081"></a>00081 <a name="l00082"></a>00082 <span class="comment">// Signal that it worked</span> <a name="l00083"></a>00083 return 1; <a name="l00084"></a>00084 endfunction: <a class="code" href="classcl__syoscb__queue__std.html#a68f61e7f53901acb3cc50a9001193c0f" title="Queue API: See cl_syoscb_queue for more details">add_item</a> <a name="l00085"></a>00085 <span class="comment"></span> <a name="l00086"></a>00086 <span class="comment">/// <b>Queue API:</b> See cl_syoscb_queue for more details</span> <a name="l00087"></a><a class="code" href="classcl__syoscb__queue__std.html#a9cae04fa7b9a40a5554ef24bfaac851b">00087</a> <span class="comment"></span>function bit <a class="code" href="classcl__syoscb__queue__std.html" title="Standard implementation of a queue.">cl_syoscb_queue_std</a>::<a class="code" href="classcl__syoscb__queue__std.html#a9cae04fa7b9a40a5554ef24bfaac851b" title="Queue API: See cl_syoscb_queue for more details">delete_item</a>(int unsigned idx); <a name="l00088"></a>00088 if(idx < this.items.size()) begin <a name="l00089"></a>00089 cl_syoscb_queue_iterator_base iter[$]; <a name="l00090"></a>00090 <a name="l00091"></a>00091 <span class="comment">// Wait to get exclusive access to the queue</span> <a name="l00092"></a>00092 <span class="comment">// if there are multiple iterators</span> <a name="l00093"></a>00093 while(!this.iter_sem.try_get()); <a name="l00094"></a>00094 items.delete(idx); <a name="l00095"></a>00095 <a name="l00096"></a>00096 <span class="comment">// Update iterators</span> <a name="l00097"></a>00097 iter = this.iterators.find(x) with (x.get_idx() < idx); <a name="l00098"></a>00098 for(int i = 0; i < iter.size(); i++) begin <a name="l00099"></a>00099 void'(iter[i].previous()); <a name="l00100"></a>00100 end <a name="l00101"></a>00101 <a name="l00102"></a>00102 this.iter_sem.put(); <a name="l00103"></a>00103 return 1; <a name="l00104"></a>00104 end else begin <a name="l00105"></a>00105 `uvm_info("OUT_OF_BOUNDS", $sformatf("[%s]: Idx: %0d is not present in queue: %0s", this.cfg.get_scb_name(), idx, this.get_name()), UVM_DEBUG); <a name="l00106"></a>00106 return 0; <a name="l00107"></a>00107 end <a name="l00108"></a>00108 endfunction: delete_item <a name="l00109"></a>00109 <span class="comment"></span> <a name="l00110"></a>00110 <span class="comment">/// <b>Queue API:</b> See cl_syoscb_queue for more details</span> <a name="l00111"></a><a class="code" href="classcl__syoscb__queue__std.html#a42efb916d933e56e9865919504054499">00111</a> <span class="comment"></span>function cl_syoscb_item cl_syoscb_queue_std::get_item(int unsigned idx); <a name="l00112"></a>00112 if(idx < this.items.size()) begin <a name="l00113"></a>00113 return items[idx]; <a name="l00114"></a>00114 end else begin <a name="l00115"></a>00115 `uvm_info("OUT_OF_BOUNDS", $sformatf("[%s]: Idx: %0d is not present in queue: %0s", this.cfg.get_scb_name(), idx, this.get_name()), UVM_DEBUG); <a name="l00116"></a>00116 return null; <a name="l00117"></a>00117 end <a name="l00118"></a>00118 endfunction: get_item <a name="l00119"></a>00119 <span class="comment"></span> <a name="l00120"></a>00120 <span class="comment">/// <b>Queue API:</b> See cl_syoscb_queue for more details</span> <a name="l00121"></a><a class="code" href="classcl__syoscb__queue__std.html#ac91a26574353c8c24789a993d3ffc12d">00121</a> <span class="comment"></span>function int unsigned cl_syoscb_queue_std::get_size(); <a name="l00122"></a>00122 return this.items.size(); <a name="l00123"></a>00123 endfunction: get_size <a name="l00124"></a>00124 <span class="comment"></span> <a name="l00125"></a>00125 <span class="comment">/// <b>Queue API:</b> See cl_syoscb_queue for more details</span> <a name="l00126"></a><a class="code" href="classcl__syoscb__queue__std.html#a812d7f4d7143c9bef1f3181e24347d5c">00126</a> <span class="comment"></span>function bit cl_syoscb_queue_std::empty(); <a name="l00127"></a>00127 return(this.get_size()!=0 ? 0 : 1); <a name="l00128"></a>00128 endfunction <a name="l00129"></a>00129 <span class="comment"></span> <a name="l00130"></a>00130 <span class="comment">/// <b>Queue API:</b> See cl_syoscb_queue for more details</span> <a name="l00131"></a><a class="code" href="classcl__syoscb__queue__std.html#ad293b78071120f596e3884980e36a9fa">00131</a> <span class="comment"></span>function bit cl_syoscb_queue_std::insert_item(string producer, uvm_sequence_item item, int unsigned idx); <a name="l00132"></a>00132 cl_syoscb_item new_item; <a name="l00133"></a>00133 <a name="l00134"></a>00134 <span class="comment">// Create the new scoreboard item with META data which wraps the</span> <a name="l00135"></a>00135 <span class="comment">// uvm_sequence_item</span> <a name="l00136"></a>00136 <span class="comment">//</span> <a name="l00137"></a>00137 <span class="comment">// *NOTE*: No need for using create.</span> <a name="l00138"></a>00138 <span class="comment">// New is okay since no customization is needed here</span> <a name="l00139"></a>00139 <span class="comment">//</span> <a name="l00140"></a>00140 <span class="comment">// *NOTE*: Create it once with a default name to be able to retrieve the unique</span> <a name="l00141"></a>00141 <span class="comment">// instance id and then rename the object with a uniqueue name</span> <a name="l00142"></a>00142 new_item = new(.name("default-item")); <a name="l00143"></a>00143 new_item.set_name({producer,"-item-", $psprintf("%0d", new_item.get_inst_id())}); <a name="l00144"></a>00144 <a name="l00145"></a>00145 <span class="comment">// Transfer the producer to the item</span> <a name="l00146"></a>00146 <span class="comment">// *NOTE*: No need to check the producer since this is checked by the parent component</span> <a name="l00147"></a>00147 new_item.set_producer(.producer(producer)); <a name="l00148"></a>00148 <a name="l00149"></a>00149 <span class="comment">// Transfer the UVM sequence item to the item</span> <a name="l00150"></a>00150 <span class="comment">// *NOTE*: No need to copy it since it has been copied by the parent</span> <a name="l00151"></a>00151 new_item.set_item(.item(item)); <a name="l00152"></a>00152 <a name="l00153"></a>00153 if(idx < this.items.size()) begin <a name="l00154"></a>00154 cl_syoscb_queue_iterator_base iter[$]; <a name="l00155"></a>00155 <a name="l00156"></a>00156 <span class="comment">// Wait to get exclusive access to the queue</span> <a name="l00157"></a>00157 <span class="comment">// if there are multiple iterators</span> <a name="l00158"></a>00158 while(!this.iter_sem.try_get()); <a name="l00159"></a>00159 this.items.insert(idx, new_item); <a name="l00160"></a>00160 <a name="l00161"></a>00161 <span class="comment">// Update iterators</span> <a name="l00162"></a>00162 iter = this.iterators.find(x) with (x.get_idx() >= idx); <a name="l00163"></a>00163 for(int i = 0; i < iter.size(); i++) begin <a name="l00164"></a>00164 <span class="comment">// Call .next() blindly. This can never fail by design, since</span> <a name="l00165"></a>00165 <span class="comment">// if it was point at the last element then it points to the second last</span> <a name="l00166"></a>00166 <span class="comment">// element prior to the .next(). The .next() call will then just</span> <a name="l00167"></a>00167 <span class="comment">// set the iterator to the correct index again after the insertion</span> <a name="l00168"></a>00168 void'(iter[i].next()); <a name="l00169"></a>00169 end <a name="l00170"></a>00170 <a name="l00171"></a>00171 this.iter_sem.put(); <a name="l00172"></a>00172 return 1; <a name="l00173"></a>00173 end else if(idx == this.items.size()) begin <a name="l00174"></a>00174 this.items.push_back(new_item); <a name="l00175"></a>00175 return 1; <a name="l00176"></a>00176 end else begin <a name="l00177"></a>00177 `uvm_info("OUT_OF_BOUNDS", $sformatf("[%s]: Idx: %0d too large for queue %0s", this.cfg.get_scb_name(), idx, this.get_name()), UVM_DEBUG); <a name="l00178"></a>00178 return 0; <a name="l00179"></a>00179 end <a name="l00180"></a>00180 endfunction: insert_item <a name="l00181"></a>00181 <a name="l00182"></a>00182 <span class="comment"></span> <a name="l00183"></a>00183 <span class="comment">/// <b>Queue API:</b> See cl_syoscb_queue for more details</span> <a name="l00184"></a><a class="code" href="classcl__syoscb__queue__std.html#a84149180e88153757ac3df08fe6dd3ce">00184</a> <span class="comment"></span>function cl_syoscb_queue_iterator_base cl_syoscb_queue_std::create_iterator(); <a name="l00185"></a>00185 cl_syoscb_queue_iterator_std result; <a name="l00186"></a>00186 <a name="l00187"></a>00187 <span class="comment">// Wait to get exclusive access to the queue</span> <a name="l00188"></a>00188 <span class="comment">// if there are multiple iterators</span> <a name="l00189"></a>00189 while(this.iter_sem.try_get() == 0); <a name="l00190"></a>00190 <a name="l00191"></a>00191 result = cl_syoscb_queue_iterator_std::type_id::create( <a name="l00192"></a>00192 $sformatf("%s_iter%0d", this.get_name(), this.iter_idx)); <a name="l00193"></a>00193 <a name="l00194"></a>00194 <span class="comment">// No need to check return value since set_queue will issue</span> <a name="l00195"></a>00195 <span class="comment">// and `uvm_error of something goes wrong</span> <a name="l00196"></a>00196 void'(result.set_queue(this)); <a name="l00197"></a>00197 <a name="l00198"></a>00198 this.iterators[result] = result; <a name="l00199"></a>00199 this.iter_idx++; <a name="l00200"></a>00200 this.iter_sem.put(); <a name="l00201"></a>00201 <a name="l00202"></a>00202 return result; <a name="l00203"></a>00203 endfunction: create_iterator <a name="l00204"></a>00204 <span class="comment"></span> <a name="l00205"></a>00205 <span class="comment">/// <b>Queue API:</b> See cl_syoscb_queue for more details</span> <a name="l00206"></a><a class="code" href="classcl__syoscb__queue__std.html#ada80798fcd391e309e0e85f68cda98e1">00206</a> <span class="comment"></span>function bit cl_syoscb_queue_std::delete_iterator(cl_syoscb_queue_iterator_base iterator); <a name="l00207"></a>00207 if(iterator == null) begin <a name="l00208"></a>00208 `uvm_info("NULL", $sformatf("[%s]: Asked to delete null iterator from list of iterators in %s", <a name="l00209"></a>00209 this.cfg.get_scb_name(), this.get_name()), UVM_DEBUG); <a name="l00210"></a>00210 return 0; <a name="l00211"></a>00211 end else begin <a name="l00212"></a>00212 <span class="comment">// Wait to get exclusive access to the queue</span> <a name="l00213"></a>00213 <span class="comment">// if there are multiple iterators</span> <a name="l00214"></a>00214 while(!this.iter_sem.try_get()); <a name="l00215"></a>00215 <a name="l00216"></a>00216 this.iterators.delete(iterator); <a name="l00217"></a>00217 this.iter_idx--; <a name="l00218"></a>00218 this.iter_sem.put(); <a name="l00219"></a>00219 return 1; <a name="l00220"></a>00220 end <a name="l00221"></a>00221 endfunction: delete_iterator </pre></div></div> <!--- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> <a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> <iframe src="" frameborder="0" name="MSearchResults" id="MSearchResults"> </iframe> </div> <!--*************************************************************************--> <!-- $Id: idv_dox_footer.html 136 2010-05-31 19:13:27Z seanoboyle $ --> <!--*************************************************************************--> <!-- This program is free software: you can redistribute it and/or modify --> <!-- it under the terms of the GNU General Public License as published by --> <!-- the Free Software Foundation, either version 3 of the License, or --> <!-- (at your option) any later version. --> <!-- --> <!-- This program is distributed in the hope that it will be useful, --> <!-- but WITHOUT ANY WARRANTY; without even the implied warranty of --> <!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --> <!-- GNU General Public License for more details. --> <!-- --> <!-- You should have received a copy of the GNU General Public License --> <!-- along with this program. If not, see http://www.gnu.org/licenses/. --> <!-- --> <!--*************************************************************************--> <!-- Title: IDV Doxygen Footer File --> <!-- Description: This file is a doxygen footer with the IDV logo and a --> <!-- and a reference to the GNU FDL License. --> <!-- --> <!-- Original Author: Sean O'Boyle --> <!-- Contact: seanoboyle@intelligentdv.com --> <!-- Company: Intelligent Design Verification --> <!-- Company URL: http://intelligentdv.com --> <!-- --> <!-- Download the most recent version here: --> <!-- http://intelligentdv.com/downloads --> <!-- --> <!-- File Bugs Here: http://bugs.intelligentdv.com --> <!-- Project: DoxygenFilterSV --> <!-- --> <!-- File: idv_dox_header.xml --> <!-- $LastChangedBy: seanoboyle $ --> <!-- $LastChangedDate: 2010-05-31 12:13:27 -0700 (Mon, 31 May 2010) $ --> <!-- $LastChangedRevision: 136 $ --> <!-- --> <!--*************************************************************************--> <br> <table border="1" width = "100%"> <tr> <td width = "20%"> <img src="syosil.jpg"> </td> <td width = "60%"> <address style="text-align: center;"> Project: SyoSil ApS UVM Scoreboard, Revision: 1.0.2.5<br> <br> Copyright 2014-2015 SyoSil ApS<br> All Rights Reserved Worldwide<br> <br> Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at<br> <br> <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a><br> <br> Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. </address> </td> <td width = "20%"> <address style="text-align: right;"><small> <a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a><br> <a href="http://www.doxygen.org/index.html">Doxygen</a> Version: 1.6.1<br> <a href="http://www.intelligentdv.com/index.html">IDV SV Filter</a> Version: 2.6.2<br> Sat Nov 28 05:41:54 2015</small></address> </td> </tr> </table> <address style="text-align: left;"><small> Find a documentation bug? Report bugs to: <a href="http://bugs.intelligentdv.com/">bugs.intelligentdv.com</a> Project: DoxygenFilterSV </small></address> </body> </html>