【问题标题】:Why is DMux4way operate like this?为什么 DMux4way 会这样操作?
【发布时间】:2021-11-29 14:59:16
【问题描述】:

当sel为01时应该选择b,但是为什么操作是a = nsel1 b = sel[0]?之后,sel 将从 01 变为 00

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

PARTS:
// Put your code here:
Not(in = sel[0], out = nsel0);
Not(in = sel[1], out = nsel1);
And(a = nsel1, b = nsel0, out = s00);
And(a = in, b = s00, out = a);
And(a = nsel1, b = sel[0], out = s01);
And(a = in, b = s01, out = b);
And(a = sel[1], b = nsel0, out = s10);
And(a = in, b = s10, out = c);
And(a = sel[1], b = sel[0], out = s11);
And(a = in, b = s11, out = d);

}

【问题讨论】:

    标签: hdl nand2tetris


    【解决方案1】:

    我只是想通了,因为 hack 使用了 little endian。

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案2】:

    在每对 AND 中,第一个决定输出是否被激活,第二个决定输入到那个输出。

    所以:

    And(a = nsel1, b = nsel0, out = s00);

    s00 只有在其输入(nsel0 和 nsel1)都为 True 时才为 True。由于它们是 sel[0] 和 sel[1] 的倒数,因此只有当 sel[0] 和 sel[1] 都为 False 时,s00 才会为真。

    And(a = in, b = s00, out = a);

    只有当 in 和 s00 都为真时,第二个 And 才会为真。所以只有当 in 为 True 且 sel[0] 和 sel[1] 为 False 时才会为 True。

    类似的逻辑适用于其他情况。但关键是,对于01和10的情况,仅仅检查正确的值是True是不够的,还要检查其他的值是否为0。

    编辑:此外,正如 OP 在后续评论中指出的那样,机器是 little-endian,在多位总线(如 sel)上操作时必须牢记这一点。

    【讨论】:

    • 感谢您的回答。但让我感到困惑的是,“And(a = nsel1, b = sel[0], out = s01)”会在应该从 b 输出时将 sel 从 01 更改为 00。然后是“And(a = in, b = s01, out = b);”将始终为 0。
    • 可能让您感到困惑的是,在“And(a = nsel1, b = sel[0], out = s01)”中,a 和 b 是 And 的输入参数。它们不会影响整个芯片的 a 和 b 输出。这些仅在第二个 And 中设置,当它们连接到该组件的 out 参数时。
    猜你喜欢
    • 1970-01-01
    • 2018-10-15
    • 2016-10-04
    • 2014-03-18
    • 1970-01-01
    • 2011-06-03
    • 2018-06-08
    • 2014-12-21
    相关资源
    最近更新 更多