FPGA開発日記

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

自作RISC-V CPUコア実装(テストパタンデバッグ)

自作CPUのデバッグをチマチマ進めている。 TLBの問題についてはとりあえず置いておいて、テストパタンを動かしながら問題点を洗い出している。 とりあえず環境等の問題を洗い出して、基本的なケースは動くようなところまで直していった。 RV32のテストケースについては、動くようになったかな?細かいケースの問題は直していないし、RASのパフォーマンスバグについてはまだ見ていない。まだ調整が必要だなあ。

riscv-isa-sim側のトレースの問題で、いろいろ突っかかるときがあった。 Spikeはstep()を実行すると1命令を実行するのが基本なのだが、時々そうでないときがある。特に例外を処理するときは例外を処理するだけで命令が進まないときがあって、そうするとRTL側との命令実行数が合わなくなってしまい、テストケースが失敗してしまう。

色々チェックして、どうやってSpikeの挙動とRTLの挙動を合わせようかと検討していたのだが、最終的にはSpikeのminstretを使うことにした。 minstretのカウンタが、step()実行後に前回のカウンタと変わっていなければもう一度実行するように変更した。これで結構いろんなパタンが通るようになった。 こんな感じ。

  p->step(1);

  auto instret  = p->get_state()->minstret;
  static reg_t prev_instret = 1;
  if (prev_instret == instret) {
    p->step(1);
  }
  prev_instret = instret;
rv32_tiny.log:PASS / TOTAL = 84 / 109
rv32_small.log:PASS / TOTAL = 68 / 109
rv32_standard.log:PASS / TOTAL = 70 / 109
rv32_big.log:PASS / TOTAL = 0 / 109
rv32_giant.log:PASS / TOTAL = 0 / 109

コアの構成を大きくしていくとやっぱりまだ動かない。デバッグ必要!

f:id:msyksphinz:20220103010108p:plain