在 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
门的内置版本。
我正在尝试在 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
门的内置版本。