(57)【特許請求の範囲】
【請求項１】
それぞれが複数の算術論理演算機能を選択的に実行可能な複数の論理回路から構成される演算部と、前記複数の論理回路の間の接続関係を保持する接続部と、を備えるリコンフィギュラブル回路に、所期の処理機能の動作を設定するために必要なデータフローグラフを生成するデータフローグラフ生成方法であって、
前記リコンフィギュラブル回路に所定の関数の動作を行わせる少なくとも１つのデータフローグラフを登録したライブラリに登録された前記関数を、前記所期の処理機能の動作を記述したソースプログラムから抽出する登録関数抽出ステップと、
前記ソースプログラムの前記ライブラリに登録された関数以外の処理を前記データフローグラフに変換する変換ステップと、
前記登録関数抽出ステップで抽出された関数のデータフローグラフを、前記ライブラリから読み出すライブラリ読み出しステップと、
前記変換ステップで変換したデータフローグラフと、前記ライブラリ読み出しステップで読み出したデータフローグラフとを結合して、前記リコンフィギュラブル回路に前記所期の処理機能の動作を設定するために必要なデータフローグラフを生成する結合ステップと、
を備えることを特徴とするデータフローグラフ生成方法。
【請求項２】
前記結合ステップで生成するデータフローグラフが、所定の評価基準に照らして最適となるように、前記変換ステップで変換したデータフローグラフと前記ライブラリ読み出しステップで読み出したデータフローグラフとの配置を、前記リコンフィギュラブル回路の範囲内で調節する最適化ステップを備える、
ことを特徴とする請求項１に記載のデータフローグラフ生成方法。
【請求項３】
前記ライブラリは、少なくとも１つの関数について、該関数に対応する異なる形態の複数のデータフローグラフを含み、
前記登録関数抽出ステップで抽出された関数について、前記ライブラリに異なる形態の複数のデータフローグラフが登録されている場合に、
前記ライブラリ読み出しステップは、前記異なる形態の複数のデータフローグラフを読み出し、
前記異なる形態の複数のデータフローグラフから、前記結合ステップで生成するデータフローグラフが、所定の評価基準に照らして最適となるデータグラフを選択する選択ステップを備える、
ことを特徴とする請求項１または２に記載のデータフローグラフ生成方法。
【請求項４】
前記リコンフィギュラブル回路が、前記論理回路の１以上の列からなる段を１つ以上備える接続構造を有する場合に、
前記所定の評価基準は、前記リコンフィギュラブル回路の列数の範囲で、前記論理回路の段数が最小であることを特徴とする請求項２または３に記載のデータフローグラフ生成方法。
【請求項５】
それぞれが複数の算術論理演算機能を選択的に実行可能な複数の論理回路から構成される演算部と、前記複数の論理回路の間の接続関係を保持する接続部と、を備えるリコンフィギュラブル回路と、
前記リコンフィギュラブル回路に、所期の処理機能の動作を設定するために必要なデータフローグラフを生成するデータフローグラフ生成手段と、
前記データフローグラフ生成手段で生成したデータフローグラフに基づいて、前記リコンフィギュラブル回路に前記所期の処理機能の動作を行う回路を構成するための設定データを生成する設定データ生成手段と、
を含む処理装置であって、
前記データフローグラフ生成手段は、
前記リコンフィギュラブル回路に所定の関数の動作を行わせる少なくとも１つのデータフローグラフを登録したライブラリに登録された前記関数を、前記所期の処理機能の動作を記述したソースプログラムから抽出する登録関数抽出ステップと、
前記ソースプログラムの前記ライブラリに登録された関数以外の処理を前記データフローグラフに変換する変換ステップと、
前記登録関数抽出ステップで抽出された関数のデータフローグラフを、前記ライブラリから読み出すライブラリ読み出しステップと、
前記変換ステップで変換したデータフローグラフと、前記ライブラリ読み出しステップで読み出したデータフローグラフとを結合して、前記リコンフィギュラブル回路に前記所期の処理機能の動作を設定するために必要なデータフローグラフを生成する結合ステップと、
によって前記データフローグラフを生成することを特徴とする処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、リコンフィギュラブル回路にマッピングするデータフローグラフの生成方法、及びデータフローグラフを用いるリコンフィギュラブル回路を備える処理装置に関する。
【背景技術】
【０００２】
最近、携帯電話、ＧＰＳ、ＶＩＣＳなど、無線通信が広く普及し、無線機の種類も増えている。これらの無線機またはその機能をすべてハードウエアで実装すると、コストや実装面積が嵩む。そこで、ハードウエアとしては汎用的な能力を有する回路を搭載しておき、それにロードするソフトウエアを切り替えることで多様な機能を実現する「ソフトウエア無線機」という考え方がある。
【０００３】
ソフトウエア無線機を実現する回路として、ＦＰＧＡ（Field Programmable Gate Array）やＤＳＰ（Digital Signal Processor）がある。特許文献１には、ＦＰＧＡを動的に
再構成することで、回路構成の再利用を図る方法が提案されている。動的変更が可能なタイプの回路を以下リコンフィギュラブル回路という。
【０００４】
ＦＰＧＡはＬＳＩ製造後に回路データを書き込んで比較的自由に回路構成を設計することが可能であり、専用ハードウェアの設計に利用されている。ＦＰＧＡは、論理回路の真理値表を格納するためのルックアップテーブル（ＬＵＴ）と出力用のフリップフロップからなる基本セルと、その基本セル間を結ぶプログラマブルな配線リソースとを含む。ＦＰＧＡでは、ＬＵＴに格納するデータと配線データを書き込むことで目的とする論理演算を実現できる。しかし、ＦＰＧＡでＬＳＩを設計した場合、ＡＳＩＣ（Application Specific IC）による設計と比べると、実装面積が非常に大きくなり、コスト高になる。そこで
、ＦＰＧＡを動的に構成することによって、回路構成の再利用を計る方法が提案されている（例えば、特許文献１参照）。
【０００５】
回路規模を削減したリコンフィギュラブル回路として、例えば、特許文献２の技術がある。特許文献２のリコンフィギュラブル回路は、機能の変更が可能な複数のＡＬＵを備える。複数のＡＬＵはマトリックス状に配置され、ＡＬＵの各段の間には、ＡＬＵの接続を選択的に確立可能な少なくとも１つの接続部が設けられている。この接続部は、上下段における全ての論理回路同士を接続可能とするものではなく、論理回路が、別の段に属する一部の論理回路のみと接続可能であるように構成される。
【０００６】
リコンフィギュラブル回路の動作設定に必要なデータフローグラフ（ＤＦＧ）を処理する技術として、例えば特許文献３の技術がある。
【０００７】
特許文献３のデータフローグラフ処理方法は、生成した１以上のＤＦＧを、リコンフィギュラブル回路の集合体内の論理回路の数に応じて複数のサブＤＦＧに分割する。リコンフィギュラブル回路が多段接続構造を有する場合、サブＤＦＧの列数は、リコンフィギュラブル回路の１段あたりの論理回路の個数以下となるように設定される。続いて、サブＤＦＧを結合して、結合ＤＦＧを生成する。結合ＤＦＧの列数も、リコンフィギュラブル回路の１段あたりの論理回路の個数以下となるように設定される。この結合ＤＦＧを、リコンフィギュラブル回路の段数以下となるように再分割し、リコンフィギュラブル回路にマッピング可能なサブ結合ＤＦＧを生成する。
【特許文献１】特開平１０−２５６３８３号公報
【特許文献２】特開２００５−１８２６５４号公報
【特許文献３】特開２００６−４３４５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
例えば衛星放送では、季節などにより、放送モードを切り替えて画質の調整などを行うことがある。衛星放送受信機では、放送モードごとに複数の回路を予めハードウェア上に作り込んでおき、放送モードに合わせて選択器で回路を切り替えて受信している。従って、受信機の他の放送モード用の回路はその間遊んでいることになる。モード切替のように、複数の専用回路を切り替えて使用し、その切替間隔が比較的長い場合、複数の専用回路を作り込む代わりに、切替時にＬＳＩを瞬時に再構成することにすれば、回路構造を簡単にして汎用性を高め同時に実装コストを抑えることができる。このようなニーズに応えるべく、動的に再構成可能なＬＳＩに製造業界の関心が高まってきている。特に、携帯電話やＰＤＡ（Personal Digital Assistant）などのモバイル端末に搭載されるＬＳＩは小型化が必要であり、ＬＳＩを動的に再構成し、用途に合わせて適宜機能を切り替えることができれば、ＬＳＩの実装面積を小さく抑えることができる。
【０００９】
ＦＰＧＡは回路構成の設計自由度が高く、汎用的である反面、全ての基本セル間の接続を可能とするため、多数のスイッチとスイッチのＯＮ／ＯＦＦを制御するための制御回路を含む必要があり、必然的に制御回路の実装面積が大きくなる。また、基本セル間の接続に複雑な配線パターンをとるため、配線が長くなる傾向がある。さらに１本の配線に多くのスイッチが接続される構造であるため、遅延が大きくなる。そのため、ＦＰＧＡによるＬＳＩは、試作や実験のために利用されるにとどまることが多く、実装効率、性能コストなどを考えると、量産には適していない。さらに、ＦＰＧＡによるＬＳＩでは、多数のＬＵＴ方式の基本セルに設定データを送る必要があるため、回路のコンフィギュレーションにはかなりの時間を要する。そのため、瞬時に回路構成の切替が必要な用途にはＦＰＧＡによるＬＳＩは適していない。
【００１０】
それらの課題を解決するため、近年、ＡＬＵ（Arithmetic Logic Unit）と呼ばれる基
本演算機能を複数有する多機能素子を用いたリコンフィギュラブルプロセッサの開発が進められている。リコンフィギュラブルプロセッサでは、コマンドデータが設定されることにより、ＡＬＵ回路の演算機能構成と接続部が制御され、全体として所期の演算処理回路を実現することが可能となる。コマンドデータは、一般にＣ言語等の高級プログラム言語で記述されたソースプログラムからＤＦＧ（Data Flow Graph）と呼ばれるデータフロー
を作成し、その情報をもとに作成される。
【００１１】
特許文献２は、演算手段間の構成を格段構成とし、しかも一つの演算手段の出力は下段の制限された演算手段にしか接続されない、いわゆる接続制限されたリコンフィギュラブル回路と、接続制限されたリコンフィギュラブル回路への機能のマッピング方法が記載されている。特許文献２の技術では、マッピング時に使用する演算手段を順次探す手法を採るために、マッピング処理に時間がかかるという不都合があった。また、マッピング処理は必ずしも最適なマッピングを行うとは限らなかった。
【００１２】
本発明はこうした状況に鑑みてなされたものであり、回路規模の縮小化と処理時間の短縮化等に貢献する、リコンフィギュラブル回路へのマッピング処理方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
上記目的を達成するため、本発明の第１の観点に係るリコンフィギュラブル回路にマッピングするデータフローグラフの生成方法は、それぞれが複数の算術論理演算機能を選択的に実行可能な複数の論理回路から構成される演算部と、前記複数の論理回路の間の接続
関係を保持する接続部と、を備えるリコンフィギュラブル回路に、所期の処理機能の動作を設定するために必要なデータフローグラフを生成するデータフローグラフ生成方法であって、前記リコンフィギュラブル回路に所定の関数の動作を行わせる少なくとも１つのデータフローグラフを登録したライブラリに登録された前記関数を、前記所期の処理機能の動作を記述したソースプログラムから抽出する登録関数抽出ステップと、前記ソースプログラムの前記ライブラリに登録された関数以外の処理を前記データフローグラフに変換する変換ステップと、前記登録関数抽出ステップで抽出された関数のデータフローグラフを、前記ライブラリから読み出すライブラリ読み出しステップと、前記変換ステップで変換したデータフローグラフと、前記ライブラリ読み出しステップで読み出したデータフローグラフとを結合して、前記リコンフィギュラブル回路に前記所期の処理機能の動作を設定するために必要なデータフローグラフを生成する結合ステップと、を備えることを特徴とする。
【００１４】
さらに、前記結合ステップで生成するデータフローグラフが、所定の評価基準に照らして最適となるように、前記変換ステップで変換したデータフローグラフと前記ライブラリ読み出しステップで読み出したデータフローグラフとの配置を、前記リコンフィギュラブル回路の範囲内で調節する最適化ステップを備える、ことを特徴とする。
【００１５】
なお、前記ライブラリは、少なくとも１つの関数について、該関数に対応する異なる形態の複数のデータフローグラフを含み、前記登録関数抽出ステップで抽出された関数について、前記ライブラリに異なる形態の複数のデータフローグラフが登録されている場合に、前記ライブラリ読み出しステップは、前記異なる形態の複数のデータフローグラフを読み出し、前記異なる形態の複数のデータフローグラフから、前記結合ステップで生成するデータフローグラフが、所定の評価基準に照らして最適となるデータグラフを選択する選択ステップを備える、ことを特徴とする。
【００１６】
特に、前記リコンフィギュラブル回路が、前記論理回路の１以上の列からなる段を１つ以上備える接続構造を有する場合に、前記所定の評価基準は、前記リコンフィギュラブル回路の列数の範囲で、前記論理回路の段数が最小であることを特徴とする。
【００１７】
本発明の第２の観点に係る処理装置は、それぞれが複数の算術論理演算機能を選択的に実行可能な複数の論理回路から構成される演算部と、前記複数の論理回路の間の接続関係を保持する接続部と、を備えるリコンフィギュラブル回路と、前記リコンフィギュラブル回路に、所期の処理機能の動作を設定するために必要なデータフローグラフを生成するデータフローグラフ生成手段と、前記データフローグラフ生成手段で生成したデータフローグラフに基づいて、前記リコンフィギュラブル回路に前記所期の処理機能の動作を行う回路を構成するための設定データを生成する設定データ生成手段と、を含む処理装置であって、前記データフローグラフ生成手段は、前記リコンフィギュラブル回路に所定の関数の動作を行わせる少なくとも１つのデータフローグラフを登録したライブラリに登録された前記関数を、前記所期の処理機能の動作を記述したソースプログラムから抽出する登録関数抽出ステップと、前記ソースプログラムの前記ライブラリに登録された関数以外の処理を前記データフローグラフに変換する変換ステップと、前記登録関数抽出ステップで抽出された関数のデータフローグラフを、前記ライブラリから読み出すライブラリ読み出しステップと、前記変換ステップで変換したデータフローグラフと、前記ライブラリ読み出しステップで読み出したデータフローグラフとを結合して、前記リコンフィギュラブル回路に前記所期の処理機能の動作を設定するために必要なデータフローグラフを生成する結合ステップと、によって前記データフローグラフを生成することを特徴とする。
【発明を実施するための最良の形態】
【００１８】
本発明に係るリコンフィギュラブル回路への演算マッピング方法と、リコンフィギュラ
ブル回路の一実施の形態について、図を参照して説明する。図１は、本発明の一実施の形態に係るリコンフィギュラブル回路を含む処理装置の構成を示すブロック図である。図１に示すように、処理装置１０は、集積回路装置２６を備える。集積回路装置２６は、回路構成を再構成可能とする機能を有する。集積回路装置２６は１チップとして構成され、リコンフィギュラブル回路１、設定部１４、制御部１８、内部状態保持回路２０、出力回路２２および経路部２４を備える。リコンフィギュラブル回路１は、設定を変更することにより、機能の変更を可能とする。
【００１９】
設定部１４は、第１設定部１４ａ、第２設定部１４ｂ、第３設定部１４ｃ、第４設定部１４ｄおよび選択器１６を有し、リコンフィギュラブル回路１に所期の回路を構成するための設定データ４０を供給する。経路部２４は、フィードバックパスとして機能し、リコンフィギュラブル回路１の出力を、リコンフィギュラブル回路１の入力に接続する。内部状態保持回路２０および出力回路２２は、例えばデータフリップフロップ（Ｄ−ＦＦ）などの順序回路あるいはメモリで構成され、リコンフィギュラブル回路１の出力を受ける。内部状態保持回路２０は経路部２４に接続されている。リコンフィギュラブル回路１は組合せ回路、またはＤ−ＦＦのような状態保持を含む順序回路として構成される。
【００２０】
図２は、ＡＬＵアレイを用いたリコンフィギュラブル回路１の構成例を示す図である。図２に示すように、リコンフィギュラブル回路１は、機能の変更が可能なＡＬＵ（算術論理演算ユニット）などを含む演算部である論理回路２の集合体を複数備えた構造を有し、また、それぞれの集合体の間に設けられて、集合体間の論理回路２の接続を選択的に確立可能な少なくとも１つの接続部３を有する。
【００２１】
リコンフィギュラブル回路１において、演算機能を選択的に実行可能な複数の論理回路２がマトリックス状に配列されて、図２の例では、Ｘ段Ｙ列のＡＬＵアレイを構成し、各段に配列された複数の論理回路２が集合体を構成して、前段の集合体における処理結果が、接続部３において選択的に確立される接続にしたがって後段の集合体に引き渡される。上段から下段への論理回路２間のデータ渡しは、論理回路２間の接続切替を行う接続スイッチに接続データセットを設定することで、下段のどの論理回路２にデータを渡すかが定められる。動作時には、構成情報に従って演算処理し、結果を出力する。
【００２２】
各論理回路２の機能と、論理回路２間の接続関係は、図１に示す設定部１４により供給される設定データ４０に基づいて設定される。設定データ４０は、以下の手順で生成される。
【００２３】
集積回路装置２６により実現されるべきソースプログラム３６が、記憶部３４に保持されている。ソースプログラム３６は、信号処理回路または信号処理アルゴリズムなどをＣ言語などの高級言語で記述したものである。コンパイル部３０は、記憶部３４に格納されたソースプログラム３６をコンパイルし、データフローグラフ（以下、ＤＦＧともいう）３８に変換して記憶部３４に格納する。データフローグラフ３８は、入力変数および定数による入力データから出力データに至る演算ないしはデータの流れをグラフ構造で表現したものである。
【００２４】
記憶部３４は、リコンフィギュラブル回路１に設定する処理機能で頻出する関数（ライブラリ関数）について、予めデータフローグラフに変換されたライブラリＤＦＧを格納したＤＦＧライブラリ３７を備える。コンパイル部３０は、ソースプログラム３６に含まれるライブラリ関数について、対応するライブラリＤＦＧをＤＦＧライブラリ３７から読み込み、新たに生成するデータフローグラフ（ＤＦＧ）と組み合わせて、ソースプログラム３６に対応するデータフローグラフ３８を生成する。コンパイル部３０はまた、リコンフィギュラブル回路１における論理回路２の集合体の接続制限に応じて、データフローグラ
フ３８を生成する。
【００２５】
なお、ＤＦＧライブラリ３７は、記憶部３４とは別の記憶装置等に格納されていてもよい。例えば、処理装置１０と通信ネットワークで接続される別のサーバ等（図示せず）にＤＦＧライブラリ３７を格納してもよい。コンパイル部３０は、ソースプログラム３６をコンパイルするときに通信ネットワークを経由して、そのサーバ等に格納されたＤＦＧライブラリ３７から、ソースプログラム３６に含まれるライブラリ関数に対応するライブラリＤＦＧを読み込むように構成することができる。ＤＦＧライブラリ３７をサーバ等に格納することによって、複数の処理装置１０でＤＦＧライブラリ３７を共同利用することができる。このように構成すると、処理装置１０は膨大なＤＦＧライブラリ３７を保持せずに済み、しかもソースプログラム３６に応じてあらゆるライブラリＤＦＧを利用できる。
【００２６】
設定データ生成部３２は、データフローグラフ３８から設定データ４０を生成する。設定データ４０は、データフローグラフ３８をリコンフィギュラブル回路１にマッピングするためのデータであり、リコンフィギュラブル回路１における論理回路２の機能や論理回路２間の接続関係を定める。
【００２７】
本実施の形態では、具体的な関数を例にとって、本発明のリコンフィギュラブル回路１にマッピングするデータフローグラフ３８の生成方法を説明する。図３は、リコンフィギュラブル回路１にマッピングするソースプログラム３６の例を示す。図３のソースプログラム３６は、関数ｆｕｎｃＡ（）、関数ｆｕｎｃ＿ｌｉｂ（）、関数ｆｕｎｃＢ（）をその順序で含む。関数ｆｕｎｃ＿ｌｉｂ（）はライブラリ関数であり、そのＤＦＧがライブラリＤＦＧとして、ＤＦＧライブラリ３７に登録されている。
【００２８】
図４は、ＤＦＧライブラリ３７の構成を模式的に示す。図４に示すように、関数（ライブラリ関数）に対応したＤＦＧ情報として、ライブラリＤＦＧが登録されている。ＤＦＧライブラリ３７には、１つのライブラリ関数に対して、複数のＤＦＧが登録されている場合がある。図４では、ライブラリ関数ｆｕｎｃ＿ｌｉｂ（）に対して、２つのＤＦＧが登録されている様子を示す。
【００２９】
図５は、図３のソースプログラム３６に現れる関数に対応するＤＦＧの例を示す。図５（ａ）は、関数ｆｕｎｃＡ（）のＤＦＧを示す。図５（ｂ）は、ライブラリ関数ｆｕｎｃ＿ｌｉｂ（）のＤＦＧを示す。図５（ｃ）は、関数ｆｕｎｃＢ（）のＤＦＧを示す。図５において、丸印は１つの論理回路２を示す。最後段の四角は、その関数の出力である関数の値を表す。各論理回路２に割り当てられる演算は図５には示されていないが、実際にはそれぞれの論理回路２に加算、減算、論理和、論理積、ビットシフト演算、大小比較などの演算が割り当てられる。また図５では、各ＤＦＧの入力が省略されている。
【００３０】
図５の例では、関数ｆｕｎｃＡ（）は幅３列、縦３段で合計６個の論理回路２を使用する。関数ｆｕｎｃ＿ｌｉｂ（）は幅４列、縦４段で合計１１個の論理回路２を使用する。また、関数ｆｕｎｃＢ（）は幅２列、縦３段で合計４個の論理回路２を使用する。このようなＤＦＧ３８への展開は一般に、一意には決まらない。後述するように、１つの関数に対して、リコンフィギュラブル回路１へマッピングするデータフローグラフ３８は複数あり得る。
【００３１】
図６は、図５に示すそれぞれの関数のＤＦＧを結合して、１つのＤＦＧ３８としたものである。図６の一点鎖線で囲んだ範囲が関数ｆｕｎｃＡ（）のＤＦＧを、破線で囲んだ範囲が関数ｆｕｎｃ＿ｌｉｂ（）のＤＦＧを、線で囲われていない部分が関数ｆｕｎｃＢ（）のＤＦＧを表す。関数ｆｕｎｃＡ（）のＤＦＧと関数ｆｕｎｃ＿ｌｉｂ（）のＤＦＧの間の論理回路２を、関数ｆｕｎｃＢ（）のＤＦＧで使用するように、関数ｆｕｎｃＢ（）
のＤＦＧの最初の段の論理回路２が１列右に移動されている。
【００３２】
関数ｆｕｎｃＡ（）、ｆｕｎｃ＿ｌｉｂ（）、ｆｕｎｃＢ（）のＤＦＧはこの順序で縦に接続されるのではなく、平行して処理されるように配置されている。ここでは、入力が省略されているが、少なくとも、関数ｆｕｎｃ＿ｌｉｂ（）の最初の段の論理回路２の入力は、関数ｆｕｎｃＡ（）の２段目以降の論理回路２の出力を使用しないことが条件になっている。また、関数ｆｕｎｃＢ（）の初段の論理回路２の入力は、関数ｆｕｎｃＡ（）の最終段の論理回路２の出力を使用せず、関数ｆｕｎｃ＿ｌｉｂ（）と平行して処理できることが条件になっている。これらの条件は、ソースプログラム３６及び関数のコンパイル結果から導かれる。
【００３３】
図６の結合ＤＦＧでは、リコンフィギュラブル回路１は、少なくとも６列の論理回路２を備えていることが条件になっている。リコンフィギュラブル回路１の論理回路２等の条件の範囲で、最適な配置となるように、それぞれの関数のＤＦＧを変形して組み合わせる。最適な配置としては、多くの場合、ＤＦＧ全体の論理回路２の段数が最も少なくなるものを選択する。リコンフィギュラブル回路１で実行する処理の時間が最も短くなるからである。入力があってから結果が出力されるまでの時間が決められているような場合に、その規定の処理時間になるように論理回路２の段数を合わせることが最適の場合もあり得る。
【００３４】
コンパイル部３０は、ソースプログラム３６からＤＦＧライブラリ３７に登録された関数を抽出し、その関数のＤＦＧ（ライブラリＤＦＧ）をＤＦＧライブラリ３７から読み出す。また、ソースプログラム３６のライブラリ関数以外の部分をＤＦＧに変換し、読み出したライブラリＤＦＧと組み合わせて、結合ＤＦＧを生成する。そのとき、ソースプログラム３６の処理を割り当てるリコンフィギュラブル回路１の条件と、処理内容の条件の範囲で、結合ＤＦＧが最適な構成になるように、各ＤＦＧの配置を決める。特に、処理全体の論理回路２の段数が最小となるように、各ＤＦＧが割り当てられる論理回路２の左右の位置を変更して、無効な論理回路２ができないように配置を決定する。
【００３５】
リコンフィギュラブル回路１の条件が異なれば、最適な結合ＤＦＧの形は変化する。例えば、図７は、リコンフィギュラブル回路１が論理回路２を４列しか備えていない場合の結合ＤＦＧの構成例を表す。図７は、図６の結合ＤＦＧと同じように、図５に示す３つのＤＦＧを結合して１つのＤＦＧ３８としたものである。図７においても一点鎖線で囲んだ範囲が関数ｆｕｎｃＡ（）のＤＦＧを、破線で囲んだ範囲が関数ｆｕｎｃ＿ｌｉｂ（）のＤＦＧを、線で囲われていない部分が関数ｆｕｎｃＢ（）のＤＦＧを表す。
【００３６】
図７のリコンフィギュラブル回路１は、論理回路２を４列しか備えていない場合を想定している。図７では、関数ｆｕｎｃＡ（）のＤＦＧは、図５（ａ）のＤＦＧを左右反転した形となっているが、演算内容は同じである。また、関数ｆｕｎｃＢ（）のＤＦＧは最初の段が１列右に移動している。コンパイル部３０は、結合ＤＦＧが使用する論理回路２の列数が、リコンフィギュラブル回路１の論理回路列数を越えないように、各ＤＦＧの配置を決める。
【００３７】
こうして、頻出する関数について予め変換したＤＦＧをライブラリに登録しておいて、ソースプログラム３６からＤＦＧに変換するときに、ソースプログラム３６に含まれる関数（ライブラリ関数）について、それに対応するライブラリＤＦＧをライブラリから読み出して結合することによって、ＤＦＧ生成の処理時間を短縮することができる。また、ライブラリＤＦＧと、その他のＤＦＧ（分割ＤＦＧ）を、リコンフィギュラブル回路１の条件に合わせて配置することによって、最適な結合ＤＦＧ（データフローグラフ３８）を得ることができる。
【００３８】
次に、１つのライブラリ関数に対して、複数のライブラリＤＦＧがＤＦＧライブラリ３７に登録されている場合の、結合ＤＦＧを生成する方法について説明する。図８は、１つの関数について２通りのＤＦＧの例を表す。図８のＤＦＧの関数は、８入力の和
ｚ ＝ ａ＋ｂ＋ｃ＋ｄ＋ｅ＋ｆ＋ｇ＋ｈ
を表す。図８（Ａ）は、最大４列の論理回路２を使用するＤＦＧで、論理回路２は３段、合計７個の論理回路２から構成される。図８（Ｂ）は、初段だけ２列の論理回路２を使用するＤＦＧで、論理回路２は６段、合計７個の論理回路２から構成される。図８の（Ａ）と（Ｂ）のＤＦＧは、入力及び出力と、演算内容が同じである。図８（Ａ）のＤＦＧは列が多い代わりに処理段数が少なく、図８（Ｂ）のＤＦＧは処理段数が多い代わりに列数が少ない。
【００３９】
また、それぞれのＤＦＧの下に、各ＤＦＧのデータ表現の例を記載している。このデータ表現は、論理回路２をノード番号で表して、
ノード番号：演算  出力、入力１、入力２
の形式になっている。出力と入力の数字はノード番号を表す。アルファベットは変数を表す。例えば、図８（Ａ）のノード番号１の論理回路２は、演算が加算（ａｄｄ）で、出力がノード番号５、入力がａとｂであることを表し、ＤＦＧのノード１に対応している。ノード番号７の論理回路２は、ノード番号５と６の論理回路２の出力を入力として、演算が加算であり、出力が変数ｚであることを表し、上のＤＦＧのノード７に対応している。各ノード番号についてＤＦＧとデータ表現が対応していることが確かめられる。図８（Ｂ）についても、ＤＦＧとデータ表現が対応していることが確かめられる。
【００４０】
データ表現では、論理回路２の１つの段の中の配置は決まらないが、論理回路２の演算と、論理回路２相互の関係が決められている。従って、データ表現に基づいて、ＤＦＧの配置を決めることができる。
【００４１】
図９は、図８のライブラリＤＦＧとある関数のＤＦＧを結合した例を示す。図９の一点鎖線で囲んだ範囲は、図８（Ａ）に示すライブラリＤＦＧである。図９のＤＦＧ３８は、ライブラリＤＦＧに、次の式（１）に示す７入力の関数のＤＦＧを配置している。
（ａ＋ｂ−（ｃ＞＞１））＊（ｄ＋ｅ＋ｆ＋ｇ）      （１）
ここで、ｃ＞＞１は変数ｃの内容を１ビット右にシフトする演算を表す。図９の例では、リコンフィギュラブル回路１の論理回路２の列数は４であるとする。
【００４２】
式（１）の関数の場合、図８（Ｂ）のＤＦＧを組み合わせると、論理回路２の列数が４なので、上の式（１）の関数とライブラリ関数の順序を変えることできるとしても、式（１）の関数のＤＦＧの２段目からしかライブラリ関数の処理を開始できないので、全体の論理回路２の段数は７となる。図８（Ａ）のＤＦＧを組み合わせる方が論理回路２の段数が少ない。従って、その他の条件が無ければ、コンパイル部３０は、図８（Ａ）のライブラリＤＦＧを選択して、結合ＤＦＧ（データフローグラフ３８）を生成する。
【００４３】
図１０は、別の関数と図８のライブラリＤＦＧとを結合した例を示す。図１０のＤＦＧは、ライブラリＤＦＧと別に、次の式（２）に示す８入力の関数のＤＦＧを配置している。
（（（ａ−ｂ）＋ｃ＊ｄ−ｅ＊ｆ）＊ｇ）＊ｈ      （２）
ここで、＊ｇと＊ｈの積の順は入れ替えられないものとする。図１０の例でも、リコンフィギュラブル回路１の論理回路２の列数は４であるとする。
【００４４】
式（２）の関数の場合、図８（Ａ）のＤＦＧと別を組み合わせると、論理回路２の列数が４なので、全体の論理回路２の段数は７段となる。図８（Ｂ）のＤＦＧと別を組み合わ
せる方が論理回路２の段数が少ない。従って、その他の条件に適合すれば、コンパイル部３０は、図８（Ｂ）のライブラリＤＦＧを選択して、結合ＤＦＧを生成する。
【００４５】
１つの関数について、異なる構成の複数のＤＦＧをライブラリに登録しておいて、組み合わせるＤＦＧの構成と、リコンフィギュラブル回路１の条件に応じて、結合ＤＦＧが最適な構成になるライブラリＤＦＧを選択して用いることができる。特に、結合ＤＦＧ全体の論理回路２の段数が最小になるライブラリＤＦＧを選択する。その結果、ＤＦＧ生成の処理時間を短縮することができる。さらに、複数のライブラリＤＦＧから最適な構成を選択するので、処理内容とリコンフィギュラブル回路１に最適な結合ＤＦＧの構成を得ることができる。
【００４６】
次に、本発明のデータフローグラフ生成の動作について説明する。図１１は、コンパイル部３０の動作の一例を示すフローチャートである。コンパイル部３０は、まず、記憶部３４からソースプログラム３６を読み込む（ステップＡ１）。そして、読み込んだソースプログラム３６からライブラリ関数を抽出し、ライブラリ読み込みリスト４１に読み込むライブラリの関数名を記録する（ステップＡ２）。ついで、コンパイル部３０は、ソースプログラム３６を中間ファイルに変換して、中間ファイル４２に書き出す（ステップＡ３）。
【００４７】
図１２は、ライブラリ関数の抽出（ステップＡ２）と中間ファイル変換（ステップＡ３）を展開したフローチャートである。図１２において、パーサ部（ステップＢ１）では、ソースプログラム３６の字句解析と、構文解析を行う。字句解析は、ソースプログラム３６を、「字句(トークン)」の並びに分割する。構文解析は、解析された「字句(トークン)」の並びから、解析木を構築する。
【００４８】
次に、プリプロセッシング（Preprocessing）（ステップＢ２）では，コンパイル部３
０がソースプログラム３６からＤＦＧ３８を生成する前に，ソースファイルの一部を条件的にスキップしたり，他のソースファイル（ヘッダファイル）を読み込んだり，マクロを置き換えるための処理を行う。
【００４９】
処理分割（ステップＢ３）では、構文解析した結果からライブラリ関数を抽出し、ライブラリ読み込みリスト４１を作成する。図１３は、処理分割を展開したフローチャートの一例を示す。
【００５０】
図１３において、ソースプログラム３６（構文解析結果）から関数名を探索する（ステップＣ１）。ライブラリ登録関数を見つけたら（ステップＣ２；Ｙｅｓ）、その関数名をライブラリ読み込みリスト４１に追加する（ステップＣ３）。そして、その関数の前後でソースプログラム３６を分割する（ステップＣ４）。図３のソースプログラム３６を例にすると、関数ｆｕｎｃ＿ｌｉｂ（）の前、ｆｕｎｃＡ（）以前と、ｆｕｎｃ＿ｌｉｂ（）の後、ｆｕｎｃＢ（）以後に分割する。ソースプログラム３６が尽きるまで、ステップＣ１〜Ｃ４を繰り返し、ライブラリ登録関数がもはやなくなれば（ステップＣ２；Ｎｏ）、処理分割を終了する。
【００５１】
図１２のフローチャートに戻って、処理分割（ステップＢ３）の後、ライブラリ登録関数の前後で分割されたソースプログラム３６ごとに中間ファイルに変換し、中間ファイル４２に書き出す（ステップＢ４）。図３のソースプログラム３６を例にすると、関数ｆｕｎｃＡ（）以前と、ｆｕｎｃＢ（）以後をそれぞれ中間ファイルに変換して、中間ファイル４２に書き出す。
【００５２】
中間ファイル変換は、意味解析とも呼ばれ、解析木を元に、変数の型など意味情報を考
慮して、解析木を中間表現（中間ファイル)に変換する。この中間表現は、対象となるリ
コンフィギュラブル回路１に依存しない、抽象度の高い中間的なコードである。中間表現は、実際のリコンフィギュラブル回路１の制限などに関係なく、その後のＤＦＧ３８の最適化が行いやすい。
【００５３】
図１１のフローチャートに戻って、中間ファイル変換（ステップＡ３）の後、ライブラリ読み込みリスト４１に従って、ＤＦＧライブラリ３７からライブラリＤＦＧを読み込む（ステップＡ４）。
【００５４】
図１４は、ＤＦＧライブラリ読み込みを分解したフローチャートの一例を示す。ライブラリ読み込みリスト４１から関数名を取り出し（ステップＤ１）、その関数名のライブラリＤＦＧをＤＦＧライブラリ３７から読み出す（ステップＤ２）。その関数名のライブラリＤＦＧが複数登録されている場合は、複数のＤＦＧを読み出す。そして、読み込んだライブラリＤＦＧを、元のソースプログラム３６のライブラリ関数に対応する部分的なＤＦＧファイルとして、分割ＤＦＧファイル４３に書き出す（ステップＤ３）。
【００５５】
ライブラリ読み込みリスト４１があれば（ステップＤ４；Ｙｅｓ）、ステップＤ１〜Ｄ３を繰り返す。ライブラリ読み込みリスト４１が尽きれば（ステップＤ４；Ｎｏ）、ＤＦＧライブラリ読み込みを終了する。
【００５６】
再び図１１のフローチャートに戻って、中間ファイル変換で分割されたソースプログラム３６ごとにＤＦＧに変換し、分割ＤＦＧファイル４３に書き出す（ステップＡ５）。同時に、分割ＤＦＧ同士の結合情報として、結合リスト４４を作成する。
【００５７】
ＤＦＧライブラリ読み込み（ステップＡ４）と分割ＤＦＧ変換（ステップＡ５）で作成された分割ＤＦＧ４３と結合リスト４４から、ソースプログラム３６に対応する結合ＤＦＧ３８に変換し、データフローグラフ３８を書き出す（ステップＡ６）。
【００５８】
図１５は、結合ＤＦＧ変換を分解したフローチャートの一例を示す。ライブラリ読み込みリスト４１から、関数名を読み込み、処理する部分の関数を選択する（ステップＥ１）。分割ＤＦＧファイル４３から、その関数に対応するライブラリＤＦＧを１つ読み込む（ステップＥ２）。
【００５９】
結合リスト４４を参照して、分割ＤＦＧファイル４３から読み込んだライブラリＤＦＧとライブラリ以外の分割ＤＦＧを組み合わせる（ステップＥ３）。そして、その分割ＤＦＧの組み合わせで最適な構成となるようにＤＦＧの配置を決める（ステップＥ４）。そして、そのライブラリＤＦＧについて評価基準に照らして評価値を算出する。ここでは、論理回路２の段数を評価値とする。結合ＤＦＧの論理回路２の段数が前の回よりも小さければ（ステップＥ５；Ｙｅｓ）、ライブラリＤＦＧを今回のものに置き換える（ステップＥ６）。そのライブラリ関数について最初のライブラリＤＦＧの場合は、前回の組み合わせがないので、置き換えることはない。
【００６０】
そのライブラリ関数について、ライブラリＤＦＧが他にあれば（ステップＥ７；Ｙｅｓ）、ライブラリＤＦＧ読み込み（ステップＥ２）に戻って、異なるライブラリＤＦＧを読み込んで、分割ＤＦＧの組み合わせを行い（ステップＥ３）、ＤＦＧ最適配置を行って（ステップＥ４）、論理回路２段数が前の回より小さければライブラリＤＦＧを置き換える（ステップＥ６）。そのライブラリ関数について登録されている複数のＤＦＧについて組み合わせ・最適配置を行って（ステップＥ７；Ｎｏになるまで）、最適な構成になるライブラリＤＦＧを選択する。
【００６１】
ステップＥ１からステップＥ７を、ソースプログラム３６に含まれる全てのライブラリ関数について行う（ステップＥ８；Ｙｅｓ）。全てのライブラリ関数について、組み合わせ・最適配置が終了すれば、その結果得られた結合ＤＦＧは最適組み合わせ、及び最適配置であるから、その結合ＤＦＧをデータフローグラフ３８として格納する（ステップＥ９）。
【００６２】
前述のとおり、設定データ生成部３２は、データフローグラフ３８から設定データ４０を生成する（図１参照）。設定データ４０は、データフローグラフ３８をリコンフィギュラブル回路１にマッピングするためのデータであり、リコンフィギュラブル回路１における論理回路２の機能や論理回路２間の接続関係を定める。
【００６３】
以上、説明したとおり、ライブラリに登録された関数のＤＦＧを読み込んで、ソースプログラム３６に対応する結合ＤＦＧを生成するので、データフローグラフ生成の処理時間を短縮することができる。また、結合ＤＦＧを生成するときに、ライブラリＤＦＧ及び分割ＤＦＧを最適な構成になるように配置するので、対象となるリコンフィギュラブル回路１に最適な配置のデータフローグラフ３８を得ることができる。
【００６４】
さらに、１つの関数について異なる構成の複数のＤＦＧをライブラリに登録しておいて、結合ＤＦＧを生成するときに最適な構成となるライブラリＤＦＧを選択するので、リコンフィギュラブル回路１により適したデータフローグラフ３８を迅速に得ることができる。その結果、リコンフィギュラブル回路１の回路規模を小さくし、効率的に動作させることが期待できる。
【００６５】
そして、結合ＤＦＧ（データフローグラフ３８）として論理回路２の段数が最小の構成となるように、ライブラリＤＦＧを選択し、最適配置するので、ソースプログラム３６の処理をリコンフィギュラブル回路１に実行させたときの処理時間が最小になる。
【００６６】
その他、前記のハードウエア構成やフローチャートは一例であり、任意に変更及び修正が可能である。
【図面の簡単な説明】
【００６７】
【図１】本発明の実施の形態に係るリコンフィギュラブル回路を備える処理装置の構成を示すブロック図である。
【図２】本発明の実施の形態に係るリコンフィギュラブル回路の構成の例を示すブロック図である。
【図３】リコンフィギュラブル回路にマッピングするソースプログラムの例を示す図である。
【図４】データフローグラフライブラリの構成を模式的に示す図である。
【図５】図３のソースプログラムに現れる関数に対応するＤＦＧの例を示す図である。
【図６】図５に示すそれぞれの関数のＤＦＧを結合した例を表す図である。
【図７】リコンフィギュラブル回路が論理回路を４列しか備えていない場合の結合ＤＦＧの構成例を表す図である。
【図８】１つの関数について２通りのＤＦＧの例を表す図である。
【図９】図８のライブラリＤＦＧとある関数のＤＦＧを結合した例を示す図である。
【図１０】別の関数と図８のライブラリＤＦＧとを結合した例を示す図である。
【図１１】本発明に係るコンパイル部の動作の一例を示すフローチャートである。
【図１２】ライブラリ関数の抽出と中間ファイル変換を展開したフローチャートである。
【図１３】処理分割を展開したフローチャートの一例を示す図である。
【図１４】ＤＦＧライブラリ読み込みを分解したフローチャートの一例を示す図である。
【図１５】結合ＤＦＧ変換を分解したフローチャートの一例を示す図である。
【符号の説明】
【００６８】
１  リコンフィギュラブル回路
２  論理回路
３  接続部
１０  処理装置
３０  コンパイル部
３２  設定データ生成部
３４  記憶部
３６  ソースプログラム
３７  ＤＦＧライブラリ
３８  データフローグラフ
４０  設定データ
【図１】
0004601567.tif 000002
【図２】
0004601567.tif 000003
【図３】
0004601567.tif 000004
【図４】
0004601567.tif 000005
【図５】
0004601567.tif 000006
【図６】
0004601567.tif 000007
【図７】
0004601567.tif 000008
【図８】
0004601567.tif 000009
【図９】
0004601567.tif 000010
【図１０】
0004601567.tif 000011
【図１１】
0004601567.tif 000012
【図１２】
0004601567.tif 000013
【図１３】
0004601567.tif 000014
【図１４】
0004601567.tif 000015
【図１５】
0004601567.tif 000016