784S181と74S182の場合は、これらのチップが開発された1970年頃の半導体製造技術で可能な集積度やパッケージのピン数の点から1チップに4ビット分のロジックの集積が限界であり、4ビット単位でのP、G信号を生成しているが、半導体の集積度が著しく向上した時代では、マイクロプロセサ内部の32ビットや64ビットアダーの場合は、このような制約はない。このため、構成上の自由度が高く、各種の高速アダーが研究者によって提案されている。
このようなアダーの一般形は、次の図のようになる。先ず、前段で各ビットのAiとBiのXORと P 、G信号を求める。そして、中段で各ビットへのキャリーを計算し、最終段では、キャリー込みの和Sを求める。
Parallel Prefix Adderの一般形 |
P信号は、キャリーが伝搬(あるいは内部で発生)するという信号であるので、例えば8-15ビットのグループが伝搬、かつ、0-7ビットのグループが伝搬であれば、0-15ビットのグループ全体が伝搬になる。つまり、分割した両方の部分のP信号が"1"であれば、全体のP信号が"1"となる。同様に、キャリーが発生すると言う信号であるG信号は、例えば8-15ビットのグループが発生の場合と、0-7ビットのグループが発生、かつ、8-15ビットのグループが伝搬の場合に"1"になる。
この例では0-7ビットと8-15ビットのグループに分割したが、このように全体のビットを二等分する必要はなく、任意の分割で良い。また、分割したものを更に分割を繰り返しても良い。従って、大きなビットグループのP、G信号を計算する場合は、分割のやり方が数多く存在し得る。計算される値は分割のやり方には依存しないが、分割のやり方によって必要な回路量や遅延時間は変わってくる。このため、いろいろな分割方法が研究され、以下に述べるように、各種のアダーが提案されている。
ちょっと形式張るが、このP、Gの計算が分割できるという点を数学的に言うと、プリフィックスオペレータで表現できるという。ここで、0~iビットまでのP、G信号をP(i:0)とG(i:0)と表記し、i+1ビット目のP、G信号をPi+1、Gi+1と表記する。そして、P(i+1,0)とG(i+1,0)を、
- (P(i+1:0), G(i+1:0)) = (Pi+1, Gi+1)×(P(i:0), G(i:0))
と表現する。ここで×は、前に述べたP, G信号の分割のやり方に従って、次の演算を行う。
- P(i+1:0) = Pi+1・P(i:0), G(i+1:0) = Gi+1+Pi+1・G(i:0)
この表記法は、(Pi+1, Gi+1)×を前置して演算を行うので、×はPrefix(前置:プリフィックス)オペレータ、この演算をプリフィックス演算と呼ぶ。しかし、これは単なる呼び名であり、また、このように表記すると数学的に扱い易いというだけあり、読者は、P, G信号の計算は分割でき、それを繋ぎ合わせる演算がプリフィックス演算であるという点を記憶していれば十分である。
しかし、名称としては、このようにキャリーをプリフィックス計算として並列に計算するアダーを、総称してParallel Prefix Adderと呼ぶ。
また、2項のPrefix演算は以下のような簡単な回路で実行可能である。
Prefix演算を行うボックスの回路図 |
なお、以下のキャリー計算回路では、最下位ビット位置へのキャリー入力が無い構成について述べており、nビット目の発生信号Gnと、キャリーCnは同じものである。一方、最下位ビットへのキャリー入力を必要とする場合は、G0の替わりにG0+P0・Cinをキャリー計算回路に入力すれば良い。