

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[0..15], b=e[0..15],sel = sel[0], out=z);
Mux16(a=b[0..15], b=f[0..15],sel = sel[0], out=q);
Mux16(a=c[0..15], b=g[0..15],sel = sel[0], out=r);
Mux16(a=d[0..15], b=h[0..15],sel = sel[0], out=l);
Mux4Way16(a=z, b=q, c=r, d=l,sel=sel[1..2],out=out[0..15]);
}
the output is
 a  b  c  d  e  f  g  h  sel  out 
 0001001000110100  0010001101000101  0011010001010110  0100010101100111  0101011001111000  0110011110001001  0111100010011010  1000100110101011  001  0101011001111000 
Any help would be greatly appreciated!

Administrator

The output you are seeing is exactly what you are telling it to be.
For sel=001, which of the eight inputs should the output be?
Which of the eight inputs are you seeing at the output?
Walk through your design and make note of what input signal is at the output of each of your Muxes.


Thank you for the reply. The output should be b. The output is e.
sel:001
a:0
b:0
c:0
d:1
e:1
f:1
g:1
h:0
Mux(a,e sel[0]) >0 = a
Mux(b,f sel[0]) >0 = b
Mux(c,g sel[0]) >0 = c
Mux(d,h sel[0]) >1 = d
Mux16(0 = a, 0 = b, 0 = c, 1 = d, 01 = sel[1..2]) > 0 = b
I think that I am misunderstanding Mux gates. I had a similar error on another chip and a random change fixed it.

Administrator

If sel=001, what is the value of sel[0]?


I see. I fixed the error now. However, I am concerned that there is a deeper error.
Mux16(a=a[0..15], b=e[0..15],sel = sel[2], out=z);
Mux16(a=b[0..15], b=f[0..15],sel = sel[2], out=q);
Mux16(a=c[0..15], b=g[0..15],sel = sel[2], out=r);
Mux16(a=d[0..15], b=h[0..15],sel = sel[2], out=l);
Mux4Way16(a=z, b=q, c=r, d=l,sel3=sel[0..1],out=out[0..15]);
Shouldn't the last line cause an error because, in the case of sel[] = 001, sel3 would be 10, not 01?
Many thanks!


Assume Sel[] = 001.
So this line: Mux4Way16(a=z, b=q, c=r, d=l,sel=sel[0..1],out=out[0..15]);
passes sel=10 into Mux4Way16?
Wouldn't this result c being chosen instead of b because then sel[0] = 0 and sel[1] = 1?
Below is Mux4Way16:
Mux16(a=a[0..15],b=d[0..15],sel=sel[1], out=q);
Mux16(a=c[0..15],b=b[0..15],sel=sel[0], out=z);
Xor(a=sel[0],b=sel[1],out=h);
Mux16(a=q, b=z, sel=h, out = out[0..15]);


Never mind. I understand now. if 10 is passed in. 1 is passed in first and 0 is passed in second. Thus sel[0] = 1.
Thank you for your help!

Administrator

In reply to this post by HighSchoolerWhoAsksHowTooMuch
The Mux4Way16 doesn't have a sel3 input, just a sel input that is two bits wide.

Administrator

In reply to this post by HighSchoolerWhoAsksHowTooMuch
You got it.


I hate to be a pest, but I think I had my last post backward. If sel[]=01, then wouldn't 1 be passed in first such that sel[0]=1? Thank you again!

Administrator

Yes. I think I was looking at what you had earlier.
The bits are numbered with bit 0 being the lsb (least significant bit), or from right to left as we would normally write the value out on paper.
I would prefer that the authors used a[15..0] instead of a[0..15] as I think that is more intuitively consistent.

