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.
Files changed (252) hide show
  1. data/HEADER +0 -19
  2. data/HISTORY +40 -0
  3. data/README +20 -2
  4. data/Rakefile +38 -42
  5. data/bin/generate_test.rb +50 -35
  6. data/bin/generate_test_tpl/bench.rb +3 -3
  7. data/bin/generate_test_tpl/bench.v +1 -1
  8. data/bin/generate_test_tpl/runner.rake +3 -2
  9. data/bin/generate_test_tpl/spec.rb +2 -2
  10. data/doc/background.organization.html +1 -1
  11. data/doc/glossary.html +1 -1
  12. data/doc/index.html +2 -2
  13. data/doc/manual.txt +163 -83
  14. data/doc/problems.html +1 -1
  15. data/doc/problems.ruby.html +1 -1
  16. data/doc/src/manual.xml +132 -49
  17. data/doc/usage.examples.html +1 -1
  18. data/doc/usage.html +1 -1
  19. data/doc/usage.installation.html +2 -2
  20. data/doc/usage.recommendations.html +3 -0
  21. data/doc/usage.requirements.html +1 -1
  22. data/doc/usage.tutorial.html +46 -42
  23. data/ext/extconf.rb +5 -2
  24. data/ext/relay.c +138 -0
  25. data/ext/{relay.hin → relay.h} +7 -7
  26. data/ext/{swig.cin → swig.c} +5 -7
  27. data/ext/{swig.hin → swig.h} +4 -4
  28. data/ext/verilog.h +1 -2
  29. data/ext/vlog.c +86 -0
  30. data/ext/{vlog.hin → vlog.h} +9 -12
  31. data/header.html +0 -31
  32. data/header.part.html +0 -31
  33. data/history.html +72 -31
  34. data/history.part.html +72 -0
  35. data/lib/ruby-vpi.rb +16 -0
  36. data/lib/ruby-vpi/runner.rb +34 -16
  37. data/memo.html +0 -31
  38. data/readme.html +33 -33
  39. data/readme.part.html +34 -3
  40. data/ref/c/annotated.html +1 -1
  41. data/ref/c/common_8h.html +1 -1
  42. data/ref/c/files.html +7 -8
  43. data/ref/c/functions.html +2 -2
  44. data/ref/c/functions_vars.html +2 -2
  45. data/ref/c/globals.html +1 -1
  46. data/ref/c/globals_0x63.html +1 -1
  47. data/ref/c/globals_0x65.html +1 -1
  48. data/ref/c/globals_0x66.html +1 -1
  49. data/ref/c/globals_0x70.html +1 -1
  50. data/ref/c/globals_0x72.html +9 -9
  51. data/ref/c/globals_0x73.html +3 -3
  52. data/ref/c/globals_0x74.html +1 -1
  53. data/ref/c/globals_0x76.html +5 -5
  54. data/ref/c/globals_0x78.html +1 -1
  55. data/ref/c/globals_defs.html +1 -1
  56. data/ref/c/globals_defs_0x65.html +1 -1
  57. data/ref/c/globals_defs_0x70.html +1 -1
  58. data/ref/c/globals_defs_0x76.html +2 -2
  59. data/ref/c/globals_defs_0x78.html +1 -1
  60. data/ref/c/globals_enum.html +1 -1
  61. data/ref/c/globals_eval.html +1 -1
  62. data/ref/c/globals_func.html +11 -11
  63. data/ref/c/globals_type.html +1 -1
  64. data/ref/c/globals_vars.html +5 -5
  65. data/ref/c/index.html +1 -1
  66. data/ref/c/relay_8c.html +214 -0
  67. data/ref/c/{relay_8hin.html → relay_8h.html} +23 -23
  68. data/ref/c/structrelay____RubyOptions____def.html +6 -6
  69. data/ref/c/structt__cb__data.html +1 -1
  70. data/ref/c/structt__vpi__delay.html +1 -1
  71. data/ref/c/structt__vpi__error__info.html +1 -1
  72. data/ref/c/structt__vpi__strengthval.html +1 -1
  73. data/ref/c/structt__vpi__systf__data.html +1 -1
  74. data/ref/c/structt__vpi__time.html +1 -1
  75. data/ref/c/structt__vpi__value.html +1 -1
  76. data/ref/c/structt__vpi__vecval.html +1 -1
  77. data/ref/c/structt__vpi__vlog__info.html +1 -1
  78. data/ref/c/swig_8c.html +80 -0
  79. data/ref/c/{swig_8hin.html → swig_8h.html} +13 -13
  80. data/ref/c/verilog_8h.html +3 -3
  81. data/ref/c/{vlog_8cin.html → vlog_8c.html} +30 -21
  82. data/ref/c/{vlog_8hin.html → vlog_8h.html} +12 -12
  83. data/ref/c/vpi__user_8h.html +1 -1
  84. data/ref/ruby/classes/ERB.html +5 -5
  85. data/ref/ruby/classes/ERB.src/{M000033.html → M000034.html} +0 -0
  86. data/ref/ruby/classes/FileUtils.html +10 -10
  87. data/ref/ruby/classes/FileUtils.src/M000089.html +5 -5
  88. data/ref/ruby/classes/FileUtils.src/M000090.html +18 -0
  89. data/ref/ruby/classes/Integer.html +68 -68
  90. data/ref/ruby/classes/Integer.src/M000012.html +12 -5
  91. data/ref/ruby/classes/Integer.src/M000013.html +5 -5
  92. data/ref/ruby/classes/Integer.src/M000014.html +5 -5
  93. data/ref/ruby/classes/Integer.src/M000015.html +5 -5
  94. data/ref/ruby/classes/Integer.src/M000016.html +5 -5
  95. data/ref/ruby/classes/Integer.src/M000017.html +18 -0
  96. data/ref/ruby/classes/Integer.src/M000020.html +9 -9
  97. data/ref/ruby/classes/Integer.src/M000021.html +9 -12
  98. data/ref/ruby/classes/Integer.src/M000022.html +12 -18
  99. data/ref/ruby/classes/Integer.src/M000023.html +18 -12
  100. data/ref/ruby/classes/Integer.src/M000024.html +12 -17
  101. data/ref/ruby/classes/Integer.src/M000025.html +30 -0
  102. data/ref/ruby/classes/OutputInfo.html +6 -6
  103. data/ref/ruby/classes/OutputInfo.src/{M000029.html → M000030.html} +37 -37
  104. data/ref/ruby/classes/RDoc.html +5 -5
  105. data/ref/ruby/classes/RDoc.src/{M000092.html → M000093.html} +0 -0
  106. data/ref/ruby/classes/RubyVpi.html +16 -10
  107. data/ref/ruby/classes/RubyVpi.src/M000091.html +37 -7
  108. data/ref/ruby/classes/RubyVpi.src/M000092.html +20 -0
  109. data/ref/ruby/classes/RubyVpi/Config.html +148 -0
  110. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.html +45 -45
  111. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000081.html +5 -5
  112. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000082.html +5 -9
  113. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000083.html +9 -31
  114. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000084.html +31 -69
  115. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000085.html +69 -114
  116. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000086.html +114 -13
  117. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000087.html +13 -5
  118. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000088.html +18 -0
  119. data/ref/ruby/classes/String.html +10 -10
  120. data/ref/ruby/classes/String.src/M000032.html +28 -5
  121. data/ref/ruby/classes/String.src/M000033.html +18 -0
  122. data/ref/ruby/classes/Table.html +20 -20
  123. data/ref/ruby/classes/Table.src/M000026.html +25 -5
  124. data/ref/ruby/classes/Table.src/M000027.html +5 -5
  125. data/ref/ruby/classes/Table.src/M000028.html +5 -5
  126. data/ref/ruby/classes/Table.src/M000029.html +18 -0
  127. data/ref/ruby/classes/Template.html +5 -5
  128. data/ref/ruby/classes/Template.src/{M000030.html → M000031.html} +4 -4
  129. data/ref/ruby/classes/VerilogParser.html +5 -5
  130. data/ref/ruby/classes/VerilogParser.src/{M000004.html → M000005.html} +0 -0
  131. data/ref/ruby/classes/VerilogParser/Module.html +5 -5
  132. data/ref/ruby/classes/VerilogParser/Module.src/{M000005.html → M000006.html} +0 -0
  133. data/ref/ruby/classes/VerilogParser/Module/Parameter.html +5 -5
  134. data/ref/ruby/classes/VerilogParser/Module/Parameter.src/{M000010.html → M000011.html} +0 -0
  135. data/ref/ruby/classes/VerilogParser/Module/Port.html +20 -20
  136. data/ref/ruby/classes/VerilogParser/Module/Port.src/M000007.html +8 -5
  137. data/ref/ruby/classes/VerilogParser/Module/Port.src/M000008.html +5 -5
  138. data/ref/ruby/classes/VerilogParser/Module/Port.src/M000009.html +5 -5
  139. data/ref/ruby/classes/VerilogParser/Module/Port.src/M000010.html +18 -0
  140. data/ref/ruby/classes/XX/Document.html +45 -45
  141. data/ref/ruby/classes/XX/Document.src/M000072.html +9 -7
  142. data/ref/ruby/classes/XX/Document.src/M000073.html +7 -7
  143. data/ref/ruby/classes/XX/Document.src/M000074.html +7 -7
  144. data/ref/ruby/classes/XX/Document.src/M000075.html +7 -9
  145. data/ref/ruby/classes/XX/Document.src/M000076.html +9 -8
  146. data/ref/ruby/classes/XX/Document.src/M000077.html +8 -8
  147. data/ref/ruby/classes/XX/Document.src/M000078.html +8 -21
  148. data/ref/ruby/classes/XX/Document.src/M000079.html +21 -85
  149. data/ref/ruby/classes/XX/Document.src/M000080.html +98 -0
  150. data/ref/ruby/classes/XX/HTML4.html +5 -5
  151. data/ref/ruby/classes/XX/HTML4.src/{M000035.html → M000036.html} +0 -0
  152. data/ref/ruby/classes/XX/HTML4/Strict.html +5 -5
  153. data/ref/ruby/classes/XX/HTML4/Strict.src/{M000037.html → M000038.html} +0 -0
  154. data/ref/ruby/classes/XX/HTML4/Transitional.html +5 -5
  155. data/ref/ruby/classes/XX/HTML4/Transitional.src/{M000036.html → M000037.html} +0 -0
  156. data/ref/ruby/classes/XX/Markup.html +5 -5
  157. data/ref/ruby/classes/XX/Markup.src/{M000042.html → M000043.html} +0 -0
  158. data/ref/ruby/classes/XX/Markup/ClassMethods.html +40 -40
  159. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000044.html +9 -7
  160. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000045.html +7 -12
  161. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000046.html +12 -7
  162. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000047.html +7 -14
  163. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000048.html +14 -7
  164. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000049.html +7 -14
  165. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000050.html +14 -9
  166. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000051.html +22 -0
  167. data/ref/ruby/classes/XX/Markup/InstanceMethods.html +100 -100
  168. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000052.html +43 -20
  169. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000053.html +20 -18
  170. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000054.html +18 -35
  171. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000055.html +35 -7
  172. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000056.html +7 -18
  173. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000057.html +18 -19
  174. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000058.html +19 -19
  175. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000059.html +19 -15
  176. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000060.html +15 -10
  177. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000061.html +10 -13
  178. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000062.html +13 -7
  179. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000063.html +7 -7
  180. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000064.html +7 -7
  181. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000065.html +7 -7
  182. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000066.html +7 -7
  183. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000067.html +7 -8
  184. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000068.html +8 -7
  185. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000069.html +7 -7
  186. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000070.html +7 -7
  187. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000071.html +20 -0
  188. data/ref/ruby/classes/XX/XHTML.html +5 -5
  189. data/ref/ruby/classes/XX/XHTML.src/{M000038.html → M000039.html} +0 -0
  190. data/ref/ruby/classes/XX/XHTML/Strict.html +5 -5
  191. data/ref/ruby/classes/XX/XHTML/Strict.src/{M000040.html → M000041.html} +0 -0
  192. data/ref/ruby/classes/XX/XHTML/Transitional.html +5 -5
  193. data/ref/ruby/classes/XX/XHTML/Transitional.src/{M000039.html → M000040.html} +0 -0
  194. data/ref/ruby/classes/XX/XML.html +5 -5
  195. data/ref/ruby/classes/XX/XML.src/{M000034.html → M000035.html} +0 -0
  196. data/ref/ruby/classes/XX/XMLish.html +5 -5
  197. data/ref/ruby/classes/XX/XMLish.src/{M000041.html → M000042.html} +0 -0
  198. data/ref/ruby/created.rid +1 -1
  199. data/ref/ruby/files/bin/generate_test_rb.html +49 -9
  200. data/ref/ruby/files/bin/generate_test_rb.src/M000001.html +5 -16
  201. data/ref/ruby/files/bin/generate_test_rb.src/M000002.html +39 -0
  202. data/ref/ruby/files/bin/header_to_ruby_rb.html +1 -1
  203. data/ref/ruby/files/lib/ruby-vpi/erb_rb.html +1 -1
  204. data/ref/ruby/files/lib/ruby-vpi/integer_rb.html +1 -1
  205. data/ref/ruby/files/lib/ruby-vpi/rake_rb.html +1 -1
  206. data/ref/ruby/files/lib/ruby-vpi/rcov_rb.html +1 -1
  207. data/ref/ruby/files/lib/ruby-vpi/rdoc_rb.html +1 -1
  208. data/ref/ruby/files/lib/ruby-vpi/rspec_rb.html +1 -1
  209. data/ref/ruby/files/lib/ruby-vpi/runner_proxy_rb.html +1 -1
  210. data/ref/ruby/files/lib/ruby-vpi/runner_rb.html +22 -21
  211. data/ref/ruby/files/lib/ruby-vpi/runner_rb.src/M000003.html +11 -13
  212. data/ref/ruby/files/lib/ruby-vpi/runner_rb.src/M000004.html +26 -0
  213. data/ref/ruby/files/lib/ruby-vpi/verilog_parser_rb.html +1 -1
  214. data/ref/ruby/files/lib/ruby-vpi/vpi_rb.html +1 -1
  215. data/ref/ruby/files/lib/ruby-vpi/xx_rb.html +1 -1
  216. data/ref/ruby/files/lib/ruby-vpi_rb.html +1 -1
  217. data/ref/ruby/fr_class_index.html +1 -0
  218. data/ref/ruby/fr_method_index.html +93 -92
  219. data/samp/counter/{counter_rspecTest_bench.rb → counter_rspec_bench.rb} +2 -2
  220. data/samp/counter/{counter_rspecTest_bench.v → counter_rspec_bench.v} +3 -3
  221. data/samp/counter/{counter_unitTest_design.rb → counter_rspec_design.rb} +3 -3
  222. data/samp/counter/{counter_rspecTest_proto.rb → counter_rspec_proto.rb} +0 -0
  223. data/samp/counter/{counter_unitTest_runner.rake → counter_rspec_runner.rake} +5 -4
  224. data/samp/counter/{counter_rspecTest_spec.rb → counter_rspec_spec.rb} +0 -0
  225. data/samp/counter/{counter_unitTest_bench.rb → counter_xunit_bench.rb} +2 -2
  226. data/samp/counter/{counter_unitTest_bench.v → counter_xunit_bench.v} +3 -3
  227. data/samp/counter/{counter_rspecTest_design.rb → counter_xunit_design.rb} +3 -3
  228. data/samp/counter/{counter_unitTest_proto.rb → counter_xunit_proto.rb} +0 -0
  229. data/samp/counter/{counter_rspecTest_runner.rake → counter_xunit_runner.rake} +5 -4
  230. data/samp/counter/{counter_unitTest_spec.rb → counter_xunit_spec.rb} +0 -0
  231. data/samp/pipelined_alu/hw5_unit_test_runner.rake +3 -2
  232. metadata +177 -177
  233. data/ext/README +0 -124
  234. data/ext/relay.cin +0 -146
  235. data/ext/ruby-vpi.c +0 -36
  236. data/ext/vlog.cin +0 -92
  237. data/lib/ruby-vpi/synopsys_vcs.tab +0 -2
  238. data/ref/c/relay_8cin.html +0 -204
  239. data/ref/c/ruby-vpi_8c.html +0 -34
  240. data/ref/c/swig_8cin.html +0 -75
  241. data/ref/ruby/classes/FileUtils.src/M000088.html +0 -18
  242. data/ref/ruby/classes/Integer.src/M000011.html +0 -25
  243. data/ref/ruby/classes/Integer.src/M000019.html +0 -22
  244. data/ref/ruby/classes/RubyVpi.src/M000090.html +0 -50
  245. data/ref/ruby/classes/SWIG/TYPE_p_unsigned_int.src/M000080.html +0 -18
  246. data/ref/ruby/classes/String.src/M000031.html +0 -41
  247. data/ref/ruby/classes/Table.src/M000025.html +0 -38
  248. data/ref/ruby/classes/VerilogParser/Module/Port.src/M000006.html +0 -21
  249. data/ref/ruby/classes/XX/Document.src/M000071.html +0 -22
  250. data/ref/ruby/classes/XX/Markup/ClassMethods.src/M000043.html +0 -22
  251. data/ref/ruby/classes/XX/Markup/InstanceMethods.src/M000051.html +0 -56
  252. data/ref/ruby/files/lib/ruby-vpi/runner_rb.src/M000002.html +0 -20
data/ext/extconf.rb CHANGED
@@ -1,4 +1,7 @@
1
1
  require 'mkmf'
2
+ require 'rbconfig'
2
3
 
3
- have_library 'pthread', 'pthread_create'
4
- create_makefile 'ruby-vpi'
4
+ have_library('pthread', 'pthread_create') &&
5
+ have_library(Config::CONFIG['RUBY_SO_NAME'] || 'ruby', 'ruby_init') &&
6
+
7
+ create_makefile('ruby-vpi')
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
+ }
@@ -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 RELAY_HIN
26
- #define RELAY_HIN
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
- static void relay_init();
31
+ void relay_init();
32
32
 
33
33
  /**
34
34
  Transfers control to Ruby code.
35
35
  */
36
- static void relay_ruby();
36
+ void relay_ruby();
37
37
 
38
38
  /**
39
39
  Transfers control to Verilog code.
40
40
  */
41
- static void relay_verilog();
41
+ void relay_verilog();
42
42
 
43
43
  /**
44
44
  Starts the Ruby interpreter.
45
45
  */
46
- static inline void relay_ruby_run();
46
+ inline void relay_ruby_run();
47
47
 
48
48
  #endif
@@ -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.hin"
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
- static void swig_init() {
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
- static VALUE swig_rb_relay_verilog(VALUE arSelf) {
33
+ VALUE swig_rb_relay_verilog(VALUE arSelf) {
36
34
  relay_verilog();
37
35
  return arSelf;
38
36
  }
@@ -21,19 +21,19 @@
21
21
  C interface to the SWIG-generated VPI interface.
22
22
  */
23
23
 
24
- #ifndef SWIG_HIN
25
- #define SWIG_HIN
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
- static void swig_init();
32
+ void swig_init();
33
33
 
34
34
  /**
35
35
  Transfers control from Ruby code to Verilog code.
36
36
  */
37
- static VALUE swig_rb_relay_verilog(VALUE arSelf);
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
- static PLI_INT32 aFuncName(PLI_BYTE8* aDummy)
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
@@ -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 VLOG_HIN
26
- #define VLOG_HIN
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
- #ifndef SYNOPSYS_VCS
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
- 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.
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
- @param apTaskName Name of the VPI task. For example, "$hello_world".
48
+ @param apTaskName Name of the VPI task. For example, "$hello_world".
51
49
 
52
- @param apTaskDef The C function which you want to associate with the given VPI task. For example, hello_world().
53
- */
54
- static void vlog_bind_task(PLI_BYTE8* apTaskName, verilog_tf_funcPtr(apTaskDef));
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&#8217;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&#8217;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&#8217;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&#8217;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