Chapter 1
Boolean Logic
Nand Gate (already given)
全1為0,否則,輸出為1
a ( INPUT ) | b ( INOUT ) | out ( OUTPUT ) |
---|---|---|
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Not Gate
輸入為1時輸出為0;輸入為0時輸出為1
in ( INPUT ) | out ( OUTPUT ) |
---|---|
0 | 1 |
1 | 0 |
CHIP Not {
IN in;
OUT out;
PARTS:
// Put your code here:
Nand(a = in,b = in,out = out);
}
And Gate
全1為1,否則,輸出為0
a ( INPUT ) | b ( INPUT ) | out ( OUTPUT ) |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
CHIP And {
IN a, b;
OUT out;
PARTS:
// Put your code here:
Nand(a = a,b = b,out = x);
Not(in = x,out = out);
}
Or Gate
全0為0,否則輸出為1
a ( INPUT ) | b ( INPUT ) | out ( OUTPUT ) |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
CHIP Or {
IN a, b;
OUT out;
PARTS:
// Put your code here:
Not(in = a,out = x);
Not(in = b,out = y);
And(a = x,b = y,out = z);
Not(in = z,out = out);
}
Xor Gate
當輸入有奇數個1,輸出即為1;當輸入有偶數個1,輸出即為0
a ( INPUT ) | b ( INPUT ) | out ( OUTPUT ) |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
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 = p);
And(a = a,b = y,out = q);
Or(a = p,b = q,out = out);
}
Mux Gate
多工器(multiplexer,MUX)或稱資料選擇器(data selector),它主要的功能是從許多條資料輸入線,選擇其中一條輸入資料送至單一輸出線上。
a INPUT) | b(INPUT) | sel(INPUT) | out(OUTPUT) |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 |
0 | 1 | 0 | 0 |
0 | 1 | 1 | 1 |
1 | 0 | 0 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 |
CHIP Mux {
IN a, b, sel;
OUT out;
PARTS:
// Put your code here:
Not(in = sel, out = nsel);
And(a = a,b = nsel,out = x);
And(a = b,b = sel,out = y);
Or(a = x,b = y,out = out);
}
DMux Gate
解多工器(demultiplexer)的功能剛好與多工器的動作相反,它可以將一個位元的資料透過選擇分配給多個輸出端中的一個,所以又稱為資料分配器(data distributor )。
in(INPUT) | sel(INPUT) | a(OUTPUT) | b(OUTPUT) |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
CHIP DMux {
IN in, sel;
OUT a, b;
PARTS:
// Put your code here:
Not(in = sel,out = nsel);
And(a = in,b = nsel,out = a);
And(a = in,b = sel,out = b);
}
Not16 Gate
16-bit Not,16條輸入相對應的16條Not輸出
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]);
}
And16 Gate
16-bit And,16條輸入相對應的16條And輸出
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]);
}
Or16 Gate
16-bit Or,16條輸入相對應的16條Or輸出
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]);
}
Mux16 Gate
16-bit multiplexor,16條輸入相對應的16條Mux輸出
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]);
}
Or8Way Gate
Or(in0,in1,...,in7),8個輸入Or輸出
CHIP Or8Way {
IN in[8];
OUT out;
PARTS:
// Put your code here:
Or(a = in[0],b = in[1],out = out0);
Or(a = in[2],b = out0,out = out1);
Or(a = in[3],b = out1,out = out2);
Or(a = in[4],b = out2,out = out3);
Or(a = in[5],b = out3,out = out4);
Or(a = in[6],b = out4,out = out5);
Or(a = in[7],b = out5,out = out);
}
Mux4Way16 Gate
16-bit/4-way mux
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 = out0);
Mux16(a = c,b = d,sel = sel[0],out = out1);
Mux16(a = out0,b = out1,sel = sel[1],out = out);
}
Mux8Way16 Gate
16-bit/8-way mux
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:
Mux4Way16(a=a, b=b, c=c, d=d, sel=sel[0..1], out=out0);
Mux4Way16(a=e, b=f, c=g, d=h, sel=sel[0..1], out=out1);
Mux16(a=out0, b=out1, sel=sel[2], out=out);
}
DMux4Way Gate
4-way demultiplexor
CHIP DMux4Way {
IN in, sel[2];
OUT a, b, c, d;
PARTS:
// Put your code here:
Not(in=sel[0], out=out0);
Not(in=sel[1], out=out1);
And(a=out0, b=out1, out=out2);
And(a=in, b=out2, out=a);
Not(in=sel[1], out=out3);
And(a=sel[0], b=out3, out=out4);
And(a=in, b=out4, out=b);
Not(in=sel[0], out=out5);
And(a=out5, b=sel[1], out=out6);
And(a=in, b=out6, out=c);
And(a=sel[0], b=sel[1], out=out7);
And(a=in, b=out7, out=d);
}
DMux8Way Gate
8-way demultiplexor
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=out0, b=out1);
DMux4Way(in=out0, sel=sel[0..1], a=a, b=b, c=c, d=d);
DMux4Way(in=out1, sel=sel[0..1], a=e, b=f, c=g, d=h);
}