現在の自作CPUは、結構面積が大きくて通常のFPGAに乗り切らない。どうにか乗り切れるように、面積削減を検討している。 LSUの中で圧倒的に面積が巨大なのがSTQだ。STQが巨大な要因はいくつかある。
- LDQと異なり、各エントリはアドレスとデータの両方を管理する必要がある。
- ロード命令のフォワーディングをサポートする必要がある。この時、バイト単位での細かいフォワーディングをサポートすると、論理が増大する。
- ストアバッファへデータを移動する論理が必要である。データ移動時に、同じキャッシュラインへのマージ機能をサポートすると、論理が増大する。
それぞれについて対策を考える。
- アドレスの管理はどうしてもCAMになる必要がある。データの管理は、Distributed RAMに移動したい。
- フォワーディングを簡易化し、特定の条件でなければフォワーディングをサポートしない。複数エントリにヒットしてバイト単位でマージする必要がある場合などは、フォワーディングをキャンセルする。
- これにより、常にフォワーディングに必要なデータエントリを1つに限定し、Distributed RAMを使いたい。
ストアバッファへのデータの移動時のマージ量を減らす。
が一番やりやすい。一度にマージできるSTQエントリの量をパラメタライズしておいたので、パラメータの量を減らした。 この部分の論理で重たいのは、各バイトにおいてデータ転送すべきデータを正確にセレクトすることだ。 STQエントリのマージできるサイズを減らすことで、この部分の論理を減らすことができる。
幸い、このパラメータの削減による性能への影響もわずかだった。面積もある程度減らせるし、引き続きこの方針でSTQの削減を続けていこう。