また、以上の説明では、プリフィックス計算ボックスなどの論理はANDやORなどを用いて記述して来たが、実際にCMOSで作るとなると、インバータとNANDやNORを用いることになる。CMOSを用いて、プリフィックスボックスの論理に忠実に作ると、次の図の左側のような回路となる。

Prefix演算ボックスの実現方法。左側は、NANDやAND-OR-INVゲートにインバータを接続してP、Gを生成、右側は、1段目からは*P、*Gを出力し、2段目はDeMorganの定理で相補的な論理を作りP、Gを生成

一方、右側の回路では、1段目は*P、*Gと反転した信号を出力し、2段目は当コラムの46回目で説明したDeMorganの定理を利用して*P、*G入力からP、Gを出力する論理を作ると、図のようにANDとORを入れ替えた論理回路図になる。右側の実装の方が通過ゲート段数は少ないが、どちらが速いかは1段目の出力のファンナウトと1段目と2段目の間の配線負荷の大きさに依存し、一般論として、負荷が小さいなら右側、負荷が大きい場合は左側の方が高速である。そして、更に負荷が大きい場合には、論理は右側の構成として、インバータ2段を直列に接続したバッファでドライブパワーを稼ぐ方が高速というケースもあり、アダーを高速にするには、最適な論理とゲートやバッファのサイズの最適化などのチューニングも重要である。

アダーの実現に必要な回路量であるが、入力側にPi、Gi、Ai(+)Biを作る回路、出力側にAi(+)Bi にCi-1を加算するXOR回路が必要であり、それに加えてプリフィックスの計算回路が必要となる。これまで見てきたように、プリフィックスを計算する回路の作り方は色々な方式があるが、例えばNビット幅のKogge-Stoneアダーの場合は、ボックスの段数がlog2(N)、幅がNビット分であるが、空きがN-1個であるので、N*(log2N-1)+1個のプリフィックス計算ボックスが必要となる。XORゲートは2入力NAND 4個分、ボックスやP,G計算回路も2入力NAND 4個分程度である。従ってアダー全体のゲート数は、2入力NAND換算で、

  • (4+4)*N + 4*(Log2(N)-1)*N +4 + 4*N = (8+log2N)*N+4

程度のゲートが必要となる。これにNの値を代入すると、32ビットアダーの場合は420ゲート、64ビットアダーの場合は900ゲートとなる。但し、これにはバッファなどに必要なゲート数は含んでいないので、前記のような高速化のチューニングを行う場合は20%程度の物量増加を見込む必要がある。

以上で、加算器の話は終わりである。なお、減算は当コラムの第52回で述べたように、2の補数表現を用いると、入力とキャリーインを否定して加算することで実現できるので、別個の演算器として取り上げることはせず、次は乗算器の設計を考えてみよう。