(57)【要約】【課題】処理の高速実行を可能とすると共に、処理内容の修正時の実行時間の悪化を防ぐことのできる演算処理装置を得る。【解決手段】命令フェッチ１〜データメモリ８で、一般の演算処理を行う一般演算手段を構成する。特殊演算処理手段９ｂは、複数のクロックサイクルで特定の演算処理を実行する。特殊演算制御手段９ａは、特定の演算処理に対して定義されている命令コードの発行に基づいて、特殊演算処理手段９ｂでの演算処理の実行および一時停止を制御する。一般演算手段は、特定の演算処理の中断中に一般の演算処理を行う。これにより、特殊演算処理手段９ｂによる演算途中結果を修正させ、その後、特殊演算処理手段９ｂの処理を再開させる。【選択図】図１
2008293270.tif 000002
【特許請求の範囲】
【請求項１】
算術演算、論理演算、シフト演算を行う演算手段を有し、各演算手段に対して定義されている命令コードの発行により前記各演算を実行する一般演算処理手段と、
所定のクロックサイクルで特定の演算処理を実行する特殊演算処理手段と、
前記特定の演算処理に対して定義されている命令コードの発行に基づいて、前記特殊演算処理手段での演算処理の実行および一時停止を制御する特殊演算制御手段とを備えた演算処理装置。
【請求項２】
特殊演算処理手段が一時停止するクロックサイクル数を、特定の命令コードを使用して任意の値に設定することを特徴とする請求項１記載の演算処理装置。
【請求項３】
特殊演算処理手段は、複数の独立した特定の演算処理を実行可能に構成され、
前記複数の独立した特定の演算処理の選択を、特定の演算処理の開始を指定する命令コードの引数で指定することを特徴とする請求項１または請求項２記載の演算処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、機器を駆動するコントローラで制御処理を実行するといった演算処理装置に関するものである。
【背景技術】
【０００２】
コントローラ上で制御処理を実行するハードウェア演算装置（専用演算回路やプロセッサ）では、発熱やノイズの問題から低クロック周波数で回路を動作させる事が求められる。そのため、１クロックサイクルで幾つもの演算処理を行える演算回路を複数実現し、それら複数の演算回路を複数のクロックサイクルで駆動し所望の演算全体を完遂するという、処理内容に特化した演算回路を実現することが必要となる。
【０００３】
そのような処理内容に特化した演算回路を使用する場合、演算回路実装時に想定していた処理内容に対して修正が発生すると、その処理内容を実行することが困難である。このため、従来の演算処理装置では、実行する処理内容を変更可能な演算回路とすると共に、動作周波数を高くすることなく低い動作周波数でも演算性能を向上させるため、ＡＬＵ（演算論理装置）、ＢＲＬ（バレルシフタ）およびマルチプレクサで固定的に接続されたデータパスを構成し、ＡＬＵ、ＢＲＬ、マルチプレクサへのコンフィグレーションデータ（オペコードデータ）を設定することで、処理内容に特化した演算データパスを構成していた（例えば、特許文献１参照）。
【０００４】
【特許文献１】特開２００４−５４３３５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来の演算処理装置では、処理内容が修正される場合を想定しての予めの対応策として、算術演算、論理演算、シフト等の演算回路への入出力を選択信号により切り替えるマルチプレクサを多用する形となる。そのため、各演算回路への入出力切り替えを想定しないような処理内容に特化した専用演算回路を使用する場合に比べ、演算実行に長い遅延時間・長い実行サイクル数が必要であった。また、元々、演算装置中で接続されていない演算回路に関しては演算そのものを実行する事が出来ないという問題もあった。
一方、入出力経路の切り替えを想定しないような専用演算回路を採用した場合、専用演算回路実装後に発生した処理内容の修正に対応することが困難であった。
【０００６】
この発明は、上記のような問題点を解決するためになされたものであり、処理の高速実行を可能とすると共に、処理内容の修正時の実行時間の悪化を防ぐことのできる演算処理装置を得ることを目的としている。
【課題を解決するための手段】
【０００７】
この発明に係る演算処理装置は、算術演算、論理演算、シフト演算を行う演算手段を有し、各演算手段に対して定義されている命令コードの発行により各演算を実行する一般演算処理手段と、所定のクロックサイクルで特定の演算処理を実行する特殊演算処理手段と、特定の演算処理に対して定義されている命令コードの発行に基づいて、特殊演算処理手段での演算処理の実行および一時停止を制御する特殊演算制御手段とを備えたものである。
【発明の効果】
【０００８】
この発明の演算処理装置は、一般演算処理手段と、特定の演算処理を実行する特殊演算処理手段と、特殊演算処理手段の特定の演算処理を制御する特殊演算制御手段を備えたので、処理の高速実行を可能とすると共に、処理内容の修正時の実行時間の悪化を防ぐことができる。
【発明を実施するための最良の形態】
【０００９】
実施の形態１．
図１は、この発明の実施の形態１による演算処理装置を示す構成図であるが、この説明に先立ち、一般的な演算処理装置について説明する。
【００１０】
一般的なマイクロプロセッサは、命令コードと呼ばれるデータをプロセッサが取り込み、これを解釈し、各命令コードに対して定義された動作を実行することにより、演算動作を行う形態となっている。命令コードは命令メモリ上に置かれており、命令メモリ上の各命令コードに対してはアドレスが割り当てられており、アドレスの昇順に命令コードが読み込まれ（フェッチ動作）、命令コードが解釈され（デコード動作）、命令コードが意味する演算が実行（演算動作）される。また、命令コードとしては、データメモリからのデータの取り込み（ロード動作）、データの書込み（ストア動作）も定義されており、これらの命令コードを発行した場合にはデータメモリアクセスが行われると共に、結果がレジスタもしくはデータメモリに書き込まれる。
【００１１】
図２は、一般的なマイクロプロセッサのパイプラインステージを示した図である。
一般的なマイクロプロセッサは、命令コードの読み込み、解釈、演算実行等が、独立して動作する機能ブロック（“ステージ”と呼ばれる）で構成されており、これらがパイプライン動作することによって、効率的に処理を実行することが可能となる。図２に示すマイクロプロセッサは、命令フェッチ（ＩＦ）１、命令デコード（Ｄ）２、命令実行（ＥＸ）３、メモリアクセス（ＭＡ）４、結果ストア（Ｓ）５、命令メモリ６、レジスタブロック７、データメモリ８を備えている。
【００１２】
これら機能ブロックは、一般に次のような機能を有している。
命令メモリ６：命令コードが格納されているメモリ。
レジスタブロック７：演算実行で一時的に使用するデータ格納領域。
データメモリ８：演算の入力データ、出力データを格納するメモリ。
命令フェッチ１：命令メモリ６より命令をフェッチするステージ。
命令デコード２：命令をデコードするステージ。演算命令の場合、ソース、デスティネーションレジスタの利用可能性のチェックを行い、利用可能なら読み出す。利用可能でなければ利用可能となるまで待つ。
命令実行３：演算実行。
メモリアクセス４：ロードストア命令の場合、データメモリアクセスを行う。演算命令ではこのステージは何もしない。
結果ストア５：結果の格納と命令の後処理。
【００１３】
また、命令実行３（ＥＸステージ）では、演算を実行するために必要となる演算回路が実装されている。そのような演算回路としては、例えば、
算術演算回路（算術加算、算術減算、算術乗算、算術除算、算術シフト演算）
論理演算回路（論理和、論理積、排他論理和、論理シフト演算）
などが存在している。
また、レジスタブロック７上では、一般的に複数のレジスタが存在している。説明のため、ここではレジスタがｒ０からｒ３１までの３２本が存在しているとする。また、これらレジスタは、演算等で一般的に使用されるレジスタであるため、一般に「汎用レジスタ」と呼ばれる。
これらのブロックが並列動作することにより、マイクロプロセッサは演算を実行している。その演算実行の動作を、命令コードを元に説明する。
【００１４】
図３は、命令メモリ６に設定された命令コードの説明図である。
また、図４は、このような命令コードの説明図である。
これらの命令コードは、ＭＩＰＳ（Microprocessor without Interlocked Pipeline Stages）プロセッサと呼ばれるプロセッサで採用されている一般的な命令コードである。各命令コードは命令メモリ６上で、命令アドレスで指し示される位置に格納されている。尚、図４において、ＧＰＲは、General Purpose Register（汎用レジスタ）である。
【００１５】
図３に示す命令コードを解釈し動作するプロセッサの処理の流れとしては、最初に命令アドレス００００の命令コード［ＬＷ  ｒ８，０（ｒ１）］が読み込まれ、実行される。この命令コードでは、汎用レジスタｒ１上に保持されているデータメモリ８上のアドレスに対してオフセット値０が足し合わされたデータメモリ８上のアドレス値が生成され、データメモリ８上で当該アドレスに保持されている４バイトのデータが汎用レジスタｒ８上に格納される。
次に、アドレス０００４の［ＬＷ  ｒ９，４（ｒ１）］の命令コードが実行される。この命令コードの実行により、アドレス値（ｒ１＋４）のデータメモリ８上の４バイトデータが汎用レジスタｒ９に格納される。
【００１６】
次に、命令アドレス０００８の命令コード［ＭＵＬ  ｒ１０，ｒ８，ｒ９］が実行され、汎用レジスタｒ８と汎用レジスタｒ９に格納されている値を算術乗算した結果が汎用レジスタｒ１０に格納される。
次に、命令アドレス０００ｃの命令コード［ＬＷ  ｒ１１，８（ｒ１）］が実行され、アドレス値（ｒ１＋８）のデータメモリ８上のデータが汎用レジスタｒ１１上に格納される。
次に、命令アドレス００１０の［ＡＤＤ  ｒ１２，ｒ１０，ｒ１１］  が実行され、汎用レジスタｒ１０と汎用レジスタｒ１１に格納されている値を算術加算した結果が、汎用レジスタｒ１２に格納される。
【００１７】
次に、命令アドレス００１４の［ＬＷ  ｒ１３，１２（ｒ１）］が実行され、アドレス値（ｒ１＋１２）のデータメモリ上のデータが汎用レジスタｒ１３上に格納される。
次に、命令アドレス００１８の［ＳＵＢ  ｒ１４，ｒ１３，ｒ１２］が実行され、汎用レジスタｒ１３と汎用レジスタｒ１２に格納されている値から算術減算である（ｒ１３−ｒ１２）が演算され、演算結果が汎用レジスタｒ１４上に格納される。
次に、命令アドレス００１ｃの［ＳＷ  ｒ１４，１６（ｒ１）］が実行される。
本命令コードの実行により、アドレス値（ｒ１＋１６）で示されるデータメモリ８上の領域に汎用レジスタｒ１４の値が格納される。
このようにして命令メモリ６上の命令コードを元にプロセッサ上で処理が実行され、結果がデータメモリ８上に格納されるという動作を連続して実行されるように、一般的なプロセッサは構成されている。
【００１８】
また、各演算の実行を行うためにプロセッサ内部の命令実行３（ＥＸステージ）に実装されている演算回路は、一般的にはプロセッサ動作の基準となる動作クロックの１サイクルで実行されるように、各演算回路の遅延時間は設定されているが、遅延時間が１サイクル以上必要となるものでは、複数サイクルで演算が実行されるような演算回路となっている。
例えば、あるプロセッサでは、ＩＥＥＥ７５４規格における６４ビット表現された浮動小数点の演算を行う演算回路において、乗算回路（６４ビット浮動小数点乗算）は５サイクルで結果を出力するようになっており、また加算回路（６４ビット浮動小数点乗算）は４サイクルで結果を出力するようになっている。
【００１９】
例えば、６４ビット浮動小数点乗算を行った後、６４ビット浮動小数点加算を行うような、
Ｄ＝Ａ×Ｂ＋Ｃ
という演算を行う場合、上記の乗算と加算を使用すれば、５サイクル＋４サイクルの計９サイクルで演算結果を取得することが可能である。このような、乗算した結果に加算を行うような演算は一般的であり、“積和演算”と呼ばれ多用されることが多い。本演算に対しては積和演算に特化した演算回路が実装されているプロセッサも多く、例えば上記でサイクル数を参考にしているプロセッサでは、積和演算回路は５サイクルで演算結果を取得できるようになっている。
このように、ある特定処理を高速に実行したい場合、その演算を専用に実行する演算回路を開発しプロセッサ中に実装した方が、より短いサイクル数で演算を完了することが可能である。そのため、特定処理の実行を主とするプロセッサでは、処理内容に特化した演算処理を、できるだけ高速に（短い実行サイクル数で）実行出来るよう、処理内容特化の演算回路が実装されることが多い。
【００２０】
そのような演算例として、例えばまとまった
リスト１：
ｄ＝（ａ×ｂ）＋ｃ      ｈ＝（（ｄ＞ｅ）？ｅ：（（ｄ＜ｆ）？ｆ：ｄ））＞＞ｇ
ｋ＝（ｈ＋ｉ）＞＞ｊ
という演算処理を特定処理として高速に実行したい場合には、この全体の演算データフローを直接的に実現する演算回路を考える。その演算回路の遅延時間を、クロックの周期時間で分割することにより、複数サイクルで動作する演算回路として実現し、プロセッサ上に実装することになる。
尚、上記処理において、
×は算術乗算
＋は算術加算
（Ａ＞Ｂ）は比較演算（もしＡがＢよりも大きければ真、そうでなければ偽）
（Ｃ＜Ｄ）は比較演算（もしＣがＤよりも小さければ真、そうでなければ偽）
（（Ｘ）？Ｙ：Ｚ）は選択演算（もしＸが真ならばＹを、偽ならばＺを返す）
＞＞は算術右シフト
を示している。
【００２１】
図５は、この演算を表現した演算データフローを示す説明図である。
図において、ａからｊと記載されているブロックは、演算を実行するために必要となる入力データを示しており、ｋが記載されたブロックは演算結果の出力データを示している。また、図中の円で囲まれた部分は、各々内部に記載された演算を行う回路を示している。更に、ＳＥＬと記載されたブロックは、データの選択を行う、いわゆるセレクタを示しており、ＳＥＬブロックへの入力となる“Ｂ”と記載された部分で取得する真偽値に対し、もし値が真（１）ならば“Ｔ”と記載された入力の値を結果として出力し、偽（０）ならば“Ｆ”と記載された入力の値を結果として出力することを示しており、上記処理中の選択演算に対応している。
【００２２】
このようなリスト１に示した演算データフローを、一般的な演算を行う命令コードで実行する場合、必要となる全命令コードは図６に示す通りとなる。尚、図６における各命令コードの説明は図４に記載された通りである。また、図６の説明において、ＬＷ命令およびＳＷ命令における、例えば[ｂ]、[ａ]等は、各々データｂおよびａが格納されているデータメモリ上のアドレスを示している。また、汎用レジスタｒ０は、値が０となっている事を前提としている。このように一般的な命令コードで処理を実行する場合は１９ステップ必要となり、多くの演算時間（実行サイクル数）がかかることになる。そこで、本発明では、複数のステップを同時に行う回路を設け、この回路を用いて演算処理を実行する。
【００２３】
図７は、図５に示した演算データフローの分割例を示す説明図である。
即ち、図７は、図５の演算データフローから、演算回路の遅延時間をクロック時間（クロック周波数の逆数）で分割し、複数サイクルでの特殊演算回路を構成することを表している。図７において、サブデータフロー７１、サブデータフロー７２およびサブデータフロー７３が、元の演算データフローの遅延時間をクロック時間で分割した結果、三つの演算回路で構成する結果となり、分割された結果の回路部位を示している。
【００２４】
このような特殊処理回路をプロセッサに搭載すれば、同じ処理内容を一般的な命令コードで実行する場合に比べて、非常に短い時間で処理を完了することが可能となる。
しかしながら、処理内容に特化した演算回路をプロセッサ内部に実装した後、処理内容に修正が発生した場合に同じ演算回路で処理が実行出来ないという問題が存在する。もし実装した回路が、全く使用不可能となれば、その処理内容を実行するためには、先述の一般的な命令コードを使用して演算を行う必要が発生するため、処理時間が長大化する。
その問題を防ぐ方策の一例としては、処理内容の将来的な修正内容を見通して回路実装することが考えられるが、どのような修正内容が発生するか予測が困難であるため実現すべき回路の想定が困難であるという問題や、回路に汎用性を持たせれば遅延時間が長くなり回路の演算時間に悪影響をもたらすという問題がある。更に、回路規模が大きくなるためプロセッサの実現コストが高くなるという問題もある。
【００２５】
そこで、本発明では、それらの問題を回避するために、用途特化の、複数サイクルで実行される特殊演算処理手段を実装し、この特殊演算処理手段を制御する特殊演算制御手段に指定した任意の実行サイクルで演算を停止させる機能を持たせると共に、一般的なプロセッサの命令コードを発行することにより、用途特化の特殊演算処理手段の途中結果に対し修正を加え、再度、特殊演算処理制御手段に対し、用途特化の特殊演算処理手段の実行を再開する機能を定義している。その全体像を示したものが図１であり、以下、図１を用いて説明する。
【００２６】
図１において、特殊演算回路９は、特定の演算処理を実行する演算回路であり、特殊演算制御手段９ａと特殊演算処理手段９ｂを備えている。特殊演算制御手段９ａは、特殊演算処理手段９ｂの実行と停止を制御する手段であり、特殊演算処理手段９ｂは、特定の演算処理を実行する手段であり、これらの詳細については後述する。また、レジスタブロック７と特殊演算回路９との間、データメモリ８と特殊演算回路９との間、及び命令デコード（Ｄ）２と特殊演算回路９との間には、それぞれ専用通信路１０，１１，１２が設けられている。
また、命令フェッチ（ＩＦ）１〜結果ストア（Ｓ）５は、図２に示した一般的なマイクロプロセッサの機能ブロックと同様であり、これら機能ブロックによって一般演算手段が構成されている。
【００２７】
図８は、特殊演算回路９への接続状態の詳細を示すブロック図である。
図において、通信路１０１ａは、レジスタブロック７に対する要求信号とレジスタを指定するインデックス信号を送る通信路を示しており、通信路１０１ｂは、通信路１０１ａに対応して指定したレジスタから読み出された値を特殊演算回路９に送るための通信路を示している。また、通信路１０２ａと通信路１０２ｂ、通信路１０３ａと通信路１０３ｂは、それぞれ通信路１０１ａと通信路１０１ｂと同じ対応を示しており、特殊演算回路９は、レジスタブロック７から三つのレジスタ値を同時に取り込めるよう構成されている。尚、図示例ではレジスタブロック７からのデータ読み込みを行う通信路を３セット用意しているが、３セットに限定されるものではない。
【００２８】
また、通信路１０４ａは、レジスタブロック７に対するレジスタ値書込み用の要求信号とレジスタを指定するインデックス信号を送る通信路を示しており、通信路１０４ｂは、通信路１０４ａに対応して指定したレジスタに対して書き込む値を特殊演算回路９からレジスタブロック７に通信するための通信路を示している。尚、図示例ではレジスタブロック７へのデータ書込みを行う通信路を１セット用意しているが、１セットに限定するものではない。
【００２９】
また、通信路１０５ａは、データメモリ８に対するデータ値読み込み用の要求信号とデータメモリ８上でのアドレスを指定するアドレス信号を送る通信路を示しており、通信路１０５ｂが通信路１０５ａに対応して指定したアドレスから読み出された値を特殊演算回路９に通信するための通信路を示している。そして、通信路１０６ａと通信路１０６ｂ、通信路１０７ａと通信路１０７ｂは、通信路１０１ａと通信路１０１ｂと同じ対応を示しており、特殊演算回路９はデータメモリ８から、三つのデータ値を同時に取り込めるようにしている。尚、図示例ではデータメモリ８からデータ読み込みを行う通信路を３セット用意しているが、３セットに限定するものではない。
【００３０】
また、通信路１０８ａは、データメモリ８に対するデータ値書込み用の要求信号とデータを指定するアドレス信号を送る通信路を示しており、通信路１０８ｂが通信路１０８ａに対応して指定したアドレスに対して書き込む値を特殊演算回路９からデータメモリ８に通信するための通信路を示している。尚、図示例ではデータメモリ８へのデータ書込みを行う通信路を１セット用意しているが、１セットに限定するものではない。
【００３１】
更に、通信路１０９ａは、命令デコード２から特殊演算回路９に送られる開始信号を送る通信路、通信路１０９ｂは、命令デコード２から特殊演算回路９に送られる一時停止サイクル数を送る通信路、通信路１０９ｃは、命令デコード２に特殊演算回路９から送られる演算実行中信号を送る通信路をそれぞれ示している。
【００３２】
図９は、特殊演算回路９の詳細を示すブロック図である。
特殊演算制御手段９ａは、命令デコード２との通信路１０９ａ〜１０９ｃが接続されると共に、レジスタブロック７との間に通信路１０１ａ〜１０４ａが、データメモリ８との間に通信路１０５ａ〜１０８ａがそれぞれ接続されている。また、特殊演算制御手段９ａは、一時停止サイクル保持部９０１と実行サイクル保持部９０２を備えている。一時停止サイクル保持部９０１は、命令デコード２から通信路１０９ｂを介して指定された一時停止サイクル数を保持するものであり、実行サイクル保持部９０２は、特殊演算処理手段９ｂの実行時において、現在、何サイクル目を実行しているかを保持する機能ブロックである。
【００３３】
特殊演算回路９において、特殊演算処理手段９ｂは、特殊演算サブ回路９１１，９１２，９１３から構成されている。これらの特殊演算サブ回路９１１，９１２，９１３は、それぞれ、図７におけるサブデータフロー７１，７２，７３の機能を実現する回路であり、それぞれの回路が、レジスタブロック７との通信路１０１ｂ〜１０４ｂ、データメモリ８との通信路１０５ｂ〜１０８ｂと接続されている。また、特殊演算サブ回路９１１，９１２，９１３と特殊演算制御手段９ａとは、それぞれ通信路１１０〜１１２によって接続され、これら通信路１１０〜１１２を介して演算実行信号が与えられるようになっている。
【００３４】
次に、このように構成された特殊演算回路９の動作について説明する。
特殊演算制御手段９ａは、独立した二つの動作で構成されている。一つは、通信路１０９ｂを介して、命令デコード２から指定される一時停止サイクル数を一時停止サイクル保持部９０１に保持する動作である。もう一つは、通信路１０９ａを介して、命令デコード２から指定される開始要求に対応して、特殊演算サブ回路９１１，９１２，９１３を動作させ、その動作に必要となる各種信号を駆動する動作である。以下、これらの動作を図１０に示すフローチャートを用いて説明する。
【００３５】
尚、本実施の形態では、それぞれの特殊演算サブ回路９１１，９１２，９１３は、各演算実施時に、レジスタブロック７およびデータメモリ８からの入力値通信路である通信路１０１ｂ〜１０３ｂおよび通信路１０５ｂ〜１０７ｂのどの通信路から値を取り込み、レジスタブロック７およびデータメモリ８への出力値通信路である通信路１０４ｂおよび通信路１０８ｂのどの通信路に値を出力すれば良いかが固定的に実現されているとする。
また、特殊演算制御手段９ａでは、特殊演算サブ回路９１１，９１２，９１３をどの順番に実行させれば良いかが予め固定的に実現されているとし、更に、特殊演算サブ回路９１１，９１２，９１３を実行させる際に、レジスタブロック７から、どのインデックスで指定される値を取り込めば良いか、また、データメモリ８から、どのアドレスで指定される値を取り込めば良いかが、予め固定的に実現されているとする。
【００３６】
図１０のフローチャートにおいて、特殊演算回路９の処理が開始されると、特殊演算制御手段９ａは、先ず、実行サイクル保持部９０２のサイクル数を０に設定する（ステップＳＴ１）。その後は、ステップＳＴ２において、通信路１０９ａからの演算開始信号がＯＮになるまで、処理の開始待ちを行う。演算開始信号がＯＮとなると、実行サイクル保持部９０２のサイクル数に１を加算する（ステップＳＴ３）。次に、実行サイクル保持部９０２の値と一時停止サイクル保持部９０１の値が同じかどうかを比較し（ステップＳＴ４）、もし同じであれば、演算を一時停止する（ステップＳＴ５）とし、一時停止サイクル保持部９０１の値が変更されるまでステップＳＴ４、ステップＳＴ５をループする。
【００３７】
一方、ステップＳＴ４において、実行サイクル保持部９０２の値と一時停止サイクル保持部９０１の値が異なれば（一時停止サイクル保持部９０１の値が変更されれば）、ステップＳＴ６の処理に遷移する。ステップＳＴ６では、演算完了のサイクル数に到達しているかを判定し、そうであれば、ステップＳＴ７で一時停止サイクル保持部９０１を０に設定し、ステップＳＴ１の処理に遷移する。一方、ステップＳＴ６で、演算完了のサイクル数に到達していなければ、ステップＳＴ８の処理に遷移して、現在の実行サイクルに対応する演算回路を実行し、ステップＳＴ３に戻る。
【００３８】
次に、各演算サイクルでどのような処理が実行されるかについての詳細を説明する。
図１１は、各演算サイクルの状態遷移を示す説明図である。
先ず、最初のサイクルであるサイクル１では、
データメモリ８からの入力用通信路１０５ａで、データ“ａ”の値を取得するために必要となる要求およびアドレス信号を、
データメモリ８からの入力用通信路１０６ａで、データ“ｂ”の値を取得するために必要となる要求およびアドレス信号を、
データメモリ８からの入力用通信路１０７ａで、データ“ｃ”の値を取得するために必要となる要求およびアドレス信号を、
各々発行する。
データメモリ８からは次のサイクルで各データ値を取得可能であるとする。
【００３９】
サイクル２では、“ａ”、“ｂ”、“ｃ”の値を使用可能であるため、特殊演算サブ回路９１１で演算を実行（通信路１１０の信号をＯＮ）すると共に、結果となる“ｄ”の値を、通信路１０４ｂを介してレジスタブロック７に出力する。また、同時に、次のサイクル３で必要となる“ｅ”、“ｆ”、“ｇ”の値を取得するための要求信号およびアドレスを通信路１０５ａ〜１０７ａを介してデータメモリ８に発行する。
【００４０】
サイクル３では、“ｅ”、“ｆ”、“ｇ”の値と、“ｄ”の値を使用可能であるため、特殊演算サブ回路９１２で演算を実行（通信路１１１の信号をＯＮ）すると共に、結果となる“ｈ”の値を、レジスタブロック７に出力する。また同時に、次のサイクル４で必要となる“ｉ”、“ｊ”の値を取得するための要求信号およびアドレスをデータメモリ８に対して発行する。
【００４１】
サイクル４では、“ｉ”、“ｊ”の値と、“ｈ”の値を使用可能であるため、特殊演算サブ回路９１３で演算を実行（通信路１１２の信号をＯＮ）すると共に、結果となる“ｋ”の値を、通信路１０８ｂを介してデータメモリ８に出力する。
以上のように、特殊演算制御手段９ａは特殊演算処理手段９ｂの制御を行う。尚、特殊演算処理手段９ｂが演算を実行中、即ち、演算開始待ちでなく、もしくは一時停止でない時は、通信路１０９ｃの特殊演算回路実行中信号がＯＮとなり、演算中である事を示す。
【００４２】
次に、命令デコード２から見て、どのように特殊演算回路９の動作を制御するかについて、処理内容（リスト１）に修正が発生した状況を含め説明する。
通常のリスト１に対応した処理を、特殊演算回路９を使用して演算させたい場合には、対応する命令コード、例えば、
ＳＰＭＣＩ
を定義し、本命令コードを発行する事で行う事とする。
本命令コードは、通常の命令コードと同様に、命令メモリ６上に保持され、本命令コードを命令フェッチ１でフェッチし、命令デコード２でデコードする事により、特殊演算回路９に対する演算実行処理であることが解釈され、特殊演算回路９に対する開始信号が通信路１０９ａを介して発行される。これにより、特殊演算回路９は実行を開始する。
【００４３】
尚、先述の通り、特殊演算回路９が演算を実行中の場合、通信路１０９ｃからの特殊演算回路実行中信号がＯＮとなり、その間、命令デコード２は停止したままとなる。
今、リスト１で示された処理内容を下記のように修正し、実行したいとする。
リスト２：
ｄ＝（ａ＊ｂ）＋ｃ
ｈ＝（（ｄ＞ｅ）？ｅ：（（ｄ＜ｆ）？ｆ：ｄ））＜＜Ｘ
ｋ＝（ｈ＋ｉ）＞＞ｊ
【００４４】
これは、リスト１に比べてｈを求める際の算術シフトが、値ｇ分の右シフトから、値Ｘ分の左シフトに変更されているというような修正である。
元々、リスト２の処理内容を実行可能な形態として特殊演算回路９を構成していないため、リスト２に書かれた処理内容を、そのまま演算回路で実行することは不可能である。
しかしながら、この修正された処理内容は、
ｄ＝（ａ＊ｂ）＋ｃ
ｈ＝（（ｄ＞ｅ）？ｅ：（（ｄ＜ｆ）？ｆ：ｄ））＜＜０
ｈ＝ｈ＜＜Ｘ
ｋ＝（ｈ＋ｉ）＞＞ｊ
というように、値ｇを０に設定し、その結果ｈを値Ｘだけ算術左シフトを行い、それをｈに上書きし、再度ｋ導出の演算を実行すれば修正した処理内容を実行することが可能である。これは、データメモリ８上の“ｇ”の値を０にセットし、特殊演算回路９を３サイクル目で停止（特殊演算サブ回路９１２実行後に停止）し、通常命令における算術左シフト命令（ＳＬＡ）を発行した後、特殊演算回路９を実行再開（特殊演算回路の４サイクル目を実行。特殊演算サブ回路９１３を実行）することにより、本修正された処理内容を実行する事が可能である。
【００４５】
このような処理を実行するために、特殊演算回路９に対する一時停止サイクル数指定を行える命令コードを、例えば、
ＭＣＳＴＰ      ｎ
のように定義する。ここで、ｎは即値データを表し、特殊演算回路９に対して、ｎサイクル目で処理を一時停止させる事を指示する命令である。
【００４６】
本命令コードが、命令デコード２で解釈され、特殊演算回路９に対して、通信路１０９ｂを介して、一時停止サイクル保持部９０１に設定される。この命令コードを発行後に、先述のＳＰＭＣＩ命令コードを発行すれば、所望の動作が実現される。その様子を図１２の命令コード列を元に説明する。尚、ここで、特殊演算回路９のサイクル２終了後の結果データとなる“ｈ”は、レジスタブロック７中のレジスタｒ５に保持されているとする。
【００４７】
図１２は、本実施の形態の演算処理装置における命令コード列の説明図である。
通常のＳＰＭＣＩ命令コードによる、特殊演算処理実行は、命令アドレスの０１０４の発行により実行される。ここで、命令アドレス０１００および０１０８および０１２４の“．．．”は、任意の通常命令コードの発行を示している。
【００４８】
修正された特殊処理内容を実行したい場合には、命令アドレス０１０ｃ以降のように命令コードを記述するようになる。
先ず、命令アドレス０１０ｃの命令コードにより、特殊演算回路９に対して一時停止サイクル数として３を指定する。
その後、命令アドレス０１１０の命令コードにより、“Ｘ”の値をレジスタｒ３に取り込んでおく。
その後、命令アドレス０１１４の命令コードにより、“ｇ”に対して０を設定する。ここではレジスタｒ０の値が０であるとする。
その後、命令アドレス０１１８のＳＰＭＣＩ命令により特殊演算回路９が動作を開始する。動作開始後、一時停止サイクル数３で停止するように設定されているため、３サイクル目の処理発行前に特殊演算回路９は停止し、通信路１０９ｃの特殊演算回路実行中信号がＯＮからＯＦＦとなる。
【００４９】
命令デコード２は、特殊演算回路実行中信号がＯＦＦならば次の命令コードが発行可能であるため、命令アドレス０１１ｃの命令が発行される。先述の通り、リスト２中の演算結果“ｈ”はレジスタｒ５に保持されているため、その値がレジスタｒ３の値である“Ｘ”ビットほど、左にシフトされる。
その後、命令アドレス０１２０の命令コードＭＣＳＴＰ  ０が発行される。これにより、特殊演算回路９が処理を完了するまでは、図１０のフローチャートにおけるステップＳＴ４がＹＥＳとならないため、特殊演算回路９の残りの処理が実行される。
実行完了後、特殊演算回路実行中信号がＯＮからＯＦＦとなるため、命令アドレス０１２４以降の命令コードが実行されることとなる。
【００５０】
このように、本実施の形態では、処理内容に特化した演算に対しては、専用の特殊演算回路９により高速実行が可能であると共に、処理内容に修正が発生した場合でも、大きく処理時間を落とすことなく、実装されている特殊演算回路９を使用して、修正後の処理内容を実行することが可能となる。
尚、本実施の形態では、特定のリスト１、リスト２のような処理内容について説明を行ったが、特殊演算回路とする処理内容については、リスト１、リスト２に制約するものではない。
また、本実施の形態では、特殊演算処理手段９ｂとして三つの特殊演算サブ回路９１１，９１２，９１３で構成したが、この数に限定されるものではなく、一つ以上の値であればよい。
【００５１】
更に、本実施の形態では、特殊演算回路９が実行する処理内容として、ある特定の一つの処理内容で説明したが、特殊演算回路９上に実装する処理内容として、複数の独立した処理内容を一つにまとめたものでも良い。そのような場合においては、上述した特殊演算回路９の実行開始を指示する命令コード“ＳＰＭＣＩ”にオペランド（引数）を与え、例えば、
ＳＰＭＣＩ  ｍ
とし、引数のｍを複数の独立した処理内容から一つを選択するＩＤ番号とし、ｍの値を変えることにより、複数の処理内容から任意の処理内容を選択することも可能である。また、その場合、特殊演算制御手段９ａは共有化して使用することが可能である。
【００５２】
以上のように、実施の形態１の演算処理装置によれば、算術演算、論理演算、シフト演算を行う演算手段を有し、各演算手段に対して定義されている命令コードの発行により各演算を実行する一般演算処理手段と、所定のクロックサイクルで特定の演算処理を実行する特殊演算処理手段と、特定の演算処理に対して定義されている命令コードの発行に基づいて、特殊演算処理手段での演算処理の実行および一時停止を制御する特殊演算制御手段とを備えたので、高速に処理を実行出来ると共に、修正が発生した場合に、部分的に演算結果を修正する事が可能であり、処理内容修正後の処理の実行時間が長大化することを避けることができる。
【００５３】
また、実施の形態１の演算処理装置によれば、特殊演算処理手段が一時停止するクロックサイクル数を、特定の命令コードを使用して任意の値に設定するようにしたので、実装する特殊演算処理手段の形態によらず、特殊演算処理手段の任意のサイクル後の結果に対し、一般命令で補正をかけることが可能となるため、特殊演算処理手段の処理内容の実装と、特殊演算制御手段の実装とを独立して実現可能となり、本演算処理装置の実装開発が容易になるという効果と共に、どのような特殊演算処理手段の処理内容に対しても、一時停止用の命令コードが一つで済み、命令のデコード処理に負荷をかけなくて済むという効果と共に、命令コードサイズを不用に増やさずに済むという効果がある。
【００５４】
また、実施の形態１の演算処理装置によれば、特殊演算処理手段は、複数の独立した特定の演算処理を実行可能に構成され、複数の独立した特定の演算処理の選択を、特定の演算処理の開始を指定する命令コードの引数で指定するようにしたので、命令コードを複数の独立した処理内容毎に増やす事が必要でなくなるため、命令コードサイズを不用に増やさずに済むという効果がある。
【図面の簡単な説明】
【００５５】
【図１】この発明の実施の形態１による演算処理装置を示す構成図である。
【図２】一般的なマイクロプロセッサのパイプラインステージの説明図である。
【図３】この発明の実施の形態１による演算処理装置の命令メモリ上の命令コードの説明図である。
【図４】この発明の実施の形態１による演算処理装置の命令コードの説明図である。
【図５】この発明の実施の形態１による演算処理装置の処理内容のデータフローを示す説明図である。
【図６】この発明の実施の形態１による演算処理装置の処理内容を通常の命令コードで表現した説明図である。
【図７】この発明の実施の形態１による演算処理装置の処理内容のデータフローをサイクル毎に分割した構成を示す説明図である。
【図８】この発明の実施の形態１による演算処理装置の特殊演算回路への接続状態の詳細を示すブロック図である。
【図９】この発明の実施の形態１による演算処理装置の特殊演算回路の詳細を示すブロック図である。
【図１０】この発明の実施の形態１による演算処理装置の特殊演算回路の動作を示すフローチャートである。
【図１１】この発明の実施の形態１による演算処理装置の特殊演算回路の各演算サイクルの状態遷移を示す説明図である。
【図１２】この発明の実施の形態１による演算処理装置の特殊演算回路の命令コード列の説明図である。
【符号の説明】
【００５６】
１  命令フェッチ、２  命令デコード、３  命令実行、４  メモリアクセス、５  結果ストア、６  命令メモリ、７  レジスタブロック、８  データメモリ、９  特殊演算回路、９ａ  特殊演算制御手段、９ｂ  特殊演算処理手段。
【図１】
2008293270.tif 000003
【図２】
2008293270.tif 000004
【図３】
2008293270.tif 000005
【図４】
2008293270.tif 000006
【図５】
2008293270.tif 000007
【図６】
2008293270.tif 000008
【図７】
2008293270.tif 000009
【図８】
2008293270.tif 000010
【図９】
2008293270.tif 000011
【図１０】
2008293270.tif 000012
【図１１】
2008293270.tif 000013
【図１２】
2008293270.tif 000014