(57)【要約】【課題】  多重ループ処理を含む動作記述に基づき動作合成される回路の動作速度を向上可能な動作合成装置を提供する。【解決手段】  内部ループ処理を展開せずに、内部ループ処理を包含する外部ループ処理を含む動作記述に記述された複数の演算の実行順序を設定したＣＤＦＧを作成するＣＤＦＧ作成部１１と、ＣＤＦＧに基づき、複数の演算をそれぞれ実行するステップを決定するスケジューリングを行うスケジューリング部１３と、スケジューリングの結果に基づき、外部ループ処理を実現する第１パイプライン処理及び内部ループ処理を実現する第２パイプライン処理をそれぞれ複数のステージに分割し、複数のステージ間で受け渡されるデータをそれぞれ保持する複数のパイプラインレジスタを外部ループ処理及び内部ループ処理に割り付ける割り付け部１４とを備える。【選択図】      図１
2006350849.tif 000002
【特許請求の範囲】
【請求項１】
内部ループ処理を展開せずに、前記内部ループ処理を包含する外部ループ処理を含む動作記述に記述された複数の演算の実行順序を設定したコントロールデータフローグラフを作成するコントロールデータフローグラフ作成部と、
前記コントロールデータフローグラフに基づき、前記複数の演算をそれぞれ実行するステップを決定するスケジューリングを行うスケジューリング部と、
前記スケジューリングの結果に基づき、前記外部ループ処理を実現する第１パイプライン処理及び前記内部ループ処理を実現する第２パイプライン処理をそれぞれ複数のステージに分割し、前記複数のステージ間で受け渡されるデータをそれぞれ保持する複数のパイプラインレジスタを前記外部ループ処理及び前記内部ループ処理に割り付ける割り付け部
とを備えることを特徴とする動作合成装置。  
【請求項２】
前記割り付け部は、前記外部ループ処理中に呼び出される関数による処理を前記複数のステージ中の１のステージ内で実行するように前記第１パイプライン処理を分割することを特徴とする請求項１に記載の動作合成装置。
【請求項３】
前記第１パイプライン処理及び前記第２パイプライン処理をそれぞれ制御する回路を生成する制御回路生成部を更に備えることを特徴とする請求項１又は２に記載の動作合成装置。
【請求項４】
前記第１パイプライン処理及び前記第２パイプライン処理毎に設定されるパイプラインピッチ制約に基づき、前記割り付け部は前記第１パイプライン処理及び前記第２パイプライン処理を前記複数のステージにそれぞれ分割することを特徴とする請求項１乃至３のいずれか１項に記載の動作合成装置。  
【請求項５】
コントロールデータフローグラフ作成部、スケジューリング部及び割り付け部を中央演算処理装置に備える動作合成装置において、  
前記コントロールデータフローグラフ作成部が、内部ループ処理を包含する外部ループ処理を含む動作記述を動作記述記憶領域から読み出し、前記内部ループ処理を展開せずに、前記動作記述に記述された複数の演算の実行順序を設定したコントロールデータフローグラフを作成するステップと、
前記スケジューリング部が、前記コントロールデータフローグラフに基づき、前記複数の演算をそれぞれ実行するステップを決定するスケジューリングを行い、該スケジューリングの結果をスケジュール記憶領域に格納するステップと、
前記割り付け部が、前記スケジュール記憶領域から読み出した前記スケジューリングの結果に基づき、前記外部ループ処理を実現する第１パイプライン処理及び前記内部ループ処理を実現する第２パイプライン処理をそれぞれ複数のステージに分割するステップと、
前記割り付け部が、前記複数のステージ間で受け渡されるデータをそれぞれ保持する複数のパイプラインレジスタを前記外部ループ処理及び前記内部ループ処理に割り付けるステップ
とを含むことを特徴とする自動動作合成方法。  
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動作合成技術に係り、特にループ処理を含む動作記述の動作合成装置及び自動動作合成方法に関する。
【背景技術】
【０００２】
動作合成装置はコンピュータシステムにより構成され、以下に説明する方法によって動作記述からレジスタ転送レベル（ＲＴＬ）のハードウェア記述（以下において、「ＲＴＬ記述」という。）を合成する。即ち、先ず回路動作を記述した動作記述に基づき、コントロール・データフローグラフ（ＣＤＦＧ）が作成される。「ＣＤＦＧ」は、動作記述に記述された回路動作を行うために必要な演算の実行やデータ参照の順序を設定したグラフである。そして、ＣＤＦＧ中の演算を実行するステップが決定され、更にＣＤＦＧ中の演算を行う演算器及びデータを格納するレジスタが決定される。その後、データパス、及び有限状態機械（ステートマシン）等の制御回路が生成されて、ＲＴＬ記述が合成される。
【０００３】
動作記述に記述されたループ処理のループ回数が多い場合には、ループ内の演算が実行される回数が多くなる。そのため、合成された回路においてループ処理に要する時間が増大する。したがって、高速動作する回路を合成するためには、ループ処理の高速化が必要である。
【０００４】
一般に、ループ処理はパイプライン処理として実行される。したがって、ループ処理を高速化するために、パイプライン処理を高速に実行するＲＴＬ記述を合成する必要がある。
【０００５】
パイプライン処理を含むＲＴＬ記述を合成する方法には、例えば、ループ処理の１回毎の処理をパイプライン処理の各ステージ（以下において、単に「ステージ」という。）にそれぞれ割り付け、各ステージの処理を制御する制御部を設けたＣＤＦＧを生成してパイプライン回路を合成する方法がある（例えば、特許文献１参照。）。しかし、上記の方法には、多重ループ処理が記述された動作記述に対する動作合成方法については開示されていない。
【０００６】
「多重ループ処理」とは、ループ処理中に別のループ処理を行うことである。ループ処理中に実行される別のループ処理を、以下において「内部ループ処理」という。又、内部ループ処理を包含するループ処理を「外部ループ処理」という。先行技術では、内部ループ処理を展開してから、外部ループ処理を実行するパイプライン回路を合成する（例えば、非特許文献１参照。）。つまり、内部ループ処理内の演算は、パイプライン処理によって実行されない。そのため、パイプライン処理の１ステージの処理に要するサイクル（パイプラインピッチ）が増大する。その結果、多重ループ処理を含む動作記述から動作合成された回路の動作速度が低下する問題があった。
【特許文献１】特開２００４−３２６４６３号公報
【非特許文献１】エム・べインハルト（M. Weinhardt）著、「パイプライン・シンセシス・アンド・オプティミゼイション・フォー・レコンフィギュラブル・カスタム・コンピューティング・マシンズ(Pipeline Synthesis and Optimization for Reconfigurable Custom Computing Machines)」、ドイツ、カールスルーエ大学、１９９７年１月
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本発明は、多重ループ処理を含む動作記述に基づき動作合成される回路の動作速度を向上可能な動作合成装置及び自動動作合成方法を提供する。
【課題を解決するための手段】
【０００８】
本発明の第１の特徴は、内部ループ処理を包含する外部ループ処理を含む動作記述を動作合成する動作合成装置であって、（イ）内部ループ処理を展開せずに、内部ループ処理を包含する外部ループ処理を含む動作記述に記述された複数の演算の実行順序を設定したコントロールデータフローグラフを作成するコントロールデータフローグラフ作成部と、（ロ）コントロールデータフローグラフに基づき、複数の演算をそれぞれ実行するステップを決定するスケジューリングを行うスケジューリング部と、（ハ）スケジューリングの結果に基づき、外部ループ処理を実現する第１パイプライン処理及び内部ループ処理を実現する第２パイプライン処理をそれぞれ複数のステージに分割し、複数のステージ間で受け渡されるデータをそれぞれ保持する複数のパイプラインレジスタを外部ループ処理及び内部ループ処理に割り付ける割り付け部とを備える動作合成装置であることを要旨とする。  
本発明の第２の特徴は、コントロールデータフローグラフ作成部、スケジューリング部及び割り付け部を中央演算処理装置に備える動作合成装置において、（イ）コントロールデータフローグラフ作成部が、内部ループ処理を包含する外部ループ処理を含む動作記述を動作記述記憶領域から読み出し、内部ループ処理を展開せずに、動作記述に記述された複数の演算の実行順序を設定したコントロールデータフローグラフを作成するステップと、（ロ）スケジューリング部が、コントロールデータフローグラフに基づき、複数の演算をそれぞれ実行するステップを決定するスケジューリングを行い、そのスケジューリングの結果をスケジュール記憶領域に格納するステップと、（ハ）割り付け部が、スケジュール記憶領域から読み出したスケジューリングの結果に基づき、外部ループ処理を実現する第１パイプライン処理及び内部ループ処理を実現する第２パイプライン処理をそれぞれ複数のステージに分割するステップと、（ニ）割り付け部が、複数のステージ間で受け渡されるデータをそれぞれ保持する複数のパイプラインレジスタを外部ループ処理及び内部ループ処理に割り付けるステップとを含む自動動作合成方法であることを要旨とする。  
【発明の効果】
【０００９】
本発明によれば、多重ループ処理を含む動作記述に基づき動作合成される回路の動作速度を向上可能な動作合成装置及び自動動作合成方法を提供できる。
【発明を実施するための最良の形態】
【００１０】
次に、図面を参照して、本発明の実施の形態を説明する。以下の図面の記載において、同一又は類似の部分には同一又は類似の符号を付している。又、以下に示す実施の形態は、この発明の技術的思想を具体化するための装置や方法を例示するものであって、この発明の技術的思想は、構成部品の構造、配置等を下記のものに特定するものでない。この発明の技術的思想は、特許請求の範囲において、種々の変更を加えることができる。
【００１１】
本発明の実施の形態に係る動作合成装置は、図１に示すように、内部ループ処理を展開せずに、内部ループ処理を包含する外部ループ処理を含む動作記述に記述された複数の演算の実行順序を設定したＣＤＦＧを作成するＣＤＦＧ作成部１１と、ＣＤＦＧに基づき、複数の演算をそれぞれ実行するステップを決定するスケジューリングを行うスケジューリング部１３と、スケジューリングの結果に基づき、外部ループ処理を実現する第１パイプライン処理及び内部ループ処理を実現する第２パイプライン処理をそれぞれ複数のステージに分割し、複数のステージ間で受け渡されるデータをそれぞれ保持する複数のパイプラインレジスタを外部ループ処理及び内部ループ処理に割り付ける割り付け部１４とを備える。
【００１２】
ＣＤＦＧは、動作記述に記述されたデータフロー及び制御フローの解析に基づいて作成される。ＣＤＦＧは、演算及び関数等を表す「節点」と、データフローを表す「枝」から構成される。後述するように、例えばＣＤＦＧの節点に演算器、枝にデータを格納するレジスタが割り付けられて、ＲＴＬ記述が合成される。
【００１３】
スケジューリング部１３は、ＣＤＦＧ中の各節点における演算の実行に要する時間、及び演算を処理する順序を考慮して、ＣＤＦＧ中の各節点の演算を実行するステップ（以下において、「動作ステップ」という。）をそれぞれ決定する。
【００１４】
図１に示す動作合成装置は、アロケーション部１２、データパス生成部１５、及び制御回路生成部１６を更に備える。
【００１５】
アロケーション部１２は、１システムサイクル以内に処理が完了する演算器、レジスタ及びメモリ等を、図１に示すテクノロジライブラリ部３から抽出する。アロケーション部１２がＣＤＦＧに割り付ける演算器等を抽出することを、以下において「アロケーション」という。ここで、「システムサイクル」とは、動作合成によって生成されるシステムのサイクルである。例えば、システムのクロック周期が２０ｎｓｅｃに設定された場合は、アロケーション部１２は、演算による信号の最大遅延が２０ｎｓｅｃ以下である演算器を抽出する。アロケーション部１２が抽出した演算器、レジスタ及びメモリ等を、割り付け部１４がＣＤＦＧの節点及び枝に割り付ける。
【００１６】
テクノロジライブラリ部３は、動作合成で利用可能な各種演算器、マルチプレクサ、レジスタ等の情報を格納する。ここで、演算器等の「情報」とは、演算処理による遅延時間、演算器のサイズ及び演算機能等である。
【００１７】
データパス生成部１５は、入力を切り替えるマルチプレクサ、データ保持用のレジスタを生成する。そして、データパス生成部１５は、演算器、マルチプレクサ及びレジスタ等のリソースを接続するデータパスを生成する。
【００１８】
制御回路生成部１６は、動作ステップの実行を制御するステートマシン等の制御回路を生成する。「ステートマシン」は、現在の状態と入力信号の値によって次の状態と出力信号の値が決まる回路である。例えば、フリップフロップで構成されるレジスタ等の順序論理回路がステートマシンとして採用可能である。
【００１９】
ＣＤＦＧ作成部１１、アロケーション部１２、スケジューリング部１３、割り付け部１４、データパス生成部１５及び制御回路生成部１６は、図１に示すように、中央演算処理装置（ＣＰＵ）１に含まれる。
【００２０】
更に、図１に示す動作合成装置は、記憶装置２、入力装置４及び出力装置５を備える。記憶装置２は、動作記述記憶領域２１、設計制約記憶領域２２、第１ＣＤＦＧ記憶領域２３、第２ＣＤＦＧ記憶領域２４、第３ＣＤＦＧ記憶領域２５、アロケーション記憶領域２６、スケジュール記憶領域２７及びＲＴＬ記述記憶領域２８を備える。
【００２１】
動作記述記憶領域２１は、代入文、条件文、式、演算、及び関数の呼び出し等が記述された動作記述を格納する。設計制約記憶領域２２は、動作記述に記述された回路動作を実現するハードウェアの制約等の設計制約を格納する。設計制約は、回路面積、システムクロック周期、パイプライン処理の開始時刻の間隔（インターバル）等である。第１ＣＤＦＧ記憶領域２３、第２ＣＤＦＧ記憶領域２４及び第３ＣＤＦＧ記憶領域２５は、ＣＤＦＧ作成部１１が作成する第１のＣＤＦＧ、第２のＣＤＦＧ及び第３のＣＤＦＧをそれぞれ格納する。アロケーション記憶領域２６は、アロケーションされた演算器の情報を格納する。スケジュール記憶領域２７は、スケジューリングの結果を格納する。ＲＴＬ記述記憶領域２８は、合成されたＲＴＬ記述を格納する。
【００２２】
入力装置４はキーボード、マウス、ライトペン又はフレキシブルディスク装置などで構成される。入力装置４より動作合成実行者は、入力する動作記述や設計制約を指定したり、設定することができる。又、出力装置５としては、動作合成結果を表示するディスプレイやプリンタ、或いはコンピュータ読み取り可能な記録媒体に保存する記録装置等が使用可能である。ここで、「コンピュータ読み取り可能な記録媒体」とは、例えばコンピュータの外部メモリ装置、半導体メモリ、磁気ディスク、光ディスク、光磁気ディスク、磁気テープ等の電子データを記録することができるような媒体等を意味する。具体的には、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯディスク等が「コンピュータ読み取り可能な記録媒体」に含まれる。
【００２３】
図２に、多重ループ処理を含む動作記述の例を示す。図２に示した動作記述は、Ｃ言語で記述されている。メインプログラム部に、制御変数（インデックス）ｉのループ処理を含むメインプログラムが記述されている。ループ処理の回数の上限は上限値Ｎである。（Ｎ：自然数）。制御変数ｉがインクリメントされ、上限値Ｎより制御変数ｉが小さい間、ループ処理が実行される。制御変数ｉのループ処理は、関数ａ、ｂ、ｃの呼び出し処理を含む。関数ａ、ｂ、ｃは、関数定義部において定義されている。又、図２に示すように、宣言部に、データサイズが上限値Ｎに等しい符号付き１６ビットの配列として、変数配列ｘ、ｙ、ｚ、ｆ、ｇ及びｈが記述されている。
【００２４】
宣言部に記述されているように、関数ａは、変数配列ｆ［ｉ］に変数配列ｇ［ｉ］を乗じて変数配列ｘ［ｉ］を算出する関数である。関数ｂは、変数配列ｘ［ｉ］を８で除算して変数配列ｙ［ｉ］を算出する関数である。関数ｃは、制御変数ｊのループ処理を行う関数であり、変数配列ｘ［ｊ］にｈ［ｊ］を乗じて変数配列ｙ［ｊ］から引く関数である。つまり、制御変数ｊのループ処理は内部ループ処理であり、ループ処理の回数の上限は上限値Ｍである（Ｍ：自然数）。
【００２５】
図１に示した動作合成装置を用いて動作合成を行う方法を説明する前に、ＣＤＦＧ作成部１１によってＣＤＦＧを作成する方法について説明する。図１に示すように、ＣＤＦＧ作成部１１は、第１作成部１１１、第２作成部１１２及び第３作成部１１３を備える。第１作成部１１１は、動作記述に基づき、第１のＣＤＦＧを作成する。第２作成部１１２は、第１のＣＤＦＧに基づき、第２のＣＤＦＧを作成する。第３作成部１１３は、第２のＣＤＦＧに基づき、第３のＣＤＦＧを作成する。
【００２６】
図２に示した動作記述に基づき、第１作成部１１１により作成された第１のＣＤＦＧの例を図３に示す。第１のＣＤＦＧは、関数ａ、ｂ、ｃを展開する前のＣＤＦＧである。図３において、実線の矢印はデータの流れを表す枝である。枝に接続する四角形、即ちデータが入力或いは出力する四角形は、演算又は関数呼び出し処理を示す節点である。節点において、演算は演算子として表され、関数呼び出し処理は呼び出す関数名として表される。又、ブロック３１、３２、３３は、代入文、式、ループ処理等を示す。ブロック３１、３２、３３を表す長方形の上辺に配置された楕円（以下において「入力節点」という。）はブロック３１、３２、３３の入力データである数値或いは変数を表す。ブロック３１、３２、３３を表す長方形の下辺に配置された楕円（以下において「出力節点」という。）はブロック３１からの出力データである数値或いは変数を表す。
【００２７】
ブロック３１では、節点Ｎ３１ａに示すように、制御変数ｉに初期値「０」が代入される。ブロック３２では、節点Ｎ３２ａに示すように、制御変数ｉと上限値Ｎの大小比較が行われる。ブロック３３では、節点Ｎ３３ａに示すように、演算子「＋＋」で表される制御変数ｉのインクリメント演算が行われる。又、節点Ｎ３３ｂ〜３３ｃに示すように、制御変数ｉを引数とする関数ａ、ｂ、ｃの呼び出し処理が行われる。
【００２８】
破線で示したループ処理Ｌ１で示すように、制御変数ｉが上限値Ｎ未満か否かを判定するために、ブロック３３での処理後にブロック３１とブロック３２間の枝に処理が戻る。制御変数ｉと上限値Ｎの大小比較の結果が偽（ＦＡＬＳＥ）、即ちｉ＜Ｎの場合は、ブロック３３に進む。一方、制御変数ｉと上限値Ｎの大小比較の結果が真（ＴＲＵＥ）の場合は処理を終了する。図３において、節点Ｎ３２ｂに示す「ｅｘｉｔ」は処理の終了を示す。
【００２９】
又、関数ａ、ｂ、ｃの引数が制御変数ｉであるため、ブロック３３において関数ａ、ｂ、ｃに制御変数ｉが入力される。
【００３０】
図３に示した第１のＣＤＦＧでは、関数ａ、ｂ、ｃ間のデータ依存関係は不明である。関数ａ、ｂ、ｃ間のデータ依存関係を明確にするために、図１に示した第２作成部１１２は、図３に示した第１のＣＤＦＧの関数ａ、ｂ、ｃをインライン展開する。「インライン展開」とは、メインプログラムから呼び出される関数をメインプログラム内で実行するように、関数を展開することである。先行技術においては、インライン展開によって関数内部のループ処理、即ち内部ループ処理も展開される。しかし、第２作成部１１２は内部ループ処理を展開しない。
【００３１】
第２作成部１１２によって、図３に示した第１のＣＤＦＧの関数ａ、ｂ、ｃをインライン展開して作成された第２のＣＤＦＧを図４に示す。ブロック４３では、関数ａ、ｂ、ｃに対応する処理と、制御変数ｉのインクリメント演算「＋＋」が行われる。図４に示すブロック４３は、関数ｃに対応する処理に関わるブロック４３１、４３２、４３３を含む。又、変数配列ｆ、ｇの引数が制御変数ｉであるため、ブロック４３において変数配列ｆ、ｇに制御変数ｉが入力される。そして、節点Ｎ４３ｂに示すように、関数ａに対応する変数配列ｆと変数配列ｇの乗算が行われる。次いで、節点Ｎ４３ｂに示す演算の結果が節点Ｎ４３ｃに入力され、関数ｂに対応する演算が行われる。
【００３２】
節点Ｎ４３ｂに示す演算の結果は、ブロック４３３の入力節点Ｘｔ及びブロック４３の出力節点ｘに入力される。節点Ｎ４３ｃに示す演算の結果は、ブロック４３３の入力節点Ｙｔ及びブロック４３の出力節点ｙに入力される。更に、入力節点Ｘｔ、Ｙｔに制御変数ｉが入力される。又、ブロック４３３において変数配列ｈに制御変数ｊが入力される。そして、ブロック４３３において、関数ｃに対応する処理が行われる。ブロック４３３における処理結果は、ブロック４３３の出力節点ｚに出力される。ブロック４３の出力節点ｘ、ｙ、及びブロック４３３の出力節点ｚの値は、それぞれ関数ｃで使用される変数配列ｘ、ｙ、及びｚの値に相当する。
【００３３】
又、ブロック４３内の破線で示したループ処理Ｌ２が示すように、制御変数ｊが上限値Ｍ未満か否かを判定するために、ブロック４３３の処理後にブロック４３１とブロック４３２間の枝に処理が戻る。つまり、ループ処理Ｌ２は、ループ処理Ｌ１の内部ループ処理である。ブロック４３２における制御変数ｊと上限値Ｍの大小比較の結果が偽（ＦＡＬＳＥ）、即ちｊ＜Ｍの場合は、ブロック４３３に進む。一方、制御変数ｊと上限値Ｍの大小比較の結果が真（ＴＲＵＥ）の場合は処理を終了する。
【００３４】
図１に示した第３作成部１１３は、図４に示したブロック３１、３２、４３、４３１、４３２及び４３３のそれぞれ入力節点から枝をトレースし、出力節点に接続していない節点（以下において、「独立節点」という。）を抽出する。その結果、ブロック４３の節点Ｎ４３ａ、及びブロック４３３の節点Ｎ４３３ａが独立節点として抽出される。独立節点における演算の出力は、その独立節点を含むブロック内では使用されない。そのため、独立節点における演算は、そのブロック内の他の演算とは独立して実行することができる。例えば、ブロック４３の節点Ｎ４３ａに示す制御変数ｉをインクリメントする演算は、演算「ｉ＋１」に置き換えてブロック３２とブロック４３の間で実行できる。つまり、制御変数ｉをインクリメントする演算が独立したブロックになるように、ＣＤＦＧを変形することができる。同様に、ブロック４３３の節点Ｎ４３３ａに示す制御変数ｊをインクリメントする演算は、演算「ｊ＋１」に置き換えてブロック４３２とブロック４３３の間で実行できる。つまり、第３作成部１１３は、独立したブロックとして演算が実行可能な節点を抽出する。
【００３５】
図１に示した第３作成部１１３は、第２のＣＤＦＧの独立節点における演算を独立したブロックにして、第３のＣＤＦＧを作成する。第３作成部１１３により、図４に示した第２のＣＤＦＧに基づき作成された第３のＣＤＦＧを図５に示す。図５に示したブロック４３ａは、図４に示したブロック４３の節点Ｎ４３ａにおける演算を独立させたブロックである。ブロック４３ａにおいて、演算「ｉ＋１」が実行される。又、ブロック４３３ａは、図４に示したブロック４３３の節点Ｎ４３３ａにおける演算を独立させたブロックである。ブロック４３３ａにおいて、演算「ｊ＋１」が実行される。
【００３６】
以上に説明したように、図１に示したＣＤＦＧ作成部１１により、内部ループ処理であるループ処理Ｌ２を含む第３のＣＤＦＧが作成される。図５に示したように、第３のＣＤＦＧでは、ループ処理Ｌ１の制御変数ｉ、及びループ処理Ｌ２の制御変数ｊをインクリメントする演算が、それぞれ独立したブロック４３ａ及びブロック４３３ａで実行される。
【００３７】
次に、図１に示した動作合成装置を用いて動作合成を行う方法の例を、図６に示すフローチャートを用いて説明する。以下の説明では、図２に示した動作記述に基づき、ＲＴＬ記述を合成する例を説明する。
【００３８】
（イ）図６のステップＳ１１において、図１に示す入力装置４を介して、図２に示した動作記述が入力され、動作記述記憶領域２１に格納される。又、設計制約が設計制約記憶領域２２に格納される。
【００３９】
（ロ）ステップＳ１２において、ＣＤＦＧ作成部１１が、動作記述記憶領域２１から動作記述を読み出す。そして、ＣＤＦＧ作成部１１は、読み出した動作記述に基づき、上記で説明した方法により、内部ループ処理を展開せずにＣＤＦＧを作成する。即ち、ステップＳ１２１において、動作記述に基づき、第１作成部１１１が図３に示す第１のＣＤＦＧを作成する。作成された第１のＣＤＦＧは、第１ＣＤＦＧ記憶領域２３に格納される。ステップＳ１２２において、第２作成部１１２が、第１ＣＤＦＧ記憶領域２３から第１のＣＤＦＧを読み出す。そして第２作成部１１２は、内部ループ処理を展開せずに第１のＣＤＦＧをインライン展開して、図４に示す第２のＣＤＦＧを作成する。作成された第２のＣＤＦＧは、第２ＣＤＦＧ記憶領域２４に格納される。ステップＳ１２３において、第３作成部１１３が、第２ＣＤＦＧ記憶領域２４から第２のＣＤＦＧを読み出す。そして第３作成部１１３は、独立節点を第２のＣＤＦＧから抽出し、図５に示す第３のＣＤＦＧを作成する。作成された第３のＣＤＦＧは、第３ＣＤＦＧ記憶領域２５に格納される。
【００４０】
（ハ）ステップＳ１３において、アロケーション部１２が、設計制約を設計制約記憶領域２２から読み出す。そして、アロケーション部１２は、設計制約を参照して、システムクロック周期より処理時間が短い演算器、レジスタ及びメモリ等をテクノロジライブラリ部３から抽出するアロケーションを行う。アロケーションされた演算器等の情報（以下において、「アロケーション情報」という。）は、アロケーション記憶領域２６に格納される。図７に、アロケーションされた演算器、レジスタ及びメモリの情報の例を示す。例えば、符号付き１６ビットの加算を行う演算器「ＡＤＤ１６Ｓ」は、動作記述に演算子「＋」で記述された処理を行う。演算器「ＡＤＤ１６Ｓ」における演算による信号の遅延は８ｎｓであり、演算器「ＡＤＤ１６Ｓ」のサイズは「１０」である。ここで、「サイズ」は各演算器の相対的な大きさである。したがって、同一の機能を有する複数の演算器がある場合、例えばサイズが最も小さい演算器を選択すること等が可能である。又、演算器「Ｒｄ＿ｘａ」は変数配列ｘからの読み出し処理であり、動作記述に演算子「＝」の右辺式「ｘ［ｉ］」等として記述される。演算器「Ｗｔ＿ｘａ」は変数配列ｘへの書き込み処理であり、動作記述に演算子「＝」の左辺式「ｘ［ｉ］」等として記述される。つまり、アロケーションでは、変数配列からの読み出し処理（入力）及び変数配列への書き込み処理（出力）も演算として扱われる。尚、以下の説明では、変数配列ｘ、ｙ、ｚ、ｆ、ｇ、ｈはランダムアクセスメモリ（ＲＡＭ）に割り当てられるとする。変数配列ｘ、ｙ、ｚ、ｆ、ｇ、ｈの引数は、データの格納場所を示すＲＡＭのアドレスに相当する。
【００４１】
（ニ）ステップＳ１４において、スケジューリング部１３が、第３のＣＤＦＧを第３ＣＤＦＧ記憶領域２５から、アロケーション情報をアロケーション記憶領域２６からそれぞれ読み出す。スケジューリング部１３は、アロケーション情報に基づき、第３のＣＤＦＧについてスケジューリングを行う。スケジューリングの結果は、スケジュール記憶領域２７に格納される。スケジューリング結果を図８〜図１１に示す。図８〜図１１は、第３のＣＤＦＧ中の各演算子の機能を有する演算器がそれぞれ動作する実行ステップを示す。図８は、ブロック３１、３２及び４３ａについてスケジューリングを行った例である。動作ステップＳＴ１０１において、演算子「＝」で示される節点Ｎ３１ａの演算が演算器「Ｗｒｉｔｅ＿０」により実行される。演算器「Ｗｒｉｔｅ＿０」は、０を変数に代入する演算を示す。又、動作ステップＳＴ１０２において、演算子「≧」及び演算子「＋」で示される節点Ｎ３２ａ及びＮ４３ａの演算が演算器「ＧＥ１６Ｓ」及び演算器「ＡＤＤ１６Ｓ」により実行される。図９に、ブロック４３についてスケジューリングを行った例を示す。図９に示すように、ブロック４３の各節点の演算が、実行ステップＳＴ１１０〜ＳＴ１１３において実行される。又、ブロック４３１、４３２及び４３３ａについてスケジューリングを行った結果を図１０に示す。ブロック４３１の節点の演算が、実行ステップＳＴ１２０において実行される。ブロック４３２〜４３３ａの各節点の演算が、実行ステップＳＴ１２１において実行される。図１１は、ブロック４３３についてスケジューリングを行った例を示す。図１１に示すように、ブロック４３３の各節点の演算が、実行ステップＳＴ１３０〜ＳＴ１３３において実行される。
【００４２】
（ホ）ステップＳ１５において、割り付け部１４が、第３のＣＤＦＧを第３ＣＤＦＧ記憶領域２５から、スケジューリングの結果をスケジュール記憶領域２７からそれぞれ読み出す。そして、割り付け部１４は、図８〜図１１に示される演算器を、第３のＣＤＦＧに記述された各演算子にそれぞれ割り付ける。演算器の割り付けにおいては、演算器のデータ入出力のサイズ（ビット幅）も考慮される。又、割り付け部１４は、動作ステップ間でのデータ保持のために、レジスタを第３のＣＤＦＧの枝に割り付ける。更に、割り付け部１４は、設計制約として設定されるパイプラインピッチ制約に基づき、ループ処理Ｌ１を実現する第１パイプライン処理及びループ処理Ｌ２を実現する第２パイプライン処理をそれぞれ複数のステージに分割する。つまり、各ステージの処理が１パイプラインピッチ内で終了するように第１パイプライン処理及び第２パイプライン処理を分割する。パイプラインピッチ制約は、第１パイプライン処理及び第２パイプライン処理毎に設定される。そして、割り付け部１４は、第１パイプライン処理及び第２パイプライン処理の各ステージ間で受け渡されるデータを保持するために、ループ処理Ｌ１及びループ処理Ｌ２にパイプラインレジスタを割り付ける。そのため、パイプラインレジスタの割り付けは、ステージ間で受け渡されるデータの流れをトレースして行われる。
【００４３】
（ヘ）ステップＳ１６において、データパス生成部１５が、ステップＳ１５において第３のＣＤＦＧに割り付けられた演算器とレジスタを互いに接続するデータパスを生成する。更に、データパス生成部１５は、レジスタを共有するためにセレクタを生成する。その後、ステップＳ１７において、制御回路生成部１６が各動作ステップの実行を制御する制御回路を生成し、ＲＴＬ記述の動作合成が終了する。制御回路生成部１６は、第１パイプライン処理及び第２パイプライン処理をそれぞれ制御する２つの制御回路を生成する。合成されたＲＴＬ記述は、ＲＴＬ記述記憶領域２８に格納される。ＲＴＬ記述記憶領域２８に格納されたＲＴＬ記述は、出力装置５を介して動作合成装置の外部に出力することができる。
【００４４】
ステップＳ１３においてテクノロジライブラリ部３から抽出された演算器では、設計制約を満足できない場合がある。その場合には、例えば実行可能な新たな演算器を作成してテクノロジライブラリ部３に格納する。そして、新たに作成された演算器を用いてスケジューリングが行われる。
【００４５】
上記に説明した方法により動作合成されたＲＴＬ記述に基づき生成された論理回路のブロック図の例を、図１２及び図１３に示す。図１２及び図１３において、回路ブロック名が「ｒ」で始まる回路ブロックはレジスタである。例えば、回路ブロック「ｒｉ」は、制御変数ｉの値を格納するレジスタである。又、回路ブロック「ｒＧＥ１６Ｓ」は、演算器「ＧＥ１６Ｓ」の演算結果を格納する。回路ブロック「ｒｍ」は、演算器「ＧＥ１６Ｓ」の演算結果ｍを格納する。回路ブロック「ｒｓ」は、演算器「ＳＨＲＡ３Ｓ」の演算結果ｓを格納する。
【００４６】
図１２及び図１３において、回路ブロック「ＳＥＬ」はセレクタ回路である。既に述べたように変数配列はＲＡＭに割り当てられるため、例えば回路ブロック「Ｗｔ＿ｚａ」はＲＡＭ「ｚ」へのデータの書き込み処理を行うためのアドレスデコーダとデータ入力処理を示す。又、ＲＡＭ「ｚ」から読み出された値はレジスタに格納される。例えば、回路ブロック「ｒｆ」は、ＲＡＭ「ｚ」から読み出された変数配列ｆの値を格納するレジスタである。図１２及び図１３においてＲＡＭは図示を省略している。回路ブロック名が「ｐｒ」で始まる回路ブロックはパイプラインレジスタである。尚、図１２及び図１３に示したブロック図では、説明を簡単にするためにレジスタのビット幅の図示は省略している。
【００４７】
図１２は、図８及び図９に示したスケジューリング結果に基づき生成された論理回路のブロック図の例を示す。図１２において、パイプラインレジスタ１２８は関数ａの処理を行う回路ブロックＢａの処理結果を保持する。パイプラインレジスタ１２８に保持されたデータは、関数ｂの処理を行う回路ブロックＢｂの入力として使用される。制御レジスタ１２７、１３４は制御変数ｉの値を保持する。ただし、制御レジスタ１３４に格納された値に１を加算した値が制御レジスタ１２７に格納される。パイプラインレジスタ１２８、及び制御レジスタ１２７、１３４を使用することにより、回路ブロックＢａ及び回路ブロックＢｂの処理群を第１パイプライン処理として実行することができる。図１２に示す各回路ブロックは、第１制御回路１０１により制御される。つまり、第１制御回路１０１は、第１パイプライン処理を制御する。
【００４８】
図１３は、図１０及び図１１に示したスケジューリング結果に基づき生成された論理回路のブロック図を示す。つまり、図１３に示す論理回路はループ処理Ｌ２を実行する。ループ処理Ｌ２を実現する第２パイプライン処理のステージ分割は、図１１に示した動作ステップの情報に基づき、図５に示したブロック４３３における繰り返し処理の分割として行う。先ず、ブロック４３３における繰り返し処理を実行するときに並列処理が可能な動作ステップを見出す。そして、パイプラインピッチ制約を満たすように、動作ステップ間で処理を分割する。図１３に示す各回路ブロックは、第２制御回路２０１により制御される。つまり、第２制御回路２０１は、第２パイプライン処理を制御する。
【００４９】
図１３に示した論理回路で実行されるループ処理Ｌ２において、図１２に示した論理回路で実行されるループ処理Ｌ１で生成されるデータが使用される。そのため、ループ処理Ｌ１で生成されたデータが、図１２に示した転送レジスタ１２９、１３３に格納される。転送レジスタ１２９は、レジスタ１２６に格納された演算結果ｍを格納する。転送レジスタ１３３は、レジスタ１３２に格納された演算結果ｓを格納する。そして、転送レジスタ１２９、１３３に格納された値が、図１３に示したパイプラインレジスタ２０９、２１０にそれぞれ転送される。つまり、パイプラインレジスタ２０９、２１０は、図１２に示した回路で実行されるループ処理Ｌ１で生成されるデータを保持する。そして、パイプラインレジスタ２０９、２１０に保持されたデータは、ループ処理Ｌ２の入力データとして使用される。
【００５０】
１動作ステップを１システムサイクルで実行する場合に、インターバルを設定する例を以下に説明する。図１１に示したように、変数配列ｘ、ｙ、ｈからの読み出し処理を動作ステップＳＴ１３０で行う。又、乗算及び減算を行い、変数配列ｚへの書き込み処理を動作ステップＳＴ１３１〜ＳＴ１３３で行う。ここで、動作ステップＳＴ１３０を行うステージを「ステージＣ１」、動作ステップＳＴ１３１〜ＳＴ１３３を行うステージを「ステージＣ２」とする。図１１に示す演算器「Ｗｔ＿ｚａ」における処理には２システムサイクル必要である。したがって、乗算及び減算にそれぞれ１システムサイクル、変数配列ｚへの書き込み処理に２システムサイクルを要するため、ステージＣ２のパイプラインピッチは３システムサイクルである。そのため、３システムサイクルより少ないシステムサイクル数では、図５に示したブロック４３３における処理をパイプライン処理として実行できない。したがって、インターバルは３システムサイクルに設定される。
【００５１】
次に、図１３に示した論理回路の動作例を以下に説明する。例えば、ステージＣ２において制御変数ｊを保持するレジスタ２０５の値が１、且つパイプラインレジスタ２０８の値が０である演算をしているときに、ステージＣ１において変数配列ｘ、ｙ、ｈからの読み出し処理がｊ＝１として行われる。ステージＣ１の処理結果をステージＣ２で使用するために、図１３に示すように、ステージＣ１の処理結果を保持するパイプラインレジスタ２０８、２１３が生成される。パイプラインレジスタ２０８は制御変数ｊの値を保持する。パイプラインレジスタ２１３はＲＡＭ「ｈ」から読み出したデータを保持する。そのため、パイプラインレジスタ２０８は、制御変数ｊの値を保持するレジスタ２０５の後段に挿入される。又、パイプラインレジスタ２１３は、ＲＡＭ「ｈ」から読み出したデータを保持するレジスタ２１２の後段にそれぞれ挿入される。
【００５２】
以上に説明したように、パイプラインレジスタ２０８、２０９、２１０、２１３を使用することにより、転送レジスタ１２９、１３３及びＲＡＭ「ｈ」からのデータ読み出し（「ｒｄ＿ｈａ」）、乗算器ＭＵＬ１６Ｓによる乗算、及び減算器ＳＵＢ１６Ｓによる減算からなる処理群を第２パイプライン処理として実行することができる。
【００５３】
制御回路生成部１６が生成するＲＴＬ記述の例を、図１４を用いて以下に説明する。図１４は、図１３に示したステートマシン制御処理を、ハードウェア記述言語（ＨＤＬ）形式の条件文を用いて記述した例である。図１４に示す被条件処理は、並列に処理されるとする。「被条件処理」とは、ｉｆ文中の「ｔｈｅｎ」と「ｅｌｓｅ」間の処理である。図１４において、信号「Ｓｔｅｐ＿ｓｔａｔｅ」は、図１０及び図１１に示した動作ステップを示す信号である。信号「ｃｎｔｌ＿ｎ」は、図１３の示した回路ブロックの制御信号である。尚、説明を分かりやすくするために、図１４において初期ステートと各信号の初期値の代入の記述は省略している。
【００５４】
図１５は、パイプライン処理の制御を図１４と同様な条件文で記述した例である。図１５において、記号「ＳＴＧＣ１」、「ＳＴＧＣ２」はそれぞれステージＣ１、ステージＣ２を示す。
【００５５】
ループ処理Ｌ２を行う図１３に示す回路ブロックは、ループ処理Ｌ１を行う図１２に示す回路ブロックの後段に配置される。そして、図１３に示す第２制御回路２０１は、図１２に示す第１制御回路１０１によって制御される。又、既に述べたように、図１２に示した転送レジスタ１２９、１３３にそれぞれ格納されるデータは、図１３における第２パイプライン処理に使用される。そのため、図１２に示した転送レジスタ１２９と図１３に示したパイプラインレジスタ２１０が接続され、転送レジスタ１２９に格納されたデータはパイプラインレジスタ２１０に転送される。又、図１２に示した転送レジスタ１３３と図１３に示したパイプラインレジスタ２０９が接続され、転送レジスタ１３３に格納されたデータはパイプラインレジスタ２０９に転送される。
【００５６】
上記に説明したように、図６に示した自動動作合成方法によれば、内部ループ処理であるループ処理Ｌ２で使用される変数配列を格納するパイプラインレジスタを生成する。そして、ループ処理Ｌ２を実現する第２パイプライン処理に必要なデータは、ＲＡＭ等のメモリからではなく、一時記憶装置として生成されるパイプラインレジスタから読み出される。そのため、ループ処理Ｌ２を高速に実行することができる。
【００５７】
ところで、リソース割り付け部１４は、各ステージにおける処理に必要な最低システムサイクル数の設計制約に基づき、或いはユーザ指示の値に基づき、各ステージの処理結果を格納するパイプラインレジスタを生成する。そして、リソース割り付け部１４は、生成したパイプラインレジスタを回路に挿入する。パイプライン処理によって図２に示した関数ａ、ｂ、ｃを実行する例を図１６（ａ）〜図１６（ｃ）に示す。図１６（ａ）〜図１６（ｃ）に示すように、割り付け部１４は、ループ処理Ｌ１中に呼び出される関数ａ及びｂによる処理を１のステージ内で実行するように第１パイプライン処理を分割する。関数ａの処理は、ＲＡＭからのデータの読み出し、乗算、レジスタへのデータの書き込み及びパイプラインレジスタへのデータ転送である。そのため、関数ａの処理は、少なくとも３システムサイクルが必要である。したがって、関数ａの処理に必要なパイプライン処理のパイプラインピッチは、最低３システムサイクルになる。ここで、関数ａを実行するパイプライン処理のパイプラインピッチと合わせるために、関数ｂを実行するパイプライン処理のパイプラインピッチを３システムサイクルとする。割り付け部１４は、第１パイプライン処理の結果を格納するパイプラインレジスタを生成する。したがって、関数ａ及びｂの結果を格納するパイプラインレジスタとして、パイプラインレジスタ２１０及び２０９が生成される。
【００５８】
一方、既に述べたように、関数ｃはステージＣ１及びステージＣ２に分割して実行される。即ち、ステージＣ１でデータ読み出し（「ｒｄ＿ｈａ」）を行い、ステージＣ２で乗算器ＭＵＬ１６Ｓによる及び減算器ＳＵＢ１６Ｓによる減算を行う。既に説明したように、ステージＣ２のパイプラインピッチは３システムサイクルである。ここで、ステージＣ１のパイプラインピッチを３システムサイクルにすることにより、ステージＣ１及びステージＣ２からなる第２パイプライン処理のパイプラインピッチと、関数ａ及び関数ｂを実行する第１パイプライン処理のパイプラインピッチとが一致する。図１６（ａ）〜図１６（ｃ）に示した例では、ステージ１で処理１の関数ａが実行される。ステージ２で処理１の関数ｂ及び処理２の関数ｂが実行される。ステージ３で処理１の関数ｃの前半、処理２の関数ｂ及び処理３の関数ａが実行される。つまり、第１及び第２パイプライン処理では、動作記述に記述された処理を分割し、分割した各処理をオーバーラップさせて実行する。その結果、全体の処理時間を短縮することができる。
【００５９】
本発明の実施の形態との比較のため、図２に示した関数ｃを、内部ループ処理も含めて展開した例を以下に示す。内部ループ処理の制御変数ｊの上限値Ｍが１０であるため、関数ｃは図１７に示すように１０個の演算として展開される。図１７に示した記述に基づき、乗算１０個及び減算１０個を有するＣＤＦＧが作成される。つまり、内部ループ処理を展開することにより、ＣＤＦＧのサイズが大きくなり、且つ演算子の数が増大する。そのため、スケジューリング及びリソースの割り付けに要する時間が増大する。更に、スケジューリング後の動作ステップ数が増え、制御回路が複雑になる。又、パイプライン処理を行わないため、回路の処理速度を向上することが困難である。
【００６０】
設計制約としてレイテンシの制限を厳しくすることにより、図１７に示した記述を２システムサイクルで実行する回路を合成できる。しかし、合成された回路は、乗算器１０個及び減算器１０が必要であり、回路面積が大きい。
【００６１】
図６に示した自動動作合成方法により合成された図１３に示す回路は、乗算器１個及び減算器１個を有し、レイテンシは５システムサイクルである。一方、設計制約のレイテンシを５システムサイクルとして図１７に示した記述から合成される回路は、少なくとも乗算器２個及び減算器２個が必要である。つまり、図１３に示した回路に比べて、乗算器及び減算器がそれぞれ１つずつ多く必要である。
【００６２】
以上に説明したように、本発明の実施の形態に係る動作合成装置によれば、多重ループ処理が記述された動作記述の内部ループ処理を展開せずにＣＤＦＧを作成することにより、動作合成された回路の動作速度を向上することができる。更に、本発明の実施の形態に係る動作合成装置によれば、回路に使用する演算器の数を抑制することができる。その結果、回路面積の増大を抑制することができる。
【００６３】
図６に示した一連の動作合成方法操作は、図６と等価なアルゴリズムのプログラムにより、図１に示した動作合成装置を制御して実行できる。このプログラムは、図１に示した動作合成装置を構成する記憶装置２に記憶させればよい。又、このプログラムは、コンピュータ読み取り可能な記録媒体に保存し、この記録媒体を図１に示した記憶装置２に読み込ませることにより、本発明の一連の動作合成方法操作を実行することができる。
【００６４】
（その他の実施の形態）
上記のように、本発明は実施の形態によって記載したが、この開示の一部をなす論述及び図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施の形態、実施例及び運用技術が明らかとなろう。
【００６５】
既に述べた実施の形態の説明においては、多重ループが２重である場合が示されていたが、３重以上のループであっても本発明は適用可能である。又、Ｃ言語の「ｆｏｒループ」文の例を示したが、Ｃ（Ｃ＋＋）を拡張したＳｙｓｔｅｍＣの「ｗａｉｔ（）」処理を含む「ｗｈｉｌｅループ」文、「ｄｏ＿ｗｈｉｌｅループ」文にも対しても、本発明は適用可能である。更に、動作記述に記載された関数の階層が２階層である例を示したが、関数の階層が３階層以上の場合も適用可能である。
【００６６】
このように、本発明はここでは記載していない様々な実施の形態等を含むことは勿論である。したがって、本発明の技術的範囲は上記の説明から妥当な特許請求の範囲に係る発明特定事項によってのみ定められるものである。
【図面の簡単な説明】
【００６７】
【図１】本発明の実施の形態に係る動作合成装置の構成を示す模式図である。
【図２】本発明の実施の形態に係る自動動作合成方法が適用される動作記述の例である。
【図３】本発明の実施の形態に係る自動動作合成方法によって生成される第１のＣＤＦＧの例である。
【図４】本発明の実施の形態に係る自動動作合成方法によって生成される第２のＣＤＦＧの例である。
【図５】本発明の実施の形態に係る自動動作合成方法によって生成される第３のＣＤＦＧの例である。
【図６】本発明の実施の形態に係る自動動作合成方法を説明するためのフローチャートである。
【図７】本発明の実施の形態に係る自動動作合成方法によるアロケーション結果を示す表である。
【図８】本発明の実施の形態に係る自動動作合成方法によるスケジューリング結果を示す表である（その１）。
【図９】本発明の実施の形態に係る自動動作合成方法によるスケジューリング結果を示す表である（その２）。
【図１０】本発明の実施の形態に係る自動動作合成方法によるスケジューリング結果を示す表である（その３）。
【図１１】本発明の実施の形態に係る自動動作合成方法によるスケジューリング結果を示す表である（その４）。
【図１２】本発明の実施の形態に係る自動動作合成方法によって生成される論理回路のブロック図の例である。
【図１３】本発明の実施の形態に係る自動動作合成方法によって生成される論理回路のブロック図の他の例である。
【図１４】本発明の実施の形態に係る自動動作合成方法によって生成されるＲＴＬ記述の例である。
【図１５】本発明の実施の形態に係る自動動作合成方法によって生成されるＲＴＬ記述の他の例である。
【図１６】本発明の実施の形態に係る自動動作合成方法によって生成される回路によるパイプライン処理の例である。
【図１７】ループ処理の記述を展開した例である。
【符号の説明】
【００６８】
１…ＣＰＵ
２…記憶装置
３…テクノロジライブラリ部
４…入力装置
５…出力装置
１１…ＣＤＦＧ作成部
１２…アロケーション部
１３…スケジューリング部
１４…割り付け部
１５…データパス生成部
１６…制御回路生成部
２１…動作記述記憶領域
２２…設計制約記憶領域
２３…第１ＣＤＦＧ記憶領域
２４…第２ＣＤＦＧ記憶領域
２５…第３ＣＤＦＧ記憶領域
２６…アロケーション記憶領域
２７…スケジュール記憶領域
２８…ＲＴＬ記述記憶領域
１１１…第１作成部
１１２…第２作成部
１１３…第３作成部
【図１】
2006350849.tif 000003
【図２】
2006350849.tif 000004
【図３】
2006350849.tif 000005
【図４】
2006350849.tif 000006
【図５】
2006350849.tif 000007
【図６】
2006350849.tif 000008
【図７】
2006350849.tif 000009
【図８】
2006350849.tif 000010
【図９】
2006350849.tif 000011
【図１０】
2006350849.tif 000012
【図１１】
2006350849.tif 000013
【図１２】
2006350849.tif 000014
【図１３】
2006350849.tif 000015
【図１４】
2006350849.tif 000016
【図１５】
2006350849.tif 000017
【図１６】
2006350849.tif 000018
【図１７】
2006350849.tif 000019