芯片 Mux4way16 在 ‏硬件模拟 (VHDL) 上直到最后才运行

Posted

技术标签:

【中文标题】芯片 Mux4way16 在 ‏硬件模拟 (VHDL) 上直到最后才运行【英文标题】:chip Mux4way16 not run ontil the end on ‏HardwareSimulator (VHDL) 【发布时间】:2021-01-12 19:24:19 【问题描述】:

我正在尝试构建这个芯片:

// This file is part of www.nand2tetris.org
// and the book "The Elements of Computing Systems"
// by Nisan and Schocken, MIT Press.
// File name: projects/01/Mux4Way16.hdl

/**
 * 4-way 16-bit multiplexor:
 * out = a if sel == 00
 *       b if sel == 01
 *       c if sel == 10
 *       d if sel == 11
 */

CHIP Mux4Way16 
    IN a[16], b[16], c[16], d[16], sel[2];
    OUT out[16];

    PARTS:
    // Put your code here:

还有我到现在才写的——

    PARTS:
    // Put your code here:
    Xor(a=sel[0], b=sel[1], out=finalSel);
    Not(in=finalSel, out=notFinalSel);
    Mux16(a=a, b=b, sel=finalSel, out=aAndB);
    Mux16(a=c, b=d, sel=notFinalSel, out=cAndd);
    Mux16(a=aAndB, b=cAndd, sel=sel[0], out=out);

由于某种原因它不起作用.. Screenshot from the ‏‏HardwareSimulator

有人知道为什么吗?

【问题讨论】:

虽然硬件描述语言不是 VHDL(超大规模整数电路硬件设计语言),但请参阅 Noam Nisan 和 Shimon Schocken 的“计算系统元素”的附录 A。课程资料(和模拟器)可通过the official website of Nand to Tetris courses 获得,这可能会排除通过nand2tetris 标签以外的帮助。不要使用用于 html 的 sn-ps 和它的同类。图片不足以作为问题陈述。 【参考方案1】:

您选择要传递的输入的逻辑似乎不正确。您应该通过为 4 个控制条件中的每一个为 finalSel、notFinalSel、aAndB、cAndd 和 out 创建一个真值表来测试它。

一般来说,在做这类题时,KISS原则是成立的;保持简单和愚蠢。您不需要对 sel[] 位进行任何花哨的逻辑操作,您可以直接使用它们。因此,一旦您修复了您的版本(并了解您出错的地方),请尝试制作一个仅由 3 个 Mux16 组成的版本,而不是其他任何东西。一旦两个版本都正常工作,您就会了解导致您在第一次尝试中走错路的错误,这将是今后宝贵的一课。

玩得开心!

【讨论】:

以上是关于芯片 Mux4way16 在 ‏硬件模拟 (VHDL) 上直到最后才运行的主要内容,如果未能解决你的问题,请参考以下文章

STM32L476应用开发之二:模拟量数据采集

内存芯片实现中的无限循环问题 (Nand2Tetris)

vbox虚拟机使用vdi和vhd磁盘,性能有差别吗?

jchdl - GSL实例 - Mux4

凿子3。功能模块 Mux4

jchdl - GSL实例 - Mux4(使用Mux)