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

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

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