ruby-vpi 11.1.0 → 11.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (292) hide show
  1. data/Rakefile +8 -37
  2. data/bin/generate_test_tpl/bench.v +1 -1
  3. data/doc/{src/LICENSE → LICENSE} +0 -0
  4. data/doc/Rakefile +39 -14
  5. data/doc/common.css +144 -0
  6. data/doc/common.tpl +49 -0
  7. data/doc/figures/figures.dia +1589 -0
  8. data/doc/history.erb +18 -0
  9. data/doc/history.html +1726 -0
  10. data/doc/history.rb +14 -0
  11. data/doc/history.yml +686 -0
  12. data/doc/images/{COPYING → LICENSE} +0 -0
  13. data/doc/intro.inc +48 -0
  14. data/doc/lib/doc_format.rb +62 -0
  15. data/doc/lib/doc_proxy.rb +160 -0
  16. data/doc/lib/erb_content.rb +67 -0
  17. data/doc/lib/erb_proxy.rb +48 -0
  18. data/doc/manual.erb +768 -0
  19. data/doc/manual.html +2107 -0
  20. data/doc/manual.rb +5 -0
  21. data/{MEMO → doc/memo.erb} +0 -0
  22. data/{memo.part.html → doc/memo.html} +38 -5
  23. data/doc/readme.erb +36 -0
  24. data/doc/readme.html +171 -0
  25. data/index.html +1 -0
  26. data/lib/ruby-vpi/float.rb +52 -0
  27. data/lib/ruby-vpi/rspec.rb +6 -1
  28. data/lib/ruby-vpi/verilog_parser.rb +4 -5
  29. data/ref/c/annotated.html +1 -6
  30. data/ref/c/common_8h.html +1 -1
  31. data/ref/c/files.html +1 -3
  32. data/ref/c/functions.html +24 -44
  33. data/ref/c/functions_vars.html +24 -44
  34. data/ref/c/globals.html +5 -211
  35. data/ref/c/globals_0x63.html +32 -49
  36. data/ref/c/globals_0x65.html +3 -10
  37. data/ref/c/globals_0x66.html +3 -20
  38. data/ref/c/globals_0x70.html +19 -26
  39. data/ref/c/globals_0x72.html +4 -15
  40. data/ref/c/globals_0x73.html +13 -199
  41. data/ref/c/globals_0x74.html +2 -9
  42. data/ref/c/globals_0x76.html +415 -426
  43. data/ref/c/globals_0x78.html +3 -10
  44. data/ref/c/globals_defs.html +30 -35
  45. data/ref/c/globals_defs_0x65.html +2 -7
  46. data/ref/c/globals_defs_0x70.html +3 -8
  47. data/ref/c/globals_defs_0x76.html +413 -420
  48. data/ref/c/globals_defs_0x78.html +2 -7
  49. data/ref/c/globals_enum.html +1 -1
  50. data/ref/c/globals_eval.html +1 -1
  51. data/ref/c/globals_func.html +14 -173
  52. data/ref/c/globals_type.html +26 -29
  53. data/ref/c/globals_vars.html +4 -88
  54. data/ref/c/index.html +1 -1
  55. data/ref/c/relay_8c.html +1 -1
  56. data/ref/c/relay_8h.html +1 -1
  57. data/ref/c/structrelay____RubyOptions____def.html +1 -1
  58. data/ref/c/structt__cb__data.html +6 -23
  59. data/ref/c/structt__vpi__delay.html +3 -20
  60. data/ref/c/structt__vpi__error__info.html +3 -71
  61. data/ref/c/structt__vpi__strengthval.html +3 -3
  62. data/ref/c/structt__vpi__systf__data.html +12 -46
  63. data/ref/c/structt__vpi__time.html +3 -3
  64. data/ref/c/structt__vpi__value.html +3 -113
  65. data/ref/c/structt__vpi__vecval.html +3 -3
  66. data/ref/c/structt__vpi__vlog__info.html +3 -54
  67. data/ref/c/swig_8c.html +2 -2
  68. data/ref/c/swig_8h.html +1 -1
  69. data/ref/c/verilog_8h.html +1 -1
  70. data/ref/c/vlog_8c.html +1 -1
  71. data/ref/c/vlog_8h.html +1 -1
  72. data/ref/c/vpi__user_8h.html +16 -16
  73. data/ref/ruby/classes/ERB.html +5 -5
  74. data/ref/ruby/classes/ERB.src/{M000034.html → M000036.html} +0 -0
  75. data/ref/ruby/classes/FileUtils.html +10 -10
  76. data/ref/ruby/classes/FileUtils.src/{M000081.html → M000083.html} +0 -0
  77. data/ref/ruby/classes/FileUtils.src/{M000082.html → M000084.html} +0 -0
  78. data/ref/ruby/classes/Float.html +140 -0
  79. data/ref/ruby/classes/Float.src/M000031.html +19 -0
  80. data/ref/ruby/classes/RDoc.html +5 -5
  81. data/ref/ruby/classes/RDoc.src/{M000095.html → M000097.html} +0 -0
  82. data/ref/ruby/classes/RubyVpi.html +10 -10
  83. data/ref/ruby/classes/RubyVpi.src/{M000083.html → M000085.html} +0 -0
  84. data/ref/ruby/classes/RubyVpi.src/{M000084.html → M000086.html} +0 -0
  85. data/ref/ruby/classes/String.html +33 -10
  86. data/ref/ruby/classes/String.src/M000033.html +28 -5
  87. data/ref/ruby/classes/String.src/M000034.html +18 -0
  88. data/ref/ruby/classes/String.src/M000035.html +36 -0
  89. data/ref/ruby/classes/Template.html +5 -5
  90. data/ref/ruby/classes/Template.src/{M000031.html → M000032.html} +0 -0
  91. data/ref/ruby/classes/VerilogParser/Module.src/M000006.html +9 -8
  92. data/ref/ruby/classes/VerilogParser/Module/Parameter.src/M000011.html +5 -7
  93. data/ref/ruby/classes/VerilogParser/Module/Port.src/M000007.html +7 -7
  94. data/ref/ruby/classes/VerilogParser/Module/Port.src/M000008.html +4 -4
  95. data/ref/ruby/classes/VerilogParser/Module/Port.src/M000009.html +4 -4
  96. data/ref/ruby/classes/VerilogParser/Module/Port.src/M000010.html +4 -4
  97. data/ref/ruby/classes/Vpi/Handle.html +46 -46
  98. data/ref/ruby/classes/Vpi/Handle.src/M000087.html +5 -9
  99. data/ref/ruby/classes/Vpi/Handle.src/M000088.html +5 -31
  100. data/ref/ruby/classes/Vpi/Handle.src/M000089.html +9 -74
  101. data/ref/ruby/classes/Vpi/Handle.src/M000090.html +31 -17
  102. data/ref/ruby/classes/Vpi/Handle.src/M000091.html +74 -11
  103. data/ref/ruby/classes/Vpi/Handle.src/M000092.html +30 -0
  104. data/ref/ruby/classes/Vpi/Handle.src/M000093.html +11 -55
  105. data/ref/ruby/classes/Vpi/Handle.src/M000095.html +68 -0
  106. data/ref/ruby/classes/Vpi/Handle/Property.html +5 -5
  107. data/ref/ruby/classes/Vpi/Handle/Property.src/{M000094.html → M000096.html} +0 -0
  108. data/ref/ruby/classes/XX/Document.html +45 -45
  109. data/ref/ruby/classes/XX/Document.src/M000074.html +9 -7
  110. data/ref/ruby/classes/XX/Document.src/M000075.html +7 -7
  111. data/ref/ruby/classes/XX/Document.src/M000076.html +7 -9
  112. data/ref/ruby/classes/XX/Document.src/M000077.html +7 -8
  113. data/ref/ruby/classes/XX/Document.src/M000078.html +9 -8
  114. data/ref/ruby/classes/XX/Document.src/M000079.html +8 -21
  115. data/ref/ruby/classes/XX/Document.src/M000080.html +8 -85
  116. data/ref/ruby/classes/XX/Document.src/M000081.html +34 -0
  117. data/ref/ruby/classes/XX/Document.src/M000082.html +98 -0
  118. data/ref/ruby/classes/XX/HTML4.html +5 -5
  119. data/ref/ruby/classes/XX/HTML4.src/{M000036.html → M000038.html} +0 -0
  120. data/ref/ruby/classes/XX/HTML4/Strict.html +5 -5
  121. data/ref/ruby/classes/XX/HTML4/Strict.src/{M000038.html → M000040.html} +0 -0
  122. data/ref/ruby/classes/XX/HTML4/Transitional.html +5 -5
  123. data/ref/ruby/classes/XX/HTML4/Transitional.src/{M000037.html → M000039.html} +0 -0
  124. data/ref/ruby/classes/XX/Markup.html +5 -5
  125. data/ref/ruby/classes/XX/Markup.src/{M000043.html → M000045.html} +0 -0
  126. data/ref/ruby/classes/XX/Markup/ClassMethods.html +40 -40
  127. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000046.html +9 -12
  128. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000047.html +7 -7
  129. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000048.html +12 -14
  130. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000049.html +7 -7
  131. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000050.html +14 -14
  132. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000051.html +7 -9
  133. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000052.html +27 -0
  134. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000053.html +22 -0
  135. data/ref/ruby/classes/XX/Markup/InstanceMethods.html +100 -100
  136. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000054.html +43 -18
  137. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000055.html +20 -35
  138. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000056.html +18 -7
  139. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000057.html +35 -18
  140. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000058.html +7 -19
  141. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000059.html +18 -19
  142. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000060.html +19 -15
  143. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000061.html +19 -10
  144. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000062.html +15 -13
  145. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000063.html +10 -7
  146. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000064.html +13 -7
  147. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000065.html +7 -7
  148. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000066.html +7 -7
  149. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000067.html +7 -7
  150. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000068.html +7 -8
  151. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000069.html +7 -7
  152. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000070.html +8 -7
  153. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000071.html +7 -7
  154. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000072.html +20 -0
  155. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000073.html +20 -0
  156. data/ref/ruby/classes/XX/XHTML.html +5 -5
  157. data/ref/ruby/classes/XX/XHTML.src/{M000039.html → M000041.html} +0 -0
  158. data/ref/ruby/classes/XX/XHTML/Strict.html +5 -5
  159. data/ref/ruby/classes/XX/XHTML/Strict.src/{M000041.html → M000043.html} +0 -0
  160. data/ref/ruby/classes/XX/XHTML/Transitional.html +5 -5
  161. data/ref/ruby/classes/XX/XHTML/Transitional.src/{M000040.html → M000042.html} +0 -0
  162. data/ref/ruby/classes/XX/XML.html +5 -5
  163. data/ref/ruby/classes/XX/XML.src/{M000035.html → M000037.html} +0 -0
  164. data/ref/ruby/classes/XX/XMLish.html +5 -5
  165. data/ref/ruby/classes/XX/XMLish.src/{M000042.html → M000044.html} +0 -0
  166. data/ref/ruby/created.rid +1 -1
  167. data/ref/ruby/files/lib/ruby-vpi/float_rb.html +101 -0
  168. data/ref/ruby/files/lib/ruby-vpi/rspec_rb.html +1 -1
  169. data/ref/ruby/files/lib/ruby-vpi/runner_rb.html +1 -1
  170. data/ref/ruby/files/lib/ruby-vpi/verilog_parser_rb.html +1 -1
  171. data/ref/ruby/fr_class_index.html +1 -0
  172. data/ref/ruby/fr_file_index.html +1 -0
  173. data/ref/ruby/fr_method_index.html +69 -67
  174. data/samp/counter/counter.v +4 -4
  175. data/samp/counter/counter_rspec_spec.rb +4 -8
  176. data/samp/counter/counter_xunit_spec.rb +4 -8
  177. metadata +112 -196
  178. data/HEADER +0 -97
  179. data/HISTORY +0 -687
  180. data/README +0 -23
  181. data/doc/background.html +0 -3
  182. data/doc/background.methodology.html +0 -3
  183. data/doc/background.organization.html +0 -10
  184. data/doc/background.running-tests.html +0 -3
  185. data/doc/background.terminology.html +0 -3
  186. data/doc/gfdl-0.html +0 -18
  187. data/doc/gfdl-1.html +0 -70
  188. data/doc/gfdl-10.html +0 -15
  189. data/doc/gfdl-2.html +0 -13
  190. data/doc/gfdl-3.html +0 -31
  191. data/doc/gfdl-4.html +0 -75
  192. data/doc/gfdl-5.html +0 -20
  193. data/doc/gfdl-6.html +0 -12
  194. data/doc/gfdl-7.html +0 -16
  195. data/doc/gfdl-8.html +0 -17
  196. data/doc/gfdl-9.html +0 -9
  197. data/doc/gfdl-addendum.html +0 -25
  198. data/doc/gfdl.html +0 -11
  199. data/doc/glossary.html +0 -3
  200. data/doc/hacking.html +0 -3
  201. data/doc/hacking.release-packages.html +0 -7
  202. data/doc/images/ChangeLog +0 -27
  203. data/doc/images/blank.png +0 -0
  204. data/doc/images/callouts/1.png +0 -0
  205. data/doc/images/callouts/10.png +0 -0
  206. data/doc/images/callouts/11.png +0 -0
  207. data/doc/images/callouts/12.png +0 -0
  208. data/doc/images/callouts/13.png +0 -0
  209. data/doc/images/callouts/14.png +0 -0
  210. data/doc/images/callouts/15.png +0 -0
  211. data/doc/images/callouts/2.png +0 -0
  212. data/doc/images/callouts/3.png +0 -0
  213. data/doc/images/callouts/4.png +0 -0
  214. data/doc/images/callouts/5.png +0 -0
  215. data/doc/images/callouts/6.png +0 -0
  216. data/doc/images/callouts/7.png +0 -0
  217. data/doc/images/callouts/8.png +0 -0
  218. data/doc/images/callouts/9.png +0 -0
  219. data/doc/images/callouts/ChangeLog +0 -15
  220. data/doc/images/copyright +0 -55
  221. data/doc/images/draft.png +0 -0
  222. data/doc/images/toc-blank.png +0 -0
  223. data/doc/images/toc-minus.png +0 -0
  224. data/doc/images/toc-plus.png +0 -0
  225. data/doc/index.html +0 -4
  226. data/doc/introduction.html +0 -3
  227. data/doc/introduction.license.html +0 -3
  228. data/doc/introduction.manifest.html +0 -3
  229. data/doc/introduction.related-works.html +0 -3
  230. data/doc/introduction.resources.html +0 -3
  231. data/doc/manual.txt +0 -1852
  232. data/doc/problem.ivl.html +0 -18
  233. data/doc/problems.html +0 -3
  234. data/doc/problems.ruby.html +0 -3
  235. data/doc/problems.vsim.html +0 -3
  236. data/doc/setup.html +0 -3
  237. data/doc/setup.installation.html +0 -9
  238. data/doc/setup.maintenance.html +0 -3
  239. data/doc/setup.reqs.html +0 -3
  240. data/doc/src/figures.dia +0 -0
  241. data/doc/src/license.xml +0 -446
  242. data/doc/src/manual.xml +0 -1824
  243. data/doc/src/manual.xsl +0 -23
  244. data/doc/src/shared.dtd +0 -62
  245. data/doc/styles/manual.css +0 -91
  246. data/doc/usage.examples.html +0 -3
  247. data/doc/usage.html +0 -3
  248. data/doc/usage.tools.html +0 -9
  249. data/doc/usage.tutorial.html +0 -189
  250. data/header.html +0 -95
  251. data/header.part.html +0 -95
  252. data/history.html +0 -1442
  253. data/history.part.html +0 -1346
  254. data/memo.html +0 -211
  255. data/readme.html +0 -138
  256. data/readme.part.html +0 -42
  257. data/ref/c/globals_0x62.html +0 -62
  258. data/ref/c/globals_0x67.html +0 -64
  259. data/ref/c/globals_0x69.html +0 -62
  260. data/ref/c/globals_0x6c.html +0 -64
  261. data/ref/c/globals_0x6d.html +0 -62
  262. data/ref/c/globals_0x6e.html +0 -63
  263. data/ref/c/globals_0x75.html +0 -63
  264. data/ref/c/globals_defs_0x6c.html +0 -57
  265. data/ref/c/globals_defs_0x6e.html +0 -56
  266. data/ref/c/globals_defs_0x72.html +0 -57
  267. data/ref/c/globals_defs_0x73.html +0 -164
  268. data/ref/c/globals_defs_0x75.html +0 -56
  269. data/ref/c/globals_func_0x66.html +0 -62
  270. data/ref/c/globals_func_0x67.html +0 -55
  271. data/ref/c/globals_func_0x69.html +0 -53
  272. data/ref/c/globals_func_0x70.html +0 -53
  273. data/ref/c/globals_func_0x72.html +0 -57
  274. data/ref/c/globals_func_0x73.html +0 -114
  275. data/ref/c/globals_func_0x76.html +0 -57
  276. data/ref/c/structswig__cast__info.html +0 -98
  277. data/ref/c/structswig__class.html +0 -115
  278. data/ref/c/structswig__module__info.html +0 -132
  279. data/ref/c/structswig__type__info.html +0 -132
  280. data/ref/c/swig__vpi_8h.html +0 -8739
  281. data/ref/c/swig__wrap_8cin.html +0 -11556
  282. data/ref/c/unions__vpi__value__value.html +0 -166
  283. data/ref/ruby/classes/String.src/M000032.html +0 -41
  284. data/ref/ruby/classes/Vpi/Handle.src/M000085.html +0 -18
  285. data/ref/ruby/classes/Vpi/Handle.src/M000086.html +0 -18
  286. data/ref/ruby/classes/XX/Document.src/M000072.html +0 -22
  287. data/ref/ruby/classes/XX/Document.src/M000073.html +0 -20
  288. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000044.html +0 -22
  289. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000045.html +0 -20
  290. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000052.html +0 -56
  291. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000053.html +0 -33
  292. data/style.css +0 -47
data/doc/images/blank.png DELETED
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1,15 +0,0 @@
1
- 2002-05-17 Norman Walsh <nwalsh@users.sourceforge.net>
2
-
3
- * 11.gif, 11.png, 12.gif, 12.png, 13.gif, 13.png, 14.gif, 14.png, 15.gif, 15.png:
4
- New file.
5
-
6
- 2002-01-28 Norman Walsh <nwalsh@users.sourceforge.net>
7
-
8
- * 1.gif, 10.gif, 2.gif, 3.gif, 4.gif, 5.gif, 6.gif, 7.gif, 8.gif, 9.gif:
9
- New file.
10
-
11
- 2001-04-02 Norman Walsh <nwalsh@users.sourceforge.net>
12
-
13
- * 1.png, 10.png, 2.png, 3.png, 4.png, 5.png, 6.png, 7.png, 8.png, 9.png:
14
- New file.
15
-
data/doc/images/copyright DELETED
@@ -1,55 +0,0 @@
1
- This package was debianized by Mark Johnson <mrj@debian.org> on
2
- Mon, 11 Oct 2004 18:37:39 -0400
3
-
4
- It was downloaded from the Sourceforge mirror:
5
- <http://umn.dl.sourceforge.net/sourceforge/docbook/>
6
-
7
- Upstream Author: Norman Walsh <ndw@nwalsh.com> and other docbook developers at
8
- the Sourceforge DocBook Open Repository
9
-
10
-
11
- Copyright
12
- ---------
13
-
14
- Copyright (C) 1999, 2000, 2001 Norman Walsh
15
-
16
- Permission is hereby granted, free of charge, to any person
17
- obtaining a copy of this software and associated documentation
18
- files (the ``Software''), to deal in the Software without
19
- restriction, including without limitation the rights to use,
20
- copy, modify, merge, publish, distribute, sublicense, and/or
21
- sell copies of the Software, and to permit persons to whom the
22
- Software is furnished to do so, subject to the following
23
- conditions:
24
-
25
- The above copyright notice and this permission notice shall be
26
- included in all copies or substantial portions of the Software.
27
-
28
- Except as contained in this notice, the names of individuals
29
- credited with contribution to this software shall not be used in
30
- advertising or otherwise to promote the sale, use or other
31
- dealings in this Software without prior written authorization
32
- from the individuals in question.
33
-
34
- Any stylesheet derived from this Software that is publically
35
- distributed will be identified with a different name and the
36
- version strings in any derived Software will be changed so that
37
- no possibility of confusion between the derived package and this
38
- Software will exist.
39
-
40
- Warranty
41
- --------
42
-
43
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
44
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
45
- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
46
- NONINFRINGEMENT. IN NO EVENT SHALL NORMAN WALSH OR ANY OTHER
47
- CONTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
48
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
49
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
50
- OTHER DEALINGS IN THE SOFTWARE.
51
-
52
- Contacting the Author
53
- ---------------------
54
-
55
- These stylesheets are maintained by Norman Walsh, <ndw@nwalsh.com>.
data/doc/images/draft.png DELETED
Binary file
Binary file
Binary file
Binary file
data/doc/index.html DELETED
@@ -1,4 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
- <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ruby-VPI user manual</title><link rel="stylesheet" href="styles/manual.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.68.1" /><meta name="description" content="This manual explains how to use Ruby-VPI. A plain-text version of this manual is also available. Finally, you can find the newest version of this manual at the Ruby-VPI website." /><link rel="start" href="index.html" title="Ruby-VPI user manual" /><link rel="next" href="introduction.html" title="Chapter 1. Introduction" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"><span class="application">Ruby-VPI</span> user manual</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="introduction.html"><img src="images/next.png" alt="Next" /></a></td></tr></table><hr /></div><div class="book" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="id2472603"></a><span class="application">Ruby-VPI</span> user manual</h1></div><div><p class="copyright">Copyright © 2006 Suraj N. Kurapati</p></div><div><p class="copyright">Copyright © 2005, 2006 <a href="http://tango.freedesktop.org" target="_top">Tango Desktop Project</a> <em><span class="remark">for admonition and navigation graphics released under <a href="images/COPYING" target="_top">this license</a>.</span></em></p></div><div><p class="copyright">Copyright © 1999, 2000, 2001 Norman Walsh <em><span class="remark">for DocBook graphics released under <a href="images/copyright" target="_top">this license</a>.</span></em></p></div><div><div class="legalnotice"><a id="id2516394"></a><p>Permission is granted to copy, distribute and/or modify this document under the terms of the <span class="acronym">GNU</span> Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "<span class="acronym">GNU</span> Free Documentation License".</p></div></div><div><div class="abstract"><p class="title"><b>Abstract</b></p><p>This manual explains how to use <span class="application">Ruby-VPI</span>. A <a href="manual.txt" target="_top">plain-text version of this manual</a> is also available. Finally, you can find the newest version of this manual at the <a href="http://ruby-vpi.rubyforge.org" target="_top"><span class="application">Ruby-VPI</span> website</a>.</p></div></div></div><hr /></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="introduction.html">1. Introduction</a></span></dt><dd><dl><dt><span class="section"><a href="introduction.license.html">License</a></span></dt><dt><span class="section"><a href="introduction.manifest.html">Manifest</a></span></dt><dt><span class="section"><a href="introduction.resources.html">Resources</a></span></dt><dt><span class="section"><a href="introduction.related-works.html">Related works</a></span></dt><dd><dl><dt><span class="section"><a href="introduction.related-works.html#introduction.related-works.pli">Ye olde PLI</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="background.html">2. Background</a></span></dt><dd><dl><dt><span class="section"><a href="background.methodology.html">Methodology</a></span></dt><dt><span class="section"><a href="background.terminology.html">Terminology</a></span></dt><dt><span class="section"><a href="background.organization.html">Organization</a></span></dt><dd><dl><dt><span class="section"><a href="background.organization.html#organization.vpi">Interface to <span class="acronym">VPI</span></a></span></dt></dl></dd><dt><span class="section"><a href="background.running-tests.html">Running a test</a></span></dt><dd><dl><dt><span class="section"><a href="background.running-tests.html#background.running-tests.init">Initialization</a></span></dt><dt><span class="section"><a href="background.running-tests.html#background.running-tests.exec">Execution</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">3. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.reqs.html">Requirements</a></span></dt><dd><dl><dt><span class="section"><a href="setup.reqs.html#setup.reqs.optional">Recommendations</a></span></dt></dl></dd><dt><span class="section"><a href="setup.installation.html">Installation</a></span></dt><dd><dl><dt><span class="section"><a href="setup.installation.html#setup.installation.windows">Installing on Windows</a></span></dt></dl></dd><dt><span class="section"><a href="setup.maintenance.html">Maintenance</a></span></dt></dl></dd><dt><span class="chapter"><a href="usage.html">4. Usage</a></span></dt><dd><dl><dt><span class="section"><a href="usage.tools.html">Tools</a></span></dt><dd><dl><dt><span class="section"><a href="usage.tools.html#usage.tools.generate-test">Automated test generation</a></span></dt><dt><span class="section"><a href="usage.tools.html#usage.tools.verilog-ruby-conv">Verilog to Ruby conversion</a></span></dt></dl></dd><dt><span class="section"><a href="usage.tutorial.html">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="usage.tutorial.html#usage.tutorial.declare-design">Start with a design</a></span></dt><dt><span class="section"><a href="usage.tutorial.html#usage.tutorial.generate-test">Generate a test</a></span></dt><dt><span class="section"><a href="usage.tutorial.html#usage.tutorial.specification">Specify your expectations</a></span></dt><dt><span class="section"><a href="usage.tutorial.html#usage.tutorial.implement-proto">Implement the prototype</a></span></dt><dt><span class="section"><a href="usage.tutorial.html#usage.tutorial.test-proto">Verify the prototype</a></span></dt><dt><span class="section"><a href="usage.tutorial.html#usage.tutorial.implement-design">Implement the design</a></span></dt><dt><span class="section"><a href="usage.tutorial.html#usage.tutorial.test-design">Verify the design</a></span></dt></dl></dd><dt><span class="section"><a href="usage.examples.html">Examples</a></span></dt></dl></dd><dt><span class="chapter"><a href="hacking.html">5. Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="hacking.release-packages.html">Building release packages</a></span></dt></dl></dd><dt><span class="chapter"><a href="problems.html">6. Known problems</a></span></dt><dd><dl><dt><span class="section"><a href="problems.ruby.html">Ruby</a></span></dt><dd><dl><dt><span class="section"><a href="problems.ruby.html#problems.ruby.SystemStackError">SystemStackError</a></span></dt><dt><span class="section"><a href="problems.ruby.html#problems.ruby.xUnit">test/unit</a></span></dt></dl></dd><dt><span class="section"><a href="problem.ivl.html">Icarus Verilog</a></span></dt><dd><dl><dt><span class="section"><a href="problem.ivl.html#problems.ivl.vpi_handle_by_name">vpi_handle_by_name</a></span></dt><dt><span class="section"><a href="problem.ivl.html#problems.ivl.vpi_reset">Vpi::reset</a></span></dt></dl></dd><dt><span class="section"><a href="problems.vsim.html">Mentor Modelsim</a></span></dt><dd><dl><dt><span class="section"><a href="problems.vsim.html#problems.vsim.ruby_run">ruby_run()</a></span></dt></dl></dd></dl></dd><dt><span class="glossary"><a href="glossary.html">Glossary</a></span></dt><dt><span class="appendix"><a href="gfdl.html">A. GNU Free Documentation License</a></span></dt><dd><dl><dt><span class="section"><a href="gfdl-0.html">PREAMBLE</a></span></dt><dt><span class="section"><a href="gfdl-1.html">APPLICABILITY AND DEFINITIONS</a></span></dt><dt><span class="section"><a href="gfdl-2.html">VERBATIM COPYING</a></span></dt><dt><span class="section"><a href="gfdl-3.html">COPYING IN QUANTITY</a></span></dt><dt><span class="section"><a href="gfdl-4.html">MODIFICATIONS</a></span></dt><dt><span class="section"><a href="gfdl-5.html">COMBINING DOCUMENTS</a></span></dt><dt><span class="section"><a href="gfdl-6.html">COLLECTIONS OF DOCUMENTS</a></span></dt><dt><span class="section"><a href="gfdl-7.html">AGGREGATION WITH INDEPENDENT WORKS</a></span></dt><dt><span class="section"><a href="gfdl-8.html">TRANSLATION</a></span></dt><dt><span class="section"><a href="gfdl-9.html">TERMINATION</a></span></dt><dt><span class="section"><a href="gfdl-10.html">FUTURE REVISIONS OF THIS LICENSE</a></span></dt><dt><span class="section"><a href="gfdl-addendum.html">ADDENDUM: How to use this License for
4
- your documents</a></span></dt></dl></dd></dl></div><div class="list-of-figures"><p><b>List of Figures</b></p><dl><dt>2.1. <a href="background.organization.html#fig..organization">Overall organization of a test</a></dt><dt>2.2. <a href="background.organization.html#fig..organization.detail">Detailed organization of a test</a></dt><dt>2.3. <a href="background.running-tests.html#fig..ruby_init">Initialization of a test</a></dt><dt>2.4. <a href="background.running-tests.html#fig..ruby_relay">Execution of a test</a></dt><dt>4.1. <a href="usage.tutorial.html#fig..counter.v_decl">Declaration of a simple up-counter with synchronous reset</a></dt><dt>4.2. <a href="usage.tutorial.html#fig..generate-test.rspec">Generating a test with specification in rSpec format</a></dt><dt>4.3. <a href="usage.tutorial.html#fig..generate-test.unit-test">Generating a test with specification in xUnit format</a></dt><dt>4.4. <a href="usage.tutorial.html#fig..counter_rspec_spec.rb">Specification implemented in rSpec format</a></dt><dt>4.5. <a href="usage.tutorial.html#fig..counter_xunit_spec.rb">Specification implemented in xUnit format</a></dt><dt>4.6. <a href="usage.tutorial.html#fig..counter_proto.rb">Ruby prototype of our Verilog design</a></dt><dt>4.7. <a href="usage.tutorial.html#fig..test-proto.rspec">Running a test with specification in rSpec format</a></dt><dt>4.8. <a href="usage.tutorial.html#fig..test-proto.unit-test">Running a test with specification in xUnit format</a></dt><dt>4.9. <a href="usage.tutorial.html#fig..counter.v_impl">Implementation of a simple up-counter with synchronous reset</a></dt><dt>4.10. <a href="usage.tutorial.html#fig..test-design.rspec">Running a test with specification in rSpec format</a></dt><dt>4.11. <a href="usage.tutorial.html#fig..test-design.unit-test">Running a test with specification in xUnit format</a></dt></dl></div><div class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>2.1. <a href="background.organization.html#table..handle-property-accessor-naming-format">Naming format for accessing a handle's <span class="acronym">VPI</span> properties</a></dt><dt>2.2. <a href="background.organization.html#id2488103">Possible accessors and their implications</a></dt></dl></div><div class="list-of-examples"><p><b>List of Examples</b></p><dl><dt>2.1. <a href="background.organization.html#ex..handle-property-accessor-naming-format">Accessing a handle's <span class="acronym">VPI</span> properties</a></dt><dt>6.1. <a href="problem.ivl.html#ex..TestFoo">Part of a bench which instantiates a Verilog design</a></dt><dt>6.2. <a href="problem.ivl.html#ex..TestFoo_bad">Bad design with unconnected registers</a></dt><dt>6.3. <a href="problem.ivl.html#ex..TestFoo_fix">Fixed design with wired registers</a></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="introduction.html"><img src="images/next.png" alt="Next" /></a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"> </td><td width="40%" align="right" valign="top"> Chapter 1. Introduction</td></tr></table></div></body></html>
@@ -1,3 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
- <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 1. Introduction</title><link rel="stylesheet" href="styles/manual.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.68.1" /><link rel="start" href="index.html" title="Ruby-VPI user manual" /><link rel="up" href="index.html" title="Ruby-VPI user manual" /><link rel="prev" href="index.html" title="Ruby-VPI user manual" /><link rel="next" href="introduction.license.html" title="License" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 1. Introduction</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html"><img src="images/prev.png" alt="Prev" /></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="introduction.license.html"><img src="images/next.png" alt="Next" /></a></td></tr></table><hr /></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="introduction"></a>Chapter 1. Introduction</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="introduction.license.html">License</a></span></dt><dt><span class="section"><a href="introduction.manifest.html">Manifest</a></span></dt><dt><span class="section"><a href="introduction.resources.html">Resources</a></span></dt><dt><span class="section"><a href="introduction.related-works.html">Related works</a></span></dt><dd><dl><dt><span class="section"><a href="introduction.related-works.html#introduction.related-works.pli">Ye olde PLI</a></span></dt></dl></dd></dl></div><p><span class="application">Ruby-VPI</span> is a <a href="http://www.ruby-lang.org/en/20020101.html" target="_top">Ruby</a> interface to <a href="http://en.wikipedia.org/wiki/Verilog" target="_top"><span class="acronym">VPI</span></a>. It lets you create complex Verilog test benches easily and wholly in Ruby.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html"><img src="images/prev.png" alt="Prev" /></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="introduction.license.html"><img src="images/next.png" alt="Next" /></a></td></tr><tr><td width="40%" align="left" valign="top"><span class="application">Ruby-VPI</span> user manual </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home" /></a></td><td width="40%" align="right" valign="top"> License</td></tr></table></div></body></html>
@@ -1,3 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
- <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>License</title><link rel="stylesheet" href="styles/manual.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.68.1" /><link rel="start" href="index.html" title="Ruby-VPI user manual" /><link rel="up" href="introduction.html" title="Chapter 1. Introduction" /><link rel="prev" href="introduction.html" title="Chapter 1. Introduction" /><link rel="next" href="introduction.manifest.html" title="Manifest" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">License</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="introduction.html"><img src="images/prev.png" alt="Prev" /></a> </td><th width="60%" align="center">Chapter 1. Introduction</th><td width="20%" align="right"> <a accesskey="n" href="introduction.manifest.html"><img src="images/next.png" alt="Next" /></a></td></tr></table><hr /></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="introduction.license"></a>License</h2></div></div></div><p><span class="application">Ruby-VPI</span> is <a href="http://en.wikipedia.org/wiki/Free_software" target="_top">free software</a>; you can redistribute it and/or modify it under the terms of the <a href="http://www.gnu.org/copyleft/gpl.html" target="_top"><span class="acronym">GNU</span> General Public License</a> as published by the <a href="http://www.fsf.org" target="_top">Free Software Foundation</a>; either version 2 of the License, or (at your option) any later version.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="introduction.html"><img src="images/prev.png" alt="Prev" /></a> </td><td width="20%" align="center"><a accesskey="u" href="introduction.html"><img src="images/up.png" alt="Up" /></a></td><td width="40%" align="right"> <a accesskey="n" href="introduction.manifest.html"><img src="images/next.png" alt="Next" /></a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 1. Introduction </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home" /></a></td><td width="40%" align="right" valign="top"> Manifest</td></tr></table></div></body></html>
@@ -1,3 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
- <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Manifest</title><link rel="stylesheet" href="styles/manual.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.68.1" /><link rel="start" href="index.html" title="Ruby-VPI user manual" /><link rel="up" href="introduction.html" title="Chapter 1. Introduction" /><link rel="prev" href="introduction.license.html" title="License" /><link rel="next" href="introduction.resources.html" title="Resources" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Manifest</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="introduction.license.html"><img src="images/prev.png" alt="Prev" /></a> </td><th width="60%" align="center">Chapter 1. Introduction</th><td width="20%" align="right"> <a accesskey="n" href="introduction.resources.html"><img src="images/next.png" alt="Next" /></a></td></tr></table><hr /></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="introduction.manifest"></a>Manifest</h2></div></div></div><p>When you extract a <span class="application">Ruby-VPI</span> release package, the following is what you would expect to find.</p><div class="variablelist"><dl><dt><span class="term"><code class="filename">doc</code></span></dt><dd><p>This directory contains user documentation in various formats.</p></dd><dt><span class="term"><code class="filename">ref</code></span></dt><dd><p>This directory contains reference <span class="acronym">API</span> documentation in <span class="acronym">HTML</span> format.</p></dd><dt><span class="term"><code class="filename">ext</code></span></dt><dd><p>This directory contains source code, written in the C language, for the <a href="background.organization.html" title="Organization">core of <span class="application">Ruby-VPI</span></a>.</p></dd><dt><span class="term"><code class="filename">lib</code></span></dt><dd><p>This directory contains Ruby libraries provided by <span class="application">Ruby-VPI</span>.</p></dd><dt><span class="term"><code class="filename">bin</code></span></dt><dd><p>This directory contains various tools. See <a href="usage.tools.html" title="Tools">the section called “Tools”</a> for more information.</p></dd><dt><span class="term"><code class="filename">samp</code></span></dt><dd><p>This directory contains example tests. See <a href="usage.examples.html" title="Examples">the section called “Examples”</a> for more information.</p></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="introduction.license.html"><img src="images/prev.png" alt="Prev" /></a> </td><td width="20%" align="center"><a accesskey="u" href="introduction.html"><img src="images/up.png" alt="Up" /></a></td><td width="40%" align="right"> <a accesskey="n" href="introduction.resources.html"><img src="images/next.png" alt="Next" /></a></td></tr><tr><td width="40%" align="left" valign="top">License </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home" /></a></td><td width="40%" align="right" valign="top"> Resources</td></tr></table></div></body></html>
@@ -1,3 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
- <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Related works</title><link rel="stylesheet" href="styles/manual.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.68.1" /><link rel="start" href="index.html" title="Ruby-VPI user manual" /><link rel="up" href="introduction.html" title="Chapter 1. Introduction" /><link rel="prev" href="introduction.resources.html" title="Resources" /><link rel="next" href="background.html" title="Chapter 2. Background" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Related works</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="introduction.resources.html"><img src="images/prev.png" alt="Prev" /></a> </td><th width="60%" align="center">Chapter 1. Introduction</th><td width="20%" align="right"> <a accesskey="n" href="background.html"><img src="images/next.png" alt="Next" /></a></td></tr></table><hr /></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="introduction.related-works"></a>Related works</h2></div></div></div><p>You may wish to consider the following projects, which are similar to <span class="application">Ruby-VPI</span>.</p><div class="variablelist"><dl><dt><span class="term"><a href="http://rhdl.rubyforge.org" target="_top">RHDL</a></span></dt><dd><p>Hardware description and verification language based on Ruby.</p></dd><dt><span class="term"><a href="http://myhdl.jandecaluwe.com" target="_top">MyHDL</a></span></dt><dd><p>Hardware description and verification language based on Python, which features conversion to Verilog and co-simulation.</p></dd><dt><span class="term"><a href="http://jove.sourceforge.net" target="_top">JOVE</a></span></dt><dd><p>Java interface to <span class="acronym">VPI</span>.</p></dd><dt><span class="term"><a href="http://embedded.eecs.berkeley.edu/Alumni/pinhong/scriptEDA/" target="_top">ScriptEDA</a></span></dt><dd><p>Perl, Python, and Tcl interface to <span class="acronym">VPI</span>.</p></dd></dl></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="introduction.related-works.pli"></a>Ye olde PLI</h3></div></div></div><p>The following projects utilize the archaic <span class="acronym">tf</span> and <span class="abbrev">acc</span> PLI interfaces, which have been officially deprecated in IEEE Std 1364-2005.</p><div class="variablelist"><dl><dt><span class="term"><a href="http://www.nelsim.com" target="_top">ScriptSim</a></span></dt><dd><p>Perl, Python, and Tcl/Tk interface to PLI.</p></dd><dt><span class="term"><a href="http://www.veripool.com/verilog-pli.html" target="_top">Verilog::Pli</a></span></dt><dd><p>Perl interface to PLI.</p></dd><dt><span class="term"><a href="http://www.time-rover.com/jpli/" target="_top">JPLI</a></span></dt><dd><p>Java interface to PLI.</p></dd></dl></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="introduction.resources.html"><img src="images/prev.png" alt="Prev" /></a> </td><td width="20%" align="center"><a accesskey="u" href="introduction.html"><img src="images/up.png" alt="Up" /></a></td><td width="40%" align="right"> <a accesskey="n" href="background.html"><img src="images/next.png" alt="Next" /></a></td></tr><tr><td width="40%" align="left" valign="top">Resources </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home" /></a></td><td width="40%" align="right" valign="top"> Chapter 2. Background</td></tr></table></div></body></html>
@@ -1,3 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
- <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Resources</title><link rel="stylesheet" href="styles/manual.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.68.1" /><link rel="start" href="index.html" title="Ruby-VPI user manual" /><link rel="up" href="introduction.html" title="Chapter 1. Introduction" /><link rel="prev" href="introduction.manifest.html" title="Manifest" /><link rel="next" href="introduction.related-works.html" title="Related works" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Resources</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="introduction.manifest.html"><img src="images/prev.png" alt="Prev" /></a> </td><th width="60%" align="center">Chapter 1. Introduction</th><td width="20%" align="right"> <a accesskey="n" href="introduction.related-works.html"><img src="images/next.png" alt="Next" /></a></td></tr></table><hr /></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="introduction.resources"></a>Resources</h2></div></div></div><div class="variablelist"><dl><dt><span class="term"><a href="http://rubyforge.org/projects/ruby-vpi" target="_top">Project</a></span></dt><dd><p>Access project facilities, hosted generously by <a href="http://rubyforge.org" target="_top">RubyForge</a>.</p></dd><dt><span class="term"><a href="http://rubyforge.org/tracker/?group_id=1339" target="_top">Tracker</a></span></dt><dd><p>Report problems, contribute patches, and more.</p></dd><dt><span class="term"><a href="http://rubyforge.org/frs/?group_id=1339" target="_top">Releases</a></span></dt><dd><p>Download the newest release of <span class="application">Ruby-VPI</span>.</p></dd><dt><span class="term"><a href="http://ruby-vpi.rubyforge.org/src/ruby-vpi" target="_top">Sources</a></span></dt><dd><p>Browse or access the source code repository.</p></dd><dt><span class="term"><a href="http://rubyforge.org/forum/?group_id=1339" target="_top">Forums</a></span></dt><dd><p>Ask for help, give feedback, or discuss.</p></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="introduction.manifest.html"><img src="images/prev.png" alt="Prev" /></a> </td><td width="20%" align="center"><a accesskey="u" href="introduction.html"><img src="images/up.png" alt="Up" /></a></td><td width="40%" align="right"> <a accesskey="n" href="introduction.related-works.html"><img src="images/next.png" alt="Next" /></a></td></tr><tr><td width="40%" align="left" valign="top">Manifest </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home" /></a></td><td width="40%" align="right" valign="top"> Related works</td></tr></table></div></body></html>
data/doc/manual.txt DELETED
@@ -1,1852 +0,0 @@
1
- Ruby-VPI user manual
2
-
3
- Copyright 2006 Suraj N. Kurapati
4
-
5
- Copyright 2005, 2006 Tango Desktop Project for admonition and navigation
6
- graphics released under this license.
7
-
8
- Copyright 1999, 2000, 2001 Norman Walsh for DocBook graphics released under
9
- this license.
10
-
11
- Permission is granted to copy, distribute and/or modify this document under the
12
- terms of the GNU Free Documentation License, Version 1.2 or any later version
13
- published by the Free Software Foundation; with no Invariant Sections, no
14
- Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included
15
- in the section entitled "GNU Free Documentation License".
16
-
17
- Abstract
18
-
19
- This manual explains how to use Ruby-VPI. A plain-text version of this manual
20
- is also available. Finally, you can find the newest version of this manual at
21
- the Ruby-VPI website.
22
-
23
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
24
-
25
- Table of Contents
26
-
27
- 1. Introduction
28
-
29
- License
30
- Manifest
31
- Resources
32
- Related works
33
-
34
- Ye olde PLI
35
-
36
- 2. Background
37
-
38
- Methodology
39
- Terminology
40
- Organization
41
-
42
- Interface to VPI
43
-
44
- Running a test
45
-
46
- Initialization
47
- Execution
48
-
49
- 3. Setup
50
-
51
- Requirements
52
-
53
- Recommendations
54
-
55
- Installation
56
-
57
- Installing on Windows
58
-
59
- Maintenance
60
-
61
- 4. Usage
62
-
63
- Tools
64
-
65
- Automated test generation
66
- Verilog to Ruby conversion
67
-
68
- Tutorial
69
-
70
- Start with a design
71
- Generate a test
72
- Specify your expectations
73
- Implement the prototype
74
- Verify the prototype
75
- Implement the design
76
- Verify the design
77
-
78
- Examples
79
-
80
- 5. Hacking
81
-
82
- Building release packages
83
-
84
- 6. Known problems
85
-
86
- Ruby
87
-
88
- SystemStackError
89
- test/unit
90
-
91
- Icarus Verilog
92
-
93
- vpi_handle_by_name
94
- Vpi::reset
95
-
96
- Mentor Modelsim
97
-
98
- ruby_run()
99
-
100
- Glossary
101
- A. GNU Free Documentation License
102
-
103
- PREAMBLE
104
- APPLICABILITY AND DEFINITIONS
105
- VERBATIM COPYING
106
- COPYING IN QUANTITY
107
- MODIFICATIONS
108
- COMBINING DOCUMENTS
109
- COLLECTIONS OF DOCUMENTS
110
- AGGREGATION WITH INDEPENDENT WORKS
111
- TRANSLATION
112
- TERMINATION
113
- FUTURE REVISIONS OF THIS LICENSE
114
- ADDENDUM: How to use this License for your documents
115
-
116
- List of Figures
117
-
118
- 2.1. Overall organization of a test
119
- 2.2. Detailed organization of a test
120
- 2.3. Initialization of a test
121
- 2.4. Execution of a test
122
- 4.1. Declaration of a simple up-counter with synchronous reset
123
- 4.2. Generating a test with specification in rSpec format
124
- 4.3. Generating a test with specification in xUnit format
125
- 4.4. Specification implemented in rSpec format
126
- 4.5. Specification implemented in xUnit format
127
- 4.6. Ruby prototype of our Verilog design
128
- 4.7. Running a test with specification in rSpec format
129
- 4.8. Running a test with specification in xUnit format
130
- 4.9. Implementation of a simple up-counter with synchronous reset
131
- 4.10. Running a test with specification in rSpec format
132
- 4.11. Running a test with specification in xUnit format
133
-
134
- List of Tables
135
-
136
- 2.1. Naming format for accessing a handle's VPI properties
137
- 2.2. Possible accessors and their implications
138
-
139
- List of Examples
140
-
141
- 2.1. Accessing a handle's VPI properties
142
- 6.1. Part of a bench which instantiates a Verilog design
143
- 6.2. Bad design with unconnected registers
144
- 6.3. Fixed design with wired registers
145
-
146
- Chapter 1. Introduction
147
-
148
- Table of Contents
149
-
150
- License
151
- Manifest
152
- Resources
153
- Related works
154
-
155
- Ye olde PLI
156
-
157
- Ruby-VPI is a Ruby interface to VPI. It lets you create complex Verilog test
158
- benches easily and wholly in Ruby.
159
-
160
- License
161
-
162
- Ruby-VPI is free software; you can redistribute it and/or modify it under the
163
- terms of the GNU General Public License as published by the Free Software
164
- Foundation; either version 2 of the License, or (at your option) any later
165
- version.
166
-
167
- Manifest
168
-
169
- When you extract a Ruby-VPI release package, the following is what you would
170
- expect to find.
171
-
172
- doc
173
-
174
- This directory contains user documentation in various formats.
175
-
176
- ref
177
-
178
- This directory contains reference API documentation in HTML format.
179
-
180
- ext
181
-
182
- This directory contains source code, written in the C language, for the
183
- core of Ruby-VPI.
184
-
185
- lib
186
-
187
- This directory contains Ruby libraries provided by Ruby-VPI.
188
-
189
- bin
190
-
191
- This directory contains various tools. See the section called “Tools” for
192
- more information.
193
-
194
- samp
195
-
196
- This directory contains example tests. See the section called “Examples”
197
- for more information.
198
-
199
- Resources
200
-
201
- Project
202
-
203
- Access project facilities, hosted generously by RubyForge.
204
-
205
- Tracker
206
-
207
- Report problems, contribute patches, and more.
208
-
209
- Releases
210
-
211
- Download the newest release of Ruby-VPI.
212
-
213
- Sources
214
-
215
- Browse or access the source code repository.
216
-
217
- Forums
218
-
219
- Ask for help, give feedback, or discuss.
220
-
221
- Related works
222
-
223
- You may wish to consider the following projects, which are similar to Ruby-VPI.
224
-
225
- RHDL
226
-
227
- Hardware description and verification language based on Ruby.
228
-
229
- MyHDL
230
-
231
- Hardware description and verification language based on Python, which
232
- features conversion to Verilog and co-simulation.
233
-
234
- JOVE
235
-
236
- Java interface to VPI.
237
-
238
- ScriptEDA
239
-
240
- Perl, Python, and Tcl interface to VPI.
241
-
242
- Ye olde PLI
243
-
244
- The following projects utilize the archaic tf and acc PLI interfaces, which
245
- have been officially deprecated in IEEE Std 1364-2005.
246
-
247
- ScriptSim
248
-
249
- Perl, Python, and Tcl/Tk interface to PLI.
250
-
251
- Verilog::Pli
252
-
253
- Perl interface to PLI.
254
-
255
- JPLI
256
-
257
- Java interface to PLI.
258
-
259
- Chapter 2. Background
260
-
261
- Table of Contents
262
-
263
- Methodology
264
- Terminology
265
- Organization
266
-
267
- Interface to VPI
268
-
269
- Running a test
270
-
271
- Initialization
272
- Execution
273
-
274
- Ruby-VPI is a Bench which lets you Test Verilog modules using the Ruby
275
- language.
276
-
277
- Methodology
278
-
279
- Ruby-VPI presents an open-ended interface to VPI. Thus, you can use any
280
- methodology you wish when writing tests. However, BDD is emphasized in this
281
- project because it greatly simplifies thinking about how to verify a design.
282
-
283
- Terminology
284
-
285
- [Tip] Tip
286
- Have a look at the Glossary for definitions of terms used in this manual.
287
-
288
- As a newcomer into the world of Verilog, I often heard the term test bench: “I
289
- ran the test bench, but it didn't work!” or “Are you crazy?!! You still haven't
290
- written the test bench? o_O”, for example. I flipped through my textbook and
291
- surfed the Internet for a definition of the term, but it was to no avail.
292
- Instead, both resources nonchalantly employed the term throughout their being,
293
- as if mocking my ignorance of what seems to be universal knowledge.
294
-
295
- Defeated, I turned to my inner faculties to determine the answer. “Let's see,
296
- the term test bench has the word test—so it has something to do with
297
- testing—and it has the word bench—so maybe it's referring to a table where the
298
- testing should occur”. This reasoning grew increasingly familiar as my mind
299
- rummaged through towering stores of obsolescence and ultimately revealed
300
- dreaded memories of sleepless anguish: debugging electronics in the robotics
301
- laboratory.
302
-
303
- “Aha!”, I exclaimed hesitantly, trying to dismiss the past. The term has its
304
- roots in the testing of electronic devices, where an engineer would sit at a
305
- bench in an electronics laboratory and verify that an electronic component
306
- satisfies some criteria. The bench would be furnished with tools of measurement
307
- and manipulation—such as oscilloscopes, voltmeters, soldering irons, and so
308
- on—which help the engineer to verify the electronic component or locate the
309
- sources of defects in the component.
310
-
311
- Alright, now I remember what a laboratory bench is, but how does that compare
312
- with the term test bench? Surely they cannot have the same meaning, because it
313
- doesn't make sense to run a laboratory bench or to write one. Thus, to avoid
314
- propagating such confusion into this manual, I have attempted to clarify the
315
- terminology by simplifying and reintroducing it in a new light.
316
-
317
- Organization
318
-
319
- Figure 2.1. Overall organization of a test
320
-
321
- Overall organization of a test
322
-
323
- As Figure 2.1, “Overall organization of a test” shows, a test is composed of a
324
- bench, a design, and a specification. To extend the analogy of an electronics
325
- laboratory, the first acts as the laboratory bench which provides measurement
326
- and manipulation tools. The second acts as the electronic component being
327
- verified by the engineer. And the third acts as the engineer who measures,
328
- manipulates, and verifies the electronic component.
329
-
330
- Interface to VPI
331
-
332
- Figure 2.2. Detailed organization of a test
333
-
334
- Detailed organization of a test
335
-
336
- In Figure 2.2, “Detailed organization of a test”, Ruby-VPI acts as the bench, a
337
- Verilog simulator encapsulates the design, and a Ruby interpreter encapsulates
338
- the specification. Notice that Ruby-VPI encapsulates all communication between
339
- the Ruby interpreter and VPI. This allows the specification, or any Ruby
340
- program in general, to access VPI using nothing more than the Ruby language!
341
- Thus, Ruby-VPI removes the burden of having to write C programs in order to
342
- access VPI.
343
-
344
- Furthermore, Ruby-VPI presents the entire IEEE Std 1364-2005 VPI interface to
345
- the Ruby interpreter, but with the following minor changes.
346
-
347
- ● The first letter in the name of every function, type, structure, and
348
- constant becomes capitalized.
349
-
350
- For example, the s_vpi_value structure in C becomes the S_vpi_value class
351
- in Ruby. Likewise, the vpiIntVal constant in C becomes the VpiIntVal
352
- constant in Ruby.
353
-
354
- ● The VPI functions vpi_vprintf and vpi_mcd_vprintf are not made accessible
355
- to Ruby. However, this isn't a big problem because you can use Ruby's
356
- printf method instead.
357
-
358
- The reason for this limitation is that some C compilers have trouble with
359
- pointers to the va_list type. For these compilers, the second line in the
360
- code shown below causes a “type mismatch” error.
361
-
362
- void foo(va_list ap) {
363
- va_list *p = &ap;
364
- }
365
-
366
-
367
- VPI utility layer
368
-
369
- From a user's perspective, the VPI utility layer greatly enhances the ability
370
- to interact with handles. One simply invokes a handle's methods, which are
371
- carefully named in the following manner, to access either (1) its children or
372
- (2) its VPI properties.
373
-
374
- The children of a handle are simply the handles that are immediately contained
375
- within it in. For example, suppose that you had a Verilog module that contains
376
- some registers. The children, of a handle to the module, would be handles to
377
- the registers.
378
-
379
- In the event that a child handle has the same name as a VPI property, the child
380
- is given priority. However, you can always access VPI properties explicitly via
381
- the get_value and put_value methods.
382
-
383
- Table 2.1. Naming format for accessing a handle's VPI properties
384
-
385
- ┌─────────┬─┬────────┬─┬────────┬────────┐
386
- │Operation│_│Property│_│Accessor│Addendum│
387
- ├─────────┴─┼────────┼─┴────────┼────────┤
388
- │optional │required│optional │optional│
389
- └───────────┴────────┴──────────┴────────┘
390
-
391
- Operation
392
-
393
- This parameter suggests a method that should be invoked in the context of
394
- the Property parameter.
395
-
396
- Property
397
-
398
- This parameter suggests which VPI property should be accessed. The first
399
- letter of this parameter's value should be lower case, and the vpi
400
- prefix—common to all VPI properties—can be omitted.
401
-
402
- For example, the VPI property vpiFullName is considered equivalent to
403
- fullName but not equivalent to either FullName or full_name.
404
-
405
- Accessor
406
-
407
- This parameter suggests which VPI function should be used to access the VPI
408
- property. When this parameter is not specified, the VPI utility layer will
409
- attempt to guess the value of this parameter (see the source code of the
410
- Property.resolve method for details).
411
-
412
- Table 2.2. Possible accessors and their implications
413
-
414
- ┌────────┬──────────────────────┬──────────────────────────────────────┐
415
- │Accessor│Kind of value accessed│VPI functions used to access the value│
416
- ├────────┼──────────────────────┼──────────────────────────────────────┤
417
- │d │delay │vpi_get_delays, vpi_put_delays │
418
- ├────────┼──────────────────────┼──────────────────────────────────────┤
419
- │l │logic │vpi_get_value, vpi_put_value │
420
- ├────────┼──────────────────────┼──────────────────────────────────────┤
421
- │i │integer │vpi_get │
422
- ├────────┼──────────────────────┼──────────────────────────────────────┤
423
- │b │boolean │vpi_get │
424
- ├────────┼──────────────────────┼──────────────────────────────────────┤
425
- │s │string │vpi_get_str │
426
- ├────────┼──────────────────────┼──────────────────────────────────────┤
427
- │h │handle │vpi_handle │
428
- └────────┴──────────────────────┴──────────────────────────────────────┘
429
- Addendum
430
-
431
- When this parameter is a question mark (?), it suggests that the specified
432
- VPI property should be queried as a boolean value. This produces the same
433
- effect as specifying b for the Accessor parameter.
434
-
435
- When this parameter is an equal sign (=), it suggests that the specified
436
- VPI property should be written to.
437
-
438
- Example 2.1. Accessing a handle's VPI properties
439
-
440
- ┌─────────────────────┬────────────────────────────────────────────┬────────────┐
441
- │ │ Naming format │ │
442
- │ Ruby expression ├─────────┬─┬────────────┬─┬────────┬────────┤Description │
443
- │ │Operation│_│ Property │_│Accessor│Addendum│ │
444
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┼────────────┤
445
- │ │ │ │ │ │ │ │These │
446
- │handle.each_vpiNet {|│ │ │ │ │ │ │expressions │
447
- │net| puts │each │_│vpiNet │ │  │  │print the │
448
- │net.fullName} │ │ │ │ │ │ │full name of│
449
- │ │ │ │ │ │ │ │each vpiNet │
450
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤object │
451
- │ │ │ │ │ │ │ │associated │
452
- │handle.each_net {|net│each │_│net │ │  │  │with the │
453
- │| puts net.fullName} │ │ │ │ │ │ │handle. │
454
- │ │ │ │ │ │ │ │ │
455
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┼────────────┤
456
- │ │ │ │ │ │ │ │These │
457
- │handle.all_reg? {|reg│ │ │ │ │ │ │expressions │
458
- │| reg.size == 1} │all? │_│vpiReg │ │  │  │check if all│
459
- │ │ │ │ │ │ │ │registers │
460
- │ │ │ │ │ │ │ │associated │
461
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤with the │
462
- │ │ │ │ │ │ │ │handle are │
463
- │handle.all_reg? {|reg│ │ │ │ │ │ │capable of │
464
- │| reg.size == 1} │all? │_│reg │ │  │  │storing only│
465
- │ │ │ │ │ │ │ │one bit. │
466
- │ │ │ │ │ │ │ │ │
467
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┼────────────┤
468
- │handle.select_vpiNet │select │_│vpiReg │ │  │  │ │
469
- │{|net| net.x?} │ │ │ │ │ │ │ │
470
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤ │
471
- │handle.select_net {| │select │_│net │ │  │  │These │
472
- │net| net.x?} │ │ │ │ │ │ │expressions │
473
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤return a │
474
- │handle.select(VpiNet)│select │_│  │ │  │  │list of nets│
475
- │{|net| net.x?} │ │ │ │ │ │ │whose logic │
476
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤value is │
477
- │handle.select │ │ │ │ │ │ │“don't │
478
- │(:VpiNet) {|net| │select │_│  │ │  │  │care”. │
479
- │net.x?} │ │ │ │ │ │ │ │
480
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤ │
481
- │handle.select(:net) │select │_│  │ │  │  │ │
482
- │{|net| net.x?} │ │ │ │ │ │ │ │
483
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┼────────────┤
484
- │handle.vpiIntVal │  │ │vpiIntVal │ │  │  │ │
485
- │ │ │ │ │ │ │ │These │
486
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤expressions │
487
- │handle.vpiIntVal_l │  │ │vpiIntVal │_│l │  │access the │
488
- │ │ │ │ │ │ │ │logic value │
489
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤of the │
490
- │handle.intVal │  │ │intVal │ │  │  │handle's │
491
- │ │ │ │ │ │ │ │vpiIntVal │
492
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤property. │
493
- │handle.intVal_l │  │ │intVal │_│l │  │ │
494
- │ │ │ │ │ │ │ │ │
495
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┼────────────┤
496
- │handle.vpiIntVal = 15│  │ │vpiIntVal │ │  │= │ │
497
- │ │ │ │ │ │ │ │These │
498
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤expressions │
499
- │handle.vpiIntVal_l = │ │ │ │ │ │ │assign the │
500
- │15 │  │ │vpiIntVal │_│l │= │number 15 to│
501
- │ │ │ │ │ │ │ │the logic │
502
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤value of the│
503
- │handle.intVal = 15 │  │ │intVal │ │  │= │handle's │
504
- │ │ │ │ │ │ │ │vpiIntVal │
505
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤property. │
506
- │handle.intVal_l = 15 │  │ │intVal │_│l │= │ │
507
- │ │ │ │ │ │ │ │ │
508
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┼────────────┤
509
- │handle.vpiType │  │ │vpiType │ │  │  │ │
510
- │ │ │ │ │ │ │ │These │
511
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤expressions │
512
- │handle.vpiType_i │  │ │vpiType │_│i │  │access the │
513
- │ │ │ │ │ │ │ │integer │
514
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤value of the│
515
- │handle.type │  │ │type │ │  │  │handle's │
516
- │ │ │ │ │ │ │ │vpiType │
517
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤property. │
518
- │handle.type_i │  │ │type │_│i │  │ │
519
- │ │ │ │ │ │ │ │ │
520
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┼────────────┤
521
- │handle.vpiProtected │  │ │vpiProtected│ │  │  │ │
522
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤These │
523
- │handle.vpiProtected_b│  │ │vpiProtected│_│b │  │expressions │
524
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤access the │
525
- │handle.vpiProtected? │  │ │vpiProtected│ │  │? │boolean │
526
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤value of the│
527
- │handle.protected │  │ │protected │ │  │  │handle's │
528
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤vpiProtected│
529
- │handle.protected_b │  │ │protected │_│b │  │property. │
530
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤ │
531
- │handle.protected? │  │ │protected │ │  │? │ │
532
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┼────────────┤
533
- │handle.vpiFullName │  │ │vpiFullName │ │  │  │ │
534
- │ │ │ │ │ │ │ │These │
535
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤expressions │
536
- │handle.vpiFullName_s │  │ │vpiFullName │_│s │  │access the │
537
- │ │ │ │ │ │ │ │string value│
538
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤of the │
539
- │handle.fullName │  │ │fullName │ │  │  │handle's │
540
- │ │ │ │ │ │ │ │vpiFullName │
541
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤property. │
542
- │handle.fullName_s │  │ │fullName │_│s │  │ │
543
- │ │ │ │ │ │ │ │ │
544
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┼────────────┤
545
- │handle.vpiParent │  │ │vpiParent │ │  │  │ │
546
- │ │ │ │ │ │ │ │These │
547
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤expressions │
548
- │handle.vpiParent_h │  │ │vpiParent │_│h │  │access the │
549
- │ │ │ │ │ │ │ │handle value│
550
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤of the │
551
- │handle.parent │  │ │parent │ │  │  │handle's │
552
- │ │ │ │ │ │ │ │vpiParent │
553
- ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤property. │
554
- │handle.parent_h │  │ │parent │_│h │  │ │
555
- │ │ │ │ │ │ │ │ │
556
- └─────────────────────┴─────────┴─┴────────────┴─┴────────┴────────┴────────────┘
557
-
558
- Running a test
559
-
560
- Unlike an engineer who can verify an electronic component in real-time, the
561
- Verilog simulator and the Ruby interpreter (see Figure 2.2, “Detailed
562
- organization of a test”) take turns working with objects in a simulation when a
563
- test is run. In particular, they take turns manipulating the design and
564
- transfer control to each other when appropriate.
565
-
566
- The situation is similar to a pair of friends playing catch. One friend throws
567
- a ball to the other, and the other throws it back. Either is able to inspect
568
- and modify the ball, but only when it is in hand.
569
-
570
- Initialization
571
-
572
- A test is first initialized before it is executed. Figure 2.3, “Initialization
573
- of a test” illustrates the initialization process described below.
574
-
575
- Figure 2.3. Initialization of a test
576
-
577
- Initialization of a test
578
-
579
- Procedure 2.1. Initialization of a test
580
-
581
- 1. The Verilog simulator initializes the Ruby interpreter by invoking the
582
- $ruby_init; system task/function, whose parameters represent the
583
- command-line invocation of the Ruby interpreter. For example, one would
584
- specify $ruby_init("ruby", "-w"); in Verilog to achieve the same effect as
585
- specifying ruby -w at a command-prompt.
586
-
587
- 2. The Verilog simulator is paused and the Ruby interpreter is initialized
588
- with the arguments of the $ruby_init; system task/function.
589
-
590
- 3. When the Ruby interpreter invokes the Vpi::relay_verilog method, it is
591
- paused and the Verilog simulator is given control.
592
-
593
- Execution
594
-
595
- After a test is initialized, it is executed such that the design is verified
596
- against the specification. Figure 2.4, “Execution of a test” illustrates the
597
- execution process described below.
598
-
599
- Figure 2.4. Execution of a test
600
-
601
- Execution of a test
602
-
603
- Procedure 2.2. Execution of a test
604
-
605
- 1. The Verilog simulator transfers control to the Ruby interpreter by invoking
606
- the $ruby_relay; system task/function.
607
-
608
- 2. The Verilog simulator is paused and the Ruby interpreter is given control.
609
-
610
- 3. When the Ruby interpreter invokes the Vpi::relay_verilog method, it is
611
- paused and the Verilog simulator is given control.
612
-
613
- Chapter 3. Setup
614
-
615
- Table of Contents
616
-
617
- Requirements
618
-
619
- Recommendations
620
-
621
- Installation
622
-
623
- Installing on Windows
624
-
625
- Maintenance
626
-
627
- Requirements
628
-
629
- The following software is necessary in order to use Ruby-VPI.
630
-
631
- Verilog simulator
632
-
633
- Ruby-VPI is known to work with the following simulators. Nevertheless, you
634
- should be able to use it with any Verilog simulator that supports VPI.
635
-
636
- Icarus Verilog
637
-
638
- Version 0.8 or newer is acceptable.
639
-
640
- GPL Cver
641
-
642
- Version 2.11a or newer is acceptable.
643
-
644
- Synopsys VCS
645
-
646
- Any version that supports the -load option is acceptable.
647
-
648
- Mentor Modelsim
649
-
650
- Any version that supports the -pli option is acceptable.
651
-
652
- make
653
-
654
- GNU make is preferred but any distribution of make should be acceptable.
655
-
656
- C compiler
657
-
658
- GNU Compiler Collection (GCC) is preferred but any C compiler should be
659
- acceptable.
660
-
661
- POSIX threads (pthreads)
662
-
663
- Header and linkable object files, and operating system support for this
664
- library are necessary.
665
-
666
- Ruby
667
-
668
- Version 1.8 or newer, including header and linkable object files for
669
- building extensions, is necessary. You can install Ruby by following these
670
- instructions.
671
-
672
- RubyGems
673
-
674
- Any recent version should be acceptable. You can install RubyGems by
675
- following these instructions.
676
-
677
- Recommendations
678
-
679
- The following software may make your interactions with Ruby-VPI more pleasant.
680
-
681
- Text merging tool
682
-
683
- An interactive text merging tool can greatly simplify the process of
684
- transferring wanted changes from one file to another. In particular, such
685
- tools are especially beneficial when using the automated test generator. A
686
- handful of the currently available open-source text merging tools are
687
- listed below.
688
-
689
- kdiff3
690
-
691
- A graphical, three-way merging tool for KDE.
692
-
693
- meld
694
-
695
- A graphical, three-way merging tool for GNOME.
696
-
697
- tkdiff
698
-
699
- A graphical, two-way merging tool that uses the cross-platform Tk
700
- windowing toolkit.
701
-
702
- xxdiff
703
-
704
- A graphical, three-way merging tool.
705
-
706
- imediff2
707
-
708
- A textual, fullscreen two-way merging tool. This tool is useful when
709
- you are working remotely via SSH.
710
-
711
- Installation
712
-
713
- Once you have satisfied the necessary requirements, you can install Ruby-VPI by
714
- running the command gem install ruby-vpi. RubyGems will install Ruby-VPI into
715
- the system gem directory, whose path can be determined by running the command
716
- gem env gemdir. Within this directory, there is a "gems" subdirectory which
717
- contains the Ruby-VPI installation, as illustrated below.
718
-
719
- $ gem env gemdir
720
- /usr/lib/ruby/gems/1.8
721
-
722
- $ ls -d /usr/lib/ruby/gems/1.8/gems/ruby-vpi-*
723
- /usr/lib/ruby/gems/1.8/gems/ruby-vpi-7.0.0/
724
-
725
- Installing on Windows
726
-
727
- 1. Install Cygwin, the Linux-like environment for Windows.
728
-
729
- 2. Search for object files whose names end with .so, .o, or .dll in your
730
- Verilog simulator's installation directory.
731
-
732
- 3. Determine which object files, among those found in the previous step,
733
- contain symbols whose names begin with _vpi^[1] by running the command for
734
- x in *.{o,so,dll}; do nm $x | grep -q '[Tt] _vpi' > /dev/null && echo $x;
735
- done in Cygwin.
736
-
737
- [Tip] Tip
738
- If you are using Mentor Modelsim, the desired object file can be
739
- found at a path similar to C:\Modeltech\win32\libvsim.dll.
740
-
741
- [Tip] Tip
742
- If you are using GPL Cver, the desired object file can be found at a
743
- path similar to C:\gplcver\objs\v_vpi.o.
744
-
745
- 4. Assign the path of the object file (determined in the previous step) to the
746
- LDFLAGS environment variable. For example, if the object file's path is /
747
- foo/bar/vpi.so, then you would run the command export LDFLAGS=/foo/bar/
748
- vpi.so in Cygwin.
749
-
750
- 5. You may now install Ruby-VPI by running the command gem install ruby-vpi in
751
- Cygwin.
752
-
753
- Maintenance
754
-
755
- You can uninstall Ruby-VPI by running the command gem uninstall ruby-vpi.
756
- Furthermore, you can upgrade to the latest release of Ruby-VPI by running the
757
- command gem update ruby-vpi. Finally, you can learn more about using and
758
- manipulating RubyGems in the RubyGems user manual.
759
-
760
-
761
- ━━━━━━━━━━━━━━
762
-
763
- ^[1] Because Ruby-VPI makes use of the VPI C-language interface, it links to
764
- symbols whose names begin with _vpi. It is possible for these symbols to be
765
- undefined when Ruby-VPI is compiled under GNU/Linux and similar operating
766
- systems. In contrast, one cannot compile a shared object file with references
767
- to undefined symbols under Windows. Thus, we must find a Verilog simulator's
768
- shared object file, which contains definitions of all VPI symbols, and give
769
- this file to the linker when compiling Ruby-VPI.
770
-
771
- Chapter 4. Usage
772
-
773
- Table of Contents
774
-
775
- Tools
776
-
777
- Automated test generation
778
- Verilog to Ruby conversion
779
-
780
- Tutorial
781
-
782
- Start with a design
783
- Generate a test
784
- Specify your expectations
785
- Implement the prototype
786
- Verify the prototype
787
- Implement the design
788
- Verify the design
789
-
790
- Examples
791
-
792
- Tools
793
-
794
- The bin directory contains various utilities which ease the process of writing
795
- tests. Each tool provides help and usage information invoked with the --help
796
- option.
797
-
798
- Automated test generation
799
-
800
- The automated test generator (generate_test.rb) generates tests from Verilog
801
- 2001 module declarations, as demonstrated in the section called “Generate a
802
- test”. A generated test is composed of the following parts:
803
-
804
- Runner
805
-
806
- Written in Rake, this file builds and runs the test.
807
-
808
- Bench
809
-
810
- Written in Verilog and Ruby, these files define the testing environment.
811
-
812
- Design
813
-
814
- Written in Ruby, this file provides an interface to the design being
815
- verified.
816
-
817
- Prototype
818
-
819
- Written in Ruby, this file defines a prototype of the design being
820
- verified.
821
-
822
- Specification
823
-
824
- Written in Ruby, this file verifies the design.
825
-
826
- The reason for dividing a single test into these parts is mainly to decouple
827
- the design from the specification. This allows you to focus on writing the
828
- specification while the remainder is automatically generated by the tool. For
829
- example, when the interface of a Verilog module changes, you would simply
830
- re-run this tool and incorporate those changes (using a text merging tool) into
831
- the test without diverting your focus from the specification.
832
-
833
- [Tip] Using kdiff3 with the automated test generator
834
- Create a file named merge2 with the content below, make it executable,
835
- and put it somewhere accessible by your PATH environment variable. Next,
836
- update the MERGER environment variable by executing export MERGER=merge2.
837
-
838
- #!/bin/sh
839
- # args: old file, new file
840
- kdiff3 --auto --merge --output "$2" "$@" 2>/dev/null
841
-
842
- From now on, kdiff3 will be invoked to help you transfer your changes
843
- between generated files. When you are finished transferring changes,
844
- simply issue the "save the file" command and terminate kdiff3. Or, if you
845
- do not want to transfer any changes, simply terminate kdiff3.
846
-
847
- Verilog to Ruby conversion
848
-
849
- The header_to_ruby.rb tool can be used to convert Verilog header files into
850
- Ruby. You can try it by running the command header_to_ruby.rb --help.
851
-
852
- Tutorial
853
-
854
- Procedure 4.1. Typical way of using Ruby-VPI
855
-
856
- 1. Declare the design, which is a Verilog module, using Verilog 2001 syntax.
857
-
858
- 2. Generate a test for the design using the automated test generator tool.
859
-
860
- 3. Identify your expectations for the design and implement them in the
861
- specification.
862
-
863
- 4. (Optional) Implement the prototype of the design in Ruby.
864
-
865
- 5. (Optional) Verify the prototype against the specification.
866
-
867
- 6. Implement the design in Verilog once the prototype has been verified.
868
-
869
- 7. Verify the design against the specification.
870
-
871
- Start with a design
872
-
873
- First, we need a Design to verify. In this tutorial, Figure 4.1, “Declaration
874
- of a simple up-counter with synchronous reset” will serve as our design. Its
875
- interface is composed of the following parts:
876
-
877
- Size
878
-
879
- This parameter defines the number of bits used to represent the counter's
880
- value.
881
-
882
- clock
883
-
884
- Each positive edge of this signal causes the count register to increment.
885
-
886
- reset
887
-
888
- Assertion of this signal causes the count register to become zero.
889
-
890
- count
891
-
892
- This register contains the counter's value.
893
-
894
- Figure 4.1. Declaration of a simple up-counter with synchronous reset
895
-
896
- module counter #(parameter Size = 5) (
897
- input clock,
898
- input reset,
899
- output reg [Size - 1 : 0] count
900
- );
901
- endmodule
902
-
903
- [Important] Before we continue…
904
- Save the source code shown in Figure 4.1, “Declaration of a simple
905
- up-counter with synchronous reset” into a file named counter.v.
906
-
907
- Generate a test
908
-
909
- Now that we have a Design to verify, let us generate a Test for it using the
910
- automated test generator. This tool allows us to implement our Specification in
911
- either rSpec, xUnit, or our very own format. Each format represents a different
912
- software development methodology: rSpec represents BDD, xUnit represents TDD,
913
- and our own format can represent another methodology. Both rSpec and xUnit are
914
- presented in this tutorial.
915
-
916
- Once we have decided how we want to implement our specification, we can proceed
917
- to generate a test for our design. Figure 4.2, “Generating a test with
918
- specification in rSpec format” and Figure 4.3, “Generating a test with
919
- specification in xUnit format” illustrate this process.
920
-
921
- Figure 4.2. Generating a test with specification in rSpec format
922
-
923
- $ generate_test.rb counter.v --rspec --name rspec
924
-
925
- name rspec
926
- format rSpec
927
-
928
- module counter
929
- create counter_rspec_runner.rake
930
- create counter_rspec_bench.v
931
- create counter_rspec_bench.rb
932
- create counter_rspec_design.rb
933
- create counter_rspec_proto.rb
934
- create counter_rspec_spec.rb
935
-
936
-
937
- Figure 4.3. Generating a test with specification in xUnit format
938
-
939
- $ generate_test.rb counter.v --xunit --name xunit
940
-
941
- name xunit
942
- format xUnit
943
-
944
- module counter
945
- create counter_xunit_runner.rake
946
- create counter_xunit_bench.v
947
- create counter_xunit_bench.rb
948
- create counter_xunit_design.rb
949
- create counter_xunit_proto.rb
950
- create counter_xunit_spec.rb
951
-
952
-
953
- Specify your expectations
954
-
955
- So far, the test generation tool has created a basic foundation for our Test.
956
- Now we must build upon this foundation by identifying our Expectations of the
957
- Design. That is, how do we expect the design to behave under certain
958
- conditions?
959
-
960
- The following is a reasonable set of expectations for our simple counter:
961
-
962
- ● A resetted counter's value should be zero.
963
-
964
- ● A resetted counter's value should increment by one count upon each rising
965
- clock edge.
966
-
967
- ● A counter with the maximum value should overflow upon increment.
968
-
969
- Now that we have identified a set of expectations for our design, we are ready
970
- to implement them in our specification. Figure 4.4, “Specification implemented
971
- in rSpec format” and Figure 4.5, “Specification implemented in xUnit format”
972
- illustrate this process. Note the striking similarities between our
973
- expectations and their implementation.
974
-
975
- Figure 4.4. Specification implemented in rSpec format
976
-
977
- # lowest upper bound of counter's value
978
- LIMIT = 2 ** Counter.Size.intVal
979
-
980
- # maximum allowed value for a counter
981
- MAX = LIMIT - 1
982
-
983
- context "A resetted counter's value" do
984
- setup do
985
- Counter.reset!
986
- end
987
-
988
- specify "should be zero" do
989
- Counter.count.intVal.should_equal 0
990
- end
991
-
992
- specify "should increment by one count upon each rising clock edge" do
993
- LIMIT.times do |i|
994
- Counter.count.intVal.should_equal i
995
- relay_verilog # advance the clock
996
- end
997
- end
998
- end
999
-
1000
- context "A counter with the maximum value" do
1001
- setup do
1002
- Counter.reset!
1003
-
1004
- # increment the counter to maximum value
1005
- MAX.times do relay_verilog end
1006
- Counter.count.intVal.should_equal MAX
1007
- end
1008
-
1009
- specify "should overflow upon increment" do
1010
- relay_verilog # increment the counter
1011
- Counter.count.intVal.should_equal 0
1012
- end
1013
- end
1014
-
1015
- Figure 4.5. Specification implemented in xUnit format
1016
-
1017
- # lowest upper bound of counter's value
1018
- LIMIT = 2 ** Counter.Size.intVal
1019
-
1020
- # maximum allowed value for a counter
1021
- MAX = LIMIT - 1
1022
-
1023
- class ResettedCounterValue < Test::Unit::TestCase
1024
- def setup
1025
- Counter.reset!
1026
- end
1027
-
1028
- def test_zero
1029
- assert_equal 0, Counter.count.intVal
1030
- end
1031
-
1032
- def test_increment
1033
- LIMIT.times do |i|
1034
- assert_equal i, Counter.count.intVal
1035
- relay_verilog # advance the clock
1036
- end
1037
- end
1038
- end
1039
-
1040
- class MaximumCounterValue < Test::Unit::TestCase
1041
- def setup
1042
- Counter.reset!
1043
-
1044
- # increment the counter to maximum value
1045
- MAX.times do relay_verilog end
1046
- assert_equal MAX, Counter.count.intVal
1047
- end
1048
-
1049
- def test_overflow
1050
- relay_verilog # increment the counter
1051
- assert_equal 0, Counter.count.intVal
1052
- end
1053
- end
1054
-
1055
- [Important] Before we continue…
1056
- ● Replace the contents of the file named counter_rspec_spec.rb
1057
- with the source code shown in Figure 4.4, “Specification
1058
- implemented in rSpec format”.
1059
-
1060
- ● Replace the contents of the file named counter_xunit_spec.rb
1061
- with the source code shown in Figure 4.5, “Specification
1062
- implemented in xUnit format”.
1063
-
1064
- ● Replace the contents of the files named counter_rspec_design.rb
1065
- and counter_xunit_design.rb with the following code. This code
1066
- defines the reset! method which resets our Verilog design.
1067
-
1068
- def Counter.reset!
1069
- reset.intVal = 1
1070
- relay_verilog # advance the clock
1071
- reset.intVal = 0
1072
- end
1073
-
1074
-
1075
- Implement the prototype
1076
-
1077
- Now that we have a Specification against which to verify our Design, let us
1078
- build a prototype of our design. By doing so, we exercise our specification,
1079
- experience potential problems that may arise when we later implement our design
1080
- in Verilog, and gain confidence in our work. Figure 4.6, “Ruby prototype of our
1081
- Verilog design” shows the completed prototype for our design.
1082
-
1083
- Figure 4.6. Ruby prototype of our Verilog design
1084
-
1085
- def Counter.simulate!
1086
- if reset.intVal == 1
1087
- count.intVal = 0
1088
- else
1089
- count.intVal += 1
1090
- end
1091
- end
1092
-
1093
- [Important] Before we continue…
1094
- Replace the contents of the files named counter_rspec_proto.rb and
1095
- counter_xunit_proto.rb with the source code shown in Figure 4.6,
1096
- “Ruby prototype of our Verilog design”.
1097
-
1098
- Verify the prototype
1099
-
1100
- Now that we have implemented our prototype, we are ready to verify it against
1101
- our Specification by running the Test. Figure 4.7, “Running a test with
1102
- specification in rSpec format” and Figure 4.8, “Running a test with
1103
- specification in xUnit format” illustrate this process.
1104
-
1105
- [Tip] Reuse your past efforts!
1106
- The same specification can be used to verify both prototype and design.
1107
-
1108
- Here, the PROTOTYPE environment variable is assigned a non-empty value while
1109
- running the test, so that, instead of our design, our prototype is verified
1110
- against our specification. You can also assign a value to PROTOTYPE before
1111
- running the test, by using your shell's export or setenv command. Finally, the
1112
- Icarus Verilog simulator, denoted by cver, is used to run the simulation.
1113
-
1114
- [Tip] What can the test runner do?
1115
- If you invoke the test runner (1) without any arguments or (2) with the
1116
- -T option, it will show you a list of tasks that it can perform for you.
1117
-
1118
- Figure 4.7. Running a test with specification in rSpec format
1119
-
1120
- $ rake -f counter_rspec_runner.rake cver PROTOTYPE=1
1121
- counter_rspec: verifying prototype instead of design
1122
-
1123
- A resetted counter's value
1124
- - should be zero
1125
- - should increment by one count upon each rising clock edge
1126
-
1127
- A counter with the maximum value
1128
- - should overflow upon increment
1129
-
1130
- Finished in 0.018199 seconds
1131
-
1132
- 3 specifications, 0 failures
1133
-
1134
- Figure 4.8. Running a test with specification in xUnit format
1135
-
1136
- $ rake -f counter_xunit_runner.rake cver PROTOTYPE=1
1137
- counter_xunit: verifying prototype instead of design
1138
-
1139
- Loaded suite counter_xunit_bench
1140
- Started
1141
- ...
1142
- Finished in 0.040668 seconds.
1143
-
1144
- 3 tests, 35 assertions, 0 failures, 0 errors
1145
-
1146
- Implement the design
1147
-
1148
- Now that we have implemented and verified our prototype, we are ready to
1149
- implement our Design. This is often quite simple because we translate existing
1150
- code from Ruby (our prototype) into Verilog (our design). Figure 4.9,
1151
- “Implementation of a simple up-counter with synchronous reset” illustrates the
1152
- result of this process. Once again, note the striking similarities between the
1153
- implementation of our prototype and design.
1154
-
1155
- Figure 4.9. Implementation of a simple up-counter with synchronous reset
1156
-
1157
- module counter #(parameter Size = 5) (
1158
- input clock,
1159
- input reset,
1160
- output reg [Size - 1 : 0] count
1161
- );
1162
- always @(posedge clock) begin
1163
- if (reset)
1164
- count <= 0;
1165
- else
1166
- count <= count + 1;
1167
- end
1168
- endmodule
1169
-
1170
- [Important] Before we continue…
1171
- Replace the contents of the file named counter.v with the source
1172
- code shown in Figure 4.9, “Implementation of a simple up-counter
1173
- with synchronous reset”.
1174
-
1175
- Verify the design
1176
-
1177
- Now that we have implemented our Design, we are ready to verify it against our
1178
- Specification by running the Test. Figure 4.10, “Running a test with
1179
- specification in rSpec format” and Figure 4.11, “Running a test with
1180
- specification in xUnit format” illustrate this process.
1181
-
1182
- Here, the PROTOTYPE environment variable is not specified while running the
1183
- test, so that our design, instead of our prototype, is verified against our
1184
- specification. You can also achieve this effect by assigning an empty value to
1185
- PROTOTYPE, or by using your shell's unset command. Finally, the GPL Cver
1186
- Verilog simulator, denoted by cver, is used to run the simulation.
1187
-
1188
- [Tip] Running multiple tests
1189
- Create a file named Rakefile containing the following line.
1190
-
1191
- require 'ruby-vpi/runner_proxy'
1192
-
1193
- Now you can invoke all test runners in the current directory simply by
1194
- executing rake cver (where cver denotes the GPL Cver simulator).
1195
-
1196
- Figure 4.10. Running a test with specification in rSpec format
1197
-
1198
- $ rake -f counter_rspec_runner.rake cver
1199
- A resetted counter's value
1200
- - should be zero
1201
- - should increment by one count upon each rising clock edge
1202
-
1203
- A counter with the maximum value
1204
- - should overflow upon increment
1205
-
1206
- Finished in 0.005628 seconds
1207
-
1208
- 3 specifications, 0 failures
1209
-
1210
- Figure 4.11. Running a test with specification in xUnit format
1211
-
1212
- $ rake -f counter_xunit_runner.rake cver
1213
- Loaded suite counter_xunit_bench
1214
- Started
1215
- ...
1216
- Finished in 0.006766 seconds.
1217
-
1218
- 3 tests, 35 assertions, 0 failures, 0 errors
1219
-
1220
- Examples
1221
-
1222
- The samp directory contains several example tests which illustrate how Ruby-VPI
1223
- can be used. Each example has an associated Rakefile which simplifies the
1224
- process of running it. Therefore, simply navigate into an example directory and
1225
- run the command rake to get started.
1226
-
1227
- Also, some example specifications make use of BDD through the rSpec library.
1228
- See the the section called “Methodology” for a discussion of rSpec.
1229
-
1230
- Chapter 5. Hacking
1231
-
1232
- Table of Contents
1233
-
1234
- Building release packages
1235
-
1236
- Building release packages
1237
-
1238
- In addition to the "normal requirements":./doc/usage.requirements.html, you
1239
- need the following software to build release packages:
1240
-
1241
- DocBook-XML
1242
-
1243
- xsltproc
1244
-
1245
- xmlto
1246
-
1247
- RedCloth
1248
-
1249
- SWIG
1250
-
1251
- Once you have satisfied these requirements, you can run rake release to build
1252
- the release packages. Also, see the output of rake -T for more build options.
1253
-
1254
- Chapter 6. Known problems
1255
-
1256
- Table of Contents
1257
-
1258
- Ruby
1259
-
1260
- SystemStackError
1261
- test/unit
1262
-
1263
- Icarus Verilog
1264
-
1265
- vpi_handle_by_name
1266
- Vpi::reset
1267
-
1268
- Mentor Modelsim
1269
-
1270
- ruby_run()
1271
-
1272
- This chapter presents known problems and possible solutions. In addition,
1273
- previously solved problems have been retained for historical reference.
1274
-
1275
- Ruby
1276
-
1277
- SystemStackError
1278
-
1279
- [Note] Problem solved
1280
- This problem was fixed in release 2.0.0 (2006-04-17). If it still
1281
- occurs, then please report it.
1282
-
1283
- If a “stack level too deep (SystemStackError)” error occurs during the
1284
- simulation, then increase the system-resource limit for stack-size by running
1285
- the command ulimit -s unlimited before starting the simulation.
1286
-
1287
- test/unit
1288
-
1289
- [Note] Problem solved
1290
- This problem was fixed in release 2.0.0 (2006-04-17). If it still
1291
- occurs, then please report it.
1292
-
1293
- If your specification employs Ruby's unit testing framework, then you will
1294
- encounter the error: “[BUG] cross-thread violation on rb_gc()”.
1295
-
1296
- Icarus Verilog
1297
-
1298
- vpi_handle_by_name
1299
-
1300
- Give full paths to Verilog objects
1301
-
1302
- In version 0.8 and snapshot 20061009 of Icarus Verilog, the vpi_handle_by_name
1303
- function requires an absolute path (including the name of the bench which
1304
- instantiates the design) to a Verilog object. In addition, vpi_handle_by_name
1305
- is unable to retrieve the handle for a module parameter.
1306
-
1307
- For example, consider Example 6.1, “Part of a bench which instantiates a
1308
- Verilog design”. Here, one needs to specify TestFoo.my_foo.clk instead of
1309
- my_foo.clk in order to access the clk input of the my_foo module instance.
1310
-
1311
- Example 6.1. Part of a bench which instantiates a Verilog design
1312
-
1313
- module TestFoo;
1314
- reg clk_reg;
1315
- Foo my_foo(.clk(clk_reg));
1316
- endmodule
1317
-
1318
- Registers must be connected
1319
-
1320
- In version 0.8 of Icarus Verilog, if you want to access a register in a design,
1321
- then it must be connected to something (either assigned to a wire or passed as
1322
- a parameter to a module instantiation). Otherwise, you will get a nil value as
1323
- the result of vpi_handle_by_name method.
1324
-
1325
- For example, suppose you wanted to access the clk_reg register, from the bench
1326
- shown in Example 6.2, “Bad design with unconnected registers”. If you execute
1327
- the statement clk_reg = vpi_handle_by_name("TestFoo.clk_reg", nil) in a
1328
- specification, then you will discover that the vpi_handle_by_name method
1329
- returns nil instead of a handle to the clk_reg register.
1330
-
1331
- The solution is to change the design such that it appears like the one shown in
1332
- Example 6.3, “Fixed design with wired registers” where the register is
1333
- connected to a wire, or Example 6.1, “Part of a bench which instantiates a
1334
- Verilog design” where the register is connected to a module instantiation.
1335
-
1336
- Example 6.2. Bad design with unconnected registers
1337
-
1338
- Here the clk_reg register is not connected to anything.
1339
-
1340
- module TestFoo;
1341
- reg clk_reg;
1342
- endmodule
1343
-
1344
- Example 6.3. Fixed design with wired registers
1345
-
1346
- Here the clk_reg register is connected to the clk_wire wire.
1347
-
1348
- module TestFoo;
1349
- reg clk_reg;
1350
- wire clk_wire;
1351
- assign clk_wire = clk_reg;
1352
- endmodule
1353
-
1354
- Vpi::reset
1355
-
1356
- [Caution] Deprecated method
1357
- The vpi_control method was removed in release 3.0.0 (2006-04-23) of
1358
- Ruby-VPI, and is deprecated. Please use Vpi::vpi_control(VpiReset)
1359
- instead.
1360
-
1361
- In version 0.8 of Icarus Verilog, the vpi_control(vpiReset) VPI function causes
1362
- an assertion to fail inside the simulator. As a result, the simulation
1363
- terminates and a core dump is produced.
1364
-
1365
- Mentor Modelsim
1366
-
1367
- ruby_run()
1368
-
1369
- [Note] Problem solved
1370
- This problem was fixed in release 2.0.0 (2006-04-17). If it still
1371
- occurs, then please report it.
1372
-
1373
- Version 6.1b of Mentor Modelsim doesn't play nicely with either an embedded
1374
- Ruby interpreter or POSIX threads in a PLI application. When Ruby-VPI invokes
1375
- the ruby_run function (which starts the Ruby interpreter), the simulator
1376
- terminates immediately with an exit status of 0.
1377
-
1378
- Glossary
1379
-
1380
- B
1381
-
1382
- Bench
1383
-
1384
- An environment in which a Design is verified against a Specification.
1385
- Often, it is used to emulate conditions in which the design will be
1386
- eventually deployed.
1387
-
1388
- BDD
1389
-
1390
- Behavior driven development.
1391
-
1392
- A software development methodology which emphasizes thinking in terms of
1393
- behavior when designing, implementing, and verifying software. See the
1394
- official wiki for more information.
1395
-
1396
- See Also TDD, rSpec.
1397
-
1398
- D
1399
-
1400
- Design
1401
-
1402
- An idea or entity that is verified against a Specification in order to
1403
- ensure correctness or soundness of its being. In other words, it is the
1404
- thing being checked: does it work or not?
1405
-
1406
- E
1407
-
1408
- Expectation
1409
-
1410
- The desired response to some stimulus.
1411
-
1412
- H
1413
-
1414
- Handle
1415
-
1416
- An object in a Verilog simulation. For example, a handle can represent a
1417
- wire, register, module, if-statement, expression, and so on.
1418
-
1419
- R
1420
-
1421
- Rake
1422
-   Rake is a build tool, written in Ruby, using Ruby as a  
1423
- build language. Rake is similar to make in scope and
1424
- purpose.
1425
-
1426
-   --Rake documentation
1427
-
1428
- See the Rake website for more information.
1429
-
1430
- rSpec
1431
-
1432
- Ruby framework for BDD. See the rSpec website and rSpec tutorial for more
1433
- information.
1434
-
1435
- See Also BDD.
1436
-
1437
- S
1438
-
1439
- Specification
1440
-
1441
- A set of Expectations which define the desired behavior of a Design when it
1442
- is subjected to certain conditions.
1443
-
1444
- T
1445
-
1446
- TDD
1447
-
1448
- Test Driven Development.
1449
-
1450
- See Also BDD.
1451
-
1452
- Test
1453
-
1454
- Something that checks if a Design satisfies a Specification.
1455
-
1456
- See Also Test bench.
1457
-
1458
- Test bench
1459
-
1460
- An allusion to a bench in an electronics laboratory, or so it seems.
1461
-
1462
- See Also Test.
1463
-
1464
- GNU Free Documentation License
1465
-
1466
- Version 1.2, November 2002
1467
-
1468
- Copyright © 2000,2001,2002 Free Software Foundation, Inc.
1469
-
1470
- Free Software Foundation, Inc.
1471
-  51 Franklin St, Fifth Floor,
1472
-  Boston,
1473
-  MA
1474
-  02110-1301
1475
-  USA
1476
-  
1477
-
1478
- Everyone is permitted to copy and distribute verbatim copies of this license
1479
- document, but changing it is not allowed.
1480
-
1481
- Version 1.2, November 2002
1482
-
1483
- Table of Contents
1484
-
1485
- PREAMBLE
1486
- APPLICABILITY AND DEFINITIONS
1487
- VERBATIM COPYING
1488
- COPYING IN QUANTITY
1489
- MODIFICATIONS
1490
- COMBINING DOCUMENTS
1491
- COLLECTIONS OF DOCUMENTS
1492
- AGGREGATION WITH INDEPENDENT WORKS
1493
- TRANSLATION
1494
- TERMINATION
1495
- FUTURE REVISIONS OF THIS LICENSE
1496
- ADDENDUM: How to use this License for your documents
1497
-
1498
- PREAMBLE
1499
-
1500
- The purpose of this License is to make a manual, textbook, or other functional
1501
- and useful document "free" in the sense of freedom: to assure everyone the
1502
- effective freedom to copy and redistribute it, with or without modifying it,
1503
- either commercially or noncommercially. Secondarily, this License preserves for
1504
- the author and publisher a way to get credit for their work, while not being
1505
- considered responsible for modifications made by others.
1506
-
1507
- This License is a kind of "copyleft", which means that derivative works of the
1508
- document must themselves be free in the same sense. It complements the GNU
1509
- General Public License, which is a copyleft license designed for free software.
1510
-
1511
- We have designed this License in order to use it for manuals for free software,
1512
- because free software needs free documentation: a free program should come with
1513
- manuals providing the same freedoms that the software does. But this License is
1514
- not limited to software manuals; it can be used for any textual work,
1515
- regardless of subject matter or whether it is published as a printed book. We
1516
- recommend this License principally for works whose purpose is instruction or
1517
- reference.
1518
-
1519
- APPLICABILITY AND DEFINITIONS
1520
-
1521
- This License applies to any manual or other work, in any medium, that contains
1522
- a notice placed by the copyright holder saying it can be distributed under the
1523
- terms of this License. Such a notice grants a world-wide, royalty-free license,
1524
- unlimited in duration, to use that work under the conditions stated herein. The
1525
- "Document", below, refers to any such manual or work. Any member of the public
1526
- is a licensee, and is addressed as "you". You accept the license if you copy,
1527
- modify or distribute the work in a way requiring permission under copyright
1528
- law.
1529
-
1530
- A "Modified Version" of the Document means any work containing the Document or
1531
- a portion of it, either copied verbatim, or with modifications and/or
1532
- translated into another language.
1533
-
1534
- A "Secondary Section" is a named appendix or a front-matter section of the
1535
- Document that deals exclusively with the relationship of the publishers or
1536
- authors of the Document to the Document's overall subject (or to related
1537
- matters) and contains nothing that could fall directly within that overall
1538
- subject. (Thus, if the Document is in part a textbook of mathematics, a
1539
- Secondary Section may not explain any mathematics.) The relationship could be a
1540
- matter of historical connection with the subject or with related matters, or of
1541
- legal, commercial, philosophical, ethical or political position regarding them.
1542
-
1543
- The "Invariant Sections" are certain Secondary Sections whose titles are
1544
- designated, as being those of Invariant Sections, in the notice that says that
1545
- the Document is released under this License. If a section does not fit the
1546
- above definition of Secondary then it is not allowed to be designated as
1547
- Invariant. The Document may contain zero Invariant Sections. If the Document
1548
- does not identify any Invariant Sections then there are none.
1549
-
1550
- The "Cover Texts" are certain short passages of text that are listed, as
1551
- Front-Cover Texts or Back-Cover Texts, in the notice that says that the
1552
- Document is released under this License. A Front-Cover Text may be at most 5
1553
- words, and a Back-Cover Text may be at most 25 words.
1554
-
1555
- A "Transparent" copy of the Document means a machine-readable copy, represented
1556
- in a format whose specification is available to the general public, that is
1557
- suitable for revising the document straightforwardly with generic text editors
1558
- or (for images composed of pixels) generic paint programs or (for drawings)
1559
- some widely available drawing editor, and that is suitable for input to text
1560
- formatters or for automatic translation to a variety of formats suitable for
1561
- input to text formatters. A copy made in an otherwise Transparent file format
1562
- whose markup, or absence of markup, has been arranged to thwart or discourage
1563
- subsequent modification by readers is not Transparent. An image format is not
1564
- Transparent if used for any substantial amount of text. A copy that is not
1565
- "Transparent" is called "Opaque".
1566
-
1567
- Examples of suitable formats for Transparent copies include plain ASCII without
1568
- markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly
1569
- available DTD, and standard-conforming simple HTML, PostScript or PDF designed
1570
- for human modification. Examples of transparent image formats include PNG, XCF
1571
- and JPG. Opaque formats include proprietary formats that can be read and edited
1572
- only by proprietary word processors, SGML or XML for which the DTD and/or
1573
- processing tools are not generally available, and the machine-generated HTML,
1574
- PostScript or PDF produced by some word processors for output purposes only.
1575
-
1576
- The "Title Page" means, for a printed book, the title page itself, plus such
1577
- following pages as are needed to hold, legibly, the material this License
1578
- requires to appear in the title page. For works in formats which do not have
1579
- any title page as such, "Title Page" means the text near the most prominent
1580
- appearance of the work's title, preceding the beginning of the body of the
1581
- text.
1582
-
1583
- A section "Entitled XYZ" means a named subunit of the Document whose title
1584
- either is precisely XYZ or contains XYZ in parentheses following text that
1585
- translates XYZ in another language. (Here XYZ stands for a specific section
1586
- name mentioned below, such as "Acknowledgements", "Dedications",
1587
- "Endorsements", or "History".) To "Preserve the Title" of such a section when
1588
- you modify the Document means that it remains a section "Entitled XYZ"
1589
- according to this definition.
1590
-
1591
- The Document may include Warranty Disclaimers next to the notice which states
1592
- that this License applies to the Document. These Warranty Disclaimers are
1593
- considered to be included by reference in this License, but only as regards
1594
- disclaiming warranties: any other implication that these Warranty Disclaimers
1595
- may have is void and has no effect on the meaning of this License.
1596
-
1597
- VERBATIM COPYING
1598
-
1599
- You may copy and distribute the Document in any medium, either commercially or
1600
- noncommercially, provided that this License, the copyright notices, and the
1601
- license notice saying this License applies to the Document are reproduced in
1602
- all copies, and that you add no other conditions whatsoever to those of this
1603
- License. You may not use technical measures to obstruct or control the reading
1604
- or further copying of the copies you make or distribute. However, you may
1605
- accept compensation in exchange for copies. If you distribute a large enough
1606
- number of copies you must also follow the conditions in section 3.
1607
-
1608
- You may also lend copies, under the same conditions stated above, and you may
1609
- publicly display copies.
1610
-
1611
- COPYING IN QUANTITY
1612
-
1613
- If you publish printed copies (or copies in media that commonly have printed
1614
- covers) of the Document, numbering more than 100, and the Document's license
1615
- notice requires Cover Texts, you must enclose the copies in covers that carry,
1616
- clearly and legibly, all these Cover Texts: Front-Cover Texts on the front
1617
- cover, and Back-Cover Texts on the back cover. Both covers must also clearly
1618
- and legibly identify you as the publisher of these copies. The front cover must
1619
- present the full title with all words of the title equally prominent and
1620
- visible. You may add other material on the covers in addition. Copying with
1621
- changes limited to the covers, as long as they preserve the title of the
1622
- Document and satisfy these conditions, can be treated as verbatim copying in
1623
- other respects.
1624
-
1625
- If the required texts for either cover are too voluminous to fit legibly, you
1626
- should put the first ones listed (as many as fit reasonably) on the actual
1627
- cover, and continue the rest onto adjacent pages.
1628
-
1629
- If you publish or distribute Opaque copies of the Document numbering more than
1630
- 100, you must either include a machine-readable Transparent copy along with
1631
- each Opaque copy, or state in or with each Opaque copy a computer-network
1632
- location from which the general network-using public has access to download
1633
- using public-standard network protocols a complete Transparent copy of the
1634
- Document, free of added material. If you use the latter option, you must take
1635
- reasonably prudent steps, when you begin distribution of Opaque copies in
1636
- quantity, to ensure that this Transparent copy will remain thus accessible at
1637
- the stated location until at least one year after the last time you distribute
1638
- an Opaque copy (directly or through your agents or retailers) of that edition
1639
- to the public.
1640
-
1641
- It is requested, but not required, that you contact the authors of the Document
1642
- well before redistributing any large number of copies, to give them a chance to
1643
- provide you with an updated version of the Document.
1644
-
1645
- MODIFICATIONS
1646
-
1647
- You may copy and distribute a Modified Version of the Document under the
1648
- conditions of sections 2 and 3 above, provided that you release the Modified
1649
- Version under precisely this License, with the Modified Version filling the
1650
- role of the Document, thus licensing distribution and modification of the
1651
- Modified Version to whoever possesses a copy of it. In addition, you must do
1652
- these things in the Modified Version:
1653
-
1654
- GNU FDL Modification Conditions
1655
-
1656
- A. Use in the Title Page (and on the covers, if any) a title distinct from
1657
- that of the Document, and from those of previous versions (which should, if
1658
- there were any, be listed in the History section of the Document). You may
1659
- use the same title as a previous version if the original publisher of that
1660
- version gives permission.
1661
- B. List on the Title Page, as authors, one or more persons or entities
1662
- responsible for authorship of the modifications in the Modified Version,
1663
- together with at least five of the principal authors of the Document (all
1664
- of its principal authors, if it has fewer than five), unless they release
1665
- you from this requirement.
1666
- C. State on the Title page the name of the publisher of the Modified Version,
1667
- as the publisher.
1668
- D. Preserve all the copyright notices of the Document.
1669
- E. Add an appropriate copyright notice for your modifications adjacent to the
1670
- other copyright notices.
1671
- F. Include, immediately after the copyright notices, a license notice giving
1672
- the public permission to use the Modified Version under the terms of this
1673
- License, in the form shown in the Addendum below.
1674
- G. Preserve in that license notice the full lists of Invariant Sections and
1675
- required Cover Texts given in the Document's license notice.
1676
- H. Include an unaltered copy of this License.
1677
- I. Preserve the section Entitled "History", Preserve its Title, and add to it
1678
- an item stating at least the title, year, new authors, and publisher of the
1679
- Modified Version as given on the Title Page. If there is no section
1680
- Entitled "History" in the Document, create one stating the title, year,
1681
- authors, and publisher of the Document as given on its Title Page, then add
1682
- an item describing the Modified Version as stated in the previous sentence.
1683
- J. Preserve the network location, if any, given in the Document for public
1684
- access to a Transparent copy of the Document, and likewise the network
1685
- locations given in the Document for previous versions it was based on.
1686
- These may be placed in the "History" section. You may omit a network
1687
- location for a work that was published at least four years before the
1688
- Document itself, or if the original publisher of the version it refers to
1689
- gives permission.
1690
- K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the
1691
- Title of the section, and preserve in the section all the substance and
1692
- tone of each of the contributor acknowledgements and/or dedications given
1693
- therein.
1694
- L. Preserve all the Invariant Sections of the Document, unaltered in their
1695
- text and in their titles. Section numbers or the equivalent are not
1696
- considered part of the section titles.
1697
- M. Delete any section Entitled "Endorsements". Such a section may not be
1698
- included in the Modified Version.
1699
- N. Do not retitle any existing section to be Entitled "Endorsements" or to
1700
- conflict in title with any Invariant Section.
1701
- O. Preserve any Warranty Disclaimers.
1702
-
1703
- If the Modified Version includes new front-matter sections or appendices that
1704
- qualify as Secondary Sections and contain no material copied from the Document,
1705
- you may at your option designate some or all of these sections as invariant. To
1706
- do this, add their titles to the list of Invariant Sections in the Modified
1707
- Version's license notice. These titles must be distinct from any other section
1708
- titles.
1709
-
1710
- You may add a section Entitled "Endorsements", provided it contains nothing but
1711
- endorsements of your Modified Version by various parties--for example,
1712
- statements of peer review or that the text has been approved by an organization
1713
- as the authoritative definition of a standard.
1714
-
1715
- You may add a passage of up to five words as a Front-Cover Text, and a passage
1716
- of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts
1717
- in the Modified Version. Only one passage of Front-Cover Text and one of
1718
- Back-Cover Text may be added by (or through arrangements made by) any one
1719
- entity. If the Document already includes a cover text for the same cover,
1720
- previously added by you or by arrangement made by the same entity you are
1721
- acting on behalf of, you may not add another; but you may replace the old one,
1722
- on explicit permission from the previous publisher that added the old one.
1723
-
1724
- The author(s) and publisher(s) of the Document do not by this License give
1725
- permission to use their names for publicity for or to assert or imply
1726
- endorsement of any Modified Version.
1727
-
1728
- COMBINING DOCUMENTS
1729
-
1730
- You may combine the Document with other documents released under this License,
1731
- under the terms defined in section 4 above for modified versions, provided that
1732
- you include in the combination all of the Invariant Sections of all of the
1733
- original documents, unmodified, and list them all as Invariant Sections of your
1734
- combined work in its license notice, and that you preserve all their Warranty
1735
- Disclaimers.
1736
-
1737
- The combined work need only contain one copy of this License, and multiple
1738
- identical Invariant Sections may be replaced with a single copy. If there are
1739
- multiple Invariant Sections with the same name but different contents, make the
1740
- title of each such section unique by adding at the end of it, in parentheses,
1741
- the name of the original author or publisher of that section if known, or else
1742
- a unique number. Make the same adjustment to the section titles in the list of
1743
- Invariant Sections in the license notice of the combined work.
1744
-
1745
- In the combination, you must combine any sections Entitled "History" in the
1746
- various original documents, forming one section Entitled "History"; likewise
1747
- combine any sections Entitled "Acknowledgements", and any sections Entitled
1748
- "Dedications". You must delete all sections Entitled "Endorsements".
1749
-
1750
- COLLECTIONS OF DOCUMENTS
1751
-
1752
- You may make a collection consisting of the Document and other documents
1753
- released under this License, and replace the individual copies of this License
1754
- in the various documents with a single copy that is included in the collection,
1755
- provided that you follow the rules of this License for verbatim copying of each
1756
- of the documents in all other respects.
1757
-
1758
- You may extract a single document from such a collection, and distribute it
1759
- individually under this License, provided you insert a copy of this License
1760
- into the extracted document, and follow this License in all other respects
1761
- regarding verbatim copying of that document.
1762
-
1763
- AGGREGATION WITH INDEPENDENT WORKS
1764
-
1765
- A compilation of the Document or its derivatives with other separate and
1766
- independent documents or works, in or on a volume of a storage or distribution
1767
- medium, is called an "aggregate" if the copyright resulting from the
1768
- compilation is not used to limit the legal rights of the compilation's users
1769
- beyond what the individual works permit. When the Document is included in an
1770
- aggregate, this License does not apply to the other works in the aggregate
1771
- which are not themselves derivative works of the Document.
1772
-
1773
- If the Cover Text requirement of section 3 is applicable to these copies of the
1774
- Document, then if the Document is less than one half of the entire aggregate,
1775
- the Document's Cover Texts may be placed on covers that bracket the Document
1776
- within the aggregate, or the electronic equivalent of covers if the Document is
1777
- in electronic form. Otherwise they must appear on printed covers that bracket
1778
- the whole aggregate.
1779
-
1780
- TRANSLATION
1781
-
1782
- Translation is considered a kind of modification, so you may distribute
1783
- translations of the Document under the terms of section 4. Replacing Invariant
1784
- Sections with translations requires special permission from their copyright
1785
- holders, but you may include translations of some or all Invariant Sections in
1786
- addition to the original versions of these Invariant Sections. You may include
1787
- a translation of this License, and all the license notices in the Document, and
1788
- any Warranty Disclaimers, provided that you also include the original English
1789
- version of this License and the original versions of those notices and
1790
- disclaimers. In case of a disagreement between the translation and the original
1791
- version of this License or a notice or disclaimer, the original version will
1792
- prevail.
1793
-
1794
- If a section in the Document is Entitled "Acknowledgements", "Dedications", or
1795
- "History", the requirement (section 4) to Preserve its Title (section 1) will
1796
- typically require changing the actual title.
1797
-
1798
- TERMINATION
1799
-
1800
- You may not copy, modify, sublicense, or distribute the Document except as
1801
- expressly provided for under this License. Any other attempt to copy, modify,
1802
- sublicense or distribute the Document is void, and will automatically terminate
1803
- your rights under this License. However, parties who have received copies, or
1804
- rights, from you under this License will not have their licenses terminated so
1805
- long as such parties remain in full compliance.
1806
-
1807
- FUTURE REVISIONS OF THIS LICENSE
1808
-
1809
- The Free Software Foundation may publish new, revised versions of the GNU Free
1810
- Documentation License from time to time. Such new versions will be similar in
1811
- spirit to the present version, but may differ in detail to address new problems
1812
- or concerns. See http://www.gnu.org/copyleft/.
1813
-
1814
- Each version of the License is given a distinguishing version number. If the
1815
- Document specifies that a particular numbered version of this License "or any
1816
- later version" applies to it, you have the option of following the terms and
1817
- conditions either of that specified version or of any later version that has
1818
- been published (not as a draft) by the Free Software Foundation. If the
1819
- Document does not specify a version number of this License, you may choose any
1820
- version ever published (not as a draft) by the Free Software Foundation.
1821
-
1822
- ADDENDUM: How to use this License for your documents
1823
-
1824
- To use this License in a document you have written, include a copy of the
1825
- License in the document and put the following copyright and license notices
1826
- just after the title page:
1827
-
1828
- Sample Invariant Sections list
1829
-
1830
- Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and
1831
- /or modify this document under the terms of the GNU Free Documentation
1832
- License, Version 1.2 or any later version published by the Free Software
1833
- Foundation; with no Invariant Sections, no Front-Cover Texts, and no
1834
- Back-Cover Texts. A copy of the license is included in the section entitled
1835
- "GNU Free Documentation License".
1836
-
1837
- If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace
1838
- the "with...Texts." line with this:
1839
-
1840
- Sample Invariant Sections list
1841
-
1842
- with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover
1843
- Texts being LIST, and with the Back-Cover Texts being LIST.
1844
-
1845
- If you have Invariant Sections without Cover Texts, or some other combination
1846
- of the three, merge those two alternatives to suit the situation.
1847
-
1848
- If your document contains nontrivial examples of program code, we recommend
1849
- releasing these examples in parallel under your choice of free software
1850
- license, such as the GNU General Public License, to permit their use in free
1851
- software.
1852
-