23 |
Pipeline processorの設計 (15) |
EIT処理
通常の命令処理以外の処理、例外(Exception)、割り込み(Interrupt)、トラップ(割り出し、Trap)を総称してEIT処理と称します。 パイプラインの各ステージで検出されるEITを以下に示します。
- <PC>: 奇数命令アドレスジャンプ例外
- <IF>: 命令フェッチアドレス例外、デバッグトラップ
- <ID>: 無効命令例外、ゼロ除算例外(命令が除算かつdivisorソースレジスタの内容がゼロ)
- <EX>: 無し
- <MA>: メモリアクセスアドレス例外、デバッグトラップ
- <WB>: 無し
割り込みはいずれのパイプラインステージで検出されるか、保留します。 さて、各ステージでEITが検出されると、前後の命令最大4命令でEITが検出されることになり、後続命令のEITが時間的に先に検出されることになります。これを処理すると命令の前後関係が逆転するために、EITを検出するパイプラインステージを揃えることを考えます。
この中で最も時間的に遅いのが、<MA>であるため、割り込みもここで検出することにします。パイプラインストリーム中に検出されたEITは全てパイプラインレジスタで<MA>まで保留し、ここで優先度を判定し、弱い順にEIT要因をスタックに格納します。従って、EITハンドラは優先度の高い順から実行し、弱い順にハンドラ実行することになります。
例外とトラップ、割り込みの違い
EITはいずれも命令ストリームの途中で起きる例外事象ですが、以下のような違いがあります。
- E(xception): 当該命令は取り消される。具体的には<MA>で起こる場合はメモリに対する書き込みを無効化する。その他の場合は<WB>において書き込みを無効化(パイプラインキャンセル)する。
- I(nterrupt): 当該命令の後に割り込みハンドラに分岐するので、当該命令は実行する。
- T(rap): 当該命令の後にトラップハンドラに分岐するので、当該命令は実行する。