AAPGはランダムテストケースなので、これまでのriscv-testsのようにお行儀のよい実行順序を守ってくれない。 いくつかのケースでパイプラインの修正を行う必要が生じてきた。例えばALUのパイプライン上で可変レイテンシ長で動くようなケース。 MUL命令やDIV命令など。これまではMUL命令とDIV命令の書き込みポートがぶつかることを考慮していなかったが、ランダムテストでこのような状態が発見されたので修正する必要がある。
自作CPUではMUL命令はパイプラインで、DIV命令はシーケンシャルに動くように設計してある。書き込みタイミングがぶつかったときにMUL命令側のパイプラインを止めるのはちょっと厳しいので、DIV側にStall信号をAssertして書き込みを1サイクル待ってもらうようにする(そもそもDIV命令が動作しているときは、いつ計算が完了するか分からないのでパイプラインに新しい命令を挿入しないようにしている)。
これで当該命令のテストケースはPassするようになったが、まだまだ修正すべきテストはかなりある。 主にストアからのロード命令のフォワーディングに若干不具合があるような気がしている。これもデバッグしていく必要がありそうだ。