OpenCores
URL https://opencores.org/ocsvn/lpffir/lpffir/trunk

Subversion Repositories lpffir

[/] [lpffir/] [trunk/] [uvm/] [tools/] [uvm_syoscb/] [docs/] [html/] [cl__syoscb__compare__iop_8svh_source.html] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 vladimirar
<!-- This comment will put IE 6, 7 and 8 in quirks mode -->
2
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
<html xmlns="http://www.w3.org/1999/xhtml">
4
<head>
5
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
6
<title>SyoSil ApS UVM Scoreboard: cl_syoscb_compare_iop.svh Source File</title>
7
<link href="tabs.css" rel="stylesheet" type="text/css"/>
8
<link href="search/search.css" rel="stylesheet" type="text/css"/>
9
<script type="text/javaScript" src="search/search.js"></script>
10
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
11
</head>
12
<body onload='searchBox.OnSelectItem(0);'>
13
<!-- Generated by Doxygen 1.6.1 -->
14
<script type="text/javascript"><!--
15
var searchBox = new SearchBox("searchBox", "search",false,'Search');
16
--></script>
17
<script type="text/javascript">
18
<!--
19
function changeDisplayState (e){
20
  var num=this.id.replace(/[^[0-9]/g,'');
21
  var button=this.firstChild;
22
  var sectionDiv=document.getElementById('dynsection'+num);
23
  if (sectionDiv.style.display=='none'||sectionDiv.style.display==''){
24
    sectionDiv.style.display='block';
25
    button.src='open.gif';
26
  }else{
27
    sectionDiv.style.display='none';
28
    button.src='closed.gif';
29
  }
30
}
31
function initDynSections(){
32
  var divs=document.getElementsByTagName('div');
33
  var sectionCounter=1;
34
  for(var i=0;i<divs.length-1;i++){
35
    if(divs[i].className=='dynheader'&&divs[i+1].className=='dynsection'){
36
      var header=divs[i];
37
      var section=divs[i+1];
38
      var button=header.firstChild;
39
      if (button!='IMG'){
40
        divs[i].insertBefore(document.createTextNode(' '),divs[i].firstChild);
41
        button=document.createElement('img');
42
        divs[i].insertBefore(button,divs[i].firstChild);
43
      }
44
      header.style.cursor='pointer';
45
      header.onclick=changeDisplayState;
46
      header.id='dynheader'+sectionCounter;
47
      button.src='closed.gif';
48
      section.id='dynsection'+sectionCounter;
49
      section.style.display='none';
50
      section.style.marginLeft='14px';
51
      sectionCounter++;
52
    }
53
  }
54
}
55
window.onload = initDynSections;
56
-->
57
</script>
58
<div class="navigation" id="top">
59
  <div class="tabs">
60
    <ul>
61
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
62
      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
63
      <li><a href="annotated.html"><span>Classes</span></a></li>
64
      <li class="current"><a href="files.html"><span>Files</span></a></li>
65
      <li><a href="dirs.html"><span>Directories</span></a></li>
66
      <li>
67
        <div id="MSearchBox" class="MSearchBoxInactive">
68
        <img id="MSearchSelect" src="search/search.png"
69
             onmouseover="return searchBox.OnSearchSelectShow()"
70
             onmouseout="return searchBox.OnSearchSelectHide()"
71
             alt=""/>
72
        <input type="text" id="MSearchField" value="Search" accesskey="S"
73
             onfocus="searchBox.OnSearchFieldFocus(true)"
74
             onblur="searchBox.OnSearchFieldFocus(false)"
75
             onkeyup="searchBox.OnSearchFieldChange(event)"/>
76
        <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
77
        </div>
78
      </li>
79
    </ul>
80
  </div>
81
  <div class="tabs">
82
    <ul>
83
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
84
    </ul>
85
  </div>
86
  <div class="navpath"><a class="el" href="dir_562324e130495ce1321e3e3f14c8d761.html">src</a>
87
  </div>
88
</div>
89
<div class="contents">
90
<h1>cl_syoscb_compare_iop.svh</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// Class which implements the in order by producer compare algorithm</span>
91
<a name="l00002"></a>00002 <span class="keyword">class </span>cl_syoscb_compare_iop <span class="keyword">extends</span> <a class="code" href="classcl__syoscb__compare__base.html" title="Base class for all comapre algorithms.">cl_syoscb_compare_base</a>;
92
<a name="l00003"></a>00003   <span class="comment">//-------------------------------------</span>
93
<a name="l00004"></a>00004   <span class="comment">// UVM Macros</span>
94
<a name="l00005"></a>00005   <span class="comment">//-------------------------------------</span>
95
<a name="l00006"></a>00006   `uvm_object_utils(cl_syoscb_compare_iop)
96
<a name="l00007"></a>00007
97
<a name="l00008"></a>00008   <span class="comment">//-------------------------------------</span>
98
<a name="l00009"></a>00009   <span class="comment">// Constructor</span>
99
<a name="l00010"></a>00010   <span class="comment">//-------------------------------------</span>
100
<a name="l00011"></a>00011   extern function new(string name = &quot;cl_syoscb_compare_iop&quot;);
101
<a name="l00012"></a>00012
102
<a name="l00013"></a>00013   <span class="comment">//-------------------------------------</span>
103
<a name="l00014"></a>00014   <span class="comment">// Compare API</span>
104
<a name="l00015"></a>00015   <span class="comment">//-------------------------------------</span>
105
<a name="l00016"></a>00016   extern <span class="keyword">virtual</span> function void compare();
106
<a name="l00017"></a>00017   extern function void compare_do();
107
<a name="l00018"></a>00018 endclass: cl_syoscb_compare_iop
108
<a name="l00019"></a>00019
109
<a name="l00020"></a>00020 function cl_syoscb_compare_iop::new(string name = &quot;cl_syoscb_compare_iop&quot;);
110
<a name="l00021"></a>00021   super.new(name);
111
<a name="l00022"></a>00022 endfunction: new
112
<a name="l00023"></a>00023 <span class="comment"></span>
113
<a name="l00024"></a>00024 <span class="comment">/// &lt;b&gt;Compare API&lt;/b&gt;: Mandatory overwriting of the base class&apos; compare method.</span>
114
<a name="l00025"></a>00025 <span class="comment">/// Currently, this just calls do_copy() blindly </span>
115
<a name="l00026"></a>00026 <span class="comment"></span>function void cl_syoscb_compare_iop::compare();
116
<a name="l00027"></a>00027   <span class="comment">// Here any state variables should be queried</span>
117
<a name="l00028"></a>00028   <span class="comment">// to compute if the compare should be done or not</span>
118
<a name="l00029"></a>00029   this.compare_do();
119
<a name="l00030"></a>00030 endfunction: compare
120
<a name="l00031"></a>00031 <span class="comment"></span>
121
<a name="l00032"></a>00032 <span class="comment">/// &lt;b&gt;Compare API&lt;/b&gt;: Mandatory overwriting of the base class&apos; do_compare method.</span>
122
<a name="l00033"></a>00033 <span class="comment">/// Here the actual out of order compare is implemented.</span>
123
<a name="l00034"></a>00034 <span class="comment">///</span>
124
<a name="l00035"></a>00035 <span class="comment">/// The algorithm gets the primary queue and then loops over all other queues to see if</span>
125
<a name="l00036"></a>00036 <span class="comment">/// it can find the primary item as the first item of the same producer in all of the other queues.</span>
126
<a name="l00037"></a>00037 <span class="comment">/// If so then the items are removed from all queues. If not then nothing is done. Thus, if some items are not</span>
127
<a name="l00038"></a>00038 <span class="comment">/// matched then the result is that the queue will be non-empty at the end of simulation.</span>
128
<a name="l00039"></a>00039 <span class="comment">/// This will then be caught by the check_phase.</span>
129
<a name="l00040"></a>00040 <span class="comment"></span>function void cl_syoscb_compare_iop::compare_do();
130
<a name="l00041"></a>00041   string primary_queue_name;
131
<a name="l00042"></a>00042   <a class="code" href="classcl__syoscb__queue.html" title="Class which base concet of a queue.">cl_syoscb_queue</a> primary_queue;
132
<a name="l00043"></a>00043   <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> primary_queue_iter;
133
<a name="l00044"></a>00044   string queue_names[];
134
<a name="l00045"></a>00045   int unsigned secondary_item_found[string];
135
<a name="l00046"></a>00046   bit compare_continue = 1&apos;b1;
136
<a name="l00047"></a>00047   bit compare_result = 1&apos;b0;
137
<a name="l00048"></a>00048   <a class="code" href="classcl__syoscb__item.html" title="The UVM scoreboard item.">cl_syoscb_item</a> primary_item;
138
<a name="l00049"></a>00049
139
<a name="l00050"></a>00050   <span class="comment">// Initialize state variables</span>
140
<a name="l00051"></a>00051   primary_queue_name = this.get_primary_queue_name();
141
<a name="l00052"></a>00052   this.cfg.get_queues(queue_names);
142
<a name="l00053"></a>00053
143
<a name="l00054"></a>00054   primary_queue = this.cfg.get_queue(primary_queue_name);
144
<a name="l00055"></a>00055   if(primary_queue == null) begin
145
<a name="l00056"></a>00056     `uvm_fatal(&quot;QUEUE_ERROR&quot;, $sformatf(&quot;[%s]: cmp-iop: Unable to retrieve primary queue handle&quot;, this.cfg.get_scb_name()));
146
<a name="l00057"></a>00057   end
147
<a name="l00058"></a>00058
148
<a name="l00059"></a>00059   primary_queue_iter = primary_queue.create_iterator();
149
<a name="l00060"></a>00060
150
<a name="l00061"></a>00061   `uvm_info(&quot;DEBUG&quot;, $sformatf(&quot;[%s]: cmp-iop: primary queue: %s&quot;, this.cfg.get_scb_name(), primary_queue_name), UVM_FULL);
151
<a name="l00062"></a>00062   `uvm_info(&quot;DEBUG&quot;, $sformatf(&quot;[%s]: cmp-iop: number of queues: %0d&quot;, this.cfg.get_scb_name(), queue_names.size()), UVM_FULL);
152
<a name="l00063"></a>00063
153
<a name="l00064"></a>00064   <span class="comment">// Outer loop loops through all</span>
154
<a name="l00065"></a>00065   while (!primary_queue_iter.is_done()) begin
155
<a name="l00066"></a>00066     primary_item = primary_queue_iter.get_item();
156
<a name="l00067"></a>00067
157
<a name="l00068"></a>00068     `uvm_info(&quot;DEBUG&quot;, $sformatf(&quot;[%s]: cmp-iop: Now comparing primary transaction:\n%s&quot;, this.cfg.get_scb_name(), primary_item.sprint()), UVM_FULL);
158
<a name="l00069"></a>00069
159
<a name="l00070"></a>00070     <span class="comment">// Clear list of found slave items before starting new inner loop</span>
160
<a name="l00071"></a>00071     secondary_item_found.delete();
161
<a name="l00072"></a>00072
162
<a name="l00073"></a>00073     <span class="comment">// Inner loop through all queues</span>
163
<a name="l00074"></a>00074     foreach(queue_names[i]) begin
164
<a name="l00075"></a>00075       `uvm_info(&quot;DEBUG&quot;, $sformatf(&quot;[%s]: cmp-iop: Looking at queue: %s&quot;, this.cfg.get_scb_name(), queue_names[i]), UVM_FULL);
165
<a name="l00076"></a>00076
166
<a name="l00077"></a>00077       if(queue_names[i] != primary_queue_name) begin
167
<a name="l00078"></a>00078         <a class="code" href="classcl__syoscb__queue.html" title="Class which base concet of a queue.">cl_syoscb_queue</a> secondary_queue;
168
<a name="l00079"></a>00079         <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> secondary_queue_iter;
169
<a name="l00080"></a>00080
170
<a name="l00081"></a>00081         `uvm_info(&quot;DEBUG&quot;, $sformatf(&quot;[%s]: cmp-iop: %s is a secondary queue - now comparing&quot;, this.cfg.get_scb_name(), queue_names[i]), UVM_FULL);
171
<a name="l00082"></a>00082
172
<a name="l00083"></a>00083         <span class="comment">// Get the secondary queue</span>
173
<a name="l00084"></a>00084         secondary_queue = this.cfg.get_queue(queue_names[i]);
174
<a name="l00085"></a>00085
175
<a name="l00086"></a>00086         if(secondary_queue == null) begin
176
<a name="l00087"></a>00087           `uvm_fatal(&quot;QUEUE_ERROR&quot;, $sformatf(&quot;[%s]: cmp-iop: Unable to retrieve secondary queue handle&quot;, this.cfg.get_scb_name()));
177
<a name="l00088"></a>00088         end
178
<a name="l00089"></a>00089
179
<a name="l00090"></a>00090         `uvm_info(&quot;DEBUG&quot;, $sformatf(&quot;[%s]: cmp-iop: %0d items in queue: %s&quot;, this.cfg.get_scb_name(), secondary_queue.get_size(), queue_names[i]), UVM_FULL);
180
<a name="l00091"></a>00091
181
<a name="l00092"></a>00092         <span class="comment">// Only trigger the compare if there are elements in the queue</span>
182
<a name="l00093"></a>00093         if(secondary_queue.get_size()&gt;0) begin
183
<a name="l00094"></a>00094           <span class="comment">// Get an iterator for the secondary queue</span>
184
<a name="l00095"></a>00095           secondary_queue_iter = secondary_queue.create_iterator();
185
<a name="l00096"></a>00096
186
<a name="l00097"></a>00097           <span class="comment">// Only the first match is removed</span>
187
<a name="l00098"></a>00098           while(!secondary_queue_iter.is_done()) begin
188
<a name="l00099"></a>00099             <span class="comment">// Get the item from the secondary queue</span>
189
<a name="l00100"></a>00100             <a class="code" href="classcl__syoscb__item.html" title="The UVM scoreboard item.">cl_syoscb_item</a> sih = secondary_queue_iter.get_item();
190
<a name="l00101"></a>00101
191
<a name="l00102"></a>00102             <span class="comment">// Only do the compare if the producers match</span>
192
<a name="l00103"></a>00103             if(primary_item.get_producer == sih.get_producer()) begin
193
<a name="l00104"></a>00104               if(sih.compare(primary_item) == 1&apos;b1) begin
194
<a name="l00105"></a>00105                 secondary_item_found[queue_names[i]] = secondary_queue_iter.get_idx();
195
<a name="l00106"></a>00106                 `uvm_info(&quot;DEBUG&quot;, $sformatf(&quot;[%s]: cmp-iop: Secondary item found at index: %0d:\n%s&quot;, this.cfg.get_scb_name(), secondary_queue_iter.get_idx(), sih.sprint()), UVM_FULL);
196
<a name="l00107"></a>00107                 break;
197
<a name="l00108"></a>00108                end else begin
198
<a name="l00109"></a>00109                 `uvm_error(&quot;COMPARE_ERROR&quot;, $sformatf(&quot;[%s]: cmp-iop: Item:\n%s\nfrom primary queue: %s not found in secondary queue: %s. Found this item in %s instead:\n%s&quot;,
199
<a name="l00110"></a>00110                                                       this.cfg.get_scb_name(), primary_item.sprint(), primary_queue_name, queue_names[i], queue_names[i], sih.sprint()))
200
<a name="l00111"></a>00111
201
<a name="l00112"></a>00112                 <span class="comment">// The first element was not a match =&gt; break since this is an in order compare on the producer  </span>
202
<a name="l00113"></a>00113                 break;
203
<a name="l00114"></a>00114               end
204
<a name="l00115"></a>00115             end
205
<a name="l00116"></a>00116
206
<a name="l00117"></a>00117             if(!secondary_queue_iter.next()) begin
207
<a name="l00118"></a>00118               `uvm_fatal(&quot;QUEUE_ERROR&quot;, $sformatf(&quot;[%s]: cmp-iop: Unable to get next element from iterator on secondary queue: %s&quot;, this.cfg.get_scb_name(), queue_names[i]));
208
<a name="l00119"></a>00119             end
209
<a name="l00120"></a>00120           end
210
<a name="l00121"></a>00121
211
<a name="l00122"></a>00122           if(!secondary_queue.delete_iterator(secondary_queue_iter)) begin
212
<a name="l00123"></a>00123             `uvm_fatal(&quot;QUEUE_ERROR&quot;, $sformatf(&quot;[%s]: cmp-iop: Unable to delete iterator from secondaery queue: %s&quot;, this.cfg.get_scb_name(), queue_names[i]));
213
<a name="l00124"></a>00124           end
214
<a name="l00125"></a>00125         end else begin
215
<a name="l00126"></a>00126           `uvm_info(&quot;DEBUG&quot;, $sformatf(&quot;[%s]: cmp-iop: %s is empty - skipping&quot;, this.cfg.get_scb_name(), queue_names[i]), UVM_FULL);
216
<a name="l00127"></a>00127         end
217
<a name="l00128"></a>00128       end else begin
218
<a name="l00129"></a>00129         `uvm_info(&quot;DEBUG&quot;, $sformatf(&quot;[%s]: cmp-iop: %s is the primary queue - skipping&quot;, this.cfg.get_scb_name(), queue_names[i]), UVM_FULL);
219
<a name="l00130"></a>00130       end
220
<a name="l00131"></a>00131     end
221
<a name="l00132"></a>00132
222
<a name="l00133"></a>00133     <span class="comment">// Only start to remove items if all slave items are found (One from each slave queue)</span>
223
<a name="l00134"></a>00134     if(secondary_item_found.size() == queue_names.size()-1) begin
224
<a name="l00135"></a>00135       string queue_name;
225
<a name="l00136"></a>00136       <a class="code" href="classcl__syoscb__item.html" title="The UVM scoreboard item.">cl_syoscb_item</a> pih;
226
<a name="l00137"></a>00137
227
<a name="l00138"></a>00138       <span class="comment">// Get the item from the primary queue</span>
228
<a name="l00139"></a>00139       pih = primary_queue_iter.get_item();
229
<a name="l00140"></a>00140
230
<a name="l00141"></a>00141       `uvm_info(&quot;DEBUG&quot;, $sformatf(&quot;[%s]: cmp-iop: Found match for primary queue item :\n%s&quot;, this.cfg.get_scb_name(), pih.sprint()), UVM_FULL);
231
<a name="l00142"></a>00142
232
<a name="l00143"></a>00143       <span class="comment">// Remove from primary</span>
233
<a name="l00144"></a>00144       if(!primary_queue.delete_item(primary_queue_iter.get_idx())) begin
234
<a name="l00145"></a>00145         `uvm_error(&quot;QUEUE_ERROR&quot;, $sformatf(&quot;[%s]: cmp-iop: Unable to delete item idx %0d from queue %s&quot;,
235
<a name="l00146"></a>00146                                             this.cfg.get_scb_name(), primary_queue_iter.get_idx(), primary_queue.get_name()));
236
<a name="l00147"></a>00147       end
237
<a name="l00148"></a>00148
238
<a name="l00149"></a>00149       <span class="comment">// Remove from all secondaries</span>
239
<a name="l00150"></a>00150       while(secondary_item_found.next(queue_name)) begin
240
<a name="l00151"></a>00151         <a class="code" href="classcl__syoscb__queue.html" title="Class which base concet of a queue.">cl_syoscb_queue</a> secondary_queue;
241
<a name="l00152"></a>00152
242
<a name="l00153"></a>00153         <span class="comment">// Get the secondary queue</span>
243
<a name="l00154"></a>00154         secondary_queue = this.cfg.get_queue(queue_name);
244
<a name="l00155"></a>00155
245
<a name="l00156"></a>00156         if(secondary_queue == null) begin
246
<a name="l00157"></a>00157           `uvm_fatal(&quot;QUEUE_ERROR&quot;, $sformatf(&quot;[%s]: cmp-iop: Unable to retrieve secondary queue handle&quot;, this.cfg.get_scb_name()));
247
<a name="l00158"></a>00158         end
248
<a name="l00159"></a>00159
249
<a name="l00160"></a>00160         if(!secondary_queue.delete_item(secondary_item_found[queue_name])) begin
250
<a name="l00161"></a>00161           `uvm_error(&quot;QUEUE_ERROR&quot;, $sformatf(&quot;[%s]: cmp-iop: Unable to delete item idx %0d from queue %s&quot;,
251
<a name="l00162"></a>00162                                               this.cfg.get_scb_name(), secondary_item_found[queue_name], secondary_queue.get_name()));
252
<a name="l00163"></a>00163         end
253
<a name="l00164"></a>00164       end
254
<a name="l00165"></a>00165     end
255
<a name="l00166"></a>00166
256
<a name="l00167"></a>00167     <span class="comment">// Call .next() blindly since we do not care about the</span>
257
<a name="l00168"></a>00168     <span class="comment">// return value, since we might be at the end of the queue.</span>
258
<a name="l00169"></a>00169     <span class="comment">// Thus, .next() will return 1&apos;b0 at the end of the queue</span>
259
<a name="l00170"></a>00170     void&apos;(primary_queue_iter.next());
260
<a name="l00171"></a>00171   end
261
<a name="l00172"></a>00172
262
<a name="l00173"></a>00173   if(!primary_queue.delete_iterator(primary_queue_iter)) begin
263
<a name="l00174"></a>00174     `uvm_fatal(&quot;QUEUE_ERROR&quot;, $sformatf(&quot;[%s]: cmp-iop: Unable to delete iterator from primary queue: %s&quot;, this.cfg.get_scb_name(), primary_queue_name));
264
<a name="l00175"></a>00175   end
265
<a name="l00176"></a>00176 endfunction: compare_do
266
</pre></div></div>
267
<!--- window showing the filter options -->
268
<div id="MSearchSelectWindow"
269
     onmouseover="return searchBox.OnSearchSelectShow()"
270
     onmouseout="return searchBox.OnSearchSelectHide()"
271
     onkeydown="return searchBox.OnSearchSelectKey(event)">
272
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&nbsp;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&nbsp;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&nbsp;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&nbsp;</span>Variables</a></div>
273
 
274
<!-- iframe showing the search results (closed by default) -->
275
<div id="MSearchResultsWindow">
276
<iframe src="" frameborder="0"
277
        name="MSearchResults" id="MSearchResults">
278
</iframe>
279
</div>
280
 
281
<!--*************************************************************************-->
282
<!-- $Id: idv_dox_footer.html 136 2010-05-31 19:13:27Z seanoboyle $          -->
283
<!--*************************************************************************-->
284
<!--   This program is free software: you can redistribute it and/or modify  -->
285
<!--   it under the terms of the GNU General Public License as published by  -->
286
<!--   the Free Software Foundation, either version 3 of the License, or     -->
287
<!--   (at your option) any later version.                                   -->
288
<!--                                                                         -->
289
<!--   This program is distributed in the hope that it will be useful,       -->
290
<!--   but WITHOUT ANY WARRANTY; without even the implied warranty of        -->
291
<!--   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         -->
292
<!--   GNU General Public License for more details.                          -->
293
<!--                                                                         -->
294
<!--   You should have received a copy of the GNU General Public License     -->
295
<!--   along with this program.  If not, see http://www.gnu.org/licenses/.   -->
296
<!--                                                                         -->
297
<!--*************************************************************************-->
298
<!-- Title:        IDV Doxygen Footer File                                   -->
299
<!-- Description:  This file is a doxygen footer with the IDV logo and a     -->
300
<!--               and a reference to the GNU FDL License.                   -->
301
<!--                                                                         -->
302
<!-- Original Author: Sean O'Boyle                                           -->
303
<!-- Contact:         seanoboyle@intelligentdv.com                           -->
304
<!-- Company:         Intelligent Design Verification                        -->
305
<!-- Company URL:     http://intelligentdv.com                               -->
306
<!--                                                                         -->
307
<!-- Download the most recent version here:                                  -->
308
<!--                  http://intelligentdv.com/downloads                     -->
309
<!--                                                                         -->
310
<!-- File Bugs Here:  http://bugs.intelligentdv.com                          -->
311
<!--        Project:  DoxygenFilterSV                                        -->
312
<!--                                                                         -->
313
<!-- File: idv_dox_header.xml                                                -->
314
<!-- $LastChangedBy: seanoboyle $                                            -->
315
<!-- $LastChangedDate: 2010-05-31 12:13:27 -0700 (Mon, 31 May 2010) $        -->
316
<!-- $LastChangedRevision: 136 $                                             -->
317
<!--                                                                         -->
318
<!--*************************************************************************-->
319
 
320
<br>
321
<table border="1" width = "100%">
322
  <tr>
323
    <td width = "20%">
324
     <img src="syosil.jpg">
325
    </td>
326
    <td width = "60%">
327
       <address style="text-align: center;">
328
       Project: SyoSil ApS UVM Scoreboard, Revision: 1.0.2.5<br>
329
       <br>
330
       Copyright 2014-2015 SyoSil ApS<br>
331
       All Rights Reserved Worldwide<br>
332
       <br>
333
      Licensed under the Apache License, Version 2.0 (the "License"); you may not
334
      use this file except in compliance with the License.  You may obtain a copy of
335
      the License at<br>
336
      <br>
337
       <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a><br>
338
      <br>
339
      Unless required by applicable law or agreed to in writing, software distributed under the License is
340
      distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
341
      implied. See the License for the specific language governing permissions and limitations under
342
      the License.
343
      </address>
344
    </td>
345
    <td width = "20%">
346
      <address style="text-align: right;"><small>
347
      <a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a><br>
348
      <a href="http://www.doxygen.org/index.html">Doxygen</a> Version: 1.6.1<br>
349
      <a href="http://www.intelligentdv.com/index.html">IDV SV Filter</a> Version: 2.6.2<br>
350
      Sat Nov 28 05:41:54 2015</small></address>
351
   </td>
352
  </tr>
353
</table>
354
<address style="text-align: left;"><small>
355
Find a documentation bug?  Report bugs to: <a href="http://bugs.intelligentdv.com/">bugs.intelligentdv.com</a> Project: DoxygenFilterSV
356
</small></address>
357
</body>
358
</html>

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.