/* 4-BIT ADDER */ TEST: PROCEDURE OPTIONS (MAIN); DECLARE CARRY_IN BIT (1) STATIC INITIAL ('0'B) ALIGNED; declare (m, n, sum)(4) bit(1) aligned; declare i fixed binary; get edit (m, n) (b(1)); put edit (m, ' + ', n, ' = ') (4 b, a); do i = 4 to 1 by -1; call full_adder ((carry_in), m(i), n(i), sum(i), carry_in); end; put edit (sum) (b); HALF_ADDER: PROCEDURE (IN1, IN2, SUM, CARRY); DECLARE (IN1, IN2, SUM, CARRY) BIT (1) ALIGNED; SUM = ( ^IN1 & IN2) | ( IN1 & ^IN2); /* Exclusive OR using only AND, NOT, OR. */ CARRY = IN1 & IN2; END HALF_ADDER; FULL_ADDER: PROCEDURE (CARRY_IN, IN1, IN2, SUM, CARRY); DECLARE (CARRY_IN, IN1, IN2, SUM, CARRY) BIT (1) ALIGNED; DECLARE (SUM2, CARRY2) BIT (1) ALIGNED; CALL HALF_ADDER (CARRY_IN, IN1, SUM, CARRY); CALL HALF_ADDER (SUM, IN2, SUM2, CARRY2); SUM = SUM2; CARRY = CARRY | CARRY2; END FULL_ADDER; END TEST;