(57)【要約】【課題】  面積削減効果が大きいサブグラフを高速に検出する。【解決手段】  ディジタル回路動作についてデータフローグラフ中、一または複数の条件分岐から一つの条件分岐を選択する条件分岐選択手段４１と、選択された条件分岐に含まれる節点集合を選択する節点集合選択手段４２と、選ばれた節点集合をいくつかのグループに分ける節点グループ化手段４３と、分けられたグループのそれぞれをサブグラフとして、条件分岐選択手段４１、節点集合選択手段４２および節点グループ化手段４３による各処理を一または複数の条件分岐に対して行って得られる複数のサブグラフを比較して同一サブグラフを検出するサブグラフ比較手段４５とを有し、データフローグラフ中の各条件分岐に含まれる節点を一定法則でグループに分けてそれぞれをサブグラフとし、それらサブグラフを比較することにより同一サブグラフを検出する。【選択図】  図３
2006139427.tif 000002
【特許請求の範囲】
【請求項１】
ディジタル回路動作について、演算を示す複数の節点と、該節点に入出力するデータの流れを示す枝とで表されたデータフローグラフ中、一または複数の条件分岐から一つの条件分岐を選択する条件分岐選択手段と、
選択された条件分岐に含まれる節点集合を選択する節点集合選択手段と、
選ばれた節点集合をいくつかのグループに分ける節点グループ化手段と、
分けられたグループのそれぞれを各サブグラフとして、該条件分岐選択手段、該節点集合選択手段および該節点グループ化手段による各処理を該一または複数の条件分岐に対して行って得られる複数のサブグラフを比較して同一サブグラフを検出するサブグラフ比較手段とを有するデータフローグラフの同一サブグラフ検出装置。
【請求項２】
前記節点グループ化手段により分けられたグループの入力部および出力部の少なくともいずれかを、回路占有面積に関してコンパクト化したサブグラフを出力するグラフコンパクト化手段を更に有する請求項１に記載のデータフローグラフの同一サブグラフ検出装置。
【請求項３】
前記条件分岐選択手段は、前記条件分岐を所定または任意の順序で選択する請求項１に記載のデータフローグラフの同一サブグラフ検出装置。
【請求項４】
前記節点集合選択手段は、前記条件分岐の条件が「真」のときに実行される真ブロックに含まれる節点と、「偽」のときに実行される偽ブロックに含まれる節点とを前記節点集合として選択する請求項１または２に記載のデータフローグラフの同一サブグラフ検出装置。
【請求項５】
前記節点集合選択手段は、前記条件分岐の条件が「真」のときに実行される真ブロックからの出力と、「偽」のときに実行される偽ブロックからの出力とを選択するセレクタ節点を前記節点集合に加える請求項１または４に記載のデータフローグラフの同一サブグラフ検出装置。
【請求項６】
前記節点グループ化手段は、前記条件分岐の条件が「真」または「偽」のときに実行される真ブロックまたは偽ブロックの出力を生成する各出力節点に対して、該真ブロックまたは該偽ブロックに含まれる各節点について、その出力が影響を及ぼす該各出力節点の組合せを求めて、該各出力節点の組合わせ中で共通する節点グループとそれ以外の該各出力節点毎の節点グループとにグループ分けする請求項１に記載のデータフローグラフの同一サブグラフ検出装置。
【請求項７】
前記節点グループ化手段は、前記セレクタ節点を、前記条件分岐の条件が「真」または「偽」のときに実行される真ブロックまたは偽ブロックの出力を生成する各出力節点として、該真ブロックまたは該偽ブロックに含まれる各節点について、その出力が影響を及ぼす該各出力節点の組合せを求めて、該各出力節点の組合わせ中で共通する節点グループとそれ以外の該各出力節点毎の節点グループとにグループ分けする請求項５に記載のデータフローグラフの同一サブグラフ検出装置。
【請求項８】
前記グラフコンパクト化手段は、
前記節点グループ化手段により分けられたグループの入力部にある各節点に着目して、
前記サブグラフを実行する回路の占有面積および、該回路を複数箇所で共有する場合に必要なセレクタの占有面積の合計と、
着目節点を該サブグラフから取り除いたサブグラフを実行する回路の占有面積、当該回路を複数箇所で共有する場合に必要なセレクタの占有面積および、取り除いた該着目節点を実行するために必要な演算器の占有面積の合計とを比較して、後者の合計が前者の合計よりも小さい場合に該サブグラフから該着目節点を取り除いて該入力部をコンパクト化する請求項２または６に記載のデータフローグラフの同一サブグラフ検出装置。
【請求項９】
前記グラフコンパクト化手段は、
前記節点グループ化手段により分けられたグループの前記各出力節点が前記セレクタ節点で、かつ、該セレクタ節点の入力側に繋がっている複数の節点が全て同一演算種類である場合に、
該セレクタ節点の各入力側に同一演算種類の節点がそれぞれ接続されているサブグラフを実行する回路の占有面積と、  
該同一演算種類の一つの節点の入力側に該セレクタ節点の出力が接続されている別のサブグラフを実行する回路の占有面積とを比較して、前者の占有面積が後者の占有面積よりも大きい場合に該同一電算種類の一つの節点の入力側に該セレクタ節点の出力が接続するようにサブグラフを変更する請求項７に記載のデータフローグラフの同一サブグラフ検出装置。
【請求項１０】
前記サブグラフ比較手段は、前記各サブグラフの形状に一対一対応させた文字列を作成してそれらの文字列を比較し、同一の文字列を検出することにより同一のサブグラフを検出する請求項１に記載のデータフローグラフの同一サブグラフ検出装置。
【請求項１１】
前記サブグラフ比較手段は、前記文字列をハッシュ関数に入力して得られるハッシュ値を比較し、同一ハッシュ値を検出することにより同一文字列を検出して同一のサブグラフを検出する請求項１０に記載のデータフローグラフの同一サブグラフ検出装置。
【請求項１２】
請求項１〜１１のいずれかに記載のデータフローグラフの同一サブグラフ検出装置を用いて生成したデータフローグラフに対して、スケジューリング処理およびアロケーション処理を行い、スケジューリング結果およびアロケーション結果に基づいてデータパスおよびコントローラを生成して回路図を自動設計する高位合成装置。
【請求項１３】
ディジタル回路動作について、演算を示す複数の節点と、該節点に入出力するデータの流れを示す枝とで表されたデータフローグラフ中、一または複数の条件分岐から一つの条件分岐を選択する条件分岐選択ステップと、
選択された条件分岐に含まれる節点集合を選択する節点集合選択ステップと、
選択された節点集合をいくつかのグループに分ける節点グループ化ステップと、
分けられたグループのそれぞれを各サブグラフとして、該条件分岐選択ステップ、該節点集合選択ステップおよび該節点グループ化ステップを該一または複数の条件分岐に対して行って得られる複数のサブグラフを比較して同一サブグラフを検出するサブグラフ比較ステップとを有するデータフローグラフの同一サブグラフ検出方法。
【請求項１４】
前記節点グループ化ステップにより分けられたグループの入力部および出力部の少なくともいずれかを、回路占有面積に関してコンパクト化したサブグラフを出力するグラフコンパクト化ステップを更に有する請求項１３に記載のデータフローグラフの同一サブグラフ検出方法。
【請求項１５】
前記条件分岐選択ステップは、前記条件分岐を所定または任意の順序で選択する請求項１３に記載のデータフローグラフの同一サブグラフ検出方法。
【請求項１６】
前記節点集合選択ステップは、前記条件分岐の条件が「真」のときに実行される真ブロックに含まれる節点と、「偽」のときに実行される偽ブロックに含まれる節点とを前記節点集合として選択する請求項１３または１４に記載のデータフローグラフの同一サブグラフ検出方法。
【請求項１７】
前記節点集合選択ステップは、前記条件分岐の条件が「真」のときに実行される真ブロックからの出力と、「偽」のときに実行される偽ブロックからの出力とを選択するセレクタ節点を前記節点集合に加える請求項１３または１６に記載のデータフローグラフの同一サブグラフ検出方法。
【請求項１８】
前記節点グループ化ステップは、前記条件分岐の条件が「真」または「偽」のときに実行される真ブロックまたは偽ブロックの出力を生成する各出力節点に対して、該真ブロックまたは該偽ブロックに含まれる各節点について、その出力が影響を及ぼす該各出力節点の組合せを求めて、該各出力節点の組合わせ中で共通する節点グループとそれ以外の該各出力節点毎の節点グループとにグループ分けする請求項１３に記載のデータフローグラフの同一サブグラフ検出方法。
【請求項１９】
前記節点グループ化ステップは、前記セレクタ節点を、前記条件分岐の条件が「真」または「偽」のときに実行される真ブロックまたは偽ブロックの出力を生成する各出力節点として、該真ブロックまたは該偽ブロックに含まれる各節点について、その出力が影響を及ぼす該各出力節点の組合せを求めて、該各出力節点の組合わせ中で共通する節点グループとそれ以外の該各出力節点毎の節点グループとにグループ分けする請求項１７に記載のデータフローグラフの同一サブグラフ検出方法。
【請求項２０】
前記グラフコンパクト化ステップは、
前記節点グループ化ステップにより分けられたグループの入力部にある各節点に着目して、
前記サブグラフを実行する回路の占有面積および、該回路を複数箇所で共有する場合に必要なセレクタの占有面積の合計と、
着目節点を該サブグラフから取り除いたサブグラフを実行する回路の占有面積、当該回路を複数箇所で共有する場合に必要なセレクタの占有面積および、取り除いた該着目節点を実行するために必要な演算器の占有面積の合計とを比較して、後者の合計が前者の合計よりも小さい場合に該サブグラフから着目節点を取り除いて該入力部をコンパクト化する請求項１４または１８に記載のデータフローグラフの同一サブグラフ検出方法。
【請求項２１】
前記グラフコンパクト化ステップは、
前記節点グループ化ステップにより分けられたグループの前記出力節点が前記セレクタ節点で、かつ、該セレクタ節点の入力側に繋がっている複数の節点が全て同一演算種類である場合に、
該セレクタ節点の各入力側に同一演算種類の節点がそれぞれ接続されているサブグラフを実行する回路の占有面積と、  
該同一演算種類の一つの節点の入力側に該セレクタ節点の出力が接続されている別のサブグラフを実行する回路の占有面積とを比較して、前者の占有面積が後者の占有面積よりも大きい場合に該同一演算種類の一つの節点の入力側に該セレクタ節点の出力が接続するようにサブグラフを変更する請求項１９に記載のデータフローグラフの同一サブグラフ検出方法。
【請求項２２】
前記サブグラフ比較ステップは、前記各サブグラフの形状に一対一対応させた文字列を作成してそれらの文字列を比較し、同一の文字列を検出することにより同一のサブグラフを検出する請求項１３に記載のデータフローグラフの同一サブグラフ検出方法。
【請求項２３】
前記サブグラフ比較ステップは、前記文字列をハッシュ関数に入力して得られるハッシュ値を比較し、同一ハッシュ値を検出することにより同一文字列を検出して同一のサブグラフを検出する請求項２２に記載のデータフローグラフの同一サブグラフ検出方法。
【請求項２４】
請求項１３〜２３のいずれかに記載のデータフローグラフの同一サブグラフ検出方法をコンピュータに実行させるための各処理ステップが記述されたデータフローグラフの同一サブグラフ検出制御プログラム。
【請求項２５】
請求項２４に記載のデータフローグラフの同一サブグラフ検出制御プログラムが記録されたコンピュータ読み取り可能な可読記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えばシステムＬＳＩなどの大規模論理回路の自動設計に用いられ、動作記述から論理回路をコンピュータ自動合成する動作合成（高位合成）を行う際に、回路共有により回路占有面積を削減するために、データフローグラフの同一サブグラフを検出するデータフローグラフの同一サブグラフ検出装置、これを用いた高位合成装置、同一サブグラフ検出装置を用いたデータフローグラフの同一サブグラフ検出方法、この方法の各処理手順をコンピュータに実行させるためのデータフローグラフの同一サブグラフ検出制御プログラムおよびこの制御プログラムが記録されたコンピュータ読み取り可能な可読記録媒体に関する。
【背景技術】
【０００２】
従来、システムＬＳＩなどの大規模回路の設計では、回路の動作記述から、ＲＴＬ（Ｒｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ）の記述を生成する動作合成が行なわれている。この動作合成は高位合成とも呼ばれる。
【０００３】
この動作合成では、ハードウェアの構造に関する情報が含まれず、処理のアルゴリズムのみが記述された動作記述から、ハードウェアの回路図が自動的に合成される。
【０００４】
例えば、非特許文献１に記載されている動作合成システムによれば、Ｃ言語をハードウェア設計用に拡張した言語を動作記述言語として、ハードウェアの回路図を合成することが可能である。
【０００５】
以下に、この動作合成の手順を簡単に説明する。
【０００６】
この動作合成では、まず、動作記述言語で記述されたアルゴリズムにおけるデータの流れが解析され、データフローグラフと呼ばれるモデルが作成される。
【０００７】
ディジタル回路では、複数のデータに対して様々な演算を繰り返すことにより、そのディジタル回路の目的とする処理が行われる。このときの演算およびデータの流れをグラフを用いて表したものがデータフローグラフである。
【０００８】
このデータフローグラフは、複数の節点と、各節点間を接続する枝とから構成されている。節点はディジタル回路中で実行されるある一つの演算を表しており、枝は演算から演算へのデータの流れを表している。演算を表す節点を枝で適切に接続することにより、ディジタル回路の動作をデータフローグラフとして表すことが可能となる。
【０００９】
このデータフローグラフ中の各節点は、入力枝と出力枝とによって接続され、入力枝が演算に与えられるデータを表し、出力枝が演算結果のデータを表す。また、各節点には、演算の種類の情報なども含まれている。
【００１０】
例えば図１３に示すＣ言語で記述された動作記述は、図１４に示すようなデータフローグラフによって表すことができる。
【００１１】
図１４は、二つの乗算を表す節点１０１，１０２と一つの加算を表す節点１０３とを含み、入力ａおよびｂを乗算した結果と、入力ｂおよびｃを乗算した結果とを加算して、その結果をｘに出力することを表している。
【００１２】
図１４のデータフローグラフは、計算機上では、例えば図１５に示すようなデータ構造で表される。
【００１３】
図１５において、節点はＮｏｄｅ構造体（ｓｔｒｕｃｔ Ｎｏｄｅ）で表され、各節点固有の節点番号ｎｏｄｅ＿ｉｄを有している。ｉｎ＿ｅｄｇｅ配列およびｏｕｔ＿ｅｄｇｅ配列には、入力枝および出力枝の枝番号が複数記憶される。図１５の事例では、節点は２入力１出力の演算であり、ｉｎ＿ｅｄｇｅは二つの要素、ｏｕｔ＿ｅｄｇｅは一つの要素を有している。また、ｏｐ＿ｔｙｐｅには加算・減算・乗算などの演算の種類を表す番号が記憶される。
【００１４】
枝はＥｄｇｅ構造体（ｓｔｒｕｃｔ Ｅｄｇｅ）で表され、各枝固有の枝番号ｅｄｇｅ＿ｉｄを有している。ｆｒｏｍ＿ｎｏｄｅおよびｔｏ＿ｎｏｄｅには、その枝が接続された節点の節点番号が格納される。
【００１５】
これらのデータ構造により、計算機のメモリ上（データベース）にデータフローグラフの各節点間の接続が記憶される。
【００１６】
データフローグラフ上で、節点を接続する場合や、ある節点の入出力につながる別の節点を見つける場合には、上記データベースの各要素に節点や枝の番号を登録したり、上記データベースの各要素を参照したりする。以下では、説明を分かりやすくするために、節点を枝で接続したり、節点の上下につながる節点を見つけたりする場合に、図１４に示すようなデータフローグラフを視覚的に表した図を用いて説明する。
【００１７】
次に、このデータフローグラフに対して、スケジューリング処理とアロケーション処理を行う。スケジューリングは、データフローグラフ中の各節点をいつ実行するかを決定する処理である。また、アロケーションは、バインディングとも呼ばれ、データフローグラフ中の枝が表すデータを格納するレジスタを決定する処理と、データフローグラフの節点が表す演算をどの演算器を用いて行うかを決定する処理とからなっている。動作合成方法によっては、アロケーションがスケジューリングの前に行なわれる場合もある。
【００１８】
次に、スケジューリング結果およびアロケーション結果を元に、データパスおよびコントローラを生成してハードウェアを得る。データフローグラフから回路を得る処理の事例は例えば特許文献１に開示されている。
【００１９】
ところで、動作合成においては、複数の演算処理を行うために、一つの演算器を複数回使うことが重要である。これにより、チップ中の演算器の個数が減少してチップ面積が小さくなり、チップ製造コストを下げることができるからである。
【００２０】
したがって、動作合成においては、可能な限り多くの演算が演算器を共有するようにする工夫が必要である。
【００２１】
同じ種類の演算が異なるステップで実行される場合には、それらの演算を一つの演算器を用いて処理することが可能である。よって、スケジューリング処理では、同じ種類の演算が異なるステップで実行されるようなスケジューリングが得られるように、工夫する必要がある。このようなスケジューリング方法は、例えば特許文献２に開示されている。
【００２２】
また、アロケーション処理では、演算器を共有する方法が複数ある場合に、回路面積が可能な限り小さくなるような共有方法を選ぶ必要がある。このようなアロケーション方法は、例えば特許文献３に開示されている。
【００２３】
以上のように、同じ種類の演算毎に演算器を共有する方法は、回路面積の削減に有効である。しかしながら、全体の処理中に一連の演算の組合せが複数回出現する場合には、データフローグラフ中の一連の演算の組合せを表すサブグラフ（部分グラフ）に対して回路を作成し、その回路全体を共有する方が、より面積削減のために有効である。
【００２４】
これは、共有する回路全体の入力に対してのみセレクタが必要となり、回路中の個々の演算についてはセレクタが不要となるためである。
【００２５】
例えば図１６（ａ）の事例では、２個の加算と１個の乗算を含むサブグラフ１１１，１１２は同じである。よって、これらを異なるクロックサイクルで実行するようにスケジューリングを行えば、図１６（ｂ）のように、一つの回路１１３を共有することが可能となる。この回路１１３は、処理を繰り返すことによりサブグラフ１１１，１１２を実行する回路である。
【００２６】
第１クロックステップでは、加算器１１４の結果がセレクタ１１５によって選択されて回路１１３に入力され、回路１１３の演算結果がレジスタ１１６に記憶される。
【００２７】
第２クロックステップでは、セレクタ１１５によってレジスタ１１６の出力が選択されて回路１１３に入力されて、回路１１３の演算結果が外部に出力される。
【００２８】
なお、図１６（ｂ）では、セレクタ１１５とレジスタ１１６の制御信号は省略している。
【００２９】
回路を共有しない場合には、回路１１３に相当する回路がさらにもう一つ必要になるため、回路を共有するときに必要となるセレクタ１１５やレジスタ１１６の面積に対して回路１１３の面積が大きい場合には、回路共有によって面積を削減することができる。
【００３０】
このように、回路の共有を行うためには、データフローグラフの中から複数の同一サブグラフを探す必要がある。
【００３１】
しかしながら、一般に、データフローグラフから同一の部分グラフを探す問題は、データフローグラフ中の節点数の増加に対して指数関数的に探索処理が増加することが知られている。よって、データフローグラフが大きくなると、必要な処理時間が非常に長くなり、実用的でない。このため、データフローグラフの中から同一サブグラフを簡単に探し出すための工夫が必要である。
【００３２】
例えば非特許文献２には、データフローグラフから類似サブグラフを探し出す方法が開示されている。ここで、「類似」サブグラフとは、「０」の加算や「１」の乗算など、値が変化しない演算を挿入することにより同一サブグラフになるものを指している。即ち、この非特許文献２に記載されているグラフ探索方法では、同一サブグラフを探索するときにグラフが同一か否かを判断する代わりに、グラフが類似しているか否かを判断しており、同一サブグラフの探索と本質的には同じである。
【００３３】
この類似サブグラフ探索方法では、高速に類似サブグラフを発見するために、以下のような工夫が為されている。即ち、図１７（ａ）および図１７（ｂ）に示すように、サブグラフに枝別れが無いｎ段のグラフに限られている。
【００３４】
このデータフローグラフ中の各演算の入力数が「２」であるとすると、図１８に示すように、ある一つの節点Ｆを出力に有する３段のサブグラフは、Ａ−Ｄ−Ｆと、Ｂ−Ｄ−Ｆと、Ｂ−Ｅ−Ｆと、Ｃ−Ｅ−Ｆの４通りである。一般に、入力が１個のみである演算もあり、また、３個以上の入力を有する演算は稀であるため、サブグラフは４通りよりも少ないことが多い。よって、データフローグラフ中の全節点数をＮとすると、データフローグラフ中にサブグラフはせいぜい４Ｎ個しかなく、計算機で全てを求めることができるようになり、これらのサブグラフを比較して類似サブグラフを探すことができる。
【００３５】
一般には、ｎ段のサブグラフの個数はＮ×２＾（ｎ−１）であり、大規模回路ではデータフローグラフの節点数Ｎは１万程度になる場合があるが、ｎを小さくすれば、計算機で取り扱える個数にすることができる。
【特許文献１】特開２００１−２２９２１７号公報
【特許文献２】特開２０００−３４８０６９号公報
【特許文献３】特開２００３−７６７２８号公報
【非特許文献１】”Ａ Ｃ−ｂａｓｅｄ Ｓｙｎｔｈｅｓｉｓ Ｓｙｓｔｅｍ， Ｂａｃｈ， ａｎｄ ｉｔｓ Ａｐｐｌｉｃａｔｉｏｎ”  Ｐｒｏｃｅｅｄｉｎｇｓ ｏｆ ｔｈｅ ＡＳＰ−ＤＡＣ ２００１， ２００１（ＩＥＥＥ Ｃａｔａｌｏｇ Ｎｕｍｂｅｒ： ０１ＥＸ４５５， ＩＳＢＮ： ０−７８０３−６６３３−６）
【非特許文献２】”Ｉｍｐｒｏｖｅｄ Ｉｎｔｅｒｃｏｎｎｅｃｔ Ｓｈａｒｉｎｇ ｂｙ Ｉｄｅｎｔｉｔｙ Ｏｐｅｒａｔｉｏｎ Ｉｎｓｅｒｔｉｏｎ”  Ｐｒｏｃｅｅｄｉｎｇｓ ｏｆ ｔｈｅ ＩＣＣＡＤ １９９９， １９９９ ＩＥＥＥ （ＩＳＢＮ： ０−７８０３−５８３２）
【発明の開示】
【発明が解決しようとする課題】
【００３６】
しかしながら、非特許文献２に開示されている従来の手法では、探索されるサブグラフの形状が枝別れのないｎ段のグラフに限られているため、そのサブグラフを実行する回路において、多数のセレクタが必要になる場合がある。
【００３７】
例えばサブグラフが図１９（ａ）に示すような４段のグラフである場合、そのサブグラフを２箇所で使用するためには、図１９（ｂ）に示すような回路が必要となり、最大５個のセレクタが必要になる場合がある。したがって、この従来の手法では、回路を共有する場合に必要なセレクタが少なく、共有による面積削減効果が大きいサブグラフを探すことができない。
【００３８】
例えば図２０（ａ）に示すような枝分かれを有するサブグラフは、多くの演算を含むにも関わらず、２箇所で共有するときに必要なセレクタは、図２０（ｂ）に示すように一つである。
【００３９】
このように、途中の処理は多いが、入力と出力が少ないサブグラフが見つかれば、そのサブグラフを実行する回路を共有するためのセレクタが少なくて済むため、面積削減効果が大きい。
【００４０】
しかしながら、このようなサブグラフは、上記従来の手法によって探索されるサブグラフの条件を満たしておらず、上記従来の手法では探すことができない。
【００４１】
一方、上記従来の手法では、図２０（ａ）に示すような枝別れを有する演算を探索可能なように、上記従来の手法で規定したサブグラフの条件を外してしまうと、非常に処理時間がかかり、実用的でなくなる。
【００４２】
即ち、図２１（ａ）〜図２１（ｄ）に各事例を示すように、サブグラフの形状のパターンが無数にあり、データフローグラフに含まれるサブグラフの個数が非常に多数になるため、実用的な処理時間では同一サブグラフが見つからないことになる。
【００４３】
本発明は、上記従来の問題を解決するもので、データフローグラフ中の同一のサブグラフを検出する際に、それらのサブグラフの動作を共通の回路で実行することによる面積削減効果が大きいサブグラフを高速に検出できるデータフローグラフの同一サブグラフ検出装置、これを用いた高位合成装置、この同一サブグラフ検出装置を用いたデータフローグラフの同一サブグラフ検出方法、この方法の各処理手順をコンピュータに実行させるためのデータフローグラフの同一サブグラフ検出制御プログラムおよびその制御プログラムが記録されたコンピュータ読み取り可能な可読記録媒体を提供することを目的とする。
【課題を解決するための手段】
【００４４】
本発明のデータフローグラフの同一サブグラフ検出装置は、ディジタル回路動作について、演算を示す複数の節点と、該節点に入出力するデータの流れを示す枝とで表されたデータフローグラフ中、一または複数の条件分岐から一つの条件分岐を選択する条件分岐選択手段と、選択された条件分岐に含まれる節点集合を選択する節点集合選択手段と、選ばれた節点集合をいくつかのグループに分ける節点グループ化手段と、分けられたグループのそれぞれを各サブグラフとして、該条件分岐選択手段、該節点集合選択手段および該節点グループ化手段による各処理を該一または複数の条件分岐に対して行って得られる複数のサブグラフを比較して同一サブグラフを検出するサブグラフ比較手段とを有し、そのことにより上記目的が達成される。
【００４５】
また、好ましくは、本発明のデータフローグラフの同一サブグラフ検出装置における節点グループ化手段により分けられたグループの入力部および出力部の少なくともいずれかを、回路占有面積に関してコンパクト化したサブグラフを出力するグラフコンパクト化手段を更に有する。
【００４６】
さらに、好ましくは、本発明のデータフローグラフの同一サブグラフ検出装置における条件分岐選択手段は、前記条件分岐を所定または任意の順序で選択する。
【００４７】
さらに、好ましくは、本発明のデータフローグラフの同一サブグラフ検出装置における節点集合選択手段は、前記条件分岐の条件が「真」のときに実行される真ブロックに含まれる節点と、「偽」のときに実行される偽ブロックに含まれる節点とを前記節点集合として選択する。
【００４８】
さらに、好ましくは、本発明のデータフローグラフの同一サブグラフ検出装置における節点集合選択手段は、前記条件分岐の条件が「真」のときに実行される真ブロックからの出力と、「偽」のときに実行される偽ブロックからの出力とを選択するセレクタ節点を前記節点集合に加える。
【００４９】
さらに、好ましくは、本発明のデータフローグラフの同一サブグラフ検出装置における節点グループ化手段は、前記条件分岐の条件が「真」または「偽」のときに実行される真ブロックまたは偽ブロックの出力を生成する各出力節点に対して、該真ブロックまたは該偽ブロックに含まれる各節点について、その出力が影響を及ぼす該各出力節点の組合せを求めて、該各出力節点の組合わせ中で共通する節点グループとそれ以外の該各出力節点毎の節点グループとにグループ分けする。
【００５０】
さらに、好ましくは、本発明のデータフローグラフの同一サブグラフ検出装置における節点グループ化手段は、前記セレクタ節点を、前記条件分岐の条件が「真」または「偽」のときに実行される真ブロックまたは偽ブロックの出力を生成する各出力節点として、該真ブロックまたは該偽ブロックに含まれる各節点について、その出力が影響を及ぼす該各出力節点の組合せを求めて、該各出力節点の組合わせ中で共通する節点グループとそれ以外の該各出力節点毎の節点グループとにグループ分けする。
【００５１】
さらに、好ましくは、本発明のデータフローグラフの同一サブグラフ検出装置におけるグラフコンパクト化手段は、前記節点グループ化手段により分けられたグループの入力部にある各節点に着目して、前記サブグラフを実行する回路の占有面積および、該回路を複数箇所で共有する場合に必要なセレクタの占有面積の合計と、着目節点を該サブグラフから取り除いたサブグラフを実行する回路の占有面積、当該回路を複数箇所で共有する場合に必要なセレクタの占有面積および、取り除いた該着目節点を実行するために必要な演算器の占有面積の合計とを比較して、後者の合計が前者の合計よりも小さい場合に該サブグラフから該着目節点を取り除いて該入力部をコンパクト化する。
【００５２】
さらに、好ましくは、本発明のデータフローグラフの同一サブグラフ検出装置におけるグラフコンパクト化手段は、前記節点グループ化手段により分けられたグループの前記各出力節点が前記セレクタ節点で、かつ、該セレクタ節点の入力側に繋がっている複数の節点が全て同一演算種類である場合に、該セレクタ節点の各入力側に同一演算種類の節点がそれぞれ接続されているサブグラフを実行する回路の占有面積と、該同一演算種類の一つの節点の入力側に該セレクタ節点の出力が接続されている別のサブグラフを実行する回路の占有面積とを比較して、前者の占有面積が後者の占有面積よりも大きい場合に該同一電算種類の一つの節点の入力側に該セレクタ節点の出力が接続するようにサブグラフを変更する。
【００５３】
さらに、好ましくは、本発明のデータフローグラフの同一サブグラフ検出装置におけるサブグラフ比較手段は、前記各サブグラフの形状に一対一対応させた文字列を作成してそれらの文字列を比較し、同一の文字列を検出することにより同一のサブグラフを検出する。
【００５４】
さらに、好ましくは、本発明のデータフローグラフの同一サブグラフ検出装置におけるサブグラフ比較手段は、前記文字列をハッシュ関数に入力して得られるハッシュ値を比較し、同一ハッシュ値を検出することにより同一文字列を検出して同一のサブグラフを検出する。
【００５５】
本発明の高位合成装置は、請求項１〜１１のいずれかに記載の上記データフローグラフの同一サブグラフ検出装置を用いて生成したデータフローグラフに対して、スケジューリング処理およびアロケーション処理を行い、スケジューリング結果およびアロケーション結果に基づいてデータパスおよびコントローラを生成して回路図を自動設計し、そのことにより上記目的が達成される。
【００５６】
本発明のデータフローグラフの同一サブグラフ検出方法は、ディジタル回路動作について、演算を示す複数の節点と、該節点に入出力するデータの流れを示す枝とで表されたデータフローグラフ中、一または複数の条件分岐から一つの条件分岐を選択する条件分岐選択ステップと、選択された条件分岐に含まれる節点集合を選択する節点集合選択ステップと、選択された節点集合をいくつかのグループに分ける節点グループ化ステップと、分けられたグループのそれぞれを各サブグラフとして、該条件分岐選択ステップ、該節点集合選択ステップおよび該節点グループ化ステップを該一または複数の条件分岐に対して行って得られる複数のサブグラフを比較して同一サブグラフを検出するサブグラフ比較ステップとを有し、そのことにより上記目的が達成される。
【００５７】
また、好ましくは、本発明のデータフローグラフの同一サブグラフ検出方法における節点グループ化ステップにより分けられたグループの入力部および出力部の少なくともいずれかを、回路占有面積に関してコンパクト化したサブグラフを出力するグラフコンパクト化ステップを更に有する。
【００５８】
さらに、好ましくは、本発明のデータフローグラフの同一サブグラフ検出方法における条件分岐選択ステップは、前記条件分岐を所定または任意の順序で選択する。
【００５９】
さらに、好ましくは、本発明のデータフローグラフの同一サブグラフ検出方法における節点集合選択ステップは、前記条件分岐の条件が「真」のときに実行される真ブロックに含まれる節点と、「偽」のときに実行される偽ブロックに含まれる節点とを前記節点集合として選択する。
【００６０】
さらに、好ましくは、本発明のデータフローグラフの同一サブグラフ検出方法における節点集合選択ステップは、前記条件分岐の条件が「真」のときに実行される真ブロックからの出力と、「偽」のときに実行される偽ブロックからの出力とを選択するセレクタ節点を前記節点集合に加える。
【００６１】
さらに、好ましくは、本発明のデータフローグラフの同一サブグラフ検出方法における節点グループ化ステップは、前記条件分岐の条件が「真」または「偽」のときに実行される真ブロックまたは偽ブロックの出力を生成する各出力節点に対して、該真ブロックまたは該偽ブロックに含まれる各節点について、その出力が影響を及ぼす該各出力節点の組合せを求めて、該各出力節点の組合わせ中で共通する節点グループとそれ以外の該各出力節点毎の節点グループとにグループ分けする。
【００６２】
さらに、好ましくは、本発明のデータフローグラフの同一サブグラフ検出方法における節点グループ化ステップは、前記セレクタ節点を、前記条件分岐の条件が「真」または「偽」のときに実行される真ブロックまたは偽ブロックの出力を生成する各出力節点として、該真ブロックまたは該偽ブロックに含まれる各節点について、その出力が影響を及ぼす該各出力節点の組合せを求めて、該各出力節点の組合わせ中で共通する節点グループとそれ以外の該各出力節点毎の節点グループとにグループ分けする。
【００６３】
さらに、好ましくは、本発明のデータフローグラフの同一サブグラフ検出方法におけるグラフコンパクト化ステップは、前記節点グループ化ステップにより分けられたグループの入力部にある各節点に着目して、前記サブグラフを実行する回路の占有面積および、該回路を複数箇所で共有する場合に必要なセレクタの占有面積の合計と、着目節点を該サブグラフから取り除いたサブグラフを実行する回路の占有面積、当該回路を複数箇所で共有する場合に必要なセレクタの占有面積および、取り除いた該着目節点を実行するために必要な演算器の占有面積の合計とを比較して、後者の合計が前者の合計よりも小さい場合に該サブグラフから着目節点を取り除いて該入力部をコンパクト化する。
【００６４】
さらに、好ましくは、本発明のデータフローグラフの同一サブグラフ検出方法におけるグラフコンパクト化ステップは、前記節点グループ化ステップにより分けられたグループの前記出力節点が前記セレクタ節点で、かつ、該セレクタ節点の入力側に繋がっている複数の節点が全て同一演算種類である場合に、該セレクタ節点の各入力側に同一演算種類の節点がそれぞれ接続されているサブグラフを実行する回路の占有面積と、該同一演算種類の一つの節点の入力側に該セレクタ節点の出力が接続されている別のサブグラフを実行する回路の占有面積とを比較して、前者の占有面積が後者の占有面積よりも大きい場合に該同一演算種類の一つの節点の入力側に該セレクタ節点の出力が接続するようにサブグラフを変更する。
【００６５】
さらに、好ましくは、本発明のデータフローグラフの同一サブグラフ検出方法におけるサブグラフ比較ステップは、前記各サブグラフの形状に一対一対応させた文字列を作成してそれらの文字列を比較し、同一の文字列を検出することにより同一のサブグラフを検出する。
【００６６】
さらに、好ましくは、本発明のデータフローグラフの同一サブグラフ検出方法におけるサブグラフ比較ステップは、前記文字列をハッシュ関数に入力して得られるハッシュ値を比較し、同一ハッシュ値を検出することにより同一文字列を検出して同一のサブグラフを検出する。
【００６７】
本発明のデータフローグラフの同一サブグラフ検出制御プログラムは、請求項１３〜２３のいずれかに記載の上記データフローグラフの同一サブグラフ検出方法をコンピュータに実行させるための各処理ステップが記述されており、そのことにより上記目的が達成される。
【００６８】
本発明の可読記録媒体は、請求項２４に記載の上記データフローグラフの同一サブグラフ検出制御プログラムが記録されたコンピュータ読み取り可能な記録媒体であって、そのことにより上記目的が達成される。
【００６９】
上記構成により、以下に、本発明の作用を説明する。
【００７０】
本発明にあっては、効率良く同一のサブグラフを探すために、条件分岐に着目する。条件分岐内には、似たような処理が記述される場合が頻繁にあり、条件分岐の周辺を探索することにより、効率的に同一のサブグラフを見つけることが可能となる。
【００７１】
まず、データフローグラフ中、ある一つの条件分岐を選び、選ばれた条件分岐に含まれる節点集合を選んで、選ばれた節点集合をいくつかのグループに分ける。これらの処理を各条件分岐に対して行い、分けられたグループのそれぞれをサブグラフとして、複数のサブグラフを比較して同一サブグラフを検出する。
【００７２】
例えば、節点集合を選択する際には、真ブロックおよび偽ブロックに含まれる節点が選択される。また、真ブロックおよび偽ブロックの出力を選択するセレクタ節点を加えてもよい。
【００７３】
節点グループ化の際には、真ブロックまたは偽ブロックに含まれる各演算節点について、その出力が影響を及ぼす出力節点の組合せが求められ、出力節点の組合わせが同じである節点が同じグループとされる。このように決まった法則でグループ化することにより、別の箇所に同一のデータフローグラフがある場合に、全く同一のグループ分けが為され、別の箇所に類似したデータフローグラフがある場合には、共通部分をグループとして取り出すことができる可能性が高まる。
【００７４】
また、サブグラフの入力部と出力部をコンパクト化することにより、共有時に必要となるセレクタ数を削減することが可能となる。
【００７５】
例えば、サブグラフの入力部にある各演算節点に着目して、そのサブグラフを実行する回路の占有面積およびその回路を複数箇所で共有する場合に必要なセレクタの占有面積の合計と、着目演算節点をサブグラフから取り除いたサブグラフを実行する回路の占有面積、その回路を複数箇所で共有する場合に必要なセレクタの占有面積、および取り除いた着目演算節点を実行するために必要な演算器の占有面積の合計とを比較して、後者が小さい場合にサブグラフから着目演算節点を取り除くように制御することが可能となる。
【００７６】
また、サブグラフの出力節点がセレクタで、かつ、そのセレクタの入力に継っている複数の節点が全て同一の演算種類Ａである場合に、セレクタの各入力に種類Ａの演算がそれぞれ接続されているサブグラフを実行する回路の占有面積と、種類Ａの一つの演算の入力にセレクタ出力が接続されている別のサブグラフを実行する回路の占有面積とを比較して、前者が大きい場合に種類Ａの一つの演算の入力にセレクタ出力が接続するようにサブグラフを変更することが可能となる。
【００７７】
サブグラフを比較する際には、文字列やハッシュ値を比較することにより、効率的に同一サブグラフを検出することが可能となる。
【発明の効果】
【００７８】
以上のように、本発明によれば、データフローグラフ内の同一サブグラフを高速に検出することができて、それら複数の同一サブグラフを、共通の回路を用いて処理することにより、ハードウェアの面積増大とコスト増加を防ぐことができる。
【００７９】
また、検出されるサブグラフとしては、それらサブグラフを処理する回路を共有するときに必要となるセレクタが少なく、共有による面積削減効果が高いものを得ることができる。
【発明を実施するための最良の形態】
【００８０】
以下に、本発明のデータフローグラフの同一サブグラフ検出装置およびこれを用いた同一サブグラフ検出方法の実施形態１，２について、図面を参照しながら説明する前に、まず、効率良く同一サブグラフを探すために着目する条件分岐を含むデータフローグラフについて説明する。
【００８１】
なお、本発明では、データフローグラフから効率良く同一サブグラフを探すために、ループや条件分岐など、データフローグラフ中の階層構造に着目する。ループのデータフローグラフには、処理の継続を判定するための条件分岐が含まれているため、以下では、条件分岐に着目して説明する。
【００８２】
図１（ａ）は、本発明で着目する条件分岐を含むＣ言語による動作記述の一例であり、図１（ｂ）は、図１（ａ）のデータフローグラフの一例を示す図である。
【００８３】
図１（ｂ）に示すように、比較器１１は、条件分岐の条件（ｉ＞０）を判定するための比較器であり、その比較結果が分岐節点１２に入力される。
【００８４】
分岐節点１２では、入力が例えば「１」の場合にブロック１３が実行され、入力が例えば「０」の場合にブロック１４が実行されるように、コントロール信号を発生する。このコントロール信号は、破線のコントロール枝１５および１６でデータの流れとして表されている。
【００８５】
破線で表されたブロック１３は、条件が「真」のときに内部のデータフローグラフが実行されるブロックであり、以下、これを真ブロックと呼ぶ。また、ブロック１４は、条件が「偽」のときに実行されるブロックであり、以下、これを偽ブロックと呼ぶ。
【００８６】
ブロック１３，１４からの各出力は、セレクタ節点１７に入力されており、条件に応じて真ブロック１３の処理結果と偽ブロック１４からの処理結果とのいずれかが選択される。節点１８は、条件分岐が収束する結合節点である。
【００８７】
このデータフローグラフでは、ｉ＞０の場合に真ブロック１３内のデータフローグラフが実行されて、ｊ＋ｉの値が新たなｊとして出力される。また、ｉ＜または＝０の場合に偽ブロック１４内のデータフローグラフが実行されて、ｊ−ｉの値が新たなｊとして出力される。
【００８８】
このようなコントロール信号を含んだデータフローグラフは、コントロールデータフローグラフ（ＣＤＦＧ）とも呼ばれるが、ここでは単にデータフローグラフと呼ぶ。
【００８９】
このような条件分岐は、動作記述中に多数用いられ、各条件分岐内に似たような処理が記述される場合が頻繁にある。よって、条件分岐の周辺を探索することにより、効率的に同一のサブグラフを検出することが可能になる。ループについても、前述したように処理の継続を判定するための条件分岐が含まれているため、上記条件分岐の場合と同様である。
【００９０】
例えば、図２に示すＣ言語による動作記述は、二つの条件分岐を含んでいる。一つ目の条件分岐では条件にしたがって変数ｘの値が変更され、二つ目の条件分岐では条件にしたがって変数ｙの値が変更される。この事例では、一つ目の条件分岐でｉ＜５の場合にｘ＋１０の値が新たなｘの値として出力され、ｉ＞または＝５の場合にｘ−５の値が新たなｘの値として出力される。また、二つ目の条件分岐でｊ＜５の場合にｙ＋１０の値が新たなｙの値として出力され、ｊ＞または＝５の場合にｙ−５の値が新たなｙの値として出力される。
【００９１】
しかしながら、このデータフローグラフにおいては、変数の名前は関係せず、データの演算のみがグラフとして表される。よって、両条件分岐には同一のサブグラフが現れることになる。したがって、条件分岐やループの周辺を探索することにより、効率的に同一のサブグラフを検出することが可能になる。
（実施形態１）
図３は、本発明のデータフローグラフの同一サブグラフ検出装置の実施形態１を含む高位合成装置の構成例を示すブロック図である。
【００９２】
図３において、本実施形態１の高位合成装置１０は、デジタル回路の動作記述を格納する動作記述格納部１と、所定の動作記述からデータフローグラフを生成するデータフローグラフ生成手段２と、生成されたデータフローグラフを格納するデータベース３と、データベース３にアクセス可能とするデータフローグラフの同一サブグラフ検出装置４と、検出した同一サブグラフを格納する同一サブグラフ検出結果格納部５とを有している。なお、高位合成装置１０は、このデータフローグラフに対して、スケジューリング処理とアロケーション処理を行い、スケジューリング結果およびアロケーション結果を元に、データパスおよびコントローラを生成してハードウェア（回路図）を得るが、ここでは本発明に直接関係しないので省略する。
【００９３】
データフローグラフ生成手段２は、ハードウェア構造に関する情報が含まれず、処理のアルゴリズムのみが記述された動作記述から、データの流れが解析されて、データフローグラフと呼ばれるモデルが作成される。このデータフローグラフは、各処理を示す複数の節点と、各節点間を接続する枝とから構成されている。節点はディジタル回路中で実行されるある一つの演算を表しており、枝は演算（節点）から演算（節点）へのデータの流れを表している。演算を表す節点を枝で適切に接続することにより、ディジタル回路の動作をデータフローグラフとして表すことが可能となる。データフローグラフ中の各節点は、入力枝と出力枝とによって接続され、入力枝が演算に与えられるデータを表し、出力枝が演算結果のデータを表す。また、各節点にはそれぞれ、演算の種類の情報なども含まれている。
【００９４】
データベース３は、データフローグラフ生成手段２によって生成されたデータフローグラフを格納する。
【００９５】
データフローグラフの同一サブグラフ検出装置４は、条件分岐選択手段４１と、節点集合選択手段４２と、節点グループ化手段４３と、グラフコンパクト化手段４４と、サブグラフ比較手段４５とを有して、データベース３内のデータフローグラフが参照されて、そのデータフローグラフ内の同一サブフラクが検出される。
【００９６】
条件分岐選択手段４１では、データベース３内のデータフローグラフ中、一または複数の条件分岐から任意の順序で一つの条件分岐が選択される。
【００９７】
節点集合選択手段４２では、条件分岐選択手段４１によって選ばれた条件分岐に含まれる節点集合が選択される。
【００９８】
節点グループ化手段４３では、節点集合選択手段４２によって選ばれた節点集合がいくつかのグループに分けられる。
【００９９】
グラフコンパクト化手段４４では、節点グループ化手段４３により分けられたグループの入力部および出力部がコンパクト化されてサブグラフとして出力される。
【０１００】
サブグラフ比較手段４５では、条件分岐選択手段４１、節点集合選択手段４２、節点グループ化手段４３およびグラフコンパクト化手段４４による各処理が各条件分岐に対して行われて得られる複数のサブグラフが比較されて、同一サブグラフが検出される。
【０１０１】
以下に、本実施形態１のデータフローグラフの同一サブグラフ検出装置４を用いたデータフローグラフの同一サブグラフ検出方法について具体的に説明する。  
【０１０２】
図４は、図１のデータフローグラフの同一サブグラフ検出装置４を用いたデータフローグラフの同一サブグラフ検出方法の処理手順を説明するためのフローチャートである。以下では、図４のフローチャートに従って本実施形態１のデータフローグラフの同一サブグラフ検出方法の各処理手順について説明する。
【０１０３】
図４に示すように、まず、ステップＳ１で、図３の条件分岐選択手段４１によって、データフローグラフ中、ある一つの条件分岐が選択される。全ての条件分岐に対してステップＳ１〜Ｓ４の処理が繰り返し実効される。このため、複数の条件分岐からある一つの条件分岐を選択する順序は任意でよい。
【０１０４】
次に、ステップＳ２では、節点集合選択手段４２によって、ステップＳ１で選択された条件分岐に含まれる節点集合が選択される。この条件分岐に含まれる節点集合としては、その条件分岐の条件が「真」のときに実行される真ブロックに含まれる節点と、「偽」のときに実行される偽ブロックに含まれる節点とが選択される。
【０１０５】
例えば図５に示す条件分岐を含むデータフローグラフの場合、真ブロック２１に含まれる節点Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆ，Ｇと、偽ブロック２２に含まれる節点Ｈ，Ｉ，Ｊ，Ｋとが選ばれる。ここで、節点ＬとＭとはセレクタ節点であり、本実施形態１では節点集合として選択されていない。なお、図５では、セレクタのコントロール信号は省略している。
【０１０６】
ステップＳ３では、節点グループ化手段４３によって、ステップＳ２で選択された節点集合がいくつかのグループに分けられる。
【０１０７】
ここでは、条件分岐の条件が「真」または「偽」のときに実行される真ブロックまたは偽ブロックの出力を生成する出力節点（最終の出力節点）に対して、その真ブロックまたは偽ブロックに含まれる各演算節点について、その出力が影響を及ぼす各最終の出力節点に繋がった節点の組合せが求められて、この各最終の出力節点の組合わせ中で共通する節点グループを別の節点グループ（節点の組合せ）とする。ここでは、データフローグラフやサブグラフ中で最も下流にあり、そのグラフ全体の出力の値を生成する節点を、出力節点と呼ぶ。
【０１０８】
このグループ分けは、例えば以下のような処理手順（１）〜（４）により行われる。
（１）条件分岐の条件が「真」または「偽」のときに実行される真ブロックまたは偽ブロックの最終の出力側に位置する出力節点（最終の出力節点）を選択する。例えば図５の事例では、節点Ｅ，Ｇ，Ｉ，Ｋが選ばれる。
（２）それぞれの各最終の出力節点について、その節点の入力枝に繋がっている節点を、データフローグラフを上方向（上流側）に探索することにより求める。このとき、他の節点を経由してもよい。例えば図５の事例では、出力節点Ｅに繋がっている節点はＡ，Ｂ，Ｃ，Ｄである。また、出力節点Ｇに繋がっている節点はＡ，Ｂ，Ｃ，Ｆである。さらに、出力節点Ｉに繋がっている節点はＨである。さらに、出力節点Ｋに繋がっている節点はＪである。
（３）各節点について、その節点が共通に繋がっているかどうかで出力節点の集合を求める。節点が出力節点である場合には、自分自身に継っているものとする。例えば図５の事例では、節点Ａ，Ｂ，Ｃは出力節点ＥとＧに共通に繋がっている。また、節点Ｄ，Ｅは出力節点Ｅに継っている。さらに、節点Ｆ，Ｇは出力節点Ｇに継っている。さらに、節点Ｈ，Ｉは出力節点Ｉに継っている。さらに、節点Ｊ，Ｋは出力節点Ｋに継っている。
（４）繋がっている出力節点の集合が同じ節点を一つのグループとする。即ち、各最終の出力節点の組合わせ中で共通する節点グループを別の節点グループ（節点の組合せ）とする。例えば図５の事例では、節点Ａ，Ｂ，Ｃのグループ、節点Ｄ，Ｅのグループ、節点Ｆ，Ｇのグループ、節点Ｈ，Ｉのグループ、節点Ｊ，Ｋのグループに分かれる。
【０１０９】
このように、決まった法則で節点をグループ分け（グループ化）することにより、別の箇所に同一のデータフローグラフがある場合には、全く同一のグループ分けが為される。また、別の箇所に類似したデータフローグラフがある場合には、共通部分をグループとして取り出すことができる可能性が高まる。
【０１１０】
例えば、図６は、図５に類似したデータフローグラフである。全体のデータフローグラフ中に、図５に示すような条件分岐のデータフローグラフと、図６に示すデータフローグラフが真ブロックまたは偽ブロックに含まれる条件分岐のデータフローグラフの両方がある場合に、図６に示す各節点は、節点Ａ，Ｂ，Ｃのグループ、節点Ｄ，Ｅのグループ、節点Ｇのみのグループに分けられることになり、節点Ａ，Ｂ，Ｃのグループと節点Ｄ，Ｅのグループを図５と図６の間での同一サブグラフとして取り出すことが可能となる。さらに、図５または図６の節点Ａ，Ｂ，Ｃのグループのように、枝別れのあるサブグラフを取り出すことも可能になる。
【０１１１】
ここでまた、図４のフローチャートに戻って説明する。
【０１１２】
ステップＳ３で得られた節点グループをそのままサブグラフとしてデータベース３に記憶させてもよいが、ここでは、ステップＳ３で得られた節点グループは、図１９（ｂ）の場合と同様に、入力数が多くなり、回路共有時に多くのセレクタを必要とする可能性がある。そこで、ステップＳ４では、グラフコンパクト化手段４４によって、グループの入力部がコンパクト化されて、共有時に必要となるセレクタ数が削減される。
【０１１３】
例えばステップＳ３で図７（ａ）に示す節点グループＡ，Ｂ，Ｃが得られ、それをそのままサブグラフとして取り出した場合には、図７（ａ）に示す回路を共有して２箇所で用いるためには、図７（ｂ）に示すように、４つの２入力セレクタ３１〜３４を含む回路が必要になる。
【０１１４】
図７（ａ）の節点グループＡ，Ｂ，Ｃから節点Ｂを取り除いて、図８（ａ）に示す節点グループＡ，Ｃとすると、図８（ａ）に示す回路を共有して２箇所で用いるためには、図８（ｂ）に示すような三つの２入力セレクタ３１，３２，３５を含む回路となる。さらに、図８（ｂ）には示していないが、節点Ｂの演算を行うための演算器が別に２個必要になる。
【０１１５】
よって、図７（ｂ）の回路と図８（ｂ）の回路とを比較してみると、図８（ｂ）では図７（ｂ）に比べて演算器Ｂが１個多く、セレクタは１個少なくなる。
【０１１６】
即ち、演算器Ｂの占有面積がセレクタの占有面積よりも大きい場合には図７の方が好ましく、演算器Ｂの占有面積がセレクタの占有面積よりも小さい場合には図８の方が好ましい。
【０１１７】
したがって、グループの入力部にある各演算節点に着目して、そのサブグラフを実行する回路の面積およびその回路を複数箇所で共有する場合に必要なセレクタの面積の合計（例えば図７の回路）と、着目演算節点をサブグラフから取り除いたサブグラフを実行する回路の面積、その回路を複数箇所で共有する場合に必要なセレクタの面積、および取り除いた着目演算節点を実行するために必要な演算器の面積の合計（例えば図８の回路）とを比較して、後者が小さい場合には、サブグラフから着目演算節点を取り除いて（図８の回路をサブグラフとする）、グループの入力部をコンパクト化する。
【０１１８】
さらに、演算の入力と出力のビット数が異なる演算の場合には、セレクタについては個数だけでなく、面積も考慮する必要がある。例えば、図７（ｂ）のセレクタ３１，３２と、図８（ｂ）のセレクタ３５とは、ビット幅が異なり、それぞれ面積が異なる可能性がある。
【０１１９】
一般的には、ある着目演算Ｆに対して、
（演算器Ｆの入力ビット数のセレクタの面積）×（入力数）
＞（演算器Ｆの面積）＋（演算器Ｆの出力ビット数のセレクタの面積）×（出力数）
の場合には、その演算は演算グループから外す方が好ましい。
【０１２０】
図４のステップＳ４では、上記処理手順を、サブグループの入力部にある各節点に対して繰り返し適用すればよい。
【０１２１】
即ち、
（１）全入力が節点グループに属さない節点に繋がっている節点を集合Ｓとする。
（２）集合Ｓ中の一つの演算Ｆを表す節点について、
（演算器Ｆの入力ビット数のセレクタの面積）×（入力数）
＞（演算器Ｆの面積）＋（演算器Ｆの出力ビット数のセレクタの面積）×（出力数）
であれば、その節点を節点グループから外し、新たに全入力が節点グループに属さない節点に繋がっている節点が発生すれば集合Ｓに加える。
（３）集合Ｓから演算Ｆを削除する。
（４）集合Ｓが空になるまで上記（２）から（３）を繰り返す。
【０１２２】
このようにして、ステップＳ４で得られた節点グループは、データベース３のサブグラフとして記憶される。これにより、回路を共有する時に必要なセレクタが少なく、共有する効果が大きいサブグラフが得られる。
【０１２３】
次に、図４のステップＳ５では、ステップＳ２〜Ｓ４の処理が、全ての条件分岐について行なわれるように、繰り返される。
【０１２４】
さらに、ステップＳ６では、サブグラフ比較手段４５によって、ステップＳ１〜Ｓ５までの処理によってデータベース３に記憶された複数のサブグラフが比較されて、同一サブグラフが検出される。
【０１２５】
ここで、同一サブグラフを検出するためには、各サブグラフの形状を比較してもよいが、節点と枝の接続や、節点の演算種類情報などの全てを比較する必要があり、一回毎の比較が繁雑で、処理に時間がかかってしまう。
【０１２６】
そこで、サブグラフを比較して同一サブグラフを検出するためには、以下に示すように、文字列を用いる方法が、より効率的である。これを手順（１）〜（３）に示す。
（１）各サブグラフを文字列で表す。
（２）各サブグラフを文字列をキーとしてソ−トする。
（３）隣合う文字列を比較して、等しい場合には同一サブグラフとして出力する。
【０１２７】
まず、サブグラフを文字列で表す。サブグラフを文字列で表す方法は、サブグラフの形状と文字列とを一対一で対応させることができるものであれば、どのような方法でもよく、また、サブグラフを数字列（数字列はここで言う文字列に含む）で表してもよい。
【０１２８】
図９に、サブグラフを文字列で表す方法の一例を示す。
【０１２９】
図９（ａ）はデータフローグラフの一例であり、図９（ｂ）は図９（ａ）を文字列で表した一例である。
【０１３０】
図９（ｂ）の文字列は、Ａ（Ｂ，Ｃ）、Ｂ（Ｉ１，Ｉ２）、Ｃ（Ｂ，Ｉ３）の三つの部分に分解することが可能であり、それぞれが各節点の種類と入力の接続先とを示している。即ち、文字列Ａ（Ｂ，Ｃ）は、節点Ａの１番目の入力が節点Ｂにつながり、２番目の入力が節点Ｃに継っていることを示す。また、文字列Ｂ（Ｉ１，Ｉ２）は、節点Ｂの１番目の入力がサブグラフの１番目の入力であり、２番目の入力がサブグラフの２番目の入力であることを示す。さらに、文字列Ｃ（Ｂ，Ｉ３）は、節点Ｃの１番目の入力が節点Ｂにつながり、２番目の入力はサブグラフの３番目の入力であることを示す。
【０１３１】
文字列Ａ（Ｂ，Ｃ）、文字列Ｂ（Ｉ１，Ｉ２）、文字列Ｃ（Ｂ，Ｉ３）の各部分を、図９（ａ）に示すサブグラフの出力から出発して、深さ優先および左側優先の順序で並べたものが、図９（ｂ）である。
【０１３２】
このようにサブグラフを文字列で表すと、各節点の出現順序が一意的に決定されるため、サブグラフの形状と文字列とを一対一対応させることができる。実際には、各節点の演算の種類に関する情報や、ビット幅に関する情報についても、文字列に埋め込まれるようにする。
【０１３３】
次に、文字列を文字コード順にソートする。文字列をソートするためには、クイックソートなどのような一般的なアルゴリズムを用いることができる。
【０１３４】
次に、ソート結果で隣合う文字列を比較して、同じ文字列であれば、それらの文字列に対応する二つのサブグラフは同一であると判定される。各文字列はソートされているため、同一の文字列は必ず隣合うことになるため、隣合わせの文字列のみを比較すればよい。
【０１３５】
ここで、サブグラフに含まれる節点数が多くなると、文字列が長くなり、文字列のソートや比較のために時間がかかるようになる可能性がある。そのような場合には、ＭＤ５のような、認証やディジタル署名などに用いられるハッシュ関数を用いて、各文字列から生成されたハッシュ値を文字列の代わりに用いることができる。ＭＤ５は、ＩＥＴＦ（Ｉｎｔｅｒｎｅｔ  Ｅｎｇｉｎｅｅｒｉｎｇ  Ｔａｓｋ  Ｆｏｒｃｅ）において、ＲＦＣ１３２１として標準化されている。
【０１３６】
ハッシュ値は、元の文字列よりもはるかに短いため、ソートや比較を行なう時間を短縮化することができる。
【０１３７】
ＭＤ５のような手法では、初期値敏感性が不可逆な一方向関数によって、疑似的な乱数のようなハッシュ値が生成される。よって、同じハッシュ値が生成されるような別の元文字列を作成することは極めて困難であり、異なる元文字列から同一のハッシュ値が得られる可能性は無視できるほど小さい。
【０１３８】
このため、ハッシュ値が等しい場合には元の文字列も等しくなり、短時間で同一文字列を検出して、同一サブグラフを検出することが可能となる。
【０１３９】
以上のように、本実施形態１によれば、データフローグラフ中、ある一つの条件分岐を選び、選ばれた条件分岐に含まれる節点集合を選んで、選ばれた節点集合をいくつかのグループに分ける。これらの処理を各条件分岐に対して行い、分けられたグループのそれぞれをサブグラフとして、複数のサブグラフを比較して同一サブグラフを検出することにより、条件分岐の周辺を探索することにより、より効率的に同一のサブグラフを容易かつ正確に見つけることができる。
【０１４０】
また、決まった法則で節点をグループ化することにより、別の箇所に同一のデータフローグラフがある場合に全く同一のグループ分けを行い、別の箇所に類似したデータフローグラフがある場合に共通部分をグループとして取り出して、同一のサブグラフを容易かつ正確に検出することができる。
【０１４１】
さらに、サブグラフの入力部をコンパクト化することにより、占有回路面積を削減するべく、共有時に必要となるセレクタ数を削減することができる。
【０１４２】
さらに、サブグラフを比較する際に、文字列やハッシュ値を比較することにより、より効率的に同一サブグラフを検出することができる。
【０１４３】
したがって、本実施形態１によれば、データフローグラフ内の同一サブグラフを高速かつ正確に検出して、それら複数の同一サブグラフを、共通の回路を用いて処理することにより、ハードウェアの面積増大とコスト増加を防ぐことができる。
【０１４４】
さらに、検出されるサブグラフとしては、それらサブグラフを処理する回路を共有するときに必要となるセレクタが少なく、共有による面積削減効果が高いものを得ることができる。
（実施形態２）
上記実施形態１で説明した図４のフローチャートでは、ステップＳ２において、条件分岐に含まれる節点集合として、真ブロックおよび偽ブロック内の節点を選択したが、本実施形態２では、条件分岐の条件が「真」のときに実行される真ブロックからの出力と「偽」のときに実行される偽ブロックからの出力とを選択するセレクタ節点も節点集合に加える場合である。
【０１４５】
図３に示すように、本実施形態２の高位合成装置１０Ａは、データフローグラフの同一サブグラフ検出装置４Ａを有している。データフローグラフの同一サブグラフ検出装置４Ａは、条件分岐選択手段４１と、節点集合選択手段４２Ａと、節点グループ化手段４３Ａと、グラフコンパクト化手段４４Ａと、サブグラフ比較手段４５とを有して、データベース３内のデータフローグラフが参照されて、そのデータフローグラフ内の同一サブフラクが検出される。
【０１４６】
節点集合選択手段４２Ａは、条件分岐の条件が「真」のときに実行される真ブロックに含まれる節点と、「偽」のときに実行される偽ブロックに含まれる節点とを節点集合として選択する。この場合に、条件分岐の条件が「真」のときに実行される真ブロックからの出力と、「偽」のときに実行される偽ブロックからの出力とを選択するセレクタ節点を節点集合に加えている。
【０１４７】
節点グループ化手段４３Ａは、このセレクタ節点を各出力節点として、真ブロックまたは偽ブロックに含まれる各演算節点について、その出力が影響を及ぼす各出力節点の組合せを求めて、出力節点の組合わせ中で共通する演算節点グループとそれ以外の演算節点グループとにグループ分けする。
【０１４８】
グラフコンパクト化手段４４Ａは、節点グループ化手段４３Ａにより分けられたグループの出力節点がセレクタ節点で、かつ、このセレクタ節点の入力側に繋がっている複数の演算節点が全て同一の演算種類である場合に、セレクタ節点の各入力側に同一種類の演算節点がそれぞれ接続されているサブグラフを実行する回路の占有面積と、同一種類の一つの演算節点の入力側に該セレクタ節点の出力が接続されている別のサブグラフを実行する回路の占有面積とを比較して、前者の占有面積が大きい場合に同一種類の一つの演算節点の入力側にセレクタ節点の出力が接続するようにサブグラフを変更する。
【０１４９】
図１０は、本実施形態２のデータフローグラフの同一サブグラフ検出方法の処理手順を説明するためのフローチャートである。以下では、図１０のフローチャートに従って本実施形態２のデータフローグラフの同一サブグラフ検出方法の各手順について説明する。
【０１５０】
図１０に示すように、まず、ステップＳ１１では、図４のステップＳ１の場合と同様に、条件分岐選択手段４１によって、データフローグラフ中、所定または任意の順序で一つの条件分岐が選択される。
【０１５１】
次に、ステップＳ１２では、図４のステップＳ２の場合と同様に、節点集合選択手段４２Ａによって、ステップＳ１１で選択された条件分岐に含まれる節点集合が選択された後、ステップＳ１３で、条件分岐からの出力を選択するセレクタ節点が節点集合に加えられる。
【０１５２】
例えば図５に示すデータフローグラフの場合には、条件分岐に含まれる節点集合として、演算ＡからＫの節点集合に、セレクタＬおよびＭが加えられる。
【０１５３】
ステップＳ１４では、節点グループ化手段４３Ａによって、ステップＳ１３で選択された節点集合がいくつかのグループに分けられる。
【０１５４】
ここでは、条件分岐の条件が「真」のときに実行される真ブロック２１からの出力と、「偽」のときに実行される偽ブロック２２からの出力とを選択するセレクタ節点を出力節点として、その真ブロック２１または偽ブロック２２に含まれる各演算節点について、その出力が影響を及ぼす出力節点に繋がる各節点の組合せが求められて、その各節点の組合わせ中で共通する節点グループを別の節点グループとする。
【０１５５】
例えば図５の事例では、出力位置にある出力節点はＥ，Ｇ，Ｉ，Ｋではなく、ＬおよびＭであり、Ａ，Ｂ，Ｃのグループ、Ｄ，Ｅ，Ｈ，Ｉ，Ｌのグループ、Ｆ，Ｇ，Ｊ，Ｋ，Ｍの三つのグループに分けられる。
【０１５６】
ステップＳ１５では、図４のステップＳ４の場合と同様に、グラフコンパクト化手段４４Ａによって、グループの入力部がコンパクト化されて、共有時に必要となるセレクタ数が削減される。
【０１５７】
ステップＳ１６では、グラフコンパクト化手段４４Ａによって、グループの出力部もコンパクト化されて、共有時に必要となるセレクタ数が削減される。
【０１５８】
ここでは、グループの出力節点がセレクタで、かつ、そのセレクタの入力に繋がっている複数の節点が全て同一の演算種類Ａである場合に、セレクタの各入力に種類Ａの演算がそれぞれ接続されているサブグラフを実行する回路の占有面積と、種類Ａの一つの演算の入力にセレクタ出力が接続されている別のサブグラフを実行する回路の占有面積とを比較して、前者が大きい場合に種類Ａの一つの演算の入力にセレクタ出力が接続されるように、サブグラフが変更される。
【０１５９】
例えば図１１（ａ）に示す節点グループのように、セレクタ５１の入力側に同一種類の演算（演算種類Ｃ）５２，５３が接続されている場合、演算５２は条件分岐の条件が「真」の場合にのみ実行され、演算５３は条件分岐の条件が「偽」の場合にのみ実行されるため、同時には実行されない。よって、図１１（ｂ）に示すように、一つの演算（演算種類Ｃ）５４によって処理することができる。
【０１６０】
図１１（ａ）と図１１（ｂ）とを比較すると、図１１（ｂ）では、演算種類Ｃは演算５４のみで一つ少なくなっており、このサブグラフを実行する回路の占有面積は図１１（ａ）の場合に比べて小さくなる。
【０１６１】
さらに、新たに作られたセレクタ５５の入力に対しても同様の処理を繰り返す。図１１（ｂ）の場合には、セレクタ５５の入力には異なる種類の演算（演算種類Ａ）５５および演算（演算種類Ｂ）５６が繋がっているため、処理は終了する。
【０１６２】
しかしながら、図１２（ａ）に示すように、セレクタ６１の入力側に２入力の演算（演算種類Ａ）６２，６３が接続されている場合には、同様の処理を行うと、図１２（ｂ）に示すように、一つの演算（演算種類Ａ）６４によって処理することができるが、二つのセレクタ６５，６６が必要になる。
【０１６３】
よって、（セレクタの面積）＜（演算器の面積）の場合には、図１２（ｂ）の方が好ましいが、そうでない場合には、図１２（ａ）のままの方が好ましい。
【０１６４】
一般には、
（演算器の面積）＞（セレクタの面積）×（（演算器の入力数）−１）
の場合には面積が減少するので、図１１および図１２に示すようにサブグラフをコンパクト化するための変換が行われる。
【０１６５】
次に、図１０のステップＳ１７では、図４のステップＳ５の場合と同様に、ステップＳ１１〜Ｓ１６の各処理が、全ての条件分岐について行われるように、繰り返される。
【０１６６】
ステップＳ１８では、図４のステップＳ６の場合と同様に、サブグラフ比較手段４５によって、ステップＳ１１〜Ｓ１７までの各処理によってデータベース３に記憶した複数のサブグラフが比較されて、同一サブグラフが検出される。
【０１６７】
以上のように、本実施形態２によれば、条件分岐の出力部にあるセレクタまで含まれた同一サブグラフを検出することができる。また、条件分岐の性質を利用して出力部のコンパクト化を図ることができ、回路を共有した場合に、より面積削減効果を高めることができる。
【０１６８】
なお、上記実施形態１，２では、本発明のデータフローグラフの同一サブグラフ検出装置１０およびそれを用いたデータフローグラフの同一サブグラフ検出方法について説明したが、本発明のデータフローグラフの同一サブグラフ検出方法は、その処理手順（アルゴリズム）を制御プログラムとして記述して、磁気ディスク、光ディスクなどのコンピューター読み取り可能な可読記録媒体に格納しておくことにより、コンピュータシステムのＣＰＵ（中央演算処理装置；制御手段）によって実行させることができる。
【０１６９】
また、上記実施形態１，２では、図３に示すようにグラフコンパクト化手段４４または４４Ａを含むように構成したが、これに限らず、グラフコンパクト化手段４４または４４Ａを含まない場合にも、条件分岐に着目することにより、条件分岐内に、似たような処理が記述される場合が頻繁にあり、条件分岐の周辺を探索することによって、効率的に同一のサブグラフを見つけることができる。このように、データフローグラフ中の同一のサブグラフを検出する際に、それらのサブグラフの動作を共通の回路で実行することによる面積削減効果が大きいサブグラフを高速に検出することができる。
【０１７０】
以上のように、本発明の好ましい実施形態１，２を用いて本発明を例示してきたが、本発明は、この実施形態１，２に限定して解釈されるべきものではない。本発明は、特許請求の範囲によってのみその範囲が解釈されるべきであることが理解される。当業者は、本発明の具体的な好ましい実施形態１，２の記載から、本発明の記載および技術常識に基づいて等価な範囲を実施することができることが理解される。本明細書において引用した特許、特許出願および文献は、その内容自体が具体的に本明細書に記載されているのと同様にその内容が本明細書に対する参考として援用されるべきであることが理解される。
【産業上の利用可能性】
【０１７１】
本発明は、例えばシステムＬＳＩなどの大規模論理回路の自動設計に用いられ、動作記述から論理回路をコンピュータ自動合成する動作合成（高位合成）を行う際に、回路共有により回路占有面積を削減するために、データフローグラフの同一サブグラフを検出するデータフローグラフの同一サブグラフ検出装置、これを用いた高位合成装置、この同一サブグラフ検出装置を用いたデータフローグラフの同一サブグラフ検出方法、この方法の各処理手順をコンピュータに実行させるためのデータフローグラフの同一サブグラフ検出制御プログラムおよびこの制御プログラムが記録されたコンピュータ読み取り可能な可読記録媒体の分野において、システムＬＳＩなどの大規模論理回路の設計などにおいて、動作記述から論理回路を自動合成する動作合成（高位合成）を行う際に、データフローグラフ内の同一サブグラフを高速に検出することが可能になり、それら複数の同一サブグラフを、共通の回路を用いて処理することにより、ハードウェアの回路面積増大とコスト増加を防ぐことができる。また、検出されるサブグラフとしては、それらサブグラフを処理する回路を共有するときに必要となるセレクタが少なく、回路共有による面積削減効果が高いものが得られる。
【図面の簡単な説明】
【０１７２】
【図１】（ａ）は本発明が着目する条件分岐を含む動作記述の一例を示す図、（ｂ）は（ａ）のデータフローグラフの一例を示す図である。
【図２】本発明が着目する条件分岐を含む動作記述の他の例を示す図である。
【図３】本発明のデータフローグラフの同一サブグラフ検出装置の実施形態１を含む高位合成装置の構成例を示すブロック図である。
【図４】本実施形態１に係るデータフローグラフの同一サブグラフ検出方法の処理手順を説明するためのフローチャートである。
【図５】本発明が着目する条件分岐を含むデータフローグラフの一例を示す図である。
【図６】図５のデータフローグラフとは別に存在するデータフローグラフ例を示す図である。
【図７】（ａ）はデータフローグラフの一例を示す図、（ｂ）は（ａ）の動作を実現するための一例を示す回路図である。
【図８】（ａ）は入力部がコンパクト化されたデータフローグラフの一例を示す図、（ｂ）は（ａ）の動作を実現するための一例を示す回路図である。
【図９】データフローグラフの文字列表記例について説明するための図であって、（ａ）はデータフローグラフの一例を示す図、（ｂ）は（ａ）の文字列表記例を示す図である。
【図１０】本実施形態２に係るデータフローグラフの同一サブグラフ検出方法の処理手順を説明するためのフローチャートである。
【図１１】（ａ）および（ｂ）は出力部のコンパクト化について説明するための図である。
【図１２】（ａ）および（ｂ）は出力部のコンパクト化について説明するための図である。
【図１３】動作記述の一例を示す図である。
【図１４】データフローグラフの一例を示す図である。
【図１５】データフローグラフを表すデータ構造の一例を示す図である。
【図１６】（ａ）および（ｂ）は、サブグラフ共有化の一例を説明するための図である。
【図１７】従来の類似サブグラフ探索方法によって扱われるサブグラフの一例を示す図である。
【図１８】従来の類似サブグラフ探索方法を説明するための図である。
【図１９】（ａ）および（ｂ）は、従来の類似サブグラフ探索方法の問題点を説明するための図である。
【図２０】（ａ）および（ｂ）は、回路共有による面積削減効果が高いサブグラフの一例を示す図である。
【図２１】（ａ）〜（ｄ）は、種々のサブグラフの形状例をそれぞれ示す図である。
【符号の説明】
【０１７３】
１  動作記述格納部
２  データフローグラフ生成手段
３  データベース
４，４Ａ  データフローグラフの同一サブグラフ検出装置
４１，４１Ａ  条件分岐選択手段
４２，４２Ａ  節点集合選択手段
４３，４３Ａ  節点グループ化手段
４４，４４Ａ  グラフコンパクト化手段
４５  サブグラフ比較手段     
５  同一サブグラフ検出結果格納部
１０，１０Ａ  高位合成装置
【図１】
2006139427.tif 000003
【図２】
2006139427.tif 000004
【図３】
2006139427.tif 000005
【図４】
2006139427.tif 000006
【図５】
2006139427.tif 000007
【図６】
2006139427.tif 000008
【図７】
2006139427.tif 000009
【図８】
2006139427.tif 000010
【図９】
2006139427.tif 000011
【図１０】
2006139427.tif 000012
【図１１】
2006139427.tif 000013
【図１２】
2006139427.tif 000014
【図１３】
2006139427.tif 000015
【図１４】
2006139427.tif 000016
【図１５】
2006139427.tif 000017
【図１６】
2006139427.tif 000018
【図１７】
2006139427.tif 000019
【図１８】
2006139427.tif 000020
【図１９】
2006139427.tif 000021
【図２０】
2006139427.tif 000022
【図２１】
2006139427.tif 000023