自作CPUのキャッシュについて,VIPTを導入して実装を開始した.
だいたい4ステージに分けて,なるべくクリティカルパスが発生しないように気を付けているつもりだが. 問題は,LSUの外から入ってきて,それがそのままLSUの外に出ていくようなパスを可能な限り避けるという点だ.
- EX0: レジスタの読み込みと,命令の詳細をデコードする
- EX1: レジスタの応答とアドレス計算.TLBへのアクセスとデータキャッシュへのアクセス.
- EX2: データキャッシュのタグチェックと,各種ハザードのチェック.LDQ/STQのアップデート
- EX3: ハザードが発生した場合のリプレイキューへの挿入,MSHRへの挿入
この時に,フォワーディングパスが入ってそのまま出ていかないかをチェックする必要がある.
はやめのウェイクアップについていくためには,以下のようなシーケンスになり,この時だけはレジスタに最新の値が入っていないのでフォワーディングが必要となる.
それ以外の時は,一応フォワーディングをケアする必要はないはずだ.