我的DMux 4方式出了什么问题?

Dou*_*ith 8 hdl mux nand2tetris

它似乎接近工作,显然只是在第7行搞砸了?

/**
 * 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);
}
Run Code Online (Sandbox Code Playgroud)

我已经实现了我的DMux,如下所示,我只是使用它,就好像它是一棵树:

/**
 * 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);
}
Run Code Online (Sandbox Code Playgroud)

Sob*_*ity 9

你有正确的想法!但是你开始缩小sel [0]而不是sel [1],它对应于左列.

PS:我知道我迟到了

编辑:根据以下请求添加固定代码.感谢您的反馈

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);
}
Run Code Online (Sandbox Code Playgroud)

缩小在真值表中引用左列的内容(即,sel [1];记住在计数时从右边开始),你将有效地在中间分割选项