class HDLRuby::High::Std::ChannelPortR

Describes a read port to a channel.

Public Class Methods

new(namespace,reader_proc,reseter_proc = nil) click to toggle source

Creates a new channel reader running in namespace and reading using reader_proc and reseting using reseter_proc.

# File lib/HDLRuby/std/channel.rb, line 114
def initialize(namespace,reader_proc,reseter_proc = nil)
    unless namespace.is_a?(Namespace)
        raise "Invalid class for a namespace: #{namespace.class}"
    end
    @namespace = namespace
    @reader_proc = reader_proc.to_proc
    @rester_proc = reseter_proc ? reseter_proc.to_proc : proc {}
    @scope = HDLRuby::High.cur_scope
end

Public Instance Methods

read(*args,&ruby_block) click to toggle source

Performs a read on the channel using args and ruby_block as arguments.

# File lib/HDLRuby/std/channel.rb, line 126
def read(*args,&ruby_block)
    # Gain access to the reader as local variable.
    reader_proc = @reader_proc
    # Execute the code generating the accesser in context.
    HDLRuby::High.space_push(@namespace)
    HDLRuby::High.cur_block.open do
        instance_exec(ruby_block,*args,&reader_proc)
    end
    HDLRuby::High.space_pop
end
reset(*args,&ruby_block) click to toggle source

Performs a reset on the channel using args and ruby_block as arguments.

# File lib/HDLRuby/std/channel.rb, line 139
def reset(*args,&ruby_block)
    # Gain access to the accesser as local variable.
    reseter_proc = @reseter_proc
    # Execute the code generating the accesser in context.
    HDLRuby::High.space_push(@namespace)
    HDLRuby::High.cur_block.open do
        instance_exec(ruby_block,*args,&reseter_proc)
    end
    HDLRuby::High.space_pop
end