You need to enable JavaScript to run this app. Nand2Tetris项目Mux4Way16芯片HDL实现无法在HardwareSimulator正常运行
优惠活动
大模型
产品
解决方案
定价
更多

Nand2Tetris项目Mux4Way16芯片HDL实现无法在HardwareSimulator正常运行

Mux4Way16 故障排查与修复

*注意Nand2Tetris的位向量索引规则:sel[2]中sel[1]是最高位(MSB),sel[0]是最低位(LSB),对应官方定义的真值表:

  • sel[1]sel[0] = 00 → 输出a
  • sel[1]sel[0] = 01 → 输出b
  • sel[1]sel[0] = 10 → 输出c
  • sel[1]sel[0] = 11 → 输出d*

现有代码的核心问题

直接代入4种sel组合计算你当前代码的输出,和官方要求对比就能发现矛盾:

sel[1]sel[0]你代码的输出官方要求输出匹配度
00aa匹配
01cb不匹配
10bc不匹配
11dd匹配

错误根源有两点:

  • 用Xor(sel[0], sel[1])生成的finalSel没有实际分层逻辑作用,无法区分「前两路a/b」和「后两路c/d」的组选择边界
  • 最后一级组选择Mux错用了低位sel[0]作为控制信号,组间选择必须用高位sel[1]

正确实现方案

四选一多路选择器采用标准树型分层选择结构,分两层完成选择:

  1. 组内选择:用低位sel[0]同时控制两个独立Mux16,分别从{a,b}、{c,d}两组中选出对应的值
  2. 组间选择:用高位sel[1]控制最后一级Mux16,从第一步的两个组结果中选出最终输出

对应可直接运行的HDL代码:

PARTS:
// 组内选择:sel[0]控制a/b、c/d的选择
Mux16(a=a, b=b, sel=sel[0], out=abResult);
Mux16(a=c, b=d, sel=sel[0], out=cdResult);
// 组间选择:sel[1]控制两组结果的选择
Mux16(a=abResult, b=cdResult, sel=sel[1], out=out);

内容的提问来源于stack exchange,提问作者Meni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.09 15:54:04