(57)【特許請求の範囲】
【請求項１】
シミュレーションで取得した対象回路の動作に係る複数のプロセスに関するイベント情報を含む第一トレースデータと該対象回路の動作を再現するための動作モデルとを格納した記憶領域と、
ユーザによる前記複数のプロセス間に対する制約条件の変更設定を適応させて、前記第一トレースデータに基づいて前記動作モデルを用いて再シミュレーションし、該再シミュレーションによる第二トレースデータを出力する再シミュレーション手段と、
を有することを特徴とするシミュレーション装置。
【請求項２】
前記第一または第二のトレースデータの前記イベント情報から得られる前記複数のプロセス間の同期と各プロセスの処理時間とを示すトレース情報を作成して表示ユニットに表示させるトレース情報表示手段を有することを特徴とする請求項１記載のシミュレーション装置。
【請求項３】
前記トレース情報表示手段は、前記ユーザによって電力制御に関するパラメータ値が変更されると、該パラメータ値を変更するイベントを追加することによって前記制約条件の変更設定を行うことを特徴とする請求項２記載のシミュレーション装置。
【請求項４】
前記再シミュレーション手段は、前記制約条件の変更設定に基づいて前記パラメータ値を変更するイベントを追加することによって該制約条件の変更設定を適応させることを特徴とする請求項１乃至３のいずれか一項記載のシミュレーション装置。
【請求項５】
前記再シミュレーション手段は、
前記第一トレースデータにおいてWait命令間を区切りとしてプロセスを区切ったWait命令ベーストレースデータを作成し、また、前記制約条件の変更設定を用いて、変化するタイミング毎にブロック毎の前記電力制御を示す電力制御トレースデータを作成するトレースデータ作成手段を有し、
前記パラメータ値を変更するイベントを追加した前記Wait命令ベーストレースデータと、前記電力制御トレースデータとに従って、前記動作モデルをシミュレーションすることによって前記対象回路の動作を簡易的に再現する再現手段とを有することを特徴とする請求項１乃至４のいずれか一項記載のシミュレーション装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シミュレーションして取得したトレースデータを用いて、変更可能な制約条件を付加して再シミュレーションするシミュレーション装置に関する。
【背景技術】
【０００２】
ＬＳＩ（半導体集積回路）の開発分野において、ＬＳＩの商談時や開発中のＬＳＩの電力を見積もることがある。従来、スプレッドシートを用いて、経験者によって作成されていた。そのため、経験に基づいて試行錯誤した仮定が多く含まれるため、作成された見積もりからその根拠を推測又は理解することが、作成者本人においても第三者においても理解することが大変であった。
【０００３】
一方、シミュレーション環境や実機環境を利用する方法がある。ソフトウェアを修正して所望の動作、電力になるか否かを検証するために従来より使用されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平６−６７６３１号公報
【特許文献２】特開２００５−３３９４０２号公報
【非特許文献】
【０００５】
【非特許文献１】三上直樹、「リアルタイムOS『DSP/BIOS』を利用するＤＳＰアプリケーションの開発」、Interface 2009 ４月号
【非特許文献２】前川守、「岩波講座  ソフトウェア科学  ６  オペレーティングシステム」、岩波書店、１９８８年９月出版
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、ソフトウェア開発者が電力制御に熟知していなければならないなど、分業開発が一般的な昨今の開発においては十分なトライアルができていない。また、シミュレーション結果を参考にして電力制御を変更したい場合には、ソフトウェア又はハードウェアの修正をしたのち再度シミュレーションを実行することなど必要となり、その修正そのものが適切であるのかを事前に予測するためには十分な知識を持った経験者による判断が必要であった。
【課題を解決するための手段】
【０００７】
開示の技術は、シミュレーションで取得した対象回路の動作に係る複数のプロセスに関するイベント情報を含む第一トレースデータと該対象回路の動作を再現するための動作モデルとを格納した記憶領域と、ユーザによる前記複数のプロセス間に対する制約条件の変更設定を適応させて、前記第一トレースデータに基づいて前記動作モデルを用いて再シミュレーションし、該再シミュレーションによる第二トレースデータを出力する再シミュレーション手段と、を有することを特徴とするシミュレーション装置のように構成される。
【０００８】
また、上記課題を解決するための手段として、コンピュータに上記シミュレーション装置として機能させるためのプログラム、そのプログラムを記録した記録媒体、及びシミュレーション方法とすることもできる。
【発明の効果】
【０００９】
開示の技術では、対象回路のシミュレーションによって取得したトレースデータを用いて、電源制御に係る制約条件の変更を適用させた再シミュレーションを行うことができる。従って、ユーザは、動作した結果として得たい電力制御を制約条件として設定でき、また、その目的とする電力制御による動作を、トレースデータを用いて簡易的にシミュレーションすることができるため、経験的な知識を必要とすることなく電力見積もりを行うことができる。
【図面の簡単な説明】
【００１０】
【図１】本実施例に係る全体フローを示す図である。
【図２】シミュレーション環境の第一構成例を示す図である。
【図３】シミュレーション環境の一般的な利用例を示す図である。
【図４】コンピュータのハードウェア構成を示す図である。
【図５】実機ボードを利用する場合のシミュレーション環境の第二構成例を示す図である。
【図６】ＦＰＧＡボードを利用する場合のシミュレーション環境の第三構成例を示す図である。
【図７】ターゲットがマルチＣＰＵである場合のＣＰＵ構成例を示す図である。
【図８】図７のＣＰＵ構成例におけるソフトウェアアーキテクチャ例を示す図である。
【図９】図８に示すプロセス間のチャネル記述例を示す図である。
【図１０】ソフトウェア構造をpthreadを使って記述したメイン関数のプログラム例を示す図である。
【図１１】図８のプロセス０に対応するプログラム例を示す図である。
【図１２】図８のプロセス５に対応するプログラム例を示す図である。
【図１３】図８のプロセス１に対応するプログラム例を示す図である。
【図１４】図８のプロセス２に対応するプログラム例を示す図である。
【図１５】図８のプロセス３に対応するプログラム例を示す図である。
【図１６】図８のプロセス４に対応するプログラム例を示す図である。
【図１７】関数のプログラム例を示す図である。
【図１８】図１１から図１７に示すプログラムを実行した結果を示す図である。
【図１９】ファイルにリダイレクトした場合の性能表示例を示す図である。
【図２０】ファイルにリダイレクトしなかった場合の性能表示例を示す図である。
【図２１】プロセスの状態遷移を示す図である。
【図２２】プロセス情報の管理例を示す図である。
【図２３】機能トレースデータ例を示す図である。
【図２４】ＶＦトレースデータ例を示す図である。
【図２５】ターゲットが機能ブロック混在型である場合の回路構成例を示す図である。
【図２６】タスクのパイプライン構成例を示す図である。
【図２７】レジスタマップの例を示す図である。
【図２８】シーケンス例を示す図である。
【図２９】機能トレースデータ例を示す図である。
【図３０】ＶＦトレースデータ例を示す図である。
【図３１】電圧・遅延相関データ例を示す図である。
【図３２】放電時間データ例を示す図である。
【図３３】充電時間データ例を示す図である。
【図３４】容量データ例を示す図である。
【図３５】動的電力基礎データ例を示す図である。
【図３６】ガントチャートの一例を示す図である。
【図３７】ガントチャートのその他の例を示す図である。
【図３８】再シミュレーションを説明するためのフローチャート図である。
【図３９】一回目の表示例を示す図である。
【図４０】Wait命令ベーストレースデータ例を示す図である。
【図４１】電力変更イベントを追加したWait命令ベーストレースデータ例を示す図である。
【図４２】変更前のＶＦトレースデータ例を示す図である。
【図４３】変更後のＶＦトレースデータ例を示す図である。
【図４４】アーキ記述によるプロセスを実行する構成要素の記述例を示す図である。
【図４５】ＯＳモデル例を示す図である。
【図４６】アーキ記述の変更例を示す図である。
【図４７】プロセス管理用の構造体記述例を示す図である。
【図４８】ＯＳモデルにおけるプロセス管理用の構造体記述例を示す図である。
【図４９】アーキ記述によるリソース毎の割り込み条件の記述例を示す図である。
【図５０】ＣＰＵ  ＩＤ割り当てテーブル例を示す図である。
【図５１】ＣＰＵの固定割り付けフィールドを追加したプロセス管理用の構造体記述例を示す図である。
【図５２】図１のステップＳ１１での１回目の表示例を示す図である。
【図５３】周波数の変更例を示す図である。
【図５４】電圧の変更例を示す図である。
【図５５】再シミュレーションによる２回目の表示例を示す図である。
【図５６】電力消費データの表示例を示す図である。
【発明を実施するための形態】
【００１１】
以下、本発明の実施の形態を図面に基づいて説明する。図１は、本実施例に係る全体フローを示す図である。図１において、ステップＳ１０及びＳ１１の処理によるトレースデータ取得工程Ａは、開発中のＬＳＩのシミュレーション中にトレースデータを取得する工程であり、後段の再シミュレーション工程Ｂの準備に相当する。
【００１２】
ステップＳ１０では、シミュレーション実行中においてトレースデータを取得するための記述を開発中のＬＳＩ用のプログラムに追加しておく。そして、シミュレーションを実行する（ステップＳ１１）。シミュレーションを行う動作環境として、例えば、ソフトウェアによるシミュレーション方法、実機試験による方法、ＦＰＧＡ（Field Programmable Gate Array）ボードを利用する方法などがあり、それらいずれの方法であっても良い。
【００１３】
このシミュレーションによる結果としてトレースデータ４０が出力される。トレースデータ４０には、機能トレースデータ４１と、ＶＦトレースデータ４２とが含まれる。各トレースデータについては後述される。
【００１４】
ステップＳ１２からＳ１５の処理による再シミュレーション工程Ｂでは、トレースデータ取得工程Ａで出力されたトレースデータ４０を用いて、シミュレーション中の所定機能を実行する各プロセス及びハードウェアモジュールに関して、同期及び時間とからシーケンス図を生成する（ステップＳ１２）。その際、実行中のプロセス及びモジュールに係る電気的特性を電力ライブラリ４５から取得する。そして、各状態に電気的特性を関連付けて、ソフトウェア状態とハードウェア状態とをシーケンス図で表示する。
【００１５】
ユーザよりパラメータ値の変更要求があったか否かを判断する（ステップＳ１３）。パラメータの変更要求がない場合には、この処理を終了する。パラメータの変更要求があった場合には、ユーザからパラメータ値を取得して変更し、パラメータ変更データ４７として出力する（ステップＳ１４）。
【００１６】
そして、トレースベースシミュレーションを行い、パラメータ変更を反映したトレースデータ４０を生成する（ステップＳ１５）。トレースデータ４０を用いて、かつ、変更されたパラメータ値を反映して、シミュレーションが行われる。この場合、必要最小限の機能を持ったＯＳモデル５０と、割り込みハンドラ記述５１と、アーキ記述５２とを用いて簡易的なシミュレーションが実行される。そのシミュレーション実行結果によって、トレースデータ４０が更新され、必要に応じて、ステップＳ１２からＳ１５が繰り返される。
【００１７】
以下に、シミュレーション環境の構成例について例示する。
【００１８】
［第一構成例］
図２は、シミュレーション環境の第一構成例を示す図である。図２では、シミュレーションソフトウェア２ａとして、ＩＳＳ（Instruction Set Simulator）２ｂと、これに必要な周辺モデル２ｃ及びメモリモデル２ｄのみが組み込まれた例を示したが、他のハードウェア構成部品が含まれていてもよい。通例、シミュレーション環境を起動して、必要なデータをシミュレーション環境に渡して、シミュレーションが開始される。
【００１９】
図１で説明したトレースデータ取得工程ＡにおけるステップＳ１１のシミュレーションは、少なくともＣＰＵと、メモリと、記憶装置とを有するコンピュータによって、以下のステップＳ２０からＳ２２の手順で実行される。
【００２０】
コンピュータは、メモリ又は／及び記憶装置（以下、単に記憶領域という）にシミュレーションソフトウェア２ａと、開発された検証対象のＯＳ２ｅ及びアプリケーションソフトウェア２ｆとを格納している。
【００２１】
コンピュータは、シミュレーションソフトウェア２ａを起動し（ステップＳ２０）、検証対象のＯＳ２ｅ及びアプリケーションソフトウェア２ｆをメモリモデル２ｄ上にロードする（ステップＳ２１）。そして、コンピュータは、シミュレーションを実行することによって（ステップＳ２２）、トレースデータ４０が記憶領域に出力される。その後、コンピュータは、図１の再シミュレーション工程Ｂを実行する。
【００２２】
図３は、シミュレーション環境の一般的な利用例を示す図である。図３では、シミュレーション環境を提供するシミュレーションソフトウェア２ａと、アプリケーションソフト２ｆをデバッグするデバッガソフトウェア３ａとによって、デバッグシステム３が構成された例を示している。シミュレーションソフトウェア２ａとデバッガソフトウェア３ａとの間ではプロセス間通信が行われる。
【００２３】
このような環境でトレースデータをとる方法として、ＩＳＳ２ｂや周辺モデル２ｃはＰＣネイティブのコードを生成するソフトウェアとして記述する。たとえば、ＰＣとこの上で実行されるWindows（登録商標）上で動作させるソフトウェアとして記述される。従って、トレースデータをとりたい関数があれば、その関数の中にデータをファイルに書き込む関数などを入れておけば、トレースデータを取得することができる。
【００２４】
一方、ＩＳＳ２ｂにロードされるソフトウェア（ＯＳ２ｅやアプリケーションソフトウェア２ｆ）の関数の中でトレースデータをとる方法としては、周辺モデル２ｃとしてトレースデータをダンプするトレース部品を実装する方法がある。ある特定アドレスを非キャッシュ対象にし、このアドレスへの書き込みがあった時、トレース部品にデータを渡し、トレース部品は時間とデータをファイルに書き出す。
【００２５】
上記ではダンプすべきデータをトレース部品に送るとしたが、コマンドを送るとしてもよい。トレース部品はコマンドをパーズしそれに見合った処理を行う。例えば、ＩＳＳ２ｂ上のソフトウェアからトレース部品に対して、ダンプしたいメモリの開始アドレスと終了アドレスを送る。トレース部品は該当のデータをメモリモデル２ｄよりファイルにコピーする。このようにすればメモリのスナップショットを適宜ダンプすることが可能になる。
【００２６】
デバッガソフトウェア３ａとシミュレーションソフトウェア２ａとによるデバッグシステム３は、図４に示されるようなコンピュータにて動作する。図４は、コンピュータのハードウェア構成を示す図である。図４において、コンピュータ１００は、ＣＰＵ（Central Processing Unit）１１と、メモリユニット１２と、表示ユニット１３と、出力ユニット１４と、入力ユニット１５と、通信ユニット１６と、記憶装置１７と、ドライバ１８とを有し 、システムバスＢに接続される。
【００２７】
ＣＰＵ１１は、メモリユニット１２に格納されたプログラムに従ってコンピュータ１００を制御する。メモリユニット１２には、ＲＡＭ（Random Access Memory）及びＲＯＭ（Read-Only Memory）等が用いられ、ＣＰＵ１１にて実行されるプログラム、ＣＰＵ１１での処理に必要なデータ、ＣＰＵ１１での処理にて得られたデータ等を格納する。また、メモリユニット１２の一部の領域が、ＣＰＵ１１での処理に利用されるワークエリアとして割り付けられている。
【００２８】
表示ユニット１３は、ＣＰＵ１１の制御のもとに必要な各種情報を表示する。出力ユニット１４は、プリンタ等を有し、ユーザからの指示に応じて各種情報を出力するために用いられる。入力ユニット１５は、マウス、キーボード等を有し、ユーザがコンピュータ１００が処理を行なうための必要な各種情報を入力するために用いられる。通信ユニット１６は、例えばインターネット、ＬＡＮ（Local Area Network）等に接続し、外部装置との間の通信制御をするための装置である。記憶装置１７には、例えば、ハードディスクユニットが用いられ、各種処理を実行するプログラム等のデータを格納する。
【００２９】
コンピュータ１００によって行われる処理を実現する上述したようなデバッガソフトウェア３ａとシミュレーションソフトウェア２ａの夫々に係るプログラム等は、例えば、ＣＤ−ＲＯＭ（Compact Disc Read-Only Memory）等の記憶媒体１９によってコンピュータ１００に提供される。即ち、プログラムが保存された記憶媒体１９がドライバ１８にセットされると、ドライバ１８が記憶媒体１９からプログラムを読み出し、その読み出されたプログラムがシステムバスＢを介して記憶装置１７にインストールされる。そして、プログラムが起動されると、記憶装置１７にインストールされたプログラムに従ってＣＰＵ１１がその処理を開始する。尚、プログラムを格納する媒体としてＣＤ−ＲＯＭに限定するものではなく、コンピュータが読み取り可能な媒体であればよい。本実施例に係る処理を実現するプログラムは、通信ユニット１６によってネットワークを介してダウンロードし、記憶装置１７にインストールするようにしても良い。また、ＵＳＢ対応のコンピュータ１００であれば、ＵＳＢ接続可能な外部記憶装置からインストールするようにしても良い。更に、ＳＤカード等のフラッシュメモリ対応のコンピュータ１００であれば、そのようなメモリカードからインストールするようにしても良い。
【００３０】
［第二構成例］
図５は、実機ボードを利用する場合のシミュレーション環境の第二構成例を示す図である。図５に示す第二構成例では、コンピュータ４ａと実機ボード４ｃが接続された構成例を示している。実機ボード４ｃは、実ＣＰＵ４ｄと、ログエリア４ｈを含むメモリ４ｅと、コンピュータ４ａと接続するためのインターフェイス４ｆとを有し、バス４ｇで相互に接続される。
【００３１】
コンピュータ４ａは、図４に示すコンピュータ１００と同様のハードウェア構成を有し、実機ボード４ｃを制御してデバッグを行うための制御ソフトウェア４ｂを実装している。
【００３２】
このような環境では、ＯＳによるタスクスイッチのトレース等を実機ボード４ｃからコンピュータ４ａに読み出して、記録する方法がとられる。更に、専用のプリント文を利用してメモリの中に確保したログエリア４ｈに記録しておき、制御ソフトウェア４ｂによってこのデータを読み出してコンピュータ４ａのメモリ又は記憶装置の記憶領域にトレースデータ４０として記録することができる。このようなシミュレーション環境の一構成例は、非特許文献１の５節に示されている。
【００３３】
［第三構成例］
図６は、ＦＰＧＡボードを利用する場合のシミュレーション環境の第三構成例を示す図である。図６に示す第三構成例では、コンピュータ５ａとＦＰＧＡボード５ｃが接続された構成例を示している。ＦＰＧＡボード５ｃを例示しているが、ハードウェアエミュレータを利用した場合も同様である。また、実機ボード４ｃが接続された第二構成例と同様の仕組みでもよい。
【００３４】
ＦＰＧＡボード５ｃにはＦＰＧＡ５ｄが実装され、ＦＰＧＡ５ｄは、コンフィギュレーションによりＣＰＵ５ｆとメモリ５ｇとバス５ｈが構成されたＤＵＶ（Design Under Verification）回路部５ｅと、ＤＵＶ回路部５ｅを動作させるためのクロック制御部５ｋと、コンピュータ５ａと接続するためのインターフェイス５ｔとを有する。
【００３５】
また、ＦＰＧＡボード５ｃでは、追加の回路を搭載することが可能であるため、更に、ログメモリ５ｑと、ＣＰＵ５ｆの内部データを参照してログメモリ５ｑに書き込むログ書き込み回路５ｐとを有するように構成する。このような構成によって、欲しいデータを参照し、参照したデータをログメモリ５ｑに書き込み、そのデータをコンピュータ５ａに送ることができる。
【００３６】
コンピュータ５ａは、図４に示すコンピュータ１００と同様のハードウェア構成を有し、ＦＰＧＡ回路部５ｅを制御してデバッグを行うための制御ソフトウェア５ｂを実装している。制御ソフトウェア５ｂによって、コンピュータ５ａからログメモリ５ｑのデータを抽出し、コンピュータ５ａのメモリ又は記憶装置の記憶領域にトレースデータ４０として記録することができる。
【００３７】
シミュレーションソフトウェア２ａを利用した第一構成例、実機ボード４ｃを利用した第二構成例、ＦＰＧＡボード５ｃを利用した第三構成例のいずれの場合に関しても、トレースのデータをとる機構を用意することが可能である。
【００３８】
［取得データ］
次に、図１のトレースデータ取得工程Ａにて取得されるトレースデータ４０の内容について説明する。これは、ＣＰＵの構成によることもある。ここでは２つのＣＰＵ構成例を挙げて、必要なデータを定義する。
【００３９】
［マルチＣＰＵにおける取得データ］
図７は、ターゲットがマルチＣＰＵである場合のＣＰＵ構成例を示す図である。図７では、ターゲットとして、ＣＰＵ０、ＣＰＵ１、ＣＰＵ２、及びＣＰＵ３が構成されたハードウェア構成例を示している。この構成例におけるソフトウェアアーキテクチャの例を図８で例示する。
【００４０】
図８は、図７のＣＰＵ構成例におけるソフトウェアアーキテクチャ例を示す図である。図８では、Kahn Process Networkでソフトウェアプロセスを定義した例である。プロセス０とプロセス１、２、３、及び４のプロセス間はチャネル７ａで接続され、プロセス１、２、３、及び４とプロセス５のプロセス間はチャネル７ｂで接続されている。
【００４１】
このチャネルの記述例を図９に示す。図９は、図８に示すプロセス間のチャネル記述例を示す図である。図９では、プロデューサ・コンシューマ関係で１：１接続しており、セマフォを利用した例を示している。このサンプルプログラムは、Ｌｉｎｕｘ上で作成しており、Ｌｉｎｕｘの標準のpthreadとsemaphore（セマフォ）を使った記述になっている。セマフォはマルチスレッド（マルチタスク）制御に一般的に使われるものであり、リアルタイムＯＳなどにも組み込まれている機構である。
【００４２】
リアルタイムＯＳでは、ＩＴＲＯＮ４．０の場合、メッセージパッシングではデータキューやメールボックスといったＯＳのサービスを利用するのが一般的である。この場合も、図９のsem_wait、sem_postのようにＯＳのディスパッチャ、シグナル命令の発行を伴うような関数などＯＳのスケジューリングを変更する要因を含む関数にトレース関数を入れることになる。このような記述の代表例として、図１０を使って説明する。
【００４３】
図１０は、ソフトウェア構造をpthreadを使って記述したメイン関数のプログラム例を示す図である。図１０に示すメイン関数の記述例では、プロセス０から５がpthreadによって生成される例が示されている。
【００４４】
図１１は、図８のプロセス０に対応するプログラム例を示す図である。図１１に示すプログラム例では、プロセス０はデータを生成する。ここでは、各チャネルに偶数番目には２を、奇数番目には０から１０の値を、チャネル０から３に各々書く処理である。
【００４５】
図１２は、図８のプロセス５に対応するプログラム例を示す図である。図１２に示すプログラム例では、プロセス５はデータを出力する。プロセス１〜４より結果を受け取って各々の値と合計値を標準出力する処理である。
【００４６】
図１３〜図１４は各プロセス１〜４に対応している。図１３は、図８のプロセス１に対応するプログラム例を示す図である。図１４は、図８のプロセス２に対応するプログラム例を示す図である。図１５は、図８のプロセス３に対応するプログラム例を示す図である。図１６は、図８のプロセス４に対応するプログラム例を示す図である。
【００４７】
図１３〜図１６において、プロセス１〜４は、いずれも、チャネルより偶数番目と奇数番目の値を取り出して、power_functionまたはpower_function2の第一引数に偶数番目のデータを、第二引数に奇数番目の値を渡している。これらの関数の詳細を図１７に示す。
【００４８】
図１７は、関数のプログラム例を示す図である。図１７において、power_functionは、第一引数を底とし第二引数を指数とする指数計算を行うことがプログラムされている。また、power_function２は、第一引数を底とし第二引数＋１を指数とする指数計算を行うことがプログラムされている。
【００４９】
図１８は、図１１から図１７に示すプログラムを実行した結果を示す図である。図１８では、プロセス１〜４の各々の値と合計値が、１回の処理毎に出力された例が示されている。このような処理を実行した際のＣＰＵのパフォーマンスが図１９で示されている。
【００５０】
図１９は、ファイルにリダイレクトした場合の性能表示例を示す図である。図１９において、プロセス毎の情報を取得するためのＰＳコマンド及び現在実行中のプロセスの情報を取得するためのＴＯＰコマンドによる性能表示例が示されている。また、並列に動作させることができており、ＣＰＵの使用率１９ａは３４０％であることを示している。図１９では、ファイルにリダイレクトする標準出力の場合の性能を示しているが、リダイレクトしなかった場合の性能は、図２０のように示される。
【００５１】
図２０は、ファイルにリダイレクトしなかった場合の性能表示例を示す図である。図２０において、ＰＳコマンド及びＴＯＰコマンドによる性能表示例が示されている。標準出力しなかった場合にはＣＰＵの使用率２０ａは２５０％台になり、４つのスレッドは２０％台まで落ち込む。プロセス５の計算時間がかかっていると予想できる。
【００５２】
従って、理想的には、プロセス０及び５はＣＰＵを占有、プロセス１〜４は６０％ぐらいの実行速度とし、電圧を下げて低電力化することが望ましいと考えられる。本発明はこのような検討をより詳細に行うためのものである。
【００５３】
次にＯＳについて説明する。ＯＳの実装はいろいろあるが、ここでは非特許文献２を例に説明する。非特許文献２ではセマフォの基本概念とそれをサポートするＯＳの機能について説明されている。セマフォは通例Ｐ命令及びＶ命令を持つ。Ｐ命令及びＶ命令はLinuxのセマフォではそれぞれsem_wait関数、semp_post関数に相当する。
【００５４】
非特許文献２の２章で想定するＯＳでは、プロセスの状態遷移は図２１に示すようになる。図２１は、プロセスの状態遷移を示す図である。プロセスには「待ち状態」、「実行可能状態」、及び「実行状態」の３つの状態がある。SIGNAL命令を受けることによって、プロセスは「待ち状態」から「実行可能状態」へと遷移する。「実行可能状態」のプロセスは、ＣＰＵが割り当てられると処理を実行する「実行状態」となり、処理終了によってＣＰＵが解放されると「実行可能状態」へと戻る。又は、「実行状態」のプロセスが、WAIT命令を受けると「待ち状態」へと遷移する。
【００５５】
図２１では、プロセスの基本的な状態遷移を示すものである。ＯＳは複数のプロセスを扱いもっと複雑な遷移をする。プロセスやスレッド（軽量プロセス）のＣＰＵ割り当てや解放なども行う。
【００５６】
このような状態遷移を実現するのは、ＯＳのスケジューリング機能による。図２２は、プロセス情報の管理例を示す図である。ＯＳの中では図２２のように待ち行列、実行可能列、実行中のステートがあり、実行中のプロセスがWAIT命令を呼び待ち行列に入る、SIGNAL命令により、プロセスを実行可能列により入れる、ディスパッチャにより、実行可能列のうち最も優先度が高い実行可能列の先頭のプロセスを実行中に移す、クオンタムが終了したプロセスをそのプロセスの優先度の実行可能列の末尾に追加し、ＣＰＵを解放する処理をする。
【００５７】
また、非特許文献２の第３章５節には「Ｐ命令、Ｖ命令、ディスパッチャの実現」が解説されている。このＯＳでは同期機構はセマフォのみであり、Ｐ関数（Ｐ命令に対応、WAIT命令）、Ｖ関数（V命令に対応、SIGNAL命令）、クオンタム終了時によばれるINTERVAL_TIMER_INTERRUPT関数がある。従って、Ｐ関数、Ｖ関数、INTERVAL_TIMER_INTERRUPT関数にトレース関数を記述することにより、図２２の各行列間をプロセスがどのように動くかを再現できるトレースデータを取得することができる。また、非特許文献２では、ＣＰＵごとにＣＰＵのＩＤ番号をもつ特殊なレジスタをもち、ＯＳはどのＣＰＵで起きた事象かを把握している。
【００５８】
従って、ＯＳの関数にトレースを出力する記述の追加（図１に示す全体フローのステップＳ１０における「トレースデータを取得するための記述を追加」し、第一構成例〜第三構成例のような環境で実行（全体フローのステップＳ１１における「シミュレーション（FPGAボード含む）／実機試験」を実行）することにより、機能トレースデータ４１（図１）を生成できる。
【００５９】
例えば、トレースデータを取得するための記述が非特許文献２に基づくＯＳで実行されたとすると、図２３のようなデータを作成することができる。図２３は、機能トレースデータ例を示す図である。図２３では、プロセスは簡単のためスレッドＩＤ（LWP  ID）の代わりにプロセス名を、セマフォのＩＤ番号の代わりに変数名で表している。
【００６０】
また、電圧、周波数のトレースであるＤＶトレースデータを作成する。周波数や電源制御する関数があって、これがコールされて変わる仕様であればこれらの関数にトレースデータを取得する記述を追加しておくことによって、取得可能である。もし、このような機能がない場合には初期値を入れる。ここでは後者の場合だったとし、電圧の変更イベントと周波数とをトレースしたＶＦトレースデータ例を図２４に示す。図２４は、ＶＦトレースデータ例を示す図である。
【００６１】
一般のリアルタイムＯＳではメールボックスなどの同期機構があるが、ここでは、非特許文献２に合わせてセマフォを使った例で示す。セマフォは共有リソース管理の一般的な例であり、メールボックス等の関数でも何らかの排他制御がなされているはずである。従って、同様の拡張により対応可能である。
【００６２】
［機能ブロック混在型の回路構成における取得データ］
ＡＳＩＣ（Application Specific Integrated Circuit）やＡＳＳＰ（Application Specific Standard Product）の場合には、通例、ＣＰＵとハードウェアで実現した機能ブロック（以下、ＨＷブロックと言う）が混在したＳｏＣ（System on Chip）がある。また、ＣＰＵとＨＷブロック間の通信は規格化されていない。しかし、ＣＰＵとＨＷブロック間の通信機構は存在する。従って測定対象が決まればＣＰＵとＨＷブロック間の通信が決まり、とるべきデータが決まる。
【００６３】
ここでは、例として、通信の一例が示せるような簡単な構成例で説明する。図２６のようなタスクパイプラインを構成したい場合を考える。ＨＷ／ＳＷ分割において、ヘッダの解析はＣＰＵで行い、２つの処理をＨＷブロックで処理させるとする。図２５はこれを実現するためのアーキテクチャ例である。
【００６４】
図２５は、ターゲットが機能ブロック混在型である場合の回路構成例を示す図である。図２５に例示されるターゲット回路２４ｃには、割り込みキュー（ＩＲＱ）２４ｑを有するＣＰＵ２４ｄと、メモリ２２ａ及び設定レジスタ２２ｂを有するＨＷブロック１と、メモリ２３ａ及び設定レジスタ２２ｂを有するＨＷブロック２と、タイマー２４ｋと、割り込みとなる状態を対応するビットで管理し割り込みキュー２４ｑにキュー待ちさせる割り込み要因レジスタ２４ｐと、実機ボード２４ｃを検証するコンピュータ４ａ（図５）と接続するためのインターフェイス２４ｆとが実装され、バス２４ｇを介して相互に接続される。
【００６５】
シミュレーションやＦＰＧＡボードを利用する場合には、ターゲット回路２４ｃとテストベンチをつなげて実行する。実機ボードの場合には該当の回路が搭載されている。
【００６６】
図２６は、タスクのパイプライン構成例を示す図である。図２６において、主なタスクとして、ＣＰＵ２４ｄによって行われるヘッダの解析、ＨＷブロック１の処理、ＨＷブロック２の処理があり、時間Ｔ０でＣＰＵ２４ｄによるＤａｔａ１のヘッダの解析が行われた後は、時間Ｔ１でＨＷブロック１によってＤａｔａ１の処理が行われ、次に、時間Ｔ２でＨＷブロック２によってＤａｔａ１の処理が行われるように構成される。以降、Ｄａｔａ２、Ｄａｔａ３、Ｄａｔａ４、Ｄａｔａ５等についても同様の手順で処理される。
【００６７】
割り込み要因レジスタ２４ｐのレジスタマップは、図２７のように定義されるものとする。図２７は、レジスタマップの例を示す図である。図２７に示すレジスタマップでは、割り込み要因レジスタ２４ｐのビット０、１、２をＨＷブロック１の各状態に割り当て、ビット３、４、５をＨＷブロック２の各状態に割り当て、ビット６をコンピュータ４ａとのインターフェイスの終了に割り当てている。
【００６８】
割り込み要因レジスタ２４ｐ中に１ビットでも１が立っていたら割り込み信号がレベル信号としてＣＰＵ２４ｄに送られる。また、ＣＰＵ２４ｄが定期的にヘッダ解析をするため、タイマー２４ｋが実装されているとする。これは割り込み要因レジスタ２４ｐが発生させる割り込み信号とは別にある構成とする。
【００６９】
ＨＷブロック１、ＨＷブロック２は設定レジスタ２２ｂ、２３ｂ中の起動レジスタに１を書くことで始まるようになっているとする。実行中１であり、何らかの要因で終了した際に０クリアされるようになっているとする。
【００７０】
概念的には図２６のようなタスクパイプラインが行われるように図２５に示されるような回路構成を設計したが、実際には図２８のように動いたとする。図２８は、シーケンス例を示す図である。図２８において、ＣＰＵ２４ｄがインターフェイス２４ｆからＤａｔａ１を取得してから、Ｄａｔａ１がＨＷブロック１による処理、そして、ＨＷブロック２による処理が終了するまでのシーケンスを例示している。図２８では、ＣＰＵ２４ｄは、Ｄａｔａ１のヘッダ解析を終了すると、次のＤａｔａ２を取得してヘッダ解析をおこなっており、ＨＷブロック１によるＤａｔａ２の処理中に、ＨＷブロック２によるＤａｔａ１の処理が行われている。
【００７１】
このようなシーケンスにおいて、ＣＰＵ２４ｄとＨＷブロック１及び２との間の通信ログをとることを考える。そこで、要因レジスタの値の変化、タイマーイベントの値セットイベントと発火イベント、ＨＷブロックの起動イベントの発生のログをとれば、図２９のようなトレースデータを生成することができる。図２９は、機能トレースデータ例を示す図である。
【００７２】
図２９に示す機能トレースデータ４１では、各種イベントが発生した時刻毎に、その時刻に対応させて、割り込み要因レジスタ２４ｐの値を示す要因レジスタ値、タイマーイベント、ＨＷブロック１の起動イベント、ＨＷブロック２の起動イベント、イベントが発生した要因、プロセス、イベントによって動作したＣＰＵのＩＤ、そのＣＰＵのイベント後の状態、セマフォ、そのセマフォ値等が記録されている。
【００７３】
また、ＶＦトレースデータ４２については、図７に示すマルチＣＰＵの場合と同様に、電源制御、周波数制御は行われなかったとし、ＶＦトレースデータ例を図３０に示す。図３０は、ＶＦトレースデータ例を示す図である。
【００７４】
図３０に示すＶＦトレースデータ４２では、ブロック毎に電圧の変更イベントと周波数とが、初期設定として、時刻「０」で設定されている。例えば、ＣＰＵ２４ｄ、ＨＷブロック１、ＨＷブロック２、共有メモリ２４ｅ、インターフェイス２４ｆの各ブロックに対して、１．２［Ｖ］から１．２［Ｖ］への電圧変更、及び、０［ＭＨｚ］から１００［ＭＨｚ］への変更が示される。
【００７５】
図２９に示す機能トレースデータ４１と、図３０に示すＶＦトレースデータ４２とは、シミュレーション環境の図２に示す第一構成例及び図６に示す第三構成例において取得可能である。
【００７６】
上述した各種トレースデータ例では、ＨＷブロックに関して、処理のきっかけのみに着目したデータをとったが、後述のタスクの実行時間に関しては、バス競合の待ち時間情報もとればより精度を上げることができるかもしれない。ダブルバッファにするなどしてバス競合がＨＷブロックの機能の実行をストールさせないようにしている場合には、ストール条件を監視する必要がある。
【００７７】
以下、図２５に例示される機能ブロック混在型の回路構成を基本として説明する。一方、後述の再シミュレーション（トレースベースシミュレーション）においては図７に例示されるマルチＣＰＵについても説明する。
【００７８】
［電力ライブラリ］
電力ライブラリ４５の作成方法は種々考えられる。本実施例で何らかの方法で作成した以下のデータを電力ライブラリ４５として入力された場合を例に説明する。ここでは１つの論理合成シナリオに基づいた結果が入力されたケース（以下、Tech1として示す）を示すが、複数入力して論理合成シナリオ間のトレードオフ（テクノロジ間の違いや使用セルセットの違いなど）を評価するとしてもよい。
【００７９】
電力ライブラリ４５には、ブロックごとの電圧とクリティカルパス遅延の相関を示す電圧・遅延相関データ、ブロックごとの時間計算式と充電時間・放電時間データ、容量データ、動的電力データなどが含まれる。
【００８０】
図３１は、電圧・遅延相関データ例を示す図である。図３１に示す電圧・遅延相関データ４５は、ブロック毎に用意される。もし、条件によりクリティカルパスが変わる場合には複数の相関データを用意しておく。また、マルチクロックドメインでクロックの乗り換えが実装されている場合には、クロックドメインごとに算出する。クロックドメイン間のクロック周波数に制約がある場合にはその式を含める。実施例ではシングルクロックの場合を説明する。また、常時動いている部分（例：設定レジスタ。揮発防止のため切らないＲＡＭは含まない）とブロック全体のクリティカルパス遅延が求められた場合を説明する。
【００８１】
図３２は、放電時間データ例を示す図である。また、図３３は、充電時間データ例を示す図である。図３２に示す放電時間データ４６と図３３に示す充電時間データ４７とは、ブロック毎に用意され、ある電圧から任意の電圧に変更されるまでの時間を示している。例えば、ＨＷブロック１に関して、各々の線形近似した放電時間データ４６及び充電時間データ４７は、ｎ［Ｖ］からｍ［Ｖ］にする関数が、
F（充電時間データ, 放電時間データ, m, n）= if (m > n)
then  （充電時間データによるm[V]にする時間
―  充電時間データによるn[V]にする時間）
else  （放電時間データによるn[V]を0[V]にする時間
―  充電時間データによるm[V]を0[V]にする時間）
end
で与えられたとしたら、前記の条件（ｍ>ｎ）を満たす。以下、この例で説明する。もちろん、これ以外であっても条件を満たすデータと計算式が定義されればよい。
【００８２】
例えば、このＨＷブロック１を１つの電源ドメインとした場合、容量データが図３４のように示される。図３４は、容量データ例を示す図である。図３４に示す容量データ４８は、ブロック毎に容量値を示している。
【００８３】
また、このＨＷブロック１を１つの電源ドメインとした場合の各ブロックの電力データが図３５のように示される。図３５は、動的電力基礎データ例を示す図である。図３５に示す動的電力基礎データ４９は、ブロック毎に電力、周波数、電圧の各値を示している。また、処理を行うＨＷブロック１、ＨＷブロック２、ＣＰＵについては、ＲＵＮ（実行中）及びＩＤＬＥ（待ち）の各状態での値が示される。
【００８４】
次に、図１のステップＳ１２における１回目のソフトウェア状態・ハードウェア状態・電力の表示について説明する。
【００８５】
［ソフトウェア状態・ハードウェア状態・電力を表示する（１回目）］
機能トレースデータ４１を用いて、ガントチャートを生成することができる。図３６は、ガントチャートの一例を示す図である。図３６に示すガントチャート６ａは、図２８に示すシーケンスの一部に相当するが、同様に全体を表すことが可能である。また、ガントチャート６ａでは、上段にガントチャート、また、下段に各ブロックの電力波形を時刻に対応させてトレース情報として表示ユニットに表示させている。
【００８６】
更に、ＣＰＵ２４ｄについては状態ＲＵＮの期間にはＲＵＮの電力を、ＨＷブロック１及び２については処理開始から割り込み要因レジスタ２４ｐの対応するビットに１が立つまでの期間にはＲＵＮの電力を、そうではない期間についてはＩＤＬＥの電力を表示する。このようにすることでガントチャート６ａのような出力を得ることができる。ここでは２状態としたが複数状態あってもよい。図２に例示されるシミュレーション環境の第一構成、及び図６に例示されるシミュレーション環境の第三構成の場合には状態を観測する補助回路をつけてもよい。
【００８７】
また、図７に示すマルチＣＰＵの構成例の場合、プログラムの内容が単純なので定常的な状態に陥る可能性がある。図３７は、ガントチャートのその他の例を示す図である。図３７に示すガントチャート６ｂは、コンピュータの表示ユニットに表示され、図７のＣＰＵ構成例においけるソフトウェアアーキテクチャにおける動作を表している。ガントチャート６ｂにおいて、プロセス５がg_ch[8]からg_ch[11]よりデータを消費するのに縛られるような動きになっていることが分かる。煩雑になるため同期関係を示す矢印は省略している。
【００８８】
次に、図１のステップＳ１４におけるパラメータ変更について説明する。
【００８９】
［パラメータ変更］
ユーザは、表示ユニットに表示されたガントチャート６ａより、ＤＶＦＳ（Dynamic Voltage and Frequency Scaling）、Power Gating等により電力制御する対象を決める。最初に電源ドメインを決める。電源ドメインは、ＤＶＦＳ可能なドメインとPower Gating可能なドメインで設定する。
【００９０】
例えば、ＨＷブロック１とＨＷブロック２に１つ、ＣＰＵ２４ｄに１つ、その他に１つのドメインを割り当てたいとする。D0 = {ＨＷブロック１}, D1={ＨＷブロック２}, D2 = {ＣＰＵ}, D3 = others を入力する。以下、Ａ及びＢが並行動作することを「A || B」と略記する。
（１）Ｄ０についてPower GatingのＯＮ／ＯＦＦや電圧変更するイベントを設定する。
（２）電圧変更の場合、電圧V_newと周波数F_newとして変更したパラメータ値を設定する。
（３）並列実行要件ごとに周波数を計算する。(A || B) の周波数は、min(F_A, F_B)で算出する。例えば、もし、D0=｛ＨＷブロック１, ＨＷブロック２｝だったとすると、（ＨＷブロック１ || ＨＷブロック２）の時には、f1 = min(F_HW1_RUN, F_HW2_RUN)、(ＨＷブロック１ || ＨＷブロック２常時RUN)の時には、f2 = min(F_HW1_RUN, F_HW2_ALWAYS_RUN)を算出する。後者の場合で f2 > F_HW2_RUNの場合、ＨＷブロック２は常時RUN部分へのアクセスのみ受け付けられる。これらを制約式とする。
（４）ＯＳのクオンタムを設定する。
【００９１】
次に、図１のステップＳ１５におけるトレースベースシミュレーションを行い、パラメータ変更を反映したトレースデータを生成する処理について説明する。
【００９２】
［再シミュレーション］
再シミュレーションは、イベントに関する情報をもつトレースデータ（例えば、図２３、図２４、図２９、図３０）のイベントの関係が壊れないように設定変更を反映したトレースデータを生成する。この際、ＨＷブロックの周波数変更による割り込みが発生するタイミングや、ＣＰＵの周波数変更によりクオンタムを終えるタイミングが変更される。従って、単純にガントチャートの帯を伸ばすだけでは現実に即さない。そこで、イベントと処理時間を使って、ＯＳモデルを使ってクオンタムによるプロセスの変更を再現、また、セマフォ変数の変更も新たに作り直す。セマフォ変数の数値が変わることにより、Wait、Postの条件が変わる。このＯＳの動作を模擬する。こうすることにより、設定変更前のトレースデータ４０とパラメータ変更データ４７を使って、設定変更後のトレースデータ４０を自動生成することができる。
【００９３】
ここでは、一旦、Wait命令間の相対情報に落としたトレースデータ（以下、Wait命令ベーストレースデータと言う）を作成するフローを示す。Wait命令ベーストレースデータでは、Wait命令間を区切りとしてプロセスが区切られる。もちろん、Wait命令間の相対情報を作成しながら、ＯＳシミュレーションをするとしてもよい。しかし、説明を簡単にするため、Wait命令ベーストレースを作成するフローを提示する。
【００９４】
図３８は、再シミュレーションを説明するためのフローチャート図である。図３８において、トレースデータ４０からWait命令ベーストレースデータ６１と、パラメータ変更データ４７から変更設定ＶＦトレースデータ６２とが作成され、記憶領域に出力される（ステップＳ３１）。
【００９５】
次に、記憶領域から予め用意しておいた、プロセス管理機能のうちクオンタム（分割した時間）をプロセスに割り付ける機能を抽出したＯＳモデル５０と、電圧上昇及び降下の事象を発生させる割り込みハンドラ５１と、ＣＰＵの構成を表現するアーキ記述５２とを用いて、対象回路の動作を再現する（ステップＳ３２）。再現によって得られたトレースデータを加工後トレースデータ４９として記憶領域に出力する。
【００９６】
ふるまいが再現される対象回路は、図１のステップＳ１１にてシミュレーションした回路構成と同一でもよいし、このシミュレーション結果の検証後にユーザによって変更（又は調整）された回路構成であってもよい。再シミュレーションの対象回路がアーキ記述５２で表現される。
【００９７】
再シミュレーションでは、ＯＳモデル５０と、ハンドラ５１と、アーキ記述５２とによって、ソフトウェアとハードウェアとを含む動作モデルが形成される。従って、ステップＳ１１での実機又はＦＰＧＡ等による構成を必要とせず、簡易的にシミュレーションすることができる。
【００９８】
ユーザは、動作した結果として得たい電力制御を制約条件として設定でき、また、その目的とする電力制御による動作を簡易的にシミュレーションすることができるため、ソフトウェア及びハードウェアに対して改善するための適切な修正を予め検証することができる。
【００９９】
図３９は、一回目の表示例を示す図である。図３９では、表示ユニットに表示される一回目のガントチャート３８ａが例示されている。この例における一回目のガントチャート３８ａでは、Wait命令ベーストレースデータ６１に基づいて作成されるため、Wait命令間でプロセスが区切られる。しかしながら、実施例の説明を簡潔にするための例示であるので、再シミュレーションのためのトレースデータはWait命令ベーストレースデータ６１に限定されない。例えば、類似の逐次的に処理するアプローチや、変更箇所のみ同様の計算により、補正をかけるようにしてガントチャートが作成されるようにしてもよい。
【０１００】
図４０は、Wait命令ベーストレースデータ例を示す図である。図４０に例示されるWait命令ベーストレースデータ６１において、時刻t1.5のstart_hw1のレジスタ書き込みのタイミングで、ＨＷブロック１を含むドメインの電圧と周波数を上げる設定をして、安定したらＨＷブロック１が動作する設定をし、HWI_F0の中からＨＷブロック１を含むドメインの電圧と周波数を下げる設定をしたとする。
【０１０１】
更に、イベントのルールを選択する。ルールとしては「他のＨＷブロックがアイドルだったら、起動信号が入ったタイミングで昇圧を開始し、昇圧完了時まで遅延して起動信号がＨＷブロックに届くようにし、更に昇圧が完了するまで他のHWブロックへの起動命令も遅延させ、昇圧完了後と当該ブロックの周波数を変更すると仮定する」や、「ＨＷブロックに降圧命令が発行されたら、他のＨＷブロックがアイドルだったら降圧を開始し他のＨＷブロックへの起動を遅延させると仮定する」といったルールを持っておく。
【０１０２】
例えば、時刻t1.5で発行された命令に対して、前者の仮定が設定され、HWI_F0の中からＨＷブロック１に対して発行される降圧命令に対して後者の仮定が設定されたとする。これらをWaitトレースに加えると図４１のようになる。
【０１０３】
また、ＨＷブロックと同様、転送ブロックに関しても、同様に転送プロセスとスケジューリング（バスのアービトレーション）でモデル化してもよい。
【０１０４】
図４１は、電力変更イベントを追加したWait命令ベーストレースデータ例を示す図である。図４１では、Wait命令ベーストレースデータ６１において、プロセスＡに対してＨＷブロック１を昇圧するための"PowerUp"イベントが追加され、また、ＨＷＩ＿Ｆ０に対してＨＷブロック１を降圧するための"PowerDown"イベントが追加されている。更に、ＶＦトレースデータ６２からこれら、ユーザによる電力変更に係る追加されたイベントに対応するＶＦデータ６１−２が追加イベントに対応させて記憶される。
【０１０５】
更に、図２５の構成においてＣＰＵ２４ｄを含むドメインの初期電圧が０．９[Ｖ]に変更され、更にＣＰＵ２４ｄは５０ＭＨｚに変更された場合、図４２のように初期値のみからなるＶＦトレースデータ４２が作成される。
【０１０６】
図４２は、変更前のＶＦトレースデータ例を示す図である。図４２において、ＶＦトレースデータ４２は、変更される前の状態の時刻０の時の電圧及び周波数の値を示している。ユーザが、表示ユニットに表示されたガントチャート及び電圧波形を含むトレース情報から電圧及び周波数をパラメータとする値を変更すると、例えば、図４３に示すように、時刻０について変更設定ＶＦトレースデータ６２が作成される（図３８のステップＳ３１）。
【０１０７】
図４３は、変更後のＶＦトレースデータ例を示す図である。図４３に例示される変更設定ＶＦトレースデータ６２は、時刻０の時の変更設定を示している。ＣＰＵ２４ｄに対して、電圧を１．２［Ｖ］から０．９［Ｖ］へ降圧する変更、周波数を０［ＭＨｚ］から５０［ＭＨｚ］へと変更することがイベントとして設定されている。変更設定ＶＦトレースデータ６２は、このように変化するタイミング毎に作成される。
【０１０８】
次に、Wait命令ベースデータ６１と変更設定ＶＦトレースデータ６２とＯＳモデル５０と、割り込みハンドラ記述５１と、アーキ記述５２とを使って再シミュレーションする。ここで、Wait命令ベースデータ６１は明らかに処理時間がわかる。
【０１０９】
次に、ＯＳモデル５０について説明する。
【０１１０】
［ＯＳモデルの作成］
本実施例におけるＯＳモデル５０は、コンピュータ全体を実際に制御するＯＳからスケジューリングとスケジューリングに関するデータフィールドを抽出して、シミュレーション時間を再現する記述を追加して作成される。ここでは、例えば、非特許文献２の７０ページから７９ページに記載されるようなＯＳを一例として以下に説明する。ＯＳモデル５０の主な目的は、シーケンスのイベント関係が保持されるようなシミュレーションが可能な環境を提供することである。従って、夫々のプロセスがどのくらいの時間で終わるか、次のイベントがどんなイベントであるかが決まればよい。
【０１１１】
図４４は、アーキ記述によるプロセスを実行する構成要素の記述例を示す図である。図４４に示す記述例では、回路構成でプロセスを実行する構成要素として、ＣＰＵ、ＨＷブロック１、ＨＷブロック２、及びインターフェイスがある。このうち、通常のＯＳが実行され、ソフトウェアプロセスが実行されるものは区分を汎用とし、実際には専用ハードウェアであるが、プロセスの時間を表現するために便宜的にソフトウェアプロセスとして表現するものには専用ハードウェアとして定義される。また、どのＯＳを使うかを示す種別番号を付加する。仮に、ＣＰＵとＤＳＰがあり、ＣＰＵとＤＳＰで実行されるＯＳが違う場合には、別の種別が割り振られる。
【０１１２】
このようにＯＳが１種類の場合のＯＳモデル５０の例について図４５で説明する。図４５は、ＯＳモデル例を示す図である。図４５において、ＯＳモデル５０は、直近の時刻に移動して、イベントが優先度別に書き込まれている優先度別待ち行列５３を参照して優先度の高いイベントを取得する（ステップＳ７１）。ＯＳモデル５０は、アーキ記述５２（図４４の記述例）を参照して、取得したイベントに係るプロセスを実行するＯＳのＩＤを調べる（ステップＳ７２）。
【０１１３】
次に、ＯＳモデル５０は、イベントを調べる（ステップＳ７３）。ＯＳモデル５０は、イベントがクオンタムの消費イベントであるか否かを判断し（ステップＳ７４）、クオンタムの消費イベントである場合には、INTERVAL_TIMER_INTERRUPT関数を呼び、ステップＳ８１へと進む。
【０１１４】
ステップＳ８１では、ＯＳモデル５０は、Wait命令ベーストレースデータ６１（後述される再シミュレーション工程Ｂにて作成される）を照会することにより現在のイベントにより変更があったプロセスに残り時間を書き込んで、ステップＳ７１へと戻る。ここで、イベントがクオンタムの消費イベントである場合、次のイベントまでの残り時間から消費した時間を減算した値を優先度別待ち行列５３に書き込む。
【０１１５】
一方、ステップＳ７４にて、イベントがクオンタムの消費イベントでないと判断した場合、ＯＳモデル５０は、イベントがＰｏｓｔイベントであるか否かを判断し（ステップＳ７６）、Ｐｏｓｔイベントである場合、Ｖ（Ｓ）関数を呼び、ステップＳ８１へと進む。
【０１１６】
一方、ステップＳ７６にて、Ｐｏｓｔイベントでないと判断した場合、ＯＳモデル５０は、イベントがＷａｉｔイベントであるか否かを判断し（ステップＳ７８）、Ｗａｉｔイベントである場合、Ｐ（Ｓ）関数を呼び、ステップＳ８１へと進む。
【０１１７】
一方、ステップＳ７８にて、Ｐｏｓｔイベントでないと判断した場合、ＯＳモデル５０は、割り込み種別を選択して割り込みハンドラを呼び（ステップＳ８０）、ステップＳ８１へと進む。割り込みハンドラは、割り込みハンドラ記述５１によって定義される。
【０１１８】
このように、本実施例に係るＯＳモデル５０は、プロセスに割り当てられたプロセスの処理時間分、時間を進めながら、イベントを発生させると言った単純な構成で実現される。
【０１１９】
次に、同じ種類のＯＳが複数実行される場合のアーキ記述５２の変更例について説明する。例えば、ＣＰＵ  ＩＤ「０」から「３」とＣＰＵ  ＩＤ「４」から「７」に分けて、各々ＯＳを動作させる場合、ＯＳ  ＩＤ番号を振り、そのＯＳが管理するリソースと関係付ける。ただし、仮想マシンソフトウェアのようにＯＳを切り替えるような機構のものがあれば、仮想マシンソフトウェアを図２７にならってモデル化する。つまり、仮想マシンソフトウェアのＯＳ切り替え操作により、ＯＳ  ＩＤを調べる以降の処理を切り替えるようにする。
【０１２０】
もし、アーキが変更された場合、或いは、アーキの利用のされ方が変わった場合はアーキ記述を変更するのが一つの方法として考えられる。一方、仮想マシンソフトウェアのところでも記載した通り、ＯＳがその機能を有する場合がある。アーキの利用のされ方であればＯＳが制御することもできる。このようにＯＳがその機能を有している場合にはＯＳ中にそのアルゴリズムは明記されているはずであり、ＯＳのモデル化の範疇となる。しかしながら、そのようなアルゴリズムを記載した文献はなく、本実施例では、アーキ変更、アーキの使い方の変更等はアーキ記述５２で行う。
【０１２１】
例えば、図４４に示すアーキ記述例で当初試したが、スレッドの構成上、複数のＣＰＵで実行すればパフォーマンスの向上が見込めるため、ＣＰＵ３個で再シミュレーションした場合には、ユーザは、図４６に示すようにアーキ記述５２を変更すればよい。図４６は、アーキ記述の変更例を示す図である。
【０１２２】
図４６において、図４４に示すアーキ記述例に対して、区分「汎用」としてＣＰＵ  ０、ＣＰＵ  １、ＣＰＵ  ３が定義される。
【０１２３】
例えば、非特許文献２のＯＳは、ＯＳのアルゴリズム中にＣＰＵのＩＤ番号を減算して、遊んでいるＣＰＵのＩＤに処理を割り当てるアルゴリズムが記載されている。従って、図４５のようにモデル化すれば、ＯＳのＣＰＵリソース利用ルールに従ってソフトウェアがＣＰＵに割り当てられて処理速度の変化等を観測することが可能となる。
【０１２４】
非特許文献２の７１ページには、プロセス管理用の構造体が宣言されている（図４７）。本実施例では、ＯＳモデル５０でのシミュレーションへの入力は、図４０で明らかなようにプロセス（又は軽量プロセス）は処理時間で特徴づけられる。このため、処理時間に関するパラメータが必要である。例えば、図４７を参考にすると、図４８のようなデータ構造を用意すればよい。
【０１２５】
図４７は、プロセス管理用の構造体記述例を示す図である。図４７に示すプロセス管理用の構造体記述例は、非特許文献２に基づくものである。この構造体記述例から、本実施例において必要な部分のみの記載例は、図４８に示すようになる。
【０１２６】
図４８は、ＯＳモデルにおけるプロセス管理用の構造体記述例を示す図である。図４７に示すプロセス管理用の構造体記述例は、本実施例にてＯＳモデル５０のために適用される構造体記述例である。この構造体記述例では、次のイベントまでの残り時間（remain_time）と次のイベントの状態等（next_event_time、p_block() : state(0)）が追加される。これら追加した記述は、図４５でイベント発生を検出したプロセスに対して、Ｗａｉｔトレースデータ、もしくはクオンタム消費イベントの場合には、remain_timeからクオンタム分の時間を差し引いたものが実行される。
【０１２７】
また、図２５に示す回路構成に基づいて、例えば、アーキ記述５２では、更にリソース毎の割り込み条件が管理され、図４９に示すようなアーキ記述によって表現される。図４９は、アーキ記述によるリソース毎の割り込み条件の記述例を示す図である。図４９に例示されるアーキ記述５２では、ＣＰＵ２４ｄ、タイマー２４ｋ、ＨＷブロック１、ＨＷブロック２、割り込み要因レジスタ２４ｐのブロック（リソース）毎に割り込み条件式と要因とが対応付けられて記述される。
【０１２８】
次に、専用ハードウェアに対応する場合を含むＯＳモデル５０の作成について説明する。非特許文献２ではマルチＣＰＵまでは対応しているが、専用ハードウェアを含むシミュレーション用のＣＰＵのモデルとしては不十分である。そこで、本実施例では、特定のプロセスしか実行できないＣＰＵを加える。例えば、ＣＰＵの個数を１６とし、８を超えるＣＰＵは特定のプロセスしか実行できないようにする。具体的には、まずプロセスの情報に二つのフィールドを追加する。すなわち、図５１に例示されるように、固定ＣＰＵに割り当てを固定するためのis_bind_cpuと、どのＣＰＵ  ＩＤに割り当てるかを指定するためのbind_cpu_idとが追加される。
【０１２９】
更に、ＡＣＴＩＶＥ関数は、ＰＲＯＣ＿ＮＵＭＢＥＲが８を超えていた場合、ＲＥＡＤＹ＿ＱＵＥＵＥの中から該当のＰＲＯＣ＿ＮＵＭＢＥＲに束縛されたＰＣＢのうち最優先のものを選択するように変更する。実際には、ＯＳが実行されたらＯＳが自分が実行されているＣＰＵのＣＰＵ番号レジスタを参照してＰＲＯＣ＿ＮＵＭＢＥＲを取得するが、本実施例に係るＯＳモデル５０では、直近にイベントがあったプロセスが割り当てられていたＣＰＵのＩＤ番号で代用する。
【０１３０】
この変更により、ハードウェアを模擬するためのＣＰＵは固定のプロセスしか実行できなくなる。つまり、ハードウェアの動作状況を新たなＣ言語モデルなどで作成してＣＰＵモデルの外に付加するのではなく、ＯＳ上で実行される１プロセスとして表現でき、大幅に簡単なモデル化が可能となる。
【０１３１】
従って、図４６に示すようなアーキテクチャーがあった場合、上記のルールに従い、例えば、図５０のようにアーキテクチャーを構成する部品の名称とＣＰＵ  ＩＤとを対応付けたテーブルを作成することができる。図５０は、ＣＰＵ  ＩＤ割り当てテーブル例を示す図である。図５０に例示されるＣＰＵ  ＩＤ割り当てテーブルでは、例えば、ＣＰＵ０、１、２に対してＣＰＵ  ＩＤ「０」、「１」、「２」が夫々割り当てられ、ＨＷブロック１、２に対してＣＰＵ  ＩＤ「８」、「９」が夫々割り当てられ、インターフェイスに対してＣＰＵ  ＩＤ「１０」が割り当てられた状態を示している。
【０１３２】
次に、電圧の昇降動作に関して説明する。非特許文献２では、プロセスが優先度毎にキューイングされる優先度キューになっている。この優先度キューの最優先度キューに電圧の昇降状況を表現するプロセスを追加する仕組みによって、電圧の昇降によるアイドリングが実現できる。ＯＳモデル５０は、最優先度なので最初に実行する。また、最優先度なので一般の割り込みなどから保護される。一方、電力制御用の信号変化（つまり、割り込み）に関しては割り込みを許可すれば、降圧中に発生した昇圧イベントや、昇圧中に発生した降圧イベントにも対応できる。また、電圧昇降動作のモデリングさえもＯＳ上で実行される一プロセスとして表現できる。残り時間に関しては、図３１及び図３２と、図３０に例示される電圧変更イベントを使って算出可能である。
【０１３３】
次に、ハードウェア割り込みに係るモデル化について説明する。ハードウェア割り込み処理機構は、通常、ハードウェア固有に備えられるものであるため、ＯＳにはない。しかし、本実施例では、ＨＷブロックもＯＳ上のプロセスとして表現しているので、ソフトウェア割り込みと同じ形態になっている。従って、通常のソフトウェア割り込みよりも優先度が高いソフトウェア割り込みとしてモデル化する。このようにして、本実施例に係るＯＳモデル５０は、ハードウェアモデルに対応可能となる。
【０１３４】
また、PowerUpイベント、PowerDownイベント等のハードウェア割り込みも同様である。
【０１３５】
ハードウェア割り込みのイベントもトレースに従うのも一案である。しかし、シーケンスが同じになる場合には有効であるが、周波数の変更などで、シーケンスが同じにならない場合には有効ではない。そこで含めてハードウェア割り込みのモデル化を行う。
【０１３６】
通例、ハードウェア割り込みハンドラは要因などを見て処理を振り分ける、或いは、処理時間上の不都合がなければ、ハードウェア割り込みハンドラ内で処理を行うこともあるかもしれない。そこで、割り込みハンドラ記述５１を用いてハードウェア割り込みをモデル化する。
【０１３７】
図２５の割り込み要因レジスタ２４ｐのようにＣＰＵとＨＷブロック１及び２の間で共有されるデータ領域をメモリに割り当てる。更に、セマフォを割り当てて排他制御する。ＭＵＴＥＸによる排他制御でも良い。割り込み要因レジスタを操作する処理はクリティカルセクションとなるようにする。
【０１３８】
例えば、ＨＷブロックのプロセスでは、図４１の例示されるデータのように、ＨＷブロック１に「要因＝１」とするようなイベントを発生させるようにすれば良い。
【０１３９】
次に、ＨＷブロック１及び２間で起動をかけることが可能である場合について説明する。もし、ＨＷブロック１及び２間で起動をかけることが可能である場合、ＨＷブロック間の通信も記録する。例えばreadyのアサート（つまり wait命令相当）/ startのアサート（つまり、post命令相当）を記録する。リングバッファを介して通信している場合にはセマフォ通信でモデル化する。更に、ＨＷブロック１及び２は、１つのプロセスと、このプロセスのみが利用可能なＣＰＵ、タイムシェアリングがないＯＳでモデリングする（Power Down / Upする場合は後述）。プロセスは、Wait命令のコール（readyのアサート）をして、待ち状態になり、相手ＨＷブロックからのPost命令のコール（startのアサート）により、実行可能になる。このプロセスにはちょうど１個実行可能なＣＰＵが存在するので、割り当てられて処理を開始する。このように、ＨＷブロック１及び２は、ＣＰＵ−ＯＳのモデリングに対応付けることができる。
【０１４０】
更に、ＣＰＵ２４ｄがパワーダウン／パワーアップするドメインのＣＰＵである場合は、PowerIntとPowerTaskの優先度を加える。PowerIntとPowerTaskの優先度は、ハードウェア（ＨＷ）割り込みとソフトウェア（ＳＷ）割り込みの関係になるようにする。つまり、PowerTaskのプライオリティを持つタスクが走っている期間であっても、PowerIntの発生を受信する。更に、ＣＰＵ２４ｄに一対一対応するPowerDownプロセスとPowerUpプロセスを用意する。夫々、該当のＣＰＵをPowerDownする割り込み（イベント）、PowerUpする割り込み（イベント）をWaitするようにしておく。このようにすることで、割り込みが発生したら、これらのプロセスが実行され、パワーダウン／パワーアップの動作が模擬される。
【０１４１】
PowerIntとPowerTaskの優先度を通常の優先度より高く設定すると割り込み信号が発生すると即座にパワーダウン／パワーアップする動作が実現できる。もちろん、ＯＳモデルにおいて、PowerIntやPowerTask実行中のディスパッチャ制御に手を加えて、もっときめの細かい制御ができるモデルにしてもよい。
【０１４２】
変更設定ＶＦトレースデータ６２において、電源電圧の変更を検出した際に、割り込みを発生させ、PowerInt優先度で待機しているプロセスを呼ぶ。このプロセスの中で、割り込み内容が降圧であればPowerDownプロセスを生成させ実行させ、昇圧であればPowerUpプロセスを生成させ実行させる。もし、どちらかのプロセス実行中に割り込みが発生したら、PowerInt優先度の割り込みハンドラは、現在実行中の経過時間と放電時間データと充電時間データを使って、次の昇圧または降圧処理の処理時間を計算して、プロセスを生成実行させる。
【０１４３】
具体的に説明する。まず、図４２、図４３より、今回の周波数と前回の周波数の比が求まる。例えば、ＣＰＵ２４ｄの場合、０．５が求まる。従って時間は２倍かかる。０時間から始まる動作は、HWI_F1とInterfaceである。Interfaceは周波数の変更がないので、次のイベントは、時刻t1である。一方、ＣＰＵ２４ｄは周波数変更があるので、ｔ１／０．５＝２×ｔ１になる。
【０１４４】
時刻０ではプロセスは２個しか走っていない。そこで時刻０よりHWI_F1の相対時刻でのイベントの発生を調べる。イベントは0時点で、Create Process A, Bが起きる。0 + t1 / 0.5 時点でend が起きる。一方、Interfaceプロセスは、0でPost(semA)が、時刻ｔ１でPost(semA), endが起きる。従って、直近のイベントは０のPost(semA)である。ＯＳモデル５０は通常のＯＳと同様、セマフォ値を１加算しシグナル命令を発生し、Wait Process状態にある Process Aが実行待ちキューに入る。次に、時刻ｔ１で Post(semA)が起きる。そこで、更にセマフォ値が１加算される。更にインターフェイスは処理を完了する。Interfaceの次のイベントは時刻で始まっているので、時刻ｔ１３でイベントが起きるようにスケジュールする。
【０１４５】
次に、２×ｔ１において、HWI_F1は終了する。ＯＳモデル５０は通常のＯＳと同様、ディスパッチャを起動してＣＰＵ２４ｄを開放する。更に実行待ちキューの優先度の最も高いプロセスを取り出す。現在、Process Aのみが待っているのでこれをＣＰＵ２４ｄに割り当てる。ここで、時刻は、t_pa_0 = 2*t1 である。Process Aのt1から2*t1に変更される。直近の Wait-Wait命令間のイベント、つまり、元の時刻で t1.5で発生する start_hw1, t2で発生するW(semA)は、元の時間で、Waitから抜けて(t1.5 - t1),   (t2 - t1)でイベントが起きる。周波数は変更していないので、d_0 = 2 * (t1.5 - t1),   d_1 = 2* (t2 - t1)でイベントが発生する。
【０１４６】
この時点で、Process Aのみが実行されているので、次の直近のイベントは、t_pa_0 + d_0 で発生するstart_hw1イベントである。従って、このイベントによりＯＳモデル５０は、start_hw1イベントにより、ＨＷブロック１に対応するプロセスを起動する。更に、PowerUp割り込みを発生させる。PowerUpプロセスが実行される。ここで、放電時間データを引いて、所望の電圧になるまでの相対時間を算出する。算出値がd_2だったとする。従って、t_pa_1 = (t_pa_0 + d_0 + d_2)にイベントが起きる。OSはPowerUpプロセスの完了を検出し、周波数が1.2(=120/100)倍になっていることを検出し、ＨＷブロック１を開放する。ＨＷブロック１の開放を待っているＨＷブロック１プロセスを割り当てる。ＨＷブロック１プロセスの処理時間は (t9 - t1.5)だったので、ＨＷブロック１プロセスの終了イベントは t_pa_6 = (t_pa_1 + 1.2 * (t9 - t1.5))に発生する予定になる。
【０１４７】
次に、t_pa_2 = (t_pa_0 + d_1)時点でProcess Aの待ちが発生する。セマフォ値は非０なので、次のWait-Wait間処理が開始される（つまり元時刻のt3 〜t5区間）。同様に計算して、t_pa_3 = t_pa_2 + 2* (t4 - t3)でPost(semB)が起きる。これにより、ＯＳモデル５０は通常のＯＳと同様、セマフォの値を１増加させる。更に、Process Bは実行可能キューに移される。
【０１４８】
Process Aは、更に予定では、t_pa_4 = t_pa_2 + 2* (t5 - t3)でWait(semA)が発生する。ここで、(t_pa_3 - t_pa_0) < Quantum < (t_pa_4 - t_pa_0) だったとすると、ＯＳモデル５０は通常のＯＳと同様、Process AはCPUを開放させられる。この時刻を t_pa_3.5 とすると、Process Aは５０ＭＨｚで(t_pa_4 - t_pa_3.5)分の処理が残っていることを-p_blockオブジェクトに記載し、実行可能キューに移す。OSモデルは、更に、通常のＯＳと同様、Process Bに処理を割り当てる。従ってt_pa_5 = t_pa_3.5 + 2 * ((t7-t6)+(t12-t11))にWait命令の発生が予定されることになる。
【０１４９】
もし、t_pa_6 < t_pa_5だったとすると、t_pa_6 で正常終了し、要因レジスタが１になる。つまり、割り込みが起きる。ここで、Process Bの残り処理時間は、５０ＭＨｚで(t_pa_6 - t_pa_5)となる。これをp_blockオブジェクトに記載して、Process BにCPUを開放させる。ＯＳモデル５０は、ＯＳと同様、割り込みハンドラHWI_F0をCPUに割り当てて、HWI_F0はSWI_F0をコールする。 SWI_F0は、t_pa_7 = t_pa_6 + 2*(t11 - t10)で処理が開始され、t_pa_8 = t_pa_7 + 2 * (t13 - t11)で処理が終了する。
【０１５０】
更に、ＯＳモデル５０は、通常のＯＳと同様、ディスパッチャによりＣＰＵ２４ｄを開放し、Process BをＣＰＵ２４ｄに割り当てる。この際に、現在の周波数を調べる。この例では５０ＭＨｚのままなので、p_blockオブジェクトに記載された残り時間が利用される（変わっている場合にはスケーリングする）。従って、Process Bは、t_pa_9 = t_pa_8 + (t_pa_6 - t_pa_5)にWait命令の発行が予定される。
【０１５１】
もし、t_pa_8 < t_pa_9 だったとすると、InterfaceはP(semA)を実行し、セマフォAは1になる。割り込みは発生しないので、Process Bは予定通り、t_pa_9でWaitする。ここでＯＳモデル５０は通常のＯＳ同様、ディスパッチャによりProcess AをＣＰＵ２４ｄに割り当てる。ここで、現在の周波数を調べて、Process Aの次のイベントを算出する。t_pa_10 = (t_pa_9 + (t_pa_4 - t_pa_3.5))でWaitする。
【０１５２】
Process AはWaitするもののすでにセマフォAは非０なので生起する。t_pa_10より、従来の時刻のt15から始まっていたProcess Aの処理が行われる。
【０１５３】
このようにして、周波数変更による影響を反映したトレースデータを作成することができる。すなわち、新しい機能トレースデータ４１とＶＦトレースデータ４２を作成することができる。
【０１５４】
［ソフトウェア状態・ハードウェア状態・電力を表示する（２回目）］
再シミュレーションにより生成された新しい機能トレースデータ４１とＶＦトレースデータ４２により、変更後の電力、電力量を算出する。
【０１５５】
［ユーザ・インターフェイス］
電圧、周波数の変更要因を反映させたトレースを生成する技術について説明しきた。この枠組みを応用するとユーザ・インターフェイスでインタラクティブに要因を変更して、電力量の削減、処理時間の増大等を検査できるようになる。例えば、１回目のシミュレーション（図１のステップＳ１１）による電力計算結果により、図５２のようにトレース情報が表示ユニットに表示される。
【０１５６】
図５２は、図１のステップＳ１１での１回目の表示例を示す図である。図５２に例示されるトレース情報の表示画面において、ガントチャートではプロセスの実行状態が処理時間の長さで表されると共に、プロセス間の同期が「sync」の矢印で示されている。また、ガントチャートのプロセスの状態に対応させて電圧波形が表示されている。
【０１５７】
更に、この表示画面上で、図５３、図５４のように周波数、電圧、起動トリガを入れることにより設定変更パラメータを取得することができる。
【０１５８】
図５３は、周波数の変更例を示す図である。図５３では、ユーザは、トレース情報の表示画面のガントチャート上で実行状態のプロセスを選択すると表示される周波数変更画面４７ａを用いて、周波数の現在の値を参考にして変更値を設定する。
【０１５９】
図５４は、電圧の変更例を示す図である。図５４に示すように、ユーザは、トレース情報の表示画面上のガントチャートで実行状態のプロセスを選択して、電力制御を変更するための降圧イベント４８ａ及び昇圧イベント４８ｂを追加発生させるマウス操作をする。
【０１６０】
そして、バックグランドで再シミュレーション工程Ｂの図３８のステップＳ３２での処理を実行して、加工後トレースデータ４９を生成することにより、図５５のような表示ができる。
【０１６１】
図５５は、再シミュレーションによる２回目の表示例を示す図である。図５５に示す２回目の表示例では、降圧イベント４８ａ及び昇圧イベント４８ｂによって動作できない期間が考慮されたガントチャートと、プロセスの状態に応じた電圧波形とが表示される。
【０１６２】
図５６は、電力消費データの表示例を示す図である。図５６において、「baseline」から「Marker」までの区間の電力消費データが画面５０ａで示される。
【０１６３】
更に、新旧のトレースのイベントの関連付けができるので、同じ区間の電力・電力量を比較できるようなビューを表示することも可能である。以上のように、統合的に見せることにより、性能に加えて、電力、電力量の比較検討を視覚的に行うことが可能になるのである。
【０１６４】
上記実施例では、プロセスを例として説明したが、プロセス毎に複数のスレッドとしてもよい。
【０１６５】
上述したように、本実施例では、対象回路のシミュレーションによって取得したトレースデータを用いて、電源制御に係る制約条件の変更を適用させた再シミュレーションを行うことができる。ユーザは、動作した結果として得たい電力制御を制約条件として設定でき、また、その目的とする電力制御による動作を、トレースデータを用いて簡易的にシミュレーションすることができるため、経験的な知識を必要とすることなく電力見積もりを行うことができる。
【０１６６】
本発明は、具体的に開示された実施例に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
【０１６７】
以上の実施例を含む実施形態に関し、更に以下の付記を開示する。
（付記１）
シミュレーションで取得した対象回路の動作に係る複数のプロセスに関するイベント情報を含む第一トレースデータと該対象回路の動作を再現するための動作モデルとを格納した記憶領域と、
ユーザによる前記複数のプロセス間に対する制約条件の変更設定を適応させて、前記第一トレースデータに基づいて前記動作モデルを用いて再シミュレーションし、該再シミュレーションによる第二トレースデータを出力する再シミュレーション手段と、
を有することを特徴とするシミュレーション装置。
（付記２）
前記第一または第二のトレースデータの前記イベント情報から得られる前記複数のプロセス間の同期と各プロセスの処理時間とを示すトレース情報を作成して表示ユニットに表示させるトレース情報表示手段を有することを特徴とする請求項１記載のシミュレーション装置。
（付記３）
前記トレース情報表示手段は、前記ユーザによって電力制御に関するパラメータ値が変更されると、該パラメータ値を変更するイベントを追加することによって前記制約条件の変更設定を行うことを特徴とする請求項２記載のシミュレーション装置。
（付記４）
前記再シミュレーション手段は、前記制約条件の変更設定に基づいて前記パラメータ値を変更するイベントを追加することによって該制約条件の変更設定を適応させることを特徴とする請求項１乃至３のいずれか一項記載のシミュレーション装置。
（付記５）
前記再シミュレーション手段は、
前記第一トレースデータにおいてWait命令間を区切りとしてプロセスを区切ったWait命令ベーストレースデータを作成し、また、前記制約条件の変更設定を用いて、変化するタイミング毎にブロック毎の前記電力制御を示す電力制御トレースデータを作成するトレースデータ作成手段を有し、
前記パラメータ値を変更するイベントを追加した前記Wait命令ベーストレースデータと、前記電力制御トレースデータとに従って、前記動作モデルをシミュレーションすることによって前記対象回路の動作を簡易的に再現する再現手段とを有することを特徴とする請求項１乃至４のいずれか一項記載のシミュレーション装置。
（付記６）
前記記憶領域は、前記対象回路のブロック毎の電圧・遅延相関データを含む電力ライブラリを格納し、
前記トレース情報表示手段は、
前記電圧・遅延相関データを参照することによって、第一電圧から任意の第二電圧に変更されるまでの時間を算出する算出手段を有し、
前記算出した結果を用いて、前記トレース情報に対応させて電力波形を前記表示ユニットに表示させることを特徴とする請求項１乃至５のいずれか一項記載のシミュレーション装置。
【符号の説明】
【０１６８】
２ａ        シミュレーションソフトウェア
２ｂ        ＩＳＳ
２ｃ        周辺モデル
２ｄ        メモリモデル
２ｅ        ＯＳ
２ｆ        アプリケーションションソフト
３ａ        デバッガソフトウェア
４ａ        コンピュータ
４ｂ        制御ソフトウェア
４ｃ        実機ボード
４ｄ        ＣＰＵ
４ｅ        メモリ
４ｆ        インターフェイス
４ｇ        バス
５ａ        コンピュータ
５ｂ        制御ソフトウェア
５ｃ        ＦＰＧＡボード
５ｄ        ＦＰＧＡ
５ｅ        ＤＵＶ回路部
５ｆ        ＣＰＵ
５ｇ        メモリ
５ｈ        バス
５ｋ        クロック制御部
５ｐ        ログ書き込み回路
５ｑ        ログメモリ
５ｔ        インターフェイス
６ｂ        ガントチャート
７ａ、７ｂ  チャネル
１９ａ、２０ａ      使用率
２２ａ、２３ａ      メモリ
２２ｂ、２３ｂ      設定レジスタ
２４ｃ      実機ボード
２４ｄ      ＣＰＵ
２４ｅ      共有メモリ
２４ｆ      インターフェイス
２４ｇ      バス
２４ｋ      タイマー
２４ｐ      割り込み要因レジスタ
２４ｑ      ＩＲＱ
４０        トレースデータ
４１        機能トレースデータ
４２        ＶＦトレースデータ
４５        電力ライブラリ
５０        ＯＳモデル
５１        割り込みハンドラ記述
５２        アーキ記述
６１        Wait命令ベーストレースデータ
６２        変更設定ＶＦトレースデータ
【図１】
0005510258.tif 000002
【図２】
0005510258.tif 000003
【図３】
0005510258.tif 000004
【図４】
0005510258.tif 000005
【図５】
0005510258.tif 000006
【図６】
0005510258.tif 000007
【図７】
0005510258.tif 000008
【図８】
0005510258.tif 000009
【図９】
0005510258.tif 000010
【図１０】
0005510258.tif 000011
【図１１】
0005510258.tif 000012
【図１２】
0005510258.tif 000013
【図１３】
0005510258.tif 000014
【図１４】
0005510258.tif 000015
【図１５】
0005510258.tif 000016
【図１６】
0005510258.tif 000017
【図１７】
0005510258.tif 000018
【図１８】
0005510258.tif 000019
【図１９】
0005510258.tif 000020
【図２０】
0005510258.tif 000021
【図２１】
0005510258.tif 000022
【図２２】
0005510258.tif 000023
【図２３】
0005510258.tif 000024
【図２４】
0005510258.tif 000025
【図２５】
0005510258.tif 000026
【図２６】
0005510258.tif 000027
【図２７】
0005510258.tif 000028
【図２８】
0005510258.tif 000029
【図２９】
0005510258.tif 000030
【図３０】
0005510258.tif 000031
【図３１】
0005510258.tif 000032
【図３２】
0005510258.tif 000033
【図３３】
0005510258.tif 000034
【図３４】
0005510258.tif 000035
【図３５】
0005510258.tif 000036
【図３６】
0005510258.tif 000037
【図３７】
0005510258.tif 000038
【図３８】
0005510258.tif 000039
【図３９】
0005510258.tif 000040
【図４０】
0005510258.tif 000041
【図４１】
0005510258.tif 000042
【図４２】
0005510258.tif 000043
【図４３】
0005510258.tif 000044
【図４４】
0005510258.tif 000045
【図４５】
0005510258.tif 000046
【図４６】
0005510258.tif 000047
【図４７】
0005510258.tif 000048
【図４８】
0005510258.tif 000049
【図４９】
0005510258.tif 000050
【図５０】
0005510258.tif 000051
【図５１】
0005510258.tif 000052
【図５２】
0005510258.tif 000053
【図５３】
0005510258.tif 000054
【図５４】
0005510258.tif 000055
【図５５】
0005510258.tif 000056
【図５６】
0005510258.tif 000057