自作RISC-Vアウトオブオーダコアの実装、FPUを実装している。次はいよいよ除算器の組み込みだ。 浮動小数点除算器は一から作る訳では無く、例によってFPNewから拝借してくる。
これを組み込んでいく。どうも仕様を見ていると32ビットと64ビットを1モジュールで対応できるような感じがするのだが、そこまでは気が付かなかった。後でちょっと変更してみよう。
どうもこのFpFmtConfigが許容できる浮動小数点データサイズを決めているようで、今回は5'b10000 (単精度浮動小数点)を指定しているが、5'b11000(単精度浮動小数点と倍精度浮動小数点)に変更して命令によって切り替える方が上手く制御できそうな気がしている。
fpnew_divsqrt_multi
#(
.FpFmtConfig (5'b10000 ),
.NumPipeRegs (32/2 ),
.PipeConfig (fpnew_pkg::BEFORE),
.TagType (aux_fpnew_t ),
.AuxType (logic )
)
fdiv_32
(
.clk_i (i_clk ),
.rst_ni (i_reset_n),
// Input signals
...
// Indication of valid data in flight
.busy_o ( ) // output logic
);
とりあえずこれらの実装を組み込んでriscv-testsの乗算命令のテストでPASSまで確認できた。 ただしもう少しこのモジュール自体は最適化できそうなのと、FDIVのみレイテンシを長くとっているので、他の演算器とのパイプラインがぶつかった時のことを考慮しておく必要がありそうだ。