(57)【特許請求の範囲】
【請求項１】
それぞれが独立したＭビットの部分データがｎ個含まれるｎ×Ｍビットのデータである、データＸとデータＹとを入力とする演算装置であって、
前記データＸのｎ個の部分データにそれぞれ対応し、前記対応する部分データと、これと同じ位取りを有する前記データＹの部分データとの乗算を行い、その結果を出力する第１から第ｎの乗算器と、
前記第１から第ｎの乗算器にそれぞれ対応し、対応する乗算器の出力を各々シフトすることが可能な第１から第ｎのシフタと、
前記第１から第ｎのシフタの出力を加算して出力する加算器とを備え、
前記第１から第ｎのシフタは、それぞれ、
対応する乗算器の出力に対して、前記第１から第ｎのシフタの出力が互いに重複しない位取りになるようにシフトを行うことと、シフトを行わないこととのうちの一方を、行われるべき演算の種類に応じて選択するものである
ことを特徴とする演算装置。
【請求項２】
それぞれが独立したＭビットの部分データがｎ個含まれるｎ×Ｍビットのデータである、データＸとデータＹとを入力とする演算装置であって、
レジスタと、
前記データＸのｎ個の部分データにそれぞれ対応し、前記対応する部分データと、これと同じ位取りを有する前記データＹの部分データとの乗算を行い、その結果を出力する第１から第ｎの乗算器と、
前記第１から第ｎの乗算器の出力と前記レジスタの出力とを加算して、得られた結果を出力する加算器とを備え、
前記レジスタは、
前記加算器の出力を保持して、演算結果として出力するものであり、
前記加算器は、
前記加算及びその結果の出力を複数回繰り返して行うものである
ことを特徴とする演算装置。
【請求項３】
それぞれが独立したＭビットの部分データがｎ個含まれるｎ×Ｍビットのデータである、データＸとデータＹとを入力とする演算装置であって、
レジスタと、
前記データＸのｎ個の部分データにそれぞれ対応し、前記対応する部分データと、これと同じ位取りを有する前記データＹの部分データとの乗算を行い、その結果を出力する第１から第ｎの乗算器と、
前記第１から第ｎの乗算器にそれぞれ対応し、対応する乗算器の出力を各々シフトすることが可能な第１から第ｎのシフタと、
前記第１から第ｎのシフタの出力と前記レジスタの出力とを加算して、得られた結果を出力する加算器とを備え、
前記レジスタは、
前記加算器の出力を保持して、演算結果として出力するものであり、
前記加算器は、
前記加算及びその結果の出力を複数回繰り返して行うものであり、
前記第１から第ｎのシフタは、それぞれ、
対応する乗算器の出力に対して、前記第１から第ｎのシフタの出力が互いに重複しない位取りになるようにシフトを行うことと、シフトを行わないこととのうちの一方を、行われるべき演算の種類に応じて選択するものである
ことを特徴とする演算装置。
【請求項４】
２Ｍビットのデータである、データＸとデータＹとを入力とする演算装置であって、
前記データＸの上位Ｍビットを入力としデコードを行う第１のデコーダと、
前記データＸの下位Ｍビットを入力としデコードを行う第２のデコーダと、
前記データＹの上位Ｍビットと下位Ｍビットとのうちの一方を選択する第１及び第２のセレクタと、
前記第１のデコーダの出力データと前記第１のセレクタの出力データとの間の部分積を生成する第１の部分積生成器と、
前記第２のデコーダの出力データと前記第２のセレクタの出力データとの間の部分積を生成する第２の部分積生成器と、
前記第１の部分積生成器により生成された部分積を加算する第１の全加算器と、
前記第２の部分積生成器により生成された部分積を加算する第２の全加算器と、
前記第１及び第２の全加算器の出力データを入力としてデータ拡張及びデータシフトを実行することが可能なデータ拡張シフト器と、
第３のセレクタと、
第４のセレクタと、
前記データ拡張シフト器の出力データ、並びに前記第３及び第４のセレクタの出力データを入力として全加算を行い、中間データとして得られたキャリーと和とを出力する第３の全加算器と、
前記キャリーを保持する第１のレジスタと、
前記和を保持する第２のレジスタと、
前記第１のレジスタに保持されたデータと前記第２のレジスタに保持されたデータとを入力として桁上げ伝搬加算を行い、得られた結果を出力する桁上げ伝搬加算器と、
前記桁上げ伝搬加算器の出力を保持して、演算結果として出力する第３のレジスタとを備え、
前記第３のセレクタは、
前記第３のレジスタに保持されたデータとゼロデータとのうちの一方を選択的に出力するものであり、
前記第４のセレクタは、
前記桁上げ伝搬加算器の出力データとゼロデータとのうちの一方を選択的に出力するものであり、
前記データ拡張シフト器は、
前記第１及び第２の全加算器の出力に対して、前記第１の全加算器の出力と前記第２の全加算器の出力とが互いに重複しない位取りになるようにシフトを行うことと、シフトを行わないこととのうちの一方を、行われるべき演算の種類に応じて選択するものである
ことを特徴とする演算装置。
【発明の詳細な説明】
【０００１】
[技術分野]
本発明は、信号処理で多用される乗算、積和演算を高速に実行する演算装置及び演算方法に関する。
【０００２】
[背景技術]
従来、マルチメディア・データ処理は、マイクロプロセサと専用ＬＳＩとで処理を行なっていた。しかし、近年のマイクロプロセサの飛躍的な性能向上により、一部のマルチメディア・データ処理をマイクロプロセサで実行できるようになった。この性能向上の一つの要因として、レジスタ分割演算の利用がある。また、画像処理、音声処理等では、配列データを入力として、１つの累積データを求める演算が多用されている。
【０００３】
図１２に従来のレジスタ分割積和演算を実行する演算装置の構成図を示す。
【０００４】
同図において、１０５は３２ビットの累積データＺＵを上位３２ビットに保持し、３２ビットの累積データＺＬを下位３２ビットに保持するレジスタである。１０１は３２ビットの入力データＸの上位１６ビット（以下ＸＵ）と３２ビットの入力データＹの上位１６ビット（以下ＹＵ）を入力として乗算を実行し、３２ビットの乗算結果を出力する乗算器である。１０２は入力データＸの下位１６ビット（以下ＸＬ）と入力データＹの下位１６ビット（以下ＹＬ）を入力として乗算を実行し、３２ビットの乗算結果を出力する乗算器である。１０３は乗算器１０１の出力データとレジスタ１０５の上位３２ビットに保持されたデータＺＵを加算し、３２ビットの加算結果を出力する加算器である。１０４は乗算器１０２の出力データとレジスタ１０５の下位３２ビットに保持されたデータＺＬを加算し、３２ビットの加算結果を出力する加算器である。加算器１０３の出力データはレジスタ１０５の上位３２ビットに保持され、加算器１０４の出力データはレジスタ１０５の下位３２ビットに保持される。
【０００５】
以上のように構成された演算装置において、乗算器１０１は乗算ＸＵ・ＹＵを実行し、加算器１０３は乗算器１０１の乗算結果とレジスタ１０５の上位３２ビットに保持されたＺＵを加算し、レジスタ１０５は加算器１０３の出力である積和演算ＸＵ・ＹＵ＋ＺＵの結果を上位３２ビットに保持する。
【０００６】
同様に、乗算器１０２は乗算ＸＬ・ＹＬを実行し、加算器１０４は乗算器１０２の乗算結果とレジスタ１０５の下位３２ビットに保持されたＺＬを加算し、レジスタ１０５は加算器１０４の出力である積和演算ＸＬ・ＹＬ＋ＺＬの結果を下位３２ビットに保持する。
【０００７】
図１３で示す配列データを、ｉをｉ回目のデータ入力として、ｉを０からＮ-１に変化させながら演算装置の入力Ｘ及びＹに与え、積和演算をＮ回実行した場合、レジスタ１０５の上位３２ビットには(x0・y0＋x2・y2＋…＋x2n-2・y2n-2)の演算結果が保持され、レジスタ１０５の下位３２ビットには(x1・y1＋x3・y3＋…＋x2n-1・y2n-1)の演算結果が保持される。
【０００８】
−解決課題−
しかしながら、上記の従来の演算装置では、(x0・y0＋x1・y1＋x2・y2＋…＋x2n-2・y2n-2＋x2n-1・y2n-1)を求める場合、積和演算をＮ回実行した後、レジスタ１０５の上位３２ビットに格納された(x0・y0＋x2・y2＋…＋x2n-2・y2n-2)の演算結果とレジスタ１０５の下位３２ビットに格納された(x1・y1＋x3・y3＋…＋x2n-1・y2n-1)の演算結果を加算しなければならなかった。
【０００９】
この加算においては、レジスタ１０５に保持されたデータの上位３２ビットだけを他のレジスタへ転送し、レジスタ１０５に保持されたデータの下位ビットだけを他(又は同)レジスタへ転送し、転送されたそれぞれのデータを加算する処理が必要であった。
【００１０】
以上のように、従来の演算装置では、複数の分割された入力データから１つの累積演算結果を求める場合、積和演算の他に、データ転送、データ加算が必要であり、処理サイクルが大きくなるという問題があった。
【００１１】
本発明は、複数の分割された入力データから１つの累積演算結果を得る場合でも、データ転送、データ加算を必要としない演算装置を提供することを目的とする。
【００１２】
[発明の開示]
上記課題を解決するために、請求項１の発明の演算装置は、それぞれが独立したＭビットの部分データがｎ個含まれるｎ×Ｍビットのデータである、データＸとデータＹとを入力とする演算装置であって、前記データＸのｎ個の部分データにそれぞれ対応し、前記対応する部分データと、これと同じ位取りを有する前記データＹの部分データとの乗算を行い、その結果を出力する第１から第ｎの乗算器と、前記第１から第ｎの乗算器にそれぞれ対応し、対応する乗算器の出力を各々シフトすることが可能な第１から第ｎのシフタと、前記第１から第ｎのシフタの出力を加算して出力する加算器とを備え、前記第１から第ｎのシフタは、それぞれ、対応する乗算器の出力に対して、前記第１から第ｎのシフタの出力が互いに重複しない位取りになるようにシフトを行うことと、シフトを行わないこととのうちの一方を、行われるべき演算の種類に応じて選択するものである。
【００１３】
上記構成により、ステップ数を削減した積和演算を実行することが可能となる。また、シフタの制御を切り替えることにより、複数の乗算を並列に実行することも可能となる。
【００１４】
請求項２の発明は、それぞれが独立したＭビットの部分データがｎ個含まれるｎ×Ｍビットのデータである、データＸとデータＹとを入力とする演算装置であって、レジスタと、前記データＸのｎ個の部分データにそれぞれ対応し、前記対応する部分データと、これと同じ位取りを有する前記データＹの部分データとの乗算を行い、その結果を出力する第１から第ｎの乗算器と、前記第１から第ｎの乗算器の出力と前記レジスタの出力とを加算して、得られた結果を出力する加算器とを備え、前記レジスタは、前記加算器の出力を保持して、演算結果として出力するものであり、前記加算器は、前記加算及びその結果の出力を複数回繰り返して行うものである。
【００１５】
上記構成により、多入力加算器は入力数が増えても回路規模の増加を比較的抑えることが可能なので、積和演算を回路規模の増大を抑えて実現することが可能となる。
【００１６】
請求項３の発明は、それぞれが独立したＭビットの部分データがｎ個含まれるｎ×Ｍビットのデータである、データＸとデータＹとを入力とする演算装置であって、レジスタと、前記データＸのｎ個の部分データにそれぞれ対応し、前記対応する部分データと、これと同じ位取りを有する前記データＹの部分データとの乗算を行い、その結果を出力する第１から第ｎの乗算器と、前記第１から第ｎの乗算器にそれぞれ対応し、対応する乗算器の出力を各々シフトすることが可能な第１から第ｎのシフタと、前記第１から第ｎのシフタの出力と前記レジスタの出力とを加算して、得られた結果を出力する加算器とを備え、前記レジスタは、前記加算器の出力を保持して、演算結果として出力するものであり、前記加算器は、前記加算及びその結果の出力を複数回繰り返して行うものであり、前記第１から第ｎのシフタは、それぞれ、対応する乗算器の出力に対して、前記第１から第ｎのシフタの出力が互いに重複しない位取りになるようにシフトを行うことと、シフトを行わないこととのうちの一方を、行われるべき演算の種類に応じて選択するものである。
【００１７】
上記構成により、ステップ数を削減した累積積和演算を実行することが可能となる。また、シフタの制御を切り替えることにより、複数の累積積和演算を並列に実行することが可能となる。
【００１８】
請求項４の発明は、２Ｍビットのデータである、データＸとデータＹとを入力とする演算装置であって、前記データＸの上位Ｍビットを入力としデコードを行う第１のデコーダと、前記データＸの下位Ｍビットを入力としデコードを行う第２のデコーダと、前記データＹの上位Ｍビットと下位Ｍビットとのうちの一方を選択する第１及び第２のセレクタと、前記第１のデコーダの出力データと前記第１のセレクタの出力データとの間の部分積を生成する第１の部分積生成器と、前記第２のデコーダの出力データと前記第２のセレクタの出力データとの間の部分積を生成する第２の部分積生成器と、前記第１の部分積生成器により生成された部分積を加算する第１の全加算器と、前記第２の部分積生成器により生成された部分積を加算する第２の全加算器と、前記第１及び第２の全加算器の出力データを入力としてデータ拡張及びデータシフトを実行することが可能なデータ拡張シフト器と、第３のセレクタと、第４のセレクタと、前記データ拡張シフト器の出力データ、並びに前記第３及び第４のセレクタの出力データを入力として全加算を行い、中間データとして得られたキャリーと和とを出力する第３の全加算器と、前記キャリーを保持する第１のレジスタと、前記和を保持する第２のレジスタと、前記第１のレジスタに保持されたデータと前記第２のレジスタに保持されたデータとを入力として桁上げ伝搬加算を行い、得られた結果を出力する桁上げ伝搬加算器と、前記桁上げ伝搬加算器の出力を保持して、演算結果として出力する第３のレジスタとを備え、前記第３のセレクタは、前記第３のレジスタに保持されたデータとゼロデータとのうちの一方を選択的に出力するものであり、前記第４のセレクタは、前記桁上げ伝搬加算器の出力データとゼロデータとのうちの一方を選択的に出力するものであり、前記データ拡張シフト器は、前記第１及び第２の全加算器の出力に対して、前記第１の全加算器の出力と前記第２の全加算器の出力とが互いに重複しない位取りになるようにシフトを行うことと、シフトを行わないこととのうちの一方を、行われるべき演算の種類に応じて選択するものである。
【００１９】
上記構成により、ステップ数の少ない累積積和演算を回路規模を削減して行うことが可能となる。また、シフタの制御を切り替えることにより、複数の累積積和演算を並列に演算したり、乗算器の入力ビット数以上のビット数を有する被乗算の乗算を回路規模を削減して行うことが可能となる。
【００２０】
[発明を実施するための最良の形態]
以下、本発明の実施の形態について、図を用いて説明する。
【００２１】
図１は本発明の一実施の形態に係る演算装置の概略構成を示したものである。図１において、ＸとＹはそれぞれが独立した１６ビットのデータ２個から成る３２ビットの入力データ、Ｚは６４ビットの累積データである。ＳとＣは演算におけるビット毎の和とキャリーの各々を集めた６４ビットの中間データである。中間データをＳ，Ｃを用いるのは、加算を繰り返し行う場合に、毎回全ビットの和を求めるより、各ビット単位の和とキャリーを求めて最後に全ビットの加算結果を求めた方が加算効率が良いからである。５１１、５１２はブースのデコーダであり、それぞれＸＵ、ＸＬをデコードし、その結果を出力する。５２１、５２２は、ＹＵ又はＹＬを選択し出力するセレクタである。５３１は、第１のデコーダ５１１の出力データと第１のセレクタ５２１で選択されたデータを入力として、乗算における部分積を生成し、その部分積を出力する部分積生成器である。５３２は、第２のデコーダ５１２の出力データと第２のセレクタ５２２で選択されたデータを入力として、乗算における部分積を生成し、その部分積を出力する部分積生成器である。５４１、５４２は、それぞれ第１、第２の部分積生成器５３１、５３２で生成された部分積を全加算し、その結果を出力する全加算器である。５５は、第１、第２の全加算器５４１、５４２の出力データを入力として、データ拡張及びデータシフトを実行し、その結果を出力するデータ拡張シフト器である。また、５２３は、″０″と第３のレジスタ５９に保持されたデータＺとを選択し出力する第３のセレクタであり、５２４は、″０″と桁上げ伝搬加算器５８の出力Ｓ＋Ｃを選択し出力する第４のセレクタである。５６は、データ拡張シフト器５５で拡張及びシフトされたデータと第３、第４のセレクタ５２３、５２４で選択されたデータを入力として全加算を実行し、６４ビット中間データＣとＳを出力する全加算器である。５７１、５７２は、第３の全加算器５６の出力であるデータＣとデータＳを保持するレジスタである。５８は、第１、第２のレジスタ５７１、５７２に保持されたデータＣとデータＳを入力として、桁上げ伝搬加算を実行し、その結果Ｓ＋Ｃを出力する桁上げ伝搬加算器である。５９は、桁上げ伝搬加算器５８の出力を保持するレジスタである。
【００２２】
図２にデータ拡張シフト器５５の詳細な構成を示す。同図において、６１はデータ拡張器６１１〜６１４で構成され、入力データについて符号拡張又はゼロ拡張を実行し、その結果を出力するデータ拡張部である。６２は、データシフタ６２１〜６２４で構成され、データ拡張部の出力データを入力として、データシフトを実行し、その結果を出力するデータシフト部である。同図において、ＳＦＴ１．Ｏ〜ＳＦＴ４．Ｏは、それぞれデータシフタ６２１〜６２４の出力データである。
【００２３】
次に、図３に第３の全加算器５６の詳細な構成を示す。同図において、７２は、データシフタ６２１〜６２４の出力データＳＦＴ１．Ｏ〜ＳＦＴ４．Ｏの下位３２ビットと第３のセレクタ５２３の出力データＳＥＬ１．Ｏの下位３２ビットと第４のセレクタ５２４の出力データＳＥＬ２．Ｏの下位３２ビットを入力として、全加算を実行する全加算器である。７３は、第４の全加算器７２の桁溢れ信号又は″０″を選択し、その結果を出力するセレクタである。第５のセレクタ７３は、制御信号ＣＴＲＬ５０が″Ｈ″の時に第４の全加算器７２の桁溢れ信号を選択し、″Ｌ″の時に″０″を選択し、第５の全加算器７１へ出力する。７１は、データシフタ６２１〜６２４の出力データＳＦＴ１．Ｏ〜ＳＦＴ４．Ｏの上位３２ビットと第３のセレクタ５２３の出力データＳＥＬ１．Ｏの上位３２ビットと第４のセレクタ５２４の出力データＳＥＬ２．Ｏの上位３２ビット及び第５のセレクタ７３の出力データを入力として、全加算を実行する全加算器である。図３において、ＣＵとＳＵは第５の全加算器７１の出力データであり、ＣＬとＳＬは第４の全加算器７２の出力データである。
【００２４】
次に、図４に桁上げ伝搬加算器５８の詳細な構成を示す。同図において、８２は、第１、第２のレジスタ５７１、５７２の下位３２ビットに保持されたＣＬとＳＬを入力として桁上げ伝搬加算し、その結果出力する桁上げ伝搬加算器である。８３は、桁上げ伝搬加算器８２の桁溢れ信号又は″０″を選択し、その結果を出力するセレクタである。第６のセレクタ８３は、制御信号ＣＴＲＬ５０が″Ｈ″の時に桁上げ伝搬加算器８２の桁溢れ信号を選択し、″Ｌ″の時に″０″を選択し、桁上げ伝搬加算器８１へ出力する。８１は、第１、第２のレジスタ５７１、５７２の上位３２ビットに保持されたＣＵとＳＵと第６のセレクタ８３の出力データを入力として桁上げ伝搬加算し、その結果を出力する桁上げ伝搬加算器である。
【００２５】
以上のように構成された演算装置において、以下その動作について説明する。
【００２６】
（１）２つに分割された入力データから１つの独立した累積データを得る演算について、以下その動作について説明する。以下、図１３に示した配列データを入力として(x0・y0＋x1・y1＋x2・y2＋…＋x2n-2・y2n-2＋x2n-1・y2n-1)を求める演算について説明する。ここで説明の便宜上、演算は符号付き積和演算とする。この時、制御信号ＣＴＲＬ５０は″Ｈ″として演算を実行する。
【００２７】
図１において、１サイクル目、第１のセレクタ５２１はＹＵを選択し、第２のセレクタ５２２はＹＬを選択するので、第１の部分積生成器５３１は乗算ＸＵ・ＹＵを求めるための部分積を生成し、第２の部分積生成器５３２は乗算ＸＬ・ＹＬを求めるための部分積を生成する。第１の全加算器５４１は、第１の部分積生成器５３１で生成された部分積を全加算し、乗算ＸＵ・ＹＵにおける２つの３２ビット中間データを出力する。同様に第２の全加算器５４２は、乗算ＸＬ・ＹＬにおける２つの３２ビット中間データを出力する。
【００２８】
第１の全加算器５４１で出力された２つの３２ビット中間データは、データ拡張シフト器５５のデータ拡張器６１１、６１２へ入力され、６４ビットへ符号拡張される。データ拡張器６１１、６１２で符号拡張されたデータは、データシフタ６２１、６２２へ入力される。データシフタ６２１、６２２はデータシフトを行なわず、乗算ＸＵ・ＹＵにおける２つの６４ビット中間データを出力する。
【００２９】
同様に、第２の全加算器５４２で出力された２つの３２ビット中間データは、データ拡張シフト器５５のデータ拡張器６１３、６１４へ入力され、６４ビットへ符号拡張される。データ拡張器６１３、６１４で符号拡張されたデータは、データシフタ６２３、６２４へ入力される。データシフタ６２３、６２４はデータシフトを行なわず、演算ＸＬ・ＹＬにおける６４ビット中間データを出力する。
【００３０】
第４のセレクタ５２４は″０″を選択し、第３のセレクタ５２３は第３のレジスタ５９に保持された６４ビットデータＺを選択し、第３の全加算器５６へ出力する。
【００３１】
第３の全加算器５６は、データ拡張シフト器の出力ＳＦＴ１．Ｏ〜ＳＦＴ４．Ｏと第３、第４のセレクタ５２３、５２４の出力ＳＥＬ１．Ｏ、ＳＥＬ２．Ｏを入力として、全加算を実行する。この時、制御信号ＣＴＲＬ５０は″Ｈ″なので、第４の全加算器７２の桁溢れ信号が第５の全加算器７１へ入力され、６４ビット全加算において、３１ビット目から３２ビット目へ桁溢れが伝搬する。
【００３２】
したがって、第３の全加算器５６は図５に示すように、積和演算（ＸＵ・ＹＵ＋ＸＬ・ＹＬ＋Ｚ）における２つの６４ビット中間データＣとＳを出力する。
【００３３】
６４ビット中間データＣとＳは、第１、第２のレジスタ５７１、５７２にそれぞれ格納される。
【００３４】
２サイクル目、桁上げ伝搬加算器５８は、第１、第２のレジスタ５７１、５７２に保持された２つの６４ビット中間データＣとＳとを入力として、桁上げ伝搬加算を実行する。この時、制御信号ＣＴＲＬ５０は″Ｈ″なので、桁上げ伝搬加算器８２の桁溢れ信号が桁上げ伝搬加算器８１へ入力され、６４ビット桁上げ伝搬加算において、３１ビット目から３２ビット目へ桁溢れ信号が伝搬する。
【００３５】
したがって、桁上げ伝搬加算器５８は図５に示すように、積和演算（ＸＵ・ＹＵ＋ＸＬ・ＹＬ＋Ｚ）の結果を出力する。第３のレジスタ５９は、桁上げ伝搬加算器５８で出力されたデータを保持する。
【００３６】
以上のように、演算装置は、１６ビットデータ２個から成る３２ビットデータＸとＹを入力として積和演算を実行し、図６に示すように２サイクルで１つの６４ビット累積データを求めることができる。
【００３７】
したがって、演算装置は、図１３に示した配列データを入力として積和演算をＮ回実行しただけで、(x0・y0＋x1・y1＋x2・y2＋…＋x2n-2・y2n-2＋x2n-1・y2n-1)を求めることができ、従来の演算装置で必要であった、データ転送、データ加算を必要としない。
【００３８】
（２）２つに分割された入力データから、２つの独立した累積データを得る演算について、以下その動作について説明する。以下、１６ビットデータ２個から成る３２ビットデータＸとＹを入力として演算を実行し、図８に示すように２サイクルで、２つの３２ビットの累積データを求める場合を示す。ここで説明の便宜上、演算は符号付きデュアル積和演算とする。この時、制御信号ＣＴＲＬ５０は″Ｌ″として演算を実行する。
【００３９】
図１において、１サイクル目、第１のセレクタ５２１はＹＵを選択し、第２のセレクタ５２２はＹＬを選択するので、第１の部分積生成器５３１は乗算ＸＵ・ＹＵを求めるための部分積を生成し、第２の部分積生成器５３２は乗算ＸＬ・ＹＬを求めるための部分積を生成する。第１の全加算器５４１は、第１の部分積生成器５３１で生成された部分積を全加算し、乗算ＸＵ・ＹＵにおける２つの３２ビット中間データを出力する。同様に第２の全加算器５４２は、乗算ＸＬ・ＹＬにおける２つの３２ビット中間データを出力する。
【００４０】
第１の全加算器５４１で出力された２つの３２ビット中間データは、データ拡張シフト器５５のデータ拡張器６１１、６１２へ入力され、６４ビットへゼロ拡張される。データ拡張器６１１、６１２でゼロ拡張されたデータは、データシフタ６２１、６２２へ入力される。データシフタ６２１、６２２は３２ビット左シフトを実行し、演算（ＸＵ・ＹＵ）＜＜３２における２つの６４ビット中間データを出力する。
【００４１】
同様に、第２の全加算器５４２で出力された２つの３２ビット中間データは、データ拡張シフト器５５のデータ拡張器６１３、６１４へ入力され、６４ビットへゼロ拡張される。データ拡張器６１３、６１４でゼロ拡張されたデータは、データシフタ６２３、６２４へ入力される。データシフタ６２３、６２４はデータシフトを行なわず、演算ＸＬ・ＹＬにおける２つの６４ビット中間データを出力する。
【００４２】
第４のセレクタ５２４は″０″を選択し、第３のセレクタ５２３は第３のレジスタ５９に保持された６４ビットデータＺを選択し、第３の全加算器５６へ出力する。
【００４３】
第３の全加算器５６は、データ拡張シフト器５５の出力ＳＦＴ１．Ｏ〜ＳＦＴ４．Ｏと第３、第４のセレクタ５２３、５２４の出力ＳＥＬ１．Ｏ、ＳＥＬ２．Ｏとを入力として、全加算を実行する。この時、制御信号ＣＴＲＬ５０は″Ｌ″なので、″０″が第５の全加算器７１へ入力され、６４ビット全加算において、３１ビット目から３２ビット目へ桁溢れが伝搬しない。
【００４４】
したがって、第３の全加算器５６は図７に示すように、上位３２ビットが演算ＸＵ・ＹＵ＋ＺＵ、下位３２ビットが演算ＸＬ・ＹＬ＋ＺＬを表す中間データＣとＳを出力する。６４ビットの中間データＣとＳは、第１、第２のレジスタ５７１、５７２にそれぞれ格納される。
【００４５】
２サイクル目、桁上げ伝搬加算器５８は、第１、第２のレジスタ５７１、５７２に保持された２つの６４ビットの中間データＣとＳとを入力として、桁上げ伝搬加算を実行する。この時、制御信号ＣＴＲＬ５０は″Ｌ″なので、″０″が桁上げ伝搬加算器８１へ入力され、６４ビット桁上げ伝搬加算において、３１ビット目から３２ビット目へ桁溢れ信号が伝搬しない。
【００４６】
したがって、桁上げ伝搬加算器５８は図７に示すように、上位３２ビットを演算ＸＵ・ＹＵ＋ＺＵの結果、下位３２ビットを演算ＸＬ・ＹＬ＋ＺＬの結果として出力する。第３のレジスタ５９は、桁上げ伝搬加算器５８で出力されたデータを保持する。
【００４７】
以上のように、演算装置は、１６ビットデータ２個から成る３２ビットデータＸとＹを入力として演算を実行し、図８に示すように２サイクルで、２つの３２ビットの累積データを求めることができる。
【００４８】
（３）入力データが分割されていない場合の演算について、以下その動作について説明する。以下、３２ビットデータＸとＹを入力として乗算を実行し、６４ビットの乗算結果を求める場合を示す。ここで説明の便宜上、演算は符号付乗算演算とする。この時、制御信号ＣＴＲＬ５０は″Ｈ″として演算を実行する。
【００４９】
図１において、１サイクル目、第１のセレクタ５２１はＹＵを選択し、第２のセレクタ５２２はＹＬを選択するので、第１の部分積生成器５３１は乗算ＸＵ・ＹＵを求めるための部分積を生成し、第２の部分積生成器５３２は乗算ＸＬ・ＹＬを求めるための部分積を生成する。第１の全加算器５４１は、第１の部分積生成器５３１で生成された部分積を全加算し、乗算ＸＵ・ＹＵにおける２つの３２ビット中間データを出力する。同様に第２の全加算器５４２は、乗算ＸＬ・ＹＬにおける２つの３２ビット中間データを出力する。
【００５０】
第１の全加算器５４１で出力された２つの３２ビット中間データは、データ拡張シフト器５５のデータ拡張器６１１、６１２へ入力され、６４ビットへ符号拡張される。データ拡張器６１１、６１２で符号拡張されたデータは、データシフタ６２１、６２２へ入力される。データシフタ６２１、６２２は３２ビット算術左シフトを実行し、乗算（ＸＵ・ＹＵ）＜＜３２における２つの６４ビット中間データを出力する。
【００５１】
同様に、第２の全加算器５４２で出力された２つの３２ビット中間データは、データ拡張シフト器５５のデータ拡張器６１３、６１４へ入力され、６４ビットへ符号拡張される。データ拡張器６１３、６１４で符号拡張されたデータは、データシフタ６２３、６２４へ入力される。データシフタ６２３、６２４はデータシフトを行なわず、演算ＸＬ・ＹＬにおける２つの６４ビット中間データを出力する。
【００５２】
また、第３、第４のセレクタ５２３、５２４は″０″を選択し、第３の全加算器５６へ出力する。
【００５３】
第３の全加算器５６は、データ拡張シフト器５５の出力ＳＦＴ１．Ｏ〜ＳＦＴ４．Ｏと第３、第４のセレクタ５２３、５２４の出力ＳＥＬ１．Ｏ、ＳＥＬ２．Ｏを入力として、全加算を実行する。この時、制御信号ＣＴＲＬ５０は″Ｈ″なので、第４の全加算器７２の桁溢れ信号が第５の全加算器７１へ入力され、６４ビット全加算において、３１ビット目から３２ビット目へ桁溢れが伝搬する。
【００５４】
したがって、第３の全加算器５６は図９に示すように、積和演算（（（ＸＵ・ＹＵ）＜＜３２）＋ＸＬ・ＹＬ）における２つの６４ビット中間データＣとＳを出力する。
【００５５】
６４ビット中間データＣとＳは、第１、第２のレジスタ５７１、５７２にそれぞれ格納される。
【００５６】
２サイクル目、桁上げ伝搬加算器５８は、第１、第２のレジスタ５７１、５７２に格納された２つの６４ビット中間データＣとＳとを入力として、桁上げ伝搬加算を実行する。この時、制御信号ＣＴＲＬ５０は″Ｈ″なので、桁上げ伝搬加算器８２の桁溢れ信号が桁上げ伝搬加算器８１へ入力され、６４ビット桁上げ伝搬加算において、３１ビット目から３２ビット目へ桁溢れ信号が伝搬する。
【００５７】
したがって、桁上げ伝搬加算器５８は図９に示すように、積和演算（（（ＸＵ・ＹＵ）＜＜３２）＋ＸＬ・ＹＬ）の結果を出力する。
【００５８】
また、第１のセレクタ５２１はＹＬを選択し、第２のセレクタ５２２はＹＵを選択するので、第１の部分積生成器５３１は乗算ＸＵ・ＹＬを求めるための部分積を生成し、第２の部分積生成器５３２は乗算ＸＬ・ＹＵを求めるための部分積を生成する。第１の全加算器５４１は、第１の部分積生成器５３１で生成された部分積を全加算し、乗算ＸＵ・ＹＬにおける２つの３２ビット中間データを出力する。同様に第２の全加算器５４２は、乗算ＸＬ・ＹＵにおける２つの３２ビット中間データを出力する。
【００５９】
第１の全加算器５４１で出力された２つの３２ビット中間データは、データ拡張シフト器５５のデータ拡張器６１１、６１２へ入力され、６４ビットへ符号拡張される。データ拡張器６１１、６１２で符号拡張されたデータは、データシフタ６２１、６２２へ入力される。データシフタ６２１、６２２は１６ビット左シフトを実行し、乗算（ＸＵ・ＹＬ）＜＜１６における２つの６４ビット中間データを出力する。
【００６０】
同様に、第２の全加算器５４２で出力された２つの３２ビット中間データは、データ拡張シフト器５５のデータ拡張器６１３、６１４へ入力され、６４ビットへ符号拡張される。データ拡張器６１３、６１４で符号拡張されたデータは、データシフタ６２３、６２４へ入力される。データシフタ６２３、６２４は１６ビット左シフトを実行し、演算（ＸＬ・ＹＵ）＜＜１６における２つの６４ビット中間データを出力する。
【００６１】
第４のセレクタ５２４は桁上げ伝搬加算器５８の出力を選択し、第３のセレクタ５２３は″０″を選択し、第３の全加算器５６へ出力する。
【００６２】
第３の全加算器５６は、データ拡張シフト器の出力ＳＦＴ１．Ｏ〜ＳＦＴ４．Ｏと第３、第４のセレクタ５２３、５２４の出力ＳＥＬ１．Ｏ、ＳＥＬ２．Ｏを入力として、全加算を実行する。この時、制御信号ＣＴＲＬ５０は″Ｈ″なので、第４の全加算器７２の桁溢れ信号が第５の全加算器７１へ入力され、６４ビット全加算において、３１ビット目から３２ビット目へ桁溢れが伝搬する。
【００６３】
したがって、第３の全加算器５６は図９に示すように、演算（（（ＸＵ・ＹＵ）＜＜３２）＋ＸＬ・ＹＬ）＋（（（ＸＵ・ＹＬ）＜＜１６）＋（（ＸＬ・ＹＵ）＜＜１６））における２つの６４ビット中間データＣとＳを出力する。６４ビット中間データＣとＳは、第１、第２のレジスタ５７１、５７２にそれぞれ格納される。
【００６４】
３サイクル目、桁上げ伝搬加算器５８は、第１、第２のレジスタ５７１、５７２に格納された２つの６４ビット中間データＣとＳとを入力として、桁上げ伝搬加算を実行する。この時、制御信号ＣＴＲＬ５０は″Ｈ″なので、桁上げ伝搬加算器８２の桁溢れ信号が桁上げ伝搬加算器８１へ入力され、６４ビット桁上げ伝搬加算において、３１ビット目から３２ビット目へ桁溢れ信号が伝搬する。
【００６５】
したがって、桁上げ伝搬加算器５８は図９に示すように、演算（（（ＸＵ・ＹＵ）＜＜３２）＋ＸＬ・ＹＬ）＋（（（ＸＵ・ＹＬ）＜＜１６）＋（（ＸＬ・ＹＵ）＜＜１６））つまり乗算Ｘ・Ｙの結果を出力する。
【００６６】
以上のように、演算装置は、３２ビットデータＸとＹを入力として乗算を実行し、図１０に示すように３サイクルで６４ビットの乗算結果を求めることができる。
【００６７】
また、図１に示した演算器は、先に述べた演算以外に種々の演算が実行できる。
【００６８】
図１１にその演算と制御を示す。同図において、第１〜第４のセレクタ５２１〜５２４には選択されたデータ、シフタ６２１〜６２４にはシフト量及び方向を示している。ｍ＜＜はｍビット左シフト、ｍ＞＞はｍビット右シフトを表す。Ｓ＋Ｃは桁上げ伝搬加算器５８の出力である。
【００６９】
セレクタ及びシフタは２段パイプライン演算器の１段目に属するので、２サイクル演算については、１サイクル目の制御を記載し、３サイクル演算については、１サイクル目と２サイクル目の制御を記載している。
【００７０】
尚、図１において第３、第４のセレクタ５２３、５２４の出力を第３の全加算器５６に入力しているが、第１、第２の全加算器５４１、５４２に入力しても同様な結果が得られる。
【００７１】
尚、図１に示した演算装置は、２段のパイプライン構成になっているが、多段のパイプライン構成しても同様な結果が得られる。
【００７２】
尚、本実施例では、レジスタを２つに分割したデータを入力として、演算を行なっているが、２つ以上に分割したデータを入力としても、同様な結果が得られる。
【００７３】
−効果−
以上のように本発明によれば、複数の分割された入力データから１つの独立した累積データを得る演算でも、データ転送、データ加算処理を必要としないという有利な効果が得られる。また、図１１に示す各種演算を実行できるという有利な効果が得られる。
【００７４】
［産業上の利用可能性］
以上のように、本発明の演算装置及び演算方法は、画像処理又は音声処理等に有用であり、これらの処理を含むマルチメディア・データ処理に適している。
【図面の簡単な説明】
【図１】本発明の実施の形態に係る演算装置の構成図である。
【図２】本発明の実施の形態に係るデータ拡張シフト器の詳細な構成図である。
【図３】本発明の実施の形態に係る第３の全加算器の詳細な構成図である。
【図４】本発明の実施の形態に係る桁上げ伝搬加算器の詳細な構成図である。
【図５】図１の演算装置による積和演算の動作説明図である。
【図６】図１の演算装置による積和演算のタイミング図である。
【図７】図１の演算装置によるデュアル積和演算の動作説明図である。
【図８】図１の演算装置によるデュアル積和演算のタイミング図である。
【図９】図１の演算装置による乗算の動作説明図である。
【図１０】図１の演算装置による乗算のタイミング図である。
【図１１】図１の演算装置による各種演算を示した図である。
【図１２】従来のレジスタ分割演算器の構成図である。
【図１３】積和演算における配列データを示した図である。
【図１】
0003667635.tif 000002
【図２】
0003667635.tif 000003
【図３】
0003667635.tif 000004
【図４】
0003667635.tif 000005
【図５】
0003667635.tif 000006
【図６】
0003667635.tif 000007
【図７】
0003667635.tif 000008
【図８】
0003667635.tif 000009
【図９】
0003667635.tif 000010
【図１０】
0003667635.tif 000011
【図１１】
0003667635.tif 000012
【図１２】
0003667635.tif 000013
【図１３】
0003667635.tif 000014