(57)【要約】【課題】小型で高速かつ入力データ数の変更に対応でき、様々な積和演算系の処理にも対応可能な動的再構成可能な積和演算装置を得る。【解決手段】乗算器１００〜１０３とデータ結合器２００〜２０３と加減算器５００，５０１，５０４，５０６とシフタ４００〜４０３，４０８，４０９，４１２，４１４とを、乗算器１００〜１０３側を入力としてツリー状に接続する。セレクタ３００〜３０３，３０８，３０９，３１２，３１３は、乗算器１００〜１０３とデータ結合器２００〜２０３の出力を動的に選択すると共に、シフタ４００〜４０３，４０８，４０９，４１２，４１３の出力を動的に選択する。【選択図】図１
2010160632.tif 000002
【特許請求の範囲】
【請求項１】
それぞれが２入力の乗算を行う複数の乗算器と、
前記２入力のデータのうち、一方を上位ビット、他方を下位ビットとしてデータの結合を行う複数のデータ結合器と、
前記複数の乗算器の出力と前記複数のデータ結合器の出力を選択出力する複数の第１選択手段と、
前記複数の第１選択手段の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な複数の第１シフタと、
前記複数の第１シフタの出力のうちいずれか二つの出力を入力として加算または減算を行う複数の第１加減算器と、
前記複数の第１加減算器の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な複数の第２シフタと、
前記第１シフタの出力と前記第２シフタの出力を選択出力する複数の第２選択手段と、
前記複数の第２選択手段の出力のうちいずれか二つの出力を入力として加算または減算を行う複数の第２加減算器と、
前記複数の第２加減算器の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な複数の第３シフタと、
前記第１シフタの出力と前記第３シフタの出力を選択出力する複数の第３選択手段と、
前記複数の第３選択手段の出力のうちいずれか二つの出力を入力として加算または減算を行う第３加減算器と、
前記第３加減算器の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な第４シフタとを備えた動的再構成可能な積和演算装置。
【請求項２】
任意の値を保持する複数の記憶素子と、前記複数の記憶素子の出力と所定の入力とを選択する第４選択手段を設け、複数の乗算器とデータ結合器は、前記第４選択手段の選択結果を、２入力のうちの一方の入力とすることを特徴とする請求項１記載の動的再構成可能な積和演算装置。
【請求項３】
乗算器、第２シフタ、第３シフタ、第４シフタの出力をそれぞれ保持する記憶素子を設けたことを特徴とする請求項１または請求項２記載の動的再構成可能な積和演算装置。
【請求項４】
請求項１から請求項３のうちのいずれか１項記載の動的再構成可能な積和演算装置と、
前記動的再構成可能な積和演算装置における演算前のデータを格納する入力バッファと、
前記動的再構成可能な積和演算装置における演算前のデータまたは演算後のデータを格納する入出力バッファと、
前記入力バッファと前記入出力バッファから前記動的再構成可能な積和演算装置での演算対象データを選択し、前記動的再構成可能な積和演算装置に供給する入力セレクタ部と、
前記動的再構成可能な積和演算装置の出力を選択して前記入出力バッファに出力する出力セレクタ部と、
前記動的再構成可能な積和演算装置の回路構成情報と前記入力セレクタ部の選択指示情報と前記出力セレクタ部の選択指示情報と前記入力データバッファの制御情報と前記入出力バッファの制御情報を格納するコンフィグレーションメモリと、
前記入力バッファまたは前記入出力バッファまたは前記コンフィグレーションメモリと、外部間とのデータ転送時に外部からのアドレス指示に基づいて、前記入力バッファと前記入出力バッファと前記コンフィグレーションメモリの制御信号を生成するメモリ制御信号生成部と、
前記動的再構成可能な積和演算装置に入力されるデータの格納元アドレスと当該動的再構成可能な積和演算装置からの出力データの格納先アドレスを制御するアドレス制御部と、
外部プロセッサからの命令をデコードする命令Ｉ／Ｆ部とを備え、
前記外部プロセッサからの指示により、任意の演算を行うことを特徴とする動的再構成可能プロセッサ。
【請求項５】
入力バッファは、動的再構成可能な積和演算装置への入力データの格納元となるバッファ面以外に、このバッファ面とは別に制御可能なバッファ面を有することを特徴とする請求項４記載の動的再構成可能プロセッサ。
【請求項６】
入出力バッファは、動的再構成可能な積和演算装置への入力データの格納元となるバッファ面または当該動的再構成可能な積和演算装置からの出力データの格納先となるバッファ面以外に、当該バッファ面とは別に制御可能なバッファ面を有することを特徴とする請求項４または請求項５記載の動的再構成可能プロセッサ。
【請求項７】
入力セレクタ部は、
入力バッファと入出力バッファからいずれか一つを選択する１段目入力セレクタと、
前記１段目入力セレクタの出力のうち半数のデータを選択する２段目入力セレクタと、
前記２段目入力セレクタの選択結果を２サイクル分保持したデータから連続する半数のデータを選択するローテータと、
前記ローテータの出力を並び替えて動的再構成可能な積和演算装置へ出力する３段目入力セレクタとを備えることを特徴とする請求項４から請求項６のうちのいずれか１項記載の動的再構成可能プロセッサ。
【請求項８】
出力セレクタ部は、動的再構成可能な積和演算装置の複数の出力を入力とする複数の選択手段を備え、前記動的再構成可能な積和演算装置の複数の出力を任意の順番に並べ替えることを特徴とする請求項４から請求項７のうちのいずれか１項記載の動的再構成可能プロセッサ。
【請求項９】
請求項３に記載の動的再構成可能な積和演算装置を用い、
前記動的再構成可能な積和演算装置に備えた記憶素子の段数分、前記動的再構成可能な積和演算装置の出力格納先アドレスを遅延させるための出力データ格納先アドレス遅延部を備えることを特徴とする請求項４から請求項８のうちのいずれか１項記載の動的再構成可能プロセッサ。
【請求項１０】
アドレス制御部は、一つまたは二つの動的再構成可能な積和演算装置への入力データ格納元アドレスと一つの前記動的再構成可能な積和演算装置からの出力データ格納先アドレスの組み合わせデータを複数種類格納可能なテーブルを有し、
前記テーブルの組み合わせデータは、前記動的再構成可能な積和演算装置による処理が開始される前に格納されると共に、積和演算処理実行時に外部プロセッサからの指示に基づいて、使用する前記組み合わせデータを選択し、入力バッファの入力データ格納元アドレスと、入出力バッファの入力データ格納元アドレスまたは出力データ格納先アドレスを決定することを特徴とする請求項４から請求項９のうちのいずれか１記載の動的再構成可能プロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、動的に積和演算回路を構成することのできる動的再構成可能な積和演算装置およびこれを用いた動的再構成可能プロセッサに関するものである。
【背景技術】
【０００２】
フィルタ処理をはじめ、デジタル信号処理では積和演算処理が頻繁に用いられる。従来の積和演算装置は、入力データ数（例えば、フィルタ処理の場合のタップ数）分の乗算器と複数の加算器から構成される加算器ツリーを備え、複数の乗算器に複数の入力データを同時に入力して並列に乗算を行い、複数の乗算器の出力を加算器ツリーによって足し合わせるようにしたものがあった。このような構成では、例えば、１２８個の入力データに対し、１２８個の乗算器で並列に乗算を行い、隣接する乗算器の２つの出力を６４個の加算器によって加算する。また、６４個の加算器の出力のうち隣接する加算器同士の出力を３２個の加算器によって加算する。これを加算器ツリーの下端まで処理することによって１２８個のデータの積和演算結果が得られる。この構成は乗算と加算を並列に処理することができるため高性能な積和演算装置を得ることができる。
【０００３】
また、このような構成とは異なる積和演算装置の回路構成として、乗算器と加算器をそれぞれ一つずつ備え、乗算器で入力データを一つずつ乗算し、乗算器の出力と一つ前の入力データまでを乗算し累算した結果とを足し合わせる。これを入力データ数分繰り返し処理する。例えば、１２８個の入力データがある場合は、乗算と累算処理を１２８回繰り返すことで、１２８個のデータの積和演算結果が得られる。この構成では、乗算器と加算器を一つずつ備えればよいため小型な積和演算装置を得ることができる。
【０００４】
また、それぞれが演算を行う複数の処理エレメントの相互接続を動的に変えるようにしたマイクロプロセッサがあった（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表２０００−５０３１５１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記従来の積和演算装置のうち、入力データ数分の乗算器と複数の加算器を備えたものでは、乗算器を並列に構成することにより高速な積和演算処理が可能な反面、乗算器を入力データ数分備えることにより回路規模が膨大になってしまう問題があった。また、乗算器の個数を入力データ数に合わせて備える必要があるため、例えばフィルタのタップ数変更などの入力データ数の変更に対応することができなった。
【０００７】
一方、上記従来の積和演算装置のうち、乗算器と加算器をそれぞれ一つずつ備えたものでは、入力数分の乗算器を備えた従来の積和演算装置で問題となる入力データ数の変更には対応可能であり柔軟な積和演算装置を得ることができる。しかしながら、入力データ数が増大すると乗算と累算を繰り返す回数も増大することになり、処理サイクル数が膨大になってしまう問題があった。また、動的に処理エレメント間の接続を変更できるようにした構成であっても、その処理エレメント内の具体的な構成を示しておらず、このような構成から動的再構成可能な積和演算装置を実現することは困難であった。
【０００８】
この発明は上記のような課題を解決するためになされたもので、小型で高速かつ入力データ数の変更に対応でき、また、様々な積和演算系の処理にも対応可能な動的再構成可能な積和演算装置および動的再構成可能プロセッサを得ることを目的とする。
【課題を解決するための手段】
【０００９】
この発明に係る動的再構成可能な積和演算装置は、それぞれが２入力の乗算を行う複数の乗算器と、２入力のデータのうち、一方を上位ビット、他方を下位ビットとしてデータの結合を行う複数のデータ結合器と、複数の乗算器の出力と複数のデータ結合器の出力を選択出力する複数の第１選択手段と、複数の第１選択手段の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な複数の第１シフタと、複数の第１シフタの出力のうちいずれか二つの出力を入力として加算または減算を行う複数の第１加減算器と、複数の第１加減算器の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な複数の第２シフタと、第１シフタの出力と第２シフタの出力を選択出力する複数の第２選択手段と、複数の第２選択手段の出力のうちいずれか二つの出力を入力として加算または減算を行う複数の第２加減算器と、複数の第２加減算器の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な複数の第３シフタと、第１シフタの出力と第３シフタの出力を選択出力する複数の第３選択手段と、複数の第３選択手段の出力のうちいずれか二つの出力を入力として加算または減算を行う第３加減算器と、第３加減算器の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な第４シフタとを備えたものである。
【発明の効果】
【００１０】
この発明の動的再構成可能な積和演算装置は、乗算器とデータ結合器と加減算器とシフタとをツリー状に接続すると共に、乗算器とデータ結合器と加減算器とシフタとの接続を動的に切り替え可能な選択手段を設けたので、任意の入力数の積和演算、フィルタ演算、バタフライ演算、足し合わせ演算、行列演算といった様々な演算を行うことができる。
【図面の簡単な説明】
【００１１】
【図１】この発明の実施の形態１による動的再構成可能な積和演算装置を示す構成図である。
【図２】この発明の実施の形態１による動的再構成可能な積和演算装置を示す構成図である。
【図３−１】この発明の実施の形態２による動的再構成可能な積和演算装置を示す構成図である。
【図３−２】この発明の実施の形態２による動的再構成可能な積和演算装置を示す構成図である。
【図４−１】この発明の実施の形態３による動的再構成可能な積和演算装置を示す構成図である。
【図４−２】この発明の実施の形態３による動的再構成可能な積和演算装置を示す構成図である。
【図５】この発明の実施の形態４による動的再構成可能プロセッサの構成図である。
【図６−１】この発明の実施の形態５による入力セレクタ部の構成図である。
【図６−２】この発明の実施の形態５による入力セレクタ部の構成図である。
【図６−３】この発明の実施の形態５による入力セレクタ部の構成図である。
【図７】この発明の実施の形態６による出力セレクタ部の構成図である。
【図８】この発明の実施の形態７によるアドレス制御部の説明図である。
【図９】この発明の動的再構成可能プロセッサにおける適応フィルタアルゴリズムの実行手順を示す説明図である。
【図１０−１】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたＤｅｌｔａ２演算用回路の構成図である。
【図１０−２】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたＤｅｌｔａ２演算用回路の構成図である。
【図１１−１】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたＭｕｘ１演算用回路の構成図である。
【図１１−２】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたＭｕｘ１演算用回路の構成図である。
【図１２−１】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたａｏｕｔ演算用回路の構成図である。
【図１２−２】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたａｏｕｔ演算用回路の構成図である。
【図１３−１】この発明の実施の形態３による動的再構成可能な積和演算装置を用いた８ｍｕｌ＿ａｄｄ演算用回路の構成図である。
【図１３−２】この発明の実施の形態３による動的再構成可能な積和演算装置を用いた８ｍｕｌ＿ａｄｄ演算用回路の構成図である。
【図１４−１】この発明の実施の形態３による動的再構成可能な積和演算装置を用いた８Ｔ＿ａｄｄ演算用回路の構成図である。
【図１４−２】この発明の実施の形態３による動的再構成可能な積和演算装置を用いた８Ｔ＿ａｄｄ演算用回路の構成図である。
【図１５−１】この発明の実施の形態３による動的再構成可能な積和演算装置を用いた５Ｔ＿ａｄｄ演算用回路の構成図である。
【図１５−２】この発明の実施の形態３による動的再構成可能な積和演算装置を用いた５Ｔ＿ａｄｄ演算用回路の構成図である。
【図１６−１】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたｅｏｕｔ演算用回路の構成図である。
【図１６−２】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたｅｏｕｔ演算用回路の構成図である。
【図１７】この発明の動的再構成可能な積和演算装置を用いたＤＣＴ演算の説明図である。
【図１８−１】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたＤＣＴ演算における［１］部分の回路の構成図である。
【図１８−２】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたＤＣＴ演算における［１］部分の回路の構成図である。
【図１９−１】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたＤＣＴ演算における［２］部分の回路の構成図である。
【図１９−２】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたＤＣＴ演算における［２］部分の回路の構成図である。
【図２０−１】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたＤＣＴ演算における［３］部分の回路の構成図である。
【図２０−２】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたＤＣＴ演算における［３］部分の回路の構成図である。
【図２１−１】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたＤＣＴ演算における［４］部分の回路の構成図である。
【図２１−２】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたＤＣＴ演算における［４］部分の回路の構成図である。
【図２２−１】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたＤＣＴ演算における［５］部分の回路の構成図である。
【図２２−２】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたＤＣＴ演算における［５］部分の回路の構成図である。
【図２３】この発明の動的再構成可能な積和演算装置を用いたＩＤＣＴ演算の説明図である。
【図２４−１】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたＩＤＣＴ演算における［１］部分の回路の構成図である。
【図２４−２】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたＩＤＣＴ演算における［１］部分の回路の構成図である。
【図２５−１】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたＩＤＣＴ演算における［２］部分の回路の構成図である。
【図２５−２】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたＩＤＣＴ演算における［２］部分の回路の構成図である。
【図２６−１】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたＩＤＣＴ演算における［３］部分の回路の構成図である。
【図２６−２】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたＩＤＣＴ演算における［３］部分の回路の構成図である。
【図２７−１】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたＩＤＣＴ演算における［４］部分の回路の構成図である。
【図２７−２】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたＩＤＣＴ演算における［４］部分の回路の構成図である。
【図２８−１】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたＩＤＣＴ演算における［５］部分の回路の構成図である。
【図２８−２】この発明の実施の形態３による動的再構成可能な積和演算装置を用いたＩＤＣＴ演算における［５］部分の回路の構成図である。
【発明を実施するための形態】
【００１２】
実施の形態１．
図１および図２は、この発明の実施の形態１による動的再構成可能な積和演算装置を示す構成図である。
図において、動的再構成可能な積和演算装置は、それぞれが２入力の乗算を行う複数の乗算器１００〜１０７と、これら乗算器１００〜１０７の２入力のデータのうち、一方を上位ビット、他方を下位ビットとしてデータの結合を行う複数のデータ結合器２００〜２０７と、これら複数の乗算器１００〜１０７の出力と複数のデータ結合器２００〜２０７の出力を選択出力する複数の２ｔｏ１セレクタ（第１選択手段）３００〜３０７と、これら複数のセレクタ３００〜３０７の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な複数のシフタ（第１シフタ）４００〜４０７と、これら複数のシフタ４００〜４０７の出力のうちいずれか二つの出力を入力として加算または減算を行う複数の加減算器（第１加減算器）５００〜５０３と、これら複数の加減算器５００〜５０３の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な複数のシフタ（第２シフタ）４０８〜４１１と、シフタ４００〜４０７の出力とシフタ４０８〜４１１の出力を選択出力する複数の２ｔｏ１セレクタ（第２選択手段）と、これら複数のセレクタ３０８〜３１１の出力のうちいずれか二つの出力を入力として加算または減算を行う複数の加減算器（第２加減算器）５０４，５０５と、これら複数の加減算器５０４，５０５の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な複数のシフタ（第３シフタ）４１２，４１３と、シフタ４００〜４０７の出力とシフタ４１２，４１３の出力を選択出力する複数の２ｔｏ１セレクタ（第３選択手段）３１２〜３１５と、これら複数のセレクタ３１２〜３１５の出力のうちいずれか二つの出力を入力として加算または減算を行う加減算器（第３加減算器）５０６，５０７と、これら加減算器５０６，５０７の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能なシフタ（第４シフタ）４１４，４１５とを備えている。
【００１３】
次に、このように構成された動的再構成可能な積和演算装置の動作について説明する。
入力データ１００ａと入力データ１００ｂが入力された乗算器１００からは、入力データ１００ａ，１００ｂの乗算結果出力１００ｃが得られる。同様に、入力データ１０１ａと入力データ１０１ｂが入力された乗算器１０１からは、入力データ１０１ａ，１０１ｂの乗算結果出力１０１ｃが得られ、入力データ１０２ａと入力データ１０２ｂが入力された乗算器１０２からは、入力データ１０２ａ，１０２ｂの乗算結果出力１０２ｃが得られ、入力データ１０３ａと入力データ１０３ｂが入力された乗算器１０３からは、入力データ１０３ａ，１０３ｂの乗算結果出力１０３ｃが得られ、入力データ１０４ａと入力データ１０４ｂが入力された乗算器１０４からは、入力データ１０４ａ，１０４ｂの乗算結果出力１０４ｃが得られ、入力データ１０５ａと入力データ１０５ｂが入力された乗算器１０５からは、入力データ１０５ａ，１０５ｂの乗算結果出力１０５ｃが得られ、入力データ１０６ａと入力データ１０６ｂが入力された乗算器１０６からは、入力データ１０６ａ，１０６ｂの乗算結果出力１０６ｃが得られ、入力データ１０７ａと入力データ１０７ｂが入力された乗算器１０７からは、入力データ１０７ａ，１０７ｂの乗算結果出力１０７ｃが得られる。
【００１４】
また、入力データ１００ａと入力データ１００ｂが入力されたデータ結合器２００からは、上位ビットとして入力データ１００ａ、下位ビットとして入力データ１００ｂを結合した結果出力２００ａが得られる。同様に、入力データ１０１ａと入力データ１０１ｂが入力されたデータ結合器２０１からは、上位ビットとして入力データ１０１ａ、下位ビットとして入力データ１０１ｂを結合した結果出力２０１ａが得られ、入力データ１０２ａと入力データ１０２ｂが入力されたデータ結合器２０２からは、上位ビットとして入力データ１０２ａ、下位ビットとして入力データ１０２ｂを結合した結果出力２０２ａが得られ、入力データ１０３ａと入力データ１０３ｂが入力されたデータ結合器２０３からは、上位ビットとして入力データ１０３ａ、下位ビットとして入力データ１０３ｂを結合した結果出力２０３ａが得られ、入力データ１０４ａと入力データ１０４ｂが入力されたデータ結合器２０４からは、上位ビットとして入力データ１０４ａ、下位ビットとして入力データ１０４ｂを結合した結果出力２０４ａが得られ、入力データ１０５ａと入力データ１０５ｂが入力されたデータ結合器２０５からは、上位ビットとして入力データ１０５ａ、下位ビットとして入力データ１０５ｂを結合した結果出力２０５ａが得られ、入力データ１０６ａと入力データ１０６ｂが入力されたデータ結合器２０６からは、上位ビットとして入力データ１０６ａ、下位ビットとして入力データ１０６ｂを結合した結果出力２０６ａが得られ、入力データ１０７ａと入力データ１０７ｂが入力されたデータ結合器２０７からは、上位ビットとして入力データ１０７ａ、下位ビットとして入力データ１０７ｂを結合した結果出力２０７ａが得られる。
【００１５】
続いて、上記で得られた結果出力２００ａと乗算結果出力１００ｃが２ｔｏ１セレクタ３００に入力され、外部から入力される１ビットのセレクタ信号ｓｅｌ０により選択され、セレクタ出力３００ａが得られる。同様に、結果出力２０１ａと乗算結果出力１０１ｃが入力されたセレクタ３０１からは、セレクタ信号ｓｅｌ１により選択されたセレクタ出力３０１ａが得られ、結果出力２０２ａと乗算結果出力１０２ｃが入力されたセレクタ３０２からは、セレクタ信号ｓｅｌ２により選択されたセレクタ出力３０２ａが得られ、結果出力２０３ａと乗算結果出力１０３ｃが入力されたセレクタ３０３からは、セレクタ信号ｓｅｌ３により選択されたセレクタ出力３０３ａが得られ、結果出力２０４ａと乗算結果出力１０４ｃが入力されたセレクタ３０４からは、セレクタ信号ｓｅｌ４により選択されたセレクタ出力３０４ａが得られ、結果出力２０５ａと乗算結果出力１０５ｃが入力されたセレクタ３０５からは、セレクタ信号ｓｅｌ５により選択されたセレクタ出力３０５ａが得られ、結果出力２０６ａと乗算結果出力１０６ｃが入力されたセレクタ３０６からは、セレクタ信号ｓｅｌ６により選択されたセレクタ出力３０６ａが得られ、結果出力２０７ａと乗算結果出力１０７ｃが入力されたセレクタ３０７からは、セレクタ信号ｓｅｌ７により選択されたセレクタ出力３０７ａが得られる。
【００１６】
続いて、上記で得られたセレクタ出力３００ａがシフタ４００に入力され、外部から入力される１ビット以上のシフト値信号ｓｆｔ０により示されるシフト値分右シフトされ、シフタ出力４００ａが得られる。同様に、セレクタ出力３０１ａが入力されたシフタ４０１からは、シフト値信号ｓｆｔ１により示されるシフト値分右シフトされたシフタ出力４０１ａが得られ、セレクタ出力３０２ａが入力されたシフタ４０２からは、シフト値信号ｓｆｔ２により示されるシフト値分右シフトされたシフタ出力４０２ａが得られ、セレクタ出力３０３ａが入力されたシフタ４０３からは、シフト値信号ｓｆｔ３により示されるシフト値分右シフトされたシフタ出力４０３ａが得られ、セレクタ出力３０４ａが入力されたシフタ４０４からは、シフト値信号ｓｆｔ４により示されるシフト値分右シフトされたシフタ出力４０４ａが得られ、セレクタ出力３０５ａが入力されたシフタ４０５からは、シフト値信号ｓｆｔ５により示されるシフト値分右シフトされたシフタ出力４０５ａが得られ、セレクタ出力３０６ａが入力されたシフタ４０６からは、シフト値信号ｓｆｔ６により示されるシフト値分右シフトされたシフタ出力４０６ａが得られ、セレクタ出力３０７ａが入力されたシフタ４０７からは、シフト値信号ｓｆｔ７により示されるシフト値分右シフトされたシフタ出力４０７ａが得られる。
【００１７】
続いて、上記で得られたシフタ出力４００ａ，４０１ａが加減算器５００に入力され、外部から入力される１ビットの加減算選択信号ａｓ０により加算もしくは減算され、シフタ出力４００ａ，４０１ａの加減算結果出力５００ａが得られる。同様に、シフタ出力４０２ａ，４０３ａが入力された加減算器５０１からは、加減算選択信号ａｓ１により加算もしくは減算されたシフタ出力４０２ａ，４０３ａの加減算結果出力５０１ａが得られ、シフタ出力４０４ａ，４０５ａが入力された加減算器５０２からは、加減算選択信号ａｓ２により加算もしくは減算されたシフタ出力４０４ａ，４０５ａの加減算結果出力５０２ａが得られ、シフタ出力４０６ａ，４０７ａが入力された加減算器５０３からは、加減算選択信号ａｓ３により加算もしくは減算されたシフタ出力４０６ａ，４０７ａの加減算結果出力５０３ａが得られる。
【００１８】
続いて、上記で得られた加減算結果出力５００ａがシフタ４０８に入力され、外部から入力される１ビット以上のシフト値信号ｓｆｔ８により示されるシフト値分右シフトされ、シフタ出力４０８ａが得られる。同様に、加減算結果出力５０１ａが入力されたシフタ４０９からは、シフト値信号ｓｆｔ９により示されるシフト値分右シフトされたシフタ出力４０９ａが得られ、加減算結果出力５０２ａが入力されたシフタ４１０からは、シフト値信号ｓｆｔ１０により示されるシフト値分右シフトされたシフタ出力４１０ａが得られ、加減算結果出力５０３ａが入力されたシフタ４１１からは、シフト値信号ｓｆｔ１１により示されるシフト値分右シフトされたシフタ出力４１１ａが得られる。
【００１９】
続いて、上記で得られたシフタ出力４０８ａとシフタ出力４００ａがセレクタ３０８に入力され、外部から入力される１ビットのセレクタ信号ｓｅｌ８により選択され、セレクタ出力３０８ａが得られる。同様に、シフタ出力４０１ａとシフタ出力４０９ａが入力されたセレクタ３０９からは、セレクタ信号ｓｅｌ９により選択されたセレクタ出力３０９ａが得られ、シフタ出力４１０ａとシフタ出力４０６ａが入力されたセレクタ３１０からは、セレクタ信号ｓｅｌ１０により選択されたセレクタ出力３１０ａが得られ、シフタ出力４０７ａとシフタ出力４１１ａが入力されたセレクタ３１１からは、セレクタ信号ｓｅｌ１１により選択されたセレクタ出力３１１ａが得られる。
【００２０】
続いて、上記で得られたセレクタ出力３０８ａとセレクタ出力３０９ａが加減算器５０４に入力され、加減算選択信号ａｓ４により加算もしくは減算されたセレクタ出力３０８ａ，３０９ａの加減算結果出力５０４ａが得られる。同様に、セレクタ出力３１０ａとセレクタ出力３１１ａが入力された加減算器５０５からは、加減算選択信号ａｓ５により加算もしくは減算されたセレクタ出力３１０ａ，３１１ａの加減算結果出力５０５ａが得られる。
【００２１】
続いて、上記で得られた加減算結果出力５０４ａがシフタ４１２に入力され、外部から入力される１ビット以上のシフト値信号ｓｆｔ１２により示されるシフト値分右シフトされ、シフタ出力４１２ａが得られる。同様に、加減算結果出力５０５ａが入力されたシフタ４１３からは、シフト値信号ｓｆｔ１３により示されるシフト値分右シフトされたシフタ出力４１３ａが得られる。
【００２２】
続いて、上記で得られたシフタ出力４１２ａとシフタ出力４０２ａがセレクタ３１２に入力され、外部から入力される１ビットのセレクタ信号ｓｅｌ１２により選択され、セレクタ出力３１２ａが得られる。同様に、シフタ出力４０３ａとシフタ出力４１３ａが入力されたセレクタ３１３からは、セレクタ信号ｓｅｌ１３により選択されたセレクタ出力３１３ａが得られ、シフタ出力４１２ａとシフタ出力４０４ａが入力されたセレクタ３１４からは、セレクタ信号ｓｅｌ１４により選択されたセレクタ出力３１４ａが得られ、シフタ出力４０５ａとシフタ出力４１３ａが入力されたセレクタ３１５からは、セレクタ信号ｓｅｌ１５により選択されたセレクタ出力３１５ａが得られる。
【００２３】
続いて、上記で得られたセレクタ出力３１２ａとセレクタ出力３１３ａが加減算器５０６に入力され、加減算選択信号ａｓ６により加算もしくは減算されたセレクタ出力３１２ａ，３１３ａの加減算結果出力５０６ａが得られる。同様に、セレクタ出力３１４ａとセレクタ出力３１５ａが入力された加減算器５０７からは、加減算選択信号ａｓ７により加算もしくは減算されたセレクタ出力３１４ａ，３１５ａの加減算結果出力５０７ａが得られる。
【００２４】
続いて、上記で得られた加減算結果出力５０６ａがシフタ４１４に入力され、外部から入力されるシフト値信号ｓｆｔ１４により示されるシフト値分右シフトし、シフタ出力４１４ａが得られる。同様に、加減算結果出力５０７ａが入力されたシフタ４１５からは、シフト値信号ｓｆｔ１５により示されるシフト値分右シフトされたシフタ出力４１５ａが得られる。尚、上記で得られたシフタ出力４０８ａ〜４１５ａは、いずれも外部に出力できる。
【００２５】
以上のように、実施の形態１の動的再構成可能な積和演算装置によれば、それぞれが２入力の乗算を行う複数の乗算器と、２入力のデータのうち、一方を上位ビット、他方を下位ビットとしてデータの結合を行う複数のデータ結合器と、複数の乗算器の出力と複数のデータ結合器の出力を選択出力する複数の第１選択手段と、複数の第１選択手段の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な複数の第１シフタと、複数の第１シフタの出力のうちいずれか二つの出力を入力として加算または減算を行う複数の第１加減算器と、複数の第１加減算器の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な複数の第２シフタと、第１シフタの出力と第２シフタの出力を選択出力する複数の第２選択手段と、複数の第２選択手段の出力のうちいずれか二つの出力を入力として加算または減算を行う複数の第２加減算器と、複数の第２加減算器の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な複数の第３シフタと、第１シフタの出力と第３シフタの出力を選択出力する複数の第３選択手段と、複数の第３選択手段の出力のうちいずれか二つの出力を入力として加算または減算を行う第３加減算器と、第３加減算器の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な第４シフタとを備えたので、乗算器の並列数を増加させることなく任意の入力数の積和演算が可能となる。また、様々なフィルタ演算、バタフライ演算、足し合わせ演算、行列演算が可能な、面積効率のよい動的再構成可能な演算装置を得られる。
【００２６】
実施の形態２．
図３−１および図３−２は、この発明の実施の形態２における動的再構成可能な積和演算装置を示すものである。
実施の形態２の動的再構成可能な積和演算装置は、実施の形態１の積和演算装置に対して、入力データの一方に、レジスタ（記憶素子）６００〜６０７と２ｔｏ１セレクタ（第４選択手段）３１６〜３２３を設け、これらのセレクタ３１６〜３２３によってレジスタ６００〜６０７の値か入力データ１００ｂ〜１０７ｂかを選択するようにしたものである。
【００２７】
図３において、セレクタ３１６〜３２３の一方の入力は入力データ１００ｂ〜１０７ｂであり、他方の入力にはレジスタ６００〜６０７が接続され、これらのレジスタ出力６００ａ〜６０７ａが入力されるようになっている。また、セレクタ３１６〜３２３からのセレクタ出力３１６ａ〜３２３ａは、乗算器１００〜１０７に入力されるよう構成されている。これ以外の構成は、図１および図２に示した実施の形態１と同様であるため、対応する部分に同一符号を付してその説明を省略する。
【００２８】
次に、実施の形態２の動作について説明する。
レジスタ６００〜６０７には、必要に応じて予め値を設定する。入力データ１００ｂとレジスタ６００の出力データ６００ａがセレクタ３１６に入力され、外部から入力される１ビットのセレクト信号ｓｅｌ１６により選択され、セレクタ出力３１６ａが得られる。
【００２９】
同様に、入力データ１０１ｂとレジスタ６０１の出力データ６０１ａが入力されたセレクタ３１７からは、セレクト信号ｓｅｌ１７により選択されたセレクタ出力３１７ａが得られ、入力データ１０２ｂとレジスタ６０２の出力データ６０２ａが入力されたセレクタ３１８からは、セレクト信号ｓｅｌ１８により選択されたセレクタ出力３１８ａが得られ、入力データ１０３ｂとレジスタ６０３の出力データ６０３ａが入力されたセレクタ３１９からは、セレクト信号ｓｅｌ１９により選択されたセレクタ出力３１９ａが得られ、入力データ１０４ｂとレジスタ６０４の出力データ６０４ａが入力されたセレクタ３２０からは、セレクト信号ｓｅｌ２０により選択されたセレクタ出力３２０ａが得られ、入力データ１０５ｂとレジスタ６０５の出力データ６０５ａが入力されたセレクタ３２１からは、セレクト信号ｓｅｌ２１により選択されたセレクタ出力３２１ａが得られ、入力データ１０６ｂとレジスタ６０６の出力データ６０６ａが入力されたセレクタ３２２からは、セレクト信号ｓｅｌ２２により選択されたセレクタ出力３２２ａが得られ、入力データ１０７ｂとレジスタ６０７の出力データ６０７ａが入力されたセレクタ３２３からは、セレクト信号ｓｅｌ２３により選択されたセレクタ出力３２３ａが得られる。
【００３０】
続いて、入力データ１００ａと上記で得られたセレクタ出力３１６ａが入力された乗算器１００からは、入力データ１００ａとセレクタ出力３１６ａの乗算結果出力１００ｃが得られる。同様に、入力データ１０１ａとセレクタ出力３１７ａが入力された乗算器１０１からは、入力データ１０１ａとセレクタ出力３１７ａの乗算結果出力１０１ｃが得られ、入力データ１０２ａとセレクタ出力３１８ａが入力された乗算器１０２からは、入力データ１０２ａとセレクタ出力３１８ａの乗算結果出力１０２ｃが得られ、入力データ１０３ａとセレクタ出力３１９ａが入力された乗算器１０３からは、入力データ１０３ａとセレクタ出力３１９ａの乗算結果出力１０３ｃが得られ、入力データ１０４ａとセレクタ出力３２０ａが入力された乗算器１０４からは、入力データ１０４ａとセレクタ出力３２０ａの乗算結果出力１０４ｃが得られ、入力データ１０５ａとセレクタ出力３２１ａが入力された乗算器１０５からは、入力データ１０５ａとセレクタ出力３２１ａの乗算結果出力１０５ｃが得られ、入力データ１０６ａとセレクタ出力３２２ａが入力された乗算器１０６からは、入力データ１０６ａとセレクタ出力３２２ａの乗算結果出力１０６ｃが得られ、入力データ１０７ａとセレクタ出力３２３ａが入力された乗算器１０７からは、入力データ１０７ａとセレクタ出力３２３ａの乗算結果出力１０７ｃが得られる。
【００３１】
また、入力データ１００ａとセレクタ出力３１６ａが入力されたデータ結合器２００からは、上位ビットとして入力データ１００ａ、下位ビットとしてセレクタ出力３１６ａを結合した結果出力２００ａが得られる。同様に、入力データ１０１ａとセレクタ出力３１７ａが入力されたデータ結合器２０１からは、上位ビットとして入力データ１０１ａ、下位ビットとしてセレクタ出力３１７ａを結合した結果出力２０１ａが得られ、入力データ１０２ａとセレクタ出力３１８ａが入力されたデータ結合器２０２からは、上位ビットとして入力データ１０２ａ、下位ビットとしてセレクタ出力３１８ａを結合した結果出力２０２ａが得られ、入力データ１０３ａとセレクタ出力３１９ａが入力されたデータ結合器２０３からは、上位ビットとして入力データ１０３ａ、下位ビットとしてセレクタ出力３１９ａを結合した結果出力２０３ａが得られ、入力データ１０４ａとセレクタ出力３２０ａが入力されたデータ結合器２０４からは、上位ビットとして入力データ１０４ａ、下位ビットとしてセレクタ出力３２０ａを結合した結果出力２０４ａが得られ、入力データ１０５ａとセレクタ出力３２１ａが入力されたデータ結合器２０５からは、上位ビットとして入力データ１０５ａ、下位ビットとしてセレクタ出力３２１ａを結合した結果出力２０５ａが得られ、入力データ１０６ａとセレクタ出力３２２ａが入力されたデータ結合器２０６からは、上位ビットとして入力データ１０６ａ、下位ビットとしてセレクタ出力３２２ａを結合した結果出力２０６ａが得られ、入力データ１０７ａとセレクタ出力３２３ａが入力されたデータ結合器２０７からは、上位ビットとして入力データ１０７ａ、下位ビットとしてセレクタ出力３２３ａを結合した結果出力２０７ａが得られる。
尚、これ以降の動作は実施の形態１と同様であるため、ここでの説明は省略する。
【００３２】
以上のように、実施の形態２の動的再構成可能な積和演算装置によれば、任意の値を保持する複数の記憶素子と、複数の記憶素子の出力と所定の入力とを選択する第４選択手段を設け、複数の乗算器とデータ結合器は、第４選択手段の選択結果を、２入力のうちの一方の入力とするようにしたので、乗算器の一方の入力データが固定値である場合に、毎回外部から入力データとして固定値を入力するのにかかっていたサイクル数やバス幅を削減することができる。
【００３３】
実施の形態３．
図４−１および図４−２は、この発明の実施の形態３における動的再構成可能な積和演算装置を示す構成図である。
実施の形態３は、図４−１および図４−２に示すように、実施の形態２の構成に加えて、乗算器１００〜１０７、シフタ（第２のシフタ）４０８〜４１１、シフタ（第３のシフタ）４１２，４１３、シフタ（第４のシフタ）４１４，４１５の後段側に、それぞれの出力値を保持するレジスタ（記憶素子）６０８〜６２３を設けたものである。これ以外の構成は実施の形態２と同様であるため、対応する部分に同一符号を付してその説明を省略する。
【００３４】
次に、実施の形態３の動作について説明する。
レジスタ６００〜６０７には、必要に応じて予め値を設定する。入力データ１００ｂとレジスタ６００の出力データ６００ａがセレクタ３１６に入力され、外部から入力される１ビットのセレクト信号ｓｅｌ１６により選択され、セレクタ出力３１６ａが得られる。同様に、入力データ１０１ｂとレジスタ６０１の出力データ６０１ａが入力されたセレクタ３１７からは、セレクト信号ｓｅｌ１７により選択されたセレクタ出力３１７ａが得られ、入力データ１０２ｂとレジスタ６０２の出力データ６０２ａが入力されたセレクタ３１８からは、セレクト信号ｓｅｌ１８により選択されたセレクタ出力３１８ａが得られ、入力データ１０３ｂとレジスタ６０３の出力データ６０３ａが入力されたセレクタ３１９からは、セレクト信号ｓｅｌ１９により選択されたセレクタ出力３１９ａが得られ、入力データ１０４ｂとレジスタ６０４の出力データ６０４ａが入力されたセレクタ３２０からは、セレクト信号ｓｅｌ２０により選択されたセレクタ出力３２０ａが得られ、入力データ１０５ｂとレジスタ６０５の出力データ６０５ａが入力されたセレクタ３２１からは、セレクト信号ｓｅｌ２１により選択されたセレクタ出力３２１ａが得られ、入力データ１０６ｂとレジスタ６０６の出力データ６０６ａが入力されたセレクタ３２２からは、セレクト信号ｓｅｌ２２により選択されたセレクタ出力３２２ａが得られ、入力データ１０７ｂとレジスタ６０７の出力データ６０７ａが入力されたセレクタ３２３からは、セレクト信号ｓｅｌ２３により選択されたセレクタ出力３２３ａが得られる。
【００３５】
続いて、入力データ１００ａと上記で得られたセレクタ出力３１６ａが乗算器１００に入力され、得られる入力データ１００ａとセレクタ出力３１６ａの乗算結果出力１００ｃをレジスタ６０８に格納する。同様に、入力データ１０１ａとセレクタ出力３１７ａが入力された乗算器１０１から得られる入力データ１０１ａとセレクタ出力３１７ａの乗算結果出力１０１ｃをレジスタ６０９に格納し、入力データ１０２ａとセレクタ出力３１８ａが入力された乗算器１０２から得られる入力データ１０２ａとセレクタ出力３１８ａの乗算結果出力１０２ｃをレジスタ６１０に格納し、入力データ１０３ａとセレクタ出力３１９ａが入力された乗算器１０３から得られる入力データ１０３ａとセレクタ出力３１９ａの乗算結果出力１０３ｃをレジスタ６１１に格納し、入力データ１０４ａとセレクタ出力３２０ａが入力された乗算器１０４から得られる入力データ１０４ａとセレクタ出力３２０ａの乗算結果出力１０４ｃをレジスタ６１２に格納し、入力データ１０５ａとセレクタ出力３２１ａが入力された乗算器１０５から得られる入力データ１０５ａとセレクタ出力３２１ａの乗算結果出力１０５ｃをレジスタ６１３に格納し、入力データ１０６ａとセレクタ出力３２２ａが入力された乗算器１０６から得られる入力データ１０６ａとセレクタ出力３２２ａの乗算結果出力１０６ｃをレジスタ６１４に格納し、入力データ１０７ａとセレクタ出力３２３ａが入力された乗算器１０７から得られる入力データ１０７ａとセレクタ出力３２３ａの乗算結果出力１０７ｃをレジスタ６１５に格納する。
【００３６】
また、入力データ１００ａと３１６ａが入力されたデータ結合器２００からは、上位ビットとして入力データ１００ａ、下位ビットとしてセレクタ出力３１６ａを結合した結果出力２００ａが得られる。同様に、入力データ１０１ａとセレクタ出力３１７ａが入力されたデータ結合器２０１からは、上位ビットとして入力データ１０１ａ、下位ビットとしてセレクタ出力３１７ａを結合した結果出力２０１ａが得られ、入力データ１０２ａとセレクタ出力３１８ａが入力されたデータ結合器２０２からは、上位ビットとして入力データ１０２ａ、下位ビットとしてセレクタ出力３１８ａを結合した結果出力２０２ａが得られ、入力データ１０３ａとセレクタ出力３１９ａが入力されたデータ結合器２０３からは、上位ビットとして入力データ１０３ａ、下位ビットとしてセレクタ出力３１９ａを結合した結果出力２０３ａが得られ、入力データ１０４ａとセレクタ出力３２０ａが入力されたデータ結合器２０４からは、上位ビットとして入力データ１０４ａ、下位ビットとしてセレクタ出力３２０ａを結合した結果出力２０４ａが得られ、入力データ１０５ａとセレクタ出力３２１ａが入力されたデータ結合器２０５からは、上位ビットとして入力データ１０５ａ、下位ビットとしてセレクタ出力３２１ａを結合した結果出力２０５ａが得られ、入力データ１０６ａとセレクタ出力３２２ａが入力されたデータ結合器２０６からは、上位ビットとして入力データ１０６ａ、下位ビットとしてセレクタ出力３２２ａを結合した結果出力２０６ａが得られ、入力データ１０７ａとセレクタ出力３２３ａが入力されたデータ結合器２０７からは、上位ビットとして入力データ１０７ａ、下位ビットとしてセレクタ出力３２３ａを結合した結果出力２０７ａが得られる。
【００３７】
続いて、上記で得られた結果出力２００ａとレジスタ６０８の出力６０８ａが２ｔｏ１セレクタ３００に入力され、外部から入力される１ビットのセレクタ信号ｓｅｌ０により選択され、セレクタ出力３００ａが得られる。同様に、結果出力２０１ａとレジスタ６０９の出力６０９ａが入力されたセレクタ３０１からは、セレクタ信号ｓｅｌ１により選択されたセレクタ出力３０１ａが得られ、結果出力２０２ａとレジスタ６１０の出力６１０ａが入力されたセレクタ３０２からは、セレクタ信号ｓｅｌ２により選択されたセレクタ出力３０２ａが得られ、結果出力２０３ａとレジスタ６１１の出力６１１ａが入力されたセレクタ３０３からは、セレクタ信号ｓｅｌ３により選択されたセレクタ出力３０３ａが得られ、結果出力２０４ａとレジスタ６１２の出力６１２ａが入力されたセレクタ３０４からは、セレクタ信号ｓｅｌ４により選択されたセレクタ出力３０４ａが得られ、結果出力２０５ａとレジスタ６１３の出力６１３ａが入力されたセレクタ３０５からは、セレクタ信号ｓｅｌ５により選択されたセレクタ出力３０５ａが得られ、結果出力２０６ａとレジスタ６１４の出力６１４ａが入力されたセレクタ３０６からは、セレクタ信号ｓｅｌ６により選択されたセレクタ出力３０６ａが得られ、結果出力２０７ａとレジスタ６１５の出力６１５ａが入力されたセレクタ３０７からは、セレクタ信号ｓｅｌ７により選択されたセレクタ出力３０７ａが得られる。
【００３８】
続いて、上記で得られたセレクタ出力３００ａがシフタ４００に入力され、外部から入力される１ビット以上のシフト値信号ｓｆｔ０により示されるシフト値分右シフトされ、シフタ出力４００ａが得られる。同様に、セレクタ出力３０１ａが入力されたシフタ４０１からは、シフト値信号ｓｆｔ１により示されるシフト値分右シフトされたシフタ出力４０１ａが得られ、セレクタ出力３０２ａが入力されたシフタ４０２からは、シフト値信号ｓｆｔ２により示されるシフト値分右シフトされたシフタ出力４０２ａが得られ、セレクタ出力３０３ａが入力されたシフタ４０３からは、シフト値信号ｓｆｔ３により示されるシフト値分右シフトされたシフタ出力４０３ａが得られ、セレクタ出力３０４ａが入力されたシフタ４０４からは、シフト値信号ｓｆｔ４により示されるシフト値分右シフトされたシフタ出力４０４ａが得られ、セレクタ出力３０５ａが入力されたシフタ４０５からは、シフト値信号ｓｆｔ５により示されるシフト値分右シフトされたシフタ出力４０５ａが得られ、セレクタ出力３０６ａが入力されたシフタ４０６からは、シフト値信号ｓｆｔ６により示されるシフト値分右シフトされたシフタ出力４０６ａが得られ、セレクタ出力３０７ａが入力されたシフタ４０７からは、シフト値信号ｓｆｔ７により示されるシフト値分右シフトされたシフタ出力４０７ａが得られる。
【００３９】
続いて、上記で得られたシフタ出力４００ａとシフタ出力４０１ａが加減算器５００に入力され、外部から入力される１ビットの加減算選択信号ａｓ０により加算もしくは減算され、シフタ出力４００ａ，４０１ａの加減算結果出力５００ａが得られる。同様に、シフタ出力４０２ａとシフタ出力４０３ａが入力された加減算器５０１からは、加減算選択信号ａｓ１により加算もしくは減算されたシフタ出力４０２ａ，４０３ａの加減算結果出力５０１ａが得られ、シフタ出力４０４ａとシフタ出力４０５ａが入力された加減算器５０２からは、加減算選択信号ａｓ２により加算もしくは減算されたシフタ出力４０４ａ，４０５ａの加減算結果出力５０２ａが得られ、シフタ出力４０６ａとシフタ出力４０７ａが入力された加減算器５０３からは、加減算選択信号ａｓ３により加算もしくは減算されたシフタ出力４０６ａ，４０７ａの加減算結果出力５０３ａが得られる。
【００４０】
続いて、上記で得られた加減算結果出力５００ａがシフタ４０８に入力され、外部から入力される１ビット以上のシフト値信号ｓｆｔ８により示されるシフト値分右シフトされたシフタ出力４０８ａをレジスタ６１６に格納する。同様に、加減算結果出力５０１ａをシフタ４０９に入力し、シフト値信号ｓｆｔ９により示されるシフト値分右シフトされたシフタ出力４０９ａをレジスタ６１７に格納し、加減算結果出力５０２ａをシフタ４１０に入力し、シフト値信号ｓｆｔ１０により示されるシフト値分右シフトされたシフタ出力４１０ａをレジスタ６１８に格納し、加減算結果出力５０３ａをシフタ４１１に入力し、シフト値信号ｓｆｔ１１により示されるシフト値分右シフトされたシフタ出力４１１ａをレジスタ６１９に格納する。
【００４１】
続いて、上記で得られたレジスタ出力６１６ａとシフタ出力４００ａがセレクタ３０８に入力され、外部から入力される１ビットのセレクタ信号ｓｅｌ８により選択され、セレクタ出力３０８ａが得られる。同様に、シフタ出力４０１ａとレジスタ出力６１７ａが入力されたセレクタ３０９からは、セレクタ信号ｓｅｌ９により選択されたセレクタ出力３０９ａが得られ、レジスタ出力６１８ａとシフタ出力４０６ａが入力されたセレクタ３１０からは、セレクタ信号ｓｅｌ１０により選択されたセレクタ出力３１０ａが得られ、シフタ出力４０７ａとレジスタ出力６１９ａが入力されたセレクタ３１１からは、セレクタ信号ｓｅｌ１１により選択されたセレクタ出力３１１ａが得られる。
【００４２】
続いて、上記で得られたセレクタ出力３０８ａとセレクタ出力３０９ａが加減算器５０４に入力され、加減算選択信号ａｓ４により加算もしくは減算されたセレクタ出力３０８ａ，３０９ａの加減算結果出力５０４ａが得られる。同様に、セレクタ出力３１０ａとセレクタ出力３１１ａが入力された加減算器５０５からは、加減算選択信号ａｓ５により加算もしくは減算されたセレクタ出力３１０ａ，３１１ａの加減算結果出力５０５ａが得られる。
【００４３】
続いて、上記で得られた加減算結果出力５０４ａがシフタ４１２に入力され、外部から入力される１ビット以上のシフト値信号ｓｆｔ１２により示されるシフト値分右シフトされたシフタ出力４１２ａをレジスタ６２０に格納する。同様に、加減算結果出力５０５ａをシフタ４１３に入力し、シフト値信号ｓｆｔ１３により示されるシフト値分右シフトされたシフタ出力４１３ａをレジスタ２１に格納する。
【００４４】
続いて、上記で得られたレジスタ出力６２０ａとシフタ出力４０２ａがセレクタ３１２に入力され、外部から入力される１ビットのセレクタ信号ｓｅｌ１２により選択され、セレクタ出力３１２ａが得られる。同様に、シフタ出力４０３ａとレジスタ出力６２１ａが入力されたセレクタ３１３からは、セレクタ信号ｓｅｌ１３により選択されたセレクタ出力３１３ａが得られ、レジスタ出力６２０ａとシフタ出力４０４ａが入力されたセレクタ３１４からは、セレクタ信号ｓｅｌ１４により選択されたセレクタ出力３１４ａが得られ、シフタ出力４０５ａとレジスタ出力６２１ａが入力されたセレクタ３１５からは、セレクタ信号ｓｅｌ１５により選択されたセレクタ出力３１５ａが得られる。
【００４５】
続いて、上記で得られたセレクタ出力３１２ａとセレクタ出力３１３ａが加減算器５０６に入力され、加減算選択信号ａｓ６により加算もしくは減算されたセレクタ出力３１２ａ，３１３ａの加減算結果出力５０６ａが得られる。同様に、セレクタ出力３１４ａとセレクタ出力３１５ａが入力された加減算器５０７からは、加減算選択信号ａｓ７により加算もしくは減算されたセレクタ出力３１４ａ，３１５ａの加減算結果出力５０７ａが得られる。
【００４６】
続いて、上記で得られた加減算結果出力５０６ａがシフタ４１４に入力され、外部から入力されるシフト値信号ｓｆｔ１４により示されるシフト値分右シフトしたシフタ出力４１４ａをレジスタ６２２に格納する。同様に、加減算結果出力５０７ａをシフタ４１５に入力し、シフト値信号ｓｆｔ１５により示されるシフト値分右シフトされたシフタ出力４１５ａをレジスタ６２３に格納する。尚、上記のレジスタ６１６〜６２３の出力６１６ａ〜６２３ａは、いずれも外部に出力できる。
【００４７】
尚、上記実施の形態３では、実施の形態２の構成に対してレジスタ６０８〜６２３を設けたが、実施の形態１の構成に対して設けるようにしてもよい。
【００４８】
以上のように、実施の形態３の動的再構成可能な積和演算装置によれば、乗算器、第２シフタ、第３シフタ、第４シフタの出力をそれぞれ保持する記憶素子を設けたので、乗算器の演算結果出力と加減算出力をシフトした演算結果出力を保持することができ、その結果、パイプライン動作が可能となり、装置全体のスループットを向上させることができる。
【００４９】
実施の形態４．
図５は、この発明の実施の形態４における積和演算処理向けの動的再構成可能プロセッサを示す構成図である。
図５において、動的再構成可能プロセッサ１は、実施の形態１〜３の動的再構成可能な積和演算装置のうちのいずれかである積和演算装置２と、積和演算装置２に入力される演算前のデータを格納する入力バッファ３および入力バッファ４と、演算前のデータあるいは演算後のデータを格納する入出力バッファ５、入出力バッファ６、入出力バッファ７と、入力バッファ３，４および入出力バッファ５〜７のいずれかより積和演算装置２に入力するデータを選択する入力セレクタ部８と、積和演算装置２の出力格納先を選択する出力セレクタ部９と、積和演算装置２をはじめとする動的再構成可能プロセッサ１の各部のコンフィグレーションデータを複数種類分格納するコンフィグレーションメモリ１０と、入力バッファ３，４、入出力バッファ５〜７、コンフィグレーションメモリ１０をはじめとする動的再構成可能プロセッサ１の各メモリに対する制御信号を生成するメモリ制御信号生成部１１と、入力バッファ３，４および入出力バッファ５〜７における積和演算装置２に入力されるデータの格納元アドレスと、入出力バッファ５〜７における積和演算装置２から出力されるデータの格納元アドレスを出力するアドレス制御部１２と、アドレス制御部１２から出力される出力データ格納元アドレスを積和演算装置２のパイプライン段数分遅延させる出力データ格納先アドレス遅延部１３と、外部ＣＰＵ（外部プロセッサ）１５からの命令をデコードする命令Ｉ／Ｆ（インタフェース）部１４を備える。
【００５０】
外部ＣＰＵ１５は、外部メモリ１６に格納されているコンフィグレーションデータをバス１７、信号線１８を介してコンフィグレーションメモリ１０に転送し、動的再構成可能プロセッサ１を動的に回路構成可能な状態に準備する。このとき、メモリ制御信号生成部１１は、外部より入力されたアドレス１９を動的再構成可能プロセッサ１の各バッファおよびメモリを制御する信号２０に変換し、出力する。また、積和演算装置２において演算されるデータも外部メモリ１６から入力バッファ３もしくは入力バッファ４に転送する。
【００５１】
続いて、ＣＰＵ１５は命令２１によってコンフィグレーション指示を出す。命令Ｉ／Ｆ部１４は、入力された命令２１をデコードし、命令コード２２と命令引数２３を出力する。コンフィグレーション時には、命令コード２２にはコンフィグレーションを指示するコードが出力され、命令引数２３にはコンフィグレーションメモリのアドレスが出力される。コンフィグレーションメモリ１０は命令引数２３により指示されたアドレスに格納しているコンフィグレーションデータ２４を出力し、動的再構成可能プロセッサ１の各部の回路を構成し演算開始可能な状態にする。
【００５２】
演算開始可能となった後、ＣＰＵ１５は演算実行を命令する。演算実行の命令２１が入力された命令Ｉ／Ｆ部１４は、演算実行を示す命令コード２２と積和演算装置２の入力データ格納元アドレスと出力データ格納先アドレスを生成するための命令引数２３をアドレス制御部１２に出力する。アドレス制御部１２はこれらの信号から入力データ格納元アドレスと出力データ格納先アドレス２５を生成し、各バッファと入力セレクタ部８へ出力する。このとき、積和演算装置２が複数段のパイプライン構成をとっている場合、積和演算装置２の出力データ２６は、パイプライン段数のサイクル分遅れて出力されるため、出力データ格納先アドレスも同じサイクル分遅らせる必要がある。そのため、アドレス制御部１２で生成されたアドレス２５は出力データ格納先アドレス遅延部１３によって遅延され、出力格納先アドレス２７として各入出力バッファと出力セレクタ９へ出力される。即ち、出力データ格納先アドレス遅延部１３は、積和演算装置２に備えた記憶素子の段数分、積和演算装置２の出力格納先アドレスを遅延させる。入力データ格納元アドレスを受け取った各バッファと入力セレクタ部８によって各バッファから出力されたデータ２８の中から積和演算装置２で演算されるデータが選択され、積和演算装置２へ入力データ２９が入力される。
【００５３】
積和演算装置２で演算された結果の出力データ２６は出力セレクタ部９によってデータの並び順等が変更されて、出力データ３０として入出力バッファ５〜７のいずれかに格納される。最終的に動的再構成可能プロセッサ１の外部へ出力されるデータ３１は入出力バッファ５〜７のいずれかからバス１７を介して外部メモリ１６に転送される。上記外部メモリ１６と各バッファ間でのデータ転送の際に、ＣＰＵ１５を介さずにＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）コントローラ３２を使用することで、例えば、入力バッファ３から入力データを読み出して積和演算装置２が処理を実行しているのと並行して、外部メモリ１６から入力バッファ４へ次の演算で使用する入力データを転送することができる。また、入出力バッファ５を積和演算装置２の出力データ格納先として使用しているのと並行して、前の演算結果が格納されている入出力バッファ６または入出力バッファ７から外部メモリ１６へデータを転送することもできる。
【００５４】
以上のように、実施の形態４の動的再構成可能プロセッサによれば、実施の形態１から実施の形態３のうちのいずれかの動的再構成可能な積和演算装置と、動的再構成可能な積和演算装置における演算前のデータを格納する入力バッファと、動的再構成可能な積和演算装置における演算前のデータまたは演算後のデータを格納する入出力バッファと、入力バッファと入出力バッファから動的再構成可能な積和演算装置での演算対象データを選択し、動的再構成可能な積和演算装置に供給する入力セレクタ部と、動的再構成可能な積和演算装置の出力を選択して入出力バッファに出力する出力セレクタ部と、動的再構成可能な積和演算装置の回路構成情報と入力セレクタ部の選択指示情報と出力セレクタ部の選択指示情報と入力データバッファの制御情報と入出力バッファの制御情報を格納するコンフィグレーションメモリと、入力バッファまたは入出力バッファまたはコンフィグレーションメモリと、外部間とのデータ転送時に外部からのアドレス指示に基づいて、入力バッファと入出力バッファとコンフィグレーションメモリの制御信号を生成するメモリ制御信号生成部と、動的再構成可能な積和演算装置に入力されるデータの格納元アドレスと動的再構成可能な積和演算装置からの出力データの格納先アドレスを制御するアドレス制御部と、外部プロセッサからの命令をデコードする命令Ｉ／Ｆ部とを備え、外部プロセッサからの指示により、任意の演算を行うようにしたので、任意の入力数の積和演算、フィルタ演算、バタフライ演算、足し合わせ演算、行列演算といった様々な演算を行うプロセッサを容易に実現することができる。
【００５５】
また、実施の形態４の動的再構成可能プロセッサによれば、入力バッファは、動的再構成可能な積和演算装置への入力データの格納元となるバッファ面以外に、このバッファ面とは別に制御可能なバッファ面を有するようにしたので、動的再構成可能な積和演算装置への入力データ格納元となるバッファ面と、外部からのデータ転送入力を行うバッファ面として使用するといったように、バッファ面を並行して使用でき、処理効率を向上させることができる。
【００５６】
また、実施の形態４の動的再構成可能プロセッサによれば、入出力バッファは、動的再構成可能な積和演算装置への入力データの格納元となるバッファ面または動的再構成可能な積和演算装置からの出力データの格納先となるバッファ面以外に、このバッファ面とは別に制御可能なバッファ面を有するようにしたので、動的再構成可能な積和演算装置への入力データ格納元となるバッファ面と、動的再構成可能な積和演算装置の出力データ格納先となるバッファ面として並行して使用し、動的再構成可能な積和演算装置の演算結果を再び積和演算装置の入力としてフィードバックできるだけでなく、外部とのデータ転送入出力を行うバッファ面と、積和演算装置の出力データ格納先となるバッファ面といったようにバッファ面を並行して使用することができ、処理効率を向上させることができる。
【００５７】
また、実施の形態４の動的再構成可能プロセッサによれば、動的再構成可能な積和演算装置に備えた記憶素子の段数分、動的再構成可能な積和演算装置の出力格納先アドレスを遅延させるための出力データ格納先アドレス遅延部を備えたので、動的再構成可能な積和演算装置のパイプライン動作が可能となる。
【００５８】
実施の形態５．
図６−１から図６−３は、この発明の実施の形態５における動的再構成可能プロセッサの入力セレクタ部を示すものである。
図５の動的再構成可能プロセッサ１における積和演算装置２は、入力データを２つの格納元から読み出すことが可能である。図６−１および図６−２において、１段目入力セレクタ３３は、入力バッファ３，４および入出力バッファ５〜７から、積和演算装置２への一方の入力データが格納されているバッファを選択するためのセレクタであり、１段目入力セレクタ３４は、もう一方の入力データが格納されているバッファを選択するためのセレクタである。
【００５９】
ここで、入力バッファ３，４は１ワード１２８ビットであるのに対し、入出力バッファ５〜７は１ワード２５６ビットとする。これは、積和演算装置２における出力データが入力データの倍のビット数として出力される場合を想定している。１段目入力セレクタ３３において、１２８ビットデータである入力バッファ３の出力３ａがデータ結合器３３０によって下位に１２８ビットの“０”を結合されることで２５６ビットのデータ３３０ａが出力され、同様に、１２８ビットデータである入力バッファ４の出力４ａがデータ結合器３３１によって下位に１２８ビットの“０”を結合されることで２５６ビットのデータ３３１ａが出力され、５ｔｏ１セレクタ３３２には２５６ビットの出力３３０ａ，出力３３１ａ，出力５ａ，出力６ａ，出力７ａが入力され、３ビットのｓｅｌ＿ｉｎｐｕｔ００によって選択された２５６ビットのデータ３３ａが出力される。
【００６０】
同様に、１段目入力セレクタ３４において、１２８ビットデータである入力バッファ３の出力３ａがデータ結合器３４０によって下位に１２８ビットの“０”を結合されることで２５６ビットのデータ３４０ａが出力され、同様に、１２８ビットデータである入力バッファ４の出力４ａがデータ結合器３４１によって下位に１２８ビットの“０”を結合されることで２５６ビットのデータ３４１ａが出力され、５ｔｏ１セレクタ３４２には２５６ビットの出力３４０ａ，３４１ａ、出力５ａ，６ａ，７ａが入力され、３ビットのｓｅｌ＿ｉｎｐｕｔ０１によって選択された２５６ビットのデータ３４ａが出力される。
【００６１】
続いて、２段目入力セレクタ３５に、２５６ビットである１段目入力セレクタ３３の出力３３ａが入力され、セレクト信号ｓｅｌ＿ｉｎｐｕｔ１０によって１２８ビット分のデータが選択されてデータ３５ａが出力される。このとき、２５６ビットから１２８ビットへのデータ選択方法は４通りあり、１つ目は２５６ビットの信号３３ａを連続する１６ビットデータ１６個として扱い、前半の１６個のデータを出力３５ａとして選択する場合と、２つ目は２５６ビットの信号３３ａを連続する１６ビットデータ１６個として扱い、後半の１６個のデータを出力３５ａとして選択する場合と、３つ目は２５６ビットの信号３３ａを連続する３２ビットデータ８個として扱い、各８データのうち上位１６ビットのみを集めて出力３３ａとして選択する場合と、４つ目は２５６ビットの信号３３ａを連続する３２ビットデータ８個として扱い、各８データのうち下位１６ビットのみを集めて出力３５ａとして選択する場合である。
【００６２】
同様に、２段目入力セレクタ３６には、２５６ビットである１段目入力セレクタ３４の出力３４ａが入力され、セレクト信号ｓｅｌ＿ｉｎｐｕｔ１１によって１２８ビット分のデータが選択されデータ３６ａが出力される。２５６ビットから１２８ビットへのデータ選択方法は４通りあり、１つ目は２５６ビットの信号３４ａを連続する１６ビットデータ１６個として扱い、前半の１６個のデータを出力３６ａとして選択する場合と、２つ目は２５６ビットの信号３４ａを連続する１６ビットデータ１６個として扱い、後半の１６個のデータを出力３６ａとして選択する場合と、３つ目は２５６ビットの信号３４ａを連続する３２ビットデータ８個として扱い、各８データのうち上位１６ビットのみを集めて出力３６ａとして選択する場合と、４つ目は２５６ビットの信号３４ａを連続する３２ビットデータ８個として扱い、各８データのうち下位１６ビットのみを集めて出力３６ａとして選択する場合である。
【００６３】
続いて、ローテータ３７に備えられている１２８ビットデータを１６ビットずつ８個に分けて格納するレジスタｒ００〜ｒ０７とｒ１０〜ｒ１７に、１２８ビットである２段目入力セレクタ３５の出力３５ａが入力され、続くサイクルでｒ００〜ｒ０７の出力３７０ａがｒ２０〜ｒ２７に、ｒ００〜ｒ０７とｒ１０〜ｒ１７には新たな出力３５ａが入力される。続いて、８ｔｏ１セレクタ３７１０にはレジスタｒ２０〜ｒ２７の８データが入力され、セレクタ３７１１にはレジスタｒ２１〜ｒ２７とｒ１０の８データが入力され、セレクタ３７１２にはｒ２２〜ｒ２７とｒ１０〜ｒ１１の８データ入力され、セレクタ３７１３にはｒ２３〜ｒ２７とｒ１０〜ｒ１２の８データが入力され、セレクタ３７１４にはｒ２４〜ｒ２７とｒ１０〜ｒ１３の８データが入力され、セレクタ３７１５にはｒ２５〜ｒ２７とｒ１０〜ｒ１４の８データが入力され、セレクタ３７１６にはｒ２６〜ｒ２７とｒ１０〜ｒ１５の８データが入力され、セレクタ３７１７にはｒ２７とｒ１０〜ｒ１６の８データ入力される。
【００６４】
各セレクタ３７１０〜３７１７には同じ３ビットのセレクト信号ｓｅｌ＿ｒｏｔ０が入力され、それぞれｓｅｌ＿ｒｏｔ０によって入力８データから１データが選択されて出力データ３７１０ａ〜３７１７ａが出力される。即ち、出力データ３７１０ａ〜３７１７ａには、ｓｅｌ＿ｒｏｔ０が０の場合はｒ２０〜ｒ２７のデータが選択出力され、ｓｅｌ＿ｒｏｔ０が１の場合はｒ２１〜ｒ２７とｒ１０のデータが選択出力され、ｓｅｌ＿ｒｏｔ０が２の場合はｒ２２〜ｒ２７とｒ１０〜ｒ１１のデータが選択出力され、ｓｅｌ＿ｒｏｔ０が３の場合はｒ２３〜ｒ２７とｒ１０〜ｒ１２のデータが選択出力され、ｓｅｌ＿ｒｏｔ０が４の場合はｒ２４〜ｒ２７とｒ１０〜ｒ１３のデータが選択出力され、ｓｅｌ＿ｒｏｔ０が５の場合はｒ２５〜ｒ２７とｒ１０〜ｒ１４のデータが選択出力され、ｓｅｌ＿ｒｏｔ０が６の場合はｒ２６〜ｒ２７とｒ１０〜ｒ１５のデータが選択出力され、ｓｅｌ＿ｒｏｔ０が７の場合はｒ２７とｒ１０〜ｒ１６のデータが選択出力される。
【００６５】
同様に、ローテータ３８に備えられている１２８ビットデータを１６ビットずつ８個に分けて格納するレジスタｒ０８〜ｒ０ｆとｒ１８〜ｒ１ｆに、１２８ビットである２段目入力セレクタ３６の出力３６ａが入力され、続くサイクルでｒ０８〜ｒ０ｆの出力３７０ｂがｒ２８〜ｒ２ｆに、ｒ０８〜ｒ０ｆとｒ１８〜ｒ１ｆには新たな出力３６ａが入力される。続いて、８ｔｏ１セレクタ３７１８にはレジスタｒ２８〜ｒ２ｆの８データが入力され、セレクタ３７１９にはレジスタｒ２９〜ｒ２ｆとｒ１８の８データが入力され、セレクタ３７１ａにはｒ２ａ〜ｒ２ｆとｒ１８〜ｒ１９の８データ入力され、セレクタ３７１ｂにはｒ２ｂ〜ｒ２ｆとｒ１８〜ｒ１ａの８データが入力され、セレクタ３７１ｃにはｒ２ｃ〜ｒ２ｆとｒ１８〜ｒ１ｂの８データが入力され、セレクタ３７１ｄにはｒ２ｄ〜ｒ２ｆとｒ１８〜ｒ１ｃの８データが入力され、セレクタ３７１ｅにはｒ２ｅ〜ｒ２ｆとｒ１８〜ｒ１ｄの８データが入力され、セレクタ３７１ｆにはｒ２ｆとｒ１８〜ｒ１ｅの８データ入力される。各セレクタ３７１８〜３７１ｆには同じセレクト信号ｓｅｌ＿ｒｏｔ１が入力され、ｓｅｌ＿ｒｏｔ１によってそれぞれ入力８データから１データが選択されて出力データ３７１８ａ〜３７１ｆａが出力される。
【００６６】
即ち、出力データ３７１８ａ〜３７１ｆａには、ｓｅｌ＿ｒｏｔ１が０の場合はｒ２８〜ｒ２ｆのデータが選択出力され、ｓｅｌ＿ｒｏｔ１が１の場合はｒ２９〜ｒ２ｆとｒ１８のデータが選択出力され、ｓｅｌ＿ｒｏｔ１が２の場合はｒ２ａ〜ｒ２ｆとｒ１８〜ｒ１９のデータが選択出力され、ｓｅｌ＿ｒｏｔ１が３の場合はｒ２ｂ〜ｒ２ｆとｒ１８〜ｒ１ａのデータが選択出力され、ｓｅｌ＿ｒｏｔ１が４の場合はｒ２ｃ〜ｒ２ｆとｒ１８〜ｒ１ｂのデータが選択出力され、ｓｅｌ＿ｒｏｔ１が５の場合はｒ２ｄ〜ｒ２ｆとｒ１８〜ｒ１ｃのデータが選択出力され、ｓｅｌ＿ｒｏｔ１が６の場合はｒ２ｅ〜ｒ２ｆとｒ１８〜ｒ１ｄのデータが選択出力され、ｓｅｌ＿ｒｏｔ１が７の場合はｒ２ｆとｒ１８〜ｒ１ｅのデータが選択出力される。
【００６７】
上記ローテータ３７，３８により、例えば、１ワード１２８ビット構成である入力バッファ３または入力バッファ４から、２ワードにまたがり連続する８データを読み出したい場合、１サイクル目で１ワード目、２サイクル目で２ワード目をローテータ３７，３８に入力することで、ローテータ３７の場合は２サイクル目でｒ２０〜ｒ２７に１ワード目の８データ、ｒ１０〜ｒ１７に２ワード目の８データが格納されることになり、ローテータ３８の場合は２サイクル目でｒ２８〜ｒ２ｆに１ワード目の８データ、ｒ１８〜ｒ１ｆに２ワード目の８データが格納されることになり、２ワード分のデータを連続する１６データとして扱うことができ、上記連続する１６データからセレクタ３７１０〜３７１７、３７１８〜３７１ｆにより連続する８データとして読み出し可能となる。
【００６８】
続いて、３段目入力セレクタ３９に、ローテータ３７の出力３７１０ａ〜３７１７ａと、ローテータ３８の出力３７１８ａ〜３７１ｆａが入力され、上記１６個の入力全てが、積和演算装置２の１６個の入力データ１００ａ〜１０７ａと入力データ１００ｂ〜１０７ｂにそれぞれ一対一で対応している１６ｔｏ１セレクタ３９０ａ〜３９７ａ，３９０ｂ〜３９７ｂ全てに入力され、それぞれセレクト信号ｓｅｌ＿ａ０〜７とｓｅｌ＿ｂ０〜７によって、１６データから１データずつ選択され、入力データ１００ａ〜１０７ａと入力データ１００ｂ〜１０７ｂが出力される。
【００６９】
このように、１ワードのビット数の異なるバッファや、２ワードにまたがっている連続データを扱うことができ、また、自由度の高いデータ選択を可能としたことで、積和演算装置２によって演算された結果出力を再び積和演算装置２の入力として使用することや、複雑なデータ取得が必要となる演算にも対応可能である。
【００７０】
以上のように、実施の形態５の動的再構成可能プロセッサによれば、入力セレクタ部は、入力バッファと入出力バッファからいずれか一つを選択する１段目入力セレクタと、１段目入力セレクタの出力のうち半数のデータを選択する２段目入力セレクタと、２段目入力セレクタの選択結果を２サイクル分保持したデータから連続する半数のデータを選択するローテータと、ローテータの出力を並び替えて動的再構成可能な積和演算装置へ出力する３段目入力セレクタとを備えるようにしたので、動的再構成可能プロセッサとして様々な演算に対応することができる。
【００７１】
実施の形態６．
図７は、この発明の実施の形態６における動的再構成可能プロセッサの出力セレクタ部を示すものである。
積和演算装置２は、常に８個の出力６１６ａ〜６２３ａ（図１〜図４参照）を出力する。積和演算装置２の出力６１６ａ〜６２３ａは出力セレクタ部９に入力され、８ｔｏ１セレクタ９００〜９０７全てに入力される。セレクタ９００からは、セレクト信号ｓｅｌ＿ｏ０によって出力６１６ａ〜６２３ａのうち１データが選択され、データ９００ａが出力される。同様に、セレクタ９０１からはｓｅｌ＿ｏ１によって選択されたデータ９０１ａが出力され、セレクタ９０２からはｓｅｌ＿ｏ２によって選択されたデータ９０２ａが出力され、セレクタ９０３からはｓｅｌ＿ｏ３によって選択されたデータ９０３ａが出力され、セレクタ９０４からはｓｅｌ＿ｏ４によって選択されたデータ９０４ａが出力され、セレクタ９０５からはｓｅｌ＿ｏ５によって選択されたデータ９０５ａが出力され、セレクタ９０６からはｓｅｌ＿ｏ６によって選択されたデータ９０６ａが出力され、セレクタ９０７からはｓｅｌ＿ｏ７によって選択されたデータ９０７ａが出力される。
【００７２】
上記８個の出力データ９００ａ〜９０７ａは、データ９００ａ側をＭＳＢとして連結され、１データ９ａとして出力される。即ち、積和演算装置２の１出力データが３２ビットである場合は、データ９ａは３２ビットのデータが８データ連結された、２５６ビットデータとして出力される。積和演算装置２で実現される演算によっては一部の出力のみ有効データ、残りの出力は無効データとなる場合があるが、このように、８個のセレクタそれぞれにおいて８個の出力データから選択可能としたことで、積和演算装置２の出力データを格納するバッファに無駄な領域を作らないようにデータを詰めながら格納することや、次の演算で入力データを読み出し易いようにデータを格納することが可能となり、メモリの使用効率のよいプロセッサを実現することができる。
【００７３】
以上のように、実施の形態６の動的再構成可能プロセッサによれば、出力セレクタ部は、動的再構成可能な積和演算装置の複数の出力を入力とする複数の選択手段を備え、動的再構成可能な積和演算装置の複数の出力を任意の順番に並べ替えるようにしたので、メモリの使用効率のよい動的再構成可能プロセッサを実現することができる。
【００７４】
実施の形態７．
図８はこの発明の実施の形態７における動的再構成可能プロセッサのアドレス制御部１２（図５を参照）の説明図である。
アドレス制御部１２は、ある演算における積和演算装置２から出力されるデータの格納先アドレスと、積和演算装置２へ入力されるデータの２つの格納元アドレスの組となっているアドレスデータを予め複数組分テーブルに格納しており、ＣＰＵ１５から入力される命令２１に含まれる命令引数２３によって示されたテーブルアドレスに格納されているアドレスデータを読み出し、積和演算装置２の各部へ出力する（図５中の入力データ格納元アドレスと出力データ格納先アドレス２５）。例えば、命令引数２３が０ｘ０００２を示している場合、図８において、テーブルアドレス０ｘ０００２に格納されている、出力データ格納先アドレスが０ｘ０１０２、入力データ０格納元アドレスが０ｘ０００４、入力データ１格納元アドレスが０ｘ０１０２のアドレスデータが読み出される。このとき、出力データ格納先アドレスと入力データ１格納元アドレスは同じ値を示しているが、アドレス制御部１２のテーブルに格納されているアドレスは、各バッファの内部アドレスを示すものであり、バッファの種類はコンフィグレーションデータ２４によって示される。このように、プロセッサ内部にあるアドレス制御部によって演算に使用するアドレスを生成することで、外部ＣＰＵ１５からの命令引数２３のビット数を少なくすることができる。
【００７５】
このように、実施の形態７の動的再構成可能プロセッサによれば、アドレス制御部は、一つまたは二つの動的再構成可能な積和演算装置への入力データ格納元アドレスと一つの動的再構成可能な積和演算装置からの出力データ格納先アドレスの組み合わせデータを複数種類格納可能なテーブルを有し、テーブルの組み合わせデータは、動的再構成可能な積和演算装置による処理が開始される前に格納されると共に、積和演算処理実行時に外部プロセッサからの指示に基づいて、使用する組み合わせデータを選択し、入力バッファの入力データ格納元アドレスと、入出力バッファの入力データ格納元アドレスまたは出力データ格納先アドレスを決定するようにしたので、外部プロセッサからの命令引数のビット数を少なくすることができる。
【００７６】
次に、音響アプリケーションの一つであるエコーキャンセラ等で用いられる適応フィルタを例に、本発明の積和演算処理向け動的再構成可能プロセッサの動作例を説明する。
以下に１フレーム分の適応フィルタ処理のアルゴリズムを式１〜６に示す。idx_sampleはサンプルのインデックスを示し、ここでは１フレームのサンプル数を８０とする。idx_tapはタップのインデックスを示し、ここではタップ数を３２０とする。まず、適応ガンマ係数と一つ前のサンプルの出力データを乗算し、ｗビット右シフトした結果をＤｅｌｔａ２とする（式１）。このとき、idx_sampleが０のとき、一つ前のサンプルの出力データとは、前フレームの最終サンプルの出力データとなる。次に、上記で求めたＤｅｌｔａ２と参照信号を乗算し、ＬＳＢ側ｘビットの誤差を吸収するために1<<(x-1)を加算した後ｘビット右シフトした結果をＭｕｘ１とする（式２）。
【００７７】
上記Ｍｕｘ１と前のサンプルで使用した適応フィルタ係数を加算し、新たな適応フィルタ係数とする（式３）。上記更新した適応フィルタ係数と参照信号を乗算した結果をＳｕｍ’に累算する（式４）。上記式２〜４をタップ数分実行した後、累算結果Ｓｕｍ’をｚビット右シフトし（式５）、得られたＳｕｍ（０−３１９）とマイク入力データの差を求めた結果が出力データとなる（式６）。式４〜５で示される演算は３２０タップ分の積和演算に相当するが、本発明の実施の形態１〜３に示す積和演算装置の乗算器並列数が８であることから、３２０タップの積和演算を８タップずつの積和演算を４０回に分けて実行した後、上記８タップずつの積和演算結果を８個ずつ５回に分けて足し合わせ、得られた５個の足し合わせ演算結果を５個足し合わせる演算によって足し合わせ、最後にｚビットシフトすることで実現する。
【００７８】
以降、式１で示す演算をＤｅｌｔａ２演算、式２で示す演算をＭｕｘ１演算、式３で示す演算をａｏｕｔ演算、式６で示す演算をｅｏｕｔ演算と呼ぶ。また、式４〜５で示す演算については、式４の演算を８タップ分並列処理する演算を８ｍｕｌ＿ａｄｄ演算、８ｍｕｌ＿ａｄｄ演算の出力を８個ずつ足し合わせる演算を８Ｔ＿ａｄｄ演算、８Ｔ＿ａｄｄ演算の出力を５個足し合わせる演算を５Ｔ＿ａｄｄ演算と呼ぶ。
【００７９】
【数１】
2010160632.tif 000003
【００８０】
図９は、本発明の動的再構成可能プロセッサで上記の適応フィルタ処理を実行する手順を示す説明図である。
［Ｐ１］コンフィグレーションデータをコンフィグレーションメモリ１０に転送し、アドレス制御部１２内のアドレステーブルにアドレスデータを転送する。
［Ｐ２］初期の適応フィルタ係数を入出力バッファ６に転送する。
［Ｐ３］１フレーム前の最終サンプルの出力データを入出力バッファ５に転送する。
［Ｐ４］１フレーム分の参照信号を入力バッファ３に転送する。
［Ｐ５］マイク入力データと適応用ガンマ係数を入力バッファ４に転送する。
［Ｐ６］Ｄｅｌｔａ２演算用回路を構成する。
［Ｐ７］入力バッファ４から適応用ガンマ係数を、入出力バッファ５から１フレーム前の最終サンプルの出力データを読み出し（［Ｐ８］）、積和演算装置２でＤｅｌｔａ２演算を１回実行する。演算結果を入出力バッファ７に格納する（［Ｐ９］）。
［Ｐ１０］Ｍｕｘ１演算用回路を構成する。
【００８１】
［Ｐ１１］入出力バッファ７からＤｅｌｔａ２の演算結果を、入力バッファ３から参照信号を読み出し（［Ｐ１２］）、Ｍｕｘ１演算を８０回実行する。演算結果を入出力バッファ５に格納する（［Ｐ１３］）。
［Ｐ１４］ａｏｕｔ演算用回路を構成する。
［Ｐ１５］入出力バッファ６から更新前の適応フィルタ係数を、入出力バッファ５からＭｕｘ１を読み出し（［Ｐ１６］）、ａｏｕｔ演算を８０回実行する。演算結果である更新後の適応フィルタ係数を入出力バッファ７に格納する（［Ｐ１７］）。
［Ｐ１８］８ｍｕｌ＿ａｄｄ演算用回路を構成する。
［Ｐ１９］入力バッファ３から参照信号を、入出力バッファ７から更新後の適応フィルタ係数を読み出し（［Ｐ２０］）、８ｍｕｌ＿ａｄｄ演算を４０回実行する。演算結果を入出力バッファ６に格納する（［Ｐ２１］）。
【００８２】
［Ｐ２２］８Ｔ＿ａｄｄ演算用回路を構成する。
［Ｐ２３］入出力バッファ６から８ｍｕｌ＿ａｄｄ演算結果を読み出し（［Ｐ２４］）、８Ｔ＿ａｄｄ演算を５回実行する。演算結果を入出力バッファ７に格納する（［Ｐ２５］）。
［Ｐ２６］５Ｔ＿ａｄｄ演算用回路を構成する。
［Ｐ２７］入出力バッファ７から８Ｔ＿ａｄｄ演算結果を読み出し（［Ｐ２８］）、５Ｔ＿ａｄｄを１回実行する。演算結果ＳＵＭ（０−３１９）を入出力バッファ６に格納する（［Ｐ２９］）。
［Ｐ３０］ｅｏｕｔ演算用回路を構成する。
［Ｐ３１］入出力バッファ６から５Ｔ＿ａｄｄ演算結果ＳＵＭ（０−３１９）を、入力バッファ４からマイク入力データを読み出し（［Ｐ３２］）、ｅｏｕｔ演算を１回実行する。演算結果である出力データを入出力バッファ５に格納する（［Ｐ３３］）。
【００８３】
以上、［Ｐ６］〜［Ｐ３３］を入力バッファ３と入力バッファ４を交互に使用して、１フレーム分８０サンプル分繰り返し実行する。
［Ｐ３４］１フレーム８０サンプル分の演算が終了後、入出力バッファ５から１フレーム分の出力データと更新後の適応フィルタ係数を外部メモリ１６へ転送する。
以降、［Ｐ４］〜［Ｐ３４］をフレーム毎に繰り返し実行することで、適応フィルタ処理を実現することができる。
【００８４】
以下に、実施の形態３による積和演算装置を用いて、上記適応フィルタ処理の各演算を行う場合の回路構成を示す。ここでは、入力データ１００ａ〜１０７ａおよび入力データ１００ｂ〜１０７ｂには１６ビットのデータが入力され、乗算器１００〜１０７とデータ結合器２００〜２０７によって３２ビットとなり、以降３２ビットで演算され、最終のレジスタ出力６１６ａ〜６２３ａも３２ビットであるものとして説明する。
【００８５】
図１０−１および図１０−２に、Ｄｅｌｔａ２演算用回路構成を示す。
入力データ１００ａには入力バッファ４に格納されている適応用ガンマ係数（ｉｄｘ＿ｓａｍｐｌｅ）を、入力データ１００ｂには入出力バッファ５に格納されている１サンプル前の出力データである出力データ（ｉｄｘ＿ｓａｍｐｌｅ−１）を入力し、残りの入力データ１０１ａ〜１０７ａと入力データ１０１ｂ〜１０７ｂには任意の値を入力する。続いてセレクタ３１６に入力された入力データ１００ｂはセレクト信号ｓｅｌ１６によって選択されデータ３１６ａとして出力される。上記入力データ１００ａとセレクタ出力３１６ａが入力された乗算器１００の乗算結果出力１００ｃ＝入力データ１００ａ×入力データ１００ｂ＝適応用ガンマ係数（ｉｄｘ＿ｓａｍｐｌｅ）×出力データ（ｉｄｘ＿ｓａｍｐｌｅ−１）はレジスタ６０８に格納される。
【００８６】
上記レジスタ６０８の出力６０８ａはセレクタ３００に入力され、セレクト信号ｓｅｌ０によって選択される。上記セレクタ３００の出力３００ａはシフタ４００に入力され、シフト値信号ｓｆｔ０によって示されるｗビット分右シフトされる。即ち、シフト出力４００ａは、“適応用ガンマ係数（ｉｄｘ＿ｓａｍｐｌｅ）×出力データ（ｉｄｘ＿ｓａｍｐｌｅ−１）＞＞ｗ”である。
一方で、入力データ１０１ａと入力データ１０１ｂには任意の値が、レジスタ６０１には“０”がセットされ、入力データ１０１ｂと上記レジスタ６０１の出力６０１ａが入力されたセレクタ３１７ではセレクト信号ｓｅｌ１７によってレジスタ出力６０１ａが選択されてデータ３１７ａは“０”となる。上記データ３１７ａと入力データ１０１ａが入力された乗算器１０１からは“０”が出力され、レジスタ６０９に格納される。セレクタ３０１に入力された上記レジスタ６０９の出力６０９ａはセレクト信号ｓｅｌ１によって選択され、上記セレクタ３０１の出力３０１ａはシフタ４０１に入力される。
【００８７】
シフト信号ｓｆｔ１には“０”が指示されているため出力３０１ａはシフトされずにシフタ出力４０１ａとして出力される。即ち、シフタ出力４０１ａは“０”である。上記出力４０１ａとシフタ４００の出力４００ａが入力された加減算器５００では加減算選択信号ａｓ０によって加算が選択され、出力４０１ａ、即ち“０”と、出力４００ａの加算結果５００ａが出力される。上記出力５００ａはシフタ４０８に入力され、シフト値信号ｓｆｔ８には“０”が指示されているためシフタ出力４０８ａには、出力５００ａ＝適応用ガンマ係数（ｉｄｘ＿ｓａｍｐｌｅ）×出力データ（ｉｄｘ＿ｓａｍｐｌｅ−１）＞＞ｗが出力される。上記出力４０８ａはレジスタ６１６に格納された後、レジスタ出力６１６ａとして出力される。このレジスタ出力６１６ａがＤｅｌｔａ２（ｉｄｘ＿ｓａｍｐｌｅ）である。
【００８８】
これと並行して、入力データ１０６ａと入力データ１０６ｂに任意の値が、また、レジスタ６０６に“０”がセットされ、入力データ１０６ｂと上記レジスタ６０６の出力６０６ａが入力されたセレクタ３２２ではセレクト信号ｓｅｌ２２によってレジスタ出力６０６ａが選択されてデータ３２２ａは“０”となる。上記データ３２２ａと入力データ１０６ａが入力された乗算器１０６からは“０”が出力され、レジスタ６１４に格納される。セレクタ３０６に入力された上記レジスタ６１４の出力６１４ａはセレクト信号ｓｅｌ６によって選択され、上記セレクタ３０６の出力３０６ａはシフタ４０６に入力される。シフト信号ｓｆｔ６には“０”が指示されているため出力３０６ａはシフトされずにシフタ出力４０６ａ＝“０”が出力される。
【００８９】
同様に、入力データ１０７ａと入力データ１０７ｂに任意の値が、また、レジスタ６０７に“０”がセットされ、入力データ１０７ｂと上記レジスタ６０７の出力６０７ａが入力されたセレクタ３２３ではセレクト信号ｓｅｌ２３によって出力６０７ａが選択されてデータ３２３ａは“０”となる。上記データ３２３ａと入力データ１０７ａが入力された乗算器１０７からは“０”が出力され、レジスタ６１５に格納される。セレクタ３０７に入力された上記レジスタ６１５の出力６１５ａはセレクト信号ｓｅｌ７によって選択され、上記セレクタ３０７の出力３０７ａはシフタ４０７に入力される。シフト信号ｓｆｔ７には“０”が指示されているため出力３０７ａはシフトされずにシフタ出力４０７ａ＝“０”が出力される。
【００９０】
上記出力４０６ａと出力４０７ａが入力された加減算器５０３では加減算選択信号ａｓ３により加算が選択され、出力４０６ａと出力４０７ａ＝“０”と“０”の加算結果５０３ａが出力される。出力５０３ａは“０”であるシフト値信号ｓｆｔ１１が指示されているシフタ４１１においてシフトされずにそのままシフタ出力４１１ａ＝“０”として出力され、レジスタ６１９に格納され、出力６１９ａ＝“０”が出力される。上記出力６１９ａは、本Ｄｅｌｔａ２演算の直後に行うＭｕｘ１演算の入力として使用されるものであり、出力６１６ａ＝Ｄｅｌｔａ２と共に入出力バッファ７に格納される。このとき、入出力バッファ７には、次のＭｕｘ１演算の入力形式に合わせて、Ｄｅｌｔａ２と“０”が交互に４回ずつ並ぶように、即ち、Ｄｅｌｔａ２＿“０”＿Ｄｅｌｔａ２＿“０”＿Ｄｅｌｔａ２＿“０”＿Ｄｅｌｔａ２＿“０”という順番で１ワードに格納する。
【００９１】
図１１−１および図１１−２に、Ｍｕｘ１演算用回路構成を示す。
入力データ１００ａ〜１０７ａには、上記Ｄｅｌｔａ２演算で求めたＤｅｌｔａ２と“０”を交互に入力し、入力データ１００ｂ〜１０７ｂには、入力バッファ３に格納されている参照信号と任意の値を交互に入力する。入力データ１００ｂ＝参照信号（ｉｄｘ＿ｔａｐ＝０）はセレクタ３１６に入力され、セレクト信号ｓｅｌ１６によって選択され、出力３１６ａとして出力される。同様に、セレクタ３１８に入力された入力データ１０２ｂ＝参照信号（ｉｄｘ＿ｔａｐ＝１）はセレクト信号ｓｅｌ１８によって選択されて出力３１８ａとして出力され、セレクタ３２０に入力された入力データ１０４ｂ＝参照信号（ｉｄｘ＿ｔａｐ＝２）はセレクト信号ｓｅｌ２０によって選択されて出力３２０ａとして出力され、セレクタ３２２に入力された入力データ１０６ｂ＝参照信号（ｉｄｘ＿ｔａｐ＝３）はセレクト信号ｓｅｌ２２によって選択されて出力３２２ａとして出力される。
【００９２】
上記セレクタ出力３１６ａ＝参照信号（ｉｄｘ＿ｔａｐ＝０）と入力データ１００ａ＝Ｄｅｌｔａ２は乗算器１００で乗算され、乗算結果出力１００ｃ＝Ｄｅｌｔａ２×参照信号（ｉｄｘ＿ｔａｐ＝０）はレジスタ６０８に格納される。同様に、セレクタ出力３１８ａ＝参照信号（ｉｄｘ＿ｔａｐ＝１）と入力データ１０２ａ＝Ｄｅｌｔａ２が入力された乗算器１０２からは乗算結果出力１０２ｃ＝Ｄｅｌｔａ２×参照信号（ｉｄｘ＿ｔａｐ＝１）が出力されてレジスタ６１０に格納され、セレクタ出力３２０ａ＝参照信号（ｉｄｘ＿ｔａｐ＝２）と入力データ１０４ａ＝Ｄｅｌｔａ２が入力された乗算器１０４からは乗算結果出力１０４ｃ＝Ｄｅｌｔａ２×参照信号（ｉｄｘ＿ｔａｐ＝２）が出力されてレジスタ６１２に格納され、セレクタ出力３２２ａ＝参照信号（ｉｄｘ＿ｔａｐ＝３）と入力データ１０６ａ＝Ｄｅｌｔａ２が入力された乗算器１０６からは乗算結果１０６ｃ＝Ｄｅｌｔａ２×参照信号（ｉｄｘ＿ｔａｐ＝３）が出力されてレジスタ６１４に格納される。
【００９３】
一方、定数レジスタ６０１には“１＜＜（ｘ−１）”が入力され、レジスタ出力６０１ａはセレクタ３１７でセレクト信号ｓｅｌ１７によって選択されデータ３１７ａとして出力される。“０”である入力データ１０１ａと上記セレクタ出力３１７ａ＝“１＜＜（ｘ−１）”はデータ結合器２０１で結合され、出力２０１ａは上位側“０”、下位側“１＜＜（ｘ−１）”のデータ、即ち、“１＜＜（ｘ−１）”となり、セレクタ３０１にてセレクト信号ｓｅｌ１によって選択され、データ３０１ａとして出力される。同様に、定数レジスタ６０３に入力された“１＜＜（ｘ−１）”はレジスタ出力６０３ａとなり、セレクタ３１９でセレクト信号ｓｅｌ１９によって選択されデータ３１９ａとして出力された後、データ結合器２０３にて上位に“０”である入力データ１０３ａが結合され、結果出力２０３ａ＝“１＜＜（ｘ−１）”はセレクタ３０３にてセレクト信号ｓｅｌ３によって選択されデータ３０３ａとして出力される。
【００９４】
定数レジスタ６０５に入力された“１＜＜（ｘ−１）”はレジスタ出力６０５ａとなり、セレクタ３２１でセレクト信号ｓｅｌ２１によって選択されデータ３２１ａとして出力された後、データ結合器２０５にて上位に“０”である入力データ１０５ａが結合され、結果出力２０５ａ＝“１＜＜（ｘ−１）”はセレクタ３０５にてセレクト信号ｓｅｌ５によって選択されデータ３０５ａとして出力される。定数レジスタ６０７に入力された“１＜＜（ｘ−１）”はレジスタ出力６０７ａとなり、セレクタ３２３でセレクト信号ｓｅｌ２３によって選択されデータ３２３ａとして出力された後、データ結合器２０７にて上位に“０”である入力データ１０７ａが結合され、結果出力２０７ａ＝“１＜＜（ｘ−１）”はセレクタ３０７にてセレクト信号ｓｅｌ７によって選択されデータ３０７ａとして出力される。
【００９５】
上記セレクタ出力３００ａ〜３０７ａは、“０”であるシフト値信号ｓｆｔ０〜７が入力されるシフタ４００〜４０７に入力され、そのままシフタ出力４００ａ〜４０７ａとして出力される。即ち、シフタ出力４００ａは“Ｄｅｌｔａ２×参照信号（ｉｄｘ＿ｔａｐ＝０）”、シフタ出力４０１ａは“１＜＜（ｘ−１）”、シフタ出力４０２ａは“Ｄｅｌｔａ２×参照信号（ｉｄｘ＿ｔａｐ＝１）”、シフタ出力４０３ａは“１＜＜（ｘ−１）”、シフタ出力４０４ａは“Ｄｅｌｔａ２×参照信号（ｉｄｘ＿ｔａｐ＝２）”、シフタ出力４０５ａは“１＜＜（ｘ−１）”、シフタ出力４０６ａは“Ｄｅｌｔａ２×参照信号（ｉｄｘ＿ｔａｐ＝３）”、シフタ出力４０７ａは“１＜＜（ｘ−１）”である。
【００９６】
シフタ出力４００ａとシフタ出力４０１ａは加減算器５００に入力され、加減算選択信号ａｓ０により加算が選択されることから加減算結果出力５００ａ＝４００ａ＋４０１ａ＝Ｄｅｌｔａ２×参照信号（ｉｄｘ＿ｔａｐ＝０）＋１＜＜（ｘ−１）が出力される。同様に、加減算選択信号ａｓ１により加算が選択された加減算器５０１にはシフタ出力４０２ａとシフタ出力４０３ａが入力され、加算結果５０１ａ＝Ｄｅｌｔａ２×参照信号（ｉｄｘ＿ｔａｐ＝１）＋１＜＜（ｘ−１）が出力され、加減算選択信号ａｓ２により加算が選択された加減算器５０２にはシフタ出力４０４ａとシフタ出力４０５ａが入力され、加算結果５０２ａ＝Ｄｅｌｔａ２×参照信号（ｉｄｘ＿ｔａｐ＝２）＋１＜＜（ｘ−１）が出力され、加減算選択信号ａｓ３により加算が選択された加減算器５０３にはシフタ出力４０６ａとシフタ出力４０７ａが入力され、加算結果５０３ａ＝Ｄｅｌｔａ２×参照信号（ｉｄｘ＿ｔａｐ＝３）＋１＜＜（ｘ−１）が出力される。
【００９７】
上記加算結果５００ａ〜５０３ａは、それぞれ、シフト値信号ｓｆｔ８〜１１に“ｘ”が入力されたシフタ４０８〜４１１でｘビット右シフトされ、シフタ出力４０８ａ＝（Ｄｅｌｔａ２×参照信号（ｉｄｘ＿ｔａｐ＝０）＋１＜＜（ｘ−１））＞＞ｘがレジスタ６１６に格納される。同様に、シフタ出力４０９ａ＝（Ｄｅｌｔａ２×参照信号（ｉｄｘ＿ｔａｐ＝２）＋１＜＜（ｘ−１））＞＞ｘはレジスタ６１７に格納され、シフタ出力４１０ａ＝（Ｄｅｌｔａ２×参照信号（ｉｄｘ＿ｔａｐ＝２）＋１＜＜（ｘ−１））＞＞ｘはレジスタ６１８に格納され、シフタ出力４１１ａ＝（Ｄｅｌｔａ２×参照信号（ｉｄｘ＿ｔａｐ＝３）＋１＜＜（ｘ−１））＞＞ｘはレジスタ６１９に格納される。上記レジスタ６１６〜６１９の出力６１６ａ〜６１９ａは、それぞれ、Ｍｕｘ１（ｉｄｘ＿ｔａｐ＝０）〜Ｍｕｘ１（ｉｄｘ＿ｔａｐ＝３）として、入出力バッファ５に格納される。
【００９８】
以上のように一度のＭｕｘ１演算では４並列でＭｕｘ１が求められるため、３２０タップの適応フィルタの場合、参照信号のｉｄｘ＿ｔａｐを４ずつずらしながら８０回Ｍｕｘ１演算を繰り返せばよい。
【００９９】
図１２−１および図１２−２に、ａｏｕｔ演算用回路構成を示す。
入出力バッファ５から上記Ｍｕｘ１演算で求めた３２ビットの出力Ｍｕｘ１（ｉｄｘ＿ｔａｐ＝０）のうち上位１６ビットを入力データ１００ａ、下位１６ビットを入力データ１００ｂに入力し、Ｍｕｘ１（ｉｄｘ＿ｔａｐ＝１）のうち上位１６ビットを入力データ１０２ａ、下位１６ビットを入力データ１０２ｂに入力し、Ｍｕｘ１（ｉｄｘ＿ｔａｐ＝２）のうち上位１６ビットを入力データ１０４ａ、下位１６ビットを入力データ１０４ｂに入力し、Ｍｕｘ１（ｉｄｘ＿ｔａｐ＝３）のうち上位１６ビットを入力データ１０６ａ、下位１６ビットを入力データ１０６ｂに入力する。入力データ１０１ａ，１０３ａ，１０５ａ，１０７ａには入出力バッファ６から更新前の適応フィルタ係数ａｉｎ（ｉｄｘ＿ｔａｐ＝０）、ａｉｎ（ｉｄｘ＿ｔａｐ＝１）、ａｉｎ（ｉｄｘ＿ｔａｐ＝２）、ａｉｎ（ｉｄｘ＿ｔａｐ＝３）をそれぞれ入力し、入力データ１０１ｂ，１０３ｂ，１０５ｂ，１０７ｂには任意の値を入力する。
【０１００】
入力データ１００ｂはセレクタ３１６に入力され、セレクト信号ｓｅｌ１６によって選択されてデータ３１６ａとして出力される。同様に、セレクタ３１８に入力された入力データ１０２ｂはセレクト信号ｓｅｌ１８によって選択されデータ３１８ａとして出力され、セレクタ３２０に入力された入力データ１０４ｂはセレクト信号ｓｅｌ２０によって選択されデータ３２０ａとして出力され、セレクタ３２２に入力された入力データ１０６ｂはセレクト信号ｓｅｌ２２によって選択されデータ３２２ａとして出力される。一方、セレクタ３１７には入力データ１０１ｂとレジスタ６０１の出力６０１ａ＝“０”が入力され、セレクト信号ｓｅｌ１７によって出力６０１ａ＝“０”が選択されてデータ３１７ａとして出力される。同様に、入力データ１０３ｂとレジスタ６０３の出力６０３ａが入力されたセレクタ３１９からはセレクト信号ｓｅｌ１９によって選択された出力６０３ａがデータ３１９ａとして出力され、入力データ１０５ｂとレジスタ６０５の出力６０５ａが入力されたセレクタ３２１からはセレクト信号ｓｅｌ２１によって選択された出力６０５ａがデータ３２１ａとして出力され、入力データ１０７ｂとレジスタ６０７の出力６０７ａが入力されたセレクタ３２３からはセレクト信号ｓｅｌ２３によって選択された出力６０７ａがデータ３２３ａとして出力される。
【０１０１】
入力データ１００ａと出力３１６ａはデータ結合器２００に入力され、上位側に１００ａ、下位側に３１６ａが結合された結果出力２００ａ＝Ｍｕｘ１（ｉｄｘ＿ｔａｐ＝０）が出力される。同様に、入力データ１０２ａと出力３１８ａが入力されたデータ結合器２０２からは結果出力２０２ａ＝Ｍｕｘ１（ｉｄｘ＿ｔａｐ＝１）が出力され、入力データ１０４ａと出力３２０ａが入力されたデータ結合器２０４からは結果出力２０４ａ＝Ｍｕｘ１（ｉｄｘ＿ｔａｐ＝２）が出力され、入力データ１０６ａと出力３２２ａが入力されたデータ結合器２０６からは結果出力２０６ａ＝Ｍｕｘ１（ｉｄｘ＿ｔａｐ＝３）が出力される。
【０１０２】
また、入力データ１０１ａと出力３１７ａはデータ結合器２０１に入力され、上位側に入力データ１０１ａ＝ａｉｎ（ｉｄｘ＿ｔａｐ＝０）、下位側に出力３１７ａ＝１６ビットの“０”が結合された結果出力２０１ａ＝ａｉｎ（ｉｄｘ＿ｔａｐ＝０）＜＜１６が出力される。同様に、入力データ１０３ａと出力３１９ａが入力されたデータ結合器２０３からは結果出力２０３ａ＝ａｉｎ（ｉｄｘ＿ｔａｐ＝１）＜＜１６が出力され、入力データ１０５ａと出力３２１ａが入力されたデータ結合器２０５からは結果出力２０５ａ＝ａｉｎ（ｉｄｘ＿ｔａｐ＝２）＜＜１６が出力され、入力データ１０７ａと出力３２３ａが入力されたデータ結合器２０７からは結果出力２０７ａ＝ａｉｎ（ｉｄｘ＿ｔａｐ＝３）＜＜１６が出力される。続いて、結果出力２００ａ〜２０７ａは、それぞれセレクタ３００〜３０７に入力され、セレクト信号ｓｅｌ０〜ｓｅｌ７によって選択されてセレクタ出力３００ａ〜３０７ａとして出力される。
【０１０３】
セレクタ出力３００ａ，３０２ａ，３０４ａ，３０６ａは、それぞれシフタ４００，４０２，４０４，４０６に入力されるが、シフト値信号ｓｆｔ０，ｓｆｔ２，ｓｆｔ４，ｓｆｔ６が“０”であるため、シフトされずにシフタ出力４００ａ，４０２ａ，４０４ａ，４０６ａとして出力される。即ち、シフタ出力４００ａは“Ｍｕｘ１（ｉｄｘ＿ｔａｐ＝０）”、シフタ出力４０２ａは“Ｍｕｘ１（ｉｄｘ＿ｔａｐ＝１）”、シフタ出力４０４ａは“Ｍｕｘ１（ｉｄｘ＿ｔａｐ＝２）”、シフタ出力４０６ａは“Ｍｕｘ１（ｉｄｘ＿ｔａｐ＝３）”となる。セレクタ出力３０１ａ，３０３ａ，３０５ａ，３０７ａは、それぞれシフタ４０１，４０３，４０５，４０７に入力され、シフト値信号ｓｆｔ１，ｓｆｔ３，ｓｆｔ５，ｓｆｔ７が１６であるため１６ビット右シフトされて、シフタ出力４０１ａ＝ａｉｎ（ｉｄｘ＿ｔａｐ＝０）、シフタ出力４０３ａ＝ａｉｎ（ｉｄｘ＿ｔａｐ＝１）、シフタ出力４０５ａ＝ａｉｎ（ｉｄｘ＿ｔａｐ＝２）、シフタ出力４０７ａ＝ａｉｎ（ｉｄｘ＿ｔａｐ＝３）が出力される。このとき、入力データ１０１ａ，１０３ａ，１０５ａ，１０７ａに入力されたａｉｎは１６ビットの符号付きのデータであるが、データ結合器によって下位１６ビットに“０”を結合されたことで３２ビットデータとなり、さらにシフタによって１６ビット右シフトされたことで、上位１６ビットに符号ビットが拡張された３２ビットデータとして扱うことができる。
【０１０４】
上記シフタ出力４００ａとシフタ出力４０１ａは加減算器５００に入力され、加減算選択信号ａｓ０により加算が選択されることでシフタ出力４００ａ，４０１ａの加算結果５００ａ＝Ｍｕｘ１（ｉｄｘ＿ｔａｐ＝０）＋ａｉｎ（ｉｄｘ＿ｔａｐ＝０）が出力される。同様に、シフタ出力４０２ａとシフタ出力４０３ａが入力された加減算器５０１からは加算結果５０１ａ＝Ｍｕｘ１（ｉｄｘ＿ｔａｐ＝１）＋ａｉｎ（ｉｄｘ＿ｔａｐ＝１）が出力され、シフタ出力４０４ａとシフタ出力４０５ａが入力された加減算器５０２からは加算結果５０２ａ＝Ｍｕｘ１（ｉｄｘ＿ｔａｐ＝２）＋ａｉｎ（ｉｄｘ＿ｔａｐ＝２）が出力され、シフタ出力４０６ａとシフタ出力４０７ａが入力された加減算器５０３からは加算結果５０３ａ＝Ｍｕｘ１（ｉｄｘ＿ｔａｐ＝３）＋ａｉｎ（ｉｄｘ＿ｔａｐ＝３）が出力される。加算結果５００ａ〜５０３ａは、それぞれシフタ４０８〜４１１に入力されるが、シフト値信号ｓｆｔ８〜ｓｆｔ１１が“０”であるためシフトされずに、シフタ出力４０８ａ〜４１１ａとして出力されレジスタ６１６〜６１９に格納される。
【０１０５】
レジスタ出力６１６ａ＝Ｍｕｘ１（ｉｄｘ＿ｔａｐ＝０）＋ａｉｎ（ｉｄｘ＿ｔａｐ＝０）は更新後の適応フィルタ係数ａｏｕｔ（ｉｄｘ＿ｔａｐ＝０）として、レジスタ出力６１７ａ＝Ｍｕｘ１（ｉｄｘ＿ｔａｐ＝１）＋ａｉｎ（ｉｄｘ＿ｔａｐ＝１）はａｏｕｔ（ｉｄｘ＿ｔａｐ＝１）として、レジスタ出力６１８ａ＝Ｍｕｘ１（ｉｄｘ＿ｔａｐ＝２）＋ａｉｎ（ｉｄｘ＿ｔａｐ＝２）はａｏｕｔ（ｉｄｘ＿ｔａｐ＝２）として、レジスタ出力６１９ａ＝Ｍｕｘ１（ｉｄｘ＿ｔａｐ＝３）＋ａｉｎ（ｉｄｘ＿ｔａｐ＝３）はａｏｕｔ（ｉｄｘ＿ｔａｐ＝３）として入出力バッファ７に格納される。
【０１０６】
以上のように一度のａｏｕｔ演算では４並列で適応フィルタ係数ａｏｕｔが求められるため、３２０タップの適応フィルタの場合、Ｍｕｘ１と更新前の適応フィルタ係数ａｉｎのｉｄｘ＿ｔａｐを４ずつずらしながら８０回ａｏｕｔ演算を繰り返せばよい。
【０１０７】
図１３−１および図１３−２に、８ｍｕｌ＿ａｄｄ演算用回路構成を示す。
入力データ１００ａ〜１０７ａには入力バッファ３から参照信号（ｉｄｘ＿ｔａｐ＝０）〜参照信号（ｉｄｘ＿ｔａｐ＝７）を、入力データ１００ｂ〜１０７ｂには入出力バッファ７から更新後の適応フィルタ係数ａｏｕｔ（ｉｄｘ＿ｔａｐ＝０）〜ａｏｕｔ（ｉｄｘ＿ｔａｐ＝７）を入力する。
【０１０８】
入力データ１００ｂ〜１０７ｂは、それぞれセレクタ３１６〜３２３に入力され、セレクト信号ｓｅｌ１６〜ｓｅｌ２３によって選択されデータ３１６ａ〜３２３ａ、即ち、ａｏｕｔ（ｉｄｘ＿ｔａｐ＝０）〜ａｏｕｔ（ｉｄｘ＿ｔａｐ＝７）が出力される。乗算器１００〜１０７に、それぞれ入力データ１００ａ〜１０７ａ、セレクタ出力３１６ａ〜３２３ａが入力される。乗算器１００〜１０７からは、それぞれ乗算結果出力１００ｃ＝参照信号（ｉｄｘ＿ｔａｐ＝０）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝０）、乗算結果出力１０１ｃ＝参照信号（ｉｄｘ＿ｔａｐ＝１）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝１）、乗算結果出力１０２ｃ＝参照信号（ｉｄｘ＿ｔａｐ＝２）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝２）、乗算結果出力１０３ｃ＝参照信号（ｉｄｘ＿ｔａｐ＝３）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝３）、乗算結果出力１０４ｃ＝参照信号（ｉｄｘ＿ｔａｐ＝４）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝４）、乗算結果出力１０５ｃ＝参照信号（ｉｄｘ＿ｔａｐ＝５）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝５）、乗算結果出力１０６ｃ＝参照信号（ｉｄｘ＿ｔａｐ＝６）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝６）、乗算結果出力１０７ｃ＝参照信号（ｉｄｘ＿ｔａｐ＝７）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝７）が出力され、それぞれレジスタ６０８〜６１５に格納される。
【０１０９】
次に、セレクタ３００にレジスタ出力６００ａが入力され、セレクト信号ｓｅｌ０によって選択されて出力３００ａ＝レジスタ出力６００ａが出力される。同様に、レジスタ出力６０１ａが入力されたセレクタ３０１からはセレクト信号ｓｅｌ１によって選択された出力３０１ａ＝レジスタ出力６０１ａが出力され、レジスタ出力６０２ａが入力されたセレクタ３０２からはセレクト信号ｓｅｌ２によって選択された出力３０２ａ＝レジスタ出力６０２ａが出力され、レジスタ出力６０３ａが入力されたセレクタ３０３からはセレクト信号ｓｅｌ３によって選択された出力３０３ａ＝レジスタ出力６０３ａが出力され、レジスタ出力６０４ａが入力されたセレクタ３０４からはセレクト信号ｓｅｌ４によって選択された出力３０４ａ＝レジスタ出力６０４ａが出力され、レジスタ出力６０５ａが入力されたセレクタ３０５からはセレクト信号ｓｅｌ５によって選択された出力３０５ａ＝レジスタ出力６０５ａが出力され、レジスタ出力６０６ａが入力されたセレクタ３０６からはセレクト信号ｓｅｌ６によって選択された出力３０６ａ＝レジスタ出力６０６ａが出力され、レジスタ出力６０７ａが入力されたセレクタ３０７からはセレクト信号ｓｅｌ７によって選択された出力３０７ａ＝レジスタ出力６０７ａが出力される。
【０１１０】
次に、セレクタ出力３００ａはシフタ４００に入力され、ｙビットシフトを指示するシフト値信号ｓｆｔ０によってｙビット右シフトされシフタ出力４００ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝０）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝０））＞＞ｙが出力される。同様に、セレクタ出力３０１ａが入力されたシフタ４０１からは、シフト値信号ｓｆｔ１の指示によりｙビット右シフトされたシフタ出力４０１ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝１）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝１））＞＞ｙが出力され、セレクタ出力３０２ａが入力されたシフタ４０２からは、シフト値信号ｓｆｔ２の指示によりｙビット右シフトされたシフタ出力４０２ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝２）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝２））＞＞ｙが出力され、セレクタ出力３０３ａが入力されたシフタ４０３からは、シフト値信号ｓｆｔ３の指示によりｙビット右シフトされたシフタ出力４０３ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝３）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝３））＞＞ｙが出力され、セレクタ出力３０４ａが入力されたシフタ４０４からは、シフト値信号ｓｆｔ４の指示によりｙビット右シフトされたシフタ出力４０４ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝４）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝４））＞＞ｙが出力され、セレクタ出力３０５ａが入力されたシフタ４０５からは、シフト値信号ｓｆｔ５の指示によりｙビット右シフトされたシフタ出力４０５ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝５）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝５））＞＞ｙが出力され、セレクタ出力３０６ａが入力されたシフタ４０６からは、シフト値信号ｓｆｔ６の指示によりｙビット右シフトされたシフタ出力４０６ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝６）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝６））＞＞ｙが出力され、セレクタ出力３０７ａが入力されたシフタ４０７からは、シフト値信号ｓｆｔ７の指示によりｙビット右シフトされたシフタ出力４０７ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝７）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝７））＞＞ｙが出力される。
【０１１１】
次に、加減算器５００に上記のシフタ出力４００ａ，４０１ａが入力され、加減算選択信号ａｓ０によって加算が選択されることで加算結果出力５００ａ＝４００ａ＋４０１ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝０）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝０））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝１）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝１））＞＞ｙが得られる。同様に、加減算選択信号ａｓ１によって加算が指示された加減算器５０１にはシフタ出力４０２ａ，４０３ａが入力され加算結果出力５０１ａ＝４０２ａ＋４０３ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝２）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝２））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝３）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝３））＞＞ｙが得られ、加減算選択信号ａｓ２によって加算が指示された加減算器５０２にはシフタ出力４０４ａ，４０５ａが入力され加算結果出力５０２ａ＝４０４ａ＋４０５ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝４）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝４））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝５）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝５））＞＞ｙが得られ、加減算選択信号ａｓ３によって加算が指示された加減算器５０３にはシフタ出力４０６ａ，４０７ａが入力され加算結果出力５０３ａ＝４０６ａ＋４０７ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝６）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝６））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝７）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝７））＞＞ｙが得られる。
【０１１２】
上記で得られた加算結果出力５００ａ〜５０３ａはシフタ４０８〜４１１に入力されるが、シフト値信号ｓｆｔ８〜ｓｆｔ１１は“０”であるためシフトされずに、シフタ出力４０８ａ＝５００ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝０）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝０））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝１）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝１））＞＞ｙ、シフタ出力４０９ａ＝５０１ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝２）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝２））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝３）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝３））＞＞ｙ、シフタ出力４１０ａ＝５０２ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝４）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝４））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝５）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝５））＞＞ｙ、シフタ出力４１１ａ＝５０３ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝６）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝６））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝７）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝７））＞＞ｙが出力され、それぞれ、レジスタ６１６〜６１９に格納される。
【０１１３】
続いて、上記レジスタ出力６１６ａ〜６１９ａは、それぞれセレクタ３０８〜３１１に入力され、セレクト信号ｓｅｌ８〜ｓｅｌ１１によって選択され、セレクタ出力３０８ａ＝６１６ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝０）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝０））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝１）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝１））＞＞ｙ、セレクタ出力３０９ａ＝６１７ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝２）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝２））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝３）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝３））＞＞ｙ、セレクタ出力３１０ａ＝６１８ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝４）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝４））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝５）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝５））＞＞ｙ、セレクタ出力３１１ａ＝６１９ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝６）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝６））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝７）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝７））＞＞ｙが出力される。
【０１１４】
上記セレクタ出力３０８ａ，３０９ａは、加減算選択信号ａｓ４によって加算が指示された加減算器５０４に入力され、加算結果出力５０４ａ＝３０８ａ＋３０９ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝０）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝０））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝１）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝１））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝２）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝２））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝３）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝３））＞＞ｙが得られる。
【０１１５】
同様に、セレクタ出力３１０ａ，３１１ａが入力された加減算器５０５からは、加減算選択信号ａｓ５によって加算が指示されることにより加算結果出力５０５ａ＝３１０ａ＋３１１ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝４）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝４））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝５）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝５））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝６）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝６））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝７）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝７））＞＞ｙが得られる。
【０１１６】
上記で得られた加算結果出力５０４ａ，５０５ａは、それぞれシフタ４１２とシフタ４１３に入力されるが、シフト値信号ｓｆｔ１２とｓｆｔ１３が“０”であるためシフトされずに、シフタ出力４１２ａ＝５０４ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝０）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝０））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝１）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝１））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝２）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝２））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝３）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝３））＞＞ｙ、シフタ出力４１３ａ＝５０５ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝４）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝４））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝５）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝５））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝６）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝６））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝７）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝７））＞＞ｙが出力され、それぞれレジスタ６２０とレジスタ６２１に格納される。
【０１１７】
上記レジスタ出力６２０ａはセレクタ３１２に入力され、セレクト信号ｓｅｌ１２によって選択されセレクタ出力３１２ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝０）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝０））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝１）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝１））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝２）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝２））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝３）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝３））＞＞ｙが出力される。同様に、セレクタ３１３に入力されたレジスタ出力６２１ａは、セレクト信号ｓｅｌ１３によって選択され、セレクタ出力３１３ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝４）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝４））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝５）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝５））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝６）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝６））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝７）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝７））＞＞ｙが出力される。
【０１１８】
上記セレクタ出力３１２ａ，３１３ａは加減算選択信号ａｓ６によって加算が指示された加減算器５０６に入力され、加算結果出力５０６ａ＝３１２ａ＋３１３ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝０）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝０））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝１）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝１））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝２）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝２））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝３）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝３））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝４）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝４））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝５）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝５））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝６）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝６））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝７）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝７））＞＞ｙが得られる。
【０１１９】
上記加算結果出力５０６ａはシフタ４１４に入力されるが、シフト値信号ｓｆｔ１４が“０”であるためシフトされずにシフタ出力４１４ａ＝５０６ａ＝（参照信号（ｉｄｘ＿ｔａｐ＝０）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝０））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝１）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝１））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝２）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝２））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝３）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝３））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝４）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝４））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝５）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝５））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝６）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝６））＞＞ｙ＋（参照信号（ｉｄｘ＿ｔａｐ＝７）×ａｏｕｔ（ｉｄｘ＿ｔａｐ＝７））＞＞ｙが出力され、レジスタ６２２に格納される。
【０１２０】
上記レジスタ６２２の出力６２２ａは、８タップ分の積和演算結果ｓｕｍ（０〜７）として入出力バッファ６に格納される。以上のように、８ｍｕｌ＿ａｄｄ演算では１回に８タップ分の積和演算を求められるため、３２０タップの適応フィルタの場合、参照信号とフィルタ係数ａｏｕｔのｉｄｘ＿ｔａｐを８ずつずらしながら４０回８ｍｕｌ＿ａｄｄ演算を繰り返せばよい。
【０１２１】
図１４−１および図１４−２に、８Ｔ＿ａｄｄ演算用回路構成を示す。
上記の８ｍｕｌ＿ａｄｄ演算によって求められた８タップ分の積和演算結果８個、即ち、ｉｄｘ＿ｔａｐ＝０〜７の積和演算結果ｓｕｍ（０〜７）、ｉｄｘ＿ｔａｐ＝８〜１５の積和演算結果ｓｕｍ（８〜１５）、ｉｄｘ＿ｔａｐ＝１６〜２３の積和演算結果ｓｕｍ（１６〜２３）、ｉｄｘ＿ｔａｐ＝２４〜３１の積和演算結果ｓｕｍ（２４〜３１）、ｉｄｘ＿ｔａｐ＝３２〜３９の積和演算結果ｓｕｍ（３２〜３９）、ｉｄｘ＿ｔａｐ＝４０〜４７の積和演算結果ｓｕｍ（４０〜４７）、ｉｄｘ＿ｔａｐ＝４８〜５５の積和演算結果ｓｕｍ（４８〜５５）、ｉｄｘ＿ｔａｐ＝５６〜６３の積和演算結果ｓｕｍ（５６〜６３）を入出力バッファ６から読み出し、ｓｕｍ（０〜７）の上位１６ビットを入力データ１００ａに、下位１６ビットを入力データ１００ｂに入力し、ｓｕｍ（８〜１５）の上位１６ビットを入力データ１０１ａに、下位１６ビットを入力データ１０１ｂに入力し、ｓｕｍ（１６〜２３）の上位１６ビットを入力データ１０２ａに、下位１６ビットを入力データ１０２ｂに入力し、ｓｕｍ（２４〜３１）の上位１６ビットを入力データ１０３ａに、下位１６ビットを入力データ１０３ｂに入力し、ｓｕｍ（３２〜３９）の上位１６ビットを入力データ１０４ａに、下位１６ビットを入力データ１０４ｂに入力し、ｓｕｍ（４０〜４７）の上位１６ビットを入力データ１０５ａに、下位１６ビットを入力データ１０５ｂに入力し、ｓｕｍ（４８〜５５）の上位１６ビットを入力データ１０６ａに、下位１６ビットを入力データ１０６ｂに入力し、ｓｕｍ（５６〜６３）の上位１６ビットを入力データ１０７ａに、下位１６ビットを入力データ１０７ｂに入力する。
【０１２２】
入力データ１００ｂ〜１０７ｂは、それぞれセレクタ３１６〜３２３に入力され、セレクト信号ｓｅｌ１６〜ｓｅｌ２３によって選択されセレクタ出力３１６ａ〜３２３ａ、即ち、ｓｕｍ（０〜７）〜ｓｕｍ（５６〜６３）それぞれの下位１６ビットが出力される。データ結合器２００〜２０７に、それぞれ入力データ１００ａ〜１０７ａ、セレクタ出力３１６ａ〜３２３ａが入力される。データ結合器２００からは、入力データ１００ａ＝ｓｕｍ（０〜７）の上位１６ビットと、セレクタ出力３１６ａ＝ｓｕｍ（０〜７）の下位１６ビットの結合結果、即ち、３２ビットのｓｕｍ（０〜７）が結果出力２００ａとして出力される。
【０１２３】
同様に、入力データ１０１ａ＝ｓｕｍ（８〜１５）の上位１６ビットとセレクタ出力３１７ａ＝ｓｕｍ（８〜１５）の下位１６ビットが入力されたデータ結合器２０１からは、３２ビットの２０１ａ＝ｓｕｍ（８〜１５）が出力され、入力データ１０２ａ＝ｓｕｍ（１６〜２３）の上位１６ビットとセレクタ出力３１８ａ＝ｓｕｍ（１６〜２３）の下位１６ビットが入力されたデータ結合器２０２からは、３２ビットの結果出力２０２ａ＝ｓｕｍ（１６〜２３）が出力され、入力データ１０３ａ＝ｓｕｍ（２４〜３１）の上位１６ビットとセレクタ出力３１９ａ＝ｓｕｍ（２４〜３１）の下位１６ビットが入力されたデータ結合器２０３からは、３２ビットの結果出力２０３ａ＝ｓｕｍ（２４〜３１）が出力され、入力データ１０４ａ＝ｓｕｍ（３２〜３９）の上位１６ビットとセレクタ出力３２０ａ＝ｓｕｍ（３２〜３９）の下位１６ビットが入力されたデータ結合器２０４からは、３２ビットの結果出力２０４ａ＝ｓｕｍ（３２〜３９）が出力され、入力データ１０５ａ＝ｓｕｍ（４０〜４７）の上位１６ビットとセレクタ出力３２１ａ＝ｓｕｍ（４０〜４７）の下位１６ビットが入力されたデータ結合器２０５からは、３２ビットの結果出力２０５ａ＝ｓｕｍ（４０〜４７）が出力され、入力データ１０６ａ＝ｓｕｍ（４８〜５５）の上位１６ビットとセレクタ出力３２２ａ＝ｓｕｍ（４８〜５５）の下位１６ビットが入力されたデータ結合器２０６からは、３２ビットの結果出力２０６ａ＝ｓｕｍ（４８〜５５）が出力され、入力データ１０７ａ＝ｓｕｍ（５６〜６３）の上位１６ビットとセレクタ出力３２３ａ＝ｓｕｍ（５６〜６３）の下位１６ビットが入力されたデータ結合器２０７からは、３２ビットの結果出力２０７ａ＝ｓｕｍ（５６〜６３）が出力される。
【０１２４】
次に、セレクタ３００に結果出力２００ａが入力され、セレクト信号ｓｅｌ０によって選択されてセレクタ出力３００ａ＝２００ａ＝ｓｕｍ（０〜７）が出力される。同様に、結果出力２０１ａが入力されたセレクタ３０１からはセレクト信号ｓｅｌ１によって選択されたセレクタ出力３０１ａ＝２０１ａ＝ｓｕｍ（８〜１５）が出力され、結果出力２０２ａが入力されたセレクタ３０２からはセレクト信号ｓｅｌ２によって選択されたセレクタ出力３０２ａ＝２０２ａ＝ｓｕｍ（１６〜２３）が出力され、結果出力２０３ａが入力されたセレクタ３０３からはセレクト信号ｓｅｌ３によって選択されたセレクタ出力３０３ａ＝２０３ａ＝ｓｕｍ（２４〜３１）が出力され、結果出力２０４ａが入力されたセレクタ３０４からはセレクト信号ｓｅｌ４によって選択されたセレクタ出力３０４ａ＝２０４ａ＝ｓｕｍ（３２〜３９）が出力され、結果出力２０５ａが入力されたセレクタ３０５からはセレクト信号ｓｅｌ５によって選択されたセレクタ出力３０５ａ＝２０５ａ＝ｓｕｍ（４０〜４７）が出力され、結果出力２０６ａが入力されたセレクタ３０６からはセレクト信号ｓｅｌ６によって選択されたセレクタ出力３０６ａ＝２０６ａ＝ｓｕｍ（４８〜５５）が出力され、結果出力２０７ａが入力されたセレクタ３０７からはセレクト信号ｓｅｌ７によって選択されたセレクタ出力３０７ａ＝２０７ａ＝ｓｕｍ（５６〜６３）が出力される。
【０１２５】
次に、セレクタ出力３００ａはシフタ４００に入力されるがシフト値信号ｓｆｔ０が“０”であるためシフトされずにシフタ出力４００ａ＝ｓｕｍ（０〜７）が出力される。同様に、セレクタ出力３０１ａが入力されたシフタ４０１からはシフタ出力４０１ａ＝ｓｕｍ（８〜１５）が出力され、セレクタ出力３０２ａが入力されたシフタ４０２からはシフタ出力４０２ａ＝ｓｕｍ（１６〜２３）が出力され、セレクタ出力３０３ａが入力されたシフタ４０３からはシフタ出力４０３ａ＝ｓｕｍ（２４〜３１）が出力され、セレクタ出力３０４ａが入力されたシフタ４０４からはシフタ出力４０４ａ＝ｓｕｍ（３２〜３９）が出力され、セレクタ出力３０５ａが入力されたシフタ４０５からはシフタ出力４０５ａ＝ｓｕｍ（４０〜４７）が出力され、セレクタ出力３０６ａが入力されたシフタ４０６からはシフタ出力４０６ａ＝ｓｕｍ（４８〜５５）が出力され、セレクタ出力３０７ａが入力されたシフタ４０７からはシフタ出力４０７ａ＝ｓｕｍ（５６〜６３）が出力される。
【０１２６】
次に、加減算器５００に上記のシフタ出力４００ａ，４０１ａが入力され、加減算選択信号ａｓ０によって加算が指示されることによって加算結果出力５００ａ＝４００ａ＋４０１ａ＝ｓｕｍ（０〜７）＋ｓｕｍ（８〜１５）が得られる。同様に、加減算選択信号ａｓ１によって加算が指示された加減算器５０１にはシフタ出力４０２ａ，４０３ａが入力され、加算結果出力５０１ａ＝４０２ａ＋４０３ａ＝ｓｕｍ（１６〜２３）＋ｓｕｍ（２４〜３１）が得られ、加減算選択信号ａｓ２によって加算が指示された加減算器５０２にはシフタ出力４０４ａ，４０５ａが入力され、加算結果出力５０２ａ＝４０４ａ＋４０５ａ＝ｓｕｍ（３２〜３９）＋ｓｕｍ（４０〜４７）が得られ、加減算選択信号ａｓ３によって加算が指示された加減算器５０３にはシフタ出力４０６ａ，４０７ａが入力され、加算結果出力５０３ａ＝４０６ａ＋４０７ａ＝ｓｕｍ（４８〜５５）＋ｓｕｍ（５６〜６３）が得られる。
【０１２７】
上記で得られた加算結果出力５００ａ〜５０３ａはシフタ４０８〜４１１に入力されるが、シフト値信号ｓｆｔ８〜ｓｆｔ１１は“０”であるためシフトされずに、シフタ出力４０８ａ＝５００ａ＝ｓｕｍ（０〜７）＋ｓｕｍ（８〜１５）、シフタ出力４０９ａ＝５０１ａ＝ｓｕｍ（１６〜２３）＋ｓｕｍ（２４〜３１）、シフタ出力４１０ａ＝５０２ａ＝ｓｕｍ（３２〜３９）＋ｓｕｍ（４０〜４７）、シフタ出力４１１ａ＝５０３ａ＝ｓｕｍ（４８〜５５）＋ｓｕｍ（５６〜６３）が出力され、それぞれ、レジスタ６１６〜６１９に格納される。
【０１２８】
続いて、上記レジスタ出力６１６ａ〜６１９ａは、それぞれセレクタ３０８〜３１１に入力され、セレクト信号ｓｅｌ８〜ｓｅｌ１１によって選択され、セレクタ出力３０８ａ＝６１６ａ＝ｓｕｍ（０〜７）＋ｓｕｍ（８〜１５）、セレクタ出力３０９ａ＝６１７ａ＝ｓｕｍ（１６〜２３）＋ｓｕｍ（２４〜３１）、セレクタ出力３１０ａ＝６１８ａ＝ｓｕｍ（３２〜３９）＋ｓｕｍ（４０〜４７）、セレクタ出力３１１ａ＝６１９ａ＝ｓｕｍ（４８〜５５）＋ｓｕｍ（５６〜６３）が出力される。上記セレクタ出力３０８ａ，３０９ａは加減算器５０４に入力され、加減算選択信号ａｓ４によって加算が指示されることによって加算結果出力５０４ａ＝３０８ａ＋３０９ａ＝ｓｕｍ（０〜７）＋ｓｕｍ（８〜１５）＋ｓｕｍ（１６〜２３）＋ｓｕｍ（２４〜３１）が得られる。同様に、セレクタ出力３１０ａ，３１１ａが入力された加減算器５０５からは、加減算選択信号ａｓ５によって加算が指示されることによって加算結果出力５０５ａ＝３１０ａ＋３１１ａ＝ｓｕｍ（３２〜３９）＋ｓｕｍ（４０〜４７）＋ｓｕｍ（４８〜５５）＋ｓｕｍ（５６〜６３）が得られる。
【０１２９】
上記で得られた加算結果出力５０４ａ，５０５ａは、それぞれシフタ４１２，４１３に入力されるが、シフト値信号ｓｆｔ１２とｓｆｔ１３が“０”であるためシフトされずに、シフタ出力４１２ａ＝５０４ａ＝ｓｕｍ（０〜７）＋ｓｕｍ（８〜１５）＋ｓｕｍ（１６〜２３）＋ｓｕｍ（２４〜３１）、シフタ出力４１３ａ＝５０５ａ＝ｓｕｍ（３２〜３９）＋ｓｕｍ（４０〜４７）＋ｓｕｍ（４８〜５５）＋ｓｕｍ（５６〜６３）が出力され、それぞれレジスタ６２０，６２１に格納される。上記レジスタ出力６２０ａはセレクタ３１２に入力され、セレクト信号ｓｅｌ１２によって選択されセレクタ出力３１２ａ＝ｓｕｍ（０〜７）＋ｓｕｍ（８〜１５）＋ｓｕｍ（１６〜２３）＋ｓｕｍ（２４〜３１）が出力される。同様に、セレクタ３１３に入力されたレジスタ出力６２１ａは、セレクト信号ｓｅｌ１３によって選択され、セレクタ出力３１３ａ＝ｓｕｍ（３２〜３９）＋ｓｕｍ（４０〜４７）＋ｓｕｍ（４８〜５５）＋ｓｕｍ（５６〜６３）が出力される。
【０１３０】
上記セレクタ出力３１２ａ，３１３ａは加減算器５０６に入力され、加減算選択信号ａｓ６によって加算が指示されることによって加算結果出力５０６ａ＝３１２ａ＋３１３ａ＝ｓｕｍ（０〜７）＋ｓｕｍ（８〜１５）＋ｓｕｍ（１６〜２３）＋ｓｕｍ（２４〜３１）＋ｓｕｍ（３２〜３９）＋ｓｕｍ（４０〜４７）＋ｓｕｍ（４８〜５５）＋ｓｕｍ（５６〜６３）が得られる。
【０１３１】
上記加算結果出力５０６ａはシフタ４１４に入力されるが、シフト値信号ｓｆｔ１４が“０”であるためシフトされずにシフタ出力４１４ａ＝５０６ａ＝ｓｕｍ（０〜７）＋ｓｕｍ（８〜１５）＋ｓｕｍ（１６〜２３）＋ｓｕｍ（２４〜３１）＋ｓｕｍ（３２〜３９）＋ｓｕｍ（４０〜４７）＋ｓｕｍ（４８〜５５）＋ｓｕｍ（５６〜６３）が出力され、レジスタ６２２に格納される。上記レジスタ６２２の出力６２２ａは、８タップ分の積和演算結果を８個、即ち、ｉｄｘ＿ｔａｐ＝０〜６３の６４タップ分の積和演算結果ｓｕｍ（０〜６３）として入出力バッファ７に格納される。
【０１３２】
以上のように、８Ｔ＿ａｄｄ演算では１回に８個分のデータを足し合わすことができるので、３２０タップの適応フィルタの場合、８ｍｕｌ＿ａｄｄ演算の出力４０個を５回にわけて８Ｔ＿ａｄｄ演算を行なえばよい。
【０１３３】
図１５−１および図１５−２に、５Ｔ＿ａｄｄ演算用回路構成を示す。
上記の８Ｔ＿ａｄｄ演算によって求められた６４タップ分の積和演算結果５個、即ち、ｉｄｘ＿ｔａｐ＝０〜６３の積和演算結果ｓｕｍ（０〜６３）、ｉｄｘ＿ｔａｐ＝６４〜１２７の積和演算結果ｓｕｍ（６４〜１２７）、ｉｄｘ＿ｔａｐ＝１２８〜１９１の積和演算結果ｓｕｍ（１２８〜１９１）、ｉｄｘ＿ｔａｐ＝１９２〜２５５の積和演算結果ｓｕｍ（１９２〜２５５）、ｉｄｘ＿ｔａｐ＝２５６〜３１９の積和演算結果ｓｕｍ（２５６〜３１９）を入出力バッファ７から読み出し、ｓｕｍ（０〜６３）の上位１６ビットを入力データ１００ａに、下位１６ビットを入力データ１００ｂに入力し、ｓｕｍ（６４〜１２７）の上位１６ビットを入力データ１０１ａに、下位１６ビットを入力データ１０１ｂに入力し、ｓｕｍ（１２８〜１９１）の上位１６ビットを入力データ１０２ａに、下位１６ビットを入力データ１０２ｂに入力し、ｓｕｍ（１９２〜２５５）の上位１６ビットを入力データ１０３ａに、下位１６ビットを入力データ１０３ｂに入力し、ｓｕｍ（２５６〜３１９）の上位１６ビットを入力データ１０４ａに、下位１６ビットを入力データ１０４ｂに入力し、入力データ１０５ａ〜１０７ａと入力データ１０５ｂ〜１０７ｂには任意の値を入力する。
【０１３４】
入力データ１００ｂ〜１０４ｂは、それぞれセレクタ３１６〜３２０に入力され、セレクト信号ｓｅｌ１６〜ｓｅｌ２０によって選択されセレクタ出力３１６ａ〜３２０ａ、即ち、ｓｕｍ（０〜６３）〜ｓｕｍ（２５６〜３１９）それぞれの下位１６ビットが出力される。セレクタ３２１〜３２３には“０”がセットされた定数レジスタ６０５〜６０７の出力６０５ａ〜６０７ａがそれぞれ入力され、セレクト信号ｓｅｌ２１〜ｓｅｌ２３によって選択されてセレクタ出力３２１ａ＝“０”、３２２ａ＝“０”、３２３ａ＝“０”が出力される。次に、データ結合器２００〜２０４に、それぞれ入力データ１００ａ〜１０４ａ、セレクタ出力３１６ａ〜３２０ａが入力される。データ結合器２００からは、入力データ１００ａ＝ｓｕｍ（０〜６３）の上位１６ビットと、セレクタ出力３１６ａ＝ｓｕｍ（０〜６３）の下位１６ビットの結合結果、即ち３２ビットのｓｕｍ（０〜６３）が結果出力２００ａとして出力される。
【０１３５】
同様に、入力データ１０１ａ＝ｓｕｍ（６４〜１２７）の上位１６ビットとセレクタ出力３１７ａ＝ｓｕｍ（６４〜１２７）の下位１６ビットが入力されたデータ結合器２０１からは、３２ビットの結果出力２０１ａ＝ｓｕｍ（６４〜１２７）が出力され、入力データ１０２ａ＝ｓｕｍ（１２８〜１９１）の上位１６ビットとセレクタ出力３１８ａ＝ｓｕｍ（１２８〜１９１）の下位１６ビットが入力されたデータ結合器２０２からは、３２ビットの結果出力２０２ａ＝ｓｕｍ（１２８〜１９１）が出力され、入力データ１０３ａ＝ｓｕｍ（１９２〜２５５）の上位１６ビットとセレクタ出力３１９ａ＝ｓｕｍ（１９２〜２５５）の下位１６ビットが入力されたデータ結合器２０３からは、３２ビットの結果出力２０３ａ＝ｓｕｍ（１９２〜２５５）が出力され、入力データ１０４ａ＝ｓｕｍ（２５６〜３１９）の上位１６ビットとセレクタ出力３２０ａ＝ｓｕｍ（２５６〜３１９）の下位１６ビットが入力されたデータ結合器２０４からは、３２ビットの結果出力２０４ａ＝ｓｕｍ（２５６〜３１９）が出力される。
【０１３６】
入力データ１０５ａとセレクタ出力３２１ａ＝“０”は乗算器１０５に入力され、乗算結果出力１０５ｃ＝“０”が出力される。同様に、入力データ１０６ａとセレクタ出力３２２ａ＝“０”が入力された乗算器１０６からは乗算結果出力１０６ｃ＝“０”が出力され、入力データ１０７ａとセレクタ出力３２３ａ＝“０”が入力された乗算器１０７からは乗算結果出力１０７ｃ＝“０”が出力される。上記乗算結果出力１０５ｃ〜１０７ｃはそれぞれレジスタ６１３〜６１５に格納される。
【０１３７】
次に、上記データ結合器２００の結果出力２００ａはセレクタ３００に入力され、セレクト信号ｓｅｌ０によって選択されてセレクタ出力３００ａ＝ｓｕｍ（０〜６３）が出力される。同様に、結果出力２０１ａが入力されたセレクタ３０１からは、セレクト信号ｓｅｌ１によって選択されたセレクタ出力３０１ａ＝ｓｕｍ（６４〜１２７）が出力され、結果出力２０２ａが入力されたセレクタ３０２からは、セレクト信号ｓｅｌ２によって選択されたセレクタ出力３０２ａ＝ｓｕｍ（１２８〜１９１）が出力され、結果出力２０３ａが入力されたセレクタ３０３からは、セレクト信号ｓｅｌ３によって選択されたセレクタ出力３０３ａ＝ｓｕｍ（１９２〜２５５）が出力され、結果出力２０４ａが入力されたセレクタ３０４からは、セレクト信号ｓｅｌ４によって選択されたセレクタ出力３０４ａ＝ｓｕｍ（２５６〜３１９）が出力される。
【０１３８】
また、セレクタ３０５には上記レジスタ６１３の出力６１３ａが入力され、セレクト信号ｓｅｌ５によって選択されてセレクタ出力３０５ａ＝“０”が出力される。同様に、レジスタ出力６１４ａが入力されたセレクタ３０６からは、セレクト信号ｓｅｌ６によって選択されたセレクタ出力３０６ａ＝“０”が出力され、レジスタ出力６１５ａが入力されたセレクタ３０７からは、セレクト信号ｓｅｌ７によって選択されたセレクタ出力３０７ａ＝“０”が出力される。次に、上記セレクタ出力３００ａ〜３０７ａは、それぞれシフタ４００〜４０７に入力されるが、シフト値信号ｓｆｔ０〜ｓｆｔ７が“０”であるためシフトされず、シフタ出力４００ａ＝ｓｕｍ（０〜６３）、４０１ａ＝ｓｕｍ（６４〜１２７）、４０２ａ＝ｓｕｍ（１２８〜１９１）、４０３ａ＝ｓｕｍ（１９２〜２５５）、４０４ａ＝ｓｕｍ（２５６〜３１９）、４０５ａ＝“０”、４０６ａ＝“０”、４０７ａ＝“０”が出力される。
【０１３９】
次に、加減算器５００に上記のシフタ出力４００ａとシフタ出力４０１ａが入力され、加減算選択信号ａｓ０によって加算が指示されることによって加算結果出力５００ａ＝４００ａ＋４０１ａ＝ｓｕｍ（０〜６３）＋ｓｕｍ（６４〜１２７）が得られる。同様に、加減算選択信号ａｓ１によって加算が指示された加減算器５０１にはシフタ出力４０２ａとシフタ出力４０３ａが入力され加算結果出力５０１ａ＝４０２ａ＋４０３ａ＝ｓｕｍ（１２８〜１９１）＋ｓｕｍ（１９２〜２５５）が得られ、加減算選択信号ａｓ２によって加算が指示された加減算器５０２にはシフタ出力４０４ａとシフタ出力４０５ａが入力され加算結果出力５０２ａ＝４０４ａ＋４０５ａ＝ｓｕｍ（２５６〜３１９）＋“０”＝ｓｕｍ（２５６〜３１９）が得られ、加減算選択信号ａｓ３によって加算が指示された加減算器５０３にはシフタ出力４０６ａとシフタ出力４０７ａが入力され加算結果出力５０３ａ＝４０６ａ＋４０７ａ＝“０”＋“０”＝“０”が得られる。
【０１４０】
上記で得られた加算結果出力５００ａ〜５０３ａはシフタ４０８〜４１１に入力されるが、シフト値信号ｓｆｔ８〜ｓｆｔ１１は“０”であるためシフトされずに、シフタ出力４０８ａ＝５００ａ＝ｓｕｍ（０〜６３）＋ｓｕｍ（６４〜１２７）、４０９ａ＝５０１ａ＝ｓｕｍ（１２８〜１９１）＋ｓｕｍ（１９２〜２５５）、４１０ａ＝５０２ａ＝ｓｕｍ（２５６〜３１９）、４１１ａ＝５０３ａ＝“０”が出力され、それぞれ、レジスタ６１６〜６１９に格納される。続いて、上記レジスタ出力６１６ａ〜６１９ａは、それぞれセレクタ３０８〜３１１に入力され、セレクト信号ｓｅｌ８〜ｓｅｌ１１によって選択され、セレクタ出力３０８ａ＝６１６ａ＝ｓｕｍ（０〜６３）＋ｓｕｍ（６４〜１２７）、セレクタ出力３０９ａ＝６１７ａ＝ｓｕｍ（１２８〜１９１）＋ｓｕｍ（１９２〜２５５）、セレクタ出力３１０ａ＝６１８ａ＝ｓｕｍ（２５６〜３１９）、セレクタ出力３１１ａ＝６１９ａ＝“０”が出力される。
【０１４１】
上記セレクタ出力３０８ａ，３０９ａは加減算器５０４に入力され、加減算選択信号ａｓ４によって加算が指示されることによって加算結果出力５０４ａ＝３０８ａ＋３０９ａ＝ｓｕｍ（０〜６３）＋ｓｕｍ（６４〜１２７）＋ｓｕｍ（１２８〜１９１）＋ｓｕｍ（１９２〜２５５）が得られる。同様に、セレクタ出力３１０ａ，３１１ａが入力された加減算器５０５からは、加減算選択信号ａｓ５によって加算が指示されることによって加算結果出力５０５ａ＝３１０ａ＋３１１ａ＝ｓｕｍ（２５６〜３１９）＋“０”＝ｓｕｍ（２５６〜３１９）が得られる。上記で得られた加算結果出力５０４ａ，５０５ａは、それぞれシフタ４１２，４１３に入力されるが、シフト値信号ｓｆｔ１２とｓｆｔ１３が“０”であるためシフトされずに、シフタ出力４１２ａ＝５０４ａ＝ｓｕｍ（０〜６３）＋ｓｕｍ（６４〜１２７）＋ｓｕｍ（１２８〜１９１）＋ｓｕｍ（１９２〜２５５）、４１３ａ＝５０５ａ＝ｓｕｍ（２５６〜３１９）が出力され、それぞれレジスタ６２０，６２１に格納される。上記レジスタ出力６２０ａはセレクタ３１２に入力され、セレクト信号ｓｅｌ１２によって選択されセレクタ出力３１２ａ＝ｓｕｍ（０〜６３）＋ｓｕｍ（６４〜１２７）＋ｓｕｍ（１２８〜１９１）＋ｓｕｍ（１９２〜２５５）が出力される。
【０１４２】
同様に、セレクタ３１３に入力されたレジスタ出力６２１ａは、セレクト信号ｓｅｌ１３によって選択されセレクタ出力３１３ａ＝ｓｕｍ（２５６〜３１９）が出力される。上記セレクタ出力３１２ａ，３１３ａは加減算器５０６に入力され、加減算選択信号ａｓ６によって加算が指示されることによって加算結果出力５０６ａ＝３１２ａ＋３１３ａ＝ｓｕｍ（０〜６３）＋ｓｕｍ（６４〜１２７）＋ｓｕｍ（１２８〜１９１）＋ｓｕｍ（１９２〜２５５）＋ｓｕｍ（２５６〜３１９）が得られる。上記加算結果出力５０６ａはシフタ４１４に入力されるが、シフト値信号ｓｆｔ１４が“０”であるためシフトされずにシフタ出力４１４ａ＝５０６ａ＝ｓｕｍ（０〜６３）＋ｓｕｍ（６４〜１２７）＋ｓｕｍ（１２８〜１９１）＋ｓｕｍ（１９２〜２５５）＋ｓｕｍ（２５６〜３１９）が出力され、レジスタ６２２に格納される。上記レジスタ６２２の出力６２２ａは、６４タップ分の積和演算結果を５個、即ち、ｉｄｘ＿ｔａｐ＝０〜３２０の３２０タップ分の積和演算結果ｓｕｍ（０〜３１９）として入出力バッファ６に格納される。
【０１４３】
図１６−１および図１６−２に、ｅｏｕｔ演算用回路構成を示す。
入力バッファ４からマイク入力データ（ｉｄｘ＿ｓａｍｐｌｅ）を読み出し入力データ１００ａに入力し、入出力バッファ６から上記５Ｔ＿ａｄｄ演算の出力ｓｕｍ（０〜３１９）を読み出し上位１６ビットを入力データ１０２ａに、下位１６ビットを入力データ１０２ｂに入力する。入力データ１０１ａ，１０３ａ〜１０７ａと入力データ１００ｂ〜１０１ｂ，１０３ｂ〜１０７ｂには任意の値を入力する。定数レジスタ６００，６０１，６０３には“０”をセットする。上記レジスタ６００の出力６００ａはセレクタ３１６に入力され、セレクト信号ｓｅｌ１６によって選択されてセレクタ出力３１６ａ＝６００ａ＝“０”が出力される。
【０１４４】
同様に、レジスタ出力６０１ａが入力されたセレクタ３１７からは、セレクト信号ｓｅｌ１７によって選択されたセレクタ出力３１７ａ＝６０１ａ＝“０”が出力され、レジスタ出力６０３ａが入力されたセレクタ３１９からは、セレクト信号ｓｅｌ１９によって選択されたセレクタ出力３１９ａ＝６０３ａ＝“０”が出力される。また、セレクタ３１８からは、セレクト信号ｓｅｌ１８によって選択されたセレクタ出力３１８ａ＝１０２ｂ＝ｓｕｍ（０〜３１９）が出力される。
【０１４５】
次に、データ結合器２００に１６ビットの入力データ１００ａ＝マイク入力データ（ｉｄｘ＿ｓａｐｌｅ）と１６ビットのセレクタ出力３１６ａ＝“０”が入力され、３２ビットの結合結果出力２００ａ＝マイク入力データ（ｉｄｘ＿ｓａｍｐｌｅ）＜＜１６が出力される。同様に、入力データ１０２ａ＝ｓｕｍ（０〜３１９）の上位１６ビットと、セレクタ出力３１８ａ＝ｓｕｍ（０〜３１９）の下位１６ビットが入力されたデータ結合器２０２からは、３２ビットの結合結果出力２０２ａ＝ｓｕｍ（０〜３１９）が出力される。また、入力データ１０１ａと上記セレクタ出力３１７ａ＝“０”は乗算器１０１に入力され、乗算結果出力１０１ｃ＝“０”が出力されてレジスタ６０９に格納される。
【０１４６】
同様に、入力データ１０３ａとセレクタ出力３１９ａ＝“０”が入力された乗算器１０３からは、乗算結果出力１０３ｃ＝“０”が出力されレジスタ６１１に格納される。上記データ結合器２００の出力２００ａはセレクタ３００に入力され、セレクト信号ｓｅｌ０によって選択されてセレクタ出力３００ａ＝２００ａ＝マイク入力データ（ｉｄｘ＿ｓａｍｐｌｅ）＜＜１６が出力される。同様に、データ結合器２０２の結果出力２０２ａが入力されたセレクタ３０２からは、セレクト信号ｓｅｌ２によって選択されたセレクタ出力３０２ａ＝２０２ａ＝ｓｕｍ（０〜３１９）が出力され、上記レジスタ６０９の出力６０９ａ＝“０”が入力されたセレクタ３０１からは、セレクト信号ｓｅｌ１によって選択されたセレクタ出力３０１ａ＝６０９ａ＝“０”が出力され、上記レジスタ６１１の出力６１１ａ＝“０”が入力されたセレクタ３０３からは、セレクト信号ｓｅｌ３によって選択されたセレクタ出力３０３ａ＝６１１ａ＝“０”が出力される。
【０１４７】
上記セレクタ出力３００ａ＝マイク入力データ（ｉｄｘ＿ｓａｍｐｌｅ）＜＜１６はシフタ４００に入力され、シフト信号ｓｆｔ０によって１６ビットシフトが指示されることから１６ビット右シフトされて、シフタ出力４００ａ＝マイク入力データ（ｉｄｘ＿ｓａｍｐｌｅ）が出力される。このとき、入力データ１００ａに入力されるマイク入力データ（ｉｄｘ＿ｓａｍｐｌｅ）が符号付きの１６ビットデータであることから、下位に１６ビット分“０”を結合されて３２ビットにされた後、１６ビット右シフトされたことで、上位１６ビットに符号ビットが拡張され、３２ビットの符号付きデータとして扱えるようになる。また、セレクタ出力３０２ａ＝ｓｕｍ（０〜３１９）が入力されたシフタ４０２からは、シフト値信号ｓｆｔ２によりｚビットシフトが指示されることによってシフタ出力４０２ａ＝ｓｕｍ（０〜３１９）＞＞ｚが出力される。セレクタ出力３０１ａが入力されたシフタ４０１は、シフト値信号ｓｆｔ１＝“０”であるためシフトされずにシフタ出力４０１ａ＝３０１ａ＝“０”が出力される。同様に、セレクタ出力３０３ａが入力されたシフタ４０３は、シフト値信号ｓｆｔ３＝“０”であるためシフトされずにシフタ出力４０３ａ＝３０３ａ＝“０”が出力される。
【０１４８】
次に、シフタ出力４００ａ，４０１ａが入力された加減算器５００では、加減算選択信号ａｓ０によって加算が選択されることで加算結果５００ａ＝マイク入力データ（ｉｄｘ＿ｓａｍｐｌｅ）＋“０”＝マイク入力データ（ｉｄｘ＿ｓａｐｌｅ）が出力される。一方、シフタ出力４０２ａ，４０３ａが入力された加減算器５０１からは、加減算選択信号ａｓ１により加算が選択され、加算結果５０１ａ＝ｓｕｍ（０〜３１９）＞＞ｚ＋“０”＝ｓｕｍ（０〜３１９）＞＞ｚが出力される。上記加算結果５００ａ，５０１ａは、それぞれシフタ４０８，４０９に入力されるが、シフト値信号ｓｆｔ８とｓｆｔ９が“０”であるためシフトされずに、シフタ出力４０８ａ＝マイク入力データ（ｉｄｘ＿ｓａｍｐｌｅ）、シフタ出力４０９ａ＝ｓｕｍ（０〜３１９）＞＞ｚが出力され、それぞれレジスタ６１６，６１７に格納される。
【０１４９】
上記レジスタ６１６，６１７の出力６１６ａ＝マイク入力データ（ｉｄｘ＿ｓａｍｐｌｅ）と出力６１７ａ＝ｓｕｍ（０〜３１９）＞＞ｚは、それぞれセレクタ３０８，３０９に入力され、セレクト信号ｓｅｌ８、ｓｅｌ９によって選択され、セレクタ出力３０８ａ＝マイク入力データ（ｉｄｘ＿ｓａｍｐｌｅ）、セレクタ出力３０９ａ＝ｓｕｍ（０〜３１９）＞＞ｚが出力される。セレクタ出力３０８ａ，３０９ａは、加減算選択信号ａｓ４によって減算が選択されている加減算器５０４に入力され、減算結果５０４ａ＝３０８ａ−３０９ａ＝マイク入力データ（ｉｄｘ＿ｓａｍｐｌｅ）−ｓｕｍ（０〜３１９）＞＞ｚが出力される。減算結果５０４ａはシフタ４１２に入力されるが、シフト値信号ｓｆｔ１２が“０”であるためシフトされずに、シフタ出力４１２ａ＝５０４ａ＝マイク入力データ（ｉｄｘ＿ｓａｍｐｌｅ）−ｓｕｍ（０〜３１９）＞＞ｚが出力され、レジスタ６２０に格納される。上記レジスタ６２０からは出力６２０ａ＝マイク入力データ（ｉｄｘ＿ｓａｍｐｌｅ）−ｓｕｍ（０〜３１９）＞＞ｚが出力され、誤差データｅ（ｉｄｘ＿ｓａｍｐｌｅ＋１）として入出力バッファ５に格納される。
上記のＤｅｌｔａ２演算からｅｏｕｔ演算を８０サンプル分繰り返すことによって１フレーム分の演算が完了する。
【０１５０】
ここでは、適応フィルタ処理の処理手順と回路構成について示したが、８ｍｕｌ＿ａｄｄ演算、８Ｔ＿ａｄｄ演算、５Ｔ＿ａｄｄ演算を組み合わせることにより、３２０タップＦＩＲフィルタを実現することも可能である。従って、例えば、ＦＩＲフィルタと適応フィルタ両方を使用するエコーキャンセラのようなアプリケーションにおいて、回路構成情報を切り替えるのみで、一つのプロセッサ上で両方のフィルタを実現することが可能となる。また、上記演算の並列数や繰り返し回数を変更することによって、様々なタップ数のフィルタも実現できる。
【０１５１】
次に、動画像処理で頻繁に用いられるＤＣＴ（離散コサイン変換）演算を例に、バタフライ演算の動作例を示す。ＤＣＴ演算は、下式（７）および（８）で示される。
【数２】
2010160632.tif 000004
【０１５２】
ＤＣＴ演算には様々なアルゴリズムが存在するが、ここでは例としてＣｈｅｎのアルゴリズムを用いる。ＣｈｅｎのアルゴリズムによるＤＣＴは、図１７に示すバタフライ演算を左から右方向へ演算することで実現できる。図１７において、実線は乗算を示しており、実線上の数値は掛け合わせる数値を示している。数値が示されていない実線は、掛け合わせる数値が“１”、即ち、掛け合わされる数値そのものを伝達することを示す。また、Ｃi,kはｃｏｓ（ｉπ／ｋ）、Ｓi,kはｓｉｎ（ｉπ／ｋ）を示す。図１７に示すバタフライ演算は、本発明の実施の形態１〜３に示す８タップ並列の積和演算装置を用いる場合、５つの部分演算［１］〜［５］に分割して実行できる。
【０１５３】
先ず、積和演算装置上に図１８−１および図１８−２に示す［１］の部分演算用回路を構成し、［１］の部分演算を実行して出力値ｘ０＋ｘ７、ｘ０−ｘ７、ｘ１＋ｘ６、ｘ１−ｘ６、ｘ２＋ｘ５、ｘ２−ｘ５、ｘ３＋ｘ４、ｘ３−ｘ４を得る。次に、演算装置の回路構成を図１９−１および図１９−２に示す［２］の部分演算用回路に再構成し、［１］の演算で得られた出力値を入力に［２］の部分演算を実行して、出力値ｘ０＋ｘ７＋ｘ６＋ｘ１、ｘ０＋ｘ７−ｘ６−ｘ１、ｘ４＋ｘ３＋ｘ２＋ｘ５、ｘ４＋ｘ３−ｘ２−ｘ５、Ｃ1,4・（ｘ２−ｘ５＋ｘ４−ｘ３）、Ｃ1,4・（ｘ２−ｘ５−ｘ４＋ｘ３）を得る。次に、演算装置の回路構成を図２０−１および図２０−２に示す［３］の部分演算用回路に再構成し、［２］の部分演算で得られた出力値を入力に［３］の部分演算を実行して、出力値Ｘ０、Ｘ１、Ｘ２、Ｘ３を得る。次に、演算装置の回路構成を図２１−１および図２１−２に示す［４］の部分演算用回路に再構成し、［１］および［２］の部分演算で得られた出力値を入力に［４］の部分演算を実行し、出力値ｘ６−ｘ１＋Ｃ1,4・（ｘ２−ｘ５−ｘ４＋ｘ３）、ｘ６−ｘ１−Ｃ1,4・（ｘ２−ｘ５−ｘ４＋ｘ３）、ｘ０−ｘ７＋Ｃ1,4・（ｘ２−ｘ５＋ｘ４−ｘ３）、ｘ０−ｘ７−Ｃ1,4・（ｘ２−ｘ５＋ｘ４−ｘ３）を得る。最後に、演算装置の回路構成を図２２−１および図２２−２に示す［５］の部分演算用回路に再構成し、［４］で得られた出力値を入力に［５］の部分演算を実行して、出力値Ｘ４、Ｘ５、Ｘ６、Ｘ７を得る。
【０１５４】
上記のように、本発明の積和演算装置により、バタフライ演算を実現することができる。ここでは、ＤＣＴを例に動作例を示したが、同様に、バタフライ演算を用いるＦＦＴ（高速離散フーリエ変換）等の処理も実現できる。
【０１５５】
次に、上記ＤＣＴの逆変換であるＩＤＣＴを例に、本発明の積和演算装置により、逆変換も実現できることを示す。ＣｈｅｎのアルゴリズムによるＩＤＣＴを図２３に示す。ＩＤＣＴは、ＤＣＴとは逆に、図１７に示すバタフライ演算を右から左方向へ演算することで実現できる。図２３の記号や実線の意味は図１７のＤＣＴと同様である。図２３に示すＩＤＣＴは、本発明の実施の形態１〜３に示す８タップ並列の積和演算装置を用いる場合、５つの部分演算［１］〜［５］に分割して実行できる。
【０１５６】
先ず、積和演算装置上に図２４−１および図２４−２に示す［１］の部分演算用回路を構成し、［１］の部分演算を実行して出力値Ｓ1,16・Ｘ４−Ｓ7,16・Ｘ７、Ｓ5,16・Ｘ５−Ｓ3,16・Ｘ６、Ｃ1,16・Ｘ４＋Ｃ7,16・Ｘ７、Ｃ5,16・Ｘ５＋Ｃ3,16・Ｘ６を得る。次に、演算装置の回路構成を図２５−１および図２５−２に示す［２］の部分演算用回路に再構成し、［２］の部分演算を実行して、出力値Ｓ1,8・Ｘ２−Ｓ3,8・Ｘ３、Ｃ1,8・Ｘ２＋Ｃ3,8・Ｘ３、Ｃ1,4・（Ｘ０＋Ｘ１）、Ｃ1,4・（Ｘ０−Ｘ１）を得る。次に、演算装置の回路構成を図２６−１および図２６−２に示す［３］の部分演算用回路に再構成し、［１］の部分演算で得られた出力値を入力に［３］の部分演算を実行して、出力値Ｓ1,16・Ｘ４−Ｓ7,16・Ｘ７＋Ｓ5,16・Ｘ５−Ｓ3,16・Ｘ６、Ｓ1,16・Ｘ４−Ｓ7,16・Ｘ７−Ｓ5,16・Ｘ５＋Ｓ3,16・Ｘ６、Ｃ5,16・Ｘ５＋Ｃ3,16・Ｘ６＋Ｃ1,16・Ｘ４＋Ｃ7,16・Ｘ７、Ｃ5,16・Ｘ５＋Ｃ3,16・Ｘ６−Ｃ1,16・Ｘ４−Ｃ7,16・Ｘ７を得る。
【０１５７】
次に、演算装置の回路構成を図２７−１および図２７−２に示す［４］の部分演算用回路に再構成し、［２］および［３］の部分演算で得られた出力値を入力に［４］の部分演算を実行し、出力値Ｃ1,4・（Ｘ０＋Ｘ１）＋Ｃ1,8・Ｘ２＋Ｃ3,8・Ｘ３、Ｃ1,4・（Ｘ０＋Ｘ１）−Ｃ1,8・Ｘ２−Ｃ3,8・Ｘ３、Ｃ1,4・（Ｘ０−Ｘ１）＋Ｓ1,8・Ｘ２−Ｓ3,8・Ｘ３、Ｃ1,4・（Ｘ０−Ｘ１）−Ｓ1,8・Ｘ２＋Ｓ3,8・Ｘ３、Ｃ1,4・｛（Ｃ1,16＋Ｓ1,16）・Ｘ４＋（Ｃ5,16−Ｓ5,16）・Ｘ５＋（Ｃ3,16＋Ｓ3,16）・Ｘ６＋（Ｃ7,16−Ｓ7,16）・Ｘ７｝、Ｃ1,4・｛（Ｃ1,16−Ｓ1,16）・Ｘ４＋（Ｃ5,16＋Ｓ5,16）・Ｘ５＋（Ｃ3,16−Ｓ3,16）・Ｘ６＋（Ｃ7,16＋Ｓ7,16）・Ｘ７｝を得る。最後に、演算装置の回路構成を図２８−１および図２８−２に示す［５］の部分演算用回路に再構成し、［５］で得られた出力値を入力に［５］の部分演算を実行して、出力値ｘ０、ｘ７、ｘ４、ｘ３、ｘ２、ｘ５、ｘ６、ｘ１を得る。
【０１５８】
以上のように、本発明の積和演算装置により、単一の回路でＤＣＴもＩＤＣＴも実現することができ、変換と逆変換両方を必要とするようなシステムにおいて、回路を共有化することで面積の削減を図ることができる。
【符号の説明】
【０１５９】
１  動的再構成可能プロセッサ、２  積和演算装置、３，４  入力バッファ、５，６，７  入出力バッファ、８  入力セレクタ部、９  出力セレクタ部、１０  コンフィグレーションメモリ、１１  メモリ制御信号生成部、１２  アドレス制御部、１３  出力データ格納先アドレス遅延部、１４  命令Ｉ／Ｆ部、１５  外部ＣＰＵ、１６  外部メモリ、１７  バス、３３，３４  １段目入力セレクタ、３５，３６  ２段目入力セレクタ、３７，３８  ローテータ、３９  ３段目入力セレクタ、１００〜１０７  乗算器、１００ａ〜１０７ａ，１００ｂ〜１０７ｂ  入力データ、２００〜２０７  データ結合器、３００〜３２３，９００〜９０７  セレクタ、４００〜４１５  シフタ、５００〜５０７  加減算器、６００〜６２３  レジスタ。
【図１】
2010160632.tif 000005
【図２】
2010160632.tif 000006
【図３−１】
2010160632.tif 000007
【図３−２】
2010160632.tif 000008
【図４−１】
2010160632.tif 000009
【図４−２】
2010160632.tif 000010
【図５】
2010160632.tif 000011
【図６−１】
2010160632.tif 000012
【図６−２】
2010160632.tif 000013
【図６−３】
2010160632.tif 000014
【図７】
2010160632.tif 000015
【図８】
2010160632.tif 000016
【図９】
2010160632.tif 000017
【図１０−１】
2010160632.tif 000018
【図１０−２】
2010160632.tif 000019
【図１１−１】
2010160632.tif 000020
【図１１−２】
2010160632.tif 000021
【図１２−１】
2010160632.tif 000022
【図１２−２】
2010160632.tif 000023
【図１３−１】
2010160632.tif 000024
【図１３−２】
2010160632.tif 000025
【図１４−１】
2010160632.tif 000026
【図１４−２】
2010160632.tif 000027
【図１５−１】
2010160632.tif 000028
【図１５−２】
2010160632.tif 000029
【図１６−１】
2010160632.tif 000030
【図１６−２】
2010160632.tif 000031
【図１７】
2010160632.tif 000032
【図１８−１】
2010160632.tif 000033
【図１８−２】
2010160632.tif 000034
【図１９−１】
2010160632.tif 000035
【図１９−２】
2010160632.tif 000036
【図２０−１】
2010160632.tif 000037
【図２０−２】
2010160632.tif 000038
【図２１−１】
2010160632.tif 000039
【図２１−２】
2010160632.tif 000040
【図２２−１】
2010160632.tif 000041
【図２２−２】
2010160632.tif 000042
【図２３】
2010160632.tif 000043
【図２４−１】
2010160632.tif 000044
【図２４−２】
2010160632.tif 000045
【図２５−１】
2010160632.tif 000046
【図２５−２】
2010160632.tif 000047
【図２６−１】
2010160632.tif 000048
【図２６−２】
2010160632.tif 000049
【図２７−１】
2010160632.tif 000050
【図２７−２】
2010160632.tif 000051
【図２８−１】
2010160632.tif 000052
【図２８−２】
2010160632.tif 000053