Class: HDLRuby::High::Std::ChannelPortW

Inherits:
Object
  • Object
show all
Includes:
ChannelPortWrapping
Defined in:
lib/HDLRuby/std/channel.rb

Overview

Describes a writer port to a channel.

Instance Method Summary collapse

Methods included from ChannelPortWrapping

#wrap

Constructor Details

#initialize(namespace, writer_proc, reseter_proc = nil) ⇒ ChannelPortW

Creates a new channel writer running in +namespace+ and writing using +writer_proc+ and reseting using +reseter_proc+.



145
146
147
148
149
150
151
152
# File 'lib/HDLRuby/std/channel.rb', line 145

def initialize(namespace,writer_proc,reseter_proc = nil)
    unless namespace.is_a?(Namespace)
        raise "Invalid class for a namespace: #{namespace.class}"
    end
    @namespace = namespace
    @writer_proc = writer_proc.to_proc
    @reseter_proc = reseter_proc ? reseter_proc.to_proc : proc {}
end

Instance Method Details

#reset(*args, &ruby_block) ⇒ Object

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



169
170
171
172
173
174
175
176
177
178
# File 'lib/HDLRuby/std/channel.rb', line 169

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

#write(*args, &ruby_block) ⇒ Object

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



156
157
158
159
160
161
162
163
164
165
# File 'lib/HDLRuby/std/channel.rb', line 156

def write(*args,&ruby_block)
    # Gain access to the writer as local variable.
    writer_proc = @writer_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,&writer_proc)
    end
    HDLRuby::High.space_pop
end