コンピュータの構成と設計 4.7節

パタヘネ4.7節です。この節では4.5節までで見てきたデータパスと制御をベースとして、パイプライン処理を実装する場合要素と制御線がどのように拡張されるかが述べられています。

4.7

 4.5節までのデータパスを5つに分割し、それらをステージに対応付ける。具体的には以下のように分割する。

  • IF:命令フェッチ
  • ID:命令デコードとレジスタ・フェッチ
  • EX:命令実行/アドレス生成
  • MEM:データ・メモリ・アクセス
  • WB:書き込み

基本的にはIFからWBまで直線的に実行されるが、2点例外がある。1点目は命令の結果をレジスタに書き戻す命令の場合、WBからレジスタファイルにデータが戻る。2点目は分岐命令の場合、分岐が成立したらEXステージで生成された分岐先アドレスでPCを書き換える。

 パイプライン方式はステージ数分のクロックサイクルを使用して命令を実行するので、各ステージの結果を別のサイクルに持ち越す必要がある。命令メモリなどは組み合わせ論理要素なので、処理結果を記憶できない。そのため、ステージ間にパイプラインレジスタを配置する。例えば、IFとID間のパイプラインレジスタはIF/IDが、IDとEX間にはID/EXレジスタが配置される。各クロックサイクルでは、IFからWBの構成要素への入力が前段のパイプラインレジスタから取られ、処理結果を後段のパイプラインレジスタに書き込む。なお、WBとIFの間にはパイプラインレジスタは必要ない。WBでレジスタへの書き込みが済んでいるので、次の命令で必要ならレジスタから読めば良いからである。

 なお、WBステージの結果はレジスタファイルに入力しなければならない。しかし、レジスタファイルはIDステージで用いられている。パイプライン化する前は、レジスタファイルの入力である「読み出しレジスタ1」「読み出しレジスタ2」「書き込みレジスタ」に命令デコードの結果が入っていた。パイプライン化したときそのまま命令デコード結果をレジスタファイルに入力すると、別命令のWBステージの結果を誤った書き込みレジスタに書き込むこととなる。これを避けるため、IDステージでは書き込みレジスタの値をレジスタファイルではなくパイプラインレジスタに入力し、以後のステージでは書き込みレジスタの値を素通しする。WBステージまで来たら、書き込みレジスタの値をレジスタファイルに入力する。

 データパスではマルチプレクサやALUの動作を切り替える制御線が出ている。パイプライン化されたときこれらを正しくアサート・ネゲートする方法を考える。命令がデコードされたタイミングで多くの制御線をアサートするかどうかが確定するので、まずその結果をパイプラインレジスタに保存する。以後のステージでは、その結果をパイプラインレジスタ間でバケツリレーし、必要なステージに来たらパイプラインレジスタからアサートするかどうかを取り出せば良い。

コメント

タイトルとURLをコピーしました