FPGA開発日記

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

自作CPUの回路面積削減検討 (STQのフォワード論理削減検討2.)

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

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

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

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

2について考え、RTL実装を行った。複数エントリにヒットしてバイト単位でマージする方法を細粒度、1エントリのみをフォワードする方法を粗粒度と呼ぼう。 一応ランダムテストも含めてテストパタンはPASSする程度のクオリティに仕上がっている。

  • 性能面:Dhrystoneを実行して、ROIのサイクル数を計測した。

    • 細粒度:111,009
    • 粗粒度:111,103
    • 1パーセント未満の性能低下なので許容範囲内であろう。
  • 面積:

    • 細粒度:LUT=22,148 / LUTRAM=0 / FF=3,619
    • 粗粒度:LUT=15,090 / LUTRAM=704 / FF=2,154

LUTRAMに移ってきた感じだ。各STQエントリの面積はあまり変わらない。

  • STQエントリの面積:
    • 細粒度:LUT=184 / FF=83
    • 粗粒度:LUT=199 / FF=83