# 乗算器

## デジタル乗算器

デジタルに乗算を実行する回路で、演算装置の一種である。

デジタル乗算器を実装するには様々な技法が考えられる。 多くの技法は分割した部分の積を計算し、それを加算してまとめることで実現する。 このやり方は、小学校で習う十進整数の筆算による乗算と似ている。 しかし、乗算器ではそれを二進数で実現する。

### 符号無整数の場合の例

ここでは、例示のために8ビットの符号無整数の乗算について説明する。 乗算器の入力であるふたつの数を ${\displaystyle a[7:0]}$${\displaystyle b[7:0]}$ とし、ビット配列とみなす。 この場合、8回の 1ビット乗算で 8つの部分積を求める。${\displaystyle a}$の各ビットを${\displaystyle b}$にかける。 つまり、それは ${\displaystyle a}$ のビットを取り出して、その値に応じて ${\displaystyle 00000000}$${\displaystyle 11111111}$ のどちらかのビットパターンを作り、ビット演算論理積${\displaystyle {\mbox{AND}}}$）を実行するのと等しい。

${\displaystyle {\begin{cases}p_{0}[7:0]=a[0]\times b[7:0]=\{a[0]\}\ {\mbox{AND}}\ b[7:0]\\p_{1}[7:0]=a[1]\times b[7:0]=\{a[1]\}\ {\mbox{AND}}\ b[7:0]\\p_{2}[7:0]=a[2]\times b[7:0]=\{a[2]\}\ {\mbox{AND}}\ b[7:0]\\p_{3}[7:0]=a[3]\times b[7:0]=\{a[3]\}\ {\mbox{AND}}\ b[7:0]\\p_{4}[7:0]=a[4]\times b[7:0]=\{a[4]\}\ {\mbox{AND}}\ b[7:0]\\p_{5}[7:0]=a[5]\times b[7:0]=\{a[5]\}\ {\mbox{AND}}\ b[7:0]\\p_{6}[7:0]=a[6]\times b[7:0]=\{a[6]\}\ {\mbox{AND}}\ b[7:0]\\p_{7}[7:0]=a[7]\times b[7:0]=\{a[7]\}\ {\mbox{AND}}\ b[7:0]\end{cases}}}$

 ${\displaystyle p_{0}[7]}$ ${\displaystyle p_{0}[6]}$ ${\displaystyle p_{0}[5]}$ ${\displaystyle p_{0}[4]}$ ${\displaystyle p_{0}[3]}$ ${\displaystyle p_{0}[2]}$ ${\displaystyle p_{0}[1]}$ ${\displaystyle p_{0}[0]}$ ${\displaystyle +}$ ${\displaystyle p_{1}[7]}$ ${\displaystyle p_{1}[6]}$ ${\displaystyle p_{1}[5]}$ ${\displaystyle p_{1}[4]}$ ${\displaystyle p_{1}[3]}$ ${\displaystyle p_{1}[2]}$ ${\displaystyle p_{1}[1]}$ ${\displaystyle p_{1}[0]}$ ${\displaystyle 0}$ ${\displaystyle +}$ ${\displaystyle p_{2}[7]}$ ${\displaystyle p_{2}[6]}$ ${\displaystyle p_{2}[5]}$ ${\displaystyle p_{2}[4]}$ ${\displaystyle p_{2}[3]}$ ${\displaystyle p_{2}[2]}$ ${\displaystyle p_{2}[1]}$ ${\displaystyle p_{2}[0]}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle +}$ ${\displaystyle p_{3}[7]}$ ${\displaystyle p_{3}[6]}$ ${\displaystyle p_{3}[5]}$ ${\displaystyle p_{3}[4]}$ ${\displaystyle p_{3}[3]}$ ${\displaystyle p_{3}[2]}$ ${\displaystyle p_{3}[1]}$ ${\displaystyle p_{3}[0]}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle +}$ ${\displaystyle p_{4}[7]}$ ${\displaystyle p_{4}[6]}$ ${\displaystyle p_{4}[5]}$ ${\displaystyle p_{4}[4]}$ ${\displaystyle p_{4}[3]}$ ${\displaystyle p_{4}[2]}$ ${\displaystyle p_{4}[1]}$ ${\displaystyle p_{4}[0]}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle +}$ ${\displaystyle p_{5}[7]}$ ${\displaystyle p_{5}[6]}$ ${\displaystyle p_{5}[5]}$ ${\displaystyle p_{5}[4]}$ ${\displaystyle p_{5}[3]}$ ${\displaystyle p_{5}[2]}$ ${\displaystyle p_{5}[1]}$ ${\displaystyle p_{5}[0]}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle +}$ ${\displaystyle p_{6}[7]}$ ${\displaystyle p_{6}[6]}$ ${\displaystyle p_{6}[5]}$ ${\displaystyle p_{6}[4]}$ ${\displaystyle p_{6}[3]}$ ${\displaystyle p_{6}[2]}$ ${\displaystyle p_{6}[1]}$ ${\displaystyle p_{6}[0]}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle +}$ ${\displaystyle p_{7}[7]}$ ${\displaystyle p_{7}[6]}$ ${\displaystyle p_{7}[5]}$ ${\displaystyle p_{7}[4]}$ ${\displaystyle p_{7}[3]}$ ${\displaystyle p_{7}[2]}$ ${\displaystyle p_{7}[1]}$ ${\displaystyle p_{7}[0]}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle P[15]}$ ${\displaystyle P[14]}$ ${\displaystyle P[13]}$ ${\displaystyle P[12]}$ ${\displaystyle P[11]}$ ${\displaystyle P[10]}$ ${\displaystyle P[9]}$ ${\displaystyle P[8]}$ ${\displaystyle P[7]}$ ${\displaystyle P[6]}$ ${\displaystyle P[5]}$ ${\displaystyle P[4]}$ ${\displaystyle P[3]}$ ${\displaystyle P[2]}$ ${\displaystyle P[1]}$ ${\displaystyle P[0]}$

### 符号付整数の場合

${\displaystyle b}$ が符号付整数だった場合、部分積を符号拡張した上で足し合わせる必要がある。${\displaystyle a}$ が符号付整数だった場合、部分積の ${\displaystyle p[7]}$ を足すのではなく、それ以外の合計から引かなければならない。

 ${\displaystyle 1}$ ${\displaystyle -p_{0}[7]}$ ${\displaystyle +p_{0}[6]}$ ${\displaystyle +p_{0}[5]}$ ${\displaystyle +p_{0}[4]}$ ${\displaystyle +p_{0}[3]}$ ${\displaystyle +p_{0}[2]}$ ${\displaystyle +p_{0}[1]}$ ${\displaystyle +p_{0}[0]}$ ${\displaystyle -p_{1}[7]}$ ${\displaystyle +p_{1}[6]}$ ${\displaystyle +p_{1}[5]}$ ${\displaystyle +p_{1}[4]}$ ${\displaystyle +p_{1}[3]}$ ${\displaystyle +p_{1}[2]}$ ${\displaystyle +p_{1}[1]}$ ${\displaystyle +p_{1}[0]}$ ${\displaystyle 0}$ ${\displaystyle -p_{2}[7]}$ ${\displaystyle +p_{2}[6]}$ ${\displaystyle +p_{2}[5]}$ ${\displaystyle +p_{2}[4]}$ ${\displaystyle +p_{2}[3]}$ ${\displaystyle +p_{2}[2]}$ ${\displaystyle +p_{2}[1]}$ ${\displaystyle +p_{2}[0]}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle -p_{3}[7]}$ ${\displaystyle +p_{3}[6]}$ ${\displaystyle +p_{3}[5]}$ ${\displaystyle +p_{3}[4]}$ ${\displaystyle +p_{3}[3]}$ ${\displaystyle +p_{3}[2]}$ ${\displaystyle +p_{3}[1]}$ ${\displaystyle +p_{3}[0]}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle -p_{4}[7]}$ ${\displaystyle +p_{4}[6]}$ ${\displaystyle +p_{4}[5]}$ ${\displaystyle +p_{4}[4]}$ ${\displaystyle +p_{4}[3]}$ ${\displaystyle +p_{4}[2]}$ ${\displaystyle +p_{4}[1]}$ ${\displaystyle +p_{4}[0]}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle -p_{5}[7]}$ ${\displaystyle +p_{5}[6]}$ ${\displaystyle +p_{5}[5]}$ ${\displaystyle +p_{5}[4]}$ ${\displaystyle +p_{5}[3]}$ ${\displaystyle +p_{5}[2]}$ ${\displaystyle +p_{5}[1]}$ ${\displaystyle +p_{5}[0]}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle -p_{6}[7]}$ ${\displaystyle +p_{6}[6]}$ ${\displaystyle +p_{6}[5]}$ ${\displaystyle +p_{6}[4]}$ ${\displaystyle +p_{6}[3]}$ ${\displaystyle +p_{6}[2]}$ ${\displaystyle +p_{6}[1]}$ ${\displaystyle +p_{6}[0]}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 1}$ ${\displaystyle +p_{7}[7]}$ ${\displaystyle -p_{7}[6]}$ ${\displaystyle -p_{7}[5]}$ ${\displaystyle -p_{7}[4]}$ ${\displaystyle -p_{7}[3]}$ ${\displaystyle -p_{7}[2]}$ ${\displaystyle -p_{7}[1]}$ ${\displaystyle -p_{7}[0]}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle 0}$ ${\displaystyle P[15]}$ ${\displaystyle P[14]}$ ${\displaystyle P[13]}$ ${\displaystyle P[12]}$ ${\displaystyle P[11]}$ ${\displaystyle P[10]}$ ${\displaystyle P[9]}$ ${\displaystyle P[8]}$ ${\displaystyle P[7]}$ ${\displaystyle P[6]}$ ${\displaystyle P[5]}$ ${\displaystyle P[4]}$ ${\displaystyle P[3]}$ ${\displaystyle P[2]}$ ${\displaystyle P[1]}$ ${\displaystyle P[0]}$

なお、乗数も被乗数も負の場合算術オーバーフローが発生するが、無視すればよい。

## アナログ乗算器

トランジスタによる乗算回路 [1]

アナログに乗算を実行する回路で、周波数帯域の変換等に用いられる。 一般的な実装方法は ${\displaystyle AB=\mathrm {e} ^{\log {}A+\log {}B}}$ という等式を利用するものである[2]。 基本的な原理は次のものである。

1. バイポーラトランジスタ${\displaystyle V_{BE}\propto \log {}I_{C}}$ となることを利用して、入力信号の対数を得る。
2. オペアンプで加算する。
3. 1と同様に ${\displaystyle I_{C}\propto {\mbox{e}}^{V_{BE}}}$ を利用して2.で得た和の指数を取る(これが2数の積)。

（ただし、アナログ回路なので実際には各ステップは、ほぼ瞬時に進む。）

2の部分を減算に変更すれば、同様の原理で除算も可能。

## 参照

 [ヘルプ]
1. ^ 小島 & 高田, p. 154.
2. ^ 柴田 2004, p. 223.