(57)【特許請求の範囲】
【請求項１】
ＣＰＵと接続された演算装置において、
前記ＣＰＵは、データを入出力するためにバスを用いるものであって、
前記演算装置とＣＰＵとは、前記バスとは別の、前記ＣＰＵの内部状態を入出力するための接続手段によって接続されており、
前記演算装置は、
前記接続手段を介して前記ＣＰＵの内部状態をモニタすることにより演算状態を決定したり演算に必要な情報を取得したりするＣＰＵ内部状態モニタ手段と、
前記内部状態モニタ手段によって決定された演算状態と、前記内部状態モニタ手段によって取得された演算に必要な情報とに基づいて演算を行う演算手段と、
前記演算手段による演算過程において前記ＣＰＵの内部状態を変える必要が生じた場合には前記接続手段を介して前記ＣＰＵの内部状態を書き換えるＣＰＵ内部状態制御手段とを備えること
を特徴とする演算装置。
【請求項２】
請求項１に記載の演算装置において、
前記ＣＰＵの内部状態は、前記ＣＰＵのレジスタの値であること
を特徴とする演算装置。
【請求項３】
請求項２に記載の演算装置において、
前記ＣＰＵ内部状態モニタ手段は、前記ＣＰＵのレジスタの値が所定の値になったことを検出するレジスタ値デコード手段を備えること
を特徴とする演算装置。
【請求項４】
請求項２に記載の演算装置において、
前記ＣＰＵ内部状態モニタ手段は、前記ＣＰＵのレジスタの値のデコード結果を前記ＣＰＵの内部状態としてモニタするレジスタ値デコード結果モニタ手段を備えること
を特徴とする演算装置。
【請求項５】
請求項２〜４のいずれかに記載の演算装置において、
前記レジスタは、プログラムカウンタであること
を特徴とする演算装置。
【請求項６】
請求項１〜５のいずれかに記載の演算装置において、
前記ＣＰＵ内部状態モニタ手段は、前記ＣＰＵの内部状態に基づき前記演算状態として演算の開始を決定すること
を特徴とする演算装置。
【請求項７】
請求項１〜６のいずれかに記載の演算装置において、
前記ＣＰＵ内部状態モニタ手段は、前記ＣＰＵの内部状態に基づき前記演算状態として演算の内容を決定すること
を特徴とする演算装置。
【請求項８】
請求項７に記載の演算装置において、
前記ＣＰＵ内部状態モニタ手段は、前記ＣＰＵの内部状態として前記ＣＰＵのレジスタの値をモニタし、前記演算の内容を、当該ＣＰＵのレジスタの値に基づいて決定すること
を特徴とする演算装置。
【請求項９】
請求項２に記載の演算装置において、
前記ＣＰＵ内部状態モニタ手段は、前記ＣＰＵのレジスタを直接読み出すことにより演算に必要な情報を取得し、
前記ＣＰＵ内部状態制御手段は、前記演算手段による演算過程において前記ＣＰＵのレジスタの値を変える必要が生じた場合にはＣＰＵの備えるレジスタを直接書き換えること
を特徴とする演算装置。
【請求項１０】
請求項２または３に記載の演算装置において、
前記ＣＰＵの内部状態としてＣＰＵのレジスタの値を用い、
前記レジスタの値を記憶可能な記憶手段を備え、
前記ＣＰＵ内部状態モニタ手段は、前記ＣＰＵの備えるレジスタの値を前記記憶手段へ転送し、当該記憶手段を読み出すことにより演算に必要な情報を取得し、
前記ＣＰＵ内部状態制御手段は、前記演算手段による演算過程において前記ＣＰＵのレジスタの値を変える必要が生じた場合には、当該レジスタに対応する前記記憶手段を書き換えた後、当該記憶手段の値を前記レジスタへ転送することによって前記ＣＰＵの備えるレジスタの値を書き換えること
を特徴とする演算装置。
【請求項１１】
請求項１０に記載の演算装置において、
前記記憶手段は、複数のバンクを備え、
前記内部状態モニタ手段は、前記ＣＰＵの内部状態に基づき前記演算状態として、利用する前記バンクを決定すること
を特徴とする演算装置。
【請求項１２】
請求項１〜１１のいずれかに記載の演算装置において、
前記ＣＰＵとの同期が必要な時点間の処理は、予め定められた処理サイクルで行うこと
を特徴とする演算装置。
【請求項１３】
請求項６に記載の演算装置において、
演算の開始から終了までの処理を予め定められた処理サイクルで行うこと
を特徴とする演算装置。
【請求項１４】
請求項６に記載の演算装置において、
演算の開始から、前記内部状態モニタ手段が、前記ＣＰＵの内部状態を取り込むまでの処理サイクルと、前記演算の開始または前記ＣＰＵの内部状態の取り込みから、前記内部状態書き換え手段が前記ＣＰＵの内部状態を書き換えるまでの処理サイクルが予め定められていること
を特徴とする演算装置。
【請求項１５】
請求項１〜１４のいずれかに記載の演算装置において、
前記ＣＰＵ内部状態制御手段は、前記ＣＰＵの内部状態へ同期の為の命令を書き込むことにより前記ＣＰＵと同期をとること
を特徴とする演算装置。
【請求項１６】
請求項１５に記載の演算装置において、
前記同期が必要な場合は、演算の終了であって、前記同期の為の命令として演算の終了に相当する命令を書き込むこと
を特徴とする演算装置。
【請求項１７】
請求項１〜１６のいずれかに記載の演算装置において、
前記ＣＰＵとの同期をとるために前記ＣＰＵの処理を停止させるＣＰＵ停止手段を備えること
を特徴とする演算装置。
【請求項１８】
請求項１７に記載の演算装置において、
前記ＣＰＵ停止手段は、ＣＰＵへ供給されるクロックを停止させることでＣＰＵの処理を停止させること
を特徴とする演算装置。
【請求項１９】
請求項１〜１８のいずれかに記載の演算装置はオペレーティングシステムを実装したこと
を特徴とする演算装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
演算装置に関する。
【０００２】
【従来の技術】
従来より、ＣＰＵとは別に演算装置を設け、ＣＰＵが演算装置に演算を行わせることによって処理の高速化等を図ったコンピュータシステムが知られている（例えば、特許文献１参照）。
【０００３】
こうした従来のコンピュータシステムの例を図８に示して説明する。図８に示すコンピュータシステムは、ＣＰＵ５２０，演算装置５１０，ＲＯＭ５９０，ＲＡＭ６００，割り込みコントローラ６１０，図示しない入出力装置，ＣＰＵ５２０とＲＯＭ５９０とを接続するアドレスバス７１０及びデータバス７２０，ＣＰＵ５２０とＲＡＭ６００・演算装置５１０・割り込みコントローラ６１０・入出力装置等を接続するアドレスバス７３０及びデータバス７４０を備える。
【０００４】
ＣＰＵ５２０は、制御部５７０が、アドレスバス７１０を介して読み込み対象の命令のアドレスを指定し、データバス７２０を介してＲＯＭ５９０からそのアドレスの命令を取得して実行する。そしてＣＰＵ５２０は、命令の実行により、ＲＡＭ６００，演算装置５１０，割り込みコントローラ６１０，図示しないＩ／Ｏなどとのデータの入力または出力を行う場合には、アドレスバス７３０でそのアドレスを指定し、データバス７４０を介してデータの入力または出力を行う。
【０００５】
演算装置５１０は、所定の演算（すなわち、このコンピュータシステム上で高速化する必要のある演算）を実行するための演算部５６０を備える。また演算装置５１０は、演算部５６０を制御する制御部５５０を備える。制御部５５０は、アドレスバス７３０の所定のアドレスにマップされた演算開始フラグレジスタを備え、この演算開始フラグレジスタのフラグが立った際にアドレスバス７３０及びデータバス７４０を制御してＲＡＭ６００に記憶された演算対象のデータをデータバス７４０を介して取得して、演算部５５０に演算を実行させる。
【０００６】
また制御部５５０は、演算部５６０による演算の終了時などＣＰＵと同期を取る必要がある場合に、割り込みコントローラ６１０へ割り込み信号を送り、ＣＰＵ５２０に対して割り込みをかける。
こうしたコンピュータシステムで、ＣＰＵ５２０が演算装置５１０に演算を行わせる場合には、（１）ＣＰＵ５２０から演算装置５１０への演算処理の開始要求を行い、（２）ＣＰＵ５２０と演算装置５１０との演算用データ等のデータのやりとりを行って、（３）演算装置５１０とＣＰＵ５２０との同期をとる動作を行う。これらについて以下に詳細に説明する。
【０００７】
（１）ＣＰＵ５２０から演算装置５１０への演算処理の開始要求を行う場合、ＣＰＵ５２０は、アドレスバス７３０を介して、演算装置５１０の演算開始フラグレジスタのアドレスを指定し、データバス７４０を介して演算開始フラグを立てるデータを出力する。演算装置５１０の制御部５５０は、演算開始フラグが立った場合に演算部５６０を制御して演算を開始させる。このようにＣＰＵ５２０から演算装置５１０への演算処理の要求は、アドレスバス７３０及びデータバス７４０を利用して行っている。
【０００８】
（２）ＣＰＵ５２０と演算装置５１０との演算データ等のデータの受け渡しは、例えばＲＡＭ６００の所定の演算データ格納用アドレスの記憶領域を介して行う。すなわち、ＣＰＵ５２０は、演算データ格納用アドレスをアドレスバス７３０を介して指定し、データバス７４０を介してＣＰＵ５２０のＣＰＵ内部状態部５８０の内部レジスタに保持されているデータをＲＡＭ６００へ格納させる。一方、演算装置５１０がデータを取得する場合には、演算装置５１０は、演算データ格納用アドレスをアドレスバス７３０を介して指定し、データバス７４０を介してＲＡＭ６００に保持されているデータを取得する。また、逆に演算装置５１０による演算結果をＣＰＵ５１０へ渡す場合には、演算装置５１０は、演算データ格納用アドレスをアドレスバス７３０を介して指定し、データバス７４０を介してＲＡＭ６００に演算結果を記憶させて、ＣＰＵ５２０が、この演算データ格納用アドレスをアドレスバス７３０を介して指定し、データバス７４０を介してＲＡＭ６００に記憶された演算結果をＣＰＵ５２０の内部状態部５８０の内部レジスタに取り込む。
【０００９】
このようにＣＰＵ５２０と演算装置５１０とのデータの受け渡しは、アドレスバス７３０及びデータバス７４０を利用して行っており、このようなアドレスバス７３０を介したアドレスを指定や、データバス７４０を介したデータのやりとりには、データ容量／バス幅分の処理サイクルが必要となっている。
【００１０】
（３）演算装置５１０とＣＰＵ５２０との同期をとるため、ＣＰＵ５２０は、上記（１）に示した演算処理の開始要求を演算装置５１０へ出力した後、自身の動作を停止する命令を実行して動作（処理）を停止する。そして、演算装置５１０は、例えば演算の終了時など、ＣＰＵ５２０と同期をとる必要がある場合に、ＣＰＵ５２０に対して所定の割り込みをかける。すなわち、演算装置５１０の制御部５５０は、割り込みコントローラ６１０に対してＣＰＵ５２０への割り込みを要求し、割り込みコントローラはこの要求を受けるとＣＰＵ５２０に対して割り込みをかける。ＣＰＵ５２０は、割り込みコントローラ６１０から割り込みがかけられたことを検知した場合、処理を再開し、この割り込み要因（割り込みの種類）を割り込みコントローラ６１０から受け取って、割り込み要因に対応する割り込み処理を実行する。このようにして、演算装置５１０は、演算処理の終了など同期が必要な際に、その旨をＣＰＵ５２０へ通知して、ＣＰＵ５２０の処理を再開させて、同期を取っている。
【００１１】
【特許文献１】
特開２００１−３０６３１７号公報
【００１２】
【発明が解決しようとする課題】
このように従来のＣＰＵと演算装置とのインターフェース（Ｉ／Ｆ）は、アドレスバス・データバスなどのバスや、割り込みコントローラ・ＲＡＭなどの周辺回路を介して行われており、データのやりとりや処理に時間がかるという課題がある。
【００１３】
そこで、データの受け渡しや処理にかかる時間を短縮することができる演算装置を提供することを目的とする。
【００１４】
【課題を解決するための手段及び発明の効果】
上述した問題点を解決するためになされた請求項１に記載の演算装置は、ＣＰＵと接続された演算装置であって、ＣＰＵはデータを入出力するためにバスを用いるものであって、演算装置とＣＰＵとは、このバスとは別の、ＣＰＵの内部状態を入出力するための接続手段によって接続されている。
【００１５】
そして、演算装置は、この接続手段を介してＣＰＵの内部状態をモニタすることにより演算状態を決定したり、演算に必要な情報を取得したりする。そして、決定した演算状態と取得した演算に必要な情報とに基づいて演算を行い、この演算過程においてＣＰＵの内部状態を変える必要が生じた場合には、この接続手段を介してＣＰＵの内部状態を書き換える。
【００１６】
したがって、演算装置は、バスを介して演算状態を決定したり、バスを介して演算に必要な情報をＣＰＵから取得したり、バスを介して演算装置からＣＰＵへ例えば演算結果等のデータを送ったりする必要がなくなる。そのため、データの受け渡しや処理にかかる時間を短縮することができる。またＣＰＵは、演算装置の処理中にバスを使用してバスに接続された装置（例えばＲＡＭやＩ／Ｏ装置）へのアクセスを行うことが可能となり、その結果、システム全体の処理速度を高めることが可能となる。
【００１７】
このようにモニタしたり、書き換えたりするＣＰＵの内部状態は、例えば、請求項２に示すようなＣＰＵのレジスタの値とすることができる。例えばＣＰＵのレジスタ値をＣＰＵの内部状態としてモニタして、レジスタ値が所定の値になった場合に演算状態を所定の演算状態にすることができる。例えば汎用レジスタの値と実行対象の命令のデコード情報を格納したレジスタの値の双方をＣＰＵの内部状態としてモニタして、汎用レジスタ値及びデコード情報が所定の状態となった場合に演算状態を所定の演算状態にすることができる。また、書き換えるＣＰＵの内部状態として例えばレジスタファイルの値を用いれば演算結果をレジスタファイル内へ格納させることができ、書き換えるＣＰＵの内部状態として例えば実行対象の命令のデコード情報を格納したレジスタを用いれば演算結果に応じた命令をＣＰＵに実行させることができる。このように、モニタするＣＰＵのレジスタとしては、例えば、ＣＰＵのレジスタファイル、ステータスレジスタ、デコード情報を格納したレジスタ、シーケンス遷移情報を格納するレジスタ、請求項５に例示するようなプログラムカウンタなどの、いずれか、あるいは、これらの組み合わせを用いることができる。
【００１８】
なおＣＰＵの内部状態は、レジスタの値そのものを接続手段を介して取得するようにしてもよいし、レジスタの値をデコードした結果を接続手段を介して取得するようにしてもよい。例えば、請求項３に示すように、演算装置がレジスタ値デコード手段を備えるようにしてモニタしてもよいし、請求項４に示すように、ＣＰＵでレジスタ値のデコードを行い、そのデコード結果をＣＰＵの内部状態として演算装置でモニタするレジスタ値デコード結果モニタ手段を備えるようにして、モニタしてもよい。
【００１９】
ＣＰＵの内部状態をモニタして決定する演算状態としては、例えば、請求項６に示すように、演算の開始を決定するものや、請求項７に示すように演算の内容を決定するものを含むとよい。
請求項６に示すように、演算状態として演算の開始を決定すれば、ＣＰＵはバスを使用することなく演算の開始を演算装置へ知らせることができる。したがって、ＣＰＵは、その間バスを使用して処理を行うことが可能となり、処理を高速化することができる。例えば、請求項５に示す構成を備える場合、ＣＰＵの処理を所定のアドレスへ移行させるだけで演算を開始させることができる。
【００２０】
また、請求項７に示すように、演算状態として演算の内容を決定すれば、ＣＰＵはバスを使用することなく演算の内容を演算装置へ知らせることができる。したがって、ＣＰＵは、その間バスを使用して処理を行うことが可能となり、処理を高速化することができる。
【００２１】
演算装置において用いるＣＰＵの内部状態としては、例えば前述した請求項２〜５に示すものが挙げられる。例えば、請求項２に示した構成と請求項７に示した構成を備える場合には請求項８に示すように、ＣＰＵの内部状態としてＣＰＵのレジスタの値をモニタし、演算の内容を、そのＣＰＵのレジスタの値に基づいて決定することとなる。例えば、複数の種類の演算を実行可能な演算装置であって、いずれの演算を実行するかを、ＣＰＵのレジスタの値に基づいて決定することができる。また、例えば、プログラムカウンタやステータスレジスタの値によって実行する演算の内容を変えたり、レジスタファイルの値によって実行する演算の内容を変えたりすることができる。
【００２２】
なお、こうしたＣＰＵの内部状態は、ＣＰＵの内部で保持されている内部状態を直接演算装置が読み出してもよいし、例えば、演算装置内に記憶手段を設け、この記憶手段に対してＣＰＵの内部で保持されている内部状態を転送し、この転送した内部状態を利用するようにしてもよい。また、ＣＰＵの内部状態を書き換える場合には、演算装置は直接ＣＰＵの内部で保持されている内部状態を書き換えるようにしてもよいし、演算装置の記憶手段に記憶されている内部状態を書き換えた上で記憶手段の内容をＣＰＵの内部へ転送するようにして書き込んでもよい。例えば、ＣＰＵの内部状態としてＣＰＵのレジスタの値を用いる場合には、請求項９に示すように、ＣＰＵの備えるレジスタを直接読み出すことにより演算に必要な情報を取得し、演算過程においてＣＰＵのレジスタの値を変える必要が生じた場合にはＣＰＵの備えるレジスタを演算装置が直接書き換えるようにしてもよいし、請求項１０に示すように、演算装置にレジスタの値を記憶可能な記憶手段を備え、ＣＰＵの備えるレジスタの値を演算装置の記憶手段へ転送し、演算装置はこの記憶手段を読み出すことにより演算に必要な情報を取得して、演算過程においてＣＰＵのレジスタの値を変える必要が生じた場合には、そのレジスタに対応する記憶手段を書き換えた後、その記憶手段の値をレジスタへ転送することによってＣＰＵの備えるレジスタの値を書き換えるようにしてもよい。
【００２３】
演算装置が記憶手段を備える場合には、例えば請求項１１に示すように、記憶手段は、複数のバンクを備え、ＣＰＵの内部状態に基づき演算状態として、利用するバンクを決定するようにしてもよい。例えば、ＣＰＵのレジスタの内容をバンク切換により複数セット記憶可能とするとよい。
【００２４】
そして、演算装置は、請求項１２に示すように、ＣＰＵとの同期が必要な時点間の処理を予め定められた処理サイクルで行うとよい。このようにすれば、ＣＰＵが実行するプログラムの開発時に、次にＣＰＵと演算装置との間で同期が必要な時点までの処理サイクルが分かる。したがって、従来のように、同期の必要な時点で演算装置から割り込みコントローラ等の周辺回路を介してＣＰＵへ割り込みをかけて知らせなくても、例えばＣＰＵで実行する処理の内容をこの処理サイクルに合わせて調整しておくことにより、演算装置との同期をとることができる。なお、この調整は、プログラマがこの予め定められた処理サイクルを加味してプログラムを作成するようにして行ってもよいし、例えば、コンパイラやアセンブラにこの処理サイクルを加味した命令コードを生成する機能を備えるようにして、調整されたプログラムを自動的に生成するようにしてもよい。
【００２５】
こうしたＣＰＵとの同期が必要な時点としては、例えば、請求項１３に示すような演算の開始や終了、請求項１４に示すようなＣＰＵの内部状態の取り込みやＣＰＵの内部状態の書き換えの時点などが挙げられる。
例えば演算装置での演算の終了後にその演算の結果を利用した処理をＣＰＵで行う場合などには、演算装置で演算が終了したことをＣＰＵ側で知る必要がある。このように演算の終了をＣＰＵ側で知る必要がある場合、従来は前述のように、ＣＰＵに対して割り込みコントローラ等を介して演算の終了を通知するようにしていた。しかし、請求項１３に示すように、演算の開始から終了までの処理を予め定められた処理サイクルで行うように演算装置を構成することにより、こうした通知を不要とすることができる。例えば、ＣＰＵと演算装置を並行して動作させ、演算開始からこの予め定められた処理サイクルが経過した時点で、演算結果を利用する処理を行うようにＣＰＵのプログラムを作成することができる。
【００２６】
また、請求項１４に示す演算装置によれば、演算の開始からＣＰＵの内部状態の取り込みまでの処理サイクルや、演算開始またはＣＰＵの内部状態の取り込みからＣＰＵの内部状態を書き換えまでの処理サイクルが予め定められている。したがって、この処理サイクルを加味してＣＰＵで実行するプログラムを作成することができる。すなわち、演算の開始からＣＰＵの内部状態の取り込みまでの処理サイクルの間に、演算装置が取り込むべき内部状態をＣＰＵが生成するようにプログラムを構成したり、演算開始またはＣＰＵの内部状態の取り込みからＣＰＵの内部状態を書き換えまでの処理サイクルの間に、例えばＣＰＵの内部状態の書き換えに対応するための内部状態の退避等を行うようなプログラムを構成することが容易にできる。
【００２７】
このように請求項１２〜１４に示す演算装置によれば、例えばＣＰＵと演算装置を並行して動作させることが容易にできる。また、演算装置の処理サイクルに適合したプログラムを容易に作成できる。つまりプログラムを最適化することができるため、システム全体の処理効率を高めて処理速度を向上させることが可能となる。なお、請求項１２〜１４に示した演算装置において、演算装置が複数の種類の演算を行う場合には、例えば、行う演算の種類毎に異なる処理サイクルが定められていてもよいし、すべての演算で処理サイクルを同一としてもよい。
【００２８】
一方、こうした演算装置とＣＰＵとの同期は、演算装置がＣＰＵの実行する命令を制御することによって、とることもできる。例えば、請求項１５に示すように、ＣＰＵの内部状態へ同期の為の命令を書き込むことにより前記ＣＰＵと同期をとるとよい。例えば、ＣＰＵの命令実行に関するレジスタの値を書き換えることによって、ＣＰＵと同期をとるようにしてもよい。ＣＰＵが実行する命令に関するレジスタとしては、例えば、ＣＰＵの命令をフェッチ、デコード、実行するいずれかのレジスタなどが挙げられる。例えば、こうしたレジスタに対して、同期のための命令を演算装置が書き込めば、ＣＰＵは同期のための命令を実行することとなる。例えば、同期のための命令として、同期後に実行すべき命令列の先頭アドレスへの分岐命令（例えばプログラムカウンタへの値の設定命令）などを書き込むことにより、同期後に実行すべき命令列を実行させることができる。こうすることで従来のような割り込みコントローラ等を介した同期のための通知をなくすことができ、演算処理の高速化を図ることができる。そして、例えば、請求項１６に示すようにすれば、演算の終了の同期をとることができ、従来のような割り込みコントローラ等を介した演算の終了の通知の必要をなくすことが可能となり、演算処理の高速化を図ることができる。
【００２９】
ところで、演算装置とＣＰＵとは、例えば並列して動作するようにしてもよいし、演算装置の演算中にＣＰＵを停止させてもよい。例えば請求項１７のように演算装置にＣＰＵの処理を停止させる手段を備えてもよい。例えば演算装置は、内部状態モニタ手段によってモニタされた内部状態に応じて、ＣＰＵの処理を停止させるか否かを決定するようにしてもよい。また、例えば、消費電力を低減させる必要のある場合に、ＣＰＵの処理を停止させるようにするとよい。また例えば演算結果に応じてＣＰＵの接続されたバスを使用する他のバスマスタを制御する場合などにもＣＰＵの処理を停止させるとよい。こうしたＣＰＵの処理の停止は、例えば、請求項１８に示すように、ＣＰＵへ供給されるクロックを停止させることで行うことができる。
【００３０】
ところで、上述した演算装置は、例えば、算術演算等の演算を行うコプロセッサであってもよいし、例えば、タスクスケジューリングやコンテキストスイッチング等のオペレーティングシステムの演算を行うシリコンＯＳであってもよい。例えば請求項１９に示すように、演算装置はオペレーティングシステムを実装したものとすることができる。
【００３１】
【発明の実施の形態】
以下、本発明が適用された実施例について図面を用いて説明する。なお、本発明の実施の形態は、下記の実施例に何ら限定されることなく、本発明の技術的範囲に属する限り種々の形態を採りうることは言うまでもない。
［実施例］
図１は、実施例の演算装置１０を含むコンピュータシステムの概略構成を示すブロック図である。図１に示すコンピュータシステムは、ＣＰＵ２０，ＲＯＭ９０，演算装置１０，図示しないＲＡＭ・入出力装置，ＣＰＵ２０とＲＯＭ９０とを接続するアドレスバス１１０及びデータバス１２０，ＣＰＵ２０と図示しないＲＡＭ・入出力装置等を接続するアドレスバス１３０及びデータバス１４０，ＣＰＵ２０と演算装置１０とを接続する接続部５ａ，５ｂ（以下接続部５ａ，５ｂを総称して接続部５と記載する）を備える。
【００３２】
ＣＰＵ２０は、制御部７０とＣＰＵ内部状態部８０を有する。ＣＰＵ内部状態部８０は、例えば、汎用レジスタ、プログラムカウンタ（ＰＣ）、ステータスレジスタ等のレジスタや、命令のデコード結果など、ＣＰＵの内部状態を示す部分であり、制御部７０は、プログラムの実行を行う部分である。すなわち制御部７０は、アドレスバス１１０を介してプログラムカウンタの指すアドレスの命令を、データバス１２０を介してＲＯＭ９０から取得して、実行し、アドレスバス１３０・データバス１４０等を制御したり、ＣＰＵ内部状態部８０の内部状態を変化させたりする。
【００３３】
演算装置１０は、ＣＰＵ２０のＣＰＵ内部状態部８０に接続されたＣＰＵ内部状態モニタ部３０とＣＰＵ内部状態制御部４０とを備える。ＣＰＵ内部状態部８０とＣＰＵ内部状態モニタ部３０とは、接続部５ａによって接続されており、ＣＰＵ内部状態部８０とＣＰＵ内部状態制御部４０とは接続部５ｂによって接続されている。これらの接続部５は、図１に示すように、アドレスバス１１０・データバス１２０・アドレスバス１３０・データバス１４０（以下、これらを総称してバスと記載する）とは別に設けた信号線である。
【００３４】
ＣＰＵ内部状態モニタ部３０は、ＣＰＵ内部状態部８０に存在するＣＰＵの内部状態をモニタし、演算装置１０の処理タイミングや演算内容を決定して、制御部５０にこれらを出力する。また、ＣＰＵ内部状態制御部４０は、ＣＰＵ２０の状態を示すＣＰＵ内部状態部８０から、演算に必要なデータを取得し、制御部５０へ出力する。
【００３５】
制御部５０は、ＣＰＵ内部状態モニタ部３０から受け取った処理タイミングと処理内容に従って、ＣＰＵ内部状態制御部４０から演算に必要なデータを取得し、演算部６０を制御して、演算を実行させる。制御部５０は、演算部６０による演算結果を、ＣＰＵ内部状態制御部４０へ渡し、ＣＰＵ内部状態制御部４０は、ＣＰＵ２０のＣＰＵ内部状態部８０における内部状態をこの演算結果に応じて変更する。
【００３６】
従来の演算装置では、図８に示したように、ＣＰＵ５２０の内部状態部５８０の内部状態を演算装置５１０に渡す為にはデータバスを介して情報を送る必要があったが、本実施例の演算装置は、接続部５を介して直接モニタするため、演算装置１０がＣＰＵ２０の状態を瞬時に判断することが可能となり、ＣＰＵ２０の内部状態を考慮した協調動作（同期を取る事）が可能となる。また、バスを介さずに演算結果をＣＰＵ２０へ渡すことができる。つまり、本実施例の演算装置１０によれば、［従来の技術］の欄の（１）（２）の部分に記載した一連の処理が不要となり、演算処理を高速化できる。またＣＰＵ２０は、演算装置１０がバスを仕様しないため、演算装置１０の演算処理中にバスを使用してバスに接続された装置（例えばＲＡＭやＩ／Ｏ装置）へのアクセスを行うことが可能となり、その結果、システム全体の処理速度を高めることが可能となる。
【００３７】
演算装置１０がモニタするＣＰＵの内部状態としては、例えばプログラムカウンタの値やレジスタファイルの値とすることができる。
図２に示すコンピュータシステムは、ＣＰＵ２０のＣＰＵ内部状態部８０の一部として、プログラムカウンタ８５（ＰＣ）を備え、演算装置１０のＣＰＵ内部状態モニタ部３０としてプログラムカウンタデコード部３２を備える。プログラムカウンタデコード部３２は、プログラムカウンタ８５と接続されており、プログラムカウンタ８５の値が予め定められた演算処理開始アドレス値となった場合にこれを検知して、制御部５０に対して処理開始信号を出力するデコーダーである。制御部５０は、この処理開始信号をプログラムカウンタデコード部３２から受け取ると演算処理を開始する。こうすることで、ＣＰＵは、演算処理の開始の処理タイミングをプログラムカウンタの値で与えることができる。例えば、演算処理開始アドレスを、演算処理のサブルーチンの開始アドレスとすれば、ＣＰＵ２０の処理がこのサブルーチンへ移行した時点で演算装置１０の演算処理が開始される。特にこのサブルーチンはオペレーティングシステム内に設けるとよく、演算処理のシステムコールのアドレスとするとするとよい。このようにして、バスを介することなく演算装置１０に対して演算処理の開始の処理タイミングを与えることができる。したがって、処理を高速化できる。
【００３８】
また、図３に示すコンピュータシステムは、ＣＰＵ２０のＣＰＵ内部状態部８０の一部として、レジスタファイル８７を備え、演算装置１０のＣＰＵ内部状態制御部４０としてレジスタリード／ライト部４２を備える。レジスタリード／ライト部４２は、レジスタファイル８７と接続されており、レジスタファイル８７の所定のレジスタのデータを制御部５０へ渡す。制御部５０は、レジスタリード／ライト部４２から受け取ったデータを演算部６０による演算に利用する制御を行う。また、レジスタリード／ライト部４２は、演算部６０による演算結果を制御部５０を介して受け取り、レジスタファイル８７の所定のレジスタへその演算結果を書き込む。こうすることで、演算に必要なＣＰＵ内のデータをバスを介さずに直接演算装置１０が参照したり、書き換えたりすることができる。したがって、処理を高速化できる。
【００３９】
例えば、図２と図３に示した構成の双方を備える場合、演算の開始をプログラムカウンタの値で与え、演算に必要なデータを所定のレジスタの値で与えて、演算結果をＣＰＵの所定のレジスタに格納させることができる。このような具体例を図４を参照して説明する。
【００４０】
図４は、ＲＯＭ９０に記憶されたオペレーティングシステムにおける演算処理のシステムコールの開始アドレスからの命令列と、各命令を実行する際のレジスタファイル８７の各レジスタ（Ｒｅｇ０〜Ｒｅｇ１５で示す）の値と、演算装置１０の演算の開始から終了までの起動区間と演算装置１０とレジスタファイル８７とのデータのやりとりのタイミングとを示す図である。
【００４１】
プログラムカウンタデコード部３２は、プログラムカウンタ８５の値が、オペレーティングシステムの演算処理のシステムコールの開始アドレスになったことを検知すると、制御部５０及び演算部６０による演算処理を開始する。この演算処理の開始後の処理タイミングは、予め定められており、図４に示す演算処理では、演算の開始から終了までの演算装置１０の起動区間の処理サイクルが、「演算装置の起動区間」で示すように８サイクルである。また、演算処理の開始サイクルの次のサイクル（２サイクル目）で、Ｒｅｇ２の値をレジスタリード／ライト部４２が参照し、演算部６０での演算結果をその３サイクル後にＲｅｇ１へ書き込むように構成されている。したがって、この演算処理のプログラムの作成者あるいは演算処理のプログラムを生成するコンパイラやアセンブラは、２サイクル目には演算に必要なデータがＲｅｇ２に格納されているように処理を行い、また５サイクル目のＲｅｇ１への書き込みに対応するための処理を必要に応じて行い（例えばＲｅｇ１の退避など）、６サイクル目以降でＲｅｇ１に格納された値を利用した処理を行い、９サイクル目以降で演算装置１０が起動している間には実行できない処理を行う必要があることを、予め知ることができる。したがって、演算装置１０のこうした処理サイクルを加味して演算処理のプログラムを作成したり生成したりすることができる。図４の例では、演算処理の１サイクル目でアドレス＃２のデータをＲｅｇ２へ格納する命令（mov.l #2,r2)を設けることで２サイクル目の演算装置１０のＲｅｇ２の参照に備え、演算に必要なデータをＲｅｇ２に格納させている。また６サイクル目以降では、演算装置１０での演算結果が格納されたＲｅｇ１の値を０と比較するなど、演算結果を利用した処理を行っている。なお、図４の例では、２サイクル目から５サイクル目は何も処理を行わないnop命令としているが、この部分で演算装置１０の演算と並列（パラレル）に演算や制御等の処理命令を実行することも可能である。
【００４２】
このように演算装置１０における演算の開始や終了、ＣＰＵ２０の内部状態の取り込みやＣＰＵ２０の内部状態の書き換えの処理サイクルが予め定められているため、［従来の技術］の欄の（３）の部分に記載した一連の処理は不要となり、バスや割り込みコントローラをして処理タイミングの通知を行うことなく、処理の同期をとることができる。
【００４３】
なお、接続部５が特許請求の範囲における接続手段に相当する。また、制御部５０の一部及びＣＰＵ内部状態モニタ部３０がＣＰＵ内部状態モニタ手段に相当し、演算部６０が演算手段に相当し、制御部５０の一部及びＣＰＵ内部状態制御部４０がＣＰＵ内部状態制御手段に相当する。
［その他］
（１）上記実施例では、演算装置１０は、ＣＰＵ２０のレジスタファイル８７やプログラムカウンタ８５の値を内部状態としてモニタしたり利用したりすることとしたが、例えばステータスレジスタの値を内部状態として利用したり、これらの組み合わせを内部状態として利用するようにしてもよい。例えば、プログラムカウンタが所定のアドレスＡでありかつステータスレジスタのゼロフラグが立っている場合に、演算装置１０は演算処理を行うようにしてもよい。
【００４４】
また例えば、プログラムカウンタデコード部３２は、複数のアドレスをデコードし、そのアドレスによって、制御部５０及び演算部６０の行う演算の内容を変更するようにしてもよい。例えば、プログラムカウンタ８５の値がアドレスＡである場合には演算ａを実行し、プログラムカウンタ８５の値がアドレスＢである場合には演算ｂを実行し、プログラムカウンタ８５の値がアドレスＣである場合には演算ｃを実行する。このようにすれば、例えば、オペレーティングシステムとして複数の演算システムコールを備えて、必要なシステムコールを行うだけで、演算装置１０に異なる演算を行わせることことができる。また例えば、演算の内容は、レジスタファイルやステータスレジスタの値に応じて変更するようにしてもよい。このようにすればＣＰＵ２０は、バスを介することなく、演算の内容を演算装置１０へ知らせることができる。したがって、ＣＰＵ２０は、その間バスを使用して処理を行うことが可能となり、処理を高速化することができる。
（２）上記実施例では、図２に示したように、プログラムカウンタデコード部３２を演算装置１０に備えることとし、ＣＰＵ２０は、プログラムカウンタ８５の値をプログラムカウンタデコード部３２へ出力することとしたが、プログラムカウンタデコード部を、図５に示すようにＣＰＵ２０内に設け、デコード結果を内部状態として演算装置１０へ出力するようにしてもよい。
（３）上記実施例では、演算装置１０の演算部６０は、ＣＰＵ内部状態制御部４０及び制御部５０を介してＣＰＵ内部状態部８０から演算に必要なデータを受け取り、演算結果を制御部５０がＣＰＵ内部状態制御部４０へ渡して、ＣＰＵ内部状態制御部４０がＣＰＵ２０のＣＰＵ内部状態部８０へこの演算結果を書き込むといった具合に、ＣＰＵ２０の内部状態を直接演算に利用する構成について説明したが、ＣＰＵ２０の内部状態は、一旦演算装置１０内に記憶してから利用するようにしてもよい。
【００４５】
例えば、図６に示す演算装置１０は、制御部５０に接続された記憶部６５を備え、ＣＰＵ内部状態制御部４０に、データ転送制御部４４を備える。データ転送制御部４４は、ＣＰＵ２０のレジスタファイル８７から演算に必要なデータを制御部５０を介して記憶部６５に転送して記憶させる。そして、制御部５０は、記憶部６５に記憶されたデータを演算部６０へ渡し、演算を行わせる。演算部６０による演算結果は、制御部５０によって記憶部６５へ格納される。そして、所定のタイミングで、制御部５０は、記憶部６５に格納された演算結果をデータ転送制御部４４へ渡し、データ転送制御部４４は、この演算結果をレジスタファイル８７へ書き込む。
【００４６】
このようにすれば、演算装置１０は、予め演算に必要なデータをレジスタファイル８７から取り込んでおいて演算に利用したり、演算結果を任意のサイクルでレジスタファイルに書き込むことが容易にできる。例えば、すべての演算内容で同期のタイミングを統一することも容易にできるようになる。
【００４７】
なお、こうした記憶部６５は、複数のバンクから構成し、ＣＰＵ内部状態モニタ部３０のモニタしたＣＰＵ２０の内部状態に基づき、制御部５０が利用するバンクを切り換えるようにしてもよい。このようにすれば、ＣＰＵ２０におけるレジスタ退避の回数を減らすことができる。また、演算装置１０において演算結果を再利用して演算を行うなど、多彩な演算を容易に実現できる。
（４）上記実施例では、演算装置１０とＣＰＵ２０とは、並列して動作可能としたが、図７に示すようにＣＰＵ停止回路９５を設けて、ＣＰＵ２０の動作を演算装置１０から停止可能にしてもよい。すなわちＣＰＵの停止が必要な場合に、ＣＰＵ停止手段としての制御部５０が、ＣＰＵ停止回路９５に対してＣＰＵ停止信号を出力する。ＣＰＵ停止回路９５は、ＣＰＵ停止信号を演算装置１０の制御部５０から受けると、ＣＰＵ２０の制御部７０へ供給されるクロックを停止する。例えば、ＣＰＵ内部状態モニタ部３０のモニタ結果から制御部５０がＣＰＵ２０が動作する必要がないと判定した場合には、ＣＰＵ停止信号を出力してＣＰＵ２０の動作を停止させる。このようにすれば、コンピュータシステムの消費電力を低減させることができる。
（５）上記実施例では、演算装置１０における演算の開始や終了、ＣＰＵ２０の内部状態の取り込みやＣＰＵ２０の内部状態の書き換えの処理サイクルが予め定めることにより、バスや割り込みコントローラをして処理タイミングの通知を行うことなく、処理の同期をとることができる構成としたが、例えば、ＣＰＵ内部状態部８０に備えたＣＰＵの実行する命令の格納されたレジスタに対して、同期の必要な際に、演算装置１０のＣＰＵ内部状態制御部４０が同期のための命令を書き込んで同期をとるようにしてもよい。例えば、同期のための命令として、同期後に実行すべき命令列の先頭アドレスへの分岐命令（例えばプログラムカウンタへの値の設定命令）などを書き込むことにより、同期後に実行すべき命令列を実行させることができる。例えば、同期が必要な場合としては、演算の終了時の同期をとるとよい。こうすることで従来のような割り込みコントローラ等を介した演算の終了の通知の必要をなくすことができ、演算処理の高速化を図ることができる。
（６）演算装置１０は、算術演算等の演算を行うコプロセッサであってもよいし、例えば、タスクスケジューリングやコンテキストスイッチング等のオペレーティングシステムの演算を行うシリコンＯＳであってもよい。演算装置１０を、ハードウェア化したＯＳとして実装した場合、ＣＰＵ内部状態モニタ部３０は、ＣＰＵ２０のプログラムカウンタ８５をモニタし、その値がＯＳのシステムコールに相当すると判断した時は、ＯＳが起動され、制御部５０によりシステムコール処理が実行される。ＯＳが起動中は、ＯＳ側では、ＣＰＵ内部状態モニタ部３０により、ＣＰＵ２０内のレジスタファイル８７を参照し、必要があれば、ＣＰＵ内部状態制御部４０により、レジスタファイル８７のデータを書き換えることで、例えば、ＯＳの機能の１つであるコンテキストスイッチング処理を実現したり、ＯＳの処理結果をＣＰＵ２０へ渡すことができる。
【００４８】
また、ＣＰＵ２０側では、システムコール処理に同期させてプログラムを実行することで、ＯＳによりＣＰＵ２０のレジスタファイルのデータが書き換えられても問題なく動作させるようにすることができる。また、ＯＳの処理終了をＯＳがＣＰＵ２０へ告知する必要がない。
【００４９】
このように、ＣＰＵ２０と演算装置１０によるＯＳが並行して処理を行うことができ、ＣＰＵ２０とＯＳ間のＩ／Ｆ処理が高速に実現可能であるため、ＯＳのシステムコール処理の高速化が可能である。
【図面の簡単な説明】
【図１】実施例の演算装置を含むコンピュータシステムの構成を示すブロック図である。
【図２】ＣＰＵ内部状態部とＣＰＵ内部状態モニタ部の構成の例を示すブロック図である。
【図３】ＣＰＵ内部状態部とＣＰＵ内部状態制御部の構成の例を示すブロック図である。
【図４】演算装置の処理サイクルの例を示す説明図である。
【図５】図３の構成の別例のブロック図である。
【図６】実施例の演算装置に記憶部を設ける場合の構成を示すブロック図である。
【図７】演算装置がＣＰＵを停止させる場合の構成を示すブロック図である。
【図８】従来の演算装置を含むコンピュータシステムの構成を示すブロック図である。
【符号の説明】
５，５ａ，５ｂ…接続部
１０…演算装置
３０…ＣＰＵ内部状態モニタ部      ４０…ＣＰＵ内部状態制御部
５０…制御部                      ６０…演算部
３２…ＰＣ（プログラムカウンタ）デコード部
４２…レジスタリード／ライト部    ４４…データ転送制御部
６５…記憶部
２０…ＣＰＵ
７０…制御部                      ８０…ＣＰＵ内部状態部
８５…ＰＣ（プログラムカウンタ）  ８７…レジスタファイル
９５…ＣＰＵ停止回路
１１０，１３０…アドレスバス
１２０，１４０…データバス
５１０…演算装置  ５５０…演算部  ５６０…演算部
５２０…ＣＰＵ  ５５０…制御部  ５７０…制御部    ５８０…内部状態部
６１０…割り込みコントローラ
７１０，７３０…アドレスバス
７２０，７４０…データバス
【図１】
0003719241.tif 000002
【図２】
0003719241.tif 000003
【図３】
0003719241.tif 000004
【図４】
0003719241.tif 000005
【図５】
0003719241.tif 000006
【図６】
0003719241.tif 000007
【図７】
0003719241.tif 000008
【図８】
0003719241.tif 000009