我正在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中拥有最新的软件套件
从输入引脚可以看到:
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
门。