Project 1 - a97021546/co106a GitHub Wiki
CHIP Not {
IN in;
OUT out;
PARTS:
// Put your code here:
Nand(a=in , b=in ,out=out);
}
CHIP And {
IN a, b;
OUT out;
PARTS:
Nand(a=a ,b=b ,out=x);
Not(in=x ,out=out);
}
CHIP Or {
IN a, b;
OUT out;
PARTS:
// Put your code here:
Not(in=a ,out=x);
Not(in=b ,out=y);
Nand(a=x ,b=y ,out=out);
}
CHIP Xor {
IN a, b;
OUT out;
PARTS:
// Put your code here:
Not(in=a ,out=x);
Not(in=b ,out=y);
And(a=x ,b=b ,out=andone);
And(a=a ,b=y ,out=andtwo);
Or(a=andone ,b=andtwo ,out=out);
}
CHIP Mux {
IN a, b, sel;
OUT out;
PARTS:
// Put your code here:
Not(in=sel ,out=s);
And(a=a ,b=s ,out=x);
And(a=b ,b=sel ,out=y);
Or(a=x ,b=y ,out=out);
}
CHIP DMux {
IN in, sel;
OUT a, b;
PARTS:
// Put your code here:
Not(in=sel ,out=s);
And(a=in ,b=s ,out=a);
And(a=in ,b=sel ,out=b);
}
CHIP Not16 { IN in[16]; OUT out[16];
PARTS:
// Put your code here:
Not(in=in[0],out=out[0]);
Not(in=in[1],out=out[1]);
Not(in=in[2],out=out[2]);
Not(in=in[3],out=out[3]);
Not(in=in[4],out=out[4]);
Not(in=in[5],out=out[5]);
Not(in=in[6],out=out[6]);
Not(in=in[7],out=out[7]);
Not(in=in[8],out=out[8]);
Not(in=in[9],out=out[9]);
Not(in=in[10],out=out[10]);
Not(in=in[11],out=out[11]);
Not(in=in[12],out=out[12]);
Not(in=in[13],out=out[13]);
Not(in=in[14],out=out[14]);
Not(in=in[15],out=out[15]);
}
CHIP And16 { IN a[16], b[16]; OUT out[16];
PARTS:
// Put your code here:
And(a=a[0],b=b[0],out=out[0]);
And(a=a[1],b=b[1],out=out[1]);
And(a=a[2],b=b[2],out=out[2]);
And(a=a[3],b=b[3],out=out[3]);
And(a=a[4],b=b[4],out=out[4]);
And(a=a[5],b=b[5],out=out[5]);
And(a=a[6],b=b[6],out=out[6]);
And(a=a[7],b=b[7],out=out[7]);
And(a=a[8],b=b[8],out=out[8]);
And(a=a[9],b=b[9],out=out[9]);
And(a=a[10],b=b[10],out=out[10]);
And(a=a[11],b=b[11],out=out[11]);
And(a=a[12],b=b[12],out=out[12]);
And(a=a[13],b=b[13],out=out[13]);
And(a=a[14],b=b[14],out=out[14]);
And(a=a[15],b=b[15],out=out[15]);
}
CHIP Or16 { IN a[16], b[16]; OUT out[16];
PARTS:
// Put your code here:
Or(a=a[0],b=b[0],out=out[0]);
Or(a=a[1],b=b[1],out=out[1]);
Or(a=a[2],b=b[2],out=out[2]);
Or(a=a[3],b=b[3],out=out[3]);
Or(a=a[4],b=b[4],out=out[4]);
Or(a=a[5],b=b[5],out=out[5]);
Or(a=a[6],b=b[6],out=out[6]);
Or(a=a[7],b=b[7],out=out[7]);
Or(a=a[8],b=b[8],out=out[8]);
Or(a=a[9],b=b[9],out=out[9]);
Or(a=a[10],b=b[10],out=out[10]);
Or(a=a[11],b=b[11],out=out[11]);
Or(a=a[12],b=b[12],out=out[12]);
Or(a=a[13],b=b[13],out=out[13]);
Or(a=a[14],b=b[14],out=out[14]);
Or(a=a[15],b=b[15],out=out[15]);
}
CHIP Mux16 { IN a[16], b[16], sel; OUT out[16];
PARTS:
// Put your code here:
Mux(a=a[0],b=b[0],sel=sel,out=out[0]);
Mux(a=a[1],b=b[1],sel=sel,out=out[1]);
Mux(a=a[2],b=b[2],sel=sel,out=out[2]);
Mux(a=a[3],b=b[3],sel=sel,out=out[3]);
Mux(a=a[4],b=b[4],sel=sel,out=out[4]);
Mux(a=a[5],b=b[5],sel=sel,out=out[5]);
Mux(a=a[6],b=b[6],sel=sel,out=out[6]);
Mux(a=a[7],b=b[7],sel=sel,out=out[7]);
Mux(a=a[8],b=b[8],sel=sel,out=out[8]);
Mux(a=a[9],b=b[9],sel=sel,out=out[9]);
Mux(a=a[10],b=b[10],sel=sel,out=out[10]);
Mux(a=a[11],b=b[11],sel=sel,out=out[11]);
Mux(a=a[12],b=b[12],sel=sel,out=out[12]);
Mux(a=a[13],b=b[13],sel=sel,out=out[13]);
Mux(a=a[14],b=b[14],sel=sel,out=out[14]);
Mux(a=a[15],b=b[15],sel=sel,out=out[15]);
}
CHIP Mux4Way16 { IN a[16], b[16], c[16], d[16], sel[2]; OUT out[16];
PARTS:
// Put your code here:
Mux16(a=a ,b=b ,sel=sel[0] ,out=x);
Mux16(a=c ,b=d ,sel=sel[0] ,out=y);
Mux16(a=x ,b=y ,sel=sel[1] ,out=out);
}
CHIP Mux8Way16 { IN a[16], b[16], c[16], d[16], e[16], f[16], g[16], h[16], sel[3]; OUT out[16];
PARTS:
// Put your code here:
Mux16(a=a ,b=b ,sel=sel[0] ,out=x);
Mux16(a=c ,b=d ,sel=sel[0] ,out=y);
Mux16(a=e ,b=f ,sel=sel[0] ,out=z);
Mux16(a=g ,b=h ,sel=sel[0] ,out=w);
Mux16(a=x ,b=y ,sel=sel[1] ,out=out1);
Mux16(a=z ,b=w ,sel=sel[1] ,out=out2);
Mux16(a=out1 ,b=out2 ,sel=sel[2] ,out=out);
}
CHIP DMux4Way { IN in, sel[2]; OUT a, b, c, d;
PARTS:
// Put your code here:
DMux(in=in ,sel=sel[1] ,a=x ,b=y);
DMux(in=x ,sel=sel[0] ,a=a ,b=b);
DMux(in=y ,sel=sel[0] ,a=c ,b=d);
}
CHIP DMux8Way { IN in, sel[3]; OUT a, b, c, d, e, f, g, h;
PARTS:
// Put your code here:
DMux(in=in ,sel=sel[2] ,a=x ,b=y);
DMux(in=x ,sel=sel[1] ,a=a1 ,b=b1);
DMux(in=y ,sel=sel[1] ,a=a2 ,b=b2);
DMux(in=a1 ,sel=sel[0] ,a=a ,b=b);
DMux(in=b1 ,sel=sel[0] ,a=c ,b=d);
DMux(in=a2 ,sel=sel[0] .a=e ,b=f);
DMux(in=a2 ,sel=sel[0] ,a=g ,b=h);
}
CHIP Or8Way { IN in[8]; OUT out;
PARTS:
// Put your code here:
Or(a=in[0],b=in[1],out=c);
Or(a=c,b=in[2],out=d);
Or(a=d,b=in[3],out=e);
Or(a=e,b=in[4],out=f);
Or(a=f,b=in[5],out=g);
Or(a=g,b=in[6],out=h);
Or(a=h,b=in[7],out=out);
}
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:
And(a=a ,b=b ,out=carry);
Xor(a=a ,b=b ,out=sum);
}
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:
And(a=a ,b=b ,out=out1);
And(a=a ,b=c ,out=out2);
And(a=b ,b=c ,out=out3);
Or(a=out1 ,b=out2 ,out=out4);
Or(a=out4 ,b=out3 ,out=carry);
Xor(a=a ,b=b ,out=out5);
Xor(a=out5 ,b=c ,out=sum);
}