0

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

}

4

2 回答 2

0

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

所以:

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

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

和(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)上操作时必须牢记这一点。

于 2021-11-29T15:37:25.490 回答
0

我只是想通了,因为黑客使用了小端序。

于 2021-11-30T00:40:08.387 回答