(57)【要約】【課題】  ＲＴＬ回路を少ない演算器を用いて自動生成可能なループ回避機能を有する高位合成方法およびシステムを提供する。【解決手段】  演算をステップに割り当てるスケジューリング時に、演算をそのステップに割り当てることによってループができるかを判別し、ループができる場合はそのステップに割り当てないことにより回路にループが生成されることを回避する。または演算を演算器に割り当てる際に、ループが生成されるかを判別しやすくするために、データ依存のある演算同士は同時に割り当てないようにし、次にループを生成する割り当て候補を判別して割り当て候補から除外することにより、回路にループが生成されるのを防ぐ。【選択図】      図１
2006127346.tif 000002
【特許請求の範囲】
【請求項１】
動作記述からレジスタ・トランスファ・レベル（ＲＴＬ）の論理回路を自動生成するための高位合成方法において、
前記動作記述から生成された演算およびデータの依存関係に基づいて、ループを回避しながら、各演算およびデータのスケジューリングと前記演算の演算器への割当とを実行し、
前記スケジューリングおよび演算器割当の結果に基づいて前記論理回路を生成する、
ことを特徴とする高位合成方法。
【請求項２】
前記スケジューリングおよび演算器割当は、
前記スケジューリング時に前記演算をある時間ステップに割り当て可能か否かを判定し、
割り当て可能であれば、前記演算を演算器に割り当てた時にループが形成されるか否かを判定し、
ループが形成されない演算器が存在すれば、前記演算を当該時間ステップに割り当てるとともに当該演算器に割り当て、
ループが形成されない演算器が存在しなければ、前記演算を当該時間ステップに割り当てないことを特徴とする請求項１に記載の高位合成方法。
【請求項３】
前記スケジューリング時に前記演算を前記時間ステップに割り当て可能か否かは、前記時間ステップにおける当該演算の個数制限および遅延総和制限にしたがって判定されることを特徴とする請求項２に記載の高位合成方法。
【請求項４】
前記ループが形成されるか否かは、
同じ時間ステップにおいて前記演算の入力側のデータ依存が存在する演算が割当先の演算器の出力先に接続されている演算器に割り当てられているか否か、かつ、
同じ時間ステップにおいて前記演算の出力先のデータ依存が存在する演算が割当先の演算器の入力側に接続されている演算器に割り当てられているか否かに、
よって判定されることを特徴とする請求項２に記載の高位合成方法。
【請求項５】
動作記述からレジスタ・トランスファ・レベル（ＲＴＬ）の論理回路を自動生成するための高位合成方法において、
前記動作記述から生成された演算およびデータの依存関係に基づいて、各演算およびデータのスケジューリングを実行し、
前記スケジューリング結果に基づいて、同一時間ステップ内の複数の演算であって互いにデータ依存のない未割り当て演算の集合を生成し、
前記演算集合の演算が実行可能な演算器の集合を生成し、
前記演算集合および前記演算器集合に基づいて、ループを回避しながら、前記演算集合の演算と前記演算器集合の演算器との組み合わせを決定し、
前記決定された組み合わせに従って資源割り当てを実行し、その結果を用いて前記論理回路を生成する、
ことを特徴とする高位合成方法。
【請求項６】
前記組み合わせの決定は、
前記演算集合のある演算と前記演算器集合のある演算器とを仮に組み合わせたときにループが生成されるか否かを判定し、
ループが生成される場合には当該組み合わせを除外し、
前記演算集合と前記演算器集合との間のループが生成されない組み合わせのうち、最大マッチング数および最小コストを有する組み合わせを決定する、
ことを特徴とする請求項５に記載の高位合成方法。
【請求項７】
動作記述からレジスタ・トランスファ・レベル（ＲＴＬ）の論理回路を自動生成するための高位合成方法において、
前記動作記述から生成された演算およびデータの依存関係に基づいて、ループを回避しながら、各演算およびデータのスケジューリングと前記演算の演算器への割当とを実行し、
前記スケジューリング結果のみに基づいて、同一時間ステップ内の複数の演算であって互いにデータ依存のない未割り当て演算の集合を生成し、
前記演算集合の演算が実行可能な演算器の集合を生成し、
前記演算集合および前記演算器集合に基づいて、ループを回避しながら、前記演算集合の演算と前記演算器集合の演算器との組み合わせを決定し、
前記決定された組み合わせに従って資源割り当てを実行し、その結果を用いて前記論理回路を生成する、
ことを特徴とする高位合成方法。
【請求項８】
前記スケジューリングおよび演算器割当は、
前記スケジューリング時に前記演算をある時間ステップに割り当て可能か否かを判定し、
割り当て可能であれば、前記演算を演算器に割り当てた時にループが形成されるか否かを判定し、
ループが形成されない演算器が存在すれば、前記演算を当該時間ステップに割り当てるとともに当該演算器に割り当て、
ループが形成されない演算器が存在しなければ、前記演算を当該時間ステップに割り当てないことを特徴とする請求項７に記載の高位合成方法。
【請求項９】
前記組み合わせの決定は、
前記演算集合のある演算と前記演算器集合のある演算器とを仮に組み合わせたときにループが生成されるか否かを判定し、
ループが生成される場合には当該組み合わせを除外し、
前記演算集合と前記演算器集合との間のループが生成されない組み合わせのうち、最大マッチング数および最小コストを有する組み合わせを決定する、
ことを特徴とする請求項７に記載の高位合成方法。
【請求項１０】
コンピュータに、動作記述からレジスタ・トランスファ・レベル（ＲＴＬ）の論理回路を自動生成するための高位合成を実行させるためのプログラムにおいて、
前記動作記述から演算およびデータの依存関係を表すフローグラフを生成するステップと、
前記フローグラフに基づいて、ループを回避しながら、各演算およびデータのスケジューリングと前記演算の演算器への割当とを実行するステップと、
前記スケジューリングおよび演算器割当の結果に基づいて前記論理回路を生成するステップと、
を有することを特徴とする高位合成プログラム。
【請求項１１】
コンピュータに、動作記述からレジスタ・トランスファ・レベル（ＲＴＬ）の論理回路を自動生成するための高位合成を実行させるためのプログラムにおいて、
前記動作記述から演算およびデータの依存関係を表すフローグラフを生成するステップと、
前記フローグラフに基づいて、各演算およびデータのスケジューリングを実行するステップと、
前記スケジューリング結果に基づいて、同一時間ステップ内の複数の演算であって互いにデータ依存のない未割り当て演算の集合を生成するステップと、
前記演算集合の演算が実行可能な演算器の集合を生成するステップと、
前記演算集合および前記演算器集合に基づいて、ループを回避しながら、前記演算集合の演算と前記演算器集合の演算器との組み合わせを決定するステップと、
前記決定された組み合わせに従って資源割り当てを実行し、その結果を用いて前記論理回路を生成するステップと、
を有することを特徴とする高位合成プログラム。
【請求項１２】
コンピュータに、動作記述からレジスタ・トランスファ・レベル（ＲＴＬ）の論理回路を自動生成するための高位合成を実行させるためのプログラムにおいて、
前記動作記述から演算およびデータの依存関係を表すフローグラフを生成するステップと、
前記フローグラフに基づいて、ループを回避しながら、各演算およびデータのスケジューリングと前記演算の演算器への割当とを実行するステップと、
前記スケジューリング結果のみに基づいて、同一時間ステップ内の複数の演算であって互いにデータ依存のない未割り当て演算の集合を生成するステップと、
前記演算集合の演算が実行可能な演算器の集合を生成するステップと、
前記演算集合および前記演算器集合に基づいて、ループを回避しながら、前記演算集合の演算と前記演算器集合の演算器との組み合わせを決定するステップと、
前記決定された組み合わせに従って資源割り当てを実行し、その結果を用いて前記論理回路を生成するステップと、
を有することを特徴とする高位合成プログラム。
【請求項１３】
動作記述からレジスタ・トランスファ・レベル（ＲＴＬ）の論理回路を自動生成するための高位合成システムにおいて、
プログラムを格納するメモリと、前記プログラムを実行するためのコンピュータと、を有し、
前記プログラムは、
前記動作記述から演算およびデータの依存関係を表すフローグラフを生成するステップと、
前記フローグラフに基づいて、ループを回避しながら、各演算およびデータのスケジューリングと前記演算の演算器への割当とを実行するステップと、
前記スケジューリングおよび演算器割当の結果に基づいて前記論理回路を生成するステップと、
を有することを特徴とする高位合成システム。
【請求項１４】
動作記述からレジスタ・トランスファ・レベル（ＲＴＬ）の論理回路を自動生成するための高位合成システムにおいて、
プログラムを格納するメモリと、前記プログラムを実行するためのコンピュータと、を有し、
前記プログラムは、
前記動作記述から演算およびデータの依存関係を表すフローグラフを生成するステップと、
前記フローグラフに基づいて、各演算およびデータのスケジューリングを実行するステップと、
前記スケジューリング結果に基づいて、同一時間ステップ内の複数の演算であって互いにデータ依存のない未割り当て演算の集合を生成するステップと、
前記演算集合の演算が実行可能な演算器の集合を生成するステップと、
前記演算集合および前記演算器集合に基づいて、ループを回避しながら、前記演算集合の演算と前記演算器集合の演算器との組み合わせを決定するステップと、
前記決定された組み合わせに従って資源割り当てを実行し、その結果を用いて前記論理回路を生成するステップと、
を有することを特徴とする高位合成システム。
【請求項１５】
動作記述からレジスタ・トランスファ・レベル（ＲＴＬ）の論理回路を自動生成するための高位合成システムにおいて、
プログラムを格納するメモリと、前記プログラムを実行するためのコンピュータと、を有し、
前記プログラムは、
前記動作記述から演算およびデータの依存関係を表すフローグラフを生成するステップと、
前記フローグラフに基づいて、ループを回避しながら、各演算およびデータのスケジューリングと前記演算の演算器への割当とを実行するステップと、
前記スケジューリング結果のみに基づいて、同一時間ステップ内の複数の演算であって互いにデータ依存のない未割り当て演算の集合を生成するステップと、
前記演算集合の演算が実行可能な演算器の集合を生成するステップと、
前記演算集合および前記演算器集合に基づいて、ループを回避しながら、前記演算集合の演算と前記演算器集合の演算器との組み合わせを決定するステップと、
前記決定された組み合わせに従って資源割り当てを実行し、その結果を用いて前記論理回路を生成するステップと、
を有することを特徴とする高位合成システム。
【請求項１６】
動作記述からレジスタ・トランスファ・レベル（ＲＴＬ）の論理回路を自動生成するための高位合成方法において、
前記動作記述から生成された演算およびデータの依存関係に基づいて、ループを回避しながら、各演算およびデータのスケジューリングと前記演算の演算器への割当とを実行し、
前記スケジューリング結果に基づいて、同一時間ステップ内の複数の演算であって互いにデータ依存のない未割り当て演算の集合を生成し、
前記演算集合の演算が実行可能な演算器の集合を生成し、
前記演算集合および前記演算器集合に基づいて、ループを回避しながら、前記演算集合の演算と前記演算器集合の演算器との組み合わせを決定し、
前記決定された組み合わせに従って資源割り当てを実行し、その結果を用いて前記論理回路を生成する、
ことを特徴とする高位合成方法。
【請求項１７】
コンピュータに、動作記述からレジスタ・トランスファ・レベル（ＲＴＬ）の論理回路を自動生成するための高位合成を実行させるためのプログラムにおいて、
前記動作記述から演算およびデータの依存関係を表すフローグラフを生成するステップと、
前記フローグラフに基づいて、ループを回避しながら、各演算およびデータのスケジューリングと前記演算の演算器への割当とを実行するステップと、
前記スケジューリング結果に基づいて、同一時間ステップ内の複数の演算であって互いにデータ依存のない未割り当て演算の集合を生成するステップと、
前記演算集合の演算が実行可能な演算器の集合を生成するステップと、
前記演算集合および前記演算器集合に基づいて、ループを回避しながら、前記演算集合の演算と前記演算器集合の演算器との組み合わせを決定するステップと、
前記決定された組み合わせに従って資源割り当てを実行し、その結果を用いて前記論理回路を生成するステップと、
を有することを特徴とする高位合成プログラム。
【請求項１８】
動作記述からレジスタ・トランスファ・レベル（ＲＴＬ）の論理回路を自動生成するための高位合成システムにおいて、
プログラムを格納するメモリと、前記プログラムを実行するためのコンピュータと、を有し、
前記プログラムは、
前記動作記述から演算およびデータの依存関係を表すフローグラフを生成するステップと、
前記フローグラフに基づいて、ループを回避しながら、各演算およびデータのスケジューリングと前記演算の演算器への割当とを実行するステップと、
前記スケジューリング結果に基づいて、同一時間ステップ内の複数の演算であって互いにデータ依存のない未割り当て演算の集合を生成するステップと、
前記演算集合の演算が実行可能な演算器の集合を生成するステップと、
前記演算集合および前記演算器集合に基づいて、ループを回避しながら、前記演算集合の演算と前記演算器集合の演算器との組み合わせを決定するステップと、
前記決定された組み合わせに従って資源割り当てを実行し、その結果を用いて前記論理回路を生成するステップと、
を有することを特徴とする高位合成システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動作記述からレジスタ・トランスファ・レベル（ＲＴＬ）の論理回路を自動生成するための高位合成方法およびシステムに関する。
【背景技術】
【０００２】
動作記述からＲＴＬ回路を自動生成する高位合成技術の一例は、Kluwer Academic Publishersにより刊行された「HIGH-LEVEL SYNTHESIS」（非特許文献１）に記載されている。概略的に示すと、まず、入力された動作記述を解析してＣＤＦＧ（コントロール／データフローグラフ）を生成し、ＣＤＦＧにおける演算およびデータをステップと呼ばれる状態遷移マシンの状態に対応した時間に割り当てる（スケジューリング）。続いて、スケジューリングの結果に基づいて演算やデータを演算器やレジスタに割り当てる（資源割当）。そして、資源割当の結果に基づいてデータパスを生成し、各資源の入力セレクタを制御するコントローラを生成することで最終的なＲＴＬ回路を得る。
【０００３】
このような高位合成技術によれば、データ依存関係にある複数の演算を同じステップにスケジューリングすることができ、１つの演算器を複数の演算で共有することができる。すなわち、演算器やレジスタの資源が複数の演算およびデータで時分割に共有され、少ない資源を用いて動作記述の演算を実現することが可能となる。
【０００４】
この高位合成技術では、しかしながら、データパス生成処理においてレジスタを含まないループが生成されることがある。このループはどのステップでもループの一部分しか使用せず、ループ全体を使うことがない。このようなループが存在すると、論理合成時の静的遅延解析が難しくなるという問題がある。そこで、この問題の解決を目的とした技術がいくつか提案されている。
【０００５】
たとえば、特許第３３８６４２７号公報（特許文献１）には、資源割当が行われた後で検出されたループを削除する手順を有する高位合成方法が開示されている。より詳しくは、ループが検出されると、そのループを構成する演算器の演算を他の演算器へ割り当てたり、当該演算器に別の演算を割り当てたりする演算器割当の変更を行い、それによってループ数が減少するかどうかを調べる。ループ数が減少する場合には当該割当変更を採用し、減少しない場合には新たな演算器を生成して変更対象の演算器と置き換え、上記演算器割当の変更処理を繰り返す。この手順をループが無くなるまで繰り返す。
【０００６】
また、特開２００３−７６７２８号公報（特許文献２）には、ループ発生を防止する演算器アロケーション設計方法が開示されている。具体的には、スケジューリング結果に基づいて、着目演算と同一クロックサイクルに実行される演算のうち、着目演算にデータを供給する前演算と着目演算からデータを受け取る後演算とを求める。ある演算器Ａに対して演算Ｂと演算Ｃとを割り当てるとき、演算Ｂを着目演算としたときの演算Ｂの前演算または後演算に演算Ｃがある場合、あるいは、演算Ｃを着目演算としたときの演算Ｃの前演算または後演算に演算Ｂがある場合、ループが生成されると判断される。ループが生じる場合には、演算ＢおよびＣを異なる演算器に割り付ける。
【０００７】
【特許文献１】特許第３３８６４２７号公報
【特許文献２】特開２００３−７６７２８号公報
【非特許文献１】"HIGH-LEVEL SYNTHESIS"（Daniel Gajski, Nikil Dutt, Allen Wu, Steve Lin著、Kluwer Academic Publishers刊、１９９２年)
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、上記従来の高位合成技術では、ループ発生を防ごうとすると不必要な演算器を生成する可能性がある。特許文献１に記載された方法では、ループを構成する演算器の割り当て変更のみを行っているために、資源割当後に他の演算器に割当変更できない場合、ループを削除できる他の可能性を検討することなく演算器が新たに追加されてしまう。また、特許文献２に記載された方法では、複数の演算を割り当てるときに、演算の割り当て順序によって先に割り当てられた演算が邪魔となり、後から割り当てようとした演算のために新たな演算器を生成してしまう場合がある。
【０００９】
本発明の目的は、ＲＴＬ回路を少ない演算器を用いて自動生成可能なループ回避機能を有する高位合成方法およびシステムを提供することにある。
【課題を解決するための手段】
【００１０】
本発明の第１の側面によれば、動作記述から生成された演算およびデータの依存関係に基づいて、ループを回避しながら、各演算およびデータのスケジューリングと前記演算の演算器への割当とを実行し、スケジューリングおよび演算器割当の結果に基づいて前記論理回路を生成することを特徴とする。
【００１１】
本発明の一実施形態によれば、スケジューリングおよび演算器割当は、スケジューリング時に演算をある時間ステップに割り当て可能か否かを判定し、割り当て可能であれば演算を演算器に割り当てた時にループが形成されるか否かを判定し、ループが形成されない演算器が存在すれば当該演算を当該時間ステップに割り当てるとともに当該演算器に割り当て、ループが形成されない演算器が存在しなければ当該演算を当該時間ステップに割り当てない、ことにより実行される。
【００１２】
本発明の第２の側面によれば、動作記述から生成された演算およびデータの依存関係に基づいて各演算およびデータのスケジューリングを実行し、スケジューリング結果に基づいて同一時間ステップ内の複数の演算であって互いにデータ依存のない未割り当て演算の集合を生成し、演算集合の演算が実行可能な演算器の集合を生成し、演算集合および演算器集合に基づいてループを回避しながら演算集合の演算と演算器集合の演算器との組み合わせを決定し、決定された組み合わせに従って資源割り当てを実行し、その結果を用いて論理回路を生成することを特徴とする。
【００１３】
本発明の一実施形態によれば、組み合わせの決定は、演算集合のある演算と演算器集合のある演算器とを仮に組み合わせたときにループが生成されるか否かを判定し、ループが生成される場合には当該組み合わせを除外し、演算集合と演算器集合との間のループが生成されない組み合わせのうち最大マッチング数および最小コストを有する組み合わせを決定する、ことにより実行される。
【００１４】
本発明の第３の側面によれば、動作記述から生成された演算およびデータの依存関係に基づいて、ループを回避しながら、各演算およびデータのスケジューリングと演算の演算器への割当とを実行し、スケジューリング結果のみに基づいて、同一時間ステップ内の複数の演算であって互いにデータ依存のない未割り当て演算の集合を生成し、演算集合の演算が実行可能な演算器の集合を生成し、演算集合および演算器集合に基づいて、ループを回避しながら、演算集合の演算と演算器集合の演算器との組み合わせを決定し、決定された組み合わせに従って資源割り当てを実行し、その結果を用いて論理回路を生成することを特徴とする。
【発明の効果】
【００１５】
上述したように、本発明の第１の側面によれば、ループを回避しながら各演算およびデータのスケジューリングと演算の演算器への割当とを実行する。したがって、演算を時間ステップに割り当てるスケジューリング時に、演算をそのステップに割り当てることによってループができるかを判別し、ループができる場合は当該演算をそのステップに割り当てないことが可能となる。たとえば、スケジューリング時に依存関係のある２つの演算を同じステップに割り当てた場合にループができるかを判別し、ループができる場合は同じステップに割り当てないで次のステップに割り当てることが可能である。これにより、不必要な演算器を生成することなく、指定された演算器数でＲＴＬ論理回路を生成することができる。
【００１６】
本発明の第２の側面によれば、スケジューリング結果に基づいて同一時間ステップ内の複数の演算であって互いにデータ依存のない未割り当て演算の集合と、演算集合の演算が実行可能な演算器の集合とを生成し、演算集合および演算器集合に基づいてループを回避しながら演算と演算器との組み合わせを決定し、決定された組み合わせに従って資源割り当てを実行する。データ依存のない演算の集合と演算器の集合とを用いることで、ループが生成されるかを判別しやすくなる。さらに、資源割り当て段階でループを生成する割当候補を除外しているので、不必要な演算器の生成を有効に回避でき、指定された演算器数でＲＴＬ論理回路を生成することができる。
【００１７】
また、複数の演算と複数の演算器とを同時に割り当てることができるために、演算を１つずつ順次演算器に割り当てる従来の方法で問題となった先行割り当ての弊害を少なくすることができる。
【００１８】
本発明の第３の側面によれば、ループ回避機能付きスケジューリングで演算器を制限しながらスケジューリングを行った後、スケジューリング結果のみを用いて、再度、複数の演算を複数の演算器にループを回避しながら割り当てることにより、面積のさらなる改善が得られる。
【発明を実施するための最良の形態】
【００１９】
以下、本発明の実施形態について説明する。なお、図面に明示されてはいないが、本発明による高位合成方法は、コンピュータプログラムにより記述可能であり、そのプログラムをコンピュータ上で実行することにより実現することができる。したがって、プログラムを格納するメモリとそのプログラムを実行するコンピュータとを有するシステムであれば、本発明による高位合成方法を実装可能である。
【００２０】
１．第１実施形態
図１は本発明の第１実施形態による高位合成方法の概略的流れを示すフローチャートである。まず動作記述１を入力し、動作記述を解析してＣＤＦＧ（コントロール／データフローグラフ）を生成する（Ｓ１）。続いて、ループ回避機能付きスケジューリングおよび演算器割り当てを実行し（Ｓ２）、その結果を基に、隣接するステップの境であるクロック境界を横切るデータ枝をレジスタに割り当てるレジスタ割当を行なう（Ｓ３）。そして、資源割当の結果に基づいてデータパスを生成し（Ｓ４）、各資源の入力セレクタを制御するコントローラを生成することで最終的なＲＴＬ回路を得る（Ｓ５）。
【００２１】
以下、説明の複雑化を避けるために簡単な演算を一例として取り上げ、本実施形態による高位合成方法の各ステップＳ１〜Ｓ５を詳細に説明する。
【００２２】
（ＣＤＦＧ生成）
図２（Ａ）は動作記述の一例を示す図であり、（Ｂ）はその動作記述を変換して生成されたコントロール／データフローグラフＣＤＦＧを示す図である。
【００２３】
まず、ＣＤＦＧ生成Ｓ１では、図２（Ａ）に示す動作記述を解析し、図２（Ｂ）に示すデータおよび演算の依存関係を表現するＣＤＦＧに変換する。ＣＤＦＧは、データおよび演算を節点、それらのデータ依存を有向枝で表現するグラフである。図２（Ａ）で使われているデータａ，ｂ，ｃ，ｄ，ｅ，ｘ，ｙおよび１は、それぞれ図２（Ｂ）のＣＤＦＧでは四角い節点ｖ７〜ｖ１５で表される。図２（Ａ）で行われている演算(ここでは、２つの加算、４つの減算)はそれぞれ図２（Ｂ）では丸い節点ｎ１〜ｎ６で表され、データまたは演算のデータ依存はそれぞれ図２（Ｂ）の有向枝ｅ１６〜ｅ２８で表されている。
【００２４】
（ループ回避機能付きスケジューリングおよび演算器割当）
ＣＤＦＧが生成されると、ループ回避機能付きスケジューリングおよび演算器割当Ｓ２が実行される。スケジューリングでは、各演算の遅延時間を考慮して、同じステップに割り当てられたデータ依存のある演算の遅延の総和がクロック周期に収まるように各演算をステップに割り当てる必要がある。また同じステップである種類の演算を、指定した個数以下の演算器に割り当てるように制限をかける場合もある。
【００２５】
１．１）スケジューリングの全体的フロー
図３は本実施形態において演算をステップに割り当てる手順の一例を示すフローチャートであり、図４は図３における割当可否判定Ｓ２２の一例を示すフローチャートである。演算をステップに割り当てる手順は、ステップｓを一つずつ増やしながら全ての演算がステップに割り当てられるまで繰り返される。
【００２６】
まずステップｓを１に設定し（Ｓ１８）、ステップに割り当てられていない演算が入力側に存在しない演算を割り当て候補グループに追加する（Ｓ１９）。続いて、この割り当て候補グループに演算が存在するか否かを判断し（Ｓ２０）、存在すれば（Ｓ２０の「ある」）、出力までの演算の遅延の総和などの評価値に基づいて演算を一つずつ選び、割り当て候補グループから取り除く（Ｓ２１）。なお、評価値は、演算器の大きさや遅延、出力までの距離などから求められる。
【００２７】
続いて、選ばれた演算がそのステップに割り当てられるか否かおよび演算の演算器への割り当ての可否を、後述するように演算の遅延、演算器の数およびループ形成の有無に従って判断する（Ｓ２２）。割り当て不可の時は（Ｓ２２のＮＯ）、Ｓ２０に戻る。割り当て可能であれば（Ｓ２２のＹＥＳ）、そのステップに演算を割り当て（Ｓ２３）、その演算とデータ依存のある次の演算であって当該ステップに未割り当ての演算が入力側に存在しないものを割り当て候補グループに追加し（Ｓ２４）、Ｓ２０に戻る。なお、割り当て可能であれば（Ｓ２２のＹＥＳ）、後述するように演算器割り当ても実行される。上記Ｓ２０〜Ｓ２４は、割り当て候補グループに演算がなくなるまで繰り返される。
【００２８】
割り当て候補グループに演算がなくなると（Ｓ２０の「ない」）、全ての演算が当該ステップに割り当てられたか否かを判定し（Ｓ２５）、未割り当ての演算が残っていれば（Ｓ２５のＮＯ）ステップｓを＋１して（Ｓ２６）、Ｓ１９に戻る。このようにしてＳ１９〜Ｓ２６が繰り返され、全ての演算がステップに割り当てられると（Ｓ２５のＹＥＳ）、スケジューリングおよび演算器割り当てを終了する。
【００２９】
１．２）ループ回避機能付き割り当て可否判定
図４は、図３における割り当て可否判定手順（Ｓ２２）の詳細を示すフローチャートである。先ず、同種類の演算の個数が演算器の個数制限を超えているか否かを判断し（Ｓ２７）、超えていなければ、演算器の遅延に基づいて同じステップに割り当てられているデータ依存のある演算の遅延の総和がクロック周期を超えているか否かを判断する（Ｓ２８）。超えていなければ、続いて、仮に演算を演算器に割り当てたときにループができるか否かを判別する（Ｓ２９）。すなわち、割り当てができる全ての演算器でループが発生する場合はその演算はこのステップに割り当てない（Ｓ３０）、割り当てができる演算器でループが発生しない演算器が１つでもある場合はその演算はこのステップに割り当てられる（Ｓ３１）と判断する。
【００３０】
演算を演算器に割り当てたときにループができない場合（Ｓ２９の「ある」）、割り当てができる演算器であってループが発生しないものの中から面積などの割り当てコストを考慮して一つの演算器を選択してその演算を割り当て、次の演算の割り当て時のループ判別のために演算器の接続状態を更新する（Ｓ３２）。演算器の接続状態を更新するとは、具体的には、その演算を割り当てた演算器と、その割り当てた演算と同じステップに割り当てられた依存関係のある演算が割り当てられた演算器と、の間に接続状態があることを表す線を追加することである。
【００３１】
同種類の演算の個数が演算器の個数制限を超えている場合（Ｓ２７の「超える」）、演算器の遅延に基づいて同じステップに割り当てられているデータ依存のある演算の遅延の総和がクロック周期を超えている場合（Ｓ２８の「超える」）、あるいは、ループができない演算器がない場合、すなわちループが形成される場合（Ｓ２９の「ない」）、当該ステップへの当該演算の割り当ては不可であると判断される（Ｓ３０）。
【００３２】
このように、割り当て可否判定Ｓ２２では、演算の資源割り当てがスケジューリング時に行われる。
【００３３】
１．３）ループ判定方法
図５は本実施形態で使用されるループ判定法を説明するためのフローグラフの一例を示す模式図である。図５において、ＣＤＦＧ上の演算(y1）を演算器(x1)に割り当てたときにループができる条件は次の通りである：
・ＣＤＦＧ上の演算(y1)の入力側のデータ依存が存在する同じステップの演算(y3,y4)が割当先の演算器(x1)の出力先に接続されている演算器グループＧ２のどこかに割り当てられている；あるいは
・演算(y1)の出力先のデータ依存が存在する同じステップの演算(y2,y5)が割当先の演算器(x1)の入力側に接続されている演算器グループＧ１のどれかに割り当てられている。
【００３４】
スケジューリングでは、入力側の演算しか割り当てられていないので、入力側の演算(y3,y4)が割当先の演算器(x1)の出力先に接続されている演算器グループＧ２のどこかに割り当てられているか否かを調べて判別する。このようなループ判定方法は、計算量は比較的大きくなるが必要メモリが少なくなるという利点がある。
【００３５】
なお、これ以外のループ判定方法を用いることもできる。たとえば、特許文献２に記載されているような着目演算の前演算と後演算とからループ判定を行ってもよい。この方法では、必要メモリは大きくなるが計算量は比較的少なくなる。
【００３６】
１．４）スケジューリングおよび演算器割当の具体例
次に、図６および図７を参照しながら、スケジューリングおよび演算器割当の具体例を説明する。その際、必要に応じて図３および図４も参照する。
【００３７】
図６および図７は、本実施形態におけるスケジューリングおよび演算器割当を説明するためのフローグラフおよび接続状態グラフの途中状態を示す模式図である。ここでは、加算器の数を１、減算器の数を２、クロック周期を演算器２つ分の遅延が収まる値とする制限をかけた場合のスケジューリングおよび演算器割当を示す。
【００３８】
まず、ステップに割り当てられていない演算が入力側に存在しない演算である減算(n1)、減算(n3)が割り当て候補グループに追加される（Ｓ１９）。
【００３９】
次に割り当て候補グループから一つ演算を評価値に従って選択する。評価値は、演算器の大きさや遅延、出力までの距離などから求められるが、ここでは出力までの距離を用いる。どちらもそれぞれに関連する出力ｘおよびｙまでの距離は同じなので、評価値は同じになる。ここでは減算(n1)が選ばれたとする（Ｓ２１）。そして、減算(n1)をステップｓ＝１に割り当てられるか否かを次のようにして判断する（Ｓ２２）。
【００４０】
まず、減算(n1)は、演算器の制約に関しては減算器数＝２であるから個数制限は満たしている（Ｓ２７）。また、減算器１個であるから遅延総和はクロック周期に収まる（Ｓ２８）。さらに、減算(n1)を減算器ｍ１に割り当ててもループは生じない（Ｓ２９）。よって、ステップｓ＝１に割り当てることができると判断され（Ｓ３１）、減算(n1)が減算器ｍ１に割り当てられ（Ｓ３２）、ステップｓ＝１に割り当てられる（Ｓ２３）。
【００４１】
続いて、減算(n1)にデータ依存する次の演算であってその入力側にステップに割り当てられていない演算が存在しない演算、すなわち加算(n2)を割り当て候補グループに追加する（Ｓ２４）。したがって、割り当て候補グループに現時点で残存するのは減算(n3)と加算(n2)である。
【００４２】
加算(n2)と減算(n3)とでは、それぞれの出力ｘおよびｙまでの距離が減算(n3)の方が遠いので減算(n3)が選ばれ（Ｓ２１）、上述した減算(n1)と同様にステップに割り当て可能か否かが判断される（Ｓ２２）。減算は２個まで同じステップに割り当てることができ、遅延の総和もクロック周期内であり、また減算(n3)を減算器ｍ２に割り当ててもループは形成されないので、減算(n3)は減算器ｍ２に割り当てられ（Ｓ３２）、ステップｓ＝１に割り当てられる（Ｓ２３）。そして、次の演算である加算(n5)が割り当て候補グループに追加される（Ｓ２４）。
【００４３】
次に、加算(n2)と加算(n5)とではどちらも同じ評価値であるが、ここでは加算(n2)が選ばれ（Ｓ２１）、加算(n2)がステップｓ＝１に割り当て可能か否かを判断する（Ｓ２２）。個数制限は満たし（Ｓ２７）、減算(n1)および加算(n2)の２つ分であるからクロック周期が演算器２つ分の遅延が収まる（Ｓ２８）。また加算(n2)を加算器ｍ３に割り当ててもループは形成されないので、加算(n2)は加算器ｍ３に割り当てられ、減算器ｍ１の出力から加算機ｍ３の入力へ接続を表示する線ｅ２９が追加される（Ｓ３２）。同時に、加算(n2)はステップｓ＝１に割り当てられ（Ｓ２３）、次の演算である減算(n4)が割り当て候補グループに追加される（Ｓ２４）。
【００４４】
続いて、評価値に基づき、加算(n5)が選ばれる（Ｓ２１）。しかしながら、すでにステップｓ＝１では加算が１つ割り当てられているので、加算(n5)はステップｓ＝１に割り当てることができない（Ｓ３０）。したがって、減算(n4)が選ばれる（Ｓ２１）。
【００４５】
減算(n4)に関しては、ステップｓ＝１ですでに減算を２個使っているために割り当てることができない（Ｓ３０）。この段階で、割り当て候補グループに演算がなくなっているため（Ｓ２０）、ステップｓを１つ増やし（Ｓ２６）、ステップｓ＝２にして同様にスケジューリングおよび演算器割当を行い、加算(n5)をステップｓ＝２に割り当て、加算器ｍ３に割り当てる。
【００４６】
こうして、図６に示すように、減算(n1)、加算(n2)および減算(n3)はステップｓ＝１に、加算(n5)はステップｓ＝２にそれぞれ割り当てることができる。この段階で、割り当て候補グループには減算(n4)と減算(n6)とが存在する。そこで、減算(n6)が選択された場合の割り当て可否の判断は次のようになる。
【００４７】
まず減算はステップｓ＝２に割り当てられていないので、減算器２個の個数制限を越えていないことが確認され（Ｓ２７）、次に同じステップのデータ依存のある演算の遅延の総和は演算器２つ分なので遅延の総和もクロック周期制限を超えていないことを確認される（Ｓ２８）。最後に、それぞれの減算器ｍ１、ｍ２に割り当て可能か否かの判断と、仮に割り当てた時にループが発生するか否かの判断を行う（Ｓ２９）。
【００４８】
まず、減算器ｍ１、ｍ２にはステップｓ＝２ではまだ演算が割り当てられていないので減算(n6)を割り当てることができる。減算(n6)を仮に減算器ｍ１に割り当てると、減算(n6)の入力側でデータ依存がある同じステップの加算(n5)が加算器ｍ３に割り当てられており、この加算器ｍ３は減算器ｍ１の出力先に接続されているために、ループが発生すると判断される。
【００４９】
他方、減算(n6)を仮に減算器ｍ２に割り当てた時は、減算器ｍ２には出力先に何も演算器が接続されていないので、ループは発生しないと判断される。割り当て可能でループが発生しない演算器が存在するから、減算(n6)はステップｓ＝２に割り当られ、減算(n6)は割り当て可能でループが発生しない減算器ｍ２に割り当てが決定される。そして、図７に示すように、同じステップｓ＝２で依存関係のある加算(n5)が割り当てられた加算器ｍ３から減算(n6)を割り当てた減算器ｍ２に接続を示す枝を接続する。以下、同様の手順で、最後の減算(n4)の割当が行われる。
【００５０】
（レジスタ割当）
上述したようにスケジューリングと演算器割当が終了すると、１つのデータにつき１つの入力ピンまたは出力ピンを生成して割り当て、続いて、クロック境界を横切る有効枝を別途レジスタに割り当てる。違うクロック境界を横切る有効枝同士はレジスタを共有することができる。
【００５１】
図８は本実施形態におけるレジスタ割当の一例を示すフローグラフである。ここでは、レジスタｒ１に枝ｅ１６、ｅ２２、ｅ２６が割り当てられ、レジスタｒ２に枝ｅ１７、ｅ２４が、レジスタｒ３に枝ｅ１７、ｅ２４が、レジスタｒ４に枝ｅ２３、ｅ２８がそれぞれ割り当てられている。
【００５２】
以上述べたスケジューリングおよび演算器割当Ｓ２とレジスタ割当Ｓ３とにより、資源割り当てが完了する。
【００５３】
（データパス生成）
資源割当の次にはデータパス生成Ｓ４を行う。データパス生成とはＣＤＦＧの有向枝に対応した配線を生成し、演算器またはレジスタにマルチプレクサを用いて選択的に接続する処理である。
【００５４】
図９は上述した資源割当に基づいてデータパス生成した回路を示す回路図である。図８のレジスタｒ１に割り当てられた枝ｅ１６、ｅ２２、ｅ２６から、このレジスタｒ１には、枝ｅ１６の入力元であるデータａ（ｖ７）に対応するピンａ(p1)からの配線(w1)と、枝ｅ２２の入力元である減算(n3)に対応しかつ枝ｅ２６の入力元である減算(n4)にも対応する減算器ｍ２からの配線(w2)と、がマルチプレクサｘ１を通して接続される。全てのレジスタおよび演算器において同様の作業を行うことで各演算器および各レジスタに必要であればマルチプレクサを用いて配線が接続される。
【００５５】
（コントローラ生成）
データパス生成の次にはコントローラ生成Ｓ５を行う。コントローラ生成とは、データパス生成で生成されたマルチプレクサの選択制御信号を生成する処理である。
【００５６】
図１０は、図９にて生成された回路に対してコントローラ生成を行った例を示すブロック図である。コントローラｃ１は７つのマルチプレクサｘ１〜ｘ７を制御する。
【００５７】
２．第２実施形態
図１１は本発明の第２実施形態による高位合成方法の概略的流れを示すフローチャートである。まず動作記述１を入力し、動作記述を解析してＣＤＦＧ（コントロール／データフローグラフ）を生成する（Ｓ１）。続いて、スケジューリングを実行し（Ｓ１０）、その結果を基に、ループ回避機能付き資源割り当てを実行する（Ｓ１１）。そして、資源割当の結果に基づいてデータパスを生成し（Ｓ４）、各資源の入力セレクタを制御するコントローラを生成することで最終的なＲＴＬ回路を得る（Ｓ５）。
【００５８】
本実施形態による高位合成方法のＳ１、Ｓ４およびＳ５は第１実施形態と同じであるから説明は省略し、第１実施形態と異なるスケジューリングＳ１０およびループ回避機能付き資源割当Ｓ１１について、具体例を示しながら詳細に説明する。
【００５９】
（スケジューリング）
本実施形態におけるスケジューリングＳ１０は、基本的には通常のスケジューリング手順を採用し、図３に示す手順に従って実行される。ただし、割当可否判定Ｓ２２では、予め定められた演算の遅延総和および個数の制限に従って、選ばれた演算がそのステップに割り当てられるか否かを判断する（Ｓ２２）。第１実施形態のような演算器の割当はスケジューリング時には行われない。その他の動作は既に説明したとおりであり、ステップｓを一つずつ増やしながら全ての演算がステップに割り当てられるまで繰り返される（図３のＳ１９〜Ｓ２６参照）。
【００６０】
（ループ回避機能付き資源割当）
２．１）全体的フロー
図１２は本発明の第２実施形態におけるループ回避機能付き資源割当の手順を示すフローチャートである。本実施形態の資源割当手順は、いくつかの演算を同時に割り当てる手順を含み、全ての演算を演算器に割り当てるまで繰り返される。
【００６１】
まず、未割り当て演算があるか否かを調べ（Ｓ１０１）、割り当てていない演算がない場合は終了し、割り当てていない演算がある場合は、割り当てていない演算から適当に演算を１つ選択し割当演算リストに追加する（Ｓ１０２）。
【００６２】
続いて、選択された演算と同じステップにスケジューリングされた同じ種類の演算から、既に割当演算リストに入っている演算とデータ依存がない演算を１つずつ選択し、割当演算リストに追加する（Ｓ１０３）。そして、割当演算リストに登録された演算を実行可能な演算器を集め、割当先の演算器リストを作る（Ｓ１０４）。
【００６３】
次に、割当演算リストの演算を割当先演算器リストの演算器に仮に割り当て、ループ生成の有無を調べることで、二部グラフを生成する（Ｓ１０５）。すなわち、演算と演算器との仮の割当により増加する面積や遅延などから割当コストを求めるとともに、ある演算をある演算器に割り当てた時にループが生成されるかどうかを判定し、もしループが生成される場合には、当該演算と演算器との組み合わせを二部グラフの割当候補から除外する。具体的には、ループを生成する演算に対応する節点から演算器に対応する節点に枝をはらないように二部グラフを生成する。
【００６４】
そして、二部グラフの最大マッチング数最小重みマッチングを行い、演算と演算器との割当を決定し（Ｓ１０６）、演算を演算器に割り当てる（Ｓ１０７）。演算を演算器に割り当てることで演算器間の入出力が接続される場合には、その接続状態を示す枝を当該演算器間に追加する（Ｓ１０８）。
【００６５】
２．２）具体例
図１３は、本実施形態における資源割当を説明するためのフローグラフおよび接続状態グラフの途中状態を示す模式図、図１４は本実施形態における二部グラフ生成を説明するための模式図、図１５は、本実施形態における資源割当により得られたフローグラフおよび接続状態グラフを示す模式図である。ここでは、図１３の右側に図示されたスケジューリング済みＣＤＦＧを用いて、本実施形態による演算の演算器への割当の一例を具体的に説明する。
【００６６】
まず、６つの演算(n1)-(n6)から減算(n1)を選び、割当演算リストに追加する（Ｓ１０２）。そして、当該減算(n1)と同じステップにスケジューリングされた同じ種類の演算である減算(n3)に着目する。スケジューリング済みＣＤＦＧから分かるように、減算(n3)はすでに選ばれている減算(n1)とデータ依存関係にないので、減算(n3)は割当演算リストに追加される（Ｓ１０３）。
【００６７】
続いて、割当演算リストに登録された減算(n1)および(n3)を実現可能な減算器ｍ１およびｍ２を選び、割当先演算器リストを生成する（Ｓ１０４）。
【００６８】
そして、図１４（Ａ）に示すように、割当演算リストにある演算を割当先演算器リストにある演算器に割り当てた時のそれぞれのコストを計算して二部グラフを生成する（Ｓ１０５）。この時、それぞれの演算をそれぞれの演算器に割り当てた時にループが生成されるかを判定する。ループ生成の判定は図５で説明した方法等を用いることができる。
【００６９】
図１３に示すＣＤＦＧでは、演算(n1)および(n3)を演算器ｍ１およびｍ２のどちらに割り当ててもループが生成されないので、そのまま枝を生成して図１４（Ａ）に示す二部グラフを生成する。そして、このニ部グラフの最大マッチング数最小重みマッチング問題を解くと（Ｓ１０６）、減算(n1)は減算器ｍ１に、減算(n3)は演算器ｍ２にそれぞれマッチングされる解が得られ、それに従って図１４（Ｂ）に示すように演算を演算器に割り当てる（Ｓ１０７）。
【００７０】
同様の処理を加算(n2)対して行うことで加算(n2)を加算器ｍ３に割り当て、加算(n5)に対して行うことで加算(n5)を加算器ｍ３に割り当てる。この資源割当の途中の状態が図１３に示されている。このとき、同じステップでデータ依存関係のある減算(n1)と加算(n2)をそれぞれ減算器ｍ１と加算器ｍ３にそれぞれ割り当てたことで、減算器ｍ１から加算器ｍ３へのデータ依存を表す有向枝ｅ３２が接続される（Ｓ１０８）。
【００７１】
次に減算(n4)に対して割り当てを行うために、減算(n4)を割当演算リストに追加する（Ｓ１０２）。続いて、減算(n4)と同じステップにある同じ種類の演算である減算(n6)に着目する。減算(n6)はすでに選ばれている減算(n4)とデータ依存の関係にないので割当演算のリストに追加する（Ｓ１０３）。次に減算(n4)および(n6)が実現可能な演算器である減算器ｍ１およびｍ２を集めて割当先演算器のリストを作る（Ｓ１０４）。
【００７２】
そして、割当演算リストにあるそれぞれの演算を割当先演算器リストにある演算器に割り当てた時のコストを計算して二部グラフを生成する。その際、それぞれの演算をそれぞれの演算器に割り当てた時にループが生成されるかを判定する。
【００７３】
この場合、減算(n6)を減算器ｍ１に割り当てるとループが生成される。すなわち、減算(n6)と同じステップにおいて、減算(n6)の入力側でデータ依存のある加算(n5)はすでに加算器ｍ３に割り当てられており、この加算機ｍ３の入力は減算器ｍ１の出力に接続されている。したがって、減算(n6)を減算器ｍ１に割り当てるとループが生成されることが判明する。そこで、減算(n6)と減算器ｍ１の組み合わせは、二部グラフの割当候補から除外され、図１４（Ｃ）に示すように減算(n6)から減算器ｍ１への枝は生成されない。
【００７４】
この二部グラフの最大マッチング数最小重みマッチング問題を解くことで（Ｓ１０６）、図１４（Ｄ）に示すように減算(n5)と演算器ｍ１のマッチング、減算(n6)と減算器ｍ２のマッチングが得られる（Ｓ１０７）。それに従って演算を演算器に割り当て、加算器ｍ３の出力を減算器ｍ２の入力に接続することで（Ｓ１０８）、図１５に示す割り当て結果を得る。
【００７５】
図１６は、図１５に示す資源割当結果からデータパス生成した回路図である。このように資源割り当てをすることによって加算器を複製しなくてもループのない回路を得ることができる。
【００７６】
３．第３実施形態
本発明による高位合成方法では、上述した第１実施形態のループ回避機能付きスケジューリングおよび演算器割当（Ｓ２）と、第２実施形態のループ回避機能付き資源割当（Ｓ１１）と、を組み合わせることも可能である。
【００７７】
図１７は本発明の第３実施形態による高位合成方法の概略的流れを示すフローチャートである。まず動作記述１を入力し、動作記述を解析してＣＤＦＧ（コントロール／データフローグラフ）を生成する（Ｓ１）。続いて、ＣＤＦＧの各演算およびデータのスケジューリングを第１実施形態と同様にループを回避しながら行う（Ｓ２）。そして、ループを回避しながらスケジューリングした時に決定された演算器割当を削除した後（Ｓ１２）、再度、第２実施形態の資源割当によりループを回避しながら演算器割当を行う（Ｓ１１）。以下、データパス生成（Ｓ４）およびコントローラ生成（Ｓ５）を行い、最終的にＲＴＬ回路２を生成する。
【００７８】
このようにループ回避機能付きスケジューリングＳ２で演算器を制限しながらスケジューリングを行った後、それにより決定された演算器割当を削除し、再度、複数の演算を複数の演算器にループを回避しながら割り当てる資源割当Ｓ１１を実行することにより、面積のさらなる改善が得られる。
【図面の簡単な説明】
【００７９】
【図１】本発明の第１実施形態による高位合成方法を概略的に示すフローチャートである。
【図２】（Ａ）は動作記述の一例を示す図であり、（Ｂ）はその動作記述を変換して生成されたコントロール／データフローグラフＣＤＦＧを示す図である。
【図３】本実施形態によるループ回避機能付きスケジューリング手順を示すフローチャートである。
【図４】図３における演算割当可否判定の詳細を示すフローチャートである。
【図５】本実施形態で使用されるループ判定法を説明するためのフローグラフの一例を示す模式図である。
【図６】本実施形態におけるスケジューリングおよび演算器割当を説明するためのフローグラフおよび接続状態グラフの途中状態を示す模式図である。
【図７】図６に示すフローグラフおよび接続状態グラフの次の状態を示す模式図である。
【図８】本実施形態におけるレジスタ割当の一例を示すフローグラフである。
【図９】上述した資源割当に基づいてデータパス生成した回路を示す回路図である。
【図１０】図９にて生成された回路に対してコントローラ生成を行った例を示すブロック図である。
【図１１】本発明の第２実施形態による高位合成方法の概略的流れを示すフローチャートである。
【図１２】本実施形態によるループ回避機能付き資源割当手順を示すフローチャートである。
【図１３】本実施形態における資源割当を説明するためのフローグラフおよび接続状態グラフの途中状態を示す模式図である。
【図１４】本実施形態における二部グラフ生成を説明するための模式図である。
【図１５】本実施形態における資源割当により得られたフローグラフおよび接続状態グラフを示す模式図である。
【図１６】図１５に示す資源割当結果からデータパス生成した回路図である。
【図１７】本発明の第３実施形態による高位合成方法の概略的流れを示すフローチャートである。
【符号の説明】
【００８０】
Ｓ２  ループ回避機能付きスケジューリングおよび演算器割当
Ｓ３  レジスタ割当
Ｓ１１  ループ回避機能付き資源割当
【図１】
2006127346.tif 000003
【図２】
2006127346.tif 000004
【図３】
2006127346.tif 000005
【図４】
2006127346.tif 000006
【図５】
2006127346.tif 000007
【図６】
2006127346.tif 000008
【図７】
2006127346.tif 000009
【図８】
2006127346.tif 000010
【図９】
2006127346.tif 000011
【図１０】
2006127346.tif 000012
【図１１】
2006127346.tif 000013
【図１２】
2006127346.tif 000014
【図１３】
2006127346.tif 000015
【図１４】
2006127346.tif 000016
【図１５】
2006127346.tif 000017
【図１６】
2006127346.tif 000018
【図１７】
2006127346.tif 000019