(57)【特許請求の範囲】
【請求項１】
ハードウェアの設計を支援するＣＡＤにおいて３以上の階層からなる階層構造を有するＨＤＬで記述されたＨＤＬファイルを処理するＨＤＬ処理方法であって、
該ＨＤＬの階層構造を解析して解析結果を求める解析ステップと、
該解析結果に基づいて階層毎に該ＨＤＬの処理を１つずつ行う処理ステップとを含み、
該解析ステップは、エンティティ毎に各エンティティのエンティティ文及びアーキテクチャ文に相当する情報が記録された該ＨＤＬのファイル中の位置情報を格納したエンティティテーブルを用いて該ＨＤＬの階層構造を解析する
ことを特徴とする、ＨＤＬ処理方法。
【請求項２】
該処理ステップは、該階層構造の下位階層から順に該ＨＤＬの処理を行い、
該解析ステップは、エンティティ毎に該エンティティテーブルと、上位エンティティリストの番号とエンティティテーブルの番号のリストを示すエンティティテーブルへのリンクのリストとを有する上位エンティティリストテーブルと、エンティティテーブルから下位エンティティ数が０のエンティティを入れた実行準備リストとに基づいて該ＨＤＬの階層構造を解析する
ことを特徴とする、請求項１記載のＨＤＬ処理方法。
【請求項３】
該処理ステップは、処理の実行順序を、同じ階層のエンティティを優先する幅優先的、又は、階層のエンティティを優先する深さ優先的、又は、最上位階層から遠い階層のエンティティを優先する遠い階層優先的に行うことを特徴とする、請求項２記載のＨＤＬ処理方法。
【請求項４】
ハードウェアの設計を支援するＣＡＤにおいて３以上の階層からなる階層構造を有するＨＤＬで記述されたＨＤＬファイルを処理するＨＤＬ処理方法であって、
該ＨＤＬの階層構造を解析して解析結果を求める解析ステップと、
該解析結果に基づいて階層毎に該ＨＤＬの並列分散処理を行う処理ステップとを含み、
該解析ステップは、エンティティ毎に各エンティティのエンティティ文及びアーキテクチャ文に相当する情報が記録された該ＨＤＬのファイル中の位置情報を格納したエンティティテーブルを用いて該ＨＤＬの階層構造を解析する
ことを特徴とする、ＨＤＬ処理方法。
【請求項５】
該処理ステップは、該階層構造の下位階層から順に該ＨＤＬの並列分散処理を行い、
該解析ステップは、エンティティ毎に該エンティティテーブルと、上位エンティティリストの番号とエンティティテーブルの番号のリストを示すエンティティテーブルへのリンクのリストとを有する上位エンティティリストテーブルと、エンティティテーブルから下位エンティティ数が０のエンティティを入れた実行準備リストとに基づいて該ＨＤＬの階層構造を解析する
ことを特徴とする、請求項４記載のＨＤＬ処理方法。
【請求項６】
該処理ステップは、並列度に制限付きで該ＨＤＬの並列分散処理を行うことを特徴とする、請求項４又は５記載のＨＤＬ処理方法。
【請求項７】
該処理ステップは、処理の実行順序を、同じ階層のエンティティを優先する幅優先的、又は、階層のエンティティを優先する深さ優先的、又は、最上位階層から遠い階層のエンティティを優先する遠い階層優先的に行うことを特徴とする、請求項５又は６記載のＨＤＬ処理方法。
【請求項８】
コンピュータに、請求項１〜７のいずれか１項記載のＨＤＬ処理方法の各ステップを実行させてＨＤＬで記述されたＨＤＬファイルを処理させる手順を格納したことを特徴とする、プログラム。
【請求項９】
請求項８記載のプログラムを格納したことを特徴とする、コンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＨＤＬ処理方法、プログラム及びコンピュータ読み取り可能な記憶媒体に係り、特にハードウェアの設計を支援するＣＡＤ（計算機支援設計）においてＨＤＬ（ハードウェア記述言語）の処理を行うＨＤＬ処理方法、コンピュータにそのようなＨＤＬの処理を行わせるプログラム、及びそのようなプログラムを格納したコンピュータ読み取り可能な記憶媒体に関する。
【背景技術】
【０００２】
従来、ＨＤＬの処理を行う場合、ＨＤＬの論理合成や論理シミュレーションのコンパイル等の処理を分割することなく単一パスで行うことが特許文献１や特許文献２に提案されている。ＨＤＬの論理合成とは、例えばＲＴＬ（Resistor Transfer Level）形式のＨＤＬ等の高級言語による記述が入力され、ネットリスト（Net List）のＨＤＬ等の高級言語よりレベルが低い言語による記述に処理されることを言う。又、ＨＤＬの処理をブロック単位に分割して行うことが特許文献３や特許文献４に提案されている。更に、下位階層から順に階層毎にＨＤＬの処理を行う方法が特許文献５に提案されている。階層毎に並列にＨＤＬの処理を行うことが特許文献６に提案されている。【０００３】
近年、ＬＳＩの論理規模が拡大しており、又、ＬＳＩを短期間で開発することが求められている。このため、ＬＳＩの開発における論理設計段階に要する期間を短縮する必要性が生じている。しかし、従来の論理設計段階におけるＨＤＬの論理合成や論理シミュレーション等のＣＡＤツールの実行に要する時間は短くない。【０００４】
ＨＤＬの処理を行う場合、処理の分割を行わない従来の方法では、ＨＤＬの論理合成や論理シミュレーション等の処理を単一パスで行うため、処理を複数のＣＰＵで並列に分散して実行することができず、実行時間が長い。又、処理を単一パスで行うため、メモリ等の計算機資源を一時的に大量に消費してしまう。【０００５】
ＨＤＬの処理をブロック単位に分割して行う従来の方法は、ＨＤＬで記述された階層設計を考慮したり、処理を並列に分散して実行することを考慮していない。【０００６】
特許文献５のように下位階層から順に階層毎にＨＤＬの処理を行う方法では、処理を並列に実行することができない。又、ＶＨＤＬ（Very High-Speed IC (VHSIC) HDL）のコンフィギュレーション（configuration）文が記述されていることが前提となっているため、ＶＨＤＬ以外のコンフィギュレーション文に相当する文法が存在しないＨＤＬでは処理を行うことができない。【０００７】
特許文献６のように階層毎に並列にＨＤＬの処理を行う方法では、親と子の２階層しか扱えず、又、ある階層のインスタンスが複数ある場合には対応することができず、一般的なＨＤＬの処理を行うことができない。
【特許文献１】特開平７−３３４５４８号公報
【特許文献２】特開平９−２５１４８０号公報
【特許文献３】特開平９−３３０３３９号公報
【特許文献４】特開平７−７８１８９号公報
【特許文献５】特開２０００−１４８８０５号公報
【特許文献６】特開平１−３０４５４１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
本発明は、一般的なＨＤＬを階層毎に処理可能なＨＤＬ処理方法、プログラム及びコンピュータ読み取り可能な記憶媒体を提供することを概括的目的とする。
【課題を解決するための手段】
【０００９】
上記の課題は、ハードウェアの設計を支援するＣＡＤにおいて３以上の階層からなる階層構造を有するＨＤＬで記述されたＨＤＬファイルを処理するＨＤＬ処理方法であって、該ＨＤＬの階層構造を解析して解析結果を求める解析ステップと、該解析結果に基づいて階層毎に該ＨＤＬの処理を１つずつ行う処理ステップとを含むことを特徴とするＨＤＬ処理方法によって達成できる。【００１０】
上記の課題は、ハードウェアの設計を支援するＣＡＤにおいて３以上の階層からなる階層構造を有するＨＤＬで記述されたＨＤＬファイルを処理するＨＤＬ処理方法であって、該ＨＤＬの階層構造を解析して解析結果を求める解析ステップと、該解析結果に基づいて階層毎に該ＨＤＬの並列分散処理を行う処理ステップとを含むことを特徴とするＨＤＬ処理方法によっても達成できる。【００１１】
上記の課題は、コンピュータに、上記のいずれかのＨＤＬ処理方法の各ステップを実行させてＨＤＬで記述されたＨＤＬファイルを処理させる手順を格納したことを特徴とするプログラムによっても達成できる。【００１２】
上記の課題は、上記のプログラムを格納したことを特徴とするコンピュータ読み取り可能な記憶媒体によっても達成できる。
【発明の効果】
【００１３】
本発明によれば、一般的なＨＤＬを階層毎に処理可能なＨＤＬ処理方法、プログラム及びコンピュータ読み取り可能な記憶媒体を実現できるという効果が得られる。
【図面の簡単な説明】
【００１４】
【図１】本発明の第１実施例の手順を説明するフローチャートである。
【図２】エンティティテーブルのデータ構造を示す図である。
【図３】ステップＳ１の処理をより詳細に説明するフローチャートである。
【図４】ステップＳ１４の処理をより詳細に説明するフローチャートである。
【図５】ステップＳ１６の処理をより詳細に説明するフローチャートである。
【図６】入力されるＶＨＤＬの一例を示す図である。
【図７】図６のＶＨＤＬが入力されて図１に示すステップＳ１の処理が行われた場合に得られるエンティティテーブルを示す図である。
【図８】ステップＳ２の処理をより詳細に説明するフローチャートである。
【図９】本発明の第２実施例の手順を説明するフローチャートである。
【図１０】ステップＳ２Ｄの処理をより詳細に説明するフローチャートである。
【図１１】本発明の第３実施例の手順を説明するフローチャートである。
【図１２】ステップＳ１６の処理をより詳細に説明するフローチャートである。
【図１３】エンティティテーブルのデータ構造を示す図である。
【図１４】上位エンティティリストテーブルのデータ構造を示す図である。
【図１５】ステップＳ１Ａの処理が行われた場合のエンティティテーブルを示す図である。
【図１６】ステップＳ１Ａの処理が行われた場合の上位エンティティリストテーブルを示す図である。
【図１７】ステップＳ３の処理をより詳細に説明するフローチャートである。
【図１８】ステップＳ３の処理が行われた場合のエンティティテーブルを示す図である。
【図１９】ステップＳ２Ａの処理をより詳細に説明するフローチャートである。
【図２０】実行準備リストを示す図である。
【図２１】ステップＳ６４の処理が行われた場合の実行準備リストを示す図である。
【図２２】ステップＳ６４の処理が再度行われた場合の実行準備リストを示す図である。
【図２３】ステップＳ６４の処理が再再度行われた場合の実行準備リストを示す図である。
【図２４】ステップＳ６６が行われた場合のエンティティテーブルを示す図である。
【図２５】ステップＳ６６が行われた場合のエンティティテーブルを示す図である。
【図２６】ステップＳ６８が行われた場合の実行準備リストを示す図である。
【図２７】ステップＳ６６が行われた場合のエンティティテーブルを示す図である。
【図２８】ステップＳ６８が行われた場合の実行準備リストを示す図である。
【図２９】ステップＳ６６が行われた場合のエンティティテーブルを示す図である。
【図３０】ステップＳ６６が行われた場合のエンティティテーブルを示す図である。
【図３１】ステップＳ６８が行われた場合の実行準備リストを示す図である。
【図３２】夫々のエンティティが並列分散処理されるシーケンスを示す図である。
【図３３】本発明の第４実施例の手順を示すフローチャートである。
【図３４】ステップＳ２Ｂの処理をより詳細に説明するフローチャートである。
【図３５】本発明の第５実施例の手順を示すフローチャートである。
【図３６】ステップＳ２Ｃの処理をより詳細に説明するフローチャートである。
【図３７】本発明の第６実施例の手順を示すフローチャートである。
【図３８】ステップＳ２Ｅの処理をより詳細に説明するフローチャートである。
【図３９】エンティティＥ１〜Ｅ６の階層構造を示す図である。
【図４０】幅優先的に行う実行順序の場合の実行順序を示す図である。
【図４１】深さ優先的に行う実行順序の場合の実行順序を示す図である。
【図４２】最上位階層から遠い階層から優先的に行う実行順序の場合の実行順序を示す図である。
【図４３】ステップＳ６８の処理をより詳細に説明するフローチャートである。
【図４４】第２又は第４実施例のＨＤＬ処理方法を実行可能なコンピュータシステムの一例を示すブロック図である。
【図４５】第１、第３、第５又は第６実施例のＨＤＬ処理方法を実行可能なコンピュータシステムの一例を示すブロック図である。
【図４６】第１、第３、第５又は第６実施例のＨＤＬ処理方法を実行可能なコンピュータシステムの他の例を示すブロック図である。
【図４７】論理合成を説明する図である。
【符号の説明】
【００１５】
１１，１１−１〜１１−Ｎ  ＣＰＵ
１２      メモリ
１３      ＨＤＤ
１４      ネットワークアダプタ
１５      バス
１６      ネットワーク
【発明を実施するための最良の形態】
【００１６】
本発明では、ＨＤＬの階層構造に着目し、ＨＤＬの処理を階層毎に実行する。複数のプロセッサにおいて階層毎に並列分散処理を実行することにより、規模の大きいＨＤＬの処理を短時間で実行することができる。又、単一プロセッサにおいて階層毎に分割して処理を実行することにより、規模の大きいＨＤＬの処理をメモリ等の計算機資源を一時的に大量に消費することなく実行することができる。【００１７】
ＨＤＬの処理を階層毎に実行する場合、階層間の整合性のチェックをより厳密に行うために、下位の階層からＨＤＬの処理を実行するようにしても良い。この場合、上位の階層のＨＤＬの処理を実行するときに、下位の階層のＨＤＬのチェックを行うことができる。又、下位の階層からＨＤＬの処理を実行するとき、実行順序に選択肢を与えて実行順序を切り替えるようにしても良い。【００１８】
階層毎に並列分散処理を実行する場合、並列度に制限を与えて、複数のプロセッサ上においてもメモリ等の計算機資源の一時的に大量な消費を防止することができる。【００１９】
以下に、本発明のＨＤＬ処理方法、プログラム及びコンピュータ読み取り可能な記憶媒体の各実施例を、図面と共に説明する。
【実施例】
【００２０】
以下の実施例では、説明の便宜上、ＨＤＬの１つであるＶＨＤＬを入力とする論理合成を行う場合について説明する。ＶＨＤＬは、階層毎にエンティティ（entity）と呼ばれる単位で構成されている。ＶＨＤＬにおいて、エンティティはエンティティ文とアーキテクチャ（architecture）文により構成されている。【００２１】
（第１実施例）
先ず、本発明の第１実施例を説明する。本実施例では、階層毎にＶＨＤＬの並列分散処理が実行される。【００２２】
図１は、本発明の第１実施例の手順を説明するフローチャートである。図１において、ステップＳ１は、ＨＤＤ等の記憶装置又は記録媒体からＶＨＤＬで記述されたＶＨＤＬファイルを読み込み、エンティティ毎にエンティティ文及びアーキテクチャ文のファイル名と開始行と終了行（ＶＨＤＬのファイルの位置情報）をエンティティテーブルに格納する。【００２３】
図２は、階層毎にＶＨＤＬの並列分散処理が実行される場合のエンティティテーブルのデータ構造を示す図である。図２に示すエンティティテーブルは、エンティティの番号、エンティティ名、エンティティ文の開始行、エンティティ文の終了行、アーキテクチャ文の開始行、アーキテクチャ文の終了行及びエンティティ文のファイル名とアーキテクチャ文のファイル名を有する。エンティティテーブル中、ファイル名は省略しても良い。【００２４】
ステップＳ２は、ステップＳ１でエンティティテーブルに格納されたＶＨＤＬのファイルの位置情報に基づいて、エンティティ毎の処理を行うことで階層毎にＶＨＤＬを処理し、処理は終了する。【００２５】
図３は、図１に示すステップＳ１の処理をより詳細に説明するフローチャートである。図３において、ステップＳ１１は、ＶＨＤＬのファイルを開き、ステップＳ１２は、ファイルの終わりであるか否かを判定する。ステップＳ１２の判定結果がＮＯであると、ステップＳ１３は、エンティティ文があるか否かを判定する。ステップＳ１３の判定結果がＹＥＳであると、ステップＳ１４はエンティティ文の処理、即ち、解釈を行い、処理はステップＳ１２へ戻る。他方、ステップＳ１３の判定結果がＮＯであると、ステップＳ１５は、アーキテクチャ文があるか否かを判定する。ステップＳ１５の判定結果がＹＥＳであると、ステップＳ１６は、アーキテクチャ文の処理、即ち、解釈を行い、処理はステップＳ１２へ戻る。ステップＳ１５の判定結果がＮＯであると、ステップＳ１７は、他の文の処理、即ち、解釈を行い、処理はステップＳ１２へ戻る。ステップＳ１２の判定結果がＹＥＳになると、処理は終了する。【００２６】
図４は、ステップＳ１４の処理（エンティティ文の解釈）をより詳細に説明するフローチャートである。図４において、ステップＳ２１は、対応するエンティティテーブルにエンティティ名を格納する。ステップＳ２２は、エンティティテーブルにエンティティ文のファイル名と開始行と終了行（ＶＨＤＬのファイルの位置情報）を格納し、処理は終了する。【００２７】
図５は、ステップＳ１６の処理（アーキテクチャ文の解釈）をより詳細に説明するフローチャートである。図５において、ステップＳ３１は、対応するエンティティテーブルにアーキテクチャ文のファイル名と開始行と終了行（ＶＨＤＬのファイルの位置情報）を格納し、処理は終了する。【００２８】
従って、図６に示すＶＨＤＬが入力されてステップＳ１の処理が行われると、図７に示す如きエンティティテーブルが得られる。【００２９】
図８は、図１に示すステップＳ２の処理をより詳細に説明するフローチャートである。図８において、ステップＳ５１は、エンティティテーブル中の例えばエンティティの番号の小さい順にエンティティがあるか否かを判定する。ステップＳ５１の判定結果がＹＥＳであると、ステップＳ５２は、対応するエンティティテーブルからエンティティ文の位置情報とアーキテクチャ文の位置情報に基づいて、元のＶＨＤＬ（例えば１〜４６行）から処理を行うＶＨＤＬ（例えば１〜３行と４〜９行）を取り出す。ステップＳ５３は、取り出したＶＨＤＬを別のプロセッサで処理させ、処理はステップＳ５１へ戻る。つまり、ステップＳ５３においてＶＨＤＬの処理が終わらなくても先の処理へ進むことができる（並列分散処理）。他方、ステップＳ５１の判定結果がＮＯであると、ステップＳ５４は、ＶＨＤＬを処理している別のプロセッサの処理が全て終了するのを待ち、処理は終了する。【００３０】
上記の如き処理により、階層毎にＶＨＤＬの並列分散処理が実行される。【００３１】
（第２実施例）
次に、本発明の第２実施例を説明する。本実施例では、階層毎にＶＨＤＬの処理が１つずつ実行される。【００３２】
図９は、本発明の第２実施例の手順を説明するフローチャートである。図９中、図１と同一ステップには同一符号を付し、その説明は省略する。ステップＳ１の後、ステップＳ２Ｄは、階層毎にＶＨＤＬを処理する。【００３３】
図１０は、図９に示すステップＳ２Ｄの処理をより詳細に説明するフローチャートである。図１０中、図８と同一ステップには同一符号を付し、その説明は省略する。図１０において、ステップＳ５２の後にはステップＳ７１が行われる。又、ステップＳ５１の判定結果がＮＯであると、処理は終了する。ステップＳ７１は、取り出したＶＨＤＬを逐次的に処理し、処理はステップＳ５１へ戻る。つまり、ステップＳ７１でＶＨＤＬの処理が終わるまで先の処理へ進むことはない。【００３４】
上記の如き処理により、階層毎にＶＨＤＬの処理が１つずつ実行される。【００３５】
（第３実施例）
次に、本発明の第３実施例を説明する。本実施例では、階層毎に、且つ、下位階層から順に、ＶＨＤＬの並列分散処理が実行される。【００３６】
図１１は、本発明の第３実施例の手順を示すフローチャートである。図１１に示すステップＳ１Ａの詳細は図３と同じであり、この場合の図３のステップＳ１４の詳細は図４と同じであるが、図３のステップＳ１６の詳細は図１２に示す如くである。【００３７】
図１２は、本実施例におけるステップＳ１６の処理をより詳細に説明するフローチャートである。図１２中、図５と同一ステップには同一符号を付し、その説明は省略する。図１２において、ステップＳ３２は、アーキテクチャ文中にコンポーネントインスタンス（component instance）があるか否かを判定する。例えば、アーキテクチャ文中に図６に示す６〜８，１６，２４のようなコンポーネントインスタンスがありステップＳ３２の判定結果がＹＥＳであると、ステップＳ３３は、エンティティテーブルにそのコンポーネント名を格納する。図６に示す６〜８，１６，２４のようなコンポーネントインスタンスの場合、エンティティテーブルにコンポーネント名Ｅ２〜Ｅ６が格納される。ステップＳ３４は、コンポーネント名の格納されたエンティティテーブルの上位エンティティリストに、アーキテクチャ文に対応するエンティティテーブルへのリンクを格納し、処理はステップＳ３２へ戻る。ステップＳ３２の判定結果がＮＯになると、処理は終了する。【００３８】
図１３は、階層毎に、且つ、下位階層から順に、ＶＨＤＬの並列分散処理が実行される場合のエンティティテーブルのデータ構造を示す図である。図１３に示すエンティティテーブルは、エンティティの番号、エンティティ名、エンティティ文の開始行、エンティティ文の終了行、アーキテクチャ文の開始行、アーキテクチャ文の終了行、上位エンティティリストへのリンク、下位エンティティ数及びエンティティ文のファイル名とアーキテクチャ文のファイル名を有する。上位エンティティリストへのリンクは、そのエンティティの上位にあるエンティティのリストを格納しているテーブル（上位エンティティリストテーブル）の番号を示す。下位エンティティ数は、そのエンティティの下位にあるエンティティの個数を示す。エンティティテーブル中、ファイル名は省略しても良い。【００３９】
図１４は、上位エンティティリストテーブルのデータ構造を示す図である。上位エンティティリストテーブルは、上位エンティティリストの番号及びエンティティテーブルへのリンクのリストを有する。エンティティテーブルへのリンクのリストは、エンティティテーブルの番号のリストを示す。【００４０】
従って、図６に示すＶＨＤＬが入力され、階層毎に、且つ、下位階層から順に、ＶＨＤＬの並列分散処理が実行される場合に図１１に示すステップＳ１Ａの処理が行われると、エンティティテーブルは図１５のようになり、上位エンティティリストテーブルは図１６に示すようになる。図１５は、ステップＳ１Ａの処理が行われた場合のエンティティテーブルを示す図であり、図１６は、ステップＳ１Ａの処理が行われた場合の上位エンティティリストテーブルを示す図である。図１５中、上位エンティティリストへのリンク１〜５は、夫々図１６に示す上位エンティティリストの番号１〜５に対応する。又、図１６に示すエンティティテーブルへのリンクのリスト１，２，３は、図１５に示すエンティティの番号１，２，３に対応する。【００４１】
図１７は、図１１に示すステップＳ３の処理をより詳細に説明するフローチャートである。ステップＳ４１は、エンティティテーブル中の例えばエンティティの番号の小さい順にエンティティがあるか否かを判定する。ステップＳ４１の判定結果がＹＥＳであると、ステップＳ４２は、エンティティの上位エンティティリストに上位エンティティがあるか否かを判定し、判定結果がＮＯであると処理はステップＳ４１へ戻る。ステップＳ４２の判定結果がＹＥＳであると、ステップＳ４３は、上位インティティのあるエンティティテーブルの下位エンティティ数を１だけ増やし（インクリメントし）、処理はステップＳ４２へ戻る。ステップＳ４１の判定結果がＮＯになると、処理は終了する。このようにして、各エンティティの下位エンティティの個数が計算される。図６に示すＶＨＤＬが入力され、階層毎に、且つ、下位階層から順に、ＶＨＤＬの並列分散処理が実行される場合に図１１に示すステップＳ１Ａ，Ｓ３の処理が行われると、エンティティテーブルは図１８のようになる。図１８は、ステップＳ３の処理が行われた場合のエンティティテーブルを示す図である。【００４２】
図１９は、図６に示すＶＨＤＬが入力され、階層毎に、且つ、下位階層から順に、ＶＨＤＬの並列分散処理が実行される場合に行われる図１１に示すステップＳ２Ａの処理をより詳細に説明するフローチャートである。図１９において、ステップＳ６１は、エンティティテーブルから下位エンティティ数が０のエンティティを入れた図２０に示す如き実行準備リストを作成する。図２０は、実行準備リストを示す図である。ステップＳ６２は、実行準備リストが空、或いは、別のプロセッサでＶＨＤＬの処理中ではないか否かを判定する。この場合、実行準備リストは空ではなく、ステップＳ６２の判定結果はＮＯであるため、処理はステップＳ６３へ進む。又、ステップＳ６３は、実行準備リストが空であるか否かを判定し、この場合は判定結果がＮＯであるため、処理はステップＳ６４へ進む。【００４３】
ステップＳ６４は、実行準備リストから先頭の要素、即ち、先頭のエンティティテーブルの番号を取り出す。図２０に示す実行準備リストの場合、先頭の要素、即ち、エンティティテーブルの番号は４であるため、処理はこの要素（エンティティテーブルの番号）４を保持して次のステップＳ５２へ進む。この時の実行準備リストは、図２１に示すようになる。図２１は、ステップＳ６４の処理が行われた場合の実行準備リストを示す図である。ステップＳ５２及びステップＳ５３は、図８に示すステップＳ５２及びステップＳ５３と同じであり、ステップＳ５３の後、処理はステップＳ６３へ戻る。【００４４】
ステップＳ６３の判定結果は再度ＮＯであり、ステップＳ６４は、図２１に示す実行準備リストから先頭の要素、即ち、先頭のエンティティテーブルの番号である５を取り出し、この要素（エンティティテーブルの番号）５を保持して次のステップＳ５２へ進む。この時の実行準備リストは、図２２に示すようになる。図２２は、ステップＳ６４の処理が再度行われた場合の実行準備リストを示す図である。ステップＳ５２及びステップＳ５３の後、処理はステップＳ６３へ戻る。【００４５】
ステップＳ６３の判定結果は再度ＮＯであり、ステップＳ６４は、図２２に示す実行準備リストから先頭の要素、即ち、先頭のエンティティテーブルの番号である６を取り出し、この要素（エンティティテーブルの番号）６を保持して次のステップＳ５２へ進む。この時の実行準備リストは、図２３に示すようになる。図２３は、ステップＳ６４の処理が再再度行われた場合の実行準備リストを示す図である。ステップＳ５２及びステップＳ５３の後、処理はステップＳ６３へ戻る。【００４６】
今回は、ステップＳ６３の判定結果はＹＥＳとなるため、処理はステップＳ５６へ進む。ステップＳ５６は、ステップＳ５３により別のプロセッサで行われているＶＨＤＬの処理が１つ終了するのを待つ。ステップＳ６５は、対応するエンティティの上位エンティティリストを参照することで、エンティティテーブルの番号に対応するリストの要素があるか否かを判定する。ここで、ステップＳ５６においてエンティティテーブルの番号４のエンティティに対応するＶＨＤＬの処理が終了したとすると、ステップＳ６５は、図１８に示すエンティティテーブルのエンティティの番号４については、上位エンティティリストへのリンクが３であることから、図１６に示す上位エンティティリストテーブルの上位エンティティリストの番号３のリストの要素１を参照するので、判定結果はＹＥＳとなる。ステップＳ６６は、要素１に対応するエンティティテーブルの番号１の下位エンティティ数を１だけ減らす（デクリメントする）。この時のエンティティテーブルは、図２４に示すようになる。図２４は、ステップＳ６６が行われた場合のエンティティテーブルを示す図である。【００４７】
ステップＳ６７は、下位エンティティ数が０であるか否かを判定し、この場合の判定結果はＮＯであるため、処理はステップＳ６５へ戻る。この場合、エンティティテーブルの番号に対応するリストの要素がないため、ステップＳ６５の判定結果はＮＯとなり、処理はステップＳ６２へ戻る。この状態では、別のプロセッサでＶＨＤＬの処理中（エンティティテーブルのエンティティの番号が５と６）であるため、ステップＳ６２の判定結果はＮＯとなり、処理はステップＳ６３へ進む。この場合、実行準備リストが空であるため、ステップＳ６３の判定結果はＹＥＳとなり、処理はステップＳ５６へ進む。【００４８】
ここで、ステップＳ５６においてエンティティテーブルの番号５のエンティティに対応するＶＨＤＬの処理が終了したとすると、ステップＳ６５は、図２４に示すエンティティテーブルのエンティティの番号５については、上位エンティティリストへのリンクが４であることから、図１６に示す上位エンティティリストテーブルの上位エンティティリストの番号４のリストの要素２を参照するので、判定結果はＹＥＳとなる。ステップＳ６６は、要素２に対応するエンティティテーブルの番号２の下位エンティティ数を１だけ減らす（デクリメントする）。この時のエンティティテーブルは、図２５に示すようになる。図２５は、ステップＳ６６が行われた場合のエンティティテーブルを示す図である。【００４９】
ステップＳ６７は、下位エンティティ数が０であるか否かを判定し、この場合の判定結果はＹＥＳあるため、処理はステップＳ６８へ進む。ステップＳ６８は、実行準備リストに要素２を入れ、処理はステップＳ６５へ戻る。この時の実行準備リストは、図２６に示すようになる。図２６は、ステップＳ６８が行われた場合の実行準備リストを示す図である。【００５０】
ステップＳ６５では、もう参照するリストがないため、判定結果がＮＯとなって処理はステップＳ６２へ戻る。ステップＳ６２では、実行準備リストが空ではないため、判定結果がＮＯとなって処理はステップＳ６３へ進む。ステップＳ６３では、実行準備リストが空ではないため、判定結果がＮＯとなって処理はステップＳ６４へ進む。ステップＳ６４は、実行準備リストの先頭の要素２を取り出す。この時の実行準備リストは、図２３に示すようになる。ステップＳ５２，Ｓ５３の後、ステップＳ６３では、実行準備リストが空であるため判定結果がＹＥＳとなり、処理はステップＳ５６へ進む。【００５１】
ここで、ステップＳ５６においてエンティティテーブルの番号６のエンティティに対応するＶＨＤＬの処理が終了したとすると、ステップＳ６５は、図２５に示すエンティティテーブルのエンティティの番号６については、上位エンティティリストへのリンクが５であることから、図１６に示す上位エンティティリストテーブルの上位エンティティリストの番号５のリストの要素３を参照するので、判定結果はＹＥＳとなる。ステップＳ６６は、要素３に対応するエンティティテーブルの番号３の下位エンティティ数を１だけ減らす（デクリメントする）。この時のエンティティテーブルは、図２７に示すようになる。図２７は、ステップＳ６６が行われた場合のエンティティテーブルを示す図である。【００５２】
ステップＳ６７は、下位エンティティ数が０であるか否かを判定し、この場合の判定結果はＹＥＳあるため、処理はステップＳ６８へ進む。ステップＳ６８は、実行準備リストに要素３を入れ、処理はステップＳ６５へ戻る。この時の実行準備リストは、図２８に示すようになる。図２８は、ステップＳ６８が行われた場合の実行準備リストを示す図である。【００５３】
ステップＳ６５では、もう参照するリストがないため、判定結果がＮＯとなって処理はステップＳ６２へ戻る。ステップＳ６２では、実行準備リストが空ではないため、判定結果がＮＯとなって処理はステップＳ６３へ進む。ステップＳ６３では、実行準備リストが空ではないため、判定結果がＮＯとなって処理はステップＳ６４へ進む。ステップＳ６４は、実行準備リストの先頭の要素３を取り出す。この時の実行準備リストは、図２３に示すようになる。ステップＳ５２，Ｓ５３の後、ステップＳ６３では、実行準備リストが空であるため判定結果がＹＥＳとなり、処理はステップＳ５６へ進む。【００５４】
ここで、ステップＳ５６においてエンティティテーブルの番号２のエンティティに対応するＶＨＤＬの処理が終了したとすると、ステップＳ６５は、図２７に示すエンティティテーブルのエンティティの番号２については、上位エンティティリストへのリンクが１であることから、図１６に示す上位エンティティリストテーブルの上位エンティティリストの番号１のリストの要素１を参照するので、判定結果はＹＥＳとなる。ステップＳ６６は、要素１に対応するエンティティテーブルの番号１の下位エンティティ数を１だけ減らす（デクリメントする）。この時のエンティティテーブルは、図２９に示すようになる。図２９は、ステップＳ６６が行われた場合のエンティティテーブルを示す図である。【００５５】
ステップＳ６７は、下位エンティティ数が０であるか否かを判定し、この場合の判定結果はＮＯであるため、処理はステップＳ６５へ戻る。ステップＳ６５では、もう参照するリストがないため、判定結果がＮＯとなって処理はステップＳ６２へ戻る。ステップＳ６２では、別のプロセッサでＶＨＤＬの処理中（エンティティテーブルのエンティティの番号が３）であるため、ステップＳ６２の判定結果はＮＯとなり、処理はステップＳ６３へ進む。この場合、実行準備リストが空であるため、ステップＳ６３の判定結果はＹＥＳとなり、処理はステップＳ５６へ進む。【００５６】
ここで、ステップＳ５６においてエンティティテーブルの番号３のエンティティに対応するＶＨＤＬの処理が終了したとすると、ステップＳ６５は、図２９に示すエンティティテーブルのエンティティの番号３については、上位エンティティリストへのリンクが３であることから、図１６に示す上位エンティティリストテーブルの上位エンティティリストの番号３のリストの要素１を参照するので、判定結果はＹＥＳとなる。ステップＳ６６は、要素１に対応するエンティティテーブルの番号１の下位エンティティ数を１だけ減らす（デクリメントする）。この時のエンティティテーブルは、図３０に示すようになる。図３０は、ステップＳ６６が行われた場合のエンティティテーブルを示す図である。【００５７】
ステップＳ６７は、下位エンティティ数が０であるか否かを判定し、この場合の判定結果はＹＥＳあるため、処理はステップＳ６８へ進む。ステップＳ６８は、実行準備リストに要素１を入れ、処理はステップＳ６５へ戻る。この時の実行準備リストは、図３１に示すようになる。図３１は、ステップＳ６８が行われた場合の実行準備リストを示す図である。【００５８】
ステップＳ６５では、もう参照するリストがないため、判定結果がＮＯとなって処理はステップＳ６２へ戻る。ステップＳ６２では、実行準備リストが空ではないため、判定結果がＮＯとなって処理はステップＳ６３へ進む。ステップＳ６３では、実行準備リストが空ではないため、判定結果がＮＯとなって処理はステップＳ６４へ進む。ステップＳ６４は、実行準備リストの先頭の要素２を取り出す。この時の実行準備リストは、図２３に示すようになる。ステップＳ５２，Ｓ５３の後、ステップＳ６３では、実行準備リストが空であるため判定結果がＹＥＳとなり、処理はステップＳ５６へ進む。【００５９】
ここで、ステップＳ５６においてエンティティテーブルの番号１のエンティティに対応するＶＨＤＬの処理が終了したとすると、ステップＳ６５は、図３０に示すエンティティテーブルのエンティティの番号１については、上位エンティティリストへのリンクがないことから、判定結果がＮＯとなって処理がステップＳ６２へ戻る。ステップＳ６２では、実行準備リストが空であり、別プロセッサにおいてＶＨＤＬの処理中ではないため、判定結果がＹＥＳとなって処理は終了する。【００６０】
図３２は、夫々のエンティティが並列分散処理されるシーケンスを示す図である。図３２において、１１−１，１１−２，...はＣＰＵを示す。【００６１】
上記の如き処理により、階層毎に、且つ、下位階層から順に、ＶＨＤＬの並列分散処理が実行される。【００６２】
（第４実施例）
次に、本発明の第４実施例を説明する。本実施例では、階層毎に、且つ、下位階層から１つずつ、ＶＨＤＬの処理が実行される。【００６３】
図３３は、本発明の第４実施例の手順を示すフローチャートである。図３３中、図１１と同一ステップには同一符号を付し、その説明は省略する。図３３に示すステップＳ２Ｂの詳細は図３４に示す如くである。【００６４】
図３４は、ステップＳ２Ｂの処理をより詳細に説明するフローチャートである。図３４中、図１０及び図１９と同一部分には同一符号を付し、その説明は省略する。【００６５】
ステップＳ２Ｂにおいて図３４に示す処理を行うことにより、階層毎に、且つ、下位階層から１つずつ、ＶＨＤＬの処理が実行される。【００６６】
（第５実施例）
次に、本発明の第５実施例を説明する。本実施例では、階層毎に、且つ、並列度に制限付きで、ＶＨＤＬの並列分散処理が実行される。【００６７】
図３５は、本発明の第５実施例の手順を示すフローチャートである。図３５中、図１と同一ステップには同一符号を付し、その説明は省略する。図３５に示すステップＳ２Ｃの詳細は図３６に示す如くである。【００６８】
図３６は、ステップＳ２Ｃの処理をより詳細に説明するフローチャートである。図３６中、図８及び図１９と同一部分には同一符号を付し、その説明は省略する。図３６において、ステップＳ５５は、ＶＨＤＬを処理している別プロセッサの数が制限値内であるか否かを判定し、判定結果がＹＥＳであれば処理はステップＳ５２へ進み、判定結果がＮＯであれば処理はステップＳ５６へ進む。制限値は、任意に設定可能である。【００６９】
ステップＳ２Ｃにおいて図３６に示す処理を行うことにより、階層毎に、且つ、並列度に制限付きで、ＶＨＤＬの並列分散処理が実行される。【００７０】
（第６実施例）
次に、本発明の第６実施例を説明する。本実施例では、階層毎に、下位階層から順に、且つ、並列度に制限付きで、ＶＨＤＬの並列分散処理が実行される。【００７１】
図３７は、本発明の第６実施例の手順を示すフローチャートである。図３７中、図１１と同一ステップには同一符号を付し、その説明は省略する。図３７に示すステップＳ２Ｅの詳細は図３８に示す如くである。【００７２】
図３８は、ステップＳ２Ｅの処理をより詳細に説明するフローチャートである。図３８中、図１９と同一部分には同一符号を付し、その説明は省略する。図３８では、図１９に示すステップＳ６３の代わりにステップＳ６９が設けられている。ステップＳ６９は、実行準備リストが空であり、且つ、ＶＨＤＬを処理している別プロセッサの数が制限値内ではないか否かを判定する。実行準備リストが空ではなく、且つ、ＶＨＤＬを処理している別プロセッサの数が制限値内ではないと、ステップＳ６９の判定結果はＮＯとなり、処理はステップＳ５２へ進む。他方、ステップＳ６９の判定結果がＹＥＳであると、処理はステップＳ５６へ進む。【００７３】
ステップＳ３Ａにおいて図３８に示す処理を行うことにより、階層毎に、下位階層から順に、且つ、並列度に制限付きで、ＶＨＤＬの並列分散処理が実行される。【００７４】
（変形例）
ところで、上記第３、４及び６実施例のように、階層毎に、且つ下位階層から順にＶＨＤＬが処理される場合、処理の実行順序は（Ｉ）幅優先的に行っても、（ＩＩ）深さ優先的に行っても、（ＩＩＩ）最上位階層から遠い階層から優先的（遠い階層優先的）に行っても良い。処理の実行順序（Ｉ）〜（ＩＩＩ）は、図１９、図３４及び図３８に示すステップＳ６８により切り替えることができる。【００７５】
説明の便宜上、エンティティＥ１〜Ｅ６の階層構造が図３９に示す如き３以上の階層からなるものであるとすると、（Ｉ）幅優先的に行う実行順序の場合には、ステップＳ６８は図２０に示す実行準備リストの末尾に指示されたエンティティの番号を入れ、図４０に破線の矢印で示す如き同じ階層のエンティティを優先する実行順序となる。（ＩＩ）深さ優先的に行う実行順序の場合には、ステップＳ６８は図２１に示す実行準備リストの先頭に指示されたエンティティの番号を入れ、図４１に破線の矢印で示す如き異なる階層のエンティティを優先する実行順序となる。又、（ＩＩＩ）遠い階層優先的に行う実行順序の場合には、ステップＳ６８は図２２に示す実行準備リストに指示された最上位階層から遠い階層のエンティティの番号を入れ、図４２に破線の矢印で示す如き最上位階層から遠い階層のエンティティを優先する実行順序となる。【００７６】
図４３は、（ＩＩＩ）遠い階層優先的に行う実行順序の場合のステップＳ６８の処理をより詳細に説明するフローチャートである。図４３において、ステップＳ８１は、指示されたエンティティＡの最上位階層からの深さを計算する。ステップＳ８２は、実行準備リストの先頭のエンティティをＢとする。ステップＳ８３は、エンティティＢの深さよりもエンティティＡの深さの方が深いか否かを判定し、判定結果がＹＥＳであると処理はステップＳ８４へ進み、判定結果がＮＯであると処理はステップＳ８５へ進む。ステップＳ８５は、実行準備リストにおいて、エンティティＢの後のエンティティをＡとし、処理はステップＳ８３へ戻る。ステップＳ８４は、実行準備リストにおいて、エンティティＢの前にエンティティＡを入れて、処理は終了する。【００７７】
このように、階層毎に、且つ下位階層から順にＶＨＤＬが処理される場合、処理の実行順序は（Ｉ）幅優先的に行うか、（ＩＩ）深さ優先的に行うか、（ＩＩＩ）最上位階層から遠い階層から優先的に行うかを、ステップＳ６８により切り替えることができる。【００７８】
尚、上記各実施例及び変形例では、ＶＨＤＬが入力されるものとして説明したが、ＶＨＤＬ以外のＨＤＬ等が入力される場合でも上記と同様の処理が行え、上記と同様の効果を得ることができる。例えば、ＨＤＬとしてVerilogが入力される場合には、エンティティとアーキテクチャを組み合わせてモジュール（module）を構成すれば良く、ＥＤＩＦが入力される場合にはセル（cell）を構成すれば良い。【００７９】
（ハードウェアの構成）
図４４は、上記第２又は第４実施例のＨＤＬ処理方法を実行可能な単一のプロセッサからなる計算機（コンピュータシステム）を示すブロック図である。図４４に示すようにコンピュータシステムは、単一のプロセッサを構成するＣＰＵ１１、メモリ１２、ハードディスクドライブ（ＨＤＤ）１３及びネットワークアダプタ１４がバス１５により接続された周知の構成を有する。ネットワークアダプタ１４は、コンピュータシステムをネットワーク（図示せず）に接続するインタフェースとして機能する。【００８０】
図４４に示すような単一のプロセッサからなるコンピュータシステムにおいて、階層毎に分割してＶＨＤＬの処理を１つずつ実行することで、規模の大きなＶＨＤＬ処理をメモリ等の計算機資源を一時的に大量に消費することなく実行することができる。ＶＨＤＬの処理を階層毎に実行する場合、階層間の整合性のチェックをより厳密に行うために、下位の階層からＨＤＬの処理を実行することもできる。この場合、上位の階層のＶＨＤＬの処理を実行するときに、下位の階層のＶＨＤＬのチェックを行うことができる。又、下位の階層からＶＨＤＬの処理を実行するとき、実行順序に選択肢を与えて実行順序を切り替えるようにしても良い。【００８１】
図４５は、上記第１、第３、第５又は第６実施例のＨＤＬ処理方法を実行可能な複数のプロセッサからなる計算機（コンピュータシステム）を示すブロック図である。図４５に示すようにコンピュータシステムは、複数のプロセッサを構成するＣＰＵ１１−１〜１１−Ｎ（Ｎは２以上の整数）、メモリ１２、ハードディスクドライブ（ＨＤＤ）１３及びネットワークアダプタ１４がバス１５により接続された周知の構成を有する。ネットワークアダプタ１４は、コンピュータシステムをネットワーク（図示せず）に接続する。【００８２】
図４６は、上記第１、第３、第５又は第６実施例のＨＤＬ処理方法を実行可能な複数の計算機（コンピュータシステム）からなるコンピュータシステムを示すブロック図である。図４６中、図４４と同一部分には同一符号を付し、その説明は省略する。図４６に示すように、図４４と同じ構成のコンピュータシステムがＮ台ネットワーク１６を介して接続されている。この場合、Ｎ台の各コンピュータシステムのＣＰＵ１１が、図４５に示すＣＰＵ１１−１〜１１−Ｎと同様の動作を行う。【００８３】
尚、図４５及び図４６に示すコンピュータシステムは、上記第２又は第４実施例のＨＤＬ処理方法を実行しても良いことは言うまでもない。【００８４】
図４５又は図４６に示すような複数のプロセッサからなるコンピュータシステムにおいて階層毎に並列分散処理を実行することにより、規模の大きいＶＨＤＬの処理を短時間で実行することができる。ＶＨＤＬの処理を階層毎に実行する場合、階層間の整合性のチェックをより厳密に行うために、下位の階層からＨＤＬの処理を実行することもできる。この場合、上位の階層のＨＤＬの処理を実行するときに、下位の階層のＨＤＬのチェックを行うことができる。又、下位の階層からＨＤＬの処理を実行するとき、実行順序に選択肢を与えて実行順序を切り替えるようにしても良い。更に、階層毎に並列分散処理を実行する場合、並列度に制限を与えて、複数のプロセッサ上においてもメモリ等の計算機資源の一時的に大量な消費を防止することができる。【００８５】
本発明のプログラムは、ＣＰＵ１１，１１−１〜１１−Ｎにより上記の如きＨＤＬ処理方法によりＨＤＬを処理させるものである。又、本発明のコンピュータ読み取り可能な記憶媒体は、このようなプログラムをコンピュータ読み取り可能に格納する記録媒体で構成され、記録媒体の種類は特に限定されない。記録媒体は、例えば磁気記録媒体、光記録媒体、光磁気記録媒体、半導体記憶装置等で構成可能であり、メモリ１２やＨＤＤ１３であっても良い。【００８６】
図４７は、論理合成を説明する図である。メモリ１２やＨＤＤ１３等の記憶装置又は記録媒体からＶＨＤＬで記述されたＶＨＤＬファイル５１がコンピュータシステムに読み込まれ、論理階層解析部１１１に入力される。論理階層解析部１１１及び論理合成部１１２は、コンピュータシステムを構成するＣＰＵ１１（又はＣＰＵ１１〜１〜１１−Ｎ）により構成される。論理階層解析部１１１は、エンティティテーブル１２１、上位エンティティリストテーブル１２２及び実行準備リスト１２３を用いてＶＨＤＬファイル５１の論理階層を解析する。エンティティテーブル１２１は、上記の如くエンティティ毎にＶＨＤＬのファイルの位置情報を格納する。上位エンティティリストテーブル１２２は、上記の如く上位エンティティリストの番号とエンティティテーブル１２１の番号のリストを示すエンティティテーブル１２１へのリンクのリストとを有する。実行準備リスト１２３は、上記の如くエンティティテーブル１２１から下位エンティティ数が０のエンティティを入れたものである。論理合成部１１２は、論理階層解析部１１１の論理階層解析結果に基づいて論理合成を行い、ＶＨＤＬよりレベルが低い言語により記述されたネットリストファイル５２を作成する。尚、論理合成部１１２の代わりにコンパイル部を設け、論理階層解析部１１１の論理階層解析結果に基づいて論理シミュレーションのコンパイルを行っても良い。
【産業上の利用可能性】
【００８７】
本発明は、ハードウェアの設計を支援するＣＡＤにおいて階層構造を有するＨＤＬの処理を行う場合に適用可能である。【００８８】
以上、本発明を実施例により説明したが、本発明は上記実施例に限定されるものではなく、本発明の範囲内で種々の変形及び改良が可能であることは言うまでもない。
【図１】
0004682245.tif 000002
【図２】
0004682245.tif 000003
【図３】
0004682245.tif 000004
【図４】
0004682245.tif 000005
【図５】
0004682245.tif 000006
【図６】
0004682245.tif 000007
【図７】
0004682245.tif 000008
【図８】
0004682245.tif 000009
【図９】
0004682245.tif 000010
【図１０】
0004682245.tif 000011
【図１１】
0004682245.tif 000012
【図１２】
0004682245.tif 000013
【図１３】
0004682245.tif 000014
【図１４】
0004682245.tif 000015
【図１５】
0004682245.tif 000016
【図１６】
0004682245.tif 000017
【図１７】
0004682245.tif 000018
【図１８】
0004682245.tif 000019
【図１９】
0004682245.tif 000020
【図２０】
0004682245.tif 000021
【図２１】
0004682245.tif 000022
【図２２】
0004682245.tif 000023
【図２３】
0004682245.tif 000024
【図２４】
0004682245.tif 000025
【図２５】
0004682245.tif 000026
【図２６】
0004682245.tif 000027
【図２７】
0004682245.tif 000028
【図２８】
0004682245.tif 000029
【図２９】
0004682245.tif 000030
【図３０】
0004682245.tif 000031
【図３１】
0004682245.tif 000032
【図３２】
0004682245.tif 000033
【図３３】
0004682245.tif 000034
【図３４】
0004682245.tif 000035
【図３５】
0004682245.tif 000036
【図３６】
0004682245.tif 000037
【図３７】
0004682245.tif 000038
【図３８】
0004682245.tif 000039
【図３９】
0004682245.tif 000040
【図４０】
0004682245.tif 000041
【図４１】
0004682245.tif 000042
【図４２】
0004682245.tif 000043
【図４３】
0004682245.tif 000044
【図４４】
0004682245.tif 000045
【図４５】
0004682245.tif 000046
【図４６】
0004682245.tif 000047
【図４７】
0004682245.tif 000048