Class: Array
Overview
Extends the Array class for conversion to a high-level expression.
Direct Known Subclasses
Instance Method Summary collapse
-
#call(obj = nil, &ruby_block) ⇒ Object
Create an array whose number of elements is given by the content of the current array, filled by +obj+ objects.
-
#constant(hsh) ⇒ Object
Declares high-level inner constants named from +hsh+ with names and corresponding values.
-
#hcase(value, &ruby_block) ⇒ Object
Creates a hcase statement executing +ruby_block+ on the element of the array selected by +value+.
-
#inner(*names) ⇒ Object
Declares high-level inner signals named +names+ of the current type.
-
#inout(*names) ⇒ Object
Declares high-level untyped inout signals named +names+ of the current type.
-
#input(*names) ⇒ Object
Declares high-level input signals named +names+ of the current type.
-
#make(name, *args) ⇒ Object
Create an array of instances of system +name+, using +args+ as arguments.
-
#output(*names) ⇒ Object
Declares high-level untyped output signals named +names+ of the current type.
-
#to_expr ⇒ Object
Converts to a new high-level expression.
-
#to_ref ⇒ Object
Converts to a new high-level reference.
-
#to_type ⇒ Object
Converts to a new type.
-
#typedef(name) ⇒ Object
Declares a new type definition with +name+ equivalent to current one.
Instance Method Details
#call(obj = nil, &ruby_block) ⇒ Object
Create an array whose number of elements is given by the content of the current array, filled by +obj+ objects. If +obj+ is nil, +ruby_block+ is used instead for filling the array.
4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 |
# File 'lib/HDLRuby/hruby_high.rb', line 4299 def call(obj = nil, &ruby_block) unless self.size == 1 then raise AnyError, "Invalid array for call opertor." end number = self[0].to_i if obj then return Array.new(number,obj) else return Array.new(number,&ruby_block) end end |
#constant(hsh) ⇒ Object
Declares high-level inner constants named from +hsh+ with names and corresponding values.
4281 4282 4283 |
# File 'lib/HDLRuby/hruby_high.rb', line 4281 def constant(hsh) High.top_user.make_constants(self.to_type,hsh) end |
#hcase(value, &ruby_block) ⇒ Object
Creates a hcase statement executing +ruby_block+ on the element of the array selected by +value+
4287 4288 4289 4290 4291 4292 |
# File 'lib/HDLRuby/hruby_high.rb', line 4287 def hcase(value,&ruby_block) High.cur_block.hcase(value) self.each.with_index do |elem,i| High.cur_block.hwhen(i) { ruby_block.call(elem) } end end |
#inner(*names) ⇒ Object
Declares high-level inner signals named +names+ of the current type.
4275 4276 4277 |
# File 'lib/HDLRuby/hruby_high.rb', line 4275 def inner(*names) High.top_user.make_inners(self.to_type,*names) end |
#inout(*names) ⇒ Object
Declares high-level untyped inout signals named +names+ of the current type.
4269 4270 4271 |
# File 'lib/HDLRuby/hruby_high.rb', line 4269 def inout(*names) High.top_user.make_inouts(self.to_type,*names) end |
#input(*names) ⇒ Object
Declares high-level input signals named +names+ of the current type.
4257 4258 4259 |
# File 'lib/HDLRuby/hruby_high.rb', line 4257 def input(*names) High.top_user.make_inputs(self.to_type,*names) end |
#make(name, *args) ⇒ Object
Create an array of instances of system +name+, using +args+ as arguments.
NOTE: the array must have a single element that is an integer.
4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 |
# File 'lib/HDLRuby/hruby_high.rb', line 4315 def make(name,*args) # Check the array and get the number of elements. size = self[0] unless self.size == 1 and size.is_a?(::Integer) raise AnyError, "Invalid array for declaring a list of instances." end # Get the system to instantiate. systemT = High.space_call(name) # Get the name of the instance from the arguments. nameI = args.shift.to_s # Create the instances. instances = size.times.map do |i| systemT.instantiate((nameI + "[#{i}]").to_sym,*args) end nameI = nameI.to_sym # Add them to the top system High.space_top.user.add_groupI(nameI,*instances) # Register and return the result. High.space_reg(nameI) { High.space_top.user.get_groupI(nameI) } return High.space_top.user.get_groupI(nameI) end |
#output(*names) ⇒ Object
Declares high-level untyped output signals named +names+ of the current type.
4263 4264 4265 |
# File 'lib/HDLRuby/hruby_high.rb', line 4263 def output(*names) High.top_user.make_outputs(self.to_type,*names) end |
#to_expr ⇒ Object
Converts to a new high-level expression.
4218 4219 4220 4221 4222 4223 4224 4225 |
# File 'lib/HDLRuby/hruby_high.rb', line 4218 def to_expr # expr = Concat.new expr = Concat.new(TypeTuple.new(:"",:little,*self.map do |elem| elem.to_expr.type end)) self.each {|elem| expr.add_expression(elem.to_expr) } expr end |
#to_ref ⇒ Object
Converts to a new high-level reference.
4228 4229 4230 4231 4232 4233 4234 4235 |
# File 'lib/HDLRuby/hruby_high.rb', line 4228 def to_ref # expr = RefConcat.new expr = RefConcat.new(TypeTuple.new(:"",:little,*self.map do |elem| elem.to_ref.type end)) self.each {|elem| expr.add_ref(elem.to_ref) } expr end |
#to_type ⇒ Object
Converts to a new type.
4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 |
# File 'lib/HDLRuby/hruby_high.rb', line 4238 def to_type if self.size == 1 and ( self[0].is_a?(Range) or self[0].respond_to?(:to_i) ) then # Vector type case return bit[*self] else # Tuple type case. return TypeTuple.new(:"",:little,*self) end end |
#typedef(name) ⇒ Object
Declares a new type definition with +name+ equivalent to current one.
4250 4251 4252 |
# File 'lib/HDLRuby/hruby_high.rb', line 4250 def typedef(name) return self.to_type.typedef(name) end |