(57)【要約】【課題】  リコンフィギュラブル回路の動作設定に必要なデータフローグラフを処理する技術を提供する。【解決手段】  本発明のデータフローグラフ処理方法は、所期の演算処理を記述したプログラムを２以上のサブプログラムに分割し（Ｓ１６）、２以上のサブプログラムのそれぞれを、演算子の処理順序の依存関係を表現するデータフローグラフ（ＤＦＧ）に変換する（Ｓ１８）。同時に、サブプログラムのそれぞれに対応するＤＦＧの処理順序を示すフローデータを生成する（Ｓ２２）。ＤＦＧは設定データに変換され（Ｓ２０）、フローデータは制御データに変換される（Ｓ２４）。【選択図】図４
2006099720.tif 000002
【特許請求の範囲】
【請求項１】
機能の変更が可能なリコンフィギュラブル回路の動作設定に必要なデータフローグラフを処理するデータフローグラフ処理方法であって、
所期の演算処理を記述したプログラムを２以上のサブプログラムに分割する分割ステップと、
前記２以上のサブプログラムのそれぞれを、演算子の処理順序の依存関係を表現する前記データフローグラフに変換するステップと、
を備えることを特徴とするデータフローグラフ処理方法。
【請求項２】
前記分割ステップは、前記プログラムの記述内容に基づいて該プログラムを分割することを特徴とする請求項１に記載のデータフローグラフ処理方法。
【請求項３】
前記分割ステップは、前記プログラムに含まれる分岐処理を検出し、分岐先の処理のそれぞれを前記サブプログラムとして抽出することを特徴とする請求項２に記載のデータフローグラフ処理方法。
【請求項４】
分岐先の処理量が所定量を超えるか否かを判定するステップをさらに備え、
前記分割ステップは、分岐先の処理量が所定量を超えることが判定された場合には、分岐先の処理を前記サブプログラムとして抽出することを特徴とする請求項３に記載のデータフローグラフ処理方法。
【請求項５】
前記所期の演算処理としては記述されていないコメント部分が存在するか否かを判定するステップをさらに備え、
前記分割ステップは、前記コメント部分が存在する場合には、該コメント部分により定められる範囲を前記サブプログラムとして抽出することを特徴とする請求項３に記載のデータフローグラフ処理方法。
【請求項６】
条件分岐における分岐先の前記サブプログラムを選択するために必要な演算処理を前記プログラムに追加するステップをさらに備えることを特徴とする請求項１乃至請求項５のいずれかに記載のデータフローグラフ処理方法。
【請求項７】
機能の変更が可能なリコンフィギュラブル回路の動作設定に必要なデータフローグラフを処理するデータフローグラフ処理方法であって、
所期の演算処理を記述したプログラムを、該プログラム中に含まれる条件分岐にしたがって、２以上のデータフローグラフに変換するステップを備えることを特徴とするデータフローグラフ処理方法。
【請求項８】
機能の変更が可能なリコンフィギュラブル回路の動作設定に必要なデータフローグラフを処理するデータフローグラフ処理方法であって、
所期の演算処理を記述したプログラムを２以上のサブプログラムに分割するステップと、
前記２以上のサブプログラムのそれぞれに対応する、演算子の処理順序の依存関係を表現するデータフローグラフの処理順序を示すフローデータを生成する生成ステップと、
を備えることを特徴とするデータフローグラフ処理方法。
【請求項９】
前記生成ステップは、
前記データフローグラフの接続関係を確認する確認ステップと、
確認結果に基づいて、前記データフローグラフ間の実行順序を定めるステップと、
を有することを特徴とする請求項８に記載のデータフローグラフ処理方法。
【請求項１０】
前記確認ステップは、一つのデータフローグラフに対して、次に処理する可能性のある全てのデータフローグラフを決定することを特徴とする請求項９に記載のデータフローグラフ処理方法。
【請求項１１】
次に処理する可能性のある前記データフローグラフが複数存在する場合には、該データフローグラフに分岐条件を付加するステップをさらに備えることを特徴とする請求項１０に記載のデータフローグラフ処理方法。
【請求項１２】
機能の変更が可能であるリコンフィギュラブル回路の動作設定に必要なデータフローグラフを処理するデータフローグラフ処理方法であって、
前記リコンフィギュラブル回路は、前記機能に対応する処理を実行ステップ毎に順次実行するものであり、
所期の演算処理を実行させるプログラムにおける特定の記述内容に基づいて、該プログラムを演算子の処理順序の依存関係を表現する前記データフローグラフに変換するステップと、
変換された前記データフローグラフに対応する前記リコンフィギュラブル回路の前記実行ステップの数に応じて、前記プログラムを２以上のサブプログラムに分割する分割ステップと
を備えることを特徴とするデータフローグラフ処理方法。
【請求項１３】
前記分割ステップでは、変換された前記データフローグラフに対応する前記リコンフィギュラブル回路の前記実行ステップの数が基準数を超える場合には、前記プログラムを２以上のサブプログラムに分割することを特徴とする請求項１２に記載のデータフローグラフ処理方法。
【請求項１４】
前記基準数は、前記リコンフィギュラブル回路の処理能力に応じて設定されることを特徴とする請求項１３に記載のデータフローグラフ処理方法。
【請求項１５】
前記特定の記述内容は、一の演算処理から他の複数の演算処理に分岐している場合に該他の複数の演算処理のうちのいずれかに演算処理を移行させるための条件を示す記述内容を含むことを特徴とする請求項１２に記載のデータフローグラフ処理方法。
【請求項１６】
前記特定の記述内容は、同一の演算処理を複数回繰り返し実行させるための条件を示す記述内容を含むことを特徴とする請求項１２に記載のデータフローグラフ処理方法。
【請求項１７】
請求項１乃至請求項１６のいずれかに記載のデータフローグラフ処理方法の結果から得られたデータに従って動作することを特徴とするリコンフィギュラブル回路。   
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、機能の変更が可能なリコンフィギュラブル回路の動作設定に必要なデータフローグラフを処理するデータフローグラフ処理方法に関する。
【背景技術】
【０００２】
近年、ＡＬＵ(Arithmetic Logic Unit)と呼ばれる基本演算機能を複数持つ多機能素子を用いたリコンフィギュラブルプロセッサの開発が進められている（例えば、特許文献１参照）。リコンフィギュラブルプロセッサでは、コマンドデータをＡＬＵ回路に順次設定することで、全体として所期の演算処理回路を実現することができる。
【０００３】
コマンドデータは、Ｃ言語などの高級プログラム言語で記述されたソースプログラムからＤＦＧ（データフローグラフ）と呼ばれるデータフローを作成し、そのＤＦＧをＡＬＵ回路にマッピングするデータとして作成される。コマンドデータは、ＡＬＵ回路上に構成する回路の処理順序にしたがって作成され、アドレスの連続した記憶領域に記憶される。
【特許文献１】特開２００４−２２０３７７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
従来のリコンフィギュラブルプロセッサでは、コマンドデータをメモリから順次読み出し、ＡＬＵ回路に供給して、ＡＬＵ回路の機能を設定する。そのため、ソースプログラム中にif文のような条件判定処理が存在する場合には、分岐する複数の処理を実行するコマンドデータをＡＬＵ回路上に設定して予め演算を実行し、条件判定を実行した後に、判定結果に沿った演算処理結果を選択する必要がある。
【０００５】
この場合、実際に使用するのは分岐の一方の演算処理結果のみであり、他方の演算処理結果は使用されない。このため、結果的には演算処理の時間が必要以上に長くなる事態をまねいていた。
【０００６】
また、ソースプログラム中にfor文のような所定回数のループ演算が存在する場合、従来のリコンフィギュラブルプロセッサでは、同じループ演算のコマンドデータ群を所定回数分、メモリの連続したアドレスに記憶させる必要がある。
【０００７】
例えば、ループ数が１０回であれば、同一のコマンドデータ群を１０回分メモリに記憶する必要があり、コマンドデータのデータ量が増大することになっていた。また、ループ数が不定の場合には、繰返し数が不明のため、コマンドデータの生成自体が困難となっていた。
【０００８】
本発明は以上の点に鑑みて成されたものであり、リコンフィギュラブル回路の動作設定に必要なデータフローグラフを効率よく処理することができるデータフローグラフ処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題を解決するために、本発明は、機能の変更が可能なリコンフィギュラブル回路の動作設定に必要なデータフローグラフを処理する方法に関する。このデータフローグラフ処理方法は、所期の演算処理を記述したプログラムを２以上のサブプログラムに分割するステップと、２以上のサブプログラムのそれぞれを、演算子の処理順序の依存関係を表現するデータフローグラフに変換するステップとを備える。分割ステップは、プログラムの記述内容に基づいてプログラムを分割する。このとき、プログラムに含まれる分岐処理を検出して、分岐先の処理のそれぞれを、サブプログラムとして抽出してもよい。
【００１０】
かかる発明の特徴によれば、プログラムを複数のサブプログラムに分割することにより、ループ文の実行に必要なデータフローグラフの数を少なくすることができる。このため、データフローグラフを変換して生成する設定データ量を削減することができ、設定データ量を記憶するメモリ容量を小さくすることができる。また、設定データ量が削減された分、リコンフィギュラブル回路の回路規模を小さくでき、分岐文の処理時間を短縮することができる。
【００１１】
本発明の別の態様は、機能の変更が可能なリコンフィギュラブル回路の動作設定に必要なデータフローグラフを処理する方法に関する。このデータフローグラフ処理方法は、所期の演算処理を記述したプログラムを、プログラム中に含まれる条件分岐にしたがって、２以上のデータフローグラフに変換するステップを備える。
【００１２】
かかる発明の特徴によれば、条件分岐ごとにデータフローグラフを作成することにより、データフローグラフの設定データをリコンフィギュラブル回路にマッピングした場合に、条件の判定結果に応じて分岐先のデータフローグラフをその都度選択することができる。このため、処理時間を短縮することができ、処理パフォーマンスが向上するとともに消費電力を低減できる。
【００１３】
本発明のさらに別の態様は、機能の変更が可能なリコンフィギュラブル回路の動作設定に必要なデータフローグラフを処理する方法であって、所期の演算処理を記述したプログラムを２以上のサブプログラムに分割するステップと、２以上のサブプログラムのそれぞれに対応する、演算子の処理順序の依存関係を表現するデータフローグラフの処理順序を示すデータフローグラフのフローデータを生成するステップとを備える。
【００１４】
かかる発明の特徴によれば、複数のサブプログラムに対応するデータフローグラフの処理順序を定めることにより、データフローグラフに対応する設定データをリコンフィギュラブル回路に効率よくマッピングすることが可能となる。
【００１５】
上記発明においてはリコンフィギュラブル回路は、複数種類の多ビット演算を選択的に実行可能な算術論理回路を有してもよい。
【００１６】
本発明の別の態様は、機能の変更が可能であるリコンフィギュラブル回路の動作設定に必要なデータフローグラフを処理するデータフローグラフ処理方法であって、リコンフィギュラブル回路は機能に対応する処理を実行ステップ毎に順次実行するものであり、所期の演算処理を実行させるプログラムにおける特定の記述内容に基づいて、該プログラムを演算子の処理順序の依存関係を表現する前記データフローグラフに変換するステップと、変換された前記データフローグラフに対応する前記リコンフィギュラブル回路の前記実行ステップの数に応じて、前記プログラムを２以上のサブプログラムに分割するステップと
を備えることを特徴とする。
【００１７】
上記発明においては、分割ステップでは、変換されたデータフローグラフに対応するリコンフィギュラブル回路の前記実行ステップの数が基準数を超える場合には、プログラムを２以上のサブプログラムに分割してもよい。この基準数は、リコンフィギュラブル回路の処理能力に応じて設定されてもよい。
【００１８】
上記発明においては、特定の記述内容は、一の演算処理から他の複数の演算処理に分岐している場合に他の複数の演算処理のうちのいずれかに演算処理を移行させるための条件を示す記述内容を含んでもよい。
【００１９】
上記発明においては、特定の記述内容は、同一の演算処理を複数回繰り返し実行させるための条件を示す記述内容を含んでもよい。
【００２０】
なお、本発明は、方法のみならずに、装置、回路、システム、コンピュータプログラムとしても当然に適用可能である。
【発明の効果】
【００２１】
本発明によれば、リコンフィギュラブル回路の動作設定に必要なデータフローグラフを効率よく処理することができる。
【発明を実施するための最良の形態】
【００２２】
図１は、実施例に係る処理装置１０の構成図である。処理装置１０は、回路構成を再構成可能とする機能を有した集積回路装置２６を備える。集積回路装置２６は１チップとして構成され、リコンフィギュラブル回路１２、設定データ保持部１４、シーケンサ装置２０、出力データ保持部３０および経路部３２を備える。リコンフィギュラブル回路１２は、設定を変更することにより、機能の変更を可能とする。本実施例におけるリコンフィギュラブル回路１２は、機能に対応する処理を実行ステップ毎（後述する図２に示す段）に順次実行する。
【００２３】
設定データ保持部１４は、リコンフィギュラブル回路１２に所期の回路を構成するための設定データを複数保持し、設定データを所定の時間間隔でリコンフィギュラブル回路１２に順次供給する。設定データ保持部１４は、記憶した設定データを、指定されたアドレス値をもとに出力するコマンドメモリとして構成されてもよい。この場合、設定データはコマンドデータと呼ぶことができる。シーケンサ装置２０は、設定データ保持部１４に記憶された複数の設定データの中から、リコンフィギュラブル回路１２に供給する設定データを選択する機能をもつ。
【００２４】
経路部３２は、フィードバックパスとして機能し、リコンフィギュラブル回路１２の出力を、リコンフィギュラブル回路１２の入力に接続する。出力データ保持部３０は、リコンフィギュラブル回路１２から出力されるデータ信号および／または外部から入力されるデータ信号を格納するための記憶領域を有する。出力データ保持部３０に格納されたデータ信号は、経路部３２を通じてリコンフィギュラブル回路１２の入力に伝達され、また図示しない制御部からの出力指示に基づいて処理装置１０の外部に出力される。
【００２５】
リコンフィギュラブル回路１２は、機能の変更が可能な複数の論理回路を有して構成される。具体的には、リコンフィギュラブル回路１２は、複数の演算機能を選択的に実行可能な論理回路を複数段に配列させた構成を有する。リコンフィギュラブル回路１２は、前段の論理回路列の出力と後段の論理回路列の入力との接続関係を設定可能な接続部を有する。複数の論理回路は、マトリックス状に配置されてもよい。
【００２６】
各論理回路の機能と、論理回路間の接続関係とは、設定データ保持部１４により供給される設定データに基づいて設定される。設定データは、所定の時間間隔でリコンフィギュラブル回路１２に供給される。したがって、リコンフィギュラブル回路１２は、供給される設定データに応じた演算処理機能を実行する。
【００２７】
シーケンサ装置２０は、リコンフィギュラブル回路１２における演算結果、具体的には分岐条件の判定結果をもとに、設定データ保持部１４がリコンフィギュラブル回路１２に供給する設定データを管理する。シーケンサ装置２０は、実行すべきプログラムから生成される制御データに基づいて、設定データ保持部１４から所期の設定データを出力させる。設定データおよび制御データは、以下の手順で生成される。
【００２８】
集積回路装置２６により実現されるべきプログラムが、記憶部４０に保持されている。プログラムは、リコンフィギュラブル回路１２における所期の演算処理を記述し、具体的には信号処理回路または信号処理アルゴリズムなどをＣ言語などの高級言語で記述したものである。
【００２９】
コンパイル部５０は、記憶部４０に格納されたプログラムを読み出す。コンパイル部５０は、読み出したプログラムをコンパイル処理し、複数のデータフローグラフ（ＤＦＧ）と、ＤＦＧの処理順序を示すフローデータとを生成する。コンパイル部５０は、生成したＤＦＧとそのフローデータとを記憶部４０に格納する。
【００３０】
ＤＦＧは、回路における演算子（演算間）の処理順序の依存関係を表現し、入力変数および定数の演算の流れをグラフ構造で示したものである。一般にＤＦＧは、上から下に向かって演算が進むように形成される。
【００３１】
複数のＤＦＧは、一つのプログラムを複数のサブプログラムに分解して、そのサブプログラムのそれぞれを変換することで生成される。ＤＦＧフローデータは、複数のサブプログラムに対応するＤＦＧの処理順序を定め、特に条件分岐が発生する場合の分岐元と分岐先のＤＦＧの処理順序を決定するように生成される。
【００３２】
設定データ生成部５１は、ＤＦＧを、対応する設定データに変換し、設定データ保持部１４に格納する。制御データ生成部５４は、ＤＦＧフローデータを、対応する制御データに変換し、シーケンサ装置２０に格納する。設定データは、ＤＦＧをリコンフィギュラブル回路１２にマッピングするためのデータであり、リコンフィギュラブル回路１２における論理回路の機能や論理回路間の接続関係を定める。
【００３３】
制御データは、リコンフィギュラブル回路１２にマッピングする設定データ（ＤＦＧ）の接続関係を表現するデータである。制御データは、リコンフィギュラブル回路１２における演算の実行中、分岐条件の判定結果である分岐制御データ_SEQ_に応じて、分岐先となるＤＦＧを定める。
【００３４】
シーケンサ装置２０は、設定データ保持部１４に、読出アドレスを供給する。このとき、リコンフィギュラブル回路１２から供給される分岐制御データ_SEQ_などの値に応じて、次にリコンフィギュラブル回路１２に供給する設定データの読出アドレスを決定する。設定データ保持部１４は、読出アドレスを受けると、そのアドレスに格納した設定データをリコンフィギュラブル回路１２に供給する。
【００３５】
図２は、リコンフィギュラブル回路１２の構成の一例を示す。リコンフィギュラブル回路１２は、それぞれが複数の演算機能を選択的に実行可能な論理回路の多段配列と、前段の論理回路の出力と後段の論理回路の入力の接続関係を任意に設定可能な接続部５２とを備える。
【００３６】
リコンフィギュラブル回路１２では、論理回路の多段配列構造により、上段から下段に向かって演算が進められる。なお、本明細書において「多段」とは、複数の段を意味する。なお、リコンフィギュラブル回路１２の回路構成は、必ずしも多段配列を有する必要はないが、回路規模を削減するために全ての論理回路間の接続を可能とするのではなく、一部の論理回路同士の接続を実現させるのが好ましい。
【００３７】
リコンフィギュラブル回路１２は、論理回路としてＡＬＵ(Arithmetic Logic Unit)を有している。ＡＬＵは、複数種類の多ビット演算を選択的に実行可能な算術論理回路であって、論理和、論理積、ビットシフトなどの複数種類の多ビット演算を設定により選択的に実行できる。各ＡＬＵは、複数の演算機能を設定するためのセレクタを有して構成されている。図示の例では、ＡＬＵが、２つの入力端子と１つの出力端子を有して構成される。
【００３８】
リコンフィギュラブル回路１２は、縦方向にＸ個、横方向にＹ個のＡＬＵが配置されたＸ段Ｙ列のＡＬＵアレイとして構成される。ここでは、縦方向に３個、横方向に６個のＡＬＵが配置された３段６列のＡＬＵアレイを示している。
【００３９】
リコンフィギュラブル回路１２は、接続部５２およびＡＬＵ列５３を備える。ＡＬＵ列５３は複数段に設けられ、接続部５２は前後段のＡＬＵ列５３の間に設けられて、前段のＡＬＵの出力と後段のＡＬＵの入力の接続関係を設定する。
【００４０】
図２に示す例では、第１段のＡＬＵ列５３ａと第２段のＡＬＵ列５３ｂの間に、第２段を構成する接続部５２ｂが設けられている。第２段のＡＬＵ列５３ｂと第３段のＡＬＵ列５３ｃの間に、第３段を構成する接続部５２ｃが設けられる。なお、第１段を構成する接続部５２ａは、第１段のＡＬＵ列５３ａの上側に設けられる。
【００４１】
第１段のＡＬＵ１１、ＡＬＵ１２、・・・、ＡＬＵ１６には、入力変数や定数が入力され、設定された所定の演算がなされる。演算結果の出力は、第２段の接続部５２ｂに設定された接続にしたがって、第２段のＡＬＵ２１、ＡＬＵ２２、・・・、ＡＬＵ２６に入力される。
【００４２】
第２段の接続部５２ｂにおいては、第１段のＡＬＵ列５３ａの出力と第２段のＡＬＵ列５３ｂの入力の間で任意の接続関係、あるいは予め定められた接続関係の組合せの中から選択された接続関係を実現できるように接続用結線が構成されており、設定により所期の結線が有効となる。
【００４３】
第２段のＡＬＵ２１、ＡＬＵ２２、・・・、ＡＬＵ２６には、ＡＬＵ列５３ａの出力が入力され、設定された所定の演算がなされる。演算結果の出力は、第３段の接続部５２ｃの接続用結線において設定された接続にしたがって、第３段のＡＬＵ３１、ＡＬＵ３２、・・・、ＡＬＵ３６に入力される。
【００４４】
最終段となる第３段のＡＬＵ列５３ｃからの出力データは、出力データ保持部３０に出力される。出力データ保持部３０は、経路部３２を介して、出力データを接続部５２ａに入力する。接続部５２ａは、接続用結線を設定し、第１段のＡＬＵ１１、ＡＬＵ１２、・・・、ＡＬＵ１６にデータを供給する。演算処理の最終結果が生成された場合には、出力データ保持部３０が、データを処理装置１０の外部に出力する。
【００４５】
図３は、コンパイル部５０の構成を示す。コンパイル部５０は、プログラム解析部１００、シーケンス処理部１０２、分割部１０４、ＤＦＧ生成部１０６、フローデータ生成部１０８を備える。
【００４６】
実施例におけるデータフローグラフ処理機能は、処理装置１０において、ＣＰＵ、メモリ、メモリにロードされたＤＦＧ処理用プログラムなどによって実現され、ここではそれらの連携によって実現される機能ブロックを描いている。ＤＦＧ処理用プログラムは、処理装置１０に内蔵されていてもよく、また記録媒体に格納された形態で外部から供給されるものであってもよい。したがってこれらの機能ブロックがハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現できることは、当業者に理解されるところである。
【００４７】
図４は、本実施例におけるＤＦＧ処理方法のフローチャートを示す。まず、プログラム解析部１００が、記憶部４０に格納されたプログラムを読み出し（Ｓ１０）、プログラムの解析を実行する（Ｓ１２）。
【００４８】
プログラム解析部１００は、以降の処理を効率的に実行するための前処理部であり、プログラムに含まれる関数の展開等を実行する。シーケンス処理部１０２は、プログラム記述内容に基づいて、プログラム中にシーケンス処理指定と分岐条件の演算を付加する（Ｓ１４）。
【００４９】
本実施例においてシーケンス処理は、プログラムを複数のサブプログラムに分割するための前処理であり、プログラム中の分岐処理を検出して、シーケンス処理指定を実行する。分割部１０４は、シーケンス処理部１０２により付加されたシーケンス処理指定に基づいて、プログラムを複数のサブプログラムに分割する（Ｓ１６）。このとき、分割部１０４は、分岐先の処理のそれぞれをサブプログラムとして抽出する。
【００５０】
ＤＦＧ生成部１０６は、サブプログラムごとに、リコンフィギュラブル回路１２の回路構成に適したＤＦＧを生成し（Ｓ１８）、記憶部４０に格納する。フローデータ生成部１０８は、シーケンス処理指定と分岐条件を付加したプログラムとサブプログラムに基づいて、ＤＦＧのフローデータを生成する（Ｓ２２）。
【００５１】
設定データ生成部５１は、生成されたＤＦＧからリコンフィギュラブル回路１２用の設定データを生成し（Ｓ２０）、制御データ生成部５４は、ＤＦＧのフローデータからシーケンサ装置２０に設定するための制御データを生成する（Ｓ２４）。
【００５２】
図５は、ソースプログラムの一例を示す。このプログラムでは、func0を実行すると、func1が呼び出される。図６は、func1をfunc0中に展開して、一つのプログラムにまとめた形を示す。プログラム解析部１００が、この関数の展開処理を実行する。関数を展開することで、後に実行するシーケンス処理指定やプログラムの分割処理を効率的に実行することが可能となる。シーケンス処理部１０２は、プログラム解析部１００により解析されたプログラム中に、シーケンス処理の指定と分岐条件の演算を付加する。
【００５３】
図７は、シーケンス処理部１０２の動作を示すフローチャートである。まず、シーケンス処理部１０２は、ｍをプログラムの行数に設定する（Ｓ１００）。シーケンス処理部１０２は、図６に示すプログラムを参照し、プログラムの行数が１０行であるため、ｍ＝１０を設定する。シーケンス処理部１０２は、ｉ＝１を設定する（Ｓ１０２）。シーケンス処理部１０２は、プログラムｉ行目を解析して（Ｓ１０４）、シーケンス処理を実行する部分であるかを調べる（Ｓ１０６）。
【００５４】
シーケンス処理は、プログラムを分割するための前処理であり、ループ数不定のループ演算のように単純にＤＦＧ化しただけでは演算処理が実行できない場合、もしくはシーケンス処理を実行することで回路規模、処理速度等のパフォーマンスが向上する場合に実行するものであり、実行するか否かは、プログラム中の機能または処理内容等で判定する。
【００５５】
本実施例では、分岐文(if文等)で文中の演算数が２つ以上、ループ文(for文等)でループ回数が不定または１０回以上である場合に、シーケンス処理が実行される。このように、シーケンス処理の実行を、分岐先の処理量が所定量を超えるか否かに基づいて判断することで、リコンフィギュラブル回路１２に供給する設定データを効率よく作成することが可能となる。
【００５６】
図６のプログラムにおいて、プログラム１行目の記述内容が「int i;」であり、その記述内容が分岐文またはループ文でないため、シーケンス処理部１０２は、シーケンス処理を実行しない（Ｓ１０６のＮ）。このとき、シーケンス処理部１０２は、ｉがｍに等しいか否かを判定する（Ｓ１１４）。ここではｉ＝１、ｍ＝１０であるため（Ｓ１１４のＮ）、シーケンス処理部１０２は、ｉに１を加えて（Ｓ１１６）、ｉ＝２を設定する。
【００５７】
ステップはＳ１０４に戻り、プログラム２行目の記述内容が「x+＝1;」であるため、シーケンス処理部１０２は、同様にシーケンス処理を実行しないことを判定する（Ｓ１０６のＮ）。シーケンス処理部１０２は、ｉに１を加えて（Ｓ１１６）、ｉ＝３を設定する。プログラム３行目の記述内容は「if(*y>0){」である。
【００５８】
if文のシーケンス処理の実行条件は前述のように演算数が２つ以上存在することである。ここでif文中の演算を参照すると、「x＝x>>2;」、「*y-＝x+3;」であり、演算数が２つ以上であるため、シーケンス処理部１０２はシーケンス処理を実行することを判定する（Ｓ１０６のＹ）。
【００５９】
次に、シーケンス処理部１０２は、プログラムの構文解析を実行し、シーケンス処理の範囲と分岐条件の選定を実行する（Ｓ１０８）。この場合、シーケンス処理の範囲は「if(){・・・}」であり、分岐条件は「*y>0」である。次に、シーケンス処理部１０２は、プログラム中に分岐条件を判定する演算命令を付加する（Ｓ１１０）。
【００６０】
図８は、図６に示すプログラムのif文の前に判定演算命令を付加したプログラムを示す。この例では、判定演算命令は「_SEQ_＝*y>0;」である。分岐条件は「*y>0」である。従って、シーケンス処理部１０２は、シーケンス処理を実行する部分であることを示すため、if文を「if(_SEQ_)」と記述する（Ｓ１１２）。
【００６１】
「if(_SEQ_)」は、シーケンス処理を実行する部分であることを示す「シーケンス処理指定」である。ここで、「_SEQ_」は、分岐選択に必要なリコンフィギュラブル回路１２からの出力信号に相当する変数となる。
【００６２】
リコンフィギュラブル回路１２における演算処理の実行時、_SEQ_は、分岐制御データとしてリコンフィギュラブル回路１２からシーケンサ装置２０に供給される。シーケンサ装置２０は、分岐制御データ_SEQ_を受け取ると、保持する制御データに基づいて、次に実行するＤＦＧの設定データの読出アドレスを生成して、設定データ保持部１４に供給する。
【００６３】
Ｓ１１２の後、シーケンス処理部１０２は、ｉがｍに等しいか否かを判定する（Ｓ１１４）。このとき、シーケンス処理部１０２は、ｉ＝３、ｍ＝１０であるため（Ｓ１１４のＮ）、ｉに１を加えて（Ｓ１１６）、ｉ＝４を設定する。
【００６４】
シーケンス処理部１０２は、プログラム４行目の記述内容が「x＝x>>2;」であるため、シーケンス処理を実行しない（Ｓ１０６のＮ）。シーケンス処理部１０２は、ｉに１を加え、ｉ＝５を設定する（Ｓ１１６）。以降同様にフローを実行する。ｉ＝８のとき、プログラム８行目の記述内容は「for(i＝0;i<100;i++){」である。for文のシーケンス処理の条件は前述のようにループ回数が不定または１０回以上である。ここで、for文のループ回数を参照すると、ループ回数は１００回である。このため、シーケンス処理部１０２は、シーケンス処理を実行すると判定をする（Ｓ１０６のＹ）。
【００６５】
シーケンス処理部１０２は、プログラムの構文解析を実行し、シーケンス処理の範囲と分岐条件の選定を実行する（Ｓ１０８）。この場合、シーケンス処理の範囲は「for(){・・・}」であり、分岐条件は「i<100」である。次にプログラム中に分岐条件を判定する演算命令を付加する（Ｓ１１０）。分岐条件が「i<100」であるため、図８に示すように、シーケンス処理部１０２は、for文中の最後尾に判定演算命令「_SEQ_＝i<100;」を付加する。また、for文の前にｉの初期化のための「i＝0;」を付加する。
【００６６】
そして、シーケンス処理部１０２は、シーケンス処理を実行する部分であることを示すため、for文を「do{・・・}while(_SEQ_);」と記述する（Ｓ１１２）。「do{・・・}while(_SEQ_);」は、シーケンス処理を実行する部分であることを示す「シーケンス処理指定」である。この場合、ループ回数が１００回と固定であるが、例えば分岐条件が「i<*y」のようにループ回数が不定の場合は、for文中の最後尾とfor文の前に判定演算命令「_SEQ_＝i<*y;」を付加する。
【００６７】
続いて、シーケンス処理部１０２は、ｉがｍに等しいか否かを判定する（Ｓ１１４）。シーケンス処理部１０２は、ｉ＝８、ｍ＝１０であるため（Ｓ１１４のＮ）、ｉに１を加えて（Ｓ１１６）、ｉ＝９を設定する。以降同様にフローを実行し、シーケンス処理部１０２は、ｉ＝１０のときｉ＝ｍとなるため（Ｓ１１４のＹ）、シーケンス処理部１０２におけるシーケンス処理を終了する。以上のシーケンス処理により、図８に示すシーケンス指定付きプログラムが生成される。分割部１０４は、シーケンス処理指定に基づいてプログラムをサブプログラムに分割する。
【００６８】
図９は、分割部１０４の動作を示すフローチャートである。まず、分割部１０４は、ｍをシーケンス処理指定のプログラム部分の総数に設定する（Ｓ２００）。図８に示すシーケンス指定付きプログラムでは、シーケンス処理部分は「if(_SEQ_){・・・}」と「do{・・・}while(_SEQ_)」の２箇所である。このため、分割部１０４はｍ＝２を設定する。
【００６９】
次に、分割部１０４は、ｍが０であるか否かを判定する（Ｓ２０２）。分割部１０４は、ｍ＝０であれば（Ｓ２０２のＹ）、全プログラムをひとつのサブプログラムとして（Ｓ２１２）、分割処理を終了する。ここでは、分割部１０４は、ｍ＝２であるため（Ｓ２０２のＮ）、ｉ＝１を設定する（Ｓ２０４）。
【００７０】
続いて、分割部１０４は、ｉ番目のシーケンス処理指定のプログラム部分をひとつのサブプログラムとして分割する（Ｓ２０６）。図８を参照して、１番目のシーケンス処理部分は「if(_SEQ_){・・・}」であるため、分割部１０４はその部分をひとつのサブプログラムとする。
【００７１】
図１０は、図８に示すプログラムを分割して最終的に生成された複数のサブプログラムを示しており、「if(_SEQ_){・・・}」は、図１０のfunc02に示すサブプログラムとして切り出される。
【００７２】
プログラム中の「if(_SEQ_)」は、func02を実行するかどうかの判断に相当するが、この判断は、図１に示すリコンフィギュラブル回路１２から出力された_SEQ_の値に基づいて、シーケンサ装置２０により実行される。したがって、ＤＦＧ化する演算は「x＝x>>2;」、「*y-＝x+3;」であり、「if(_SEQ_)」はＤＦＧ化する必要がないため、サブプログラムには加えない。
【００７３】
続いて、分割部１０４は、ｉがｍに等しいか否かを判定する（Ｓ２０８）。分割部１０４は、ｉ＝１、ｍ＝２であるため（Ｓ２０８のＮ）、ｉに１を加えて（Ｓ２１０）、ｉ＝２を設定する。
【００７４】
ステップはＳ２０６に戻り、２番目のシーケンス処理部分は「do{・・・}while(_SEQ_);」であるため、分割部１０４は、同様にその部分をひとつのサブプログラムとする。「do{・・・}while(_SEQ_);」は、図１０のfunc04に示すサブプログラムとして切り出される。
【００７５】
続いて、分割部１０４は、ｉがｍに等しいか否かを判定する（Ｓ２０８）。分割部１０４は、ｉ＝２、ｍ＝２であるため（Ｓ２０８のＹ）、Ｓ２１４に移る。ここまでの処理で、シーケンス処理指定のプログラム部分のサブプログラム化が終了する。
【００７６】
次に、分割部１０４は、残りのプログラム部分のサブプログラム化を実行する。まず、分割部１０４は、１番目のシーケンス処理指定のプログラムの前にプログラムがあるかどうかを判定する（Ｓ２１４）。１番目のシーケンス処理指定のプログラム「if(_SEQ_){・・・}」の前にプログラムがあるため（Ｓ２１４のＹ）、分割部１０４は、そのプログラムをひとつのサブプログラムとする（Ｓ２１６）。これにより、図１０のfunc01に示すサブプログラムが生成される。
【００７７】
続いて、分割部１０４は、ｍが１に等しいか否かを判定する（Ｓ２１８）。なお、１番目のシーケンス処理指定のプログラムの前にプログラムが存在しない場合には（Ｓ２１４のＮ）、分割部１０４は、直接、Ｓ２１８の判定を実行する。この例では、分割部１０４は、ｍ＝２であるため（Ｓ２１８のＮ）、ｊ＝１を設定する（Ｓ２２０）。
【００７８】
続いて、分割部１０４は、ｊ番目のシーケンス処理指定のプログラムと、（ｊ＋１）番目のシーケンス処理指定のプログラムの間にプログラムがあるかどうかの判定を実行する（Ｓ２２２）。ここでは、１番目のシーケンス処理指定のプログラム「if(_SEQ_){・・・}」と２番目のシーケンス処理指定のプログラム「do{・・・}while(_SEQ_);」の間にプログラムがあるため（Ｓ２２２のＹ）、分割部１０４は、そのプログラムをひとつのサブプログラムとする（Ｓ２２４）。これにより、図１０のfunc03に示すサブプログラムが生成される。
【００７９】
続いて、分割部１０４は、ｊがｍ−１に等しいか否かを判定し（Ｓ２２６）、この例では、ｊ＝１、ｍ＝２であり、ｊ＝ｍ−１であるため（Ｓ２２６のＹ）、分割部１０４は、ｍ番目のシーケンス処理指定のプログラムの後にプログラムがあるかどうかの判定を実行する（Ｓ２３０）。ここでは、２番目のシーケンス処理指定のプログラム「do{・・・}while(_SEQ_);」の後にプログラムがないため（Ｓ２３０のＮ）、分割部１０４は本フローを終了する。
【００８０】
なお、Ｓ２１８において、ｍが１に等しい場合には（Ｓ２１８のＹ）、分割部１０４は、Ｓ２３０に移行して、１番目のシーケンス処理指定のプログラムの後にプログラムがあるかどうかの判定を実行する。プログラムが存在する場合には（Ｓ２３０のＹ）、分割部１０４は、ｍ番目のシーケンス処理指定のプログラムの後の部分をひとつのサブプログラムとして分割する（Ｓ２３２）。
【００８１】
また、Ｓ２２６において、ｊが（ｍ−１）に等しくない場合には（Ｓ２２６のＮ）、分割部１０４は、ｊに１を加えて（Ｓ２２８）、Ｓ２２２に戻り、シーケンス処理指定のプログラムの間に、プログラムがあるかどうかの判定を実行する。
【００８２】
以上の分割処理により、図１０に示すサブプログラムが生成される。ＤＦＧ生成部１０６は、図１０のサブプログラムを、それぞれＤＦＧ化する。図１１は、ＤＦＧ生成部１０６により生成されたＤＦＧを示す。設定データ生成部５１は、これらのＤＦＧに基づいて、リコンフィギュラブル回路１２に供給するための設定データを生成する。
【００８３】
次に、フローデータ生成部１０８は、図８に示すシーケンス指定付きプログラムと、図１０に示すサブプログラムに基づいて、ＤＦＧフローデータを生成する。
【００８４】
図１２は、フローデータ生成部１０８の動作を示すフローチャートである。まず、フローデータ生成部１０８は、図１０のすべてのサブプログラムに対し、図８のシーケンス指定付きプログラムのどの部分に当たるかを調べる（Ｓ３００）。これにより、フローデータ生成部１０８は、サブプログラムの接続関係すなわちＤＦＧの接続関係を調査する。このとき、フローデータ生成部１０８は、図８のプログラム中の演算を図１０のfunc01からfunc04に置き換える。図１３は、プログラム中の演算をfunc01からfunc04に置き換えたフロー用プログラムを示す。
【００８５】
続いて、フローデータ生成部１０８は、Ｓ３００における調査結果に基づいて、フロー用プログラムの上流にあるサブプログラムから順に並べて配置する（Ｓ３０２）。これにより、ＤＦＧ間の実行順序が定められ、実行順に沿ったＤＦＧの配置が行われる。
【００８６】
図１４は、ＤＦＧフローデータを示す。図１３のフロー用プログラムにおいて、最上流にあるサブプログラムがfunc01であるため、図１４に示すように、フローデータ生成部１０８は、ＤＦＧフローデータの最上段にfunc01を配置する。そして、次に登場するサブプログラムがfunc02であるため、フローデータ生成部１０８は、図１４のように２段目にfunc02を配置する。以降同様に、フローデータ生成部１０８は、func03を３段目に、func04を４段目に配置する。
【００８７】
次に、フローデータ生成部１０８は、ｍをサブプログラムの総数に設定する（Ｓ３０４）。図１０に示すサブプログラムの総数が４であるため、フローデータ生成部１０８はｍ＝４を設定する。また、フローデータ生成部１０８はｉ＝１を設定する（Ｓ３０６）。そして、フローデータ生成部１０８は、ｉ番目のサブプログラムに対し、調査結果から次にいくつのサブプログラムに移行する可能性があるかを調べる（Ｓ３０８）。
【００８８】
ここでは、ｉ＝１であり、図１３のフロー用プログラムを参照すると、１番目のサブプログラムfunc01の次に実行されるサブプログラムはfunc02またはfunc03である。従って、func01から移行する可能性のあるサブプログラムの総数は２つであり、フローデータ生成部１０８はｎ＝２を設定する（Ｓ３１０）。また、フローデータ生成部１０８はｊ＝１とする（Ｓ３１２）。
【００８９】
次に、フローデータ生成部１０８は、ＤＦＧフローデータに、ｉ番目のサブプログラムからｊ個目の移行先のサブプログラムに処理が進むことを示す情報を付加する（Ｓ３１４）。ここでは、図１４に示すように、フローデータ生成部１０８は、１番目のサブプログラムfunc01から１個目の移行先のサブプログラムfunc02に結線する。
【００９０】
続いて、フローデータ生成部１０８は、ｎが１より大きいか否かを判定する（Ｓ３１６）。ここではｎ＝２であるため（Ｓ３１６のＹ）、フローデータ生成部１０８はＤＦＧフローデータに移行条件を示す情報を付加する（Ｓ３１８）。図１３を参照すると、_SEQ_＝１の場合にfunc02に移行しているため、フローデータ生成部１０８は、func01からfunc02への移行条件として、「_SEQ_＝1」を付加する。
【００９１】
フローデータ生成部１０８は、ｊがｎに等しいか否かを判定する（Ｓ３２０）。ここではフローデータ生成部１０８は、ｊ＝１、ｎ＝２であるため（Ｓ３２０のＮ）、ｊに1を加えて（Ｓ３２２）、ｊ＝２とする。
【００９２】
Ｓ３１４に戻り、上記と同様に、フローデータ生成部１０８は、１番目のサブプログラムfunc01から２個目の移行先のサブプログラムfunc03に処理が進むことを示すための結線を実行する。フローデータ生成部１０８は、移行条件を示す情報「_SEQ_＝0」を付加する。  フローデータ生成部１０８は、ｊがｎに等しいか否かを判定する（Ｓ３２０）。フローデータ生成部１０８は、ｊ＝２、ｎ＝２であるため（Ｓ３２０のＹ）、ｉがｍに等しいか否かを判定する（Ｓ３２４）。このとき、フローデータ生成部１０８は、ｉ＝１、ｍ＝４であるため（Ｓ３２４のＮ）ｉに１を加えて（Ｓ３２６）、ｉ＝２とする。
【００９３】
Ｓ３０８に戻って、図１３のフロー用プログラムを参照して、２番目のサブプログラムfunc02はサブプログラムfunc03にのみ移行する。func02からの移行先のサブプログラムの総数は１つであり（Ｓ３１０）、フローデータ生成部１０８はｎ＝１を設定する。また、フローデータ生成部１０８はｊ＝１を設定する（Ｓ３１２）。そして、フローデータ生成部１０８は、func02からfunc03に結線する（Ｓ３１４）。
【００９４】
フローデータ生成部１０８は、ｎが１より大きいか否かを判定する（Ｓ３１６）。ここではフローデータ生成部１０８は、ｎ＝１であり（Ｓ３１６のＮ）、移行条件を示す情報を付加する必要がない。フローデータ生成部１０８は、ｊがｎに等しいか否かを判定する（Ｓ３２０）。このとき、フローデータ生成部１０８は、ｊ＝１、ｎ＝１であるため（Ｓ３２０のＹ）、続いてｉがｍに等しいか否かを判定する（Ｓ３２４）。フローデータ生成部１０８は、ｉ＝２、ｍ＝４であるため（Ｓ３２４のＮ）、ｉに１を加えて（Ｓ３２６）、ｉ＝３とする。
【００９５】
Ｓ３０８に戻って、３番目のサブプログラムfunc03も同様にfunc03からfunc04に結線する。そして、フローデータ生成部１０８は、ｉに１を加えて、ｉ＝４とする。４番目のサブプログラムfunc04は、図１３のフロー用プログラムを参照すると、４番目のサブプログラムfunc04の次に実行されるサブプログラムはfunc04または＜処理終了＞である。
【００９６】
したがって、func04からの移行先のサブプログラムの総数は２つであり、ｎ＝２とする（Ｓ３１０）。フローデータ生成部１０８が結線および移行条件を付加することで、図１４に示すＤＦＧフローデータが最終的に生成される。そして、ｉはｍに等しくなるため（Ｓ３２４のＹ）、フローデータ生成部１０８の全処理が終了する。
【００９７】
図１４のＤＦＧフローデータは概念図であり、実際には図１４の情報を数値データ化したＤＦＧフローデータが生成される。制御データ生成部５４は、図１４のＤＦＧフローデータに基づいて、シーケンサ装置２０で設定データの選択に利用される制御データを生成する。制御データは、シーケンサ装置２０に供給され、格納される。
【００９８】
実施例では、２つのシーケンス処理指定のプログラム間のプログラムをサブプログラムとして抽出する処理を説明したが、コンパイル部５０は、シーケンス処理指定のプログラム中にさらにシーケンス処理指定がある場合であっても対応できる。
【００９９】
例えば、シーケンス処理指定のfor文の中にシーケンス処理指定のfor文があるような場合、シーケンス処理部１０２は、図１５に示すようなシーケンス指定付きプログラムを生成する。そして分割部１０４は、プログラム＜A＞、＜B＞、＜C＞の３つをシーケンス処理指定のプログラムとして扱い、分割する。図１６は、分割部により生成される複数のサブプログラムを示す。図１７は、フローデータ生成部１０８により生成されるＤＦＧフローデータを示す。
【０１００】
また、ＤＦＧ生成部１０６が、リコンフィギュラブル回路１２の回路構成に適するようにサブプログラムからＤＦＧを生成するとき、ひとつのサブプログラムから複数のＤＦＧを生成することも可能である。例えば、ＤＦＧ生成部１０６が、図１６に示すサブプログラムから、図１８に示すように、ひとつのサブプログラムに対して複数のＤＦＧを生成してもよい。
【０１０１】
この場合でも、funcA、funcB、funcCのフローの関係は、図１７に示したものと同じである。このとき、図１７の「funcA」の部分が、実行順に並んだfuncAに属するＤＦＧ３つに置き換わることになる。funcB、funcCについても同様である。従って、このような場合、フローデータ生成部１０８は、funcA、funcB、funcCについてＤＦＧフローデータを生成した後、この置き換えの処理を追加することで対応することができる。
【０１０２】
funcAに属するＤＦＧにおいて、実行順がＤＦＧA-1、ＤＦＧA-2、ＤＦＧA-3であるとし、funcB、funcCも同様であるとすると、ＤＦＧフローデータは図１９のようになる。funcA、funcB、funcC内のＤＦＧの実行は_SEQ_によらずに決定され、func間で分岐が発生する場合、_SEQ_に応じて次のfuncが決定される。
【０１０３】
本実施例では、プログラム解析部１００が、図５のfunc1をfunc0に展開して、図６に示すように、ひとつの関数にしている。仮に、func0とfunc1を独立にＤＦＧ処理したとすると、「x+＝1;」と「_SEQ_＝*y>0;」が別々にサブプログラム化されるため、func01のようにひとつのサブプログラムにならず、サブプログラムが増加することになる。
【０１０４】
サブプログラムが増加すれば、最終的に生成されるＤＦＧが増加し、処理パフォーマンスの低下、回路規模の増加を招く恐れがある。従って、分割数をできるだけ減らしサブプログラムを少なくするために、プログラム解析部１００は、複数の関数をひとつの関数にまとめる処理を実行する。
【０１０５】
以上、本発明を実施例をもとに説明した。実施例は例示であり、それらの各構成要素や各処理プロセスの組み合わせにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【０１０６】
図２０は、ソースプログラムの一例を示す。このソースプログラムでは、Ｃ記述に「/*_SEQ_*/」のようなコメントが加えられている。このコメントは、プログラム作成時に、シーケンス処理を指定するためのシーケンス処理指定コメントとしてプログラマにより挿入される。
【０１０７】
Ｃ言語において、２つのスラッシュ「/・・・/」で囲まれる文字列は、コメントとして扱われ、通常のコンパイラは、コンパイル時にコマンド部分を無視する。この変形例では、シーケンス処理部１０２が、所期の演算処理としては記述されていないコメント部分が存在するか否かを判定し、シーケンス処理指定コメントが加えられている場合、そのコメント部分をシーケンス処理指定と認識する。
【０１０８】
これにより、ユーザーが自由にシーケンス処理指定することが可能となる。また、コメントとしてシーケンス処理指定することにより、Ｃ記述での動作に影響を与えない。
【０１０９】
図２１は、シーケンス指定付きプログラムの例を示す。図２０の「func1/*_SEQ_*/();」のように、プログラマにより記述されたシーケンス処理指定が関数にある場合、分割部１０４は、その関数部分をシーケンス処理指定と認識して、コメント部分により定められる範囲をサブプログラムとして抽出する。
【０１１０】
ひとつの関数が複数箇所で呼び出される場合、従来はすべて展開されて同じ演算内容が複数箇所にあるＤＦＧが作成されるが、関数にシーケンス処理指定をすることにより、関数のＤＦＧがひとつだけ作成され、そのＤＦＧが複数回呼び出されることになるため、最終的に生成されるＤＦＧ数を少なくできる。
【０１１１】
関数にシーケンス処理指定をする場合、関数ＤＦＧが呼び出されるたびに引数の値（変数）が異なるため、func1の引数データの受け渡しを実行する必要がある。ここでは、図２１に示すシーケンス指定付きプログラムの「func1/*_SEQ_*/();」の上２行と下１行がそれに該当する。受け渡すデータが配列の場合は配列のアドレスを渡し、変数の場合は変数（数値）を受け渡すようにする。このデータ受け渡し演算命令の追加処理は、図７のＳ１１０において実行すればよい。
【０１１２】
図２２は、シーケンス処理部１０２の動作の別の例を示すフローチャートである。まず、シーケンス処理部１０２は、ｍをプログラムの行数として設定する（Ｓ４００）。具体的にはシーケンス処理部１０２は、図２３に示すプログラムを参照し、プログラムの全行数が１４行であるため、ｍ＝１４を設定する。そして、シーケンス処理部１０２はｉ＝１を設定する（Ｓ４０２）。
【０１１３】
続いて、シーケンス処理部１０２はプログラムｉ行目を解析する（Ｓ４０４）。シーケンス処理部１０２は、プログラムｉ行目が特定の記述内容であるか否か判定する（Ｓ４０６）。また、シーケンス処理部１０２は、この判定がＹＥＳである場合にはＳ４０８の処理に移り、ＮＯである場合にはＳ４２０の処理に移る。
【０１１４】
この特定の記述内容は、一の演算処理から他の複数の演算処理に分岐している場合に他の複数の演算処理のうちのいずれかに演算処理を移行させるための条件を示す記述内容（ここではif文等の分岐文）、同一の演算処理を複数回繰り返し実行させるための条件を示す記述内容（ここではfor文等のループ文)などを含む。
【０１１５】
Ｓ４０６においてプログラム１行目の記述内容は「int i;」であり、特定の記述内容（分岐文又はループ文）でないため、シーケンス処理部１０２はＳ４２０の処理に移る。シーケンス処理部１０２は、ｉがｍに等しいか否かを判定する（Ｓ４２０）。ここではｉ＝１、ｍ＝１４であるため（Ｓ４２０のＮ）、シーケンス処理部１０２は、ｉに１を加えて（Ｓ４２２）、ｉ＝２を設定する。
【０１１６】
上記Ｓ４０４の処理に戻り、シーケンス処理部１０２は、プログラム２行目の記述内容が「x+＝1;」であるため、当該記述内容が特定の記述内容（分岐文又はループ文）ではないと判定する（Ｓ４０６のＮ）。シーケンス処理部１０２は、ｉに１を加えて、ｉ＝３とする（Ｓ４２０）。
【０１１７】
上記Ｓ４０４の処理に戻り、シーケンス処理部１０２は、プログラム３行目の記述内容が特定の記述内容を示す「if(*y>0){」（分岐文）であるため、その記述内容の解析を実行し、シーケンス処理の範囲と分岐条件の選定を実行する（Ｓ４０８）。この場合、シーケンス処理の範囲は「if(){・・・}」，「else{・・・}」であり、分岐条件は「y>0」である。
【０１１８】
このシーケンス処理は、プログラムを分割するための前処理であり、プログラムが分割されることによりリコンフィギュラブル回路１２の回路規模、処理速度等のパフォーマンスが向上する場合に実行される。
【０１１９】
続いて、シーケンス処理部１０２は、特定の記述内容におけるサブプログラムに対応するＤＦＧを作成する（Ｓ４１０）。ここでは、シーケンス処理部１０２は、特定の記述内容if文における「x＝x>>2;」，「y−=3;」，「*z+=4」に対応するＤＦＧ１を作成する（図２４に示すＤＦＧ１参照）。また、シーケンス処理部１０２は、特定の記述内容else文における「x＝5;」に対応するＤＦＧ２を作成する（図２４に示すＤＦＧ２参照）。
【０１２０】
シーケンス処理部１０２は、作成したＤＦＧ１（又はＤＦＧ２）に対応するリコンフィギュラブル回路１２の実行ステップの数に応じてシーケンス処理を実行するか否かを判定する。なお、実行ステップは、本実施形態では図２に示す段毎に実行される処理である。但し、実行ステップは２以上の段毎に実行される処理であってもよい。
【０１２１】
本実施形態では、シーケンス処理部１０２は、作成したＤＦＧ１（又はＤＦＧ２）に対応するリコンフィギュラブル回路１２の実行ステップ（図２に示す段）の数が第１基準数（ここでは３）を超えている場合にはシーケンス処理を実行し、作成したＤＦＧ１（又はＤＦＧ２）に対応するリコンフィギュラブル回路１２の実行ステップの数が第１基準数を超えていない場合にはシーケンス処理を実行しない。
【０１２２】
例えば、図２４に示すＤＦＧ１のうち、「x＝x>>2;」に対応する演算は、リコンフィギュラブル回路１２の第１段目のＡＬＵ１１に対応する。またＤＦＧ１のうち、「y−=3;」に対応する演算は、リコンフィギュラブル回路１２の第１段目のＡＬＵ１２に対応する。更にＤＦＧ１のうち、「*z+=4」に対応する演算は、リコンフィギュラブル回路１２の第１段目のＡＬＵ１３に対応する。
【０１２３】
したがって、ＤＦＧ１は、リコンフィギュラブル回路１２の第１段目における各ＡＬＵに対応し、１つの実行ステップ（１段の処理）だけに対応していることとなる。また、ＤＦＧ２も上記と同様に１つの実行ステップだけに対応していることとなる。よって、シーケンス処理部１０２は、作成したＤＦＧ１又はＤＦＧ２のそれぞれに対応するリコンフィギュラブル回路１２の実行ステップの数が１であり、第１基準数（ここでは３）を超えていないため、シーケンス処理を実行しないと判定する。
【０１２４】
続いて、シーケンス処理部１０２は、ｉがｍに等しいか否かを判定する（Ｓ４２０）。ここではシーケンス処理部１０２は、ｉ＝３、ｍ＝１４であるため（Ｓ４２０のＮ）、ｉに１を加えて（Ｓ４２２）、ｉ＝４とする。プログラム４行目の記述内容は「x＝x>>2;」であり、特定の記述内容ではないため（Ｓ４０６のＮ）、ｉに１を加え、ｉ＝５とする（Ｓ４２２）。以降同様にフローを実行する。
【０１２５】
上記Ｓ４０４の処理に戻り、シーケンス処理部１０２は、ｉ＝１２ではプログラム１２行目の記述内容が特定の記述内容を示す「for(i＝0;i<100;i++){」である（S４０６のＹ）。シーケンス処理部１０２は、プログラムの構文解析を実行し、シーケンス処理の範囲と分岐条件の選定を実行する（Ｓ４０８）。この場合、シーケンス処理の範囲は「for(){・・・}」であり、分岐条件は「i<100」である。
【０１２６】
続いて、シーケンス処理部１０２は、for文に含まれている記述内容に対応するＤＦＧ３を作成する（Ｓ４１０，図２５に示すＤＦＧ３参照）。ＤＦＧ３では１００回の繰り返し処理が実行される。
【０１２７】
また、ＤＦＧ３のうちの１回目の処理における演算はリコンフィギュラブル回路１２の第１段目のＡＬＵ１１に対応し、２回目の処理における演算はリコンフィギュラブル回路１２の第２段目のＡＬＵ２１に対応する。
【０１２８】
したがって、ＤＦＧ３の１００回の繰り返し処理がリコンフィギュラブル回路１２の各段で順次実行されるため、ＤＦＧ３に対応するリコンフィギュラブル回路１２の段（繰り返し用いられる段も含む）の数は１００となり、実行ステップ数は１００となる。よって、シーケンス処理部１０２は、作成したＤＦＧ３に対応するリコンフィギュラブル回路１２の実行ステップの数が１００であり、第２基準数（ここでは１０）を超えているため、シーケンス処理を実行すると判定する（Ｓ４１４のＹ）。
【０１２９】
次に、シーケンス処理部１０２は、プログラム中に分岐条件を判定する判定演算命令を付加する（Ｓ４１６）。分岐条件が「i<100」であるため、図２６に示すように、シーケンス処理部１０２は、for文中の最後尾に判定演算命令「_SEQ_＝i<100;」を付加する。また、for文の前にｉの初期化のための「i＝0;」を付加する。
【０１３０】
そして、シーケンス処理部１０２は、シーケンス処理を実行する部分であることを示すため、for文を「do{・・・}while(_SEQ_);」と記述する（Ｓ４１８）。「do{・・・}while(_SEQ_);」は、シーケンス処理を実行する部分であることを示す「シーケンス処理指定」である。
【０１３１】
続いて、シーケンス処理部１０２は、ｉがｍに等しいか否かを判定する（Ｓ４２０）。シーケンス処理部１０２は、ｉ＝１２、ｍ＝１４であるため（Ｓ４２０のＮ）、ｉに１を加えて（Ｓ４２２）、ｉ＝１３とする。シーケンス処理部１０２は、以降同様にフローを実行し、ｉ＝１４のときｉ＝ｍと判定し（Ｓ４２０のＹ）、シーケンス処理部１０２におけるシーケンス処理を終了する。
【０１３２】
以上のシーケンス処理により、図２６に示すシーケンス指定付きプログラムが生成される。分割部１０４は、シーケンス処理指定に基づいてプログラムをサブプログラムに分割する。
【０１３３】
図２６は、図２３に示すプログラムのfor文中に判定演算命令を付加したプログラムを示す。この例では、「_SEQ_＝i<100;」が判定演算命令であり、「do{・・・}while(_SEQ_);」がシーケンス処理指定である。分割部１０４は、上述した図９に示す処理と同様に、図２６に示すシーケンス処理指定「do{・・・}while(_SEQ_);」を参照し、シーケンス処理指定が付加されていないサブプログラム（func01）とそれ以外のサブプログラム（func02）とに分割する（図２７参照）。
【０１３４】
その後、ＤＦＧ生成部１０６は、サブプログラム（func01）に対応するＤＦＧ、及びサブプログラム（func02）に対応するＤＦＧを生成する（図２８参照）。設定データ生成部５１は、生成されたＤＦＧに基づいてリコンフィギュラブル回路１２に供給するための設定データを生成する。また、フローデータ生成部１０８は、上述した図１２に示す処理と同様に、図２９に示すシーケンス指定付きプログラムと図２７に示すサブプログラムとに基づいてＤＦＧフローデータを生成する（図３０参照）。設定データ生成部５１及びフローデータ生成部１０８における詳細な処理については上述した通りであるため、ここでは省略する。
【０１３５】
上記図２２乃至図３０では、特定の記述内容（分岐文又はループ文）に対応するＤＦＧを生成し、そのＤＦＧに対応するリコンフィギュラブル回路１２の実行ステップの数に応じて、プログラムを複数のサブプログラムに分割している。
【０１３６】
このため、上記図２２乃至図３０における処理は、上記図７乃至図１４における処理よりも、必要以上にＤＦＧ数を増大させないようにすることができ、ＤＦＧに対応する設定データの記憶量を少なくすることができ、更には回路規模を小さくすることができる。
【０１３７】
さらに、上記図２２乃至図３０における処理は、必要以上にＤＦＧ数を増大させないため、リコンフィギュラブル回路１２における処理を効率的に実行させることができる。このため、上記図２２乃至図３０における処理は、リコンフィギュラブル回路１２において無駄な処理を実行させないため、消費電力を低く抑えることができる。
【０１３８】
今回開示された実施例はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【０１３９】
【図１】実施例に係る処理装置の構成図である。
【図２】リコンフィギュラブル回路の構成の一例を示す図である。
【図３】コンパイル部の構成を示す図である。
【図４】本実施例におけるＤＦＧ処理方法のフローチャートである。
【図５】ソースプログラムの一例を示す図である。
【図６】関数を展開して、一つのプログラムにまとめた形を示す図である。
【図７】シーケンス処理部の動作を示すフローチャートである。
【図８】図６に示すプログラムのif文の前に判定演算命令を付加したプログラムを示す図である。
【図９】分割部の動作を示すフローチャートである。
【図１０】図８に示すプログラムを分割して最終的に生成された複数のサブプログラムを示す図である。
【図１１】ＤＦＧ生成部により生成されたＤＦＧを示す図である。
【図１２】フローデータ生成部の動作を示すフローチャートである。
【図１３】フロー用プログラムを示す図である。
【図１４】ＤＦＧフローデータを示す図である。
【図１５】シーケンス指定付きプログラムを示す図である。
【図１６】分割部により生成される複数のサブプログラムを示す図である。
【図１７】フローデータ生成部により生成されるＤＦＧフローデータである。
【図１８】ひとつのサブプログラムに対して生成される複数のＤＦＧを示す図である。
【図１９】ＤＦＧフローデータを示す図である。
【図２０】ソースプログラムの一例を示す図である。
【図２１】シーケンス指定付きプログラムの例を示す図である。
【図２２】シーケンス処理部の動作を示すフローチャートである。
【図２３】ソースプログラムの一例を示す図である。
【図２４】サブプログラムに対応するＤＦＧを示す図である。
【図２５】サブプログラムに対応するＤＦＧを示す図である。
【図２６】判定演算命令が付加されたプログラムを示す図である。
【図２７】分割された複数のサブプログラムを示す図である。
【図２８】ＤＦＧ生成部により生成されたＤＦＧを示す図である。
【図２９】フロー用プログラムを示す図である。
【図３０】ＤＦＧフローデータを示す図である。
【符号の説明】
【０１４０】
１０…処理装置、１２…リコンフィギュラブル回路、１４…設定データ保持部、２０…シーケンサ装置、２６…集積回路装置、３０…出力データ保持部、３２…経路部、４０…記憶部、５０…コンパイル部、５１…設定データ生成部、５４…制御データ生成部、１００…プログラム解析部、１０２…シーケンス処理部、１０４…分割部、１０６…ＤＦＧ生成部、１０８…フローデータ生成部。
【図１】
2006099720.tif 000003
【図２】
2006099720.tif 000004
【図３】
2006099720.tif 000005
【図４】
2006099720.tif 000006
【図５】
2006099720.tif 000007
【図６】
2006099720.tif 000008
【図７】
2006099720.tif 000009
【図８】
2006099720.tif 000010
【図９】
2006099720.tif 000011
【図１０】
2006099720.tif 000012
【図１１】
2006099720.tif 000013
【図１２】
2006099720.tif 000014
【図１３】
2006099720.tif 000015
【図１４】
2006099720.tif 000016
【図１５】
2006099720.tif 000017
【図１６】
2006099720.tif 000018
【図１７】
2006099720.tif 000019
【図１８】
2006099720.tif 000020
【図１９】
2006099720.tif 000021
【図２０】
2006099720.tif 000022
【図２１】
2006099720.tif 000023
【図２２】
2006099720.tif 000024
【図２３】
2006099720.tif 000025
【図２４】
2006099720.tif 000026
【図２５】
2006099720.tif 000027
【図２６】
2006099720.tif 000028
【図２７】
2006099720.tif 000029
【図２８】
2006099720.tif 000030
【図２９】
2006099720.tif 000031
【図３０】
2006099720.tif 000032