乗算器

乗算器（じょうざんき）とは、二つの数について乗算を行うための電子回路であり、#デジタル乗算器と#アナログ乗算器がある。
デジタル乗算器.
デジタルに乗算を実行する回路で、演算装置の一種である。
デジタル乗算器を実装するには様々な技法が考えられる。
多くの技法は分割した部分の積を計算し、それを加算してまとめることで実現する。
このやり方は、小学校で習う十進整数の筆算による乗算と似ている。
しかし、乗算器ではそれを二進数で実現する。
符号無整数の場合の例.
ここでは、例示のために8ビットの符号無整数の乗算について説明する。
乗算器の入力であるふたつの数を formula_1 と formula_2 とし、ビット配列とみなす。
この場合、8回の 1ビット乗算で 8つの部分積を求める。formula_3の各ビットをformula_4にかける。
つまり、それは formula_3 のビットを取り出して、その値に応じて formula_6 か formula_7 のどちらかのビットパターンを作り、ビット演算で論理積（formula_8）を実行するのと等しい。
formula_9
次に最終的な積を求めるため、部分積を以下のように足し合わせる。
別の言い方をすると、formula_10 は formula_11 ＋ formula_12の1ビット左シフト ＋ formula_13の2ビット左シフト ＋ … ＋ formula_14の15ビット左シフトに等しく、最終的に 符号なしの16ビットの積が求められる。
符号付整数の場合.
formula_4 が符号付整数だった場合、部分積を符号拡張した上で足し合わせる必要がある。formula_3 が符号付整数だった場合、部分積の formula_17 を足すのではなく、それ以外の合計から引かなければならない。
上で説明した乗算器を2の補数による符号付整数を扱えるように修正するには、足し合わせる際に以下のように一部の項を逆転させ、かつ formula_18 と formula_19 の左端に formula_20 を補う。ここで負号（formula_21）の意味に注意されたい。これは符号の反転ではなく、ビットの反転である。各部分積 formula_22 の最上位ビットが反転されているのは、符号拡張を省くためである。formula_19 が逆に最上位以外のビットが反転されているのは、減算を加算で表すためである。これは2の補数の性質を巧妙に利用したものである。
なお、乗数も被乗数も負の場合算術オーバーフローが発生するが、無視すればよい。
実装.
古い乗算器アーキテクチャでは、シフターとアキュムレータを使って部分積を足し合わせる必要があった。また、部分積ひとつを計算するのに 1クロックサイクルを要した。最近の乗算器アーキテクチャは、Baugh–Wooley algorithm、ウォレス木、等を使用して、1クロックサイクルで部分積をすべて加算する。ウォレス木型乗算器の性能は、被乗数の一方にブースの乗算アルゴリズムを施して加算すべき部分積の数を減らすことで、さらに向上させることが出来る。
アナログ乗算器.
アナログに乗算を実行する回路で、周波数帯域の変換等に用いられる。
一般的な実装方法は formula_24 という等式を利用するものである。
基本的な原理は次のものである。
（ただし、アナログ回路なので実際には各ステップは、ほぼ瞬時に進む。）
2の部分を減算に変更すれば、同様の原理で除算も可能。