FPGA開発日記

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

自作CPUコアのアトミックアクセス系と面倒なLSU周りの解析 (2. MSHRのデータ掃き出しとスヌープのタイミングの調整)

自作CPUコアでランダムテストを回していて、いろいろ面倒な解析をしなければならなかった部分のメモ。

L2キャッシュがコアに対してスヌープリクエストを出した場合、これを確実に受け取る方法について。 一番安心なのは、スヌープリクエストがコアに到着するとLSUに関連するすべての動作を止めてしまい、確実に各モジュールから情報を吸い出すことができるようにすること。 しかしこうすると結構性能的にも影響が出るのでもう少し何とかしたい。

問題となるのは、例えばL1Dに対して誰かが書き込み要求を行い、その反動で掃き出しのためのデータが戻ってきたものとする。 この掃き出しデータと全く同じデータをL2側からスヌープしようとしている場合、タイミングによっては: - L1Dを検索してももう出てこない - MSHRが掃き出しデータを取得後、即時コア外に掃き出し操作を始めている場合、スヌープがデータを取り逃す

という状況が発生しうる。とにかくこの問題を安全に回避するためには、L1Dに対してMSHRが書き込みを行っている場合、スヌープ信号はMSHRの信号を監視し続け、掃き出しデータが現れたらそれを横取りする。 MSHRは横取りされたデータはコア外に戻す必要はないので、スヌープポートからデータを安全に戻すことに集中すればよい。

つまり、MSHRへのスヌープは、コアへの書き込みが行われているときは長期的に観測する必要があるというわけだ。