[ANN] Ruby-VPI 17.0.0

Ruby-VPI is a Ruby interface to IEEE 1364-2005 Verilog VPI
and a platform for unit testing, rapid prototyping, and
systems integration of Verilog modules through Ruby. It
lets you create complex Verilog test benches easily and
wholly in Ruby.

• See http://ruby-vpi.rubyforge.org for details.


Version 17.0.0 (2007-07-22)

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


• The generate_test.rb and convert.rb executables have
been replaced by a single ruby-vpi executable to avoid
name conflicts with other software. They are now
accessed using the

ruby-vpi generate


ruby-vpi convert

commands respectively.

• The --name parameter has been removed from the
automated test generator. Similarly, you can no longer
insert an arbitrary name in a test’s file names (see
the user manual for details).

• The DEBUG environment variable, which controls wether
the test runner starts the interactive debugger, has
been renamed to DEBUGGER.

have been eliminated from test runners. The former is
detected automatically. As for the latter, you can
specify paths to directories in the SIMULATOR_SOURCES
parameter instead.

• The bench.rb and bench.v 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 design.rb and your Verilog
module’s source file respectively.

• The design.rb and proto.rb files are now loaded into a
separate namespace (Ruby module). For example, if the
Verilog module under test has the name “counter” and
the design.rb file defines a class named “Foo”, then
that class will be accessible as “Counter::Foo”.

• The global Vpi::simulate method has been replaced by
the cycle! method in the design.rb file.

• The simulate! method in the proto.rb file has been
renamed to feign! for accuracy.

• The RubyVpi module has been renamed to RubyVPI.

• RSpec >= 1.0.0 is now required by Ruby-VPI.

• The project license has been further simplified.


• Restored support for Enumerable methods in Vpi::Handle.

• The specification now begins to execute at simulation
time 0. Previously it began at simulation time 1.


• The bench.rb and bench.v files of a generated test have
been eliminated!

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

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.

• The “a” accessor, which returns an array of child
handles, has been added to the method naming format for
accessing child handles.

• 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
counter and has a parameter object named WIDTH, then
you can access the integer value of that parameter
using Counter::WIDTH.

• The automated test generator now tries to automatically
detect the clock and reset signal from Verilog module

• Exceptions are now raised when you try to write to a
read-only VPI property, such as VpiName.

• Added high?, high!, low?, and low! methods to the
Vpi::Handle class.

• Revised the user manual by removing unnecessary
sections and adding newer material from my master’s


• Added Jacinto Shy II’s register file example to
Ruby-VPI. It can be found in samp/register_file/.