(57)【特許請求の範囲】
【請求項１】
ターゲットとなるソフトウェアをシミュレーションするシミュレーション装置において、
前記ソフトウェアの命令を実行する命令セットシミュレータ部と、
前記命令セットシミュレータ部による前記命令の実行に応じて進行させる時刻であって、実時間の進行による現実の時刻とは異なるシミュレーション時刻を進行させるシミュレーション時刻管理部と、
前記命令セットシミュレータ部の実行している前記命令がアイドル処理かどうかを判定するアイドル判定処理を実行するアイドル処理判定部と、
前記アイドル処理判定部によって、前記命令セットシミュレータ部の実行中の命令がアイドル処理と判定されると、前記シミュレーション時刻管理部の管理する前記シミュレーション時刻を前記アイドル処理の終了まで進行させる時間補正部と
を備えたことを特徴とするシミュレーション装置。
【請求項２】
前記シミュレーション装置は、さらに、
所定のイベントのシミュレーションの実行要求を通知する実行要求通知を受信すると、前記実行要求通知の通知する前記イベントのシミュレーションを実行し、前記イベントの前記シミュレーションの結果に応じて、前記命令セットシミュレータ部に割り込み要求を送信するイベントシミュレータ部と、
前記イベントシミュレータ部のシミュレーションするべき少なくとも一つのイベントであって、前記シミュレーション時刻を基準とする発生時刻を示すイベント発生時刻を持つイベントを管理すると共に、前記シミュレーション時刻管理部の管理する前記シミュレーション時刻を参照することにより前記イベントが前記発生時刻に達していると判断した場合には、前記発生時刻に達している前記イベントに関する前記実行要求通知を前記イベントシミュレータ部に通知するイベント管理部と
を備え、
前記時間補正部は、
前記アイドル処理判定部によって、前記命令セットシミュレータ部の実行中の命令がアイドル処理と判定されると、前記イベント管理部の管理する前記イベントのうち次に発生するべき前記イベントの前記発生時刻を参照し、次に発生するべき前記イベントの前記発生時刻まで前記シミュレーション時刻管理部の管理する前記シミュレーション時刻を進行させることを特徴とする請求項１記載のシミュレーション装置。
【請求項３】
前記命令セットシミュレータ部は、
ジャンプ命令を実行したときに、前記アイドル処理判定部を呼び出し、
前記アイドル処理判定部は、
前記命令セットシミュレータ部に呼び出されたときに、前記アイドル判定処理を実行することを特徴とする請求項１または２のいずれかに記載のシミュレーション装置。
【請求項４】
前記シミュレーション装置は、さらに、
実時間の進行による現実の時刻を管理すると共に、前記シミュレーション時刻管理部が進行させる前記シミュレーション時刻が前記現実の時刻よりも進んでいる場合には、前記命令セットシミュレータ部による前記ソフトウェアの命令の実行を一時停止させて、前記シミュレーション時刻管理部によって管理される前記シミュレーション時刻を前記現実の時刻に合わせる実時間調整部を備えたことを特徴とする請求項１〜３のいずれかに記載のシミュレーション装置。
【請求項５】
ターゲットとなるソフトウェアをシミュレーションするシミュレーションプログラムにおいて、
（１）前記ソフトウェアの命令を実行する処理と、
（２）前記命令の実行に応じて進行させる時刻であって、実時間の進行による現実の時刻とは異なるシミュレーション時刻を進行させる処理と、
（３）実行している前記命令がアイドル処理かどうかを判定する処理と、
（４）実行中の命令がアイドル処理と判定されると、前記シミュレーション時刻を前記アイドル処理の終了まで進行させる処理と、
をコンピュータに実行させるためのシミュレーションプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、例えば組込み装置で実行されるプログラムをシミュレーションする、シミュレーション装置及びシミュレーションプログラムに関する。
【背景技術】
【０００２】
組込み装置のアーキテクチャ設計、動作検証、性能解析、ソフトウェア開発などを目的とし、組込み装置のハードウェアの持つ機能をソフトウェアでモデル化し、その上でターゲットソフトウェア１３１を実行するための仮想環境を提供する手段として、シミュレータがある。シミュレータは、シミュレーションの対象範囲、目的、ハードウェア機能をモデル化するときの抽象度や精度によって、多様な形態が存在する。そのなかの１つの形態として、ターゲットとなる組込み装置で使われるＣＰＵ用にコンパイル、リンクされたオブジェクトコードを、ターゲットとは異なるＣＰＵで動作するホストコンピュータにおいて解釈し、メモリやレジスタの内容の変化を擬似的に再現する、命令セットシミュレータがある。命令セットシミュレータは、ターゲットＣＰＵの命令列をそのまま実行可能であるため、ターゲットソフトウェア１３１の構成や処理内容に関与しない。そのため、実行すべき処理が無くなりＣＰＵが空き状態となっている、ＣＰＵアイドル処理であっても、実際のＣＰＵと同様に命令列の解釈、実行を行う。
ＣＰＵアイドル処理は、ジャンプ命令を繰り返し実行する、単純なループ処理で実現されることが多い。これに対し、特許文献１では、実行した命令列の履歴からループ処理を検出し、ループを規定回数繰り返した後のメモリやレジスタの内容を予測し、結果を反映することで、ループ回数分の命令実行を短縮する手段が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平８−６９３９２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
コントローラのような入出力処理の完了が実時間で要求される組込み装置では、リアルタイムオペレーティングシステム（ＲＴＯＳ）が導入され、処理をタスクや割込みハンドラという単位で実行する。通常タスクや割込みハンドラは、ある決められた実時間制約（デッドライン）に確実に処理が完了するよう、最悪ケースでの実行時間で処理内容が設計される。そのため、通常ケースではマージン分はＣＰＵアイドル処理となり、次の割込み事象を待つために時間を消費するための命令列を実行することになる。
【０００５】
ＣＰＵアイドル処理は、空き時間に実行される意味のない処理であるため、その命令列を忠実にシミュレーションしたとしても、意味のある演算結果は得られない。この意味のない命令実行に対しても、ホストコンピュータのＣＰＵリソースが割り当てられ、一定の処理時間がかかる。従って、ＣＰＵアイドル処理のためにＣＰＵリソースを使わないようにすれば、シミュレーション時間は短縮され、実行結果を早く得ることができる。
その１つの手段として、特許文献１では、ループに係る命令をスキップする方式が示されている。なお、ＣＰＵアイドル処理は、単純なループ処理で実現する他に、ＣＰＵコアを停止させて低消費電力状態に移行し待機する処理として実現する場合があり、その場合ＣＰＵの命令実行は停止してしまうため、特許文献１に記載のループを短縮する手法は使えない。
【０００６】
ここで、ＣＰＵアイドル処理が解除される条件に注目すると、ＣＰＵに対し割込みなどの外部事象を与える必要があることがわかる。従って、本発明では、現在シミュレーション実行している命令のＣＰＵアイドル処理の部分であることを検出する手段により、ターゲットソフトウェアがＣＰＵアイドル処理の実行に遷移したことを検出した際に、次の入出力イベントが発生する時刻までシミュレータ内部の時間を強制的に進める。その結果、ターゲットソフトウェアでは、ＣＰＵアイドル処理に入った瞬間に次の割込みが発生し、ＣＰＵアイドル処理はキャンセルされ、割込みハンドラやタスク処理が実行される。これにより、ＣＰＵアイドル処理に係るシミュレーション時間を短縮することを目的とする。
【課題を解決するための手段】
【０００７】
この発明のシミュレーション装置は、
ターゲットとなるソフトウェアをシミュレーションするシミュレーション装置において、
前記ソフトウェアの命令を実行する命令セットシミュレータ部と、
前記命令セットシミュレータ部による前記命令の実行に応じて進行させる時刻であって、実時間の進行による現実の時刻とは異なるシミュレーション時刻を進行させるシミュレーション時刻管理部と、
前記命令セットシミュレータ部の実行している前記命令がアイドル処理かどうかを判定するアイドル判定処理を実行するアイドル処理判定部と、
前記アイドル処理判定部によって、前記命令セットシミュレータ部の実行中の命令がアイドル処理と判定されると、前記シミュレーション時刻管理部の管理する前記シミュレーション時刻を前記アイドル処理の終了まで進行させる時間補正部と
を備えたことを特徴とする。
【発明の効果】
【０００８】
この発明により、ターゲットとなるソフトウェアをシミュレーションするシミュレーション装置において、ＣＰＵアイドル処理となるシミュレーション時間を短縮するシミュレーション装置を提供できる。
【図面の簡単な説明】
【０００９】
【図１】実施の形態１におけるターゲットシステムシミュレータ１００のブロック図。
【図２】実施の形態１における命令セットシミュレータ部１１０のフローチャート。
【図３】実施の形態１におけるアイドル処理判定部１７０のフローチャート。
【図４】実施の形態１における時間補正部１８０のフローチャート。
【図５】図２、図３、図４を連結した図。
【図６】実施の形態１におけるＩ／Ｏシミュレータ部１２０によるイベント管理部１５０への登録処理を示すローチャート。
【図７】実施の形態１におけるイベント管理部１５０のもつイベントキューを示す図。
【図８】実施の形態１におけるイベント管理部１５０によるイベント処理動作を示すフローチャート。
【図９】実施の形態１におけるイベント管理部１５０のイベント処理動作を説明する図。
【図１０】実施の形態１におけるイベント管理部１５０のイベント処理動作を説明する図。
【図１１】実施の形態１における効果を示す図。
【図１２】実施の形態２におけるターゲットシステムシミュレータ１００−２のブロック図。
【図１３】実施の形態２における実時間調整部１９０のフローチャート。
【図１４】実施の形態３におけるターゲットシステムシミュレータを実行する計算機の外観。
【図１５】実施の形態３におけるターゲットシステムシミュレータを実行する計算機のハードウェア構成。
【発明を実施するための形態】
【００１０】
実施の形態１．
図１は、実施の形態１におけるターゲットシステムシミュレータ１００の構成を示している。ターゲットシステムシミュレータ１００は、ターゲットである組込み装置をソフトウェアで模擬した装置である。ターゲットシステムシミュレータ１００は、ＣＰＵ命令をシミュレーションする命令セットシミュレータ部１１０と、周辺装置の割込みや入出力をシミュレーションするＩ／Ｏシミュレータ部１２０（イベントシミュレータ）と、ターゲットメモリ１３０と、ターゲットレジスタ１４０と、イベント管理部１５０、シミュレーション時刻管理部１６０、アイドル処理判定部１７０、時間補正部１８０を備える。
【００１１】
ターゲットメモリ１３０は、ターゲットのメモリ内容を再現し保持する。また、ターゲットレジスタ１４０は、ターゲットのレジスタ内容を再現し保持する。ターゲットシステムシミュレータ１００で実行するターゲットソフトウェア１３１は、ターゲットメモリ１３０にロードされる。
【００１２】
命令セットシミュレータ部１１０は、ターゲットメモリ１３０からターゲットソフトウェア１３１の命令コードを取り出し、解釈、実行する。その際、ターゲットレジスタ１４０、ターゲットメモリ１３０およびＩ／Ｏシミュレータ部１２０に対し、その命令の演算結果を反映する。
【００１３】
Ｉ／Ｏシミュレータ部１２０は、ＣＰＵ以外の周辺装置の機能をソフトウェアでモデル化したものである。Ｉ／Ｏシミュレータ部１２０は、命令セットシミュレータ部１１０からの入出力要求に対応してデータを供給する他に、仕様により規定されるタイミングで、命令セットシミュレータ部１１０に対し割込み要求を出す。
【００１４】
この割込みの発生や入出力の変化をイベントとして、イベント管理部１５０は、イベントの発生タイミングを管理する。イベント管理部１５０は、シミュレーション時刻管理部１６０が管理するシミュレーション時刻に従って、イベントの発生タイミングを把握する。
【００１５】
シミュレーション時刻管理部１６０が管理するのは、シミュレーション実行にかかっている実時間ではなく、シミュレーションのターゲットとなっているシステム内で進行し把握される時間である。例えば、実際の組込み装置上で１００００命令実行するのに１ミリ秒かかっており、シミュレータで１００００命令実行するのに１０ミリ秒かかっていたとする。このとき、実時間では１０ミリ秒の時間が経過していたとしても、ターゲットの内部状態は１ミリ秒相当分しか進行していないため、シミュレーション時刻は１ミリ秒となる。シミュレーション時刻は、命令セットシミュレータ部１１０が命令をシミュレーション実行した結果、その命令実行にかかるマシンサイクル数をシミュレーション時刻管理部１６０に通知し、シミュレーション時刻管理部１６０は通知されたマシンサイクルに相当する時間を進める。
【００１６】
アイドル処理判定部１７０は、実行中のターゲットソフトウェア１３１がアイドル状態に遷移しているかどうかを判定する手段である。アイドル処理判定部１７０は、アイドル状態を検出した場合は、時間補正部１８０に対し、シミュレーション時刻を進めるよう要求する。
【００１７】
時間補正部１８０は、イベント管理部１５０に対して次のイベントが発生するまでの時間を問い合わせ、その結果をもとにシミュレーション時刻管理部１６０に対し時間を強制的に進める要求を出す。
【００１８】
（動作の説明）
次に動作について説明する。
図２は、命令セットシミュレータ部１１０に追加する処理内容を示したフローチャートである。
図３は、アイドル処理判定部１７０の処理内容を示したフローチャートである。
図４は、時間補正部１８０のフローチャートを示す。
図５は、図２、図３、図４の関係を示した。
【００１９】
命令セットシミュレータ部１１０は、通常は、ＣＰＵの命令フェッチ、デコード、データフェッチ、命令実行、結果格納の、５つの実行ステージを機能単位とし、プログラムカウンタを進めながら１命令につき１ループ回してシミュレーション実行を進めていく。図２に示す追加処理は、結果格納ステージの後に追加する。Ｓ１００では、命令セットシミュレータ部１１０は、今回の実行ループで実行した命令の種別を判定する。もしジャンプ命令を実行していた場合は、Ｓ１０１でアイドル処理判定部１７０を呼び出す。
【００２０】
図３に示すように、Ｓ２００では、アイドル処理判定部１７０は、実行したジャンプ命令のジャンプ先のアドレスが、ターゲットソフトウェア１３１のＣＰＵアイドル処理の命令コードが配置してあるアドレスの範囲内にあるかどうかを判定する。ＣＰＵアイドル処理のアドレスは、シンボル情報から取得することができる。もしジャンプ先がＣＰＵアイドル処理であることを検出した場合は、アイドル処理判定部１７０は、Ｓ２０１で時間補正部１８０を呼び出す。
【００２１】
図４は、時間補正部１８０の処理を表すフローチャートを示している。
なお、イベント管理部１５０の管理するイベントキュー、イベント発生時刻については、図６〜図８の説明で後述する。
Ｓ５００では、時間補正部１８０は、イベント管理部１５０が管理しているイベントキューを参照し、次のイベント発生時刻を取得する。イベントがなにも登録されていなければ０とする。次に、Ｓ５０１では、時間補正部１８０は、シミュレーション時刻管理部１６０に対し、Ｓ５００で取得した次のイベント発生時刻をシミュレーション時刻に加算するよう要求する。この結果、次回のイベント管理部１５０の定期処理において、必ずイベントが発生することになる。これにより割込みが発生すれば、ターゲットソフトウェア１３１はＣＰＵアイドル処理を即座に抜け出し、割込みハンドラ処理を実行する。
【００２２】
図６は、Ｉ／Ｏシミュレータ部１２０が、割込み等のＣＰＵの命令実行に対して非同期に発生する入出力事象を実現するために、その事象に対応するイベント（イベント識別子）を発生タイミング（イベント発生時刻）と共に、イベント管理部１５０に登録する処理を示したフローチャートである。本処理は、Ｉ／Ｏシミュレータ部１２０内で行われる割込み処理等に対応するイベント識別子と、その発生時刻（追加イベント発生時刻）とをパラメータとして呼び出される。なお、イベント発生時刻（後述する図５に記載）は、実時間ではなくシミュレーション時刻を基準とし、現在からどれだけ時間が経過した後にイベントを通知するかを、相対時間で指定するものである。
【００２３】
図７は、イベント管理部１５０の有するイベントキューの構造を示す図である。図６の動作の主体は、Ｉ／Ｏシミュレータ部１２０である。最初にＳ３００では、Ｉ／Ｏシミュレータ部１２０は、図７の構造のイベントキューを調べ、既にイベントが登録されているか確認する。イベントキューは、イベントを管理する個々の構造体要素をポインタで繋いだものである。イベント発生時刻は、ひとつ手前の構造体要素からの経過時間が格納される。最終要素のポインタはＮＵＬＬとなっている。イベントが何も登録されていない場合は、イベントキュー自体がＮＵＬＬになる。従って、Ｉ／Ｏシミュレータ部１２０はイベントキューがＮＵＬＬであれば、Ｓ３０８でキューにイベント要素を追加する。それ以外はＳ３０１に進む。Ｓ３０１では、イベントキューの先頭要素を参照し、イベント識別子とイベント発生時刻（キューイベント発生時刻）を取得する。Ｓ３０２では、キューイベント発生時刻と追加イベント発生時刻の値を比較する。キューイベント発生時刻の方が大きければ、キューイベント発生時刻から追加イベント発生時刻を引き、Ｓ３０８でキューイベントの要素の手前に追加イベントの要素を挿入する。追加イベント発生時刻の方が大きければ、Ｓ３０３で追加イベント発生時刻からキューイベント発生時刻を引き、Ｓ３０４でキューイベントの次の要素を参照する。そして、Ｓ３０５でイベント要素が終端のＮＵＬＬであるかチェックし、ＮＵＬＬであればＳ３０８でその手前（キューの最後）に追加イベントの要素を挿入する。次のイベント要素がある場合は、Ｓ３０２に戻り、同様の処理を繰り返すことにより、イベントが発生する順番にソートされ、さらに各イベント要素は手前のイベント発生時点からの経過時間で管理されるようになる。
【００２４】
図８は、イベント管理部１５０が、命令セットシミュレータ部１１０から定期的に呼ばれて、イベントの発生有無をチェックする処理を表すフローチャートである。図８の動作の主体は、イベント管理部１５０である。
また図９、図１０は、図８を説明するための図である。図９、図１０を参照しながら図８を説明する。
【００２５】
Ｓ４００で、イベント管理部１５０は、図７のイベントキューの要素を調べ、ＮＵＬＬであれば、Ｓ４１０で、シミュレーション時刻管理部１６０によって管理している現在のシミュレーション時刻を参照し、イベント処理時刻として内部に保存した後、処理を終了する。
イベント要素が有れば、Ｓ４０１に進む。以下では説明のためにシミュレーション時刻を用いて説明するが説明の便宜のため、時間の単位は「秒」とした。
【００２６】
Ｓ４０１では、シミュレーション時刻管理部１６０によって管理している現在のシミュレーション時刻（２０：１９：２３）を参照するとともに、
Ｓ４１０にて保存されている前回処理した時刻を示すイベント処理時刻（２０：１９：１８）を取得し、その差分によって経過時間（２３−１８＝５秒）を算出する。
Ｓ４０２でイベントキューの先頭要素を参照し、Ｓ４０３ではＳ４０１で求めた経過時間とキューイベント発生時刻を比較する。なお、前述のようにイベント発生時刻はひとつ手前の構造体要素（言い換えれば前回のイベント処理時刻（Ｓ４１０））からの経過時間であるので、経過時間とイベント発生時刻との比較が可能である。
【００２７】
（経過時間＜イベント発生時刻の場合）
図９に示すように経過時間（５秒）のほうが小さければ（例えばイベント発生時刻が８秒とする）、Ｓ４０４でキューイベント発生時刻（８秒）から経過時間（５秒）を引いて３秒を算出し、取得したイベントキューのイベント発生時刻を算出した差分（３秒）に書き換える。その後、Ｓ４１０に進み、イベント処理時刻を取得した現在の時刻（２０：１９：２３）に更新する。すなわち、取得した次回発生するべきイベントの発生時刻を差分（３秒）に書き換えることは、更新された現在の時刻（２０：１９：２３）からのイベント発生時刻としたことを意味する。
【００２８】
（経過時間＞イベント発生時刻の場合）
図１０はキューイベント発生時刻の方が小さい場合を示す。図１０に示すように、経過時間（５秒）よりも、キューイベント発生時刻（３秒とする）の方が小さいか同じであれば、イベント発生時刻が経過していることになる。このため、イベント管理部１５０は、Ｓ４０５以降のイベント通知処理に進む。
Ｓ４０５では、経過時間（５秒）からキューイベント発生時刻（３秒）を引いておく。そして、図１０に示すように、得られた差分（２秒）だけ、次のイベント発生時刻からを差し引いておく。これは、この後にＳ４１０に進んだときに、イベント処理時刻を取得した現在の時刻（２０：１９：２３）に更新するので、現在の時刻（２０：１９：２３）を基準に次回のイベント（「Ｔ−２」秒後）を発生させるためである。
Ｓ４０６では、ポインタを操作することによって該当キューイベント要素（イベント発生時刻に到達した要素）をイベントキューの接続構造から削除し、
Ｓ４０７では、該当キューイベントのイベント識別子（実行要求通知の一例）をＩ／Ｏシミュレータ部１２０に送信することで、指定されたイベントの発生時刻となったことを知らせる。この処理に対応し、Ｉ／Ｏシミュレータ部１２０では、イベント識別子に対応するイベントのシミュレーションが行われ、その結果割込みの要求が発生した場合は、命令セットシミュレータ部１１０に対し割込み要求を出力することになる。
Ｓ４０８では、イベント管理部１５０は、キューイベントの次の要素を参照し、
Ｓ４０９で次のイベント要素がないと判断されれば（Ｓ４０９のＮＯ）、Ｓ４１０（取得した現在のシミュレーション時刻に更新する処理）に進む。次のイベント要素があれば、Ｓ４０３に戻り、同様の処理を繰り返す。
【００２９】
本実施の形態１によれば、ＣＰＵアイドル処理から抜け出すきっかけとなる割込みの発生が早められる。このため、ＣＰＵアイドル処理として実行されるはずの命令列のシミュレーションがスキップされ、その結果、シミュレーションにかかる実時間が削減される。また、ＣＰＵアイドル処理の命令列を操作するものではないため、ＣＰＵアイドル処理が単純なビジーループ処理で実現されていても、または消費電力を低減するためにＣＰＵスリープ命令でＣＰＵの動作自体を停止する処理で実現されていても適用可能である。
図１１の（ａ）はターゲットシステムシミュレータ１００の方式を適用しない場合（実施前）を示し、（ｂ）はターゲットシステムシミュレータ１００の方式を適用する場合（実施後）を示す図である。図１１に示すように、１００ｍｓ間隔で発生するタイマ割込みに対応してハンドラが起動され、そこからタスク処理が行われた後、ＣＰＵアイドル状態に遷移する処理モデルとなっている。シミュレーション実行速度はターゲットの組込み装置の実行速度の１／１０、つまりシミュレーション時間は１０倍かかるものとする。本実施の形態１の方式を適用しない（ａ）の場合は、実時間１７００ｍｓの時点からＣＰＵアイドル処理となり、実時間２０００ｍｓの時点で割込みが発生することでＣＰＵアイドル処理を抜け出し、次の周期処理を行っている。一方、本実施の形態１を適用する（ｂ）の場合は、ＣＰＵアイドル処理に入るはずの１７００ｍｓの時点で、シミュレーション時刻を強制的に進めてしまうため、即座に割込みが発生し、次の周期処理が実行される。この例では、この周期処理を実行するためにかかるシミュレーションの実時間を３００ｍｓ削減できている。
【００３０】
実施の形態２．
図１２、図１３を参照して実施の形態２を説明する。
図１１は、実施の形態２におけるターゲットシステムシミュレータ１００−２の機能構成を示している。図１との違いは、図１２では実時間調整部１９０を有する点である。シミュレーション時刻管理部１６０がシミュレーション時刻を進める際に呼び出された場合に、実時間調整部１９０は、シミュレーション時刻が実時間よりも進んでいる場合にシミュレーション時刻を実時間に合わせるために、ターゲットシステムシミュレータ１００−２が実行されているホストコンピュータのＣＰＵリソースを解放する機能を持つ。
【００３１】
次に動作について説明する。
図１３は、実施の形態２で追加された実時間調整部１９０の処理内容を示したフローチャートである。
最初にＳ６００では、シミュレーション実行を開始してから経過した「実時間」を算出する。時間情報は、ホストコンピュータのタイマを、ホストコンピュータ上で動作しているＯＳのＡＰＩによって参照して取得する。起点となる実時間は、シミュレーション実行開始時に内部情報として保持されている。
次にＳ６０１で、シミュレーション時刻管理部１６０で管理されているシミュレーション時刻と、Ｓ６００で算出した実時間を比較する。高速なＣＰＵを備えるホストコンピュータ上において低速なＣＰＵを備えるターゲットの組込み装置をシミュレーションする場合、シミュレーション実行の速度が実際のターゲットの組込み装置の実行速度よりも早くなる場合がある。また、ＣＰＵアイドル処理に相当する時間をスキップしたことにより、シミュレーション時刻が実時間を追い越す場合がある。以上のような場合には、シミュレーション時刻の方が実時間よりも大きくなるため、そのときはＳ６０２以降の処理を実行する。
Ｓ６０２では、進んでいるシミュレーション時刻から実時間を引いて、相対的な差分時間を算出する。
そしてＳ６０３では、ホストコンピュータのＯＳのＡＰＩによって「差分時間の分だけ」シミュレータのプロセス、あるいはスレッドを停止させる。これにより、ターゲットシステムシミュレータ１００−２によるホストコンピュータのＣＰＵリソースの使用を放棄する。すなわち、シミュレーション時刻と実時間が一致したとき、シミュレータの実行が再開される。
【００３２】
本実施の形態２によれば、ターゲットの組込み装置が待機状態の時などの処理負荷が低い状態をシミュレーションする場合に、ＣＰＵアイドル処理の命令実行をスキップするためにシミュレーション時刻を強制的に進めるとともに、実時間に比べて進みすぎた時間分だけホストコンピュータのＣＰＵリソースを解放する。このため、シミュレーション実行時のホストコンピュータの処理負荷を下げられ、他のアプリケーション（例えばエディッタ）の実行により多くのＣＰＵリソースを割り当てることが可能となる。シミュレーションの方法としては、できるだけ早く結果を得るためにホストコンピュータのＣＰＵリソースを占有して処理を行う場合と、ターゲットの組込み装置と同じタイミングで動作を確認したい場合とがあり、本実施例は後者をより低負荷、より効率的に実現するものである。
【００３３】
実施の形態３．
図１４、図１５を参照して実施の形態３を説明する。実施の形態３は、コンピュータであるターゲットシステムシミュレータ１００、１００−２のハードウェア構成を説明する。
図１４は、コンピュータであるターゲットシステムシミュレータの外観の一例を示す図である。
図１５は、ターゲットシステムシミュレータのハードウェア資源の一例を示す図である。
【００３４】
外観を示す図１４において、ターゲットシステムシミュレータは、システムユニット８３０、ＣＲＴ（Ｃａｔｈｏｄｅ・Ｒａｙ・Ｔｕｂｅ）やＬＣＤ（液晶）の表示画面を有する表示装置８１３、キーボード８１４（Ｋｅｙ・Ｂｏａｒｄ：Ｋ／Ｂ）、マウス８１５、コンパクトディスク装置８１８（ＣＤＤ：Ｃｏｍｐａｃｔ  Ｄｉｓｋ  Ｄｒｉｖｅ）などのハードウェア資源を備え、これらはケーブルや信号線で接続されている。システムユニット８３０はネットワークに接続している。
【００３５】
またハードウェア資源を示す図１５において、ターゲットシステムシミュレータは、プログラムを実行するＣＰＵ８１０（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を備えている。ＣＰＵ８１０は、バス８２５を介してＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）８１１、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）８１２、表示装置８１３、キーボード８１４、マウス８１５、通信ボード８１６、ＣＤＤ８１８、磁気ディスク装置８２０と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置８２０の代わりに、光ディスク装置、フラッシュメモリなどの記憶装置でもよい。
【００３６】
ＲＡＭ８１２は、揮発性メモリの一例である。ＲＯＭ８１１、ＣＤＤ８１８、磁気ディスク装置８２０等の記憶媒体は、不揮発性メモリの一例である。これらは、「記憶装置」あるいは記憶部、格納部、バッファの一例である。通信ボード８１６、キーボード８１４などは、入力部、入力装置の一例である。また、通信ボード８１６、表示装置８１３などは、出力部、出力装置の一例である。通信ボード８１６は、ネットワークに接続されている。
【００３７】
磁気ディスク装置８２０には、オペレーティングシステム８２１（ＯＳ）、ウィンドウシステム８２２、プログラム群８２３、ファイル群８２４が記憶されている。プログラム群８２３のプログラムは、ＣＰＵ８１０、オペレーティングシステム８２１、ウィンドウシステム８２２により実行される。
【００３８】
上記プログラム群８２３には、以上の実施の形態の説明において「〜部」として説明した機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ８１０により読み出され実行される。
【００３９】
ファイル群８２４には、以上の実施の形態の説明において、「〜の判定結果」、「〜の算出結果」、「〜の抽出結果」、「〜の生成結果」、「〜の処理結果」として説明した情報や、データや信号値や変数値やパラメータなどが、「〜ファイル」や「〜データベース」の各項目として記憶されている。「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ８１０によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのＣＰＵの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
【００４０】
また、以上に述べた実施の形態の説明において、データや信号値は、ＲＡＭ８１２のメモリ、ＣＤＤ８１８のコンパクトディスク、磁気ディスク装置８２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ（Ｄｉｇｉｔａｌ・Ｖｅｒｓａｔｉｌｅ・Ｄｉｓｋ）等の記録媒体に記録される。また、データや信号は、バス８２５や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【００４１】
また、以上の実施の形態の説明において、「〜部」として説明したものは、「〜手段」、であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明したものは、ソフトウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ８１０により読み出され、ＣＰＵ８１０により実行される。すなわち、プログラムは、以上に述べた「〜部」としてコンピュータを機能させるものである。あるいは、以上に述べた「〜部」の手順や方法をコンピュータに実行させるものである。
【００４２】
以上の実施の形態では、シミュレーション装置としてのターゲットシステムシミュレータを説明したが、のターゲットシステムシミュレータはシミュレーションプログラムとしても把握できることは以上の説明から当然である。
【００４３】
以上の実施の形態では以下を特徴とするシミュレーション装置を説明した。
（１）ターゲットシステムシミュレータ１００は、ターゲットの組込み装置のハードウェア構成をソフトウェアで実現したもので、ターゲットの組込み装置用にコンパイル、リンクされたターゲットソフトウェア１３１のＣＰＵ命令コードを解釈し実行する命令セットシミュレータ部１１０と、ターゲットの組込み装置のハードウェア仕様に従って命令セットシミュレータ部１１０に対して割込みや入出力を仮想的に発生させるＩ／Ｏシミュレータ部１２０との組み合わせによって成り立っている。
（２）命令セットシミュレータ部１１０がターゲットソフトウェア１３１のＣＰＵ命令コードに従い操作する対象となるターゲットメモリ１３０とターゲットレジスタ１４０を備え、ターゲットソフトウェア１３１はターゲットメモリ１３０内にロードされている。
（３）Ｉ／Ｏシミュレータ部１２０の割込みや入出力をイベントとして一元管理するイベント管理部１５０と、イベントの発生タイミングを把握するためのシミュレーション時刻管理部１６０を備える。
（４）命令セットシミュレータ部１１０が実行中の命令コードがＣＰＵアイドル処理に含まれるものか判別するアイドル処理判定部１７０と、ＣＰＵアイドル処理を検出した場合にシミュレーション時刻を強制的に進める時間補正部１８０を備える。
（５）ホストコンピュータのアプリケーションとしてターゲットシミュレータは実行される。
【００４４】
以上の実施の形態では以下を特徴とするシミュレーション装置を説明した。
（１）命令セットシミュレータ部１１０がジャンプ命令を実行した際に、アイドル処理判定部１７０を呼び出す。
（２）命令セットシミュレータ部１１０で実行しているターゲットソフトウェア１３１のＣＰＵ命令コードがＣＰＵアイドル処理に含まれることをアイドル処理判定部１７０が検出した場合、時間補正部１８０によってイベント管理部１５０に登録されているイベントで最も早いタイミングで発生するものの発生時刻まで、シミュレーション時刻管理部１６０で管理しているシミュレーション時刻を強制的に進める。
【００４５】
以上の実施の形態では以下を特徴とするシミュレーション装置を説明した。
（１）シミュレーション時刻と実時間を合わせるためにターゲットシステムシミュレータ１００の動作／停止状態を制御する実時間調整部１９０を備える。
【００４６】
以上の実施の形態では以下を特徴とするシミュレーション装置を説明した。
シミュレーション時刻が実時間よりも進んでいる場合に、実時間調整部１９０によって進行している差分時間分だけターゲットシステムシミュレータ１００の実行を停止させ、ホストコンピュータのＣＰＵリソースを解放する。
【符号の説明】
【００４７】
１００，１００−２  ターゲットシステムシミュレータ、１１０  命令セットシミュレータ部、１２０  Ｉ／Ｏシミュレータ部、１３０  ターゲットメモリ、１３１  ターゲットソフトウェア、１４０  ターゲットレジスタ、１５０  イベント管理部、１６０  シミュレーション時刻管理部、１７０  アイドル処理判定部、１８０  時間補正部、１９０  時間調整部。
【図１】
0005542643.tif 000002
【図２】
0005542643.tif 000003
【図３】
0005542643.tif 000004
【図４】
0005542643.tif 000005
【図５】
0005542643.tif 000006
【図６】
0005542643.tif 000007
【図７】
0005542643.tif 000008
【図８】
0005542643.tif 000009
【図９】
0005542643.tif 000010
【図１０】
0005542643.tif 000011
【図１１】
0005542643.tif 000012
【図１２】
0005542643.tif 000013
【図１３】
0005542643.tif 000014
【図１４】
0005542643.tif 000015
【図１５】
0005542643.tif 000016