人気ブログランキング | 話題のタグを見る

雑多な趣味の記録帳

tom01h.exblog.jp

乗算器で符号拡張をさぼる話

Boothで求めた部分積を足しこむ際に符号拡張をばぼる話です。
ここにあげた例ではデータ長が短すぎて有難さがわからないのですが、符号拡張をさぼる手法があります。名前は知りません。
まずは、今までの例ではありがたみどころか説明さえできないので、前回の符号あり乗算の例を無駄に符号拡張します。
赤字が符号拡張です。実際の乗算器では、もっとたくさん符号拡張が必要になります。
乗算器で符号拡張をさぼる話_f0054075_15224965.png
これをさぼるには…
最下位の部分積とそれ以外ではルールが違うのですが、Sを部分積の符号とすると
最下位は "~S,S,S" を上位ビットに拡張
それ以外は "1,~S" を上位ビットに拡張
上の例だと
乗算器で符号拡張をさぼる話_f0054075_15233438.png
では、最下位の部分積とそれ以外の部分積の場合で、本来の符号拡張との差を見てみます。
乗算器で符号拡張をさぼる話_f0054075_15244723.png
ここで、n-1個目の部分積までの差分の総和が{1,1,…,1,0,0}と仮定したときの n個目の部分積までの差分の総和を求めてみます。
部分積は 2bit ずれるのに注意です。
乗算器で符号拡張をさぼる話_f0054075_15253740.png
n個目の部分積までの差分の総和も{1,1,…,1,0,0}になり、最下位も同様なので、帰納法で証明されたことに… なるんだよね?
つまり、桁あふれ分だけに差が出てくるので、まぁ良いかってことです。
Verilog にするとあまり差が出ないのですが、Github を更新しました。

by tom01h | 2017-09-18 18:20 | 論理設計の話