ruby-vpi 7.2.0 → 7.3.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/HEADER +4 -5
- data/HISTORY +18 -2
- data/MEMO +10 -6
- data/Rakefile +11 -14
- data/bin/generate_test.rb +7 -58
- data/bin/generate_test_tpl/bench.v +15 -19
- data/bin/generate_test_tpl/design.rb +8 -8
- data/bin/generate_test_tpl/spec.rb +2 -2
- data/bin/header_to_ruby.rb +2 -27
- data/doc/xhtml/background.organization.html +1 -1
- data/doc/xhtml/index.html +2 -2
- data/header.html +3 -6
- data/header.part.html +3 -6
- data/history.html +35 -8
- data/history.part.html +32 -2
- data/lib/ruby-vpi/verilog_parser.rb +136 -0
- data/lib/ruby-vpi/vpi_util.rb +10 -0
- data/memo.html +19 -17
- data/memo.part.html +16 -11
- data/readme.html +3 -6
- 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_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/hierarchy.html +1 -1
- data/ref/c/index.html +1 -1
- data/ref/c/relay_8cin.html +1 -1
- data/ref/c/relay_8hin.html +1 -1
- data/ref/c/ruby-vpi_8c.html +1 -1
- data/ref/c/structrelay____RubyOptions____def.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/swig_8cin.html +1 -1
- data/ref/c/swig_8hin.html +1 -1
- data/ref/c/verilog_8h.html +1 -1
- data/ref/c/vlog_8cin.html +1 -1
- data/ref/c/vlog_8hin.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/{M000011.html → M000018.html} +0 -0
- data/ref/ruby/classes/FileUtils.html +10 -10
- data/ref/ruby/classes/FileUtils.src/{M000065.html → M000073.html} +0 -0
- data/ref/ruby/classes/FileUtils.src/{M000066.html → M000074.html} +0 -0
- data/ref/ruby/classes/OutputInfo.html +5 -5
- data/ref/ruby/classes/OutputInfo.src/{M000007.html → M000014.html} +37 -37
- data/ref/ruby/classes/RDoc.html +5 -5
- data/ref/ruby/classes/RDoc.src/{M000069.html → M000077.html} +0 -0
- data/ref/ruby/classes/RubyVPI.html +10 -10
- data/ref/ruby/classes/RubyVPI.src/{M000067.html → M000075.html} +0 -0
- data/ref/ruby/classes/RubyVPI.src/{M000068.html → M000076.html} +0 -0
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.html +72 -35
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000065.html +18 -0
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000066.html +18 -0
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/{M000059.html → M000067.html} +8 -8
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/{M000060.html → M000068.html} +29 -29
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/{M000061.html → M000069.html} +63 -63
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/{M000062.html → M000070.html} +106 -106
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/{M000063.html → M000071.html} +12 -12
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/{M000064.html → M000072.html} +4 -4
- data/ref/ruby/classes/String.html +27 -9
- data/ref/ruby/classes/String.src/M000016.html +41 -0
- data/ref/ruby/classes/String.src/M000017.html +18 -0
- data/ref/ruby/classes/Table.html +20 -20
- data/ref/ruby/classes/Table.src/{M000003.html → M000010.html} +0 -0
- data/ref/ruby/classes/Table.src/{M000004.html → M000011.html} +0 -0
- data/ref/ruby/classes/Table.src/{M000005.html → M000012.html} +0 -0
- data/ref/ruby/classes/Table.src/{M000006.html → M000013.html} +0 -0
- data/ref/ruby/classes/Template.html +5 -5
- data/ref/ruby/classes/Template.src/{M000010.html → M000015.html} +0 -0
- data/ref/ruby/classes/VerilogParser/Module/Parameter.html +160 -0
- data/ref/ruby/classes/VerilogParser/Module/Parameter.src/M000009.html +21 -0
- data/ref/ruby/classes/VerilogParser/Module/Port.html +207 -0
- data/ref/ruby/classes/VerilogParser/Module/Port.src/M000005.html +21 -0
- data/ref/ruby/classes/VerilogParser/Module/Port.src/M000006.html +18 -0
- data/ref/ruby/classes/VerilogParser/Module/Port.src/M000007.html +18 -0
- data/ref/ruby/classes/VerilogParser/Module/Port.src/M000008.html +18 -0
- data/ref/ruby/classes/VerilogParser/Module.html +172 -0
- data/ref/ruby/classes/VerilogParser/Module.src/M000004.html +29 -0
- data/ref/ruby/classes/{ModuleInfo.html → VerilogParser.html} +38 -50
- data/ref/ruby/classes/VerilogParser.src/M000003.html +34 -0
- data/ref/ruby/classes/XX/Document.html +45 -45
- data/ref/ruby/classes/XX/Document.src/M000056.html +9 -8
- data/ref/ruby/classes/XX/Document.src/M000057.html +7 -21
- data/ref/ruby/classes/XX/Document.src/M000058.html +7 -85
- data/ref/ruby/classes/XX/Document.src/{M000053.html → M000059.html} +0 -0
- data/ref/ruby/classes/XX/Document.src/{M000054.html → M000060.html} +0 -0
- data/ref/ruby/classes/XX/Document.src/{M000055.html → M000061.html} +0 -0
- data/ref/ruby/classes/XX/Document.src/M000062.html +21 -0
- data/ref/ruby/classes/XX/Document.src/M000063.html +34 -0
- data/ref/ruby/classes/XX/Document.src/M000064.html +98 -0
- data/ref/ruby/classes/XX/HTML4/Strict.html +5 -5
- data/ref/ruby/classes/XX/HTML4/Strict.src/{M000016.html → M000022.html} +0 -0
- data/ref/ruby/classes/XX/HTML4/Transitional.html +5 -5
- data/ref/ruby/classes/XX/HTML4/Transitional.src/{M000015.html → M000021.html} +0 -0
- data/ref/ruby/classes/XX/HTML4.html +5 -5
- data/ref/ruby/classes/XX/HTML4.src/{M000014.html → M000020.html} +0 -0
- data/ref/ruby/classes/XX/Markup/ClassMethods.html +40 -40
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000028.html +9 -14
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000029.html +7 -9
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/{M000024.html → M000030.html} +0 -0
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/{M000025.html → M000031.html} +0 -0
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/{M000026.html → M000032.html} +0 -0
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/{M000027.html → M000033.html} +0 -0
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000034.html +27 -0
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000035.html +22 -0
- data/ref/ruby/classes/XX/Markup/InstanceMethods.html +100 -100
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000036.html +43 -19
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000037.html +20 -19
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000038.html +18 -15
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000039.html +35 -10
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000040.html +7 -13
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000041.html +18 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000042.html +19 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000043.html +19 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000044.html +15 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000045.html +10 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000046.html +13 -8
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000047.html +7 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000048.html +7 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000049.html +7 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000050.html +20 -0
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000051.html +20 -0
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000052.html +21 -0
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000053.html +20 -0
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000054.html +20 -0
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000055.html +20 -0
- data/ref/ruby/classes/XX/Markup.html +5 -5
- data/ref/ruby/classes/XX/Markup.src/{M000021.html → M000027.html} +0 -0
- data/ref/ruby/classes/XX/XHTML/Strict.html +5 -5
- data/ref/ruby/classes/XX/XHTML/Strict.src/{M000020.html → M000026.html} +0 -0
- data/ref/ruby/classes/XX/XHTML/Transitional.html +5 -5
- data/ref/ruby/classes/XX/XHTML/Transitional.src/{M000019.html → M000025.html} +0 -0
- data/ref/ruby/classes/XX/XHTML.html +5 -5
- data/ref/ruby/classes/XX/XHTML.src/{M000018.html → M000024.html} +0 -0
- data/ref/ruby/classes/XX/XML.html +5 -5
- data/ref/ruby/classes/XX/XML.src/{M000013.html → M000019.html} +0 -0
- data/ref/ruby/classes/XX/XMLish.html +5 -5
- data/ref/ruby/classes/XX/XMLish.src/{M000017.html → M000023.html} +0 -0
- data/ref/ruby/created.rid +1 -1
- data/ref/ruby/files/bin/generate_test_rb.html +2 -1
- data/ref/ruby/files/bin/generate_test_rb.src/M000001.html +15 -15
- data/ref/ruby/files/bin/header_to_ruby_rb.html +2 -1
- data/ref/ruby/files/lib/ruby-vpi/erb_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 +1 -1
- data/ref/ruby/files/lib/ruby-vpi/verilog_parser_rb.html +107 -0
- data/ref/ruby/files/lib/ruby-vpi/vpi_util_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 +4 -1
- data/ref/ruby/fr_file_index.html +1 -0
- data/ref/ruby/fr_method_index.html +75 -67
- data/samp/counter/counter_rspecTest_bench.v +4 -5
- data/samp/counter/counter_unitTest_bench.v +6 -5
- data/samp/pipelined_alu/Hw5UnitModel.rb +4 -4
- data/samp/pipelined_alu/hw5_unit.v +15 -23
- data/samp/pipelined_alu/hw5_unit_test_bench.rb +9 -0
- data/samp/pipelined_alu/hw5_unit_test_bench.v +39 -0
- data/samp/pipelined_alu/hw5_unit_test_design.rb +88 -0
- data/samp/pipelined_alu/hw5_unit_test_proto.rb +8 -0
- data/samp/pipelined_alu/hw5_unit_test_runner.rake +28 -0
- data/samp/pipelined_alu/hw5_unit_test_spec.rb +88 -0
- metadata +82 -63
- data/ref/ruby/classes/ModuleInfo.src/M000008.html +0 -44
- data/ref/ruby/classes/ModuleInfo.src/M000009.html +0 -26
- data/ref/ruby/classes/String.src/M000012.html +0 -37
- data/ref/ruby/classes/XX/Document.src/M000050.html +0 -22
- data/ref/ruby/classes/XX/Document.src/M000051.html +0 -20
- data/ref/ruby/classes/XX/Document.src/M000052.html +0 -20
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000022.html +0 -22
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000023.html +0 -20
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000030.html +0 -56
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000031.html +0 -33
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000032.html +0 -31
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000033.html +0 -48
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000034.html +0 -20
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000035.html +0 -31
- data/samp/pipelined_alu/hw5_unit_bench.rb +0 -8
- data/samp/pipelined_alu/hw5_unit_bench.v +0 -45
- data/samp/pipelined_alu/hw5_unit_design.rb +0 -18
- data/samp/pipelined_alu/hw5_unit_runner.rake +0 -10
- data/samp/pipelined_alu/hw5_unit_spec.rb +0 -123
data/HEADER
CHANGED
|
@@ -8,12 +8,11 @@ Ruby-VPI is a "Ruby interface":http://ruby-lang.org to "Verilog VPI":http://ieee
|
|
|
8
8
|
|
|
9
9
|
h2. Features
|
|
10
10
|
|
|
11
|
-
*
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
** Reuse the _same_ specification to verify both prototype and design.
|
|
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
|
+
* 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>.)
|
|
13
|
+
* Reuse the _same_ specification to verify both prototype and design.
|
|
15
14
|
|
|
16
|
-
* Utilize Ruby's power and elegance ("Why choose Ruby?":http://www.ruby-doc.org/whyruby)
|
|
15
|
+
* Utilize Ruby's power and elegance. ("Why choose Ruby?":http://www.ruby-doc.org/whyruby)
|
|
17
16
|
** Built-in support for unlimited length integers, regular expressions, networking, multi-threading, system calls, _ad infinium_!
|
|
18
17
|
** Easy to use; doesn't get in your way.
|
|
19
18
|
** Makes programming _fun_ again!
|
data/HISTORY
CHANGED
|
@@ -5,13 +5,29 @@ This is a record of important changes that have occurred with each release of "R
|
|
|
5
5
|
h2. Version numbering system
|
|
6
6
|
|
|
7
7
|
We _strictly_ follow the RubyGems project's "rational versioning policy":http://www.rubygems.org/read/chapter/7 since release 6.3.0. To summarize[1] this "major.minor.build" numbering policy,
|
|
8
|
-
* an increase in the _major_ number indicates that _functionally incompatible_ have occurred. Thus, what may have worked in the previous version may not work in the new one.
|
|
8
|
+
* an increase in the _major_ number indicates that _functionally incompatible_ changes have occurred. Thus, what may have worked in the previous version may not work in the new one.
|
|
9
9
|
* an increase in the _minor_ number indicates that _functionally compatible_ changes have occurred. Thus, what worked in the previous version will work in the new one.
|
|
10
10
|
* an increase in the _build_ number indicates that the _underlying implementation_ has changed. The functionality has not changed and no features have been added. Thus, what worked in the previous version will work in the new one.
|
|
11
11
|
|
|
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 7.3.0 (2006-09-30)
|
|
16
|
+
|
|
17
|
+
h2. Summary
|
|
18
|
+
|
|
19
|
+
This release fixes a bug in generated Verilog benches and adds parsed constants to generated Verilog benches and Ruby designs.
|
|
20
|
+
|
|
21
|
+
h2. Details
|
|
22
|
+
|
|
23
|
+
* Module instantiation code in generated Verilog benches has been fixed. Whitespace between the module type and instance variable was missing.
|
|
24
|
+
|
|
25
|
+
* The test generator tool now provides parsed Verilog constants and include-directives in generated Verilog benches; and parsed Verilog constants in generated Ruby designs.
|
|
26
|
+
** The pipelined ALU example has been revised accordingly.
|
|
27
|
+
|
|
28
|
+
* A library for parsing Verilog source code has been added as @lib/ruby-vpi/verilog_parser.rb@.
|
|
29
|
+
|
|
30
|
+
|
|
15
31
|
h1. Version 7.2.0 (2006-09-15)
|
|
16
32
|
|
|
17
33
|
h2. Summary
|
|
@@ -432,6 +448,6 @@ This is Kazuhiro HIWADA's initial testing release of Ruby-VPI. See its "original
|
|
|
432
448
|
|
|
433
449
|
h2. Details
|
|
434
450
|
|
|
435
|
-
* Added ability to relay control from Verilog test bench to Ruby (using @$ruby_callback@) and vice versa (using @PLI::
|
|
451
|
+
* Added ability to relay control from Verilog test bench to Ruby (using @$ruby_callback@) and vice versa (using @PLI::relay_Verilog@).
|
|
436
452
|
|
|
437
453
|
* Tested and developed using Ruby 1.4 and Verilog-XL from Cadence systems, on a SPARC machine running Solaris 2.6.
|
data/MEMO
CHANGED
|
@@ -2,21 +2,20 @@ h1. Notes
|
|
|
2
2
|
|
|
3
3
|
* When within Rake, rubygems is automatically available for use. no need to require() it again
|
|
4
4
|
|
|
5
|
+
|
|
5
6
|
h1. Pending tasks
|
|
6
7
|
|
|
7
|
-
*
|
|
8
|
+
* add support for reading & writing vpi_delay values
|
|
8
9
|
|
|
9
10
|
* define handled methods in Vpi::method_missing for faster response
|
|
10
11
|
** this has been verified as bottleneck from profiling data
|
|
11
12
|
|
|
12
|
-
* file bug report for Icarus 0.8 (l0_dcache)
|
|
13
|
-
** try new icarus snapshot
|
|
14
|
-
|
|
15
13
|
* GHDL simulator supports VPI
|
|
16
14
|
** need way to invoke VPI tasks from VHDL, like @$ruby_init();@
|
|
17
15
|
|
|
18
16
|
* smarter test generation, which adjusts to user modifications in previously generated output
|
|
19
17
|
|
|
18
|
+
|
|
20
19
|
h1. Finished tasks
|
|
21
20
|
|
|
22
21
|
* add support for ESL prototyping (like SystemC)
|
|
@@ -27,12 +26,17 @@ h1. Finished tasks
|
|
|
27
26
|
|
|
28
27
|
* add support for GPL Cver in the test runner template
|
|
29
28
|
|
|
30
|
-
* build ruby-vpi once to generate all
|
|
29
|
+
* build ruby-vpi once to generate all .so files
|
|
31
30
|
** test runner should not rebuild ruby-vpi every time
|
|
32
31
|
|
|
33
32
|
* distribute as a GEM, binary, and source
|
|
34
33
|
** use RUBYLIB to bypass rubygems site installation for local testing. otherwise have to build & install gem _every_ time!
|
|
35
|
-
**
|
|
34
|
+
** move stuff from lib/ into lib/ruby-vpi/
|
|
35
|
+
|
|
36
|
+
* integrate RCov for code-coverage statistics
|
|
37
|
+
|
|
36
38
|
|
|
37
39
|
h1. Obsolete tasks
|
|
38
40
|
|
|
41
|
+
* file bug report for Icarus 0.8 (l0_dcache)
|
|
42
|
+
** try new icarus snapshot
|
data/Rakefile
CHANGED
|
@@ -36,6 +36,7 @@ PROJECT_DETAIL = "#{PROJECT_NAME} is a #{PROJECT_SUMMARY}. It lets you create co
|
|
|
36
36
|
PROJECT_SSH_URL = "snk@rubyforge.org:/var/www/gforge-projects/#{PROJECT_ID}"
|
|
37
37
|
|
|
38
38
|
|
|
39
|
+
|
|
39
40
|
# Returns a temporary, unique path ready for use. No file exists at the returned path.
|
|
40
41
|
def generate_temp_path
|
|
41
42
|
rm_f path = Tempfile.new($$).path
|
|
@@ -62,6 +63,7 @@ def upload_without_svn aDestUrl, *aSources
|
|
|
62
63
|
end
|
|
63
64
|
|
|
64
65
|
|
|
66
|
+
|
|
65
67
|
task :default => :build
|
|
66
68
|
|
|
67
69
|
task :clobber do |t|
|
|
@@ -76,9 +78,7 @@ end
|
|
|
76
78
|
|
|
77
79
|
|
|
78
80
|
|
|
79
|
-
##
|
|
80
|
-
# extension
|
|
81
|
-
#
|
|
81
|
+
## extension
|
|
82
82
|
|
|
83
83
|
desc "Builds object files for all simulators."
|
|
84
84
|
task :build
|
|
@@ -127,9 +127,7 @@ end
|
|
|
127
127
|
|
|
128
128
|
|
|
129
129
|
|
|
130
|
-
##
|
|
131
|
-
# documentation
|
|
132
|
-
#
|
|
130
|
+
## documentation
|
|
133
131
|
|
|
134
132
|
desc 'Generate documentation.'
|
|
135
133
|
task 'doc' => 'ref' do |t|
|
|
@@ -177,9 +175,7 @@ end
|
|
|
177
175
|
|
|
178
176
|
|
|
179
177
|
|
|
180
|
-
##
|
|
181
|
-
# distribution
|
|
182
|
-
#
|
|
178
|
+
## distribution
|
|
183
179
|
|
|
184
180
|
DIST_INFO_HEADER = 'HEADER'
|
|
185
181
|
|
|
@@ -270,7 +266,7 @@ task :pkg => ['HISTORY', 'gem_extconf.rb'] do |t|
|
|
|
270
266
|
|
|
271
267
|
s.files = FileList['**/*']
|
|
272
268
|
s.autorequire = PROJECT_ID
|
|
273
|
-
s.executables = FileList['bin/*'].select {|f| File.executable?(f) && File.file?(f)}.map {|f| File.basename f}
|
|
269
|
+
s.executables = FileList['bin/*'].select {|f| File.executable?( f ) && File.file?( f )}.map {|f| File.basename f}
|
|
274
270
|
s.extensions << t.prerequisites[1]
|
|
275
271
|
end
|
|
276
272
|
|
|
@@ -286,7 +282,7 @@ end
|
|
|
286
282
|
|
|
287
283
|
desc "Configures the gem during installation."
|
|
288
284
|
task :config_gem_install => 'readme.html' do |t|
|
|
289
|
-
#
|
|
285
|
+
# make documentation available to gem_server
|
|
290
286
|
gemDir = File.dirname(__FILE__)
|
|
291
287
|
gemName = File.basename(gemDir)
|
|
292
288
|
docDir = File.join('..', '..', 'doc', gemName)
|
|
@@ -300,12 +296,13 @@ end
|
|
|
300
296
|
|
|
301
297
|
|
|
302
298
|
|
|
303
|
-
##
|
|
304
|
-
# testing
|
|
305
|
-
#
|
|
299
|
+
## testing
|
|
306
300
|
|
|
307
301
|
desc "Ensure that examples work with $SIMULATOR"
|
|
308
302
|
task :test => :build do
|
|
303
|
+
# ensures that current sources are tested instead of the installed gem
|
|
304
|
+
ENV['RUBYLIB'] = File.join(File.dirname(__FILE__), 'lib')
|
|
305
|
+
|
|
309
306
|
FileList['samp/*/'].each do |s|
|
|
310
307
|
cd s do
|
|
311
308
|
sh 'rake', ENV['SIMULATOR'] || 'cver'
|
data/bin/generate_test.rb
CHANGED
|
@@ -42,6 +42,7 @@
|
|
|
42
42
|
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
43
43
|
=end
|
|
44
44
|
|
|
45
|
+
require 'ruby-vpi/verilog_parser'
|
|
45
46
|
|
|
46
47
|
|
|
47
48
|
require 'fileutils'
|
|
@@ -63,7 +64,6 @@ def write_file aPath, aContent
|
|
|
63
64
|
end
|
|
64
65
|
|
|
65
66
|
|
|
66
|
-
|
|
67
67
|
require 'ruby-vpi/erb'
|
|
68
68
|
|
|
69
69
|
# Template used for generating output.
|
|
@@ -77,56 +77,6 @@ end
|
|
|
77
77
|
|
|
78
78
|
|
|
79
79
|
|
|
80
|
-
# Holds information about a parsed Verilog module.
|
|
81
|
-
class ModuleInfo
|
|
82
|
-
attr_reader :name, :portNames, :paramNames, :portDecls, :paramDecls, :inputPortNames
|
|
83
|
-
|
|
84
|
-
def initialize aDecl
|
|
85
|
-
aDecl =~ %r{module\s+(\w+)\s*(\#\((.*?)\))?\s*\((.*?)\)\s*;}m
|
|
86
|
-
@name, paramDecl, portDecl = $1, $3 || '', $4
|
|
87
|
-
|
|
88
|
-
# parse configuration parameters
|
|
89
|
-
paramDecl.gsub! %r{\bparameter\b}, ''
|
|
90
|
-
paramDecl.strip!
|
|
91
|
-
|
|
92
|
-
@paramDecls = paramDecl.split(/,/)
|
|
93
|
-
|
|
94
|
-
@paramNames = paramDecls.inject([]) do |acc, decl|
|
|
95
|
-
acc << decl.scan(%r{\w+}).first
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
# parse signal parameters
|
|
99
|
-
portDecl.gsub! %r{\breg\b}, ''
|
|
100
|
-
portDecl.strip!
|
|
101
|
-
|
|
102
|
-
@portDecls = portDecl.split(/,/)
|
|
103
|
-
|
|
104
|
-
@inputPortNames = []
|
|
105
|
-
|
|
106
|
-
@portNames = portDecls.inject([]) do |acc, decl|
|
|
107
|
-
name = decl.scan(%r{\w+}).last
|
|
108
|
-
@inputPortNames << name if decl =~ /\binput\b/
|
|
109
|
-
|
|
110
|
-
acc << name
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
# Parses and returns Verilog 2001 module declarations from the given input.
|
|
115
|
-
def self.parse_declarations aInput
|
|
116
|
-
input = aInput.dup
|
|
117
|
-
|
|
118
|
-
# remove single-line comments
|
|
119
|
-
input.gsub! %r{//.*$}, ''
|
|
120
|
-
|
|
121
|
-
# remove multi-line comments
|
|
122
|
-
input.gsub! %r{/\*.*?\*/}m, ''
|
|
123
|
-
|
|
124
|
-
input.scan %r{module.*?;}m
|
|
125
|
-
end
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
80
|
# Holds information about the output destinations of a parsed Verilog module.
|
|
131
81
|
class OutputInfo
|
|
132
82
|
RUBY_EXT = '.rb'
|
|
@@ -168,9 +118,9 @@ class OutputInfo
|
|
|
168
118
|
@specName = aModuleName + @specSuffix
|
|
169
119
|
@specPath = @specName + RUBY_EXT
|
|
170
120
|
|
|
171
|
-
@designClassName = aModuleName.
|
|
121
|
+
@designClassName = aModuleName.to_ruby_const_name
|
|
172
122
|
@protoClassName = @designClassName + 'Proto'
|
|
173
|
-
@specClassName = @specName.
|
|
123
|
+
@specClassName = @specName.to_ruby_const_name
|
|
174
124
|
|
|
175
125
|
@runnerName = aModuleName + @runnerSuffix
|
|
176
126
|
@runnerPath = @runnerName + RUNNER_EXT
|
|
@@ -224,16 +174,15 @@ if File.basename($0) == File.basename(__FILE__)
|
|
|
224
174
|
puts "Using #{optSpecFmt} specification format."
|
|
225
175
|
|
|
226
176
|
|
|
227
|
-
|
|
228
|
-
puts
|
|
177
|
+
v = VerilogParser.new(ARGF.read)
|
|
229
178
|
|
|
230
|
-
|
|
231
|
-
puts "Parsed module: #{m.name}"
|
|
179
|
+
v.modules.each do |m|
|
|
180
|
+
puts '', "Parsed module: #{m.name}"
|
|
232
181
|
|
|
233
182
|
o = OutputInfo.new(m.name, optSpecFmt, optTestName, File.dirname(File.dirname(__FILE__))).freeze
|
|
234
183
|
|
|
235
184
|
# generate output
|
|
236
|
-
aModuleInfo, aOutputInfo = m, o
|
|
185
|
+
aParseInfo, aModuleInfo, aOutputInfo = v, m, o
|
|
237
186
|
|
|
238
187
|
write_file o.runnerPath, RUNNER_TEMPLATE.result(binding)
|
|
239
188
|
puts "- Generated runner: #{o.runnerPath}"
|
|
@@ -1,39 +1,35 @@
|
|
|
1
1
|
<%
|
|
2
2
|
# Returns a comma-separated string of parameter declarations in Verilog module instantiation format.
|
|
3
|
-
def make_inst_param_decl
|
|
4
|
-
|
|
3
|
+
def make_inst_param_decl aParams
|
|
4
|
+
aParams.map do |param|
|
|
5
|
+
".#{param.name}(#{param.name})"
|
|
6
|
+
end.join(', ')
|
|
5
7
|
end
|
|
6
8
|
|
|
7
|
-
clockSignal = aModuleInfo.
|
|
9
|
+
clockSignal = aModuleInfo.ports.first.name
|
|
8
10
|
%>
|
|
9
11
|
/* This is the Verilog side of the bench. */
|
|
10
12
|
|
|
13
|
+
<%= (aParseInfo.includes + aParseInfo.constants).map {|v| v.decl}.join "\n" %>
|
|
14
|
+
|
|
11
15
|
module <%= aOutputInfo.verilogBenchName %>;
|
|
12
16
|
|
|
13
17
|
// instantiate the design under test
|
|
14
|
-
<% aModuleInfo.
|
|
15
|
-
|
|
18
|
+
<% aModuleInfo.parameters.each do |param| %>
|
|
19
|
+
<%= param.decl %>;
|
|
20
|
+
<% end %>
|
|
21
|
+
<% aModuleInfo.ports.each do |port| %>
|
|
22
|
+
<%= port.input? ? 'reg' : 'wire' %> <%= port.size %> <%= port.name %>;
|
|
16
23
|
<% end %>
|
|
17
24
|
|
|
18
|
-
<%
|
|
19
|
-
|
|
20
|
-
{ 'input' => 'reg', 'output' => 'wire' }.each_pair do |key, val|
|
|
21
|
-
decl.sub! %r{\b#{key}\b(.*?)$}, "#{val}\\1;"
|
|
22
|
-
end
|
|
23
|
-
%>
|
|
24
|
-
<%= decl.strip %>
|
|
25
|
-
<%
|
|
26
|
-
end
|
|
27
|
-
%>
|
|
28
|
-
|
|
29
|
-
<%= aModuleInfo.name %><%
|
|
30
|
-
instConfigDecl = make_inst_param_decl(aModuleInfo.paramNames)
|
|
25
|
+
<%= aModuleInfo.name %> <%
|
|
26
|
+
instConfigDecl = make_inst_param_decl(aModuleInfo.parameters)
|
|
31
27
|
|
|
32
28
|
unless instConfigDecl.empty?
|
|
33
29
|
%>#(<%= instConfigDecl %>)<%
|
|
34
30
|
end
|
|
35
31
|
|
|
36
|
-
%><%= aOutputInfo.verilogBenchName
|
|
32
|
+
%><%= aOutputInfo.verilogBenchName %>_design(<%= make_inst_param_decl(aModuleInfo.ports) %>);
|
|
37
33
|
|
|
38
34
|
// connect to the Ruby side of this bench
|
|
39
35
|
initial begin
|
|
@@ -2,25 +2,25 @@
|
|
|
2
2
|
class <%= aOutputInfo.designClassName %>
|
|
3
3
|
include Vpi
|
|
4
4
|
|
|
5
|
-
<% aModuleInfo.
|
|
6
|
-
<%=
|
|
5
|
+
<% (aParseInfo.constants + aModuleInfo.parameters).each do |var| %>
|
|
6
|
+
<%= var.name.to_ruby_const_name %> = <%= var.value.verilog_to_ruby %>
|
|
7
7
|
<% end %>
|
|
8
8
|
|
|
9
9
|
attr_reader <%=
|
|
10
|
-
aModuleInfo.
|
|
11
|
-
|
|
10
|
+
aModuleInfo.ports.map do |port|
|
|
11
|
+
":#{port.name}"
|
|
12
12
|
end.join(', ')
|
|
13
13
|
%>
|
|
14
14
|
|
|
15
15
|
def initialize
|
|
16
|
-
<% aModuleInfo.
|
|
17
|
-
@<%= port %> = vpi_handle_by_name("<%= aOutputInfo.verilogBenchName %>.<%= port %>", nil)
|
|
16
|
+
<% aModuleInfo.ports.each do |port| %>
|
|
17
|
+
@<%= port.name %> = vpi_handle_by_name("<%= aOutputInfo.verilogBenchName %>.<%= port.name %>", nil)
|
|
18
18
|
<% end %>
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def reset!
|
|
22
|
-
<% aModuleInfo.
|
|
23
|
-
@<%= port %>.hexStrVal = 'x'
|
|
22
|
+
<% aModuleInfo.ports.select { |p| p.input? }[1..-1].each do |port| %>
|
|
23
|
+
@<%= port.name %>.hexStrVal = 'x'
|
|
24
24
|
<% end %>
|
|
25
25
|
end
|
|
26
26
|
end
|
|
@@ -10,9 +10,9 @@ class <%= aOutputInfo.specClassName %> < Test::Unit::TestCase
|
|
|
10
10
|
def setup
|
|
11
11
|
@design = <%= aOutputInfo.designClassName %>.new
|
|
12
12
|
end
|
|
13
|
-
<% aModuleInfo.
|
|
13
|
+
<% aModuleInfo.ports.each do |port| %>
|
|
14
14
|
|
|
15
|
-
def test_<%=
|
|
15
|
+
def test_<%= port.name %>
|
|
16
16
|
end
|
|
17
17
|
<% end %>
|
|
18
18
|
end
|
data/bin/header_to_ruby.rb
CHANGED
|
@@ -23,32 +23,6 @@
|
|
|
23
23
|
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
24
24
|
=end
|
|
25
25
|
|
|
26
|
-
class String
|
|
27
|
-
# Converts this Verilog header content into Ruby syntax.
|
|
28
|
-
def to_ruby
|
|
29
|
-
content = self.dup
|
|
30
|
-
|
|
31
|
-
# remove single-line comments
|
|
32
|
-
content.gsub! %r{//(.*)$}, '#\1'
|
|
33
|
-
|
|
34
|
-
# remove multi-line comments
|
|
35
|
-
content.gsub! %r{/\*.*?\*/}m, "\n=begin\n\\0\n=end\n"
|
|
36
|
-
|
|
37
|
-
# remove preprocessor directives
|
|
38
|
-
content.gsub! %r{`include}, '#\0'
|
|
39
|
-
content.gsub! %r{`define\s+(\w+)\s+(.+)}, '\1 = \2'
|
|
40
|
-
content.gsub! %r{`+}, ''
|
|
41
|
-
|
|
42
|
-
# change numbers
|
|
43
|
-
content.gsub! %r{\d*\'([dohb]\w+)}, '0\1'
|
|
44
|
-
|
|
45
|
-
# change ranges
|
|
46
|
-
content.gsub! %r{(\S)\s*:\s*(\S)}, '\1..\2'
|
|
47
|
-
|
|
48
|
-
content
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
26
|
if File.basename($0) == File.basename(__FILE__)
|
|
53
27
|
# parse command-line options
|
|
54
28
|
require 'optparse'
|
|
@@ -66,5 +40,6 @@ if File.basename($0) == File.basename(__FILE__)
|
|
|
66
40
|
|
|
67
41
|
opts.parse! ARGV
|
|
68
42
|
|
|
69
|
-
|
|
43
|
+
require 'ruby-vpi/verilog_parser'
|
|
44
|
+
puts ARGF.read.verilog_to_ruby
|
|
70
45
|
end
|
|
@@ -7,4 +7,4 @@
|
|
|
7
7
|
<span class="type">va_list</span> *<code class="varname">p</code> = &<code class="varname">ap</code>;
|
|
8
8
|
}
|
|
9
9
|
</pre></li></ul></div><p>
|
|
10
|
-
</p><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="organization.vpi.util"></a><span class="acronym">VPI</span> utility layer</h4></div></div></div><p>From a user's perspective, the <span class="acronym">VPI</span> utility layer greatly enhances the ability to interact with handles. One simply invokes a handle's methods, which are carefully named in the following manner, to access its <span class="acronym">VPI</span> properties.</p><div class="table"><a id="table..handle-property-accessor-naming-format"></a><p class="title"><b>Table 2.1. Naming format for accessing a handle's <span class="acronym">VPI</span> properties</b></p><table summary="Naming format for accessing a handle's VPI properties" border="1"><colgroup><col /><col /><col /><col /><col /><col /></colgroup><thead><tr><th>Operation</th><th>_</th><th>Property</th><th>_</th><th>Accessor</th><th>Addendum</th></tr></thead><tbody><tr><td colspan="2">optional</td><td>required</td><td colspan="2">optional</td><td>optional</td></tr></tbody></table></div><div class="variablelist"><dl><dt><span class="term">Operation</span></dt><dd><p>This parameter suggests a method that should be invoked in the context of the Property parameter.</p></dd><dt><span class="term">Property</span></dt><dd><p>This parameter suggests which <span class="acronym">VPI</span> property should be accessed. The first letter of this parameter's value should be lower case, and the <span class="emphasis"><em>vpi</em></span> prefix—common to all <span class="acronym">VPI</span> properties—can be omitted.</p><p>For example, the <span class="acronym">VPI</span> property <span class="emphasis"><em>vpiFullName</em></span> is considered equivalent to <span class="emphasis"><em>fullName</em></span> but not equivalent to either <span class="emphasis"><em>FullName</em></span> or <span class="emphasis"><em>full_name</em></span>.</p></dd><dt><span class="term">Accessor</span></dt><dd><p>This parameter suggests which <span class="acronym">VPI</span> function should be used to access the <span class="acronym">VPI</span> property. When this parameter is not specified, the <span class="acronym">VPI</span> utility layer will attempt to <span class="emphasis"><em>guess</em></span> the value of this parameter (<a href="../../ref/ruby/classes/SWIG/TYPE_p_unsigned_int.html" target="_top">see the source code</a> of the <code class="code"><code class="constant">SWIG</code>::<code class="constant">TYPE_p_unsigned_int</code>#<code class="function">method_missing</code></code> method for details).</p><div class="table"><a id="id2482977"></a><p class="title"><b>Table 2.2. Possible accessors and their implications</b></p><table summary="Possible accessors and their implications" border="1"><colgroup></colgroup><thead><tr><th>Accessor</th><th>Kind of value accessed</th><th><span class="acronym">VPI</span> functions used to access the value</th></tr></thead><tbody><tr><td>d</td><td>delay</td><td><code class="function">vpi_get_delays</code>, <code class="function">vpi_put_delays</code></td></tr><tr><td>l</td><td>logic</td><td><code class="function">vpi_get_value</code>, <code class="function">vpi_put_value</code></td></tr><tr><td>i</td><td>integer</td><td><code class="function">vpi_get</code></td></tr><tr><td>b</td><td>boolean</td><td><code class="function">vpi_get</code></td></tr><tr><td>s</td><td>string</td><td><code class="function">vpi_get_str</code></td></tr><tr><td>h</td><td>handle</td><td><code class="function">vpi_handle</code></td></tr></tbody></table></div></dd><dt><span class="term">Addendum</span></dt><dd><p>When this parameter is a question mark (<span class="emphasis"><em>?</em></span>), it suggests that the specified <span class="acronym">VPI</span> property should be queried as a boolean value. This produces the same effect as specifying <span class="emphasis"><em>b</em></span> for the Accessor parameter.</p><p>When this parameter is an equal sign (<span class="emphasis"><em>=</em></span>), it suggests that the specified <span class="acronym">VPI</span> property should be written to.</p></dd></dl></div><div class="example"><a id="ex..handle-property-accessor-naming-format"></a><p class="title"><b>Example 2.1. Accessing a handle's <span class="acronym">VPI</span> properties</b></p><div class="informaltable"><table border="1"><colgroup><col /><col /><col /><col /><col /><col /></colgroup><thead><tr><th rowspan="2">Ruby expression</th><th colspan="6">Naming format</th><th rowspan="2">Description</th></tr><tr><th>Operation</th><th>_</th><th>Property</th><th>_</th><th>Accessor</th><th>Addendum</th></tr></thead><tbody><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">each_vpiNet</code> {|<code class="varname">net</code>| <code class="function">puts</code> <code class="varname">net</code>.<code class="function">fullName</code>}</code></td><td>each</td><td>_</td><td>vpiNet</td><td> </td><td> </td><td> </td><td rowspan="2">These expressions print the full name of each <code class="constant">vpiNet</code> object associated with the handle.</td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">each_net</code> {|<code class="varname">net</code>| <code class="function">puts</code> <code class="varname">net</code>.<code class="function">fullName</code>}</code></td><td>each</td><td>_</td><td>net</td><td> </td><td> </td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiIntVal</code></code></td><td> </td><td> </td><td>vpiIntVal</td><td> </td><td> </td><td> </td><td rowspan="4">These expressions access the logic value of the handle's <code class="constant">vpiIntVal</code> property.</td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiIntVal_l</code></code></td><td> </td><td> </td><td>vpiIntVal</td><td>_</td><td>l</td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">intVal</code></code></td><td> </td><td> </td><td>intVal</td><td> </td><td> </td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">intVal_l</code></code></td><td> </td><td> </td><td>intVal</td><td>_</td><td>l</td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiIntVal</code> = <code class="literal">15</code></code></td><td> </td><td> </td><td>vpiIntVal</td><td> </td><td> </td><td>=</td><td rowspan="4">These expressions assign the number 15 to the logic value of the handle's <code class="constant">vpiIntVal</code> property.</td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiIntVal_l</code> = <code class="literal">15</code></code></td><td> </td><td> </td><td>vpiIntVal</td><td>_</td><td>l</td><td>=</td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">intVal</code> = <code class="literal">15</code></code></td><td> </td><td> </td><td>intVal</td><td> </td><td> </td><td>=</td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">intVal</code>_l = <code class="literal">15</code></code></td><td> </td><td> </td><td>intVal</td><td>_</td><td>l</td><td>=</td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiType</code></code></td><td> </td><td> </td><td>vpiType</td><td> </td><td> </td><td> </td><td rowspan="4">These expressions access the integer value of the handle's <code class="constant">vpiType</code> property.</td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiType_i</code></code></td><td> </td><td> </td><td>vpiType</td><td>_</td><td>i</td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">type</code></code></td><td> </td><td> </td><td>type</td><td> </td><td> </td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">type_i</code></code></td><td> </td><td> </td><td>type</td><td>_</td><td>i</td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiProtected</code></code></td><td> </td><td> </td><td>vpiProtected</td><td> </td><td> </td><td> </td><td rowspan="6">These expressions access the boolean value of the handle's <code class="constant">vpiProtected</code> property.</td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiProtected_b</code></code></td><td> </td><td> </td><td>vpiProtected</td><td>_</td><td>b</td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiProtected?</code></code></td><td> </td><td> </td><td>vpiProtected</td><td> </td><td> </td><td>?</td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">protected</code></code></td><td> </td><td> </td><td>protected</td><td> </td><td> </td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">protected_b</code></code></td><td> </td><td> </td><td>protected</td><td>_</td><td>b</td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">protected?</code></code></td><td> </td><td> </td><td>protected</td><td> </td><td> </td><td>?</td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiFullName</code></code></td><td> </td><td> </td><td>vpiFullName</td><td> </td><td> </td><td> </td><td rowspan="4">These expressions access the string value of the handle's <code class="constant">vpiFullName</code> property.</td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiFullName_s</code></code></td><td> </td><td> </td><td>vpiFullName</td><td>_</td><td>s</td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">fullName</code></code></td><td> </td><td> </td><td>fullName</td><td> </td><td> </td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">fullName_s</code></code></td><td> </td><td> </td><td>fullName</td><td>_</td><td>s</td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiParent</code></code></td><td> </td><td> </td><td>vpiParent</td><td> </td><td> </td><td> </td><td rowspan="4">These expressions access the handle value of the handle's <code class="constant">vpiParent</code> property.</td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiParent_h</code></code></td><td> </td><td> </td><td>vpiParent</td><td>_</td><td>h</td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">parent</code></code></td><td> </td><td> </td><td>parent</td><td> </td><td> </td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">parent_h</code></code></td><td> </td><td> </td><td>parent</td><td>_</td><td>h</td><td> </td></tr></tbody></table></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="background.terminology.html"><img src="images/prev.png" alt="Prev" /></a> </td><td width="20%" align="center"><a accesskey="u" href="background.html"><img src="images/up.png" alt="Up" /></a></td><td width="40%" align="right"> <a accesskey="n" href="background.running-tests.html"><img src="images/next.png" alt="Next" /></a></td></tr><tr><td width="40%" align="left" valign="top">Terminology </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home" /></a></td><td width="40%" align="right" valign="top"> Running a test</td></tr></table></div></body></html>
|
|
10
|
+
</p><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="organization.vpi.util"></a><span class="acronym">VPI</span> utility layer</h4></div></div></div><p>From a user's perspective, the <span class="acronym">VPI</span> utility layer greatly enhances the ability to interact with handles. One simply invokes a handle's methods, which are carefully named in the following manner, to access its <span class="acronym">VPI</span> properties.</p><div class="table"><a id="table..handle-property-accessor-naming-format"></a><p class="title"><b>Table 2.1. Naming format for accessing a handle's <span class="acronym">VPI</span> properties</b></p><table summary="Naming format for accessing a handle's VPI properties" border="1"><colgroup><col /><col /><col /><col /><col /><col /></colgroup><thead><tr><th>Operation</th><th>_</th><th>Property</th><th>_</th><th>Accessor</th><th>Addendum</th></tr></thead><tbody><tr><td colspan="2">optional</td><td>required</td><td colspan="2">optional</td><td>optional</td></tr></tbody></table></div><div class="variablelist"><dl><dt><span class="term">Operation</span></dt><dd><p>This parameter suggests a method that should be invoked in the context of the Property parameter.</p></dd><dt><span class="term">Property</span></dt><dd><p>This parameter suggests which <span class="acronym">VPI</span> property should be accessed. The first letter of this parameter's value should be lower case, and the <span class="emphasis"><em>vpi</em></span> prefix—common to all <span class="acronym">VPI</span> properties—can be omitted.</p><p>For example, the <span class="acronym">VPI</span> property <span class="emphasis"><em>vpiFullName</em></span> is considered equivalent to <span class="emphasis"><em>fullName</em></span> but not equivalent to either <span class="emphasis"><em>FullName</em></span> or <span class="emphasis"><em>full_name</em></span>.</p></dd><dt><span class="term">Accessor</span></dt><dd><p>This parameter suggests which <span class="acronym">VPI</span> function should be used to access the <span class="acronym">VPI</span> property. When this parameter is not specified, the <span class="acronym">VPI</span> utility layer will attempt to <span class="emphasis"><em>guess</em></span> the value of this parameter (<a href="../../ref/ruby/classes/SWIG/TYPE_p_unsigned_int.html" target="_top">see the source code</a> of the <code class="code"><code class="constant">SWIG</code>::<code class="constant">TYPE_p_unsigned_int</code>#<code class="function">method_missing</code></code> method for details).</p><div class="table"><a id="id2482976"></a><p class="title"><b>Table 2.2. Possible accessors and their implications</b></p><table summary="Possible accessors and their implications" border="1"><colgroup></colgroup><thead><tr><th>Accessor</th><th>Kind of value accessed</th><th><span class="acronym">VPI</span> functions used to access the value</th></tr></thead><tbody><tr><td>d</td><td>delay</td><td><code class="function">vpi_get_delays</code>, <code class="function">vpi_put_delays</code></td></tr><tr><td>l</td><td>logic</td><td><code class="function">vpi_get_value</code>, <code class="function">vpi_put_value</code></td></tr><tr><td>i</td><td>integer</td><td><code class="function">vpi_get</code></td></tr><tr><td>b</td><td>boolean</td><td><code class="function">vpi_get</code></td></tr><tr><td>s</td><td>string</td><td><code class="function">vpi_get_str</code></td></tr><tr><td>h</td><td>handle</td><td><code class="function">vpi_handle</code></td></tr></tbody></table></div></dd><dt><span class="term">Addendum</span></dt><dd><p>When this parameter is a question mark (<span class="emphasis"><em>?</em></span>), it suggests that the specified <span class="acronym">VPI</span> property should be queried as a boolean value. This produces the same effect as specifying <span class="emphasis"><em>b</em></span> for the Accessor parameter.</p><p>When this parameter is an equal sign (<span class="emphasis"><em>=</em></span>), it suggests that the specified <span class="acronym">VPI</span> property should be written to.</p></dd></dl></div><div class="example"><a id="ex..handle-property-accessor-naming-format"></a><p class="title"><b>Example 2.1. Accessing a handle's <span class="acronym">VPI</span> properties</b></p><div class="informaltable"><table border="1"><colgroup><col /><col /><col /><col /><col /><col /></colgroup><thead><tr><th rowspan="2">Ruby expression</th><th colspan="6">Naming format</th><th rowspan="2">Description</th></tr><tr><th>Operation</th><th>_</th><th>Property</th><th>_</th><th>Accessor</th><th>Addendum</th></tr></thead><tbody><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">each_vpiNet</code> {|<code class="varname">net</code>| <code class="function">puts</code> <code class="varname">net</code>.<code class="function">fullName</code>}</code></td><td>each</td><td>_</td><td>vpiNet</td><td> </td><td> </td><td> </td><td rowspan="2">These expressions print the full name of each <code class="constant">vpiNet</code> object associated with the handle.</td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">each_net</code> {|<code class="varname">net</code>| <code class="function">puts</code> <code class="varname">net</code>.<code class="function">fullName</code>}</code></td><td>each</td><td>_</td><td>net</td><td> </td><td> </td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiIntVal</code></code></td><td> </td><td> </td><td>vpiIntVal</td><td> </td><td> </td><td> </td><td rowspan="4">These expressions access the logic value of the handle's <code class="constant">vpiIntVal</code> property.</td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiIntVal_l</code></code></td><td> </td><td> </td><td>vpiIntVal</td><td>_</td><td>l</td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">intVal</code></code></td><td> </td><td> </td><td>intVal</td><td> </td><td> </td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">intVal_l</code></code></td><td> </td><td> </td><td>intVal</td><td>_</td><td>l</td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiIntVal</code> = <code class="literal">15</code></code></td><td> </td><td> </td><td>vpiIntVal</td><td> </td><td> </td><td>=</td><td rowspan="4">These expressions assign the number 15 to the logic value of the handle's <code class="constant">vpiIntVal</code> property.</td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiIntVal_l</code> = <code class="literal">15</code></code></td><td> </td><td> </td><td>vpiIntVal</td><td>_</td><td>l</td><td>=</td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">intVal</code> = <code class="literal">15</code></code></td><td> </td><td> </td><td>intVal</td><td> </td><td> </td><td>=</td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">intVal</code>_l = <code class="literal">15</code></code></td><td> </td><td> </td><td>intVal</td><td>_</td><td>l</td><td>=</td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiType</code></code></td><td> </td><td> </td><td>vpiType</td><td> </td><td> </td><td> </td><td rowspan="4">These expressions access the integer value of the handle's <code class="constant">vpiType</code> property.</td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiType_i</code></code></td><td> </td><td> </td><td>vpiType</td><td>_</td><td>i</td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">type</code></code></td><td> </td><td> </td><td>type</td><td> </td><td> </td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">type_i</code></code></td><td> </td><td> </td><td>type</td><td>_</td><td>i</td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiProtected</code></code></td><td> </td><td> </td><td>vpiProtected</td><td> </td><td> </td><td> </td><td rowspan="6">These expressions access the boolean value of the handle's <code class="constant">vpiProtected</code> property.</td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiProtected_b</code></code></td><td> </td><td> </td><td>vpiProtected</td><td>_</td><td>b</td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiProtected?</code></code></td><td> </td><td> </td><td>vpiProtected</td><td> </td><td> </td><td>?</td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">protected</code></code></td><td> </td><td> </td><td>protected</td><td> </td><td> </td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">protected_b</code></code></td><td> </td><td> </td><td>protected</td><td>_</td><td>b</td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">protected?</code></code></td><td> </td><td> </td><td>protected</td><td> </td><td> </td><td>?</td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiFullName</code></code></td><td> </td><td> </td><td>vpiFullName</td><td> </td><td> </td><td> </td><td rowspan="4">These expressions access the string value of the handle's <code class="constant">vpiFullName</code> property.</td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiFullName_s</code></code></td><td> </td><td> </td><td>vpiFullName</td><td>_</td><td>s</td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">fullName</code></code></td><td> </td><td> </td><td>fullName</td><td> </td><td> </td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">fullName_s</code></code></td><td> </td><td> </td><td>fullName</td><td>_</td><td>s</td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiParent</code></code></td><td> </td><td> </td><td>vpiParent</td><td> </td><td> </td><td> </td><td rowspan="4">These expressions access the handle value of the handle's <code class="constant">vpiParent</code> property.</td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">vpiParent_h</code></code></td><td> </td><td> </td><td>vpiParent</td><td>_</td><td>h</td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">parent</code></code></td><td> </td><td> </td><td>parent</td><td> </td><td> </td><td> </td></tr><tr><td><code class="code"><code class="varname">handle</code>.<code class="function">parent_h</code></code></td><td> </td><td> </td><td>parent</td><td>_</td><td>h</td><td> </td></tr></tbody></table></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="background.terminology.html"><img src="images/prev.png" alt="Prev" /></a> </td><td width="20%" align="center"><a accesskey="u" href="background.html"><img src="images/up.png" alt="Up" /></a></td><td width="40%" align="right"> <a accesskey="n" href="background.running-tests.html"><img src="images/next.png" alt="Next" /></a></td></tr><tr><td width="40%" align="left" valign="top">Terminology </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home" /></a></td><td width="40%" align="right" valign="top"> Running a test</td></tr></table></div></body></html>
|
data/doc/xhtml/index.html
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
2
2
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
3
|
-
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ruby-VPI user manual</title><link rel="stylesheet" href="styles/manual.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.68.1" /><meta name="description" content="This manual explains how to use Ruby-VPI. You can find the newest version of this manual at the Ruby-VPI website." /><link rel="start" href="index.html" title="Ruby-VPI user manual" /><link rel="next" href="introduction.html" title="Chapter 1. Introduction" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"><span class="application">Ruby-VPI</span> user manual</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="introduction.html"><img src="images/next.png" alt="Next" /></a></td></tr></table><hr /></div><div class="book" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="
|
|
4
|
-
your documents</a></span></dt></dl></dd></dl></div><div class="list-of-figures"><p><b>List of Figures</b></p><dl><dt>2.1. <a href="background.organization.html#fig..organization">Overall organization of a test</a></dt><dt>2.2. <a href="background.organization.html#fig..organization.detail">Detailed organization of a test</a></dt><dt>2.3. <a href="background.running-tests.html#fig..ruby_init">Initialization of a test</a></dt><dt>2.4. <a href="background.running-tests.html#fig..ruby_relay">Execution of a test</a></dt><dt>3.1. <a href="usage.tutorial.html#fig..counter.v_decl">Declaration of a simple up-counter with synchronous reset</a></dt><dt>3.2. <a href="usage.tutorial.html#fig..generate-test.rspec">Generating a test with specification in RSpec format</a></dt><dt>3.3. <a href="usage.tutorial.html#fig..generate-test.unit-test">Generating a test with specification in unit test format</a></dt><dt>3.4. <a href="usage.tutorial.html#fig..counter_rspecTest_spec.rb">Specification implemented in RSpec format</a></dt><dt>3.5. <a href="usage.tutorial.html#fig..counter_unitTest_spec.rb">Specification implemented in unit test format</a></dt><dt>3.6. <a href="usage.tutorial.html#fig..counter_proto.rb">Ruby prototype of our Verilog design</a></dt><dt>3.7. <a href="usage.tutorial.html#fig..test-proto.rspec">Running a test with specification in RSpec format</a></dt><dt>3.8. <a href="usage.tutorial.html#fig..test-proto.unit-test">Running a test with specification in unit test format</a></dt><dt>3.9. <a href="usage.tutorial.html#fig..counter.v_impl">Implementation of a simple up-counter with synchronous reset</a></dt><dt>3.10. <a href="usage.tutorial.html#fig..test-design.rspec">Running a test with specification in RSpec format</a></dt><dt>3.11. <a href="usage.tutorial.html#fig..test-design.unit-test">Running a test with specification in unit test format</a></dt></dl></div><div class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>2.1. <a href="background.organization.html#table..handle-property-accessor-naming-format">Naming format for accessing a handle's <span class="acronym">VPI</span> properties</a></dt><dt>2.2. <a href="background.organization.html#
|
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ruby-VPI user manual</title><link rel="stylesheet" href="styles/manual.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.68.1" /><meta name="description" content="This manual explains how to use Ruby-VPI. You can find the newest version of this manual at the Ruby-VPI website." /><link rel="start" href="index.html" title="Ruby-VPI user manual" /><link rel="next" href="introduction.html" title="Chapter 1. Introduction" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"><span class="application">Ruby-VPI</span> user manual</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="introduction.html"><img src="images/next.png" alt="Next" /></a></td></tr></table><hr /></div><div class="book" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="id2467206"></a><span class="application">Ruby-VPI</span> user manual</h1></div><div><p class="copyright">Copyright © 2006 Suraj N. Kurapati</p></div><div><p class="copyright">Copyright © 2005, 2006 <a href="http://tango.freedesktop.org" target="_top">Tango Desktop Project</a> <em><span class="remark">for admonition and navigation graphics released under <a href="images/COPYING" target="_top">this license</a>.</span></em></p></div><div><p class="copyright">Copyright © 1999, 2000, 2001 Norman Walsh <em><span class="remark">for DocBook graphics released under <a href="images/copyright" target="_top">this license</a>.</span></em></p></div><div><div class="legalnotice"><a id="id2511299"></a><p>Permission is granted to copy, distribute and/or modify this document under the terms of the <span class="acronym">GNU</span> Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "<span class="acronym">GNU</span> Free Documentation License".</p></div></div><div><div class="abstract"><p class="title"><b>Abstract</b></p><p>This manual explains how to use <span class="application">Ruby-VPI</span>. You can find the newest version of this manual at the <a href="http://ruby-vpi.rubyforge.org" target="_top"><span class="application">Ruby-VPI</span> website</a>.</p></div></div></div><hr /></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="introduction.html">1. Introduction</a></span></dt><dd><dl><dt><span class="section"><a href="introduction.license.html">License</a></span></dt><dt><span class="section"><a href="introduction.manifest.html">Manifest</a></span></dt><dt><span class="section"><a href="introduction.resources.html">Resources</a></span></dt><dt><span class="section"><a href="introduction.related-works.html">Related works</a></span></dt><dd><dl><dt><span class="section"><a href="introduction.related-works.html#introduction.related-works.pli">Ye olde PLI</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="background.html">2. Background</a></span></dt><dd><dl><dt><span class="section"><a href="background.methodology.html">Methodology</a></span></dt><dt><span class="section"><a href="background.terminology.html">Terminology</a></span></dt><dt><span class="section"><a href="background.organization.html">Organization</a></span></dt><dd><dl><dt><span class="section"><a href="background.organization.html#organization.vpi">Interface to <span class="acronym">VPI</span></a></span></dt></dl></dd><dt><span class="section"><a href="background.running-tests.html">Running a test</a></span></dt><dd><dl><dt><span class="section"><a href="background.running-tests.html#background.running-tests.init">Initialization</a></span></dt><dt><span class="section"><a href="background.running-tests.html#background.running-tests.exec">Execution</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="usage.html">3. Usage</a></span></dt><dd><dl><dt><span class="section"><a href="usage.requirements.html">Requirements</a></span></dt><dt><span class="section"><a href="usage.installation.html">Installation and maintenance</a></span></dt><dt><span class="section"><a href="usage.tools.html">Tools</a></span></dt><dd><dl><dt><span class="section"><a href="usage.tools.html#usage.tools.generate-test">Automated test generation</a></span></dt><dt><span class="section"><a href="usage.tools.html#usage.tools.verilog-ruby-conv">Verilog to Ruby conversion</a></span></dt></dl></dd><dt><span class="section"><a href="usage.examples.html">Examples</a></span></dt><dt><span class="section"><a href="usage.tutorial.html">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="usage.tutorial.html#usage.tutorial.declare-design">Start with a design</a></span></dt><dt><span class="section"><a href="usage.tutorial.html#usage.tutorial.generate-test">Generate a test</a></span></dt><dt><span class="section"><a href="usage.tutorial.html#usage.tutorial.specification">Specify your expectations</a></span></dt><dt><span class="section"><a href="usage.tutorial.html#usage.tutorial.implement-proto">Implement the prototype</a></span></dt><dt><span class="section"><a href="usage.tutorial.html#usage.tutorial.test-proto">Verify the prototype</a></span></dt><dt><span class="section"><a href="usage.tutorial.html#usage.tutorial.implement-design">Implement the design</a></span></dt><dt><span class="section"><a href="usage.tutorial.html#usage.tutorial.test-design">Verify the design</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="problems.html">4. Known problems</a></span></dt><dd><dl><dt><span class="section"><a href="problems.ruby.html">Ruby</a></span></dt><dd><dl><dt><span class="section"><a href="problems.ruby.html#problems.ruby.SystemStackError">SystemStackError</a></span></dt><dt><span class="section"><a href="problems.ruby.html#problems.ruby.TestUnit">test/unit</a></span></dt></dl></dd><dt><span class="section"><a href="problem.ivl.html">Icarus Verilog</a></span></dt><dd><dl><dt><span class="section"><a href="problem.ivl.html#problems.ivl.vpi_handle_by_name">vpi_handle_by_name</a></span></dt><dt><span class="section"><a href="problem.ivl.html#problems.ivl.vpi_reset">Vpi::reset</a></span></dt></dl></dd><dt><span class="section"><a href="problems.vsim.html">Mentor Modelsim</a></span></dt><dd><dl><dt><span class="section"><a href="problems.vsim.html#problems.vsim.ruby_run">ruby_run()</a></span></dt></dl></dd></dl></dd><dt><span class="glossary"><a href="glossary.html">Glossary</a></span></dt><dt><span class="appendix"><a href="gfdl.html">A. GNU Free Documentation License</a></span></dt><dd><dl><dt><span class="section"><a href="gfdl-0.html">PREAMBLE</a></span></dt><dt><span class="section"><a href="gfdl-1.html">APPLICABILITY AND DEFINITIONS</a></span></dt><dt><span class="section"><a href="gfdl-2.html">VERBATIM COPYING</a></span></dt><dt><span class="section"><a href="gfdl-3.html">COPYING IN QUANTITY</a></span></dt><dt><span class="section"><a href="gfdl-4.html">MODIFICATIONS</a></span></dt><dt><span class="section"><a href="gfdl-5.html">COMBINING DOCUMENTS</a></span></dt><dt><span class="section"><a href="gfdl-6.html">COLLECTIONS OF DOCUMENTS</a></span></dt><dt><span class="section"><a href="gfdl-7.html">AGGREGATION WITH INDEPENDENT WORKS</a></span></dt><dt><span class="section"><a href="gfdl-8.html">TRANSLATION</a></span></dt><dt><span class="section"><a href="gfdl-9.html">TERMINATION</a></span></dt><dt><span class="section"><a href="gfdl-10.html">FUTURE REVISIONS OF THIS LICENSE</a></span></dt><dt><span class="section"><a href="gfdl-addendum.html">ADDENDUM: How to use this License for
|
|
4
|
+
your documents</a></span></dt></dl></dd></dl></div><div class="list-of-figures"><p><b>List of Figures</b></p><dl><dt>2.1. <a href="background.organization.html#fig..organization">Overall organization of a test</a></dt><dt>2.2. <a href="background.organization.html#fig..organization.detail">Detailed organization of a test</a></dt><dt>2.3. <a href="background.running-tests.html#fig..ruby_init">Initialization of a test</a></dt><dt>2.4. <a href="background.running-tests.html#fig..ruby_relay">Execution of a test</a></dt><dt>3.1. <a href="usage.tutorial.html#fig..counter.v_decl">Declaration of a simple up-counter with synchronous reset</a></dt><dt>3.2. <a href="usage.tutorial.html#fig..generate-test.rspec">Generating a test with specification in RSpec format</a></dt><dt>3.3. <a href="usage.tutorial.html#fig..generate-test.unit-test">Generating a test with specification in unit test format</a></dt><dt>3.4. <a href="usage.tutorial.html#fig..counter_rspecTest_spec.rb">Specification implemented in RSpec format</a></dt><dt>3.5. <a href="usage.tutorial.html#fig..counter_unitTest_spec.rb">Specification implemented in unit test format</a></dt><dt>3.6. <a href="usage.tutorial.html#fig..counter_proto.rb">Ruby prototype of our Verilog design</a></dt><dt>3.7. <a href="usage.tutorial.html#fig..test-proto.rspec">Running a test with specification in RSpec format</a></dt><dt>3.8. <a href="usage.tutorial.html#fig..test-proto.unit-test">Running a test with specification in unit test format</a></dt><dt>3.9. <a href="usage.tutorial.html#fig..counter.v_impl">Implementation of a simple up-counter with synchronous reset</a></dt><dt>3.10. <a href="usage.tutorial.html#fig..test-design.rspec">Running a test with specification in RSpec format</a></dt><dt>3.11. <a href="usage.tutorial.html#fig..test-design.unit-test">Running a test with specification in unit test format</a></dt></dl></div><div class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>2.1. <a href="background.organization.html#table..handle-property-accessor-naming-format">Naming format for accessing a handle's <span class="acronym">VPI</span> properties</a></dt><dt>2.2. <a href="background.organization.html#id2482976">Possible accessors and their implications</a></dt></dl></div><div class="list-of-examples"><p><b>List of Examples</b></p><dl><dt>2.1. <a href="background.organization.html#ex..handle-property-accessor-naming-format">Accessing a handle's <span class="acronym">VPI</span> properties</a></dt><dt>4.1. <a href="problem.ivl.html#ex..TestFoo">Part of a bench which instantiates a Verilog design</a></dt><dt>4.2. <a href="problem.ivl.html#ex..TestFoo_bad">Bad design with unconnected registers</a></dt><dt>4.3. <a href="problem.ivl.html#ex..TestFoo_fix">Fixed design with wired registers</a></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="introduction.html"><img src="images/next.png" alt="Next" /></a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"> </td><td width="40%" align="right" valign="top"> Chapter 1. Introduction</td></tr></table></div></body></html>
|