(57)【要約】【課題】ハードウェアとソフトウェアとを協調させて最適な基板の設計を支援する基板設計支援システムおよび基板設計支援方法を提供する。【解決手段】モデルベースデザインにより、アプリケーションが実行するデータフロー処理を実行するハードウェアモジュールおよびソフトウェアモジュールを定め、ハードウェアモジュールを基板の論理部に実装するとともにソフトウェアモジュールを基板の制御部に実装する第１のステップと、プロトタイピングにより、実装された各モジュールを処理単位としてデータフロー処理する第２のステップと、を実行することにより、仕様に合った基板を設計する。【選択図】  図６
2015076007.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションの仕様にしたがってハードウェアモジュールとソフトウェアモジュールとを実装する基板の設計を支援する基板設計支援方法であって、
モデルベースデザインにより、アプリケーションが実行するデータフロー処理を実行するハードウェアモジュールおよびソフトウェアモジュールを定め、前記ハードウェアモジュールを前記基板の論理部に実装するとともに前記ソフトウェアモジュールを前記基板の制御部に実装する第１のステップと、
プロトタイピングにより、実装された各モジュールを処理単位としてデータフロー処理する第２のステップと、を実行することにより、前記仕様に合った基板を設計する、
ことを特徴とする基板設計支援方法。
【請求項２】
前記第１のステップでは、前記処理単位が前記仕様に応じて定められ、
前記第２のステップでは、前記仕様に応じて定められた処理単位でデータフロー処理を実行する、
ことを特徴とする請求項１に記載の基板設計支援方法。
【請求項３】
前記第１のステップでは、前記データフロー処理を制御する制御タスクが前記制御部に実装され、
前記第２のステップでは、前記制御タスクによって、前記データフロー処理を前記処理単位で実行するとともに、前記各モジュールの処理状態に基づいて、前記処理単位ごとに前記データフロー処理をパイプライン処理させる、
ことを特徴とする請求項１または２に記載の基板設計支援方法。
【請求項４】
前記第２のステップでは、前記モジュールの実行結果を記録するログを出力してその出力結果を分析し、前記第１のステップにおいてハードウェアモジュールまたはソフトウェアモジュールを再定義する、
ことを特徴とする請求項１〜３のいずれか１項に記載の基板設計支援方法。
【請求項５】
前記第２のステップでは、前記ログをモジュールごとに出力し、前記第１のステップにおいてモジュールごとに出力されたログに基づいて、各モジュールを再定義する、
ことを特徴とする請求項４に記載の基板設計支援方法。
【請求項６】
前記第１のステップでは、前記データフロー処理を実行するモジュール構成と、前記処理単位と、前記制御タスクの数との少なくとも１以上を、前記第２のステップによる分析結果に基づいて繰り返し定める、
ことを特徴とする請求項４または５に記載の基板設計支援方法。
【請求項７】
アプリケーションの仕様にしたがってハードウェアモジュールとソフトウェアモジュールとを実装する基板の設計を支援する基板設計支援システムであって、
アプリケーションが実行するデータフロー処理を実行するハードウェアモジュールを実装する論理部およびソフトウェアモジュールを実装する制御部をモデルベースデザインにより定める設定制御部と、
実装された各モジュールを処理単位としてデータフロー処理して前記基板をプロトタイピングする実行制御部と、
を備えることを特徴とする基板設計支援システム。
【請求項８】
前記基板はメモリを有し、前記論理部および前記制御部は前記メモリにインタフェースで接続され、
前記設定制御部は、さらに前記データフロー処理を制御する制御タスクを前記制御部に実装し、
前記実行制御部は、前記制御タスクにより、前記インタフェースを介して前記処理単位に前記メモリにアクセスし、前記データフロー処理を実行する、
ことを特徴とする請求項７に記載の基板設計支援システム。
【請求項９】
前記実行制御部は、前記モジュールの実行結果を記録するログを前記メモリに出力してその出力結果を分析し、
前記設定制御部は、出力されたログに基づいて、各モジュールを再定義する、
ことを特徴とする請求項８に記載の基板設計支援システム。
【請求項１０】
前記設定制御部は、前記データフロー処理を実行するモジュール構成と、前記処理単位と、前記制御タスクの数との少なくとも１以上を、前記実行制御部による分析結果に基づいて繰り返し定める、
ことを特徴とする請求項９に記載の基板設計支援システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハードウェアとソフトウェアとを協調させて最適な基板の設計を支援する基板設計支援システムおよび基板設計支援方法に関するものである。
【背景技術】
【０００２】
各種組込み機器は、SOC（System On Chip）による専用LSI（Large Scale Integration）開発、特定CPU（Central Processing Unit）を対象としたソフトウェア開発、および両者の組合せにより、対象となるアプリケーション毎に開発されている。また、専用LSI開発にかかる費用と期間およびリスクが増大する中、成長著しいFPGA（Field-Programmable Gate Array）を用いた開発が現在主流となりつつある。専用LSI開発とFPGA利用のいずれにおいても、対象アプリケーションあるいはアルゴリズムのハードウェアとソフトウェアへの最適かつ短期間での分割、つまりアーキテクチャ設計と実装が必要である。この解決のために、特許文献１には、再利用可能なハードウェアモジュールとソフトウェアモジュールを活用したアーキテクチャ設計支援システムとその生成方法が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００１−２０２３９７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１ではハードウェアモジュールとソフトウェアモジュールそれぞれの機能と制約条件を前提に組み合わせた結果としてのSOC設計支援は可能である。しかしながら、設計したSOCがアプリケーションとして当初要求仕様を満たしているかについては考慮が薄く、これでは当初要求仕様に合った現実的なSOCを開発出来ないという問題があった。また、特許文献１は、その着想が、対象とするアルゴリズムの仕様記述を、いかにハードウェアとソフトウェアとに実装するかという観点であるため、対象とするアプリケーションの特徴に対する考慮はなされておらず、必ずしも最適な方法でハードウェアとソフトウェアとを協調させて設計されていない。
【０００５】
本発明の目的は、上記問題点を解決し、例えば、画像や通信等のデータフロー処理を対象に、画像フレームや通信パケット等に対して行う処理の単位に着目し、ハードウェアとソフトウェアとを協調させて最適な基板の設計を支援する基板設計支援システムおよび基板設計支援方法を提供することにある。
【課題を解決するための手段】
【０００６】
上述した課題を解決し、目的を達成するために、本発明にかかる基板設計支援方法は、アプリケーションの仕様にしたがってハードウェアモジュールとソフトウェアモジュールとを実装する基板の設計を支援する基板設計支援方法であって、モデルベースデザインにより、アプリケーションが実行するデータフロー処理を実行するハードウェアモジュールおよびソフトウェアモジュールを定め、前記ハードウェアモジュールを前記基板の論理部に実装するとともに前記ソフトウェアモジュールを前記基板の制御部に実装する第１のステップと、プロトタイピングにより、実装された各モジュールを処理単位としてデータフロー処理する第２のステップと、を実行することにより、前記仕様に合った基板を設計する、ことを特徴とする基板設計支援方法として把握される。
【０００７】
また、本発明は、アプリケーションの仕様にしたがってハードウェアモジュールとソフトウェアモジュールとを実装する基板の設計を支援する基板設計支援システムであって、アプリケーションが実行するデータフロー処理を実行するハードウェアモジュールを実装する論理部およびソフトウェアモジュールを実装する制御部をモデルベースデザインにより定める設定制御部と、実装された各モジュールを処理単位としてデータフロー処理して前記基板をプロトタイピングする実行制御部と、を備えることを特徴とする基板設計支援システムとして構成される。
【発明の効果】
【０００８】
本発明によれば、ハードウェアとソフトウェアとを協調させて最適な基板の設計を支援することが可能となる。
【図面の簡単な説明】
【０００９】
【図１】本実施の形態における基板設計支援システムの全体構成を示す図である。
【図２】本システムでデータフロー処理を実現するFPGAボードの論理構成例を示す図である。
【図３】本システムでデータフロー処理を実現するFPGAボードの物理構成例を示す図である。
【図４】図３に示した構成例を用いて制御タスクによるデータフロー処理の概念を示す図である。
【図５】図４に示したタスクで定められたパイプライン処理の例を示す図である。
【図６】本実施の形態におけるデータフロー処理の処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に添付図面を参照して、本発明にかかる基板設計支援システムおよび基板設計支援方法の実施の形態を詳細に説明する。
【００１１】
図１に、本実施の形態における基板設計支援システムの全体構成を示す。基板設計支援システムは、画像や通信等に例示されるデータフロー処理において、最終的にハードウェアとソフトウェアとを協調させてFPGAボード等の基板をプロトタイピングするためのシステムである。基板設計支援システムは、一般的なPC１と汎用のFPGAボード２から構成され、PC１は、モデルベースデザインツールやFPGA開発ツールを搭載し、PC１が有する不図示のCPUによって実行される。FPGAボード２は、記憶部２Ａ、論理部２Ｂおよび制御部２Ｃを有して構成される。PC１とFPGAボード２とは、Ethernet(登録商標)、PCI（Peripheral Component Interconnect）-Expressといった汎用高速インタフェースで接続され、相互にデータのやり取りが可能であり、FPGA in the loopとも呼ばれる構成である。記憶部２Aは、例えば、メモリであり、論理部２Ｂは、例えば、アクセラレータから構成され、制御部２Ｃは、例えば、CPUから構成されている。以下、記憶部２Ａをメモリ２Ａ、制御部２ＣをCPU２Ｃと表現することもある。
【００１２】
図２は、本システムでデータフロー処理を実現するFPGAボード２の論理構成例を示す図である。図２に示すように、FPGAボード２は、PC１に接続するためのPCインタフェース部２０１、図１に示した記憶部２Ａ、論理部２Ｂ、制御部２Ｃが、データバスおよび制御インタフェースで接続されている。ソフトウェア処理は、幾つかのソフトウェアモジュールに分割され制御部１から制御部ｍのそれぞれに実装される。また、ハードウェア処理も、幾つかのハードウェアモジュールに分割され論理部１から論理部ｎに実装される。これらのソフトウェア処理およびハードウェア処理は、アプリケーションがデータフロー処理するモジュールごとに各制御部や各論理部に割り当てられ、割り当てられた各制御部や各論理部で実行される。データフロー処理を実行、制御するタスク（制御タスク）は、CPU０に実装される。具体的には後述するが、制御タスクは、各制御部や各論理部に割り当てられたモジュールの実行状態を監視し、タスク内のモジュールによる処理の実行が終了すると、次のタスクを読み込んでデータフロー処理を開始し、モジュールごとにパイプライン処理する。
【００１３】
尚、CPUリソースが少ない場合はCPU０からCPUｍを共有してもよい。また、データのやり取りは、メモリを介し標準化したデータバスで実現される。データフロー処理を行う際の制御は、CPU0と各部（各制御部、各論理部）との間に、設定、起動、割込みおよびログ情報等からなる標準化した制御インタフェースにより実現される。メモリ２Ａは、各部間でやりとりするデータの保持およびログ情報を格納する。この様に、データバスおよび制御インタフェースを標準化し、制御タスクにてデータフロー処理を一括管理することで、以下に示すハードウェアとソフトウェア協調プロトタイピング設計が可能となる。なお、本実施例では、制御タスクを１つの制御部に割り当てているが、FPGAボード２のリソースに合わせて、ハードウェアモジュールとソフトウェアモジュールや、同時起動する制御タスクの数を増減させてもよい。
【００１４】
図３は、本システムでデータフロー処理を実現するFPGAボード２の物理構成例（ハードウェアおよびソフトウェアのモジュール構成例）を示す図である。図３に示すように、FPGAボード２は、メモリ２Ａと、論理部２Ｂ（図３では、論理部２Ｂ−１および論理部２Ｂ−２）と、制御部２Ｃ（図３では、制御部２Ｃ−０、制御部２Ｃ−１、制御部２Ｃ−２）とを有している。メモリ２Ａは、データフロー処理されるデータを格納したり、データフロー処理の際に出力されるログ情報を格納する。制御部２Ｃ−０は、制御タスクを実行し、各インタフェースを介してタスクごとにメモリ２Ａにアクセスし、データフロー処理の実行、制御を行う。
【００１５】
論理部２Ｂ−１および論理部２Ｂ−２には、それぞれハードウェア処理を行うモジュールＨ１、モジュールＨ２が実装されている。また、制御部２Ｃ−１および制御部２Ｃ−２には、それぞれソフトウェア処理を行うモジュールＳ１、モジュールＳ２が実装されている。ここで、ハードウェア処理を行うモジュールおよびソフトウェア処理を行うモジュールの数は、FPGAボード２に実装可能な範囲で複数個作成可能である。
【００１６】
メモリ２ＡとモジュールＨ１との間は、インタフェース２Ａ−Ａおよびインタフェース２Ｂ−１Ａにより接続される。メモリ２ＡとモジュールＨ２との間は、インタフェース２Ａ−Ｃおよびインタフェース２Ｂ−２Ａにより接続される。メモリ２ＡとモジュールＳ１との間は、インタフェース２Ａ−Ｂおよびインタフェース２Ｃ−１Ａにより接続される。メモリ２ＡとモジュールＨ２との間は、インタフェース２Ａ−Ｄおよびインタフェース２Ｃ−２Ａにより接続される。
【００１７】
さらに、制御部０とモジュールＨ１との間は、インタフェース２Ｃ−０Ａおよびインタフェース２Ｂ−１Ｂにより接続される。制御部０とモジュールＨ２との間は、インタフェース２Ｃ−０Ｃおよびインタフェース２Ｂ−２Ｂにより接続される。制御部０とモジュールＳ１との間は、インタフェース２Ｃ−０Ｂおよびインタフェース２Ｃ−１Ｂにより接続される。制御部０とモジュールＨ２との間は、インタフェース２Ｃ−０Ｄおよびインタフェース２Ｃ−２Ｂにより接続される。
【００１８】
図４に、図３に示した構成例を用いて制御タスクによるデータフロー処理の概念を示す。図４に示すように、制御部０は、処理対象となる複数のタスクＴを順次読み込んでデータフロー処理を実行する。このとき、制御部０は、各モジュール（モジュールＨ１、Ｈ２およびモジュールＳ１、Ｓ２）における処理の状態をメモリ２Ａに記憶する。図４では、モジュールＨ１での処理の状態をステートＨ１として表している。同様に、モジュールＨ２、Ｓ１、Ｓ２での処理の状態を、それぞれステートＨ２、Ｓ１、Ｓ２として表している。本実施の形態では、制御部０は、上述した各モジュールにおける処理の状態を監視し、図２に示した各制御部１〜ｍや論理部１〜ｎ、メモリ２Ａ等のリソースを随時割り当てて、複数のタスクＴをパイプライン処理させている。なお、同時に起動するタスク数は、FPGAボード２のリソース制約のもと、メモリ２Ａにあらかじめ設定されているものとする。
【００１９】
図５は、図４に示したタスクＴで定められたパイプライン処理の例を示す図である。図５に示す例では、まず、最初のタスク（タスク１）を処理対象とし、モジュールＨ１での処理を実行した後、モジュールＨ２およびモジュールＳ１での処理を実行し、その後、モジュールＳ２での処理を実行する。そして、モジュールＨ１での処理が終了すると、モジュールＨ２およびモジュールＳ１での処理を実行するとともに、次のタスク（タスク２）を処理対象とし、モジュールＨ１での処理の実行を開始していることを示している。なお、同時に複数のタスク（例えば、２タスク）を起動する設定となっている場合には、実際には起動するタスク１、２が同時に実行される。以下、同様に、タスクｍが終了するまで、制御部０によってタスクＴのパイプライン処理が実行される。図４では、各モジュールが処理を開始して実行している状態をSTARTと表現し、処理が終了して次のタスクの処理を開始するまでの状態をWAITと表現している。
【００２０】
上述したように、モジュールＨ１での処理がスタートすると、その状態がステートＨ１としてメモリ２Ａに書き込まれ、その後、実行中の処理が終了すると、ステートＨ１がその状態に更新される。同様に、モジュールＨ２、Ｓ１、Ｓ２についても、ステータスが、それぞれステートＨ２、ステートＳ１、ステートＳ２として、メモリ２Ａに書き込まれる。そして、制御部０は、各モジュールのステータスがWAITになると次のタスクの処理を開始する。このように、本実施の形態では、制御部０が、タスクをパイプライン処理するように各モジュールを制御し、データフロー処理を順次実行する。
【００２１】
図６は、本実施の形態におけるデータフロー処理の処理手順を示すフローチャートである。以下では、ステップＳ１〜Ｓ９までの各処理は、PC１が有するキーボード等の入力部（不図示）がユーザからの操作を受け付け、PC１のCPU（設定制御部）が入力された情報に基づいて、モデルベースデザインによりデータフロー処理を行うためのFPGAボード２に対する定義や設定を行い、各ステップの処理を実行している。その後、ユーザが処理結果を解析した後、その解析結果に基づく指示を受けて、PC１のCPU（実行制御部）が、ステップＳ１０〜１３までの各処理においてFPGAボード２をプロトタイピングし、その結果をフィードバックしている。
【００２２】
図６に示すように、入力部は、あらかじめ定められ、アプリケーションが行うデータフロー処理の仕様の入力を受け付け、CPUはその仕様を読み込み、どのようなデータフロー処理を行うのかを解析する（ステップＳ１）。例えば、CPUは、入力された仕様が、画像処理のデータフロー処理であるのか、通信処理のデータフロー処理であるのかを解析する。
【００２３】
次に、入力部は、データフロー処理で同時に起動するタスク数の入力を受け付け、CPUは一度にデータフロー処理するタスク数を定義する（ステップＳ２）。例えば、CPUは、FPGAボード２のリソースを考慮し、画像処理であれば1フレーム、通信処理であれば１パケット等というように、図４に示した複数のタスクＴのうち同時に起動するタスクの数（例えば、２タスク）を定める。
【００２４】
さらに、入力部は、データフロー処理で用いるデータバスやインタフェースの定義の入力を受け付け、CPUがデータフロー処理で使用するデータバスやインタフェースを定義する（ステップＳ３）。例えば、CPUは、図３、５に示した各モジュール（モジュールＨ１およびＨ２、モジュールＳ１およびＳ２）とメモリ２Ａとの間の共通データバス仕様や、これらの各モジュールと制御部０との間の共通制御インタフェースを定義する。
【００２５】
そして、入力部は、タスクを分割するモジュールの入力を受け付け、CPUは、入力されたモジュールでタスクを構成する（ステップＳ４）。例えば、CPUは、図４、５に示したタスクを、各モジュール（モジュールＨ１およびＨ２、モジュールＳ１およびＳ２）で構成するように定義する。
【００２６】
さらに、入力部は、ステップＳ２で定めたタスク、ステップＳ３で定義したデータバスやインタフェースに合わせて、ステップＳ４で定義したハードウェアモジュールやソフトウェアモジュールを作成する（ステップＳ５）。例えば、CPUは、図３に示した各種インタフェースの定義に合わせ、ハードウェアモジュールやソフトウェアモジュール（モジュールＨ１およびＨ２、モジュールＳ１およびＳ２）を作成する。
【００２７】
そして、CPUは、作成したモジュールごとに、モジュールの実行結果をログ情報として出力する定義をする（ステップＳ６）。例えば、CPUは、各モジュール（モジュールＨ１およびＨ２、モジュールＳ１およびＳ２）ごとに、処理結果をログ情報として記録し、メモリ２Ａに格納する定義をする。
【００２８】
さらに、CPUは、ステップＳ５で作成したモジュールを実行するための制御タスクを生成し（ステップＳ７）、上述した各ステップで作成したハードウェアモジュールやソフトウェアモジュール、および制御タスクを、それぞれ、FPGAボード２が有する制御部１〜ｍや論理部１〜ｎ、および制御部０に実装する（ステップＳ８）。なお、これらのモジュールの作成と実装は、あらかじめPC１にインストールされているモデルベースデザインやFPGA開発するためのツールを利用することにより、自動化およびハードとソフト処理の変更が可能となっている。
【００２９】
次に、CPUは、FPGAボード２への実装が物理的に可能か否かを判定し（ステップＳ９）、実装が可能でないと判定した場合（ステップＳ９；Ｎｏ）、その原因に応じて上流の各ステップに戻り、修正された定義等に従って以降の処理を繰り返す。具体的にどのステップまで戻り、どの部分を修正するかは、FPGAボード２への実装が不可能な状況に依存するが、例えば、ハードリソースが不足している場合は、ハードウェアモジュール内部の並列処理の多重度を下げたり、ソフトウェアによる処理に変更することが考えられる。
【００３０】
一方、CPUは、FPGAボード２への実装が可能であると判定した場合（ステップＳ９；Ｙｅｓ）、FPGAボード２がPC１からの指示を受けて、ステップＳ２で定めたタスクの数を同時に実行し、それぞれのモジュールでの処理が終了すると、例えば、図４、５に示したように、順次パイプラインでデータフロー処理を実行する（ステップＳ１０）。このとき、各モジュールは、メモリ２Ａにログ情報を記録する。
【００３１】
CPUは、各モジュールでの処理が終了すると、FPGAボード２に記録されたログ情報を取り込む（ステップＳ１１）。ログ情報としては、FPGAボード２に実装された制御部０の動作履歴が記録される。例えば、各モジュールのデータ処理時間やリソース割当て待ち時間、各モジュールで利用しているバス帯域および全体としてのバス利用状況が記録されており、CPUがこれらの情報を収集することができる。また、制御部０が実行する制御タスクの実行結果以外に、メモリ２Ａにモジュールごとにログ情報を格納することで、各モジュールに固有なログ情報も取得が可能となる。
【００３２】
CPUは、これらのログ情報を元にデータフロー処理の実行状況を解析し（ステップＳ１２）、データフロー処理の見直しが必要か否かを判定し（ステップＳ１３）、ステップＳ９の場合と同様に、見直しが必要と判定された原因に応じて上流の各ステップに戻り、修正された定義等に従って以降の処理を繰り返す。例えば、CPUは、データフロー処理の実行結果や各モジュールの実行結果が、要求されているアプリケーションの仕様を満足するものでなく、あるモジュールのレスポンスが要求された基準を満たしていないため、モジュールの分割方法や使用するインタフェースの再定義が必要と判定した場合には、ステップＳ３やＳ４に戻って、再定義を促すメッセージや上述したログ情報をPC１の表示部（不図示）に表示する。そして、ユーザは表示されたメッセージやログ情報に従って、入力部を介してデータフロー処理を再定義することとなる。
【００３３】
このように、実装されるモジュールをアプリケーションの処理単位とし、上述した各ステップを繰り返し実行することにより、当該データフロー処理に最適なハードウェアとソフトウェアとを協調させてSOCやFPGA等の基板設計が可能となる。例えば、画像や通信等のデータフロー処理を対象に、画像フレームや通信パケット等に対して行う処理の単位に着目し、モデルベースデザイン手法とプロトタイピング手法を用いて、ハードウェアとソフトウェアとを協調させて最適なFPGAボードの設計が可能となる。
【００３４】
また、画像や通信等のデータフロー処理をFPGAボード上のハードウェアとソフトウェアに繰り返し実装および動作させることが可能となり、短期間で当該データフロー処理に最適なハードウェアとソフトウェアの協調設計を行うことができる。また、モジュールを纏めた処理をタスク化し、リソースの許す限り複数のタスクをモジュールごとにパイプライン処理することで、当該データフロー処理を高速に処理することも可能となる。また、利用するFPGAボードのリソースに合わせてハードウェアモジュールとソフトウェアモジュールおよび同時起動する制御タスク数を増やしたり、メモリを介さずモジュール間を専用接続すること等の個別のモジュールやインタフェースの最適化を図ることで、プロトタイピングにとどまるこことなく最終形としての設計も可能となる。
【符号の説明】
【００３５】
１                  PC（コンピュータ）
２                  FPGAボード
２Ａ                メモリ
２Ａ〜Ｄ            インタフェース（メモリ）
２Ｂ                論理部
２Ｂ−１Ａ、２Ａ    インタフェース（ハードウェアモジュールのメモリ側）
２Ｂ−１Ｂ、２Ｂ    インタフェース（ハードウェアモジュールの制御部側）
２Ｃ                制御部
２Ｃ−１Ａ、２Ａ    インタフェース（ソフトウェアモジュールのメモリ側）
２Ｃ−１Ｂ、２Ｂ    インタフェース（ソフトウェアモジュールの制御部側）
２Ｃ−０Ａ〜Ｄ      インタフェース（制御部）。
【図１】
2015076007.tif 000003
【図２】
2015076007.tif 000004
【図３】
2015076007.tif 000005
【図４】
2015076007.tif 000006
【図５】
2015076007.tif 000007
【図６】
2015076007.tif 000008