(57)【要約】【課題】通常処理と割り込み処理を依頼するインターフェースが同じであるコプロセッサにおいて、割り込み発生時に再開する手段を提供する。【解決手段】コプロセッサ２はＣＰＵ１のアドレス空間に割り当てられたメモリマップドＩ／Ｏによってアクセスする内部レジスタとして、検出した異常状態を保持するための「ステータスレジスタ」、割り込み状態を保持する「割り込みステータスレジスタ」と、キュー内部の情報を読み出すための「キューポインタレジスタ」、「キューデータレジスタ」、キューのクリアを行う「キュークリアレジスタ」を保持し、上記内部レジスタを用いて、コプロセッサ２の割り込み処理依頼の判定、処理モード変更の通知、ＣＰＵ１が異常状態の要因となる命令の特定、依頼されている処理の保持、割り込み処理後に再開する処理の特定、割り込み処理後の再開において、処理の再実行、もしくは継続の選択制御を行う。【選択図】        図１
2004234420.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと、バスによって上記プロセッサと接続され、上記プロセッサがバスを介して処理依頼を通知することによって処理を実施するコプロセッサ部とを備える割り込み制御方式において、
上記コプロセッサ部は、プロセッサが割り込み処理を依頼する割り込み状態を示す割り込みステータスレジスタを備え、
上記プロセッサは、上記割り込みステータスレジスタのアドレスを記憶するアドレステーブルを備え、
上記プロセッサは、上記割り込み処理を通知する場合に、上記アドレステーブルに記憶された上記割り込みステータスレジスタのアドレスを読み出し、上記割り込みステータスレジスタのアドレスへ割り込み状態を示す値を書き込む処理を上記コプロセッサ部へバスを介して通知し、
上記コプロセッサ部は、上記割り込みステータスレジスタが割り込み状態を示している場合に、上記プロセッサから通知される処理依頼を割り込み処理であると判断することを特徴とする割り込み制御方式。
【請求項２】
上記コプロセッサ部は、異常状態が発生した場合に、上記プロセッサへ異常状態の発生を通知した後、処理依頼の実施を中止し、
上記プロセッサは、上記異常状態の発生を通知された場合に、上記割り込み状態を示す値を書き込む処理を通知した後、上記異常状態に対応した割り込み処理を上記コプロセッサ部へ通知し、
上記コプロセッサ部は、上記割り込み状態を示す値を書き込む処理を受け付け、上記割り込みステータスレジスタへ割り込み状態を示す値を書き込んだ後、上記プロセッサから通知された割り込み処理を実施することを特徴とする請求項１記載の割り込み制御方式。
【請求項３】
上記コプロセッサ部は、さらに、
複数の処理依頼を格納するキューデータレジスタと、
上記キューデータレジスタに格納された複数の処理依頼から読み出しを開始するポイントを指定するキューポインタレジスタとを備え、
上記アドレステーブルは、さらに、上記キューデータレジスタのアドレスと上記キューポインタレジスタのアドレスとを記憶し、
上記プロセッサは、上記異常状態に対応した割り込み処理を通知した場合、上記アドレステーブルを用いて、上記キューデータレジスタと上記キューポインタレジスタとに格納された情報を読み出す処理を通知し、読み出した情報を用いて、上記割り込み処理が実施された後に通知する処理依頼を再開始処理として決定することを特徴とする請求項２記載の割り込み制御方式。
【請求項４】
上記プロセッサは、上記異常状態の発生が通知された時に上記コプロセッサ部が処理していた処理依頼を再開始処理として特定することを特徴とする請求項３記載の割り込み制御方式。
【請求項５】
上記プロセッサは、複数の連続する処理依頼を通知し、上記異常状態の発生が通知された場合、上記複数の連続する処理依頼の最初の処理を再開始処理として決定することを特徴とする請求項３記載の割り込み制御方式。
【請求項６】
プロセッサと、バスによって上記プロセッサと接続され、上記プロセッサがバスを介して処理依頼を通知することによって処理を実施するコプロセッサ部とを備える割り込み制御方法において、
上記プロセッサは、
上記プロセッサが割り込み処理を依頼する割り込み状態を示す割り込みステータスレジスタを上記コプロセッサ部へ設定し、
上記割り込みステータスレジスタのアドレスをアドレステーブルへ記憶し、
上記割り込み処理を通知する場合に、上記ステータスレジスタのアドレステーブルに記憶された上記割り込みステータスレジスタのアドレスを読み出し、上記割り込みステータスレジスタへ割り込み状態を書き込む処理を上記コプロセッサ部へバスを介して通知し、
上記コプロセッサ部は、
上記割り込みステータスレジスタが割り込み状態を示している場合に、上記プロセッサから通知される処理依頼を割り込み処理であると判断することを特徴とする割り込み制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、ＣＰＵとコプロセッサの割り込み制御に関するものである。
【０００２】
【従来の技術】
ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）からの処理依頼の通知により動作を開始するコプロセッサ（プロセッサの機能を拡張する機能ブロック）では、コプロセッサで検出した異常状態をＣＰＵへ通知する必要がある。この通知後にＣＰＵは、異常発生に伴う処置をする。その後、コプロセッサは後続処理の継続実行、もしくは再実行を行う。コプロセッサは、ＣＰＵコア内部でなく外部回路として外付けされたものを想定する。
【０００３】
ＣＰＵがコプロセッサで検出した異常を認識するには、ＣＰＵがコプロセッサ内部の状態を読み出すことにより、異常状態の発生を検出する方法がある。この方法では、ＣＰＵは、コプロセッサに処理依頼をした後でコプロセッサの状態を読み出す処理が必要になるため、コプロセッサの使用効率が落ちるという問題がある。そのために、コプロセッサが異常検出時の割り込み通知を、外部回路の割り込み調停制御を行う割り込みコントローラに送ることによって、ＣＰＵに異常状態の検出を通知する方法がある。これにより、コプロセッサが通常処理を行う限りにおいては、割り込みをサポートするためにコプロセッサの性能が劣化することがない。
【０００４】
コプロセッサの処理が複数サイクルに渡って実行される場合、コプロセッサの稼動効率を上げるために、コプロセッサの処理をパイプライン化し、ＣＰＵはコプロセッサの処理終了を待つことなく、次の処理依頼を発行することによりコプロセッサだけでなく、ＣＰＵの稼動効率も上げる手段が取られている。
【０００５】
更に割り込み処理からの復帰を考慮すると、ＣＰＵとコプロセッサは協調動作をする必要がある。具体的には、割り込み処理後に処理の継続を行う場合は、ＣＰＵはどこまでの処理依頼がコプロセッサに受け付けられたかの情報を持ち、コプロセッサは受け付けた処理依頼の情報を保持することが必要である。割り込み処理後に再実行を行う場合は、ＣＰＵは処理依頼を最初からやり直し、コプロセッサはそれまでに受け付けた処理依頼を破棄する必要がある。
【０００６】
【特許文献１】
特開平８−１３７７５１号公報
【０００７】
【発明が解決しようとする課題】
割り込み復帰処理をサポートする場合において、処理ごとに内部状態を読み出して確認する手法では処理を実行する期間に無駄が生じるのでコプロセッサをパイプライン化する恩恵を受けられない。また、割り込みを使用する場合、割り込み検出時にＣＰＵはどの処理依頼に対して発生したものか特定できない。何故なら、ＣＰＵはコプロセッサのパイプライン性能を生かすために処理依頼の完了を待つことなく、次の処理依頼を発行するため、割り込み検出の直前に発行した情報が割り込み要因となった処理とは限らないためである。割り込み要因となった処理が特定できない場合、割り込み処理の内容に応じたコプロセッサへのＣＰＵの対応ができなくなる。
【０００８】
割り込み処理からの処理の継続を行う場合、ＣＰＵは、どこまでの処理依頼が受け付けられたかの情報を持つことが必要である。しかし、コプロセッサの性能を有効に使うためにコプロセッサが割り込み信号による通知をＣＰＵへ行う場合、ＣＰＵが割り込みを認識するまで、ＣＰＵはコプロセッサに処理依頼をし続ける。一方、コプロセッサは割り込み処理通知後は、ＣＰＵが割り込み処理を完了するまで依頼された処理の実行を止める必要がある。そのため、ＣＰＵから発行され続ける処理依頼を保持する必要が生じるが、保持できる処理依頼には限界があるため、ある数以上の処理依頼をキャンセルする必要がある。処理依頼のキャンセルとはＣＰＵからの処理依頼の受付の返答を遅らせるのでなく、明示的に受け付けできない旨の返答を返すことである。
【０００９】
しかし、ＣＰＵとコプロセッサのインターフェースには制御を簡略化するため、このキャンセルを示す信号を持たないものも存在する。この場合、処理の継続という形での割り込みからの復帰はできない。何故なら、ＣＰＵがどこまでの処理依頼が受け付けられたかの情報を持つためには、コプロセッサは処理依頼を受け付けられない状態になった場合、ＣＰＵがコプロセッサからの処理依頼のキャンセル処理の実行ができないのであれば、受け付け可能になるまで処理依頼の返答を遅らせる必要がある。しかし、ＣＰＵからの割り込み処理による処理依頼も同じインターフェースで行うことを考慮すると、ＣＰＵの割り込み処理自体も受け付けられなくなり、デッドロックが発生する。
【００１０】
また、ＣＰＵはコプロセッサへの処理依頼を通常時と割り込み処理時と同じインターフェースで行う。このため、コプロセッサは、依頼された処理が割り込み処理を依頼するものか、ＣＰＵが割り込み検出前のキャンセルすべき処理の依頼であるかを判別しなければならない。例えば、コプロセッサ内部情報の読み書きは、通常処理時でも割り込み処理時でも発生する処理であるので判別が必要となる。
【００１１】
コプロセッサが複数のＣＰＵへの対応を考慮するのであれば、割り込みからの復帰に際して、継続と再実行を実現するための方式を必要最小限の回路を保持することにより実装すべきである。２つの対応を行う回路を開発することは、コストの上昇につながり望ましくない。
【００１２】
本発明においては、性能向上のためにパイプライン処理を行い、通常処理と割り込み処理を依頼するインターフェースが同じであることを想定したコプロセッサにおいて、接続するＣＰＵの依頼した処理のキャンセル機能をコプロセッサが有するか否かに関わらず、割り込みに伴う復帰処理をサポートする機能と方式を実現することを目的とする。
【００１３】
【課題を解決するための手段】
この発明に係る割り込み制御方式は、プロセッサと、バスによって上記プロセッサと接続され、上記プロセッサがバスを介して処理依頼を通知することによって処理を実施するコプロセッサ部とを備える割り込み制御方式において、
上記コプロセッサ部は、プロセッサが割り込み処理を依頼する割り込み状態を示す割り込みステータスレジスタを備え、
上記プロセッサは、上記割り込みステータスレジスタのアドレスを記憶するアドレステーブルを備え、
上記プロセッサは、上記割り込み処理を通知する場合に、上記アドレステーブルに記憶された上記割り込みステータスレジスタのアドレスを読み出し、上記割り込みステータスレジスタのアドレスへ割り込み状態を示す値を書き込む処理を上記コプロセッサ部へバスを介して通知し、
上記コプロセッサ部は、上記割り込みステータスレジスタが割り込み状態を示している場合に、上記プロセッサから通知される処理依頼を割り込み処理であると判断することを特徴とする。
【００１４】
【発明の実施の形態】
実施の形態１．
図１は、実施の形態１のシステム構成の一例を表す図である。
コプロセッサ２は、ＣＰＵ１が外部回路を接続するためのバス３に接続され、ＣＰＵ１からコプロセッサ２への処理依頼、ステータス読み出し、コプロセッサ２の内部機構へのアクセスは、ＣＰＵ１のアドレス空間に割り当てられたメモリマップドＩ／Ｏを介した送受信によって行うものとする。これにより、コプロセッサ２とＣＰＵ１は、外部回路を接続するバス３によって接続される。割り込み信号は、その他の外部回路４と同様に割り込み制御回路５に送られ、割り込み制御回路５がどの外部回路からの割り込み処理が発生したかをＣＰＵ１に通知する。
【００１５】
ＣＰＵ１は、コプロセッサ２のアドレス空間に割り当てられた内部レジスタ７へアクセスするために、コプロセッサ２が有する内部レジスタ７のアドレスを記憶するアドレステーブル８（アドレス空間）を有する。
ＣＰＵ１は、アドレステーブル８に記憶するアドレスを用い、バス３を介してコプロセッサ２の内部レジスタ７へアクセスすることができる。
ＣＰＵ１は、プロセッサともいう。
コプロセッサ２は、ＣＰＵ１の機能を拡張する機能ブロックであり、ＣＰＵ１から処理依頼を通知され、通知された処理を実施する。コプロセッサ２は、コプロセッサ部ともいう。
【００１６】
コプロセッサ２は高速化のため、パイプライン処理化されており、ＣＰＵ１は、コマンドの連続実行を可能とするために、コプロセッサ２の処理終了を待たずに次の処理を発行する。コプロセッサ２は、連続発行される処理依頼を保持するためのキューを持ち、内部処理に依存するパイプラインストール発生に伴う影響をキューに保持することで吸収する。パイプライン処理するコプロセッサ２の場合、キューにはパイプライン内部のステージで実行中の処理依頼とパイプライン受付前の処理依頼を保持し、キュー読み出しは処理依頼の実行完了時、もしくは処理依頼に対する割り込み発生時に発生する。また、割り込み発生に伴う割り込み処理の間は特別な操作がない限り、キューを保持し、処理依頼のキャンセルを行うことによりキューへの登録を行わなず、割り込み処理終了に伴い、キューの保持されている処理依頼から実行を開始することを特徴とする。
【００１７】
コプロセッサ２は、処理に伴う異常状態を検出し、異常状態に対応して内部情報を更新する。同時に、コプロセッサ２は、異常状態の検出に伴う通知を割り込み信号６ａとして出力する。割り込み信号６ａは、その他の外部回路４の出力する割り込み信号６ｂとともに割り込み制御回路５に入力される。割り込み制御回路５は、調停制御をした上で割り込み信号６ｃとしてＣＰＵ１へ出力する。ＣＰＵ１は、割り込み信号６ｃの入力によって割り込みを認識する。
【００１８】
コプロセッサ２は、メモリマップドＩ／Ｏとして、検出した異常状態を保持するための「ステータスレジスタ」、割り込み状態を保持する「割り込みステータスレジスタ」と、キュー内部の情報を読み出すための「キューポインタレジスタ」、「キューデータレジスタ」、キューのクリアを行う「キュークリアレジスタ」を保持する。
図２に、コプロセッサ２が保持する内部レジスタ７を示す。
【００１９】
「ステータスレジスタ」は異常状態検出に伴い、異常要因となるビットにのみセットされ、その他の処理はホールドする。ＣＰＵ１は、メモリマップドＩ／Ｏにアクセスすることにより、レジスタの全ての異常要因のビットのクリア、セットが可能となる。
【００２０】
「割り込みステータスレジスタ」は、「通常状態」、「割り込み処理待ち」、「割り込み処理中」のステータスを有する。「割り込みステータスレジスタ」は、通常処理を実行している間は「通常状態」である。「通常状態（ステータスレジスタの異常要因となるビットがセットされいないとき）」では、「割り込みステータスレジスタ」への書き込み処理は無視される。読み出し時は、現在の状態を示す情報を返す。「割り込みステータスレジスタ」は、異常状態検出に伴い、「割り込み処理待ち」となる。
【００２１】
「割り込み処理待ち」状態では、「割り込みステータスレジスタ」は書き込みと読み出しのみ実行可能、その他のレジスタのアクセスは無視される。「割り込み処理待ち」状態での「割り込みステータスレジスタ」の書き込みに伴い、「割り込み処理中」状態となる。「割り込み処理待ち」状態での「割り込みステータスレジスタ」読み出し時は、現在の状態を示す情報を返す。
【００２２】
「割り込み処理中」状態での「割り込みステータスレジスタ」の書き込みに伴い、「通常状態」となる。「割り込み処理中」状態での「割り込みステータスレジスタ」読み出し時は、現在の状態を示す情報を返す。
【００２３】
「キューポインタレジスタ」は、コプロセッサ２が保持するキューで保持するＣＰＵ１から依頼された処理を指定するためのレジスタであり、常に書き込み、読み出しが可能である。
【００２４】
「キューデータレジスタ」は、「キューポインタレジスタ」で指定されるキューのエントリの読み出しを行う。キューのエントリは、「コマンドキューエントリ」ともいう。コマンドキューエントリは、キューデータレジスタへ書き込まれたコマンドであり、ＣＰＵ１から処理依頼を受けたコマンドをいう。読み出されたキューデータは、現時点でのエントリが有効かどうかを示すための有効ｂｉｔを保持している。
有効ｂｉｔは、ＣＰＵ１から依頼された処理をコプロセッサ２が受付をした時点で有効となる。また、依頼された処理が完了した時点で無効（処理終了となり、エントリを空けることを意味する）となる。従って、有効ｂｉｔが有効である場合、コプロセッサ２は、ＣＰＵ１から処理依頼を受け付け、受け付けた処理依頼の処理を完了していない状態を意味する。
【００２５】
「キュークリアレジスタ」は、コプロセッサ２が保持するキューの情報をクリアするためのレジスタである。「割り込み処理中」状態時のみ書き込み可能であり、書き込みに伴いキューの内容をクリアする。
【００２６】
上記の性質を持つレジスタを保持することにより、以下の３つの問題を解決する。
（１）コプロセッサ２の割り込み処理依頼の判定
（２）ＣＰＵ１が異常状態の要因となる命令を特定する方法
（３）割り込み処理再開を行うための方法
以下に説明する。
【００２７】
（１）コプロセッサ２の割り込み処理依頼の判定
割り込み処理が発生する場合のＣＰＵ１のコプロセッサ２へのアクセスは、図３のようになる。図３の矢印は、ＣＰＵ１からコプロセッサ２の内部レジスタアクセスを示している。
【００２８】
コプロセッサ２は、異常状態の要因となる命令２１により＜１．通常処理＞から＜２．割り込み処理待ち＞２２となり、割り込み信号２７をアサートする。割り込み処理が開始されるまでにもＣＰＵ１からコプロセッサ２への処理依頼は発行されている。＜２．割り込み処理待ち＞２２においては、コプロセッサ２は、ＣＰＵ１からの処理依頼を実施しないことを期待する。しかし、コプロセッサ２は、＜２．割り込み処理待ち＞２２と＜３．割り込み処理中＞２４とのいずれの区間でＣＰＵ１が依頼した処理であるかの区別がつかない。
【００２９】
ＣＰＵ１は割り込み検出した場合は、割り込み処理本体の処理を発行する前に「割り込みステータスレジスタ」への書き込み処理２３を発行する。コプロセッサ２は＜２．割り込み処理待ち＞の間は、「割り込みステータスレジスタ」への書き込み以外の処理依頼を全てキャンセルする、もしくは無視することにより、割り込み処理に伴う処理依頼までのＣＰＵ１からの処理依頼の実行を抑止する。「割り込みステータスレジスタ」への書き込み処理２３によりコプロセッサ２は＜３．割り込み処理中＞２４となり、それ以降は、ＣＰＵ１からの処理依頼は割り込み処理に伴う処理依頼として実行する。
【００３０】
ＣＰＵ１は割り込み処理終了に伴い、「割り込みステータスレジスタ」への書き込み依頼２５を発行する。「割り込みステータスレジスタ」への書き込みによりコプロセッサ２は＜４．再開処理＞となり、それ以降はＣＰＵ１からの処理依頼を実行する。
【００３１】
（２）ＣＰＵ１が異常状態の要因となる命令を特定する方法
内部レジスタ７の「キューデータレジスタ」と「キューポインタレジスタ」により、コマンドキューエントリを読み出す。「キューデータレジスタ」はエントリが有効であるかの情報を保持している。
割り込み発生時（異常状態の要因となる命令２１を受けたとき）は、キューの先頭のエントリは割り込み継続を行う時の最初の処理依頼を示す。これは異常状態の要因となる処理の次の処理依頼を指す。キューは割り込み発生時は、全エントリの処理依頼が有効になっていない（必ず空きが一つ存在する）。何故なら、キューの読み出しは割り込み発生時に行われ、割り込み発生に伴いキューへの登録が行われないため、必ずエントリが一つ空くこととなる。通常キューのエントリはラップアラウンド式に制御されるが、エントリに空きがあることにより、割り込み発生時のキューの先頭を以下のように決定できる。
【００３２】
「キューポインタレジスタ」を０から最大エントリ数まで連続で「キューデータレジスタ」を読み出す。読み出した「キューデータレジスタ」の有効ｂｉｔが無効から有効になったときの「キューポインタレジスタ」の指す「キューデータレジスタ」が再開後の先頭の処理依頼となる。よって、異常状態の要因となる処理は、その時の「キューポインタレジスタ」−１となる。
【００３３】
（３）割り込み処理再開を行うための方法
（３．１）異常状態の要因となる処理の直後から再開：
割り込み発生時に異常状態の要因となる処理の次から再開することを想定する。コプロセッサ２は＜２．割り込み処理待ち＞２２、＜３．割り込み処理中＞２４の間はキューにエントリを保持しており、＜２．割り込み処理待ち＞２２、＜３．割り込み処理中＞２４から＜５．再開処理＞２６に戻った際には異常状態の要因となる処理の次の処理依頼から実行を再開する。
【００３４】
（３．２）処理の再実行を伴う再開：
割り込み発生時は最初の処理依頼からやり直すことを想定する。ここで、最初の処理依頼とは、図３の＜１．通常処理＞の最初の処理依頼（図３の＜１．通常処理＞左側の矢印）を指す。コプロセッサ２は、割り込み処理中でもキューを保持している。そのため、ＣＰＵ１は＜３．割り込み処理中＞２４において、「コマンドキュークリアレジスタ＞にアクセスすることでキューをクリアする処理依頼をコプロセッサ２に行う。
【００３５】
次に、ＣＰＵ１がコプロセッサ２からの処理依頼のキャンセル指示を処理する機能の有無によって動作が異なる点について説明する。
まず、ＣＰＵ１は、コプロセッサ２からの処理依頼のキャンセル指示を処理する機能を有する場合の動作について説明する。
コプロセッサ２は、ＣＰＵ１へキャンセル指示を通知する。すなわち、コプロセッサ２は、ＣＰＵ１からの処理依頼を実施しなかったことを、ＣＰＵ１へ通知する。
【００３６】
割り込みに伴う復帰の際に、継続処理を行う場合のＣＰＵ１とコプロセッサ２の動作を示す。割り込み処理が発生する場合のＣＰＵ１のコプロセッサ２へのアクセスは、図３のようになる。
【００３７】
コプロセッサ２は、処理実行中に割り込みが発生した場合、割り込み信号２７をアサートしてキューを保持し、＜２．割り込み処理待ち＞２２となる。この状態においては、ＣＰＵ１からの処理依頼は「割り込みステータスレジスタ」の書き込み処理以外全てキャンセルする。すなわち、コプロセッサ２は、異常状態をＣＰＵ１へ通知した後、「割り込みステータスレジスタ」の書込み処理以外の処理依頼をＣＰＵ１から受け取った場合、受け取った処理をすべてキャンセルする。「割り込みステータスレジスタ」への書き込み処理２３に伴い、＜３．割り込み処理中＞２４となり、以後の処理依頼を割り込みに伴う処理として受付、実行する。再度の「割り込みステータスレジスタ」への書き込み処理２５に伴い、＜５．再開処理＞２６となり、保持したキューの先頭の処理依頼からの実行を開始する。
【００３８】
ＣＰＵ１は、コプロセッサ２による割り込み信号６ａのアサートから割り込み制御回路５の割り込み発生通知（割り込み信号６ｃ）まで複数の処理をコプロセッサ２に依頼している。但し、コプロセッサ２が割り込みを検出した後の処理依頼はキャンセルの旨通知されているので、ＣＰＵ１はその依頼をキャンセルされたものとして扱う。これにはリトライ、再実行による処理が想定される。割り込み発生通知後、ＣＰＵ１は割り込み処理を行うため、「割り込みステータスレジスタ」への書き込み処理２３を依頼し、コプロセッサ２に割り込み処理開始を通知し、＜３．割り込み処理中＞２４となる。それ以後の処理依頼により、異常状態の要因となる処理を特定し、ステータスをチェックする、といった割り込み処理をＣＰＵ１は実行する。ステータスをチェックするとは、ＣＰＵ１が、ステータスレジスタを読み出して異常要因となるビットをチェックするということを意味する。割り込み処理終了に際して、再度「割り込みステータスレジスタ」への書き込み処理２５を行い、コプロセッサ２を＜４．再開処理＞の状態にしてコプロセッサ２の処理を再開させる。ＣＰＵ１は、割り込み発生までにコプロセッサ２に依頼済みしている処理以降の処理をコプロセッサ２に依頼する。
【００３９】
次に、ＣＰＵ１は、コプロセッサ２からの処理依頼のキャンセル指示を想定しない場合について説明する。
【００４０】
割り込みに伴う復帰の際に、再実行を行う場合のＣＰＵ１とコプロセッサ２の動作を示す。割り込み処理が発生する場合のＣＰＵ１のコプロセッサ２へのアクセスは、以下のようになる。
【００４１】
コプロセッサ２は処理実行中に割り込みが発生した場合、割り込み信号２７をアサートしてキューを保持し、＜２．割り込み処理待ち＞２２となる。この状態においては、ＣＰＵ１からの処理依頼は「割り込みステータスレジスタ」の書き込み処理以外全て無視する。ここで無視する、ということの意味はバス上の処理依頼としては受信するが、コプロセッサ２としては処理を実行しない、という意味である。コプロセッサ２は、「割り込みステータスレジスタ」への書き込み処理２３に伴い、＜３．割り込み処理中＞２４となり、以後の処理依頼を割り込みに伴う処理として受付、実行する。コプロセッサ２は、＜３．割り込み処理中＞２４の間に「キュークリアレジスタ」の書き込み処理が来るので、これによりキューをクリアし、コプロセッサ２としてはリセットされた状態となる。再度の「割り込みステータスレジスタ」への書き込み処理２５に伴い、＜４．再開処理＞２６となり、割り込み再開後にＣＰＵ１から依頼された処理から実行する。
【００４２】
ＣＰＵ１は、コプロセッサ２による割り込み信号６ａのアサートから割り込み制御回路５の割り込み発生通知（割り込み信号６ｃ）まで複数の処理をコプロセッサ２に依頼している。割り込み発生通知後は、割り込み処理を行うため、「割り込みステータスレジスタ」への書き込み処理２３を依頼し、コプロセッサ２に割り込み処理開始を通知し、＜３．割り込み処理中＞２４となる。それ以後の処理依頼により、異常状態の要因となる処理を特定し、ステータスをチェックする、といった割り込み処理をＣＰＵ１は実行する。再実行を行うために、コプロセッサ２が保持している未実行の処理依頼をクリアする必要があるため、＜３．割り込み処理中＞２４の間に「キュークリアレジスタ」の書き込み処理依頼を行う。割り込み処理終了に際して、再度「割り込みステータスレジスタ」への書き込み処理２５を行い、コプロセッサ２を＜４．再開処理＞としてコプロセッサ２の処理を再開させる。ＣＰＵ１は、コプロセッサ２に対しては最初の処理から実行するように依頼する。
【００４３】
【発明の効果】
この発明によれば、コプロセッサ２へ内部レジスタを設置し、ＣＰＵ１がメモリマップドＩ／Ｏを用いて内部レジスタへアクセスすることにより、割り込み処理から復帰した場合に、処理の継続あるいは処理の再実行とを選択して実施することができる。
特に、「割り込みステータスレジスタ」をコプロセッサ２へ備え、ＣＰＵ１からアクセスすることによって、割り込みに伴う復帰処理をサポートする機能を実現できる。
【図面の簡単な説明】
【図１】ＣＰＵとコプロセッサの接続を表す図。
【図２】コプロセッサ２が保持する内部レジスタ７を示す図。
【図３】割り込み処理フローを表す図。
【符号の説明】
１  ＣＰＵ、２  コプロセッサ、３  バス、４  その他の外部回路、５  割り込み制御回路、６ａ  割り込み信号（コプロセッサから出力される割り込み検出信号）、６ｂ  割り込み信号（外部回路から出力される割り込み検出信号）、６ｃ  割り込み信号（ＣＰＵに入力される割り込み信号）、８  アドレステーブル、９  内部レジスタ、２０  通常処理（割り込み検出前の処理）、２１  命令（割り込み検出要因となる処理）、２２  割り込み処理待ち（割り込み検出後ＣＰＵによる割り込み処理開始までの処理）、２３  書き込み処理（割り込み処理開始を示す「割り込みステータスレジスタ」書き込み処理）、２４  割り込み処理中、２５  書き込み処理（割り込み処理終了を示す「割り込みステータスレジスタ」書き込み処理）、２６  再開処理（割り込み処理終了後の再開処理）、２７割り込み処理（割り込み検出を通知する割り込み信号）、２８  ＣＰＵの処理発行の時間軸、２９  コプロセッサの処理受信の時間軸。
【図１】
2004234420.tif 000003
【図２】
2004234420.tif 000004
【図３】
2004234420.tif 000005