説明

動的再構成可能な積和演算装置および動的再構成可能プロセッサ

【課題】小型で高速かつ入力データ数の変更に対応でき、様々な積和演算系の処理にも対応可能な動的再構成可能な積和演算装置を得る。
【解決手段】乗算器100〜103とデータ結合器200〜203と加減算器500,501,504,506とシフタ400〜403,408,409,412,414とを、乗算器100〜103側を入力としてツリー状に接続する。セレクタ300〜303,308,309,312,313は、乗算器100〜103とデータ結合器200〜203の出力を動的に選択すると共に、シフタ400〜403,408,409,412,413の出力を動的に選択する。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、動的に積和演算回路を構成することのできる動的再構成可能な積和演算装置およびこれを用いた動的再構成可能プロセッサに関するものである。
【背景技術】
【0002】
フィルタ処理をはじめ、デジタル信号処理では積和演算処理が頻繁に用いられる。従来の積和演算装置は、入力データ数(例えば、フィルタ処理の場合のタップ数)分の乗算器と複数の加算器から構成される加算器ツリーを備え、複数の乗算器に複数の入力データを同時に入力して並列に乗算を行い、複数の乗算器の出力を加算器ツリーによって足し合わせるようにしたものがあった。このような構成では、例えば、128個の入力データに対し、128個の乗算器で並列に乗算を行い、隣接する乗算器の2つの出力を64個の加算器によって加算する。また、64個の加算器の出力のうち隣接する加算器同士の出力を32個の加算器によって加算する。これを加算器ツリーの下端まで処理することによって128個のデータの積和演算結果が得られる。この構成は乗算と加算を並列に処理することができるため高性能な積和演算装置を得ることができる。
【0003】
また、このような構成とは異なる積和演算装置の回路構成として、乗算器と加算器をそれぞれ一つずつ備え、乗算器で入力データを一つずつ乗算し、乗算器の出力と一つ前の入力データまでを乗算し累算した結果とを足し合わせる。これを入力データ数分繰り返し処理する。例えば、128個の入力データがある場合は、乗算と累算処理を128回繰り返すことで、128個のデータの積和演算結果が得られる。この構成では、乗算器と加算器を一つずつ備えればよいため小型な積和演算装置を得ることができる。
【0004】
また、それぞれが演算を行う複数の処理エレメントの相互接続を動的に変えるようにしたマイクロプロセッサがあった(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特表2000−503151号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
上記従来の積和演算装置のうち、入力データ数分の乗算器と複数の加算器を備えたものでは、乗算器を並列に構成することにより高速な積和演算処理が可能な反面、乗算器を入力データ数分備えることにより回路規模が膨大になってしまう問題があった。また、乗算器の個数を入力データ数に合わせて備える必要があるため、例えばフィルタのタップ数変更などの入力データ数の変更に対応することができなった。
【0007】
一方、上記従来の積和演算装置のうち、乗算器と加算器をそれぞれ一つずつ備えたものでは、入力数分の乗算器を備えた従来の積和演算装置で問題となる入力データ数の変更には対応可能であり柔軟な積和演算装置を得ることができる。しかしながら、入力データ数が増大すると乗算と累算を繰り返す回数も増大することになり、処理サイクル数が膨大になってしまう問題があった。また、動的に処理エレメント間の接続を変更できるようにした構成であっても、その処理エレメント内の具体的な構成を示しておらず、このような構成から動的再構成可能な積和演算装置を実現することは困難であった。
【0008】
この発明は上記のような課題を解決するためになされたもので、小型で高速かつ入力データ数の変更に対応でき、また、様々な積和演算系の処理にも対応可能な動的再構成可能な積和演算装置および動的再構成可能プロセッサを得ることを目的とする。
【課題を解決するための手段】
【0009】
この発明に係る動的再構成可能な積和演算装置は、それぞれが2入力の乗算を行う複数の乗算器と、2入力のデータのうち、一方を上位ビット、他方を下位ビットとしてデータの結合を行う複数のデータ結合器と、複数の乗算器の出力と複数のデータ結合器の出力を選択出力する複数の第1選択手段と、複数の第1選択手段の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な複数の第1シフタと、複数の第1シフタの出力のうちいずれか二つの出力を入力として加算または減算を行う複数の第1加減算器と、複数の第1加減算器の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な複数の第2シフタと、第1シフタの出力と第2シフタの出力を選択出力する複数の第2選択手段と、複数の第2選択手段の出力のうちいずれか二つの出力を入力として加算または減算を行う複数の第2加減算器と、複数の第2加減算器の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な複数の第3シフタと、第1シフタの出力と第3シフタの出力を選択出力する複数の第3選択手段と、複数の第3選択手段の出力のうちいずれか二つの出力を入力として加算または減算を行う第3加減算器と、第3加減算器の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な第4シフタとを備えたものである。
【発明の効果】
【0010】
この発明の動的再構成可能な積和演算装置は、乗算器とデータ結合器と加減算器とシフタとをツリー状に接続すると共に、乗算器とデータ結合器と加減算器とシフタとの接続を動的に切り替え可能な選択手段を設けたので、任意の入力数の積和演算、フィルタ演算、バタフライ演算、足し合わせ演算、行列演算といった様々な演算を行うことができる。
【図面の簡単な説明】
【0011】
【図1】この発明の実施の形態1による動的再構成可能な積和演算装置を示す構成図である。
【図2】この発明の実施の形態1による動的再構成可能な積和演算装置を示す構成図である。
【図3−1】この発明の実施の形態2による動的再構成可能な積和演算装置を示す構成図である。
【図3−2】この発明の実施の形態2による動的再構成可能な積和演算装置を示す構成図である。
【図4−1】この発明の実施の形態3による動的再構成可能な積和演算装置を示す構成図である。
【図4−2】この発明の実施の形態3による動的再構成可能な積和演算装置を示す構成図である。
【図5】この発明の実施の形態4による動的再構成可能プロセッサの構成図である。
【図6−1】この発明の実施の形態5による入力セレクタ部の構成図である。
【図6−2】この発明の実施の形態5による入力セレクタ部の構成図である。
【図6−3】この発明の実施の形態5による入力セレクタ部の構成図である。
【図7】この発明の実施の形態6による出力セレクタ部の構成図である。
【図8】この発明の実施の形態7によるアドレス制御部の説明図である。
【図9】この発明の動的再構成可能プロセッサにおける適応フィルタアルゴリズムの実行手順を示す説明図である。
【図10−1】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたDelta2演算用回路の構成図である。
【図10−2】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたDelta2演算用回路の構成図である。
【図11−1】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたMux1演算用回路の構成図である。
【図11−2】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたMux1演算用回路の構成図である。
【図12−1】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたaout演算用回路の構成図である。
【図12−2】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたaout演算用回路の構成図である。
【図13−1】この発明の実施の形態3による動的再構成可能な積和演算装置を用いた8mul_add演算用回路の構成図である。
【図13−2】この発明の実施の形態3による動的再構成可能な積和演算装置を用いた8mul_add演算用回路の構成図である。
【図14−1】この発明の実施の形態3による動的再構成可能な積和演算装置を用いた8T_add演算用回路の構成図である。
【図14−2】この発明の実施の形態3による動的再構成可能な積和演算装置を用いた8T_add演算用回路の構成図である。
【図15−1】この発明の実施の形態3による動的再構成可能な積和演算装置を用いた5T_add演算用回路の構成図である。
【図15−2】この発明の実施の形態3による動的再構成可能な積和演算装置を用いた5T_add演算用回路の構成図である。
【図16−1】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたeout演算用回路の構成図である。
【図16−2】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたeout演算用回路の構成図である。
【図17】この発明の動的再構成可能な積和演算装置を用いたDCT演算の説明図である。
【図18−1】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたDCT演算における[1]部分の回路の構成図である。
【図18−2】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたDCT演算における[1]部分の回路の構成図である。
【図19−1】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたDCT演算における[2]部分の回路の構成図である。
【図19−2】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたDCT演算における[2]部分の回路の構成図である。
【図20−1】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたDCT演算における[3]部分の回路の構成図である。
【図20−2】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたDCT演算における[3]部分の回路の構成図である。
【図21−1】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたDCT演算における[4]部分の回路の構成図である。
【図21−2】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたDCT演算における[4]部分の回路の構成図である。
【図22−1】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたDCT演算における[5]部分の回路の構成図である。
【図22−2】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたDCT演算における[5]部分の回路の構成図である。
【図23】この発明の動的再構成可能な積和演算装置を用いたIDCT演算の説明図である。
【図24−1】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたIDCT演算における[1]部分の回路の構成図である。
【図24−2】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたIDCT演算における[1]部分の回路の構成図である。
【図25−1】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたIDCT演算における[2]部分の回路の構成図である。
【図25−2】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたIDCT演算における[2]部分の回路の構成図である。
【図26−1】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたIDCT演算における[3]部分の回路の構成図である。
【図26−2】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたIDCT演算における[3]部分の回路の構成図である。
【図27−1】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたIDCT演算における[4]部分の回路の構成図である。
【図27−2】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたIDCT演算における[4]部分の回路の構成図である。
【図28−1】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたIDCT演算における[5]部分の回路の構成図である。
【図28−2】この発明の実施の形態3による動的再構成可能な積和演算装置を用いたIDCT演算における[5]部分の回路の構成図である。
【発明を実施するための形態】
【0012】
実施の形態1.
図1および図2は、この発明の実施の形態1による動的再構成可能な積和演算装置を示す構成図である。
図において、動的再構成可能な積和演算装置は、それぞれが2入力の乗算を行う複数の乗算器100〜107と、これら乗算器100〜107の2入力のデータのうち、一方を上位ビット、他方を下位ビットとしてデータの結合を行う複数のデータ結合器200〜207と、これら複数の乗算器100〜107の出力と複数のデータ結合器200〜207の出力を選択出力する複数の2to1セレクタ(第1選択手段)300〜307と、これら複数のセレクタ300〜307の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な複数のシフタ(第1シフタ)400〜407と、これら複数のシフタ400〜407の出力のうちいずれか二つの出力を入力として加算または減算を行う複数の加減算器(第1加減算器)500〜503と、これら複数の加減算器500〜503の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な複数のシフタ(第2シフタ)408〜411と、シフタ400〜407の出力とシフタ408〜411の出力を選択出力する複数の2to1セレクタ(第2選択手段)と、これら複数のセレクタ308〜311の出力のうちいずれか二つの出力を入力として加算または減算を行う複数の加減算器(第2加減算器)504,505と、これら複数の加減算器504,505の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な複数のシフタ(第3シフタ)412,413と、シフタ400〜407の出力とシフタ412,413の出力を選択出力する複数の2to1セレクタ(第3選択手段)312〜315と、これら複数のセレクタ312〜315の出力のうちいずれか二つの出力を入力として加算または減算を行う加減算器(第3加減算器)506,507と、これら加減算器506,507の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能なシフタ(第4シフタ)414,415とを備えている。
【0013】
次に、このように構成された動的再構成可能な積和演算装置の動作について説明する。
入力データ100aと入力データ100bが入力された乗算器100からは、入力データ100a,100bの乗算結果出力100cが得られる。同様に、入力データ101aと入力データ101bが入力された乗算器101からは、入力データ101a,101bの乗算結果出力101cが得られ、入力データ102aと入力データ102bが入力された乗算器102からは、入力データ102a,102bの乗算結果出力102cが得られ、入力データ103aと入力データ103bが入力された乗算器103からは、入力データ103a,103bの乗算結果出力103cが得られ、入力データ104aと入力データ104bが入力された乗算器104からは、入力データ104a,104bの乗算結果出力104cが得られ、入力データ105aと入力データ105bが入力された乗算器105からは、入力データ105a,105bの乗算結果出力105cが得られ、入力データ106aと入力データ106bが入力された乗算器106からは、入力データ106a,106bの乗算結果出力106cが得られ、入力データ107aと入力データ107bが入力された乗算器107からは、入力データ107a,107bの乗算結果出力107cが得られる。
【0014】
また、入力データ100aと入力データ100bが入力されたデータ結合器200からは、上位ビットとして入力データ100a、下位ビットとして入力データ100bを結合した結果出力200aが得られる。同様に、入力データ101aと入力データ101bが入力されたデータ結合器201からは、上位ビットとして入力データ101a、下位ビットとして入力データ101bを結合した結果出力201aが得られ、入力データ102aと入力データ102bが入力されたデータ結合器202からは、上位ビットとして入力データ102a、下位ビットとして入力データ102bを結合した結果出力202aが得られ、入力データ103aと入力データ103bが入力されたデータ結合器203からは、上位ビットとして入力データ103a、下位ビットとして入力データ103bを結合した結果出力203aが得られ、入力データ104aと入力データ104bが入力されたデータ結合器204からは、上位ビットとして入力データ104a、下位ビットとして入力データ104bを結合した結果出力204aが得られ、入力データ105aと入力データ105bが入力されたデータ結合器205からは、上位ビットとして入力データ105a、下位ビットとして入力データ105bを結合した結果出力205aが得られ、入力データ106aと入力データ106bが入力されたデータ結合器206からは、上位ビットとして入力データ106a、下位ビットとして入力データ106bを結合した結果出力206aが得られ、入力データ107aと入力データ107bが入力されたデータ結合器207からは、上位ビットとして入力データ107a、下位ビットとして入力データ107bを結合した結果出力207aが得られる。
【0015】
続いて、上記で得られた結果出力200aと乗算結果出力100cが2to1セレクタ300に入力され、外部から入力される1ビットのセレクタ信号sel0により選択され、セレクタ出力300aが得られる。同様に、結果出力201aと乗算結果出力101cが入力されたセレクタ301からは、セレクタ信号sel1により選択されたセレクタ出力301aが得られ、結果出力202aと乗算結果出力102cが入力されたセレクタ302からは、セレクタ信号sel2により選択されたセレクタ出力302aが得られ、結果出力203aと乗算結果出力103cが入力されたセレクタ303からは、セレクタ信号sel3により選択されたセレクタ出力303aが得られ、結果出力204aと乗算結果出力104cが入力されたセレクタ304からは、セレクタ信号sel4により選択されたセレクタ出力304aが得られ、結果出力205aと乗算結果出力105cが入力されたセレクタ305からは、セレクタ信号sel5により選択されたセレクタ出力305aが得られ、結果出力206aと乗算結果出力106cが入力されたセレクタ306からは、セレクタ信号sel6により選択されたセレクタ出力306aが得られ、結果出力207aと乗算結果出力107cが入力されたセレクタ307からは、セレクタ信号sel7により選択されたセレクタ出力307aが得られる。
【0016】
続いて、上記で得られたセレクタ出力300aがシフタ400に入力され、外部から入力される1ビット以上のシフト値信号sft0により示されるシフト値分右シフトされ、シフタ出力400aが得られる。同様に、セレクタ出力301aが入力されたシフタ401からは、シフト値信号sft1により示されるシフト値分右シフトされたシフタ出力401aが得られ、セレクタ出力302aが入力されたシフタ402からは、シフト値信号sft2により示されるシフト値分右シフトされたシフタ出力402aが得られ、セレクタ出力303aが入力されたシフタ403からは、シフト値信号sft3により示されるシフト値分右シフトされたシフタ出力403aが得られ、セレクタ出力304aが入力されたシフタ404からは、シフト値信号sft4により示されるシフト値分右シフトされたシフタ出力404aが得られ、セレクタ出力305aが入力されたシフタ405からは、シフト値信号sft5により示されるシフト値分右シフトされたシフタ出力405aが得られ、セレクタ出力306aが入力されたシフタ406からは、シフト値信号sft6により示されるシフト値分右シフトされたシフタ出力406aが得られ、セレクタ出力307aが入力されたシフタ407からは、シフト値信号sft7により示されるシフト値分右シフトされたシフタ出力407aが得られる。
【0017】
続いて、上記で得られたシフタ出力400a,401aが加減算器500に入力され、外部から入力される1ビットの加減算選択信号as0により加算もしくは減算され、シフタ出力400a,401aの加減算結果出力500aが得られる。同様に、シフタ出力402a,403aが入力された加減算器501からは、加減算選択信号as1により加算もしくは減算されたシフタ出力402a,403aの加減算結果出力501aが得られ、シフタ出力404a,405aが入力された加減算器502からは、加減算選択信号as2により加算もしくは減算されたシフタ出力404a,405aの加減算結果出力502aが得られ、シフタ出力406a,407aが入力された加減算器503からは、加減算選択信号as3により加算もしくは減算されたシフタ出力406a,407aの加減算結果出力503aが得られる。
【0018】
続いて、上記で得られた加減算結果出力500aがシフタ408に入力され、外部から入力される1ビット以上のシフト値信号sft8により示されるシフト値分右シフトされ、シフタ出力408aが得られる。同様に、加減算結果出力501aが入力されたシフタ409からは、シフト値信号sft9により示されるシフト値分右シフトされたシフタ出力409aが得られ、加減算結果出力502aが入力されたシフタ410からは、シフト値信号sft10により示されるシフト値分右シフトされたシフタ出力410aが得られ、加減算結果出力503aが入力されたシフタ411からは、シフト値信号sft11により示されるシフト値分右シフトされたシフタ出力411aが得られる。
【0019】
続いて、上記で得られたシフタ出力408aとシフタ出力400aがセレクタ308に入力され、外部から入力される1ビットのセレクタ信号sel8により選択され、セレクタ出力308aが得られる。同様に、シフタ出力401aとシフタ出力409aが入力されたセレクタ309からは、セレクタ信号sel9により選択されたセレクタ出力309aが得られ、シフタ出力410aとシフタ出力406aが入力されたセレクタ310からは、セレクタ信号sel10により選択されたセレクタ出力310aが得られ、シフタ出力407aとシフタ出力411aが入力されたセレクタ311からは、セレクタ信号sel11により選択されたセレクタ出力311aが得られる。
【0020】
続いて、上記で得られたセレクタ出力308aとセレクタ出力309aが加減算器504に入力され、加減算選択信号as4により加算もしくは減算されたセレクタ出力308a,309aの加減算結果出力504aが得られる。同様に、セレクタ出力310aとセレクタ出力311aが入力された加減算器505からは、加減算選択信号as5により加算もしくは減算されたセレクタ出力310a,311aの加減算結果出力505aが得られる。
【0021】
続いて、上記で得られた加減算結果出力504aがシフタ412に入力され、外部から入力される1ビット以上のシフト値信号sft12により示されるシフト値分右シフトされ、シフタ出力412aが得られる。同様に、加減算結果出力505aが入力されたシフタ413からは、シフト値信号sft13により示されるシフト値分右シフトされたシフタ出力413aが得られる。
【0022】
続いて、上記で得られたシフタ出力412aとシフタ出力402aがセレクタ312に入力され、外部から入力される1ビットのセレクタ信号sel12により選択され、セレクタ出力312aが得られる。同様に、シフタ出力403aとシフタ出力413aが入力されたセレクタ313からは、セレクタ信号sel13により選択されたセレクタ出力313aが得られ、シフタ出力412aとシフタ出力404aが入力されたセレクタ314からは、セレクタ信号sel14により選択されたセレクタ出力314aが得られ、シフタ出力405aとシフタ出力413aが入力されたセレクタ315からは、セレクタ信号sel15により選択されたセレクタ出力315aが得られる。
【0023】
続いて、上記で得られたセレクタ出力312aとセレクタ出力313aが加減算器506に入力され、加減算選択信号as6により加算もしくは減算されたセレクタ出力312a,313aの加減算結果出力506aが得られる。同様に、セレクタ出力314aとセレクタ出力315aが入力された加減算器507からは、加減算選択信号as7により加算もしくは減算されたセレクタ出力314a,315aの加減算結果出力507aが得られる。
【0024】
続いて、上記で得られた加減算結果出力506aがシフタ414に入力され、外部から入力されるシフト値信号sft14により示されるシフト値分右シフトし、シフタ出力414aが得られる。同様に、加減算結果出力507aが入力されたシフタ415からは、シフト値信号sft15により示されるシフト値分右シフトされたシフタ出力415aが得られる。尚、上記で得られたシフタ出力408a〜415aは、いずれも外部に出力できる。
【0025】
以上のように、実施の形態1の動的再構成可能な積和演算装置によれば、それぞれが2入力の乗算を行う複数の乗算器と、2入力のデータのうち、一方を上位ビット、他方を下位ビットとしてデータの結合を行う複数のデータ結合器と、複数の乗算器の出力と複数のデータ結合器の出力を選択出力する複数の第1選択手段と、複数の第1選択手段の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な複数の第1シフタと、複数の第1シフタの出力のうちいずれか二つの出力を入力として加算または減算を行う複数の第1加減算器と、複数の第1加減算器の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な複数の第2シフタと、第1シフタの出力と第2シフタの出力を選択出力する複数の第2選択手段と、複数の第2選択手段の出力のうちいずれか二つの出力を入力として加算または減算を行う複数の第2加減算器と、複数の第2加減算器の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な複数の第3シフタと、第1シフタの出力と第3シフタの出力を選択出力する複数の第3選択手段と、複数の第3選択手段の出力のうちいずれか二つの出力を入力として加算または減算を行う第3加減算器と、第3加減算器の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な第4シフタとを備えたので、乗算器の並列数を増加させることなく任意の入力数の積和演算が可能となる。また、様々なフィルタ演算、バタフライ演算、足し合わせ演算、行列演算が可能な、面積効率のよい動的再構成可能な演算装置を得られる。
【0026】
実施の形態2.
図3−1および図3−2は、この発明の実施の形態2における動的再構成可能な積和演算装置を示すものである。
実施の形態2の動的再構成可能な積和演算装置は、実施の形態1の積和演算装置に対して、入力データの一方に、レジスタ(記憶素子)600〜607と2to1セレクタ(第4選択手段)316〜323を設け、これらのセレクタ316〜323によってレジスタ600〜607の値か入力データ100b〜107bかを選択するようにしたものである。
【0027】
図3において、セレクタ316〜323の一方の入力は入力データ100b〜107bであり、他方の入力にはレジスタ600〜607が接続され、これらのレジスタ出力600a〜607aが入力されるようになっている。また、セレクタ316〜323からのセレクタ出力316a〜323aは、乗算器100〜107に入力されるよう構成されている。これ以外の構成は、図1および図2に示した実施の形態1と同様であるため、対応する部分に同一符号を付してその説明を省略する。
【0028】
次に、実施の形態2の動作について説明する。
レジスタ600〜607には、必要に応じて予め値を設定する。入力データ100bとレジスタ600の出力データ600aがセレクタ316に入力され、外部から入力される1ビットのセレクト信号sel16により選択され、セレクタ出力316aが得られる。
【0029】
同様に、入力データ101bとレジスタ601の出力データ601aが入力されたセレクタ317からは、セレクト信号sel17により選択されたセレクタ出力317aが得られ、入力データ102bとレジスタ602の出力データ602aが入力されたセレクタ318からは、セレクト信号sel18により選択されたセレクタ出力318aが得られ、入力データ103bとレジスタ603の出力データ603aが入力されたセレクタ319からは、セレクト信号sel19により選択されたセレクタ出力319aが得られ、入力データ104bとレジスタ604の出力データ604aが入力されたセレクタ320からは、セレクト信号sel20により選択されたセレクタ出力320aが得られ、入力データ105bとレジスタ605の出力データ605aが入力されたセレクタ321からは、セレクト信号sel21により選択されたセレクタ出力321aが得られ、入力データ106bとレジスタ606の出力データ606aが入力されたセレクタ322からは、セレクト信号sel22により選択されたセレクタ出力322aが得られ、入力データ107bとレジスタ607の出力データ607aが入力されたセレクタ323からは、セレクト信号sel23により選択されたセレクタ出力323aが得られる。
【0030】
続いて、入力データ100aと上記で得られたセレクタ出力316aが入力された乗算器100からは、入力データ100aとセレクタ出力316aの乗算結果出力100cが得られる。同様に、入力データ101aとセレクタ出力317aが入力された乗算器101からは、入力データ101aとセレクタ出力317aの乗算結果出力101cが得られ、入力データ102aとセレクタ出力318aが入力された乗算器102からは、入力データ102aとセレクタ出力318aの乗算結果出力102cが得られ、入力データ103aとセレクタ出力319aが入力された乗算器103からは、入力データ103aとセレクタ出力319aの乗算結果出力103cが得られ、入力データ104aとセレクタ出力320aが入力された乗算器104からは、入力データ104aとセレクタ出力320aの乗算結果出力104cが得られ、入力データ105aとセレクタ出力321aが入力された乗算器105からは、入力データ105aとセレクタ出力321aの乗算結果出力105cが得られ、入力データ106aとセレクタ出力322aが入力された乗算器106からは、入力データ106aとセレクタ出力322aの乗算結果出力106cが得られ、入力データ107aとセレクタ出力323aが入力された乗算器107からは、入力データ107aとセレクタ出力323aの乗算結果出力107cが得られる。
【0031】
また、入力データ100aとセレクタ出力316aが入力されたデータ結合器200からは、上位ビットとして入力データ100a、下位ビットとしてセレクタ出力316aを結合した結果出力200aが得られる。同様に、入力データ101aとセレクタ出力317aが入力されたデータ結合器201からは、上位ビットとして入力データ101a、下位ビットとしてセレクタ出力317aを結合した結果出力201aが得られ、入力データ102aとセレクタ出力318aが入力されたデータ結合器202からは、上位ビットとして入力データ102a、下位ビットとしてセレクタ出力318aを結合した結果出力202aが得られ、入力データ103aとセレクタ出力319aが入力されたデータ結合器203からは、上位ビットとして入力データ103a、下位ビットとしてセレクタ出力319aを結合した結果出力203aが得られ、入力データ104aとセレクタ出力320aが入力されたデータ結合器204からは、上位ビットとして入力データ104a、下位ビットとしてセレクタ出力320aを結合した結果出力204aが得られ、入力データ105aとセレクタ出力321aが入力されたデータ結合器205からは、上位ビットとして入力データ105a、下位ビットとしてセレクタ出力321aを結合した結果出力205aが得られ、入力データ106aとセレクタ出力322aが入力されたデータ結合器206からは、上位ビットとして入力データ106a、下位ビットとしてセレクタ出力322aを結合した結果出力206aが得られ、入力データ107aとセレクタ出力323aが入力されたデータ結合器207からは、上位ビットとして入力データ107a、下位ビットとしてセレクタ出力323aを結合した結果出力207aが得られる。
尚、これ以降の動作は実施の形態1と同様であるため、ここでの説明は省略する。
【0032】
以上のように、実施の形態2の動的再構成可能な積和演算装置によれば、任意の値を保持する複数の記憶素子と、複数の記憶素子の出力と所定の入力とを選択する第4選択手段を設け、複数の乗算器とデータ結合器は、第4選択手段の選択結果を、2入力のうちの一方の入力とするようにしたので、乗算器の一方の入力データが固定値である場合に、毎回外部から入力データとして固定値を入力するのにかかっていたサイクル数やバス幅を削減することができる。
【0033】
実施の形態3.
図4−1および図4−2は、この発明の実施の形態3における動的再構成可能な積和演算装置を示す構成図である。
実施の形態3は、図4−1および図4−2に示すように、実施の形態2の構成に加えて、乗算器100〜107、シフタ(第2のシフタ)408〜411、シフタ(第3のシフタ)412,413、シフタ(第4のシフタ)414,415の後段側に、それぞれの出力値を保持するレジスタ(記憶素子)608〜623を設けたものである。これ以外の構成は実施の形態2と同様であるため、対応する部分に同一符号を付してその説明を省略する。
【0034】
次に、実施の形態3の動作について説明する。
レジスタ600〜607には、必要に応じて予め値を設定する。入力データ100bとレジスタ600の出力データ600aがセレクタ316に入力され、外部から入力される1ビットのセレクト信号sel16により選択され、セレクタ出力316aが得られる。同様に、入力データ101bとレジスタ601の出力データ601aが入力されたセレクタ317からは、セレクト信号sel17により選択されたセレクタ出力317aが得られ、入力データ102bとレジスタ602の出力データ602aが入力されたセレクタ318からは、セレクト信号sel18により選択されたセレクタ出力318aが得られ、入力データ103bとレジスタ603の出力データ603aが入力されたセレクタ319からは、セレクト信号sel19により選択されたセレクタ出力319aが得られ、入力データ104bとレジスタ604の出力データ604aが入力されたセレクタ320からは、セレクト信号sel20により選択されたセレクタ出力320aが得られ、入力データ105bとレジスタ605の出力データ605aが入力されたセレクタ321からは、セレクト信号sel21により選択されたセレクタ出力321aが得られ、入力データ106bとレジスタ606の出力データ606aが入力されたセレクタ322からは、セレクト信号sel22により選択されたセレクタ出力322aが得られ、入力データ107bとレジスタ607の出力データ607aが入力されたセレクタ323からは、セレクト信号sel23により選択されたセレクタ出力323aが得られる。
【0035】
続いて、入力データ100aと上記で得られたセレクタ出力316aが乗算器100に入力され、得られる入力データ100aとセレクタ出力316aの乗算結果出力100cをレジスタ608に格納する。同様に、入力データ101aとセレクタ出力317aが入力された乗算器101から得られる入力データ101aとセレクタ出力317aの乗算結果出力101cをレジスタ609に格納し、入力データ102aとセレクタ出力318aが入力された乗算器102から得られる入力データ102aとセレクタ出力318aの乗算結果出力102cをレジスタ610に格納し、入力データ103aとセレクタ出力319aが入力された乗算器103から得られる入力データ103aとセレクタ出力319aの乗算結果出力103cをレジスタ611に格納し、入力データ104aとセレクタ出力320aが入力された乗算器104から得られる入力データ104aとセレクタ出力320aの乗算結果出力104cをレジスタ612に格納し、入力データ105aとセレクタ出力321aが入力された乗算器105から得られる入力データ105aとセレクタ出力321aの乗算結果出力105cをレジスタ613に格納し、入力データ106aとセレクタ出力322aが入力された乗算器106から得られる入力データ106aとセレクタ出力322aの乗算結果出力106cをレジスタ614に格納し、入力データ107aとセレクタ出力323aが入力された乗算器107から得られる入力データ107aとセレクタ出力323aの乗算結果出力107cをレジスタ615に格納する。
【0036】
また、入力データ100aと316aが入力されたデータ結合器200からは、上位ビットとして入力データ100a、下位ビットとしてセレクタ出力316aを結合した結果出力200aが得られる。同様に、入力データ101aとセレクタ出力317aが入力されたデータ結合器201からは、上位ビットとして入力データ101a、下位ビットとしてセレクタ出力317aを結合した結果出力201aが得られ、入力データ102aとセレクタ出力318aが入力されたデータ結合器202からは、上位ビットとして入力データ102a、下位ビットとしてセレクタ出力318aを結合した結果出力202aが得られ、入力データ103aとセレクタ出力319aが入力されたデータ結合器203からは、上位ビットとして入力データ103a、下位ビットとしてセレクタ出力319aを結合した結果出力203aが得られ、入力データ104aとセレクタ出力320aが入力されたデータ結合器204からは、上位ビットとして入力データ104a、下位ビットとしてセレクタ出力320aを結合した結果出力204aが得られ、入力データ105aとセレクタ出力321aが入力されたデータ結合器205からは、上位ビットとして入力データ105a、下位ビットとしてセレクタ出力321aを結合した結果出力205aが得られ、入力データ106aとセレクタ出力322aが入力されたデータ結合器206からは、上位ビットとして入力データ106a、下位ビットとしてセレクタ出力322aを結合した結果出力206aが得られ、入力データ107aとセレクタ出力323aが入力されたデータ結合器207からは、上位ビットとして入力データ107a、下位ビットとしてセレクタ出力323aを結合した結果出力207aが得られる。
【0037】
続いて、上記で得られた結果出力200aとレジスタ608の出力608aが2to1セレクタ300に入力され、外部から入力される1ビットのセレクタ信号sel0により選択され、セレクタ出力300aが得られる。同様に、結果出力201aとレジスタ609の出力609aが入力されたセレクタ301からは、セレクタ信号sel1により選択されたセレクタ出力301aが得られ、結果出力202aとレジスタ610の出力610aが入力されたセレクタ302からは、セレクタ信号sel2により選択されたセレクタ出力302aが得られ、結果出力203aとレジスタ611の出力611aが入力されたセレクタ303からは、セレクタ信号sel3により選択されたセレクタ出力303aが得られ、結果出力204aとレジスタ612の出力612aが入力されたセレクタ304からは、セレクタ信号sel4により選択されたセレクタ出力304aが得られ、結果出力205aとレジスタ613の出力613aが入力されたセレクタ305からは、セレクタ信号sel5により選択されたセレクタ出力305aが得られ、結果出力206aとレジスタ614の出力614aが入力されたセレクタ306からは、セレクタ信号sel6により選択されたセレクタ出力306aが得られ、結果出力207aとレジスタ615の出力615aが入力されたセレクタ307からは、セレクタ信号sel7により選択されたセレクタ出力307aが得られる。
【0038】
続いて、上記で得られたセレクタ出力300aがシフタ400に入力され、外部から入力される1ビット以上のシフト値信号sft0により示されるシフト値分右シフトされ、シフタ出力400aが得られる。同様に、セレクタ出力301aが入力されたシフタ401からは、シフト値信号sft1により示されるシフト値分右シフトされたシフタ出力401aが得られ、セレクタ出力302aが入力されたシフタ402からは、シフト値信号sft2により示されるシフト値分右シフトされたシフタ出力402aが得られ、セレクタ出力303aが入力されたシフタ403からは、シフト値信号sft3により示されるシフト値分右シフトされたシフタ出力403aが得られ、セレクタ出力304aが入力されたシフタ404からは、シフト値信号sft4により示されるシフト値分右シフトされたシフタ出力404aが得られ、セレクタ出力305aが入力されたシフタ405からは、シフト値信号sft5により示されるシフト値分右シフトされたシフタ出力405aが得られ、セレクタ出力306aが入力されたシフタ406からは、シフト値信号sft6により示されるシフト値分右シフトされたシフタ出力406aが得られ、セレクタ出力307aが入力されたシフタ407からは、シフト値信号sft7により示されるシフト値分右シフトされたシフタ出力407aが得られる。
【0039】
続いて、上記で得られたシフタ出力400aとシフタ出力401aが加減算器500に入力され、外部から入力される1ビットの加減算選択信号as0により加算もしくは減算され、シフタ出力400a,401aの加減算結果出力500aが得られる。同様に、シフタ出力402aとシフタ出力403aが入力された加減算器501からは、加減算選択信号as1により加算もしくは減算されたシフタ出力402a,403aの加減算結果出力501aが得られ、シフタ出力404aとシフタ出力405aが入力された加減算器502からは、加減算選択信号as2により加算もしくは減算されたシフタ出力404a,405aの加減算結果出力502aが得られ、シフタ出力406aとシフタ出力407aが入力された加減算器503からは、加減算選択信号as3により加算もしくは減算されたシフタ出力406a,407aの加減算結果出力503aが得られる。
【0040】
続いて、上記で得られた加減算結果出力500aがシフタ408に入力され、外部から入力される1ビット以上のシフト値信号sft8により示されるシフト値分右シフトされたシフタ出力408aをレジスタ616に格納する。同様に、加減算結果出力501aをシフタ409に入力し、シフト値信号sft9により示されるシフト値分右シフトされたシフタ出力409aをレジスタ617に格納し、加減算結果出力502aをシフタ410に入力し、シフト値信号sft10により示されるシフト値分右シフトされたシフタ出力410aをレジスタ618に格納し、加減算結果出力503aをシフタ411に入力し、シフト値信号sft11により示されるシフト値分右シフトされたシフタ出力411aをレジスタ619に格納する。
【0041】
続いて、上記で得られたレジスタ出力616aとシフタ出力400aがセレクタ308に入力され、外部から入力される1ビットのセレクタ信号sel8により選択され、セレクタ出力308aが得られる。同様に、シフタ出力401aとレジスタ出力617aが入力されたセレクタ309からは、セレクタ信号sel9により選択されたセレクタ出力309aが得られ、レジスタ出力618aとシフタ出力406aが入力されたセレクタ310からは、セレクタ信号sel10により選択されたセレクタ出力310aが得られ、シフタ出力407aとレジスタ出力619aが入力されたセレクタ311からは、セレクタ信号sel11により選択されたセレクタ出力311aが得られる。
【0042】
続いて、上記で得られたセレクタ出力308aとセレクタ出力309aが加減算器504に入力され、加減算選択信号as4により加算もしくは減算されたセレクタ出力308a,309aの加減算結果出力504aが得られる。同様に、セレクタ出力310aとセレクタ出力311aが入力された加減算器505からは、加減算選択信号as5により加算もしくは減算されたセレクタ出力310a,311aの加減算結果出力505aが得られる。
【0043】
続いて、上記で得られた加減算結果出力504aがシフタ412に入力され、外部から入力される1ビット以上のシフト値信号sft12により示されるシフト値分右シフトされたシフタ出力412aをレジスタ620に格納する。同様に、加減算結果出力505aをシフタ413に入力し、シフト値信号sft13により示されるシフト値分右シフトされたシフタ出力413aをレジスタ21に格納する。
【0044】
続いて、上記で得られたレジスタ出力620aとシフタ出力402aがセレクタ312に入力され、外部から入力される1ビットのセレクタ信号sel12により選択され、セレクタ出力312aが得られる。同様に、シフタ出力403aとレジスタ出力621aが入力されたセレクタ313からは、セレクタ信号sel13により選択されたセレクタ出力313aが得られ、レジスタ出力620aとシフタ出力404aが入力されたセレクタ314からは、セレクタ信号sel14により選択されたセレクタ出力314aが得られ、シフタ出力405aとレジスタ出力621aが入力されたセレクタ315からは、セレクタ信号sel15により選択されたセレクタ出力315aが得られる。
【0045】
続いて、上記で得られたセレクタ出力312aとセレクタ出力313aが加減算器506に入力され、加減算選択信号as6により加算もしくは減算されたセレクタ出力312a,313aの加減算結果出力506aが得られる。同様に、セレクタ出力314aとセレクタ出力315aが入力された加減算器507からは、加減算選択信号as7により加算もしくは減算されたセレクタ出力314a,315aの加減算結果出力507aが得られる。
【0046】
続いて、上記で得られた加減算結果出力506aがシフタ414に入力され、外部から入力されるシフト値信号sft14により示されるシフト値分右シフトしたシフタ出力414aをレジスタ622に格納する。同様に、加減算結果出力507aをシフタ415に入力し、シフト値信号sft15により示されるシフト値分右シフトされたシフタ出力415aをレジスタ623に格納する。尚、上記のレジスタ616〜623の出力616a〜623aは、いずれも外部に出力できる。
【0047】
尚、上記実施の形態3では、実施の形態2の構成に対してレジスタ608〜623を設けたが、実施の形態1の構成に対して設けるようにしてもよい。
【0048】
以上のように、実施の形態3の動的再構成可能な積和演算装置によれば、乗算器、第2シフタ、第3シフタ、第4シフタの出力をそれぞれ保持する記憶素子を設けたので、乗算器の演算結果出力と加減算出力をシフトした演算結果出力を保持することができ、その結果、パイプライン動作が可能となり、装置全体のスループットを向上させることができる。
【0049】
実施の形態4.
図5は、この発明の実施の形態4における積和演算処理向けの動的再構成可能プロセッサを示す構成図である。
図5において、動的再構成可能プロセッサ1は、実施の形態1〜3の動的再構成可能な積和演算装置のうちのいずれかである積和演算装置2と、積和演算装置2に入力される演算前のデータを格納する入力バッファ3および入力バッファ4と、演算前のデータあるいは演算後のデータを格納する入出力バッファ5、入出力バッファ6、入出力バッファ7と、入力バッファ3,4および入出力バッファ5〜7のいずれかより積和演算装置2に入力するデータを選択する入力セレクタ部8と、積和演算装置2の出力格納先を選択する出力セレクタ部9と、積和演算装置2をはじめとする動的再構成可能プロセッサ1の各部のコンフィグレーションデータを複数種類分格納するコンフィグレーションメモリ10と、入力バッファ3,4、入出力バッファ5〜7、コンフィグレーションメモリ10をはじめとする動的再構成可能プロセッサ1の各メモリに対する制御信号を生成するメモリ制御信号生成部11と、入力バッファ3,4および入出力バッファ5〜7における積和演算装置2に入力されるデータの格納元アドレスと、入出力バッファ5〜7における積和演算装置2から出力されるデータの格納元アドレスを出力するアドレス制御部12と、アドレス制御部12から出力される出力データ格納元アドレスを積和演算装置2のパイプライン段数分遅延させる出力データ格納先アドレス遅延部13と、外部CPU(外部プロセッサ)15からの命令をデコードする命令I/F(インタフェース)部14を備える。
【0050】
外部CPU15は、外部メモリ16に格納されているコンフィグレーションデータをバス17、信号線18を介してコンフィグレーションメモリ10に転送し、動的再構成可能プロセッサ1を動的に回路構成可能な状態に準備する。このとき、メモリ制御信号生成部11は、外部より入力されたアドレス19を動的再構成可能プロセッサ1の各バッファおよびメモリを制御する信号20に変換し、出力する。また、積和演算装置2において演算されるデータも外部メモリ16から入力バッファ3もしくは入力バッファ4に転送する。
【0051】
続いて、CPU15は命令21によってコンフィグレーション指示を出す。命令I/F部14は、入力された命令21をデコードし、命令コード22と命令引数23を出力する。コンフィグレーション時には、命令コード22にはコンフィグレーションを指示するコードが出力され、命令引数23にはコンフィグレーションメモリのアドレスが出力される。コンフィグレーションメモリ10は命令引数23により指示されたアドレスに格納しているコンフィグレーションデータ24を出力し、動的再構成可能プロセッサ1の各部の回路を構成し演算開始可能な状態にする。
【0052】
演算開始可能となった後、CPU15は演算実行を命令する。演算実行の命令21が入力された命令I/F部14は、演算実行を示す命令コード22と積和演算装置2の入力データ格納元アドレスと出力データ格納先アドレスを生成するための命令引数23をアドレス制御部12に出力する。アドレス制御部12はこれらの信号から入力データ格納元アドレスと出力データ格納先アドレス25を生成し、各バッファと入力セレクタ部8へ出力する。このとき、積和演算装置2が複数段のパイプライン構成をとっている場合、積和演算装置2の出力データ26は、パイプライン段数のサイクル分遅れて出力されるため、出力データ格納先アドレスも同じサイクル分遅らせる必要がある。そのため、アドレス制御部12で生成されたアドレス25は出力データ格納先アドレス遅延部13によって遅延され、出力格納先アドレス27として各入出力バッファと出力セレクタ9へ出力される。即ち、出力データ格納先アドレス遅延部13は、積和演算装置2に備えた記憶素子の段数分、積和演算装置2の出力格納先アドレスを遅延させる。入力データ格納元アドレスを受け取った各バッファと入力セレクタ部8によって各バッファから出力されたデータ28の中から積和演算装置2で演算されるデータが選択され、積和演算装置2へ入力データ29が入力される。
【0053】
積和演算装置2で演算された結果の出力データ26は出力セレクタ部9によってデータの並び順等が変更されて、出力データ30として入出力バッファ5〜7のいずれかに格納される。最終的に動的再構成可能プロセッサ1の外部へ出力されるデータ31は入出力バッファ5〜7のいずれかからバス17を介して外部メモリ16に転送される。上記外部メモリ16と各バッファ間でのデータ転送の際に、CPU15を介さずにDMA(Direct Memory Access)コントローラ32を使用することで、例えば、入力バッファ3から入力データを読み出して積和演算装置2が処理を実行しているのと並行して、外部メモリ16から入力バッファ4へ次の演算で使用する入力データを転送することができる。また、入出力バッファ5を積和演算装置2の出力データ格納先として使用しているのと並行して、前の演算結果が格納されている入出力バッファ6または入出力バッファ7から外部メモリ16へデータを転送することもできる。
【0054】
以上のように、実施の形態4の動的再構成可能プロセッサによれば、実施の形態1から実施の形態3のうちのいずれかの動的再構成可能な積和演算装置と、動的再構成可能な積和演算装置における演算前のデータを格納する入力バッファと、動的再構成可能な積和演算装置における演算前のデータまたは演算後のデータを格納する入出力バッファと、入力バッファと入出力バッファから動的再構成可能な積和演算装置での演算対象データを選択し、動的再構成可能な積和演算装置に供給する入力セレクタ部と、動的再構成可能な積和演算装置の出力を選択して入出力バッファに出力する出力セレクタ部と、動的再構成可能な積和演算装置の回路構成情報と入力セレクタ部の選択指示情報と出力セレクタ部の選択指示情報と入力データバッファの制御情報と入出力バッファの制御情報を格納するコンフィグレーションメモリと、入力バッファまたは入出力バッファまたはコンフィグレーションメモリと、外部間とのデータ転送時に外部からのアドレス指示に基づいて、入力バッファと入出力バッファとコンフィグレーションメモリの制御信号を生成するメモリ制御信号生成部と、動的再構成可能な積和演算装置に入力されるデータの格納元アドレスと動的再構成可能な積和演算装置からの出力データの格納先アドレスを制御するアドレス制御部と、外部プロセッサからの命令をデコードする命令I/F部とを備え、外部プロセッサからの指示により、任意の演算を行うようにしたので、任意の入力数の積和演算、フィルタ演算、バタフライ演算、足し合わせ演算、行列演算といった様々な演算を行うプロセッサを容易に実現することができる。
【0055】
また、実施の形態4の動的再構成可能プロセッサによれば、入力バッファは、動的再構成可能な積和演算装置への入力データの格納元となるバッファ面以外に、このバッファ面とは別に制御可能なバッファ面を有するようにしたので、動的再構成可能な積和演算装置への入力データ格納元となるバッファ面と、外部からのデータ転送入力を行うバッファ面として使用するといったように、バッファ面を並行して使用でき、処理効率を向上させることができる。
【0056】
また、実施の形態4の動的再構成可能プロセッサによれば、入出力バッファは、動的再構成可能な積和演算装置への入力データの格納元となるバッファ面または動的再構成可能な積和演算装置からの出力データの格納先となるバッファ面以外に、このバッファ面とは別に制御可能なバッファ面を有するようにしたので、動的再構成可能な積和演算装置への入力データ格納元となるバッファ面と、動的再構成可能な積和演算装置の出力データ格納先となるバッファ面として並行して使用し、動的再構成可能な積和演算装置の演算結果を再び積和演算装置の入力としてフィードバックできるだけでなく、外部とのデータ転送入出力を行うバッファ面と、積和演算装置の出力データ格納先となるバッファ面といったようにバッファ面を並行して使用することができ、処理効率を向上させることができる。
【0057】
また、実施の形態4の動的再構成可能プロセッサによれば、動的再構成可能な積和演算装置に備えた記憶素子の段数分、動的再構成可能な積和演算装置の出力格納先アドレスを遅延させるための出力データ格納先アドレス遅延部を備えたので、動的再構成可能な積和演算装置のパイプライン動作が可能となる。
【0058】
実施の形態5.
図6−1から図6−3は、この発明の実施の形態5における動的再構成可能プロセッサの入力セレクタ部を示すものである。
図5の動的再構成可能プロセッサ1における積和演算装置2は、入力データを2つの格納元から読み出すことが可能である。図6−1および図6−2において、1段目入力セレクタ33は、入力バッファ3,4および入出力バッファ5〜7から、積和演算装置2への一方の入力データが格納されているバッファを選択するためのセレクタであり、1段目入力セレクタ34は、もう一方の入力データが格納されているバッファを選択するためのセレクタである。
【0059】
ここで、入力バッファ3,4は1ワード128ビットであるのに対し、入出力バッファ5〜7は1ワード256ビットとする。これは、積和演算装置2における出力データが入力データの倍のビット数として出力される場合を想定している。1段目入力セレクタ33において、128ビットデータである入力バッファ3の出力3aがデータ結合器330によって下位に128ビットの“0”を結合されることで256ビットのデータ330aが出力され、同様に、128ビットデータである入力バッファ4の出力4aがデータ結合器331によって下位に128ビットの“0”を結合されることで256ビットのデータ331aが出力され、5to1セレクタ332には256ビットの出力330a,出力331a,出力5a,出力6a,出力7aが入力され、3ビットのsel_input00によって選択された256ビットのデータ33aが出力される。
【0060】
同様に、1段目入力セレクタ34において、128ビットデータである入力バッファ3の出力3aがデータ結合器340によって下位に128ビットの“0”を結合されることで256ビットのデータ340aが出力され、同様に、128ビットデータである入力バッファ4の出力4aがデータ結合器341によって下位に128ビットの“0”を結合されることで256ビットのデータ341aが出力され、5to1セレクタ342には256ビットの出力340a,341a、出力5a,6a,7aが入力され、3ビットのsel_input01によって選択された256ビットのデータ34aが出力される。
【0061】
続いて、2段目入力セレクタ35に、256ビットである1段目入力セレクタ33の出力33aが入力され、セレクト信号sel_input10によって128ビット分のデータが選択されてデータ35aが出力される。このとき、256ビットから128ビットへのデータ選択方法は4通りあり、1つ目は256ビットの信号33aを連続する16ビットデータ16個として扱い、前半の16個のデータを出力35aとして選択する場合と、2つ目は256ビットの信号33aを連続する16ビットデータ16個として扱い、後半の16個のデータを出力35aとして選択する場合と、3つ目は256ビットの信号33aを連続する32ビットデータ8個として扱い、各8データのうち上位16ビットのみを集めて出力33aとして選択する場合と、4つ目は256ビットの信号33aを連続する32ビットデータ8個として扱い、各8データのうち下位16ビットのみを集めて出力35aとして選択する場合である。
【0062】
同様に、2段目入力セレクタ36には、256ビットである1段目入力セレクタ34の出力34aが入力され、セレクト信号sel_input11によって128ビット分のデータが選択されデータ36aが出力される。256ビットから128ビットへのデータ選択方法は4通りあり、1つ目は256ビットの信号34aを連続する16ビットデータ16個として扱い、前半の16個のデータを出力36aとして選択する場合と、2つ目は256ビットの信号34aを連続する16ビットデータ16個として扱い、後半の16個のデータを出力36aとして選択する場合と、3つ目は256ビットの信号34aを連続する32ビットデータ8個として扱い、各8データのうち上位16ビットのみを集めて出力36aとして選択する場合と、4つ目は256ビットの信号34aを連続する32ビットデータ8個として扱い、各8データのうち下位16ビットのみを集めて出力36aとして選択する場合である。
【0063】
続いて、ローテータ37に備えられている128ビットデータを16ビットずつ8個に分けて格納するレジスタr00〜r07とr10〜r17に、128ビットである2段目入力セレクタ35の出力35aが入力され、続くサイクルでr00〜r07の出力370aがr20〜r27に、r00〜r07とr10〜r17には新たな出力35aが入力される。続いて、8to1セレクタ3710にはレジスタr20〜r27の8データが入力され、セレクタ3711にはレジスタr21〜r27とr10の8データが入力され、セレクタ3712にはr22〜r27とr10〜r11の8データ入力され、セレクタ3713にはr23〜r27とr10〜r12の8データが入力され、セレクタ3714にはr24〜r27とr10〜r13の8データが入力され、セレクタ3715にはr25〜r27とr10〜r14の8データが入力され、セレクタ3716にはr26〜r27とr10〜r15の8データが入力され、セレクタ3717にはr27とr10〜r16の8データ入力される。
【0064】
各セレクタ3710〜3717には同じ3ビットのセレクト信号sel_rot0が入力され、それぞれsel_rot0によって入力8データから1データが選択されて出力データ3710a〜3717aが出力される。即ち、出力データ3710a〜3717aには、sel_rot0が0の場合はr20〜r27のデータが選択出力され、sel_rot0が1の場合はr21〜r27とr10のデータが選択出力され、sel_rot0が2の場合はr22〜r27とr10〜r11のデータが選択出力され、sel_rot0が3の場合はr23〜r27とr10〜r12のデータが選択出力され、sel_rot0が4の場合はr24〜r27とr10〜r13のデータが選択出力され、sel_rot0が5の場合はr25〜r27とr10〜r14のデータが選択出力され、sel_rot0が6の場合はr26〜r27とr10〜r15のデータが選択出力され、sel_rot0が7の場合はr27とr10〜r16のデータが選択出力される。
【0065】
同様に、ローテータ38に備えられている128ビットデータを16ビットずつ8個に分けて格納するレジスタr08〜r0fとr18〜r1fに、128ビットである2段目入力セレクタ36の出力36aが入力され、続くサイクルでr08〜r0fの出力370bがr28〜r2fに、r08〜r0fとr18〜r1fには新たな出力36aが入力される。続いて、8to1セレクタ3718にはレジスタr28〜r2fの8データが入力され、セレクタ3719にはレジスタr29〜r2fとr18の8データが入力され、セレクタ371aにはr2a〜r2fとr18〜r19の8データ入力され、セレクタ371bにはr2b〜r2fとr18〜r1aの8データが入力され、セレクタ371cにはr2c〜r2fとr18〜r1bの8データが入力され、セレクタ371dにはr2d〜r2fとr18〜r1cの8データが入力され、セレクタ371eにはr2e〜r2fとr18〜r1dの8データが入力され、セレクタ371fにはr2fとr18〜r1eの8データ入力される。各セレクタ3718〜371fには同じセレクト信号sel_rot1が入力され、sel_rot1によってそれぞれ入力8データから1データが選択されて出力データ3718a〜371faが出力される。
【0066】
即ち、出力データ3718a〜371faには、sel_rot1が0の場合はr28〜r2fのデータが選択出力され、sel_rot1が1の場合はr29〜r2fとr18のデータが選択出力され、sel_rot1が2の場合はr2a〜r2fとr18〜r19のデータが選択出力され、sel_rot1が3の場合はr2b〜r2fとr18〜r1aのデータが選択出力され、sel_rot1が4の場合はr2c〜r2fとr18〜r1bのデータが選択出力され、sel_rot1が5の場合はr2d〜r2fとr18〜r1cのデータが選択出力され、sel_rot1が6の場合はr2e〜r2fとr18〜r1dのデータが選択出力され、sel_rot1が7の場合はr2fとr18〜r1eのデータが選択出力される。
【0067】
上記ローテータ37,38により、例えば、1ワード128ビット構成である入力バッファ3または入力バッファ4から、2ワードにまたがり連続する8データを読み出したい場合、1サイクル目で1ワード目、2サイクル目で2ワード目をローテータ37,38に入力することで、ローテータ37の場合は2サイクル目でr20〜r27に1ワード目の8データ、r10〜r17に2ワード目の8データが格納されることになり、ローテータ38の場合は2サイクル目でr28〜r2fに1ワード目の8データ、r18〜r1fに2ワード目の8データが格納されることになり、2ワード分のデータを連続する16データとして扱うことができ、上記連続する16データからセレクタ3710〜3717、3718〜371fにより連続する8データとして読み出し可能となる。
【0068】
続いて、3段目入力セレクタ39に、ローテータ37の出力3710a〜3717aと、ローテータ38の出力3718a〜371faが入力され、上記16個の入力全てが、積和演算装置2の16個の入力データ100a〜107aと入力データ100b〜107bにそれぞれ一対一で対応している16to1セレクタ390a〜397a,390b〜397b全てに入力され、それぞれセレクト信号sel_a0〜7とsel_b0〜7によって、16データから1データずつ選択され、入力データ100a〜107aと入力データ100b〜107bが出力される。
【0069】
このように、1ワードのビット数の異なるバッファや、2ワードにまたがっている連続データを扱うことができ、また、自由度の高いデータ選択を可能としたことで、積和演算装置2によって演算された結果出力を再び積和演算装置2の入力として使用することや、複雑なデータ取得が必要となる演算にも対応可能である。
【0070】
以上のように、実施の形態5の動的再構成可能プロセッサによれば、入力セレクタ部は、入力バッファと入出力バッファからいずれか一つを選択する1段目入力セレクタと、1段目入力セレクタの出力のうち半数のデータを選択する2段目入力セレクタと、2段目入力セレクタの選択結果を2サイクル分保持したデータから連続する半数のデータを選択するローテータと、ローテータの出力を並び替えて動的再構成可能な積和演算装置へ出力する3段目入力セレクタとを備えるようにしたので、動的再構成可能プロセッサとして様々な演算に対応することができる。
【0071】
実施の形態6.
図7は、この発明の実施の形態6における動的再構成可能プロセッサの出力セレクタ部を示すものである。
積和演算装置2は、常に8個の出力616a〜623a(図1〜図4参照)を出力する。積和演算装置2の出力616a〜623aは出力セレクタ部9に入力され、8to1セレクタ900〜907全てに入力される。セレクタ900からは、セレクト信号sel_o0によって出力616a〜623aのうち1データが選択され、データ900aが出力される。同様に、セレクタ901からはsel_o1によって選択されたデータ901aが出力され、セレクタ902からはsel_o2によって選択されたデータ902aが出力され、セレクタ903からはsel_o3によって選択されたデータ903aが出力され、セレクタ904からはsel_o4によって選択されたデータ904aが出力され、セレクタ905からはsel_o5によって選択されたデータ905aが出力され、セレクタ906からはsel_o6によって選択されたデータ906aが出力され、セレクタ907からはsel_o7によって選択されたデータ907aが出力される。
【0072】
上記8個の出力データ900a〜907aは、データ900a側をMSBとして連結され、1データ9aとして出力される。即ち、積和演算装置2の1出力データが32ビットである場合は、データ9aは32ビットのデータが8データ連結された、256ビットデータとして出力される。積和演算装置2で実現される演算によっては一部の出力のみ有効データ、残りの出力は無効データとなる場合があるが、このように、8個のセレクタそれぞれにおいて8個の出力データから選択可能としたことで、積和演算装置2の出力データを格納するバッファに無駄な領域を作らないようにデータを詰めながら格納することや、次の演算で入力データを読み出し易いようにデータを格納することが可能となり、メモリの使用効率のよいプロセッサを実現することができる。
【0073】
以上のように、実施の形態6の動的再構成可能プロセッサによれば、出力セレクタ部は、動的再構成可能な積和演算装置の複数の出力を入力とする複数の選択手段を備え、動的再構成可能な積和演算装置の複数の出力を任意の順番に並べ替えるようにしたので、メモリの使用効率のよい動的再構成可能プロセッサを実現することができる。
【0074】
実施の形態7.
図8はこの発明の実施の形態7における動的再構成可能プロセッサのアドレス制御部12(図5を参照)の説明図である。
アドレス制御部12は、ある演算における積和演算装置2から出力されるデータの格納先アドレスと、積和演算装置2へ入力されるデータの2つの格納元アドレスの組となっているアドレスデータを予め複数組分テーブルに格納しており、CPU15から入力される命令21に含まれる命令引数23によって示されたテーブルアドレスに格納されているアドレスデータを読み出し、積和演算装置2の各部へ出力する(図5中の入力データ格納元アドレスと出力データ格納先アドレス25)。例えば、命令引数23が0x0002を示している場合、図8において、テーブルアドレス0x0002に格納されている、出力データ格納先アドレスが0x0102、入力データ0格納元アドレスが0x0004、入力データ1格納元アドレスが0x0102のアドレスデータが読み出される。このとき、出力データ格納先アドレスと入力データ1格納元アドレスは同じ値を示しているが、アドレス制御部12のテーブルに格納されているアドレスは、各バッファの内部アドレスを示すものであり、バッファの種類はコンフィグレーションデータ24によって示される。このように、プロセッサ内部にあるアドレス制御部によって演算に使用するアドレスを生成することで、外部CPU15からの命令引数23のビット数を少なくすることができる。
【0075】
このように、実施の形態7の動的再構成可能プロセッサによれば、アドレス制御部は、一つまたは二つの動的再構成可能な積和演算装置への入力データ格納元アドレスと一つの動的再構成可能な積和演算装置からの出力データ格納先アドレスの組み合わせデータを複数種類格納可能なテーブルを有し、テーブルの組み合わせデータは、動的再構成可能な積和演算装置による処理が開始される前に格納されると共に、積和演算処理実行時に外部プロセッサからの指示に基づいて、使用する組み合わせデータを選択し、入力バッファの入力データ格納元アドレスと、入出力バッファの入力データ格納元アドレスまたは出力データ格納先アドレスを決定するようにしたので、外部プロセッサからの命令引数のビット数を少なくすることができる。
【0076】
次に、音響アプリケーションの一つであるエコーキャンセラ等で用いられる適応フィルタを例に、本発明の積和演算処理向け動的再構成可能プロセッサの動作例を説明する。
以下に1フレーム分の適応フィルタ処理のアルゴリズムを式1〜6に示す。idx_sampleはサンプルのインデックスを示し、ここでは1フレームのサンプル数を80とする。idx_tapはタップのインデックスを示し、ここではタップ数を320とする。まず、適応ガンマ係数と一つ前のサンプルの出力データを乗算し、wビット右シフトした結果をDelta2とする(式1)。このとき、idx_sampleが0のとき、一つ前のサンプルの出力データとは、前フレームの最終サンプルの出力データとなる。次に、上記で求めたDelta2と参照信号を乗算し、LSB側xビットの誤差を吸収するために1<<(x-1)を加算した後xビット右シフトした結果をMux1とする(式2)。
【0077】
上記Mux1と前のサンプルで使用した適応フィルタ係数を加算し、新たな適応フィルタ係数とする(式3)。上記更新した適応フィルタ係数と参照信号を乗算した結果をSum’に累算する(式4)。上記式2〜4をタップ数分実行した後、累算結果Sum’をzビット右シフトし(式5)、得られたSum(0−319)とマイク入力データの差を求めた結果が出力データとなる(式6)。式4〜5で示される演算は320タップ分の積和演算に相当するが、本発明の実施の形態1〜3に示す積和演算装置の乗算器並列数が8であることから、320タップの積和演算を8タップずつの積和演算を40回に分けて実行した後、上記8タップずつの積和演算結果を8個ずつ5回に分けて足し合わせ、得られた5個の足し合わせ演算結果を5個足し合わせる演算によって足し合わせ、最後にzビットシフトすることで実現する。
【0078】
以降、式1で示す演算をDelta2演算、式2で示す演算をMux1演算、式3で示す演算をaout演算、式6で示す演算をeout演算と呼ぶ。また、式4〜5で示す演算については、式4の演算を8タップ分並列処理する演算を8mul_add演算、8mul_add演算の出力を8個ずつ足し合わせる演算を8T_add演算、8T_add演算の出力を5個足し合わせる演算を5T_add演算と呼ぶ。
【0079】
【数1】

【0080】
図9は、本発明の動的再構成可能プロセッサで上記の適応フィルタ処理を実行する手順を示す説明図である。
[P1]コンフィグレーションデータをコンフィグレーションメモリ10に転送し、アドレス制御部12内のアドレステーブルにアドレスデータを転送する。
[P2]初期の適応フィルタ係数を入出力バッファ6に転送する。
[P3]1フレーム前の最終サンプルの出力データを入出力バッファ5に転送する。
[P4]1フレーム分の参照信号を入力バッファ3に転送する。
[P5]マイク入力データと適応用ガンマ係数を入力バッファ4に転送する。
[P6]Delta2演算用回路を構成する。
[P7]入力バッファ4から適応用ガンマ係数を、入出力バッファ5から1フレーム前の最終サンプルの出力データを読み出し([P8])、積和演算装置2でDelta2演算を1回実行する。演算結果を入出力バッファ7に格納する([P9])。
[P10]Mux1演算用回路を構成する。
【0081】
[P11]入出力バッファ7からDelta2の演算結果を、入力バッファ3から参照信号を読み出し([P12])、Mux1演算を80回実行する。演算結果を入出力バッファ5に格納する([P13])。
[P14]aout演算用回路を構成する。
[P15]入出力バッファ6から更新前の適応フィルタ係数を、入出力バッファ5からMux1を読み出し([P16])、aout演算を80回実行する。演算結果である更新後の適応フィルタ係数を入出力バッファ7に格納する([P17])。
[P18]8mul_add演算用回路を構成する。
[P19]入力バッファ3から参照信号を、入出力バッファ7から更新後の適応フィルタ係数を読み出し([P20])、8mul_add演算を40回実行する。演算結果を入出力バッファ6に格納する([P21])。
【0082】
[P22]8T_add演算用回路を構成する。
[P23]入出力バッファ6から8mul_add演算結果を読み出し([P24])、8T_add演算を5回実行する。演算結果を入出力バッファ7に格納する([P25])。
[P26]5T_add演算用回路を構成する。
[P27]入出力バッファ7から8T_add演算結果を読み出し([P28])、5T_addを1回実行する。演算結果SUM(0−319)を入出力バッファ6に格納する([P29])。
[P30]eout演算用回路を構成する。
[P31]入出力バッファ6から5T_add演算結果SUM(0−319)を、入力バッファ4からマイク入力データを読み出し([P32])、eout演算を1回実行する。演算結果である出力データを入出力バッファ5に格納する([P33])。
【0083】
以上、[P6]〜[P33]を入力バッファ3と入力バッファ4を交互に使用して、1フレーム分80サンプル分繰り返し実行する。
[P34]1フレーム80サンプル分の演算が終了後、入出力バッファ5から1フレーム分の出力データと更新後の適応フィルタ係数を外部メモリ16へ転送する。
以降、[P4]〜[P34]をフレーム毎に繰り返し実行することで、適応フィルタ処理を実現することができる。
【0084】
以下に、実施の形態3による積和演算装置を用いて、上記適応フィルタ処理の各演算を行う場合の回路構成を示す。ここでは、入力データ100a〜107aおよび入力データ100b〜107bには16ビットのデータが入力され、乗算器100〜107とデータ結合器200〜207によって32ビットとなり、以降32ビットで演算され、最終のレジスタ出力616a〜623aも32ビットであるものとして説明する。
【0085】
図10−1および図10−2に、Delta2演算用回路構成を示す。
入力データ100aには入力バッファ4に格納されている適応用ガンマ係数(idx_sample)を、入力データ100bには入出力バッファ5に格納されている1サンプル前の出力データである出力データ(idx_sample−1)を入力し、残りの入力データ101a〜107aと入力データ101b〜107bには任意の値を入力する。続いてセレクタ316に入力された入力データ100bはセレクト信号sel16によって選択されデータ316aとして出力される。上記入力データ100aとセレクタ出力316aが入力された乗算器100の乗算結果出力100c=入力データ100a×入力データ100b=適応用ガンマ係数(idx_sample)×出力データ(idx_sample−1)はレジスタ608に格納される。
【0086】
上記レジスタ608の出力608aはセレクタ300に入力され、セレクト信号sel0によって選択される。上記セレクタ300の出力300aはシフタ400に入力され、シフト値信号sft0によって示されるwビット分右シフトされる。即ち、シフト出力400aは、“適応用ガンマ係数(idx_sample)×出力データ(idx_sample−1)>>w”である。
一方で、入力データ101aと入力データ101bには任意の値が、レジスタ601には“0”がセットされ、入力データ101bと上記レジスタ601の出力601aが入力されたセレクタ317ではセレクト信号sel17によってレジスタ出力601aが選択されてデータ317aは“0”となる。上記データ317aと入力データ101aが入力された乗算器101からは“0”が出力され、レジスタ609に格納される。セレクタ301に入力された上記レジスタ609の出力609aはセレクト信号sel1によって選択され、上記セレクタ301の出力301aはシフタ401に入力される。
【0087】
シフト信号sft1には“0”が指示されているため出力301aはシフトされずにシフタ出力401aとして出力される。即ち、シフタ出力401aは“0”である。上記出力401aとシフタ400の出力400aが入力された加減算器500では加減算選択信号as0によって加算が選択され、出力401a、即ち“0”と、出力400aの加算結果500aが出力される。上記出力500aはシフタ408に入力され、シフト値信号sft8には“0”が指示されているためシフタ出力408aには、出力500a=適応用ガンマ係数(idx_sample)×出力データ(idx_sample−1)>>wが出力される。上記出力408aはレジスタ616に格納された後、レジスタ出力616aとして出力される。このレジスタ出力616aがDelta2(idx_sample)である。
【0088】
これと並行して、入力データ106aと入力データ106bに任意の値が、また、レジスタ606に“0”がセットされ、入力データ106bと上記レジスタ606の出力606aが入力されたセレクタ322ではセレクト信号sel22によってレジスタ出力606aが選択されてデータ322aは“0”となる。上記データ322aと入力データ106aが入力された乗算器106からは“0”が出力され、レジスタ614に格納される。セレクタ306に入力された上記レジスタ614の出力614aはセレクト信号sel6によって選択され、上記セレクタ306の出力306aはシフタ406に入力される。シフト信号sft6には“0”が指示されているため出力306aはシフトされずにシフタ出力406a=“0”が出力される。
【0089】
同様に、入力データ107aと入力データ107bに任意の値が、また、レジスタ607に“0”がセットされ、入力データ107bと上記レジスタ607の出力607aが入力されたセレクタ323ではセレクト信号sel23によって出力607aが選択されてデータ323aは“0”となる。上記データ323aと入力データ107aが入力された乗算器107からは“0”が出力され、レジスタ615に格納される。セレクタ307に入力された上記レジスタ615の出力615aはセレクト信号sel7によって選択され、上記セレクタ307の出力307aはシフタ407に入力される。シフト信号sft7には“0”が指示されているため出力307aはシフトされずにシフタ出力407a=“0”が出力される。
【0090】
上記出力406aと出力407aが入力された加減算器503では加減算選択信号as3により加算が選択され、出力406aと出力407a=“0”と“0”の加算結果503aが出力される。出力503aは“0”であるシフト値信号sft11が指示されているシフタ411においてシフトされずにそのままシフタ出力411a=“0”として出力され、レジスタ619に格納され、出力619a=“0”が出力される。上記出力619aは、本Delta2演算の直後に行うMux1演算の入力として使用されるものであり、出力616a=Delta2と共に入出力バッファ7に格納される。このとき、入出力バッファ7には、次のMux1演算の入力形式に合わせて、Delta2と“0”が交互に4回ずつ並ぶように、即ち、Delta2_“0”_Delta2_“0”_Delta2_“0”_Delta2_“0”という順番で1ワードに格納する。


【0091】
図11−1および図11−2に、Mux1演算用回路構成を示す。
入力データ100a〜107aには、上記Delta2演算で求めたDelta2と“0”を交互に入力し、入力データ100b〜107bには、入力バッファ3に格納されている参照信号と任意の値を交互に入力する。入力データ100b=参照信号(idx_tap=0)はセレクタ316に入力され、セレクト信号sel16によって選択され、出力316aとして出力される。同様に、セレクタ318に入力された入力データ102b=参照信号(idx_tap=1)はセレクト信号sel18によって選択されて出力318aとして出力され、セレクタ320に入力された入力データ104b=参照信号(idx_tap=2)はセレクト信号sel20によって選択されて出力320aとして出力され、セレクタ322に入力された入力データ106b=参照信号(idx_tap=3)はセレクト信号sel22によって選択されて出力322aとして出力される。
【0092】
上記セレクタ出力316a=参照信号(idx_tap=0)と入力データ100a=Delta2は乗算器100で乗算され、乗算結果出力100c=Delta2×参照信号(idx_tap=0)はレジスタ608に格納される。同様に、セレクタ出力318a=参照信号(idx_tap=1)と入力データ102a=Delta2が入力された乗算器102からは乗算結果出力102c=Delta2×参照信号(idx_tap=1)が出力されてレジスタ610に格納され、セレクタ出力320a=参照信号(idx_tap=2)と入力データ104a=Delta2が入力された乗算器104からは乗算結果出力104c=Delta2×参照信号(idx_tap=2)が出力されてレジスタ612に格納され、セレクタ出力322a=参照信号(idx_tap=3)と入力データ106a=Delta2が入力された乗算器106からは乗算結果106c=Delta2×参照信号(idx_tap=3)が出力されてレジスタ614に格納される。
【0093】
一方、定数レジスタ601には“1<<(x−1)”が入力され、レジスタ出力601aはセレクタ317でセレクト信号sel17によって選択されデータ317aとして出力される。“0”である入力データ101aと上記セレクタ出力317a=“1<<(x−1)”はデータ結合器201で結合され、出力201aは上位側“0”、下位側“1<<(x−1)”のデータ、即ち、“1<<(x−1)”となり、セレクタ301にてセレクト信号sel1によって選択され、データ301aとして出力される。同様に、定数レジスタ603に入力された“1<<(x−1)”はレジスタ出力603aとなり、セレクタ319でセレクト信号sel19によって選択されデータ319aとして出力された後、データ結合器203にて上位に“0”である入力データ103aが結合され、結果出力203a=“1<<(x−1)”はセレクタ303にてセレクト信号sel3によって選択されデータ303aとして出力される。
【0094】
定数レジスタ605に入力された“1<<(x−1)”はレジスタ出力605aとなり、セレクタ321でセレクト信号sel21によって選択されデータ321aとして出力された後、データ結合器205にて上位に“0”である入力データ105aが結合され、結果出力205a=“1<<(x−1)”はセレクタ305にてセレクト信号sel5によって選択されデータ305aとして出力される。定数レジスタ607に入力された“1<<(x−1)”はレジスタ出力607aとなり、セレクタ323でセレクト信号sel23によって選択されデータ323aとして出力された後、データ結合器207にて上位に“0”である入力データ107aが結合され、結果出力207a=“1<<(x−1)”はセレクタ307にてセレクト信号sel7によって選択されデータ307aとして出力される。
【0095】
上記セレクタ出力300a〜307aは、“0”であるシフト値信号sft0〜7が入力されるシフタ400〜407に入力され、そのままシフタ出力400a〜407aとして出力される。即ち、シフタ出力400aは“Delta2×参照信号(idx_tap=0)”、シフタ出力401aは“1<<(x−1)”、シフタ出力402aは“Delta2×参照信号(idx_tap=1)”、シフタ出力403aは“1<<(x−1)”、シフタ出力404aは“Delta2×参照信号(idx_tap=2)”、シフタ出力405aは“1<<(x−1)”、シフタ出力406aは“Delta2×参照信号(idx_tap=3)”、シフタ出力407aは“1<<(x−1)”である。
【0096】
シフタ出力400aとシフタ出力401aは加減算器500に入力され、加減算選択信号as0により加算が選択されることから加減算結果出力500a=400a+401a=Delta2×参照信号(idx_tap=0)+1<<(x−1)が出力される。同様に、加減算選択信号as1により加算が選択された加減算器501にはシフタ出力402aとシフタ出力403aが入力され、加算結果501a=Delta2×参照信号(idx_tap=1)+1<<(x−1)が出力され、加減算選択信号as2により加算が選択された加減算器502にはシフタ出力404aとシフタ出力405aが入力され、加算結果502a=Delta2×参照信号(idx_tap=2)+1<<(x−1)が出力され、加減算選択信号as3により加算が選択された加減算器503にはシフタ出力406aとシフタ出力407aが入力され、加算結果503a=Delta2×参照信号(idx_tap=3)+1<<(x−1)が出力される。
【0097】
上記加算結果500a〜503aは、それぞれ、シフト値信号sft8〜11に“x”が入力されたシフタ408〜411でxビット右シフトされ、シフタ出力408a=(Delta2×参照信号(idx_tap=0)+1<<(x−1))>>xがレジスタ616に格納される。同様に、シフタ出力409a=(Delta2×参照信号(idx_tap=2)+1<<(x−1))>>xはレジスタ617に格納され、シフタ出力410a=(Delta2×参照信号(idx_tap=2)+1<<(x−1))>>xはレジスタ618に格納され、シフタ出力411a=(Delta2×参照信号(idx_tap=3)+1<<(x−1))>>xはレジスタ619に格納される。上記レジスタ616〜619の出力616a〜619aは、それぞれ、Mux1(idx_tap=0)〜Mux1(idx_tap=3)として、入出力バッファ5に格納される。
【0098】
以上のように一度のMux1演算では4並列でMux1が求められるため、320タップの適応フィルタの場合、参照信号のidx_tapを4ずつずらしながら80回Mux1演算を繰り返せばよい。
【0099】
図12−1および図12−2に、aout演算用回路構成を示す。
入出力バッファ5から上記Mux1演算で求めた32ビットの出力Mux1(idx_tap=0)のうち上位16ビットを入力データ100a、下位16ビットを入力データ100bに入力し、Mux1(idx_tap=1)のうち上位16ビットを入力データ102a、下位16ビットを入力データ102bに入力し、Mux1(idx_tap=2)のうち上位16ビットを入力データ104a、下位16ビットを入力データ104bに入力し、Mux1(idx_tap=3)のうち上位16ビットを入力データ106a、下位16ビットを入力データ106bに入力する。入力データ101a,103a,105a,107aには入出力バッファ6から更新前の適応フィルタ係数ain(idx_tap=0)、ain(idx_tap=1)、ain(idx_tap=2)、ain(idx_tap=3)をそれぞれ入力し、入力データ101b,103b,105b,107bには任意の値を入力する。
【0100】
入力データ100bはセレクタ316に入力され、セレクト信号sel16によって選択されてデータ316aとして出力される。同様に、セレクタ318に入力された入力データ102bはセレクト信号sel18によって選択されデータ318aとして出力され、セレクタ320に入力された入力データ104bはセレクト信号sel20によって選択されデータ320aとして出力され、セレクタ322に入力された入力データ106bはセレクト信号sel22によって選択されデータ322aとして出力される。一方、セレクタ317には入力データ101bとレジスタ601の出力601a=“0”が入力され、セレクト信号sel17によって出力601a=“0”が選択されてデータ317aとして出力される。同様に、入力データ103bとレジスタ603の出力603aが入力されたセレクタ319からはセレクト信号sel19によって選択された出力603aがデータ319aとして出力され、入力データ105bとレジスタ605の出力605aが入力されたセレクタ321からはセレクト信号sel21によって選択された出力605aがデータ321aとして出力され、入力データ107bとレジスタ607の出力607aが入力されたセレクタ323からはセレクト信号sel23によって選択された出力607aがデータ323aとして出力される。
【0101】
入力データ100aと出力316aはデータ結合器200に入力され、上位側に100a、下位側に316aが結合された結果出力200a=Mux1(idx_tap=0)が出力される。同様に、入力データ102aと出力318aが入力されたデータ結合器202からは結果出力202a=Mux1(idx_tap=1)が出力され、入力データ104aと出力320aが入力されたデータ結合器204からは結果出力204a=Mux1(idx_tap=2)が出力され、入力データ106aと出力322aが入力されたデータ結合器206からは結果出力206a=Mux1(idx_tap=3)が出力される。
【0102】
また、入力データ101aと出力317aはデータ結合器201に入力され、上位側に入力データ101a=ain(idx_tap=0)、下位側に出力317a=16ビットの“0”が結合された結果出力201a=ain(idx_tap=0)<<16が出力される。同様に、入力データ103aと出力319aが入力されたデータ結合器203からは結果出力203a=ain(idx_tap=1)<<16が出力され、入力データ105aと出力321aが入力されたデータ結合器205からは結果出力205a=ain(idx_tap=2)<<16が出力され、入力データ107aと出力323aが入力されたデータ結合器207からは結果出力207a=ain(idx_tap=3)<<16が出力される。続いて、結果出力200a〜207aは、それぞれセレクタ300〜307に入力され、セレクト信号sel0〜sel7によって選択されてセレクタ出力300a〜307aとして出力される。
【0103】
セレクタ出力300a,302a,304a,306aは、それぞれシフタ400,402,404,406に入力されるが、シフト値信号sft0,sft2,sft4,sft6が“0”であるため、シフトされずにシフタ出力400a,402a,404a,406aとして出力される。即ち、シフタ出力400aは“Mux1(idx_tap=0)”、シフタ出力402aは“Mux1(idx_tap=1)”、シフタ出力404aは“Mux1(idx_tap=2)”、シフタ出力406aは“Mux1(idx_tap=3)”となる。セレクタ出力301a,303a,305a,307aは、それぞれシフタ401,403,405,407に入力され、シフト値信号sft1,sft3,sft5,sft7が16であるため16ビット右シフトされて、シフタ出力401a=ain(idx_tap=0)、シフタ出力403a=ain(idx_tap=1)、シフタ出力405a=ain(idx_tap=2)、シフタ出力407a=ain(idx_tap=3)が出力される。このとき、入力データ101a,103a,105a,107aに入力されたainは16ビットの符号付きのデータであるが、データ結合器によって下位16ビットに“0”を結合されたことで32ビットデータとなり、さらにシフタによって16ビット右シフトされたことで、上位16ビットに符号ビットが拡張された32ビットデータとして扱うことができる。
【0104】
上記シフタ出力400aとシフタ出力401aは加減算器500に入力され、加減算選択信号as0により加算が選択されることでシフタ出力400a,401aの加算結果500a=Mux1(idx_tap=0)+ain(idx_tap=0)が出力される。同様に、シフタ出力402aとシフタ出力403aが入力された加減算器501からは加算結果501a=Mux1(idx_tap=1)+ain(idx_tap=1)が出力され、シフタ出力404aとシフタ出力405aが入力された加減算器502からは加算結果502a=Mux1(idx_tap=2)+ain(idx_tap=2)が出力され、シフタ出力406aとシフタ出力407aが入力された加減算器503からは加算結果503a=Mux1(idx_tap=3)+ain(idx_tap=3)が出力される。加算結果500a〜503aは、それぞれシフタ408〜411に入力されるが、シフト値信号sft8〜sft11が“0”であるためシフトされずに、シフタ出力408a〜411aとして出力されレジスタ616〜619に格納される。
【0105】
レジスタ出力616a=Mux1(idx_tap=0)+ain(idx_tap=0)は更新後の適応フィルタ係数aout(idx_tap=0)として、レジスタ出力617a=Mux1(idx_tap=1)+ain(idx_tap=1)はaout(idx_tap=1)として、レジスタ出力618a=Mux1(idx_tap=2)+ain(idx_tap=2)はaout(idx_tap=2)として、レジスタ出力619a=Mux1(idx_tap=3)+ain(idx_tap=3)はaout(idx_tap=3)として入出力バッファ7に格納される。
【0106】
以上のように一度のaout演算では4並列で適応フィルタ係数aoutが求められるため、320タップの適応フィルタの場合、Mux1と更新前の適応フィルタ係数ainのidx_tapを4ずつずらしながら80回aout演算を繰り返せばよい。
【0107】
図13−1および図13−2に、8mul_add演算用回路構成を示す。
入力データ100a〜107aには入力バッファ3から参照信号(idx_tap=0)〜参照信号(idx_tap=7)を、入力データ100b〜107bには入出力バッファ7から更新後の適応フィルタ係数aout(idx_tap=0)〜aout(idx_tap=7)を入力する。
【0108】
入力データ100b〜107bは、それぞれセレクタ316〜323に入力され、セレクト信号sel16〜sel23によって選択されデータ316a〜323a、即ち、aout(idx_tap=0)〜aout(idx_tap=7)が出力される。乗算器100〜107に、それぞれ入力データ100a〜107a、セレクタ出力316a〜323aが入力される。乗算器100〜107からは、それぞれ乗算結果出力100c=参照信号(idx_tap=0)×aout(idx_tap=0)、乗算結果出力101c=参照信号(idx_tap=1)×aout(idx_tap=1)、乗算結果出力102c=参照信号(idx_tap=2)×aout(idx_tap=2)、乗算結果出力103c=参照信号(idx_tap=3)×aout(idx_tap=3)、乗算結果出力104c=参照信号(idx_tap=4)×aout(idx_tap=4)、乗算結果出力105c=参照信号(idx_tap=5)×aout(idx_tap=5)、乗算結果出力106c=参照信号(idx_tap=6)×aout(idx_tap=6)、乗算結果出力107c=参照信号(idx_tap=7)×aout(idx_tap=7)が出力され、それぞれレジスタ608〜615に格納される。
【0109】
次に、セレクタ300にレジスタ出力600aが入力され、セレクト信号sel0によって選択されて出力300a=レジスタ出力600aが出力される。同様に、レジスタ出力601aが入力されたセレクタ301からはセレクト信号sel1によって選択された出力301a=レジスタ出力601aが出力され、レジスタ出力602aが入力されたセレクタ302からはセレクト信号sel2によって選択された出力302a=レジスタ出力602aが出力され、レジスタ出力603aが入力されたセレクタ303からはセレクト信号sel3によって選択された出力303a=レジスタ出力603aが出力され、レジスタ出力604aが入力されたセレクタ304からはセレクト信号sel4によって選択された出力304a=レジスタ出力604aが出力され、レジスタ出力605aが入力されたセレクタ305からはセレクト信号sel5によって選択された出力305a=レジスタ出力605aが出力され、レジスタ出力606aが入力されたセレクタ306からはセレクト信号sel6によって選択された出力306a=レジスタ出力606aが出力され、レジスタ出力607aが入力されたセレクタ307からはセレクト信号sel7によって選択された出力307a=レジスタ出力607aが出力される。
【0110】
次に、セレクタ出力300aはシフタ400に入力され、yビットシフトを指示するシフト値信号sft0によってyビット右シフトされシフタ出力400a=(参照信号(idx_tap=0)×aout(idx_tap=0))>>yが出力される。同様に、セレクタ出力301aが入力されたシフタ401からは、シフト値信号sft1の指示によりyビット右シフトされたシフタ出力401a=(参照信号(idx_tap=1)×aout(idx_tap=1))>>yが出力され、セレクタ出力302aが入力されたシフタ402からは、シフト値信号sft2の指示によりyビット右シフトされたシフタ出力402a=(参照信号(idx_tap=2)×aout(idx_tap=2))>>yが出力され、セレクタ出力303aが入力されたシフタ403からは、シフト値信号sft3の指示によりyビット右シフトされたシフタ出力403a=(参照信号(idx_tap=3)×aout(idx_tap=3))>>yが出力され、セレクタ出力304aが入力されたシフタ404からは、シフト値信号sft4の指示によりyビット右シフトされたシフタ出力404a=(参照信号(idx_tap=4)×aout(idx_tap=4))>>yが出力され、セレクタ出力305aが入力されたシフタ405からは、シフト値信号sft5の指示によりyビット右シフトされたシフタ出力405a=(参照信号(idx_tap=5)×aout(idx_tap=5))>>yが出力され、セレクタ出力306aが入力されたシフタ406からは、シフト値信号sft6の指示によりyビット右シフトされたシフタ出力406a=(参照信号(idx_tap=6)×aout(idx_tap=6))>>yが出力され、セレクタ出力307aが入力されたシフタ407からは、シフト値信号sft7の指示によりyビット右シフトされたシフタ出力407a=(参照信号(idx_tap=7)×aout(idx_tap=7))>>yが出力される。
【0111】
次に、加減算器500に上記のシフタ出力400a,401aが入力され、加減算選択信号as0によって加算が選択されることで加算結果出力500a=400a+401a=(参照信号(idx_tap=0)×aout(idx_tap=0))>>y+(参照信号(idx_tap=1)×aout(idx_tap=1))>>yが得られる。同様に、加減算選択信号as1によって加算が指示された加減算器501にはシフタ出力402a,403aが入力され加算結果出力501a=402a+403a=(参照信号(idx_tap=2)×aout(idx_tap=2))>>y+(参照信号(idx_tap=3)×aout(idx_tap=3))>>yが得られ、加減算選択信号as2によって加算が指示された加減算器502にはシフタ出力404a,405aが入力され加算結果出力502a=404a+405a=(参照信号(idx_tap=4)×aout(idx_tap=4))>>y+(参照信号(idx_tap=5)×aout(idx_tap=5))>>yが得られ、加減算選択信号as3によって加算が指示された加減算器503にはシフタ出力406a,407aが入力され加算結果出力503a=406a+407a=(参照信号(idx_tap=6)×aout(idx_tap=6))>>y+(参照信号(idx_tap=7)×aout(idx_tap=7))>>yが得られる。
【0112】
上記で得られた加算結果出力500a〜503aはシフタ408〜411に入力されるが、シフト値信号sft8〜sft11は“0”であるためシフトされずに、シフタ出力408a=500a=(参照信号(idx_tap=0)×aout(idx_tap=0))>>y+(参照信号(idx_tap=1)×aout(idx_tap=1))>>y、シフタ出力409a=501a=(参照信号(idx_tap=2)×aout(idx_tap=2))>>y+(参照信号(idx_tap=3)×aout(idx_tap=3))>>y、シフタ出力410a=502a=(参照信号(idx_tap=4)×aout(idx_tap=4))>>y+(参照信号(idx_tap=5)×aout(idx_tap=5))>>y、シフタ出力411a=503a=(参照信号(idx_tap=6)×aout(idx_tap=6))>>y+(参照信号(idx_tap=7)×aout(idx_tap=7))>>yが出力され、それぞれ、レジスタ616〜619に格納される。
【0113】
続いて、上記レジスタ出力616a〜619aは、それぞれセレクタ308〜311に入力され、セレクト信号sel8〜sel11によって選択され、セレクタ出力308a=616a=(参照信号(idx_tap=0)×aout(idx_tap=0))>>y+(参照信号(idx_tap=1)×aout(idx_tap=1))>>y、セレクタ出力309a=617a=(参照信号(idx_tap=2)×aout(idx_tap=2))>>y+(参照信号(idx_tap=3)×aout(idx_tap=3))>>y、セレクタ出力310a=618a=(参照信号(idx_tap=4)×aout(idx_tap=4))>>y+(参照信号(idx_tap=5)×aout(idx_tap=5))>>y、セレクタ出力311a=619a=(参照信号(idx_tap=6)×aout(idx_tap=6))>>y+(参照信号(idx_tap=7)×aout(idx_tap=7))>>yが出力される。
【0114】
上記セレクタ出力308a,309aは、加減算選択信号as4によって加算が指示された加減算器504に入力され、加算結果出力504a=308a+309a=(参照信号(idx_tap=0)×aout(idx_tap=0))>>y+(参照信号(idx_tap=1)×aout(idx_tap=1))>>y+(参照信号(idx_tap=2)×aout(idx_tap=2))>>y+(参照信号(idx_tap=3)×aout(idx_tap=3))>>yが得られる。
【0115】
同様に、セレクタ出力310a,311aが入力された加減算器505からは、加減算選択信号as5によって加算が指示されることにより加算結果出力505a=310a+311a=(参照信号(idx_tap=4)×aout(idx_tap=4))>>y+(参照信号(idx_tap=5)×aout(idx_tap=5))>>y+(参照信号(idx_tap=6)×aout(idx_tap=6))>>y+(参照信号(idx_tap=7)×aout(idx_tap=7))>>yが得られる。
【0116】
上記で得られた加算結果出力504a,505aは、それぞれシフタ412とシフタ413に入力されるが、シフト値信号sft12とsft13が“0”であるためシフトされずに、シフタ出力412a=504a=(参照信号(idx_tap=0)×aout(idx_tap=0))>>y+(参照信号(idx_tap=1)×aout(idx_tap=1))>>y+(参照信号(idx_tap=2)×aout(idx_tap=2))>>y+(参照信号(idx_tap=3)×aout(idx_tap=3))>>y、シフタ出力413a=505a=(参照信号(idx_tap=4)×aout(idx_tap=4))>>y+(参照信号(idx_tap=5)×aout(idx_tap=5))>>y+(参照信号(idx_tap=6)×aout(idx_tap=6))>>y+(参照信号(idx_tap=7)×aout(idx_tap=7))>>yが出力され、それぞれレジスタ620とレジスタ621に格納される。
【0117】
上記レジスタ出力620aはセレクタ312に入力され、セレクト信号sel12によって選択されセレクタ出力312a=(参照信号(idx_tap=0)×aout(idx_tap=0))>>y+(参照信号(idx_tap=1)×aout(idx_tap=1))>>y+(参照信号(idx_tap=2)×aout(idx_tap=2))>>y+(参照信号(idx_tap=3)×aout(idx_tap=3))>>yが出力される。同様に、セレクタ313に入力されたレジスタ出力621aは、セレクト信号sel13によって選択され、セレクタ出力313a=(参照信号(idx_tap=4)×aout(idx_tap=4))>>y+(参照信号(idx_tap=5)×aout(idx_tap=5))>>y+(参照信号(idx_tap=6)×aout(idx_tap=6))>>y+(参照信号(idx_tap=7)×aout(idx_tap=7))>>yが出力される。
【0118】
上記セレクタ出力312a,313aは加減算選択信号as6によって加算が指示された加減算器506に入力され、加算結果出力506a=312a+313a=(参照信号(idx_tap=0)×aout(idx_tap=0))>>y+(参照信号(idx_tap=1)×aout(idx_tap=1))>>y+(参照信号(idx_tap=2)×aout(idx_tap=2))>>y+(参照信号(idx_tap=3)×aout(idx_tap=3))>>y+(参照信号(idx_tap=4)×aout(idx_tap=4))>>y+(参照信号(idx_tap=5)×aout(idx_tap=5))>>y+(参照信号(idx_tap=6)×aout(idx_tap=6))>>y+(参照信号(idx_tap=7)×aout(idx_tap=7))>>yが得られる。
【0119】
上記加算結果出力506aはシフタ414に入力されるが、シフト値信号sft14が“0”であるためシフトされずにシフタ出力414a=506a=(参照信号(idx_tap=0)×aout(idx_tap=0))>>y+(参照信号(idx_tap=1)×aout(idx_tap=1))>>y+(参照信号(idx_tap=2)×aout(idx_tap=2))>>y+(参照信号(idx_tap=3)×aout(idx_tap=3))>>y+(参照信号(idx_tap=4)×aout(idx_tap=4))>>y+(参照信号(idx_tap=5)×aout(idx_tap=5))>>y+(参照信号(idx_tap=6)×aout(idx_tap=6))>>y+(参照信号(idx_tap=7)×aout(idx_tap=7))>>yが出力され、レジスタ622に格納される。
【0120】
上記レジスタ622の出力622aは、8タップ分の積和演算結果sum(0〜7)として入出力バッファ6に格納される。以上のように、8mul_add演算では1回に8タップ分の積和演算を求められるため、320タップの適応フィルタの場合、参照信号とフィルタ係数aoutのidx_tapを8ずつずらしながら40回8mul_add演算を繰り返せばよい。
【0121】
図14−1および図14−2に、8T_add演算用回路構成を示す。
上記の8mul_add演算によって求められた8タップ分の積和演算結果8個、即ち、idx_tap=0〜7の積和演算結果sum(0〜7)、idx_tap=8〜15の積和演算結果sum(8〜15)、idx_tap=16〜23の積和演算結果sum(16〜23)、idx_tap=24〜31の積和演算結果sum(24〜31)、idx_tap=32〜39の積和演算結果sum(32〜39)、idx_tap=40〜47の積和演算結果sum(40〜47)、idx_tap=48〜55の積和演算結果sum(48〜55)、idx_tap=56〜63の積和演算結果sum(56〜63)を入出力バッファ6から読み出し、sum(0〜7)の上位16ビットを入力データ100aに、下位16ビットを入力データ100bに入力し、sum(8〜15)の上位16ビットを入力データ101aに、下位16ビットを入力データ101bに入力し、sum(16〜23)の上位16ビットを入力データ102aに、下位16ビットを入力データ102bに入力し、sum(24〜31)の上位16ビットを入力データ103aに、下位16ビットを入力データ103bに入力し、sum(32〜39)の上位16ビットを入力データ104aに、下位16ビットを入力データ104bに入力し、sum(40〜47)の上位16ビットを入力データ105aに、下位16ビットを入力データ105bに入力し、sum(48〜55)の上位16ビットを入力データ106aに、下位16ビットを入力データ106bに入力し、sum(56〜63)の上位16ビットを入力データ107aに、下位16ビットを入力データ107bに入力する。
【0122】
入力データ100b〜107bは、それぞれセレクタ316〜323に入力され、セレクト信号sel16〜sel23によって選択されセレクタ出力316a〜323a、即ち、sum(0〜7)〜sum(56〜63)それぞれの下位16ビットが出力される。データ結合器200〜207に、それぞれ入力データ100a〜107a、セレクタ出力316a〜323aが入力される。データ結合器200からは、入力データ100a=sum(0〜7)の上位16ビットと、セレクタ出力316a=sum(0〜7)の下位16ビットの結合結果、即ち、32ビットのsum(0〜7)が結果出力200aとして出力される。
【0123】
同様に、入力データ101a=sum(8〜15)の上位16ビットとセレクタ出力317a=sum(8〜15)の下位16ビットが入力されたデータ結合器201からは、32ビットの201a=sum(8〜15)が出力され、入力データ102a=sum(16〜23)の上位16ビットとセレクタ出力318a=sum(16〜23)の下位16ビットが入力されたデータ結合器202からは、32ビットの結果出力202a=sum(16〜23)が出力され、入力データ103a=sum(24〜31)の上位16ビットとセレクタ出力319a=sum(24〜31)の下位16ビットが入力されたデータ結合器203からは、32ビットの結果出力203a=sum(24〜31)が出力され、入力データ104a=sum(32〜39)の上位16ビットとセレクタ出力320a=sum(32〜39)の下位16ビットが入力されたデータ結合器204からは、32ビットの結果出力204a=sum(32〜39)が出力され、入力データ105a=sum(40〜47)の上位16ビットとセレクタ出力321a=sum(40〜47)の下位16ビットが入力されたデータ結合器205からは、32ビットの結果出力205a=sum(40〜47)が出力され、入力データ106a=sum(48〜55)の上位16ビットとセレクタ出力322a=sum(48〜55)の下位16ビットが入力されたデータ結合器206からは、32ビットの結果出力206a=sum(48〜55)が出力され、入力データ107a=sum(56〜63)の上位16ビットとセレクタ出力323a=sum(56〜63)の下位16ビットが入力されたデータ結合器207からは、32ビットの結果出力207a=sum(56〜63)が出力される。
【0124】
次に、セレクタ300に結果出力200aが入力され、セレクト信号sel0によって選択されてセレクタ出力300a=200a=sum(0〜7)が出力される。同様に、結果出力201aが入力されたセレクタ301からはセレクト信号sel1によって選択されたセレクタ出力301a=201a=sum(8〜15)が出力され、結果出力202aが入力されたセレクタ302からはセレクト信号sel2によって選択されたセレクタ出力302a=202a=sum(16〜23)が出力され、結果出力203aが入力されたセレクタ303からはセレクト信号sel3によって選択されたセレクタ出力303a=203a=sum(24〜31)が出力され、結果出力204aが入力されたセレクタ304からはセレクト信号sel4によって選択されたセレクタ出力304a=204a=sum(32〜39)が出力され、結果出力205aが入力されたセレクタ305からはセレクト信号sel5によって選択されたセレクタ出力305a=205a=sum(40〜47)が出力され、結果出力206aが入力されたセレクタ306からはセレクト信号sel6によって選択されたセレクタ出力306a=206a=sum(48〜55)が出力され、結果出力207aが入力されたセレクタ307からはセレクト信号sel7によって選択されたセレクタ出力307a=207a=sum(56〜63)が出力される。
【0125】
次に、セレクタ出力300aはシフタ400に入力されるがシフト値信号sft0が“0”であるためシフトされずにシフタ出力400a=sum(0〜7)が出力される。同様に、セレクタ出力301aが入力されたシフタ401からはシフタ出力401a=sum(8〜15)が出力され、セレクタ出力302aが入力されたシフタ402からはシフタ出力402a=sum(16〜23)が出力され、セレクタ出力303aが入力されたシフタ403からはシフタ出力403a=sum(24〜31)が出力され、セレクタ出力304aが入力されたシフタ404からはシフタ出力404a=sum(32〜39)が出力され、セレクタ出力305aが入力されたシフタ405からはシフタ出力405a=sum(40〜47)が出力され、セレクタ出力306aが入力されたシフタ406からはシフタ出力406a=sum(48〜55)が出力され、セレクタ出力307aが入力されたシフタ407からはシフタ出力407a=sum(56〜63)が出力される。
【0126】
次に、加減算器500に上記のシフタ出力400a,401aが入力され、加減算選択信号as0によって加算が指示されることによって加算結果出力500a=400a+401a=sum(0〜7)+sum(8〜15)が得られる。同様に、加減算選択信号as1によって加算が指示された加減算器501にはシフタ出力402a,403aが入力され、加算結果出力501a=402a+403a=sum(16〜23)+sum(24〜31)が得られ、加減算選択信号as2によって加算が指示された加減算器502にはシフタ出力404a,405aが入力され、加算結果出力502a=404a+405a=sum(32〜39)+sum(40〜47)が得られ、加減算選択信号as3によって加算が指示された加減算器503にはシフタ出力406a,407aが入力され、加算結果出力503a=406a+407a=sum(48〜55)+sum(56〜63)が得られる。
【0127】
上記で得られた加算結果出力500a〜503aはシフタ408〜411に入力されるが、シフト値信号sft8〜sft11は“0”であるためシフトされずに、シフタ出力408a=500a=sum(0〜7)+sum(8〜15)、シフタ出力409a=501a=sum(16〜23)+sum(24〜31)、シフタ出力410a=502a=sum(32〜39)+sum(40〜47)、シフタ出力411a=503a=sum(48〜55)+sum(56〜63)が出力され、それぞれ、レジスタ616〜619に格納される。
【0128】
続いて、上記レジスタ出力616a〜619aは、それぞれセレクタ308〜311に入力され、セレクト信号sel8〜sel11によって選択され、セレクタ出力308a=616a=sum(0〜7)+sum(8〜15)、セレクタ出力309a=617a=sum(16〜23)+sum(24〜31)、セレクタ出力310a=618a=sum(32〜39)+sum(40〜47)、セレクタ出力311a=619a=sum(48〜55)+sum(56〜63)が出力される。上記セレクタ出力308a,309aは加減算器504に入力され、加減算選択信号as4によって加算が指示されることによって加算結果出力504a=308a+309a=sum(0〜7)+sum(8〜15)+sum(16〜23)+sum(24〜31)が得られる。同様に、セレクタ出力310a,311aが入力された加減算器505からは、加減算選択信号as5によって加算が指示されることによって加算結果出力505a=310a+311a=sum(32〜39)+sum(40〜47)+sum(48〜55)+sum(56〜63)が得られる。
【0129】
上記で得られた加算結果出力504a,505aは、それぞれシフタ412,413に入力されるが、シフト値信号sft12とsft13が“0”であるためシフトされずに、シフタ出力412a=504a=sum(0〜7)+sum(8〜15)+sum(16〜23)+sum(24〜31)、シフタ出力413a=505a=sum(32〜39)+sum(40〜47)+sum(48〜55)+sum(56〜63)が出力され、それぞれレジスタ620,621に格納される。上記レジスタ出力620aはセレクタ312に入力され、セレクト信号sel12によって選択されセレクタ出力312a=sum(0〜7)+sum(8〜15)+sum(16〜23)+sum(24〜31)が出力される。同様に、セレクタ313に入力されたレジスタ出力621aは、セレクト信号sel13によって選択され、セレクタ出力313a=sum(32〜39)+sum(40〜47)+sum(48〜55)+sum(56〜63)が出力される。
【0130】
上記セレクタ出力312a,313aは加減算器506に入力され、加減算選択信号as6によって加算が指示されることによって加算結果出力506a=312a+313a=sum(0〜7)+sum(8〜15)+sum(16〜23)+sum(24〜31)+sum(32〜39)+sum(40〜47)+sum(48〜55)+sum(56〜63)が得られる。
【0131】
上記加算結果出力506aはシフタ414に入力されるが、シフト値信号sft14が“0”であるためシフトされずにシフタ出力414a=506a=sum(0〜7)+sum(8〜15)+sum(16〜23)+sum(24〜31)+sum(32〜39)+sum(40〜47)+sum(48〜55)+sum(56〜63)が出力され、レジスタ622に格納される。上記レジスタ622の出力622aは、8タップ分の積和演算結果を8個、即ち、idx_tap=0〜63の64タップ分の積和演算結果sum(0〜63)として入出力バッファ7に格納される。
【0132】
以上のように、8T_add演算では1回に8個分のデータを足し合わすことができるので、320タップの適応フィルタの場合、8mul_add演算の出力40個を5回にわけて8T_add演算を行なえばよい。
【0133】
図15−1および図15−2に、5T_add演算用回路構成を示す。
上記の8T_add演算によって求められた64タップ分の積和演算結果5個、即ち、idx_tap=0〜63の積和演算結果sum(0〜63)、idx_tap=64〜127の積和演算結果sum(64〜127)、idx_tap=128〜191の積和演算結果sum(128〜191)、idx_tap=192〜255の積和演算結果sum(192〜255)、idx_tap=256〜319の積和演算結果sum(256〜319)を入出力バッファ7から読み出し、sum(0〜63)の上位16ビットを入力データ100aに、下位16ビットを入力データ100bに入力し、sum(64〜127)の上位16ビットを入力データ101aに、下位16ビットを入力データ101bに入力し、sum(128〜191)の上位16ビットを入力データ102aに、下位16ビットを入力データ102bに入力し、sum(192〜255)の上位16ビットを入力データ103aに、下位16ビットを入力データ103bに入力し、sum(256〜319)の上位16ビットを入力データ104aに、下位16ビットを入力データ104bに入力し、入力データ105a〜107aと入力データ105b〜107bには任意の値を入力する。
【0134】
入力データ100b〜104bは、それぞれセレクタ316〜320に入力され、セレクト信号sel16〜sel20によって選択されセレクタ出力316a〜320a、即ち、sum(0〜63)〜sum(256〜319)それぞれの下位16ビットが出力される。セレクタ321〜323には“0”がセットされた定数レジスタ605〜607の出力605a〜607aがそれぞれ入力され、セレクト信号sel21〜sel23によって選択されてセレクタ出力321a=“0”、322a=“0”、323a=“0”が出力される。次に、データ結合器200〜204に、それぞれ入力データ100a〜104a、セレクタ出力316a〜320aが入力される。データ結合器200からは、入力データ100a=sum(0〜63)の上位16ビットと、セレクタ出力316a=sum(0〜63)の下位16ビットの結合結果、即ち32ビットのsum(0〜63)が結果出力200aとして出力される。
【0135】
同様に、入力データ101a=sum(64〜127)の上位16ビットとセレクタ出力317a=sum(64〜127)の下位16ビットが入力されたデータ結合器201からは、32ビットの結果出力201a=sum(64〜127)が出力され、入力データ102a=sum(128〜191)の上位16ビットとセレクタ出力318a=sum(128〜191)の下位16ビットが入力されたデータ結合器202からは、32ビットの結果出力202a=sum(128〜191)が出力され、入力データ103a=sum(192〜255)の上位16ビットとセレクタ出力319a=sum(192〜255)の下位16ビットが入力されたデータ結合器203からは、32ビットの結果出力203a=sum(192〜255)が出力され、入力データ104a=sum(256〜319)の上位16ビットとセレクタ出力320a=sum(256〜319)の下位16ビットが入力されたデータ結合器204からは、32ビットの結果出力204a=sum(256〜319)が出力される。
【0136】
入力データ105aとセレクタ出力321a=“0”は乗算器105に入力され、乗算結果出力105c=“0”が出力される。同様に、入力データ106aとセレクタ出力322a=“0”が入力された乗算器106からは乗算結果出力106c=“0”が出力され、入力データ107aとセレクタ出力323a=“0”が入力された乗算器107からは乗算結果出力107c=“0”が出力される。上記乗算結果出力105c〜107cはそれぞれレジスタ613〜615に格納される。
【0137】
次に、上記データ結合器200の結果出力200aはセレクタ300に入力され、セレクト信号sel0によって選択されてセレクタ出力300a=sum(0〜63)が出力される。同様に、結果出力201aが入力されたセレクタ301からは、セレクト信号sel1によって選択されたセレクタ出力301a=sum(64〜127)が出力され、結果出力202aが入力されたセレクタ302からは、セレクト信号sel2によって選択されたセレクタ出力302a=sum(128〜191)が出力され、結果出力203aが入力されたセレクタ303からは、セレクト信号sel3によって選択されたセレクタ出力303a=sum(192〜255)が出力され、結果出力204aが入力されたセレクタ304からは、セレクト信号sel4によって選択されたセレクタ出力304a=sum(256〜319)が出力される。
【0138】
また、セレクタ305には上記レジスタ613の出力613aが入力され、セレクト信号sel5によって選択されてセレクタ出力305a=“0”が出力される。同様に、レジスタ出力614aが入力されたセレクタ306からは、セレクト信号sel6によって選択されたセレクタ出力306a=“0”が出力され、レジスタ出力615aが入力されたセレクタ307からは、セレクト信号sel7によって選択されたセレクタ出力307a=“0”が出力される。次に、上記セレクタ出力300a〜307aは、それぞれシフタ400〜407に入力されるが、シフト値信号sft0〜sft7が“0”であるためシフトされず、シフタ出力400a=sum(0〜63)、401a=sum(64〜127)、402a=sum(128〜191)、403a=sum(192〜255)、404a=sum(256〜319)、405a=“0”、406a=“0”、407a=“0”が出力される。
【0139】
次に、加減算器500に上記のシフタ出力400aとシフタ出力401aが入力され、加減算選択信号as0によって加算が指示されることによって加算結果出力500a=400a+401a=sum(0〜63)+sum(64〜127)が得られる。同様に、加減算選択信号as1によって加算が指示された加減算器501にはシフタ出力402aとシフタ出力403aが入力され加算結果出力501a=402a+403a=sum(128〜191)+sum(192〜255)が得られ、加減算選択信号as2によって加算が指示された加減算器502にはシフタ出力404aとシフタ出力405aが入力され加算結果出力502a=404a+405a=sum(256〜319)+“0”=sum(256〜319)が得られ、加減算選択信号as3によって加算が指示された加減算器503にはシフタ出力406aとシフタ出力407aが入力され加算結果出力503a=406a+407a=“0”+“0”=“0”が得られる。
【0140】
上記で得られた加算結果出力500a〜503aはシフタ408〜411に入力されるが、シフト値信号sft8〜sft11は“0”であるためシフトされずに、シフタ出力408a=500a=sum(0〜63)+sum(64〜127)、409a=501a=sum(128〜191)+sum(192〜255)、410a=502a=sum(256〜319)、411a=503a=“0”が出力され、それぞれ、レジスタ616〜619に格納される。続いて、上記レジスタ出力616a〜619aは、それぞれセレクタ308〜311に入力され、セレクト信号sel8〜sel11によって選択され、セレクタ出力308a=616a=sum(0〜63)+sum(64〜127)、セレクタ出力309a=617a=sum(128〜191)+sum(192〜255)、セレクタ出力310a=618a=sum(256〜319)、セレクタ出力311a=619a=“0”が出力される。
【0141】
上記セレクタ出力308a,309aは加減算器504に入力され、加減算選択信号as4によって加算が指示されることによって加算結果出力504a=308a+309a=sum(0〜63)+sum(64〜127)+sum(128〜191)+sum(192〜255)が得られる。同様に、セレクタ出力310a,311aが入力された加減算器505からは、加減算選択信号as5によって加算が指示されることによって加算結果出力505a=310a+311a=sum(256〜319)+“0”=sum(256〜319)が得られる。上記で得られた加算結果出力504a,505aは、それぞれシフタ412,413に入力されるが、シフト値信号sft12とsft13が“0”であるためシフトされずに、シフタ出力412a=504a=sum(0〜63)+sum(64〜127)+sum(128〜191)+sum(192〜255)、413a=505a=sum(256〜319)が出力され、それぞれレジスタ620,621に格納される。上記レジスタ出力620aはセレクタ312に入力され、セレクト信号sel12によって選択されセレクタ出力312a=sum(0〜63)+sum(64〜127)+sum(128〜191)+sum(192〜255)が出力される。
【0142】
同様に、セレクタ313に入力されたレジスタ出力621aは、セレクト信号sel13によって選択されセレクタ出力313a=sum(256〜319)が出力される。上記セレクタ出力312a,313aは加減算器506に入力され、加減算選択信号as6によって加算が指示されることによって加算結果出力506a=312a+313a=sum(0〜63)+sum(64〜127)+sum(128〜191)+sum(192〜255)+sum(256〜319)が得られる。上記加算結果出力506aはシフタ414に入力されるが、シフト値信号sft14が“0”であるためシフトされずにシフタ出力414a=506a=sum(0〜63)+sum(64〜127)+sum(128〜191)+sum(192〜255)+sum(256〜319)が出力され、レジスタ622に格納される。上記レジスタ622の出力622aは、64タップ分の積和演算結果を5個、即ち、idx_tap=0〜320の320タップ分の積和演算結果sum(0〜319)として入出力バッファ6に格納される。
【0143】
図16−1および図16−2に、eout演算用回路構成を示す。
入力バッファ4からマイク入力データ(idx_sample)を読み出し入力データ100aに入力し、入出力バッファ6から上記5T_add演算の出力sum(0〜319)を読み出し上位16ビットを入力データ102aに、下位16ビットを入力データ102bに入力する。入力データ101a,103a〜107aと入力データ100b〜101b,103b〜107bには任意の値を入力する。定数レジスタ600,601,603には“0”をセットする。上記レジスタ600の出力600aはセレクタ316に入力され、セレクト信号sel16によって選択されてセレクタ出力316a=600a=“0”が出力される。
【0144】
同様に、レジスタ出力601aが入力されたセレクタ317からは、セレクト信号sel17によって選択されたセレクタ出力317a=601a=“0”が出力され、レジスタ出力603aが入力されたセレクタ319からは、セレクト信号sel19によって選択されたセレクタ出力319a=603a=“0”が出力される。また、セレクタ318からは、セレクト信号sel18によって選択されたセレクタ出力318a=102b=sum(0〜319)が出力される。
【0145】
次に、データ結合器200に16ビットの入力データ100a=マイク入力データ(idx_saple)と16ビットのセレクタ出力316a=“0”が入力され、32ビットの結合結果出力200a=マイク入力データ(idx_sample)<<16が出力される。同様に、入力データ102a=sum(0〜319)の上位16ビットと、セレクタ出力318a=sum(0〜319)の下位16ビットが入力されたデータ結合器202からは、32ビットの結合結果出力202a=sum(0〜319)が出力される。また、入力データ101aと上記セレクタ出力317a=“0”は乗算器101に入力され、乗算結果出力101c=“0”が出力されてレジスタ609に格納される。
【0146】
同様に、入力データ103aとセレクタ出力319a=“0”が入力された乗算器103からは、乗算結果出力103c=“0”が出力されレジスタ611に格納される。上記データ結合器200の出力200aはセレクタ300に入力され、セレクト信号sel0によって選択されてセレクタ出力300a=200a=マイク入力データ(idx_sample)<<16が出力される。同様に、データ結合器202の結果出力202aが入力されたセレクタ302からは、セレクト信号sel2によって選択されたセレクタ出力302a=202a=sum(0〜319)が出力され、上記レジスタ609の出力609a=“0”が入力されたセレクタ301からは、セレクト信号sel1によって選択されたセレクタ出力301a=609a=“0”が出力され、上記レジスタ611の出力611a=“0”が入力されたセレクタ303からは、セレクト信号sel3によって選択されたセレクタ出力303a=611a=“0”が出力される。
【0147】
上記セレクタ出力300a=マイク入力データ(idx_sample)<<16はシフタ400に入力され、シフト信号sft0によって16ビットシフトが指示されることから16ビット右シフトされて、シフタ出力400a=マイク入力データ(idx_sample)が出力される。このとき、入力データ100aに入力されるマイク入力データ(idx_sample)が符号付きの16ビットデータであることから、下位に16ビット分“0”を結合されて32ビットにされた後、16ビット右シフトされたことで、上位16ビットに符号ビットが拡張され、32ビットの符号付きデータとして扱えるようになる。また、セレクタ出力302a=sum(0〜319)が入力されたシフタ402からは、シフト値信号sft2によりzビットシフトが指示されることによってシフタ出力402a=sum(0〜319)>>zが出力される。セレクタ出力301aが入力されたシフタ401は、シフト値信号sft1=“0”であるためシフトされずにシフタ出力401a=301a=“0”が出力される。同様に、セレクタ出力303aが入力されたシフタ403は、シフト値信号sft3=“0”であるためシフトされずにシフタ出力403a=303a=“0”が出力される。
【0148】
次に、シフタ出力400a,401aが入力された加減算器500では、加減算選択信号as0によって加算が選択されることで加算結果500a=マイク入力データ(idx_sample)+“0”=マイク入力データ(idx_saple)が出力される。一方、シフタ出力402a,403aが入力された加減算器501からは、加減算選択信号as1により加算が選択され、加算結果501a=sum(0〜319)>>z+“0”=sum(0〜319)>>zが出力される。上記加算結果500a,501aは、それぞれシフタ408,409に入力されるが、シフト値信号sft8とsft9が“0”であるためシフトされずに、シフタ出力408a=マイク入力データ(idx_sample)、シフタ出力409a=sum(0〜319)>>zが出力され、それぞれレジスタ616,617に格納される。
【0149】
上記レジスタ616,617の出力616a=マイク入力データ(idx_sample)と出力617a=sum(0〜319)>>zは、それぞれセレクタ308,309に入力され、セレクト信号sel8、sel9によって選択され、セレクタ出力308a=マイク入力データ(idx_sample)、セレクタ出力309a=sum(0〜319)>>zが出力される。セレクタ出力308a,309aは、加減算選択信号as4によって減算が選択されている加減算器504に入力され、減算結果504a=308a−309a=マイク入力データ(idx_sample)−sum(0〜319)>>zが出力される。減算結果504aはシフタ412に入力されるが、シフト値信号sft12が“0”であるためシフトされずに、シフタ出力412a=504a=マイク入力データ(idx_sample)−sum(0〜319)>>zが出力され、レジスタ620に格納される。上記レジスタ620からは出力620a=マイク入力データ(idx_sample)−sum(0〜319)>>zが出力され、誤差データe(idx_sample+1)として入出力バッファ5に格納される。
上記のDelta2演算からeout演算を80サンプル分繰り返すことによって1フレーム分の演算が完了する。
【0150】
ここでは、適応フィルタ処理の処理手順と回路構成について示したが、8mul_add演算、8T_add演算、5T_add演算を組み合わせることにより、320タップFIRフィルタを実現することも可能である。従って、例えば、FIRフィルタと適応フィルタ両方を使用するエコーキャンセラのようなアプリケーションにおいて、回路構成情報を切り替えるのみで、一つのプロセッサ上で両方のフィルタを実現することが可能となる。また、上記演算の並列数や繰り返し回数を変更することによって、様々なタップ数のフィルタも実現できる。
【0151】
次に、動画像処理で頻繁に用いられるDCT(離散コサイン変換)演算を例に、バタフライ演算の動作例を示す。DCT演算は、下式(7)および(8)で示される。
【数2】

【0152】
DCT演算には様々なアルゴリズムが存在するが、ここでは例としてChenのアルゴリズムを用いる。ChenのアルゴリズムによるDCTは、図17に示すバタフライ演算を左から右方向へ演算することで実現できる。図17において、実線は乗算を示しており、実線上の数値は掛け合わせる数値を示している。数値が示されていない実線は、掛け合わせる数値が“1”、即ち、掛け合わされる数値そのものを伝達することを示す。また、Ci,kはcos(iπ/k)、Si,kはsin(iπ/k)を示す。図17に示すバタフライ演算は、本発明の実施の形態1〜3に示す8タップ並列の積和演算装置を用いる場合、5つの部分演算[1]〜[5]に分割して実行できる。
【0153】
先ず、積和演算装置上に図18−1および図18−2に示す[1]の部分演算用回路を構成し、[1]の部分演算を実行して出力値x0+x7、x0−x7、x1+x6、x1−x6、x2+x5、x2−x5、x3+x4、x3−x4を得る。次に、演算装置の回路構成を図19−1および図19−2に示す[2]の部分演算用回路に再構成し、[1]の演算で得られた出力値を入力に[2]の部分演算を実行して、出力値x0+x7+x6+x1、x0+x7−x6−x1、x4+x3+x2+x5、x4+x3−x2−x5、C1,4・(x2−x5+x4−x3)、C1,4・(x2−x5−x4+x3)を得る。次に、演算装置の回路構成を図20−1および図20−2に示す[3]の部分演算用回路に再構成し、[2]の部分演算で得られた出力値を入力に[3]の部分演算を実行して、出力値X0、X1、X2、X3を得る。次に、演算装置の回路構成を図21−1および図21−2に示す[4]の部分演算用回路に再構成し、[1]および[2]の部分演算で得られた出力値を入力に[4]の部分演算を実行し、出力値x6−x1+C1,4・(x2−x5−x4+x3)、x6−x1−C1,4・(x2−x5−x4+x3)、x0−x7+C1,4・(x2−x5+x4−x3)、x0−x7−C1,4・(x2−x5+x4−x3)を得る。最後に、演算装置の回路構成を図22−1および図22−2に示す[5]の部分演算用回路に再構成し、[4]で得られた出力値を入力に[5]の部分演算を実行して、出力値X4、X5、X6、X7を得る。
【0154】
上記のように、本発明の積和演算装置により、バタフライ演算を実現することができる。ここでは、DCTを例に動作例を示したが、同様に、バタフライ演算を用いるFFT(高速離散フーリエ変換)等の処理も実現できる。
【0155】
次に、上記DCTの逆変換であるIDCTを例に、本発明の積和演算装置により、逆変換も実現できることを示す。ChenのアルゴリズムによるIDCTを図23に示す。IDCTは、DCTとは逆に、図17に示すバタフライ演算を右から左方向へ演算することで実現できる。図23の記号や実線の意味は図17のDCTと同様である。図23に示すIDCTは、本発明の実施の形態1〜3に示す8タップ並列の積和演算装置を用いる場合、5つの部分演算[1]〜[5]に分割して実行できる。
【0156】
先ず、積和演算装置上に図24−1および図24−2に示す[1]の部分演算用回路を構成し、[1]の部分演算を実行して出力値S1,16・X4−S7,16・X7、S5,16・X5−S3,16・X6、C1,16・X4+C7,16・X7、C5,16・X5+C3,16・X6を得る。次に、演算装置の回路構成を図25−1および図25−2に示す[2]の部分演算用回路に再構成し、[2]の部分演算を実行して、出力値S1,8・X2−S3,8・X3、C1,8・X2+C3,8・X3、C1,4・(X0+X1)、C1,4・(X0−X1)を得る。次に、演算装置の回路構成を図26−1および図26−2に示す[3]の部分演算用回路に再構成し、[1]の部分演算で得られた出力値を入力に[3]の部分演算を実行して、出力値S1,16・X4−S7,16・X7+S5,16・X5−S3,16・X6、S1,16・X4−S7,16・X7−S5,16・X5+S3,16・X6、C5,16・X5+C3,16・X6+C1,16・X4+C7,16・X7、C5,16・X5+C3,16・X6−C1,16・X4−C7,16・X7を得る。
【0157】
次に、演算装置の回路構成を図27−1および図27−2に示す[4]の部分演算用回路に再構成し、[2]および[3]の部分演算で得られた出力値を入力に[4]の部分演算を実行し、出力値C1,4・(X0+X1)+C1,8・X2+C3,8・X3、C1,4・(X0+X1)−C1,8・X2−C3,8・X3、C1,4・(X0−X1)+S1,8・X2−S3,8・X3、C1,4・(X0−X1)−S1,8・X2+S3,8・X3、C1,4・{(C1,16+S1,16)・X4+(C5,16−S5,16)・X5+(C3,16+S3,16)・X6+(C7,16−S7,16)・X7}、C1,4・{(C1,16−S1,16)・X4+(C5,16+S5,16)・X5+(C3,16−S3,16)・X6+(C7,16+S7,16)・X7}を得る。最後に、演算装置の回路構成を図28−1および図28−2に示す[5]の部分演算用回路に再構成し、[5]で得られた出力値を入力に[5]の部分演算を実行して、出力値x0、x7、x4、x3、x2、x5、x6、x1を得る。
【0158】
以上のように、本発明の積和演算装置により、単一の回路でDCTもIDCTも実現することができ、変換と逆変換両方を必要とするようなシステムにおいて、回路を共有化することで面積の削減を図ることができる。
【符号の説明】
【0159】
1 動的再構成可能プロセッサ、2 積和演算装置、3,4 入力バッファ、5,6,7 入出力バッファ、8 入力セレクタ部、9 出力セレクタ部、10 コンフィグレーションメモリ、11 メモリ制御信号生成部、12 アドレス制御部、13 出力データ格納先アドレス遅延部、14 命令I/F部、15 外部CPU、16 外部メモリ、17 バス、33,34 1段目入力セレクタ、35,36 2段目入力セレクタ、37,38 ローテータ、39 3段目入力セレクタ、100〜107 乗算器、100a〜107a,100b〜107b 入力データ、200〜207 データ結合器、300〜323,900〜907 セレクタ、400〜415 シフタ、500〜507 加減算器、600〜623 レジスタ。

【特許請求の範囲】
【請求項1】
それぞれが2入力の乗算を行う複数の乗算器と、
前記2入力のデータのうち、一方を上位ビット、他方を下位ビットとしてデータの結合を行う複数のデータ結合器と、
前記複数の乗算器の出力と前記複数のデータ結合器の出力を選択出力する複数の第1選択手段と、
前記複数の第1選択手段の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な複数の第1シフタと、
前記複数の第1シフタの出力のうちいずれか二つの出力を入力として加算または減算を行う複数の第1加減算器と、
前記複数の第1加減算器の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な複数の第2シフタと、
前記第1シフタの出力と前記第2シフタの出力を選択出力する複数の第2選択手段と、
前記複数の第2選択手段の出力のうちいずれか二つの出力を入力として加算または減算を行う複数の第2加減算器と、
前記複数の第2加減算器の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な複数の第3シフタと、
前記第1シフタの出力と前記第3シフタの出力を選択出力する複数の第3選択手段と、
前記複数の第3選択手段の出力のうちいずれか二つの出力を入力として加算または減算を行う第3加減算器と、
前記第3加減算器の出力を入力としてデータのビット値をシフトすると共に、そのシフト値が切り替え可能な第4シフタとを備えた動的再構成可能な積和演算装置。
【請求項2】
任意の値を保持する複数の記憶素子と、前記複数の記憶素子の出力と所定の入力とを選択する第4選択手段を設け、複数の乗算器とデータ結合器は、前記第4選択手段の選択結果を、2入力のうちの一方の入力とすることを特徴とする請求項1記載の動的再構成可能な積和演算装置。
【請求項3】
乗算器、第2シフタ、第3シフタ、第4シフタの出力をそれぞれ保持する記憶素子を設けたことを特徴とする請求項1または請求項2記載の動的再構成可能な積和演算装置。
【請求項4】
請求項1から請求項3のうちのいずれか1項記載の動的再構成可能な積和演算装置と、
前記動的再構成可能な積和演算装置における演算前のデータを格納する入力バッファと、
前記動的再構成可能な積和演算装置における演算前のデータまたは演算後のデータを格納する入出力バッファと、
前記入力バッファと前記入出力バッファから前記動的再構成可能な積和演算装置での演算対象データを選択し、前記動的再構成可能な積和演算装置に供給する入力セレクタ部と、
前記動的再構成可能な積和演算装置の出力を選択して前記入出力バッファに出力する出力セレクタ部と、
前記動的再構成可能な積和演算装置の回路構成情報と前記入力セレクタ部の選択指示情報と前記出力セレクタ部の選択指示情報と前記入力データバッファの制御情報と前記入出力バッファの制御情報を格納するコンフィグレーションメモリと、
前記入力バッファまたは前記入出力バッファまたは前記コンフィグレーションメモリと、外部間とのデータ転送時に外部からのアドレス指示に基づいて、前記入力バッファと前記入出力バッファと前記コンフィグレーションメモリの制御信号を生成するメモリ制御信号生成部と、
前記動的再構成可能な積和演算装置に入力されるデータの格納元アドレスと当該動的再構成可能な積和演算装置からの出力データの格納先アドレスを制御するアドレス制御部と、
外部プロセッサからの命令をデコードする命令I/F部とを備え、
前記外部プロセッサからの指示により、任意の演算を行うことを特徴とする動的再構成可能プロセッサ。
【請求項5】
入力バッファは、動的再構成可能な積和演算装置への入力データの格納元となるバッファ面以外に、このバッファ面とは別に制御可能なバッファ面を有することを特徴とする請求項4記載の動的再構成可能プロセッサ。
【請求項6】
入出力バッファは、動的再構成可能な積和演算装置への入力データの格納元となるバッファ面または当該動的再構成可能な積和演算装置からの出力データの格納先となるバッファ面以外に、当該バッファ面とは別に制御可能なバッファ面を有することを特徴とする請求項4または請求項5記載の動的再構成可能プロセッサ。
【請求項7】
入力セレクタ部は、
入力バッファと入出力バッファからいずれか一つを選択する1段目入力セレクタと、
前記1段目入力セレクタの出力のうち半数のデータを選択する2段目入力セレクタと、
前記2段目入力セレクタの選択結果を2サイクル分保持したデータから連続する半数のデータを選択するローテータと、
前記ローテータの出力を並び替えて動的再構成可能な積和演算装置へ出力する3段目入力セレクタとを備えることを特徴とする請求項4から請求項6のうちのいずれか1項記載の動的再構成可能プロセッサ。
【請求項8】
出力セレクタ部は、動的再構成可能な積和演算装置の複数の出力を入力とする複数の選択手段を備え、前記動的再構成可能な積和演算装置の複数の出力を任意の順番に並べ替えることを特徴とする請求項4から請求項7のうちのいずれか1項記載の動的再構成可能プロセッサ。
【請求項9】
請求項3に記載の動的再構成可能な積和演算装置を用い、
前記動的再構成可能な積和演算装置に備えた記憶素子の段数分、前記動的再構成可能な積和演算装置の出力格納先アドレスを遅延させるための出力データ格納先アドレス遅延部を備えることを特徴とする請求項4から請求項8のうちのいずれか1項記載の動的再構成可能プロセッサ。
【請求項10】
アドレス制御部は、一つまたは二つの動的再構成可能な積和演算装置への入力データ格納元アドレスと一つの前記動的再構成可能な積和演算装置からの出力データ格納先アドレスの組み合わせデータを複数種類格納可能なテーブルを有し、
前記テーブルの組み合わせデータは、前記動的再構成可能な積和演算装置による処理が開始される前に格納されると共に、積和演算処理実行時に外部プロセッサからの指示に基づいて、使用する前記組み合わせデータを選択し、入力バッファの入力データ格納元アドレスと、入出力バッファの入力データ格納元アドレスまたは出力データ格納先アドレスを決定することを特徴とする請求項4から請求項9のうちのいずれか1記載の動的再構成可能プロセッサ。

【図1】
image rotate

【図2】
image rotate

【図3−1】
image rotate

【図3−2】
image rotate

【図4−1】
image rotate

【図4−2】
image rotate

【図5】
image rotate

【図6−1】
image rotate

【図6−2】
image rotate

【図6−3】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10−1】
image rotate

【図10−2】
image rotate

【図11−1】
image rotate

【図11−2】
image rotate

【図12−1】
image rotate

【図12−2】
image rotate

【図13−1】
image rotate

【図13−2】
image rotate

【図14−1】
image rotate

【図14−2】
image rotate

【図15−1】
image rotate

【図15−2】
image rotate

【図16−1】
image rotate

【図16−2】
image rotate

【図17】
image rotate

【図18−1】
image rotate

【図18−2】
image rotate

【図19−1】
image rotate

【図19−2】
image rotate

【図20−1】
image rotate

【図20−2】
image rotate

【図21−1】
image rotate

【図21−2】
image rotate

【図22−1】
image rotate

【図22−2】
image rotate

【図23】
image rotate

【図24−1】
image rotate

【図24−2】
image rotate

【図25−1】
image rotate

【図25−2】
image rotate

【図26−1】
image rotate

【図26−2】
image rotate

【図27−1】
image rotate

【図27−2】
image rotate

【図28−1】
image rotate

【図28−2】
image rotate


【公開番号】特開2010−160632(P2010−160632A)
【公開日】平成22年7月22日(2010.7.22)
【国際特許分類】
【出願番号】特願2009−1761(P2009−1761)
【出願日】平成21年1月7日(2009.1.7)
【出願人】(000006013)三菱電機株式会社 (33,312)
【Fターム(参考)】