ruby-vpi 17.0.0 → 18.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +8 -6
- data/Rakefile +4 -4
- data/doc/common.css +6 -9
- data/doc/common.inc +3 -3
- data/doc/common.tpl +14 -6
- data/doc/history.html +152 -44
- data/doc/history.inc +55 -3
- data/doc/history.yaml +62 -2
- data/doc/intro.inc +20 -16
- data/doc/manual.doc +23 -9
- data/doc/manual.html +232 -200
- data/doc/memo.doc +7 -6
- data/doc/memo.html +28 -17
- data/doc/readme.doc +1 -1
- data/doc/readme.html +51 -35
- data/doc/rss.xml +96 -70
- data/ext/Rakefile +24 -11
- data/ext/swig_vpi.h +1 -1
- data/ext/swig_wrap.cin +17 -42
- data/lib/ruby-vpi/pli.tab +1 -0
- data/lib/ruby-vpi/runner.rb +34 -10
- data/lib/ruby-vpi/vpi.rb +483 -438
- data/ref/c/annotated.html +1 -1
- data/ref/c/common_8h.html +1 -1
- data/ref/c/files.html +1 -1
- data/ref/c/functions.html +1 -1
- data/ref/c/functions_vars.html +1 -1
- data/ref/c/globals.html +1 -1
- data/ref/c/globals_0x63.html +1 -1
- data/ref/c/globals_0x65.html +1 -1
- data/ref/c/globals_0x66.html +1 -1
- data/ref/c/globals_0x6d.html +1 -1
- data/ref/c/globals_0x70.html +1 -1
- data/ref/c/globals_0x72.html +1 -1
- data/ref/c/globals_0x73.html +1 -1
- data/ref/c/globals_0x74.html +1 -1
- data/ref/c/globals_0x76.html +1 -1
- data/ref/c/globals_0x78.html +1 -1
- data/ref/c/globals_defs.html +1 -1
- data/ref/c/globals_defs_0x65.html +1 -1
- data/ref/c/globals_defs_0x70.html +1 -1
- data/ref/c/globals_defs_0x76.html +1 -1
- data/ref/c/globals_defs_0x78.html +1 -1
- data/ref/c/globals_enum.html +1 -1
- data/ref/c/globals_eval.html +1 -1
- data/ref/c/globals_func.html +1 -1
- data/ref/c/globals_type.html +1 -1
- data/ref/c/globals_vars.html +1 -1
- data/ref/c/index.html +1 -1
- data/ref/c/main_8c.html +1 -1
- data/ref/c/main_8h.html +1 -1
- data/ref/c/relay_8c.html +1 -1
- data/ref/c/relay_8h.html +1 -1
- data/ref/c/structt__cb__data.html +1 -1
- data/ref/c/structt__vpi__delay.html +1 -1
- data/ref/c/structt__vpi__error__info.html +1 -1
- data/ref/c/structt__vpi__strengthval.html +1 -1
- data/ref/c/structt__vpi__systf__data.html +1 -1
- data/ref/c/structt__vpi__time.html +1 -1
- data/ref/c/structt__vpi__value.html +1 -1
- data/ref/c/structt__vpi__vecval.html +1 -1
- data/ref/c/structt__vpi__vlog__info.html +1 -1
- data/ref/c/verilog_8h.html +1 -1
- data/ref/c/vlog_8c.html +1 -1
- data/ref/c/vlog_8h.html +1 -1
- data/ref/c/vpi__user_8h.html +1 -1
- data/ref/ruby/classes/RDoc.html +5 -5
- data/ref/ruby/classes/RDoc.src/{M000058.html → M000061.html} +0 -0
- data/ref/ruby/classes/String.html +24 -24
- data/ref/ruby/classes/String.src/M000022.html +23 -5
- data/ref/ruby/classes/String.src/M000023.html +28 -5
- data/ref/ruby/classes/String.src/M000024.html +5 -23
- data/ref/ruby/classes/String.src/M000025.html +5 -28
- data/ref/ruby/classes/Vpi/Handle.html +94 -49
- data/ref/ruby/classes/Vpi/Handle.src/M000035.html +4 -4
- data/ref/ruby/classes/Vpi/Handle.src/M000036.html +4 -4
- data/ref/ruby/classes/Vpi/Handle.src/M000037.html +4 -4
- data/ref/ruby/classes/Vpi/Handle.src/M000038.html +4 -4
- data/ref/ruby/classes/Vpi/Handle.src/M000039.html +4 -4
- data/ref/ruby/classes/Vpi/Handle.src/M000040.html +4 -4
- data/ref/ruby/classes/Vpi/Handle.src/M000041.html +4 -4
- data/ref/ruby/classes/Vpi/Handle.src/M000042.html +4 -4
- data/ref/ruby/classes/Vpi/Handle.src/M000043.html +7 -7
- data/ref/ruby/classes/Vpi/Handle.src/M000044.html +7 -7
- data/ref/ruby/classes/Vpi/Handle.src/M000045.html +8 -8
- data/ref/ruby/classes/Vpi/Handle.src/M000046.html +36 -30
- data/ref/ruby/classes/Vpi/Handle.src/M000047.html +72 -67
- data/ref/ruby/classes/Vpi/Handle.src/M000048.html +6 -17
- data/ref/ruby/classes/Vpi/Handle.src/M000049.html +19 -0
- data/ref/ruby/classes/Vpi/Handle.src/M000050.html +5 -5
- data/ref/ruby/classes/Vpi/Handle.src/M000051.html +16 -10
- data/ref/ruby/classes/Vpi/Handle.src/M000053.html +5 -18
- data/ref/ruby/classes/Vpi/Handle.src/M000054.html +11 -76
- data/ref/ruby/classes/Vpi/Handle.src/M000056.html +31 -0
- data/ref/ruby/classes/Vpi/Handle.src/M000057.html +40 -0
- data/ref/ruby/classes/Vpi/S_vpi_time.html +16 -16
- data/ref/ruby/classes/Vpi/S_vpi_time.src/{M000055.html → M000058.html} +4 -4
- data/ref/ruby/classes/Vpi/S_vpi_time.src/M000059.html +19 -0
- data/ref/ruby/classes/Vpi/S_vpi_value.src/M000032.html +4 -4
- data/ref/ruby/classes/Vpi/S_vpi_value.src/M000033.html +4 -4
- data/ref/ruby/classes/Vpi/S_vpi_value.src/M000034.html +4 -4
- data/ref/ruby/classes/Vpi.html +0 -7
- data/ref/ruby/classes/Vpi.src/M000029.html +14 -14
- data/ref/ruby/classes/Vpi.src/M000030.html +25 -24
- data/ref/ruby/classes/Vpi.src/M000031.html +6 -6
- data/ref/ruby/created.rid +1 -1
- data/ref/ruby/files/bin/convert_rb.html +1 -1
- data/ref/ruby/files/bin/generate_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/erb_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/float_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/integer_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/rake_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/rcov_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/rdoc_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/runner_boot_loader_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/runner_proxy_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/runner_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/util_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/verilog_parser_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/vpi_rb.html +8 -1
- data/ref/ruby/files/lib/ruby-vpi_rb.html +1 -1
- data/ref/ruby/fr_method_index.html +19 -16
- data/samp/register_file/register_file.v +1 -1
- data/samp/register_file/register_file_spec.rb +9 -5
- metadata +42 -38
- data/ref/ruby/classes/Vpi/S_vpi_time.src/M000056.html +0 -19
data/doc/manual.html
CHANGED
|
@@ -5,31 +5,31 @@
|
|
|
5
5
|
<link rel="stylesheet" type="text/css" href="common.css" media="screen" />
|
|
6
6
|
<link rel="stylesheet" type="text/css" href="print.css" media="print" />
|
|
7
7
|
<link rel="alternate" type="application/rss+xml" href="http://ruby-vpi.rubyforge.org/doc/rss.xml" title="RSS feed for this project." />
|
|
8
|
-
<title>Ruby-VPI
|
|
8
|
+
<title>Ruby-VPI 18.0.0 user manual</title>
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
11
|
+
<div id="site-links">
|
|
12
|
+
<a href="readme.html">Home</a>
|
|
13
|
+
· <a href="manual.html">Manual</a>
|
|
14
|
+
· <a href="memo.html">Memo</a>
|
|
15
|
+
· <a href="history.html">History</a>
|
|
16
|
+
<hr style="display: none"/>
|
|
17
|
+
</div>
|
|
18
|
+
|
|
11
19
|
<div id="toc-links">
|
|
12
|
-
|
|
13
|
-
<a href="#toc:tip">Tips</a> ·
|
|
14
|
-
<a href="#toc:note">Notes</a> ·
|
|
15
|
-
<a href="#toc:caution">Cautions</a> ·
|
|
16
|
-
<a href="#toc:figure">Figures</a> ·
|
|
17
|
-
<a href="#toc:table">Tables</a> ·
|
|
18
|
-
<a href="#toc:example">Examples</a> ·
|
|
19
|
-
|
|
20
|
-
<a href="readme.html" style="color: green; font-size: larger;">Home page</a>
|
|
20
|
+
<a href="#toc:contents">Contents</a> · <a href="#toc:tip">Tips</a> · <a href="#toc:caution">Cautions</a> · <a href="#toc:figure">Figures</a> · <a href="#toc:table">Tables</a> · <a href="#toc:example">Examples</a>
|
|
21
21
|
</div>
|
|
22
22
|
|
|
23
23
|
<div id="body">
|
|
24
24
|
<hr style="display: none"/>
|
|
25
25
|
|
|
26
|
-
<div id="Ruby-
|
|
27
|
-
<h1 class="title"><big>Ruby-VPI
|
|
26
|
+
<div id="Ruby-VPI_18.0.0_user_manual" class="front_cover">
|
|
27
|
+
<h1 class="title"><big>Ruby-VPI 18.0.0 user manual</big></h1>
|
|
28
28
|
|
|
29
29
|
<h2 class="author">Suraj N. Kurapati</h2>
|
|
30
30
|
|
|
31
31
|
|
|
32
|
-
<h3 class="date">
|
|
32
|
+
<h3 class="date">31 July 2007</h3>
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
<p>
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
<p>In addition, this manual is distributed as one big HTML file so that you can easily search for a particular topic using nothing more than your web browser’s built-in text search mechanism. This facilitates offline reading, where an Internet search engine is not available.</p>
|
|
45
45
|
|
|
46
46
|
|
|
47
|
-
<p>You can give feedback about this manual and, in general, any aspect of the Ruby-VPI project on the <a href="http://rubyforge.org/forum/?group_id=1339">project forums</a>. Furthermore, you can <a href="#hacking.manual">edit this manual</a> and contribute your improvements to the <a href="http://rubyforge.org/tracker/?group_id=1339">project patches</a>. Finally, you can find the newest version of this manual at the <a href="http://ruby-vpi.rubyforge.org">Ruby-VPI project website</a>.</p>
|
|
47
|
+
<p>You can give feedback about this manual and, in general, any aspect of the Ruby-VPI project on the <a href="http://rubyforge.org/forum/?group_id=1339">project forums</a>. Furthermore, you can <a href="#hacking.manual">edit this manual</a> and contribute your improvements to the <a href="http://rubyforge.org/tracker/?group_id=1339">project patches</a>. Finally, you can find the newest version of this manual at the <a href="http://ruby-vpi.rubyforge.org/">Ruby-VPI project website</a>.</p>
|
|
48
48
|
</div>
|
|
49
49
|
|
|
50
50
|
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
<p>This manual is distributed under <a href="#intro.license">the same license as Ruby-VPI</a>.</p>
|
|
54
54
|
|
|
55
55
|
|
|
56
|
-
<p>The admonition graphics used in this manual are Copyright 2005, 2006 <a href="http://tango.freedesktop.org">Tango Desktop Project</a> and are distributed under <a href="./images/tango/LICENSE">these terms</a>.</p>
|
|
56
|
+
<p>The admonition graphics used in this manual are Copyright 2005, 2006 <a href="http://tango.freedesktop.org/Tango_Desktop_Project">Tango Desktop Project</a> and are distributed under <a href="./images/tango/LICENSE">these terms</a>.</p>
|
|
57
57
|
</div>
|
|
58
58
|
</p>
|
|
59
59
|
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
|
|
65
65
|
<div id="intro" class="chapter">
|
|
66
66
|
<h1 class="title">
|
|
67
|
-
Chapter <a href="#a-
|
|
67
|
+
Chapter <a href="#a-607201618">2</a>
|
|
68
68
|
|
|
69
69
|
<br/><br/>
|
|
70
70
|
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
|
|
91
91
|
<div id="resources" class="section">
|
|
92
92
|
<h2 class="title">
|
|
93
|
-
<a href="#a-
|
|
93
|
+
<a href="#a-605996598">2.1</a>
|
|
94
94
|
|
|
95
95
|
|
|
96
96
|
|
|
@@ -100,20 +100,22 @@
|
|
|
100
100
|
|
|
101
101
|
<div id="Records" class="paragraph">
|
|
102
102
|
<p class="title">Records</p>
|
|
103
|
-
<
|
|
104
|
-
|
|
105
|
-
|
|
103
|
+
<ul>
|
|
104
|
+
<li><a href="history.html#a18.0.0">What’s new</a>
|
|
105
|
+
– release notes for version 18.0.0.
|
|
106
106
|
<ul>
|
|
107
|
-
<li><a href="history.html">
|
|
108
|
-
– a
|
|
107
|
+
<li><a href="history.html">History</a>
|
|
108
|
+
– a record of all release notes.</li>
|
|
109
|
+
<li><a type="application/rss+xml" href="http://ruby-vpi.rubyforge.org/doc/rss.xml"><img src="images/feed-icon-28x28.png" alt="RSS feed for release announcements" style="float: right"/></a> <a href="http://ruby-vpi.rubyforge.org/doc/rss.xml">RSS feed</a>
|
|
110
|
+
– keep track of new releases at your leisure.</li>
|
|
111
|
+
</ul>
|
|
112
|
+
</li>
|
|
109
113
|
<li><a href="memo.html">Plans</a>
|
|
110
114
|
– pending tasks for future releases.</li>
|
|
111
115
|
<li><a href="http://ruby-vpi.rubyforge.org/talks/">Talks</a>
|
|
112
116
|
– materials from presentations and seminars.</li>
|
|
113
117
|
<li><a href="http://ruby-vpi.rubyforge.org/papers/">Papers</a>
|
|
114
118
|
– research publications.</li>
|
|
115
|
-
<li><a href="http://ruby-vpi.rubyforge.org/papers/masters_thesis.html#tth_sEc5.2">Motivation</a>
|
|
116
|
-
– why does Ruby-VPI exist?</li>
|
|
117
119
|
</ul>
|
|
118
120
|
</div>
|
|
119
121
|
|
|
@@ -121,8 +123,10 @@
|
|
|
121
123
|
<div id="Documentation" class="paragraph">
|
|
122
124
|
<p class="title">Documentation</p>
|
|
123
125
|
<ul>
|
|
124
|
-
<li><a href="
|
|
125
|
-
–
|
|
126
|
+
<li><a href="http://ruby-vpi.rubyforge.org/papers/masters_thesis.html#tth_sEc5.2">Motivation</a>
|
|
127
|
+
– why was Ruby-VPI developed?</li>
|
|
128
|
+
<li><a href="manual.html">User manual</a>
|
|
129
|
+
– complete documentation for users.
|
|
126
130
|
<ul>
|
|
127
131
|
<li><a href="manual.html#usage.tutorial">Tutorial</a>
|
|
128
132
|
– learn how to use Ruby-VPI quickly.</li>
|
|
@@ -139,7 +143,7 @@
|
|
|
139
143
|
<ul>
|
|
140
144
|
<li><a href="http://rubyforge.org/frs/?group_id=1339">Downloads</a>
|
|
141
145
|
– obtain release packages</li>
|
|
142
|
-
<li><a href="http://ruby-vpi.rubyforge.org/src/ruby-vpi">Source code</a>
|
|
146
|
+
<li><a href="http://ruby-vpi.rubyforge.org/src/ruby-vpi/">Source code</a>
|
|
143
147
|
– browse online or obtain with <a href="http://darcs.net">Darcs</a>.</li>
|
|
144
148
|
<li><a href="http://rubyforge.org/forum/?group_id=1339">Forums</a>
|
|
145
149
|
– discuss things and ask questions.</li>
|
|
@@ -149,7 +153,7 @@
|
|
|
149
153
|
– submit patches to source code.</li>
|
|
150
154
|
<li><a href="http://rubyforge.org/tracker/?group_id=1339">Requests</a>
|
|
151
155
|
– request new features or get support.</li>
|
|
152
|
-
<li><a href="http://rubyforge.org/projects/ruby-vpi">Project portal</a>
|
|
156
|
+
<li><a href="http://rubyforge.org/projects/ruby-vpi/">Project portal</a>
|
|
153
157
|
– hosted generously by <a href="http://rubyforge.org">RubyForge</a>.</li>
|
|
154
158
|
</ul>
|
|
155
159
|
</div>
|
|
@@ -164,7 +168,7 @@
|
|
|
164
168
|
|
|
165
169
|
<div id="intro.features" class="section">
|
|
166
170
|
<h2 class="title">
|
|
167
|
-
<a href="#a-
|
|
171
|
+
<a href="#a-605842608">2.2</a>
|
|
168
172
|
|
|
169
173
|
|
|
170
174
|
|
|
@@ -177,7 +181,7 @@
|
|
|
177
181
|
<ul>
|
|
178
182
|
<li>Supports the <em>entire</em> <a href="http://ieeexplore.ieee.org/xpl/standardstoc.jsp?isnumber=33945"><span class="caps">IEEE 1364</span>-2005 Verilog VPI</a> standard.</li>
|
|
179
183
|
<li>Works with all <a href="#intro.reqs">major Verilog simulators</a> available today.</li>
|
|
180
|
-
<li>Compiled <em>just once</em> during <a href="manual.html#setup.
|
|
184
|
+
<li>Compiled <em>just once</em> during <a href="manual.html#setup.inst">installation</a> and used forever!</li>
|
|
181
185
|
</ul>
|
|
182
186
|
</div>
|
|
183
187
|
|
|
@@ -198,7 +202,7 @@
|
|
|
198
202
|
<li>Eliminates unneccesary work:
|
|
199
203
|
<ul>
|
|
200
204
|
<li><a href="manual.html#usage.tutorial.specification">Specifications</a> are readable, portable, and <em>executable</em>.</li>
|
|
201
|
-
<li>The <a href="manual.html#usage.tools.generate
|
|
205
|
+
<li>The <a href="manual.html#usage.tools.generate">automated test generator</a> helps you accomodate design changes with <em>minimal</em> effort.</li>
|
|
202
206
|
<li>There is absolutely <em>no compiling</em>!</li>
|
|
203
207
|
</ul></li>
|
|
204
208
|
</ul>
|
|
@@ -235,7 +239,7 @@
|
|
|
235
239
|
|
|
236
240
|
<div id="intro.reqs" class="section">
|
|
237
241
|
<h2 class="title">
|
|
238
|
-
<a href="#a-
|
|
242
|
+
<a href="#a-607160758">2.3</a>
|
|
239
243
|
|
|
240
244
|
|
|
241
245
|
|
|
@@ -256,12 +260,12 @@
|
|
|
256
260
|
– any version that supports the <tt>-load</tt> option is acceptable.</li>
|
|
257
261
|
<li><a href="http://www.model.com">Mentor Modelsim</a>
|
|
258
262
|
– any version that supports the <tt>-pli</tt> option is acceptable.</li>
|
|
259
|
-
<li><a href="http://www.cadence.com/products/functional_ver/nc-verilog/">Cadence NC-Sim
|
|
260
|
-
– any version that supports the <tt>+loadvpi</tt> option is acceptable
|
|
263
|
+
<li><a href="http://www.cadence.com/products/functional_ver/nc-verilog/">Cadence NC-Sim</a>
|
|
264
|
+
– any version that supports the <tt>+loadvpi</tt> option is <em>mostly</em> acceptable because you <strong>will not</strong> be able to <a href="manual.html#problem.ncsim.vpiForceFlag">force values onto wires</a>.</li>
|
|
261
265
|
<li><a href="http://www.pragmatic-c.com/gpl-cver/">GPL Cver</a>
|
|
262
266
|
– version 2.11a or newer is acceptable.</li>
|
|
263
|
-
<li><a href="http://www.
|
|
264
|
-
– version 0.8 is <em>mostly</em> acceptable
|
|
267
|
+
<li><a href="http://www.geda.seul.org/tools/icarus/index.html">Icarus Verilog</a>
|
|
268
|
+
– version 0.8 is <em>mostly</em> acceptable because you <strong>will not</strong> be able to <a href="manual.html#Accessing_a_handle_s_relatives">access child handles through method calls</a>. The reason for this limitation is explained <a href="manual.html#problems.ivl.vpi_handle_by_name.absolute-paths">in the user manual</a>.</li>
|
|
265
269
|
</ul>
|
|
266
270
|
</div>
|
|
267
271
|
|
|
@@ -273,8 +277,10 @@
|
|
|
273
277
|
– any flavor should be acceptable.</li>
|
|
274
278
|
<li>C compiler
|
|
275
279
|
– the <a href="http://www.gnu.org/software/gcc/" title="GCC">GNU Compiler Collection</a> is preferred, but any C compiler should be acceptable.</li>
|
|
276
|
-
<li><a href="http://www.
|
|
277
|
-
– version 1.
|
|
280
|
+
<li><a href="http://www.swig.org/download.html">SWIG</a>
|
|
281
|
+
– version 1.3.29 or newer is necessary.</li>
|
|
282
|
+
<li><a href="http://www.ruby-lang.org/en/downloads/">Ruby</a>
|
|
283
|
+
– version 1.8 or newer, including header and linkable object files for building extensions, is necessary. You can install Ruby by following <a href="http://www.ruby-lang.org/en/downloads/">these instructions</a>.</li>
|
|
278
284
|
</ul>
|
|
279
285
|
</div>
|
|
280
286
|
|
|
@@ -299,7 +305,7 @@
|
|
|
299
305
|
|
|
300
306
|
<div id="intro.applications" class="section">
|
|
301
307
|
<h2 class="title">
|
|
302
|
-
<a href="#a-
|
|
308
|
+
<a href="#a-607163318">2.4</a>
|
|
303
309
|
|
|
304
310
|
|
|
305
311
|
|
|
@@ -345,7 +351,7 @@
|
|
|
345
351
|
|
|
346
352
|
<div id="intro.appetizers" class="section">
|
|
347
353
|
<h2 class="title">
|
|
348
|
-
<a href="#a-
|
|
354
|
+
<a href="#a-607165918">2.5</a>
|
|
349
355
|
|
|
350
356
|
|
|
351
357
|
|
|
@@ -413,14 +419,15 @@
|
|
|
413
419
|
|
|
414
420
|
<div id="intro.license" class="section">
|
|
415
421
|
<h2 class="title">
|
|
416
|
-
<a href="#a-
|
|
422
|
+
<a href="#a-607168788">2.6</a>
|
|
417
423
|
|
|
418
424
|
|
|
419
425
|
|
|
420
426
|
License
|
|
421
427
|
</h2>
|
|
422
428
|
|
|
423
|
-
<p>Copyright 2006 Suraj N. Kurapati <
|
|
429
|
+
<p>Copyright 2006 Suraj N. Kurapati <SNK at GNA dot ORG><br/>
|
|
430
|
+
Copyright 1999 Kazuhiro HIWADA <HIWADA at KUEE dot KYOTO-U dot AC dot JP><br/></p>
|
|
424
431
|
|
|
425
432
|
|
|
426
433
|
<p>Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
@@ -431,13 +438,14 @@ the Software, and to permit persons to whom the Software is furnished to do so,
|
|
|
431
438
|
subject to the following conditions:</p>
|
|
432
439
|
|
|
433
440
|
|
|
434
|
-
<p>1. All
|
|
435
|
-
(the "Derivatives") and their corresponding machine-readable
|
|
436
|
-
"Code") must include the above copyright notice and this
|
|
441
|
+
<p>1. All copies and substantial portions of the Software, whether modified or
|
|
442
|
+
unmodified, (the "Derivatives") and their corresponding machine-readable
|
|
443
|
+
source code (the "Code") must include the above copyright notice and this
|
|
444
|
+
permission notice.</p>
|
|
437
445
|
|
|
438
446
|
|
|
439
|
-
<p>2.
|
|
440
|
-
|
|
447
|
+
<p>2. The Derivatives, upon distribution, must be accompanied by the Code or, if
|
|
448
|
+
the Code is obtainable for no more than the cost of distribution plus a
|
|
441
449
|
nominal fee, by information on how to obtain the Code.</p>
|
|
442
450
|
|
|
443
451
|
|
|
@@ -457,7 +465,7 @@ IMPLIED, INCLUDING <span class="caps">BUT NOT LIMITED TO THE WARRANTIES OF MERCH
|
|
|
457
465
|
|
|
458
466
|
<div id="intro.related-works" class="section">
|
|
459
467
|
<h2 class="title">
|
|
460
|
-
<a href="#a-
|
|
468
|
+
<a href="#a-607174178">2.7</a>
|
|
461
469
|
|
|
462
470
|
|
|
463
471
|
|
|
@@ -478,7 +486,7 @@ IMPLIED, INCLUDING <span class="caps">BUT NOT LIMITED TO THE WARRANTIES OF MERCH
|
|
|
478
486
|
|
|
479
487
|
<div id="intro.related-works.pli" class="section">
|
|
480
488
|
<h3 class="title">
|
|
481
|
-
<a href="#a-
|
|
489
|
+
<a href="#a-607171238">2.7.1</a>
|
|
482
490
|
|
|
483
491
|
|
|
484
492
|
|
|
@@ -505,7 +513,7 @@ IMPLIED, INCLUDING <span class="caps">BUT NOT LIMITED TO THE WARRANTIES OF MERCH
|
|
|
505
513
|
|
|
506
514
|
<div id="setup" class="chapter">
|
|
507
515
|
<h1 class="title">
|
|
508
|
-
Chapter <a href="#a-
|
|
516
|
+
Chapter <a href="#a-607242278">3</a>
|
|
509
517
|
|
|
510
518
|
<br/><br/>
|
|
511
519
|
|
|
@@ -517,7 +525,7 @@ IMPLIED, INCLUDING <span class="caps">BUT NOT LIMITED TO THE WARRANTIES OF MERCH
|
|
|
517
525
|
|
|
518
526
|
<div id="setup.manifest" class="section">
|
|
519
527
|
<h2 class="title">
|
|
520
|
-
<a href="#a-
|
|
528
|
+
<a href="#a-607204808">3.1</a>
|
|
521
529
|
|
|
522
530
|
|
|
523
531
|
|
|
@@ -543,7 +551,7 @@ IMPLIED, INCLUDING <span class="caps">BUT NOT LIMITED TO THE WARRANTIES OF MERCH
|
|
|
543
551
|
|
|
544
552
|
<div id="setup.reqs" class="section">
|
|
545
553
|
<h2 class="title">
|
|
546
|
-
<a href="#a-
|
|
554
|
+
<a href="#a-607210248">3.2</a>
|
|
547
555
|
|
|
548
556
|
|
|
549
557
|
|
|
@@ -560,7 +568,7 @@ IMPLIED, INCLUDING <span class="caps">BUT NOT LIMITED TO THE WARRANTIES OF MERCH
|
|
|
560
568
|
<div class="tip" id="Add_support_for_your_Verilog_simulator">
|
|
561
569
|
<img src="images/tango/tip.png" alt="tip" class="icon"/>
|
|
562
570
|
|
|
563
|
-
<p class="title"><a href="#a-
|
|
571
|
+
<p class="title"><a href="#a-607207278">Tip 1</a>. Add support for your Verilog simulator</p>
|
|
564
572
|
|
|
565
573
|
Write a <a href="http://rubyforge.org/tracker/?group_id=1339">support request</a> for your simulator, while providing a sample transcript of the commands you use to run a test with your simulator, and I will add support for your simulator in the next release!
|
|
566
574
|
</div>
|
|
@@ -574,7 +582,7 @@ IMPLIED, INCLUDING <span class="caps">BUT NOT LIMITED TO THE WARRANTIES OF MERCH
|
|
|
574
582
|
|
|
575
583
|
<div id="setup.recom" class="section">
|
|
576
584
|
<h2 class="title">
|
|
577
|
-
<a href="#a-
|
|
585
|
+
<a href="#a-607216418">3.3</a>
|
|
578
586
|
|
|
579
587
|
|
|
580
588
|
|
|
@@ -589,7 +597,7 @@ IMPLIED, INCLUDING <span class="caps">BUT NOT LIMITED TO THE WARRANTIES OF MERCH
|
|
|
589
597
|
|
|
590
598
|
<div id="setup.recom.merger" class="section">
|
|
591
599
|
<h3 class="title">
|
|
592
|
-
<a href="#a-
|
|
600
|
+
<a href="#a-607213078">3.3.1</a>
|
|
593
601
|
|
|
594
602
|
|
|
595
603
|
|
|
@@ -633,7 +641,7 @@ IMPLIED, INCLUDING <span class="caps">BUT NOT LIMITED TO THE WARRANTIES OF MERCH
|
|
|
633
641
|
|
|
634
642
|
<div id="setup.inst" class="section">
|
|
635
643
|
<h2 class="title">
|
|
636
|
-
<a href="#a-
|
|
644
|
+
<a href="#a-607225558">3.4</a>
|
|
637
645
|
|
|
638
646
|
|
|
639
647
|
|
|
@@ -647,7 +655,7 @@ IMPLIED, INCLUDING <span class="caps">BUT NOT LIMITED TO THE WARRANTIES OF MERCH
|
|
|
647
655
|
$ gem env gemdir
|
|
648
656
|
/usr/lib/ruby/gems/1.8
|
|
649
657
|
|
|
650
|
-
$ ls -d
|
|
658
|
+
$ ls -d `gem env gemdir`/gems/ruby-vpi*
|
|
651
659
|
/usr/lib/ruby/gems/1.8/gems/ruby-vpi-7.0.0/
|
|
652
660
|
</pre>
|
|
653
661
|
|
|
@@ -656,10 +664,10 @@ $ ls -d /usr/lib/ruby/gems/1.8/gems/ruby-vpi*
|
|
|
656
664
|
<hr style="display: none"/>
|
|
657
665
|
|
|
658
666
|
<div class="admonition">
|
|
659
|
-
<div class="
|
|
660
|
-
<img src="images/tango/
|
|
667
|
+
<div class="tip" id="Tuning_for_maximum_performance">
|
|
668
|
+
<img src="images/tango/tip.png" alt="tip" class="icon"/>
|
|
661
669
|
|
|
662
|
-
<p class="title"><a href="#a-
|
|
670
|
+
<p class="title"><a href="#a-607218968">Tip 2</a>. Tuning for maximum performance</p>
|
|
663
671
|
|
|
664
672
|
You can tune your installation of Ruby-VPI for maximum performance by adding your C compiler’s optimization flag to the <code class="code"><span style="color:#036; font-weight:bold">CFLAGS</span></code> environment variable <em>before</em> you run the <pre>gem install -y ruby-vpi</pre> command. For example, if your C compiler is GCC, then you can set <code class="code"><span style="color:#036; font-weight:bold">CFLAGS</span></code> to <tt>-O9</tt> for maximum optimization.
|
|
665
673
|
</div>
|
|
@@ -670,7 +678,7 @@ $ ls -d /usr/lib/ruby/gems/1.8/gems/ruby-vpi*
|
|
|
670
678
|
|
|
671
679
|
<div id="setup.inst.windows" class="section">
|
|
672
680
|
<h3 class="title">
|
|
673
|
-
<a href="#a-
|
|
681
|
+
<a href="#a-607221498">3.4.1</a>
|
|
674
682
|
|
|
675
683
|
|
|
676
684
|
|
|
@@ -721,7 +729,7 @@ $ ls -d /usr/lib/ruby/gems/1.8/gems/ruby-vpi*
|
|
|
721
729
|
|
|
722
730
|
<div id="setup.maintenance" class="section">
|
|
723
731
|
<h2 class="title">
|
|
724
|
-
<a href="#a-
|
|
732
|
+
<a href="#a-607227838">3.5</a>
|
|
725
733
|
|
|
726
734
|
|
|
727
735
|
|
|
@@ -745,7 +753,7 @@ $ ls -d /usr/lib/ruby/gems/1.8/gems/ruby-vpi*
|
|
|
745
753
|
|
|
746
754
|
<div id="organization" class="chapter">
|
|
747
755
|
<h1 class="title">
|
|
748
|
-
Chapter <a href="#a-
|
|
756
|
+
Chapter <a href="#a-607196488">4</a>
|
|
749
757
|
|
|
750
758
|
<br/><br/>
|
|
751
759
|
|
|
@@ -765,7 +773,7 @@ $ ls -d /usr/lib/ruby/gems/1.8/gems/ruby-vpi*
|
|
|
765
773
|
<div class="figure" id="fig:organization.detail">
|
|
766
774
|
|
|
767
775
|
|
|
768
|
-
<p class="title"><a href="#a-
|
|
776
|
+
<p class="title"><a href="#a-607244878">Figure 1</a>. Where does Ruby-VPI fit in?</p>
|
|
769
777
|
|
|
770
778
|
<img src="figures/organization_detailed.png" alt="" />
|
|
771
779
|
</div>
|
|
@@ -779,7 +787,7 @@ As <a href="#fig:organization.detail">Figure 1</a> shows, Ruby-VPI is composed o
|
|
|
779
787
|
|
|
780
788
|
<div id="overview.relay" class="section">
|
|
781
789
|
<h2 class="title">
|
|
782
|
-
<a href="#a-
|
|
790
|
+
<a href="#a-607251168">4.1</a>
|
|
783
791
|
|
|
784
792
|
|
|
785
793
|
|
|
@@ -802,7 +810,7 @@ As <a href="#fig:organization.detail">Figure 1</a> shows, Ruby-VPI is composed o
|
|
|
802
810
|
<div class="figure" id="fig:ruby_relay">
|
|
803
811
|
|
|
804
812
|
|
|
805
|
-
<p class="title"><a href="#a-
|
|
813
|
+
<p class="title"><a href="#a-607247688">Figure 2</a>. Interaction between Ruby and Verilog</p>
|
|
806
814
|
|
|
807
815
|
<img src="figures/ruby_relay.png" alt="" />
|
|
808
816
|
|
|
@@ -828,7 +836,7 @@ Another means of transferring control from the specification to the Verilog simu
|
|
|
828
836
|
|
|
829
837
|
<div id="organization.tests" class="section">
|
|
830
838
|
<h2 class="title">
|
|
831
|
-
<a href="#a-
|
|
839
|
+
<a href="#a-607256738">4.2</a>
|
|
832
840
|
|
|
833
841
|
|
|
834
842
|
|
|
@@ -845,7 +853,7 @@ Another means of transferring control from the specification to the Verilog simu
|
|
|
845
853
|
<div class="figure" id="fig:organization">
|
|
846
854
|
|
|
847
855
|
|
|
848
|
-
<p class="title"><a href="#a-
|
|
856
|
+
<p class="title"><a href="#a-607253638">Figure 3</a>. Organization of a test in Ruby-VPI</p>
|
|
849
857
|
|
|
850
858
|
<img src="figures/organization.png" alt="" />
|
|
851
859
|
</div>
|
|
@@ -868,7 +876,7 @@ Another means of transferring control from the specification to the Verilog simu
|
|
|
868
876
|
|
|
869
877
|
<div id="VPI_in_Ruby" class="section">
|
|
870
878
|
<h2 class="title">
|
|
871
|
-
<a href="#a-
|
|
879
|
+
<a href="#a-607326178">4.3</a>
|
|
872
880
|
|
|
873
881
|
|
|
874
882
|
|
|
@@ -880,7 +888,7 @@ Another means of transferring control from the specification to the Verilog simu
|
|
|
880
888
|
|
|
881
889
|
<div id="Deviations_from_the_VPI_standard" class="section">
|
|
882
890
|
<h3 class="title">
|
|
883
|
-
<a href="#a-
|
|
891
|
+
<a href="#a-607265658">4.3.1</a>
|
|
884
892
|
|
|
885
893
|
|
|
886
894
|
|
|
@@ -895,7 +903,7 @@ Another means of transferring control from the specification to the Verilog simu
|
|
|
895
903
|
|
|
896
904
|
<div id="Names_are_capitalized" class="section">
|
|
897
905
|
<h4 class="title">
|
|
898
|
-
<a href="#a-
|
|
906
|
+
<a href="#a-607259228">4.3.1.1</a>
|
|
899
907
|
|
|
900
908
|
|
|
901
909
|
|
|
@@ -916,7 +924,7 @@ Another means of transferring control from the specification to the Verilog simu
|
|
|
916
924
|
|
|
917
925
|
<div id="a_vprintf__is__printf_" class="section">
|
|
918
926
|
<h4 class="title">
|
|
919
|
-
<a href="#a-
|
|
927
|
+
<a href="#a-607261728">4.3.1.2</a>
|
|
920
928
|
|
|
921
929
|
|
|
922
930
|
|
|
@@ -927,7 +935,7 @@ Another means of transferring control from the specification to the Verilog simu
|
|
|
927
935
|
|
|
928
936
|
|
|
929
937
|
<ul>
|
|
930
|
-
<li>Ruby represents <a href="http://
|
|
938
|
+
<li>Ruby represents <a href="http://phrogz.net/ProgrammingRuby/tut_methods.html#variablelengthargumentlists">variable argument lists as arrays</a> instead of defining a special datatype, such as <code class="code">va_list</code>, for them.</li>
|
|
931
939
|
</ul>
|
|
932
940
|
|
|
933
941
|
|
|
@@ -953,7 +961,7 @@ Another means of transferring control from the specification to the Verilog simu
|
|
|
953
961
|
|
|
954
962
|
<div id="vpi.handles" class="section">
|
|
955
963
|
<h3 class="title">
|
|
956
|
-
<a href="#a-
|
|
964
|
+
<a href="#a-607291198">4.3.2</a>
|
|
957
965
|
|
|
958
966
|
|
|
959
967
|
|
|
@@ -982,7 +990,7 @@ Another means of transferring control from the specification to the Verilog simu
|
|
|
982
990
|
|
|
983
991
|
<div id="Accessing_a_handle_s_relatives" class="section">
|
|
984
992
|
<h4 class="title">
|
|
985
|
-
<a href="#a-
|
|
993
|
+
<a href="#a-607270878">4.3.2.2</a>
|
|
986
994
|
|
|
987
995
|
|
|
988
996
|
|
|
@@ -1019,7 +1027,7 @@ baz = vpi_handle_by_name( <span style="background-color:#fff0f0"><span style="co
|
|
|
1019
1027
|
|
|
1020
1028
|
<div id="Accessing_a_handle_s_properties" class="section">
|
|
1021
1029
|
<h4 class="title">
|
|
1022
|
-
<a href="#a-
|
|
1030
|
+
<a href="#a-607273818">4.3.2.3</a>
|
|
1023
1031
|
|
|
1024
1032
|
|
|
1025
1033
|
|
|
@@ -1062,7 +1070,7 @@ result = wrapper.value.str.to_i( <span style="color:#00D; font-weight:bold">16</
|
|
|
1062
1070
|
<div class="figure" id="fig:method_naming_format">
|
|
1063
1071
|
|
|
1064
1072
|
|
|
1065
|
-
<p class="title"><a href="#a-
|
|
1073
|
+
<p class="title"><a href="#a-607276618">Figure 4</a>. Method naming format for accessing a handle’s properties</p>
|
|
1066
1074
|
|
|
1067
1075
|
<table>
|
|
1068
1076
|
<tr>
|
|
@@ -1115,7 +1123,7 @@ result = wrapper.value.str.to_i( <span style="color:#00D; font-weight:bold">16</
|
|
|
1115
1123
|
<div class="table" id="tbl:accessors">
|
|
1116
1124
|
|
|
1117
1125
|
|
|
1118
|
-
<p class="title"><a href="#a-
|
|
1126
|
+
<p class="title"><a href="#a-607279048">Table 1</a>. Possible accessors and their implications</p>
|
|
1119
1127
|
|
|
1120
1128
|
<table>
|
|
1121
1129
|
<tr>
|
|
@@ -1169,7 +1177,7 @@ result = wrapper.value.str.to_i( <span style="color:#00D; font-weight:bold">16</
|
|
|
1169
1177
|
<div class="table" id="ex:properties">
|
|
1170
1178
|
|
|
1171
1179
|
|
|
1172
|
-
<p class="title"><a href="#a-
|
|
1180
|
+
<p class="title"><a href="#a-607281988">Table 2</a>. Examples of accessing a handle’s properties</p>
|
|
1173
1181
|
|
|
1174
1182
|
<table>
|
|
1175
1183
|
<tr>
|
|
@@ -1494,7 +1502,7 @@ result = wrapper.value.str.to_i( <span style="color:#00D; font-weight:bold">16</
|
|
|
1494
1502
|
|
|
1495
1503
|
<div id="vpi.callbacks" class="section">
|
|
1496
1504
|
<h3 class="title">
|
|
1497
|
-
<a href="#a-
|
|
1505
|
+
<a href="#a-607299628">4.3.3</a>
|
|
1498
1506
|
|
|
1499
1507
|
|
|
1500
1508
|
|
|
@@ -1514,7 +1522,7 @@ result = wrapper.value.str.to_i( <span style="color:#00D; font-weight:bold">16</
|
|
|
1514
1522
|
<div class="example" id="ex:callback">
|
|
1515
1523
|
|
|
1516
1524
|
|
|
1517
|
-
<p class="title"><a href="#a-
|
|
1525
|
+
<p class="title"><a href="#a-607295148">Example 1</a>. Using a callback for value change notification</p>
|
|
1518
1526
|
|
|
1519
1527
|
<p>This example shows how to use a callback for notification of changes in a handle’s <code class="code"><span style="color:#036; font-weight:bold">VpiIntVal</span></code> property. When you no longer need this callback, you can tear it down using <code class="code">vpi_remove_cb(cb_handle)</code>.</p>
|
|
1520
1528
|
|
|
@@ -1563,7 +1571,7 @@ cbHandle = vpi_register_cb(cbData) <span style="color:#080; font-weight:bold">do
|
|
|
1563
1571
|
|
|
1564
1572
|
<div id="usage" class="chapter">
|
|
1565
1573
|
<h1 class="title">
|
|
1566
|
-
Chapter <a href="#a-
|
|
1574
|
+
Chapter <a href="#a-607334198">5</a>
|
|
1567
1575
|
|
|
1568
1576
|
<br/><br/>
|
|
1569
1577
|
|
|
@@ -1575,7 +1583,7 @@ cbHandle = vpi_register_cb(cbData) <span style="color:#080; font-weight:bold">do
|
|
|
1575
1583
|
|
|
1576
1584
|
<div id="usage.prototyping" class="section">
|
|
1577
1585
|
<h2 class="title">
|
|
1578
|
-
<a href="#a-
|
|
1586
|
+
<a href="#a-607215298">5.1</a>
|
|
1579
1587
|
|
|
1580
1588
|
|
|
1581
1589
|
|
|
@@ -1617,7 +1625,7 @@ cbHandle = vpi_register_cb(cbData) <span style="color:#080; font-weight:bold">do
|
|
|
1617
1625
|
|
|
1618
1626
|
<div id="How_does_prototyping_work_" class="section">
|
|
1619
1627
|
<h3 class="title">
|
|
1620
|
-
<a href="#a-
|
|
1628
|
+
<a href="#a-607205498">5.1.2</a>
|
|
1621
1629
|
|
|
1622
1630
|
|
|
1623
1631
|
|
|
@@ -1639,7 +1647,7 @@ cbHandle = vpi_register_cb(cbData) <span style="color:#080; font-weight:bold">do
|
|
|
1639
1647
|
|
|
1640
1648
|
<div id="usage.debugger" class="section">
|
|
1641
1649
|
<h2 class="title">
|
|
1642
|
-
<a href="#a-
|
|
1650
|
+
<a href="#a-607224358">5.2</a>
|
|
1643
1651
|
|
|
1644
1652
|
|
|
1645
1653
|
|
|
@@ -1660,7 +1668,7 @@ cbHandle = vpi_register_cb(cbData) <span style="color:#080; font-weight:bold">do
|
|
|
1660
1668
|
|
|
1661
1669
|
<div id="usage.debugger.init" class="section">
|
|
1662
1670
|
<h3 class="title">
|
|
1663
|
-
<a href="#a-
|
|
1671
|
+
<a href="#a-607219398">5.2.1</a>
|
|
1664
1672
|
|
|
1665
1673
|
|
|
1666
1674
|
|
|
@@ -1685,7 +1693,7 @@ cbHandle = vpi_register_cb(cbData) <span style="color:#080; font-weight:bold">do
|
|
|
1685
1693
|
|
|
1686
1694
|
<div id="usage.test-runner" class="section">
|
|
1687
1695
|
<h2 class="title">
|
|
1688
|
-
<a href="#a-
|
|
1696
|
+
<a href="#a-607246938">5.3</a>
|
|
1689
1697
|
|
|
1690
1698
|
|
|
1691
1699
|
|
|
@@ -1698,7 +1706,7 @@ cbHandle = vpi_register_cb(cbData) <span style="color:#080; font-weight:bold">do
|
|
|
1698
1706
|
<p>When you invoke a test runner without any arguments, it will show you a list of available tasks:
|
|
1699
1707
|
<pre>$ rake -f your_test_runner.rake
|
|
1700
1708
|
|
|
1701
|
-
(in /home/sun/
|
|
1709
|
+
(in /home/sun/src/ruby-vpi/doc)
|
|
1702
1710
|
rake clean # Remove any temporary products.
|
|
1703
1711
|
rake clobber # Remove any generated file.
|
|
1704
1712
|
rake cver # Simulate with GPL Cver.
|
|
@@ -1715,7 +1723,7 @@ rake vsim # Simulate with Mentor Modelsim.
|
|
|
1715
1723
|
|
|
1716
1724
|
<div id="usage.test-runner.env-vars" class="section">
|
|
1717
1725
|
<h3 class="title">
|
|
1718
|
-
<a href="#a-
|
|
1726
|
+
<a href="#a-607236808">5.3.1</a>
|
|
1719
1727
|
|
|
1720
1728
|
|
|
1721
1729
|
|
|
@@ -1762,7 +1770,7 @@ rake
|
|
|
1762
1770
|
<div class="example" id="Running_a_test_with_environment_variables">
|
|
1763
1771
|
|
|
1764
1772
|
|
|
1765
|
-
<p class="title"><a href="#a-
|
|
1773
|
+
<p class="title"><a href="#a-607232388">Example 2</a>. Running a test with environment variables</p>
|
|
1766
1774
|
|
|
1767
1775
|
<p>Below, we enable the prototype and code coverage analysis:
|
|
1768
1776
|
<pre>rake -f your_test_runner.rake PROTOTYPE=1 COVERAGE=1</pre></p>
|
|
@@ -1786,7 +1794,7 @@ rake
|
|
|
1786
1794
|
|
|
1787
1795
|
<div id="usage.tools" class="section">
|
|
1788
1796
|
<h2 class="title">
|
|
1789
|
-
<a href="#a-
|
|
1797
|
+
<a href="#a-607278778">5.4</a>
|
|
1790
1798
|
|
|
1791
1799
|
|
|
1792
1800
|
|
|
@@ -1822,7 +1830,7 @@ Simulators:
|
|
|
1822
1830
|
|
|
1823
1831
|
<div id="usage.tools.generate" class="section">
|
|
1824
1832
|
<h3 class="title">
|
|
1825
|
-
<a href="#a-
|
|
1833
|
+
<a href="#a-607262938">5.4.1</a>
|
|
1826
1834
|
|
|
1827
1835
|
|
|
1828
1836
|
|
|
@@ -1852,7 +1860,7 @@ A Ruby-VPI test is composed of the following files:
|
|
|
1852
1860
|
<div class="caution" id="Do_not_rename_generated_files">
|
|
1853
1861
|
<img src="images/tango/caution.png" alt="caution" class="icon"/>
|
|
1854
1862
|
|
|
1855
|
-
<p class="title"><a href="#a-
|
|
1863
|
+
<p class="title"><a href="#a-607250958">Caution 1</a>. Do not rename generated files</p>
|
|
1856
1864
|
|
|
1857
1865
|
Ruby-VPI uses the convention described above to dynamically create a direct Ruby interface to the design under test, so <em>do not</em> rename the generated files arbitrarily.
|
|
1858
1866
|
</div>
|
|
@@ -1871,7 +1879,7 @@ By producing multiple files, the automated test generator physically decouples t
|
|
|
1871
1879
|
<div class="tip" id="Using__kdiff3__with_the_automated_test_generator.">
|
|
1872
1880
|
<img src="images/tango/tip.png" alt="tip" class="icon"/>
|
|
1873
1881
|
|
|
1874
|
-
<p class="title"><a href="#a-
|
|
1882
|
+
<p class="title"><a href="#a-607255718">Tip 3</a>. Using <strong>kdiff3</strong> with the automated test generator.</p>
|
|
1875
1883
|
|
|
1876
1884
|
<ol>
|
|
1877
1885
|
<li>Create a file named <tt>merge2</tt> with the following content: <pre class="code">
|
|
@@ -1897,7 +1905,7 @@ kdiff3 --auto --output <span style="background-color:#fff0f0"><span style="color
|
|
|
1897
1905
|
|
|
1898
1906
|
<div id="usage.tools.convert" class="section">
|
|
1899
1907
|
<h3 class="title">
|
|
1900
|
-
<a href="#a-
|
|
1908
|
+
<a href="#a-607265448">5.4.2</a>
|
|
1901
1909
|
|
|
1902
1910
|
|
|
1903
1911
|
|
|
@@ -1919,14 +1927,14 @@ kdiff3 --auto --output <span style="background-color:#fff0f0"><span style="color
|
|
|
1919
1927
|
|
|
1920
1928
|
<div id="usage.examples" class="section">
|
|
1921
1929
|
<h2 class="title">
|
|
1922
|
-
<a href="#a-
|
|
1930
|
+
<a href="#a-607282618">5.5</a>
|
|
1923
1931
|
|
|
1924
1932
|
|
|
1925
1933
|
|
|
1926
1934
|
Sample tests
|
|
1927
1935
|
</h2>
|
|
1928
1936
|
|
|
1929
|
-
The <tt>samp</tt> directory contains several sample tests which illustrate how Ruby-VPI can be used. Each sample has an associated <tt>Rakefile</tt> which simplifies the process of running it. Therefore, simply navigate into an example directory and run the <pre>rake</pre> command to get started.
|
|
1937
|
+
The <tt>samp</tt> directory (<a href="http://ruby-vpi.rubyforge.org/src/ruby-vpi//samp/">browse it online</a>) contains several sample tests which illustrate how Ruby-VPI can be used. Each sample has an associated <tt>Rakefile</tt> which simplifies the process of running it. Therefore, simply navigate into an example directory and run the <pre>rake</pre> command to get started.
|
|
1930
1938
|
|
|
1931
1939
|
</div>
|
|
1932
1940
|
|
|
@@ -1935,7 +1943,7 @@ kdiff3 --auto --output <span style="background-color:#fff0f0"><span style="color
|
|
|
1935
1943
|
|
|
1936
1944
|
<div id="usage.tutorial" class="section">
|
|
1937
1945
|
<h2 class="title">
|
|
1938
|
-
<a href="#a-
|
|
1946
|
+
<a href="#a-607395798">5.6</a>
|
|
1939
1947
|
|
|
1940
1948
|
|
|
1941
1949
|
|
|
@@ -1958,7 +1966,7 @@ kdiff3 --auto --output <span style="background-color:#fff0f0"><span style="color
|
|
|
1958
1966
|
|
|
1959
1967
|
<div id="usage.tutorial.declare-design" class="section">
|
|
1960
1968
|
<h3 class="title">
|
|
1961
|
-
<a href="#a-
|
|
1969
|
+
<a href="#a-607290888">5.6.1</a>
|
|
1962
1970
|
|
|
1963
1971
|
|
|
1964
1972
|
|
|
@@ -1983,7 +1991,7 @@ kdiff3 --auto --output <span style="background-color:#fff0f0"><span style="color
|
|
|
1983
1991
|
<div class="example" id="fig:counter.v_decl">
|
|
1984
1992
|
|
|
1985
1993
|
|
|
1986
|
-
<p class="title"><a href="#a-
|
|
1994
|
+
<p class="title"><a href="#a-607287308">Example 3</a>. Declaration of a simple up-counter with synchronous reset</p>
|
|
1987
1995
|
|
|
1988
1996
|
<pre class="code" lang="verilog">
|
|
1989
1997
|
module counter #(parameter Size = 5) (
|
|
@@ -2007,7 +2015,7 @@ Before we continue, save the source code shown in <a href="#fig:counter.v_decl">
|
|
|
2007
2015
|
|
|
2008
2016
|
<div id="usage.tutorial.generate-test" class="section">
|
|
2009
2017
|
<h3 class="title">
|
|
2010
|
-
<a href="#a-
|
|
2018
|
+
<a href="#a-607305468">5.6.2</a>
|
|
2011
2019
|
|
|
2012
2020
|
|
|
2013
2021
|
|
|
@@ -2043,7 +2051,7 @@ $ cp counter.v xUnit
|
|
|
2043
2051
|
<div class="example" id="fig:generate-test.RSpec">
|
|
2044
2052
|
|
|
2045
2053
|
|
|
2046
|
-
<p class="title"><a href="#a-
|
|
2054
|
+
<p class="title"><a href="#a-607296778">Example 4</a>. Generating a test with specification in RSpec format</p>
|
|
2047
2055
|
|
|
2048
2056
|
<pre>
|
|
2049
2057
|
$ ruby-vpi generate counter.v --RSpec
|
|
@@ -2065,7 +2073,7 @@ $ ruby-vpi generate counter.v --RSpec
|
|
|
2065
2073
|
<div class="example" id="fig:generate-test.xUnit">
|
|
2066
2074
|
|
|
2067
2075
|
|
|
2068
|
-
<p class="title"><a href="#a-
|
|
2076
|
+
<p class="title"><a href="#a-607299658">Example 5</a>. Generating a test with specification in xUnit format</p>
|
|
2069
2077
|
|
|
2070
2078
|
<pre>
|
|
2071
2079
|
$ ruby-vpi generate counter.v --xUnit
|
|
@@ -2090,7 +2098,7 @@ $ ruby-vpi generate counter.v --xUnit
|
|
|
2090
2098
|
|
|
2091
2099
|
<div id="usage.tutorial.specification" class="section">
|
|
2092
2100
|
<h3 class="title">
|
|
2093
|
-
<a href="#a-
|
|
2101
|
+
<a href="#a-607315968">5.6.3</a>
|
|
2094
2102
|
|
|
2095
2103
|
|
|
2096
2104
|
|
|
@@ -2118,7 +2126,7 @@ Here are some reasonable expectations for our simple counter:
|
|
|
2118
2126
|
<div class="example" id="fig:RSpec_counter_spec.rb">
|
|
2119
2127
|
|
|
2120
2128
|
|
|
2121
|
-
<p class="title"><a href="#a-
|
|
2129
|
+
<p class="title"><a href="#a-607308538">Example 6</a>. Specification implemented in RSpec format</p>
|
|
2122
2130
|
|
|
2123
2131
|
<pre class="code">require <span style="background-color:#fff0f0"><span style="color:#710">'</span><span style="color:#D20">spec</span><span style="color:#710">'</span></span>
|
|
2124
2132
|
|
|
@@ -2170,7 +2178,7 @@ describe <span style="background-color:#fff0f0"><span style="color:#710">"<
|
|
|
2170
2178
|
<div class="example" id="fig:xUnit_counter_spec.rb">
|
|
2171
2179
|
|
|
2172
2180
|
|
|
2173
|
-
<p class="title"><a href="#a-
|
|
2181
|
+
<p class="title"><a href="#a-607310978">Example 7</a>. Specification implemented in xUnit format</p>
|
|
2174
2182
|
|
|
2175
2183
|
<pre class="code">require <span style="background-color:#fff0f0"><span style="color:#710">'</span><span style="color:#D20">test/unit</span><span style="color:#710">'</span></span>
|
|
2176
2184
|
|
|
@@ -2219,22 +2227,6 @@ Before we continue,
|
|
|
2219
2227
|
<ol>
|
|
2220
2228
|
<li>Replace the contents of the file named <tt>RSpec/counter_spec.rb</tt> with the source code shown in <a href="#fig:RSpec_counter_spec.rb">Example 6</a>.</li>
|
|
2221
2229
|
<li>Replace the contents of the file named <tt>xUnit/counter_spec.rb</tt> with the source code shown in <a href="#fig:xUnit_counter_spec.rb">Example 7</a>.</li>
|
|
2222
|
-
<li>Replace the contents of the files named <tt>RSpec/counter_design.rb</tt> and <tt>xUnit/counter_design.rb</tt> with the following code. <pre class="code">
|
|
2223
|
-
<span style="color:#888"># Simulates the design under test for one clock cycle.</span>
|
|
2224
|
-
<span style="color:#080; font-weight:bold">def</span> <span style="color:#06B; font-weight:bold">cycle!</span>
|
|
2225
|
-
clock.high!
|
|
2226
|
-
advance_time
|
|
2227
|
-
clock.low!
|
|
2228
|
-
advance_time
|
|
2229
|
-
<span style="color:#080; font-weight:bold">end</span>
|
|
2230
|
-
|
|
2231
|
-
<span style="color:#888"># Brings the design under test into a blank state.</span>
|
|
2232
|
-
<span style="color:#080; font-weight:bold">def</span> <span style="color:#06B; font-weight:bold">reset!</span>
|
|
2233
|
-
reset.high!
|
|
2234
|
-
cycle!
|
|
2235
|
-
reset.low!
|
|
2236
|
-
<span style="color:#080; font-weight:bold">end</span>
|
|
2237
|
-
</pre></li>
|
|
2238
2230
|
</ol>
|
|
2239
2231
|
|
|
2240
2232
|
</div>
|
|
@@ -2246,7 +2238,7 @@ Before we continue,
|
|
|
2246
2238
|
|
|
2247
2239
|
<div id="usage.tutorial.implement-proto" class="section">
|
|
2248
2240
|
<h3 class="title">
|
|
2249
|
-
<a href="#a-
|
|
2241
|
+
<a href="#a-607322378">5.6.4</a>
|
|
2250
2242
|
|
|
2251
2243
|
|
|
2252
2244
|
|
|
@@ -2263,7 +2255,7 @@ Before we continue,
|
|
|
2263
2255
|
<div class="example" id="fig:counter_proto.rb">
|
|
2264
2256
|
|
|
2265
2257
|
|
|
2266
|
-
<p class="title"><a href="#a-
|
|
2258
|
+
<p class="title"><a href="#a-607318638">Example 8</a>. Ruby prototype of our Verilog design</p>
|
|
2267
2259
|
|
|
2268
2260
|
<pre class="code"><span style="color:#888"># Ruby prototype of the design under test's Verilog implementation.</span>
|
|
2269
2261
|
<span style="color:#080; font-weight:bold">def</span> <span style="color:#06B; font-weight:bold">feign!</span>
|
|
@@ -2290,7 +2282,7 @@ Before we continue, replace the contents of the files named <tt>RSpec/counter_pr
|
|
|
2290
2282
|
|
|
2291
2283
|
<div id="usage.tutorial.test-proto" class="section">
|
|
2292
2284
|
<h3 class="title">
|
|
2293
|
-
<a href="#a-
|
|
2285
|
+
<a href="#a-607341078">5.6.5</a>
|
|
2294
2286
|
|
|
2295
2287
|
|
|
2296
2288
|
|
|
@@ -2310,7 +2302,7 @@ Before we continue, replace the contents of the files named <tt>RSpec/counter_pr
|
|
|
2310
2302
|
<div class="example" id="fig:test-proto.RSpec">
|
|
2311
2303
|
|
|
2312
2304
|
|
|
2313
|
-
<p class="title"><a href="#a-
|
|
2305
|
+
<p class="title"><a href="#a-607325878">Example 9</a>. Running a test with specification in RSpec format</p>
|
|
2314
2306
|
|
|
2315
2307
|
<pre>
|
|
2316
2308
|
$ cd RSpec
|
|
@@ -2334,7 +2326,7 @@ cd -
|
|
|
2334
2326
|
<div class="example" id="fig:test-proto.unit-test">
|
|
2335
2327
|
|
|
2336
2328
|
|
|
2337
|
-
<p class="title"><a href="#a-
|
|
2329
|
+
<p class="title"><a href="#a-607330448">Example 10</a>. Running a test with specification in xUnit format</p>
|
|
2338
2330
|
|
|
2339
2331
|
<pre>
|
|
2340
2332
|
$ cd xUnit
|
|
@@ -2358,7 +2350,7 @@ Finished in 0.043859 seconds.
|
|
|
2358
2350
|
<div class="tip" id="What_can_the_test_runner_do_">
|
|
2359
2351
|
<img src="images/tango/tip.png" alt="tip" class="icon"/>
|
|
2360
2352
|
|
|
2361
|
-
<p class="title"><a href="#a-
|
|
2353
|
+
<p class="title"><a href="#a-607335018">Tip 4</a>. What can the test runner do?</p>
|
|
2362
2354
|
|
|
2363
2355
|
If you invoke the test runner (1) without any arguments or (2) with the <tt>--tasks</tt> option, it will show you a list of tasks that it can perform for you.
|
|
2364
2356
|
</div>
|
|
@@ -2374,7 +2366,7 @@ Finished in 0.043859 seconds.
|
|
|
2374
2366
|
|
|
2375
2367
|
<div id="usage.tutorial.implement-design" class="section">
|
|
2376
2368
|
<h3 class="title">
|
|
2377
|
-
<a href="#a-
|
|
2369
|
+
<a href="#a-607349478">5.6.6</a>
|
|
2378
2370
|
|
|
2379
2371
|
|
|
2380
2372
|
|
|
@@ -2391,7 +2383,7 @@ Finished in 0.043859 seconds.
|
|
|
2391
2383
|
<div class="example" id="fig:counter.v_impl">
|
|
2392
2384
|
|
|
2393
2385
|
|
|
2394
|
-
<p class="title"><a href="#a-
|
|
2386
|
+
<p class="title"><a href="#a-607343828">Example 11</a>. Implementation of a simple up-counter with synchronous reset</p>
|
|
2395
2387
|
|
|
2396
2388
|
<pre class="code" lang="verilog">/**
|
|
2397
2389
|
A simple up-counter with synchronous reset.
|
|
@@ -2428,7 +2420,7 @@ Before we continue, replace the contents of the files named <tt>RSpec/counter.v<
|
|
|
2428
2420
|
|
|
2429
2421
|
<div id="usage.tutorial.test-design" class="section">
|
|
2430
2422
|
<h3 class="title">
|
|
2431
|
-
<a href="#a-
|
|
2423
|
+
<a href="#a-607359608">5.6.7</a>
|
|
2432
2424
|
|
|
2433
2425
|
|
|
2434
2426
|
|
|
@@ -2448,7 +2440,7 @@ Before we continue, replace the contents of the files named <tt>RSpec/counter.v<
|
|
|
2448
2440
|
<div class="example" id="fig:test-design.RSpec">
|
|
2449
2441
|
|
|
2450
2442
|
|
|
2451
|
-
<p class="title"><a href="#a-
|
|
2443
|
+
<p class="title"><a href="#a-607352688">Example 12</a>. Running a test with specification in RSpec format</p>
|
|
2452
2444
|
|
|
2453
2445
|
<pre>
|
|
2454
2446
|
$ cd RSpec
|
|
@@ -2470,7 +2462,7 @@ Finished in 0.041198 seconds
|
|
|
2470
2462
|
<div class="example" id="fig:test-design.unit-test">
|
|
2471
2463
|
|
|
2472
2464
|
|
|
2473
|
-
<p class="title"><a href="#a-
|
|
2465
|
+
<p class="title"><a href="#a-607355168">Example 13</a>. Running a test with specification in xUnit format</p>
|
|
2474
2466
|
|
|
2475
2467
|
<pre>
|
|
2476
2468
|
$ cd xUnit
|
|
@@ -2499,7 +2491,7 @@ Finished in 0.040262 seconds.
|
|
|
2499
2491
|
|
|
2500
2492
|
<div id="hacking" class="chapter">
|
|
2501
2493
|
<h1 class="title">
|
|
2502
|
-
Chapter <a href="#a-
|
|
2494
|
+
Chapter <a href="#a-607351098">6</a>
|
|
2503
2495
|
|
|
2504
2496
|
<br/><br/>
|
|
2505
2497
|
|
|
@@ -2511,7 +2503,7 @@ Finished in 0.040262 seconds.
|
|
|
2511
2503
|
|
|
2512
2504
|
<div id="hacking.scm" class="section">
|
|
2513
2505
|
<h2 class="title">
|
|
2514
|
-
<a href="#a-
|
|
2506
|
+
<a href="#a-607337768">6.1</a>
|
|
2515
2507
|
|
|
2516
2508
|
|
|
2517
2509
|
|
|
@@ -2532,7 +2524,7 @@ Finished in 0.040262 seconds.
|
|
|
2532
2524
|
|
|
2533
2525
|
<div id="hacking.release-packages" class="section">
|
|
2534
2526
|
<h2 class="title">
|
|
2535
|
-
<a href="#a-
|
|
2527
|
+
<a href="#a-607340498">6.2</a>
|
|
2536
2528
|
|
|
2537
2529
|
|
|
2538
2530
|
|
|
@@ -2560,7 +2552,7 @@ Finished in 0.040262 seconds.
|
|
|
2560
2552
|
|
|
2561
2553
|
<div id="hacking.manual" class="section">
|
|
2562
2554
|
<h2 class="title">
|
|
2563
|
-
<a href="#a-
|
|
2555
|
+
<a href="#a-607344628">6.3</a>
|
|
2564
2556
|
|
|
2565
2557
|
|
|
2566
2558
|
|
|
@@ -2578,7 +2570,7 @@ Finished in 0.040262 seconds.
|
|
|
2578
2570
|
|
|
2579
2571
|
<div id="problems" class="chapter">
|
|
2580
2572
|
<h1 class="title">
|
|
2581
|
-
Chapter <a href="#a-
|
|
2573
|
+
Chapter <a href="#a-607417768">7</a>
|
|
2582
2574
|
|
|
2583
2575
|
<br/><br/>
|
|
2584
2576
|
|
|
@@ -2593,26 +2585,29 @@ Finished in 0.040262 seconds.
|
|
|
2593
2585
|
|
|
2594
2586
|
<div id="problem.ivl" class="section">
|
|
2595
2587
|
<h2 class="title">
|
|
2596
|
-
<a href="#a-
|
|
2588
|
+
<a href="#a-607385318">7.1</a>
|
|
2597
2589
|
|
|
2598
2590
|
|
|
2599
2591
|
|
|
2600
2592
|
Icarus Verilog
|
|
2601
2593
|
</h2>
|
|
2602
2594
|
|
|
2603
|
-
|
|
2604
|
-
<hr style="display: none"/>
|
|
2595
|
+
<p>The following sections describe problems that occur when Icarus Verilog is used with Ruby-VPI.</p>
|
|
2605
2596
|
|
|
2606
|
-
<div id="problems.ivl.vpi_handle_by_name.absolute-paths" class="section">
|
|
2607
|
-
<h3 class="title">
|
|
2608
|
-
<a href="#a-607339198">7.1.1</a>
|
|
2609
2597
|
|
|
2610
|
-
|
|
2598
|
+
<p>
|
|
2599
|
+
<hr style="display: none"/>
|
|
2611
2600
|
|
|
2612
|
-
|
|
2613
|
-
|
|
2601
|
+
<div id="problems.ivl.vpi_handle_by_name.absolute-paths" class="section">
|
|
2602
|
+
<h3 class="title">
|
|
2603
|
+
<a href="#a-607359978">7.1.1</a>
|
|
2604
|
+
|
|
2605
|
+
|
|
2614
2606
|
|
|
2615
|
-
|
|
2607
|
+
Give full paths to Verilog objects
|
|
2608
|
+
</h3>
|
|
2609
|
+
|
|
2610
|
+
<p>In version 0.8 and snapshot 20061009 of Icarus Verilog, the <code class="code">vpi_handle_by_name</code> function requires an <em>absolute</em> path (including the name of the bench which instantiates the design) to a Verilog object. In addition, <code class="code">vpi_handle_by_name</code> always returns <code class="code"><span style="color:#038; font-weight:bold">nil</span></code> when its second parameter is specified.</p>
|
|
2616
2611
|
|
|
2617
2612
|
|
|
2618
2613
|
<p>For example, consider <a href="#ex:TestFoo">Example 14</a>. Here, one must write <code class="code">vpi_handle_by_name(<span style="background-color:#fff0f0"><span style="color:#710">"</span><span style="color:#D20">TestFoo.my_foo.clk</span><span style="color:#710">"</span></span>, <span style="color:#038; font-weight:bold">nil</span>)</code> instead of <code class="code">vpi_handle_by_name(<span style="background-color:#fff0f0"><span style="color:#710">"</span><span style="color:#D20">my_foo.clk</span><span style="color:#710">"</span></span>, <span style="color:#036; font-weight:bold">TestFoo</span>)</code> in order to access the <code class="code">clk</code> input of the <code class="code">my_foo</code> module instance.</p>
|
|
@@ -2625,7 +2620,7 @@ Finished in 0.040262 seconds.
|
|
|
2625
2620
|
<div class="example" id="ex:TestFoo">
|
|
2626
2621
|
|
|
2627
2622
|
|
|
2628
|
-
<p class="title"><a href="#a-
|
|
2623
|
+
<p class="title"><a href="#a-607355728">Example 14</a>. Part of a bench which instantiates a Verilog design</p>
|
|
2629
2624
|
|
|
2630
2625
|
<pre class="code" lang="verilog">
|
|
2631
2626
|
module TestFoo;
|
|
@@ -2637,14 +2632,14 @@ endmodule
|
|
|
2637
2632
|
</div>
|
|
2638
2633
|
</p>
|
|
2639
2634
|
|
|
2640
|
-
</div>
|
|
2641
|
-
|
|
2635
|
+
</div>
|
|
2636
|
+
|
|
2642
2637
|
|
|
2643
2638
|
<hr style="display: none"/>
|
|
2644
2639
|
|
|
2645
2640
|
<div id="problems.ivl.vpi_handle_by_name.connect-registers" class="section">
|
|
2646
2641
|
<h3 class="title">
|
|
2647
|
-
<a href="#a-
|
|
2642
|
+
<a href="#a-607371468">7.1.2</a>
|
|
2648
2643
|
|
|
2649
2644
|
|
|
2650
2645
|
|
|
@@ -2667,7 +2662,7 @@ endmodule
|
|
|
2667
2662
|
<div class="example" id="ex:TestFoo_bad">
|
|
2668
2663
|
|
|
2669
2664
|
|
|
2670
|
-
<p class="title"><a href="#a-
|
|
2665
|
+
<p class="title"><a href="#a-607364178">Example 15</a>. Bad design with unconnected registers</p>
|
|
2671
2666
|
|
|
2672
2667
|
Here the <code class="code">clk_reg</code> register is not connected to anything.
|
|
2673
2668
|
|
|
@@ -2687,7 +2682,7 @@ endmodule
|
|
|
2687
2682
|
<div class="example" id="ex:TestFoo_fix">
|
|
2688
2683
|
|
|
2689
2684
|
|
|
2690
|
-
<p class="title"><a href="#a-
|
|
2685
|
+
<p class="title"><a href="#a-607366888">Example 16</a>. Fixed design with wired registers</p>
|
|
2691
2686
|
|
|
2692
2687
|
Here the <code class="code">clk_reg</code> register is connected to the <code class="code">clk_wire</code> wire.
|
|
2693
2688
|
|
|
@@ -2706,21 +2701,61 @@ endmodule
|
|
|
2706
2701
|
</div>
|
|
2707
2702
|
|
|
2708
2703
|
|
|
2704
|
+
<hr style="display: none"/>
|
|
2705
|
+
|
|
2706
|
+
<div id="problems.ivl.vpi_reset" class="section">
|
|
2707
|
+
<h3 class="title">
|
|
2708
|
+
<a href="#a-607373948">7.1.3</a>
|
|
2709
|
+
|
|
2710
|
+
|
|
2711
|
+
|
|
2712
|
+
Vpi::reset
|
|
2713
|
+
</h3>
|
|
2714
|
+
|
|
2715
|
+
In version 0.8 of Icarus Verilog, the <code class="code">vpi_control(vpiReset)</code> VPI function causes an assertion to fail inside the simulator. As a result, the simulation terminates and a core dump is produced.
|
|
2716
|
+
|
|
2717
|
+
</div>
|
|
2718
|
+
</p>
|
|
2719
|
+
|
|
2709
2720
|
</div>
|
|
2710
2721
|
|
|
2711
2722
|
|
|
2712
2723
|
<hr style="display: none"/>
|
|
2713
2724
|
|
|
2714
|
-
<div id="
|
|
2725
|
+
<div id="problem.ncsim" class="section">
|
|
2715
2726
|
<h2 class="title">
|
|
2716
|
-
<a href="#a-
|
|
2727
|
+
<a href="#a-607390998">7.2</a>
|
|
2717
2728
|
|
|
2718
2729
|
|
|
2719
2730
|
|
|
2720
|
-
|
|
2731
|
+
Cadence NC-Sim
|
|
2721
2732
|
</h2>
|
|
2722
2733
|
|
|
2723
|
-
|
|
2734
|
+
<p>The following sections describe problems that occur when Cadence NC-Sim (version 05.83-s003) is used with Ruby-VPI.</p>
|
|
2735
|
+
|
|
2736
|
+
|
|
2737
|
+
<p>
|
|
2738
|
+
<hr style="display: none"/>
|
|
2739
|
+
|
|
2740
|
+
<div id="problem.ncsim.vpiForceFlag" class="section">
|
|
2741
|
+
<h3 class="title">
|
|
2742
|
+
<a href="#a-607387788">7.2.1</a>
|
|
2743
|
+
|
|
2744
|
+
|
|
2745
|
+
|
|
2746
|
+
Cannot force values onto handles
|
|
2747
|
+
</h3>
|
|
2748
|
+
|
|
2749
|
+
<p>When you write to a handle’s value using <code class="code">vpi_put_value()</code> with the <code class="code"><span style="color:#036; font-weight:bold">VpiForceFlag</span></code> propagation parameter, it does not have any effect. As a result, the “register_file” sample test fails when you run it with NC-Sim.</p>
|
|
2750
|
+
|
|
2751
|
+
|
|
2752
|
+
<p>This might be a bug in NC-Sim itself: even though I specified the “+access+rwc” command-line option for NC-Sim, I’m thinking that the force/release capability is not really enabled. However, it’s more likely that there’s a bug in the “register_file” sample test.</p>
|
|
2753
|
+
|
|
2754
|
+
|
|
2755
|
+
<p>If you happen to know the solution, please tell me either on the project forums or via e-mail (see the LICENSE file for my e-mail address). Thanks.</p>
|
|
2756
|
+
|
|
2757
|
+
</div>
|
|
2758
|
+
</p>
|
|
2724
2759
|
|
|
2725
2760
|
</div>
|
|
2726
2761
|
</p>
|
|
@@ -2731,7 +2766,7 @@ endmodule
|
|
|
2731
2766
|
|
|
2732
2767
|
<div id="glossary" class="chapter">
|
|
2733
2768
|
<h1 class="title">
|
|
2734
|
-
Chapter <a href="#a-
|
|
2769
|
+
Chapter <a href="#a-607450218">8</a>
|
|
2735
2770
|
|
|
2736
2771
|
<br/><br/>
|
|
2737
2772
|
|
|
@@ -2743,7 +2778,7 @@ endmodule
|
|
|
2743
2778
|
|
|
2744
2779
|
<div id="glossary.test" class="section">
|
|
2745
2780
|
<h2 class="title">
|
|
2746
|
-
<a href="#a-
|
|
2781
|
+
<a href="#a-607420598">8.1</a>
|
|
2747
2782
|
|
|
2748
2783
|
|
|
2749
2784
|
|
|
@@ -2759,7 +2794,7 @@ endmodule
|
|
|
2759
2794
|
|
|
2760
2795
|
<div id="glossary.design" class="section">
|
|
2761
2796
|
<h2 class="title">
|
|
2762
|
-
<a href="#a-
|
|
2797
|
+
<a href="#a-607423098">8.2</a>
|
|
2763
2798
|
|
|
2764
2799
|
|
|
2765
2800
|
|
|
@@ -2775,7 +2810,7 @@ endmodule
|
|
|
2775
2810
|
|
|
2776
2811
|
<div id="glossary.specification" class="section">
|
|
2777
2812
|
<h2 class="title">
|
|
2778
|
-
<a href="#a-
|
|
2813
|
+
<a href="#a-607425858">8.3</a>
|
|
2779
2814
|
|
|
2780
2815
|
|
|
2781
2816
|
|
|
@@ -2791,7 +2826,7 @@ endmodule
|
|
|
2791
2826
|
|
|
2792
2827
|
<div id="glossary.expectation" class="section">
|
|
2793
2828
|
<h2 class="title">
|
|
2794
|
-
<a href="#a-
|
|
2829
|
+
<a href="#a-607428078">8.4</a>
|
|
2795
2830
|
|
|
2796
2831
|
|
|
2797
2832
|
|
|
@@ -2807,7 +2842,7 @@ endmodule
|
|
|
2807
2842
|
|
|
2808
2843
|
<div id="glossary.handle" class="section">
|
|
2809
2844
|
<h2 class="title">
|
|
2810
|
-
<a href="#a-
|
|
2845
|
+
<a href="#a-607430558">8.5</a>
|
|
2811
2846
|
|
|
2812
2847
|
|
|
2813
2848
|
|
|
@@ -2823,7 +2858,7 @@ endmodule
|
|
|
2823
2858
|
|
|
2824
2859
|
<div id="glossary.rake" class="section">
|
|
2825
2860
|
<h2 class="title">
|
|
2826
|
-
<a href="#a-
|
|
2861
|
+
<a href="#a-607432818">8.6</a>
|
|
2827
2862
|
|
|
2828
2863
|
|
|
2829
2864
|
|
|
@@ -2844,7 +2879,7 @@ endmodule
|
|
|
2844
2879
|
|
|
2845
2880
|
<div id="glossary.RSpec" class="section">
|
|
2846
2881
|
<h2 class="title">
|
|
2847
|
-
<a href="#a-
|
|
2882
|
+
<a href="#a-607435358">8.7</a>
|
|
2848
2883
|
|
|
2849
2884
|
|
|
2850
2885
|
|
|
@@ -2854,7 +2889,7 @@ endmodule
|
|
|
2854
2889
|
<p>The <a href="#glossary.BDD">BDD</a> framework for Ruby.</p>
|
|
2855
2890
|
|
|
2856
2891
|
|
|
2857
|
-
<p>See the <a href="http://rspec.rubyforge.org">RSpec website</a> and <a href="http://rspec.rubyforge.org/
|
|
2892
|
+
<p>See the <a href="http://rspec.rubyforge.org">RSpec website</a> and <a href="http://rspec.rubyforge.org/documentation/index.html">tutorial</a> for more information.</p>
|
|
2858
2893
|
|
|
2859
2894
|
</div>
|
|
2860
2895
|
|
|
@@ -2863,7 +2898,7 @@ endmodule
|
|
|
2863
2898
|
|
|
2864
2899
|
<div id="glossary.TDD" class="section">
|
|
2865
2900
|
<h2 class="title">
|
|
2866
|
-
<a href="#a-
|
|
2901
|
+
<a href="#a-607437618">8.8</a>
|
|
2867
2902
|
|
|
2868
2903
|
|
|
2869
2904
|
|
|
@@ -2882,7 +2917,7 @@ endmodule
|
|
|
2882
2917
|
|
|
2883
2918
|
<div id="glossary.BDD" class="section">
|
|
2884
2919
|
<h2 class="title">
|
|
2885
|
-
<a href="#a-
|
|
2920
|
+
<a href="#a-607439878">8.9</a>
|
|
2886
2921
|
|
|
2887
2922
|
|
|
2888
2923
|
|
|
@@ -2902,52 +2937,49 @@ endmodule
|
|
|
2902
2937
|
<hr style="display: none"/>
|
|
2903
2938
|
<div id="toc">
|
|
2904
2939
|
<h1 id="toc:contents">Contents</h1>
|
|
2905
|
-
<ul><li><span class="hide">1 </span><a id="a-
|
|
2940
|
+
<ul><li><span class="hide">1 </span><a id="a-606440488" href="#Ruby-VPI_18.0.0_user_manual">Ruby-VPI 18.0.0 user manual</a><ul><li><span class="hide">1.1 </span><a id="a-606415398" href="#About_this_manual">About this manual</a></li><li><span class="hide">1.2 </span><a id="a-606424618" href="#Legal_notice">Legal notice</a></li></ul></li><li><span class="hide">2 </span><a id="a-607201618" href="#intro">Welcome</a><ul><li><span class="hide">2.1 </span><a id="a-605996598" href="#resources">Resources</a><ul><li><span class="hide">2.1.1 </span><a id="a-606452258" href="#Records">Records</a></li><li><span class="hide">2.1.2 </span><a id="a-606462328" href="#Documentation">Documentation</a></li><li><span class="hide">2.1.3 </span><a id="a-605931928" href="#Facilities">Facilities</a></li></ul></li><li><span class="hide">2.2 </span><a id="a-605842608" href="#intro.features">Features</a><ul><li><span class="hide">2.2.1 </span><a id="a-606012168" href="#Portable">Portable</a></li><li><span class="hide">2.2.2 </span><a id="a-606021388" href="#Agile">Agile</a></li><li><span class="hide">2.2.3 </span><a id="a-606032478" href="#Powerful">Powerful</a></li></ul></li><li><span class="hide">2.3 </span><a id="a-607160758" href="#intro.reqs">Requirements</a><ul><li><span class="hide">2.3.1 </span><a id="a-605864868" href="#Verilog_simulator">Verilog simulator</a></li><li><span class="hide">2.3.2 </span><a id="a-607153788" href="#Compilers">Compilers</a></li><li><span class="hide">2.3.3 </span><a id="a-607156088" href="#Libraries">Libraries</a></li></ul></li><li><span class="hide">2.4 </span><a id="a-607163318" href="#intro.applications">Applications</a></li><li><span class="hide">2.5 </span><a id="a-607165918" href="#intro.appetizers">Appetizers</a></li><li><span class="hide">2.6 </span><a id="a-607168788" href="#intro.license">License</a></li><li><span class="hide">2.7 </span><a id="a-607174178" href="#intro.related-works">Related works</a><ul><li><span class="hide">2.7.1 </span><a id="a-607171238" href="#intro.related-works.pli">Ye olde PLI</a></li></ul></li></ul></li><li><span class="hide">3 </span><a id="a-607242278" href="#setup">Setup</a><ul><li><span class="hide">3.1 </span><a id="a-607204808" href="#setup.manifest">Manifest</a></li><li><span class="hide">3.2 </span><a id="a-607210248" href="#setup.reqs">Requirements</a></li><li><span class="hide">3.3 </span><a id="a-607216418" href="#setup.recom">Recommendations</a><ul><li><span class="hide">3.3.1 </span><a id="a-607213078" href="#setup.recom.merger">Text merging tool</a></li></ul></li><li><span class="hide">3.4 </span><a id="a-607225558" href="#setup.inst">Installation</a><ul><li><span class="hide">3.4.1 </span><a id="a-607221498" href="#setup.inst.windows">Installing on Windows</a></li></ul></li><li><span class="hide">3.5 </span><a id="a-607227838" href="#setup.maintenance">Maintenance</a></li></ul></li><li><span class="hide">4 </span><a id="a-607196488" href="#organization">Organization</a><ul><li><span class="hide">4.1 </span><a id="a-607251168" href="#overview.relay">Ruby/Verilog interaction</a></li><li><span class="hide">4.2 </span><a id="a-607256738" href="#organization.tests">Tests</a></li><li><span class="hide">4.3 </span><a id="a-607326178" href="#VPI_in_Ruby">VPI in Ruby</a><ul><li><span class="hide">4.3.1 </span><a id="a-607265658" href="#Deviations_from_the_VPI_standard">Deviations from the VPI standard</a><ul><li><span class="hide">4.3.1.1 </span><a id="a-607259228" href="#Names_are_capitalized">Names are capitalized</a></li><li><span class="hide">4.3.1.2 </span><a id="a-607261728" href="#a_vprintf__is__printf_"><code class="code">vprintf</code> is <code class="code">printf</code></a></li></ul></li><li><span class="hide">4.3.2 </span><a id="a-607291198" href="#vpi.handles">Handles</a><ul><li><span class="hide">4.3.2.1 </span><a id="a-607268318" href="#Shortcuts_for_productivity">Shortcuts for productivity</a></li><li><span class="hide">4.3.2.2 </span><a id="a-607270878" href="#Accessing_a_handle_s_relatives">Accessing a handle’s relatives</a></li><li><span class="hide">4.3.2.3 </span><a id="a-607273818" href="#Accessing_a_handle_s_properties">Accessing a handle’s properties</a></li></ul></li><li><span class="hide">4.3.3 </span><a id="a-607299628" href="#vpi.callbacks">Callbacks</a></li></ul></li></ul></li><li><span class="hide">5 </span><a id="a-607334198" href="#usage">Usage</a><ul><li><span class="hide">5.1 </span><a id="a-607215298" href="#usage.prototyping">Prototyping</a><ul><li><span class="hide">5.1.1 </span><a id="a-607200928" href="#Getting_started">Getting started</a></li><li><span class="hide">5.1.2 </span><a id="a-607205498" href="#How_does_prototyping_work_">How does prototyping work?</a></li></ul></li><li><span class="hide">5.2 </span><a id="a-607224358" href="#usage.debugger">Debugging</a><ul><li><span class="hide">5.2.1 </span><a id="a-607219398" href="#usage.debugger.init">Advanced initialization</a></li></ul></li><li><span class="hide">5.3 </span><a id="a-607246938" href="#usage.test-runner">Test runner</a><ul><li><span class="hide">5.3.1 </span><a id="a-607236808" href="#usage.test-runner.env-vars">Environment variables</a><ul><li><span class="hide">5.3.1.1 </span><a id="a-607229738" href="#Variables_as_command-line_arguments">Variables as command-line arguments</a></li></ul></li></ul></li><li><span class="hide">5.4 </span><a id="a-607278778" href="#usage.tools">Tools</a><ul><li><span class="hide">5.4.1 </span><a id="a-607262938" href="#usage.tools.generate">Automated test generation</a></li><li><span class="hide">5.4.2 </span><a id="a-607265448" href="#usage.tools.convert">Verilog to Ruby conversion</a></li></ul></li><li><span class="hide">5.5 </span><a id="a-607282618" href="#usage.examples">Sample tests</a></li><li><span class="hide">5.6 </span><a id="a-607395798" href="#usage.tutorial">Tutorial</a><ul><li><span class="hide">5.6.1 </span><a id="a-607290888" href="#usage.tutorial.declare-design">Start with a Verilog design</a></li><li><span class="hide">5.6.2 </span><a id="a-607305468" href="#usage.tutorial.generate-test">Generate a test</a></li><li><span class="hide">5.6.3 </span><a id="a-607315968" href="#usage.tutorial.specification">Specify your expectations</a></li><li><span class="hide">5.6.4 </span><a id="a-607322378" href="#usage.tutorial.implement-proto">Implement the prototype</a></li><li><span class="hide">5.6.5 </span><a id="a-607341078" href="#usage.tutorial.test-proto">Verify the prototype</a></li><li><span class="hide">5.6.6 </span><a id="a-607349478" href="#usage.tutorial.implement-design">Implement the design</a></li><li><span class="hide">5.6.7 </span><a id="a-607359608" href="#usage.tutorial.test-design">Verify the design</a></li></ul></li></ul></li><li><span class="hide">6 </span><a id="a-607351098" href="#hacking">Hacking</a><ul><li><span class="hide">6.1 </span><a id="a-607337768" href="#hacking.scm">Getting the source code</a></li><li><span class="hide">6.2 </span><a id="a-607340498" href="#hacking.release-packages">Building release packages</a></li><li><span class="hide">6.3 </span><a id="a-607344628" href="#hacking.manual">Editing this manual</a></li></ul></li><li><span class="hide">7 </span><a id="a-607417768" href="#problems">Known problems</a><ul><li><span class="hide">7.1 </span><a id="a-607385318" href="#problem.ivl">Icarus Verilog</a><ul><li><span class="hide">7.1.1 </span><a id="a-607359978" href="#problems.ivl.vpi_handle_by_name.absolute-paths">Give full paths to Verilog objects</a></li><li><span class="hide">7.1.2 </span><a id="a-607371468" href="#problems.ivl.vpi_handle_by_name.connect-registers">Registers must be connected</a></li><li><span class="hide">7.1.3 </span><a id="a-607373948" href="#problems.ivl.vpi_reset">Vpi::reset</a></li></ul></li><li><span class="hide">7.2 </span><a id="a-607390998" href="#problem.ncsim">Cadence NC-Sim</a><ul><li><span class="hide">7.2.1 </span><a id="a-607387788" href="#problem.ncsim.vpiForceFlag">Cannot force values onto handles</a></li></ul></li></ul></li><li><span class="hide">8 </span><a id="a-607450218" href="#glossary">Glossary</a><ul><li><span class="hide">8.1 </span><a id="a-607420598" href="#glossary.test">Test</a></li><li><span class="hide">8.2 </span><a id="a-607423098" href="#glossary.design">Design</a></li><li><span class="hide">8.3 </span><a id="a-607425858" href="#glossary.specification">Specification</a></li><li><span class="hide">8.4 </span><a id="a-607428078" href="#glossary.expectation">Expectation</a></li><li><span class="hide">8.5 </span><a id="a-607430558" href="#glossary.handle">Handle</a></li><li><span class="hide">8.6 </span><a id="a-607432818" href="#glossary.rake">Rake</a></li><li><span class="hide">8.7 </span><a id="a-607435358" href="#glossary.RSpec">RSpec</a></li><li><span class="hide">8.8 </span><a id="a-607437618" href="#glossary.TDD">Test driven development</a></li><li><span class="hide">8.9 </span><a id="a-607439878" href="#glossary.BDD">Behavior driven development</a></li></ul></li></ul>
|
|
2906
2941
|
|
|
2907
2942
|
<h1 id="toc:tip">Tips</h1>
|
|
2908
2943
|
<ol>
|
|
2909
|
-
<li><a href="#Add_support_for_your_Verilog_simulator" id="a-
|
|
2910
|
-
<li><a href="#
|
|
2911
|
-
<li><a href="#
|
|
2912
|
-
|
|
2913
|
-
<h1 id="toc:note">Notes</h1>
|
|
2914
|
-
<ol>
|
|
2915
|
-
<li><a href="#Tuning_for_maximum_performance" id="a-607705108">Tuning for maximum performance</a></li>
|
|
2944
|
+
<li><a href="#Add_support_for_your_Verilog_simulator" id="a-607207278">Add support for your Verilog simulator</a></li>
|
|
2945
|
+
<li><a href="#Tuning_for_maximum_performance" id="a-607218968">Tuning for maximum performance</a></li>
|
|
2946
|
+
<li><a href="#Using__kdiff3__with_the_automated_test_generator." id="a-607255718">Using <strong>kdiff3</strong> with the automated test generator.</a></li>
|
|
2947
|
+
<li><a href="#What_can_the_test_runner_do_" id="a-607335018">What can the test runner do?</a></li>
|
|
2916
2948
|
</ol>
|
|
2917
2949
|
<h1 id="toc:caution">Cautions</h1>
|
|
2918
2950
|
<ol>
|
|
2919
|
-
<li><a href="#Do_not_rename_generated_files" id="a-
|
|
2951
|
+
<li><a href="#Do_not_rename_generated_files" id="a-607250958">Do not rename generated files</a></li>
|
|
2920
2952
|
</ol>
|
|
2921
2953
|
<h1 id="toc:figure">Figures</h1>
|
|
2922
2954
|
<ol>
|
|
2923
|
-
<li><a href="#fig:organization.detail" id="a-
|
|
2924
|
-
<li><a href="#fig:ruby_relay" id="a-
|
|
2925
|
-
<li><a href="#fig:organization" id="a-
|
|
2926
|
-
<li><a href="#fig:method_naming_format" id="a-
|
|
2955
|
+
<li><a href="#fig:organization.detail" id="a-607244878">Where does Ruby-VPI fit in?</a></li>
|
|
2956
|
+
<li><a href="#fig:ruby_relay" id="a-607247688">Interaction between Ruby and Verilog</a></li>
|
|
2957
|
+
<li><a href="#fig:organization" id="a-607253638">Organization of a test in Ruby-VPI</a></li>
|
|
2958
|
+
<li><a href="#fig:method_naming_format" id="a-607276618">Method naming format for accessing a handle’s properties</a></li>
|
|
2927
2959
|
</ol>
|
|
2928
2960
|
<h1 id="toc:table">Tables</h1>
|
|
2929
2961
|
<ol>
|
|
2930
|
-
<li><a href="#tbl:accessors" id="a-
|
|
2931
|
-
<li><a href="#ex:properties" id="a-
|
|
2962
|
+
<li><a href="#tbl:accessors" id="a-607279048">Possible accessors and their implications</a></li>
|
|
2963
|
+
<li><a href="#ex:properties" id="a-607281988">Examples of accessing a handle’s properties</a></li>
|
|
2932
2964
|
</ol>
|
|
2933
2965
|
<h1 id="toc:example">Examples</h1>
|
|
2934
2966
|
<ol>
|
|
2935
|
-
<li><a href="#ex:callback" id="a-
|
|
2936
|
-
<li><a href="#Running_a_test_with_environment_variables" id="a-
|
|
2937
|
-
<li><a href="#fig:counter.v_decl" id="a-
|
|
2938
|
-
<li><a href="#fig:generate-test.RSpec" id="a-
|
|
2939
|
-
<li><a href="#fig:generate-test.xUnit" id="a-
|
|
2940
|
-
<li><a href="#fig:RSpec_counter_spec.rb" id="a-
|
|
2941
|
-
<li><a href="#fig:xUnit_counter_spec.rb" id="a-
|
|
2942
|
-
<li><a href="#fig:counter_proto.rb" id="a-
|
|
2943
|
-
<li><a href="#fig:test-proto.RSpec" id="a-
|
|
2944
|
-
<li><a href="#fig:test-proto.unit-test" id="a-
|
|
2945
|
-
<li><a href="#fig:counter.v_impl" id="a-
|
|
2946
|
-
<li><a href="#fig:test-design.RSpec" id="a-
|
|
2947
|
-
<li><a href="#fig:test-design.unit-test" id="a-
|
|
2948
|
-
<li><a href="#ex:TestFoo" id="a-
|
|
2949
|
-
<li><a href="#ex:TestFoo_bad" id="a-
|
|
2950
|
-
<li><a href="#ex:TestFoo_fix" id="a-
|
|
2967
|
+
<li><a href="#ex:callback" id="a-607295148">Using a callback for value change notification</a></li>
|
|
2968
|
+
<li><a href="#Running_a_test_with_environment_variables" id="a-607232388">Running a test with environment variables</a></li>
|
|
2969
|
+
<li><a href="#fig:counter.v_decl" id="a-607287308">Declaration of a simple up-counter with synchronous reset</a></li>
|
|
2970
|
+
<li><a href="#fig:generate-test.RSpec" id="a-607296778">Generating a test with specification in RSpec format</a></li>
|
|
2971
|
+
<li><a href="#fig:generate-test.xUnit" id="a-607299658">Generating a test with specification in xUnit format</a></li>
|
|
2972
|
+
<li><a href="#fig:RSpec_counter_spec.rb" id="a-607308538">Specification implemented in RSpec format</a></li>
|
|
2973
|
+
<li><a href="#fig:xUnit_counter_spec.rb" id="a-607310978">Specification implemented in xUnit format</a></li>
|
|
2974
|
+
<li><a href="#fig:counter_proto.rb" id="a-607318638">Ruby prototype of our Verilog design</a></li>
|
|
2975
|
+
<li><a href="#fig:test-proto.RSpec" id="a-607325878">Running a test with specification in RSpec format</a></li>
|
|
2976
|
+
<li><a href="#fig:test-proto.unit-test" id="a-607330448">Running a test with specification in xUnit format</a></li>
|
|
2977
|
+
<li><a href="#fig:counter.v_impl" id="a-607343828">Implementation of a simple up-counter with synchronous reset</a></li>
|
|
2978
|
+
<li><a href="#fig:test-design.RSpec" id="a-607352688">Running a test with specification in RSpec format</a></li>
|
|
2979
|
+
<li><a href="#fig:test-design.unit-test" id="a-607355168">Running a test with specification in xUnit format</a></li>
|
|
2980
|
+
<li><a href="#ex:TestFoo" id="a-607355728">Part of a bench which instantiates a Verilog design</a></li>
|
|
2981
|
+
<li><a href="#ex:TestFoo_bad" id="a-607364178">Bad design with unconnected registers</a></li>
|
|
2982
|
+
<li><a href="#ex:TestFoo_fix" id="a-607366888">Fixed design with wired registers</a></li>
|
|
2951
2983
|
</ol>
|
|
2952
2984
|
</div>
|
|
2953
2985
|
</body>
|