doc/manual.html in ruby-vpi-16.0.0 vs doc/manual.html in ruby-vpi-16.0.1

- old
+ new

@@ -16,11 +16,11 @@ <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> </div> <div id="index"> <h1>Contents</h1> - <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> + <ul><li><a id="a-607892658" href="#Ruby-VPI_user_manual">Ruby-VPI user manual</a><ul><li><a id="a-607893938" href="#legal">Legalities</a></li></ul></li><li><a id="a-607894868" href="#intro">Introduction</a><ul><li><a id="a-607895718" href="#Resources">Resources</a></li><li><a id="a-607896658" href="#intro.features">Features</a></li><li><a id="a-607897688" href="#intro.reqs">Requirements</a></li><li><a id="a-607898638" href="#intro.applications">Applications</a></li><li><a id="a-607899748" href="#intro.appetizers">Appetizers</a></li><li><a id="a-607900808" href="#intro.license">License</a></li><li><a id="a-607901818" href="#intro.related-works">Related works</a><ul><li><a id="a-607903008" href="#intro.related-works.pli">Ye olde <span class="caps">PLI</span></a></li></ul></li></ul></li><li><a id="a-607904308" href="#background">Background</a><ul><li><a id="a-607905318" href="#background.methodology">Methodology</a></li><li><a id="a-607906508" href="#background.vocab">Terminology</a></li><li><a id="a-607907578" href="#background.org">Organization</a></li><li><a id="a-607908608" href="#background.relay">Ruby/Verilog interaction</a></li></ul></li><li><a id="a-607909748" href="#setup">Setup</a><ul><li><a id="a-607910668" href="#setup.manifest">Manifest</a></li><li><a id="a-607911698" href="#setup.reqs">Requirements</a></li><li><a id="a-607912638" href="#setup.recom">Recommendations</a><ul><li><a id="a-607913678" href="#setup.recom.merger">Text merging tool</a></li></ul></li><li><a id="a-607914868" href="#setup.installation">Installation</a><ul><li><a id="a-607916038" href="#setup.installation.windows">Installing on Windows</a></li></ul></li><li><a id="a-607917378" href="#setup.maintenance">Maintenance</a></li></ul></li><li><a id="a-607918548" href="#usage">Usage</a><ul><li><a id="a-607919458" href="#usage.vpi"><span class="caps">VPI</span> in Ruby</a><ul><li><a id="a-607920448" href="#usage.vpi.handles">Handles</a><ul><li><a id="a-607921548" href="#Accessing_a_handle__8217_s_relatives">Accessing a handle&#8217;s relatives</a></li><li><a id="a-607922938" href="#Accessing_a_handle__8217_s_properties">Accessing a handle&#8217;s properties</a></li></ul></li><li><a id="a-607924498" href="#usage.vpi.callbacks">Callbacks</a></li></ul></li><li><a id="a-607925708" href="#usage.prototyping">Prototyping</a></li><li><a id="a-607926808" href="#usage.debugger">Debugging</a><ul><li><a id="a-607927888" href="#usage.debugger.init">Advanced initialization</a></li></ul></li><li><a id="a-607929098" href="#usage.test-runner">Test runner</a><ul><li><a id="a-607930258" href="#usage.test-runner.env-vars">Environment variables</a></li></ul></li><li><a id="a-607931608" href="#usage.examples">Sample tests</a></li><li><a id="a-607932628" href="#usage.tools">Tools</a><ul><li><a id="a-607933658" href="#usage.tools.generate-test">Automated test generation</a></li><li><a id="a-607934908" href="#usage.tools.verilog-ruby-conv">Verilog to Ruby conversion</a></li></ul></li><li><a id="a-607936328" href="#usage.tutorial">Tutorial</a><ul><li><a id="a-607937408" href="#usage.tutorial.declare-design">Start with a design</a></li><li><a id="a-607938748" href="#usage.tutorial.generate-test">Generate a test</a></li><li><a id="a-607940058" href="#usage.tutorial.specification">Specify your expectations</a></li><li><a id="a-607941368" href="#usage.tutorial.implement-proto">Implement the prototype</a></li><li><a id="a-607942708" href="#usage.tutorial.test-proto">Verify the prototype</a></li><li><a id="a-607943958" href="#usage.tutorial.implement-design">Implement the design</a></li><li><a id="a-607945338" href="#usage.tutorial.test-design">Verify the design</a></li></ul></li></ul></li><li><a id="a-607946678" href="#hacking">Hacking</a><ul><li><a id="a-607947628" href="#hacking.scm">Getting the source code</a></li><li><a id="a-607948608" href="#hacking.release-packages">Building release packages</a></li></ul></li><li><a id="a-607949918" href="#problems">Known problems</a><ul><li><a id="a-607950878" href="#problems.ruby">Ruby</a><ul><li><a id="a-607951958" href="#problems.ruby.SystemStackError">SystemStackError</a></li><li><a id="a-607953298" href="#problems.ruby.xUnit">test/unit</a></li></ul></li><li><a id="a-607954508" href="#problem.ivl">Icarus Verilog</a><ul><li><a id="a-607955538" href="#problems.ivl.vpi_handle_by_name">Vpi::vpi_handle_by_name</a><ul><li><a id="a-607956978" href="#problems.ivl.vpi_handle_by_name.absolute-paths">Give full paths to Verilog objects</a></li><li><a id="a-607958638" href="#problems.ivl.vpi_handle_by_name.connect-registers">Registers must be connected</a></li></ul></li><li><a id="a-607960458" href="#problems.ivl.vpi_reset">Vpi::reset</a></li></ul></li><li><a id="a-607961718" href="#problems.vsim">Mentor Modelsim</a><ul><li><a id="a-607962798" href="#problems.vsim.ruby_run">ruby_run();</a></li></ul></li></ul></li><li><a id="a-607964068" href="#glossary">Glossary</a><ul><li><a id="a-607965038" href="#glossary.bench">Bench</a></li><li><a id="a-607966068" href="#glossary.BDD">Behavior driven development (BDD)</a></li><li><a id="a-607967048" href="#glossary.design">Design</a></li><li><a id="a-607968108" href="#glossary.expectation">Expectation</a></li><li><a id="a-607969248" href="#glossary.handle">Handle</a></li><li><a id="a-607970298" href="#glossary.rake">Rake</a></li><li><a id="a-607971318" href="#glossary.rspec">rSpec</a></li><li><a id="a-607972348" href="#glossary.specification">Specification</a></li><li><a id="a-607973538" href="#glossary.TDD">Test driven development (TDD)</a></li><li><a id="a-607974518" href="#glossary.test">Test</a></li><li><a id="a-607975528" href="#glossary.test_bench">Test bench</a></li></ul></li></ul> <h1>Formals</h1> <h2 id="figures">Figures</h2> <ol> @@ -80,14 +80,14 @@ <li><a href="#important2">Before we continue&#8230;</a></li> <li><a href="#important3">Before we continue&#8230;</a></li> <li><a href="#important4">Before we continue&#8230;</a></li> </ol> </div> - <h1><a id="Ruby-VPI_user_manual" href="#a-606992228">1</a> &nbsp; Ruby-VPI user manual</h1> + <h1><a id="Ruby-VPI_user_manual" href="#a-607892658">1</a> &nbsp; Ruby-VPI user manual</h1> - <p>This manual was last updated on Wed May 02 23:05:05 <span class="caps">PDT 2007</span>.</p> + <p>This manual was last updated on Sun May 27 14:47:38 -0700 2007.</p> <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> @@ -95,20 +95,20 @@ <p><em>Happy reading!</em></p> - <h2 ><a id="legal" href="#a-606993518">1.1</a> &nbsp; Legalities</h2> + <h2 ><a id="legal" href="#a-607893938">1.1</a> &nbsp; Legalities</h2> <p>This manual is distributed under <a href="#intro.license">the same license as Ruby-VPI</a>.</p> <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> - <h1 ><a id="intro" href="#a-606994448">2</a> &nbsp; Introduction</h1> + <h1 ><a id="intro" href="#a-607894868">2</a> &nbsp; Introduction</h1> <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> @@ -123,11 +123,11 @@ <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> <div id="resources"> - <h2><a id="Resources" href="#a-606995298">2.1</a> &nbsp; Resources</h2> + <h2><a id="Resources" href="#a-607895718">2.1</a> &nbsp; Resources</h2> <p class="title">Records</p> @@ -180,11 +180,11 @@ </ul> </div> - <h2 ><a id="intro.features" href="#a-606996238">2.2</a> &nbsp; Features</h2> + <h2 ><a id="intro.features" href="#a-607896658">2.2</a> &nbsp; Features</h2> <p class="title">Portable</p> @@ -237,11 +237,11 @@ <li>Uses <a href="http://rubyforge.org/projects/ruby-debug/">ruby-debug</a> for <a href="manual.html#usage.debugger">interactive debugging</a>.</li> <li>Uses <a href="http://eigenclass.org/hiki.rb?rcov">rcov</a> for test <a href="manual.html#usage.test-runner.env-vars">coverage analysis and report generation</a>.</li> </ul> - <h2 ><a id="intro.reqs" href="#a-606997278">2.3</a> &nbsp; Requirements</h2> + <h2 ><a id="intro.reqs" href="#a-607897688">2.3</a> &nbsp; Requirements</h2> <p>The following software is necessary in order to use Ruby-VPI.</p> @@ -315,11 +315,11 @@ <li><a href="http://rubyforge.org/frs/?group_id=126">RubyGems</a> &#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> </ul> - <h2 ><a id="intro.applications" href="#a-606998228">2.4</a> &nbsp; Applications</h2> + <h2 ><a id="intro.applications" href="#a-607898638">2.4</a> &nbsp; Applications</h2> <p>Examples of tasks that can be performed with Ruby-VPI are:</p> @@ -349,11 +349,11 @@ <li>Building a distributed simulation</li> </ul></li> </ul> - <h2 ><a id="intro.appetizers" href="#a-606999338">2.5</a> &nbsp; Appetizers</h2> + <h2 ><a id="intro.appetizers" href="#a-607899748">2.5</a> &nbsp; Appetizers</h2> <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> @@ -395,11 +395,11 @@ <blockquote> <p><code class="code"><span style="color:#00D; font-weight:bold">15</span>.times { simulate }</code></p> </blockquote> - <h2 ><a id="intro.license" href="#a-607000438">2.6</a> &nbsp; License</h2> + <h2 ><a id="intro.license" href="#a-607900808">2.6</a> &nbsp; License</h2> <p>Copyright&#169; 2006-2007 Suraj N. Kurapati</p> @@ -426,11 +426,11 @@ <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>, <span class="caps">OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN</span> <span class="caps">THE SOFTWARE</span>.</p> - <h2 ><a id="intro.related-works" href="#a-606014748">2.7</a> &nbsp; Related works</h2> + <h2 ><a id="intro.related-works" href="#a-607901818">2.7</a> &nbsp; Related works</h2> <ul> <li><a href="http://jove.sourceforge.net"><span class="caps">JOVE</span></a> is a Java interface to <span class="caps">VPI</span>.</li> <li><a href="http://teal.sourceforge.net">Teal</a> is a C++ interface to <span class="caps">VPI</span>.</li> @@ -438,11 +438,11 @@ <li><a href="http://rhdl.rubyforge.org"><span class="caps">RHDL</span></a> is a hardware description and verification language based on Ruby.</li> <li><a href="http://myhdl.jandecaluwe.com">MyHDL</a> is a hardware description and verification language based on Python, which features conversion to Verilog and co-simulation.</li> </ul> - <h3 ><a id="intro.related-works.pli" href="#a-606035648">2.7.1</a> &nbsp; Ye olde <span class="caps">PLI</span></h3> + <h3 ><a id="intro.related-works.pli" href="#a-607903008">2.7.1</a> &nbsp; Ye olde <span class="caps">PLI</span></h3> <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> @@ -451,20 +451,20 @@ <li><a href="http://www.veripool.com/verilog-pli.html">Verilog::Pli</a> is a Perl interface to <span class="caps">PLI</span>.</li> <li><a href="http://www.time-rover.com/jpli/"><span class="caps">JPLI</span></a> is a proprietary Java interface to <span class="caps">PLI</span>.</li> </ul> - <h1 ><a id="background" href="#a-606053288">3</a> &nbsp; Background</h1> + <h1 ><a id="background" href="#a-607904308">3</a> &nbsp; Background</h1> - <h2 ><a id="background.methodology" href="#a-606069898">3.1</a> &nbsp; Methodology</h2> + <h2 ><a id="background.methodology" href="#a-607905318">3.1</a> &nbsp; Methodology</h2> <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> - <h2 ><a id="background.vocab" href="#a-606106808">3.2</a> &nbsp; Terminology</h2> + <h2 ><a id="background.vocab" href="#a-607906508">3.2</a> &nbsp; Terminology</h2> <div class="admonition"> <div class="note" id="note1"> @@ -492,11 +492,11 @@ <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> - <h2 ><a id="background.org" href="#a-606127698">3.3</a> &nbsp; Organization</h2> + <h2 ><a id="background.org" href="#a-607907578">3.3</a> &nbsp; Organization</h2> <div class="formal"> <div class="figure" id="fig..organization"> @@ -535,11 +535,11 @@ <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> - <h2 ><a id="background.relay" href="#a-606150238">3.4</a> &nbsp; Ruby/Verilog interaction</h2> + <h2 ><a id="background.relay" href="#a-607908608">3.4</a> &nbsp; Ruby/Verilog interaction</h2> <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> @@ -572,14 +572,14 @@ </div> </div> - <h1 ><a id="setup" href="#a-606180548">4</a> &nbsp; Setup</h1> + <h1 ><a id="setup" href="#a-607909748">4</a> &nbsp; Setup</h1> - <h2 ><a id="setup.manifest" href="#a-606192588">4.1</a> &nbsp; Manifest</h2> + <h2 ><a id="setup.manifest" href="#a-607910668">4.1</a> &nbsp; Manifest</h2> <p>When you extract a release package, the following is what you would expect to find.</p> @@ -591,11 +591,11 @@ <li><tt>bin</tt> contains various tools. See <a href="#usage.tools">the section named &ldquo;Tools&rdquo;</a> for more information.</li> <li><tt>samp</tt> contains example tests. See <a href="#usage.examples">the section named &ldquo;Sample tests&rdquo;</a> for more information.</li> </ul> - <h2 ><a id="setup.reqs" href="#a-606206048">4.2</a> &nbsp; Requirements</h2> + <h2 ><a id="setup.reqs" href="#a-607911698">4.2</a> &nbsp; Requirements</h2> <p>See <a href="#intro.reqs">the section named &ldquo;Requirements&rdquo;</a> above.</p> @@ -614,17 +614,17 @@ </div> </div> - <h2 ><a id="setup.recom" href="#a-606213438">4.3</a> &nbsp; Recommendations</h2> + <h2 ><a id="setup.recom" href="#a-607912638">4.3</a> &nbsp; Recommendations</h2> <p>The following software may make your interactions with Ruby-VPI more pleasant.</p> - <h3 ><a id="setup.recom.merger" href="#a-606235588">4.3.1</a> &nbsp; Text merging tool</h3> + <h3 ><a id="setup.recom.merger" href="#a-607913678">4.3.1</a> &nbsp; Text merging tool</h3> 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. <ul> <li><a href="http://kdiff3.sourceforge.net/"><strong>kdiff3</strong></a> is a graphical, three-way merging tool for <span class="caps">KDE</span>.</li> @@ -633,11 +633,11 @@ <li><a href="http://furius.ca/xxdiff/"><strong>xxdiff</strong></a> is a graphical, three-way merging tool.</li> <li><a href="http://elonen.iki.fi/code/imediff/"><strong>imediff2</strong></a> is a textual, fullscreen two-way merging tool. It is very useful when you are working remotely via <span class="caps">SSH</span>.</li> </ul> - <h2 ><a id="setup.installation" href="#a-606251368">4.4</a> &nbsp; Installation</h2> + <h2 ><a id="setup.installation" href="#a-607914868">4.4</a> &nbsp; Installation</h2> <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> @@ -647,11 +647,11 @@ $ ls -d /usr/lib/ruby/gems/1.8/gems/ruby-vpi* /usr/lib/ruby/gems/1.8/gems/ruby-vpi-7.0.0/ </pre> - <h3 ><a id="setup.installation.windows" href="#a-606273678">4.4.1</a> &nbsp; Installing on Windows</h3> + <h3 ><a id="setup.installation.windows" href="#a-607916038">4.4.1</a> &nbsp; Installing on Windows</h3> <ul> <li>Install <a href="http://www.cygwin.com">Cygwin</a>, the Linux-like environment for Windows.</li> </ul> @@ -699,11 +699,11 @@ <ul> <li>You may now install Ruby-VPI by running the <pre>gem install ruby-vpi</pre> command in Cygwin.</li> </ul> - <h2 ><a id="setup.maintenance" href="#a-606278328">4.5</a> &nbsp; Maintenance</h2> + <h2 ><a id="setup.maintenance" href="#a-607917378">4.5</a> &nbsp; Maintenance</h2> <ul> <li>You can uninstall Ruby-VPI by running the <pre>gem uninstall ruby-vpi</pre> command.</li> <li>You can upgrade to the latest release of Ruby-VPI by running the <pre>gem update ruby-vpi</pre> command.</li> @@ -711,14 +711,14 @@ <p>Learn more about using and manipulating RubyGems in <a href="http://www.rubygems.org">the RubyGems user manual</a>.</p> - <h1 ><a id="usage" href="#a-606285848">5</a> &nbsp; Usage</h1> + <h1 ><a id="usage" href="#a-607918548">5</a> &nbsp; Usage</h1> - <h2 ><a id="usage.vpi" href="#a-606290248">5.1</a> &nbsp; <span class="caps">VPI</span> in Ruby</h2> + <h2 ><a id="usage.vpi" href="#a-607919458">5.1</a> &nbsp; <span class="caps">VPI</span> in Ruby</h2> <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> @@ -762,11 +762,11 @@ <span style="color:#339; font-weight:bold">void</span> foo(va_list ap) { va_list *p = &amp;ap; } </pre> - <h3 ><a id="usage.vpi.handles" href="#a-606294778">5.1.1</a> &nbsp; Handles</h3> + <h3 ><a id="usage.vpi.handles" href="#a-607920448">5.1.1</a> &nbsp; Handles</h3> <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> @@ -800,11 +800,11 @@ <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> - <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> + <h4><a id="Accessing_a_handle__8217_s_relatives" href="#a-607921548">5.1.1.1</a> &nbsp; Accessing a handle&#8217;s relatives</h4> <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> @@ -818,11 +818,11 @@ </pre> <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> - <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> + <h4><a id="Accessing_a_handle__8217_s_properties" href="#a-607922938">5.1.1.2</a> &nbsp; Accessing a handle&#8217;s properties</h4> <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> @@ -1257,11 +1257,11 @@ </div> </div> - <h3 ><a id="usage.vpi.callbacks" href="#a-605776528">5.1.2</a> &nbsp; Callbacks</h3> + <h3 ><a id="usage.vpi.callbacks" href="#a-607924498">5.1.2</a> &nbsp; Callbacks</h3> <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> @@ -1401,11 +1401,11 @@ </div> </div> - <h2 ><a id="usage.prototyping" href="#a-605820298">5.2</a> &nbsp; Prototyping</h2> + <h2 ><a id="usage.prototyping" href="#a-607925708">5.2</a> &nbsp; Prototyping</h2> <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> @@ -1422,11 +1422,11 @@ <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> - <h2 ><a id="usage.debugger" href="#a-605856998">5.3</a> &nbsp; Debugging</h2> + <h2 ><a id="usage.debugger" href="#a-607926808">5.3</a> &nbsp; Debugging</h2> <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> @@ -1434,11 +1434,11 @@ <li>Enable the debugger by activating the <code class="code"><span style="color:#036; font-weight:bold">DEBUG</span></code> environment variable (see <a href="#usage.test-runner">the section named &ldquo;Test runner&rdquo;</a> for details).</li> <li>Put the <code class="code">debugger</code> command in your code&#8212;anywhere you wish to activate an interactive debugging session. These commands are automatically ignored when the debugger is disabled; so you can safely leave them in your code, if you wish.</li> </ol> - <h3 ><a id="usage.debugger.init" href="#a-605861038">5.3.1</a> &nbsp; Advanced initialization</h3> + <h3 ><a id="usage.debugger.init" href="#a-607927888">5.3.1</a> &nbsp; Advanced initialization</h3> <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> @@ -1446,11 +1446,11 @@ <li>Deactivate the <code class="code"><span style="color:#036; font-weight:bold">DEBUG</span></code> environment variable.</li> <li>Put your own code, which initializes the debugger, above the <code class="code"><span style="color:#036; font-weight:bold">RubyVpi</span>.init_bench</code> line in your generated <tt>spec.rb</tt> file.</li> </ol> - <h2 ><a id="usage.test-runner" href="#a-605886638">5.4</a> &nbsp; Test runner</h2> + <h2 ><a id="usage.test-runner" href="#a-607929098">5.4</a> &nbsp; Test runner</h2> <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> @@ -1462,11 +1462,11 @@ When you invoke a test runner without any arguments, it will show you a list of available tasks: <pre>$ rake -f some_test_runner.rake -(in /home/sun/src/ruby-vpi/doc) +(in /home/sun/tmp/ruby-vpi/doc) rake clean # Remove any temporary products. rake clobber # Remove any generated file. rake cver # Simulate with GPL Cver. rake default # Show a list of available tasks. rake ivl # Simulate with Icarus Verilog. @@ -1500,11 +1500,11 @@ </div> </div> - <h3 ><a id="usage.test-runner.env-vars" href="#a-605692898">5.4.1</a> &nbsp; Environment variables</h3> + <h3 ><a id="usage.test-runner.env-vars" href="#a-607930258">5.4.1</a> &nbsp; Environment variables</h3> <p>Test runners support the following <em>environment</em> variables, which allow you to easily change the behavior of the test runner.</p> @@ -1547,23 +1547,23 @@ </div> </div> - <h2 ><a id="usage.examples" href="#a-605713518">5.5</a> &nbsp; Sample tests</h2> + <h2 ><a id="usage.examples" href="#a-607931608">5.5</a> &nbsp; Sample tests</h2> <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> - <h2 ><a id="usage.tools" href="#a-605735618">5.6</a> &nbsp; Tools</h2> + <h2 ><a id="usage.tools" href="#a-607932628">5.6</a> &nbsp; Tools</h2> <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> - <h3 ><a id="usage.tools.generate-test" href="#a-606420358">5.6.1</a> &nbsp; Automated test generation</h3> + <h3 ><a id="usage.tools.generate-test" href="#a-607933658">5.6.1</a> &nbsp; Automated test generation</h3> <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> @@ -1611,20 +1611,20 @@ </div> </div> - <h3 ><a id="usage.tools.verilog-ruby-conv" href="#a-606426458">5.6.2</a> &nbsp; Verilog to Ruby conversion</h3> + <h3 ><a id="usage.tools.verilog-ruby-conv" href="#a-607934908">5.6.2</a> &nbsp; Verilog to Ruby conversion</h3> <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> <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> - <h2 ><a id="usage.tutorial" href="#a-606430138">5.7</a> &nbsp; Tutorial</h2> + <h2 ><a id="usage.tutorial" href="#a-607936328">5.7</a> &nbsp; Tutorial</h2> <ol> <li><a href="#usage.tutorial.declare-design">Declare a design</a> using Verilog 2001 syntax.</li> <li><a href="#usage.tutorial.generate-test">Generate a test</a> for the design using the <a href="#usage.tools.generate-test">automated test generator</a> tool.</li> @@ -1634,11 +1634,11 @@ <li><a href="#usage.tutorial.implement-design">Implement the design</a> in Verilog once the prototype has been verified.</li> <li><a href="#usage.tutorial.test-design">Verify the design</a> against the specification.</li> </ol> - <h3 ><a id="usage.tutorial.declare-design" href="#a-606439718">5.7.1</a> &nbsp; Start with a design</h3> + <h3 ><a id="usage.tutorial.declare-design" href="#a-607937408">5.7.1</a> &nbsp; Start with a design</h3> <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> @@ -1685,11 +1685,11 @@ </div> </div> - <h3 ><a id="usage.tutorial.generate-test" href="#a-606447618">5.7.2</a> &nbsp; Generate a test</h3> + <h3 ><a id="usage.tutorial.generate-test" href="#a-607938748">5.7.2</a> &nbsp; Generate a test</h3> <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> @@ -1765,11 +1765,11 @@ </div> </div> - <h3 ><a id="usage.tutorial.specification" href="#a-606455858">5.7.3</a> &nbsp; Specify your expectations</h3> + <h3 ><a id="usage.tutorial.specification" href="#a-607940058">5.7.3</a> &nbsp; Specify your expectations</h3> <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> @@ -1915,11 +1915,11 @@ </div> </div> - <h3 ><a id="usage.tutorial.implement-proto" href="#a-606466508">5.7.4</a> &nbsp; Implement the prototype</h3> + <h3 ><a id="usage.tutorial.implement-proto" href="#a-607941368">5.7.4</a> &nbsp; Implement the prototype</h3> <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> @@ -1964,11 +1964,11 @@ </div> </div> - <h3 ><a id="usage.tutorial.test-proto" href="#a-606469388">5.7.5</a> &nbsp; Verify the prototype</h3> + <h3 ><a id="usage.tutorial.test-proto" href="#a-607942708">5.7.5</a> &nbsp; Verify the prototype</h3> <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> @@ -2042,11 +2042,11 @@ </div> </div> - <h3 ><a id="usage.tutorial.implement-design" href="#a-606472858">5.7.6</a> &nbsp; Implement the design</h3> + <h3 ><a id="usage.tutorial.implement-design" href="#a-607943958">5.7.6</a> &nbsp; Implement the design</h3> <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> @@ -2098,11 +2098,11 @@ </div> </div> - <h3 ><a id="usage.tutorial.test-design" href="#a-606480598">5.7.7</a> &nbsp; Verify the design</h3> + <h3 ><a id="usage.tutorial.test-design" href="#a-607945338">5.7.7</a> &nbsp; Verify the design</h3> <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> @@ -2155,23 +2155,23 @@ </div> </div> - <h1 ><a id="hacking" href="#a-606487878">6</a> &nbsp; Hacking</h1> + <h1 ><a id="hacking" href="#a-607946678">6</a> &nbsp; Hacking</h1> - <h2 ><a id="hacking.scm" href="#a-606495208">6.1</a> &nbsp; Getting the source code</h2> + <h2 ><a id="hacking.scm" href="#a-607947628">6.1</a> &nbsp; Getting the source code</h2> <p>Check out the source code using <a href="http://darcs.net">Darcs</a> from the project repository:</p> <pre>darcs get http://ruby-vpi.rubyforge.org/src/ruby-vpi</pre> - <h2 ><a id="hacking.release-packages" href="#a-606502868">6.2</a> &nbsp; Building release packages</h2> + <h2 ><a id="hacking.release-packages" href="#a-607948608">6.2</a> &nbsp; Building release packages</h2> <p>In addition to the <a href="#setup.reqs">normal requirements</a>, you need the following software to build release packages:</p> @@ -2183,20 +2183,20 @@ <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> - <h1 ><a id="problems" href="#a-606510668">7</a> &nbsp; Known problems</h1> + <h1 ><a id="problems" href="#a-607949918">7</a> &nbsp; Known problems</h1> <p>This chapter presents known problems and possible solutions. In addition, previously solved problems have been retained for historical reference.</p> - <h2 ><a id="problems.ruby" href="#a-606514648">7.1</a> &nbsp; Ruby</h2> + <h2 ><a id="problems.ruby" href="#a-607950878">7.1</a> &nbsp; Ruby</h2> - <h3 ><a id="problems.ruby.SystemStackError" href="#a-606529698">7.1.1</a> &nbsp; SystemStackError</h3> + <h3 ><a id="problems.ruby.SystemStackError" href="#a-607951958">7.1.1</a> &nbsp; SystemStackError</h3> <div class="admonition"> <div class="note" id="note6"> @@ -2215,11 +2215,11 @@ </div> <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> - <h3 ><a id="problems.ruby.xUnit" href="#a-606545738">7.1.2</a> &nbsp; test/unit</h3> + <h3 ><a id="problems.ruby.xUnit" href="#a-607953298">7.1.2</a> &nbsp; test/unit</h3> <div class="admonition"> <div class="note" id="note7"> @@ -2238,17 +2238,17 @@ </div> <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> - <h2 ><a id="problem.ivl" href="#a-606557578">7.2</a> &nbsp; Icarus Verilog</h2> + <h2 ><a id="problem.ivl" href="#a-607954508">7.2</a> &nbsp; Icarus Verilog</h2> - <h3 ><a id="problems.ivl.vpi_handle_by_name" href="#a-606563378">7.2.1</a> &nbsp; Vpi::vpi_handle_by_name</h3> + <h3 ><a id="problems.ivl.vpi_handle_by_name" href="#a-607955538">7.2.1</a> &nbsp; Vpi::vpi_handle_by_name</h3> - <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> + <h4 ><a id="problems.ivl.vpi_handle_by_name.absolute-paths" href="#a-607956978">7.2.1.1</a> &nbsp; Give full paths to Verilog objects</h4> <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> @@ -2271,11 +2271,11 @@ </div> </div> - <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> + <h4 ><a id="problems.ivl.vpi_handle_by_name.connect-registers" href="#a-607958638">7.2.1.2</a> &nbsp; Registers must be connected</h4> <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> @@ -2325,20 +2325,20 @@ </div> </div> - <h3 ><a id="problems.ivl.vpi_reset" href="#a-606593458">7.2.2</a> &nbsp; Vpi::reset</h3> + <h3 ><a id="problems.ivl.vpi_reset" href="#a-607960458">7.2.2</a> &nbsp; Vpi::reset</h3> <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> - <h2 ><a id="problems.vsim" href="#a-606596948">7.3</a> &nbsp; Mentor Modelsim</h2> + <h2 ><a id="problems.vsim" href="#a-607961718">7.3</a> &nbsp; Mentor Modelsim</h2> - <h3 ><a id="problems.vsim.ruby_run" href="#a-606600738">7.3.1</a> &nbsp; ruby_run();</h3> + <h3 ><a id="problems.vsim.ruby_run" href="#a-607962798">7.3.1</a> &nbsp; ruby_run();</h3> <div class="admonition"> <div class="note" id="note8"> @@ -2357,87 +2357,87 @@ </div> <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> - <h1 ><a id="glossary" href="#a-606604778">8</a> &nbsp; Glossary</h1> + <h1 ><a id="glossary" href="#a-607964068">8</a> &nbsp; Glossary</h1> - <h2 ><a id="glossary.bench" href="#a-606606678">8.1</a> &nbsp; Bench</h2> + <h2 ><a id="glossary.bench" href="#a-607965038">8.1</a> &nbsp; Bench</h2> <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> - <h2 ><a id="glossary.BDD" href="#a-606613558">8.2</a> &nbsp; Behavior driven development (BDD)</h2> + <h2 ><a id="glossary.BDD" href="#a-607966068">8.2</a> &nbsp; Behavior driven development (BDD)</h2> <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> <p>See the <a href="http://behaviour-driven.org/">official wiki</a> for more information.</p> - <h2 ><a id="glossary.design" href="#a-606620958">8.3</a> &nbsp; Design</h2> + <h2 ><a id="glossary.design" href="#a-607967048">8.3</a> &nbsp; Design</h2> <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> - <h2 ><a id="glossary.expectation" href="#a-606623008">8.4</a> &nbsp; Expectation</h2> + <h2 ><a id="glossary.expectation" href="#a-607968108">8.4</a> &nbsp; Expectation</h2> <p>The desired response to some stimulus.</p> - <h2 ><a id="glossary.handle" href="#a-606624858">8.5</a> &nbsp; Handle</h2> + <h2 ><a id="glossary.handle" href="#a-607969248">8.5</a> &nbsp; Handle</h2> <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> - <h2 ><a id="glossary.rake" href="#a-606628418">8.6</a> &nbsp; Rake</h2> + <h2 ><a id="glossary.rake" href="#a-607970298">8.6</a> &nbsp; Rake</h2> <blockquote> <p>Rake is a build tool, written in Ruby, using Ruby as a build language. Rake is similar to <strong>make</strong> in scope and purpose.</p> </blockquote> <p style="text-align:right;">&#8212;<a href="http://docs.rubyrake.org">Rake documentation</a></p> - <h2 ><a id="glossary.rspec" href="#a-606630878">8.7</a> &nbsp; rSpec</h2> + <h2 ><a id="glossary.rspec" href="#a-607971318">8.7</a> &nbsp; rSpec</h2> <p>The <a href="#glossary.BDD"><span class="caps">BDD</span></a> framework for Ruby.</p> <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> - <h2 ><a id="glossary.specification" href="#a-606636388">8.8</a> &nbsp; Specification</h2> + <h2 ><a id="glossary.specification" href="#a-607972348">8.8</a> &nbsp; Specification</h2> <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> - <h2 ><a id="glossary.TDD" href="#a-606640878">8.9</a> &nbsp; Test driven development (TDD)</h2> + <h2 ><a id="glossary.TDD" href="#a-607973538">8.9</a> &nbsp; Test driven development (TDD)</h2> <p>An <a href="http://agilemanifesto.org/">agile software development methodology</a> which emphasizes (1) testing functionality before implementing it and (2) refactoring.</p> <p>See <a href="http://www.agiledata.org/essays/tdd.html">this introductory article</a> for more information.</p> - <h2 ><a id="glossary.test" href="#a-606643148">9.0</a> &nbsp; Test</h2> + <h2 ><a id="glossary.test" href="#a-607974518">9.0</a> &nbsp; Test</h2> <p>Something that checks if a <a href="#glossary.design">design</a> satisfies a <a href="#glossary.specification">specification</a>.</p> - <h2 ><a id="glossary.test_bench" href="#a-606646838">9.1</a> &nbsp; Test bench</h2> + <h2 ><a id="glossary.test_bench" href="#a-607975528">9.1</a> &nbsp; Test bench</h2> <p>An allusion to <a href="#background.vocab">a bench in an electronics laboratory</a>, or so it seems.</p> </body> </html>