HDLRuby 2.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,432 @@
1
+ require "HDLRuby/hruby_base"
2
+ require "HDLRuby/hruby_bstr"
3
+
4
+ # @deprecated hruby_db.rb (former hruby_low.rb) is deprecated.
5
+
6
+
7
+ warn "hruby_db.rb (former hruby_low.rb) is deprecated."
8
+
9
+ ##
10
+ # Low-level libraries for describing digital hardware.
11
+ #######################################################
12
+ module HDLRuby::Low
13
+
14
+ Base = HDLRuby::Base
15
+
16
+ ##
17
+ # Describes system type.
18
+ class SystemT < Base::SystemT
19
+
20
+ # Library of the existing system types.
21
+ SystemTs = { }
22
+ private_constant :SystemTs
23
+
24
+ # Get an existing system type by +name+.
25
+ def self.get(name)
26
+ return name if name.is_a?(SystemT)
27
+ return SystemTs[name.to_sym]
28
+ end
29
+
30
+ # Creates a new system type named +name+.
31
+ def initialize(name)
32
+ # Initialize the system type structure.
33
+ super(name)
34
+ # Update the library of existing system types.
35
+ # Note: no check is made so an exisiting system type with a same
36
+ # name is overwritten.
37
+ SystemTs[@name] = self
38
+ end
39
+ end
40
+
41
+ ##
42
+ # Module bringing low-level properties to types
43
+ module Ltype
44
+
45
+ # Library of the existing types.
46
+ Types = { }
47
+ private_constant :Types
48
+
49
+ # # Get an existing signal type by +name+.
50
+ # def self.get(name)
51
+ # return name if name.is_a?(Type)
52
+ # return Types[name.to_sym]
53
+ # end
54
+
55
+ # Ensures initialize registers the type name
56
+ # and adds the get methods to the class
57
+ def self.included(base) # built-in Ruby hook for modules
58
+ base.class_eval do
59
+ original_method = instance_method(:initialize)
60
+ define_method(:initialize) do |*args, &block|
61
+ original_method.bind(self).call(*args, &block)
62
+ # Update the library of existing types.
63
+ # Note: no check is made so an exisiting type with a same
64
+ # name is overwritten.
65
+ Types[@name] = self
66
+ end
67
+
68
+ # Get an existing signal type by +name+.
69
+ def self.get(name)
70
+ # return name if name.is_a?(Type)
71
+ return name if name.respond_to?(:ltype?)
72
+ return Types[name.to_sym]
73
+ end
74
+ end
75
+ end
76
+
77
+ # Tells ltype has been included.
78
+ def ltype?
79
+ return true
80
+ end
81
+ end
82
+
83
+
84
+ # ##
85
+ # # Describes a data type.
86
+ # class Type < Base::Type
87
+ # # The base type
88
+ # attr_reader :base
89
+
90
+ # # The size in bits
91
+ # attr_reader :size
92
+
93
+ # # Library of the existing types.
94
+ # Types = { }
95
+ # private_constant :Types
96
+
97
+ # # Get an existing signal type by +name+.
98
+ # def self.get(name)
99
+ # return name if name.is_a?(Type)
100
+ # return Types[name.to_sym]
101
+ # end
102
+
103
+ # # Creates a new type named +name+ based of +base+ and of +size+ bits.
104
+ # def initialize(name,base,size)
105
+ # # Initialize the structure of the data type.
106
+ # super(name)
107
+ # # Check and set the base.
108
+ # @base = base.to_sym
109
+ # # Check and set the size.
110
+ # @size = size.to_i
111
+
112
+ # # Update the library of existing types.
113
+ # # Note: no check is made so an exisiting type with a same
114
+ # # name is overwritten.
115
+ # Types[@name] = self
116
+ # end
117
+ # end
118
+
119
+ ##
120
+ # Describes a data type.
121
+ class Type < Base::Type
122
+ include Ltype
123
+ end
124
+
125
+ # ##
126
+ # # Describes a numeric type.
127
+ # class TypeNumeric < Base::TypeNumeric
128
+ # include Ltype
129
+ # end
130
+
131
+ ##
132
+ # Describes a vector data type.
133
+ class TypeVector < Base::TypeVector
134
+
135
+ # Creates a new type vector named +name+ from a +base+ type and with
136
+ # +range+
137
+ def initialize(name,base,range)
138
+ # Ensure base si a HDLRuby::Low type.
139
+ base = Type.get(base)
140
+ # Create the type.
141
+ super(name,base,range)
142
+ end
143
+
144
+ include Ltype
145
+ end
146
+
147
+ ##
148
+ # Describes a signed integer data type.
149
+ class TypeSigned < Base::TypeSigned
150
+ include Ltype
151
+ end
152
+
153
+ ##
154
+ # Describes a unsigned integer data type.
155
+ class TypeUnsigned < Base::TypeUnsigned
156
+ include Ltype
157
+ end
158
+
159
+ ##
160
+ # Describes a float data type.
161
+ class TypeFloat < Base::TypeFloat
162
+ include Ltype
163
+ end
164
+
165
+ # Standard vector types.
166
+ Integer = TypeSigned.new(:integer)
167
+ Natural = TypeUnsigned.new(:natural)
168
+ Bignum = TypeSigned.new(:bignum,HDLRuby::Infinity..0)
169
+ Real = TypeFloat.new(:float)
170
+
171
+
172
+
173
+
174
+
175
+ ##
176
+ # Describes a tuple data type.
177
+ class TypeTuple < Base::TypeTuple
178
+ include Ltype
179
+ end
180
+
181
+ ##
182
+ # Describes a structure data type.
183
+ class TypeStruct< Base::TypeStruct
184
+ include Ltype
185
+ end
186
+
187
+
188
+ ##
189
+ # Describes a behavior.
190
+ class Behavior < Base::Behavior
191
+ end
192
+
193
+
194
+ ##
195
+ # Describes a timed behavior.
196
+ #
197
+ # NOTE:
198
+ # * this is the only kind of behavior that can include time statements.
199
+ # * this kind of behavior is not synthesizable!
200
+ class TimeBehavior < Base::TimeBehavior
201
+ end
202
+
203
+
204
+ ##
205
+ # Describes an event.
206
+ class Event < Base::Event
207
+ end
208
+
209
+
210
+ ##
211
+ # Describes a block.
212
+ class Block < Base::Block
213
+ end
214
+
215
+ # Describes a timed block.
216
+ #
217
+ # NOTE:
218
+ # * this is the only kind of block that can include time statements.
219
+ # * this kind of block is not synthesizable!
220
+ class TimeBlock < Base::TimeBlock
221
+ end
222
+
223
+
224
+ ##
225
+ # Decribes a piece of software code.
226
+ class Code < Base::Code
227
+ end
228
+
229
+
230
+ ##
231
+ # Describes a signal.
232
+ class SignalI < Base::SignalI
233
+ # Creates a new signal named +name+ typed as +type+.
234
+ def initialize(name,type)
235
+ # Ensures type is from Low::Type
236
+ type = Type.get(type)
237
+ # Initialize the signal structure.
238
+ super(name,type)
239
+ end
240
+ end
241
+
242
+
243
+ ##
244
+ # Describes a system instance.
245
+ class SystemI < Base::SystemI
246
+
247
+ # Creates a new system instance of system type +systemT+ named +name+.
248
+ def initialize(name, systemT)
249
+ # Ensures systemT is from Low::SystemT
250
+ systemT = SystemT.get(systemT)
251
+ # Initialize the system instance structure.
252
+ super(name,systemT)
253
+ end
254
+ end
255
+
256
+
257
+
258
+ ##
259
+ # Describes a statement.
260
+ #
261
+ # NOTE: this is an abstract class which is not to be used directly.
262
+ class Statement < Base::Statement
263
+ end
264
+
265
+
266
+ # ##
267
+ # # Describes a declare statement.
268
+ # class Declare < Base::Declare
269
+ # end
270
+
271
+
272
+ ##
273
+ # Decribes a transmission statement.
274
+ class Transmit < Base::Transmit
275
+ end
276
+
277
+
278
+ ##
279
+ # Describes an if statement.
280
+ class If < Base::If
281
+ end
282
+
283
+
284
+ ##
285
+ # Describes a case statement.
286
+ class Case < Base::Case
287
+ end
288
+
289
+
290
+ ##
291
+ # Describes a delay: not synthesizable.
292
+ class Delay < Base::Delay
293
+ end
294
+
295
+ ##
296
+ # Describes a wait delay statement: not synthesizable!
297
+ class TimeWait < Base::TimeWait
298
+ end
299
+
300
+ ##
301
+ # Describes a timed loop statement: not synthesizable!
302
+ class TimeRepeat < Base::TimeRepeat
303
+ end
304
+
305
+
306
+ ##
307
+ # Describes a connection.
308
+ #
309
+ # NOTE: eventhough a connection is semantically different from a
310
+ # transmission, it has a common structure. Therefore, it is described
311
+ # as a subclass of a transmit.
312
+ class Connection < Base::Connection
313
+ end
314
+
315
+
316
+
317
+ ##
318
+ # Describes an expression.
319
+ #
320
+ # NOTE: this is an abstract class which is not to be used directly.
321
+ class Expression < Base::Expression
322
+ end
323
+
324
+
325
+ ##
326
+ # Describes a value.
327
+ class Value < Base::Value
328
+ # Creates a new value typed as +type+ and containing numeric +content+.
329
+ def initialize(type,content)
330
+ # Ensures type is from Low::Type
331
+ type = Type.get(type)
332
+ # # Ensures the content is valid for low-level hardware.
333
+ # unless content.is_a?(Numeric) or
334
+ # content.is_a?(HDLRuby::BitString) then
335
+ # raise "Invalid type for a value content: #{content.class}."
336
+ # end # NOW CHECKED BY BASE
337
+ # Initialize the value structure.
338
+ super(type,content)
339
+ end
340
+ end
341
+
342
+
343
+ ##
344
+ # Describes an operation.
345
+ #
346
+ # NOTE: this is an abstract class which is not to be used directly.
347
+ class Operation < Base::Operation
348
+ end
349
+
350
+
351
+ ##
352
+ # Describes an unary operation.
353
+ class Unary < Base::Unary
354
+ end
355
+
356
+
357
+ ##
358
+ # Describes an binary operation.
359
+ class Binary < Base::Binary
360
+ end
361
+
362
+
363
+ # ##
364
+ # # Describes a ternary operation.
365
+ # class Ternary < Base::Ternary
366
+ # end
367
+
368
+
369
+ ##
370
+ # Describes a section operation (generalization of the ternary operator).
371
+ #
372
+ # NOTE: choice is using the value of +select+ as an index.
373
+ class Select < Base::Select
374
+ end
375
+
376
+
377
+ ##
378
+ # Describes a concatenation expression.
379
+ class Concat < Base::Concat
380
+ end
381
+
382
+
383
+ ##
384
+ # Describes a reference expression.
385
+ #
386
+ # NOTE: this is an abstract class which is not to be used directly.
387
+ class Ref < Base::Ref
388
+ end
389
+
390
+
391
+ ##
392
+ # Describes reference concatenation.
393
+ class RefConcat < Base::RefConcat
394
+ end
395
+
396
+
397
+ ##
398
+ # Describes an index reference.
399
+ class RefIndex < Base::RefIndex
400
+ end
401
+
402
+
403
+ ##
404
+ # Describes a range reference.
405
+ class RefRange < Base::RefRange
406
+ end
407
+
408
+
409
+ ##
410
+ # Describes a name reference.
411
+ class RefName < Base::RefName
412
+ end
413
+
414
+
415
+ ##
416
+ # Describe a this reference.
417
+ #
418
+ # This is the current system.
419
+ class RefThis < Base::RefThis
420
+ end
421
+
422
+
423
+ # # Ensures constants defined is this module are prioritary.
424
+ # # @!visibility private
425
+ # def self.included(base) # :nodoc:
426
+ # if base.const_defined?(:SignalI) then
427
+ # base.send(:remove_const,:SignalI)
428
+ # base.const_set(:SignalI,HDLRuby::Low::Signal)
429
+ # end
430
+ # end
431
+
432
+ end
@@ -0,0 +1,44 @@
1
+ module HDLRuby
2
+
3
+
4
+ ## The HDLRuby general error class.
5
+ class AnyError < ::StandardError
6
+ end
7
+
8
+ module High
9
+ ## The HDLRuby::High error class.
10
+ class AnyError < HDLRuby::AnyError
11
+ end
12
+
13
+ ## The HDLRuby error class replacing the standard Ruby NoMethodError
14
+ class NotDefinedError < AnyError
15
+ end
16
+ end
17
+
18
+ module Low
19
+ ## The HDLRuby::Low error class.
20
+ class AnyError < HDLRuby::AnyError
21
+ end
22
+ end
23
+
24
+ ## Execution context for processing error messages in +code+.
25
+ # The relevant error message to are assumed to be the ones whose file
26
+ # name is one given in +files+.
27
+ def error_manager(files,&code)
28
+ begin
29
+ code.call
30
+ rescue ::StandardError => e
31
+ # pp e.backtrace
32
+ # Keep the relevant
33
+ e.backtrace.select! do |mess|
34
+ files.find {|file| mess.include?(File.basename(file))}
35
+ end
36
+ puts "#{e.backtrace[0]}: #{e.message}"
37
+ e.backtrace[1..-1].each { |mess| puts " from #{mess}"}
38
+ exit
39
+ rescue
40
+ raise "Big Bad Bug"
41
+ end
42
+ end
43
+
44
+ end