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

Describes a value.

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?, #impedence?, #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, #seach, #sext, #to_bit, #to_signed, #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!, #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::Value

Instance Method Details

#constant?Boolean

Tell if the expression is constant.

Returns:

  • (Boolean)


3285
3286
3287
3288
# File 'lib/HDLRuby/hruby_high.rb', line 3285

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

#execute(mode) ⇒ Object

Executes the expression.



1047
1048
1049
# File 'lib/HDLRuby/hruby_rsim.rb', line 1047

def execute(mode)
    return self
end

#init_sim(systemT) ⇒ Object

Initialize the simulation for system +systemT+.



1040
1041
1042
# File 'lib/HDLRuby/hruby_rsim.rb', line 1040

def init_sim(systemT)
    # Nothing to do.
end

#to_exprObject

Converts to a new expression.



3291
3292
3293
# File 'lib/HDLRuby/hruby_high.rb', line 3291

def to_expr
    return self.to_value
end

#to_lowObject

Converts the value to HDLRuby::Low.



3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
# File 'lib/HDLRuby/hruby_high.rb', line 3296

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.



802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
# File 'lib/HDLRuby/hruby_rcsim.rb', line 802

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.



3278
3279
3280
3281
3282
# File 'lib/HDLRuby/hruby_high.rb', line 3278

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)


3273
3274
3275
# File 'lib/HDLRuby/hruby_high.rb', line 3273

def to_value?
    return true
end