class Array
Extends the Array
class for conversion to a high-level expression.
Public Instance Methods
Add support of the left arrow operator.
# File lib/HDLRuby/hruby_high.rb, line 4494 def <=(expr) self.to_expr <= expr end
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.
# File lib/HDLRuby/hruby_high.rb, line 4503 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
Declares high-level inner constants named from hsh
with names and corresponding values.
# File lib/HDLRuby/hruby_high.rb, line 4480 def constant(hsh) High.top_user.make_constants(self.to_type,hsh) end
Creates a hcase statement executing ruby_block
on the element of the array selected by value
# File lib/HDLRuby/hruby_high.rb, line 4486 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
Declares high-level inner signals named names
of the current type.
# File lib/HDLRuby/hruby_high.rb, line 4474 def inner(*names) High.top_user.make_inners(self.to_type,*names) end
Declares high-level untyped inout signals named names
of the current type.
# File lib/HDLRuby/hruby_high.rb, line 4468 def inout(*names) High.top_user.make_inouts(self.to_type,*names) end
Declares high-level input signals named names
of the current type.
# File lib/HDLRuby/hruby_high.rb, line 4456 def input(*names) High.top_user.make_inputs(self.to_type,*names) end
Create an array of instances of system name
, using args
as arguments.
NOTE: the array must have a single element that is an integer.
# File lib/HDLRuby/hruby_high.rb, line 4519 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
Declares high-level untyped output signals named names
of the current type.
# File lib/HDLRuby/hruby_high.rb, line 4462 def output(*names) High.top_user.make_outputs(self.to_type,*names) end
Converts to a new high-level expression.
# File lib/HDLRuby/hruby_high.rb, line 4414 def to_expr # expr = Concat.new(TypeTuple.new(:"",:little,*self.map do |elem| # elem.to_expr.type # end)) elems = self.map {|elem| elem.to_expr } typ= TypeTuple.new(:"",:little) elems.each {|elem| typ.add_type(elem.type) } expr = Concat.new(typ) elems.each {|elem| expr.add_expression(elem) } expr end
Converts to a new high-level reference.
# File lib/HDLRuby/hruby_high.rb, line 4427 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
Converts to a new type.
# File lib/HDLRuby/hruby_high.rb, line 4437 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
Declares a new type definition with name
equivalent to current one.
# File lib/HDLRuby/hruby_high.rb, line 4449 def typedef(name) return self.to_type.typedef(name) end