符号付き乗算器の話

前回は符号なしの話でしたが、Boothの良いところは、そのままで符号付きの乗算ができるところです。
たぶん、2,3を-2,-1にするのが、4の補数(?で良いの?)と相性が良いのかな?
まずは、入力の2進数を4進数と、冗長表現に変換するところまで。符号付きと符号なしだとこんな感じ。4の補数の4進数は3で符号拡張するので良いんだよね?
f0054075_10151286.png
このBoothを使って乗算します。Boothと2進が混ざってカオスですが…
f0054075_13233924.png
つまり、符号拡張さえちゃんとやれば、Boothの乗算は符号について難しい事を考えずに済みます。
これまでの話を Verilog で記述しました。Verilatorで検証することを前提に、テストベンチはC++で記述しています。32bitの符号あり、符号なしの乗算に対応しています。テストベンチは符号ありにしか対応していませんが…
Verilatorが使える環境前提ですが、
mul/ の下で make を実行すると sim/Vmul_0 が出来ます。
sim/Vmul_0 を引数なしで実行すると、ランダムで生成した入力を使った乗算を 1000 回実行します。
好きな回数で実行する場合は、引数を1個与えます。
好きな値をかけるには、引数を2個与えます。
引数は10進数ですが、結果の表示は16進数なので、バグの再現実行が面倒くさいです。
今度こそ符号拡張をさぼる手法の話をしたいと思います。

[PR]
トラックバックURL : http://tom01h.exblog.jp/tb/28149395
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。
by tom01h | 2017-09-16 22:06 | 論理設計の話 | Trackback | Comments(0)