符号ビット付き2進数の乗算器とは、2つの符号ビット付き2進数を掛け合わせる乗算器のことです。
符号ビット付き2進数の乗算器は、例えば、符号拡張を用いた符号ビット付き2進数の掛け算の計算量を減らす方法を論理回路に落とし込むことで実現できます。
符号拡張を用いた符号ビット付き2進数の掛け算の計算量を減らす方法より、4ビットの符号ビット付き2進数a_[[3]]a_[[2]]a_[[1]]a_[[0]]とb_[[3]]b_[[2]]b_[[1]]b_[[0]]の掛け算は、以下の計算で求められます。なお、ビットNOTは、~で表すこととします。
a_[[3]]a_[[2]]a_[[1]]a_[[0]]×b_[[3]]b_[[2]]b_[[1]]b_[[0]]=(~(a_[[3]]×b_[[0]])×1000+a_[[2]]a_[[1]]a_[[0]]×b_[[0]])+(~(a_[[3]]×b_[[1]])×1000+a_[[2]]a_[[1]]a_[[0]]×b_[[1]])×10+(~(a_[[3]]×b_[[2]])×1000+a_[[2]]a_[[1]]a_[[0]]×b_[[2]])×100+((a_[[3]]×b_[[3]])×1000+~(a_[[2]]a_[[1]]a_[[0]]×b_[[3]]))×1000+10010000
~(a_[[3]]×b_[[0]])×1000+a_[[2]]a_[[1]]a_[[0]]×b_[[0]]は、以下の論理回路で表せます。
同様に、~(a_[[3]]×b_[[1]])×1000+a_[[2]]a_[[1]]a_[[0]]×b_[[1]]、~(a_[[3]]×b_[[2]])×1000+a_[[2]]a_[[1]]a_[[0]]×b_[[2]]も以下の論理回路で表せます。
(a_[[3]]×b_[[3]])×1000+~(a_[[2]]a_[[1]]a_[[0]]×b_[[3]])は、以下の論理回路で表せます。
上記の論理回路の出力を使うと、先ほどの計算は、以下のように書き換えられます。
=c_[[3]]c_[[2]]c_[[1]]c_[[0]]+(d_[[3]]d_[[2]]d_[[1]]d_[[0]]×10)+(e_[[3]]e_[[2]]e_[[1]]e_[[0]]×100)+( f_[[3]] f_[[2]] f_[[1]] f_[[0]]×1000)+10010000
上記の計算は、4ビットと5ビットの加算器を使って、以下のように表せます。
符号ビット付き2進数の乗算器を作れました。