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

问题描述 投票:1回答: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);
}

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

我得到的真值表:

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

hdl hardware-programming nand2tetris
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的实现不正确。如果同一目录中存在此类文件,则Mux使用您的Or门版本。

所以first

在Hardware Simulator中验证您的代码,then验证您对Or.hdl的实现。您可以通过从项目目录中临时删除Or.hdl来完成后者。硬件模拟器将加载内置版本的Or门。
© www.soinside.com 2019 - 2024. All rights reserved.