forked from ccccourse1/co110a
-
Notifications
You must be signed in to change notification settings - Fork 0
week3
patrick901218 edited this page Jan 12, 2022
·
2 revisions
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);
}
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);
}
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);
}
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);
}