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

雑多な趣味の記録帳

tom01h.exblog.jp

FPU 拡張を追加したい (構想・パイプライン)

V-scale chip がまだまともに動いていませんが、FPU を追加したくなってきました。資源は前回作り直した mul_div モジュールと出来る限り共有したいと思っています。↓みたいな感じで出来たら良いな。最初は全くパイプライン化するつもりはなかったのですが、後述の理由から、今は FR ステージはパイプライン化するのが良いかと考えています。MUL はちゃんと書いてませんが、整数乗算と同じような感じで FM ステージをくるくる回ります。FM ステージと FA ステージは同じ資源を共有してパイプライン化しません。
FPU 拡張を追加したい (構想・パイプライン)_f0054075_18112592.png
FR ステージをパイプライン化するのは、”FPU レジスタが CPU レジスタと独立している”ことと、”RISC-V アーキテクチャは FPU 例外を発生しない”ことが理由です。つまり、FPU は CPU からどれだけ遅れても構わないのです。
まずは、整数乗算パイプの確認。乗算器を新規設計したことで、演算自体は5サイクルになりました。ただ、演算の最後のステージ(M1)でレジスタへの書き戻しをしないので、追加でライトバックステージが必要になります。next 命令のライトバックステージと重ならないためには 5 サイクルストールを必要とします。
FPU 拡張を追加したい (構想・パイプライン)_f0054075_18230935.png
この延長で FPU を考えると、FADD ですら 3サイクルピッチで嫌だなぁと思っていたのですが、FPU は別にレジスタを持っていることに気付きました。ついでに 32bit インクリメンタくらい独自の資源持っても良いかと思って、FR ステージもパイプライン化しようかと思ったのが↓です。FR ステージの最後でレジスタに書き戻しちゃうつもりです。バイパスを付ける余裕はなさそうですね。FR と WB は同時に実行しても資源の衝突はありません。
FPU 拡張を追加したい (構想・パイプライン)_f0054075_18291105.png
FMUL と FMADD も載せておきます。ちなみに FPU の仮数は整数よりも短いので、4サイクルで乗算が出来ることを期待しています。
FPU 拡張を追加したい (構想・パイプライン)_f0054075_18315346.png
あ、ストールするのは F じゃなくて EX だ。いや、正しくは DX だ。
こんな感じで出来たら良いなと思っていますが、正直どこから手を付けたものか悩んでいます。

by tom01h | 2017-01-18 23:02