-- File: full_add.adb (actually full_add2 to store duplicate implementations) -- Author: Sy Wong -- Date: 7/98 -- Aim: Implements a one bit adder with NOR, INVERT, NAND, X_OR; package body FULL_ADD is procedure update(d: in out device) is unit1, unit2: X_OR.device; unit3, unit4: NOR.device; unit5, unit6: NAND.device; unit7, unit8, unit9, unit10: INVERT.device; begin -- d.sum := d.input1 xor d.input2 xor d.carry_in; -- unit1 unit2 -- d.cout:= ((d.input1 or d.input2) and d.carry_in) or (d.unit1 and d.nit2); -- unit3,unit7 unit5,unit8 unit4,unit9 unit6,unit10 unit1.input1:= d.input1; unit1.input2:= d.input2; X_OR.update(unit1); unit2.input1:= unit1.data_out; unit2.input2:= d.carry_in; X_OR.update(unit2); d.sum:= unit2.data_out; unit3.input1:= d.input1; unit3.input2:= d.input2; NOR.update(unit3); unit7.data_in:= unit3.data_out; INVERT.update(unit7); unit5.input1:= unit7.data_out; unit5.input2:= d.carry_in; NAND.update(unit5); unit8.data_in:= unit5.data_out; INVERT.update(unit8); unit4.input1:= unit8.data_out; unit6.input1:= d.input1; unit6.input2:= d.input2; NAND.update(unit6); unit10.data_in:= unit6.data_out; INVERT.update(unit10); unit4.input2:= unit10.data_out; NOR.update(unit4); unit9.data_in:= unit4.data_out; INVERT.update(unit9); d.carry_out:= unit9.data_out; end update; end FULL_ADD;