(57)【要約】【課題】例外や割り込みの発生時に、その発生状態を正確に特定するとともに全体の処理速度を向上させる。【解決手段】例外バス３３に接続する演算器もしくはデータ転送器に例外が発生すると、例外発生信号が出力される。例外処理部６は、この例外発生信号を検出すると、例外原因を特定し、例外発生をバスマスタ３に通知する。バスマスタ３は、そのとき実行していたデータの転送命令を停止し、この命令およびこの命令の次に実行される命令が格納されているアドレスを示すプログラムカウンタの値を、それぞれプログラムカウンタ退避レジスタ２５および実行中命令退避レジスタ３ｃに退避させ、プログラムカウンタ２１に例外処理のためのプログラムの先頭アドレスを書き込むことによって例外処理に制御を移す。【選択図】        図２
2004362368.tif 000002
【特許請求の範囲】
【請求項１】
読み込んだ命令に従って動作するプロセッサにおいて、
レジスタ間でデータを転送するためのレジスタ間転送手段と、
前記レジスタ間転送手段を通じてデータが入力される演算データレジスタとデータが出力される結果格納レジスタとを具備し、すべての前記演算データレジスタにデータが入力されると、入力されたデータを用いて所定の演算処理を行い、その演算結果を前記結果格納レジスタに書き込み、例外の発生で処理を中断して例外発生信号を出力する、それぞれ単一の演算機能を有する複数の演算手段と、
前記例外発生信号を伝える例外発生信号線に接続し、前記例外発生信号が出力されたことを検出すると、その例外原因を特定し、例外発生の通知を行う例外受付手段と、
例外発生時の情報を格納する退避レジスタを具備し、通常時にはデータの転送先および転送元のレジスタを指定する情報が記述された前記命令を読み込んでデコードすることにより前記レジスタ間転送手段を通じたデータ転送動作を制御し、前記例外発生の通知によって転送実行中の命令を停止し、前記命令および次に実行される命令が格納されているアドレスを示すプログラムカウンタの値を前記退避レジスタに格納し、例外処理を実行させるためのプログラムが格納された先頭アドレスを前記プログラムカウンタに書き込むことによって前記例外処理に制御を移す転送制御手段と、
を有することを特徴とするプロセッサ。
【請求項２】
前記例外受付手段は、さらに、外部割り込みを発生させる割り込み制御手段と接続し、前記割り込み制御手段が発生させる外部割り込み信号を検出すると、割り込み発生の通知を行い、
前記転送制御手段は、前記割り込み発生の通知によって、転送実行中の命令が終了すると、前記命令および前記プログラムカウンタの値を前記退避レジスタに格納し、割り込み処理を実行させるためのプログラムが格納された先頭アドレスを前記プログラムカウンタに書き込むことによって前記割り込み処理に制御を移すことを特徴とする請求項１記載のプロセッサ。
【請求項３】
前記転送制御手段は、前記例外処理または前記割り込み処理から制御が戻ってきた場合、前記退避レジスタに格納した停止させた転送実行中の命令の復帰と次の命令アドレスを前記プログラムカウンタに転送し、処理を復帰させることを特徴とする請求項１または２記載のプロセッサ。
【請求項４】
少なくとも前記例外発生時に、前記演算手段の前記演算データレジスタに入力されたデータを読み出し、要求元へ転送する入力データ転送手段を有することを特徴とする請求項１記載のプロセッサ。
【請求項５】
前記例外受付手段は、前記例外原因を格納し、レジスタのデータを要求元へ転送するデータ転送手段を通じて前記例外原因を読み出し可能な例外原因レジスタを具備し、特定された前記例外原因を前記例外原因レジスタに格納することを特徴とする請求項１記載のプロセッサ。
【請求項６】
前記転送制御手段は、前記例外原因レジスタに格納された前記例外原因に応じて前記例外原因ごとに用意された前記例外処理の先頭アドレスを選択し、前記プログラムカウンタに転送することを特徴とする請求項５記載のプロセッサ。
【請求項７】
外部のメモリから読み込んだデータ、および前記メモリへ書き出すデータを一時記憶するデータキャッシュと、
前記レジスタ間転送手段を通じてデータの入出力が行われる第１のアドレスレジスタと第１のデータレジスタを具備し、前記第１のアドレスレジスタにデータが入力されると前記データキャッシュを通じて前記第１のアドレスレジスタのデータで指示される前記メモリからデータを読み出して前記第１のデータレジスタに転送するデータ読み出し手段と、
前記レジスタ間転送手段を通じてデータの入出力が行われる第２のアドレスレジスタと第２のデータレジスタを具備し、前記第２のアドレスレジスタと前記第２のデータレジスタの双方にデータが入力されると前記データキャッシュを通じて前記第２のデータレジスタのデータを前記第２のアドレスレジスタのデータで指示される前記メモリに転送するデータ転送手段と、
前記レジスタ間転送手段を通じてデータの入出力が行われる第３のアドレスレジスタと第４のアドレスレジスタを具備し、前記第３のアドレスレジスタと前記第４のアドレスレジスタの双方にデータが入力されると、入力されたデータをそれぞれ転送元アドレスおよび転送先アドレスとして前記データキャッシュを通じて前記メモリ上のデータ転送を行うメモリ転送手段と、
をさらに有し、
前記データ読み出し手段、前記データ転送手段および前記メモリ転送手段は、例外が発生すると処理を中断して前記例外発生信号を出力することを特徴とする請求項１記載のプロセッサ。
【請求項８】
少なくとも前記例外発生時に、前記データ読み出し手段、前記データ転送手段および前記メモリ転送手段の前記アドレスレジスタあるいは前記データレジスタに入力されたデータを読み出し、要求元へ転送する入力データ転送手段を有することを特徴とする請求項７記載のプロセッサ。
【請求項９】
前記命令は、その実行回数を指定する情報をさらに含み、
前記転送制御手段は、前記例外発生時に前記実行回数が指定された命令を実行中の場合は停止した時点での残りの実行回数を前記退避レジスタに格納することを特徴とする請求項１記載のプロセッサ。
【請求項１０】
読み込んだ命令に従って動作するプロセッサの例外処理方法において、
レジスタ間でデータを転送するレジスタ間転送手段を通じてデータが入力される演算データレジスタにデータが入力されると、入力されたデータを用いて所定の演算処理を行い、前記レジスタ間転送手段を通じてデータが出力される結果格納レジスタにその演算結果を書き込むとともに、例外の発生で処理を中断して例外発生信号を出力する、それぞれ単一の演算機能を有する複数の演算手段を、データの転送先および転送元のレジスタを指定する情報が記述された前記命令をデコードして前記レジスタ間転送手段を通じたデータ転送を制御することによって動作制御し、
前記演算手段の出力した前記例外発生信号を検出すると、前記例外発生信号に基づいてその例外原因を検出し、
例外発生時に転送実行中の命令を停止し、前記命令および次に実行される命令が格納されているアドレスを示すプログラムカウンタの値を退避レジスタに退避し、
前記例外原因に応じた例外処理を実行させるためのプログラムが格納された先頭アドレスを前記プログラムカウンタに書き込むことによって制御を前記例外処理に移すことを特徴とする例外処理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、読み込んだ命令に従って演算処理等の種々の処理を行うプロセッサおよび例外処理方法に関し、特に、例外や割り込み発生時の処理時間を短縮するプロセッサおよび例外処理方法に関する。
【０００２】
【従来の技術】
現在、コンピュータや携帯端末はもとより、あらゆる電子機器においてマイクロプロセッサが用いられている。従来のマイクロプロセッサは、演算等の処理を指定するオペコードが与えられて、このオペコードをデコードすることにより、各演算器等の制御を行っていた。
【０００３】
図９は、従来のプロセッサの構成例を示す機能ブロック図である。
図９に示すプロセッサは、命令の取得と命令の発行とを行う命令制御部１１０と、命令に従って演算等を実行するデータパス部１２０と、データパス部１２０による処理の実行結果を確定する確定処理部１３０とを具備する。データパス部１２０は、例えば、整数演算器１２１、浮動小数演算器１２２、読み出し／書き出し器１２３等を具備する。
【０００４】
命令制御部１１０は、図示しない外部バスを介して読み込んだ命令に対するデコード処理を行い、命令実行のための内部の制御信号を生成する。データパス部１２０は、命令制御部１１０からの制御信号に従って、各種演算等の処理を行う。例えば、整数演算器１２１は、整数に対する加算、乗算等の演算を行う。また、浮動小数演算器１２２は、浮動小数に対する加算、乗算等の演算を行う。また、読み出し／書き出し器１２３は、図示しない外部メモリとの間でデータの読み出しや書き出しを行う。確定処理部１３０は、データパス部１２０による処理結果を確定値としてよいか否かを判定する。
【０００５】
ところで、このようなプロセッサにおいて、例外や割り込みが発生した場合には、通常、命令制御部１１０が発行した命令の順序通りに、データパス部１２０における処理結果が確定処理部１３０によって確定される必要がある。これにより、例外や割り込みの発生状態を正確に特定してこのときのレジスタ状態を保持するとともに、後続の命令を中止させることができる。一方、命令の実行結果の確定順を命令の記述順に行わない場合は、例外や割り込みの発生状態の特定が不正確になってしまう。
【０００６】
なお、例外発生時の多重例外の発生を禁止し、例外からの復帰時の処理の整合性を向上させた例外処理装置として、以下のようなものがあった（特許文献１参照）。この例外処理装置は、並列同時実行可能な演算ユニットにおいて例外発生を検出すると、命令の実行が終了していない演算ユニットの動作を中断し、プログラムカウンタや実行中断した命令の数など、例外処理ハンドラが必要とする例外情報を退避させる。そして、例外要因が除去され、例外処理ハンドラから復帰する場合には、退避された実行が中断された命令の個数に基づいて、中断された命令の再実行を繰り返し、例外発生前シーケンスに復帰する。
【０００７】
【特許文献１】
特開平５−２００７０号公報
【０００８】
【発明が解決しようとする課題】
上述したように、従来のプロセッサでは、例外や割り込みの発生状態を正確に特定するために、命令の実行結果の確定順を命令の記述順に行うように制御する必要があった。このため、実行結果の確定順を制御する確定処理部１３０のような余分なハードウェアが必要となるとともに、このような制御処理が処理速度の高速化を妨げる要因となっていた。
【０００９】
また、上記の特許文献１で開示された例外処理装置では、例外の発生時に、実行が終了していないすべての演算が中断される構造となっているため、復帰時に再び演算を実行する必要があり、処理速度の高速化を阻害する原因となる。
【００１０】
本発明はこのような課題に鑑みてなされたものであり、例外や割り込みの発生時に、その発生状態を正確に特定可能でありながら全体の処理速度を向上させることが可能なプロセッサ及び例外処理方法を提供することを目的とする。
【００１１】
【課題を解決するための手段】
本発明では上記課題を解決するために、読み込んだ命令に従って動作するプロセッサにおいて、レジスタ間でデータを転送するためのレジスタ間転送手段と、前記レジスタ間転送手段を通じてデータが入力される演算データレジスタとデータが出力される結果格納レジスタとを具備し、すべての前記演算データレジスタにデータが入力されると、入力されたデータを用いて所定の演算処理を行い、その演算結果を前記結果格納レジスタに書き込み、例外の発生で処理を中断して例外発生信号を出力する、それぞれ単一の演算機能を有する複数の演算手段と、前期例外発生信号を伝える例外発生信号線に接続し、前記例外発生信号が出力されたことを検出すると、その例外原因を特定し、例外発生の通知を行う例外受付手段と、例外発生時の情報を格納する退避レジスタを具備し、通常時にはデータの転送先および転送元のレジスタを指定する情報が記述された前記命令を読み込んでデコードすることにより前記レジスタ間転送手段を通じたデータ転送動作を制御し、前記例外発生の通知によって転送実行中の命令を停止し、前記命令および次に実行される命令が格納されているアドレスを示すプログラムカウンタの値を前記退避レジスタに格納し、例外処理を実行させるためのプログラムが格納された先頭アドレスを前記プログラムカウンタに書き込むことによって前記例外処理に制御を移す転送制御手段と、を有することを特徴とするプロセッサが提供される。
【００１２】
このようなプロセッサでは、通常時には、転送制御手段によって、演算手段が具備する演算データレジスタと、同一または別の演算手段が具備する結果格納レジスタとの間のレジスタ間転送手段を通じたデータ転送動作が制御される。各演算手段は、すべての演算データレジスタにデータが入力されることによって、動作を開始するので、転送制御手段によるデータ転送制御のみにより、各演算手段の動作が制御される。演算手段は例外が発生すると、処理を中断して例外発生信号を出力する。例外受付手段は、この例外発生信号を検出すると、例外原因を特定し、例外発生を転送制御手段に通知する。転送制御手段は、そのとき実行していたデータの転送命令を停止し、この命令およびこの命令の次に実行される命令が格納されているアドレスを示すプログラムカウンタの値を退避レジスタに格納し、プログラムカウンタに例外処理のためのプログラムの先頭アドレスを書き込むことによって例外処理に制御を移す。従って、例外が発生した演算手段以外は、それぞれの演算処理終了後に自動的に停止する。
【００１３】
また、上記課題を解決するために、読み込んだ命令に従って動作するプロセッサの例外処理方法において、レジスタ間でデータを転送するレジスタ間転送手段を通じてデータが入力される演算データレジスタにデータが入力されると、入力されたデータを用いて所定の演算処理を行い、前記レジスタ間転送手段を通じてデータが出力される結果格納レジスタにその演算結果を書き込むとともに、例外の発生で処理を中断して例外発生信号を出力する、それぞれ単一の演算機能を有する複数の演算手段を、データの転送先および転送元のレジスタを指定する情報が記述された前記命令をデコードして前記レジスタ間転送手段を通じたデータ転送を制御することによって動作制御し、前記演算手段の出力した前記例外発生信号を検出すると、前記例外発生信号に基づいてその例外原因を検出し、例外発生時に転送実行中の命令を停止し、前記命令および次に実行される命令が格納されているアドレスを示すプログラムカウンタの値を退避レジスタに退避し、前記例外原因に応じた例外処理を実行させるためのプログラムが格納された先頭アドレスを前記プログラムカウンタに書き込むことによって制御を前記例外処理に移すことを特徴とする例外処理方法、が提供される。
【００１４】
このような例外処理方法では、演算手段が具備する演算データレジスタと、結果格納レジスタとの間のレジスタ間転送手段を通じたデータ転送を制御することによって演算手段の動作が制御されている演算手段に例外が発生し、例外発生信号が出力されると、この例外発生信号に基づいて例外原因を特定し、このとき実行していたデータの転送命令を停止し、この命令およびこの命令の次に実行される命令が格納されているアドレスを示すプログラムカウンタの値を退避レジスタに格納し、プログラムカウンタに例外処理のためのプログラムの先頭アドレスを書き込むことによって例外処理に制御を移す。
【００１５】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照して説明する。
図１は、本発明のプロセッサの構成例を示す機能ブロック図である。
【００１６】
図１に示すプロセッサ１は、命令の取得と命令の発行とを行う命令取り出し器（図中ではＦｅｔｃｈと表示）２と、入力された命令に従って、アドレスバス３１、データバス３２および例外バス３３によってなる内部バスに接続された各種のデータ転送器や演算器の動作を制御するバスマスタ３と、外部から読み込まれた命令を記憶する命令キャッシュ４ａと、処理結果や外部から読み込まれたデータを記憶するデータキャッシュ４ｂと、外部からのデータ等の読み込みや、処理結果の外部への出力を行うための外部バスＩ／Ｆ（インタフェース）５と、例外発生および外部割込みを監視する例外処理部６と、を具備する。
【００１７】
また、内部のアドレスバス３１およびデータバス３２には、例えば外部とのデータ転送処理等を行うデータ転送器や、各種の演算処理を行う演算器等が接続されている。データ転送器としては、読み出し器（図中ではＬｏａｄと表示）６１、書き出し器（同Ｓｔｏｒｅ）６２、メモリ転送器（同Ｍｏｖｅ）６３、スタック処理器（同Ｓｔａｃｋ）６４、およびデータ交換器（同Ｓｗｐ）６５が接続されている。また、演算器としては、比較器（同Ｃｍｐ）６６、整数加算器（同Ａｄｄ）６７、整数減算器（同Ｓｕｂ）６８、整数乗算器（同Ｍｕｌ）６９、整数除算器（同Ｄｉｖ）７０、論理積演算器（同Ａｎｄ）７１、論理和演算器（同Ｏｒ）７２、排他的論理積演算器（同Ｘａｎｄ）７３、排他的論理和演算器（同Ｘｏｒ）７４、ビット反転演算器（同Ｎｏｔ）７５、浮動小数加算器（同Ｆａｄｄ）７６、浮動小数減算器（同Ｆｓｕｂ）７７、浮動小数乗算器（同Ｆｍｕｌ）７８、浮動小数除算器（同Ｆｄｉｖ）７９、および積和演算器（同Ｍｕｌａｄｄ）８０が接続されている。さらに、これらとともに、アドレスバス３１およびデータバス３２には、汎用レジスタ８１が接続されている。
【００１８】
また、これらの演算器およびデータ転送器のうち、例外を発生させる可能性のあるものは、例外発生信号を伝える例外発生信号線（以下、例外バスとする）３３を介して例外処理部６と接続している。例えば、データ転送器は、データキャッシュ４ｂを介して外部とのデータ転送処理を行う際に、ページフォルト等の例外が発生する場合がある。また、演算器は、演算によりオーバーフローやアンダーフロー、ゼロ割などによって有効範囲外のデータ入力や演算結果が得られた場合に例外が発生する。
【００１９】
また、このプロセッサ１の外部には、割込みコントローラ８と、外部バスＩ／Ｆ５から外部のアドレスバス５１およびデータバス５２を介して、書き換え可能なメモリ１０とが接続されている。
【００２０】
命令取り出し器２は、命令キャッシュ４ａおよび外部バスＩ／Ｆ５を介して、外部のメモリ１０から命令を読み込み、バスマスタ３に対して出力する。バスマスタ３は、入力された命令を解析し、アドレスバス３１にセレクト信号を出力してレジスタのアドレス指定を行い、場合によってはデータバス３２を通じて即値を送信することにより、アドレスバス３１およびデータバス３２に接続した各データ転送器の間のデータ転送動作を制御する。また、読み込んだ命令中に命令実行回数の情報が含まれている場合には、この命令を指定された回数分だけ繰り返して実行させる。
【００２１】
命令キャッシュ４ａは、外部バスＩ／Ｆ５を通じてメモリ１０から読み込まれた命令を記憶しておき、命令取り出し器２により指定されたメモリ１０上のアドレスがヒットした場合に、記憶していた命令を命令取り出し器２に対して出力する。データキャッシュ４ｂは、外部バスＩ／Ｆ５を通じてメモリ１０から読み込まれたデータを記憶しておき、読み出し器６１により指定されたメモリ１０上のアドレスがヒットした場合に、記憶していたデータを読み出し器６１に出力する。外部バスＩ／Ｆ５は、プロセッサ１の内部の信号を外部のバス信号に変換し、例えばメモリ１０等の外部とのデータの読み書きを行う。
【００２２】
アドレスバス３１およびデータバス３２に接続された読み出し器６１、書き出し器６２、メモリ転送器６３、スタック処理器６４、データ交換器６５、比較器６６、整数加算器６７、整数減算器６８、整数乗算器６９、整数除算器７０、論理積演算器７１、論理和演算器７２、排他的論理積演算器７３、排他的論理和演算器７４、ビット反転演算器７５、浮動小数加算器７６、浮動小数減算器７７、浮動小数乗算器７８、浮動小数除算器７９および積和演算器８０は、入力用のレジスタおよび出力がある場合には出力用のレジスタを具備している。これらはともにアドレスバス３１およびデータバス３２に接続されている。バスマスタ３によりアドレスバス３１を通じて指定された入力用のレジスタに、データバス３２を通じてデータが入力されると、所定のデータ処理を開始する。これらのデータ転送器および演算器は、それぞれ１つの処理機能のみ有している。データ処理が終了し、得られた処理結果のデータは、出力用のレジスタに格納する。この格納されたデータは、バスマスタ３によるアドレス指定に基づいて、他のデータ転送器や演算器等に転送される。
【００２３】
読み出し器６１は、それぞれ１つずつのアドレスレジスタとデータレジスタを具備する。読み出し器６１は、アドレスレジスタにデータが格納されると、格納されたデータを読み出しアドレスとして、データキャッシュ４ｂおよび外部バスＩ／Ｆ５を通じて外部のメモリ１０にアクセスする。そして、メモリ１０上の対応するアドレスからデータを読み出し、データレジスタに格納する。また、出力した読み出しアドレスがデータキャッシュ４ｂにおいてヒットした場合には、このデータキャッシュ４ｂから対応するデータを読み出し、データレジスタに格納する。
【００２４】
書き出し器６２は、アドレスレジスタとデータレジスタを１つずつ具備しており、アドレスレジスタにはメモリ１０上のデータ書き出し先のアドレスが格納され、データレジスタには、メモリ１０に書き出すデータが格納される。アドレスレジスタおよびデータレジスタの双方にデータが入力されると、データキャッシュ４ｂおよび外部バスＩ／Ｆ５を通じて外部のメモリ１０にアクセスし、メモリ１０上の対応するアドレスにデータを書き出す。
【００２５】
メモリ転送器６３は、２つのアドレスレジスタと１つの転送量レジスタを具備しており、一方のアドレスレジスタには、メモリ１０あるいは他のメモリ上の転送元となるアドレスが格納され、もう一方のアドレスレジスタには転送先となるアドレスが格納される。また、転送量レジスタには、指定されたアドレスから読み出すデータのデータサイズが格納される。これらのデータが入力されると、データキャッシュ４ｂおよび外部バスＩ／Ｆ５を通じて外部のメモリ１０あるいはその他のメモリにアクセスし、対応するアドレス間のデータ転送を指示する。
【００２６】
スタック処理器６４は、ポインタレジスタと、データレジスタとを具備しており、ポインタレジスタには、メモリ１０上のアドレスを指定するためのスタックポインタが格納され、データレジスタには、メモリ１０への書き出し対象となるデータが格納される。これらのデータが入力されると、データレジスタにおける読み書きによりメモリ１０からの読み出しおよび書き出しの各動作を判断し、読み出し動作の場合は、ポインタレジスタへのデータ格納動作が完了すると、メモリ１０にアクセスして、対応するアドレスからデータを読み出し、データレジスタに格納する。また、書き出し動作の場合は、ポインタレジスタおよびデータレジスタの双方へのデータ格納動作が完了すると、メモリ１０の対応するアドレスに対してデータを書き出す。
【００２７】
データ交換器６５は、アドレスレジスタと、入力データレジスタと、出力データレジスタとを具備しており、入力データレジスタおよびアドレスレジスタへのデータ格納が完了すると、アドレスレジスタの示すメモリ１０内のアドレスに、データキャッシュ４ｂおよび外部バスＩ／Ｆ５を通じてアクセスする。そして、メモリ１０上の対応するアドレスからデータを読み出し、出力データレジスタに格納する。
【００２８】
比較器６６は、データ入力用の２つのデータレジスタと、演算結果を格納するステータスレジスタを具備しており、２つのデータレジスタ双方へのデータ入力が完了すると、入力された各データを比較して、比較結果をステータスレジスタに格納する。
【００２９】
整数加算器６７は、２つの入力レジスタと、１つの出力レジスタを具備しており、２つの入力レジスタに、それぞれ加算される数値と加算する数値が入力されると、各データを使用して整数加算処理を行い、加算結果を出力レジスタに格納する。
【００３０】
整数減算器６８、整数乗算器６９および整数除算器７０は、整数加算器６７と同様に、２つの入力レジスタと、１つの出力レジスタを具備している。整数加算器６７と同様に、２つの入力レジスタに演算対象のデータが入力されると、各データを使用して、整数減算器６８は整数減算処理、整数乗算器６９は整数乗算処理、および整数除算器７０は整数除算処理を開始し、演算結果を出力レジスタに格納する。
【００３１】
論理積演算器７１、論理和演算器７２、排他的論理積演算器７３および排他的論理和演算器７４も、整数加算器６７等と同様に、２つの入力レジスタと、１つの出力レジスタをそれぞれ具備している。論理積演算器７１は、２つの入力レジスタに、演算対象のデータが格納されると、各データを使用して論理積演算処理を行い、演算結果を出力レジスタに格納する。同様に、２つの入力レジスタに演算対象のデータが格納されると、論理和演算器７２は論理和演算処理、排他的論理積演算器７３は排他的論理積演算処理、および排他的論理和演算器７４は排他的論理和演算処理を行い、演算結果を出力レジスタに格納する。
【００３２】
ビット反転演算器７５は、データの入出力が可能な１つの入出力データレジスタを具備し、入出力レジスタへのデータ格納動作が完了すると、この格納データによるビット反転処理を開始し、演算結果を入出力レジスタに書き戻す。
【００３３】
浮動小数加算器７６、浮動小数減算器７７、浮動小数乗算器７８および浮動小数除算器７９も、整数加算器６７等と同様に、２つの入力レジスタと、１つの出力レジスタをそれぞれ具備している。浮動小数加算器７６は、２つの入力レジスタに演算対象のデータが格納されると、これらのデータによる浮動小数加算処理を開始し、この演算結果を出力レジスタに格納する。同様に、２つの入力レジスタに演算対象のデータが格納されると、浮動小数減算器７７は浮動小数減算処理、浮動小数乗算器７８は浮動小数乗算処理、および浮動小数除算器７９は浮動小数除算処理を開始し、この演算結果を出力レジスタに格納する。
【００３４】
積和演算器８０は、３つの入力レジスタと、出力レジスタを具備しており、３つの入力レジスタに演算対象の数値が入力されると、入力された数値による積和演算処理を行い、演算結果を出力レジスタに格納する。
【００３５】
また、これらのデータ転送器および演算器のうち、例外を発生させる可能性のあるものは、例外バス３３に接続される。図の例では、演算器の比較器６６、整数加算器６７、整数減算器６８、整数乗算器６９、整数除算器７０、浮動小数加算器７６、浮動小数減算器７７、浮動小数乗算器７８、浮動小数除算器７９および積和演算器８０と、データ転送器の読み出し器６１、書き出し器６２、メモリ転送器６３、スタック処理器６４およびデータ交換器６５が例外バス３３に接続されている。
【００３６】
汎用レジスタ８１は、各データ転送器および演算器の処理結果等を一時的に記憶し、バスマスタ３によるアドレス指定に基づいて、記憶したデータを他のデータ転送器もしくは演算器等に転送する。
【００３７】
外部に接続されたメモリ１０は、命令とデータとを格納しており、外部バスＩ／Ｆ５がアドレスバス５１を介して要求するアドレスの命令またはデータを、データバス５２を介して供給する。なお、外部のアドレスバス５１およびデータバス５２上には、メモリ１０の他に例えば、プログラムや各種のデータを記憶するＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やＨＤＤ（ハードディスクドライブ）のＩ／Ｆ、データ入力用のキーボードやモニタ、各種の通信ネットワーク等に接続するためのＩ／Ｆ等（いずれも図示せず）が接続されており、コンピュータシステムを構成している。プロセッサ１が、データバス５２を通じてＲＯＭやＨＤＤ等からプログラムを読み込んで実行し、データバス５２上の各部とのデータの読み書きを行うことにより、このコンピュータシステムが動作する。
【００３８】
割込みコントローラ８は、例えば、データ受信完了等の外部の状態変化を検出すると、割り込み信号を発生させ、外部の状態変化を例外処理部６へ伝える。
このプロセッサ１では、メモリ１０から命令が読み出され、バスマスタ３に順次供給されると、バスマスタ３はこの命令に従って、アドレスバス３１およびデータバス３２に接続されたデータ転送器や演算器の間のデータ転送動作を制御する。各データ転送器および演算器は、データバス３２からのデータ入力用のレジスタを具備し、また一部のデータ転送器とすべての演算器はデータ出力用のレジスタを具備する。
【００３９】
各データ転送器および各演算器は、単一の処理機能を有しており、入力用のレジスタへのデータ入力が完了すると、自動的に所定のデータ処理を実行する。また、出力用のレジスタを具備するものは処理結果をそのレジスタに格納する。これにより、バスマスタ３によって転送元のレジスタと転送先のレジスタとが指定されるだけで、各データ転送器および演算器を動作させることが可能となる。従って、バスマスタ３は基本的に、発行された命令を基に、転送元および転送先の各レジスタを指定する情報のみ解読すればよく、命令が単純化され、バスマスタ３におけるデコード処理が高速化されている。各データ転送器および各演算器は、処理の途中で例外が発生すると、実行中の処理を中断し、例外発生信号を出力する。例外発生信号は、例外原因が除去されるまで保持される。例外発生信号が出力されたことは、例外バス３３によって例外処理部６へ伝わる。
【００４０】
また、割込みコントローラ８は、予め指定されている外部の状態変化によって、割り込み信号を発生させる。割り込み信号は、割り込み信号線（図示せず）によって例外処理部６へ伝わる。
【００４１】
例外処理部６は、例外発生信号または割り込み信号が出力されたことを検出すると、これらの信号から例外原因を示すデータを作成し、バスマスタ３へ例外発生または割り込み発生の通知を行う。なお、割り込み信号の受付は、例外が発生していない場合のみ行う。例外バス３３は、各データ転送器および演算器に接続しており、例外処理部６は、例外発生信号を出力したデータ転送器あるいは演算器を正確に特定することができる。
【００４２】
バスマスタ３は、そのとき実行していた転送命令を停止し、例外処理に制御を移す。従って、例外発生により中断されたデータ転送器または演算器以外のデータ転送器または演算器は、処理が終了した後、自動的に停止することになる。
【００４３】
このように、レジスタ間のデータ転送を制御することによって、単一の処理を実行する各データ転送器および各演算器の動作が制御されているため、例外が発生した場合に、実行中の他のデータ転送器と演算器の処理を中断させなくても例外が発生した処理機能を正確に特定することができる。また、従来のように確定処理を実行する必要がないことから、確定処理を行う余分なハードウェアを設ける必要がなく、例外処理時間を短縮することができる。さらに、例外が発生した以外のデータ転送器および演算器は、その処理を中断されないため、復帰に要する時間も短縮することができる。
【００４４】
次に、図２を用いて、命令取り出し器２、バスマスタ３および例外処理部６について、さらに詳しく説明する。なお、図２では、説明を簡略化するために、アドレスバス３１およびデータバス３２が１組のみ設けられているものとしているが、これらは複数組設けられてもよい。また、例外バス３３は、アドレスバス３１およびデータバス３２と１対１に対応している必要はなく、複数組のアドレスバス３１およびデータバス３２に対して、１組設けられていてもよい。
【００４５】
図２は、命令取り出し器、バスマスタおよび例外処理部の各内部構成を示すブロック図である。
図２に示すように、命令取り出し器２は、プログラムカウンタ２１と、アドレス生成器２２と、命令発行器２３と、命令格納レジスタ２４と、プログラムカウンタ退避レジスタ２５を具備している。
【００４６】
プログラムカウンタ２１は、入力される図示しないクロック信号に同期して、アドレス生成器２２に対してカウント値を順次出力する。また、アドレスバス３１およびデータバス３２に接続しており、アドレスバス３１を通じてセレクト信号により選択されると、データバス３２を通じて転送されたデータによって、カウント値が書き換えられる。
【００４７】
アドレス生成器２２は、プログラムカウンタ２１から出力されるカウント値を、メモリ１０における読み出しアドレスとして、命令発行器２３に対して出力する。
【００４８】
命令発行器２３は、アドレス生成器２２から出力された読み出しアドレスを、命令キャッシュ４ａおよび外部バスＩ／Ｆ５を通じてメモリ１０に転送する。そして、メモリ１０から読み込まれた命令を命令格納レジスタ２４に転送する。また、出力した読み出しアドレスが命令キャッシュ４ａにおいてヒットした場合には、この命令キャッシュ４ａから対応する命令を読み出し、命令格納レジスタ２４に転送する。さらに、比較器６６のステータスレジスタからのステータス信号の供給を受け、このステータス信号に応じて動作させることが可能となっている。
【００４９】
命令格納レジスタ２４は、命令発行器２３から出力された命令を保持し、所定のタイミングでバスマスタ３に転送する。また、アドレスバス３１およびデータバス３２に接続して、データバス３２からのデータ入力用のレジスタとしても機能し、アドレスバス３１を通じてセレクト信号により選択されると、データバス３２を通じて転送されたデータによって、出力する命令が書き換えられる。
【００５０】
プログラムカウンタ退避レジスタ２５は、例外発生時に停止された命令、あるいは割り込み発生で終了された命令の次に実行される命令が格納されているアドレスを示すプログラムカウンタを一時退避するためのレジスタである。アドレスバス３１およびデータバス３２に接続して、データバス３２からのデータ入力レジスタおよび出力レジスタとして機能する。アドレスバス３１を通じてセレクト信号により選択されると、入力レジスタとして機能する場合には、データバス３２を通じて転送されたプログラムカウンタの値を書き込む。また、出力レジスタとして機能する場合には、データバス３２を通じて保持しているプログラムカウンタの値を転送する。
【００５１】
バスマスタ３は、デコーダ３ａと、残実行回数退避レジスタ３ｂと、実行中命令退避レジスタ３ｃを具備している。
デコーダ３ａは、アドレスバス３１およびデータバス３２に接続し、命令取り出し器２の命令格納レジスタ２４より出力された命令を解析し、アドレスバス３１に対してセレクト信号を出力して、アドレスバス３１に接続された各データ転送器または各演算器等のレジスタを選択する。このとき、データ転送元のレジスタと、データ転送先のレジスタとを選択することにより、選択されたレジスタ間でのデータバス３２を通じたデータ転送が行われる。また、デコーダ３ａは、入力された命令に応じて、即値データを生成し、データ転送先のレジスタを選択してこのレジスタにデータバス３２を通じて即値データを転送することも可能である。さらに、入力された命令中に実行回数を指定する情報が含まれる場合は、指定された回数分だけ同じ転送動作を繰り返すことも可能である。
【００５２】
また、デコーダ３ａは、セレクト信号の出力後にデータバス３２を通じてＷａｉｔ信号を受信した場合には、Ｗａｉｔ信号の受信が解除されるまでの間、このデータバス３２および対応するアドレスバス３１における制御状態を保持し、新たな命令のデコードに応じたセレクト信号および即値の出力を停止する。なお、アドレスバス３１およびデータバス３２が複数組設けられている場合には、Ｗａｉｔ信号が受信されていない他のバスに対するデータ転送を継続させることが可能である。
【００５３】
残実行回数退避レジスタ３ｂは、デコーダ３ａと接続し、デコーダ３ａから転送された繰り返し処理の残りの実行回数を書き込む。また、デコーダ３ａから読み出しがあれば、格納された残実行回数をデコーダ３ａに転送する。
【００５４】
実行中命令退避レジスタ３ｃは、デコーダ３ａと接続し、デコーダ３ａから転送された実行中の命令が格納されたメモリ１０上のアドレスを書き込む。また、デコーダ３ａから読み出しがあれば、格納された実行中命令のメモリ１０上のアドレスをデコーダ３ａに転送する。
【００５５】
デコーダ３ａは、例外処理部６から例外信号を入力すると、転送実行中の命令を停止し、停止した命令のアドレスを実行中命令退避レジスタ３ｃに退避する。また、転送実行中の命令が実行回数付き命令である場合には、残りの実行回数を残実行回数退避レジスタ３ｂに退避する。なお、実行回数付きでない命令を実行中であった場合には、残りの実行回数を１として残実行回数退避レジスタ３ｂに退避する。また、割り込み信号が入力した場合には、転送実行中の命令が終了した後、同様の退避を行う。
【００５６】
例外処理部６は、例外を発生させる可能性のある演算器もしくはデータ転送器が例外発生信号を出力する例外バス３３と、外部割り込みを発生させる割込みコントローラに接続している。また、アドレスバス３１、データバス３２に接続した例外原因レジスタ６ａを具備している。
【００５７】
例外原因レジスタ６ａは、例外の原因となった演算器もしくはデータ転送器を示すデータ、あるいは、割り込みが発生された原因を示すデータが格納されており、格納されたデータは、アドレスバス３１およびデータバス３２を使ってバスマスタ３あるいは命令取り出し器２などから読み出すことができる。
【００５８】
例外処理部６は、例外バス３３を通じて、例外バス３３に接続する演算器もしくはデータ転送器が出力する例外発生信号を検出すると、例外発生信号に基づいて例外原因となる演算器もしくはデータ転送器を特定し、例外原因レジスタ６ａへ特定された例外原因を格納する。また、例外が発生していない状態では、割込みコントローラからの割り込み信号を検出した場合には、これを受け付け、例外原因レジスタ６ａに割り込み原因を格納する。さらに、例外もしくは割り込みが発生した場合、バスマスタ３に例外信号を出力し、例外もしくは割り込みが発生したことを通知する。この例外信号は、例外処理を行う例外ハンドラによって例外原因が除去されるか、割り込みハンドラによって割り込み処理が終了するまで保持される。
【００５９】
このようなプロセッサ１では、命令取り出し器２では、命令発行器２３が、プログラムカウンタ２１に従ってアドレス生成器２２が生成するアドレスを読み出しアドレスとして、順次メモリ１０から命令を読み出し、命令格納レジスタ２４経由でバスマスタ３へ転送する。
【００６０】
バスマスタ３では、デコーダ３ａが命令格納レジスタ２４より出力された命令を解析し、アドレスバス３１に接続された図示しないデータ転送器または演算器のレジスタを選択する。このとき、データ転送元のレジスタと、データ転送先のレジスタとが選択されることにより、選択されたレジスタ間でのデータバス３２を通じたデータ転送が行われる。データ転送器または演算器は、単一の機能を有しており、このようなデータ転送によって入力レジスタにデータが格納されると、所定の処理を開始し、出力レジスタがある場合には、出力レジスタに演算結果を格納する。また、処理の途中で例外が発生した場合には、処理を中断し、例外バス３３を通じて例外発生出力信号を出力する。さらに、具備するレジスタの読み出しを許可し、例外処理部６あるいはバスマスタ３からレジスタの内容が読み出せるようにしておく。
【００６１】
例外処理部６は、例外バス３３を通じて例外発生信号が出力されたことを検出すると、例外原因のデータ転送器または演算器を特定して例外原因レジスタ６ａに格納し、例外信号をバスマスタ３へ出力する。例えば、例外が発生すると、レジスタの読み出しが可能となることから、これにより判別してもよい。
【００６２】
バスマスタ３は、例外信号を受け付けると、データ転送処理を停止し、停止した命令のアドレスを実行中命令退避レジスタ３ｃに格納し、残りの実行回数を残実行回数退避レジスタ３ｂへ格納する。その後、プログラムカウンタ２１の値を読み出し、プログラムカウンタ退避レジスタ２５へ格納し、プログラムカウンタ２１に例外ハンドラの先頭アドレスをプログラムカウンタ２１に転送する。
【００６３】
以上のように、例外の発生したデータ転送器もしくは演算器のみを停止し、例外ハンドラへ移行しても、例外の発生した演算器やデータ転送器は出力データの準備ができていないため、もし後続命令が例外の発生した演算器やデータ転送器のレジスタにアクセスしようとしても待たされ、後続命令の実行結果に例外発生の影響が及ぶことがない。また、例外の発生した演算器やデータ転送器の入力レジスタも同様に書き込みが待たされるため、入力レジスタのデータを解析すれば例外の原因の特定ができる。
【００６４】
ここで、図３、図４、図５を用いて、各演算器もしくはデータ転送器と、例外処理部６と、バスマスタ３の動作について、具体的に説明する。ここでは、例として、例外が発生した場合について説明する。なお、割り込みが発生した場合の処理の内容は、例外処理部６およびバスマスタ３とも例外時の場合とは、命令の中断を行わず終了後に行うことを除き、同様である。ただし、例外ハンドラは、割り込みハンドラになる。
【００６５】
図３、図４、図５は、各演算器もしくはデータ転送器、例外処理部およびバスマスタの間のシーケンス例を示す図である。
図３は、例外発生から例外信号出力までのシーケンス例である。
【００６６】
タイミングＴ１０１において、演算器もしくはデータ転送器９に例外が発生する。続いて、タイミングＴ１０２において、例外が発生した演算器もしくはデータ転送器９の処理が停止される。さらに、タイミングＴ１０３において、例外バス３３を通じて例外発生信号が出力される。その後、タイミングＴ１０４において、入力レジスタおよび出力レジスタがアドレスバス３１およびデータバス３２を通じて読み出せるように、レジスタ読み出しが許可される。以降、例外が発生した演算器もしくはデータ転送器９は、例外原因が除去されるのを待つ。
【００６７】
一方、タイミングＴ１０５において、例外バス３３に接続する例外処理部６によって、演算器もしくはデータ転送器９が出力した例外発生信号が検出され、例外を発生させた演算器もしくはデータ転送器９が特定され例外原因レジスタ６ａに格納される。続いて、バスマスタ３に対して例外信号が出力される。
【００６８】
次に、図４を用いて説明する。図４は、例外信号出力からハンドラ実行までのシーケンス例である。
タイミングＴ１０７において、例外処理部６によって出力された例外信号がバスマスタ３に入力され、データ転送命令の実行が停止される。続いて、タイミングＴ１０８において、停止したデータ転送命令のアドレスが実行中命令退避レジスタ３ｃに退避され、実行回数付き命令の残りの実行回数である残回数を残実行回数退避レジスタ３ｂに退避される。続く、タイミングＴ１０９において、命令取り出し器２のプログラムカウンタ２１がプログラムカウンタ退避レジスタ２５に退避され、例外処理復帰後の最初の命令のアドレスが退避される。その後、タイミングＴ１１０において、プログラムカウンタ２１に、例外ハンドラのアドレスが転送され、制御が例外ハンドラに移る。例外ハンドラは、例外原因に応じて処理が異なるが、処理の分岐は、例外ハンドラが例外原因レジスタ６ａの内容を参照し、対象の演算器もしくはデータ転送器９のレジスタ内容を確認することにより、原因を特定して行う。また、分岐は、バスマスタ３が例外原因レジスタ６ａを参照して行うようにしてもよい。以上のようにして、プログラムカウンタ２１の内容が例外ハンドラのアドレスに書き換わり、タイミングＴ１１１において、ハンドラルーチンの実行が開始される。
【００６９】
次に、図５を用いて説明する。図５は、ハンドラ実行から例外復帰までのシーケンス例である。
図４のタイミングＴ１１１においてハンドラルーチンが開始されると、ハンドラルーチンでは、例外が発生した演算器もしくはデータ転送器９のレジスタを読み出し、例外原因を除去する処理を行う。例えば、データ転送器において、ページフォルトが発生したような場合には、ページングを行う。例外ハンドラのハンドラルーチンによって例外が除去されると、例外処理部６および演算器もしくはデータ転送器９によって例外原因が除去されたことが検出される。
【００７０】
タイミングＴ１１２では、例外が発生していた演算器もしくはデータ転送器９の例外原因が除去されており、例外発生信号の出力が停止される。続いて、タイミングＴ１１３において、演算器もしくはデータ転送器９が初期化され、初期状態になる。一方、タイミングＴ１１２において、例外処理部６によっても例外原因が除去されたことが検出され、例外原因レジスタ６ａから例外原因が削除される。続いて、例外信号の出力が停止される。図４では、同一のタイミングで例外発生信号の停止と例外原因削除が行われるとしたが、これらの処理は個々に行われるため、タイミングがずれてもかまわない。また、例外処理部６は、タイミングＴ１１２において演算器もしくはデータ転送器９が例外発生信号の出力を停止したことを受けて、例外原因削除を行うようにすることもできる。
【００７１】
以上の処理によって、演算器もしくはデータ転送器９が初期化され、復帰可能な状態になる。また、例外信号が停止したことは、バスマスタ３へ通知される。次のタイミングＴ１１４において、例外信号が停止されたことを検出したバスマスタ３によって、プログラムカウンタが復帰される。続いて、タイミングＴ１１５において、実行命令と繰り返し命令の残回数が復帰される。このとき、必要に応じて、例外を発生した演算器もしくはデータ転送器９にデータ転送を行い、例外が発生した命令を再実行させる。この場合、プログラムカウンタ２１には、実行中命令退避レジスタ３ｃの示すアドレスが転送される。そして、この処理が実行された後、プログラムカウンタ退避レジスタ２５に格納されたプログラムカウンタが、プログラムカウンタ２１に転送される。その後、例外ハンドラの処理を抜ける。
【００７２】
以上の処理によって、プロセッサ１は、例外発生前の状態に戻る。そして、タイミングＴ１１６において、中断されていた処理が再開され、新規命令の受け取りが開始される。
【００７３】
なお、上記の説明では、アドレスバス３１とデータバス３２が１組の場合について説明したが、これらのバスが複数組ある場合には、例外処理部６は、例外が発生した演算器もしくはデータ転送器９の属するバスマスタを特定し、特定されたバスマスタに対してのみ例外信号を出力する。他のバスマスタは、そのまま処理の実行を続ける。また、演算器もしくはデータ転送器９は、例外処理部６によって特定されたバスマスタのみすべてのレジスタを読み出し許可にし、そのほかのバスマスタからの選択に対してはｗａｉｔ信号を出力する。
【００７４】
次に、本発明のプロセッサを用いた例外処理方法について説明する。ここでは、例として、図１に示したデータ読み出し器６１に例外が発生した場合の読み出し器６１の動作と、それに対する例外処理方法について説明する。
【００７５】
図６は、読み出し器における処理の流れを示すフローチャートである。
ステップＳ０１において、読み出し器６１は、入力レジスタのデータ格納が完了したかどうかを確認している。入力レジスタのデータ格納が完了していない場合は、完了するまでステップＳ０１の待ち状態を継続する。入力レジスタのデータ格納が完了している場合は、次のステップＳ０２へ処理を進める。
【００７６】
ステップＳ０２において、パワーセーブ機能を解除する。なお、パワーセーブ機能は、それぞれが具備するデータ入力用のレジスタに、各処理を開始するために必要なデータ入力が行われていない処理待機状態において、処理回路への電流供給量を抑制する機能である。
【００７７】
ステップＳ０３において、データの読み出し処理を開始する。処理が開始された後、入力レジスタあるいは出力レジスタにおいてセレクト信号が受信された場合には、データ読み出し処理が終了するまでデータバス３２上にＷａｉｔ信号を出力する。
【００７８】
ステップＳ０４において、入力レジスタに格納されたデータを読み出しアドレスとして、データキャッシュ４ｂおよび外部バスＩ／Ｆ５を通じて外部のメモリ１０にアクセスし、データの読み出しを行う。
【００７９】
ステップＳ０５において、データ読み出し時に、例外が発生したかどうかを確認する。例外が発生していない場合は、処理をステップＳ０６へ進め、例外が発生した場合には、ステップＳ１１からステップＳ１５までの例外発生時の処理を行う。
【００８０】
ステップＳ０６において、読み出したデータを出力用の結果格納レジスタに転送する。
ステップＳ０７において、ステップＳ０３において出力されたＷａｉｔ信号の出力を停止し、ステップＳ０６で格納された結果格納レジスタのデータを読み出し可能にする。
【００８１】
ステップＳ０８において、パワーセーブ機能を設定し、次の処理開始までの消費電力を抑える。
以上の手順により、データ読み出しが行われる。
【００８２】
ここで、例外発生時の処理について説明する。
ステップＳ１１において、例外が発生したので、データ読み出し処理を停止する。
【００８３】
ステップＳ１２において、例外発生信号を例外バス３３へ出力し、例外が発生したことを例外処理部６へ通知する。
ステップＳ１３において、例外を発生した命令のデータ転送を行った特定バスマスタに対して、すべてのレジスタの読み出しを許可する。
【００８４】
ステップＳ１４において、例外原因が除去されたかどうかを確認する。例外原因が除去されていない場合は、ステップＳ１４で待機状態を継続する。例外原因が除去された場合は、ステップＳ１５へ処理を進める。
【００８５】
ステップＳ１５において、例外発生信号の出力を停止し、必要であれば初期化を行い、処理可能な状態に復帰させる。復帰後、処理をステップＳ０７へ戻す。
以上の処理手順により、例外発生が例外処理通知され、例外ハンドラによって例外原因が除去される。例外原因が除去され、処理可能な状態となった場合、ステップＳ０７に戻って、次の命令処理のための動作を再開する。
【００８６】
次に、例外処理方法について説明する。
図７は、例外処理が起動されるまでの処理の流れを示すフローチャートである。
【００８７】
ステップＳ２１において、命令取り出し器２よりデータ転送元のレジスタとデータ転送先のレジスタを指定した命令を受け取る。
ステップＳ２２において、受け取った命令をデコードする。
【００８８】
ステップＳ２３において、命令のデコード結果に応じて、転送元レジスタおよび転送先レジスタに対して、それぞれアドレスバス３１を通じてセレクト信号を出力する。また、命令に即値が含まれていた場合は、アドレスバス３１を通じて転送先レジスタにセレクト信号を出力するとともに、即値データを生成してデータバス３２に出力する。
【００８９】
ステップＳ２４において、例外処理部６が出力する例外信号を受信したか否かを確認する。例外信号を受信している場合は、ステップＳ２５の例外処理を行う。例外信号を受信していない場合は、ステップＳ２６へ処理を進める。
【００９０】
ステップＳ２５において、後述する例外処理の実行により例外ハンドラを起動し、例外原因を除去する。例外原因が除去された後、ステップＳ２１に戻って、次の命令処理の実行を再開させる。
【００９１】
ステップＳ２６において、データバス３２よりＷａｉｔ信号を受信したか否かを判断する。Ｗａｉｔ信号を受信した場合は、ステップＳ２７に進み、受信していない場合はステップＳ２８に進む。ステップＳ２７において、現在のセレクト信号の出力状態を保持する。従って、ステップＳ２６での判断により、Ｗａｉｔ信号の受信が停止するまでの間、ステップＳ２７でのセレクト信号の出力状態が保持される。
【００９２】
ステップＳ２８において、受け取った命令中で実行回数が指定されていた場合に、残りの実行回数が「０」であるか否かを判断し、「０」である場合はステップＳ２１に進んで新たな命令を受け取る。また、「０」でない場合はステップＳ２９に進む。ステップＳ２９において、残りの実行回数の値を「１」だけ減じて、ステップＳ２３に戻る。従って、指定された実行回数の分だけ、ステップＳ２３〜Ｓ２８の処理が繰り返される。
【００９３】
ここで、例外処理について説明する。
図８は、例外処理の流れを示すフローチャートである。
ステップＳ３１において、データ転送処理を停止する。すなわち、アドレスバス３１を通じてのセレクト信号の出力を停止し、命令に即値が含まれていた場合は、データバス３２を通じての即値データの出力を停止する。
【００９４】
ステップＳ３２において、データ転送処理を停止した実行命令のアドレスと、実行回数が指定されている命令の場合の残りの実行回数をそれぞれ実行中命令退避レジスタ３ｃと、残実行回数退避レジスタ３ｂに退避させる。
【００９５】
ステップＳ３３において、アドレスバス３１とデータバス３２を通じて、プログラムカウンタ２１の内容を読み出しプログラムカウンタ退避レジスタ２５へ書き込む。
【００９６】
以上の処理により、実行中のデータ転送命令が停止され、その命令のアドレスおよび残実行回数と、プログラムカウンタがそれぞれの退避レジスタに退避される。
【００９７】
ステップＳ３４において、アドレスバス３１とデータバス３２を通じて、プログラムカウンタ２１に、例外を処理する例外ハンドラの先頭アドレスを転送する。プログラムカウンタ２１を例外ハンドラの先頭アドレスにしたことにより、次に実行される命令は、例外ハンドラの先頭命令となり、例外ハンドラに制御が移る。
【００９８】
ステップＳ３５において、ステップＳ３４の処理によって例外ハンドラの命令が順次実行される。例外ハンドラでは、例外原因を特定し、その例外原因を除去する処理が行われる。これにより、例外原因が削除され、これに伴って、例外処理部６による例外信号の出力は停止され、データ読み出し器は初期状態に復帰し、例外発生信号の出力が停止される。この後、必要に応じて例外を発生したデータ読み出し器にデータ転送を行い、例外が発生した命令を再び実行させる。最後に、それぞれの退避レジスタに格納されたプログラムカウンタ、実行命令アドレス、残実行回数を復帰し、例外ハンドラを抜ける。
【００９９】
ステップＳ３６において、例外ハンドラによる例外除去処理が完了し、実行が再開される。
例外が発生しても、処理が停止されるのは例外を発生した演算器もしくはデータ転送器のみであり、そのとき動作していた他の演算器もしくはデータ転送器は、正常に処理を行った後、停止している。もし、例外の発生した演算器もしくはデータ転送器のレジスタにアクセスしようとしても、Ｗａｉｔ信号により待たされた状態を継続する。このため、他の演算器もしくはデータ転送器の実行結果に例外発生の影響が及ぶことがない。従って、例外処理により例外が発生した演算器もしくはデータ転送器の例外原因が除去され、例外が発生した命令が再度実行されて正常に完了すれば、そのまま処理を再開させることができる。このように、例外からの復帰時に例外が発生した以外の演算器もしくはデータ転送器に再度演算を実行させる必要がなく、例外からの復帰に要する時間を短縮することができる。この結果、全体の処理速度を向上させることができる。
【０１００】
【発明の効果】
以上説明したように、本発明のプロセッサでは、転送制御手段によるデータ転送制御のみによって、各演算手段の動作が制御される。従って、例外発生時に転送制御手段は、例外発生時に、実行命令やプログラムカウンタを退避レジスタに退避し、処理を停止させる。このとき、例外受付手段は、演算手段の出力する例外発生信号により例外が発生した演算手段を正確に特定している。さらに、例えば、その演算手段のレジスタを読み出すことにより、例外の発生状態をより正確に特定することができる。また、例外が発生した以外の演算手段は、処理終了後に自動的に停止するため、例外の復帰時に再度演算をさせる必要がない。この結果、例外からの復帰に要する時間を短縮し、全体の処理速度を向上させることができる。
【０１０１】
また、本発明の例外処理方法では、レジスタ間のデータ転送制御のみによって各演算手段の動作が制御されるプロセッサに例外が発生した場合、例外発生時の実行命令とプログラムカウンタを退避レジスタに退避し、例外が発生したことが特定された演算手段のレジスタを読み出すことにより、例外の発生状態を正確に特定することができる。
【図面の簡単な説明】
【図１】本発明のプロセッサの構成例を示す機能ブロック図である。
【図２】命令取り出し器、バスマスタおよび例外処理部の各内部構成を示すブロック図である。
【図３】例外発生から例外信号出力までのシーケンス例である。
【図４】例外信号出力からハンドラ実行までのシーケンス例である。
【図５】ハンドラ実行から例外復帰までのシーケンス例である。
【図６】データ読み出し器における処理の流れを示すフローチャートである。
【図７】例外処理が起動されるまでの処理の流れを示すフローチャートである。
【図８】例外処理の流れを示すフローチャートである。
【図９】従来のプロセッサの構成例を示す機能ブロック図である。
【符号の説明】
１・・・・・・プロセッサ、２・・・・・・命令取り出し器、３・・・・・・バスマスタ、３ａ・・・・・・デコーダ、３ｂ・・・・・・残実行回数退避レジスタ、３ｃ・・・・・・実行中命令退避レジスタ、４ａ・・・・・・命令キャッシュ、４ｂ・・・・・・データキャッシュ、５・・・・・・外部バスＩ／Ｆ、６・・・・・・例外処理部、６ａ・・・・・・例外原因レジスタ、１０・・・・・・メモリ、２１・・・・・・プログラムカウンタ、２２・・・・・・アドレス生成器、２３・・・・・・命令発行器、２４・・・・・・命令格納レジスタ、２５・・・・・・プログラムカウンタ退避レジスタ、３１・・・・・・アドレスバス、３２・・・・・・データバス、３３・・・・・・例外バス、６１・・・・・・読み出し器、６２・・・・・・書き出し器、６３・・・・・・メモリ転送器、６４・・・・・・スタック処理器、６５・・・・・・データ交換器、６７・・・・・・整数加算器、６８・・・・・・整数減算器、６９・・・・・・整数乗算器、７０・・・・・・整数除算器、７１・・・論理積演算器、７２・・・・・・論理和演算器、７３・・・・・・排他的論理積演算器、７４・・・・・・排他的論理和演算器、７５・・・・・・ビット反転演算器、７６・・・・・・浮動小数加算器、７７・・・・・・浮動小数減算器、７８・・・・・・浮動小数乗算器、７９・・・・・・浮動小数除算器、８０・・・・・・積和演算器、８１・・・・・・汎用レジスタ
【図１】
2004362368.tif 000003
【図２】
2004362368.tif 000004
【図３】
2004362368.tif 000005
【図４】
2004362368.tif 000006
【図５】
2004362368.tif 000007
【図６】
2004362368.tif 000008
【図７】
2004362368.tif 000009
【図８】
2004362368.tif 000010
【図９】
2004362368.tif 000011