Add adder device
This commit is contained in:
parent
9192bc9684
commit
bc7fbac203
1
Gemfile
1
Gemfile
@ -1,2 +1,3 @@
|
|||||||
source "https://rubygems.org"
|
source "https://rubygems.org"
|
||||||
gem "yard"
|
gem "yard"
|
||||||
|
gem "pry"
|
||||||
|
@ -1,12 +1,18 @@
|
|||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
|
coderay (1.1.2)
|
||||||
|
method_source (0.9.0)
|
||||||
|
pry (0.11.3)
|
||||||
|
coderay (~> 1.1.0)
|
||||||
|
method_source (~> 0.9.0)
|
||||||
yard (0.9.14)
|
yard (0.9.14)
|
||||||
|
|
||||||
PLATFORMS
|
PLATFORMS
|
||||||
ruby
|
ruby
|
||||||
|
|
||||||
DEPENDENCIES
|
DEPENDENCIES
|
||||||
|
pry
|
||||||
yard
|
yard
|
||||||
|
|
||||||
BUNDLED WITH
|
BUNDLED WITH
|
||||||
|
6
console
Executable file
6
console
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
require "pry"
|
||||||
|
require_relative "lib/rcircuit.rb"
|
||||||
|
a=Port.new(8)
|
||||||
|
b=Port.new(8)
|
||||||
|
Pry.start()
|
@ -5,3 +5,4 @@ require_relative "rcircuit/not.rb"
|
|||||||
require_relative "rcircuit/and.rb"
|
require_relative "rcircuit/and.rb"
|
||||||
require_relative "rcircuit/or.rb"
|
require_relative "rcircuit/or.rb"
|
||||||
require_relative "rcircuit/xor.rb"
|
require_relative "rcircuit/xor.rb"
|
||||||
|
require_relative "rcircuit/adder.rb"
|
||||||
|
13
lib/rcircuit/adder.rb
Normal file
13
lib/rcircuit/adder.rb
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
class Adder < Device
|
||||||
|
def initialize(width, init_args)
|
||||||
|
add_input("a", width)
|
||||||
|
add_input("b", width)
|
||||||
|
add_output("out", width)
|
||||||
|
init_assign(init_args)
|
||||||
|
@mask=(2**width)-1
|
||||||
|
end
|
||||||
|
|
||||||
|
def on_change(data_val)
|
||||||
|
out.setval((a.val+b.val)&@mask)
|
||||||
|
end
|
||||||
|
end
|
@ -5,7 +5,6 @@ class Device
|
|||||||
# @param width [Integer] Width of the port
|
# @param width [Integer] Width of the port
|
||||||
# @return [void]
|
# @return [void]
|
||||||
def add_input(name, width=1)
|
def add_input(name, width=1)
|
||||||
self.class.class_eval{attr_reader name.to_sym}
|
|
||||||
port = Port.new(width)
|
port = Port.new(width)
|
||||||
instance_variable_set("@#{name}", port)
|
instance_variable_set("@#{name}", port)
|
||||||
port.add_callback { |val| on_change(val) }
|
port.add_callback { |val| on_change(val) }
|
||||||
@ -38,7 +37,7 @@ class Device
|
|||||||
hash.each do |name, port|
|
hash.each do |name, port|
|
||||||
#check if there is a defined method (port) that matches
|
#check if there is a defined method (port) that matches
|
||||||
if self.respond_to?(name)
|
if self.respond_to?(name)
|
||||||
method(name).call(port)
|
instance_variable_get("@#{name}").connect(port)
|
||||||
else
|
else
|
||||||
raise ArgumentError, "No defined input '#{name}'"
|
raise ArgumentError, "No defined input '#{name}'"
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user