自作CPUの面積が結構大きいので、面積削減を検討していきたい。
まずはStore Queue(STQ)から。いろいろ見ていると、フォワーディングパスからストアデータの取得のための判定論理が大きいようだ。
STQは、ストア命令のアドレスとデータを保持して、データをキャッシュに書き戻すための情報を保持する。 ストアデータは、基本的には別の命令から生成されてパイプラインからフォワードされるか、物理レジスタから読んでくる。
フォワーディングパスを削除してしまうと、命令がコミットされるまでSTQにデータが保持されないことになり、ロード命令へのフォワーディングがサポートできなくて性能が落ちてしまう。 したがって、フォワーディングの検知はするのだが、データ自体は物理レジスタから読み込むように論理を変更してみる。 つまり、フォワーディングにヒットすると、フォワーディングパスから複雑な論理でデータを取得するのではなく、物理レジスタを読みに行く。これにより、フォワーディングパス全体を削減することができる。
面積の削減は以下のようになった:LUT 8400 --> 6438で、23%程度の削減だ。
性能的にも、Degradeすることはないかな?とりあえずこれで様子を見てみよう。
Original : 118,822-cycle STQ modify : 118,509-cycle