FPGA開発日記

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

自作CPUの回路面積削減検討 (命令発行条件の緩和検討)

自作CPUのいくつかの面積最適化を行っていたら、またバグが出てきた。今度はデッドロック系だ。 問題は、LSUの命令発行キューに対してリプレイキューが小さく設計してあることにある。 例えば、リプレイキューのエントリ数がNであり、リプレイキューまでのパイプライン段数がAだとすると、リプレイキューがN-Aエントリまで埋まったとすると、それ以上命令を発行することはできない。 この時にデッドロックの可能性が浮上する。より古い命令が実行しようにも、命令キューからの発行を止められてしまう可能性があるということだ。

しかし、この問題は冷静に考えてみると、例えばコア内で最も古い命令はリプレイキューに入る可能性は低く、またどっちにしろ最も古い命令を1命令だけ発行したところでリプレイキューはN-(N-A)=Aエントリ余っているのだから、実行してしまって問題ない。

この観点から、命令例発行キューの発行条件を若干緩和し、コア内で最も古い命令は待ち合わせをすることなく優先的かつリプレイキューの条件を見ないで発行できるように変更した。 これにより、AAPGなどの非常に複雑なランダムテストでも全くデッドロックすることなく流れるようになった。