CHIP HalfAdder {IN a, b;// 1-bit inputsOUT sum,// Right bit of a + b carry;// Left bit of a + bPARTS:// 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 inputsOUT sum,// Right bit of a + b + ccarry;// Left bit of a + b + cPARTS:// Put you code here:HalfAdder(a=a,b=b,carry=hcarry,sum=hsum);HalfAdder(a=hsum,b=c,carry=fcarry,sum=sum);Xor(a=hcarry,b=fcarry,out=carry);}
加法器:
CHIP Add16 {IN a[16], b[16];OUT out[16];PARTS:// Put you code here:HalfAdder(a=a[0],b=b[0],carry = c0,sum = out[0]);FullAdder(a=a[1],b=b[1],c=c0,carry = c1,sum = out[1]);FullAdder(a = a[2], b = b[2], c = c1, sum = out[2], carry = c2);FullAdder(a = a[3], b = b[3], c = c2, sum = out[3], carry = c3);FullAdder(a = a[4], b = b[4], c = c3, sum = out[4], carry = c4);FullAdder(a = a[5], b = b[5], c = c4, sum = out[5], carry = c5);FullAdder(a = a[6], b = b[6], c = c5, sum = out[6], carry = c6);FullAdder(a = a[7], b = b[7], c = c6, sum = out[7], carry = c7);FullAdder(a = a[8], b = b[8], c = c7, sum = out[8], carry = c8);FullAdder(a = a[9], b = b[9], c = c8, sum = out[9], carry = c9);FullAdder(a = a[10], b = b[10], c = c9, sum = out[10], carry = c10);FullAdder(a = a[11], b = b[11], c = c10, sum = out[11], carry = c11);FullAdder(a = a[12], b = b[12], c = c11, sum = out[12], carry = c12);FullAdder(a = a[13], b = b[13], c = c12, sum = out[13], carry = c13);FullAdder(a = a[14], b = b[14], c = c13, sum = out[14], carry = c14);FullAdder(a = a[15], b = b[15], c = c14, sum = out[15], carry = c15);}/*** 16-bit incrementer:* out = in + 1 (arithmetic addition)*/CHIP Inc16 {IN in[16];OUT out[16];PARTS:// Put you code here:Add16(a = in, b[0]=true, b[1..15]=false, out = out);}
ALU:
ALU CHIP:
CHIP ALU {IN x[16], y[16], // 16-bit inputs zx, // zero the x input?nx, // negate the x input?zy, // zero the y input?ny, // negate the y input?f, // compute out = x + y (if 1) or x & y (if 0)no; // negate the out output?OUT out[16], // 16-bit outputzr, // 1 if (out == 0), 0 otherwiseng; // 1 if (out < 0), 0 otherwisePARTS:// Put you code here:// if (zx == 1) set x = 0Mux16(a=x,b[0..15]=false,sel=zx,out=x0);// if (nx == 1) set x = !x Not16(in = x0, out = x1);Mux16(a = x0, b = x1, sel = nx, out = x2);// if (zy == 1) set y = 0Mux16(a=y,b[0..15]=false,sel=zy,out=y0);// if (ny == 1) set y = !y Not16(in = y0, out = y1);Mux16(a = y0, b = y1, sel = ny, out = y2);// if (f == 1) set out = x + y else set out = x & yAdd16(a=x2,b=y2,out = addxy);And16(a=x2,b=y2,out = andxy);Mux16(a=andxy,b=addxy,sel=f,out=out0);// if (no == 1) set out = !outNot16(in = out0, out = out1);Mux16(a = out0, b = out1, sel = no, out = out,out =out2);// if (out == 0) set zr = 1Or16Way(in = out2,out = zr1);Not(in = zr1, out = zr);// if (out < 0) set ng = 1//Or(a = out2[15],b=false,out = ng);IsNeg(in = out2, out = ng);
}
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎