本網頁使用sakura.css

完成 nand2tetris 第一章後半習題

Not16

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

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

not16

And16

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

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

and16

Or16

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

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

or16

Mux16

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

Mux(sel=sel, a=a[0], b=b[0], out=out[0]);
Mux(sel=sel, a=a[1], b=b[1], out=out[1]);
Mux(sel=sel, a=a[2], b=b[2], out=out[2]);
Mux(sel=sel, a=a[3], b=b[3], out=out[3]);
Mux(sel=sel, a=a[4], b=b[4], out=out[4]);
Mux(sel=sel, a=a[5], b=b[5], out=out[5]);
Mux(sel=sel, a=a[6], b=b[6], out=out[6]);
Mux(sel=sel, a=a[7], b=b[7], out=out[7]);
Mux(sel=sel, a=a[8], b=b[8], out=out[8]);
Mux(sel=sel, a=a[9], b=b[9], out=out[9]);
Mux(sel=sel, a=a[10], b=b[10], out=out[10]);
Mux(sel=sel, a=a[11], b=b[11], out=out[11]);
Mux(sel=sel, a=a[12], b=b[12], out=out[12]);
Mux(sel=sel, a=a[13], b=b[13], out=out[13]);
Mux(sel=sel, a=a[14], b=b[14], out=out[14]);
Mux(sel=sel, a=a[15], b=b[15], out=out[15]);
}

mux16

Or8Way

8 組輸入Or Gate,輸出一位,每組輸入1bit

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

Or(a=in[0],b=in[1],out=aa);
Or(a=in[2],b=in[3],out=bb);
Or(a=in[4],b=in[5],out=cc);
Or(a=in[6],b=in[7],out=dd);

Or(a=aa,b=bb,out=ab);
Or(a=cc,b=dd,out=cd);

Or(a=ab,b=cd,out=out);
}

or8way

Mux4Way16

4組輸入abcd,每組輸入皆16bit,輸出1組16bit, 選擇線兩條去四選一

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

Mux16(a=a,b=b,sel=sel[0],out=outab);
Mux16(a=c,b=d,sel=sel[0],out=outcd);

Mux16(a=outab,b=outcd,sel=sel[1],out=out);
}

Mux4Way16

Mux8Way16

CHIP Mux8Way16 {
IN a[16], b[16], c[16], d[16],e[16], f[16], g[16], h[16],sel[3];
OUT out[16];

Mux4Way16(a=a,b=b,c=c,d=d,sel[0]=sel[0],sel[1]=sel[1],out=abcd);
Mux4Way16(a=e,b=f,c=g,d=h,sel[0]=sel[0],sel[1]=sel[1],out=efgh);

Mux16(a=abcd,b=efgh,sel=sel[2],out=out);
}

Mux8Way16

DMux4Way

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

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

DMux4Way

DMux8Way

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

DMux(in=in,sel=sel[2],a=sel12,b=sel34);

DMux(in=sel12,sel=sel[1],a=sel1,b=sel2);
DMux(in=sel34,sel=sel[1],a=sel3,b=sel4);

DMux(in=sel1,sel=sel[0],a=a,b=b);
DMux(in=sel2,sel=sel[0],a=c,b=d);
DMux(in=sel3,sel=sel[0],a=e,b=f);
DMux(in=sel4,sel=sel[0],a=g,b=h);
}

DMux8Way

證明迪摩根定律二式 Not(x Or y) = Not(x) And Not(y)

prove

七段顯示器中指定的一根亮棒

40%7==5

seven