home *** CD-ROM | disk | FTP | other *** search
- Name Adder;
- Partno CA0016;
- Date 10/08/85;
- Rev 01;
- Designer Woolhiser;
- Company Assisted Technology;
- Assembly None;
- Location None;
- Device p16l8;
-
- /****************************************************************/
- /* */
- /* Four bit adder using the CUPL function statement. */
- /* */
- /* 4-bit asynchronous adder implemented as a ripple-carry */
- /* through four adder-slice circuits. Each adder-slice */
- /* takes a pair of 1-bit numbers (Xi, Yi) and the carry from */
- /* a previous slice (Cin) and produces their 1-bit sum (Zi) */
- /* and carry (Cout). Each adder-slice circuit is defined */
- /* using the CUPL function adder_slice(), which returns */
- /* the product directly and the carry as Cout. */
- /****************************************************************/
- /* Allowable Target Device Types : PAL16L8 */
- /****************************************************************/
-
- /** Inputs **/
-
- Pin [1..4] = [X1..4]; /* First 4-bit number */
- Pin [5..8] = [Y1..4]; /* Second 4-bit number */
-
- /** Outputs **/
-
- Pin [12..15] = [Z1..4]; /* 4-bit sum */
- Pin [16..18] = [C1..3]; /* Intermediate carry vaules */
- Pin 19 = Carry; /* Carry for 4-bit sum */
-
- /* Adder-slice circuit - add 2, 1-bit, numbers with carry */
-
- function adder_slice(X, Y, Cin, Cout) {
- Cout = Cin & X /* Compute carry */
- # Cin & Y
- # X & Y;
- adder_slice = Cin $ (X $ Y); /* Compute sum */
- }
-
- /* Perform 4, 1-bit, additions and keep the final carry */
-
- Z1 = adder_slice(X1, Y1, 'h'0, C1); /* Initial carry = 'h'0 */
- Z2 = adder_slice(X2, Y2, C1, C2);
- Z3 = adder_slice(X3, Y3, C2, C3);
- Z4 = adder_slice(X4, Y4, C3, Carry); /* Get final carry value */
-