O'REILLY コンピューターシステムの理論と実装【第2章③】

【この本が入ったトートバッグをを電車の網棚に忘れてしまい、そのまま消えてしまいました。。。誰か譲ってくれる人いましたらお声がけください。。】

課題4. インクリメンタの実装。
与えられた数字に1を加算する。

CHIP incrementer2 {
    IN a[16];
    OUT sum[16];

    PARTS:
/*for first 1 least significat bit*/
    Xor(a=a[0],b=true,out=sum[0]);
    And(a=a[0],b=true,out=carry0);

/*for 2nd significant bits*/
    Xor(a=a[1],b=false,out=sum1);
    And(a=a[1],b=false,out=carry1a);

    Xor(a=sum1,b=carry0,out=sum[1]);
    And(a=sum1,b=carry0,out=carry1b);

    Or(a=carry1a,b=carry1b,out=carry1);

/*for 3nd significant bits*/
    Xor(a=a[2],b=false,out=sum2);
    And(a=a[2],b=false,out=carry2a);

    Xor(a=sum2,b=carry1,out=sum[2]);
    And(a=sum2,b=carry1,out=carry2b);

    Or(a=carry2a,b=carry2b,out=carry2);

/*for 4th significant bits*/
    Xor(a=a[3],b=false,out=sum3);
    And(a=a[3],b=false,out=carry3a);

    Xor(a=sum3,b=carry2,out=sum[3]);
    And(a=sum3,b=carry2,out=carry3b);

    Or(a=carry3a,b=carry3b,out=carry3);

/*for 5th significant bits*/
    Xor(a=a[4],b=false,out=sum4);
    And(a=a[4],b=false,out=carry4a);

    Xor(a=sum4,b=carry3,out=sum[4]);
    And(a=sum4,b=carry3,out=carry4b);

    Or(a=carry4a,b=carry4b,out=carry4);


/*for 6th significant bits*/
    Xor(a=a[5],b=false,out=sum5);
    And(a=a[5],b=false,out=carry5a);

    Xor(a=sum5,b=carry4,out=sum[5]);
    And(a=sum5,b=carry4,out=carry5b);

    Or(a=carry5a,b=carry5b,out=carry5);


/*for 7th significant bits*/
    Xor(a=a[6],b=false,out=sum6);
    And(a=a[6],b=false,out=carry6a);

    Xor(a=sum6,b=carry5,out=sum[6]);
    And(a=sum6,b=carry5,out=carry6b);

    Or(a=carry6a,b=carry6b,out=carry6);

/*for 8th significant bits*/
    Xor(a=a[7],b=false,out=sum7);
    And(a=a[7],b=false,out=carry7a);

    Xor(a=sum7,b=carry6,out=sum[7]);
    And(a=sum7,b=carry6,out=carry7b);

    Or(a=carry7a,b=carry7b,out=carry7);

/*for 9th significant bits*/
    Xor(a=a[8],b=false,out=sum8);
    And(a=a[8],b=false,out=carry8a);

    Xor(a=sum8,b=carry7,out=sum[8]);
    And(a=sum8,b=carry7,out=carry8b);

    Or(a=carry8a,b=carry8b,out=carry8);


/*for 10th significant bits*/
    Xor(a=a[9],b=false,out=sum9);
    And(a=a[9],b=false,out=carry9a);

    Xor(a=sum9,b=carry8,out=sum[9]);
    And(a=sum9,b=carry8,out=carry9b);

    Or(a=carry9a,b=carry9b,out=carry9);


/*for 11th significant bits*/
    Xor(a=a[10],b=false,out=sum10);
    And(a=a[10],b=false,out=carry10a);

    Xor(a=sum10,b=carry9,out=sum[10]);
    And(a=sum10,b=carry9,out=carry10b);

    Or(a=carry10a,b=carry10b,out=carry10);


/*for 12th significant bits*/
    Xor(a=a[11],b=false,out=sum11);
    And(a=a[11],b=false,out=carry11a);

    Xor(a=sum11,b=carry10,out=sum[11]);
    And(a=sum11,b=carry10,out=carry11b);

CHIP incrementer {

    Or(a=carry11a,b=carry11b,out=carry11);
/*for 13th significant bits*/
    Xor(a=a[12],b=false,out=sum12);
    And(a=a[12],b=false,out=carry12a);

    Xor(a=sum12,b=carry11,out=sum[12]);
    And(a=sum12,b=carry11,out=carry12b);

    Or(a=carry12a,b=carry12b,out=carry12);


/*for 14th significant bits*/
    Xor(a=a[13],b=false,out=sum13);
    And(a=a[13],b=false,out=carry13a);

    Xor(a=sum13,b=carry12,out=sum[13]);
    And(a=sum13,b=carry12,out=carry13b);

    Or(a=carry13a,b=carry13b,out=carry13);


/*for 15th significant bits*/
    Xor(a=a[14],b=false,out=sum14);
    And(a=a[14],b=false,out=carry14a);

    Xor(a=sum14,b=carry13,out=sum[14]);
    And(a=sum14,b=carry13,out=carry14b);

    Or(a=carry14a,b=carry14b,out=carry14);

/*for 16th significant bits*/
    Xor(a=a[15],b=false,out=sum15);
/*    And(a=a[15],b=false,out=carry15a);*/

    Xor(a=sum15,b=carry14,out=sum[15]);
/*   And(a=sum15,b=carry14,out=carry15b);

    Or(a=carry15a,b=carry15b,out=carry15);*/
}

課題5. ALU(算術論理演算器)の実装。

(後日更新。)