Class: HDLRuby::High::Value
- Inherits:
-
Low::Value
- Object
- Base::Expression
- Low::Expression
- Low::Value
- HDLRuby::High::Value
- 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
Attributes inherited from Low::Value
Attributes inherited from Low::Expression
Attributes included from Low::Hparent
Instance Method Summary collapse
-
#constant? ⇒ Boolean
Tell if the expression is constant.
-
#execute(mode) ⇒ Object
Executes the expression.
-
#init_sim(systemT) ⇒ Object
Initialize the simulation for system +systemT+.
-
#to_expr ⇒ Object
Converts to a new expression.
-
#to_low ⇒ Object
Converts the value to HDLRuby::Low.
-
#to_rcsim ⇒ Object
Generate the C description of the value.
-
#to_value ⇒ Object
Converts to a new value.
-
#to_value? ⇒ Boolean
Tell if the expression can be converted to a value.
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!, #signal2subs!, #statement, #to_c, #to_c_expr, #to_hdr, #to_high, #to_vhdl, #use_name?
Methods included from Low::Low2Symbol
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.
3279 3280 3281 3282 |
# File 'lib/HDLRuby/hruby_high.rb', line 3279 def constant? # A value is a constant. return true end |
#execute(mode) ⇒ Object
Executes the expression.
998 999 1000 |
# File 'lib/HDLRuby/hruby_rsim.rb', line 998 def execute(mode) return self end |
#init_sim(systemT) ⇒ Object
Initialize the simulation for system +systemT+.
991 992 993 |
# File 'lib/HDLRuby/hruby_rsim.rb', line 991 def init_sim(systemT) # Nothing to do. end |
#to_expr ⇒ Object
Converts to a new expression.
3285 3286 3287 |
# File 'lib/HDLRuby/hruby_high.rb', line 3285 def to_expr return self.to_value end |
#to_low ⇒ Object
Converts the value to HDLRuby::Low.
3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 |
# File 'lib/HDLRuby/hruby_high.rb', line 3290 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_rcsim ⇒ Object
Generate the C description of the value.
787 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 |
# File 'lib/HDLRuby/hruby_rcsim.rb', line 787 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_value ⇒ Object
Converts to a new value.
3272 3273 3274 3275 3276 |
# File 'lib/HDLRuby/hruby_high.rb', line 3272 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.
3267 3268 3269 |
# File 'lib/HDLRuby/hruby_high.rb', line 3267 def to_value? return true end |