1

我正在尝试在 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);
}

但即使我尝试这段代码,我仍然会收到以下错误: 错误信息

我得到的真值表:

|   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 最新的软件套件

4

1 回答 1

1

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

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不正确。Or如果此类文件存在于同一目录中,Mux 将使用您的门版本。

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

于 2020-01-13T22:56:49.053 回答