(57)【要約】【課題】高速な乗算、および加算処理を実行する演算器を提供する。また、乗加算命令が存在しない命令セットに対しても適用できるものとする。【解決手段】データ処理装置に含まれる演算回路を、データＡ及びＢが入力されＡ＊Ｂの計算のための部分信号であるサム信号（１１３）とキャリ信号（１１４）を出力する乗算部（ＥＭＵＬ１）と、前記サム信号と前記キャリ信号を加算しＡ＊Ｂの最終結果を計算する第１加算部（ＥＡＤＤ１）と、データＥ、前記サム信号、前記キャリ信号とを受けてＡ＊ＢにＥを加算した結果を計算する動作が可能な第２加算部（ＥＡＤＤ２）とを有するよう構成する。この演算回路は、選択回路１０４，１０５により乗算（Ａ＊Ｂ）、加算（Ｄ＋Ｅ）、及び乗加算（Ａ＊Ｂ＋Ｅ）の３種の演算を選択して実行可能とされる。この演算回路により乗算命令と加算命令の列に対して乗算―加算のデータ依存処理を高速で行えようになる。また、乗加算計算のための特別の演算器を追加せずに既存の乗算器と加算器の変形で演算回路が実現できるのでチップ面積効率を高めることができる。【選択図】　図１
2004021573.tif 000002
【特許請求の範囲】
【請求項１】
演算回路を有するデータ処理装置であって、
前記演算回路は、
第１データが入力される第１入力ノードと、
第２データが入力される第２入力ノードと、
前記第１及び第２データが入力され、前記第１及び第２データ間の積の計算のための部分信号であるサム信号とキャリ信号を出力する乗算部と、
前記サム信号と前記キャリ信号を加算し、前記第１及び第２データ間の積の結果を計算する第１加算部と、
前記第１加算部の計算結果を出力する第１出力ノードと、
第３データの入力される第３入力ノードと、
前記第３データ、前記サム信号、前記キャリ信号とを受けて前記第１及び第２データ間の積に前記第３データを加算した結果を計算する動作が可能な第２加算部と、
前記第２加算部の計算結果を出力する第２出力ノードとを有するデータ処理装置。
【請求項２】
請求項１において、
前記データ処理装置の命令セットは、２つのデータ間の積を計算して結果を出力する乗算命令と、２つのデータ間の積を計算して結果を出力する乗算命令とを含み、
前記演算回路は、
第４データの入力される第４入力ノードと、
前記サム信号とゼロ信号の何れかを選択して前記第２加算部の入力に供給する第１選択回路と、
前記キャリ信号と前記第４データの何れかを選択して前記第２加算部の入力に供給する第２選択回路とを有し、
前記データ処理装置に前記第３及び第４データの加算のための前記加算命令が入力された場合に、前記第１選択回路はゼロ信号を選択するとともに、前記第２選択回路は前記第４データを選択し、前記第２出力ノードから前記第３及び第４データの加算結果を出力するデータ処理装置。
【請求項３】
請求項２において、
前記データ処理装置に前記第１データと前記第２データの乗算のための前記乗算命令が入力された場合に、前記第１加算部は前記第１出力ノードから前記第１及び第２データの乗算結果を出力するデータ処理装置。
【請求項４】
請求項１において、
前記データ処理装置の命令セットは、２つのデータ間の積を計算して結果を出力する乗算命令と、２つのデータ間の積を計算して結果を出力する乗算命令とを含み、
前記演算回路は、
第４データの入力される第４入力ノードと、
前記サム信号とゼロ信号の何れかを選択して前記第２加算部の入力に供給する第１選択回路と、
前記キャリ信号と前記第４データの何れかを選択して前記第２加算部の入力に供給する第２選択回路とを有し、
前記データ処理装置に、前記第１及び第２データの乗算のための前記乗算命令、及び前記第１及び第２データ間の乗算結果に前記第３データを加算するための前記加算命令が連続して入力された場合に、前記第１選択回路は前記サム信号を選択し、前記第２選択回路は前キャリ信号を選択し、前記第２加算部は前記第２出力ノードから前記第１及び第２データ間の積に前記第３データを加算した結果を出力するデータ処理装置。
【請求項５】
請求項１において、
前記演算回路は、
第４データの入力される第４入力ノードと、
前記サム信号とゼロ信号の何れかを選択して前記第２加算部の入力に供給する第１選択回路と、
前記キャリ信号と前記第４データの何れかを選択して前記第２加算部の入力に供給する第２選択回路とを有し、
前記第１加算部は、前記サム信号と前記キャリ信号の和を計算する第１キャリ伝搬加算器であり、
前記第２加算部は、前記第１及び第２選択回路の出力信号及び前記第４データが入力されるキャリ保存加算器と、前記キャリ保存加算器の出力を受けて前記第２出力ノードに結果を出力する第２キャリ伝搬加算器を含むデータ処理装置。
【請求項６】
請求項１において、
前記データ処理装置の命令セットは、２つのデータ間の積を計算して結果を出力する乗算命令と、２つのデータ間の積を計算して結果を出力する乗算命令と、２つのデータの積の結果に第３のデータを加算して結果を出力する乗加算命令とを含み、
前記演算回路は、前記乗算命令、前記加算命令、及び前記乗加算命令を実行可能とされるデータ処理装置。
【請求項７】
請求項６において、
前記第１加算部は、前記サム信号と前記キャリ信号の和を計算する第１キャリ伝搬加算器を含み、
前記第２加算部は、キャリ保存加算器と、前記キャリ保存加算器の出力を受けて前記第２出力ノードに結果を出力する第２キャリ伝搬加算器を含むデータ処理装置。
【請求項８】
請求項１において、
前記乗算部は、乗算アレイとブースエンコーダを含み、
前記第１加算部は、前記サム信号と前記キャリ信号の和を計算する第１キャリ伝搬加算器を含み、
前記第２加算部は、キャリ保存加算器と、前記キャリ保存加算器の出力を受けて前記第２出力ノードに結果を出力する第２キャリ伝搬加算器とを含むデータ処理装置。
【請求項９】
請求項１において、
前記データ処理装置の命令セットは、２つのデータを加算する加算命令、及び２つのデータを乗算する乗算命令とを含み、
前記データ処理装置は、前記乗算命令に引き続き前記加算命令が入力されているか否かを判定するとともに、前記乗算命令の計算結果を引き続いて実行すべき加算命令が利用するか否かを判定する手段を更に有するデータ処理装置。
【請求項１０】
請求項１において、前記演算回路は、前記データ処理装置に入力される命令に応じて、２入力１出力乗算器、２入力１出力加算器、３入力１出力乗加算器のいずれかとして動作可能なデータ処理装置。
【請求項１１】
請求項１において、前記データ処理装置は、第１レジスタと、第２レジスタと、第３レジスタとを更に有し、
前記データ処理装置は第１命令を受けた場合には、前記第１レジスタと前記第２レジスタのそれぞれのデータの積を前記演算回路で計算して前記第１及び第２レジスタの何れかに格納し、
前記データ処理装置は第２命令を受けた場合には、前記第１レジスタと前記第２レジスタのそれぞれのデータの乗算して、その結果に対する前記第３レジスタのデータを加算しを前記演算回路で計算して前記第１、第２、及び第３レジスタの何れかに１つに格納するデータ処理装置。
【請求項１２】
２つのデータを乗算する乗算命令を命令セットに含むデータ処理装置であって、前記乗算命令を実行するために必要とするレイテンシは、前記乗算命令の後に実行される命令によって、変動するデータ処理装置。
【請求項１３】
請求項１２において、
前記データ処理装置は、２つのデータを加算する加算命令を前記命令セットに更に含み、
前記乗算命令を実行するために必要とするレイテンシは、前記加算命令の実行レイテンシと同じ１とされる場合と、前記加算命令の実行レイテンシの半分の１／２とされる場合を含むデータ処理装置。
【請求項１４】
請求項１２において、前記データ処理装置は前記乗算命令と前記加算命令を実行するための演算回路を有し、
前記演算回路は、
第１及び第２データが入力され、前記第１及び第２データ間の積の計算のための部分信号であるサム信号とキャリ信号を出力する乗算部と、
前記サム信号と前記キャリ信号を加算し、前記第１及び第２データ間の積の結果を計算する第１加算部と、
第３データ、前記サム信号、前記キャリ信号とを受けて前記第１及び第２データ間の積に前記第３データを加算した結果を計算する動作が可能な第２加算部とを有するデータ処理装置。
【請求項１５】
演算回路を有するデータ処理装置であって、
前記演算回路は、
第１データが入力される第１入力ノードと、
第２データが入力される第２入力ノードと、
前記第１及び第２データが入力され、前記第１及び第２データ間の積の計算のための部分信号であるサム信号とキャリ信号を出力する乗算部と、
前記サム信号と前記キャリ信号を加算し、前記第１及び第２データ間の積の結果を計算する第１加算部と、
前記第１加算部の計算結果を出力する第１出力ノードと、
第３データの入力される第３入力ノードと、
第４データの入力される第４入力ノードと、
第２加算部と、
前記第２加算部の計算結果を出力する第２出力ノードとを有し、
前記第２加算部は、前記第３データ、前記サム信号、前記キャリ信号を加算する動作と、前記第３データと前記第４データを加算する動作とが切り替え可能とされるデータ処理装置。
【請求項１６】
請求項１５において、前記演算回路は、前記データ処理装置に入力される命令に応じて、２入力１出力乗算器、２入力１出力加算器、３入力１出力乗加算器のいずれかとして動作可能なデータ処理装置
【請求項１７】
請求項１５において、
前記データ処理装置の命令セットは、２つのデータを加算する加算命令、及び２つのデータを乗算する乗算命令とを含み、
前記データ処理装置は、前記乗算命令に引き続き前記加算命令が入力されているか否かを判定するとともに、前記乗算命令の計算結果を引き続いて実行すべき加算命令が利用するか否かを判定する手段を更に有するデータ処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はディジタル情報処理装置、信号処理装置に関する。更には、信号処理装置に含まれる乗算器及び加算器等に関するものである。
【０００２】
【従来の技術】
この明細書で参照される文献は以下の通りであり、文献はその文献番号によって参照することとする。［文献１］：Ｃｈａｎｄｒａｋａｓａｎｎ他編“Ｄｅｉｇｎ　ｏｆ　Ｈｉｇｈ−Ｐｅｒｆｏｒｍａｎｃｅ　ＭｉｃｒｏｐｒｏｃｅｓｓｏｒＣｉｒｃｕｉｔｓ”、ＩＥＥＥ　Ｐｒｅｓｓ、２０００年、第１８１頁−第２００頁、　［文献２］：特開２００１−９２６３６（英国特許公開２３５５８２３号公報（２００１年５月２日公開））。
【０００３】
［文献１］は、ディジタル情報処理、信号処理で用いられる乗算器及び加算器の各々の要素回路を開示する。乗算器に関しては高速化のために、ｎビット＊ｎビットの乗算での各々のビット積はキャリセーブ加算器で加えられ、最後に２ｎビットのキャリ伝播加算器（ＣＰＡ）で加算される技法が紹介されており、またＢｏｏｔｈアルゴリズムによって加算すべき部分積の数を削減可能であると紹介されている。この乗算器は乗算命令によって活性化される。一方、加算器に関しては、高速化のためのキャリ先見加算器が用いられ、ｎビット＋ｎビットの加算処理をオーダーｌｏｇ（ｎ）の演算時間で処理可能であることが紹介されている。なお、上記の乗算器の中でキャリ伝播加算器は加算器の別な言い方に過ぎないので、キャリ伝播加算器の高速化技法も本加算器の高速化技法に同一になる。この加算器は加算命令によって活性化されるし、またロードストア命令のアドレッシングの中の加算処理という形でも活性化される。
【０００４】
［文献２］は、乗算と加算を組み合わせた、いわゆる乗加算器のハードウェアを開示している。即ち、［文献２］の図３Ａは、ヒューズド乗算・累加ＦＰＵにおいては仮数Ｂと仮数Ｃを部分乗算器に与え、その結果の２つのデータと仮数Ａの合計３つのデータをキャリーセーブ加算器によって加算する構造が示されている。この演算器はＢ＊Ｃ＋Ａの積和演算結果を出力する。
【０００５】
【発明が解決しようとする課題】
乗算および加算はディジタル情報処理、信号処理で頻度が高い処理である。一例として情報処理の中の数値処理でＮ＊Ｎの行列にＮのベクトルを掛ける行列演算は、Ｎの２乗回の乗算と、Ｎ（Ｎ−１）回、（Ｎが大なるときの主要項はいずれもＮの２乗）の加算処理からなる。またディジタル信号処理分野でのＦＩＲ（有限インパルス応答）フィルタ処理はＮ個の入力信号列にＮ個の重み付け係数を掛けた総和の演算になるので、Ｎ回の乗算と、（Ｎ−１）回の加算処理からなる。また、前述の２つの例は、積項を累算する処理になることから、積和演算形式とも呼ばれ、１回の積と１回の和のペア、つまり積和演算を単位演算とみなして、積和演算を繰り返すことによって解が得られる。
【０００６】
本願発明者等は、本願に先立って１チップのマイクロプロセッサ（ＭＰＵ）における乗加算演算の必要性と従来からの命令との整合性及びその具体的な回路の実現方法について検討を行い以下のような課題を見いだした。
【０００７】
即ち、マイクロプロセッサは、乗算命令及び加算命令を有し、それに対応して専用乗算器と専用加算器とを有しているものが多い。しかしながら乗加算命令については、全てのマイクロプロセッサが持つ訳では無く、一部のマイクロプロセッサは、伝統的に乗加算命令を持っていない。この乗加算命令を持たないマイクロプロセッサでは、積和演算が出現した場合には、既にある乗算命令及び加算命令を組み合わせて実行することはできる。しかしながらこの場合には、乗算器と加算器を順次通過することになり、各々に含まれるＮビットのキャリ伝播加算器を２回通ることになるため、演算速度は最小にはならない。乗加算器の専用ハードウェアを用いた場合に比べるとほぼキャリ伝搬加算器１段分の処理時間を余分に費やしてしまう。
【０００８】
このため、マイクロプロセッサの命令体系を拡張して新たに乗加算命令とそれに対応した乗加算器を追加する方法が考えられるが、この場合には（１）既にある、乗算器と加算器とほぼ同様の回路からなる乗加算器を重複して追加することとなり、追加回路のためにチップ面積を無駄に使ってしまう、（２）過去に乗算命令及び加算命令を用いて乗加算を実現してしまったプログラムを動作する際には、乗加算命令でプログラムが書かれていないので乗加算器による演算速度の向上の恩恵が得られない、などの課題が発生する。
【０００９】
更に、専用の乗加算命令を使用する場合には、プログラムが乗算の中間計算結果を利用しない場合には演算時間の短縮の恩恵がえられるが、中間計算結果を利用する場合には演算時間の短縮ができない場合が生ずる。典型的には以下のような計算例においてこのような課題が発生する。即ち、レジスタＲ０−Ｒ１５上で演算するレジスタ演算命令セットを想定して、
（データ＃１）＊（データ＃２）を計算して（データ＃３）とし、
（データ＃３）＋（データ＃４）を計算して（データ＃５）とし、
（データ＃３）＋（データ＃６）を計算して（データ＃７）とする処理を行う場合を考える。この場合に乗加算命令を適切に用いるなら、｛（データ＃１）＊（データ＃２）｝＋（データ＃４）という乗加算処理を行うことになるが、（データ＃５）は得られるが、乗算した時点での（データ＃３）相当が残らないことになってしまう。この問題を回避するには、（データ＃３）を再度乗算するか、あるいは（データ＃５）に｛（データ＃６）−（データ＃４）｝のような差分値を加えて（データ＃７）を得る処理を要する。前者の場合には乗算回数が２倍必要である、後者の場合には減算処理を１回余分に必要となる。
【００１０】
さらに別な回避策として乗加算命令を用いないで、単純な乗算命令と加算命令を利用して乗算結果を得て、その結果に２回加算すれば演算数は余分に発生しないが、乗加算命令による演算時間の短縮も起こらないため、乗加算命令を追加した意義は失われる。
【００１１】
本願発明が解決しようとする課題の代表的なものは以下の通りである。即ち、第１には乗加算演算器を有しない命令セットを持つデータ処理装置に対して、高速な乗加算処理を提供することにある。
【００１２】
【課題を解決するための手段】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば、下記の通りである。すなわち、データ処理装置に含まれる演算回路を、第１及び第２データが入力され前記第１及び第２データ間の積の計算のための部分信号であるサム信号とキャリ信号を出力する乗算部と、前記サム信号と前記キャリ信号を加算し前記第１及び第２データ間の積の結果を計算する第１加算部と、前記第１加算部の計算結果を出力する第１出力ノードと、第３データ、前記サム信号、前記キャリ信号とを受けて前記第１及び第２データ間の積に前記第３データを加算した結果を計算する動作が可能な第２加算部と、前記第２加算部の計算結果を出力する第２出力ノードとを有するよう構成する。この演算回路は、乗算、加算、及び乗加算とを選択して実行可能とされる。
【００１３】
【発明の実施の形態】
以下、本発明に係るデータ処理装置の好適な実施の形態について、添付図面を参照しながら説明する。特に制限されないが、実施例の各ブロックを構成する回路素子は、特に制限されないが、公知のＣＭＯＳ（相補型ＭＯＳトランジスタ）やバイポーラトランジスタ等の半導体集積回路技術によって、単結晶シリコンのような１個の半導体基板上に形成される。
図１は本発明の演算器および、その周辺のデータ処理回路を含むブロック図である。データ処理回路は、順序回路であるフリップフロップやパイプライン動作に必要な追加のフィードバックループである。
１０１は乗算アレイ本体部分ＭＡ、１０２はブースエンコーダＢＥである。１０３、１０７は６４ビットキャリ伝播加算器である。１０４、１０５は２入力のセレクタであり、１０６は６４ビットのフルアダー列である。１０１、１０２は乗算入力信号Ａ（第１入力ノード）、Ｂ（第２入力ノード）の積をキャリ保存で計算して、サム１１３、キャリ１１４を出力する。キャリ伝播加算器１０３に１１３、１１４を入力して、ＡとＢの積を１１５（第１出力ノード）に得る。１０９は３入力セレクタである。
乗算アレイ１０１、ブースエンコーダ１０２でまとめて１クロック処理、キャリ伝播加算器１０３で１クロック処理、フルアダー１０６とキャリ伝播加算器１０７でまとめて１クロック処理を行う。この３つの処理はマイクロプロセッサで言う１ステージ処理に相当する。それを抽象的に乗算部（ＥＭＵＬ１）（１１０）、第１加算部（ＥＡＤＤ１）（１１１）、第２加算部（ＥＡＤＤ２）（１１２）と呼ぶことにする。それらステージの間の動作は後に別のタイミング図を用いて説明する。
乗算部（１１０）、第１加算部（１１１）の組み合わせにより乗算が行うことができる。なお、本例では３２ビット＊３２ビットを計算して６４ビットを出力する。ここで、この明細書では＊を乗算を示す記号として用いる。
第２加算部（１１２）は６４ビット＋６４ビットを計算して６４ビットを出力する。第２加算部（１１２）は、Ｄ＋ＥとＡ＊Ｂ＋Ｅの２通りの演算が可能である。より具体的に説明すると３入力セレクタ１０９が図の中の下側の入力を選択し、２入力のセレクタ１０４、１０５がともに下側の入力を選択すると、１０６に（値ゼロ）＋Ｄ＋Ｅが印加され、第２加算部（１１２）は、Ｄ＋Ｅを計算する。また２入力のセレクタ１０４、１０５がともに上側の入力を選択すると、サム１１３＋キャリ１１４＋Ｅが印加され、ＥＡＤＤ２ブロック（３１２）は、Ａ＊Ｂ＋Ｅを計算する。
本演算器を用い、第２加算部（１１２）がＡ＊Ｂ＋Ｅの演算を行う場合、１つの特徴は、第１加算処理と、第２加算処理を開始することが可能であるという点である。本並列処理により、処理が高速化される。具体的に高速化されるケースは命令セットの定める演算に依存して異なるが以下の説明により理解できるであろう。
図２は乗算アレイ１０１と１０２の説明で、ＭＡ１０１の内部をより詳細に展開したものである。従来技術１の第１９８頁に示されるＢｏｏｔｈの算法を使うことにより、３２＊３２の乗算は人間の筆算のイメージの３２項のデータではなく、その約半分である１７項のデータを加算して、サムとキャリを出力できることが知られている。ここで、２０２−１、２０２−２、．．．、２０２−１５はそれぞれ必要な数のビット数フルアダーであり、１７項をツリー状に加算して、図１のＭＡ１０１の出力信号であるサムとキャリを出力している。なお、２０１はブースセレクタである。ブースセレクタの遅延時間が仮にフルアダーの遅延時間の２倍であるとするならば、この乗算アレイのトータル遅延時間はフルアダーの遅延時間の８倍であることが図から読み取れるであろう。
図３は本演算器を用いたプロセッサＬＳＩの全体ブロック図を示したものである。３０１は命令キャッシュ、３０２は命令デコーダユニットであり、３０２がデコードした命令に基づき、演算器とデータの移動を制御する、３０３は整数部演算器であり、３０４は整数レジスタファイルである。３０５は浮動小数点演算器であり、３０６は浮動小数点レジスタファイルである。３０７はデータキャッシュであり、レジスタファイル３０５、３０６との間のデータの入出力をロードストア命令に応答して行う。３０８はバスインターフェースユニットであり、ＬＳＩ外部との間の入出力を行う。
図１の演算器は３０３の整数部演算器の中に含まれる。図１の他に命令セットの要請に応じてシフト演算器、マルチメディア演算器等が含まれるが、それらの間の配置方法は専門化には特に難しくないので、記載を省略する。
ＬＳＩ全体の中で３０３の整数部演算器は命令デコーダユニット３０２から指示された演算を行うことが主機能である。１つの演算命令に応答して、整数部演算器３０３は整数レジスタファイル３０４から演算に必要なデータを受け取り、演算後に演算結果をデータを整数レジスタファイル３０４に返す。
図３からわかるように本発明の思想を用いた演算器が適用可能なプロセッサＬＳＩは、特殊な構成に限定されていない。一般的なプロセッサに広く適用できることが読み取れるであろう。
図４はプロセッサの命令パイプラインを示したものである。５段パイプライン構成をとり、先のＥＭＵＬ１、ＥＡＤＤ２は第３ステージに、ＥＡＤＤ１は第四ステージにて処理される。
図５―図７は図４のパイプラインに従って、図１の演算ハードウェアが動作する例をステージ単位で説明したものである。いずれも横軸は時間を示す。
図５は１つの乗算命令を実行し、その乗算結果（Ｒ３）を参照する加算命令をパイプライン上の１クロック遅れで実行する場合である。ＥＡＤＤ２ステージの開始時点で乗算処理はＥＭＵＬ１まで終了しており、最終的な乗算結果はまだ得られていない。そのためＥＭＵＬ１の出力であるサム信号、キャリ信号をＥＡＤＤ２にバイパスする。このバイパス処理はセレクタ１０４，　１０５が上側を選択することによって達成される。
図６は１つの乗算命令を実行し、その乗算結果（Ｒ３）を参照する加算命令をパイプライン上の２クロック遅れで実行する場合である。ＥＡＤＤ２ステージの開始時点で乗算処理はＥＡＤＤ１まで終了しており、最終的な乗算結果が得られている。そのためＥＡＤＤ１の出力である乗算結果信号をＥＡＤＤ２にバイパスする。このバイパス処理はセレクタ１０４，　１０５が下側を、セレクタ１０９が３つの入力のうち上から２番目を選択することによって達成される。
図７は別の動作例を示している。１つの乗算命令を実行し、その乗算結果を参照しない加算命令をパイプライン上の１クロック遅れで実行する場合である。乗算結果をバイパスする必要はないので、加算データを入力をレジスタＲ６から読み出しで加算処理は達成される。このバイパス処理はセレクタ１０４，　１０５が下側を、セレクタ１０９が３つの入力のうち上から３目を選択することによって達成される。
積和演算の一般化したニーモニック列を１つ示す。特定の命令セットに依存しないが各々の命令セットに対応させることは容易である。
ＭＵＬ　　Ｒ０，　Ｒ４，　Ｒ８　　　（Ｒ０　＊　Ｒ４　→　Ｒ８）
ＡＤＤ　　Ｒ８，　Ｒ１４，　Ｒ１４　　（Ｒ８　＋　Ｒ１４　→　Ｒ１４）
ＭＵＬ　　Ｒ１，　Ｒ５，　Ｒ９
ＡＤＤ　　Ｒ９，　Ｒ１４，　Ｒ１４
ＭＵＬ　　Ｒ２，　Ｒ６，　Ｒ１０
ＡＤＤ　　Ｒ１０，　Ｒ１４，　Ｒ１４
となる。この命令列により数式　ｘ　＝　ａ　＊　ｂ　＋　ｃ　＊　ｄ　＋　ｅ　＊　ｆが計算できる。命令列からわかるように、乗算結果はすぐ直後で加算処理により用いられている
図８は命令デコードユニット３０２の中に存在し、乗算―加算の依存関係のある命令列を検出する論理回路を示す。サムとキャリをＥＡＤＤ２側にバイパスする判定は１つの乗算命令と、その１クロック遅れでパイプラインを実行する１つの加算命令を検出し、かつ乗算結果を加算命令が使うか否かを判定する論理である。
８０１は命令デコーダの中のデコード組み合わせ論理部でありＤステージに同期して命令をデコードする。８０２，８０３はタイミングをとるための、フリップフロップであり、この２つのフリップフロップ出力はＥ１ステージ同期となる。８０４Ａ、８０４Ｂはレジスタ番号の比較器、８０５は２入力ＯＲゲートであり、論理和を出力する。８０６は３入力ＡＮＤゲートであり、論理積を出力する。８０２は命令デコーダから乗算結果を受け取り、８０３は乗算結果を格納するレジスタ番号を格納する。８０４Ａの下側の入力にＤステージでの演算命令の入力レジスタのうち１つの番号を、８０４Ｂの下側の入力にＤステージでの演算命令の入力レジスタのうちもう１つの番号を、８０６の上から２番目の入力に加算命令のデコード結果を与えることにより、結果として８０６の出力に１つの乗算命令と、その１クロック遅れでパイプラインを実行する１つの加算命令を検出し、かつ乗算結果を加算命令が使うか否かを判定結果を出力することができる。
図９は図５−８で説明したプロセッサの外部仕様（マニュアル）のレイテンシの部分の一部を示している。レイテンシの単位はクロック時間である。乗算命令のレイテンシは１または２となる。１となるのは図６のように乗算結果を加算命令に渡す場合であり、２となるのは乗算結果を加算命令以外に渡す場合である。例えば数式ａ＊ｂ＊ｃを計算するときは、乗算結果をさらに乗算結果に渡すことになり、レイテンシは２になる。
しかしながら、従来技術で説明したように、乗算と加算は乗加算の形で用いられることが一般的なアプリケーションプログラムで、最も多い。頻繁に用いられる、乗算結果を加算命令に渡す場合のレイテンシが（２でなく）１であることは、平均レイテンシをほぼ１に下げられるという効果を持つ。このように本願発明の構成の側面は、乗算命令の実行のレイテンシが乗算命令の後に実行される命令によって変動することによっても特徴的に把握される。
図１０は図３のハードウェアを用いながら、別な命令セットで制御されるプロセッサでのタイミング図の例である。この命令セットでは２つのレジスタの乗算値を第３のレジスタ（例ではＲ３）にセットし、さらに２つのレジスタの乗算値に第４のレジスタを加算したものを第５のレジスタにセットするものである。図３においてＥＭＵＬ１，　ＥＡＤＤ１によって第３のレジスタにセットすべき乗算結果を算出し、同時にＥＭＵＬ１，　ＥＡＤＤ２によって第５のレジスタにセットすべき乗加算結果を算出する。
【００１４】
この演算ではユーザプログラムからは２つの演算が行え、かつ従来の乗加算命令の問題点であった、乗算した時点の中間結果を取り出すことができないという難点が解消されていることが特徴である。
【００１５】
以上の実施例による発明の効果を述べると以下のようになる。
【００１６】
（ａ）本願の演算回路を乗加算命令を命令セットに含まないプロセッサに適用する場合には、第１に乗算命令と加算命令を連続して実行する際に、実行が短縮化されるという効果が存在する。第２に従来命令セットの体系を変更せずに高速化が図れるという効果が存在する。即ち、既存のコンパイル済みのプログラムを実行させても高速化ができる。命令体系を変えて（乗加算命令を追加）高速化する場合には、既存のプログラムをソースから再コンパイルが必要になりそのソフトウェア変更の負担は大きい。第３に乗算と加算の実行の際に、乗算の中間結果が後で再利用できるようになる効果が存在する。本願の演算回路は、元々ある乗算器と加算器を統合したものなので、面積のオーバヘッドを招かないことに注意されたい。
【００１７】
（ｂ）本願の演算回路を乗加算命令を命令セットに含むプロセッサに適用する場合には、第１に乗算、加算、乗加算をまとめて実現できるので演算回路の面積が小さくなる。第２に乗加算の実行の際に、乗算の中間結果が後で再利用できるようになる効果が存在する。
【００１８】
（ｃ）本願の演算回路を、単一の命令で乗算演算と乗加算演算の双方を行うような命令セットを含むプロセッサに適用する場合には、乗算演算と乗加算演算の両方が乗算に関するハードウェアを兼用しつつ、同時に乗加算演算を高速に行えるという効果が存在する。
【００１９】
【発明の効果】
本願発明の代表的な効果の一つは、乗加算演算器を有しない命令セットを持つデータ処理装置に対して、乗加算処理の高速化が図れることにある。
【図面の簡単な説明】
【図１】本発明の演算器および、その周辺のデータ処理回路を含むブロック図である。
【図２】乗算アレイ１０１の内部ブロック図である。
【図３】本演算器を用いたプロセッサＬＳＩの全体ブロック図を示したものである。
【図４】本発明を用いたプロセッサの乗算および加算命令のパイプラインステージ図である。
【図５】動作例。
【図６】動作例。
【図７】動作例。
【図８】乗算、加算の依存命令列を検出する論理。
【図９】外部仕様（マニュアル）のレイテンシ部分の一部。
【図１０】動作例。
【符号の説明】
１０１―乗算アレイ（Ｍｕｌｔｉｐｌｙ　Ａｒｒａｙ：ＭＡ）、１０２−ブースエンコーダ（Ｂｏｏｔｈ　Ｅｎｃｏｄｅｒ：ＢＥ）、１０３、１０７−キャリ伝播加算器、１０４、１０５、１０９−セレクタ、１０６―６４ビットのフルアダー、１０８−フリップフロップ、１１０−ＥＭＵＬ１ステージ、１１１−ＥＡＤＤ１ステージ、１１２−ＥＡＤＤステージ、１１３−サム信号、１１４−キャリ信号、２０１：ブースセレクタ、２０２−１から２０２−１５：フルアダー、３０１―命令キャッシュ、３０２―命令デコードユニット、３０３−整数演算ユニット、３０４―整数レジスタファイル、３０５−浮動小数点演算ユニット、３０６―浮動小数点レジスタファイル、３０７―データキャッシュ、３０８―バスインターフェースユニット
８０１−命令デコーダの組み合わせ論理部分、８０２、８０３−フリップフロップ、８０４Ａ、８０４Ｂ−一致比較器、８０５−２入力ＯＲゲート、８０６−３入力ＡＮＤゲート。
【図１】
2004021573.tif 000003
【図２】
2004021573.tif 000004
【図３】
2004021573.tif 000005
【図４】
2004021573.tif 000006
【図５】
2004021573.tif 000007
【図６】
2004021573.tif 000008
【図７】
2004021573.tif 000009
【図８】
2004021573.tif 000010
【図９】
2004021573.tif 000011
【図１０】
2004021573.tif 000012