Class: HDLRuby::High::SignalC

Inherits:
Low::SignalC show all
Includes:
HRef
Defined in:
lib/HDLRuby/hruby_high.rb

Overview

Describes a high-level 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

Attributes inherited from Low::SignalI

#name, #type, #value

Attributes included from Low::Hparent

#parent

Instance Method Summary collapse

Methods included from HRef

#each, included, #to_event

Methods inherited from Low::SignalI

#clone, #eql?, #explicit_types!, #hash, #replace_names!, #set_name!, #set_type!, #set_value!, #to_c, #to_c_signal, #to_ch, #to_high, #to_verilog, #to_vhdl, #width

Methods included from Low::Low2Symbol

#to_sym

Methods included from Low::Hparent

#scope

Constructor Details

#initialize(name, type, value) ⇒ SignalC

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



3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
# File 'lib/HDLRuby/hruby_high.rb', line 3182

def initialize(name,type,value)
    # Check the value is a constant.
    value = value.to_expr
    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 Method Details

#coerce(obj) ⇒ Object

Coerce by converting signal to an expression.



3221
3222
3223
# File 'lib/HDLRuby/hruby_high.rb', line 3221

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

#to_exprObject

Converts to a new expression.



3216
3217
3218
# File 'lib/HDLRuby/hruby_high.rb', line 3216

def to_expr
    return self.to_ref
end

#to_low(name = self.name) ⇒ Object

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



3226
3227
3228
3229
# File 'lib/HDLRuby/hruby_high.rb', line 3226

def to_low(name = self.name)
    return HDLRuby::Low::SignalC.new(name,self.type.to_low,
                                     self.value.to_low)
end

#to_refObject

Converts to a new reference.



3211
3212
3213
# File 'lib/HDLRuby/hruby_high.rb', line 3211

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