(57)【特許請求の範囲】
【請求項１】
第１の入力データ及び第２の入力データの加算又は減算を行って出力データを出力する第１の演算器と、
前記第１の演算器の出力データ又は第３の入力データを選択し、前記第１の演算器に前記第１の入力データとして出力する第１のセレクタと、
カウンタモードでは前記第１のセレクタにより選択されたデータを選択し、ＡＬＵモードでは第４の入力データを選択し、前記第１の演算器に前記第１の入力データとして出力する第２のセレクタと、
カウンタモードではカウンタのステップサイズを選択し、ＡＬＵモードでは第５の入力データを選択し、前記第１の演算器に前記第２の入力データとして出力する第３のセレクタと
を有することを特徴とするリコンフィグラブル回路。
【請求項２】
さらに、フェッチイネーブル信号及びアドレスを生成するシーケンサと、
コンフィグレーションデータを記憶するコンフィグレーションメモリと、
前記フェッチイネーブル信号及び前記アドレスに応じて、前記コンフィグレーションメモリから読み出されたコンフィグレーションデータを記憶するコンフィグレーションレジスタと、
前記コンフィグレーションレジスタに記憶されるコンフィグレーションデータに応じて、前記第１〜第３のセレクタを制御する制御部と、
前記第１の演算器の出力データの出力タイミングを制御する出力制御部とを有し、
前記第１の演算器、前記コンフィグレーションレジスタ、前記制御部及び前記出力制御部は、第１のプロセッシングエレメントを構成することを特徴とする請求項１記載のリコンフィグラブル回路。
【請求項３】
前記制御部は、カウンタモードにおいて、前記フェッチイネーブル信号をトリガとして、前記第１の演算器をカウンタとして起動することを特徴とする請求項２記載のリコンフィグラブル回路。
【請求項４】
前記コンフィグレーションレジスタは、前記第１の演算器の各出力データ間のインターバル時間を記憶するレジスタを有し、
前記出力制御部は、前記インターバル時間に応じて、前記第１の演算器の出力データの出力タイミングを制御することを特徴とする請求項２記載のリコンフィグラブル回路。
【請求項５】
さらに、前記第１のプロセッシングエレメントにバリッド信号を出力する第２のプロセッシングエレメントを有し、
前記第１のプロセッシングエレメント内の前記制御部は、前記バリッド信号をトリガとして、前記第１の演算器をカウンタとして起動することを特徴とする請求項２記載のリコンフィグラブル回路。
【請求項６】
さらに、前記第１のプロセッシングエレメントにバリッド信号を出力する第２のプロセッシングエレメントを有し、
前記第１のプロセッシングエレメント内の前記出力制御部は、前記バリッド信号に応じて、前記第１の演算器の各出力データの出力タイミングを制御することを特徴とする請求項２記載のリコンフィグラブル回路。
【請求項７】
さらに、第２の演算器の演算結果に応じてプリディケート信号を生成する第２のプロセッシングエレメントを有し、
前記第１のプロセッシングエレメントは、カウンタモードにおいて、前記プリディケート信号に応じて、カウンタとしての動作を開始又は停止することを特徴とする請求項２記載のリコンフィグラブル回路。
【請求項８】
前記第１のプロセッシングエレメントは、前記プリディケート信号によりカウンタの動作停止が指示されると、前記フェッチイネーブル信号が入力されるまで、カウンタとしての動作を停止することを特徴とする請求項７記載のリコンフィグラブル回路。
【請求項９】
さらに、第５の入力データを生成する第２のプロセッシングエレメントを有し、
前記コンフィグレーションレジスタは、前記カウンタのステップサイズを記憶するためのステップサイズレジスタと、前記初期値としての前記第３の入力データを記憶するための初期値レジスタと、前記ステップサイズレジスタ又は前記初期値レジスタのデータ書き換えを許可することを示すデータを記憶するための書き換え設定レジスタとを有し、
前記第１のプロセッシングエレメントは、前記書き換え設定レジスタが書き換えを許可するデータを記憶しているときのみ前記第５の入力データに応じて前記ステップサイズレジスタ又は前記初期値レジスタを書き換える書き換え制御部を有することを特徴とする請求項２記載のリコンフィグラブル回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、リコンフィグラブル回路に関する。
【背景技術】
【０００２】
リコンフィグラブル回路は、複数の機能回路を動的に切り替えて再構成することができる。アドレス生成機能回路は、単純な１次元連続アドレス生成や、単純２次元アドレス生成を実現する。その回路構成としては、単純インクリメンタル回路を１つ（１次元）又は複数（２次元以上）持つことによって、機能を実現している。動作の手順としては、起動トリガをうけてから自走し、比較的単純な動作のみ実現している。
【０００３】
下記の特許文献１には、ＡＬＵを用いたデータ転送アドレス生成装置が記載されている。バスマスタからスレーブユニットに向けて出力された要求アドレスデータを要求アドレスレジスタに格納する。バスマスタからのオーダリングを指定する信号をシステムバスインタフェース部でデコードして、マルチプレクサでいずれかのアドレステーブルを選択する。カウントクロックに応じてインクリメントされるバイナリカウンタのカウント値を、選択されたアドレステーブルでアドレステーブルデータに変換してマルチプレクサを介してＡＬＵに与える。ＡＬＵでアドレステーブルデータと要求アドレスデータとを加算し、その結果符号ビットが無効アドレスを示した場合バイナリカウンタをさらにインクリメントする。ＡＬＵからのアドレスデータをマスク回路でマスクして転送アドレスデータを生成する。
【０００４】
下記の特許文献２には、アドレス生成を行うディジタル信号処理プロセッサが記載されている。入力データ信号を伝送する複数のデータ入力バスと、上記データ入力バスからそれぞれの入力データ信号を入力し、この入力データ信号を記憶するデータメモリと、このデータメモリから出力された入力データ信号を入力し、演算処理を行う演算部と、上記演算部と上記データメモリとの動作を制御するアドレス生成部とからなるディジタル信号処理プロセッサにおいて、上記演算部におけるデータ入出力語長と、上記アドレス生成部におけるアドレス演算の語長とを同一にし、上記演算部にて演算された演算データを上記アドレス生成部のアドレスとする。
【０００５】
【特許文献１】特開平７−３１９７６２号公報
【特許文献２】特開平７−１６８７１３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
リコンフィグラブル回路では、アドレス生成のための単純なインクリメンタル回路しか設けられていない。これでは、高度なアドレス生成を行うことが困難である。
【０００７】
本発明の目的は、高機能のカウンタを実現できるリコンフィグラブル回路を提供することである。
【課題を解決するための手段】
【０００８】
本発明の一観点によれば、第１の入力データ及び第２の入力データの加算又は減算を行って出力データを出力する第１の演算器と、前記第１の演算器の出力データ又は第３の入力データを選択し、前記第１の演算器に前記第１の入力データとして出力する第１のセレクタと、カウンタモードでは前記第１のセレクタにより選択されたデータを選択し、ＡＬＵモードでは第４の入力データを選択し、前記第１の演算器に前記第１の入力データとして出力する第２のセレクタと、カウンタモードではカウンタのステップサイズを選択し、ＡＬＵモードでは第５の入力データを選択し、前記第１の演算器に前記第２の入力データとして出力する第３のセレクタとを有することを特徴とするリコンフィグラブル回路が提供される。
【発明の効果】
【０００９】
第１の演算器をＡＬＵとして動作させることができると共に、カウンタとしても動作させることができる。これにより、高機能のカウンタを実現することができる。
【発明を実施するための最良の形態】
【００１０】
（全体構成）
図１は、本発明の実施形態によるコンフィグラブル回路の構成例を示す図である。全体制御部１０１は、複数のクラスタ１０２を制御する。複数のクラスタ１０２間では、それぞれ制御信号及びデータの通信が行われる。コンフィグラブル回路は、ＬＳＩで構成される。
【００１１】
図２は、クラスタ１０２の構成例を示す図である。シーケンサ２０１、複数のＰＥ（プロセッシングエレメント：Processing Element）２０４及びＲＡＭ２０５は、ネットワーク２０３に接続され、制御信号及びデータの通信を行う。実線の矢印はデータを示し、破線の矢印は制御信号を示す。ＲＡＭ２０５は、ネットワーク２０３に対して、アドレスを入力し、データを出力する。シーケンサ２０１は、フェッチイネーブル信号ＦＥＴＣＨＥＮ及びアドレスＡＤＲを生成出力する。コンフィグレーションメモリ２０２は、コンフィグレーションデータを記憶し、フェッチイネーブル信号ＦＥＴＣＨＥＮ及びアドレスＡＤＲを入力し、コンフィグレーションデータを複数のＰＥ２０４に出力する。ＰＥ２０４は、フェッチイネーブル信号ＦＥＴＣＨＥＮ及びコンフィグレーションデータを入力し、それに応じて加減算器、カウンタ、乗算器等の所定の機能の動作を行う。
【００１２】
図３は、ＰＥ２０４の構成例を示す図である。コンフィグレーションメモリ３０２は、図２のコンフィグレーションメモリ２０２に対応する。コンフィグレーションメモリ２０２は、各ＰＥ２０４に分配して配置される。演算処理部３０１は、データＤＩ０，ＤＩ１及びバリッド信号ＶＡＬＩＤ０，ＶＡＬＩＤ１を入力し、それを基に演算を行い、出力制御部３０５を介してデータＤＯＵＴを出力する。バリッド信号ＶＡＬＩＤ０は、データＤＩ０の有効又は無効を示すタイミング信号である。バリッド信号ＶＡＬＩＤ１は、データＤＩ１の有効又は無効を示すタイミング信号である。コンフィグレーションメモリ３０２は、ＲＡＭであり、フェッチイネーブル信号ＦＥＴＣＨＥＮ及びアドレスＡＤＲを入力し、アドレスＡＤＲに応じたコンフィグレーションデータをコンフィグレーションレジスタ３０３に出力する。コンフィグレーションレジスタ３０３は、フェッチイネーブル信号ＦＥＴＣＨＥＮに応じて、そのコンフィグレーションデータを記憶する。制御部３０４は、リセット信号ＲＥＳＥＴ、バリッド信号ＶＡＬＩＤＣ及びプリディケート信号ＰＲＥＤＩＣＡＴＥを入力し、コンフィグレーションレジスタ３０３のデータに応じて、演算処理部３０１を制御し、出力制御部３０５を介してバリッド信号ＯＵＴＶＡＬＩＤを出力する。出力制御部３０５は、レジスタを有し、信号ＳＴＡＬＬ／ＳＴＯＰに応じて、演算処理部３０１及び制御部３０４の出力信号をそれぞれ出力信号ＤＯＵＴ及びＯＵＴＶＡＬＩＤとして出力する。すなわち、出力制御部３０５は、出力信号ＤＯＵＴ及びＯＵＴＶＡＬＩＤの出力タイミングを制御する。書き込み制御部３０６は、データＤＩ０及びＤＩ１を入力し、そのデータＤＩ０又はＤＩ１に応じて、コンフィグレーションレジスタ３０３にデータを書き込む。
【００１３】
図４は、演算処理部３０１の構成例を示す図である。演算処理部３０１は、ＡＬＵ（算術論理演算ユニット：Arithmetic and Logic Unit）４０１、フリップフロップ（レジスタ）４０５及びセレクタ４１１〜４１７を有する。ＡＬＵ４０１は、加減算器（演算器）４０２、キャリー制御部４０３及びフラグ生成部４０４を有する。
【００１４】
セレクタ４１１は、データＤＩ１又は即値ＩＭＭを選択して出力する。データＤＩ１は、図２のネットワーク２０３から入力されるデータである。即値ＩＭＭは、図３のコンフィグレーションレジスタ３０３に格納されているデータである。セレクタ４１２は、セレクタ４１１の出力データ又はフリップフロップ４０５のデータを選択して出力する。セレクタ４１３は、データＤＩ１又は即値ＩＭＭを選択して出力する。セレクタ４１４は、セレクタ４１２又は４１３の出力データを選択して出力する。セレクタ４１５は、ステップサイズＳＴＥＰ１又はＳＴＥＰ２を選択して出力する。ステップサイズＳＴＥＰ１及びＳＴＥＰ２は、コンフィグレーションレジスタ３０３に格納されており、カウンタのステップサイズを示す。セレクタ４１６は、セレクタ４１５又は初期値０を選択して出力する。セレクタ４１７は、セレクタ４１６の出力データ又はデータＤＩ０を選択して出力する。
【００１５】
キャリー制御部４０３は、キャリーデータＣＩを入力し、加減算器４０２に出力する。加減算器４０２は、セレクタ４１４及び４１７の出力データ、並びにキャリーデータＣＩを入力し、加算又は減算を行い、データＯＵＴ１を出力する。フラグ生成部４０４は、出力データＯＵＴ１を基にエラーフラグＥＲＲＯＲ、キャリーフラグＣＡＲＲＹ及びプリディケート信号ＰＲＥＤＩＣＡＴＥを出力する。フリップフロップ４０５は、データＯＵＴ１をラッチし、セレクタ４１２に出力する。エラーフラグＥＲＲＯＲ、キャリーフラグＣＡＲＲＹ及びプリディケート信号ＰＲＥＤＩＣＡＴＥは、図３の出力制御部３０５内のフリップフロップを介して出力される。
【００１６】
図２のＰＥ２０４は、コンフィグレーションデータに応じて、ＡＬＵモード及びカウンタモードを有する。演算処理部３０１は、ＡＬＵモードではＡＬＵとして動作し、カウンタモードではカウンタとして動作する。カウンタは、例えば、アドレスをカウントして生成することができる。
【００１７】
セレクタ４１１は、カウンタモードにおける初期アドレス値として、即値ＩＭＭ又はデータＤＩ１を選択出力するためのセレクタである。セレクタ４１２は、カウンタモードにおいて、初期アドレス値をロードするとき（初期時）にはセレクタ４１１の出力を選択出力し、それ以外ではフリップフロップ４０５の出力である前回のアドレス値を選択出力する。セレクタ４１３は、ＡＬＵモードにおいて、即値ＩＭＭ又はデータＤＩ１を選択出力するためのセレクタである。セレクタ４１４は、カウンタモードのときにはセレクタ４１２の出力を選択出力し、ＡＬＵモードのときにはセレクタ４１３の出力を選択出力する。
【００１８】
セレクタ４１５は、カウンタモードにおいて、ステップサイズＳＴＥＰ１又はＳＴＥＰ２を選択出力する。セレクタ４１６は、カウンタモードにおいて、初期アドレス値をロードするときには０を選択出力し、それ以外ではセレクタ４１５の出力を選択出力する。セレクタ４１７は、カウンタモードではセレクタ４１６の出力を選択出力し、ＡＬＵモードではデータＤＩ０を選択出力する。
【００１９】
図３において、コンフィグレーションレジスタ３０３は、カウンタモード又はＡＬＵモードを記憶するための動作モードレジスタを有する。動作モードレジスタは、フェッチイネーブル信号ＦＥＴＣＨＥＮに応じて、コンフィグレーションメモリ３０２から読み出された動作モードデータを記憶する。制御部３０４は、コンフィグレーションレジスタ３０３に記憶されるコンフィグレーションデータに応じて、セレクタ４１１〜４１７を制御する。
【００２０】
図５は、ＡＬＵモードにおける図４の演算処理部３０１の動作を説明するための図である。セレクタ４１１は、コンフォグレーションデータに応じて、即値ＩＭＭ又はデータＤＩ１を選択し、加減算器４０２に出力する。加減算器４０２は、セレクタ４１１の出力、データＤＩ０及びキャリーデータＣＩを入力し、加算又は減算を行い、データＯＵＴ１を出力する。フリップフロップ５０１は、図３の出力制御部３０５内に設けられ、データＯＵＴ１を所定のタイミングでラッチし、データＤＯＵＴを出力する。
【００２１】
図６は、カウンタモードにおける図４の演算処理部３０１の動作を説明するための図である。以下、アドレス値のカウントを行う場合を例に説明するが、その他の値のカウントを行うこともできる。セレクタ４１２は、初期アドレス値をロードするときには初期アドレス値ＩＮＩを選択出力し、それ以外ではフリップフロップ４０５の出力である前回のアドレス値を選択出力する。初期アドレス値ＩＮＩは、図４のセレクタ４１１の出力値である。セレクタ４１５は、カウンタのステップサイズＳＴＥＰ１又はＳＴＥＰ２を選択する。ステップサイズＳＴＥＰ１及びＳＴＥＰ２を用いて、２次元アドレスを生成することができる。セレクタ４１６は、初期アドレス値ＩＮＩをロードするときには０を選択出力し、それ以外ではセレクタ４１５の出力を選択出力する。加算器４０２は、セレクタ４１２及び４１６の出力値を加算し、アドレス値ＯＵＴ１をフリップフロップ４０５及び５０１に出力する。フリップフロップ４０５は、動作モードに応じて、バリッド信号ＶＡＬＩＤＣに同期して、アドレス値ＯＵＴ１をラッチし、セレクタ４１２に出力する。フリップフロップ５０１は、図５と同様に、図３の出力制御部３０５内に設けられ、動作モードにおうて、バリッド信号ＶＡＬＩＤＣに同期して、アドレス値ＯＵＴ１を所定のタイミングでラッチし、アドレス値ＤＯＵＴを出力する。
【００２２】
初期値ＩＮＩは、ネットワーク２０３（図２）の外部データパスから１サイクルで取得可能であり、その初期値ＩＮＩをカウンタ動作の初期アドレス値とすることができる。初期値ＩＮＩは、図４に示すように、コンフィグレーションレジスタ３０３内のデータＩＭＭの他、ネットワーク２０３からのデータＤＩ１を用いることができる。
【００２３】
カウンタモードには、インターバルモード及びカウントモードがある。以下、それぞれの動作について説明する。
【００２４】
（インターバルモード）
図７は、インターバルモードの動作例を説明するためのタイミングチャートである。制御部３０４は、フェッチイネーブル信号ＦＥＴＣＨＥＮのパルスをトリガとして演算処理部３０１をカウンタとして起動する。フェッチイネーブル信号ＦＥＴＣＨＥＮのパルスの後、初期オフセット時間ＩＮＯＦ経過すると、アドレス値ＤＯＵＴとして４が出力される共にバリッド信号ＯＵＴＶＡＬＩＤがハイレベルになる。初期オフセット時間ＩＮＯＦは、例えば５クロックである。バリッド信号ＯＵＴＶＡＬＩＤは、ハイレベルであればアドレス値ＤＯＵＴが有効でことを示し、ローレベルであればアドレス値ＤＯＵＴが無効であることを示す。その後、インターバル時間ＩＮＴ経過する毎に、次のアドレス値ＤＯＵＴ及びバリッド信号ＯＵＴＶＡＬＩＤが出力される。インターバル時間ＩＮＴは、例えば３クロックであり、各アドレス出力値ＤＯＵＴ間のインターバル時間である。この場合、初期アドレス値ＩＮＩは４であり、ステップサイズＳＴＥＰ１は４である。初期オフセット時間ＩＮＯＦ及びインターバル時間ＩＮＴは、図３のコンフィグレーションメモリ３０２及びコンフィグレーションレジスタ３０３に格納されている。出力制御部３０５は、コンフィグレーションレジスタ３０３内のインターバル時間ＩＮＴに応じて、アドレス出力値ＤＯＵＴの出力タイミングを制御する。インターバルモードによれば、フェッチイネーブル信号ＦＥＴＣＨＥＮを用いることにより、アプリケーション動作と連携して、カウンタを起動することができる。
【００２５】
図８は、インターバルモードの他の動作例を説明するためのタイミングチャートである。図８の動作例は、上記のインターバル時間ＩＮＴを０に設定した例である。また、ステップサイズＳＴＥＰ１及びＳＴＥＰ２を用いて、２次元アドレスを設定する例を示す。初期アドレス値は４に設定され、第１のステップサイズＳＴＥＰ１は４に設定され、第２のステップサイズＳＴＥＰ２は１０（１６進数）に設定され、第１の出力回数ＣＮＴ１が２に設定され、第２の出力回数ＣＮＴ２が２に設定される。上記の設定値は、コンフィグレーションメモリ３０２及びコンフィグレーションレジスタ３０３に格納されている。
【００２６】
初期アドレス値は４に設定されているので、第１のアドレス値ＤＯＵＴは４になる。次に、第１のステップサイズＳＴＥＰ１が４であるので、第２のアドレス値ＤＯＵＴは８になる。第１の出力回数ＣＮＴ１が２であるので、１次元のアドレス生成は終了する。次に、第２のステップサイズＳＴＥＰ２が１０（１６進数）であるので、第３のアドレス値ＤＯＵＴは１８（１６進数）になる。次に、第１のステップサイズＳＴＥＰ１が４であるので、第４のアドレス値ＤＯＵＴは１Ｃ（１６進数）になる。第１の出力回数ＣＮＴ１が２であるので１次元のアドレス生成は終了し、第２の出力回数ＣＮＴ２が２であるので２次元のアドレス生成も終了する。インターバル時間ＩＮＴが０であるので、４個のアドレス値ＤＯＵＴは連続して出力され、その間、バリット信号ＯＵＴＶＡＬＩＤはハイレベルを維持する。
【００２７】
図９は、インターバルモードの他の動作例を説明するためのタイミングチャートである。フェッチイネーブル信号ＦＥＴＣＨＥＮの第１のパルスが生成されると、コンフィグレーションメモリ３０２内の第１のコンフィグレーションデータがコンフィグレーションレジスタ３０３に設定され、第１のアドレスＤ１が生成される。その後、フェッチイネーブル信号ＦＥＴＣＨＥＮの第２のパルスが生成されると、クロックＣＬＫに同期してカウンタはセルフリセットされ、コンフィグレーションメモリ３０２内の第２のコンフィグレーションデータがコンフィグレーションレジスタ３０３に設定され、第２のアドレスＤ２が生成される。
【００２８】
（カウントモード）
カウントモードには、第１のカウントモード及び第２のカウントモードがある。図１０を参照しながら第１のカウントモードを説明し、図１１を参照しながら第２のカウントモードを説明する。
【００２９】
図１０は、第１のカウントモードの動作例を説明するためのタイミングチャートである。フェッチイネーブル信号ＦＥＴＣＨＥＮのパルスが生成されると、コンフィグレーションデータの設定は行われるが、カウンタは起動しない。バリッド信号ＶＡＬＩＤＣがハイレベルになると、その次のサイクル（クロック）でカウンタは起動する。すなわち、制御部３０４は、他のＰＥ２０４により出力されたバリッド信号ＶＡＬＩＤＣを入力し、バリッド信号ＶＡＬＩＤＣをトリガとして、演算処理部３０１をカウンタとして起動する。その後、カウンタは、カウントを繰り返し、アドレス値ＤＯＵＴとしてカウンタ値を出力する。バリッド信号ＶＡＬＩＤＣを用いることにより、外部からカウンタの起動を指示することができる。
【００３０】
図１１は、第２のカウントモードの動作例を説明するためのタイミングチャートである。フェッチイネーブル信号ＦＥＴＣＨＥＮのパルスが生成されると、コンフィグレーションデータの設定は行われるが、カウンタは起動しない。バリッド信号ＶＡＬＩＤＣがハイレベルになると、カウンタは起動する。ただし、図１０と異なるのは、バリッド信号ＶＡＬＩＤＣは、図６に示すように、フリップフロップ４０５及び５０１の同期信号として用いられる点である。すなわち、バリッド信号ＶＡＬＩＤＣの各パルスが、各カウント値ＤＯＵＴの出力タイミングを指示する。バリッド信号ＶＡＬＩＤＣのパルスが入力される毎に、カウント値ＤＯＵＴが出力されると共にバリッド信号ＯＵＴＶＡＬＩＤがハイレベルになる。出力制御部３０５は、他のＰＥ２０４により出力されたバリッド信号ＶＡＬＩＤＣを入力し、バリッド信号ＶＡＬＩＤＣに応じて、各カウント値（出力データ）ＤＯＵＴの出力タイミングを制御する。バリッド信号ＶＡＬＩＤＣを用いることにより、外部から各カウント値ＤＯＵＴの出力タイミングを指示することができる。
【００３１】
図１２は第２のカウントモードの他の動作例を説明するためのタイミングチャートであり、図１４は２次元画像の画素データを示す図である。モードＶＴＩＭを０に設定したときの動作例を示す。バリッド信号ＶＡＬＩＤＣのパルスが３個入力される毎に、カウント値ＤＯＵＴ及びバリッド信号ＯＵＴＶＡＬＩＤの出力が指示される。モードＶＴＩＭが０のときには、バリッド信号ＶＡＬＩＤＣの３個のパルスのうちの最後のパルスが入力される毎に、カウント値ＤＯＵＴが出力されると共にバリッド信号ＯＵＴＶＡＬＩＤがハイレベルになる。例えば、図１４において、３×３画素のうちの右端の列の画素データ１−３，２−３，３−３のアドレスを生成する際に用いることができる。
【００３２】
図１３は、第２のカウントモードの他の動作例を説明するためのタイミングチャートである。モードＶＴＩＭを１に設定したときの動作例を示す。バリッド信号ＶＡＬＩＤＣのパルスが３個入力される毎に、カウント値ＤＯＵＴ及びバリッド信号ＯＵＴＶＡＬＩＤの出力が指示される。モードＶＴＩＭが１のときには、バリッド信号ＶＡＬＩＤＣの３個のパルスのうちの最初のパルスが入力される毎に、カウント値ＤＯＵＴが出力されると共にバリッド信号ＯＵＴＶＡＬＩＤがハイレベルになる。例えば、図１４において、３×３画素のうちの左端の列の画素データ１−１，２−１，３−１のアドレスを生成する際に用いることができる。
【００３３】
（プリディケート信号）
図１５は、第１のＡＬＵ１５０１、第２のＡＬＵ１５０２及びプリディケート信号ＰＲＥＤＩＣＡＴＥを示す図である。ＡＬＵ１５０１及び１５０２は、それぞれ異なるＰＥ２０４内のＡＬＵである。プリディケート信号ＰＲＥＤＩＣＡＴＥは、ＡＬＵ（演算器）の演算結果により生成されるフラグ信号であり、例えば図４のフラグ生成部４０４により生成出力される。例えば、第１のＡＬＵ１５０１は、データＡ及びＢが同じであればプリディケート信号ＰＲＥＤＩＣＡＴＥをハイレベル（例えば１１（２進数））にし、データＡ及びＢが同じでなければプリディケート信号ＰＲＥＤＩＣＡＴＥをローレベルにする。第２のＡＬＵ１５０２は、プリディケート信号ＰＲＥＤＩＣＡＴＥがハイレベルであればデータＣ及びＤを加算してデータＥを出力し、プリディケート信号ＰＲＥＤＩＣＡＴＥがローレベルであれば出力データＥを維持する。
【００３４】
図１６は、ＡＬＵ１６０１、カウンタ１６０２及びプリディケート信号ＰＲＥＤＩＣＡＴＥを示す図である。ＡＬＵ１６０１及びカウンタ１６０２は、それぞれ異なるＰＥ２０４内のＡＬＵ及びカウンタである。ＡＬＵ１６０１はＡＬＵモードのＰＥ２０４を示し、カウンタ１６０２はカウンタモードのＰＥ２０４を示す。ＡＬＵ１６０１は、内部の演算器の演算結果に応じてプリディケート信号ＰＲＥＤＩＣＡＴＥを生成する。例えば、ＡＬＵ１６０１は、データＡ及びＢが同じであればプリディケート信号ＰＲＥＤＩＣＡＴＥをハイレベル（例えば１１（２進数））にし、データＡ及びＢが同じでなければプリディケート信号ＰＲＥＤＩＣＡＴＥをローレベルにする。カウンタ１６０２は、プリディケート信号ＰＲＥＤＩＣＡＴＥがハイレベルであれば動作を停止し、プリディケート信号ＰＲＥＤＩＣＡＴＥがローレベルであれば動作を開始する。すなわち、カウンタ１６０２として動作するＰＥ２０４は、カウンタモードにおいて、プリディケート信号ＰＲＥＤＩＣＡＴＥに応じて、カウンタとしての動作を開始又は停止する。これにより、カウンタ１６０２は、他のＰＥ２０４内のＡＬＵ１６０１の動作要因によって、開始又は停止することができる。
【００３５】
図１７は、プリディケート信号ＰＲＥＤＩＣＡＴＥによるカウンタの一時停止を示すタイミングチャートである。プリディケート信号ＰＲＥＤＩＣＡＴＥは、００（２進数）がカウンタの動作指示を示し、１０（２進数）がカウンタの一時停止指示を示す。プリディケート信号ＰＲＥＤＩＣＡＴＥが００（２進数）のときには、カウンタは動作する。プリディケート信号ＰＲＥＤＩＣＡＴＥが１０（２進数）のときには、カウンタは動作を一時停止する。その後、プリディケート信号ＰＲＥＤＩＣＡＴＥが００（２進数）になると、カウンタは動作を再開する。
【００３６】
図１８は、プリディケート信号ＰＲＥＤＩＣＡＴＥによるカウンタの完全停止を示すタイミングチャートである。プリディケート信号ＰＲＥＤＩＣＡＴＥは、００（２進数）がカウンタの動作指示を示し、１１（２進数）がカウンタの完全停止指示を示す。フェッチイネーブル信号ＦＥＴＣＨＥＮの第１のパルスが生成されると、第１のコンフィグレーションデータが設定される。プリディケート信号ＰＲＥＤＩＣＡＴＥが００（２進数）のときには、カウンタは動作する。その後、少なくともクロックの１サイクルでもフェッチイネーブル信号ＦＥＴＣＨＥＮが１１（２進数）になると、その次のサイクル（クロック）でカウンタは完全停止する。その後、プリディケート信号ＰＲＥＤＩＣＡＴＥが００（２進数）になっても、カウンタは停止したままである。すなわち、ＰＥ２０４は、プリディケート信号ＰＲＥＤＩＣＡＴＥによりカウンタの動作停止が指示されると、フェッチイネーブル信号ＦＥＴＣＨＥＮが入力されるまで、カウンタとしての動作を停止する。
【００３７】
次に、フェッチイネーブル信号ＦＥＴＣＨＥＮの第２のパルスが生成されると、第２のコンフィグレーションデータが設定される。プリディケート信号ＰＲＥＤＩＣＡＴＥが００（２進数）になると、カウンタは動作する。
【００３８】
（コンフィグレーションレジスタのデータ書き換え）
図１９は、図３の書き込み制御部３０６がコンフィグレーションレジスタ３０３のデータを書き換える処理を示すタイミングチャートである。フェッチイネーブル信号ＦＥＴＣＨＥＮのパルスが生成される度に、コンフィグレーションデータが設定され、コンフィグレーションレジスタ３０３内のコンフィグレーション書き換え設定レジスタＣＦＧＳＥＴが設定される。コンフィグレーション書き換え設定レジスタＣＦＧＳＥＴは、０のときにはコンフィグレーションレジスタ３０３の書き換えを禁止し、１のときにはコンフィグレーションレジスタ３０３の書き換えを許可する。バリッド信号ＶＡＬＩＤ０は、ハイレベルがデータＤＩ０の有効を示し、ローレベルがデータＤＩ０の無効を示す。
【００３９】
図２０は、上記のデータＤＩ０の構成例を示す図である。データＤＩ０は、ヘッダ２００１及びデータ２００２を示す。ヘッダ２００１は、コンフィグレーションレジスタ３０３内の書き換え対象のレジスタを指定する。例えば、初期アドレス値ＩＮＩ又はステップサイズＳＴＥＰ１等のレジスタを指定することができる。データ２００２は、上記の指定されたレジスタに書き込むデータを示す。
【００４０】
書き込み制御部３０６は、データＤＩ０を基に、指定されたレジスタに指定されたデータを書き込む。この際、書き込み制御部３０６は、コンフィグレーション書き換え設定レジスタＣＦＧＳＥＴが０のときにはコンフィグレーションレジスタ３０３を書き換えることができず、コンフィグレーション書き換え設定レジスタＣＦＧＳＥＴが１のときにはコンフィグレーションレジスタ３０３のデータを書き換えることができる。
【００４１】
第１のＰＥ２０４内の書き込み制御部３０６は、第２のＰＥ２０４により出力されたデータＤＩ０を入力する。コンフィグレーションレジスタ３０３は、カウンタのステップサイズＳＴＥＰ１及びＳＴＥＰ２を記憶するためのステップサイズレジスタと、初期値ＩＮＩを記憶するための初期値レジスタと、前記ステップサイズレジスタ又は前記初期値レジスタ等のデータ書き換えを許可することを示すデータを記憶するための書き換え設定レジスタＣＦＧＳＥＴ等を有する。第１のＰＥ２０４内の書き込み制御部３０６は、書き換え設定レジスタＣＦＧＳＥＴが書き換えを許可するデータを記憶しているときのみデータＤＩ０に応じて前記ステップサイズレジスタ又は前記初期値レジスタ等を書き換える。書き込み制御部３０６は、フェッチイネーブル信号ＦＥＴＣＨＥＮが入力されなくても、データＤＩ０に応じて前記ステップサイズレジスタ又は前記初期値レジスタ等を書き換える。
【００４２】
図２１は、コンフィグレーションレジスタ３０３のデータ書き換えによる３次元アドレスの生成方法を説明するための図である。２次元画像を構成する画素データは、例えば０〜１７のアドレスを有する。３×３画素の画像２１０１及び２１０２は、それぞれ２次元アドレス生成により指定することができる。画像２１０１のアドレスを生成し、その後に画像２１０２のアドレスを生成する場合には、３次元アドレスを生成すればよい。
【００４３】
まず、フェッチイネーブル信号ＦＥＴＣＨＥＮによりコンフィグレーションデータの設定を行い、画像２１０２の２次元アドレスを生成する。例えば、初期アドレス値ＩＮＩを０に設定し、第１のステップサイズＳＴＥＰ１を１に設定し、第２のステップアドレスＳＴＥＰ２を４に設定する。これにより、０→１→２→６→７→８→１２→１３→１４のアドレスを生成することができる。
【００４４】
通常は、この後に、フェッチイネーブル信号ＦＥＴＣＨＥＮによりコンフィグレーションデータの設定を行い、画像２１０２の２次元アドレスを生成する。例えば、初期アドレス値ＩＮＩを３に設定し、第１のステップサイズＳＴＥＰ１を１に設定し、第２のステップアドレスＳＴＥＰ２を４に設定する。これにより、３→４→５→９→１０→１１→１５→１６→１７のアドレスを生成することができる。
【００４５】
しかし、これでは２回のコンフィグレーションデータの設定が必要になり、コンフィグレーションメモリ３０２のコンフィグレーションデータ記憶容量を大きくしなければならない。そこで、コンフィグレーションレジスタ３０３を書き換えることにより、３次元アドレスを生成する。
【００４６】
図２２は、コンフィグレーションレジスタ３０３のデータ書き換えによる３次元アドレス生成方法を示すリコンフィグラブル回路の構成例を示す図である。第１のＰＥ２２００は、カウンタモードとして、カウンタ２２０１及びフリップフロップ２２０２を有する。第２のＰＥ２２１０は、ＡＬＵモードとして、加算器２２１１及びフリップフロップ２２１２を有する。
【００４７】
まず、上記の方法により、カウンタ２２０１は画像２１０１の２次元アドレスを生成する。その際、アドレス値１３を生成した時点で、加算器２２１０は、そのアドレス値ＤＯＵＴである１３と−１０を加算し、その加算値「３」をデータＤＩ０としてカウンタ２２０１に出力する。データＤＩ０のヘッダ２００１はアドレス初期値ＩＮＩのレジスタが書き換え対象であることを示し、データＤＩ０のデータ２００２は「３」が書き換えデータであることを示す。書き込み制御部３０６は、アドレス初期値ＩＮＩのレジスタに、アドレス初期値として３を書き込む。ステップサイズＳＥＴＰ１及びＳＥＴＰ２は、前の値を維持したままである。
【００４８】
画像２１０１の最後の画素データのアドレス値１４が生成された後、カウンタはアドレス初期値３から２次元アドレスを生成する。これにより、画像２１０２のアドレスとして、３→４→５→９→１０→１１→１５→１６→１７のアドレスを生成することができる。
【００４９】
以上のように、２次元アドレス生成を２回繰り返すことにより、画像２１０１及び２１０２のアドレスを生成することができる。画像２１０２のアドレス生成開始時には、アドレス初期値ＩＮＩのレジスタを書き換えればよい。これにより、１組のコンフィグレーションデータのみで、２個の２次元アドレスを生成することができ、コンフィグレーションメモリ３０２の容量を少なくすることができる。
【００５０】
１次元アドレス又は２次元アドレスの発生間隔をコンフィグレーションデータとしてユーザが設定することができる。カウンタ動作の途中であっても、コンフィグレーションレジスタ３０３のデータを書き換えることができるので、３次元アドレス生成も可能になる。
【００５１】
また、ステップサイズＳＴＥＰ１及びＳＴＥＰ２は、正値であっても、負値であってもよい。ステップサイズＳＴＥＰ１又はＳＥＴＰ２を正値にすれば、カウンタはカウントアップ動作を行う。逆に、ステップサイズＳＴＥＰ１又はＳＥＴＰ２を負値にすれば、カウンタはカウントダウン動作を行う。コンフィグレーションレジスタ３０３内のステップサイズＳＴＥＰ１又はＳＴＥＰ２を書き換えることにより、カウントアップ動作の途中でカウントダウン動作に切り替えることもできる。
【００５２】
また、プリディケート信号ＰＲＥＤＩＣＡＴＥにより、カウント動作を停止させた後に、コンフィグレーションレジスタ３０３のデータを書き換えることにより、カウンタ動作を再開させることもできる。
【００５３】
本実施形態によれば、目的に応じて、ＰＥ２０４の動作モードを切り替えることにより、ＰＥ２０４をＡＬＵとして動作させることができると共に、カウンタとしても動作させることができる。これにより、高機能のカウンタを実現することができる。
【００５４】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【００５５】
本発明の実施形態は、例えば以下のように種々の適用が可能である。
【００５６】
（付記１）
第１の入力データ及び第２の入力データの加算又は減算を行って出力データを出力する第１の演算器と、
前記第１の演算器の出力データ又は第３の入力データを選択し、前記第１の演算器に前記第１の入力データとして出力する第１のセレクタと
を有することを特徴とするリコンフィグラブル回路。
（付記２）
さらに、カウンタモードでは前記第１のセレクタにより選択されたデータを選択し、ＡＬＵモードでは第４の入力データを選択し、前記第１の演算器に前記第１の入力データとして出力する第２のセレクタを有することを特徴とする付記１記載のリコンフィグラブル回路。
（付記３）
さらに、カウンタモードではカウンタのステップサイズを選択し、ＡＬＵモードでは第４の入力データを選択し、前記第１の演算器に前記第２の入力データとして出力する第２のセレクタを有することを特徴とする付記１記載のリコンフィグラブル回路。
（付記４）
さらに、カウンタモードでは前記第１のセレクタにより選択されたデータを選択し、ＡＬＵモードでは第４の入力データを選択し、前記第１の演算器に前記第１の入力データとして出力する第２のセレクタと、
カウンタモードではカウンタのステップサイズを選択し、ＡＬＵモードでは第５の入力データを選択し、前記第１の演算器に前記第２の入力データとして出力する第３のセレクタとを有することを特徴とする付記１記載のリコンフィグラブル回路。
（付記５）
さらに、第１のステップサイズ又は第２のステップサイズを選択し、前記第３のセレクタに前記カウンタのステップサイズとして出力する第４のセレクタを有することを特徴とする付記４記載のリコンフィグラブル回路。
（付記６）
前記第１のセレクタは、カウンタモードにおいて、初期時には前記第３の入力データを初期値として選択し、それ以外では前記第１の演算器の出力データを選択し、前記第２のセレクタに出力することを特徴とする付記５記載のリコンフィグラブル回路。
（付記７）
さらに、フェッチイネーブル信号及びアドレスを生成するシーケンサと、
コンフィグレーションデータを記憶するコンフィグレーションメモリと、
前記フェッチイネーブル信号及び前記アドレスに応じて、前記コンフィグレーションメモリから読み出されたコンフィグレーションデータを記憶するコンフィグレーションレジスタと、
前記コンフィグレーションレジスタに記憶されるコンフィグレーションデータに応じて、前記第１〜第３のセレクタを制御する制御部と、
前記第１の演算器の出力データの出力タイミングを制御する出力制御部とを有し、
前記第１の演算器、前記コンフィグレーションレジスタ、前記制御部及び前記出力制御部は、第１のプロセッシングエレメントを構成することを特徴とする付記４記載のリコンフィグラブル回路。
（付記８）
前記制御部は、カウンタモードにおいて、前記フェッチイネーブル信号をトリガとして、前記第１の演算器をカウンタとして起動することを特徴とする付記７記載のリコンフィグラブル回路。
（付記９）
前記コンフィグレーションレジスタは、前記第１の演算器の各出力データ間のインターバル時間を記憶するレジスタを有し、
前記出力制御部は、前記インターバル時間に応じて、前記第１の演算器の出力データの出力タイミングを制御することを特徴とする付記７記載のリコンフィグラブル回路。
（付記１０）
さらに、前記第１のプロセッシングエレメントにバリッド信号を出力する第２のプロセッシングエレメントを有し、
前記第１のプロセッシングエレメント内の前記制御部は、前記バリッド信号をトリガとして、前記第１の演算器をカウンタとして起動することを特徴とする付記７記載のリコンフィグラブル回路。
（付記１１）
さらに、前記第１のプロセッシングエレメントにバリッド信号を出力する第２のプロセッシングエレメントを有し、
前記第１のプロセッシングエレメント内の前記出力制御部は、前記バリッド信号に応じて、前記第１の演算器の各出力データの出力タイミングを制御することを特徴とする付記７記載のリコンフィグラブル回路。
（付記１２）
さらに、第２の演算器の演算結果に応じてプリディケート信号を生成する第２のプロセッシングエレメントを有し、
前記第１のプロセッシングエレメントは、カウンタモードにおいて、前記プリディケート信号に応じて、カウンタとしての動作を開始又は停止することを特徴とする付記７記載のリコンフィグラブル回路。
（付記１３）
前記第１のプロセッシングエレメントは、前記プリディケート信号によりカウンタの動作停止が指示されると、前記フェッチイネーブル信号が入力されるまで、カウンタとしての動作を停止することを特徴とする付記１２記載のリコンフィグラブル回路。
（付記１４）
さらに、第５の入力データを生成する第２のプロセッシングエレメントを有し、
前記コンフィグレーションレジスタは、前記カウンタのステップサイズを記憶するためのステップサイズレジスタと、前記初期値としての前記第３の入力データを記憶するための初期値レジスタと、前記ステップサイズレジスタ又は前記初期値レジスタのデータ書き換えを許可することを示すデータを記憶するための書き換え設定レジスタとを有し、
前記第１のプロセッシングエレメントは、前記書き換え設定レジスタが書き換えを許可するデータを記憶しているときのみ前記第５の入力データに応じて前記ステップサイズレジスタ又は前記初期値レジスタを書き換える書き換え制御部を有することを特徴とする付記７記載のリコンフィグラブル回路。
（付記１５）
前記書き換え制御部は、前記フェッチイネーブル信号が入力されなくても、前記第５の入力データに応じて前記ステップサイズレジスタ又は前記初期値レジスタを書き換えることを特徴とする付記１４記載のリコンフィグラブル回路。
【図面の簡単な説明】
【００５７】
【図１】本発明の実施形態によるコンフィグラブル回路の構成例を示す図である。
【図２】クラスタの構成例を示す図である。
【図３】ＰＥの構成例を示す図である。
【図４】演算処理部の構成例を示す図である。
【図５】ＡＬＵモードにおける演算処理部の動作を説明するための図である。
【図６】カウンタモードにおける演算処理部の動作を説明するための図である。
【図７】インターバルモードの動作例を説明するためのタイミングチャートである。
【図８】インターバルモードの他の動作例を説明するためのタイミングチャートである。
【図９】インターバルモードの他の動作例を説明するためのタイミングチャートである。
【図１０】第１のカウントモードの動作例を説明するためのタイミングチャートである。
【図１１】第２のカウントモードの動作例を説明するためのタイミングチャートである。
【図１２】第２のカウントモードの他の動作例を説明するためのタイミングチャートである。
【図１３】第２のカウントモードの他の動作例を説明するためのタイミングチャートである。
【図１４】２次元画像の画素データを示す図である。
【図１５】第１のＡＬＵ、第２のＡＬＵ及びプリディケート信号を示す図である。
【図１６】ＡＬＵ、カウンタ及びプリディケート信号を示す図である。
【図１７】プリディケート信号によるカウンタの一時停止を示すタイミングチャートである。
【図１８】プリディケート信号によるカウンタの完全停止を示すタイミングチャートである。
【図１９】書き込み制御部がコンフィグレーションレジスタのデータを書き換える処理を示すタイミングチャートである。
【図２０】データの構成例を示す図である。
【図２１】コンフィグレーションレジスタのデータ書き換えによる３次元アドレスの生成方法を説明するための図である。
【図２２】コンフィグレーションレジスタのデータ書き換えによる３次元アドレス生成方法を示すリコンフィグラブル回路の構成例を示す図である。
【符号の説明】
【００５８】
１０１  全体制御部
１０２  クラスタ
２０１  シーケンサ
２０２  コンフィグレーションメモリ
２０３  ネットワーク
２０４  ＰＥ
２０５  ＲＡＭ
３０１  演算処理部
３０２  コンフィグレーションメモリ
３０３  コンフィグレーションレジスタ
３０４  制御部
３０５  出力制御部
３０６  書き込み制御部
４０１  ＡＬＵ
４０２  加減算器
４０３  キャリー制御部
４０４  フラグ生成部
４０５  フリップフロップ
４１１〜４１７  セレクタ
【図１】
0004838009.tif 000002
【図２】
0004838009.tif 000003
【図３】
0004838009.tif 000004
【図４】
0004838009.tif 000005
【図５】
0004838009.tif 000006
【図６】
0004838009.tif 000007
【図７】
0004838009.tif 000008
【図８】
0004838009.tif 000009
【図９】
0004838009.tif 000010
【図１０】
0004838009.tif 000011
【図１１】
0004838009.tif 000012
【図１２】
0004838009.tif 000013
【図１３】
0004838009.tif 000014
【図１４】
0004838009.tif 000015
【図１５】
0004838009.tif 000016
【図１６】
0004838009.tif 000017
【図１７】
0004838009.tif 000018
【図１８】
0004838009.tif 000019
【図１９】
0004838009.tif 000020
【図２０】
0004838009.tif 000021
【図２１】
0004838009.tif 000022
【図２２】
0004838009.tif 000023