FPGA開発日記

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

L1Dキャッシュのキャッシュライン置き換え方法再考 (4. 実装と確認)

自作CPUのL1Dキャッシュアップデートポリシ再考、実装を結構進めた。ある程度テストパタンが通るようになった。

いくつかの最適化をしている。MissUnitがL1Dへのデータ書き込みをしているタイミングと、パイプラインによるL1Dの読み直しがタイミング的に必ずぶつかってしまうのだが、その場合にはMissUnitからデータを直接読み込むようにフォワーディングパスを追加した。

MissUnitからフォワーディングをサポートすることによりパイプラインの再実行を防ぐことと、もう一つはストアバッファからの再書き込みを防ぐというものがある。

ストアバッファはストア命令によるL1Dへのデータ書き込みを行うものだが、L1Dに当該キャッシュラインが存在しなければMissUnitにお願いしてL1Dへキャッシュラインを読み込む。 MissUnitがL2からデータを取得すると、その通知を受け取ってストアバッファからL1Dへのアップデートを行うのだが、それならばMissUnitがL1Dを更新するのと同じタイミングでストアバッファからもリクエストを再送し、マージして書き込む。これによりストアバッファの解放が少しだけ速くなる。

これらの最適化を加えて、いろいろテストを動かしてriscv-testsまで動くようになった。あとは、AAPGも失敗していたパタンが動くようになった。ある程度洗練されてきたかな。