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

Subversion Repositories lpffir

[/] [lpffir/] [trunk/] [uvm/] [tools/] [uvm_syoscb/] [docs/] [html/] [pk__syoscb_8sv_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: pk_syoscb.sv 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>pk_syoscb.sv</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 `ifndef __PK_SYOSCB_SV__
91
<a name="l00002"></a>00002 `define __PK_SYOSCB_SV__
92
<a name="l00003"></a>00003 <span class="comment"></span>
93
<a name="l00004"></a>00004 <span class="comment">/// @mainpage</span>
94
<a name="l00005"></a>00005 <span class="comment">/// User and implementation documentation for the UVM scoreboard</span>
95
<a name="l00006"></a>00006 <span class="comment">///</span>
96
<a name="l00007"></a>00007 <span class="comment">/// This documentation provides the following additional documentation, besides</span>
97
<a name="l00008"></a>00008 <span class="comment">/// the normal source code documentation:</span>
98
<a name="l00009"></a>00009 <span class="comment">///</span>
99
<a name="l00010"></a>00010 <span class="comment">///   -# Getting started: \ref pGettingStarted</span>
100
<a name="l00011"></a>00011 <span class="comment">///   -# How to integrate the UVM scoreboard: \ref pIntegration</span>
101
<a name="l00012"></a>00012 <span class="comment">///   -# Implementation notes: \ref pImplementationNotes</span>
102
<a name="l00013"></a>00013 <span class="comment">///</span>
103
<a name="l00014"></a>00014 <span class="comment">/// It is assumed that the reader is familiar with the UVM scoreboard architecture</span>
104
<a name="l00015"></a>00015 <span class="comment">/// described in the SyoSil paper on the subject: Versatile UVM Scoreboarding located in</span>
105
<a name="l00016"></a>00016 <span class="comment">/// in the &lt;b&gt;docs&lt;/b&gt; directory.</span>
106
<a name="l00017"></a>00017 <span class="comment">///</span>
107
<a name="l00018"></a>00018 <span class="comment">/// @page pGettingStarted Getting started</span>
108
<a name="l00019"></a>00019 <span class="comment">/// This software package also provides some simple examples beside the source code for the UVM scoreboard. Before starting to integrate the UVM scoreboard into your own code then it might be beneficial to look at the provided examples. An example testbench is placed in the &lt;b&gt;tb&lt;/b&gt; directory and the tests are in the &lt;b&gt;tb/test&lt;/b&gt; directory.</span>
109
<a name="l00020"></a>00020 <span class="comment">///</span>
110
<a name="l00021"></a>00021 <span class="comment">/// To run the examples you need to select a Vendor since the examples can be run with all of the three major SystemVerilog simulator vendors: Mentor Graphics, Cadence and Synopsys. See &lt;b&gt;README.txt&lt;/b&gt; for a description of how to select the vendor.</span>
111
<a name="l00022"></a>00022 <span class="comment">///</span>
112
<a name="l00023"></a>00023 <span class="comment">/// Once the vendor has been selected then the available Make targets for that vendor can be listed by typing: &quot;make&quot;. Typically, you run the simulation with: &lt;b&gt;make sim&lt;/b&gt;.</span>
113
<a name="l00024"></a>00024 <span class="comment">///</span>
114
<a name="l00025"></a>00025 <span class="comment">/// In general you can type: &lt;b&gt;make help&lt;/b&gt; to get information about what Make options are available.</span>
115
<a name="l00026"></a>00026 <span class="comment">///</span>
116
<a name="l00027"></a>00027 <span class="comment">/// @page pIntegration How to integrate the UVM scoreboard</span>
117
<a name="l00028"></a>00028 <span class="comment">/// The UVM scoreboard is easily integrated into your existing testbench environment.</span>
118
<a name="l00029"></a>00029 <span class="comment">///</span>
119
<a name="l00030"></a>00030 <span class="comment">/// @section sCompile Compiling the UVM scoreboard</span>
120
<a name="l00031"></a>00031 <span class="comment">/// To get the UVM scoreboard compiled you need to add &lt;b&gt;src/pk_syoscb.sv&lt;/b&gt; 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.</span>
121
<a name="l00032"></a>00032 <span class="comment">///</span>
122
<a name="l00033"></a>00033 <span class="comment">/// @section sAcccess Accessing the UVM scoreboard from your own code</span>
123
<a name="l00034"></a>00034 <span class="comment">/// Once the UVM scoreboard is compiled with the verification environment then it is accessible either by explicit scoping:</span>
124
<a name="l00035"></a>00035 <span class="comment">///</span>
125
<a name="l00036"></a>00036 <span class="comment">/// @code</span>
126
<a name="l00037"></a>00037 <span class="comment">///   class myclass;</span>
127
<a name="l00038"></a>00038 <span class="comment">///     pk_syoscb::cl_syoscb my_new_scb;</span>
128
<a name="l00039"></a>00039 <span class="comment">///     ...</span>
129
<a name="l00040"></a>00040 <span class="comment">/// @endcode</span>
130
<a name="l00041"></a>00041 <span class="comment">///</span>
131
<a name="l00042"></a>00042 <span class="comment">/// or by importing the complete package into your scope:</span>
132
<a name="l00043"></a>00043 <span class="comment">///</span>
133
<a name="l00044"></a>00044 <span class="comment">/// @code</span>
134
<a name="l00045"></a>00045 <span class="comment">///   import pk_syoscb::*;</span>
135
<a name="l00046"></a>00046 <span class="comment">///</span>
136
<a name="l00047"></a>00047 <span class="comment">///   class myclass;</span>
137
<a name="l00048"></a>00048 <span class="comment">///     cl_syoscb my_new_scb;</span>
138
<a name="l00049"></a>00049 <span class="comment">///     ...</span>
139
<a name="l00050"></a>00050 <span class="comment">/// @endcode</span>
140
<a name="l00051"></a>00051 <span class="comment">///</span>
141
<a name="l00052"></a>00052 <span class="comment">/// @section sInstantiation Instantiating the UVM scoreboard</span>
142
<a name="l00053"></a>00053 <span class="comment">/// 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:</span>
143
<a name="l00054"></a>00054 <span class="comment">///</span>
144
<a name="l00055"></a>00055 <span class="comment">/// @code</span>
145
<a name="l00056"></a>00056 <span class="comment">///   import pk_syoscb::*;</span>
146
<a name="l00057"></a>00057 <span class="comment">///</span>
147
<a name="l00058"></a>00058 <span class="comment">///   class cl_scbtest_env extends uvm_env;</span>
148
<a name="l00059"></a>00059 <span class="comment">///</span>
149
<a name="l00060"></a>00060 <span class="comment">///     cl_syoscb     syoscb;   </span>
150
<a name="l00061"></a>00061 <span class="comment">///     cl_syoscb_cfg syoscb_cfg;</span>
151
<a name="l00062"></a>00062 <span class="comment">///    </span>
152
<a name="l00063"></a>00063 <span class="comment">///     `uvm_component_utils_begin(cl_scbtest_env)</span>
153
<a name="l00064"></a>00064 <span class="comment">///       `uvm_field_object(syoscb,     UVM_ALL_ON)</span>
154
<a name="l00065"></a>00065 <span class="comment">///       `uvm_field_object(syoscb_cfg, UVM_ALL_ON)</span>
155
<a name="l00066"></a>00066 <span class="comment">///     `uvm_component_utils_end</span>
156
<a name="l00067"></a>00067 <span class="comment">///    </span>
157
<a name="l00068"></a>00068 <span class="comment">///     ... </span>
158
<a name="l00069"></a>00069 <span class="comment">///</span>
159
<a name="l00070"></a>00070 <span class="comment">///   endclass: cl_scbtest_env</span>
160
<a name="l00071"></a>00071 <span class="comment">///</span>
161
<a name="l00072"></a>00072 <span class="comment">///   function void cl_scbtest_env::build_phase(uvm_phase phase);</span>
162
<a name="l00073"></a>00073 <span class="comment">///     super.build_phase(phase);</span>
163
<a name="l00074"></a>00074 <span class="comment">///   </span>
164
<a name="l00075"></a>00075 <span class="comment">///     // Create the scoreboard configuration object</span>
165
<a name="l00076"></a>00076 <span class="comment">///     this.syoscb_cfg = cl_syoscb_cfg::type_id::create(&quot;syoscb_cfg&quot;);</span>
166
<a name="l00077"></a>00077 <span class="comment">///</span>
167
<a name="l00078"></a>00078 <span class="comment">///     // Pass the scoreboard configuration object to the config_db</span>
168
<a name="l00079"></a>00079 <span class="comment">///     uvm_config_db #(cl_syoscb_cfg)::set(this, &quot;syoscb&quot;, &quot;cfg&quot;, this.syoscb_cfg);</span>
169
<a name="l00080"></a>00080 <span class="comment">///</span>
170
<a name="l00081"></a>00081 <span class="comment">///     // Create the scoreboard</span>
171
<a name="l00082"></a>00082 <span class="comment">///     this.syoscb = cl_syoscb::type_id::create(&quot;syoscb&quot;, this);</span>
172
<a name="l00083"></a>00083 <span class="comment">///   </span>
173
<a name="l00084"></a>00084 <span class="comment">///     ...</span>
174
<a name="l00085"></a>00085 <span class="comment">///               </span>
175
<a name="l00086"></a>00086 <span class="comment">///   endfunction: build_phase</span>
176
<a name="l00087"></a>00087 <span class="comment">/// @endcode</span>
177
<a name="l00088"></a>00088 <span class="comment">///</span>
178
<a name="l00089"></a>00089 <span class="comment">/// @section sConfiguration Configuring the UVM scoreboard</span>
179
<a name="l00090"></a>00090 <span class="comment">/// 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:</span>
180
<a name="l00091"></a>00091 <span class="comment">///</span>
181
<a name="l00092"></a>00092 <span class="comment">/// @code</span>
182
<a name="l00093"></a>00093 <span class="comment">///   function void cl_scbtest_env::build_phase(uvm_phase phase);</span>
183
<a name="l00094"></a>00094 <span class="comment">///     super.build_phase(phase);</span>
184
<a name="l00095"></a>00095 <span class="comment">///   </span>
185
<a name="l00096"></a>00096 <span class="comment">///     // Create the scoreboard configuration object</span>
186
<a name="l00097"></a>00097 <span class="comment">///     this.syoscb_cfg = cl_syoscb_cfg::type_id::create(&quot;syoscb_cfg&quot;);</span>
187
<a name="l00098"></a>00098 <span class="comment">///</span>
188
<a name="l00099"></a>00099 <span class="comment">///     // Configure the scoreboard</span>
189
<a name="l00100"></a>00100 <span class="comment">///     this.syoscb_cfg.set_queues({&quot;Q1&quot;, &quot;Q2&quot;});</span>
190
<a name="l00101"></a>00101 <span class="comment">///     void&apos;(this.syoscb_cfg.set_primary_queue(&quot;Q1&quot;)); </span>
191
<a name="l00102"></a>00102 <span class="comment">///     void&apos;(this.syoscb_cfg.set_producer(&quot;P1&quot;, {&quot;Q1&quot;, &quot;Q2&quot;})); </span>
192
<a name="l00103"></a>00103 <span class="comment">///</span>
193
<a name="l00104"></a>00104 <span class="comment">///     // Pass the scoreboard configuration object to the config_db</span>
194
<a name="l00105"></a>00105 <span class="comment">///     uvm_config_db #(cl_syoscb_cfg)::set(this, &quot;syoscb&quot;, &quot;cfg&quot;, this.syoscb_cfg);</span>
195
<a name="l00106"></a>00106 <span class="comment">///</span>
196
<a name="l00107"></a>00107 <span class="comment">///     // Create the scoreboard</span>
197
<a name="l00108"></a>00108 <span class="comment">///     this.syoscb = cl_syoscb::type_id::create(&quot;syoscb&quot;, this);</span>
198
<a name="l00109"></a>00109 <span class="comment">///               </span>
199
<a name="l00110"></a>00110 <span class="comment">///     ...</span>
200
<a name="l00111"></a>00111 <span class="comment">///</span>
201
<a name="l00112"></a>00112 <span class="comment">///   endfunction: build_phase</span>
202
<a name="l00113"></a>00113 <span class="comment">/// @endcode</span>
203
<a name="l00114"></a>00114 <span class="comment">///</span>
204
<a name="l00115"></a>00115 <span class="comment">/// @section sFunctionAPIHookUp Function based API hook up</span>
205
<a name="l00116"></a>00116 <span class="comment">/// The function based API is very easy to use once you have done the configuration and instantiation</span>
206
<a name="l00117"></a>00117 <span class="comment">/// of the scoreboard as describe above.</span>
207
<a name="l00118"></a>00118 <span class="comment">///</span>
208
<a name="l00119"></a>00119 <span class="comment">/// Whenever you need to add an UVM sequence item to a queue produced by a specified producer then you simply</span>
209
<a name="l00120"></a>00120 <span class="comment">/// invoke the cl_syoscb::add_item() method:</span>
210
<a name="l00121"></a>00121 <span class="comment">///</span>
211
<a name="l00122"></a>00122 <span class="comment">/// @code</span>
212
<a name="l00123"></a>00123 <span class="comment">///   // *NOTE*: Assumes syoscb is handle to an instance of the scoreboard and</span>
213
<a name="l00124"></a>00124 <span class="comment">///   //         item1 is a handle to a UVM sequence item</span>
214
<a name="l00125"></a>00125 <span class="comment">///</span>
215
<a name="l00126"></a>00126 <span class="comment">///   ...</span>
216
<a name="l00127"></a>00127 <span class="comment">///</span>
217
<a name="l00128"></a>00128 <span class="comment">///   // Insert UVM sequence item for queue: Q1, for producer: P1</span>
218
<a name="l00129"></a>00129 <span class="comment">///   syoscb.add_item(&quot;Q1&quot;, &quot;P1&quot;, item1);</span>
219
<a name="l00130"></a>00130 <span class="comment">/// @endcode</span>
220
<a name="l00131"></a>00131 <span class="comment">///</span>
221
<a name="l00132"></a>00132 <span class="comment">/// Invoking the cl_syoscb::add_item() method will simply wrap the UVM sequence item in a cl_syoscb_item object, add it the correct queue</span>
222
<a name="l00133"></a>00133 <span class="comment">/// and finally invoke the configured compare method.</span>
223
<a name="l00134"></a>00134 <span class="comment">///</span>
224
<a name="l00135"></a>00135 <span class="comment">/// The UVM environment will typically contain a handle to the scoreboard as described above. This can then be utilized if UVM sequences</span>
225
<a name="l00136"></a>00136 <span class="comment">/// needs to be added from a test case:</span>
226
<a name="l00137"></a>00137 <span class="comment">///</span>
227
<a name="l00138"></a>00138 <span class="comment">/// @code</span>
228
<a name="l00139"></a>00139 <span class="comment">///   class cl_scbtest_seq_item extends uvm_sequence_item;</span>
229
<a name="l00140"></a>00140 <span class="comment">///     //-------------------------------------</span>
230
<a name="l00141"></a>00141 <span class="comment">///     // Randomizable variables</span>
231
<a name="l00142"></a>00142 <span class="comment">///     //-------------------------------------</span>
232
<a name="l00143"></a>00143 <span class="comment">///     rand int unsigned int_a;</span>
233
<a name="l00144"></a>00144 <span class="comment">///   </span>
234
<a name="l00145"></a>00145 <span class="comment">///     //-------------------------------------</span>
235
<a name="l00146"></a>00146 <span class="comment">///     // UVM Macros</span>
236
<a name="l00147"></a>00147 <span class="comment">///     //-------------------------------------</span>
237
<a name="l00148"></a>00148 <span class="comment">///     `uvm_object_utils_begin(cl_scbtest_seq_item)</span>
238
<a name="l00149"></a>00149 <span class="comment">///       `uvm_field_int(int_a, UVM_ALL_ON)</span>
239
<a name="l00150"></a>00150 <span class="comment">///     `uvm_object_utils_end</span>
240
<a name="l00151"></a>00151 <span class="comment">///   </span>
241
<a name="l00152"></a>00152 <span class="comment">///     //-------------------------------------</span>
242
<a name="l00153"></a>00153 <span class="comment">///     // Constructor</span>
243
<a name="l00154"></a>00154 <span class="comment">///     //-------------------------------------</span>
244
<a name="l00155"></a>00155 <span class="comment">///     function cl_scbtest_seq_item::new (string name = &quot;cl_scbtest_seq_item&quot;);</span>
245
<a name="l00156"></a>00156 <span class="comment">///        super.new(name);</span>
246
<a name="l00157"></a>00157 <span class="comment">///     endfunction</span>
247
<a name="l00158"></a>00158 <span class="comment">///   endclass: cl_scbtest_seq_item</span>
248
<a name="l00159"></a>00159 <span class="comment">///</span>
249
<a name="l00160"></a>00160 <span class="comment">///   class cl_scbtest_test extends uvm_test;</span>
250
<a name="l00161"></a>00161 <span class="comment">///     //-------------------------------------</span>
251
<a name="l00162"></a>00162 <span class="comment">///     // Non randomizable variables</span>
252
<a name="l00163"></a>00163 <span class="comment">///     //-------------------------------------</span>
253
<a name="l00164"></a>00164 <span class="comment">///     cl_scbtest_env scbtest_env;</span>
254
<a name="l00165"></a>00165 <span class="comment">///   </span>
255
<a name="l00166"></a>00166 <span class="comment">///     //-------------------------------------</span>
256
<a name="l00167"></a>00167 <span class="comment">///     // UVM Macros</span>
257
<a name="l00168"></a>00168 <span class="comment">///     //-------------------------------------</span>
258
<a name="l00169"></a>00169 <span class="comment">///     `uvm_component_utils(cl_scbtest_test)</span>
259
<a name="l00170"></a>00170 <span class="comment">///   </span>
260
<a name="l00171"></a>00171 <span class="comment">///     //-------------------------------------</span>
261
<a name="l00172"></a>00172 <span class="comment">///     // Constructor</span>
262
<a name="l00173"></a>00173 <span class="comment">///     //-------------------------------------</span>
263
<a name="l00174"></a>00174 <span class="comment">///     function new(string name = &quot;cl_scbtest_test&quot;, uvm_component parent = null);</span>
264
<a name="l00175"></a>00175 <span class="comment">///       super.new(name, parent);</span>
265
<a name="l00176"></a>00176 <span class="comment">///     endfunction: new</span>
266
<a name="l00177"></a>00177 <span class="comment">///   </span>
267
<a name="l00178"></a>00178 <span class="comment">///     //-------------------------------------</span>
268
<a name="l00179"></a>00179 <span class="comment">///     // UVM Phase methods</span>
269
<a name="l00180"></a>00180 <span class="comment">///     //-------------------------------------</span>
270
<a name="l00181"></a>00181 <span class="comment">///     function void build_phase(uvm_phase phase);</span>
271
<a name="l00182"></a>00182 <span class="comment">///       super.build_phase(phase);</span>
272
<a name="l00183"></a>00183 <span class="comment">///       scbtest_env = cl_scbtest_env::type_id::create(&quot;scbtest_env&quot;, this);</span>
273
<a name="l00184"></a>00184 <span class="comment">///     endfunction: build_phase</span>
274
<a name="l00185"></a>00185 <span class="comment">///   </span>
275
<a name="l00186"></a>00186 <span class="comment">///     task run_phase(uvm_phase phase);</span>
276
<a name="l00187"></a>00187 <span class="comment">///       super.run_phase(phase);</span>
277
<a name="l00188"></a>00188 <span class="comment">///       begin</span>
278
<a name="l00189"></a>00189 <span class="comment">///         cl_scbtest_seq_item item1;</span>
279
<a name="l00190"></a>00190 <span class="comment">///         item1 = cl_scbtest_seq_item::type_id::create(&quot;item1&quot;);</span>
280
<a name="l00191"></a>00191 <span class="comment">///         item1.int_a = &apos;h3a;</span>
281
<a name="l00192"></a>00192 <span class="comment">///         scbtest_env.syoscb.add_item(&quot;Q1&quot;, &quot;P1&quot;, item1);</span>
282
<a name="l00193"></a>00193 <span class="comment">///       end</span>
283
<a name="l00194"></a>00194 <span class="comment">///       begin</span>
284
<a name="l00195"></a>00195 <span class="comment">///         cl_scbtest_seq_item item1;</span>
285
<a name="l00196"></a>00196 <span class="comment">///         item1 = cl_scbtest_seq_item::type_id::create(&quot;item1&quot;);</span>
286
<a name="l00197"></a>00197 <span class="comment">///         item1.int_a = &apos;h3a;</span>
287
<a name="l00198"></a>00198 <span class="comment">///         scbtest_env.syoscb.add_item(&quot;Q2&quot;, &quot;P1&quot;, item1);</span>
288
<a name="l00199"></a>00199 <span class="comment">///       end</span>
289
<a name="l00200"></a>00200 <span class="comment">///     endtask: run_phase</span>
290
<a name="l00201"></a>00201 <span class="comment">///   endclass: cl_scbtest_test</span>
291
<a name="l00202"></a>00202 <span class="comment">/// @endcode</span>
292
<a name="l00203"></a>00203 <span class="comment">///</span>
293
<a name="l00204"></a>00204 <span class="comment">/// @section sTLMAPIHookUp TLM based API hook up</span>
294
<a name="l00205"></a>00205 <span class="comment">/// The TLM API is even easier to use than the function based API. The scoreboard provides generic UVM subscribers which</span>
295
<a name="l00206"></a>00206 <span class="comment">/// can be connected to anything which has a UVM analysis port (e.g. a UVM monitor). Typically, the UVM agents inside the UVM environment</span>
296
<a name="l00207"></a>00207 <span class="comment">/// contain one or more monitors with UVM analysis ports which should be connected to the scoreboard. The following example has two agents which</span>
297
<a name="l00208"></a>00208 <span class="comment">/// each has a monitor. The monitors are connected to Q1 and Q2 in the scoreboard:</span>
298
<a name="l00209"></a>00209 <span class="comment">///</span>
299
<a name="l00210"></a>00210 <span class="comment">/// @code</span>
300
<a name="l00211"></a>00211 <span class="comment">///   import pk_syoscb::*;</span>
301
<a name="l00212"></a>00212 <span class="comment">///</span>
302
<a name="l00213"></a>00213 <span class="comment">///   class cl_scbtest_env extends uvm_env;</span>
303
<a name="l00214"></a>00214 <span class="comment">///</span>
304
<a name="l00215"></a>00215 <span class="comment">///     cl_syoscb     syoscb;   </span>
305
<a name="l00216"></a>00216 <span class="comment">///     cl_syoscb_cfg syoscb_cfg;</span>
306
<a name="l00217"></a>00217 <span class="comment">///     myagent       agent1;</span>
307
<a name="l00218"></a>00218 <span class="comment">///     myagent       agent2;</span>
308
<a name="l00219"></a>00219 <span class="comment">///</span>
309
<a name="l00220"></a>00220 <span class="comment">///     ...</span>
310
<a name="l00221"></a>00221 <span class="comment">///</span>
311
<a name="l00222"></a>00222 <span class="comment">///     function void build_phase(uvm_phase phase);</span>
312
<a name="l00223"></a>00223 <span class="comment">///       </span>
313
<a name="l00224"></a>00224 <span class="comment">///       ...     </span>
314
<a name="l00225"></a>00225 <span class="comment">///</span>
315
<a name="l00226"></a>00226 <span class="comment">///       // Configure and create the scoreboard</span>
316
<a name="l00227"></a>00227 <span class="comment">///       // Create and configure the agents</span>
317
<a name="l00228"></a>00228 <span class="comment">///       </span>
318
<a name="l00229"></a>00229 <span class="comment">///       ...     </span>
319
<a name="l00230"></a>00230 <span class="comment">///</span>
320
<a name="l00231"></a>00231 <span class="comment">///     endfunction: build_phase</span>
321
<a name="l00232"></a>00232 <span class="comment">///</span>
322
<a name="l00233"></a>00233 <span class="comment">///     ...</span>
323
<a name="l00234"></a>00234 <span class="comment">///</span>
324
<a name="l00235"></a>00235 <span class="comment">///     function void connect_phase(uvm_phase phase);</span>
325
<a name="l00236"></a>00236 <span class="comment">///       super.connect_phase(phase);</span>
326
<a name="l00237"></a>00237 <span class="comment">///</span>
327
<a name="l00238"></a>00238 <span class="comment">///       begin</span>
328
<a name="l00239"></a>00239 <span class="comment">///         cl_syoscb_subscriber subscriber;</span>
329
<a name="l00240"></a>00240 <span class="comment">///</span>
330
<a name="l00241"></a>00241 <span class="comment">///         // Get the subscriber for Producer: P1 for queue: Q1 and connect it</span>
331
<a name="l00242"></a>00242 <span class="comment">///         // to the UVM monitor producing transactions for this queue</span>
332
<a name="l00243"></a>00243 <span class="comment">///         subscriber = this.syoscb.get_subscriber(&quot;Q1&quot;, &quot;P1&quot;);</span>
333
<a name="l00244"></a>00244 <span class="comment">///         this.agent1.mon.&lt;analysis port&gt;.connect(subscriber.analysis_export);</span>
334
<a name="l00245"></a>00245 <span class="comment">///</span>
335
<a name="l00246"></a>00246 <span class="comment">///         // Get the subscriber for Producer: P1 for queue: Q2 and connect it</span>
336
<a name="l00247"></a>00247 <span class="comment">///         // to the UVM monitor producing transactions for this queue</span>
337
<a name="l00248"></a>00248 <span class="comment">///         subscriber = this.syoscb.get_subscriber(&quot;Q2&quot;, &quot;P1&quot;);</span>
338
<a name="l00249"></a>00249 <span class="comment">///         this.agent1.mon.&lt;analysis port&gt;.connect(subscriber.analysis_export);</span>
339
<a name="l00250"></a>00250 <span class="comment">///       end</span>
340
<a name="l00251"></a>00251 <span class="comment">///     endfunction: connect_phase</span>
341
<a name="l00252"></a>00252 <span class="comment">///   @endcode</span>
342
<a name="l00253"></a>00253 <span class="comment">///  </span>
343
<a name="l00254"></a>00254 <span class="comment">/// @section sFactory Factory overwrites</span>
344
<a name="l00255"></a>00255 <span class="comment">/// 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.</span>
345
<a name="l00256"></a>00256 <span class="comment">///</span>
346
<a name="l00257"></a>00257 <span class="comment">/// &lt;B&gt;NOTE: This MUST be done before creating the scoreboard!&lt;/B&gt;</span>
347
<a name="l00258"></a>00258 <span class="comment">///</span>
348
<a name="l00259"></a>00259 <span class="comment">/// The following queue implementations are available:</span>
349
<a name="l00260"></a>00260 <span class="comment">///</span>
350
<a name="l00261"></a>00261 <span class="comment">///   -# Standard SV queue (cl_syoscb_queue_std)</span>
351
<a name="l00262"></a>00262 <span class="comment">///</span>
352
<a name="l00263"></a>00263 <span class="comment">/// and the following compare algorithms are available:</span>
353
<a name="l00264"></a>00264 <span class="comment">///</span>
354
<a name="l00265"></a>00265 <span class="comment">///   -# Out-of-Order (cl_syoscb_compare_ooo)</span>
355
<a name="l00266"></a>00266 <span class="comment">///   -# In-Order (cl_syoscb_compare_io)</span>
356
<a name="l00267"></a>00267 <span class="comment">///   -# In-Order by producer (cl_syoscb_compare_iop)</span>
357
<a name="l00268"></a>00268 <span class="comment">///</span>
358
<a name="l00269"></a>00269 <span class="comment">/// The following example shows how they are configured:</span>
359
<a name="l00270"></a>00270 <span class="comment">///</span>
360
<a name="l00271"></a>00271 <span class="comment">/// @code</span>
361
<a name="l00272"></a>00272 <span class="comment">///   cl_syoscb_queue::set_type_override_by_type(cl_syoscb_queue::get_type(),              </span>
362
<a name="l00273"></a>00273 <span class="comment">///                                              cl_syoscb_queue_std::get_type(),</span>
363
<a name="l00274"></a>00274 <span class="comment">///                                              &quot;*&quot;);</span>
364
<a name="l00275"></a>00275 <span class="comment">///</span>
365
<a name="l00276"></a>00276 <span class="comment">///   factory.set_type_override_by_type(cl_syoscb_compare_base::get_type(),</span>
366
<a name="l00277"></a>00277 <span class="comment">///                                     cl_syoscb_compare_ooo::get_type(),</span>
367
<a name="l00278"></a>00278 <span class="comment">///                                     &quot;*&quot;);</span>
368
<a name="l00279"></a>00279 <span class="comment">/// @endcode</span>
369
<a name="l00280"></a>00280 <span class="comment">///</span>
370
<a name="l00281"></a>00281 <span class="comment">/// The full build phase, including the factory overwrites, of cl_scbtest_env is shown here for completeness:</span>
371
<a name="l00282"></a>00282 <span class="comment">///</span>
372
<a name="l00283"></a>00283 <span class="comment">/// @code</span>
373
<a name="l00284"></a>00284 <span class="comment">///   function void cl_scbtest_env::build_phase(uvm_phase phase);</span>
374
<a name="l00285"></a>00285 <span class="comment">///     super.build_phase(phase);</span>
375
<a name="l00286"></a>00286 <span class="comment">///</span>
376
<a name="l00287"></a>00287 <span class="comment">///     // Use the standard SV queue implementation as scoreboard queue</span>
377
<a name="l00288"></a>00288 <span class="comment">///     cl_syoscb_queue::set_type_override_by_type(cl_syoscb_queue::get_type(),              </span>
378
<a name="l00289"></a>00289 <span class="comment">///                                                cl_syoscb_queue_std::get_type(),</span>
379
<a name="l00290"></a>00290 <span class="comment">///                                                &quot;*&quot;);</span>
380
<a name="l00291"></a>00291 <span class="comment">///</span>
381
<a name="l00292"></a>00292 <span class="comment">///     // Set the compare strategy to be OOO</span>
382
<a name="l00293"></a>00293 <span class="comment">///     factory.set_type_override_by_type(cl_syoscb_compare_base::get_type(),</span>
383
<a name="l00294"></a>00294 <span class="comment">///                                       cl_syoscb_compare_ooo::get_type(),</span>
384
<a name="l00295"></a>00295 <span class="comment">///                                       &quot;*&quot;);</span>
385
<a name="l00296"></a>00296 <span class="comment">///</span>
386
<a name="l00297"></a>00297 <span class="comment">///     // Create the scoreboard configuration object</span>
387
<a name="l00298"></a>00298 <span class="comment">///     this.syoscb_cfg = cl_syoscb_cfg::type_id::create(&quot;syoscb_cfg&quot;);</span>
388
<a name="l00299"></a>00299 <span class="comment">///</span>
389
<a name="l00300"></a>00300 <span class="comment">///     // Configure the scoreboard</span>
390
<a name="l00301"></a>00301 <span class="comment">///     this.syoscb_cfg.set_queues({&quot;Q1&quot;, &quot;Q2&quot;});</span>
391
<a name="l00302"></a>00302 <span class="comment">///     void&apos;(this.syoscb_cfg.set_primary_queue(&quot;Q1&quot;)); </span>
392
<a name="l00303"></a>00303 <span class="comment">///     void&apos;(this.syoscb_cfg.set_producer(&quot;P1&quot;, {&quot;Q1&quot;, &quot;Q2&quot;})); </span>
393
<a name="l00304"></a>00304 <span class="comment">///</span>
394
<a name="l00305"></a>00305 <span class="comment">///     // Pass the scoreboard configuration object to the config_db</span>
395
<a name="l00306"></a>00306 <span class="comment">///     uvm_config_db #(cl_syoscb_cfg)::set(this, &quot;syoscb&quot;, &quot;cfg&quot;, this.syoscb_cfg);</span>
396
<a name="l00307"></a>00307 <span class="comment">///</span>
397
<a name="l00308"></a>00308 <span class="comment">///     // Create the scoreboard</span>
398
<a name="l00309"></a>00309 <span class="comment">///     this.syoscb = cl_syoscb::type_id::create(&quot;syoscb&quot;, this);</span>
399
<a name="l00310"></a>00310 <span class="comment">///               </span>
400
<a name="l00311"></a>00311 <span class="comment">///     ...</span>
401
<a name="l00312"></a>00312 <span class="comment">///</span>
402
<a name="l00313"></a>00313 <span class="comment">///   endfunction: build_phase</span>
403
<a name="l00314"></a>00314 <span class="comment">/// @endcode</span>
404
<a name="l00315"></a>00315 <span class="comment">///</span>
405
<a name="l00316"></a>00316 <span class="comment">/// @page pImplementationNotes Implementation notes</span>
406
<a name="l00317"></a>00317 <span class="comment">///</span>
407
<a name="l00318"></a>00318 <span class="comment">/// @section sAPIs Implementation APIs</span>
408
<a name="l00319"></a>00319 <span class="comment">///</span>
409
<a name="l00320"></a>00320 <span class="comment">/// The following APIs have been defined for easy extension fo the scoreboard classes:</span>
410
<a name="l00321"></a>00321 <span class="comment">///</span>
411
<a name="l00322"></a>00322 <span class="comment">///   -# Configuration API: cl_syoscb_cfg</span>
412
<a name="l00323"></a>00323 <span class="comment">///   -# Item API: cl_syoscb_item</span>
413
<a name="l00324"></a>00324 <span class="comment">///   -# Queue API: cl_syoscb_queue</span>
414
<a name="l00325"></a>00325 <span class="comment">///   -# Compare API: cl_syoscb_compare_base</span>
415
<a name="l00326"></a>00326 <span class="comment">///   -# Subscriber API: cl_syoscb_subscriber</span>
416
<a name="l00327"></a>00327 <span class="comment">///   -# Iterator API: cl_syoscb_queue_iterator_base</span>
417
<a name="l00328"></a>00328 <span class="comment">///</span>
418
<a name="l00329"></a>00329 <span class="comment">/// @section sGeneralErrorHandling General error handling</span>
419
<a name="l00330"></a>00330 <span class="comment">/// In general when a lower level method detects an error then two concepts are used. Primarily, the method will either issue a UVM info with some information about what went wrong or issue a UVM error/fatal immediately. The first one will then return &lt;b&gt;1&apos;b0&lt;/b&gt; to signal that something went wrong. Thus, it is up to the parent levels to catch the error and convert them into UVM errors/fatals etc. This method was chosen since the parent level typically provides more and better information when things go wrong. </span>
420
<a name="l00331"></a>00331 <span class="comment">/// @section sErrorCategories Error categories</span>
421
<a name="l00332"></a>00332 <span class="comment">/// There are several ERROR categories. The following table lists them with some explanation:</span>
422
<a name="l00333"></a>00333 <span class="comment">///</span>
423
<a name="l00334"></a>00334 <span class="comment">///  &lt;table&gt;</span>
424
<a name="l00335"></a>00335 <span class="comment">///  &lt;tr&gt;</span>
425
<a name="l00336"></a>00336 <span class="comment">///    &lt;th&gt;Error Category&lt;/th&gt;</span>
426
<a name="l00337"></a>00337 <span class="comment">///    &lt;th&gt;Description&lt;/th&gt;</span>
427
<a name="l00338"></a>00338 <span class="comment">///  &lt;/tr&gt;</span>
428
<a name="l00339"></a>00339 <span class="comment">///  &lt;tr&gt;</span>
429
<a name="l00340"></a>00340 <span class="comment">///    &lt;td&gt;IMPL_ERROR&lt;/td&gt;</span>
430
<a name="l00341"></a>00341 <span class="comment">///    &lt;td&gt;Implementation error. Something is really broken&lt;/td&gt;</span>
431
<a name="l00342"></a>00342 <span class="comment">///  &lt;/tr&gt;</span>
432
<a name="l00343"></a>00343 <span class="comment">///  &lt;tr&gt;</span>
433
<a name="l00344"></a>00344 <span class="comment">///    &lt;td&gt;QUEUE_ERROR&lt;/td&gt;</span>
434
<a name="l00345"></a>00345 <span class="comment">///    &lt;td&gt;A queue related error, e.g. the queue could not be found&lt;/td&gt;</span>
435
<a name="l00346"></a>00346 <span class="comment">///  &lt;/tr&gt;</span>
436
<a name="l00347"></a>00347 <span class="comment">///  &lt;tr&gt;</span>
437
<a name="l00348"></a>00348 <span class="comment">///    &lt;td&gt;CFG_ERROR&lt;/td&gt;</span>
438
<a name="l00349"></a>00349 <span class="comment">///    &lt;td&gt;Configuration error. Usually, because the configuration object is missing&lt;/td&gt;</span>
439
<a name="l00350"></a>00350 <span class="comment">///  &lt;/tr&gt;</span>
440
<a name="l00351"></a>00351 <span class="comment">///  &lt;tr&gt;</span>
441
<a name="l00352"></a>00352 <span class="comment">///    &lt;td&gt;TYPE_ERROR&lt;/td&gt;</span>
442
<a name="l00353"></a>00353 <span class="comment">///    &lt;td&gt;Type error. Typically issued when $cast() fails&lt;/td&gt;</span>
443
<a name="l00354"></a>00354 <span class="comment">///  &lt;/tr&gt;</span>
444
<a name="l00355"></a>00355 <span class="comment">///  &lt;tr&gt;</span>
445
<a name="l00356"></a>00356 <span class="comment">///    &lt;td&gt;COMPARE_ERROR&lt;/td&gt;</span>
446
<a name="l00357"></a>00357 <span class="comment">///    &lt;td&gt;Compare error. Issued, e.g. when the in order compare fails&lt;/td&gt;</span>
447
<a name="l00358"></a>00358 <span class="comment">///  &lt;/tr&gt;</span>
448
<a name="l00359"></a>00359 <span class="comment">///  &lt;tr&gt;</span>
449
<a name="l00360"></a>00360 <span class="comment">///    &lt;td&gt;SUBSCRIBER_ERROR&lt;/td&gt;</span>
450
<a name="l00361"></a>00361 <span class="comment">///    &lt;td&gt;Subscriber error. Issued, e.g. when the call to cl_syoscb::get_subscriber() fails&lt;/td&gt;</span>
451
<a name="l00362"></a>00362 <span class="comment">///  &lt;/tr&gt;</span>
452
<a name="l00363"></a>00363 <span class="comment">///  &lt;/table&gt;</span>
453
<a name="l00364"></a>00364 <span class="comment">///   </span>
454
<a name="l00365"></a>00365 <span class="comment">/// @section sMultipleQueueRefs Multiple queue references</span>
455
<a name="l00366"></a>00366 <span class="comment">/// Both the top level class cl_syoscb and the configuration class cl_syoscb_cfg contains</span>
456
<a name="l00367"></a>00367 <span class="comment">/// handles to all queues. The former uses an ordinary array which provides a fast way of</span>
457
<a name="l00368"></a>00368 <span class="comment">/// looping over the queues and the latter an associative which makes it easy to find</span>
458
<a name="l00369"></a>00369 <span class="comment">/// a queue using only its name.</span>
459
<a name="l00370"></a>00370 <span class="comment"></span>
460
<a name="l00371"></a>00371 <span class="keyword">package </span>pk_syoscb;<span class="comment"></span>
461
<a name="l00372"></a>00372 <span class="comment">  ////////////////////////////////////////////////////////////////////////////</span>
462
<a name="l00373"></a>00373 <span class="comment"></span>  <span class="comment">// Imported packages</span><span class="comment"></span>
463
<a name="l00374"></a>00374 <span class="comment">  ////////////////////////////////////////////////////////////////////////////</span>
464
<a name="l00375"></a>00375 <span class="comment"></span>  <span class="keyword">import</span> uvm_pkg::*;
465
<a name="l00376"></a>00376   `include <span class="stringliteral">&quot;uvm_macros.svh&quot;</span>
466
<a name="l00377"></a>00377 <span class="comment"></span>
467
<a name="l00378"></a>00378 <span class="comment">  ////////////////////////////////////////////////////////////////////////////</span>
468
<a name="l00379"></a>00379 <span class="comment"></span>  <span class="comment">// Type definitions</span><span class="comment"></span>
469
<a name="l00380"></a>00380 <span class="comment">  ////////////////////////////////////////////////////////////////////////////</span>
470
<a name="l00381"></a>00381 <span class="comment"></span>  <span class="keyword">typedef</span> <span class="keyword">class </span><a class="code" href="classcl__syoscb.html" title="Top level class implementing the root of the SyoSil UVM scoreboard.">cl_syoscb</a>;
471
<a name="l00382"></a>00382   <span class="keyword">typedef</span> <span class="keyword">class </span><a class="code" href="classcl__syoscb__cfg.html" title="Configuration class for the SyoSil UVM scoreboard.">cl_syoscb_cfg</a>;
472
<a name="l00383"></a>00383   <span class="keyword">typedef</span> <span class="keyword">class </span><a class="code" href="classcl__syoscb__queue.html" title="Class which base concet of a queue.">cl_syoscb_queue</a>;
473
<a name="l00384"></a>00384 <span class="comment"></span>
474
<a name="l00385"></a>00385 <span class="comment">  ////////////////////////////////////////////////////////////////////////////</span>
475
<a name="l00386"></a>00386 <span class="comment"></span>  <span class="comment">// Package source files</span><span class="comment"></span>
476
<a name="l00387"></a>00387 <span class="comment">  ////////////////////////////////////////////////////////////////////////////</span>
477
<a name="l00388"></a>00388 <span class="comment"></span>  `include <span class="stringliteral">&quot;cl_syoscb_cfg_pl.svh&quot;</span>
478
<a name="l00389"></a>00389   `include <span class="stringliteral">&quot;cl_syoscb_cfg.svh&quot;</span>
479
<a name="l00390"></a>00390   `include <span class="stringliteral">&quot;cl_syoscb_item.svh&quot;</span>
480
<a name="l00391"></a>00391   `include <span class="stringliteral">&quot;cl_syoscb_queue_iterator_base.svh&quot;</span>
481
<a name="l00392"></a>00392   `include <span class="stringliteral">&quot;cl_syoscb_queue_iterator_std.svh&quot;</span>
482
<a name="l00393"></a>00393   `include <span class="stringliteral">&quot;cl_syoscb_queue.svh&quot;</span>
483
<a name="l00394"></a>00394   `include <span class="stringliteral">&quot;cl_syoscb_queue_std.svh&quot;</span>
484
<a name="l00395"></a>00395   `include <span class="stringliteral">&quot;cl_syoscb_compare_base.svh&quot;</span>
485
<a name="l00396"></a>00396   `include <span class="stringliteral">&quot;cl_syoscb_compare.svh&quot;</span>
486
<a name="l00397"></a>00397   `include <span class="stringliteral">&quot;cl_syoscb_compare_ooo.svh&quot;</span>
487
<a name="l00398"></a>00398   `include <span class="stringliteral">&quot;cl_syoscb_compare_io.svh&quot;</span>
488
<a name="l00399"></a>00399   `include <span class="stringliteral">&quot;cl_syoscb_compare_iop.svh&quot;</span>
489
<a name="l00400"></a>00400   `include <span class="stringliteral">&quot;cl_syoscb_report_catcher.svh&quot;</span>
490
<a name="l00401"></a>00401   `include <span class="stringliteral">&quot;cl_syoscb_subscriber.svh&quot;</span>
491
<a name="l00402"></a>00402   `include <span class="stringliteral">&quot;cl_syoscb.svh&quot;</span>
492
<a name="l00403"></a>00403 endpackage: pk_syoscb
493
<a name="l00404"></a>00404
494
<a name="l00405"></a>00405 `endif <span class="comment">//  __PK_SYOSCB_SV__</span>
495
</pre></div></div>
496
<!--- window showing the filter options -->
497
<div id="MSearchSelectWindow"
498
     onmouseover="return searchBox.OnSearchSelectShow()"
499
     onmouseout="return searchBox.OnSearchSelectHide()"
500
     onkeydown="return searchBox.OnSearchSelectKey(event)">
501
<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>
502
 
503
<!-- iframe showing the search results (closed by default) -->
504
<div id="MSearchResultsWindow">
505
<iframe src="" frameborder="0"
506
        name="MSearchResults" id="MSearchResults">
507
</iframe>
508
</div>
509
 
510
<!--*************************************************************************-->
511
<!-- $Id: idv_dox_footer.html 136 2010-05-31 19:13:27Z seanoboyle $          -->
512
<!--*************************************************************************-->
513
<!--   This program is free software: you can redistribute it and/or modify  -->
514
<!--   it under the terms of the GNU General Public License as published by  -->
515
<!--   the Free Software Foundation, either version 3 of the License, or     -->
516
<!--   (at your option) any later version.                                   -->
517
<!--                                                                         -->
518
<!--   This program is distributed in the hope that it will be useful,       -->
519
<!--   but WITHOUT ANY WARRANTY; without even the implied warranty of        -->
520
<!--   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         -->
521
<!--   GNU General Public License for more details.                          -->
522
<!--                                                                         -->
523
<!--   You should have received a copy of the GNU General Public License     -->
524
<!--   along with this program.  If not, see http://www.gnu.org/licenses/.   -->
525
<!--                                                                         -->
526
<!--*************************************************************************-->
527
<!-- Title:        IDV Doxygen Footer File                                   -->
528
<!-- Description:  This file is a doxygen footer with the IDV logo and a     -->
529
<!--               and a reference to the GNU FDL License.                   -->
530
<!--                                                                         -->
531
<!-- Original Author: Sean O'Boyle                                           -->
532
<!-- Contact:         seanoboyle@intelligentdv.com                           -->
533
<!-- Company:         Intelligent Design Verification                        -->
534
<!-- Company URL:     http://intelligentdv.com                               -->
535
<!--                                                                         -->
536
<!-- Download the most recent version here:                                  -->
537
<!--                  http://intelligentdv.com/downloads                     -->
538
<!--                                                                         -->
539
<!-- File Bugs Here:  http://bugs.intelligentdv.com                          -->
540
<!--        Project:  DoxygenFilterSV                                        -->
541
<!--                                                                         -->
542
<!-- File: idv_dox_header.xml                                                -->
543
<!-- $LastChangedBy: seanoboyle $                                            -->
544
<!-- $LastChangedDate: 2010-05-31 12:13:27 -0700 (Mon, 31 May 2010) $        -->
545
<!-- $LastChangedRevision: 136 $                                             -->
546
<!--                                                                         -->
547
<!--*************************************************************************-->
548
 
549
<br>
550
<table border="1" width = "100%">
551
  <tr>
552
    <td width = "20%">
553
     <img src="syosil.jpg">
554
    </td>
555
    <td width = "60%">
556
       <address style="text-align: center;">
557
       Project: SyoSil ApS UVM Scoreboard, Revision: 1.0.2.5<br>
558
       <br>
559
       Copyright 2014-2015 SyoSil ApS<br>
560
       All Rights Reserved Worldwide<br>
561
       <br>
562
      Licensed under the Apache License, Version 2.0 (the "License"); you may not
563
      use this file except in compliance with the License.  You may obtain a copy of
564
      the License at<br>
565
      <br>
566
       <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a><br>
567
      <br>
568
      Unless required by applicable law or agreed to in writing, software distributed under the License is
569
      distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
570
      implied. See the License for the specific language governing permissions and limitations under
571
      the License.
572
      </address>
573
    </td>
574
    <td width = "20%">
575
      <address style="text-align: right;"><small>
576
      <a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a><br>
577
      <a href="http://www.doxygen.org/index.html">Doxygen</a> Version: 1.6.1<br>
578
      <a href="http://www.intelligentdv.com/index.html">IDV SV Filter</a> Version: 2.6.2<br>
579
      Sat Nov 28 05:41:54 2015</small></address>
580
   </td>
581
  </tr>
582
</table>
583
<address style="text-align: left;"><small>
584
Find a documentation bug?  Report bugs to: <a href="http://bugs.intelligentdv.com/">bugs.intelligentdv.com</a> Project: DoxygenFilterSV
585
</small></address>
586
</body>
587
</html>

powered by: WebSVN 2.1.0

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