// This file is part of www.nand2tetris.org // and the book "The Elements of Computing Systems" // by Nisan and Schocken, MIT Press. // File name: projects/01/Mux8Way16.hdl /** * 8-way 16-bit multiplexor: * out = a if sel == 000 * b if sel == 001 * etc. * h if sel == 111 */ 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: Not(in=sel[0], out=w1); Not(in=sel[1], out=w2); Not(in=sel[2], out=w3); And(a=w1, b=w2, out=w4); And(a=w3, b=w4, out=w5); And(a=sel[0], b=w2, out=w6); And(a=w3, b=w6, out=w7); And(a=w1, b=sel[1], out=w8); And(a=w3, b=w8, out=w9); And(a=sel[0], b=sel[1], out=w10); And(a=w3, b=w10, out=w11); And(a=w1, b=w2, out=w12); And(a=sel[2], b=w12, out=w13); And(a=sel[0], b=w2, out=w14); And(a=sel[2], b=w14, out=w15); And(a=w1, b=sel[1], out=w16); And(a=sel[2], b=w16, out=w17); And(a=sel[0], b=sel[1], out=w18); And(a=sel[2], b=w18, out=w19); And(a=a[0], b=w5, out=wa0); And(a=a[1], b=w5, out=wa1); And(a=a[2], b=w5, out=wa2); And(a=a[3], b=w5, out=wa3); And(a=a[4], b=w5, out=wa4); And(a=a[5], b=w5, out=wa5); And(a=a[6], b=w5, out=wa6); And(a=a[7], b=w5, out=wa7); And(a=a[8], b=w5, out=wa8); And(a=a[9], b=w5, out=wa9); And(a=a[10], b=w5, out=wa10); And(a=a[11], b=w5, out=wa11); And(a=a[12], b=w5, out=wa12); And(a=a[13], b=w5, out=wa13); And(a=a[14], b=w5, out=wa14); And(a=a[15], b=w5, out=wa15); And(a=b[0], b=w7, out=wb0); And(a=b[1], b=w7, out=wb1); And(a=b[2], b=w7, out=wb2); And(a=b[3], b=w7, out=wb3); And(a=b[4], b=w7, out=wb4); And(a=b[5], b=w7, out=wb5); And(a=b[6], b=w7, out=wb6); And(a=b[7], b=w7, out=wb7); And(a=b[8], b=w7, out=wb8); And(a=b[9], b=w7, out=wb9); And(a=b[10], b=w7, out=wb10); And(a=b[11], b=w7, out=wb11); And(a=b[12], b=w7, out=wb12); And(a=b[13], b=w7, out=wb13); And(a=b[14], b=w7, out=wb14); And(a=b[15], b=w7, out=wb15); And(a=c[0], b=w9, out=wc0); And(a=c[1], b=w9, out=wc1); And(a=c[2], b=w9, out=wc2); And(a=c[3], b=w9, out=wc3); And(a=c[4], b=w9, out=wc4); And(a=c[5], b=w9, out=wc5); And(a=c[6], b=w9, out=wc6); And(a=c[7], b=w9, out=wc7); And(a=c[8], b=w9, out=wc8); And(a=c[9], b=w9, out=wc9); And(a=c[10], b=w9, out=wc10); And(a=c[11], b=w9, out=wc11); And(a=c[12], b=w9, out=wc12); And(a=c[13], b=w9, out=wc13); And(a=c[14], b=w9, out=wc14); And(a=c[15], b=w9, out=wc15); And(a=d[0], b=w11, out=wd0); And(a=d[1], b=w11, out=wd1); And(a=d[2], b=w11, out=wd2); And(a=d[3], b=w11, out=wd3); And(a=d[4], b=w11, out=wd4); And(a=d[5], b=w11, out=wd5); And(a=d[6], b=w11, out=wd6); And(a=d[7], b=w11, out=wd7); And(a=d[8], b=w11, out=wd8); And(a=d[9], b=w11, out=wd9); And(a=d[10], b=w11, out=wd10); And(a=d[11], b=w11, out=wd11); And(a=d[12], b=w11, out=wd12); And(a=d[13], b=w11, out=wd13); And(a=d[14], b=w11, out=wd14); And(a=d[15], b=w11, out=wd15); And(a=e[0], b=w13, out=we0); And(a=e[1], b=w13, out=we1); And(a=e[2], b=w13, out=we2); And(a=e[3], b=w13, out=we3); And(a=e[4], b=w13, out=we4); And(a=e[5], b=w13, out=we5); And(a=e[6], b=w13, out=we6); And(a=e[7], b=w13, out=we7); And(a=e[8], b=w13, out=we8); And(a=e[9], b=w13, out=we9); And(a=e[10], b=w13, out=we10); And(a=e[11], b=w13, out=we11); And(a=e[12], b=w13, out=we12); And(a=e[13], b=w13, out=we13); And(a=e[14], b=w13, out=we14); And(a=e[15], b=w13, out=we15); And(a=f[0], b=w15, out=wf0); And(a=f[1], b=w15, out=wf1); And(a=f[2], b=w15, out=wf2); And(a=f[3], b=w15, out=wf3); And(a=f[4], b=w15, out=wf4); And(a=f[5], b=w15, out=wf5); And(a=f[6], b=w15, out=wf6); And(a=f[7], b=w15, out=wf7); And(a=f[8], b=w15, out=wf8); And(a=f[9], b=w15, out=wf9); And(a=f[10], b=w15, out=wf10); And(a=f[11], b=w15, out=wf11); And(a=f[12], b=w15, out=wf12); And(a=f[13], b=w15, out=wf13); And(a=f[14], b=w15, out=wf14); And(a=f[15], b=w15, out=wf15); And(a=g[0], b=w17, out=wg0); And(a=g[1], b=w17, out=wg1); And(a=g[2], b=w17, out=wg2); And(a=g[3], b=w17, out=wg3); And(a=g[4], b=w17, out=wg4); And(a=g[5], b=w17, out=wg5); And(a=g[6], b=w17, out=wg6); And(a=g[7], b=w17, out=wg7); And(a=g[8], b=w17, out=wg8); And(a=g[9], b=w17, out=wg9); And(a=g[10], b=w17, out=wg10); And(a=g[11], b=w17, out=wg11); And(a=g[12], b=w17, out=wg12); And(a=g[13], b=w17, out=wg13); And(a=g[14], b=w17, out=wg14); And(a=g[15], b=w17, out=wg15); And(a=h[0], b=w19, out=wh0); And(a=h[1], b=w19, out=wh1); And(a=h[2], b=w19, out=wh2); And(a=h[3], b=w19, out=wh3); And(a=h[4], b=w19, out=wh4); And(a=h[5], b=w19, out=wh5); And(a=h[6], b=w19, out=wh6); And(a=h[7], b=w19, out=wh7); And(a=h[8], b=w19, out=wh8); And(a=h[9], b=w19, out=wh9); And(a=h[10], b=w19, out=wh10); And(a=h[11], b=w19, out=wh11); And(a=h[12], b=w19, out=wh12); And(a=h[13], b=w19, out=wh13); And(a=h[14], b=w19, out=wh14); And(a=h[15], b=w19, out=wh15); Or(a=wa0, b=wb0, out=wi0); Or(a=wa1, b=wb1, out=wi1); Or(a=wa2, b=wb2, out=wi2); Or(a=wa3, b=wb3, out=wi3); Or(a=wa4, b=wb4, out=wi4); Or(a=wa5, b=wb5, out=wi5); Or(a=wa6, b=wb6, out=wi6); Or(a=wa7, b=wb7, out=wi7); Or(a=wa8, b=wb8, out=wi8); Or(a=wa9, b=wb9, out=wi9); Or(a=wa10, b=wb10, out=wi10); Or(a=wa11, b=wb11, out=wi11); Or(a=wa12, b=wb12, out=wi12); Or(a=wa13, b=wb13, out=wi13); Or(a=wa14, b=wb14, out=wi14); Or(a=wa15, b=wb15, out=wi15); Or(a=wc0, b=wd0, out=wj0); Or(a=wc1, b=wd1, out=wj1); Or(a=wc2, b=wd2, out=wj2); Or(a=wc3, b=wd3, out=wj3); Or(a=wc4, b=wd4, out=wj4); Or(a=wc5, b=wd5, out=wj5); Or(a=wc6, b=wd6, out=wj6); Or(a=wc7, b=wd7, out=wj7); Or(a=wc8, b=wd8, out=wj8); Or(a=wc9, b=wd9, out=wj9); Or(a=wc10, b=wd10, out=wj10); Or(a=wc11, b=wd11, out=wj11); Or(a=wc12, b=wd12, out=wj12); Or(a=wc13, b=wd13, out=wj13); Or(a=wc14, b=wd14, out=wj14); Or(a=wc15, b=wd15, out=wj15); Or(a=we0, b=wf0, out=wk0); Or(a=we1, b=wf1, out=wk1); Or(a=we2, b=wf2, out=wk2); Or(a=we3, b=wf3, out=wk3); Or(a=we4, b=wf4, out=wk4); Or(a=we5, b=wf5, out=wk5); Or(a=we6, b=wf6, out=wk6); Or(a=we7, b=wf7, out=wk7); Or(a=we8, b=wf8, out=wk8); Or(a=we9, b=wf9, out=wk9); Or(a=we10, b=wf10, out=wk10); Or(a=we11, b=wf11, out=wk11); Or(a=we12, b=wf12, out=wk12); Or(a=we13, b=wf13, out=wk13); Or(a=we14, b=wf14, out=wk14); Or(a=we15, b=wf15, out=wk15); Or(a=wg0, b=wh0, out=wl0); Or(a=wg1, b=wh1, out=wl1); Or(a=wg2, b=wh2, out=wl2); Or(a=wg3, b=wh3, out=wl3); Or(a=wg4, b=wh4, out=wl4); Or(a=wg5, b=wh5, out=wl5); Or(a=wg6, b=wh6, out=wl6); Or(a=wg7, b=wh7, out=wl7); Or(a=wg8, b=wh8, out=wl8); Or(a=wg9, b=wh9, out=wl9); Or(a=wg10, b=wh10, out=wl10); Or(a=wg11, b=wh11, out=wl11); Or(a=wg12, b=wh12, out=wl12); Or(a=wg13, b=wh13, out=wl13); Or(a=wg14, b=wh14, out=wl14); Or(a=wg15, b=wh15, out=wl15); Or(a=wi0, b=wj0, out=wm0); Or(a=wi1, b=wj1, out=wm1); Or(a=wi2, b=wj2, out=wm2); Or(a=wi3, b=wj3, out=wm3); Or(a=wi4, b=wj4, out=wm4); Or(a=wi5, b=wj5, out=wm5); Or(a=wi6, b=wj6, out=wm6); Or(a=wi7, b=wj7, out=wm7); Or(a=wi8, b=wj8, out=wm8); Or(a=wi9, b=wj9, out=wm9); Or(a=wi10, b=wj10, out=wm10); Or(a=wi11, b=wj11, out=wm11); Or(a=wi12, b=wj12, out=wm12); Or(a=wi13, b=wj13, out=wm13); Or(a=wi14, b=wj14, out=wm14); Or(a=wi15, b=wj15, out=wm15); Or(a=wk0, b=wl0, out=wn0); Or(a=wk1, b=wl1, out=wn1); Or(a=wk2, b=wl2, out=wn2); Or(a=wk3, b=wl3, out=wn3); Or(a=wk4, b=wl4, out=wn4); Or(a=wk5, b=wl5, out=wn5); Or(a=wk6, b=wl6, out=wn6); Or(a=wk7, b=wl7, out=wn7); Or(a=wk8, b=wl8, out=wn8); Or(a=wk9, b=wl9, out=wn9); Or(a=wk10, b=wl10, out=wn10); Or(a=wk11, b=wl11, out=wn11); Or(a=wk12, b=wl12, out=wn12); Or(a=wk13, b=wl13, out=wn13); Or(a=wk14, b=wl14, out=wn14); Or(a=wk15, b=wl15, out=wn15); Or(a=wm0, b=wn0, out=out[0]); Or(a=wm1, b=wn1, out=out[1]); Or(a=wm2, b=wn2, out=out[2]); Or(a=wm3, b=wn3, out=out[3]); Or(a=wm4, b=wn4, out=out[4]); Or(a=wm5, b=wn5, out=out[5]); Or(a=wm6, b=wn6, out=out[6]); Or(a=wm7, b=wn7, out=out[7]); Or(a=wm8, b=wn8, out=out[8]); Or(a=wm9, b=wn9, out=out[9]); Or(a=wm10, b=wn10, out=out[10]); Or(a=wm11, b=wn11, out=out[11]); Or(a=wm12, b=wn12, out=out[12]); Or(a=wm13, b=wn13, out=out[13]); Or(a=wm14, b=wn14, out=out[14]); Or(a=wm15, b=wn15, out=out[15]); }