FPGA開発日記

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

自作CPUの回路面積削減検討 (STQの面積削減検討)

現在の自作CPUは、結構面積が大きくて通常のFPGAに乗り切らない。どうにか乗り切れるように、面積削減を検討している。 LSUの中で圧倒的に面積が巨大なのがSTQだ。STQが巨大な要因はいくつかある。

  • LDQと異なり、各エントリはアドレスとデータの両方を管理する必要がある。
  • ロード命令のフォワーディングをサポートする必要がある。この時、バイト単位での細かいフォワーディングをサポートすると、論理が増大する。
  • ストアバッファへデータを移動する論理が必要である。データ移動時に、同じキャッシュラインへのマージ機能をサポートすると、論理が増大する。

それぞれについて対策を考える。

  1. アドレスの管理はどうしてもCAMになる必要がある。データの管理は、Distributed RAMに移動したい。
  2. フォワーディングを簡易化し、特定の条件でなければフォワーディングをサポートしない。複数エントリにヒットしてバイト単位でマージする必要がある場合などは、フォワーディングをキャンセルする。
  3. これにより、常にフォワーディングに必要なデータエントリを1つに限定し、Distributed RAMを使いたい。
  4. ストアバッファへのデータの移動時のマージ量を減らす。

  5. が一番やりやすい。一度にマージできるSTQエントリの量をパラメタライズしておいたので、パラメータの量を減らした。 この部分の論理で重たいのは、各バイトにおいてデータ転送すべきデータを正確にセレクトすることだ。 STQエントリのマージできるサイズを減らすことで、この部分の論理を減らすことができる。

幸い、このパラメータの削減による性能への影響もわずかだった。面積もある程度減らせるし、引き続きこの方針でSTQの削減を続けていこう。