Class: HDLRuby::High::Value

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

Overview

Extends the Value class for hybrid Ruby-C simulation.

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::Value

#content

Attributes inherited from Low::Expression

#type

Attributes included from Low::Hparent

#parent

Instance Method Summary collapse

Methods included from Vprocess

#cast, #coerce, concat, #to_f, #to_i, #to_vstr, #trunc, #zero?

Methods included from HExpression

#[], #as, #coerce, #inout, #input, #ljust, #lr, #ls, #match_type, #mux, orig_operator, #orig_operator, #output, #rjust, #rr, #rs, #sext, #to_bit, #to_unsigned, #zext

Methods inherited from Low::Value

#<=>, #boolean_in_assign2select, #casts_without_expression!, #clone, #each_deep, #eql?, #even?, #explicit_types, #hash, #immutable?, #initialize, #odd?, #set_content!, #to_arith, #to_c, #to_c_expr, #to_c_make, #to_ch, #to_getrange, #to_hdr, #to_high, #to_i, #to_verilog, #to_vhdl, #width

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!, #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::Value

Instance Method Details

#constant?Boolean

Tell if the expression is constant.

Returns:

  • (Boolean)


3243
3244
3245
3246
# File 'lib/HDLRuby/hruby_high.rb', line 3243

def constant?
    # A value is a constant.
    return true
end

#execute(mode) ⇒ Object

Executes the expression.



826
827
828
# File 'lib/HDLRuby/hruby_rsim.rb', line 826

def execute(mode)
    return self
end

#to_exprObject

Converts to a new expression.



3249
3250
3251
# File 'lib/HDLRuby/hruby_high.rb', line 3249

def to_expr
    return self.to_value
end

#to_lowObject

Converts the value to HDLRuby::Low.



3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
# File 'lib/HDLRuby/hruby_high.rb', line 3254

def to_low
    # Clone the content if possible
    content = self.content.frozen? ? self.content : self.content.clone
    # Create and return the resulting low-level value
    # return HDLRuby::Low::Value.new(self.type.to_low,self.content)
    valueL = HDLRuby::Low::Value.new(self.type.to_low,self.content)
    # # For debugging: set the source high object 
    # valueL.properties[:low2high] = self.hdr_id
    # self.properties[:high2low] = valueL
    return valueL
end

#to_rcsimObject

Generate the C description of the value.



747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
# File 'lib/HDLRuby/hruby_rcsim.rb', line 747

def to_rcsim
    # Create the value C object.
    if self.content.is_a?(::Integer) then
        if self.content.bit_length <= 63 then
            return RCSim.rcsim_make_value_numeric(self.type.to_rcsim,
                                            self.content)
        else
            str = self.content.to_s(2)
            if str[-1] == "-" then
                str[-1] = "1"
            elsif str[-1] == "1" then
                str = "0" + str
            end
            return RCSim.rcsim_make_value_bitstring(self.type.to_rcsim,
                                                    str.reverse)
        end
    else
        return RCSim.rcsim_make_value_bitstring(self.type.to_rcsim,
                                                self.content.to_s.reverse)
    end
end

#to_valueObject

Converts to a new value.



3236
3237
3238
3239
3240
# File 'lib/HDLRuby/hruby_high.rb', line 3236

def to_value
    # # Already a value.
    # self
    return Value.new(self.type,self.content)
end

#to_value?Boolean

Tell if the expression can be converted to a value.

Returns:

  • (Boolean)


3231
3232
3233
# File 'lib/HDLRuby/hruby_high.rb', line 3231

def to_value?
    return true
end