(57)【特許請求の範囲】
【請求項１】
コンフィグレーションデータに基づいて任意の演算状態に構築されるリコンフィグ可能な集積回路装置において，
前記コンフィグレーションデータに基づいて，任意の演算状態に構築可能な複数のプロセッシングエレメントと，
前記コンフィグレーションデータに基づいて，前記複数のプロセッシングエレメントを任意の状態で接続するプロセッシングエレメント間ネットワークとを有し，
前記プロセッシングエレメントは，入力バリッド信号と入力データ信号を入力し，出力バリッド信号と出力データ信号を出力し，更に，入力データ保持レジスタと，前記入力データ信号を演算する演算処理回路と，前記演算処理回路の演算結果データを保持する出力データ保持レジスタとを有し，ホールドモードを有効とするコンフィグレーションデータでコンフィグレーションが更新された場合は，前記入力データ保持レジスタが当該更新時の入力データ信号を保持し，前記演算処理回路は前記入力データ保持レジスタに保持された入力データ信号について演算処理を行い，
第１のコンフィグレーションデータでコンフィグレーションされる回路を有する第１のコンテキストと，前記第１のコンテキストに後続し第２のコンフィグレーションデータでコンフィグレーションされる回路を有する第２のコンテキストとの間において，前記第２のコンテキストへの更新時のクロックサイクルに，前記第１のコンテキストに含まれる第１のプロセッシングエレメントの出力データ保持レジスタが保持する第１の出力データ信号を，前記第２のコンテキストに含まれ前記ホールドモードにコンフィグレーションされた第２のプロセッシングエレメントが入力するよう接続状態が構築され，前記更新時のクロックサイクルの次のサイクルで前記第１の出力データ信号を前記第２のプロセッシングエレメントの前記入力データ保持レジスタが保持する，リコンフィグ可能な集積回路装置。
【請求項２】
請求項１において，
前記プロセッシングエレメントは，前記ホールドモードを有効とするコンフィグレーションデータでコンフィグレーションが更新された場合は，前記更新直後にホールドモード信号に応答して，前記入力データ保持レジスタが前記入力データ信号を保持し，前記入力バリッド信号がインバリッドであっても前記ホールドモード信号に応答して，前記演算結果データに対応する出力データ信号の出力に同期して前記出力バリッド信号を出力するリコンフィグ可能な集積回路装置。
【請求項３】
請求項２において，
前記プロセッシングエレメントは，前記ホールドモードを無効とするコンフィグレーションデータでコンフィグレーションが更新された場合は，バリッドな入力バリッド信号に応答して，前記演算結果データに対応する出力データ信号の出力に同期して前記出力バリッド信号を出力するリコンフィグ可能な集積回路装置。
【請求項４】
請求項１または２において，
前記プロセッシングエレメントは，前記入力データ信号を前記演算処理回路に入力するセレクタを有し，
前記ホールドモードを有効とするコンフィグレーションデータでコンフィグレーションが更新された場合は，前記セレクタは，前記更新時に入力される入力データ信号を前記入力データ保持レジスタを介さずに前記演算処理回路に入力した後，前記入力データ保持レジスタに保持された入力データ信号を前記演算処理回路に入力し，
前記ホールドモードを無効とするコンフィグレーションデータでコンフィグレーションが更新された場合は，前記セレクタは，前記入力される前記入力データ信号を前記入力データ保持レジスタを介さずに前記演算処理回路に入力し続けるリコンフィグ可能な集積回路装置。
【請求項５】
請求項２または４において
前記プロセッシングエレメントは，フェッチイネーブル信号に応答して前記コンフィグレーションデータを入力してコンフィグレーションを更新し，ホールドモードか否かにかかわらず，前記フェッチイネーブル信号に応答して，前記更新時に前記出力バリッド信号をインバリッドにするとともに前記出力データ保持レジスタによる出力データ信号の取り込みを不能状態にするリコンフィグ可能な集積回路装置。
【請求項６】
請求項４において，
前記第１のコンテキストと，前記第２のコンテキストとの間において，前記第１のコンテキストに含まれる第１のプロセッシングエレメントの出力データ保持レジスタが保持する第１の出力データ信号を，前記第２のコンテキストへの更新時に，前記第２のコンテキストに含まれ前記ホールドモードにコンフィグレーションされた第２のプロセッシングエレメントが入力して前記演算処理回路が演算処理を開始し，前記更新時の前記第１の出力データ信号を入力データ信号として前記入力データ保持レジスタに保持し，前記入力データ保持レジスタに保持された入力データ信号を前記演算処理回路に入力する，リコンフィグ可能な集積回路装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，リコンフィグ可能な集積回路装置に関する。
【背景技術】
【０００２】
リコンフィグ可能な集積回路装置は，複数のプロセッシングエレメントと，それらプロセッシングエレメント間を接続するネットワークとを有し，外部または内部のイベントに応答して，シーケンサがプロセッシングエレメントとネットワークに回路構成用のデータであるコンフィグレーションデータを設定し，当該コンフィグレーションデータに応じてプロセッシングエレメントとネットワークが任意の演算状態または演算回路を構築する。従来の一般的なプログラム可能なマイクロプロセッサは，メモリに記憶されている命令を順番に読み出し逐次的に処理する。マイクロプロセッサのハードウエア構成は画一的であるので，様々な異なる処理を行うためには，限られた命令を組み合わせたプログラムをプロセッサに実行させなければならず，処理時間の短縮には一定の限界がある。
【０００３】
それに対して，リコンフィグ可能な集積回路装置は，加算器，乗算器，比較器などの演算機能を有するＡＬＵや，遅延回路，カウンタなどの複数種類の演算回路を持つ複数個のプロセッシングエレメントと，プロセッシングエレメント間を接続するネットワークとを有する。この複数のプロセッシングエレメントとネットワークを，コンフィグレーションデータによって所望の構成に構築（コンフィグレーション）し，その演算状態で所定の演算を実行する。一つの演算状態におけるデータ処理が完了すると，別のコンフィグレーションデータにより別の演算状態が構築され，その状態で異なるデータ処理が行われる。
【０００４】
このように，コンフィグレーションデータを切り替えることで異なる演算状態を動的に構築し，仮想的に大きな回路を時分割で実行することができる。しかも，それぞれが専用のハードウエア回路であるので，マイクロプロセッサがプログラムを処理するよりも高速に処理することができる。リコンフィグ可能な集積回路装置については，特許文献１，２，３に記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−２４４２３８号公報
【特許文献２】特開２００７−２７４３９７号公報
【特許文献３】特開２００６−１１９２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記の分割された回路の単位はコンテキスト（Context）と呼ばれる。動的に再構成可能な回路の動作方式のうち，コンテキストを切り替えることにより目的の回路動作を実現する方式をマルチコンテキスト方式と呼ぶ。近年においてLSIの回路設計は，RTLなどのハードウエア記述言語により記述された回路記述ファイルを，専用のコンパイラにより，動的に再構成可能な回路上で実行可能な形式に変換する。つまり，専用コンパイラは，LSI内の回路の物理的な制約に対応して，コンテキストの分割，各コンテキストでの回路合成，配置配線を含む変換処理を行う。
【０００７】
このように，複数のコンテキストを数クロックサイクルで切り替える場合，連続するコンテキスト間で演算データを授受する必要がある。一般的には，あるコンテキストの回路が生成したデータは，RAMやLUTなどのレジスタファイルに書き込まれ，次のコンテキストの回路が，そのレジスタファイルからデータを読み出して目的の処理を行う。このように時間的に連続するコンテキスト間でのデータの授受をレジスタファイルを利用して行うと，前のコンテキストにおいてデータを書き込むレジスタファイルと，後のコンテキストにおいてデータを読み出すレジスタファイルとが必要になる。これは回路資源と配線資源の消費が増大し，効率的に再構築することを妨げることになる。
【０００８】
そこで，本発明の目的は，時間的に連続するコンテキスト間のデータの授受を回路資源の消費を増大することなく可能にするリコンフィグ可能な集積回路装置を提供することにある。
【課題を解決するための手段】
【０００９】
実施の形態の第１の側面は，コンフィグレーションデータに基づいて任意の演算状態に構築されるリコンフィグ可能な集積回路装置において，
それぞれ演算回路を有し，前記コンフィグレーションデータに基づいて，任意の演算状態に構築可能な複数のプロセッシングエレメントと，
前記コンフィグレーションデータに基づいて，前記複数のプロセッシングエレメントを任意の状態で接続するプロセッシングエレメント間ネットワークとを有し，
前記プロセッシングエレメントは，入力バリッド信号と入力データ信号を入力し，出力バリッド信号と出力データ信号を出力し，更に，入力データ保持レジスタと，前記入力データ信号を演算する演算処理回路と，前記演算処理回路の演算結果データを保持する出力データ保持レジスタとを有し，ホールドモードを有効とするコンフィグレーションデータでコンフィグレーションが更新された場合は，前記入力バリッド信号がバリッド，インバリッドにかかわらず，前記入力データ保持レジスタが当該更新時の入力データ信号を保持し，前記演算処理回路は前記入力データ保持レジスタに保持された入力データ信号について演算処理を行う。
【発明の効果】
【００１０】
第１の側面によれば，時間的に連続するコンテキスト間のデータの授受を回路資源の消費を増大することなく可能にする。
【図面の簡単な説明】
【００１１】
【図１】本実施の形態におけるリコンフィグ可能な集積回路装置のリコンフィグ回路ユニットの構成例を示す図である。
【図２】ホールドモードを有しないプロセッシングエレメントの構成図である。
【図３】バリッド信号制御回路２２の回路図の一例を示す図である。
【図４】コンフィグレーション制御回路２０の一例を示す図である。
【図５】演算処理回路２４の一例を示す図である。
【図６】図２のプロセッシングエレメントの演算動作を示す図である。
【図７】図２のプロセッシングエレメントのコンフィグレーションデータが更新される時の演算動作を示す図である。
【図８】結線ネットワークの一例を示す図である。
【図９】レジスタファイルを内蔵するプロセッシングエレメントの構成とそのシンボルを示す図である。
【図１０】あるデータフローグラフを示す図である。
【図１１】図１０のデータフローグラフが２つのコンテキストに分割された例を示す図である。
【図１２】図１１の２つのコンテキストに分割された回路単位の動作を示すタイミングチャート図である。
【図１３】本実施の形態における２つのコンテキストに分割された例を示す図である。
【図１４】本実施の形態におけるプロセッシングエレメントの構成図である。
【図１５】図１４のプロセッシングエレメントの詳細な構成図である。
【図１６】図１５のプロセッシングエレメントの動作例を示すタイミングチャートである。
【図１７】図１３のコンテキスト＃０，＃１について，本実施の形態のプロセッシングエレメントのホールドモードを利用した場合の動作を示すタイミングチャート図である。
【図１８】本実施の形態の変型例における動作を示すタイミングチャート図である。
【発明を実施するための形態】
【００１２】
図１は，本実施の形態におけるリコンフィグ可能な集積回路装置のリコンフィグ回路ユニットの構成例を示す図である。プロセッシングエレメントＰＥ０〜ＰＥ３と，メモリプロセッシングエレメントＰＥ５と，それ以外のプロセッシングエレメントＰＥ４とが，プロセッサ間ネットワークＮＥＴ内のセレクタ４を介して任意に接続可能に構成されている。各プロセッシングエレメントＰＥ０〜ＰＥ５は，コンフィグレーションデータＣＤ０〜ＣＤ５に基づいて任意の構成に構築可能であり，また，ネットワークＮＥＴ内のセレクタ４（４ａ，４ｂ，４ｃ）も，コンフィグレーションデータＣＤｓに基づいて任意の接続状態に構築可能である。つまり，各プロセッシングエレメントの２つの入力に対応する１対のセレクタ４は，セレクタへのコンフィグレーションデータＣＤに基づいて，他のプロセッシングエレメントの出力と入力ポート２の入力の中からいずれかを選択する。そして，プロセッシングエレメントＰＥは，２つの入力を演算して１つの出力を出力する。これらの入力と出力は所定のビット数のデータである。
【００１３】
セレクタ４は，図中左下に一例として示されるとおり，コンフィグレーションデータＣＤを格納するレジスタ４１と，レジスタ４１のデータに応じて入力を選択するセレクタ回路４２と，セレクタ回路４２の出力をクロックＣＫに同期してラッチするフリップフロップ４３とで構成される。また，ネットワークＮＥＴは，データの入力ポート２と出力ポート３ともセレクタ４を介して所望の接続を可能にしている。
【００１４】
本実施の形態におけるリコンフィグ可能な集積回路装置は，ホールドモードにリコンフィグレーション可能なプロセッサエレメントを有する。通常，プロセッサエレメントは，入力バリッド信号が有効（バリッド）の時の入力データを演算処理し，その演算処理結果データを出力データとして，それが有効（バリッド）であることを示す出力バリッド信号と共に出力する。これにより，プロセッサエレメントの出力端子に接続される後段のプロセッサエレメントは，出力バリッド信号に基づき出力データを有効な入力データとして入力し演算処理することができる。
【００１５】
ホールドモードとは，入力バリッド信号がバリッドでない時でも入力データを入力して演算処理し，演算処理結果データである出力データの出力タイミングに同期して，バリッドな出力バリッド信号をその出力データと共に出力する動作モードである。これにより，コンフィグレーションデータの更新によりコンテキストが更新された時の，入力バリッド信号が無効（インバリッド）状態での入力データを，入力し演算処理することができる。その結果，コンフィグレーションデータが更新される前の第１のコンテキスト内のプロセッサエレメントの出力データを，コンフィグレーションデータが更新された後の第２のコンテキスト内のプロセッサエレメントに，レジスタファイルを介することなく直接引き渡すことができる。
【００１６】
一方，コンフィグレーションデータ更新時には，プロセッシングエレメントは出力バリッド信号を一時的にインバリッドにして，プロセッシングエレメント間でのデータのやりとりを禁止する。これによりコンフィグレーションデータ更新時での誤動作の可能性をなくしている。ホールドモードに構築されたプロセッシングエレメントは，出力バリッド信号がインバリッドであっても入力データを入力して演算することができる。
【００１７】
図２は，ホールドモードを有しないプロセッシングエレメントの構成図である。図２では，一般的なクロック，リセット信号などは，既知の信号であるので省略している。このプロセッシングエレメントＰＥは，１ビットの入力バリッド信号ＶＩ０，ＶＩ１と共に２つのｎビットの入力データ信号ＤＩ０，ＤＩ１を入力し，入力バリッド信号がバリッドの時の入力データ信号の演算結果であるｎビットの出力データ信号ＤＯを１ビットの出力バリッド信号ＶＯと共に出力する。入力バリッド信号ＶＩ０，ＶＩ１は，入力データ信号ＤＩ０，ＤＩ１が演算対象として有効なデータか否かをそれぞれ示す信号である。また，出力バリッド信号ＶＯは，出力データ信号ＤＯが演算結果データとして有効なデータか否かを示す信号である。この出力バリッド信号ＶＯは，後段に接続されるプロセッシングエレメントにとっては入力バリッド信号になる。
【００１８】
更に，プロセッシングエレメントＰＥは，コンフィグレーションデータＣＦＧをフェッチイネーブル信号ＦＥＴＣＨＥＮに応答して入力し内部にコンフィグレーションデータを分配するコンフィグレーション制御回路２０と，入力データ信号ＤＩ０，ＤＩ１を演算処理する演算処理回路２４と，入力バリッド信号ＶＩ０，ＶＩ１からバリッドモード信号Vmodeに応じて内部入力バリッド信号i_vinを生成するバリッド信号制御回路２２と，出力バリッド信号保持レジスタFF2と，出力データ保持レジスタFF3とを有する。演算処理回路２４は，コンフィグレーション制御回路２０から供給されるオペレーションコードOpeCodeに応じてコンフィグレーションされる。また，ストップ信号STOPは，デバッグ工程において全ての回路動作を停止させるための信号であり，通常動作状態ではストップ信号STOPは常時Lレベルである。
【００１９】
図３は，バリッド信号制御回路２２の回路図の一例を示す図である。バリッドモードには，両方の入力バリッド信号VI0,VI1が共にバリッド（Hレベル）の時に内部バリッド信号i_vinをHレベルにするモードと，いずれかの入力バリッド信号VI0,VI1がバリッドの時に内部バリッド信号i_vinをHレベルにするモードと，入力バリッド信号VI0がバリッドの時に内部バリッド信号i_vinをHレベルにするモードと，入力バリッド信号VI1がバリッドの時に内部バリッド信号i_vinをHレベルにするモードと，合計で４つのモードがある。これら４つのモードがバリッドモード信号Vmodeにより区別される。そして，バリッド信号制御回路２２は，１／４のセレクタ２２１を有し，２ビットのバリッドモード信号Vmodeに応じて，セレクタ２２１が，上記の４つのモードに対応する信号を選択し，内部バリッド信号i_vinとして出力する。
【００２０】
図４は，コンフィグレーション制御回路２０の一例を示す図である。コンフィグレーション制御回路２０は，フェッチイネーブル信号FETCHENがHレベルの時のｍビットのコンフィグレーションデータCFGをクロックCLKの立ち上がりエッジに応答してラッチし，内部にコンフィグレーションデータo_CFGを出力するレジスタFFaを有する。レジスタFFaはフリップフロップである。通常動作状態ではストップ信号STOPがLレベルであるので，ANDゲート２０１を介してフェッチイネーブル信号FETCHENがそのままフリップフロップFFaのイネーブル信号として入力される。また，コンフィグレーションリセット信号CRSTXに応答してフリップフロップのラッチ状態がリセットされる。
【００２１】
図５は，演算処理回路２４の一例を示す図である。この演算処理回路２４は，オペコードOpecodeによって種々の演算状態にリコンフィグレーション可能な演算回路ALUを有し，２つの入力データ信号DI0,DI1に対して，コンフィグレーションされた演算回路が演算処理を行い，演算結果信号ALU_outとして出力される。リコンフィグレーション可能な演算処理には，例えば，四則演算と，シフト動作と，比較動作と，AND,OR,EXOR,NOTなどの論理演算などが含まれる。また，プロセッサエレメントのうち，後述するようにRAMやLUTなどのレジスタファイルを内蔵するものもある。
【００２２】
図６は，図２のプロセッシングエレメントの演算動作を示す図である。この例では，コンフィグレーションデータで指定されるバリッドモードは，Vmode=11の例であり，両入力バリッド信号VI0,VI1が共にHレベル（バリッド）の場合に内部バリッド信号i_vinをHレベルにするモードである。つまり，入力データ信号DI0,DI1が共にバリッドな信号の場合に，演算結果の出力データ信号DOがバリッドな出力バリッド信号VOと共に出力される。また，この例でのプロセッシングエレメントの演算レイテンシは1クロックサイクルである。
【００２３】
最初に，クロックCLKのサイクルT0，T1で，入力バリッド信号VI0,VI1が共にHレベル（バリッド）になり，データ信号i0,i1が有効な入力データ信号DI0,DI1として入力されている。そして，演算処理回路２４がそれらの入力データ信号i0,i1を演算処理し，１クロックサイクルのレイテンシ後のサイクルT1で，出力バリッド信号VOのHレベル（バリッド）と共にデータ信号o0が有効な出力データ信号VOとして出力されている。同様に，サイクルT3で入力バリッド信号VI0,VI1が共にHレベルになり，データ信号i4,i5が有効な入力データ信号DI0,DI1として入力され，１クロックサイクルのレイテンシ後のサイクルT4で，出力バリッド信号VOのHレベル（バリッド）と共にデータ信号o1が有効な出力データ信号VOとして出力されている。
【００２４】
図２に示されたプロセッシングエレメントPEは，演算処理回路２４が入力データ信号DI0,DI1を入力バリッド信号VI0,VI1の状態にかかわらず直接入力して演算処理を行う。これは，図１に示したとおり，プロセッシングエレメントPEの入力端子の前段に設けられたネットワークNET内のセレクタ，およびプロセッシングエレメントPEの演算回路の論理遅延と配線遅延が大きくなるため，プロセッシングエレメントPE内での入力データ信号への論理追加による遅延をできるだけ少なくするためである。ここでいう論理追加とは，たとえば入力データ信号DI0,DI1を入力バリッド信号の状態によってマスクするなどの論理回路を挿入することなどを意味する。
【００２５】
ただし，プロセッシングエレメントPEは，バリッド状態の入力バリッド信号VI0,VI1に応答して，演算処理回路２４の演算処理に必要なレイテンシ後に，バリッドな出力バリッド信号VOを出力する。これにより，有効な入力データ信号VI0,VI1に対応する演算結果データである出力データ信号VOが，バリッドな出力バリッド信号VOと共に出力される。サイクルT2でのインバリッドな入力バリッド信号と共に入力される入力データ信号DI0,DI1に対しては，演算処理に必要な１レイテンシ後のサイクルT3では出力バリッド信号VOはインバリッド状態になっている。したがって，サイクルT2での有効でない入力データ信号に対する出力データ信号DOに対しては，出力バリッド信号VOがインバリッド（Lレベル）となる。このことは，実質的に，プロセッシングエレメントPEが有効でない入力データ信号に対する演算処理は行わないことと等価である。
【００２６】
なお，演算処理回路のレイテンシは，オペレーションコードOpecodeに応じて設定され，出力バリッド信号の出力レジスタFF2もそのレイテンシに対応したタイミングで出力バリッド信号VOを生成する。
【００２７】
図７は，図２のプロセッシングエレメントのコンフィグレーションデータが更新される時の演算動作を示す図である。この例でも，コンフィグレーションデータで指定されるバリッドモードはVmode=11であり，ストップ信号STOPはLレベルである。
【００２８】
図７の例では，サイクルT1でフェッチイネーブル信号FETCHENがHレベルになると共にコンフィグレーションデータCFG＝Aが入力されて，サイクルT2〜T5の期間，プロセッシングエレメントPEがコンフィグレーションAの状態に構築される。同様に，サイクルT5でフェッチイネーブル信号FETCHENがHレベルになりコンフィグレーションデータCFG＝Bが入力されて，サイクルT6〜T9の期間プロセッシングエレメントPEがコンフィグレーションBの状態に構築される。
【００２９】
サイクルT1で入力されるコンフィグレーションデータCFG＝Aは，次のサイクルT2のクロックCLKの立ち上がりエッジでコンフィグレーション制御回路２０によりラッチされ，内部コンフィグレーションデータo_CFGとして内部に供給され，その結果プロセッシングエレメントPEはコンフィグレーションAの状態に構築される。つまり，サイクルT2がコンフィグレーションが更新されるクロックサイクルである。そして，サイクルT3でバリッドな入力バリッド信号VI0,VI1と共に入力データ信号i0,i1が入力され，１クロックレイテンシ後のサイクルT4でバリッドな出力バリッド信号VOと共に演算結果o0が出力データ信号DOとして出力される。
【００３０】
同様に，T5で入力されるコンフィグレーションデータCFG＝Bは，次のサイクルT6のクロックCLKの立ち上がりエッジでコンフィグレーション制御回路２０によりラッチされ,内部コンフィグレーションデータo_CFGとして内部に供給され，その結果コンフィグレーションBの状態に構築される。サイクルT6でバリッドな入力バリッド信号VI0,VI1と共に入力データ信号i4,i5が入力され，１クロックレイテンシ後のサイクルT7でバリッドな出力バリッド信号VOと共に演算結果o1が出力データ信号DOとして出力される。
【００３１】
いずれのコンフィグレーションA,Bでも，サイクルT1,T5でのフェッチイネーブル信号FETCHENのHレベルに応答して，次のサイクルT2,T6では出力バリッド信号VOが共にインバリッド（Lレベル）にされている。これは，図２のアンドゲート２５による。このように，コンフィグレーションデータの更新時であるサイクルT2,T6では出力バリッド信号VOがLレベルにされて，コンフィグレーション切り替え後の意図しないデータの伝播を防いでいる。ただし，コンフィグレーションBでは，サイクルT6で既にバリッドな入力バリッド信号VI0，VI1と共に入力データ信号i4,i5が入力されている。これは，後述するレジスタファイルを内蔵したプロセッシングエレメントからの入力データ信号である。
【００３２】
図８は，結線ネットワークの一例を示す図である。図８の左側には，８個のプロセッシングエレメントPE0〜PE7と，プロセッシングエレメント間を接続するネットワークNETと，１個のプロセッシングエレメントPE8とが示され，ネットワークNETは，コンフィグレーションレジスタ４１と，４入力１出力の２つのセレクタ4_1,4_2を有する。セレクタ4_1の４つの入力には４つのプロセッシングエレメントPE0〜PE3の各出力が接続され，セレクタ4_2の４つの入力には４つのプロセッシングエレメントPE4〜PE7の各出力が接続される。そして，セレクタ4_1，4_2へのコンフィグレーションデータは，それぞれsel0=2，sel1=0である。つまり，セレクタ4_1がプロセッシングエレメントPE2の出力を選択してプロセッシングエレメントPE8の一方の入力に接続し，セレクタ4_2がプロセッシングエレメントPE4の出力を選択してプロセッシングエレメントPE8の他方の入力に接続している。
【００３３】
図８の場合，ネットワークNETにおける有効な入力の結線はPE2,PE4であり，有効な出力の結線はPE8である。そこで，図８の右側には，有効な結線のみを抽出して簡略化したモデル図（コネクションモデル）が示されている。このコネクションモデルは，処理されるデータの流れを表現するデータフローを示す目的のためにデータフローグラフとしてしばしば使用される。
【００３４】
図９は，レジスタファイルを内蔵するプロセッシングエレメントの構成とそのシンボルを示す図である。レジスタファイル内蔵型のプロセッシングエレメントPEは，図５の演算処理回路であるALUの代わりに，RAM(ランダムアクセスメモリ)やLUT(ルックアップテーブル)などで構成されるレジスタファイル３２を有する。そして，入力制御回路３１がライトデータo0-o3を入力してレジスタファイル３２に書き込み，出力制御回路３３がレジスタファイル３２内のデータを読み出しリードデータi0-i3として出力する。そして，レジスタファイル３２の入出力制御や，アドレスによるアクセス制御は，コンフィグレーションレジスタ３０に供給されるコンフィグレーションデータによって構築される。また，レジスタファイル３２は，システムバス３５からライトまたはリードアクセスされる。
【００３５】
図９の右側には，レジスタファイル内蔵型のプロセッシングエレメントのシンボルが示されている。図中３６がレジスタファイル３２内のデータをリードデータi0-i3として出力する場合のシンボルを示す。この場合は，レジスタファイル内のデータが，出力制御回路３３の後段に接続される図示しないプロセッシングエレメントへの入力データ信号i0-i3として出力されることを意味する。
【００３６】
一方，図中３７がライトデータo0-o3をレジスタファイル３２に格納する場合のシンボルを示す。この場合は，入力制御回路３１の前段に接続される図示しないプロセッシングエレメントからの出力データ信号o0-o3が入力されることを意味する。いずれも，データのフローを示すデータフローグラフとして表される。
【００３７】
図１０は，あるデータフローグラフを示す図である。このデータフローフラグを参照して，問題点を説明する。図１０のデータフローグラフでは，入力データ信号i0,i1をプロセッシングエレメントPEaが乗算し，その出力をプロセッシングエレメントPEdが反転して出力データ信号o2を出力し，入力データ信号i2,i3をプロセッシングエレメントPEbが加算して出力データ信号o1を出力し，入力データ信号i4,i5をプロセッシングエレメントPEcが減算し，その出力と入力データ信号i6をプログラムPEeが加算して出力データ信号o3を出力する。
【００３８】
入力データ信号i0-i5は，図示しないレジスタファイル内蔵型のプロセッシングエレメントから読み出され，出力データ信号o1-o3は，同プロセッシングエレメントに書き込まれる。
【００３９】
一般に，このようなデータフローを目的とする回路は，ハードウエア記述言語やスケマティックエディタで回路動作を記述し，その記述ファイルをリコンフィグLSI用の専用コンパイラで論理合成することで得ることができる。この回路を構築するために必要な回路のリソースは，データの入出力を行うレジスタ群５０，５１と，５つのプロセッシングエレメントPEa-PEeと，それらを接続する結線ネットワーク５２である。
【００４０】
ただし，リコンフィグ可能なLSIで利用可能な回路リソースは有限であるので，データフローグラフに必要な回路のリソースが，利用可能なリソースの制限を超える場合は，コンパイラはデータフローグラフ全体を一度に実行可能な単位，即ちコンテキストに分割する。たとえば，利用可能なプロセッシングエレメントの数が最大で３個の場合を仮定すると，図１０中の破線で囲まれた単位５３，５４がその一例である。
【００４１】
図１１は，図１０のデータフローグラフが２つのコンテキストに分割された例を示す図である。すなわち，図１１では，図１０のプロセッシングエレメントPEa,PEbを含む回路単位５３を構築するPE0,PE1を有するコンテキスト＃０と，図１０のプロセッシングエレメントPEc,PEd,PEeを含む回路単位５４を構築するPE0,PE1,PE2を有するコンテキスト＃１とに分割されている。
【００４２】
それに伴って，コンテキスト＃０では，入力データ信号i0-i3が入力され，出力データ信号o1,n0が出力されている。一方，コンテキスト＃１では，入力データ信号i4-i6とn0とが入力され，出力データ信号o2,o3が出力されている。２つのコンテキストに分割されたことにより，コンテキスト＃０のプロセッシングエレメントPE0は出力データ信号n0を一旦レジスタファイル内蔵型プロセッシングエレメントに書き込み，コンテキスト＃１のプロセッシングエレメントPE1がそのデータを入力データ信号n0としてレジスタファイル内蔵型プロセッシングエレメントから読み出す。つまり，両コンテキストはレジスタファイル内蔵型プロセッシングエレメントを介して，データn0の引き渡しを行うことが必要になる。
【００４３】
図１２は，図１１の２つのコンテキストに分割された回路単位の動作を示すタイミングチャート図である。図１２には，サイクルT2-T5でのコンテキスト＃０とサイクルT6-T9でのコンテキスト＃１の動作が示されている。また，プロセッシングエレメントPE0,PE1,PE2の入力データ信号DI0,DI1と入力バリッド信号VI0,VO1と出力データ信号DOと出力バリッド信号VOに加えて，レジスタファイル内蔵型プロセッシングエレメントPErの読み出し信号i0-i6,n0と書き込み信号n0,o1-o3が示されている。
【００４４】
コンテキスト＃０において，プロセッシングエレメントPE0,PE1がそれぞれ，サイクルT3で入力される入力データ信号i0,i1とi2,i3とを演算して，サイクルT4で演算結果である出力データ信号n0，o1を出力している。出力データ信号n0はサイクルT5でレジスタファイル内蔵型プロセッシングエレメントPErに書き込まれている。
【００４５】
そして，次のコンテキスト＃１において，リコンフィグデータ更新時のサイクルT6で，プロセッシングエレメントPE1が，レジスタファイル内蔵型プロセッシングエレメントPErから読み出される入力データ信号n0を入力し，１サイクル後のサイクルT7で演算結果データとして出力データ信号o2を出力している。
【００４６】
このように，レジスタファイル内蔵型プロセッシングエレメントPErを介してデータn0のやり取りを行うことは，プロセッシングエレメントPErとそれに接続するための配線コストを消費してしまい，ハードウエアを無駄に消費することを意味する。また，レジスタファイル内蔵型プロセッシングエレメントPErへの書き込みや読み出しのレイテンシが，データフローの性能低下を招くことにもなる。
【００４７】
［実施の形態におけるプロセッシングエレメント］
本実施の形態におけるプロセッシングエレメントは，コンフィグレーションデータによりホールドモードに構築可能である。ホールドモードに構築されたプロセッシングエレメントは，バリッドを示す入力バリッド信号が入力されなくても，コンフィグレーションが更新された時の入力データ信号をラッチし，コンフィグレーションされた演算処理回路のレイテンシ後に出力バリッド信号をバリッドにすると共に演算処理された出力データ信号を出力する。
【００４８】
したがって，図１２で説明したように連続する別のコンテキストの間でデータ信号のやり取りをすることなく，先行するコンテキスト内のプロセッシングエレメントの出力データ信号を，後続のコンテキスト内の別のプロセッシングエレメントが入力データ信号として入力することができる。それにより，ハードウエアを無駄に消費することがなく，レジスタファイル内蔵型プロセッシングエレメントへの書き込みや読み出しのレイテンシの問題を回避できる。
【００４９】
つまり，図１２に破線で示したように，サイクルT6でプロセッシングエレメントPE0が未だ保持している出力データ信号n0を，サイクルT7でプロセッシングエレメントPE1が入力データ信号n0として入力し演算処理を行う。そして，その後プロセッシングエレメントPE0が新たな演算結果i4-i5を入力しないようにするために，プロセッシングエレメントPE1はサイクルT6の入力データ信号n0を入力データ保持レジスタにラッチして保持する。
【００５０】
図１３は，本実施の形態における２つのコンテキストに分割された例を示す図である。すなわち，図１１と同様に，図１０のプロセッシングエレメントPEa,PEbを含む回路単位５３を構築するPE0,PE1を有するコンテキスト＃０と，図１０のプロセッシングエレメントPEc,PEd,PEeを含む回路単位５４を構築するPE0,PE1,PE2を有するコンテキスト＃１とに分割されている。そして，コンテキスト＃０では，入力データ信号i0-i3が入力され，出力データ信号o1が出力されている。一方，コンテキスト＃１では，入力データ信号i4-i6が入力され，出力データ信号o2,o3が出力されている。ただし，図１１と異なり，コンテキスト＃１のプロセッシングエレメントPE1が，コンテキスト＃１に更新された時に，コンテキスト＃０においてプロセッシングエレメントPE0が出力して保持している出力データ信号n0を，入力している。そのために，コンテキスト＃１においてプロセッシングエレメントPE1はホールドモードに構築されている。それ以外のプロセッシングエレメントPE0,PE2はホールドモードには構築されていない。
【００５１】
図１４は，本実施の形態におけるプロセッシングエレメントの構成図である。このプロセッシングエレメントPEは，ホールドモードを有効にするコンフィグレーションデータが与えられると，ホールドモードに構築される。図１４のプロセッシングエレメントPEは，図２のPEと同様に，コンフィグレーション制御回路２０と，バリッド信号制御回路２２と，演算処理回路２４と，出力バリッド信号を保持する出力バリッド信号保持レジスタFF2と，出力データ信号保持レジスタFF3とを有する。さらに，このプロセッシングエレメントPEは，コンフィグレーションデータにホールドモード信号が含まれ，コンフィグレーション制御回路２０が，ホールドモードを有効にするコンフィグレーションデータに応答して，ホールドモード信号Hmodeを出力する。さらに，プロセッシングエレメントPEは，入力データ信号DI0,DI1を保持する入力データ保持レジスタFF0,FF1と，演算処理回路２４に入力する内部入力データ信号i_DI0,i_DI1を選択するセレクタSEL0,SEL1と，入力ホールド制御回路２７と，出力データ保持レジスタFF3と，出力バリッド信号を生成する回路２５とその出力バリッド信号保持レジスタFF2とを有する。
【００５２】
図１５は，図１４のプロセッシングエレメントの詳細な構成図である。図１５において，コンフィグレーション制御回路２０は，３つの回路２０ａ，２０ｂ，２０ｃを有する。第１のコンフィグレーション制御回路２０ａは，フェッチイネーブル信号FETCHENがHレベルのときに，バリッドモード信号CFG_VMODEをクロックCLKの立ち上がりエッジでラッチするフリップフロップであるレジスタFFaを有する。第２のコンフィグレーション制御回路２０ｂは，フェッチイネーブル信号FETCHENがHレベルのときに，ホールドモード信号CFG_DHMODEをクロックCLKの立ち上がりエッジでラッチするレジスタFFbを有する。そして，第３のコンフィグレーション制御回路２０ｃは，フェッチイネーブル信号FETCHENがHレベルのときに，オペレーションコードCFG_OPECODEをクロックCLKの立ち上がりエッジでラッチするレジスタFFdを有する。これらのレジスタFFa,FFb,FFdは，ラッチする信号のビット数に対応しており，またコンフィグレーションリセット信号CRSTXがLレベルのときにリセットされる。そして，それぞれラッチされたコンフィグレーション信号は内部に分配される。
【００５３】
入力ホールド制御回路２７は，フェッチイネーブル信号FETCHENをクロックCLKに応答してラッチして１クロックサイクル遅延した遅延フェッチイネーブル信号sr_fetchen_1dを生成するフリップフロップFFcと，ホールドモード信号sr_cfg_dhmodeと遅延フェッチイネーブル信号sr_fetchen_1d を入力するANDゲート６２，６３とANDゲート６４，６５とを有する。これらにより入力データ保持レジスタFF0,FF1のイネーブル信号と，セレクタSLE0,SEL1への選択信号を生成する。
【００５４】
セレクタSEL0,SEL1は，それぞれセレクタ回路S1,S2とS3,S4を有する。セレクタ回路S2,S4がホールドモード「１」と非ホールドモード「０」とに応じて入力信号を選択し，セレクタ回路S1,S3がホールドモード時において入力信号を切り替える。
【００５５】
ホールドモード信号sr_cfg_dhmodeがLレベル（非ホールドモード）になると，セレクタ回路S2,S4は「０」側を選択し，入力データ信号DI0,DI1を演算処理回路２４に入力する。一方，ホールドモード信号sr_cfg_dhmodeがHレベル（ホールドモード）になると，セレクタ回路S2,S4は「１」側を選択し，セレクタ回路S1,S3の出力を演算処理回路２４に入力する。さらに，セレクタ回路S1,S3は，ANDゲート６２，６３の出力「１」または「０」に応じて，入力データ信号DI0,DI1か，入力データ保持レジスタFF0,FF1の出力かを選択する。そして，ホールドモード信号sr_cfg_dhmodeがHレベルの場合に，ANDゲート６２，６３の出力は，コンフィグレーションの更新時のフリップフロップFFcの出力のLレベルにより，Lレベルになり，更新から１クロック遅延して生成されるフリップフロップFFcの出力のHレベルにより，Hレベルになる。つまり，セレクタ回路S1,S2は，ホールドモードに更新されたとき，更新時のクロックサイクルで入力データ信号DI0,DI1を選択し，更新時の次のクロックサイクル以降は入力データ保持レジスタFF0,FF1に保持されている入力データ信号を選択する。
【００５６】
さらに，バリッド信号制御回路２２は，前述のセレクタ回路２２１に加えて，入力バリッド信号VI0,VI1とホールドモード信号sr_cfg_dhmode[1:0]との論理和を生成するORゲート６０，６１とを有する。すなわち，バリッド信号制御回路２２は，非ホールドモードの場合は入力バリッド信号VI0,VI1がHレベルの時に内部バリッド信号i_vinをHレベルにし，ホールドモードの場合は入力バリッド信号VI0,VI1がHレベルの時に加えて，ホールドモード信号sr_cfg_dhmode[1:0]がHレベルの時も内部バリッド信号i_vinをHレベルにする。
【００５７】
出力バリッド信号生成回路２５は，内部バリッド信号i_vinを反転するインバータ２５ａと，それとフェッチイネーブル信号FETCHENとの論理和をとるORゲート２５ｂと，その出力を反転するインバータ２５ｃとを有する。これにより，出力バリッド信号生成回路２５は，フェッチイネーブル信号FETCHENがHレベルになるとクロックCLKに同期して外部バリッド信号VOをLレベル（インバリッド）にし，フェッチイネーブル信号FETCHENがLレベルの期間は，内部バリッド信号i_vinがHレベルなるとクロックCLKに同期して外部バリッド信号VOをHレベル（バリッド）にする。また，出力バリッド信号生成回路２５の最終段のフリップフロップFF2は，クロックCLKの１サイクルのレイテンシを有し，これは演算処理回路２４の演算処理のレイテンシが１であることに対応している。したがって，このフリップフロップFF2は，コンフィグレーションデータに応じて演算処理回路２４のレイテンシと同じレイテンシになるように構築される。
【００５８】
また，ORゲート７０，７１とインバータ７２は，出力データ保持レジスタFF3のイネーブル信号を生成する回路である。この回路は，フェッチイネーブル信号FETCHENがHレベルになるとFF3のイネーブル信号をLレベルにして出力データ保持レジスタFF3のラッチ動作を禁止し，入力バリッド信号VI0,VI1がHレベルになると内部バリッド信号i_vinがHレベルになりFF3のイネーブル信号をHレベルにしてFF3のラッチ動作を許可し，さらに，ホールドモード信号sr_cfg_dhmodeがHレベルになるときも内部バリッド信号i_vinがHレベルになりFF3のイネーブル信号をHレベルにしてFF3のラッチ動作を許可する。
【００５９】
図１６は，図１５のプロセッシングエレメントの動作例を示すタイミングチャートである。図１６でも，図１２と同様に，クロックサイクルT1でフェッチイネーブル信号FETCHENがHレベルになりT2でコンフィグレーションが更新され，プロセッシングエレメントはサイクルT2-T5でコンテキスト＃０に構築される。同様に，サイクルT5でフェッチイネーブル信号FETCHENがHレベルになりT6でコンフィグレーションが更新され，プロセッシングエレメントはサイクルT6-T9でコンテキスト＃１に構築される。
【００６０】
図１６の例では，コンテキスト＃０では，バリッドモードCFG_VMODEが「００」，ホールドモードCFG_VMODEが「００」，オペレーションコードCFG_OPECODEが「add（加算演算）」になり，コンテキスト＃１では，バリッドモードCFG_VMODEが「００」，ホールドモードCFG_VMODEが「１１」，オペレーションコードCFG_OPECODEが「sub（減算演算）」になっている。つまり，コンテキスト＃０では非ホールドモードに構築され，コンテキスト＃１ではホールドモードに構築される。
【００６１】
まず，コンテキスト＃０の非ホールドモードの場合について説明する。サイクルT1でフェッチイネーブル信号FETCHENがHレベルになり，次のサイクルT2のクロックCLKの立ち上がりエッジでフリップフロップFFa,FFb,FFdが各コンフィグレーションデータをラッチし，ラッチしたコンフィグレーションデータにより内部の回路が構築される。前述のとおり，ホールドモードCFG_DHMODEが「００」であるので，内部ホールドモード信号sr_cfg_dhmode[1:0]が共にLレベルになり，セレクタSEL0,SEL1のセレクタ回路S2,S4は共に「０」側を選択し，入力データ信号DI0,DI1が演算処理回路２４の入力信号i_DI0,i_DI1になる。
【００６２】
サイクルT3で入力バリッド信号VI0,VI1がHレベルになると，バリッド信号制御回路２２が内部バリッド信号i_vinをHレベルにする。これで出力データ保持レジスタFF3はイネーブル状態になる。また，出力バリッド保持レジスタFF2はストップ信号STOPがLレベルであるのでイネーブル状態になっている。
【００６３】
演算処理部２４は，入力信号i_DI0,i_DI1である入力データ信号i0,i1の減算処理をレイテンシ１で行い，サイクルT4で演算結果データを出力し，出力データ保持レジスタFF3が出力データ信号o0(i0+i1)を出力する。同様に，出力バリッド信号生成回路２５の最終段のフリップフロップFF2が，入力バリッド信号VI0,VI1がHレベルになるサイクルT3からレイテンシ１後のサイクルT4で，出力データ信号o0(i0+i1)の出力に同期して，出力バリッド信号VOをHレベルにする。
【００６４】
このように，非ホールドモードでは，演算処理回路２４が常時入力データ信号DI0,DI1を入力し，入力バリッド信号VI0,VI1がHレベルに対応する入力データ信号i0,i1に対応する出力データ信号o0(i0+i1)の出力に同期して出力バリッド信号VOをHレベルにする。これにより，実質的に，有効な入力データ信号しか演算されず，それに対応する有効な出力データ信号だけが有効な信号として出力される。演算そのものの論理と，バリッド，インバリッド判定の論理を分けることで，論理回路の段数を短くしている。
【００６５】
次に，コンテキスト＃１のホールドモードの場合について説明する。ホールドモードに構築されたプロセッシングエレメントPE1では，入力バリッド信号VI0,VI1がバリッド，インバリッドにかかわらず，入力データ保持レジスタFF0,FF1が更新時（サイクルT6）の入力データ信号i2,i3をサイクルT7でのクロックCLKの立ち上がりエッジで保持し，演算処理回路２４が入力データ保持レジスタに保持された入力データ信号i2,i3について演算処理を行う。さらに，図１５の例では，セレクタ回路S1,S3を設けて，更新時（サイクルT6）での入力データ信号i2,i3をサイクルT6のタイミングから演算処理回路２４に入力している。
【００６６】
まず，入力データ保持レジスタFF0,FF1とセレクタSEL0,SEL1側について説明する。サイクルT5でフェッチイネーブル信号FETCHENがHレベルになり，次のサイクルT6のクロックCLKの立ち上がりエッジでフリップフロップFFa,FFb,FFdが各コンフィグレーションデータをラッチし，ラッチしたコンフィグレーションデータにより内部の回路が構築される。今度はホールドモードCFG_DHMODEが「１１」であるので，内部ホールドモード信号sr_cfg_dhmode[1:0]が共にHレベルになり，セレクタSEL0,SEL1のセレクタ回路S2,S4は共に「１」側を選択する。
【００６７】
さらに，サイクルT6では，フリップフロップFFcが，サイクルT5のフェッチイネーブル信号FETCHENのHレベルをクロックCLKの立ち上がりエッジでラッチし，１クロック遅延した遅延フェッチイネーブル信号sr_fetchen_1dをHレベルにする。その結果，サイクルT6だけ，ANDゲート６２，６３の出力はHレベルになり，セレクタ回路S1,S3が「０」側を選択して，入力データ信号i2,i3を演算処理回路２４の入力信号i_DI0,i_DI1として出力する。これにより，サイクルT6から演算処理回路２４は入力データ信号i2,i3について減算処理を開始する。
【００６８】
同時に，サイクルT6だけANDゲート６４，６５の出力もHレベルになるので，入力データ保持レジスタFF0,FF1はイネーブル状態になり，次のサイクルT7のクロックCLKの立ち上がりエッジに応答してサイクルT6での入力データ信号i2,i3をラッチする。
【００６９】
次のサイクルT7以降では，遅延フェッチイネーブル信号sr_fetchen_1dがLレベルなるため，ANDゲート６２−６５の出力がLレベルになり，セレクタ回路S1,S3は「０」側を選択し，入力データ保持レジスタFF0,FF1が保持する入力データ信号i2,i3が演算処理回路２４に入力される。しかも，サイクルT7以降は，入力データ保持レジスタFF0,FF1のイネーブル信号はLレベルになり，新たな入力データ信号i4-i5を保持することはない。
【００７０】
このように，データホールドモードに構築されたプロセッシングエレメントは，コンフィグレーションデータの更新時T6における入力データ信号DI0,DI1(i2,i3)を，直接，演算処理回路２４に入力して演算を開始させ，更新直後T7において入力データ保持レジスタFF0,FF1が入力データ信号DI0,DI1(i2,i3)をラッチし，T7以後保持した入力データ信号を演算処理回路２４に出力する。
【００７１】
一方，バリッド信号側では次のような動作になる。まず，サイクルT6では，サイクルT5のフェッチイネーブル信号FETCHENのHレベルの反転が出力バリッド保持レジスタFF2に取り込まれ，出力バリッド信号VOはサイクルT6だけLレベルになる。一方，サイクルT6のクロックCLKの立ち上がりエッジで取り込まれた内部ホールドモード信号sr_cfg_dhmode[1:0]のHレベルにより，入力バリッド信号VI0,VI1がバリッドかインバリッドかにかかわらず，内部バリッド信号i_vinがHレベルになる。これで，サイクルT6での入力データ信号DI0,DI1(i2,i3)は，実質的に有効な入力データ信号として取り扱われる。
【００７２】
サイクルT5でのフェッチイネーブル信号FETCHENのHレベルによりORゲート７１の出力信号keep_ff_dがHレベルになり，サイクルT5だけ出力データ保持レジスタFF3はディセーブル状態になるが，サイクルT6以降は内部バリッド信号i_vinのHレベルによりイネーブル状態になる。
【００７３】
サイクルT6からレイテンシ１後のサイクルT7で，演算処理回路２４は演算結果データを出力し，出力データ保持レジスタFF3は出力データ信号o1(i2-i3)を出力する。これに同期して，出力バリッド信号生成回路２５と出力バリッド保持レジスタFF2とが，出力バリッド信号VOをHレベルにする。これにより，プロセッシングエレメントに接続された後段の回路は，出力データ信号o1(i2-i3)を有効な信号として入力する。
【００７４】
図１７は，図１３のコンテキスト＃０，＃１について，本実施の形態のプロセッシングエレメントのホールドモードを利用した場合の動作を示すタイミングチャート図である。図１３では，コンテキスト＃０でプロセッシングエレメントPE0が生成した出力データ信号n0を，コンテキスト＃１に更新された時に，プロセッシングエレメントPE1がその出力データ信号n0を入力して保持する。そして，コンテキスト＃１では，少なくともプロセッシングエレメントPE2は非ホールドモードにコンフィグレーションされ，コンテキスト＃１でプロセッシングエレメントPE0が新たに生成した出力データ信号を入力する。
【００７５】
図１７において，各プロセッシングエレメントは，クロックサイクルT1のフェッチイネーブル信号FETCHENのHレベルによりサイクルT2でコンフィグレーションデータが取り込まれ，コンテキスト＃０の内部回路が構築される。つまり，図１３に示されるように，プロセッシングエレメントPE0は入力データ信号i0,i1を入力し乗算し乗算値である出力データ信号n0を出力する回路に，プロセッシングエレメントPE1は入力データ信号i2,i3を入力し加算し加算値である出力データ信号o1を出力する回路にそれぞれ構築（コンフィグレーション）される。いずれのプロセッシングエレメントPE0,PE1も，非ホールドモードにコンフィグレーションされている。
【００７６】
従って，図１７において，プロセッシングエレメントPE0は，サイクルT3でHレベルの入力バリッド信号VI0,VI1と共に入力された入力データ信号i0,i1を乗算し，レイテンシ１後のサイクルT4でその出力データ信号DO(n0)をHレベルの出力バリッド信号VOとともに出力する。この出力データ信号n0は，レジスタファイル内蔵型プロセッシングエレメントに書き込まれることはない。
【００７７】
プロセッシングエレメントPE1も同様に，サイクルT3でHレベルの入力バリッド信号VI0,VI1と共に入力された入力データ信号i2,i3を加算し，レイテンシ１サイクル後のサイクルT4でその出力データ信号D0(o1)をHレベルの出力バリッド信号VOとともに出力する。この場合，プロセッシングエレメントPE1は非ホールドモードであるので，入力データ保持レジスタFF0,FF1には入力データ信号は保持されない。入力データ信号DI0,DI1は，コンテキスト＃０に更新された後継続して演算処理回路２４に入力され続ける。
【００７８】
次に，サイクルT5のフェッチイネーブル信号FETCHENのHレベルによりサイクルT6でコンフィグレーションデータが取り込まれ，コンテキスト＃１の内部回路が構築される。つまり，図１３に示されるように，プロセッシングエレメントPE0は入力データ信号i4,i5を入力し減算し減算結果を出力データ信号として出力するよう構築され，プロセッシングエレメントPE2は入力データ信号i6とプロセッシングエレメントPE0の出力データ信号とを入力し加算し加算結果を出力データ信号o3として出力するよう構築される。これらのプロセッシングエレメントPE0,PE1は非ホールドモードに構築される。さらに，プロセッシングエレメントPE0の出力端子はプロセッシングエレメントPE1の入力端子に接続されるように構築されるとともに，プロセッシングエレメントPE1は入力データ信号を反転して出力データ信号o2を出力するように構築される。プロセッシングエレメントPE1はホールドモードに構築される。
【００７９】
サイクルT6で新たなコンフィグレーションデータが取り込まれて内部に設定されることで，コンテキスト＃０からコンテキスト＃１に更新される。このコンフィグレーションの更新時であるサイクルT6では，各プロセッシングエレメントの出力バリッド信号VOはLレベルになり，プロセッシングエレメントPE0は未だコンテキスト＃０で生成した出力データ信号n0を出力データ保持レジスタFF3内に保持している。
【００８０】
そこで，プロセッシングエレメントPE1は，コンフィグレーションの更新時であるサイクルT6において入力データ信号DI0として入力されるデータ信号n0を，演算処理回路２４に入力する。演算処理回路２４はサイクルT6から反転演算を開始する。さらに，次のサイクルT7のクロックCLKの立ち上がりエッジで，サイクルT6で入力されている入力データ信号n0を，入力データ保持レジスタFF0がラッチし演算処理回路２４に入力する。ラッチされた入力データ信号n0はその後継続して演算処理回路２４に入力される。そして，サイクルT6の入力データ信号n0に対する演算結果信号がレイテンシ１後のサイクルT7で出力データ信号o2として出力される。つまり，サイクルT6で入力バリッド信号VI0,VI1がHレベル（バリッド）でないにもかかわらず，サイクルT7で出力バリッド信号VOがHレベルになっている。これは，図１５，１６で説明したとおり，ホールドモード信号によって出力バリッド信号VOがHレベルにされたからである。その結果，プロセッシングエレメントPE1は，サイクルT7で有効な出力データ信号o2を出力することになる。
【００８１】
そして，プロセッシングエレメントPE1では，サイクルT7でプロセッシングエレメントPE0の出力データ信号i4-i5が入力データ信号DI0に入力されているが，入力データ保持レジスタFF0は入力データ信号n0を保持し続けるので，プロセッシングエレメントPE0の出力データ信号i4-i5はラッチされず内部に取り込まれない。
【００８２】
一方，プロセッシングエレメントPE2も，サイクルT6でプロセッシングエレメントPE0の出力データ信号n0を入力しているが，非ホールドモードであるので，それに対する演算結果がバリッド（Hレベル）の出力バリッド信号VOと共に出力されることはない。
【００８３】
［本実施の形態の変型例］
図１５のプロセッシングエレメントは，変型例として，セレクタSEL0,SEL1のセレクタ回路S1,S3を設けないで，コンフィグレーション更新時の入力データ信号を入力データ保持レジスタFF0,FF1が保持してそれをセレクタ回路S2,S4を経由して演算処理回路２４に入力しても良い。その場合は，演算処理回路２４による演算処理の開始が１クロックサイクルだけ遅くなる。
【００８４】
そして，演算処理の開始が１サイクル遅くなるので，Hレベルのホールドモード信号に基づいて生成されるHレベルの出力バリッド信号VOも１サイクル遅くする。そのためには，図１５において， ORゲート６０，６１の後段に1クロックサイクル遅延させるフリップフロップを挿入する構成にすればよい。
【００８５】
図１８は，本実施の形態の変型例における動作を示すタイミングチャート図である。この図は，図１６に対応する図である。図１８では，図１６と異なり，サイクルT6において入力データ信号DI0,DI1の信号i2,i3が，演算制御回路２４にその入力信号i_DI0,i_DI1として入力されていない。サイクルT6の入力データ信号DI0,DI1の信号i2,i3は，次のサイクルT7のクロックCLKの立ち上がりエッジで入力データ保持レジスタFF0,FF1に保持され，演算制御回路２４にその入力信号i_DI0,i_DI1として入力されている。
【００８６】
さらに，図１８では，図１６と異なり，サイクルT8で演算結果の出力データ信号o1(i2-i3)が，Hレベルの出力バリッド信号と共に出力されている。
【００８７】
以上説明したとおり，本実施の形態によればプロセッシングエレメントにホールドモードの構成を追加し，連続するコンテキスト間のデータの受け渡しを，後続のコンテキスト内のホールドモード構成にしたプロセッシングエレメントがコンフィグレーションの更新時に行う。したがって，コンテキスト間のデータの受け渡しをレジスタファイル内蔵型プロセッシングエレメントを介して行う必要はなく，ハードウエアの無駄な消費や無駄なレイテンシをなくすことができる。
【００８８】
以上の実施の形態をまとめると，次の付記のとおりである。
【００８９】
（付記１）
コンフィグレーションデータに基づいて任意の演算状態に構築されるリコンフィグ可能な集積回路装置において，
それぞれ演算回路を有し，前記コンフィグレーションデータに基づいて，任意の演算状態に構築可能な複数のプロセッシングエレメントと，
前記コンフィグレーションデータに基づいて，前記複数のプロセッシングエレメントを任意の状態で接続するプロセッシングエレメント間ネットワークとを有し，
前記プロセッシングエレメントは，入力バリッド信号と入力データ信号を入力し，出力バリッド信号と出力データ信号を出力し，更に，入力データ保持レジスタと，前記入力データ信号を演算する演算処理回路と，前記演算処理回路の演算結果データを保持する出力データ保持レジスタとを有し，ホールドモードを有効とするコンフィグレーションデータでコンフィグレーションが更新された場合は，前記入力バリッド信号がバリッド，インバリッドにかかわらず，前記入力データ保持レジスタが当該更新時の入力データ信号を保持し，前記演算処理回路は前記入力データ保持レジスタに保持された入力データ信号について演算処理を行うリコンフィグ可能な集積回路装置。
【００９０】
（付記２）
付記１において，
前記プロセッシングエレメントは，前記ホールドモードを有効とするコンフィグレーションデータでコンフィグレーションが更新された場合は，前記更新直後にホールドモード信号に応答して，前記入力データ保持レジスタが前記入力データ信号を保持し，前記入力バリッド信号がインバリッドであっても前記ホールドモード信号に応答して，前記演算結果データに対応する出力データ信号の出力に同期して前記出力バリッド信号を出力するリコンフィグ可能な集積回路装置。
【００９１】
（付記３）
付記２において，
前記プロセッシングエレメントは，前記ホールドモードを無効とするコンフィグレーションデータでコンフィグレーションが更新された場合は，バリッドな入力バリッド信号に応答して，前記演算結果データに対応する出力データ信号の出力に同期して前記出力バリッド信号を出力するリコンフィグ可能な集積回路装置。
【００９２】
（付記４）
付記１または２において，
前記プロセッシングエレメントは，前記入力データ信号を前記演算処理回路に入力するセレクタを有し，
前記ホールドモードを有効とするコンフィグレーションデータでコンフィグレーションが更新された場合は，前記セレクタは，前記更新時に入力される入力データ信号を前記入力データ保持レジスタを介さずに前記演算処理回路に入力した後，前記入力データ保持レジスタに保持された入力データ信号を前記演算処理回路に入力し，
前記ホールドモードを無効とするコンフィグレーションデータでコンフィグレーションが更新された場合は，前記セレクタは，前記入力される前記入力データ信号を前記入力データ保持レジスタを介さずに前記演算処理回路に入力し続けるリコンフィグ可能な集積回路装置。
【００９３】
（付記５）
付記２または４において
前記プロセッシングエレメントは，フェッチイネーブル信号に応答して前記コンフィグレーションデータを入力してコンフィグレーションを更新し，ホールドモードか否かにかかわらず，前記フェッチイネーブル信号に応答して，前記更新時に前記出力バリッド信号をインバリッドにするとともに前記出力データ保持レジスタによる出力データ信号の取り込みを不能状態にするリコンフィグ可能な集積回路装置。
【００９４】
（付記６）
付記２または４において，
第１のコンフィグレーションデータでコンフィグレーションされる回路を有する第１のコンテキストと，前記第１のコンテキストに後続し第２のコンフィグレーションデータでコンフィグレーションされる回路を有する第２のコンテキストとの間において，前記第１のコンテキストに含まれる第１のプロセッシングエレメントの出力データ保持レジスタが保持する出力データ信号を，前記第２のコンテキストへの更新時に，前記第２のコンテキストに含まれ前記ホールドモードにコンフィグレーションされた第２のプロセッシングエレメントが入力し，前記入力データ保持レジスタが保持する，リコンフィグ可能な集積回路装置。
【００９５】
（付記７）
付記４において，
第１のコンフィグレーションデータでコンフィグレーションされる回路を有する第１のコンテキストと，前記第１のコンテキストに後続し第２のコンフィグレーションデータでコンフィグレーションされる回路を有する第２のコンテキストとの間において，前記第１のコンテキストに含まれる第１のプロセッシングエレメントの出力データ保持レジスタが保持する第１の出力データ信号を，前記第２のコンテキストへの更新時に，前記第２のコンテキストに含まれ前記ホールドモードにコンフィグレーションされた第２のプロセッシングエレメントが入力して前記演算処理回路が演算処理を開始し，前記更新時の前記第１の出力データ信号を入力データ信号として前記入力データ保持レジスタに保持し，前記入力データ保持レジスタに保持された入力データ信号を前記演算処理回路に入力する，リコンフィグ可能な集積回路装置。
【００９６】
（付記８）
付記６または７において，
前記第２のコンテキストでは，前記第１のプロセッシングエレメントの出力端子が，前記第２のプロセッシングエレメントの入力端子に接続されるとともに，前記ホールドモードを無効とするコンフィグレーションデータでコンフィグレーションされた第３のプロセッシングエレメントの入力端子にも接続される，リコンフィグ可能な集積回路装置。
【００９７】
（付記９）
コンフィグレーションデータに基づいて任意の演算状態に構築されるリコンフィグ可能な集積回路装置において，
それぞれ演算回路を有し，前記コンフィグレーションデータに基づいて，任意の演算状態に構築可能な複数のプロセッシングエレメントと，
前記コンフィグレーションデータに基づいて，前記複数のプロセッシングエレメントを任意の状態で接続するプロセッシングエレメント間ネットワークとを有し，
前記プロセッシングエレメントは，入力バリッド信号と入力データ信号を入力し，出力バリッド信号と出力データ信号を出力し，更に，前記入力データ信号を演算する演算処理回路と，前記演算処理回路の演算結果データを保持する出力データ保持レジスタと，前記出力バリッド信号を生成する出力バリッド信号生成回路とを有し，
前記プロセッシングエレメントにおいて，ホールドモードを有効とするコンフィグレーションデータでコンフィグレーションが更新された場合は，当該更新時の入力データ信号を前記演算処理回路が演算し，前記出力バリッド信号生成回路が，前記入力バリッド信号のバリッド，インバリッドにかかわらずホールドモード信号に応答して，前記更新時の入力データ信号に対応する前記出力データ信号の出力に同期して前記出力バリッド信号を出力し，前記ホールドモードを無効とするコンフィグレーションデータでコンフィグレーションが更新された場合は，前記出力バリッド信号生成回路が，バリッドな入力バリッド信号に応答して，前記バリッドな入力バリッド信号時の入力データ信号に対応する出力データ信号の出力に同期して前記出力バリッド信号を出力するリコンフィグ可能な集積回路装置。
【００９８】
（付記１０）
付記９において，
前記プロセッシングエレメントは，更に入力データ保持レジスタを有し，
前記プロセッシングエレメントにおいて，ホールドモードを有効とするコンフィグレーションデータでコンフィグレーションが更新された場合は，当該更新時の入力データ信号を前記入力データ保持レジスタが保持して前記演算処理回路に出力し，前記ホールドモードを無効とするコンフィグレーションデータでコンフィグレーションが更新された場合は，前記更新後に入力される入力データ信号を前記入力データ保持レジスタを介することなく前記演算処理回路が入力して演算処理するリコンフィグ可能な集積回路装置。
【００９９】
（付記１１）
付記９または１０において，
第１のコンフィグレーションデータでコンフィグレーションされる回路を有する第１のコンテキストと，前記第１のコンテキストに後続し第２のコンフィグレーションデータでコンフィグレーションされる回路を有する第２のコンテキストとの間において，前記第１のコンテキストに含まれる第１のプロセッシングエレメントの出力データ保持レジスタが保持する出力データ信号を，前記第２のコンテキストへの更新時に，前記第２のコンテキストに含まれ前記ホールドモードにコンフィグレーションされた第２のプロセッシングエレメントが入力し前記演算処理回路が演算処理をする，リコンフィグ可能な集積回路装置。
【０１００】
（付記１２）
付記１０において，
第１のコンフィグレーションデータでコンフィグレーションされる回路を有する第１のコンテキストと，前記第１のコンテキストに後続し第２のコンフィグレーションデータでコンフィグレーションされる回路を有する第２のコンテキストとの間において，前記第１のコンテキストに含まれる第１のプロセッシングエレメントの出力データ保持レジスタが保持する第１の出力データ信号を，前記第２のコンテキストへの更新時に，前記第２のコンテキストに含まれ前記ホールドモードにリコンフィグレーションされた第２のプロセッシングエレメントが入力して前記演算処理回路が演算処理を開始し，前記更新時の前記第１の出力データ信号を入力データ信号として前記入力データ保持レジスタに保持し，前記入力データ保持レジスタに保持された入力データ信号を前記演算処理回路に入力する，リコンフィグ可能な集積回路装置。
【符号の説明】
【０１０１】
PE：プロセッシングエレメント        NET：プロセッシングエレメント間ネットワーク
20：コンフィグレーション制御回路    22：バリッド信号制御回路
27：入力ホールド制御回路            24：演算処理回路
FF0,FF1：入力データ保持レジスタ     FF2：出力バリッド保持レジスタ
FF3：出力データ保持レジスタ         DI0,DI1：入力データ信号
VI0,VI1：入力バリッド信号           DO：出力データ信号
VO：出力バリッド信号
【図１】
0005821332.tif 000002
【図２】
0005821332.tif 000003
【図３】
0005821332.tif 000004
【図４】
0005821332.tif 000005
【図５】
0005821332.tif 000006
【図６】
0005821332.tif 000007
【図７】
0005821332.tif 000008
【図８】
0005821332.tif 000009
【図９】
0005821332.tif 000010
【図１０】
0005821332.tif 000011
【図１１】
0005821332.tif 000012
【図１２】
0005821332.tif 000013
【図１３】
0005821332.tif 000014
【図１４】
0005821332.tif 000015
【図１５】
0005821332.tif 000016
【図１６】
0005821332.tif 000017
【図１７】
0005821332.tif 000018
【図１８】
0005821332.tif 000019