(57)【特許請求の範囲】
【請求項１】
命令の形で与えられる演算を実行する方法であって、
演算の起動を指示する演算起動命令と、その演算の結果を取り出す演算結果取出命令を別々に設け、
演算起動命令によって起動された演算の実行完了をハードウエアによって判定し、
その演算の実行が完了するまで、後続の演算結果取出命令の実行を、その演算結果取出命令自体を破棄することが可能な状態で停止することを特徴とする演算実行方法。
【請求項２】
請求項１に記載の演算実行方法において、この方法は、
前記演算起動命令によって起動された演算の実行が完了する前であっても例外処理の要求を受け付け、
この要求が実際に発生したとき、実行中の前記演算結果取出命令を破棄し、
例外処理を行った後、前記演算結果取出命令を再実行することを特徴とする演算実行方法。
【請求項３】
請求項１、２のいずれかに記載の演算実行方法において、
この方法は、命令をパイプライン処理によって実行するものであり、
前記演算起動命令によって起動された演算の実行完了の判定は、命令の実行状況を見てパイプラインのステージ進行を制御するときに、パイプライン処理動作の一環として行われることを特徴とする演算実行方法。
【請求項４】
演算起動命令によって演算が起動され、演算結果取出命令によって演算結果が取り出されるよう構成された演算手段と、
演算起動命令によって起動された演算の実行完了をハードウエア的に判定する演算完了判定手段と、
演算の実行が完了するまで、後続の演算結果取出命令の実行を、その演算結果取出命令自体を破棄することが可能な状態で停止する取出命令実行停止手段と、
を含むことを特徴とする演算実行装置。
【請求項５】
請求項４に記載の演算実行装置において、
この装置は、命令をパイプライン処理によって実行するパイプライン制御手段を含み、
このパイプライン制御手段は、前記取出命令実行停止手段を含み、
この取出命令停止手段は、前記演算の実行完了の判定結果に従い、演算結果取出命令の実行停止をパイプライン処理中の関連するステージにて行うことを特徴とする演算実行装置。
【請求項６】
請求項５に記載の演算実行装置において、
前記取出命令実行停止手段は、演算結果取出命令が解読されるステージまたはそれよりも前のステージでその命令の実行を停止し、
前記パイプライン制御手段は、演算結果取出命令の実行が停止されている間に例外処理の要求が発生したとき、その例外処理の実行後に演算結果取出命令の実行を再開する取出命令再実行手段を含むことを特徴とする演算実行装置。
【請求項７】
請求項４〜６のいずれかに記載の演算実行装置において、この装置はさらに、
演算起動命令が解読されたとき前記演算手段を利用する旨の予約を行う予約手段と、
この予約の状況に応じて演算起動命令の実行を停止する起動命令停止手段と、
を含むことを特徴とする演算実行装置。
【請求項８】
請求項７に記載の演算実行装置において、
前記演算手段は、演算起動命令の実行の際に演算対象データが送り込まれ、演算結果取出命令の実行の際に演算結果データが取り出されるＦＩＦＯ構造を有し、
前記起動命令停止手段は、このＦＩＦＯ構造の段数と前記予約の回数との比較結果から演算起動命令の実行を停止することを特徴とする演算実行装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、演算実行方法およびその方法を用いた演算実行装置に関する。この発明は特に、演算を含む各種処理が命令の形で与えられるとき、これらの命令を実行する演算実行方法および装置に関する。この発明は、例えばパイプライン方式のマイクロプロセッサに適用することが可能である。
【０００２】
【従来の技術】
ＲＩＳＣ（Ｒｅｄｕｃｅｄ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｅｒ）型のシングルチップ・マイクロプロセッサは、主に特定用途において、高い処理性能、低い消費電力および少ない実装面積を同時に実現するデバイスである。最近ではさらに演算性能の強化を図るために、こうしたマイクロプロセッサの中に専用の演算回路を設けることも多い。
【０００３】
日本電気（株）のＶ８５１は、そうしたマイクロプロセッサの１つである。ＮＥＣ技報  Ｖｏｌ．４８  Ｎｏ．３／１９９５の４２〜４７ページの記載によれば、Ｖ８５１はパイプライン方式のＲＩＳＣアーキテクチャをとり、乗算命令の高速実行のために、通常のＡＬＵの他にＭＵＬＵと呼ばれるハードウエア乗算器を備える。この乗算器により、乗算を１または２クロックで実行する。
【０００４】
図１はＶ８５１によるパイプライン処理の様子を示す図である。同図では、命令１がＭＵＬＵを用いて１クロックで完了し、つづく命令２が１クロック遅れでパイプライン処理されていく様子が示されている。同図において各クロックに対応する処理はステージと呼ばれ、５種類のステージを経ることにより、１つの命令の実行が完了する。Ｖ８５１の場合、５種類のステージはＩＦ、ＩＤ、ＥＸ、ＭＥＭ、ＷＢと呼ばれ、これら各ステージはそれぞれ、命令フェッチ、命令解読（およびレジスタの読み出し）、演算（およびメモリアドレス生成）、メモリアクセス（乗算結果取り出し）、レジスタファイルに対するデータの書き戻しを示している。
【０００５】
【発明が解決しようとする課題】
パイプライン方式のマイクロプロセッサを設計する場合、割込等例外処理の受付に関し、いくつかの異なる設計方針がある。特に、専用の演算回路を設ける場合、この回路の性質に応じた設計が必要となる。演算実行と例外処理の要求が同時に発生したとき、主な制御方法は以下のとおりである。
【０００６】
（１）例外処理を待たせる
いったん演算が起動されたとき、この演算の実行が完了するまで例外処理を待たせ、演算完了後例外処理を行う。
【０００７】
（２）演算を中止する
例外処理を優先するために演算を中止し、演算の途中経過を破棄する。例外処理の完了後、演算を最初からやりなおす。
【０００８】
（３）演算を中断する
演算をいったん中断し、演算の途中経過を退避する。例外処理の完了後、退避したデータを読み戻し、演算を中途から再開する。
【０００９】
これらのうち、（１）は設計上最も単純でハードウエアも少ないが、急を要する例外処理が長時間待たされるおそれがあり、システム上問題が生じうる。（２）にはこの問題がないが、演算が最初からやりなおしになるため、処理性能上問題が生じうる。（３）にはこれらの問題がないが、実現するためのハードウエアが大きくなる。例えば前述のＶ８５１のように、演算に高々２クロックしかかからない場合は（１）の方法が現実的と考えられるが、例えば多ビットデータを対象とする浮動小数点演算用の演算回路を設けるような場合、（２）または（３）の方法を選択するほかなかった。
【００１０】
［目的］
本発明は、上記課題に鑑みてなされたものであり、その目的は、例外処理を無用に待たせることなく、処理性能の低下を最小限にとどめ、かつハードウエアの増大を招かない演算実行方法および装置の提供にある。
【００１１】
【課題を解決するための手段】
（１）本発明の演算実行方法は、命令の形で与えられる演算を実行する方法であって、演算の起動を指示する演算起動命令と、その演算の結果を取り出す演算結果取出命令を別々に設け、演算起動命令によって起動された演算の実行完了をハードウエアによって判定し、その演算の実行が完了するまで、後続の演算結果取出命令の実行を、その演算結果取出命令自体を破棄することが可能な状態で停止する。
【００１２】
ここで「演算」は、数値演算に限らず、各種制御機能の単位処理全般を指す。また本発明では、命令の「実行」ということばが２つの意味を持つ。すなわち、この命令を読み取って解読し、解読内容に従って実際にハードウエア資源に対する制御を行い、命令を終了するまでの一連の処理が広義の実行である。一方、前記ハードウエア資源に対する実際の制御のみを指して狭義の実行という。以降、特に区別が必要な個所に限り、広狭を明示して説明する。
【００１３】
本発明では、演算起動と演算結果の取り出しを異なる命令で行う。演算起動命令は演算の起動のみを目的とするため、演算が起動された時点でその命令自体の実行は完了する。しかしこれとは別に、演算自体は実行中とする構成が可能であり、この演算の完了がハードウエア的に判定される。
【００１４】
一方、演算が完了する前であっても、演算起動命令自体の実行が完了していることから、演算結果取出命令の実行（広義）が開始できる。しかし、この命令は前記演算の完了を待つ必要があるため、その実行（狭義）は演算が完了するまで停止される。このとき、例えば例外処理の要求が発生したら、停止中の演算結果取出命令を破棄し、当該処理を先に実行する。「破棄」とは、命令の実行を中止することをいう。このとき、前記演算自体は必ずしも中止する必要はないため、例外処理等を終えた後、演算結果取出命令のみを再度実行することができる。
【００１５】
（２）本発明の演算実行方法のある態様では、この方法は、前記演算起動命令によって起動された演算の実行が完了する前であっても例外処理の要求を受け付け、この要求が実際に発生したとき実行中の演算結果取出命令を破棄し、例外処理を行った後、前記演算結果取出命令を再実行する。この動作原理は（１）で説明したとおりである。
【００１６】
（３）本発明の演算実行方法のある態様では、この方法は命令をパイプライン処理によって実行するものであり、前記演算起動命令によって起動された演算の実行完了の判定は、命令の実行状況を見てパイプラインのステージ進行を制御するときに、パイプライン処理動作の一環として行われる。
【００１７】
この態様では、前提として、命令がパイプライン処理によって行われる。パイプライン処理を行うとき、パイプラインの各ステージを進めていくために、命令の実行状況の監視が必要となる。そこで、この監視動作を前記演算の実行完了の判定に利用するものである。
【００１８】
（４）一方、本発明の演算実行装置は、演算起動命令によって演算が起動され、演算結果取出命令によって演算結果が取り出されるよう構成された演算手段と、演算起動命令によって起動された演算の実行完了をハードウエアによって判定する演算完了判定手段と、演算の実行が完了するまで、後続の演算結果取出命令の実行を、その演算結果取出命令自体を破棄すること可能な状態で停止する取出命令実行停止手段とを含む。「演算手段」の一例に、固有の演算を実行するコプロセッサがある。
【００１９】
この態様において、まず演算起動命令が読み込まれると、演算手段において演算が起動される。この演算の実行完了が演算完了判定手段で判定される。つづいて、演算結果取出命令が読み込まれるが、この命令の実行（狭義）は演算の実行が完了するまで停止される。演算結果取出命令は、その命令自体を破棄することが可能な状態、例えば解読までが終了したステージで停止される。このため、例外処理の要求などが発生すれば、演算結果取出命令を破棄してこれを優先的に処理することができる。この後、演算結果取出命令が再実行され、演算手段から演算結果が取り出される。
【００２０】
（５）本発明の演算実行装置のある態様は、命令をパイプライン処理によって実行するパイプライン制御手段を含み、このパイプライン制御手段は前記取出命令実行停止手段を含み、この取出命令実行停止手段は、前記演算の実行完了の判定結果に従い、演算結果取出命令の実行停止をパイプライン処理中の関連するステージにて行う。その作用は、（１）の説明に準ずる。
【００２１】
（６）このとき本発明のある態様では、前記取出命令実行停止手段は、演算結果取出命令が解読されるステージか、それよりも時間的に前のステージでその命令の実行を停止し、前記パイプライン制御手段は、演算結果取出命令の実行が停止されている間に例外処理の要求が発生したとき、その例外処理の実行後に演算結果取出命令の実行を再開する取出命令再実行手段を含む。
【００２２】
この態様によれば、演算結果取出命令は、その命令が解読されるステージ以前のステージ、すなわち狭義の実行が開始される前に停止される。この間に例外処理の要求が発生したとき、その例外処理の実行後に演算結果取出命令の実行が再開される。なお、命令の狭義の実行を開始することを、以降「命令の発行」とも呼ぶ。
【００２３】
（７）本発明のある態様では、この装置はさらに、演算起動命令が解読されたとき前記演算手段を利用する旨の予約を行う予約手段と、この予約の状況に応じて演算起動命令の実行を停止する起動命令停止手段を含む。
【００２４】
この態様では、演算起動命令が解読されたとき、演算手段が利用されることが判明するため、これが予約手段で予約される。予約は、例えば単にカウンタなどの計数回路の計数値をインクリメントすることでも実現できる。起動命令停止手段は、この予約の状況に応じて演算起動命令の実行を停止する。予約が多い場合、例えばいま解読した演算起動命令の発行を即座に停止してもよいし、この命令は通常どおり発行し、つぎの命令の実行を停止してもよい。
【００２５】
（８）このとき、本発明のある態様では、前記演算手段は、演算起動命令の実行の際に演算対象データが送り込まれ、演算結果取出命令の実行の際に演算結果データが取り出されるＦＩＦＯ構造を有し、前記起動命令停止手段は、このＦＩＦＯ構造の段数と前記予約の回数との比較結果から演算起動命令の実行を停止する。
【００２６】
この態様によれば、演算起動命令が実行されるとき、ＦＩＦＯ構造に演算対象データが送り込まれ、演算結果取出命令が実行されるときＦＩＦＯ構造から演算結果データが取り出される。ＦＩＦＯ構造であるから、データの入力が出力よりも多いと、いずれ内部がフル状態となる。そこで、起動命令停止手段はＦＩＦＯ構造の段数と予約の回数との比較し、ＦＩＦＯが溢れる前に、予め演算起動命令の実行を停止するものである。
【００２７】
【発明の実施の形態】
ここで本発明の演算実行装置の好適な実施形態を適宜図面を参照しながら説明する。この装置の説明により、本発明に係る演算実行方法も明らかとなる。本実施形態では、演算実行装置としてパイプライン方式のマイクロプロセッサを考える。Ｖ８５１のＭＵＬＵに当たる部分はコプロセッサによって実現する。
【００２８】
本装置のパイプラインは、５種類のステージ、Ｉ（命令フェッチ）、Ｒ（命令解読と汎用レジスタの読出）、Ａ（ＡＬＵによる演算）、Ｍ（メモリアクセス）、Ｗ（レジスタ書込）から構成される。なお、「命令の発行」はＲステージからＡステージへの移行と同義である。
【００２９】
［構成］
図２は本装置の全体構成図である。本装置は大別して、通常の処理を統括的に行うプロセッサ４０と、Ｖ８５１のＭＵＬＵに当たるコプロセッサ５０、およびプロセッサ４０が実行すべき命令を格納する命令メモリ１、プロセッサ４０による処理の対象となるデータを格納するデータメモリ１９からなる。命令は、命令メモリバス２を介してプロセッサ４０に取り込まれる。一方、データはデータメモリバス１８を介してプロセッサ４０との間でリードライトされる。
【００３０】
プロセッサ４０内にはまず、命令メモリ２から命令をフェッチする命令フェッチ部３、命令フェッチ部３から命令語を受け取り、これを解読する命令デコード部５がある。これらがＩステージと、Ｒステージの前半に対応する。
【００３１】
命令デコード部５では、命令の種類に従って命令語のデコードを行ない、処理すべき演算の機能を示す機能コード６ａ、命令語内に埋め込まれた定数オペランドである即値オペランド６ｂ、２個のソースレジスタ番号６ｃ、６ｄ、１個のディスティネーションレジスタ番号６ｅなどを抽出する。
【００３２】
ソースレジスタ番号６ｃ、６ｄは汎用レジスタ群７に送られる。本実施形態では、汎用レジスタ群７の各レジスタがＲ０、Ｒ１…と呼ばれるものとする。汎用レジスタ群７からは、ソースレジスタ番号６ｃ、６ｄに対応するレジスタの内容が取り出され、これらがソースオペランド８ａ、８ｂとして演算部１１に送られる。これがＲステージの後半である。演算部１１は一般のプロセッサが持つ通常のＡＬＵであり、これがＡステージに対応する。
【００３３】
一方、機能コード６ａはパイプライン制御部９に送られる。パイプライン制御部９は、同図に示すように、装置全体の状態を監視し、ステージ進行を制御し、個々の命令の発行時期を決定する。
【００３４】
命令が発行可能な時期にきたとき、機能コード６ａは機能コード１０ａとして演算部１１に送られる。演算部１１では、汎用レジスタから得られたソースオペランド８ａ、８ｂ、および即値オペランド６ｂのうち必要な値を用い、パイプライン制御部９から与えられる機能コード１０ａに従って演算を行なう。演算部１１で実行される演算の意味は命令の種類毎に異なる。
【００３５】
例えば、命令が演算命令のときは、命令に示された演算が演算部１１内で実行される。演算結果は演算結果保持部１３に蓄えられる。演算結果１６は汎用レジスタ書込制御部１５を介して汎用レジスタ群７に送られる。このとき書込先のレジスタ番号として、命令のディスティネーションレジスタ番号６ｅがディスティネーションレジスタ番号１０ｂとしてパイプライン制御部９によって適切なタイミングで送り出される。汎用レジスタ書込制御部１５は、パイプライン制御部９から得られたディスティネーションレジスタ番号１０ｂを用いて汎用レジスタへの書込操作を行なう。これがＷステージに当たる。この場合、ＭステージはＮＯＰ、すなわち何もしない。
【００３６】
一方、実行中の命令がメモリアクセス命令であれば、アクセスすべきメモリアドレスの計算が演算部１１で実行される。得られたメモリアドレス１２はデータメモリアクセス制御部１４に渡される。データメモリアクセス制御部１４は、データメモリバス１８を介してデータメモリ１９のリードライトを行う。これがＭステージに相当する。メモリへの書込命令の実行は、データメモリアクセス制御部１４における実行によって完了する。この場合はＷステージがＮＯＰである。メモリからの読出命令の実行は、リードされたデータ１７が汎用レジスタ書込制御部１５を介して汎用レジスタに書き込まれたとき、すなわちＷステージの完了とともに完了する。
【００３７】
プロセッサ４０はさらに、外部割込信号２８を入力する割込信号入力部２７を持つ。割込信号が入力されたとき、これがパイプライン制御部９に通知される。
【００３８】
一方、コプロセッサ５０は、以下のバスによってプロセッサ４０とデータのやりとりを行う。すなわち、プロセッサ４０における演算結果１６とデータメモリ１９からリードされたデータ１７を含むコプロセッサ入力バス２０と、コプロセッサ５０に対するデータ等の入力を制御する信号を含むコプロセッサ入力制御バス２１と、コプロセッサ５０からのデータの出力を制御する信号を含むコプロセッサ出力制御バス２３と、コプロセッサから出力された演算結果データおよび状態信号を含むコプロセッサ出力バス２４である。
【００３９】
コプロセッサ入力バス２０とコプロセッサ入力制御バス２１は、コプロセッサ入力制御部３０で参照される。コプロセッサ入力制御部３０は、コプロセッサ５０のいずれのレジスタにデータを入力すべきかを決定するとともに、コプロセッサ５０に対してデータが入力過多になることを回避する。
【００４０】
コプロセッサ演算部３１は、コプロセッサ入力制御部３０がデータの入力を受け付けたとき、実際に演算を行う。演算結果はコプロセッサ出力制御部３２に与えられ、出力レジスタに格納される。コプロセッサ出力制御部３２は、コプロセッサ出力制御バス２３を参照し、データを出力すべきレジスタの決定と、そのレジスタからのデータ出力を制御する。出力されたデータはコプロセッサ出力バス２４を介してプロセッサ４０に与えられる。コプロセッサ出力制御部３２はさらに、演算実行の状況と、コプロセッサ入力制御部３０において判断されたデータ入力過多の状態をコプロセッサ出力バス２４に出力し、プロセッサ４０のパイプライン制御部９に対して、ステージの進行停止、命令の破棄、命令の再実行に必要な情報を提供する。
【００４１】
図３は、コプロセッサ５０の内部構成を示す図である。同図のうち、実際に演算を行うのは、コプロセッサ演算部３１のなかの固有演算部２１３であり、演算の実行は演算制御部２０９で制御される。固有演算部２１３では、通常の乗算、除算の他、例えば浮動小数点演算など、コプロセッサに固有の演算（主に２項演算）を行う。固有演算部２１３に演算対象データを供給するのは、固有演算部２１３に併設された２つの入力レジスタＳＲ０、１であり、演算結果を格納するのはコプロセッサ出力制御部３２のなかの出力レジスタＳＲ２である。ＳＲ２は演算結果をコプロセッサ出力バス２４に出力する。ここでは出力レジスタが１個のものとして描いているが、これは複数でもよく、その場合は出力レジスタデコーダ２１４が、データをバスに出力すべきレジスタを選択する。
【００４２】
本実施形態では、入力レジスタＳＲ０、１の前段に、それぞれＦＩＦＯａ２０２、ＦＩＦＯｂ２０３が設けられている。これらは、直接コプロセッサ入力バス２０に接続されており、プロセッサ４０から与えられたデータを格納することができる。プロセッサ４０がコプロセッサに演算の実行を指示したとき、入力レジスタデコーダ２１０によって、ＳＲ０、１のいずれの入力レジスタに対するデータ入力を行うべきであるかが判定される。この判定は、入力レジスタデコーダ２１０がコプロセッサ入力制御バス２１に乗せられたコプロセッサレジスタ番号を見て行う。データを入力すべきＦＩＦＯに対しては、入力レジスタデコーダ２１０から書込指示信号ＷａまたはＷｂが出力され、そのときコプロセッサ入力バス２０に乗せられていたデータが、ＦＩＦＯａ２０２またはＦＩＦＯｂ２０３に書き込まれる。固有演算部２１３は、実行中の演算が終了するたびに、ＦＩＦＯａ２０２、ｂ２０３からデータを取り出し、新たな２項演算を開始する。
【００４３】
本実施形態では、演算起動命令が、単にコプロセッサ５０に対するデータ転送命令であるとする。すなわち、明示的に演算を起動するための命令は不要であり、ＳＲ０、１に対する以下のデータ転送命令によって演算が起動される。これはプロセッサ４０のＷステージ（レジスタへの書込）で行われる。
【００４４】
ＬＤ  ＳＲ０，（Ｒ０）  ：メモリのＲ０番地のデータをＳＲ０にロード
ＬＤ  ＳＲ１，（Ｒ１）  ：メモリのＲ１番地のデータをＳＲ１にロード
固有演算部２１３は、ＳＲ０と１にデータが揃いしだい演算を開始する。一方、本実施形態では、演算結果取出命令がコプロセッサ５０からの読出命令であるとする。すなわち、
ＳＴ  ＳＲ２，（Ｒ２）  ：メモリのＲ２番地にＳＲ２のデータをストア
という命令により、演算結果の取出が行われる。これはプロセッサ４０のＡステージで行われる。
【００４５】
コプロセッサ５０内において、ＦＩＦＯ、入力レジスタＳＲ０、１、固有演算部、出力レジスタＳＲ２の経路は全体としてＦＩＦＯ構造となり、パイプラインを構成する。このパイプラインにおける処理は、プロセッサ４０側のパイプラインの各ステージと一定の同期関係を持つ。すなわち、プロセッサ４０のＷステージでコプロセッサ５０のＳＲ０、１にデータが書き込まれると、これが演算を起動する。演算結果は、ＡステージでＳＲ２から読み出される。
【００４６】
演算結果取出命令は、後述のようにＲステージでコプロセッサ５０の演算完了を待つ。Ｒステージは、まだハードウエア資源の状態を変化させないため、破棄が容認されることになる。この結果、Ｒステージで割込要求等を即座に受け付けることが可能となる。本実施形態では、ハードウエア資源の状態が変化しうるＡステージ以降では命令を破棄しないものとする。
【００４７】
図３において、計数回路ａ２０４、ｂ２０５は、それぞれ前記書込指示信号Ｗａ、Ｗｂが出力されたとき計数値をインクリメントするカウンタである。これらの計数回路は、出力レジスタデコーダ２１４がＳＲ２に対してデータの出力を指示したとき、演算制御部２０９を介してこの通知を受け、計数値をデクリメントする。従って、これらの計数回路はそれぞれ、ＦＩＦＯａ２０２、ｂ２０３に格納されているデータの個数を示すことになり、図示しない任意の回路から任意の目的で参照される。
【００４８】
一方、計数回路ｒａ２０６、ｒｂ２０７は、それぞれ予約レジスタデコーダ２１１からの書込指示信号Ｗｒａ、Ｗｒｂに従って計数値をインクリメントし、前記計数回路ａ２０４、ｂ２０５と同様の条件で計数値をデクリメントするカウンタである。書込指示信号Ｗｒａ、Ｗｒｂは、プロセッサ４０の命令デコード部５で解読された命令が、それぞれＳＲ０、１に対する書込を予告する場合、予約レジスタデコーダ２１１から出力される。従って、計数回路ｒａ２０６、ｒｂ２０７におけるインクリメントの回数は、結果的に計数回路ａ２０４、ｂ２０５のそれらと同じになるが、インクリメントのタイミングが早い。計数回路ｒａ２０６、ｒｂ２０７の計数値は、実際にＦＩＦＯａ２０２、ｂ２０３に格納されているデータの個数と、近い将来格納されるデータの個数の和を示す。なお、固有演算部２１３が必ず２項演算を行う場合、計数回路ａ２０４、ｂ２０５はいずれか一方で足りるが、演算結果に対してＳＲ０の値を繰り返し足していくような演算を実現する場合、両計数回路を別々に持つ必要がある。
【００４９】
コプロセッサ出力制御部３２はさらに、パイプライン処理情報生成部２１２を持つ。図４はその内部構成図である。同図のごとく、この構成は、演算完了判定部２３０と起動命令実行停止部２３１を含み、これらからコプロセッサレディ信号（以下単に「レディ信号」）２２０が出力される。演算完了判定部２３０は、演算の完了をソフトウエアのポーリングによってではなく、演算回路内部のシーケンサの状態をハードウエア的に監視することで検出する。ポーリングには一定のオーバヘッドが発生するためである。
【００５０】
演算完了判定部２３０と起動命令実行停止部２３１の出力は、例えばワイアードオア形式で接続される。レディ信号２２０は、プロセッサ４０がコプロセッサ５０との間で処理のハンドシェイクを行うための信号であり、次の条件で出力される。
【００５１】
１．ＳＲ０へのデータ転送命令の際
予約も考慮し、計数回路ｒａ２０６の値がＦＩＦＯａ２０２に格納できるデータの個数よりも小さいとき
２．ＳＲ１へのデータ転送命令の際
同様に、計数回路ｒｂ２０７の値がＦＩＦＯｂ２０３に格納できるデータの個数よりも小さいとき
３．ＳＲ２からのデータ転送命令の際
出力レジスタに演算結果が存在するとき
これらのうち、１と２の場合は前記起動命令実行停止部２３１によって、３の場合は前記演算完了判定部２３０によって、それぞれレディ信号２２０が出力される。このレディ信号２２０は、それぞれの命令のＲステージでコプロセッサ５０から出力され、同じステージにおいてプロセッサ４０から参照される。レディ信号２２０が出力されたとき、プロセッサ４０は上記１〜３のうち、現在発行が待たされている命令を発行する。Ｒステージで参照することにより、必要に応じて命令の破棄と再実行が可能となる。
【００５２】
一方、図５は、プロセッサ４０のパイプライン制御部９の内部構成の一部を示す図である。パイプライン制御部９はステージ進行制御部９０を含み、ステージ進行制御部９０は、取出命令実行停止部９１と取出命令再実行部９２を含む。取出命令実行停止部９１はレディ信号２２０を参照し、コプロセッサ５０がレディ状態になるまでコプロセッサ５０で演算された演算結果をこれより取り出す演算結果取出命令の発行を停止する。取出命令再実行部９２は、割込の発生によって演算結果取出命令が破棄された場合、この命令をＩステージから再実行する。
【００５３】
［動作］
以上の構成による動作をパイプライン関連動作を中心に説明する。
【００５４】
図６は、本実施形態の装置によって演算起動命令（図中「命令１」と表記）および演算結果取出命令（同「命令２」）を実行するときのパイプライン処理を示す図である。実際には、命令１は、
ＬＤ  ＳＲ０，（Ｒ０）
ＬＤ  ＳＲ１，（Ｒ１）
の２つの命令によって構成されるが、ここでは説明の便宜上、１命令として描いている。一方、命令２は、
ＳＴ  ＳＲ２，（Ｒ２）
である。
【００５５】
まず、図６で命令１が実行される。命令１は演算を起動するだけであるため、Ｉ〜Ｗステージが１クロックづつで終わる。Ｗステージ（より正確には、そのステージの前半）でコプロセッサ５０のレジスタに対する演算対象データの書込が完了するため、Ｗステージ（より正確には、その中途）からコプロセッサ５０による演算が開始される。
【００５６】
一方、プロセッサ４０自体は命令１のＲステージと並行して命令２のＩステージを開始する。命令２は、命令１の演算結果を必要とするため、演算の完了まで発行が待たされる。演算実行中は、図４の演算完了判定部２３０がレディ信号２２０を出力せず、ノット・レディの状態に維持している。同図では、演算実行中、命令２がＲステージを繰り返し、演算完了後のクロック（ｎ＋１）ではじめてＡステージに進行している。
【００５７】
図７は命令２がＲステージにあるときにプロセッサ４０に対して割込要求が発生した場合のパイプライン処理を示す図である。同図では、クロック６中の矢印が割込要求の発生タイミングを示す。プロセッサ４０はクロック７で命令２を破棄し、命令フェッチ部３による命令フェッチは、割込処理ハンドラの先頭アドレスに飛ぶ。以降、ハンドラ処理が同様にパイプラインによって行われ、これが終了した後、図５の取出命令再実行部９２により、命令２がＩステージから再実行される。
【００５８】
このように本実施形態では、コプロセッサ５０による演算の実行を演算起動と演算結果取出の２段階に分けることにより、割込要求に対して即座に対応することができる。仮に命令１が、
ＭＵＬ  ＳＲ２，ＳＲ０，ＳＲ１  ：ＳＲ０、１の積をＳＲ２に格納
のごとく、演算の起動と結果の取出を兼ねる命令であれば、図７の命令１がＡステージ（演算）で延々とつづく可能性があり、かつＡステージでは命令の破棄が許されないため、割込要求が長時間待たされうる。本実施形態では、仮に命令２を破棄しても、演算の実行自体はコプロセッサ５０によって続行されていため、処理性能上ほとんど問題がない。
【００５９】
本実施形態では、予約という概念を導入した。すなわち、図３の予約レジスタデコーダ２１１と計数回路ｒａ２０６、ｒｂ２０７により、コプロセッサ５０内のＦＩＦＯａ２０２、ｂ２０３の予約が行われる。予約でフルの状態になれば、図４の起動命令実行停止部２３１がつぎの演算起動命令の発行を待たせるため、コプロセッサ５０に対するデータ入力の過多状態が回避される。このことから逆に、いったんコプロセッサ５０に入力することが許可されたデータについては、必ず円滑に演算が行われることが保証される。本実施形態では、コプロセッサ５０に対するデータの書込が命令の最後ステージＷで行われる。従って、後続の命令のＡステージで、まだＦＩＦＯａ２０２、ｂ２０３に空きがあっても、これが前の命令のＷステージで埋まる可能性がある。そのために、Ａステージで正しく空きを把握できるよう、予約動作が必要かつ有用となる。
【００６０】
以上が実施形態の概要である。なお、本実施形態については、以下の改良または変形が可能である。
【００６１】
（１）本実施形態では、データ転送命令で直接コプロセッサ５０の演算を起動したが、この必要はない。例えばＡＤＤなど、明示的な演算開始命令を演算起動命令としても同様の効果が得られる。
【００６２】
（２）コプロセッサ５０による演算は、単項演算、積和演算など一般的な演算に限られない。例えばコプロセッサ５０に、周辺機器との通信の制御、マルチプロセッサ装置におけるプロセッサ間通信制御など、数値演算以外の演算を担当させてもよい。
【００６３】
（３）ここでは５段のパイプライン構成を説明したが、これは任意の段数、任意の処理ステージからなるパイプラインでよい。
【００６４】
（４）本実施形態では、演算完了の判定をコプロセッサ５０側で行ったが、これはプロセッサ４０側で行ってもよい。実際の設計では、プロセッサ４０とコプロセッサ５０の間に明確な境界線を引くことができないか、または引く必要がない。特に図４と図５の構成については、現実の設計方針に即して同様の効果を得る構成が多数存在すること注意すべきである。
【００６５】
（５）本実施形態では、ＲＩＣＳプロセッサを例に挙げたが、これは当然、ＣＩＳＣまたはそれ以外のアーキテクチャであってもよい。
【００６６】
（６）本実施形態では、命令破棄の要因として割込要求の発生を挙げたが、これは例外処理などいかなる要因であってもよい。
【００６７】
（７）本実施形態では、Ｒステージで命令の実行を停止したが、異なるパイプライン構成をとる場合、異なるステージで停止することができる。設計の観点からすれば、ハードウエア資源の状態を変更する以前のステージで停止することが望ましいが、必ずしもそれに限るものではない。
【００６８】
【発明の効果】
本発明の演算実行方法によれば、演算起動命令と演算結果取出命令を別々に設け、演算完了まで後者の実行を破棄可能な状態で停止するため、例外処理等が不当に待たされることはない。仮に例外処理が発生しても、演算自体を再実行する必要はなく、処理性能が落ちない。このためのハードウエアも複雑化、長大化しない。
【００６９】
命令をパイプライン処理によって実行する場合、演算完了の判定をパイプライン処理動作の一環として行うことができるため、好都合である。
【００７０】
一方、本発明の演算実行装置によれば、演算実行方法の効果を実際の装置として実現することができる。演算完了もハードウエア的に判定されるため、オーバヘッドによる性能低下もない。
【００７１】
この装置がパイプライン制御手段を含むとき、演算結果取出命令の実行停止をパイプライン処理中の関連するステージで行うことができるため、回路構成上自然であり、設計上も好都合である。
【００７２】
演算結果取出命令が解読されるステージ以前のステージでその命令の実行が停止されるときは、仮に例外処理が発生しても、ハードウエア資源の状態を変えることなく、例外処理を行うことができる。
【００７３】
演算手段に対する予約の効果を考慮して演算起動命令の実行を停止する場合は、演算手段に対するデータ入力がパイプラインの後半のステージにある場合でも、そのデータ入力が予約されるため、演算手段に対してデータの入力が過多になることがない。演算手段がＦＩＦＯ構造を持つ場合、いったん発行された命令は必ず最後まで実行されることを保証するものである。
【図面の簡単な説明】
【図１】Ｖ８５１によるパイプライン処理の様子を示す図である。
【図２】実施形態に係る演算実行装置の全体構成図である。
【図３】コプロセッサの内部構成を示す図である。
【図４】パイプライン処理情報生成部の内部構成図である。
【図５】プロセッサのパイプライン制御部の内部構成の一部を示す図である。
【図６】実施形態の装置によって演算起動命令および演算結果取出命令を実行するときのパイプライン処理を示す図である。
【図７】命令２がＲステージにあるときに割込要求が発生した場合のパイプライン処理を示す図である。
【符号の説明】
１  命令メモリ、２  命令メモリバス、３  命令フェッチ部、５  命令デコード部、７  レジスタ群、９  パイプライン制御部、１１  演算部、１３  演算結果保持無部、１４  データメモリアクセス制御部、１５  汎用レジスタ書込制御部、１８  データメモリバス、１９  データメモリ、２０  コプロセッサ入力バス、２１  コプロセッサ入力制御バス、２３  コプロセッサ出力制御バス、２４コプロセッサ出力バス、２７  割込信号入力部、３０  コプロセッサ入力制御部、３１  コプロセッサ演算部、３２  コプロセッサ出力制御部、４０  プロセッサ、５０  コプロセッサ、９０  ステージ進行制御部、９１  取出命令実行停止部、９２  取出命令再実行部、２０２  ＦＩＦＯａ、２０３  ＦＩＦＯｂ、２０４  計数回路ａ、２０５  計数回路ｂ、２０６  計数回路ｒａ、２０７  計数回路ｒｂ、２０９  演算制御部、２１０  入力レジスタデコーダ、２１１  予約レジスタデコーダ、２１２  パイプライン処理情報生成部、２１３  固有演算部、２１４  出力レジスタデコーダ、２２０  レディ信号、２３０  演算完了判定部、２３１  起動命令実行停止部。
【図１】
0003630904.tif 000002
【図２】
0003630904.tif 000003
【図３】
0003630904.tif 000004
【図４】
0003630904.tif 000005
【図５】
0003630904.tif 000006
【図６】
0003630904.tif 000007
【図７】
0003630904.tif 000008