Nand2Tetris用Not实现Not16报内部节点子总线不可用问题求解
报错原因与两种实现差异解析
报错根因
你编写的Not门调用代码存在语法错误:Not(in=[0], out=out[0])中,[0]没有指定所属的总线名称,Nand2Tetris的硬件模拟器会将其识别为未声明内部节点的子总线,而该模拟器的HDL规范不允许直接引用未声明内部节点的子总线,因此直接抛出对应报错。
正确的Not门调用写法应该明确指定要取顶层输入总线in的对应位,示例如下:
Not(in=in[0], out=out[0])
按这个规则修改所有Not门的输入绑定后,用Not门实现的Not16代码即可正常运行。
两种实现的差异
- 错误的Not门实现:未给位索引指定所属总线,属于语法层面的错误,和逻辑功能无关,直接无法通过语法校验
- 可运行的Nand门实现:明确指定了
a、b端口都绑定到顶层输入总线in的对应位,符合HDL语法规范;同时逻辑上Nand门的两个输入接同一信号时,输出等价于对该信号取反,因此功能上也满足Not16的要求,所以可以正常运行。
内容的提问来源于stack exchange,提问作者Pandemonium
相关产品推荐
相关产品推荐

