<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <link rel="stylesheet" type="text/css" href="common.css" media="screen" />
    <link rel="stylesheet" type="text/css" href="print.css" media="print" />
    <link rel="alternate" type="application/rss+xml" href="http://ruby-vpi.rubyforge.org/doc/rss.xml" title="RSS feed for this project." />
    <title>Release history</title>
  </head>
  <body>
    <div id="site-links">
      <a href="readme.html">Home</a>
              &middot; <a href="manual.html">Manual</a>
              &middot; <a href="memo.html">Memo</a>
              &middot; <a href="history.html">History</a>
            <hr style="display: none"/>
    </div>

      <div id="toc-links">
      <a href="#toc:contents">Contents</a>
    </div>
  
    <div id="body">
      <hr style="display: none"/>

      <div id="Release_history" class="front_cover">
        <h1 class="title"><big>Release history</big></h1>

        <p>This is a record of important changes that have occurred with each release.</p>


	<p>
    <div id="Version_numbering_system" class="paragraph">
      <p class="title">Version numbering system</p>
      Ruby-VPI uses the <a href="http://www.rubygems.org/read/chapter/7">RubyGems rational versioning policy</a> to number its releases. This &#8220;major.minor.build&#8221; numbering policy <a href="http://ablog.apress.com/?p=738">is summarized</a> as follows.


	<ul>
	<li>When the <strong>major</strong> number increases, functionally <em>incompatible changes</em> have occurred. Thus, what may have worked in the previous version may not work in the new one.</li>
	</ul>


	<ul>
	<li>When the <strong>minor</strong> number increases, functionally <em>compatible changes</em> have occurred. Thus, what worked in the previous version will work in the new one.</li>
	</ul>


	<ul>
	<li>When the <strong>build</strong> number increases, the <em>underlying implementation</em> has changed. The functionality has not changed and no features have been added. Thus, what worked in the previous version will work in the new one.</li>
	</ul>
    </div>
  </p>

      </div>
    

      <hr style="display: none"/>

      <div id="a18.0.0" class="section">
        <h1 class="title">
          <a href="#a-607182658">2</a>

          &nbsp;

          Version 18.0.0 (2007-07-31)
        </h1>

        <p>This release restores support for Synopsys VCS and Cadence NC-Sim, improves portability and performance, and enhances the VPI abstraction layer.</p>


	<h2>Thanks</h2>


	<ul>
	<li>Calvin Wong discovered <a href="http://rubyforge.org/forum/message.php?msg_id=25691">how to bypass the following error</a> emitted by Synopsys VCS when loading the Ruby-VPI shared object file.

	<pre>
Could not open library specified in -load option obj/vcs
obj/vcs: undefined symbol: vpi_put_data
</pre></li>
	</ul>


	<h2>Caution</h2>


	<ul>
	<li><a href="http://www.swig.org/">SWIG</a> is now required in order to compile and install Ruby-VPI.</li>
	</ul>


	<ul>
	<li><code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span>.put_value</code> no longer checks whether the value written matches the value read back after writing because that only works when there is no VPI delay associated with the write.</li>
	</ul>


	<ul>
	<li>When <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span>.put_value</code> is used to write a value to a wire (VpiNet), it now <em>forces</em> the value. This is done to ensure portability:

	<p>Synopsys VCS and Cadence NC-Sim forget the value written to a wire during the next simulation time step, whereas Mentor Modelsim and GPL Cver remember the value (thereby treating wires as registers).</p>


	<p>Note that you have to release a forced value (using <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span>.release_value</code>) on a wire after writing to the wire if you want the design under test have the ability to update the value of the wire later on:</p>


	<pre class="code">
your_wire.intVal = <span style="color:#00D; font-weight:bold">15</span>
your_wire.release_value
advance_time <span style="color:#888"># let the Verilog DUT modify your_wire</span>
</pre>


	<p>In addition, you can check if a wire has a forced value using the <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span>.value_forced?</code> method.</p></li>
	</ul>


	<ul>
	<li>If the format is not specified, <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span>.get_value</code> now assumes that you want to read the value in VpiIntVal format (because this is the most common case).</li>
	</ul>


	<ul>
	<li>The definition of &#8220;Derivatives&#8221; has been reworded for clarity in the <a href="readme.html#intro.license">project license</a>.</li>
	</ul>


	<h2>Repairs</h2>


	<ul>
	<li>Synopsys VCS and Cadence NC-Sim simulators now correctly load Ruby-VPI. Also, the 64-bit versions of these simulators are now supported.</li>
	</ul>


	<h2>Improvements</h2>


	<ul>
	<li>Added &#8220;force_value&#8221;, &#8220;release_value&#8221;, and &#8220;value_forced?&#8221; methods to the <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span></code> class.</li>
	</ul>


	<ul>
	<li><code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span>.put_value</code> now tries to automatically detect the format of the value to be written. As a result, you can now write <code class="code">your_handle.put_value <span style="color:#00D; font-weight:bold">35</span></code> in lieu of writing <code class="code">your_handle.intVal = <span style="color:#00D; font-weight:bold">35</span></code>.</li>
	</ul>


	<ul>
	<li><code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span>.inspect</code> now shows the hexStrVal of the handle (because it is a common case to want to see a handle&#8217;s logic value along with its other information).</li>
	</ul>


	<ul>
	<li>Added method caching (memoizing) for VPI property accesses on handles.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a17.0.0" class="section">
        <h1 class="title">
          <a href="#a-607186018">3</a>

          &nbsp;

          Version 17.0.0 (2007-07-22)
        </h1>

        <p>This release makes the Ruby-VPI testing framework more lightweight by reducing the number of files and parameters involved.</p>


	<h2>Caution</h2>


	<ul>
	<li>The <strong>generate_test.rb</strong> and <strong>convert.rb</strong> executables have been replaced by a single <strong>ruby-vpi</strong> executable to avoid name conflicts with other software. They are now accessed using the <pre>ruby-vpi generate</pre> and <pre>ruby-vpi convert</pre> commands respectively.</li>
	</ul>


	<ul>
	<li>The <tt>--name</tt> parameter has been removed from the automated test generator. Similarly, you can no longer insert an arbitrary name in a test&#8217;s file names (see the <a href="manual.html#Do_not_rename_generated_files">user manual</a> for details).</li>
	</ul>


	<ul>
	<li>The <code class="code"><span style="color:#036; font-weight:bold">DEBUG</span></code> environment variable, which controls wether the test runner starts the interactive debugger, has been renamed to <code class="code"><span style="color:#036; font-weight:bold">DEBUGGER</span></code>.</li>
	</ul>


	<ul>
	<li>The <code class="code"><span style="color:#036; font-weight:bold">SIMULATOR_TARGET</span></code> and <code class="code"><span style="color:#036; font-weight:bold">SIMULATOR_INCLUDES</span></code> parameters have been eliminated from test runners. The former is detected automatically. As for the latter, you can specify paths to directories in the <code class="code"><span style="color:#036; font-weight:bold">SIMULATOR_SOURCES</span></code> parameter instead.</li>
	</ul>


	<ul>
	<li>The <tt>bench.rb</tt> and <tt>bench.v</tt> files of a generated test are (1) no longer generated by the test generator and (2) are now ignored. You must move the functionality provided by these files into <tt>design.rb</tt> and your Verilog module&#8217;s source file respectively.</li>
	</ul>


	<ul>
	<li>The <tt>design.rb</tt> and <tt>proto.rb</tt> files are now loaded into a separate namespace (Ruby module). For example, if the Verilog module under test has the name &#8220;counter&#8221; and the <tt>design.rb</tt> file defines a class named &#8220;Foo&#8221;, then that class will be accessible as &#8220;Counter::Foo&#8221;.</li>
	</ul>


	<ul>
	<li>The global <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::simulate</code> method has been replaced by the <code class="code">cycle!</code> method in the <tt>design.rb</tt> file.</li>
	</ul>


	<ul>
	<li>The <code class="code">simulate!</code> method in the <tt>proto.rb</tt> file has been renamed to <code class="code">feign!</code> for accuracy.</li>
	</ul>


	<ul>
	<li>The <code class="code"><span style="color:#036; font-weight:bold">RubyVpi</span></code> module has been renamed to <code class="code"><span style="color:#036; font-weight:bold">RubyVPI</span></code>.</li>
	</ul>


	<ul>
	<li>RSpec &gt;= 1.0.0 is now required by Ruby-VPI.</li>
	</ul>


	<ul>
	<li>The <a href="readme.html#intro.license">project license</a> has been further simplified.</li>
	</ul>


	<h2>Repairs</h2>


	<ul>
	<li>Restored support for Enumerable methods in <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span></code>.</li>
	</ul>


	<ul>
	<li>The specification now begins to execute at simulation time 0. Previously it began at simulation time 1.</li>
	</ul>


	<h2>Improvements</h2>


	<ul>
	<li>The <tt>bench.rb</tt> and <tt>bench.v</tt> files of a generated test have been eliminated!

	<p>One important benefit is that the Ruby interface to the Verilog module under test is now a direct reference, whereas previously it was an <em>indirect</em> reference (it pointed to the Verilog module defined in <tt>bench.v</tt>, which in turn wrapped around the actual Verilog module under test).</p>


	<p>As a result, you can now access the internals of the Verilog module under test by simply calling methods on the Ruby interface, as you would naturally expect to be the case.</p></li>
	</ul>


	<ul>
	<li>The &#8220;a&#8221; accessor, which returns an <em>array</em> of child handles, has been added to <a href="manual.html#tbl:accessors">the method naming format</a> for accessing child handles.</li>
	</ul>


	<ul>
	<li>All parameter objects in the Verilog module under test are automatically made available as constants. For example, if the Verilog module under test has the name <code class="code">counter</code> and has a parameter object named <code class="code"><span style="color:#036; font-weight:bold">WIDTH</span></code>, then you can access the integer value of that parameter using <code class="code"><span style="color:#036; font-weight:bold">Counter</span>::<span style="color:#036; font-weight:bold">WIDTH</span></code>.</li>
	</ul>


	<ul>
	<li>The automated test generator now tries to automatically detect the clock and reset signal from Verilog module declarations.</li>
	</ul>


	<ul>
	<li>The automated test generator now supports Verilog 95 style module declarations.</li>
	</ul>


	<ul>
	<li>Exceptions are now raised when you try to write to a read-only VPI property, such as <code class="code"><span style="color:#036; font-weight:bold">VpiName</span></code>.</li>
	</ul>


	<ul>
	<li>Added <code class="code">high?</code>, <code class="code">high!</code>, <code class="code">low?</code>, and <code class="code">low!</code> methods to the <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span></code> class.</li>
	</ul>


	<ul>
	<li>Revised the user manual by removing unnecessary sections and adding newer material from my master&#8217;s thesis.</li>
	</ul>


	<h2>Contributions</h2>


	<ul>
	<li>Added Jacinto Shy II&#8217;s <a href="http://jacintoshy.blogspot.com/2007/05/hacking-verilog-with-ruby-part-2.html">register file example</a> to Ruby-VPI. It can be found in <tt>samp/register_file/</tt>.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a16.0.1" class="section">
        <h1 class="title">
          <a href="#a-607188328">4</a>

          &nbsp;

          Version 16.0.1 (2007-05-27)
        </h1>

        This release restores support for installation on Mac <span class="caps">OS X</span>.


	<h2>Thanks</h2>


	<ul>
	<li>Mark Thompson <a href="http://rubyforge.org/tracker/index.php?func=detail&#38;aid=11125&#38;group_id=1339&#38;atid=5281">reported and solved</a> the problem.</li>
	</ul>


	<h2>Repairs</h2>


	<ul>
	<li>Shared-object files have a file extension of <tt>.so</tt> in Linux and <tt>.bundle</tt> on Mac <span class="caps">OS X</span>.  Previously, only the Linux file extension was supported.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a16.0.0" class="section">
        <h1 class="title">
          <a href="#a-607191278">5</a>

          &nbsp;

          Version 16.0.0 (2007-05-02)
        </h1>

        This release adds support for the <a href="http://www.cadence.com/products/functional_ver/nc-verilog/">Cadence NC-Sim</a> simulator, improves the project website and documentation, simplifies interaction with VPI, and comes with a more permissive license.


	<h2>Caution</h2>


	<ul>
	<li>The <code class="code"><span style="color:#036; font-weight:bold">Integer</span>.ensure_min</code> and <code class="code"><span style="color:#036; font-weight:bold">Integer</span>.ensure_max</code> methods have been removed from the <tt>ruby-vpi/integer.rb</tt> library because Ruby already has idioms for these operations: <pre>
&gt;&gt; 5.ensure_min 10
=&gt; 10
&gt;&gt; [5, 10].max
=&gt; 10

&gt;&gt; 5.ensure_max 10
=&gt; 5
&gt;&gt; [5, 10].min
=&gt; 5
</pre></li>
	</ul>


	<ul>
	<li>Ruby-VPI is now developed under a <a href="readme.html#intro.license">more permissive license</a> that better reflects my ethical beliefs than <a href="http://www.gnu.org/copyleft/gpl.html">the previous license</a>.</li>
	</ul>


	<h2>New features</h2>


	<ul>
	<li>The <a href="http://www.cadence.com/products/functional_ver/nc-verilog/">Cadence NC-Sim</a> (ncsim) simulator is now supported.</li>
	</ul>


	<ul>
	<li>VPI structures (whose names begin with &#8220;S_&#8221;) now allow initialization of their members through their constructor, in the style of Ruby on Rails. For example, the expression <code class="code">time = <span style="color:#036; font-weight:bold">S_vpi_time</span>.new <span style="color:#A60">:type</span> =&gt; <span style="color:#036; font-weight:bold">VpiSuppressTime</span></code> is equivalent to: <pre class="code">
time      = <span style="color:#036; font-weight:bold">S_vpi_time</span>.new
time.type = <span style="color:#036; font-weight:bold">VpiSuppressTime</span>
</pre></li>
	</ul>


	<ul>
	<li>Added the <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span>.cbValueChange</code> method which simplifies the registration of a value-change callback for a particular VPI handle. For instance, the user manual&#8217;s <a href="manual.html#ex..callback">example of setting up a value-change callback</a> can now be written as follows: <pre class="code">
<span style="color:#036; font-weight:bold">Counter</span>.count.cbValueChange <span style="color:#080; font-weight:bold">do</span> |s_cb_data|
puts <span style="background-color:#fff0f0"><span style="color:#710">&quot;</span><span style="color:#D20">hello from callback! time=</span><span style="background: #eee"><span style="font-weight: bold; color: #888">#{</span>s_cb_data.time.to_i<span style="font-weight: bold; color: #888">}</span></span><span style="color:#D20"> count=</span><span style="background: #eee"><span style="font-weight: bold; color: #888">#{</span>s_cb_data.obj.intVal<span style="font-weight: bold; color: #888">}</span></span><span style="color:#710">&quot;</span></span>
<span style="color:#080; font-weight:bold">end</span>
</pre></li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>Revised the project website according to the <a href="http://producingoss.com">Producing OSS</a> guidelines.</li>
	</ul>


	<ul>
	<li>Added instructions for checking out source code and generating documentation.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a15.0.2" class="section">
        <h1 class="title">
          <a href="#a-607193568">6</a>

          &nbsp;

          Version 15.0.2 (2007-01-22)
        </h1>

        This release fixes problems with linking of the C extension and installation of the gem.


	<h2>Details</h2>


	<ul>
	<li>Added checks for POSIX threads &#38; Ruby libraries before creating makefile. Otherwise the <tt>.so</tt> files were not being linked to those libraries on the MASC machine!</li>
	</ul>


	<ul>
	<li>The <strong>make</strong> program on the MASC machine does not like an empty Makefile. It was causing gem installation to fail.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a15.0.1" class="section">
        <h1 class="title">
          <a href="#a-607195998">7</a>

          &nbsp;

          Version 15.0.1 (2007-01-15)
        </h1>

        This release fixes another problem with compilation of the C extension and improves the user documentation&#8217;s appearance.


	<h2>Thanks</h2>


	<ul>
	<li>Derek Graham reported the problem with compilation of the C extension.</li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>Restored the monkey patch, which was removed in release 14.0.0, for the SWIG <code class="code">va_list</code> problem.</li>
	</ul>


	<ul>
	<li>Made table of contents in-line with the content in user documentation.</li>
	</ul>


	<ul>
	<li>Added printer-friendly stylesheet for user documentation.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a15.0.0" class="section">
        <h1 class="title">
          <a href="#a-607198768">8</a>

          &nbsp;

          Version 15.0.0 (2007-01-13)
        </h1>

        <p>This release fixes a problem with compilation of the C extension, and makes clock generation code correctly affect Ruby prototypes.</p>


	<h2>Thanks</h2>


	<ul>
	<li>Derek Graham reported the problem with compilation of the C extension.</li>
	</ul>


	<h2>Caution</h2>


	<ul>
	<li>The <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::advance_time</code> method (instead of the <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::simulate</code> method) now invokes the design&#8217;s <code class="code">simulate!</code> method when prototyping is enabled.

	<p>This makes clock generation code (passed to the <code class="code"><span style="color:#036; font-weight:bold">RubyVpi</span>::init_bench</code> method) affect Ruby prototypes, just as it affects a real Verilog design.</p>


	<p>As a result, Ruby prototypes may need to check for edge-triggering through the new <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span>.posedge?</code> and <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span>.negedge?</code> methods. For example, see the <a href="manual.html#fig..counter_proto.rb">new implementation of the Counter prototype</a>.</p></li>
	</ul>


	<h3>New features</h3>


	<ul>
	<li>Added <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span>.posedge?</code> and <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span>.negedge?</code> methods which check if a handle&#8217;s logic value is currently at a positive or negative edge, respectively.</li>
	</ul>


	<ul>
	<li>Added <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">S_vpi_time</span>.integer</code> and <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">S_vpi_time</span>.integer=</code> methods which access the <code class="code">high</code> and <code class="code">low</code> integer fields as a single 64-bit integer.</li>
	</ul>


	<ul>
	<li>Added utility methods for accessing the <code class="code">value</code> field in the <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">S_vpi_value</span></code> structure.</li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>Fixed problem with incorrect Ruby library flag in <tt>ext/extconf.rb</tt>. It happens that the <code class="code">mkmf</code> library determines the correct library flag all by itself!</li>
	</ul>


	<ul>
	<li>Added new <a href="manual.html#usage.prototyping">prototyping section</a> to user manual.</li>
	</ul>


	<ul>
	<li>Fixed some broken URLs in user documentation.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a14.0.0" class="section">
        <h1 class="title">
          <a href="#a-607201618">9</a>

          &nbsp;

          Version 14.0.0 (2006-12-30)
        </h1>

        This release adds support for simulation callbacks, renders Verilog benches <em>fully simplified</em>, and revises the user manual to reflect major changes.


	<h2>Caution</h2>


	<ul>
	<li>The <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::relay_verilog</code> method has been replaced by <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::simulate</code>.

	<p>Please update you tests accordingly, because invoking the <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::relay_verilog</code> method directly will cause your tests to freeze/hang.</p></li>
	</ul>


	<ul>
	<li>Verilog benches no longer contain any clock generation code. They are now mere skeletons, whose <em>only</em> purpose is to instantiate the design under test.

	<p>The clock generation code is now contained in the Ruby bench.</p></li>
	</ul>


	<h3>New features</h3>


	<ul>
	<li>The <code class="code"><span style="color:#036; font-weight:bold">RubyVpi</span>::init_bench</code> method now gives you <em>complete control</em> over performing a clock/operation/whatever cycle for your design. This feature allows you to work with multi-clocked designs.</li>
	</ul>


	<ul>
	<li>Callbacks are now supported through the <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::vpi_register_cb</code> method. See <a href="manual.html#usage.vpi.callbacks">the callbacks section in the user manual</a> for details.</li>
	</ul>


	<ul>
	<li>Added the <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::advance_time</code> method, which makes the Verilog simulator simulate a given number of time steps.</li>
	</ul>


	<ul>
	<li>Added the <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::simulation_time</code> method, which gives you the current simulation time as a 64-bit integer.</li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>Removed the monkey patch for the SWIG <code class="code">va_list</code> problem&#8212;it no longer occurs.</li>
	</ul>


	<ul>
	<li>Cleansed the appearance of the user documentation.
	<ul>
	<li>Added indices to section headings, just like LaTeX.</li>
		<li>Admonition boxes no longer interfere with surrounding text, and they don&#8217;t have big gap above them.</li>
		<li>Navigation menu is now elastic (fluid layout).</li>
	</ul></li>
	</ul>


	<ul>
	<li>Revised the user manual and added new content.
	<ul>
	<li>Moved &#8220;VPI utility layer&#8221; section from background chapter into usage chapter in user manual.</li>
		<li>Added a nice introduction to entire manual with links to reference documentation.</li>
	</ul></li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a13.0.0" class="section">
        <h1 class="title">
          <a href="#a-607204228">10</a>

          &nbsp;

          Version 13.0.0 (2006-12-27)
        </h1>

        This release fixes a <em>major</em> instability bug, simplifies generated Verilog benches, and purifies the API reference documentation.


	<h2>Caution</h2>


	<ul>
	<li>The <code class="code"><span style="color:#d70; font-weight:bold">$ruby_init</span></code> and <code class="code"><span style="color:#d70; font-weight:bold">$ruby_relay</span></code> system task/functions have been removed. Generated Verilog benches no longer use them.
	<ul>
	<li>To pass your own command-line options to Ruby, set the <code class="code"><span style="color:#036; font-weight:bold">RUBYOPT</span></code> environment variable before running a test.</li>
	</ul></li>
	</ul>


	<h3>New features</h3>


	<ul>
	<li>You can now choose when <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::relay_verilog</code> is triggered: upon positive/negative edge of the clock signal, or any other criteria. This is done by passing a block to the <code class="code"><span style="color:#036; font-weight:bold">RubyVpi</span>::init_bench</code> method (see <a href="../ref/ruby/classes/RubyVpi.html">the API reference documentation</a> for details).</li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>Fixed a major instability bug that was randomly causing segmentation faults and pthread assertion failures.

	<p>The problem was that the <code class="code"><span style="color:#d70; font-weight:bold">$ruby_init</span></code> system task/function was mischeviously unlocking a pthread mutex. From then onward, all code assumed that the mutex was still locked&#8212;but in reality, the mutex was already unlocked.</p></li>
	</ul>


	<ul>
	<li>Replaced the <code class="code"><span style="color:#d70; font-weight:bold">$ruby_init</span></code> and <code class="code"><span style="color:#d70; font-weight:bold">$ruby_relay</span></code> system task/functions with callbacks.</li>
	</ul>


	<ul>
	<li>Excluded internal stuff from the API reference documentation for Ruby.</li>
	</ul>


	<ul>
	<li>Removed system-dependent path <tt>/usr/bin/ruby</tt> from the tools.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a12.1.0" class="section">
        <h1 class="title">
          <a href="#a-607206878">11</a>

          &nbsp;

          Version 12.1.0 (2006-12-22)
        </h1>

        This release adds interactive debugging support, adds new sections to the user manual, and cleanses some internals.


	<h2>Caution</h2>


	<ul>
	<li>The <tt>lib/ruby-vpi/rspec.rb</tt> and <tt>lib/ruby-vpi/xx.rb</tt> files have been removed because they are no longer necessary.</li>
	</ul>


	<ul>
	<li>rSpec 0.7.0 or newer is now required because the sample tests utilize the <code class="code">should ==</code> syntax.</li>
	</ul>


	<h3>New features</h3>


	<ul>
	<li>Test runners now support the <code class="code"><span style="color:#036; font-weight:bold">DEBUG</span></code> environment variable, which enables the interactive debugger (ruby-debug) in <a href="http://www.datanoise.com/articles/2006/12/20/post-mortem-debugging">post-mortem debugging mode</a>.
	<ul>
	<li>The <code class="code">debugger</code> command can also be used when the <code class="code"><span style="color:#036; font-weight:bold">DEBUG</span></code> environment variable is not activated.</li>
	</ul></li>
	</ul>


	<ul>
	<li>Status messages, which are shown during initialization of a Ruby bench, now appear in your simulator&#8217;s log files.</li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>ruby-debug is now a gem dependency for Ruby-VPI.</li>
	</ul>


	<ul>
	<li>Added documentation about <a href="manual.html#usage.test-runner">test runners</a> and the <a href="manual.html#usage.debugger">interactive debugger</a> in the user manual.</li>
	</ul>


	<ul>
	<li>Added a <tt>README</tt> file with hint about where to find the user manual.</li>
	</ul>


	<ul>
	<li>Removed code that wasn&#8217;t being used, according to code coverage analysis, from the pipelined ALU sample.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a12.0.2" class="section">
        <h1 class="title">
          <a href="#a-607209028">12</a>

          &nbsp;

          Version 12.0.2 (2006-12-18)
        </h1>

        This release fixes a problem in the 12.0.1 gem, where the <strong>generate_test.rb</strong> and <strong>header_to_ruby.rb</strong> tools were not being installed properly.

      </div>
    
      <hr style="display: none"/>

      <div id="a12.0.1" class="section">
        <h1 class="title">
          <a href="#a-607211418">13</a>

          &nbsp;

          Version 12.0.1 (2006-12-18)
        </h1>

        <p>This release fixes a problem in code coverage analysis.</p>


	<h2>Thanks</h2>


	<ul>
	<li>Mauricio Fernandez helped me solve the problem with code coverage analysis.</li>
	</ul>


	<h2>Details</h2>


	<p>Previously, code coverage reports were not providing any useful information because they were being generated <em>before</em> the test had a chance to run. This problem has been fixed&#8212;code coverage reports are now generated <em>after</em> the test has finished running.</p>


	<p>This problem occurred because I had forgotten that <code class="code"><span style="color:#036; font-weight:bold">Kernel</span>.at_exit</code> invokes the blocks passed to it in <em>reverse</em> order. So, the coverage report was being generated before Test::Unit had a chance to run (it also uses <code class="code"><span style="color:#036; font-weight:bold">Kernel</span>.at_exit</code>).</p>

      </div>
    
      <hr style="display: none"/>

      <div id="a12.0.0" class="section">
        <h1 class="title">
          <a href="#a-607214448">14</a>

          &nbsp;

          Version 12.0.0 (2006-12-07)
        </h1>

        This release adds support for the <a href="http://chneukirchen.org/blog/archive/2006/10/announcing-test-spec-0-2-a-bdd-interface-for-test-unit.html">test/spec</a> library, fixes some bugs, and improves the user manual and generated tests.


	<h2>Caution</h2>


	<ul>
	<li>Icarus Verilog 0.8 has been demoted to a <a href="manual.html#setup.reqs">mostly acceptable</a> status.</li>
	</ul>


	<ul>
	<li>Generated Verilog benches no longer supply the <tt>-w</tt> option to the <code class="code"><span style="color:#d70; font-weight:bold">$ruby_init</span></code> task.</li>
	</ul>


	<ul>
	<li>The <code class="code">ruby-vpi/runner_proxy</code> library now invokes test runners
	<ul>
	<li>just before exiting. Thus, you can invoke tasks in the main <tt>Rakefile</tt> before the test runners are invoked.</li>
		<li>located within any directory that is a descendant of the current working directory.</li>
	</ul></li>
	</ul>


	<ul>
	<li>The <code class="code"><span style="color:#036; font-weight:bold">SIMULATOR_ARGS</span></code> parameter of generated runners has been renamed to <code class="code"><span style="color:#036; font-weight:bold">SIMULATOR_ARGUMENTS</span></code> for clarity.</li>
	</ul>


	<ul>
	<li>The automated test generator
	<ul>
	<li>no longer displays the <strong>backup</strong> status indicator.</li>
		<li>now supplies a third argument to the <code class="code"><span style="color:#036; font-weight:bold">MERGER</span></code> command.</li>
		<li>no longer replaces existing files with newly generated content during the <strong>update</strong> action. Instead, it now writes the newly generated output to a <tt>.new</tt> file and then invokes the <code class="code"><span style="color:#036; font-weight:bold">MERGER</span></code> command.</li>
	</ul></li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>The <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span></code> class has two new methods: <code class="code">x!</code> and <code class="code">z!</code>, which set the handle&#8217;s logic value to <em>unknown</em> and <em>high impedance</em> respectively.</li>
	</ul>


	<ul>
	<li>The tests for the simple up-counter example were randomly failing because the specifications were not asserting the design&#8217;s <code class="code">reset</code> signal long enough. So the design was getting into weird states and behaving in a non-deterministic way. This problem has been fixed.</li>
	</ul>


	<ul>
	<li>The user manual has been revised and some minor issues have been fixed.</li>
	</ul>


	<h3>Test generation</h3>


	<ul>
	<li>The automated test generator accepts new command-line options:
	<ul>
	<li><tt>--test-unit</tt></li>
		<li><tt>--test-spec</tt></li>
		<li><tt>--tspec</tt></li>
	</ul></li>
	</ul>


	<ul>
	<li>The automated test generator was crashing when parsing module parameters of an input file which did not have any module parameters. This has been fixed.</li>
	</ul>


	<ul>
	<li>Generated Verilog benches now contain simpler clock generation code.</li>
	</ul>


	<ul>
	<li>Generated runners now contain
	<ul>
	<li>a <code class="code"><span style="color:#A60">:setup</span></code> task which is invoked before the simulator runs. It can be used to make preprations, such as converting Verilog header files into Ruby, for the simulation.</li>
		<li>better explanations to accomodate new users.</li>
	</ul></li>
	</ul>


	<ul>
	<li>Specifications generated in the <strong>generic</strong> format no longer contain a class that is instantiated in the generated Ruby bench.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a11.1.1" class="section">
        <h1 class="title">
          <a href="#a-607216938">15</a>

          &nbsp;

          Version 11.1.1 (2006-11-15)
        </h1>

        This release fixes a bug in the automated test generator, unifies the user manual and the website into a single documentation system, and adds support for rSpec 0.7.2.


	<h2>Thanks</h2>


	<ul>
	<li>John Burr found the bug in the automated test generator.</li>
	</ul>


	<h2>Caution</h2>


	<ul>
	<li>The user manual is now available <em>only</em> in HTML format. If you still wish to have a plain-text version, you can use a text-based browser, such as <a href="http://lynx.browser.org/">lynx</a>, to perform the necessary conversion.</li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>The automated test generator no longer crashes when parsing a Verilog module declaration that contains multiple module parameters.</li>
	</ul>


	<ul>
	<li>The user manual and the website are now written using a custom documentation system based on RedCloth and ERB instead of DocBook-XML. This makes it easier to edit the user manual and reuse its content in other areas of the website.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a11.1.0" class="section">
        <h1 class="title">
          <a href="#a-607219728">16</a>

          &nbsp;

          Version 11.1.0 (2006-11-08)
        </h1>

        This release fixes a bug in generated benches, improves the <a href="../ref/ruby/classes/Vpi/Handle.html">the <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span></code> class</a>, and improves performance by roughly 20%.


	<h2>Thanks</h2>


	<ul>
	<li>Matt Fischler found the bug in generated benches (see below).</li>
	</ul>


	<h2>Caution</h2>


	<ul>
	<li>A bug in generated Verilog and Ruby benches, which caused the <pre>ruby: no such file to load -- ruby-vpi (LoadError)</pre> error, has been fixed. Please regenerate your tests to apply this bug fix to your tests.</li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>The class <code class="code"><span style="color:#036; font-weight:bold">SWIG</span>::<span style="color:#036; font-weight:bold">TYPE_p_unsigned_int</span></code> has been aliased as <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span></code> for easier access.</li>
	</ul>


	<ul>
	<li><code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span>.to_s</code> and <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span>.inspect</code> now produce more informative output. For example, what used to appear as <pre>#&lt;SWIG::TYPE_p_unsigned_int:0x2aaab6574fa0&gt;</pre> now appears as <pre>#&lt;Vpi::Handle vpiModule fullName=counter_rspec_bench, size=-1, file=counter_rspec_bench.v, lineNo=2&gt;</pre> in this release.
	<ul>
	<li>You can also provide a list of VPI properties, as names or integer constants, to those methods to see additional information in the output.</li>
	</ul></li>
	</ul>


	<ul>
	<li><code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span></code> now implements all methods from <code class="code"><span style="color:#036; font-weight:bold">Enumerable</span></code>, such as <code class="code">map</code>, <code class="code">each</code>, <code class="code">select</code>, and so on. However, unlike their counterparts in <code class="code"><span style="color:#036; font-weight:bold">Enumerable</span></code>, these methods also accept a list of VPI properties, as names or integer constants. Thus, you are now able to write <code class="code">handle.select(<span style="color:#A60">:reg</span>, <span style="color:#A60">:net</span>) {|h| h.size &gt; <span style="color:#00D; font-weight:bold">5</span>}</code> to obtain a list of child handles to registers and nets whose capacity is greater than 5 bits.</li>
	</ul>


	<ul>
	<li>The <code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span>.[]</code>, <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 now accept names of VPI properties as well as their integer constants. Thus, you are now able to write <code class="code">handle[<span style="color:#A60">:reg</span>, <span style="color:#A60">:net</span>]</code> to obtain a list of handles to all child registers and nets.</li>
	</ul>


	<ul>
	<li><code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span>.method_missing</code> has been refactored to cache queries. There is now, approximately, 20% improvement in performance.</li>
	</ul>


	<ul>
	<li><code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span>.method_missing</code> has been fixed to accept operations with multiple underscores. For example, before this release, you could not write <code class="code">handle.find_all_reg {|r| r.name =~ <span style="background-color:#fff0ff"><span style="color:#404">/</span><span style="color:#808">foo</span><span style="color:#404">/</span></span>}</code> because the &#8220;find_all_reg&#8221; method would be interpreted as the operation &#8220;find&#8221; and the VPI property &#8220;all_reg&#8221;.</li>
	</ul>


	<ul>
	<li><code class="code"><span style="color:#036; font-weight:bold">Vpi</span>::<span style="color:#036; font-weight:bold">Handle</span>.method_missing</code> no longer requires that the first letter of a method be lower case. For example, now you can now write <code class="code">handle.<span style="color:#036; font-weight:bold">IntVal</span></code> in addition to <code class="code">handle.intVal</code>.</li>
	</ul>


	<ul>
	<li>The <code class="code"><span style="color:#036; font-weight:bold">IntegerGenerator</span></code> class, in the pipelined ALU example, has been fixed so that multiple instances do not interfere with the generation of each other&#8217;s prime integers.</li>
	</ul>


	<ul>
	<li>Due to a bug in the <tt>Rakefile</tt>, the reference documentation was not included in the previous few releases. This has been fixed.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a11.0.0" class="section">
        <h1 class="title">
          <a href="#a-607222378">17</a>

          &nbsp;

          Version 11.0.0 (2006-11-05)
        </h1>

        This release shortens generated Ruby benches and uses the less confusing notation for defining <a href="http://wiki.rubygarden.org/Ruby/page/show/SingletonTutorial">singleton methods</a> in generated designs and prototypes.


	<h2>Caution</h2>


	<ul>
	<li>The arguments for the <a href="../ref/ruby/classes/RubyVpi.html"><code class="code"><span style="color:#036; font-weight:bold">RubyVPI</span>.init_bench</code> method</a> have changed.</li>
	</ul>


	<ul>
	<li><strong>generate_test.rb</strong> no longer emits undocumented status indicators: <em>name</em> and <em>format</em>.</li>
	</ul>


	<ul>
	<li>The source code is no longer distributed as a <strong>zip</strong> package, because it seems to be quite underutilized in comparison to the <strong>tgz</strong> and <strong>gem</strong> packages.</li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>Generated Ruby benches have been shortened to just <em>one</em> line of code!</li>
	</ul>


	<ul>
	<li>The less confusing notation of <pre class="code"><span style="color:#080; font-weight:bold">def</span> some_object.a_singleton_method
do_stuff
<span style="color:#080; font-weight:bold">end</span></pre> is now used instead of the <pre class="code"><span style="color:#080; font-weight:bold">class</span> &lt;&lt; <span style="color:#B06; font-weight:bold">some_object</span>
<span style="color:#080; font-weight:bold">def</span> <span style="color:#06B; font-weight:bold">a_singleton_method</span>
  do_stuff
<span style="color:#080; font-weight:bold">end</span>
<span style="color:#080; font-weight:bold">end</span></pre> notation.
	<ul>
	<li>The tutorial and examples have been updated accordingly.</li>
	</ul></li>
	</ul>


	<ul>
	<li>The pipelined ALU example now has an updated <code class="code"><span style="color:#036; font-weight:bold">IntegerGenerator</span></code> class.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a10.0.0" class="section">
        <h1 class="title">
          <a href="#a-607225288">18</a>

          &nbsp;

          Version 10.0.0 (2006-11-05)
        </h1>

        This release adds the ability to access a handle&#8217;s children and reduces the amount of code produced by the automated test generator.


	<h2>Thanks</h2>


	<ul>
	<li>Matt Fischler found the problem of misdirected compilation errors in Verilog benches.</li>
	</ul>


	<h2>Caution</h2>


	<ul>
	<li>The way in which Ruby-VPI and generated tests interact has changed: the design is now a VPI handle object and the <tt>design.rb</tt> and <tt>proto.rb</tt> files define <a href="http://wiki.rubygarden.org/Ruby/page/show/SingletonTutorial">singleton methods</a> for that object.
	<ul>
	<li>I suggest that you regenerate your existing tests (just run <strong>generate_test.rb</strong> again) whilst employing the service of a text merging tool (see the user manual).</li>
	</ul></li>
	</ul>


	<ul>
	<li>You can now access a handle&#8217;s children by simply calling methods on it. In the event that a child handle has the same name as a VPI property, the child is given priority. However, you can always access VPI properties explicitly via the <code class="code">get_value</code> and <code class="code">put_value</code> methods.</li>
	</ul>


	<ul>
	<li><strong>generate_test.rb</strong> no longer accepts the <pre>-s</pre> and <pre>-u</pre> options. Use their longer counterparts <pre>--rspec</pre> and <pre>--xunit</pre> instead.</li>
	</ul>


	<h2>Details</h2>


	<h3>Automated test generator</h3>


	<ul>
	<li>Generated Verilog benches no longer divert compilation errors from Verilog design files. That is, if the Verilog simulator finds compilation errors in a Verilog design file, it will report that the Verilog design file is at fault (instead of reporting that the generated Verilog bench is at fault).</li>
	</ul>


	<ul>
	<li>The user is now notified when a backup of an existing file is made.</li>
	</ul>


	<ul>
	<li>Generated tests have been greatly simplified to reduce the amount of work for the user.
	<ul>
	<li>The design is now just a handle to the module in the Verilog bench.</li>
		<li><code class="code">include <span style="color:#036; font-weight:bold">Vpi</span></code> and <code class="code"><span style="color:#33B">@design</span></code> are no longer generated.</li>
		<li>The tutorial and examples have been updated accordingly.</li>
	</ul></li>
	</ul>


	<h3>User manual</h3>


	<ul>
	<li>Revised the stylesheet to make disjoint sections readily distinguishable from each other, through generous spacing and minor coloring.</li>
	</ul>


	<ul>
	<li>Added tips about <tt>ruby-vpi/runner_proxy</tt>, <pre>rake -T</pre>, and using <strong>kdiff3</strong> with <strong>generate_test.rb</strong>.</li>
	</ul>


	<ul>
	<li>Moved installation information into a new &#8220;setup&#8221; chapter.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a9.0.0" class="section">
        <h1 class="title">
          <a href="#a-607228078">19</a>

          &nbsp;

          Version 9.0.0 (2006-10-28)
        </h1>

        This release improves the automated test generator and adds new content to the user manual.


	<h2>Thanks</h2>


	<ul>
	<li>Matt Fischler helped test and debug the installation of Ruby-VPI on Windows.</li>
	</ul>


	<h2>Caution</h2>


	<ul>
	<li>The command-line options for <strong>generate_test.rb</strong> have changed. Run the command <pre>generate_test.rb --help</pre> for details.</li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>Test runners now attempt to resolve paths in <code class="code"><span style="color:#036; font-weight:bold">SIMULATOR_SOURCES</span></code> by searching for them within the directories specified in <code class="code"><span style="color:#036; font-weight:bold">SIMULATOR_INCLUDES</span></code>.</li>
	</ul>


	<ul>
	<li>Synopsys VCS is now used in a better way (via the <pre>-load</pre> option).
	<ul>
	<li>The old PLI table file (<tt>synopsys_vcs.tab</tt>) has been removed.</li>
		<li>The C extension has been revised accordingly.</li>
	</ul></li>
	</ul>


	<ul>
	<li>The C extension now compiles without errors in Cygwin.</li>
	</ul>


	<ul>
	<li>The automated test generator now:
	<ul>
	<li>Only creates output files when necessary.</li>
		<li>Updates existing output files using <a href="manual.html#setup.recom">text merging tools</a> if possible. (Refer to <code class="code"><span style="color:#036; font-weight:bold">MERGER</span></code> in the help information of <strong>generate_test.rb</strong>.)</li>
		<li>Emits progress information similar to Ruby on Rails.</li>
	</ul></li>
	</ul>


	<ul>
	<li>The user manual now:
	<ul>
	<li>Includes instructions for installing on Windows (via Cygwin).</li>
		<li>Has a recommended software section, with links to text merging tools.</li>
		<li>Uses the term <a href="http://en.wikipedia.org/wiki/XUnit">xUnit</a> instead of &#8220;unit test&#8221;.</li>
		<li>Correctly spells &#8220;rSpec&#8221;.</li>
	</ul></li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a8.2.0" class="section">
        <h1 class="title">
          <a href="#a-607230568">20</a>

          &nbsp;

          Version 8.2.0 (2006-10-24)
        </h1>

        This release simplifies configuration of generated tests.


	<h2>Thanks</h2>


	<ul>
	<li><a href="http://www.soe.ucsc.edu/classes/cmpe126/Fall06/">Students in the CMPE-126 class</a> for their comments and criticisms.</li>
	</ul>


	<h2>Caution</h2>


	<ul>
	<li>Generated runners now have a <code class="code"><span style="color:#036; font-weight:bold">SIMULATOR_INCLUDES</span></code> array, whose entries specify places where Verilog source files, needed by the Verilog design, reside.</li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>Generated Verilog benches now inherit all <code class="code"><span style="background-color:#f0fff0"><span style="color:#161">`</span><span style="color:#2B2">include</span></span></code> and <code class="code"><span style="background-color:#f0fff0"><span style="color:#161">`</span><span style="color:#2B2">define</span></span></code> directives from the Verilog design in a simpler manner.</li>
		<li>A generated test no longer requires its Verilog design to reside in the same directory.</li>
		<li>The sample tests have been updated accordingly.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a8.1.0" class="section">
        <h1 class="title">
          <a href="#a-607232918">21</a>

          &nbsp;

          Version 8.1.0 (2006-10-21)
        </h1>

        This release adds an integer library and renames the vpi_util library.


	<h2>Caution</h2>


	<ul>
	<li>The <strong>vpi_util</strong> library has been renamed to <strong>vpi</strong>. This change should not affect your code unless you explicitly imported this library via <code class="code">require <span style="background-color:#fff0f0"><span style="color:#710">'</span><span style="color:#D20">ruby-vpi/vpi_util</span><span style="color:#710">'</span></span></code>. In which case, you should update your code to use <code class="code">require <span style="background-color:#fff0f0"><span style="color:#710">'</span><span style="color:#D20">ruby-vpi/vpi</span><span style="color:#710">'</span></span></code> accordingly.</li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>An integer library has been added to simplify common tasks related to hardware and the binary number system. You can import this library for use via <code class="code">require <span style="background-color:#fff0f0"><span style="color:#710">'</span><span style="color:#D20">ruby-vpi/integer</span><span style="color:#710">'</span></span></code>.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a8.0.0" class="section">
        <h1 class="title">
          <a href="#a-607235508">22</a>

          &nbsp;

          Version 8.0.0 (2006-10-13)
        </h1>

        This release renames some identifiers for consistency, updates the documentation, and improves integration with RubyGems.


	<h2>Caution</h2>


	<ul>
	<li>The <code class="code"><span style="color:#036; font-weight:bold">RubyVPI</span></code> module has been renamed to <code class="code"><span style="color:#036; font-weight:bold">RubyVpi</span></code>.</li>
	</ul>


	<ul>
	<li>The <code class="code"><span style="color:#036; font-weight:bold">PROTO</span></code> environment variable has been renamed to <code class="code"><span style="color:#036; font-weight:bold">PROTOTYPE</span></code>.
	<ul>
	<li>In addition to using <strong>unset</strong>, you can now disable simulation of the prototype by assigning an empty value to this variable.</li>
	</ul></li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>We now use <a href="http://darcs.net">Darcs</a> for revision control, instead of Subversion. The source repository can now be accessed at <a href="http://ruby-vpi.rubyforge.org/src/ruby-vpi">http://ruby-vpi.rubyforge.org/src/ruby-vpi</a>.</li>
	</ul>


	<ul>
	<li>The source code is now distributed in tar.gz and zip form, in addition to gem.</li>
	</ul>


	<ul>
	<li>Some identifiers have been renamed for better consistency.</li>
	</ul>


	<ul>
	<li>The user manual now resides directly within the <tt>doc/</tt> directory.
	<ul>
	<li>The integration of documentation in <strong>gem_server</strong> has been improved.</li>
	</ul></li>
	</ul>


	<ul>
	<li>The glossary and tutorial in the user manual have been revised.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a7.3.0" class="section">
        <h1 class="title">
          <a href="#a-607237998">23</a>

          &nbsp;

          Version 7.3.0 (2006-09-30)
        </h1>

        This release fixes a bug in generated Verilog benches, includes parsed constants in generated tests, and adds new methods to handles.


	<h2>Caution</h2>


	<ul>
	<li>Handles now have two new methods:
	<ul>
	<li><code class="code">handle.x?</code> checks if the logic value is &#8220;don&#8217;t care&#8221; </li>
		<li><code class="code">handle.z?</code> checks if the logic value is high impedance</li>
	</ul></li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>Module instantiation code in generated Verilog benches has been fixed. Whitespace between the module type and instance variable was missing.</li>
	</ul>


	<ul>
	<li>The test generator tool now provides parsed Verilog constants and include-directives in generated Verilog benches; and parsed Verilog constants in generated Ruby designs.
	<ul>
	<li>The pipelined ALU example has been revised accordingly.</li>
	</ul></li>
	</ul>


	<ul>
	<li>A library for parsing Verilog source code has been added as <tt>lib/ruby-vpi/verilog_parser.rb</tt>.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a7.2.0" class="section">
        <h1 class="title">
          <a href="#a-607240408">24</a>

          &nbsp;

          Version 7.2.0 (2006-09-15)
        </h1>

        This release adds initial support for code coverage analysis via the <a href="http://eigenclass.org/hiki.rb?rcov">rcov library</a>.


	<h2>Thanks</h2>


	<ul>
	<li>Mauricio Fernandez helped me use rcov without its runner.</li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>Added initial support (full capabilites of the rcov library, such as its various analysis modes, are not yet utilized) for code coverage analysis, which can be enabled by setting the <code class="code"><span style="color:#036; font-weight:bold">COVERAGE</span></code> environment variable to a non-empty value before running a test.
	<ul>
	<li>For example, you can run a test with the GPL Cver simulator while enabling the generation of code coverage reports as follows: <pre>export COVERAGE=1; rake cver</pre></li>
	</ul></li>
	</ul>


	<ul>
	<li>Coverage reports are generated in text and HTML formats.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a7.1.0" class="section">
        <h1 class="title">
          <a href="#a-607242818">25</a>

          &nbsp;

          Version 7.1.0 (2006-08-29)
        </h1>

        This release simplifies running of multiple tests, restores compatibility with Synopsys VCS, and better integrates with RubyGems.


	<h2>Details</h2>


	<ul>
	<li>Added <tt>lib/ruby-vpi/runner_proxy.rb</tt> library which, when embedded into a Rakefile, runs all generated tests in the working directory with any specified arguments. For example, have a look at the <tt>samp/counter/Rakefile</tt> file.</li>
	</ul>


	<ul>
	<li>Fixed a bug that prevented one from running tests with Synopsys VCS.</li>
	</ul>


	<ul>
	<li>Ruby-VPI documentation is now available through RubyGems&#8217; <a href="http://docs.rubygems.org/read/chapter/2#page10"><strong>gem_server</strong> web interface</a>.</li>
	</ul>


	<ul>
	<li>The user manual now discusses how to determine the location of a Ruby-VPI installation.</li>
	</ul>


	<ul>
	<li>The <tt>tpl/</tt> directory has been removed.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a7.0.0" class="section">
        <h1 class="title">
          <a href="#a-607245508">26</a>

          &nbsp;

          Version 7.0.0 (2006-08-29)
        </h1>

        This release distributes Ruby-VPI as a gem, improves portability of generated tests, and fixes a bug.


	<h2>Caution</h2>


	<ul>
	<li><code class="code">put_value()</code> now accomodates register value overflows when verifying the value it has written.</li>
	</ul>


	<ul>
	<li>The test generator&#8217;s templates and the examples have been updated as follows:
	<ul>
	<li>Test runners no longer have to specify the path to Ruby-VPI installation directory. Instead, they simply <code class="code">require <span style="background-color:#fff0f0"><span style="color:#710">'</span><span style="color:#D20">ruby-vpi/runner</span><span style="color:#710">'</span></span></code>. Thus, you can run your tests on any machine with Ruby-VPI without having to know where it is installed.</li>
		<li>Ruby benches now invoke <code class="code"><span style="color:#036; font-weight:bold">RubyVPI</span>.init_bench</code> instead of <code class="code">require <span style="background-color:#fff0f0"><span style="color:#710">'</span><span style="color:#D20">bench</span><span style="color:#710">'</span></span>; setup_bench</code> to become initialized.</li>
	</ul></li>
	</ul>


	<ul>
	<li>All Ruby libraries in the <tt>lib/</tt> directory have been moved into <tt>lib/ruby-vpi/</tt> to prevent load-path clashes with other gems. You should access these libraries by prefixing their path with &#8220;ruby-vpi&#8221;. For example, <code class="code">require <span style="background-color:#fff0f0"><span style="color:#710">'</span><span style="color:#D20">vpi_util</span><span style="color:#710">'</span></span></code> should now be written as <code class="code">require <span style="background-color:#fff0f0"><span style="color:#710">'</span><span style="color:#D20">ruby-vpi/vpi_util</span><span style="color:#710">'</span></span></code>.</li>
	</ul>


	<ul>
	<li>The <tt>src/</tt> directory has been renamed to <tt>ext/</tt> to follow RubyGems convention.</li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>Ruby-VPI is now distributed only as a <a href="http://www.rubygems.org">source gem</a>. You can decompress the gem without installing it onto your system by running the command <pre>gem install -i output_directory ruby-vpi-7.0.0.gem</pre>. In addition, you can still obtain the source code directly from the Subversion repository.</li>
	</ul>


	<ul>
	<li>The tools in <tt>bin/</tt> become available in your system&#8217;s <tt>bin/</tt> directory when the gem is installed.
	<ul>
	<li>Usage and help information has been added to the <strong>header_to_ruby.rb</strong> tool.</li>
	</ul></li>
	</ul>


	<ul>
	<li>Incorrect spelling of GPL Cver (v should be uncapitalized) has been fixed.</li>
	</ul>


	<ul>
	<li>Incorrect link to GPL Cver website has been fixed.</li>
	</ul>


	<ul>
	<li>The user manual has been updated according to all of the above changes.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a6.3.0" class="section">
        <h1 class="title">
          <a href="#a-607248278">27</a>

          &nbsp;

          Version 6.3.0 (2006-08-27)
        </h1>

        This release adds support for the GPL Cver simulator, provides both binary and source packages, and explicitly defines the version numbering system.


	<h2>Caution</h2>


	<ul>
	<li>Ruby-VPI now only needs to be built once.
	<ul>
	<li>You can run tests with different Verilog simulators without having to re-compile Ruby-VPI.</li>
	</ul></li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>The GPL Cver simulator is now supported.</li>
	</ul>


	<ul>
	<li>Release packages are now available in both source and binary form.</li>
	</ul>


	<ul>
	<li>The RSpec based specifications for the counter example now use the <code class="code">should_equal</code> instead of the <code class="code">should_be</code> assertion, because the latter ensures strict equivalence. For instance, it will fail when a Fixnum is compared to a Bignum.</li>
	</ul>


	<ul>
	<li>We now follow the RubyGems project&#8217;s <a href="http://www.rubygems.org/read/chapter/7">rational versioning policy</a>. The version numbers of previous releases have been revised accordingly:
	<table>
		<tr>
			<th>Release date </th>
			<th>Original version number </th>
			<th>New version number </th>
		</tr>
		<tr>
			<td> 1999-10-31 </td>
			<td> 0.0   </td>
			<td> 0.0.0 </td>
		</tr>
		<tr>
			<td> 2006-02-26 </td>
			<td> 0.1   </td>
			<td> 1.0.0 </td>
		</tr>
		<tr>
			<td> 2006-04-17 </td>
			<td> 0.2   </td>
			<td> 2.0.0 </td>
		</tr>
		<tr>
			<td> 2006-04-23 </td>
			<td> 0.3   </td>
			<td> 3.0.0 </td>
		</tr>
		<tr>
			<td> 2006-04-28 </td>
			<td> 0.4   </td>
			<td> 3.1.0 </td>
		</tr>
		<tr>
			<td> 2006-05-13 </td>
			<td> 0.5   </td>
			<td> 3.2.0 </td>
		</tr>
		<tr>
			<td> 2006-05-25 </td>
			<td> 0.6   </td>
			<td> 4.0.0 </td>
		</tr>
		<tr>
			<td> 2006-07-22 </td>
			<td> 0.7   </td>
			<td> 5.0.0 </td>
		</tr>
		<tr>
			<td> 2006-07-29 </td>
			<td> 0.8   </td>
			<td> 5.1.0 </td>
		</tr>
		<tr>
			<td> 2006-08-04 </td>
			<td> 0.8.1 </td>
			<td> 5.1.1 </td>
		</tr>
		<tr>
			<td> 2006-08-07 </td>
			<td> 0.9   </td>
			<td> 6.0.0 </td>
		</tr>
		<tr>
			<td> 2006-08-09 </td>
			<td> 0.9.1 </td>
			<td> 6.1.0 </td>
		</tr>
		<tr>
			<td> 2006-08-26 </td>
			<td> 0.9.2 </td>
			<td> 6.2.0 </td>
		</tr>
	</table></li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a6.2.0" class="section">
        <h1 class="title">
          <a href="#a-607250788">28</a>

          &nbsp;

          Version 6.2.0 (2006-08-26)
        </h1>

        This release beautifies generated tests, adds checks to find signal width bugs, and includes a new tool.


	<h2>Caution</h2>


	<ul>
	<li><code class="code">put_value()</code> now returns the value it puts. Therefore, it is easier to chain together a series of assignments: <code class="code">foo.intVal = bar.intVal = baz.intVal = <span style="color:#00D; font-weight:bold">10</span></code></li>
	</ul>


	<ul>
	<li><code class="code">put_value()</code> now verifies that the value it puts was written correctly. This helps to find bugs regarding invalid assumptions about the number of bits supported by a signal.</li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>The test generator now uses ERB templates which ensures nice indentation of generated output.</li>
	</ul>


	<ul>
	<li>The test generator now decouples Ruby-VPI paths from Verilog benches via the RUBYLIB environment variable.</li>
	</ul>


	<ul>
	<li>A tool which converts Verilog headers into Ruby has been added.</li>
	</ul>


	<ul>
	<li>The source code is now indented with two spaces instead of one tab character.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a6.1.0" class="section">
        <h1 class="title">
          <a href="#a-607253118">29</a>

          &nbsp;

          Version 6.1.0 (2006-08-09)
        </h1>

        This release simplifies generated tests and fixes a bug.


	<h2>Details</h2>


	<ul>
	<li>The test generator now produces simpler Ruby benches and specifications.
	<ul>
	<li>A template used by generated specifications has been added.</li>
		<li>The counter example and tutorial have also been simplified accordingly.</li>
	</ul></li>
	</ul>


	<ul>
	<li>Boolean VPI property values are now correctly converted into Ruby truth values.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a6.0.0" class="section">
        <h1 class="title">
          <a href="#a-607255668">30</a>

          &nbsp;

          Version 6.0.0 (2006-08-07)
        </h1>

        This release adds support and documentation for rapid prototyping of Verilog designs in Ruby.


	<h2>Caution</h2>


	<ul>
	<li>The directory structure has been reorganized as follows:
	<ul>
	<li><tt>ext</tt> &rarr; <tt>src</tt></li>
		<li><tt>tools</tt> &rarr; <tt>bin</tt></li>
		<li><tt>examples</tt> &rarr; <tt>samp</tt></li>
	</ul></li>
	</ul>


	<ul>
	<li>All template files have been moved into the <tt>tpl</tt> directory.</li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>Support for prototyping designs in Ruby, before they are implemented in Verilog, has been added.
	<ul>
	<li>The <em>same</em> specification can be used to verify both prototype <em>and</em> design! :-)</li>
		<li>The tutorial in the user manual has been updated to discuss prototyping.
	<ul>
	<li>Prototypes have been added to the counter example.</li>
	</ul></li>
	</ul></li>
	</ul>


	<ul>
	<li>The user manual has been revised for consistency.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a5.1.1" class="section">
        <h1 class="title">
          <a href="#a-607258058">31</a>

          &nbsp;

          Version 5.1.1 (2006-08-04)
        </h1>

        This release fixes unreadable syntax coloring in the user manual.


	<h2>Thanks</h2>


	<ul>
	<li>Todd Nagengast and Matt Fischler notified me about unreadable text in the user manual.</li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>Source code comments in the user manual are now readable.</li>
	</ul>


	<ul>
	<li>The <tt>README</tt> and <tt>HISTORY</tt> files have been converted to <a href="http://www.textism.com/tools/textile/">textile</a> format.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a5.1.0" class="section">
        <h1 class="title">
          <a href="#a-607260808">32</a>

          &nbsp;

          Version 5.1.0 (2006-07-29)
        </h1>

        This release adds a tutorial to the user manual, and improves the tools and examples.


	<h2>Thanks</h2>


	<ul>
	<li>Phil Tomson corrected the URL of the RHDL website in the user manual.</li>
	</ul>


	<h2>Details</h2>


	<h3>User manual</h3>


	<ul>
	<li>A tutorial, based on the counter example, has been added to the user manual.</li>
	</ul>


	<ul>
	<li>The user manual&#8217;s appearance has been dramatically improved with syntax coloring for source code, and <a href="http://tango.freedesktop.org">graphics for admonitions and navigation</a>.</li>
	</ul>


	<h3>Examples</h3>


	<ul>
	<li>A specification, expressed in unit test format, has been added to the counter example.</li>
	</ul>


	<ul>
	<li>The <pre>--name</pre> and <pre>-n</pre> options, which lets you specify an identifier for a generated test, have been added to the <strong>generate_test.rb</strong> tool.</li>
	</ul>


	<ul>
	<li>Running <pre>rake clobber</pre> in an example directory no longer destroys documentation in the Ruby-VPI directory.</li>
	</ul>


	<ul>
	<li>The examples&#8217; Rakefiles now invoke all tests present in the directory via the <tt>launcher_template.rake</tt> template.</li>
	</ul>


	<ul>
	<li>The Rake template for test runners (generated by <tt>tools/generate_test.rb</tt>) has moved from <tt>examples/template.rake</tt> to <tt>examples/runner_template.rake</tt>.</li>
	</ul>


	<h3>VPI utility layer</h3>


	<ul>
	<li>The value of a handle&#8217;s boolean VPI property is treated as <code class="code"><span style="color:#038; font-weight:bold">false</span></code> if it is zero, because zero is <code class="code"><span style="color:#038; font-weight:bold">false</span></code> in the C language.</li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a5.0.0" class="section">
        <h1 class="title">
          <a href="#a-607263458">33</a>

          &nbsp;

          Version 5.0.0 (2006-07-22)
        </h1>

        This release enhances the VPI utility layer and adds new content to the user manual.


	<h2>Thanks</h2>


	<ul>
	<li>Jan Decaluwe corrected the description of MyHDL in the user manual.</li>
	</ul>


	<h2>Caution</h2>


	<ul>
	<li>SWIG is no longer required for users because its output is included in the release package.</li>
	</ul>


	<ul>
	<li>The <code class="code">handle.value</code> and <code class="code">handle.value=</code> methods have been removed.</li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>The VPI utility layer provides access to VPI properties of handles in a <a href="manual.html#background.org.vpi">simpler, more powerful way</a>.</li>
	</ul>


	<ul>
	<li>All VPI properties, except delay values, are now accessible from a handle.</li>
	</ul>


	<ul>
	<li>The user manual has been revised and new content in the organization and usage sections has been added.</li>
	</ul>


	<ul>
	<li>This release was tested and developed using:
	<ul>
	<li>Ruby 1.8.4 and Icarus Verilog 0.8 on i686 GNU/Linux</li>
		<li>Ruby 1.8.4 and Mentor Modelsim 6.1d on x86_64 GNU/Linux</li>
	</ul></li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a4.0.0" class="section">
        <h1 class="title">
          <a href="#a-607266088">34</a>

          &nbsp;

          Version 4.0.0 (2006-05-25)
        </h1>

        This release adds a comprehensive user manual, upgrades from make to <a href="http://rake.rubyforge.org">Rake</a>, and improves the test generation tool.


	<h2>Thanks</h2>


	<ul>
	<li>Jose Renau solved the problem of strange delays that occurred whenever a design was reset.</li>
	</ul>


	<h2>Caution</h2>


	<ul>
	<li>Rake has replaced the role of <strong>make</strong>. All makefiles have been converted accordingly.</li>
	</ul>


	<ul>
	<li>The test generation tool now generates multiple files (runner, bench, design, spec) and makes backups of existing files. See its help information for details.</li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>A comprehensive user manual, written in DocBook-XML, has been added.</li>
	</ul>


	<ul>
	<li>Support for RSpec 0.5.4 has been added.
	<ul>
	<li>The counter example now makes use of RSpec.</li>
	</ul></li>
	</ul>


	<ul>
	<li>This release was tested and developed using:
	<ul>
	<li>Ruby 1.8.4 and Icarus Verilog 0.8 on i686 GNU/Linux</li>
		<li>Ruby 1.8.4 and Mentor Modelsim 6.1d on x86_64 GNU/Linux</li>
	</ul></li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a3.2.0" class="section">
        <h1 class="title">
          <a href="#a-607268598">35</a>

          &nbsp;

          Version 3.2.0 (2006-05-13)
        </h1>

        This release adds a tool which generates test benches, and adds support for <a href="http://behaviour-driven.org">Behavior Driven Development</a> via the <a href="http://rspec.rubyforge.org">RSpec</a> library.


	<h2>Thanks</h2>


	<ul>
	<li>Scott L Holmes helped me <a href="http://article.gmane.org/gmane.comp.lang.ruby.general/150087">use the RSpec library without its runner</a> program.</li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>A tool, which generates most of a Ruby-VPI test bench from a Verilog 2001 module declaration, has been added.</li>
	</ul>


	<ul>
	<li>Ability to use RSpec in a test bench has been added.</li>
	</ul>


	<ul>
	<li>Ability to specify arbitrary command-line arguments to Verilog simulators has been added in the examples&#8217; makefile template.</li>
	</ul>


	<ul>
	<li>This release was tested and developed using:
	<ul>
	<li>Ruby 1.8.4 and Icarus Verilog 0.8 on i686 GNU/Linux</li>
		<li>Ruby 1.8.4 and Mentor Modelsim 6.1d on x86_64 GNU/Linux</li>
	</ul></li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a3.1.0" class="section">
        <h1 class="title">
          <a href="#a-607271188">36</a>

          &nbsp;

          Version 3.1.0 (2006-04-28)
        </h1>

        This release adds simple ways of reading and writing values to VPI handles, adds documentation for the VPI utility layer, and fixes the pipelined ALU example.


	<h2>Caution</h2>


	<ul>
	<li>The <strong>msim</strong> Makefile target for Mentor Modelsim has been renamed back to <strong>vsim</strong>.</li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>Simple, consistent ways of reading and writing values to handles have been added to the VPI utility layer. These ways are described in the <code class="code"><span style="color:#036; font-weight:bold">SWIG</span>::<span style="color:#036; font-weight:bold">TYPE_p_unsigned_int</span></code> class&#8217; documentation.</li>
	</ul>


	<ul>
	<li>The makefiles now use the <strong>rbconfig</strong> library to determine the default compiler and linker flags for Ruby.</li>
	</ul>


	<ul>
	<li>A race condition in the pipelined ALU example has been fixed. This example should now run successfully in all Verilog simulators.</li>
	</ul>


	<ul>
	<li>The project wiki has been abandoned in favor of RDoc.</li>
	</ul>


	<ul>
	<li>The project website is now generated by RDoc.</li>
	</ul>


	<ul>
	<li>This release was tested and developed using:
	<ul>
	<li>Ruby 1.8.4 and Icarus Verilog 0.8 on i686 GNU/Linux</li>
		<li>Ruby 1.8.4 and Mentor Modelsim 6.1d on x86_64 GNU/Linux</li>
	</ul></li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a3.0.0" class="section">
        <h1 class="title">
          <a href="#a-607273938">37</a>

          &nbsp;

          Version 3.0.0 (2006-04-23)
        </h1>

        This release adds support for the <em>entire</em> <a href="http://ieeexplore.ieee.org/xpl/standardstoc.jsp?isnumber=33945">IEEE Std. 1364-2005</a> VPI interface, and updates the examples into unit tests.


	<h2>Thanks</h2>


	<ul>
	<li>The <a href="http://www.swig.org/guilty.html">SWIG developers</a> made this project <em>much</em> easier! ;-)</li>
	</ul>


	<h2>Caution</h2>


	<ul>
	<li>The <strong>vsim</strong> Makefile target for Mentor Modelsim has been renamed to <strong>msim</strong>.</li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>The Ruby interface to VPI is now generated by <a href="http://www.swig.org">SWIG</a>.
	<ul>
	<li>The main <code class="code"><span style="color:#036; font-weight:bold">VPI</span></code> module has been renamed to <code class="code"><span style="color:#036; font-weight:bold">Vpi</span></code>.</li>
		<li>The <code class="code"><span style="color:#036; font-weight:bold">VPI</span>::<span style="color:#036; font-weight:bold">Handle</span></code> class has been removed.</li>
		<li>The <code class="code"><span style="color:#036; font-weight:bold">VPI</span>::stop</code>, <code class="code"><span style="color:#036; font-weight:bold">VPI</span>::finish</code>, and <code class="code"><span style="color:#036; font-weight:bold">VPI</span>::reset</code> methods have been removed.</li>
	</ul></li>
	</ul>


	<ul>
	<li>The <a href="http://www.boydtechinc.com/ptf/archive/ptf_2005/0737.html"><em>final ballot</em> version</a> of the <tt>vpi_user.h</tt> header file is now packaged along with and used by Ruby-VPI.</li>
	</ul>


	<ul>
	<li>The VPI module, its sub-classes, and its functionality have been replaced by the VPI utility layer (see <tt>src/vpi_util.rb</tt>).</li>
	</ul>


	<ul>
	<li>The examples now make use of the <strong>test/unit</strong> unit testing framework.</li>
	</ul>


	<ul>
	<li>The makefiles for the examples have been simplified through the use of a common template.</li>
	</ul>


	<ul>
	<li>This release was tested and developed using:
	<ul>
	<li>Ruby 1.8.4 and Icarus Verilog 0.8 on i686 GNU/Linux</li>
		<li>Ruby 1.8.4 and Mentor Modelsim 6.1d on x86_64 GNU/Linux</li>
	</ul></li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a2.0.0" class="section">
        <h1 class="title">
          <a href="#a-607276588">38</a>

          &nbsp;

          Version 2.0.0 (2006-04-17)
        </h1>

        This release fixes major bugs, adds support for Mentor Modelsim, and removes the <code class="code"><span style="color:#d70; font-weight:bold">$ruby_task</span></code> callback.


	<h2>Thanks</h2>


	<ul>
	<li>Nobu Nakada explained the <a href="http://article.gmane.org/gmane.comp.lang.ruby.general/146653">cross-thread violation on rb_gc()</a> error.</li>
	</ul>


	<h2>Caution</h2>


	<ul>
	<li>Removed <code class="code"><span style="color:#d70; font-weight:bold">$ruby_task</span></code> callback and ability to dynamically register system tasks from Ruby because inter-process communication is complicated at present.</li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>The &#8220;cross-thread violation on rb_gc()&#8221; error has been fixed.
	<ul>
	<li>The &#8220;stack level too deep (SystemStackError)&#8221; error has been fixed.</li>
		<li>The test/unit library can be used in Ruby test bench.</li>
		<li>Mentor Modelsim Verilog simulator works with Ruby-VPI.</li>
	</ul></li>
	</ul>


	<ul>
	<li>Added piplelined ALU example.</li>
	</ul>


	<ul>
	<li>This release was tested and developed using:
	<ul>
	<li>Ruby 1.8.4 and Icarus Verilog 0.8 on i686 GNU/Linux</li>
		<li>Ruby 1.8.4 and Modelsim 6.1d on x86_64 GNU/Linux</li>
		<li>Ruby 1.8.4 and Synopsys VCS-MX X-2005.06-SP1 on SPARC4 SunOS 5.10</li>
	</ul></li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a1.0.0" class="section">
        <h1 class="title">
          <a href="#a-607279478">39</a>

          &nbsp;

          Version 1.0.0 (2006-02-26)
        </h1>

        This release adds enough Verilog VPI functionality to make Ruby-VPI usable for simple test benches:
	<ul>
	<li>access Verilog objects through VPI handles</li>
		<li>read and change VPI handle values</li>
		<li>stop, finish, restart the simulation</li>
	</ul>


	<h2>Thanks</h2>


	<ul>
	<li>Jose Renau helped me debug how Synopsys VCS works with Verilog VPI. The problem was that VCS required calltf signatures to be <code class="code">void (*)(void)</code>, whereas the Verilog standard defines a calltf signature as <code class="code"><span style="color:#036; font-weight:bold">PLI_INT32</span> (*)(<span style="color:#036; font-weight:bold">PLI_BYTE8</span>*)</code>.</li>
	</ul>


	<ul>
	<li>Ross Bamford, Eric Hodel, and Yukihiro Matsumoto <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/180662">helped me discover</a> why the <code class="code"><span style="color:#036; font-weight:bold">SystemStackError</span></code> was happening.</li>
	</ul>


	<h2>Details</h2>


	<ul>
	<li>Implemented some Verilog VPI functionality:
	<ul>
	<li><code class="code"><span style="color:#036; font-weight:bold">VPI</span>::handle_by_name(string, <span style="color:#036; font-weight:bold">VPI</span>::<span style="color:#036; font-weight:bold">Handle</span>)</code> &rarr; <code class="code"><span style="color:#036; font-weight:bold">VPI</span>::<span style="color:#036; font-weight:bold">Handle</span></code></li>
		<li><code class="code"><span style="color:#036; font-weight:bold">VPI</span>::handle_by_name(string)</code> &rarr; <code class="code"><span style="color:#036; font-weight:bold">VPI</span>::<span style="color:#036; font-weight:bold">Handle</span></code></li>
		<li><code class="code"><span style="color:#036; font-weight:bold">VPI</span>::<span style="color:#036; font-weight:bold">Handle</span>.put_value(integer)</code></li>
		<li><code class="code"><span style="color:#036; font-weight:bold">VPI</span>::<span style="color:#036; font-weight:bold">Handle</span>.value = integer</code></li>
		<li><code class="code"><span style="color:#036; font-weight:bold">VPI</span>::<span style="color:#036; font-weight:bold">Handle</span>.get_value</code> &rarr; <code class="code">integer</code></li>
		<li><code class="code"><span style="color:#036; font-weight:bold">VPI</span>::<span style="color:#036; font-weight:bold">Handle</span>.value</code> &rarr; <code class="code">integer</code></li>
		<li><code class="code"><span style="color:#036; font-weight:bold">VPI</span>::stop</code></li>
		<li><code class="code"><span style="color:#036; font-weight:bold">VPI</span>::finish</code></li>
		<li><code class="code"><span style="color:#036; font-weight:bold">VPI</span>::reset</code></li>
	</ul></li>
	</ul>


	<ul>
	<li>Implemented some additional functionality:
	<ul>
	<li><code class="code"><span style="color:#036; font-weight:bold">VPI</span>::register_task(string, &amp;proc)</code></li>
	</ul></li>
	</ul>


	<ul>
	<li>Added ability to pass arbitrary command-line arguments to the Ruby interpreter (using <code class="code"><span style="color:#d70; font-weight:bold">$ruby_init</span></code>). Now you can invoke any Ruby script you want, instead of <tt>pli_init.rb</tt>.</li>
	</ul>


	<ul>
	<li>Added ability to dynamically register system tasks from Ruby, using <code class="code"><span style="color:#036; font-weight:bold">VPI</span>::register_task(<span style="background-color:#fff0f0"><span style="color:#710">&quot;</span><span style="color:#D20">task name</span><span style="color:#710">&quot;</span></span>)</code>, and call them from Verilog, using <code class="code"><span style="color:#d70; font-weight:bold">$ruby_task</span>(<span style="background-color:#fff0f0"><span style="color:#710">&quot;</span><span style="color:#D20">task name</span><span style="color:#710">&quot;</span></span>)</code>.</li>
	</ul>


	<ul>
	<li>Added <code class="code"><span style="color:#036; font-weight:bold">VPI</span>::<span style="color:#036; font-weight:bold">Handle</span></code> class which encapsulates a <code class="code">vpiHandle</code> VPI object.</li>
	</ul>


	<ul>
	<li>This release was tested and developed using:
	<ul>
	<li>Ruby 1.8.2 and Icarus Verilog 0.8 on i686 GNU/Linux</li>
		<li>Ruby 1.8.4, Synopsys <span class="caps">VCS X</span>-2005.06, and Mentor Modelsim 6.1b on i686 GNU/Linux</li>
	</ul></li>
	</ul>

      </div>
    
      <hr style="display: none"/>

      <div id="a0.0.0" class="section">
        <h1 class="title">
          <a href="#a-607281768">40</a>

          &nbsp;

          Version 0.0.0 (1999-10-31)
        </h1>

        This is Kazuhiro HIWADA&#8217;s initial testing release of Ruby-VPI. See its <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/18193">original announcement</a> and <a href="http://rubyforge.org/frs/?group_id=1339&#38;release_id=8852">source code</a>.


	<h2>Details</h2>


	<ul>
	<li>Added ability to relay control from Verilog test bench to Ruby (using <code class="code"><span style="color:#d70; font-weight:bold">$ruby_callback</span></code>) and vice versa (using <code class="code"><span style="color:#036; font-weight:bold">PLI</span>::relay_Verilog</code>).</li>
	</ul>


	<ul>
	<li>Tested and developed using Ruby 1.4 and Verilog-XL from Cadence systems, on a SPARC machine running Solaris 2.6.</li>
	</ul>

      </div>
    </div>

      <hr style="display: none"/>
    <div id="toc">
      <h1 id="toc:contents">Contents</h1>
      <ul><li><span class="hide">1 </span><a id="a-607179468" href="#Release_history">Release history</a><ul><li><span class="hide">1.1 </span><a id="a-607176568" href="#Version_numbering_system">Version numbering system</a></li></ul></li><li><span class="hide">2 </span><a id="a-607182658" href="#a18.0.0">Version 18.0.0 (2007-07-31)</a></li><li><span class="hide">3 </span><a id="a-607186018" href="#a17.0.0">Version 17.0.0 (2007-07-22)</a></li><li><span class="hide">4 </span><a id="a-607188328" href="#a16.0.1">Version 16.0.1 (2007-05-27)</a></li><li><span class="hide">5 </span><a id="a-607191278" href="#a16.0.0">Version 16.0.0 (2007-05-02)</a></li><li><span class="hide">6 </span><a id="a-607193568" href="#a15.0.2">Version 15.0.2 (2007-01-22)</a></li><li><span class="hide">7 </span><a id="a-607195998" href="#a15.0.1">Version 15.0.1 (2007-01-15)</a></li><li><span class="hide">8 </span><a id="a-607198768" href="#a15.0.0">Version 15.0.0 (2007-01-13)</a></li><li><span class="hide">9 </span><a id="a-607201618" href="#a14.0.0">Version 14.0.0 (2006-12-30)</a></li><li><span class="hide">10 </span><a id="a-607204228" href="#a13.0.0">Version 13.0.0 (2006-12-27)</a></li><li><span class="hide">11 </span><a id="a-607206878" href="#a12.1.0">Version 12.1.0 (2006-12-22)</a></li><li><span class="hide">12 </span><a id="a-607209028" href="#a12.0.2">Version 12.0.2 (2006-12-18)</a></li><li><span class="hide">13 </span><a id="a-607211418" href="#a12.0.1">Version 12.0.1 (2006-12-18)</a></li><li><span class="hide">14 </span><a id="a-607214448" href="#a12.0.0">Version 12.0.0 (2006-12-07)</a></li><li><span class="hide">15 </span><a id="a-607216938" href="#a11.1.1">Version 11.1.1 (2006-11-15)</a></li><li><span class="hide">16 </span><a id="a-607219728" href="#a11.1.0">Version 11.1.0 (2006-11-08)</a></li><li><span class="hide">17 </span><a id="a-607222378" href="#a11.0.0">Version 11.0.0 (2006-11-05)</a></li><li><span class="hide">18 </span><a id="a-607225288" href="#a10.0.0">Version 10.0.0 (2006-11-05)</a></li><li><span class="hide">19 </span><a id="a-607228078" href="#a9.0.0">Version 9.0.0 (2006-10-28)</a></li><li><span class="hide">20 </span><a id="a-607230568" href="#a8.2.0">Version 8.2.0 (2006-10-24)</a></li><li><span class="hide">21 </span><a id="a-607232918" href="#a8.1.0">Version 8.1.0 (2006-10-21)</a></li><li><span class="hide">22 </span><a id="a-607235508" href="#a8.0.0">Version 8.0.0 (2006-10-13)</a></li><li><span class="hide">23 </span><a id="a-607237998" href="#a7.3.0">Version 7.3.0 (2006-09-30)</a></li><li><span class="hide">24 </span><a id="a-607240408" href="#a7.2.0">Version 7.2.0 (2006-09-15)</a></li><li><span class="hide">25 </span><a id="a-607242818" href="#a7.1.0">Version 7.1.0 (2006-08-29)</a></li><li><span class="hide">26 </span><a id="a-607245508" href="#a7.0.0">Version 7.0.0 (2006-08-29)</a></li><li><span class="hide">27 </span><a id="a-607248278" href="#a6.3.0">Version 6.3.0 (2006-08-27)</a></li><li><span class="hide">28 </span><a id="a-607250788" href="#a6.2.0">Version 6.2.0 (2006-08-26)</a></li><li><span class="hide">29 </span><a id="a-607253118" href="#a6.1.0">Version 6.1.0 (2006-08-09)</a></li><li><span class="hide">30 </span><a id="a-607255668" href="#a6.0.0">Version 6.0.0 (2006-08-07)</a></li><li><span class="hide">31 </span><a id="a-607258058" href="#a5.1.1">Version 5.1.1 (2006-08-04)</a></li><li><span class="hide">32 </span><a id="a-607260808" href="#a5.1.0">Version 5.1.0 (2006-07-29)</a></li><li><span class="hide">33 </span><a id="a-607263458" href="#a5.0.0">Version 5.0.0 (2006-07-22)</a></li><li><span class="hide">34 </span><a id="a-607266088" href="#a4.0.0">Version 4.0.0 (2006-05-25)</a></li><li><span class="hide">35 </span><a id="a-607268598" href="#a3.2.0">Version 3.2.0 (2006-05-13)</a></li><li><span class="hide">36 </span><a id="a-607271188" href="#a3.1.0">Version 3.1.0 (2006-04-28)</a></li><li><span class="hide">37 </span><a id="a-607273938" href="#a3.0.0">Version 3.0.0 (2006-04-23)</a></li><li><span class="hide">38 </span><a id="a-607276588" href="#a2.0.0">Version 2.0.0 (2006-04-17)</a></li><li><span class="hide">39 </span><a id="a-607279478" href="#a1.0.0">Version 1.0.0 (2006-02-26)</a></li><li><span class="hide">40 </span><a id="a-607281768" href="#a0.0.0">Version 0.0.0 (1999-10-31)</a></li></ul>

          </div>
    </body>
</html>