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(算術論理演算器)の実装。
(後日更新。)