Class: HDLRuby::High::Cast

Inherits:
Low::Cast show all
Includes:
HExpression
Defined in:
lib/HDLRuby/hruby_high.rb,
lib/HDLRuby/hruby_rsim.rb,
lib/HDLRuby/hruby_rcsim.rb

Overview

Describes a cast.

Constant Summary

Constants included from Low::Low2Symbol

Low::Low2Symbol::Low2SymbolPrefix, Low::Low2Symbol::Low2SymbolTable, Low::Low2Symbol::Symbol2LowTable

Instance Attribute Summary

Attributes included from HExpression

#systemT, #type

Attributes inherited from Low::Cast

#child

Attributes inherited from Low::Expression

#type

Attributes included from Low::Hparent

#parent

Instance Method Summary collapse

Methods included from HExpression

#<=>, #[], #as, #coerce, #constant?, #inout, #input, #ljust, #lr, #ls, #match_type, #mux, orig_operator, #orig_operator, #output, #rjust, #rr, #rs, #seach, #sext, #to_bit, #to_signed, #to_unsigned, #to_value, #to_value?, #zext

Methods inherited from Low::Cast

#boolean_in_assign2select, #casts_without_expression!, #clone, #each_deep, #each_node, #each_node_deep, #each_ref_deep, #eql?, #explicit_types, #hash, #immutable?, #initialize, #to_c, #to_hdr, #to_high, #to_verilog, #to_vhdl, #use_name?

Methods included from Low::OneChildMutable

#map_nodes!, #replace_expressions!, #set_child!

Methods inherited from Low::Expression

#boolean?, #break_types!, #clone, #each_node, #each_node_deep, #each_ref_deep, #eql?, #explicit_types, #extract_selects_to!, #hash, #immutable?, #initialize, #leftvalue?, #map_nodes!, #replace_expressions!, #replace_names!, #rightvalue?, #set_type!, #signal2subs!, #statement, #to_c, #to_c_expr, #to_hdr, #to_high, #to_vhdl, #use_name?

Methods included from Low::Low2Symbol

#to_sym

Methods included from Low::Hparent

#hierarchy, #no_parent!, #scope

Constructor Details

This class inherits a constructor from HDLRuby::Low::Cast

Instance Method Details

#execute(mode) ⇒ Object

Executes the expression.



1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
# File 'lib/HDLRuby/hruby_rsim.rb', line 1063

def execute(mode)
    # puts "child=#{self.child}"
    # puts "child object=#{self.child.object}(#{self.child.object.name})" if self.child.is_a?(RefObject)
    # Shall we reverse the content of a concat.
    if self.child.is_a?(Concat) && 
            self.type.direction != self.child.type.direction then
        # Yes, do it.
        res = self.child.execute(mode,:reverse)
    else
        res = self.child.execute(mode)
    end
    # puts "res=#{res}"
    # Cast it.
    res = res.cast(self.type,true)
    # Returns the result.
    return res
end

#init_sim(systemT) ⇒ Object

Initialize the simulation for system +systemT+.



1057
1058
1059
1060
# File 'lib/HDLRuby/hruby_rsim.rb', line 1057

def init_sim(systemT)
    # Recurse on the child.
    self.child.init_sim(systemT)
end

#to_exprObject

Converts to a new expression.



3131
3132
3133
# File 'lib/HDLRuby/hruby_high.rb', line 3131

def to_expr
    return Cast.new(self.type,self.child.to_expr)
end

#to_lowObject

Converts the unary expression to HDLRuby::Low.



3136
3137
3138
3139
3140
3141
3142
3143
# File 'lib/HDLRuby/hruby_high.rb', line 3136

def to_low
    # return HDLRuby::Low::Cast.new(self.type.to_low,self.child.to_low)
    castL =HDLRuby::Low::Cast.new(self.type.to_low,self.child.to_low)
    # # For debugging: set the source high object 
    # castL.properties[:low2high] = self.hdr_id
    # self.properties[:high2low] = castL
    return castL
end

#to_rcsimObject

Generate the C description of the cast.



849
850
851
852
853
854
855
856
857
858
859
860
# File 'lib/HDLRuby/hruby_rcsim.rb', line 849

def to_rcsim
    # puts "Cast to width=#{self.type.width} and child=#{self.child}"
    # Shall we reverse when casting?
    if self.type.direction != self.child.type.direction then
        # Yes, reverse the direction of the child.
        if self.child.type.respond_to?(:direction=) then
            self.child.type.direction = self.type.direction
        end
    end
    # Create the cast C object.
    return RCSim.rcsim_make_cast(self.type.to_rcsim,self.child.to_rcsim)
end