FPGA開発日記

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

自作RISC-V OoOコアの分岐予測性能解析 (RASのデバッグ)

f:id:msyksphinz:20211004232850p:plain

ちまちまと自作RISC-Vコアを実装している。RASの検討をしたので実装を行っている。

問題となるのはBIMとの共用だ。BIMの方がキャッシュライン上の前のビット列でヒットすればそちらを採用し、RASの方がヒットすればそちらを採用する。

基本的な流れはこうだ。CALL系命令(JAL命令、JALR命令の特定の形)をキャッシュライン中で発見すると、その次のアドレスをRAS上に保存する。 さらに命令を進めて言ったうえでRET命令(JALR命令の特定の形)にを見つけると、RASのインデックスから当該アドレスを引っ張ってきて次の命令フェッチアドレスとする。

この形でとりあえず最初のCALLとRET命令は分岐予測ができるようになったが、まだDhrystoneを全部PASSさせることが出来ていない。引き続きデバッグする。

とりあえずデバッグのためにDhrystoneの中からCALLとRETのペアを引き出してみる。

12966 : 72 : PC=[0000000080002842] (26,02) f49ff0ef jal     pc - 0xb8
13186 : 79 : PC=[00000000800027b0] (31,01) 00008082 ret
13206 : 85 : PC=[0000000080002858] (33,02) f75ff0ef jal     pc - 0x8c
14262 : 417 : PC=[00000000800027ea] (26,01) 00008082 ret
14338 : 420 : PC=[0000000080002860] (30,01) e71ff0ef jal     pc - 0x190
14510 : 422 : PC=[00000000800026d4] (38,01) 00008082 ret
14558 : 425 : PC=[0000000080002868] (42,04) 12c000ef jal     pc + 0x12c
15030 : 493 : PC=[0000000080002a68] (63,04) ec8ff0ef jal     pc - 0x938
15194 : 503 : PC=[0000000080002142] (03,02) 00008082 ret

なるほど、現在問題になっているのは2番目のJALとRETのペアが正しくRASで予測できていないことだが、これは別の部分でCALL命令を正しく認識できていないらしい。デバッグする。