リプルキャリー・キャリールックアヘッド・キャリーセーブ加算器の違い:遅延・回路規模・用途を比較
どれも全加算器を組み合わせた加算回路ですが、桁上げの扱い方が違います。リプルキャリー(リップルキャリー)加算器は全加算器を直列につなぎ、桁上げが下位から上位へ順に伝わるので、遅延はビット数nに比例します(O(n))。桁上げ先見加算器(キャリールックアヘッド加算器)は、各桁の生成信号と伝搬信号からすべての桁上げを並列に求め、先見回路を階層化すれば遅延はO(log n)で済みます。桁上げ保存加算器(キャリーセーブ加算器)は、3つの数を、桁上げを伝えずに和と桁上げの2つの数にまとめる回路で、遅延はビット数によらず全加算器1段分です。乗算器では、桁上げ保存加算器の木(ウォレスツリーなど)で部分積を減らし、最後に残った2つの数を高速な加算器で足します。
| 項目 | リプルキャリー加算器 | 桁上げ先見加算器(キャリールックアヘッド) | 桁上げ保存加算器(キャリーセーブ) |
|---|---|---|---|
| 入力と出力 | 2つの数(と桁上げ入力)を足し、1つの和と桁上げ出力を出す | 2つの数(と桁上げ入力)を足し、1つの和と桁上げ出力を出す | 3つの数を、和Sと桁上げCyの2つの数にまとめる(A + B + C = S + Cy) |
| 桁上げの扱い | 各全加算器が下位からの桁上げを待ち、順に上位へ伝える | 生成信号 g = a·b と伝搬信号 p = a ⊕ b を使い、c(i+1) = g(i) + p(i)·c(i) を展開して、桁上げを並列に求める | 隣の桁へは伝えず、1桁左にずらした数として次の段へ渡す |
| 遅延の増え方 | O(n)。最悪の場合、桁上げが最下位から最上位まで伝わる | O(log n)(先見回路を階層化した場合) | O(1)。ビット数によらず全加算器1段分 |
| 64ビットでの目安 | 桁上げが全加算器64段を通る | 4ビットのブロックを3階層に組む。並列プレフィックス加算器なら、Kogge-Stone型で桁上げの計算はlog₂64 = 6段 | 1段は全加算器1個分の遅延。64個の部分積を2つにまとめるウォレスツリーは10段 |
| 回路規模 | 最小。nビットで全加算器n個 | 先見回路の分だけ大きい。速い構成ほどゲートと配線が多い(Kogge-Stone型ではおおむねn log n) | 1段は全加算器n個で、桁上げを伝える回路はない。乗算器の木全体では、部分積のビット数(n²程度)に比例する |
| 結果の形 | 通常の2進数 | 通常の2進数 | 和と桁上げの2つの数に分かれた冗長な形。1つの値にするには、最後に普通の加算器で足す必要がある |
| 主な用途 | 速度が問われない小さな回路や低消費電力の回路。FPGAでは専用の桁上げ回路(キャリーチェーン)を使って作られることが多い | CPUのALU、アドレスの計算、浮動小数点ユニット、乗算器の最終段の加算 | 乗算器の部分積の加算(ウォレスツリー、ダッダツリー)、積和演算の累積、多数の数の加算 |
| 関連する方式 | キャリースキップ加算器、キャリーセレクト加算器(速度と面積が中間) | 並列プレフィックス加算器(Kogge-Stone型、Brent-Kung型など) | 4:2コンプレッサ、部分積を減らすブースのアルゴリズムとの組み合わせ |
数値は代表的な目安で、世代や製品によって異なります。