マイクロアーキテクチャ設計入門
「パイプライン・インターロック編」



パイプライン・インターロックって何?

パイプライン・インターロック(pipeline interlock)はデータハザード(data hazard)を検出して回避する機構です.

データハザードは,「複数の命令が入り乱れてに処理されるために,演算結果の書き込みや読み出しが機械語のプログラマが意図した順序とは前後してしまい,期待と異なった結果になってしまう状況」です.データハザードには次の3通りがあります:

  1. RAW(read after write)ハザード
    …書き込み(Write)の後(After)にこれを読む(Read)という本来の実行順序が逆になると古い値を読んでしまう危険,
  2. WAW(write after write)ハザード
    …書き込み(Write)の後(After)に,もういちどあらためて書き込み(Write)があるという実行順序が崩されると, 後続する処理で古い値を使ってしまうという危険,
  3. WAR(write after read)ハザード
    …読み出し(Read)が済んでから(After)書き込み(Write)をしないといけないのに, 書き込みが早すぎると間違った値を読んでしまうという危険
パイプライン・インターロックはデータ依存関係を調べて,これらのハザードを検出し,正しい結果を保証します.インターロックは(正しく)つなぎあわせるという英語です.データ依存関係には
  1. 真の依存(true dependency)
    …先行する命令が書き込む結果を後続する命令が使うという依存関係
  2. 出力依存(output dependency)
    …先行する命令が書き込む記憶領域を後続する命令が書き改めるという依存関係
  3. 逆依存(antidependency)
    …先行する命令が読み出す記憶領域を後続する命令が書き改めるという依存関係
の3通りがあり,その各々にRAW,WAW,WARのハザードが対応しています. これらのハザードを検出して, 命令を正しくつなぎあわせるのがパイプライン・インターロックです.出力依存と逆依存は使用するレジスタが十分にあれば避けられる依存関係です.この意味では真の依存だけが文字通り本質的だと言えます.

実行時,記憶領域(レジスタ)を動的に別のハードウエア資源に割り当て直すことで出力依存と逆依存を回避することはレジスタリネーミング(register renaming)と呼ばれています. 真の依存だけが本質的だという意味で,パイプライン・インターロックは真の依存のみを扱う機構ですが,出力依存と逆依存の回避にも用いられます.

プログラムカウンタの更新に係るハザードを特に制御ハザード(control hazards)と言うことがあります.条件付き分岐命令がフラグの更新より早く実行されると,正しい分岐が行われないなどの危険を特に制御ハザードと呼ぶわけです.本質はフラグの更新に係る真の依存であって,RAWハザードです.

ハザードにはデータハザードの他に構造ハザード(structural hazard)があります.

構造ハザードは異なる命令が同一のハードウエア資源を同時に使おうとする危険です.構造ハザードが起きる状況を衝突(collision)といい,そのような状況が生じないようなスケジューリングが工夫されたりします.

パイプライン・インターロックの具体例:

「フェッチ」,「デコード」,「実行」の3ステージのパイプラインにフラグを更新する比較命令と条件付き分岐命令がこの順に入った場合でパイプライン・インターロックの具体例を示します.この場合は先行する比較命令がフラグを更新する以前に後続する条件付き分岐命令がこれを参照してしまうというRAWハザードが生じます.上述したように制御ハザードと呼ばれることもありますが,本質はフラグという記憶領域に係るRAWハザードです.

単純には,フラグを更新する命令を読み込んだら「フラグレジスタが使われている」というフラグビジーのフリップフロップを立てておき,このフラグを参照する条件付き分岐命令が後続していたら待たせるという設計がパイプライン・インターロックになります.フラグがどんな値になるかをフラグの更新と並行して送ることをフォワーディング(forwarding)と言います.プログラムカウンタを更新する回路はペナルティを1クロック軽減できます.

フラグビジーを示すフリップフロップを立てたり倒したりのタイミングの設計にはVerilog HDLによるRTLでの動作記述が便利です.RTLはレジスタ転送レベル(register transfer level)の略でレジスタ間のデータの受け渡しを問題にする設計のレベルです.論理回路を問題にするゲートレベルの上位に位置します.





Verilog HDLによるRTLでの動作記述やハザード,パイプライン・インターロック,フォワーディングについては下記の拙著で詳しく解説しています:

高橋隆一:::Verilog HDLによるシステム開発と設計, 共立出版(2008)ISBN978-4-320-12222-2


この本で扱っている記述例が 「Verilog HDLによるシステム開発と設計」のWEBサイトでダウンロードできます.

Verilog HDLによるRTLでの動作記述と構造記述についてはNEC主任時代の高橋隆一:オートマトン記述からの高位合成でも御覧になれます.


高橋隆一(たかはし・りゅういち)




マイクロコンピュータ設計教育環境City-1のホームページへ




高橋隆一のパーソナル・ホームページのトップページに戻る