ruby-vpi 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (364) hide show
  1. data/HISTORY +398 -0
  2. data/LICENSE +340 -0
  3. data/MEMO +38 -0
  4. data/README +9 -0
  5. data/Rakefile +271 -0
  6. data/bin/generate_test.rb +258 -0
  7. data/bin/generate_test_tpl/bench.rb +31 -0
  8. data/bin/generate_test_tpl/bench.v +54 -0
  9. data/bin/generate_test_tpl/design.rb +26 -0
  10. data/bin/generate_test_tpl/proto.rb +8 -0
  11. data/bin/generate_test_tpl/runner.rake +28 -0
  12. data/bin/generate_test_tpl/spec.rb +46 -0
  13. data/bin/header_to_ruby.rb +70 -0
  14. data/doc/Rakefile +55 -0
  15. data/doc/src/LICENSE +397 -0
  16. data/doc/src/figures/organization.png +0 -0
  17. data/doc/src/figures/organization_detailed.png +0 -0
  18. data/doc/src/figures/ruby_init.png +0 -0
  19. data/doc/src/figures/ruby_relay.png +0 -0
  20. data/doc/src/figures.dia +0 -0
  21. data/doc/src/images/COPYING +67 -0
  22. data/doc/src/images/ChangeLog +27 -0
  23. data/doc/src/images/blank.png +0 -0
  24. data/doc/src/images/callouts/1.png +0 -0
  25. data/doc/src/images/callouts/10.png +0 -0
  26. data/doc/src/images/callouts/11.png +0 -0
  27. data/doc/src/images/callouts/12.png +0 -0
  28. data/doc/src/images/callouts/13.png +0 -0
  29. data/doc/src/images/callouts/14.png +0 -0
  30. data/doc/src/images/callouts/15.png +0 -0
  31. data/doc/src/images/callouts/2.png +0 -0
  32. data/doc/src/images/callouts/3.png +0 -0
  33. data/doc/src/images/callouts/4.png +0 -0
  34. data/doc/src/images/callouts/5.png +0 -0
  35. data/doc/src/images/callouts/6.png +0 -0
  36. data/doc/src/images/callouts/7.png +0 -0
  37. data/doc/src/images/callouts/8.png +0 -0
  38. data/doc/src/images/callouts/9.png +0 -0
  39. data/doc/src/images/callouts/ChangeLog +15 -0
  40. data/doc/src/images/caution.png +0 -0
  41. data/doc/src/images/caution.svg +290 -0
  42. data/doc/src/images/copyright +55 -0
  43. data/doc/src/images/draft.png +0 -0
  44. data/doc/src/images/home.png +0 -0
  45. data/doc/src/images/home.svg +386 -0
  46. data/doc/src/images/important.png +0 -0
  47. data/doc/src/images/important.svg +163 -0
  48. data/doc/src/images/next.png +0 -0
  49. data/doc/src/images/next.svg +191 -0
  50. data/doc/src/images/note.png +0 -0
  51. data/doc/src/images/note.svg +483 -0
  52. data/doc/src/images/prev.png +0 -0
  53. data/doc/src/images/prev.svg +852 -0
  54. data/doc/src/images/tip.png +0 -0
  55. data/doc/src/images/tip.svg +1145 -0
  56. data/doc/src/images/toc-blank.png +0 -0
  57. data/doc/src/images/toc-minus.png +0 -0
  58. data/doc/src/images/toc-plus.png +0 -0
  59. data/doc/src/images/up.png +0 -0
  60. data/doc/src/images/up.svg +195 -0
  61. data/doc/src/images/warning.png +0 -0
  62. data/doc/src/images/warning.svg +334 -0
  63. data/doc/src/license.xml +446 -0
  64. data/doc/src/manual.xml +1582 -0
  65. data/doc/src/manual.xsl +23 -0
  66. data/doc/src/shared.dtd +63 -0
  67. data/doc/src/styles/manual.css +87 -0
  68. data/doc/txt/manual.txt +1657 -0
  69. data/doc/xhtml/background.html +3 -0
  70. data/doc/xhtml/background.methodology.html +3 -0
  71. data/doc/xhtml/background.organization.html +10 -0
  72. data/doc/xhtml/background.running-tests.html +3 -0
  73. data/doc/xhtml/background.terminology.html +3 -0
  74. data/doc/xhtml/figures/organization.png +0 -0
  75. data/doc/xhtml/figures/organization_detailed.png +0 -0
  76. data/doc/xhtml/figures/ruby_init.png +0 -0
  77. data/doc/xhtml/figures/ruby_relay.png +0 -0
  78. data/doc/xhtml/gfdl-0.html +18 -0
  79. data/doc/xhtml/gfdl-1.html +70 -0
  80. data/doc/xhtml/gfdl-10.html +15 -0
  81. data/doc/xhtml/gfdl-2.html +13 -0
  82. data/doc/xhtml/gfdl-3.html +31 -0
  83. data/doc/xhtml/gfdl-4.html +75 -0
  84. data/doc/xhtml/gfdl-5.html +20 -0
  85. data/doc/xhtml/gfdl-6.html +12 -0
  86. data/doc/xhtml/gfdl-7.html +16 -0
  87. data/doc/xhtml/gfdl-8.html +17 -0
  88. data/doc/xhtml/gfdl-9.html +9 -0
  89. data/doc/xhtml/gfdl-addendum.html +25 -0
  90. data/doc/xhtml/gfdl.html +11 -0
  91. data/doc/xhtml/glossary.html +3 -0
  92. data/doc/xhtml/images/COPYING +67 -0
  93. data/doc/xhtml/images/ChangeLog +27 -0
  94. data/doc/xhtml/images/blank.png +0 -0
  95. data/doc/xhtml/images/callouts/1.png +0 -0
  96. data/doc/xhtml/images/callouts/10.png +0 -0
  97. data/doc/xhtml/images/callouts/11.png +0 -0
  98. data/doc/xhtml/images/callouts/12.png +0 -0
  99. data/doc/xhtml/images/callouts/13.png +0 -0
  100. data/doc/xhtml/images/callouts/14.png +0 -0
  101. data/doc/xhtml/images/callouts/15.png +0 -0
  102. data/doc/xhtml/images/callouts/2.png +0 -0
  103. data/doc/xhtml/images/callouts/3.png +0 -0
  104. data/doc/xhtml/images/callouts/4.png +0 -0
  105. data/doc/xhtml/images/callouts/5.png +0 -0
  106. data/doc/xhtml/images/callouts/6.png +0 -0
  107. data/doc/xhtml/images/callouts/7.png +0 -0
  108. data/doc/xhtml/images/callouts/8.png +0 -0
  109. data/doc/xhtml/images/callouts/9.png +0 -0
  110. data/doc/xhtml/images/callouts/ChangeLog +15 -0
  111. data/doc/xhtml/images/caution.png +0 -0
  112. data/doc/xhtml/images/caution.svg +290 -0
  113. data/doc/xhtml/images/copyright +55 -0
  114. data/doc/xhtml/images/draft.png +0 -0
  115. data/doc/xhtml/images/home.png +0 -0
  116. data/doc/xhtml/images/home.svg +386 -0
  117. data/doc/xhtml/images/important.png +0 -0
  118. data/doc/xhtml/images/important.svg +163 -0
  119. data/doc/xhtml/images/next.png +0 -0
  120. data/doc/xhtml/images/next.svg +191 -0
  121. data/doc/xhtml/images/note.png +0 -0
  122. data/doc/xhtml/images/note.svg +483 -0
  123. data/doc/xhtml/images/prev.png +0 -0
  124. data/doc/xhtml/images/prev.svg +852 -0
  125. data/doc/xhtml/images/tip.png +0 -0
  126. data/doc/xhtml/images/tip.svg +1145 -0
  127. data/doc/xhtml/images/toc-blank.png +0 -0
  128. data/doc/xhtml/images/toc-minus.png +0 -0
  129. data/doc/xhtml/images/toc-plus.png +0 -0
  130. data/doc/xhtml/images/up.png +0 -0
  131. data/doc/xhtml/images/up.svg +195 -0
  132. data/doc/xhtml/images/warning.png +0 -0
  133. data/doc/xhtml/images/warning.svg +334 -0
  134. data/doc/xhtml/index.html +4 -0
  135. data/doc/xhtml/introduction.html +3 -0
  136. data/doc/xhtml/introduction.license.html +3 -0
  137. data/doc/xhtml/introduction.manifest.html +3 -0
  138. data/doc/xhtml/introduction.related-works.html +3 -0
  139. data/doc/xhtml/introduction.resources.html +3 -0
  140. data/doc/xhtml/problem.ivl.html +18 -0
  141. data/doc/xhtml/problems.html +3 -0
  142. data/doc/xhtml/problems.ruby.html +3 -0
  143. data/doc/xhtml/problems.vsim.html +3 -0
  144. data/doc/xhtml/styles/manual.css +87 -0
  145. data/doc/xhtml/usage.examples.html +3 -0
  146. data/doc/xhtml/usage.html +3 -0
  147. data/doc/xhtml/usage.installation.html +3 -0
  148. data/doc/xhtml/usage.requirements.html +3 -0
  149. data/doc/xhtml/usage.tools.html +3 -0
  150. data/doc/xhtml/usage.tutorial.html +199 -0
  151. data/ext/Doxyfile +272 -0
  152. data/ext/README +124 -0
  153. data/ext/Rakefile +65 -0
  154. data/ext/common.h +56 -0
  155. data/ext/extconf.rb +4 -0
  156. data/ext/relay.cin +146 -0
  157. data/ext/relay.hin +48 -0
  158. data/ext/ruby-vpi.c +36 -0
  159. data/ext/swig.cin +38 -0
  160. data/ext/swig.hin +39 -0
  161. data/ext/swig_vpi.h +924 -0
  162. data/ext/swig_vpi.i +8 -0
  163. data/ext/swig_wrap.cin +4613 -0
  164. data/ext/verilog.h +59 -0
  165. data/ext/vlog.cin +92 -0
  166. data/ext/vlog.hin +57 -0
  167. data/ext/vpi_user.h +924 -0
  168. data/gem_extconf.rb +8 -0
  169. data/history.html +809 -0
  170. data/lib/ruby-vpi/erb.rb +41 -0
  171. data/lib/ruby-vpi/rake.rb +35 -0
  172. data/lib/ruby-vpi/rdoc.rb +51 -0
  173. data/lib/ruby-vpi/rspec.rb +32 -0
  174. data/lib/ruby-vpi/runner.rb +22 -0
  175. data/lib/ruby-vpi/vpi_util.rb +310 -0
  176. data/lib/ruby-vpi.rb +58 -0
  177. data/memo.html +86 -0
  178. data/readme.html +19 -0
  179. data/ref/c/annotated.html +36 -0
  180. data/ref/c/common_8h.html +178 -0
  181. data/ref/c/doxygen.css +310 -0
  182. data/ref/c/doxygen.png +0 -0
  183. data/ref/c/files.html +35 -0
  184. data/ref/c/functions.html +135 -0
  185. data/ref/c/functions_vars.html +135 -0
  186. data/ref/c/globals.html +55 -0
  187. data/ref/c/globals_0x63.html +86 -0
  188. data/ref/c/globals_0x65.html +55 -0
  189. data/ref/c/globals_0x66.html +55 -0
  190. data/ref/c/globals_0x70.html +71 -0
  191. data/ref/c/globals_0x72.html +62 -0
  192. data/ref/c/globals_0x73.html +65 -0
  193. data/ref/c/globals_0x74.html +55 -0
  194. data/ref/c/globals_0x76.html +472 -0
  195. data/ref/c/globals_0x78.html +55 -0
  196. data/ref/c/globals_defs.html +81 -0
  197. data/ref/c/globals_defs_0x65.html +50 -0
  198. data/ref/c/globals_defs_0x70.html +51 -0
  199. data/ref/c/globals_defs_0x76.html +463 -0
  200. data/ref/c/globals_defs_0x78.html +50 -0
  201. data/ref/c/globals_enum.html +39 -0
  202. data/ref/c/globals_eval.html +40 -0
  203. data/ref/c/globals_func.html +49 -0
  204. data/ref/c/globals_type.html +63 -0
  205. data/ref/c/globals_vars.html +42 -0
  206. data/ref/c/hierarchy.html +36 -0
  207. data/ref/c/index.html +20 -0
  208. data/ref/c/relay_8cin.html +268 -0
  209. data/ref/c/relay_8hin.html +161 -0
  210. data/ref/c/ruby-vpi_8c.html +34 -0
  211. data/ref/c/structrelay____RubyOptions____def.html +84 -0
  212. data/ref/c/structt__cb__data.html +208 -0
  213. data/ref/c/structt__vpi__delay.html +183 -0
  214. data/ref/c/structt__vpi__error__info.html +208 -0
  215. data/ref/c/structt__vpi__strengthval.html +108 -0
  216. data/ref/c/structt__vpi__systf__data.html +208 -0
  217. data/ref/c/structt__vpi__time.html +133 -0
  218. data/ref/c/structt__vpi__value.html +285 -0
  219. data/ref/c/structt__vpi__vecval.html +83 -0
  220. data/ref/c/structt__vpi__vlog__info.html +133 -0
  221. data/ref/c/swig_8cin.html +91 -0
  222. data/ref/c/swig_8hin.html +99 -0
  223. data/ref/c/tab_b.gif +0 -0
  224. data/ref/c/tab_l.gif +0 -0
  225. data/ref/c/tab_r.gif +0 -0
  226. data/ref/c/tabs.css +102 -0
  227. data/ref/c/verilog_8h.html +149 -0
  228. data/ref/c/vlog_8cin.html +199 -0
  229. data/ref/c/vlog_8hin.html +152 -0
  230. data/ref/c/vpi__user_8h.html +12747 -0
  231. data/ref/ruby/classes/Counter.html +258 -0
  232. data/ref/ruby/classes/Counter.src/M000037.html +20 -0
  233. data/ref/ruby/classes/Counter.src/M000038.html +22 -0
  234. data/ref/ruby/classes/Counter.src/M000039.html +20 -0
  235. data/ref/ruby/classes/Counter.src/M000040.html +22 -0
  236. data/ref/ruby/classes/CounterProto.html +164 -0
  237. data/ref/ruby/classes/CounterProto.src/M000004.html +22 -0
  238. data/ref/ruby/classes/CounterProto.src/M000005.html +22 -0
  239. data/ref/ruby/classes/ERB.html +158 -0
  240. data/ref/ruby/classes/ERB.src/M000034.html +29 -0
  241. data/ref/ruby/classes/FileUtils.html +165 -0
  242. data/ref/ruby/classes/FileUtils.src/M000047.html +18 -0
  243. data/ref/ruby/classes/FileUtils.src/M000048.html +18 -0
  244. data/ref/ruby/classes/Hw5UnitModel/Operation.html +216 -0
  245. data/ref/ruby/classes/Hw5UnitModel/Operation.src/M000011.html +25 -0
  246. data/ref/ruby/classes/Hw5UnitModel/Operation.src/M000012.html +33 -0
  247. data/ref/ruby/classes/Hw5UnitModel/Operation.src/M000013.html +18 -0
  248. data/ref/ruby/classes/Hw5UnitModel.html +256 -0
  249. data/ref/ruby/classes/Hw5UnitModel.src/M000006.html +24 -0
  250. data/ref/ruby/classes/Hw5UnitModel.src/M000008.html +20 -0
  251. data/ref/ruby/classes/Hw5UnitModel.src/M000009.html +38 -0
  252. data/ref/ruby/classes/Hw5UnitModel.src/M000010.html +22 -0
  253. data/ref/ruby/classes/Hw5_unit.html +196 -0
  254. data/ref/ruby/classes/Hw5_unit.src/M000003.html +27 -0
  255. data/ref/ruby/classes/Hw5_unit_spec.html +237 -0
  256. data/ref/ruby/classes/Hw5_unit_spec.src/M000023.html +21 -0
  257. data/ref/ruby/classes/Hw5_unit_spec.src/M000024.html +21 -0
  258. data/ref/ruby/classes/Hw5_unit_spec.src/M000025.html +67 -0
  259. data/ref/ruby/classes/InputGenerator.html +260 -0
  260. data/ref/ruby/classes/InputGenerator.src/M000027.html +18 -0
  261. data/ref/ruby/classes/InputGenerator.src/M000028.html +18 -0
  262. data/ref/ruby/classes/InputGenerator.src/M000029.html +19 -0
  263. data/ref/ruby/classes/InputGenerator.src/M000030.html +38 -0
  264. data/ref/ruby/classes/InputGenerator.src/M000031.html +19 -0
  265. data/ref/ruby/classes/InputGenerator.src/M000032.html +19 -0
  266. data/ref/ruby/classes/MaximumCounterValue.html +159 -0
  267. data/ref/ruby/classes/MaximumCounterValue.src/M000035.html +23 -0
  268. data/ref/ruby/classes/MaximumCounterValue.src/M000036.html +21 -0
  269. data/ref/ruby/classes/ModuleInfo.html +199 -0
  270. data/ref/ruby/classes/ModuleInfo.src/M000018.html +44 -0
  271. data/ref/ruby/classes/ModuleInfo.src/M000019.html +26 -0
  272. data/ref/ruby/classes/OutputInfo.html +304 -0
  273. data/ref/ruby/classes/OutputInfo.src/M000017.html +51 -0
  274. data/ref/ruby/classes/RDoc.html +135 -0
  275. data/ref/ruby/classes/RDoc.src/M000051.html +40 -0
  276. data/ref/ruby/classes/ResettedCounterValue.html +174 -0
  277. data/ref/ruby/classes/ResettedCounterValue.src/M000014.html +19 -0
  278. data/ref/ruby/classes/ResettedCounterValue.src/M000015.html +18 -0
  279. data/ref/ruby/classes/ResettedCounterValue.src/M000016.html +23 -0
  280. data/ref/ruby/classes/RubyVPI.html +186 -0
  281. data/ref/ruby/classes/RubyVPI.src/M000049.html +18 -0
  282. data/ref/ruby/classes/RubyVPI.src/M000050.html +39 -0
  283. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.html +370 -0
  284. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000041.html +22 -0
  285. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000042.html +44 -0
  286. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000043.html +82 -0
  287. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000044.html +127 -0
  288. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000045.html +26 -0
  289. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000046.html +18 -0
  290. data/ref/ruby/classes/SWIG.html +111 -0
  291. data/ref/ruby/classes/String.html +140 -0
  292. data/ref/ruby/classes/String.src/M000033.html +37 -0
  293. data/ref/ruby/classes/Template.html +158 -0
  294. data/ref/ruby/classes/Template.src/M000026.html +18 -0
  295. data/ref/ruby/classes/TestHw5UnitModel.html +180 -0
  296. data/ref/ruby/classes/TestHw5UnitModel.src/M000020.html +19 -0
  297. data/ref/ruby/classes/TestHw5UnitModel.src/M000021.html +19 -0
  298. data/ref/ruby/classes/TestHw5UnitModel.src/M000022.html +64 -0
  299. data/ref/ruby/created.rid +1 -0
  300. data/ref/ruby/files/bin/generate_test_rb.html +236 -0
  301. data/ref/ruby/files/bin/generate_test_rb.src/M000001.html +29 -0
  302. data/ref/ruby/files/bin/generate_test_tpl/bench_rb.html +115 -0
  303. data/ref/ruby/files/bin/generate_test_tpl/design_rb.html +107 -0
  304. data/ref/ruby/files/bin/generate_test_tpl/proto_rb.html +107 -0
  305. data/ref/ruby/files/bin/generate_test_tpl/spec_rb.html +140 -0
  306. data/ref/ruby/files/bin/generate_test_tpl/spec_rb.src/M000002.html +22 -0
  307. data/ref/ruby/files/bin/header_to_ruby_rb.html +116 -0
  308. data/ref/ruby/files/ext/extconf_rb.html +108 -0
  309. data/ref/ruby/files/gem_extconf_rb.html +114 -0
  310. data/ref/ruby/files/lib/ruby-vpi/erb_rb.html +108 -0
  311. data/ref/ruby/files/lib/ruby-vpi/rake_rb.html +108 -0
  312. data/ref/ruby/files/lib/ruby-vpi/rdoc_rb.html +108 -0
  313. data/ref/ruby/files/lib/ruby-vpi/rspec_rb.html +115 -0
  314. data/ref/ruby/files/lib/ruby-vpi/runner_rb.html +108 -0
  315. data/ref/ruby/files/lib/ruby-vpi/vpi_util_rb.html +108 -0
  316. data/ref/ruby/files/lib/ruby-vpi_rb.html +108 -0
  317. data/ref/ruby/files/samp/counter/counter_rspecTest_bench_rb.html +115 -0
  318. data/ref/ruby/files/samp/counter/counter_rspecTest_design_rb.html +107 -0
  319. data/ref/ruby/files/samp/counter/counter_rspecTest_proto_rb.html +107 -0
  320. data/ref/ruby/files/samp/counter/counter_rspecTest_spec_rb.html +142 -0
  321. data/ref/ruby/files/samp/counter/counter_unitTest_bench_rb.html +115 -0
  322. data/ref/ruby/files/samp/counter/counter_unitTest_design_rb.html +107 -0
  323. data/ref/ruby/files/samp/counter/counter_unitTest_proto_rb.html +107 -0
  324. data/ref/ruby/files/samp/counter/counter_unitTest_spec_rb.html +135 -0
  325. data/ref/ruby/files/samp/pipelined_alu/Hw5UnitModel_rb.html +101 -0
  326. data/ref/ruby/files/samp/pipelined_alu/InputGenerator_rb.html +101 -0
  327. data/ref/ruby/files/samp/pipelined_alu/TestHw5UnitModel_rb.html +111 -0
  328. data/ref/ruby/files/samp/pipelined_alu/hw5_unit_bench_rb.html +108 -0
  329. data/ref/ruby/files/samp/pipelined_alu/hw5_unit_design_rb.html +107 -0
  330. data/ref/ruby/files/samp/pipelined_alu/hw5_unit_spec_rb.html +112 -0
  331. data/ref/ruby/fr_class_index.html +46 -0
  332. data/ref/ruby/fr_file_index.html +55 -0
  333. data/ref/ruby/fr_method_index.html +77 -0
  334. data/ref/ruby/index.html +24 -0
  335. data/ref/ruby/rdoc-style.css +208 -0
  336. data/samp/counter/Rakefile +1 -0
  337. data/samp/counter/counter.v +20 -0
  338. data/samp/counter/counter_rspecTest_bench.rb +9 -0
  339. data/samp/counter/counter_rspecTest_bench.v +28 -0
  340. data/samp/counter/counter_rspecTest_design.rb +22 -0
  341. data/samp/counter/counter_rspecTest_proto.rb +10 -0
  342. data/samp/counter/counter_rspecTest_runner.rake +28 -0
  343. data/samp/counter/counter_rspecTest_spec.rb +47 -0
  344. data/samp/counter/counter_unitTest_bench.rb +9 -0
  345. data/samp/counter/counter_unitTest_bench.v +28 -0
  346. data/samp/counter/counter_unitTest_design.rb +22 -0
  347. data/samp/counter/counter_unitTest_proto.rb +10 -0
  348. data/samp/counter/counter_unitTest_runner.rake +28 -0
  349. data/samp/counter/counter_unitTest_spec.rb +49 -0
  350. data/samp/pipelined_alu/Hw5UnitModel.rb +134 -0
  351. data/samp/pipelined_alu/InputGenerator.rb +94 -0
  352. data/samp/pipelined_alu/README +127 -0
  353. data/samp/pipelined_alu/Rakefile +1 -0
  354. data/samp/pipelined_alu/TestHw5UnitModel.rb +88 -0
  355. data/samp/pipelined_alu/hw5_unit.v +186 -0
  356. data/samp/pipelined_alu/hw5_unit_bench.rb +8 -0
  357. data/samp/pipelined_alu/hw5_unit_bench.v +45 -0
  358. data/samp/pipelined_alu/hw5_unit_design.rb +18 -0
  359. data/samp/pipelined_alu/hw5_unit_runner.rake +10 -0
  360. data/samp/pipelined_alu/hw5_unit_spec.rb +123 -0
  361. data/tpl/launcher.rake +30 -0
  362. data/tpl/runner.rake +96 -0
  363. data/tpl/synopsys_vcs.tab +2 -0
  364. metadata +484 -0
@@ -0,0 +1,1657 @@
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. You can find the newest version of
20
+ this manual at the Ruby-VPI website.
21
+
22
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
23
+
24
+ Table of Contents
25
+
26
+ 1. Introduction
27
+
28
+ License
29
+ Manifest
30
+ Resources
31
+ Related works
32
+
33
+ Ye olde PLI
34
+
35
+ 2. Background
36
+
37
+ Methodology
38
+ Terminology
39
+ Organization
40
+
41
+ Interface to VPI
42
+
43
+ Running a test
44
+
45
+ Initialization
46
+ Execution
47
+
48
+ 3. Usage
49
+
50
+ Requirements
51
+ Installation and maintenance
52
+ Tools
53
+
54
+ Automated test generation
55
+ Verilog to Ruby conversion
56
+
57
+ Examples
58
+ Tutorial
59
+
60
+ Start with a design
61
+ Generate a test
62
+ Specify your expectations
63
+ Implement the prototype
64
+ Verify the prototype
65
+ Implement the design
66
+ Verify the design
67
+
68
+ 4. Known problems
69
+
70
+ Ruby
71
+
72
+ SystemStackError
73
+ test/unit
74
+
75
+ Icarus Verilog
76
+
77
+ vpi_handle_by_name
78
+ Vpi::reset
79
+
80
+ Mentor Modelsim
81
+
82
+ ruby_run()
83
+
84
+ Glossary
85
+ A. GNU Free Documentation License
86
+
87
+ PREAMBLE
88
+ APPLICABILITY AND DEFINITIONS
89
+ VERBATIM COPYING
90
+ COPYING IN QUANTITY
91
+ MODIFICATIONS
92
+ COMBINING DOCUMENTS
93
+ COLLECTIONS OF DOCUMENTS
94
+ AGGREGATION WITH INDEPENDENT WORKS
95
+ TRANSLATION
96
+ TERMINATION
97
+ FUTURE REVISIONS OF THIS LICENSE
98
+ ADDENDUM: How to use this License for your documents
99
+
100
+ List of Figures
101
+
102
+ 2.1. Overall organization of a test
103
+ 2.2. Detailed organization of a test
104
+ 2.3. Initialization of a test
105
+ 2.4. Execution of a test
106
+ 3.1. Declaration of a simple up-counter with synchronous reset
107
+ 3.2. Generating a test with specification in RSpec format
108
+ 3.3. Generating a test with specification in unit test format
109
+ 3.4. Specification implemented in RSpec format
110
+ 3.5. Specification implemented in unit test format
111
+ 3.6. Ruby prototype of our Verilog design
112
+ 3.7. Running a test with specification in RSpec format
113
+ 3.8. Running a test with specification in unit test format
114
+ 3.9. Implementation of a simple up-counter with synchronous reset
115
+ 3.10. Running a test with specification in RSpec format
116
+ 3.11. Running a test with specification in unit test format
117
+
118
+ List of Tables
119
+
120
+ 2.1. Naming format for accessing a handle's VPI properties
121
+ 2.2. Possible accessors and their implications
122
+
123
+ List of Examples
124
+
125
+ 2.1. Accessing a handle's VPI properties
126
+ 4.1. Part of a bench which instantiates a Verilog design
127
+ 4.2. Bad design with unconnected registers
128
+ 4.3. Fixed design with wired registers
129
+
130
+ Chapter 1. Introduction
131
+
132
+ Table of Contents
133
+
134
+ License
135
+ Manifest
136
+ Resources
137
+ Related works
138
+
139
+ Ye olde PLI
140
+
141
+ Ruby-VPI is a Ruby interface to VPI. It lets you create complex Verilog test
142
+ benches easily and wholly in Ruby.
143
+
144
+ License
145
+
146
+ Ruby-VPI is free software; you can redistribute it and/or modify it under the
147
+ terms of the GNU General Public License as published by the Free Software
148
+ Foundation; either version 2 of the License, or (at your option) any later
149
+ version.
150
+
151
+ Manifest
152
+
153
+ When you extract a Ruby-VPI release package, the following is what you would
154
+ expect to find.
155
+
156
+ doc
157
+
158
+ This directory contains user documentation in various formats.
159
+
160
+ ref
161
+
162
+ This directory contains reference API documentation in HTML format.
163
+
164
+ ext
165
+
166
+ This directory contains source code, written in the C language, for the
167
+ core of Ruby-VPI.
168
+
169
+ lib
170
+
171
+ This directory contains libraries, written in the Ruby language, for use by
172
+ specifications.
173
+
174
+ tpl
175
+
176
+ This directory contains templates used by tests.
177
+
178
+ bin
179
+
180
+ This directory contains various tools. See the section called “Tools” for
181
+ more information.
182
+
183
+ samp
184
+
185
+ This directory contains example tests. See the section called “Examples”
186
+ for more information.
187
+
188
+ Resources
189
+
190
+ Project
191
+
192
+ Access project facilities, hosted generously by RubyForge.
193
+
194
+ Tracker
195
+
196
+ Report problems, contribute patches, and more.
197
+
198
+ Releases
199
+
200
+ Download the newest release of Ruby-VPI.
201
+
202
+ Sources
203
+
204
+ Browse or access the source code repository.
205
+
206
+ Forums
207
+
208
+ Ask for help, give feedback, or discuss.
209
+
210
+ Related works
211
+
212
+ You may wish to consider the following projects, which are similar to Ruby-VPI.
213
+
214
+ RHDL
215
+
216
+ Hardware description and verification language based on Ruby.
217
+
218
+ MyHDL
219
+
220
+ Hardware description and verification language based on Python, which
221
+ features conversion to Verilog and co-simulation.
222
+
223
+ JOVE
224
+
225
+ Java interface to VPI.
226
+
227
+ ScriptEDA
228
+
229
+ Perl, Python, and Tcl interface to VPI.
230
+
231
+ Ye olde PLI
232
+
233
+ The following projects utilize the archaic tf and acc PLI interfaces, which
234
+ have been officially deprecated in IEEE Std 1364-2005.
235
+
236
+ ScriptSim
237
+
238
+ Perl, Python, and Tcl/Tk interface to PLI.
239
+
240
+ Verilog::Pli
241
+
242
+ Perl interface to PLI.
243
+
244
+ JPLI
245
+
246
+ Java interface to PLI.
247
+
248
+ Chapter 2. Background
249
+
250
+ Table of Contents
251
+
252
+ Methodology
253
+ Terminology
254
+ Organization
255
+
256
+ Interface to VPI
257
+
258
+ Running a test
259
+
260
+ Initialization
261
+ Execution
262
+
263
+ Ruby-VPI is a bench which lets you test Verilog modules using the Ruby
264
+ language.
265
+
266
+ Methodology
267
+
268
+ Ruby-VPI presents an open-ended interface to VPI. Thus, you can use any
269
+ methodology you wish when writing tests. However, BDD is emphasized in this
270
+ project because it greatly simplifies thinking about how to verify a design.
271
+
272
+ Terminology
273
+
274
+ [Tip] Tip
275
+ Have a look at the Glossary for definitions of terms used in this manual.
276
+
277
+ As a newcomer into the world of Verilog, I often heard the term test bench: “I
278
+ ran the test bench, but it didn't work!” or “Are you crazy?!! You still haven't
279
+ written the test bench? o_O”, for example. I flipped through my textbook and
280
+ surfed the Internet for a definition of the term, but it was to no avail.
281
+ Instead, both resources nonchalantly employed the term throughout their being,
282
+ as if mocking my ignorance of what seems to be universal knowledge.
283
+
284
+ Defeated, I turned to my inner faculties to determine the answer. “Let's see,
285
+ the term test bench has the word test—so it has something to do with
286
+ testing—and it has the word bench—so maybe it's referring to a table where the
287
+ testing should occur”. This reasoning grew increasingly familiar as my mind
288
+ rummaged through towering stores of obsolescence and ultimately revealed
289
+ dreaded memories of sleepless anguish: debugging electronics in the robotics
290
+ laboratory.
291
+
292
+ “Aha!”, I exclaimed hesitantly, trying to dismiss the past. The term has its
293
+ roots in the testing of electronic devices, where an engineer would sit at a
294
+ bench in an electronics laboratory and verify that an electronic component
295
+ satisfies some criteria. The bench would be furnished with tools of measurement
296
+ and manipulation—such as oscilloscopes, voltmeters, soldering irons, and so
297
+ on—which help the engineer to verify the electronic component or locate the
298
+ sources of defects in the component.
299
+
300
+ Alright, now I remember what a laboratory bench is, but how does that compare
301
+ with the term test bench? Surely they cannot have the same meaning, because it
302
+ doesn't make sense to run a laboratory bench or to write one. Thus, to avoid
303
+ propagating such confusion into this manual, I have attempted to clarify the
304
+ terminology by simplifying and reintroducing it in a new light.
305
+
306
+ Organization
307
+
308
+ Figure 2.1. Overall organization of a test
309
+
310
+ Overall organization of a test
311
+
312
+ As Figure 2.1, “Overall organization of a test” shows, a test is composed of a
313
+ bench, a design, and a specification. To extend the analogy of an electronics
314
+ laboratory, the first acts as the laboratory bench which provides measurement
315
+ and manipulation tools. The second acts as the electronic component being
316
+ verified by the engineer. And the third acts as the engineer who measures,
317
+ manipulates, and verifies the electronic component.
318
+
319
+ Interface to VPI
320
+
321
+ Figure 2.2. Detailed organization of a test
322
+
323
+ Detailed organization of a test
324
+
325
+ In Figure 2.2, “Detailed organization of a test”, Ruby-VPI acts as the bench, a
326
+ Verilog simulator encapsulates the design, and a Ruby interpreter encapsulates
327
+ the specification. Notice that Ruby-VPI encapsulates all communication between
328
+ the Ruby interpreter and VPI. This allows the specification, or any Ruby
329
+ program in general, to access VPI using nothing more than the Ruby language!
330
+ Thus, Ruby-VPI removes the burden of having to write C programs in order to
331
+ access VPI.
332
+
333
+ Furthermore, Ruby-VPI presents the entire IEEE Std 1364-2005 VPI interface to
334
+ the Ruby interpreter, but with the following minor changes.
335
+
336
+ ● The first letter in the name of every function, type, structure, and
337
+ constant becomes capitalized.
338
+
339
+ For example, the s_vpi_value structure in C becomes the S_vpi_value class
340
+ in Ruby. Likewise, the vpiIntVal constant in C becomes the VpiIntVal
341
+ constant in Ruby.
342
+
343
+ ● The VPI functions vpi_vprintf and vpi_mcd_vprintf are not made accessible
344
+ to Ruby. However, this isn't a big problem because you can use Ruby's
345
+ printf method instead.
346
+
347
+ The reason for this limitation is that some C compilers have trouble with
348
+ pointers to the va_list type. For these compilers, the second line in the
349
+ code shown below causes a “type mismatch” error.
350
+
351
+ void foo(va_list ap) {
352
+ va_list *p = ≈
353
+ }
354
+
355
+
356
+ VPI utility layer
357
+
358
+ From a user's perspective, the VPI utility layer greatly enhances the ability
359
+ to interact with handles. One simply invokes a handle's methods, which are
360
+ carefully named in the following manner, to access its VPI properties.
361
+
362
+ Table 2.1. Naming format for accessing a handle's VPI properties
363
+
364
+ ┌─────────┬─┬────────┬─┬────────┬────────┐
365
+ │Operation│_│Property│_│Accessor│Addendum│
366
+ ├─────────┴─┼────────┼─┴────────┼────────┤
367
+ │optional │required│optional │optional│
368
+ └───────────┴────────┴──────────┴────────┘
369
+
370
+ Operation
371
+
372
+ This parameter suggests a method that should be invoked in the context of
373
+ the Property parameter.
374
+
375
+ Property
376
+
377
+ This parameter suggests which VPI property should be accessed. The first
378
+ letter of this parameter's value should be lower case, and the vpi
379
+ prefix—common to all VPI properties—can be omitted.
380
+
381
+ For example, the VPI property vpiFullName is considered equivalent to
382
+ fullName but not equivalent to either FullName or full_name.
383
+
384
+ Accessor
385
+
386
+ This parameter suggests which VPI function should be used to access the VPI
387
+ property. When this parameter is not specified, the VPI utility layer will
388
+ attempt to guess the value of this parameter (see the source code of the
389
+ SWIG::TYPE_p_unsigned_int#method_missing method for details).
390
+
391
+ Table 2.2. Possible accessors and their implications
392
+
393
+ ┌────────┬──────────────────────┬──────────────────────────────────────┐
394
+ │Accessor│Kind of value accessed│VPI functions used to access the value│
395
+ ├────────┼──────────────────────┼──────────────────────────────────────┤
396
+ │d │delay │vpi_get_delays, vpi_put_delays │
397
+ ├────────┼──────────────────────┼──────────────────────────────────────┤
398
+ │l │logic │vpi_get_value, vpi_put_value │
399
+ ├────────┼──────────────────────┼──────────────────────────────────────┤
400
+ │i │integer │vpi_get │
401
+ ├────────┼──────────────────────┼──────────────────────────────────────┤
402
+ │b │boolean │vpi_get │
403
+ ├────────┼──────────────────────┼──────────────────────────────────────┤
404
+ │s │string │vpi_get_str │
405
+ ├────────┼──────────────────────┼──────────────────────────────────────┤
406
+ │h │handle │vpi_handle │
407
+ └────────┴──────────────────────┴──────────────────────────────────────┘
408
+ Addendum
409
+
410
+ When this parameter is a question mark (?), it suggests that the specified
411
+ VPI property should be queried as a boolean value. This produces the same
412
+ effect as specifying b for the Accessor parameter.
413
+
414
+ When this parameter is an equal sign (=), it suggests that the specified
415
+ VPI property should be written to.
416
+
417
+ Example 2.1. Accessing a handle's VPI properties
418
+
419
+ ┌─────────────────────┬────────────────────────────────────────────┬────────────┐
420
+ │ │ Naming format │ │
421
+ │ Ruby expression ├─────────┬─┬────────────┬─┬────────┬────────┤Description │
422
+ │ │Operation│_│ Property │_│Accessor│Addendum│ │
423
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┼────────────┤
424
+ │ │ │ │ │ │ │ │These │
425
+ │handle.each_vpiNet {|│ │ │ │ │ │ │expressions │
426
+ │net| puts │each │_│vpiNet │ │  │  │print the │
427
+ │net.fullName} │ │ │ │ │ │ │full name of│
428
+ │ │ │ │ │ │ │ │each vpiNet │
429
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤object │
430
+ │ │ │ │ │ │ │ │associated │
431
+ │handle.each_net {|net│each │_│net │ │  │  │with the │
432
+ │| puts net.fullName} │ │ │ │ │ │ │handle. │
433
+ │ │ │ │ │ │ │ │ │
434
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┼────────────┤
435
+ │handle.vpiIntVal │  │ │vpiIntVal │ │  │  │ │
436
+ │ │ │ │ │ │ │ │These │
437
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤expressions │
438
+ │handle.vpiIntVal_l │  │ │vpiIntVal │_│l │  │access the │
439
+ │ │ │ │ │ │ │ │logic value │
440
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤of the │
441
+ │handle.intVal │  │ │intVal │ │  │  │handle's │
442
+ │ │ │ │ │ │ │ │vpiIntVal │
443
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤property. │
444
+ │handle.intVal_l │  │ │intVal │_│l │  │ │
445
+ │ │ │ │ │ │ │ │ │
446
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┼────────────┤
447
+ │handle.vpiIntVal = 15│  │ │vpiIntVal │ │  │= │ │
448
+ │ │ │ │ │ │ │ │These │
449
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤expressions │
450
+ │handle.vpiIntVal_l = │ │ │ │ │ │ │assign the │
451
+ │15 │  │ │vpiIntVal │_│l │= │number 15 to│
452
+ │ │ │ │ │ │ │ │the logic │
453
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤value of the│
454
+ │handle.intVal = 15 │  │ │intVal │ │  │= │handle's │
455
+ │ │ │ │ │ │ │ │vpiIntVal │
456
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤property. │
457
+ │handle.intVal_l = 15 │  │ │intVal │_│l │= │ │
458
+ │ │ │ │ │ │ │ │ │
459
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┼────────────┤
460
+ │handle.vpiType │  │ │vpiType │ │  │  │ │
461
+ │ │ │ │ │ │ │ │These │
462
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤expressions │
463
+ │handle.vpiType_i │  │ │vpiType │_│i │  │access the │
464
+ │ │ │ │ │ │ │ │integer │
465
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤value of the│
466
+ │handle.type │  │ │type │ │  │  │handle's │
467
+ │ │ │ │ │ │ │ │vpiType │
468
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤property. │
469
+ │handle.type_i │  │ │type │_│i │  │ │
470
+ │ │ │ │ │ │ │ │ │
471
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┼────────────┤
472
+ │handle.vpiProtected │  │ │vpiProtected│ │  │  │ │
473
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤These │
474
+ │handle.vpiProtected_b│  │ │vpiProtected│_│b │  │expressions │
475
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤access the │
476
+ │handle.vpiProtected? │  │ │vpiProtected│ │  │? │boolean │
477
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤value of the│
478
+ │handle.protected │  │ │protected │ │  │  │handle's │
479
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤vpiProtected│
480
+ │handle.protected_b │  │ │protected │_│b │  │property. │
481
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤ │
482
+ │handle.protected? │  │ │protected │ │  │? │ │
483
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┼────────────┤
484
+ │handle.vpiFullName │  │ │vpiFullName │ │  │  │ │
485
+ │ │ │ │ │ │ │ │These │
486
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤expressions │
487
+ │handle.vpiFullName_s │  │ │vpiFullName │_│s │  │access the │
488
+ │ │ │ │ │ │ │ │string value│
489
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤of the │
490
+ │handle.fullName │  │ │fullName │ │  │  │handle's │
491
+ │ │ │ │ │ │ │ │vpiFullName │
492
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤property. │
493
+ │handle.fullName_s │  │ │fullName │_│s │  │ │
494
+ │ │ │ │ │ │ │ │ │
495
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┼────────────┤
496
+ │handle.vpiParent │  │ │vpiParent │ │  │  │ │
497
+ │ │ │ │ │ │ │ │These │
498
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤expressions │
499
+ │handle.vpiParent_h │  │ │vpiParent │_│h │  │access the │
500
+ │ │ │ │ │ │ │ │handle value│
501
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤of the │
502
+ │handle.parent │  │ │parent │ │  │  │handle's │
503
+ │ │ │ │ │ │ │ │vpiParent │
504
+ ├─────────────────────┼─────────┼─┼────────────┼─┼────────┼────────┤property. │
505
+ │handle.parent_h │  │ │parent │_│h │  │ │
506
+ │ │ │ │ │ │ │ │ │
507
+ └─────────────────────┴─────────┴─┴────────────┴─┴────────┴────────┴────────────┘
508
+
509
+ Running a test
510
+
511
+ Unlike an engineer who can verify an electronic component in real-time, the
512
+ Verilog simulator and the Ruby interpreter (see Figure 2.2, “Detailed
513
+ organization of a test”) take turns working with objects in a simulation when a
514
+ test is run. In particular, they take turns manipulating the design and
515
+ transfer control to each other when appropriate.
516
+
517
+ The situation is similar to a pair of friends playing catch. One friend throws
518
+ a ball to the other, and the other throws it back. Either is able to inspect
519
+ and modify the ball, but only when it is in hand.
520
+
521
+ Initialization
522
+
523
+ A test is first initialized before it is executed. Figure 2.3, “Initialization
524
+ of a test” illustrates the initialization process described below.
525
+
526
+ Figure 2.3. Initialization of a test
527
+
528
+ Initialization of a test
529
+
530
+ Procedure 2.1. Initialization of a test
531
+
532
+ 1. The Verilog simulator initializes the Ruby interpreter by invoking the
533
+ $ruby_init; system task/function, whose parameters represent the
534
+ command-line invocation of the Ruby interpreter. For example, one would
535
+ specify $ruby_init("ruby", "-w"); in Verilog to achieve the same effect as
536
+ specifying ruby -w at a command-prompt.
537
+
538
+ 2. The Verilog simulator is paused and the Ruby interpreter is initialized
539
+ with the arguments of the $ruby_init; system task/function.
540
+
541
+ 3. When the Ruby interpreter invokes the Vpi::relay_verilog method, it is
542
+ paused and the Verilog simulator is given control.
543
+
544
+ Execution
545
+
546
+ After a test is initialized, it is executed such that the design is verified
547
+ against the specification. Figure 2.4, “Execution of a test” illustrates the
548
+ execution process described below.
549
+
550
+ Figure 2.4. Execution of a test
551
+
552
+ Execution of a test
553
+
554
+ Procedure 2.2. Execution of a test
555
+
556
+ 1. The Verilog simulator transfers control to the Ruby interpreter by invoking
557
+ the $ruby_relay; system task/function.
558
+
559
+ 2. The Verilog simulator is paused and the Ruby interpreter is given control.
560
+
561
+ 3. When the Ruby interpreter invokes the Vpi::relay_verilog method, it is
562
+ paused and the Verilog simulator is given control.
563
+
564
+ Chapter 3. Usage
565
+
566
+ Table of Contents
567
+
568
+ Requirements
569
+ Installation and maintenance
570
+ Tools
571
+
572
+ Automated test generation
573
+ Verilog to Ruby conversion
574
+
575
+ Examples
576
+ Tutorial
577
+
578
+ Start with a design
579
+ Generate a test
580
+ Specify your expectations
581
+ Implement the prototype
582
+ Verify the prototype
583
+ Implement the design
584
+ Verify the design
585
+
586
+ Requirements
587
+
588
+ The following software is necessary in order to use Ruby-VPI.
589
+
590
+ Verilog simulator
591
+
592
+ Ruby-VPI is known to work with the following simulators. Nevertheless, you
593
+ should be able to use it with any Verilog simulator that supports VPI.
594
+
595
+ Icarus Verilog
596
+
597
+ Version 0.8 or newer is acceptable.
598
+
599
+ GPL Cver
600
+
601
+ Version 2.11a or newer is acceptable.
602
+
603
+ Synopsys VCS
604
+
605
+ Version X-2005.06 or newer is acceptable.
606
+
607
+ Mentor Modelsim
608
+
609
+ Version 6.1b or newer is acceptable.
610
+
611
+ make
612
+
613
+ GNU make is preferred but any distribution of make should be acceptable.
614
+
615
+ C compiler
616
+
617
+ GNU Compiler Collection (GCC) is preferred but any C compiler should be
618
+ acceptable.
619
+
620
+ POSIX threads (pthreads)
621
+
622
+ Header and linkable object files, and operating system support for this
623
+ library are necessary.
624
+
625
+ Ruby
626
+
627
+ Version 1.8 or newer, including header and linkable object files for
628
+ building extensions, is necessary. You can install Ruby by following these
629
+ instructions.
630
+
631
+ RubyGems
632
+
633
+ Any recent version should be acceptable. You can install RubyGems by
634
+ following these instructions.
635
+
636
+ Installation and maintenance
637
+
638
+ Once you have satisfied the necessary requirements, you can install Ruby-VPI by
639
+ running the command gem install ruby-vpi. Likewise, you can uninstall Ruby-VPI
640
+ by running the command gem uninstall ruby-vpi. Furthermore, you can upgrade to
641
+ the latest release of Ruby-VPI by running the command gem update ruby-vpi.
642
+
643
+ You can learn more about using and manipulating RubyGems in the RubyGems user
644
+ manual.
645
+
646
+ Tools
647
+
648
+ The bin directory contains various utilities which ease the process of writing
649
+ tests. Each tool provides help and usage information invoked with the --help
650
+ option.
651
+
652
+ Automated test generation
653
+
654
+ The generate_test.rb tool can be used to automatically generate tests from
655
+ Verilog 2001 module declarations (see the section called “Generate a test”).
656
+ You can try it by running the command generate_test.rb --help.
657
+
658
+ Verilog to Ruby conversion
659
+
660
+ The header_to_ruby.rb tool can be used to convert Verilog header files into
661
+ Ruby. You can try it by running the command header_to_ruby.rb --help.
662
+
663
+ Examples
664
+
665
+ The samp directory contains several example tests which illustrate how Ruby-VPI
666
+ can be used. Each example has an associated Rakefile which simplifies the
667
+ process of running it. Therefore, simply navigate into an example directory and
668
+ run the command rake to get started.
669
+
670
+ Also, some example specifications make use of BDD through the RSpec library.
671
+ See the the section called “Methodology” for a discussion of RSpec.
672
+
673
+ Tutorial
674
+
675
+ Procedure 3.1. Typical way of using Ruby-VPI
676
+
677
+ 1. Declare the design, which is a Verilog module, using Verilog 2001 syntax.
678
+
679
+ 2. Generate a test for the design using the automated test generator tool.
680
+
681
+ 3. Identify your expectations for the design and implement them in the
682
+ specification.
683
+
684
+ 4. Implement the prototype of the design in Ruby.
685
+
686
+ 5. Verify the prototype against the specification.
687
+
688
+ 6. Implement the design in Verilog once the prototype has been verified.
689
+
690
+ 7. Verify the design against the specification.
691
+
692
+ Start with a design
693
+
694
+ First, we need a design to verify. In this tutorial, Figure 3.1, “Declaration
695
+ of a simple up-counter with synchronous reset” will serve as our design. Its
696
+ interface is composed of the following parts:
697
+
698
+ Size
699
+
700
+ This parameter defines the number of bits used to represent the counter's
701
+ value.
702
+
703
+ clock
704
+
705
+ Each positive edge of this signal causes the count register to increment.
706
+
707
+ reset
708
+
709
+ Assertion of this signal causes the count register to become zero.
710
+
711
+ count
712
+
713
+ This register contains the counter's value.
714
+
715
+ [Important] Before we continue…
716
+ Save the source code shown in Figure 3.1, “Declaration of a simple
717
+ up-counter with synchronous reset” into a file named counter.v.
718
+
719
+ Figure 3.1. Declaration of a simple up-counter with synchronous reset
720
+
721
+ module counter #(parameter Size = 5) (
722
+ input clock,
723
+ input reset,
724
+ output reg [Size - 1 : 0] count
725
+ );
726
+ endmodule
727
+
728
+ Generate a test
729
+
730
+ Now that we have a design to verify, let us generate a test for it using the
731
+ automated test generator tool. This tool allows us to implement our
732
+ specification in either RSpec, unit test, or our very own format. Each format
733
+ represents a different software development methodology: RSpec represents BDD,
734
+ unit testing represents TDD, and our own format can represent another
735
+ methodology.
736
+
737
+ [Note] Note
738
+ In this tutorial, we will see how to implement our specification in both
739
+ RSpec and unit test formats.
740
+
741
+ Once we have decided how we want to implement our specification, we can proceed
742
+ to generate a test for our design. Figure 3.2, “Generating a test with
743
+ specification in RSpec format” and Figure 3.3, “Generating a test with
744
+ specification in unit test format” illustrate this process. Here, the test
745
+ generation tool produces a test composed of the following parts:
746
+
747
+ Runner
748
+
749
+ Written in Rake, this file builds and runs the test bench.
750
+
751
+ Bench
752
+
753
+ Written in Verilog and Ruby, these files define the testing environment.
754
+
755
+ Design
756
+
757
+ Written in Ruby, this file provides an interface to the design under test.
758
+
759
+ Prototype
760
+
761
+ Written in Ruby, this file defines a prototype of the design under test.
762
+
763
+ Specification
764
+
765
+ Written in Ruby, this file verifies the design.
766
+
767
+ The reason for dividing a single test into these parts is mainly to decouple
768
+ the design from the specification. This allows you to focus on writing the
769
+ specification while the remainder is automatically generated by the tool. For
770
+ example, when the interface of a Verilog module changes, you would simply
771
+ re-run this tool to incorporate those changes into the test without diverting
772
+ your focus from the specification.
773
+
774
+ Figure 3.2. Generating a test with specification in RSpec format
775
+
776
+ $ generate_test.rb counter.v --rspec --name rspecTest
777
+ Using name `rspecTest' for generated test.
778
+ Using RSpec specification format.
779
+
780
+ Parsed module: counter
781
+ - Generated runner: counter_rspecTest_runner.rake
782
+ - Generated bench: counter_rspecTest_bench.v
783
+ - Generated bench: counter_rspecTest_bench.rb
784
+ - Generated design: counter_rspecTest_design.rb
785
+ - Generated prototype: counter_rspecTest_proto.rb
786
+ - Generated specification: counter_rspecTest_spec.rb
787
+
788
+ Figure 3.3. Generating a test with specification in unit test format
789
+
790
+ $ generate_test.rb counter.v --unit --name unitTest
791
+ Using name `unitTest' for generated test.
792
+ Using UnitTest specification format.
793
+
794
+ Parsed module: counter
795
+ - Generated runner: counter_unitTest_runner.rake
796
+ - Generated bench: counter_unitTest_bench.v
797
+ - Generated bench: counter_unitTest_bench.rb
798
+ - Generated design: counter_unitTest_design.rb
799
+ - Generated prototype: counter_unitTest_proto.rb
800
+ - Generated specification: counter_unitTest_spec.rb
801
+
802
+ Specify your expectations
803
+
804
+ So far, the test generation tool has created a basic foundation for our test.
805
+ Now we must build upon this foundation by identifying our expectations of the
806
+ design. That is, how do we expect the design to behave under certain
807
+ conditions?
808
+
809
+ The following is a reasonable set of expectations for our simple counter:
810
+
811
+ ● A resetted counter's value should be zero.
812
+
813
+ ● A resetted counter's value should increment by one count upon each rising
814
+ clock edge.
815
+
816
+ ● A counter with the maximum value should overflow upon increment.
817
+
818
+ Now that we have identified a set of expectations for our design, we are ready
819
+ to implement them in our specification. Figure 3.4, “Specification implemented
820
+ in RSpec format” and Figure 3.5, “Specification implemented in unit test
821
+ format” illustrate this process. Note the striking similarities between our
822
+ expectations and their implementation.
823
+
824
+ [Important] Before we continue…
825
+ ● Append the following code to the files named
826
+ counter_rspecTest_design.rb and counter_unitTest_design.rb.
827
+
828
+ class Counter
829
+ def reset!
830
+ @reset.intVal = 1
831
+ relay_verilog # advance the clock
832
+ @reset.intVal = 0
833
+ end
834
+ end
835
+
836
+ ● Replace the contents of the file named
837
+ counter_rspecTest_spec.rb with the source code shown in
838
+ Figure 3.4, “Specification implemented in RSpec format”.
839
+
840
+ ● Replace the contents of the file named counter_unitTest_spec.rb
841
+ with the source code shown in Figure 3.5, “Specification
842
+ implemented in unit test format”.
843
+
844
+ Figure 3.4. Specification implemented in RSpec format
845
+
846
+ LIMIT = 2 ** Counter::Size # lowest upper bound of counter's value
847
+ MAX = LIMIT - 1 # maximum allowed value for a counter
848
+
849
+ include Vpi
850
+
851
+ context "A resetted counter's value" do
852
+ setup do
853
+ @design = Counter.new
854
+ @design.reset!
855
+ end
856
+
857
+ specify "should be zero" do
858
+ @design.count.intVal.should_equal 0
859
+ end
860
+
861
+ specify "should increment by one count upon each rising clock edge" do
862
+ LIMIT.times do |i|
863
+ @design.count.intVal.should_equal i
864
+ relay_verilog # advance the clock
865
+ end
866
+ end
867
+ end
868
+
869
+ context "A counter with the maximum value" do
870
+ setup do
871
+ @design = Counter.new
872
+ @design.reset!
873
+
874
+ # increment the counter to maximum value
875
+ MAX.times do relay_verilog end
876
+ @design.count.intVal.should_equal MAX
877
+ end
878
+
879
+ specify "should overflow upon increment" do
880
+ relay_verilog # increment the counter
881
+ @design.count.intVal.should_equal 0
882
+ end
883
+ end
884
+
885
+ Figure 3.5. Specification implemented in unit test format
886
+
887
+ LIMIT = 2 ** Counter::Size # lowest upper bound of counter's value
888
+ MAX = LIMIT - 1 # maximum allowed value for a counter
889
+
890
+ class ResettedCounterValue < Test::Unit::TestCase
891
+ include Vpi
892
+
893
+ def setup
894
+ @design = Counter.new
895
+ @design.reset!
896
+ end
897
+
898
+ def test_zero
899
+ assert_equal 0, @design.count.intVal
900
+ end
901
+
902
+ def test_increment
903
+ LIMIT.times do |i|
904
+ assert_equal i, @design.count.intVal
905
+ relay_verilog # advance the clock
906
+ end
907
+ end
908
+ end
909
+
910
+ class MaximumCounterValue < Test::Unit::TestCase
911
+ include Vpi
912
+
913
+ def setup
914
+ @design = Counter.new
915
+ @design.reset!
916
+
917
+ # increment the counter to maximum value
918
+ MAX.times do relay_verilog end
919
+ assert_equal MAX, @design.count.intVal
920
+ end
921
+
922
+ def test_overflow
923
+ relay_verilog # increment the counter
924
+ assert_equal 0, @design.count.intVal
925
+ end
926
+ end
927
+
928
+ Implement the prototype
929
+
930
+ Now that we have a specification against which to verify our design, let us
931
+ build a prototype of our design. By doing so, we exercise our specification,
932
+ experience potential problems that may arise when we later implement our design
933
+ in Verilog, and gain confidence in our work. Figure 3.6, “Ruby prototype of our
934
+ Verilog design” shows the completed prototype for our design.
935
+
936
+ [Important] Before we continue…
937
+ Replace the contents of the files named counter_rspecTest_proto.rb
938
+ and counter_unitTest_proto.rb with the source code shown in
939
+ Figure 3.6, “Ruby prototype of our Verilog design”.
940
+
941
+ Figure 3.6. Ruby prototype of our Verilog design
942
+
943
+ class CounterProto < Counter
944
+ def simulate!
945
+ if @reset.intVal == 1
946
+ @count.intVal = 0
947
+ else
948
+ @count.intVal += 1
949
+ end
950
+ end
951
+ end
952
+
953
+ Verify the prototype
954
+
955
+ Now that we have implemented our prototype, we are ready to verify it against
956
+ our specification by running the test. Figure 3.7, “Running a test with
957
+ specification in RSpec format” and Figure 3.8, “Running a test with
958
+ specification in unit test format” illustrate this process.
959
+
960
+ Here, the PROTO environment variable is set—any value is fine—before running
961
+ the test in order to replace the design with the prototype in the simulation.
962
+ Otherwise, our design will be verified—instead of our prototype—against our
963
+ specification. Furthermore, the manner in which the PROTO environment variable
964
+ is set in these figures follows the syntax of the GNU BASH shell. If you use a
965
+ different shell, you may have to use different syntax, or a different command
966
+ altogether, in order to set this variable. Finally, the Icarus Verilog
967
+ simulator, denoted by ivl, is used to simulate our design.
968
+
969
+ Figure 3.7. Running a test with specification in RSpec format
970
+
971
+ $ export PROTO=1
972
+ $ rake -f counter_rspecTest_runner.rake ivl
973
+ counter_rspecTest: verifying prototype instead of design
974
+
975
+ A resetted counter's value
976
+ - should be zero
977
+ - should increment by one count upon each rising clock edge
978
+
979
+ A counter with the maximum value
980
+ - should overflow upon increment
981
+
982
+ Finished in 0.018199 seconds
983
+
984
+ 3 specifications, 0 failures
985
+
986
+ Figure 3.8. Running a test with specification in unit test format
987
+
988
+ $ export PROTO=1
989
+ $ rake -f counter_unitTest_runner.rake ivl
990
+ counter_unitTest: verifying prototype instead of design
991
+
992
+ Loaded suite counter_unitTest_bench
993
+ Started
994
+ ...
995
+ Finished in 0.040668 seconds.
996
+
997
+ 3 tests, 35 assertions, 0 failures, 0 errors
998
+
999
+ Implement the design
1000
+
1001
+ Now that we have implemented and verified our prototype, we are ready to
1002
+ implement our design. This is often quite simple because we translate existing
1003
+ code from Ruby into Verilog. Figure 3.9, “Implementation of a simple up-counter
1004
+ with synchronous reset” illustrates the result of this process.
1005
+
1006
+ [Important] Before we continue…
1007
+ Replace the contents of the file named counter.v with the source
1008
+ code shown in Figure 3.9, “Implementation of a simple up-counter
1009
+ with synchronous reset”.
1010
+
1011
+ Figure 3.9. Implementation of a simple up-counter with synchronous reset
1012
+
1013
+ module counter #(parameter Size = 5) (
1014
+ input clock,
1015
+ input reset,
1016
+ output reg [Size - 1 : 0] count
1017
+ );
1018
+ always @(posedge clock) begin
1019
+ if (reset)
1020
+ count <= 0;
1021
+ else
1022
+ count <= count + 1;
1023
+ end
1024
+ endmodule
1025
+
1026
+ Verify the design
1027
+
1028
+ Now that we have implemented our design, we are ready to verify it against our
1029
+ specification by running the test. Figure 3.10, “Running a test with
1030
+ specification in RSpec format” and Figure 3.11, “Running a test with
1031
+ specification in unit test format” illustrate this process.
1032
+
1033
+ Here, the PROTO environment variable is unset before the test is run in order
1034
+ to prevent the design from being replaced by the prototype. Otherwise, our
1035
+ prototype will be verified—instead of our design—against our specification.
1036
+ Furthermore, the manner in which the PROTO environment variable is unset in
1037
+ these figures follows the syntax of the GNU BASH shell. If you use a different
1038
+ shell, you may have to use different syntax, or a different command altogether,
1039
+ in order to set this variable. Finally, the Icarus Verilog simulator, denoted
1040
+ by ivl, is used to simulate our design.
1041
+
1042
+ Figure 3.10. Running a test with specification in RSpec format
1043
+
1044
+ $ unset PROTO
1045
+ $ rake -f counter_rspecTest_runner.rake ivl
1046
+ A resetted counter's value
1047
+ - should be zero
1048
+ - should increment by one count upon each rising clock edge
1049
+
1050
+ A counter with the maximum value
1051
+ - should overflow upon increment
1052
+
1053
+ Finished in 0.005628 seconds
1054
+
1055
+ 3 specifications, 0 failures
1056
+
1057
+ Figure 3.11. Running a test with specification in unit test format
1058
+
1059
+ $ unset PROTO
1060
+ $ rake -f counter_unitTest_runner.rake ivl
1061
+ Loaded suite counter_unitTest_bench
1062
+ Started
1063
+ ...
1064
+ Finished in 0.006766 seconds.
1065
+
1066
+ 3 tests, 35 assertions, 0 failures, 0 errors
1067
+
1068
+ Chapter 4. Known problems
1069
+
1070
+ Table of Contents
1071
+
1072
+ Ruby
1073
+
1074
+ SystemStackError
1075
+ test/unit
1076
+
1077
+ Icarus Verilog
1078
+
1079
+ vpi_handle_by_name
1080
+ Vpi::reset
1081
+
1082
+ Mentor Modelsim
1083
+
1084
+ ruby_run()
1085
+
1086
+ This chapter presents known problems and possible solutions. In addition,
1087
+ previously solved problems have been retained for historical reference.
1088
+
1089
+ Ruby
1090
+
1091
+ SystemStackError
1092
+
1093
+ [Note] Problem solved
1094
+ This problem was fixed in release 2.0.0 (2006-04-17). If it still
1095
+ occurs, then please report it.
1096
+
1097
+ If a “stack level too deep (SystemStackError)” error occurs during the
1098
+ simulation, then increase the system-resource limit for stack-size by running
1099
+ the command ulimit -s unlimited before starting the simulation.
1100
+
1101
+ test/unit
1102
+
1103
+ [Note] Problem solved
1104
+ This problem was fixed in release 2.0.0 (2006-04-17). If it still
1105
+ occurs, then please report it.
1106
+
1107
+ If your specification employs Ruby's unit testing framework, then you will
1108
+ encounter the error: “[BUG] cross-thread violation on rb_gc()”.
1109
+
1110
+ Icarus Verilog
1111
+
1112
+ vpi_handle_by_name
1113
+
1114
+ Give full paths to Verilog objects
1115
+
1116
+ In version 0.8 of Icarus Verilog, the vpi_handle_by_name function requires an
1117
+ absolute path (including the name of the bench which instantiates the design)
1118
+ to a Verilog object.
1119
+
1120
+ For example, consider Example 4.1, “Part of a bench which instantiates a
1121
+ Verilog design”. Here, one needs to specify TestFoo.my_foo.clk instead of
1122
+ my_foo.clk in order to access the clk input of the my_foo module instance.
1123
+
1124
+ Example 4.1. Part of a bench which instantiates a Verilog design
1125
+
1126
+ module TestFoo;
1127
+ reg clk_reg;
1128
+ Foo my_foo(.clk(clk_reg));
1129
+ endmodule
1130
+
1131
+ Registers must be connected
1132
+
1133
+ In version 0.8 of Icarus Verilog, if you want to access a register in a design,
1134
+ then it must be connected to something (either assigned to a wire or passed as
1135
+ a parameter to a module instantiation). Otherwise, you will get a nil value as
1136
+ the result of vpi_handle_by_name method.
1137
+
1138
+ For example, suppose you wanted to access the clk_reg register, from the bench
1139
+ shown in Example 4.2, “Bad design with unconnected registers”. If you execute
1140
+ the statement clk_reg = vpi_handle_by_name("TestFoo.clk_reg", nil) in a
1141
+ specification, then you will discover that the vpi_handle_by_name method
1142
+ returns nil instead of a handle to the clk_reg register.
1143
+
1144
+ The solution is to change the design such that it appears like the one shown in
1145
+ Example 4.3, “Fixed design with wired registers” where the register is
1146
+ connected to a wire, or Example 4.1, “Part of a bench which instantiates a
1147
+ Verilog design” where the register is connected to a module instantiation.
1148
+
1149
+ Example 4.2. Bad design with unconnected registers
1150
+
1151
+ Here the clk_reg register is not connected to anything.
1152
+
1153
+ module TestFoo;
1154
+ reg clk_reg;
1155
+ endmodule
1156
+
1157
+ Example 4.3. Fixed design with wired registers
1158
+
1159
+ Here the clk_reg register is connected to the clk_wire wire.
1160
+
1161
+ module TestFoo;
1162
+ reg clk_reg;
1163
+ wire clk_wire;
1164
+ assign clk_wire = clk_reg;
1165
+ endmodule
1166
+
1167
+ Vpi::reset
1168
+
1169
+ [Caution] Deprecated method
1170
+ The vpi_control method was removed in release 3.0.0 (2006-04-23) of
1171
+ Ruby-VPI, and is deprecated. Please use Vpi::vpi_control(VpiReset)
1172
+ instead.
1173
+
1174
+ In version 0.8 of Icarus Verilog, the vpi_control(vpiReset) VPI function causes
1175
+ an assertion to fail inside the simulator. As a result, the simulation
1176
+ terminates and a core dump is produced.
1177
+
1178
+ Mentor Modelsim
1179
+
1180
+ ruby_run()
1181
+
1182
+ [Note] Problem solved
1183
+ This problem was fixed in release 2.0.0 (2006-04-17). If it still
1184
+ occurs, then please report it.
1185
+
1186
+ Version 6.1b of Mentor Modelsim doesn't play nicely with either an embedded
1187
+ Ruby interpreter or POSIX threads in a PLI application. When Ruby-VPI invokes
1188
+ the ruby_run function (which starts the Ruby interpreter), the simulator
1189
+ terminates immediately with an exit status of 0.
1190
+
1191
+ Glossary
1192
+
1193
+ B
1194
+
1195
+ Bench
1196
+
1197
+ An environment in which a design is verified against a specification.
1198
+ Often, it is used to emulate conditions in which the design will be
1199
+ eventually deployed.
1200
+
1201
+ BDD
1202
+
1203
+ Behavior driven development.
1204
+
1205
+ A software development methodology which emphasizes thinking in terms of
1206
+ behavior when designing, implementing, and verifying software. See the
1207
+ official wiki for more information.
1208
+
1209
+ See Also TDD, RSpec.
1210
+
1211
+ D
1212
+
1213
+ Design
1214
+
1215
+ An idea or entity that is verified against a specification in order to
1216
+ ensure correctness or soundness of its being.
1217
+
1218
+ H
1219
+
1220
+ Handle
1221
+
1222
+ An object in a Verilog simulation.
1223
+
1224
+ R
1225
+
1226
+ Rake
1227
+   Rake is a build tool, written in Ruby, using Ruby as a  
1228
+ build language. Rake is similar to make in scope and
1229
+ purpose.
1230
+
1231
+   --Rake documentation
1232
+
1233
+ See the Rake website for more information.
1234
+
1235
+ RSpec
1236
+
1237
+ Ruby framework for BDD. See the RSpec website and RSpec tutorial for more
1238
+ information.
1239
+
1240
+ See Also BDD.
1241
+
1242
+ S
1243
+
1244
+ Specification
1245
+
1246
+ A collection of expectations that must be satisfied by a design when
1247
+ subjected to certain conditions.
1248
+
1249
+ T
1250
+
1251
+ TDD
1252
+
1253
+ Test Driven Development.
1254
+
1255
+ See Also BDD.
1256
+
1257
+ Test
1258
+
1259
+ The act of verifying a design against a specification in a bench.
1260
+
1261
+ See Also Test bench.
1262
+
1263
+ Test bench
1264
+
1265
+ An allusion to a bench in an electronics laboratory, or so it seems.
1266
+
1267
+ See Also Test.
1268
+
1269
+ GNU Free Documentation License
1270
+
1271
+ Version 1.2, November 2002
1272
+
1273
+ Copyright © 2000,2001,2002 Free Software Foundation, Inc.
1274
+
1275
+ Free Software Foundation, Inc.
1276
+  51 Franklin St, Fifth Floor,
1277
+  Boston,
1278
+  MA
1279
+  02110-1301
1280
+  USA
1281
+  
1282
+
1283
+ Everyone is permitted to copy and distribute verbatim copies of this license
1284
+ document, but changing it is not allowed.
1285
+
1286
+ Version 1.2, November 2002
1287
+
1288
+ Table of Contents
1289
+
1290
+ PREAMBLE
1291
+ APPLICABILITY AND DEFINITIONS
1292
+ VERBATIM COPYING
1293
+ COPYING IN QUANTITY
1294
+ MODIFICATIONS
1295
+ COMBINING DOCUMENTS
1296
+ COLLECTIONS OF DOCUMENTS
1297
+ AGGREGATION WITH INDEPENDENT WORKS
1298
+ TRANSLATION
1299
+ TERMINATION
1300
+ FUTURE REVISIONS OF THIS LICENSE
1301
+ ADDENDUM: How to use this License for your documents
1302
+
1303
+ PREAMBLE
1304
+
1305
+ The purpose of this License is to make a manual, textbook, or other functional
1306
+ and useful document "free" in the sense of freedom: to assure everyone the
1307
+ effective freedom to copy and redistribute it, with or without modifying it,
1308
+ either commercially or noncommercially. Secondarily, this License preserves for
1309
+ the author and publisher a way to get credit for their work, while not being
1310
+ considered responsible for modifications made by others.
1311
+
1312
+ This License is a kind of "copyleft", which means that derivative works of the
1313
+ document must themselves be free in the same sense. It complements the GNU
1314
+ General Public License, which is a copyleft license designed for free software.
1315
+
1316
+ We have designed this License in order to use it for manuals for free software,
1317
+ because free software needs free documentation: a free program should come with
1318
+ manuals providing the same freedoms that the software does. But this License is
1319
+ not limited to software manuals; it can be used for any textual work,
1320
+ regardless of subject matter or whether it is published as a printed book. We
1321
+ recommend this License principally for works whose purpose is instruction or
1322
+ reference.
1323
+
1324
+ APPLICABILITY AND DEFINITIONS
1325
+
1326
+ This License applies to any manual or other work, in any medium, that contains
1327
+ a notice placed by the copyright holder saying it can be distributed under the
1328
+ terms of this License. Such a notice grants a world-wide, royalty-free license,
1329
+ unlimited in duration, to use that work under the conditions stated herein. The
1330
+ "Document", below, refers to any such manual or work. Any member of the public
1331
+ is a licensee, and is addressed as "you". You accept the license if you copy,
1332
+ modify or distribute the work in a way requiring permission under copyright
1333
+ law.
1334
+
1335
+ A "Modified Version" of the Document means any work containing the Document or
1336
+ a portion of it, either copied verbatim, or with modifications and/or
1337
+ translated into another language.
1338
+
1339
+ A "Secondary Section" is a named appendix or a front-matter section of the
1340
+ Document that deals exclusively with the relationship of the publishers or
1341
+ authors of the Document to the Document's overall subject (or to related
1342
+ matters) and contains nothing that could fall directly within that overall
1343
+ subject. (Thus, if the Document is in part a textbook of mathematics, a
1344
+ Secondary Section may not explain any mathematics.) The relationship could be a
1345
+ matter of historical connection with the subject or with related matters, or of
1346
+ legal, commercial, philosophical, ethical or political position regarding them.
1347
+
1348
+ The "Invariant Sections" are certain Secondary Sections whose titles are
1349
+ designated, as being those of Invariant Sections, in the notice that says that
1350
+ the Document is released under this License. If a section does not fit the
1351
+ above definition of Secondary then it is not allowed to be designated as
1352
+ Invariant. The Document may contain zero Invariant Sections. If the Document
1353
+ does not identify any Invariant Sections then there are none.
1354
+
1355
+ The "Cover Texts" are certain short passages of text that are listed, as
1356
+ Front-Cover Texts or Back-Cover Texts, in the notice that says that the
1357
+ Document is released under this License. A Front-Cover Text may be at most 5
1358
+ words, and a Back-Cover Text may be at most 25 words.
1359
+
1360
+ A "Transparent" copy of the Document means a machine-readable copy, represented
1361
+ in a format whose specification is available to the general public, that is
1362
+ suitable for revising the document straightforwardly with generic text editors
1363
+ or (for images composed of pixels) generic paint programs or (for drawings)
1364
+ some widely available drawing editor, and that is suitable for input to text
1365
+ formatters or for automatic translation to a variety of formats suitable for
1366
+ input to text formatters. A copy made in an otherwise Transparent file format
1367
+ whose markup, or absence of markup, has been arranged to thwart or discourage
1368
+ subsequent modification by readers is not Transparent. An image format is not
1369
+ Transparent if used for any substantial amount of text. A copy that is not
1370
+ "Transparent" is called "Opaque".
1371
+
1372
+ Examples of suitable formats for Transparent copies include plain ASCII without
1373
+ markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly
1374
+ available DTD, and standard-conforming simple HTML, PostScript or PDF designed
1375
+ for human modification. Examples of transparent image formats include PNG, XCF
1376
+ and JPG. Opaque formats include proprietary formats that can be read and edited
1377
+ only by proprietary word processors, SGML or XML for which the DTD and/or
1378
+ processing tools are not generally available, and the machine-generated HTML,
1379
+ PostScript or PDF produced by some word processors for output purposes only.
1380
+
1381
+ The "Title Page" means, for a printed book, the title page itself, plus such
1382
+ following pages as are needed to hold, legibly, the material this License
1383
+ requires to appear in the title page. For works in formats which do not have
1384
+ any title page as such, "Title Page" means the text near the most prominent
1385
+ appearance of the work's title, preceding the beginning of the body of the
1386
+ text.
1387
+
1388
+ A section "Entitled XYZ" means a named subunit of the Document whose title
1389
+ either is precisely XYZ or contains XYZ in parentheses following text that
1390
+ translates XYZ in another language. (Here XYZ stands for a specific section
1391
+ name mentioned below, such as "Acknowledgements", "Dedications",
1392
+ "Endorsements", or "History".) To "Preserve the Title" of such a section when
1393
+ you modify the Document means that it remains a section "Entitled XYZ"
1394
+ according to this definition.
1395
+
1396
+ The Document may include Warranty Disclaimers next to the notice which states
1397
+ that this License applies to the Document. These Warranty Disclaimers are
1398
+ considered to be included by reference in this License, but only as regards
1399
+ disclaiming warranties: any other implication that these Warranty Disclaimers
1400
+ may have is void and has no effect on the meaning of this License.
1401
+
1402
+ VERBATIM COPYING
1403
+
1404
+ You may copy and distribute the Document in any medium, either commercially or
1405
+ noncommercially, provided that this License, the copyright notices, and the
1406
+ license notice saying this License applies to the Document are reproduced in
1407
+ all copies, and that you add no other conditions whatsoever to those of this
1408
+ License. You may not use technical measures to obstruct or control the reading
1409
+ or further copying of the copies you make or distribute. However, you may
1410
+ accept compensation in exchange for copies. If you distribute a large enough
1411
+ number of copies you must also follow the conditions in section 3.
1412
+
1413
+ You may also lend copies, under the same conditions stated above, and you may
1414
+ publicly display copies.
1415
+
1416
+ COPYING IN QUANTITY
1417
+
1418
+ If you publish printed copies (or copies in media that commonly have printed
1419
+ covers) of the Document, numbering more than 100, and the Document's license
1420
+ notice requires Cover Texts, you must enclose the copies in covers that carry,
1421
+ clearly and legibly, all these Cover Texts: Front-Cover Texts on the front
1422
+ cover, and Back-Cover Texts on the back cover. Both covers must also clearly
1423
+ and legibly identify you as the publisher of these copies. The front cover must
1424
+ present the full title with all words of the title equally prominent and
1425
+ visible. You may add other material on the covers in addition. Copying with
1426
+ changes limited to the covers, as long as they preserve the title of the
1427
+ Document and satisfy these conditions, can be treated as verbatim copying in
1428
+ other respects.
1429
+
1430
+ If the required texts for either cover are too voluminous to fit legibly, you
1431
+ should put the first ones listed (as many as fit reasonably) on the actual
1432
+ cover, and continue the rest onto adjacent pages.
1433
+
1434
+ If you publish or distribute Opaque copies of the Document numbering more than
1435
+ 100, you must either include a machine-readable Transparent copy along with
1436
+ each Opaque copy, or state in or with each Opaque copy a computer-network
1437
+ location from which the general network-using public has access to download
1438
+ using public-standard network protocols a complete Transparent copy of the
1439
+ Document, free of added material. If you use the latter option, you must take
1440
+ reasonably prudent steps, when you begin distribution of Opaque copies in
1441
+ quantity, to ensure that this Transparent copy will remain thus accessible at
1442
+ the stated location until at least one year after the last time you distribute
1443
+ an Opaque copy (directly or through your agents or retailers) of that edition
1444
+ to the public.
1445
+
1446
+ It is requested, but not required, that you contact the authors of the Document
1447
+ well before redistributing any large number of copies, to give them a chance to
1448
+ provide you with an updated version of the Document.
1449
+
1450
+ MODIFICATIONS
1451
+
1452
+ You may copy and distribute a Modified Version of the Document under the
1453
+ conditions of sections 2 and 3 above, provided that you release the Modified
1454
+ Version under precisely this License, with the Modified Version filling the
1455
+ role of the Document, thus licensing distribution and modification of the
1456
+ Modified Version to whoever possesses a copy of it. In addition, you must do
1457
+ these things in the Modified Version:
1458
+
1459
+ GNU FDL Modification Conditions
1460
+
1461
+ A. Use in the Title Page (and on the covers, if any) a title distinct from
1462
+ that of the Document, and from those of previous versions (which should, if
1463
+ there were any, be listed in the History section of the Document). You may
1464
+ use the same title as a previous version if the original publisher of that
1465
+ version gives permission.
1466
+ B. List on the Title Page, as authors, one or more persons or entities
1467
+ responsible for authorship of the modifications in the Modified Version,
1468
+ together with at least five of the principal authors of the Document (all
1469
+ of its principal authors, if it has fewer than five), unless they release
1470
+ you from this requirement.
1471
+ C. State on the Title page the name of the publisher of the Modified Version,
1472
+ as the publisher.
1473
+ D. Preserve all the copyright notices of the Document.
1474
+ E. Add an appropriate copyright notice for your modifications adjacent to the
1475
+ other copyright notices.
1476
+ F. Include, immediately after the copyright notices, a license notice giving
1477
+ the public permission to use the Modified Version under the terms of this
1478
+ License, in the form shown in the Addendum below.
1479
+ G. Preserve in that license notice the full lists of Invariant Sections and
1480
+ required Cover Texts given in the Document's license notice.
1481
+ H. Include an unaltered copy of this License.
1482
+ I. Preserve the section Entitled "History", Preserve its Title, and add to it
1483
+ an item stating at least the title, year, new authors, and publisher of the
1484
+ Modified Version as given on the Title Page. If there is no section
1485
+ Entitled "History" in the Document, create one stating the title, year,
1486
+ authors, and publisher of the Document as given on its Title Page, then add
1487
+ an item describing the Modified Version as stated in the previous sentence.
1488
+ J. Preserve the network location, if any, given in the Document for public
1489
+ access to a Transparent copy of the Document, and likewise the network
1490
+ locations given in the Document for previous versions it was based on.
1491
+ These may be placed in the "History" section. You may omit a network
1492
+ location for a work that was published at least four years before the
1493
+ Document itself, or if the original publisher of the version it refers to
1494
+ gives permission.
1495
+ K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the
1496
+ Title of the section, and preserve in the section all the substance and
1497
+ tone of each of the contributor acknowledgements and/or dedications given
1498
+ therein.
1499
+ L. Preserve all the Invariant Sections of the Document, unaltered in their
1500
+ text and in their titles. Section numbers or the equivalent are not
1501
+ considered part of the section titles.
1502
+ M. Delete any section Entitled "Endorsements". Such a section may not be
1503
+ included in the Modified Version.
1504
+ N. Do not retitle any existing section to be Entitled "Endorsements" or to
1505
+ conflict in title with any Invariant Section.
1506
+ O. Preserve any Warranty Disclaimers.
1507
+
1508
+ If the Modified Version includes new front-matter sections or appendices that
1509
+ qualify as Secondary Sections and contain no material copied from the Document,
1510
+ you may at your option designate some or all of these sections as invariant. To
1511
+ do this, add their titles to the list of Invariant Sections in the Modified
1512
+ Version's license notice. These titles must be distinct from any other section
1513
+ titles.
1514
+
1515
+ You may add a section Entitled "Endorsements", provided it contains nothing but
1516
+ endorsements of your Modified Version by various parties--for example,
1517
+ statements of peer review or that the text has been approved by an organization
1518
+ as the authoritative definition of a standard.
1519
+
1520
+ You may add a passage of up to five words as a Front-Cover Text, and a passage
1521
+ of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts
1522
+ in the Modified Version. Only one passage of Front-Cover Text and one of
1523
+ Back-Cover Text may be added by (or through arrangements made by) any one
1524
+ entity. If the Document already includes a cover text for the same cover,
1525
+ previously added by you or by arrangement made by the same entity you are
1526
+ acting on behalf of, you may not add another; but you may replace the old one,
1527
+ on explicit permission from the previous publisher that added the old one.
1528
+
1529
+ The author(s) and publisher(s) of the Document do not by this License give
1530
+ permission to use their names for publicity for or to assert or imply
1531
+ endorsement of any Modified Version.
1532
+
1533
+ COMBINING DOCUMENTS
1534
+
1535
+ You may combine the Document with other documents released under this License,
1536
+ under the terms defined in section 4 above for modified versions, provided that
1537
+ you include in the combination all of the Invariant Sections of all of the
1538
+ original documents, unmodified, and list them all as Invariant Sections of your
1539
+ combined work in its license notice, and that you preserve all their Warranty
1540
+ Disclaimers.
1541
+
1542
+ The combined work need only contain one copy of this License, and multiple
1543
+ identical Invariant Sections may be replaced with a single copy. If there are
1544
+ multiple Invariant Sections with the same name but different contents, make the
1545
+ title of each such section unique by adding at the end of it, in parentheses,
1546
+ the name of the original author or publisher of that section if known, or else
1547
+ a unique number. Make the same adjustment to the section titles in the list of
1548
+ Invariant Sections in the license notice of the combined work.
1549
+
1550
+ In the combination, you must combine any sections Entitled "History" in the
1551
+ various original documents, forming one section Entitled "History"; likewise
1552
+ combine any sections Entitled "Acknowledgements", and any sections Entitled
1553
+ "Dedications". You must delete all sections Entitled "Endorsements".
1554
+
1555
+ COLLECTIONS OF DOCUMENTS
1556
+
1557
+ You may make a collection consisting of the Document and other documents
1558
+ released under this License, and replace the individual copies of this License
1559
+ in the various documents with a single copy that is included in the collection,
1560
+ provided that you follow the rules of this License for verbatim copying of each
1561
+ of the documents in all other respects.
1562
+
1563
+ You may extract a single document from such a collection, and distribute it
1564
+ individually under this License, provided you insert a copy of this License
1565
+ into the extracted document, and follow this License in all other respects
1566
+ regarding verbatim copying of that document.
1567
+
1568
+ AGGREGATION WITH INDEPENDENT WORKS
1569
+
1570
+ A compilation of the Document or its derivatives with other separate and
1571
+ independent documents or works, in or on a volume of a storage or distribution
1572
+ medium, is called an "aggregate" if the copyright resulting from the
1573
+ compilation is not used to limit the legal rights of the compilation's users
1574
+ beyond what the individual works permit. When the Document is included in an
1575
+ aggregate, this License does not apply to the other works in the aggregate
1576
+ which are not themselves derivative works of the Document.
1577
+
1578
+ If the Cover Text requirement of section 3 is applicable to these copies of the
1579
+ Document, then if the Document is less than one half of the entire aggregate,
1580
+ the Document's Cover Texts may be placed on covers that bracket the Document
1581
+ within the aggregate, or the electronic equivalent of covers if the Document is
1582
+ in electronic form. Otherwise they must appear on printed covers that bracket
1583
+ the whole aggregate.
1584
+
1585
+ TRANSLATION
1586
+
1587
+ Translation is considered a kind of modification, so you may distribute
1588
+ translations of the Document under the terms of section 4. Replacing Invariant
1589
+ Sections with translations requires special permission from their copyright
1590
+ holders, but you may include translations of some or all Invariant Sections in
1591
+ addition to the original versions of these Invariant Sections. You may include
1592
+ a translation of this License, and all the license notices in the Document, and
1593
+ any Warranty Disclaimers, provided that you also include the original English
1594
+ version of this License and the original versions of those notices and
1595
+ disclaimers. In case of a disagreement between the translation and the original
1596
+ version of this License or a notice or disclaimer, the original version will
1597
+ prevail.
1598
+
1599
+ If a section in the Document is Entitled "Acknowledgements", "Dedications", or
1600
+ "History", the requirement (section 4) to Preserve its Title (section 1) will
1601
+ typically require changing the actual title.
1602
+
1603
+ TERMINATION
1604
+
1605
+ You may not copy, modify, sublicense, or distribute the Document except as
1606
+ expressly provided for under this License. Any other attempt to copy, modify,
1607
+ sublicense or distribute the Document is void, and will automatically terminate
1608
+ your rights under this License. However, parties who have received copies, or
1609
+ rights, from you under this License will not have their licenses terminated so
1610
+ long as such parties remain in full compliance.
1611
+
1612
+ FUTURE REVISIONS OF THIS LICENSE
1613
+
1614
+ The Free Software Foundation may publish new, revised versions of the GNU Free
1615
+ Documentation License from time to time. Such new versions will be similar in
1616
+ spirit to the present version, but may differ in detail to address new problems
1617
+ or concerns. See http://www.gnu.org/copyleft/.
1618
+
1619
+ Each version of the License is given a distinguishing version number. If the
1620
+ Document specifies that a particular numbered version of this License "or any
1621
+ later version" applies to it, you have the option of following the terms and
1622
+ conditions either of that specified version or of any later version that has
1623
+ been published (not as a draft) by the Free Software Foundation. If the
1624
+ Document does not specify a version number of this License, you may choose any
1625
+ version ever published (not as a draft) by the Free Software Foundation.
1626
+
1627
+ ADDENDUM: How to use this License for your documents
1628
+
1629
+ To use this License in a document you have written, include a copy of the
1630
+ License in the document and put the following copyright and license notices
1631
+ just after the title page:
1632
+
1633
+ Sample Invariant Sections list
1634
+
1635
+ Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and
1636
+ /or modify this document under the terms of the GNU Free Documentation
1637
+ License, Version 1.2 or any later version published by the Free Software
1638
+ Foundation; with no Invariant Sections, no Front-Cover Texts, and no
1639
+ Back-Cover Texts. A copy of the license is included in the section entitled
1640
+ "GNU Free Documentation License".
1641
+
1642
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace
1643
+ the "with...Texts." line with this:
1644
+
1645
+ Sample Invariant Sections list
1646
+
1647
+ with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover
1648
+ Texts being LIST, and with the Back-Cover Texts being LIST.
1649
+
1650
+ If you have Invariant Sections without Cover Texts, or some other combination
1651
+ of the three, merge those two alternatives to suit the situation.
1652
+
1653
+ If your document contains nontrivial examples of program code, we recommend
1654
+ releasing these examples in parallel under your choice of free software
1655
+ license, such as the GNU General Public License, to permit their use in free
1656
+ software.
1657
+