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

Hdl 在NAND2TTERIS中实现MUX门时出现比较错误,hdl,hardware-programming,nand2tetris,Hdl,Hardware Programming,Nand2tetris,我试图在NAND2TTERIS课程中实现一个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

我试图在NAND2TTERIS课程中实现一个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,我拥有最新的软件套件。从您的输入引脚可以看到:

a = 0  
b = 1  
sel = 1
nsel = 1 
c1   = 1 
c2   = 0
您的内部引脚是:

a = 0  
b = 1  
sel = 1
nsel = 1 
c1   = 1 
c2   = 0
到目前为止,一切如期而至

在本例中,预期的
out=1
,您将得到
out=0
。由于失败,测试脚本在此点停止。

现在可能有两个原因:
1) 您没有加载正确的
Mux.hdl
,因为如果您计算
或(c1,c2)
,您将得到正确的1。如果您将
门放置在
的位置,将解释故障
2) 您对
或.hdl
的实现不正确。如果同一目录中存在这样的文件,Mux将使用您的
gate版本。


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

在硬件模拟器的hdl窗口中向下滚动,确认已加载最新的Mux.hdl实现。您应该看到您的最新代码。你发布的代码很好,和我一起工作。当然,我有更老的版本,但我会惊讶地看到他们这边的问题。另外,我使用的是同一版本的硬件模拟器,因此问题必须出在测试脚本中,而我的测试脚本与您发布的屏幕截图中的相同。@zubergu我有正确版本的
Mux.hdl
,以及正确的(据我所知)测试脚本。即使在使用默认实现时,我也会遇到错误,这就是为什么这么奇怪。即使使用默认值,我仍然会得到相同的错误。确切地我已经确定我有正确的测试脚本,这很奇怪。我今天刚试过,效果不错。我不知道发生了什么。我认为你的回答对我有帮助,所以我认为你的回答被接受了