1

我正在为基于 Nand2Tetris 课程的 DMux 编写 hdl 代码。

CHIP DMux {
IN in, sel;
OUT a, b;

PARTS:
And(a = sel, b = in, out = b);
Not(in = sel, out = selNot);
And(a = in, b = selNot, out = a);   
}

由于某种原因,此代码在in = 1 and sel = 0. 在这种情况下,它评估ab都为 0。

我已经多次写出门,但我无法弄清楚为什么结果不是a = 1 and b = 0

有人可以向我解释发生了什么吗?

4

2 回答 2

1

我感觉您的 Not 实现可能有问题。

尝试用 Nand 替换 Not:

Nand(a=sel,b=sel,out=notSel);   // notSel = ! sel

如果这有效,那么您的 Not.hdl 不正确。

此外,在风格点上,如果您在最终输出之前定义中间体(即:将 Nand 放在首位),并且输入顺序保持一致(即:a=in、b=sel 或 notSel、out = a或 b)。有助于减少您误读某些内容的机会。

于 2017-04-24T19:08:53.693 回答
0

Not sure that anything is wrong with your code. It looks to be the same as mine, which works. Have you tested your other And and Not gates?

My code:

Not(in=sel, out=notsel);
And(a=notsel, b=in, out=a);
And(a=in, b=sel, out=b);
于 2017-08-01T00:12:34.057 回答