Class: HDLRuby::High::SignalC

Inherits:
Low::SignalC show all
Includes:
HRef, SimSignal, WithFullname
Defined in:
lib/HDLRuby/hruby_high.rb,
lib/HDLRuby/hruby_rsim.rb,
lib/HDLRuby/hruby_rcsim.rb,
lib/HDLRuby/hruby_high_fullname.rb

Overview

Describes a constant signal.

Constant Summary collapse

High =
HDLRuby::High

Constants included from Low::Low2Symbol

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

Instance Attribute Summary collapse

Attributes included from SimSignal

#c_value, #f_value

Attributes inherited from Low::SignalI

#name, #type, #value

Attributes included from Low::Hparent

#parent

Instance Method Summary collapse

Methods included from WithFullname

#fullname

Methods included from SimSignal

#add_anyedge, #add_negedge, #add_posedge, #assign, #assign_at, #each_anyedge, #each_negedge, #each_posedge, #execute, #fullname, #get_vars_with_fullname, #get_vars_with_idstr, #init_sim, #show_hierarchy

Methods included from HRef

#each, included, #objects, #to_event

Methods included from Enumerable

#seach

Methods inherited from Low::SignalC

#immutable?, #to_high

Methods inherited from Low::SignalI

#add_signal, #clone, #each_deep, #each_signal, #explicit_types!, #get_by_name, #get_signal, #immutable?, #replace_names!, #set_name!, #set_type!, #set_value!, #to_c, #to_c_alias, #to_c_signal, #to_ch, #to_hdr, #to_high, #to_verilog, #to_vhdl, #width

Methods included from Low::Low2Symbol

#to_sym

Methods included from Low::Hparent

#absolute_ref, #hierarchy, #no_parent!, #scope

Constructor Details

#initialize(name, type, value) ⇒ SignalC

Creates a new constant signal named +name+ typed as +type+ and +value+.



4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
# File 'lib/HDLRuby/hruby_high.rb', line 4100

def initialize(name,type,value)
    # Check the value is a constant.
    value = value.to_expr.match_type(type)
    unless value.constant? then
        raise AnyError,"Non-constant value assignment to constant."
    end
    # Initialize the type structure.
    super(name,type,value)

    unless name.empty? then
        # Named signal, set the hdl-like access to the signal.
        obj = self # For using the right self within the proc
        High.space_reg(name) { obj }
    end

    # Hierarchical type allows access to sub references, so generate
    # the corresponding methods.
    if type.struct? then
        type.each_name do |name|
            self.define_singleton_method(name) do
                RefObject.new(self.to_ref,
                            SignalC.new(name,type.get_type(name),
                                        value[name]))
            end
        end
    end
end

Instance Attribute Details

#rcsignalCObject (readonly)

Extends the SignalC class for hybrid Ruby-C simulation.



460
461
462
# File 'lib/HDLRuby/hruby_rcsim.rb', line 460

def rcsignalC
  @rcsignalC
end

Instance Method Details

#coerce(obj) ⇒ Object

Coerce by converting signal to an expression.



4139
4140
4141
# File 'lib/HDLRuby/hruby_high.rb', line 4139

def coerce(obj)
    return [obj,self.to_expr]
end

#to_exprObject

Converts to a new expression.



4134
4135
4136
# File 'lib/HDLRuby/hruby_high.rb', line 4134

def to_expr
    return self.to_ref
end

#to_low(name = self.name) ⇒ Object

Converts the system to HDLRuby::Low and set its +name+.



4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
# File 'lib/HDLRuby/hruby_high.rb', line 4144

def to_low(name = self.name)
    # return HDLRuby::Low::SignalC.new(name,self.type.to_low,
    #                                  self.value.to_low)
    signalCL = HDLRuby::Low::SignalC.new(name,self.type.to_low,
                                     self.value.to_low)
    # Recurse on the sub signals if any.
    self.each_signal do |sig|
        signalCL.add_signal(sig.to_low)
    end
    # # For debugging: set the source high object 
    # signalCL.properties[:low2high] = self.hdr_id
    # self.properties[:high2low] = signalCL
    return signalCL
end

#to_rcsim(rcowner) ⇒ Object

Generate the C description of the signal comming from object whose C description is +rcowner+



464
465
466
467
468
469
470
471
472
473
474
475
476
# File 'lib/HDLRuby/hruby_rcsim.rb', line 464

def to_rcsim(rcowner)
    # Create the signal C object.
    @rcsignalC = RCSim.rcsim_make_signal(self.name.to_s,
                                   self.type.to_rcsim)

    # Set the owner.
    RCSim.rcsim_set_owner(@rcsignalC,rcowner)

    # Set the initial value.
    RCSim.rcsim_set_signal_value(@rcsignalC,self.value.to_rcsim)

    return @rcsignalC
end

#to_refObject

Converts to a new reference.



4129
4130
4131
# File 'lib/HDLRuby/hruby_high.rb', line 4129

def to_ref
    return RefObject.new(this,self)
end