0

根据 nand2tetris 课程材料,“由于该语言旨在描述连接而不是过程,因此 PARTS 语句的顺序无关紧要:只要芯片部件连接正确,芯片就会按规定运行。”

考虑到进位位是使用先前位计算的进位位计算的,下面的代码序列如何无关紧要?

/**
 * Adds two 16-bit values.
 * The most significant carry bit is ignored.
 */

CHIP Add16 {
    IN a[16], b[16];
    OUT out[16];

    PARTS:
    HalfAdder(a=a[0], b=b[0], carry=carry0, sum=out[0]);
    FullAdder(a=a[1], b=b[1], c=carry0, carry=carry1, sum=out[1]);
    FullAdder(a=a[2], b=b[2], c=carry1, carry=carry2, sum=out[2]);
    FullAdder(a=a[3], b=b[3], c=carry2, carry=carry3, sum=out[3]);
    FullAdder(a=a[4], b=b[4], c=carry3, carry=carry4, sum=out[4]);
    FullAdder(a=a[5], b=b[5], c=carry4, carry=carry5, sum=out[5]);
    FullAdder(a=a[6], b=b[6], c=carry5, carry=carry6, sum=out[6]);
    FullAdder(a=a[7], b=b[7], c=carry6, carry=carry7, sum=out[7]);
    FullAdder(a=a[8], b=b[8], c=carry7, carry=carry8, sum=out[8]);
    FullAdder(a=a[9], b=b[9], c=carry8, carry=carry9, sum=out[9]);
    FullAdder(a=a[10], b=b[10], c=carry9, carry=carry10, sum=out[10]);
    FullAdder(a=a[11], b=b[11], c=carry10, carry=carry11, sum=out[11]);
    FullAdder(a=a[12], b=b[12], c=carry11, carry=carry12, sum=out[12]);
    FullAdder(a=a[13], b=b[13], c=carry12, carry=carry13, sum=out[13]);
    FullAdder(a=a[14], b=b[14], c=carry13, carry=carry14, sum=out[14]);
    FullAdder(a=a[15], b=b[15], c=carry14, carry=carry15, sum=out[15]);
4

1 回答 1

1

因为所有计算都是同时计算的。在 中,块/实体/模块的每个实例都会创建内部所有行为的实例。您没有指定您使用的是哪一个,但几乎所有的行为都相同。

于 2022-02-01T06:48:28.393 回答