ruby-vpi 8.2.0 → 9.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/HEADER +0 -19
- data/HISTORY +40 -0
- data/README +20 -2
- data/Rakefile +38 -42
- data/bin/generate_test.rb +50 -35
- data/bin/generate_test_tpl/bench.rb +3 -3
- data/bin/generate_test_tpl/bench.v +1 -1
- data/bin/generate_test_tpl/runner.rake +3 -2
- data/bin/generate_test_tpl/spec.rb +2 -2
- data/doc/background.organization.html +1 -1
- data/doc/glossary.html +1 -1
- data/doc/index.html +2 -2
- data/doc/manual.txt +163 -83
- data/doc/problems.html +1 -1
- data/doc/problems.ruby.html +1 -1
- data/doc/src/manual.xml +132 -49
- data/doc/usage.examples.html +1 -1
- data/doc/usage.html +1 -1
- data/doc/usage.installation.html +2 -2
- data/doc/usage.recommendations.html +3 -0
- data/doc/usage.requirements.html +1 -1
- data/doc/usage.tutorial.html +46 -42
- data/ext/extconf.rb +5 -2
- data/ext/relay.c +138 -0
- data/ext/{relay.hin → relay.h} +7 -7
- data/ext/{swig.cin → swig.c} +5 -7
- data/ext/{swig.hin → swig.h} +4 -4
- data/ext/verilog.h +1 -2
- data/ext/vlog.c +86 -0
- data/ext/{vlog.hin → vlog.h} +9 -12
- data/header.html +0 -31
- data/header.part.html +0 -31
- data/history.html +72 -31
- data/history.part.html +72 -0
- data/lib/ruby-vpi.rb +16 -0
- data/lib/ruby-vpi/runner.rb +34 -16
- data/memo.html +0 -31
- data/readme.html +33 -33
- data/readme.part.html +34 -3
- data/ref/c/annotated.html +1 -1
- data/ref/c/common_8h.html +1 -1
- data/ref/c/files.html +7 -8
- data/ref/c/functions.html +2 -2
- data/ref/c/functions_vars.html +2 -2
- 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_0x70.html +1 -1
- data/ref/c/globals_0x72.html +9 -9
- data/ref/c/globals_0x73.html +3 -3
- data/ref/c/globals_0x74.html +1 -1
- data/ref/c/globals_0x76.html +5 -5
- 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 +2 -2
- 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 +11 -11
- data/ref/c/globals_type.html +1 -1
- data/ref/c/globals_vars.html +5 -5
- data/ref/c/index.html +1 -1
- data/ref/c/relay_8c.html +214 -0
- data/ref/c/{relay_8hin.html → relay_8h.html} +23 -23
- data/ref/c/structrelay____RubyOptions____def.html +6 -6
- 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/swig_8c.html +80 -0
- data/ref/c/{swig_8hin.html → swig_8h.html} +13 -13
- data/ref/c/verilog_8h.html +3 -3
- data/ref/c/{vlog_8cin.html → vlog_8c.html} +30 -21
- data/ref/c/{vlog_8hin.html → vlog_8h.html} +12 -12
- data/ref/c/vpi__user_8h.html +1 -1
- data/ref/ruby/classes/ERB.html +5 -5
- data/ref/ruby/classes/ERB.src/{M000033.html → M000034.html} +0 -0
- data/ref/ruby/classes/FileUtils.html +10 -10
- data/ref/ruby/classes/FileUtils.src/M000089.html +5 -5
- data/ref/ruby/classes/FileUtils.src/M000090.html +18 -0
- data/ref/ruby/classes/Integer.html +68 -68
- data/ref/ruby/classes/Integer.src/M000012.html +12 -5
- data/ref/ruby/classes/Integer.src/M000013.html +5 -5
- data/ref/ruby/classes/Integer.src/M000014.html +5 -5
- data/ref/ruby/classes/Integer.src/M000015.html +5 -5
- data/ref/ruby/classes/Integer.src/M000016.html +5 -5
- data/ref/ruby/classes/Integer.src/M000017.html +18 -0
- data/ref/ruby/classes/Integer.src/M000020.html +9 -9
- data/ref/ruby/classes/Integer.src/M000021.html +9 -12
- data/ref/ruby/classes/Integer.src/M000022.html +12 -18
- data/ref/ruby/classes/Integer.src/M000023.html +18 -12
- data/ref/ruby/classes/Integer.src/M000024.html +12 -17
- data/ref/ruby/classes/Integer.src/M000025.html +30 -0
- data/ref/ruby/classes/OutputInfo.html +6 -6
- data/ref/ruby/classes/OutputInfo.src/{M000029.html → M000030.html} +37 -37
- data/ref/ruby/classes/RDoc.html +5 -5
- data/ref/ruby/classes/RDoc.src/{M000092.html → M000093.html} +0 -0
- data/ref/ruby/classes/RubyVpi.html +16 -10
- data/ref/ruby/classes/RubyVpi.src/M000091.html +37 -7
- data/ref/ruby/classes/RubyVpi.src/M000092.html +20 -0
- data/ref/ruby/classes/RubyVpi/Config.html +148 -0
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.html +45 -45
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000081.html +5 -5
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000082.html +5 -9
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000083.html +9 -31
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000084.html +31 -69
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000085.html +69 -114
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000086.html +114 -13
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000087.html +13 -5
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000088.html +18 -0
- data/ref/ruby/classes/String.html +10 -10
- data/ref/ruby/classes/String.src/M000032.html +28 -5
- data/ref/ruby/classes/String.src/M000033.html +18 -0
- data/ref/ruby/classes/Table.html +20 -20
- data/ref/ruby/classes/Table.src/M000026.html +25 -5
- data/ref/ruby/classes/Table.src/M000027.html +5 -5
- data/ref/ruby/classes/Table.src/M000028.html +5 -5
- data/ref/ruby/classes/Table.src/M000029.html +18 -0
- data/ref/ruby/classes/Template.html +5 -5
- data/ref/ruby/classes/Template.src/{M000030.html → M000031.html} +4 -4
- data/ref/ruby/classes/VerilogParser.html +5 -5
- data/ref/ruby/classes/VerilogParser.src/{M000004.html → M000005.html} +0 -0
- data/ref/ruby/classes/VerilogParser/Module.html +5 -5
- data/ref/ruby/classes/VerilogParser/Module.src/{M000005.html → M000006.html} +0 -0
- data/ref/ruby/classes/VerilogParser/Module/Parameter.html +5 -5
- data/ref/ruby/classes/VerilogParser/Module/Parameter.src/{M000010.html → M000011.html} +0 -0
- data/ref/ruby/classes/VerilogParser/Module/Port.html +20 -20
- data/ref/ruby/classes/VerilogParser/Module/Port.src/M000007.html +8 -5
- data/ref/ruby/classes/VerilogParser/Module/Port.src/M000008.html +5 -5
- data/ref/ruby/classes/VerilogParser/Module/Port.src/M000009.html +5 -5
- data/ref/ruby/classes/VerilogParser/Module/Port.src/M000010.html +18 -0
- data/ref/ruby/classes/XX/Document.html +45 -45
- data/ref/ruby/classes/XX/Document.src/M000072.html +9 -7
- data/ref/ruby/classes/XX/Document.src/M000073.html +7 -7
- data/ref/ruby/classes/XX/Document.src/M000074.html +7 -7
- data/ref/ruby/classes/XX/Document.src/M000075.html +7 -9
- data/ref/ruby/classes/XX/Document.src/M000076.html +9 -8
- data/ref/ruby/classes/XX/Document.src/M000077.html +8 -8
- data/ref/ruby/classes/XX/Document.src/M000078.html +8 -21
- data/ref/ruby/classes/XX/Document.src/M000079.html +21 -85
- data/ref/ruby/classes/XX/Document.src/M000080.html +98 -0
- data/ref/ruby/classes/XX/HTML4.html +5 -5
- data/ref/ruby/classes/XX/HTML4.src/{M000035.html → M000036.html} +0 -0
- data/ref/ruby/classes/XX/HTML4/Strict.html +5 -5
- data/ref/ruby/classes/XX/HTML4/Strict.src/{M000037.html → M000038.html} +0 -0
- data/ref/ruby/classes/XX/HTML4/Transitional.html +5 -5
- data/ref/ruby/classes/XX/HTML4/Transitional.src/{M000036.html → M000037.html} +0 -0
- data/ref/ruby/classes/XX/Markup.html +5 -5
- data/ref/ruby/classes/XX/Markup.src/{M000042.html → M000043.html} +0 -0
- data/ref/ruby/classes/XX/Markup/ClassMethods.html +40 -40
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000044.html +9 -7
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000045.html +7 -12
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000046.html +12 -7
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000047.html +7 -14
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000048.html +14 -7
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000049.html +7 -14
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000050.html +14 -9
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000051.html +22 -0
- data/ref/ruby/classes/XX/Markup/InstanceMethods.html +100 -100
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000052.html +43 -20
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000053.html +20 -18
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000054.html +18 -35
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000055.html +35 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000056.html +7 -18
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000057.html +18 -19
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000058.html +19 -19
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000059.html +19 -15
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000060.html +15 -10
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000061.html +10 -13
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000062.html +13 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000063.html +7 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000064.html +7 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000065.html +7 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000066.html +7 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000067.html +7 -8
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000068.html +8 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000069.html +7 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000070.html +7 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000071.html +20 -0
- data/ref/ruby/classes/XX/XHTML.html +5 -5
- data/ref/ruby/classes/XX/XHTML.src/{M000038.html → M000039.html} +0 -0
- data/ref/ruby/classes/XX/XHTML/Strict.html +5 -5
- data/ref/ruby/classes/XX/XHTML/Strict.src/{M000040.html → M000041.html} +0 -0
- data/ref/ruby/classes/XX/XHTML/Transitional.html +5 -5
- data/ref/ruby/classes/XX/XHTML/Transitional.src/{M000039.html → M000040.html} +0 -0
- data/ref/ruby/classes/XX/XML.html +5 -5
- data/ref/ruby/classes/XX/XML.src/{M000034.html → M000035.html} +0 -0
- data/ref/ruby/classes/XX/XMLish.html +5 -5
- data/ref/ruby/classes/XX/XMLish.src/{M000041.html → M000042.html} +0 -0
- data/ref/ruby/created.rid +1 -1
- data/ref/ruby/files/bin/generate_test_rb.html +49 -9
- data/ref/ruby/files/bin/generate_test_rb.src/M000001.html +5 -16
- data/ref/ruby/files/bin/generate_test_rb.src/M000002.html +39 -0
- data/ref/ruby/files/bin/header_to_ruby_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/erb_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/rspec_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/runner_proxy_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/runner_rb.html +22 -21
- data/ref/ruby/files/lib/ruby-vpi/runner_rb.src/M000003.html +11 -13
- data/ref/ruby/files/lib/ruby-vpi/runner_rb.src/M000004.html +26 -0
- data/ref/ruby/files/lib/ruby-vpi/verilog_parser_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/vpi_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/xx_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi_rb.html +1 -1
- data/ref/ruby/fr_class_index.html +1 -0
- data/ref/ruby/fr_method_index.html +93 -92
- data/samp/counter/{counter_rspecTest_bench.rb → counter_rspec_bench.rb} +2 -2
- data/samp/counter/{counter_rspecTest_bench.v → counter_rspec_bench.v} +3 -3
- data/samp/counter/{counter_unitTest_design.rb → counter_rspec_design.rb} +3 -3
- data/samp/counter/{counter_rspecTest_proto.rb → counter_rspec_proto.rb} +0 -0
- data/samp/counter/{counter_unitTest_runner.rake → counter_rspec_runner.rake} +5 -4
- data/samp/counter/{counter_rspecTest_spec.rb → counter_rspec_spec.rb} +0 -0
- data/samp/counter/{counter_unitTest_bench.rb → counter_xunit_bench.rb} +2 -2
- data/samp/counter/{counter_unitTest_bench.v → counter_xunit_bench.v} +3 -3
- data/samp/counter/{counter_rspecTest_design.rb → counter_xunit_design.rb} +3 -3
- data/samp/counter/{counter_unitTest_proto.rb → counter_xunit_proto.rb} +0 -0
- data/samp/counter/{counter_rspecTest_runner.rake → counter_xunit_runner.rake} +5 -4
- data/samp/counter/{counter_unitTest_spec.rb → counter_xunit_spec.rb} +0 -0
- data/samp/pipelined_alu/hw5_unit_test_runner.rake +3 -2
- metadata +177 -177
- data/ext/README +0 -124
- data/ext/relay.cin +0 -146
- data/ext/ruby-vpi.c +0 -36
- data/ext/vlog.cin +0 -92
- data/lib/ruby-vpi/synopsys_vcs.tab +0 -2
- data/ref/c/relay_8cin.html +0 -204
- data/ref/c/ruby-vpi_8c.html +0 -34
- data/ref/c/swig_8cin.html +0 -75
- data/ref/ruby/classes/FileUtils.src/M000088.html +0 -18
- data/ref/ruby/classes/Integer.src/M000011.html +0 -25
- data/ref/ruby/classes/Integer.src/M000019.html +0 -22
- data/ref/ruby/classes/RubyVpi.src/M000090.html +0 -50
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000080.html +0 -18
- data/ref/ruby/classes/String.src/M000031.html +0 -41
- data/ref/ruby/classes/Table.src/M000025.html +0 -38
- data/ref/ruby/classes/VerilogParser/Module/Port.src/M000006.html +0 -21
- data/ref/ruby/classes/XX/Document.src/M000071.html +0 -22
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000043.html +0 -22
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000051.html +0 -56
- data/ref/ruby/files/lib/ruby-vpi/runner_rb.src/M000002.html +0 -20
data/HEADER
CHANGED
@@ -2,25 +2,6 @@
|
|
2
2
|
<link rel="stylesheet" type="text/css" href="style.css" />
|
3
3
|
</head>
|
4
4
|
|
5
|
-
h1{text-align: center}. Welcome to Ruby-VPI
|
6
|
-
|
7
|
-
Ruby-VPI is a "Ruby interface":http://ruby-lang.org to "Verilog VPI":http://ieeexplore.ieee.org/xpl/standardstoc.jsp?isnumber=33945. It lets you create complex Verilog test benches easily and wholly in Ruby.
|
8
|
-
|
9
|
-
h2. Features
|
10
|
-
|
11
|
-
* Prototype and verify designs _quickly_ using "BDD(behavior-driven development)":http://behaviour-driven.org/, "TDD(test-driven development)":http://www.agiledata.org/essays/tdd.html, and more.
|
12
|
-
* Reuse the _same_ specification to verify both prototype and design.
|
13
|
-
* Specifications are executable _and_ human-readable. (See this <a href="./doc/usage.tutorial.html#fig..counter_rspecTest_spec.rb">example specification</a> and its <a href="./doc/usage.tutorial.html#fig..test-proto.rspec">boss-friendly output</a>.)
|
14
|
-
|
15
|
-
|
16
|
-
* Utilize Ruby's power and elegance. ("Why choose Ruby?":http://www.ruby-doc.org/whyruby)
|
17
|
-
** Built-in support for unlimited length integers, regular expressions, networking, multi-threading, system calls, _ad infinium_!
|
18
|
-
** Easy to use; doesn't get in your way.
|
19
|
-
** Makes programming _fun_ again!
|
20
|
-
|
21
|
-
* Study, modify, or distribute this is free software, released under the "GNU General Public License":http://www.gnu.org/copyleft/gpl.html, as you see fit.
|
22
|
-
|
23
|
-
|
24
5
|
<div class="variablelist">
|
25
6
|
<dl>
|
26
7
|
|
data/HISTORY
CHANGED
@@ -12,12 +12,52 @@ We _strictly_ follow the RubyGems project's "rational versioning policy":http://
|
|
12
12
|
fn1. C. Gross, "Explaining Open Source Version Numbers", [Online document], 2005 Nov 28, [cited 2006 Aug 27], Available HTTP: "http://ablog.apress.com/?p=738":http://ablog.apress.com/?p=738
|
13
13
|
|
14
14
|
|
15
|
+
h1. Version 9.0.0 (2006-10-28)
|
16
|
+
|
17
|
+
h2. Summary
|
18
|
+
|
19
|
+
This release improves the automated test generator and adds new content to the user manual.
|
20
|
+
|
21
|
+
h2. Acknowledgments
|
22
|
+
|
23
|
+
Thanks to Matt Fischler for helping test and debug the installation of Ruby-VPI on Windows.
|
24
|
+
|
25
|
+
h2. Notice
|
26
|
+
|
27
|
+
* The command-line options for @generate_test.rb@ have changed. Run the command @generate_test.rb --help@ for details.
|
28
|
+
|
29
|
+
h2. Details
|
30
|
+
|
31
|
+
* Test runners now attempt to resolve paths in @SIMULATOR_SOURCES@ by searching for them within the directories specified in @SIMULATOR_INCLUDES@.
|
32
|
+
|
33
|
+
* Synopsys VCS is now used in a better way (via the @-load@ option).
|
34
|
+
** The old PLI table file (@synopsys_vcs.tab@) has been removed.
|
35
|
+
** The C extension has been revised accordingly.
|
36
|
+
|
37
|
+
** The C extension now compiles without errors in Cygwin.
|
38
|
+
|
39
|
+
* The automated test generator now:
|
40
|
+
** Only creates output files when necessary.
|
41
|
+
** Updates existing output files using "text merging tools":./doc/usage.recommendations.html if possible. (Refer to @MERGER@ in the help information of @generate_test.rb@.)
|
42
|
+
** Emits progress information similar to Ruby on Rails.
|
43
|
+
|
44
|
+
* The user manual now:
|
45
|
+
** Includes instructions for installing on Windows (via Cygwin).
|
46
|
+
** Has a recommended software section, with links to text merging tools.
|
47
|
+
** Uses the term "xUnit":http://en.wikipedia.org/wiki/XUnit instead of "unit test".
|
48
|
+
** Correctly spells "rSpec".
|
49
|
+
|
50
|
+
|
15
51
|
h1. Version 8.2.0 (2006-10-24)
|
16
52
|
|
17
53
|
h2. Summary
|
18
54
|
|
19
55
|
This release simplifies configuration of generated tests.
|
20
56
|
|
57
|
+
h2. Acknowledgments
|
58
|
+
|
59
|
+
Thanks to "students in CMPE-126":http://www.soe.ucsc.edu/classes/cmpe126/Fall06/ for their constructive criticism.
|
60
|
+
|
21
61
|
h2. Notice
|
22
62
|
|
23
63
|
* Generated runners now have a @SIMULATOR_INCLUDES@ array, whose entries specify places where Verilog source files, needed by the Verilog design, reside.
|
data/README
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
h1{text-align: center}. Welcome to Ruby-VPI
|
2
|
+
|
3
|
+
Ruby-VPI is a "Ruby interface":http://ruby-lang.org to "Verilog VPI":http://ieeexplore.ieee.org/xpl/standardstoc.jsp?isnumber=33945. It lets you create complex Verilog test benches easily and wholly in Ruby.
|
4
|
+
|
5
|
+
h2. Features
|
6
|
+
|
7
|
+
* Prototype and verify designs _quickly_ using "BDD(behavior-driven development)":http://behaviour-driven.org/, "TDD(test-driven development)":http://www.agiledata.org/essays/tdd.html, and more.
|
8
|
+
* Reuse the _same_ specification to verify both prototype and design.
|
9
|
+
* Specifications are executable _and_ human-readable. (See this <a href="./doc/usage.tutorial.html#fig..counter_rspecTest_spec.rb">example specification</a> and its <a href="./doc/usage.tutorial.html#fig..test-proto.rspec">boss-friendly output</a>.)
|
10
|
+
|
11
|
+
* Utilize Ruby's power and elegance. ("Why choose Ruby?":http://www.ruby-doc.org/whyruby)
|
12
|
+
** Built-in support for unlimited length integers, regular expressions, networking, multi-threading, system calls, _ad infinium_!
|
13
|
+
** Easy to use; doesn't get in your way.
|
14
|
+
** Makes programming _fun_ again!
|
15
|
+
|
16
|
+
* Study, modify, or distribute this free software in accordance with the "GNU General Public License":http://www.gnu.org/copyleft/gpl.html.
|
17
|
+
|
18
|
+
|
1
19
|
h1. Getting started
|
2
20
|
|
3
21
|
* See the "user manual":./doc to begin using Ruby-VPI.
|
@@ -9,9 +27,9 @@ h1. Getting started
|
|
9
27
|
* Visit the "project website":http://ruby-vpi.rubyforge.org for additional resources.
|
10
28
|
|
11
29
|
|
12
|
-
h1.
|
30
|
+
h1. Building release packages
|
13
31
|
|
14
|
-
In addition to the "normal requirements":./doc/usage.requirements.html, you need the following software to
|
32
|
+
In addition to the "normal requirements":./doc/usage.requirements.html, you need the following software to build release packages:
|
15
33
|
|
16
34
|
* "DocBook-XML":http://www.docbook.org/
|
17
35
|
** xsltproc
|
data/Rakefile
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# = Environment variables
|
2
|
+
# CFLAGS:: Arguments to the compiler.
|
3
|
+
# LDFLAGS:: Arguments to the linker.
|
1
4
|
=begin
|
2
5
|
Copyright 2006 Suraj N. Kurapati
|
3
6
|
|
@@ -18,6 +21,8 @@
|
|
18
21
|
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
19
22
|
=end
|
20
23
|
|
24
|
+
CFLAGS, LDFLAGS = ENV['CFLAGS'], ENV['LDFLAGS']
|
25
|
+
|
21
26
|
require 'rake/clean'
|
22
27
|
require 'rake/rdoctask'
|
23
28
|
require 'rake/gempackagetask'
|
@@ -25,15 +30,14 @@ require 'rake/gempackagetask'
|
|
25
30
|
require 'tempfile'
|
26
31
|
require 'rbconfig'
|
27
32
|
|
28
|
-
|
33
|
+
PROJECT_LIBS = File.join(File.dirname(__FILE__), 'lib')
|
34
|
+
|
35
|
+
$:.unshift PROJECT_LIBS
|
36
|
+
require 'ruby-vpi'
|
29
37
|
require 'ruby-vpi/rake'
|
30
38
|
|
31
39
|
|
32
|
-
|
33
|
-
PROJECT_NAME = 'Ruby-VPI'
|
34
|
-
PROJECT_URL = "http://#{PROJECT_ID}.rubyforge.org"
|
35
|
-
PROJECT_SUMMARY = "Ruby interface to Verilog VPI."
|
36
|
-
PROJECT_DETAIL = "#{PROJECT_NAME} is a #{PROJECT_SUMMARY}. It lets you create complex Verilog test benches easily and wholly in Ruby."
|
40
|
+
include RubyVpi::Config
|
37
41
|
PROJECT_SSH_URL = "snk@rubyforge.org:/var/www/gforge-projects/#{PROJECT_ID}"
|
38
42
|
|
39
43
|
File.read('HISTORY') =~ /Version\s+([\d\.]+)\s*\((.*?)\)/
|
@@ -56,13 +60,18 @@ end
|
|
56
60
|
|
57
61
|
task :default => :build
|
58
62
|
|
59
|
-
|
60
|
-
|
61
|
-
|
63
|
+
[:clean, :clobber].each do |t|
|
64
|
+
task t do
|
65
|
+
files = FileList['**/Rakefile'].exclude('_darcs')
|
66
|
+
files.shift # avoid infinite loop on _this_ file
|
67
|
+
|
68
|
+
# allows propogation to lower levels when gem not installed
|
69
|
+
ENV['RUBYLIB'] = PROJECT_LIBS
|
62
70
|
|
63
|
-
|
64
|
-
|
65
|
-
|
71
|
+
files.each do |f|
|
72
|
+
cd File.dirname(f) do
|
73
|
+
sh 'rake', t.to_s
|
74
|
+
end
|
66
75
|
end
|
67
76
|
end
|
68
77
|
end
|
@@ -74,46 +83,33 @@ end
|
|
74
83
|
desc "Builds object files for all simulators."
|
75
84
|
task :build
|
76
85
|
|
77
|
-
DEFAULT_SHARED_OBJ = "#{PROJECT_ID}.so"
|
78
|
-
DEFAULT_NORMAL_OBJ = "#{PROJECT_ID}.o"
|
79
|
-
|
80
86
|
directory 'obj'
|
81
87
|
CLOBBER.include 'obj'
|
82
88
|
|
83
|
-
{
|
84
|
-
:cver => ['-DPRAGMATIC_CVER', '-export-dynamic'],
|
85
|
-
:ivl => ['-DICARUS_VERILOG'],
|
86
|
-
:vcs => ['-DSYNOPSYS_VCS'],
|
87
|
-
:vsim => ['-DMENTOR_MODELSIM'],
|
88
|
-
}.each_pair do |target, (cflags, ldflags)|
|
89
89
|
|
90
|
-
|
91
|
-
|
92
|
-
dstName = src.sub(/#{File.extname src}$/, ".#{target}\\&")
|
93
|
-
dst = File.expand_path(File.join('obj', dstName))
|
90
|
+
SIMULATORS.each do |sim|
|
91
|
+
taskName = "build_#{sim.id}"
|
94
92
|
|
95
|
-
|
96
|
-
|
97
|
-
|
93
|
+
desc "Builds object files for #{sim.name} simulator."
|
94
|
+
task taskName => ['obj', 'ext'] do
|
95
|
+
src = "#{PROJECT_ID}.so"
|
96
|
+
dst = "#{PROJECT_ID}.#{sim.id}.so"
|
98
97
|
|
99
|
-
|
100
|
-
targetTask = "build_#{target}"
|
98
|
+
dst = File.expand_path(File.join('obj', dst))
|
101
99
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
ENV['CFLAGS'], ENV['LDFLAGS'] = cflags, ldflags
|
107
|
-
sh %w(rake clean default)
|
100
|
+
unless File.exist? dst
|
101
|
+
cd 'ext' do
|
102
|
+
ENV['CFLAGS'] = "#{CFLAGS} #{sim.compiler_args}"
|
103
|
+
ENV['LDFLAGS'] = "#{LDFLAGS} #{sim.linker_args}"
|
108
104
|
|
109
|
-
|
110
|
-
|
111
|
-
|
105
|
+
sh 'rake'
|
106
|
+
mv src, dst
|
107
|
+
sh 'rake clean'
|
112
108
|
end
|
113
109
|
end
|
114
110
|
end
|
115
111
|
|
116
|
-
task :build =>
|
112
|
+
task :build => taskName
|
117
113
|
end
|
118
114
|
|
119
115
|
|
@@ -192,7 +188,7 @@ task :dist_info => distDocs
|
|
192
188
|
|
193
189
|
desc "Prepare for distribution."
|
194
190
|
task :dist => ['ext', :doc, :dist_info] do |t|
|
195
|
-
cd
|
191
|
+
cd 'ext' do
|
196
192
|
sh 'rake swig'
|
197
193
|
end
|
198
194
|
end
|
@@ -274,7 +270,7 @@ end
|
|
274
270
|
desc "Ensure that examples work with $SIMULATOR"
|
275
271
|
task :test => :build do
|
276
272
|
# ensures that current sources are tested instead of the installed gem
|
277
|
-
ENV['RUBYLIB'] =
|
273
|
+
ENV['RUBYLIB'] = PROJECT_LIBS
|
278
274
|
|
279
275
|
FileList['samp/*/'].each do |s|
|
280
276
|
cd s do
|
data/bin/generate_test.rb
CHANGED
@@ -1,8 +1,18 @@
|
|
1
1
|
#!/usr/bin/ruby -w
|
2
2
|
# Generates Ruby-VPI tests from Verilog 2001 module declarations.
|
3
|
-
# *
|
3
|
+
# * The standard input stream is read if no input files are specified.
|
4
4
|
# * The first input signal in a module's declaration is assumed to be the clocking signal.
|
5
|
-
#
|
5
|
+
#
|
6
|
+
# = Progress indicators
|
7
|
+
# As this tool performs its duties, it notifies you of important information using the following indicators.
|
8
|
+
#
|
9
|
+
# create:: Output file does not exist. It will be created.
|
10
|
+
# skip:: Output file exists and is up to date.
|
11
|
+
# update:: Output file exists and is out of date. A backup copy will be made (with a ".old" suffix) before this output file is updated. Use a text merging tool or manually transfer any necessary information from the backup copy to the updated output file.
|
12
|
+
#
|
13
|
+
# = Environment variables
|
14
|
+
# MERGER:: A command for invoking a text merging tool with two arguments: old file, new file. The tool should save its output to the new file.
|
15
|
+
|
6
16
|
|
7
17
|
=begin
|
8
18
|
Copyright 2006 Suraj N. Kurapati
|
@@ -25,24 +35,39 @@
|
|
25
35
|
=end
|
26
36
|
|
27
37
|
require 'ruby-vpi/verilog_parser'
|
38
|
+
require 'fileutils'
|
39
|
+
require 'digest/md5'
|
28
40
|
|
29
41
|
|
30
|
-
|
42
|
+
# Notify the user about some action being performed.
|
43
|
+
def notify *args
|
44
|
+
printf "%8s %s\n", *args
|
45
|
+
end
|
31
46
|
|
32
|
-
# Writes the given contents to the file at the given path. If the given path already exists, then a backup is created before
|
47
|
+
# Writes the given contents to the file at the given path. If the given path already exists, then a backup is created before invoking the merging tool.
|
33
48
|
def write_file aPath, aContent
|
34
|
-
|
35
|
-
|
36
|
-
|
49
|
+
if File.exist? aPath
|
50
|
+
oldDigest = Digest::MD5.digest(File.read(aPath))
|
51
|
+
newDigest = Digest::MD5.digest(aContent)
|
37
52
|
|
38
|
-
|
39
|
-
|
40
|
-
|
53
|
+
if oldDigest == newDigest
|
54
|
+
notify :skip, aPath
|
55
|
+
else
|
56
|
+
notify :update, aPath
|
41
57
|
|
42
|
-
|
43
|
-
end
|
58
|
+
old, new = "#{aPath}.old", aPath
|
44
59
|
|
45
|
-
|
60
|
+
FileUtils.cp aPath, old, :preserve => true
|
61
|
+
File.open(new, 'w') {|f| f << aContent}
|
62
|
+
|
63
|
+
if m = ENV['MERGER']
|
64
|
+
system "#{m} #{old.inspect} #{new.inspect}"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
else
|
68
|
+
notify :create, aPath
|
69
|
+
File.open(aPath, 'w') {|f| f << aContent}
|
70
|
+
end
|
46
71
|
end
|
47
72
|
|
48
73
|
|
@@ -65,7 +90,7 @@ class OutputInfo
|
|
65
90
|
VERILOG_EXT = '.v'
|
66
91
|
RUNNER_EXT = '.rake'
|
67
92
|
|
68
|
-
SPEC_FORMATS = [:
|
93
|
+
SPEC_FORMATS = [:rSpec, :xUnit, :generic]
|
69
94
|
|
70
95
|
attr_reader :verilogBenchName, :verilogBenchPath, :rubyBenchName, :rubyBenchPath, :designName, :designClassName, :designPath, :specName, :specClassName, :specFormat, :specPath, :rubyVpiPath, :runnerName, :runnerPath, :protoName, :protoPath, :protoClassName
|
71
96
|
|
@@ -124,7 +149,7 @@ if File.basename($0) == File.basename(__FILE__)
|
|
124
149
|
# parse command-line options
|
125
150
|
require 'optparse'
|
126
151
|
|
127
|
-
optSpecFmt = :
|
152
|
+
optSpecFmt = :generic
|
128
153
|
optTestName = 'test'
|
129
154
|
|
130
155
|
opts = OptionParser.new
|
@@ -138,12 +163,12 @@ if File.basename($0) == File.basename(__FILE__)
|
|
138
163
|
exit
|
139
164
|
end
|
140
165
|
|
141
|
-
opts.on '-u', '--
|
142
|
-
optSpecFmt = :
|
166
|
+
opts.on '-u', '--xunit', 'use xUnit specification format' do |val|
|
167
|
+
optSpecFmt = :xUnit if val
|
143
168
|
end
|
144
169
|
|
145
|
-
opts.on '-
|
146
|
-
optSpecFmt = :
|
170
|
+
opts.on '-s', '--rspec', 'use rSpec specification format' do |val|
|
171
|
+
optSpecFmt = :rSpec if val
|
147
172
|
end
|
148
173
|
|
149
174
|
opts.on '-n', '--name NAME', 'attach NAME indentifier to generated test' do |val|
|
@@ -152,36 +177,26 @@ if File.basename($0) == File.basename(__FILE__)
|
|
152
177
|
|
153
178
|
opts.parse! ARGV
|
154
179
|
|
155
|
-
|
156
|
-
|
180
|
+
notify :name, optTestName
|
181
|
+
notify :format, optSpecFmt
|
157
182
|
|
158
183
|
|
159
184
|
v = VerilogParser.new(ARGF.read)
|
160
185
|
|
161
186
|
v.modules.each do |m|
|
162
|
-
puts
|
187
|
+
puts
|
188
|
+
notify :module, m.name
|
163
189
|
|
164
|
-
o = OutputInfo.new(m.name, optSpecFmt, optTestName, File.dirname(File.dirname(__FILE__)))
|
190
|
+
o = OutputInfo.new(m.name, optSpecFmt, optTestName, File.dirname(File.dirname(__FILE__)))
|
165
191
|
|
166
192
|
# generate output
|
167
|
-
aParseInfo, aModuleInfo, aOutputInfo = v, m, o
|
193
|
+
aParseInfo, aModuleInfo, aOutputInfo = v.freeze, m.freeze, o.freeze
|
168
194
|
|
169
195
|
write_file o.runnerPath, RUNNER_TEMPLATE.result(binding)
|
170
|
-
puts "- Generated runner: #{o.runnerPath}"
|
171
|
-
|
172
196
|
write_file o.verilogBenchPath, VERILOG_BENCH_TEMPLATE.result(binding)
|
173
|
-
puts "- Generated bench: #{o.verilogBenchPath}"
|
174
|
-
|
175
197
|
write_file o.rubyBenchPath, RUBY_BENCH_TEMPLATE.result(binding)
|
176
|
-
puts "- Generated bench: #{o.rubyBenchPath}"
|
177
|
-
|
178
198
|
write_file o.designPath, DESIGN_TEMPLATE.result(binding)
|
179
|
-
puts "- Generated design: #{o.designPath}"
|
180
|
-
|
181
199
|
write_file o.protoPath, PROTO_TEMPLATE.result(binding)
|
182
|
-
puts "- Generated prototype: #{o.protoPath}"
|
183
|
-
|
184
200
|
write_file o.specPath, SPEC_TEMPLATE.result(binding)
|
185
|
-
puts "- Generated specification: #{o.specPath}"
|
186
201
|
end
|
187
202
|
end
|
@@ -3,11 +3,11 @@
|
|
3
3
|
require 'ruby-vpi'
|
4
4
|
<%
|
5
5
|
case aOutputInfo.specFormat
|
6
|
-
when :
|
6
|
+
when :xUnit
|
7
7
|
%>
|
8
8
|
require 'test/unit'
|
9
9
|
<%
|
10
|
-
when :
|
10
|
+
when :rSpec
|
11
11
|
%>
|
12
12
|
require 'ruby-vpi/rspec'
|
13
13
|
<%
|
@@ -19,7 +19,7 @@ RubyVpi.init_bench '<%= aModuleInfo.name + aOutputInfo.suffix %>', :<%= aOutputI
|
|
19
19
|
# service the $ruby_relay callback
|
20
20
|
<%
|
21
21
|
case aOutputInfo.specFormat
|
22
|
-
when :
|
22
|
+
when :xUnit, :rSpec
|
23
23
|
%>
|
24
24
|
# The <%= aOutputInfo.specFormat %> library will take control henceforth.
|
25
25
|
<%
|
@@ -35,7 +35,7 @@ module <%= aOutputInfo.verilogBenchName %>;
|
|
35
35
|
initial begin
|
36
36
|
<%= clockSignal %> = 0;
|
37
37
|
$ruby_init("ruby", "-w", "-rubygems", "<%= aOutputInfo.rubyBenchPath %>"<%=
|
38
|
-
%{, "-f", "s"} if aOutputInfo.specFormat == :
|
38
|
+
%{, "-f", "s"} if aOutputInfo.specFormat == :rSpec
|
39
39
|
%>);
|
40
40
|
end
|
41
41
|
|
@@ -1,11 +1,12 @@
|
|
1
1
|
## This file builds and runs the test.
|
2
2
|
|
3
|
-
# These are source files that are to be
|
3
|
+
# These are source files that are to be compiled.
|
4
4
|
SIMULATOR_SOURCES = [
|
5
5
|
'<%= aOutputInfo.verilogBenchPath %>',
|
6
6
|
]
|
7
7
|
|
8
|
-
# These are paths to directories which contain
|
8
|
+
# These are paths to directories which contain the
|
9
|
+
# sources listed above, their dependencies, or both.
|
9
10
|
SIMULATOR_INCLUDES = []
|
10
11
|
|
11
12
|
# This specifies the "top module" that is to be simulated.
|