(57)【特許請求の範囲】
【請求項１】
機能の変更が可能なリコンフィギュラブル回路にマッピングされるデータフローグラフを再構成するデータフローグラフ再構成装置であって、   
データフローグラフから連続するスルーノード群を探索するスルーノード群探索手段と、   
探索されたスルーノード群の先頭ノードへの出力を行うノードの出力先として、前記リコンフィギュラブル回路に接続されるメモリを追加する出力先変更手段と、   
前記スルーノード群の一部のノードを前記データフローグラフから削除するスルーノード削除手段と、   
削除されたスルーノードからの入力を受けていた演算ノードの入力元を前記メモリへ変更する入力元変更手段を備えることを特徴とする、データフローグラフ再構成装置。
【請求項２】
前記スルーノード削除手段は、   
前記スルーノード群における先頭部のノードは削除せず、前記先頭部以外のノードのみを削除することを特徴とする、請求項１記載のデータフローグラフ再構成装置。   
【請求項３】
前記スルーノード削除手段は、   
前記リコンフィギュラブル回路と前記メモリ間のアクセス速度に基づいて、削除しない先頭部のノードの数を決定することを特徴とする、請求項２記載のデータフローグラフ再構成装置。
【請求項４】
ソースプログラムをコンパイルしてデータフローグラフを生成するコンパイル手段と、   
前記コンパイル手段が生成するデータフローグラフを再構成する、請求項１ないし３の何れかに記載のデータフローグラフ再構成装置と、   
前記データフローグラフ再構成装置で再構成されたデータフローグラフから、前記リコンフィギュラブル回路に所期の回路を構成するための設定データを生成する設定データ生成手段を備えることを特徴とする、リコンフィギュラブル回路の設定データ生成装置。   
【請求項５】
請求項４記載の設定データ生成装置と、   
機能の変更が可能なリコンフィギュラブル回路と、前記リコンフィギュラブル回路の出力を格納するメモリを備えた集積回路を備えることを特徴とする処理装置。   
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、機能の変更が可能なリコンフィギュラブル回路の動作設定に必要なデータフローグラフを生成する技術に関する。
【背景技術】
【０００２】
近年、アプリケーションに応じてハードウェアの動作を変更可能なリコンフィギュラブルプロセッサの開発が進められている。リコンフィギュラブルプロセッサを実現するためのアーキテクチャとしては、ＤＳＰ(Digital Signal Processor)や、ＦＰＧＡ(Field Programmable Gate Array)を用いる方法が存在する。
【０００３】
ＦＰＧＡ（Field Programmable Gate Array）はＬＳＩ製造後に回路データを書き込んで比較的自由に回路構成を設計することが可能であり、専用ハードウエアの設計に利用されている。ＦＰＧＡは、論理回路の真理値表を格納するためのルックアップテーブル（ＬＵＴ）と出力用のフリップフロップからなる基本セルと、その基本セル間を結ぶプログラマブルな配線リソースとを含む。ＦＰＧＡでは、ＬＵＴに格納するデータと配線データを書き込むことで目的とする論理演算を実現できる。しかし、ＦＰＧＡでＬＳＩを設計した場合、ＡＳＩＣ（Application Specific IC）による設計と比べると、実装面積が非常に大きくなり、コスト高になる。そこで、ＦＰＧＡを動的に再構成することで、回路構成の再利用を図る方法が提案されている。
【０００４】
例えば衛星放送では、季節などにより、放送モードを切り替えて画質の調整などを行うこともある。受信機では、放送モードごとに複数の回路を予めハードウェア上に作り込んでおき、放送モードに合わせて選択器で回路を切り替えて受信している。したがって、受信機の他の放送モード用の回路はその間、遊んでいることになる。モード切り替えのように、複数の専用回路を切り替えて使用し、その切り替え間隔が比較的長い場合、複数の専用回路を作り込む代わりに、切り替え時にＬＳＩを瞬時に再構成することにすれば、回路構造をシンプルにして汎用性を高め、同時に実装コストを抑えることができる。このようなニーズに応えるべく、動的に再構成可能なＬＳＩに製造業界の関心が集まっている。特に、携帯電話やＰＤＡ（Personal Data Assistance）などのモバイル端末に搭載されるＬＳＩは小型化が必須であり、ＬＳＩを動的に再構成し、用途に合わせて適宜機能を切り替えることができれば、ＬＳＩの実装面積を抑えることができる。
【０００５】
ＦＰＧＡは回路構成の設計自由度が高く、汎用的である反面、全ての基本セル間の接続を可能とするため、多数のスイッチとスイッチのＯＮ／ＯＦＦを制御するための制御回路を含む必要があり、必然的に制御回路の実装面積が大きくなる。また、基本セル間の接続に複雑な配線パターンをとるため、配線が長くなる傾向があり、さらに１本の配線に多くのスイッチが接続される構造のため、遅延が大きくなる。そのため、ＦＰＧＡによるＬＳＩは、試作や実験のために利用されるにとどまることが多く、実装効率、性能、コストなどを考えると、量産には適していない。さらに、ＦＰＧＡでは、多数のＬＵＴ方式の基本セルに構成情報を送る必要があるため、回路のコンフィグレーションにはかなりの時間がかかる。そのため、瞬時に回路構成の切り替えが必要な用途にはＦＰＧＡは適していない。
【０００６】
それらの課題を解決するため、近年、ＡＬＵ(Arithmetic Logic Unit)と呼ばれる基本演算機能を複数持つ多機能素子を多段に並べたＡＬＵアレイの検討が行われるようになった。ＡＬＵアレイでは、処理が上段から下段の一方向に流れるので、水平方向のＡＬＵを結ぶ配線は基本的には不要である。そのため、ＦＰＧＡと比較して回路規模を小さくすることが可能となる。
【０００７】
ＡＬＵアレイでは、コマンドデータによりＡＬＵ回路の演算機能構成と前後段のＡＬＵを接続する接続部の配線が制御され、所期の演算処理を実行することができる。コマンドデータは、一般にＣ言語等の高級プログラム言語で記述されたソースプログラムからデータフローグラフ（ＤＦＧ：Data Flow Graph）を作成し、その情報をもとに作成される。
【０００８】
ＡＬＵは、加算演算やシフト演算などの演算機能をそれぞれ実行する複数の基本演算素子を備えて構成される。ＡＬＵが基本演算素子を多く持つことは、それだけＡＬＵアレイの演算能力を高め、演算処理の汎用性を高めることができる。一方で、ＡＬＵの基本演算素子の数を増やすことは、それだけＡＬＵの回路規模が大きくなるという欠点もある。
【０００９】
例えば、乗算演算機能を実行する基本演算素子をＡＬＵに作りこんだ場合、その基本演算素子の回路規模が大きくなるため、ＡＬＵアレイ全体の回路規模が増大する。一方、乗算演算素子を有しないＡＬＵアレイで乗算演算を実行する場合、加算演算やシフト演算などを組み合わせたＤＦＧを作成して、ＡＬＵアレイにマッピングすることになる。この場合、ＤＦＧが非常に大きくなり、乗算処理に時間がかかり、処理の高速性が損なわれるとともに、ＡＬＵアレイの消費電力が増加する。
【００１０】
こうした状況に鑑み、本出願人は、効率よくデータフローグラフを作成し、また効率よくデータフローグラフを実行するリコンフィギュラブル回路および処理装置に関する技術を開発した（特許文献２参照）。
【００１１】
ここで、特許文献２のデータフローグラフ処理方法について簡単に説明しておく。図１５は、筆算アルゴリズムを用いて被乗数２４ビット×乗数４ビットの計算をするデータフローグラフである。このデータフローグラフでは、所定の規則に従って配列されたノード群７０が４つ存在している。
【００１２】
図１６は、図１５において４段にて構成されていたノード群７０のそれぞれを１つのノードｍｕｌ＿ｔに置換したあとの状態を示したものである。
【００１３】
ここで、演算が割り当てられていないノード（ｎｏｐノード）が多数存在することに気づく。これらのｎｏｐノードのうち、ｍｕｌ＿ｔノードへ接続されていないｎｏｐノードについては削除が可能である。このようなｎｏｐノードを削除した後のデータフローグラフを示したのが図１７である。
【００１４】
上記のような方法によれば、被乗数２４ビット×乗数４ビットの乗算の実行には、従来（図１５）は２０段のＡＬＵ列が必要であったのが、８段のＡＬＵ列で可能となる。また、ノード数も従来は６５個必要だったのが、１５個で済む。これにより、ＤＦＧの段数を減らすことができ、リコンフィギュラブル回路における回路再構成回数を少なくすると共に、回路再構成に伴う消費電力を少なくしている。
【特許文献１】特開平１０−２５６３８３号公報
【特許文献２】特開２００５−２７５６９８号公報
【発明の開示】
【発明が解決しようとする課題】
【００１５】
しかしながら、特許文献２のデータフローグラフ処理方法により生成されるデータフローグラフは、まだ十分に小さいとはいえない。
【００１６】
例えば、図１７のデータフローグラフにおいては、演算処理を行わず、データの受け渡しのみを行うｎｏｐノードがまだ８つ残っている。これらのノードを削減することができれば、データフローグラフの更なる小型化が可能である。
【００１７】
上記説明した例では、乗数のビット数が４ビットであったが、乗数のビット数が例えば１６とか３２ビットのようにもっと大きい場合には、それだけ多くのｎｏｐノードが残ってしまうことになる。これらのｎｏｐノードを削減することができれば、データフローグラフがマッピングされるリコンフィギュラブル回路をより効率的に利用することができるし、また、リコンフィギュラブル回路の消費電力を大きく減らすことができる。
【００１８】
そこで、この発明は上記の事情に鑑み、リコンフィギュラブル回路の動作設定に必要なデータフローグラフを従来の技術よりも更に小型化し、これにより、リコンフィギュラブル回路の利用効率の向上、及びリコンフィギュラブル回路の低消費電力化を図ることを目的とする。
【課題を解決するための手段】
【００１９】
本発明のある態様は、機能の変更が可能なリコンフィギュラブル回路にマッピングされるデータフローグラフを生成するデータフローグラフ再構成装置であって、データフローグラフから連続するスルーノード群を探索するスルーノード群探索手段と、探索されたスルーノード群の先頭ノードへの出力を行うノードの出力先として、前記リコンフィギュラブル回路に接続されるメモリを追加する出力先変更手段と、前記スルーノード群の一部のノードを前記データフローグラフから削除するスルーノード削除手段と、削除されたスルーノードからの入力を受けていた演算ノードの入力元を前記メモリへ変更する入力元変更手段を備えることを特徴とする。
【００２０】
このようなデータフローグラフ再構成装置によれば、例えば、上段ノードから下段ノードへのデータ伝播のみしか行わない連続するスルーノード群を削除し、その伝播されるデータが（リコンフィギュラブル回路の外部の）メモリを介して上段ノードから下段ノードへ伝播されるよう、データフローグラフを変換する。したがって、リコンフィギュラブル回路にマッピングされるデータフローグラフの規模を小さくすることができ、ひいてはリコンフィギュラブル回路の消費電力を低減することができる。
【００２１】
好ましくは、前記スルーノード削除手段は、前記スルーノード群における先頭部のノードは削除せず、前記先頭部以外のノードのみを削除することを特徴とする。
【００２２】
好ましくは、前記スルーノード削除手段は、前記リコンフィギュラブル回路と前記メモリ間のアクセス速度に基づいて、削除しない先頭部のノードの数を決定することを特徴とする。これは、リコンコンフィギュラブル回路内のデータ伝播速度と、メモリを介したデータ伝播速度との違いを考慮したものである。
【００２３】
本発明のリコンフィギュラブル回路の設定データ生成装置は、ソースプログラムをコンパイルしてデータフローグラフを生成するコンパイル手段と、前記コンパイル手段が生成するデータフローグラフを再構成することを特徴とした上記のデータフローグラフ再構成装置と、前記データフローグラフ再構成装置で再構成されたデータフローグラフから、前記リコンフィギュラブル回路に所期の回路を構成するための設定データを生成する設定データ生成手段を備えることを特徴とする。
【００２４】
本発明の処理装置は、上記の設定データ生成装置と、機能の変更が可能なリコンフィギュラブル回路と、前記リコンフィギュラブル回路の出力を格納するメモリとを備えた集積回路を備えることを特徴とする。
【００２５】
本発明のリコンフィギュラブル回路は、上記の設定データ生成装置から供給された設定データに基づいて構成されたことを特徴とする。
【発明の効果】
【００２６】
この発明によれば、リコンフィギュラブル回路の動作設定に必要なデータフローグラフを従来の技術よりも更に小型化し、これにより、リコンフィギュラブル回路の利用効率の向上、及びリコンフィギュラブル回路の低消費電力化を実現することができる。
【発明を実施するための最良の形態】
【００２７】
＜処理装置の構成＞
図１は、実施の形態に係る処理装置１０の構成図である。処理装置１０は、回路構成を再構成可能とする機能を有する集積回路装置２６を備える。集積回路装置２６は１チップとして構成され、リコンフィギュラブル回路１２、設定部１４、制御部１８、内部状態保持回路２０、出力回路２２、第１フィードバック経路２４、遅延保持回路２７および第２フィードバック経路２９を備える。リコンフィギュラブル回路１２は設定を変更することにより、機能の変更を可能とする。リコンフィギュラブル回路１２は組合せ回路または順序回路等の論理回路として構成される。第１フィードバック経路２４および第２フィードバック経路２９は、フィードバックパスとして機能し、リコンフィギュラブル回路１２の出力を、リコンフィギュラブル回路１２の入力に接続する。
【００２８】
リコンフィギュラブル回路１２は、それぞれが複数の演算機能を選択的に実行可能な論理回路の多段配列と、前段の論理回路の出力と後段の論理回路の入力の接続関係を設定可能な接続部とを備える。構造的には、複数の論理回路列の間に、論理回路列間の接続用結線を設定する接続部が設けられる。リコンフィギュラブル回路１２は、複数段に配列された各論理回路の機能、および論理回路間の接続を任意に設定することで、機能の変更を可能とする。本実施の形態における論理回路は、演算機能のそれぞれを実行する基本演算素子の複数個を所定の規則の下で接続する組合せ用結線を有して構成される。
【００２９】
設定部１４は、リコンフィギュラブル回路１２に所期の回路を構成するための設定データ４０を供給する。設定部１４は、プログラムカウンタのカウント値に基づいて記憶したデータを出力するコマンドメモリとして構成されてもよい。この場合、制御部１８がプログラムカウンタの出力を制御する。この場合、設定データ４０はコマンドメモリから出力されるコマンドデータであってよい。
【００３０】
内部状態保持回路２０は、例えばデータフリップフロップ（ＤＦＦ）などの順序回路として構成され、リコンフィギュラブル回路１２の出力を受け付ける。内部状態保持回路２０は第１フィードバック経路２４に接続されており、リコンフィギュラブル回路１２の出力を直接リコンフィギュラブル回路１２の入力にフィードバックさせる。また内部状態保持回路２０は、リコンフィギュラブル回路１２の出力を遅延保持回路２７に供給する。内部状態保持回路２０は選択器を有し、選択器は、制御部からの選択指示をもとに、第１フィードバック経路２４に送り出すデータ、および遅延保持回路２７に供給するデータを選択する。なお、選択器は、同一のデータを第１フィードバック経路２４および遅延保持回路２７の双方に送り出してもよい。
【００３１】
遅延保持回路２７はメモリであって、リコンフィギュラブル回路１２から出力される出力データを格納するための複数のＲＡＭにより構成される。遅延保持回路２７は、リコンフィギュラブル回路１２の出力データを任意の時間遅延させる機能をもつ。この例では、遅延保持回路２７が、内部状態保持回路２０から出力されるデータを格納しているが、リコンフィギュラブル回路１２から直接出力されるデータを格納してもよい。遅延保持回路２７は、制御部１８からのＷ／Ｒイネーブル信号およびアドレス信号に基づいて、データの書込／読出を行う。遅延保持回路２７は第２フィードバック経路２９に接続されており、制御部１８からの読出指示に基づいて、所期のタイミングでデータをリコンフィギュラブル回路１２の入力にフィードバックさせる。なお、設定部１４がコマンドメモリとして構成されている場合、コマンドメモリから供給されるコマンドデータで、遅延保持回路２７のデータの書込／読出を行ってもよい。
【００３２】
出力回路２２は、例えばデータフリップフロップ（ＤＦＦ）などの順序回路として構成され、リコンフィギュラブル回路１２から出力されるデータを外部に出力する。この例では、出力回路２２が、遅延保持回路２７から出力されるデータを受け付けているが、リコンフィギュラブル回路１２から直接出力されるデータを受け付けてもよく、また内部状態保持回路２０から出力されるデータを受け付けてもよい。
【００３３】
処理装置１０においては、リコンフィギュラブル回路１２の出力をリコンフィギュラブル回路１２の入力にフィードバックする経路が、第１フィードバック経路２４および第２フィードバック経路２９の２系統存在する。第１フィードバック経路２４は、遅延保持回路２７を介さないために、リコンフィギュラブル回路１２の出力データを高速にフィードバック処理することが可能である。一方、第２フィードバック経路２９は、制御部１８からの指示により所期のタイミングでデータ信号をリコンフィギュラブル回路１２に供給することができる。このように、第１フィードバック経路２４または第２フィードバック経路２９は、リコンフィギュラブル回路１２上に再構成する回路に応じて適宜使い分けられる。
【００３４】
リコンフィギュラブル回路１２は、機能の変更が可能な論理回路を有して構成される。複数の論理回路は、マトリックス状に配置された構造をとってもよい。各論理回路の機能と、論理回路間の接続関係は、設定部１４により供給される設定データ４０に基づいて設定される。また、論理回路内において、基本演算素子同士を接続する組合せ用結線も、設定データ４０に基づいて設定される。設定データ４０は、以下の手順で生成される。
【００３５】
集積回路装置２６により実現されるべきプログラム３６が、記憶部３４に保持されている。プログラム３６は、回路における処理の動作を記述した動作記述を示し、信号処理回路または信号処理アルゴリズムなどをＣ言語などの高級言語で記述したものである。コンパイル部３０は、記憶部３４に格納されたプログラム３６をコンパイルし、データフローグラフ（ＤＦＧ）３８に変換して記憶部３４に格納する。データフローグラフ３８は、回路における演算間の実行順序の依存関係を表現し、入力変数および定数の演算の流れをグラフ構造で示したものである。一般に、データフローグラフ３８は、上から下に向かって演算が進むように作成される。
【００３６】
本実施の形態では、論理回路が複数の基本演算素子を有して、それぞれの演算機能を実行する。一般的に用いる演算としては、加算演算や減算演算など様々なものをあげることができるが、そのうちの一つに乗算演算がある。リコンフィギュラブル回路１２の汎用性という観点からは、各論理回路が乗算を実行する基本演算素子を備えることが好ましいが、実際には乗算用の演算素子は、他の加算演算などの演算素子と比較すると、回路規模が非常に大きい。そのため、論理回路は、乗算用の基本演算素子を持たずに構成され、データフローグラフ３８中の乗算演算は、筆算アルゴリズムやBoothアルゴリズムなどを用いて加算やビットシフトなどで演算できる形態に展開する必要がある。乗算演算の展開は、コンパイル部３０により実行される。
【００３７】
データフローグラフ処理部３１は、コンパイル部３０で生成されたデータフローグラフを、リコンフィギュラブル回路１２にマッピング可能なデータフローグラフに変換する。また、リコンフィギュラブル回路１２に最も適したデータフローグラフをマッピングできるよう、データフローグラフの最適化を行う。
【００３８】
なお、データフローの一群から置換されたノードは、リコンフィギュラブル回路１２の論理回路で処理可能なノードである必要がある。これに対応して、論理回路は、置換されたノードを処理するために、自身のもつ複数の基本演算素子を所定の順序で組み合わせるための組合せ用結線を有して構成される。これにより、論理回路は基本演算素子の数を増やすことなく、組合せ用結線をもつことで、複数の基本演算素子により実行される新たな演算機能をもつことができる。
【００３９】
設定データ生成部３２は、データフローグラフ３８から設定データ４０を生成する。設定データ４０は、データフローグラフ３８をリコンフィギュラブル回路１２にマッピングするためのデータであり、リコンフィギュラブル回路１２における論理回路の機能や論理回路間の接続関係を定める。設定データ生成部３２が、１つの生成すべき回路を分割してできる複数の回路の設定データ４０を生成してもよい。
【００４０】
図２は、リコンフィギュラブル回路１２の一般的構成を示す。
【００４１】
リコンフィギュラブル回路１２は、それぞれが複数の演算機能を選択的に実行可能な論理回路の多段配列と、前段の論理回路の出力と後段の論理回路の入力の接続関係を任意に設定可能な接続部５２とを備える。リコンフィギュラブル回路１２では、論理回路の多段配列構造により、上段から下段に向かって演算が進められる。なお、本明細書および特許請求の範囲において「多段」とは、複数の段を意味する。
【００４２】
リコンフィギュラブル回路１２は、論理回路としてＡＬＵ(Arithmetic Logic Unit)を有している。ＡＬＵは、複数種類の多ビット演算を選択的に実行可能な算術論理回路であって、論理和、論理積、ビットシフト、加算、減算などの複数種類の多ビット演算を設定により選択的に実行できる。各ＡＬＵは、複数の演算機能を設定するためのセレクタを有して構成されている。実施の形態において、ＡＬＵは、乗算を実行する機能は有していない。乗算用の演算素子の回路規模が大きいためであり、したがって、乗算演算は、加算やビットシフト、ビット積演算などを組み合わせることで処理されることになる。図示の例では、ＡＬＵが、２つの入力端子と１つの出力端子を有して構成される。
【００４３】
リコンフィギュラブル回路１２は、縦方向にＸ個、横方向にＹ個のＡＬＵが配置されたＸ段Ｙ列のＡＬＵアレイとして構成される。ここでは、縦方向に３個、横方向に６個のＡＬＵが配置された３段６列のＡＬＵアレイを示している。リコンフィギュラブル回路１２は、接続部５２およびＡＬＵ列５３を備える。ＡＬＵ列５３は複数段に設けられ、接続部５２は前後段のＡＬＵ列５３の間に設けられて、前段のＡＬＵの出力と後段のＡＬＵの入力の接続関係を設定する。
【００４４】
図２に示す例では、第１段のＡＬＵ列５３ａと第２段のＡＬＵ列５３ｂの間に、第２段を構成する接続部５２ｂが設けられ、第２段のＡＬＵ列５３ｂと第３段のＡＬＵ列５３ｃの間に、第３段を構成する接続部５２ｃが設けられる。なお、第１段を構成する接続部５２ａは、第１段のＡＬＵ列５３ａの上側に設けられる。
【００４５】
第１段のＡＬＵ１１、ＡＬＵ１２、・・・、ＡＬＵ１６には、入力変数や定数が入力され、設定された所定の演算がなされる。演算結果の出力は、第２段の接続部５２ｂに設定された接続にしたがって、第２段のＡＬＵ２１、ＡＬＵ２２、・・・、ＡＬＵ２６に入力される。第２段の接続部５２ｂにおいては、第１段のＡＬＵ列５３ａの出力と第２段のＡＬＵ列５３ｂの入力の間で任意の接続関係、あるいは予め定められた接続関係の組合せの中から選択された接続関係を実現できるように接続用結線が構成されており、設定により所期の結線が有効となる。第２段のＡＬＵ２１、ＡＬＵ２２、・・・、ＡＬＵ２６には、ＡＬＵ列５３ａの出力が入力され、設定された所定の演算がなされる。演算結果の出力は、第３段の接続部５２ｃの接続用結線において設定された接続にしたがって、第３段のＡＬＵ３１、ＡＬＵ３２、・・・、ＡＬＵ３６に入力される。
【００４６】
最終段となる第３段のＡＬＵ列５３ｃからの出力データは、内部状態保持回路２０に出力される。内部状態保持回路２０および／または遅延保持回路２７は、第１フィードバック経路２４および／または第２フィードバック経路２９を介して、出力データを接続部５２ａに入力する。接続部５２ａは、接続用結線を設定し、第１段のＡＬＵ１１、ＡＬＵ１２、・・・、ＡＬＵ１６にデータを供給する。
【００４７】
図３は、データフローグラフ処理部３１の構成を示す。このデータフローグラフ処理部３１は、コンパイル部３０で生成されたデータフローグラフを、リコンフィギュラブル回路１２にマッピング可能なデータフローグラフに変換する。また、リコンフィギュラブル回路１２に最も適したデータフローグラフをマッピングできるよう、データフローグラフの最適化を行う。
【００４８】
データフローグラフ処理部３１は、仮ＤＦＧ生成部６０、ＤＦＧ再構成部６２を備える。実施の形態におけるデータフローグラフ処理機能は、処理装置１０において、ＣＰＵ、メモリ、メモリにロードされたＤＦＧ処理用プログラムなどによって実現され、ここではそれらの連携によって実現される機能ブロックを描いている。ＤＦＧ処理用プログラムは、処理装置１０に内蔵されていてもよく、また記録媒体に格納された形態で外部から供給されるものであってもよい。したがってこれらの機能ブロックがハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現できることは、当業者に理解されるところである。
【００４９】
仮ＤＦＧ生成部６０は、コンパイル部３０により生成されたデータフローグラフ（或いは中間ファイル）を解析し、リコンフィギュラブル回路１２にマッピング可能なデータフローグラフを生成する。例えば、中間ファイルによって記述されている演算が非常に長くて、このままではリコンフィギュラブル回路１２にマッピングできないような場合は、データフローグラフを適当な大きさに分割する。例えば、あるノードから２ノード以上離れている（下段の）ノードへ出力されているようなノードがある場合（いわゆる、スキップがある場合）、スルーノードを挿入する等の処理を行う。
【００５０】
ＤＦＧ再構成部６２は、まず、仮ＤＦＧ生成部６０により生成されたデータフローグラフから、連続するスルーノード群を探索する。そして、探索された連続するスルーノード群を削除することで、データフローグラフの小型化を行う。しかし、ただ単にスルーノード群を削除されただけのデータフローグラフをリコンフィギュラブル回路１２にマッピングするだけでは演算を行うことができない。
【００５１】
そこで、ＤＦＧ再構成部６２は、連続するスルーノード群を削除すると共に、連続するスルーノード群により伝播されるデータをメモリに一時出力させるよう、データフローグラフを再構成する。即ち、データを伝播させるためだけにリコンフィギュラブル回路１２のＡＬＵ回路のスルーノードを割り当てる代わりに、そのデータをメモリ（内部状態保持回路２０）に一時退避させる。これにより、リコンフィギュラブル回路１２の利用効率を上げる。
【００５２】
具体的には、ＤＦＧ再構成部６２は、上記で述べたようなスルーノード群を削除する手段に加え、探索されたスルーノード群の先頭ノードへの出力を行うノードの出力先を前記リコンフィギュラブル回路に接続されるメモリへ変更する手段、削除されたスルーノードからの入力を受けていた演算ノードの入力元を前記メモリへ変更する手段を更に備える。これにより、ＤＦＧ再構成部６２はデータフローグラフの最適化を行うことができる。
【００５３】
図４は、データフローグラフ３８の構造を説明するための図である。データフローグラフ３８においては、入力される変数や定数の演算の流れが段階的にグラフ構造で表現されている。図中、演算子は丸印で示されている。“＞＞”は右へのビットシフトを示し、“＜＜”は左へのビットシフトを示し、“＋”は加算を示し、“-”は減算を示す。設定データ生成部３２は、このデータフローグラフ３８をリコンフィギュラブル回路１２にマッピングするための設定データ４０を生成する。データフローグラフ３８による演算の流れを回路上で実現するべく、設定データ４０は、演算機能を割り当てる論理回路を特定し、また論理回路間の接続関係を定め、さらに入力変数や入力定数などを定義したデータとなる。したがって、設定データ４０は、各論理回路の機能を選択するセレクタに供給する選択情報、接続部５２の結線を設定する接続情報、必要な変数データや定数データなどを含んで構成される。
【００５４】
なお、本実施の形態においては、複数の演算機能を選択的に実行可能な論理回路が、乗算演算を実行するための基本演算素子を有していないため、乗算演算は、コンパイル部３０により、論理回路が有する基本演算素子で処理できる加算、ビットシフトなどの演算に展開されて、設定データ４０が生成されることになる。
【００５５】
設定部１４がコマンドメモリとして構成されている場合、制御部１８は設定部１４に対してプログラムカウンタ値を与え、設定部１４は、そのカウンタ値に応じて格納した設定データを、コマンドデータとしてリコンフィギュラブル回路１２に設定する。なお、設定部１４は、キャッシュメモリや他の種類のメモリを有して構成されてもよい。なお、本例においては、制御部１８が記憶部３４から設定データ４０を受けて、その設定データを設定部１４に供給する構成について説明するが、制御部１８を介さずに、予め設定部１４に設定データを格納しておいてもよい。この場合、制御部１８は、設定部１４に予め格納された複数の設定データの中からターゲット回路４２に応じた設定データがリコンフィギュラブル回路１２に供給されるように、設定部１４のデータ読出しを制御する。
【００５６】
設定部１４は、設定データ４０をリコンフィギュラブル回路１２に設定し、リコンフィギュラブル回路１２に回路を逐次再構成させる。これにより、リコンフィギュラブル回路１２は、所期の演算を実行できる。リコンフィギュラブル回路１２は、基本セルとして高性能の演算能力のあるＡＬＵを用いており、またリコンフィギュラブル回路１２および設定部１４を１チップ上に構成することから、コンフィグレーションを高速に、例えば１クロックで実現することができる。制御部１８はクロック機能を有し、クロック信号は、出力回路２２および遅延保持回路２７に供給される。また制御部１８は４進カウンタを含み、カウント信号を設定部１４に供給してもよい。
【００５７】
＜ＤＦＧの処理機能の説明＞
図５は、コンパイル部３０に入力されるＣソースプログラムである。これは乗算演算を行うプログラムをＣ言語で記述したもの、でありｘが被乗数であり、ｙが乗数である。
【００５８】
図６は、コンパイル部３０から出力される中間ファイルである（なお、本実施形態のコンパイル部３０は、特許文献２におけるコンパイル部３０が行う処理に加えて、所定のノード群を１つのｍｕｌ＿ｔノードに置換する処理までも行うものとする）。この中間ファイルは、乗数、非乗数のビット幅を１６ｂｉｔに制限した乗算処理を加減算に展開した処理を表している。
【００５９】
仮ＤＦＧ生成部６０は、この中間ファイルを解析して、図７で示すようなデータフローグラフを生成する。例えば、図６の中間ファイルに着目すると、ｌｓｌ８命令から出力されるデータ＄ｘ０が、複数個のｍｕｌ＿ｔ命令に出力されていることが分かる。この中間ファイルをこのままリコンフィギュラブル回路１２に割り当てることはできないので、データフローグラフにスルーノード（同図ではｍｏｖノードとして表現）を挿入し、図７のようなデータフローグラフを生成する。
【００６０】
図８は、ＤＦＧ再構成部６２が行う最適化処理のフローチャートを示したものである。このフローチャートは、図７のデータフローグラフから、図１０のようなデータフローグラフを生成するための手順を示したものである。
【００６１】
図１０のデータフローグラフでは、図８における連続スルーノード群が削除されている。削除されるスルーノードを伝播するデータはメモリＡに出力され、メモリＡにて一時的に格納される。そして、削除されたｍｏｖノードからデータを読み出す代わりに、メモリからデータが読み出される。これにより、リコンフィギュラブル回路１２のＡＬＵにマッピングされるデータフローグラフの小型化を図る。
【００６２】
まず、ｎ個以上連続するスルーノード（ｍｏｖノード）が、仮ＤＦＧ生成部６０により生成されたデータフローグラフにあるかどうかを探索する（ステップＳ１）。
【００６３】
この実施形態では、連続するスルーノードの全てのノードを削除する訳ではなく、先頭部のスルーノードについては削除しない。ｎとは削除しない先頭部のスルーノード数のことである。このｎの大きさは、リコンフィギュラブル回路１２と、メモリ（内部状態保持回路２０）との間のアクセス速度に基づいて決定される。図７のデータフローグラフがマッピングされたリコンフィギュラブル回路１２においては、リコンフィギュラブル回路１２のＡＬＵに割り当てられるｍｏｖノード群を用いて上段のノードから下段のノードへのデータ伝播が行われることになる。これに対し、図１０のデータフローグラフでは、リコンフィギュラブル回路１２の外部にあるメモリ（内部状態保持回路２０）を用いて上段のノードから下段のノードへデータを伝播させる。しかし、通常、メモリに対するデータ読み書きの時間は、ＡＬＵ間のデータ伝播よりも時間がかかる。したがって、一旦データをメモリに退避させると、そのデータをすぐに演算ノードでの演算に使うことができない。例えば、全てのｍｏｖノードを削除してしまうと、図８の上から２段目のｍｕｌ＿ｔノードは、メモリＡからｌｓｌ８ノードの出力データの内容を読み出す必要があるが、メモリＡのアクセスには時間がかかるので間に合わない。そこで、メモリに対するデータ読み書きの時間と、ＡＬＵ間のデータ伝播時間とを比較して、ｎをいくつにするかが決定される。
【００６４】
なお、この実施形態では、ｎ＝３であるものとして以下の説明を行う。
【００６５】
ステップＳ１において、３個以上連続するｍｏｖノードが探索された場合、ステップＳ２へ進む。３個以上連続するｍｏｖノードが探索されなかった場合は、このフローチャートにおける処理は終了である。
【００６６】
ステップＳ２では、連続するｍｏｖノードの先頭ノードへの入力を行うノード（以下、ノードｐと呼ぶ）を探索する。
【００６７】
ステップＳ３では、連続するｍｏｖノードの先頭ノードからｎ＋１番目（４番目）以降のｍｏｖノードの出力ノードｃを探索する。このステップＳ３の処理を終えた直後のＤＦＧの状態を示したものが、図９の「状態１」である。
【００６８】
ステップＳ４では、ノードｐの出力をメモリＡへの書き込みへ変更する。
【００６９】
ステップＳ５では、ノードｃへの入力をメモリＡからの読み込みへ変更する。このステップＳ５の処理を終えた直後のＤＦＧの状態を示したものが、図９の「状態２」である。
【００７０】
ステップＳ６では、ｎ＋１番目（４番目）以降のノードを削除する。そして、最適化処理は終了である（図９の「状態３」、及び図１０参照）。
【００７１】
このように、本実施形態のＤＦＧ再構成部６２によれば、コンパイラで生成されたデータフローグラフのノード数を８個減らすことができ、リコンフィギュラブル回路１２にマッピングされるＡＬＵの数を８つ減らすことができる。これにより、減らした部分に別のＤＦＧを割り当てることができ、回路の小型化を図ることができるとともに、低消費電力化、実行速度の向上も可能となる。
【００７２】
＜他の演算への適用例＞
上記では、乗算演算への適用例であったが、他の演算についても適用可能である。
図１１は、コンパイル部３０に入力されるＣソースプログラムである。これは、変数ｘと１０との加算結果が０ｘ７ＦＦＦＦＦ（１６進数表示）であった場合、加算結果であるｘ＋１０を２３ビット右シフトさせる演算を行うものである。
【００７３】
図１２は、コンパイラから出力される中間ファイルである。図１３は、仮ＤＦＧ生成部６０により、リコンフィギュラブル回路１２にマッピング可能なものに変換されたデータフローグラフである。ここでａｓｒとは右シフトを示すものであり、数字はシフトされるビット数を示すものである。例えばａｓｒ８とは８ビット右シフトを指す。
【００７４】
図１４は、ＤＦＧ再構成部６２での最適化処理の結果、生成されるデータフローグラフである。本実施形態では、先頭のｍｏｖノードから３つ以内のｍｏｖノードから演算ノード（ａｓｒノード）へ入力されるものはない。したがって、この実施形態では全てのｍｏｖノードを削除している。
【００７５】
このように、本実施形態のＤＦＧ再構成部６２によれば、コンパイラで生成されたデータフローグラフのノード数を５個減らすことができる。これにより、減らした部分に別のＤＦＧを割り当てることができ、回路の小型化を図ることができるとともに、低消費電力化、実行速度の向上も可能となる。
【００７６】
このように本願発明は、乗算演算以外の演算についても適用可能である。
【００７７】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した実施の形態の説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【００７８】
例えば、図８で示したフローチャートの処理においては、リコンフィギュラブル回路１２と内部状態保持回路２０との間のメモリアクセス時間を考慮して、全てのスルーノードを削除することはしなかった。しかしながら、例えば図１３のデータフローグラフのように、先頭部分のノードからの演算ノードへの出力がない場合は、全てのスルーノードを削除しても良い。
【図面の簡単な説明】
【００７９】
【図１】実施の形態に係る処理装置１０の構成図である。
【図２】リコンフィギュラブル回路１２の一般的構成を示す図である。
【図３】データフローグラフ処理部３１の構成を示す図である。
【図４】データフローグラフ３８の構造を説明するための図である。
【図５】コンパイル部３０に入力されるＣソースプログラムである。
【図６】コンパイル部３０から出力される中間ファイルである。
【図７】仮ＤＦＧ生成部６０が生成するデータフローグラフである。
【図８】ＤＦＧ再構成部６２が行う最適化処理のフローチャートである。
【図９】最適化処理の途中のデータフローグラフを示すものである。
【図１０】ＤＦＧ再構成部６２により最適化処理されたデータフローグラフである。
【図１１】コンパイル部３０に入力されるＣソースプログラムである。
【図１２】コンパイラから出力される中間ファイルである。
【図１３】仮ＤＦＧ生成部６０が生成するデータフローグラフである。
【図１４】ＤＦＧ再構成部６２により最適化処理されたデータフローグラフである。
【図１５】筆算アルゴリズムを用いて被乗数２４ビット×乗数４ビットの計算をするデータフローグラフである
【図１６】図１５において４段にて構成されていたノード群７０のそれぞれを１つのノードｍｕｌ＿ｔに置換したあとの状態を示したものである。
【図１７】ｎｏｐノードを削除した後のデータフローグラフである。
【符号の説明】
【００８０】
１０  処理装置
１２  リコンフィギュラブル回路
１４  設定部
１８  制御部
２０  内部状態保持回路
３０  コンパイル部
３１  データフローグラフ処理部
３２  設定データグラフ処理部
６０  仮ＤＦＧ生成部
６２  ＤＦＧ再構成部
【図１】
0004562678.tif 000002
【図２】
0004562678.tif 000003
【図３】
0004562678.tif 000004
【図４】
0004562678.tif 000005
【図５】
0004562678.tif 000006
【図６】
0004562678.tif 000007
【図７】
0004562678.tif 000008
【図８】
0004562678.tif 000009
【図９】
0004562678.tif 000010
【図１０】
0004562678.tif 000011
【図１１】
0004562678.tif 000012
【図１２】
0004562678.tif 000013
【図１３】
0004562678.tif 000014
【図１４】
0004562678.tif 000015
【図１５】
0004562678.tif 000016
【図１６】
0004562678.tif 000017
【図１７】
0004562678.tif 000018