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);
}

results matching ""

    No results matching ""