(57)【特許請求の範囲】
【請求項１】
分割手段、部分ＣＦＧ生成手段、分岐節点生成手段およびマージ節点生成手段が設けられたＣＦＧ生成手段と、ＣＤＦＧ生成手段と、スケジューリング手段と、アロケーション手段とを備えたハードウェア合成装置のハードウェア合成方法であって、
上記ＣＦＧ生成手段が、条件に応じて実行されるｇｏｔｏ文としてのｉｆ−ｇｏｔｏ文を含む動作記述を、コントロールフローグラフに変換するステップ（ａ）と、
上記ＣＤＦＧ生成手段が、コントロールフローグラフをコントロールデータフローグラフに変換するステップ（ｂ）と、
上記スケジューリング手段が、コントロールデータフローグラフに基づいてスケジューリングを行うステップ（ｃ）と、
上記アロケーション手段が、スケジューリングの結果に基づいてアロケーションを行うステップ（ｄ）とを含み、
上記ステップ（ａ）が、
上記分割手段が、上記動作記述を、ｉｆ−ｇｏｔｏ文またはジャンプ先ラベルで区切られた部分記述に分割するステップと、
上記部分ＣＦＧ生成手段が、分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、
上記分岐節点生成手段が、ｉｆ−ｇｏｔｏ文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、
上記マージ節点生成手段が、ジャンプ先ラベルに対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含むことを特徴とするハードウェア合成方法。
【請求項２】
分割手段、部分ＣＦＧ生成手段、分岐節点生成手段およびマージ節点生成手段が設けられたＣＦＧ生成手段と、ＣＤＦＧ生成手段と、スケジューリング手段と、アロケーション手段とを備えたハードウェア合成装置のハードウェア合成方法であって、
上記ＣＦＧ生成手段が、Ｃ言語のｓｗｉｔｃｈ文を含むを含む動作記述を、コントロールフローグラフに変換するステップ（ａ）と、
上記ＣＤＦＧ生成手段が、コントロールフローグラフをコントロールデータフローグラフに変換するステップ（ｂ）と、
上記スケジューリング手段が、コントロールデータフローグラフに基づいてスケジューリングを行うステップ（ｃ）と、
上記アロケーション手段が、スケジューリングの結果に基づいてアロケーションを行うステップ（ｄ）とを含み、
上記ステップ（ａ）は、
上記分割手段が、ｓｗｉｔｃｈ文の従属副文を、ｃａｓｅ定数、ｂｒｅａｋ文、またはｉｆ−ｂｒｅａｋ文で区切られた部分記述に分割するステップと、
上記部分ＣＦＧ生成手段が、分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、
上記分岐節点生成手段が、ｓｗｉｔｃｈ文の条件式またはｉｆ−ｂｒｅａｋ文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、
上記マージ節点生成手段が、ｃａｓｅ定数または従属副文終了点に対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含むことを特徴とするハードウェア合成方法。
【請求項３】
条件に応じて実行されるｇｏｔｏ文としてのｉｆ−ｇｏｔｏ文を含む動作記述を、コントロールフローグラフに変換するＣＦＧ生成手段と、
コントロールフローグラフをコントロールデータフローグラフに変換するＣＤＦＧ生成手段と、
コントロールデータフローグラフに基づいてスケジューリングを行うスケジューリング手段と、
スケジューリングの結果に基づいてアロケーションを行うアロケーション手段とを備え、
上記ＣＦＧ生成手段が、
上記動作記述を、ｉｆ−ｇｏｔｏ文またはジャンプ先ラベルで区切られた部分記述に分割する分割手段と、
分割された部分記述の各々を一つの部分コントロールフローグラフで表す部分ＣＦＧ生成手段と、
ｉｆ−ｇｏｔｏ文に対応する分岐節点を生成し、コントロールフロー枝を分岐する分岐節点生成手段と、
ジャンプ先ラベルに対応するマージ節点を生成し、コントロールフロー枝をマージするマージ節点生成手段とを備えたことを特徴とするハードウェア合成装置。
【請求項４】
Ｃ言語のｓｗｉｔｃｈ文を含む動作記述を、コントロールフローグラフに変換するＣＦＧ生成手段と、
コントロールフローグラフをコントロールデータフローグラフに変換するＣＤＦＧ生成手段と、
コントロールデータフローグラフに基づいてスケジューリングを行うスケジューリング手段と、
スケジューリングの結果に基づいてアロケーションを行うアロケーション手段とを備え、
上記ＣＦＧ生成手段が、
ｓｗｉｔｃｈ文の従属副文を、ｃａｓｅ定数、ｂｒｅａｋ文、またはｉｆ−ｂｒｅａｋ文で区切られた部分記述に分割する分割手段と、
分割された部分記述の各々を一つの部分コントロールフローグラフで表す部分ＣＦＧ生成手段と、
ｓｗｉｔｃｈ文の条件式またはｉｆ−ｂｒｅａｋ文に対応する分岐節点を生成し、コントロールフロー枝を分岐する分岐節点生成手段と、
ｃａｓｅ定数または従属副文終了点に対応するマージ節点を生成し、コントロールフロー枝をマージするマージ節点生成手段とを備えたことを特徴とするハードウェア合成装置。
【請求項５】
条件に応じて実行されるｇｏｔｏ文としてのｉｆ−ｇｏｔｏ文を含む動作記述を、コントロールフローグラフに変換するステップ（ａ）と、
コントロールフローグラフをコントロールデータフローグラフに変換するステップ（ｂ）と、
コントロールデータフローグラフに基づいてスケジューリングを行うステップ（ｃ）と、
スケジューリングの結果に基づいてアロケーションを行うステップ（ｄ）とを含み、
上記ステップ（ａ）が、
上記動作記述を、ｉｆ−ｇｏｔｏ文またはジャンプ先ラベルで区切られた部分記述に分割するステップと、
分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、
ｉｆ−ｇｏｔｏ文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、
ジャンプ先ラベルに対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含むハードウェア合成プログラムを記録した記録媒体。
【請求項６】
Ｃ言語のｓｗｉｔｃｈ文を含む動作記述を、コントロールフローグラフに変換するステップ（ａ）と、
コントロールフローグラフをコントロールデータフローグラフに変換するステップ（ｂ）と、
コントロールデータフローグラフに基づいてスケジューリングを行うステップ（ｃ）と、
スケジューリングの結果に基づいてアロケーションを行うステップ（ｄ）とを含み、
上記ステップ（ａ）が、
ｓｗｉｔｃｈ文の従属副文を、ｃａｓｅ定数、ｂｒｅａｋ文、またはｉｆ−ｂｒｅａｋ文で区切られた部分記述に分割するステップと、
分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、
ｓｗｉｔｃｈ文の条件式またはｉｆ−ｂｒｅａｋ文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、
ｃａｓｅ定数または従属副文終了点に対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含むハードウェア合成プログラムを記録した記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、動作記述からハードワイアードロジックのディジタル回路を自動合成する、ＬＳＩの高位合成技術に関するものである。
【０００２】
【従来の技術】
従来、ＡＳＩＣ(Application Specific Integrated Circuit：特定用途向けＩＣ）の設計等、短期間の設計を要求される場合に特に有効な技術として、高位合成技術が知られている。
【０００３】
高位合成とは、ハードウェアの構造に関する情報を含まずに処理のアルゴリズムのみを記述した動作記述から、回路を自動的に合成する技術である。なお、従来の高位合成技術の詳細を記した文献としては、High-Level Synthesis, Kluwer
Academic Publishers等がある。
【０００４】
以下、従来の高位合成技術を用いて、動作記述から回路を自動的に合成する過程について簡単に説明する。
〔１．動作記述からＣＦＧへの変換〕
高位合成においては、まず、動作記述の実行の制御の流れ（コントロールフロー）を解析し、動作記述を実行の制御の流れを表現するコントロールフローグラフ（ＣＦＧ：Control Flow Graph）と呼ばれるモデルに変換する。
【０００５】
ＣＦＧは、プログラムのフローチャートに類似したグラフである。例えば、図２３（ａ）に示す動作記述は、図２３（ｂ）に示すＣＦＧに変換される。
【０００６】
ＣＦＧは、図２３（ａ）の動作記述において条件分岐を含まない動作のシーケンス（１）・（２）・（３）・（４）を、図２３（ｂ）に示すように、部分動作節点（５）・（６）・（７）・（８）で表す。
【０００７】
また、ＣＦＧは、図２３（ａ）の動作記述の条件文（９）を、図２３（ｂ）に示すように、分岐節点（１０）およびマージ節点（１１）で表し、実行制御の流れをコントロールフロー枝（１２）ないし（１９）で表す。
【０００８】
分岐節点（１０）には条件文（９）の条件式が対応し、条件が成立する時は分岐節点（１０）の真側の出力（１４）に制御が移り、条件が成立しない時は分岐節点（１０）の偽側の出力（１５）に制御が移る。
【０００９】
これを、条件が成立する場合、分岐節点の真側の出力に接続されたコントロールフロー枝がアクティブになると言い、条件が成立しない場合、分岐節点の偽側の出力に接続されたコントロールフロー枝がアクティブになると言う。
【００１０】
なお、図２３（ｂ）に示すＣＦＧでは、分岐節点（１０）の出力（１４）・（１５）において、黒丸のある方が真側の出力を表している。後述する他のＣＦＧにおいても同様に、各分岐節点において黒丸のある方が真側の出力を表すものとする。
〔２．ＣＦＧからＣＤＦＧへの変換〕
前述のように動作記述からＣＦＧへの変換が行われると、次に、ＣＦＧのデータ依存（データフロー）を解析し、ＣＦＧを、演算間の実行順序の依存関係を表現するコントロールデータフローグラフ（ＣＤＦＧ：Control Data Flow Graph ）と呼ばれるモデルに変換する。
【００１１】
例えば、図２３（ｂ）に示すＣＦＧは、図２４に示すＣＤＦＧに変換される。
【００１２】
ＣＤＦＧは、演算（２０）ないし（２５）およびセレクタ（２６）を節点とし、データ依存関係および制御依存関係を枝で表したグラフである。なお、演算（２０）ないし（２４）は算術演算、演算（２５）は条件演算である。
【００１３】
条件演算である演算（２５）は、条件判定の真偽を表す制御信号（２７）を出力し、セレクタ（２６）は、制御信号（２７）の値によって２つの入力のうち１つを選択し、出力する。
【００１４】
図２３（ｂ）のＣＦＧの部分動作節点（５）におけるｂ＝ａ＊ｄの乗算演算は、ａ＝ｂ＊ｃの演算結果に依存するので、ＣＤＦＧにおける演算（２０）と演算（２１）との間には、データ依存関係を表す枝が存在する。
【００１５】
演算（２１）と演算（２２）とは、互いにデータ依存がないので並列に実行できる。一方、演算（２０）と演算（２１）とは、互いにデータ依存があるので、並列には実行できない。
【００１６】
このように、高位合成において動作記述をＣＤＦＧに変換する理由は、ＣＤＦＧは、動作記述に記述された動作を保証した上で、生成されるハードウェアの並列化の余地を残した動作表現であるからである。
〔３．スケジューリング〕
ＣＦＧからＣＤＦＧへの変換が終了すると、スケジューリングが行われる。スケジューリングとは、ＣＤＦＧにおける入出力、演算、およびセレクタによる選択動作が回路上で実行される相対的な時間を決定する処理である。
【００１７】
図２５に、図２４に示すＣＤＦＧをスケジューリングした結果を示す。このスケジューリング結果では、入力ｂ・ｃ・ｅ・ｆ、出力ａ、および演算（３０）・（３１）・（３５）がステップｓ１に実行され、入力ｄ、出力ｂ・ｄ・ｇ、演算（３２）・（３３）・（３６）、およびセレクタによる選択動作（３４）がステップｓ２に実行される。
〔４．アロケーション〕
アロケーションとは、スケジューリング結果を受けて、ＣＤＦＧの演算節点に演算器を割り当て、データ選択のためのマルチプレクサと、データ記憶のためのレジスタとを生成すると共に、これらの演算器、レジスタ、およびマルチプレクサを制御するためのコントローラを生成し、それぞれを互いに接続することにより回路を合成する処理である。
【００１８】
図２６に、図２５に示すスケジューリング結果からアロケーションを経て合成された回路を示す。
〔５．高位合成の動作記述言語〕
高位合成の動作記述には、通常、多くのプログラミング言語同様、手続き型言語が用いられる。これは、人間の思考が逐次的であり、手続き型の言語によって記述された動作は人間にとって理解し易いためである。代表的な手続き型の動作記述言語として、ＶＨＤＬ言語がある。従来の多くの合成ツールが、動作記述言語としてＶＨＤＬ言語を採用している。
【００１９】
しかし、ＶＨＤＬ言語は、一般のプログラミング言語に比べて普及していないので、ＶＨＤＬ言語を習得していないエンジニアがハードウェアを設計する場合には、他のプログラミング言語を習得しているか否かに関わらず、ＶＨＤＬ言語を新たに習得する必要がある。
【００２０】
また、ハードウェアの設計に際しては、まず、ソフトウェアによりアルゴリズムを検証し、その後、動作記述言語によりハードウェアを実現する、という手法が採られており、ソフトウェアのプログラミング言語からＶＨＤＬ言語への、人手による書き換えが必要である。
【００２１】
手続き型プログラミング言語の代表的なものとしてＣ言語がある。Ｃ言語は、ソフトウェアの記述言語として広く用いられており、多くのエンジニアが既に理解しているため、高位合成の動作記述言語としても適していると考えられる。
【００２２】
高位合成の動作記述言語にＣ言語を用いれば、ソフトウェアによるアルゴリズムの検証に用いられたＣ言語をそのまま高位合成の入力とすることができ、プログラミング言語からＶＨＤＬ言語への人手による書き換えが不要になる。
【００２３】
ＶＨＤＬ言語にはないＣ言語の特徴として、実行の制御を記述における別の場所に分散させるｇｏｔｏ文およびｓｗｉｔｃｈ文をサポートしている点が挙げられる。
【００２４】
ｇｏｔｏ文は、ｇｏｔｏの引数として与えられたジャンプ先ラベルと同じラベルが付けられた記述部分へジャンプする命令である。ｇｏｔｏ文は、ｉｆ文の従属文として使用することにより、条件に応じてジャンプする命令として用いることができる。
【００２５】
ｓｗｉｔｃｈ文は、条件式の値に応じて各ｃａｓｅから始まる記述部分へ実行の制御を分散させる命令である。ｓｗｉｔｃｈ文の従属副文においてｂｒｅａｋ文が実行されれば、ｓｗｉｔｃｈ文は終了する。
【００２６】
複数の実行パスに同じ処理を含む場合、ｇｏｔｏ文やｓｗｉｔｃｈ文を用いて実行の制御を分岐させることにより、複数の実行パスで動作記述を共有することができ、動作を簡潔に記述することができる。
【００２７】
ＶＨＤＬ言語にも、ｓｗｉｔｃｈ文と類似した機能を持つｃａｓｅ文があるが、ＶＨＤＬ言語のｃａｓｅ文は、条件式の値に従って、指定されている処理文のいずれか１つを実行するものであり、ｓｗｉｔｃｈ文とは本質的に異なる。
【００２８】
例えば、図１２（ａ）のように、ｂｒｅａｋ文が条件により実行されたり、各ｃａｓｅにｂｒｅａｋ文を含まない場合の処理と同等の処理をＶＨＤＬ言語のｃａｓｅ文で実現することは、従来の技術ではできない。
【００２９】
【発明が解決しようとする課題】
高位合成の動作記述言語としてＣ言語などのプログラミング言語を採用する場合、ｓｗｉｔｃｈ文、ｉｆ−ｇｏｔｏ文などの実行制御分岐命令をサポートする必要がある。高位合成システムは、実行制御分岐命令の動作を実行する回路を生成できなければならない。
【００３０】
ノイマン型プロセッサにおいては、ｓｗｉｔｃｈ文、ｉｆ−ｇｏｔｏ文のような実行制御分岐命令は、プロセッサのジャンプ命令を用いて実行される。ノイマン型プロセッサのように、命令をメモリから順次読み出して、その命令の動作を実行するストアドプログラム方式では、ジャンプ命令は、プログラムカウンタにジャンプ先アドレスを代入することによって簡単に実行できる。
【００３１】
しかし、高位合成により生成される回路においては、動作記述は、ストアドプログラム方式の回路上でソフトウェアとして実行されるのではなく、ハードワイアードの回路上で、直接ハードウェアの動作として実現される。ハードワイアード方式の回路においてはプログラムカウンタは存在せず、ｓｗｉｔｃｈ文あるいはｉｆ−ｇｏｔｏ文のような実行制御分岐命令を実行するためには、それらの命令が実行された場合と同じ動作を、ハードワイアードの回路上で実行する必要がある。
【００３２】
そのためには、実行制御分岐命令を含む動作記述の動作を、分岐節点、マージ節点を用いてＣＦＧで表現する必要がある。実行制御分岐命令を含む動作記述の動作を、分岐節点、マージ節点を用いてＣＦＧで表現できれば、従来技術であるＣＦＧからのＣＤＦＧへの変換方法、スケジューリング方法、アロケーション方法により、実行制御分岐命令がノイマン型プロセッサで実行された場合と同じ動作を実行する、ハードワイアード方式の回路を生成することができる。ＣＦＧのＣＤＦＧへの変換方法、ＣＤＦＧのスケジューリング方法、アロケーション方法は、高位合成の分野では周知である（High-Level Synthesis, Kluwer Academic Publishers参照）。
【００３３】
一つの動作記述の動作を表現するＣＦＧは、複数存在し得る。例えば、図３（ｂ）に示すＣＦＧと図２７に示すＣＦＧは共に、図３（ａ）に示す動作記述の動作を表現するＣＦＧである。図３（ｂ）に示すＣＦＧと図２７に示すＣＦＧとを比較すると、図２７に示すＣＦＧでは、ｂ＝ａ＊２の動作に対応する部分動作が複製されているので、図３（ｂ）に示すＣＦＧよりも効率が悪い。
【００３４】
また、図１２（ｂ）のＣＦＧと図２８のＣＦＧとは共に、図１２（ａ）の動作記述の動作を表現するＣＦＧである。図１２（ｂ）のＣＦＧと図２８のＣＦＧとを比較すると、図２８のＣＦＧでは、ｆ＝（ｄ＋ｅ）＊６の動作に対応する部分動作が複製されているので、図１２（ｂ）に示すＣＦＧよりも効率が悪い。
【００３５】
高速な処理を必要とする回路においては、ＣＦＧの分岐において、真のパスおよび偽のパスの双方を実行し、分岐条件が決定した後に、必要な値を選択するという方法をとる。
【００３６】
例えば、図２３（ｂ）のＣＦＧにおいて、部分動作節点（６）・（７）で表される２つの動作は、分岐節点（１０）に対応する条件に応じてどちらか一方しか必要ないが、処理を２ステップで終了する図２５のスケジューリング結果においては、演算（３３）による条件判定が、動作（６）・（７）に対応する演算（３０）・（３１）よりも後に行われるため、演算（３０）・（３１）の双方を実行しておく必要がある。
【００３７】
処理を２ステップで終わらせるためには、演算（３０）・（３１）をステップｓ１で実行する必要があるため、演算（３０）・（３１）では演算器の共有ができない。このため、図２５のスケジューリング結果から生成された図２６の回路においては、演算（３０）・（３１）を同時に実行するための１つの加算器と１つの減算器とが存在することとなる。
【００３８】
一方、条件判定が、動作（６）・（７）に対応する演算（３０）・（３１）よりも前に行われれば、演算（３０）・（３１）はどちらか一方しか実行しなくても良いため、演算器を共有してハードウェアを削減できるが、処理を２ステップで終わらせることができなくなる。
【００３９】
上述のように、真のパスおよび偽のパスの双方を実行し、分岐条件が決定した後に必要な値を選択する方法をとる場合、真のパスと偽のパスとの間で演算器の共有が行えないため、前記のようにＣＦＧにおける部分動作の複製が生じると、複製された部分動作間で演算器の共有が行えずに回路の面積が大きくなるという問題が生じる。よって、できるだけ、このような複製のないＣＦＧを生成する必要がある。
【００４０】
なお、本発明に関連する技術として、例えば、特許番号第２５０００７９号の特許公報に開示されたプログラムの最適化方法等がある。ただし、上記公報に開示された方法は、ストアドプログラム方式のノイマン型プロセッサでの命令実行を前提として、ｓｗｉｔｃｈ文等のマルチウェイ分岐命令を含むソフトウェアプログラムの実行パフォーマンスを最適化するコンパイラ技術であり、少なくとも、ハードワイアードの回路上での動作記述の動作の実現を前提とした高位合成技術ではない点において、本発明と相違する。
【００４１】
本発明の目的は、ｉｆ−ｇｏｔｏ文、ｓｗｉｔｃｈ文の動作を、前記従来技術のようにストアドプログラム方式のノイマン型プロセッサ上で実行するのではなく、ｉｆ−ｇｏｔｏ文、ｓｗｉｔｃｈ文の動作を実行するハードワイアードの回路を合成することを目的としている。さらに、前記したように、真のパスおよび偽のパスの双方を実行し、分岐条件が決定した後に必要な値を選択する方法をとる場合においても、効率的な回路が生成されるよう、部分動作の複製のないＣＦＧを生成することを目的とする。
【００４２】
【課題を解決するための手段】
上記の課題を解決するために、請求項１記載のハードウェア合成方法は、分割手段、部分ＣＦＧ生成手段、分岐節点生成手段およびマージ節点生成手段が設けられたＣＦＧ生成手段と、ＣＤＦＧ生成手段と、スケジューリング手段と、アロケーション手段とを備えたハードウェア合成装置のハードウェア合成方法であって、
上記ＣＦＧ生成手段が、条件に応じて実行されるｇｏｔｏ文としてのｉｆ−ｇｏｔｏ文を含む動作記述を、コントロールフローグラフに変換するステップ（ａ）と、上記ＣＤＦＧ生成手段が、コントロールフローグラフをコントロールデータフローグラフに変換するステップ（ｂ）と、上記スケジューリング手段が、コントロールデータフローグラフに基づいてスケジューリングを行うステップ（ｃ）と、上記アロケーション手段が、スケジューリングの結果に基づいてアロケーションを行うステップ（ｄ）とを含み、上記ステップ（ａ）が、動作記述を、ｉｆ−ｇｏｔｏ文またはジャンプ先ラベルで区切られた部分記述に分割するステップと、分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、ｉｆ−ｇｏｔｏ文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、ジャンプ先ラベルに対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含むことを特徴とする。
【００４３】
上記の方法によれば、ステップ（ａ）により、ｉｆ−ｇｏｔｏ文を含む動作記述を、分岐節点およびマージ節点を用いたコントロールフローグラフで表現できる。このコントロールフローグラフに基づいてステップ（ｂ）ないし（ｄ）を順次実行することにより、上記コントロールフローグラフをコントロールデータフローグラフへ変換し、このコントロールデータフローグラフに基づいたスケジューリングおよびアロケーションを経て、ｉｆ−ｇｏｔｏ文の動作を実行するハードワイアード回路を合成することができる。すなわち、高位合成の動作記述言語によって、ｉｆ−ｇｏｔｏ文をサポートすることが可能となる。
【００４４】
さらに、上記ハードウェア合成方法は、上記ステップ（ａ）が、動作記述を、ｉｆ−ｇｏｔｏ文またはジャンプ先ラベルで区切られた部分記述に分割するステップと、分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、ｉｆ−ｇｏｔｏ文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、ジャンプ先ラベルに対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含むことを特徴とする。
【００４５】
上記の方法によれば、ｉｆ−ｇｏｔｏ文を含む動作記述を複製のないコントロールフローグラフに変換することができ、コントロールフローグラフの分岐において、真のパスおよび偽のパスの双方を実行する高速なハードワイアード回路を生成する場合に、最終的に合成されるハードワイアード回路の面積を小さくすることができる。
【００４６】
請求項２記載のハードウェア合成方法は、分割手段、部分ＣＦＧ生成手段、分岐節点生成手段およびマージ節点生成手段が設けられたＣＦＧ生成手段と、ＣＤＦＧ生成手段と、スケジューリング手段と、アロケーション手段とを備えたハードウェア合成装置のハードウェア合成方法であって、上記ＣＦＧ生成手段が、Ｃ言語のｓｗｉｔｃｈ文を含むを含む動作記述を、コントロールフローグラフに変換するステップ（ａ）と、上記ＣＤＦＧ生成手段が、コントロールフローグラフをコントロールデータフローグラフに変換するステップ（ｂ）と、上記スケジューリング手段が、コントロールデータフローグラフに基づいてスケジューリングを行うステップ（ｃ）と、上記アロケーション手段が、スケジューリングの結果に基づいてアロケーションを行うステップ（ｄ）とを含み、上記ステップ（ａ）は、上記分割手段が、ｓｗｉｔｃｈ文の従属副文を、ｃａｓｅ定数、ｂｒｅａｋ文、またはｉｆ−ｂｒｅａｋ文で区切られた部分記述に分割するステップと、上記部分ＣＦＧ生成手段が、分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、上記分岐節点生成手段が、ｓｗｉｔｃｈ文の条件式またはｉｆ−ｂｒｅａｋ文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、上記マージ節点生成手段が、ｃａｓｅ定数または従属副文終了点に対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含むことを特徴とする。
【００４７】
上記の方法によれば、ｓｗｉｔｃｈ文を含む動作記述を、分岐節点およびマージ節点を用いたコントロールフローグラフで表現できる。これにより、ｓｗｉｔｃｈ文の動作を実行するハードワイアード回路を合成することができ、高位合成の動作記述言語でｓｗｉｔｃｈ文をサポートすることが可能となる。
【００４８】
さらに、上記の方法によれば、ｓｗｉｔｃｈ文を含む動作記述を複製のないコントロールフローグラフに変換することができ、コントロールフローグラフの分岐において、真のパスおよび偽のパスの双方を実行する高速なハードワイアード回路を生成する場合に、最終的に合成されるハードワイアード回路の面積を小さくすることができる。
【００４９】
請求項３記載のハードウェア合成装置は、条件に応じて実行されるｇｏｔｏ文としてのｉｆ−ｇｏｔｏ文を含む動作記述を、コントロールフローグラフに変換するＣＦＧ生成手段と、コントロールフローグラフをコントロールデータフローグラフに変換するＣＤＦＧ生成手段と、コントロールデータフローグラフに基づいてスケジューリングを行うスケジューリング手段と、スケジューリングの結果に基づいてアロケーションを行うアロケーション手段とを備え、上記ＣＦＧ生成手段が、上記動作記述を、ｉｆ−ｇｏｔｏ文またはジャンプ先ラベルで区切られた部分記述に分割する分割手段と、分割された部分記述の各々を一つの部分コントロールフローグラフで表す部分ＣＦＧ生成手段と、ｉｆ−ｇｏｔｏ文に対応する分岐節点を生成し、コントロールフロー枝を分岐する分岐節点生成手段と、ジャンプ先ラベルに対応するマージ節点を生成し、コントロールフロー枝をマージするマージ節点生成手段とを備えたことを特徴とする。
【００５０】
上記の構成によれば、ＣＤＦ生成手段により、ｉｆ−ｇｏｔｏ文を含む動作記述が、分岐節点およびマージ節点を用いたコントロールフローグラフで表現される。このコントロールフローグラフに基づいて、ＣＤＦＧ生成手段、スケジューリング手段およびアロケーション手段が、上記コントロールフローグラフをコントロールデータフローグラフへ変換し、このコントロールデータフローグラフに基づいたスケジューリングおよびアロケーションを行うことにより、ｉｆ−ｇｏｔｏ文の動作を実行するハードワイアード回路を合成することができる。すなわち、高位合成の動作記述言語によって、ｉｆ−ｇｏｔｏ文をサポートするハードウェア合成装置が実現される。
【００５１】
また、上記ハードウェア合成装置は、ＣＦＧ生成手段が、動作記述を、ｉｆ−ｇｏｔｏ文またはジャンプ先ラベルで区切られた部分記述に分割する分割手段と、分割された部分記述の各々を一つの部分コントロールフローグラフで表す部分ＣＦＧ生成手段と、ｉｆ−ｇｏｔｏ文に対応する分岐節点を生成し、コントロールフロー枝を分岐する分岐節点生成手段と、ジャンプ先ラベルに対応するマージ節点を生成し、コントロールフロー枝をマージするマージ節点生成手段とを備えたことを特徴とする。
【００５２】
上記の構成によれば、ｉｆ−ｇｏｔｏ文を含む動作記述を複製のないコントロールフローグラフに変換することができる。これにより、コントロールフローグラフの分岐において、真のパスおよび偽のパスの双方を実行する高速なハードワイアード回路を生成する場合に、最終的に合成されるハードワイアード回路の面積を小さくすることができる。
【００５３】
請求項４記載のハードウェア合成装置は、Ｃ言語のｓｗｉｔｃｈ文を含む動作記述をコントロールフローグラフに変換するＣＦＧ生成手段と、コントロールフローグラフをコントロールデータフローグラフに変換するＣＤＦＧ生成手段と、コントロールデータフローグラフに基づいてスケジューリングを行うスケジューリング手段と、スケジューリングの結果に基づいてアロケーションを行うアロケーション手段とを備え、上記ＣＦＧ生成手段が、ｓｗｉｔｃｈ文の従属副文を、ｃａｓｅ定数、ｂｒｅａｋ文、またはｉｆ−ｂｒｅａｋ文で区切られた部分記述に分割する分割手段と、分割された部分記述の各々を一つの部分コントロールフローグラフで表す部分ＣＦＧ生成手段と、ｓｗｉｔｃｈ文の条件式またはｉｆ−ｂｒｅａｋ文に対応する分岐節点を生成し、コントロールフロー枝を分岐する分岐節点生成手段と、ｃａｓｅ定数または従属副文終了点に対応するマージ節点を生成し、コントロールフロー枝をマージするマージ節点生成手段とを備えたことを特徴とする。
【００５４】
上記の構成によれば、ｓｗｉｔｃｈ文を含む動作記述を、分岐節点およびマージ節点を用いたコントロールフローグラフで表現できる。これにより、ｓｗｉｔｃｈ文の動作を実行するハードワイアード回路を合成することができ、高位合成の動作記述言語でｓｗｉｔｃｈ文をサポートすることが可能となる。
【００５５】
さらに、上記の構成によれば、ｓｗｉｔｃｈ文を含む動作記述を複製のないコントロールフローグラフに変換することができる。これにより、コントロールフローグラフの分岐において、真のパスおよび偽のパスの双方を実行する高速なハードワイアード回路を生成する場合に、最終的に合成されるハードワイアード回路の面積を小さくすることができる。
【００５６】
請求項５記載の記録媒体は、条件に応じて実行されるｇｏｔｏ文としてのｉｆ−ｇｏｔｏ文を含む動作記述を、コントロールフローグラフに変換するステップ（ａ）と、コントロールフローグラフをコントロールデータフローグラフに変換するステップ（ｂ）と、コントロールデータフローグラフに基づいてスケジューリングを行うステップ（ｃ）と、スケジューリングの結果に基づいてアロケーションを行うステップ（ｄ）とを含み、上記ステップ（ａ）が、動作記述を、ｉｆ−ｇｏｔｏ文またはジャンプ先ラベルで区切られた部分記述に分割するステップと、分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、ｉｆ−ｇｏｔｏ文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、ジャンプ先ラベルに対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含むことを特徴とする。
【００５７】
請求項６記載の記録媒体は、Ｃ言語のｓｗｉｔｃｈ文を含む動作記述をコントロールフローグラフに変換するステップ（ａ）と、コントロールフローグラフをコントロールデータフローグラフに変換するステップ（ｂ）と、コントロールデータフローグラフに基づいてスケジューリングを行うステップ（ｃ）と、スケジューリングの結果に基づいてアロケーションを行うステップ（ｄ）とを含み、上記ステップ（ａ）が、ｓｗｉｔｃｈ文の従属副文を、ｃａｓｅ定数、ｂｒｅａｋ文、またはｉｆ−ｂｒｅａｋ文で区切られた部分記述に分割するステップと、分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、ｓｗｉｔｃｈ文の条件式またはｉｆ−ｂｒｅａｋ文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、ｃａｓｅ定数または従属副文終了点に対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含むことを特徴とする。
【００５８】
【発明の実施の形態】
本発明の実施の一形態について図１ないし図２２に基づいて説明すれば、以下のとおりである。
【００５９】
最初に、高位合成技術を用いて、実行制御分岐命令を含む動作記述からハードウェア合成を行うためのハードウェア合成装置の概略構成について、図２を参照しながら説明する。
【００６０】
ハードウェア合成装置は、図２に示すように、ＣＦＧ生成部１（ＣＦＧ生成手段）と、ＣＤＦＧ生成部２（ＣＤＦＧ生成手段）と、スケジューリング部３（スケジューリング手段）と、アロケーション部４（アロケーション手段）とを備えている。
【００６１】
上記ハードウェア合成装置において、図１に示すように、ＣＦＧ生成部１が、実行制御分岐命令を含む動作記述を、コントロールフローグラフ（ＣＦＧ）へ変換する処理を行う（ステップ１００、以下、Ｓ１００のように略記する）。なお動作記述からＣＦＧへの変換処理の内容については、後に、ｉｆ−ｇｏｔｏ文を含む動作記述、およびｓｗｉｔｃｈ文を含む動作記述を例に挙げ、具体的に説明する。
【００６２】
次に、ＣＤＦＧ生成部２が、ＣＦＧからコントロールデータフローグラフ（ＣＤＦＧ）への変換処理を行い（Ｓ１０１）、スケジューリング部３が、ＣＤＦＧにおける入出力、演算、セレクタによる選択動作が回路上で実行される相対的な時間を決定するスケジューリング処理を行う（Ｓ１０２）。
【００６３】
最後に、アロケーション部４が、スケジューリング結果を受けて、演算器割り当て、レジスタ割り当て、およびコントローラの生成等の処理を行うアロケーション処理を実行する（Ｓ１０３）。
【００６４】
以下、ｉｆ−ｇｏｔｏ文を含む動作記述、およびｓｗｉｔｃｈ文を含む動作記述からハードウェアを合成する技術について、より具体的な説明を行う。
〔ｉｆ−ｇｏｔｏ文を含む動作記述からのハードウェアの合成〕
ここでは、図３（ａ）に示すような、ｉｆ−ｇｏｔｏ文を含む動作記述に対して、ｉｆ−ｇｏｔｏ文を含む動作記述からのハードウェア合成方法のアルゴリズムを適用し、ハードウェアを合成する装置および方法について説明する。なお、図３（ａ）において、ＥＯＦは動作記述の終了点を表す。
【００６５】
図４に示すように、ｉｆ−ｇｏｔｏ文を含む動作記述からのハードウェア合成は、まず、ｉｆ−ｇｏｔｏ文を含む動作記述からＣＦＧへの変換処理を行い（Ｓ１０４）、その後、変換されたＣＦＧに基づいて、Ｓ１０１ないしＳ１０３の処理を行う。
【００６６】
上記したＳ１０４の処理を実行するために、本実施形態に係るハードウェア合成装置は、図２に示すように、ＣＦＧ生成部１に、動作記述をｉｆ−ｇｏｔｏ文またはジャンプ先ラベルで区切られた部分記述に分割する分割部５と、分割された部分記述の各々を一つの部分コントロールフローグラフで表す部分ＣＦＧ生成部６と、ｉｆ−ｇｏｔｏ文に対応する分岐節点を生成し、コントロールフロー枝を分岐する分岐節点生成部７と、ジャンプ先ラベルに対応するマージ節点を生成すると共にコントロールフロー枝をマージするマージ節点生成部８とを備えている。
【００６７】
ここで、上記ＣＦＧ生成部１にて実行されるＳ１０４のｉｆ−ｇｏｔｏ文を含む動作記述からのＣＦＧへの変換処理の内容について、図３（ａ）に示す動作記述、図５に示すフローチャートおよび図６（ａ）ないし（ｇ）を参照しながら説明する。
【００６８】
まず、前処理を行う（Ｓ１０５）。この前処理において、図６（ａ）に示すように、ＣＦＧの入力節点（２００）を生成し、接続ポイントを入力節点（２００）とする。接続ポイントとは、次に接続すべきコントロールフロー枝を記憶するための変数である。また、サーチ点を動作記述の先頭とする。すなわち、ここでのサーチ点は、図３（ａ）に示す動作記述の先頭にあるｉｆ−ｇｏｔｏ文（２０１）となる。なお、サーチ点とは、動作記述をサーチするポイントを記憶するための変数である。
【００６９】
次に、動作記述を部分記述へ分割する処理を行う（Ｓ１０６）。この処理において、ｉｆ−ｇｏｔｏ文、ジャンプ先ラベル、または動作記述終了点（ＥＯＦ）が見つかるまでサーチ点を更新しながら動作記述をサーチし、サーチされた動作記述を部分記述とする。ここでは、既にサーチ点がｉｆ−ｇｏｔｏ文（２０１）を指しているため、部分記述は空となり、サーチ点はｉｆ−ｇｏｔｏ文（２０１）のままとなる。
【００７０】
続いて、抽出された部分記述から部分ＣＦＧを生成する（Ｓ１０７）。ここでは部分記述が空なので、部分ＣＦＧは生成されず、接続ポイントは入力節点（２００）のままとなる。
【００７１】
さらに、サーチ点がｉｆ−ｇｏｔｏ文（２０１）を指しているので、ｉｆ−ｇｏｔｏ文処理を行う（Ｓ１０８）。本処理により、ｉｆ−ｇｏｔｏ文に対応する分岐節点が生成され、コントロールフローが分岐されるため、実行制御分岐命令であるｉｆ−ｇｏｔｏ文の動作を、分岐節点を用いてＣＦＧで表現することが可能となる。
【００７２】
ここで、図７を参照しながら、Ｓ１０８のｉｆ−ｇｏｔｏ文処理の内容について説明する。
【００７３】
まず、ｉｆ−ｇｏｔｏ文に対応するコントロールフロー分岐処理を行う（Ｓ１１１）。すなわち、図６（ｂ）に示すように分岐節点（２０２）を生成し、その入力を接続ポイント（２００）に接続する。また、接続ポイントを分岐節点（２０２）の偽側の出力（２０３）として、分岐節点（２０２）にｉｆ文の条件式（ｄ＝２）を対応させる。
【００７４】
次に、図６（ｂ）に示すように、分岐節点（２０２）の真側の出力（２０４）を、ジャンプ先ラベル（２０５）と対応させて記憶する（Ｓ１１２）。記憶された分岐節点（２０２）の出力は、後に、ジャンプ先ラベル（２０５）に対応するマージ節点（２１４）にてマージされる。
【００７５】
続いて、サーチ点をｉｆ−ｇｏｔｏ文（２０１）の次の命令である動作記述（２０６）へ移動させる（Ｓ１１３）。以上の処理により、Ｓ１０８のｉｆ−ｇｏｔｏ文処理が終了する。
【００７６】
次に、図５に示すようにＳ１０６へ処理が移行し、再び、動作記述を部分記述へ分割する処理が行われる。この処理において、前述のように、ｉｆ−ｇｏｔｏ文、ジャンプ先ラベル、または動作記述終了点が見つかるまで、サーチ点を更新しながら動作記述がサーチされる。
【００７７】
今回のサーチでは、サーチされた動作記述（２０６）は部分記述とされ、サーチ点は、次に見つかったｉｆ−ｇｏｔｏ文（２０７）を指す。
【００７８】
そして、Ｓ１０７の処理において、図６（ｃ）に示すように、抽出された部分記述（２０６）から部分ＣＦＧ（２０８）を生成し、部分ＣＦＧ（２０８）の入力を接続ポイント（２０３）に接続する。また、接続ポイントを、部分ＣＦＧ（２０８）の出力（２０９）とする。
【００７９】
次に、サーチ点がｉｆ−ｇｏｔｏ文（２０７）を指しているので、再び、ｉｆ−ｇｏｔｏ文処理（Ｓ１０８）を行う。ここでは、前記したｉｆ−ｇｏｔｏ文処理と同様にして、まず、Ｓ１１１で、図６（ｄ）に示すように、分岐節点（２１０）を生成し、その入力を接続ポイント（２０９）に接続する。また、接続ポイントを、分岐節点（２１０）の偽側の出力（２１１）とし、分岐節点（２１０）に、ｉｆ文の条件式（ａ＝３）を対応させる。
【００８０】
次に、Ｓ１１２で、図６（ｄ）に示すように、分岐節点（２１０）の真側の出力（２１２）を、ジャンプ先ラベル（２１３）と対応させて記憶する。さらに、Ｓ１１３で、サーチ点をｉｆ−ｇｏｔｏ文（２０７）の次の命令であるジャンプ先ラベル（２０５）とする。
【００８１】
上述のＳ１０８におけるｉｆ−ｇｏｔｏ文処理が終了すると、再びＳ１０６へ戻り、動作記述を部分記述へ分割する処理を行う。ここでは、既にサーチ点がジャンプ先ラベル（２０５）を指しているため、部分記述は空となり、サーチ点はジャンプ先ラベル（２０５）のままとなる。
【００８２】
次に、Ｓ１０７で、抽出された部分記述から部分ＣＦＧを生成する。ここでは部分記述が空なので、部分ＣＦＧは生成されず、接続ポイントは分岐節点（２１０）の偽側の出力（２１１）のままとなる。
【００８３】
ここで、サーチ点がジャンプ先ラベル（２０５）を指しているので、ジャンプ先ラベル処理（Ｓ１０９）を行う。ジャンプ先ラベル処理において、マージ節点が生成され、そのジャンプ先ラベルへのコントロールフローがマージされるため、実行制御分岐命令であるｉｆ−ｇｏｔｏ文の動作を、マージ節点を用いてＣＦＧで表現することが可能となる。
【００８４】
ここで、Ｓ１０９のジャンプ先ラベル処理の内容を、図８のフローチャートを参照しながら説明する。
【００８５】
まず、図６（ｅ）に示すように、マージ節点（２１４）を生成し、マージ節点（２１４）の入力に接続ポイント（２１１）、記憶されているそのジャンプ先ラベル（２０５）に対応する分岐節点（２０２）の真側の出力（２０４）を接続する（Ｓ１１４）。また、この時同時に、接続ポイントをマージ節点（２１４）の出力（２１５）とする。
【００８６】
次に、サーチ点をジャンプ先ラベル（２０５）の次の命令である動作記述（２１６）とする（Ｓ１１５）。
【００８７】
以下、同様にして、図６（ｆ）に示すように部分ＣＦＧ（２１７）を生成し、部分ＣＦＧ（２１７）の入力を接続ポイント（２１５）に接続し、接続ポイントを部分ＣＦＧ（２１７）の出力（２１８）とする。また、マージ節点（２１９）を生成し、マージ節点（２１９）の入力に接続ポイント（２１８）、記憶されているそのジャンプ先ラベル（２１３）に対応する分岐節点（２１０）の真側の出力（２１２）を接続し、接続ポイントを、マージ節点（２１９）の出力（２２０）とする。
【００８８】
最後に、後処理を行う（Ｓ１１０）。この後処理において、図６（ｇ）に示すように、ＣＦＧの出力節点（２２２）を生成し、出力節点（２２２）に接続ポイントである出力（２２０）を接続する。
【００８９】
以上のように、動作記述からＣＦＧが生成された後、周知の方法により、ＣＦＧからＣＤＦＧへの変換（Ｓ１０１）、スケジューリング処理（Ｓ１０２）、アロケーション処理（Ｓ１０３）を行うことにより、ハードウェアの合成が完了する。なお、スケジューリング処理の代表的なものとしては、フォースディレクティッド法、アロケーション処理の代表的なものとしては、クリーク分割を用いた方法等がある（High-Level Synthesis, Kluwer Academic Publishers参照）。
【００９０】
図９に、図３（ｂ）に示すＣＦＧから変換されたＣＤＦＧを、図１０にスケジューリング結果を、図１１に、アロケーション処理により生成された最終的なハードウェアを示す。
〔ｓｗｉｔｃｈ文を含む動作記述からのハードウェアの合成〕
次に、図１２（ａ）に示すような、ｓｗｉｔｃｈ文を含む動作記述に対して、ｓｗｉｔｃｈ文を含む動作記述からのハードウェア合成方法のアルゴリズムを適用し、ハードウェアを合成する方法について説明する。
【００９１】
図１３に示すように、ｓｗｉｔｃｈ文を含む動作記述からのハードウェア合成では、まず、ｓｗｉｔｃｈ文を含む動作記述からＣＦＧへの変換処理を行い（Ｓ１１６）、その後、変換されたＣＦＧに基づいて、Ｓ１０１ないしＳ１０３の処理を行う。
【００９２】
上記Ｓ１１６の処理を実行するために、本実施形態に係るハードウェア合成装置は、ＣＦＧ生成部１の分割部６が、ｓｗｉｔｃｈ文の従属副文を、ｃａｓｅ定数、ｂｒｅａｋ文、またはｉｆ−ｂｒｅａｋ文で区切られた部分記述に分割する処理を行い、分岐節点生成部７が、ｓｗｉｔｃｈ文の条件式またはｉｆ−ｂｒｅａｋ文に対応する分岐節点を生成すると共にコントロールフロー枝を分岐する処理を行い、マージ節点生成部８が、ｃａｓｅ定数または従属副文終了点に対応するマージ節点を生成し、コントロールフロー枝をマージする処理を行う。
【００９３】
ここで、Ｓ１１６におけるｓｗｉｔｃｈ文を含む動作記述からのＣＦＧへの変換処理の詳細な内容について、図１４に示すフローチャートおよび図１５（ａ）ないし（ｉ）を参照しながら説明する。
【００９４】
まず、前処理を行う（Ｓ１１７）。この前処理において、図１５（ａ）に示すように、ＣＦＧの入力節点（３００）および出力節点（３２９）を生成する。
【００９５】
次に、Ｓ１１８で、動作記述からｓｗｉｔｃｈ構文を抽出する。ここでは、図１２（ａ）に示す動作記述はｓｗｉｔｃｈ構文のみからなるため、この動作記述そのもの全体が、ｓｗｉｔｃｈ構文として抽出される。
【００９６】
続いて、Ｓ１１９では、ｓｗｉｔｃｈ構文以外の記述部分に対して部分ＣＦＧを生成する。ここでは、図１２（ａ）に示す動作記述がｓｗｉｔｃｈ構文のみからなるため、ｓｗｉｔｃｈ構文以外の記述部分に対する部分ＣＦＧは生成されない。
【００９７】
続くＳ１２０で、抽出されたｓｗｉｔｃｈ構文、すなわち図１２（ａ）に示す動作記述そのものに対し、図１５（ｂ）に示すように、部分ＣＦＧ（３３２）を生成する。
【００９８】
なお、ここで、上記Ｓ１２０における部分ＣＦＧの生成処理の内容について、図１６を参照しながら説明する。
【００９９】
まず、Ｓ１２２において、図１５（ｂ）に示すように、分岐節点（３０３）・（３０７）を生成し、それらを接続することにより、部分ＣＦＧ（３３０）を生成する。これにより、図１２（ａ）に示す動作記述の条件式（３０１）における変数ａが、各ｃａｓｅ定数（３０２）・（３０６）に一致する場合にそれぞれアクティブとなるコントロールフロー枝（３０５）・（３０９）と、条件式（３０１）における変数ａがどのｃａｓｅ定数とも一致しない場合にアクティブとなるコントロールフロー枝（３０８）とを出力とする部分ＣＦＧ（３３０）が生成される。
【０１００】
また、ｓｗｉｔｃｈ文全体に対応する部分ＣＦＧ（３３２）の入力を、ここで生成された部分ＣＦＧ（３３０）の入力（３３１）とする。これにより、ｓｗｉｔｃｈ文の動作を分岐節点を用いて表現したＣＦＧを生成することができる。
【０１０１】
次に、Ｓ１２３で、サーチ点をｓｗｉｔｃｈ文の従属副文の先頭のｃａｓｅ定数（３０２）とし、接続ポイントをｅｍｐｔｙとする。
【０１０２】
Ｓ１２４で、ｃａｓｅ定数、ｉｆ−ｂｒｅａｋ文、ｂｒｅａｋ文、または従属副文終了点が見つかるまでサーチ点を更新しながら動作記述をサーチし、サーチされた動作記述を部分記述とする。ここでは既にサーチ点がｃａｓｅ定数（３０２）を指しているため、部分記述は空となり、サーチ点はｃａｓｅ定数（３０２）のままとなる。
【０１０３】
Ｓ１２５で、抽出された部分記述から部分ＣＦＧを生成する。ここでは、部分記述が空なので、部分ＣＦＧは生成されず、接続ポイントはｅｍｐｔｙのままとなる。
【０１０４】
上記のＳ１２４およびＳ１２５により、分割された部分記述には、ただ一つの部分ＣＦＧが生成されるため、各部分記述と部分ＣＦＧとが１対１に対応し、複製のないＣＦＧを生成することができる。
【０１０５】
続いて、サーチ点がｃａｓｅ定数（３０２）を指すので、Ｓ１２６に移行し、ｃａｓｅ定数処理を行う。ここで、Ｓ１２６のｃａｓｅ定数処理の内容について、図１７を参照しながら説明する。
【０１０６】
まず、ここでは接続ポイントがｅｍｐｔｙなので、図１５（ｂ）に示すように、Ｓ１３１により、接続ポイントは、条件式（３０１）における変数ａがｃａｓｅ定数（３０２）に一致する場合にアクティブとなるコントロールフロー枝（３０５）となる。
【０１０７】
Ｓ１３２により、サーチ点はｃａｓｅ定数（３０２）の次の命令である動作記述（３１０）となる。Ｓ１２４で、ｃａｓｅ定数、ｉｆ−ｂｒｅａｋ文、ｂｒｅａｋ文、または従属副文終了点が見つかるまでサーチ点を更新しながら動作記述をサーチし、サーチされた動作記述（３１０）を部分記述とする。この場合、サーチ点は見つかったｉｆ−ｂｒｅａｋ文（３１１）を指す。
【０１０８】
Ｓ１２５で、部分記述として抽出された動作記述（３１０）から部分ＣＦＧ（３１２）を生成する。また、図１５（ｃ）に示すように、部分ＣＦＧ（３１２）の入力を接続ポイント（３０５）に接続し、新しい接続ポイントを部分ＣＦＧ（３１２）の出力（３１３）とする。
【０１０９】
次に、サーチ点がｉｆ−ｂｒｅａｋ文（３１１）を指しているので、ｉｆ−ｂｒｅａｋ文処理（Ｓ１２７）を行う。本処理により、構文中にｉｆ−ｂｒｅａｋ文が含まれるｓｗｉｔｃｈ文の動作を、分岐節点を用いて表現するＣＦＧを生成することができる。ここで、Ｓ１２７におけるｉｆ−ｂｒｅａｋ文処理の内容について、図１８を参照しながら説明する。
【０１１０】
まず、Ｓ１３３で、分岐節点（３１４）を生成し、分岐節点（３１４）の入力を接続ポイント（３１３）に接続する。また、図１５（ｄ）に示すように、接続ポイントを分岐節点３１４の偽側の出力（３１５）とし、分岐節点（３１４）にｉｆ文の条件式（（ｂ＋ｃ）＝２）を対応させる。
【０１１１】
次に、Ｓ１３４で、図１５（ｄ）に示すように、分岐節点（３１４）の真側の出力（３１６）を、ｂｒｅａｋポイントとして記憶する。ｂｒｅａｋポイントとは、ｂｒｅａｋが実行された時にアクティブとなる点を示す。
【０１１２】
さらに、Ｓ１３５で、サーチ点をｉｆ−ｂｒｅａｋ文（３１１）の次の命令（３１７）に設定する。
【０１１３】
Ｓ１２４で、ｃａｓｅ定数、ｉｆ−ｂｒｅａｋ文、ｂｒｅａｋ文、あるいは従属副文終了点が見つかるまで、サーチ点を更新しながら動作記述をサーチし、サーチされた動作記述（３１７）を部分記述とする。この場合、サーチ点は、見つかったｃａｓｅ定数（３０６）を指すこととなる。
【０１１４】
Ｓ１２５で、抽出された部分記述（３１７）から部分ＣＦＧ（３１８）を生成する。また、図１５（ｅ）に示すように、部分ＣＦＧ（３１８）の入力を接続ポイント（３１５）に接続し、新しい接続ポイントは部分ＣＦＧ（３１８）の出力（３１９）とする。
【０１１５】
次に、サーチ点がｃａｓｅ定数（３０６）を指すので、前記したＳ１２６のｃａｓｅ定数処理を行う。本処理により、ｓｗｉｔｃｈ文の動作をマージ節点を用いて表現するＣＦＧを生成することができる。
【０１１６】
ここで、接続ポイントがｅｍｐｔｙではないので、Ｓ１３０により、図１５（ｆ）に示すように、マージ節点（３２０）を生成する。マージ節点（３２０）の入力に、接続ポイント（３１９）と、条件式（３０１）の変数ａがｃａｓｅ定数（３０６）に一致する場合にアクティブとなるコントロールフロー枝（３０９）とを接続する。また、接続ポイントをマージ節点（３２０）の出力（３２１）とする。
【０１１７】
次に、Ｓ１３２により、サーチ点を、ｃａｓｅ定数（３０６）の次の命令（３２２）とする。
【０１１８】
以下、同様にして、Ｓ１２４で部分記述（３２２）を抽出し、Ｓ１２５において、図１５（ｇ）に示すように、部分ＣＦＧ（３２４）を生成し、部分ＣＦＧ（３２４）の入力を接続ポイント（３２１）に接続する。新しい接続ポイントは、部分ＣＦＧ（３２４）の出力（３２５）となり、サーチ点は従属副文終了点（３２３）となる。
【０１１９】
ここで、サーチ点が、ｃａｓｅ定数、ｉｆ−ｂｒｅａｋ文、およびｂｒｅａｋ文のいずれでもないため、Ｓ１２９でマージ節点（３２６）を生成する。図１５（ｈ）に示すように、マージ節点（３２６）の入力に、接続ポイント（３２５）と、ｂｒｅａｋポイント（３１６）と、条件式がどのｃａｓｅ定数とも一致しない場合にアクティブとなるコントロールフロー枝（３０８）とを接続する。
【０１２０】
また、ｓｗｉｔｃｈ文全体に対応するＣＦＧ（３３２）の出力を、マージ節点（３２６）の出力（３２７）とする。本処理により、ｓｗｉｔｃｈ文の動作を、マージ節点を用いて表現するＣＦＧを生成することができる。
【０１２１】
Ｓ１２１で、図１５（ｉ）に示すように、部分ＣＦＧ（３３２）、入力節点（３００）、および出力節点（３２９）を接続し、ＣＦＧを完成する。
【０１２２】
その後、図１３に示すように、周知の方法により、ＣＦＧからＣＤＦＧへの変換処理（Ｓ１０１）、スケジューリング処理（Ｓ１０２）、アロケーション処理（Ｓ１０３）を行う。
【０１２３】
図２０に、ＣＦＧから変換されたＣＤＦＧを、図２１にスケジューリング結果を、図２２に、アロケーション処理により生成された最終的なハードウェアを示す。
【０１２４】
以上のように、本発明によれば、動作記述言語からハードウェア合成を行う際、動作記述言語として特化した専用言語として従来一般的に用いられていたＶＨＤＬ言語の代わりに、分野を問わず一般に広く流布しているＣ言語で動作記述を可能とすることにより、ＶＨＤＬ言語では記述不可能であった実行制御分岐命令を含む動作記述が可能となり、ハードウェア合成の効率が向上する。
【０１２５】
なお、上記では、実行制御分岐命令を含む動作記述からハードウェア合成を行う発明の一形態として、ハードウェア合成装置を例示したが、これに限らず、ハードウェア合成方法に則った処理を行うプログラムとして本発明を実施しても構わない。
【０１２６】
また、本発明は、上述のｉｆ−ｇｏｔｏ文やｓｗｉｔｃｈ文を有するＣ言語に限らず、実行制御分岐命令を持つ全てのコンピュータ言語からのハードウェア合成に適用することが可能である。
【０１２７】
【発明の効果】
以上のように、請求項１記載のハードウェア合成方法は、分割手段、部分ＣＦＧ生成手段、分岐節点生成手段およびマージ節点生成手段が設けられたＣＦＧ生成手段と、ＣＤＦＧ生成手段と、スケジューリング手段と、アロケーション手段とを備えたハードウェア合成装置のハードウェア合成方法であって、上記ＣＦＧ生成手段が、条件に応じて実行されるｇｏｔｏ文としてのｉｆ−ｇｏｔｏ文を含む動作記述を、コントロールフローグラフに変換するステップ（ａ）と、上記ＣＤＦＧ生成手段が、コントロールフローグラフをコントロールデータフローグラフに変換するステップ（ｂ）と、上記スケジューリング手段が、コントロールデータフローグラフに基づいてスケジューリングを行うステップ（ｃ）と、上記アロケーション手段が、スケジューリングの結果に基づいてアロケーションを行うステップ（ｄ）とを含み、上記ステップ（ａ）が、上記分割手段が、動作記述を、ｉｆ−ｇｏｔｏ文またはジャンプ先ラベルで区切られた部分記述に分割するステップと、上記部分ＣＦＧ生成手段が、分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、上記分岐節点生成手段が、ｉｆ−ｇｏｔｏ文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、上記マージ節点生成手段が、ジャンプ先ラベルに対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含む方法である。
【０１２８】
これにより、ｉｆ−ｇｏｔｏ文の動作を実行するハードワイアード回路を合成することができ、高位合成の動作記述言語でｉｆ−ｇｏｔｏ文をサポートすることが可能となるという効果を奏する。
【０１２９】
さらに、上記の方法によれば、ｉｆ−ｇｏｔｏ文を含む動作記述を複製のないコントロールフローグラフに変換することができるので、コントロールフローグラフの分岐において、真のパスおよび偽のパスの双方を実行する高速なハードワイアード回路を生成する場合に、最終的に合成されるハードワイアード回路の面積を小さくすることができるという効果を奏する。
【０１３０】
請求項２記載のハードウェア合成方法は、分割手段、部分ＣＦＧ生成手段、分岐節点生成手段およびマージ節点生成手段が設けられたＣＦＧ生成手段と、ＣＤＦＧ生成手段と、スケジューリング手段と、アロケーション手段とを備えたハードウェア合成装置のハードウェア合成方法であって、上記ＣＦＧ生成手段が、Ｃ言語のｓｗｉｔｃｈ文を含む動作記述をコントロールフローグラフに変換するステップ（ａ）と、上記ＣＤＦＧ生成手段が、コントロールフローグラフをコントロールデータフローグラフに変換するステップ（ｂ）と、上記スケジューリング手段が、コントロールデータフローグラフに基づいてスケジューリングを行うステップ（ｃ）と、上記アロケーション手段が、スケジューリングの結果に基づいてアロケーションを行うステップ（ｄ）とを含み、上記ステップ（ａ）が、上記分割手段が、ｓｗｉｔｃｈ文の従属副文を、ｃａｓｅ定数、ｂｒｅａｋ文、またはｉｆ−ｂｒｅａｋ文で区切られた部分記述に分割するステップと、上記部分ＣＦＧ生成手段が、分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、上記分岐節点生成手段が、ｓｗｉｔｃｈ文の条件式またはｉｆ−ｂｒｅａｋ文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、上記マージ節点生成手段が、ｃａｓｅ定数または従属副文終了点に対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含む方法である。
【０１３１】
これにより、ｓｗｉｔｃｈ文を含む動作記述をコントロールフローグラフで表現できるので、ｓｗｉｔｃｈ文の動作を実行するハードワイアード回路を合成することができ、高位合成の動作記述言語でｓｗｉｔｃｈ文をサポートすることが可能となるという効果を奏する。
【０１３２】
さらに、ｓｗｉｔｃｈ文を含む動作記述を複製のないコントロールフローグラフに変換することができ、コントロールフローグラフの分岐において、真のパスおよび偽のパスの双方を実行する高速なハードワイアード回路を生成する場合に、最終的に合成されるハードワイアード回路の面積を小さくすることができるという効果を奏する。
【０１３３】
請求項３記載のハードウェア合成装置は、条件に応じて実行されるｇｏｔｏ文としてのｉｆ−ｇｏｔｏ文を含む動作記述を、コントロールフローグラフに変換するＣＦＧ生成手段と、コントロールフローグラフをコントロールデータフローグラフに変換するＣＤＦＧ生成手段と、コントロールデータフローグラフに基づいてスケジューリングを行うスケジューリング手段と、スケジューリングの結果に基づいてアロケーションを行うアロケーション手段とを備え、上記ＣＦＧ生成手段が、動作記述を、ｉｆ−ｇｏｔｏ文またはジャンプ先ラベルで区切られた部分記述に分割する分割手段と、分割された部分記述の各々を一つの部分コントロールフローグラフで表す部分ＣＦＧ生成手段と、ｉｆ−ｇｏｔｏ文に対応する分岐節点を生成し、コントロールフロー枝を分岐する分岐節点生成手段と、ジャンプ先ラベルに対応するマージ節点を生成し、コントロールフロー枝をマージするマージ節点生成手段とを備えた構成である。
【０１３４】
上記の構成によれば、ｉｆ−ｇｏｔｏ文を含む動作記述がコントロールフローグラフで表現されるので、ｉｆ−ｇｏｔｏ文の動作を実行するハードワイアード回路を合成することができ、高位合成の動作記述言語によってｉｆ−ｇｏｔｏ文をサポートするハードウェア合成装置が実現されるという効果を奏する。
【０１３５】
さらに、ｉｆ−ｇｏｔｏ文を含む動作記述を複製のないコントロールフローグラフに変換することができる。この結果、コントロールフローグラフの分岐において、真のパスおよび偽のパスの双方を実行する高速なハードワイアード回路を生成する場合に、最終的に合成されるハードワイアード回路の面積を小さくすることができるという効果を奏する。
【０１３６】
請求項４記載のハードウェア合成装置は、Ｃ言語のｓｗｉｔｃｈ文を含む動作記述をコントロールフローグラフに変換するＣＦＧ生成手段と、コントロールフローグラフをコントロールデータフローグラフに変換するＣＤＦＧ生成手段と、コントロールデータフローグラフに基づいてスケジューリングを行うスケジューリング手段と、スケジューリングの結果に基づいてアロケーションを行うアロケーション手段とを備え、上記ＣＦＧ生成手段が、ｓｗｉｔｃｈ文の従属副文を、ｃａｓｅ定数、ｂｒｅａｋ文、またはｉｆ−ｂｒｅａｋ文で区切られた部分記述に分割する分割手段と、分割された部分記述の各々を一つの部分コントロールフローグラフで表す部分ＣＦＧ生成手段と、ｓｗｉｔｃｈ文の条件式またはｉｆ−ｂｒｅａｋ文に対応する分岐節点を生成し、コントロールフロー枝を分岐する分岐節点生成手段と、ｃａｓｅ定数または従属副文終了点に対応するマージ節点を生成し、コントロールフロー枝をマージするマージ節点生成手段とを備えた構成である。
【０１３７】
上記の構成によれば、ｓｗｉｔｃｈ文を含む動作記述をコントロールフローグラフで表現できる。これにより、ｓｗｉｔｃｈ文の動作を実行するハードワイアード回路を合成することができ、高位合成の動作記述言語でｓｗｉｔｃｈ文をサポートすることが可能となるという効果を奏する。
【０１３８】
さらに、上記の構成によれば、ｓｗｉｔｃｈ文を含む動作記述を複製のないコントロールフローグラフに変換することができる。これにより、コントロールフローグラフの分岐において、真のパスおよび偽のパスの双方を実行する高速なハードワイアード回路を生成する場合に、最終的に合成されるハードワイアード回路の面積を小さくすることができるという効果を奏する。
【０１３９】
請求項５記載の記録媒体は、条件に応じて実行されるｇｏｔｏ文としてのｉｆ−ｇｏｔｏ文を含む動作記述を、コントロールフローグラフに変換するステップ（ａ）と、コントロールフローグラフをコントロールデータフローグラフに変換するステップ（ｂ）と、コントロールデータフローグラフに基づいてスケジューリングを行うステップ（ｃ）と、スケジューリングの結果に基づいてアロケーションを行うステップ（ｄ）とを含み、上記ステップ（ａ）が、動作記述を、ｉｆ−ｇｏｔｏ文またはジャンプ先ラベルで区切られた部分記述に分割するステップと、分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、ｉｆ−ｇｏｔｏ文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、ジャンプ先ラベルに対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含むことを特徴とする。
【０１４０】
これにより、ｉｆ−ｇｏｔｏ文を含む動作記述を、高位合成の動作記述言語でサポートする手段を提供することができるという効果を奏する。さらに、ｉｆ−ｇｏｔｏ文を含む動作記述を複製のないコントロールフローグラフに変換することにより、真のパスおよび偽のパスの双方を実行する高速なハードワイアード回路を、回路面積を増大させることなく合成する手段を提供することができるという効果を奏する。
【０１４１】
請求項６記載の記録媒体は、Ｃ言語のｓｗｉｔｃｈ文を含む動作記述をコントロールフローグラフに変換するステップ（ａ）と、コントロールフローグラフをコントロールデータフローグラフに変換するステップ（ｂ）と、コントロールデータフローグラフに基づいてスケジューリングを行うステップ（ｃ）と、スケジューリングの結果に基づいてアロケーションを行うステップ（ｄ）とを含み、上記ステップ（ａ）が、ｓｗｉｔｃｈ文の従属副文を、ｃａｓｅ定数、ｂｒｅａｋ文、またはｉｆ−ｂｒｅａｋ文で区切られた部分記述に分割するステップと、分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、ｓｗｉｔｃｈ文の条件式またはｉｆ−ｂｒｅａｋ文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、ｃａｓｅ定数または従属副文終了点に対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含むことを特徴とする。
【０１４２】
これにより、ｓｗｉｔｃｈ文を含む動作記述を、高位合成の動作記述言語でサポートする手段を提供することができるという効果を奏する。さらに、ｓｗｉｔｃｈ文を含む動作記述を複製のないコントロールフローグラフに変換することにより、真のパスおよび偽のパスの双方を実行する高速なハードワイアード回路を、回路面積を増大させることなく合成する手段を提供することができるという効果を奏する。
【図面の簡単な説明】
【図１】本発明の一実施形態に係る、実行制御分岐命令を含む動作記述からのハードウェア合成方法の基本的な流れを示すフローチャートである。
【図２】本発明の一実施形態に係るハードウェア合成装置の概略構成を示すブロック図である。
【図３】同図（ａ）は、実行制御分岐命令としてｉｆ−ｇｏｔｏ文を含む動作記述の一例を示す説明図であり、同図（ｂ）は、同図（ａ）に示す動作記述に基づいて生成されるコントロールフローグラフ（ＣＦＧ）である。
【図４】ｉｆ−ｇｏｔｏ文を含む動作記述からのハードウェア合成方法の基本的な流れを示すフローチャートである。
【図５】ｉｆ−ｇｏｔｏ文を含む動作記述からのＣＦＧの生成処理を示すフローチャートである。
【図６】同図（ａ）ないし（ｇ）は、図５に示すフローチャートに基づいて、図３（ａ）に示す動作記述から図３（ｂ）に示すＣＦＧが生成される過程を示す説明図である。
【図７】図５に示すフローチャートの一つのステップとしての、ｉｆ−ｇｏｔｏ文処理の内容を示すフローチャートである。
【図８】図５に示すフローチャートの一つのステップとしての、ジャンプ先ラベル処理の内容を示すフローチャートである。
【図９】図３（ｂ）に示すＣＦＧから生成されるコントロールデータフローグラフ（ＣＤＦＧ）である。
【図１０】図９に示すＣＤＦＧに基づくスケジューリング結果を示す説明図である。
【図１１】図１０に示すスケジューリング結果に基づくアロケーション結果を示す説明図である。
【図１２】同図（ａ）は、実行制御分岐命令としてｓｗｉｔｃｈ文を含む動作記述の一例を示す説明図であり、同図（ｂ）は、同図（ａ）に示す動作記述に基づいて生成されるＣＦＧである。
【図１３】ｓｗｉｔｃｈ文を含む動作記述からのハードウェア合成方法の基本的な流れを示すフローチャートである。
【図１４】ｓｗｉｔｃｈ文を含む動作記述からのＣＦＧの生成処理を示すフローチャートである。
【図１５】同図（ａ）ないし（ｉ）は、図１４に示すフローチャートに基づいて、図１２（ａ）に示す動作記述から図１２（ｂ）に示すＣＦＧが生成される過程を示す説明図である。
【図１６】図１４に示すフローチャートの一つのステップとしての、ｓｗｉｔｃｈ構文からの部分ＣＦＧ生成処理の内容を示すフローチャートである。
【図１７】図１６に示すフローチャートの一つのステップとしての、ｃａｓｅ定数処理の内容を示すフローチャートである。
【図１８】図１６に示すフローチャートの一つのステップとしての、ｉｆ−ｂｒｅａｋ文処理の内容を示すフローチャートである。
【図１９】図１６に示すフローチャートの一つのステップとしての、ｂｒｅａｋ文処理の内容を示すフローチャートである。
【図２０】図１２（ｂ）に示すＣＦＧから生成されるＣＤＦＧである。
【図２１】図２０に示すＣＤＦＧに基づくスケジューリング結果を示す説明図である。
【図２２】図２１に示すスケジューリング結果に基づくアロケーション結果を示す説明図である。
【図２３】同図（ａ）は条件分岐を含む動作記述の一例を示す説明図であり、同図（ｂ）は、上記動作記述から生成されるＣＦＧである。
【図２４】図２３（ｂ）に示すＣＦＧから生成されるＣＤＦＧである。
【図２５】図２４に示すＣＤＦＧに基づくスケジューリング結果を示す説明図である。
【図２６】図２５に示すスケジューリング結果に基づくアロケーション結果を示す説明図である。
【図２７】図３（ａ）に示す動作記述から生成される効率の悪いＣＦＧである。
【図２８】図１２（ａ）に示す動作記述から生成される効率の悪いＣＦＧである。
【符号の説明】
１    ＣＦＧ生成部（ＣＦＧ生成手段）
２    ＣＤＦＧ生成部（ＣＤＦＧ生成手段）
３    スケジューリング部（スケジューリング手段）
４    アロケーション部（アロケーション手段）
５    分割部（分割手段）
６    部分ＣＦＧ生成部（部分ＣＦＧ生成手段）
７    分岐節点生成部（分岐節点生成手段）
８    マージ節点生成部（マージ節点生成手段）
【図１】
0003765923.tif 000002
【図２】
0003765923.tif 000003
【図３】
0003765923.tif 000004
【図４】
0003765923.tif 000005
【図５】
0003765923.tif 000006
【図６】
0003765923.tif 000007
【図７】
0003765923.tif 000008
【図８】
0003765923.tif 000009
【図９】
0003765923.tif 000010
【図１０】
0003765923.tif 000011
【図１１】
0003765923.tif 000012
【図１２】
0003765923.tif 000013
【図１３】
0003765923.tif 000014
【図１４】
0003765923.tif 000015
【図１５】
0003765923.tif 000016
【図１６】
0003765923.tif 000017
【図１７】
0003765923.tif 000018
【図１８】
0003765923.tif 000019
【図１９】
0003765923.tif 000020
【図２０】
0003765923.tif 000021
【図２１】
0003765923.tif 000022
【図２２】
0003765923.tif 000023
【図２３】
0003765923.tif 000024
【図２４】
0003765923.tif 000025
【図２５】
0003765923.tif 000026
【図２６】
0003765923.tif 000027
【図２７】
0003765923.tif 000028
【図２８】
0003765923.tif 000029