Chapter 1

Nand gate

所以輸入為"1"時輸出為"0"。

Input A Input B Output
0 0 1
0 1 1
1 0 1
1 1 0

Not gate

只要輸入"0"輸出為"1",反之。

  CHIP Not {
IN in;
OUT out;

PARTS:
// Put your code here:
 Nand(a=in,b=in,out=out);     
}

And gate

全1為1,否則,輸出為0

CHIP And {
  IN a, b;
  OUT out;

  PARTS:
Nand(a=a, b=b, out=AnandB);
Nand(a=AnandB, b=AnandB, out=out);
  // Put your code here:

}


Or gate

全0為0,否則輸出為1

CHIP Or {
IN a, b;
OUT out;

PARTS:
// Put your code here:
Nand(a=a,b=a,out=o1);
Nand(a=b,b=b,out=o2);
Nand(a=o1,b=o2,out=out);
}

Xor gate

當輸入有奇數個1,輸出即為1;當輸入有偶數個1,輸出即為0

CHIP Xor {
IN a, b;
OUT out;

PARTS:
// Put your code here:
Nand(a=a,b=b,out=AnandB);
Or(a=a,b=b,out=AorB);
And(a=AnandB,b=AorB,out=out);
}

Mux gate

多工器(multiplexer,MUX)或稱資料選擇器(data selector),它主要的功能是從許多條資料輸入線,選擇其中一條輸入資料送至單一輸出線上。

 CHIP Mux {
IN a, b, sel;
OUT out;

PARTS:
    Not(in=sel, out=nsel);
    And(a=a, b=nsel, out=o1);
    And(a=b, b=sel, out=o2);
    Or(a=o1, b=o2, out=out);
// Put your code here:
}

DMux gate

解多工器(demultiplexer)的功能剛好與多工器的動作相反,它可以將一個位元的資料透過選擇分配給多個輸出端中的一個,所以又稱為資料分配器(data distributor )。

CHIP DMux { IN in, sel; OUT a, b;

PARTS:
Not(in=sel, out=nsel);
And(a=nsel, b=in, out=a);
And(a=sel,  b=in, out=b);
// Put your code here:
}

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:
And(a=a[15], b=b[15], out=out[15]);
And(a=a[14], b=b[14], out=out[14]);
And(a=a[13], b=b[13], out=out[13]);
And(a=a[12], b=b[12], out=out[12]);
And(a=a[11], b=b[11], out=out[11]);
And(a=a[10], b=b[10], out=out[10]);
And(a=a[9], b=b[9], out=out[9]);
And(a=a[8], b=b[8], out=out[8]);
And(a=a[7], b=b[7], out=out[7]);
And(a=a[6], b=b[6], out=out[6]);
And(a=a[5], b=b[5], out=out[5]);
And(a=a[4], b=b[4], out=out[4]);
And(a=a[3], b=b[3], out=out[3]);
And(a=a[2], b=b[2], out=out[2]);
And(a=a[1], b=b[1], out=out[1]);
And(a=a[0], b=b[0], out=out[0]);

// Put your code here:
}

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:
 Mux(a=a[15], b=b[15], sel=sel, out=out[15]);
Mux(a=a[14], b=b[14], sel=sel, out=out[14]);
Mux(a=a[13], b=b[13], sel=sel, out=out[13]);
Mux(a=a[12], b=b[12], sel=sel, out=out[12]);
Mux(a=a[11], b=b[11], sel=sel, out=out[11]);
Mux(a=a[10], b=b[10], sel=sel, out=out[10]);
Mux(a=a[9],  b=b[9],  sel=sel, out=out[9]);
Mux(a=a[8],  b=b[8],  sel=sel, out=out[8]);
Mux(a=a[7],  b=b[7],  sel=sel, out=out[7]);
Mux(a=a[6],  b=b[6],  sel=sel, out=out[6]);
Mux(a=a[5],  b=b[5],  sel=sel, out=out[5]);
Mux(a=a[4],  b=b[4],  sel=sel, out=out[4]);
Mux(a=a[3],  b=b[3],  sel=sel, out=out[3]);
Mux(a=a[2],  b=b[2],  sel=sel, out=out[2]);
Mux(a=a[1],  b=b[1],  sel=sel, out=out[1]);
Mux(a=a[0],  b=b[0],  sel=sel, out=out[0]);
// Put your code here:
}

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=o1);
Or(a=in[2],b=in[3],out=o2);
Or(a=in[4],b=in[5],out=o3);
Or(a=in[6],b=in[7],out=o4);
Or(a=o1,b=o2,out=o5);
Or(a=o3,b=o4,out=o6);
Or(a=o5,b=o6,out=out);
}

Mux4Way16 gate

4對16多工器,4組資料線(一組16條),3條選擇線,16條輸出線。

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=o1);
Mux16(a=c,b=d,sel=sel[0],out=o2);
Mux16(a=o1,b=o2,sel=sel[1],out=out);
}

Mux8Way16 gate

8對16多工器,8組資料線(一組16條),4條選擇線,16條輸出線。

 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=q); 
   Mux16(a=c,b=d,sel=sel[0],out=r);
Mux16(a=e,b=f,sel=sel[0],out=s); 
   Mux16(a=g,b=h,sel=sel[0],out=t);

Mux16(a=q,b=r,sel=sel[1],out=y);
Mux16(a=s,b=t,sel=sel[1],out=z);

Mux16(a=y,b=z,sel=sel[2],out=out);
}

DMux4Way gate

1對4解多工器,1條資料線,2條選擇線,4條輸出線。

CHIP DMux4Way {
IN in, sel[2];
OUT a, b, c, d;

PARTS:
Not(in=sel[1], out=nsel1);
Not(in=sel[0], out=nsel0);
And(a=nsel1,  b=nsel0,  out=sel00);
And(a=nsel1,  b=sel[0], out=sel01);
And(a=sel[1], b=nsel0,  out=sel10);
And(a=sel[1], b=sel[0], out=sel11);
DMux(in=in, sel=sel00, a=d0, b=a);
DMux(in=in, sel=sel01, a=d1, b=b);
DMux(in=in, sel=sel11, a=d2, b=d);
DMux(in=in, sel=sel10, a=d3, b=c);
// Put your code here:
}

DMux8Way gate

1對8解多工器,1條資料線,3條選擇線,8條輸出線。

CHIP DMux8Way {
IN in, sel[3];
OUT a, b, c, d, e, f, g, h;

PARTS:
Not(in=sel[2], out=nsel2);
And(a=in, b=sel[2], out=s2h);
And(a=in, b=nsel2,  out=s2l);
DMux4Way(in=s2h, sel=sel[0..1], a=e, b=f, c=g, d=h);
DMux4Way(in=s2l, sel=sel[0..1], a=a, b=b, c=c, d=d);
// Put your code here:
}

results matching ""

    No results matching ""