CORDIC も作ってみた

ついでに CORDIC も作ってみました。でもV-scale には FPU が付いていないので、仮に追加するとしてもかなり先のことになると思います。
CORDIC で sin, cos, atan2 を計算します。CORDIC のアルゴリズムに興味があれば、適当にググってください。RTL の実装ですが、CORDIC の部分自体は簡単でした。ただ、前処理、後処理がたくさん必要になりそうです。
sin, cos の CORDIC への入力は 0~PI/2 です。それ以外の場合は前後に処理が必要です。まあ前処理でも、-PI~PI ぐらいしか対応しないでしょうね。それ以外は Invalid にするのが妥当かと思います。
atan2 の CORDIC への入力は x>=0, y>=0 で、アラインして入力する必要があります。後処理は以下。なぜ +PI なのかは理解していない。
if(x<0){r=-r+M_PI;}
if(y<0){r=-r;}
前処理、後処理と、入力データ生成部分、期待値生成と比較を c で書いています。atan の苦労は9割がたはテストベンチ側にありました。でも、こんな設計には Verilator がとっても役に立ちますね。結果は ここ に追加して置いておきます。mul_div とはまだ混ぜません。
ちなみに ここの Mixing C and assembler なんかを見ると、コンパイラに命令追加できなくても C 言語から追加命令が呼べそうな気がします。

[PR]
トラックバックURL : http://tom01h.exblog.jp/tb/27434635
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。
by tom01h | 2017-01-10 23:07 | PCとか | Trackback | Comments(0)