ruby-vpi 18.0.2 → 19.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
  %}