ruby-vpi 16.0.1 → 17.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +19 -19
- data/README +1 -1
- data/Rakefile +35 -32
- data/bin/convert.rb +28 -0
- data/bin/generate/design.rb +16 -0
- data/bin/generate/proto.rb +13 -0
- data/bin/generate/runner.rake +33 -0
- data/bin/generate/spec.rb +45 -0
- data/bin/generate.rb +177 -0
- data/bin/ruby-vpi +56 -0
- data/doc/Rakefile +20 -4
- data/doc/common.css +92 -33
- data/doc/common.inc +13 -0
- data/doc/common.tpl +42 -28
- data/doc/history.doc +11 -11
- data/doc/history.html +769 -248
- data/doc/history.inc +909 -0
- data/doc/history.rb +9 -0
- data/doc/history.yaml +69 -0
- data/doc/intro.inc +170 -178
- data/doc/lib/doc_format.rb +57 -144
- data/doc/lib/doc_proxy.rb +504 -88
- data/doc/lib/erb_content.rb +8 -8
- data/doc/lib/erb_proxy.rb +17 -17
- data/doc/manual.doc +626 -777
- data/doc/manual.html +1541 -1031
- data/doc/memo.doc +38 -36
- data/doc/memo.html +64 -28
- data/doc/readme.doc +4 -31
- data/doc/readme.html +221 -163
- data/doc/rss.erb +1 -1
- data/doc/rss.xml +73 -1761
- data/ext/Rakefile +6 -5
- data/ext/main.c +17 -15
- data/ext/relay.c +4 -7
- data/ext/relay.h +2 -2
- data/ext/swig_vpi.h +2 -2
- data/ext/swig_vpi.i +1 -2
- data/ext/swig_wrap.cin +12 -16
- data/ext/vlog.c +5 -5
- data/ext/vlog.h +2 -2
- data/lib/ruby-vpi/erb.rb +3 -3
- data/lib/ruby-vpi/float.rb +2 -2
- data/lib/ruby-vpi/rcov.rb +5 -7
- data/lib/ruby-vpi/runner.rb +43 -41
- data/lib/ruby-vpi/runner_boot_loader.rb +117 -0
- data/lib/ruby-vpi/runner_proxy.rb +6 -8
- data/lib/ruby-vpi/util.rb +10 -0
- data/lib/ruby-vpi/verilog_parser.rb +28 -56
- data/lib/ruby-vpi/vpi.rb +168 -123
- data/lib/ruby-vpi.rb +22 -143
- data/ref/c/annotated.html +1 -1
- data/ref/c/common_8h.html +1 -1
- data/ref/c/files.html +1 -1
- data/ref/c/functions.html +1 -1
- data/ref/c/functions_vars.html +1 -1
- data/ref/c/globals.html +1 -1
- data/ref/c/globals_0x63.html +1 -1
- data/ref/c/globals_0x65.html +1 -1
- data/ref/c/globals_0x66.html +1 -1
- data/ref/c/globals_0x6d.html +1 -1
- data/ref/c/globals_0x70.html +1 -1
- data/ref/c/globals_0x72.html +1 -1
- data/ref/c/globals_0x73.html +1 -1
- data/ref/c/globals_0x74.html +1 -1
- data/ref/c/globals_0x76.html +1 -1
- data/ref/c/globals_0x78.html +1 -1
- data/ref/c/globals_defs.html +1 -1
- data/ref/c/globals_defs_0x65.html +1 -1
- data/ref/c/globals_defs_0x70.html +1 -1
- data/ref/c/globals_defs_0x76.html +1 -1
- data/ref/c/globals_defs_0x78.html +1 -1
- data/ref/c/globals_enum.html +1 -1
- data/ref/c/globals_eval.html +1 -1
- data/ref/c/globals_func.html +1 -1
- data/ref/c/globals_type.html +1 -1
- data/ref/c/globals_vars.html +1 -1
- data/ref/c/index.html +1 -1
- data/ref/c/main_8c.html +1 -1
- data/ref/c/main_8h.html +1 -1
- data/ref/c/relay_8c.html +1 -1
- data/ref/c/relay_8h.html +1 -1
- data/ref/c/structt__cb__data.html +1 -1
- data/ref/c/structt__vpi__delay.html +1 -1
- data/ref/c/structt__vpi__error__info.html +1 -1
- data/ref/c/structt__vpi__strengthval.html +1 -1
- data/ref/c/structt__vpi__systf__data.html +1 -1
- data/ref/c/structt__vpi__time.html +1 -1
- data/ref/c/structt__vpi__value.html +1 -1
- data/ref/c/structt__vpi__vecval.html +1 -1
- data/ref/c/structt__vpi__vlog__info.html +1 -1
- data/ref/c/verilog_8h.html +1 -1
- data/ref/c/vlog_8c.html +1 -1
- data/ref/c/vlog_8h.html +1 -1
- data/ref/c/vpi__user_8h.html +1 -1
- data/ref/ruby/classes/ERB.html +5 -5
- data/ref/ruby/classes/ERB.src/{M000024.html → M000026.html} +0 -0
- data/ref/ruby/classes/FileUtils.html +11 -11
- data/ref/ruby/classes/FileUtils.src/{M000025.html → M000027.html} +0 -0
- data/ref/ruby/classes/FileUtils.src/{M000026.html → M000028.html} +0 -0
- data/ref/ruby/classes/Float.html +6 -6
- data/ref/ruby/classes/Float.src/{M000020.html → M000021.html} +0 -0
- data/ref/ruby/classes/Integer.html +65 -65
- data/ref/ruby/classes/Integer.src/M000009.html +12 -5
- data/ref/ruby/classes/Integer.src/M000010.html +5 -5
- data/ref/ruby/classes/Integer.src/M000011.html +5 -5
- data/ref/ruby/classes/Integer.src/M000012.html +5 -5
- data/ref/ruby/classes/Integer.src/M000013.html +5 -5
- data/ref/ruby/classes/Integer.src/M000014.html +18 -0
- data/ref/ruby/classes/Integer.src/M000017.html +12 -18
- data/ref/ruby/classes/Integer.src/M000018.html +18 -12
- data/ref/ruby/classes/Integer.src/M000019.html +12 -17
- data/ref/ruby/classes/Integer.src/M000020.html +30 -0
- data/ref/ruby/classes/RDoc.html +5 -5
- data/ref/ruby/classes/RDoc.src/{M000053.html → M000058.html} +0 -0
- data/ref/ruby/classes/{RubyVpi/Config.html → RubyVPI.html} +20 -6
- data/ref/ruby/classes/String.html +34 -15
- data/ref/ruby/classes/String.src/M000022.html +5 -28
- data/ref/ruby/classes/String.src/M000023.html +5 -5
- data/ref/ruby/classes/String.src/{M000021.html → M000024.html} +0 -0
- data/ref/ruby/classes/String.src/M000025.html +41 -0
- data/ref/ruby/classes/VerilogParser/Module/Port.html +16 -36
- data/ref/ruby/classes/VerilogParser/Module/Port.src/M000006.html +10 -5
- data/ref/ruby/classes/VerilogParser/Module/Port.src/{M000004.html → M000007.html} +4 -4
- data/ref/ruby/classes/VerilogParser/Module/Port.src/{M000005.html → M000008.html} +4 -4
- data/ref/ruby/classes/VerilogParser/Module.html +28 -9
- data/ref/ruby/classes/VerilogParser/Module.src/M000005.html +29 -0
- data/ref/ruby/classes/VerilogParser.html +5 -39
- data/ref/ruby/classes/VerilogParser.src/M000004.html +26 -0
- data/ref/ruby/classes/Vpi/Handle.html +179 -77
- data/ref/ruby/classes/Vpi/Handle.src/M000035.html +18 -0
- data/ref/ruby/classes/Vpi/Handle.src/M000036.html +5 -5
- data/ref/ruby/classes/Vpi/Handle.src/M000037.html +5 -5
- data/ref/ruby/classes/Vpi/Handle.src/M000038.html +5 -5
- data/ref/ruby/classes/Vpi/Handle.src/M000039.html +5 -5
- data/ref/ruby/classes/Vpi/Handle.src/M000040.html +5 -8
- data/ref/ruby/classes/Vpi/Handle.src/M000041.html +5 -8
- data/ref/ruby/classes/Vpi/Handle.src/M000042.html +5 -9
- data/ref/ruby/classes/Vpi/Handle.src/M000043.html +8 -31
- data/ref/ruby/classes/Vpi/Handle.src/M000044.html +8 -74
- data/ref/ruby/classes/Vpi/Handle.src/M000045.html +9 -17
- data/ref/ruby/classes/Vpi/Handle.src/M000046.html +31 -11
- data/ref/ruby/classes/Vpi/Handle.src/M000047.html +86 -0
- data/ref/ruby/classes/Vpi/Handle.src/M000048.html +17 -18
- data/ref/ruby/classes/Vpi/Handle.src/M000050.html +18 -0
- data/ref/ruby/classes/Vpi/Handle.src/M000051.html +24 -0
- data/ref/ruby/classes/Vpi/Handle.src/M000053.html +31 -0
- data/ref/ruby/classes/Vpi/Handle.src/M000054.html +89 -0
- data/ref/ruby/classes/Vpi/S_vpi_time.html +16 -16
- data/ref/ruby/classes/Vpi/S_vpi_time.src/{M000050.html → M000055.html} +4 -4
- data/ref/ruby/classes/Vpi/S_vpi_time.src/{M000051.html → M000056.html} +5 -5
- data/ref/ruby/classes/Vpi/S_vpi_value.html +15 -15
- data/ref/ruby/classes/Vpi/S_vpi_value.src/{M000035.html → M000032.html} +5 -5
- data/ref/ruby/classes/Vpi/S_vpi_value.src/M000033.html +5 -5
- data/ref/ruby/classes/Vpi/S_vpi_value.src/M000034.html +5 -5
- data/ref/ruby/classes/Vpi.html +6 -42
- data/ref/ruby/classes/Vpi.src/M000029.html +15 -5
- data/ref/ruby/classes/Vpi.src/M000030.html +24 -24
- data/ref/ruby/classes/Vpi.src/M000031.html +6 -8
- data/ref/ruby/created.rid +1 -1
- data/ref/ruby/files/bin/{header_to_ruby_rb.html → convert_rb.html} +5 -5
- data/ref/ruby/files/bin/{generate_test_rb.html → generate_rb.html} +8 -21
- data/ref/ruby/files/lib/ruby-vpi/erb_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/float_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/integer_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/rake_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/rcov_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/rdoc_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/runner_boot_loader_rb.html +197 -0
- data/ref/ruby/files/lib/ruby-vpi/runner_boot_loader_rb.src/M000001.html +17 -0
- data/ref/ruby/files/lib/ruby-vpi/runner_boot_loader_rb.src/M000002.html +18 -0
- data/ref/ruby/files/lib/ruby-vpi/runner_proxy_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/runner_rb.html +6 -19
- data/ref/ruby/files/lib/ruby-vpi/util_rb.html +101 -0
- data/ref/ruby/files/lib/ruby-vpi/verilog_parser_rb.html +8 -1
- data/ref/ruby/files/lib/ruby-vpi/vpi_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi_rb.html +2 -14
- data/ref/ruby/fr_class_index.html +1 -3
- data/ref/ruby/fr_file_index.html +4 -2
- data/ref/ruby/fr_method_index.html +56 -51
- data/ref/ruby/index.html +1 -1
- data/samp/counter/RSpec/Rakefile +1 -0
- data/samp/counter/RSpec/counter_design.rb +15 -0
- data/samp/counter/RSpec/counter_proto.rb +10 -0
- data/samp/counter/RSpec/counter_runner.rake +44 -0
- data/samp/counter/RSpec/counter_spec.rb +39 -0
- data/samp/counter/Rakefile +1 -1
- data/samp/counter/counter.v +7 -7
- data/samp/counter/xUnit/Rakefile +1 -0
- data/samp/counter/xUnit/counter_bench.rb +95 -0
- data/samp/counter/{counter_xunit_bench.v → xUnit/counter_bench.v} +0 -0
- data/samp/counter/xUnit/counter_design.rb +15 -0
- data/samp/counter/xUnit/counter_proto.rb +10 -0
- data/samp/counter/xUnit/counter_runner.rake +44 -0
- data/samp/counter/{counter_xunit_spec.rb → xUnit/counter_spec.rb} +9 -9
- data/samp/pipelined_alu/Rakefile +1 -1
- data/samp/pipelined_alu/TestHw5UnitModel.rb +4 -5
- data/samp/pipelined_alu/hw5_unit.v +55 -85
- data/samp/pipelined_alu/hw5_unit_design.rb +51 -0
- data/samp/pipelined_alu/hw5_unit_proto.rb +4 -0
- data/samp/pipelined_alu/hw5_unit_runner.rake +43 -0
- data/samp/pipelined_alu/hw5_unit_spec.rb +64 -0
- data/samp/register_file/LICENSE +20 -0
- data/samp/register_file/README +4 -0
- data/samp/register_file/Rakefile +1 -0
- data/samp/register_file/register_file.v +18 -0
- data/samp/register_file/register_file_design.rb +11 -0
- data/samp/register_file/register_file_proto.rb +11 -0
- data/samp/register_file/register_file_runner.rake +43 -0
- data/samp/register_file/register_file_spec.rb +58 -0
- metadata +78 -66
- data/bin/generate_test.rb +0 -200
- data/bin/generate_test_tpl/bench.rb +0 -89
- data/bin/generate_test_tpl/bench.v +0 -26
- data/bin/generate_test_tpl/design.rb +0 -11
- data/bin/generate_test_tpl/proto.rb +0 -16
- data/bin/generate_test_tpl/runner.rake +0 -42
- data/bin/generate_test_tpl/spec.rb +0 -37
- data/bin/header_to_ruby.rb +0 -27
- data/ref/ruby/classes/Integer.src/M000008.html +0 -25
- data/ref/ruby/classes/Integer.src/M000016.html +0 -25
- data/ref/ruby/classes/RubyVpi.html +0 -199
- data/ref/ruby/classes/RubyVpi.src/M000027.html +0 -121
- data/ref/ruby/classes/VerilogParser/Module/Parameter.html +0 -160
- data/ref/ruby/classes/VerilogParser/Module/Parameter.src/M000007.html +0 -19
- data/ref/ruby/classes/VerilogParser/Module/Port.src/M000003.html +0 -21
- data/ref/ruby/classes/VerilogParser/Module.src/M000002.html +0 -34
- data/ref/ruby/classes/VerilogParser.src/M000001.html +0 -34
- data/ref/ruby/classes/Vpi/Handle.src/M000049.html +0 -69
- data/ref/ruby/classes/Vpi.src/M000028.html +0 -28
- data/ref/ruby/classes/Vpi.src/M000032.html +0 -22
- data/samp/counter/counter_rspec_bench.rb +0 -86
- data/samp/counter/counter_rspec_bench.v +0 -9
- data/samp/counter/counter_rspec_design.rb +0 -8
- data/samp/counter/counter_rspec_proto.rb +0 -13
- data/samp/counter/counter_rspec_runner.rake +0 -52
- data/samp/counter/counter_rspec_spec.rb +0 -39
- data/samp/counter/counter_xunit_bench.rb +0 -86
- data/samp/counter/counter_xunit_design.rb +0 -8
- data/samp/counter/counter_xunit_proto.rb +0 -13
- data/samp/counter/counter_xunit_runner.rake +0 -52
- data/samp/pipelined_alu/hw5_unit_test_bench.rb +0 -86
- data/samp/pipelined_alu/hw5_unit_test_bench.v +0 -14
- data/samp/pipelined_alu/hw5_unit_test_design.rb +0 -61
- data/samp/pipelined_alu/hw5_unit_test_proto.rb +0 -7
- data/samp/pipelined_alu/hw5_unit_test_runner.rake +0 -52
- data/samp/pipelined_alu/hw5_unit_test_spec.rb +0 -68
data/doc/history.rb
CHANGED
|
@@ -11,3 +11,12 @@ require 'yaml'
|
|
|
11
11
|
end
|
|
12
12
|
end
|
|
13
13
|
end
|
|
14
|
+
|
|
15
|
+
path = File.join(File.dirname(__FILE__), 'history.inc')
|
|
16
|
+
unless File.exist? path
|
|
17
|
+
File.open(path, 'w') do |f|
|
|
18
|
+
@history.each do |entry|
|
|
19
|
+
f << %{<% section "Version #{entry['Version']} (#{entry['Date']})", "#{entry['Version']}" do %>#{entry['Record']}<% end %>}
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
data/doc/history.yaml
CHANGED
|
@@ -1,3 +1,72 @@
|
|
|
1
|
+
-
|
|
2
|
+
Version: 17.0.0
|
|
3
|
+
|
|
4
|
+
Date: 2007-07-22
|
|
5
|
+
|
|
6
|
+
Record: |
|
|
7
|
+
This release makes the Ruby-VPI testing framework more lightweight by reducing the number of files and parameters involved.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
h2. Caution
|
|
11
|
+
|
|
12
|
+
* 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 <pre>ruby-vpi generate</pre> and <pre>ruby-vpi convert</pre> commands respectively.
|
|
13
|
+
|
|
14
|
+
* 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's file names (see the "user manual":manual.html#Do_not_rename_generated_files for details).
|
|
15
|
+
|
|
16
|
+
* The @DEBUG@ environment variable, which controls wether the test runner starts the interactive debugger, has been renamed to @DEBUGGER@.
|
|
17
|
+
|
|
18
|
+
* The @SIMULATOR_TARGET@ and @SIMULATOR_INCLUDES@ parameters 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.
|
|
19
|
+
|
|
20
|
+
* 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's source file respectively.
|
|
21
|
+
|
|
22
|
+
* 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 "counter" and the <tt>design.rb</tt> file defines a class named "Foo", then that class will be accessible as "Counter::Foo".
|
|
23
|
+
|
|
24
|
+
* The global @Vpi::simulate@ method has been replaced by the @cycle!@ method in the <tt>design.rb</tt> file.
|
|
25
|
+
|
|
26
|
+
* The @simulate!@ method in the <tt>proto.rb</tt> file has been renamed to @feign!@ for accuracy.
|
|
27
|
+
|
|
28
|
+
* The @RubyVpi@ module has been renamed to @RubyVPI@.
|
|
29
|
+
|
|
30
|
+
* RSpec >= 1.0.0 is now required by Ruby-VPI.
|
|
31
|
+
|
|
32
|
+
* The "project license":readme.html#intro.license has been further simplified.
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
h2. Repairs
|
|
36
|
+
|
|
37
|
+
* Restored support for Enumerable methods in @Vpi::Handle@.
|
|
38
|
+
|
|
39
|
+
* The specification now begins to execute at simulation time 0. Previously it began at simulation time 1.
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
h2. Improvements
|
|
43
|
+
|
|
44
|
+
* The <tt>bench.rb</tt> and <tt>bench.v</tt> files of a generated test have been eliminated!
|
|
45
|
+
|
|
46
|
+
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 <tt>bench.v</tt>, which in turn wrapped around the actual Verilog module under test).
|
|
47
|
+
|
|
48
|
+
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.
|
|
49
|
+
|
|
50
|
+
* The "a" accessor, which returns an _array_ of child handles, has been added to "the method naming format":manual.html#tbl:accessors for accessing child handles.
|
|
51
|
+
|
|
52
|
+
* 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@.
|
|
53
|
+
|
|
54
|
+
* The automated test generator now tries to automatically detect the clock and reset signal from Verilog module declarations.
|
|
55
|
+
|
|
56
|
+
* The automated test generator now supports Verilog 95 style module declarations.
|
|
57
|
+
|
|
58
|
+
* Exceptions are now raised when you try to write to a read-only VPI property, such as @VpiName@.
|
|
59
|
+
|
|
60
|
+
* Added @high?@, @high!@, @low?@, and @low!@ methods to the @Vpi::Handle@ class.
|
|
61
|
+
|
|
62
|
+
* Revised the user manual by removing unnecessary sections and adding newer material from my master's thesis.
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
h2. Contributions
|
|
66
|
+
|
|
67
|
+
* Added Jacinto Shy II's "register file example":http://jacintoshy.blogspot.com/2007/05/hacking-verilog-with-ruby-part-2.html to Ruby-VPI. It can be found in <tt>samp/register_file/</tt>.
|
|
68
|
+
|
|
69
|
+
|
|
1
70
|
-
|
|
2
71
|
Version: 16.0.1
|
|
3
72
|
|
data/doc/intro.inc
CHANGED
|
@@ -8,191 +8,183 @@ Ruby-VPI is a platform for unit testing, rapid prototyping, and systems integrat
|
|
|
8
8
|
Ruby-VPI is "open source software":http://en.wikipedia.org/wiki/Open_source_software released under "this license":#intro.license.
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
<% section "Resources", "resources" do %>
|
|
12
|
+
<% paragraph "Records" do %>
|
|
13
|
+
<a type="application/rss+xml" href="<%= RSS_URL %>"><img src="images/feed-icon-28x28.png" alt="RSS feed for release notifications" style="float: right"/></a>
|
|
14
|
+
|
|
15
|
+
* "What's new":history.html
|
|
16
|
+
- a history of all release notes.
|
|
17
|
+
* "Plans":memo.html
|
|
18
|
+
- pending tasks for future releases.
|
|
19
|
+
* "Talks":http://ruby-vpi.rubyforge.org/talks/
|
|
20
|
+
- materials from presentations and seminars.
|
|
21
|
+
* "Papers":http://ruby-vpi.rubyforge.org/papers/
|
|
22
|
+
- research publications.
|
|
23
|
+
* "Motivation":http://ruby-vpi.rubyforge.org/papers/masters_thesis.html#tth_sEc5.2
|
|
24
|
+
- why does Ruby-VPI exist?
|
|
25
|
+
<% end %>
|
|
26
|
+
|
|
27
|
+
<% paragraph "Documentation" do %>
|
|
28
|
+
* "User manual":manual.html
|
|
29
|
+
- complete documentation for users. _Start here!_
|
|
30
|
+
** "Tutorial":manual.html#usage.tutorial
|
|
31
|
+
- learn how to use Ruby-VPI quickly.
|
|
32
|
+
* "Reference":../ref/
|
|
33
|
+
- API documentation for Ruby libraries and C extension.
|
|
34
|
+
<% end %>
|
|
35
|
+
|
|
36
|
+
<% paragraph "Facilities" do %>
|
|
37
|
+
* "Downloads":<%= downloadURL %>
|
|
38
|
+
- obtain release packages
|
|
39
|
+
* "Source code":<%= codeURL %>
|
|
40
|
+
- browse online or obtain with "Darcs":http://darcs.net.
|
|
41
|
+
* "Forums":<%= forumURL %>
|
|
42
|
+
- discuss things and ask questions.
|
|
43
|
+
* "Bugs":<%= trackerURL %>
|
|
44
|
+
- report defects in the software.
|
|
45
|
+
* "Patches":<%= trackerURL %>
|
|
46
|
+
- submit patches to source code.
|
|
47
|
+
* "Requests":<%= trackerURL %>
|
|
48
|
+
- request new features or get support.
|
|
49
|
+
* "Project portal":<%= portalURL %>
|
|
50
|
+
- hosted generously by "RubyForge":http://rubyforge.org.
|
|
51
|
+
<% end %>
|
|
52
|
+
<% end %>
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
<% section "Features", "intro.features" do %>
|
|
56
|
+
<% paragraph "Portable" do %>
|
|
57
|
+
* Supports the _entire_ "IEEE 1364-2005 Verilog VPI":http://ieeexplore.ieee.org/xpl/standardstoc.jsp?isnumber=33945 standard.
|
|
58
|
+
* Works with all <%= xref "intro.reqs", "major Verilog simulators" %> available today.
|
|
59
|
+
* Compiled _just once_ during "installation":manual.html#setup.installation and used forever!
|
|
60
|
+
<% end %>
|
|
61
|
+
|
|
62
|
+
<% paragraph "Agile" do %>
|
|
63
|
+
* Enables "agile practices":http://agilemanifesto.org/ such as
|
|
64
|
+
** "test-driven":http://www.testdriven.com development
|
|
65
|
+
** "behavior-driven":http://behaviour-driven.org development
|
|
66
|
+
** "rapid prototyping":manual.html#usage.tutorial.implement-proto for design exploration
|
|
67
|
+
|
|
68
|
+
* Eliminates unneccesary work:
|
|
69
|
+
** "Specifications":manual.html#usage.tutorial.specification are readable, portable, and _executable_.
|
|
70
|
+
** The "automated test generator":manual.html#usage.tools.generate-test helps you accomodate design changes with _minimal_ effort.
|
|
71
|
+
** There is absolutely _no compiling_!
|
|
72
|
+
<% end %>
|
|
73
|
+
|
|
74
|
+
<% paragraph "Powerful" do %>
|
|
75
|
+
* Inherits the "power and elegance":http://www.ruby-lang.org/en/about/ of Ruby:
|
|
76
|
+
** Unlimited length integers
|
|
77
|
+
** Regular expressions
|
|
78
|
+
** Multi-threading
|
|
79
|
+
** System calls and I/O
|
|
80
|
+
** "_ad infinitum_":http://rubyforge.org
|
|
81
|
+
|
|
82
|
+
* Uses "ruby-debug":http://rubyforge.org/projects/ruby-debug/ for "interactive debugging":manual.html#usage.debugger.
|
|
83
|
+
* Uses "rcov":http://eigenclass.org/hiki.rb?rcov for test "coverage analysis and report generation":manual.html#usage.test-runner.env-vars.
|
|
84
|
+
<% end %>
|
|
85
|
+
<% end %>
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
<% section "Requirements", "intro.reqs" do %>
|
|
89
|
+
The following software is necessary in order to use Ruby-VPI.
|
|
90
|
+
|
|
91
|
+
<% paragraph "Verilog simulator" do %>
|
|
92
|
+
Ruby-VPI is known to work with the following simulators. However, you should be able to use it with any Verilog simulator that supports VPI.
|
|
93
|
+
|
|
94
|
+
* "Synopsys VCS":http://www.synopsys.com/products/simulation/simulation.html
|
|
95
|
+
- any version that supports the <tt>-load</tt> option is acceptable.
|
|
96
|
+
* "Mentor Modelsim":http://www.model.com
|
|
97
|
+
- any version that supports the <tt>-pli</tt> option is acceptable.
|
|
98
|
+
* "Cadence NC-Sim / NC-Verilog":http://www.cadence.com/products/functional_ver/nc-verilog/
|
|
99
|
+
- any version that supports the <tt>+loadvpi</tt> option is acceptable.
|
|
100
|
+
* "GPL Cver":http://www.pragmatic-c.com/gpl-cver/
|
|
101
|
+
- version 2.11a or newer is acceptable.
|
|
102
|
+
* "Icarus Verilog":http://www.icarus.com/eda/Verilog/
|
|
103
|
+
- version 0.8 is _mostly_ acceptable -- you *will not* be able to "access child handles through method calls":manual.html#background.org.vpi.util. The reason for this limitation is explained "in the user manual":manual.html#problems.ivl.vpi_handle_by_name.absolute-paths.
|
|
104
|
+
<% end %>
|
|
105
|
+
|
|
106
|
+
<% paragraph "Compilers" do %>
|
|
107
|
+
* "make":http://en.wikipedia.org/wiki/Make
|
|
108
|
+
- any flavor should be acceptable.
|
|
109
|
+
* C compiler
|
|
110
|
+
- the "GNU Compiler Collection (GCC)":http://www.gnu.org/software/gcc/ is preferred, but any C compiler should be acceptable.
|
|
111
|
+
* "Ruby":http://www.ruby-lang.org
|
|
112
|
+
- version 1.8 or newer, including header and linkable object files for building extensions, is necessary. You can install Ruby by following "these instructions":http://www.rubygarden.org/faq/section/show/3.
|
|
113
|
+
<% end %>
|
|
114
|
+
|
|
115
|
+
<% paragraph "Libraries" do %>
|
|
116
|
+
* "POSIX threads (pthreads)":http://en.wikipedia.org/wiki/Pthreads
|
|
117
|
+
- header and linkable object files, and operating system support for this library are necessary.
|
|
118
|
+
* "RubyGems":http://rubyforge.org/frs/?group_id=126
|
|
119
|
+
- any recent version should be acceptable. You can install RubyGems by following "these instructions":http://www.rubygems.org/read/chapter/3.
|
|
120
|
+
<% end %>
|
|
121
|
+
<% end %>
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
<% section "Applications", "intro.applications" do %>
|
|
125
|
+
Examples of tasks that can be performed with Ruby-VPI are:
|
|
126
|
+
|
|
127
|
+
* From the second edition of "_The Verilog PLI Handbook_":http://www.sutherland-hdl.com/publications.html:
|
|
128
|
+
** C language bus-functional models
|
|
129
|
+
** Reading test vector files
|
|
130
|
+
** Delay calculation
|
|
131
|
+
** Custom output displays
|
|
132
|
+
** Co-simulation
|
|
133
|
+
** Design debug utilities
|
|
134
|
+
** Simulation analysis
|
|
135
|
+
|
|
136
|
+
* Adapted from "Pin Hong's":http://embedded.eecs.berkeley.edu/Alumni/pinhong/scriptEDA/ observations:
|
|
137
|
+
** Writing hardware models in Ruby
|
|
138
|
+
** Dumping or processing netlist data from Verilog database
|
|
139
|
+
** Dumping or processing simulation data
|
|
140
|
+
** Feeding dynamic simulation stimuli
|
|
141
|
+
** Back-annotating delay information
|
|
142
|
+
** Interactive logic simulation
|
|
143
|
+
** Building a distributed simulation
|
|
144
|
+
<% end %>
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
<% section "Appetizers", "intro.appetizers" do %>
|
|
148
|
+
Here is a tiny sampling of code to whet your appetite. See "the tutorial":manual.html#usage.tutorial for more samples.
|
|
149
|
+
|
|
150
|
+
* Assign the value 2^2048^ to a register:
|
|
151
|
+
|
|
152
|
+
bq. @your_register.intVal = 2 ** 2048@
|
|
12
153
|
|
|
13
|
-
|
|
154
|
+
* Check if all nets in a module are at high impedance:
|
|
155
|
+
|
|
156
|
+
bq. @your_module.all_net? { |net| net.z? }@
|
|
157
|
+
|
|
158
|
+
* See a register's path, width, and location (file & line number):
|
|
159
|
+
|
|
160
|
+
bq. @puts your_register@
|
|
14
161
|
|
|
15
|
-
|
|
162
|
+
* Access the first five elements in a memory:
|
|
163
|
+
|
|
164
|
+
bq. @your_memory.memoryWord_a[0..4]@
|
|
16
165
|
|
|
17
|
-
|
|
166
|
+
* Clear a memory by filling it with zeroes:
|
|
18
167
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
* "Plans":memo.html
|
|
22
|
-
- pending tasks for future releases.
|
|
23
|
-
* "Talks":http://ruby-vpi.rubyforge.org/talks/
|
|
24
|
-
- materials from presentations and seminars.
|
|
25
|
-
* "Papers":http://ruby-vpi.rubyforge.org/papers/
|
|
26
|
-
- research publications.
|
|
168
|
+
bq. @your_memory.each_memoryWord {|w| w.intVal = 0}@
|
|
169
|
+
<% end %>
|
|
27
170
|
|
|
28
|
-
p(title). Documentation
|
|
29
171
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
- complete documentation for users. _Start here!_
|
|
34
|
-
* "Reference":../ref/
|
|
35
|
-
- API documentation for Ruby libraries and C extension.
|
|
172
|
+
<% section "License", "intro.license" do %>
|
|
173
|
+
<%=h File.read('../LICENSE') %>
|
|
174
|
+
<% end %>
|
|
36
175
|
|
|
37
|
-
p(title). Facilities
|
|
38
176
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
* "
|
|
42
|
-
|
|
43
|
-
* "
|
|
44
|
-
|
|
45
|
-
* "Bugs":http://rubyforge.org/tracker/?group_id=1339
|
|
46
|
-
- report defects in the software.
|
|
47
|
-
* "Patches":http://rubyforge.org/tracker/?group_id=1339
|
|
48
|
-
- submit patches to source code.
|
|
49
|
-
* "Requests":http://rubyforge.org/tracker/?group_id=1339
|
|
50
|
-
- request new features or get support.
|
|
51
|
-
* "Project portal":http://rubyforge.org/projects/ruby-vpi
|
|
52
|
-
- hosted generously by "RubyForge":http://rubyforge.org.
|
|
177
|
+
<% section "Related works", "intro.related-works" do %>
|
|
178
|
+
* "JOVE":http://jove.sourceforge.net is a Java interface to VPI.
|
|
179
|
+
* "Teal":http://teal.sourceforge.net is a C++ interface to VPI.
|
|
180
|
+
* "ScriptEDA":http://embedded.eecs.berkeley.edu/Alumni/pinhong/scriptEDA/ is a Perl, Python, and Tcl interface to VPI.
|
|
181
|
+
* "RHDL":http://rhdl.rubyforge.org is a hardware description and verification language based on Ruby.
|
|
182
|
+
* "MyHDL":http://myhdl.jandecaluwe.com is a hardware description and verification language based on Python, which features conversion to Verilog and co-simulation.
|
|
53
183
|
|
|
184
|
+
<% section "Ye olde PLI", "intro.related-works.pli" do %>
|
|
185
|
+
The following projects utilize the archaic *tf* and *acc* PLI interfaces, which have been officially deprecated in IEEE Std 1364-2005.
|
|
54
186
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
p(title). Portable
|
|
61
|
-
|
|
62
|
-
* Supports the _entire_ "IEEE 1364-2005 Verilog VPI":http://ieeexplore.ieee.org/xpl/standardstoc.jsp?isnumber=33945 standard.
|
|
63
|
-
* Works with all "major Verilog simulators":#intro.reqs available today.
|
|
64
|
-
* Compiled _just once_ during "installation":manual.html#setup.installation and used forever!
|
|
65
|
-
|
|
66
|
-
p(title). Agile
|
|
67
|
-
|
|
68
|
-
* Enables "agile practices":http://agilemanifesto.org/ such as
|
|
69
|
-
** "test-driven":http://www.testdriven.com development
|
|
70
|
-
** "behavior-driven":http://behaviour-driven.org development
|
|
71
|
-
** "rapid prototyping":manual.html#usage.tutorial.implement-proto for design exploration
|
|
72
|
-
|
|
73
|
-
* Eliminates unneccesary work:
|
|
74
|
-
** "Specifications":manual.html#usage.tutorial.specification are readable, portable, and _executable_.
|
|
75
|
-
** The "automated test generator":manual.html#usage.tools.generate-test helps you accomodate design changes with _minimal_ effort.
|
|
76
|
-
** There is absolutely _no compiling_!
|
|
77
|
-
|
|
78
|
-
p(title). Powerful
|
|
79
|
-
|
|
80
|
-
* Inherits the "power and elegance":http://www.ruby-lang.org/en/about/ of Ruby:
|
|
81
|
-
** Unlimited length integers
|
|
82
|
-
** Regular expressions
|
|
83
|
-
** Multi-threading
|
|
84
|
-
** System calls and I/O
|
|
85
|
-
** "_ad infinitum_":http://rubyforge.org
|
|
86
|
-
|
|
87
|
-
* Uses "ruby-debug":http://rubyforge.org/projects/ruby-debug/ for "interactive debugging":manual.html#usage.debugger.
|
|
88
|
-
* Uses "rcov":http://eigenclass.org/hiki.rb?rcov for test "coverage analysis and report generation":manual.html#usage.test-runner.env-vars.
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
h2(#intro.reqs). Requirements
|
|
92
|
-
|
|
93
|
-
The following software is necessary in order to use Ruby-VPI.
|
|
94
|
-
|
|
95
|
-
p(title). Verilog simulator
|
|
96
|
-
|
|
97
|
-
Ruby-VPI is known to work with the following simulators. However, you should be able to use it with any Verilog simulator that supports VPI.
|
|
98
|
-
|
|
99
|
-
* "Synopsys VCS":http://www.synopsys.com/products/simulation/simulation.html
|
|
100
|
-
- any version that supports the <tt>-load</tt> option is acceptable.
|
|
101
|
-
|
|
102
|
-
* "Mentor Modelsim":http://www.model.com
|
|
103
|
-
- any version that supports the <tt>-pli</tt> option is acceptable.
|
|
104
|
-
|
|
105
|
-
* "Cadence NC-Sim / NC-Verilog":http://www.cadence.com/products/functional_ver/nc-verilog/
|
|
106
|
-
- any version that supports the <tt>+loadvpi</tt> option is acceptable.
|
|
107
|
-
|
|
108
|
-
* "GPL Cver":http://www.pragmatic-c.com/gpl-cver/
|
|
109
|
-
- version 2.11a or newer is acceptable.
|
|
110
|
-
|
|
111
|
-
* "Icarus Verilog":http://www.icarus.com/eda/Verilog/
|
|
112
|
-
- version 0.8 is _mostly_ acceptable -- you *will not* be able to "access child handles through method calls":manual.html#background.org.vpi.util. The reason for this limitation is explained "in the user manual":#problems.ivl.vpi_handle_by_name.absolute-paths.
|
|
113
|
-
|
|
114
|
-
p(title). Compilers
|
|
115
|
-
|
|
116
|
-
* "make":http://en.wikipedia.org/wiki/Make
|
|
117
|
-
- any flavor should be acceptable.
|
|
118
|
-
|
|
119
|
-
* C compiler
|
|
120
|
-
- the "GNU Compiler Collection (GCC)":http://www.gnu.org/software/gcc/ is preferred, but any C compiler should be acceptable.
|
|
121
|
-
|
|
122
|
-
* "Ruby":http://www.ruby-lang.org
|
|
123
|
-
- version 1.8 or newer, including header and linkable object files for building extensions, is necessary. You can install Ruby by following "these instructions":http://www.rubygarden.org/faq/section/show/3.
|
|
124
|
-
|
|
125
|
-
p(title). Libraries
|
|
126
|
-
|
|
127
|
-
* "POSIX threads (pthreads)":http://en.wikipedia.org/wiki/Pthreads
|
|
128
|
-
- header and linkable object files, and operating system support for this library are necessary.
|
|
129
|
-
|
|
130
|
-
* "RubyGems":http://rubyforge.org/frs/?group_id=126
|
|
131
|
-
- any recent version should be acceptable. You can install RubyGems by following "these instructions":http://www.rubygems.org/read/chapter/3.
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
h2(#intro.applications). Applications
|
|
135
|
-
|
|
136
|
-
Examples of tasks that can be performed with Ruby-VPI are:
|
|
137
|
-
|
|
138
|
-
* From the second edition of "_The Verilog PLI Handbook_":http://www.sutherland-hdl.com/publications.html:
|
|
139
|
-
** C language bus-functional models
|
|
140
|
-
** Reading test vector files
|
|
141
|
-
** Delay calculation
|
|
142
|
-
** Custom output displays
|
|
143
|
-
** Co-simulation
|
|
144
|
-
** Design debug utilities
|
|
145
|
-
** Simulation analysis
|
|
146
|
-
|
|
147
|
-
* Adapted from "Pin Hong's":http://embedded.eecs.berkeley.edu/Alumni/pinhong/scriptEDA/ observations:
|
|
148
|
-
** Writing hardware models in Ruby
|
|
149
|
-
** Dumping or processing netlist data from Verilog database
|
|
150
|
-
** Dumping or processing simulation data
|
|
151
|
-
** Feeding dynamic simulation stimuli
|
|
152
|
-
** Back-annotating delay information
|
|
153
|
-
** Interactive logic simulation
|
|
154
|
-
** Building a distributed simulation
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
h2(#intro.appetizers). Appetizers
|
|
158
|
-
|
|
159
|
-
Here is a tiny sampling of code to whet your appetite. See "the tutorial":manual.html#usage.tutorial for more samples.
|
|
160
|
-
|
|
161
|
-
* Assign the value 2^2048^ to a register:
|
|
162
|
-
|
|
163
|
-
bq. @some_register.intVal = 2 ** 2048@
|
|
164
|
-
|
|
165
|
-
* Check if all nets in a module are at high impedance:
|
|
166
|
-
|
|
167
|
-
bq. @some_module.all_net? { |net| net.z? }@
|
|
168
|
-
|
|
169
|
-
* See a register's path, width, and location (file & line number):
|
|
170
|
-
|
|
171
|
-
bq. @puts some_register@
|
|
172
|
-
|
|
173
|
-
* Simulate fifteen clock cycles:
|
|
174
|
-
|
|
175
|
-
bq. @15.times { simulate }@
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
h2(#intro.license). License
|
|
179
|
-
|
|
180
|
-
<%= File.read '../LICENSE' %>
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
h2(#intro.related-works). Related works
|
|
184
|
-
|
|
185
|
-
* "JOVE":http://jove.sourceforge.net is a Java interface to VPI.
|
|
186
|
-
* "Teal":http://teal.sourceforge.net is a C++ interface to VPI.
|
|
187
|
-
* "ScriptEDA":http://embedded.eecs.berkeley.edu/Alumni/pinhong/scriptEDA/ is a Perl, Python, and Tcl interface to VPI.
|
|
188
|
-
* "RHDL":http://rhdl.rubyforge.org is a hardware description and verification language based on Ruby.
|
|
189
|
-
* "MyHDL":http://myhdl.jandecaluwe.com is a hardware description and verification language based on Python, which features conversion to Verilog and co-simulation.
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
h3(#intro.related-works.pli). Ye olde PLI
|
|
193
|
-
|
|
194
|
-
The following projects utilize the archaic *tf* and *acc* PLI interfaces, which have been officially deprecated in IEEE Std 1364-2005.
|
|
195
|
-
|
|
196
|
-
* "ScriptSim":http://www.nelsim.com is a Perl, Python, and Tcl/Tk interface to PLI.
|
|
197
|
-
* "Verilog::Pli":http://www.veripool.com/verilog-pli.html is a Perl interface to PLI.
|
|
198
|
-
* "JPLI":http://www.time-rover.com/jpli/ is a proprietary Java interface to PLI.
|
|
187
|
+
* "ScriptSim":http://www.nelsim.com is a Perl, Python, and Tcl/Tk interface to PLI.
|
|
188
|
+
* "Verilog::Pli":http://www.veripool.com/verilog-pli.html is a Perl interface to PLI.
|
|
189
|
+
<% end %>
|
|
190
|
+
<% end %>
|