Write Back モジュールの作成


1. はじめに

今回は Write Back モジュールについて考察する. Write Back モジュールはレジスタへの書き戻しを行う.

2. Write Back モジュールの機能

Write Back モジュールの機能は,レジスタへの書き戻しを行うことである. レジスタへの書き込みを行ったら,レジスタの書き込み予約を解除しなくては ならない. しかし,レジスタの書き込みと予約解除は,レジスタファイル内で処理するので, Write Back ステージで行うのは,レジスタファイルへ書き込み要求を 出すことだけである.

3. 注意すべき点

第一は,不要なレジスタ書き込みを発生させないことである. CMP 命令やストア命令等レジスタ書き込みが発生しない命令が有る. これを正しく判断する必要がある. この判断は実行ステージで行うべきである.つまり Write Back ステージへ レジスタ書き込み不要な命令が送られてきた時点でおかしいのだが, レジスタ書き込みが起こってから発覚することが多いので, 注意してチェックする.

同期メモリを使用するため, ロード命令の結果は他の命令と違うパスで 送られてくるはずである. これを判断して,正しいデータをレジスタに書き込む必要がある. つまり,実行ステージからロード命令結果であることを示す 信号を送る必要がある.

Write Back ステージにはパイプラインレジスタを設けないようにする. Write Back ステージがその結果を反映すべきなのはレジスタである. レジスタを書き換えるのは次のクロックの立ち上がりなので, Write Back ステージにパイプラインレジスタを設けると, さらに 1 サイクルが必要になってしまう. この意味では, 実行ステージから直接レジスタへ書き戻しても良いのだが, ロード命令の場合は次のサイクルで結果が得られるため, レジスタのポートを増やさないように, どの命令も Write Back ステージを 通るようにしてある.

4. 課題

※) 実際のチップでは, core へさらに I/O pad モジュールを結合して チップに相当する top モジュールを作成する. この演習では論理合成までを行い,チップ全体は考慮しないので, core 部だけでシミュレーションすることにする.