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

雑多な趣味の記録帳

tom01h.exblog.jp

V-scale に FPU 転送命令を組み込む

演算器のモデルを作成中ですが、パイプラインへ追加する方法の調査を兼ねて、転送命令を追加してみようと思います。命令では FLW, FSW, FMV, FSGNJ の 4命令で、 tests で言うと次の3個です。
  • rv32uf-p-ldst
  • rv32uf-p-move
  • rv32uf-p-sgnj
はじめは FSGNJ(サインインジェクション)は後で良いと思ったけど、普通のレジスタ間転送はこの命令を使う模様です。で、普通のレジスタ間の転送命令が目に付かなかったせいで FPU にバイパスは不要と思っていたのですが、やっぱり必要だと思い知らされました。そりゃまぁそうですよね。でもとりあえず、バイパスは保留にしておきます。
まず、F Register と fcsr を追加、MISAを変更します。整数側のロードストアを見よう見まねで FLW,FSW を作ります。ここで rv32mi-p-csr が落ちました。mstatus.FS が Off(00) の時の FPU命令は不当命令になるらしいです。数日前に命令ログの出し方を覚えた spike が早くも役に立ちました。
FMV(整数レジスタとの転送)も似たような実装で動くのですが、rv32uf-p-move は FSGNJ も動かないと通らないみたいです。そんなわけで数行前の考えに至った次第です。
して、rv32uf-p-sgnj もついでに通しておこうと思ったのですが、今度はあまりちゃんと定義の無い fsflags なんて命令が出てきました。これって、CSR のアドレス 0 の fcsr.flag のエリアスに対する csrs 命令ってことで良いのかな?
mstatus.FS とか fpsr の更新の事はまだ考えていないですが、ここまでやって 3個の tests が通りました。と言っても、FS 更新していないから本当はダメなんですけどね。

by tom01h | 2017-01-28 00:27