Dmux4Way 在第 7 行产生错误:来自硬件模拟器的错误?

Dmux4Way is producing error in line 7: error from Hardware Simulator?

我是不是漏掉了什么或者是硬件模拟器出错了吗? 模拟器产生错误! 请你 运行 这个并查看错误。 请你 运行 这个并查看错误。 请你 运行 这个并查看错误。

    // 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/DMux4Way.hdl
    
    /**
     * 4-way demultiplexor:
     * {a, b, c, d} = {in, 0, 0, 0} if sel == 00
     *                {0, in, 0, 0} if sel == 01
     *                {0, 0, in, 0} if sel == 10
     *                {0, 0, 0, in} if sel == 11
     */
    
    CHIP DMux4Way {
        IN in, sel[2];
        OUT a, b, c, d;
    
        PARTS:
        // Put your code here:
        Not(in=sel[0], out=nsel0);
        Not(in=sel[1], out=nsel1);
    
        And(a=nsel0, b=nsel1, out=outa);
        And(a=in, b=outa, out=a);
        
        And(a=nsel0, b=sel[1], out=outb);
        And(a=in, b=outb, out=b);
    
        And(a=sel[0], b=nsel1, out=outc);
        And(a=in, b=outc, out=c);
    
        And(a=sel[0], b=sel[1], out=outd);
        And(a=in, b=outd, out=d);
    
        //DMux(in=in,sel=sel[1],a=ao,b=bo);
        //DMux(in=ao,sel=sel[0],a=a,b=b);
        //DMux(in=bo,sel=sel[0],a=c,b=d);
    }

当 in=1 和 sel[2]=01 以及 in=1 和 sel[2]=11 时(第 8 行),您的芯片会产生错误的结果。如果您 single-step 模拟器,您会发现当您进行测试时,设置的输出引脚不会按照您希望的方式递增。

那是为什么呢?这与误解 sel[0] 和 sel[1] 引用的 sel 中的哪些位有关。 sel[0]是最右边的,sel中的least-significant位。 Sel[1] 是最左边的 most-significant 位。你的芯片假设相反。

别难过,这种错误已经咬过每个程序员至少一次。

另请参阅:https://en.wikipedia.org/wiki/Endianness