与门 \(And\)
用两个 \(Nand\) 门拼出来
\(ab=\overline{\overline{ab}1}\)
CHIP And {
IN a, b;
OUT out;
PARTS:
Nand(a=a, b=b, out=out1);
Nand(a=out1, b=true, out=out);
}
16位与门 \(And16\)
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]);
}
非门 \(Not\)
\(\overline{a1}\)
CHIP Not {
IN in;
OUT out;
PARTS:
Nand(a=in, b=true, out=out);
}
16位非门 \(Not16\)
CHIP Not16 {
IN in[16];
OUT out[16];
PARTS:
Nand(a=in[0], b=true, out=out[0]);
Nand(a=in[1], b=true, out=out[1]);
Nand(a=in[2], b=true, out=out[2]);
Nand(a=in[3], b=true, out=out[3]);
Nand(a=in[4], b=true, out=out[4]);
Nand(a=in[5], b=true, out=out[5]);
Nand(a=in[6], b=true, out=out[6]);
Nand(a=in[7], b=true, out=out[7]);
Nand(a=in[8], b=true, out=out[8]);
Nand(a=in[9], b=true, out=out[9]);
Nand(a=in[10], b=true, out=out[10]);
Nand(a=in[11], b=true, out=out[11]);
Nand(a=in[12], b=true, out=out[12]);
Nand(a=in[13], b=true, out=out[13]);
Nand(a=in[14], b=true, out=out[14]);
Nand(a=in[15], b=true, out=out[15]);
}
或门 \(Or\)
\(\overline{\overline{a}\overline{b}}\)
CHIP Or {
IN a, b;
OUT out;
PARTS:
Not(in=a,out=nota);
Not(in=b,out=notb);
And(a=nota,b=notb,out=out1);
Not(in=out1,out=out);
}
\(Or8Way\)
CHIP Or8Way {
IN in[8];
OUT out;
PARTS:
Or(a=in[0],b=in[1],out=out1);
Or(a=in[2],b=in[3],out=out2);
Or(a=in[4],b=in[5],out=out3);
Or(a=in[6],b=in[8],out=out4);
Or(a=out1,b=out2,out=out5);
Or(a=out3,b=out4,out=out6);
Or(a=out5,b=out6,out=out);
}
16位或门 \(Or16\)
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]);
}
异或门 \(Xor\)
\(\overline{a}b+a\overline{b}\)
CHIP Xor {
IN a, b;
OUT out;
PARTS:
Not(in=a,out=nota);
Not(in=b,out=notb);
And(a=a,b=notb,out=w1);
And(a=nota,b=b,out=w2);
Or(a=w1,b=w2,out=out);
}
多路转换器/多路复用器 \(Mux\)
\(sel\) 为 \(1\) 时输出信号 \(a\) , 为\(0\)时输出信号 \(b\) , 用真值表推出表达式
\(a\overline{sel}+bsel\)
CHIP Mux {
IN a, b, sel;
OUT out;
PARTS:
Not(in=sel,out=nsel);
And(a=a,b=nsel,out=out1);
And(a=b,b=sel,out=out2);
Or(a=out1,b=out2,out=out);
}
16位多路复用器 \(Mux16\)
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]);
}
\(Mux4Way16\)
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 = ab);
Mux16(a = c, b = d, sel = sel[0], out = cd);
Mux16(a = ab, b = cd, sel = sel[1], out = out);
}
\(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];
PARTS:
Mux4Way16(a = a, b = b, c = c, d = d, sel = sel[0..1], out = c1);
Mux4Way16(a = e, b = f, c = g, d = h, sel = sel[0..1], out = c2);
Mux16(a = c1, b = c2, sel = sel[2], out = out);
}
多路输出选择器/多路解复用器 \(DMux\)
{a, b} = {in, 0} if sel == 0
{0, in} if sel == 1
CHIP DMux {
IN in, sel;
OUT a, b;
PARTS:
Not(in=sel,out=nsel);
And(a=in,b=nsel,out=a);
And(a=in,b=sel,out=b);
}
\(DMux4Way\)
{a, b, c, d} = {in, 0, 0, 0} if sel == 00
{0, in, 0, 0} if sel == 01
{0, 0, in, 0} if sel == 10
{0, 0, 0, in} if sel == 11
用真值表推出表达式
CHIP DMux4Way {
IN in, sel[2];
OUT a, b, c, d;
PARTS:
Not(in=sel[0],out=nsel0);
Not(in=sel[1],out=nsel1);
And(a=nsel1,b=nsel0,out=out1);
And(a=nsel1,b=sel[0],out=out2);
And(a=sel[1],b=nsel0,out=out3);
And(a=sel[1],b=sel[0],out=out4);
And(a=out1,b=in,out=a);
And(a=out2,b=in,out=b);
And(a=out3,b=in,out=c);
And(a=out4,b=in,out=d);
}
\(DMux8Way\)
同上
CHIP DMux8Way {
IN in, sel[3];
OUT a, b, c, d, e, f, g, h;
PARTS:
Not(in=sel[0],out=nsel0);
Not(in=sel[1],out=nsel1);
Not(in=sel[2],out=nsel2);
And(a=nsel0,b=nsel1,out=n00);
And(a=n00,b=nsel2,out=n000);
And(a=n00,b=sel[2],out=n100);
And(a=sel[0],b=nsel1,out=n01);
And(a=n01,b=nsel2,out=n001);
And(a=n01,b=sel[2],out=n101);
And(a=nsel0,b=sel[1],out=n10);
And(a=n10,b=nsel2,out=n010);
And(a=n10,b=sel[2],out=n110);
And(a=sel[0],b=sel[1],out=n11);
And(a=n11,b=nsel2,out=n011);
And(a=n11,b=sel[2],out=n111);
And(a=n000,b=in,out=a);
And(a=n001,b=in,out=b);
And(a=n010,b=in,out=c);
And(a=n011,b=in,out=d);
And(a=n100,b=in,out=e);
And(a=n101,b=in,out=f);
And(a=n110,b=in,out=g);
And(a=n111,b=in,out=h);
}
标签:16,Nand,Mux,Week1,sel,true,homework,out
From: https://www.cnblogs.com/misasteria/p/16754542.html