Skip to content
patrick901218 edited this page Jan 12, 2022 · 2 revisions

Half Adder

CHIP HalfAdder {
    IN a, b;    // 1-bit inputs
    OUT sum,    // Right bit of a + b 
        carry;  // Left bit of a + b

    PARTS:
    // Put you code here:
    Xor(a = a , b = b , out = sum);
    And(a = a, b = b, out = carry);
}

FullAdder

CHIP FullAdder {
    IN a, b, c;  // 1-bit inputs
    OUT sum,     // Right bit of a + b + c
        carry;   // Left bit of a + b + c

    PARTS:
    // Put you code here:
    Not(in = a , out = Nota);
    Not(in = b , out = Notb);
    Not(in = c , out = Notc);

    And(a = a , b = Notb , out = aAndNoty);
    And(a = b, b = c , out = bc);
    And(a = a ,b = c , out = ac);
    And(a = b, b = a , out = ab);
    And(a = Nota , b = Notb , out = NotaNotb);
    And(a = Nota , b = b, out = Notab);

    And(a = aAndNoty, b = Notc , out = aNotbNotc);
    And(a = a , b = bc, out = abc);
    And(a = NotaNotb, b = c, out = NotxNotyc);
    And(a = Notab, b = Notc , out = NotxyNotc);

    Or(a = aNotbNotc , b = abc , out = aNotbNotcOrabc);
    Or(a = NotxNotyc , b = NotxyNotc , out = NotxNotycOrNotxyNotc);
    
    Or(a = aNotbNotcOrabc, b = NotxNotycOrNotxyNotc, out = sum);

    Or(a = ac, b = ab, out = acOrab);
    Or(a = acOrab, b = bc, out = carry);
}

Adder16

CHIP Add16 {
    IN a[16], b[16];
    OUT out[16];

    PARTS:
   // Put you code here:
   HalfAdder(a = a[0], b = b[0], sum = out[0], carry = c1);
   FullAdder(a = a[1], b = b[1], c = c1, sum = out[1], carry = c2);
   FullAdder(a = a[2], b = b[2], c = c2, sum = out[2], carry = c3);
   FullAdder(a = a[3], b = b[3], c = c3, sum = out[3], carry = c4);
   FullAdder(a = a[4], b = b[4], c = c4, sum = out[4], carry = c5);
   FullAdder(a = a[5], b = b[5], c = c5, sum = out[5], carry = c6);
   FullAdder(a = a[6], b = b[6], c = c6, sum = out[6], carry = c7);
   FullAdder(a = a[7], b = b[7], c = c7, sum = out[7], carry = c8);
   FullAdder(a = a[8], b = b[8], c = c8, sum = out[8], carry = c9);
   FullAdder(a = a[9], b = b[9], c = c9, sum = out[9], carry = c10);
   FullAdder(a = a[10], b = b[10], c = c10, sum = out[10], carry = c11);
   FullAdder(a = a[11], b = b[11], c = c11, sum = out[11], carry = c12);
   FullAdder(a = a[12], b = b[12], c = c12, sum = out[12], carry = c13);
   FullAdder(a = a[13], b = b[13], c = c13, sum = out[13], carry = c14);
   FullAdder(a = a[14], b = b[14], c = c14, sum = out[14], carry = c15);
   FullAdder(a = a[15], b = b[15], c = c15, sum = out[15], carry = c16);
}

inc16

CHIP Inc16 {
    IN in[16];
    OUT out[16];

    PARTS:
   // Put you code here:
   Not(in = in[0], out = Notin);
   Or(a = in[0], b = Notin, out = one);
   HalfAdder(a = in[0], b = one , sum = out[0],carry = c1);
   HalfAdder(a = in[1], b = c1, sum = out[1],carry = c2);
   HalfAdder(a = in[2], b = c2, sum = out[2],carry = c3);
   HalfAdder(a = in[3], b = c3, sum = out[3],carry = c4);
   HalfAdder(a = in[4], b = c4, sum = out[4],carry = c5);
   HalfAdder(a = in[5], b = c5, sum = out[5],carry = c6);
   HalfAdder(a = in[6], b = c6, sum = out[6],carry = c7);
   HalfAdder(a = in[7], b = c7, sum = out[7],carry = c8);
   HalfAdder(a = in[8], b = c8, sum = out[8],carry = c9);
   HalfAdder(a = in[9], b = c9, sum = out[9],carry = c10);
   HalfAdder(a = in[10], b = c10, sum = out[10],carry = c11);
   HalfAdder(a = in[11], b = c11, sum = out[11],carry = c12);
   HalfAdder(a = in[12], b = c12, sum = out[12],carry = c13);
   HalfAdder(a = in[13], b = c13, sum = out[13],carry = c14);
   HalfAdder(a = in[14], b = c14, sum = out[14],carry = c15);
   HalfAdder(a = in[15], b = c15, sum = out[15],carry = c16);
}
Clone this wiki locally