在 nand2tetris 中实现 MUX 门时出现比较错误

Comparison error when implementing a MUX gate in nand2tetris

我正在尝试在 nand2tetris 课程中实现 MUX(多路复用器)门。我第一次尝试自己,我得到了一个错误。但无论我改变了什么,我总是得到错误。所以我尝试在线查看一些代码,这是大多数人使用的:

CHIP Mux {
    IN a, b, sel;
    OUT out;

    PARTS:
    Not(in=sel, out=nsel);
    And(a=sel, b=b, out=c1);
    And(a=nsel, b=a, out=c2);
    Or(a=c1, b=c2, out=out);
}

但即使我尝试此代码,我仍然会收到以下错误:

我得到的真相table:

|   a   |   b   |  sel  |  out  |
|   0   |   0   |   0   |   0   |
|   0   |   0   |   1   |   0   |
|   0   |   1   |   0   |   0   |
|   0   |   1   |   1   |   0   |

我应该得到什么:

|   a   |   b   |  sel  |  out  |
|   0   |   0   |   0   |   0   |
|   0   |   0   |   1   |   0   |
|   0   |   1   |   0   |   0   |
|   0   |   1   |   1   |   1   |
|   1   |   0   |   0   |   1   |
|   1   |   0   |   1   |   0   |
|   1   |   1   |   0   |   1   |
|   1   |   1   |   1   |   1   |

我有 2020-01-13 的最新软件套件

从可以看出你的输入引脚是:

a = 0  
b = 1  
sel = 1

您的内部引脚是:

nsel = 1 
c1   = 1 
c2   = 0

目前一切如预期。

预期 out = 1 在这种情况下你会得到 out = 0。由于失败,测试脚本在此时停止。

现在可能有两个原因:
1) 你没有加载正确的 Mux.hdl 并且因为如果你计算 Or(c1,c2) 你会得到 1 这是正确的。如果您将 And 门放在 Or 的位置,它将解释失败
2) 你的 Or.hdl 的实现是 incorrect.Mux 使用你的 Or gate 版本如果这样的文件存在于同一目录中。

所以首先验证您在硬件模拟器中的代码,然后验证您对Or.hdl的实现。后者可以通过从项目目录中临时删除 Or.hdl 来完成。硬件模拟器将加载 Or 门的内置版本。