#
# An N-bit adder built of one-bit adders with simple carry propagation.
#
require "oba"
class Adder < Blueprint
# This initializes the object, If we already have a one-bit adder
# blueprint lying around, we can reuse it with that second argument.
def initialize(n, bp = nil)
super(n.to_s + "-bit adder")
# Blueprint for a the one-bit adder
bp = OBA.new unless bp
@one_bit_bp = bp
# Make all the adders, and specify them as inputs.
addrs = bp.manyothers(n)
self.inputs(addrs,addrs)
# Create output connectors and chain the carries.
prev = nil
for addr in addrs
c = Connector.new
addr.join(c)
if prev then
prev.out(1).join(addr)
end
self.outputs(c)
prev = addr
end
# Overflow
self.outputs(prev)
self.lock
end
attr_reader :one_bit_bp
end