Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's wrong with my DMux 4 way?

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);
}
like image 733
Doug Smith Avatar asked Jan 23 '13 19:01

Doug Smith


2 Answers

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]

like image 180
senseiwu Avatar answered Dec 29 '22 01:12

senseiwu


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

like image 34
Sobbity Avatar answered Dec 29 '22 01:12

Sobbity