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, #eql?, #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.



943
944
945
# File 'lib/HDLRuby/hruby_rsim.rb', line 943

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.



788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
# File 'lib/HDLRuby/hruby_rcsim.rb', line 788

def to_rcsim
    # Create the value C object.
    if self.content.is_a?(::Integer) then
        # puts "self.type.width=#{self.type.width} and content=#{self.content}" ; $stdout.flush
        if self.type.width <= 64 then
            if self.content.bit_length <= 63 then
                return RCSim.rcsim_make_value_numeric(self.type.to_rcsim,
                                                      self.content)
            else
                return RCSim.rcsim_make_value_numeric(self.type.to_rcsim,
                                                      self.content & 0xFFFFFFFFFFFF)
            end
        else
            if self.content < 0 then
                str = (2**self.type.width + self.content).to_s(2)
                str = "1" * (self.type.width-str.length) + str
            else
                str = self.content.to_s(2)
                str = "0" * (self.type.width-str.length) + str
            end
            # puts "now str=#{str} (#{str.length})" ; $stdout.flush
            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