(57)【特許請求の範囲】
【請求項１】
所定のビット幅の少なくとも二つのデータに対する加算を行う第１の演算器と、
上記第１の演算器が桁上げ信号を発生する毎にその桁上げ信号が入力され、上記第１の演算器が複数の加算を実行する間に発生した複数の桁上げ信号の累積値を表す、複数ビットからなる桁上げ信号累積データを生成する桁上げ信号累積回路と、
上記桁上げ信号累積データ及び上記第１の演算器の実行により得られた加算結果データに対する演算を実行する第２の演算器とを有するプロセッサ。
【請求項２】
上記第２の演算器は、上記第１の演算器が実行した複数回の加算に対して上記桁上げ信号累積回路により生成された桁上げ信号累積データと、
そのデータの下位側に付加された、上記複数回の加算の結果得られた加算結果データとの組を下位側へシフトし、上記ビット数のデータを出力するためのシフターを有する請求項１に記載のプロセッサ。
【請求項３】
第１及び第２の演算器と、
上記第１の演算器に接続され、それぞれ少なくとも所定のビット数のデータを保持することができる複数のレジスタと、
上記第１の演算器に接続された少なくとも一つの桁上げ信号累積回路と、
上記第１及び第２の演算器に接続され、上記複数のレジスタに対して書き込み又読み出しを実行する第１の選択回路とを有し、
上記第１の選択回路は、上記複数のレジスタに保持されたデータを上記第１の演算器に供給し、上記第１の演算器から供給される加算結果データを上記複数のレジスタのいずれか一つのレジスタに転送し、上記一つのレジスタに保持したデータを上記第２の演算器に供給し、上記第２の演算器から供給される演算結果データを上記複数のレジスタのいずれか一つのレジスタに転送し、
上記第１の演算器は、複数のレジスタの中から、上記第１の選択回路により選択された、複数の上記所定のビット数のデータに対して加算を実行し、
上記桁上げ信号累積回路は、上記第１の演算器が桁上げ信号を発生する毎にその桁上げ信号が入力され、その演算器により発生された桁上げ信号の累積値を表す、複数ビットからなる桁上げ信号累積データを生成し、
上記第２の演算器は、上記生成された桁上げ信号累積データと、
上記第１の選択回路により選択された一つのレジスタに保持された加算結果データとの組に対して演算を実行することを特徴とするプロセッサ。
【請求項４】
複数の上記桁上げ信号累積回路と、
上記第１の演算器から出力される桁上げ信号が入力されるべき一つの上記桁上げ信号累積回路を、上記複数の桁上げ信号累積回路より選択する第２の選択回路をさらに有し、
上記第２の演算器は、上記桁上げ信号累積回路により生成された上記桁上げ信号累積データと、上記第１の選択回路により選択された一つのレジスタに保持され、上記桁上げ信号累積データの下位側に付加された、加算結果データとの組を下位側へシフトし、上記ビット数を有するシフト結果データを出力するためのシフターを有する請求項３に記載のプロセッサ。
【請求項５】
複数の上記桁上げ信号累積回路と、
上記第１の演算器から出力される桁上げ信号が入力されるべき一つの上記桁上げ信号累積回路を、上記複数の桁上げ信号累積回路より選択する上記第２の選択回路と、
上記各第１の演算器に対応して、その演算器が発生する桁上げ信号と、上記桁上げ信号累積回路内の各桁上げ信号累積データとを演算し、上記各桁上げ信号累積回路に出力する桁上げ信号演算器をさらに有する請求項３に記載のプロセッサ。
【請求項６】
演算器と桁上げ信号累積回路を有し、
上記演算器は、所定のビット幅の少なくとも２つのデータに対する加算を行い、上記桁上げ信号累積回路は上記演算器が桁上げ信号を発生させる毎にその桁上げ信号を累積して複数ビットからなる桁上げ信号累積データを生成し、
上記演算器は、更に、該演算器の加算結果データと上記桁上げ信号累積器からのデータに対する演算を行うことを特徴とするプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、演算器が加算を行ったときに生じる桁上げ信号を無視しないで処理できるプロセッサに係り、特に画像処理に好適なプロセッサに関する。
【０００２】
【従来の技術】
デジタル画像処理を高速に行うのに適したプロセッサとして、複数のデータを同一の命令で並列に処理するＳＩＭＤ型プロセッサがある。そのようなＳＩＭＤ型プロセッサの中には、ＳＩＭＤ演算用のレジスタの内部を論理的に区切り、区切られたレジスタ内のデータをそれぞれ独立に扱うことを可能としたものがある。たとえば「ＭＭＸテクノロジ最適化テクニック」（小鷲英一著、アスキー発行）に記載のプロセッサでは、６４ビットの長さのレジスタに、８ビットからなる８個のデータを保持し、それぞれ８ビットのデータを処理できる８個の演算器からなる並列演算器により、同一のレジスタ内の８個のデータに対して同一の演算を並列に実行することができる。区切られた個々のデータはエレメントと呼ばれ、このような複数のエレメントからなるデータは、パックトデータと呼ばれ、このデータを保持するレジスタは、パックトデータレジスタと呼ばれている。
【０００３】
一般に画素データは値０−２５５を有し、８ビットで表されるので、連続した８つの画素データを一つのパックトデータレジスタに格納することができ、そのレジスタ内の８個の画素データそれぞれに対する同じ演算を並列に行うことができる。
【０００４】
上記プロセッサでは、加算の結果、桁上がり（キャリー）が生じた場合あるいは減算の結果、桁下げ（ボロー）が生じることがある。桁上げあるいは桁下げを無視するラップアラウンドモードで演算を行うと、演算結果は正しくなくなる。このため、上記プロセッサでは、飽和演算が使用可能になっている。つまり、演算結果が桁上げあるいは桁下げが生じた場合には、それらが生じない前の最大値あるいは最小値に固定する演算である。たとえば、ある画素データ値２５４にたとえば５を加算する場合、その結果としてデータ値２５５を出力する。このような単純な加算では、飽和演算でも誤差が小さく、無視できる場合がある。しかし、加算によってはこの飽和演算での誤差が無視できないことがある。たとえば、複数（ｎ）の画素データａ，ｂ，ｃ，ｄ．．．の平均を求める演算“ｘ＝（ａ＋ｂ＋ｃ＋ｄ．．．）／ｎ”では、複数の画素データの総和を求めてから、その総和をデータ数ｎで割る処理を行う。この総和を求めるために加算を繰り返し行う。得られた総和をデータ数ｎで割る処理は、このデータ数ｎが２のｍ乗（ｍは正の整数）であるとき、この除算は、総和データをｍビット下位側にシフトすることにより実現される。このように繰り返し加算を実行の間に桁上げが生じた場合、飽和演算により加算結果を最大値に固定すると、総和データの誤差が大きくなり、最終的に得られる平均値の誤差も大きくなる。
【０００５】
上記誤差を防ぐには、次のように、画素データの有効ビット数を増大して演算する方法が採ることができる。各画素のデータを１６ビットして扱い、各エレメントのサイズを１６ビットにし、一つのレジスタには４つのエレメントを保持させ、これらの４つエレメントに対する演算を並列に実行する。最終的な演算の結果は、８ビットに戻してメモリに保存される。このプロセッサは、このように有効ビット幅を広げたデータに対する演算も実行可能になっている。すなわち、各レジスタには、４個の１６ビットのエレメントまたは２個の３２ビットのエレメントを保持させることもできる。このときには、上記８個の８ビットの演算器は、このエレメントのサイズに合わせて、４個の１６ビットの演算器あるいは２個の３２ビットの演算器に再構成される。
【０００６】
【発明が解決しようとする課題】
上記のように一つのエレメントの長さを１６ビットする方法では、演算精度は保証されるが、並列に実行できる演算数、言い換えると並列に演算を施すことができるエレメントの数あるいは並列処理する画素データの数が半減する。そのためにこのプロセッサの処理速度が大幅に低下する。
【０００７】
このような問題を防ぐには、各レジスタのサイズを予め大きくすることが考えられる。たとえば、各レジスタに保持される最小エレメントのサイズを１２ビットにするかあるいは１６ビットにすることができる。この場合、各レジスタには従来と同様に８個のエレメントを保持させるとすると、レジスタのサイズは、９６ビットあるいは１２８ビットになる。さらに、エレメントのサイズをこのように増大するには、各エレメント用の演算器が処理できるビット幅も増大しなければならない。すなわち、各演算器を、１６ビットあるいは１２ビットのデータに対する演算を行い、演算結果データとして、１６ビットあるいは１２ビットのデータを出力するように構成する必要がある。このような演算器は、上のプロセッサでは８個もあるため、これらの演算器のサイズの総量はかなり増大する。
【０００８】
このように、従来の方法では、桁上げ信号の処理を正確にしようとすると、レジスタおよび演算器の回路規模が増大する。しかも、上記のプロセッサのようなＳＩＭＤ型のプロセッサは、各レジスタが複数のエレメントを保持し、これらの複数のエレメント同数の演算器を有するため、エレメントサイズを増大すると、演算器とレジスタの回路規模が大きくなる。
【０００９】
したがって、本発明の目的は、複数の符号なしデータの平均値を求める処理の実行時のように、繰り返し加算が実行されるときに発生する桁上がりを比較的簡単な回路により正しく処理するのに適したプロセッサが得られる。
【００１０】
【課題を解決するための手段】
画像データ処理では、画像データは符号なしデータであり、複数の符号なしデータの平均値処理で必要となる総和データの算出処理では、演算器での加算により桁上げ信号は生じるが、桁下げ信号はでない。したがって、これらのデータの総和データを算出する処理では、複数のデータの加算により生じた複数の桁上げ信号の累積値を算出する必要があるが、その累積値は、総和データを算出処理の中では使用されない。その累積値が必要となるのは、後に総和データをデータ数で割る除算処理においてである。したがって、このようなデータの加算の途中に生じる桁上げの累積値を保存し、後に総和データに対する除算を実行するときにその累積値と総和データとの組データに対して除算を実行できれば、桁上げを正しく処理できることになる。この方法を採ると、加算されるデータのビット幅も演算器のビット数も広げる必要はない。求められた総和データに対する除算は、上記組データをシフターにより下位側にシフトすることにより実行できる。
【００１１】
上記組データのビット数は、総和データのビット数と桁上げ信号の累積値のビット数の合計になる。したがって、上記シフターとしてはこの拡張されたビット数のデータをシフト可能なように構成する必要がある。しかし、このための必要なシフターの回路規模の増大は、このような拡張されたビット数のデータを各レジスタに保持させ、かつその拡張されたビット数のデータを演算器により処理させるときに必要となる回路規模の増大よりも小さくて済むと予想される。したがって、総和演算の間に生じる桁上げ信号を累積し、後に除算をするときに、その累積値を使用する方法では、総和を算出する演算の間に生じた桁上げを正しく処理できるとともに、平均値処理に必要となる回路規模が少なくて済むことになる。
【００１２】
以上のことは、平均値処理に限らず、他の処理にも言えることである。すなわち、一般に、ある符号なしデータの加算により生じた桁上げ信号をその後その加算の結果データが使用されるときまで保存し、その加算結果データが使用されるときに、その加算結果データと一緒に処理されればよいことになる。
【００１３】
本発明は、符号なしデータの処理に関する上述の特徴に注目してなされたもので、本発明によるプロセッサには、演算器が加算を実行したときに出力する桁上げ信号の累積値を生成する回路が設けられ、この累積値に対する演算を実行する他の演算器が設けられる。
【００１４】
より詳細には、上記目的を達成するために、本発明によるプロセッサでは、演算器が処理するデータのビット幅および演算器が出力するデータのビット幅は、桁上げ信号部分を含まないままとする。
【００１５】
上記演算器が複数の加算を実行する間に発生した複数の桁上げ信号の累積値を表す桁上げ信号累積データを生成する桁上げ信号累積回路が設けられる。この桁上げ信号累積データは、複数ビットからなる。
【００１６】
さらに、上記桁上げ信号累積回路により生成された桁上げ信号累積データに対する演算を実行する他の演算器が設けられる。
【００１７】
本発明の望ましい態様では、上記桁上げ信号累積回路はカウンタにより構成される。
【００１８】
本発明の具体的な態様では、上記他の演算器は、上記桁上げ信号累積回路により生成された桁上げ信号累積データとその下位側に付加された、上記複数回の加算の結果得られた加算結果データとの組を下位側にシフトするシフターを含む。当該他の演算器は、加算命令とは異なる他の特定の命令、具体的にはシフト命令に応答して動作する。
【００１９】
本発明のより具体的な態様では、一つまたは複数の桁上げ信号累積回路が、プロセッサ内の複数のレジスタに共通に設けられる。
【００２０】
本発明の望ましい態様では、上記複数の桁上げ信号累積回路の数は、プロセッサ内の複数のレジスタの数より少ない。
【００２１】
本発明の望ましい態様では、各桁上げ信号累積回路に保持される桁上げ信号累積データのビット数は、上記所定のビット数より小さくされる。
【００２２】
本発明のさらに具体的な態様では、少なくとも一つの桁上げ信号累積回路が、ＳＩＭＤ型のプロセッサ内の複数のパックトデータレジスタに共通に一つまたは複数設けられる。
【００２３】
【発明の実施の形態】
以下、本発明に係るプロセッサを図面に示したいくつかの実施の形態を参照してさらに詳細に説明する。なお、以下においては、同じ参照番号は同じものもしくは類似のものを表すものとする。また、第２の実施の形態以降では、第１の実施の形態との相違点を主に説明するに止める。
【００２４】
＜発明の実施の形態１＞
図１は本発明に係るＳＩＭＤ型プロセッサのブロック図である。図１において、パックトデータレジスタ群１２０は、たとえば８つの６４ビットのレジスタからなり、各レジスタはたとえば８個の８ビットのエレメントデータを保持することができる８個のフィールドを含むと仮定する。演算ユニット１００，１００’，，            １００”は、同一のレジスタに保持された８個のエレメントを保持する８個のフィールドに対応して設けられ、同一のレジスタに保持された８個のエレメントをそれぞれ処理するための回路である。これらの演算ユニットは、たとえば合計８個用いられるが、図１では、簡略化のため３つのみ図示し、他は省略してある。これらの演算ユニットは同じ構成の回路からなり、演算ユニット１００，１００’，，，１００”は、演算器１３０，１３０’，，または１３０”と、桁上げ信号累積回路１４０，１４０’，，または１４０”とマルチプレクサ１５０，１５０’，，，１５０”とよりなる。
【００２５】
桁上げ信号累積回路１４０は、本実施の形態で新たに設けられたもので、演算器１３０内の算術論理演算器（ＡＬＵ）３２０（図２）が加算を繰り返し実行する間に出力する複数の桁上げ信号を累積する回路である。具体的には、この回路１４０は、カウンタ４１０（図３）からなる。他の桁上げ信号累積回路１４０’，，，１４０”についても同様である。後に説明する特定の命令に応答して、その回路１４０により生成された桁上げ信号の累積値を使用する他の演算器として、演算器１３０内にシフター３３０（図２）が設けられている。他の演算器１３０’，，，１３０”についても同様である。本実施の形態では、これらの信号累積回路１４０およびこのシフター３３０によりＡＬＵ３２０が符号なしデータに対して加算を繰り返し実行するときに発生する桁上げ信号を正しく処理することを可能にする。
【００２６】
命令フェッチ回路１６２は、メモリ１６３から順次命令をフェッチし、命令デコーダ１６１はフェッチされた命令を解読し、制御回路１６０は解読された命令を実行するための制御信号を生成し、それぞれの装置を制御信号１７０によって制御する。命令デコーダ１６１により解読された命令がメモリ１６３からデータをパックトデータレジスタ群１２０内のいずれかにロードする命令であるかあるいはパックトデータレジスタ群１２０内のいずれかのレジスタ内のデータをメモリ１６３にストアする命令であるときには、メモリアクセス回路１６４によりデータのロードあるいはストアが行われる。メモリ１６３からパックトデータレジスタ群１２０へのデータの移動は、データバス１１４，１１０，１１３を介して行われる。このデータは６４ビットを含み、このデータには通常８個の８ビットのエレメントが含まれている。この６４ビットのデータには４個の１６ビットのエレメントが含まれている場合もある。パックトデータレジスタ群１２０からメモリ１６３へのデータの移動は、データバス１１２，１１５を介して行われる。
【００２７】
命令デコーダ１６１により解読された命令がパックトデータレジスタ群１２０を使用する演算命令であるときには、その命令が指定する一対のパックトデータレジスタ内の一方から８個のエレメントが読み出され、８個の演算ユニット１００，１００’，，，１００”にバス、１１２，１０１を介して転送される。同様に、上記一対のパックトデータレジスタ内の他方からも８個のエレメントが読み出され、８個の演算ユニット１００，１００’，，，１００”にバス１１１，１０２を介して転送される。それらの演算器は、それぞれに転送されたエレメントに対して演算を実行し、その結果、８ビットの演算結果データを、バス１１４を介してパックトデータレジスタ群１２０内の命令で指定された一つのレジスタにバス１０９，１０９’，，，１０９”と共通のデータバス１１０，１１３を介して転送する。このように、本実施の形態は、単一命令により複数のエレメントを並列に処理するＳＩＭＤ型のプロセッサである。
【００２８】
データバス１０１，１０２，１１０，１１１，１１２，１１３，１１４はそれぞれ６４ビット幅とする。データバス１０１，１０２を介して供給される６４ビットデータは、それぞれデータバス１０３”〜１０３，１０４”〜１０４によりそれぞれ８ビットずつ、上位ビットから順に演算器１３０”〜１３０に並列に供給され、演算結果はデータバス１０９”〜１０９を介して、データバス１０９”が最上位ビットとなるようにデータバス１１０に整列し、６４ビットデータとしてデータバス１１３を介してパックトデータレジスタ群に格納される。
【００２９】
図４に示すように、パックトデータレジスタ群１２０は、８個の６４ビットのパックトデータレジスタ２００〜２０７と、書き込みレジスタ選択回路２１０と、読み出しレジスタ選択回路２２０とから構成される。以下ではパックトデータレジスタ２００〜２００”は、簡単化のために単にレジスタと呼ぶことがある。また、それぞれのレジスタは、以下に述べる命令ではＲ０〜Ｒ７と表記する。
【００３０】
演算ユニット１００においては、パックトデータレジスタ群１２０内の二つのレジスタから読み出され、データバス１０１，１０２を介して１パックトデータレジスタ群１２０から供給される二つの６４ビットデータのそれぞれの最下位８ビットからなる二つのデータは、８ビットデータバス１０３，１０４を介して演算器１３０に供給される。演算器１３０は、それらのデータに対して演算を行い、８ビットの演算結果データを出力する８ビット演算器により構成される。演算器１３０は、８ビットデータの演算結果を８ビットデータバス１０９に出力する。
【００３１】
演算器１３０において桁上がりが発生した場合、桁上がりビットデータは１ビットバス１０５を介してマルチプレクサ１５０に送られる。このマルチプレクサ１５０は、本実施の形態で新たに設置されたものである。実行中の命令が１６ビット以上のエレメントを処理することを要求する加算命令であるときには、バス１０５上の桁上がりビットデータをデータバス１０６を介して次の上位ビット演算器１３０’に送る。実行中の命令が８ビットのエレメントを桁上げを無視しないで処理することを要求する加算命令であるときには、バス１０５上の桁上がりビットデータをデータバス１０８を介して桁上げ信号累積回路１４０に送る。この命令は本実施の形態により新設された命令であり、その使用方法は後に説明する。マルチプレクサ１５０は、実行中の命令が、上記２種類の加算命令であるとき以外には、バス１０５をデータバス１０６，１０８のどちらにも接続しない。
【００３２】
桁上げ信号累積回路１４０に保持された桁上げ信号の累積データは、特定の命令が実行されたときに利用される。本実施の形態では、後に説明する特定の種類のシフト命令が実行されたときには、そこに蓄えられたビットが演算器１３０へ４ビットデータバス１０７を介して供給される。演算器１３０，桁上げ信号累積回路１４０とマルチプレクサ１５０は、制御回路１６０によって制御される。
【００３３】
図２は演算器１３０の詳細を示し、この演算器は、加減算と論理演算等を行う算術論理演算器（ＡＬＵ）３２０と、８ビット入力８ビット出力の従来と同じくシフト演算を行うシフター３３１の他に１２ビット入力８ビット出力の本実施の形態で新たに設置したシフター３３０とマルチプレクサ３１０と、マルチプレクサ３１１から構成されている。演算器１３０内には、乗算器等の図示しない他の演算器も設けられていて、その乗算器は、桁上がりを無視して乗算を実行できる。しかし、それらの演算器の存在は本発明の特徴に関連がないので、本実施の形態では、このような他の演算器は図示されず、その説明も省略する。マルチプレクサ３１０は、データバス１０４により供給されるデータを、データバス３００を介してＡＬＵ３２０に供給するか、もしくはデータバス３０１を介してシフター３３０に下位８ビットデータとして供給するか、もしくはシフター３３１に供給するかを選択する。
【００３４】
ＡＬＵ３２０は、実行中の命令が加減算命令であるときには、データバス１０３と３００により供給される２つのデータに対して加減算を行い、演算結果をデータバス３１３に出力する。実行中の命令が桁上がりを正しく処理することを要求する加算命令であり、加算の結果桁上がりが発生した場合、ＡＬＵ３２０は、桁上がりビットをバス１０５に出力する。ＡＬＵ３２０は、実行中の命令が論理演算命令であるときには、データバス１０３と３００により供給される２つのデータに対して論理演算を行い、演算結果をデータバス３０３に出力する。なお、実行中の命令が１６ビット以上のエレメントに対する加減算を要求する命令であるときには、最下位の演算器１３０以外の演算器１３０’等には、データバス１０６’を介して下位側の演算器から桁上げビットデータが供給され、ＡＬＵ３２０により加減算に使用される。
【００３５】
シフター３３１は、実行中の命令が、パックトデータレジスタ群１２０内のいずれかのレジスタに保持された８ビットのデータに対するシフトを要求する命令であるときに、マルチプレクサ３１０を介してそのレジスタから供給されるデータをその命令の指定に従って上位側あるいは下位側にその命令が指定するビット数だけシフトし、８ビットのシフト結果データをデータバス３０５に出力する。
【００３６】
このシフターは、シリアルシフターあるいはバレルシフターのいずれでもよいが、速度の点では後者の方が望ましい。シフター３３１は、シフト方向が下位側であるときには、シフトされるデータの元の最上位ビットを新たな最上位ビットとして繰り返し供給する。シフター３３１は、シフト方向が上位側であるときには、シフトされるデータの最下位ビットとして値‘０’を繰り返し供給する。
【００３７】
また演算ユニット１００〜１００”のそれぞれにおけるシフター３３１とそれに対応するシフター（図示せず）は、つながっているものとする。例えば１６ビットのシフト命令では、演算ユニット１００’の内部のシフター（図示せず）の下位ビットと演算ユニット１００の内部のシフター３３１の上位ビットがつながり、シフト方向が下位側であるときは、演算ユニット１００’の内部の上記図示しないシフターにおいては、シフトされるデータの元の最上位ビットを新たな最上位ビットとして繰り返し供給するが、演算ユニット１００の内部の上記シフター３３１における最上位ビットは、演算ユニット１００’の内部の上記図示しないシフターの最下位ビットが繰り返し供給される。逆にシフト方向が上位側であるときには、演算ユニット１００’の内部の上記図示しないシフターの最下位ビットは、演算ユニット１００の内部の上記シフター３３１の最上位ビットが繰り返し供給される。同様にしてさらに上位の演算ユニット内の対応するシフター（図示せず）も２つずつつながる。３２ビットシフト命令においてはシフターが４つずつつながる。
【００３８】
シフター３３０は、桁上げ信号累積回路１４０に保持された累積データを利用する演算器として本実施の形態で新たに設けられたものである。このシフター３３０は、実行中の命令が、パックトデータレジスタ群１２０内のいずれかのレジスタに保持された８ビットのデータと桁上げ信号累積回路１４０により累積されたデータとの組データを下位側にシフトすることを要求する後述する特定のシフト命令であるときには、データバス３０１を介してそのレジスタから供給される８ビットのデータを下位ビットとして、データバス１０７を介して供給される４ビットの桁上がり累積データを上位ビットとする組データに対して、その命令が指定するビット数だけ下位側にシフトし、シフト後のデータの上位８ビットからなるシフト結果データをデータバス３０４に出力する。このシフターも、シリアルシフターあるいはバレルシフターのいずれでもよいが、速度の点では後者の方が望ましい。
【００３９】
また、シフター３３０もシフター３３１と同様に８ビット命令だけではなく、１６ビット命令３２ビット命令にも対応し、例えば後述の、シフター３３０を使用する１６ビットシフト命令では、演算ユニット１００’内の対応するシフター（図示せず）は、演算ユニット１００内のシフター３３１とつながり、シフト方向が下位側であるときは、演算ユニット１００内のシフター３３１における最上位ビットは、演算ユニット１００’内の上記図示しないシフターの最下位ビットが繰り返し供給される。逆にシフト方向が上位側であるときには、演算ユニット１００’内の上記図示しないシフターの最下位ビットは、演算ユニット１００内のシフター３３１の最上位ビットが繰り返し供給される。同様にして上位の演算ユニット内の対応するシフター（図示せず）も２つずつつながる。３２ビットシフト命令においてはシフターが４つずつつながる。
【００４０】
マルチプレクサ３１１は、データバス３０３，３０４，３０５のいずれか１つ上の演算結果データを選択してデータバス１０９へ出力する。
【００４１】
図３は示すように、本実施の形態では、桁上げ信号累積回路１４０はビットカウンタ４１０により構成される。カウンタ４１０は、データバス１０８より桁上げビットデータが供給されると、カウンタ値を１つ上げ、１上げたカウンタ値をデータバス１０７に出力し、線１７０にクリア信号が与えられたときにカウンタ値を０にするクリアする。
【００４２】
演算器１３０と他の演算器１３０’，１３０”，，，は互いに同じ回路構成であり、かつ並列に動作し、これらの演算器に設けられた桁上げ信号累積回路１４０，１４０’，１４０”，，，は全て同じ回路構成であり、かつ並列に動作する。以上のことにより、演算ユニット１００，１００’，１００”，，，は全て同じ構成であり、かつ並列に動作することが分かる。
【００４３】
本実施の形態では、新たに設置した装置を動作させるため、従来の命令に加えて新たに加算命令、シフト命令、カウンタクリア命令を新設する。以下では、命令はオペコードと、オペランドをニモニックで表示する。また以下で用いるニモニックは、説明の便宜上定めたものであり、本実施の形態では従来からある命令に対して使用されているニモニックと異なるニモニックが使用されることがある。
【００４４】
従来の加算命令、例えば“ＡＤＤ８  Ｒｘ，Ｒｙ”（ｘ，ｙ＝０〜８）は、パックトデータレジスタＲｘとＲｙの内部を論理的に８ビットに区切り、それらのレジスタ内の対応する一対のエレメントを符号なしデータと見なして他のエレメントと独立に加算し、結果をパックトデータレジスタＲｙに格納するという命令である。この加算命令は桁上げ信号を無視する加算命令とする。この加算命令は飽和演算をする命令であってもよい。
【００４５】
この命令が命令フェッチ回路１６２によりフェッチされて、命令デコーダ１６１において解読され、解読された命令から制御回路１６０は制御信号１７０を生成し、読み出しレジスタ選択回路２２０，書き込みレジスタ選択回路２１０とマルチプレクサ３１２，３１３，１５０をそれぞれ制御信号１７０によって制御する。制御信号１７０によって制御された読み出しレジスタ選択回路２２０は、レジスタＲｘとＲｙのそれぞれから８個のエレメントを並列に読み出し、データバス１１１と１１２に出力する。同様に制御されたマルチプレクサ３１０はそこに供給されたエレメントをデータバス３００を介してＡＬＵ３２０に供給し、同様に制御されたマルチプレクサ３１１は、ＡＬＵ３２０から与えられる加算結果データをバス１０９に出力する。同じく制御信号１７０によって制御されたマルチプレクサ１５０（図１）は、入力１０５をどこにも接続せずにｏｆｆとなる。従って、ＡＬＵ３２０において発生した桁上がりのビットは無視される。
【００４６】
これに対して新規加算命令、例えば“ＡＤＤ８Ｃ  Ｒｘ，Ｒｙ”が上記従来加算命令と異なる点は、マルチプレクサ３１１がデータバス１０８に接続するように制御されることであり、その他は上記従来加算命令と同様に制御される。従って、新規加算命令を実行した結果、ＡＬＵ３２０において桁上がりが発生した場合、ＡＬＵ３２０は、発生した桁上がりビットを桁上げ信号累積回路１４０内のカウンタ４１０（図３）に供給し、カウンタ４１０のカウンタ値が１つ上がる。
【００４７】
この新規の加算命令は、桁上げ信号を正しく処理することを要求するときに従来の加算命令に代って使用される。たとえば、複数のデータの平均値を求めるときに、それらのデータの総和を求めるために実行する複数の加算にはこの新規加算命令が称される。その場合、それらの複数の加算を実行する間に生じた桁上げ信号の総数がカウンタ４１０に保持されることになる。
【００４８】
従来のシフト命令、例えば“ＳＨ８Ｒｎ  Ｒｘ”は、パックトデータレジスタＲｘの内部を論理的に８ビットに区切り、それぞれ独立にｎビット右シフトし、シフト後の８ビットデータをパックトデータレジスタＲｘに格納するという命令である。この命令が命令フェッチ回路１６２によりフェッチされて、命令デコーダ１６１によって解読され、解読された命令から制御回路１６０は制御信号１７０を生成し、読み出しレジスタ選択回路２２０，書き込みレジスタ選択回路２１０とマルチプレクサ３１０，３１１，１５０が制御される。制御信号１７０によって制御された読み出しレジスタ選択回路２２０はＲｘをデータバス１１２に出力する。同様に制御されたマルチプレクサ３１０は、そこに供給されたエレメントをデータバス３０２を介してシフター３３１に供給する。同様に制御されたマルチプレクサ３１１は、このシフターの出力をバス３０５を介してバス１０９に購求する。同様に制御されたマルチプレクサ１５０は、それへの入力１０５をどこにも接続されずにｏｆｆとなる。
【００４９】
これに対して新規シフト命令、例えば“ＳＨ８ＲｎＣ  Ｒｘ”の上記従来シフト命令と異なる点は、マルチプレクサ３１０がレジスタＲｘよりバス１０４を介して読み出された一つのエレメントをバス３０１を介してシフター３３０の下位側の位置に入力し、マルチプレクサ３１１がこのシフター３３０からバス３０４に出力されるシフト後のデータをバス１０９に転送することであり、その他は上記従来シフト命令と同様に制御される。カウンタ４１０に保持された累積データを構成する４ビットはシフター３３０の上位側に並列に入力されているので、このシフター３３０は、この累積データとレジスタＲｘ内のエレメントデータとの組をｎビット下位側にシフトすることになる。
【００５０】
この新規シフト命令は、桁上げ信号累積回路１４０に保持された桁上げ信号の累積値を利用するときに従来のシフト命令に代って使用される。上述の平均値処理においては、複数のデータの総和を求めて後に、その総和データをデータ数でもって割る除算を実行するときに使用される。上記の総和データがレジスタＲｘに保持されていると仮定すると、上記総和データの上位側にその総和データの算出時に発生した複数の桁上げ信号の累積値が付加されたデータがシフトされる。したがって、このシフト後の結果データは、上記総和データの算出中に発生した桁上げ信号を考慮した正しい結果となる。
【００５１】
新設のカウンタクリア命令、例えば“ＣＬＲＣ”は、カウンタ４１０のカウンタ値を０に設定する。この命令が命令フェッチ回路１６２でフェッチされると、命令デコーダ１６１で解読し、解読された命令から制御回路１６０は制御信号１７０を生成し、制御信号１７０によりカウンタ４１０はクリアされる。
【００５２】
以下に本実施の形態のプロセッサでの平均値算出処理の詳細を説明する。８個のソースデータＡｉ（ｉ＝０〜７）はそれぞれ８ビットのデータであり、図４のパックトデータレジスタ２００内に記載したように、同一のレジスタ２００内の８つのフィールドにロードされるエレメントであるとする。したがって、ｉはエレメント番号と呼ぶことができる。図において、各ソースデータの最上位ビットは、そのデータを保持するフィールドの最左端に位置するとする。他のソースデータＢｉ，Ｃｉ，Ｄｉ（ｉ＝０〜７）も同様に８ビットのデータであり、８個のソースデータＢｉ（ｉ＝０〜７）、Ｃｉ（ｉ＝０〜７）、Ｄｉ（ｉ＝０〜７）はそれぞれレジスタ２０１，２０２，２０３に保持されているとする。これらのデータは全て符号なしデータであると仮定する。以上のデータを用いて、同じエレメント番号ｉを有する４つのデータの平均値Ｘｉ＝（Ａｉ＋Ｂｉ＋Ｃｉ＋Ｄｉ）／４”（ｉ＝０〜７）を求めるとする。
【００５３】
平均値Ｘｉ（ｉ＝０〜７）を求めるための命令列は、本実施の形態では以下の通りとなる。
【００５４】
＃１      ＣＲＬＣ
＃２      ＬＯＡＤ      （ｍａ），Ｒ０
＃３      ＬＯＡＤ      （ｍｂ），Ｒ１
＃４      ＬＯＡＤ      （ｍｃ），Ｒ２
＃６      ＡＤＤ８Ｃ      Ｒ１，    Ｒ０
＃５      ＬＯＡＤ      （ｍｄ），Ｒ３
＃７      ＡＤＤ８Ｃ      Ｒ２，    Ｒ０
＃８      ＡＤＤ８Ｃ      Ｒ３，    Ｒ０
＃９      ＳＨ８ＲＣ２    Ｒ０
＃１０    ＳＴＯＲＥ      Ｒ０，（ｍｄ）
まず、最初のクリア命令によりカウンタ４１０がクリアされる。次の４つの命令はロード命令である。すなわち、ＬＯＡＤ  （ｍａ），Ｒ０等は、メモリアドレスｍａにある６４ビットデータをレジスタＲ０にロードする命令である。ここでは、メモリアドレスｍａの記憶位置に画像データ群Ａ０〜Ａ７が記憶され、これらのデータが一つのロード命令によりレジスタＲ０にロードされる。同様に、画像データ群Ｂ０〜Ｂ７、Ｃ０〜Ｃ７、Ｄ０〜Ｄ７が第２，第３，第４のロード命令によりメモリ１６３からレジスタＲ１，Ｒ２，Ｒ３にそれぞれロードされる。次の加算命令により、レジスタＲ０内のデータ群はＡ０＋Ｂ０，Ａ１＋Ｂ１，，，Ａ７＋Ｂ７という加算がなされ、これにより得られる８個の総和データ群Ｘ０〜Ｘ７がレジスタＲ０に格納される。さらに第２の加算命令により、レジスタＲ０内の総和データ群Ｘ０〜Ｘ７とレジスタＲ２内のデータＣ０〜Ｃ７とが加算され、その結果、Ａ０＋Ｂ０＋Ｃ０，Ａ１＋Ｂ１＋Ｃ１，，，Ａ７＋Ｂ７＋Ｃ７という総和データ群が得られ、レジスタＲ０に格納される。これらの総和データ群もここではＸ０〜Ｘ７で表す。最後の加算命令により、Ａ０＋Ｂ０＋Ｃ０＋Ｄ０，Ａ１＋Ｂ１＋Ｃ１＋Ｄ１，，，Ａ７＋Ｂ７＋Ｃ７＋Ｄ７という最終的な総和を表すデータ群が得られ、レジスタＲ０に格納される。これらの総和データ群もここではＸ０〜Ｘ７で表す。
【００５５】
これらの４つの加算命令の実行中に桁上げがいずれかの演算ユニット、たとえば１００内の演算器３２０により発生された場合には、その演算ユニット内のカウンタ４１０がカウントアップをする。このことは他の演算ユニット１００’，１００”でも同様である。こうして、各演算ユニット内のカウンタ４１０は、対応する演算器１３０内のＡＬＵ３２０により発生された桁上げビットの総数を保持することになる。上記４つの加算命令に続くシフト命令が、実行されると、その演算ユニット内のシフター３３０は、レジスタＲ０に保持された各総和データＸｉ（ｉ＝０，１，，または７）は、対応する演算ユニット内のカウンタ４１０内の累積データの下位側にその総和データＸｉとを付加して得られる１２ビットのデータを、２ビット下位側にシフトする。この結果、シフター３３０により出力されるデータは、その累積データを正しく反映して算出された、データＡｉ，Ｂｉ，Ｃｉ，Ｄｉの平均値を表す。なお、命令ＳＴＯＲＥ  Ｒ０，（ｍｄ）は、レジスタＲ０内の平均値データをメモリアドレスｍｄの位置にストアする命令である。
【００５６】
こうして、本実施の形態では、８つの平均値Ｘｉを並列に求めることができる。以上から分かるように、本実施の形態では従来の演算器に簡単な回路を付加することによって、桁上がりのビットをカウンタ４１０によって保持し、また新規シフター３３０によって参照できるので、“ｘ＝（ａ＋ｂ＋ｃ＋ｄ）／４”等の複数の８ビットソースデータの平均を求める演算で発生する桁上げ信号を無視することなく実行できる。この際、エレメントサイズを拡張する必要はなく、また演算器の扱うビット幅を拡大する必要はない。このため、本実施の形態において新たに追加した回路の規模は少なくて済む。
【００５７】
＜発明の実施の形態１の変形例＞
（１）実施の形態１ではデータバス１０７、シフター３３０の入力をそれぞれ４ビットとしているが、回路規模、性能に応じて任意とする。またカウンタ４１０の最大値もこのビットに合わせて任意とする。上記４つの８ビットデータの平均を求める演算では、カウンタ４１０が採り得る最大値は２ビットであるので、この種の用途のみならば、データバス１０７、シフター３３０ともに２ビットで十分である。この変形は以下に示す他の実施の形態にも適用できる。
【００５８】
（２）実施の形態１ではパックトデータレジスタ群を６４ビットで８つとしたが、回路規模に応じて任意とし、それに応じデータバス１０１，１０２，１１０，１１１，１１２，１１３も任意とする。この変形は以下に示す他の実施の形態にも適用できる。
【００５９】
（３）上記変形例（２）において、１００〜１００”の回路の数は任意とする。例えばパックトデータレジスタ群１２０が１２８ビットの場合、１００〜１００”の数を１６とすることで、１６回の８ビット演算が並列に行われる。この変形は以下に示す他の実施の形態にも適用できる。
【００６０】
（４）実施の形態１では主にエレメントサイズが８ビットでの説明であったが、エレメントサイズ１６ビットまたは３２ビットにおいても適応する。実施の形態１で示した動作とエレメントサイズ１６ビットでの動作の違いは、マルチプレクサ１５０が常にデータバス１０６に接続している点で、その他は実施の形態１と同じ動作である。従って、新規命令“ＡＤＤ１６Ｃ  Ｒｘ，Ｒｙ”，“ＳＨ１６ＲｎＣ  Ｒｘ”を新設することで、エレメントサイズ１６ビットにおいても同様に動作する。これらの命令が命令デコーダ１６１で解読され、解読された命令から制御回路１６０は制御信号１７０を生成する。ここでエレメントサイズが１６の命令では、マルチプレクサ１５０を常にデータバス１０６に接続させ、マルチプレクサ１５０’は任意とする制御信号１７０を生成する。なお省略してあるが、マルチプレクサ１５０〜１５０”の１つおきに上記制御させる。３２ビットにおいても同様であり、こちらは３つおきに上記制御させる。この変形は以下に示す他の実施の形態にも適用できる。
【００６１】
（５）実施の形態１では演算器１３０を２入力としたが、３入力または４入力にも適応するものとし、これに応じて並列に処理を行うため、データバス１０１，１０２，１１１，１１２，１０３，１０４の数も任意とする。このことは、以下に示す他の実施形態にも適用される。
【００６２】
（６）実施の形態１において新設したシフト命令“ＳＨ８ＲｎＣ  Ｒｘ”において、シフトすると同時にカウンタ４１０をクリアするようにすると、実施の形態１において新設したクリア命令“ＣＬＲＣ”は省略でき、結果として実行すべき命令数を減らすことができ、処理の高速化に役立つ。
【００６３】
（７）実施の形態１では本発明を適用したＳＩＭＤ型のプロセッサを示したが、本発明はＳＩＭＤ型のプロセッサに限定されるのではなく、演算器が一つしかない、ＳＩＳＤ型のプロセッサにも適用可能であるのは言うまでもない。但し、ＳＩＭＤ型のプロセッサでは演算器の数が多いので、本発明により演算回路の回路規模を増大することなく、桁上げ信号を正しく処理できることの利点は大きい。
【００６４】
＜発明の実施の形態２＞
本実施の形態では、桁上げ信号累積回路１４０が複数個設けられている点で主として実施の形態１と異なる。すなわち、桁上げ信号累積回路１４０内に複数のカウンタを設け、桁上げ信号を累積するカウンタをそれらの中から命令により選択できるようになっている
すなわち、図５に示すように、桁上げ信号累積回路１４０は、桁上げビットデータが供給されるとカウンタ値を１つ上げ、カウンタ値を出力する機能を備えたカウンタ４１０〜４１３と、カウンタ４１０〜４１３の内、桁上げビットデータを供給すべきいずれか１つを選択するマルチプレクサ４２１と、カウンタ４１０〜４１３の内、データバス１０７に出力を供給すべきいずれかのカウンタを選択するマルチプレクサ４２２から成る。カウンタ４１０〜４１３は、実施の形態１と同様にカウンタクリア機能を持つ。
【００６５】
ここで、カウンタ４１０〜４１３に個別にアクセスするために、実施の形態１で新設した命令をさらに拡張する。まず実施の形態１で新設した加算命令“ＡＤＤ８Ｃ“に代えて、桁上がりのビットをどのカウンタ４１０〜４１３に供給するかを選択可能にするために、加算命令“ＡＤＤ８Ｃｎ  Ｒｘ，Ｒｙ”（ｎ＝０〜３）を新設する。ｎ＝０〜３はそれぞれカウンタ４１０〜４１３に対応している。
【００６６】
命令“ＡＤＤ８Ｃ０  Ｒｘ，Ｒｙ”と実施の形態１で新設した“ＡＤＤ８Ｃ  Ｒｘ，Ｒｙ”との相違点はマルチプレクサ４２１を制御することにより、カウンタ４１０を指定する点であり、この命令が命令デコーダ１６１で解読され、解読した命令から制御回路１６０が制御信号１７０を生成すると、実施の形態１で新設した“ＡＤＤ８Ｃ  Ｒｘ，Ｒｙ”における制御に加えて、新たにマルチプレクサ４２１を制御する。これにより、マルチプレクサ４２１はこの命令で指定されるカウンタ４１０につながり、データバス１０８上の桁上げビットデータはカウンタ４１０に加えられる。またカウンタの出力には影響がないため、マルチプレクサ４２２は動作させる必要はない。同様に、加算命令ＡＤＤ８Ｃ１，ＡＤＤ８Ｃ２，ＡＤＤ８Ｃ３は、カウンタ４１０〜４１３を選択する。
【００６７】
実施の形態１において新設したシフト命令に代えて、どのカウンタ４１０〜４１３からの出力をデータバス１０７に出力するかを指定可能にするために、シフト命令、“ＳＨ８ＲｍＧｎ  Ｒｘ”（ｍ：シフトビット数、ｎ：カウンタ選択値、ｘ：パックトデータ選択値）を新設する。たとえば、命令“ＳＨ８ＲｎＣ０  Ｒｘ”と実施の形態１で新設した“ＳＨ８ＲｎＣ  Ｒｘ”との相違点はマルチプレクサ４２２において、どのカウンタ４１０〜４１３の出力をデータバス１０７に出力するかを選択する点であり、この命令が命令デコーダ１６１で解読され、解読された命令から、制御回路１６０が制御信号１７０を生成し、実施の形態１で新設した“ＳＨ８ＲｍＣ  Ｒｘ”における制御に、新たにマルチプレクサ４２２の制御と、カウンタ４１０を出力する制御が加わる。これによりマルチプレクサ４２２はカウンタ４１０に接続し、カウンタ４１０の出力をデータバス１０７に出力する。そのほかは“ＳＨ８ＲｎＣ  Ｒｘ”と同様の動作をする。また、シフト命令においてはデータバス１０８からの入力がないため、マルチプレクサ４２１は動作させる必要がない。同様に、シフト命令ＳＨ８ＲｍＣ１，ＳＨ８ＲｍＣ２，ＳＨ８ＲｍＣ３はカウンタ４１０〜４１３を選択する。
【００６８】
さらに、カウンタ４１０〜４１３を個別に指定してクリア可能とするためにクリア命令“ＣＲＬＣｎ”（ｎ＝０〜３）を新設し、この命令が命令デコーダ１６１で解読され、解読された命令から制御回路１６０が制御信号１７０を生成し、カウンタ４１０〜４１３の一つを個別に指定しクリアする。
【００６９】
このように、桁上げ信号を保持する複数のカウンタが設けると、より多くのデータを処理するときに、桁上げ信号を累積するカウンタを選択でき、処理が高速化できるあるいはプログラムが容易となる。たとえば、本プロセッサが、複数、たとえば二つのスカラー命令を並列に実行するスーパースカラー方式のプロセッサとすることができる。そのようなプロセッサでは、各命令は複数のステージに分けてパイプライン的に実行されるとともに、二つの命令の同じステージが並行して実行される。たとえば、各命令は、フェッチ、デコード、演算という三つのステージでもって実行される。
【００７０】
このようなプロセッサを実現するためには、デコード回路、演算回路を二組設ける必要がある。フェッチ回路もできれば二つ設けることが望ましい。このようなプロセッサでの処理速度を増大するには、並列に実行できる命令の組み合わせが多いことが望ましい。二つの命令が並列に実行するためには二つの命令の間に競合がないことが望ましい。スーパースカラー方式のプロセッサにおいて、本実施の形態のように、複数のカウンタが桁上げ信号累積回路１４０内に設けられると、並列に実行できる二つの命令の組を増大することができ、処理速度を向上できる。たとえば、実施の形態１で示したプログラムを上記スーパースカラー方式で実行させる場合、命令列を以下のように並べることが望ましい。
【００７１】
＃１      ＣＲＬＣ
＃２      ＬＯＡＤ      （ｍａ），Ｒ０
＃３      ＬＯＡＤ      （ｍｂ），Ｒ１
＃４      ＬＯＡＤ      （ｍｃ），Ｒ２
＃５      ＡＤＤ８Ｃ      Ｒ１，  Ｒ０
＃６      ＬＯＡＤ      （ｍｄ），Ｒ３
＃７      ＡＤＤ８Ｃ      Ｒ２，  Ｒ０
＃８      ＡＤＤ８Ｃ      Ｒ３，  Ｒ０
＃９      ＳＨ８ＲＣ２    Ｒ０
＃１０    ＳＴＯＲＥ      Ｒ０，（ｍｄ）
この場合、命令＃４と＃５は並列に実行でき、命令＃６と＃７は並列に実行できる。なお、命令＃２と＃３が並列に実行できるか否かは、フェッチ回路が二つあるか否かにより変わる。
【００７２】
本実施の形態において８個のソースデータを二組に分け、各組の４つのソースデータの平均値を求める二つの処理を並列に実行させるプログラムの例は以下の通りである。このプログラムは、二つのカウンタ４１０，４１１を使用する。第１の平均値はレジスタＲ０〜Ｒ３を使用し、第２の平均値はＲ４〜Ｒ７を使用する。なお、ｍａからｍｊはメモリアドレスである。
【００７３】
＃  １      ＣＲＬＣ０
＃  ２      ＣＲＬＣ１
＃  ３      ＬＯＡＤ      （ｍａ），Ｒ０
＃  ４      ＬＯＡＤ      （ｍｂ），Ｒ１
＃  ５      ＬＯＡＤ      （ｍｅ），Ｒ４
＃  ６      ＡＤＤ８Ｃ０    Ｒ１，    Ｒ０
＃  ７      ＬＯＡＤ      （ｍｆ），Ｒ５
＃  ８      ＬＯＡＤ      （ｍｃ），Ｒ２
＃  ９      ＡＤＤ８Ｃ１    Ｒ５，    Ｒ４
＃１０      ＬＯＡＤ      （ｍｇ），Ｒ６
＃１１      ＡＤＤ８Ｃ０    Ｒ２，    Ｒ０
＃１２      ＬＯＡＤ      （ｍｄ），Ｒ３
＃１３      ＡＤＤ８Ｃ１    Ｒ６，    Ｒ４
＃１４      ＬＯＡＤ      （ｍｈ），Ｒ７
＃１５      ＡＤＤ８Ｃ０    Ｒ３，    Ｒ０
＃１６      ＡＤＤ８Ｃ１    Ｒ７，    Ｒ４
＃１７      ＳＨ８Ｒ２Ｃ０  Ｒ０
＃１８      ＳＨ８Ｒ２Ｃ０  Ｒ４
＃１９      ＳＴＯＲＥ      Ｒ０，（ｍｈ）
＃２０      ＳＴＯＲＥ      Ｒ１，（ｍｉ）
このプログラムでは、並列に実行できる命令の組は次の通りである。命令＃５と＃６，＃８と＃９、＃１０＃１１，＃１２と＃１３，＃１４＃１５，＃１６と＃１７、＃１８と＃１９。よってカウンタが一つの場合よりも並列に実行できる命令が増大する。
【００７４】
＜発明の実施の形態２の変形例＞
（１）実施の形態２において、カウンタ４１０〜４１３の数は任意とし、それに伴い実施の形態２で新設した命令のカウンタ選択値ｎも任意とする。
【００７５】
（２）実施の形態２において、カウンタ４１０〜４１３を個別に出力するように制御することにより、マルチプレクサ４２２は省略できる。
【００７６】
（３）実施の形態２の変形例（２）において、逆にカウンタ４１０〜４１３を全て出力させ、マルチプレクサ４２２で出力値を選択することにより、カウンタを指定する制御信号は省略できる。
【００７７】
＜発明の実施の形態３＞
本実施の形態では、実施の形態２で使用した複数のカウンタを有する桁上げ信号累積回路１４０に代えて複数のレジスタと演算器を有する回路を使用する。
【００７８】
図６において、桁上げ信号累積回路１４０には、実施の形態２におけるカウンタ４１０〜４１３の代わりにレジスタ４３０〜４３３が使用される。ここではレジスタ４３０〜４３３がそれぞれ４ビットと仮定し、レジスタ４３０から順に０〜３と番号をつける。演算器４４０は、データバス１０８から供給される桁上がりビットとデータバス４０３から供給されるデータを演算し、演算結果をデータバス４０１に出力する。この演算器は、少なくとも加算を実行できる。もちろん他の演算を実行できるようにしてもよい。書き込みレジスタ選択回路４２３は、データバス４０１からの入力をどのレジスタに格納するか選択する。読み出しレジスタ選択回路４２４は、どのレジスタ４３０〜４３３からデータをデータバス４０２に読み出すか選択する。マルチプレクサ４２５は、読み出されたデータをデータバス１０７を介してＡＬＵ３２０に送るか、データバス４０３を通じて演算器４４０に送るかを選択する。
【００７９】
演算器４４０を単体の加算器とした場合について説明する。ここで実施の形態２と同様に、レジスタ４３０〜４３３の個々について参照できるように命令を新設する。実施の形態２と同様の書式で、新規加算命令“ＡＤＤ８Ｇｎ  Ｒｘ，Ｒｙ”（ｎ＝０〜３）を新設し、ｎはレジスタ４３０〜４３３の番号に対応する。ここでまず“ＡＤＤ８Ｇ０  Ｒｘ，Ｒｙ”をとりあげる。“ＡＤＤ８Ｇ０  Ｒｘ，Ｒｙ”は桁上げ信号累積回路１４０以外では、実施の形態２で新設した加算命令と同じ動作をするものとし、桁上げ信号累積回路１４０内の動作の説明にとどめる。この命令が命令デコーダ１６１で解読されると、解読された命令から制御回路１６０は制御信号１７０を生成し、読み出しレジスタ選択回路４２４と書き込みレジスタ選択回路４２３とマルチプレクサ４２５を制御する。制御された書き込みレジスタ選択回路４２３と読み出しレジスタ選択回路４２４はそれぞれレジスタ４３０を選択し、マルチプレクサ４２５はデータバス４０３と接続することで、レジスタ４３０から参照されたデータは演算器４４０に供給され、データバス１０８から供給されるデータと演算を行い、演算結果がレジスタ４３０に格納される。以下同様にｎ＝０〜３まで新設する。
【００８０】
次に実施の形態２で新設したシフト命令“ＳＨ８ＲｍＧｎ  Ｒｘ”を本実施の形態でも新設する。この命令は上記新規加算命令と同様に、桁上げ信号累積回路１４０以外では、実施の形態２で新設したシフト命令と同じ動作をする。以下の説明は桁上げ信号累積回路１４０内の動作の説明にとどめる。ここでまず“ＳＨ８ＲｍＧ０  Ｒｘ”とりあげる。この命令が命令デコーダ１６１で解読されると、解読した命令から制御回路１６０は制御信号１７０を生成し、読み出しレジスタ選択回路４２４とマルチプレクサ４２５を制御する。制御された読み出しレジスタ選択回路４２４はレジスタ４３０を選択し、制御されたマルチプレクサ４２５はデータバス１０７と接続することにより、レジスタ４３０内のデータはデータバス１０７を介して演算器４４０に供給される。以下同様にｎ＝０〜３まで新設する。上記のように演算器４４０が加算器の場合、実施の形態２とほぼ同じ動作をする。
【００８１】
もし、本実施の形態に依らないで、加算用のＡＬＵ３２０が桁上げを処理可能なようにするには、パックトデータレジスタ群１２０内の各レジスタの一つのエレメントを保持するフィールドをたとえば８ビットから１２ビットあるいは１６ビットに変更し、ＡＬＵ３２０の内、二つのデータを加算する回路部分を、二つの１２ビットのデータの加算を行うように変更することが考えられる。
【００８２】
本実施の形態では、演算器４４０を設けるために、実施の形態２よりは回路規模が増大する。しかし、本実施の形態が必要とする回路の規模は、上記のように変更した場合よりも小さくて済む。すなわち、演算器４４０の加算の対象は、レジスタ４３０〜４３３内の４ビットのデータと線１０８から与えられる１ビットの桁上げビットである。したがって、この演算器は４ビットの二つのデータを加算する加算器より簡単な構成でよい。したがって、本実施の形態での演算器４４０とＡＬＵ３２０の内の加算を実行する部分の回路規模の合計は、そのように変更したときにＡＬＵ３２０内の加算器部分が必要とする回路規模よりは小さくできる。さらに、本実施の形態で使用するレジスタ４３０〜４３３の数は、パックトデータレジスタ群１２０内のレジスタの数より少なくてよい。したがって、本実施の形態では、パックトデータレジスタ群１２０とレジスタ４３０〜４３３の回路規模の合計は、パックトデータレジスタ群１２０の全レジスタのビット幅を上記のように変更した場合より少なくて済む。
【００８３】
なお、レジスタ４３０〜４３３の数を、全パックトデータレジスタの数と等しくした場合にも、前述のように、本実施の形態では、演算器４４０の回路規模は、通常の４ビット加算器より簡単であるので、依然として本実施の形態によるプロセッサの回路規模は、上記のように本実施の形態に依らないでプロセッサを変更した場合より小さくできる。しかし、回路規模の縮小という観点では、レジスタ４３０〜４３３の数を、全パックトデータレジスタの数より少ない方が望ましい。実施の形態２で使用したカウンタが複数ある場合と同じ理由により、スーパスカラー方式のプロセッサにおいては、レジスタ４３０〜４３３の数が複数あることが望ましい。その数は、全パックトデータレジスタの数にも依存するが、通常はその数の半分以下、１／４以上であることが望ましい。
【００８４】
また本実施の形態により、桁上げ信号累積回路内での演算を独立に実行できる。例えばレジスタ４３０内のデータと、レジスタ４３１内のデータを加算してレジスタ４３１に再び格納する新規命令を設定する。これによりパックトデータレジスタ１２０内の２つのデータを加算する際、両方に桁上がりデータがある場合も正しく演算される。例えば平均値演算“ｙ＝（（ａ＋ｂ）＋（ｃ＋ｄ））／４”を行う際、ａ＋ｂ、ｃ＋ｄの両方に桁上がりビットが発生しても、その両方の桁上がりビットを加算しておくことで平均値ｙは正しく求めることができる。
【００８５】
＜発明の実施の形態３の変形例＞
（１）実施の形態１におけるカウンタが一つであるように、実施の形態４におけるレジスタ４３０〜４３３の数を一つとすることもできる。
【００８６】
（２）演算器４４０は、基本的には、レジスタ４３０〜４３３のいずれかの内容を桁上げ信号により１だけ増大するインクリメンタとして使用される。したがって、そのようなインクリメンタを、加算器でない構造を有する回路により実現できるときには、そのようなインクリメンタは、演算器４４０の代わりに使用できる。本明細書ではそのようなインクリメンタも加算のための演算器と見なす。
【００８７】
（３）実施の形態３において、レジスタ４３０〜４３３は４ビットと仮定したが、レジスタの大きさは任意とする。またレジスタ４３０〜４３３の数も任意とする。従ってレジスタの大きさにより変化する、データバス４０２，４０３，４０１，また１０７の大きさも任意とする。
【００８８】
（４）実施の形態３において１ビットデータバスとした１０５，１０８は１〜８ビットまで任意の値を持つことができる。例えばＡＬＵ３２０を３入力１出力等の加算を行う演算器に変更すると、複数例えば２つの桁上がりビットが発生しうる。この場合には、データバス１０５と１０８を２ビットとし、データバス１０５，１０８を介して桁上げ信号累積回路１４０に２ビットの桁上げデータを並列に供給できる。実施の形態１と２では桁上げ信号累積回路内にカウンタを用いていたが、実施の形態３では演算器とレジスタという構成であるので、本変更により複数の桁上がりビットに対応することが可能となる。なお、このような変形例においても、レジスタ４３０〜４３３の総数が全パックトデータレジスタの数より少ないときには、本変形例の回路規模は依然として小さいという利点がある。
【００８９】
（５）実施の形態３の上記変形例３におけるデータバス４０１〜４０３と、レジスタ４３０〜４３３と、実施の形態３の上記変形例４におけるデータバス１０５と１０８と、実施の形態１の変形例１におけるデータバス１０７とシフター３３０の入力部の全てを８ビットとすることで、ＡＬＵ３２０における積においても桁上げ信号累積回路１４０を使用可能とする。そこで、新たに積算命令を新設する。動作は実施の形態３で新設した加算命令と、ＡＬＵ３２０以外の動作は同じ為省略する。
【００９０】
（６）実施の形態３において、演算器４４０は加算器以外に、減算器、論理演算器、シフター等を追加することができる。
【００９１】
（７）この変形例６の場合、レジスタ４３０〜４３３内の累積データに対して演算を実行する命令を新設することが有益である。このような命令を使用すれば、レジスタ４３０〜４３３内の累積データだけに対する演算を、パックトデータレジスタ内のデータとは独立に実行するようにできる。
【００９２】
＜発明の実施の形態４＞
本実施の形態では、実施の形態１で使用した二つのシフター３３０，３３１の動作を一つのシフターにて実現する。それにより、プロセッサの回路を実施の形態１よりも簡単にする。なお、本実施の形態の技術は、実施の形態２と３にも適用できる。
【００９３】
図７は本実施の形態における演算器１３０の構成を示し、マルチプレクサ３１２は、データバス１０４からのデータを、データバス３０６を介してＡＬＵ３２０に供給するかあるいはデータバス３０７を介してシフター３３２に供給するかを選択する。マルチプレクサ３１４は、データバス１０７上の４ビットの桁上げ信号の累積データかもしくは４ビットの固定データ‘０’を選択する。シフター３３２は、データバス３０７を介してマルチプレクサ３１２から供給される８ビットデータを下位ビットとして、またデータバス５００を介してマルチプレクサ３１４から供給される４ビットデータを上位ビットとする組み合わせデータに対してしてシフトを行い、シフト結果の下位８ビットをデータバス３０９に出力する。マルチプレクサ３１３データバス３０８、３０９どちらかに選択する
実施の形態１〜３で新設した命令は、本実施においても同様に扱うことができる。マルチプレクサ３１４は、実施の形態１〜３において新設した、シフト命令の実行においてデータバス１０７を選択し、そのほかの命令では固定データ‘０’を選択する。従ってシフター３３２の上位４ビットの入力は、新設のシフト命令以外のシフト命令では０であり、新設シフト命令が実行されたときのみバス１０７上の桁上げ信号の累積データが入力される。以上から、本実施の形態のプロセッサは実施の形態１に比べて回路が簡単であることが分かる。
【００９４】
＜発明の実施の形態４の変形例＞
（１）本実施の形態と実施の形態２あるいはその変形例との組み合わせ、また本実施の形態と実施の形態ｘ４あるいはその変形例との組み合わせも可能とする。
【００９５】
（２）実施の形態４において、シフターの入力部を４ビットとしているが任意とする。
【００９６】
（３）実施の形態４においてマルチプレクサ３１４は、桁上げ信号累積回路１４０においてデータバス１０７への入力が制御されている場合は省略できる。
【００９７】
なお、本発明は以上の実施の形態あるいはその変形例に限定されるのではない。以上の実施の形態あるいはその変形例の組み合わせによっても実現できる。また、他の実施の形態よっても実現できることは言うまでもない。
【００９８】
【発明の効果】
以上説明したことから明らかなよう、本発明によれば、複数の符号なしデータの平均値を求める処理の実行時のように、繰り返し加算が実行されるときに発生する桁上がりを比較的簡単な回路により正しく処理するのに適したプロセッサが得られる。
【図面の簡単な説明】
【図１】本発明に係るプロセッサの概略ブロック図。
【図２】図１の装置に使用される演算器の概略ブロック図。
【図３】図１の装置に使用される桁上げ信号累積回路の概略ブロック図。
【図４】図１の装置に使用されるパックトデータレジスタ群の概略ブロック図。
【図５】本発明に係る他のプロセッサで使用される桁上げ信号累積回路の概略ブロック図。
【図６】本発明に係るさらに他のプロセッサで使用され演算器の概略ブロック図。
【図７】本発明に係るさらに他のプロセッサで使用される桁上げ信号累積回路の概略ブロック図。
【符号の説明】
１００，１００’，１００”・・・演算ユニット
２１０・・・書き込みレジスタ選択回路
２２０・・・読み出しレジスタ選択回路
３１０〜３１４・・・マルチプレクサ
４２３・・・書き込みレジスタ選択回路
４２４・・・読み出しレジスタ選択回路
【図１】
0003547316.tif 000002
【図２】
0003547316.tif 000003
【図３】
0003547316.tif 000004
【図４】
0003547316.tif 000005
【図５】
0003547316.tif 000006
【図６】
0003547316.tif 000007
【図７】
0003547316.tif 000008