11

It's seemingly close to working, it just is messing up at line 7 apparently?

/**
 * 4-way demultiplexor.
 * {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:
    DMux(in = in, sel = sel[0], a = out1, b = out2);

    DMux(in = out1, sel = sel[1], a = a, b = b);
    DMux(in = out2, sel = sel[1], a = c, b = d);
}

I've implemented my DMux as follows, and I'm just using that as if it were a tree:

/**
 * Dmultiplexor.
 * {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 = notsel);
    And(a = in, b = notsel, out = a);
    And(a = in, b = sel, out = b);
}
Ross Ridge
  • 38,414
  • 7
  • 81
  • 112
Doug Smith
  • 29,668
  • 57
  • 204
  • 388

2 Answers2

14

You've got the right idea! But you've started by narrowing down sel[0] as opposed to sel[1], which corresponds to the left column.

PS: I know I'm late

Edit: Added the fixed code as per the request below. Thanks for the feedback

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

    PARTS:
    DMux(in = in, sel = sel[1], a = out1, b = out2);

    DMux(in = out1, sel = sel[0], a = a, b = b);
    DMux(in = out2, sel = sel[0], a = c, b = d);
}

In narrowing down what would refer to the left column in a truth table (That is, sel[1]; remember to start from the right when counting), you'd be effectively splitting the options right in the middle

Sobbity
  • 149
  • 1
  • 4
  • 1
    Nothing wrong with being late if nobody else has answered! You may also want to consider (partially) posting the corrected code, to make it as clear as possible. – Adrian Wragg Sep 10 '13 at 13:15
  • In this particular situation you should really not post the solution. I'm not sure if you're aware, but the authors specifically request that you do not do so. – michaelavila Feb 02 '15 at 03:12
  • @AdrianWragg: I totally agree with you, but even if somebody has answered, there is nothing wrong in answering late. Anything that adds value to the q/a is okay, whether it is late or early. – Box Box Box Box Apr 23 '16 at 02:41
3

Another approach which matches closer to what OP was trying to do (and part where he missed being correct):

Swap b and c in the output to different lines like below:

CHIP DMux4Way {

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

PARTS:
// Put your code here:
DMux(in=in, sel=sel[0], a=dOut1, b=dOut2);

DMux(in=dOut1, sel=sel[1], a=a, b=c);

DMux(in=dOut2, sel=sel[1], a=b, b=d);

}

You can see from the truth table that that make sense as well, given that you are narrowing down sel[0]

senseiwu
  • 5,001
  • 5
  • 26
  • 47