(57)【要約】【課題】処理を連続して行うことが可能で、条件を満たせば途中で処理を中断するような場合の無駄な処理を抑止でき、また、転送効率の向上を図れることはもとより、システムコストの増大を抑止でき、処理時間と消費電力を削減できる演算装置を提供する。【解決課題】第１のソースデータＤＴ９１を生成し、制御信号ＩＮＡ ＣＴＬ１と共に出力するアドレス生成装置９２と、第２のソースデータＤＴ９２を生成し、制御信号ＩＮＢ ＣＴＬ１−３と共に出力するアドレス生成装置９３と、第１の生成装置による第１のソースデータと、第２の生成装置による第２のソースデータに対して制御信号に応じて演算種を切り替えて所定の演算を行い、演算結果を一時保持するレジスタを有する演算器９５と、を有し、レジスタの保持データの読み出し、書き込みは、制御信号により制御される。【選択図】図１８
2006215611.tif 000002
【特許請求の範囲】
【請求項１】
第１のソースデータを生成する第１の生成装置と、
第２のソースデータを生成する第２の生成装置と、
上記第１の生成装置による第１のソースデータと、上記第２の生成装置による第２のソースデータに対して制御信号に応じて演算種を切り替えて所定の演算を行い、演算結果を一時保持するレジスタを有する演算器と、を有し、
上記第１の生成装置と上記第２の生成装置の少なくとも一方は、生成したソースデータに制御信号を付加して上記演算器に出力し、
上記レジスタの保持データの読み出し、書き込みは、上記制御信号により制御される
演算装置。
【請求項２】
上記第１のソースデータおよび上記第２のソースデータを格納するメモリを有し、
上記第１の生成装置は、上記第１のソースデータを読み出すためのアドレスを生成し、当該アドレスに基づいて読み出した第１のソースデータと上記制御信号を上記演算器に出力し、
上記第２の生成装置は、上記第２のソースデータを読み出すためのアドレスを生成し、当該アドレスに基づいて読み出した第２のソースデータと上記制御信号を上記演算器に出力する
請求項１記載の演算装置。
【請求項３】
上記演算器の演算結果を受けてアドレスを生成して、演算結果を上記メモリに書き込む第３の生成装置をさらに有する
請求項２記載の演算装置。
【請求項４】
上記演算器は、バス幅より小さい語長のデータで累算を行う際に複数のデータをひとかたまりに扱い累算を行う
請求項１記載の演算装置。
【請求項５】
第１のソースデータを生成する第１の生成装置と、
第２のソースデータを生成し、かつ、当該第２のソースデータに第１の制御信号を付加して出力する第２の生成装置と、
第３のソースデータを生成する第３の生成装置と、
上記第１の生成装置の第１のソースデータと、上記第２の生成装置による第２のソースデータに上記第１の制御信号に応じた所定の演算処理を行って第４のソースデータを生成する第１の演算器と、
上記第３の生成装置による第３のソースデータと、上記第１の演算器による第４のソースデータに対して第２の制御信号に応じて演算種を切り替えて所定の演算を行い、演算結果を保持するレジスタを有する第２の演算器と、を有し、
上記第３のアドレス生成装置および上記第１の演算器の少なくとも一方は生成したソースデータに第２の制御信号を付加して上記第２の演算器に出力し、
上記レジスタの保持データの読み出し、書き込みは、上記第２制御信号により制御される
演算装置。
【請求項６】
上記第１のソースデータ、上記第２のソースデータ、および上記第２のソースデータを格納するメモリを有し、
上記第１の生成装置は、上記第１のソースデータを読み出すためのアドレスを生成し、当該アドレスに基づいて読み出した第１のソースデータを上記第１の演算器に出力し、
上記第２の生成装置は、上記第２のソースデータを読み出すためのアドレスを生成し、当該アドレスに基づいて読み出した第２のソースデータと上記第１の制御信号を上記第１の演算器に出力し、
上記第３の生成装置は、上記第３のソースデータを読み出すためのアドレスを生成し、当該アドレスに基づいて読み出した第３のソースデータを上記第２の演算器に出力する
請求項５記載の演算装置。
【請求項７】
上記第２の演算器の演算結果を受けてアドレスを生成して、演算結果を上記メモリに書き込む第４の生成装置をさらに有する
請求項６記載の演算装置。
【請求項８】
上記第１および第２の演算器の少なくとも一方は、バス幅より小さい語長のデータで累算を行う際に複数のデータをひとかたまりに扱い累算を行う
請求項５記載の演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、いわゆるデータフロー型演算装置に関するものである。
【背景技術】
【０００２】
従来のデータフロー型演算器の場合、メモリから連続したデータが転送され、転送されたデータに対しあらかじめ決められた１種類の演算を連続して行うものであった。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかし、このような演算器の場合、入力条件によって異なる演算を行うような処理を連続して行うことは不可能である。
【０００４】
また、ある条件を満たせば途中で処理を中断するような場合でもあらかじめ決められた個数分の処理を行わなければならないため無駄な処理が行われていた。
【０００５】
さらに、データバス幅よりも小さい語長のデータを累算する場合、たとえば３２ビットバスシステムにおいて８ビットデータを扱う場合等、転送効率が悪くなるという不利益があった。
【０００６】
また、ＩＩＲのようなフィードバックを伴う演算処理をそのままハードウェアに適用しようとした場合、一度演算結果をメモリに書き出した後再度その結果をメモリから読み出す必要があることからデュアルポートメモリが必須となりシステムコストが高くなる欠点があった。
また、内部のパイプライン化によりメモリ→演算→メモリのレイテンシが大きいシステムでは場合によってはデータが揃うまで待機する動作を行わなければならず効率の悪い処理系になっていた。
【０００７】
本発明は、かかる事情に鑑みてなされたものであり、その目的は、入力条件によって異なる演算を行うような処理を連続して行うことが可能で、条件を満たせば途中で処理を中断するような場合の無駄な処理を抑止でき、また、転送効率の向上を図れることはもとより、システムコストの増大を抑止でき、処理時間と消費電力を削減できる演算装置を提供することにある。
【課題を解決するための手段】
【０００８】
上記目的を達成するため、本発明の第１の観点の演算装置は、第１のソースデータを生成する第１の生成装置と、第２のソースデータを生成する第２の生成装置と、上記第１の生成装置による第１のソースデータと、上記第２の生成装置による第２のソースデータに対して制御信号に応じて演算種を切り替えて所定の演算を行い、演算結果を一時保持するレジスタを有する演算器と、を有し、上記第１の生成装置と上記第２の生成装置の少なくとも一方は、生成したソースデータに制御信号を付加して上記演算器に出力し、上記レジスタの保持データの読み出し、書き込みは、上記制御信号により制御される。
【０００９】
好適には、上記第１のソースデータおよび上記第２のソースデータを格納するメモリを有し、上記第１の生成装置は、上記第１のソースデータを読み出すためのアドレスを生成し、当該アドレスに基づいて読み出した第１のソースデータと上記制御信号を上記演算器に出力し、上記第２の生成装置は、上記第２のソースデータを読み出すためのアドレスを生成し、当該アドレスに基づいて読み出した第２のソースデータと上記制御信号を上記演算器に出力する。
【００１０】
好適には、上記演算器の演算結果を受けてアドレスを生成して、演算結果を上記メモリに書き込む第３の生成装置をさらに有する。
【００１１】
好適には、上記演算器は、バス幅より小さい語長のデータで累算を行う際に複数のデータをひとかたまりに扱い累算を行う。
【００１２】
本発明の第２の観点の演算装置は、第１のソースデータを生成する第１の生成装置と、第２のソースデータを生成し、かつ、当該第２のソースデータに第１の制御信号を付加して出力する第２の生成装置と、第３のソースデータを生成する第３の生成装置と、上記第１の生成装置の第１のソースデータと、上記第２の生成装置による第２のソースデータに上記第１の制御信号に応じた所定の演算処理を行って第４のソースデータを生成する第１の演算器と、上記第３の生成装置による第３のソースデータと、上記第１の演算器による第４のソースデータに対して第２の制御信号に応じて演算種を切り替えて所定の演算を行い、演算結果を保持するレジスタを有する第２の演算器と、を有し、上記第３のアドレス生成装置および上記第１の演算器の少なくとも一方は生成したソースデータに第２の制御信号を付加して上記第２の演算器に出力し、上記レジスタの保持データの読み出し、書き込みは、上記第２制御信号により制御される。
【００１３】
好適には、上記第１のソースデータ、上記第２のソースデータ、および上記第２のソースデータを格納するメモリを有し、上記第１の生成装置は、上記第１のソースデータを読み出すためのアドレスを生成し、当該アドレスに基づいて読み出した第１のソースデータを上記第１の演算器に出力し、上記第２の生成装置は、上記第２のソースデータを読み出すためのアドレスを生成し、当該アドレスに基づいて読み出した第２のソースデータと上記第１の制御信号を上記第１の演算器に出力し、上記第３の生成装置は、上記第３のソースデータを読み出すためのアドレスを生成し、当該アドレスに基づいて読み出した第３のソースデータを上記第２の演算器に出力する。
【００１４】
好適には、上記第２の演算器の演算結果を受けてアドレスを生成して、演算結果を上記メモリに書き込む第４の生成装置をさらに有する。
【００１５】
本発明によれば、たとえばある特定のインデックス条件を満たす場合のみ演算が加算から減算に切り替わるものである場合に、演算器自体は配列のインデックス、すなわちメモリのアドレスを知らないため演算を切り替える制御はアドレスを発行する側、つまり第２の生成装置が制御信号を生成することになる。
第２の生成装置によりメモリから読み出されたデータと共に制御信号を演算器に渡し、これにより演算が行われ、その結果がたとえばメモリに書き込まれるという一連の処理が実現される。
演算器において、演算結果は、制御信号の制御の下に保持回路（レジスタ）に書き込まれ、制御信号の制御の下に所定のタイミングで読み出される。
【発明の効果】
【００１６】
本発明によれば、入力条件によって異なる演算を行うような処理を連続して行うことができる。
また、条件を満たせば途中で処理を中断するような場合の無駄な処理を抑止でき、また、転送効率の向上を図れる利点がある。
また、デュアルポートメモリを使う必要がないことからシステムコストを抑えることが可能で、さらには効率的な処理が可能なことから処理時間と消費電力を削減することが可能であるという利点がある。
【発明を実施するための最良の形態】
【００１７】
以下、本発明の実施形態を図面に関連付けて説明する。
【００１８】
＜第１実施形態＞
図１は、本発明に係るデータフロー型演算装置の第１の実施形態を示す構成図である。
【００１９】
本演算装置１０は、複数（図１では３個）のバンク１１１〜１１３を備えたメモリ１１、バンク１１１〜１１３に応対して設けられた第１〜第３のアドレス生成装置１２（ＡＧ０），１３（ＡＧ１），１４（ＡＧ２）、および演算器（ＰＥ）１５を有している。
【００２０】
アドレス生成装置１２は、アドレスＡＤＲ１２およびコントロール信号ＣＴＬ１２をバンク１１１に与えて演算器１５の演算のための第１のデータを読み出して、第１のソースデータＤＴ１１として演算器１５に出力する。
【００２１】
アドレス生成装置１３は、アドレスＡＤＲ１３およびコントロール信号ＣＴＬ１３をバンク１１２に与えて演算器１５の演算のための第２のデータを読み出して、演算の制御信号ＣＴＬＯＰとともに第２のソースデータＤＴ１２として演算器１５に出力する。
【００２２】
アドレス生成装置１４は、アドレスＡＤＲ１４およびコントロール信号ＣＴＬ１４をバンク１１３に与えて演算器１５の演算結果を、バンク１１３に格納する。
【００２３】
演算器１５は、アドレス生成装置１２による第１のソースデータＤＴ１１とアドレス生成装置１３による第２のソースデータＤＴ１２に対して、制御信号ＣＴＬＯＰに応じたたとえば以下に示す条件実行演算を行い、演算結果Ｓ１５（Ｄｅｓｔｉｎａｔｉｏｎ）をアドレス生成装置１４に出力する。
【００２４】
演算器１５の制御方法を条件実行演算を例に述べる。
以下の例は配列のインデックスが分岐条件となるＣ言語によるプログラム例である。
【００２５】
＜プログラム例１＞
for (i=0; i<256; i++) ｛
if (i > 254) out[i] = a[i] - b[i];
else out[i] = a[i] + b[i];
｝
【００２６】
図２（Ａ）〜（Ｃ）は、演算器１５の演算実行状態を示す図である。
これはある特定のインデックス条件を満たす場合のみ演算が加算から減算に切り替わるものであるが、演算器自体は配列のインデックス、すなわちメモリのアドレスを知らないため演算を切り替える制御はアドレスを発行する側、つまりはアドレス生成装置１３が制御信号ＣＴＬＯＰを生成することになる。
【００２７】
この例では演算の種類が２種類なので制御線としては１ビットの信号線があればよく、図１のようにアドレス生成装置１３によりメモリから読み出されたデータと共に制御信号ＣＴＬＯＰを演算器１５に渡し、これにより演算が行われ、その結果がまたメモリ１１のバンク１１３に書き込まれるという一連のフローが実現される。
【００２８】
＜第２実施形態＞
図３は、本発明に係るデータフロー型演算装置の第２の実施形態を示す構成図である。
【００２９】
本演算装置２０は、複数（図３では３個）のバンク２１１〜２１３を備えたメモリ２１、バンク２１１〜２１３に応対して設けられた第１〜第３のアドレス生成装置２２（ＡＧ０），２３（ＡＧ１），２４（ＡＧ２）、第１の演算器（ＰＥ０）２５、および第２の演算器（ＰＥ１）２６を有している。
【００３０】
アドレス生成装置２２は、アドレスＡＤＲ２２およびコントロール信号ＣＴＬ２２をバンク２１１に与えて演算器２６の演算のための第１のデータを読み出して、第１のソースデータＤＴ２１として演算器２６に出力する。
【００３１】
アドレス生成装置２３は、アドレスＡＤＲ２３およびコントロール信号ＣＴＬ２３をバンク２１２に与えて演算器２５の演算のための第２のデータを読み出して、第２のソースデータＤＴ２２として演算器２５に出力する。
【００３２】
アドレス生成装置２４は、アドレスＡＤＲ２４およびコントロール信号ＣＴＬ２４をバンク２１３に与えて演算器２６の演算結果を、バンク２１３に格納する。
【００３３】
演算器２５は、アドレス生成装置２３による第２のソースデータＤＴ２２に基づいて比較演算を行い、演算の制御信号ＣＴＬＯＰとともに第３のソースデータＤＴ２３として演算器２６に出力する。
【００３４】
演算器２６は、アドレス生成装置２２による第１のソースデータＤＴ２１とアドレス生成装置２３による第３のソースデータＤＴ２３に対して、制御信号ＣＴＬＯＰに応じたたとえば以下に示す条件実行演算を行い、演算結果Ｓ２６（Ｄｅｓｔｉｎａｔｉｏｎ）をアドレス生成装置２４に出力する。
【００３５】
演算器２５，２６の制御方法を条件実行演算を例に述べる。
以下の例は配列のインデックスが分岐条件となるＣ言語によるプログラム例である。
ここでは、別の例としてデータの値が分岐条件となるプログラム例を以下に示す。
【００３６】
＜プログラム例２＞
for (i=0; i<256; i++) ｛
if (a[i] > 0) out[i] = a[i] + b[i];
else out[i] = a[i];
｝
【００３７】
図４（Ａ）〜（Ｃ）は、演算器２５，２６の演算実行状態を示す図である。
この例は、演算器の入力となる配列の値により演算の種類が切り替わるもので、図３のように演算器２つを縦続接続して前段の演算器２５で比較演算をすることにより後段の演算器２６の演算を切り替えるための制御信号ＣＴＬＯＰを生成する。
このとき、前段の演算器２５の演算結果は入力された値と同じ値を出力するようにする。
これは演算器２５内部がパイプライン化された場合でもデータと制御信号の同期を取るためである。
なお、上で示した２つの例は何れも２種類の演算を切り替える例であるが、原理的には３種類以上の切り替えも可能でありその場合は制御信号も２ビット以上必要になる。
【００３８】
＜第３実施形態＞
図５は、本発明に係るデータフロー型演算装置の第３の実施形態を示す構成図である。
【００３９】
本第３の実施形態の演算装置２０Ａが第２の実施形態の演算装置２０と異なる点は、演算器２５において比較演算により生成された制御信号ＣＴＬＯＰをアドレス生成装置の制御信号ＭＥＭＷＥとして用いる点にある。
【００４０】
比較演算により生成された制御信号をアドレス生成装置の制御に用いたプログラム例を以下に示す。
【００４１】
＜プログラム例３＞
j = 0;
for (i=0; i<256; i++) ｛
if (a[i] > 0) out[j++] = a[i] + b[i];
｝
【００４２】
図６（Ａ）〜（Ｅ）は、演算器２５，２６の演算実行状態およびメモリへの書き込み制御状態を示す図である。
【００４３】
この例は、演算の入力となるデータの値が条件を満たした場合のみ配列のインデックスをインクリメントし、演算結果をメモリへ書き込む動作をする。
図５は、この例を実現するための構成例であるが、図３と同様に２つの演算器２５，２６を縦続接続しているが、後段の演算器２６Ａは常に固定の演算を行い、前段の演算器２５の比較演算で生成された制御信号ＣＴＬＯＰはそのまま後段を通過しメモリ書き込み用のアドレス生成装置２４へデータと共に渡される。
もしも、演算器内部がパイプライン化されている場合でも制御信号がデータと同じ経路を通るためにデータと制御信号は常に同期している。
メモリ書き込み用のアドレス生成装置２４ではこの制御信号を用いてメモリに対するアドレスと書き込み(WE)の制御を行う。
【００４４】
＜第４実施形態＞
図７は、本発明に係るデータフロー型演算装置の第４の実施形態を示す構成図である。
【００４５】
本演算装置３０は、複数（図７では３個）のバンク３１１〜３１３を備えたメモリ３１、バンク３１１〜３１３に応対して設けられた第１〜第３のアドレス生成装置３２（ＡＧ０），３３（ＡＧ１），３４（ＡＧ２）、第１の演算器（ＰＥ０）３５、および第２の演算器（ＰＥ１）３６を有している。
【００４６】
アドレス生成装置３２は、アドレスＡＤＲ３２およびコントロール信号ＣＴＬ３２をバンク３１１に与えて演算器３５の演算のための第１のデータを読み出して、第１のソースデータＤＴ３１として演算器３５に出力する。
また、アドレス生成装置３２は、アドレス生成装置３４による制御信号ＣＴＬＥＮＤを受けて読み出し動作を終了する。
【００４７】
アドレス生成装置３３は、アドレスＡＤＲ３３およびコントロール信号ＣＴＬ３３をバンク３１２に与えて演算器３５の演算のための第２のデータを読み出して、第２のソースデータＤＴ３２として演算器３５に出力する。
また、アドレス生成装置３３は、アドレス生成装置３４による制御信号ＣＴＬＥＮＤを受けて読み出し動作を終了する。
【００４８】
アドレス生成装置３４は、演算器３６による制御信号ＣＴＬＷＥに基づいてアドレスＡＤＲ３４およびコントロール信号ＣＴＬ３４をバンク３１３に与えて演算器３６の演算結果を、バンク３１３に格納する。
また、アドレス生成装置３４は、演算器３６による制御信号ＣＴＬＷＥに基づいて一連の処理を終了させるための制御信号ＣＴＬＥＮＤを生成して、アドレス生成装置３２，３３に出力する
【００４９】
演算器３５は、アドレス生成装置３２による第１のソースデータＤＴ３１とアドレス生成装置３３による第２のソースデータＤＴ３２に対して、たとえばたとえば以下に示す条件実行演算を行い、その結果を第３のソースデータＤＴ３３として演算器３６に出力する。
【００５０】
演算器３６は、演算器３５による第３のソースデータＤＴ３３に基づいて比較演算を行い、メモリ書き込みの制御信号ＣＴＬＷＥとともに演算結果Ｓ３６（Ｄｅｓｔｉｎａｔｉｏｎ）をアドレス生成装置３４に出力する。
【００５１】
以下に、演算結果によってループ処理を途中で終了するプログラム例を示す。
【００５２】
＜プログラム例４＞
for (i=0; i<256; i++) ｛
if ((a[i] - b[i]) == 0) break;
out[i] = a[i] - b[i];
｝
【００５３】
図８（Ａ）〜（Ｅ）は、図７の演算器３５，３６の演算実行状態およびメモリへの書き込み制御および読み出し終了制御状態を示す図である。
【００５４】
これは前段の演算器３５の演算結果を後段の演算器３６で比較し、これにより生成した制御信号ＣＴＬＷＥがデータと共にメモリ書き込み用のアドレス生成装置３４に渡される。
メモリ書き込み用のアドレス生成装置３４ではこの制御信号ＣＴＬＷＥによりメモリ３１のバンク３１３に対するアドレスと書き込み(WE)の制御を行うが、この時メモリ書き込み用のアドレス生成装置３４からメモリ読み込み用のアドレス生成装置３２，３３に対して動作を終了するような制御信号ＣＴＬＥＮＤを発生することによりメモリ３１のバンク３１１，３１２の読み出し動作も終了することで一連の処理動作を完全に終了することができる。
【００５５】
＜第５実施形態＞
図９は、本発明に係るデータフロー型演算装置の第５の実施形態を示す構成図である。
【００５６】
本演算装置４０は、複数（図９では５個）のバンク４１１〜４１５を備えたメモリ４１、バンク４１１〜４１５に応対して設けられた第１〜第５のアドレス生成装置４２（ＡＧ０），４３（ＡＧ１），４４（ＡＧ２），４５（ＡＧ３），４６（ＡＧ４）、第１の演算器（ＰＥ０）４７、および第２の演算器４８（ＰＥ１）を有している。
【００５７】
アドレス生成装置４２は、アドレスＡＤＲ４２およびコントロール信号ＣＴＬ４２をバンク４１１に与えて演算器４７の演算のための第１のデータを読み出して、第１のソースデータＤＴ４１として演算器４７に出力する。
【００５８】
アドレス生成装置４３は、アドレスＡＤＲ４３およびコントロール信号ＣＴＬ４３をバンク４１２に与えて演算器４７の演算のための第２のデータを読み出して、演算の第１の制御信号ＣＴＬＯＰとともに第２のソースデータＤＴ４２として演算器４７に出力する。
【００５９】
アドレス生成装置４４は、アドレスＡＤＲ４４およびコントロール信号ＣＴＬ４４をバンク４１３に与えて演算器４８の演算のための第３のデータを読み出して、第３のソースデータＤＴ４３として演算器４８に出力する。
【００６０】
アドレス生成装置４５は、演算器４７による制御信号ＣＴＬＡＤおよびアドレスデータＳ４７に基づいてアドレスＡＤＲ４５およびコントロール信号ＣＴＬ４５をバンク４１４に与えて第４のデータを読み出して、第４のソースデータＤＴ４４として演算器４８に出力する。
【００６１】
アドレス生成装置４６は、アドレスＡＤＲ４６およびコントロール信号ＣＴＬ４６をバンク４１５に与えて演算器４８の演算結果Ｓ４８を、バンク４１５に格納する。
【００６２】
演算器４７は、アドレス生成装置４２による第１のソースデータＤＴ４１とアドレス生成装置４３による第２のソースデータＤＴ４２に対して、第１の制御信号ＣＴＬＯＰに応じたたとえば所定の演算によりアドレスデータＳ４７を生成し、第２の制御信号ＣＴＬＡＤと共にアドレス生成装置４５に出力する。
【００６３】
演算器４８は、アドレス生成装置４４による第３のソースデータＤＴ４３とアドレス生成装置４５による第４のソースデータＤＴ４４に対して、所定の演算を行い、演算結果Ｓ４８（Ｄｅｓｔｉｎａｔｉｏｎ）をアドレス生成装置４６に出力する。
【００６４】
演算器をアドレス計算に使う例を下に示す。
【００６５】
＜プログラム例５＞
for (i=0; i<256; i++) ｛
index = a[i] * b[i];
out[i] = c[index] + d[i];
｝
【００６６】
本実施形態では、図９に示すように、一旦演算器４７を使ってアドレスの演算をした後、アドレス生成装置４５ではそのアドレスを利用してメモリを読み出し、別の演算器４８で最終的な結果を得るものである。
また、ここへ更に条件実行演算を組み合わせることでより複雑なアドレス生成を行わせることも可能である。
【００６７】
なお、一般的な静止画や動画の処理は８ビットデータが基本であることが多いため、３２ビットバスを用いたシステムではバスの利用効率が悪くなる。
そこで、本発明では累算処理の場合に着目してビットデータを４つまとめて処理することで転送効率／処理効率を改善している。
【００６８】
たとえば、８ビットデータが１６個ありメモリ上で図１０に示すように配置されているとする。
通常のようにデータを１つずつ読み出して処理をした場合は、図１１に示すように、１６回のメモリ転送が生じる。
これに対し、図１２に示すように、４つずつ読み出した場合は４回の転送で済むことになる。
【００６９】
図１３、図１４はそれぞれ１つずつ、４つずつ読み出した場合の処理ブロック図である。図１３および図１４においては、５１はアキュムレータ、５２は加算器を示している。
【００７０】
図１４に示すように、４つずつ読み出した場合演算器内部では一度１つにまとめられたデータから４つのデータを分離した後それらを１つに足し合わせ、これが累算されることになる。
また、動画像符号化などで多用される参照データに対する差分絶対値の合計を求める場合は、図１５に示すように差分絶対値を４つ同時に求めて１つに足し込んだ後累算を行うことで実現できる。なお、図１５において、５３−１〜５３−４は差分絶対値演算部（ＡｂｓＤｉｆｆ）を示している。
なお、これは１６ビットデータの場合にも応用することができ、その場合１６ビットデータ２つをまとめて処理することになる。
【００７１】
データフロー型演算装置を実装した場合、内部がパイプライン化される場合が多いため最終結果が求められるまでのレイテンシが大きくなる。
したがって、このような演算装置ではできる限り連続した動作をすることが望ましく、本発明の条件実行演算が可能になることにより従来複数回に分けて実行していたものが一度の実行で済むようになり、効率の良い動作が可能になる。
【００７２】
一方、複数のデータをひとつにまとめて累算する方法は動画符号化処理の動き検出など大量のデータを処理する場合にその処理量を大幅に減らすことが可能になり、装置の高効率化に寄与する。
【００７３】
以下では、一般的な２次ＩＩＲフィルタを実現するプログラムおよび具体的なハードウェアで実現したＩＩＲフィルタの実施形態について説明する。
【００７４】
以下の例は一般的な２次ＩＩＲフィルタを実現するプログラムである。
【００７５】
＜プログラム例６＞
y[0] = init_y2n;
y[1] = init_y1n;
for (i=2; i<smpl+2; i++) {
y[i] = a0 * x[i] + a1 * x[i-1] + a2 * x[i-2] + b1 * y[i-1] + b2 * y[i-2];
}
【００７６】
このプログラムをそのままハードウェアへ適用すると、y[i-1]およびy[i-2]をメモリから読み出すことになり、更には多項式となることから演算リソースを多量に消費することになる。
そこで、上記例を累算形式に変形し、y[i-1]およびy[i-2]をレジスタに置き換えた例を以下に示す。
【００７７】
＜プログラム例７＞
y2 = init_y2n;
y1 = init_y1n;
a[] = {a2, a1, a0, b1, b2};
for (i=0; i<smpl; i++) {
y[i] = 0;
for (j=0; j<5; j++) {
if (j==3) y[i] += a[j] * y1;
else if (j==4) y[i] += a[j] * y2;
else y[i] += a[j] * x[i+j];
}
y2 = y1;
y1 = y[i];
}
【００７８】
図１６は、上記プログラムをハードウェアで実現した場合に必要となるリソースとその接続関係を示したものである。
図１６のＩＩＲフィルタ６０は、レジスタ６１（ＦＧｒｅｇ），６２（ＢＧｒｅｇ）、マルチプレクサ（ＭＵＸ）６３、および乗算累算器（MULTIPLIER/ACCUMULATOR）６４を有している。
レジスタ６１に乗算累算器６４の演算結果が保持され、レジスタ６２はレジスタ６１の保持データが保持される。
マルチプレクサ６３は、レジスタ６１，６２、入力データＩＮＡのいずれかを選択して乗算累算器６４に入力させる。
乗算累算器６４は、マルチプレクサ６３の選択データと入力データＩＮＢとの乗算累算を行う。
【００７９】
図１７は、図１６のＩＩＲフィルタ構成を実現する際に必要なパイプラインレジスタ等を含めたより現実的な一実施形態を示す図である。
【００８０】
図１７のＩＩＲフィルタ７０は、レジスタ７１〜７６、マルチプレクサ（ＭＵＸ）７７〜８０、乗算器８１、および加算器（ＡＤＤＥＲ）８２を有している。
レジスタ７１（ＦＧｒｅｇ）はマルチプレクサ７７の選択データを保持し、レジスタ７２（ＢＧｒｅｇ）はマルチプレクサ７８の選択データを保持する。レジスタ７３は入力データＩＮＡを保持し、レジスタ７４は入力データＩＮＢを保持し、レジスタ７５はマルチプレクサ８０の選択データを保持し、レジスタ７６は加算器８２の演算結果を保持する。
マルチプレクサ７７はレジスタ７６の保持データ、入力スタティックデータＳＤ１、レジスタ７１の保持データのうちのいずれかを選択してレジスタ７１に出力する。
マルチプレクサ７８は、レジスタ７１の保持データ、入力スタティックデータＳＤ２、レジスタ７２の保持データのいずれかを選択してレジスタ７２に出力する。
マルチプレクサ７９は、レジスタ７１の保持データ、レジスタ７２の保持データ、レジスタ７３の保持データのいずれかを選択して乗算器８１に出力する。
マルチプレクサ８０は、加算器８２の演算結果または固定値０を選択してレジスタ７５に出力する。
乗算器８１は、マルチプレクサ７９の選択データとレジスタ７４の保持データとを乗算し加算器８２に出力する。
加算器８２は、レジスタ７５の保持データと乗算器８１の演算結果を加算してレジスタ７６およびマルチプレクサ８０に出力する。
【００８１】
プログラム例７でa[]、x[]で表される配列は、図１６および図１７における入力データとなり、y[]は出力データとなる。また、y1、y2で表される変数は図中のレジスタに相当し、それぞれＦＧｒｅｇ（６１，７１）、ＢＧｒｅｇ（６２，７２）として表されている。
【００８２】
プログラム例７においては、ループ内で配列の引数による条件分岐を行っているが、これを本発明の特徴であるデータに付加された制御信号を用いた形へ書き換えると下記のプログラム例８のようになる。
【００８３】
＜プログラム例８＞
a[] = {a2, a1, a0, b1, b2};
bctl1[] = {1, 0, 0, 0, 0};
bctl2[] = {0, 0, 0, 1, 1};
bctl3[] = {0, 0, 0, 0, 1};
INA_CTL1 = 1;
for (i=0; i<smpl; i++) {
for (j=0; j<5; j++) {
INA = x[i+j];
INB = a[j];
INB_CTL1 = bctl1[j];
INB_CTL2 = bctl2[j];
INB_CTL3 = bctl3[j];
if (INA_CTL1 == 1) {
FREG = init_y1n;
BREG = init_y2n;
}
if (INB_CTL1 == 1) ACCREG = 0;
if (INB_CTL2 == 1 && INB_CTL3 == 1) ACCREG += BREG * INB;
else if (INB_CTL2 == 1 && INB_CTL3 == 0) ACCREG += FREG * INB;
else ACCREG += INA * INB;
OUT = ACCREG;
if (INB_CTL2 == 1 && INB_CTL3 == 1) {
BREG = FREG;
FREG = OUT;
}
if (INA_CTL1 == 1) INA_CTL1 = 0;
}
y[i] = OUT;
}
【００８４】
プログラム例８において、ｉｆ分ｅｌｓｅ分となっている部分が図１７の実施形態における動作を表している。
この例では、４つの制御信号を組み合わせた幾つかの条件によって初期値の設定やオペランドの選択が行われる。
【００８５】
＜第６実施形態＞
図１８は、本発明に係るデータフロー型演算装置の第６の実施形態を示す構成図である。
【００８６】
図１８は、プログラム例８を実現させる構成例を示したものである。この例では主演算器(PE)として図１８の装置７０を用い、これにメモリおよびアドレス発生装置(AG)を組み合わせたものである。
【００８７】
本演算装置９０は、複数（図９では３個）のバンク９１１〜９１３を備えたメモリ９１、バンク９１１〜９１３に応対して設けられた第１〜第３のアドレス生成装置９２（ＡＧ０），９３（ＡＧ１），９４（ＡＧ２）、および演算器（ＰＥ）９５を有している。
【００８８】
アドレス生成装置９２は、アドレスＡＤＲ９２およびコントロール信号ＣＴＬ９２をバンク９１１に与えて演算器９５の演算のための第１のデータを読み出して、演算の制御
信号ＩＮＡ ＣＴＬ１とともに第１のソースデータＤＴ９１（ＩＮＡ）として演算器９５に出力する。
【００８９】
アドレス生成装置９３は、アドレスＡＤＲ９３およびコントロール信号ＣＴＬ９３をバンク９１２に与えて演算器９５の演算のための第２のデータを読み出して、演算の制御信号ＩＮＢ ＣＴＬ１〜３とともに第２のソースデータＤＴ９２（ＩＮＢ）として演算器９５に出力する。
【００９０】
アドレス生成装置９４は、アドレスＡＤＲ９４およびコントロール信号ＣＴＬ９４をバンク９１３に与えて演算器９５の演算結果を、バンク９１３に格納する。
【００９１】
演算器９５は、アドレス生成装置９２による第１のソースデータＤＴ９１（ＩＮＡ）とアドレス生成装置９３による第２のソースデータＤＴ９２（ＩＮＢ）に対して、制御信号ＩＮＡ ＣＴＬ１、並びにＩＮＢ ＣＴＬ１〜３に応じた、たとえば上記プログラム例に示す条件実行演算を行い、演算結果Ｓ９５（Ｄｅｓｔｉｎａｔｉｏｎ）をアドレス生成装置９４に出力する。
【００９２】
図１９（Ａ）〜（Ｏ）は、図１８の演算装置９０の動作波形を示す図である。
演算器９５のデータ入力はＩＮＡとＩＮＢの２つで、さらに制御信号としてＩＮＡ_ＣＴＬ１、ＩＮＢ_ＣＴＬ１、ＩＮＢ_ＣＴＬ２、ＩＮＢ_ＣＴＬ３の４つが使用される。
これらはアドレス発生装置９２，９３により生成されるもので、制御信号ＩＮＡ_ＣＴＬ１はアドレス生成装置９２で、制御信号ＩＮＢ_ＣＴＬ１〜３はアドレス生成装置９３により生成しデータと共に演算器９５に入力される。
制御信号ＩＮＡ_ＣＴＬ１は、図１７で示された内部レジスタ７１（ＦＧｒｅｇ）および７２（ＢＧｒｅｇ）を初期化するための信号で、通常は最初の一回のみＩＮＡ_ＣＴＬ１＝１となる。
制御信号ＩＮＢ_ＣＴＬ１は、図１２（Ｍ）に示すように、アキュムレータレジスタ７５（ＡＣＣＲＥＧ）をクリアするための信号で、プログラム例８の場合５回累算をする際の最初のデータが入力されるタイミングでＩＮＢ_ＣＴＬ１＝１となる。
制御信号ＩＮＢ_ＣＴＬ２と制御信号ＩＮＢ_ＣＴＬ３は乗数をレジスタ７３（ＩＮＡ）、レジスタ７１（ＦＧｒｅｇ）、レジスタ７２（ＢＧｒｅｇ）の３つから選択するための信号であるが、それと同時に内部レジスタ７１ＦＧｒｅｇ）、レジスタ７２（ＢＧｒｅｇ）を更新するためにも使用される。
【００９３】
プログラム例８を実現する図１８の構成例では５サイクルに１回の割合で結果が得られるが、演算ユニットを２つ使いパイプライン動作させることで結果を得るために必要なサイクル数を削減することが可能である。
このときの動作はプログラム例８を変形し、プログラム例９のようになる。
【００９４】
＜プログラム例９＞
a[] = {a2, a1, a0};
b[] = {b0, b1, b2};
bctl1[] = {1, 0, 0};
bctl2[] = {0, 1, 1};
bctl3[] = {0, 0, 1};
IN0B_CTL1 = 1;
for (i=0; i<smpl; i++) {
for (j=0; j<3; j++) {
IN0A = x[i+j];
IN0B = a[j];
IN0B_CTL2 = bctl1[j];
//  ----------------    PE0     ---------------------
if (IN0B_CTL2 == 1) ACCREG0 = 0;
ACCREG0 += IN0A * IN0B;
OUT0 = ACCREG0;
//  -------------------------------------------------
}
w[i] = OUT0;
for (j=0; j<3; j++) {
IN1A = OUT0;
IN1B = b[j];
IN1A_CTL1 = IN0B_CTL1;
IN1B_CTL1 = bctl1[j];
IN1B_CTL2 = bctl2[j];
IN1B_CTL3 = bctl3[j];
//  ----------------    PE1     ---------------------
if (IN1A_CTL1 == 1) {
FREG1 = init_y1n;
BREG1 = init_y2n;
}
if (IN1B_CTL1 == 1) ACCREG1 = 0;
if (IN1B_CTL2 == 1 && IN1B_CTL3 == 1) ACCREG1 += BREG1 * IN1B;
else if (IN1B_CTL2 == 1 && IN1B_CTL3 == 0) ACCREG1 += FREG1 * IN1B;
else ACCREG1 += IN1A * IN1B;
OUT1 = ACCREG1;
if (IN1B_CTL2 == 1 && IN1B_CTL3 == 1) {
BREG1 = FREG1;
FREG1 = OUT1;
}
//  --------------------------------------------------
if (IN1A_CTL1 == 1) IN1A_CTL1 = 0;
}
y[i] = OUT1;
}
【００９５】
プログラム例９において、ｉｆ分ｅｌｓｅ分となっている部分の前半部分は通常の乗算結果を累算しており、一つの演算ユニットＰＥ０に割り当てる。後半部分は図１８の実施形態例を用いたもので、もう一つの演算ユニットＰＥ１に割り当てる。
このときの構成例を表したものが図２０であり、図２０に関連付けて第７の実施形態を説明する。
【００９６】
＜第７実施形態＞
図２０は、本発明に係るデータフロー型演算装置の第７の実施形態を示す構成図である。
【００９７】
本演算装置１００は、複数（図２０では４個）のバンク１０１１〜１０１４を備えたメモリ１０１、バンク１０１１〜１０１４に応対して設けられた第１〜第４のアドレス生成装置１０２（ＡＧ０），１０３（ＡＧ１），１０４（ＡＧ２），１０５（ＡＧ３）、第１の演算器１０６（ＰＥ０）、および第２の演算器１０７（ＰＥ１）を有している。
【００９８】
アドレス生成装置１０２は、アドレスＡＤＲ１０２およびコントロール信号ＣＴＬ１０２をバンク１０１１に与えて演算器１０６の演算のための第１のデータを読み出して、第１のソースデータＤＴ１０１（ＩＮ０Ａ）として演算器１０６に出力する。
【００９９】
アドレス生成装置１０３は、アドレスＡＤＲ１０３およびコントロール信号ＣＴＬ１０３をバンク１０１２に与えて演算器１０６の演算のための第２のデータを読み出して、演算の制御信号ＩＮ０Ｂ ＣＴＬ１，２とともに第２のソースデータＤＴ１０２（ＩＮ０Ｂ）として演算器１０６に出力する。
【０１００】
アドレス生成装置１０４は、アドレスＡＤＲ１０４およびコントロール信号ＣＴＬ１０４をバンク１０１３に与えて演算器１０７の演算のための第３のデータを読み出して、演算の制御信号ＩＮ１Ｂ ＣＴＬ１〜３とともに第３のソースデータＤＴ１０３（ＩＮ１Ｂ）として演算器１０７に出力する。
【０１０１】
アドレス生成装置１０５は、アドレスＡＤＲ１０５およびコントロール信号ＣＴＬ１０５をバンク１０１４に与えて演算器１０７の演算結果Ｓ１０７を、バンク１０１４に格納する。
【０１０２】
演算器１０６は、アドレス生成装置１０２による第１のソースデータＤＴ１０１（ＩＮ０Ａ）とアドレス生成装置１０３による第２のソースデータＤＴ１０２（ＩＮ０Ｂ）に対して、制御信号ＩＮ０Ｂ ＣＴＬ１，２に応じたたとえば所定の演算により第４のソースデータＤＴ１０４（ＩＮ１Ａ）を生成し、制御信号ＩＮ１Ａ ＣＴＬ１と共に演算器１０７に出力する。
【０１０３】
演算器１０７は、アドレス生成装置１０４による第３のソースデータＤＴ１０３（ＩＮ１Ｂ）と演算器１０６による第４のソースデータＤＴ１０４（ＩＮ１Ａ）に対して、制御信号ＩＮ１Ｂ ＣＴＬ１〜３および制御信号ＩＮ１Ａ ＣＴＬ１に応じた所定の演算を行い、演算結果Ｓ１０７（Ｄｅｓｔｉｎａｔｉｏｎ）をアドレス生成装置１０５に出力する。
【０１０４】
図２０の演算装置１００においては、演算器（ＰＥ０）１０６の演算結果を演算器（ＰＥ１）１０７の一方の入力とすることでパイプライン動作が可能になり、スループットを向上させている。
【０１０５】
図２１（Ａ）〜（Ｖ）は、図２０の演算装置１００の動作波形を示す図である。
演算器（ＰＥ０）１０６はＩＮ０ＡとＩＮ０Ｂを入力として乗算を行い累積加算を行うが３サンプル毎に累算結果を初期化する必要があるためその制御信号としてＩＮ０Ｂ_ＣＴＬ１をアドレス発生装置１０２により生成する。
演算器（ＰＥ０）１０６の出力ＯＵＴ０は演算器（ＰＥ１）１０７のＩＮ１Ａへと接続されるが、演算器（ＰＥ１）１０７ではＩＮ１Ａに同期した制御信号が必要になることから演算器（ＰＥ０）１０６を通過させる形で制御信号を入力する。
演算器（ＰＥ０）１０６における制御信号ＩＮ０Ｂ_ＣＴＬ２がこれに相当するもので、アドレス生成装置１０３により生成された制御信号は演算器（ＰＥ１）１０７においてレジスタ７１，７２（FREG1とBREG1：FGreg,BGreg）の初期化に使用される。
また、時間軸の視点で見ると演算器（ＰＥ１）１０７の入力ＩＮ１Ａは演算器（ＰＥ０１０６のパイプラインディレイ分遅れることになり、更に累算の結果が確定するまでにも２サイクル分待つ必要があるため、演算器（ＰＥ１）１０７においては演算器（ＰＥ０１０６に対し４サイクル分演算開始が遅れることになる。
図２０の構成例の場合アドレス発生装置１０４をアドレス生成装置１０２および１０３に対し４サイクル遅らせることでこのような動作を実現することができる。
その他の演算器（ＰＥ１）１０７の動作に関しては図１８の構成例における動作と同様なものとなる。
【０１０６】
なお、一般的な信号処理においては固定小数点数により演算を行うことが多いが、この場合には、図２２に示すように、図１７の構成に対しシフタおよび丸め処理を加えることで容易に実現可能である。
図２２の装置７０Ａにおいては、図１７の構成に加算器８２とレジスタ７６との間にレジスタ８３およびシフタおよび丸め処理部８４を設けている。
【０１０７】
以上のように、データフロー型演算装置を実装した場合、内部がパイプライン化される場合が多いため最終結果が求められるまでのレイテンシが大きくなる。したがってこのような演算装置ではできる限り連続した動作をすることが望ましく、本発明の条件実行演算が可能になることにより従来複数回に分けて実行していたものが一度の実行で済むようになり、効率の良い動作が可能になる。
一方、複数のデータをひとつにまとめて累算する方法は動画符号化処理の動き検出など大量のデータを処理する場合にその処理量を大幅に減らすことが可能になり、装置の高効率化に寄与する。
また、ＩＩＲフィルタのようなループバックのある処理をそのままハードウェアに適用しようとすると、一端メモリへ演算結果を書き出した後再度その結果を読み出す必要があることからデュアルポートメモリが必須となりシステムコストが高くなる欠点があった。  また、内部のパイプライン化によりメモリ→演算→メモリのレイテンシが大きいシステムでは場合によってはデータが揃うまで待機する動作を行わなければならず効率の悪い処理系になっていた。
これに対し、本発明を適用した場合はデュアルポートメモリを使う必要はなくなることからシステムコストを抑えることが可能で、更には効率的な処理が可能なことから処理時間と消費電力の削減にも寄与するものとなる。
【０１０８】
以下に、本実施形態において採用するアドレス生成装置の具体的な構成例について説明する。
【０１０９】
図２３は、たとえば、図１のアドレス生成装置１４、図９のアドレス生成装置４６、図１８のアドレス生成装置９４、図２０のアドレス生成装置１０５のように、入力データに基づいてアドレスを生成するアドレス生成装置の構成例を示す図である。
【０１１０】
図２３のアドレス生成装置２００は、初期値を設定するためのレジスタ２０１，２０２、ステップ値を設定するためのレジスタ２０３，２０４、固定値を設定するためのレジスタ２０５、演算装置２０６，２０７、選択装置２０８，２０９、カウンタ２１０，２１１、および演算装置２１２を有している。
【０１１１】
演算装置２０６は、レジスタ２０３のステップ値とカウンタ２１０からフィードバックされる値に基づいて、たとえば加算等の所定の演算を行い、演算結果を選択装置２０８に出力する。
【０１１２】
演算装置２０７は、レジスタ２０４のステップ値とカウンタ２１１からフィードバックされる値に基づいて、たとえば加算等の所定の演算を行い、演算結果を選択装置２０９に出力する。
【０１１３】
選択装置２０８は、図示されていない制御信号に基づいてレジスタ２０１の設定値と演算置２０６の出力のいずれかを選択しカウンタ２１０に出力する。
【０１１４】
選択装置２０９は、図示されていない制御信号に基づいてレジスタ２０２の設定値と演算装置２０７の出力のいずれかを選択しカウンタ２１１に出力する。
【０１１５】
カウンタ２１０は、選択装置２０８により選択されたレジスタ２０１の設定値（初期値）または演算装置２０６の演算結果の値によりカウント値を設定し、この値を演算装置２０６にフィードバックし、かつ第１アドレス計算カウント値ＡＣＮＴＶ１１として演算装置２１２に出力する。
【０１１６】
カウンタ２１１は、選択装置２０９により選択されたレジスタ２０２の設定値（初期値）または演算装置２０７の演算結果の値によりカウント値を設定し、この値を演算装置２０７にフィードバックし、かつ第２アドレス計算カウント値ＡＣＮＴＶ１２として演算装置２１２に出力する。
【０１１７】
演算装置２１２は、図示されていない制御信号に基づいてカウンタ２１０による第１アドレス計算カウント値ＡＣＮＴＶ１１と、カウンタ２１１による第２アドレス計算カウント値ＡＣＮＴＶ１２と、レジスタ２０５に設定された固定値と、入力データＤＩＮに基づいて所定の演算を行ってアドレスＡＤＲを計算する。
【０１１８】
ここで、図２３のアドレス生成装置２００のアドレス生成動作について、図２４（Ａ）〜（Ｇ）のタイミングチャートに関連付けて説明する。
図２４（Ａ）はカウンタ２１０のカウント値ＣＮＴ２１０を、図２４（Ｂ）はカウンタ２１１のカウント値ＣＮＴ２１１を、図２４（Ｃ）は第１アドレス計算カウント値ＡＣＮＴＶ１１を、図２４（Ｄ）は第２アドレス計算カウント値ＡＣＮＴＶ１２を、図２４（Ｅ）はレジスタ２０５に設定された固定値ＳＣＶを、図２４（Ｆ）は演算装置２１２への入力データＤＩＮ、および図２４（Ｇ）は演算装置２１２において計算されたアドレスＡＤＲをそれぞれ示している。
【０１１９】
アドレス生成は次のように行われる。
レジスタ２０１、レジスタ２０２にはカウンタの初期値として０が格納され、レジスタ２０３、レジスタ２０４にはステップ値として１が格納される。
【０１２０】
演算装置２０６、および演算装置２０７はそれぞれ加算を実行する。
選択装置２０８は、３サイクルおきにレジスタ２０１の値を選択し、それ以外のときは演算装置２０６の値を選択する。
選択装置２０９は、常に演算装置２０７の演算結果の値を選択する。
これにより、カウンタ２１０およびカウンタ２１１のカウント値ＣＮＴ２１０，ＣＮＴ２１１は、図２４（Ａ），（Ｂ）に示すような値をとる。
このように動作させることで、第１アドレス計算カウント値ＡＣＮＴＶ１１、第２アドレス計算カウント値ＡＣＮＴＶ１２は、図２４（Ｃ），（Ｄ）に示すような値をとる。
【０１２１】
また、図２４（Ｅ），（Ｆ）に示すように、レジスタ２０５には固定値ＳＣＶとして０が設定され、毎サイクル入力データＤＩＮ（ 0,1,0,1,2,0,1,2,3....）が供給される。
そして、演算装置２１２は、以下の演算を実行して、アドレスＡＤＲを算出する。
【０１２２】
（数１）
ＡＤＲ＝ＡＣＮＴＶ１１＋ＡＣＮＴＶ１２＋ＳＣＶ＋ＤＩＮ
【０１２３】
ここで入力データＤＩＮとしては、図示されていない他のアドレス生成装置を用いてメモリから読み出したデータや、本実施形態のようにメモリからの読み出しデータに所定の演算を実行した結果を用いることもできる。
【０１２４】
演算装置２１１で実行する演算は減算、乗算などの一般的な演算も可能であり、加算に限定するものではないことは明らかである。
【０１２５】
本例によれば、従来のＤＳＰなどで生成される単純なアドレスパターンに比べて、複雑なアドレスパターンを生成することができる。
【０１２６】
図２５は、たとえば、図１のアドレス生成装置１３、図９のアドレス生成装置４３、図１８のアドレス生成装置９２，９３、図２０のアドレス生成装置１０３，１０４のように、制御信号を生成することができるアドレス生成装置の構成例を示す図である。
【０１２７】
本アドレス生成装置３００は、初期値を設定するレジスタ３０１、ステップ値を設定するレジスタ３０２、演算装置３０３、選択装置３０４、カウンタ３０５、演算装置３０６、パラメータレジスタ３０７、タイミングカウンタ３０８、制御装置３０９、および制御信号生成装置３１０を有している。また、入力として起動信号ＴＲＧ、制御入力ＣＴＬＩＮを有する。
【０１２８】
演算装置３０３は、レジスタ３０２のステップ値とカウンタ３０５からフィードバックされる値に基づいて、たとえば加算等の所定の演算を行い、演算結果を選択装置３０４に出力する。
【０１２９】
選択装置３０４は、図示されていない制御信号に基づいてレジスタ３０１の設定値と演算装置３０３の出力のいずれかを選択しカウンタ３０５に出力する。
【０１３０】
カウンタ３０５は、選択装置３０４により選択されたレジスタ３０１の設定値（初期値）または演算装置３０３の演算結果の値によりカウント値を設定し、この値を演算装置３０３にフィードバックし、かつ第１アドレス計算カウント値ＡＣＮＴＶ２１として演算装置３０６および制御信号生成装置３１０に出力する。
カウンタ３０５は、制御装置３０９による制御信号Ｓ３０９ａに応答してカウントアップ動作を開始する。
【０１３１】
演算装置３０６は、図示されていない制御信号に基づいてカウンタ３０５による第１アドレス計算カウント値ＡＣＮＴＶ２１に基づいて所定の演算を行ってアドレスＡＤＲを算出する。
【０１３２】
パラメータレジスタ３０７は、外部からアドレス生成遅延値が設定される。
【０１３３】
タイミングカウンタ３０８は、起動信号ＴＲＧが入力されるとカウンタ値をカウントアップし、パラメータレジスタ３０７に設定された値になるまでアドレス生成を遅延させるタイミングをカウントする。
【０１３４】
制御装置３０９は、タイミングカウンタ３０８のカウント値ＣＮＴ３０８が、パラメータレジスタ３０７に設定された所定の遅延値に達したか否かを判定し、達したと判定した場合に制御信号Ｓ３０９ａをカウンタ３０５に出力して、カウンタ３０５のカウントアップを有効にする。
また、制御装置３０９は、タイミングカウンタのタイミングカウント値ＣＮＴ３０８が設定値に達した後に、制御信号Ｓ３０９ｂを制御信号生成装置３１０に出力してアドレス有効信号ＡＶＬＤを有効するように制御する。
【０１３５】
制御信号生成装置３１０は、制御入力ＣＴＬＩＮとこの有効状態からアドレス有効信号ＡＶＬＤを生成する。
制御信号生成装置３１０は、制御装置３０９による制御信号Ｓ３０９ｂに応答してアドレス有効信号ＡＶＬＤを有効状態にし、カウンタ３０５のカウント値、すなわち第１アドレス計算カウント値ＡＣＮＴＶ２１が所定の終了値に達するとアドレス有効信号ＡＶＬＤを無効状態にする。
制御信号生成装置３１０は、カウンタ３０５のカウント値が特定の値になったときに制御出力ＣＴＬＯＵＴを有効、もしくは無効状態にすることができる。
【０１３６】
ここで、図２５のアドレス生成装置３００におけるアドレス生成動作について図２６（Ａ）〜（Ｇ）のタイミングチャートに関連付けて説明する。
図２６（Ａ）はタイミングカウンタ３０８に与えれる起動信号ＴＲＧを、図２６（Ｂ）はタイミングカウンタ３０８のタイミングカウント値ＣＮＴ３０８を、図２６（Ｃ）はカウンタ３０５による第１アドレス計算カウント値ＡＣＮＴＶ２１を、図２６（Ｄ）は演算装置３０６において計算されたアドレスＡＤＲを、図２６（Ｅ）は制御信号生成装置３１０で生成されるアドレス有効信号ＡＶＬＤを、図２６（Ｆ）は制御入力ＣＴＬＩＮを、図２６（Ｇ）は制御出力ＣＴＬＯＵＴをそれぞれ示している。
【０１３７】
アドレス生成はつぎのように行われる。
パラメータレジスタ３０７にはアドレス生成遅延値「４」が設定され、図２６（Ａ）に示すように、外部から入力されるトリガ信号としての起動信号ＴＲＧによりタイミングカウンタ３０８のカウントアップが行われる。
そして、図２６（Ｂ）に示すように、タイミングカウンタ３０８のカウント値ＣＮＴ３０８が、パラメータレジスタ３０７に設定された所定の遅延値「４」に達すると、制御装置３０９が、アドレス生成カウンタ３０５が動作するように制御信号Ｓ３０９ａをカウンタ３０５に出力して、カウンタ３０５のカウントアップを有効にする。
【０１３８】
レジスタ３０１にはカウンタの初期値として０が格納され、レジスタ３０２にはステップ値として２が格納される。演算装置３０３はたとえば加算を実行する。
選択装置３０４は常に演算装置３０３の値を選択する。
このように動作させることで、第１アドレス計算カウント値ＡＣＮＴＶ２１は、図２６（Ｃ）に示すような値をとる。
【０１３９】
演算装置３０６は、第１アドレス計算カウント値ＡＣＮＴＶ２１を用いてアドレスＡＤＲを算出する。
【０１４０】
上記のアドレス生成と並行してアドレス有効信号ＡＶＬＤ・制御出力ＣＴＬＯＵＴを出力することも可能である。
図２６（Ｅ）〜（Ｇ）に示すように、アドレス有効信号ＡＶＬＤは制御入力ＣＴＬＩＮと、起動信号ＴＲＧとタイミングカウント値ＣＴＬ３０８をもとに制御装置３０９と制御信号生成装置３１０により生成される。
制御装置３０９は、タイミングカウント値ＣＮＴ３０８が設定値に達した後に、制御信号Ｓ３０９ｂによりアドレス有効信号ＡＶＬＤを有効状態にし、カウンタ３０５のカウント値が終了値に達するとアドレス有効信号ＡＶＬＤを無効状態にする。
【０１４１】
制御信号生成装置３１０は、カウンタ３０５のカウント値が特定の値になったときに制御出力ＣＴＬＯＵＴを有効、もしくは無効状態にする。
図２６（Ｃ），（Ｇ）に示すように、本例では、第１アドレス計算カウント値ＡＣＮＴＶ２１が「６」と「１２」になったときに制御出力ＣＴＬＯＵＴを有効状態にしている。
【０１４２】
本例によれば、アドレス生成と同時に制御信号とアドレス有効信号を出力することが可能であるため、これらの信号を用いてメモリや演算装置の制御を柔軟に行うことができるようになる利点がある。
また、アドレス生成のタイミングをパラメータで制御することが可能であるため、複数のメモリからの読み出しや、書き込みに時間的な依存関係がある場合についても容易に対応することが可能になる。
【図面の簡単な説明】
【０１４３】
【図１】本発明に係るデータフロー型演算装置の第１の実施形態を示す構成図である。
【図２】図１の演算器の演算実行状態を示す図である。
【図３】本発明に係るデータフロー型演算装置の第２の実施形態を示す構成図である。
【図４】図３の演算器の演算実行状態を示す図である。
【図５】本発明に係るデータフロー型演算装置の第３の実施形態を示す構成図である。
【図６】図５の演算器の演算実行状態およびメモリへの書き込み制御状態を示す図である。
【図７】本発明に係るデータフロー型演算装置の第４の実施形態を示す構成図である。
【図８】図７の演算器の演算実行状態およびメモリへの書き込み制御および読み出し終了制御状態を示す図である。
【図９】本発明に係るデータフロー型演算装置の第５の実施形態を示す構成図である。
【図１０】８ビットデータの配列の一例を示す図である。
【図１１】８ビットデータを１つずつ読み出す場合の例を示す図である。
【図１２】８ビットデータを４つずつ読み出す場合の例を示す図である。
【図１３】８ビットデータを１つずつ演算処理する場合の例を示す図である。
【図１４】８ビットデータを４つずつ演算処理する場合の例を示す図である。
【図１５】差分絶対値を求める例を示す図である。
【図１６】一般的なＩＩＲフィルＴの構成例を示す図である。
【図１７】図１６のＩＩＲフィルタ構成を実現する際に必要なパイプラインレジスタ等を含めたより現実的な一実施形態を示す図である。
【図１８】本発明に係るデータフロー型演算装置の第６の実施形態を示す構成図である。
【図１９】図１８の演算装置の動作波形図である。
【図２０】本発明に係るデータフロー型演算装置の第７の実施形態を示す構成図である。
【図２１】図２０の演算装置の動作波形図である。
【図２２】固定小数点数により演算を行うこと可能なように図１７の構成に対しシフタおよび丸め処理を加えた構成例を示す図である。
【図２３】図１のアドレス生成装置１４や図９のアドレス生成装置４６のように、入力データに基づいてアドレスを生成するアドレス生成装置の構成例を示す図である。
【図２４】図２３のアドレス生成装置のアドレス生成動作について説明するためのタイミングチャートである。
【図２５】図１のアドレス生成装置１３や図９のアドレス生成装置４３のように、制御信号を生成することができるアドレス生成装置の構成例を示す図である。
【図２６】図２５のアドレス生成装置のアドレス生成動作について説明するためのタイミングチャートである。
【符号の説明】
【０１４４】
１０…演算装置、１１…メモリ、１１１〜１１３…バンク、１２〜１４（ＡＧ０〜ＡＧ２）…アドレス生成装置、１５（ＰＥ）…演算器、２０，２０Ａ…演算装置、２１…メモリ、２１１〜２１３…バンク、２２〜２４（ＡＧ０〜ＡＧ２）…アドレス生成装置、２５（ＰＥ０）…演算器、２６（ＰＥ１）…演算器、３０…演算装置、３１…メモリ、３１１〜３１３…バンク、３２〜３４（ＡＧ０〜ＡＧ２）…アドレス生成装置、３５（ＰＥ０）…演算器、３６（ＰＥ１）…演算器、４０…演算装置、４１…メモリ、４１１〜３１５…バンク、４２〜３６（ＡＧ０〜ＡＧ４）…アドレス生成装置、４７（ＰＥ０）…演算器、４８（ＰＥ１）…演算器、７０…ＩＩＲフィルタ、７１〜７６…レジスタ、７７〜８０…マルチプレクサ（ＭＵＸ）、８１…乗算器、８２…加算器（ＡＤＤＥＲ）、９０…演算装置、９１…メモリ、９１１〜９１４…バンク、９２〜９４…アドレス生成装置、９５…演算器（ＰＥ）、１００…演算装置、１０１…メモリ、１０１１〜１０１４…バンク、１０２〜１０５…アドレス生成装置、１０６…第１の演算器（ＰＥ０）、１０７…第２の演算器（ＰＥ１）、２００…アドレス生成装置、２０１，２０２…初期値を設定するレジスタ、２０３，２０４…ステップ値を設定するレジスタ、２０５…固定値を設定するレジスタ、２０６，２０７…演算装置、２０８，２０９…選択装置、２１０，２１１…カウンタ、２１２…演算装置、３００…アドレス生成装置、３０１…初期値を設定するレジスタ、３０２…ステップ値を設定する、３０３…演算装置、３０４…選択装置、３０５…カウンタ、３０６…演算装置、３０７…パラメータレジスタ、３０８…タイミングカウンタ、３０９…制御装置、３１０…制御信号生成装置、ＴＲＧ…起動信号、ＣＴＬＩＮ…制御入力、ＣＴＬＯＵＴ…制御出力、ＡＶＬＤ…アドレス有効信号。
【図１】
2006215611.tif 000003
【図２】
2006215611.tif 000004
【図３】
2006215611.tif 000005
【図４】
2006215611.tif 000006
【図５】
2006215611.tif 000007
【図６】
2006215611.tif 000008
【図７】
2006215611.tif 000009
【図８】
2006215611.tif 000010
【図９】
2006215611.tif 000011
【図１０】
2006215611.tif 000012
【図１１】
2006215611.tif 000013
【図１２】
2006215611.tif 000014
【図１３】
2006215611.tif 000015
【図１４】
2006215611.tif 000016
【図１５】
2006215611.tif 000017
【図１６】
2006215611.tif 000018
【図１７】
2006215611.tif 000019
【図１８】
2006215611.tif 000020
【図１９】
2006215611.tif 000021
【図２０】
2006215611.tif 000022
【図２１】
2006215611.tif 000023
【図２２】
2006215611.tif 000024
【図２３】
2006215611.tif 000025
【図２４】
2006215611.tif 000026
【図２５】
2006215611.tif 000027
【図２６】
2006215611.tif 000028