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

Subversion Repositories lpffir

[/] [lpffir/] [trunk/] [uvm/] [tools/] [uvm_syoscb/] [docs/] [html/] [pIntegration.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: How to integrate the UVM scoreboard</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 class="current"><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
63
      <li><a href="annotated.html"><span>Classes</span></a></li>
64
      <li><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>
82
<div class="contents">
83
 
84
 
85
<h1><a class="anchor" id="pIntegration">How to integrate the UVM scoreboard </a></h1><p>The UVM scoreboard is easily integrated into your existing testbench environment.</p>
86
<h2><a class="anchor" id="sCompile">
87
Compiling the UVM scoreboard</a></h2>
88
<p>To get the UVM scoreboard compiled you need to add <b><a class="el" href="pk__syoscb_8sv_source.html">src/pk_syoscb.sv</a></b> to your list of files that are complied when compiling your testbench. How this is done is highly dependent on the verification environment since some environments compile everything into different libraries and some do not etc.</p>
89
<h2><a class="anchor" id="sAcccess">
90
Accessing the UVM scoreboard from your own code</a></h2>
91
<p>Once the UVM scoreboard is compiled with the verification environment then it is accessible either by explicit scoping:</p>
92
<div class="fragment"><pre class="fragment">   <span class="keyword">class </span>myclass;
93
     pk_syoscb::cl_syoscb my_new_scb;
94
     ...
95
</pre></div><p>or by importing the complete package into your scope:</p>
96
<div class="fragment"><pre class="fragment">   <span class="keyword">import</span> pk_syoscb::*;
97
 
98
   <span class="keyword">class </span>myclass;
99
     <a class="code" href="classcl__syoscb.html" title="Top level class implementing the root of the SyoSil UVM scoreboard.">cl_syoscb</a> my_new_scb;
100
     ...
101
</pre></div><h2><a class="anchor" id="sInstantiation">
102
Instantiating the UVM scoreboard</a></h2>
103
<p>The UVM scoreboard itself needs to be instantiated along with the configuration object. The simplest way to to this is to add the UVM scoreboard and the configuration object to the UVM environment - note that the configuration object is passed to the scoreboard via the config_db:</p>
104
<div class="fragment"><pre class="fragment">   <span class="keyword">import</span> pk_syoscb::*;
105
 
106
   <span class="keyword">class </span>cl_scbtest_env <span class="keyword">extends</span> uvm_env;
107
 
108
     <a class="code" href="classcl__syoscb.html" title="Top level class implementing the root of the SyoSil UVM scoreboard.">cl_syoscb</a>     syoscb;
109
     <a class="code" href="classcl__syoscb__cfg.html" title="Configuration class for the SyoSil UVM scoreboard.">cl_syoscb_cfg</a> syoscb_cfg;
110
 
111
     `uvm_component_utils_begin(cl_scbtest_env)
112
       `uvm_field_object(syoscb,     UVM_ALL_ON)
113
       `uvm_field_object(syoscb_cfg, UVM_ALL_ON)
114
     `uvm_component_utils_end
115
 
116
     ...
117
 
118
   endclass: cl_scbtest_env
119
 
120
   function void cl_scbtest_env::build_phase(uvm_phase phase);
121
     super.build_phase(phase);
122
 
123
     <span class="comment">// Create the scoreboard configuration object</span>
124
     this.syoscb_cfg = <a class="code" href="classcl__syoscb__cfg.html" title="Configuration class for the SyoSil UVM scoreboard.">cl_syoscb_cfg</a>::type_id::create(&quot;syoscb_cfg&quot;);
125
 
126
     <span class="comment">// Pass the scoreboard configuration object to the config_db</span>
127
     uvm_config_db #(cl_syoscb_cfg)::set(this, &quot;syoscb&quot;, &quot;cfg&quot;, this.syoscb_cfg);
128
 
129
     <span class="comment">// Create the scoreboard</span>
130
     this.syoscb = <a class="code" href="classcl__syoscb.html" title="Top level class implementing the root of the SyoSil UVM scoreboard.">cl_syoscb</a>::type_id::create(&quot;syoscb&quot;, this);
131
 
132
     ...
133
 
134
   endfunction: build_phase
135
</pre></div><h2><a class="anchor" id="sConfiguration">
136
Configuring the UVM scoreboard</a></h2>
137
<p>The UVM scoreboard configuration object needs to be configured after it has been created. The following example shows how two queues Q1 and Q2 wit Q1 as the primary queue. Furthermore, one producer P1 is added to both queues:</p>
138
<div class="fragment"><pre class="fragment">   function <span class="keywordtype">void</span> cl_scbtest_env::build_phase(uvm_phase phase);
139
     super.build_phase(phase);
140
 
141
     <span class="comment">// Create the scoreboard configuration object</span>
142
     this.syoscb_cfg = cl_syoscb_cfg::type_id::create(<span class="stringliteral">&quot;syoscb_cfg&quot;</span>);
143
 
144
     <span class="comment">// Configure the scoreboard</span>
145
     this.syoscb_cfg.set_queues({<span class="stringliteral">&quot;Q1&quot;</span>, <span class="stringliteral">&quot;Q2&quot;</span>});
146
     <span class="keywordtype">void</span><span class="stringliteral">&apos;(this.syoscb_cfg.set_primary_queue(&quot;Q1&quot;)); </span>
147
<span class="stringliteral">     void&apos;</span>(this.syoscb_cfg.set_producer(<span class="stringliteral">&quot;P1&quot;</span>, {<span class="stringliteral">&quot;Q1&quot;</span>, <span class="stringliteral">&quot;Q2&quot;</span>}));
148
 
149
     <span class="comment">// Pass the scoreboard configuration object to the config_db</span>
150
     uvm_config_db #(<a class="code" href="classcl__syoscb__cfg.html" title="Configuration class for the SyoSil UVM scoreboard.">cl_syoscb_cfg</a>)::<span class="keyword">set</span>(<span class="keyword">this</span>, <span class="stringliteral">&quot;syoscb&quot;</span>, <span class="stringliteral">&quot;cfg&quot;</span>, this.syoscb_cfg);
151
 
152
     <span class="comment">// Create the scoreboard</span>
153
     this.syoscb = cl_syoscb::type_id::create(<span class="stringliteral">&quot;syoscb&quot;</span>, <span class="keyword">this</span>);
154
 
155
     ...
156
 
157
   endfunction: build_phase
158
</pre></div><h2><a class="anchor" id="sFunctionAPIHookUp">
159
Function based API hook up</a></h2>
160
<p>The function based API is very easy to use once you have done the configuration and instantiation of the scoreboard as describe above.</p>
161
<p>Whenever you need to add an UVM sequence item to a queue produced by a specified producer then you simply invoke the <a class="el" href="classcl__syoscb.html#a26c59c91c6fdd22f29a411cba2d5ed8f" title="Method for adding a uvm_sequence_item to a given queue for a given producer.">cl_syoscb::add_item()</a> method:</p>
162
<div class="fragment"><pre class="fragment">   <span class="comment">// *NOTE*: Assumes syoscb is handle to an instance of the scoreboard and</span>
163
   <span class="comment">//         item1 is a handle to a UVM sequence item</span>
164
 
165
   ...
166
 
167
   <span class="comment">// Insert UVM sequence item for queue: Q1, for producer: P1</span>
168
   syoscb.add_item(<span class="stringliteral">&quot;Q1&quot;</span>, <span class="stringliteral">&quot;P1&quot;</span>, item1);
169
</pre></div><p>Invoking the <a class="el" href="classcl__syoscb.html#a26c59c91c6fdd22f29a411cba2d5ed8f" title="Method for adding a uvm_sequence_item to a given queue for a given producer.">cl_syoscb::add_item()</a> method will simply wrap the UVM sequence item in a <a class="el" href="classcl__syoscb__item.html" title="The UVM scoreboard item.">cl_syoscb_item</a> object, add it the correct queue and finally invoke the configured compare method.</p>
170
<p>The UVM environment will typically contain a handle to the scoreboard as described above. This can then be utilized if UVM sequences needs to be added from a test case:</p>
171
<div class="fragment"><pre class="fragment">   <span class="keyword">class </span>cl_scbtest_seq_item <span class="keyword">extends</span> uvm_sequence_item;
172
     <span class="comment">//-------------------------------------</span>
173
     <span class="comment">// Randomizable variables</span>
174
     <span class="comment">//-------------------------------------</span>
175
     rand int unsigned int_a;
176
 
177
     <span class="comment">//-------------------------------------</span>
178
     <span class="comment">// UVM Macros</span>
179
     <span class="comment">//-------------------------------------</span>
180
     `uvm_object_utils_begin(cl_scbtest_seq_item)
181
       `uvm_field_int(int_a, UVM_ALL_ON)
182
     `uvm_object_utils_end
183
 
184
     <span class="comment">//-------------------------------------</span>
185
     <span class="comment">// Constructor</span>
186
     <span class="comment">//-------------------------------------</span>
187
     function cl_scbtest_seq_item::new (string name = &quot;cl_scbtest_seq_item&quot;);
188
        super.new(name);
189
     endfunction
190
   endclass: cl_scbtest_seq_item
191
 
192
   class cl_scbtest_test extends uvm_test;
193
     <span class="comment">//-------------------------------------</span>
194
     <span class="comment">// Non randomizable variables</span>
195
     <span class="comment">//-------------------------------------</span>
196
     cl_scbtest_env scbtest_env;
197
 
198
     <span class="comment">//-------------------------------------</span>
199
     <span class="comment">// UVM Macros</span>
200
     <span class="comment">//-------------------------------------</span>
201
     `uvm_component_utils(cl_scbtest_test)
202
 
203
     <span class="comment">//-------------------------------------</span>
204
     <span class="comment">// Constructor</span>
205
     <span class="comment">//-------------------------------------</span>
206
     function new(string name = &quot;cl_scbtest_test&quot;, uvm_component parent = null);
207
       super.new(name, parent);
208
     endfunction: new
209
 
210
     <span class="comment">//-------------------------------------</span>
211
     <span class="comment">// UVM Phase methods</span>
212
     <span class="comment">//-------------------------------------</span>
213
     function void build_phase(uvm_phase phase);
214
       super.build_phase(phase);
215
       scbtest_env = cl_scbtest_env::type_id::create(&quot;scbtest_env&quot;, this);
216
     endfunction: build_phase
217
 
218
     task run_phase(uvm_phase phase);
219
       super.run_phase(phase);
220
       begin
221
         cl_scbtest_seq_item item1;
222
         item1 = cl_scbtest_seq_item::type_id::create(&quot;item1&quot;);
223
         item1.int_a = &apos;h3a;
224
         scbtest_env.syoscb.add_item(&quot;Q1&quot;, &quot;P1&quot;, item1);
225
       end
226
       begin
227
         cl_scbtest_seq_item item1;
228
         item1 = cl_scbtest_seq_item::type_id::create(&quot;item1&quot;);
229
         item1.int_a = &apos;h3a;
230
         scbtest_env.syoscb.add_item(&quot;Q2&quot;, &quot;P1&quot;, item1);
231
       end
232
     endtask: run_phase
233
   endclass: cl_scbtest_test
234
</pre></div><h2><a class="anchor" id="sTLMAPIHookUp">
235
TLM based API hook up</a></h2>
236
<p>The TLM API is even easier to use than the function based API. The scoreboard provides generic UVM subscribers which can be connected to anything which has a UVM analysis port (e.g. a UVM monitor). Typically, the UVM agents inside the UVM environment contain one or more monitors with UVM analysis ports which should be connected to the scoreboard. The following example has two agents which each has a monitor. The monitors are connected to Q1 and Q2 in the scoreboard:</p>
237
<div class="fragment"><pre class="fragment">   <span class="keyword">import</span> pk_syoscb::*;
238
 
239
   <span class="keyword">class </span>cl_scbtest_env <span class="keyword">extends</span> uvm_env;
240
 
241
     <a class="code" href="classcl__syoscb.html" title="Top level class implementing the root of the SyoSil UVM scoreboard.">cl_syoscb</a>     syoscb;
242
     <a class="code" href="classcl__syoscb__cfg.html" title="Configuration class for the SyoSil UVM scoreboard.">cl_syoscb_cfg</a> syoscb_cfg;
243
     myagent       agent1;
244
     myagent       agent2;
245
 
246
     ...
247
 
248
     function void build_phase(uvm_phase phase);
249
 
250
       ...
251
 
252
       <span class="comment">// Configure and create the scoreboard</span>
253
       <span class="comment">// Create and configure the agents</span>
254
 
255
       ...
256
 
257
     endfunction: build_phase
258
 
259
     ...
260
 
261
     function void connect_phase(uvm_phase phase);
262
       super.connect_phase(phase);
263
 
264
       begin
265
         <a class="code" href="classcl__syoscb__subscriber.html" title="Generic subscriber for the scoreboard.">cl_syoscb_subscriber</a> subscriber;
266
 
267
         <span class="comment">// Get the subscriber for Producer: P1 for queue: Q1 and connect it</span>
268
         <span class="comment">// to the UVM monitor producing transactions for this queue</span>
269
         subscriber = this.syoscb.get_subscriber(&quot;Q1&quot;, &quot;P1&quot;);
270
         this.agent1.mon.&lt;analysis port&gt;.connect(subscriber.analysis_export);
271
 
272
         <span class="comment">// Get the subscriber for Producer: P1 for queue: Q2 and connect it</span>
273
         <span class="comment">// to the UVM monitor producing transactions for this queue</span>
274
         subscriber = this.syoscb.get_subscriber(&quot;Q2&quot;, &quot;P1&quot;);
275
         this.agent1.mon.&lt;analysis port&gt;.connect(subscriber.analysis_export);
276
       end
277
     endfunction: connect_phase
278
</pre></div><h2><a class="anchor" id="sFactory">
279
Factory overwrites</a></h2>
280
<p>Finally, the wanted queue and compare algorithm implementation needs to be selected. This is done by factory overwrites since they can be changed test etc.</p>
281
<p><b>NOTE: This MUST be done before creating the scoreboard!</b></p>
282
<p>The following queue implementations are available:</p>
283
<ol type="1">
284
<li>Standard SV queue (<a class="el" href="classcl__syoscb__queue__std.html" title="Standard implementation of a queue.">cl_syoscb_queue_std</a>)</li>
285
</ol>
286
<p>and the following compare algorithms are available:</p>
287
<ol type="1">
288
<li>Out-of-Order (cl_syoscb_compare_ooo)</li>
289
<li>In-Order (<a class="el" href="classcl__syoscb__compare__io.html" title="Class which implements the in order compare algorithm.">cl_syoscb_compare_io</a>)</li>
290
<li>In-Order by producer (cl_syoscb_compare_iop)</li>
291
</ol>
292
<p>The following example shows how they are configured:</p>
293
<div class="fragment"><pre class="fragment">   cl_syoscb_queue::set_type_override_by_type(cl_syoscb_queue::get_type(),
294
                                              cl_syoscb_queue_std::get_type(),
295
                                              <span class="stringliteral">&quot;*&quot;</span>);
296
 
297
   factory.set_type_override_by_type(cl_syoscb_compare_base::get_type(),
298
                                     cl_syoscb_compare_ooo::get_type(),
299
                                     <span class="stringliteral">&quot;*&quot;</span>);
300
</pre></div><p>The full build phase, including the factory overwrites, of cl_scbtest_env is shown here for completeness:</p>
301
<div class="fragment"><pre class="fragment">   function <span class="keywordtype">void</span> cl_scbtest_env::build_phase(uvm_phase phase);
302
     super.build_phase(phase);
303
 
304
     <span class="comment">// Use the standard SV queue implementation as scoreboard queue</span>
305
     cl_syoscb_queue::set_type_override_by_type(cl_syoscb_queue::get_type(),
306
                                                cl_syoscb_queue_std::get_type(),
307
                                                <span class="stringliteral">&quot;*&quot;</span>);
308
 
309
     <span class="comment">// Set the compare strategy to be OOO</span>
310
     factory.set_type_override_by_type(cl_syoscb_compare_base::get_type(),
311
                                       cl_syoscb_compare_ooo::get_type(),
312
                                       <span class="stringliteral">&quot;*&quot;</span>);
313
 
314
     <span class="comment">// Create the scoreboard configuration object</span>
315
     this.syoscb_cfg = cl_syoscb_cfg::type_id::create(<span class="stringliteral">&quot;syoscb_cfg&quot;</span>);
316
 
317
     <span class="comment">// Configure the scoreboard</span>
318
     this.syoscb_cfg.set_queues({<span class="stringliteral">&quot;Q1&quot;</span>, <span class="stringliteral">&quot;Q2&quot;</span>});
319
     <span class="keywordtype">void</span><span class="stringliteral">&apos;(this.syoscb_cfg.set_primary_queue(&quot;Q1&quot;)); </span>
320
<span class="stringliteral">     void&apos;</span>(this.syoscb_cfg.set_producer(<span class="stringliteral">&quot;P1&quot;</span>, {<span class="stringliteral">&quot;Q1&quot;</span>, <span class="stringliteral">&quot;Q2&quot;</span>}));
321
 
322
     <span class="comment">// Pass the scoreboard configuration object to the config_db</span>
323
     uvm_config_db #(<a class="code" href="classcl__syoscb__cfg.html" title="Configuration class for the SyoSil UVM scoreboard.">cl_syoscb_cfg</a>)::<span class="keyword">set</span>(<span class="keyword">this</span>, <span class="stringliteral">&quot;syoscb&quot;</span>, <span class="stringliteral">&quot;cfg&quot;</span>, this.syoscb_cfg);
324
 
325
     <span class="comment">// Create the scoreboard</span>
326
     this.syoscb = cl_syoscb::type_id::create(<span class="stringliteral">&quot;syoscb&quot;</span>, <span class="keyword">this</span>);
327
 
328
     ...
329
 
330
   endfunction: build_phase
331
</pre></div> </div>
332
<!--- window showing the filter options -->
333
<div id="MSearchSelectWindow"
334
     onmouseover="return searchBox.OnSearchSelectShow()"
335
     onmouseout="return searchBox.OnSearchSelectHide()"
336
     onkeydown="return searchBox.OnSearchSelectKey(event)">
337
<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>
338
 
339
<!-- iframe showing the search results (closed by default) -->
340
<div id="MSearchResultsWindow">
341
<iframe src="" frameborder="0"
342
        name="MSearchResults" id="MSearchResults">
343
</iframe>
344
</div>
345
 
346
<!--*************************************************************************-->
347
<!-- $Id: idv_dox_footer.html 136 2010-05-31 19:13:27Z seanoboyle $          -->
348
<!--*************************************************************************-->
349
<!--   This program is free software: you can redistribute it and/or modify  -->
350
<!--   it under the terms of the GNU General Public License as published by  -->
351
<!--   the Free Software Foundation, either version 3 of the License, or     -->
352
<!--   (at your option) any later version.                                   -->
353
<!--                                                                         -->
354
<!--   This program is distributed in the hope that it will be useful,       -->
355
<!--   but WITHOUT ANY WARRANTY; without even the implied warranty of        -->
356
<!--   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         -->
357
<!--   GNU General Public License for more details.                          -->
358
<!--                                                                         -->
359
<!--   You should have received a copy of the GNU General Public License     -->
360
<!--   along with this program.  If not, see http://www.gnu.org/licenses/.   -->
361
<!--                                                                         -->
362
<!--*************************************************************************-->
363
<!-- Title:        IDV Doxygen Footer File                                   -->
364
<!-- Description:  This file is a doxygen footer with the IDV logo and a     -->
365
<!--               and a reference to the GNU FDL License.                   -->
366
<!--                                                                         -->
367
<!-- Original Author: Sean O'Boyle                                           -->
368
<!-- Contact:         seanoboyle@intelligentdv.com                           -->
369
<!-- Company:         Intelligent Design Verification                        -->
370
<!-- Company URL:     http://intelligentdv.com                               -->
371
<!--                                                                         -->
372
<!-- Download the most recent version here:                                  -->
373
<!--                  http://intelligentdv.com/downloads                     -->
374
<!--                                                                         -->
375
<!-- File Bugs Here:  http://bugs.intelligentdv.com                          -->
376
<!--        Project:  DoxygenFilterSV                                        -->
377
<!--                                                                         -->
378
<!-- File: idv_dox_header.xml                                                -->
379
<!-- $LastChangedBy: seanoboyle $                                            -->
380
<!-- $LastChangedDate: 2010-05-31 12:13:27 -0700 (Mon, 31 May 2010) $        -->
381
<!-- $LastChangedRevision: 136 $                                             -->
382
<!--                                                                         -->
383
<!--*************************************************************************-->
384
 
385
<br>
386
<table border="1" width = "100%">
387
  <tr>
388
    <td width = "20%">
389
     <img src="syosil.jpg">
390
    </td>
391
    <td width = "60%">
392
       <address style="text-align: center;">
393
       Project: SyoSil ApS UVM Scoreboard, Revision: 1.0.2.5<br>
394
       <br>
395
       Copyright 2014-2015 SyoSil ApS<br>
396
       All Rights Reserved Worldwide<br>
397
       <br>
398
      Licensed under the Apache License, Version 2.0 (the "License"); you may not
399
      use this file except in compliance with the License.  You may obtain a copy of
400
      the License at<br>
401
      <br>
402
       <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a><br>
403
      <br>
404
      Unless required by applicable law or agreed to in writing, software distributed under the License is
405
      distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
406
      implied. See the License for the specific language governing permissions and limitations under
407
      the License.
408
      </address>
409
    </td>
410
    <td width = "20%">
411
      <address style="text-align: right;"><small>
412
      <a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a><br>
413
      <a href="http://www.doxygen.org/index.html">Doxygen</a> Version: 1.6.1<br>
414
      <a href="http://www.intelligentdv.com/index.html">IDV SV Filter</a> Version: 2.6.2<br>
415
      Sat Nov 28 05:41:54 2015</small></address>
416
   </td>
417
  </tr>
418
</table>
419
<address style="text-align: left;"><small>
420
Find a documentation bug?  Report bugs to: <a href="http://bugs.intelligentdv.com/">bugs.intelligentdv.com</a> Project: DoxygenFilterSV
421
</small></address>
422
</body>
423
</html>

powered by: WebSVN 2.1.0

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