Mux8Way16.hdl – Notepad File Edit Format View Help // 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: Mux4Way16(a=a, b=b, c=c, d=d, sel=sel[0..1], out=muxAD); Mux4Way16(a=e, b=f, c=g, d=h, sel=sel[0..1], out=muxEH); Mux16(a=muxAD, b=muxEH, sel=sel[2], out=out);
The Correct Answer and Explanation is:
✅ Correct Answer (Mux8Way16.hdl Implementation):
hdlCopyEdit// 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
* c if sel == 010
* d if sel == 011
* e if sel == 100
* f if sel == 101
* g if sel == 110
* 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:
Mux4Way16(a=a, b=b, c=c, d=d, sel=sel[0..1], out=muxAD);
Mux4Way16(a=e, b=f, c=g, d=h, sel=sel[0..1], out=muxEH);
Mux16(a=muxAD, b=muxEH, sel=sel[2], out=out);
}
📘 Explanation
The Mux8Way16
chip is a key component in digital circuit design. It selects one of eight 16-bit input buses (a
through h
) and outputs it to the 16-bit output bus out
. The selection is based on a 3-bit input called sel
.
Each possible value of sel
represents a different input to choose:
000
selectsa
001
selectsb
010
selectsc
011
selectsd
100
selectse
101
selectsf
110
selectsg
111
selectsh
To implement this, the design uses a hierarchy of multiplexors. First, it uses two Mux4Way16
chips:
- The first one takes inputs
a
,b
,c
, andd
, and uses the first two bits ofsel
(sel[0..1]
) to choose one of them. Its output is stored inmuxAD
. - The second one takes inputs
e
,f
,g
, andh
, also usingsel[0..1]
, and outputs the selected value tomuxEH
.
These two intermediate outputs (muxAD
and muxEH
) are then fed into a single Mux16
, which uses the third bit of sel
(sel[2]
) to choose between them. This effectively divides the selection into two stages:
- Choose one of two groups (first four or last four) based on
sel[2]
. - Choose one of four within that group based on
sel[0..1]
.
This structured and modular approach simplifies complex selection logic using simpler components.
