0

我错过了什么还是硬件模拟器错了?模拟器产生错误!请您运行它并查看错误。请您运行它并查看错误。请您运行它并查看错误。

    // 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);
    }
4

1 回答 1

1

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

那为什么呢?这与误解 sel 中的哪些位被 sel[0] 和 sel[1] 引用有关。Sel[0] 是 sel 中最右边、最不重要的位。Sel[1] 是最左边、最重要的位。你的芯片假设相反。

不要难过,这种错误至少让每个程序员都咬过一次。

另见:https ://en.wikipedia.org/wiki/Endianness

于 2022-02-24T16:36:14.673 回答