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.
- data/LICENSE +23 -340
- data/Rakefile +169 -192
- data/bin/generate_test.rb +26 -25
- data/bin/generate_test_tpl/runner.rake +4 -10
- data/bin/header_to_ruby.rb +3 -20
- data/doc/README +11 -0
- data/doc/Rakefile +8 -21
- data/doc/common.css +44 -10
- data/doc/common.tpl +5 -10
- data/doc/history.doc +8 -7
- data/doc/history.html +228 -560
- data/doc/history.rb +7 -11
- data/doc/{history.yml → history.yaml} +325 -128
- data/doc/images/{feed-icon.png → feed-icon-28x28.png} +0 -0
- data/doc/images/ruby/LICENSE +15 -0
- data/doc/images/ruby/logo-reflection.png +0 -0
- data/doc/images/ruby/logo-reflection.xcf +0 -0
- data/doc/images/ruby/logo.png +0 -0
- data/doc/images/{LICENSE → tango/LICENSE} +0 -0
- data/doc/images/{caution.png → tango/caution.png} +0 -0
- data/doc/images/{caution.svg → tango/caution.svg} +0 -0
- data/doc/images/{home.png → tango/home.png} +0 -0
- data/doc/images/{home.svg → tango/home.svg} +0 -0
- data/doc/images/{important.png → tango/important.png} +0 -0
- data/doc/images/{important.svg → tango/important.svg} +0 -0
- data/doc/images/{next.png → tango/next.png} +0 -0
- data/doc/images/{next.svg → tango/next.svg} +0 -0
- data/doc/images/{note.png → tango/note.png} +0 -0
- data/doc/images/{note.svg → tango/note.svg} +0 -0
- data/doc/images/{prev.png → tango/prev.png} +0 -0
- data/doc/images/{prev.svg → tango/prev.svg} +0 -0
- data/doc/images/{tip.png → tango/tip.png} +0 -0
- data/doc/images/{tip.svg → tango/tip.svg} +0 -0
- data/doc/images/{up.png → tango/up.png} +0 -0
- data/doc/images/{up.svg → tango/up.svg} +0 -0
- data/doc/images/{warning.png → tango/warning.png} +0 -0
- data/doc/images/{warning.svg → tango/warning.svg} +0 -0
- data/doc/intro.inc +105 -36
- data/doc/lib/doc_format.rb +151 -29
- data/doc/lib/doc_proxy.rb +28 -69
- data/doc/lib/erb_content.rb +10 -22
- data/doc/lib/erb_proxy.rb +13 -24
- data/doc/manual.doc +16 -60
- data/doc/manual.html +257 -340
- data/doc/memo.doc +2 -0
- data/doc/memo.html +11 -11
- data/doc/readme.doc +36 -2
- data/doc/readme.html +214 -51
- data/doc/rss.erb +3 -3
- data/doc/rss.xml +217 -269
- data/ext/Rakefile +7 -22
- data/ext/common.h +10 -21
- data/ext/extconf.rb +5 -0
- data/ext/main.c +2 -18
- data/ext/main.h +1 -16
- data/ext/relay.c +3 -17
- data/ext/relay.h +3 -17
- data/ext/verilog.h +6 -18
- data/ext/vlog.c +3 -21
- data/ext/vlog.h +3 -17
- data/lib/ruby-vpi/erb.rb +7 -20
- data/lib/ruby-vpi/float.rb +6 -20
- data/lib/ruby-vpi/integer.rb +27 -47
- data/lib/ruby-vpi/rake.rb +4 -19
- data/lib/ruby-vpi/rcov.rb +6 -21
- data/lib/ruby-vpi/rdoc.rb +3 -21
- data/lib/ruby-vpi/runner.rb +28 -29
- data/lib/ruby-vpi/runner_proxy.rb +5 -21
- data/lib/ruby-vpi/verilog_parser.rb +5 -20
- data/lib/ruby-vpi/vpi.rb +420 -376
- data/lib/ruby-vpi.rb +26 -32
- data/ref/c/annotated.html +1 -1
- data/ref/c/common_8h.html +1 -1
- data/ref/c/files.html +1 -1
- data/ref/c/functions.html +1 -1
- data/ref/c/functions_vars.html +1 -1
- data/ref/c/globals.html +1 -1
- data/ref/c/globals_0x63.html +1 -1
- data/ref/c/globals_0x65.html +1 -1
- data/ref/c/globals_0x66.html +1 -1
- data/ref/c/globals_0x6d.html +1 -1
- data/ref/c/globals_0x70.html +1 -1
- data/ref/c/globals_0x72.html +1 -1
- data/ref/c/globals_0x73.html +1 -1
- data/ref/c/globals_0x74.html +1 -1
- data/ref/c/globals_0x76.html +1 -1
- data/ref/c/globals_0x78.html +1 -1
- data/ref/c/globals_defs.html +1 -1
- data/ref/c/globals_defs_0x65.html +1 -1
- data/ref/c/globals_defs_0x70.html +1 -1
- data/ref/c/globals_defs_0x76.html +1 -1
- data/ref/c/globals_defs_0x78.html +1 -1
- data/ref/c/globals_enum.html +1 -1
- data/ref/c/globals_eval.html +1 -1
- data/ref/c/globals_func.html +1 -1
- data/ref/c/globals_type.html +1 -1
- data/ref/c/globals_vars.html +1 -1
- data/ref/c/index.html +1 -1
- data/ref/c/main_8c.html +1 -1
- data/ref/c/main_8h.html +1 -1
- data/ref/c/relay_8c.html +1 -1
- data/ref/c/relay_8h.html +1 -1
- data/ref/c/structt__cb__data.html +1 -1
- data/ref/c/structt__vpi__delay.html +1 -1
- data/ref/c/structt__vpi__error__info.html +1 -1
- data/ref/c/structt__vpi__strengthval.html +1 -1
- data/ref/c/structt__vpi__systf__data.html +1 -1
- data/ref/c/structt__vpi__time.html +1 -1
- data/ref/c/structt__vpi__value.html +1 -1
- data/ref/c/structt__vpi__vecval.html +1 -1
- data/ref/c/structt__vpi__vlog__info.html +1 -1
- data/ref/c/verilog_8h.html +1 -1
- data/ref/c/vlog_8c.html +1 -1
- data/ref/c/vlog_8h.html +1 -1
- data/ref/c/vpi__user_8h.html +1 -1
- data/ref/ruby/classes/ERB.html +5 -5
- data/ref/ruby/classes/ERB.src/{M000026.html → M000024.html} +15 -15
- data/ref/ruby/classes/FileUtils.html +10 -10
- data/ref/ruby/classes/FileUtils.src/{M000027.html → M000025.html} +4 -4
- data/ref/ruby/classes/FileUtils.src/{M000028.html → M000026.html} +4 -4
- data/ref/ruby/classes/Float.html +5 -5
- data/ref/ruby/classes/Float.src/{M000022.html → M000020.html} +5 -5
- data/ref/ruby/classes/Integer.html +20 -56
- data/ref/ruby/classes/Integer.src/M000008.html +11 -11
- data/ref/ruby/classes/Integer.src/M000009.html +4 -4
- data/ref/ruby/classes/Integer.src/M000010.html +4 -4
- data/ref/ruby/classes/Integer.src/M000011.html +4 -4
- data/ref/ruby/classes/Integer.src/M000012.html +4 -4
- data/ref/ruby/classes/Integer.src/M000013.html +4 -4
- data/ref/ruby/classes/Integer.src/M000016.html +12 -9
- data/ref/ruby/classes/Integer.src/M000017.html +18 -9
- data/ref/ruby/classes/Integer.src/M000018.html +12 -12
- data/ref/ruby/classes/Integer.src/M000019.html +17 -18
- data/ref/ruby/classes/RDoc.src/M000053.html +25 -25
- data/ref/ruby/classes/RubyVpi/Config.html +3 -3
- data/ref/ruby/classes/RubyVpi.html +11 -5
- data/ref/ruby/classes/RubyVpi.src/{M000029.html → M000027.html} +103 -101
- data/ref/ruby/classes/String.html +21 -15
- data/ref/ruby/classes/String.src/M000021.html +36 -0
- data/ref/ruby/classes/String.src/{M000024.html → M000022.html} +24 -24
- data/ref/ruby/classes/String.src/M000023.html +5 -23
- data/ref/ruby/classes/VerilogParser/Module/Parameter.src/M000007.html +5 -5
- data/ref/ruby/classes/VerilogParser/Module/Port.src/M000003.html +7 -7
- data/ref/ruby/classes/VerilogParser/Module/Port.src/M000004.html +4 -4
- data/ref/ruby/classes/VerilogParser/Module/Port.src/M000005.html +4 -4
- data/ref/ruby/classes/VerilogParser/Module/Port.src/M000006.html +4 -4
- data/ref/ruby/classes/VerilogParser/Module.src/M000002.html +20 -20
- data/ref/ruby/classes/VerilogParser.html +6 -0
- data/ref/ruby/classes/VerilogParser.src/M000001.html +20 -20
- data/ref/ruby/classes/Vpi/Handle.html +89 -88
- data/ref/ruby/classes/Vpi/Handle.src/M000036.html +18 -0
- data/ref/ruby/classes/Vpi/Handle.src/M000037.html +5 -5
- data/ref/ruby/classes/Vpi/Handle.src/M000038.html +5 -5
- data/ref/ruby/classes/Vpi/Handle.src/M000039.html +5 -5
- data/ref/ruby/classes/Vpi/Handle.src/M000040.html +8 -5
- data/ref/ruby/classes/Vpi/Handle.src/M000041.html +8 -8
- data/ref/ruby/classes/Vpi/Handle.src/M000042.html +7 -6
- data/ref/ruby/classes/Vpi/Handle.src/M000043.html +31 -9
- data/ref/ruby/classes/Vpi/Handle.src/M000044.html +74 -31
- data/ref/ruby/classes/Vpi/Handle.src/M000045.html +17 -74
- data/ref/ruby/classes/Vpi/Handle.src/M000046.html +11 -17
- data/ref/ruby/classes/Vpi/Handle.src/M000048.html +31 -0
- data/ref/ruby/classes/Vpi/Handle.src/M000049.html +53 -52
- data/ref/ruby/classes/Vpi/S_vpi_time.src/M000050.html +4 -4
- data/ref/ruby/classes/Vpi/S_vpi_time.src/M000051.html +5 -5
- data/ref/ruby/classes/Vpi/S_vpi_value.html +15 -15
- data/ref/ruby/classes/Vpi/S_vpi_value.src/{M000036.html → M000033.html} +5 -5
- data/ref/ruby/classes/Vpi/S_vpi_value.src/M000034.html +5 -5
- data/ref/ruby/classes/Vpi/S_vpi_value.src/M000035.html +5 -5
- data/ref/ruby/classes/Vpi.html +48 -19
- data/ref/ruby/classes/Vpi.src/M000028.html +28 -0
- data/ref/ruby/classes/Vpi.src/M000029.html +18 -0
- data/ref/ruby/classes/Vpi.src/M000030.html +25 -15
- data/ref/ruby/classes/Vpi.src/M000031.html +9 -5
- data/ref/ruby/classes/Vpi.src/M000032.html +9 -25
- data/ref/ruby/created.rid +1 -1
- data/ref/ruby/files/bin/generate_test_rb.html +2 -1
- data/ref/ruby/files/bin/header_to_ruby_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/erb_rb.html +7 -1
- data/ref/ruby/files/lib/ruby-vpi/float_rb.html +7 -1
- data/ref/ruby/files/lib/ruby-vpi/integer_rb.html +7 -1
- data/ref/ruby/files/lib/ruby-vpi/rake_rb.html +7 -1
- data/ref/ruby/files/lib/ruby-vpi/rcov_rb.html +7 -1
- data/ref/ruby/files/lib/ruby-vpi/rdoc_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/runner_proxy_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/runner_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/verilog_parser_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/vpi_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi_rb.html +7 -1
- data/ref/ruby/fr_method_index.html +34 -34
- data/samp/counter/counter_rspec_runner.rake +4 -0
- data/samp/counter/counter_xunit_runner.rake +4 -0
- data/samp/pipelined_alu/Hw5UnitModel.rb +3 -19
- data/samp/pipelined_alu/README +38 -13
- data/samp/pipelined_alu/TestHw5UnitModel.rb +9 -20
- data/samp/pipelined_alu/hw5_unit.v +1 -16
- data/samp/pipelined_alu/hw5_unit_test_runner.rake +4 -0
- data/samp/pipelined_alu/hw5_unit_test_spec.rb +3 -20
- data/samp/pipelined_alu/int_gen.rb +6 -20
- metadata +47 -43
- data/doc/LICENSE +0 -397
- data/doc/images/feed-icon.LICENSE +0 -2
- data/doc/images/feed-icon.svg +0 -18
- data/ref/ruby/classes/Integer.src/M000020.html +0 -25
- data/ref/ruby/classes/Integer.src/M000021.html +0 -30
- data/ref/ruby/classes/String.src/M000025.html +0 -18
- data/ref/ruby/classes/Vpi/Handle.src/M000047.html +0 -24
- 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
|
-
|
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> · <a href="#figures">Figures</a> · <a href="#tables">Tables</a> · <a href="#examples">Examples</a> · <a href="#tips">Tips</a> · <a href="#notes">Notes</a> · <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’s relatives</a></li>
|
80
|
-
<li>5.1.1.2 <a href="#anchor10">Accessing a handle’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’s relatives</a></li><li><a id="a-606305088" href="#Accessing_a_handle__8217_s_properties">Accessing a handle’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…</a></li>
|
224
83
|
</ol>
|
225
84
|
</div>
|
226
|
-
<h1 id="
|
85
|
+
<h1><a id="Ruby-VPI_user_manual" href="#a-606992228">1</a> Ruby-VPI user manual</h1>
|
227
86
|
|
228
87
|
|
229
|
-
<p>This manual was last updated on
|
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="
|
100
|
+
<h2 ><a id="legal" href="#a-606993518">1.1</a> 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©
|
106
|
+
<p>The admonition and navigation graphics used in this manual are Copyright© 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
|
-
<
|
109
|
+
<h1 ><a id="intro" href="#a-606994448">2</a> Introduction</h1>
|
248
110
|
|
249
111
|
|
250
|
-
<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
|
-
<
|
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
|
-
|
125
|
+
|
126
|
+
<div id="resources">
|
127
|
+
|
128
|
+
<h2><a id="Resources" href="#a-606995298">2.1</a> 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’s new?</a>
|
139
|
+
– a record of all release notes.</li>
|
140
|
+
<li><a href="memo.html">Plans</a>
|
141
|
+
– pending tasks for future releases.</li>
|
142
|
+
<li><a href="http://ruby-vpi.rubyforge.org/talks/">Talks</a>
|
143
|
+
– materials from presentations and seminars.</li>
|
144
|
+
<li><a href="http://ruby-vpi.rubyforge.org/papers/">Papers</a>
|
145
|
+
– 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
|
-
– keep track of new releases at your leisure.</li>
|
278
|
-
<li><a href="history.html">Release history</a>
|
279
|
-
– record of all release notes.</li>
|
280
|
-
<li><a href="memo.html">Memorandum</a>
|
281
|
-
– 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/
|
290
|
-
– 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
|
-
– 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
|
– obtain release packages.</li>
|
168
|
+
<li><a href="http://ruby-vpi.rubyforge.org/src/ruby-vpi">Source code</a>
|
169
|
+
– 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
|
+
– discuss things and ask questions.</li>
|
295
172
|
<li><a href="http://rubyforge.org/tracker/?group_id=1339">Bugs</a>
|
296
173
|
– report defects in the software.</li>
|
297
174
|
<li><a href="http://rubyforge.org/tracker/?group_id=1339">Patches</a>
|
298
175
|
– submit patches to source code.</li>
|
299
176
|
<li><a href="http://rubyforge.org/tracker/?group_id=1339">Requests</a>
|
300
177
|
– request new features or get support.</li>
|
301
|
-
<li><a href="http://rubyforge.org/
|
302
|
-
–
|
178
|
+
<li><a href="http://rubyforge.org/projects/ruby-vpi">Project portal</a>
|
179
|
+
– hosted generously by <a href="http://rubyforge.org">RubyForge</a>.</li>
|
303
180
|
</ul>
|
304
181
|
|
305
182
|
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
<ul>
|
310
|
-
<li><a href="http://ruby-vpi.rubyforge.org/news">News</a>
|
311
|
-
– see what’s cooking for the next release.</li>
|
312
|
-
<li><a href="http://ruby-vpi.rubyforge.org/talks">Talks</a>
|
313
|
-
– materials from presentations and seminars.</li>
|
314
|
-
</ul>
|
315
|
-
|
183
|
+
</div>
|
316
184
|
|
317
|
-
<h2 id="intro.features">2.
|
185
|
+
<h2 ><a id="intro.features" href="#a-606996238">2.2</a> Features</h2>
|
318
186
|
|
319
187
|
|
320
|
-
<
|
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
|
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
|
-
<
|
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 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
|
-
<
|
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
|
-
<
|
242
|
+
<h2 ><a id="intro.reqs" href="#a-606997278">2.3</a> 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
|
255
|
+
<li><a href="http://www.synopsys.com/products/simulation/simulation.html">Synopsys <span class="caps">VCS</span></a>
|
256
|
+
– any version that supports the <tt>-load</tt> option is acceptable.</li>
|
385
257
|
</ul>
|
386
258
|
|
387
259
|
|
388
|
-
<
|
260
|
+
<ul>
|
261
|
+
<li><a href="http://www.model.com">Mentor Modelsim</a>
|
262
|
+
– 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
|
+
– 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
|
+
– 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
|
+
– version 0.8 is <em>mostly</em> acceptable—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
|
+
– any flavor should be acceptable.</li>
|
290
|
+
</ul>
|
291
|
+
|
292
|
+
|
293
|
+
<ul>
|
294
|
+
<li>C compiler
|
295
|
+
– 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
|
+
– 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>
|
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
|
+
– 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
|
+
– 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> 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.
|
354
|
+
<h2 ><a id="intro.appetizers" href="#a-606999338">2.5</a> Appetizers</h2>
|
423
355
|
|
424
356
|
|
425
|
-
<p>Here is a
|
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.
|
400
|
+
<h2 ><a id="intro.license" href="#a-607000438">2.6</a> License</h2>
|
401
|
+
|
402
|
+
|
403
|
+
<p>Copyright© 2006-2007 Suraj N. Kurapati</p>
|
469
404
|
|
470
405
|
|
471
|
-
<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 “Software”),
|
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
|
-
<
|
414
|
+
<p>All copies and portions of the Software (together the “Derivatives”) and
|
415
|
+
their corresponding machine-readable source code (the “Code”) 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> “AS IS”, <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> 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.
|
443
|
+
<h3 ><a id="intro.related-works.pli" href="#a-606035648">2.7.1</a> 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 Background</h1>
|
456
|
+
<h1 ><a id="background" href="#a-606053288">3</a> Background</h1>
|
500
457
|
|
501
458
|
|
502
|
-
<h2 id="background.methodology">3.1 Methodology</h2>
|
459
|
+
<h2 ><a id="background.methodology" href="#a-606069898">3.1</a> 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 Terminology</h2>
|
465
|
+
<h2 ><a id="background.vocab" href="#a-606106808">3.2</a> 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’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 Organization</h2>
|
497
|
+
<h2 ><a id="background.org" href="#a-606127698">3.3</a> 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 Ruby/Verilog interaction</h2>
|
540
|
+
<h2 ><a id="background.relay" href="#a-606150238">3.4</a> 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 Setup</h1>
|
577
|
+
<h1 ><a id="setup" href="#a-606180548">4</a> Setup</h1>
|
621
578
|
|
622
579
|
|
623
|
-
<h2 id="setup.manifest">4.1 Manifest</h2>
|
580
|
+
<h2 ><a id="setup.manifest" href="#a-606192588">4.1</a> 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 Requirements</h2>
|
596
|
+
<h2 ><a id="setup.reqs" href="#a-606206048">4.2</a> Requirements</h2>
|
640
597
|
|
641
598
|
|
642
|
-
<p>
|
643
|
-
|
644
|
-
|
645
|
-
<ul>
|
646
|
-
<li>Verilog simulator
|
647
|
-
– 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
|
-
– version 2.11a or newer is acceptable.</li>
|
651
|
-
<li><a href="http://www.icarus.com/eda/Verilog/">Icarus Verilog</a>
|
652
|
-
– version 0.8 is <em>mostly</em> acceptable—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 “Give full paths to Verilog objects”</a>.</li>
|
653
|
-
<li><a href="http://www.synopsys.com/products/simulation/simulation.html">Synopsys <span class="caps">VCS</span></a>
|
654
|
-
– any version that supports the <tt>-load</tt> option is acceptable.</li>
|
655
|
-
<li><a href="http://www.model.com">Mentor Modelsim</a>
|
656
|
-
– 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 “Requirements”</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
|
-
<
|
679
|
-
<li><strong>make</strong>
|
680
|
-
– any distribution should be acceptable.</li>
|
681
|
-
</ul>
|
682
|
-
|
683
|
-
|
684
|
-
<ul>
|
685
|
-
<li>C compiler
|
686
|
-
– 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
|
-
– 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
|
-
– 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
|
-
– 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 Recommendations</h2>
|
619
|
+
<h2 ><a id="setup.recom" href="#a-606213438">4.3</a> 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 Text merging tool</h3>
|
625
|
+
<h3 ><a id="setup.recom.merger" href="#a-606235588">4.3.1</a> 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 Installation</h2>
|
638
|
+
<h2 ><a id="setup.installation" href="#a-606251368">4.4</a> 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 Installing on Windows</h3>
|
652
|
+
<h3 ><a id="setup.installation.windows" href="#a-606273678">4.4.1</a> 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 Maintenance</h2>
|
704
|
+
<h2 ><a id="setup.maintenance" href="#a-606278328">4.5</a> 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 Usage</h1>
|
716
|
+
<h1 ><a id="usage" href="#a-606285848">5</a> Usage</h1>
|
806
717
|
|
807
718
|
|
808
|
-
<h2 id="usage.vpi">5.1 <span class="caps">VPI</span> in Ruby</h2>
|
719
|
+
<h2 ><a id="usage.vpi" href="#a-606290248">5.1</a> <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 Handles</h3>
|
767
|
+
<h3 ><a id="usage.vpi.handles" href="#a-606294778">5.1.1</a> 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’s relative happens to have the same name as one of the handle’s properties, then the relative is given preference. However, if you <em>really</em> need to access a handle’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="
|
805
|
+
<h4><a id="Accessing_a_handle__8217_s_relatives" href="#a-606297428">5.1.1.1</a> Accessing a handle’s relatives</h4>
|
895
806
|
|
896
807
|
|
897
808
|
<p>To access a handle’s relative (a handle related to it), simply invoke the relative’s name as a method on the handle.</p>
|
@@ -909,10 +820,10 @@ reset_signal = counter_module.reset <span style="color:#888"># <== 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">"</span><span style="color:#D20">reset</span><span style="color:#710">"</span></span>, counter_module)</code>.</p>
|
910
821
|
|
911
822
|
|
912
|
-
<h4 id="
|
823
|
+
<h4><a id="Accessing_a_handle__8217_s_properties" href="#a-606305088">5.1.1.2</a> Accessing a handle’s properties</h4>
|
913
824
|
|
914
825
|
|
915
|
-
<p>To access a handle’s properties, invoke the property name, using the following format, as a method on the handle. <a href="#ex..properties">the example named “Examples of accessing a handle
|
826
|
+
<p>To access a handle’s properties, invoke the property name, using the following format, as a method on the handle. <a href="#ex..properties">the example named “Examples of accessing a handle's properties”</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"># <== 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
|
-
|
868
|
+
<a href="#tbl..accessors">the table named “Possible accessors and their implications”</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"># <== shortcut!<
|
|
1290
1201
|
<td> </td>
|
1291
1202
|
<td> </td>
|
1292
1203
|
<td> </td>
|
1293
|
-
<td rowspan="2">These expressions print the full name of each
|
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"># <== shortcut!<
|
|
1328
1239
|
<td> </td>
|
1329
1240
|
<td> </td>
|
1330
1241
|
<td> </td>
|
1331
|
-
<td rowspan="2">These expressions return a list of nets whose logic value is unknown or “don’t care” (x).</td>
|
1242
|
+
<td rowspan="2">These expressions return a list of nets whose <strong>logic value</strong> is unknown or “don’t care” (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"># <== shortcut!<
|
|
1348
1259
|
|
1349
1260
|
</div>
|
1350
1261
|
|
1351
|
-
<h3 id="usage.vpi.callbacks">5.1.2 Callbacks</h3>
|
1262
|
+
<h3 ><a id="usage.vpi.callbacks" href="#a-605776528">5.1.2</a> 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 “callback handler”, 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 Prototyping</h2>
|
1406
|
+
<h2 ><a id="usage.prototyping" href="#a-605820298">5.2</a> 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 Debugging</h2>
|
1427
|
+
<h2 ><a id="usage.debugger" href="#a-605856998">5.3</a> 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 Advanced initialization</h3>
|
1439
|
+
<h3 ><a id="usage.debugger.init" href="#a-605861038">5.3.1</a> 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 Test runner</h2>
|
1451
|
+
<h2 ><a id="usage.test-runner" href="#a-605886638">5.4</a> 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—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
|
1492
|
+
<p>Create a file named <tt>Rakefile</tt> containing the following line:</p>
|
1581
1493
|
|
1582
1494
|
|
1583
|
-
<
|
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 Environment variables</h3>
|
1505
|
+
<h3 ><a id="usage.test-runner.env-vars" href="#a-605692898">5.4.1</a> 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 Sample tests</h2>
|
1552
|
+
<h2 ><a id="usage.examples" href="#a-605713518">5.5</a> 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 Tools</h2>
|
1558
|
+
<h2 ><a id="usage.tools" href="#a-605735618">5.6</a> 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 Automated test generation</h3>
|
1564
|
+
<h3 ><a id="usage.tools.generate-test" href="#a-606420358">5.6.1</a> 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 Verilog to Ruby conversion</h3>
|
1616
|
+
<h3 ><a id="usage.tools.verilog-ruby-conv" href="#a-606426458">5.6.2</a> 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 Tutorial</h2>
|
1625
|
+
<h2 ><a id="usage.tutorial" href="#a-606430138">5.7</a> 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 Start with a design</h3>
|
1639
|
+
<h3 ><a id="usage.tutorial.declare-design" href="#a-606439718">5.7.1</a> 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 “Declaration of a simple up-counter with synchronous reset”</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…</p>
|
@@ -1777,7 +1687,7 @@ endmodule
|
|
1777
1687
|
|
1778
1688
|
</div>
|
1779
1689
|
|
1780
|
-
<h3 id="usage.tutorial.generate-test">5.7.2 Generate a test</h3>
|
1690
|
+
<h3 ><a id="usage.tutorial.generate-test" href="#a-606447618">5.7.2</a> 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 Specify your expectations</h3>
|
1770
|
+
<h3 ><a id="usage.tutorial.specification" href="#a-606455858">5.7.3</a> 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">"</
|
|
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…</p>
|
@@ -2007,7 +1917,7 @@ context <span style="background-color:#fff0f0"><span style="color:#710">"</
|
|
2007
1917
|
|
2008
1918
|
</div>
|
2009
1919
|
|
2010
|
-
<h3 id="usage.tutorial.implement-proto">5.7.4 Implement the prototype</h3>
|
1920
|
+
<h3 ><a id="usage.tutorial.implement-proto" href="#a-606466508">5.7.4</a> 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 “Ruby prototype of our Verilog design”</a>.</p>
|
@@ -2043,7 +1953,7 @@ context <span style="background-color:#fff0f0"><span style="color:#710">"</
|
|
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…</p>
|
@@ -2056,7 +1966,7 @@ context <span style="background-color:#fff0f0"><span style="color:#710">"</
|
|
2056
1966
|
|
2057
1967
|
</div>
|
2058
1968
|
|
2059
|
-
<h3 id="usage.tutorial.test-proto">5.7.5 Verify the prototype</h3>
|
1969
|
+
<h3 ><a id="usage.tutorial.test-proto" href="#a-606469388">5.7.5</a> 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 “Running a test with specification in rSpec format”</a> and <a href="#fig..test-proto.unit-test">the example named “Running a test with specification in xUnit format”</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 Implement the design</h3>
|
2047
|
+
<h3 ><a id="usage.tutorial.implement-design" href="#a-606472858">5.7.6</a> 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 “Implementation of a simple up-counter with synchronous reset”</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…</p>
|
@@ -2190,7 +2100,7 @@ endmodule
|
|
2190
2100
|
|
2191
2101
|
</div>
|
2192
2102
|
|
2193
|
-
<h3 id="usage.tutorial.test-design">5.7.7 Verify the design</h3>
|
2103
|
+
<h3 ><a id="usage.tutorial.test-design" href="#a-606480598">5.7.7</a> 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 “Running a test with specification in rSpec format”</a> and <a href="#fig..test-design.unit-test">the example named “Running a test with specification in xUnit format”</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 Hacking</h1>
|
2160
|
+
<h1 ><a id="hacking" href="#a-606487878">6</a> Hacking</h1>
|
2161
|
+
|
2162
|
+
|
2163
|
+
<h2 ><a id="hacking.scm" href="#a-606495208">6.1</a> Getting the source code</h2>
|
2251
2164
|
|
2252
2165
|
|
2253
|
-
<
|
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> 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 Known problems</h1>
|
2188
|
+
<h1 ><a id="problems" href="#a-606510668">7</a> 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 Ruby</h2>
|
2194
|
+
<h2 ><a id="problems.ruby" href="#a-606514648">7.1</a> Ruby</h2>
|
2276
2195
|
|
2277
2196
|
|
2278
|
-
<h3 id="problems.ruby.SystemStackError">7.1.1 SystemStackError</h3>
|
2197
|
+
<h3 ><a id="problems.ruby.SystemStackError" href="#a-606529698">7.1.1</a> 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 “stack level too deep (SystemStackError)” 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 test/unit</h3>
|
2220
|
+
<h3 ><a id="problems.ruby.xUnit" href="#a-606545738">7.1.2</a> 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’s unit testing framework, then you will encounter an error saying “[BUG] cross-thread violation on rb_gc()”.</p>
|
2322
2241
|
|
2323
2242
|
|
2324
|
-
<h2 id="problem.ivl">7.2 Icarus Verilog</h2>
|
2243
|
+
<h2 ><a id="problem.ivl" href="#a-606557578">7.2</a> Icarus Verilog</h2>
|
2325
2244
|
|
2326
2245
|
|
2327
|
-
<h3 id="problems.ivl.vpi_handle_by_name">7.2.1 Vpi::vpi_handle_by_name</h3>
|
2246
|
+
<h3 ><a id="problems.ivl.vpi_handle_by_name" href="#a-606563378">7.2.1</a> 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 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> 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 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> 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 Vpi::reset</h3>
|
2330
|
+
<h3 ><a id="problems.ivl.vpi_reset" href="#a-606593458">7.2.2</a> 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 Mentor Modelsim</h2>
|
2336
|
+
<h2 ><a id="problems.vsim" href="#a-606596948">7.3</a> Mentor Modelsim</h2>
|
2418
2337
|
|
2419
2338
|
|
2420
|
-
<h3 id="problems.vsim.ruby_run">7.3.1 ruby_run();</h3>
|
2339
|
+
<h3 ><a id="problems.vsim.ruby_run" href="#a-606600738">7.3.1</a> 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’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 Glossary</h1>
|
2362
|
+
<h1 ><a id="glossary" href="#a-606604778">8</a> Glossary</h1>
|
2444
2363
|
|
2445
2364
|
|
2446
|
-
<h2 id="glossary.bench">8.1 Bench</h2>
|
2365
|
+
<h2 ><a id="glossary.bench" href="#a-606606678">8.1</a> 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 Behavior driven development (BDD)</h2>
|
2371
|
+
<h2 ><a id="glossary.BDD" href="#a-606613558">8.2</a> 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 Design</h2>
|
2380
|
+
<h2 ><a id="glossary.design" href="#a-606620958">8.3</a> 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 Expectation</h2>
|
2386
|
+
<h2 ><a id="glossary.expectation" href="#a-606623008">8.4</a> 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 Handle</h2>
|
2392
|
+
<h2 ><a id="glossary.handle" href="#a-606624858">8.5</a> 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 Rake</h2>
|
2398
|
+
<h2 ><a id="glossary.rake" href="#a-606628418">8.6</a> Rake</h2>
|
2480
2399
|
|
2481
2400
|
|
2482
2401
|
<blockquote>
|
@@ -2484,12 +2403,10 @@ endmodule
|
|
2484
2403
|
</blockquote>
|
2485
2404
|
|
2486
2405
|
|
2487
|
-
<
|
2488
|
-
<p style="text-align:right;">—<a href="http://docs.rubyrake.org">Rake documentation</a></p>
|
2489
|
-
</blockquote>
|
2406
|
+
<p style="text-align:right;">—<a href="http://docs.rubyrake.org">Rake documentation</a></p>
|
2490
2407
|
|
2491
2408
|
|
2492
|
-
<h2 id="glossary.rspec">8.7 rSpec</h2>
|
2409
|
+
<h2 ><a id="glossary.rspec" href="#a-606630878">8.7</a> 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 Specification</h2>
|
2418
|
+
<h2 ><a id="glossary.specification" href="#a-606636388">8.8</a> 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 Test driven development (TDD)</h2>
|
2424
|
+
<h2 ><a id="glossary.TDD" href="#a-606640878">8.9</a> 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 Test</h2>
|
2433
|
+
<h2 ><a id="glossary.test" href="#a-606643148">9.0</a> 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 Test bench</h2>
|
2439
|
+
<h2 ><a id="glossary.test_bench" href="#a-606646838">9.1</a> 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>
|