ruby-vpi 15.0.2 → 16.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (208) hide show
  1. data/LICENSE +23 -340
  2. data/Rakefile +169 -192
  3. data/bin/generate_test.rb +26 -25
  4. data/bin/generate_test_tpl/runner.rake +4 -10
  5. data/bin/header_to_ruby.rb +3 -20
  6. data/doc/README +11 -0
  7. data/doc/Rakefile +8 -21
  8. data/doc/common.css +44 -10
  9. data/doc/common.tpl +5 -10
  10. data/doc/history.doc +8 -7
  11. data/doc/history.html +228 -560
  12. data/doc/history.rb +7 -11
  13. data/doc/{history.yml → history.yaml} +325 -128
  14. data/doc/images/{feed-icon.png → feed-icon-28x28.png} +0 -0
  15. data/doc/images/ruby/LICENSE +15 -0
  16. data/doc/images/ruby/logo-reflection.png +0 -0
  17. data/doc/images/ruby/logo-reflection.xcf +0 -0
  18. data/doc/images/ruby/logo.png +0 -0
  19. data/doc/images/{LICENSE → tango/LICENSE} +0 -0
  20. data/doc/images/{caution.png → tango/caution.png} +0 -0
  21. data/doc/images/{caution.svg → tango/caution.svg} +0 -0
  22. data/doc/images/{home.png → tango/home.png} +0 -0
  23. data/doc/images/{home.svg → tango/home.svg} +0 -0
  24. data/doc/images/{important.png → tango/important.png} +0 -0
  25. data/doc/images/{important.svg → tango/important.svg} +0 -0
  26. data/doc/images/{next.png → tango/next.png} +0 -0
  27. data/doc/images/{next.svg → tango/next.svg} +0 -0
  28. data/doc/images/{note.png → tango/note.png} +0 -0
  29. data/doc/images/{note.svg → tango/note.svg} +0 -0
  30. data/doc/images/{prev.png → tango/prev.png} +0 -0
  31. data/doc/images/{prev.svg → tango/prev.svg} +0 -0
  32. data/doc/images/{tip.png → tango/tip.png} +0 -0
  33. data/doc/images/{tip.svg → tango/tip.svg} +0 -0
  34. data/doc/images/{up.png → tango/up.png} +0 -0
  35. data/doc/images/{up.svg → tango/up.svg} +0 -0
  36. data/doc/images/{warning.png → tango/warning.png} +0 -0
  37. data/doc/images/{warning.svg → tango/warning.svg} +0 -0
  38. data/doc/intro.inc +105 -36
  39. data/doc/lib/doc_format.rb +151 -29
  40. data/doc/lib/doc_proxy.rb +28 -69
  41. data/doc/lib/erb_content.rb +10 -22
  42. data/doc/lib/erb_proxy.rb +13 -24
  43. data/doc/manual.doc +16 -60
  44. data/doc/manual.html +257 -340
  45. data/doc/memo.doc +2 -0
  46. data/doc/memo.html +11 -11
  47. data/doc/readme.doc +36 -2
  48. data/doc/readme.html +214 -51
  49. data/doc/rss.erb +3 -3
  50. data/doc/rss.xml +217 -269
  51. data/ext/Rakefile +7 -22
  52. data/ext/common.h +10 -21
  53. data/ext/extconf.rb +5 -0
  54. data/ext/main.c +2 -18
  55. data/ext/main.h +1 -16
  56. data/ext/relay.c +3 -17
  57. data/ext/relay.h +3 -17
  58. data/ext/verilog.h +6 -18
  59. data/ext/vlog.c +3 -21
  60. data/ext/vlog.h +3 -17
  61. data/lib/ruby-vpi/erb.rb +7 -20
  62. data/lib/ruby-vpi/float.rb +6 -20
  63. data/lib/ruby-vpi/integer.rb +27 -47
  64. data/lib/ruby-vpi/rake.rb +4 -19
  65. data/lib/ruby-vpi/rcov.rb +6 -21
  66. data/lib/ruby-vpi/rdoc.rb +3 -21
  67. data/lib/ruby-vpi/runner.rb +28 -29
  68. data/lib/ruby-vpi/runner_proxy.rb +5 -21
  69. data/lib/ruby-vpi/verilog_parser.rb +5 -20
  70. data/lib/ruby-vpi/vpi.rb +420 -376
  71. data/lib/ruby-vpi.rb +26 -32
  72. data/ref/c/annotated.html +1 -1
  73. data/ref/c/common_8h.html +1 -1
  74. data/ref/c/files.html +1 -1
  75. data/ref/c/functions.html +1 -1
  76. data/ref/c/functions_vars.html +1 -1
  77. data/ref/c/globals.html +1 -1
  78. data/ref/c/globals_0x63.html +1 -1
  79. data/ref/c/globals_0x65.html +1 -1
  80. data/ref/c/globals_0x66.html +1 -1
  81. data/ref/c/globals_0x6d.html +1 -1
  82. data/ref/c/globals_0x70.html +1 -1
  83. data/ref/c/globals_0x72.html +1 -1
  84. data/ref/c/globals_0x73.html +1 -1
  85. data/ref/c/globals_0x74.html +1 -1
  86. data/ref/c/globals_0x76.html +1 -1
  87. data/ref/c/globals_0x78.html +1 -1
  88. data/ref/c/globals_defs.html +1 -1
  89. data/ref/c/globals_defs_0x65.html +1 -1
  90. data/ref/c/globals_defs_0x70.html +1 -1
  91. data/ref/c/globals_defs_0x76.html +1 -1
  92. data/ref/c/globals_defs_0x78.html +1 -1
  93. data/ref/c/globals_enum.html +1 -1
  94. data/ref/c/globals_eval.html +1 -1
  95. data/ref/c/globals_func.html +1 -1
  96. data/ref/c/globals_type.html +1 -1
  97. data/ref/c/globals_vars.html +1 -1
  98. data/ref/c/index.html +1 -1
  99. data/ref/c/main_8c.html +1 -1
  100. data/ref/c/main_8h.html +1 -1
  101. data/ref/c/relay_8c.html +1 -1
  102. data/ref/c/relay_8h.html +1 -1
  103. data/ref/c/structt__cb__data.html +1 -1
  104. data/ref/c/structt__vpi__delay.html +1 -1
  105. data/ref/c/structt__vpi__error__info.html +1 -1
  106. data/ref/c/structt__vpi__strengthval.html +1 -1
  107. data/ref/c/structt__vpi__systf__data.html +1 -1
  108. data/ref/c/structt__vpi__time.html +1 -1
  109. data/ref/c/structt__vpi__value.html +1 -1
  110. data/ref/c/structt__vpi__vecval.html +1 -1
  111. data/ref/c/structt__vpi__vlog__info.html +1 -1
  112. data/ref/c/verilog_8h.html +1 -1
  113. data/ref/c/vlog_8c.html +1 -1
  114. data/ref/c/vlog_8h.html +1 -1
  115. data/ref/c/vpi__user_8h.html +1 -1
  116. data/ref/ruby/classes/ERB.html +5 -5
  117. data/ref/ruby/classes/ERB.src/{M000026.html → M000024.html} +15 -15
  118. data/ref/ruby/classes/FileUtils.html +10 -10
  119. data/ref/ruby/classes/FileUtils.src/{M000027.html → M000025.html} +4 -4
  120. data/ref/ruby/classes/FileUtils.src/{M000028.html → M000026.html} +4 -4
  121. data/ref/ruby/classes/Float.html +5 -5
  122. data/ref/ruby/classes/Float.src/{M000022.html → M000020.html} +5 -5
  123. data/ref/ruby/classes/Integer.html +20 -56
  124. data/ref/ruby/classes/Integer.src/M000008.html +11 -11
  125. data/ref/ruby/classes/Integer.src/M000009.html +4 -4
  126. data/ref/ruby/classes/Integer.src/M000010.html +4 -4
  127. data/ref/ruby/classes/Integer.src/M000011.html +4 -4
  128. data/ref/ruby/classes/Integer.src/M000012.html +4 -4
  129. data/ref/ruby/classes/Integer.src/M000013.html +4 -4
  130. data/ref/ruby/classes/Integer.src/M000016.html +12 -9
  131. data/ref/ruby/classes/Integer.src/M000017.html +18 -9
  132. data/ref/ruby/classes/Integer.src/M000018.html +12 -12
  133. data/ref/ruby/classes/Integer.src/M000019.html +17 -18
  134. data/ref/ruby/classes/RDoc.src/M000053.html +25 -25
  135. data/ref/ruby/classes/RubyVpi/Config.html +3 -3
  136. data/ref/ruby/classes/RubyVpi.html +11 -5
  137. data/ref/ruby/classes/RubyVpi.src/{M000029.html → M000027.html} +103 -101
  138. data/ref/ruby/classes/String.html +21 -15
  139. data/ref/ruby/classes/String.src/M000021.html +36 -0
  140. data/ref/ruby/classes/String.src/{M000024.html → M000022.html} +24 -24
  141. data/ref/ruby/classes/String.src/M000023.html +5 -23
  142. data/ref/ruby/classes/VerilogParser/Module/Parameter.src/M000007.html +5 -5
  143. data/ref/ruby/classes/VerilogParser/Module/Port.src/M000003.html +7 -7
  144. data/ref/ruby/classes/VerilogParser/Module/Port.src/M000004.html +4 -4
  145. data/ref/ruby/classes/VerilogParser/Module/Port.src/M000005.html +4 -4
  146. data/ref/ruby/classes/VerilogParser/Module/Port.src/M000006.html +4 -4
  147. data/ref/ruby/classes/VerilogParser/Module.src/M000002.html +20 -20
  148. data/ref/ruby/classes/VerilogParser.html +6 -0
  149. data/ref/ruby/classes/VerilogParser.src/M000001.html +20 -20
  150. data/ref/ruby/classes/Vpi/Handle.html +89 -88
  151. data/ref/ruby/classes/Vpi/Handle.src/M000036.html +18 -0
  152. data/ref/ruby/classes/Vpi/Handle.src/M000037.html +5 -5
  153. data/ref/ruby/classes/Vpi/Handle.src/M000038.html +5 -5
  154. data/ref/ruby/classes/Vpi/Handle.src/M000039.html +5 -5
  155. data/ref/ruby/classes/Vpi/Handle.src/M000040.html +8 -5
  156. data/ref/ruby/classes/Vpi/Handle.src/M000041.html +8 -8
  157. data/ref/ruby/classes/Vpi/Handle.src/M000042.html +7 -6
  158. data/ref/ruby/classes/Vpi/Handle.src/M000043.html +31 -9
  159. data/ref/ruby/classes/Vpi/Handle.src/M000044.html +74 -31
  160. data/ref/ruby/classes/Vpi/Handle.src/M000045.html +17 -74
  161. data/ref/ruby/classes/Vpi/Handle.src/M000046.html +11 -17
  162. data/ref/ruby/classes/Vpi/Handle.src/M000048.html +31 -0
  163. data/ref/ruby/classes/Vpi/Handle.src/M000049.html +53 -52
  164. data/ref/ruby/classes/Vpi/S_vpi_time.src/M000050.html +4 -4
  165. data/ref/ruby/classes/Vpi/S_vpi_time.src/M000051.html +5 -5
  166. data/ref/ruby/classes/Vpi/S_vpi_value.html +15 -15
  167. data/ref/ruby/classes/Vpi/S_vpi_value.src/{M000036.html → M000033.html} +5 -5
  168. data/ref/ruby/classes/Vpi/S_vpi_value.src/M000034.html +5 -5
  169. data/ref/ruby/classes/Vpi/S_vpi_value.src/M000035.html +5 -5
  170. data/ref/ruby/classes/Vpi.html +48 -19
  171. data/ref/ruby/classes/Vpi.src/M000028.html +28 -0
  172. data/ref/ruby/classes/Vpi.src/M000029.html +18 -0
  173. data/ref/ruby/classes/Vpi.src/M000030.html +25 -15
  174. data/ref/ruby/classes/Vpi.src/M000031.html +9 -5
  175. data/ref/ruby/classes/Vpi.src/M000032.html +9 -25
  176. data/ref/ruby/created.rid +1 -1
  177. data/ref/ruby/files/bin/generate_test_rb.html +2 -1
  178. data/ref/ruby/files/bin/header_to_ruby_rb.html +1 -1
  179. data/ref/ruby/files/lib/ruby-vpi/erb_rb.html +7 -1
  180. data/ref/ruby/files/lib/ruby-vpi/float_rb.html +7 -1
  181. data/ref/ruby/files/lib/ruby-vpi/integer_rb.html +7 -1
  182. data/ref/ruby/files/lib/ruby-vpi/rake_rb.html +7 -1
  183. data/ref/ruby/files/lib/ruby-vpi/rcov_rb.html +7 -1
  184. data/ref/ruby/files/lib/ruby-vpi/rdoc_rb.html +1 -1
  185. data/ref/ruby/files/lib/ruby-vpi/runner_proxy_rb.html +1 -1
  186. data/ref/ruby/files/lib/ruby-vpi/runner_rb.html +1 -1
  187. data/ref/ruby/files/lib/ruby-vpi/verilog_parser_rb.html +1 -1
  188. data/ref/ruby/files/lib/ruby-vpi/vpi_rb.html +1 -1
  189. data/ref/ruby/files/lib/ruby-vpi_rb.html +7 -1
  190. data/ref/ruby/fr_method_index.html +34 -34
  191. data/samp/counter/counter_rspec_runner.rake +4 -0
  192. data/samp/counter/counter_xunit_runner.rake +4 -0
  193. data/samp/pipelined_alu/Hw5UnitModel.rb +3 -19
  194. data/samp/pipelined_alu/README +38 -13
  195. data/samp/pipelined_alu/TestHw5UnitModel.rb +9 -20
  196. data/samp/pipelined_alu/hw5_unit.v +1 -16
  197. data/samp/pipelined_alu/hw5_unit_test_runner.rake +4 -0
  198. data/samp/pipelined_alu/hw5_unit_test_spec.rb +3 -20
  199. data/samp/pipelined_alu/int_gen.rb +6 -20
  200. metadata +47 -43
  201. data/doc/LICENSE +0 -397
  202. data/doc/images/feed-icon.LICENSE +0 -2
  203. data/doc/images/feed-icon.svg +0 -18
  204. data/ref/ruby/classes/Integer.src/M000020.html +0 -25
  205. data/ref/ruby/classes/Integer.src/M000021.html +0 -30
  206. data/ref/ruby/classes/String.src/M000025.html +0 -18
  207. data/ref/ruby/classes/Vpi/Handle.src/M000047.html +0 -24
  208. data/ref/ruby/classes/Vpi.src/M000033.html +0 -22
data/doc/manual.html CHANGED
@@ -8,10 +8,9 @@
8
8
  <title>Ruby-VPI user manual</title>
9
9
  </head>
10
10
  <body>
11
+ <h1 style="margin-top: 0">Ruby-VPI user manual</h1>
11
12
 
12
- <br/><br/> <!-- give space below #menu -->
13
-
14
- <p style="text-align:center;"><a href="readme.html"><img src="images/home.png" title="Return to main page" alt="Return to main page" /></a></p>
13
+ <p style="text-align:center;"><a href="readme.html"><img src="images/tango/home.png" title="Return to main page" alt="Return to main page" /></a></p>
15
14
 
16
15
  <div id="menu">
17
16
  <a href="#index">Contents</a> &middot; <a href="#figures">Figures</a> &middot; <a href="#tables">Tables</a> &middot; <a href="#examples">Examples</a> &middot; <a href="#tips">Tips</a> &middot; <a href="#notes">Notes</a> &middot; <a href="#importants">Importants</a>
@@ -19,147 +18,7 @@
19
18
 
20
19
  <div id="index">
21
20
  <h1>Contents</h1>
22
- <ul>
23
- <li>1 <a href="#anchor4">Ruby-VPI user manual</a>
24
- <ul>
25
- <li>1.1 <a href="#terms">Terms</a></li>
26
- </ul>
27
- </li>
28
- <li>2 <a href="#intro">Introduction</a>
29
- <ul>
30
- <li>2.1 <a href="#intro.features">Prominent features</a>
31
- <ul>
32
- <li>2.1.1 <a href="#anchor5">Portable</a></li>
33
- <li>2.1.2 <a href="#anchor6">Agile</a></li>
34
- <li>2.1.3 <a href="#anchor7">Powerful</a></li>
35
- <li>2.1.4 <a href="#anchor8">Free</a></li>
36
- </ul>
37
- </li>
38
- <li>2.2 <a href="#intro.applications">Applications</a></li>
39
- <li>2.3 <a href="#intro.appetizers">Appetizers</a></li>
40
- <li>2.4 <a href="#intro.license">License</a></li>
41
- <li>2.5 <a href="#intro.related-works">Related works</a>
42
- <ul>
43
- <li>2.5.1 <a href="#intro.related-works.pli">Ye olde <span class="caps">PLI</span></a></li>
44
- </ul>
45
- </li>
46
- </ul>
47
- </li>
48
- <li>3 <a href="#background">Background</a>
49
- <ul>
50
- <li>3.1 <a href="#background.methodology">Methodology</a></li>
51
- <li>3.2 <a href="#background.vocab">Terminology</a></li>
52
- <li>3.3 <a href="#background.org">Organization</a></li>
53
- <li>3.4 <a href="#background.relay">Ruby/Verilog interaction</a></li>
54
- </ul>
55
- </li>
56
- <li>4 <a href="#setup">Setup</a>
57
- <ul>
58
- <li>4.1 <a href="#setup.manifest">Manifest</a></li>
59
- <li>4.2 <a href="#setup.reqs">Requirements</a></li>
60
- <li>4.3 <a href="#setup.recom">Recommendations</a>
61
- <ul>
62
- <li>4.3.1 <a href="#setup.recom.merger">Text merging tool</a></li>
63
- </ul>
64
- </li>
65
- <li>4.4 <a href="#setup.installation">Installation</a>
66
- <ul>
67
- <li>4.4.1 <a href="#setup.installation.windows">Installing on Windows</a></li>
68
- </ul>
69
- </li>
70
- <li>4.5 <a href="#setup.maintenance">Maintenance</a></li>
71
- </ul>
72
- </li>
73
- <li>5 <a href="#usage">Usage</a>
74
- <ul>
75
- <li>5.1 <a href="#usage.vpi"><span class="caps">VPI</span> in Ruby</a>
76
- <ul>
77
- <li>5.1.1 <a href="#usage.vpi.handles">Handles</a>
78
- <ul>
79
- <li>5.1.1.1 <a href="#anchor9">Accessing a handle&#8217;s relatives</a></li>
80
- <li>5.1.1.2 <a href="#anchor10">Accessing a handle&#8217;s properties</a></li>
81
- </ul>
82
- </li>
83
- <li>5.1.2 <a href="#usage.vpi.callbacks">Callbacks</a></li>
84
- </ul>
85
- </li>
86
- <li>5.2 <a href="#usage.prototyping">Prototyping</a></li>
87
- <li>5.3 <a href="#usage.debugger">Debugging</a>
88
- <ul>
89
- <li>5.3.1 <a href="#usage.debugger.init">Advanced initialization</a></li>
90
- </ul>
91
- </li>
92
- <li>5.4 <a href="#usage.test-runner">Test runner</a>
93
- <ul>
94
- <li>5.4.1 <a href="#usage.test-runner.env-vars">Environment variables</a></li>
95
- </ul>
96
- </li>
97
- <li>5.5 <a href="#usage.examples">Sample tests</a></li>
98
- <li>5.6 <a href="#usage.tools">Tools</a>
99
- <ul>
100
- <li>5.6.1 <a href="#usage.tools.generate-test">Automated test generation</a></li>
101
- <li>5.6.2 <a href="#usage.tools.verilog-ruby-conv">Verilog to Ruby conversion</a></li>
102
- </ul>
103
- </li>
104
- <li>5.7 <a href="#usage.tutorial">Tutorial</a>
105
- <ul>
106
- <li>5.7.1 <a href="#usage.tutorial.declare-design">Start with a design</a></li>
107
- <li>5.7.2 <a href="#usage.tutorial.generate-test">Generate a test</a></li>
108
- <li>5.7.3 <a href="#usage.tutorial.specification">Specify your expectations</a></li>
109
- <li>5.7.4 <a href="#usage.tutorial.implement-proto">Implement the prototype</a></li>
110
- <li>5.7.5 <a href="#usage.tutorial.test-proto">Verify the prototype</a></li>
111
- <li>5.7.6 <a href="#usage.tutorial.implement-design">Implement the design</a></li>
112
- <li>5.7.7 <a href="#usage.tutorial.test-design">Verify the design</a></li>
113
- </ul>
114
- </li>
115
- </ul>
116
- </li>
117
- <li>6 <a href="#hacking">Hacking</a>
118
- <ul>
119
- <li>6.1 <a href="#hacking.release-packages">Building release packages</a></li>
120
- </ul>
121
- </li>
122
- <li>7 <a href="#problems">Known problems</a>
123
- <ul>
124
- <li>7.1 <a href="#problems.ruby">Ruby</a>
125
- <ul>
126
- <li>7.1.1 <a href="#problems.ruby.SystemStackError">SystemStackError</a></li>
127
- <li>7.1.2 <a href="#problems.ruby.xUnit">test/unit</a></li>
128
- </ul>
129
- </li>
130
- <li>7.2 <a href="#problem.ivl">Icarus Verilog</a>
131
- <ul>
132
- <li>7.2.1 <a href="#problems.ivl.vpi_handle_by_name">Vpi::vpi_handle_by_name</a>
133
- <ul>
134
- <li>7.2.1.1 <a href="#problems.ivl.vpi_handle_by_name.absolute-paths">Give full paths to Verilog objects</a></li>
135
- <li>7.2.1.2 <a href="#problems.ivl.vpi_handle_by_name.connect-registers">Registers must be connected</a></li>
136
- </ul>
137
- </li>
138
- <li>7.2.2 <a href="#problems.ivl.vpi_reset">Vpi::reset</a></li>
139
- </ul>
140
- </li>
141
- <li>7.3 <a href="#problems.vsim">Mentor Modelsim</a>
142
- <ul>
143
- <li>7.3.1 <a href="#problems.vsim.ruby_run">ruby_run();</a></li>
144
- </ul>
145
- </li>
146
- </ul>
147
- </li>
148
- <li>8 <a href="#glossary">Glossary</a>
149
- <ul>
150
- <li>8.1 <a href="#glossary.bench">Bench</a></li>
151
- <li>8.2 <a href="#glossary.BDD" title="BDD">Behavior driven development</a></li>
152
- <li>8.3 <a href="#glossary.design">Design</a></li>
153
- <li>8.4 <a href="#glossary.expectation">Expectation</a></li>
154
- <li>8.5 <a href="#glossary.handle">Handle</a></li>
155
- <li>8.6 <a href="#glossary.rake">Rake</a></li>
156
- <li>8.7 <a href="#glossary.rspec">rSpec</a></li>
157
- <li>8.8 <a href="#glossary.specification">Specification</a></li>
158
- <li>8.9 <a href="#glossary.TDD" title="TDD">Test driven development</a></li>
159
- <li>9.0 <a href="#glossary.test">Test</a></li>
160
- <li>9.1 <a href="#glossary.test_bench">Test bench</a></li>
161
- </ul></li>
162
- </ul>
21
+ <ul><li><a id="a-606992228" href="#Ruby-VPI_user_manual">Ruby-VPI user manual</a><ul><li><a id="a-606993518" href="#legal">Legalities</a></li></ul></li><li><a id="a-606994448" href="#intro">Introduction</a><ul><li><a id="a-606995298" href="#Resources">Resources</a></li><li><a id="a-606996238" href="#intro.features">Features</a></li><li><a id="a-606997278" href="#intro.reqs">Requirements</a></li><li><a id="a-606998228" href="#intro.applications">Applications</a></li><li><a id="a-606999338" href="#intro.appetizers">Appetizers</a></li><li><a id="a-607000438" href="#intro.license">License</a></li><li><a id="a-606014748" href="#intro.related-works">Related works</a><ul><li><a id="a-606035648" href="#intro.related-works.pli">Ye olde <span class="caps">PLI</span></a></li></ul></li></ul></li><li><a id="a-606053288" href="#background">Background</a><ul><li><a id="a-606069898" href="#background.methodology">Methodology</a></li><li><a id="a-606106808" href="#background.vocab">Terminology</a></li><li><a id="a-606127698" href="#background.org">Organization</a></li><li><a id="a-606150238" href="#background.relay">Ruby/Verilog interaction</a></li></ul></li><li><a id="a-606180548" href="#setup">Setup</a><ul><li><a id="a-606192588" href="#setup.manifest">Manifest</a></li><li><a id="a-606206048" href="#setup.reqs">Requirements</a></li><li><a id="a-606213438" href="#setup.recom">Recommendations</a><ul><li><a id="a-606235588" href="#setup.recom.merger">Text merging tool</a></li></ul></li><li><a id="a-606251368" href="#setup.installation">Installation</a><ul><li><a id="a-606273678" href="#setup.installation.windows">Installing on Windows</a></li></ul></li><li><a id="a-606278328" href="#setup.maintenance">Maintenance</a></li></ul></li><li><a id="a-606285848" href="#usage">Usage</a><ul><li><a id="a-606290248" href="#usage.vpi"><span class="caps">VPI</span> in Ruby</a><ul><li><a id="a-606294778" href="#usage.vpi.handles">Handles</a><ul><li><a id="a-606297428" href="#Accessing_a_handle__8217_s_relatives">Accessing a handle&#8217;s relatives</a></li><li><a id="a-606305088" href="#Accessing_a_handle__8217_s_properties">Accessing a handle&#8217;s properties</a></li></ul></li><li><a id="a-605776528" href="#usage.vpi.callbacks">Callbacks</a></li></ul></li><li><a id="a-605820298" href="#usage.prototyping">Prototyping</a></li><li><a id="a-605856998" href="#usage.debugger">Debugging</a><ul><li><a id="a-605861038" href="#usage.debugger.init">Advanced initialization</a></li></ul></li><li><a id="a-605886638" href="#usage.test-runner">Test runner</a><ul><li><a id="a-605692898" href="#usage.test-runner.env-vars">Environment variables</a></li></ul></li><li><a id="a-605713518" href="#usage.examples">Sample tests</a></li><li><a id="a-605735618" href="#usage.tools">Tools</a><ul><li><a id="a-606420358" href="#usage.tools.generate-test">Automated test generation</a></li><li><a id="a-606426458" href="#usage.tools.verilog-ruby-conv">Verilog to Ruby conversion</a></li></ul></li><li><a id="a-606430138" href="#usage.tutorial">Tutorial</a><ul><li><a id="a-606439718" href="#usage.tutorial.declare-design">Start with a design</a></li><li><a id="a-606447618" href="#usage.tutorial.generate-test">Generate a test</a></li><li><a id="a-606455858" href="#usage.tutorial.specification">Specify your expectations</a></li><li><a id="a-606466508" href="#usage.tutorial.implement-proto">Implement the prototype</a></li><li><a id="a-606469388" href="#usage.tutorial.test-proto">Verify the prototype</a></li><li><a id="a-606472858" href="#usage.tutorial.implement-design">Implement the design</a></li><li><a id="a-606480598" href="#usage.tutorial.test-design">Verify the design</a></li></ul></li></ul></li><li><a id="a-606487878" href="#hacking">Hacking</a><ul><li><a id="a-606495208" href="#hacking.scm">Getting the source code</a></li><li><a id="a-606502868" href="#hacking.release-packages">Building release packages</a></li></ul></li><li><a id="a-606510668" href="#problems">Known problems</a><ul><li><a id="a-606514648" href="#problems.ruby">Ruby</a><ul><li><a id="a-606529698" href="#problems.ruby.SystemStackError">SystemStackError</a></li><li><a id="a-606545738" href="#problems.ruby.xUnit">test/unit</a></li></ul></li><li><a id="a-606557578" href="#problem.ivl">Icarus Verilog</a><ul><li><a id="a-606563378" href="#problems.ivl.vpi_handle_by_name">Vpi::vpi_handle_by_name</a><ul><li><a id="a-606577748" href="#problems.ivl.vpi_handle_by_name.absolute-paths">Give full paths to Verilog objects</a></li><li><a id="a-606588618" href="#problems.ivl.vpi_handle_by_name.connect-registers">Registers must be connected</a></li></ul></li><li><a id="a-606593458" href="#problems.ivl.vpi_reset">Vpi::reset</a></li></ul></li><li><a id="a-606596948" href="#problems.vsim">Mentor Modelsim</a><ul><li><a id="a-606600738" href="#problems.vsim.ruby_run">ruby_run();</a></li></ul></li></ul></li><li><a id="a-606604778" href="#glossary">Glossary</a><ul><li><a id="a-606606678" href="#glossary.bench">Bench</a></li><li><a id="a-606613558" href="#glossary.BDD">Behavior driven development (BDD)</a></li><li><a id="a-606620958" href="#glossary.design">Design</a></li><li><a id="a-606623008" href="#glossary.expectation">Expectation</a></li><li><a id="a-606624858" href="#glossary.handle">Handle</a></li><li><a id="a-606628418" href="#glossary.rake">Rake</a></li><li><a id="a-606630878" href="#glossary.rspec">rSpec</a></li><li><a id="a-606636388" href="#glossary.specification">Specification</a></li><li><a id="a-606640878" href="#glossary.TDD">Test driven development (TDD)</a></li><li><a id="a-606643148" href="#glossary.test">Test</a></li><li><a id="a-606646838" href="#glossary.test_bench">Test bench</a></li></ul></li></ul>
163
22
 
164
23
  <h1>Formals</h1>
165
24
 
@@ -223,10 +82,10 @@
223
82
  <li><a href="#important4">Before we continue&#8230;</a></li>
224
83
  </ol>
225
84
  </div>
226
- <h1 id="anchor4">1 &nbsp; Ruby-VPI user manual</h1>
85
+ <h1><a id="Ruby-VPI_user_manual" href="#a-606992228">1</a> &nbsp; Ruby-VPI user manual</h1>
227
86
 
228
87
 
229
- <p>This manual was last updated on Mon Jan 22 16:30:33 <span class="caps">PST 2007</span>.</p>
88
+ <p>This manual was last updated on Wed May 02 23:05:05 <span class="caps">PDT 2007</span>.</p>
230
89
 
231
90
 
232
91
  <p>It is meant to be read in conjunction with the <a href="../ref/ruby/index.html">reference documentation for Ruby-VPI</a>. In addition, if you are new to <a href="http://www.ruby-lang.org">the Ruby language</a>, you are encouraged to <a href="http://www.ruby-lang.org/en/documentation/">explore its documentation</a> alongside this manual.</p>
@@ -238,22 +97,53 @@
238
97
  <p><em>Happy reading!</em></p>
239
98
 
240
99
 
241
- <h2 id="terms">1.1 &nbsp; Terms</h2>
100
+ <h2 ><a id="legal" href="#a-606993518">1.1</a> &nbsp; Legalities</h2>
101
+
102
+
103
+ <p>This manual is distributed under <a href="#intro.license">the same license as Ruby-VPI</a>.</p>
242
104
 
243
105
 
244
- <p>Copyright&#169; 2006, 2007 Suraj N. Kurapati.</p>
106
+ <p>The admonition and navigation graphics used in this manual are Copyright&#169; 2005, 2006 <a href="http://tango.freedesktop.org">Tango Desktop Project</a> and are licensed under <a href="./images/tango/LICENSE">these terms</a>.</p>
245
107
 
246
108
 
247
- <p>Permission is granted to copy, distribute and/or modify this document under the terms of the <a href="http://www.gnu.org/copyleft/fdl.html"><span class="caps">GNU</span> Free Documentation License</a>, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts and no Back-Cover Texts. A copy of the license is included in the the file named <a href="./LICENSE"><span class="caps">LICENSE</span></a>.</p>
109
+ <h1 ><a id="intro" href="#a-606994448">2</a> &nbsp; Introduction</h1>
248
110
 
249
111
 
250
- <p>The admonition and navigation graphics used in this manual are Copyright&#169; 2005, 2006 <a href="http://tango.freedesktop.org">Tango Desktop Project</a> and are licensed under <a href="./images/LICENSE">these terms</a>.</p>
112
+ <p>Ruby-VPI is a platform for unit testing, rapid prototyping, and systems integration of Verilog modules through the <a href="http://www.ruby-lang.org">Ruby programming language</a>. It lets you:</p>
251
113
 
252
114
 
253
- <h1 id="intro">2 &nbsp; Introduction</h1>
115
+ <ul>
116
+ <li>Access the <em>entire</em> <a href="http://ieeexplore.ieee.org/xpl/standardstoc.jsp?isnumber=33945"><span class="caps">IEEE 1364</span>-2005 Verilog <span class="caps">VPI</span></a> interface from Ruby.</li>
117
+ <li>Create complex Verilog test benches easily and wholly in Ruby.</li>
118
+ <li>Apply agile software development practices to develop hardware.</li>
119
+ <li>Perform <a href="http://ruby-vpi.rubyforge.org/papers/masters_thesis.html">specification-driven functional verification</a> (<a href="http://ruby-vpi.rubyforge.org/papers/masters_thesis.pdf"><span class="caps">PDF</span> version</a>).</li>
120
+ </ul>
121
+
254
122
 
123
+ <p>Ruby-VPI is <a href="http://en.wikipedia.org/wiki/Open_source_software">open source software</a> released under <a href="#intro.license">this license</a>.</p>
255
124
 
256
- <p>Ruby-VPI is a <a href="http://www.ruby-lang.org">Ruby</a> interface to <a href="http://ieeexplore.ieee.org/xpl/standardstoc.jsp?isnumber=33945"><span class="caps">IEEE 1364</span>-2005 Verilog <span class="caps">VPI</span></a>. It lets you create complex Verilog test benches easily and wholly in Ruby.</p>
125
+
126
+ <div id="resources">
127
+
128
+ <h2><a id="Resources" href="#a-606995298">2.1</a> &nbsp; Resources</h2>
129
+
130
+
131
+ <p class="title">Records</p>
132
+
133
+
134
+ <p><a type="application/rss+xml" href="http://ruby-vpi.rubyforge.org/doc/rss.xml"><img src="images/feed-icon-28x28.png" alt="RSS feed for release notifications" style="float: right"/></a></p>
135
+
136
+
137
+ <ul>
138
+ <li><a href="history.html">What&#8217;s new?</a>
139
+ &#8211; a record of all release notes.</li>
140
+ <li><a href="memo.html">Plans</a>
141
+ &#8211; pending tasks for future releases.</li>
142
+ <li><a href="http://ruby-vpi.rubyforge.org/talks/">Talks</a>
143
+ &#8211; materials from presentations and seminars.</li>
144
+ <li><a href="http://ruby-vpi.rubyforge.org/papers/">Papers</a>
145
+ &#8211; research publications.</li>
146
+ </ul>
257
147
 
258
148
 
259
149
  <p class="title">Documentation</p>
@@ -269,71 +159,43 @@
269
159
  </ul>
270
160
 
271
161
 
272
- <p class="title">Records</p>
273
-
274
-
275
- <ul>
276
- <li><a type="application/rss+xml" href="http://ruby-vpi.rubyforge.org/doc/rss.xml"><img src="images/feed-icon.png" title="RSS feed icon" alt="RSS feed icon" /> RSS feed</a>
277
- &#8211; keep track of new releases at your leisure.</li>
278
- <li><a href="history.html">Release history</a>
279
- &#8211; record of all release notes.</li>
280
- <li><a href="memo.html">Memorandum</a>
281
- &#8211; pending tasks for future releases.</li>
282
- </ul>
283
-
284
-
285
162
  <p class="title">Facilities</p>
286
163
 
287
164
 
288
165
  <ul>
289
- <li><a href="http://rubyforge.org/projects/ruby-vpi">Project portal</a>
290
- &#8211; hosted generously by <a href="http://rubyforge.org">RubyForge</a>.</li>
291
- <li><a href="http://ruby-vpi.rubyforge.org/src/ruby-vpi">Source code</a>
292
- &#8211; browse online or obtain through <a href="http://abridgegame.org/darcs/">Darcs</a>.</li>
293
- <li><a href="http://rubyforge.org/frs/?group_id=1339">Downloads</a>
166
+ <li><a href="http://rubyforge.org/frs/?group_id=1339">Downloads</a>
294
167
  &#8211; obtain release packages.</li>
168
+ <li><a href="http://ruby-vpi.rubyforge.org/src/ruby-vpi">Source code</a>
169
+ &#8211; browse online or obtain with <a href="http://darcs.net">Darcs</a>.</li>
170
+ <li><a href="http://rubyforge.org/forum/?group_id=1339">Forums</a>
171
+ &#8211; discuss things and ask questions.</li>
295
172
  <li><a href="http://rubyforge.org/tracker/?group_id=1339">Bugs</a>
296
173
  &#8211; report defects in the software.</li>
297
174
  <li><a href="http://rubyforge.org/tracker/?group_id=1339">Patches</a>
298
175
  &#8211; submit patches to source code.</li>
299
176
  <li><a href="http://rubyforge.org/tracker/?group_id=1339">Requests</a>
300
177
  &#8211; request new features or get support.</li>
301
- <li><a href="http://rubyforge.org/forum/?group_id=1339">Forums</a>
302
- &#8211; discuss things and ask questions.</li>
178
+ <li><a href="http://rubyforge.org/projects/ruby-vpi">Project portal</a>
179
+ &#8211; hosted generously by <a href="http://rubyforge.org">RubyForge</a>.</li>
303
180
  </ul>
304
181
 
305
182
 
306
- <p class="title">Outreach</p>
307
-
308
-
309
- <ul>
310
- <li><a href="http://ruby-vpi.rubyforge.org/news">News</a>
311
- &#8211; see what&#8217;s cooking for the next release.</li>
312
- <li><a href="http://ruby-vpi.rubyforge.org/talks">Talks</a>
313
- &#8211; materials from presentations and seminars.</li>
314
- </ul>
315
-
183
+ </div>
316
184
 
317
- <h2 id="intro.features">2.1 &nbsp; Prominent features</h2>
185
+ <h2 ><a id="intro.features" href="#a-606996238">2.2</a> &nbsp; Features</h2>
318
186
 
319
187
 
320
- <h3 id="anchor5">2.1.1 &nbsp; Portable</h3>
188
+ <p class="title">Portable</p>
321
189
 
322
190
 
323
191
  <ul>
324
- <li>Supports the <em>entire</em> <a href="http://ieeexplore.ieee.org/xpl/standardstoc.jsp?isnumber=33945"><span class="caps">IEEE</span> Std 1364-2005</a> VPI standard.</li>
192
+ <li>Supports the <em>entire</em> <a href="http://ieeexplore.ieee.org/xpl/standardstoc.jsp?isnumber=33945"><span class="caps">IEEE 1364</span>-2005 Verilog <span class="caps">VPI</span></a> standard.</li>
193
+ <li>Works with all <a href="#intro.reqs">major Verilog simulators</a> available today.</li>
194
+ <li>Compiled <em>just once</em> during <a href="manual.html#setup.installation">installation</a> and used forever!</li>
325
195
  </ul>
326
196
 
327
197
 
328
- <ul>
329
- <li>Works with all <a href="manual.html#setup.reqs">major Verilog simulators</a> available today.
330
- <ul>
331
- <li>Compiled <em>just once</em> during <a href="manual.html#setup.installation">installation</a> and used forever!</li>
332
- </ul></li>
333
- </ul>
334
-
335
-
336
- <h3 id="anchor6">2.1.2 &nbsp; Agile</h3>
198
+ <p class="title">Agile</p>
337
199
 
338
200
 
339
201
  <ul>
@@ -356,7 +218,7 @@
356
218
  </ul>
357
219
 
358
220
 
359
- <h3 id="anchor7">2.1.3 &nbsp; Powerful</h3>
221
+ <p class="title">Powerful</p>
360
222
 
361
223
 
362
224
  <ul>
@@ -377,18 +239,88 @@
377
239
  </ul>
378
240
 
379
241
 
380
- <h3 id="anchor8">2.1.4 &nbsp; Free</h3>
242
+ <h2 ><a id="intro.reqs" href="#a-606997278">2.3</a> &nbsp; Requirements</h2>
243
+
244
+
245
+ <p>The following software is necessary in order to use Ruby-VPI.</p>
246
+
247
+
248
+ <p class="title">Verilog simulator</p>
249
+
250
+
251
+ <p>Ruby-VPI is known to work with the following simulators. However, you should be able to use it with any Verilog simulator that supports <span class="caps">VPI</span>.</p>
381
252
 
382
253
 
383
254
  <ul>
384
- <li>Gives you the <em>freedom</em> to study, modify, and distribute this software, in accordance with the <a href="http://www.gnu.org/copyleft/gpl.html"><span class="caps">GNU</span> General Public License</a>.</li>
255
+ <li><a href="http://www.synopsys.com/products/simulation/simulation.html">Synopsys <span class="caps">VCS</span></a>
256
+ &#8211; any version that supports the <tt>-load</tt> option is acceptable.</li>
385
257
  </ul>
386
258
 
387
259
 
388
- <h2 id="intro.applications">2.2 &nbsp; Applications</h2>
260
+ <ul>
261
+ <li><a href="http://www.model.com">Mentor Modelsim</a>
262
+ &#8211; any version that supports the <tt>-pli</tt> option is acceptable.</li>
263
+ </ul>
264
+
265
+
266
+ <ul>
267
+ <li><a href="http://www.cadence.com/products/functional_ver/nc-verilog/">Cadence NC-Sim / NC-Verilog</a>
268
+ &#8211; any version that supports the <tt>+loadvpi</tt> option is acceptable.</li>
269
+ </ul>
270
+
271
+
272
+ <ul>
273
+ <li><a href="http://www.pragmatic-c.com/gpl-cver/"><span class="caps">GPL</span> Cver</a>
274
+ &#8211; version 2.11a or newer is acceptable.</li>
275
+ </ul>
276
+
277
+
278
+ <ul>
279
+ <li><a href="http://www.icarus.com/eda/Verilog/">Icarus Verilog</a>
280
+ &#8211; version 0.8 is <em>mostly</em> acceptable&#8212;you <strong>will not</strong> be able to <a href="manual.html#background.org.vpi.util">access child handles through method calls</a>. The reason for this limitation is explained <a href="#problems.ivl.vpi_handle_by_name.absolute-paths">in the user manual</a>.</li>
281
+ </ul>
282
+
283
+
284
+ <p class="title">Compilers</p>
285
+
286
+
287
+ <ul>
288
+ <li><a href="http://en.wikipedia.org/wiki/Make">make</a>
289
+ &#8211; any flavor should be acceptable.</li>
290
+ </ul>
291
+
292
+
293
+ <ul>
294
+ <li>C compiler
295
+ &#8211; the <a href="http://www.gnu.org/software/gcc/" title="GCC"><span class="caps">GNU</span> Compiler Collection</a> is preferred, but any C compiler should be acceptable.</li>
296
+ </ul>
297
+
298
+
299
+ <ul>
300
+ <li><a href="http://www.ruby-lang.org">Ruby</a>
301
+ &#8211; version 1.8 or newer, including header and linkable object files for building extensions, is necessary. You can install Ruby by following <a href="http://www.rubygarden.org/faq/section/show/3">these instructions</a>.</li>
302
+ </ul>
389
303
 
390
304
 
391
- <p>Here is a modest sampling of tasks that Ruby-VPI can be used to perform.</p>
305
+ <p class="title">Libraries</p>
306
+
307
+
308
+ <ul>
309
+ <li><a href="http://en.wikipedia.org/wiki/Pthreads" title="pthreads"><span class="caps">POSIX</span> threads</a>
310
+ &#8211; header and linkable object files, and operating system support for this library are necessary.</li>
311
+ </ul>
312
+
313
+
314
+ <ul>
315
+ <li><a href="http://rubyforge.org/frs/?group_id=126">RubyGems</a>
316
+ &#8211; any recent version should be acceptable. You can install RubyGems by following <a href="http://www.rubygems.org/read/chapter/3">these instructions</a>.</li>
317
+ </ul>
318
+
319
+
320
+ <h2 ><a id="intro.applications" href="#a-606998228">2.4</a> &nbsp; Applications</h2>
321
+
322
+
323
+ <p>Examples of tasks that can be performed with Ruby-VPI are:</p>
392
324
 
393
325
 
394
326
  <ul>
@@ -419,10 +351,10 @@
419
351
  </ul>
420
352
 
421
353
 
422
- <h2 id="intro.appetizers">2.3 &nbsp; Appetizers</h2>
354
+ <h2 ><a id="intro.appetizers" href="#a-606999338">2.5</a> &nbsp; Appetizers</h2>
423
355
 
424
356
 
425
- <p>Here is a modest sampling of code to whet your appetite.</p>
357
+ <p>Here is a tiny sampling of code to whet your appetite. See <a href="manual.html#usage.tutorial">the tutorial</a> for more samples.</p>
426
358
 
427
359
 
428
360
  <ul>
@@ -465,13 +397,38 @@
465
397
  </blockquote>
466
398
 
467
399
 
468
- <h2 id="intro.license">2.4 &nbsp; License</h2>
400
+ <h2 ><a id="intro.license" href="#a-607000438">2.6</a> &nbsp; License</h2>
401
+
402
+
403
+ <p>Copyright&#169; 2006-2007 Suraj N. Kurapati</p>
469
404
 
470
405
 
471
- <p>Ruby-VPI is <a href="http://en.wikipedia.org/wiki/Free_software">free software</a> ; you can redistribute it and/or modify it under the terms of the <a href="http://www.gnu.org/copyleft/gpl.html"><span class="caps">GNU</span> General Public License</a> as published by the <a href="http://www.fsf.org">Free Software Foundation</a> ; either version 2 of the License, or (at your option) any later version.</p>
406
+ <p>Permission is hereby granted, free of charge, to any person obtaining a
407
+ copy of this software and associated documentation files (the &#8220;Software&#8221;),
408
+ to deal in the Software without restriction, including without limitation the
409
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
410
+ sell copies of the Software, and to permit persons to whom the Software is
411
+ furnished to do so, subject to the following conditions:</p>
472
412
 
473
413
 
474
- <h2 id="intro.related-works">2.5 &nbsp; Related works</h2>
414
+ <p>All copies and portions of the Software (together the &#8220;Derivatives&#8221;) and
415
+ their corresponding machine-readable source code (the &#8220;Code&#8221;) must include the
416
+ above copyright notice and this permission notice. The Code must reflect all
417
+ modifications made to the Derivatives. The Derivatives must be distributed
418
+ either with the Code or, if the Code is obtainable for no more than the cost
419
+ of distribution plus a nominal fee, with information on how to obtain the Code.</p>
420
+
421
+
422
+ <p><span class="caps">THE SOFTWARE IS PROVIDED</span> &#8220;AS IS&#8221;, <span class="caps">WITHOUT WARRANTY OF ANY KIND</span>, EXPRESS OR
423
+ <span class="caps">IMPLIED</span>, INCLUDING <span class="caps">BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY</span>,
424
+ <span class="caps">FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT</span>. <span class="caps">IN NO EVENT SHALL</span>
425
+ <span class="caps">THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM</span>, DAMAGES <span class="caps">OR OTHER</span>
426
+ <span class="caps">LIABILITY</span>, WHETHER <span class="caps">IN AN ACTION OF CONTRACT</span>, TORT <span class="caps">OR OTHERWISE</span>, ARISING <span class="caps">FROM</span>,
427
+ <span class="caps">OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN</span>
428
+ <span class="caps">THE SOFTWARE</span>.</p>
429
+
430
+
431
+ <h2 ><a id="intro.related-works" href="#a-606014748">2.7</a> &nbsp; Related works</h2>
475
432
 
476
433
 
477
434
  <ul>
@@ -483,7 +440,7 @@
483
440
  </ul>
484
441
 
485
442
 
486
- <h3 id="intro.related-works.pli">2.5.1 &nbsp; Ye olde <span class="caps">PLI</span></h3>
443
+ <h3 ><a id="intro.related-works.pli" href="#a-606035648">2.7.1</a> &nbsp; Ye olde <span class="caps">PLI</span></h3>
487
444
 
488
445
 
489
446
  <p>The following projects utilize the archaic <strong>tf</strong> and <strong>acc</strong> PLI interfaces, which have been officially deprecated in <span class="caps">IEEE</span> Std 1364-2005.</p>
@@ -496,23 +453,23 @@
496
453
  </ul>
497
454
 
498
455
 
499
- <h1 id="background">3 &nbsp; Background</h1>
456
+ <h1 ><a id="background" href="#a-606053288">3</a> &nbsp; Background</h1>
500
457
 
501
458
 
502
- <h2 id="background.methodology">3.1 &nbsp; Methodology</h2>
459
+ <h2 ><a id="background.methodology" href="#a-606069898">3.1</a> &nbsp; Methodology</h2>
503
460
 
504
461
 
505
462
  <p>Ruby-VPI presents an open-ended interface to <span class="caps">VPI</span>. Thus, you can use any methodology you wish when writing tests. However, being an agile language, Ruby makes it <em>very</em> easy to use agile development practies such as <a href="#glossary.TDD"><span class="caps">TDD</span></a> and <a href="#glossary.BDD"><span class="caps">BDD</span></a>.</p>
506
463
 
507
464
 
508
- <h2 id="background.vocab">3.2 &nbsp; Terminology</h2>
465
+ <h2 ><a id="background.vocab" href="#a-606106808">3.2</a> &nbsp; Terminology</h2>
509
466
 
510
467
 
511
468
  <div class="admonition">
512
469
 
513
470
  <div class="note" id="note1">
514
471
 
515
- <p style="float:left"><img src="images/note.png" title="note" alt="note" /></p>
472
+ <p style="float:left"><img src="images/tango/note.png" title="note" alt="note" /></p>
516
473
 
517
474
 
518
475
  <p class="title">Note: Glossary has definitions</p>
@@ -537,7 +494,7 @@
537
494
  <p>Alright, now I remember what a laboratory bench is, but how does that compare with the term test bench? Surely they cannot have the same meaning, because it doesn&#8217;t make sense to <em>run</em> a laboratory bench or to <em>write</em> one. Thus, to avoid propagating such confusion into this manual, I have attempted to clarify the terminology by <a href="#glossary">simplifying and reintroducing it in a new light</a>.</p>
538
495
 
539
496
 
540
- <h2 id="background.org">3.3 &nbsp; Organization</h2>
497
+ <h2 ><a id="background.org" href="#a-606127698">3.3</a> &nbsp; Organization</h2>
541
498
 
542
499
 
543
500
  <div class="formal">
@@ -580,7 +537,7 @@
580
537
  <p>Notice that Ruby-VPI encapsulates all communication between the Ruby interpreter and <span class="caps">VPI</span>. This allows the specification, or any Ruby program in general, to access <span class="caps">VPI</span> using nothing more than the Ruby language! Thus, Ruby-VPI removes the burden of having to write C programs in order to use <span class="caps">VPI</span>.</p>
581
538
 
582
539
 
583
- <h2 id="background.relay">3.4 &nbsp; Ruby/Verilog interaction</h2>
540
+ <h2 ><a id="background.relay" href="#a-606150238">3.4</a> &nbsp; Ruby/Verilog interaction</h2>
584
541
 
585
542
 
586
543
  <p>In a typical <span class="caps">VPI</span> application written in C, the <em>Verilog simulator</em> is in charge. Verilog code temporarily transfers control to C by invoking C functions, which return control to Verilog when they finish.</p>
@@ -617,10 +574,10 @@
617
574
 
618
575
  </div>
619
576
 
620
- <h1 id="setup">4 &nbsp; Setup</h1>
577
+ <h1 ><a id="setup" href="#a-606180548">4</a> &nbsp; Setup</h1>
621
578
 
622
579
 
623
- <h2 id="setup.manifest">4.1 &nbsp; Manifest</h2>
580
+ <h2 ><a id="setup.manifest" href="#a-606192588">4.1</a> &nbsp; Manifest</h2>
624
581
 
625
582
 
626
583
  <p>When you extract a release package, the following is what you would expect to find.</p>
@@ -636,33 +593,17 @@
636
593
  </ul>
637
594
 
638
595
 
639
- <h2 id="setup.reqs">4.2 &nbsp; Requirements</h2>
596
+ <h2 ><a id="setup.reqs" href="#a-606206048">4.2</a> &nbsp; Requirements</h2>
640
597
 
641
598
 
642
- <p>The following software is necessary in order to use Ruby-VPI.</p>
643
-
644
-
645
- <ul>
646
- <li>Verilog simulator
647
- &#8211; Ruby-VPI is known to work with the following simulators. However, you should be able to use it with any Verilog simulator that supports <span class="caps">VPI</span>.
648
- <ul>
649
- <li><a href="http://www.pragmatic-c.com/gpl-cver/"><span class="caps">GPL</span> Cver</a>
650
- &#8211; version 2.11a or newer is acceptable.</li>
651
- <li><a href="http://www.icarus.com/eda/Verilog/">Icarus Verilog</a>
652
- &#8211; version 0.8 is <em>mostly</em> acceptable&#8212;you <strong>will not</strong> be able to <a href="#background.org.vpi.util">access child handles through method calls</a>. The reason for this limitation is explained in <a href="#problems.ivl.vpi_handle_by_name.absolute-paths">the section named &ldquo;Give full paths to Verilog objects&rdquo;</a>.</li>
653
- <li><a href="http://www.synopsys.com/products/simulation/simulation.html">Synopsys <span class="caps">VCS</span></a>
654
- &#8211; any version that supports the <tt>-load</tt> option is acceptable.</li>
655
- <li><a href="http://www.model.com">Mentor Modelsim</a>
656
- &#8211; any version that supports the <tt>-pli</tt> option is acceptable.</li>
657
- </ul></li>
658
- </ul>
599
+ <p>See <a href="#intro.reqs">the section named &ldquo;Requirements&rdquo;</a> above.</p>
659
600
 
660
601
 
661
602
  <div class="admonition">
662
603
 
663
604
  <div class="tip" id="tip1">
664
605
 
665
- <p style="float:left"><img src="images/tip.png" title="tip" alt="tip" /></p>
606
+ <p style="float:left"><img src="images/tango/tip.png" title="tip" alt="tip" /></p>
666
607
 
667
608
 
668
609
  <p class="title">Tip: Add support for your Verilog simulator</p>
@@ -675,43 +616,13 @@
675
616
 
676
617
  </div>
677
618
 
678
- <ul>
679
- <li><strong>make</strong>
680
- &#8211; any distribution should be acceptable.</li>
681
- </ul>
682
-
683
-
684
- <ul>
685
- <li>C compiler
686
- &#8211; the <a href="http://www.gnu.org/software/gcc/" title="GCC"><span class="caps">GNU</span> Compiler Collection</a> is preferred, but any C compiler should be acceptable.</li>
687
- </ul>
688
-
689
-
690
- <ul>
691
- <li><a href="http://en.wikipedia.org/wiki/Pthreads" title="pthreads"><span class="caps">POSIX</span> threads</a>
692
- &#8211; header and linkable object files, and operating system support for this library are necessary.</li>
693
- </ul>
694
-
695
-
696
- <ul>
697
- <li><a href="http://www.ruby-lang.org">Ruby</a>
698
- &#8211; version 1.8 or newer, including header and linkable object files for building extensions, is necessary. You can install Ruby by following <a href="http://www.rubygarden.org/faq/section/show/3">these instructions</a>.</li>
699
- </ul>
700
-
701
-
702
- <ul>
703
- <li><a href="http://rubyforge.org/frs/?group_id=126">RubyGems</a>
704
- &#8211; any recent version should be acceptable. You can install RubyGems by following <a href="http://www.rubygems.org/read/chapter/3">these instructions</a>.</li>
705
- </ul>
706
-
707
-
708
- <h2 id="setup.recom">4.3 &nbsp; Recommendations</h2>
619
+ <h2 ><a id="setup.recom" href="#a-606213438">4.3</a> &nbsp; Recommendations</h2>
709
620
 
710
621
 
711
622
  <p>The following software may make your interactions with Ruby-VPI more pleasant.</p>
712
623
 
713
624
 
714
- <h3 id="setup.recom.merger">4.3.1 &nbsp; Text merging tool</h3>
625
+ <h3 ><a id="setup.recom.merger" href="#a-606235588">4.3.1</a> &nbsp; Text merging tool</h3>
715
626
 
716
627
 
717
628
  An <em>interactive</em> text merging tool can greatly simplify the process of transferring wanted changes from one file to another. In particular, such tools are especially beneficial when using the <a href="#usage.tools.generate-test">automated test generator</a>. A handful of the currently available open-source text merging tools are listed below.
@@ -724,7 +635,7 @@ An <em>interactive</em> text merging tool can greatly simplify the process of tr
724
635
  </ul>
725
636
 
726
637
 
727
- <h2 id="setup.installation">4.4 &nbsp; Installation</h2>
638
+ <h2 ><a id="setup.installation" href="#a-606251368">4.4</a> &nbsp; Installation</h2>
728
639
 
729
640
 
730
641
  <p>Once you have satisfied the <a href="#setup.reqs">necessary requirements</a>, you can install Ruby-VPI by running the <pre>gem install -y ruby-vpi</pre> command. RubyGems will install Ruby-VPI into the system gem directory, whose path can be determined by running the <pre>gem env gemdir</pre> command. Within this directory, there is a <tt>gems/</tt> subdirectory which contains the Ruby-VPI installation, as illustrated below.</p>
@@ -738,7 +649,7 @@ $ ls -d /usr/lib/ruby/gems/1.8/gems/ruby-vpi*
738
649
  /usr/lib/ruby/gems/1.8/gems/ruby-vpi-7.0.0/
739
650
  </pre>
740
651
 
741
- <h3 id="setup.installation.windows">4.4.1 &nbsp; Installing on Windows</h3>
652
+ <h3 ><a id="setup.installation.windows" href="#a-606273678">4.4.1</a> &nbsp; Installing on Windows</h3>
742
653
 
743
654
 
744
655
  <ul>
@@ -750,7 +661,7 @@ $ ls -d /usr/lib/ruby/gems/1.8/gems/ruby-vpi*
750
661
 
751
662
  <div class="note" id="note2">
752
663
 
753
- <p style="float:left"><img src="images/note.png" title="note" alt="note" /></p>
664
+ <p style="float:left"><img src="images/tango/note.png" title="note" alt="note" /></p>
754
665
 
755
666
 
756
667
  <p class="title">Note: Undefined symbols in Windows</p>
@@ -790,7 +701,7 @@ $ ls -d /usr/lib/ruby/gems/1.8/gems/ruby-vpi*
790
701
  </ul>
791
702
 
792
703
 
793
- <h2 id="setup.maintenance">4.5 &nbsp; Maintenance</h2>
704
+ <h2 ><a id="setup.maintenance" href="#a-606278328">4.5</a> &nbsp; Maintenance</h2>
794
705
 
795
706
 
796
707
  <ul>
@@ -802,10 +713,10 @@ $ ls -d /usr/lib/ruby/gems/1.8/gems/ruby-vpi*
802
713
  <p>Learn more about using and manipulating RubyGems in <a href="http://www.rubygems.org">the RubyGems user manual</a>.</p>
803
714
 
804
715
 
805
- <h1 id="usage">5 &nbsp; Usage</h1>
716
+ <h1 ><a id="usage" href="#a-606285848">5</a> &nbsp; Usage</h1>
806
717
 
807
718
 
808
- <h2 id="usage.vpi">5.1 &nbsp; <span class="caps">VPI</span> in Ruby</h2>
719
+ <h2 ><a id="usage.vpi" href="#a-606290248">5.1</a> &nbsp; <span class="caps">VPI</span> in Ruby</h2>
809
720
 
810
721
 
811
722
  <p>The <em>entire</em> IEEE Std 1364-2005 <span class="caps">VPI</span> interface is available in Ruby, but with a few minor differences.</p>
@@ -824,7 +735,7 @@ $ ls -d /usr/lib/ruby/gems/1.8/gems/ruby-vpi*
824
735
 
825
736
  <div class="note" id="note3">
826
737
 
827
- <p style="float:left"><img src="images/note.png" title="note" alt="note" /></p>
738
+ <p style="float:left"><img src="images/tango/note.png" title="note" alt="note" /></p>
828
739
 
829
740
 
830
741
  <p class="title">Note: No capitalization for <span class="caps">VPI</span> functions</p>
@@ -853,7 +764,7 @@ $ ls -d /usr/lib/ruby/gems/1.8/gems/ruby-vpi*
853
764
  }
854
765
  </pre>
855
766
 
856
- <h3 id="usage.vpi.handles">5.1.1 &nbsp; Handles</h3>
767
+ <h3 ><a id="usage.vpi.handles" href="#a-606294778">5.1.1</a> &nbsp; Handles</h3>
857
768
 
858
769
 
859
770
  <p>A <em>handle</em> is a reference to an object, such as a module, register, wire, and so on, inside the Verilog simulation. In short, handles allow you to inspect and manipulate the design under test and its components.</p>
@@ -863,7 +774,7 @@ $ ls -d /usr/lib/ruby/gems/1.8/gems/ruby-vpi*
863
774
 
864
775
  <div class="note" id="note4">
865
776
 
866
- <p style="float:left"><img src="images/note.png" title="note" alt="note" /></p>
777
+ <p style="float:left"><img src="images/tango/note.png" title="note" alt="note" /></p>
867
778
 
868
779
 
869
780
  <p class="title">Note: <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span></code> heritage</p>
@@ -891,7 +802,7 @@ $ ls -d /usr/lib/ruby/gems/1.8/gems/ruby-vpi*
891
802
  <p>If a handle&#8217;s relative happens to have the same name as one of the handle&#8217;s properties, then the relative is given preference. However, if you <em>really</em> need to access a handle&#8217;s property in such a situation, then you can use the <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span>.get_value</code> and <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span>.put_value</code> methods.</p>
892
803
 
893
804
 
894
- <h4 id="anchor9">5.1.1.1 &nbsp; Accessing a handle&#8217;s relatives</h4>
805
+ <h4><a id="Accessing_a_handle__8217_s_relatives" href="#a-606297428">5.1.1.1</a> &nbsp; Accessing a handle&#8217;s relatives</h4>
895
806
 
896
807
 
897
808
  <p>To access a handle&#8217;s relative (a handle related to it), simply invoke the relative&#8217;s name as a method on the handle.</p>
@@ -909,10 +820,10 @@ reset_signal = counter_module.reset <span style="color:#888"># &lt;== shortcut!<
909
820
  <p>In this code, the shortcut is that you simply wrote <code class="code">counter_module.reset</code> instead of having to write <code class="code">vpi_handle_by_name(<span style="background-color:#fff0f0"><span style="color:#710">&quot;</span><span style="color:#D20">reset</span><span style="color:#710">&quot;</span></span>, counter_module)</code>.</p>
910
821
 
911
822
 
912
- <h4 id="anchor10">5.1.1.2 &nbsp; Accessing a handle&#8217;s properties</h4>
823
+ <h4><a id="Accessing_a_handle__8217_s_properties" href="#a-606305088">5.1.1.2</a> &nbsp; Accessing a handle&#8217;s properties</h4>
913
824
 
914
825
 
915
- <p>To access a handle&#8217;s properties, invoke the property name, using the following format, as a method on the handle. <a href="#ex..properties">the example named &ldquo;Examples of accessing a handle&#8217;s properties&rdquo;</a> shows how this naming format is used.</p>
826
+ <p>To access a handle&#8217;s properties, invoke the property name, using the following format, as a method on the handle. <a href="#ex..properties">the example named &ldquo;Examples of accessing a handle's properties&rdquo;</a> shows how this naming format is used.</p>
916
827
 
917
828
 
918
829
  <div class="formal">
@@ -954,7 +865,7 @@ reset_signal = counter_module.reset <span style="color:#888"># &lt;== shortcut!<
954
865
  <ul>
955
866
  <li><strong>Accessor</strong> suggests a <span class="caps">VPI</span> function that should be used in order to access the <span class="caps">VPI</span> property. When this parameter is not specified, Ruby-VPI will attempt to <em>guess</em> the value of this parameter.
956
867
 
957
- <p><a href="#tbl..accessors">the table named &ldquo;Possible accessors and their implications&rdquo;</a> shows a list of valid accessors and how they affect the access to a property.</p></li>
868
+ <a href="#tbl..accessors">the table named &ldquo;Possible accessors and their implications&rdquo;</a> shows a list of valid accessors and how they affect the access to a property.</li>
958
869
  </ul>
959
870
 
960
871
 
@@ -1290,7 +1201,7 @@ reset_signal = counter_module.reset <span style="color:#888"># &lt;== shortcut!<
1290
1201
  <td> &nbsp; </td>
1291
1202
  <td> &nbsp; </td>
1292
1203
  <td> &nbsp; </td>
1293
- <td rowspan="2">These expressions print the full name of each vpiNet object associated with the handle. </td>
1204
+ <td rowspan="2">These expressions print the full name of each <code class="code"><span style="color:#036; font-weight:bold">VpiNet</span></code> object associated with the handle. </td>
1294
1205
  </tr>
1295
1206
  <tr>
1296
1207
  <td> <code class="code">handle.each_net {|net| puts net.fullName}</code> </td>
@@ -1328,7 +1239,7 @@ reset_signal = counter_module.reset <span style="color:#888"># &lt;== shortcut!<
1328
1239
  <td> &nbsp; </td>
1329
1240
  <td> &nbsp; </td>
1330
1241
  <td> &nbsp; </td>
1331
- <td rowspan="2">These expressions return a list of nets whose logic value is unknown or &#8220;don&#8217;t care&#8221; (x).</td>
1242
+ <td rowspan="2">These expressions return a list of nets whose <strong>logic value</strong> is unknown or &#8220;don&#8217;t care&#8221; (x).</td>
1332
1243
  </tr>
1333
1244
  <tr>
1334
1245
  <td> <code class="code">handle.select_net {|net| net.x?}</code> </td>
@@ -1348,7 +1259,7 @@ reset_signal = counter_module.reset <span style="color:#888"># &lt;== shortcut!<
1348
1259
 
1349
1260
  </div>
1350
1261
 
1351
- <h3 id="usage.vpi.callbacks">5.1.2 &nbsp; Callbacks</h3>
1262
+ <h3 ><a id="usage.vpi.callbacks" href="#a-605776528">5.1.2</a> &nbsp; Callbacks</h3>
1352
1263
 
1353
1264
 
1354
1265
  <p>A <em>callback</em> is a mechanism that makes the Verilog simuluator execute a block of code, which is known as a &#8220;callback handler&#8221;, when some prescribed event occurs in the simulation. They are set up using the <code class="code">vpi_register_cb</code> function and torn down using the <code class="code">vpi_remove_cb</code> function.</p>
@@ -1492,7 +1403,7 @@ Finished in 0.042328 seconds
1492
1403
 
1493
1404
  </div>
1494
1405
 
1495
- <h2 id="usage.prototyping">5.2 &nbsp; Prototyping</h2>
1406
+ <h2 ><a id="usage.prototyping" href="#a-605820298">5.2</a> &nbsp; Prototyping</h2>
1496
1407
 
1497
1408
 
1498
1409
  <p>Ruby-VPI enables you to rapidly prototype your designs in Ruby without having to do full-scale implementations in Verilog. This lets you explore and evaluate different design choices quickly.</p>
@@ -1513,7 +1424,7 @@ To create a prototype,
1513
1424
  <p>Once your design has been implemented in Verilog, you can use the <em>same</em> specification, which was originally used to verify your prototype, to verify your Verilog design.</p>
1514
1425
 
1515
1426
 
1516
- <h2 id="usage.debugger">5.3 &nbsp; Debugging</h2>
1427
+ <h2 ><a id="usage.debugger" href="#a-605856998">5.3</a> &nbsp; Debugging</h2>
1517
1428
 
1518
1429
 
1519
1430
  <p>The <a href="http://www.datanoise.com/articles/category/ruby-debug">ruby-debug project</a> serves as the interactive debugger for Ruby-VPI.</p>
@@ -1525,7 +1436,7 @@ To create a prototype,
1525
1436
  </ol>
1526
1437
 
1527
1438
 
1528
- <h3 id="usage.debugger.init">5.3.1 &nbsp; Advanced initialization</h3>
1439
+ <h3 ><a id="usage.debugger.init" href="#a-605861038">5.3.1</a> &nbsp; Advanced initialization</h3>
1529
1440
 
1530
1441
 
1531
1442
  <p>By default, Ruby-VPI enables the debugger by invoking the <code class="code"><span style="color:#036; font-weight:bold">Debugger</span>.start</code> method. If you wish to perform more advanced initialization, such as having the debugger accept remote network connections for interfacing with a remote debugging session or perhaps with an <span class="caps">IDE</span> (see <a href="http://www.datanoise.com/articles/category/ruby-debug">the ruby-debug documentation</a> for details), then:</p>
@@ -1537,7 +1448,7 @@ To create a prototype,
1537
1448
  </ol>
1538
1449
 
1539
1450
 
1540
- <h2 id="usage.test-runner">5.4 &nbsp; Test runner</h2>
1451
+ <h2 ><a id="usage.test-runner" href="#a-605886638">5.4</a> &nbsp; Test runner</h2>
1541
1452
 
1542
1453
 
1543
1454
  <p>A test runner is a file, generated by the <a href="#usage.tools.generate-test">automated test generator</a>, whose name ends with <tt>.rake</tt>. It helps you run generated tests&#8212;you can think of it as a <em>makefile</em> if you are familiar with C programming in a <span class="caps">UNIX</span> environment.</p>
@@ -1559,6 +1470,7 @@ rake clobber # Remove any generated file.
1559
1470
  rake cver # Simulate with GPL Cver.
1560
1471
  rake default # Show a list of available tasks.
1561
1472
  rake ivl # Simulate with Icarus Verilog.
1473
+ rake ncsim # Simulate with Cadence NC-Sim.
1562
1474
  rake vcs # Simulate with Synopsys VCS.
1563
1475
  rake vsim # Simulate with Mentor Modelsim.
1564
1476
  </pre>
@@ -1571,18 +1483,16 @@ rake vsim # Simulate with Mentor Modelsim.
1571
1483
 
1572
1484
  <div class="tip" id="tip2">
1573
1485
 
1574
- <p style="float:left"><img src="images/tip.png" title="tip" alt="tip" /></p>
1486
+ <p style="float:left"><img src="images/tango/tip.png" title="tip" alt="tip" /></p>
1575
1487
 
1576
1488
 
1577
1489
  <p class="title">Tip: Running multiple tests at once.</p>
1578
1490
 
1579
1491
 
1580
- <p>Create a file named <tt>Rakefile</tt> containing the following line.</p>
1492
+ <p>Create a file named <tt>Rakefile</tt> containing the following line:</p>
1581
1493
 
1582
1494
 
1583
- <blockquote>
1584
- <p><code class="code">require <span style="background-color:#fff0f0"><span style="color:#710">'</span><span style="color:#D20">ruby-vpi/runner_proxy</span><span style="color:#710">'</span></span></code></p>
1585
- </blockquote>
1495
+ <p><code class="code">require <span style="background-color:#fff0f0"><span style="color:#710">'</span><span style="color:#D20">ruby-vpi/runner_proxy</span><span style="color:#710">'</span></span></code></p>
1586
1496
 
1587
1497
 
1588
1498
  <p>Now you can invoke all test runners in the current directory simply by executing <pre>rake cver</pre> (where <em>cver</em> denotes the <a href="#setup.reqs"><span class="caps">GPL</span> Cver simulator</a>).</p>
@@ -1592,7 +1502,7 @@ rake vsim # Simulate with Mentor Modelsim.
1592
1502
 
1593
1503
  </div>
1594
1504
 
1595
- <h3 id="usage.test-runner.env-vars">5.4.1 &nbsp; Environment variables</h3>
1505
+ <h3 ><a id="usage.test-runner.env-vars" href="#a-605692898">5.4.1</a> &nbsp; Environment variables</h3>
1596
1506
 
1597
1507
 
1598
1508
  <p>Test runners support the following <em>environment</em> variables, which allow you to easily change the behavior of the test runner.</p>
@@ -1639,19 +1549,19 @@ Here we <em>disable</em> the prototype and enable the code coverage analysis. No
1639
1549
 
1640
1550
  </div>
1641
1551
 
1642
- <h2 id="usage.examples">5.5 &nbsp; Sample tests</h2>
1552
+ <h2 ><a id="usage.examples" href="#a-605713518">5.5</a> &nbsp; Sample tests</h2>
1643
1553
 
1644
1554
 
1645
1555
  <p>The <tt>samp</tt> directory contains several sample tests which illustrate how Ruby-VPI can be used. Each sample has an associated <tt>Rakefile</tt> which simplifies the process of running it. Therefore, simply navigate into an example directory and run the <pre>rake</pre> command to get started.</p>
1646
1556
 
1647
1557
 
1648
- <h2 id="usage.tools">5.6 &nbsp; Tools</h2>
1558
+ <h2 ><a id="usage.tools" href="#a-605735618">5.6</a> &nbsp; Tools</h2>
1649
1559
 
1650
1560
 
1651
1561
  <p>The <tt>bin</tt> directory contains various utilities which ease the process of writing tests. Each tool provides help and usage information invoked with the <tt>--help</tt> option.</p>
1652
1562
 
1653
1563
 
1654
- <h3 id="usage.tools.generate-test">5.6.1 &nbsp; Automated test generation</h3>
1564
+ <h3 ><a id="usage.tools.generate-test" href="#a-606420358">5.6.1</a> &nbsp; Automated test generation</h3>
1655
1565
 
1656
1566
 
1657
1567
  <p>The automated test generator (<strong>generate_test.rb</strong>) generates tests from Verilog 2001 module declarations, as demonstrated <a href="#usage.tutorial.generate-test">in the tutorial</a>. A generated test is composed of the following parts:</p>
@@ -1678,7 +1588,7 @@ Here we <em>disable</em> the prototype and enable the code coverage analysis. No
1678
1588
 
1679
1589
  <div class="tip" id="tip3">
1680
1590
 
1681
- <p style="float:left"><img src="images/tip.png" title="tip" alt="tip" /></p>
1591
+ <p style="float:left"><img src="images/tango/tip.png" title="tip" alt="tip" /></p>
1682
1592
 
1683
1593
 
1684
1594
  <p class="title">Tip: Using <strong>kdiff3</strong> with the automated test generator.</p>
@@ -1703,7 +1613,7 @@ kdiff3 --auto --output <span style="background-color:#fff0f0"><span style="color
1703
1613
 
1704
1614
  </div>
1705
1615
 
1706
- <h3 id="usage.tools.verilog-ruby-conv">5.6.2 &nbsp; Verilog to Ruby conversion</h3>
1616
+ <h3 ><a id="usage.tools.verilog-ruby-conv" href="#a-606426458">5.6.2</a> &nbsp; Verilog to Ruby conversion</h3>
1707
1617
 
1708
1618
 
1709
1619
  <p>The <strong>header_to_ruby.rb</strong> tool can be used to convert Verilog header files into Ruby. You can try it by running the <pre>header_to_ruby.rb --help</pre> command.</p>
@@ -1712,7 +1622,7 @@ kdiff3 --auto --output <span style="background-color:#fff0f0"><span style="color
1712
1622
  <p>By converting Verilog header files into Ruby, your <a href="#glossary.test">test</a> can utilize the same <code class="code"><span style="background-color:#f0fff0"><span style="color:#161">`</span><span style="color:#2B2">define</span></span></code> constants that are used in the Verilog <a href="#glossary.design">design</a>.</p>
1713
1623
 
1714
1624
 
1715
- <h2 id="usage.tutorial">5.7 &nbsp; Tutorial</h2>
1625
+ <h2 ><a id="usage.tutorial" href="#a-606430138">5.7</a> &nbsp; Tutorial</h2>
1716
1626
 
1717
1627
 
1718
1628
  <ol>
@@ -1726,7 +1636,7 @@ kdiff3 --auto --output <span style="background-color:#fff0f0"><span style="color
1726
1636
  </ol>
1727
1637
 
1728
1638
 
1729
- <h3 id="usage.tutorial.declare-design">5.7.1 &nbsp; Start with a design</h3>
1639
+ <h3 ><a id="usage.tutorial.declare-design" href="#a-606439718">5.7.1</a> &nbsp; Start with a design</h3>
1730
1640
 
1731
1641
 
1732
1642
  <p>First, we need a <a href="#glossary.design">design</a> to verify. In this tutorial, <a href="#fig..counter.v_decl">the example named &ldquo;Declaration of a simple up-counter with synchronous reset&rdquo;</a> will serve as our design. Its interface is composed of the following parts:</p>
@@ -1764,7 +1674,7 @@ endmodule
1764
1674
 
1765
1675
  <div class="important" id="important1">
1766
1676
 
1767
- <p style="float:left"><img src="images/important.png" title="important" alt="important" /></p>
1677
+ <p style="float:left"><img src="images/tango/important.png" title="important" alt="important" /></p>
1768
1678
 
1769
1679
 
1770
1680
  <p class="title">Important: Before we continue&#8230;</p>
@@ -1777,7 +1687,7 @@ endmodule
1777
1687
 
1778
1688
  </div>
1779
1689
 
1780
- <h3 id="usage.tutorial.generate-test">5.7.2 &nbsp; Generate a test</h3>
1690
+ <h3 ><a id="usage.tutorial.generate-test" href="#a-606447618">5.7.2</a> &nbsp; Generate a test</h3>
1781
1691
 
1782
1692
 
1783
1693
  <p>Now that we have a <a href="#glossary.design">design</a> to verify, let us generate a <a href="#glossary.test">test</a> for it using the <a href="#usage.tools.generate-test">automated test generator</a>. This tool allows us to implement our specification in either rSpec, xUnit, or our very own format.</p>
@@ -1795,7 +1705,7 @@ Each format represents a different software development methodology:
1795
1705
 
1796
1706
  <div class="note" id="note5">
1797
1707
 
1798
- <p style="float:left"><img src="images/note.png" title="note" alt="note" /></p>
1708
+ <p style="float:left"><img src="images/tango/note.png" title="note" alt="note" /></p>
1799
1709
 
1800
1710
 
1801
1711
  <p class="title">Note:</p>
@@ -1857,7 +1767,7 @@ $ generate_test.rb counter.v --xunit --name xunit
1857
1767
 
1858
1768
  </div>
1859
1769
 
1860
- <h3 id="usage.tutorial.specification">5.7.3 &nbsp; Specify your expectations</h3>
1770
+ <h3 ><a id="usage.tutorial.specification" href="#a-606455858">5.7.3</a> &nbsp; Specify your expectations</h3>
1861
1771
 
1862
1772
 
1863
1773
  <p>So far, the test generation tool has created a basic foundation for our <a href="#glossary.test">test</a>. Now we must build upon this foundation by identifying our <a href="#glossary.expectation">expectation</a> of the <a href="#glossary.design">design</a>. That is, how do we expect the design to <em>behave</em> under certain conditions?</p>
@@ -1982,7 +1892,7 @@ context <span style="background-color:#fff0f0"><span style="color:#710">&quot;</
1982
1892
 
1983
1893
  <div class="important" id="important2">
1984
1894
 
1985
- <p style="float:left"><img src="images/important.png" title="important" alt="important" /></p>
1895
+ <p style="float:left"><img src="images/tango/important.png" title="important" alt="important" /></p>
1986
1896
 
1987
1897
 
1988
1898
  <p class="title">Important: Before we continue&#8230;</p>
@@ -2007,7 +1917,7 @@ context <span style="background-color:#fff0f0"><span style="color:#710">&quot;</
2007
1917
 
2008
1918
  </div>
2009
1919
 
2010
- <h3 id="usage.tutorial.implement-proto">5.7.4 &nbsp; Implement the prototype</h3>
1920
+ <h3 ><a id="usage.tutorial.implement-proto" href="#a-606466508">5.7.4</a> &nbsp; Implement the prototype</h3>
2011
1921
 
2012
1922
 
2013
1923
  <p>Now that we have a <a href="#glossary.specification">specification</a> against which to verify our <a href="#glossary.design">design</a>, let us build a prototype of our design. By doing so, we exercise our specification, experience potential problems that may arise when we later implement our design in Verilog, and gain confidence in our work. The result of this proceess is illustrated by <a href="#fig..counter_proto.rb">the example named &ldquo;Ruby prototype of our Verilog design&rdquo;</a>.</p>
@@ -2043,7 +1953,7 @@ context <span style="background-color:#fff0f0"><span style="color:#710">&quot;</
2043
1953
 
2044
1954
  <div class="important" id="important3">
2045
1955
 
2046
- <p style="float:left"><img src="images/important.png" title="important" alt="important" /></p>
1956
+ <p style="float:left"><img src="images/tango/important.png" title="important" alt="important" /></p>
2047
1957
 
2048
1958
 
2049
1959
  <p class="title">Important: Before we continue&#8230;</p>
@@ -2056,7 +1966,7 @@ context <span style="background-color:#fff0f0"><span style="color:#710">&quot;</
2056
1966
 
2057
1967
  </div>
2058
1968
 
2059
- <h3 id="usage.tutorial.test-proto">5.7.5 &nbsp; Verify the prototype</h3>
1969
+ <h3 ><a id="usage.tutorial.test-proto" href="#a-606469388">5.7.5</a> &nbsp; Verify the prototype</h3>
2060
1970
 
2061
1971
 
2062
1972
  <p>Now that we have implemented our prototype, we are ready to verify it against our <a href="#glossary.specification">specification</a> by running the <a href="#glossary.test">test</a>. This process is illustrated by <a href="#fig..test-proto.rspec">the example named &ldquo;Running a test with specification in rSpec format&rdquo;</a> and <a href="#fig..test-proto.unit-test">the example named &ldquo;Running a test with specification in xUnit format&rdquo;</a>.</p>
@@ -2121,7 +2031,7 @@ Finished in 0.040668 seconds.
2121
2031
 
2122
2032
  <div class="tip" id="tip4">
2123
2033
 
2124
- <p style="float:left"><img src="images/tip.png" title="tip" alt="tip" /></p>
2034
+ <p style="float:left"><img src="images/tango/tip.png" title="tip" alt="tip" /></p>
2125
2035
 
2126
2036
 
2127
2037
  <p class="title">Tip: What can the test runner do?</p>
@@ -2134,7 +2044,7 @@ Finished in 0.040668 seconds.
2134
2044
 
2135
2045
  </div>
2136
2046
 
2137
- <h3 id="usage.tutorial.implement-design">5.7.6 &nbsp; Implement the design</h3>
2047
+ <h3 ><a id="usage.tutorial.implement-design" href="#a-606472858">5.7.6</a> &nbsp; Implement the design</h3>
2138
2048
 
2139
2049
 
2140
2050
  <p>Now that we have implemented and verified our prototype, we are ready to implement our <a href="#glossary.design">design</a>. This is often quite simple because we translate <em>existing</em> code from Ruby (our prototype) into Verilog (our design). The result of this process is illustrated by <a href="#fig..counter.v_impl">the example named &ldquo;Implementation of a simple up-counter with synchronous reset&rdquo;</a>.</p>
@@ -2177,7 +2087,7 @@ endmodule
2177
2087
 
2178
2088
  <div class="important" id="important4">
2179
2089
 
2180
- <p style="float:left"><img src="images/important.png" title="important" alt="important" /></p>
2090
+ <p style="float:left"><img src="images/tango/important.png" title="important" alt="important" /></p>
2181
2091
 
2182
2092
 
2183
2093
  <p class="title">Important: Before we continue&#8230;</p>
@@ -2190,7 +2100,7 @@ endmodule
2190
2100
 
2191
2101
  </div>
2192
2102
 
2193
- <h3 id="usage.tutorial.test-design">5.7.7 &nbsp; Verify the design</h3>
2103
+ <h3 ><a id="usage.tutorial.test-design" href="#a-606480598">5.7.7</a> &nbsp; Verify the design</h3>
2194
2104
 
2195
2105
 
2196
2106
  <p>Now that we have implemented our <a href="#glossary.design">design</a>, we are ready to verify it against our <a href="#glossary.specification">specification</a> by running the <a href="#glossary.test">test</a>. <a href="#fig..test-design.rspec">the example named &ldquo;Running a test with specification in rSpec format&rdquo;</a> and <a href="#fig..test-design.unit-test">the example named &ldquo;Running a test with specification in xUnit format&rdquo;</a> illustrate this process.</p>
@@ -2247,10 +2157,19 @@ Finished in 0.006766 seconds.
2247
2157
 
2248
2158
  </div>
2249
2159
 
2250
- <h1 id="hacking">6 &nbsp; Hacking</h1>
2160
+ <h1 ><a id="hacking" href="#a-606487878">6</a> &nbsp; Hacking</h1>
2161
+
2162
+
2163
+ <h2 ><a id="hacking.scm" href="#a-606495208">6.1</a> &nbsp; Getting the source code</h2>
2251
2164
 
2252
2165
 
2253
- <h2 id="hacking.release-packages">6.1 &nbsp; Building release packages</h2>
2166
+ <p>Check out the source code using <a href="http://darcs.net">Darcs</a> from the project repository:</p>
2167
+
2168
+
2169
+ <pre>darcs get http://ruby-vpi.rubyforge.org/src/ruby-vpi</pre>
2170
+
2171
+
2172
+ <h2 ><a id="hacking.release-packages" href="#a-606502868">6.2</a> &nbsp; Building release packages</h2>
2254
2173
 
2255
2174
 
2256
2175
  <p>In addition to the <a href="#setup.reqs">normal requirements</a>, you need the following software to build release packages:</p>
@@ -2266,23 +2185,23 @@ Finished in 0.006766 seconds.
2266
2185
  <p>Once you have satisfied these requirements, you can run <pre>rake release</pre> to build the release packages. Also, see the output of <pre>rake -T</pre> for more build options.</p>
2267
2186
 
2268
2187
 
2269
- <h1 id="problems">7 &nbsp; Known problems</h1>
2188
+ <h1 ><a id="problems" href="#a-606510668">7</a> &nbsp; Known problems</h1>
2270
2189
 
2271
2190
 
2272
2191
  <p>This chapter presents known problems and possible solutions. In addition, previously solved problems have been retained for historical reference.</p>
2273
2192
 
2274
2193
 
2275
- <h2 id="problems.ruby">7.1 &nbsp; Ruby</h2>
2194
+ <h2 ><a id="problems.ruby" href="#a-606514648">7.1</a> &nbsp; Ruby</h2>
2276
2195
 
2277
2196
 
2278
- <h3 id="problems.ruby.SystemStackError">7.1.1 &nbsp; SystemStackError</h3>
2197
+ <h3 ><a id="problems.ruby.SystemStackError" href="#a-606529698">7.1.1</a> &nbsp; SystemStackError</h3>
2279
2198
 
2280
2199
 
2281
2200
  <div class="admonition">
2282
2201
 
2283
2202
  <div class="note" id="note6">
2284
2203
 
2285
- <p style="float:left"><img src="images/note.png" title="note" alt="note" /></p>
2204
+ <p style="float:left"><img src="images/tango/note.png" title="note" alt="note" /></p>
2286
2205
 
2287
2206
 
2288
2207
  <p class="title">Note: Fixed in 2.0.0.</p>
@@ -2298,14 +2217,14 @@ Finished in 0.006766 seconds.
2298
2217
  <p>If a &#8220;stack level too deep (SystemStackError)&#8221; error occurs during the simulation, then increase the system-resource limit for stack-size by running the <pre>ulimit -s unlimited</pre> command before starting the simulation.</p>
2299
2218
 
2300
2219
 
2301
- <h3 id="problems.ruby.xUnit">7.1.2 &nbsp; test/unit</h3>
2220
+ <h3 ><a id="problems.ruby.xUnit" href="#a-606545738">7.1.2</a> &nbsp; test/unit</h3>
2302
2221
 
2303
2222
 
2304
2223
  <div class="admonition">
2305
2224
 
2306
2225
  <div class="note" id="note7">
2307
2226
 
2308
- <p style="float:left"><img src="images/note.png" title="note" alt="note" /></p>
2227
+ <p style="float:left"><img src="images/tango/note.png" title="note" alt="note" /></p>
2309
2228
 
2310
2229
 
2311
2230
  <p class="title">Note: Fixed in 2.0.0.</p>
@@ -2321,13 +2240,13 @@ Finished in 0.006766 seconds.
2321
2240
  <p>If your specification employs Ruby&#8217;s unit testing framework, then you will encounter an error saying &#8220;[BUG] cross-thread violation on rb_gc()&#8221;.</p>
2322
2241
 
2323
2242
 
2324
- <h2 id="problem.ivl">7.2 &nbsp; Icarus Verilog</h2>
2243
+ <h2 ><a id="problem.ivl" href="#a-606557578">7.2</a> &nbsp; Icarus Verilog</h2>
2325
2244
 
2326
2245
 
2327
- <h3 id="problems.ivl.vpi_handle_by_name">7.2.1 &nbsp; Vpi::vpi_handle_by_name</h3>
2246
+ <h3 ><a id="problems.ivl.vpi_handle_by_name" href="#a-606563378">7.2.1</a> &nbsp; Vpi::vpi_handle_by_name</h3>
2328
2247
 
2329
2248
 
2330
- <h4 id="problems.ivl.vpi_handle_by_name.absolute-paths">7.2.1.1 &nbsp; Give full paths to Verilog objects</h4>
2249
+ <h4 ><a id="problems.ivl.vpi_handle_by_name.absolute-paths" href="#a-606577748">7.2.1.1</a> &nbsp; Give full paths to Verilog objects</h4>
2331
2250
 
2332
2251
 
2333
2252
  <p>In version 0.8 and snapshot 20061009 of Icarus Verilog, the <code class="code">vpi_handle_by_name</code> function requires an <em>absolute</em> path (including the name of the bench which instantiates the design) to a Verilog object. In addition, <code class="code">vpi_handle_by_name</code> always returns <code class="code"><span style="color:#038; font-weight:bold">nil</span></code> when its second parameter is specified.</p>
@@ -2354,7 +2273,7 @@ endmodule
2354
2273
 
2355
2274
  </div>
2356
2275
 
2357
- <h4 id="problems.ivl.vpi_handle_by_name.connect-registers">7.2.1.2 &nbsp; Registers must be connected</h4>
2276
+ <h4 ><a id="problems.ivl.vpi_handle_by_name.connect-registers" href="#a-606588618">7.2.1.2</a> &nbsp; Registers must be connected</h4>
2358
2277
 
2359
2278
 
2360
2279
  <p>In version 0.8 of Icarus Verilog, if you want to access a register in a design, then it must be connected to something (either assigned to a wire or passed as a parameter to a module instantiation). Otherwise, you will get a <code class="code"><span style="color:#038; font-weight:bold">nil</span></code> value as the result of <code class="code">vpi_handle_by_name</code> method.</p>
@@ -2408,23 +2327,23 @@ endmodule
2408
2327
 
2409
2328
  </div>
2410
2329
 
2411
- <h3 id="problems.ivl.vpi_reset">7.2.2 &nbsp; Vpi::reset</h3>
2330
+ <h3 ><a id="problems.ivl.vpi_reset" href="#a-606593458">7.2.2</a> &nbsp; Vpi::reset</h3>
2412
2331
 
2413
2332
 
2414
2333
  <p>In version 0.8 of Icarus Verilog, the <code class="code">vpi_control(vpiReset)</code> VPI function causes an assertion to fail inside the simulator. As a result, the simulation terminates and a core dump is produced.</p>
2415
2334
 
2416
2335
 
2417
- <h2 id="problems.vsim">7.3 &nbsp; Mentor Modelsim</h2>
2336
+ <h2 ><a id="problems.vsim" href="#a-606596948">7.3</a> &nbsp; Mentor Modelsim</h2>
2418
2337
 
2419
2338
 
2420
- <h3 id="problems.vsim.ruby_run">7.3.1 &nbsp; ruby_run();</h3>
2339
+ <h3 ><a id="problems.vsim.ruby_run" href="#a-606600738">7.3.1</a> &nbsp; ruby_run();</h3>
2421
2340
 
2422
2341
 
2423
2342
  <div class="admonition">
2424
2343
 
2425
2344
  <div class="note" id="note8">
2426
2345
 
2427
- <p style="float:left"><img src="images/note.png" title="note" alt="note" /></p>
2346
+ <p style="float:left"><img src="images/tango/note.png" title="note" alt="note" /></p>
2428
2347
 
2429
2348
 
2430
2349
  <p class="title">Note: Fixed in 2.0.0.</p>
@@ -2440,16 +2359,16 @@ endmodule
2440
2359
  <p>Version 6.1b of Mentor Modelsim doesn&#8217;t play nicely with either an embedded Ruby interpreter or <span class="caps">POSIX</span> threads in a <span class="caps">PLI</span> application. When Ruby-VPI invokes the ruby_run function (which starts the Ruby interpreter), the simulator terminates immediately with an exit status of 0.</p>
2441
2360
 
2442
2361
 
2443
- <h1 id="glossary">8 &nbsp; Glossary</h1>
2362
+ <h1 ><a id="glossary" href="#a-606604778">8</a> &nbsp; Glossary</h1>
2444
2363
 
2445
2364
 
2446
- <h2 id="glossary.bench">8.1 &nbsp; Bench</h2>
2365
+ <h2 ><a id="glossary.bench" href="#a-606606678">8.1</a> &nbsp; Bench</h2>
2447
2366
 
2448
2367
 
2449
2368
  <p>An environment in which a <a href="#glossary.design">design</a> is verified against a <a href="#glossary.specification">specification</a>. Often, it is used to emulate conditions in which the design will be eventually deployed.</p>
2450
2369
 
2451
2370
 
2452
- <h2 id="glossary.BDD">8.2 &nbsp; Behavior driven development (BDD)</h2>
2371
+ <h2 ><a id="glossary.BDD" href="#a-606613558">8.2</a> &nbsp; Behavior driven development (BDD)</h2>
2453
2372
 
2454
2373
 
2455
2374
  <p>An <a href="http://agilemanifesto.org/">agile software development methodology</a> which emphasizes thinking in terms of behavior when designing, implementing, and verifying software.</p>
@@ -2458,25 +2377,25 @@ endmodule
2458
2377
  <p>See the <a href="http://behaviour-driven.org/">official wiki</a> for more information.</p>
2459
2378
 
2460
2379
 
2461
- <h2 id="glossary.design">8.3 &nbsp; Design</h2>
2380
+ <h2 ><a id="glossary.design" href="#a-606620958">8.3</a> &nbsp; Design</h2>
2462
2381
 
2463
2382
 
2464
2383
  <p>A Verilog module that is verified against a <a href="#glossary.specification">specification</a> in order to ensure correctness or soundness of its being. In other words, it is the thing being checked: does it work or not?</p>
2465
2384
 
2466
2385
 
2467
- <h2 id="glossary.expectation">8.4 &nbsp; Expectation</h2>
2386
+ <h2 ><a id="glossary.expectation" href="#a-606623008">8.4</a> &nbsp; Expectation</h2>
2468
2387
 
2469
2388
 
2470
2389
  <p>The desired response to some stimulus.</p>
2471
2390
 
2472
2391
 
2473
- <h2 id="glossary.handle">8.5 &nbsp; Handle</h2>
2392
+ <h2 ><a id="glossary.handle" href="#a-606624858">8.5</a> &nbsp; Handle</h2>
2474
2393
 
2475
2394
 
2476
2395
  <p>A reference to an object inside the Verilog simulation that was obtained through the <code class="code">vpi_handle_by_name</code> function.</p>
2477
2396
 
2478
2397
 
2479
- <h2 id="glossary.rake">8.6 &nbsp; Rake</h2>
2398
+ <h2 ><a id="glossary.rake" href="#a-606628418">8.6</a> &nbsp; Rake</h2>
2480
2399
 
2481
2400
 
2482
2401
  <blockquote>
@@ -2484,12 +2403,10 @@ endmodule
2484
2403
  </blockquote>
2485
2404
 
2486
2405
 
2487
- <blockquote>
2488
- <p style="text-align:right;">&#8212;<a href="http://docs.rubyrake.org">Rake documentation</a></p>
2489
- </blockquote>
2406
+ <p style="text-align:right;">&#8212;<a href="http://docs.rubyrake.org">Rake documentation</a></p>
2490
2407
 
2491
2408
 
2492
- <h2 id="glossary.rspec">8.7 &nbsp; rSpec</h2>
2409
+ <h2 ><a id="glossary.rspec" href="#a-606630878">8.7</a> &nbsp; rSpec</h2>
2493
2410
 
2494
2411
 
2495
2412
  <p>The <a href="#glossary.BDD"><span class="caps">BDD</span></a> framework for Ruby.</p>
@@ -2498,13 +2415,13 @@ endmodule
2498
2415
  <p>See the <a href="http://rspec.rubyforge.org">rSpec website</a> and <a href="http://rspec.rubyforge.org/tutorials/index.html">tutorial</a> for more information.</p>
2499
2416
 
2500
2417
 
2501
- <h2 id="glossary.specification">8.8 &nbsp; Specification</h2>
2418
+ <h2 ><a id="glossary.specification" href="#a-606636388">8.8</a> &nbsp; Specification</h2>
2502
2419
 
2503
2420
 
2504
2421
  <p>A set of <a href="#glossary.expectations">expectations</a> which define the desired behavior of a <a href="#glossary.design">design</a> when it is subjected to certain stimulus.</p>
2505
2422
 
2506
2423
 
2507
- <h2 id="glossary.TDD">8.9 &nbsp; Test driven development (TDD)</h2>
2424
+ <h2 ><a id="glossary.TDD" href="#a-606640878">8.9</a> &nbsp; Test driven development (TDD)</h2>
2508
2425
 
2509
2426
 
2510
2427
  <p>An <a href="http://agilemanifesto.org/">agile software development methodology</a> which emphasizes (1) testing functionality before implementing it and (2) refactoring.</p>
@@ -2513,13 +2430,13 @@ endmodule
2513
2430
  <p>See <a href="http://www.agiledata.org/essays/tdd.html">this introductory article</a> for more information.</p>
2514
2431
 
2515
2432
 
2516
- <h2 id="glossary.test">9.0 &nbsp; Test</h2>
2433
+ <h2 ><a id="glossary.test" href="#a-606643148">9.0</a> &nbsp; Test</h2>
2517
2434
 
2518
2435
 
2519
2436
  <p>Something that checks if a <a href="#glossary.design">design</a> satisfies a <a href="#glossary.specification">specification</a>.</p>
2520
2437
 
2521
2438
 
2522
- <h2 id="glossary.test_bench">9.1 &nbsp; Test bench</h2>
2439
+ <h2 ><a id="glossary.test_bench" href="#a-606646838">9.1</a> &nbsp; Test bench</h2>
2523
2440
 
2524
2441
 
2525
2442
  <p>An allusion to <a href="#background.vocab">a bench in an electronics laboratory</a>, or so it seems.</p>