第10回: 乗算器(その3)

ブースのアルゴリズムを使った乗算器(続)

前回のこれらのBTDセル, SIBセル, SELセルを並べて、 例えば6ビットの乗算器の部分積の生成は次のようになるでしょう。

乗数が6ビットなのに、部分積の段数が(6-2)/2+1 = 3段で済んでいることに 注意しましょう。

全体の構成

ここまでで部分積はそろっていますから、あとはこれをキャリー保存 加算器(CSA)で足すだけです。 ただし負の数があるので、ちょっと注意をする必要があります。 例えば6ビット×6ビットの乗算器の場合、乗算結果Zは 次のように書けるでしょう。
Z = Σj=02(-1・A6j・26 + Σi=05Aij2i + Cj)22j
= Σj=02{ Σj=05Aij2i + Cj}・22j - { A6224 + A6122 + A6020}・26
= Σj=02{ Σj=05Aij2i + Cj}・22j + { /A6224 + 1・23 + /A6122 + 1・21 + /A6020 + 1・20 } ・26
(※2の補数をとるために、各ケタごとに反転していることに注意)
= Σj=02{ A5j25 + A4j24 + A3j23 + A2j22 + A1j21 + A0j20 + Cj}・22j + Σj=02{ /A6j22j・26 } + 25・22・2 + (25 + 24) 22・1
これを次のようにビットごとにならべるとわかりやすいでしょうか。

これをそのまま回路にすると、次のようになるでしょう。

最後のキャリーの吸収はRCAを使っています。

ワレスの木

並列乗算回路では、ブースのアルゴリズムを使った場合も含めて、 部分積の「和」をビットごとに求めているわけですが、 この「和」は、「全加算器という3つの数I1, I2, I3を足して、 和SとキャリーCを求める」操作、と見ることができます。

この「和」を求める操作を、何ビットかをまとめて行ってしまうと、 結果として部分積を求める全加算器の段数を減らすことができます。

何ビット分をまとめるかによって構成は変わってきますが、 3〜9ビット分について、まとめてみました。 このような回路をワレスの木 (Wallace Tree)と呼びます。 (ビット数が4以上の場合には、加算の結果が{C, S}の2ビットを超えるので、 キャリー入力CIとキャリー出力COがあることに注意) 何ビット分まとめるか、は、回路規模や演算速度などから 選択することになります。

このワレスの木を部分積の和のところに使った回路を 例として「眺めて」おくことにしましょう。 例えば四角で囲ったところに、(6入力の)ワレスの木が 使われていることがわかります。

(出典: 榎本忠義「CMOS集積回路」p.169より抜粋) ※クリックすると大きくなります

乗算器の設計例

ここまで、いろいろな乗算器の設計方法をみてきました。 最後に、3種類設計した例を並べて比較をしてみましょう。 (出典: 榎本忠義「CMOS集積回路」p.175)
乗算器A乗算器B乗算器C
構成(部分積生成)2次ブース2次ブース2次ブース
構成(部分積加算)CSAWallace木Wallace木
構成(桁上げ吸収)BCLABCLACLA
最高動作周波数[MHz]134.6156.383.2
MOSFET数(部分積生成)[個]3,3283,3283,328
MOSFET数(部分積加算)[個]3,7803,1363,136
MOSFET数(桁上げ吸収)[個]1,9901,9901,376
MOSFET数(全体)[個]9,0988,4547,840

この回の配布資料(第10回)
この回のソボクな疑問集
戻る