class Array

Extends the Array class for conversion to a high-level expression.

Public Instance Methods

<=(expr) click to toggle source

Add support of the left arrow operator.

# File lib/HDLRuby/hruby_high.rb, line 4494
def <=(expr)
    self.to_expr <= expr
end
call(obj = nil, &ruby_block) click to toggle source

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
constant(hsh) click to toggle source

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
hcase(value,&ruby_block) click to toggle source

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
inner(*names) click to toggle source

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
inout(*names) click to toggle source

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
input(*names) click to toggle source

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
make(name,*args) click to toggle source

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
output(*names) click to toggle source

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
to_expr() click to toggle source

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
to_ref() click to toggle source

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
to_type() click to toggle source

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
typedef(name) click to toggle source

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