FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

SFENCE.VMAの実行に関する検討

SFENCE.VMAの実装に関してちょっと詰まったのでメモ。 これまでSFENCE.VMAは単なるCSR命令として、In-orderに実行するようにしていたのだが、実際にはストア命令の操作が完了するまで待たなければならない。

3509 : 1325 : PC=[00000000ffc0245c] (M,46,01) 0065a023 sw      t1, 0(a1)
3509 : 1326 : PC=[00000000ffc02460] (M,46,02) 12050073 sfence.vma a0, zero

この2つの命令は同じグループで実行されるため、SFENCE.VMAがコミットされた後にSW命令がデータをL1Dに書き込むことになる。 もしL1Dへの書き込みが遅れると、後続の命令がPTWへのアクセスをした場合のページテーブルの参照が誤ってしまう。

これを防ぐためには、SFENCE.VMAは必ず単体で実行されるように制約を変更し、SW命令がST-Bufferから離れて完全にEmptyになるまで待つように制御を追加しなければならないらしい。