FPGA開発日記

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

SonicBOOMに関する調査 (4. BranchTagの構成)

BOOMにはBranch Tag(brtag)というのが採用されており、これが一般的なのかは分からないが、どういう機構で動いているのか調査することにした。

Branch Tagはその名の通り分岐命令に対して付与されるタグで、このタグに応じてRenameMapのスナップショットが取られ、分岐予測に失敗した場合にはそのスナップショットから即時リネームIDが復帰される仕組みになっている。

The Rename Stage — RISCV-BOOM documentation

On every branch (or JALR), the Rename Map Tables are snapshotted to allow single-cycle recovery on a branch misprediction.

その様子を観察する。まずはDhrystoneを動かした。RenameMap中にスナップショットを保持するためのFFが確保されている。分岐命令がデコードされると、新たにBranchTagが割り当てられ、その時の最新のRenameMapの値がスナップショットされる。

f:id:msyksphinz:20210608003552p:plain

実際に分岐命令の実行を行い、その結果が予想と異なる場合、分岐予測が外れたことになる。これはRenameMapに即時伝えられ、すぐさまRenameMapがスナップショットに基づいて元に戻される。

f:id:msyksphinz:20210608003607p:plain

つまり、これだけ早くリスタートができるということになるのか?これがフェッチ側にどのように影響しているのか引き続き調査する。

f:id:msyksphinz:20210608003634p:plain