第一章


Not (Not gate)

CHIP Not {
    IN in;
    OUT out;

    PARTS:
    Nand(a=in, b=in, out=out)
}

And (And gate)

CHIP And {
    IN a, b;
    OUT out;

    PARTS:
    Nand(a=a, b=b, out=AnandB);
    Nand(a=AnandB, b=AnandB, out=out);
}

Or (Or gate)

CHIP Or {
    IN a, b;
    OUT out;

    PARTS:
    Not(in=a, out=Nota);
    Not(in=b, out=Notb);
    Nand(a=Nota, b=Notb, out=out);

}

Xor (Xor gate)

CHIP Xor {
    IN a, b;
    OUT out;

    PARTS:
    Not(in=a, out=Nota);
    Not(in=b, out=Notb);
    And(a=a, b=Notb, out=Anda);
    And(b=b, a=Nota, out=Andb);
    Or(a=Anda, b=Andb, out=out);
}

Mux (Mux gate)

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

    PARTS:
    Not(in=sel, out=Not);
    And(a=a, b=Not, out=Anda);
    And(a=sel, b=b, out=Andb);
    Or(a=Anda, b=Andb, out=out);
}

DMux (DMux gate)

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

    PARTS:
    Not(in=sel, out=Not);
    And(a=in, b=Not, out=a);
    And(a=sel, b=in, out=b);
}

Not16 (16-bit Not)

CHIP Not16 {
    IN in[16];
    OUT out[16];

    PARTS:
    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 (16-bit And)

CHIP And16 {
    IN a[16], b[16];
    OUT out[16];

    PARTS:
    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 (16-bit Or)

CHIP Or16 {
    IN a[16], b[16];
    OUT out[16];

    PARTS:
    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 (16-bit multiplexor)

由於前面有做過Mux gate在這裡就可以拿出來直接使用。

CHIP Mux16 {
    IN a[16], b[16], sel;
    OUT out[16];

    PARTS:
    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 (Or(in0,in1,...,in7))

CHIP Or8Way {
    IN in[8];
    OUT out;

    PARTS:
    Or(a=in[0], b=in[1], out=Ora);
    Or(a=in[2], b=in[3], out=Orb);
    Or(a=in[4], b=in[5], out=Orc);
    Or(a=in[6], b=in[7], out=Ord);
    Or(a=Ora, b=Orb, out=Ore);
    Or(a=Orc, b=Ord, out=Orf);
    Or(a=Ore, b=Orf, out=out);
}

Mux4Way16 (16-bit/4-way mux)

CHIP Mux4Way16 {
    IN a[16], b[16], c[16], d[16], sel[2];
    OUT out[16];

    PARTS:
    Mux16(a=a, b=b, sel=sel[0], out=Mux16a);
    Mux16(a=c, b=d, sel=sel[0], out=Mux16b);
    Mux16(a=Mux16a, b=Mux16b, sel=sel[1], out=out);

}

Mux8Way16 (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:
    Mux16(a=a, b=b, sel=sel[0], out=Mux16a);
    Mux16(a=c, b=d, sel=sel[0], out=Mux16b);
    Mux16(a=e, b=f, sel=sel[0], out=Mux16c);
    Mux16(a=g, b=h, sel=sel[0], out=Mux16d);

    Mux16(a=Mux16a, b=Mux16b, sel=sel[1], out=Mux16e);
    Mux16(a=Mux16c, b=Mux16d, sel=sel[1], out=Mux16f);

    Mux16(a=Mux16e, b=Mux16f, sel=sel[2], out=out);
}

DMux4Way (4-way demultiplexor)

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

    PARTS:
    DMux(in=in, sel=sel[0], a=a);
    DMux(in=in, sel=sel[0], b=b);
    DMux(in=in, sel=sel[0], a=c);
    DMux(in=in, sel=sel[1], b=d);
}

DMux8Way (8-way demultiplexor)

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

    PARTS:
    DMux(in=in, sel=sel[0], a=a);
    DMux(in=in, sel=sel[0], b=b);

    DMux(in=in, sel=sel[0], a=c);
    DMux(in=in, sel=sel[0], b=d);

    DMux(in=in, sel=sel[1], a=e);
    DMux(in=in, sel=sel[1], b=f);

    DMux(in=in, sel=sel[2], a=g);
    DMux(in=in, sel=sel[2], b=h);
}

results matching ""

    No results matching ""