« FPGAで非同期のクロックを扱う方法 | Main | FPGAのリセット回路 »

2008.03.22

FPGAで作るMath Function

Advanced FPGA Design: Architecture, Implementation, and Optimizationに載っている方法。

整数以外の演算は仕事で使わないので縁がないが、次勉強するときのヒントにはなった。

割り算
(1)Multiply and Shift
2のべき乗で割れるように近似する。
7で割る場合、512/73=7.014を利用して73倍して512で割れば、近い値が得られる。512で割るところは9bitの右シフトなので簡単に計算できる。
乱暴な気がするが、割り算が定数の時有効。

(2)Iterative Division
筆算と同じで、何度も引く。
高速化したBoothのアルゴリズムが知りたい人はパタヘネ読もう。

(3)The Goldschmidt Method
少しずつ計算をしていって近いところを探しに行く。割り算を実行するのではなく、逆数を近似して乗算で近づけていく。順番に計算するのでパイプラインと相性が良い。浮動小数点向けの近似法。

近似のアルゴリズム
(4)TAYLOR AND MACLAURIN SERIES
級数展開して近似する。複雑な式を乗算器と加算器の組み合わせに落とすことができる。

(5)THE CORDIC ALGORITHM
Coordinate rotation digital computer の略。
有名な方法らしいが、一読では理解できなかった。後で勉強する。

この本の弱点は、参考文献が弱いこと。もう少し詳しく知りたくなったときに、章毎に参考文献が欲しい。

|

« FPGAで非同期のクロックを扱う方法 | Main | FPGAのリセット回路 »

Comments

間違えた。Boothのアルゴリズムは乗算ですね。
http://ja.wikipedia.org/wiki/ブースの乗算アルゴリズム

バイナリな演算としては、面白い部類に入るのでおすすめ。
僕もちゃんと勉強しよう。

Posted by: なつたん | 2008.03.23 at 11:44 PM

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/18154/40599171

Listed below are links to weblogs that reference FPGAで作るMath Function:

« FPGAで非同期のクロックを扱う方法 | Main | FPGAのリセット回路 »