next up previous
Next: 3.4 Computer Organization Up: 3 Example Models Previous: 3.2 Computer Arithmetic

3.3 Computer Circuits

or =: +.
and =: *.
not =: -.
bitOr =: monad define
('a' ; 'b') =. y.
a or b
)
bitAnd =: monad define
('a' ; 'b') =. y.
a and b
)
bitNot =: not
bitHalfAdder =: monad define
('a' ; 'b') =. y.
bitOr (bitAnd a , bitNot b) , bitAnd (bitNot a) , b
)
bitXor =: bitHalfAdder
wireOutput =: monad define
('pin' ; 'outputs') =. y.
pin from outputs
)

bitAdder =: monad define
('a' ; 'b' ; 'cin') =. y.
t =. bitHalfAdder a , b
g =. bitAnd a , b
p =. bitAnd t , cin
(bitOr g , p) , bitHalfAdder t , cin
)

fourBitAlu =: monad define
('a3' ; 'a2' ; 'a1' ; 'a0' ; 'b3' ; 'b2' ; 'b1' ; 'b0' ; 'sub') =. y.
t0 =. bitAdder a0 , (bitXor b0 , sub) , sub
t1 =. bitAdder a1 , (bitXor b1 , sub) , wireOutput 0 ; t0
t2 =. bitAdder a2 , (bitXor b2 , sub) , wireOutput 0 ; t1
t3 =. bitAdder a3 , (bitXor b3 , sub) , wireOutput 0 ; t2
(wireOutput 0 1 ; t3) , (wireOutput 1 ; t2) , (wireOutput 1 ; t1) , wireOutput 1 ; t0
)

Below we show the sum and difference of _1 and 1 (ignoring the carry) producing results of 0 0 0 0 and 1 1 1 0 (0 and _2).

   fourBitAlu 1 1 1 1  0 0 0 1 0
1 0 0 0 0
   fourBitAlu 1 1 1 1  0 0 0 1 1
1 1 1 1 0


next up previous
Next: 3.4 Computer Organization Up: 3 Example Models Previous: 3.2 Computer Arithmetic
2003-12-20