ruby-vpi 8.2.0 → 9.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (252) hide show
  1. data/HEADER +0 -19
  2. data/HISTORY +40 -0
  3. data/README +20 -2
  4. data/Rakefile +38 -42
  5. data/bin/generate_test.rb +50 -35
  6. data/bin/generate_test_tpl/bench.rb +3 -3
  7. data/bin/generate_test_tpl/bench.v +1 -1
  8. data/bin/generate_test_tpl/runner.rake +3 -2
  9. data/bin/generate_test_tpl/spec.rb +2 -2
  10. data/doc/background.organization.html +1 -1
  11. data/doc/glossary.html +1 -1
  12. data/doc/index.html +2 -2
  13. data/doc/manual.txt +163 -83
  14. data/doc/problems.html +1 -1
  15. data/doc/problems.ruby.html +1 -1
  16. data/doc/src/manual.xml +132 -49
  17. data/doc/usage.examples.html +1 -1
  18. data/doc/usage.html +1 -1
  19. data/doc/usage.installation.html +2 -2
  20. data/doc/usage.recommendations.html +3 -0
  21. data/doc/usage.requirements.html +1 -1
  22. data/doc/usage.tutorial.html +46 -42
  23. data/ext/extconf.rb +5 -2
  24. data/ext/relay.c +138 -0
  25. data/ext/{relay.hin → relay.h} +7 -7
  26. data/ext/{swig.cin → swig.c} +5 -7
  27. data/ext/{swig.hin → swig.h} +4 -4
  28. data/ext/verilog.h +1 -2
  29. data/ext/vlog.c +86 -0
  30. data/ext/{vlog.hin → vlog.h} +9 -12
  31. data/header.html +0 -31
  32. data/header.part.html +0 -31
  33. data/history.html +72 -31
  34. data/history.part.html +72 -0
  35. data/lib/ruby-vpi.rb +16 -0
  36. data/lib/ruby-vpi/runner.rb +34 -16
  37. data/memo.html +0 -31
  38. data/readme.html +33 -33
  39. data/readme.part.html +34 -3
  40. data/ref/c/annotated.html +1 -1
  41. data/ref/c/common_8h.html +1 -1
  42. data/ref/c/files.html +7 -8
  43. data/ref/c/functions.html +2 -2
  44. data/ref/c/functions_vars.html +2 -2
  45. data/ref/c/globals.html +1 -1
  46. data/ref/c/globals_0x63.html +1 -1
  47. data/ref/c/globals_0x65.html +1 -1
  48. data/ref/c/globals_0x66.html +1 -1
  49. data/ref/c/globals_0x70.html +1 -1
  50. data/ref/c/globals_0x72.html +9 -9
  51. data/ref/c/globals_0x73.html +3 -3
  52. data/ref/c/globals_0x74.html +1 -1
  53. data/ref/c/globals_0x76.html +5 -5
  54. data/ref/c/globals_0x78.html +1 -1
  55. data/ref/c/globals_defs.html +1 -1
  56. data/ref/c/globals_defs_0x65.html +1 -1
  57. data/ref/c/globals_defs_0x70.html +1 -1
  58. data/ref/c/globals_defs_0x76.html +2 -2
  59. data/ref/c/globals_defs_0x78.html +1 -1
  60. data/ref/c/globals_enum.html +1 -1
  61. data/ref/c/globals_eval.html +1 -1
  62. data/ref/c/globals_func.html +11 -11
  63. data/ref/c/globals_type.html +1 -1
  64. data/ref/c/globals_vars.html +5 -5
  65. data/ref/c/index.html +1 -1
  66. data/ref/c/relay_8c.html +214 -0
  67. data/ref/c/{relay_8hin.html → relay_8h.html} +23 -23
  68. data/ref/c/structrelay____RubyOptions____def.html +6 -6
  69. data/ref/c/structt__cb__data.html +1 -1
  70. data/ref/c/structt__vpi__delay.html +1 -1
  71. data/ref/c/structt__vpi__error__info.html +1 -1
  72. data/ref/c/structt__vpi__strengthval.html +1 -1
  73. data/ref/c/structt__vpi__systf__data.html +1 -1
  74. data/ref/c/structt__vpi__time.html +1 -1
  75. data/ref/c/structt__vpi__value.html +1 -1
  76. data/ref/c/structt__vpi__vecval.html +1 -1
  77. data/ref/c/structt__vpi__vlog__info.html +1 -1
  78. data/ref/c/swig_8c.html +80 -0
  79. data/ref/c/{swig_8hin.html → swig_8h.html} +13 -13
  80. data/ref/c/verilog_8h.html +3 -3
  81. data/ref/c/{vlog_8cin.html → vlog_8c.html} +30 -21
  82. data/ref/c/{vlog_8hin.html → vlog_8h.html} +12 -12
  83. data/ref/c/vpi__user_8h.html +1 -1
  84. data/ref/ruby/classes/ERB.html +5 -5
  85. data/ref/ruby/classes/ERB.src/{M000033.html → M000034.html} +0 -0
  86. data/ref/ruby/classes/FileUtils.html +10 -10
  87. data/ref/ruby/classes/FileUtils.src/M000089.html +5 -5
  88. data/ref/ruby/classes/FileUtils.src/M000090.html +18 -0
  89. data/ref/ruby/classes/Integer.html +68 -68
  90. data/ref/ruby/classes/Integer.src/M000012.html +12 -5
  91. data/ref/ruby/classes/Integer.src/M000013.html +5 -5
  92. data/ref/ruby/classes/Integer.src/M000014.html +5 -5
  93. data/ref/ruby/classes/Integer.src/M000015.html +5 -5
  94. data/ref/ruby/classes/Integer.src/M000016.html +5 -5
  95. data/ref/ruby/classes/Integer.src/M000017.html +18 -0
  96. data/ref/ruby/classes/Integer.src/M000020.html +9 -9
  97. data/ref/ruby/classes/Integer.src/M000021.html +9 -12
  98. data/ref/ruby/classes/Integer.src/M000022.html +12 -18
  99. data/ref/ruby/classes/Integer.src/M000023.html +18 -12
  100. data/ref/ruby/classes/Integer.src/M000024.html +12 -17
  101. data/ref/ruby/classes/Integer.src/M000025.html +30 -0
  102. data/ref/ruby/classes/OutputInfo.html +6 -6
  103. data/ref/ruby/classes/OutputInfo.src/{M000029.html → M000030.html} +37 -37
  104. data/ref/ruby/classes/RDoc.html +5 -5
  105. data/ref/ruby/classes/RDoc.src/{M000092.html → M000093.html} +0 -0
  106. data/ref/ruby/classes/RubyVpi.html +16 -10
  107. data/ref/ruby/classes/RubyVpi.src/M000091.html +37 -7
  108. data/ref/ruby/classes/RubyVpi.src/M000092.html +20 -0
  109. data/ref/ruby/classes/RubyVpi/Config.html +148 -0
  110. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.html +45 -45
  111. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000081.html +5 -5
  112. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000082.html +5 -9
  113. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000083.html +9 -31
  114. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000084.html +31 -69
  115. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000085.html +69 -114
  116. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000086.html +114 -13
  117. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000087.html +13 -5
  118. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000088.html +18 -0
  119. data/ref/ruby/classes/String.html +10 -10
  120. data/ref/ruby/classes/String.src/M000032.html +28 -5
  121. data/ref/ruby/classes/String.src/M000033.html +18 -0
  122. data/ref/ruby/classes/Table.html +20 -20
  123. data/ref/ruby/classes/Table.src/M000026.html +25 -5
  124. data/ref/ruby/classes/Table.src/M000027.html +5 -5
  125. data/ref/ruby/classes/Table.src/M000028.html +5 -5
  126. data/ref/ruby/classes/Table.src/M000029.html +18 -0
  127. data/ref/ruby/classes/Template.html +5 -5
  128. data/ref/ruby/classes/Template.src/{M000030.html → M000031.html} +4 -4
  129. data/ref/ruby/classes/VerilogParser.html +5 -5
  130. data/ref/ruby/classes/VerilogParser.src/{M000004.html → M000005.html} +0 -0
  131. data/ref/ruby/classes/VerilogParser/Module.html +5 -5
  132. data/ref/ruby/classes/VerilogParser/Module.src/{M000005.html → M000006.html} +0 -0
  133. data/ref/ruby/classes/VerilogParser/Module/Parameter.html +5 -5
  134. data/ref/ruby/classes/VerilogParser/Module/Parameter.src/{M000010.html → M000011.html} +0 -0
  135. data/ref/ruby/classes/VerilogParser/Module/Port.html +20 -20
  136. data/ref/ruby/classes/VerilogParser/Module/Port.src/M000007.html +8 -5
  137. data/ref/ruby/classes/VerilogParser/Module/Port.src/M000008.html +5 -5
  138. data/ref/ruby/classes/VerilogParser/Module/Port.src/M000009.html +5 -5
  139. data/ref/ruby/classes/VerilogParser/Module/Port.src/M000010.html +18 -0
  140. data/ref/ruby/classes/XX/Document.html +45 -45
  141. data/ref/ruby/classes/XX/Document.src/M000072.html +9 -7
  142. data/ref/ruby/classes/XX/Document.src/M000073.html +7 -7
  143. data/ref/ruby/classes/XX/Document.src/M000074.html +7 -7
  144. data/ref/ruby/classes/XX/Document.src/M000075.html +7 -9
  145. data/ref/ruby/classes/XX/Document.src/M000076.html +9 -8
  146. data/ref/ruby/classes/XX/Document.src/M000077.html +8 -8
  147. data/ref/ruby/classes/XX/Document.src/M000078.html +8 -21
  148. data/ref/ruby/classes/XX/Document.src/M000079.html +21 -85
  149. data/ref/ruby/classes/XX/Document.src/M000080.html +98 -0
  150. data/ref/ruby/classes/XX/HTML4.html +5 -5
  151. data/ref/ruby/classes/XX/HTML4.src/{M000035.html → M000036.html} +0 -0
  152. data/ref/ruby/classes/XX/HTML4/Strict.html +5 -5
  153. data/ref/ruby/classes/XX/HTML4/Strict.src/{M000037.html → M000038.html} +0 -0
  154. data/ref/ruby/classes/XX/HTML4/Transitional.html +5 -5
  155. data/ref/ruby/classes/XX/HTML4/Transitional.src/{M000036.html → M000037.html} +0 -0
  156. data/ref/ruby/classes/XX/Markup.html +5 -5
  157. data/ref/ruby/classes/XX/Markup.src/{M000042.html → M000043.html} +0 -0
  158. data/ref/ruby/classes/XX/Markup/ClassMethods.html +40 -40
  159. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000044.html +9 -7
  160. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000045.html +7 -12
  161. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000046.html +12 -7
  162. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000047.html +7 -14
  163. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000048.html +14 -7
  164. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000049.html +7 -14
  165. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000050.html +14 -9
  166. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000051.html +22 -0
  167. data/ref/ruby/classes/XX/Markup/InstanceMethods.html +100 -100
  168. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000052.html +43 -20
  169. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000053.html +20 -18
  170. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000054.html +18 -35
  171. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000055.html +35 -7
  172. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000056.html +7 -18
  173. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000057.html +18 -19
  174. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000058.html +19 -19
  175. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000059.html +19 -15
  176. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000060.html +15 -10
  177. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000061.html +10 -13
  178. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000062.html +13 -7
  179. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000063.html +7 -7
  180. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000064.html +7 -7
  181. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000065.html +7 -7
  182. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000066.html +7 -7
  183. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000067.html +7 -8
  184. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000068.html +8 -7
  185. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000069.html +7 -7
  186. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000070.html +7 -7
  187. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000071.html +20 -0
  188. data/ref/ruby/classes/XX/XHTML.html +5 -5
  189. data/ref/ruby/classes/XX/XHTML.src/{M000038.html → M000039.html} +0 -0
  190. data/ref/ruby/classes/XX/XHTML/Strict.html +5 -5
  191. data/ref/ruby/classes/XX/XHTML/Strict.src/{M000040.html → M000041.html} +0 -0
  192. data/ref/ruby/classes/XX/XHTML/Transitional.html +5 -5
  193. data/ref/ruby/classes/XX/XHTML/Transitional.src/{M000039.html → M000040.html} +0 -0
  194. data/ref/ruby/classes/XX/XML.html +5 -5
  195. data/ref/ruby/classes/XX/XML.src/{M000034.html → M000035.html} +0 -0
  196. data/ref/ruby/classes/XX/XMLish.html +5 -5
  197. data/ref/ruby/classes/XX/XMLish.src/{M000041.html → M000042.html} +0 -0
  198. data/ref/ruby/created.rid +1 -1
  199. data/ref/ruby/files/bin/generate_test_rb.html +49 -9
  200. data/ref/ruby/files/bin/generate_test_rb.src/M000001.html +5 -16
  201. data/ref/ruby/files/bin/generate_test_rb.src/M000002.html +39 -0
  202. data/ref/ruby/files/bin/header_to_ruby_rb.html +1 -1
  203. data/ref/ruby/files/lib/ruby-vpi/erb_rb.html +1 -1
  204. data/ref/ruby/files/lib/ruby-vpi/integer_rb.html +1 -1
  205. data/ref/ruby/files/lib/ruby-vpi/rake_rb.html +1 -1
  206. data/ref/ruby/files/lib/ruby-vpi/rcov_rb.html +1 -1
  207. data/ref/ruby/files/lib/ruby-vpi/rdoc_rb.html +1 -1
  208. data/ref/ruby/files/lib/ruby-vpi/rspec_rb.html +1 -1
  209. data/ref/ruby/files/lib/ruby-vpi/runner_proxy_rb.html +1 -1
  210. data/ref/ruby/files/lib/ruby-vpi/runner_rb.html +22 -21
  211. data/ref/ruby/files/lib/ruby-vpi/runner_rb.src/M000003.html +11 -13
  212. data/ref/ruby/files/lib/ruby-vpi/runner_rb.src/M000004.html +26 -0
  213. data/ref/ruby/files/lib/ruby-vpi/verilog_parser_rb.html +1 -1
  214. data/ref/ruby/files/lib/ruby-vpi/vpi_rb.html +1 -1
  215. data/ref/ruby/files/lib/ruby-vpi/xx_rb.html +1 -1
  216. data/ref/ruby/files/lib/ruby-vpi_rb.html +1 -1
  217. data/ref/ruby/fr_class_index.html +1 -0
  218. data/ref/ruby/fr_method_index.html +93 -92
  219. data/samp/counter/{counter_rspecTest_bench.rb → counter_rspec_bench.rb} +2 -2
  220. data/samp/counter/{counter_rspecTest_bench.v → counter_rspec_bench.v} +3 -3
  221. data/samp/counter/{counter_unitTest_design.rb → counter_rspec_design.rb} +3 -3
  222. data/samp/counter/{counter_rspecTest_proto.rb → counter_rspec_proto.rb} +0 -0
  223. data/samp/counter/{counter_unitTest_runner.rake → counter_rspec_runner.rake} +5 -4
  224. data/samp/counter/{counter_rspecTest_spec.rb → counter_rspec_spec.rb} +0 -0
  225. data/samp/counter/{counter_unitTest_bench.rb → counter_xunit_bench.rb} +2 -2
  226. data/samp/counter/{counter_unitTest_bench.v → counter_xunit_bench.v} +3 -3
  227. data/samp/counter/{counter_rspecTest_design.rb → counter_xunit_design.rb} +3 -3
  228. data/samp/counter/{counter_unitTest_proto.rb → counter_xunit_proto.rb} +0 -0
  229. data/samp/counter/{counter_rspecTest_runner.rake → counter_xunit_runner.rake} +5 -4
  230. data/samp/counter/{counter_unitTest_spec.rb → counter_xunit_spec.rb} +0 -0
  231. data/samp/pipelined_alu/hw5_unit_test_runner.rake +3 -2
  232. metadata +177 -177
  233. data/ext/README +0 -124
  234. data/ext/relay.cin +0 -146
  235. data/ext/ruby-vpi.c +0 -36
  236. data/ext/vlog.cin +0 -92
  237. data/lib/ruby-vpi/synopsys_vcs.tab +0 -2
  238. data/ref/c/relay_8cin.html +0 -204
  239. data/ref/c/ruby-vpi_8c.html +0 -34
  240. data/ref/c/swig_8cin.html +0 -75
  241. data/ref/ruby/classes/FileUtils.src/M000088.html +0 -18
  242. data/ref/ruby/classes/Integer.src/M000011.html +0 -25
  243. data/ref/ruby/classes/Integer.src/M000019.html +0 -22
  244. data/ref/ruby/classes/RubyVpi.src/M000090.html +0 -50
  245. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000080.html +0 -18
  246. data/ref/ruby/classes/String.src/M000031.html +0 -41
  247. data/ref/ruby/classes/Table.src/M000025.html +0 -38
  248. data/ref/ruby/classes/VerilogParser/Module/Port.src/M000006.html +0 -21
  249. data/ref/ruby/classes/XX/Document.src/M000071.html +0 -22
  250. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000043.html +0 -22
  251. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000051.html +0 -56
  252. data/ref/ruby/files/lib/ruby-vpi/runner_rb.src/M000002.html +0 -20
data/HEADER CHANGED
@@ -2,25 +2,6 @@
2
2
  <link rel="stylesheet" type="text/css" href="style.css" />
3
3
  </head>
4
4
 
5
- h1{text-align: center}. Welcome to Ruby-VPI
6
-
7
- Ruby-VPI is a "Ruby interface":http://ruby-lang.org to "Verilog VPI":http://ieeexplore.ieee.org/xpl/standardstoc.jsp?isnumber=33945. It lets you create complex Verilog test benches easily and wholly in Ruby.
8
-
9
- h2. Features
10
-
11
- * Prototype and verify designs _quickly_ using "BDD(behavior-driven development)":http://behaviour-driven.org/, "TDD(test-driven development)":http://www.agiledata.org/essays/tdd.html, and more.
12
- * Reuse the _same_ specification to verify both prototype and design.
13
- * Specifications are executable _and_ human-readable. (See this <a href="./doc/usage.tutorial.html#fig..counter_rspecTest_spec.rb">example specification</a> and its <a href="./doc/usage.tutorial.html#fig..test-proto.rspec">boss-friendly output</a>.)
14
-
15
-
16
- * Utilize Ruby's power and elegance. ("Why choose Ruby?":http://www.ruby-doc.org/whyruby)
17
- ** Built-in support for unlimited length integers, regular expressions, networking, multi-threading, system calls, _ad infinium_!
18
- ** Easy to use; doesn't get in your way.
19
- ** Makes programming _fun_ again!
20
-
21
- * Study, modify, or distribute this is free software, released under the "GNU General Public License":http://www.gnu.org/copyleft/gpl.html, as you see fit.
22
-
23
-
24
5
  <div class="variablelist">
25
6
  <dl>
26
7
 
data/HISTORY CHANGED
@@ -12,12 +12,52 @@ We _strictly_ follow the RubyGems project's "rational versioning policy":http://
12
12
  fn1. C. Gross, "Explaining Open Source Version Numbers", [Online document], 2005 Nov 28, [cited 2006 Aug 27], Available HTTP: "http://ablog.apress.com/?p=738":http://ablog.apress.com/?p=738
13
13
 
14
14
 
15
+ h1. Version 9.0.0 (2006-10-28)
16
+
17
+ h2. Summary
18
+
19
+ This release improves the automated test generator and adds new content to the user manual.
20
+
21
+ h2. Acknowledgments
22
+
23
+ Thanks to Matt Fischler for helping test and debug the installation of Ruby-VPI on Windows.
24
+
25
+ h2. Notice
26
+
27
+ * The command-line options for @generate_test.rb@ have changed. Run the command @generate_test.rb --help@ for details.
28
+
29
+ h2. Details
30
+
31
+ * Test runners now attempt to resolve paths in @SIMULATOR_SOURCES@ by searching for them within the directories specified in @SIMULATOR_INCLUDES@.
32
+
33
+ * Synopsys VCS is now used in a better way (via the @-load@ option).
34
+ ** The old PLI table file (@synopsys_vcs.tab@) has been removed.
35
+ ** The C extension has been revised accordingly.
36
+
37
+ ** The C extension now compiles without errors in Cygwin.
38
+
39
+ * The automated test generator now:
40
+ ** Only creates output files when necessary.
41
+ ** Updates existing output files using "text merging tools":./doc/usage.recommendations.html if possible. (Refer to @MERGER@ in the help information of @generate_test.rb@.)
42
+ ** Emits progress information similar to Ruby on Rails.
43
+
44
+ * The user manual now:
45
+ ** Includes instructions for installing on Windows (via Cygwin).
46
+ ** Has a recommended software section, with links to text merging tools.
47
+ ** Uses the term "xUnit":http://en.wikipedia.org/wiki/XUnit instead of "unit test".
48
+ ** Correctly spells "rSpec".
49
+
50
+
15
51
  h1. Version 8.2.0 (2006-10-24)
16
52
 
17
53
  h2. Summary
18
54
 
19
55
  This release simplifies configuration of generated tests.
20
56
 
57
+ h2. Acknowledgments
58
+
59
+ Thanks to "students in CMPE-126":http://www.soe.ucsc.edu/classes/cmpe126/Fall06/ for their constructive criticism.
60
+
21
61
  h2. Notice
22
62
 
23
63
  * Generated runners now have a @SIMULATOR_INCLUDES@ array, whose entries specify places where Verilog source files, needed by the Verilog design, reside.
data/README CHANGED
@@ -1,3 +1,21 @@
1
+ h1{text-align: center}. Welcome to Ruby-VPI
2
+
3
+ Ruby-VPI is a "Ruby interface":http://ruby-lang.org to "Verilog VPI":http://ieeexplore.ieee.org/xpl/standardstoc.jsp?isnumber=33945. It lets you create complex Verilog test benches easily and wholly in Ruby.
4
+
5
+ h2. Features
6
+
7
+ * Prototype and verify designs _quickly_ using "BDD(behavior-driven development)":http://behaviour-driven.org/, "TDD(test-driven development)":http://www.agiledata.org/essays/tdd.html, and more.
8
+ * Reuse the _same_ specification to verify both prototype and design.
9
+ * Specifications are executable _and_ human-readable. (See this <a href="./doc/usage.tutorial.html#fig..counter_rspecTest_spec.rb">example specification</a> and its <a href="./doc/usage.tutorial.html#fig..test-proto.rspec">boss-friendly output</a>.)
10
+
11
+ * Utilize Ruby's power and elegance. ("Why choose Ruby?":http://www.ruby-doc.org/whyruby)
12
+ ** Built-in support for unlimited length integers, regular expressions, networking, multi-threading, system calls, _ad infinium_!
13
+ ** Easy to use; doesn't get in your way.
14
+ ** Makes programming _fun_ again!
15
+
16
+ * Study, modify, or distribute this free software in accordance with the "GNU General Public License":http://www.gnu.org/copyleft/gpl.html.
17
+
18
+
1
19
  h1. Getting started
2
20
 
3
21
  * See the "user manual":./doc to begin using Ruby-VPI.
@@ -9,9 +27,9 @@ h1. Getting started
9
27
  * Visit the "project website":http://ruby-vpi.rubyforge.org for additional resources.
10
28
 
11
29
 
12
- h1. Compiling from source
30
+ h1. Building release packages
13
31
 
14
- In addition to the "normal requirements":./doc/usage.requirements.html, you need the following software to compile from source:
32
+ In addition to the "normal requirements":./doc/usage.requirements.html, you need the following software to build release packages:
15
33
 
16
34
  * "DocBook-XML":http://www.docbook.org/
17
35
  ** xsltproc
data/Rakefile CHANGED
@@ -1,3 +1,6 @@
1
+ # = Environment variables
2
+ # CFLAGS:: Arguments to the compiler.
3
+ # LDFLAGS:: Arguments to the linker.
1
4
  =begin
2
5
  Copyright 2006 Suraj N. Kurapati
3
6
 
@@ -18,6 +21,8 @@
18
21
  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19
22
  =end
20
23
 
24
+ CFLAGS, LDFLAGS = ENV['CFLAGS'], ENV['LDFLAGS']
25
+
21
26
  require 'rake/clean'
22
27
  require 'rake/rdoctask'
23
28
  require 'rake/gempackagetask'
@@ -25,15 +30,14 @@ require 'rake/gempackagetask'
25
30
  require 'tempfile'
26
31
  require 'rbconfig'
27
32
 
28
- $:.unshift File.join(File.dirname(__FILE__), 'lib')
33
+ PROJECT_LIBS = File.join(File.dirname(__FILE__), 'lib')
34
+
35
+ $:.unshift PROJECT_LIBS
36
+ require 'ruby-vpi'
29
37
  require 'ruby-vpi/rake'
30
38
 
31
39
 
32
- PROJECT_ID = 'ruby-vpi'
33
- PROJECT_NAME = 'Ruby-VPI'
34
- PROJECT_URL = "http://#{PROJECT_ID}.rubyforge.org"
35
- PROJECT_SUMMARY = "Ruby interface to Verilog VPI."
36
- PROJECT_DETAIL = "#{PROJECT_NAME} is a #{PROJECT_SUMMARY}. It lets you create complex Verilog test benches easily and wholly in Ruby."
40
+ include RubyVpi::Config
37
41
  PROJECT_SSH_URL = "snk@rubyforge.org:/var/www/gforge-projects/#{PROJECT_ID}"
38
42
 
39
43
  File.read('HISTORY') =~ /Version\s+([\d\.]+)\s*\((.*?)\)/
@@ -56,13 +60,18 @@ end
56
60
 
57
61
  task :default => :build
58
62
 
59
- task :clobber do |t|
60
- files = FileList['**/Rakefile'].exclude('_darcs')
61
- files.shift # avoid infinite loop on _this_ file
63
+ [:clean, :clobber].each do |t|
64
+ task t do
65
+ files = FileList['**/Rakefile'].exclude('_darcs')
66
+ files.shift # avoid infinite loop on _this_ file
67
+
68
+ # allows propogation to lower levels when gem not installed
69
+ ENV['RUBYLIB'] = PROJECT_LIBS
62
70
 
63
- files.each do |f|
64
- cd File.dirname(f) do
65
- sh 'rake', t.name
71
+ files.each do |f|
72
+ cd File.dirname(f) do
73
+ sh 'rake', t.to_s
74
+ end
66
75
  end
67
76
  end
68
77
  end
@@ -74,46 +83,33 @@ end
74
83
  desc "Builds object files for all simulators."
75
84
  task :build
76
85
 
77
- DEFAULT_SHARED_OBJ = "#{PROJECT_ID}.so"
78
- DEFAULT_NORMAL_OBJ = "#{PROJECT_ID}.o"
79
-
80
86
  directory 'obj'
81
87
  CLOBBER.include 'obj'
82
88
 
83
- {
84
- :cver => ['-DPRAGMATIC_CVER', '-export-dynamic'],
85
- :ivl => ['-DICARUS_VERILOG'],
86
- :vcs => ['-DSYNOPSYS_VCS'],
87
- :vsim => ['-DMENTOR_MODELSIM'],
88
- }.each_pair do |target, (cflags, ldflags)|
89
89
 
90
- # object files that are needed to be built
91
- objFiles = [DEFAULT_NORMAL_OBJ, DEFAULT_SHARED_OBJ].inject({}) do |memo, src|
92
- dstName = src.sub(/#{File.extname src}$/, ".#{target}\\&")
93
- dst = File.expand_path(File.join('obj', dstName))
90
+ SIMULATORS.each do |sim|
91
+ taskName = "build_#{sim.id}"
94
92
 
95
- memo[src] = dst
96
- memo
97
- end
93
+ desc "Builds object files for #{sim.name} simulator."
94
+ task taskName => ['obj', 'ext'] do
95
+ src = "#{PROJECT_ID}.so"
96
+ dst = "#{PROJECT_ID}.#{sim.id}.so"
98
97
 
99
- # task to build the object files
100
- targetTask = "build_#{target}"
98
+ dst = File.expand_path(File.join('obj', dst))
101
99
 
102
- desc "Builds object files for #{target} simulator."
103
- task targetTask => ['obj', 'ext'] do |t|
104
- unless objFiles.values.reject {|f| File.exist? f}.empty?
105
- cd t.prerequisites[1] do
106
- ENV['CFLAGS'], ENV['LDFLAGS'] = cflags, ldflags
107
- sh %w(rake clean default)
100
+ unless File.exist? dst
101
+ cd 'ext' do
102
+ ENV['CFLAGS'] = "#{CFLAGS} #{sim.compiler_args}"
103
+ ENV['LDFLAGS'] = "#{LDFLAGS} #{sim.linker_args}"
108
104
 
109
- objFiles.each_pair do |src, dst|
110
- mv src, dst
111
- end
105
+ sh 'rake'
106
+ mv src, dst
107
+ sh 'rake clean'
112
108
  end
113
109
  end
114
110
  end
115
111
 
116
- task :build => targetTask
112
+ task :build => taskName
117
113
  end
118
114
 
119
115
 
@@ -192,7 +188,7 @@ task :dist_info => distDocs
192
188
 
193
189
  desc "Prepare for distribution."
194
190
  task :dist => ['ext', :doc, :dist_info] do |t|
195
- cd t.prerequisites[0] do
191
+ cd 'ext' do
196
192
  sh 'rake swig'
197
193
  end
198
194
  end
@@ -274,7 +270,7 @@ end
274
270
  desc "Ensure that examples work with $SIMULATOR"
275
271
  task :test => :build do
276
272
  # ensures that current sources are tested instead of the installed gem
277
- ENV['RUBYLIB'] = File.join(File.dirname(__FILE__), 'lib')
273
+ ENV['RUBYLIB'] = PROJECT_LIBS
278
274
 
279
275
  FileList['samp/*/'].each do |s|
280
276
  cd s do
data/bin/generate_test.rb CHANGED
@@ -1,8 +1,18 @@
1
1
  #!/usr/bin/ruby -w
2
2
  # Generates Ruby-VPI tests from Verilog 2001 module declarations.
3
- # * If no input files are specified, then the standard input stream is assumed to be the input.
3
+ # * The standard input stream is read if no input files are specified.
4
4
  # * The first input signal in a module's declaration is assumed to be the clocking signal.
5
- # * Existing output files will be backed-up before being over-written. A backed-up file has a tilde (~) appended to its name.
5
+ #
6
+ # = Progress indicators
7
+ # As this tool performs its duties, it notifies you of important information using the following indicators.
8
+ #
9
+ # create:: Output file does not exist. It will be created.
10
+ # skip:: Output file exists and is up to date.
11
+ # update:: Output file exists and is out of date. A backup copy will be made (with a ".old" suffix) before this output file is updated. Use a text merging tool or manually transfer any necessary information from the backup copy to the updated output file.
12
+ #
13
+ # = Environment variables
14
+ # MERGER:: A command for invoking a text merging tool with two arguments: old file, new file. The tool should save its output to the new file.
15
+
6
16
 
7
17
  =begin
8
18
  Copyright 2006 Suraj N. Kurapati
@@ -25,24 +35,39 @@
25
35
  =end
26
36
 
27
37
  require 'ruby-vpi/verilog_parser'
38
+ require 'fileutils'
39
+ require 'digest/md5'
28
40
 
29
41
 
30
- require 'fileutils'
42
+ # Notify the user about some action being performed.
43
+ def notify *args
44
+ printf "%8s %s\n", *args
45
+ end
31
46
 
32
- # Writes the given contents to the file at the given path. If the given path already exists, then a backup is created before proceeding.
47
+ # Writes the given contents to the file at the given path. If the given path already exists, then a backup is created before invoking the merging tool.
33
48
  def write_file aPath, aContent
34
- # create a backup
35
- if File.exist? aPath
36
- backupPath = aPath.dup
49
+ if File.exist? aPath
50
+ oldDigest = Digest::MD5.digest(File.read(aPath))
51
+ newDigest = Digest::MD5.digest(aContent)
37
52
 
38
- while File.exist? backupPath
39
- backupPath << '~'
40
- end
53
+ if oldDigest == newDigest
54
+ notify :skip, aPath
55
+ else
56
+ notify :update, aPath
41
57
 
42
- FileUtils.cp aPath, backupPath, :preserve => true
43
- end
58
+ old, new = "#{aPath}.old", aPath
44
59
 
45
- File.open(aPath, 'w') {|f| f << aContent}
60
+ FileUtils.cp aPath, old, :preserve => true
61
+ File.open(new, 'w') {|f| f << aContent}
62
+
63
+ if m = ENV['MERGER']
64
+ system "#{m} #{old.inspect} #{new.inspect}"
65
+ end
66
+ end
67
+ else
68
+ notify :create, aPath
69
+ File.open(aPath, 'w') {|f| f << aContent}
70
+ end
46
71
  end
47
72
 
48
73
 
@@ -65,7 +90,7 @@ class OutputInfo
65
90
  VERILOG_EXT = '.v'
66
91
  RUNNER_EXT = '.rake'
67
92
 
68
- SPEC_FORMATS = [:RSpec, :UnitTest, :Generic]
93
+ SPEC_FORMATS = [:rSpec, :xUnit, :generic]
69
94
 
70
95
  attr_reader :verilogBenchName, :verilogBenchPath, :rubyBenchName, :rubyBenchPath, :designName, :designClassName, :designPath, :specName, :specClassName, :specFormat, :specPath, :rubyVpiPath, :runnerName, :runnerPath, :protoName, :protoPath, :protoClassName
71
96
 
@@ -124,7 +149,7 @@ if File.basename($0) == File.basename(__FILE__)
124
149
  # parse command-line options
125
150
  require 'optparse'
126
151
 
127
- optSpecFmt = :Generic
152
+ optSpecFmt = :generic
128
153
  optTestName = 'test'
129
154
 
130
155
  opts = OptionParser.new
@@ -138,12 +163,12 @@ if File.basename($0) == File.basename(__FILE__)
138
163
  exit
139
164
  end
140
165
 
141
- opts.on '-u', '--unit', 'use Test::Unit specification format' do |val|
142
- optSpecFmt = :UnitTest if val
166
+ opts.on '-u', '--xunit', 'use xUnit specification format' do |val|
167
+ optSpecFmt = :xUnit if val
143
168
  end
144
169
 
145
- opts.on '-r', '--rspec', 'use RSpec specification format' do |val|
146
- optSpecFmt = :RSpec if val
170
+ opts.on '-s', '--rspec', 'use rSpec specification format' do |val|
171
+ optSpecFmt = :rSpec if val
147
172
  end
148
173
 
149
174
  opts.on '-n', '--name NAME', 'attach NAME indentifier to generated test' do |val|
@@ -152,36 +177,26 @@ if File.basename($0) == File.basename(__FILE__)
152
177
 
153
178
  opts.parse! ARGV
154
179
 
155
- puts "Using name #{optTestName.inspect} for generated test."
156
- puts "Using #{optSpecFmt} specification format."
180
+ notify :name, optTestName
181
+ notify :format, optSpecFmt
157
182
 
158
183
 
159
184
  v = VerilogParser.new(ARGF.read)
160
185
 
161
186
  v.modules.each do |m|
162
- puts '', "Parsed module: #{m.name}"
187
+ puts
188
+ notify :module, m.name
163
189
 
164
- o = OutputInfo.new(m.name, optSpecFmt, optTestName, File.dirname(File.dirname(__FILE__))).freeze
190
+ o = OutputInfo.new(m.name, optSpecFmt, optTestName, File.dirname(File.dirname(__FILE__)))
165
191
 
166
192
  # generate output
167
- aParseInfo, aModuleInfo, aOutputInfo = v, m, o
193
+ aParseInfo, aModuleInfo, aOutputInfo = v.freeze, m.freeze, o.freeze
168
194
 
169
195
  write_file o.runnerPath, RUNNER_TEMPLATE.result(binding)
170
- puts "- Generated runner: #{o.runnerPath}"
171
-
172
196
  write_file o.verilogBenchPath, VERILOG_BENCH_TEMPLATE.result(binding)
173
- puts "- Generated bench: #{o.verilogBenchPath}"
174
-
175
197
  write_file o.rubyBenchPath, RUBY_BENCH_TEMPLATE.result(binding)
176
- puts "- Generated bench: #{o.rubyBenchPath}"
177
-
178
198
  write_file o.designPath, DESIGN_TEMPLATE.result(binding)
179
- puts "- Generated design: #{o.designPath}"
180
-
181
199
  write_file o.protoPath, PROTO_TEMPLATE.result(binding)
182
- puts "- Generated prototype: #{o.protoPath}"
183
-
184
200
  write_file o.specPath, SPEC_TEMPLATE.result(binding)
185
- puts "- Generated specification: #{o.specPath}"
186
201
  end
187
202
  end
@@ -3,11 +3,11 @@
3
3
  require 'ruby-vpi'
4
4
  <%
5
5
  case aOutputInfo.specFormat
6
- when :UnitTest
6
+ when :xUnit
7
7
  %>
8
8
  require 'test/unit'
9
9
  <%
10
- when :RSpec
10
+ when :rSpec
11
11
  %>
12
12
  require 'ruby-vpi/rspec'
13
13
  <%
@@ -19,7 +19,7 @@ RubyVpi.init_bench '<%= aModuleInfo.name + aOutputInfo.suffix %>', :<%= aOutputI
19
19
  # service the $ruby_relay callback
20
20
  <%
21
21
  case aOutputInfo.specFormat
22
- when :UnitTest, :RSpec
22
+ when :xUnit, :rSpec
23
23
  %>
24
24
  # The <%= aOutputInfo.specFormat %> library will take control henceforth.
25
25
  <%
@@ -35,7 +35,7 @@ module <%= aOutputInfo.verilogBenchName %>;
35
35
  initial begin
36
36
  <%= clockSignal %> = 0;
37
37
  $ruby_init("ruby", "-w", "-rubygems", "<%= aOutputInfo.rubyBenchPath %>"<%=
38
- %{, "-f", "s"} if aOutputInfo.specFormat == :RSpec
38
+ %{, "-f", "s"} if aOutputInfo.specFormat == :rSpec
39
39
  %>);
40
40
  end
41
41
 
@@ -1,11 +1,12 @@
1
1
  ## This file builds and runs the test.
2
2
 
3
- # These are source files that are to be simulated.
3
+ # These are source files that are to be compiled.
4
4
  SIMULATOR_SOURCES = [
5
5
  '<%= aOutputInfo.verilogBenchPath %>',
6
6
  ]
7
7
 
8
- # These are paths to directories which contain dependencies for the sources listed above.
8
+ # These are paths to directories which contain the
9
+ # sources listed above, their dependencies, or both.
9
10
  SIMULATOR_INCLUDES = []
10
11
 
11
12
  # This specifies the "top module" that is to be simulated.