(57)【要約】【課題】  プロセッサにおける割り込み処理を、高い応答性をもって安全に実行すること。【解決手段】  プロセッサ１は、ベクトル命令の処理中に外部割り込みが発生した場合、そのベクトル命令の処理が終了するまで、外部割り込み処理を保留する。そして、処理中であるベクトル命令の処理が終了すると、外部割り込み処理を実行する。したがって、割り込み処理が行われることにより、ベクトル命令の演算結果が不正な値となる事態を防止でき、安全に割り込み処理を実行することが可能となる。また、プロセッサ１内部にハードウェアとして実装されるベクトル命令実行検出部１０９によって、ベクトル命令の処理が行われているか否かを検出し、その検出結果に基づいて割り込み処理の実行を制御する。したがって、ソフトウェアによって割り込み処理の制御を行う場合に比べ、高い応答性をもって処理することが可能となる。【選択図】  図１
2005092467.tif 000002
【特許請求の範囲】
【請求項１】
ベクトル命令あるいはマルチサイクル命令を処理可能であり、その処理中に割り込み処理を実行可能なプロセッサであって、
前記ベクトル命令あるいはマルチサイクル命令の処理中であるか否かを検出する実行検出手段と、
前記実行検出手段によって、前記ベクトル命令あるいはマルチサイクル命令の処理中であることが検出された場合に、該ベクトル命令あるいはマルチサイクル命令の処理が終了するまで割り込み処理の実行を保留させることが可能な割り込み制御手段と、
を含むことを特徴とするプロセッサ。
【請求項２】
処理されている前記ベクトル命令あるいはマルチサイクル命令に引き続く命令が、ベクトル命令あるいはマルチサイクル命令であるか否かを検出する連続実行検出手段をさらに含み、
前記割り込み制御手段は、前記連続実行検出手段によって、処理されている前記ベクトル命令あるいはマルチサイクル命令に引き続く命令が、ベクトル命令あるいはマルチサイクル命令であることが検出された場合に、処理されている前記ベクトル命令あるいはマルチサイクル命令の処理と、それに引き続く命令の処理とが終了するまで割り込み処理の実行を保留させることが可能であることを特徴とする請求項１記載のプロセッサ。
【請求項３】
処理されている前記ベクトル命令あるいはマルチサイクル命令に関与するデータと、それに引き続く命令に関与するデータとの依存関係を判定する判定手段をさらに含み、
前記割り込み制御手段は、前記判定手段によって、前記依存関係があると判定された場合、割り込み処理の実行を保留し、前記依存関係がないと判定された場合、割り込み処理を実行することを特徴とする請求項１または２記載のプロセッサ。
【請求項４】
前記判定手段は、処理されているベクトル命令あるいはマルチサイクル命令のデスティネーションレジスタと、引き続く命令のソースレジスタとの関連性に基づいて、前記依存関係を判定することを特徴とする請求項３記載のプロセッサ。
【請求項５】
ベクトル命令あるいはマルチサイクル命令を処理可能であり、その処理中に割り込み処理を実行可能なプロセッサにおける割り込み制御方法であって、
前記ベクトル命令あるいはマルチサイクル命令の処理中であるか否かを検出する実行検出ステップと、
前記実行検出ステップにおいて、前記ベクトル命令あるいはマルチサイクル命令の処理中であることが検出された場合に、該ベクトル命令あるいはマルチサイクル命令の処理が終了するまで割り込み処理の実行を保留させる割り込み制御ステップと、
を含むことを特徴とする割り込み制御方法。
【請求項６】
処理されている前記ベクトル命令あるいはマルチサイクル命令に引き続く命令が、ベクトル命令あるいはマルチサイクル命令であるか否かを検出する連続実行検出ステップをさらに含み、
前記割り込み制御ステップにおいては、処理されている前記ベクトル命令あるいはマルチサイクル命令に引き続く命令が、ベクトル命令あるいはマルチサイクル命令であることが検出された場合に、処理されている前記ベクトル命令あるいはマルチサイクル命令の処理と、それに引き続く命令の処理とが終了するまで割り込み処理の実行を保留させることを特徴とする割り込み制御方法。
【請求項７】
処理されている前記ベクトル命令あるいはマルチサイクル命令に関与するデータと、それに引き続く命令に関与するデータとの依存関係を判定する判定ステップをさらに含み、
前記割り込み制御ステップにおいては、前記依存関係があると判定された場合、割り込み処理の実行を保留し、前記依存関係がないと判定された場合、割り込み処理を実行することを特徴とする請求項５または６記載の割り込み制御方法。
【請求項８】
前記判定ステップにおいては、処理されているベクトル命令あるいはマルチサイクル命令のデスティネーションレジスタと、引き続く命令のソースレジスタとの関連性に基づいて、前記依存関係を判定することを特徴とする請求項７記載の割り込み制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、割り込み処理を行うプロセッサおよびその割り込み制御方法に関する。
【背景技術】
【０００２】
従来、ベクトル命令やマルチサイクル命令といった複数サイクルにわたる命令を実行可能なプロセッサにおいて、割り込み処理が行われている。
このような割り込み処理には、プロセッサ外部から入力される外部割込み処理と、プロセッサ内部において発生する例外処理とがある。
図１２は、割り込み処理を実行可能な従来のプロセッサ２００の構成を示す図である。
【０００３】
図１２において、プロセッサ２００は、フェッチ部２０１と、デコード部２０２と、ＡＬＵ（Arithmetic and Logical Unit）部２０３と、乗算部２０４と、加減算部２０５と、ロード部２０６と、ストア部２０７と、レジスタファイル部２０８と、プログラム制御部２０９と、例外管理部２１０と、外部割り込み制御部２１１とを含んで構成される。
フェッチ部２０１は、不図示のメモリから命令コードをフェッチする。そして、フェッチ部２０１は、フェッチした命令コードを一時的に記憶した後、デコード部２０２に出力する。
【０００４】
デコード部２０２は、フェッチ部２０１から入力された命令コードをデコードし、デコード結果を、ＡＬＵ部２０３、乗算部２０４、加減算部２０５、ロード部２０６およびストア部２０７に出力する。また、デコード部２０２は、同様に、デコード結果をプログラム制御部２０９に出力する。
ＡＬＵ部２０３は、デコード部２０２から入力されたデコード結果が論理演算である場合に、デコード結果に基づいて、レジスタファイル部２０８から演算するデータを読み出す。そして、ＡＬＵ部２０３は、読み出したデータの論理演算を実行し、演算結果をレジスタファイル部２０８に出力する。
【０００５】
乗算部２０４は、デコード部２０２から入力されたデコード結果が乗算である場合に、デコード結果に基づいて、レジスタファイル部２０８から乗算するデータを読み出す。そして、乗算部２０４は、読み出したデータの乗算を実行し、乗算結果をレジスタファイル部２０８に出力する。
加減算部２０５は、デコード部２０２から入力されたデコード結果が加算あるいは減算である場合に、デコード結果に基づいて、レジスタファイル部２０８から加算あるいは減算するデータを読み出す。そして、加減算部２０５は、読み出したデータの加算あるいは減算を実行し、加減算結果をレジスタファイル部２０８に出力する。
【０００６】
ロード部２０６は、デコード部２０２から入力されたデコード結果がロード命令である場合に、デコード結果に基づいて、ロード命令の対象となるアドレスをメモリに出力する。そして、ロード部２０６は、そのアドレスのデータがメモリから入力されると、入力されたデータをレジスタファイル部２０８に出力する。
ストア部２０７は、デコード部２０２から入力されたデコード結果がストア命令である場合に、デコード結果に基づいて、ストア命令の対象となるデータをレジスタファイル部２０８から読み出す。そして、ストア部２０７は、ストア命令の対象となるアドレスおよびレジスタファイル部２０８から読み出したデータをメモリに出力する。
【０００７】
レジスタファイル部２０８は、所定数のスカラレジスタおよびベクトルレジスタを備え、ＡＬＵ部２０３、乗算部２０４、加減算部２０５、ロード部２０６およびストア部２０７の演算対象となるデータを記憶する。また、レジスタファイル部２０８には、プログラム制御部２０９から、データの読み出しあるいは書き込みを行うための制御信号が入力される。
【０００８】
プログラム制御部２０９は、プロセッサ２００全体を制御するものであり、プログラムカウンタ２０９ａと、ステータスレジスタ２０９ｂと、割り込み処理用プログラムカウンタ２０９ｃと、割り込みベクタ２０９ｄとを含んで構成される。
プログラムカウンタ（PC）２０９ａは、次に実行するプログラムのアドレスを記憶するレジスタである。
【０００９】
ステータスレジスタ（ST）２０９ｂは、プロセッサ２００の動作状態に関するデータを記憶している。例えば、ステータスレジスタ２０９ｂは、割り込み処理を許可する状態であるか否かを示す割り込み許可フラグ（MIE）や、割り込み処理の発生時に、割り込み処理発生前の割り込み許可フラグを記憶しておく退避用許可フラグ（PMIE）を記憶している。
【００１０】
割り込み処理用プログラムカウンタ（EPC）２０９ｃは、割り込み処理が発生した場合に、プログラムカウンタ２０９ａに記憶されているアドレスを退避しておくためのレジスタである。
割り込みベクタ２０９ｄは、割り込み処理の種類に応じた分岐先のプログラムのアドレスをテーブル形式で記憶している。
【００１１】
このような構成によって、プログラム制御部２０９は、デコード部２０２から入力されるデコード結果に基づいて、レジスタファイル部２０８におけるデータの読み出しあるいは書き込みを制御したり、次に実行するプログラムが記憶されたアドレスをメモリに出力したりする。
また、プログラム制御部２０９は、プロセッサ２００の演算内容を示す信号を例外管理部２１０に出力し、例外管理部２１０から例外処理であることを示す信号が入力された場合、割り込み処理を実行する。
【００１２】
さらに、プログラム制御部２０９は、プロセッサの動作状態を示す信号を外部割り込み制御部２１１に出力する。また、プログラム制御部２０９は、外部割り込み制御部２１１から割り込み処理の要因と、割り込みレベルとが入力された場合、外部割り込みの実行が可能な動作状態であれば、割り込み処理を実行する。
例外管理部２１０は、プログラム制御部２０９から入力される演算内容を示す信号に基づいて、その演算において、アドレス例外（アドレスの参照範囲の違反）、予約命令例外（定義されていない命令の入力）および零除算等の内部例外が発生しているか否かを検出する。そして、例外管理部２１０は、内部例外が発生している場合、発生している内部例外に対応する例外処理を示す信号をプログラム制御部２０９に出力する。
【００１３】
外部割り込み制御部２１１は、プロセッサ２００に接続された各種デバイスから入力される外部割り込みの要求信号を受け取る。そして、外部割り込み制御部２１１は、受け取った外部割り込みの要求信号に基づいて、割り込み処理の要因と、割り込みレベルとをプログラム制御部２０９に出力する。
以上のような構成において、プロセッサ２００は、例外処理あるいは外部割り込みのいずれかの割り込み処理が発生すると、図１３に示すように、実行中の命令に関するデータを一旦退避させ、割り込み処理を実行する。具体的には、図１３において、通常のプログラムの実行中に割り込み処理が発生すると、プロセッサ２００は、退避用許可フラグ（PMIE）に割り込み許可フラグ（MIE）をセットし、割り込み許可フラグには、割り込みの禁止を示す“０”をセットする。また、プロセッサ２００は、割り込み処理用プログラムカウンタ２０９ｃにプログラムカウンタ２０９ａの値をセットし、プログラムカウンタ２０９ａに割り込み処理の命令を示すアドレスをセットする。
【００１４】
そして、プロセッサ２００は、割り込み処理を実行し、その後、退避させていたデータを復帰させ、割り込み処理の発生前に実行していた処理を継続する。即ち、退避用許可フラグの値を割り込み許可フラグに戻し、割り込み処理用プログラムカウンタ２０９ｃに退避していたアドレスをプログラムカウンタ２０９ａに戻す。そして、割り込み処理前の動作を再開する。
【００１５】
ここで、ベクトル命令やマルチサイクル命令のように、実行結果が得られるまでに複数サイクルを要する処理を実行している状態で割り込み処理が発生すると、割り込み処理の実行後、割り込み処理の発生前に実行していた処理が適切に継続できない場合があった。
例えば、ベクトル命令の演算結果をスカラレジスタに書き込み、その演算結果を順にストアしていく処理の実行中に割り込み処理が発生したとする。
【００１６】
このとき、割り込み処理が発生しなければ、スカラレジスタに書き込まれた演算結果がサイクル毎にストアされ、適切なベクトルデータが得られることとなる。一方、割り込み処理が発生した場合には、割り込み処理の実行中に、スカラレジスタ内の演算結果が順次変化し、割り込み処理の実行後には、ベクトル命令の最後の演算結果がスカラレジスタに記憶されている状態となる。そして、その演算結果が、ベクトル命令の演算結果としてサイクル毎にストアされていくこととなる。そのため、割り込み処理が発生した場合、割り込み処理の発生後にストアされたデータは全て同一の値（最後の演算結果）となり、適切なベクトルデータが得られない事態が生じていた。
【００１７】
このような問題を解決するため、参考文献「構造化コンピュータ構成  第４版」（ピアソン・エデュケーション、アンドリュー・Ｓ・タネンバウム著）に記載された技術が知られている。
本文献においては、割り込み処理の実行をソフトウェアで禁止することにより、上述のような不正な結果が生ずることを防止する技術が開示されている。
【非特許文献１】アンドリュー・Ｓ・タネンバウム著「構造化コンピュータ構成  第４版」ピアソン・エデュケーション
【発明の開示】
【発明が解決しようとする課題】
【００１８】
しかしながら、上述の文献に記載された技術においては、割り込み処理において不正な結果が生ずることは防止できる（安全に割り込み処理を実行できる）ものの、割り込み処理の実行をソフトウェアで制御することから、割り込み処理の実行を制御する際の応答速度が低下するという問題が生ずる。
即ち、従来のプロセッサにおいては、高い応答性をもって、安全に割り込み処理を実行することが困難であった。
【００１９】
本発明の課題は、プロセッサにおける割り込み処理を、高い応答性をもって安全に実行することである。
【課題を解決するための手段】
【００２０】
以上の課題を解決するため、本発明は、
ベクトル命令あるいはマルチサイクル命令を処理可能であり、その処理中に割り込み処理を実行可能なプロセッサであって、前記ベクトル命令あるいはマルチサイクル命令の処理中であるか否かを検出する実行検出手段（例えば、図１，図８のベクトル命令実行検出部１０９あるいは図５，図１１のマルチサイクル命令実行検出部１１３）と、前記実行検出手段によって、前記ベクトル命令あるいはマルチサイクル命令の処理中であることが検出された場合に、該ベクトル命令あるいはマルチサイクル命令の処理が終了するまで割り込み処理の実行を保留させることが可能な割り込み制御手段（例えば、図１，図５，図８あるいは図１１のプログラム制御部１１０）とを含むことを特徴としている。
【００２１】
また、本発明は、
ベクトル命令あるいはマルチサイクル命令を処理可能であり、その処理中に割り込み処理を実行可能なプロセッサにおける割り込み制御方法であって、前記ベクトル命令あるいはマルチサイクル命令の処理中であるか否かを検出する実行検出ステップと、前記実行検出ステップにおいて、前記ベクトル命令あるいはマルチサイクル命令の処理中であることが検出された場合に、該ベクトル命令あるいはマルチサイクル命令の処理が終了するまで割り込み処理の実行を保留させる割り込み制御ステップとを含むことを特徴としている。
【００２２】
これにより、ベクトル命令あるいはマルチサイクル命令の処理中に割り込みが発生した場合、そのベクトル命令あるいはマルチサイクル命令の処理が終了するまで、割り込み処理が保留される。そして、処理中であるベクトル命令あるいはマルチサイクル命令の処理が終了すると、割り込み処理が実行される。
したがって、割り込み処理が行われることにより、ベクトル命令の演算結果が不正な値となる事態を防止することができ、安全に割り込み処理を実行することが可能となる。
【００２３】
また、これにより、プロセッサ内部に実装される実行検出手段（あるいは実行検出ステップ）によって、ベクトル命令あるいはマルチサイクル命令の処理が行われているか否かが検出され、その検出結果に基づいて割り込み処理の実行が制御される。
したがって、ソフトウェアによって割り込み処理の制御を行う場合に比べ、高い応答性をもって処理することが可能となる。
【００２４】
即ち、本発明によれば、プロセッサにおける割り込み処理を、高い応答性をもって安全に実行することが可能となる。
また、処理されている前記ベクトル命令あるいはマルチサイクル命令に引き続く命令が、ベクトル命令あるいはマルチサイクル命令であるか否かを検出する連続実行検出手段（例えば、図８のベクトル命令連続実行検出部１０９ａあるいは図１１のマルチサイクル命令連続実行検出部１１３ａ）をさらに含み、前記割り込み制御手段は、前記連続実行検出手段によって、処理されている前記ベクトル命令あるいはマルチサイクル命令に引き続く命令が、ベクトル命令あるいはマルチサイクル命令であることが検出された場合に、処理されている前記ベクトル命令あるいはマルチサイクル命令の処理と、それに引き続く命令の処理とが終了するまで割り込み処理の実行を保留させることが可能であることを特徴としている。
【００２５】
また、処理されている前記ベクトル命令あるいはマルチサイクル命令に引き続く命令が、ベクトル命令あるいはマルチサイクル命令であるか否かを検出する連続実行検出ステップをさらに含み、前記割り込み制御ステップにおいては、処理されている前記ベクトル命令あるいはマルチサイクル命令に引き続く命令が、ベクトル命令あるいはマルチサイクル命令であることが検出された場合に、処理されている前記ベクトル命令あるいはマルチサイクル命令の処理と、それに引き続く命令の処理とが終了するまで割り込み処理の実行を保留させることを特徴としている。
【００２６】
これにより、ベクトル命令あるいはマルチサイクル命令の処理中に割り込みが発生した場合、ベクトル命令あるいはマルチサイクル命令の連続実行中の状態でなくなるまで、割り込み処理が保留される。そして、ベクトル命令あるいはマルチサイクル命令の連続実行中の状態でなくなると、割り込み処理が実行される。
したがって、連続して行われるベクトル命令あるいはマルチサイクル命令それぞれが、レジスタを共用する場合にも、より確実に、ベクトル命令の演算結果が不正な値となる事態を防止することができ、安全に割り込み処理を実行することが可能となる。
【００２７】
また、処理されている前記ベクトル命令あるいはマルチサイクル命令に関与するデータと、それに引き続く命令に関与するデータとの依存関係を判定する判定手段（例えば、データの依存関係を確認する機能を有する場合の図１，図８のベクトル命令実行検出部１０９あるいは図５，図１１のマルチサイクル命令実行検出部１１３）をさらに含み、前記割り込み制御手段は、前記判定手段によって、前記依存関係があると判定された場合、割り込み処理の実行を保留し、前記依存関係がないと判定された場合、割り込み処理を実行することを特徴としている。
【００２８】
また、処理されている前記ベクトル命令あるいはマルチサイクル命令に関与するデータと、それに引き続く命令に関与するデータとの依存関係を判定する判定ステップをさらに含み、前記割り込み制御ステップにおいては、前記依存関係があると判定された場合、割り込み処理の実行を保留し、前記依存関係がないと判定された場合、割り込み処理を実行することを特徴としている。
【００２９】
これにより、割り込み処理が実行されるまでの保留時間が長期化する事態を防止することが可能となる。
また、前記判定手段は、処理されているベクトル命令あるいはマルチサイクル命令のデスティネーションレジスタと、引き続く命令のソースレジスタとの関連性に基づいて、前記依存関係を判定することを特徴としている。
【００３０】
また、前記判定ステップにおいては、処理されているベクトル命令あるいはマルチサイクル命令のデスティネーションレジスタと、引き続く命令のソースレジスタとの関連性に基づいて、前記依存関係を判定することを特徴としている。
これにより、連続するベクトル命令あるいはマルチサイクル命令の具体的な処理内容に応じて、適切に割り込み処理を実行することが可能となる。
【００３１】
なお、例えば、ベクトル命令の実行結果を、スカラレジスタを介して、引き続く命令が使用している関係や、先行する命令のデスティネーションレジスタに対し、レジスタの多重割り当てが行われている関係である場合には、処理されているベクトル命令あるいはマルチサイクル命令のデスティネーションレジスタと、引き続く命令のソースレジスタとが関連性を有すると言える。
【発明を実施するための最良の形態】
【００３２】
以下、図を参照して本発明に係るプロセッサの実施の形態を説明する。
（第１の実施の形態）
初めに、本発明の第１の実施の形態について説明する。
まず、構成を説明する。
図１は、本実施の形態に係るプロセッサ１の構成を示す図である。
【００３３】
図１において、プロセッサ１は、フェッチ部１０１と、デコード部１０２と、ＡＬＵ部１０３と、乗算部１０４と、加減算部１０５と、ロード部１０６と、ストア部１０７と、レジスタファイル部１０８と、ベクトル命令実行検出部１０９と、プログラム制御部１１０と、例外管理部１１１と、外部割り込み制御部１１２とを含んで構成される。
図１において、プロセッサ１は、図１２に示す従来のプロセッサ２００に、ベクトル命令実行検出部１０９が付加された構成である。そのため、ベクトル命令実行検出部１０９に関連する構成についてのみ説明し、従来と同様の構成部分については、説明を省略する。
【００３４】
ＡＬＵ部１０３、乗算部１０４、加減算部１０５、ロード部１０６およびストア部１０７は、それぞれにおいて実行している命令がベクトル命令であるか否かを示す実行ステータス信号をベクトル命令実行検出部１０９に出力する。
ベクトル命令実行検出部１０９は、プロセッサ１内部にハードウェアとして備えられており、ベクトル命令実行検出部１０９には、命令を実行しているＡＬＵ部１０３、乗算部１０４、加減算部１０５、ロード部１０６およびストア部１０７から実行ステータス信号が入力される。
【００３５】
そして、ベクトル命令実行検出部１０９は、実行している命令がベクトル命令である旨を示す実行ステータス信号が入力された場合、外部割り込み処理を実行させない旨の指示信号（以下、「割り込み禁止信号」と言う。）をプログラム制御部１１０に出力する。
なお、デコード部１０２によってデコードされた命令コードの内容に基づいて、その命令がベクトル命令であるか否かを判定できることから、デコード部１０２からベクトル命令実行検出部１０９に実行ステータス信号を入力することも可能である。
【００３６】
プログラム制御部１１０は、ベクトル命令実行検出部１０９から割り込み禁止信号が入力されると、実行中のベクトル命令の処理が終了するまで、外部割り込み処理の実行を保留する。そして、プログラム制御部１１０は、実行中のベクトル命令の処理が終了すると、外部割り込み処理を実行する。
次に、動作を説明する。
【００３７】
プロセッサ１は、主としてプログラム制御部１１０の制御によって、割り込み処理の動作に対応する状態遷移を行う。
図２は、プロセッサ１の動作を示す状態遷移図である。
図２において、プロセッサ１は、状態Ｓ１〜Ｓ５を遷移する。
状態Ｓ１（Reset）は、割り込み処理としてプロセッサ１のリセットが行われた場合の第１サイクルを実行する状態であり、引き続き状態Ｓ２に遷移する。
【００３８】
状態Ｓ２（Normal）は、割り込みが発生していない、通常の動作状態である。状態Ｓ２において、外部割り込みが発生した場合(MI-Event)、ベクトル命令の実行中でなければ状態Ｓ３に遷移し、例外処理等、外部割り込み以外の割り込みが発生すると（NMI-Event）、状態Ｓ５に遷移する。また、状態Ｓ２において、リセットが行われた場合（IntReset）、状態Ｓ１に遷移する。ここで、状態Ｓ２において、外部割り込みが発生した場合に、ベクトル命令の処理中であるときには、ベクトル命令の処理が終了するまで状態Ｓ２を継続する。
【００３９】
状態Ｓ３（MI）は、外部割り込み処理を実行する状態である。状態Ｓ３において、外部割り込み処理が終了すると、状態Ｓ４に遷移し、リセットが行われた場合、状態Ｓ１に遷移する。
状態Ｓ４（MI-PostProc）は、外部割り込み処理の実行後、プロセッサ１の動作タイミングを調整する状態である。状態Ｓ４において、動作タイミングの調整後、状態Ｓ２に遷移し、外部割り込み以外の割り込みが発生すると、状態Ｓ５に遷移する。また、状態Ｓ４において、リセットが行われた場合、状態Ｓ１に遷移する。
【００４０】
状態Ｓ５（NMI）は、例外処理等、外部割り込み以外の割り込み処理を実行する状態である。状態Ｓ５において、外部割り込み以外の割り込み処理の実行後、状態Ｓ２に遷移し、リセットが行われた場合、状態Ｓ１に遷移する。
図２に示すように各状態を遷移する結果、プロセッサ１は、割り込み処理に関し、具体的に以下のような動作を行う。
【００４１】
図３は、ベクトル命令の処理中に外部割り込みが発生した場合の動作例を示すタイミングチャートである。
図３においては、クロック信号（CLK）によって規定されるサイクル毎に、命令コード（Inst1〜11）が順次入力される。各命令コードは、フェッチアドレスの演算（Fadr）、フェッチ（F）、デコード（D）および実行（E）の各ステージによって構成される。また、命令コードInst2は、４ワードのデータを読み込むベクトル命令であり、実行ステージは４サイクル（E1〜E4）にわたっている。
【００４２】
図３において、サイクル“１”〜“３”では、プロセッサ１に命令コードInst1〜3が順に入力され、通常の動作を行っている。
そして、サイクル“４”において、外部割り込みが発生すると（IRQ-EN=1）、ベクトル命令である命令コードInst2の処理中であることから、外部割り込み処理を保留し、命令コードInst2の最後の実行ステージが開始されるサイクル“８”まで通常の動作を継続する。
【００４３】
サイクル“８”において、プロセッサ１は、外部割り込み処理Inst8を開始し、外部割り込み処理のフェッチアドレスを演算する。また、サイクル“７”におけるプログラムカウンタ（PC）の値等を含む動作状態は、一旦退避される。
そして、プロセッサ１は、外部割り込み処理に関連する命令コードInst8〜10をサイクル“８”〜“１０”で処理し、サイクル“１１”から、通常の動作状態に戻る。
【００４４】
以上のように、本実施の形態に係るプロセッサ１は、ベクトル命令の処理中に外部割り込みが発生した場合、図４に示すように、そのベクトル命令の処理が終了するまで、外部割り込み処理を保留する。そして、処理中であるベクトル命令の処理が終了すると、外部割り込み処理を実行する。
したがって、割り込み処理が行われることにより、ベクトル命令の演算結果が不正な値となる事態を防止することができ、安全に割り込み処理を実行することが可能となる。
【００４５】
また、プロセッサ１は、プロセッサ１内部にハードウェアとして実装されるベクトル命令実行検出部１０９によって、ベクトル命令の処理が行われているか否かを検出し、その検出結果に基づいて割り込み処理の実行を制御する。
したがって、ソフトウェアによって割り込み処理の制御を行う場合に比べ、高い応答性をもって処理することが可能となる。また、プロセッサ１に実行させるプログラムを記述する際に、割り込み処理に関するプログラムの記述を容易なものとすることができると共に、割り込み処理に関するプログラムミスを防止することが可能となる。
【００４６】
なお、プロセッサ１においてマルチサイクル命令を処理する場合にも、上述のような、ベクトル命令における場合と同様の割り込み処理の制御を行うことが可能である。
即ち、図５に示すように、プロセッサ１において、図１のベクトル命令実行検出部１０９に対応するマルチサイクル命令実行検出部１１３を備え、ＡＬＵ部１０３等、演算を行う各機能部から、マルチサイクル命令が実行されているか否かを示す実行ステータス信号を入力させる。
【００４７】
そして、ＡＬＵ部１０３等の各機能部から、実行している命令がマルチサイクル命令である旨の実行ステータス信号が入力された場合、マルチサイクル命令実行検出部１１３が、割り込み禁止信号をプログラム制御部１１０に出力する。
このような構成とすることにより、プロセッサ２は、割り込み処理に関し、具体的には、以下のような動作を行う。
【００４８】
図６は、マルチサイクル命令の処理中に割り込み処理が発生した場合の動作例を示すタイミングチャートである。
図６においては、クロック信号（CLK）によって規定されるサイクル毎に、
ＭＰ  ％ＳＲ２，％ＳＲ０，％ＳＲ１；
ＡＤＤ  ％ＳＲ４，％ＳＲ３，％ＳＲ２；
ＳＵＢ  ％ＳＲ５，％ＳＲ３，％ＳＲ２；
ＡＤＤ  ％ＳＲ７，％ＳＲ６，％ＳＲ２；
ＳＵＢ  ％ＳＲ８，％ＳＲ６，％ＳＲ２；
の順で命令が入力されている。
（ただし、第１行は、スカラレジスタＳＲ０およびスカラレジスタＳＲ１の値を乗算し、スカラレジスタＳＲ２に格納する命令であり、第２行は、スカラレジスタＳＲ３の値にスカラレジスタＳＲ２の値を加算し、スカラレジスタＳＲ４に格納する命令である。また、第３行は、スカラレジスタＳＲ３の値からスカラレジスタＳＲ２の値を減算し、スカラレジスタＳＲ５に格納する命令であり、第４行は、スカラレジスタＳＲ６の値にスカラレジスタＳＲ２の値を加算し、スカラレジスタＳＲ７に格納する命令である。さらに、第５行は、スカラレジスタＳＲ６の値からスカラレジスタＳＲ２の値を減算し、スカラレジスタＳＲ８に格納する命令である。）
そして、これらの命令において、第１行は、実行ステージが４サイクルわたるマルチサイクル命令であり、そのデスティネーションレジスタＳＲ２が、第２行から第４行の命令において、ソースレジスタとして多重割り当てされている。
【００４９】
ここで、サイクル“４”において、外部割り込み処理が発生すると、マルチサイクル命令（第１行の命令）の処理中であることから、外部割り込み処理を保留し、マルチサイクル命令の最後の実行ステージが開始されるサイクル“７”まで通常の動作を継続する。
そして、サイクル“７”において、プロセッサ２は、外部割り込み処理を開始する。
そのため、第２行から第４行の命令において使用するスカラレジスタＳＲ２の値は、第１行の命令の実行結果が反映されていない状態であり、第５行の命令において使用するスカラレジスタＳＲ２の値は、第１行の命令の実行結果が反映されている状態である。即ち、スカラレジスタＳＲ２に関する多重割り当てが適切に処理されている。
【００５０】
一方、従来のように、マルチサイクル命令の処理中であるか否かに関わらず、外部割り込み処理を実行する場合、図７に示すように、第２行から第４行の命令において使用するスカラレジスタＳＲ２の値も、第１行の命令の実行結果が反映された状態となってしまい、スカラレジスタＳＲ２に関する多重割り当てが適切に処理されないこととなる。
したがって、上述のベクトル命令の場合と同様に、本発明により、マルチサイクル命令の処理中に外部割り込み処理が行われることによって生ずる不具合を解消することができる。
（第２の実施の形態）
次に、本発明の第２の実施の形態について説明する。
【００５１】
図８は、本実施の形態に係るプロセッサ２の構成を示す図である。
図８において、プロセッサ２は、第１の実施の形態におけるプロセッサ１において、ベクトル命令実行検出部１０９にベクトル命令連続実行検出部１０９ａが付加された構成である。そのため、ベクトル命令連続実行検出部１０９ａに関連する構成についてのみ説明し、プロセッサ１と同様の構成部分については、説明を省略する。
【００５２】
デコード部１０２は、現在実行中である命令コードに引き続く命令コード（以下、「後続命令コード」と言う。）のデコード結果に基づいて、その命令コードがベクトル命令であるか否かを判定する。そして、デコード部１０２は、現在実行中である命令コードに引き続く命令（以下、「後続命令」と言う。）がベクトル命令であるか否かを示す連続実行ステータス信号をベクトル命令連続実行検出部１０９ａに出力する。
【００５３】
ベクトル命令実行検出部１０９は、ベクトル命令連続実行検出部１０９ａをさらに含んで構成される。
ベクトル命令連続実行検出部１０９ａは、デコード部１０２から入力される連続実行ステータス信号に基づいて、後続命令がベクトル命令であるか否かを判定する。
そして、ベクトル命令連続実行検出部１０９ａによって、後続命令がベクトル命令であると判定された場合、ベクトル命令実行検出部１０９は、現在実行中である命令コードがベクトル命令であるときには、後続命令の処理が終了するまで外部割り込み処理を実行させない旨の指示信号（以下、「連続割り込み禁止信号」と言う。）をプログラム制御部１１０に出力する。
【００５４】
プログラム制御部１１０は、ベクトル命令実行検出部１０９から連続割り込み禁止信号が入力されると、実行中のベクトル命令の処理および後続命令の処理が終了するまで、外部割り込み処理の実行を保留する。そして、プログラム制御部１１０は、後続命令に引き続く命令がベクトル命令である場合、上述の処理を同様に行うことにより、外部割り込み処理の実行をそのまま保留し続け、後続命令に引き続く命令がベクトル命令でない場合に、外部割り込み処理を実行する。
【００５５】
次に、動作を説明する。
プロセッサ２の動作を示す状態遷移図は、図２に示すプロセッサ１の状態遷移図において、状態Ｓ２の遷移条件が異なるものである。
即ち、図２において、状態Ｓ２（Normal）は、割り込みが発生していない、通常の動作状態である。状態Ｓ２において、外部割り込みが発生した場合、ベクトル命令の処理中であり、かつ、後続命令がベクトル命令であるとき（ベクトル命令の連続実行中）以外には状態Ｓ３に遷移し、例外処理等、外部割り込み以外の割り込みが発生すると、状態Ｓ５に遷移する。また、状態Ｓ２において、リセットが行われた場合、状態Ｓ１に遷移する。ここで、状態Ｓ２において、外部割り込みが発生した場合に、ベクトル命令の連続実行中であるときには、ベクトル命令の処理中であり、かつ、後続命令がベクトル命令である状態でなくなるまで状態Ｓ２を継続する。
【００５６】
そして、このような状態遷移を行う結果、プロセッサ２は、割り込み処理に関し、具体的には、以下のような動作を行う。
図９は、連続するベクトル命令の処理中に割り込み処理が発生した場合の動作例を示すタイミングチャートである。
図９においては、クロック信号（CLK）によって規定されるサイクル毎に、命令コード（Inst1〜12）が順次入力される。各命令コードは、フェッチアドレスの演算（Fadr）、フェッチ（F）、デコード（D）および実行（E）の各ステージによって構成される。また、命令コードInst2は、２ワードのデータを読み込むベクトル命令であり、実行ステージは２サイクル（E1〜E2）にわたっている。さらに、命令コードInst3は、４ワードのデータを加算するベクトル命令であり、実行ステージは４サイクル（E1〜E4）にわたっている。
【００５７】
図９において、サイクル“１”では、プロセッサ２に命令コードInst1が入力され、通常の動作を行っている。
そして、サイクル“２”において、ベクトル命令である命令コードInst2が入力され、続いて、サイクル“３”において、同様にベクトル命令である命令コードInst3が入力される。
【００５８】
すると、命令コードInst2については、サイクル“６”まで処理が継続し、命令コードInst3については、サイクル“９”まで処理が継続される。
ここで、サイクル“４”において、外部割り込み処理が発生すると、ベクトル命令である命令コードInst2の処理中であり、後続命令もベクトル命令である命令コードInst3であることから、外部割り込み処理を保留し、命令コードInst3の最後の実行ステージが開始されるサイクル“９”まで通常の動作を継続する。
【００５９】
サイクル“９”において、プロセッサ２は、外部割り込み処理Inst9を開始し、外部割り込み処理のフェッチアドレスを演算する。また、サイクル“８”におけるプログラムカウンタ（ＰＣ）の値等を含む動作状態は、一旦退避される。
そして、プロセッサ２は、外部割り込み処理に関連する命令コードInst9〜11をサイクル“９”〜“１１”で処理し、サイクル“１２”から、通常の動作状態に戻る。
【００６０】
以上のように、本実施の形態に係るプロセッサ２は、ベクトル命令の処理中に外部割り込みが発生した場合、図１０に示すように、ベクトル命令の連続実行中の状態でなくなるまで、外部割り込み処理を保留する。そして、ベクトル命令の連続実行中の状態でなくなると、外部割り込み処理を実行する。
したがって、連続して行われるベクトル命令それぞれが、レジスタを共用する場合にも、より確実に、ベクトル命令の演算結果が不正な値となる事態を防止することができ、安全に割り込み処理を実行することが可能となる。
【００６１】
なお、プロセッサ２においてマルチサイクル命令を処理する場合にも、上述のような、ベクトル命令における場合と同様の割り込み処理の制御を行うことが可能である。
即ち、図１１に示すように、プロセッサ２において、図８のベクトル命令実行検出部１０９およびベクトル命令連続実行検出部１０９ａに対応するマルチサイクル命令実行検出部１１３およびマルチサイクル命令連続実行検出部１１３ａを備え、デコード部１０２から、現在実行中である命令コードに引き続く命令コードがマルチサイクル命令であるか否かを示す連続実行ステータス信号を入力させる。
【００６２】
そして、デコード部１０２から、現在実行中である命令コードに引き続く命令コードがマルチサイクル命令である旨の実行ステータス信号が入力された場合、現在実行中である命令コードがマルチサイクル命令であるときには、マルチサイクル命令実行検出部１１３が、連続割り込み禁止信号をプログラム制御部１１０に出力する。
このような構成とすることにより、上述のベクトル命令の場合と同様に、マルチサイクル命令の連続実行中に外部割り込み処理が行われることによって生ずる不具合を解消することができる。
【００６３】
ここで、第１および第２の実施の形態においては、ベクトル命令またはマルチサイクル命令が実行されている場合もしくは連続して実行されている場合には、外部割り込み処理を常に保留することとして説明したが、この場合、外部割り込み処理が実行されるまでの保留時間が長期化する事態も想定される。
そこで、このような事態が発生することをより少なくするため、実行されているベクトル命令あるいはマルチサイクル命令と、引き続く命令とに関与するデータの依存関係を確認した上で、依存関係がなければ、ベクトル命令あるいはマルチサイクル命令の実行中に外部割り込み処理を開始することが可能である。このような依存関係の確認は、処理される各命令コードのデコード結果が入力されるベクトル命令実行検出部１０９あるいはマルチサイクル命令実行検出部１１３において行うことが可能である。
【００６４】
実行されているベクトル命令と、引き続く命令とに関与するデータについて、依存関係の有無を判定するための条件は、「先行する命令のデスティネーションレジスタがスカラレジスタであり、かつ、引き続く命令が、そのデスティネーションレジスタをソースレジスタとして使用しているか否か」である。例えば、
ＡＤＤ［８］  ％ＳＲ０，％ＶＲ０，ＶＲ１；
ＳＴ［８］  ％ＳＲ０，｛％ＳＲ６，％ＳＲ７｝；
（ただし、第１行は、ベクトルレジスタＶＲ０の値にベクトルレジスタＶＲ１の値を加算し、スカラレジスタＳＲ０に順次格納する命令であり、第２行は、スカラレジスタＳＲ０の値をスカラレジスタＳＲ６，ＳＲ７によって示されるメモリアドレスにストアする命令である。）
という命令列の場合、第１行と第２行の間に割り込み処理が行われると、デスティネーションレジスタであるスカラレジスタＳＲ０の値が割り込み処理中に順次変化してしまい、第２行の処理結果が不正なものとなる。
【００６５】
なお、第１行および第２行のスカラレジスタＳＲ０に代えて、ベクトルレジスタＶＲ２を使用した場合、第２行で用いるベクトルレジスタＶＲ２の値が正しい値に保たれ、第２行の処理結果は不正なものとはならない。
また、実行されているマルチサイクル命令と、引き続く命令とに関与するデータについて、依存関係の有無を判定するための条件は、「先行するマルチサイクル命令のデスティネーションレジスタがスカラレジスタであり、かつ、先行するマルチサイクル命令の結果がデスティネーションレジスタに書き込まれる前に、引き続く命令が、そのデスティネーションレジスタをソースレジスタとして使用しているか否か」である。即ち、マルチサイクル命令においてスカラレジスタの多重割り当てを行っている場合等である。例えば、
ＬＤ  ％ＳＲ０，｛％ＳＲ６，％ＳＲ７｝；
ＡＤＤ  ％ＳＲ２，％ＳＲ０，ＳＲ１；
ＡＤＤ  ％ＳＲ３，％ＳＲ０，ＳＲ１；
（ただし、第１行は、スカラレジスタＳＲ０に外部メモリのアドレス｛％ＳＲ０，％ＳＲ７｝から読み込んだデータを格納する命令であり、第２行は、スカラレジスタＳＲ０の値にスカラレジスタＳＲ１の値を加算し、スカラレジスタＳＲ２に格納する命令である。また、第３行は、スカラレジスタＳＲ０の値にスカラレジスタＳＲ１の値を加算し、スカラレジスタＳＲ３に格納する命令である。）
という命令列の場合、第１行は外部メモリからデータを読み込むマルチサイクル命令であり、その結果は、第３行の処理サイクルで反映されることとなる。つまり、第２行におけるスカラレジスタＳＲ０と第３行におけるスカラレジスタＳＲ０とは、異なる“変数”として扱われている。そのため、第１行と第２行との間に割り込み処理が行われると、第２行におけるスカラレジスタＳＲ０と第３行におけるスカラレジスタＳＲ０とは同一の“変数”となってしまい、第２行の処理結果が不正なものとなる。
【００６６】
より具体的には、ａ，ｂ，ｃ，ｄ，ｘ，ｙを変数とすると、第１行は、ｃ＝ｄ（スカラレジスタＳＲ０に｛％ＳＲ６，％ＳＲ７｝のメモリアドレスの値を代入する）という処理であり、第２行は、ｘ＝ａ＋ｂ（第１行の処理結果が反映される前のスカラレジスタＳＲ０の値とスカラレジスタＳＲ１の値とを加算し、スカラレジスタＳＲ２に代入する）という処理である。また、第３行は、ｙ＝ｃ＋ｂ（第１行の処理結果が反映された後のスカラレジスタＳＲ０の値とスカラレジスタＳＲ１の値とを加算し、スカラレジスタＳＲ２に代入する）という処理である。したがって、第１行と第２行との間に割り込み処理が行われると、本来異なるべき変数ａ，ｃが等しくなってしまい、ＳＲ２，３に格納される値（ｘ，ｙ）も、本来異なる値となるところが等しくなってしまう。
【００６７】
したがって、上述のような依存関係を確認した上で、命令に関与するデータに依存関係がなければ、ベクトル命令あるいはマルチサイクル命令の実行中であっても、外部割り込み処理を実行させることが可能である。
【図面の簡単な説明】
【００６８】
【図１】プロセッサ１の構成を示す図である。
【図２】プロセッサ１の動作を示す状態遷移図である。
【図３】ベクトル命令の処理中に外部割り込みが発生した場合の動作例を示すタイミングチャートである。
【図４】ベクトル命令の処理中に外部割り込みが発生した場合のプロセッサ１の動作を示す模式図である。
【図５】マルチサイクル命令に対応する場合のプロセッサ１の構成を示す図である。
【図６】マルチサイクル命令の処理中に割り込み処理が発生した場合の本発明の動作例を示すタイミングチャートである。
【図７】マルチサイクル命令の処理中に割り込み処理が発生した場合の従来の動作例を示すタイミングチャートである。
【図８】プロセッサ２の構成を示す図である。
【図９】連続するベクトル命令の処理中に割り込み処理が発生した場合の本発明の動作例を示すタイミングチャートである。
【図１０】連続するベクトル命令の処理中に割り込み処理が発生した場合のプロセッサ２の動作を示す模式図である。
【図１１】マルチサイクル命令に対応する場合のプロセッサ２の構成を示す図である。
【図１２】割り込み処理を実行可能な従来のプロセッサ２００の構成を示す図である。
【図１３】ベクトル命令の処理中に割り込みが発生した場合のプロセッサ２００の動作を示す模式図である。
【符号の説明】
【００６９】
１，２，２００  プロセッサ、１０１，２０１  フェッチ部、１０２，２０２  デコード部、１０３，２０３  ＡＬＵ部、１０４，２０４  乗算部、１０５，２０５  加減算部、１０６，２０６  ロード部、１０７，２０７  ストア部、１０８，２０８  レジスタファイル部、１０９  ベクトル命令実行検出部、１０９ａ  ベクトル命令連続実行検出部、１１０，２０９  プログラム制御部、１１１，２１０  例外管理部、１１２，２１１  外部割り込み制御部、１１３  マルチサイクル命令実行検出部、１１３ａ  マルチサイクル命令連続実行検出部、２０９ａ  プログラムカウンタ、２０９ｂ  ステータスレジスタ、２０９ｃ  割り込み処理用プログラムカウンタ、２０９ｄ  割り込みベクタ
【図１】
2005092467.tif 000003
【図２】
2005092467.tif 000004
【図３】
2005092467.tif 000005
【図４】
2005092467.tif 000006
【図５】
2005092467.tif 000007
【図６】
2005092467.tif 000008
【図７】
2005092467.tif 000009
【図８】
2005092467.tif 000010
【図９】
2005092467.tif 000011
【図１０】
2005092467.tif 000012
【図１１】
2005092467.tif 000013
【図１２】
2005092467.tif 000014
【図１３】
2005092467.tif 000015