Class: HDLRuby::High::Connection

Inherits:
Low::Connection show all
Defined in:
lib/HDLRuby/hruby_high.rb

Overview

Describes a connection.

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::Transmit

#left, #right

Attributes included from Low::Hparent

#parent

Instance Method Summary collapse

Methods inherited from Low::Connection

#array_connection, #break_concat_assigns, #eql?, #hash, #parent_system, #reassign_expressions!, #to_high, #to_verilog, #top_block, #top_scope

Methods inherited from Low::Transmit

#boolean_in_assign2select!, #break_concat_assigns, #casts_without_expression!, #clone, #each_block, #each_block_deep, #each_deep, #each_node, #each_node_deep, #each_statement_deep, #eql?, #explicit_types!, #extract_selects!, #hash, #initialize, #map_nodes!, #replace_expressions!, #set_left!, #set_right!, #to_c, #to_hdr, #to_high, #to_verilog, #to_vhdl, #use_name?

Methods inherited from Low::Statement

#add_blocks_code, #add_make_block, #behavior, #block, #blocks2seq!, #break_types!, #clone, #delete_related!, #delete_unless!, #each_deep, #each_statement, #eql?, #explicit_types!, #extract_declares!, #hash, #mix?, #par_in_seq2seq!, #parent_system, #replace_expressions!, #replace_names!, #scope, #to_c, #to_ch, #to_hdr, #to_high, #to_seq!, #to_upper_space!, #to_vhdl, #top_block, #top_scope, #use_name?, #with_boolean!

Methods included from Low::Low2Symbol

#to_sym

Methods included from Low::Hparent

#hierarchy, #scope

Constructor Details

This class inherits a constructor from HDLRuby::Low::Transmit

Instance Method Details

#at(event) ⇒ Object

Creates a new behavior sensitive to +event+ including the connection converted to a transmission, and replace the former by the new behavior.



3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
# File 'lib/HDLRuby/hruby_high.rb', line 3391

def at(event)
    # Creates the behavior.
    left, right = self.left, self.right
    # Detached left and right from their connection since they will
    # be put in a new behavior instead.
    left.parent = right.parent = nil
    # Create the new behavior replacing the connection.
    behavior = Behavior.new(:par,event) do
        left <= right
    end
    # Adds the behavior.
    High.top_user.add_behavior(behavior)
    # Remove the connection
    High.top_user.delete_connection!(self)
end

#hif(condition) ⇒ Object

Creates a new behavior with an if statement from +condition+ enclosing the connection converted to a transmission, and replace the former by the new behavior.

NOTE: the else part is defined through the helse method.



3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
# File 'lib/HDLRuby/hruby_high.rb', line 3412

def hif(condition)
    # Creates the behavior.
    left, right = self.left, self.right
    # Detached left and right from their connection since they will
    # be put in a new behavior instead.
    left.parent = right.parent = nil
    # Create the new behavior replacing the connection.
    behavior = Behavior.new(:par) do
        hif(condition) do
            left <= right
        end
    end
    # Adds the behavior.
    High.top_user.add_behavior(behavior)
    # Remove the connection
    High.top_user.delete_connection!(self)
end

#to_exprObject

Converts the connection to a comparison expression.

NOTE: required because the <= operator is ambigous and by default produces a Transmit or a Connection.



3381
3382
3383
3384
3385
3386
# File 'lib/HDLRuby/hruby_high.rb', line 3381

def to_expr
    # Remove the connection from the system type.
    High.top_user.delete_connection(self)
    # Generate an expression.
    return Binary.new(:<=,self.left,self.right)
end

#to_lowObject

Converts the connection to HDLRuby::Low.



3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
# File 'lib/HDLRuby/hruby_high.rb', line 3431

def to_low
    # return HDLRuby::Low::Connection.new(self.left.to_low,
    #                                     self.right.to_low)
    connectionL = HDLRuby::Low::Connection.new(self.left.to_low,
                                        self.right.to_low)
    # # For debugging: set the source high object 
    # connectionL.properties[:low2high] = self.hdr_id
    # self.properties[:high2low] = connectionL
    return connectionL
end