以下、本発明の実施形態を図面に関連付けて説明する。
第1実施形態
図1は、本発明に係る演算装置の第1の実施形態を示す構成図である。
図1の演算装置10は、構成情報に基づいて再構成可能なALUとMAC構造の演算器を内蔵し、係数バスn(=m+1)本、データバスn(=k+1)本、カスケード入力n−1本と出力データを持つ。
以下、演算装置10の具体的な構成および機能について、順を追って説明する。
本演算装置10は、図1に示すように、第1の選択装置(SELA)11、第2の選択装置(SELB)12、第3の選択装置(SELC)13、ALU14、MAC構造の演算器(以下、単にMACという)15、第4の選択装置(SELE)16、レジスタ(REG)17、係数入力遅延用のk(たとえばk=n−1)個のFIFO(First-In First-Out 、C0FIFO〜CkFIFO) 18−0〜18−k、およびデータ入力遅延用のm(たとえばm=n−1=k)個のFIFO(D0FIFO 〜DmFIFO) 19−1〜19−mを主構成要素として有している。
そして、演算装置10は、係数入力C0I,C1I,…,CkI、データ入力D0I,D1I,…,DmI、カスケード入力P0,P1,…Pn−2 、係数出力C0O,C1O,…,CkO、データ出力D0O,D1O,…,DmO、および演算出力Cを有し、再構成等のための演算制御信号ASEL,BSEL,ESEL,MACMD,ALUMD,RNDMD,SATMD,OSFMD,ACCMD、遅延制御信号C0DL,C1DL,…CkDL,D0DL,D1DL,…DmDLが供給される。
第1の選択装置11は、制御信号ASELに応じて係数入力C0I,C1I,…,CkIとデータ0を選択し、信号asel_out として、ALU14、およびMAC15に出力する。
第2の選択装置12は、制御信号BSELに応じてデータ入力D0I,D1I,…,DmIを選択し、信号bsel_out として、ALU14、およびMAC15に出力する。
第3の選択装置13は、制御信号CSELに応じてカスケード入力P0,P1,…,Pn−2 とデータ0を選択し、信号csel_out として、第1の選択装置11、ALU14、およびMAC15に出力する。
ALU14は、alu_acc をアキュムレートレジスタとし、第1の選択装置11の出力信号asel_out 、第2の選択装置12の出力信号bsel_out、および第3の選択装置13の出力信号csel_out を入力として、制御信号ALUMD,RNDMD,SATMD,OSFMD,ACCMDの指示に応じた論理演算を行い、その結果を信号alu_out として第4の選択装置16に出力する。
具体的には、ALU14は、制御信号RNDMDの値により丸めモードを「0方向、0から遠い方向、正の無限大方向、負の無限大方向、もっとも近い整数」から選択可能で、制御信号SATMDの値により飽和ビット幅を指定可能であり、制御信号OSFMDの値によりシフト量を指定可能となる。
また、ALU14は、制御信号ACCMDの値によりアキュムレートレジスタalu_acc への値のロード、ゼロ初期化を選択可能になっている。
ALU14での演算は制御信号ALUMDの値により、以下のいずれかの演算を行う。
(数2)
alu_out =asel_out +bsel_out
alu_out =asel_out −bsel_out
alu_out =alu_acc +bsel_out
alu_out =alu_acc −bsel_out
alu_out =〜bsel_out
alu_out =−bsel_out
alu_out =|bsel_out |
alu_out =|asel_out −bsel_out |
alu_out =asel_out &bsel_out
alu_out =asel_out |bsel_out
alu_out =asel_out ∧bsel_out
alu_out =MAX(asel_out ,bsel_out )
alu_out =MIN(asel_out ,bsel_out )
alu_out =Leading ZERO(bsel_out )
alu_out =Leading ONE(bsel_out )
alu_out =ALS(bsel_out )
alu_out =ARS(bsel_out )
alu_out =LLS(bsel_out )
alu_out =LRS(bsel_out )
alu_out =asel_out +bsel_out +csel_out
alu_out =asel_out −bsel_out +csel_out
alu_out =asel_out +bsel_out −csel_out
alu_out =asel_out −bsel_out −csel_out
ここで、〜はビット反転、−は符号反転、| |は絶対値、&はAND(論理積)、|はOR(論理和)、∧はEXOR(排他的論理和)を意味する。また、MAXは最大値を返す関数、MINは最小値を返す関数、Leading ZEROは2進数表記をした場合のMSBから連続する0の個数を返す関数、Leading ONEは2進数表記をした場合のMSBから連続する1の個数を返す関数、ALSは算術左シフト、ARSは算術右シフト、LLSは論理左シフト、LRSは論理右シフトを意味している。
MAC15は、mac_acc をアキュムレートレジスタとし、第1の選択装置11の出力信号asel_out 、第2の選択装置12の出力信号bsel_out、および第3の選択装置13の出力信号csel_out を入力として、制御信号MACMD,RNDMD,SATMD,OSFMD,ACCMDの指示に応じた演算を行い、その結果を信号mac_out として出力する。
具体的には、MAC15は、制御信号RNDMDの値により丸めモードを「0方向、0から遠い方向、正の無限大方向、負の無限大方向、もっとも近い整数」のうちから選択可能であり、制御信号SATMDの値により飽和ビット幅を指定可能、かつ制御信号OSFMDの値によりシフト量を指定可能になっている。また、MAC15は、制御信号ACCMDの値によりアキュムレートレジスタmac_acc への値のロード、ゼロ初期化が選択も可能である。
MAC15での演算は、制御信号MACMDの値により、以下のいずれかの演算を行う。
(数3)
mac_out =asel_out *bsel_out
mac_out =−(asel_out *bsel_out )
mac_out =asel_out *bsel_out +csel_out
mac_out =−(asel_out *bsel_out )+csel_out
mac_out =asel_out *bsel_out −csel_out
mac_out =−(asel_out *bsel_out )−csel_out
mac_out =asel_out *bsel_out +mac_acc
mac_out =−(asel_out *bsel_out )+mac_acc
mac_out =asel_out *bsel_out −mac_acc
mac_out =−(asel_out *bsel_out )−mac_acc
第4の選択装置16は、制御信号ESELに応じて、ALU14の出力信号alu_out とMAC15の出力信号mac_out のいずれかを選択し、信号esel_out としてレジスタ17に出力する。
レジスタ17は、第4の選択装置16の出力信号esel_out を格納し、また格納データを第2の選択装置12に出力するとともに、演算出力Cとして出力する。
C0FIFO18−0は、制御信号C0DLの値により任意のサイクル遅延が可能であり、係数入力C0Iを制御信号C0DLの値に応じたサイクルを持って遅延させて、係数出力C0Oを得、たとえば次段の装置に出力する。
C1FIFO18−1は、制御信号C1DLの値により任意のサイクル遅延が可能であり、係数入力C1Iを制御信号C1DLの値に応じたサイクルを持って遅延させて、係数出力C1Oを得、たとえば次段の装置に出力する。
同様に、CkFIFO18−kは、制御信号CkDLの値により任意のサイクル遅延が可能であり、係数入力CkIを制御信号CkDLの値に応じたサイクルを持って遅延させて、係数出力CkOを得、たとえば次段の装置に出力する。
D0FIFO19−0は、制御信号D0DLの値により任意のサイクル遅延が可能であり、データ入力D0Iを制御信号D0DLの値に応じたサイクルを持って遅延させて、データ出力D0Oを得、たとえば次段の装置に出力する。
D1FIFO19−1は、制御信号D1DLの値により任意のサイクル遅延が可能であり、データ入力D1Iを制御信号D1DLの値に応じたサイクルを持って遅延させて、データ出力D1Oを得、たとえば次段の装置に出力する。
同様に、DmFIFO19−mは、制御信号DmDLの値により任意のサイクル遅延が可能であり、データ入力DmIを制御信号DmDLの値に応じたサイクルを持って遅延させて、データ出力DmOを得、たとえば次段の装置に出力する。
なお、本実施形態では、所定のサイクルをもって遅延させない場合も遅延0として、遅延の定義に含めるものとする。
次に、上記構成による動作を、図2に示すように、n=4で、係数入出力、データ入出力が4、カスケード入力が3である演算装置10Aの動作について説明する。
なおここでは、係数入力C0I,C1I,C2I,C3Iはそれぞれa,b,c,d、データ入力D0I,D1I,D2I,D3Iはそれぞれx,y,z,wであるものとする。また、カスケード入力P0,P1,P2はそれぞれa*x、a*x+b*y、a*x+b*y+c*zであるものとする。
まず、C=a*xを求める場合を説明する。
この場合、制御信号ASELが係数入力C0I(a)を選択するように設定されて第1の選択装置11に供給される。
また、制御信号BSELがデータ入力D0I(x)を選択するように設定されて第2の選択装置12に供給される。
これにより、第1の選択装置11から係数aが信号asel_out として、ALU14およびMAC15に出力される。また、第2の選択装置12からデータxが信号bsel_out として、ALU14およびMAC15に出力される。
このとき、乗算を指定する制御信号MACMDが、MAC15に供給される。これにより、MAC15において、係数aとデータxとの乗算が行われ、その結果a*xが信号mac outとして第4の選択装置16に出力される。
そして、制御信号ESELがMAC15の出力を選択するように、第4の選択装置16に供給されている。その結果、第4の選択装置16においてMAC15の出力信号mac out(a*x)が選択され、信号esel out(a*x)としてレジスタ17に出力される。
レジスタ17では、MAC15の演算結果a*xが格納され、この格納データが演算出力Cとして出力される。
次に、C=a*x+b*yを求める場合を説明する。
この場合、制御信号ASELが係数入力C1I(b)を選択するように設定されて第1の選択装置11に供給される。
また、制御信号BSELがデータ入力D1I(y)を選択するように設定されて第2の選択装置12に供給される。
また、制御信号CSELがカスケード入力P0(a*x)を選択するように設定されて第3の選択装置13に供給される。
これにより、第1の選択装置11から係数bが信号asel_out として、ALU14およびMAC15に出力される。また、第2の選択装置12からデータyが信号bsel_out として、ALU14およびMAC15に出力される。また、第3の選択装置13から、カスケード入力データa*xが信号csel outとして第1の選択装置11、ALU14およびMAC15に出力される。
このとき、乗加算を指定する制御信号MACMDが、MAC15に供給される。これにより、MAC15において、係数bとデータyとの乗算が行われ、さらに、その結果b*yとa*xとの加算が行われる。これにより、MAC15から乗加算結果a*x+b*yが信号mac outとして第4の選択装置16に出力される。
そして、制御信号ESELがMAC15の出力を選択するように、第4の選択装置16に供給されている。その結果、第4の選択装置16においてMAC15の出力信号mac out(a*x+b*y)が選択され、信号esel out(a*x+b*y)としてレジスタ17に出力される。
レジスタ17では、MAC15の演算結果a*x+b*yが格納され、この格納データが演算出力Cとして出力される。
次に、C=a*x+b*y+c*zを求める場合を説明する。
この場合、制御信号ASELが係数入力C2I(c)を選択するように設定されて第1の選択装置11に供給される。
また、制御信号BSELがデータ入力D2I(z)を選択するように設定されて第2の選択装置12に供給される。
また、制御信号CSELがカスケード入力P1(a*x+b*y)を選択するように設定されて第3の選択装置13に供給される。
これにより、第1の選択装置11から係数cが信号asel_out として、ALU14およびMAC15に出力される。また、第2の選択装置12からデータzが信号bsel_out として、ALU14およびMAC15に出力される。また、第3の選択装置13から、カスケード入力データa*x+b*yが信号csel outとして第1の選択装置11、ALU14およびMAC15に出力される。
このとき、乗加算を指定する制御信号MACMDが、MAC15に供給される。これにより、MAC15において、係数cとデータzとの乗算が行われ、さらに、その結果c*zと(a*x+b*y)との加算が行われる。これにより、MAC15から乗加算結果a*x+b*y+c*zが信号mac outとして第4の選択装置16に出力される。
そして、制御信号ESELがMAC15の出力を選択するように、第4の選択装置16に供給されている。その結果、第4の選択装置16においてMAC15の出力信号mac out(a*x+b*y+c*z)が選択され、信号esel out(a*x+b*y+c*z)としてレジスタ17に出力される。
レジスタ17では、MAC15の演算結果a*x+b*y+c*zが格納され、この格納データが演算出力Cとして出力される。
次に、C=a*x+b*y+c*z+d*wを求める場合を説明する。
この場合、制御信号ASELが係数入力C3I(d)を選択するように設定されて第1の選択装置11に供給される。
また、制御信号BSELがデータ入力D3I(w)を選択するように設定されて第2の選択装置12に供給される。
また、制御信号CSELがカスケード入力P2(a*x+b*y+c*z)を選択するように設定されて第3の選択装置13に供給される。
これにより、第1の選択装置11から係数dが信号asel_out として、ALU14およびMAC15に出力される。また、第2の選択装置12からデータwが信号bsel_out として、ALU14およびMAC15に出力される。また、第3の選択装置13から、カスケード入力データa*x+b*y+c*zが信号csel outとして第1の選択装置11、ALU14およびMAC15に出力される。
このとき、乗加算を指定する制御信号MACMDが、MAC15に供給される。これにより、MAC15において、係数dとデータwとの乗算が行われ、さらに、その結果d*wと(a*x+b*y+c*z)との加算が行われる。これにより、MAC15から乗加算結果a*x+b*y+c*z+d*wが信号mac outとして第4の選択装置16に出力される。
そして、制御信号ESELがMAC15の出力を選択するように、第4の選択装置16に供給されている。その結果、第4の選択装置16においてMAC15の出力信号mac out(a*x+b*y+c*z+d*w)が選択され、信号esel out(a*x+b*y+c*z+d*w)としてレジスタ17に出力される。
レジスタ17では、MAC15の演算結果a*x+b*y+c*z+d*wが格納され、この格納データが演算出力Cとして出力される。
以上説明したように、本第1の実施形態によれば、制御信号ASELに応じて係数入力C0I,C1I,…,CkIとデータ0を選択する第1の選択装置11と、制御信号BSELに応じてデータ入力D0I,D1I,…,DmIを選択する第2の選択装置12と、制御信号CSELに応じてカスケード入力P0,P1,…,Pn−2 とデータ0を選択する第3の選択装置13と、第1の選択装置11の出力信号asel_out 、第2の選択装置12の出力信号bsel_out 、および第3の選択装置13の出力信号csel_out を入力として、制御信号ALUMD,RNDMD,SATMD,OSFMD,ACCMDの指示に応じた論理演算を行うALU14と、第1の選択装置11の出力信号asel_out 、第2の選択装置12の出力信号bsel_out 、および第3の選択装置13の出力信号csel_out を入力として、制御信号MACMD,RNDMD,SATMD,OSFMD,ACCMDの指示に応じた演算を行うMAC15と、制御信号ESELに応じて、ALU14の出力信号alu_out とMAC15の出力信号mac_out のいずれかを選択する第4の選択装置16とを設けたので、演算装置自体を外部から再構成可能である。
したがって、本第1の実施形態によれば、論理レベルの最適化ができることはもとより、構成情報の増大を防止でき、集積回路としての面積効率の悪化を防止できる演算装置を実現できる利点がある。
また、演算装置を再構成可能であることから、カスケード演算だけでなく並列演算も同一のハードウェアで実現することが可能になっている。そのため、演算装置の数を増やして多くの並列化可能な処理を効率良く実行することもできる。
第2実施形態
図3は、本発明に係る並列演算装置の第2の実施形態を示す構成図である。
本第2の実施形態では、図1の演算装置を複数個(n個)カスケード接続して、他の演算装置の演算結果をカスケード入力することで、多くの並列化可能な処理を効率良く実行するように構成している。
各演算装置10−0〜10−n-1 (PE0〜PEn−1)は、係数入力端子PE C0I〜PE CkI、データ入力端子PE D0I〜PE DmI、カスケード入力端子PE P0〜PE Pn−2、係数出力端子PE C0O〜PE CkO、データ出力端子PE D0O〜PE DmO、および演算出力端子PE Cを有している。
演算装置10−0においては、係数入力端子PE C0I〜PE CkIに係数C0I〜CkIが供給され、データ入力端子PE D0I〜PE DmIにデータ入力D0I〜DmIが供給され、カスケード入力PE P0〜PE Pn−2に他の演算装置10−1〜10−n-1 の演算出力端子PE Cから出力される演算結果信号OT1〜OTn−1が供給される。たとえばカスケード入力PE P0には、最終段の演算装置10−n-1 の演算結果信号OTn−1が供給され、カスケード入力端子PE Pn−2に次段の演算装置10−1の演算結果信号OT1が供給される。
また、演算装置10−0において、係数出力端子PE C0O〜PE CkOからC0FIFO18−0〜CkFIFO18−kで所望の遅延量だけ遅延された係数が係数出力c00〜ck0として次段の演算装置10−1に出力され、データ出力端子PE D0O〜PE DmOからD0FIFO19−0〜DmFIFO19−mで所望の遅延量だけ遅延されたデータがデータ出力d00〜dm0として次段の演算装置10−1に出力される。
また、演算装置10−0においては、演算出力端子PE Cから演算結果信号OT0が他の演算装置10−1〜10−n-1 に出力される。
なお、図3においては、演算装置10−0に供給されるべき演算制御信号ASEL,BSEL,ESEL,MACMD,ALUMD,RNDMD,SATMD,OSFMD,ACCMD、および遅延制御信号C0DL,C1DL,…CkDL,D0DL,D1DL,…DmDLは、簡単化のため制御信号CTL0として示している。
演算装置10−1においては、係数入力端子PE C0I〜PE CkIに演算装置10−0の係数出力c00〜ck0が供給され、データ入力端子PE D0I〜PE DmIに演算装置10−0のデータ出力d00〜dm0が供給され、カスケード入力PE P0〜PE Pn−2に他の演算装置10−0、10−2(図示せず)〜10−n-1 の演算出力端子PE Cから出力される演算結果信号OT0,OT2〜OTn−1が供給される。たとえばカスケード入力PE P0には、前段の演算装置10−0の演算結果信号OT0が供給され、カスケード入力端子PE Pn−2に演算装置10−n-2 の演算結果信号OTn−2が供給される。
また、演算装置10−1において、係数出力端子PE C0O〜PE CkOからC0FIFO18−0〜CkFIFO18−kで所望の遅延量だけ遅延された係数が係数出力c01〜ck1として次段の演算装置10−2に出力され、データ出力端子PE D0O〜PE DmOからD0FIFO19−0〜DmFIFO19−mで所望の遅延量だけ遅延されたデータがデータ出力d01〜dm1として次段の演算装置10−2に出力される。
また、演算装置10−1においては、演算出力端子PE Cから演算結果信号OT1が他の演算装置10−0,10−2〜10−n-1 に出力される。
なお、図3においては、演算装置10−1に供給されるべき演算制御信号ASEL,BSEL,ESEL,MACMD,ALUMD,RNDMD,SATMD,OSFMD,ACCMD、および遅延制御信号C0DL,C1DL,…CkDL,D0DL,D1DL,…DmDLは、簡単化のため制御信号CTL1として示している。
同様に、演算装置10−i(2≦i≦n−2)においては、係数入力端子PE C0I〜PE CkIに演算装置10−i-1 の係数出力c0i-1 〜cki-1 が供給され、データ入力端子PE D0I〜PE DmIに演算装置10−i-1 のデータ出力d0i-1 〜dmi-1 が供給され、カスケード入力PE P0〜PE Pn−2に他の演算装置10−0〜10−i-1 ,10−i+1 〜10−n-1 の演算出力端子PE Cから出力される演算結果信号OT0〜OTi−1,OTi+1〜OTn−1が供給される。
また、演算装置10−iにおいて、係数出力端子PE C0O〜PE CkOからC0FIFO18−0〜CkFIFO18−kで所望の遅延量だけ遅延された係数が係数出力c0i〜ckiとして次段の演算装置10−i+1 に出力され、データ出力端子PE D0O〜PE DmOからD0FIFO19−0〜DmFIFO19−mで所望の遅延量だけ遅延されたデータがデータ出力d0i〜dmiとして次段の演算装置10−i+1 に出力される。
また、演算装置10−iにおいては、演算出力端子PE Cから演算結果信号OTiが他の演算装置10−0〜10−i-1 ,10−i+1 〜10−n-1 に出力される。
なお、図示しないが、演算装置10−iには、演算制御信号ASEL,BSEL,ESEL,MACMD,ALUMD,RNDMD,SATMD,OSFMD,ACCMD、および遅延制御信号C0DL,C1DL,…CkDL,D0DL,D1DL,…DmDLが、たとえば制御信号CTLiとして供給される。
そして、演算装置10−n-1 においては、係数入力端子PE C0I〜PE CkIに演算装置10−n-2 の係数出力c0n-2 〜ckn-2 が供給され、データ入力端子PE D0I〜PE DmIに演算装置10−n-2 のデータ出力d0n-2 〜dmn-2 が供給され、カスケード入力PE P0〜PE Pn−2に他の演算装置10−0〜10−n-2 の演算出力端子PE Cから出力される演算結果信号OT0〜OTn−2が供給される。たとえばカスケード入力PE P0には、前段の演算装置10−n-2 の演算結果信号OTn-2 が供給され、カスケード入力端子PE Pn−2に演算装置10−0の演算結果信号OT0が供給される。
また、演算装置10−n-1 において、係数出力端子PE C0O〜PE CkOからの係数出力、およびデータ出力端子PE D0O〜PE DmOからのデータ出力の他の演算装置への出力は行われない。
また、演算装置10−n-1 においては、演算出力端子PE Cから演算結果信号OTn−1が他の演算装置10−0〜10−n-2 に出力される。
なお、図3においては、演算装置10−n-1 に供給されるべき演算制御信号ASEL,BSEL,ESEL,MACMD,ALUMD,RNDMD,SATMD,OSFMD,ACCMD、および遅延制御信号C0DL,C1DL,…CkDL,D0DL,D1DL,…DmDLは、簡単化のため制御信号CTLn−1として示している。
次に、本第2の実施形態の動作を、図4に示すように、カスケード接続する演算装置数を4(n=4)の場合を例に説明する。
この場合における各演算装置10A−0〜10A−3は、図2に示す構成を有する。したがって、動作説明は、図2および図4に関連付けて行う。
なおここでは、以下の演算を行う場合を例に説明する。
(数4)
out=a*x+b*y+c*z+d*w
そして、演算装置10A−0への係数入力C0I,C1I,C2I,C3Iはそれぞれa,b,c,d、データ入力D0I,D1I,D2I,D3Iはそれぞれx,y,z,wであるものとする。
まず、演算装置10A−0においては、制御信号CTL0により、演算結果信号OT0=a*xとなる演算が行われるように制御が行われる。
この場合、演算装置10A−0において、制御信号ASELが係数入力C0I(a)を選択するように設定されて第1の選択装置11に供給される。
また、制御信号BSELがデータ入力D0I(x)を選択するように設定されて第2の選択装置12に供給される。
これにより、第1の選択装置11から係数aが信号asel_out として、ALU14およびMAC15に出力される。また、第2の選択装置12からデータxが信号bsel_out として、ALU14およびMAC15に出力される。
このとき、乗算を指定する制御信号MACMDが、MAC15に供給される。これにより、MAC15において、係数aとデータxとの乗算が行われ、その結果a*xが信号mac outとして第4の選択装置16に出力される。
そして、制御信号ESELがMAC15の出力を選択するように、第4の選択装置16に供給されている。その結果、第4の選択装置16においてMAC15の出力信号mac out(a*x)が選択され、信号esel out(a*x)としてレジスタ17に出力される。
レジスタ17では、MAC15の演算結果a*xが格納され、この格納データが演算出力端子PE Cから演算結果信号OT0として、演算装置10A−1のカスケード入力PE P0、演算装置10A−2のカスケード入力PE P1、および演算装置10A−3のカスケード入力PE P2に出力される。
演算装置10A−0においては、C0FIFO18−0〜C3FIFO18−3で所望の遅延量だけ遅延された係数a,b,c,dが係数出力端子PE C0O〜PE C3Oから係数出力c00〜c30として次段の演算装置10A−1の係数入力端子PE C0I〜PE C3Iに出力され、D0FIFO19−0〜D3FIFO19−3で所望の遅延量だけ遅延されたデータx,y,z,wがデータ出力端子PE D0O〜PE D3Oからデータ出力d00〜d30として次段の演算装置10A−1のデータ入力端子PE D0I〜PE D3Iに出力される。
次に、演算装置10A−1においては、制御信号CTL1により、演算結果信号OT1=OT0+b*y=a*x+b*yとなる演算が行われるように制御が行われる。
この場合、制御信号ASELが係数入力端子PE C1Iに供給される演算装置10A−0の係数出力c10(b)を選択するように設定されて第1の選択装置11に供給される。
また、制御信号BSELがデータ入力端子PE D1Iに供給される演算装置10A−0のデータ出力d10(y)を選択するように設定されて第2の選択装置12に供給される。
また、制御信号CSELがカスケード入力端子PE P0に供給される演算装置10A−0の演算結果信号OT0(a*x)を選択するように設定されて第3の選択装置13に供給される。
これにより、第1の選択装置11から係数bが信号asel_out として、ALU14およびMAC15に出力される。また、第2の選択装置12からデータyが信号bsel_out として、ALU14およびMAC15に出力される。また、第3の選択装置13から、カスケード入力データa*xが信号csel outとして第1の選択装置11、ALU14およびMAC15に出力される。
このとき、乗加算を指定する制御信号MACMDが、MAC15に供給される。これにより、MAC15において、係数bとデータyとの乗算が行われ、さらに、その結果b*yとa*xとの加算が行われる。これにより、MAC15から乗加算結果a*x+b*yが信号mac outとして第4の選択装置16に出力される。
そして、制御信号ESELがMAC15の出力を選択するように、第4の選択装置16に供給されている。その結果、第4の選択装置16においてMAC15の出力信号mac out(a*x+b*y)が選択され、信号esel out(a*x+b*y)としてレジスタ17に出力される。
レジスタ17では、MAC15の演算結果a*x+b*yが格納され、この格納データが演算出力端子PE Cから演算結果信号OT1として、演算装置10A−0のカスケード入力PE P2、演算装置10A−2のカスケード入力PE P0、および演算装置10A−3のカスケード入力PE P1に出力される。
演算装置10A−1においては、C0FIFO18−0〜C3FIFO18−3で所望の遅延量だけ遅延された係数a,b,c,dが係数出力端子PE C0O〜PE C3Oから係数出力c01〜c31として次段の演算装置10A−2の係数入力端子PE C0I〜PE C3Iに出力され、D0FIFO19−0〜DmFIFO19−3で所望の遅延量だけ遅延されたデータx,y,z,wがデータ出力端子PE D0O〜PE D3Oからデータ出力d01〜d31として次段の演算装置10A−2のデータ入力端子PE D0I〜PE D3Iに出力される。
次に、演算装置10A−2においては、制御信号CTL2により、演算結果信号OT2=OT1+c*z=a*x+b*y+c*zとなる演算が行われるように制御が行われる。
この場合、制御信号ASELが係数入力端子PE C2Iに供給される演算装置10A−1の係数出力c21(c)を選択するように設定されて第1の選択装置11に供給される。
また、制御信号BSELがデータ入力端子PE D2Iに供給される演算装置10A−1のデータ出力d21(z)を選択するように設定されて第2の選択装置12に供給される。
また、制御信号CSELがカスケード入力端子PE P0に供給される演算装置10A−1の演算結果信号OT1(a*x+b*y)を選択するように設定されて第3の選択装置13に供給される。
これにより、第1の選択装置11から係数cが信号asel_out として、ALU14およびMAC15に出力される。また、第2の選択装置12からデータzが信号bsel_out として、ALU14およびMAC15に出力される。また、第3の選択装置13から、カスケード入力データa*x+b*yが信号csel outとして第1の選択装置11、ALU14およびMAC15に出力される。
このとき、乗加算を指定する制御信号MACMDが、MAC15に供給される。これにより、MAC15において、係数cとデータzとの乗算が行われ、さらに、その結果c*zと(a*x+b*y)との加算が行われる。これにより、MAC15から乗加算結果a*x+b*y+c*zが信号mac outとして第4の選択装置16に出力される。
そして、制御信号ESELがMAC15の出力を選択するように、第4の選択装置16に供給されている。その結果、第4の選択装置16においてMAC15の出力信号mac out(a*x+b*y+c*z)が選択され、信号esel out(a*x+b*y+c*z)としてレジスタ17に出力される。
レジスタ17では、MAC15の演算結果a*x+b*y+c*zが格納され、この格納データが演算出力端子PE Cから演算結果信号OT2として、演算装置10A−0のカスケード入力PE P1、演算装置10A−2のカスケード入力PE P2、および演算装置10A−3のカスケード入力PE P0に出力される。
演算装置10A−2においては、C0FIFO18−0〜C3FIFO18−3で所望の遅延量だけ遅延された係数a,b,c,dが係数出力端子PE C0O〜PE C3Oから係数出力c02〜c32として次段の演算装置10A−3の係数入力端子PE C0I〜PE C3Iに出力され、D0FIFO19−0〜DmFIFO19−3で所望の遅延量だけ遅延されたデータx,y,z,wがデータ出力端子PE D0O〜PE D3Oからデータ出力d02〜d32として次段の演算装置10A−3のデータ入力端子PE D0I〜PE D3Iに出力される。
次に、演算装置10A−3においては、制御信号CTL3により、演算結果信号OT3=OT2+d*w=a*x+b*y+c*z+d*wとなる演算が行われるように制御が行われる。
この場合、制御信号ASELが係数入力端子PE C3Iに供給される演算装置10A−2の係数出力c32(d)を選択するように設定されて第1の選択装置11に供給される。
また、制御信号BSELがデータ入力端子PE D3Iに供給される演算装置10A−2のデータ出力d32(w)を選択するように設定されて第2の選択装置12に供給される。
また、制御信号CSELがカスケード入力端子PE P0に供給される演算装置10A−2の演算結果信号OT2(a*x+b*y+c*z)を選択するように設定されて第3の選択装置13に供給される。
これにより、第1の選択装置11から係数dが信号asel_out として、ALU14およびMAC15に出力される。また、第2の選択装置12からデータwが信号bsel_out として、ALU14およびMAC15に出力される。また、第3の選択装置13から、カスケード入力データa*x+b*y+c*zが信号csel outとして第1の選択装置11、ALU14およびMAC15に出力される。
このとき、乗加算を指定する制御信号MACMDが、MAC15に供給される。これにより、MAC15において、係数dとデータwとの乗算が行われ、さらに、その結果d*wと(a*x+b*y+c*z)との加算が行われる。これにより、MAC15から乗加算結果a*x+b*y+c*z+d*wが信号mac outとして第4の選択装置16に出力される。
そして、制御信号ESELがMAC15の出力を選択するように、第4の選択装置16に供給されている。その結果、第4の選択装置16においてMAC15の出力信号mac out(a*x+b*y+c*z+d*w)が選択され、信号esel out(a*x+b*y+c*z+d*w)としてレジスタ17に出力される。
レジスタ17では、MAC15の演算結果a*x+b*y+c*z+d*wが格納され、この格納データが演算出力端子PE Cから演算結果信号OT3として所望の演算結果outとして出力され、演算装置10A−0のカスケード入力PE P0、演算装置10A−2のカスケード入力PE P1、および演算装置10A−2のカスケード入力PE P2に出力される。
以上において、図2において図4に示す遅延制御信号C0DL,C1DL,C2DL,C3DLはすべて遅延0となるように、各C0FIFO18−0〜C3FIFO18−3に供給される。
また、遅延制御信号D0DLは遅延0となるように、D0FIFO19−0に供給され、遅延制御信号D1DLは遅延1となるように、D1FIFO19−1に供給され、遅延制御信号D2DLは遅延2となるように、D2FIFO19−2に供給され、遅延制御信号D3DLは遅延3となるように、D3FIFO19−3に供給される。
以上説明したように、本第2の実施形態によれば、制御信号ASELに応じて係数入力C0I,C1I,…,CkIとデータ0を選択する第1の選択装置11と、制御信号BSELに応じてデータ入力D0I,D1I,…,DmIを選択する第2の選択装置12と、制御信号CSELに応じてカスケード入力P0,P1,…,Pn−2 とデータ0を選択する第3の選択装置13と、第1の選択装置11の出力信号asel_out 、第2の選択装置12の出力信号bsel_out 、および第3の選択装置13の出力信号csel_out を入力として、制御信号ALUMD,RNDMD,SATMD,OSFMD,ACCMDの指示に応じた論理演算を行うALU14と、第1の選択装置11の出力信号asel_out 、第2の選択装置12の出力信号bsel_out 、および第3の選択装置13の出力信号csel_out を入力として、制御信号MACMD,RNDMD,SATMD,OSFMD,ACCMDの指示に応じた演算を行うMAC15と、制御信号ESELに応じて、ALU14の出力信号alu_out とMAC15の出力信号mac_out のいずれかを選択する第4の選択装置16と、遅延制御信号C0DL〜CkDLの値により任意のサイクル遅延可能であり、係数入力を遅延制御信号C0DL〜CkDLの値に応じたサイクルを持って遅延させて、係数出力を得、次段の装置に出力するC0FIFO18−0〜CkFIFO18−kと、制御信号D0DL〜DmDLの値により任意のサイクル遅延可能であり、データ入力を遅延制御信号D0DL〜DmDLの値に応じたサイクルを持って遅延させて、データ出力を得、次段の装置に出力するD0FIFO19−0〜DmFIFO19−mとを有する複数の演算装置10−0〜10−n-1 を設け、演算装置10−0〜10−n-1 の係数およびデータの入出力同士をカスケード接続し、かつ、各演算装置の演算結果信号OT0〜OTn−1を他の装置のカスケード入力PE_P0,PE_P1,…,PE_Pn−2 として供給するように構成したので、演算装置自体を外部から再構成可能である。
したがって、本第2の実施形態によれば、上述した第1の実施形態と同様に、論理レベルの最適化ができることはもとより、構成情報の増大を防止でき、集積回路としての面積効率の悪化を防止できる演算装置を実現できる利点がある。
また、演算装置を再構成可能であることから、カスケード演算だけでなく並列演算も同一のハードウェアで実現することが可能になっている。そのため、演算装置の数を増やして多くの並列化可能な処理を効率良く実行することもできる。
また、MACやALUが1あるいは2であるDSPではMEMW=ax+by+cz+dwの演算を行う場合、一時レジスタにデータを書き戻して演算結果を得る必要があったのに対して、本第2の実施形態によれば、各演算装置にax,by,cz,dwの演算を割り当て、さらに前段の演算結果をカスケードすることで一度にMEMWの演算が可能になっている。
そのため、実行サイクル数が短くなる。また一時レジスタへのアクセスが少なくなるため電力の消費も抑えることができる利点がある。
第3実施形態
図5は、本発明に係る演算装置の第3の実施形態を示す構成図である。
図5の演算装置20は、構成情報に基づいて再構成可能な演算装置であって、4入力4出力の演算を行い、バタフライ演算とシフト演算を同時に実行可能に構成されている。
本演算装置20は、単項演算手段としてのシフト演算器(SFT0)21−0、およびシフト演算器(SFT1)21−1、入力選択装置(RSEL0)22−0、入力選択装置(RSEL1)22−1、2入力2出力のバタフライ演算器(BTF0)23、出力選択装置(DSEL0)24−0、出力選択装置(DSEL1)24−1、出力選択装置(WSEL0)25−0、および出力選択装置(WSEL1)25−1を有している。
そして、演算装置20は、データ入力MEMR0,MEMR1,I0,I1、およびデータ出力MEMW0,MEMW1,D0,D1を有し、また、再構成等のための制御信号BTFMD0,R0SEL,R1SEL,W0SEL,W1SEL,D0SEL,D1SELが供給される。
シフト演算器21−0は、データ入力MEMR0の値を制御信号SFT0MDに応じて単項演算、具体的には、制御信号SFT0MDが示す値(シフト量)に応じて左または右に任意ビットだけシフトする演算を行って、その結果を入力選択装置22−0および出力選択装置24−0に出力する。なお、シフト演算器21−0は、たとえば制御信号SFT0MDが示すシフト量がゼロの場合には、シフト演算を行わず、データ入力MEMR0をそのまま出力する。
シフト演算器21−1は、データ入力MEMR1の値を制御信号SFT1MDに応じて単項演算、具体的には、制御信号SFT1MDが示す値(シフト量)に応じて左または右に任意ビットだけシフトする演算を行って、その結果を入力選択装置22−1および出力選択装置24−1に出力する。なお、シフト演算器21−1は、たとえば制御信号SFT1MDが示すシフト量がゼロの場合には、シフト演算を行わず、データ入力MEMR1をそのまま出力する。
入力選択装置22−0は、制御信号R0SELに応じて、シフト演算器21−0の出力データおよびデータ入力I0のいずれかを選択し、信号r0sel out としてバタフライ演算器23に出力する。
入力選択装置22−1は、制御信号R1SELに応じて、シフト演算器21−1の出力データおよびデータ入力I1のいずれかを選択し、信号r1sel out としてバタフライ演算器23に出力する。
バタフライ演算器23は、入力端子DAに入力選択装置22−0の出力信号r0sel out を入力し、入力端子DBの入力選択装置22−1の出力信号r1sel out を入力し、制御端子CTLに供給される制御信号BTFMD0の指示に応じた演算を行って2つの演算結果を得、一方の演算結果を出力端子OAから信号btf0a out として出力選択装置24−0および25−0に出力し、他方の演算結果を出力端子OBから信号btf0b out として出力選択装置24−1および25−1に出力する。
具体的には、バタフライ演算器23は、制御信号BTFMD0の値により、以下のいずれかの演算を選択的に行う。
(数5)
btf0a out = r1sel out ,btf0b out = r0sel out
btf0a out = r1sel out ,btf0b out =-r0sel out
btf0a out =-r1sel out ,btf0b out = r0sel out
btf0a out =-r1sel out ,btf0b out =-r0sel out
btf0a out = r0sel out ,btf0b out = r1sel out
btf0a out = r0sel out ,btf0b out =-r1sel out
btf0a out =-r0sel out ,btf0b out = r1sel out
btf0a out =-r0sel out ,btf0b out =-r1sel out
btf0a out = r0sel out + r1sel out ,btf0b out
= r0sel out − r1sel out
btf0a out = r0sel out + r1sel out ,btf0b out
= r1sel out − r0sel out
btf0a out = r0sel out − r1sel out ,btf0b out
= r0sel out + r1sel out
btf0a out = r1sel out − r0sel out ,btf0b out
= r0sel out + r1sel out
出力選択装置24−0は、制御信号D0SELに応じて、シフト演算器21−0の出力信号(たとえばMEMR0)とバタフライ演算器23の出力信号btf0a out のいずれかを選択し、信号D0として出力する。
出力選択装置24−1は、制御信号D1SELに応じて、シフト演算器21−1の出力信号(たとえばMEMR1)とバタフライ演算器23の出力信号btf0b out のいずれかを選択し、信号D1として出力する。
出力選択装置25−0は、制御信号W0SELに応じて、データ入力I0とバタフライ演算器23の出力信号btf0a out のいずれかを選択し、信号MEMW0として出力する。
出力選択装置25−1は、制御信号W1SELに応じて、データ入力I1とバタフライ演算器23の出力信号btf0b out のいずれかを選択し、信号MEMW1として出力する。
次に、上記構成による動作を説明する。
ここでは、
D0=MEMR0,
D1=MEMR0−MEMR1,
MEMW0=MEMR0+MEMR1,
MEMW1=I1
の演算を実行するものとする。
たとえばシフト演算器21−0,21−1のシフト量が、制御信号SFT0MD,SFT1MDによりゼロに設定される。
したがって、シフト演算器21−0の出力はMEMR0となり、入力選択装置22−0および出力選択装置24−0に供給される。
同様に、シフト演算器21−1の出力はMEMR1となり、入力選択装置22−1および出力選択装置24−1に供給される。
入力選択装置22−0では、制御信号R0SELにより、シフト演算器21−0の出力信号、すなわちMEMR0を選択するように制御され、選択されたデータMEMR0が信号r0sel out として、バラフライ演算器23の入力端子DAに供給される。
また、入力選択装置22−1では、制御信号R1SELにより、シフト演算器21−1の出力信号、すなわちMEMR1を選択するように制御され、選択されたデータMEMR1が信号r1sel out として、バラフライ演算器23の入力端子DBに供給される。
バタフライ演算器23では、制御端子CTLに供給される制御信号BTFMD0により、OA=DA+DB,OB=DA−DBが計算されるモードに設定される。
これにより、バタフライ演算器23においては、入力端子DAに供給されたデータMEMR0と入力端子DBに供給されたデータMEMR1とが加算され、その結果である(MEMR0+MEMR1)が出力端子OAから信号btf0a out として、出力選択装置24−0および25−0に出力される。
また、バタフライ演算器23においては、入力端子DAに供給されたデータMEMR0と入力端子DBに供給されたデータMEMR1との差がとられ、その結果である(MEMR0−MEMR1)が出力端子OBから信号btf0b outとして、出力選択装置24−1および25−1に出力される。
出力選択装置24−0では、シフト演算器21−0の出力信号(MEMR0)とバタフライ演算器23の出力信号btf0a out (=MEMR0+MEMR1)のうち、シフト演算器21−0の出力信号(MEMR0)を選択するように制御信号D0SELが供給され、これにより選択されたデータが信号D0=MEMR0として出力される。
出力選択装置25−0では、データ入力I0とバタフライ演算器23の出力信号btf0a out (=MEMR0+MEMR1)のうち、バタフライ演算器23の出力信号btf0a out を選択するように制御信号W0SELが供給され、これにより選択されたデータが信号MEMW0=MEMR0+MEMR1として出力される。
また、出力選択装置25−1では、データ入力I1とバタフライ演算器23の出力信号btf0b out (=MEMR0−MEMR1)のうち、データ入力I1を選択するように制御信号W1SELが供給され、これにより選択されたデータが信号MEMW1=I1として出力される。
出力選択装置24−1では、シフト演算器21−1の出力信号(MEMR1)とバタフライ演算器23の出力信号btf0b out (=MEMR0−MEMR1)のうち、バタフライ演算器23の出力信号btf0b out を選択するように制御信号D1SELが供給され、これにより選択されたデータが信号D1=MEMR0−MEMR1として出力される。
以上説明したように、本第3の実施形態によれば、データ入力MEMR0の値を制御信号SFT0MDが示す値に応じて左または右に任意ビットだけシフトする演算を行うシフト演算器21−0と、データ入力MEMR1の値を制御信号SFT1MDが示す値に応じて左または右に任意ビットだけシフトする演算を行うシフト演算器21−1と、制御信号R0SELに応じて、シフト演算器21−0の出力データおよびデータ入力I0のいずれかを選択し、信号r0sel outとして出力する入力選択装置22−0と、制御信号R1SELに応じて、シフト演算器21−1の出力データおよびデータ入力I1のいずれかを選択し、信号r1sel out として出力する入力選択装置22−1と、入力端子DAに入力選択装置22−0の出力信号r0sel out を入力し、入力端子DBに入力選択装置22−1の出力信号r1sel out を入力し、制御端子CTLに供給される制御信号BTFMD0の指示に応じた演算を行って2つの演算結果を得、一方の演算結果を出力端子OAから信号btf0a out として出力選択装置24−0および25−0に出力し、他方の演算結果を出力端子OBから信号btf0b out として出力選択装置24−1および25−1に出力するバタフライ演算器23と、制御信号D0SELに応じて、シフト演算器21−0の出力信号とバタフライ演算器23の出力信号btf0a out のいずれかを選択し、信号D0として出力する出力選択装置24−0と、制御信号D1SELに応じて、シフト演算器21−1の出力信号とバタフライ演算器23の出力信号btf0b out のいずれかを選択し、信号D1として出力する出力選択装置24−1と、制御信号W0SELに応じて、データ入力I0とバタフライ演算器23の出力信号btf0a out のいずれかを選択し、信号MEMW0として出力する出力選択装置25−0と、制御信号W1SELに応じて、データ入力I1とバタフライ演算器23の出力信号btf0b out のいずれかを選択し、信号MEMW1として出力する出力選択装置25−1とを設けたので、以下の効果を得ることができる。
バタフライ演算などの多入力、多出力演算を行う場合には、y0=x0+x1,y1=x0−x1などの演算を同時に行うことができる。
このため、入力データとしてx0とx1を1回ずつ読み出せばよい。そのためメモリ/レジスタへのアクセス効率があがるという利点がある。
また専用ハードウェアと異なり、y0=x0+x1とy1=x0−x1のほかにも、y0=x0+x1+x2+x3などの計算を柔軟に行うことができる構成を容易に実現できる利点がある。
また、演算装置自体を外部から再構成可能であることから、論理レベルの最適化ができることはもとより、構成情報の増大を防止でき、集積回路としての面積効率の低下を防止できる演算装置を実現できる利点がある。
第4実施形態
図6は、本発明に係る演算装置の第4の実施形態を示す構成図である。
図6の演算装置20Aは、構成情報に基づいて再構成可能な演算装置であって、8入力8出力の演算を行い、バタフライ演算とシフト演算を同時に実行可能に構成されている。
本演算装置20Aは、シフト演算器(SFT0)21A−0、シフト演算器(SFT1)21A−1、シフト演算器(SFT2)21A−2、シフト演算器(SFT3)21A−3、入力選択装置(RSEL0)22A−0、入力選択装置(RSEL1)22A−1、入力選択装置(RSEL2)22A−2、入力選択装置(RSEL3)22A−3、バタフライ演算器(BTF0)23A−0、バタフライ演算器(BTF1)23A−1、出力選択装置(DSEL0)24A−0、出力選択装置(DSEL1)24A−1、出力選択装置(DSEL2)24A−2、出力選択装置(DSEL3)24A−3、出力選択装置(WSEL0)25A−0、出力選択装置(WSEL1)25A−1、出力選択装置(WSEL2)25A−2、および出力選択装置(WSEL3)25A−3を有している。
そして、演算装置20Aは、データ入力MEMR0,MEMR1,MEMR2,MEMR3,I0,I1、I2,I3、およびデータ出力MEMW0,MEMW1,MEMW2,MEMW3,D0,D1,D2,D3を有し、また、再構成のための制御信号BTFMD0,BTFMD1,R0SEL,R1SEL,R2SEL,R3SEL,W0SEL,W1SEL,W2SEL,W3SEL,D0SEL,D1SEL,D2SEL,D3SELが供給される。
シフト演算器21A−0は、データ入力MEMR0の値を制御信号SFT0MDに応じて単項演算、具体的には、制御信号SFT0MDが示す値(シフト量)に応じて左または右に任意ビットだけシフトする演算を行って、その結果を信号sft0 out として入力選択装置22A−0および出力選択装置24A−0に出力する。なお、シフト演算器21A−0は、たとえば制御信号SFT0MDが示すシフト量がゼロの場合には、シフト演算を行わず、データ入力MEMR0をそのまま出力する。
シフト演算器21A−1は、データ入力MEMR1の値を制御信号SFT1MDに応じて単項演算、具体的には、制御信号SFT1MDが示す値(シフト量)に応じて左または右に任意ビットだけシフトする演算を行って、その結果を信号sft1 out として入力選択装置22A−1および出力選択装置24A−1に出力する。なお、シフト演算器21A−1は、たとえば制御信号SFT1MDが示すシフト量がゼロの場合には、シフト演算を行わず、データ入力MEMR1をそのまま出力する。
シフト演算器21A−2は、データ入力MEMR2の値を制御信号SFT2MDに応じて単項演算、具体的には、制御信号SFT2MDが示す値(シフト量)に応じて左または右に任意ビットだけシフトする演算を行って、その結果を信号sft2 out として入力選択装置22A−2および出力選択装置24A−2に出力する。なお、シフト演算器21A−2は、たとえば制御信号SFT2MDが示すシフト量がゼロの場合には、シフト演算を行わず、データ入力MEMR2をそのまま出力する。
シフト演算器21A−3は、データ入力MEMR3の値を制御信号SFT3MDに応じて単項演算、具体的には、制御信号SFT3MDが示す値(シフト量)に応じて左または右に任意ビットだけシフトする演算を行って、その結果を信号sft3 out として入力選択装置22A−3および出力選択装置24A−3に出力する。なお、シフト演算器21A−3は、たとえば制御信号SFT3MDが示すシフト量がゼロの場合には、シフト演算を行わず、データ入力MEMR3をそのまま出力する。
入力選択装置22A−0は、制御信号R0SELに応じて、シフト演算器21A−0の出力データおよびデータ入力I0のいずれかを選択し、信号r0sel out としてバタフライ演算器23A−0に出力する。
入力選択装置22A−1は、制御信号R1SELに応じて、シフト演算器21A−1の出力データおよびデータ入力I1のいずれかを選択し、信号r1sel out としてバタフライ演算器23A−0に出力する。
入力選択装置22A−2は、制御信号R2SELに応じて、シフト演算器21A−2の出力データおよびデータ入力I2のいずれかを選択し、信号r2sel out としてバタフライ演算器23A−1に出力する。
入力選択装置22A−3は、制御信号R3SELに応じて、シフト演算器21A−3の出力データおよびデータ入力I3のいずれかを選択し、信号r3sel out としてバタフライ演算器23A−1に出力する。
バタフライ演算器23A−0は、入力端子DAに入力選択装置22A−0の出力信号r0sel out を入力し、入力端子DBに入力選択装置22A−1の出力信号r1sel out を入力し、制御端子CTLに供給される制御信号BTFMD0の指示に応じた演算を行って2つの演算結果を得、一方の演算結果を出力端子OAから信号btf0a out として出力選択装置24A−0および25A−0に出力し、他方の演算結果を出力端子OBから信号btf0b out として出力選択装置24A−1および25A−1に出力する。
具体的には、バタフライ演算器23A−0は、制御信号BTFMD0の値により、以下のいずれかの演算を選択的に行う。
(数6)
btf0a out = r1sel out ,btf0b out = r0sel out
btf0a out = r1sel out ,btf0b out =-r0sel out
btf0a out =-r1sel out ,btf0b out = r0sel out
btf0a out =-r1sel out ,btf0b out =-r0sel out
btf0a out = r0sel out ,btf0b out = r1sel out
btf0a out = r0sel out ,btf0b out =-r1sel out
btf0a out =-r0sel out ,btf0b out = r1sel out
btf0a out =-r0sel out ,btf0b out =-r1sel out
btf0a out = r0sel out + r1sel out ,btf0b out
= r0sel out − r1sel out
btf0a out = r0sel out + r1sel out ,btf0b out
= r1sel out − r0sel out
btf0a out = r0sel out − r1sel out ,btf0b out
= r0sel out + r1sel out
btf0a out = r1sel out − r0sel out ,btf0b out
= r0sel out + r1sel out
バタフライ演算器23A−1は、入力端子DAに入力選択装置22A−2の出力信号r2sel out を入力し、入力端子DBに入力選択装置22A−3の出力信号r3sel out を入力し、制御端子CTLに供給される制御信号BTFMD1の指示に応じた演算を行って2つの演算結果を得、一方の演算結果を出力端子OAから信号btf1a out として出力選択装置24A−2および25A−2に出力し、他方の演算結果を出力端子OBから信号btf1b out として出力選択装置24A−3および25A−3に出力する。
具体的には、バタフライ演算器23A−1は、制御信号BTFMD1の値により、以下のいずれかの演算を選択的に行う。
(数7)
btf1a out = r3sel out ,btf1b out = r2sel out
btf1a out = r3sel out ,btf1b out =-r2sel out
btf1a out =-r3sel out ,btf1b out = r2sel out
btf1a out =-r3sel out ,btf1b out =-r2sel out
btf1a out = r2sel out ,btf1b out = r3sel out
btf1a out = r2sel out ,btf1b out =-r3sel out
btf1a out =-r2sel out ,btf1b out = r3sel out
btf1a out =-r2sel out ,btf1b out =-r3sel out
btf1a out = r2sel out + r3sel out ,btf1b out
= r2sel out − r3sel out
btf1a out = r2sel out + r3sel out ,btf1b out
= r3sel out − r2sel out
btf1a out = r2sel out − 31sel out ,btf1b out
= r2sel out + r3sel out
btf1a out = r3sel out − r2sel out ,btf1b out
= r2sel out + r3sel out
出力選択装置24A−0は、制御信号D0SELに応じて、シフト演算器21A−0の出力信号sft0 out (たとえばMEMR0)とバタフライ演算器23A−0の出力信号btf0a out のいずれかを選択し、信号D0として出力する。
出力選択装置24A−1は、制御信号D1SELに応じて、シフト演算器21A−1の出力信号sft1 out (たとえばMEMR1)とバタフライ演算器23A−0の出力信号btf0b out のいずれかを選択し、信号D1として出力する。
出力選択装置24A−2は、制御信号D2SELに応じて、シフト演算器21A−2の出力信号sft2 out (たとえばMEMR2)とバタフライ演算器23A−1の出力信号btf1a out のいずれかを選択し、信号D2として出力する。
出力選択装置24A−3は、制御信号D3SELに応じて、シフト演算器21A−3の出力信号sft3 out (たとえばMEMR3)とバタフライ演算器23A−1の出力信号btf1b out のいずれかを選択し、信号D3として出力する。
出力選択装置25A−0は、制御信号W0SELに応じて、データ入力I0とバタフライ演算器23A−0の出力信号btf0a out のいずれかを選択し、信号MEMW0として出力する。
出力選択装置25A−1は、制御信号W1SELに応じて、データ入力I1とバタフライ演算器23A−0の出力信号btf0b out のいずれかを選択し、信号MEMW1として出力する。
出力選択装置25A−2は、制御信号W2SELに応じて、データ入力I2とバタフライ演算器23A−1の出力信号btf1a out のいずれかを選択し、信号MEMW2として出力する。
出力選択装置25A−3は、制御信号W3SELに応じて、データ入力I3とバタフライ演算器23A−1の出力信号btf1b out のいずれかを選択し、信号MEMW3として出力する。
次に、上記構成による動作を説明する。
ここでは、
D1=MEMR0−MEMR1,
D3=MEMR2−MEMR3,
MEMW0=MEMR0+MEMR1,
MEMW2=MEMR2+MEMR3,
MEMW1=I1
MEMW3=I3
の演算を実行するものとする。
たとえばシフト演算器21A−0,21A−1,21A−2,21A−3のシフト量が、制御信号SFT0MD,SFT1MD,SFT2MD,SFT3MDによりゼロに設定される。
したがって、シフト演算器21A−0の出力信号sft0 out はMEMR0となり、入力選択装置22A−0および出力選択装置24A−0に供給される。
同様に、シフト演算器21A−1の出力信号sft1 out はMEMR1となり、入力選択装置22A−1および出力選択装置24A−1に供給される。
シフト演算器21A−2の出力信号sft2 out はMEMR2となり、入力選択装置22A−2および出力選択装置24A−2に供給される。
そして、シフト演算器21A−3の出力信号sft3 out はMEMR3となり、入力選択装置22A−3および出力選択装置24A−3に供給される。
入力選択装置22A−0では、制御信号R0SELにより、シフト演算器21A−0の出力信号、すなわちMEMR0を選択するように制御され、選択されたデータMEMR0が信号r0sel out として、バラフライ演算器23A−0の入力端子DAに供給される。
入力選択装置22A−1では、制御信号R1SELにより、シフト演算器21A−1の出力信号、すなわちMEMR1を選択するように制御され、選択されたデータMEMR1が信号r1sel out として、バラフライ演算器23A−0の入力端子DBに供給される。
また、入力選択装置22A−2では、制御信号R2SELにより、シフト演算器21A−2の出力信号、すなわちMEMR2を選択するように制御され、選択されたデータMEMR2が信号r2sel out として、バラフライ演算器23A−1の入力端子DAに供給される。
入力選択装置22A−3では、制御信号R3SELにより、シフト演算器21A−3の出力信号、すなわちMEMR3を選択するように制御され、選択されたデータMEMR3が信号r3sel out として、バラフライ演算器23A−1の入力端子DBに供給される。
バタフライ演算器23A−0では、制御端子CTLに供給される制御信号BTFMD0により、OA=DA+DB,OB=DA−DBが計算されるモードに設定される。
これにより、バタフライ演算器23A−0においては、入力端子DAに供給されたデータMEMR0と入力端子DBに供給されたデータMEMR1とが加算され、その結果である(MEMR0+MEMR1)が出力端子OAから信号btf0a out として、出力選択装置24A−0および25A−0に出力される。
また、バタフライ演算器23A−0においては、入力端子DAに供給されたデータMEMR0と入力端子DBに供給されたデータMEMR1との差がとられ、その結果である(MEMR0−MEMR1)が出力端子OBから信号btf0b out として、出力選択装置24A−1および25A−1に出力される。
同様に、バタフライ演算器23A−1では、制御端子CTLに供給される制御信号BTFMD1により、OA=DA+DB,OB=DA−DBが計算されるモードに設定される。
これにより、バタフライ演算器23A−1においては、入力端子DAに供給されたデータMEMR2と入力端子DBに供給されたデータMEMR3とが加算され、その結果である(MEMR2+MEMR3)が出力端子OAから信号btf1a out として、出力選択装置24A−2および25A−2に出力される。
また、バタフライ演算器23A−1においては、入力端子DAに供給されたデータMEMR2と入力端子DBに供給されたデータMEMR3との差がとられ、その結果である(MEMR2−MEMR3)が出力端子OBから信号btf1b out として、出力選択装置24A−3および25A−3に出力される。
出力選択装置24A−1において、シフト演算器21A−1の出力信号(MEMR1)とバタフライ演算器23A−0の出力信号btf0b out (=MEMR0−MEMR1)のうち、バタフライ演算器23A−0の出力信号btf0b out を選択するように制御信号D1SELが供給され、これにより選択されたデータが信号D1=MEMR0−MEMR1として出力される。
また、出力選択装置25A−0では、データ入力I0とバタフライ演算器23A−0の出力信号btf0a out (=MEMR0+MEMR1)のうち、バタフライ演算器23A−0の出力信号btf0a out を選択するように制御信号W0SELが供給され、これにより選択されたデータが信号MEMW0=MEMR0+MEMR1として出力される。
また、出力選択装置25A−1では、データ入力I1とバタフライ演算器23A−0の出力信号btf0b out (=MEMR0−MEMR1)のうち、データ入力I1を選択するように制御信号W1SELが供給され、これにより選択されたデータが信号MEMW1=I1として出力される。
また、出力選択装置24A−3において、シフト演算器21A−3の出力信号(MEMR3)とバタフライ演算器23A−1の出力信号btf1b out (=MEMR2−MEMR3)のうち、バタフライ演算器23B−1の出力信号btf1b out を選択するように制御信号D3SELが供給され、これにより選択されたデータが信号D3=MEMR2−MEMR3として出力される。
また、出力選択装置25A−2では、データ入力I2とバタフライ演算器23A−1の出力信号btf1a out (=MEMR2+MEMR3)のうち、バタフライ演算器23A−1の出力信号btf1a out を選択するように制御信号W2SELが供給され、これにより選択されたデータが信号MEMW2=MEMR2+MEMR3として出力される。
また、出力選択装置25A−3では、データ入力I3とバタフライ演算器23A−1の出力信号btf1b out (=MEMR2−MEMR3)のうち、データ入力I3を選択するように制御信号W3SELが供給され、これにより選択されたデータが信号MEMW3=I3として出力される。
本第4の実施形態に係る8入力8出力の演算装置20Aによれば、上述した第3の実施形態の効果と同様の効果を得ることができる。
第5実施形態
図7は、本発明に係る演算装置の第5の実施形態を示す構成図である。
本第5の実施形態が上述した第4の実施形態と異なる点は、入力端子DAにバタフライ演算器23A−0の出力信号btf0a out を入力し、入力端子DBにバタフライ演算器23A−1の出力信号btf1a out を入力し、制御端子CTLに供給される制御信号BTFMD2の指示に応じた演算を行って2つの演算結果を得、一方の演算結果を出力端子OAから信号btf2a out として出力選択装置25B−0および25B−2に出力し、他方の演算結果を出力端子OBから信号btf2b out として出力選択装置25B−1および25B−3に出力するバタフライ演算器23A−2を設け、3つのバタフライ演算器をいわゆる多段に配置して、ツリー状に接続した構成としたことにある。
なお、本第5の実施形態に係るバタフライ演算器23B−2は、制御信号BTFMD2の値により、以下のいずれかの演算を選択的に行う。
(数8)
btf2a out = btf0a out ,btf2b out = btf1a out
btf2a out = btf0a out ,btf2b out =-btf1a out
btf2a out =-btf0a out ,btf2b out = btf1a out
btf2a out =-btf0a out ,btf2b out =-btf1a out
btf2a out = btf0a out ,btf2b out = btf1a out
btf2a out = btf0a out ,btf2b out =-btf1a out
btf2a out =-btf0a out ,btf2b out = btf1a out
btf2a out =-btf0a out ,btf2b out =-btf1a out
btf2a out = btf1a out + btf0a out ,btf2b out
= btf1a out − btf0a out
btf2a out = btf1a out + btf0a out ,btf2b out
= btf0a out − btf1a out
btf2a out = btf1a out − btf0a out ,btf2b out
= btf1a out + btf0a out
btf2a out = btf0a out − btf1a out ,btf2b out
= btf1a out + btf0a out
そして、本第5の実施形態においては、出力選択装置25B−0〜25B−3を制御信号W0SEL〜W3SELに応じて3つの入力データの中から一つのデータを選択し、信号MEMW0〜MEMW3として出力するように構成している。
出力選択装置25B−0は、制御信号W0SELに応じて、データ入力I0とバタフライ演算器23A−0の出力信号btf0a out とバタフライ演算器23B−2の出力信号btf2a out とのいずれかを選択し、信号MEMW0として出力する。
出力選択装置25B−1は、制御信号W1SELに応じて、データ入力I1とバタフライ演算器23A−0の出力信号btf0b out とバタフライ演算器23B−2の出力信号btf2b out のいずれかを選択し、信号MEMW1として出力する。
出力選択装置25B−2は、制御信号W2SELに応じて、データ入力I2とバタフライ演算器23A−1の出力信号btf1a out とバタフライ演算器23B−2の出力信号btf2a out のいずれかを選択し、信号MEMW2として出力する。
出力選択装置25B−3は、制御信号W3SELに応じて、データ入力I3とバタフライ演算器23A−1の出力信号btf1b out とバタフライ演算器23B−2の出力信号btf2b out のいずれかを選択し、信号MEMW3として出力する。
その他の構成および機能は、第4の実施形態に係る図6と同様であることから、図7においては、図6と同一構成部分は、同一符号をもって表している。
このような構成において、たとえばバタフライ演算器23A−0の出力信号btf0a out が(MEMR0+MEMR1)で、バタフライ演算器23A−1の出力信号btf1a out が(MEMR2+MEMR3)であるとした場合に、たとえばバタフライ演算器23B−2の出力信号btf2a out が(MEMR0+MEMR1+MEMR2+MEMR3)となり、出力信号btf2b out が(MEMR0+MEMR1−MEMR2−MEMR3)となる。
そして、出力選択装置25B−0において、制御信号W0SELに応じて、バタフライ演算器23B−2の出力信号btf2a out を選択するように制御することにより、信号MEMW0は(MEMR0+MEMR1+MEMR2+MEMR3)として出力される。
同様に、出力選択装置25B−2において、制御信号W2SELに応じて、バタフライ演算器23B−2の出力信号btf2a out を選択するように制御することにより、信号MEMW2は(MEMR0+MEMR1+MEMR2+MEMR3)として出力される。
また、出力選択装置25B−1において、制御信号W1SELに応じて、バタフライ演算器23B−2の出力信号btf2b out を選択するように制御することにより、信号MEMW1は(MEMR0+MEMR1−MEMR2−MEMR3)として出力される。
同様に、出力選択装置25B−3において、制御信号W3SELに応じて、バタフライ演算器23B−2の出力信号btf2b out を選択するように制御することにより、信号MEMW3は(MEMR0+MEMR1−MEMR2−EMR3)として出力される。
その他の構成、および作用は、上述した第4の実施形態と同様であることからここではその説明は省略する。
本第5の実施形態によれば、上述した第4の実施形態と同様の効果を得られることはもとより、さらに高度な複雑な演算を容易に行うことができる利点がある。
第6実施形態
図8は、本発明に係る演算装置の第6の実施形態を示す構成図である。
図8の演算装置20Cは、構成情報に基づいて再構成可能な演算装置であって、16入力16出力の演算を行い、バタフライ演算を実行可能に構成されている。
本演算装置20Cは、入力選択装置(RSEL0)22C−0、入力選択装置(RSEL1)22C−1、入力選択装置(RSEL2)22C−2、入力選択装置(RSEL3)22C−3、入力選択装置(RSEL4)22C−4、入力選択装置(RSEL5)22C−5、入力選択装置(RSEL6)22C−6、入力選択装置(RSEL7)22C−7、入力選択装置(BSEL0)22C−8、入力選択装置(BSEL1)22C−9、入力選択装置(BSEL2)22C−10、入力選択装置(BSEL3)22C−11、入力選択装置(BSEL4)22C−12、入力選択装置(BSEL5)22C−13、入力選択装置(BSEL6)22C−14、入力選択装置(BSEL7)22C−15、バタフライ演算器(BTF0)23C−0、バタフライ演算器(BTF1)23C−1、バタフライ演算器(BTF2)23C−2、バタフライ演算器(BTF3)23C−3、バタフライ演算器(BTF4)23C−4、バタフライ演算器(BTF5)23C−5、バタフライ演算器(BTF6)23C−6、バタフライ演算器(BTF7)23C−7、出力選択装置(DSEL0)24C−0、出力選択装置(DSEL1)24C−1、出力選択装置(DSEL2)24C−2、出力選択装置(DSEL3)24C−3、出力選択装置(DSEL4)24C−4、出力選択装置(DSEL5)24C−5、出力選択装置(DSEL6)24C−6、出力選択装置(DSEL7)24C−7、出力選択装置(WSEL0)25C−0、出力選択装置(WSEL1)25C−1、出力選択装置(WSEL2)25C−2、出力選択装置(WSEL3)25C−3、出力選択装置(WSEL4)25C−4、出力選択装置(WSEL5)25C−5、出力選択装置(WSEL6)25C−6、および出力選択装置(WSEL7)25C−7を有している。
そして、入力選択装置22C−0〜22C−7が本発明の第1の入力選択装置を構成し、入力選択装置22C−9〜22C−15が本発明の第2の入力選択装置を構成し、バタフライ演算器23C−0,バタフライ演算器23C−2,バタフライ演算器23C−4、およびバタフライ演算器23C−6が本発明の第1の演算器を構成し、バタフライ演算器23C−1,バタフライ演算器23C−3,バタフライ演算器23C−5、およびバタフライ演算器23C−7が本発明の第2の演算器を構成し、出力選択装置24C−0〜24C−7が本発明の第1の出力選択装置を構成し、出力選択装置25C−0〜25C−7が本発明の第2の出力選択装置を構成する。
そして、演算装置20Cは、データ入力MEMR0,MEMR1,MEMR2,MEMR3,MEMR4,MEMR5,MEMR6,MEMR7,I0,I1,I2,I3,I4,I5,I6,I7、およびデータ出力MEMW0,MEMW1,MEMW2,MEMW3,MEMW4,MEMW5,MEMW6,MEMW7,D0,D1,D2,D3,D4,D5,D6,D7を有し、また、再構成のための制御信号BTFMD0,BTFMD1,BTFMD2,BTFMD3,BTFMD4,BTFMD5,BTFMD6,BTFMD7、R0SEL,R1SEL,R2SEL,R3SEL,R4SEL,R5SEL,R6SEL,R7SEL、B0SEL,B1SEL,B2SEL,B3SEL,B4SEL,B5SEL,B6SEL,B7SEL、W0SEL,W1SEL,W2SEL,W3SEL,W4SEL,W5SEL,W6SEL,W7SEL、D0SEL,D1SEL,D2SEL,D3SEL,D4SEL,D5SEL,D6SEL,D7SELが供給される。
入力選択装置22C−0は、制御信号R0SELに応じて、データ入力MEMR0およびデータ入力I0のいずれかを選択し、信号r0sel out としてバタフライ演算器23C−0に出力する。
入力選択装置22C−1は、制御信号R1SELに応じて、データ入力MEMR1およびデータ入力I1のいずれかを選択し、信号r1sel out としてバタフライ演算器23C−0に出力する。
入力選択装置22C−2は、制御信号R2SELに応じて、データ入力MEMR2およびデータ入力I2のいずれかを選択し、信号r2sel out としてバタフライ演算器23C−2に出力する。
入力選択装置22C−3は、制御信号R3SELに応じて、データ入力MEMR3およびデータ入力I3のいずれかを選択し、信号r3sel out としてバタフライ演算器23C−2に出力する。
入力選択装置22C−4は、制御信号R4SELに応じて、データ入力MEMR4およびデータ入力I4のいずれかを選択し、信号r4sel out としてバタフライ演算器23C−4に出力する。
入力選択装置22C−5は、制御信号R5SELに応じて、データ入力MEMR5およびデータ入力I5のいずれかを選択し、信号r5sel out としてバタフライ演算器23C−4に出力する。
入力選択装置22C−6は、制御信号R6SELに応じて、データ入力MEMR6およびデータ入力I6のいずれかを選択し、信号r6sel out としてバタフライ演算器23C−6に出力する。
入力選択装置22C−7は、制御信号R7SELに応じて、データ入力MEMR7およびデータ入力I7のいずれかを選択し、信号r7sel out としてバタフライ演算器23C−6に出力する。
入力選択装置22C−8は、制御信号B0SELに応じて、データ入力I0、バタフライ演算器23C−0の出力信号btf0a out 、およびバタフライ演算器23C−6の出力信号btf6b out のいずれかを選択し、信号b0sel out としてバタフライ演算器23C−1に出力する。
入力選択装置22C−9は、制御信号B1SELに応じて、データ入力I1、バタフライ演算器23C−0の出力信号btf0b out 、およびバタフライ演算器23C−2の出力信号btf2a out のいずれかを選択し、信号b1sel out としてバタフライ演算器23C−1に出力する。
入力選択装置22C−10は、制御信号B2SELに応じて、データ入力I2、バタフライ演算器23C−2の出力信号btf2a out 、およびバタフライ演算器23C−0の出力信号btf0b out のいずれかを選択し、信号b2sel out としてバタフライ演算器23C−3に出力する。
入力選択装置22C−11は、制御信号B3SELに応じて、データ入力I3、バタフライ演算器23C−2の出力信号btf2b out 、およびバタフライ演算器23C−4の出力信号btf4a out のいずれかを選択し、信号b3sel out としてバタフライ演算器23C−3に出力する。
入力選択装置22C−12は、制御信号B4SELに応じて、データ入力I4、バタフライ演算器23C−4の出力信号btf4a out 、およびバタフライ演算器23C−2の出力信号btf2b out のいずれかを選択し、信号b4sel out としてバタフライ演算器23C−5に出力する。
入力選択装置22C−13は、制御信号B5SELに応じて、データ入力I5、バタフライ演算器23C−4の出力信号btf4b out 、およびバタフライ演算器23C−6の出力信号btf6a out のいずれかを選択し、信号b5sel out としてバタフライ演算器23C−5に出力する。
入力選択装置22C−14は、制御信号B6SELに応じて、データ入力I6、バタフライ演算器23C−6の出力信号btf6a out 、およびバタフライ演算器23C−4の出力信号btf4b out のいずれかを選択し、信号b6sel out としてバタフライ演算器23C−7に出力する。
入力選択装置22C−15は、制御信号B7SELに応じて、データ入力I7、バタフライ演算器23C−6の出力信号btf6b out 、およびバタフライ演算器23C−0の出力信号btf0a out のいずれかを選択し、信号b7sel out としてバタフライ演算器23C−7に出力する。
バタフライ演算器23C−0は、入力端子DAに入力選択装置22C−0の出力信号r0sel out を入力し、入力端子DBに入力選択装置22C−1の出力信号r1sel out を入力し、制御端子CTLに供給される制御信号BTFMD0の指示に応じた演算を行って2つの演算結果を得、一方の演算結果を出力端子OAから信号btf0a out として入力選択装置22C−8および22C−15に出力し、他方の演算結果を出力端子OBから信号btf0b out として入力選択装置22C−9および22C−10に出力する。
バタフライ演算器23C−1は、入力端子DAに入力選択装置22C−8の出力信号b0sel out を入力し、入力端子DBに入力選択装置22C−9の出力信号b1sel out を入力し、制御端子CTLに供給される制御信号BTFMD1の指示に応じた演算を行って2つの演算結果を得、一方の演算結果を出力端子OAから信号btf1a out として出力選択装置24C−0および25C−0に出力し、他方の演算結果を出力端子OBから信号btf1b out として出力選択装置24C−1および25C−1に出力する。
バタフライ演算器23C−2は、入力端子DAに入力選択装置22C−2の出力信号r2sel out を入力し、入力端子DBに入力選択装置22C−3の出力信号r3sel out を入力し、制御端子CTLに供給される制御信号BTFMD2の指示に応じた演算を行って2つの演算結果を得、一方の演算結果を出力端子OAから信号btf2a out として入力選択装置22C−10および22C−9に出力し、他方の演算結果を出力端子OBから信号btf2b out として入力選択装置22C−11および22C−12に出力する。
バタフライ演算器23C−3は、入力端子DAに入力選択装置22C−10の出力信号b2sel out を入力し、入力端子DBに入力選択装置22C−11の出力信号b3sel out を入力し、制御端子CTLに供給される制御信号BTFMD3の指示に応じた演算を行って2つの演算結果を得、一方の演算結果を出力端子OAから信号btf3a out として出力選択装置24C−2および25C−2に出力し、他方の演算結果を出力端子OBから信号btf3b out として出力選択装置24C−3および25C−3に出力する。
バタフライ演算器23C−4は、入力端子DAに入力選択装置22C−4の出力信号r4sel out を入力し、入力端子DBに入力選択装置22C−5の出力信号r5sel out を入力し、制御端子CTLに供給される制御信号BTFMD4の指示に応じた演算を行って2つの演算結果を得、一方の演算結果を出力端子OAから信号btf4a out として入力選択装置22C−12および22C−11に出力し、他方の演算結果を出力端子OBから信号btf4b out として入力選択装置22C−13および22C−14に出力する。
バタフライ演算器23C−5は、入力端子DAに入力選択装置22C−12の出力信号b4sel out を入力し、入力端子DBに入力選択装置22C−13の出力信号b5sel out を入力し、制御端子CTLに供給される制御信号BTFMD5の指示に応じた演算を行って2つの演算結果を得、一方の演算結果を出力端子OAから信号btf5a out として出力選択装置24C−4および25C−4に出力し、他方の演算結果を出力端子OBから信号btf5b out として出力選択装置24C−5および25C−5に出力する。
バタフライ演算器23C−6は、入力端子DAに入力選択装置22C−6の出力信号r6sel out を入力し、入力端子DBに入力選択装置22C−7の出力信号r7sel out を入力し、制御端子CTLに供給される制御信号BTFMD6の指示に応じた演算を行って2つの演算結果を得、一方の演算結果を出力端子OAから信号btf6a out として入力選択装置22C−14および22C−13に出力し、他方の演算結果を出力端子OBから信号btf6b out として入力選択装置22C−15および22C−8に出力する。
バタフライ演算器23C−7は、入力端子DAに入力選択装置22C−14の出力信号b6sel out を入力し、入力端子DBに入力選択装置22C−15の出力信号b7sel out を入力し、制御端子CTLに供給される制御信号BTFMD7の指示に応じた演算を行って2つの演算結果を得、一方の演算結果を出力端子OAから信号btf7a out として出力選択装置24C−6および25C−6に出力し、他方の演算結果を出力端子OBから信号btf7b out として出力選択装置24C−7および25C−7に出力する。
具体的には、バタフライ演算器23C−i(i=0,2,4,6)は、制御信号BTFMDiの値により、以下のいずれかの演算を選択的に行う。
(数9)
btf[i]a out =r[i+1] sel out ,btf[i]b out =r[i] sel out
btf[i]a out =r[i+1] sel out ,btf[i]b out =-r[i]sel out
btf[i]a out =-r[i+1]sel out ,btf[i]b out =r[i] sel out
btf[i]a out =-r[i+1]sel out ,btf[i]b out =-r[i]sel out
btf[i]a out =r[i] sel out ,btf[i]b out =r[i+1] sel out
btf[i]a out =r[i] sel out ,btf[i]b out =-r[i+1]sel out
btf[i]a out =-r[i]sel out ,btf[i]b out =r[i+1] sel out
btf[i]a out =-r[i]sel out ,btf[i]b out =-r[i+1]sel out
btf[i]a out =r[i] sel out +r[i+1] sel out ,btf[i]b out
=r[i] sel out −r[i+1] sel out
btf[i]a out =r[i] sel out +r[i+1] sel out ,btf[i]b out
=r[i+1] sel out −r[i] sel out
btf[i]a out =r[i] sel out −r[i+1] sel out ,btf[i]b out
=r[i] sel out +r[i+1] sel out
btf[i]a out =r[i+1] sel out −r[i] sel out ,btf[i]b out
=r[i] sel out +r[i+1] sel out
また、バタフライ演算器23C−j(j=1,3,5,7)は、制御信号BTFMDjの値により、以下のいずれかの演算を選択的に行う。
(数10)
btf[j]a out =b[j] sel out ,btf[j]b out =b[j-1] sel out
btf[j]a out =b[j] sel out ,btf[j]b out =-b[j-1]sel out
btf[j]a out =-b[j]sel out ,btf[j]b out =b[j-1] sel out
btf[j]a out =-b[j]sel out ,btf[j]b out =-b[j-1]sel out
btf[j]a out =b[j-1] sel out ,btf[j]b out =b[j] sel out
btf[j]a out =b[j-1] sel out ,btf[j]b out =-b[j]sel out
btf[j]a out =-b[j-1]sel out ,btf[j]b out =b[j] sel out
btf[j]a out =-b[j-1]sel out ,btf[j]b out =-b[j]sel out
btf[j]a out =b[j-1] sel out +b[j] sel out ,btf[j]b out
=b[j-1] sel out −b[j] sel out
btf[j]a out =b[j-1] sel out +b[j] sel out ,btf[j]b out
=b[j] sel out −b[j-1] sel out
btf[j]a out =b[j-1] sel out −b[j] sel out ,btf[j]b out
=b[j-1] sel out +b[j] sel out
btf[j]a out =b[j] sel out −b[j-1] sel out ,btf[j]b out
=b[j-1] sel out +b[j] sel out
出力選択装置24C−0は、制御信号D0SELに応じて、データ入力MEMR0とバタフライ演算器23C−1の出力信号btf1a out のいずれかを選択し、信号D0として出力する。
出力選択装置24C−1は、制御信号D1SELに応じて、データ入力MEMR1とバタフライ演算器23C−1の出力信号btf1b out のいずれかを選択し、信号D1として出力する。
出力選択装置24C−2は、制御信号D2SELに応じて、データ入力MEMR2とバタフライ演算器23C−3の出力信号btf3a out のいずれかを選択し、信号D2として出力する。
出力選択装置24C−3は、制御信号D3SELに応じて、データ入力MEMR3とバタフライ演算器23C−3の出力信号btf3b out のいずれかを選択し、信号D3として出力する。
出力選択装置24C−4は、制御信号D4SELに応じて、データ入力MEMR4とバタフライ演算器23C−5の出力信号btf5a out のいずれかを選択し、信号D4として出力する。
出力選択装置24C−5は、制御信号D5SELに応じて、データ入力MEMR5とバタフライ演算器23C−5の出力信号btf5b out のいずれかを選択し、信号D5として出力する。
出力選択装置24C−6は、制御信号D6SELに応じて、データ入力MEMR6とバタフライ演算器23C−7の出力信号btf7a out のいずれかを選択し、信号D6として出力する。
出力選択装置24C−7は、制御信号D7SELに応じて、データ入力MEMR7とバタフライ演算器23C−7の出力信号btf7b out のいずれかを選択し、信号D7として出力する。
出力選択装置25C−0は、制御信号W0SELに応じて、データ入力I0とバタフライ演算器23C−1の出力信号btf1a out のいずれかを選択し、信号MEMW0として出力する。
出力選択装置25C−1は、制御信号W1SELに応じて、データ入力I1とバタフライ演算器23C−1の出力信号btf1b out のいずれかを選択し、信号MEMW1として出力する。
出力選択装置25C−2は、制御信号W2SELに応じて、データ入力I2とバタフライ演算器23C−3の出力信号btf3a out のいずれかを選択し、信号MEMW2として出力する。
出力選択装置25C−3は、制御信号W3SELに応じて、データ入力I3とバタフライ演算器23C−3の出力信号btf3b out のいずれかを選択し、信号MEMW3として出力する。
出力選択装置25C−4は、制御信号W4SELに応じて、データ入力I4とバタフライ演算器23C−5の出力信号btf5a out のいずれかを選択し、信号MEMW4として出力する。
出力選択装置25C−5は、制御信号W5SELに応じて、データ入力I5とバタフライ演算器23C−5の出力信号btf5b out のいずれかを選択し、信号MEMW5として出力する。
出力選択装置25C−6は、制御信号W6SELに応じて、データ入力I6とバタフライ演算器23C−7の出力信号btf7a out のいずれかを選択し、信号MEMW6として出力する。
出力選択装置25C−7は、制御信号W7SELに応じて、データ入力I7とバタフライ演算器23C−7の出力信号btf7b out のいずれかを選択し、信号MEMW7として出力する。
次に、上記構成による動作を説明する。
ここでは、たとえば以下の演算を実行するものとする。
D0=MEMR6−MEMR7+MEMR0−MEMR1,
D1=MEMR1,
D6=MEMR6,
D7=MEMR6+MEMR7−MEMR0−MEMR1,
MEMW0=I0
MEMW1=MEMR6−MEMR7−MEMR0+MEMR1,
MEMW6=MEMR0+MEMR1+MEMR6+MEMR7,
MEMW7=I7
この場合、入力選択装置22C−0では、制御信号R0SELにより、データ入力MEMR0を選択するように制御され、選択されたデータMEMR0が信号r0sel out として、バラフライ演算器23C−0の入力端子DAに供給される。
入力選択装置22C−1では、制御信号R1SELにより、MEMR1を選択するように制御され、選択されたデータMEMR1が信号r1sel out として、バラフライ演算器23C−0の入力端子DBに供給される。
また、入力選択装置22C−6では、制御信号R6SELにより、MEMR6を選択するように制御され、選択されたデータMEMR6が信号r6sel out として、バラフライ演算器23C−6の入力端子DAに供給される。
入力選択装置22C−7では、制御信号R7SELにより、MEMR7を選択するように制御され、選択されたデータMEMR7が信号r7sel out として、バラフライ演算器23C−6の入力端子DBに供給される。
バタフライ演算器23C−0では、制御端子CTLに供給される制御信号BTFMD0により、OA=DA+DB,OB=DA−DBが計算されるモードに設定される。
これにより、バタフライ演算器23C−0においては、入力端子DAに供給されたデータMEMR0と入力端子DBに供給されたデータMEMR1とが加算され、その結果である(MEMR0+MEMR1)が出力端子OAから信号btf0a out として、入力選択装置22C−8および22C−15に出力される。
また、バタフライ演算器23C−0においては、入力端子DAに供給されたデータMEMR0と入力端子DBに供給されたデータMEMR1との差がとられ、その結果である(MEMR0−MEMR1)が出力端子OBから信号btf0b out として、入力選択装置22C−9および22C−10に出力される。
同様に、バタフライ演算器23C−6では、制御端子CTLに供給される制御信号BTFMD6により、OA=DA+DB,OB=DA−DBが計算されるモードに設定される。
これにより、バタフライ演算器23C−6においては、入力端子DAに供給されたデータMEMR6と入力端子DBに供給されたデータMEMR7とが加算され、その結果である(MEMR6+MEMR7)が出力端子OAから信号btf6a out として、入力選択装置22C−14および22C−13に出力される。
また、バタフライ演算器23C−6においては、入力端子DAに供給されたデータMEMR6と入力端子DBに供給されたデータMEMR7との差がとられ、その結果である(MEMR6−MEMR7)が出力端子OBから信号btf6b out として、入力選択装置22C−15および22C−8に出力される。
そして、入力選択装置22C−8では、制御信号B0SELにより、バタフライ演算器23C−6の出力信号btf6b out (=MEMR6−MEMR7)を選択するように制御され、選択されたデータ(MEMR6−MEMR7)が信号b0sel out として、バラフライ演算器23C−1の入力端子DAに供給される。
入力選択装置22C−9では、制御信号B1SELにより、バタフライ演算器23C−0の出力信号btf0b out (=MEMR0−MEMR1)を選択するように制御され、選択されたデータ(MEMR0−MEMR1)が信号b1sel out として、バラフライ演算器23C−1の入力端子DBに供給される。
また、入力選択装置22C−14では、制御信号B6SELにより、バタフライ演算器23C−6の出力信号btf6a out (=MEMR6+MEMR7)を選択するように制御され、選択されたデータ(MEMR6+MEMR7)が信号b6sel out として、バラフライ演算器23C−7の入力端子DAに供給される。
入力選択装置22C−15では、制御信号B7SELにより、バタフライ演算器23C−0の出力信号btf0a out (=MEMR0+MEMR1)を選択するように制御され、選択されたデータ(MEMR0+MEMR1)が信号b7sel out として、バラフライ演算器23C−7の入力端子DBに供給される。
バタフライ演算器23C−1では、制御端子CTLに供給される制御信号BTFMD1により、OA=DA+DB,OB=DA−DBが計算されるモードに設定される。
これにより、バタフライ演算器23C−1においては、入力端子DAに供給されたデータ(MEMR6−MEMR7)と入力端子DBに供給されたデータ(MEMR0−MEMR1)とが加算され、その結果である(MEMR6−MEMR7+MEMR0−MEMR1)が出力端子OAから信号btf1a out として、出力選択装置24C−0および25C−0に出力される。
また、バタフライ演算器23C−1においては、入力端子DAに供給されたデータ(MEMR6−MEMR7)と入力端子DBに供給されたデータ(MEMR0−MEMR1)との差がとられ、その結果である(MEMR6−MEMR7−MEMR0+MEMR1)が出力端子OBから信号btf1b out として、出力選択装置24C−1および25C−1に出力される。
同様に、バタフライ演算器23C−7では、制御端子CTLに供給される制御信号BTFMD7により、OA=DA+DB,OB=DA−DBが計算されるモードに設定される。
これにより、バタフライ演算器23C−7においては、入力端子DAに供給されたデータ(MEMR6+MEMR7)と入力端子DBに供給されたデータ(MEMR0+MEMR1)とが加算され、その結果である(MEMR6+MEMR7+MEMR0+MEMR1)が出力端子OAから信号btf7a out として、出力選択装置24C−6および25C−6に出力される。
また、バタフライ演算器23C−7においては、入力端子DAに供給されたデータ(MEMR6+MEMR7)と入力端子DBに供給されたデータ(MEMR0+MEMR1)との差がとられ、その結果である(MEMR6+MEMR7−MEMR0−MEMR1)が出力端子OBから信号btf7b out として、出力選択装置24C−7および25C−7に出力される。
出力選択装置24C−0においては、データ入力MEMR0とバタフライ演算器23C−1の出力信号btf1a out (=MEMR6−MEMR7+MEMR0−MEMR1)のうち、バタフライ演算器23C−1の出力信号btf1a out を選択するように制御信号D0SELが供給され、これにより選択されたデータが信号D0=MEMR6−MEMR7+MEMR0−MEMR1として出力される。
出力選択装置24C−1においては、データ入力MEMR1とバタフライ演算器23C−1の出力信号btf1b out (=MEMR6−MEMR7−MEMR0+MEMR1)のうち、データ入力MEMR1を選択するように制御信号D1SELが供給され、これにより選択されたデータが信号D1=MEMR1として出力される。
出力選択装置24C−6においては、データ入力MEMR6とバタフライ演算器23C−7の出力信号btf7a out (=MEMR6+MEMR7+MEMR0+MEMR1)のうち、データ入力MEMR6を選択するように制御信号D6SELが供給され、これにより選択されたデータが信号D6=MEMR6として出力される。
出力選択装置24C−7においては、データ入力MEMR7とバタフライ演算器23C−7の出力信号btf7b out (=MEMR6+MEMR7−MEMR0−MEMR1)のうち、バタフライ演算器23C−7の出力信号btf7b out を選択するように制御信号D7SELが供給され、これにより選択されたデータが信号D7=MEMR6+MEMR7−MEMR0−MEMR1として出力される。
また、出力選択装置25C−0では、データ入力I0とバタフライ演算器23C−1の出力信号btf1a out (=MEMR6−MEMR7+MEMR0−MEMR1)のうち、入力データI0を選択するように制御信号W0SELが供給され、これにより選択されたデータが信号MEMW0=I0として出力される。
出力選択装置25C−1においては、データ入力I1とバタフライ演算器23C−1の出力信号btf1b out (=MEMR6−MEMR7−MEMR0+MEMR1)のうち、バタフライ演算器23C−1の出力信号btf1b outを選択するように制御信号W1SELが供給され、これにより選択されたデータが信号MEMW1=MEMR6−MEMR7−MEMR0+MEMR1として出力される。
出力選択装置25C−6においては、データ入力I6とバタフライ演算器23C−7の出力信号btf7a out (=MEMR6+MEMR7+MEMR0+MEMR1)のうち、バタフライ演算器23C−7の出力信号btf7a outを選択するように制御信号W6SELが供給され、これにより選択されたデータが信号MEMW6=MEMR0+MEMR1+MEMR6+MEMR7として出力される。
また、出力選択装置25C−7では、データ入力I7とバタフライ演算器23C−7の出力信号btf7b out (=MEMR6+MEMR7−MEMR0−MEMR1)のうち、入力データI7を選択するように制御信号W7SELが供給され、これにより選択されたデータが信号MEMW7=I7として出力される。
以上のように、本第6の実施形態に係る16入力16出力の演算装置20Cによれば、上述した第3の実施形態の効果と同様の効果を得ることができる。
なお、本第6の実施形態においては、データ入力MEMR0〜MEMR7の入力段に単項演算器、たとえばシフト演算器を、上述した第3〜第5の実施形態と同様に、配置することが可能である。
この場合、単項演算器SFT0,SFT1,SFT2,SFT3,SFT4,SFT5,SFT6,SFT7は、それぞれたとえば制御信号SFT0MD,SFT1MD,SFT2MD,SFT3MD,SFT4MD,SFT5MD,SFT6MD,SFT7MDを入力とし、MEMR0,MEMR1,MEMR2,MEMR3,MEMR4,MEMR5,MEMR6,MEMR7の値を、制御信号SFT0MD,SFT1MD,SFT2MD,SFT3MD,SFT4MD,SFT5MD,SFT6MD,SFT7MDの値に応じて単項演算を行い、その結果を入力選択装置22C−0〜22C−7(RSEL0〜RSEL7)、出力選択装置24C−0〜24C−7(DSEL0〜DSEL7)に出力するように構成される。
ただし、ここで単項演算器は、左または右に任意ビットシフトする演算で実現される演算器である。
第7実施形態
図9は、本発明に係る演算装置の第7の実施形態を示す構成図である。
図9の演算装置20Dは、構成情報に基づいて再構成可能な演算装置であって、16入力16出力の演算を行い、バタフライ演算を実行可能に構成されている。
本演算装置20Dは、入力選択装置(RSEL0)22D−0、入力選択装置(RSEL1)22D−1、入力選択装置(RSEL2)22D−2、入力選択装置(RSEL3)22D−3、入力選択装置(RSEL4)22D−4、入力選択装置(RSEL5)22D−5、入力選択装置(RSEL6)22D−6、入力選択装置(RSEL7)22D−7、バタフライ演算器(BTF0)23D−0、バタフライ演算器(BTF1)23D−1、バタフライ演算器(BTF2)23D−2、バタフライ演算器(BTF3)23D−3、バタフライ演算器(BTF4)23D−4、バタフライ演算器(BTF5)23D−5、バタフライ演算器(BTF6)23D−6、出力選択装置(DSEL0)24D−0、出力選択装置(DSEL1)24D−1、出力選択装置(DSEL2)24D−2、出力選択装置(DSEL3)24D−3、出力選択装置(DSEL4)24D−4、出力選択装置(DSEL5)24D−5、出力選択装置(DSEL6)24D−6、出力選択装置(DSEL7)24D−7、出力選択装置(WSEL0)25D−0、出力選択装置(WSEL1)25D−1、出力選択装置(WSEL2)25D−2、出力選択装置(WSEL3)25D−3、出力選択装置(WSEL4)25D−4、出力選択装置(WSEL5)25D−5、出力選択装置(WSEL6)25D−6、および出力選択装置(WSEL7)25D−7を有している。
そして、演算装置20Dは、データ入力MEMR0,MEMR1,MEMR2,MEMR3,MEMR4,MEMR5,MEMR6,MEMR7,I0,I1,I2,I3,I4,I5,I6,I7、およびデータ出力MEMW0,MEMW1,MEMW2,MEMW3,MEMW4,MEMW5,MEMW6,MEMW7,D0,D1,D2,D3,D4,D5,D6,D7を有し、また、再構成のための制御信号BTFMD0,BTFMD1,BTFMD2,BTFMD3,BTFMD4,BTFMD5,BTFMD6、R0SEL,R1SEL,R2SEL,R3SEL,R4SEL,R5SEL,R6SEL,R7SEL、W0SEL,W1SEL,W2SEL,W3SEL,W4SEL,W5SEL,W6SEL,W7SEL、D0SEL,D1SEL,D2SEL,D3SEL,D4SEL,D5SEL,D6SEL,D7SELが供給される。
入力選択装置22D−0は、制御信号R0SELに応じて、データ入力MEMR0およびデータ入力I0のいずれかを選択し、信号r0sel out としてバタフライ演算器23D−0に出力する。
入力選択装置22D−1は、制御信号R1SELに応じて、データ入力MEMR1およびデータ入力I1のいずれかを選択し、信号r1sel out としてバタフライ演算器23D−0に出力する。
入力選択装置22D−2は、制御信号R2SELに応じて、データ入力MEMR2およびデータ入力I2のいずれかを選択し、信号r2sel out としてバタフライ演算器23D−1に出力する。
入力選択装置22D−3は、制御信号R3SELに応じて、データ入力MEMR3およびデータ入力I3のいずれかを選択し、信号r3sel out としてバタフライ演算器23D−1に出力する。
入力選択装置22D−4は、制御信号R4SELに応じて、データ入力MEMR4およびデータ入力I4のいずれかを選択し、信号r4sel out としてバタフライ演算器23D−2に出力する。
入力選択装置22D−5は、制御信号R5SELに応じて、データ入力MEMR5およびデータ入力I5のいずれかを選択し、信号r5sel out としてバタフライ演算器23D−2に出力する。
入力選択装置22D−6は、制御信号R6SELに応じて、データ入力MEMR6およびデータ入力I6のいずれかを選択し、信号r6sel out としてバタフライ演算器23D−3に出力する。
入力選択装置22D−7は、制御信号R7SELに応じて、データ入力MEMR7およびデータ入力I7のいずれかを選択し、信号r7sel out としてバタフライ演算器23D−3に出力する。
バタフライ演算器23D−0は、入力端子DAに入力選択装置22D−0の出力信号r0sel out を入力し、入力端子DBに入力選択装置22D−1の出力信号r1sel out を入力し、制御端子CTLに供給される制御信号BTFMD0の指示に応じた演算を行って2つの演算結果を得、一方の演算結果を出力端子OAから信号btf0a out としてバタフライ演算器23D−4、出力選択装置24D−0、および25D−0に出力し、他方の演算結果を出力端子OBから信号btf0b out として出力選択装置24D−1および25D−1に出力する。
バタフライ演算器23D−1は、入力端子DAに入力選択装置22D−2の出力信号r2sel out を入力し、入力端子DBに入力選択装置22D−3の出力信号r3sel out を入力し、制御端子CTLに供給される制御信号BTFMD1の指示に応じた演算を行って2つの演算結果を得、一方の演算結果を出力端子OAから信号btf1a out としてバタフライ演算器23D−4、出力選択装置24D−2、および25D−2に出力し、他方の演算結果を出力端子OBから信号btf1b out として出力選択装置24D−3および25D−3に出力する。
バタフライ演算器23D−2は、入力端子DAに入力選択装置22D−4の出力信号r4sel out を入力し、入力端子DBに入力選択装置22D−5の出力信号r5sel out を入力し、制御端子CTLに供給される制御信号BTFMD2の指示に応じた演算を行って2つの演算結果を得、一方の演算結果を出力端子OAから信号btf2a out としてバタフライ演算器23D−5、出力選択装置24D−4、および25D−4に出力し、他方の演算結果を出力端子OBから信号btf2b out として出力選択装置24D−5および25D−5に出力する。
バタフライ演算器23D−3は、入力端子DAに入力選択装置22D−6の出力信号r6sel out を入力し、入力端子DBに入力選択装置22D−7の出力信号r7sel out を入力し、制御端子CTLに供給される制御信号BTFMD3の指示に応じた演算を行って2つの演算結果を得、一方の演算結果を出力端子OAから信号btf3a out としてバタフライ演算器23D−5、出力選択装置24D−6、および25D−6に出力し、他方の演算結果を出力端子OBから信号btf3b out として出力選択装置24D−7および25D−7に出力する。
バタフライ演算器23D−4は、入力端子DAにバタフライ演算器23D−0の出力信号btf0a out を入力し、入力端子DBにバタフライ演算器23D−1の出力信号btf1a out を入力し、制御端子CTLに供給される制御信号BTFMD4の指示に応じた演算を行って2つの演算結果を得、一方の演算結果を出力端子OAから信号btf4a out としてバタフライ演算器23D−6、出力選択装置25D−0および25D−2に出力し、他方の演算結果を出力端子OBから信号btf4b out として出力選択装置25D−1および25D−3に出力する。
バタフライ演算器23D−5は、入力端子DAにバタフライ演算器23D−2の出力信号btf2a out を入力し、入力端子DBにバタフライ演算器23D−3の出力信号btf3a out を入力し、制御端子CTLに供給される制御信号BTFMD5の指示に応じた演算を行って2つの演算結果を得、一方の演算結果を出力端子OAから信号btf5a out としてバタフライ演算器23D−6、出力選択装置25D−4および25D−6に出力し、他方の演算結果を出力端子OBから信号btf5b out として出力選択装置25D−5および25D−7に出力する。
バタフライ演算器23D−6は、入力端子DAにバタフライ演算器23D−4の出力信号btf4a out を入力し、入力端子DBにバタフライ演算器23D−5の出力信号btf5a out を入力し、制御端子CTLに供給される制御信号BTFMD6の指示に応じた演算を行って2つの演算結果を得、一方の演算結果を出力端子OAから信号btf6a out として出力選択装置25D−0、25D−2、25D−4、および25D−6に出力し、他方の演算結果を出力端子OBから信号btf6b out として出力選択装置25D−1、25D−3、25D−5、および25D−7に出力する。
具体的には、バタフライ演算器23D−l(l=0,1,2,3)は、制御信号BTFMDlの値により、以下のいずれかの演算を選択的に行う。
(数11)
btf[l]a out =r[l+1] sel out ,btf[l]b out =r[l] sel out
btf[l]a out =r[l+1] sel out ,btf[l]b out =-r[l]sel out
btf[l]a out =-r[l+1]sel out ,btf[l]b out =r[l] sel out
btf[l]a out =-r[l+1]sel out ,btf[l]b out =-r[l]sel out
btf[l]a out =r[l] sel out ,btf[l]b out =r[l+1] sel out
btf[l]a out =r[l] sel out ,btf[l]b out =-r[l+1]sel out
btf[l]a out =-r[l]sel out ,btf[l]b out =r[l+1] sel out
btf[l]a out =-r[l]sel out ,btf[l]b out =-r[l+1]sel out
btf[l]a out =r[l] sel out +r[l+1] sel out ,btf[l]b out
=r[l] sel out −r[l+1] sel out
btf[l]a out =r[l] sel out +r[l+1] sel out ,btf[l]b out
=r[l+1] sel out −r[l] sel out
btf[l]a out =r[l] sel out −r[l+1] sel out ,btf[l]b out
=r[l] sel out +r[l+1] sel out
btf[l]a out =r[l+1] sel out −r[l] sel out ,btf[l]b out
=r[l] sel out +r[l+1] sel out
また、バタフライ演算器23D−4は、制御信号BTFMD4の値により、以下のいずれかの演算を選択的に行う。
(数112)
btf4a out = btf0a out ,btf4b out = btf1a out
btf4a out = btf0a out ,btf4b out =-btf1a out
btf4a out =-btf0a out ,btf4b out = btf1a out
btf4a out =-btf0a out ,btf4b out =-btf1a out
btf4a out = btf0a out ,btf4b out = btf1a out
btf4a out = btf0a out ,btf4b out =-btf1a out
btf4a out =-btf0a out ,btf4b out = btf1a out
btf4a out =-btf0a out ,btf4b out =-btf1a out
btf4a out = btf1a out + btf0a out ,btf4b out
= btf1a out − btf0a out
btf4a out = btf1a out + btf0a out ,btf4b out
= btf0a out − btf1a out
btf4a out = btf1a out − btf0a out ,btf4b out
= btf1a out + btf0a out
btf4a out = btf0a out − btf1a out ,btf4b out
= btf1a out + btf0a out
また、バタフライ演算器23D−5は、制御信号BTFMD5の値により、以下のいずれかの演算を選択的に行う。
(数13)
btf5a out = btf2a out ,btf5b out = btf3a out
btf5a out = btf2a out ,btf5b out =-btf3a out
btf5a out =-btf2a out ,btf5b out = btf3a out
btf5a out =-btf2a out ,btf5b out =-btf3a out
btf5a out = btf2a out ,btf5b out = btf3a out
btf5a out = btf2a out ,btf5b out =-btf3a out
btf5a out =-btf2a out ,btf5b out = btf3a out
btf5a out =-btf2a out ,btf5b out =-btf3a out
btf5a out = btf3a out + btf2a out ,btf5b out
= btf3a out − btf2a out
btf5a out = btf3a out + btf2a out ,btf5b out
= btf2a out − btf3a out
btf5a out = btf3a out − btf2a out ,btf5b out
= btf3a out + btf2a out
btf5a out = btf2a out − btf3a out ,btf5b out
= btf3a out + btf2a out
出力選択装置24D−0は、制御信号D0SELに応じて、データ入力MEMR0とバタフライ演算器23D−0の出力信号btf0a out のいずれかを選択し、信号D0として出力する。
出力選択装置24D−1は、制御信号D1SELに応じて、データ入力MEMR1とバタフライ演算器23D−0の出力信号btf0b out のいずれかを選択し、信号D1として出力する。
出力選択装置24D−2は、制御信号D2SELに応じて、データ入力MEMR2とバタフライ演算器23D−1の出力信号btf1a out のいずれかを選択し、信号D2として出力する。
出力選択装置24D−3は、制御信号D3SELに応じて、データ入力MEMR3とバタフライ演算器23D−1の出力信号btf1b out のいずれかを選択し、信号D3として出力する。
出力選択装置24D−4は、制御信号D4SELに応じて、データ入力MEMR4とバタフライ演算器23D−2の出力信号btf2a out のいずれかを選択し、信号D4として出力する。
出力選択装置24D−5は、制御信号D5SELに応じて、データ入力MEMR5とバタフライ演算器23D−2の出力信号btf2b out のいずれかを選択し、信号D5として出力する。
出力選択装置24D−6は、制御信号D6SELに応じて、データ入力MEMR6とバタフライ演算器23D−3の出力信号btf3a out のいずれかを選択し、信号D6として出力する。
出力選択装置24D−7は、制御信号D7SELに応じて、データ入力MEMR7とバタフライ演算器23D−3の出力信号btf3b out のいずれかを選択し、信号D7として出力する。
出力選択装置25D−0は、制御信号W0SELに応じて、データ入力I0とバタフライ演算器23D−0の出力信号btf0a out とバタフライ演算器23D−4の出力信号btf4a out とバタフライ演算器23D−6の出力信号btf6a out のいずれかを選択し、信号MEMW0として出力する。
出力選択装置25D−1は、制御信号W1SELに応じて、データ入力I1とバタフライ演算器23D−0の出力信号btf0b out とバタフライ演算器23D−4の出力信号btf4b out とバタフライ演算器23D−6の出力信号btf6b out のいずれかを選択し、信号MEMW1として出力する。
出力選択装置25D−2は、制御信号W2SELに応じて、データ入力I2とバタフライ演算器23D−1の出力信号btf1a out とバタフライ演算器23D−4の出力信号btf4a out とバタフライ演算器23D−6の出力信号btf6a out のいずれかを選択し、信号MEMW2として出力する。
出力選択装置25D−3は、制御信号W3SELに応じて、データ入力I3とバタフライ演算器23D−1の出力信号btf1b out とバタフライ演算器23D−4の出力信号btf4b out とバタフライ演算器23D−6の出力信号btf6b out のいずれかを選択し、信号MEMW3として出力する。
出力選択装置25D−4は、制御信号W4SELに応じて、データ入力I4とバタフライ演算器23D−2の出力信号btf2a out とバタフライ演算器23D−5の出力信号btf5a out とバタフライ演算器23D−6の出力信号btf6a out のいずれかを選択し、信号MEMW4として出力する。
出力選択装置25D−5は、制御信号W5SELに応じて、データ入力I5とバタフライ演算器23D−2の出力信号btf2b out とバタフライ演算器23D−5の出力信号btf5b out とバタフライ演算器23D−6の出力信号btf6b out のいずれかを選択し、信号MEMW5として出力する。
出力選択装置25D−6は、制御信号W6SELに応じて、データ入力I6とバタフライ演算器23D−3の出力信号btf3a out とバタフライ演算器23D−5の出力信号btf5a out とバタフライ演算器23D−6の出力信号btf6a out のいずれかを選択し、信号MEMW6として出力する。
出力選択装置25D−7は、制御信号W7SELに応じて、データ入力I7とバタフライ演算器23D−3の出力信号btf3b out とバタフライ演算器23D−5の出力信号btf5b out とバタフライ演算器23D−6の出力信号btf6b out のいずれかを選択し、信号MEMW7として出力する。
次に、上記構成による動作を説明する。
なおここでは、たとえば以下のように全ての出力D0〜D7,MEMW0〜MEMW7を得る場合を例に、装置全体の動作を説明する。
D0=MEMR0+MEMR1,
D1=MEMR1,
D2=MEMR2,
D3=MEMR2−MEMR3,
D4=MEMR4+MEMR5,
D5=MEMR5,
D6=MEMR6+MEMR7,
D7=MEMR6−MEMR7,
MEMW0=I0
MEMW1=MEMR0+MEMR1−MEMR2−MEMR3,
MEMW2=MEMR0+MEMR1+MEMR2+MEMR3,
MEMW3=I3
MEMW4=MEMR0+MEMR1+MEMR2+MEMR3+MEMR4+MEMR5+MEMR6+MEMR7,
MEMW5=MEMR4+MEMR5−MEMR6−MEMR7,
MEMW6=I6
MEMW7=MEMR0+MEMR1+MEMR2+MEMR3−MEMR4−MEMR5−MEMR6−MEMR7
この場合、入力選択装置22D−0では、制御信号R0SELにより、データ入力MEMR0を選択するように制御され、選択されたデータMEMR0が信号r0sel out として、バタフライ演算器23D−0の入力端子DAに供給される。
入力選択装置22D−1では、制御信号R1SELにより、MEMR1を選択するように制御され、選択されたデータMEMR1が信号r1sel out として、バタフライ演算器23D−0の入力端子DBに供給される。
また、入力選択装置22D−2では、制御信号R2SELにより、MEMR2を選択するように制御され、選択されたデータMEMR2が信号r2sel out として、バタフライ演算器23D−1の入力端子DAに供給される。
入力選択装置22D−3では、制御信号R3SELにより、MEMR3を選択するように制御され、選択されたデータMEMR3が信号r3sel out として、バタフライ演算器23D−1の入力端子DBに供給される。
また、入力選択装置22D−4では、制御信号R4SELにより、MEMR4を選択するように制御され、選択されたデータMEMR4が信号r4sel out として、バタフライ演算器23D−2の入力端子DAに供給される。
入力選択装置22D−5では、制御信号R5SELにより、MEMR5を選択するように制御され、選択されたデータMEMR5が信号r5sel out として、バタフライ演算器23D−2の入力端子DBに供給される。
また、入力選択装置22D−6では、制御信号R6SELにより、MEMR6を選択するように制御され、選択されたデータMEMR6が信号r6sel out として、バタフライ演算器23D−3の入力端子DAに供給される。
入力選択装置22D−7では、制御信号R7SELにより、MEMR7を選択するように制御され、選択されたデータMEMR7が信号r7sel out として、バタフライ演算器23D−3の入力端子DBに供給される。
バタフライ演算器23D−0では、制御端子CTLに供給される制御信号BTFMD0により、OA=DA+DB,OB=DA−DBが計算されるモードに設定される。
これにより、バタフライ演算器23D−0においては、入力端子DAに供給されたデータMEMR0と入力端子DBに供給されたデータMEMR1とが加算され、その結果である(MEMR0+MEMR1)が出力端子OAから信号btf0a out として、バタフライ演算器23D−4の入力端子DA、出力選択装置24D−0および25D−0に出力される。
また、バタフライ演算器23D−0においては、入力端子DAに供給されたデータMEMR0と入力端子DBに供給されたデータMEMR1との差がとられ、その結果である(MEMR0−MEMR1)が出力端子OBから信号btf0b out として、出力選択装置24D−1および25D−1に出力される。
バタフライ演算器23D−1では、制御端子CTLに供給される制御信号BTFMD1により、OA=DA+DB,OB=DA−DBが計算されるモードに設定される。
これにより、バタフライ演算器23D−1においては、入力端子DAに供給されたデータMEMR2と入力端子DBに供給されたデータMEMR3とが加算され、その結果である(MEMR2+MEMR3)が出力端子OAから信号btf1a out として、バタフライ演算器23D−4の入力端子DB、出力選択装置24D−2および25D−2に出力される。
また、バタフライ演算器23D−1においては、入力端子DAに供給されたデータMEMR2と入力端子DBに供給されたデータMEMR3との差がとられ、その結果である(MEMR2−MEMR3)が出力端子OBから信号btf1b out として、出力選択装置24D−3および25D−3に出力される。
バタフライ演算器23D−2では、制御端子CTLに供給される制御信号BTFMD2により、OA=DA+DB,OB=DA−DBが計算されるモードに設定される。
これにより、バタフライ演算器23D−2においては、入力端子DAに供給されたデータMEMR4と入力端子DBに供給されたデータMEMR5とが加算され、その結果である(MEMR4+MEMR5)が出力端子OAから信号btf2a out として、バタフライ演算器23D−5の入力端子DA、出力選択装置24D−4および25D−4に出力される。
また、バタフライ演算器23D−2においては、入力端子DAに供給されたデータMEMR4と入力端子DBに供給されたデータMEMR5との差がとられ、その結果である(MEMR4−MEMR5)が出力端子OBから信号btf2b out として、出力選択装置24D−5および25D−5に出力される。
バタフライ演算器23D−3では、制御端子CTLに供給される制御信号BTFMD3により、OA=DA+DB,OB=DA−DBが計算されるモードに設定される。
これにより、バタフライ演算器23D−3においては、入力端子DAに供給されたデータMEMR6と入力端子DBに供給されたデータMEMR7とが加算され、その結果である(MEMR6+MEMR7)が出力端子OAから信号btf3a out として、バタフライ演算器23D−5の入力端子DB、出力選択装置24D−6および25D−6に出力される。
また、バタフライ演算器23D−3においては、入力端子DAに供給されたデータMEMR6と入力端子DBに供給されたデータMEMR6との差がとられ、その結果である(MEMR6−MEMR7)が出力端子OBから信号btf3b out として、出力選択装置24D−7および25D−7に出力される。
バタフライ演算器23D−4では、制御端子CTLに供給される制御信号BTFMD4により、OA=DA+DB,OB=DA−DBが計算されるモードに設定される。
これにより、バタフライ演算器23D−4においては、入力端子DAに供給されたデータ(MEMR0+MEMR1)と入力端子DBに供給されたデータ(MEMR2+MEMR3)とが加算され、その結果である(MEMR0+MEMR1+MEMR2+MEMR3)が出力端子OAから信号btf4a out として、バタフライ演算器23D−6の入力端子DA、出力選択装置25D−0および25D−2に出力される。
また、バタフライ演算器23D−4においては、入力端子DAに供給されたデータ(MEMR0+MEMR1)と入力端子DBに供給されたデータ(MEMR2+MEMR3)との差がとられ、その結果である(MEMR0+MEMR1−MEMR2−MEMR3)が出力端子OBから信号btf4b out として、出力選択装置25D−1および25D−3に出力される。
バタフライ演算器23D−5では、制御端子CTLに供給される制御信号BTFMD5により、OA=DA+DB,OB=DA−DBが計算されるモードに設定される。
これにより、バタフライ演算器23D−5においては、入力端子DAに供給されたデータ(MEMR4+MEMR5)と入力端子DBに供給されたデータ(MEMR6+MEMR7)とが加算され、その結果である(MEMR4+MEMR5+MEMR6+MEMR7)が出力端子OAから信号btf5a out として、バタフライ演算器23D−6の入力端子DB、出力選択装置25D−4および25D−6に出力される。
また、バタフライ演算器23D−5においては、入力端子DAに供給されたデータ(MEMR4+MEMR5)と入力端子DBに供給されたデータ(MEMR6+MEMR7)との差がとられ、その結果である(MEMR4+MEMR5−MEMR6−MEMR7)が出力端子OBから信号btf5b out として、出力選択装置25D−5および25D−7に出力される。
そして、バタフライ演算器23D−6では、制御端子CTLに供給される制御信号BTFMD6により、OA=DA+DB,OB=DA−DBが計算されるモードに設定される。
これにより、バタフライ演算器23D−6においては、入力端子DAに供給されたデータ(MEMR0+MEMR1+MEMR2+MEMR3)と入力端子DBに供給されたデータ(MEMR4+MEMR5+MEMR6+MEMR7)とが加算され、その結果である(MEMR0+MEMR1+MEMR2+MEMR3+MEMR4+MEMR5+MEMR6+MEMR7)が出力端子OAから信号btf6a out として、出力選択装置25D−0、25D−2、25D−4および25D−6に出力される。
また、バタフライ演算器23D−6においては、入力端子DAに供給されたデータ(MEMR0+MEMR1+MEMR2+MEMR3)と入力端子DBに供給されたデータ(MEMR4+MEMR5+MEMR6+MEMR7)との差がとられ、その結果である(MEMR0+MEMR1+MEMR2+MEMR3−MEMR4−MEMR5−MEMR6−MEMR7)が出力端子OBから信号btf6b out として、出力選択装置25D−1、25D−3、25D−5および25D−7に出力される。
出力選択装置24D−0においては、データ入力MEMR0とバタフライ演算器23D−0の出力信号btf0a out (=MEMR0+MEMR1)のうち、バタフライ演算器23D−0の出力信号btf0a out を選択するように制御信号D0SELが供給され、これにより選択されたデータが信号D0=MEMR0+MEMR1として出力される。
出力選択装置24D−1においては、データ入力MEMR1とバタフライ演算器23D−0の出力信号btf0b out (=MEMR0−MEMR1)のうち、データ入力MEMR1を選択するように制御信号D1SELが供給され、これにより選択されたデータが信号D1=MEMR1として出力される。
出力選択装置24D−2においては、データ入力MEMR2とバタフライ演算器23D−1の出力信号btf1a out (=MEMR2+MEMR3)のうち、データ入力MEMR2を選択するように制御信号D2SELが供給され、これにより選択されたデータが信号D2=MEMR2として出力される。
出力選択装置24D−3においては、データ入力MEMR3とバタフライ演算器23D−1の出力信号btf1b out (=MEMR2−MEMR3)のうち、バタフライ演算器23D−1の出力信号btf1b out を選択するように制御信号D3SELが供給され、これにより選択されたデータが信号D3=MEMR2−MEMR3として出力される。
出力選択装置24D−4においては、データ入力MEMR4とバタフライ演算器23D−2の出力信号btf2a out (=MEMR4+MEMR5)のうち、バタフライ演算器23D−2の出力信号btf2a out を選択するように制御信号D4SELが供給され、これにより選択されたデータが信号D4=MEMR4+MEMR5として出力される。
出力選択装置24D−5においては、データ入力MEMR5とバタフライ演算器23D−2の出力信号btf2b out (=MEMR4−MEMR5)のうち、データ入力MEMR5を選択するように制御信号D5SELが供給され、これにより選択されたデータが信号D5=MEMR5として出力される。
出力選択装置24D−6においては、データ入力MEMR6とバタフライ演算器23D−3の出力信号btf3a out (=MEMR6+MEMR7)のうち、バタフライ演算器23D−3の出力信号btf3a out を選択するように制御信号D6SELが供給され、これにより選択されたデータが信号D6=MEMR6+MEMR7として出力される。
出力選択装置24D−7においては、データ入力MEMR7とバタフライ演算器23D−3の出力信号btf3b out (=MEMR6−MEMR7)のうち、バタフライ演算器23D−3の出力信号btf3b out を選択するように制御信号D7SELが供給され、これにより選択されたデータが信号D7=MEMR6−MEMR7として出力される。
また、出力選択装置25D−0では、データ入力I0とバタフライ演算器23D−0の出力信号btf0a out (=MEMR0+MEMR1)とバタフライ演算器23D−4の出力信号btf4a out (=MEMR0+MEMR1+MEMR2+MEMR3)とバタフライ演算器23D−6の出力信号btf6a out (=MEMR0+MEMR1+MEMR2+MEMR3+MEMR4+MEMR5+MEMR6+MEMR7)のうち、入力データI0を選択するように制御信号W0SELが供給され、これにより選択されたデータが信号MEMW0=I0として出力される。
また、出力選択装置25D−1では、データ入力I1とバタフライ演算器23D−0の出力信号btf0b out (=MEMR0−MEMR1)とバタフライ演算器23D−4の出力信号btf4b out (=MEMR0+MEMR1−MEMR2−MEMR3)とバタフライ演算器23D−6の出力信号btf6b out (=MEMR0+MEMR1+MEMR2+MEMR3−MEMR4−MEMR5−MEMR6−MEMR7)のうち、バタフライ演算器23D−4の出力信号btf4b out を選択するように制御信号W1SELが供給され、これにより選択されたデータが信号MEMW1=MEMR0+MEMR1−MEMR2−MEMR3として出力される。
また、出力選択装置25D−2では、データ入力I2とバタフライ演算器23D−1の出力信号btf1a out (=MEMR2+MEMR3)とバタフライ演算器23D−4の出力信号btf4a out (=MEMR0+MEMR1+MEMR2+MEMR3)とバタフライ演算器23D−6の出力信号btf6a out (=MEMR0+MEMR1+MEMR2+MEMR3+MEMR4+MEMR5+MEMR6+MEMR7)のうち、バタフライ演算器23D−4の出力信号btf4a out を選択するように制御信号W2SELが供給され、これにより選択されたデータが信号MEMW2=MEMR0+MEMR1+MEMR2+MEMR3として出力される。
また、出力選択装置25D−3では、データ入力I3とバタフライ演算器23D−1の出力信号btf0b out (=MEMR2−MEMR3)とバタフライ演算器23D−4の出力信号btf4b out (=MEMR0+MEMR1−MEMR2−MEMR3)とバタフライ演算器23D−6の出力信号btf6b out (=MEMR0+MEMR1+MEMR2+MEMR3−MEMR4−MEMR5−MEMR6−MEMR7)のうち、入力データI3を選択するように制御信号W3SELが供給され、これにより選択されたデータが信号MEMW3=I3として出力される。
また、出力選択装置25D−4では、データ入力I4とバタフライ演算器23D−2の出力信号btf2a out (=MEMR4+MEMR5)とバタフライ演算器23D−5の出力信号btf5a out (=MEMR4+MEMR5+MEMR6+MEMR7)とバタフライ演算器23D−6の出力信号btf6a out (=MEMR0+MEMR1+MEMR2+MEMR3+MEMR4+MEMR5+MEMR6+MEMR7)のうち、バタフライ演算器23D−6の出力信号btf6a out を選択するように制御信号W4SELが供給され、これにより選択されたデータが信号MEMW4=MEMR0+MEMR1+MEMR2+MEMR3+MEMR4+MEMR5+MEMR6+MEMR7として出力される。
また、出力選択装置25D−5では、データ入力I5とバタフライ演算器23D−2の出力信号btf2b out (=MEMR4−MEMR5)とバタフライ演算器23D−5の出力信号btf5b out (=MEMR4+MEMR5−MEMR6−MEMR7)とバタフライ演算器23D−6の出力信号btf6b out (=MEMR0+MEMR1+MEMR2+MEMR3−MEMR4−MEMR5−MEMR6−MEMR7)のうち、バタフライ演算器23D−5の出力信号btf5b out を選択するように制御信号W5SELが供給され、これにより選択されたデータが信号MEMW5=MEMR4+MEMR5−MEMR6−MEMR7として出力される。
また、出力選択装置25D−6では、データ入力I6とバタフライ演算器23D−3の出力信号btf3a out (=MEMR6+MEMR7)とバタフライ演算器23D−5の出力信号btf5a out (=MEMR4+MEMR5+MEMR6+MEMR7)とバタフライ演算器23D−6の出力信号btf6a out (=MEMR0+MEMR1+MEMR2+MEMR3+MEMR4+MEMR5+MEMR6+MEMR7)のうち、データ入力I6を選択するように制御信号W6SELが供給され、これにより選択されたデータが信号MEMW6=I6として出力される。
また、出力選択装置25D−7では、データ入力I7とバタフライ演算器23D−3の出力信号btf3b out (=MEMR6−MEMR7)とバタフライ演算器23D−5の出力信号btf5b out (=MEMR4+MEMR5−MEMR6−MEMR7)とバタフライ演算器23D−6の出力信号btf6b out (=MEMR0+MEMR1+MEMR2+MEMR3−MEMR4−MEMR5−MEMR6−MEMR7)のうち、バタフライ演算器23D−6の出力信号btf6b out を選択するように制御信号W7SELが供給され、これにより選択されたデータが信号MEMW7=MEMR0+MEMR1+MEMR2+MEMR3−MEMR4−MEMR5−MEMR6−MEMR7として出力される。
以上のように、本第7の実施形態に係る16入力16出力の演算装置20Dによれば、上述した第3の実施形態の効果と同様の効果を得ることができる。
なお、本第7の実施形態においては、データ入力MEMR0〜MEMR7の入力段に単項演算器、たとえばシフト演算器を、上述した第3〜第5の実施形態と同様に、配置することが可能である。
この場合、単項演算器SFT0,SFT1,SFT2,SFT3,SFT4,SFT5,SFT6,SFT7は、それぞれたとえば制御信号SFT0MD,SFT1MD,SFT2MD,SFT3MD,SFT4MD,SFT5MD,SFT6MD,SFT7MDを入力とし、MEMR0,MEMR1,MEMR2,MEMR3,MEMR4,MEMR5,MEMR6,MEMR7の値を、制御信号SFT0MD,SFT1MD,SFT2MD,SFT3MD,SFT4MD,SFT5MD,SFT6MD,SFT7MDの値に応じて単項演算を行い、その結果を入力選択装置22D−0〜22D−7(RSEL0〜RSEL7)、出力選択装置24D−0〜24D−7(DSEL0〜DSEL7)に出力するように構成される。
ただし、ここで単項演算器は、左または右に任意ビットシフトする演算で実現される演算器である。
第8実施形態
図10は、本発明に係る演算装置の第8の実施形態を示す構成図である。
図10の演算装置30は、上述した第1および第2の実施形態に係るALUおよびMACを含む第1の演算装置と、第3〜第7の実施形態に係るバタフライ演算器を含む第2の演算装置とを再構成可能に結合することで、データ読み出し、演算、データ書き込みの1サイクルで信号処理演算を効率良く実行可能に構成されている。
本第8の実施形態に係る演算装置30は、図10に示すように、ALUおよびMACを含む第1の演算装置(PU)31、およびバタフライ演算器を含む第2の演算装置(BTFL)32を主構成要素として有している。
第1の演算装置31は、たとえば図2の演算装置を4つカスケード接続した図4の演算装置と同様の構成を有しており、データ入力D0I,D1I,D2I,D3I、係数入力COE0,COE1,COE2,COE3、およびデータ出力OT0,OT1,OT2,OT3を有し、再構成のための制御信号CTRL0,CTRL1,CTRL2,CTRL3が供給される。
そして、各制御信号には、演算制御信号ASEL,BSEL,ESEL,MACMD,ALUMD,RNDMD,SATMD,OSFMD,ACCMD、および遅延制御信号C0DL,C1DL,C2DL,C3DL、D0DL,D1DL,D2DL,D3DLが含まれる。
第2の演算装置32は、データ入力MEMR0,MEMR1,MEMR2,MEMR3、演算結果入力I0,I1,I2,I3、データ出力D0,D1,D2,D3、およびMEMW0,MEMW1,MEMW2,MEMW3を有し、再構成のための制御信号CTRLBが供給される。
たとえば第4の実施形態の場合を例にとると、制御信号CTRLBには、SFT0MD,R0SEL,BTFMD0,D0SEL,W0SEL、SFT1MD,R1SEL,BTFMD1,D1SEL,W1SEL、SFT2MD,R2SEL,BTFMD2,D2SEL,W2SEL、およびSFT3MD,R3SEL,BTFMD3,D3SEL,W3SELが含まれる。
そして、第2の演算装置32のデータ入力MEMR0にデータR0が供給され、データ入力MEMR1にデータR1が供給され、データ入力MEMR2にデータR2が供給され、データ入力MEMR3にデータR3が供給される。
第2の演算装置32のデータ出力D0が第1の演算装置31のデータ入力D0Iに供給され、第2の演算装置32のデータ出力D1が第1の演算装置31のデータ入力D1Iに供給され、第2の演算装置32のデータ出力D2が第1の演算装置31のデータ入力D2Iに供給され、第2の演算装置32のデータ出力D3が第1の演算装置31のデータ入力D3Iに供給される。
また、第1の演算装置31のデータ出力OT0が第2の演算装置32のデータ入力I0に供給され、第1の演算装置31のデータ出力OT1が第2の演算装置32のデータ入力I1に供給され、第1の演算装置31のデータ出力OT2が第2の演算装置32のデータ入力I2に供給され、第1の演算装置31のデータ出力OT3が第2の演算装置32のデータ入力I3に供給される。
また、第2の演算装置32のデータ出力MEMW0からデータW0が出力され、データ出力MEMW1からデータW1が出力され、データ出力MEMW2からデータW2が出力され、データ出力MEMW3からデータW3が出力される。
また、第1の演算装置31においては、以下の演算処理を同時(並列)に実行可能に構成されている。
(数14)
OT0=((C0I‖C1I‖C2I‖C3I‖D0I‖D1I‖D2I‖D3I‖OT1‖OT2‖OT3‖0)op0(D0I‖D1I‖D2I‖D3I‖OT0)op1(D0I‖D1I‖D2I‖D3I‖OT1‖OT2‖OT3‖0))、かつ、
OT1=((C0I‖C1I‖C2I‖C3I‖D0I‖D1I‖D2I‖D3I‖OT1‖OT2‖OT3‖0)op2(D0I‖D1I‖D2I‖D3I‖OT0)op3(D0I‖D1I‖D2I‖D3I‖OT2‖OT3‖OT0‖0))、かつ、
OT2=((C0I‖C1I‖C2I‖C3I‖D0I‖D1I‖D2I‖D3I‖OT1‖OT2‖OT3‖0)op4(D0I‖D1I‖D2I‖D3I‖OT0)op5(D0I‖D1I‖D2I‖D3I‖OT3‖OT0‖OT1‖0))、かつ、
OT3=((C0I‖C1I‖C2I‖C3I‖D0I‖D1I‖D2I‖D3I‖OT1‖OT2‖OT3‖0)op6(D0I‖D1I‖D2I‖D3I‖OT0)op7(D0I‖D1I‖D2I‖D3I‖OT0‖OT1‖OT2‖0))
ただし、‖は選択演算を、op0〜op7は演算子を表している。またここで、演算子op0〜op7は、以下のいずれかで定義される。
(数15)
AopB=A*B,
AopB=A*−B,
AopB=A+B,
AopB=A−B,
AopB=A&B,
AopB=A|B,
AopB=A∧B,
また、第2の演算装置32においては、以下の演算処理を同時(並列)に実行可能に構成されている。
(数16)
MEMW0=((MEMR0‖I0)op0(MEMR1‖I1))‖I0、かつ、
MEMW1=((MEMR0‖I0)op1(MEMR1‖I1))‖I1、かつ、
MEMW2=((MEMR2‖I2)op2(MEMR3‖I3))‖I2、かつ、
MEMW3=((MEMR2‖I2)op3(MEMR3‖I3))‖I3、かつ、
D0=((MEMR0‖I0)op4(MEMR1‖I1))‖MEMR0、かつ、
D1=((MEMR0‖I0)op5(MEMR1‖I1))‖MEMR1、かつ、
D2=((MEMR2‖I2)op6(MEMR3‖I3))‖MEMR2、かつ、
D3=((MEMR2‖I2)op7(MEMR3‖I3))‖MEMR3
ここでも、‖は選択演算を、op0〜op7は演算子を表している。またここで、演算子op0〜op7は、以下のいずれかで定義される。
(数17)
AopB=A+B,
AopB=A−B,
AopB=−A+B,
AopB=−A−B,
AopB=A,
AopB=−A,
AopB=B,
AopB=−B,
次に、図10の演算装置の動作を、第1の演算装置31が図4の並列演算装置と同様の構成を有し、第2の演算装置32が図6の装置と同様の構成を有する場合を例に説明する。
なお、ここでは、以下の演算を実行するものとする。
W0=R0+R1,
W1=COE0*(R0−R1)−COE1*(R2−R3),
W2=R2+R3,
W3=COE2*(R0−R1)+COE3*(R2−R3)
まず、第2の演算装置32において、図6に示すように、たとえばシフト演算器21A−0,21A−1,21A−2,21A−3のシフト量が、制御信号SFT0MD,SFT1MD,SFT2MD,SFT3MDによりゼロに設定される。
したがって、シフト演算器21A−0の出力信号sft0 out はMEMR0、すなわちデータR0となり、入力選択装置22A−0および出力選択装置24A−0に供給される。
同様に、シフト演算器21A−1の出力信号sft1 out はMEMR1、すなわちR1となり、入力選択装置22A−1および出力選択装置24A−1に供給される。
シフト演算器21A−2の出力信号sft2 out はMEMR2、すなわちR2となり、入力選択装置22A−2および出力選択装置24A−2に供給される。
そして、シフト演算器21A−3の出力信号sft3 out はMEMR3、すなちR3となり、入力選択装置22A−3および出力選択装置24A−3に供給される。
入力選択装置22A−0では、制御信号R0SELにより、シフト演算器21A−0の出力信号R0を選択するように制御され、選択されたデータR0が信号r0sel out として、バラフライ演算器23A−0の入力端子DAに供給される。
入力選択装置22A−1では、制御信号R1SELにより、シフト演算器21A−1の出力信号R1を選択するように制御され、選択されたデータR1が信号r1sel out として、バラフライ演算器23A−0の入力端子DBに供給される。
また、入力選択装置22A−2では、制御信号R2SELにより、シフト演算器21A−2の出力信号R2を選択するように制御され、選択されたデータR2が信号r2sel out として、バラフライ演算器23A−1の入力端子DAに供給される。
入力選択装置22A−3では、制御信号R3SELにより、シフト演算器21A−3の出力信号R3を選択するように制御され、選択されたデータR3が信号r3sel out として、バラフライ演算器23A−1の入力端子DBに供給される。
バタフライ演算器23A−0では、制御端子CTLに供給される制御信号BTFMD0により、OA=DA+DB,OB=DA−DBが計算されるモードに設定される。
これにより、バタフライ演算器23A−0においては、入力端子DAに供給されたデータR0と入力端子DBに供給されたデータR1とが加算され、その結果である(R0+R1)が出力端子OAから信号btf0a out として、出力選択装置24A−0および25A−0に出力される。
また、バタフライ演算器23A−0においては、入力端子DAに供給されたデータR0と入力端子DBに供給されたデータR1との差がとられ、その結果である(R0−R1)が出力端子OBから信号btf0b out として、出力選択装置24A−1および25A−1に出力される。
同様に、バタフライ演算器23A−1では、制御端子CTLに供給される制御信号BTFMD1により、OA=DA+DB,OB=DA−DBが計算されるモードに設定される。
これにより、バタフライ演算器23A−1においては、入力端子DAに供給されたデータR2と入力端子DBに供給されたデータR3とが加算され、その結果である(R2+R3)が出力端子OAから信号btf1a out として、出力選択装置24A−2および25A−2に出力される。
また、バタフライ演算器23A−1においては、入力端子DAに供給されたデータR2と入力端子DBに供給されたデータR3との差がとられ、その結果である(R2−R3)が出力端子OBから信号btf1b out として、出力選択装置24A−3および25A−3に出力される。
そして、第2の演算装置32では、出力選択装置24A−1において、シフト演算器21A−1の出力信号(R1)とバタフライ演算器23A−0の出力信号btf0b out (=MEMR0−MEMR1)のうち、バタフライ演算器23A−0の出力信号btf0b out を選択するように制御信号D1SELが供給され、これにより選択されたデータが信号D1=R0−R1として、第1の演算装置31のデータ入力D1Iに供給される。
同様に、第2の演算装置32では、出力選択装置24A−3において、シフト演算器21A−3の出力信号(R3)とバタフライ演算器23A−1の出力信号btf1b out (=R2−R3)のうち、バタフライ演算器23A−1の出力信号btf1b out を選択するように制御信号D3SELが供給され、これにより選択されたデータが信号D3=R2−R3として、第1の演算装置31のデータ入力D3Iに供給される。
第1の演算装置31では、まず、演算装置10A−0において、制御信号CTL0により、演算結果信号OT0=COE0*D1となる演算が行われるように制御が行われる。
この場合、演算装置10A−0において、制御信号ASELが係数入力COE0を選択するように設定されて第1の選択装置11に供給される。
また、制御信号BSELがデータ入力D1I(=D1=R0−R1)を選択するように設定されて第2の選択装置12に供給される。
これにより、第1の選択装置11から係数COE0が信号asel_out として、ALU14およびMAC15に出力される。また、第2の選択装置12からデータD1(=R0−R1)が信号bsel_out として、ALU14およびMAC15に出力される。
このとき、乗算を指定する制御信号MACMDが、MAC15に供給される。これにより、MAC15において、係数COE0とデータD1との乗算が行われ、その結果COE0*D1が信号mac outとして第4の選択装置16に出力される。
そして、制御信号ESELがMAC15の出力を選択するように、第4の選択装置16に供給されている。その結果、第4の選択装置16においてMAC15の出力信号mac out(COE0*D1)が選択され、信号esel out(COE0*D1)としてレジスタ17に出力される。
レジスタ17では、MAC15の演算結果COE0*D1が格納され、この格納データが演算出力端子PE Cから演算結果信号OT0として、演算装置10A−1のカスケード入力PE P0、演算装置10A−2のカスケード入力PE P1、および演算装置10A−3のカスケード入力PE P2に出力される。
演算装置10A−0においては、C0FIFO18−0〜C3FIFO18−3で所望の遅延量だけ遅延された係数COE0〜COE3が係数出力端子PE C0O〜PE C3Oから係数出力c00〜c30として次段の演算装置10A−1の係数入力端子PE C0I〜PE C3Iに出力され、D0FIFO19−1,D3FIFO19−3で所望の遅延量だけ遅延されたデータD1,D3がデータ出力端子PE D1O,PE D3Oからデータ出力d10,d30として次段の演算装置10A−1のデータ入力端子PE D1I,〜PE D3Iに出力される。
次に、演算装置10A−1においては、制御信号CTL1により、演算結果信号OT1=OT0−COE1*D3となる演算が行われるように制御が行われる。
この場合、制御信号ASELが係数入力端子PE C1Iに供給される演算装置10A−0の係数出力c10(COE1)を選択するように設定されて第1の選択装置11に供給される。
また、制御信号BSELがデータ入力端子PE D1Iに供給される演算装置10A−0のデータ出力d10(D3=R2−R3)を選択するように設定されて第2の選択装置12に供給される。
また、制御信号CSELがカスケード入力端子PE P0に供給される演算装置10A−0の演算結果信号OT0(COE0*D1)を選択するように設定されて第3の選択装置13に供給される。
これにより、第1の選択装置11から係数COE1が信号asel_out として、ALU14およびMAC15に出力される。また、第2の選択装置12からデータD3(=R2−R3)が信号bsel_out として、ALU14およびMAC15に出力される。また、第3の選択装置13から、カスケード入力データCOE0*D1が信号csel outとして第1の選択装置11、ALU14およびMAC15に出力される。
このとき、乗減算を指定する制御信号MACMDが、MAC15に供給される。これにより、MAC15において、係数COE1とデータD3との乗算が行われ、さらに、その結果COE0*D1とCOE1*D3との減算が行われる。これにより、MAC15から乗加算結果(COE0*D1−COE1*D3)が信号mac outとして第4の選択装置16に出力される。
そして、制御信号ESELがMAC15の出力を選択するように、第4の選択装置16に供給されている。その結果、第4の選択装置16においてMAC15の出力信号mac out(COE0*D1−COE1*D3)が選択され、信号esel outとしてレジスタ17に出力される。
レジスタ17では、MAC15の演算結果(COE0*D1−COE1*D3)が格納され、この格納データが演算出力端子PE Cから演算結果信号OT1として、演算装置10A−0のカスケード入力PE P2、演算装置10A−2のカスケード入力PE P0、および演算装置10A−2のカスケード入力PE P1に出力される。
また、演算装置10A−1の(COE0*D1−COE1*D3)を示す演算結果信号OT1は、図10の第2の演算装置32のデータ入力I1に供給される。
また、演算装置10A−1においては、C0FIFO18−0〜C3FIFO18−3で所望の遅延量だけ遅延された係数COE0〜COE3が係数出力端子PE C0O〜PE C3Oから係数出力c01〜c31として次段の演算装置10A−2の係数入力端子PE C0I〜PE C3Iに出力され、D0FIFO19−1,D3FIFO19−3で所望の遅延量だけ遅延されたデータD1,D3がデータ出力端子PE D1O,PE D3Oからデータ出力d11,d31として次段の演算装置10A−3のデータ入力端子PE D1I,PE D3Iに出力される。
次に、演算装置10A−2においては、制御信号CTL2により、演算結果信号OT2=COE2*D1となる演算が行われるように制御が行われる。
この場合、制御信号ASELが係数入力端子PE C2Iに供給される演算装置10A−1の係数出力c21(COE2)を選択するように設定されて第1の選択装置11に供給される。
また、制御信号BSELがデータ入力端子PE D1Iに供給される演算装置10A−1のデータ出力d11(D1)を選択するように設定されて第2の選択装置12に供給される。
これにより、第1の選択装置11から係数COE2が信号asel_out として、ALU14およびMAC15に出力される。また、第2の選択装置12からデータD1が信号bsel_out として、ALU14およびMAC15に出力される。
このとき、乗算を指定する制御信号MACMDが、MAC15に供給される。これにより、MAC15において、係数COE2とデータD1との乗算が行われる。これにより、MAC15から乗算結果COE2*D1が信号mac outとして第4の選択装置16に出力される。
そして、制御信号ESELがMAC15の出力を選択するように、第4の選択装置16に供給されている。その結果、第4の選択装置16においてMAC15の出力信号mac out(COE2*D1)が選択され、信号esel out(COE2*D1)としてレジスタ17に出力される。
レジスタ17では、MAC15の演算結果COE2*D1が格納され、この格納データが演算出力端子PE Cから演算結果信号OT2として、演算装置10A−0のカスケード入力PE P1、演算装置10A−1のカスケード入力PE P2、および演算装置10A−3のカスケード入力PE P0に出力される。
演算装置10A−2においては、C0FIFO18−0〜C3FIFO18−3で所望の遅延量だけ遅延された係数COE0,COE1,COE2,COE3が係数出力端子PE C0O〜PE C3Oから係数出力c02〜c32として次段の演算装置10A−3の係数入力端子PE C0I〜PE C3Iに出力され、D0FIFO19−1,D3FIFO19−3で所望の遅延量だけ遅延されたデータD1,D3がデータ出力端子PE D1O,PE D3Oからデータ出力d12,d32として次段の演算装置10A−3のデータ入力端子PE D1I〜PE D3Iに出力される。
次に、演算装置10A−3においては、制御信号CTL3により、演算結果信号OT3=OT2+COE3*D3=COE2*D1+COE3*D3となる演算が行われるように制御が行われる。
この場合、制御信号ASELが係数入力端子PE C3Iに供給される演算装置10A−2の係数出力c32(COE3)を選択するように設定されて第1の選択装置11に供給される。
また、制御信号BSELがデータ入力端子PE D3Iに供給される演算装置10A−2のデータ出力d32(D3)を選択するように設定されて第2の選択装置12に供給される。
また、制御信号CSELがカスケード入力端子PE P0に供給される演算装置10A−2の演算結果信号OT2(COE2*D1)を選択するように設定されて第3の選択装置13に供給される。
これにより、第1の選択装置11から係数COE3が信号asel_out として、ALU14およびMAC15に出力される。また、第2の選択装置12からデータD3が信号bsel_out として、ALU14およびMAC15に出力される。また、第3の選択装置13から、カスケード入力データCOE2*D1が信号csel outとして第1の選択装置11、ALU14およびMAC15に出力される。
このとき、乗加算を指定する制御信号MACMDが、MAC15に供給される。これにより、MAC15において、係数COE3とデータD3との乗算が行われ、さらに、その結果COE3*D3と(COE2*D1)との加算が行われる。これにより、MAC15から乗加算結果COE3*D3+COE2*D1が信号mac outとして第4の選択装置16に出力される。
そして、制御信号ESELがMAC15の出力を選択するように、第4の選択装置16に供給されている。その結果、第4の選択装置16においてMAC15の出力信号mac out(COE2*D1+COE3*D3)が選択され、信号esel out(COE2*D1+COE3*D3)としてレジスタ17に出力される。
レジスタ17では、MAC15の演算結果(COE2*D1+COE3*D3)が格納され、この格納データが演算出力端子PE Cから演算結果信号OT3として所望の演算結果outとして出力され、演算装置10A−0のカスケード入力PE P0、演算装置10A−2のカスケード入力PE P1、および演算装置10A−2のカスケード入力PE P2に出力される。
また、演算装置10A−3の(COE2*D1+COE3*D3)を示す演算結果信号OT3は、図10の第2の演算装置32のデータ入力I3に供給される。
なお、以上において、図2に示す遅延制御信号C0DL,C1DL,C2DL,C3DLはすべて遅延0となるように、各C0FIFO〜C3FIFO18−0〜18−3に供給される。
また、遅延制御信号D0DLは遅延0となるように、D0FIFO19−0に供給され、遅延制御信号D1DLは遅延1となるように、D1FIFO19−1に供給され、遅延制御信号D2DLは遅延2となるように、D2FIFO19−2に供給され、遅延制御信号D3DLは遅延3となるように、D3FIFO19−3に供給される。
第2の演算装置32のデータ入力I1に供給された第1の演算装置31の演算結果(COE0*D1−COE1*D3)は図6の出力選択装置25A−1に供給される。
また、第2の演算装置32のデータ入力I3に供給された第1の演算装置31の演算結果(COE2*D1+COE3*D3)は図6の出力選択装置25A−3に供給される。
そして、第2の演算装置32において、出力選択装置25A−0では、データ入力I0とバタフライ演算器23A−0の出力信号btf0a out (=R0+R1)のうち、バタフライ演算器23A−0の出力信号btf0a out を選択するように制御信号W0SELが供給され、これにより選択されたデータが信号MEMW0=R0+R1として出力される。
また、出力選択装置25A−1では、データ入力I1とバタフライ演算器23A−0の出力信号btf0b out (=R0−R1)のうち、データ入力I1を選択するように制御信号W1SELが供給され、これにより選択されたデータが信号MEMW1=I1=(COE0*D1−COE1*D3)=(COE0*(R0−R1)−COE1*(R2−R3))として出力される。
また、出力選択装置25A−2では、データ入力I2とバタフライ演算器23A−1の出力信号btf1a out (=R2+R3)のうち、バタフライ演算器23A−1の出力信号btf1a out を選択するように制御信号W2SELが供給され、これにより選択されたデータが信号MEMW2=R2+R3として出力される。
また、出力選択装置25A−3では、データ入力I3とバタフライ演算器23A−1の出力信号btf1b out (=R2−R3)のうち、データ入力I3を選択するように制御信号W3SELが供給され、これにより選択されたデータが信号MEMW3=I3=(COE2*D1+COE3*D3)=(COE2*(R0−R1)+COE3*(R2−R3))として出力される。
以上説明したように、本第8の実施形態によれば、第1および第2の実施形態に係るALUおよびMACを含む演算装置と、第3〜第7の実施形態に係るバタフライ演算器を含む演算装置とを再構成可能に結合したので、以下の利点がある。
すなわち、従来のDSPなどのプロセッサでは、
MEMW0=x[k0]+x[k1],
MEMW1=px*(x[k0]−x[k1])−py*(y[k0]−y[k1]),
MEMW2=y[k0]+y[k1],
MEMW3=px*(x[k0]−x[k1])+py*(y[k0]−y[k1])
の演算を実行しようとした場合、たとえばMEMW1の計算で
reg1=x[k0]−x[k1],
reg2=px*reg1,
reg3=y[k0]−y[k1],
reg4=py*reg3,
MeMW1=reg2−reg4,
などのように一時的にレジスタに値を格納する演算が必要となっていた。そのため演算動作に不要なレジスタへの書き込み、レジスタからの読み出しが多くなり、動作サイクル数、消費電力ともに増えていたが、MAC,ALUとバタフライ演算とを組み合わせることで、メモリ読み出しから、演算、メモリ書き込みを行う際に、演算ブロックでの演算自由度が増し、効率よい演算ができるようになる。そのため、実行サイクル数が少なくなり、また一時データの読み、書きが減るため電力が削減される。
さらに、MEMW0の演算とMEMW1の演算のようにx[k0],x[k1]を共通に使用している場合には、従来のプロセッサではx[k0]+x[k1],x[k0]−x[k1]の演算を同時に行うことができずに演算に必要なサイクル数が増えていたが、本第8の実施形態では、この演算を同時に行うため必要サイクル数が少なくて済む。
また、本第8の実施形態によれば、上述した第1の実施形態と同様に、論理レベルの最適化ができることはもとより、構成情報の増大を防止でき、集積回路としての面積効率の低下を防止できる演算装置を実現できる利点がある。
また、演算装置を再構成可能であることから、カスケード演算だけでなく並列演算も同一のハードウェアで実現することが可能になっている。そのため、演算装置の数を増やして多くの並列化可能な処理を効率良く実行することもできる。
第9実施形態
図11は、本発明に係る演算装置の第9の実施形態を示す構成図である。
本第9の実施形態に係る演算装置30Aは、第8の実施形態のように、上述した第1および第2の実施形態に係るALUおよびMACを含む第1の演算装置と、第3〜第7の実施形態に係るバタフライ演算器を含む第2の演算装置とを再構成可能に結合した演算装置をより一般化した場合の装置例である。
この演算装置30Aもデータ読み出し、演算、データ書き込みの1サイクルで信号処理演算を効率良く実行可能に構成されている。
本演算装置30Aは、図11に示すように、ALUおよびMACを含む第1の演算装置(PU)31A、およびバタフライ演算器を含む第2の演算装置32A−0(BTFLa0),…,32A−k(BTFLak)、32B−0(BTFLb0),…,32B−m(BTFLbm)、32C−0(BTFLc0),…,32C−n(BTFLcn)を主構成要素として有している。
以下に、第1の演算装置31A、および第2の演算装置32A−0(BTFLa0),…,32A−k(BTFLak)、32B−0(BTFLb0),…,32B−m(BTFLbm)、32C−0(BTFLc0),…,32C−n(BTFLcn)のデータ入出力および制御信号、並びに接続関係について詳述し、各部の動作は、第8の実施形態の場合と同様に行われることから、その詳細は省略する。
第1の演算装置31Aは、たとえば図1または図2の演算装置を2、4、8等の複数個カスケード接続した演算装置を含んでおり、データ入力DIa0,DIa1、DIa2k,DIa2k+1、DIb0,DIb1,DIb2,DIb3、DIb4m,DIb4m+1,DIb4m+2,DIb4m+3、DIc0,DIc1,…,DIc6,DIc7、DIc8n,DIc8n+1,…,DIc8n+6,DIc8n+7、係数入力COE0,…,COEp、データ出力OTa0,OTa1、OTa2k,OTa2k+1、OTb0,OTb1,OTb2,OTb3、OTb4m,OTb4m+1,OTb4m+2,OTb4m+3、OTc0,OTc1…OTc6,OTc7、OTc8n,OTc8n+1,…,OTc8n+6,OTc8n+7を有し、再構成のための制御信号CTRLa0,…,CTRLa2k+1、CTRLb0,…,CTRLb4m+3、CTRLc0,…,CTRLc8n+7が供給される。
そして、各制御信号には、演算制御信号ASEL,BSEL,ESEL,MACMD,ALUMD,RNDMD,SATMD,OSFMD,ACCMD、および遅延制御信号C0DL,C1DL,…,CkDL、D0DL,D1DL,…,DmDLが含まれる。
第2の演算装置32A−0は、たとえば図5に示すような4入力4出力の演算装置であって、データ入力MEMRa0,MEMRa1、演算結果入力Ia0,Ia1、データ出力(演算結果出力)Da0,Da1、データ出力MEMWa0,MEMWa1を有し、再構成のための制御信号CTRLBa0が供給される。
たとえば第3の実施形態の場合を例にとると、制御信号CTRLBa0には、SFT0MD,R0SEL,BTFMD0,D0SEL,W0SEL、およびSFT1MD,R1SEL,BTFMD1,D1SEL,W1SELが含まれる。
第2の演算装置32A−kは、たとえば図5に示すような4入力4出力の演算装置であって、データ入力MEMRa2k,MEMRa2k+1、演算結果入力Ia2k,Ia2k+1、データ出力(演算結果出力)Da2k,Da2k+1、データ出力MEMWa2k,MEMWa2k+1を有し、再構成のための制御信号CTRLBa2kが供給される。
たとえば第3の実施形態の場合を例にとると、制御信号CTRLBa2kには、SFT0MD,R0SEL,BTFMD0,D0SEL,W0SEL、およびSFT1MD,R1SEL,BTFMD1,D1SEL,W1SELが含まれる。
第2の演算装置32B−0は、たとえば図6または図7に示すような8入力8出力の演算装置であって、データ入力MEMRb0,MEMRb1,MEMRb2,MEMRb3、演算結果入力Ib0,Ib1,Ib2,Ib3、データ出力(演算結果出力)Db0,Db1,Db2,Db3、データ出力MEMWb0,MEMWb1,MEMWb2,MEMWb3を有し、再構成のための制御信号CTRLBb0が供給される。
たとえば第4または第5の実施形態の場合を例にとると、制御信号CTRLBb0には、SFT0MD,R0SEL,BTFMD0,D0SEL,W0SEL、SFT1MD,R1SEL,BTFMD1,D1SEL,W1SEL、SFT2MD,R2SEL,BTFMD2,D2SEL,W2SEL、およびSFT3MD,R3SEL,BTFMD3,D3SEL,W3SELが含まれる。
第2の演算装置32B−mは、たとえば図6または図7に示すような8入力8出力の演算装置であって、データ入力MEMRb4m,MEMRb4m+1,MEMRb4m+2,MEMRb4m+3、演算結果入力Ib4m,Ib4m+1,Ib4m+2,Ib4m+3、データ出力(演算結果出力)Db4m,Db4m+1,Db4m+2,Db4m+3、データ出力MEMWb4m,MEMWb4m+1,MEMWb4m+2,MEMWb4m+3を有し、再構成のための制御信号CTRLBb4mが供給される。
たとえば第4または第5の実施形態の場合を例にとると、制御信号CTRLBb4mには、SFT0MD,R0SEL,BTFMD0,D0SEL,W0SEL、SFT1MD,R1SEL,BTFMD1,D1SEL,W1SEL、SFT2MD,R2SEL,BTFMD2,D2SEL,W2SEL、およびSFT3MD,R3SEL,BTFMD3,D3SEL,W3SELが含まれる。
第2の演算装置32C−0は、たとえば図8または図9に示すような16入力16出力の演算装置であって、データ入力MEMRc0,MEMRc1,…,MEMRc6,MEMRc7、演算結果入力Ic0,Ic1,…,Ic6,Ic7、データ出力(演算結果出力)Dc0,Dc1,…,Dc6,Dc7、データ出力MEMWc0,MEMWc1,…,MEMWc6,MEMWc7を有し、再構成のための制御信号CTRLBc0が供給される。
たとえば第6または第7の実施形態の場合を例にとると、制御信号CTRLBb4mには、SFT0MD,R0SEL,MTFMD0,D0SEL,W0SEL、SFT1MD,R1SEL,MTFMD1,D1SEL,W1SEL、SFT2MD,R2SEL,MTFMD2,D2SEL,W2SEL、SFT3MD,R3SEL,MTFMD3,D3SEL,W3SEL、SFT4MD,R4SEL,MTFMD4,D4SEL,W4SEL、SFT5MD,R5SEL,MTFMD5,D5SEL,W5SEL、SFT6MD,R6SEL,MTFMD6,D6SEL,W6SEL、SFT7MD,R7SEL,MTFMD7,D7SEL,W7SELが含まれる。
第2の演算装置32C−nは、たとえば図8または図9に示すような16入力16出力の演算装置であって、データ入力MEMRc8n,MEMRc8n+1,…,MEMRc8n+6,MEMRc8n+7、演算結果入力Ilc8n,Ilc8n+1,…,Ic8n+6,Ic8n+7、データ出力(演算結果出力)Dc8n,Dc8n+1,…,Dc8n+6,Dc8n+7、データ出力MEMWc8n,MEMWc8n+1…MEMWc8n+6,MEMWc8n+7を有し、再構成のための制御信号CTRLBc8nが供給される。
たとえば第6または第7の実施形態の場合を例にとると、制御信号CTRLBb4mには、SFT0MD,R0SEL,MTFMD0,D0SEL,W0SEL、SFT1MD,R1SEL,MTFMD1,D1SEL,W1SEL、SFT2MD,R2SEL,MTFMD2,D2SEL,W2SEL、SFT3MD,R3SEL,MTFMD3,D3SEL,W3SEL、SFT4MD,R4SEL,MTFMD4,D4SEL,W4SEL、SFT5MD,R5SEL,MTFMD5,D5SEL,W5SEL、SFT6MD,R6SEL,MTFMD6,D6SEL,W6SEL、SFT7MD,R7SEL,MTFMD7,D7SEL,W7SELが含まれる。
そして、第2の演算装置32A−0のデータ入力MEMRa0にデータRa0が供給され、データ入力MEMRa1にデータRa1が供給される。
第2の演算装置32A−0のデータ出力Da0が第1の演算装置31Aのデータ入力DIa0に供給され、第2の演算装置32A−0のデータ出力Da1が第1の演算装置31Aのデータ入力DIa1に供給される。
また、第1の演算装置31Aのデータ出力OTa0が第2の演算装置32A−0のデータ入力Ia0に供給され、第1の演算装置31Aのデータ出力OTa1が第2の演算装置32A−0のデータ入力Ia1に供給される。
また、第2の演算装置32A−0のデータ出力MEMWa0からデータWa0が出力され、データ出力MEMWa1からデータWa1が出力される。
第2の演算装置32A−kのデータ入力MEMRa2kにデータRa2kが供給され、データ入力MEMRa2k+1にデータRa2k+1が供給される。
第2の演算装置32A−kのデータ出力Da2kが第1の演算装置31Aのデータ入力DIa2kに供給され、第2の演算装置32A−kのデータ出力Da2k+1が第1の演算装置31Aのデータ入力DIa2k+1に供給される。
また、第1の演算装置31Aのデータ出力OTa2kが第2の演算装置32A−kのデータ入力Ia2kに供給され、第1の演算装置31Aのデータ出力OTa2k+1が第2の演算装置32A−kのデータ入力Ia2k+1に供給される。
また、第2の演算装置32A−kのデータ出力MEMWa2kからデータWa2kが出力され、データ出力MEMWa2k+1からデータWa2k+1が出力される。
第2の演算装置32B−0のデータ入力MEMRb0にデータRb0が供給され、データ入力MEMRb1にデータRb1が供給され、データ入力MEMRb2にデータRb2が供給され、データ入力MEMRb3にデータRb3が供給される。
第2の演算装置32B−0のデータ出力Db0が第1の演算装置31Aのデータ入力DIb0に供給され、第2の演算装置32B−0のデータ出力Db1が第1の演算装置31Aのデータ入力DIb1に供給され、第2の演算装置32B−0のデータ出力Db2が第1の演算装置31Aのデータ入力DIb2に供給され、第2の演算装置32B−0のデータ出力Db3が第1の演算装置31Aのデータ入力DIb3に供給される。
また、第1の演算装置31Aのデータ出力OTb0が第2の演算装置32B−0のデータ入力Ib0に供給され、第1の演算装置31Aのデータ出力OTb1が第2の演算装置32B−0のデータ入力Ib1に供給され、第1の演算装置31Aのデータ出力OTb2が第2の演算装置32B−0のデータ入力Ib2に供給され、第1の演算装置31Aのデータ出力OTb3が第2の演算装置32B−0のデータ入力Ib3に供給される。
また、第2の演算装置32B−0のデータ出力MEMWb0からデータWb0が出力され、データ出力MEMWb1からデータWb1が出力され、データ出力MEMWb2からデータWb2が出力され、データ出力MEMWb3からデータWb3が出力される。
第2の演算装置32B−mのデータ入力MEMRb4mにデータRb4mが供給され、データ入力MEMRb4m+1にデータRb4m+1が供給され、データ入力MEMRb4m+2にデータRb4m+2が供給され、データ入力MEMRb4m+3にデータRb4m+3が供給される。
第2の演算装置32B−mのデータ出力Db4mが第1の演算装置31Aのデータ入力DIb4mに供給され、第2の演算装置32B−mのデータ出力Db4m+1が第1の演算装置31Aのデータ入力DIb4m+1に供給され、第2の演算装置32B−mのデータ出力Db4m+2が第1の演算装置31Aのデータ入力DIb4m+2に供給され、第2の演算装置32B−mのデータ出力Db4m+3が第1の演算装置31Aのデータ入力DIb4m+3に供給される。
また、第1の演算装置31Aのデータ出力OTb4mが第2の演算装置32B−mのデータ入力Ib4mに供給され、第1の演算装置31Aのデータ出力OTb4m+1が第2の演算装置32B−mのデータ入力Ib4m+1に供給され、第1の演算装置31Aのデータ出力OTb4m+2が第2の演算装置32B−mのデータ入力Ib4m+2に供給され、第1の演算装置31Aのデータ出力OTb4m+3が第2の演算装置32B−mのデータ入力Ib4m+3に供給される。
また、第2の演算装置32B−mのデータ出力MEMWb4mからデータWb4mが出力され、データ出力MEMWb4m+1からデータWb4m+1が出力され、データ出力MEMWb4m+2からデータWb4m+2が出力され、データ出力MEMWb4m+3からデータWb4m+3が出力される。
第2の演算装置32C−0のデータ入力MEMRc0にデータRc0が供給され、データ入力MEMRc1にデータRc1が供給され、同様にしてデータ入力MEMRc6にデータRc6が供給され、データ入力MEMRc7にデータRc7が供給される。
第2の演算装置32C−0のデータ出力Dc0が第1の演算装置31Aのデータ入力DIc0に供給され、第2の演算装置32C−0のデータ出力Dc1が第1の演算装置31Aのデータ入力DIc1に供給され、同様にして第2の演算装置32C−0のデータ出力Dc6が第1の演算装置31Aのデータ入力DIc6に供給され、第2の演算装置32C−0のデータ出力DC7が第1の演算装置31Aのデータ入力DIC7に供給される。
また、第1の演算装置31Aのデータ出力OTc0が第2の演算装置32C−0のデータ入力Ic0に供給され、第1の演算装置31Aのデータ出力OTc1が第2の演算装置32C−0のデータ入力Ic1に供給され、同様にして第1の演算装置31Aのデータ出力OTc6が第2の演算装置32C−0のデータ入力Ic6に供給され、第1の演算装置31Aのデータ出力OTc7が第2の演算装置32C−0のデータ入力Ic7に供給される。
また、第2の演算装置32C−0のデータ出力MEMWc0からデータWc0が出力され、データ出力MEMWc1からデータWc1が出力され、同様にしてデータ出力MEMWc6からデータWc6が出力され、データ出力MEMWc7からデータWc7が出力される。
第2の演算装置32C−nのデータ入力MEMRc8nにデータRc8nが供給され、データ入力MEMRc8n+1にデータRc8n+1が供給され、同様にしてデータ入力MEMRc8n+6にデータRc8n+6が供給され、データ入力MEMRc8n+7にデータRc8n+7が供給される。
第2の演算装置32C−nのデータ出力DC8nが第1の演算装置31Aのデータ入力DIc8nに供給され、第2の演算装置32C−nのデータ出力Dc8n+1が第1の演算装置31Aのデータ入力DIc8n+1に供給され、同様にして第2の演算装置32C−nのデータ出力Dc8n+6が第1の演算装置31Aのデータ入力DIc8n+6に供給され、第2の演算装置32C−nのデータ出力Dc8n+7が第1の演算装置31Aのデータ入力DIc8n+7に供給される。
また、第1の演算装置31Aのデータ出力OTc8nが第2の演算装置32C−nのデータ入力Ic8nに供給され、第1の演算装置31Aのデータ出力OTc8n+1が第2の演算装置32C−nのデータ入力Ic8n+1に供給され、同様にして第1の演算装置31Aのデータ出力OTc8n+6が第2の演算装置32C−nのデータ入力Ic8n+6に供給され、第1の演算装置31Aのデータ出力OTc8n+7が第2の演算装置32C−nのデータ入力Ic8n+7に供給される。
また、第2の演算装置32C−nのデータ出力MEMWc8nからデータWc8nが出力され、データ出力MEMWc8n+1からデータWc8n+1が出力され、同様にしてデータ出力MEMWc8n+6からデータWc8n+6が出力され、データ出力MEMWc8n+7からデータWc8n+7が出力される。
このような構成を有する演算装置30Aにおいて、たとえば第1の演算装置31Aと8入力8出力の第2の演算装置32B−0〜32B−mとの間でデータの授受を行って演算を行う場合には、上述した第8の実施形態においては説明した動作と同様の動作が行われる。
その他の第2の演算装置32A−0〜32A−k、32C−0〜32C−nと第1の演算装置31Aとの間でデータの授受を行って演算を行う場合であっても、データ入出力数が異なるだけで、略同様の動作が行われる。
したがって、上述したように、ここでは各部の動作は、その詳細は省略する。
本第9の実施形態によれば、3項演算装置かつ/または2項演算装置を含む演算装置を複数有する第1の演算装置31Aと、2入力2出力演算装置を含む第2の演算装置32A−0(BTFLa0),…,32A−k(BTFLak)、32B−0(BTFLb0),…,32B−m(BTFLbm)、32C−0(BTFLc0),…,32C−n(BTFLcn)とを備え、外部から再構成可能な演算装置30Aにおいて、第2の演算装置32A−0(BTFLa0),…,32A−k(BTFLak)、32B−0(BTFLb0),…,32B−m(BTFLbm)、32C−0(BTFLc0),…,32C−n(BTFLcn)の演算結果を第1の演算装置31Aの入力とし、また、第1の演算装置31Aの演算結果を第2の演算装置の入力として、最終的な演算結果を得るようにしたので、上述した第8の実施形態の効果と同様の効果を得ることができる。
すなわち、従来のDSPなどのプロセッサでは、
MEMW0=x[k0]+x[k1],
MEMW1=px*(x[k0]−x[k1])−py*(y[k0]−y[k1]),
MEMW2=y[k0]+y[k1],
MEMW3=px*(x[k0]−x[k1])+py*(y[k0]−y[k1])
の演算を実行しようとした場合、たとえばMEMW1の計算で
reg1=x[k0]−x[k1],
reg2=px*reg1,
reg3=y[k0]−y[k1],
reg4=py*reg3,
MeMW1=reg2−reg4,
などのように一時的にレジスタに値を格納する演算が必要となっていた。そのため演算動作に不要なレジスタへの書き込み、レジスタからの読み出しが多くなり、動作サイクル数、消費電力ともに増えていたが、MAC,ALUとバタフライ演算とを組み合わせることで、メモリ読み出しから、演算、メモリ書き込みを行う際に、演算ブロックでの演算自由度が増し、効率よい演算ができるようになる。そのため、実行サイクル数が少なくなり、また一時データの読み、書きが減るため電力が削減される。
さらに、MEMW0の演算とMEMW1の演算のようにx[k0],x[k1]を共通に使用している場合には、従来のプロセッサではx[k0]+x[k1],x[k0]−x[k1]の演算を同時に行うことができずに演算に必要なサイクル数が増えていたが、本第9の実施形態では、この演算を同時に行うため必要サイクル数が少なくて済む。
また、本第9の実施形態によれば、上述した第1の実施形態と同様に、論理レベルの最適化ができることはもとより、構成情報の増大を防止でき、集積回路としての面積効率の低下を防止できる演算装置を実現できる利点がある。
また、演算装置を再構成可能であることから、カスケード演算だけでなく並列演算も同一のハードウェアで実現することが可能になっている。そのため、演算装置の数を増やして多くの並列化可能な処理を効率良く実行することもできる。
第10実施形態
図12は、本発明の第10の実施形態に係る演算システムを示す構成図である。
本演算システム40では、たとえば上述した第1の実施形態〜第9の実施形態に係る演算器の配列や、演算実行時の係数パラメータ等を、構成情報に基づいて再構成可能な演算装置が用いられる。
そして、本演算システム40は、演算装置、メモリ、アドレス生成装置と、経路情報を格納するメモリを含み、CPUを用いた経路情報選択の他に、アドレス生成装置が発生する制御信号に基づいて、演算途中であっても特定条件で経路情報を切り替えすることができる再構成可能なシステムとして構成される。
具体的には、本演算システム40は、図12に示すように、制御回路としてのCPU41、複数、たとえば2つの第1の経路選択情報メモリ42、第2の経路選択情報メモリ43、選択装置44、アドレス生成装置45、データメモリ46、および再構成可能な演算装置47を有している。
CPU41は、バスBUSを介して、第1の経路選択情報メモリ42、第2の経路選択情報メモリ43、データメモリ46にアクセスすることが可能になっている。
CPU41は、req_ack信号を用いてアドレス生成装置45の起動を行い、アドレス生成装置45からのreq_ack信号によりアドレス生成装置45の動作の終了を認識する。
また、CPU41は、第1の経路選択情報メモリ42に第1の経路選択情報config1を書き込み、第2の経路選択情報メモリ43に第2の経路選択情報config2を書き込む。
また、CPU41は、データメモリ46に複数のデータを書き込んでおく。さらにCPU41は、アドレス生成装置45に信号agctrlでアドレス生成パターンを指定し、アドレス生成装置45の起動を行う。
さらに、CPU41は、制御信号ctrlbを選択装置44に出力し、第1の経路選択情報メモリ42の第1の経路選択情報config1および第2の経路選択情報メモリ43の第2の経路選択情報config2のうちのいずれの経路選択情報を選択するのかを指示する。換言すれば、CPU41は、制御信号ctrlbをアドレス生成装置45がアドレス生成を行っている途中で、動的に変更し、経路選択情報を複数の経路選択情報メモリ42,43から選択するのかを制御する。
第1の経路選択情報メモリ42は、CPU41からバスBUSを介して第1の経路選択情報config1が書き込まれ、書き込まれた第1の経路選択情報config1を選択装置44に出力する。
第2の経路選択情報メモリ43は、CPU41からバスBUSを介して第2の経路選択情報config2が書き込まれ、書き込まれた第2の経路選択情報config2を選択装置44に出力する。
選択装置44は、アドレス生成装置45による制御信号ctrlaおよびCPU41による制御信号ctrlbに応じて、第1の経路選択情報メモリ42による第1の経路選択情報config1、および第2の経路選択情報メモリ43による第2の経路選択情報config2のうちのいずれかを選択して、演算装置47に供給する。
アドレス生成装置45は、CPU41によるreq_ack信号を受けて起動し、あらかじめCPU41により制御信号agctrlで指定されたアドレス生成パターンで、自動的にアドレスadrを生成し、データメモリ46からの読み出し、データメモリ46ヘの書き込みを行う。
また、アドレス生成装置45は、生成したアドレスに応じた選択情報を含む制御信号ctrlaを選択装置44に出力し、第1の経路選択情報メモリ42による第1の経路選択情報config1、および第2の経路選択情報メモリ43による第2の経路選択情報config2のうちのいずれかを選択させて、演算装置47に供給させる。
そして、アドレス生成装置45は、アドレスの生成が終了したときには、req_ack信号を用いてCPU41に動作の完了を伝える。
データメモリ46は、アドレス生成装置45で生成されたアドレスadrによりデータメモリ46の記憶データを読み出し、この読み出しデータread datを演算装置47に供給し、演算装置47の演算結果である書き込みデータwrite datを書き込み。
また、データメモリ46は、バスBUSを介してCPU41によりアクセスされる。
演算装置47は、選択装置44で選択された第1の経路選択情報メモリ42による第1の経路選択情報config1、または第2の経路選択情報メモリ43による第2の経路選択情報config2に基づいて、演算器の配列や、演算実行時の係数パラメータ等を再構成して、データメモリ46の読み出しデータread datに対し指定の演算を行い、この演算結果を書き込みデータwrite datとしてデータメモリ46に供給する。
次に、上記構成による動作を、図13に関連付けて説明する。
まず、CPU41により、バスBUSを介して、第1の経路選択情報メモリ42に第1の経路選択情報config1が書き込まれ、第2の経路選択情報メモリ43に第2の経路選択情報config2が書き込まれる。
また、CPU41により、バスBUSを介してデータメモリ46に複数のデータがあらかじめ書き込まれる。
さらに、CPU41によりアドレス生成装置45に対して制御信号agctrが出力されて、アドレス生成パターンが指定されて、アドレス生成装置45の起動が行われる。
これにより、CPU41から制御がアドレス生成装置45に移行され、アドレス生成装置45において、アドレスの自動生成が開始され、データメモリ46に供給される。
なお、ここでは簡単のため、アドレス生成装置45において発生する読み出しアドレスパターンが0,1,2,3,4,5であるものとする。
そして、生成アドレスadrに基づいてデータメモリ46から読み出され、演算装置47に供給されるデータは、read_dat [0] 、read_dat [1] 、read_dat [2] 、read_dat [3] 、read_dat [4] 、およびread_dat [5] となる。
また、アドレス生成装置45からは、生成アドレスに応じて制御信号ctrlaが選択装置44に出力される。
選択装置44では、アドレス生成装置45による制御信号ctrlaおよびCPU41による制御信号ctrlbに応じて、第1の経路選択情報メモリ42による第1の経路選択情報config1、および第2の経路選択情報メモリ43による第2の経路選択情報config2のうちのいずれかが選択されて、演算装置47に供給される。
演算装置47においては、選択装置44により供給される第1の経路選択情報メモリ42による第1の経路選択情報config1、または第2の経路選択情報メモリ43による第2の経路選択情報config2に基づいて、演算器の配列や、演算実行時の係数パラメータ等が再構成される。
そして、再構成された演算装置47において、データメモリ46の読み出しデータread_dat [0] 、read_dat [1] 、read_dat [2] 、read_dat [3] 、read_dat [4] 、およびread_dat [5] に対し指定の演算が行われる。
演算装置47における演算結果は、write−dat [0] 、write−dat [1] 、write−dat [2] 、write−dat [3] 、write−dat [4] 、およびwrite−dat [5] となる。
ここで、第1の経路選択情報config1で実行される演算をfunc1()、第2の経路選択情報config2で実行される演算をfunc2()とする。
そして、図13に示すように、アドレス生成装置45からの制御情報ctrlaでアドレスが、0,1,3,4のときには第1の経路選択情報config1を、アドレスが2,5のときには第2の経路選択情報config2を選択することができるものとする。
この場合の演算結果は、次のように表すことができる。
(数18)
write−dat [0] =func1(read_dat [0] )
write−dat [1] =func1(read_dat [1] )
write−dat [2] =func2(read_dat [2] )
write−dat [3] =func1(read_dat [3] )
write−dat [4] =func1(read_dat [4] )
write−dat [5] =func2(read_dat [5] )
これらの演算結果がデータメモリ46に書き込まれ、アドレス生成装置45によるアドレスadrの自動生成が終了される。
そして、アドレス生成装置45からask_req信号がCPU41に送られ、演算の終了が伝えられる。
以上説明したように、本第10の実施形態によれば、第1の経路選択情報config1を記憶する第1の経路選択情報メモリ42と、第2の経路選択情報config2を記憶する第2の経路選択情報メモリ43と、制御信号ctrlaおよび制御信号ctrlbに応じて、第1の経路選択情報メモリ42による第1の経路選択情報config1、および第2の経路選択情報メモリ43による第2の経路選択情報config2のうちのいずれかを選択する選択装置44と、指定されたアドレス生成パターンで、自動的にアドレスadrを生成し、データメモリ46からの読み出し、データメモリ46ヘの書き込みを行い、かつ、生成したアドレスに応じて制御信号ctrlaを選択装置44に出力するアドレス生成装置45と、選択装置44で選択された第1の経路選択情報config1、または第2の経路選択情報config2に基づいて、演算器の配列や、演算実行時の係数パラメータ等を再構成して、データメモリ46の読み出しデータread datに対し指定の演算を行い、この演算結果を書き込みデータwrite datとしてデータメモリ46に書き戻す演算装置47とを設けたので、以下の利点がある。
すなわち、従来、CPUとアドレス生成装置と複数の構成情報メモリと再構成可能な演算装置で構成される演算システムにおいては、CPUを用いて、複数の構成メモリの選択を制御し、アドレス生成装置がアドレスを生成している期間中にCPUを用いてメモリの選択を行わせるためには、CPUとアドレス生成装置間に同期機構を設ける必要があり、そのため、制御が複雑になり、余計なハードウェアが必要になる、あるいはハードウェアの構造によっては、同期自体が不可能であるという欠点を持っていた。
これに対して、本第10の実施形態に係る演算システムによれば、アドレス生成装置自身が出力する制御信号を用いて、複数の構成メモリの選択が可能になるため、同期機構を設ける必要がなくなるという利点がある。
また、CPUに制御が一度戻ることがないため、処理を行うためのオーバーヘッドが少なくなり、システム全体の処理能力を向上させることも可能になる。
第11実施形態
図14は、本発明の第11の実施形態を説明するための図であって、本発明に係る演算システムに適用可能なアドレス生成装置の一例を示す構成図である。
本アドレス生成装置50は、たとえば上述した第10の実施形態を示す図12の演算システムに適用可能で、4個(一般的にはn個)のカウンタを用いてアドレスを生成する装置であって、C言語のforループ中での配列のアクセスパターンやそのネスティング、FFT、ビットリバース等のアドレスパターンを生成し、このアドレス生成とともに制御信号CTRL(図12のctrla)も出力する。
以下、アドレス生成装置50の具体的な構成および機能について、順を追って説明する。
本アドレス生成装置50は、図14に示すように、演算器(INCDEC0)51−0,演算器(INCDEC1)51−1,演算器(INCDEC2)51−2,演算器(INCDECx)51−X、セレクタ付き演算器(SUM0)52−0,セレクタ付き演算器(SUM1)52−1,セレクタ付き演算器(SUM2)52−2、セレクタ(SEL0)53−0,セレクタ(SEL1)53−1,セレクタ(SEL2)53−2,セレクタ(SELx)53−x、カウンタ(Counter0)54−0,カウンタ(Counter1)54−1,カウンタ(Counter2)54−2,カウンタ(Counterx)54−x、比較器(END)55、比較器(END0)56−0,比較器(END1)56−1,比較器(END2)56−2,比較器(ENDx)56−x、比較器(INC0)57−0,比較器(INC1)57−1,比較器(INC2)57−2、セレクタ付き演算器(ADRSUM)58、ビット反転器(BRV)59、マスク生成器(ADRMSK)60、および制御信号生成器(CTRLGEN)61を有している。
そして、アドレス生成装置50は、入力信号COUNT0STP,COUNT1STP,COUNT2STP,COUNT0INI,COUNT1INI,COUNT2INI,COUNTxINI,COUNT0FIN,COUNT1FIN,COUNT2FIN,COUNTxFIN,OFFSET,MASKと、制御信号CNT0INIMD,CNT1INIMD,CNT2INIMD,CNT0RETMD,CNT1RETMD,CNT2RETMD,CNT0ENDMD,CNT1ENDMD,CNT2ENDMD,CNT0INCMD,CNT1INCMD,CNT2INCMD,CTRLMD,COUNTSUM,MSKMD,COUNTENが供給され、制御信号CTRL、および生成アドレスGENADRを出力する。
演算器51−0は、制御信号CNT0INIMDの値に応じて入力信号COUNT0STPとカウンタ54−0のカウントデータcountdat 0を演算した結果を信号countcal 0としてセレクタ53−0、およびセレクタ演算器52−0〜52−2に出力する。
具体的には、演算器51−0は、制御信号CNT0INIMDの値に応じて、以下のいずれかの演算を行う。
(数19)
countcal 0=COUNT0STP+countdat 0、
countcal 0=COUNT0STP−countdat 0
演算器51−1は、制御信号CNT1INIMDの値に応じて入力信号COUNT1STPとカウンタ54−1のカウントデータcountdat 1を演算した結果を信号countcal 1としてセレクタ53−1、およびセレクタ演算器52−0〜52−2に出力する。
具体的には、演算器51−1は、制御信号CNT1INIMDの値に応じて、以下のいずれかの演算を行う。
(数20)
countcal 1=COUNT1STP+countdat 1、
countcal 1=COUNT1STP−countdat 1
演算器51−2は、制御信号CNT2INIMDの値に応じて入力信号COUNT2STPとカウンタ54−2のカウントデータcountdat 2を演算した結果を信号countcal 2としてセレクタ53−2、およびセレクタ演算器52−0〜52−2に出力する。
具体的には、演算器51−2は、制御信号CNT2INIMDの値に応じて、以下のいずれかの演算を行う。
(数21)
countcal 2=COUNT2STP+countdat 2、
countcal 2=COUNT2STP−countdat 2
演算器51−xは、入力信号COUNTxFINとカウンタ54−xのカウントデータcountdat xを演算した結果を信号countcal xとしてセレクタ53−xに出力する。
セレクタ付き演算器52−0は、制御信号CNT0RETMDの値に応じて入力信号COUNT0INI、演算器51−0の出力信号countcal 0、演算器51−1の出力信号countcal 1、および演算器51−2の出力信号countcal 2を演算した結果を信号countret 0としてセレクタ53−0に出力する。
具体的には、演算器52−0は、制御信号CNT0RETMDの値に応じて、以下のいずれかの演算を行う。
(数22)
countret 0=COUNT0INI、
countret 0=countcal 0、
countret 0=countcal 1、
countret 0=countcal 2、
countret 0=COUNT0INI+countcal 0、
countret 0=COUNT0INI+countcal 1、
countret 0=COUNT0INI+countcal 2
セレクタ付き演算器52−1は、制御信号CNT1RETMDの値に応じて入力信号COUNT1INI、演算器51−0の出力信号countcal 0、演算器51−1の出力信号countcal 1、および演算器51−2の出力信号countcal 2を演算した結果を信号countret 1としてセレクタ53−1に出力する。
具体的には、演算器52−1は、制御信号CNT1RETMDの値に応じて、以下のいずれかの演算を行う。
(数23)
countret 1=COUNT1INI、
countret 1=countcal 0、
countret 1=countcal 1、
countret 1=countcal 2、
countret 1=COUNT1INI+countcal 0、
countret 1=COUNT1INI+countcal 1、
countret 1=COUNT1INI+countcal 2
セレクタ付き演算器52−2は、制御信号CNT2RETMDの値に応じて入力信号COUNT2INI、演算器51−0の出力信号countcal 0、演算器51−1の出力信号countcal 1、および演算器51−2の出力信号countcal 2を演算した結果を信号countret 2としてセレクタ53−2に出力する。
具体的には、演算器52−2は、制御信号CNT2RETMDの値に応じて、以下のいずれかの演算を行う。
(数24)
countret 2=COUNT2INI、
countret 2=countcal 0、
countret 2=countcal 1、
countret 2=countcal 2、
countret 2=COUNT2INI+countcal 0、
countret 2=COUNT2INI+countcal 1、
countret 2=COUNT2INI+countcal 2
セレクタ53−0は、比較器56−0の出力信号countend 0、および比較器57−0の出力信号countinc 0の値に応じて、演算器51−0の出力信号countcal 0、入力信号COUNT0INI、演算器52−0の出力信号countret 0の値を選択して、カウンタ54−0に出力する。
セレクタ53−1は、比較器56−1の出力信号countend 1、および比較器57−1の出力信号countinc 1の値に応じて、演算器51−1の出力信号countcal 1、入力信号COUNT1INI、演算器52−1の出力信号countret 1の値を選択して、カウンタ54−1に出力する。
セレクタ53−2は、比較器56−2の出力信号countend 2、および比較器57−2の出力信号countinc 2の値に応じて、演算器51−2の出力信号countcal 2、入力信号COUNT2INI、演算器52−2の出力信号countret 2の値を選択して、カウンタ54−2に出力する。
セレクタ53−xは、比較器56−xの出力信号countend xの値に応じて、演算器51−xの出力信号countcal x、入力信号COUNTxINIの値を選択して、カウンタ54−xに出力する。
カウンタ54−0は、セレクタ53−0の出力信号をカウントデータcountdat 0として格納し、格納データを演算器51−0、比較器55、およびセレクタ付き演算器58に出力する。
カウンタ54−1は、セレクタ53−1の出力信号をカウントデータcountdat 1として格納し、格納データを演算器51−1、比較器55、およびセレクタ付き演算器58に出力する。
カウンタ54−2は、セレクタ53−2の出力信号をカウントデータcountdat 2として格納し、格納データを演算器51−2、比較器55、およびセレクタ付き演算器58に出力する。
カウンタ54−xは、セレクタ53−xの出力信号をカウントデータcountdat xとして格納し、格納データを演算器51−x、比較器55、およびセレクタ付き演算器58に出力する。
比較器55は、カウンタ54−0によるカウンタデータcountdat 0、カウンタ54−1によるカウンタデータcountdat 1、カウンタ54−2によるカウンタデータcountdat 2、カウンタ54−xによるカウンタデータcountdat x、および入力信号COUNT0INI,COUNT1INI、COUNT2INI、COUNT0FIN、COUNT1FIN、COUNT2FINの値を演算し、結果endsig0を比較器56−0に出力し、結果endsig1を比較器56−1に出力し、結果endsig2を比較器56−2に出力し、結果endsigxを比較器56−xに出力する。
具体的には、比較器55は、j=0,1,2,xについて、カウンタ54−0によるカウントデータcountdat 0と入力信号COUNT0INIが等しいときにendsigj=eq0、カウンタ54−1によるカウントデータcountdat 1と入力信号COUNT1INIが等しいときにendsigj=eq1、カウンタ54−2によるカウントデータcountdat 2と入力信号COUNT2INIが等しいときにendsigj=eq2を設定する。
同様に、比較器55は、カウンタ54−0によるカウントデータcountdat 0と入力信号COUNT0FINが等しいときにendsigj=eq3、カウンタ54−1によるカウントデータcountdat 1と入力信号COUNT1FINが等しいときにendsigj=eq4、カウンタ54−2によるカウントデータcountdat 2と入力信号COUNT2FINが等しいときにendsigj=eq5を設定する。
また、比較器55は、カウンタ54−0によるカウントデータcountdat 0とカウンタ54−1によるカウントデータcountdat 1が等しいときendsigj=eq6、カウンタ54−1によるカウントデータcountdat 1とカウンタ54−2によるカウントデータcountdat 2が等しいときendsigj=eq7、カウンタ54−2によるカウントデータcountdat 2とカウンタ54−0によるカウントデータcountdat 0が等しいときendsigj=eq8を設定する。
比較器56−0は、制御信号CNT0ENDMDの値に応じて、比較器55の出力信号endsig0の値から、信号countend 0を生成し、セレクタ53−0、比較器57−1,57−2、および制御信号生成器61に出力する。
具体的には、比較器56−0は、制御信号CNT0ENDMDの値と比較器55の出力信号endsig0の値が、一致していれば信号countend 0に真を設定し、一致していなければ信号countend 0に偽を設定する。
比較器56−1は、制御信号CNT1ENDMDの値に応じて、比較器55の出力信号endsig1の値から、信号countend 1を生成し、セレクタ53−1、比較器57−0,57−2、および制御信号生成器61に出力する。
具体的には、比較器56−1は、制御信号CNT1ENDMDの値と比較器55の出力信号endsig1の値が、一致していれば信号countend 1に真を設定し、一致していなければ信号countend 1に偽を設定する。
比較器56−2は、制御信号CNT2ENDMDの値に応じて、比較器55の出力信号endsig2の値から、信号countend 2を生成し、セレクタ53−2、比較器57−0,57−1、および制御信号生成器61に出力する。
具体的には、比較器56−2は、制御信号CNT2ENDMDの値と比較器55の出力信号endsig2の値が、一致していれば信号countend 2に真を設定し、一致していなければ信号countend 2に偽を設定する。
比較器56−xは、比較器55の出力信号endsigxの値から、信号countend xを生成し、セレクタ53−xに出力する。
比較器57−0は、制御信号CNT0INCMDの値に応じて、比較器56−1の出力信号countend 1、および比較器56−2の出力信号countend 2の値から信号countinc 0を生成し、セレクタ53−0に出力する。
具体的には、比較器57−0は、制御信号CNT0INCMDの値に応じて、比較器56−1の出力信号countend 1が真のときに信号countinc 0に真を設定し、偽のときに信号countinc 0に偽を設定する。
または、比較器57−0は、制御信号CNT0INCMDの値に応じて、比較器56−2の出力信号countend 2が真のときに信号countinc 0に真を設定し、偽のときに信号countinc 0に偽を設定する。
または、比較器57−0は、制御信号CNT0INCMDの値に応じて、比較器56−1の出力信号countend 1、かつ比較器56−2の出力信号countend 2が真のときに信号countinc 0に真を設定し、偽のときに信号countinc 0に偽を設定する。
比較器57−1は、制御信号CNT1INCMDの値に応じて、比較器56−2の出力信号countend 2、および比較器56−0の出力信号countend 0の値から信号countinc 1を生成し、セレクタ53−1に出力する。
具体的には、比較器57−1は、制御信号CNT1INCMDの値に応じて、比較器56−2の出力信号countend 2が真のときに信号countinc 1に真を設定し、偽のときに信号countinc 1に偽を設定する。
または、比較器57−1は、制御信号CNT0INCMDの値に応じて、比較器56−0の出力信号countend 0が真のときに信号countinc 1に真を設定し、偽のときに信号countinc 1に偽を設定する。
または、比較器57−1は、制御信号CNT1INCMDの値に応じて、比較器56−2の出力信号countend 2、かつ比較器56−0の出力信号countend 0が真のときに信号countinc 1に真を設定し、偽のときに信号countinc 1に偽を設定する。
比較器57−2は、制御信号CNT2INCMDの値に応じて、比較器56−0の出力信号countend 0、および比較器56−1の出力信号countend 1の値から信号countinc 2を生成し、セレクタ53−2に出力する。
具体的には、比較器57−2は、制御信号CNT2INCMDの値に応じて、比較器56−0の出力信号countend 0が真のときに信号countinc 2に真を設定し、偽のときに信号countinc 2に偽を設定する。
または、比較器57−2は、制御信号CNT2INCMDの値に応じて、比較器56−1の出力信号countend 1が真のときに信号countinc 2に真を設定し、偽のときに信号countinc 2に偽を設定する。
または、比較器57−2は、制御信号CNT2INCMDの値に応じて、比較器56−0の出力信号countend 0、かつ比較器56−1の出力信号countend 1が真のときに信号countinc 2に真を設定し、偽のときに信号countinc 2に偽を設定する。
セレクタ付き演算器58は、制御信号COUNTSUMの値に応じて、カウンタ54−0によるカウントデータcountdat 0、カウンタ54−1によるカウントデータcountdat 1、カウンタ54−2によるカウントデータcountdat 2、カウンタ54−3によるカウントデータcountdat x、および入力信号OFFSETに基づいて信号sumadrを生成し、ビット反転器59、およびマスク生成器60に出力する。
具体的には、演算器58は、制御信号COUNTSUMの値に応じて、以下のいずれかの演算を行う。
(数25)
sumadr=OFFSET+countdat 0、
sumadr=OFFSET+countdat 1、
sumadr=OFFSET+countdat 2、
sumadr=OFFSET+countdat 0+countdat 1、sumadr=OFFSET+countdat 0+countdat 2、sumadr=OFFSET+countdat 1+countdat 2、sumadr=OFFSET+countdat 0+countdat 1
+countdat 2、
sumadr=OFFSET+countdat 0+countdat 1
+countdat 2、
sumadr=OFFSET+countdat 0+countdat 1
*2^(countdat x+1)、
sumadr=OFFSET+countdat 0+countdat 1
*2^(countdat x+1)−1、
sumadr=OFFSET+countdat 0+countdat 1
*2^(countdat x+1)+1、
sumadr=OFFSET+countdat 0+countdat 1
*2^(countdat x+1)
+2^(countdat x)、
sumadr=OFFSET+countdat 0
*2^(COUNTxFIN−countdat x)
ビット反転器59は、制御信号MSKMDの値に応じて、セレクタ付セレクタ付演算器58の生成信号sumadrから信号brvadrを生成し、マスク生成器60に出力する。
具体的には、ビット反転器59は、制御信号MSKMDの値に応じて、mを決定し、信号brvadrにセレクタ付演算器58の生成信号sumadrのLSBからm−1ビットまでのビット反転を設定する。
マスク生成器60は、制御信号MSDMDの値に応じて、ビット反転器59の生成信号brvadr、セレクタ付演算器58の生成信号sumadr、および入力信号MASKに基づいてアドレス信号GENADRを生成する。
具体的には、マスク生成器60は、制御信号MSKMDの値に応じて、ビット反転器59の生成信号brvadrとセレクタ付演算器58の生成信号sumadrの値を選択し、その結果と入力信号MASKの値を各ビット単位でAND(論理積)、OR(論理和)、XOR(排他的論理和)のいずれかの操作を行い、信号GENADRを生成する。
この生成されたアドレス信号GENADRが、たとえば図12の演算システムのデータメモリ46に供給される。
制御信号生成器61は、制御信号CTRLMDの値に応じて、比較器56−0の出力信号countend 0、比較器56−1の出力信号countend 1、および比較器56−2の出力信号countend 2に基づいて制御信号CTRLを生成し、アドレスが生成されている期間はアドレス有効信号VALIDを有効にする。
また、制御信号COUNTENの値に応じて、内部に持つカウンタ54−0、54−1、54−2、および54−xのカウントアップの許可/不許可の制御を行う。
具体的には、制御信号生成器61は、制御信号CTRLMDの値に応じて、
・信号countend 0が真のとき、
・信号countend 1が真のとき、
・信号countend 2が真のとき、
・信号countend 0が真かつ信号countend 1が真のとき、
・信号countend 0が真かつ信号countend 2が真のとき、
・信号countend 1が真かつ信号countend 2が真のとき
のいずれかの場合に制御信号CTRLを有効にし、それ以外のときはCTRLを無効にする。
次に、上記構成によるアドレス生成の具体的な動作を、図14の3重ループの場合を例に、図15に関連付けて説明する。
まず、入力信号として与えられる各カウンタのステップ値、初期値、終了値がそれぞれ以下のように設定される。
ステップ値信号COUNT0STPが「3」に設定されて演算器51−0に供給され、初期値信号COUNT0INIが「0」に設定されて演算器52−0、およびセレクタ53−0に供給され、終了値信号COUNT0FINが「3」に設定されて比較器55に供給される。
同様に、ステップ値信号COUNT1STPが「5」に設定されて演算器51−1に供給され、初期値信号COUNT1INIが「0」に設定されて演算器52−1、およびセレクタ53−1に供給され、終了値信号COUNT1FINが「10」に設定されて比較器55に供給される。
ステップ値信号COUNT2STPが「1」に設定されて演算器51−2に供給され、初期値信号COUNT2INIが「0」に設定されて演算器52−2、およびセレクタ53−2に供給され、終了値信号COUNT2FINが「1」に設定されて比較器55に供給される。
また、初期値信号COUNTxINIが「0」に設定されてセレクタ53−xに供給され、終了値信号COUNTxFINが「0」に設定されて演算器51−xに供給される。
また、制御信号CNT0INIMDは加算の実行を選択するように、演算器51−0に供給される。
同様に、制御信号CNT1INIMDは加算の実行を選択するように、演算器51−1に供給され、制御信号CNT2INIMDは加算の実行を選択するように、演算器51−2に供給される。
さらに、制御信号CNT0RETMDがCOUNT0INIを選択するように設定されて、演算器52−0に供給される。
同様に、制御信号CNT1RETMDがCOUNT1INIを選択するように設定されて演算器52−1に供給され、制御信号CNT2RETMDがCOUNT2INIを選択するように設定されて演算器52−2に供給される。
また、制御信号CNT0ENDMDが、カウンタ54−0のカウントデータcountdat 0と終了値信号COUNT0FINが一致したときの比較器55の出力信号ednsig0を入力したときに、信号countend 0に真を設定するように、比較器56−0に供給される。
同様に、制御信号CNT1ENDMDが、カウンタ54−1のカウントデータcountdat 1と終了値信号COUNT1FINが一致したときの比較器55の出力信号ednsig1を入力したときに、信号countend 1に真を設定するように、比較器56−1に供給される。
そして、制御信号CNT2ENDMDが、カウンタ54−2のカウントデータcountdat 2と終了値信号COUNT2FINが一致したときの比較器55の出力信号ednsig2を入力したときに、信号countend 2に真を設定するように、比較器56−2に供給される。
また、制御信号CNT0INCMDが、比較器57−2の出力信号countend 2が真で、かつ比較器57−1の出力信号countend 1が真であるときに、信号countinc 0に真を設定するように、比較器57−0に供給される。
また、制御信号CNT1INCMDが、比較器57−2の出力信号countend 2が真であるときに、信号countinc 1に真を設定するように、比較器57−1に供給される。
また、制御信号CNT2INCMDが、常に信号countinc 2に真を設定するように、比較器57−2に供給される。
さらに、制御信号COUNTSUMが、カウンタ54−0によるカウントデータcountdat 0の値、カウンタ54−1によるカウントデータcountdat 1の値、およびカウンタ54−2によるカウントデータcountdat 2の値の合計を出力するモードに設定されるように、セレクタ付演算器58に供給される。
また、セレクタ付演算器58に供給される入力信号OFFSET、およびマスク生成器60に供給される入力信号MASKが「0」に設定される。
さらに、制御信号MSKMDが、ビットリバースなし、マスクをしないモードに設定するように、ビット反転器59、およびマスク生成器60に供給される。
このような状態において、アドレス生成装置50が、図示しない制御回路からアドレス生成起動信号を受けて、カウンタ54−0〜54−xが所定のタイミングでカウント動作を開始される。
この場合、カウンタ54−2では、図15(j)に示すように、比較器57−2の出力信号countinc 2が常に真(図15ではハイレベル)、すなわち、常にカウントアップを示しているのでカウントアップはじめ、初期値0にステップ値信号COUNT2STPの値「1」が加えられ、カウントデータcountdat 2は、図15(c)に示すように、0から1となる。
カウンタ54−2のカウントデータcountdat 2が「1」になり、比較器55に供給される。このカウントデータcountdat 2の値「1」は、終了値信号COUNT2FINと等しくなるので、その旨を示す信号endsig2が比較器56−2に供給され、図15(g)に示すように、比較器56−2の出力信号countend 2が真に設定されて比較器57−1,57−0、および制御信号生成器61に供給される。
比較器56−2の出力信号countend 2が真で供給された比較器57−1では、図15(i)に示すように、その出力信号countinc 1が真に設定される。
これにより、カウンタ54−1においてカウントアップが行われ、カウントデータcountdat 1は、図15(b)に示すように「5」になる。
このとき、カウンタ54−2は、制御信号CNT1RETMDに従って、セレクタ53−2を介して初期値0に戻される。
このとき、カウンタ54−0では、図15(h)に示すように、比較器57−0の出力信号countinc 0が偽(図15ではローレベル)であることから、カウントアップ動作が開始されない。
カウンタ54−2のカウントデータcountdat 2が、図15(c)に示すように、再び「1」になると、カウンタ54−1がカウントアップされることを繰り返される。
図15(b)に示すように、カウンタ54−1のカウントデータcountdat 1が「10」になった時点で、終了値信号COUNT1FINと等しくなるので、その旨を示す信号endsig1が比較器56−1に供給され、図15(f)に示すように、比較器56−1の出力信号countend 1が真に設定されて比較器57−0,57−2、および制御信号生成器61に供給される。
比較器56−1の出力信号countend 1が真で供給された比較器57−0では、図15(h)に示すように、その出力信号countinc 0が真に設定される。
これにより、カウンタ54−0においてカウントアップが行われ、カウントデータcountdat 0は、図15(a)にしめすように「0」から「3」に更新される。
生成されるアドレスは、制御信号COUNTSUMを受けたセレクタ付演算器58では、カウンタ54−0のカウントデータcountdat 0、カウンタ54−1のカウントデータcountdat 1、およびカウンタ54−2のカウントデータcountdat 2の合計値を出力するモードになっているので、マスク生成器60から、図15(d)に示すように、アドレス信号GENADRとしてカウンタの合計値が出力される。
さらに、制御信号CTRLMDが、比較器56−1の出力信号countend 1、かつ比較器56−2の出力信号countend 2が真のときに制御信号CTRLを出力するように、制御信号生成器61に供給されると、図15(l)に示すように、両信号が真となるそのタイミングでCTRLが真になる。
以上説明したように、本第11の実施形態によれば、従来のDSPなどではアドレス生成不可能だった複雑なループのネスト、FFTアクセスパターン、ビットリバース等を行おうとする場合に、アドレスを自動生成することができる。このためALUを用いてアドレス計算を行う必要がなくなり、処理に必要なサイクル数が減り効率が良くなる利点がある。
なお、以上の説明では、図14に関連付けて、3重ループの場合を例を説明したが、本発明は、これに限定されるものではなく、カウンタ数の異なる種々の態様が可能であることはいうまでもない。
以下に、カウンタ数が上述した例の拡張である一般的な実現例について説明する。
このアドレス生成装置は、カウンタCounter i,Counter x、演算器INCDECi,INCDECx、セレクタ付き演算器SUMi,ADRSUM、セレクタSELi,SELx、比較器END,ENDi,ENDx,INCi、ビット反転器BRV、およびマスク生成器ADRMSKにより構成される(ただし0≦i≦n−1)。
また、このアドレス生成装置は、入力信号COUNTiSTP,COUNTiINI,COUNTiFIN,COUNTxFIN,OFFSET,MASKと、制御信号CNTilNIMD,CNTiRETMD,CNTiENDMD,CNTiINCMD,CTRLMD,COUNTSUM,MSKMD,COUNTENが供給され、制御信号CTRL、および生成アドレスGENADRを出力する。
ここで、i=0〜n−1のすべてのiについて、カウンタCounter iはカウントデータcountdat iを格納し、カウンタCounter xはカウントデータcountdat xを格納する。
i=0〜n−1のすべてのiについて、演算器INCDECiは制御信号CNTiINIMDの値に応じてステップ値信号COUNTiSTPとカウンタCounter iのカウントデータcountdat iを演算した結果を信号countcal iとして出力、演算器INCDECxは終了値信号COUNTxFINとカウンタCounter xのカウントデータcountdat xを演算した結果を信号countcal xを出力する。
i=0〜n−1のすべてのiについて、セレクタ付き演算器SUMiは制御信号CNTiRETMDの値に応じて初期値信号COUNTiINI、演算器INCDECiの出力信号countcal 0,countcal 1,…,countcal n−1を演算した結果を、セレクタSELiを介してカウンタCounter iに出力する。
i=0〜n−1のすべてのiについて、比較器ENDはカウンタCounter i のカウントデータcountdat 0,countdat 1,…,countcal n−1、カウンタCounter x のカウントデータcountdat x、初期値信号COUNT0INI,COUNT1INI,…,COUNTn−1INI、終了値信号COUNT0FIN,COUNT1FIN,…,COUNTn−1FINの値を演算した結果を信号endsigiとして出力し、また、カウンタCounter i のカウントデータcountdat 0,countdat 1,…,countcal n−1、カウンタCounter x のカウントデータcountdat x、初期値信号COUNT0INI,COUNT1INI,…,COUNTn−1INI、終了値信号COUNT0FIN,COUNT1FIN,…,COUNTn−1FINの値を演算した結果を信号endsigxとして出力する。
i=0〜n−1のすべてのiについて、比較器ENDiは制御信号CNTiENDMDの値に応じて、比較器ENDの出力信号endsigiの値から信号countend iを生成し、比較器ENDxは比較器ENDの出力信号endsigxの値から信号countend xを生成する。
i=0〜n−1のすべてのiについて、比較器INCiは制御信号CNTiINCMDの値に応じて、j=0〜n−1のすべてのj(ただしj!=i)について比較器ENDiの出力信号countend j値から信号countinc 0を生成する。
i=0〜n−1のすべてのiについて、セレクタSELiは比較器INCiの出力信号countinc i、比較器ENDiの出力信号countend iの値に応じて、演算器INCDECiの出力信号countcla i、初期値信号COUNTiINI、演算器SUMiの出力信号countret iの値を選択して、カウンタCounter i のカウントデータcountdat iを設定し、セレクタSELxは比較器ENDxの出力信号countend xの値に応じて、演算器INCDECxの出力信号countcal x、初期値信号COUNTxINIの値を選択して、カウンタCounter x のカウントデータcountdat xを設定する。
セレクタ付演算器ADRSUMは、制御信号COUNTSUMの値に応じて、カウンタCounter i のカウントデータcountdat 0,countdat 1,…,countcal n−1、カウンタCounter x のカウントデータcountdat x、入力信号OFFSETから信号sumadrを生成する。
ビット反転器BRVは、制御信号MSKMDの値に応じてセレクタ付演算器ADRSUMの出力信号sumadrから信号brvadrを生成する。
マスク生成器ADRMSKは、制御信号MSDMDの値に応じビット反転器brvadrとセレクタ付演算器ADRSUMの出力信号sumadrと入力信号MASKからアドレス信号GENADRを生成する。
制御信号生成器CTRLGENは、制御信号CTRLMDの値に応じてカウンタCounter i のカウントデータcountdat 0,countdat 1,…,countcal n−1から制御信号CTRLを生成する。
制御信号生成器CTRLGENは、アドレスが生成されている期間はアドレス有効信号VALIDを有効にする。
そして、上述した構成を有するアドレス生成装置において、i=0〜n−1のすべてのiについて、以下の処理が行われる。
i=0〜n−1のすべてのiについて、演算器INCDECiは、制御信号CNTiINIMDの値に応じて、次のいずれかの演算を行う。
(数26)
countcal i=COUNTiSTP+countdat i、
countcal i=COUNTiSTP−+countdat i
i=0〜n−1のすべてのiについて、セレクタ付演算器SUMiは、制御信号CNTiRETMDの値に応じて、次のいずれかの演算を行う。
(数27)
countret i=COUNTiINI、
countret i=countcal 0、
countret i=countcal 1、
…
countret i=countcal n−1、
countret i=COUNTiINI+countcal 0、
countret i=COUNTiINI+countcal 1、
…
countret i=COUNTiINI+countcal n−1
i=0〜n−1のすべてのiについて、比較器ENDは、カウントデータcountdat 0と初期値信号COUNT0INIが等しいときにendsigi =INI0、カウントデータcountdat 1と初期値信号COUNT1INIが等しいときにendsigi =INI1、…、カウントデータcountdat n−1と初期値信号COUNTn−1INIが等しいときにendsigi =INIn−1を設定する。
同様に、比較器ENDは、カウントデータcountdat 0と終了値信号COUNT0FINが等しいときにendsigi =FIN0、カウントデータcountdat 1と終了値信号COUNT1FINが等しいときにendsigi =FIN1、…、カウントデータcountdat n−1と終了値信号COUNTn−1FINが等しいときにendsigi =FINn−1を設定する。
また、比較器ENDは、カウントデータcountdat 0とcountdat 1が等しいときにendsigi =eq01、カウントデータcountdat 0とcountdat 2が等しいときにendsigi =eq02、…カウントデータcountdat 0とcountdat n−1が等しいときにendsigi
=eqn−1、……、countdat n−1とcountdat n−2が等しいときにendsigi =eqn−1n−2を設定する。
i=0〜n−1のすべてのiについて、比較器ENDiは、制御信号CNTiENDMDの値と信号endsigiの値が一致していれば信号countend iに真を設定し、一致していなければ信号countend iに偽を設定する。
i=0〜n−1のすべてのiについて、比較器INCiは、制御信号CNTiINCMDの値に応じて、j=0〜n−1のすべてのj(ただしj!=i)について、信号countend jが真のときに信号countinc iに真を設定し、信号countend jが偽のときには信号countinc iに偽を設定する。
または、比較器iは、j=0〜n−1のすべてのj(ただしi!=j)とk=0〜n−1のすべてのk(ただしk!=i)について、信号countend jが真で、かつ、信号countend kが真のときに、信号countinc iに真を設定し、そうでないときに信号countinc iに偽を設定する。
セレクタ付演算器ADRSUMは、制御信号COUNTSUMの値に応じてのいずれかの演算を行う。
(数28)
sumadr=OFFSET+countdat 0、
sumadr=OFFSET+countdat 1、
…
sumadr=OFFSET+countdat n−1、
sumadr=OFFSET+countdat 0+countdat 1、sumadr=OFFSET+countdat 0+countdat 2、 …
sumadr=OFFSET+countdat 0+countdat n−1、
sumadr=OFFSET+countdat 1+countdat 2、 …
sumadr=OFFSET+countdat 1
+countdat n−1、
…
sumadr=OFFSET+countdat n−2
+countdat n−1、
sumadr=OFFSET+countdat 0+countdat 1
+countdat 2、
sumadr=OFFSET+countdat 0+countdat 1
*2^(countdat x+1)、
sumadr=OFFSET+countdat 0+countdat 1
*2^(countdat x+1)−1、
sumadr=OFFSET+countdat 0+countdat 1
*2^(countdat x+1)+1、
sumadr=OFFSET+countdat 0+countdat 1
*2^(countdat x+1)
+2^(countdat x)、
sumadr=OFFSET+countdat 0
*2^(COUNTxFIN−countdat x)
ビット反転器BRVは、制御信号MSKMDの値に応じてmを決定し、信号brvadrにセレクタ付演算器ADRSUMの生成信号sumadrのLSBからm−1ビットまでのビット反転を設定する。
マスク生成器ADRMSKは、制御信号MSKMDの値に応じて、ビット反転器BRVの生成信号brvadr、セレクタ付演算器ADRSUMの生成信号sumadrを選択し、その結果と入力信号MASKの値を各ビット単位でAND(論理積)、OR(論理和)、XOR(排他的論理和)のいずれかの操作を行い、信号GENADRを生成する。
制御信号生成器CTRLGENは、制御信号CTRLMDの値に応じて、カウントデータcountdat 0が真のとき、カウントデータcountdat 1が真のとき、…、カウントデータcountdat n−1が真のとき、カウントデータcountdat 0が真かつカウントデータcountdat 1が真のとき、カウントデータcountdat 0が真かつカウントデータcountdat 2が真のとき、…、カウントデータcountdat 0が真かつカウントデータcountdat n−1が真のとき、…、カウントデータcountdat n−2が真かつカウントデータcountdat n−1が真のときのいずれかの場合に制御信号CTRLを有効にし、それ以外のときは制御信号CTRLを無効にし、アドレスが生成されている期間はアドレス有効信号VALIDを有効にする。
また、制御信号COUNTENの値に応じて、内部に持つカウンタCounteri(ただし0≦i≦n−1)、Countex のカウントアップを許可/不許可にする。
以上説明した一般的な例においても、上述した図14の装置の作用効果と同様の作用効果を得ることができる。
第12実施形態
図16は、本発明の第12の実施形態を説明するための図であって、本発明に係るインタリーブ装置のデータ読み出し系の一例を示す構成図である。
本インタリーブ装置70は、特定のアクセスパターンに対して、デュアルポートメモリが必要なアクセスを、シングルポートメモリを用いて実現することが可能な装置であって、FFT演算のデータアクセス等に利用できる。
したがって、本インタリーブ装置70は、たとえば上述した第10の実施形態を示す図12の演算システムのデータメモリから演算装置へのデータ伝送系に適用可能である。
なお、以下の説明では、図示しないシングルポートメモリは、メモリバンクMBNK0とメモリバンクMBNK1を有し、インタリーブ装置70は、メモリバンクMBNK0とメモリバンクMBNK1に対するアクセスを行うものとする。
本インタリーブ装置70は、図16に示すように、第1の遅延装置(DFF0)71−0、第2の遅延装置(DFF1)71−1、第1の選択装置(sel0)72−0、および第2の選択装置(sel1)72−1を有している。
そして、インタリーブ装置70は、メモリバンクMBNK0からの読み出しデータ入力MBNKR0、メモリバンクMBNK1からの読み出しデータ入力MBNKR1、および読み出しデータ出力MEMR0,MEMR1を有し、制御信号mbselr0,mbselr1が供給される。
第1の遅延装置71−0は、たとえばD型フリップフロップにより構成され、1サイクルの遅延を生じさせ、メモリバンクMBNK0からの読み出しデータ入力MBNKR0を1サイクルだけ遅延させ、信号mbnkr0 dとして第1の選択装置72−0、および第2の選択装置72−1に出力する。
第2の遅延装置71−1は、たとえばD型フリップフロップにより構成され、1サイクルの遅延を生じさせ、メモリバンクMBNK1からの読み出しデータ入力MBNKR1を1サイクルだけ遅延させ、信号mbnkr1 dとして第1の選択装置72−0、および第2の選択装置72−1に出力する。
第1の選択装置72−0は、メモリバンクMBNK0からの読み出しデータ入力MBNKR0、メモリバンクMBNK1からの読み出しデータ入力MBNKR1、第1の遅延装置71−0の出力信号mbnkr0 d、および第2の遅延装置71−1の出力信号mbnkr1 dを入力とし、制御信号mbselr0の値に応じて、メモリバンクMBNK0からの読み出しデータ入力MBNKR0、メモリバンクMBNK1からの読み出しデータ入力MBNKR1、第1の遅延装置71−0の出力信号mbnkr0 d、および第2の遅延装置71−1の出力信号mbnkr1 dのうちのいずれかの値を、読み出しデータ出力MEMR0として選択する。
第2の選択装置72−1は、メモリバンクMBNK0からの読み出しデータ入力MBNKR0、メモリバンクMBNK1からの読み出しデータ入力MBNKR1、第1の遅延装置71−0の出力信号mbnkr0 d、および第2の遅延装置71−1の出力信号mbnkr1 dを入力とし、制御信号mbselr1の値に応じて、メモリバンクMBNK0からの読み出しデータ入力MBNKR0、メモリバンクMBNK1からの読み出しデータ入力MBNKR1、第1の遅延装置71−0の出力信号mbnkr0 d、および第2の遅延装置71−1の出力信号mbnkr1 dのうちのいずれかの値を、読み出しデータ出力MEMR1として選択する。
次に、上記構成による動作を、図17に関連付けて説明する。
図17は、図16の読み出し系インタリーブ装置の動作を説明するためのタイミングチャートである。
このタイミングチャートは、はじめの2サイクル(cycle0,cycle1)は通常のメモリアクセス、すなわち読み出しデータ出力MEMR0にメモリバンクMBNK0からの読み出しデータ入力MBNKR0を送り、読み出しデータ出力MEMR1にメモリバンクMBNK1から読み出したデータMBNKR1を送るアクセスを表し、残りのサイクル(cycle2〜)は読み出しデータ出力MEMR0,MEMR1で1サイクル中にメモリバンクMBNK0からの読み出しデータ入力MBNKR0を同時に利用、あるいは1サイクル中にメモリバンクMBNK1からの読み出しデータ入力MBNKR1のデータを同時に利用する場合を表している。
図17(a)に示すように、サイクル(cycle)0でメモリバンクMBNK0から読み出したデータ入力MBNKR0はeven0のデータになる。
cycle1で読み出しデータ入力MBNKR0はeven1になり、メモリバンクMBNK1からの読み出しデータ入力MBNKR1は、図17(b)に示すように、odd0になる。
そして、読み出しデータ入力MBNKR0は、そのまま直接に第1の選択装置72−0、および第2の選択装置72−1に入力され、かつ、第1の遅延装置71−0で1サイクルだけ遅延され、信号mbnkr0 dとして第1の選択装置72−0、および第2の選択装置72−1に入力される。
同様に、読み出しデータ入力MBNKR1は、そのまま直接に第1の選択装置72−0、および第2の選択装置72−1に入力され、かつ、第2の遅延装置71−1で1サイクルだけ遅延され、信号mbnkr1 dとして第1の選択装置72−0、および第2の選択装置72−1に入力される。
そして、図17(c),(d)に示すように、cycle1では、読み出しデータ出力MEMR0とMEMR1としてデータeven0、odd0を出力するため、制御信号mbselr0が、図17(e)に示すように、データ入力MBNKR0の1サイクル遅延を生じさせた信号mbnkr0 dを選択するように、第1の選択装置72−0に供給される。これにより、第1の選択装置72−0の読み出しデータ出力MEMR0は、データeven0となる。
同様に、制御信号mbselr1が、図17(f)に示すように、データ入力MBNKR1を選択するように、第2の選択装置72−1に供給される。これにより、第2の選択装置72−1の読み出しデータ出力MEMR1は、データodd0となる。
cycle2では、読み出しデータ入力MBNKR0は、図17(a)に示すように、データeven2となり、読み出しデータ入力MBNKR1は、図17(b)に示すように、データodd1になる。
そして、図17(c),(d)に示すように、cycle2では、読み出しデータ出力MEMR0とMEMR1としてデータeven1、odd1を出力するため、制御信号mbselr0が、図17(e)に示すように、データ入力MBNKR0の1サイクル遅延を生じさせた信号mbnkr0 dを選択するように、第1の選択装置72−0に供給される。これにより、第1の選択装置72−0の読み出しデータ出力MEMR0は、データeven1となる。
同様に、制御信号mbselr1が、図17(f)に示すように、データ入力MBNKR1を選択するように、第2の選択装置72−1に供給される。これにより、第2の選択装置72−1の読み出しデータ出力MEMR1は、データodd1となる。
cycle3では、読み出しデータ入力MBNKR0は、図17(a)に示すように、データeven3となり、読み出しデータ入力MBNKR1は、図17(b)に示すように、データodd2になる。
そして、図17(c),(d)に示すように、cycle3では、読み出しデータ出力MEMR0とMEMR1としてデータeven2、odd3を出力するため、制御信号mbselr0が、図17(e)に示すように、データ入力MBNKR0の1サイクル遅延を生じさせた信号mbnkr0 dを選択するように、第1の選択装置72−0に供給される。これにより、第1の選択装置72−0の読み出しデータ出力MEMR0は、データeven2となる。
同様に、制御信号mbselr1が、図17(f)に示すように、データ入力MBNKR0を選択するように、第2の選択装置72−1に供給される。これにより、第2の選択装置72−1の読み出しデータ出力MEMR1は、データeven3となる。
cycle4では、読み出しデータ入力MBNKR0は、図17(a)に示すように、データeven4となり、読み出しデータ入力MBNKR1は、図17(b)に示すように、データodd3になる。
そして、図17(c),(d)に示すように、cycle4では、読み出しデータ出力MEMR0とMEMR1としてデータodd2、odd3を出力するため、制御信号mbselr0が、図17(e)に示すように、データ入力MBNKR1の1サイクル遅延を生じさせた信号mbnkr1 dを選択するように、第1の選択装置72−0に供給される。これにより、第1の選択装置72−0の読み出しデータ出力MEMR0は、データodd2となる。
同様に、制御信号mbselr1が、図17(f)に示すように、データ入力MBNKR1を選択するように、第2の選択装置72−1に供給される。これにより、第2の選択装置72−1の読み出しデータ出力MEMR1は、データodd3となる。
以上説明したように、本第12の実施形態によれば、メモリバンクMBNK0からの読み出しデータ入力MBNKR0を1サイクルだけ遅延させ、信号mbnkr0 dとして第1の選択装置72−0、および第2の選択装置72−1に出力する第1の遅延装置71−0と、1サイクルの遅延を生じさせ、メモリバンクMBNK1からの読み出しデータ入力MBNKR1を1サイクルだけ遅延させ、信号mbnkr1 dとして第1の選択装置72−0、および第2の選択装置72−1に出力する第2の遅延装置71−1と、制御信号mbselr0の値に応じて、メモリバンクMBNK0からの読み出しデータ入力MBNKR0、メモリバンクMBNK1からの読み出しデータ入力MBNKR1、第1の遅延装置71−0の出力信号mbnkr0 d、および第2の遅延装置71−1の出力信号mbnkr1 dのうちのいずれかの値を、読み出しデータ出力MEMR0として選択する第1の選択装置72−0と、制御信号mbselr1の値に応じて、メモリバンクMBNK0からの読み出しデータ入力MBNKR0、メモリバンクMBNK1からの読み出しデータ入力MBNKR1、第1の遅延装置71−0の出力信号mbnkr0 d、および第2の遅延装置71−1の出力信号mbnkr1 dのうちのいずれかの値を、読み出しデータ出力MEMR1として選択する第2の選択装置72−1とを設けたので、デュアルポートメモリ(2R2Wメモリ)が必要な状況でも、特定のアクセスパターンの場合にはシングルポートメモリ(1R1Wメモリ)を用いて同等の機能を実現することができる。
これにより、メモリ面積の削減、プロセスポータビリティの向上が可能になり、しかも連続したメモリアクセスを実現できる利点がある。
第13実施形態
図18は、本発明の第13の実施形態を説明するための図であって、本発明に係るインタリーブ装置のデータ書き込み系の一例を示す構成図である。
本インタリーブ装置80は、特定のアクセスパターンに対して、デュアルポートメモリが必要なアクセスを、シングルポートメモリを用いて実現することが可能な装置であって、FFT演算のデータアクセス等に利用できる。
したがって、本インタリーブ装置80は、たとえば上述した第10の実施形態を示す図12の演算システムの演算装置の演算結果のデータメモリへの書き込みデータのデータ伝送系に適用可能である。
なお、以下の説明でも、図示しないシングルポートメモリは、メモリバンクMBNK0とメモリバンクMBNK1を有し、インタリーブ装置80は、メモリバンクMBNK0とメモリバンクMBNK1に対するアクセスを行うものとする。
本インタリーブ装置80は、図18に示すように、第1の遅延装置(DFF0)81−0、第2の遅延装置(DFF1)81−1、第1の選択装置(sel0)82−0、および第2の選択装置(sel1)82−1を有している。
そして、インタリーブ装置80は、系列0からの書き込みデータ入力MEMW0、系列1からの書き込みデータ入力MEMW1、メモリバンクMBNK0への書き込みデータ出力MBNKW0、およびメモリバンクMBNK1への書き込みデータ出力MBNKW1を有し、制御信号mbselw0,mbselw1が供給される。
第1の遅延装置81−0は、たとえばD型フリップフロップにより構成され、1サイクルの遅延を生じさせ、系列0からの書き込みデータ入力MEMW0を1サイクルだけ遅延させ、信号memw0 dとして第1の選択装置82−0、および第2の選択装置82−1に出力する。
第2の遅延装置81−1は、たとえばD型フリップフロップにより構成され、1サイクルの遅延を生じさせ、系列1からの書き込みデータ入力MEMW1を1サイクルだけ遅延させ、信号memw1 dとして第1の選択装置82−0、および第2の選択装置82−1に出力する。
第1の選択装置82−0は、系列0からの書き込み入力MEMW0、系列1からの書き込みデータ入力MEMW1、第1の遅延装置81−0の出力信号memw0 d、および第2の遅延装置81−1の出力信号memw1 dを入力とし、制御信号mbselw0の値に応じて、系列0からの書き込み入力MEMW0、系列1からの書き込みデータ入力MEMW1、第1の遅延装置81−0の出力信号memw0 d、および第2の遅延装置81−1の出力信号memw1 dのうちのいずれかの値を、書き込みデータ出力MBNKW0として選択する。
第2の選択装置82−1は、系列0からの書き込み入力MEMW0、系列1からの書き込みデータ入力MEMW1、第1の遅延装置81−0の出力信号memw0 d、および第2の遅延装置81−1の出力信号memw1 dを入力とし、制御信号mbselw1の値に応じて、系列0からの書き込み入力MEMW0、系列1からの書き込みデータ入力MEMW1、第1の遅延装置81−0の出力信号memw0 d、および第2の遅延装置81−1の出力信号memw1 dのうちのいずれかの値を、書き込みデータ出力MBNKW1として選択する。
次に、上記構成による動作を、図19に関連付けて説明する。
図19は、図18の書き込み系インタリーブ装置の動作を説明するためのタイミングチャートである。
このタイミングチャートは、はじめの2サイクル(cycle0,cycle1)は通常のメモリアクセス、すなわちメモリバンクMBNK0への書き込みデータ出力MBNKW0に系列0からの書き込みデータ入力MEMW0を送り、メモリバンクMBNK1への書き込みデータ出力MBNKW1に系列1からの書き込みデータ入力MEMW1を送るアクセスを表し、残りのサイクル(cycle2〜)は書き込みデータ入力MEMW0,MEMW1が同時に書き込みデータ出力MBNKW0、あるいは書き込みデータ出力MBNKW1としてメモリバンクMBNK0、MBNK1に書き込みをする必要があることを表している。
サイクル(cycle)0で、系列0からの書き込みデータ入力MEMW0は、図19(a)に示すように、even0のデータになる。また、系列1からの書き込みデータ入力MEMW1は、図19(b)に示すように、odd0のデータになる。
そして、書き込みデータ入力MEMW0は、そのまま直接に第1の選択装置82−0、および第2の選択装置82−1に入力され、かつ、第8の遅延装置81−0で1サイクルだけ遅延され、信号memw0 dとして第1の選択装置82−0、および第2の選択装置82−1に入力される。
同様に、書き込みデータ入力MEMW1は、そのまま直接に第1の選択装置82−0、および第2の選択装置82−1に入力され、かつ、第2の遅延装置81−1で1サイクルだけ遅延され、信号memw1 dとして第1の選択装置82−0、および第2の選択装置82−1に入力される。
そして、図19(c),(d)に示すように、cycle0では、書き込みデータ出力MBNKW0としてデータeven0を出力するため、制御信号mbselw0が、図17(e)に示すように、データ入力MEMW0を選択するように、第1の選択装置82−0に供給される。これにより、第1の選択装置82−0の書き込みデータ出力MBNKW0は、データeven0となる。
cycle1で、系列0からの書き込みデータ入力MEMW0は、図19(a)に示すように、even1のデータになる。また、系列1からの書き込みデータ入力MEMW1は、図19(b)に示すように、odd1のデータになる。
そして、図19(c),(d)に示すように、cycle1では、書き込みデータ出力MBNKW0としてデータeven1を出力するため、制御信号mbselw0が、図19(e)に示すように、データ入力MEMW0を選択するように、第1の選択装置82−0に供給される。これにより、第1の選択装置82−0の書き込みデータ出力MBNKW0は、データeven1となる。
同様に、制御信号mbselw1が、図19(f)に示すように、データ入力MEMW1の1サイクル遅延を生じさせた信号memw1 dを選択するように、第2の選択装置82−1に供給される。これにより、第2の選択装置82−1の書き込みデータ出力MBNKW1は、データodd0となる。
cycle2で、系列0からの書き込みデータ入力MEMW0は、図19(a)に示すように、even2のデータになる。また、系列1からの書き込みデータ入力MEMW1は、図19(b)に示すように、even3のデータになる。
そして、図19(c),(d)に示すように、cycle2では、書き込みデータ出力MBNKW0としてデータeven2を出力するため、制御信号mbselw0が、図19(e)に示すように、データ入力MEMW0を選択するように、第1の選択装置82−0に供給される。これにより、第1の選択装置82−0の書き込みデータ出力MBNKW0は、データeven2となる。
同様に、制御信号mbselw1が、図19(f)に示すように、データ入力MEMW1の1サイクル遅延を生じさせた信号memw1 dを選択するように、第2の選択装置82−1に供給される。これにより、第2の選択装置82−1の書き込みデータ出力MBNKW1は、データodd1となる。
cycle3で、系列0からの書き込みデータ入力MEMW0は、図19(a)に示すように、odd2のデータになる。また、系列1からの書き込みデータ入力MEMW1は、図19(b)に示すように、odd3のデータになる。
そして、図19(c),(d)に示すように、cycle3では、書き込みデータ出力MBNKW0としてデータeven3を出力するため、制御信号mbselw0が、図19(e)に示すように、データ入力MEMW1の1サイクル遅延を生じさせた信号memw1 dを選択するように、第1の選択装置82−0に供給される。これにより、第1の選択装置82−0の書き込みデータ出力MBNKW0は、データeven3となる。
同様に、制御信号mbselw1が、図19(f)に示すように、データ入力MEMW0を選択するように、第2の選択装置82−1に供給される。これにより、第2の選択装置82−1の書き込みデータ出力MBNKW1は、データodd2となる。
以下、cycle2とcycle3の内容を繰り返す。
以上説明したように、本第13の実施形態によれば、系列0からの書き込みデータ入力MEMW0を1サイクルだけ遅延させ、信号memw0 dとして第1の選択装置82−0、および第2の選択装置82−1に出力する第1の遅延装置81−0と、系列1からの書き込みデータ入力MEMW1を1サイクルだけ遅延させ、信号memw1 dとして第1の選択装置82−0、および第2の選択装置82−1に出力する第2の遅延装置81−1と、制御信号mbselw0の値に応じて、系列0からの書き込み入力MEMW0、系列1からの書き込みデータ入力MEMW1、第1の遅延装置81−0の出力信号memw0 d、および第2の遅延装置81−1の出力信号memw1 dのうちのいずれかの値を、書き込みデータ出力MBNKW0として選択する第1の選択装置82−0と、制御信号mbselw1の値に応じて、系列0からの書き込み入力MEMW0、系列1からの書き込みデータ入力MEMW1、第1の遅延装置81−0の出力信号memw0 d、および第2の遅延装置81−1の出力信号memw1 dのうちのいずれかの値を、書き込みデータ出力MBNKW1として選択する第2の選択装置82−1とを設けたので、上述した第12の実施形態と同様に、デュアルポートメモリ(2R2Wメモリ)が必要な状況でも、特定のアクセスパターンの場合にはシングルポートメモリ(1R1Wメモリ)を用いて同等の機能を実現することができる。
これにより、メモリ面積の削減、プロセスポータビリティの向上が可能になり、しかも連続したメモリアクセスを実現できる利点がある。
第14実施形態
図20は、本発明の第14の実施形態を説明するための図であって、本発明に係るインタリーブ装置のデータ読み出し系の一般化した例を示す構成図である。
本第14の実施形態は、上述した遅延装置および選択装置を2個ずつ持つ第12の実施形態を一般化して、n個の読み出しデータ入力MBNKR0〜MBNKRn−1に対してそれぞれ、n個ずつの遅延装置71A−00〜71A−0n−1、…、71A−(n−1)0〜71A−(n−1)n−1をもち、各遅延装置71A−00〜71A−0n−1、…、71A−(n−1)0〜71A−(n−1)n−1の遅延信号mbnkr0 1d〜mbnkr0 nd、mbnkr1 1d〜mbnkr1 ndをn個の選択装置72A−0〜72A−n−1に対して並列に入力させた構成となっている。
すなわち、本インタリーブ装置70Aは、n×n個の第1の遅延装置71A−00〜71A−0n−1、…、第nの遅延装置71A−(n−1)0〜71A−(n−1)n−1、およびn個の第1〜第nの選択装置72A−0〜72A−n−1を有している。
そして、インタリーブ装置70Aは、メモリバンクMBNK0からの読み出しデータ入力MBNKR0、メモリバンクMBNK1からの読み出しデータ入力MBNKR1、…、メモリバンクMBNKn−1からの読み出しデータ入力MBNKRn−1、および読み出しデータ出力MEMR0〜MEMRn−1を有し、制御信号mbselr0,mbselr1、…、mbseln−1が供給される。
第1の遅延装置71A−00は、たとえばD型フリップフロップにより構成され、任意のk(0≦k≦n−1)について、mサイクル(1≦m≦n)の遅延を生じさせる遅延装置であって、メモリバンクMBNK0からの読み出しデータ入力MBNKR0をmサイクルだけ遅延させ、信号mbnkr0 1dとして第1〜第nの選択装置72A−0〜72A−n−1に出力する。
第1の遅延装置71A−01は、たとえばD型フリップフロップにより構成され、任意のk(0≦k≦n−1)について、mサイクル(1≦m≦n)の遅延を生じさせる遅延装置であって、メモリバンクMBNK0からの読み出しデータ入力MBNKR0をmサイクルだけ遅延させ、信号mbnkr0 2dとして第1〜第nの選択装置72A−0〜72A−n−1に出力する。
同様にして、第1の遅延装置71A−0n−1は、たとえばD型フリップフロップにより構成され、任意のk(0≦k≦n−1)について、mサイクル(1≦m≦n)の遅延を生じさせる遅延装置であって、メモリバンクMBNK0からの読み出しデータ入力MBNKR0をmサイクルだけ遅延させ、信号mbnkr0 ndとして第1〜第nの選択装置72A−0〜72A−n−1に出力する。
第nの遅延装置71A−(n−1)0は、たとえばD型フリップフロップにより構成され、任意のk(0≦k≦n−1)について、mサイクル(1≦m≦n)の遅延を生じさせる遅延装置であって、メモリバンクMBNKn−1からの読み出しデータ入力MBNKRn−1をmサイクルだけ遅延させ、信号mbnkrn−1 1dとして第1〜第nの選択装置72A−0〜72A−n−1に出力する。
第nの遅延装置71A−(n−1)1は、たとえばD型フリップフロップにより構成され、任意のk(0≦k≦n−1)について、mサイクル(1≦m≦n)の遅延を生じさせる遅延装置であって、メモリバンクMBNKn−1からの読み出しデータ入力MBNKRn−1をmサイクルだけ遅延させ、信号mbnkrn−1 2dとして第1〜第nの選択装置72A−0〜72A−n−1に出力する。
同様にして、第nの遅延装置71A−(n−1)n−1は、たとえばD型フリップフロップにより構成され、任意のk(0≦k≦n−1)について、mサイクル(1≦m≦n)の遅延を生じさせる遅延装置であって、メモリバンクMBNKn−1からの読み出しデータ入力MBNKRn−1をmサイクルだけ遅延させ、信号mbnkrn−1 ndとして第1〜第nの選択装置72A−0〜72A−n−1に出力する。
第1の選択装置72A−0は、メモリバンクMBNK0からの読み出しデータ入力MBNKR0、メモリバンクMBNK1からの読み出しデータ入力MBNKR1、…、メモリバンクMBNKn−1からの読み出しデータ入力MBNKRn−1、第1の遅延装置71A−00〜71A−0n−1の出力信号mbnkr0 1d〜mbnkr0 nd、…,第nの遅延装置71A−(n−1)0〜71A−(n−1)n−1の出力信号mbnkr1 1d〜mbnkr1 ndを入力とし、制御信号mbselr0の値に応じて、メモリバンクMBNK0からの読み出しデータ入力MBNKR0、メモリバンクMBNK1からの読み出しデータ入力MBNKR1、…、メモリバンクMBNKn−1からの読み出しデータ入力MBNKRn−1、第1の遅延装置71A−00〜71A−0n−1の出力信号mbnkr0 1d〜mbnkr0 nd、…、第nの遅延装置71A−(n−1)0〜71A−(n−1)n−1の出力信号mbnkr1 1d〜mbnkr1 ndのうちのいずれかの値を、読み出しデータ出力MEMR0として選択する。
同様にして、第1の選択装置72A−n−1は、メモリバンクMBNK0からの読み出しデータ入力MBNKR0、メモリバンクMBNK1からの読み出しデータ入力MBNKR1、…、メモリバンクMBNKn−1からの読み出しデータ入力MBNKRn−1、第1の遅延装置71A−00〜71A−0n−1の出力信号mbnkr0 1d〜mbnkr0 nd、…、第nの遅延装置71A−(n−1)0〜71A−(n−1)n−1の出力信号mbnkr1 1d〜mbnkr1 ndを入力とし、制御信号mbselrn−1の値に応じて、メモリバンクMBNK0からの読み出しデータ入力MBNKR0、メモリバンクMBNK1からの読み出しデータ入力MBNKR1、…、メモリバンクMBNKn−1からの読み出しデータ入力MBNKRn−1、第1の遅延装置71A−00〜71A−0n−1の出力信号mbnkr0 1d〜mbnkr0 nd、…,第nの遅延装置71A−(n−1)0〜71A−(n−1)n−1の出力信号mbnkr1 1d〜mbnkr1 ndのうちのいずれかの値を、読み出しデータ出力MEMRn−1として選択する。
以上の構成を有するインタリーブ装置70Aにおいては、上述したように、n個の読み出しデータ入力MBNKR0〜MBNKRn−1に対してそれぞれ、n個ずつの遅延装置71A−00〜71A−0n−1、…、71A−(n−1)0〜71A−(n−1)n−1をもち、各遅延装置71A−00〜71A−0n−1、…、71A−(n−1)0〜71A−(n−1)n−1の遅延信号mbnkr0 1d〜mbnkr0 nd、mbnkr1 1d〜mbnkr1 ndをn個の選択装置72A−0〜72A−n−1に対して並列に入力させた構成となっている以外は、第12の実施形態と同様であり、各部の機能も同様であることから、動作については、そのタイミングチャートを図21に示し、ここでは詳細な説明は省略する。
したがって、本第14の実施形態によれば、上述した第12の実施形態と同様に、デュアルポートメモリ(2R2Wメモリ)が必要な状況でも、特定のアクセスパターンの場合にはシングルポートメモリ(1R1Wメモリ)を用いて同等の機能を実現することができる。
これにより、メモリ面積の削減、プロセスポータビリティの向上が可能になり、しかも連続したメモリアクセスを実現できる利点がある。
第15実施形態
図22は、本発明の第15の実施形態を説明するための図であって、本発明に係るインタリーブ装置のデータ書き込み系の一般化した例を示す構成図である。
本第15の実施形態は、上述した遅延装置および選択装置を2個ずつ持つ第12の実施形態の一般化して、n−1個の読み出しデータ入力MBNKR1〜MBNKRn−1に対してそれぞれ第2の遅延装置81A−1、…、第nの遅延装置81A−n−1をもち、各遅延装置81A−1〜81A−n−1の遅延信号memw1 1d〜memwn−1 n−1dをn個の選択装置82A−0〜82A−n−1に対して並列に入力させた構成となっている。
すなわち、本インタリーブ装置80Aは、n−1個の第2〜第nの遅延装置81A−1〜81A−n−1、およびn個の第1〜第nの選択装置82A−0〜82A−n−1を有している。
そして、インタリーブ装置80Aは、系列0からの書き込みデータ入力MEMW0、系列1からの書き込みデータ入力MEMW1、…、系列n−1からの書き込みデータ入力MEMWn−1、メモリバンクMBNK0への書き込みデータ出力MBNKW0、メモリバンクMBNK1への書き込みデータ出力MBNKW1、…、メモリバンクMBNKn−1への書き込みデータ出力MBNKWn−1を有し、制御信号mbselw0,mbselw1、…、mbselwn−1が供給される。
第2の遅延装置81A−1は、たとえばD型フリップフロップにより構成され、任意のk(0≦k≦n−1)について、mサイクル(1≦m≦n)の遅延を生じさせる遅延装置であって、系列1からの書き込みデータ入力MEMW1を1サイクルだけ遅延させ、信号memw1 dとして第1の選択装置82A−0〜第nの選択装置82A−n−1に出力する。
同様にして、第nの遅延装置81A−n−1は、たとえばD型フリップフロップにより構成され、任意のk(0≦k≦n−1)について、mサイクル(1≦m≦n)の遅延を生じさせる遅延装置であって、系列n−1からの書き込みデータ入力MEMWn−1を1サイクルだけ遅延させ、信号memwn−1 n−1dとして第1の選択装置82A−0〜第nの選択装置82A−n−1に出力する。
第1の選択装置82A−0は、系列0からの書き込み入力MEMW0、系列1からの書き込みデータ入力MEMW1、…、系列n−1からの書き込みデータ入力MEMWn−1、第2の遅延装置81A−1の出力信号memw1 1d、…、第nの遅延装置81A−n−1の出力信号memwn−1 n−1dを入力とし、制御信号mbselw0の値に応じて、系列0からの書き込み入力MEMW0、系列1からの書き込みデータ入力MEMW1、…、系列n−1からの書き込みデータ入力MEMWn−1、第2の遅延装置81A−1の出力信号memw1 1d、…、第nの遅延装置81A−n−1の出力信号memwn−1 n−1dのうちのいずれかの値を、書き込みデータ出力MBNKW0として選択する。
第2の選択装置82A−1は、系列0からの書き込み入力MEMW0、系列1からの書き込みデータ入力MEMW1、…、系列n−1からの書き込みデータ入力MEMWn−1、第2の遅延装置81A−1の出力信号memw1 1d、…、第nの遅延装置81A−n−1の出力信号memwn−1 n−1dを入力とし、制御信号mbselw1の値に応じて、系列0からの書き込み入力MEMW0、系列1からの書き込みデータ入力MEMW1、…、系列n−1からの書き込みデータ入力MEMWn−1、第2の遅延装置81A−1の出力信号memw1 1d、…、第nの遅延装置81A−n−1の出力信号memwn−1 n−1dのうちのいずれかの値を、書き込みデータ出力MBNKW1として選択する。
同様にして、第nの選択装置82A−n−1は、系列0からの書き込み入力MEMW0、系列1からの書き込みデータ入力MEMW1、…、系列n−1からの書き込みデータ入力MEMWn−1、第2の遅延装置81A−1の出力信号memw1 1d、…、第nの遅延装置81A−n−1の出力信号memwn−1 n−1dを入力とし、制御信号mbselwn−1の値に応じて、系列0からの書き込み入力MEMW0、系列1からの書き込みデータ入力MEMW1、…、系列n−1からの書き込みデータ入力MEMWn−1、第2の遅延装置81A−1の出力信号memw1 1d、…、第nの遅延装置81A−n−1の出力信号memwn−1 n−1dのうちのいずれかの値を、書き込みデータ出力MBNKWn−1として選択する。
以上の構成を有するインタリーブ装置80Aにおいては、上述したように、第13の実施形態を一般化して、n−1個の読み出しデータ入力MBNKR1〜MBNKRn−1に対してそれぞれ第2の遅延装置81A−1、…、第nの遅延装置81A−n−1をもち、各遅延装置81A−1〜81A−n−1の遅延信号memw1 1d〜memwn−1 n−1dをn個の選択装置82A−0〜82A−n−1に対して並列に入力させた構成となっている以外は、第13の実施形態と同様であり、各部の機能も同様であることから、動作については、そのタイミングチャートを図23に示し、ここでは詳細な説明は省略する。
したがって、本第15の実施形態によれば、上述した第13の実施形態と同様に、デュアルポートメモリ(2R2Wメモリ)が必要な状況でも、特定のアクセスパターンの場合にはシングルポートメモリ(1R1Wメモリ)を用いて同等の機能を実現することができる。
これにより、メモリ面積の削減、プロセスポータビリティの向上が可能になり、しかも連続したメモリアクセスを実現できる利点がある。
第16実施形態
図24は、本発明の第16の実施形態に係る演算システムを示す構成図である。
本演算システム90では、たとえば上述した第1の実施形態〜第9の実施形態に係る演算器の配列や、演算実行時の係数パラメータ等を、構成情報に基づいて再構成可能な演算装置が用いられる。
そして、本演算システム90は、演算実行部、演算実行部の再構成のための構成情報を格納する構成情報記憶部を含み、この構成情報記憶部は、CPUを用い演算実行部の構成情報の書き換えにおいて、複数の構成情報を記憶するためにリング状に構成された記憶部を持ち、演算実行時に使用する構成情報記憶部と、書き換えを行うための構成情報記憶部とを分離し、構成情報の書き換えに伴うオーバーヘッドを低減し、または、高速に複数の構成を切り換えることができるように構成される。
具体的には、本演算システム90は、図24に示すように、制御回路としてのCPU91、構成情報記憶部92、および演算実行部93を主構成要素として有している。
CPU91は、たとえばバスを介して、構成情報記憶部92に対してアクセスすることが可能になっている。
そして、CPU91は、演算実行部93の再構成のための構成情報CDを、書き込み信号CWRを用いて構成情報記憶部92に書き込む。
また、CPU91は、シフト信号CEXを用いて演算実行部93の再構成のための構成情報を既に記憶されている他の情報に変更させる。
構成情報記憶部92は、CPU91からバスを介して構成情報が書き込まれ、、書き込まれた構成情報を演算実行部93に出力する。
構成情報記憶部92は、図24に示すように、たとえば「構成情報1」、「構成情報2」、…という各構成情報の記憶部が、それぞれ複数の構成情報を保持できるようにしている。
その中の1つは演算実行時の構成情報を記憶するため、別の1つは外部からの構成情報の書き込みを行うための記憶領域となる。
さらに、これらの構成情報の内容は一斉に瞬時に入れ替えが可能になっている。
これにより、演算実行部93が演算を行っている間に、別のページの内容を同時に書き換えることができ、従来、図25(a)に示すように、構成情報の書き換えに必要な時間的オーバーヘッドが大きかったという問題が、図25(b)に示すように、構成情報の書き換えに必要な時間的オーバーヘッドを、演算の実行時間の裏側に隠蔽することができる。
図26は、4つの構成情報を保持することができる構成情報記憶部の構成例を示す図である。
この構成情報記憶部92は、図26に示すように、レジスタ921〜924、選択装置925、およびORゲート926を有している。
また、図26において、TCDは構成情報CDの入力端子、TCWR は書き込み信号CWRの入力端子、TCEX はシフト信号CEXの入力端子、TCCLKはクロック入力端子、TOUT は記憶した構成情報の演算実行部93への出力端子をそれぞれ示している。
レジスタ921〜924(CD1〜CD4)は、構成情報を記憶するためのレジスタであり、これらのレジスタ921〜924はリング状に接続されている。
具体的には、レジスタ921の出力がレジスタ924の入力、および構成情報の出力端子TOUT に接続され、レジスタ924の出力がレジスタ923の入力に接続され、レジスタ923の出力が選択装置925の第1の入力端子「0」を介してレジスタ922の入力に接続され、レジスタ922の出力がレジスタ921の入力に接続されている。
また、選択装置925の第2の入力端子「1」が構成情報CDの入力端子TCDに接続されている。選択装置925の制御端子が書き込み信号CWRの入力端子TCWR に接続されている。
選択装置925は、書き込み信号CWRが論理「1」で制御端子に供給されると入力端子TCDに入力される構成情報CDを選択して、レジスタ922に入力させる。
一方、選択装置925は、書き込み信号CWRが論理「0」で制御端子に供給されるとレジスタ923の出力情報を選択して、レジスタ922に入力させる。
2入力ORゲート926は、第1の入力端子が書き込み信号CWRの入力端子TCWR に接続され、第2の入力端子がシフト信号CEXの入力端子TCEX に接続され、出力端子がレジスタ922の制御端子に接続されている。
また、レジスタ921,923,924の制御端子はシフト信号CEXの入力端子TCEX に接続されており、また、各レジスタ921〜924のクロック端子がクロック入力端子TCCLKに接続されている。
そして、これらのレジスタ921〜924は、その先に接続される「被再構成部」が必要とする構成情報のビット数を記憶できる。
これらの中で、演算実行部93の構成情報として、レジスタ921(CD1)の内容が使用される。
レジスタ921の出力は、演算実行部93の構成変更回路に直結されているため、この値が書き換えられると演算実行部93のハードウェア構成に即座に反映される。
このため、演算実行部93の動作中に外部からレジスタ921に対して書き込みを行うと実行中の演算結果に影響を与えることになる。
これを避けるために、外部からの構成情報CDの書き込みはレジスタ922(CD2)に対して行われる。
構成情報CDの書き換えは、入力端子TCDに構成情報CDを入力し、書き込み信号CWRを1にすることで行われる。
この書き込み操作では、レジスタ921(CD1)の内容は変化しない。
新たに書き込んだ構成情報CDを演算実行部93の構成に反映するためには、書き込み信号「CWR」を0、シフト信号「CEX」を1にしてレジスタ922(CD2)の内容をレジスタ921(CD1)に転送する。
この時同時に、レジスタ921(CD1)→レジスタ924(CD4)→レジスタ923(CD3)→レジスタ922(CD2)というように構成情報がリングの中でローテーションして保持される。
構成情報CDの入れ替えは、すべての構成情報記憶部92に対して同時に行われるので、クロック「CCLK」1サイクル分で完了する。
また、新しい構成情報を書き込まずに上記の入れ替え操作だけを行えば、リングを構成するレジスタ数分の過去の構成情報を高速に切り替えて再使用することができる。
なお、複数の構成情報を記憶できる記憶部を用意する場合、任意の構成情報を順番に関係なく自由に入れ替え可能にしたいという欲求が生じる場合がある。
しかしそのためには、記憶部の構成情報入れ替え制御手段が複雑になり、システム全体の構成情報の情報量が増えてくると、記憶部が占める面積や消費電力といったオーバーヘッドが無視できなくなってくる。
本第16の実施形態に係るリング状の構成情報の入れ替え手段は、記憶している任意の構成情報CDをすぐに呼び出すことはできないが、記憶部の回路構成と入れ替えのための制御信号を単純化できるという特徴を備える。
記憶している構成情報CDの入れ替えの自由度が制限されるという制約は、1つの信号処理アプリケーション等に含まれる複数の演算処理を、構成を切り替えながら実行するようなケースを考えた場合、再構成がアプリケーションのアルゴリズムにしたがって、決まったパターンで繰り返し行われると考えられ、その限りにおいては間題にならない。
演算実行部93は、たとえば図1に示すような演算装置等と同様の構成を有し、構成情報記憶部92による構成情報に基づいて係数、データ等の経路を選択するための選択装置(SEL)931−0〜931−2、構成情報記憶部92による構成情報(演算内容を指示するための制御信号)に基づいて算術理演算を行うALU932、構成情報記憶部92により構成情報(演算内容を指示するための制御信号)に基づいて積和演算を行うMAC構造の演算器933を有し、構成情報記憶部92による構成情報に基づいて、演算器の配列や、演算実行時の係数パラメータ等を再構成して、指定の演算を行い、この演算結果をたとえば図示しないデータメモリ等に出力する。
次に、上記構成による動作を説明する。
なお、ここでは、構成情報記憶部92の4つのレジスタ921〜924にはそれぞれ構成情報CDが保持されているものとする。
この場合、演算実行部93の構成情報として、構成情報記憶部92のレジスタ921(CD1)の内容が使用される。
レジスタ921の出力は、演算実行部93の構成変更回路に直結されている。このため、演算実行部93においては、構成情報記憶部92による構成情報に基づいて、演算器の配列や、演算実行時の係数パラメータ等が再構成されて、指定の演算が行われる。そして、演算結果がたとえば図示しないデータメモリ等に出力される。
ここで、演算実行部93に供給する構成情報CDの値を書き換える場合には、演算実行部93の動作中に外部からレジスタ921に対して書き込みを行うと実行中の演算結果に影響を与えることになる。
これを避けるために、外部からの構成情報CDの書き込みはレジスタ922(CD2)に対して行われる。
構成情報CDの書き換えは、CPU91から入力端子TCDに構成情報CDが入力され、書き込み信号CWRが「1」に設定される。これにより、レジスタ922に対してCPU91から供給された構成情報CDが書き込まれる。
なお、この書き込み操作では、レジスタ921(CD1)の内容は変化しない。
次に、新たに書き込んだ構成情報CDを演算実行部93の構成に反映するために、CPU91により書き込み信号CWRが「0」、シフト信号CEXが「1」に設定される。これにより、レジスタ922(CD2)の内容がレジスタ921(CD1)に転送される。
この時同時に、レジスタ921(CD1)→レジスタ924(CD4)→レジスタ923(CD3)→レジスタ922(CD2)というように構成情報がリングの中でローテーションして保持される。
構成情報CDの入れ替えは、すべての構成情報記憶部92に対して同時に行われるので、クロック「CCLK」1サイクル分で完了する。
以上説明したように、本第16の実施形態によれば、演算器の配列等のハードウェア構成を再構成可能な演算装置を有する演算システム90において、構成情報を保持する構成情報記憶部92を、リング状に結合した複数のレジスタ921〜924で構成し、その中の一つの構成情報を用いて演算処理を行っている間に、別の構成情報記憶部の内容を書き換えることができるように構成情報書き換え部、および再構成可能な演算実行部93と接続し、また、各レジスタ921〜924に記憶された構成情報は、リング内をローテーションすることによって切り替えが可能としたことから、以下の効果を得られる。
すなわち、演算器が演算処理を実行中であっても、同時に次に使用する構成情報を設定することが可能とし、また、新たな構成情報を書き込まずに、構成の切り替えのみを行うことによって過去に使用した構成情報を再利用可能となる利点がある。
すなわち、ハードウェアの再構成を演算実行と同時に行えるようになり、このオーバーヘッドを、演算の実行時間の裏側に隠蔽できるようになる。
また、複数の構成情報を同時に保持でき、それらを瞬時に切り替えることができる特性により、繰り返し使用される構成情報を同時に記憶しておき、それらを切り替えて使用することで、再構成のためのオーバーヘッドをほぼ「ゼロ」にすることも可能となる利点がある。
なお、本第16の実施形態においては、4つの構成情報を保持できる構成を示しているが、必要に応じて2以上の任意の数の構成情報を保持できるようにしてもよい。
10,10A,10−1〜10−n,10A−1〜10A−3…演算装置、11…第1の選択装置(SELA)、12…第2の選択装置(SELB)、13…第3の選択装置(SELC)、14…ALU、15…MAC、16…第4の選択装置(SELE)、17…レジスタ(REG)、18−0〜18−k…係数入力遅延用FIFO(C0FIFO 〜CkFIFO) 、19−0〜19−m…データ入力遅延用FIFO(D0FIFO 〜DmFIFO) 、20…演算装置、21−0,21−1…シフト演算器(SFT0,SFT1)、22−0,22−1…入力選択装置(RSEL0,RSEL1)、23…バタフライ演算器(BTF0)、24−0,24−1…出力選択装置(DSEL0,DSEL1)、25−0,25−1…出力選択装置(WSEL0,WSEL1)、20A…演算装置、21A−0〜21A−3…シフト演算器(SFT0〜SFT3)、22A−0〜22A−3…入力選択装置(RSEL0〜RSEL3)、23A−0,23A−1…バタフライ演算器(BTF0,BTF1)、24A−0〜24A−3…出力選択装置(DSEL0〜DSEL3)、25A−0〜25A−3…出力選択装置(WSEL0〜WSEL3)、20B…演算装置、23B−2…バタフライ演算器(BTF2)、25B−0〜25B−3…出力選択装置(WSEL0〜WSEL3)、20C…演算装置、22C−0〜22C−15…入力選択装置(RSEL0〜RSEL7,BSEL0〜BSEL7)、23C−0〜23C−7…バタフライ演算器(BTF0〜BTF7)、24C−0〜24A−7…出力選択装置(DSEL0〜DSEL7)、25C−0〜25C−7…出力選択装置(WSEL0〜WSEL7)、20D…演算装置、22D−0〜22D−7…入力選択装置(RSEL0〜RSEL7)、23D−0〜23C−6…バタフライ演算器(BTF0〜BTF6)、24D−0〜24D−7…出力選択装置(DSEL0〜DSEL7)、25D−0〜25D−7…出力選択装置(WSEL0〜WSEL7)、30…演算装置、31…第1の演算装置(PU)、32…第2の演算装置(BTF)、30A…演算装置、31A…第1の演算装置(PU)、32A−0(BTFLa0),…,32A−k(BTFLak)、32B−0(BTFLb0),…,32B−m(BTFLbm)、32C−0(BTFLc0),…,32C−n(BTFLcn)…第2の演算装置、40…演算システム、41…CPU、42…第1の経路選択情報メモリ、43…第2の経路選択情報メモリ、44…選択装置、45…アドレス生成装置、46…データメモリ、47…再構成可能な演算装置、50…アドレス生成装置、51−0〜51−x…演算器(INCDEC0〜INCDECDx)、52−0〜52−2…セレクタ付き演算器(SUM0〜SUM2)、53−0〜53−x…セクレタ(SEL0〜SELx)、54−0〜54−x…カウンタ(Counter0〜Counterx)、55−0…比較器(END)、56−0〜56−x…比較器(END1〜ENDx)、57−0〜57−2…比較器(INC0〜INC2)、58…セレクタ付き演算器(ADRSUM)、59…ビット反転器(BRV)、60…マスク生成器(ADRMSK)、61…制御信号生成器(CTRLGEN)、70…読み出し系インタリーブ装置、71−0…第1の遅延装置(DFF0)、71−1…第2の遅延装置(DFF1)、72−0…第1の選択装置(sel0)、72−1…第2の選択装置(sel1)、80…書き込み系インタリーブ装置、81−0…第1の遅延装置(DFF0)、81−1…第2の遅延装置(DFF1)、82−0…第1の選択装置(sel0)、82−1…第2の選択装置(sel1)、70A…読み出し系インタリーブ装置、71A−00〜71A−0n−1…第1の遅延装置、71A−(n−1)0〜71A−(n−1)n−1…第nの遅延装置、72A−0〜72A−n−1…第1〜第nの選択装置、80A…インタリーブ装置、81A−1〜81A−n−1…第2の遅延装置〜第nの遅延装置、82A−0〜82A−n−1…第1〜第nの選択装置、90…演算システム、91…CPU、92…構成情報記憶部、921〜924(CD1〜CD4)…レジスタ、925…選択装置、926…ORゲート、93…演算実行部、931−0〜931−2…選択装置、932…ALU、933…MAC構造の演算器。