ruby-vpi 8.2.0 → 9.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/HEADER +0 -19
- data/HISTORY +40 -0
- data/README +20 -2
- data/Rakefile +38 -42
- data/bin/generate_test.rb +50 -35
- data/bin/generate_test_tpl/bench.rb +3 -3
- data/bin/generate_test_tpl/bench.v +1 -1
- data/bin/generate_test_tpl/runner.rake +3 -2
- data/bin/generate_test_tpl/spec.rb +2 -2
- data/doc/background.organization.html +1 -1
- data/doc/glossary.html +1 -1
- data/doc/index.html +2 -2
- data/doc/manual.txt +163 -83
- data/doc/problems.html +1 -1
- data/doc/problems.ruby.html +1 -1
- data/doc/src/manual.xml +132 -49
- data/doc/usage.examples.html +1 -1
- data/doc/usage.html +1 -1
- data/doc/usage.installation.html +2 -2
- data/doc/usage.recommendations.html +3 -0
- data/doc/usage.requirements.html +1 -1
- data/doc/usage.tutorial.html +46 -42
- data/ext/extconf.rb +5 -2
- data/ext/relay.c +138 -0
- data/ext/{relay.hin → relay.h} +7 -7
- data/ext/{swig.cin → swig.c} +5 -7
- data/ext/{swig.hin → swig.h} +4 -4
- data/ext/verilog.h +1 -2
- data/ext/vlog.c +86 -0
- data/ext/{vlog.hin → vlog.h} +9 -12
- data/header.html +0 -31
- data/header.part.html +0 -31
- data/history.html +72 -31
- data/history.part.html +72 -0
- data/lib/ruby-vpi.rb +16 -0
- data/lib/ruby-vpi/runner.rb +34 -16
- data/memo.html +0 -31
- data/readme.html +33 -33
- data/readme.part.html +34 -3
- data/ref/c/annotated.html +1 -1
- data/ref/c/common_8h.html +1 -1
- data/ref/c/files.html +7 -8
- data/ref/c/functions.html +2 -2
- data/ref/c/functions_vars.html +2 -2
- data/ref/c/globals.html +1 -1
- data/ref/c/globals_0x63.html +1 -1
- data/ref/c/globals_0x65.html +1 -1
- data/ref/c/globals_0x66.html +1 -1
- data/ref/c/globals_0x70.html +1 -1
- data/ref/c/globals_0x72.html +9 -9
- data/ref/c/globals_0x73.html +3 -3
- data/ref/c/globals_0x74.html +1 -1
- data/ref/c/globals_0x76.html +5 -5
- data/ref/c/globals_0x78.html +1 -1
- data/ref/c/globals_defs.html +1 -1
- data/ref/c/globals_defs_0x65.html +1 -1
- data/ref/c/globals_defs_0x70.html +1 -1
- data/ref/c/globals_defs_0x76.html +2 -2
- data/ref/c/globals_defs_0x78.html +1 -1
- data/ref/c/globals_enum.html +1 -1
- data/ref/c/globals_eval.html +1 -1
- data/ref/c/globals_func.html +11 -11
- data/ref/c/globals_type.html +1 -1
- data/ref/c/globals_vars.html +5 -5
- data/ref/c/index.html +1 -1
- data/ref/c/relay_8c.html +214 -0
- data/ref/c/{relay_8hin.html → relay_8h.html} +23 -23
- data/ref/c/structrelay____RubyOptions____def.html +6 -6
- data/ref/c/structt__cb__data.html +1 -1
- data/ref/c/structt__vpi__delay.html +1 -1
- data/ref/c/structt__vpi__error__info.html +1 -1
- data/ref/c/structt__vpi__strengthval.html +1 -1
- data/ref/c/structt__vpi__systf__data.html +1 -1
- data/ref/c/structt__vpi__time.html +1 -1
- data/ref/c/structt__vpi__value.html +1 -1
- data/ref/c/structt__vpi__vecval.html +1 -1
- data/ref/c/structt__vpi__vlog__info.html +1 -1
- data/ref/c/swig_8c.html +80 -0
- data/ref/c/{swig_8hin.html → swig_8h.html} +13 -13
- data/ref/c/verilog_8h.html +3 -3
- data/ref/c/{vlog_8cin.html → vlog_8c.html} +30 -21
- data/ref/c/{vlog_8hin.html → vlog_8h.html} +12 -12
- data/ref/c/vpi__user_8h.html +1 -1
- data/ref/ruby/classes/ERB.html +5 -5
- data/ref/ruby/classes/ERB.src/{M000033.html → M000034.html} +0 -0
- data/ref/ruby/classes/FileUtils.html +10 -10
- data/ref/ruby/classes/FileUtils.src/M000089.html +5 -5
- data/ref/ruby/classes/FileUtils.src/M000090.html +18 -0
- data/ref/ruby/classes/Integer.html +68 -68
- data/ref/ruby/classes/Integer.src/M000012.html +12 -5
- data/ref/ruby/classes/Integer.src/M000013.html +5 -5
- data/ref/ruby/classes/Integer.src/M000014.html +5 -5
- data/ref/ruby/classes/Integer.src/M000015.html +5 -5
- data/ref/ruby/classes/Integer.src/M000016.html +5 -5
- data/ref/ruby/classes/Integer.src/M000017.html +18 -0
- data/ref/ruby/classes/Integer.src/M000020.html +9 -9
- data/ref/ruby/classes/Integer.src/M000021.html +9 -12
- data/ref/ruby/classes/Integer.src/M000022.html +12 -18
- data/ref/ruby/classes/Integer.src/M000023.html +18 -12
- data/ref/ruby/classes/Integer.src/M000024.html +12 -17
- data/ref/ruby/classes/Integer.src/M000025.html +30 -0
- data/ref/ruby/classes/OutputInfo.html +6 -6
- data/ref/ruby/classes/OutputInfo.src/{M000029.html → M000030.html} +37 -37
- data/ref/ruby/classes/RDoc.html +5 -5
- data/ref/ruby/classes/RDoc.src/{M000092.html → M000093.html} +0 -0
- data/ref/ruby/classes/RubyVpi.html +16 -10
- data/ref/ruby/classes/RubyVpi.src/M000091.html +37 -7
- data/ref/ruby/classes/RubyVpi.src/M000092.html +20 -0
- data/ref/ruby/classes/RubyVpi/Config.html +148 -0
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.html +45 -45
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000081.html +5 -5
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000082.html +5 -9
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000083.html +9 -31
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000084.html +31 -69
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000085.html +69 -114
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000086.html +114 -13
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000087.html +13 -5
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000088.html +18 -0
- data/ref/ruby/classes/String.html +10 -10
- data/ref/ruby/classes/String.src/M000032.html +28 -5
- data/ref/ruby/classes/String.src/M000033.html +18 -0
- data/ref/ruby/classes/Table.html +20 -20
- data/ref/ruby/classes/Table.src/M000026.html +25 -5
- data/ref/ruby/classes/Table.src/M000027.html +5 -5
- data/ref/ruby/classes/Table.src/M000028.html +5 -5
- data/ref/ruby/classes/Table.src/M000029.html +18 -0
- data/ref/ruby/classes/Template.html +5 -5
- data/ref/ruby/classes/Template.src/{M000030.html → M000031.html} +4 -4
- data/ref/ruby/classes/VerilogParser.html +5 -5
- data/ref/ruby/classes/VerilogParser.src/{M000004.html → M000005.html} +0 -0
- data/ref/ruby/classes/VerilogParser/Module.html +5 -5
- data/ref/ruby/classes/VerilogParser/Module.src/{M000005.html → M000006.html} +0 -0
- data/ref/ruby/classes/VerilogParser/Module/Parameter.html +5 -5
- data/ref/ruby/classes/VerilogParser/Module/Parameter.src/{M000010.html → M000011.html} +0 -0
- data/ref/ruby/classes/VerilogParser/Module/Port.html +20 -20
- data/ref/ruby/classes/VerilogParser/Module/Port.src/M000007.html +8 -5
- data/ref/ruby/classes/VerilogParser/Module/Port.src/M000008.html +5 -5
- data/ref/ruby/classes/VerilogParser/Module/Port.src/M000009.html +5 -5
- data/ref/ruby/classes/VerilogParser/Module/Port.src/M000010.html +18 -0
- data/ref/ruby/classes/XX/Document.html +45 -45
- data/ref/ruby/classes/XX/Document.src/M000072.html +9 -7
- data/ref/ruby/classes/XX/Document.src/M000073.html +7 -7
- data/ref/ruby/classes/XX/Document.src/M000074.html +7 -7
- data/ref/ruby/classes/XX/Document.src/M000075.html +7 -9
- data/ref/ruby/classes/XX/Document.src/M000076.html +9 -8
- data/ref/ruby/classes/XX/Document.src/M000077.html +8 -8
- data/ref/ruby/classes/XX/Document.src/M000078.html +8 -21
- data/ref/ruby/classes/XX/Document.src/M000079.html +21 -85
- data/ref/ruby/classes/XX/Document.src/M000080.html +98 -0
- data/ref/ruby/classes/XX/HTML4.html +5 -5
- data/ref/ruby/classes/XX/HTML4.src/{M000035.html → M000036.html} +0 -0
- data/ref/ruby/classes/XX/HTML4/Strict.html +5 -5
- data/ref/ruby/classes/XX/HTML4/Strict.src/{M000037.html → M000038.html} +0 -0
- data/ref/ruby/classes/XX/HTML4/Transitional.html +5 -5
- data/ref/ruby/classes/XX/HTML4/Transitional.src/{M000036.html → M000037.html} +0 -0
- data/ref/ruby/classes/XX/Markup.html +5 -5
- data/ref/ruby/classes/XX/Markup.src/{M000042.html → M000043.html} +0 -0
- data/ref/ruby/classes/XX/Markup/ClassMethods.html +40 -40
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000044.html +9 -7
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000045.html +7 -12
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000046.html +12 -7
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000047.html +7 -14
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000048.html +14 -7
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000049.html +7 -14
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000050.html +14 -9
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000051.html +22 -0
- data/ref/ruby/classes/XX/Markup/InstanceMethods.html +100 -100
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000052.html +43 -20
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000053.html +20 -18
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000054.html +18 -35
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000055.html +35 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000056.html +7 -18
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000057.html +18 -19
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000058.html +19 -19
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000059.html +19 -15
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000060.html +15 -10
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000061.html +10 -13
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000062.html +13 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000063.html +7 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000064.html +7 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000065.html +7 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000066.html +7 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000067.html +7 -8
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000068.html +8 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000069.html +7 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000070.html +7 -7
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000071.html +20 -0
- data/ref/ruby/classes/XX/XHTML.html +5 -5
- data/ref/ruby/classes/XX/XHTML.src/{M000038.html → M000039.html} +0 -0
- data/ref/ruby/classes/XX/XHTML/Strict.html +5 -5
- data/ref/ruby/classes/XX/XHTML/Strict.src/{M000040.html → M000041.html} +0 -0
- data/ref/ruby/classes/XX/XHTML/Transitional.html +5 -5
- data/ref/ruby/classes/XX/XHTML/Transitional.src/{M000039.html → M000040.html} +0 -0
- data/ref/ruby/classes/XX/XML.html +5 -5
- data/ref/ruby/classes/XX/XML.src/{M000034.html → M000035.html} +0 -0
- data/ref/ruby/classes/XX/XMLish.html +5 -5
- data/ref/ruby/classes/XX/XMLish.src/{M000041.html → M000042.html} +0 -0
- data/ref/ruby/created.rid +1 -1
- data/ref/ruby/files/bin/generate_test_rb.html +49 -9
- data/ref/ruby/files/bin/generate_test_rb.src/M000001.html +5 -16
- data/ref/ruby/files/bin/generate_test_rb.src/M000002.html +39 -0
- data/ref/ruby/files/bin/header_to_ruby_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/erb_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/integer_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/rake_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/rcov_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/rdoc_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/rspec_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/runner_proxy_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/runner_rb.html +22 -21
- data/ref/ruby/files/lib/ruby-vpi/runner_rb.src/M000003.html +11 -13
- data/ref/ruby/files/lib/ruby-vpi/runner_rb.src/M000004.html +26 -0
- data/ref/ruby/files/lib/ruby-vpi/verilog_parser_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/vpi_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi/xx_rb.html +1 -1
- data/ref/ruby/files/lib/ruby-vpi_rb.html +1 -1
- data/ref/ruby/fr_class_index.html +1 -0
- data/ref/ruby/fr_method_index.html +93 -92
- data/samp/counter/{counter_rspecTest_bench.rb → counter_rspec_bench.rb} +2 -2
- data/samp/counter/{counter_rspecTest_bench.v → counter_rspec_bench.v} +3 -3
- data/samp/counter/{counter_unitTest_design.rb → counter_rspec_design.rb} +3 -3
- data/samp/counter/{counter_rspecTest_proto.rb → counter_rspec_proto.rb} +0 -0
- data/samp/counter/{counter_unitTest_runner.rake → counter_rspec_runner.rake} +5 -4
- data/samp/counter/{counter_rspecTest_spec.rb → counter_rspec_spec.rb} +0 -0
- data/samp/counter/{counter_unitTest_bench.rb → counter_xunit_bench.rb} +2 -2
- data/samp/counter/{counter_unitTest_bench.v → counter_xunit_bench.v} +3 -3
- data/samp/counter/{counter_rspecTest_design.rb → counter_xunit_design.rb} +3 -3
- data/samp/counter/{counter_unitTest_proto.rb → counter_xunit_proto.rb} +0 -0
- data/samp/counter/{counter_rspecTest_runner.rake → counter_xunit_runner.rake} +5 -4
- data/samp/counter/{counter_unitTest_spec.rb → counter_xunit_spec.rb} +0 -0
- data/samp/pipelined_alu/hw5_unit_test_runner.rake +3 -2
- metadata +177 -177
- data/ext/README +0 -124
- data/ext/relay.cin +0 -146
- data/ext/ruby-vpi.c +0 -36
- data/ext/vlog.cin +0 -92
- data/lib/ruby-vpi/synopsys_vcs.tab +0 -2
- data/ref/c/relay_8cin.html +0 -204
- data/ref/c/ruby-vpi_8c.html +0 -34
- data/ref/c/swig_8cin.html +0 -75
- data/ref/ruby/classes/FileUtils.src/M000088.html +0 -18
- data/ref/ruby/classes/Integer.src/M000011.html +0 -25
- data/ref/ruby/classes/Integer.src/M000019.html +0 -22
- data/ref/ruby/classes/RubyVpi.src/M000090.html +0 -50
- data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000080.html +0 -18
- data/ref/ruby/classes/String.src/M000031.html +0 -41
- data/ref/ruby/classes/Table.src/M000025.html +0 -38
- data/ref/ruby/classes/VerilogParser/Module/Port.src/M000006.html +0 -21
- data/ref/ruby/classes/XX/Document.src/M000071.html +0 -22
- data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000043.html +0 -22
- data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000051.html +0 -56
- data/ref/ruby/files/lib/ruby-vpi/runner_rb.src/M000002.html +0 -20
data/ext/extconf.rb
CHANGED
data/ext/relay.c
ADDED
@@ -0,0 +1,138 @@
|
|
1
|
+
/*
|
2
|
+
Copyright 1999 Kazuhiro HIWADA
|
3
|
+
Copyright 2006 Suraj N. Kurapati
|
4
|
+
|
5
|
+
This file is part of Ruby-VPI.
|
6
|
+
|
7
|
+
Ruby-VPI is free software; you can redistribute it and/or
|
8
|
+
modify it under the terms of the GNU General Public License
|
9
|
+
as published by the Free Software Foundation; either version 2
|
10
|
+
of the License, or (at your option) any later version.
|
11
|
+
|
12
|
+
Ruby-VPI is distributed in the hope that it will be useful,
|
13
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
GNU General Public License for more details.
|
16
|
+
|
17
|
+
You should have received a copy of the GNU General Public License
|
18
|
+
along with Ruby-VPI; if not, write to the Free Software Foundation,
|
19
|
+
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
20
|
+
*/
|
21
|
+
|
22
|
+
#include "relay.h"
|
23
|
+
|
24
|
+
#include "swig.h"
|
25
|
+
#include "common.h"
|
26
|
+
#include <pthread.h>
|
27
|
+
#include <ruby.h>
|
28
|
+
#include <assert.h>
|
29
|
+
|
30
|
+
|
31
|
+
pthread_t relay__rubyThread;
|
32
|
+
pthread_mutex_t relay__rubyLock;
|
33
|
+
pthread_mutex_t relay__verilogLock;
|
34
|
+
|
35
|
+
void relay_init() {
|
36
|
+
pthread_mutex_init(&relay__rubyLock, NULL);
|
37
|
+
pthread_mutex_lock(&relay__rubyLock);
|
38
|
+
pthread_mutex_init(&relay__verilogLock, NULL);
|
39
|
+
pthread_mutex_lock(&relay__verilogLock);
|
40
|
+
}
|
41
|
+
|
42
|
+
void relay_ruby() {
|
43
|
+
pthread_mutex_unlock(&relay__rubyLock);
|
44
|
+
pthread_mutex_lock(&relay__verilogLock);
|
45
|
+
}
|
46
|
+
|
47
|
+
void relay_verilog() {
|
48
|
+
pthread_mutex_unlock(&relay__verilogLock);
|
49
|
+
pthread_mutex_lock(&relay__rubyLock);
|
50
|
+
}
|
51
|
+
|
52
|
+
typedef struct {
|
53
|
+
PLI_BYTE8** mArgs; /// Array of command-line arguments.
|
54
|
+
unsigned int mCount; /// Number of command-line arguments.
|
55
|
+
} relay__RubyOptions__def;
|
56
|
+
|
57
|
+
/**
|
58
|
+
@param apRubyOptions relay__RubyOptions__def structure which contains command-line options passsed to the Ruby interpreter.
|
59
|
+
@note The structure will be freed *deeply* after use.
|
60
|
+
*/
|
61
|
+
void* ruby_run_handshake(void* apRubyOptions) {
|
62
|
+
// initialize Ruby interpreter
|
63
|
+
ruby_init();
|
64
|
+
ruby_init_loadpath();
|
65
|
+
|
66
|
+
swig_init();
|
67
|
+
|
68
|
+
// pass command-line arguments to the interpreter
|
69
|
+
relay__RubyOptions__def* pRubyOptions = (relay__RubyOptions__def*) apRubyOptions;
|
70
|
+
|
71
|
+
PLI_BYTE8** argv = pRubyOptions->mArgs;
|
72
|
+
unsigned int argc = pRubyOptions->mCount;
|
73
|
+
|
74
|
+
ruby_options(argc, argv);
|
75
|
+
|
76
|
+
// free the memory used by command-line options
|
77
|
+
unsigned int i;
|
78
|
+
for (i = 0; i < argc; i++) {
|
79
|
+
free(argv[i]);
|
80
|
+
}
|
81
|
+
|
82
|
+
free(argv);
|
83
|
+
free(pRubyOptions);
|
84
|
+
|
85
|
+
|
86
|
+
// start Ruby interpreter
|
87
|
+
ruby_run();
|
88
|
+
|
89
|
+
|
90
|
+
// Ruby interpreter is now finished, so clean it up before terminating this thread
|
91
|
+
ruby_finalize();
|
92
|
+
return NULL;
|
93
|
+
}
|
94
|
+
|
95
|
+
void relay_ruby_run() {
|
96
|
+
relay__RubyOptions__def* pRubyOptions = malloc(sizeof(relay__RubyOptions__def));
|
97
|
+
|
98
|
+
if (pRubyOptions) {
|
99
|
+
pRubyOptions->mArgs = NULL;
|
100
|
+
pRubyOptions->mCount = 0;
|
101
|
+
|
102
|
+
// transform the arguments passed to this function by Verilog into command-line arguments for Ruby interpeter
|
103
|
+
vpiHandle vCall = vpi_handle(vpiSysTfCall, NULL);
|
104
|
+
|
105
|
+
if (vCall) {
|
106
|
+
vpiHandle vCallArgs = vpi_iterate(vpiArgument, vCall);
|
107
|
+
|
108
|
+
if (vCallArgs) {
|
109
|
+
vpiHandle vArg;
|
110
|
+
s_vpi_value argVal;
|
111
|
+
argVal.format = vpiStringVal;
|
112
|
+
|
113
|
+
while ((vArg = vpi_scan(vCallArgs)) != NULL) {
|
114
|
+
vpi_get_value(vArg, &argVal);
|
115
|
+
|
116
|
+
pRubyOptions->mCount++;
|
117
|
+
|
118
|
+
|
119
|
+
if (pRubyOptions->mArgs == NULL)
|
120
|
+
pRubyOptions->mArgs = malloc(sizeof(PLI_BYTE8*) * pRubyOptions->mCount);
|
121
|
+
else
|
122
|
+
pRubyOptions->mArgs = realloc(pRubyOptions->mArgs, sizeof(PLI_BYTE8*) * pRubyOptions->mCount);
|
123
|
+
|
124
|
+
assert(pRubyOptions->mArgs != NULL);
|
125
|
+
|
126
|
+
|
127
|
+
pRubyOptions->mArgs[pRubyOptions->mCount-1] = strdup(argVal.value.str);
|
128
|
+
}
|
129
|
+
}
|
130
|
+
}
|
131
|
+
|
132
|
+
pthread_create(&relay__rubyThread, 0, ruby_run_handshake, pRubyOptions);
|
133
|
+
return;
|
134
|
+
}
|
135
|
+
|
136
|
+
common_printf("error: unable to allocate memory for Ruby's command-line arguments.");
|
137
|
+
exit(EXIT_FAILURE);
|
138
|
+
}
|
data/ext/{relay.hin → relay.h}
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
|
-
Copyright 2006 Suraj N. Kurapati
|
3
2
|
Copyright 1999 Kazuhiro HIWADA
|
3
|
+
Copyright 2006 Suraj N. Kurapati
|
4
4
|
|
5
5
|
This file is part of Ruby-VPI.
|
6
6
|
|
@@ -22,27 +22,27 @@
|
|
22
22
|
Logic for transferring control between Ruby and Verilog.
|
23
23
|
*/
|
24
24
|
|
25
|
-
#ifndef
|
26
|
-
#define
|
25
|
+
#ifndef RELAY_H
|
26
|
+
#define RELAY_H
|
27
27
|
|
28
28
|
/**
|
29
29
|
Initialize the relay mechanism, which enables Verilog code to transfer control to Ruby code and vice versa.
|
30
30
|
*/
|
31
|
-
|
31
|
+
void relay_init();
|
32
32
|
|
33
33
|
/**
|
34
34
|
Transfers control to Ruby code.
|
35
35
|
*/
|
36
|
-
|
36
|
+
void relay_ruby();
|
37
37
|
|
38
38
|
/**
|
39
39
|
Transfers control to Verilog code.
|
40
40
|
*/
|
41
|
-
|
41
|
+
void relay_verilog();
|
42
42
|
|
43
43
|
/**
|
44
44
|
Starts the Ruby interpreter.
|
45
45
|
*/
|
46
|
-
|
46
|
+
inline void relay_ruby_run();
|
47
47
|
|
48
48
|
#endif
|
data/ext/{swig.cin → swig.c}
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
|
-
Copyright 2006 Suraj N. Kurapati
|
3
2
|
Copyright 1999 Kazuhiro HIWADA
|
3
|
+
Copyright 2006 Suraj N. Kurapati
|
4
4
|
|
5
5
|
This file is part of Ruby-VPI.
|
6
6
|
|
@@ -19,20 +19,18 @@
|
|
19
19
|
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
20
20
|
*/
|
21
21
|
|
22
|
-
#include "swig.
|
23
|
-
#include "relay.hin"
|
24
|
-
#include "common.h"
|
25
|
-
|
22
|
+
#include "swig.h"
|
26
23
|
|
24
|
+
#include "relay.h"
|
27
25
|
#include "swig_wrap.cin"
|
28
26
|
|
29
27
|
|
30
|
-
|
28
|
+
void swig_init() {
|
31
29
|
Init_vpi();
|
32
30
|
rb_define_module_function(mVpi, "relay_verilog", swig_rb_relay_verilog, 0);
|
33
31
|
}
|
34
32
|
|
35
|
-
|
33
|
+
VALUE swig_rb_relay_verilog(VALUE arSelf) {
|
36
34
|
relay_verilog();
|
37
35
|
return arSelf;
|
38
36
|
}
|
data/ext/{swig.hin → swig.h}
RENAMED
@@ -21,19 +21,19 @@
|
|
21
21
|
C interface to the SWIG-generated VPI interface.
|
22
22
|
*/
|
23
23
|
|
24
|
-
#ifndef
|
25
|
-
#define
|
24
|
+
#ifndef SWIG_H
|
25
|
+
#define SWIG_H
|
26
26
|
|
27
27
|
#include <ruby.h>
|
28
28
|
|
29
29
|
/**
|
30
30
|
Registers the SWIG-generated VPI interface with Ruby, so that Ruby code can access it.
|
31
31
|
*/
|
32
|
-
|
32
|
+
void swig_init();
|
33
33
|
|
34
34
|
/**
|
35
35
|
Transfers control from Ruby code to Verilog code.
|
36
36
|
*/
|
37
|
-
|
37
|
+
VALUE swig_rb_relay_verilog(VALUE arSelf);
|
38
38
|
|
39
39
|
#endif
|
data/ext/verilog.h
CHANGED
@@ -27,7 +27,6 @@
|
|
27
27
|
// Use our verbatim copy of the official IEEE Std. 1364-2005 header file, which was obtained from this URL: <http://www.boydtechinc.com/ptf/archive/ptf_2005/0737.html>
|
28
28
|
#include "vpi_user.h"
|
29
29
|
|
30
|
-
|
31
30
|
// Adjust for the peculiarities of the Verilog simulator being used.
|
32
31
|
#ifdef SYNOPSYS_VCS
|
33
32
|
#define VERILOG_LENIENT
|
@@ -50,7 +49,7 @@
|
|
50
49
|
#define verilog_tf_funcPtr verilog_tf_funcPtr_strict
|
51
50
|
|
52
51
|
#define verilog_tf_funcSig(aFuncName) \
|
53
|
-
|
52
|
+
PLI_INT32 aFuncName(PLI_BYTE8* aDummy)
|
54
53
|
|
55
54
|
#define verilog_tf_funcReturn(aReturnVal) \
|
56
55
|
return aReturnVal
|
data/ext/vlog.c
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
/*
|
2
|
+
Copyright 1999 Kazuhiro HIWADA
|
3
|
+
Copyright 2006 Suraj N. Kurapati
|
4
|
+
|
5
|
+
This file is part of Ruby-VPI.
|
6
|
+
|
7
|
+
Ruby-VPI is free software; you can redistribute it and/or
|
8
|
+
modify it under the terms of the GNU General Public License
|
9
|
+
as published by the Free Software Foundation; either version 2
|
10
|
+
of the License, or (at your option) any later version.
|
11
|
+
|
12
|
+
Ruby-VPI is distributed in the hope that it will be useful,
|
13
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
GNU General Public License for more details.
|
16
|
+
|
17
|
+
You should have received a copy of the GNU General Public License
|
18
|
+
along with Ruby-VPI; if not, write to the Free Software Foundation,
|
19
|
+
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
20
|
+
*/
|
21
|
+
|
22
|
+
#include "vlog.h"
|
23
|
+
|
24
|
+
#include "relay.h"
|
25
|
+
#include <stdlib.h>
|
26
|
+
|
27
|
+
|
28
|
+
verilog_tf_funcSig(vlog_ruby_relay) {
|
29
|
+
// transfer control to ruby
|
30
|
+
relay_ruby();
|
31
|
+
|
32
|
+
|
33
|
+
// transfer control to verilog
|
34
|
+
verilog_tf_funcReturn(0);
|
35
|
+
}
|
36
|
+
|
37
|
+
verilog_tf_funcSig(vlog_ruby_init) {
|
38
|
+
// setup control transfer mechanism
|
39
|
+
relay_init();
|
40
|
+
|
41
|
+
|
42
|
+
// start ruby interpreter and transfer control to it
|
43
|
+
relay_ruby_run();
|
44
|
+
|
45
|
+
|
46
|
+
// transfer control to verilog
|
47
|
+
verilog_tf_funcReturn(0);
|
48
|
+
}
|
49
|
+
|
50
|
+
void vlog_bind_task(PLI_BYTE8* apTaskName, verilog_tf_funcPtr(apTaskDef)) {
|
51
|
+
s_vpi_systf_data tf;
|
52
|
+
|
53
|
+
tf.type = vpiSysTask;
|
54
|
+
tf.sysfunctype = 0;
|
55
|
+
tf.tfname = apTaskName;
|
56
|
+
tf.calltf = (verilog_tf_funcPtr_strict())apTaskDef;
|
57
|
+
tf.compiletf = NULL;
|
58
|
+
tf.sizetf = NULL;
|
59
|
+
tf.user_data = NULL;
|
60
|
+
|
61
|
+
vpi_register_systf(&tf);
|
62
|
+
}
|
63
|
+
|
64
|
+
/**
|
65
|
+
Binds the default VPI tasks (provided by Ruby-VPI) before the Verilog simulator begins to simulate.
|
66
|
+
*/
|
67
|
+
void vlog_startup() {
|
68
|
+
vlog_bind_task("$ruby_init", vlog_ruby_init);
|
69
|
+
vlog_bind_task("$ruby_relay", vlog_ruby_relay);
|
70
|
+
}
|
71
|
+
|
72
|
+
void (*vlog_startup_routines[])() = { vlog_startup, 0 };
|
73
|
+
|
74
|
+
#if defined(PRAGMATIC_CVER) || defined(SYNOPSYS_VCS)
|
75
|
+
/**
|
76
|
+
Invokes each routine specified in the vlog_startup_routines array.
|
77
|
+
|
78
|
+
This code is originally from GPL Cver 2.11a:
|
79
|
+
Copyright (c) 1991-2005 Pragmatic C Software Corp.
|
80
|
+
*/
|
81
|
+
void vlog_startup_routines_bootstrap() {
|
82
|
+
unsigned int i;
|
83
|
+
for (i = 0; vlog_startup_routines[i] != NULL; i++)
|
84
|
+
vlog_startup_routines[i]();
|
85
|
+
}
|
86
|
+
#endif
|
data/ext/{vlog.hin → vlog.h}
RENAMED
@@ -1,6 +1,5 @@
|
|
1
1
|
/*
|
2
2
|
Copyright 2006 Suraj N. Kurapati
|
3
|
-
Copyright 1999 Kazuhiro HIWADA
|
4
3
|
|
5
4
|
This file is part of Ruby-VPI.
|
6
5
|
|
@@ -22,8 +21,8 @@
|
|
22
21
|
Interface between C and Verilog code.
|
23
22
|
*/
|
24
23
|
|
25
|
-
#ifndef
|
26
|
-
#define
|
24
|
+
#ifndef VLOG_H
|
25
|
+
#define VLOG_H
|
27
26
|
|
28
27
|
#include "verilog.h"
|
29
28
|
|
@@ -41,17 +40,15 @@
|
|
41
40
|
*/
|
42
41
|
verilog_tf_funcSig(vlog_ruby_init);
|
43
42
|
|
44
|
-
|
45
|
-
|
46
|
-
Binds a C function to a VPI task, so that Verilog code can invoke the C function by calling the VPI task.
|
43
|
+
/**
|
44
|
+
Binds a C function to a VPI task, so that Verilog code can invoke the C function by calling the VPI task.
|
47
45
|
|
48
|
-
|
46
|
+
For example, if we bound a VPI task named "$hello_world" to the C function hello_world(), then the hello_world() function would be invoked whenever Verilog code called the "$hello_world" VPI task.
|
49
47
|
|
50
|
-
|
48
|
+
@param apTaskName Name of the VPI task. For example, "$hello_world".
|
51
49
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
#endif
|
50
|
+
@param apTaskDef The C function which you want to associate with the given VPI task. For example, hello_world().
|
51
|
+
*/
|
52
|
+
void vlog_bind_task(PLI_BYTE8* apTaskName, verilog_tf_funcPtr(apTaskDef));
|
56
53
|
|
57
54
|
#endif
|
data/header.html
CHANGED
@@ -2,37 +2,6 @@
|
|
2
2
|
<link rel="stylesheet" type="text/css" href="style.css" />
|
3
3
|
</head>
|
4
4
|
|
5
|
-
<h1 style="text-align: center;">Welcome to Ruby-VPI</h1>
|
6
|
-
|
7
|
-
|
8
|
-
<p>Ruby-VPI is a <a href="http://ruby-lang.org">Ruby interface</a> to <a href="http://ieeexplore.ieee.org/xpl/standardstoc.jsp?isnumber=33945">Verilog <span class="caps">VPI</span></a>. It lets you create complex Verilog test benches easily and wholly in Ruby.</p>
|
9
|
-
|
10
|
-
|
11
|
-
<h2>Features</h2>
|
12
|
-
|
13
|
-
|
14
|
-
<ul>
|
15
|
-
<li>Prototype and verify designs <em>quickly</em> using <a href="http://behaviour-driven.org/" title="behavior-driven development"><span class="caps">BDD</span></a>, <a href="http://www.agiledata.org/essays/tdd.html" title="test-driven development"><span class="caps">TDD</span></a>, and more.</li>
|
16
|
-
<li>Reuse the <em>same</em> specification to verify both prototype and design.</li>
|
17
|
-
<li>Specifications are executable <em>and</em> 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>.)</li>
|
18
|
-
</ul>
|
19
|
-
|
20
|
-
|
21
|
-
<ul>
|
22
|
-
<li>Utilize Ruby’s power and elegance. (<a href="http://www.ruby-doc.org/whyruby">Why choose Ruby?</a>)
|
23
|
-
<ul>
|
24
|
-
<li>Built-in support for unlimited length integers, regular expressions, networking, multi-threading, system calls, <em>ad infinium</em>!</li>
|
25
|
-
<li>Easy to use; doesn’t get in your way.</li>
|
26
|
-
<li>Makes programming <em>fun</em> again!</li>
|
27
|
-
</ul></li>
|
28
|
-
</ul>
|
29
|
-
|
30
|
-
|
31
|
-
<ul>
|
32
|
-
<li>Study, modify, or distribute this is free software, released under the <a href="http://www.gnu.org/copyleft/gpl.html"><span class="caps">GNU</span> General Public License</a>, as you see fit.</li>
|
33
|
-
</ul>
|
34
|
-
|
35
|
-
|
36
5
|
<div class="variablelist">
|
37
6
|
<dl>
|
38
7
|
|
data/header.part.html
CHANGED
@@ -2,37 +2,6 @@
|
|
2
2
|
<link rel="stylesheet" type="text/css" href="style.css" />
|
3
3
|
</head>
|
4
4
|
|
5
|
-
<h1 style="text-align: center;">Welcome to Ruby-VPI</h1>
|
6
|
-
|
7
|
-
|
8
|
-
<p>Ruby-VPI is a <a href="http://ruby-lang.org">Ruby interface</a> to <a href="http://ieeexplore.ieee.org/xpl/standardstoc.jsp?isnumber=33945">Verilog <span class="caps">VPI</span></a>. It lets you create complex Verilog test benches easily and wholly in Ruby.</p>
|
9
|
-
|
10
|
-
|
11
|
-
<h2>Features</h2>
|
12
|
-
|
13
|
-
|
14
|
-
<ul>
|
15
|
-
<li>Prototype and verify designs <em>quickly</em> using <a href="http://behaviour-driven.org/" title="behavior-driven development"><span class="caps">BDD</span></a>, <a href="http://www.agiledata.org/essays/tdd.html" title="test-driven development"><span class="caps">TDD</span></a>, and more.</li>
|
16
|
-
<li>Reuse the <em>same</em> specification to verify both prototype and design.</li>
|
17
|
-
<li>Specifications are executable <em>and</em> 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>.)</li>
|
18
|
-
</ul>
|
19
|
-
|
20
|
-
|
21
|
-
<ul>
|
22
|
-
<li>Utilize Ruby’s power and elegance. (<a href="http://www.ruby-doc.org/whyruby">Why choose Ruby?</a>)
|
23
|
-
<ul>
|
24
|
-
<li>Built-in support for unlimited length integers, regular expressions, networking, multi-threading, system calls, <em>ad infinium</em>!</li>
|
25
|
-
<li>Easy to use; doesn’t get in your way.</li>
|
26
|
-
<li>Makes programming <em>fun</em> again!</li>
|
27
|
-
</ul></li>
|
28
|
-
</ul>
|
29
|
-
|
30
|
-
|
31
|
-
<ul>
|
32
|
-
<li>Study, modify, or distribute this is free software, released under the <a href="http://www.gnu.org/copyleft/gpl.html"><span class="caps">GNU</span> General Public License</a>, as you see fit.</li>
|
33
|
-
</ul>
|
34
|
-
|
35
|
-
|
36
5
|
<div class="variablelist">
|
37
6
|
<dl>
|
38
7
|
|