HDLRuby 2.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (224) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.travis.yml +5 -0
  4. data/.yardopts +1 -0
  5. data/Gemfile +4 -0
  6. data/HDLRuby.gemspec +36 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +2774 -0
  9. data/README.pdf +0 -0
  10. data/Rakefile +10 -0
  11. data/bin/console +14 -0
  12. data/bin/setup +8 -0
  13. data/exe/hdrcc +3 -0
  14. data/lib/HDLRuby/alcc.rb +137 -0
  15. data/lib/HDLRuby/backend/hruby_allocator.rb +69 -0
  16. data/lib/HDLRuby/backend/hruby_c_allocator.rb +76 -0
  17. data/lib/HDLRuby/hdr_samples/adder.rb +7 -0
  18. data/lib/HDLRuby/hdr_samples/adder_assign_error.rb +11 -0
  19. data/lib/HDLRuby/hdr_samples/adder_bench.rb +27 -0
  20. data/lib/HDLRuby/hdr_samples/adder_gen.rb +7 -0
  21. data/lib/HDLRuby/hdr_samples/adder_nodef_error.rb +7 -0
  22. data/lib/HDLRuby/hdr_samples/addsub.rb +19 -0
  23. data/lib/HDLRuby/hdr_samples/addsubz.rb +22 -0
  24. data/lib/HDLRuby/hdr_samples/alu.rb +47 -0
  25. data/lib/HDLRuby/hdr_samples/calculator.rb +48 -0
  26. data/lib/HDLRuby/hdr_samples/counter_bench.rb +83 -0
  27. data/lib/HDLRuby/hdr_samples/dff.rb +9 -0
  28. data/lib/HDLRuby/hdr_samples/dff_bench.rb +66 -0
  29. data/lib/HDLRuby/hdr_samples/dff_counter.rb +20 -0
  30. data/lib/HDLRuby/hdr_samples/include.rb +14 -0
  31. data/lib/HDLRuby/hdr_samples/instance_open.rb +23 -0
  32. data/lib/HDLRuby/hdr_samples/mei8.rb +256 -0
  33. data/lib/HDLRuby/hdr_samples/mei8_bench.rb +309 -0
  34. data/lib/HDLRuby/hdr_samples/multer_gen.rb +8 -0
  35. data/lib/HDLRuby/hdr_samples/multer_seq.rb +29 -0
  36. data/lib/HDLRuby/hdr_samples/neural/a.rb +9 -0
  37. data/lib/HDLRuby/hdr_samples/neural/a_sub.rb +5 -0
  38. data/lib/HDLRuby/hdr_samples/neural/bw.rb +23 -0
  39. data/lib/HDLRuby/hdr_samples/neural/counter.rb +16 -0
  40. data/lib/HDLRuby/hdr_samples/neural/dadz.rb +9 -0
  41. data/lib/HDLRuby/hdr_samples/neural/dadz_sub.rb +4 -0
  42. data/lib/HDLRuby/hdr_samples/neural/forward.rb +153 -0
  43. data/lib/HDLRuby/hdr_samples/neural/forward_sub.rb +62 -0
  44. data/lib/HDLRuby/hdr_samples/neural/forward_sub_rand.rb +41 -0
  45. data/lib/HDLRuby/hdr_samples/neural/forward_sub_rand_typedef.rb +47 -0
  46. data/lib/HDLRuby/hdr_samples/neural/mem.rb +30 -0
  47. data/lib/HDLRuby/hdr_samples/neural/random.rb +23 -0
  48. data/lib/HDLRuby/hdr_samples/neural/selector.rb +29 -0
  49. data/lib/HDLRuby/hdr_samples/neural/sigmoid.rb +20 -0
  50. data/lib/HDLRuby/hdr_samples/neural/z.rb +33 -0
  51. data/lib/HDLRuby/hdr_samples/prog.obj +256 -0
  52. data/lib/HDLRuby/hdr_samples/ram.rb +18 -0
  53. data/lib/HDLRuby/hdr_samples/register_with_code_bench.rb +98 -0
  54. data/lib/HDLRuby/hdr_samples/rom.rb +10 -0
  55. data/lib/HDLRuby/hdr_samples/struct.rb +14 -0
  56. data/lib/HDLRuby/hdr_samples/sumprod.rb +29 -0
  57. data/lib/HDLRuby/hdr_samples/sw_encrypt_bench.rb +103 -0
  58. data/lib/HDLRuby/hdr_samples/sw_encrypt_cpu_bench.rb +261 -0
  59. data/lib/HDLRuby/hdr_samples/sw_encrypt_cpusim_bench.rb +302 -0
  60. data/lib/HDLRuby/hdr_samples/system_open.rb +11 -0
  61. data/lib/HDLRuby/hdr_samples/tuple.rb +16 -0
  62. data/lib/HDLRuby/hdr_samples/with_channel.rb +118 -0
  63. data/lib/HDLRuby/hdr_samples/with_class.rb +199 -0
  64. data/lib/HDLRuby/hdr_samples/with_decoder.rb +17 -0
  65. data/lib/HDLRuby/hdr_samples/with_fsm.rb +34 -0
  66. data/lib/HDLRuby/hdr_samples/with_reconf.rb +103 -0
  67. data/lib/HDLRuby/hdrcc.rb +623 -0
  68. data/lib/HDLRuby/high_samples/_adder_fault.rb +23 -0
  69. data/lib/HDLRuby/high_samples/_generic_transmission2.rb +146 -0
  70. data/lib/HDLRuby/high_samples/adder.rb +21 -0
  71. data/lib/HDLRuby/high_samples/adder_common_errors.rb +25 -0
  72. data/lib/HDLRuby/high_samples/addsub.rb +33 -0
  73. data/lib/HDLRuby/high_samples/addsubz.rb +37 -0
  74. data/lib/HDLRuby/high_samples/after.rb +28 -0
  75. data/lib/HDLRuby/high_samples/all_signals.rb +29 -0
  76. data/lib/HDLRuby/high_samples/alu.rb +61 -0
  77. data/lib/HDLRuby/high_samples/anonymous.rb +41 -0
  78. data/lib/HDLRuby/high_samples/before.rb +28 -0
  79. data/lib/HDLRuby/high_samples/blockblock.rb +26 -0
  80. data/lib/HDLRuby/high_samples/bugs/dadz.rb +22 -0
  81. data/lib/HDLRuby/high_samples/bugs/misample_instan.rb +20 -0
  82. data/lib/HDLRuby/high_samples/bugs/misample_updown.rb +22 -0
  83. data/lib/HDLRuby/high_samples/bugs/sample_add.rb +16 -0
  84. data/lib/HDLRuby/high_samples/bugs/sample_barrel.rb +13 -0
  85. data/lib/HDLRuby/high_samples/bugs/sample_daice.rb +57 -0
  86. data/lib/HDLRuby/high_samples/bugs/sample_kumiawase.rb +52 -0
  87. data/lib/HDLRuby/high_samples/bugs/sample_multi.rb +18 -0
  88. data/lib/HDLRuby/high_samples/bugs/sample_sub.rb +14 -0
  89. data/lib/HDLRuby/high_samples/bugs/z2.rb +32 -0
  90. data/lib/HDLRuby/high_samples/case.rb +32 -0
  91. data/lib/HDLRuby/high_samples/case2.rb +30 -0
  92. data/lib/HDLRuby/high_samples/change.rb +23 -0
  93. data/lib/HDLRuby/high_samples/clocks.rb +35 -0
  94. data/lib/HDLRuby/high_samples/comparer.rb +21 -0
  95. data/lib/HDLRuby/high_samples/conditionals.rb +29 -0
  96. data/lib/HDLRuby/high_samples/dff.rb +23 -0
  97. data/lib/HDLRuby/high_samples/each.rb +28 -0
  98. data/lib/HDLRuby/high_samples/exporter.rb +42 -0
  99. data/lib/HDLRuby/high_samples/functions.rb +60 -0
  100. data/lib/HDLRuby/high_samples/if_seq.rb +26 -0
  101. data/lib/HDLRuby/high_samples/inherit_as_dff.rb +32 -0
  102. data/lib/HDLRuby/high_samples/inherit_dff.rb +36 -0
  103. data/lib/HDLRuby/high_samples/instance.rb +37 -0
  104. data/lib/HDLRuby/high_samples/memory.rb +64 -0
  105. data/lib/HDLRuby/high_samples/multi_file.rb +27 -0
  106. data/lib/HDLRuby/high_samples/overload.rb +32 -0
  107. data/lib/HDLRuby/high_samples/paper_after.rb +49 -0
  108. data/lib/HDLRuby/high_samples/ram.rb +27 -0
  109. data/lib/HDLRuby/high_samples/registers.rb +139 -0
  110. data/lib/HDLRuby/high_samples/rom.rb +23 -0
  111. data/lib/HDLRuby/high_samples/scopeblockname.rb +37 -0
  112. data/lib/HDLRuby/high_samples/scopescope.rb +26 -0
  113. data/lib/HDLRuby/high_samples/shift.rb +31 -0
  114. data/lib/HDLRuby/high_samples/shift2.rb +40 -0
  115. data/lib/HDLRuby/high_samples/simple_instance.rb +31 -0
  116. data/lib/HDLRuby/high_samples/test_all.sh +10 -0
  117. data/lib/HDLRuby/high_samples/typedef.rb +24 -0
  118. data/lib/HDLRuby/high_samples/values.rb +70 -0
  119. data/lib/HDLRuby/high_samples/vector.rb +22 -0
  120. data/lib/HDLRuby/high_samples/with_decoder.rb +30 -0
  121. data/lib/HDLRuby/high_samples/with_fsm.rb +46 -0
  122. data/lib/HDLRuby/high_samples/with_pipe.rb +43 -0
  123. data/lib/HDLRuby/high_samples/with_seq.rb +25 -0
  124. data/lib/HDLRuby/hruby_bstr.rb +1085 -0
  125. data/lib/HDLRuby/hruby_check.rb +317 -0
  126. data/lib/HDLRuby/hruby_db.rb +432 -0
  127. data/lib/HDLRuby/hruby_error.rb +44 -0
  128. data/lib/HDLRuby/hruby_high.rb +4103 -0
  129. data/lib/HDLRuby/hruby_low.rb +4735 -0
  130. data/lib/HDLRuby/hruby_low2c.rb +1986 -0
  131. data/lib/HDLRuby/hruby_low2high.rb +738 -0
  132. data/lib/HDLRuby/hruby_low2seq.rb +248 -0
  133. data/lib/HDLRuby/hruby_low2sym.rb +126 -0
  134. data/lib/HDLRuby/hruby_low2vhd.rb +1437 -0
  135. data/lib/HDLRuby/hruby_low_bool2select.rb +295 -0
  136. data/lib/HDLRuby/hruby_low_cleanup.rb +193 -0
  137. data/lib/HDLRuby/hruby_low_fix_types.rb +437 -0
  138. data/lib/HDLRuby/hruby_low_mutable.rb +1803 -0
  139. data/lib/HDLRuby/hruby_low_resolve.rb +165 -0
  140. data/lib/HDLRuby/hruby_low_skeleton.rb +129 -0
  141. data/lib/HDLRuby/hruby_low_with_bool.rb +141 -0
  142. data/lib/HDLRuby/hruby_low_with_port.rb +167 -0
  143. data/lib/HDLRuby/hruby_low_with_var.rb +302 -0
  144. data/lib/HDLRuby/hruby_low_without_bit2vector.rb +88 -0
  145. data/lib/HDLRuby/hruby_low_without_concat.rb +162 -0
  146. data/lib/HDLRuby/hruby_low_without_connection.rb +113 -0
  147. data/lib/HDLRuby/hruby_low_without_namespace.rb +718 -0
  148. data/lib/HDLRuby/hruby_low_without_outread.rb +107 -0
  149. data/lib/HDLRuby/hruby_low_without_select.rb +206 -0
  150. data/lib/HDLRuby/hruby_serializer.rb +398 -0
  151. data/lib/HDLRuby/hruby_tools.rb +37 -0
  152. data/lib/HDLRuby/hruby_types.rb +239 -0
  153. data/lib/HDLRuby/hruby_values.rb +64 -0
  154. data/lib/HDLRuby/hruby_verilog.rb +1888 -0
  155. data/lib/HDLRuby/hruby_verilog_name.rb +52 -0
  156. data/lib/HDLRuby/low_samples/adder.yaml +97 -0
  157. data/lib/HDLRuby/low_samples/after.yaml +228 -0
  158. data/lib/HDLRuby/low_samples/before.yaml +223 -0
  159. data/lib/HDLRuby/low_samples/blockblock.yaml +48 -0
  160. data/lib/HDLRuby/low_samples/bugs/sample_add.yaml +97 -0
  161. data/lib/HDLRuby/low_samples/bugs/sample_daice.yaml +444 -0
  162. data/lib/HDLRuby/low_samples/bugs/sample_kumiawase.yaml +332 -0
  163. data/lib/HDLRuby/low_samples/bugs/sample_sub.yaml +97 -0
  164. data/lib/HDLRuby/low_samples/bugs/seqpar.yaml +184 -0
  165. data/lib/HDLRuby/low_samples/case.yaml +327 -0
  166. data/lib/HDLRuby/low_samples/change.yaml +135 -0
  167. data/lib/HDLRuby/low_samples/clocks.yaml +674 -0
  168. data/lib/HDLRuby/low_samples/cloner.rb +22 -0
  169. data/lib/HDLRuby/low_samples/comparer.yaml +85 -0
  170. data/lib/HDLRuby/low_samples/conditionals.yaml +133 -0
  171. data/lib/HDLRuby/low_samples/dff.yaml +107 -0
  172. data/lib/HDLRuby/low_samples/each.yaml +1328 -0
  173. data/lib/HDLRuby/low_samples/exporter.yaml +226 -0
  174. data/lib/HDLRuby/low_samples/functions.yaml +298 -0
  175. data/lib/HDLRuby/low_samples/generic_transmission.yaml +597 -0
  176. data/lib/HDLRuby/low_samples/inherit_as_dff.yaml +125 -0
  177. data/lib/HDLRuby/low_samples/inherit_dff.yaml +107 -0
  178. data/lib/HDLRuby/low_samples/load_yaml.rb +11 -0
  179. data/lib/HDLRuby/low_samples/memory.yaml +678 -0
  180. data/lib/HDLRuby/low_samples/namespace_extractor.rb +23 -0
  181. data/lib/HDLRuby/low_samples/overload.yaml +226 -0
  182. data/lib/HDLRuby/low_samples/paper_after.yaml +431 -0
  183. data/lib/HDLRuby/low_samples/port_maker.rb +14 -0
  184. data/lib/HDLRuby/low_samples/ram.yaml +207 -0
  185. data/lib/HDLRuby/low_samples/registers.yaml +228 -0
  186. data/lib/HDLRuby/low_samples/rom.yaml +2950 -0
  187. data/lib/HDLRuby/low_samples/shift.yaml +230 -0
  188. data/lib/HDLRuby/low_samples/shift2.yaml +2095 -0
  189. data/lib/HDLRuby/low_samples/simple_instance.yaml +102 -0
  190. data/lib/HDLRuby/low_samples/test_all.sh +43 -0
  191. data/lib/HDLRuby/low_samples/typedef.yaml +115 -0
  192. data/lib/HDLRuby/low_samples/values.yaml +577 -0
  193. data/lib/HDLRuby/low_samples/variable_maker.rb +14 -0
  194. data/lib/HDLRuby/low_samples/vector.yaml +56 -0
  195. data/lib/HDLRuby/low_samples/with_seq.yaml +188 -0
  196. data/lib/HDLRuby/low_samples/yaml2hdr.rb +10 -0
  197. data/lib/HDLRuby/low_samples/yaml2vhd.rb +19 -0
  198. data/lib/HDLRuby/sim/Makefile +19 -0
  199. data/lib/HDLRuby/sim/hruby_sim.h +590 -0
  200. data/lib/HDLRuby/sim/hruby_sim_calc.c +2362 -0
  201. data/lib/HDLRuby/sim/hruby_sim_core.c +589 -0
  202. data/lib/HDLRuby/sim/hruby_sim_list.c +93 -0
  203. data/lib/HDLRuby/sim/hruby_sim_vizualize.c +91 -0
  204. data/lib/HDLRuby/sim/hruby_value_pool.c +64 -0
  205. data/lib/HDLRuby/std/channel.rb +354 -0
  206. data/lib/HDLRuby/std/clocks.rb +165 -0
  207. data/lib/HDLRuby/std/counters.rb +82 -0
  208. data/lib/HDLRuby/std/decoder.rb +214 -0
  209. data/lib/HDLRuby/std/fsm.rb +516 -0
  210. data/lib/HDLRuby/std/pipeline.rb +220 -0
  211. data/lib/HDLRuby/std/reconf.rb +309 -0
  212. data/lib/HDLRuby/test_hruby_bstr.rb +2259 -0
  213. data/lib/HDLRuby/test_hruby_high.rb +594 -0
  214. data/lib/HDLRuby/test_hruby_high_low.rb +99 -0
  215. data/lib/HDLRuby/test_hruby_low.rb +934 -0
  216. data/lib/HDLRuby/v_samples/adder.v +10 -0
  217. data/lib/HDLRuby/v_samples/dff.v +12 -0
  218. data/lib/HDLRuby/v_samples/ram.v +20 -0
  219. data/lib/HDLRuby/v_samples/rom.v +270 -0
  220. data/lib/HDLRuby/version.rb +3 -0
  221. data/lib/HDLRuby.rb +11 -0
  222. data/makedoc +1 -0
  223. data/metadata.yaml +4 -0
  224. metadata +299 -0
@@ -0,0 +1,934 @@
1
+ ########################################################################
2
+ ## Program for testing the HDLRuby::Low module. ##
3
+ ########################################################################
4
+
5
+ require "HDLRuby/hruby_low.rb"
6
+ require "HDLRuby/hruby_serializer.rb"
7
+
8
+ include HDLRuby::Low
9
+
10
+ $success = true
11
+
12
+ print "\nCreating system types... "
13
+ begin
14
+ $systemT0 = SystemT.new(:systemT0, Scope.new)
15
+ $systemT1 = SystemT.new(:systemT1, Scope.new)
16
+ if $systemT0.name == :systemT0 then
17
+ puts "Ok."
18
+ else
19
+ puts "Error: invalid name, got #{$systemT0.name} but expecting systemT0."
20
+ $success = false
21
+ end
22
+ # rescue Exception => e
23
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
24
+ # $success = false
25
+ end
26
+
27
+
28
+ print "\nCreating a bit and a 8-bit data types... "
29
+ begin
30
+ $bit = Type.new(:bit)
31
+ $bit8 = TypeVector.new(:bit8,$bit,8)
32
+ if $bit8.name != :bit8 then
33
+ puts "Error: invalid name: got #{$bit8.name} but expecting bit8."
34
+ $success = false
35
+ elsif $bit8.base != $bit then
36
+ puts "Error: invalid type: got #{$bit8.base} but expecting bit."
37
+ $success = false
38
+ elsif $bit8.range != (7..0) then
39
+ puts "Error: invalid range: got #{$bit8.range} but expecting 7..0."
40
+ $success = false
41
+ else
42
+ puts "Ok."
43
+ end
44
+ # rescue Exception => e
45
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
46
+ # $success = false
47
+ end
48
+
49
+ puts "\nCreating signals..."
50
+ $sNames = ["i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "i10",
51
+ "clk",
52
+ "o0", "o1", "o2", "o3", "o4", "o5", "io", "s0", "s1", "s2",
53
+ ]
54
+ $signals = []
55
+ $sNames.each_with_index do |name,i|
56
+ print " SignalI #{name}... "
57
+ begin
58
+ # SignalT directly used.
59
+ $signals[i] = SignalI.new(name,$bit8)
60
+ if $signals[i].name != name.to_sym then
61
+ puts "Error: invalid signal name, got #{$signalIs[i].name} " +
62
+ " but expecting #{name}"
63
+ $success = false
64
+ elsif $signals[i].type != $bit8 then
65
+ puts "Error: invalid signal type, got #{$signals[i].type} " +
66
+ " but expecting #{:bit}"
67
+ $success = false
68
+ else
69
+ puts "Ok."
70
+ end
71
+ # rescue Exception => e
72
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
73
+ # $success = false
74
+ end
75
+ end
76
+
77
+ puts "\nAdding them to $systemT0 as input, output or inout... "
78
+ $signals.each do |signal|
79
+ begin
80
+ name = signal.name
81
+ print " For signal instance #{name}... "
82
+ if name[0..1] == "io" then
83
+ # Inout
84
+ $systemT0.add_inout(signal)
85
+ elsif name[0] == "i" then
86
+ # Input
87
+ $systemT0.add_input(signal)
88
+ elsif name[0] == "o" then
89
+ # Output
90
+ $systemT0.add_output(signal)
91
+ elsif name[0] == "s" then
92
+ # Inner
93
+ $systemT0.add_inner(signal)
94
+ else
95
+ # Default: input (should be the clock).
96
+ $systemT0.add_input(signal)
97
+ end
98
+ puts "Ok."
99
+ # rescue Exception => e
100
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
101
+ # $success = false
102
+ end
103
+ end
104
+
105
+ print "\nCompleting $systemT1 for further use... "
106
+ begin
107
+ $systemT1.add_input(SignalI.new("i0",$bit8))
108
+ $systemT1.add_input(SignalI.new("i1",$bit8))
109
+ $systemT1.add_input(SignalI.new("i2",$bit8))
110
+ $systemT1.add_output(SignalI.new("o0",$bit8))
111
+ $systemT1.add_output(SignalI.new("o1",$bit8))
112
+ $systemT1.add_inout(SignalI.new("io",$bit8))
113
+ puts "Ok."
114
+ # rescue Exception => e
115
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
116
+ # $success = false
117
+ end
118
+
119
+ puts "\nInstantiating the systems... "
120
+ begin
121
+ print " SystemI 0... "
122
+ $systemI0 = SystemI.new("systemI0",$systemT0)
123
+ success = true
124
+ if $systemI0.name != :systemI0 then
125
+ puts "Error: invalid name, got #{$systemI0.name} but expecting systemI0."
126
+ success = false
127
+ end
128
+ if $systemI0.systemT != $systemT0 then
129
+ puts "Error: invalid system type, got #{$systemI0.systemT.name} but expecting systemT0."
130
+ success = false
131
+ end
132
+ if success then
133
+ puts "Ok."
134
+ else
135
+ $success = false
136
+ end
137
+ print " SystemI 1... "
138
+ $systemI1 = SystemI.new("systemI1",$systemT1)
139
+ if $systemI1.name != :systemI1 then
140
+ puts "Error: invalid name, got #{$systemI1.name} but expecting systemI1."
141
+ success = false
142
+ end
143
+ if $systemI1.systemT != $systemT1 then
144
+ puts "Error: invalid system type, got #{$systemI1.systemT.name} but expecting systemT1."
145
+ success = false
146
+ end
147
+ if success then
148
+ puts "Ok."
149
+ else
150
+ $success = false
151
+ end
152
+ print " SystemI 2 (SystemT designated by name)... "
153
+ $systemI2 = SystemI.new("systemI2",$systemT1)
154
+ if $systemI2.systemT != $systemT1 then
155
+ puts "Error: invalid system type, got #{$systemI2.systemT.name} but expecting systemT1."
156
+ success = false
157
+ end
158
+ if success then
159
+ puts "Ok."
160
+ else
161
+ $success = false
162
+ end
163
+ # rescue Exception => e
164
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
165
+ # $success = false
166
+ end
167
+ $systemIs = [ $systemI0, $systemI1, $systemI2 ]
168
+
169
+ puts "\nAdding systems instances to $systemT0... "
170
+ begin
171
+ print " Adding $systemI1... "
172
+ $systemT0.add_systemI($systemI1)
173
+ print "Ok.\n Adding $systemI2... "
174
+ $systemT0.add_systemI($systemI2)
175
+ puts "Ok."
176
+ # rescue Exception => e
177
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
178
+ # $success = false
179
+ end
180
+
181
+ puts "\nCreating references for further connection of the signals..."
182
+ $pNames = ["p0i0", "p0i1", "p0i2", "p0i3", "p0i4", "p0i5", "p0i6", "p0i7",
183
+ "p0i8", "p0i9", "p0i10",
184
+ "p0o0", "p0o1", "p0o2", "p0o3", "p0o4", "p0o5", "p0o6", "p0o7",
185
+ "p0o8", "p0o9",
186
+ "p0io",
187
+ "p0s0", "p0s1", "p0s2", "p0clk",
188
+ "p1i0", "p1i1", "p1i2", "p1o0", "p1o1", "p1io",
189
+ "p1s0", "p1s1", "p1s2",
190
+ "p2i0", "p2i1", "p2i2", "p2o0", "p2o1", "p2io",
191
+ "p2s0", "p2s1", "p2s2"]
192
+ $refs = []
193
+ $pNames.each_with_index do |name,i|
194
+ print " Ref #{name}... "
195
+ begin
196
+ # Create the system reference.
197
+ system_ref = RefThis.new
198
+ if name[1] != "0" then
199
+ # Sub system case.
200
+ system_ref = RefName.new(Signed,system_ref,"systemI#{name[1]}")
201
+ end
202
+ # Create the signal reference.
203
+ $refs[i] = RefName.new(Signed,system_ref,"#{name[2..-1]}")
204
+ if $refs[i].name != name[2..-1].to_sym then
205
+ puts "Error: invalid signal, got #{$refs[i].name} " +
206
+ " but expecting #{name[2..-1]}"
207
+ $success = false
208
+ else
209
+ puts "Ok."
210
+ end
211
+ # rescue Exception => e
212
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
213
+ # $success = false
214
+ end
215
+ end
216
+
217
+ puts "\nCreating reference-only connections..."
218
+ $cNames = { "p0i0" => "p1i0", "p0i1" => "p1i1",
219
+ "p0i2" => "p2i0", "p0i3" => "p2i1",
220
+ "p1o0" => "p0o0", "p1o1" => "p2i2",
221
+ "p2o0" => "p0o1", "p2o1" => "p1i2",
222
+ "p0io" => "p1io"
223
+ }
224
+ $connections = []
225
+ $cNames.each do |sName,dName|
226
+ print " Connection #{sName} => #{dName}... "
227
+ begin
228
+ left = $refs[$pNames.index(sName)]
229
+ right = $refs[$pNames.index(dName)]
230
+ connection = Connection.new(left,right)
231
+ $connections << connection
232
+ success = true
233
+ if connection.left != left then
234
+ puts "Error: invalid reference, got #{connection.keft} but expecting #{left}."
235
+ success = false
236
+ end
237
+ if connection.right != right then
238
+ puts "Error: invalid reference, got #{connection.keft} but expecting #{right}."
239
+ success = false
240
+ end
241
+ if success then
242
+ puts "Ok."
243
+ else
244
+ $success = false
245
+ end
246
+ # rescue Exception => e
247
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
248
+ # $success = false
249
+ end
250
+ end
251
+
252
+
253
+ puts "\nCreating expressions... "
254
+ eNames = [ "i4+i5", "i4&i5", "i6-i7", "i6|i7", "i4+2", "i5&7",
255
+ "i8*i9", "i8+i9", "i9-i10"]
256
+
257
+ # Generate an expression from a signal or constant name
258
+ def eName2Exp(name)
259
+ # puts "eName2Exp with name=#{name}"
260
+ ref = $refs.find do |ref|
261
+ if ref.ref.respond_to?(:name) then
262
+ ref.ref.name == name.to_sym
263
+ else
264
+ ref.name == name.to_sym
265
+ end
266
+ end
267
+ # puts "ref=#{ref}"
268
+ unless ref
269
+ return Value.new($bit8,name.to_i)
270
+ end
271
+ return ref
272
+ end
273
+
274
+ $expressions = []
275
+ eNames.each do |eName|
276
+ print " Expression #{eName}... "
277
+ begin
278
+ left = eName2Exp(eName[0..1])
279
+ # puts "left=#{left}"
280
+ operator = eName[2].to_sym
281
+ # puts "operator=#{operator}"
282
+ right = eName2Exp(eName[3..-1])
283
+ # puts "right=#{right}"
284
+ expression = Binary.new(Signed,operator,left,right)
285
+ $expressions << expression
286
+ success = true
287
+ unless expression.left == left then
288
+ puts "Error: invalid left value, got #{expression.left} but expecting #{left}."
289
+ success = false
290
+ end
291
+ unless expression.right == right then
292
+ puts "Error: invalid right value, got #{expression.right} but expecting #{right}."
293
+ success = false
294
+ end
295
+ unless expression.operator == operator then
296
+ puts "Error: invalid operator, got #{expression.operator} but expecting #{operator}."
297
+ success = false
298
+ end
299
+ all_refs = expression.each_ref_deep.to_a
300
+ # puts "all_refs=#{all_refs}"
301
+ unless all_refs[0] == expression.left then
302
+ puts "Error: invalid first result for each_ref_deep, got #{all_refs[0]} but expecting #{expression.left}."
303
+ success = false
304
+ end
305
+ if expression.right.is_a?(HDLRuby::Low::Ref) then
306
+ unless all_refs[1] == expression.right then
307
+ puts "Error: invalid second result for each_ref_deep, got #{all_refs[1]} but expecting #{expression.right}."
308
+ success = false
309
+ end
310
+ else
311
+ if all_refs.size > 1 then
312
+ puts "Error: too many signals for each_ref_deep, got #{all_refs.size} but expecting 1."
313
+ success = false
314
+ end
315
+ end
316
+ if success then
317
+ unless all_refs.size < 3 then
318
+ puts "Error: too many signals for each_ref_deep, got #{all_refs.size} but expecting 2."
319
+ sucess = false
320
+ end
321
+ end
322
+ if success then
323
+ puts "Ok."
324
+ else
325
+ $success = false
326
+ end
327
+ # Remove the parents for reusing the references (just for test purpose)
328
+ all_refs.each {|ref| ref.parent = nil }
329
+ # rescue Exception => e
330
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
331
+ # $success = false
332
+ end
333
+ end
334
+
335
+
336
+ print "\nCreating an expression connection... "
337
+ begin
338
+
339
+ ref = $refs[$pNames.index("p0o2")]
340
+ connection = Connection.new(ref,$expressions[0])
341
+ $connections << connection
342
+ puts "Ok."
343
+ # rescue Exception => e
344
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
345
+ # $success = false
346
+ end
347
+
348
+
349
+ puts "\nAdding connections to $systemT0... "
350
+ begin
351
+ $connections.each.with_index do |connection,i|
352
+ key = $cNames.keys[i]
353
+ if key then
354
+ # System connections
355
+ print " Adding connection #{key} => #{$cNames[key]}... "
356
+ else
357
+ # Expression connections
358
+ print " Adding expression connection... "
359
+ end
360
+ $systemT0.add_connection(connection)
361
+ puts "Ok."
362
+ end
363
+ # rescue Exception => e
364
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
365
+ # $success = false
366
+ end
367
+
368
+
369
+ puts "\nCreating transmit statements..."
370
+ $stNames = [ ["p0o3", $expressions[1]], ["p0o4", $expressions[2]],
371
+ ["p0o5", $expressions[3]], ["p0o6", $expressions[4]],
372
+ ["p0o7", $expressions[5]], ["p0o8", $expressions[6]],
373
+ ["p0o9", $expressions[7]]
374
+ ]
375
+ $statements = []
376
+ $stNames.each do |pName,expression|
377
+ print " Transmission to #{pName}... "
378
+ begin
379
+ ref = $refs[$pNames.index(pName)]
380
+ statement = Transmit.new(ref,expression)
381
+ $statements << statement
382
+ success = true
383
+ unless statement.left == ref then
384
+ raise "Error: invalid left value, got #{statement.left} but expecting #{ref}."
385
+ success = false
386
+ end
387
+ unless statement.right == expression then
388
+ raise "Error: invalid right value, got #{statement.right} but expecting #{expression}."
389
+ success = false
390
+ end
391
+ if success then
392
+ puts "Ok."
393
+ else
394
+ $success = false
395
+ end
396
+ # rescue Exception => e
397
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
398
+ # $success = false
399
+ end
400
+ end
401
+
402
+ puts "\nCreating an if statement..."
403
+ $yes = $statements.pop
404
+ $no = $statements.pop
405
+ $cond = $expressions[0].clone
406
+ $if = If.new($cond,$yes,$no)
407
+ unless $if.condition == $cond then
408
+ raise "Error: invalid condition for if, got #{$if.condition} but expecting #{$cond}."
409
+ $success = false
410
+ end
411
+ unless $if.yes == $yes then
412
+ raise "Error: invalid yes for if, got #{$if.yes} but expecting #{$yes}."
413
+ $success = false
414
+ end
415
+ unless $if.no == $no then
416
+ raise "Error: invalid no for if, got #{$if.no} but expecting #{$no}."
417
+ $success = false
418
+ end
419
+
420
+
421
+ puts "\nCreating case statement..."
422
+ $value = $expressions[0].clone
423
+ $default = $statements.pop
424
+ $whens = []
425
+ $whens << When.new($expressions[0].clone,$statements.pop)
426
+ $whens << When.new($expressions[1].clone,$statements.pop)
427
+ $case = Case.new($value,$default)
428
+ $case.add_when($whens[0])
429
+ $case.add_when($whens[1])
430
+ unless $case.value == $value then
431
+ raise "Error: invalid value for case, got #{$case.value} but expecting #{$value}."
432
+ $success = false
433
+ end
434
+ unless $case.default == $default then
435
+ raise "Error: invalid default for case, got #{$case.default} but expecting #{$default}."
436
+ $success = false
437
+ end
438
+ $case.each_when.with_index do |w,i|
439
+ unless w.match == $whens[i].match then
440
+ raise "Error: invalid match for when, got #{w.match} but expecting #{$whens[i].match}."
441
+ $success = false
442
+ end
443
+ unless w.statement == $whens[i].statement then
444
+ raise "Error: invalid statement for when, got #{w.statement} but expecting #{$whens[i].statement}."
445
+ $success = false
446
+ end
447
+ end
448
+
449
+ # Adds the conditional statements
450
+ $statements << $if
451
+ $statements << $case
452
+
453
+ print "\nCreating a clock event... "
454
+ begin
455
+ ref = $refs.find{|ref| ref.name == :clk}
456
+ $event = Event.new(:posedge,ref)
457
+ success = true
458
+ if $event.type != :posedge then
459
+ puts "Error: invalid type of event, got #{$event.type} but expecting :posedge."
460
+ success = false
461
+ elsif $event.ref != ref then
462
+ puts "Error: invalid reference, got #{$event.ref} but expecting #{ref}."
463
+ success = false
464
+ end
465
+ if success then
466
+ puts "Ok."
467
+ else
468
+ $success = false
469
+ end
470
+ # rescue Exception => e
471
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
472
+ # $success = false
473
+ end
474
+
475
+
476
+ print "\nCreating a block... "
477
+ begin
478
+ $block = Block.new(:seq)
479
+ if $block.mode != :seq then
480
+ puts "Error: invalid block mode, got #{$block.type} but expecting :seq."
481
+ $success = false
482
+ else
483
+ puts "Ok."
484
+ end
485
+ # rescue Exception => e
486
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
487
+ # $success = false
488
+ end
489
+
490
+ puts "\nAdding statements to $block... "
491
+ $statements[0...$statements.size/2].each.with_index do |statement,i|
492
+ begin
493
+ print " For statement #{i}... "
494
+ $block.add_statement(statement)
495
+ puts "Ok."
496
+ # rescue Exception => e
497
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
498
+ # $success = false
499
+ end
500
+ end
501
+ puts "Checking the added statements... "
502
+ $statements[0...$statements.size/2].each.with_index do |statement,i|
503
+ begin
504
+ print " For statement #{i}... "
505
+ bStatement = $block.each_statement.to_a[i]
506
+ if bStatement != statement then
507
+ puts "Error: invalid statement, got #{bStatement} but expecting #{statement}."
508
+ $success = false
509
+ else
510
+ puts "Ok."
511
+ end
512
+ # rescue Exception => e
513
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
514
+ # $success = false
515
+ end
516
+ end
517
+
518
+ print "\nCreating $blockIn, another block... "
519
+ begin
520
+ $blockIn = Block.new(:par)
521
+ if $blockIn.mode != :par then
522
+ puts "Error: invalid block mode, got #{$blockIn.type} but expecting :par."
523
+ $success = false
524
+ else
525
+ puts "Ok."
526
+ end
527
+ # rescue Exception => e
528
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
529
+ # $success = false
530
+ end
531
+
532
+ puts "\nAdding statements to $blockIn... "
533
+ $statements[$statements.size/2..-1].each.with_index do |statement,i|
534
+ begin
535
+ print " For statement #{i+$statements.size/2}... "
536
+ $blockIn.add_statement(statement)
537
+ puts "Ok."
538
+ # rescue Exception => e
539
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
540
+ # $success = false
541
+ end
542
+ end
543
+
544
+ puts "\nAdding $blockIn to $block as a statement..."
545
+ $block.add_statement($blockIn)
546
+
547
+ puts "Checking the added statements deeply... "
548
+ i = 0
549
+ $bStatements = $block.each_statement_deep.to_a
550
+ $statements.each_with_index do |statement,j|
551
+ begin
552
+ print " For statement #{j}... "
553
+ bStatement = $bStatements[i]
554
+ i += 1
555
+ if bStatement.is_a?(Block) then
556
+ # Skip Block.
557
+ bStatement = $bStatements[i]
558
+ i += 1
559
+ end
560
+ if bStatement.is_a?(If) then
561
+ # Skip the following yes.
562
+ i += 1
563
+ end
564
+
565
+ if bStatement != statement then
566
+ puts "Error: invalid statement, got #{bStatement} but expecting #{statement}."
567
+ $success = false
568
+ else
569
+ puts "Ok."
570
+ end
571
+ # rescue Exception => e
572
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
573
+ # $success = false
574
+ end
575
+ end
576
+
577
+
578
+ print "\nCreating a behavior with $block... "
579
+ begin
580
+ $behavior = Behavior.new($block)
581
+ block = $behavior.block
582
+ if block != $block then
583
+ puts "Error: invalid block, got #{block} but expecting #{$block}."
584
+ $sucess = false
585
+ else
586
+ puts "Ok."
587
+ end
588
+ # rescue Exception => e
589
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
590
+ # $success = false
591
+ end
592
+
593
+ print "\nAdding an even to $behavior... "
594
+ begin
595
+ $behavior.add_event($event)
596
+ pEvent = $behavior.each_event.first
597
+ if pEvent != $event then
598
+ puts "Error: invalid event, got #{pEvent} but expecting #{$event}."
599
+ $sucess = false
600
+ else
601
+ puts "Ok."
602
+ end
603
+ # rescue Exception => e
604
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
605
+ # $success = false
606
+ end
607
+
608
+
609
+ print "\nAdding a behavior to $systemT0... "
610
+ begin
611
+ $systemT0.add_behavior($behavior)
612
+ sBehavior = $systemT0.each_behavior.first
613
+ if sBehavior != $behavior then
614
+ puts "Error: invalid behavior, got #{sBehavior} but expecting #{$behavior}."
615
+ $sucess = false
616
+ else
617
+ puts "Ok."
618
+ end
619
+ # rescue Exception => e
620
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
621
+ # $success = false
622
+ end
623
+
624
+ #################################################################
625
+ # Final global test.
626
+
627
+ puts "\nTesting the content of $systemT0... "
628
+ begin
629
+ iCount = 0 # Input signal instances counter
630
+ oCount = 0 # Output signal instances counter
631
+ ioCount = 0 # Inout signal instances counter
632
+ puts " Inputs... "
633
+ $systemT0.each_input.with_index do |input,i|
634
+ print " Input #{i}... "
635
+ signal = $signals[i]
636
+ iCount += 1
637
+ if input == signal then
638
+ puts "Ok."
639
+ else
640
+ puts "Error: unexpected input, got #{input} but expecting #{signal}."
641
+ $success = false
642
+ end
643
+ end
644
+ puts " Inputs by name... "
645
+ $signals.each do |input|
646
+ if /i[0-9]/.match(input.name) then
647
+ print " Input #{input.name}... "
648
+ signal = $systemT0.get_input(input.name)
649
+ if input == signal then
650
+ puts "Ok."
651
+ else
652
+ puts "Error: unexpected input, got #{signal} but expecting #{input}."
653
+ $success = false
654
+ end
655
+ end
656
+ end
657
+
658
+ puts " Outputs... "
659
+ $systemT0.each_output.with_index do |output,i|
660
+ print " Output #{i}... "
661
+ signal = $signals[i+iCount]
662
+ oCount += 1
663
+ if output == signal then
664
+ puts "Ok."
665
+ else
666
+ puts "Error: unexpected output, got #{output} but expecting #{signal}."
667
+ $success = false
668
+ end
669
+ end
670
+ puts " Outputs by name... "
671
+ $signals.each do |output|
672
+ if /o[0-9]/.match(output.name) then
673
+ print " Output #{output.name}... "
674
+ signal = $systemT0.get_output(output.name)
675
+ if output == signal then
676
+ puts "Ok."
677
+ else
678
+ puts "Error: unexpected output, got #{signal} but expecting #{output}."
679
+ $success = false
680
+ end
681
+ end
682
+ end
683
+
684
+ puts " Inouts... "
685
+ $systemT0.each_inout.with_index do |inout,i|
686
+ print " Inout #{i}... "
687
+ signal = $signals[i+iCount+oCount]
688
+ ioCount += 1
689
+ if inout == signal then
690
+ puts "Ok."
691
+ else
692
+ puts "Error: unexpected output, got #{inout} but expecting #{signal}."
693
+ $success = false
694
+ end
695
+ end
696
+ puts " Inouts by name... "
697
+ $signals.each do |inout|
698
+ if /io/.match(inout.name) then
699
+ print " Inout #{inout.name}... "
700
+ signal = $systemT0.get_inout(inout.name)
701
+ if inout == signal then
702
+ puts "Ok."
703
+ else
704
+ puts "Error: unexpected inout, got #{signal} but expecting #{inout}."
705
+ $success = false
706
+ end
707
+ end
708
+ end
709
+
710
+ puts " Inners... "
711
+ $systemT0.each_inner.with_index do |inner,i|
712
+ print " Inner #{i}... "
713
+ signal = $signals[i+iCount+oCount+ioCount]
714
+ if inner == signal then
715
+ puts "Ok."
716
+ else
717
+ puts "Error: unexpected inner, got #{inner} but expecting #{signal}."
718
+ $success = false
719
+ end
720
+ end
721
+ puts " Inners by name... "
722
+ $signals.each do |inner|
723
+ if /s[0-9]/.match(inner.name) then
724
+ print " Inner #{inner.name}... "
725
+ signal = $systemT0.get_inner(inner.name)
726
+ if inner == signal then
727
+ puts "Ok."
728
+ else
729
+ puts "Error: unexpected inner, got #{signal} but expecting #{inner}."
730
+ $success = false
731
+ end
732
+ end
733
+ end
734
+
735
+ puts " All signals... "
736
+ $systemT0.each_signal.with_index do |any,i|
737
+ print " SignalI #{i}... "
738
+ signal = $signals[i]
739
+ if any == signal then
740
+ puts "Ok."
741
+ else
742
+ puts "Error: unexpected signal, got #{any} but expecting #{signal}."
743
+ $success = false
744
+ end
745
+ end
746
+ puts " All signal instances by name... "
747
+ $signals.each do |signal|
748
+ print " SignalI #{signal.name}... "
749
+ signal = $systemT0.get_signal(signal.name)
750
+ if signal == signal then
751
+ puts "Ok."
752
+ else
753
+ puts "Error: unexpected signal, got #{signal} but expecting #{signal}."
754
+ $success = false
755
+ end
756
+ end
757
+
758
+ puts " System instances... "
759
+ $systemT0.each_systemI.with_index do |any,i|
760
+ print " SystemI #{i}... "
761
+ systemI = $systemIs[i+1]
762
+ if any == systemI then
763
+ puts "Ok."
764
+ else
765
+ puts "Error: unexpected systemI, got #{any} but expecting #{systemI}."
766
+ $success = false
767
+ end
768
+ end
769
+ puts " System instances by name... "
770
+ $systemIs[1..-1].each do |system|
771
+ print " SystemI #{system.name}... "
772
+ systemI = $systemT0.get_systemI(system.name)
773
+ if system == systemI then
774
+ puts "Ok."
775
+ else
776
+ puts "Error: unexpected systemI, got #{systemI} but expecting #{system}."
777
+ $success = false
778
+ end
779
+ end
780
+
781
+ ## Test temporarily disabled...
782
+ # print " All signals including system instance signal ones... "
783
+ # signals_deep = $systemT0.each_signal_deep.to_a
784
+ # exp_signals = $systemT0.each_signal.to_a + $systemI1.each_signal.to_a +
785
+ # $systemI2.each_signal.to_a
786
+ # signals_deep.sort_by! { |signal| signal.to_s }.uniq!
787
+ # exp_signals.sort_by! { |signal| signal.to_s }.uniq!
788
+ # puts "\nsignals_deep = #{signals_deep.map{|s| s.name}}"
789
+ # puts "exp_signals = #{signals_deep.map{|s| s.name}}"
790
+ # if signals_deep == exp_signals then
791
+ # puts "Ok."
792
+ # else
793
+ # puts "Error: did not get the right signals with :each_signal_deep."
794
+ # $success = false
795
+ # end
796
+
797
+ puts " Connections... "
798
+ $systemT0.each_connection.with_index do |connection,i|
799
+ print " Connection #{i}... "
800
+ if connection == $connections[i] then
801
+ puts "Ok."
802
+ else
803
+ puts "Error: unexpected systemI, got #{connection} but expecting #{$connections[i]}."
804
+ $success = false
805
+ end
806
+ end
807
+
808
+ # puts $systemT0.each_signal.to_a.size
809
+
810
+ # NOTE: The access by path is deprecated.
811
+ #
812
+ # puts " Reference path... "
813
+ # $systemT0.each_connection.with_index do |connection,i|
814
+ # unless connection.right.is_a?(HDLRuby::Low::Ref) then
815
+ # # Skip connections to expression since they are not defined through
816
+ # # $cNames
817
+ # next
818
+ # end
819
+ # # Get the path.
820
+ # path = connection.left.path_each
821
+ # print " left path[#{i}]=#{path.to_a}... "
822
+ # signal_p = $systemT0.get_signal(path)
823
+ # # And test from the refernce directly (must be identical).
824
+ # signal_r = $systemT0.get_signal(connection.left)
825
+ # print "signal #{signal_p.name}... "
826
+ # exp_left_str = $cNames.keys[i]
827
+ # case exp_left_str[1]
828
+ # when "0" then
829
+ # exp_left = $systemT0.get_signal(exp_left_str[2..-1])
830
+ # when "1" then
831
+ # exp_left = $systemI1.systemT.get_signal(exp_left_str[2..-1])
832
+ # when "2" then
833
+ # exp_left = $systemI2.systemT.get_signal(exp_left_str[2..-1])
834
+ # else
835
+ # raise "Test-internal error: could not find signal for #{exp_left_str}."
836
+ # end
837
+ # success = true
838
+ # if exp_left != signal_p then
839
+ # puts "Error: invalid signal from path #{path}, got #{signal_p.name} but expecting #{exp_left.name}."
840
+ # success = false
841
+ # end
842
+ # if exp_left != signal_r then
843
+ # puts "Error: invalid signal from reference #{path}, got #{signal_r.name} but expecting #{exp_left.name}."
844
+ # success = false
845
+ # end
846
+ # if success then
847
+ # puts "Ok."
848
+ # else
849
+ # $success = false
850
+ # end
851
+ # end
852
+ # rescue Exception => e
853
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
854
+ # $success = false
855
+ end
856
+
857
+
858
+ # Now testing the conversion to YAML.
859
+
860
+ print "\n\nConverting $systemT0 to a YAML string... "
861
+ begin
862
+ $yaml_str = $systemT0.to_yaml
863
+ puts "Ok."
864
+ # rescue Exception => e
865
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
866
+ # $success = false
867
+ end
868
+ puts "YAML result:", $yaml_str
869
+
870
+ print "\n\n Regenerating the objects from the YAML string... "
871
+ begin
872
+ $systemTx = HDLRuby.from_yaml($yaml_str)[-1]
873
+ $yaml_str2 = $systemTx.to_yaml
874
+ puts "YAML result2:", $yaml_str2
875
+ if ($yaml_str != $yaml_str2) then
876
+ puts "Error: the regenerated system type is different from the original one."
877
+ strs = $yaml_str.each_line
878
+ $yaml_str2.each_line.with_index do |line2,i|
879
+ line = strs.next
880
+ if line2 != line then
881
+ print " line ##{i} differs.\n Got #{line2} But #{line}"
882
+ end
883
+ end
884
+ $success = false
885
+ end
886
+ puts "Ok."
887
+ # rescue Exception => e
888
+ # puts "Error: unexpected exception raised #{e.inspect}\n"
889
+ # $success = false
890
+ end
891
+
892
+ # Checking low samples
893
+ print "Testing the low sample adder.yaml... "
894
+ $adder_str = File.read("./low_samples/adder.yaml")
895
+ $adder = HDLRuby.from_yaml($adder_str)[-1]
896
+ unless $adder.is_a?(SystemT) then
897
+ puts "Error: invalid class for a system: #{$adder.class}"
898
+ $success = false
899
+ end
900
+ $adder_inputs = $adder.each_input.to_a
901
+ unless $adder_inputs.size == 2 then
902
+ puts "Error: invalid number of inputs, expecting 2 but got: #{$adder_inputs.size}"
903
+ $success = false
904
+ end
905
+ unless $adder_inputs[0].name == :x then
906
+ puts "Error: invalid name for first input, expecting x but got: #{$adder_inputs[0].name}"
907
+ $success = false
908
+ end
909
+ unless $adder_inputs[0].type.is_a?(TypeVector) then
910
+ puts "Error: invalid type for first input, expecting TypeVector but got: #{$adder_inputs[0].type.class}"
911
+ $success = false
912
+ end
913
+ unless $adder_inputs[1].name == :y then
914
+ puts "Error: invalid name for second input, expecting y but got: #{$adder_inputs[1].name}"
915
+ $success = false
916
+ end
917
+ unless $adder_inputs[1].type.is_a?(TypeVector) then
918
+ puts "Error: invalid type for first input, expecting TypeVector but got: #{$adder_inputs[1].type.class}"
919
+ $success = false
920
+ end
921
+
922
+ puts "Ok." if $success
923
+
924
+
925
+
926
+
927
+ if $success then
928
+ puts "\nSuccess."
929
+ else
930
+ puts "\nFailure."
931
+ end
932
+
933
+
934
+ # puts YAML.dump($systemT0)