(57)【要約】      （修正有）【課題】汎用プロセッサを備え、開発プロセッサを含む半導体製品とその開発プロセッサで動作させる開発ソフトウェアの機能を協調検証するための半導体設計支援装置において、協調検証されるべきソフトウェアとハードウェアが大規模、多様になっても、準備に要する工数を低く抑えながら、協調動作シミュレーションを高速に実行する。【解決手段】開発ソフトウェアを、汎用プロセッサ用のコンパイラにより、汎用プロセッサ用の低水準言語に変換する。開発プロセッサのアドレス空間へのアクセス命令を、汎用プロセッサのアドレス空間のアドレスに対応する変数に変換する記述変換手段を備える。記述変換手段は、開発プロセッサのアドレス空間にマッピングされた周辺回路は、汎用プロセッサ上で動作する周辺回路モデルを関数として予め準備し、開発ソフトウェア内の周辺回路に対する起動コマンドの転送命令を、周辺回路の関数コールに変換する。【選択図】図１
2013257757.tif 000002
【特許請求の範囲】
【請求項１】
第１プロセッサを備え、開発対象である第２プロセッサを含む半導体製品と、高水準言語で記述され前記第２プロセッサで動作させる開発ソフトウェアの機能を協調検証するための半導体設計支援装置であって、
前記開発ソフトウェアを前記第１プロセッサ用の低水準言語に変換する、第１プロセッサ対応トランスレータを有し、
前記第２プロセッサのアドレス空間内の前記記憶領域を前記第１プロセッサのアドレス空間内の所定の記憶領域に対応付ける第２プロセッサ記憶領域情報に基づいて、前記開発ソフトウェアに含まれる前記第２プロセッサのアドレス空間内の記憶領域に値を読み書きするための第２プロセッサ記憶領域転送記述を、前記第１プロセッサのアドレス空間内の記憶領域に値を読み書きするための第１プロセッサ記憶領域転送記述に変換する、記述変換手段を有する、半導体設計支援装置。
【請求項２】
請求項１において、前記半導体製品は前記第２プロセッサの周辺回路を含み、
前記周辺回路は、前記第２プロセッサのアドレス空間に割り付けられた記憶領域に制御情報を表す値を読み書きすることにより、前記制御情報に基づいて所定の動作を行う回路であり、
前記第２プロセッサ記憶領域転送記述は、前記周辺回路に前記制御情報を表す値を読み書きするための転送命令記述を含み、さらに、前記制御情報は、前記周辺回路の動作を起動する値を送信するための起動命令記述を含み、
前記第２プロセッサ記憶領域情報は、前記転送記述を前記第１プロセッサのアドレス空間内の所定の記憶領域に対応する変数名に対応付け、
前記半導体設計支援装置は、前記起動命令記述を、前記周辺回路の動作を表す前記第１プロセッサ上の関数名に対応付ける、周辺回路制御情報を有し、
前記記述変換手段は、前記第２プロセッサ記憶領域情報に基づいて前記転送記述を前記変数名の変数に対するアクセス記述に変換し、前記起動命令記述を前記関数名の関数を呼び出す関数コール記述に変換する、半導体設計支援装置。
【請求項３】
請求項１において、前記周辺回路構造体の機能を記述した周辺回路モデルをさらに有し、
前記記述変換手段の出力と前記周辺回路モデルとが入力されて、前記第１プロセッサで実行可能なシミュレータの実行ファイルを生成する第１プロセッサ対応リンカをさらに備える、半導体設計支援装置。
【請求項４】
請求項２において、前記開発ソフトウェアは、前記周辺回路構造体の宣言記述を含む、半導体設計支援装置。
【請求項５】
請求項４において、前記周辺回路構造体の宣言記述は、前記前記周辺回路構造体を前記周辺回路のシミュレーションで使用するか否かを選択することが可能な、選択条件記述をさらに含む、半導体設計支援装置。
【請求項６】
第１プロセッサを備える半導体設計支援装置によって、第２プロセッサを含む半導体製品と、高水準言語で記述され前記第２プロセッサで動作させる開発ソフトウェアの機能を協調検証するための半導体設計支援方法であって、
前記開発ソフトウェアから前記第１プロセッサ用の低水準言語に変換する第１プロセッサ対応トランスレーションステップを有し、
前記第２プロセッサのアドレス空間内の前記記憶領域を前記第１プロセッサのアドレス空間内の所定の記憶領域に対応付ける第２プロセッサ記憶領域情報に基づいて、前記開発ソフトウェアに含まれる前記第２プロセッサのアドレス空間内の記憶領域に値を読み書きするための第２プロセッサ記憶領域転送記述を、前記第１プロセッサのアドレス空間内の記憶領域に値を読み書きするための第１プロセッサ記憶領域転送記述に変換する、記述変換ステップを有する、半導体設計支援方法。
【請求項７】
請求項６において、前記半導体製品は、前記第２プロセッサのアドレス空間に割り付けられた記憶領域に制御情報を表す値を読み書きすることにより、前記制御情報に基づいて所定の動作を行う、前記第２プロセッサの周辺回路を含み、
前記第２プロセッサ記憶領域転送記述は、前記周辺回路に前記制御情報を表す値を読み書きするための転送命令記述を含み、さらに、前記制御情報は、前記周辺回路の動作を起動する値を送信するための起動命令記述を含み、
前記第２プロセッサ記憶領域情報は、前記転送記述を前記第１プロセッサのアドレス空間内の所定の記憶領域に対応する変数名に対応付け、
前記半導体設計支援方法は、前記起動命令記述を、前記周辺回路の動作を表す前記第１プロセッサ上の関数名に対応付ける、周辺回路制御情報を有し、
前記記述変換ステップは、前記第２プロセッサ記憶領域情報に基づいて前記転送記述を前記変数名の変数に対するアクセス記述に変換し、前記起動命令記述を前記関数名の関数を呼び出す関数コール記述に変換する、半導体設計支援方法。
【請求項８】
請求項６において、前記記述変換ステップの出力が入力され、前記周辺回路構造体の機能を記述した周辺回路モデルがさらに入力されて、前記第１プロセッサで実行可能なシミュレータの実行ファイルを生成する、第１プロセッサ対応リンケージステップをさらに備える、半導体設計支援方法。
【請求項９】
請求項７において、前記開発ソフトウェアは、前記周辺回路構造体の宣言記述を含む、半導体設計支援方法。
【請求項１０】
請求項９において、前記周辺回路構造体の宣言記述は、前記前記周辺回路構造体を前記周辺回路のシミュレーションで使用するか否かを選択することが可能な、選択条件記述をさらに含む、半導体設計支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサを含む半導体製品とそのプロセッサ上で動作するソフトウェアの機能を協調検証する半導体設計支援装置及び半導体設計支援方法に関し、特に設計効率の向上に好適に利用できるものである。
【背景技術】
【０００２】
半導体製品の大規模化、複雑化にともない、試作なしで製品の事前検討や確認を可能にするシミュレーションがより重要になっている。プロセッサ（以下、開発プロセッサ）を搭載するＬＳＩ（Large Scale Integrated circuit）などの半導体製品の動作を事前に検証するためには、ハードウェアのみならず、開発プロセッサ上で動作するソフトウェア（以下、開発ソフトウェア）の機能をも協調検証する必要がある。このような半導体製品は、一般に、開発プロセッサと、内部バスあるいは周辺バスに接続される周辺回路を備え、開発プロセッサ上で開発ソフトウェアを実行することによって、所望の機能を実現する。ソフトウェア及びハードウェア協調検証においては、開発ソフトウェアから開発プロセッサ上で動作するオブジェクトコード、実行ファイルまたはこれに相当する低水準言語で記述されたコードを生成し、開発プロセッサをモデル化した命令セットシミュレータに入力して、動作を確認する。ここで、半導体製品が使用されるシステムや、開発プロセッサ以外の周辺回路などの動作は、上記命令セットシミュレータと協調して動作するシミュレーション環境を作成して検証する。これにより、開発プロセッサを搭載した半導体製品において開発ソフトウェアを動作させたときの機能を、半導体製品を試作することなく、確認することができる。しかし、半導体製品のハードウェア及び開発ソフトウェアが大規模で多様になると、シミュレーション環境の作成に要する工数が増加し、また、シミュレーションの実行速度が遅くなってしまうという問題があった。
【０００３】
特許文献１には、ＣＰＵ（Central Processing Unit）を含むＬＳＩ（Large Scale Integrated circuit）のソフトウェアとハードウェアとの協調シミュレーション方法が開示されている。ＣＰＵは命令セットシミュレータを用いてモデル化し、ＣＰＵ以外のハードウェアは、ハードウェア記述言語を用いて記述する。ソフトウェアのうち、ハードウェアを直接制御する部分は、前記ＣＰＵに対応するコンパイラ等のツールを使用して、ＣＰＵのオブジェクトコードを生成し、ＣＰＵは命令セットシミュレータを用いてシミュレーションする。ソフトウェアのうち、ハードウェアに依存しない部分は、ＣＰＵではなくシミュレーションを実行するホストプロセッサに対応するコンパイラ等のツールを使用して、ホストプロセッサのオブジェクトコード及び実行ファイルを生成してシミュレーションを行う。
【０００４】
特許文献２には、命令セットシミュレータとペリフェラルエミュレータを組合せたシステムエミュレータが開示されている。命令セットシミュレータは、ターゲットマシン用の命令セットを解釈して実行する。ペリフェラルエミュレータは、ターゲットマシン上の複数のペリフェラルのそれぞれ模擬する複数のペリフェラルエミュレータである。命令セットシミュレータからのメモリアクセスのときのアドレスに基づいて、適切なペリフェラルエミュレータとの間で、データの受け渡しを行う。
【０００５】
特許文献３及び特許文献４には、タイミング検証の精度を低下させることなく、シミュレーションの高速化を実現したハードウェア及びソフトウェア協調検証方法が開示されている。命令セットシミュレーションに代えて、処理に要する時間をモデル化したCベース言語記述のtimedソフトウェア部品を予め準備しておき、シミュレーション対象のシステムごとに、ソフトウェアとともにコンパイル、リンクを経てオブジェクトコード及び実行ファイルを生成する。オブジェクトコード及び実行ファイルは、シミュレータの実行環境であるワークステーションなどで実行可能である。
【０００６】
特許文献１及び２にも開示されている命令セットシミュレータは、シミュレーション対象のＣＰＵのフェッチ・デコード・エグゼキューションの、各サイクルを忠実に再現するため、そのＣＰＵに入力される命令を、１命令・１サイクル毎に逐次解釈し機能を模擬することによって実行する、いわゆるインタープリタである。インタープリタは、入力される命令を逐次解釈して実行するので、ソフトウェアの処理に要する実行サイクル数についての精度が高い一方、実行速度は遅い。特許文献３及び４では、この問題を解決するために、シミュレーション対象の命令列であるソフトウェアをコンパイルして、シミュレーションを行うホストプロセッサ上で実行する。このとき、実行サイクルなどの時間的精度を高めるために、全てのハードウェアについて、実行時間をモデル化して組み込んだソフトウェア部品を準備している。協調検証されるべきソフトウェアとともに、実行時間をモデル化して組み込んだソフトウェア部品として提供されるハードウェアを合わせてコンパイル、リンクして、実行する。これにより、シミュレーション速度と時間的精度を両立したシミュレーションが可能となる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０００−２５９４４５号公報
【特許文献２】特開２００１−２５６０７２号公報
【特許文献３】特開２００４−２３４５２８号公報
【特許文献４】特開２００５−２９３２１９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１及び２に開示される従来技術は、命令セットシミュレータが開発ソフトウェアの個々の命令を逐次解読して実行するため、シミュレーション速度が低く、開発ソフトウェアが大規模になるとシミュレーションに長時間を要するという問題を生じる。
【０００９】
特許文献３及び４に開示される従来技術によれば、シミュレーション速度と時間的精度を両立したシミュレーションが可能となるが、全てのハードウェアについて、実行時間をモデル化して組み込んだソフトウェア部品を準備する必要がある。さらに、協調検証されるべきソフトウェアとソフトウェア部品は、C言語などの高水準言語で記述されているが、アセンブリ言語による記述が含まれているため、機械によるコンパイルでは処理することができず、人手による変換が必要となる。（特許文献３の第0022段落から第0023段落、特許文献４の第0040段落などを参照。）そのため、協調検証されるべきソフトウェアとハードウェアが大規模、多様になるとシミュレーションのための準備に要する工数が増加してしまうという問題を生じる。
【００１０】
このような課題を解決するための手段を以下に説明するが、その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１１】
一実施の形態によれば、下記の通りである。
【００１２】
すなわち、汎用プロセッサを備え、開発プロセッサを含む半導体製品とその開発プロセッサで動作させる開発ソフトウェアの機能を協調検証するための半導体設計支援装置であって、以下のように構成される。
【００１３】
開発ソフトウェアを、汎用プロセッサ用のコンパイラにより、汎用プロセッサ用の低水準言語に変換する。そのときに単純に変換できない、開発プロセッサのアドレス空間へのアクセス命令を、汎用プロセッサのアドレス空間のアドレスに対応する変数に変換する、記述変換手段を備える。記述変換手段は、開発プロセッサのアドレス空間にマッピングされた周辺回路は、汎用プロセッサ上で動作する周辺回路モデルを関数として予め準備し、開発ソフトウェア内の周辺回路に対する起動コマンドの転送命令を、周辺回路の関数コールに変換する。開発プロセッサのアドレス空間にマッピングされた周辺回路は、構造体変数として記述された周辺回路モデルを予め準備し、変換された開発ソフトウェアとリンクして、汎用プロセッサでの協調動作シミュレータのオブジェクトコード及び実行ファイルを生成する。
【発明の効果】
【００１４】
前記一実施の形態によって得られる効果を簡単に説明すれば下記のとおりである。
【００１５】
すなわち、協調検証されるべきソフトウェアとハードウェアが大規模、多様になっても、シミュレーションのための準備に要する工数を低く抑えながら、協調動作のシミュレーションを汎用プロセッサで高速に実行することができる。
【図面の簡単な説明】
【００１６】
【図１】図１は、実施形態１における半導体設計支援装置が実行する、ソフトウェア及びハードウェア協調検証シミュレーションのためのオブジェクトコード及び実行ファイル生成処理の処理フローである。
【図２】図２は、実施形態１における周辺回路の一例の概略仕様である。
【図３】図３は、実施形態１における開発プロセッサ記憶領域情報の一例である。
【図４】図４は、実施形態１における周辺回路制御情報の一例である。
【図５】図５は、実施形態１における高水準言語開発ソフトウェアの実装記述の一例である。
【図６】図６は、実施形態１における高水準言語開発ソフトウェアの宣言記述の一例である。
【図７】図７は、実施形態１における周辺回路モデルの実装記述の一例である。
【図８】図８は、実施形態１における開発プロセッサ記憶領域転送記述を含む低水準言語開発ソフトウェアの一例である。
【図９】図９は、実施形態１における汎用プロセッサ記憶領域転送記述を含む低水準言語開発ソフトウェアの一例である。
【図１０】図１０は、実施形態１における汎用プロセッサ対応記述変換処理の詳細な処理フローの一例を示すＰＡＤ図である。
【図１１】図１１は、実施形態２における高水準言語開発ソフトウェアの宣言記述の一例である。
【図１２】図１２は、実施形態２における高水準言語開発ソフトウェアの実装記述の一例である。
【図１３】図１３は、実施形態３における半導体設計支援装置が実行する、ソフトウェア及びハードウェア協調検証シミュレーションのためのオブジェクトコード及び実行ファイル生成処理の処理フローである。
【図１４】図１４は、ソフトウェア及びハードウェア協調検証の対象を示す説明図である。
【発明を実施するための形態】
【００１７】
１．実施の形態の概要
先ず、本願において開示される代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【００１８】
〔１〕＜開発プロセッサ記憶領域転送記述の汎用プロセッサ対応記述変換＞
第１プロセッサを備え、開発対象である第２プロセッサ（９１）を含む半導体製品（９０）と、高水準言語で記述され前記第２プロセッサで動作させる開発ソフトウェア（１０）の機能を協調検証するための半導体設計支援装置であって、以下のように構成される。
【００１９】
前記開発ソフトウェアを前記第１プロセッサ用の低水準言語に変換する、第１プロセッサ対応トランスレータ（１）を有する。
【００２０】
前記第２プロセッサのアドレス空間内の前記記憶領域を前記第１プロセッサのアドレス空間内の所定の記憶領域に対応付ける第２プロセッサ記憶領域情報（４０）を有する。
【００２１】
前記第２プロセッサ記憶領域情報に基づいて、前記開発ソフトウェアに含まれる前記第２プロセッサのアドレス空間内の記憶領域に値を読み書きするための第２プロセッサ記憶領域転送記述（１１）を、前記第１プロセッサのアドレス空間内の記憶領域に値を読み書きするための第１プロセッサ記憶領域転送記述（３１）に変換する、記述変換手段（２）を有する。
【００２２】
これにより、協調検証されるべきソフトウェアとハードウェアが大規模、多様になっても、シミュレーションのための準備に要する工数を低く抑えながら、協調動作のシミュレーションを、汎用プロセッサなどの第１プロセッサで高速に実行することができる。
【００２３】
〔２〕＜項１＋周辺回路制御情報＞
項１において、前記半導体製品は前記第２プロセッサの周辺回路（９４、９５、９６）を含む。前記周辺回路は、前記第２プロセッサのアドレス空間に割り付けられた記憶領域に制御情報を表す値を読み書きすることにより、前記制御情報に基づいて所定の動作を行う回路である。
【００２４】
前記第２プロセッサ記憶領域転送記述は、前記周辺回路に前記制御情報を表す値を読み書きするための転送命令記述を含み、さらに、前記制御情報は、前記周辺回路の動作を起動する値を送信するための起動命令記述を含む。前記第２プロセッサ記憶領域情報を、前記転送記述を前記第１プロセッサのアドレス空間内の所定の記憶領域に対応する変数名に対応付ける。
【００２５】
前記半導体設計支援装置は、前記起動命令記述を、前記周辺回路の動作を表す前記第１プロセッサ上の関数名に対応付ける、周辺回路制御情報（５０）を有する。前記記述変換手段は、前記第２プロセッサ記憶領域情報に基づいて前記転送記述を前記変数名の変数に対するアクセス記述に変換し（８４）、前記起動命令記述を前記関数名の関数を呼び出す関数コール記述に変換する（８５、８６）。
【００２６】
これにより、開発プロセッサのアドレス空間に割り付けられた周辺回路を搭載した半導体製品に対しても、同様に、シミュレーションのための準備に要する工数を低く抑えながら、協調動作のシミュレーションを汎用プロセッサなどの第１プロセッサで高速に実行することができる。
【００２７】
〔３〕＜周辺回路モデルをリンク＞
項１または２において、前記周辺回路構造体の機能を記述した周辺回路モデル（６０）をさらに有し、前記記述変換手段の出力と前記周辺回路モデルとが入力されて、前記第１プロセッサで実行可能なシミュレータのオブジェクトコード及び実行ファイルを生成する前記第１プロセッサ対応リンカ（３）をさらに備える。
【００２８】
これにより、周辺回路モデルを組み込んだシミュレータを作成することができる。
【００２９】
〔４〕＜周辺回路構造体の宣言記述＞
項２において、前記開発ソフトウェアは、前記周辺回路構造体の宣言記述を含む。
【００３０】
これにより、周辺回路が使用する区分とビットを構造的に定義することにより、開発ソフトウェアにおいて簡便な記述を使用することができる。
【００３１】
〔５〕＜選択条件記述＞
項４において、前記周辺回路構造体の宣言記述は、前記前記周辺回路構造体を前記周辺回路のシミュレーションで使用するか否かを選択することが可能な、選択条件記述をさらに含む。
【００３２】
これにより、開発ソフトウェアを、ソフトウェア及びハードウェア協調検証のシミュレーション向けの記述と実機に搭載するための記述に分ける必要がなく、一元化することができる。
【００３３】
〔６〕＜開発プロセッサ記憶領域転送記述の汎用プロセッサ対応記述変換＞
第１プロセッサを備える半導体設計支援装置によって、第２プロセッサ（９１）を含む半導体製品（９０）と、高水準言語で記述され前記第２プロセッサで動作させる開発ソフトウェア（１０）の機能を協調検証するための半導体設計支援方法であって、以下のように構成される。
【００３４】
前記開発ソフトウェアから前記第１プロセッサ用の低水準言語に変換する第１プロセッサ対応トランスレーションステップ（１）を有する。
【００３５】
前記第２プロセッサのアドレス空間内の前記記憶領域を前記第１プロセッサのアドレス空間内の所定の記憶領域に対応付ける第２プロセッサ記憶領域情報（４０）を有する。
【００３６】
前記第２プロセッサ記憶領域情報に基づいて、前記開発ソフトウェアに含まれる前記第２プロセッサのアドレス空間内の記憶領域に値を読み書きするための第２プロセッサ記憶領域転送記述（１１）を、前記第１プロセッサのアドレス空間内の記憶領域に値を読み書きするための第１プロセッサ記憶領域転送記述（３１）に変換する、記述変換ステップ（２）を有する。
【００３７】
これにより、協調検証されるべきソフトウェアとハードウェアが大規模、多様になっても、シミュレーションのための準備に要する工数を低く抑えながら、協調動作のシミュレーションを汎用プロセッサなどの第１プロセッサで高速に実行することができる。
【００３８】
〔７〕＜項６＋周辺回路制御情報＞
項６において、前記半導体製品は、前記第２プロセッサのアドレス空間に割り付けられた記憶領域に制御情報を表す値を読み書きすることにより、前記制御情報に基づいて所定の動作を行う、前記第２プロセッサの周辺回路（９４、９５、９６）を含む。前記第２プロセッサ記憶領域転送記述は、前記周辺回路に前記制御情報を表す値を読み書きするための転送命令記述を含み、さらに、前記制御情報は、前記周辺回路の動作を起動する値を送信するための起動命令記述を含む。
【００３９】
前記第２プロセッサ記憶領域情報は、前記転送記述を前記第１プロセッサのアドレス空間内の所定の記憶領域に対応する変数名に対応付ける。
【００４０】
前記半導体設計支援方法は、前記起動命令記述を、前記周辺回路の動作を表す前記第１プロセッサ上の関数名に対応付ける、周辺回路制御情報（５０）を有する。
【００４１】
前記記述変換ステップは、前記第２プロセッサ記憶領域情報に基づいて前記転送記述を前記変数名の変数に対するアクセス記述に変換し（８４）、前記起動命令記述を前記関数名の関数を呼び出す関数コール記述に変換する（８５、８６）。
【００４２】
これにより、開発プロセッサのアドレス空間に割り付けられた周辺回路を搭載した半導体製品に対しても、同様に、シミュレーションのための準備に要する工数を低く抑えながら、協調動作のシミュレーションを汎用プロセッサで高速に実行することができる。
【００４３】
〔８〕＜周辺回路モデルをリンク＞
項６または７において、前記記述変換ステップの出力が入力され、前記周辺回路構造体の機能を記述した周辺回路モデル（６０）がさらに入力されて、前記第１プロセッサで実行可能なシミュレータのオブジェクトコード及び実行ファイルを生成する、第１プロセッサ対応リンケージステップ（３）をさらに備える。
【００４４】
これにより、周辺回路モデルを組み込んだシミュレータを作成することができる。
【００４５】
〔９〕＜周辺回路構造体の宣言記述＞
項７において、前記開発ソフトウェアは、前記周辺回路構造体の宣言記述を含む。
【００４６】
これにより、周辺回路が使用する区分とビットを構造的に定義することにより、開発ソフトウェアにおいて簡便な記述を使用することができる。
【００４７】
〔１０〕＜選択条件記述＞
項９において、前記周辺回路構造体の宣言記述は、前記前記周辺回路構造体を前記周辺回路のシミュレーションで使用するか否かを選択することが可能な、選択条件記述をさらに含む。
【００４８】
これにより、開発ソフトウェアを、ソフトウェア及びハードウェア協調検証のシミュレーション向けの記述と実機に搭載するための記述に分ける必要がなく、一元化することができる。
【００４９】
２．実施の形態の詳細
実施の形態について更に詳述する。
【００５０】
〔実施形態１〕
図１４は、ソフトウェア及びハードウェア協調検証の対象を示す説明図である。（ａ）は検証対象のハードウェアである半導体製品９０の一例を示すブロック図である。開発プロセッサ９１を備え、バス９３を介してメモリ９２と複数の周辺回路９４、９５、９６が接続されている。実機においては、高水準言語で記述された開発ソフトウェア１０は、（ｂ）のフロー図に示すように開発プロセッサ対応トランスレータ４を使って、アセンブリ言語などの低水準言語の記述に変換され、最終的には開発プロセッサ９１で解読実行可能な機械語に変換されて、半導体製品９０に入力される。ここで、開発プロセッサ対応トランスレータ４とは、コンパイラやアセンブラを指す。開発プロセッサに対応させるため、Ｃ言語などの高水準言語とアセンブリ言語の記述を混在させることを許容するなどの工夫が施されている。一方、検証段階においては、検証対象のハードウェアである半導体製品９０に開発ソフトウェア１０が入力されたときの動作をシミュレートし、半導体製品９０の入出力端子にテストベンチを接続して、動作が所望の仕様を満足することを確認する。このために、ソフトウェア及びハードウェア協調検証シミュレーションを行う。ソフトウェア及びハードウェア協調検証シミュレーションは、ワークステーションやパーソナルコンピュータなど、汎用プロセッサを搭載した電子計算機で実行する。
【００５１】
図１は、実施形態１における半導体設計支援装置が実行する、ソフトウェア及びハードウェア協調検証シミュレーションのためのオブジェクトコード及び実行ファイル生成処理の処理フローである。
【００５２】
Ｃ言語等の高水準言語で記述された開発ソフトウェア（以下、高水準言語開発ソフトウェア）１０を、アセンブリ言語等の汎用プロセッサの低水準言語で記述されたソフトウェアに変換する手段（以下、汎用プロセッサ対応トランスレータ）１に入力し、低水準言語で記述された開発ソフトウェア（以下、低水準言語開発ソフトウェア）２０を得る。ここで、汎用プロセッサ対応トランスレータ１は、半導体設計支援装置を実装する汎用プロセッサを搭載したワークステーションやＰＣで使用される、Ｃ言語などの高水準言語をコンパイルするコンパイラであってよい。実機で実行させるためには、図１４に示したように、開発プロセッサ対応トランスレータ４を使って、アセンブリ言語などの低水準言語の記述に変換するが、実施形態１においては、半導体設計支援装置に搭載されている汎用プロセッサ対応のトランスレータ１を用いる点で特徴がある。高水準言語開発ソフトウェア１０には、開発プロセッサ上で利用できる記憶領域に対して値を読み書きするための記述（以下、開発プロセッサ記憶領域転送記述）１１が含まれている。これは、半導体製品９０において、開発プロセッサ９１が、自身のアドレス空間内のメモリ９２や周辺回路９４〜９６にアクセスするための記述である。汎用プロセッサ対応トランスレータ１から低水準言語開発ソフトウェア２０にも、開発プロセッサ上で利用できる記憶領域に対して値を読み書きするための記述（以下、開発プロセッサ記憶領域転送記述）２１が含まれている。開発プロセッサではなく汎用プロセッサ対応のトランスレータ１を用いて、低水準言語開発ソフトウェアに変換しているので、高水準言語開発ソフトウェア１０に含まれていた開発プロセッサ記憶領域転送記述１１を変換することができない。開発プロセッサ記憶領域転送記述１１が指定するアドレスが、開発プロセッサ９１のアドレス空間におけるアドレスであるので、汎用プロセッサ上で利用できる記憶領域ではないからである。
【００５３】
次に、変換されずに残った開発プロセッサ記憶領域転送記述２１を、汎用プロセッサ上で利用できる記憶領域に対して値を読み書きするための記述（以下、汎用プロセッサ記憶領域転送記述）３１に変換する手段（以下、汎用プロセッサ対応記述変換手段）２を使用して、汎用プロセッサ記憶領域転送記述３１を含む低水準言語開発ソフトウェア３０を得る。汎用プロセッサ対応記述変換手段２には、開発プロセッサ上で利用できる記憶領域に関する情報（以下、開発プロセッサ記憶領域情報）４０と、半導体製品の構成要素のうちプロセッサを除く周辺回路を制御するために必要な情報（以下、周辺回路制御情報）５０を入力する。
【００５４】
最後に、汎用プロセッサ記憶領域転送記述３１を含む低水準言語開発ソフトウェア３０と、周辺回路の動作を模擬するソフトウェア（以下、周辺回路モデル）６０を、汎用プロセッサ上で実行可能な形式に変換する手段（以下、汎用プロセッサ対応コンパイラ及びリンカ）３に入力する。汎用プロセッサ対応コンパイラ及びリンカ３は、汎用プロセッサ上で実行可能な形式（実行ファイル）に変換されたシミュレータ（以下、汎用プロセッサ実行可能シミュレータ）７０を出力する。ここで、シミュレータ７０は、ＥＤＡツールとしての汎用のシミュレータではなく、検証対象のソフトウェアとハードウェアに特化して、これらの機能を統合した動作をシミュレートすることができる、汎用プロセッサ上で実行可能な実行ファイルである。
【００５５】
汎用プロセッサ対応記述変換手段２は、開発プロセッサ記憶領域情報４０と周辺回路制御情報５０を使って、開発プロセッサ記憶領域転送記述２１を汎用プロセッサ上で利用できる記憶領域に対して値を読み書きするための記述（汎用プロセッサ記憶領域転送記述３１）に変換する。
【００５６】
開発プロセッサ記憶領域情報４０は、開発プロセッサのアドレスマップと汎用プロセッサのアドレスマップを対応付けるものである。例えば、開発プロセッサ９１に接続されているメモリ９２が、開発プロセッサ９１のアドレス空間内のある領域に割り付けられているとするとき、この領域を、汎用プロセッサのアドレス空間内で汎用プロセッサ実行可能シミュレータ７０が利用することができるメモリ領域に対応付ける。これにより、開発プロセッサ記憶領域転送記述２１は、汎用プロセッサ記憶領域転送記述３１に変換される。開発プロセッサ記憶領域転送記述２１が開発プロセッサ９１に接続されているメモリ９２にアクセスする命令であるときには、汎用プロセッサ記憶領域転送記述３１は、汎用プロセッサのアドレス空間内の所定のメモリ領域にアクセスする命令に変換され、等価の動作を行うことができる。
【００５７】
半導体製品９０において、周辺回路９４〜９６はバス９３に接続されており、開発プロセッサ９１のアドレス空間内のアドレスが割り付けられたレジスタを備え、データや制御情報の入出力を行う。周辺回路９４〜９６の動作は、周辺回路モデル６０によって模擬される。周辺回路モデル６０は例えば関数で表現されており、上記レジスタを介して入出力されるデータや制御情報を引数として動作する。周辺回路制御情報５０は、低水準言語開発ソフトウェア２０に含まれる開発プロセッサ記憶領域転送記述２１のうち、周辺回路のレジスタへアクセスを、周辺回路モデル６０を呼び出して引数を引き渡す記述に変換するための対応付けを与える。これにより、実機上では、アドレスマップされた周辺回路のレジスタとの間でデータや制御情報を入出力することにより、周辺回路が所定の動作を行うという一連の動きが、汎用プロセッサ実行可能シミュレータ７０によって、汎用プロセッサ上で等価の動作としてシミュレートされる。
【００５８】
図２は、実施形態１における周辺回路の一例の概略仕様である。ＴＭＲという名称の周辺回路は、記憶領域内のＣＴＬ，ＣＮＴ，ＴＨＤという名称の３つの区分を使用する。区分ＣＴＬ，ＣＮＴ，ＴＨＤの開始番地はそれぞれ０ｘ０ＡＢＣＤＥＦ０，０ｘ０ＡＢＣＤＥＦ２，０ｘ０ＡＢＣＤＥＦ４であり、容量はそれぞれ２バイトずつである。区分ＣＴＬに適切な値を格納することにより、周辺回路ＴＭＲの動作を制御する。区分ＣＴＬに該当する２バイトのうち、最下位のビット（名称はＳＴＲ）のみ使用し、残りの上位１５ビットは使用しない。区分ＣＮＴはカウンタとして使用し、区分ＴＨＤにはしきい値を格納する。区分ＣＮＴに該当する２バイトと、区分ＴＨＤに該当する２バイトはすべて使用する。区分ＣＴＬ内のビットＳＴＲの値が１のとき、周辺回路ＴＭＲの動作サイクル毎に区分ＣＮＴに格納される値を１ずつ増加する。ビットＳＴＲの値が０のとき、区分ＣＮＴに格納される値を変更しない。区分ＣＮＴに格納される値が区分ＴＨＤに格納される値に等しくなるとき、区分ＣＴＬ内のビットＳＴＲの値を０に変更する。区分ＣＴＬ，ＣＮＴ，ＴＨＤは、開発プロセッサのアドレス空間に割り付けられ、開発プロセッサからバスを経由してアクセスすることができるレジスタにより実現することができる。
【００５９】
図３は、実施形態１における開発プロセッサ記憶領域情報４０の一例である。０ｘ０ＡＢＣ００００という番地から始まる記憶領域の容量は３２７６８バイトであり、０ｘ０ＡＢＣＤＥＦ０という番地から始まる記憶領域の容量は６バイトである。例えば、前者は開発プロセッサに接続されたＲＡＭであり、後者は周辺回路のレジスタであり、いずれも、開発プロセッサのアドレス空間内のアドレスに割り付けられている。一方、周辺回路モデル６０は、開発プロセッサ上で利用できる記憶領域を汎用プロセッサ上で模擬するための変数を備えている。前者の記憶領域はＲＡＭという名称の変数に、後者の記憶領域はＴＭＲＩＯという名称の変数にそれぞれ対応づけられることを意味する。
【００６０】
図４は、実施形態１における周辺回路制御情報５０の一例である。ここでビット位置とは、１バイトを構成する８ビットのうち、最下位のビットを０、最上位のビットを７としたときの相対位置である。番地０ｘ０ＡＢＣＤＥＦ１のビット位置０、すなわち周辺回路ＴＭＲが使用する区分ＣＴＬ内のビットＳＴＲの値が０から１に変化するとき、ｆ＿ＴＭＲという名称の関数を起動することを意味する。
【００６１】
図５は、実施形態１における高水準言語開発ソフトウェア１０の実装記述の一例である。図５は、代表的な高水準言語であるＣ言語を利用している。１行目では、次に述べる高水準言語開発ソフトウェアの宣言記述を参照する。７行目から１１行目では、周辺回路ＴＭＲが使用するそれぞれの区分に値を格納する。７行目と８行目では、区分ＣＴＬに０を格納する。すなわち、区分ＣＴＬ内のビットＳＴＲの値を０に変更する。９行目では、区分ＣＮＴに２を格納する。１０行目では、区分ＴＨＤに０ｘ１０００を格納する。１１行目では、区分ＣＴＬに１を格納する。すなわち、区分ＣＴＬ内のビットＳＴＲの値を１に変更する。７行目及び８行目と、１１行目はそれぞれ異なる記述であるが、区分ＣＴＬに値を格納するという動作は同じである。
【００６２】
図６は、実施形態１における高水準言語開発ソフトウェア１０の宣言記述の一例である。図６も図５と同様にＣ言語を利用している。４行目から２４行目に示すように、周辺回路ＴＭＲが使用する区分とビットを構造的に定義することにより、図５の９行目から１１行目に示した簡便な記述を使用することができる。
【００６３】
図７は、実施形態１における周辺回路モデル６０の実装記述の一例である。関数ｆ＿ＴＭＲは、周辺回路ＴＭＲの動作を模擬する。１１行目から１４行目で区分ＣＮＴに格納された値を１ずつ増加し、区分ＴＨＤに格納された値に等しくなると１５行目で区分ＣＴＬに０を格納して終了する。
【００６４】
図８は、実施形態１における開発プロセッサ記憶領域転送記述を含む低水準言語開発ソフトウェア２０の一例である。図８は、代表的な汎用プロセッサであるｘ８６に対応したアセンブリ言語を利用している。また、図８は代表的な汎用プロセッサ対応トランスレータであるＧＮＵ Compiler Collection（以下、ＧＣＣと略記する。）により最適化して生成したものである。７行目から１０行目は、記憶領域の番地を指定した転送命令である。しかし、汎用プロセッサ上で利用できる記憶領域の番地は、一般に汎用プロセッサ対応トランスレータではなく、汎用プロセッサ対応コンパイラが決定する。したがって、７行目から１０行目が示す番地は、開発プロセッサ上で利用できる記憶領域の番地であることが分かる。つまり、７行目から１０行目は、開発プロセッサ記憶領域転送記述２１である。言い換えれば、図５に示した高水準言語開発ソフトウェア１０は、開発プロセッサで動作するものであるから、記憶領域の番地を指定した転送命令１１において指定された記憶領域の番地も、当然、開発プロセッサのアドレス空間に割り付けられている。これは、汎用プロセッサ上で利用できる記憶領域の番地とは異なるので、図８の７行目から１０行目が示す番地は、開発プロセッサ上で利用できる記憶領域の番地のまま、変換されずに出力されるのである。７行目では、周辺回路ＴＭＲが使用する区分ＣＴＬに０を格納する。７行目は、図５の７行目と８行目に対応する命令である。８行目では、区分ＣＮＴに２を格納する。９行目では、区分ＴＨＤに４０９６、すなわち０ｘ１０００を格納する。１０行目では、区分ＣＴＬに１を格納する。１０行目は、図５の１１行目に対応する命令である。図５の７行目及び８行目と、図５の１１行目はそれぞれ異なる記述であるが、図８の７行目と１０行目に示すように同じ命令に変換されており、汎用プロセッサ対応トランスレータにより命令数と種類が低減されていることが分かる。
【００６５】
図９は、実施形態１における汎用プロセッサ記憶領域転送記述３１を含む低水準言語開発ソフトウェア３０の一例である。図８と異なる点は二つある。一つは、７行目から１０行目において、それぞれの区分の開始番地に代えてＴＭＲＩＯという変数を使用している点である。もう一つは、１１行目に関数ｆ＿ＴＭＲを起動するための記述が追加されている点である。汎用プロセッサ記憶領域転送記述３１は、７行目から１１行目である。
【００６６】
図１０は、実施形態１における汎用プロセッサ対応記述変換処理２の詳細な処理フローの一例を示すＰＡＤ図である。低水準言語開発ソフトウェア２０を一行ずつ入力しながら（ステップ８１、８２、８８）、開発プロセッサ記憶領域転送記述２１を見つけると（ステップ８３）汎用プロセッサ記憶領域転送記述３１に逐次変換して（ステップ８４）出力する。開発プロセッサ記憶領域転送記述２１が周辺回路制御情報５０に記載されている起動条件を満足すると（ステップ８５）、起動条件に対応する関数名の関数を起動する記述に変換して（ステップ８６）出力する。最終的に図９に示したような低水準言語開発ソフトウェア３０が出力される。
【００６７】
図８に示した低水準言語開発ソフトウェア２０を図９に示した低水準言語開発ソフトウェア３０に変換する処理を例にとって説明する。図８の１行目から６行目は転送先番地を指定した転送命令でないため、変更せずに出力する。図８の７行目は転送先番地０ｘ０ＡＢＣＤＥＦ０を指定した転送命令であり、前述のように開発プロセッサ記憶領域転送記述２１である。図３に示した開発プロセッサ記憶領域情報４０をもとに、番地０ｘ０ＡＢＣＤＥＦ０から始まる６バイトに対応づけられた変数名ＴＭＲＩＯと、開始番地０ｘ０ＡＢＣＤＥＦ０を基準とした相対番地０を得て、７行目の０ｘ０ＡＢＣＤＥＦ０という文字列をＴＭＲＩＯ（％ｒｉｐ）という文字列に変更して出力する。また、７行目では、番地０ｘ０ＡＢＣＤＥＦ０から始まる２バイトに０ｘ００００という値を格納する。７行目は図４に示した周辺回路制御情報５０に記載された起動条件（番地０ｘ０ＡＢＣＤＥＦ１の最下位のビットが０から１に変化するとき）を満足しないため、関数ｆ＿ＴＭＲを起動する命令を出力しない。図８の８行目は転送先番地０ｘ０ＡＢＣＤＥＦ２を指定した転送命令であり、開発プロセッサ記憶領域転送記述２１である。開発プロセッサ記憶領域情報４０をもとに、変数名ＴＭＲＩＯと相対番地＋２を得て、８行目の文字列０ｘ０ＡＢＣＤＥＦ２を文字列ＴＭＲＩＯ＋２（％ｒｉｐ）に変更して出力する。また、８行目は周辺回路制御情報５０に記載された起動条件を満足しない。図８の９行目は転送先番地０ｘ０ＡＢＣＤＥＦ４を指定した転送命令であり、開発プロセッサ記憶領域転送記述２１である。開発プロセッサ記憶領域情報４０をもとに、変数名ＴＭＲＩＯと相対番地＋４を得て、９行目の文字列０ｘ０ＡＢＣＤＥＦ４を文字列ＴＭＲＩＯ＋４（％ｒｉｐ）に変更して出力する。また、９行目は周辺回路制御情報５０に記載された起動条件を満足しない。図８の１０行目は転送先番地０ｘ０ＡＢＣＤＥＦ０を指定した転送命令であり、開発プロセッサ記憶領域転送記述２１である。開発プロセッサ記憶領域情報４０をもとに、変数名ＴＭＲＩＯと相対番地０を得て、１０行目の文字列０ｘ０ＡＢＣＤＥＦ０を文字列ＴＭＲＩＯ（％ｒｉｐ）に変更して出力する。また、１０行目では、番地０ｘ０ＡＢＣＤＥＦ０から始まる２バイトに０ｘ０００１という値を格納する。１０行目は周辺回路制御情報５０に記載された起動条件を満足するため、１１行目として関数ｆ＿ＴＭＲを起動する命令（ｃａｌｌ  ｆ＿ＴＭＲ）を出力する。図８の１１行目から１３行目は転送先番地を指定した転送命令でないため、変更せずに１２行目から１４行目として出力する。
【００６８】
以上に述べたように、実施形態１によれば、開発ソフトウェアの書き換えを自動化することにより、開発ソフトウェアが大規模、多様になる場合にも、シミュレータの実行速度と工数増加の抑制を両立することを可能にする。開発プロセッサ記憶領域情報４０は、開発プロセッサごとに定義して実施形態１に係る半導体設計支援装置に入力すればよいので、同じプロセッサを使って多品種に展開する場合にも、品種ごとに作り直す必要がない。また、周辺回路制御情報５０は、同じプロセッサを使って多品種に展開する場合には、品種ごとに搭載する周辺回路の種類を異にする場合が多いが、同じ周辺回路を搭載するか否かを選択する場合には、割り付けられているアドレスを変更するだけでよい。このように、協調検証のシミュレーションを実行するためのシミュレータを自動的に生成することができるので、準備に要する工数を低く抑えることができる。また、生成されたシミュレータは、コンパイルによって最適化されたオブジェクトコード及び実行ファイルであるから、インタープリタ方式を取らざるを得ない命令セットシミュレータに比べて、数１０倍以上高速にシミュレーションを実行することができる。
【００６９】
〔実施形態２〕
図１１は、実施形態２における高水準言語開発ソフトウェア１０の宣言記述の一例である。図６に示した実施形態１における高水準言語開発ソフトウェア１０の宣言記述と異なる点は二つある。一つは、２７行目に変数ＴＭＲＩＯを利用するための宣言記述が追加されている点である。もう一つは、２６行目と２８行目と３２行目に、２７行目と、２９行目から３１行目のどちらを選択するかを汎用プロセッサ対応トランスレータ１に指示するための記述（以下、選択条件記述）が追加されている点である。
【００７０】
図１２は、実施形態２における高水準言語開発ソフトウェアの実装記述の一例である。図５に示した実施形態１における高水準言語開発ソフトウェア１０の実装記述と異なる点は三つある。一つめは、５行目において、記憶領域の番地を示す記述（図５の７行目と８行目）に代えて変数ＴＭＲＩＯを利用した記述に変更されている点である。二つめは、１０行目に関数ｆ＿ＴＭＲを起動するための記述が追加されている点である。三つめは、９行目と１１行目に、１０行目を選択するか否かを汎用プロセッサ対応トランスレータ１に指示するための選択条件記述が追加されている点である。
【００７１】
高水準言語開発ソフトウェア１０を汎用プロセッサ対応トランスレータ１に入力する際に、図１１の２６行目と図１２の９行目に示すＳＩＭという変数を真にすると、図１１の２７行目と図１２の１０行目がそれぞれ選択されるため、高水準言語開発ソフトウェア１０をシミュレータ７０に利用することができる。一方、変数ＳＩＭを偽にすると、図１１の２９行目から３１行目が選択され、図１２の１０行目が選択されないため、高水準言語開発ソフトウェア１０としてそのまま、実機の半導体製品において開発プロセッサに与えるプログラムとして利用することができる。
【００７２】
以上に述べたように、実施形態２によれば、人手で書き換えた開発ソフトウェアともとの開発ソフトウェアを一元化することにより、開発ソフトウェアの管理に要する工数の増加を抑制することを可能にする。
【００７３】
〔実施形態３〕
図１３は、実施形態３における半導体設計支援装置が実行する、ソフトウェア及びハードウェア協調検証シミュレーションのためのオブジェクトコード及び実行ファイル生成処理の処理フローである。図１に示した処理フローと異なる点は、汎用プロセッサ対応記述変換を施すステップの位置である。開発プロセッサ記憶領域転送記述１１を含む高水準言語開発ソフトウェア１０に対して、まず、開発プロセッサ記憶領域転送記述１１を汎用プロセッサ上で利用できる記憶領域に対して値を読み書きするための記述（汎用プロセッサ記憶領域転送記述）に変換する。その結果、汎用プロセッサ記憶領域転送記述１６を含む高水準言語開発ソフトウェア１５が作成される。これを汎用プロセッサ対応のトランスレータ１に入力する。入力された高水準言語開発ソフトウェア１５には、この段階では開発プロセッサ記憶領域転送記述１１が含まれていないので、すべてが低水準言語開発ソフトウェア３０に変換される。図１における低水準言語開発ソフトウェア３０と等価の記述を得ることができる。以後、汎用プロセッサ対応コンパイラ及びリンカ３に入力し、汎用プロセッサ上で実行可能な形式（オブジェクトコード及び実行ファイル）に変換された汎用プロセッサ実行可能シミュレータ７０を得る。
【００７４】
図１に示したフローでは、低水準言語に変換された段階で、開発プロセッサ記憶領域転送記述２１を汎用プロセッサ記憶領域転送記述３１に変換する。低水準言語での記述フォーマットは、自由度が低いので、開発プロセッサ記憶領域転送記述２１を容易に抽出することができるという利点がある。一方、上記のように、高水準記述の段階で変換するためには、自由度の高い記述フォーマットの中から、開発プロセッサ記憶領域転送記述２１を抽出する必要があるため、記述の解析が複雑になるという欠点がある。しかし、一旦、汎用プロセッサ記憶領域転送記述３１に変換すればその後に変換を要することがないので、汎用プロセッサ向けの一般のコンパイラ、リンカなどのツールを使って、汎用プロセッサ実行可能シミュレータ７０を生成することができる。
【００７５】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【００７６】
例えば、高水準言語は、Ｃ言語を例に採って説明したが、Ｃ＋＋など他の高級言語であってもよく、低水準言語は、Ｘ８６アセンブリ言語を例に採って説明したが、他のプロセッサ向けのアセンブリ言語や機械語であってもよい。
【符号の説明】
【００７７】
１  汎用プロセッサ対応トランスレータ
２  汎用プロセッサ対応記述変換手段
３  汎用プロセッサ対応コンパイラ及びリンカ
４  開発プロセッサ対応トランスレータ
１０、１５  高水準言語開発ソフトウェア
１１  高水準言語の開発プロセッサ記憶領域転送記述
１６  高水準言語の汎用プロセッサ記憶領域転送記述
２０  低水準言語開発ソフトウェア
２１  低水準言語の開発プロセッサ記憶領域転送記述
３０  低水準言語開発ソフトウェア
３１  低水準言語の汎用プロセッサ記憶領域転送記述
４０  開発プロセッサ記憶領域情報
５０  周辺回路制御情報
６０  周辺回路モデル
７０  シミュレータ（汎用プロセッサ上で実行可能なオブジェクトコード及び実行ファイル）
【図１】
2013257757.tif 000003
【図２】
2013257757.tif 000004
【図３】
2013257757.tif 000005
【図４】
2013257757.tif 000006
【図５】
2013257757.tif 000007
【図６】
2013257757.tif 000008
【図７】
2013257757.tif 000009
【図８】
2013257757.tif 000010
【図９】
2013257757.tif 000011
【図１０】
2013257757.tif 000012
【図１１】
2013257757.tif 000013
【図１２】
2013257757.tif 000014
【図１３】
2013257757.tif 000015
【図１４】
2013257757.tif 000016