以上で、負の部分積も、あまり多くのカウンタエレメントを追加することなく効率よく扱えるようになり、高速乗算器の話はほぼ終わりであるが、各桁の"1"の数を数える方式について補足しておきたい。
これまでに述べたカウンタエレメントは、3つの入力の"1"の個数を数えてサムとキャリーの2ビットで出力するものであったが、4入力を2出力にする4-2コンプレッサー(Compressor)というエレメントがある。4入力であるので、入力の"1"の個数は最大4個で、原理的に2ビットでは表現できず、名前は4-2コンプレッサーであるが、実は次の図に示すように下位の桁からのキャリーインと、上位の桁へのキャリーアウトを持っており、5入力3出力のエレメントである。
4-2 Compressorの構成 |
この4-2コンプレッサーの巧妙なところは、下位の桁からのキャリーインはその桁のサムとキャリーには影響するがキャリーアウトには影響せず、上位の桁の計算に影響しない点である。従って、多数の部分積の各桁の合計を求める場合に、次の図のような構成にすることが出来る。
4-2 Compressorを用いた16入力の部分積加算回路 |
3-2カウンタ1個で、出力数が入力数より1つ減るというのは変らないので、3-2カウンタを2個用いた4-2コンプレッサーを用いても回路量は変らないが、4-2コンプレッサーを用いると、この図のようにバイナリーツリー接続で加算回路が構成できるので、回路構成が規則的になり、チップ上での配置がやり易いというメリットがある。また、前の図では、4-2コンプレッサーの回路を2個の3-2カウンタで表現したが、次の図のように回路を最適化すれば物量が減りメリットが大きくなる。
論理回路を最適化した4-2 Compressor |
しかし、4-2コンプレッサーのバイナリツリーで実現できる加算回路の部分積の入力数は2のベキとなるので、部分積の数によっては使用されない入力が出て無駄になってしまう。このため、実際の乗算器では、必要に応じて、3-2カウンタと4-2コンプレッサーを適当にミックスして使うことが多い。
以上で、乗算器の設計はお仕舞いで、次は割り算器に移ろう。