ruby-vpi 18.0.2 → 19.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 (232) hide show
  1. data/Rakefile +15 -19
  2. data/bin/generate/proto.rb +15 -10
  3. data/bin/ruby-vpi +2 -0
  4. data/doc/README +3 -5
  5. data/doc/Rakefile +3 -3
  6. data/doc/common.css +24 -136
  7. data/doc/common.tpl +48 -37
  8. data/doc/figures/figures.dia +19 -19
  9. data/doc/figures/ruby_relay.png +0 -0
  10. data/doc/history.html +252 -67
  11. data/doc/history.inc +98 -1
  12. data/doc/history.yaml +105 -0
  13. data/doc/intro.inc +43 -32
  14. data/doc/lib/doc_format.rb +19 -13
  15. data/doc/lib/doc_proxy.rb +7 -7
  16. data/doc/manual.doc +156 -117
  17. data/doc/manual.html +601 -560
  18. data/doc/memo.html +29 -25
  19. data/doc/print.css +63 -4
  20. data/doc/readme.doc +4 -6
  21. data/doc/readme.html +129 -111
  22. data/doc/rss.xml +168 -7
  23. data/doc/screen.css +146 -0
  24. data/doc/spacing.css +57 -0
  25. data/{samp → examples}/counter/RSpec/Rakefile +0 -0
  26. data/{samp → examples}/counter/RSpec/counter_design.rb +0 -0
  27. data/examples/counter/RSpec/counter_proto.rb +9 -0
  28. data/{samp → examples}/counter/RSpec/counter_runner.rake +0 -0
  29. data/{samp → examples}/counter/RSpec/counter_spec.rb +0 -0
  30. data/{samp → examples}/counter/Rakefile +0 -0
  31. data/{samp → examples}/counter/counter.v +0 -0
  32. data/{samp → examples}/counter/xUnit/Rakefile +0 -0
  33. data/{samp → examples}/counter/xUnit/counter_bench.rb +0 -0
  34. data/{samp → examples}/counter/xUnit/counter_bench.v +0 -0
  35. data/{samp → examples}/counter/xUnit/counter_design.rb +0 -0
  36. data/examples/counter/xUnit/counter_proto.rb +9 -0
  37. data/{samp → examples}/counter/xUnit/counter_runner.rake +0 -0
  38. data/{samp → examples}/counter/xUnit/counter_spec.rb +0 -0
  39. data/{samp → examples}/pipelined_alu/Hw5UnitModel.rb +0 -0
  40. data/{samp → examples}/pipelined_alu/README +0 -0
  41. data/{samp → examples}/pipelined_alu/Rakefile +0 -0
  42. data/{samp → examples}/pipelined_alu/TestHw5UnitModel.rb +0 -0
  43. data/{samp → examples}/pipelined_alu/hw5_unit.v +0 -0
  44. data/{samp → examples}/pipelined_alu/hw5_unit_design.rb +0 -7
  45. data/examples/pipelined_alu/hw5_unit_proto.rb +2 -0
  46. data/{samp → examples}/pipelined_alu/hw5_unit_runner.rake +0 -0
  47. data/{samp → examples}/pipelined_alu/hw5_unit_spec.rb +0 -0
  48. data/{samp → examples}/pipelined_alu/int_gen.rb +0 -0
  49. data/{samp → examples}/register_file/LICENSE +0 -0
  50. data/{samp → examples}/register_file/README +0 -0
  51. data/{samp → examples}/register_file/Rakefile +0 -0
  52. data/{samp → examples}/register_file/register_file.v +0 -0
  53. data/{samp → examples}/register_file/register_file_design.rb +0 -0
  54. data/examples/register_file/register_file_proto.rb +11 -0
  55. data/{samp → examples}/register_file/register_file_runner.rake +0 -0
  56. data/{samp → examples}/register_file/register_file_spec.rb +0 -0
  57. data/ext/main.c +5 -5
  58. data/ext/swig_vpi.i +6 -2
  59. data/lib/ruby-vpi/core/callback.rb +142 -0
  60. data/lib/ruby-vpi/core/edge.rb +128 -0
  61. data/lib/ruby-vpi/core/handle.rb +421 -0
  62. data/lib/ruby-vpi/core/scheduler.rb +244 -0
  63. data/lib/ruby-vpi/core/struct.rb +123 -0
  64. data/lib/ruby-vpi/core.rb +41 -0
  65. data/lib/ruby-vpi/rcov.rb +25 -12
  66. data/lib/ruby-vpi/runner.rb +30 -26
  67. data/lib/ruby-vpi/runner_boot_loader.rb +67 -37
  68. data/lib/ruby-vpi.rb +2 -2
  69. data/ref/c/annotated.html +1 -1
  70. data/ref/c/common_8h.html +1 -1
  71. data/ref/c/files.html +1 -1
  72. data/ref/c/functions.html +1 -1
  73. data/ref/c/functions_vars.html +1 -1
  74. data/ref/c/globals.html +1 -1
  75. data/ref/c/globals_0x63.html +1 -1
  76. data/ref/c/globals_0x65.html +1 -1
  77. data/ref/c/globals_0x66.html +1 -1
  78. data/ref/c/globals_0x6d.html +1 -1
  79. data/ref/c/globals_0x70.html +1 -1
  80. data/ref/c/globals_0x72.html +1 -1
  81. data/ref/c/globals_0x73.html +1 -1
  82. data/ref/c/globals_0x74.html +1 -1
  83. data/ref/c/globals_0x76.html +1 -1
  84. data/ref/c/globals_0x78.html +1 -1
  85. data/ref/c/globals_defs.html +1 -1
  86. data/ref/c/globals_defs_0x65.html +1 -1
  87. data/ref/c/globals_defs_0x70.html +1 -1
  88. data/ref/c/globals_defs_0x76.html +1 -1
  89. data/ref/c/globals_defs_0x78.html +1 -1
  90. data/ref/c/globals_enum.html +1 -1
  91. data/ref/c/globals_eval.html +1 -1
  92. data/ref/c/globals_func.html +1 -1
  93. data/ref/c/globals_type.html +1 -1
  94. data/ref/c/globals_vars.html +1 -1
  95. data/ref/c/index.html +1 -1
  96. data/ref/c/main_8c.html +1 -1
  97. data/ref/c/main_8h.html +1 -1
  98. data/ref/c/relay_8c.html +1 -1
  99. data/ref/c/relay_8h.html +1 -1
  100. data/ref/c/structt__cb__data.html +1 -1
  101. data/ref/c/structt__vpi__delay.html +1 -1
  102. data/ref/c/structt__vpi__error__info.html +1 -1
  103. data/ref/c/structt__vpi__strengthval.html +1 -1
  104. data/ref/c/structt__vpi__systf__data.html +1 -1
  105. data/ref/c/structt__vpi__time.html +1 -1
  106. data/ref/c/structt__vpi__value.html +1 -1
  107. data/ref/c/structt__vpi__vecval.html +1 -1
  108. data/ref/c/structt__vpi__vlog__info.html +1 -1
  109. data/ref/c/verilog_8h.html +1 -1
  110. data/ref/c/vlog_8c.html +1 -1
  111. data/ref/c/vlog_8h.html +1 -1
  112. data/ref/c/vpi__user_8h.html +1 -1
  113. data/ref/ruby/classes/ERB.html +7 -5
  114. data/ref/ruby/classes/ERB.src/{M000026.html → M000024.html} +0 -0
  115. data/ref/ruby/classes/FileUtils.html +11 -11
  116. data/ref/ruby/classes/FileUtils.src/{M000027.html → M000025.html} +0 -0
  117. data/ref/ruby/classes/FileUtils.src/{M000028.html → M000026.html} +0 -0
  118. data/ref/ruby/classes/Float.html +8 -6
  119. data/ref/ruby/classes/Float.src/{M000021.html → M000019.html} +0 -0
  120. data/ref/ruby/classes/Integer.html +67 -65
  121. data/ref/ruby/classes/Integer.src/M000007.html +25 -0
  122. data/ref/ruby/classes/Integer.src/{M000014.html → M000008.html} +5 -5
  123. data/ref/ruby/classes/Integer.src/M000009.html +5 -12
  124. data/ref/ruby/classes/Integer.src/M000010.html +5 -5
  125. data/ref/ruby/classes/Integer.src/M000011.html +5 -5
  126. data/ref/ruby/classes/Integer.src/M000012.html +5 -5
  127. data/ref/ruby/classes/Integer.src/M000015.html +25 -0
  128. data/ref/ruby/classes/Integer.src/M000016.html +31 -0
  129. data/ref/ruby/classes/Integer.src/M000017.html +12 -12
  130. data/ref/ruby/classes/Integer.src/M000018.html +17 -18
  131. data/ref/ruby/classes/Object.html +126 -0
  132. data/ref/ruby/classes/RDoc.html +5 -5
  133. data/ref/ruby/classes/RDoc.src/{M000061.html → M000081.html} +0 -0
  134. data/ref/ruby/classes/RubyVPI.html +50 -9
  135. data/ref/ruby/classes/String.html +22 -20
  136. data/ref/ruby/classes/String.src/M000020.html +36 -0
  137. data/ref/ruby/classes/String.src/M000021.html +41 -0
  138. data/ref/ruby/classes/String.src/M000022.html +5 -23
  139. data/ref/ruby/classes/String.src/M000023.html +5 -28
  140. data/ref/ruby/classes/{Vpi → VPI}/Handle.html +442 -140
  141. data/ref/ruby/classes/{Vpi/Handle.src/M000042.html → VPI/Handle.src/M000037.html} +4 -4
  142. data/ref/ruby/classes/VPI/Handle.src/M000038.html +21 -0
  143. data/ref/ruby/classes/VPI/Handle.src/M000039.html +18 -0
  144. data/ref/ruby/classes/{Vpi/Handle.src/M000036.html → VPI/Handle.src/M000040.html} +5 -5
  145. data/ref/ruby/classes/VPI/Handle.src/M000045.html +18 -0
  146. data/ref/ruby/classes/{Vpi/Handle.src/M000038.html → VPI/Handle.src/M000046.html} +5 -5
  147. data/ref/ruby/classes/VPI/Handle.src/M000057.html +18 -0
  148. data/ref/ruby/classes/{Vpi/Handle.src/M000040.html → VPI/Handle.src/M000058.html} +5 -5
  149. data/ref/ruby/classes/VPI/Handle.src/M000061.html +18 -0
  150. data/ref/ruby/classes/VPI/Handle.src/M000062.html +18 -0
  151. data/ref/ruby/classes/{Vpi/Handle.src/M000054.html → VPI/Handle.src/M000065.html} +11 -11
  152. data/ref/ruby/classes/VPI/Handle.src/M000067.html +21 -0
  153. data/ref/ruby/classes/VPI/Handle.src/M000068.html +28 -0
  154. data/ref/ruby/classes/VPI/Handle.src/M000069.html +50 -0
  155. data/ref/ruby/classes/{Vpi/Handle.src/M000048.html → VPI/Handle.src/M000070.html} +6 -6
  156. data/ref/ruby/classes/{Vpi/Handle.src/M000049.html → VPI/Handle.src/M000071.html} +6 -6
  157. data/ref/ruby/classes/{Vpi/Handle.src/M000050.html → VPI/Handle.src/M000072.html} +5 -5
  158. data/ref/ruby/classes/{Vpi/Handle.src/M000051.html → VPI/Handle.src/M000073.html} +17 -17
  159. data/ref/ruby/classes/VPI/Handle.src/M000075.html +18 -0
  160. data/ref/ruby/classes/VPI/Handle.src/M000076.html +40 -0
  161. data/ref/ruby/classes/{Vpi/Handle.src/M000056.html → VPI/Handle.src/M000077.html} +18 -18
  162. data/ref/ruby/classes/{Vpi → VPI}/S_vpi_time.html +22 -20
  163. data/ref/ruby/classes/VPI/S_vpi_time.src/M000078.html +18 -0
  164. data/ref/ruby/classes/VPI/S_vpi_time.src/M000079.html +19 -0
  165. data/ref/ruby/classes/{Vpi → VPI}/S_vpi_value.html +37 -23
  166. data/ref/ruby/classes/VPI/S_vpi_value.src/M000034.html +35 -0
  167. data/ref/ruby/classes/VPI/S_vpi_value.src/M000035.html +42 -0
  168. data/ref/ruby/classes/VPI/S_vpi_value.src/M000036.html +42 -0
  169. data/ref/ruby/classes/{Vpi.html → VPI.html} +129 -34
  170. data/ref/ruby/classes/VPI.src/M000027.html +19 -0
  171. data/ref/ruby/classes/VPI.src/M000028.html +18 -0
  172. data/ref/ruby/classes/VPI.src/M000029.html +19 -0
  173. data/ref/ruby/classes/VPI.src/M000031.html +25 -0
  174. data/ref/ruby/classes/VPI.src/M000032.html +26 -0
  175. data/ref/ruby/classes/VerilogParser/Module/Port.html +17 -15
  176. data/ref/ruby/classes/VerilogParser/Module/Port.src/M000004.html +23 -0
  177. data/ref/ruby/classes/VerilogParser/Module/Port.src/{M000007.html → M000005.html} +0 -0
  178. data/ref/ruby/classes/VerilogParser/Module/Port.src/M000006.html +5 -10
  179. data/ref/ruby/classes/VerilogParser/Module.html +7 -5
  180. data/ref/ruby/classes/VerilogParser/Module.src/{M000005.html → M000003.html} +0 -0
  181. data/ref/ruby/classes/VerilogParser.html +7 -5
  182. data/ref/ruby/classes/VerilogParser.src/{M000004.html → M000002.html} +0 -0
  183. data/ref/ruby/created.rid +1 -1
  184. data/ref/ruby/files/bin/generate_rb.html +2 -2
  185. data/ref/ruby/files/lib/ruby-vpi/{vpi_rb.html → core/callback_rb.html} +7 -8
  186. data/ref/ruby/files/lib/ruby-vpi/core/edge_rb.html +114 -0
  187. data/ref/ruby/files/lib/ruby-vpi/core/handle_rb.html +107 -0
  188. data/ref/ruby/files/lib/ruby-vpi/core/scheduler_rb.html +114 -0
  189. data/ref/ruby/files/lib/ruby-vpi/core/struct_rb.html +108 -0
  190. data/ref/ruby/files/lib/ruby-vpi/core_rb.html +121 -0
  191. data/ref/ruby/files/lib/ruby-vpi/rcov_rb.html +1 -1
  192. data/ref/ruby/files/lib/ruby-vpi/runner_boot_loader_rb.html +5 -41
  193. data/ref/ruby/files/lib/ruby-vpi/runner_boot_loader_rb.src/M000001.html +3 -3
  194. data/ref/ruby/files/lib/ruby-vpi/runner_rb.html +1 -1
  195. data/ref/ruby/files/lib/ruby-vpi_rb.html +1 -1
  196. data/ref/ruby/fr_class_index.html +5 -4
  197. data/ref/ruby/fr_file_index.html +6 -1
  198. data/ref/ruby/fr_method_index.html +80 -60
  199. metadata +126 -103
  200. data/ext/swig_vpi.h +0 -924
  201. data/ext/swig_wrap.cin +0 -7083
  202. data/lib/ruby-vpi/vpi.rb +0 -651
  203. data/ref/ruby/classes/Integer.src/M000013.html +0 -18
  204. data/ref/ruby/classes/Integer.src/M000019.html +0 -25
  205. data/ref/ruby/classes/Integer.src/M000020.html +0 -30
  206. data/ref/ruby/classes/String.src/M000024.html +0 -18
  207. data/ref/ruby/classes/String.src/M000025.html +0 -18
  208. data/ref/ruby/classes/VerilogParser/Module/Port.src/M000008.html +0 -18
  209. data/ref/ruby/classes/Vpi/Handle.src/M000035.html +0 -18
  210. data/ref/ruby/classes/Vpi/Handle.src/M000037.html +0 -18
  211. data/ref/ruby/classes/Vpi/Handle.src/M000039.html +0 -18
  212. data/ref/ruby/classes/Vpi/Handle.src/M000041.html +0 -18
  213. data/ref/ruby/classes/Vpi/Handle.src/M000043.html +0 -21
  214. data/ref/ruby/classes/Vpi/Handle.src/M000044.html +0 -21
  215. data/ref/ruby/classes/Vpi/Handle.src/M000045.html +0 -22
  216. data/ref/ruby/classes/Vpi/Handle.src/M000046.html +0 -50
  217. data/ref/ruby/classes/Vpi/Handle.src/M000047.html +0 -91
  218. data/ref/ruby/classes/Vpi/Handle.src/M000053.html +0 -18
  219. data/ref/ruby/classes/Vpi/Handle.src/M000057.html +0 -40
  220. data/ref/ruby/classes/Vpi/S_vpi_time.src/M000058.html +0 -18
  221. data/ref/ruby/classes/Vpi/S_vpi_time.src/M000059.html +0 -19
  222. data/ref/ruby/classes/Vpi/S_vpi_value.src/M000032.html +0 -18
  223. data/ref/ruby/classes/Vpi/S_vpi_value.src/M000033.html +0 -18
  224. data/ref/ruby/classes/Vpi/S_vpi_value.src/M000034.html +0 -18
  225. data/ref/ruby/classes/Vpi.src/M000029.html +0 -28
  226. data/ref/ruby/classes/Vpi.src/M000030.html +0 -39
  227. data/ref/ruby/classes/Vpi.src/M000031.html +0 -20
  228. data/ref/ruby/files/lib/ruby-vpi/runner_boot_loader_rb.src/M000002.html +0 -18
  229. data/samp/counter/RSpec/counter_proto.rb +0 -10
  230. data/samp/counter/xUnit/counter_proto.rb +0 -10
  231. data/samp/pipelined_alu/hw5_unit_proto.rb +0 -4
  232. data/samp/register_file/register_file_proto.rb +0 -11
data/doc/rss.xml CHANGED
@@ -5,21 +5,182 @@
5
5
  <link>http://ruby-vpi.rubyforge.org</link>
6
6
  <description>Ruby-VPI is a Ruby interface to IEEE 1364-2005 Verilog VPI and a platform for unit testing, rapid prototyping, and systems integration of Verilog modules through Ruby. It lets you create complex Verilog test benches easily and wholly in Ruby.</description>
7
7
  <item>
8
- <title>Version 18.0.2 released</title>
9
- <link>http://ruby-vpi.rubyforge.org/doc/history.html#a18.0.2</link>
10
- <guid>http://ruby-vpi.rubyforge.org/doc/history.html#a18.0.2</guid>
11
- <description>&lt;h1 id=&quot;18.0.2&quot;&gt;Version 18.0.2 (2007-08-03)&lt;/h1&gt;
8
+ <title>Version 19.0.0 released</title>
9
+ <link>http://ruby-vpi.rubyforge.org/doc/history.html#a19.0.0</link>
10
+ <guid>http://ruby-vpi.rubyforge.org/doc/history.html#a19.0.0</guid>
11
+ <description>&lt;h1 id=&quot;19.0.0&quot;&gt;Version 19.0.0 (2007-08-27)&lt;/h1&gt;
12
12
 
13
- &lt;p&gt;This release fixes a bug in error reporting.&lt;/p&gt;
13
+ &lt;p&gt;This release restores support for Cadence NC-Sim, breaks support for Mentor Modelsim, adds support for concurrent processes which simplify implementing Ruby prototypess, and offers numerous other improvements.&lt;/p&gt;
14
+
15
+
16
+ &lt;p&gt;&lt;strong&gt;Mentor Modelsim users, take note&lt;/strong&gt;: this release does not work very well with Mentor Modelsim, so do not upgrade until compatibility is restored in a future release. In the mean time, consider using this release with another simulator, such as &lt;a href=&quot;http://www.pragmatic-c.com/gpl-cver/&quot;&gt;GPL Cver&lt;/a&gt;.&lt;/p&gt;
17
+
18
+
19
+ &lt;h2&gt;Thanks&lt;/h2&gt;
20
+
21
+
22
+ &lt;ul&gt;
23
+ &lt;li&gt;Calvin Wong &lt;a href=&quot;http://rubyforge.org/pipermail/ruby-vpi-discuss/2007-August/000046.html&quot;&gt;requested the concurrent processes feature&lt;/a&gt;, helped test it, and provided useful feedback.&lt;/li&gt;
24
+ &lt;/ul&gt;
25
+
26
+
27
+ &lt;h2&gt;Caution&lt;/h2&gt;
28
+
29
+
30
+ &lt;ul&gt;
31
+ &lt;li&gt;Prototypes no longer have a &lt;code class=&quot;code&quot;&gt;feign!&lt;/code&gt; method. Instead, they emulate the behavior of the real Verilog DUT using the new &lt;a href=&quot;manual.html#usage.concurrency&quot;&gt;concurrency model&lt;/a&gt;.&lt;/li&gt;
32
+ &lt;/ul&gt;
33
+
34
+
35
+ &lt;ul&gt;
36
+ &lt;li&gt;All &amp;#8220;initial&amp;#8221; blocks in Verilog code are now evaluated &lt;em&gt;before&lt;/em&gt; the specification begins executing. This allows you to set the initial value of registers in Verilog before the specification interacts with them.&lt;/li&gt;
37
+ &lt;/ul&gt;
38
+
39
+
40
+ &lt;ul&gt;
41
+ &lt;li&gt;The &lt;code class=&quot;code&quot;&gt;&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Vpi&lt;/span&gt;&lt;/code&gt; module has been renamed to &lt;code class=&quot;code&quot;&gt;&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;VPI&lt;/span&gt;&lt;/code&gt; for consistency with the project name.&lt;/li&gt;
42
+ &lt;/ul&gt;
43
+
44
+
45
+ &lt;ul&gt;
46
+ &lt;li&gt;The &lt;code class=&quot;code&quot;&gt;&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;VPI&lt;/span&gt;::simulation_time&lt;/code&gt; method has been renamed to &lt;code class=&quot;code&quot;&gt;&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;VPI&lt;/span&gt;::current_time&lt;/code&gt;.&lt;/li&gt;
47
+ &lt;/ul&gt;
48
+
49
+
50
+ &lt;ul&gt;
51
+ &lt;li&gt;The &lt;code class=&quot;code&quot;&gt;&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;VPI&lt;/span&gt;::&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Handle&lt;/span&gt;.value_forced?&lt;/code&gt; method has been renamed to &lt;code class=&quot;code&quot;&gt;&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;VPI&lt;/span&gt;::&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Handle&lt;/span&gt;.force?&lt;/code&gt;&lt;/li&gt;
52
+ &lt;/ul&gt;
53
+
54
+
55
+ &lt;ul&gt;
56
+ &lt;li&gt;The &lt;tt&gt;samp/&lt;/tt&gt; directory has been renamed to &lt;tt&gt;examples/&lt;/tt&gt;.&lt;/li&gt;
57
+ &lt;/ul&gt;
58
+
59
+
60
+ &lt;ul&gt;
61
+ &lt;li&gt;Code coverage analysis results are now produced only in plain-text format.&lt;/li&gt;
62
+ &lt;/ul&gt;
14
63
 
15
64
 
16
65
  &lt;h2&gt;Repairs&lt;/h2&gt;
17
66
 
18
67
 
19
68
  &lt;ul&gt;
20
- &lt;li&gt;Unhandled Ruby exceptions and errors were not being printed to the screen because Ruby-VPI unconditionally gave control back to the Verilog simulator before it exited.&lt;/li&gt;
69
+ &lt;li&gt;You can now access VPI constants using their original uncapitalized names. For example, you can now write &amp;#8220;vpiIntVal&amp;#8221; instead of having to write &amp;#8220;VpiIntVal&amp;#8221;. However, note that the capitalized names are still supported, so you are not required to change your code.&lt;/li&gt;
70
+ &lt;/ul&gt;
71
+
72
+
73
+ &lt;ul&gt;
74
+ &lt;li&gt;Value change / edge detection for VPI handles was previously incorrect: if you called the &lt;code class=&quot;code&quot;&gt;&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;VPI&lt;/span&gt;::&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Handle&lt;/span&gt;.posedge?&lt;/code&gt; function twice in the same time step, it would give you two different answers.&lt;/li&gt;
75
+ &lt;/ul&gt;
76
+
77
+
78
+ &lt;ul&gt;
79
+ &lt;li&gt;The problem of not being able to write values to nets in Cadence NC-Sim has been fixed.&lt;/li&gt;
80
+ &lt;/ul&gt;
81
+
82
+
83
+ &lt;h2&gt;Additions&lt;/h2&gt;
84
+
85
+
86
+ &lt;ul&gt;
87
+ &lt;li&gt;Added support for &lt;a href=&quot;manual.html#usage.concurrency&quot;&gt;concurrent processes&lt;/a&gt;, which make Ruby prototypes appear more like Verilog code and also give the ability to write parallel tests.&lt;/li&gt;
88
+ &lt;/ul&gt;
89
+
90
+
91
+ &lt;ul&gt;
92
+ &lt;li&gt;Added support for performance profiling using the &lt;a href=&quot;http://ruby-prof.rubyforge.org&quot;&gt;ruby-prof&lt;/a&gt; project. The profiler can be enabled by setting the &lt;code class=&quot;code&quot;&gt;&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;PROFILER&lt;/span&gt;&lt;/code&gt; environment variable to &amp;#8220;1&amp;#8221; before running a Ruby-VPI test.&lt;/li&gt;
93
+ &lt;/ul&gt;
94
+
95
+
96
+ &lt;ul&gt;
97
+ &lt;li&gt;Added new method aliases to &lt;code class=&quot;code&quot;&gt;&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;VPI&lt;/span&gt;::&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Handle&lt;/span&gt;&lt;/code&gt; for value detection. The complete list of aliases is now:
98
+ &lt;ul&gt;
99
+ &lt;li&gt;Tests if the logic value of this handle is unknown (x).
100
+ &lt;ul&gt;
101
+ &lt;li&gt;x?&lt;/li&gt;
102
+ &lt;li&gt;unknown?&lt;/li&gt;
103
+ &lt;li&gt;dont_care?&lt;/li&gt;
104
+ &lt;/ul&gt;
105
+ &lt;/li&gt;
106
+ &lt;li&gt;Sets the logic value of this handle to unknown (x).
107
+ &lt;ul&gt;
108
+ &lt;li&gt;x!&lt;/li&gt;
109
+ &lt;li&gt;unknown!&lt;/li&gt;
110
+ &lt;li&gt;dont_care!&lt;/li&gt;
111
+ &lt;/ul&gt;
112
+ &lt;/li&gt;
113
+ &lt;li&gt;Tests if the logic value of this handle is high impedance (z).
114
+ &lt;ul&gt;
115
+ &lt;li&gt;z?&lt;/li&gt;
116
+ &lt;li&gt;hi_z?&lt;/li&gt;
117
+ &lt;li&gt;high_z?&lt;/li&gt;
118
+ &lt;li&gt;high_impedance?&lt;/li&gt;
119
+ &lt;li&gt;tri_state?&lt;/li&gt;
120
+ &lt;li&gt;floating?&lt;/li&gt;
121
+ &lt;/ul&gt;
122
+ &lt;/li&gt;
123
+ &lt;li&gt;Sets the logic value of this handle to high impedance (z).
124
+ &lt;ul&gt;
125
+ &lt;li&gt;z!&lt;/li&gt;
126
+ &lt;li&gt;hi_z!&lt;/li&gt;
127
+ &lt;li&gt;high_z!&lt;/li&gt;
128
+ &lt;li&gt;high_impedance!&lt;/li&gt;
129
+ &lt;li&gt;tri_state!&lt;/li&gt;
130
+ &lt;li&gt;floating!&lt;/li&gt;
131
+ &lt;/ul&gt;
132
+ &lt;/li&gt;
133
+ &lt;li&gt;Tests if the logic value of this handle is at &amp;#8220;logic high&amp;#8221; level.
134
+ &lt;ul&gt;
135
+ &lt;li&gt;high?&lt;/li&gt;
136
+ &lt;li&gt;one?&lt;/li&gt;
137
+ &lt;/ul&gt;
138
+ &lt;/li&gt;
139
+ &lt;li&gt;Sets the logic value of this handle to &amp;#8220;logic high&amp;#8221; level.
140
+ &lt;ul&gt;
141
+ &lt;li&gt;high!&lt;/li&gt;
142
+ &lt;li&gt;one!&lt;/li&gt;
143
+ &lt;/ul&gt;
144
+ &lt;/li&gt;
145
+ &lt;li&gt;Tests if the logic value of this handle is at &amp;#8220;logic low&amp;#8221; level.
146
+ &lt;ul&gt;
147
+ &lt;li&gt;low?&lt;/li&gt;
148
+ &lt;li&gt;zero?&lt;/li&gt;
149
+ &lt;/ul&gt;
150
+ &lt;/li&gt;
151
+ &lt;li&gt;Sets the logic value of this handle to &amp;#8220;logic low&amp;#8221; level.
152
+ &lt;ul&gt;
153
+ &lt;li&gt;low!&lt;/li&gt;
154
+ &lt;li&gt;zero!&lt;/li&gt;
155
+ &lt;/ul&gt;&lt;/li&gt;
156
+ &lt;/ul&gt;&lt;/li&gt;
157
+ &lt;/ul&gt;
158
+
159
+
160
+ &lt;ul&gt;
161
+ &lt;li&gt;Added new methods to &lt;code class=&quot;code&quot;&gt;&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;VPI&lt;/span&gt;::&lt;span style=&quot;color:#036; font-weight:bold&quot;&gt;Handle&lt;/span&gt;&lt;/code&gt; for value change / edge detection:
162
+ &lt;ul&gt;
163
+ &lt;li&gt;edge? &amp;#8211; detects positive and negative edges&lt;/li&gt;
164
+ &lt;li&gt;change? &amp;#8211; detects any kind of value change&lt;/li&gt;
165
+ &lt;li&gt;change_00? &amp;#8211; detects a value change from 0 to 0&lt;/li&gt;
166
+ &lt;li&gt;change_01? &amp;#8211; detects a value change from 0 to 1&lt;/li&gt;
167
+ &lt;li&gt;change_0x? &amp;#8211; detects a value change from 0 to unknown&lt;/li&gt;
168
+ &lt;li&gt;change_0z? &amp;#8211; detects a value change from 0 to high-Z&lt;/li&gt;
169
+ &lt;li&gt;change_10? &amp;#8211; detects a value change from 1 to 0&lt;/li&gt;
170
+ &lt;li&gt;change_11? &amp;#8211; detects a value change from 1 to 1&lt;/li&gt;
171
+ &lt;li&gt;change_1x? &amp;#8211; detects a value change from 1 to unknown&lt;/li&gt;
172
+ &lt;li&gt;change_1z? &amp;#8211; detects a value change from 1 to high-Z&lt;/li&gt;
173
+ &lt;li&gt;change_x0? &amp;#8211; detects a value change from unknown to 0&lt;/li&gt;
174
+ &lt;li&gt;change_x1? &amp;#8211; detects a value change from unknown to 1&lt;/li&gt;
175
+ &lt;li&gt;change_xx? &amp;#8211; detects a value change from unknown to unknown&lt;/li&gt;
176
+ &lt;li&gt;change_xz? &amp;#8211; detects a value change from unknown to high-Z&lt;/li&gt;
177
+ &lt;li&gt;change_z0? &amp;#8211; detects a value change from high-Z to 0&lt;/li&gt;
178
+ &lt;li&gt;change_z1? &amp;#8211; detects a value change from high-Z to 1&lt;/li&gt;
179
+ &lt;li&gt;change_zx? &amp;#8211; detects a value change from high-Z to unknown&lt;/li&gt;
180
+ &lt;li&gt;change_zz? &amp;#8211; detects a value change from high-Z to high-Z&lt;/li&gt;
181
+ &lt;/ul&gt;&lt;/li&gt;
21
182
  &lt;/ul&gt;</description>
22
- <pubDate>Fri, 03 Aug 2007 00:00:00 PDT</pubDate>
183
+ <pubDate>Mon, 27 Aug 2007 00:00:00 PDT</pubDate>
23
184
  </item>
24
185
  </channel>
25
186
  </rss>
data/doc/screen.css ADDED
@@ -0,0 +1,146 @@
1
+ @import 'common.css';
2
+
3
+ body {
4
+ margin: 0;
5
+ background-color: snow;
6
+ }
7
+
8
+ #body {
9
+ max-width: 37em;
10
+ width: expression("37em"); /* for IE */
11
+
12
+ background-color: white;
13
+ border-right: thick solid salmon;
14
+ padding: 1em;
15
+ }
16
+
17
+
18
+ /* headings */
19
+
20
+ h1, h2, h3, h4, h5, h6, th, .title {
21
+ font-family: serif;
22
+ }
23
+
24
+ h1, h2, h3, h4, h5, h6 {
25
+ font-weight: lighter;
26
+ padding-bottom: 2px;
27
+ border-bottom: 3px solid cornflowerblue;
28
+ }
29
+
30
+ h1 a,
31
+ h2 a,
32
+ h3 a,
33
+ h4 a,
34
+ h5 a,
35
+ h6 a {
36
+ text-decoration: none;
37
+ }
38
+
39
+
40
+ /* table of contents */
41
+
42
+ #menu {
43
+ top: 1em;
44
+ left: 41em;
45
+ position: absolute;
46
+
47
+ position: expression("static"); /* for IE */
48
+ float: expression("right"); /* for IE */
49
+ }
50
+
51
+ #menu h1 {
52
+ padding-top: 0;
53
+ }
54
+
55
+ #menu ul,
56
+ #menu ol {
57
+ padding-bottom: 1em;
58
+ }
59
+
60
+ #menu li {
61
+ margin-left: -1em;
62
+ }
63
+
64
+ #toc-contents {
65
+ padding-top: 1em;
66
+ }
67
+
68
+
69
+ /* latex */
70
+
71
+ .front_cover h1,
72
+ .front_cover h2,
73
+ .front_cover h3,
74
+ .front_cover h4,
75
+ .front_cover h5,
76
+ .front_cover h6 {
77
+ border: none;
78
+ text-align: center;
79
+ }
80
+
81
+ .part > .title,
82
+ .chapter > .title {
83
+ border: none;
84
+ }
85
+
86
+ .part > .title {
87
+ border-bottom: thick solid salmon;
88
+ }
89
+
90
+ .paragraph > .title,
91
+ .admonition .title {
92
+ font-family: serif;
93
+ font-size: larger;
94
+ }
95
+
96
+
97
+ /* admonitions */
98
+
99
+ .admonition {
100
+ border: thin solid seagreen;
101
+ background-color: honeydew;
102
+ }
103
+
104
+
105
+ /* source code */
106
+
107
+ pre {
108
+ overflow: auto;
109
+ }
110
+
111
+ code {
112
+ padding: 0.125em;
113
+ padding-left: 0.25em;
114
+ padding-right: 0.25em;
115
+ }
116
+
117
+
118
+ /* emphasis */
119
+
120
+ body {
121
+ font-family: sans-serif;
122
+ }
123
+
124
+ em, blockquote {
125
+ font-family: serif;
126
+ }
127
+
128
+ blockquote {
129
+ border: thin solid salmon;
130
+ border-left-width: thick;
131
+ padding-left: 1em;
132
+ background: snow;
133
+ }
134
+
135
+ hr {
136
+ background-color: red;
137
+ border: none;
138
+ }
139
+
140
+ big {
141
+ font-size: larger;
142
+ }
143
+
144
+ a:hover {
145
+ color: red;
146
+ }
data/doc/spacing.css ADDED
@@ -0,0 +1,57 @@
1
+ h1, h2, h3, h4, h5, h6 {
2
+ padding-top: 2em;
3
+ }
4
+
5
+
6
+ /* latex */
7
+
8
+ .front_cover > .title {
9
+ padding-top: 0;
10
+ }
11
+
12
+ .front_cover > .author {
13
+ padding-top: 2em;
14
+ }
15
+
16
+ .front_cover > .date {
17
+ padding-top: 1em;
18
+ }
19
+
20
+ .part,
21
+ .chapter {
22
+ padding-top: 3em;
23
+ }
24
+
25
+ .part > .title,
26
+ .chapter > .title {
27
+ padding-bottom: 1em;
28
+ }
29
+
30
+ .paragraph > .title {
31
+ padding-top: 1em;
32
+ }
33
+
34
+
35
+ /* admonitions */
36
+
37
+ .admonition {
38
+ padding: 1em;
39
+ margin-top: 1em;
40
+ margin-bottom: 1em;
41
+ min-height: 150px;
42
+ }
43
+
44
+
45
+ /* source code */
46
+
47
+ pre {
48
+ padding: 1em;
49
+ }
50
+
51
+
52
+ /* formal blocks */
53
+
54
+ .formal {
55
+ padding-top: 1em;
56
+ padding-bottom: 1em;
57
+ }
File without changes
File without changes
@@ -0,0 +1,9 @@
1
+ always do
2
+ wait until clock.posedge?
3
+
4
+ if reset.high?
5
+ count.intVal = 0
6
+ else
7
+ count.intVal += 1
8
+ end
9
+ end
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,9 @@
1
+ always do
2
+ wait until clock.posedge?
3
+
4
+ if reset.high?
5
+ count.intVal = 0
6
+ else
7
+ count.intVal += 1
8
+ end
9
+ end
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -8,13 +8,6 @@ end
8
8
 
9
9
  # Brings the design under test into a blank state.
10
10
  def reset!
11
- clk.x!
12
- reset.x!
13
- in_databits.x!
14
- a.x!
15
- b.x!
16
- in_op.x!
17
-
18
11
  reset.high!
19
12
  5.times { cycle! }
20
13
  reset.low!
@@ -0,0 +1,2 @@
1
+ warn "Woe is me! Nobody implemented a Ruby prototype for this design. :-("
2
+ exit
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,11 @@
1
+ always do
2
+ wait until rdReg.change? or wtReg.change? or rw.change? or enable.change?
3
+
4
+ if rw.low?
5
+ targetReg = register.memoryWord_a[rdReg.intVal]
6
+ outBus.intVal = targetReg.intVal
7
+ elsif enable.high?
8
+ targetReg = register.memoryWord_a[wtReg.intVal]
9
+ targetReg.intVal = inBus.intVal
10
+ end
11
+ end
data/ext/main.c CHANGED
@@ -19,14 +19,14 @@ void main_init() {
19
19
  ruby_init_loadpath();
20
20
 
21
21
  // load the VPI interface for Ruby
22
- Init_vpi();
23
- rb_define_module_function(mVpi, "relay_verilog", main_relay_verilog, 0);
24
- rb_define_module_function(mVpi, "relay_ruby_reason", main_relay_ruby_reason, 0);
22
+ Init_VPI();
23
+ rb_define_module_function(mVPI, "__extension__relay_verilog", main_relay_verilog, 0);
24
+ rb_define_module_function(mVPI, "__extension__relay_ruby_reason", main_relay_ruby_reason, 0);
25
25
 
26
26
  // some compilers have trouble with pointers to the va_list
27
27
  // type. See ext/Rakefile and the user manual for details
28
- rb_define_alias(mVpi, "vpi_vprintf", "vpi_printf");
29
- rb_define_alias(mVpi, "vpi_mcd_vprintf", "vpi_mcd_printf");
28
+ rb_define_alias(mVPI, "vpi_vprintf", "vpi_printf");
29
+ rb_define_alias(mVPI, "vpi_mcd_vprintf", "vpi_mcd_printf");
30
30
 
31
31
 
32
32
  char* bootLoader = getenv("RUBYVPI_BOOT_LOADER");
data/ext/swig_vpi.i CHANGED
@@ -1,4 +1,4 @@
1
- %module vpi
1
+ %module VPI
2
2
 
3
3
  /* Parse the header file to generate wrappers */
4
4
  %{
@@ -6,7 +6,11 @@
6
6
  %}
7
7
  %include "swig_vpi.h"
8
8
 
9
- /* allows us to set S_cb_data.cb_rtn = Vpi::Vlog_relay_ruby in Ruby */
9
+ /* Allows us set the VPI callback handler in Ruby:
10
+
11
+ data = S_cb_data.new
12
+ data.cb_rtn = VPI::Vlog_relay_ruby
13
+ */
10
14
  %{
11
15
  #include "vlog.h"
12
16
  %}