11

它似乎接近工作,显然只是在第 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);
}

我已经按如下方式实现了我的 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);
}
4

2 回答 2

14

你有正确的想法!但是您已经开始缩小 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);
}

在缩小真值表中左列的范围(即 sel[1]; 记得在计算时从右开始),您将有效地在中间拆分选项

于 2013-09-10T12:54:03.393 回答
3

另一种更接近OP试图做的方法(以及他错过正确的部分):

将输出中的 b 和 c 交换到不同的行,如下所示:

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);

}

鉴于您正在缩小 sel[0] 范围,您可以从真值表中看到这也是有道理的

于 2019-05-28T07:41:22.620 回答