(57)【要約】【課題】  設計の下流工程から上流工程に戻るような再設計を未然に防止するシステムＬＳＩの設計支援システム及び設計支援方法を提供する。【解決手段】  システムＬＳＩのソースコードを記憶するソースコード記憶装置１と、ソースコードを読み出しコンパイルして実行コードを生成し、実行コード記憶装置５に記憶するコンパイラ４と、ソースコードを読み出し、記述されているメンバ変数のサイズを算出し、静的解析結果として出力する静的解析部２と、システムＬＳＩのテストデータを記憶するテストデータ記憶装置６と、実行コードと、テストデータに基づいて、システムＬＳＩの動作シミュレーションを実行して、メンバ変数の総生存時間を算出し、動的解析結果として出力する動的解析部７と、静的解析結果と動的解析結果に基づき、システムＬＳＩの記憶コストを算出する記憶コスト算出部９と、を備える。【選択図】        図１
2005275967.tif 000002
【特許請求の範囲】
【請求項１】
システムＬＳＩのモジュール仕様及びモジュール動作を指定するソースコードを記憶するソースコード記憶装置と、
前記ソースコード記憶装置からソースコードを読み出し、コンパイルして実行コードを実行コード記憶装置に記憶するコンパイラと、
前記ソースコード記憶装置からソースコードを読み出し、記述されているメンバ変数のサイズを算出し、静的解析結果として出力する静的解析部と、
前記システムＬＳＩのテストデータを記憶するテストデータ記憶装置と、
前記実行コード記憶装置から読み出した実行コードと、前記テストデータ記憶装置から読み出したテストデータに基づいて、システムＬＳＩの動作シミュレーションを実行して、メンバ変数の総生存時間を算出し、動的解析結果として出力する動的解析部と、
前記静的解析結果と前記動的解析結果に基づき、システムＬＳＩの記憶コストを算出する記憶コスト算出部と、
を備えることを特徴とするシステムＬＳＩの設計支援システム。
【請求項２】
前記ソースコード記憶装置、コンパイラ、静的解析部、動的解析部、及び記憶コスト算出部を制御し、システムＬＳＩの記憶コストを算出するように制御する制御装置をさらに備えることを特徴とする請求項１に記載のシステムＬＳＩの設計支援システム。
【請求項３】
記憶コスト算出部が、静的解析部からの静的解析結果と動的解析部からの動的解析結果に基づいて、システムＬＳＩのモジュール仕様及びモジュール動作を指定するクラスのメンバ変数のサイズとその生存時間の積から、クラスのメンバ変数の記憶コストを算出し、総記憶コストに加算するメンバ変数コスト算出工程と、
前記記憶コスト算出部が、前記静的解析部からの静的解析結果と前記動的解析部からの動的解析結果に基づいて、前記システムＬＳＩのモジュール仕様及びモジュール動作を指定するクラスのメンバ関数に定義されているすべての一時変数のサイズと総生存時間の積から一時変数の記憶コストを算出し、前記総記憶コストに加算する一時変数コスト算出工程と、
前記記憶コスト算出部が前記総記憶コストを制御装置へ出力する総記憶コスト出力工程と、
を備えることを特徴とするシステムＬＳＩの設計支援方法。
【請求項４】
前記メンバ変数コスト算出工程は、前記静的解析部が出力した関数の内部で定義される一時変数のサイズと前記動的解析結果で得られた関数の実行時間とを乗じることを特徴とする請求項３に記載のシステムＬＳＩの設計支援方法。
【請求項５】
前記メンバ変数コスト算出工程は、ソースコード記憶装置から読み出したオブジェクト指向言語で記述したソースコードを前記静的解析部が解析し出力した各メンバ関数の内部で定義される一時変数のサイズと前記動的解析結果から得られた各メンバ関数の実行時間とを乗じることを特徴とする請求項３に記載のシステムＬＳＩの設計支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、システムＬＳＩの設計支援システム及び設計支援方法に関し、特に、ＥＤＡ（Ｅｌｅｃｔｒｉｃ  Ｄｅｓｉｇｎ  Ａｕｔｏｍａｔｉｏｎ）による設計システムを用いて、システム・オン・チップのようなシステムＬＳＩの設計支援システム及び設計支援方法に関する。
【背景技術】
【０００２】
従来は、数万ゲート規模の半導体集積回路を製造する場合は、設計部門からＲＴＬ（Ｒｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ）データを製造部門に渡すだけで予定の納期までに期待通りに動作をする半導体集積回路を製造することができた。
【０００３】
また、数十万ゲート規模の半導体集積回路を設計する場合は、一般に、ＥＤＡツールの物理合成システムにより、抽象度の高い設計記述言語を用いてデジタルシステムを設計していた（特許文献１参照。）。
【０００４】
さらに、システム・オン・チップ（ＳｏＣ）は、ソフトウェアとハードウェアが密接に関連し、設計の難易度が増大するため、オブジェクト指向分析及びオブジェクト指向設計手法を用いて、ＳｏＣの要求定義からソフトウェアおよびハードウェアの設計工程を効率化する手法が提案されている（非特許文献１、参照。）。
【０００５】
しかしながら、半導体集積回路の設計ルールがさらに微細になると、新たな露光装置、ウエハへの機械的ストレス、材料の問題、及び製造プロセス全体の複雑性から、システムＬＳＩの歩留を向上させることが困難となることが多い。
【０００６】
また、設計者は、最先端技術がチップコストに見合うか疑問視し、チップの量産が成功するか否かと量産時のコストが、システムＬＳＩの設計システム及び設計方法に大きな影響を与えるようになった。
【０００７】
しかも、上述した特許文献１も非特許文献１も共に、システムＬＳＩの論理設計の良否を判定できる信頼性管理計画や品質測定法（メトリクス）が定義されていないので、マクロセルのような部品の利用状況に関する評価も実施していない。
【０００８】
さらに、システムＬＳＩの設計において、設計工程を進めるにしたがって、モジュールの並列性、設計制約、通信路の定義情報が付加された結果、初期のＬＳＩ仕様に合致しないシステムＬＳＩを生成し、設計の下流工程から上流工程に戻るような再設計する場合も多い。
【特許文献１】特開平１１−３３６７号公報（段落００５８、図１参照）
【非特許文献１】朱など、題名「ＵＭＬを用いたシステムレベル設計手法の提案」、ＤＡシンポジウム、２００２年、Ｐ４９
【発明の開示】
【発明が解決しようとする課題】
【０００９】
本発明は、システムＬＳＩの設計支援システム及び設計支援方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するために、本発明の第１の特徴は、例えば、システムＬＳＩのモジュール仕様及びモジュール動作を指定するソースコードを記憶するソースコード記憶装置と、
ソースコード記憶装置からソースコードを読み出し、コンパイルして実行コードを実行コード記憶装置に記憶するコンパイラと、ソースコード記憶装置からソースコードを読み出し、記述されているメンバ変数のサイズを算出し、静的解析結果として出力する静的解析部と、システムＬＳＩのテストデータを記憶するテストデータ記憶装置と、実行コード記憶装置から読み出した実行コードと、テストデータ記憶装置から読み出したテストデータに基づいて、システムＬＳＩの動作シミュレーションを実行して、メンバ変数の総生存時間を算出し、動的解析結果として出力する動的解析部と、静的解析結果と動的解析結果に基づき、システムＬＳＩの記憶コストを算出する記憶コスト算出部と、を備えるシステムＬＳＩの設計支援システムであることを要旨とする。
【００１１】
本発明の第２の特徴は、例えば、記憶コスト算出部が、静的解析部からの静的解析結果と動的解析部からの動的解析結果に基づいて、システムＬＳＩのモジュール仕様及びモジュール動作を指定するクラスのメンバ変数のサイズとその生存時間の積から、クラスのメンバ変数の記憶コストを算出し、総記憶コストに加算するメンバ変数コスト算出工程と、記憶コスト算出部が、静的解析部からの静的解析結果と動的解析部からの動的解析結果に基づいて、システムＬＳＩのモジュール仕様及びモジュール動作を指定するクラスのメンバ関数に定義されているすべての一時変数のサイズと総生存時間の積から一時変数の記憶コストを算出し、総記憶コストに加算する一時変数コスト算出工程と、記憶コスト算出部が総記憶コストを制御装置へ出力する総記憶コスト出力工程と、を備えるシステムＬＳＩの設計支援方法であることを要旨とする。
【発明の効果】
【００１２】
本発明は、システムＬＳＩの設計支援システム及び設計支援方法を提供することができる。
【発明を実施するための最良の形態】
【００１３】
（第１の実施の形態）
図１は、本発明の第１の実施形態に係るシステムＬＳＩの設計支援システム１０２（以下、「設計支援システム」と略記する）のブロック図である。
【００１４】
設計支援システム１０２は、設計支援システム１０２全体を制御する制御装置１０と、この制御装置１０に各々接続するソースコード記憶装置１と、静的解析部２と、コンパイラ４と、実行コード記憶装置５と、動的解析部７と、記憶コスト算出部９と、入出力部１７と、を備えている。
【００１５】
ここで、入出力部１７の形態としては、入力手段としてのキーボード、マウスポインタ、テンキー、タッチパネルを採用することができ、出力手段としてのディスプレイ装置や印刷装置を採用することができる。
【００１６】
また、動的解析部７に接続しシミュレーション用のテストデータを記憶するテストデータ記憶装置６と、記憶コスト算出部９から出力する記憶コスト情報を記憶するコンフィグレーション情報記憶装置３１をさらに備えている。
【００１７】
ソースコード記憶装置１は、設計評価の対象となるシミュレーション可能なモジュールのソースコードを記憶する磁気ディスク、光学ディスクを用いることができる。例えば、ソースコードをシステムＣ言語などのオブジェクト指向言語で記述して記憶することができる。
【００１８】
静的解析部２は、制御装置１０からの指令でソースコード記憶装置１からソースコードを読み出し、静的解析手段を用いてソースコードを静的に解析し、ソースコードに含まれるクラスのメンバ変数のサイズを算出し、静的解析結果３として出力する。
【００１９】
例えば、制御装置１０からの指令で、メンバ変数や、メソッドや、メソッド中で読み出される変数や、メソッド中で変更される変数をリストアップし、静的解析結果３として出力し、記憶コスト算出部９に送信する。
【００２０】
コンパイラ４は、制御装置１０からの指令によりソースコード記憶装置１から読み出したソースコードをコンパイルし、動的解析部７で実行可能な実行コードを生成し、実行コード記憶装置５へ保存する。
【００２１】
例えば、コンパイラ４は、制御装置１０からの指令でプロファイリング機能を用いて、ソースコードに対して動的解析用の情報埋め込み処理を施し、動的解析が実行可能な実行ファイルを生成する。
【００２２】
動的解析部７は、制御装置１０からの指令で、実行コード記憶装置から読み出した実行コードと、テストデータ記憶装置６から読み出したテストデータに基づいて、システムＬＳＩの動作シミュレーションを実行して、動的解析手段でメンバ変数の総生存時間を算出し、動的解析結果８として出力し、記憶コスト算出部９へ送信する。
【００２３】
記憶コスト算出部９は、制御装置１０からの指令で、静的解析結果３及び動的解析結果８に基づき、記憶コスト算出手段を用いて、システムＬＳＩの設計の良否を判断する記憶コストを算出し、制御装置１０を経由して記憶コスト情報を入出力部１７へ出力させる。
【００２４】
記憶コスト算出部９は、記憶コスト情報をコンフィグレーション情報記憶装置３１に保存させることもできる。
【００２５】
第１の実施形態では、さらにソースコードをソースコード記憶装置１に複数記憶させ、各ソースコードに対応する記憶コストを記憶コスト算出部９で算出してから、最小記憶コストのシステムＬＳＩを選択することもできる。
【００２６】
動的解析部７は、テストデータ記憶装置６から複数のテストデータを読み出し、各テストデータに対応したメンバ変数の総生存時間を算出し、複数の動的解析結果８として記憶コスト算出部９へ出力し、記憶コスト算出手段を用いて最小記憶コストを算出させることもできる。
【００２７】
第１の実施形態の設計支援システム１０２を用いて、ソースコード記憶装置１に記憶したモジュールの仕様及び動作を指定するソースコードを読み出し、記述されているメンバ変数のサイズを静的解析部２で算出し、静的解析結果３として出力する。
【００２８】
次に、コンパイラ４は、ソースコード記憶装置１からソースコードを読み出し、コンパイルして、動的解析部７で実行可能な実行コードを生成する。
【００２９】
引き続き、テストデータ記憶装置６からシミュレーション用のテストデータを読み出し、動的解析部７で実行コードをシミュレーションし、メンバ変数の総生存時間を算出し、動的解析結果８として出力する。
【００３０】
さらに、記憶コスト算出部９が静的解析結果３及び動的解析結果８を合成し、記憶コストを算出するように構成することもできる。
【００３１】
図２は、本発明の第１の実施形態に用いる静的解析結果のデータ構造図である。静的解析結果のデータ構造は、クラス名１１、メンバ名１２、種別１３、参照するリソース１４、変更するリソース１５、一時変数１６の各データにより構成する。
【００３２】
図１のブロック図及び図２のデータ構造を参照して、システムＬＳＩの設計支援方法を説明する。システムＬＳＩ設計とは、所望のシステム仕様に合致するように、入手可能なモジュール（例えば、部品）を設計支援システム１０２上で組み合わせることを意味する。
【００３３】
例えば、論理合成ツールが回路ライブラリ中のマクロセルの組み合わせを入出力部１７で決定し、制御装置１０を通してソースコード記憶装置１に保存することでシステムＬＳＩを設計することができる。
【００３４】
静的解析部２は、静的解析の対象となるソースコードのオブジェクト指向言語を解析する。このソースコード全体は複数のクラス（例えば、「Ａ」、「Ｂ」）から構成されている。オブジェクト指向言語を用いたモジュール設計は、各クラスの設計を別体のコンピュータシステムで処理してもよく、設計支援システム１０２で処理してもよい。
【００３５】
静的解析部２は、各クラス名１１毎にそのクラスに定義されているメンバ名１２（例えば、「ａ」、「ｓｅｔ＿ａ」、「ｒｅｔ＿ｂ」、「ｂ」、「ｓｅｔ＿ｂ」）とその種別１３（例えば、「変数」、「関数」）をリストアップする。
【００３６】
また、関数については、関数内部で読み出し参照するリソース１４（例えば、「ｘ．ｓｏｕｃｅ＿ｏｆ＿ａ」、「Ａ」、「Ｚ」）をリストアップし、関数内部で変更するリソース１５（例えば、「ａ」、「無し」、「無し」）、一時変数１６（例えば、「ｔｍｐ」、「無し」、「ｔｍｐ」）をリストアップする静的解析結果３を算出し静的解析部２内部に記憶する。
【００３７】
図３は、第１の実施形態に用いる動的解析結果のデータ構造図である。動的解析結果は、イベント発生時刻１８、関数名１９、及び発生イベント種別２０を含むように構成し、記憶コストが次の如く定義される。
【００３８】
図１のブロック図及び図３のデータ構造を参照して、システムＬＳＩの設計支援方法を説明する。
【００３９】
動的解析部７は、特定の関数スコープの外部に存在する変数を、所定の変数（例えば、「ａ」）に対して、最初に代入又は変更の操作を行う関数（例えば、「Ａ．ｓｅｔ＿ａ」）の起動時刻（例えば、「ｓｔａｒｔ」）を生存開始時刻とする。
【００４０】
例えば、図中のイベント発生時刻１８の「１５」の数字で示すマシンサイクル値に対応するグローバル変数や或るクラスのメンバ変数が該当する。
【００４１】
引き続き、動的解析部７は、最後に読み出して参照する操作を行う関数（例えば、「Ａ．ｓｅｔ＿ａ」）の終了時刻（例えば、「ｅｎｄ」）を生存終了時刻とする。例えば、図中のイベント発生時刻１８の「２０」の数字で示すマシンサイクル値に対応するグローバル変数や或るクラスのメンバ変数が該当する。
【００４２】
動的解析部７は、生存終了時刻と生存開始時刻の差を生存時間と定義し、初期値が与えられている場合は、グローバル変数においては、関数名１９が「ｍａｉｎ」関数若しくはこれに相当する関数のイベント発生時刻１８を生存開始時刻と算出する。
【００４３】
動的解析部７は、クラスのメンバ変数において、そのクラスのコンストラクタの起動時刻を生存開始時刻とする。また、オブジェクト指向言語で動的にインスタンスの生成、消滅を考慮する場合、初期値の設定がない場合においても、コンストラクタの起動時点で生存時間を算出する。
【００４４】
さらに、動的解析部７は、そのクラスのメンバ変数の総生存時間に加算し、生存開始時間のクリア処理を実行する。なお、一時変数の場合は、その一時変数が定義されている関数の起動時刻から終了時刻までを生存時間とする。
【００４５】
動的解析部７は、個々の変数のサイズと総生存時間を掛け合わせて記憶コストを算出する。例えば、個々のクラスの記憶コストは、次の式１から式３のように定義される。
【数１】
2005275967.tif 000003
【００４６】
式１は、記憶コスト算出部９が実行するクラスの記憶コスト「ＣＭＣ」の算出式である。記憶コスト「ＣＭＣ」は、すべてのメンバ変数のサイズ「ＭＳ」とその総生存時間「ＭＴ」とを乗じた第１の積の総和と、メンバ関数の実行時間「ＭＥ」の総和とメンバ関数の一時変数のサイズ「ＴＳ」の総和とを乗じた第２の積の総和と、を加算して算出する。
【００４７】
動的解析部７は、「１」から「ｉ」回目までのメンバ変数のサイズ「ＭＳ」と「１」から「ｉ」回目までの総生存時間「ＭＴ」とを乗じて第１の積の総和を算出する。
【００４８】
動的解析部７は、「１」から「ｊ」回目毎にメンバ関数の実行時間「ＭＥ」を「１」から「ｋ」回目までの積を総和し、「１」から「ｊ」回目毎にメンバ関数の一時変数のサイズ「ＴＳ」を「１」から「ｌ」回目までの総和と、を乗じて第２の積の総和を算出する。
【００４９】
記憶コスト算出部９は、第１の積の総和と第２の積の総和とを加算してクラスの記憶コストを算出する。
【００５０】
式２は、記憶コスト算出部９が実行するモデルの記憶コスト「ＭＭＣ」の算出式である。モデルの記憶コスト「ＭＭＣ」は、式１で算出された個々のクラスの記憶コスト「ＣＭＣ」の積の総和と、グローバル変数「ＧＳ」と生存時間「ＧＴ」とを乗じた第３の積の総和と、を加算して算出する。
【００５１】
記憶コスト算出部９は、「１」から「ｉ」回目までのクラスの記憶コスト「ＣＭＣ」の積の総和と、「１」から「ｊ」回目までのグローバル変数のサイズ「ＧＳ」と生存時間「ＧＴ」とを乗じたものの総和を算出し、さらに「ＣＭＣ」の積の総和と加算したモデル全体の記憶コストを算出する。
【００５２】
式３は、記憶コスト算出部９が実行する複数のシミュレーション結果から算出するクラスの記憶コスト「ＳＭＣ」の算出式である。複数クラスの記憶コスト「ＳＭＣ」は、「１」から「ｉ」回目までの各シミュレーションへの重み「Ｗ」と、「１」から「ｉ」回目までのシミュレーションから得られた記憶コスト「ＳＣ」とを乗じた積の総和である。
【００５３】
先ず、動的解析部７は、テストデータ記憶装置６からシミュレーション用のテストデータを読み出し、異なる複数のシミュレーションを実行してから、メンバ変数の総生存時間「ＭＴ」を算出し、動的解析結果８として記憶コスト算出部９へ送信する。
【００５４】
記憶コスト算出部９は、「１」から「ｉ」回目までの各シミュレーションへの重み「Ｗ」と、この「１」から「ｉ」回毎のシミュレーション結果「ＳＣ」とを乗じた積の総和を複数クラスの記憶コスト「ＳＭＣ」として算出する。
【００５５】
記憶コスト算出部９は、動的解析部７で得た複数のシミュレーション結果から個々の記憶コストを総合して判断するため、式３のように定義する評価関数を利用することができる。
【００５６】
記憶コスト算出部９は、「１」から「ｉ」回目までの各シミュレーション結果から得られた記憶コストに付加する重み「Ｗ」について、動的解析部７が「１」から「ｉ」回目までの各シミュレーションを実行した時のテストデータにより、発生させる事象の発生確率や、事象の発生時のＬＳＩに及ぼす性能面のリスクなどから「１」から「ｉ」回目までの「Ｗ」を算出してもよいことは勿論である。
【００５７】
また、ここでは評価関数として重み付き平均値を用いて例示したが、他の算出方法を用いても記憶コストを算出することができる。
【００５８】
図４から図８は、本発明の第１の実施の形態に用いる記憶コスト算出部９の動作フローを示すフローチャートである。設計支援システムは、システムＣなどのオブジェクト指向言語で記述されたプログラムを演算処理する。
【００５９】
オブジェクト指向言語のプログラムは複数のクラスから構成し、マクロセルのようなモジュールの仕様及び動作を定義することができる。
【００６０】
但し、本発明は、オブジェクト指向言語のプログラムに限定されるものではなく、例えば、非オブジェクト指向言語で記述されたプログラムを用いても、手続き型言語であれば図示した設計フローを適用することができる。
【００６１】
図１のブロック図及び図４のフローチャートを参照して、記憶コスト算出部９の動作を説明する。動的解析結果読込処理ステップＳＴ２１（以下、ステップを「ＳＴ」と略記する）は、記憶コスト算出部９が動的解析結果８を動的解析部７からすべて読み終わるまで、動的解析結果読取コードを論理「０」のようなコードとして記憶し、下流の処理を繰り返すように制御する。
【００６２】
一方、記憶コスト算出部９が動的解析結果８をすべて読み終わった段階で、動的解析結果読取コードを論理「０」から論理「１」に変更し、下流の判定処理ＳＴ２２へ移行させるように制御する。
【００６３】
記憶コスト算出部９は、判定処理ＳＴ２２を実行し、動的解析結果読取コードが論理「０」か論理「１」か否かを判定する。判定結果が是（ＹＥＳ）のときは、処理を節点３０「Ｅ」へ移行させる。一方、判定結果が非（ＮＯ）の場合は、処理をレコード読込処理ＳＴ２３へ分岐させる。
【００６４】
記憶コスト算出部９は、レコード読込処理ＳＴ２３を実行し、動的解析結果８から１レコード分のデータを読み込み、次のイベント種別判定処理ＳＴ２４へ移行させる。
【００６５】
記憶コスト算出部９は、イベント種別判定処理ＳＴ２４を実行し、読込んだ１レコードの種別を判定し、例えば、イベント種別が「関数開始」のときは、論理「０」をセットし、イベント種別が「関数終了」の場合は、論理「１」をセットする。
【００６６】
引き続き、記憶コスト算出部９は、関数分岐処理ＳＴ２５を実行し、イベント種別に対応する論理値に基づき、関数開始を示す論理「０」のときは処理を節点２６「Ａ」へ分岐させ、関数終了を示す論理「１」の場合は処理を節点２８「Ｃ」へ分岐させる。
【００６７】
図１のブロック図及び図５のフローチャートを参照して、記憶コスト算出部９の動作を説明する。関数開始の処理の場合は、記憶コスト算出部９が静的解析結果３を読み出し参照し、この関数内部で定義されている一時変数およびこの関数で変更したグローバル変数およびメンバ変数の生存開始時刻を内部に登録する。
【００６８】
記憶コスト算出部９は、節点２６「Ａ」から処理を引き継ぐメイン関数の判定処理ＳＴ３１を実行し、イベントが開始されている関数がメイン関数であるか否かを判定する。
【００６９】
記憶コスト算出部９は、判定結果が是（ＹＥＳ）のときは処理をＳＴ３２へ分岐させ、判定結果が非（ＮＯ）の場合は処理ＳＴ３５へ分岐させる。
【００７０】
記憶コスト算出部９は、処理ＳＴ３２を実行し、メイン関数が起動であり初期値が与えられているグローバル変数の数だけ、先損開始時刻登録処理ＳＴ３４を繰り返すように所定のフラグ値を論理「０」又は論理「１」にセットし、処理をグローバル変数判定処理ＳＴ３３へ移行させる。
【００７１】
記憶コスト算出部９は、先損開始時刻登録処理ＳＴ３４を実行し、メイン関数の開始時刻をクラスのグローバル変数の「先損開始時刻」として内部に登録する。
【００７２】
一方、記憶コスト算出部９が、処理ＳＴ３１でメイン関数の起動でないと判定（ＮＯ）したときは、処理ＳＴ３５へ分岐し、クラスのコンストラクタの起動であるか否かを判定する。
【００７３】
記憶コスト算出部９は、コンストラクタの起動であると判定（ＹＥＳ）したときは、コンストラクタが定義されているクラスの中の初期値が与えられているメンバ変数の数を終了判定ＳＴ３７で判定しながら、処理ＳＴ３８を繰り返す。
【００７４】
記憶コスト算出部９は、処理ＳＴ３８を実行し、コンストラクタの開始時刻をクラスのメンバ変数の「生存開始時刻」として内部に登録し、処理ＳＴ３６へ復帰する。
【００７５】
記憶コスト算出部９は、処理ＳＴ３５でコンストラクタの起動でないと判定（ＮＯ）したときは、処理ＳＴ３９へ分岐し、静的解析結果から開始したメンバ関数を探索し、処理ＳＴ４０へ移行する。
【００７６】
記憶コスト算出部９は、処理ＳＴ４０でメンバ関数が発見できない場合（ＹＥＳ）は、システムＬＳＩの設計支援処理を「エラー終了（ＳＴ４１）」として終了させる。一方、メンバ関数を発見（ＮＯ）したときは処理ＳＴ４２へ進む。
【００７７】
記憶コスト算出部９は、処理ＳＴ４２を実行し、クラスのメンバ関数内で変更されるメンバ変数およびグローバル変数の数を処理ＳＴ４３で判定しながら、すべてのグローバル変数を処理するまで処理ＳＴ４４、並びに処理ＳＴ４６を繰り返す。
【００７８】
記憶コスト算出部９は、処理ＳＴ４４を実行し、クラスの変数に対して、既に「生存開始時刻」が登録されているか検証し、登録済みの場合は判定処理ＳＴ４５を経て処理ＳＴ４２へ復帰する。一方、未登録のときは処理ＳＴ４６を経て処理ＳＴ４２へ復帰する。
【００７９】
なお、処理ＳＴ４６は、クラスの関数の起動時刻をクラスの変数の「生存開始時刻」として記憶コスト算出部９が内部に登録する処理である。
【００８０】
記憶コスト算出部９は、すべてのメンバ変数およびグローバル変数を処理したことを処理ＳＴ４３で判定したときは、処理ＳＴ４７へ分岐し、メンバ関数内で定義されている一時変数の数を処理ＳＴ４８で判定（ＮＯ）しながら、処理ＳＴ４９の実行を繰り返す。
【００８１】
記憶コスト算出部９は、処理ＳＴ４９を実行し、クラスの関数の開始時刻をクラスの一時変数の「生存開始時刻」として内部に記録し、メンバ関数内で定義されている一時変数のすべてを処理するまで処理ＳＴ４７へ復帰する。
【００８２】
一方、記憶コスト算出部９は、一時変数のすべてを処理したときは、処理ＳＴ４８で終了判定（ＹＥＳ）をして節点２７へ処理をジャンプさせ処理ＳＴ２１（図４参照）へ復帰する。
【００８３】
図１のブロック図及び図６のフローチャートを参照して、記憶コスト算出部９の動作を説明する。図４の処理ＳＴ２５で関数の終了と判定された場合は、記憶コスト算出部９が、処理を節点２８「Ｃ」を経て処理ＳＴ５１へ移行させる。
【００８４】
記憶コスト算出部９は、静的解析結果３から終了した関数を検索し、処理ＳＴ５２で関数が発見できないと判定（ＹＥＳ）したときは、終了処理ＳＴ５３へ分岐し「エラー処理」として設計支援処理を終了させる。関数が発見できた場合（ＮＯ）は、処理ＳＴ５４へ分岐する。
【００８５】
記憶コスト算出部９は、処理ＳＴ５４を実行し、関数がデストラクタであるか否かを判定する。判定結果が否（ＮＯ）のときは、処理ＳＴ５９へ分岐し、処理ＳＴ６０、ＳＴ６１、ＳＴ６２、ＳＴ６３を繰り返す。
【００８６】
記憶コスト算出部９は、関数内で参照されるメンバ関数およびグローバル変数の数だけ、関数の終了時刻をクラスの変数の「生存終了時刻」として登録（ＳＴ６１）し、クラスのメンバ変数の「生存終了時刻」と「生存Ｊ開始時刻」の差からクラスの変数の「生存時間」を算出する（ＳＴ６２）。
【００８７】
また、記憶コスト算出部９は、処理ＳＴ６３で変数の生存時間が算出できない判定結果（ＹＥＳ）を得たときは、処理をエラー終了処理ＳＴ６４へ分岐させ設計支援処理を終了させる。
【００８８】
このように、記憶コスト算出部９は、関数の内部で定義されている一時変数および当該関数で読み出し参照を行っているグローバル変数およびメンバ変数の生存終了時刻を記録し、生存開始時刻との差から個々の変数の生存時間を算出する。
【００８９】
記憶コスト算出部９は、処理ＳＴ６０の判定処理で、メンバ変数およびグローバル変数のすべてを処理したと判定（ＹＥＳ）したときは、処理ＳＴ６５へ分岐し、関数内で定義されている一時変数の数だけ、算出された生存時間を加算して、一時変数の総生存時間を算出する。
【００９０】
例えば、記憶コスト算出部９は、処理ＳＴ６７でイベント発生時刻をクラスの一時変数の「生存終了時刻」として内部に記録し、処理ＳＴ６８でクラスの一時変数の「生存終了時刻」と「生存開始時刻」との差からクラスの一時変数の「生存時間」を算出する。
【００９１】
また、記憶コスト算出部９は、処理ＳＴ６９で変数の生存時間が算出できない判定結果（ＹＥＳ）を得たときは、処理をエラー終了処理ＳＴ７０へ分岐させ設計支援処理を終了させる。
【００９２】
記憶コスト算出部９は、処理ＳＴ７１で算出された「生存時間」をクラスの一時変数の「総生存時間」に加算し、処理ＳＴ６６で一時変数のすべてが処理されたと判定されるまで、処理ＳＴ６７、ＳＴ６８、ＳＴ６９、ＳＴ７１を繰り返す。
【００９３】
なお、記憶コスト算出部９は、処理ＳＴ６６で一時変数のすべてが処理されたと判定（ＹＥＳ）された場合は、処理を節点２９へジャンプさせ図４の処理ＳＴ２１へ復帰させる。
【００９４】
さらに、記憶コスト算出部９は、終了した関数がデストラクタであった場合は、判定処理ＳＴ５４で是（ＹＥＳ）判定を行い、処理ＳＴ５５、ＳＴ５６、ＳＴ５７を経て、デストラクタが定義されているクラス内部で定義されているメンバ変数の生存時間を加算（ＳＴ５８）し、クラスのメンバ変数の総生存時間を算出する。
【００９５】
記憶コスト算出部９は、処理ＳＴ５５を実行し、デストラクタが定義されているクラスの各メンバ変数の数だけＳＴ５６、ＳＴ５７、ＳＴ５８を繰り返す。
【００９６】
記憶コスト算出部９は、処理ＳＴ５６で、各メンバ変数の数だけ処理が完了しているか否かを判定し、完了している場合（ＹＥＳ）は、節点２９「Ｄ」へ処理をジャンプさせ、図４の処理ＳＴ２１へ遷移させる。
【００９７】
また、記憶コスト算出部９は、処理ＳＴ５７で、クラスのメンバ変数の生存開始時刻をクリア（例えば、未登録の状態に）する。
【００９８】
図１のブロック図及び図７のフローチャートを参照して、記憶コスト算出部９の動作を説明する。記憶コスト算出部９は、動的解析結果８のすべてのレコードを読み終わった段階（図４のＳＴ２２参照）で、処理を節点３０「Ｅ」にジャンプさせ、総記憶コストの算出を開始する（ＳＴ７２）。
【００９９】
まず、モデルを構成するすべてのクラスについて、上述した式１に基づいて各クラスの記憶コストを算出する。
【０１００】
記憶コスト算出部９は、処理ＳＴ７２を実行し、すべてのクラスについて処理ＳＴ７３、ＳＴ７４、ＳＴ７５、ＳＴ７６、ＳＴ７７を繰り返し、処理ＳＴ７３ですべてのクラスについてのコスト算出処理が終了と判定（ＹＥＳ）された段階で処理を節点５０「Ｆ」へジャンプさせる。
【０１０１】
一方、コスト算出処理が終了していないと判定（ＮＯ）された場合は、処理ＳＴ７４へ分岐する。
【０１０２】
記憶コスト算出部９は、処理ＳＴ７４を実行し、クラスのすべてのメンバ変数のコスト算出処理を繰り返し、処理ＳＴ７５でクラスのすべてのメンバ変数のコスト算出処理が終了と判定（ＹＥＳ）された段階で処理ＳＴ７８へ分岐する。
【０１０３】
一方、コスト算出処理が終了していないと判定（ＮＯ）された場合は、処理ＳＴ７６へ分岐する。
【０１０４】
記憶コスト算出部９は、処理ＳＴ７６を実行し、クラスのメンバ変数のサイズとその「生存時間」の積から、クラスのメンバ変数の「記憶コスト」を算出し、処理ＳＴ７７でクラスのメンバ変数の「記憶コスト」を「総記憶コスト」に加算する。
【０１０５】
記憶コスト算出部９は、処理ＳＴ７４に復帰し、クラスのすべてのメンバ変数のコスト算出処理が終了したか否かを検証する。
【０１０６】
記憶コスト算出部９は、クラスのすべてのメンバ変数のコスト算出処理を終了させた段階で、処理ＳＴ７８へ分岐し、クラスのすべてのクラスのすべてのメンバ関数のコスト算出処理が終了したか否かを検証する。
【０１０７】
コスト算出処理を終了した場合は、記憶コスト算出部９が処理ＳＴ７９の判定結果（ＹＥＳ）に基づき、クラスの「総記憶コスト」の情報を制御装置１０経由で入出力部１７へ出力する。
【０１０８】
一方、記憶コスト算出部９は、処理ＳＴ７９でコスト算出処理が終了していないと判定（ＮＯ）された場合は、処理ＳＴ８１へ分岐し、クラスのメンバ関数に定義されているすべての一時変数についてコスト算出処理が終了するまで処理ＳＴ８２、ＳＴ８３、ＳＴ８４を繰り返す。
【０１０９】
記憶コスト算出部９は、処理ＳＴ８２ですべての一時変数についてコスト算出処理が終了していると判定（ＹＥＳ）した場合は、処理ＳＴ７８へ分岐しすべてのメンバ関数のコスト算出処理が終了しているか否かを検証する。
【０１１０】
一方、記憶コスト算出部９は、処理ＳＴ８２でコスト算出処理が終了していないと判定（ＮＯ）された場合は、処理ＳＴ８３へ分岐し、メンバ関数に定義されている一時変数のサイズと「総生存時間」の積から一時変数の「記憶コスト」を算出する。
【０１１１】
引き続き、記憶コスト算出部９は、一時変数の「記憶コスト」を「総記憶コスト」に加算し、処理ＳＴ８１へ復帰する。
【０１１２】
図１のブロック図及び図８のフローチャートを参照して、記憶コスト算出部９の動作を説明する。記憶コスト算出部９は、クラスの記憶コスト算出処理を終了させた段階（図７の処理ＳＴ７３のＹＥＳ判定）で、処理を節点５０「Ｆ」にジャンプさせ、すべてのグローバル変数の記憶コスト算出処理を開始する（ＳＴ８５）。
【０１１３】
記憶コスト算出部９は、処理ＳＴ８６ですべてのグローバル変数についての記憶コスト算出処理が終了したと判定（ＹＥＳ）された段階で処理ＳＴ８９へ分岐し、式２に基づいてモデル全体の「総記憶コスト」の情報を制御装置１０経由で入出力部１７へ出力し、記憶コスト算出処理を終了させる。
【０１１４】
一方、記憶コスト算出部９は、処理ＳＴ８２でコスト算出処理が終了していないと判定（ＮＯ）された場合は、処理ＳＴ８３へ分岐し、グローバル変数のサイズと「生存期間」の積からグローバル変数の「記憶コスト」を算出する。
【０１１５】
さらに、記憶コスト算出部９は、処理ＳＴ８８でグローバル変数の「記憶コスト」を「総記憶コスト」に加算してから、処理ＳＴ８５へ復帰する。
【０１１６】
（第２の実施の形態）
図９は、本発明の第２の実施形態に係るシステムＬＳＩの設計支援システムの記憶コスト算出処理を示す図である。
【０１１７】
図１０は、本発明の第２の実施形態に係るシステムＬＳＩの設計支援フローを示すフローチャートである。
【０１１８】
図１、図９、並びに図１０のフローチャートを参照して、第２の実施形態の設計支援フローを説明する。
【０１１９】
ソースコード記憶装置１は、図９（ａ）で示すモジュールとしてのクラスソース９１と、図９（ｂ）で示すクラスサム９２の２種類のソースコードを記憶している。クラスソース９１は、ソースコードの中で定義されるプライベート（ｐｒｉｖａｔｅ）なメンバ変数「ａ」、「ｂ」、「ｃ」、「ｄ」を有する。
【０１２０】
テストデータ記憶装置６は、シミュレーション用のテストデータとして、動的解析部７でメンバ変数「ａ」、「ｂ」、「ｃ」、「ｄ」の総和を、クラスソース９１と非同期に起動されるクラスサム９２を用いて算出するテストデータを記憶する。
【０１２１】
動的解析部７は、動的解析手段を動作させメンバ変数「ａ」、「ｂ」、「ｃ」、「ｄ」の値を設定するイベントを非同期に発生させ、かつ同時には起動しないように制御する。
【０１２２】
動的解析部７は、テストデータ記憶装置６からクラスソース９１のデータを読み出して、メンバ変数「ａ」、「ｂ」、「ｃ」、「ｄ」の値を設定し、内部に保存する。同様に、クラスサム９２を読み出して内部に保存する。
【０１２３】
動的解析部７は、非同期に起動されたクラスサム側から個々のクラスに対してポーリングを実行し、メンバ変数「ａ」、「ｂ」、「ｃ」、「ｄ」の値を取得しながら、合算するというシミュレーションを実行する。
【０１２４】
動的解析部７は、例えば、メンバ変数「ａ」に関連するクラスソース９１をポーリングし「ｓｅｔａ」と記述されたクラスの起動時刻９３と終了時刻を記録する。第２の実施形態では、図９（ｃ）に起動時刻「１０」と終了時刻「１０５」を例示した。
【０１２５】
同様に、動的解析部７は、メンバ変数「ｂ」に関連するクラスソース９１をポーリングし「ｓｅｔｂ」と記述されたクラスの起動時刻９４と終了時刻を記録する。第２の実施形態では、図９（ｃ）に起動時刻「２０」と終了時刻「１１０」を例示した。
【０１２６】
同様に、動的解析部７は、メンバ変数「ｃ」に関連するクラスソース９１をポーリングし「ｓｅｔｃ」と記述されたクラスの起動時刻９５と終了時刻を記録する。第２の実施形態では、図９（ｃ）に起動時刻「４０」と終了時刻「１１５」を例示した。
【０１２７】
同様に、動的解析部７は、メンバ変数「ｄ」に関連するクラスソース９１をポーリングし「ｓｅｔｄ」と記述されたクラスの起動時刻９６と終了時刻を記録する。第２の実施形態では、図９（ｃ）に起動時刻「３０」と終了時刻「１２０」を例示した。
【０１２８】
動的解析部７は、クラスソース９１の各メンバ変数の終了時間に、内部に保存したクラスサム９２を起動させ、クラスのメンバ変数の生存時間を算出する。例えば、図９（ｃ）に示すメンバ変数「ａ」に対して起動時刻９８の「１０５」に図９（ｂ）にクラスサム９２の「ｒｅｔａ」を起動させる。
【０１２９】
同様に、動的解析部７は、図９（ｃ）のメンバ変数「ｂ」に対して起動時刻９８の「１１０」に図９（ｂ）に示すクラスサム９２の「ｒｅｔｂ」を起動させ、図９（ｃ）のメンバ変数「ｃ」に対して起動時刻９８の「１１５」に図９（ｂ）に示すクラスサム９２の「ｒｅｔｃ」を起動させる。
【０１３０】
さらに、動的解析部７は、図９（ｃ）のメンバ変数「ｄ」に対して起動時刻９８の「１２０」に図９（ｂ）に示すクラスサム９２の「ｒｅｔｄ」を起動させる。
【０１３１】
動的解析部７は、クラスサム９２の実行をすべて完了させる。例えば、メンバ変数「ａ」、「ｂ」、「ｃ」、「ｄ」の各変数の生存時間の総和の算出終了時間は、図９（ｃ）に示すｓｕｍ被参照時刻９９の「１３０」である。
【０１３２】
動的解析部７は、クラスサム９２のメンバ変数及びクラスサムの変数の生存時間の総和を算出処理し、動的解析結果８として記憶コスト算出部９へ出力する。
【０１３３】
記憶コスト算出部９は、開始処理により記憶コスト算出手段を動作させ、「総記憶コスト」の値を「０」にし、動的解析結果８に対してポーリング処理ＳＴ１１０を実行する。
【０１３４】
記憶コスト算出部９は、ポーリング処理ＳＴ１１０で、動的解析結果８からすべてのメンバ変数について以下の処理を繰り返すように処理ＳＴ１１１へ移行する。
【０１３５】
記憶コスト算出部９は、処理ＳＴ１１１で、すべてのメンバ変数の記憶コストを算出したか否かを判定する。記憶コスト算出がすべて終了していないと判定（ＮＯ）された場合は、処理ＳＴ１１２へ分岐し、記憶コスト算出部９が、クラスのメンバ変数のサイズとその「生存時間」の積から、クラスのメンバ変数の「記憶コスト」を算出し、処理ＳＴ１１３に移行してクラスのメンバ変数の「記憶コスト」を「総記憶コスト」に加算する。
【０１３６】
記憶コスト算出部９は、処理を処理ＳＴ１１０に復帰させ、クラスのすべてのメンバ変数のコスト算出処理が終了したか否かを検証する。
【０１３７】
記憶コスト算出部９は、処理ＳＴ１１２で、メンバ変数を４バイトのサイズで構成した場合に、変数「ａ」の生存時間「９５」に４バイトを乗じた値を記憶コスト「３８０」として算出する。
【０１３８】
なお、変数の生存時間はシステムＬＳＩのマシンサイクルと同一又は比例した単位を用いることができるが、第２の実施形態では各クラスのメンバ変数の生存時間の差異を相対的に示す数値を用いている。
【０１３９】
入出力部１７は、ディスプレイ画面又は印刷装置のプリント出力で、図９（ｃ）にハッチングで示した棒グラフを表示することができ、棒グラフの面積が記憶コストに比例して増大するため、システムＬＳＩの設計者は記憶コストを視覚的に把握することができる点で有利である。
【０１４０】
記憶コスト算出部９は、処理を処理ＳＴ１１３へ進ませ、変数「ａ」の記憶コスト「３８０」を総記憶コストへ加算し、処理ＳＴ１１０へ処理を復帰させる。
【０１４１】
記憶コスト算出部９は、処理ＳＴ１１１ですべてのメンバ変数が記憶コスト算出されていない判定結果（ＮＯ）を検出すると、処理ＳＴ１１２に進み変数「ｂ」の生存時間「９０」に４バイトを乗じた値を記憶コスト「３６０」として制御装置１０へ出力する。
【０１４２】
記憶コスト算出部９は、処理を処理ＳＴ１１３へ進ませ、変数「ｂ」の記憶コスト「３６０」を総記憶コストへ加算し、処理ＳＴ１１０へ処理を復帰させる。
【０１４３】
記憶コスト算出部９は、処理ＳＴ１１１ですべてのメンバ変数が記憶コスト算出されていない判定結果（ＮＯ）を検出すると、処理ＳＴ１１２に進み、変数「ｃ」の生存時間「７５」に４バイトを乗じた値を記憶コスト「３００」として制御装置１０へ出力する。
【０１４４】
記憶コスト算出部９は、処理を処理ＳＴ１１３へ進ませ、変数「ｃ」の記憶コスト「３００」を総記憶コストへ加算し、処理ＳＴ１１０へ処理を復帰させる。
【０１４５】
記憶コスト算出部９は、処理ＳＴ１１１ですべてのメンバ変数が記憶コスト算出されていない判定結果（ＮＯ）を検出すると、処理ＳＴ１１２に進み、変数「ｄ」の生存時間「９０」に４バイトを乗じた値を記憶コスト「３６０」として制御装置１０経由で入出力部１７へ出力する。
【０１４６】
記憶コスト算出部９は、処理を処理ＳＴ１１３へ進ませ、変数「ｄ」の記憶コスト「３６０」を総記憶コストへ加算し、処理ＳＴ１１０へ処理を復帰させる。
【０１４７】
例えば、メンバ変数「ａ」から「ｄ」のすべてをポーリングし記憶コスト算出が終了（ＹＥＳ）したときは、処理ＳＴ１１４へ分岐しクラスの総記憶コストを制御装置１０経由で入出力部１７に出力し処理を終了させる。
【０１４８】
記憶コスト算出部９は、処理ＳＴ１１１でメンバ変数「ａ」から「ｄ」のすべてをポーリングし、記憶コスト算出の終了判定（ＹＥＳ）を検出し、処理を処理ＳＴ１１４に分岐させ、ｓｕｍの変数の生存時間「２５」に４バイトを乗じた値を記憶コスト「１００」を総記憶コストに加算する。
【０１４９】
また、変数「ａ」から「ｄ」までの４つの変数の生存時間のサイクル数、サイズ、及びコストを次の表１に示した。
【表１】
2005275967.tif 000004
【０１５０】
第２の実施形態では記憶コスト算出部９が算出した各変数の記憶コストを総記憶コストへ加算するように説明したが、本発明はこの構成に限定するものではなく、各変数の記憶コストを制御装置１０経由で入出力部１７へ出力するよう構成してもよい．。
【０１５１】
また、記憶コスト算出部９は、各変数の記憶コストを合計した総記憶コスト「１５００」だけを制御装置１０へ出力してもよく、コンフィグレーション情報記憶装置３１へ総記憶コスト「１５００」や、各変数の記憶コストを記憶してもよい。
【０１５２】
（第３の実施の形態）
図１１は、本発明の第３の実施形態に係るシステムＬＳＩの設計支援システムの記憶コスト算出処理を示す図である。
【０１５３】
図１２は、本発明の第３の実施形態に係るシステムＬＳＩの設計支援フローを示すフローチャートである。
【０１５４】
図１、図１１、並びに図１２のフローチャートを参照して、第３の実施形態の設計支援フローを説明する。第２の実施形態と同一の構成要素については、重複する説明を省略する。
【０１５５】
動的解析部７は、図１１（ａ）に示すクラスソース９１ａの各クラス内でメンバ変数「ａ」、「ｂ」、「ｃ」、「ｄ」の値が各々設定された段階で、図１１（ｂ）に示すクラスサム９２ａ側にメンバ変数「ａ」、「ｂ」、「ｃ」、「ｄ」の値を各々通知するように構成した点が、第２の実施形態と相違する。
【０１５６】
また、動的解析部７は、図１１（ｂ）のクラスサム９２ａが非同期に起動された段階で対応するメンバ変数の生存時間を動的解析結果８として記憶コスト算出部９へ出力する。
【０１５７】
動的解析部７は、図１１（ａ）に示すメンバ変数「ａ」に関連するクラスソース９１ａの「ｓｅｔａ」と記述されたクラスの起動時刻を図１１（ｃ）に示す起動時刻９３の「１０」と「ＳＵＭ．ａｄｄ（ａ）」の起動時刻「１５」を内部に記録する。
【０１５８】
動的解析部７は、図１１（ａ）のクラスソース９１ａの各メンバ変数に対応した図１１（ｃ）に示す「ＳＵＭ．ａｄｄ」の実行時刻１００に、図１１（ｂ）のクラスサム９２ａを起動させ、クラスのメンバ変数の生存時間を算出する。例えば、メンバ変数「ａ」に対して起動時刻「１５」にクラスサム９２ａの「ａｄｄ（ｔｍｐ）」を起動させメンバ変数の生存時間「５」を算出する。
【０１５９】
また、図１１（ｂ）のクラスサム９２ａの「ａｄｄ（ｔｍｐ）」の生存時間は「ｔｍｐ」レジスタの使用時間に相当し、図１１（ｃ）に示す時間「１５」から時間「１８」までの時間が生存時間「３」に相当する。
【０１６０】
動的解析部７は、図１１（ａ）のメンバ変数「ｂ」に関連するクラスソース９１ａの「ｓｅｔｂ」と記述されたクラスの起動時刻を、図１１（ｃ）に示す起動時刻９４の「２０」と「ａｄｄ（ｔｍｐ）」の起動時刻「２５」を内部に記録する。
【０１６１】
動的解析部７は、メンバ変数「ｂ」の生存時間「５」を算出し、「ａｄｄ（ｔｍｐ）」の生存時間「３」を内部に記憶する。
【０１６２】
同様に、動的解析部７は、図１１（ａ）のメンバ変数「ｃ」に相当する図１１（ｃ）に示す起動時刻９５の「３０」、「ａｄｄ（ｔｍｐ）」の起動時刻「３５」、メンバ変数「ｃ」の生存時間「５」、「ａｄｄ（ｔｍｐ）」の生存時間「３」を算出し内部に記憶する。
【０１６３】
同様に、動的解析部７は、図１１（ａ）のメンバ変数「ｄ」に相当する図１１（ｃ）に示す起動時刻９６の「４０」、「ａｄｄ（ｔｍｐ）」の起動時刻「４５」、メンバ変数「ｄ」の生存時間「５」、「ａｄｄ（ｔｍｐ）」の生存時間「３」を算出し内部に記憶する。
【０１６４】
動的解析部７は、例えば、図１１（ｃ）に示すＳＵＭ．ａｄｄ（）起動時刻１００の「１５」、「２５」、「３５」、「４５」のデータと、ＳＵＭ．ａｄｄ（）終了時刻１０１の「１８」、「２８」、「３８」、「４８」のデータを用いて、「ａｄｄ（ｔｍｐ）」の生存時間を算出する。
【０１６５】
また、動的解析部７は、ｓｕｍ被参照時刻９９の時間「１３０」までに、各メンバ変数に対応した「ａｄｄ（ｔｍｐ）」の生存時間を加算し変数の総生存時間を算出し、動的解析結果８として記憶コスト算出部９へ送信する。
【０１６６】
記憶コスト算出部９は、開始処理で「総記憶コスト」を「０」にリセットしてから、記憶コスト算出処理を開始し、処理ＳＴ１２０に移行し、すべてのシミュレーション結果で以下の処理を繰り返す。
【０１６７】
処理は処理ＳＴ１２１に移行し、記憶コスト算出部９は、すべてのシミュレーション結果でクラスのメンバ変数の記憶コスト算出処理が終了したか否かを判定する。
【０１６８】
記憶コスト算出部９が、終了判定（ＹＥＳ）にしたときは記憶コスト算出処理を終了させ、判定結果が未終了判定（ＮＯ）の場合は、処理ＳＴ１２２へ分岐する。
【０１６９】
記憶コスト算出部９は、処理ＳＴ１２２で動的解析結果８から記憶コストを算出する。例えば、すべてのメンバ変数が４バイトのサイズで構成した場合、記憶コスト算出部９がメンバ変数「ａ」の生存時間「５」に４バイトを乗じた値を記憶コスト「２０」として算出する。
【０１７０】
記憶コスト算出部９は、処理ＳＴ１２５へ進み、メンバ変数「ａ」の「記憶コスト」を「総記憶コスト」に加算し、処理を処理ＳＴ１２２へ復帰させる。
【０１７１】
さらに、記憶コスト算出部９は、処理ＳＴ１２３、ＳＴ１２４を実行し、メンバ変数「ｂ」の生存時間「５」に４バイトを乗じた値を記憶コスト「２０」として算出する。
【０１７２】
記憶コスト算出部９は、処理を処理ＳＴ１２５へ進ませ、メンバ変数「ｂ」の「記憶コスト」を「総記憶コスト」に加算し、処理ＳＴ１２２へ復帰させる。
【０１７３】
記憶コスト算出部９は、処理ＳＴ１２３、ＳＴ１２４を実行し、メンバ変数「ｃ」の生存時間「５」に４バイトを乗じた値を記憶コスト「２０」として算出する。
【０１７４】
記憶コスト算出部９は、処理を処理ＳＴ１２５へ進ませ、メンバ変数「ｃ」の「記憶コスト」を「総記憶コスト」に加算し、処理ＳＴ１２２へ復帰させる。
【０１７５】
同様に、記憶コスト算出部９は、処理ＳＴ１２３、ＳＴ１２４を処理し、変数「ｄ」の生存時間「５」に４バイトを乗じた値を記憶コスト「２０」として算出する。
【０１７６】
記憶コスト算出部９は、処理を処理ＳＴ１２５へ進ませ、メンバ変数の「記憶コスト」を「総記憶コスト」に加算し、処理ＳＴ１２２へ復帰させる。
【０１７７】
記憶コスト算出部９は、処理ＳＴ１２３の終了判定処理でクラスのすべてのメンバ変数の記憶コスト算出処理の終了判定（ＹＥＳ）を検出した段階で、処理を処理ＳＴ１２６へ分岐させる。
【０１７８】
記憶コスト算出部９は、処理ＳＴ１２６で、「ｔｅｍｐ」レジスタの使用時間である「ａｄｄ（ｔｍｐ）」の生存時間「１２」に４バイトを乗じた値を記憶コスト「４８」として算出する。
【０１７９】
また、記憶コスト算出部９は、処理ＳＴ１２６で、「ｓｕｍの変数」の生存時間「１１５」に４バイトを乗じた値を記憶コスト「４６０」として算出する。
【０１８０】
さらに、記憶コスト算出部９は、処理ＳＴ１２６で、「ａｄｄ（ｔｍｐ）」及び「ｓｕｍの変数」の記憶コストを加算したクラスの「総記憶コスト」の「５８８」をシステムＬＳＩの総記憶コストとして制御装置１０経由で入出力部１７へ出力する。
【０１８１】
すなわち、本発明の第３の実施形態は、第２の実施形態に比して３２．９％も総記憶コストを削減させるという利点がある。
【０１８２】
また、第２の実施形態の記憶コスト算出処理をしたシステムＬＳＩを高位合成した場合、変数「ａ」から「ｄ」への変数設定およびＳＵＭからの値のポーリングが、中央処理装置から非同期に発生するため、クラスソース９１が動作するすべての期間中に変数「ａ」から「ｄ」に専用のメモリ又はレジスタを割り当てる。
【０１８３】
これに対して、第３の実施形態の記憶コスト算出処理をしたシステムＬＳＩを高位合成した場合、変数「ａ」から「ｄ」への値設定のイベント「ｓｅｔａ」から「ｓｅｔｄ」までの関数起動が中央処理装置から同時には発生しない。
【０１８４】
したがって、システムＬＳＩの中央処理装置は、変数「ａ」から「ｄ」への値設定、ＳＵＭ．ａｄｄの呼び出し、ａｄｄの実行がそれぞれ１サイクルで終了させることができ、変数「ａ」から「ｄ」をメモリ又はレジスタで保持する時間が２サイクルで済む。
【０１８５】
つまり、第２の実施形態では変数「ａ」から「ｄ」に専用のメモリ又はレジスタを４個設けるのに対して、第３の実施形態では、変数「ａ」から「ｄ」を割り当てるメモリ又はレジスタが２個で十分であるので、メモリ又はレジスタを２個分節約することができる。
【０１８６】
このように記憶コストの少ない第３の実施形態に係るシステムＬＳＩの設計支援システムで設計したＬＳＩのソースコードを高位合成にかけた方が、メモリ又はレジスタの数が少ないチップ面積の小さな高位合成結果が得られる。
【０１８７】
よって、ＬＳＩの設計下流工程から上流工程に戻って再設計を行う確率を十分低くすることができる。
【０１８８】
さらに、第３の実施形態では、処理ＳＴ１２６から処理ＳＴ１２０へ復帰した記憶コスト算出処理で、すべてのシミュレーション結果を用いてクラスのメンバ変数の記憶コストを算出することができる。
【０１８９】
例えば、動的解析部７は、例外的な処理を引き起こさせるテストデータをテストデータ記憶装置６から読み出し、異なるシミュレーションを再度実行するように構成する。
【０１９０】
動的解析部７は、前回のシミュレーションを第１のシミュレーションとした場合、例外的な処理を起こすテストデータによるシミュレーションを第２のシミュレーションと定義する。
【０１９１】
この場合、第１の実施形態で用いた式３の「１」から「ｉ」回目までの重み「Ｗ」が事象の発生確率を決定するように構成し、第２のシミュレーションが発生する事象の発生確率を例えば、「０．１」に設定する。
【０１９２】
テストデータ記憶装置６は、通常の処理を実行する第１のシミュレーションのテストデータも記録する。動的解析部７が第１のシミュレーションを実行し、さらに、第２のシミュレーションを実行して得られた変数の生存時間を動的解析結果８として、記憶コスト算出部９へ送信する。
【０１９３】
記憶コスト算出部９が算出した記憶コストが「１２００」だった場合、２回のシミュレーションによって算出される記憶コストは、通常の第１のシミュレーションの結果で得られる確率「０．９」に記憶コスト「５８８」を乗じた値を算出する。
【０１９４】
次に、記憶コスト算出部９は、例外の事象が発生する第２のシミュレーションの結果が得られる確率「０．１」に記憶コスト「１２００」を乗じた値を算出する。
【０１９５】
さらに、記憶コスト算出部９は、第１及び第２のシミュレーションで得られた記憶コストを加算し「６４９．２」の記憶コストを総合評価結果として算出する。
【０１９６】
このように、複数のテストデータによる複数のシミュレーション結果を合わせて記憶コストを定義することもできる。
【０１９７】
第３の実施形態に係るモジュール設計支援システムを利用することにより、システムＬＳＩのシミュレーションを実行し、モデルの記憶コストを容易に算出することができる。
【０１９８】
また、記憶コストが小さいモデルを選択することにより、高位合成時のスケジューリング、リソースシェアリングの作業の自由度が大きくなり、高位合成によって割り当てられるメモリ又はレジスタの数をより少なくすることができる。
【０１９９】
さらに、記憶コスト算出部９で算出した記憶コストは、モデル全体から算出されており、高位合成技術では対応が困難な、大規模なリソースの縮小を可能とし、システムＬＳＩやシステム・オン・チップの設計全体でのメモリ又はレジスタ数の削減ができる。
【０２００】
このように、記憶コスト算出部９による記憶コストを算出することは、高位合成以前の設計工程における設計の良否を判断するための重要なメトリクスとなる。
【０２０１】
さらにまた、高位合成以前の設計工程において複数の設計案が存在した場合に、記憶コスト算出部９が算出した記憶コストがより小さな設計案を選択することで、高位合成を行った際に、より小さな面積のシステムＬＳＩやシステム・オン・チップを製造することができる。
【０２０２】
また、動的解析部７は、変数の生存時間を算出する典型的なテストを行うテストデータと、例外的な処理が発生するテストデータをテストデータ記憶装置６から読み出し、複数の生存時間を算出して、重み付け平均をとる処理で複数テスト結果を動的解析結果８として、記憶コスト算出部９へ送信し記憶コスト算出部９が記憶コストを計算することで、例外的な処理を考慮した設計の良否を判断するメトリクスを得ることもできる。
【０２０３】
なお、本発明の実施形態に記載された、作用及び効果は、本発明から生じる最も好適な作用及び効果を列挙したに過ぎず、本発明による作用及び効果は、本発明の実施の形態に記載されたものに限定されるものではない。
【図面の簡単な説明】
【０２０４】
【図１】本発明の第１の実施の形態に係るシステムＬＳＩの設計支援システムのブロック図。
【図２】第１の実施の形態に用いる静的解析結果のデータ構造図。
【図３】第１の実施形態に用いる動的解析結果のデータ構造図。
【図４】第１の実施の形態に用いる記憶コスト算出処理のフローチャート。
【図５】第１の実施の形態に用いる記憶コスト算出処理のフローチャート。
【図６】第１の実施の形態に用いる記憶コスト算出処理のフローチャート。
【図７】第１の実施の形態に用いる記憶コスト算出処理のフローチャート。
【図８】第１の実施の形態に用いる記憶コスト算出処理のフローチャート。
【図９】本発明の第２の実施形態の記憶コスト算出処理を示す図。
【図１０】第２の実施の形態に用いる記憶コスト算出処理のフローチャート。
【図１１】本発明の第３の実施形態の記憶コスト算出処理を示す図。
【図１２】第３の実施の形態に用いる記憶コスト算出処理のフローチャート。
【符号の説明】
【０２０５】
１     ソースコード記憶装置
２     静的解析部
３     静的解析結果
４     コンパイラ
５     実行コード記憶装置
６     テストデータ記憶装置
７     動的解析部
８     動的解析結果
９     記憶コスト算出部
１０   制御装置
１７   入出力部
３１   コンフィグレーション情報記憶装置
１０２ 設計支援システム
【図１】
2005275967.tif 000005
【図２】
2005275967.tif 000006
【図３】
2005275967.tif 000007
【図４】
2005275967.tif 000008
【図５】
2005275967.tif 000009
【図６】
2005275967.tif 000010
【図７】
2005275967.tif 000011
【図８】
2005275967.tif 000012
【図９】
2005275967.tif 000013
【図１０】
2005275967.tif 000014
【図１１】
2005275967.tif 000015
【図１２】
2005275967.tif 000016