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.
Files changed (126) hide show
  1. data/LICENSE +8 -6
  2. data/Rakefile +4 -4
  3. data/doc/common.css +6 -9
  4. data/doc/common.inc +3 -3
  5. data/doc/common.tpl +14 -6
  6. data/doc/history.html +152 -44
  7. data/doc/history.inc +55 -3
  8. data/doc/history.yaml +62 -2
  9. data/doc/intro.inc +20 -16
  10. data/doc/manual.doc +23 -9
  11. data/doc/manual.html +232 -200
  12. data/doc/memo.doc +7 -6
  13. data/doc/memo.html +28 -17
  14. data/doc/readme.doc +1 -1
  15. data/doc/readme.html +51 -35
  16. data/doc/rss.xml +96 -70
  17. data/ext/Rakefile +24 -11
  18. data/ext/swig_vpi.h +1 -1
  19. data/ext/swig_wrap.cin +17 -42
  20. data/lib/ruby-vpi/pli.tab +1 -0
  21. data/lib/ruby-vpi/runner.rb +34 -10
  22. data/lib/ruby-vpi/vpi.rb +483 -438
  23. data/ref/c/annotated.html +1 -1
  24. data/ref/c/common_8h.html +1 -1
  25. data/ref/c/files.html +1 -1
  26. data/ref/c/functions.html +1 -1
  27. data/ref/c/functions_vars.html +1 -1
  28. data/ref/c/globals.html +1 -1
  29. data/ref/c/globals_0x63.html +1 -1
  30. data/ref/c/globals_0x65.html +1 -1
  31. data/ref/c/globals_0x66.html +1 -1
  32. data/ref/c/globals_0x6d.html +1 -1
  33. data/ref/c/globals_0x70.html +1 -1
  34. data/ref/c/globals_0x72.html +1 -1
  35. data/ref/c/globals_0x73.html +1 -1
  36. data/ref/c/globals_0x74.html +1 -1
  37. data/ref/c/globals_0x76.html +1 -1
  38. data/ref/c/globals_0x78.html +1 -1
  39. data/ref/c/globals_defs.html +1 -1
  40. data/ref/c/globals_defs_0x65.html +1 -1
  41. data/ref/c/globals_defs_0x70.html +1 -1
  42. data/ref/c/globals_defs_0x76.html +1 -1
  43. data/ref/c/globals_defs_0x78.html +1 -1
  44. data/ref/c/globals_enum.html +1 -1
  45. data/ref/c/globals_eval.html +1 -1
  46. data/ref/c/globals_func.html +1 -1
  47. data/ref/c/globals_type.html +1 -1
  48. data/ref/c/globals_vars.html +1 -1
  49. data/ref/c/index.html +1 -1
  50. data/ref/c/main_8c.html +1 -1
  51. data/ref/c/main_8h.html +1 -1
  52. data/ref/c/relay_8c.html +1 -1
  53. data/ref/c/relay_8h.html +1 -1
  54. data/ref/c/structt__cb__data.html +1 -1
  55. data/ref/c/structt__vpi__delay.html +1 -1
  56. data/ref/c/structt__vpi__error__info.html +1 -1
  57. data/ref/c/structt__vpi__strengthval.html +1 -1
  58. data/ref/c/structt__vpi__systf__data.html +1 -1
  59. data/ref/c/structt__vpi__time.html +1 -1
  60. data/ref/c/structt__vpi__value.html +1 -1
  61. data/ref/c/structt__vpi__vecval.html +1 -1
  62. data/ref/c/structt__vpi__vlog__info.html +1 -1
  63. data/ref/c/verilog_8h.html +1 -1
  64. data/ref/c/vlog_8c.html +1 -1
  65. data/ref/c/vlog_8h.html +1 -1
  66. data/ref/c/vpi__user_8h.html +1 -1
  67. data/ref/ruby/classes/RDoc.html +5 -5
  68. data/ref/ruby/classes/RDoc.src/{M000058.html → M000061.html} +0 -0
  69. data/ref/ruby/classes/String.html +24 -24
  70. data/ref/ruby/classes/String.src/M000022.html +23 -5
  71. data/ref/ruby/classes/String.src/M000023.html +28 -5
  72. data/ref/ruby/classes/String.src/M000024.html +5 -23
  73. data/ref/ruby/classes/String.src/M000025.html +5 -28
  74. data/ref/ruby/classes/Vpi/Handle.html +94 -49
  75. data/ref/ruby/classes/Vpi/Handle.src/M000035.html +4 -4
  76. data/ref/ruby/classes/Vpi/Handle.src/M000036.html +4 -4
  77. data/ref/ruby/classes/Vpi/Handle.src/M000037.html +4 -4
  78. data/ref/ruby/classes/Vpi/Handle.src/M000038.html +4 -4
  79. data/ref/ruby/classes/Vpi/Handle.src/M000039.html +4 -4
  80. data/ref/ruby/classes/Vpi/Handle.src/M000040.html +4 -4
  81. data/ref/ruby/classes/Vpi/Handle.src/M000041.html +4 -4
  82. data/ref/ruby/classes/Vpi/Handle.src/M000042.html +4 -4
  83. data/ref/ruby/classes/Vpi/Handle.src/M000043.html +7 -7
  84. data/ref/ruby/classes/Vpi/Handle.src/M000044.html +7 -7
  85. data/ref/ruby/classes/Vpi/Handle.src/M000045.html +8 -8
  86. data/ref/ruby/classes/Vpi/Handle.src/M000046.html +36 -30
  87. data/ref/ruby/classes/Vpi/Handle.src/M000047.html +72 -67
  88. data/ref/ruby/classes/Vpi/Handle.src/M000048.html +6 -17
  89. data/ref/ruby/classes/Vpi/Handle.src/M000049.html +19 -0
  90. data/ref/ruby/classes/Vpi/Handle.src/M000050.html +5 -5
  91. data/ref/ruby/classes/Vpi/Handle.src/M000051.html +16 -10
  92. data/ref/ruby/classes/Vpi/Handle.src/M000053.html +5 -18
  93. data/ref/ruby/classes/Vpi/Handle.src/M000054.html +11 -76
  94. data/ref/ruby/classes/Vpi/Handle.src/M000056.html +31 -0
  95. data/ref/ruby/classes/Vpi/Handle.src/M000057.html +40 -0
  96. data/ref/ruby/classes/Vpi/S_vpi_time.html +16 -16
  97. data/ref/ruby/classes/Vpi/S_vpi_time.src/{M000055.html → M000058.html} +4 -4
  98. data/ref/ruby/classes/Vpi/S_vpi_time.src/M000059.html +19 -0
  99. data/ref/ruby/classes/Vpi/S_vpi_value.src/M000032.html +4 -4
  100. data/ref/ruby/classes/Vpi/S_vpi_value.src/M000033.html +4 -4
  101. data/ref/ruby/classes/Vpi/S_vpi_value.src/M000034.html +4 -4
  102. data/ref/ruby/classes/Vpi.html +0 -7
  103. data/ref/ruby/classes/Vpi.src/M000029.html +14 -14
  104. data/ref/ruby/classes/Vpi.src/M000030.html +25 -24
  105. data/ref/ruby/classes/Vpi.src/M000031.html +6 -6
  106. data/ref/ruby/created.rid +1 -1
  107. data/ref/ruby/files/bin/convert_rb.html +1 -1
  108. data/ref/ruby/files/bin/generate_rb.html +1 -1
  109. data/ref/ruby/files/lib/ruby-vpi/erb_rb.html +1 -1
  110. data/ref/ruby/files/lib/ruby-vpi/float_rb.html +1 -1
  111. data/ref/ruby/files/lib/ruby-vpi/integer_rb.html +1 -1
  112. data/ref/ruby/files/lib/ruby-vpi/rake_rb.html +1 -1
  113. data/ref/ruby/files/lib/ruby-vpi/rcov_rb.html +1 -1
  114. data/ref/ruby/files/lib/ruby-vpi/rdoc_rb.html +1 -1
  115. data/ref/ruby/files/lib/ruby-vpi/runner_boot_loader_rb.html +1 -1
  116. data/ref/ruby/files/lib/ruby-vpi/runner_proxy_rb.html +1 -1
  117. data/ref/ruby/files/lib/ruby-vpi/runner_rb.html +1 -1
  118. data/ref/ruby/files/lib/ruby-vpi/util_rb.html +1 -1
  119. data/ref/ruby/files/lib/ruby-vpi/verilog_parser_rb.html +1 -1
  120. data/ref/ruby/files/lib/ruby-vpi/vpi_rb.html +8 -1
  121. data/ref/ruby/files/lib/ruby-vpi_rb.html +1 -1
  122. data/ref/ruby/fr_method_index.html +19 -16
  123. data/samp/register_file/register_file.v +1 -1
  124. data/samp/register_file/register_file_spec.rb +9 -5
  125. metadata +42 -38
  126. data/ref/ruby/classes/Vpi/S_vpi_time.src/M000056.html +0 -19
data/doc/memo.doc CHANGED
@@ -1,19 +1,16 @@
1
1
  <doc_proxy_include common.inc>
2
2
 
3
3
  <% section "Pending tasks" do %>
4
- * add shortcuts for reading & writing VPI delay values
4
+ * add support for multiple Ruby prototypes so that you can do integration testing and ESL stuff
5
5
 
6
- * GHDL simulator supports VPI
7
- ** need way to invoke VPI tasks from VHDL, like @$ruby_init();@
6
+ * add shortcuts for reading & writing VPI delay values
8
7
 
9
- +No need for system tasks/functions. Ruby-VPI uses callbacks now!+
8
+ * add support for GHDL simulator (and thereby VHDL!) because it supports VPI
10
9
 
11
10
  * add instructions for using *ruby-debug* with a graphical debugging tool or IDE like RadRails
12
11
 
13
12
  * write section about code coverage and prototyping in manual
14
13
 
15
- * clean up the teriminology section... unnecessary
16
-
17
14
  * write unit tests for the non-VPI libraries like integer.rb and float.rb
18
15
  <% end %>
19
16
 
@@ -44,6 +41,10 @@
44
41
  * make RCov correctly profile the code and report useful coverage metrics...
45
42
 
46
43
  * add support for VPI callbacks which execute Ruby blocks
44
+
45
+ * write section about code coverage and prototyping in manual
46
+
47
+ * clean up the teriminology section... unnecessary
47
48
  <% end %>
48
49
 
49
50
 
data/doc/memo.html CHANGED
@@ -8,10 +8,16 @@
8
8
  <title>Pending tasks</title>
9
9
  </head>
10
10
  <body>
11
+ <div id="site-links">
12
+ <a href="readme.html">Home</a>
13
+ &middot; <a href="manual.html">Manual</a>
14
+ &middot; <a href="memo.html">Memo</a>
15
+ &middot; <a href="history.html">History</a>
16
+ <hr style="display: none"/>
17
+ </div>
18
+
11
19
  <div id="toc-links">
12
- <a href="#toc:contents">Contents</a> &middot;
13
-
14
- <a href="readme.html" style="color: green; font-size: larger;">Home page</a>
20
+ <a href="#toc:contents">Contents</a>
15
21
  </div>
16
22
 
17
23
  <div id="body"><p>
@@ -19,7 +25,7 @@
19
25
 
20
26
  <div id="Pending_tasks" class="section">
21
27
  <h1 class="title">
22
- <a href="#a-606651978">1</a>
28
+ <a href="#a-607907898">1</a>
23
29
 
24
30
  &nbsp;
25
31
 
@@ -27,32 +33,27 @@
27
33
  </h1>
28
34
 
29
35
  <ul>
30
- <li>add shortcuts for reading &#38; writing VPI delay values</li>
36
+ <li>add support for multiple Ruby prototypes so that you can do integration testing and ESL stuff</li>
31
37
  </ul>
32
38
 
33
39
 
34
40
  <ul>
35
- <li>GHDL simulator supports VPI
36
- <ul>
37
- <li>need way to invoke VPI tasks from VHDL, like <code class="code"><span style="color:#d70; font-weight:bold">$ruby_init</span>();</code>
38
-
39
- <p><ins>No need for system tasks/functions. Ruby-VPI uses callbacks now!</ins></p></li>
40
- </ul></li>
41
+ <li>add shortcuts for reading &#38; writing VPI delay values</li>
41
42
  </ul>
42
43
 
43
44
 
44
45
  <ul>
45
- <li>add instructions for using <strong>ruby-debug</strong> with a graphical debugging tool or IDE like RadRails</li>
46
+ <li>add support for GHDL simulator (and thereby VHDL!) because it supports VPI</li>
46
47
  </ul>
47
48
 
48
49
 
49
50
  <ul>
50
- <li>write section about code coverage and prototyping in manual</li>
51
+ <li>add instructions for using <strong>ruby-debug</strong> with a graphical debugging tool or IDE like RadRails</li>
51
52
  </ul>
52
53
 
53
54
 
54
55
  <ul>
55
- <li>clean up the teriminology section&#8230; unnecessary</li>
56
+ <li>write section about code coverage and prototyping in manual</li>
56
57
  </ul>
57
58
 
58
59
 
@@ -69,7 +70,7 @@
69
70
 
70
71
  <div id="Finished_tasks" class="section">
71
72
  <h1 class="title">
72
- <a href="#a-606657678">2</a>
73
+ <a href="#a-607910698">2</a>
73
74
 
74
75
  &nbsp;
75
76
 
@@ -140,6 +141,16 @@
140
141
  <li>add support for VPI callbacks which execute Ruby blocks</li>
141
142
  </ul>
142
143
 
144
+
145
+ <ul>
146
+ <li>write section about code coverage and prototyping in manual</li>
147
+ </ul>
148
+
149
+
150
+ <ul>
151
+ <li>clean up the teriminology section&#8230; unnecessary</li>
152
+ </ul>
153
+
143
154
  </div>
144
155
  </p>
145
156
 
@@ -149,7 +160,7 @@
149
160
 
150
161
  <div id="Obsolete_tasks" class="section">
151
162
  <h1 class="title">
152
- <a href="#a-606663598">3</a>
163
+ <a href="#a-607913238">3</a>
153
164
 
154
165
  &nbsp;
155
166
 
@@ -188,7 +199,7 @@
188
199
  <hr style="display: none"/>
189
200
  <div id="toc">
190
201
  <h1 id="toc:contents">Contents</h1>
191
- <ul><li><span class="hide">1 </span><a id="a-606651978" href="#Pending_tasks">Pending tasks</a></li><li><span class="hide">2 </span><a id="a-606657678" href="#Finished_tasks">Finished tasks</a></li><li><span class="hide">3 </span><a id="a-606663598" href="#Obsolete_tasks">Obsolete tasks</a></li></ul>
202
+ <ul><li><span class="hide">1 </span><a id="a-607907898" href="#Pending_tasks">Pending tasks</a></li><li><span class="hide">2 </span><a id="a-607910698" href="#Finished_tasks">Finished tasks</a></li><li><span class="hide">3 </span><a id="a-607913238" href="#Obsolete_tasks">Obsolete tasks</a></li></ul>
192
203
 
193
204
  </div>
194
205
  </body>
data/doc/readme.doc CHANGED
@@ -7,6 +7,6 @@
7
7
  <div style="float: right">Version <%= version %></div>
8
8
  <h1 style="padding-top: 0">Ruby-VPI</h1>
9
9
 
10
- <a href="http://www.ruby-lang.org"><img src="images/ruby/logo-reflection.png" alt="Logo of the Ruby programming language" style="margin: 0; margin-left: 2em; float: right"/></a>
10
+ <a href="http://www.ruby-lang.org"><img src="images/ruby/logo-reflection.png" alt="Logo of the Ruby programming language" style="margin: 0; margin-left: 2em; margin-bottom: 1em; float: right"/></a>
11
11
 
12
12
  <doc_proxy_include intro.inc>
data/doc/readme.html CHANGED
@@ -8,11 +8,19 @@
8
8
  <title>Ruby-VPI: Ruby interface to Verilog VPI</title>
9
9
  </head>
10
10
  <body>
11
+ <div id="site-links">
12
+ <a href="readme.html">Home</a>
13
+ &middot; <a href="manual.html">Manual</a>
14
+ &middot; <a href="memo.html">Memo</a>
15
+ &middot; <a href="history.html">History</a>
16
+ <hr style="display: none"/>
17
+ </div>
18
+
11
19
 
12
- <div id="body"><div style="float: right">Version 17.0.0</div>
20
+ <div id="body"><div style="float: right">Version 18.0.0</div>
13
21
  <h1 style="padding-top: 0">Ruby-VPI</h1>
14
22
 
15
- <p><a href="http://www.ruby-lang.org"><img src="images/ruby/logo-reflection.png" alt="Logo of the Ruby programming language" style="margin: 0; margin-left: 2em; float: right"/></a></p>
23
+ <p><a href="http://www.ruby-lang.org"><img src="images/ruby/logo-reflection.png" alt="Logo of the Ruby programming language" style="margin: 0; margin-left: 2em; margin-bottom: 1em; float: right"/></a></p>
16
24
 
17
25
 
18
26
  <p>Ruby-VPI is a platform for unit testing, rapid prototyping, and systems integration of Verilog modules through the <a href="http://www.ruby-lang.org">Ruby programming language</a>. It lets you:</p>
@@ -34,7 +42,7 @@
34
42
 
35
43
  <div id="resources" class="section">
36
44
  <h1 class="title">
37
- <a href="#a-607522818">1</a>
45
+ <a href="#a-607398468">1</a>
38
46
 
39
47
  &nbsp;
40
48
 
@@ -44,20 +52,22 @@
44
52
 
45
53
  <div id="Records" class="paragraph">
46
54
  <p class="title">Records</p>
47
- <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 notifications" style="float: right"/></a>
48
-
49
-
55
+ <ul>
56
+ <li><a href="history.html#a18.0.0">What&#8217;s new</a>
57
+ &#8211; release notes for version 18.0.0.
50
58
  <ul>
51
- <li><a href="history.html">What&#8217;s new</a>
52
- &#8211; a history of all release notes.</li>
59
+ <li><a href="history.html">History</a>
60
+ &#8211; a record of all release notes.</li>
61
+ <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>
62
+ &#8211; keep track of new releases at your leisure.</li>
63
+ </ul>
64
+ </li>
53
65
  <li><a href="memo.html">Plans</a>
54
66
  &#8211; pending tasks for future releases.</li>
55
67
  <li><a href="http://ruby-vpi.rubyforge.org/talks/">Talks</a>
56
68
  &#8211; materials from presentations and seminars.</li>
57
69
  <li><a href="http://ruby-vpi.rubyforge.org/papers/">Papers</a>
58
70
  &#8211; research publications.</li>
59
- <li><a href="http://ruby-vpi.rubyforge.org/papers/masters_thesis.html#tth_sEc5.2">Motivation</a>
60
- &#8211; why does Ruby-VPI exist?</li>
61
71
  </ul>
62
72
  </div>
63
73
 
@@ -65,8 +75,10 @@
65
75
  <div id="Documentation" class="paragraph">
66
76
  <p class="title">Documentation</p>
67
77
  <ul>
68
- <li><a href="manual.html">User manual</a>
69
- &#8211; complete documentation for users. <em>Start here!</em>
78
+ <li><a href="http://ruby-vpi.rubyforge.org/papers/masters_thesis.html#tth_sEc5.2">Motivation</a>
79
+ &#8211; why was Ruby-VPI developed?</li>
80
+ <li><a href="manual.html">User manual</a>
81
+ &#8211; complete documentation for users.
70
82
  <ul>
71
83
  <li><a href="manual.html#usage.tutorial">Tutorial</a>
72
84
  &#8211; learn how to use Ruby-VPI quickly.</li>
@@ -83,7 +95,7 @@
83
95
  <ul>
84
96
  <li><a href="http://rubyforge.org/frs/?group_id=1339">Downloads</a>
85
97
  &#8211; obtain release packages</li>
86
- <li><a href="http://ruby-vpi.rubyforge.org/src/ruby-vpi">Source code</a>
98
+ <li><a href="http://ruby-vpi.rubyforge.org/src/ruby-vpi/">Source code</a>
87
99
  &#8211; browse online or obtain with <a href="http://darcs.net">Darcs</a>.</li>
88
100
  <li><a href="http://rubyforge.org/forum/?group_id=1339">Forums</a>
89
101
  &#8211; discuss things and ask questions.</li>
@@ -93,7 +105,7 @@
93
105
  &#8211; submit patches to source code.</li>
94
106
  <li><a href="http://rubyforge.org/tracker/?group_id=1339">Requests</a>
95
107
  &#8211; request new features or get support.</li>
96
- <li><a href="http://rubyforge.org/projects/ruby-vpi">Project portal</a>
108
+ <li><a href="http://rubyforge.org/projects/ruby-vpi/">Project portal</a>
97
109
  &#8211; hosted generously by <a href="http://rubyforge.org">RubyForge</a>.</li>
98
110
  </ul>
99
111
  </div>
@@ -108,7 +120,7 @@
108
120
 
109
121
  <div id="intro.features" class="section">
110
122
  <h1 class="title">
111
- <a href="#a-607537108">2</a>
123
+ <a href="#a-607410618">2</a>
112
124
 
113
125
  &nbsp;
114
126
 
@@ -121,7 +133,7 @@
121
133
  <ul>
122
134
  <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>
123
135
  <li>Works with all <a href="#intro.reqs">major Verilog simulators</a> available today.</li>
124
- <li>Compiled <em>just once</em> during <a href="manual.html#setup.installation">installation</a> and used forever!</li>
136
+ <li>Compiled <em>just once</em> during <a href="manual.html#setup.inst">installation</a> and used forever!</li>
125
137
  </ul>
126
138
  </div>
127
139
 
@@ -142,7 +154,7 @@
142
154
  <li>Eliminates unneccesary work:
143
155
  <ul>
144
156
  <li><a href="manual.html#usage.tutorial.specification">Specifications</a> are readable, portable, and <em>executable</em>.</li>
145
- <li>The <a href="manual.html#usage.tools.generate-test">automated test generator</a> helps you accomodate design changes with <em>minimal</em> effort.</li>
157
+ <li>The <a href="manual.html#usage.tools.generate">automated test generator</a> helps you accomodate design changes with <em>minimal</em> effort.</li>
146
158
  <li>There is absolutely <em>no compiling</em>!</li>
147
159
  </ul></li>
148
160
  </ul>
@@ -179,7 +191,7 @@
179
191
 
180
192
  <div id="intro.reqs" class="section">
181
193
  <h1 class="title">
182
- <a href="#a-607549738">3</a>
194
+ <a href="#a-607422318">3</a>
183
195
 
184
196
  &nbsp;
185
197
 
@@ -200,12 +212,12 @@
200
212
  &#8211; any version that supports the <tt>-load</tt> option is acceptable.</li>
201
213
  <li><a href="http://www.model.com">Mentor Modelsim</a>
202
214
  &#8211; any version that supports the <tt>-pli</tt> option is acceptable.</li>
203
- <li><a href="http://www.cadence.com/products/functional_ver/nc-verilog/">Cadence NC-Sim / NC-Verilog</a>
204
- &#8211; any version that supports the <tt>+loadvpi</tt> option is acceptable.</li>
215
+ <li><a href="http://www.cadence.com/products/functional_ver/nc-verilog/">Cadence NC-Sim</a>
216
+ &#8211; 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>
205
217
  <li><a href="http://www.pragmatic-c.com/gpl-cver/">GPL Cver</a>
206
218
  &#8211; version 2.11a or newer is acceptable.</li>
207
- <li><a href="http://www.icarus.com/eda/Verilog/">Icarus Verilog</a>
208
- &#8211; version 0.8 is <em>mostly</em> acceptable&#8212;you <strong>will not</strong> be able to <a href="manual.html#background.org.vpi.util">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>
219
+ <li><a href="http://www.geda.seul.org/tools/icarus/index.html">Icarus Verilog</a>
220
+ &#8211; 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>
209
221
  </ul>
210
222
  </div>
211
223
 
@@ -217,8 +229,10 @@
217
229
  &#8211; any flavor should be acceptable.</li>
218
230
  <li>C compiler
219
231
  &#8211; 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>
220
- <li><a href="http://www.ruby-lang.org">Ruby</a>
221
- &#8211; 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.rubygarden.org/faq/section/show/3">these instructions</a>.</li>
232
+ <li><a href="http://www.swig.org/download.html">SWIG</a>
233
+ &#8211; version 1.3.29 or newer is necessary.</li>
234
+ <li><a href="http://www.ruby-lang.org/en/downloads/">Ruby</a>
235
+ &#8211; 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>
222
236
  </ul>
223
237
  </div>
224
238
 
@@ -243,7 +257,7 @@
243
257
 
244
258
  <div id="intro.applications" class="section">
245
259
  <h1 class="title">
246
- <a href="#a-607552458">4</a>
260
+ <a href="#a-607424848">4</a>
247
261
 
248
262
  &nbsp;
249
263
 
@@ -289,7 +303,7 @@
289
303
 
290
304
  <div id="intro.appetizers" class="section">
291
305
  <h1 class="title">
292
- <a href="#a-607555198">5</a>
306
+ <a href="#a-607427418">5</a>
293
307
 
294
308
  &nbsp;
295
309
 
@@ -357,14 +371,15 @@
357
371
 
358
372
  <div id="intro.license" class="section">
359
373
  <h1 class="title">
360
- <a href="#a-607558088">6</a>
374
+ <a href="#a-607430248">6</a>
361
375
 
362
376
  &nbsp;
363
377
 
364
378
  License
365
379
  </h1>
366
380
 
367
- <p>Copyright 2006 Suraj N. Kurapati &lt;snk@gna.org&gt;</p>
381
+ <p>Copyright 2006 Suraj N. Kurapati &lt;SNK at GNA dot ORG&gt;<br/>
382
+ Copyright 1999 Kazuhiro HIWADA &lt;HIWADA at KUEE dot KYOTO-U dot AC dot JP&gt;<br/></p>
368
383
 
369
384
 
370
385
  <p>Permission is hereby granted, free of charge, to any person obtaining a copy of
@@ -375,13 +390,14 @@ the Software, and to permit persons to whom the Software is furnished to do so,
375
390
  subject to the following conditions:</p>
376
391
 
377
392
 
378
- <p>1. All modified and unmodified copies and substantial portions of the Software
379
- (the &quot;Derivatives&quot;) and their corresponding machine-readable source code (the
380
- &quot;Code&quot;) must include the above copyright notice and this permission notice.</p>
393
+ <p>1. All copies and substantial portions of the Software, whether modified or
394
+ unmodified, (the &quot;Derivatives&quot;) and their corresponding machine-readable
395
+ source code (the &quot;Code&quot;) must include the above copyright notice and this
396
+ permission notice.</p>
381
397
 
382
398
 
383
- <p>2. Upon distribution, the Derivatives must be accompanied either by the Code or,
384
- if the Code is obtainable for no more than the cost of distribution plus a
399
+ <p>2. The Derivatives, upon distribution, must be accompanied by the Code or, if
400
+ the Code is obtainable for no more than the cost of distribution plus a
385
401
  nominal fee, by information on how to obtain the Code.</p>
386
402
 
387
403
 
@@ -401,7 +417,7 @@ IMPLIED, INCLUDING <span class="caps">BUT NOT LIMITED TO THE WARRANTIES OF MERCH
401
417
 
402
418
  <div id="intro.related-works" class="section">
403
419
  <h1 class="title">
404
- <a href="#a-607563868">7</a>
420
+ <a href="#a-607435548">7</a>
405
421
 
406
422
  &nbsp;
407
423
 
@@ -422,7 +438,7 @@ IMPLIED, INCLUDING <span class="caps">BUT NOT LIMITED TO THE WARRANTIES OF MERCH
422
438
 
423
439
  <div id="intro.related-works.pli" class="section">
424
440
  <h2 class="title">
425
- <a href="#a-607560688">7.1</a>
441
+ <a href="#a-607432668">7.1</a>
426
442
 
427
443
  &nbsp;
428
444
 
data/doc/rss.xml CHANGED
@@ -4,6 +4,102 @@
4
4
  <title>Ruby-VPI</title>
5
5
  <link>http://ruby-vpi.rubyforge.org</link>
6
6
  <description>Ruby-VPI is a Ruby interface to IEEE 1364-2005 Verilog VPI and a platform for unit testing, rapid prototyping, and systems integration of Verilog modules through Ruby. It lets you create complex Verilog test benches easily and wholly in Ruby.</description>
7
+ <item>
8
+ <title>Version 18.0.0 released</title>
9
+ <link>http://ruby-vpi.rubyforge.org/doc/history.html#a18.0.0</link>
10
+ <guid>http://ruby-vpi.rubyforge.org/doc/history.html#a18.0.0</guid>
11
+ <description>&lt;h1 id=&quot;18.0.0&quot;&gt;Version 18.0.0 (2007-07-31)&lt;/h1&gt;
12
+
13
+ &lt;p&gt;This release restores support for Synopsys VCS and Cadence NC-Sim, improves portability and performance, and enhances the VPI abstraction layer.&lt;/p&gt;
14
+
15
+
16
+ &lt;h2&gt;Thanks&lt;/h2&gt;
17
+
18
+
19
+ &lt;ul&gt;
20
+ &lt;li&gt;Calvin Wong discovered &lt;a href=&quot;http://rubyforge.org/forum/message.php?msg_id=25691&quot;&gt;how to bypass the following error&lt;/a&gt; emitted by Synopsys VCS when loading the Ruby-VPI shared object file.
21
+
22
+ &lt;pre&gt;
23
+ Could not open library specified in -load option obj/vcs
24
+ obj/vcs: undefined symbol: vpi_put_data
25
+ &lt;/pre&gt;&lt;/li&gt;
26
+ &lt;/ul&gt;
27
+
28
+
29
+ &lt;h2&gt;Caution&lt;/h2&gt;
30
+
31
+
32
+ &lt;ul&gt;
33
+ &lt;li&gt;&lt;a href=&quot;http://www.swig.org/&quot;&gt;SWIG&lt;/a&gt; is now required in order to compile and install Ruby-VPI.&lt;/li&gt;
34
+ &lt;/ul&gt;
35
+
36
+
37
+ &lt;ul&gt;
38
+ &lt;li&gt;&lt;code class=&quot;code&quot;&gt;&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Vpi&lt;/span&gt;::&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Handle&lt;/span&gt;.put_value&lt;/code&gt; no longer checks whether the value written matches the value read back after writing because that only works when there is no VPI delay associated with the write.&lt;/li&gt;
39
+ &lt;/ul&gt;
40
+
41
+
42
+ &lt;ul&gt;
43
+ &lt;li&gt;When &lt;code class=&quot;code&quot;&gt;&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Vpi&lt;/span&gt;::&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Handle&lt;/span&gt;.put_value&lt;/code&gt; is used to write a value to a wire (VpiNet), it now &lt;em&gt;forces&lt;/em&gt; the value. This is done to ensure portability:
44
+
45
+ &lt;p&gt;Synopsys VCS and Cadence NC-Sim forget the value written to a wire during the next simulation time step, whereas Mentor Modelsim and GPL Cver remember the value (thereby treating wires as registers).&lt;/p&gt;
46
+
47
+
48
+ &lt;p&gt;Note that you have to release a forced value (using &lt;code class=&quot;code&quot;&gt;&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Vpi&lt;/span&gt;::&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Handle&lt;/span&gt;.release_value&lt;/code&gt;) on a wire after writing to the wire if you want the design under test have the ability to update the value of the wire later on:&lt;/p&gt;
49
+
50
+
51
+ &lt;pre class=&quot;code&quot;&gt;
52
+ your_wire.intVal = &lt;span style=&quot;color:#00D; font-weight:bold&quot;&gt;15&lt;/span&gt;
53
+ your_wire.release_value
54
+ advance_time &lt;span style=&quot;color:#888&quot;&gt;# let the Verilog DUT modify your_wire&lt;/span&gt;
55
+ &lt;/pre&gt;
56
+
57
+
58
+ &lt;p&gt;In addition, you can check if a wire has a forced value using the &lt;code class=&quot;code&quot;&gt;&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Vpi&lt;/span&gt;::&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Handle&lt;/span&gt;.value_forced?&lt;/code&gt; method.&lt;/p&gt;&lt;/li&gt;
59
+ &lt;/ul&gt;
60
+
61
+
62
+ &lt;ul&gt;
63
+ &lt;li&gt;If the format is not specified, &lt;code class=&quot;code&quot;&gt;&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Vpi&lt;/span&gt;::&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Handle&lt;/span&gt;.get_value&lt;/code&gt; now assumes that you want to read the value in VpiIntVal format (because this is the most common case).&lt;/li&gt;
64
+ &lt;/ul&gt;
65
+
66
+
67
+ &lt;ul&gt;
68
+ &lt;li&gt;The definition of &amp;#8220;Derivatives&amp;#8221; has been reworded for clarity in the &lt;a href=&quot;readme.html#intro.license&quot;&gt;project license&lt;/a&gt;.&lt;/li&gt;
69
+ &lt;/ul&gt;
70
+
71
+
72
+ &lt;h2&gt;Repairs&lt;/h2&gt;
73
+
74
+
75
+ &lt;ul&gt;
76
+ &lt;li&gt;Synopsys VCS and Cadence NC-Sim simulators now correctly load Ruby-VPI. Also, the 64-bit versions of these simulators are now supported.&lt;/li&gt;
77
+ &lt;/ul&gt;
78
+
79
+
80
+ &lt;h2&gt;Improvements&lt;/h2&gt;
81
+
82
+
83
+ &lt;ul&gt;
84
+ &lt;li&gt;Added &amp;#8220;force_value&amp;#8221;, &amp;#8220;release_value&amp;#8221;, and &amp;#8220;value_forced?&amp;#8221; methods to the &lt;code class=&quot;code&quot;&gt;&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Vpi&lt;/span&gt;::&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Handle&lt;/span&gt;&lt;/code&gt; class.&lt;/li&gt;
85
+ &lt;/ul&gt;
86
+
87
+
88
+ &lt;ul&gt;
89
+ &lt;li&gt;&lt;code class=&quot;code&quot;&gt;&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Vpi&lt;/span&gt;::&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Handle&lt;/span&gt;.put_value&lt;/code&gt; now tries to automatically detect the format of the value to be written. As a result, you can now write &lt;code class=&quot;code&quot;&gt;your_handle.put_value &lt;span style=&quot;color:#00D; font-weight:bold&quot;&gt;35&lt;/span&gt;&lt;/code&gt; in lieu of writing &lt;code class=&quot;code&quot;&gt;your_handle.intVal = &lt;span style=&quot;color:#00D; font-weight:bold&quot;&gt;35&lt;/span&gt;&lt;/code&gt;.&lt;/li&gt;
90
+ &lt;/ul&gt;
91
+
92
+
93
+ &lt;ul&gt;
94
+ &lt;li&gt;&lt;code class=&quot;code&quot;&gt;&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Vpi&lt;/span&gt;::&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Handle&lt;/span&gt;.inspect&lt;/code&gt; now shows the hexStrVal of the handle (because it is a common case to want to see a handle&amp;#8217;s logic value along with its other information).&lt;/li&gt;
95
+ &lt;/ul&gt;
96
+
97
+
98
+ &lt;ul&gt;
99
+ &lt;li&gt;Added method caching (memoizing) for VPI property accesses on handles.&lt;/li&gt;
100
+ &lt;/ul&gt;</description>
101
+ <pubDate>Tue, 31 Jul 2007 00:00:00 PDT</pubDate>
102
+ </item>
7
103
  <item>
8
104
  <title>Version 17.0.0 released</title>
9
105
  <link>http://ruby-vpi.rubyforge.org/doc/history.html#a17.0.0</link>
@@ -165,75 +261,5 @@
165
261
  &lt;/ul&gt;</description>
166
262
  <pubDate>Sun, 27 May 2007 00:00:00 PDT</pubDate>
167
263
  </item>
168
- <item>
169
- <title>Version 16.0.0 released</title>
170
- <link>http://ruby-vpi.rubyforge.org/doc/history.html#a16.0.0</link>
171
- <guid>http://ruby-vpi.rubyforge.org/doc/history.html#a16.0.0</guid>
172
- <description>&lt;h1 id=&quot;16.0.0&quot;&gt;Version 16.0.0 (2007-05-02)&lt;/h1&gt;
173
-
174
- &lt;p&gt;This release adds support for the &lt;a href=&quot;http://www.cadence.com/products/functional_ver/nc-verilog/&quot;&gt;Cadence NC-Sim / NC-Verilog&lt;/a&gt; simulator, improves the project website and documentation, simplifies interaction with VPI, and comes with a more permissive license.&lt;/p&gt;
175
-
176
-
177
- &lt;h2&gt;Caution&lt;/h2&gt;
178
-
179
-
180
- &lt;ul&gt;
181
- &lt;li&gt;The &lt;code class=&quot;code&quot;&gt;&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Integer&lt;/span&gt;.ensure_min&lt;/code&gt; and &lt;code class=&quot;code&quot;&gt;&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Integer&lt;/span&gt;.ensure_max&lt;/code&gt; methods have been removed from the &lt;tt&gt;ruby-vpi/integer.rb&lt;/tt&gt; library because Ruby already has idioms for these operations: &lt;pre&gt;
182
- &amp;gt;&amp;gt; 5.ensure_min 10
183
- =&amp;gt; 10
184
- &amp;gt;&amp;gt; [5, 10].max
185
- =&amp;gt; 10
186
-
187
- &amp;gt;&amp;gt; 5.ensure_max 10
188
- =&amp;gt; 5
189
- &amp;gt;&amp;gt; [5, 10].min
190
- =&amp;gt; 5
191
- &lt;/pre&gt;&lt;/li&gt;
192
- &lt;/ul&gt;
193
-
194
-
195
- &lt;ul&gt;
196
- &lt;li&gt;Ruby-VPI is now developed under a &lt;a href=&quot;readme.html#intro.license&quot;&gt;more permissive license&lt;/a&gt; that better reflects my ethical beliefs than &lt;a href=&quot;http://www.gnu.org/copyleft/gpl.html&quot;&gt;the previous license&lt;/a&gt;.&lt;/li&gt;
197
- &lt;/ul&gt;
198
-
199
-
200
- &lt;h2&gt;New features&lt;/h2&gt;
201
-
202
-
203
- &lt;ul&gt;
204
- &lt;li&gt;The &lt;a href=&quot;http://www.cadence.com/products/functional_ver/nc-verilog/&quot;&gt;Cadence NC-Sim / NC-Verilog&lt;/a&gt; (ncsim) simulator is now supported.&lt;/li&gt;
205
- &lt;/ul&gt;
206
-
207
-
208
- &lt;ul&gt;
209
- &lt;li&gt;VPI structures (whose names begin with &amp;#8220;S_&amp;#8221;) now allow initialization of their members through their constructor, in the style of Ruby on Rails. For example, the expression &lt;code class=&quot;code&quot;&gt;time = &lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;S_vpi_time&lt;/span&gt;.new &lt;span style=&quot;color:#A60&quot;&gt;:type&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;VpiSuppressTime&lt;/span&gt;&lt;/code&gt; is equivalent to: &lt;pre class=&quot;code&quot;&gt;
210
- time = &lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;S_vpi_time&lt;/span&gt;.new
211
- time.type = &lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;VpiSuppressTime&lt;/span&gt;
212
- &lt;/pre&gt;&lt;/li&gt;
213
- &lt;/ul&gt;
214
-
215
-
216
- &lt;ul&gt;
217
- &lt;li&gt;Added the &lt;code class=&quot;code&quot;&gt;&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Vpi&lt;/span&gt;::&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Handle&lt;/span&gt;.cbValueChange&lt;/code&gt; method which simplifies the registration of a value-change callback for a particular VPI handle. For instance, the user manual&amp;#8217;s &lt;a href=&quot;manual.html#ex..callback&quot;&gt;example of setting up a value-change callback&lt;/a&gt; can now be written as follows: &lt;pre class=&quot;code&quot;&gt;
218
- &lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Counter&lt;/span&gt;.count.cbValueChange &lt;span style=&quot;color:#080; font-weight:bold&quot;&gt;do&lt;/span&gt; |s_cb_data|
219
- puts &lt;span style=&quot;background-color:#fff0f0&quot;&gt;&lt;span style=&quot;color:#710&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#D20&quot;&gt;hello from callback! time=&lt;/span&gt;&lt;span style=&quot;background: #eee&quot;&gt;&lt;span style=&quot;font-weight: bold; color: #888&quot;&gt;#{&lt;/span&gt;s_cb_data.time.to_i&lt;span style=&quot;font-weight: bold; color: #888&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:#D20&quot;&gt; count=&lt;/span&gt;&lt;span style=&quot;background: #eee&quot;&gt;&lt;span style=&quot;font-weight: bold; color: #888&quot;&gt;#{&lt;/span&gt;s_cb_data.obj.intVal&lt;span style=&quot;font-weight: bold; color: #888&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:#710&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
220
- &lt;span style=&quot;color:#080; font-weight:bold&quot;&gt;end&lt;/span&gt;
221
- &lt;/pre&gt;&lt;/li&gt;
222
- &lt;/ul&gt;
223
-
224
-
225
- &lt;h2&gt;Details&lt;/h2&gt;
226
-
227
-
228
- &lt;ul&gt;
229
- &lt;li&gt;Revised the project website according to the &lt;a href=&quot;http://producingoss.com&quot;&gt;Producing OSS&lt;/a&gt; guidelines.&lt;/li&gt;
230
- &lt;/ul&gt;
231
-
232
-
233
- &lt;ul&gt;
234
- &lt;li&gt;Added instructions for checking out source code and generating documentation.&lt;/li&gt;
235
- &lt;/ul&gt;</description>
236
- <pubDate>Wed, 02 May 2007 00:00:00 PDT</pubDate>
237
- </item>
238
264
  </channel>
239
265
  </rss>
data/ext/Rakefile CHANGED
@@ -1,8 +1,9 @@
1
1
  # Build file for the native C extension.
2
2
  #
3
3
  # = Environment variables
4
- # CFLAGS:: Arguments to the compiler.
5
- # LDFLAGS:: Arguments to the linker.
4
+ # CFLAGS:: Arguments to the compiler.
5
+ # LDFLAGS:: Arguments to the linker.
6
+ # SIMULATOR:: ID of the simulator.
6
7
  #--
7
8
  # Copyright 2006 Suraj N. Kurapati
8
9
  # See the file named LICENSE for details.
@@ -23,29 +24,41 @@ file 'Makefile' => [:swig, 'extconf.rb'] do |t|
23
24
  ruby t.prerequisites[1], "--with-cflags=#{ENV['CFLAGS']}", "--with-ldflags=#{ENV['LDFLAGS']}"
24
25
  end
25
26
 
26
- CLEAN.include 'Makefile', 'mkmf.log', '*.o', '*.' + Config::CONFIG['DLEXT']
27
+ CLEAN.include 'Makefile', 'mkmf.log', '*.o', "*.#{Config::CONFIG['DLEXT']}"
27
28
 
28
29
 
29
30
  desc 'Generate Ruby wrapper for VPI.'
30
31
  task :swig => 'swig_wrap.cin'
31
32
 
32
33
  file 'swig_wrap.cin' => 'swig_vpi.i' do |t|
33
- sh %w{swig -ruby -o}, t.name, t.prerequisites[0]
34
+ sh %w[swig -Werror -w801 -ruby -o], t.name, t.prerequisites[0]
34
35
  end
35
36
 
36
37
  file 'swig_vpi.i' => 'swig_vpi.h'
37
38
 
38
- # avoid compilation errors due to va_list, which is used
39
- # in the SWIG-generated wrapper for VPI vprintf functions
39
+ # create a custom version of the standard vpi_user.h file to
40
+ # accomodate quirks in C compilers and Verilog simulators
40
41
  file 'swig_vpi.h' => 'vpi_user.h' do |t|
41
42
  src, dst = t.prerequisites[0], t.name
42
43
 
43
44
  File.open(dst, 'w') do |f|
44
- f << File.read(src).gsub(/\bva_list\b/, 'void*')
45
+ input = File.read(src)
46
+
47
+ # this is only relevant for the C language VPI interface
48
+ input.gsub! %r{^.*vlog_startup_routines.*$}, ''
49
+
50
+ # avoid compilation errors due to va_list, which is used
51
+ # in the SWIG-generated wrapper for VPI vprintf functions
52
+ input.gsub! %r{\bva_list\b}, 'void*'
53
+
54
+ # VCS does not load the Ruby-VPI shared object file if it contains
55
+ # references to the vpi_put_data and vpi_get_data symbols
56
+ if ENV['SIMULATOR'] == 'vcs'
57
+ input.gsub! %r{^.*vpi_(get|put)_data[^;]+;}, ''
58
+ end
59
+
60
+ f << input
45
61
  end
46
62
  end
47
63
 
48
- # NOTE: since SWIG is not a requirement for users,
49
- # we should not clobber these generated files
50
- #
51
- #CLOBBER.include 'swig_wrap.cin', 'swig_vpi.h'
64
+ CLEAN.include 'swig_wrap.cin', 'swig_vpi.h'
data/ext/swig_vpi.h CHANGED
@@ -894,7 +894,7 @@ XXTERN vpiHandle vpi_handle_by_multi_index PROTO_PARAMS((vpiHandle obj,
894
894
 
895
895
  /****************************** GLOBAL VARIABLES ******************************/
896
896
 
897
- PLI_VEXTERN PLI_DLLESPEC void (*vlog_startup_routines[])();
897
+
898
898
 
899
899
  /* array of function pointers, last pointer should be null */
900
900