ruby-vpi 15.0.2 → 16.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 +23 -340
- data/Rakefile +169 -192
- data/bin/generate_test.rb +26 -25
- data/bin/generate_test_tpl/runner.rake +4 -10
- data/bin/header_to_ruby.rb +3 -20
- data/doc/README +11 -0
- data/doc/Rakefile +8 -21
- data/doc/common.css +44 -10
- data/doc/common.tpl +5 -10
- data/doc/history.doc +8 -7
- data/doc/history.html +228 -560
- data/doc/history.rb +7 -11
- data/doc/{history.yml → history.yaml} +325 -128
- data/doc/images/{feed-icon.png → feed-icon-28x28.png} +0 -0
- data/doc/images/ruby/LICENSE +15 -0
- data/doc/images/ruby/logo-reflection.png +0 -0
- data/doc/images/ruby/logo-reflection.xcf +0 -0
- data/doc/images/ruby/logo.png +0 -0
- data/doc/images/{LICENSE → tango/LICENSE} +0 -0
- data/doc/images/{caution.png → tango/caution.png} +0 -0
- data/doc/images/{caution.svg → tango/caution.svg} +0 -0
- data/doc/images/{home.png → tango/home.png} +0 -0
- data/doc/images/{home.svg → tango/home.svg} +0 -0
- data/doc/images/{important.png → tango/important.png} +0 -0
- data/doc/images/{important.svg → tango/important.svg} +0 -0
- data/doc/images/{next.png → tango/next.png} +0 -0
- data/doc/images/{next.svg → tango/next.svg} +0 -0
- data/doc/images/{note.png → tango/note.png} +0 -0
- data/doc/images/{note.svg → tango/note.svg} +0 -0
- data/doc/images/{prev.png → tango/prev.png} +0 -0
- data/doc/images/{prev.svg → tango/prev.svg} +0 -0
- data/doc/images/{tip.png → tango/tip.png} +0 -0
- data/doc/images/{tip.svg → tango/tip.svg} +0 -0
- data/doc/images/{up.png → tango/up.png} +0 -0
- data/doc/images/{up.svg → tango/up.svg} +0 -0
- data/doc/images/{warning.png → tango/warning.png} +0 -0
- data/doc/images/{warning.svg → tango/warning.svg} +0 -0
- data/doc/intro.inc +105 -36
- data/doc/lib/doc_format.rb +151 -29
- data/doc/lib/doc_proxy.rb +28 -69
- data/doc/lib/erb_content.rb +10 -22
- data/doc/lib/erb_proxy.rb +13 -24
- data/doc/manual.doc +16 -60
- data/doc/manual.html +257 -340
- data/doc/memo.doc +2 -0
- data/doc/memo.html +11 -11
- data/doc/readme.doc +36 -2
- data/doc/readme.html +214 -51
- data/doc/rss.erb +3 -3
- data/doc/rss.xml +217 -269
- data/ext/Rakefile +7 -22
- data/ext/common.h +10 -21
- data/ext/extconf.rb +5 -0
- data/ext/main.c +2 -18
- data/ext/main.h +1 -16
- data/ext/relay.c +3 -17
- data/ext/relay.h +3 -17
- data/ext/verilog.h +6 -18
- data/ext/vlog.c +3 -21
- data/ext/vlog.h +3 -17
- data/lib/ruby-vpi/erb.rb +7 -20
- data/lib/ruby-vpi/float.rb +6 -20
- data/lib/ruby-vpi/integer.rb +27 -47
- data/lib/ruby-vpi/rake.rb +4 -19
- data/lib/ruby-vpi/rcov.rb +6 -21
- data/lib/ruby-vpi/rdoc.rb +3 -21
- data/lib/ruby-vpi/runner.rb +28 -29
- data/lib/ruby-vpi/runner_proxy.rb +5 -21
- data/lib/ruby-vpi/verilog_parser.rb +5 -20
- data/lib/ruby-vpi/vpi.rb +420 -376
- data/lib/ruby-vpi.rb +26 -32
- 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/{M000026.html → M000024.html} +15 -15
- data/ref/ruby/classes/FileUtils.html +10 -10
- data/ref/ruby/classes/FileUtils.src/{M000027.html → M000025.html} +4 -4
- data/ref/ruby/classes/FileUtils.src/{M000028.html → M000026.html} +4 -4
- data/ref/ruby/classes/Float.html +5 -5
- data/ref/ruby/classes/Float.src/{M000022.html → M000020.html} +5 -5
- data/ref/ruby/classes/Integer.html +20 -56
- data/ref/ruby/classes/Integer.src/M000008.html +11 -11
- data/ref/ruby/classes/Integer.src/M000009.html +4 -4
- data/ref/ruby/classes/Integer.src/M000010.html +4 -4
- data/ref/ruby/classes/Integer.src/M000011.html +4 -4
- data/ref/ruby/classes/Integer.src/M000012.html +4 -4
- data/ref/ruby/classes/Integer.src/M000013.html +4 -4
- data/ref/ruby/classes/Integer.src/M000016.html +12 -9
- data/ref/ruby/classes/Integer.src/M000017.html +18 -9
- data/ref/ruby/classes/Integer.src/M000018.html +12 -12
- data/ref/ruby/classes/Integer.src/M000019.html +17 -18
- data/ref/ruby/classes/RDoc.src/M000053.html +25 -25
- data/ref/ruby/classes/RubyVpi/Config.html +3 -3
- data/ref/ruby/classes/RubyVpi.html +11 -5
- data/ref/ruby/classes/RubyVpi.src/{M000029.html → M000027.html} +103 -101
- data/ref/ruby/classes/String.html +21 -15
- data/ref/ruby/classes/String.src/M000021.html +36 -0
- data/ref/ruby/classes/String.src/{M000024.html → M000022.html} +24 -24
- data/ref/ruby/classes/String.src/M000023.html +5 -23
- data/ref/ruby/classes/VerilogParser/Module/Parameter.src/M000007.html +5 -5
- data/ref/ruby/classes/VerilogParser/Module/Port.src/M000003.html +7 -7
- data/ref/ruby/classes/VerilogParser/Module/Port.src/M000004.html +4 -4
- data/ref/ruby/classes/VerilogParser/Module/Port.src/M000005.html +4 -4
- data/ref/ruby/classes/VerilogParser/Module/Port.src/M000006.html +4 -4
- data/ref/ruby/classes/VerilogParser/Module.src/M000002.html +20 -20
- data/ref/ruby/classes/VerilogParser.html +6 -0
- data/ref/ruby/classes/VerilogParser.src/M000001.html +20 -20
- data/ref/ruby/classes/Vpi/Handle.html +89 -88
- data/ref/ruby/classes/Vpi/Handle.src/M000036.html +18 -0
- 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 +8 -5
- data/ref/ruby/classes/Vpi/Handle.src/M000041.html +8 -8
- data/ref/ruby/classes/Vpi/Handle.src/M000042.html +7 -6
- data/ref/ruby/classes/Vpi/Handle.src/M000043.html +31 -9
- data/ref/ruby/classes/Vpi/Handle.src/M000044.html +74 -31
- data/ref/ruby/classes/Vpi/Handle.src/M000045.html +17 -74
- data/ref/ruby/classes/Vpi/Handle.src/M000046.html +11 -17
- data/ref/ruby/classes/Vpi/Handle.src/M000048.html +31 -0
- data/ref/ruby/classes/Vpi/Handle.src/M000049.html +53 -52
- data/ref/ruby/classes/Vpi/S_vpi_time.src/M000050.html +4 -4
- data/ref/ruby/classes/Vpi/S_vpi_time.src/M000051.html +5 -5
- data/ref/ruby/classes/Vpi/S_vpi_value.html +15 -15
- data/ref/ruby/classes/Vpi/S_vpi_value.src/{M000036.html → M000033.html} +5 -5
- data/ref/ruby/classes/Vpi/S_vpi_value.src/M000034.html +5 -5
- data/ref/ruby/classes/Vpi/S_vpi_value.src/M000035.html +5 -5
- data/ref/ruby/classes/Vpi.html +48 -19
- data/ref/ruby/classes/Vpi.src/M000028.html +28 -0
- data/ref/ruby/classes/Vpi.src/M000029.html +18 -0
- data/ref/ruby/classes/Vpi.src/M000030.html +25 -15
- data/ref/ruby/classes/Vpi.src/M000031.html +9 -5
- data/ref/ruby/classes/Vpi.src/M000032.html +9 -25
- data/ref/ruby/created.rid +1 -1
- data/ref/ruby/files/bin/generate_test_rb.html +2 -1
- data/ref/ruby/files/bin/header_to_ruby_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/erb_rb.html +7 -1
- data/ref/ruby/files/lib/ruby-vpi/float_rb.html +7 -1
- data/ref/ruby/files/lib/ruby-vpi/integer_rb.html +7 -1
- data/ref/ruby/files/lib/ruby-vpi/rake_rb.html +7 -1
- data/ref/ruby/files/lib/ruby-vpi/rcov_rb.html +7 -1
- data/ref/ruby/files/lib/ruby-vpi/rdoc_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 +1 -1
- 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_rb.html +7 -1
- data/ref/ruby/fr_method_index.html +34 -34
- data/samp/counter/counter_rspec_runner.rake +4 -0
- data/samp/counter/counter_xunit_runner.rake +4 -0
- data/samp/pipelined_alu/Hw5UnitModel.rb +3 -19
- data/samp/pipelined_alu/README +38 -13
- data/samp/pipelined_alu/TestHw5UnitModel.rb +9 -20
- data/samp/pipelined_alu/hw5_unit.v +1 -16
- data/samp/pipelined_alu/hw5_unit_test_runner.rake +4 -0
- data/samp/pipelined_alu/hw5_unit_test_spec.rb +3 -20
- data/samp/pipelined_alu/int_gen.rb +6 -20
- metadata +47 -43
- data/doc/LICENSE +0 -397
- data/doc/images/feed-icon.LICENSE +0 -2
- data/doc/images/feed-icon.svg +0 -18
- data/ref/ruby/classes/Integer.src/M000020.html +0 -25
- data/ref/ruby/classes/Integer.src/M000021.html +0 -30
- data/ref/ruby/classes/String.src/M000025.html +0 -18
- data/ref/ruby/classes/Vpi/Handle.src/M000047.html +0 -24
- data/ref/ruby/classes/Vpi.src/M000033.html +0 -22
|
File without changes
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
The Ruby Logo is Copyright (c) 2006, Yukihiro Matsumoto. It is licensed
|
|
2
|
+
under the terms of the Creative Commons Attribution-ShareAlike 2.5
|
|
3
|
+
agreement:
|
|
4
|
+
|
|
5
|
+
http://creativecommons.org/licenses/by-sa/2.5/
|
|
6
|
+
|
|
7
|
+
We ask that you do not use the logo to represent something other than
|
|
8
|
+
the Ruby Programming language. If you have questions about the logo,
|
|
9
|
+
please join the VIT-Discuss mailing list and ask your questions there:
|
|
10
|
+
|
|
11
|
+
http://rubyforge.org/mailman/listinfo/vit-discuss/
|
|
12
|
+
|
|
13
|
+
Thank you,
|
|
14
|
+
|
|
15
|
+
The Ruby Visual Identity Team
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
data/doc/intro.inc
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
|
-
Ruby-VPI is a
|
|
1
|
+
Ruby-VPI is a platform for unit testing, rapid prototyping, and systems integration of Verilog modules through the "Ruby programming language":http://www.ruby-lang.org. It lets you:
|
|
2
2
|
|
|
3
|
+
* Access the _entire_ "IEEE 1364-2005 Verilog VPI":http://ieeexplore.ieee.org/xpl/standardstoc.jsp?isnumber=33945 interface from Ruby.
|
|
4
|
+
* Create complex Verilog test benches easily and wholly in Ruby.
|
|
5
|
+
* Apply agile software development practices to develop hardware.
|
|
6
|
+
* Perform "specification-driven functional verification":http://ruby-vpi.rubyforge.org/papers/masters_thesis.html ("PDF version":http://ruby-vpi.rubyforge.org/papers/masters_thesis.pdf).
|
|
7
|
+
|
|
8
|
+
Ruby-VPI is "open source software":http://en.wikipedia.org/wiki/Open_source_software released under "this license":#intro.license.
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
<div id="resources">
|
|
12
|
+
|
|
13
|
+
h2. Resources
|
|
14
|
+
|
|
15
|
+
p(title). Records
|
|
16
|
+
|
|
17
|
+
<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>
|
|
18
|
+
|
|
19
|
+
* "What's new?":history.html
|
|
20
|
+
- a record of all release notes.
|
|
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.
|
|
3
27
|
|
|
4
28
|
p(title). Documentation
|
|
5
29
|
|
|
@@ -10,53 +34,36 @@ p(title). Documentation
|
|
|
10
34
|
* "Reference":../ref/
|
|
11
35
|
- API documentation for Ruby libraries and C extension.
|
|
12
36
|
|
|
13
|
-
|
|
14
|
-
p(title). Records
|
|
15
|
-
|
|
16
|
-
* <a type="application/rss+xml" href="<%= RSS_URL %>">!images/feed-icon.png(RSS feed icon)! RSS feed</a>
|
|
17
|
-
- keep track of new releases at your leisure.
|
|
18
|
-
* "Release history":history.html
|
|
19
|
-
- record of all release notes.
|
|
20
|
-
* "Memorandum":memo.html
|
|
21
|
-
- pending tasks for future releases.
|
|
22
|
-
|
|
23
|
-
|
|
24
37
|
p(title). Facilities
|
|
25
38
|
|
|
26
|
-
* "Project portal":http://rubyforge.org/projects/ruby-vpi
|
|
27
|
-
- hosted generously by "RubyForge":http://rubyforge.org.
|
|
28
|
-
* "Source code":http://ruby-vpi.rubyforge.org/src/ruby-vpi
|
|
29
|
-
- browse online or obtain through "Darcs":http://abridgegame.org/darcs/.
|
|
30
39
|
* "Downloads":http://rubyforge.org/frs/?group_id=1339
|
|
31
40
|
- obtain release packages.
|
|
41
|
+
* "Source code":http://ruby-vpi.rubyforge.org/src/ruby-vpi
|
|
42
|
+
- browse online or obtain with "Darcs":http://darcs.net.
|
|
43
|
+
* "Forums":http://rubyforge.org/forum/?group_id=1339
|
|
44
|
+
- discuss things and ask questions.
|
|
32
45
|
* "Bugs":http://rubyforge.org/tracker/?group_id=1339
|
|
33
46
|
- report defects in the software.
|
|
34
47
|
* "Patches":http://rubyforge.org/tracker/?group_id=1339
|
|
35
48
|
- submit patches to source code.
|
|
36
49
|
* "Requests":http://rubyforge.org/tracker/?group_id=1339
|
|
37
50
|
- request new features or get support.
|
|
38
|
-
* "
|
|
39
|
-
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
p(title). Outreach
|
|
51
|
+
* "Project portal":http://rubyforge.org/projects/ruby-vpi
|
|
52
|
+
- hosted generously by "RubyForge":http://rubyforge.org.
|
|
43
53
|
|
|
44
|
-
* "News":http://ruby-vpi.rubyforge.org/news
|
|
45
|
-
- see what's cooking for the next release.
|
|
46
|
-
* "Talks":http://ruby-vpi.rubyforge.org/talks
|
|
47
|
-
- materials from presentations and seminars.
|
|
48
54
|
|
|
55
|
+
</div>
|
|
49
56
|
|
|
50
|
-
h2(#intro.features). Prominent features
|
|
51
57
|
|
|
52
|
-
|
|
58
|
+
h2(#intro.features). Features
|
|
53
59
|
|
|
54
|
-
|
|
60
|
+
p(title). Portable
|
|
55
61
|
|
|
56
|
-
*
|
|
57
|
-
|
|
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!
|
|
58
65
|
|
|
59
|
-
|
|
66
|
+
p(title). Agile
|
|
60
67
|
|
|
61
68
|
* Enables "agile practices":http://agilemanifesto.org/ such as
|
|
62
69
|
** "test-driven":http://www.testdriven.com development
|
|
@@ -68,7 +75,7 @@ h3. Agile
|
|
|
68
75
|
** The "automated test generator":manual.html#usage.tools.generate-test helps you accomodate design changes with _minimal_ effort.
|
|
69
76
|
** There is absolutely _no compiling_!
|
|
70
77
|
|
|
71
|
-
|
|
78
|
+
p(title). Powerful
|
|
72
79
|
|
|
73
80
|
* Inherits the "power and elegance":http://www.ruby-lang.org/en/about/ of Ruby:
|
|
74
81
|
** Unlimited length integers
|
|
@@ -80,14 +87,53 @@ h3. Powerful
|
|
|
80
87
|
* Uses "ruby-debug":http://rubyforge.org/projects/ruby-debug/ for "interactive debugging":manual.html#usage.debugger.
|
|
81
88
|
* Uses "rcov":http://eigenclass.org/hiki.rb?rcov for test "coverage analysis and report generation":manual.html#usage.test-runner.env-vars.
|
|
82
89
|
|
|
83
|
-
h3. Free
|
|
84
90
|
|
|
85
|
-
|
|
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.
|
|
86
132
|
|
|
87
133
|
|
|
88
134
|
h2(#intro.applications). Applications
|
|
89
135
|
|
|
90
|
-
|
|
136
|
+
Examples of tasks that can be performed with Ruby-VPI are:
|
|
91
137
|
|
|
92
138
|
* From the second edition of "_The Verilog PLI Handbook_":http://www.sutherland-hdl.com/publications.html:
|
|
93
139
|
** C language bus-functional models
|
|
@@ -110,7 +156,7 @@ Here is a modest sampling of tasks that Ruby-VPI can be used to perform.
|
|
|
110
156
|
|
|
111
157
|
h2(#intro.appetizers). Appetizers
|
|
112
158
|
|
|
113
|
-
Here is a
|
|
159
|
+
Here is a tiny sampling of code to whet your appetite. See "the tutorial":manual.html#usage.tutorial for more samples.
|
|
114
160
|
|
|
115
161
|
* Assign the value 2^2048^ to a register:
|
|
116
162
|
|
|
@@ -127,3 +173,26 @@ bq. @puts some_register@
|
|
|
127
173
|
* Simulate fifteen clock cycles:
|
|
128
174
|
|
|
129
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.
|
data/doc/lib/doc_format.rb
CHANGED
|
@@ -1,22 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
This file is part of Ruby-VPI.
|
|
5
|
-
|
|
6
|
-
Ruby-VPI is free software; you can redistribute it and/or
|
|
7
|
-
modify it under the terms of the GNU General Public License
|
|
8
|
-
as published by the Free Software Foundation; either version 2
|
|
9
|
-
of the License, or (at your option) any later version.
|
|
10
|
-
|
|
11
|
-
Ruby-VPI is distributed in the hope that it will be useful,
|
|
12
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
-
GNU General Public License for more details.
|
|
15
|
-
|
|
16
|
-
You should have received a copy of the GNU General Public License
|
|
17
|
-
along with Ruby-VPI; if not, write to the Free Software Foundation,
|
|
18
|
-
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
19
|
-
=end
|
|
1
|
+
#--
|
|
2
|
+
# Copyright 2006-2007 Suraj N. Kurapati
|
|
3
|
+
# See the file named LICENSE for details.
|
|
20
4
|
|
|
21
5
|
require 'cgi'
|
|
22
6
|
require 'rubygems'
|
|
@@ -24,29 +8,49 @@ require 'coderay'
|
|
|
24
8
|
require 'redcloth'
|
|
25
9
|
|
|
26
10
|
class String
|
|
27
|
-
# The content of these HTML tags will be preserved verbatim when they are
|
|
11
|
+
# The content of these HTML tags will be preserved verbatim when they are
|
|
12
|
+
# processed by Textile.
|
|
28
13
|
PRESERVED_TAGS = [:code, :tt]
|
|
29
14
|
|
|
30
15
|
# Transforms this string into HTML.
|
|
31
16
|
def to_html
|
|
32
17
|
text = dup
|
|
33
18
|
|
|
34
|
-
# prevent the content of these tags from being transformed by Textile
|
|
35
|
-
# for example, Textile transforms quotation marks in code into curly ones
|
|
19
|
+
# prevent the content of these tags from being transformed by Textile.
|
|
20
|
+
# for example, Textile transforms quotation marks in code into curly ones
|
|
21
|
+
# ( ) -- this ruins any source code in the content of the tags!
|
|
36
22
|
PRESERVED_TAGS.each do |tag|
|
|
37
|
-
text.gsub!
|
|
23
|
+
text.gsub! \
|
|
24
|
+
%r{<#{tag}(.*?)>(.*?)</#{tag}>}m,
|
|
25
|
+
%{<pre tag=#{tag.inspect}\\1>\\2</pre>}
|
|
38
26
|
end
|
|
39
27
|
|
|
40
28
|
html = text.redcloth
|
|
41
29
|
|
|
30
|
+
# redcloth wraps a single item within paragraph tags, which prevents the
|
|
31
|
+
# item's HTML from being validly injected within other block-level
|
|
32
|
+
# elements, such as headings (h1, h2, etc.)
|
|
33
|
+
html.sub! %r{^<p>(.*)</p>$}m do |match|
|
|
34
|
+
payload = $1
|
|
35
|
+
|
|
36
|
+
if payload =~ /<p>/
|
|
37
|
+
match
|
|
38
|
+
else
|
|
39
|
+
payload
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
42
43
|
# restore the original tags for the preserved tags
|
|
43
|
-
# unescape content of <pre> tags because they may contain nested
|
|
44
|
+
# unescape content of <pre> tags because they may contain nested
|
|
45
|
+
# preserved tags (redcloth escapes the content of <pre> tags)
|
|
44
46
|
html.gsub! %r{(<pre>)(.*?)(</pre>)}m do
|
|
45
47
|
$1 + CGI.unescapeHTML($2) + $3
|
|
46
48
|
end
|
|
47
49
|
|
|
48
50
|
PRESERVED_TAGS.each do |tag|
|
|
49
|
-
html.gsub!
|
|
51
|
+
html.gsub! \
|
|
52
|
+
%r{<pre tag=#{tag.inspect}(.*?)>(.*?)</pre>}m,
|
|
53
|
+
%{<#{tag}\\1>\\2</#{tag}>}
|
|
50
54
|
end
|
|
51
55
|
|
|
52
56
|
# assume that indented text in Textile is NOT source code
|
|
@@ -65,10 +69,10 @@ class String
|
|
|
65
69
|
RedCloth.new(self).to_html
|
|
66
70
|
end
|
|
67
71
|
|
|
68
|
-
# Adds syntax coloring to <code> elements in the given text. If
|
|
69
|
-
#
|
|
70
|
-
#
|
|
71
|
-
#
|
|
72
|
+
# Adds syntax coloring to <code> elements in the given text. If the <code>
|
|
73
|
+
# tag has an attribute lang="...", then that is considered the programming
|
|
74
|
+
# language for which appropriate syntax coloring should be applied.
|
|
75
|
+
# Otherwise, the programming language is assumed to be ruby.
|
|
72
76
|
def coderay
|
|
73
77
|
gsub %r{<(code)(.*?)>(.*?)</\1>}m do
|
|
74
78
|
code = CGI.unescapeHTML $3
|
|
@@ -93,4 +97,122 @@ class String
|
|
|
93
97
|
%{<#{tag} class="code"#{atts}>#{html}</#{tag}>}
|
|
94
98
|
end
|
|
95
99
|
end
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
# Transforms this string into a valid XHTML anchor (ID attribute).
|
|
103
|
+
# See http://www.nmt.edu/tcc/help/pubs/xhtml/id-type.html
|
|
104
|
+
def to_html_anchor
|
|
105
|
+
# The first or only character must be a letter.
|
|
106
|
+
buf =
|
|
107
|
+
if self[0,1] =~ /[[:alpha:]]/
|
|
108
|
+
self
|
|
109
|
+
else
|
|
110
|
+
'a' + self
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# The remaining characters must be letters, digits, hyphens (-),
|
|
114
|
+
# underscores (_), colons (:), or periods (.) [or Unicode characters]
|
|
115
|
+
buf.unpack('U*').map! do |code|
|
|
116
|
+
if code > 0xFF or code.chr =~ /[[:alnum:]\-_:\.]/
|
|
117
|
+
code
|
|
118
|
+
else
|
|
119
|
+
?_
|
|
120
|
+
end
|
|
121
|
+
end.pack('U*')
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
@@anchors = []
|
|
125
|
+
|
|
126
|
+
# Resets the list of anchors encountered thus far.
|
|
127
|
+
def String.reset_anchors
|
|
128
|
+
@@anchors.clear
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# Builds a table of contents from XHTML headings (<h1>, <h2>, etc.) found
|
|
132
|
+
# in this string and returns an array containing [toc, text] where:
|
|
133
|
+
#
|
|
134
|
+
# toc:: the generated table of contents
|
|
135
|
+
#
|
|
136
|
+
# text:: a modified version of this string which contains anchors for the
|
|
137
|
+
# hyperlinks in the table of contents (so that the TOC can link to
|
|
138
|
+
# the content in this string)
|
|
139
|
+
#
|
|
140
|
+
# If a block is given, it will be invoked every time a heading is found, with
|
|
141
|
+
# information about the found heading.
|
|
142
|
+
#
|
|
143
|
+
def table_of_contents
|
|
144
|
+
toc = '<ul>'
|
|
145
|
+
prevDepth = 0
|
|
146
|
+
prevIndex = ''
|
|
147
|
+
|
|
148
|
+
text = gsub %r{<h(\d)(.*?)>(.*?)</h\1>$}m do
|
|
149
|
+
depth, atts, title = $1.to_i, $2, $3.strip
|
|
150
|
+
|
|
151
|
+
# generate a LaTeX-style index (section number) for the heading
|
|
152
|
+
depthDiff = (depth - prevDepth).abs
|
|
153
|
+
|
|
154
|
+
index =
|
|
155
|
+
if depth > prevDepth
|
|
156
|
+
toc << '<li><ul>' * depthDiff
|
|
157
|
+
|
|
158
|
+
s = prevIndex + ('.1' * depthDiff)
|
|
159
|
+
s.sub(/^\./, '')
|
|
160
|
+
|
|
161
|
+
elsif depth < prevDepth
|
|
162
|
+
toc << '</ul></li>' * depthDiff
|
|
163
|
+
|
|
164
|
+
s = prevIndex.sub(/(\.\d+){#{depthDiff}}$/, '')
|
|
165
|
+
s.next
|
|
166
|
+
|
|
167
|
+
else
|
|
168
|
+
prevIndex.next
|
|
169
|
+
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
prevDepth = depth
|
|
173
|
+
prevIndex = index
|
|
174
|
+
|
|
175
|
+
# generate a unique HTML anchor for the heading
|
|
176
|
+
anchor = CGI.unescape(
|
|
177
|
+
if atts =~ /id=('|")(.*?)\1/
|
|
178
|
+
atts = $` + $'
|
|
179
|
+
$2
|
|
180
|
+
else
|
|
181
|
+
title
|
|
182
|
+
end
|
|
183
|
+
).to_html_anchor
|
|
184
|
+
|
|
185
|
+
anchor << anchor.object_id.to_s while @@anchors.include? anchor
|
|
186
|
+
@@anchors << anchor
|
|
187
|
+
|
|
188
|
+
yield title, anchor, index, depth, atts if block_given?
|
|
189
|
+
|
|
190
|
+
# provide hyperlinks for traveling between TOC and heading
|
|
191
|
+
dst = anchor
|
|
192
|
+
src = dst.object_id.to_s.to_html_anchor
|
|
193
|
+
|
|
194
|
+
# forward link from TOC to heading
|
|
195
|
+
toc << %{<li><a id="#{src}" href="##{dst}">#{title}</a></li>}
|
|
196
|
+
|
|
197
|
+
# reverse link from heading to TOC
|
|
198
|
+
%{<h#{depth}#{atts}><a id="#{dst}" href="##{src}">#{index}</a> #{title}</h#{depth}>}
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
if prevIndex.empty?
|
|
202
|
+
toc = nil # there were no headings
|
|
203
|
+
else
|
|
204
|
+
toc << '</ul></li>' * prevDepth
|
|
205
|
+
toc << '</ul>'
|
|
206
|
+
|
|
207
|
+
# collapse redundant list elements
|
|
208
|
+
while toc.gsub! %r{(<li>.*?)</li><li>(<ul>)}, '\1\2'
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
# collapse unnecessary levels
|
|
212
|
+
while toc.gsub! %r{(<ul>)<li><ul>(.*)</ul></li>(</ul>)}, '\1\2\3'
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
[toc, text]
|
|
217
|
+
end
|
|
96
218
|
end
|
data/doc/lib/doc_proxy.rb
CHANGED
|
@@ -1,31 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
This file is part of Ruby-VPI.
|
|
5
|
-
|
|
6
|
-
Ruby-VPI is free software; you can redistribute it and/or
|
|
7
|
-
modify it under the terms of the GNU General Public License
|
|
8
|
-
as published by the Free Software Foundation; either version 2
|
|
9
|
-
of the License, or (at your option) any later version.
|
|
10
|
-
|
|
11
|
-
Ruby-VPI is distributed in the hope that it will be useful,
|
|
12
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
-
GNU General Public License for more details.
|
|
15
|
-
|
|
16
|
-
You should have received a copy of the GNU General Public License
|
|
17
|
-
along with Ruby-VPI; if not, write to the Free Software Foundation,
|
|
18
|
-
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
19
|
-
=end
|
|
1
|
+
#--
|
|
2
|
+
# Copyright 2006 Suraj N. Kurapati
|
|
3
|
+
# See the file named LICENSE for details.
|
|
20
4
|
|
|
21
5
|
require 'erb_proxy'
|
|
6
|
+
require 'doc_format'
|
|
22
7
|
|
|
23
|
-
# Processes ERB templates to produce documentation. Templates may contain
|
|
8
|
+
# Processes ERB templates to produce documentation. Templates may contain
|
|
9
|
+
# "<xref...>" tags where the ... represents the target anchor of the
|
|
10
|
+
# cross-reference.
|
|
24
11
|
class DocProxy < ErbProxy
|
|
25
12
|
Block = Struct.new :anchor, :title, :type
|
|
26
13
|
Heading = Struct.new :anchor, :title, :depth, :index
|
|
27
14
|
Index = Struct.new :name, :items
|
|
28
|
-
@@anchorNum = 0
|
|
29
15
|
|
|
30
16
|
CATEGORIES = {
|
|
31
17
|
:admonition => [:tip, :note, :important, :caution, :warning],
|
|
@@ -46,7 +32,7 @@ class DocProxy < ErbProxy
|
|
|
46
32
|
CATEGORIES[:admonition].each do |type|
|
|
47
33
|
add_block_handler :admonition, type do |index, title, text|
|
|
48
34
|
join_redcloth_elements [
|
|
49
|
-
%{!<images/#{type}.png(#{type})!},
|
|
35
|
+
%{!<images/tango/#{type}.png(#{type})!},
|
|
50
36
|
%{p(title). #{type.to_s.capitalize}: #{title}},
|
|
51
37
|
text,
|
|
52
38
|
]
|
|
@@ -63,61 +49,28 @@ class DocProxy < ErbProxy
|
|
|
63
49
|
end
|
|
64
50
|
end
|
|
65
51
|
|
|
66
|
-
# Post-processes the given ERB template result by parsing the document
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
buffer.gsub! %r{^(\s*h(\d))(.*)$} do
|
|
72
|
-
head, depth, rest = $1, $2.to_i, $3
|
|
73
|
-
|
|
74
|
-
# parse title and class attributes
|
|
75
|
-
rest =~ /^([\{\(\[].*?[\]\)\}])?\.(.*)$/
|
|
76
|
-
atts, title = $1, $2.strip
|
|
77
|
-
|
|
78
|
-
# put heading index in title
|
|
79
|
-
prevDepth = @headings.last.depth rescue 0
|
|
80
|
-
prevIndex = @headings.last.index rescue ""
|
|
81
|
-
depthDiff = (depth - prevDepth).abs
|
|
82
|
-
|
|
83
|
-
index =
|
|
84
|
-
if depth > prevDepth
|
|
85
|
-
s = prevIndex + ('.1' * depthDiff)
|
|
86
|
-
s.sub /^\./, ''
|
|
87
|
-
|
|
88
|
-
elsif depth < prevDepth
|
|
89
|
-
s = prevIndex.sub /(\.\d+){#{depthDiff}}$/, ''
|
|
90
|
-
s.next
|
|
91
|
-
|
|
92
|
-
else
|
|
93
|
-
prevIndex.next
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
rest = "#{atts}. #{index} #{title}"
|
|
97
|
-
|
|
98
|
-
# parse and insert anchor if necessary
|
|
99
|
-
if atts =~ /#(.*?)\)/
|
|
100
|
-
anchor = $1
|
|
101
|
-
else
|
|
102
|
-
anchor = "anchor#{@@anchorNum += 1}"
|
|
103
|
-
rest.insert 0, "(##{anchor})"
|
|
104
|
-
end
|
|
52
|
+
# Post-processes the given ERB template result by parsing the document
|
|
53
|
+
# structure and expanding cross-references, and returns the result.
|
|
54
|
+
def post_process aResult
|
|
55
|
+
text = aResult.to_html
|
|
56
|
+
anchors = []
|
|
105
57
|
|
|
58
|
+
# parse document structure and insert anchors (so that the table of contents
|
|
59
|
+
# can link directly to these headings) where necessary
|
|
60
|
+
toc, text = text.table_of_contents do |title, anchor, index, depth, atts|
|
|
106
61
|
@headings << Heading.new(anchor, title, depth, index)
|
|
107
62
|
@blocks[:section] << Block.new(anchor, title, :section)
|
|
108
|
-
|
|
109
|
-
head + rest
|
|
110
63
|
end
|
|
111
64
|
|
|
112
65
|
# expand cross-references into links to their targets
|
|
113
66
|
blocks = @blocks.values.flatten
|
|
114
67
|
|
|
115
|
-
|
|
68
|
+
text.gsub! %r{<xref\s*(.+?)\s*/?>} do
|
|
116
69
|
anchor = unanchor($1)
|
|
117
70
|
target = blocks.find {|b| b.anchor == anchor}
|
|
118
71
|
|
|
119
72
|
if target
|
|
120
|
-
%{"the #{target.type} named “#{target.title}&rdquo
|
|
73
|
+
%{<a href="##{target.anchor}">the #{target.type} named “#{target.title}”</a>}
|
|
121
74
|
else
|
|
122
75
|
warn "unresolved cross-reference to #{anchor}"
|
|
123
76
|
%{"#{anchor}":##{anchor}}
|
|
@@ -138,14 +91,19 @@ class DocProxy < ErbProxy
|
|
|
138
91
|
end
|
|
139
92
|
end
|
|
140
93
|
|
|
141
|
-
|
|
94
|
+
[toc, text]
|
|
142
95
|
end
|
|
143
96
|
|
|
144
|
-
# Adds a block handler for the given type of block and outputs the result in a
|
|
145
|
-
# The arguments for the block
|
|
97
|
+
# Adds a block handler for the given type of block and outputs the result in a
|
|
98
|
+
# <div> whose CSS class is the given category. The arguments for the block
|
|
99
|
+
# handler are:
|
|
100
|
+
#
|
|
146
101
|
# 1. number of the block
|
|
102
|
+
#
|
|
147
103
|
# 2. title of the block
|
|
104
|
+
#
|
|
148
105
|
# 3. content of the block
|
|
106
|
+
#
|
|
149
107
|
def add_block_handler aCategory, aType
|
|
150
108
|
raise ArgumentError unless block_given?
|
|
151
109
|
|
|
@@ -175,7 +133,8 @@ class DocProxy < ErbProxy
|
|
|
175
133
|
|
|
176
134
|
private
|
|
177
135
|
|
|
178
|
-
# Joins the given elements by putting enough white-space between them so that
|
|
136
|
+
# Joins the given elements by putting enough white-space between them so that
|
|
137
|
+
# RedCloth knows they're different elements.
|
|
179
138
|
def join_redcloth_elements *args
|
|
180
139
|
args.join("\n\n\n") << "\n\n\n"
|
|
181
140
|
end
|