ruby-vpi 7.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/HISTORY +398 -0
- data/LICENSE +340 -0
- data/MEMO +38 -0
- data/README +9 -0
- data/Rakefile +271 -0
- data/bin/generate_test.rb +258 -0
- data/bin/generate_test_tpl/bench.rb +31 -0
- data/bin/generate_test_tpl/bench.v +54 -0
- data/bin/generate_test_tpl/design.rb +26 -0
- data/bin/generate_test_tpl/proto.rb +8 -0
- data/bin/generate_test_tpl/runner.rake +28 -0
- data/bin/generate_test_tpl/spec.rb +46 -0
- data/bin/header_to_ruby.rb +70 -0
- data/doc/Rakefile +55 -0
- data/doc/src/LICENSE +397 -0
- data/doc/src/figures/organization.png +0 -0
- data/doc/src/figures/organization_detailed.png +0 -0
- data/doc/src/figures/ruby_init.png +0 -0
- data/doc/src/figures/ruby_relay.png +0 -0
- data/doc/src/figures.dia +0 -0
- data/doc/src/images/COPYING +67 -0
- data/doc/src/images/ChangeLog +27 -0
- data/doc/src/images/blank.png +0 -0
- data/doc/src/images/callouts/1.png +0 -0
- data/doc/src/images/callouts/10.png +0 -0
- data/doc/src/images/callouts/11.png +0 -0
- data/doc/src/images/callouts/12.png +0 -0
- data/doc/src/images/callouts/13.png +0 -0
- data/doc/src/images/callouts/14.png +0 -0
- data/doc/src/images/callouts/15.png +0 -0
- data/doc/src/images/callouts/2.png +0 -0
- data/doc/src/images/callouts/3.png +0 -0
- data/doc/src/images/callouts/4.png +0 -0
- data/doc/src/images/callouts/5.png +0 -0
- data/doc/src/images/callouts/6.png +0 -0
- data/doc/src/images/callouts/7.png +0 -0
- data/doc/src/images/callouts/8.png +0 -0
- data/doc/src/images/callouts/9.png +0 -0
- data/doc/src/images/callouts/ChangeLog +15 -0
- data/doc/src/images/caution.png +0 -0
- data/doc/src/images/caution.svg +290 -0
- data/doc/src/images/copyright +55 -0
- data/doc/src/images/draft.png +0 -0
- data/doc/src/images/home.png +0 -0
- data/doc/src/images/home.svg +386 -0
- data/doc/src/images/important.png +0 -0
- data/doc/src/images/important.svg +163 -0
- data/doc/src/images/next.png +0 -0
- data/doc/src/images/next.svg +191 -0
- data/doc/src/images/note.png +0 -0
- data/doc/src/images/note.svg +483 -0
- data/doc/src/images/prev.png +0 -0
- data/doc/src/images/prev.svg +852 -0
- data/doc/src/images/tip.png +0 -0
- data/doc/src/images/tip.svg +1145 -0
- data/doc/src/images/toc-blank.png +0 -0
- data/doc/src/images/toc-minus.png +0 -0
- data/doc/src/images/toc-plus.png +0 -0
- data/doc/src/images/up.png +0 -0
- data/doc/src/images/up.svg +195 -0
- data/doc/src/images/warning.png +0 -0
- data/doc/src/images/warning.svg +334 -0
- data/doc/src/license.xml +446 -0
- data/doc/src/manual.xml +1582 -0
- data/doc/src/manual.xsl +23 -0
- data/doc/src/shared.dtd +63 -0
- data/doc/src/styles/manual.css +87 -0
- data/doc/txt/manual.txt +1657 -0
- data/doc/xhtml/background.html +3 -0
- data/doc/xhtml/background.methodology.html +3 -0
- data/doc/xhtml/background.organization.html +10 -0
- data/doc/xhtml/background.running-tests.html +3 -0
- data/doc/xhtml/background.terminology.html +3 -0
- data/doc/xhtml/figures/organization.png +0 -0
- data/doc/xhtml/figures/organization_detailed.png +0 -0
- data/doc/xhtml/figures/ruby_init.png +0 -0
- data/doc/xhtml/figures/ruby_relay.png +0 -0
- data/doc/xhtml/gfdl-0.html +18 -0
- data/doc/xhtml/gfdl-1.html +70 -0
- data/doc/xhtml/gfdl-10.html +15 -0
- data/doc/xhtml/gfdl-2.html +13 -0
- data/doc/xhtml/gfdl-3.html +31 -0
- data/doc/xhtml/gfdl-4.html +75 -0
- data/doc/xhtml/gfdl-5.html +20 -0
- data/doc/xhtml/gfdl-6.html +12 -0
- data/doc/xhtml/gfdl-7.html +16 -0
- data/doc/xhtml/gfdl-8.html +17 -0
- data/doc/xhtml/gfdl-9.html +9 -0
- data/doc/xhtml/gfdl-addendum.html +25 -0
- data/doc/xhtml/gfdl.html +11 -0
- data/doc/xhtml/glossary.html +3 -0
- data/doc/xhtml/images/COPYING +67 -0
- data/doc/xhtml/images/ChangeLog +27 -0
- data/doc/xhtml/images/blank.png +0 -0
- data/doc/xhtml/images/callouts/1.png +0 -0
- data/doc/xhtml/images/callouts/10.png +0 -0
- data/doc/xhtml/images/callouts/11.png +0 -0
- data/doc/xhtml/images/callouts/12.png +0 -0
- data/doc/xhtml/images/callouts/13.png +0 -0
- data/doc/xhtml/images/callouts/14.png +0 -0
- data/doc/xhtml/images/callouts/15.png +0 -0
- data/doc/xhtml/images/callouts/2.png +0 -0
- data/doc/xhtml/images/callouts/3.png +0 -0
- data/doc/xhtml/images/callouts/4.png +0 -0
- data/doc/xhtml/images/callouts/5.png +0 -0
- data/doc/xhtml/images/callouts/6.png +0 -0
- data/doc/xhtml/images/callouts/7.png +0 -0
- data/doc/xhtml/images/callouts/8.png +0 -0
- data/doc/xhtml/images/callouts/9.png +0 -0
- data/doc/xhtml/images/callouts/ChangeLog +15 -0
- data/doc/xhtml/images/caution.png +0 -0
- data/doc/xhtml/images/caution.svg +290 -0
- data/doc/xhtml/images/copyright +55 -0
- data/doc/xhtml/images/draft.png +0 -0
- data/doc/xhtml/images/home.png +0 -0
- data/doc/xhtml/images/home.svg +386 -0
- data/doc/xhtml/images/important.png +0 -0
- data/doc/xhtml/images/important.svg +163 -0
- data/doc/xhtml/images/next.png +0 -0
- data/doc/xhtml/images/next.svg +191 -0
- data/doc/xhtml/images/note.png +0 -0
- data/doc/xhtml/images/note.svg +483 -0
- data/doc/xhtml/images/prev.png +0 -0
- data/doc/xhtml/images/prev.svg +852 -0
- data/doc/xhtml/images/tip.png +0 -0
- data/doc/xhtml/images/tip.svg +1145 -0
- data/doc/xhtml/images/toc-blank.png +0 -0
- data/doc/xhtml/images/toc-minus.png +0 -0
- data/doc/xhtml/images/toc-plus.png +0 -0
- data/doc/xhtml/images/up.png +0 -0
- data/doc/xhtml/images/up.svg +195 -0
- data/doc/xhtml/images/warning.png +0 -0
- data/doc/xhtml/images/warning.svg +334 -0
- data/doc/xhtml/index.html +4 -0
- data/doc/xhtml/introduction.html +3 -0
- data/doc/xhtml/introduction.license.html +3 -0
- data/doc/xhtml/introduction.manifest.html +3 -0
- data/doc/xhtml/introduction.related-works.html +3 -0
- data/doc/xhtml/introduction.resources.html +3 -0
- data/doc/xhtml/problem.ivl.html +18 -0
- data/doc/xhtml/problems.html +3 -0
- data/doc/xhtml/problems.ruby.html +3 -0
- data/doc/xhtml/problems.vsim.html +3 -0
- data/doc/xhtml/styles/manual.css +87 -0
- data/doc/xhtml/usage.examples.html +3 -0
- data/doc/xhtml/usage.html +3 -0
- data/doc/xhtml/usage.installation.html +3 -0
- data/doc/xhtml/usage.requirements.html +3 -0
- data/doc/xhtml/usage.tools.html +3 -0
- data/doc/xhtml/usage.tutorial.html +199 -0
- data/ext/Doxyfile +272 -0
- data/ext/README +124 -0
- data/ext/Rakefile +65 -0
- data/ext/common.h +56 -0
- data/ext/extconf.rb +4 -0
- data/ext/relay.cin +146 -0
- data/ext/relay.hin +48 -0
- data/ext/ruby-vpi.c +36 -0
- data/ext/swig.cin +38 -0
- data/ext/swig.hin +39 -0
- data/ext/swig_vpi.h +924 -0
- data/ext/swig_vpi.i +8 -0
- data/ext/swig_wrap.cin +4613 -0
- data/ext/verilog.h +59 -0
- data/ext/vlog.cin +92 -0
- data/ext/vlog.hin +57 -0
- data/ext/vpi_user.h +924 -0
- data/gem_extconf.rb +8 -0
- data/history.html +809 -0
- data/lib/ruby-vpi/erb.rb +41 -0
- data/lib/ruby-vpi/rake.rb +35 -0
- data/lib/ruby-vpi/rdoc.rb +51 -0
- data/lib/ruby-vpi/rspec.rb +32 -0
- data/lib/ruby-vpi/runner.rb +22 -0
- data/lib/ruby-vpi/vpi_util.rb +310 -0
- data/lib/ruby-vpi.rb +58 -0
- data/memo.html +86 -0
- data/readme.html +19 -0
- data/ref/c/annotated.html +36 -0
- data/ref/c/common_8h.html +178 -0
- data/ref/c/doxygen.css +310 -0
- data/ref/c/doxygen.png +0 -0
- data/ref/c/files.html +35 -0
- data/ref/c/functions.html +135 -0
- data/ref/c/functions_vars.html +135 -0
- data/ref/c/globals.html +55 -0
- data/ref/c/globals_0x63.html +86 -0
- data/ref/c/globals_0x65.html +55 -0
- data/ref/c/globals_0x66.html +55 -0
- data/ref/c/globals_0x70.html +71 -0
- data/ref/c/globals_0x72.html +62 -0
- data/ref/c/globals_0x73.html +65 -0
- data/ref/c/globals_0x74.html +55 -0
- data/ref/c/globals_0x76.html +472 -0
- data/ref/c/globals_0x78.html +55 -0
- data/ref/c/globals_defs.html +81 -0
- data/ref/c/globals_defs_0x65.html +50 -0
- data/ref/c/globals_defs_0x70.html +51 -0
- data/ref/c/globals_defs_0x76.html +463 -0
- data/ref/c/globals_defs_0x78.html +50 -0
- data/ref/c/globals_enum.html +39 -0
- data/ref/c/globals_eval.html +40 -0
- data/ref/c/globals_func.html +49 -0
- data/ref/c/globals_type.html +63 -0
- data/ref/c/globals_vars.html +42 -0
- data/ref/c/hierarchy.html +36 -0
- data/ref/c/index.html +20 -0
- data/ref/c/relay_8cin.html +268 -0
- data/ref/c/relay_8hin.html +161 -0
- data/ref/c/ruby-vpi_8c.html +34 -0
- data/ref/c/structrelay____RubyOptions____def.html +84 -0
- data/ref/c/structt__cb__data.html +208 -0
- data/ref/c/structt__vpi__delay.html +183 -0
- data/ref/c/structt__vpi__error__info.html +208 -0
- data/ref/c/structt__vpi__strengthval.html +108 -0
- data/ref/c/structt__vpi__systf__data.html +208 -0
- data/ref/c/structt__vpi__time.html +133 -0
- data/ref/c/structt__vpi__value.html +285 -0
- data/ref/c/structt__vpi__vecval.html +83 -0
- data/ref/c/structt__vpi__vlog__info.html +133 -0
- data/ref/c/swig_8cin.html +91 -0
- data/ref/c/swig_8hin.html +99 -0
- data/ref/c/tab_b.gif +0 -0
- data/ref/c/tab_l.gif +0 -0
- data/ref/c/tab_r.gif +0 -0
- data/ref/c/tabs.css +102 -0
- data/ref/c/verilog_8h.html +149 -0
- data/ref/c/vlog_8cin.html +199 -0
- data/ref/c/vlog_8hin.html +152 -0
- data/ref/c/vpi__user_8h.html +12747 -0
- data/ref/ruby/classes/Counter.html +258 -0
- data/ref/ruby/classes/Counter.src/M000037.html +20 -0
- data/ref/ruby/classes/Counter.src/M000038.html +22 -0
- data/ref/ruby/classes/Counter.src/M000039.html +20 -0
- data/ref/ruby/classes/Counter.src/M000040.html +22 -0
- data/ref/ruby/classes/CounterProto.html +164 -0
- data/ref/ruby/classes/CounterProto.src/M000004.html +22 -0
- data/ref/ruby/classes/CounterProto.src/M000005.html +22 -0
- data/ref/ruby/classes/ERB.html +158 -0
- data/ref/ruby/classes/ERB.src/M000034.html +29 -0
- data/ref/ruby/classes/FileUtils.html +165 -0
- data/ref/ruby/classes/FileUtils.src/M000047.html +18 -0
- data/ref/ruby/classes/FileUtils.src/M000048.html +18 -0
- data/ref/ruby/classes/Hw5UnitModel/Operation.html +216 -0
- data/ref/ruby/classes/Hw5UnitModel/Operation.src/M000011.html +25 -0
- data/ref/ruby/classes/Hw5UnitModel/Operation.src/M000012.html +33 -0
- data/ref/ruby/classes/Hw5UnitModel/Operation.src/M000013.html +18 -0
- data/ref/ruby/classes/Hw5UnitModel.html +256 -0
- data/ref/ruby/classes/Hw5UnitModel.src/M000006.html +24 -0
- data/ref/ruby/classes/Hw5UnitModel.src/M000008.html +20 -0
- data/ref/ruby/classes/Hw5UnitModel.src/M000009.html +38 -0
- data/ref/ruby/classes/Hw5UnitModel.src/M000010.html +22 -0
- data/ref/ruby/classes/Hw5_unit.html +196 -0
- data/ref/ruby/classes/Hw5_unit.src/M000003.html +27 -0
- data/ref/ruby/classes/Hw5_unit_spec.html +237 -0
- data/ref/ruby/classes/Hw5_unit_spec.src/M000023.html +21 -0
- data/ref/ruby/classes/Hw5_unit_spec.src/M000024.html +21 -0
- data/ref/ruby/classes/Hw5_unit_spec.src/M000025.html +67 -0
- data/ref/ruby/classes/InputGenerator.html +260 -0
- data/ref/ruby/classes/InputGenerator.src/M000027.html +18 -0
- data/ref/ruby/classes/InputGenerator.src/M000028.html +18 -0
- data/ref/ruby/classes/InputGenerator.src/M000029.html +19 -0
- data/ref/ruby/classes/InputGenerator.src/M000030.html +38 -0
- data/ref/ruby/classes/InputGenerator.src/M000031.html +19 -0
- data/ref/ruby/classes/InputGenerator.src/M000032.html +19 -0
- data/ref/ruby/classes/MaximumCounterValue.html +159 -0
- data/ref/ruby/classes/MaximumCounterValue.src/M000035.html +23 -0
- data/ref/ruby/classes/MaximumCounterValue.src/M000036.html +21 -0
- data/ref/ruby/classes/ModuleInfo.html +199 -0
- data/ref/ruby/classes/ModuleInfo.src/M000018.html +44 -0
- data/ref/ruby/classes/ModuleInfo.src/M000019.html +26 -0
- data/ref/ruby/classes/OutputInfo.html +304 -0
- data/ref/ruby/classes/OutputInfo.src/M000017.html +51 -0
- data/ref/ruby/classes/RDoc.html +135 -0
- data/ref/ruby/classes/RDoc.src/M000051.html +40 -0
- data/ref/ruby/classes/ResettedCounterValue.html +174 -0
- data/ref/ruby/classes/ResettedCounterValue.src/M000014.html +19 -0
- data/ref/ruby/classes/ResettedCounterValue.src/M000015.html +18 -0
- data/ref/ruby/classes/ResettedCounterValue.src/M000016.html +23 -0
- data/ref/ruby/classes/RubyVPI.html +186 -0
- data/ref/ruby/classes/RubyVPI.src/M000049.html +18 -0
- data/ref/ruby/classes/RubyVPI.src/M000050.html +39 -0
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.html +370 -0
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000041.html +22 -0
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000042.html +44 -0
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000043.html +82 -0
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000044.html +127 -0
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000045.html +26 -0
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000046.html +18 -0
- data/ref/ruby/classes/SWIG.html +111 -0
- data/ref/ruby/classes/String.html +140 -0
- data/ref/ruby/classes/String.src/M000033.html +37 -0
- data/ref/ruby/classes/Template.html +158 -0
- data/ref/ruby/classes/Template.src/M000026.html +18 -0
- data/ref/ruby/classes/TestHw5UnitModel.html +180 -0
- data/ref/ruby/classes/TestHw5UnitModel.src/M000020.html +19 -0
- data/ref/ruby/classes/TestHw5UnitModel.src/M000021.html +19 -0
- data/ref/ruby/classes/TestHw5UnitModel.src/M000022.html +64 -0
- data/ref/ruby/created.rid +1 -0
- data/ref/ruby/files/bin/generate_test_rb.html +236 -0
- data/ref/ruby/files/bin/generate_test_rb.src/M000001.html +29 -0
- data/ref/ruby/files/bin/generate_test_tpl/bench_rb.html +115 -0
- data/ref/ruby/files/bin/generate_test_tpl/design_rb.html +107 -0
- data/ref/ruby/files/bin/generate_test_tpl/proto_rb.html +107 -0
- data/ref/ruby/files/bin/generate_test_tpl/spec_rb.html +140 -0
- data/ref/ruby/files/bin/generate_test_tpl/spec_rb.src/M000002.html +22 -0
- data/ref/ruby/files/bin/header_to_ruby_rb.html +116 -0
- data/ref/ruby/files/ext/extconf_rb.html +108 -0
- data/ref/ruby/files/gem_extconf_rb.html +114 -0
- data/ref/ruby/files/lib/ruby-vpi/erb_rb.html +108 -0
- data/ref/ruby/files/lib/ruby-vpi/rake_rb.html +108 -0
- data/ref/ruby/files/lib/ruby-vpi/rdoc_rb.html +108 -0
- data/ref/ruby/files/lib/ruby-vpi/rspec_rb.html +115 -0
- data/ref/ruby/files/lib/ruby-vpi/runner_rb.html +108 -0
- data/ref/ruby/files/lib/ruby-vpi/vpi_util_rb.html +108 -0
- data/ref/ruby/files/lib/ruby-vpi_rb.html +108 -0
- data/ref/ruby/files/samp/counter/counter_rspecTest_bench_rb.html +115 -0
- data/ref/ruby/files/samp/counter/counter_rspecTest_design_rb.html +107 -0
- data/ref/ruby/files/samp/counter/counter_rspecTest_proto_rb.html +107 -0
- data/ref/ruby/files/samp/counter/counter_rspecTest_spec_rb.html +142 -0
- data/ref/ruby/files/samp/counter/counter_unitTest_bench_rb.html +115 -0
- data/ref/ruby/files/samp/counter/counter_unitTest_design_rb.html +107 -0
- data/ref/ruby/files/samp/counter/counter_unitTest_proto_rb.html +107 -0
- data/ref/ruby/files/samp/counter/counter_unitTest_spec_rb.html +135 -0
- data/ref/ruby/files/samp/pipelined_alu/Hw5UnitModel_rb.html +101 -0
- data/ref/ruby/files/samp/pipelined_alu/InputGenerator_rb.html +101 -0
- data/ref/ruby/files/samp/pipelined_alu/TestHw5UnitModel_rb.html +111 -0
- data/ref/ruby/files/samp/pipelined_alu/hw5_unit_bench_rb.html +108 -0
- data/ref/ruby/files/samp/pipelined_alu/hw5_unit_design_rb.html +107 -0
- data/ref/ruby/files/samp/pipelined_alu/hw5_unit_spec_rb.html +112 -0
- data/ref/ruby/fr_class_index.html +46 -0
- data/ref/ruby/fr_file_index.html +55 -0
- data/ref/ruby/fr_method_index.html +77 -0
- data/ref/ruby/index.html +24 -0
- data/ref/ruby/rdoc-style.css +208 -0
- data/samp/counter/Rakefile +1 -0
- data/samp/counter/counter.v +20 -0
- data/samp/counter/counter_rspecTest_bench.rb +9 -0
- data/samp/counter/counter_rspecTest_bench.v +28 -0
- data/samp/counter/counter_rspecTest_design.rb +22 -0
- data/samp/counter/counter_rspecTest_proto.rb +10 -0
- data/samp/counter/counter_rspecTest_runner.rake +28 -0
- data/samp/counter/counter_rspecTest_spec.rb +47 -0
- data/samp/counter/counter_unitTest_bench.rb +9 -0
- data/samp/counter/counter_unitTest_bench.v +28 -0
- data/samp/counter/counter_unitTest_design.rb +22 -0
- data/samp/counter/counter_unitTest_proto.rb +10 -0
- data/samp/counter/counter_unitTest_runner.rake +28 -0
- data/samp/counter/counter_unitTest_spec.rb +49 -0
- data/samp/pipelined_alu/Hw5UnitModel.rb +134 -0
- data/samp/pipelined_alu/InputGenerator.rb +94 -0
- data/samp/pipelined_alu/README +127 -0
- data/samp/pipelined_alu/Rakefile +1 -0
- data/samp/pipelined_alu/TestHw5UnitModel.rb +88 -0
- data/samp/pipelined_alu/hw5_unit.v +186 -0
- data/samp/pipelined_alu/hw5_unit_bench.rb +8 -0
- data/samp/pipelined_alu/hw5_unit_bench.v +45 -0
- data/samp/pipelined_alu/hw5_unit_design.rb +18 -0
- data/samp/pipelined_alu/hw5_unit_runner.rake +10 -0
- data/samp/pipelined_alu/hw5_unit_spec.rb +123 -0
- data/tpl/launcher.rake +30 -0
- data/tpl/runner.rake +96 -0
- data/tpl/synopsys_vcs.tab +2 -0
- metadata +484 -0
@@ -0,0 +1,3 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
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>Resources</title><link rel="stylesheet" href="styles/manual.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.68.1" /><link rel="start" href="index.html" title="Ruby-VPI user manual" /><link rel="up" href="introduction.html" title="Chapter 1. Introduction" /><link rel="prev" href="introduction.manifest.html" title="Manifest" /><link rel="next" href="introduction.related-works.html" title="Related works" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Resources</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="introduction.manifest.html"><img src="images/prev.png" alt="Prev" /></a> </td><th width="60%" align="center">Chapter 1. Introduction</th><td width="20%" align="right"> <a accesskey="n" href="introduction.related-works.html"><img src="images/next.png" alt="Next" /></a></td></tr></table><hr /></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="introduction.resources"></a>Resources</h2></div></div></div><div class="variablelist"><dl><dt><span class="term"><a href="http://rubyforge.org/projects/ruby-vpi" target="_top">Project</a></span></dt><dd><p>Access project facilities, hosted generously by <a href="http://rubyforge.org" target="_top">RubyForge</a>.</p></dd><dt><span class="term"><a href="http://rubyforge.org/projects/ruby-vpi" target="_top">Tracker</a></span></dt><dd><p>Report problems, contribute patches, and more.</p></dd><dt><span class="term"><a href="http://rubyforge.org/frs/?group_id=1339" target="_top">Releases</a></span></dt><dd><p>Download the newest release of <span class="application">Ruby-VPI</span>.</p></dd><dt><span class="term"><a href="http://rubyforge.org/scm/?group_id=1339" target="_top">Sources</a></span></dt><dd><p>Browse or access the source code repository.</p></dd><dt><span class="term"><a href="http://rubyforge.org/forum/?group_id=1339" target="_top">Forums</a></span></dt><dd><p>Ask for help, give feedback, or discuss.</p></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="introduction.manifest.html"><img src="images/prev.png" alt="Prev" /></a> </td><td width="20%" align="center"><a accesskey="u" href="introduction.html"><img src="images/up.png" alt="Up" /></a></td><td width="40%" align="right"> <a accesskey="n" href="introduction.related-works.html"><img src="images/next.png" alt="Next" /></a></td></tr><tr><td width="40%" align="left" valign="top">Manifest </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"> Related works</td></tr></table></div></body></html>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
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>Icarus Verilog</title><link rel="stylesheet" href="styles/manual.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.68.1" /><link rel="start" href="index.html" title="Ruby-VPI user manual" /><link rel="up" href="problems.html" title="Chapter 4. Known problems" /><link rel="prev" href="problems.ruby.html" title="Ruby" /><link rel="next" href="problems.vsim.html" title="Mentor Modelsim" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Icarus Verilog</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="problems.ruby.html"><img src="images/prev.png" alt="Prev" /></a> </td><th width="60%" align="center">Chapter 4. Known problems</th><td width="20%" align="right"> <a accesskey="n" href="problems.vsim.html"><img src="images/next.png" alt="Next" /></a></td></tr></table><hr /></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="problem.ivl"></a>Icarus Verilog</h2></div></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="problems.ivl.vpi_handle_by_name"></a>vpi_handle_by_name</h3></div></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="problems.ivl.vpi_handle_by_name.absolute-paths"></a>Give full paths to Verilog objects</h4></div></div></div><p>In version 0.8 of Icarus Verilog, the <code class="function">vpi_handle_by_name</code> function requires an <span class="emphasis"><em>absolute</em></span> path (including the name of the bench which instantiates the design) to a Verilog object.</p><p>For example, consider <a href="problem.ivl.html#ex..TestFoo" title="Example 4.1. Part of a bench which instantiates a Verilog design">Example 4.1, “Part of a bench which instantiates a Verilog design”</a>. Here, one needs to specify <code class="code">TestFoo.my_foo.clk</code> instead of <code class="code">my_foo.clk</code> in order to access the <code class="varname">clk</code> input of the <code class="varname">my_foo</code> module instance.</p><div class="example"><a id="ex..TestFoo"></a><p class="title"><b>Example 4.1. Part of a bench which instantiates a Verilog design</b></p><pre class="programlisting">
|
4
|
+
<span class="token">module</span> TestFoo;
|
5
|
+
<span class="type">reg</span> <code class="varname">clk_reg</code>;
|
6
|
+
Foo <code class="varname">my_foo</code>(<em class="parameter"><code>.clk</code></em>(<code class="varname">clk_reg</code>));
|
7
|
+
<span class="token">endmodule</span>
|
8
|
+
</pre></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="problems.ivl.vpi_handle_by_name.connect-registers"></a>Registers must be connected</h4></div></div></div><p>In version 0.8 of Icarus Verilog, if you want to access a register in a design, then it must be connected to something (either assigned to a wire or passed as a parameter to a module instantiation). Otherwise, you will get a <code class="literal">nil</code> value as the result of <code class="function">vpi_handle_by_name</code> method.</p><p>For example, suppose you wanted to access the <code class="varname">clk_reg</code> register, from the bench shown in <a href="problem.ivl.html#ex..TestFoo_bad" title="Example 4.2. Bad design with unconnected registers">Example 4.2, “Bad design with unconnected registers”</a>. If you execute the statement <code class="code"><code class="varname">clk_reg</code> = <code class="function">vpi_handle_by_name</code>(<em class="parameter"><code><code class="literal">"TestFoo.clk_reg"</code></code></em>, <em class="parameter"><code><code class="literal">nil</code></code></em>)</code> in a specification, then you will discover that the <code class="function">vpi_handle_by_name</code> method returns <code class="literal">nil</code> instead of a handle to the <code class="varname">clk_reg</code> register.</p><p>The solution is to change the design such that it appears like the one shown in <a href="problem.ivl.html#ex..TestFoo_fix" title="Example 4.3. Fixed design with wired registers">Example 4.3, “Fixed design with wired registers”</a> where the register is connected to a wire, or <a href="problem.ivl.html#ex..TestFoo" title="Example 4.1. Part of a bench which instantiates a Verilog design">Example 4.1, “Part of a bench which instantiates a Verilog design”</a> where the register is connected to a module instantiation.</p><div class="example"><a id="ex..TestFoo_bad"></a><p class="title"><b>Example 4.2. Bad design with unconnected registers</b></p><p>Here the <code class="varname">clk_reg</code> register is not connected to anything.</p><pre class="programlisting">
|
9
|
+
<span class="token">module</span> TestFoo;
|
10
|
+
<span class="type">reg</span> <code class="varname">clk_reg</code>;
|
11
|
+
<span class="token">endmodule</span>
|
12
|
+
</pre></div><div class="example"><a id="ex..TestFoo_fix"></a><p class="title"><b>Example 4.3. Fixed design with wired registers</b></p><p>Here the <code class="varname">clk_reg</code> register is connected to the <code class="varname">clk_wire</code> wire.</p><pre class="programlisting">
|
13
|
+
<span class="token">module</span> TestFoo;
|
14
|
+
<span class="type">reg</span> <code class="varname">clk_reg</code>;
|
15
|
+
<span class="type">wire</span> <code class="varname">clk_wire</code>;
|
16
|
+
<span class="token">assign</span> <code class="varname">clk_wire</code> = <code class="varname">clk_reg</code>;
|
17
|
+
<span class="token">endmodule</span>
|
18
|
+
</pre></div></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="problems.ivl.vpi_reset"></a>Vpi::reset</h3></div></div></div><div class="caution" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Caution: Deprecated method"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Caution]" src="images/caution.png" /></td><th align="left">Deprecated method</th></tr><tr><td align="left" valign="top"><p>The <code class="function">vpi_control</code> method was removed in release 3.0.0 (2006-04-23) of <span class="application">Ruby-VPI</span>, and is deprecated. Please use <code class="code"><code class="constant">Vpi</code>::<code class="function">vpi_control</code>(<em class="parameter"><code><code class="constant">VpiReset</code></code></em>)</code> instead.</p></td></tr></table></div><p>In version 0.8 of Icarus Verilog, the <code class="code"><code class="function">vpi_control</code>(<em class="parameter"><code><code class="constant">vpiReset</code></code></em>)</code> <span class="acronym">VPI</span> function causes an assertion to fail inside the simulator. As a result, the simulation terminates and a core dump is produced.</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="problems.ruby.html"><img src="images/prev.png" alt="Prev" /></a> </td><td width="20%" align="center"><a accesskey="u" href="problems.html"><img src="images/up.png" alt="Up" /></a></td><td width="40%" align="right"> <a accesskey="n" href="problems.vsim.html"><img src="images/next.png" alt="Next" /></a></td></tr><tr><td width="40%" align="left" valign="top">Ruby </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"> Mentor Modelsim</td></tr></table></div></body></html>
|
@@ -0,0 +1,3 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
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>Chapter 4. Known problems</title><link rel="stylesheet" href="styles/manual.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.68.1" /><link rel="start" href="index.html" title="Ruby-VPI user manual" /><link rel="up" href="index.html" title="Ruby-VPI user manual" /><link rel="prev" href="usage.tutorial.html" title="Tutorial" /><link rel="next" href="problems.ruby.html" title="Ruby" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 4. Known problems</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="usage.tutorial.html"><img src="images/prev.png" alt="Prev" /></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="problems.ruby.html"><img src="images/next.png" alt="Next" /></a></td></tr></table><hr /></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="problems"></a>Chapter 4. Known problems</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><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></div><p>This chapter presents known problems and possible solutions. In addition, previously solved problems have been retained for historical reference.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="usage.tutorial.html"><img src="images/prev.png" alt="Prev" /></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="problems.ruby.html"><img src="images/next.png" alt="Next" /></a></td></tr><tr><td width="40%" align="left" valign="top">Tutorial </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"> Ruby</td></tr></table></div></body></html>
|
@@ -0,0 +1,3 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
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</title><link rel="stylesheet" href="styles/manual.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.68.1" /><link rel="start" href="index.html" title="Ruby-VPI user manual" /><link rel="up" href="problems.html" title="Chapter 4. Known problems" /><link rel="prev" href="problems.html" title="Chapter 4. Known problems" /><link rel="next" href="problem.ivl.html" title="Icarus Verilog" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Ruby</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="problems.html"><img src="images/prev.png" alt="Prev" /></a> </td><th width="60%" align="center">Chapter 4. Known problems</th><td width="20%" align="right"> <a accesskey="n" href="problem.ivl.html"><img src="images/next.png" alt="Next" /></a></td></tr></table><hr /></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="problems.ruby"></a>Ruby</h2></div></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="problems.ruby.SystemStackError"></a>SystemStackError</h3></div></div></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note: Problem solved"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png" /></td><th align="left">Problem solved</th></tr><tr><td align="left" valign="top"><p>This problem was fixed in release 2.0.0 (2006-04-17). If it still occurs, then <a href="introduction.resources.html" title="Resources">please report it</a>.</p></td></tr></table></div><p>If a “<span class="quote">stack level too deep (SystemStackError)</span>” error occurs during the simulation, then increase the system-resource limit for stack-size by running the command <span><strong class="command">ulimit <code class="option">-s</code> <em class="replaceable"><code>unlimited</code></em></strong></span> before starting the simulation.</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="problems.ruby.TestUnit"></a>test/unit</h3></div></div></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note: Problem solved"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png" /></td><th align="left">Problem solved</th></tr><tr><td align="left" valign="top"><p>This problem was fixed in release 2.0.0 (2006-04-17). If it still occurs, then <a href="introduction.resources.html" title="Resources">please report it</a>.</p></td></tr></table></div><p>If your specification employs Ruby's unit testing framework, then you will encounter the error: “<span class="quote">[BUG] cross-thread violation on rb_gc()</span>”.</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="problems.html"><img src="images/prev.png" alt="Prev" /></a> </td><td width="20%" align="center"><a accesskey="u" href="problems.html"><img src="images/up.png" alt="Up" /></a></td><td width="40%" align="right"> <a accesskey="n" href="problem.ivl.html"><img src="images/next.png" alt="Next" /></a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 4. Known problems </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"> Icarus Verilog</td></tr></table></div></body></html>
|
@@ -0,0 +1,3 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
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>Mentor Modelsim</title><link rel="stylesheet" href="styles/manual.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.68.1" /><link rel="start" href="index.html" title="Ruby-VPI user manual" /><link rel="up" href="problems.html" title="Chapter 4. Known problems" /><link rel="prev" href="problem.ivl.html" title="Icarus Verilog" /><link rel="next" href="glossary.html" title="Glossary" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Mentor Modelsim</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="problem.ivl.html"><img src="images/prev.png" alt="Prev" /></a> </td><th width="60%" align="center">Chapter 4. Known problems</th><td width="20%" align="right"> <a accesskey="n" href="glossary.html"><img src="images/next.png" alt="Next" /></a></td></tr></table><hr /></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="problems.vsim"></a>Mentor Modelsim</h2></div></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="problems.vsim.ruby_run"></a>ruby_run()</h3></div></div></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note: Problem solved"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png" /></td><th align="left">Problem solved</th></tr><tr><td align="left" valign="top"><p>This problem was fixed in release 2.0.0 (2006-04-17). If it still occurs, then <a href="introduction.resources.html" title="Resources">please report it</a>.</p></td></tr></table></div><p>Version 6.1b of Mentor Modelsim doesn't play nicely with either an embedded Ruby interpreter or POSIX threads in a PLI application. When <span class="application">Ruby-VPI</span> invokes the <code class="function">ruby_run</code> function (which starts the Ruby interpreter), the simulator terminates immediately with an exit status of 0.</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="problem.ivl.html"><img src="images/prev.png" alt="Prev" /></a> </td><td width="20%" align="center"><a accesskey="u" href="problems.html"><img src="images/up.png" alt="Up" /></a></td><td width="40%" align="right"> <a accesskey="n" href="glossary.html"><img src="images/next.png" alt="Next" /></a></td></tr><tr><td width="40%" align="left" valign="top">Icarus Verilog </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"> Glossary</td></tr></table></div></body></html>
|
@@ -0,0 +1,87 @@
|
|
1
|
+
body {
|
2
|
+
font-family: sans-serif;
|
3
|
+
line-height: 2em;
|
4
|
+
}
|
5
|
+
|
6
|
+
/* admonitions */
|
7
|
+
.tip, .note, .important, .caution, .warning {
|
8
|
+
/* border: thin solid lightgreen;
|
9
|
+
background-color: honeydew; */
|
10
|
+
border: thin solid steelblue;
|
11
|
+
background-color: aliceblue;
|
12
|
+
padding: 1em;
|
13
|
+
}
|
14
|
+
|
15
|
+
/* headings */
|
16
|
+
.title, th {
|
17
|
+
font-family: serif;
|
18
|
+
}
|
19
|
+
|
20
|
+
/* source code */
|
21
|
+
.screen, .filename {
|
22
|
+
background-color: whitesmoke;
|
23
|
+
}
|
24
|
+
|
25
|
+
.code, .programlisting, .function, .constant, .literal, .varname, .token, .type, .remark {
|
26
|
+
font-family: monospace;
|
27
|
+
background-color: ivory;
|
28
|
+
}
|
29
|
+
|
30
|
+
.screen, .programlisting {
|
31
|
+
border: thin solid silver;
|
32
|
+
padding: 1em;
|
33
|
+
line-height: normal;
|
34
|
+
display: block;
|
35
|
+
overflow: auto;
|
36
|
+
}
|
37
|
+
|
38
|
+
.function {
|
39
|
+
color: orangered;
|
40
|
+
}
|
41
|
+
|
42
|
+
.constant {
|
43
|
+
color: brown;
|
44
|
+
font-weight: bold;
|
45
|
+
}
|
46
|
+
|
47
|
+
.literal {
|
48
|
+
color: darkgreen;
|
49
|
+
background-color: honeydew;
|
50
|
+
}
|
51
|
+
|
52
|
+
.varname {
|
53
|
+
color: magenta;
|
54
|
+
/*background-color: ghostwhite;*/
|
55
|
+
}
|
56
|
+
|
57
|
+
.token {
|
58
|
+
color: midnightblue;
|
59
|
+
}
|
60
|
+
|
61
|
+
.type {
|
62
|
+
color: royalblue;
|
63
|
+
}
|
64
|
+
|
65
|
+
.remark {
|
66
|
+
color: gray;
|
67
|
+
}
|
68
|
+
|
69
|
+
.command {
|
70
|
+
background-color: bisque;
|
71
|
+
}
|
72
|
+
|
73
|
+
/* tables */
|
74
|
+
table[border="1"] {
|
75
|
+
border: none;
|
76
|
+
}
|
77
|
+
|
78
|
+
table[border="1"] th {
|
79
|
+
border: none;
|
80
|
+
background-color: whitesmoke;
|
81
|
+
}
|
82
|
+
|
83
|
+
table[border="1"] th,
|
84
|
+
table[border="1"] td {
|
85
|
+
border: thin solid silver;
|
86
|
+
padding: 1em;
|
87
|
+
}
|
@@ -0,0 +1,3 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
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>Examples</title><link rel="stylesheet" href="styles/manual.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.68.1" /><link rel="start" href="index.html" title="Ruby-VPI user manual" /><link rel="up" href="usage.html" title="Chapter 3. Usage" /><link rel="prev" href="usage.tools.html" title="Tools" /><link rel="next" href="usage.tutorial.html" title="Tutorial" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Examples</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="usage.tools.html"><img src="images/prev.png" alt="Prev" /></a> </td><th width="60%" align="center">Chapter 3. Usage</th><td width="20%" align="right"> <a accesskey="n" href="usage.tutorial.html"><img src="images/next.png" alt="Next" /></a></td></tr></table><hr /></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="usage.examples"></a>Examples</h2></div></div></div><p>The <code class="filename">samp</code> directory contains several example tests which illustrate how <span class="application">Ruby-VPI</span> can be used. Each example has an associated <code class="filename">Rakefile</code> which simplifies the process of running it. Therefore, simply navigate into an example directory and run the command <span><strong class="command">rake</strong></span> to get started.</p><p>Also, some example specifications make use of BDD through the <span class="application">RSpec</span> library. See the <a href="background.methodology.html" title="Methodology">the section called “Methodology”</a> for a discussion of <span class="application">RSpec</span>.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="usage.tools.html"><img src="images/prev.png" alt="Prev" /></a> </td><td width="20%" align="center"><a accesskey="u" href="usage.html"><img src="images/up.png" alt="Up" /></a></td><td width="40%" align="right"> <a accesskey="n" href="usage.tutorial.html"><img src="images/next.png" alt="Next" /></a></td></tr><tr><td width="40%" align="left" valign="top">Tools </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"> Tutorial</td></tr></table></div></body></html>
|
@@ -0,0 +1,3 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
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>Chapter 3. Usage</title><link rel="stylesheet" href="styles/manual.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.68.1" /><link rel="start" href="index.html" title="Ruby-VPI user manual" /><link rel="up" href="index.html" title="Ruby-VPI user manual" /><link rel="prev" href="background.running-tests.html" title="Running a test" /><link rel="next" href="usage.requirements.html" title="Requirements" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 3. Usage</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="background.running-tests.html"><img src="images/prev.png" alt="Prev" /></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="usage.requirements.html"><img src="images/next.png" alt="Next" /></a></td></tr></table><hr /></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="usage"></a>Chapter 3. Usage</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><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></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="background.running-tests.html"><img src="images/prev.png" alt="Prev" /></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="usage.requirements.html"><img src="images/next.png" alt="Next" /></a></td></tr><tr><td width="40%" align="left" valign="top">Running a test </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"> Requirements</td></tr></table></div></body></html>
|
@@ -0,0 +1,3 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
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>Installation and maintenance</title><link rel="stylesheet" href="styles/manual.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.68.1" /><link rel="start" href="index.html" title="Ruby-VPI user manual" /><link rel="up" href="usage.html" title="Chapter 3. Usage" /><link rel="prev" href="usage.requirements.html" title="Requirements" /><link rel="next" href="usage.tools.html" title="Tools" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Installation and maintenance</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="usage.requirements.html"><img src="images/prev.png" alt="Prev" /></a> </td><th width="60%" align="center">Chapter 3. Usage</th><td width="20%" align="right"> <a accesskey="n" href="usage.tools.html"><img src="images/next.png" alt="Next" /></a></td></tr></table><hr /></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="usage.installation"></a>Installation and maintenance</h2></div></div></div><p>Once you have satisfied the <a href="usage.requirements.html" title="Requirements">necessary requirements</a>, you can install <span class="application">Ruby-VPI</span> by running the command <span><strong class="command">gem <span class="action">install</span> <em class="replaceable"><code>ruby-vpi</code></em></strong></span>. Likewise, you can uninstall <span class="application">Ruby-VPI</span> by running the command <span><strong class="command">gem <span class="action">uninstall</span> <em class="replaceable"><code>ruby-vpi</code></em></strong></span>. Furthermore, you can upgrade to the latest release of <span class="application">Ruby-VPI</span> by running the command <span><strong class="command">gem <span class="action">update</span> <em class="replaceable"><code>ruby-vpi</code></em></strong></span>.</p><p>You can learn more about using and manipulating RubyGems in <a href="http://www.rubygems.org" target="_top">the RubyGems user manual</a>.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="usage.requirements.html"><img src="images/prev.png" alt="Prev" /></a> </td><td width="20%" align="center"><a accesskey="u" href="usage.html"><img src="images/up.png" alt="Up" /></a></td><td width="40%" align="right"> <a accesskey="n" href="usage.tools.html"><img src="images/next.png" alt="Next" /></a></td></tr><tr><td width="40%" align="left" valign="top">Requirements </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"> Tools</td></tr></table></div></body></html>
|
@@ -0,0 +1,3 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
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>Requirements</title><link rel="stylesheet" href="styles/manual.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.68.1" /><link rel="start" href="index.html" title="Ruby-VPI user manual" /><link rel="up" href="usage.html" title="Chapter 3. Usage" /><link rel="prev" href="usage.html" title="Chapter 3. Usage" /><link rel="next" href="usage.installation.html" title="Installation and maintenance" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Requirements</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="usage.html"><img src="images/prev.png" alt="Prev" /></a> </td><th width="60%" align="center">Chapter 3. Usage</th><td width="20%" align="right"> <a accesskey="n" href="usage.installation.html"><img src="images/next.png" alt="Next" /></a></td></tr></table><hr /></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="usage.requirements"></a>Requirements</h2></div></div></div><p>The following software is necessary in order to use <span class="application">Ruby-VPI</span>.</p><div class="variablelist"><dl><dt><span class="term">Verilog simulator</span></dt><dd><p><span class="application">Ruby-VPI</span> is known to work with the following simulators. Nevertheless, you should be able to use it with any Verilog simulator that supports <span class="acronym">VPI</span>.</p><div class="variablelist"><dl><dt><span class="term"><a href="http://www.icarus.com/eda/Verilog/" target="_top">Icarus Verilog</a></span></dt><dd><p>Version 0.8 or newer is acceptable.</p></dd><dt><span class="term"><a href="http://www.pragmatic-c.com/gpl-cver/" target="_top">GPL Cver</a></span></dt><dd><p>Version 2.11a or newer is acceptable.</p></dd><dt><span class="term"><a href="http://www.synopsys.com/products/simulation/simulation.html" target="_top">Synopsys VCS</a></span></dt><dd><p>Version X-2005.06 or newer is acceptable.</p></dd><dt><span class="term"><a href="http://www.model.com" target="_top">Mentor Modelsim</a></span></dt><dd><p>Version 6.1b or newer is acceptable.</p></dd></dl></div></dd><dt><span class="term"><span><strong class="command">make</strong></span></span></dt><dd><p><a href="http://www.gnu.org/software/make/" target="_top"><span class="acronym">GNU</span> make</a> is preferred but any distribution of <span><strong class="command">make</strong></span> should be acceptable.</p></dd><dt><span class="term">C compiler</span></dt><dd><p><a href="http://www.gnu.org/software/gcc/" target="_top"><span class="acronym">GNU</span> Compiler Collection (<span class="acronym">GCC</span>)</a> is preferred but any C compiler should be acceptable.</p></dd><dt><span class="term"><a href="http://en.wikipedia.org/wiki/Pthreads" target="_top"><span class="acronym">POSIX</span> threads (pthreads)</a></span></dt><dd><p>Header and linkable object files, and operating system support for this library are necessary.</p></dd><dt><span class="term"><a href="http://www.ruby-lang.org" target="_top">Ruby</a></span></dt><dd><p>Version 1.8 or newer, including header and linkable object files for building extensions, is necessary. You can install Ruby by following <a href="http://www.rubygarden.org/faq/section/show/3" target="_top">these instructions</a>.</p></dd><dt><span class="term"><a href="http://rubyforge.org/frs/?group_id=126" target="_top">RubyGems</a></span></dt><dd><p>Any recent version should be acceptable. You can install RubyGems by following <a href="http://www.rubygems.org/read/chapter/3" target="_top">these instructions</a>.</p></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="usage.html"><img src="images/prev.png" alt="Prev" /></a> </td><td width="20%" align="center"><a accesskey="u" href="usage.html"><img src="images/up.png" alt="Up" /></a></td><td width="40%" align="right"> <a accesskey="n" href="usage.installation.html"><img src="images/next.png" alt="Next" /></a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 3. Usage </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"> Installation and maintenance</td></tr></table></div></body></html>
|
@@ -0,0 +1,3 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
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>Tools</title><link rel="stylesheet" href="styles/manual.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.68.1" /><link rel="start" href="index.html" title="Ruby-VPI user manual" /><link rel="up" href="usage.html" title="Chapter 3. Usage" /><link rel="prev" href="usage.installation.html" title="Installation and maintenance" /><link rel="next" href="usage.examples.html" title="Examples" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Tools</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="usage.installation.html"><img src="images/prev.png" alt="Prev" /></a> </td><th width="60%" align="center">Chapter 3. Usage</th><td width="20%" align="right"> <a accesskey="n" href="usage.examples.html"><img src="images/next.png" alt="Next" /></a></td></tr></table><hr /></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="usage.tools"></a>Tools</h2></div></div></div><p>The <code class="filename">bin</code> directory contains various utilities which ease the process of writing tests. Each tool provides help and usage information invoked with the <code class="option">--help</code> option.</p><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="usage.tools.generate-test"></a>Automated test generation</h3></div></div></div><p>The <span><strong class="command">generate_test.rb</strong></span> tool can be used to automatically generate tests from Verilog 2001 module declarations (see <a href="usage.tutorial.html#usage.tutorial.generate-test" title="Generate a test">the section called “Generate a test”</a>). You can try it by running the command <span><strong class="command">generate_test.rb <code class="option">--help</code></strong></span>.</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="usage.tools.verilog-ruby-conv"></a>Verilog to Ruby conversion</h3></div></div></div><p>The <span><strong class="command">header_to_ruby.rb</strong></span> tool can be used to convert Verilog header files into Ruby. You can try it by running the command <span><strong class="command">header_to_ruby.rb <code class="option">--help</code></strong></span>.</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="usage.installation.html"><img src="images/prev.png" alt="Prev" /></a> </td><td width="20%" align="center"><a accesskey="u" href="usage.html"><img src="images/up.png" alt="Up" /></a></td><td width="40%" align="right"> <a accesskey="n" href="usage.examples.html"><img src="images/next.png" alt="Next" /></a></td></tr><tr><td width="40%" align="left" valign="top">Installation and maintenance </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"> Examples</td></tr></table></div></body></html>
|
@@ -0,0 +1,199 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
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>Tutorial</title><link rel="stylesheet" href="styles/manual.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.68.1" /><link rel="start" href="index.html" title="Ruby-VPI user manual" /><link rel="up" href="usage.html" title="Chapter 3. Usage" /><link rel="prev" href="usage.examples.html" title="Examples" /><link rel="next" href="problems.html" title="Chapter 4. Known problems" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Tutorial</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="usage.examples.html"><img src="images/prev.png" alt="Prev" /></a> </td><th width="60%" align="center">Chapter 3. Usage</th><td width="20%" align="right"> <a accesskey="n" href="problems.html"><img src="images/next.png" alt="Next" /></a></td></tr></table><hr /></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="usage.tutorial"></a>Tutorial</h2></div></div></div><div class="procedure"><a id="id2522991"></a><p class="title"><b>Procedure 3.1. Typical way of using <span class="application">Ruby-VPI</span></b></p><ol type="1"><li><p><a href="usage.tutorial.html#usage.tutorial.declare-design" title="Start with a design">Declare the design</a>, which is a Verilog module, using Verilog 2001 syntax.</p></li><li><p><a href="usage.tutorial.html#usage.tutorial.generate-test" title="Generate a test">Generate a test</a> for the design using the <a href="usage.tools.html#usage.tools.generate-test" title="Automated test generation">automated test generator</a> tool.</p></li><li><p><a href="usage.tutorial.html#usage.tutorial.specification" title="Specify your expectations">Identify your expectations</a> for the design and implement them in the specification.</p></li><li><p><a href="usage.tutorial.html#usage.tutorial.implement-proto" title="Implement the prototype">Implement the prototype</a> of the design in Ruby.</p></li><li><p><a href="usage.tutorial.html#usage.tutorial.test-proto" title="Verify the prototype">Verify the prototype</a> against the specification.</p></li><li><p><a href="usage.tutorial.html#usage.tutorial.implement-design" title="Implement the design">Implement the design</a> in Verilog once the prototype has been verified.</p></li><li><p><a href="usage.tutorial.html#usage.tutorial.test-design" title="Verify the design">Verify the design</a> against the specification.</p></li></ol></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="usage.tutorial.declare-design"></a>Start with a design</h3></div></div></div><p>First, we need a design to verify. In this tutorial, <a href="usage.tutorial.html#fig..counter.v_decl" title="Figure 3.1. Declaration of a simple up-counter with synchronous reset">Figure 3.1, “Declaration of a simple up-counter with synchronous reset”</a> will serve as our design. Its interface is composed of the following parts:
|
4
|
+
</p><div class="variablelist"><dl><dt><span class="term"><code class="constant">Size</code></span></dt><dd><p>This parameter defines the number of bits used to represent the counter's value.</p></dd><dt><span class="term"><code class="varname">clock</code></span></dt><dd><p>Each positive edge of this signal causes the <code class="varname">count</code> register to increment.</p></dd><dt><span class="term"><code class="varname">reset</code></span></dt><dd><p>Assertion of this signal causes the <code class="varname">count</code> register to become zero.</p></dd><dt><span class="term"><code class="varname">count</code></span></dt><dd><p>This register contains the counter's value.</p></dd></dl></div><p>
|
5
|
+
</p><div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Important: Before we continue…"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="images/important.png" /></td><th align="left">Before we continue…</th></tr><tr><td align="left" valign="top"><p>Save the source code shown in <a href="usage.tutorial.html#fig..counter.v_decl" title="Figure 3.1. Declaration of a simple up-counter with synchronous reset">Figure 3.1, “Declaration of a simple up-counter with synchronous reset”</a> into a file named <code class="filename">counter.v</code>.</p></td></tr></table></div><div class="figure"><a id="fig..counter.v_decl"></a><p class="title"><b>Figure 3.1. Declaration of a simple up-counter with synchronous reset</b></p><pre class="programlisting">
|
6
|
+
<span class="token">module</span> counter #(<span class="token">parameter</span> <code class="constant">Size</code> = <code class="literal">5</code>) (
|
7
|
+
<span class="token">input</span> <code class="varname">clock</code>,
|
8
|
+
<span class="token">input</span> <code class="varname">reset</code>,
|
9
|
+
<span class="token">output</span> <span class="type">reg</span> [<code class="constant">Size</code> - <code class="literal">1</code> : <code class="literal">0</code>] <code class="varname">count</code>
|
10
|
+
);
|
11
|
+
<span class="token">endmodule</span>
|
12
|
+
</pre></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="usage.tutorial.generate-test"></a>Generate a test</h3></div></div></div><p>Now that we have a design to verify, let us generate a test for it using the automated test generator tool. This tool allows us to implement our specification in either RSpec, unit test, or our very own format. Each format represents a different software development methodology: RSpec represents <a href="glossary.html#term..BDD"><em class="glossterm">BDD</em></a>, unit testing represents <a href="glossary.html#term..TDD"><em class="glossterm">TDD</em></a>, and our own format can represent another methodology.</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png" /></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><p>In this tutorial, we will see how to implement our specification in both RSpec and unit test formats.</p></td></tr></table></div><p>Once we have decided how we want to implement our specification, we can proceed to generate a test for our design. <a href="usage.tutorial.html#fig..generate-test.rspec" title="Figure 3.2. Generating a test with specification in RSpec format">Figure 3.2, “Generating a test with specification in RSpec format”</a> and <a href="usage.tutorial.html#fig..generate-test.unit-test" title="Figure 3.3. Generating a test with specification in unit test format">Figure 3.3, “Generating a test with specification in unit test format”</a> illustrate this process. Here, the test generation tool produces a test composed of the following parts:
|
13
|
+
</p><div class="variablelist"><dl><dt><span class="term">Runner</span></dt><dd><p>Written in Rake, this file builds and runs the test bench.</p></dd><dt><span class="term">Bench</span></dt><dd><p>Written in Verilog and Ruby, these files define the testing environment.</p></dd><dt><span class="term">Design</span></dt><dd><p>Written in Ruby, this file provides an interface to the design under test.</p></dd><dt><span class="term">Prototype</span></dt><dd><p>Written in Ruby, this file defines a prototype of the design under test.</p></dd><dt><span class="term">Specification</span></dt><dd><p>Written in Ruby, this file verifies the design.</p></dd></dl></div><p>
|
14
|
+
</p><p>The reason for dividing a single test into these parts is mainly to decouple the design from the specification. This allows you to focus on writing the specification while the remainder is automatically generated by the tool. For example, when the interface of a Verilog module changes, you would simply re-run this tool to incorporate those changes into the test without diverting your focus from the specification.</p><div class="figure"><a id="fig..generate-test.rspec"></a><p class="title"><b>Figure 3.2. Generating a test with specification in RSpec format</b></p><pre class="screen">
|
15
|
+
<code class="prompt">$</code> <strong class="userinput"><code><span><strong class="command">generate_test.rb <em class="replaceable"><code>counter.v</code></em> <code class="option">--rspec</code> <code class="option">--name</code> <em class="replaceable"><code>rspecTest</code></em></strong></span></code></strong>
|
16
|
+
<code class="computeroutput">Using name `rspecTest' for generated test.
|
17
|
+
Using RSpec specification format.
|
18
|
+
|
19
|
+
Parsed module: counter
|
20
|
+
- Generated runner: counter_rspecTest_runner.rake
|
21
|
+
- Generated bench: counter_rspecTest_bench.v
|
22
|
+
- Generated bench: counter_rspecTest_bench.rb
|
23
|
+
- Generated design: counter_rspecTest_design.rb
|
24
|
+
- Generated prototype: counter_rspecTest_proto.rb
|
25
|
+
- Generated specification: counter_rspecTest_spec.rb</code>
|
26
|
+
</pre></div><div class="figure"><a id="fig..generate-test.unit-test"></a><p class="title"><b>Figure 3.3. Generating a test with specification in unit test format</b></p><pre class="screen">
|
27
|
+
<code class="prompt">$</code> <strong class="userinput"><code><span><strong class="command">generate_test.rb <em class="replaceable"><code>counter.v</code></em> <code class="option">--unit</code> <code class="option">--name</code> <em class="replaceable"><code>unitTest</code></em></strong></span></code></strong>
|
28
|
+
<code class="computeroutput">Using name `unitTest' for generated test.
|
29
|
+
Using UnitTest specification format.
|
30
|
+
|
31
|
+
Parsed module: counter
|
32
|
+
- Generated runner: counter_unitTest_runner.rake
|
33
|
+
- Generated bench: counter_unitTest_bench.v
|
34
|
+
- Generated bench: counter_unitTest_bench.rb
|
35
|
+
- Generated design: counter_unitTest_design.rb
|
36
|
+
- Generated prototype: counter_unitTest_proto.rb
|
37
|
+
- Generated specification: counter_unitTest_spec.rb</code>
|
38
|
+
</pre></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="usage.tutorial.specification"></a>Specify your expectations</h3></div></div></div><p>So far, the test generation tool has created a basic foundation for our test. Now we must build upon this foundation by identifying our expectations of the design. That is, how do we expect the design to <span class="emphasis"><em>behave</em></span> under certain conditions?</p><p>The following is a reasonable set of expectations for our simple counter:
|
39
|
+
</p><div class="itemizedlist"><ul type="disc"><li><p>A resetted counter's value should be zero.</p></li><li><p>A resetted counter's value should increment by one count upon each rising clock edge.</p></li><li><p>A counter with the maximum value should overflow upon increment.</p></li></ul></div><p>
|
40
|
+
</p><p>Now that we have identified a set of expectations for our design, we are ready to implement them in our specification. <a href="usage.tutorial.html#fig..counter_rspecTest_spec.rb" title="Figure 3.4. Specification implemented in RSpec format">Figure 3.4, “Specification implemented in RSpec format”</a> and <a href="usage.tutorial.html#fig..counter_unitTest_spec.rb" title="Figure 3.5. Specification implemented in unit test format">Figure 3.5, “Specification implemented in unit test format”</a> illustrate this process. Note the striking similarities between our expectations and their implementation.</p><div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Important: Before we continue…"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="images/important.png" /></td><th align="left">Before we continue…</th></tr><tr><td align="left" valign="top"><div class="itemizedlist"><ul type="disc"><li><p>Append the following code to the files named <code class="filename">counter_rspecTest_design.rb</code> and <code class="filename">counter_unitTest_design.rb</code>.</p><pre class="programlisting">
|
41
|
+
<span class="token">class</span> <code class="constant">Counter</code>
|
42
|
+
<span class="token">def</span> <code class="function">reset!</code>
|
43
|
+
<code class="varname">@reset</code>.<code class="function">intVal</code> = <code class="literal">1</code>
|
44
|
+
<code class="function">relay_verilog</code> <em><span class="remark"># advance the clock</span></em>
|
45
|
+
<code class="varname">@reset</code>.<code class="function">intVal</code> = <code class="literal">0</code>
|
46
|
+
<span class="token">end</span>
|
47
|
+
<span class="token">end</span>
|
48
|
+
</pre></li><li><p>Replace the contents of the file named <code class="filename">counter_rspecTest_spec.rb</code> with the source code shown in <a href="usage.tutorial.html#fig..counter_rspecTest_spec.rb" title="Figure 3.4. Specification implemented in RSpec format">Figure 3.4, “Specification implemented in RSpec format”</a>.</p></li><li><p>Replace the contents of the file named <code class="filename">counter_unitTest_spec.rb</code> with the source code shown in <a href="usage.tutorial.html#fig..counter_unitTest_spec.rb" title="Figure 3.5. Specification implemented in unit test format">Figure 3.5, “Specification implemented in unit test format”</a>.</p></li></ul></div></td></tr></table></div><div class="figure"><a id="fig..counter_rspecTest_spec.rb"></a><p class="title"><b>Figure 3.4. Specification implemented in RSpec format</b></p><pre class="programlisting">
|
49
|
+
<code class="constant">LIMIT</code> = <code class="literal">2</code> ** <code class="constant">Counter</code>::<code class="constant">Size</code> <em><span class="remark"># lowest upper bound of counter's value</span></em>
|
50
|
+
<code class="constant">MAX</code> = <code class="constant">LIMIT</code> - <code class="literal">1</code> <em><span class="remark"># maximum allowed value for a counter</span></em>
|
51
|
+
|
52
|
+
<code class="function">include</code> <code class="constant">Vpi</code>
|
53
|
+
|
54
|
+
<code class="function">context</code> <code class="literal">"A resetted counter's value"</code> <span class="token">do</span>
|
55
|
+
<code class="function">setup</code> <span class="token">do</span>
|
56
|
+
<code class="varname">@design</code> = <code class="constant">Counter</code>.<code class="function">new</code>
|
57
|
+
<code class="varname">@design</code>.<code class="function">reset!</code>
|
58
|
+
<span class="token">end</span>
|
59
|
+
|
60
|
+
<code class="function">specify</code> <code class="literal">"should be zero"</code> <span class="token">do</span>
|
61
|
+
<code class="varname">@design</code>.<code class="function">count</code>.<code class="function">intVal</code>.<code class="function">should_equal</code> <code class="literal">0</code>
|
62
|
+
<span class="token">end</span>
|
63
|
+
|
64
|
+
<code class="function">specify</code> <code class="literal">"should increment by one count upon each rising clock edge"</code> <span class="token">do</span>
|
65
|
+
<code class="constant">LIMIT</code>.<code class="function">times</code> <span class="token">do</span> |<code class="varname">i</code>|
|
66
|
+
<code class="varname">@design</code>.<code class="function">count</code>.<code class="function">intVal</code>.<code class="function">should_equal</code> <code class="varname">i</code>
|
67
|
+
<code class="function">relay_verilog</code> <em><span class="remark"># advance the clock</span></em>
|
68
|
+
<span class="token">end</span>
|
69
|
+
<span class="token">end</span>
|
70
|
+
<span class="token">end</span>
|
71
|
+
|
72
|
+
<code class="function">context</code> <code class="literal">"A counter with the maximum value"</code> <span class="token">do</span>
|
73
|
+
<code class="function">setup</code> <span class="token">do</span>
|
74
|
+
<code class="varname">@design</code> = <code class="constant">Counter</code>.<code class="function">new</code>
|
75
|
+
<code class="varname">@design</code>.<code class="function">reset!</code>
|
76
|
+
|
77
|
+
<em><span class="remark"># increment the counter to maximum value</span></em>
|
78
|
+
<code class="constant">MAX</code>.<code class="function">times</code> <span class="token">do</span> <code class="function">relay_verilog</code> <span class="token">end</span>
|
79
|
+
<code class="varname">@design</code>.<code class="function">count</code>.<code class="function">intVal</code>.<code class="function">should_equal</code> <code class="constant">MAX</code>
|
80
|
+
<span class="token">end</span>
|
81
|
+
|
82
|
+
<code class="function">specify</code> <code class="literal">"should overflow upon increment"</code> <span class="token">do</span>
|
83
|
+
<code class="function">relay_verilog</code> <em><span class="remark"># increment the counter</span></em>
|
84
|
+
<code class="varname">@design</code>.<code class="function">count</code>.<code class="function">intVal</code>.<code class="function">should_equal</code> <code class="literal">0</code>
|
85
|
+
<span class="token">end</span>
|
86
|
+
<span class="token">end</span>
|
87
|
+
</pre></div><div class="figure"><a id="fig..counter_unitTest_spec.rb"></a><p class="title"><b>Figure 3.5. Specification implemented in unit test format</b></p><pre class="programlisting">
|
88
|
+
<code class="constant">LIMIT</code> = <code class="literal">2</code> ** <code class="constant">Counter</code>::<code class="constant">Size</code> <em><span class="remark"># lowest upper bound of counter's value</span></em>
|
89
|
+
<code class="constant">MAX</code> = <code class="constant">LIMIT</code> - <code class="literal">1</code> <em><span class="remark"># maximum allowed value for a counter</span></em>
|
90
|
+
|
91
|
+
<span class="token">class</span> <code class="constant">ResettedCounterValue</code> < <code class="constant">Test</code>::<code class="constant">Unit</code>::<code class="constant">TestCase</code>
|
92
|
+
<code class="function">include</code> <code class="constant">Vpi</code>
|
93
|
+
|
94
|
+
<span class="token">def</span> <code class="function">setup</code>
|
95
|
+
<code class="varname">@design</code> = <code class="constant">Counter</code>.<code class="function">new</code>
|
96
|
+
<code class="varname">@design</code>.<code class="function">reset!</code>
|
97
|
+
<span class="token">end</span>
|
98
|
+
|
99
|
+
<span class="token">def</span> <code class="function">test_zero</code>
|
100
|
+
<code class="function">assert_equal</code> <code class="literal">0</code>, <code class="varname">@design</code>.<code class="function">count</code>.<code class="function">intVal</code>
|
101
|
+
<span class="token">end</span>
|
102
|
+
|
103
|
+
<span class="token">def</span> <code class="function">test_increment</code>
|
104
|
+
<code class="constant">LIMIT</code>.<code class="function">times</code> <span class="token">do</span> |<code class="varname">i</code>|
|
105
|
+
<code class="function">assert_equal</code> <code class="varname">i</code>, <code class="varname">@design</code>.<code class="function">count</code>.<code class="function">intVal</code>
|
106
|
+
<code class="function">relay_verilog</code> <em><span class="remark"># advance the clock</span></em>
|
107
|
+
<span class="token">end</span>
|
108
|
+
<span class="token">end</span>
|
109
|
+
<span class="token">end</span>
|
110
|
+
|
111
|
+
<span class="token">class</span> <code class="constant">MaximumCounterValue</code> < <code class="constant">Test</code>::<code class="constant">Unit</code>::<code class="constant">TestCase</code>
|
112
|
+
<code class="function">include</code> <code class="constant">Vpi</code>
|
113
|
+
|
114
|
+
<span class="token">def</span> <code class="function">setup</code>
|
115
|
+
<code class="varname">@design</code> = <code class="constant">Counter</code>.<code class="function">new</code>
|
116
|
+
<code class="varname">@design</code>.<code class="function">reset!</code>
|
117
|
+
|
118
|
+
<em><span class="remark"># increment the counter to maximum value</span></em>
|
119
|
+
<code class="constant">MAX</code>.<code class="function">times</code> <span class="token">do</span> <code class="function">relay_verilog</code> <span class="token">end</span>
|
120
|
+
<code class="function">assert_equal</code> <code class="constant">MAX</code>, <code class="varname">@design</code>.<code class="function">count</code>.<code class="function">intVal</code>
|
121
|
+
<span class="token">end</span>
|
122
|
+
|
123
|
+
<span class="token">def</span> <code class="function">test_overflow</code>
|
124
|
+
<code class="function">relay_verilog</code> <em><span class="remark"># increment the counter</span></em>
|
125
|
+
<code class="function">assert_equal</code> <code class="literal">0</code>, <code class="varname">@design</code>.<code class="function">count</code>.<code class="function">intVal</code>
|
126
|
+
<span class="token">end</span>
|
127
|
+
<span class="token">end</span>
|
128
|
+
</pre></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="usage.tutorial.implement-proto"></a>Implement the prototype</h3></div></div></div><p>Now that we have a specification against which to verify our design, let us build a prototype of our design. By doing so, we exercise our specification, experience potential problems that may arise when we later implement our design in Verilog, and gain confidence in our work. <a href="usage.tutorial.html#fig..counter_proto.rb" title="Figure 3.6. Ruby prototype of our Verilog design">Figure 3.6, “Ruby prototype of our Verilog design”</a> shows the completed prototype for our design.</p><div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Important: Before we continue…"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="images/important.png" /></td><th align="left">Before we continue…</th></tr><tr><td align="left" valign="top"><p>Replace the contents of the files named <code class="filename">counter_rspecTest_proto.rb</code> and <code class="filename">counter_unitTest_proto.rb</code> with the source code shown in <a href="usage.tutorial.html#fig..counter_proto.rb" title="Figure 3.6. Ruby prototype of our Verilog design">Figure 3.6, “Ruby prototype of our Verilog design”</a>.</p></td></tr></table></div><div class="figure"><a id="fig..counter_proto.rb"></a><p class="title"><b>Figure 3.6. Ruby prototype of our Verilog design</b></p><pre class="programlisting">
|
129
|
+
<span class="token">class</span> <code class="constant">CounterProto</code> < <code class="constant">Counter</code>
|
130
|
+
<span class="token">def</span> <code class="function">simulate!</code>
|
131
|
+
<span class="token">if</span> <code class="varname">@reset</code>.<code class="function">intVal</code> == <code class="literal">1</code>
|
132
|
+
<code class="varname">@count</code>.<code class="function">intVal</code> = <code class="literal">0</code>
|
133
|
+
<span class="token">else</span>
|
134
|
+
<code class="varname">@count</code>.<code class="function">intVal</code> += <code class="literal">1</code>
|
135
|
+
<span class="token">end</span>
|
136
|
+
<span class="token">end</span>
|
137
|
+
<span class="token">end</span>
|
138
|
+
</pre></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="usage.tutorial.test-proto"></a>Verify the prototype</h3></div></div></div><p>Now that we have implemented our prototype, we are ready to verify it against our specification by running the test. <a href="usage.tutorial.html#fig..test-proto.rspec" title="Figure 3.7. Running a test with specification in RSpec format">Figure 3.7, “Running a test with specification in RSpec format”</a> and <a href="usage.tutorial.html#fig..test-proto.unit-test" title="Figure 3.8. Running a test with specification in unit test format">Figure 3.8, “Running a test with specification in unit test format”</a> illustrate this process.</p><p>Here, the <code class="varname">PROTO</code> environment variable is set—any value is fine—before running the test in order to replace the design with the prototype in the simulation. Otherwise, our design will be verified—instead of our prototype—against our specification. Furthermore, the manner in which the <code class="varname">PROTO</code> environment variable is set in these figures follows the syntax of the <span class="application"><span class="acronym">GNU</span> <span class="acronym">BASH</span></span> shell. If you use a different shell, you may have to use different syntax, or a different command altogether, in order to set this variable. Finally, the Icarus Verilog simulator, denoted by <em class="replaceable"><code>ivl</code></em>, is used to simulate our design.</p><div class="figure"><a id="fig..test-proto.rspec"></a><p class="title"><b>Figure 3.7. Running a test with specification in RSpec format</b></p><pre class="screen">
|
139
|
+
<code class="prompt">$</code> <strong class="userinput"><code><span><strong class="command">export <em class="replaceable"><code>PROTO=1</code></em></strong></span></code></strong>
|
140
|
+
<code class="prompt">$</code> <strong class="userinput"><code><span><strong class="command">rake <code class="option">-f</code> <em class="replaceable"><code>counter_rspecTest_runner.rake</code></em> <em class="replaceable"><code>ivl</code></em></strong></span></code></strong>
|
141
|
+
<code class="computeroutput">counter_rspecTest: verifying prototype instead of design
|
142
|
+
|
143
|
+
A resetted counter's value
|
144
|
+
- should be zero
|
145
|
+
- should increment by one count upon each rising clock edge
|
146
|
+
|
147
|
+
A counter with the maximum value
|
148
|
+
- should overflow upon increment
|
149
|
+
|
150
|
+
Finished in 0.018199 seconds
|
151
|
+
|
152
|
+
3 specifications, 0 failures</code>
|
153
|
+
</pre></div><div class="figure"><a id="fig..test-proto.unit-test"></a><p class="title"><b>Figure 3.8. Running a test with specification in unit test format</b></p><pre class="screen">
|
154
|
+
<code class="prompt">$</code> <strong class="userinput"><code><span><strong class="command">export <em class="replaceable"><code>PROTO=1</code></em></strong></span></code></strong>
|
155
|
+
<code class="prompt">$</code> <strong class="userinput"><code><span><strong class="command">rake <code class="option">-f</code> <em class="replaceable"><code>counter_unitTest_runner.rake</code></em> <em class="replaceable"><code>ivl</code></em></strong></span></code></strong>
|
156
|
+
<code class="computeroutput">counter_unitTest: verifying prototype instead of design
|
157
|
+
|
158
|
+
Loaded suite counter_unitTest_bench
|
159
|
+
Started
|
160
|
+
...
|
161
|
+
Finished in 0.040668 seconds.
|
162
|
+
|
163
|
+
3 tests, 35 assertions, 0 failures, 0 errors</code>
|
164
|
+
</pre></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="usage.tutorial.implement-design"></a>Implement the design</h3></div></div></div><p>Now that we have implemented and verified our prototype, we are ready to implement our design. This is often quite simple because we translate <span class="emphasis"><em>existing</em></span> code from Ruby into Verilog. <a href="usage.tutorial.html#fig..counter.v_impl" title="Figure 3.9. Implementation of a simple up-counter with synchronous reset">Figure 3.9, “Implementation of a simple up-counter with synchronous reset”</a> illustrates the result of this process.</p><div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Important: Before we continue…"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="images/important.png" /></td><th align="left">Before we continue…</th></tr><tr><td align="left" valign="top"><p>Replace the contents of the file named <code class="filename">counter.v</code> with the source code shown in <a href="usage.tutorial.html#fig..counter.v_impl" title="Figure 3.9. Implementation of a simple up-counter with synchronous reset">Figure 3.9, “Implementation of a simple up-counter with synchronous reset”</a>.</p></td></tr></table></div><div class="figure"><a id="fig..counter.v_impl"></a><p class="title"><b>Figure 3.9. Implementation of a simple up-counter with synchronous reset</b></p><pre class="programlisting">
|
165
|
+
<span class="token">module</span> counter #(<span class="token">parameter</span> <code class="constant">Size</code> = <code class="literal">5</code>) (
|
166
|
+
<span class="token">input</span> <code class="varname">clock</code>,
|
167
|
+
<span class="token">input</span> <code class="varname">reset</code>,
|
168
|
+
<span class="token">output</span> <span class="type">reg</span> [<code class="constant">Size</code> - <code class="literal">1</code> : <code class="literal">0</code>] <code class="varname">count</code>
|
169
|
+
);
|
170
|
+
<span class="token">always</span> @(<span class="token">posedge</span> <code class="varname">clock</code>) <span class="token">begin</span>
|
171
|
+
<span class="token">if</span> (<code class="varname">reset</code>)
|
172
|
+
<code class="varname">count</code> <= <code class="literal">0</code>;
|
173
|
+
<span class="token">else</span>
|
174
|
+
<code class="varname">count</code> <= <code class="varname">count</code> + <code class="literal">1</code>;
|
175
|
+
<span class="token">end</span>
|
176
|
+
<span class="token">endmodule</span>
|
177
|
+
</pre></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="usage.tutorial.test-design"></a>Verify the design</h3></div></div></div><p>Now that we have implemented our design, we are ready to verify it against our specification by running the test. <a href="usage.tutorial.html#fig..test-design.rspec" title="Figure 3.10. Running a test with specification in RSpec format">Figure 3.10, “Running a test with specification in RSpec format”</a> and <a href="usage.tutorial.html#fig..test-design.unit-test" title="Figure 3.11. Running a test with specification in unit test format">Figure 3.11, “Running a test with specification in unit test format”</a> illustrate this process.</p><p>Here, the <code class="varname">PROTO</code> environment variable is unset before the test is run in order to prevent the design from being replaced by the prototype. Otherwise, our prototype will be verified—instead of our design—against our specification. Furthermore, the manner in which the <code class="varname">PROTO</code> environment variable is unset in these figures follows the syntax of the <span class="application"><span class="acronym">GNU</span> <span class="acronym">BASH</span></span> shell. If you use a different shell, you may have to use different syntax, or a different command altogether, in order to set this variable. Finally, the Icarus Verilog simulator, denoted by <em class="replaceable"><code>ivl</code></em>, is used to simulate our design.</p><div class="figure"><a id="fig..test-design.rspec"></a><p class="title"><b>Figure 3.10. Running a test with specification in RSpec format</b></p><pre class="screen">
|
178
|
+
<code class="prompt">$</code> <strong class="userinput"><code><span><strong class="command">unset <em class="replaceable"><code>PROTO</code></em></strong></span></code></strong>
|
179
|
+
<code class="prompt">$</code> <strong class="userinput"><code><span><strong class="command">rake <code class="option">-f</code> <em class="replaceable"><code>counter_rspecTest_runner.rake</code></em> <em class="replaceable"><code>ivl</code></em></strong></span></code></strong>
|
180
|
+
<code class="computeroutput">A resetted counter's value
|
181
|
+
- should be zero
|
182
|
+
- should increment by one count upon each rising clock edge
|
183
|
+
|
184
|
+
A counter with the maximum value
|
185
|
+
- should overflow upon increment
|
186
|
+
|
187
|
+
Finished in 0.005628 seconds
|
188
|
+
|
189
|
+
3 specifications, 0 failures</code>
|
190
|
+
</pre></div><div class="figure"><a id="fig..test-design.unit-test"></a><p class="title"><b>Figure 3.11. Running a test with specification in unit test format</b></p><pre class="screen">
|
191
|
+
<code class="prompt">$</code> <strong class="userinput"><code><span><strong class="command">unset <em class="replaceable"><code>PROTO</code></em></strong></span></code></strong>
|
192
|
+
<code class="prompt">$</code> <strong class="userinput"><code><span><strong class="command">rake <code class="option">-f</code> <em class="replaceable"><code>counter_unitTest_runner.rake</code></em> <em class="replaceable"><code>ivl</code></em></strong></span></code></strong>
|
193
|
+
<code class="computeroutput">Loaded suite counter_unitTest_bench
|
194
|
+
Started
|
195
|
+
...
|
196
|
+
Finished in 0.006766 seconds.
|
197
|
+
|
198
|
+
3 tests, 35 assertions, 0 failures, 0 errors</code>
|
199
|
+
</pre></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="usage.examples.html"><img src="images/prev.png" alt="Prev" /></a> </td><td width="20%" align="center"><a accesskey="u" href="usage.html"><img src="images/up.png" alt="Up" /></a></td><td width="40%" align="right"> <a accesskey="n" href="problems.html"><img src="images/next.png" alt="Next" /></a></td></tr><tr><td width="40%" align="left" valign="top">Examples </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"> Chapter 4. Known problems</td></tr></table></div></body></html>
|