Class: HDLRuby::High::SignalI

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

Overview

Describes a high-level signal.

Constant Summary collapse

High =
HDLRuby::High
DIRS =

The valid bounding directions.

[ :no, :input, :output, :inout, :inner ]

Constants included from Low::Low2Symbol

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

Instance Attribute Summary collapse

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, #write

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, dir, value = nil) ⇒ SignalI

Creates a new signal named +name+ typed as +type+ with +dir+ as bounding direction and possible +value+.

NOTE: +dir+ can be :input, :output, :inout or :inner



3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
# File 'lib/HDLRuby/hruby_high.rb', line 3068

def initialize(name,type,dir,value =  nil)
    # Check the value.
    value = value.to_expr if value
    # 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,
                            SignalI.new(name,type.get_type(name),dir))
            end
        end
    end

    # Check and set the bound.
    self.dir = dir

    # Set the read and write authorisations.
    @can_read = 1.to_expr
    @can_write = 1.to_expr
end

Instance Attribute Details

#can_readObject

Tells if the signal can be read.



3059
3060
3061
# File 'lib/HDLRuby/hruby_high.rb', line 3059

def can_read
  @can_read
end

#can_writeObject

Tells if the signal can be written.



3062
3063
3064
# File 'lib/HDLRuby/hruby_high.rb', line 3062

def can_write
  @can_write
end

#dirObject

The bounding direction.



3056
3057
3058
# File 'lib/HDLRuby/hruby_high.rb', line 3056

def dir
  @dir
end

Instance Method Details

#coerce(obj) ⇒ Object

Coerce by converting signal to an expression.



3143
3144
3145
# File 'lib/HDLRuby/hruby_high.rb', line 3143

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

#edgeObject

Creates an edge event from the signal.



3128
3129
3130
# File 'lib/HDLRuby/hruby_high.rb', line 3128

def edge
    return Event.new(:edge,self.to_ref)
end

#negedgeObject

Creates a negative edge event from the signal.



3123
3124
3125
# File 'lib/HDLRuby/hruby_high.rb', line 3123

def negedge
    return Event.new(:negedge,self.to_ref)
end

#posedgeObject

Creates a positive edge event from the signal.



3118
3119
3120
# File 'lib/HDLRuby/hruby_high.rb', line 3118

def posedge
    return Event.new(:posedge,self.to_ref)
end

#to_exprObject

Converts to a new expression.



3138
3139
3140
# File 'lib/HDLRuby/hruby_high.rb', line 3138

def to_expr
    return self.to_ref
end

#to_low(name = self.name) ⇒ Object

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



3148
3149
3150
# File 'lib/HDLRuby/hruby_high.rb', line 3148

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

#to_refObject

Converts to a new reference.



3133
3134
3135
# File 'lib/HDLRuby/hruby_high.rb', line 3133

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