(57)【要約】【課題】被試験プログラムをエミュレータ上で実行させた時の動作を効率的に再現すること。【解決手段】シミュレータ装置１００は、新規エミュレーションを行うことにより、各モデルＭ１〜Ｍ４から出力される動作ログを処理順に示すログ情報１０２を取得する。シミュレータ装置１００は、ログ情報１０２に基づいて、各モデルＭ１〜Ｍ４に、次に動作可能なモデルと動作内容を識別する動作処理情報を通知する。シミュレータ装置１００は、通知した動作処理情報に基づいて、各モデルＭ１〜Ｍ４に動作するか否かを判断させる。また、シミュレータ装置１００は、各モデルＭ１〜Ｍ４が動作すると判断した場合に、各モデルＭ１〜Ｍ４に動作処理情報から識別される動作内容の処理を実行させる。【選択図】図１
2014182518.tif 000002
【特許請求の範囲】
【請求項１】
被試験プログラムを実行するプロセッサの動作を模擬するモデルと周辺デバイスの動作を模擬するモデルとを含むシステム上で前記被試験プログラムを実行させる実行部と、
前記被試験プログラムを実行させた結果得られる、各モデルから出力される動作ログを処理順に示すログ情報を取得する取得部と、
前記被試験プログラムを再実行中に、前記ログ情報に基づいて、次に動作可能なモデルと動作内容を識別する動作処理情報を前記各モデルに通知する通知部と、
前記各モデルに通知された前記動作処理情報に基づいて、前記各モデルに動作するか否かを判断させ、前記各モデルが動作すると判断した場合に、前記各モデルに前記動作内容の処理を実行させる制御部と、
を有することを特徴とするシミュレータ装置。
【請求項２】
前記通知部は、
前記システム内のいずれかのモデルから前記動作処理情報に対応する動作ログが出力された場合、前記ログ情報に基づいて、次に動作可能なモデルと動作内容を識別する動作処理情報を前記各モデルに通知することを特徴とする請求項１に記載のシミュレータ装置。
【請求項３】
前記通知部は、
次に動作可能なモデルが前記周辺デバイスの動作を模擬するデバイスモデルの場合、前記次に動作可能なデバイスモデルと動作内容を識別する動作処理情報を、前記システム内の各デバイスモデルに通知し、前記システム内のいずれかのデバイスモデルから前記動作処理情報に対応する動作ログが出力された場合に、前記ログ情報に基づいて、次に動作可能なデバイスモデルと動作内容を識別する動作処理情報を前記各デバイスモデルに通知することを特徴とする請求項２に記載のシミュレータ装置。
【請求項４】
前記通知部は、
次に動作可能なモデルが前記プロセッサの動作を模擬するプロセッサモデルの場合、前記次に動作可能なプロセッサモデルと動作内容を識別する動作処理情報を、前記システム内の各プロセッサモデルに通知し、前記システム内のいずれかのプロセッサモデルから前記動作処理情報に対応する動作ログが出力された場合に、前記ログ情報に基づいて、次に動作可能なプロセッサモデルと動作内容を識別する動作処理情報を前記各プロセッサモデルに通知することを特徴とする請求項２または３に記載のシミュレータ装置。
【請求項５】
前記プロセッサモデルから出力される割り込み処理の動作ログには、前記割り込み処理に移行した際のプログラムカウンタの値が含まれており、
前記通知部は、
次に動作可能な割り込み処理の動作内容と当該割り込み処理に移行した際のプログラムカウンタの値を識別する動作処理情報を、前記各プロセッサモデルに通知することを特徴とする請求項４に記載のシミュレータ装置。
【請求項６】
被試験プログラムを実行するプロセッサの動作を模擬するモデルと、周辺デバイスの動作を模擬するモデルとを含むシステム上で前記被試験プログラムを実行させるコンピュータが、
前記被試験プログラムを実行させた結果得られる、各モデルから出力される動作ログを処理順に示すログ情報を取得し、
前記被試験プログラムを再実行中に、前記ログ情報に基づいて、次に動作可能なモデルと動作内容を識別する動作処理情報を前記各モデルに通知し、
前記各モデルに通知された前記動作処理情報に基づいて、前記各モデルに動作するか否かを判断させ、前記各モデルが動作すると判断した場合に、前記各モデルに前記動作内容の処理を実行させる、
処理を実行することを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シミュレータ装置および制御方法に関する。
【背景技術】
【０００２】
近年、製品のライフサイクルが短くなり、一つの企業で製品を構成する全ての部品を製造することが減少し、部品を調達して組み立て、ソフトウェアを組み込むことにより、一つの製品として組み立てることが多くなっている。また、大規模な製品には沢山のソフトウェアが組み込まれており、その中には製品が完成してからでないとデバッグできないものが含まれており、デバッグ期間の長期化を招いている。
【０００３】
例えば、製品の試作品を複数作成して、同時にデバッグを行うことで、デバッグ期間の短縮化を図ることができる。ところが、試作品の作成にコストがかかり、ソフトウェアに改版等があった場合に、再度、デバッグし直すことになり工数が増加し、製品の市場投入の遅れやコストアップにつながる。このため、製品の動作や機能を模擬するエミュレータ上でソフトウェアを実行させて、ソフトウェアのデバッグを行う技術がある。
【０００４】
関連する先行技術としては、例えば、モニタモードでは共有オブジェクトごとに分割した形式でプログラムの実行動作を記録し、再演モードでは記録データをもとに指定事象の再現に必須な命令の動作だけを再現するようプロセスの実行を制御するためのものがある。また、並列プログラムの実行時のイベントの発生順序を記録し、再実行時に記録した発生順序と異なるイベントが発生した処理の流れを中断し、中断したイベントの実行が期待される処理に達したことを認識するとイベント固有情報を渡して再実行させる技術がある。また、外部事象の生成を開始する種々のタイミングをデバッグ対象プログラムと連動させて監視し、シングルチップマイコンのＩ／Ｏポ−トに当該外部事象信号を供給する技術がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平０３−２４０１３７号公報
【特許文献２】特開平０９−２１２３８５号公報
【特許文献３】特開平０５−２８９９０１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来技術によれば、被試験プログラムをエミュレータ上で実行させる場合、例えば、被試験プログラムに何らかの不具合が発生した時と同じ動作をエミュレータ上で再現することが難しいという問題がある。
【０００７】
１つの側面では、本発明は、被試験プログラムをエミュレータ上で実行させた時の動作を効率的に再現するシミュレータ装置および制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の一側面によれば、被試験プログラムを実行するプロセッサの動作を模擬するモデルと周辺デバイスの動作を模擬するモデルとを含むシステム上で前記被試験プログラムを実行させた結果得られる各モデルから出力される動作ログを処理順に示すログ情報を取得し、前記被試験プログラムを再実行中に、前記ログ情報に基づいて、次に動作可能なモデルと動作内容を識別する動作処理情報を前記各モデルに通知し、前記各モデルに通知された前記動作処理情報に基づいて、前記各モデルに動作するか否かを判断させ、前記各モデルが動作すると判断した場合に、前記各モデルに前記動作内容の処理を実行させるシミュレータ装置および制御方法が提案される。
【発明の効果】
【０００９】
本発明の一態様によれば、被試験プログラムをエミュレータ上で実行させた時の動作を効率的に再現することができるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施の形態にかかる制御方法の一実施例を示す説明図である。
【図２】図２は、シミュレータ装置１００のハードウェア構成例を示すブロック図である。
【図３Ａ】図３Ａは、ログ情報ＬＤの具体例を示す説明図（その１）である。
【図３Ｂ】図３Ｂは、ログ情報ＬＤの具体例を示す説明図（その２）である。
【図４】図４は、動作再現用ファイルＲＦの具体例を示す説明図である。
【図５】図５は、第１動作処理情報リストＬ１の具体例を示す説明図である。
【図６】図６は、第２動作処理情報リストＬ２の具体例を示す説明図である。
【図７】図７は、シミュレータ装置１００の機能的構成例を示すブロック図である。
【図８Ａ】図８Ａは、再現エミュレーションの実行結果の具体例を示す説明図（その１）である。
【図８Ｂ】図８Ｂは、再現エミュレーションの実行結果の具体例を示す説明図（その２）である。
【図９】図９は、シミュレータ装置１００の生成処理手順の一例を示すフローチャートである。
【図１０】図１０は、シミュレータ装置１００の第１通知処理手順の一例を示すフローチャートである。
【図１１】図１１は、シミュレータ装置１００の第２通知処理手順の一例を示すフローチャートである。
【図１２】図１２は、シミュレータ装置１００のデバイスモデル制御処理手順の一例を示すフローチャートである。
【図１３】図１３は、デバイスモデルのスレッドの処理手順の一例を示すフローチャートである。
【図１４】図１４は、シミュレータ装置１００のＣＰＵモデル制御処理手順の一例を示すフローチャートである。
【図１５】図１５は、ＣＰＵモデルの割り込み処理の具体的処理手順の一例を示すフローチャートである。
【図１６】図１６は、ＣＰＵモデルのリード処理またはライト処理の具体的処理手順の一例を示すフローチャートである。
【図１７】図１７は、エミュレータＥＭ上に作成されるＮＡＳの構成例を示す説明図である。
【図１８】図１８は、ＮＡＳの動作例を示す説明図である。
【図１９】図１９は、ファームウェアの具体例を示す説明図である。
【発明を実施するための形態】
【００１１】
以下に図面を参照して、本発明にかかるシミュレータ装置および制御方法の実施の形態を詳細に説明する。
【００１２】
（制御方法の一実施例）
図１は、実施の形態にかかる制御方法の一実施例を示す説明図である。図１において、シミュレータ装置１００は、ある装置のハードウェアの動作を模擬するモデルを含むシステム上で被試験プログラムを実行させる機能を有するコンピュータである。
【００１３】
装置は、例えば、開発対象となる製品である。システムは、装置の動作や機能を模擬する、いわゆるエミュレータである。ハードウェアは、例えば、プロセッサや周辺デバイスである。被試験プログラムは、試験対象となるソフトウェアであり、例えば、ファームウェアである。
【００１４】
ここで、エミュレータ上で被試験プログラムを実行させた結果、何らかの不具合が発生した場合に、不具合の原因を突き止めるために被試験プログラムを再実行させて、不具合が発生した時のモデルの動作を再現したい場合がある。ところが、エミュレータ上の各モデルは、別々のスレッドで動作しており、各スレッドの動作時間等の要因によりスレッドの実行順序は一定にならない。
【００１５】
例えば、スレッドの切り替えをＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が管理する場合、スレッドの切り替えはＯＳの状態等に左右されるため、スレッドの実行順序は一定にならない場合がある。また、モデルを一括管理するスケジューラを設けることが考えられるが、スケジューラ自体が実ＣＰＵに対するオーバーヘッド負荷となりエミュレーションの長期化を招いてしまう。
【００１６】
そこで、本実施の形態では、シミュレータ装置１００は、エミュレータ上で被試験プログラムを実行させた結果得られるログ情報に基づいて、被試験プログラムを再実行させる際に各モデルに再現させる動作の処理順序を特定する。そして、シミュレータ装置１００は、各モデルに再現させる動作の処理順序に従って、次に動作可能なモデルの処理内容を示す情報を各モデルに通知し、各モデルに次に動作するか否かを判断させる。これにより、エミュレータ上で被試験プログラムを実行させた時の動作を効率的に再現する。以下、シミュレータ装置１００の制御処理手順例（１）〜（４）について説明する。
【００１７】
図１の例では、モデルＭ１〜Ｍ４を含むシステム１１０が示されている。モデルＭ１は、ファームウェア１０１を実行するＣＰＵの動作を模擬するモデルであり、ＰｓｅｕｄｏＣＰＵプログラムにより実現される。ファームウェア１０１は、被試験プログラムであり、複数のスレッドを含む（図１の例では、Ｔｈｒｅａｄ１，Ｔｈｒｅａｄ２，Ｔｈｒｅａｄ３）。
【００１８】
モデルＭ２〜Ｍ４は、ファームウェア１０１からアクセス要求を受け付ける周辺デバイスの動作を模擬するモデルである。モデルＭ２はＰｓｅｕｄｏＤｅｖｉｃｅ１プログラムにより実現され、モデルＭ３はＰｓｅｕｄｏＤｅｖｉｃｅ２プログラムにより実現され、モデルＭ４はＰｓｅｕｄｏＤｅｖｉｃｅ３プログラムにより実現される。
【００１９】
以下の説明では、システム１１０上で最初に被試験プログラムを実行させることを「新規エミュレーション」と表記する場合がある。また、システム１１０上で被試験プログラムを再実行させることを「再現エミュレーション」と表記する場合がある。
【００２０】
（１）シミュレータ装置１００は、新規エミュレーションを行うことにより、各モデルＭ１〜Ｍ４から出力される動作ログを処理順に示すログ情報１０２を取得する。具体的には、例えば、シミュレータ装置１００は、Ｌｏｇ書き込み用プログラム１２０により、各モデルＭ１〜Ｍ４から出力される動作ログを処理順に取得して蓄積することでログ情報１０２を取得する。
【００２１】
各モデルＭ１〜Ｍ４から出力される動作ログには、例えば、動作したモデルと動作内容を示す情報が含まれている。また、モデルＭ１の動作ログのうち、モデルＭ２〜Ｍ４からの割り込みを受け付けて実行された割り込み処理の動作ログには、割り込み処理に移行した際のプログラムカウンタの値が含まれている。
【００２２】
プログラムカウンタは、プロセッサが次に実行すべき命令を記憶したメモリ上のアドレスを格納するレジスタである。プログラムカウンタの値（以下、「ＰＣ値」という）は、プログラムカウンタに格納されている値である。各モデルＭ２〜Ｍ４からモデルＭ１への割り込みは、Ｐｓｅｕｄｏ割り込みコントローラプログラム１３０により実現される。
【００２３】
（２）シミュレータ装置１００は、タイミング調整機能用プログラム１４０により、新規エミュレーション時に取得したログ情報１０２に基づいて、各モデルＭ１〜Ｍ４に動作処理情報を通知する。動作処理情報は、次に動作可能なモデルと動作内容を識別する情報である。また、次に動作可能なモデルの動作内容が割り込み処理の場合、動作処理情報には、その割り込み処理に移行した際のＰＣ値を識別する情報が含まれる。
【００２４】
（３）シミュレータ装置１００は、各モデルＭ１〜Ｍ４に通知した動作処理情報に基づいて、各モデルＭ１〜Ｍ４に動作するか否かを判断させる。また、シミュレータ装置１００は、各モデルＭ１〜Ｍ４が動作すると判断した場合に、各モデルＭ１〜Ｍ４に動作処理情報から識別される動作内容の処理を実行させる。
【００２５】
（４）シミュレータ装置１００は、モデルＭ１〜Ｍ４のいずれかのモデルから動作処理情報に対応する動作ログが出力された場合に、ログ情報１０２に基づいて、次に動作可能なモデルと動作内容を識別する動作処理情報を各モデルＭ１〜Ｍ４に通知する。これにより、各モデルＭ１〜Ｍ４に通知された動作処理情報に対応する処理の実行が完了した場合に、次の動作に移行することができる。
【００２６】
このように、シミュレータ装置１００によれば、システム１１０上でファームウェア１０１を実行させた結果得られるログ情報１０２に基づいて、再現エミュレーション時に各モデルＭ１〜Ｍ４に再現させる動作を処理順に特定することができる。また、シミュレータ装置１００によれば、ログ情報１０２に基づいて、次に動作可能なモデルと動作内容を識別する動作処理情報を各モデルＭ１〜Ｍ４に通知することができる。
【００２７】
また、シミュレータ装置１００によれば、各モデルＭ１〜Ｍ４に通知された動作処理情報に基づいて、各モデルＭ１〜Ｍ４に動作するか否かを判断させることができる。また、シミュレータ装置１００によれば、各モデルＭ１〜Ｍ４が動作すると判断した場合に、各モデルＭ１〜Ｍ４に動作処理情報から特定される動作内容の処理を実行させることができる。これにより、新規エミュレーション時と同様のタイミングで、新規エミュレーション時と同様の動作内容の処理を各モデルＭ１〜Ｍ４に実行させることができる。
【００２８】
また、シミュレータ装置１００によれば、各モデルＭ１〜Ｍ４に通知した動作処理情報に対応する動作ログがいずれかのモデルから出力された場合に、次に動作可能なモデルと動作内容を識別する動作処理情報を各モデルＭ１〜Ｍ４に通知することができる。これにより、新規エミュレーション時と同様の処理順序で、新規エミュレーション時と同様の動作内容の処理を各モデルＭ１〜Ｍ４に実行させることができる。
【００２９】
（シミュレータ装置１００のハードウェア構成例）
図２は、シミュレータ装置１００のハードウェア構成例を示すブロック図である。図２において、シミュレータ装置１００は、ＣＰＵ２０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、磁気ディスクドライブ２０４と、磁気ディスク２０５と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０６と、ディスプレイ２０７と、キーボード２０８と、マウス２０９と、を有する。また、各構成部はバス２００によってそれぞれ接続されている。
【００３０】
ここで、ＣＰＵ２０１は、シミュレータ装置１００の全体の制御を司る。ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶する。ＲＡＭ２０３は、ＣＰＵ２０１のワークエリアとして使用される。磁気ディスクドライブ２０４は、ＣＰＵ２０１の制御にしたがって磁気ディスク２０５に対するデータのリード／ライトを制御する。磁気ディスク２０５は、磁気ディスクドライブ２０４の制御で書き込まれたデータを記憶する。
【００３１】
Ｉ／Ｆ２０６は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２１０に接続され、ネットワーク２１０を介して、他のコンピュータに接続される。そして、Ｉ／Ｆ２０６は、ネットワーク２１０と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。Ｉ／Ｆ２０６には、例えば、モデムやＬＡＮアダプタなどを採用することができる。
【００３２】
ディスプレイ２０７は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ２０７は、例えば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００３３】
キーボード２０８は、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス２０９は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。
【００３４】
なお、シミュレータ装置１００は、例えば、上述した構成部のほかに、光ディスクドライブ、光ディスク、スキャナ、プリンタ等を有することにしてもよい。また、シミュレータ装置１００は、上述した構成部のうち、例えば、ディスプレイ２０７、キーボード２０８、マウス２０９等を有していなくてもよい。
【００３５】
以下の説明では、プロセッサの動作を模擬するモデルと周辺デバイスの動作を模擬するモデルとを含むシステムを「エミュレータＥＭ」と表記する場合がある。また、プロセッサの動作を模擬するモデルを「ＣＰＵモデル」と表記し、周辺デバイスの動作を模擬するモデルを「デバイスモデル」と表記する場合がある。また、エミュレータＥＭ上で実行させる被試験プログラムを「被試験プログラムＴＰ」と表記する場合がある。
【００３６】
（ログ情報ＬＤの具体例）
次に、ログ情報ＬＤの具体例について説明する。ログ情報ＬＤは、新規エミュレーションの実行結果であり、例えば、図１に示したログ情報１０２に相当する。
【００３７】
図３Ａおよび図３Ｂは、ログ情報ＬＤの具体例を示す説明図である。図３Ａおよび図３Ｂにおいて、ログ情報ＬＤは、エミュレータＥＭ上で被試験プログラムＴＰを実行させた場合に各ＣＰＵモデル、デバイスモデルから出力される動作ログ（例えば、動作ログ３００−１〜３００−１０）を処理順に示す情報である。動作ログには、動作したＣＰＵモデル、デバイスモデル、動作内容を特定する情報が含まれている。
【００３８】
例えば、動作ログに含まれる「ＰＣＩ…Ｗｒｉｔｅ（または、Ｒｅａｄ）…」や「ｖ＝…ｐｃ＝…」は、ＣＰＵモデルの動作内容を特定する情報である。また、「ｖ＝…ｐｃ＝…」は、ＣＰＵモデルの割り込み処理を特定する情報であり、ｐｃは、デバイスモデルから割り込みを受け付けて割り込み処理に移行した際のＰＣ値を示す。なお、動作ログの記述形式は、動作の実行主体と動作内容を特定可能であればよく、図３に示した記述形式に限らない。
【００３９】
また、動作ログに含まれる「ＬＡＮＣ０  ＩＮＴ」や「ＴＩＭＥＲ０  ＩＮＴ」などは、デバイスモデルのデバイス名と動作内容を特定する情報である。なお、動作ログの先頭に付与された［］の部分は、動作ログが出力された時刻を示す。
【００４０】
（動作再現用ファイルＲＦ）
次に、動作再現用ファイルＲＦの具体例について説明する。動作再現用ファイルＲＦは、ログ情報ＬＤをもとに生成される情報であり、再現エミュレーションに用いられる。
【００４１】
図４は、動作再現用ファイルＲＦの具体例を示す説明図である。図４において、動作再現用ファイルＲＦは、エミュレータＥＭ上で被試験プログラムＴＰを再実行させる際に、各ＣＰＵモデル、デバイスモデルに再現させる動作を特定する動作処理情報（例えば、動作処理情報４００−１〜４００−１０）を処理順に示す情報である。
【００４２】
ここで、動作処理情報は、エミュレータＥＭ上で被試験プログラムＴＰを実行させた場合に各モデル（ＣＰＵモデルまたはデバイスモデル）から出力された動作ログから、動作したモデル、動作内容を特定する情報以外の情報が削除されたものである。例えば、動作処理情報４００−１は、図３Ａに示した動作ログ３００−１から時刻を示す情報（［］の部分）が削除されたものである。
【００４３】
（第１動作処理情報リストＬ１の具体例）
次に、第１動作処理情報リストの具体例について説明する。第１動作処理情報リストＬ１は、再現用ファイルＲＦをもとに作成されるＣＰＵモデル用の情報であり、再現エミュレーションに用いられる。
【００４４】
図５は、第１動作処理情報リストＬ１の具体例を示す説明図である。図５において、第１動作処理情報リストＬ１は、エミュレータＥＭ上で被試験プログラムＴＰを再実行させる際に、ＣＰＵモデルに再現させる動作を特定する動作処理情報を処理順に示す情報である。各動作処理情報には、各動作処理情報から特定される動作の処理順序を示すリスト番号（ここでは、ＬＩＳＴ［０］〜［ｍ］）が付与されている。例えば、「ｖ＝ｅ１  ｉ＝０  ｐｃ＝００９ｅ１５０４」は、ＰＣ値が「ｐｃ＝００９ｅ１５０４」の時に「ｖ＝ｅ１」の割り込みが発生することを示す。
【００４５】
（第２動作処理情報リストＬ２の具体例）
次に、第２動作処理情報リストの具体例について説明する。第２動作処理情報リストＬ２は、再現用ファイルＲＦをもとに作成されるデバイスモデル用の情報であり、再現エミュレーションに用いられる。
【００４６】
図６は、第２動作処理情報リストＬ２の具体例を示す説明図である。図６において、第２動作処理情報リストＬ２は、エミュレータＥＭ上で被試験プログラムＴＰを再実行させる際に、各デバイスモデルに再現させる動作を特定する動作処理情報を処理順に示す情報である。各動作処理情報には、各動作処理情報から特定される動作の処理順序を示すリスト番号（ここでは、ＬＩＳＴ［０］〜［ｎ］）が付与されている。
【００４７】
例えば、「ＬＡＮＣ０  ＩＮＴ」は、ＬＡＮＣ０から割り込みが出力されるのを待つことを示す。「ＩＮＴＣ０  ＩＮＴ（ｅ１）」は、ＩＮＴＣ０がＬＡＮＣ０の割り込みをＣＰＵに通知するのを待つことを示す。「ＴＩＭＥＲ０  ＩＮＴ」は、ＴＩＭＥＲ０から割り込みが出力されるのを待つことを示す。「ＩＮＴＣ０  ＩＮＴ（ｅｆ）」は、ＩＮＴＣ０がＴＩＭＥＲ０の割り込みをＣＰＵに通知するのを待つことを示す。「ＨＤＣ０：ＩＮＴ」は、ＨＤＣ０から割り込みが出力されるのを待つことを示す。「ＩＮＴＣ０  ＩＮＴ（２ｆ）」はＩＮＴＣ０がＨＤＣ０の割り込みをＣＰＵに通知するのを待つことを示す。
【００４８】
（シミュレータ装置１００の機能的構成例）
図７は、シミュレータ装置１００の機能的構成例を示すブロック図である。図７において、シミュレータ装置１００は、実行部７０１と、取得部７０２と、生成部７０３と、通知部７０４と、制御部７０５と、出力部７０６と、を含む構成である。各機能部は、具体的には、例えば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５等の記憶装置に記憶されたプログラムをＣＰＵ２０１に実行させることにより、または、Ｉ／Ｆ２０６により、その機能を実現する。また、各機能部の処理結果は、例えば、ＲＡＭ２０３、磁気ディスク２０５等の記憶装置に記憶される。
【００４９】
実行部７０１は、エミュレータＥＭ上で被試験プログラムＴＰを実行させる機能を有する。エミュレータＥＭは、プロセッサの動作を模擬するモデルと周辺デバイスの動作を模擬するモデルとを含むシステムであり、例えば、図１に示したシステム１１０である。具体的には、例えば、実行部７０１は、エミュレータＥＭ上のＣＰＵモデルに被試験プログラムを実行させる。
【００５０】
なお、エミュレータＥＭ上に複数のＣＰＵモデルが存在する場合、実行部７０１は、例えば、エミュレータＥＭ上の複数のＣＰＵモデルのそれぞれに被試験プログラムを実行させる。以下の説明では、エミュレータＥＭ上にＣＰＵモデルが一つしかない場合を想定する。
【００５１】
取得部７０２は、ログ情報ＬＤを取得する機能を有する。ログ情報ＬＤは、エミュレータＥＭ上で被試験プログラムＴＰを実行させた結果得られる各モデル（ＣＰＵモデルまたはデバイスモデル）から出力される動作ログを処理順に示す情報である。
【００５２】
ＣＰＵモデルの動作ログには、例えば、動作したＣＰＵモデルを特定するＣＰＵ名や、ＣＰＵモデルの動作内容を特定する動作名（例えば、ＲｅｃｅｉｖｅＩＮＴ）などが含まれる。また、ＣＰＵモデルの動作内容が割り込み処理の場合は、動作ログには、デバイスモデルから割り込みを受け付けて割り込み処理に移行した際のＰＣ値が含まれる。
【００５３】
また、デバイスモデルの動作ログには、例えば、動作したデバイスモデルを特定するデバイス名（例えば、ＬＡＮＣ）や、デバイスモデルの動作内容を特定する動作名（例えば、ＩＮＴ）などが含まれる。なお、エミュレータＥＭ上にＣＰＵモデルが一つしかない場合には、例えば、ＣＰＵモデルの動作ログにはＣＰＵ名が含まれていなくてもよい。
【００５４】
具体的には、例えば、取得部７０２は、エミュレータＥＭ上で実行された新規エミュレーションの実行結果であるログ情報ＬＤ（例えば、図３Ａ、図３Ｂ参照）を取得する。なお、ログ情報ＬＤは、例えば、図２に示したキーボード２０８やマウス２０９を用いたユーザの操作入力によりシミュレータ装置１００に直接入力されることにしてもよい。
【００５５】
生成部７０３は、取得部７０２によって取得されたログ情報ＬＤに基づいて、動作再現用ファイルＲＦを生成する機能を有する。動作再現用ファイルＲＦは、再現エミュレーション時に、各モデル（ＣＰＵモデルまたはデバイスモデル）に再現させる動作を特定する動作処理情報を処理順に示す情報である。具体的には、例えば、生成部７０３は、ログ情報ＬＤに含まれる動作ログから、動作したＣＰＵモデル、デバイスモデル、動作内容を特定する情報以外の情報を削除することにより、動作再現用ファイルＲＦを生成する。
【００５６】
また、生成部７０３は、生成した動作再現用ファイルＲＦに基づいて、第１動作処理情報リストＬ１を生成する機能を有する。第１動作処理情報リストＬ１は、再現エミュレーション時にＣＰＵモデルに再現させる動作を特定する動作処理情報を処理順に示す情報である。具体的には、例えば、生成部７０３は、動作再現用ファイルＲＦからＣＰＵモデルに対応する動作処理情報を処理順に抽出することにより、第１動作処理情報リストＬ１を生成する（例えば、図５参照）。
【００５７】
より具体的には、例えば、生成部７０３は、動作再現用ファイルＲＦからＣＰＵモデルの割り込み処理に対応する動作処理情報を処理順に抽出することにより、第１動作処理情報リストＬ１を生成することにしてもよい。第１動作処理情報リストＬ１は、例えば、エミュレータＥＭ上のＣＰＵモデルがアクセス可能な記憶領域に記憶される。
【００５８】
また、生成部７０３は、生成した動作再現用ファイルＲＦに基づいて、第２動作処理情報リストＬ２を生成する機能を有する。第２動作処理情報リストＬ２は、再現エミュレーション時に各デバイスモデルに再現させる動作を特定する動作処理情報を処理順に示す情報である。具体的には、例えば、生成部７０３は、動作再現用ファイルＲＦからデバイスモデルに対応する動作処理情報を処理順に抽出することにより、第２動作処理情報リストＬ２を生成する（例えば、図６参照）。第２動作処理情報リストＬ２は、例えば、エミュレータＥＭ上の各デバイスモデルがアクセス可能な記憶領域に記憶される。
【００５９】
通知部７０４は、被試験プログラムＴＰを再実行中に、ログ情報ＬＤに基づいて、ＣＰＵモデル、各デバイスモデルに動作処理情報を通知する機能を有する。動作処理情報は、次に動作可能なモデル（ＣＰＵモデルまたはデバイスモデル）と動作内容を識別する情報である。
【００６０】
具体的には、例えば、通知部７０４は、生成部７０３によって生成された第１動作処理情報リストＬ１のリスト番号に従って、次に動作可能なＣＰＵモデルの動作内容を識別する動作処理情報をＣＰＵモデルに通知する。より具体的には、例えば、生成部７０３は、次に参照すべき動作処理情報のリスト番号をＣＰＵモデルに通知する。
【００６１】
また、例えば、通知部７０４は、生成部７０３によって生成された第２動作処理情報リストＬ２のリスト番号に従って、次に動作可能なデバイスモデルと動作内容を識別する動作処理情報を各デバイスモデルに通知する。より具体的には、例えば、生成部７０３は、次に参照すべき動作処理情報のリスト番号を各デバイスモデルに通知する。
【００６２】
制御部７０５は、ＣＰＵモデルに通知された動作処理情報に基づいて、ＣＰＵモデルに動作するか否かを判断させる機能を有する。また、制御部７０５は、ＣＰＵモデルが動作すると判断した場合に、ＣＰＵモデルに動作処理情報から特定される動作内容の処理を実行させる機能を有する。
【００６３】
ここで、ＣＰＵモデルの動作内容として割り込み処理のみを対象として、次に動作可能な割り込み処理を識別する動作処理情報がＣＰＵモデルに通知される場合を想定する。この場合、例えば、制御部７０５は、第１動作処理情報リストＬ１から、ＣＰＵモデルに通知されたリスト番号が示す動作処理情報をＣＰＵモデルに読み出させる。
【００６４】
次に、制御部７０５は、現在のＰＣ値が動作処理情報から特定されるＰＣ値と一致するか否かをＣＰＵモデルに判断させる。ここで、ＰＣ値が不一致の場合、制御部７０５は、ファームウェア（被試験プログラム）に従って、ＣＰＵモデルを継続して動作させる。一方、ＰＣ値が一致する場合、制御部７０５は、一定時間（例えば、数秒〜数十秒）待ってデバイスモデルから割り込みを受け付けたか否かをＣＰＵモデルに判断させる。
【００６５】
そして、デバイスモデルから割り込みを受け付けた場合、制御部７０５は、ＣＰＵモデルに次の動作内容の割り込み処理を実行させる。より具体的には、例えば、制御部７０５は、ＣＰＵモデルに割り込み処理の動作内容が動作処理情報の動作内容と一致するか否かを判断させ、動作内容が一致する場合に、ＣＰＵモデルに次の動作内容の割り込み処理を実行させる。また、ＣＰＵモデルが一定時間待ってもデバイスモデルから割り込みを受け付けていない場合、制御部７０５は、ファームウェア（被試験プログラム）に従って、ＣＰＵモデルを継続して動作させる。
【００６６】
また、制御部７０５は、ＣＰＵモデルに動作処理情報から特定される動作内容の処理を実行させた結果、ＣＰＵモデルに動作処理情報に対応する動作ログを出力させる機能を有する。動作処理情報に対応する動作ログには、ＣＰＵモデルを特定するＣＰＵ名、ＣＰＵモデルの動作内容を特定する動作名、割り込み処理に移行した際のＰＣ値などが含まれる。
【００６７】
また、制御部７０５は、各デバイスモデルに通知された動作処理情報に基づいて、各デバイスモデルに動作するか否かを判断させる機能を有する。また、制御部７０５は、各デバイスモデルが動作すると判断した場合に、各デバイスモデルに動作処理情報から特定される動作内容の処理を実行させる機能を有する。
【００６８】
具体的には、例えば、制御部７０５は、第２動作処理情報リストＬ２から、デバイスモデルに通知されたリスト番号が示す動作処理情報をデバイスモデルに読み出させる。次に、制御部７０５は、例えば、デバイスモデルのデバイス名が、動作処理情報から特定される次に動作可能なデバイスモデルのデバイス名と一致するか否かをデバイスモデルに判断させる。
【００６９】
ここで、デバイス名が一致する場合、制御部７０５は、デバイスモデルに次の動作内容の処理を実行させる。なお、次の動作内容は、例えば、動作処理情報に含まれる動作名（例えば、スレッド名など）から特定することができる。一方、デバイス名が不一致の場合、制御部７０５は、デバイスモデルを待機させる。
【００７０】
また、制御部７０５は、デバイスモデルに動作処理情報から特定される動作内容の処理を実行させた結果、デバイスモデルに動作処理情報に対応する動作ログを出力させる機能を有する。動作処理情報に対応する動作ログには、デバイスモデルを特定するデバイス名、デバイスモデルの動作内容を特定する動作名などが含まれる。
【００７１】
また、通知部７０４は、エミュレータＥＭ上のいずれかのモデル（ＣＰＵモデルまたはデバイスモデル）から動作処理情報に対応する動作ログが出力された場合、ログ情報に基づいて、次に動作可能なモデルと動作内容を識別する動作処理情報を各モデルに通知する。
【００７２】
具体的には、例えば、通知部７０４は、ＣＰＵモデルに通知された動作処理情報に対応する動作ログがＣＰＵモデルから出力された場合、第１動作処理情報リストＬ１のリスト番号に従って、次に参照すべき動作処理情報のリスト番号をＣＰＵモデルに通知する。また、例えば、通知部７０４は、各デバイスモデルに通知された動作処理情報に対応する動作ログがいずれかのデバイスモデルから出力された場合、第２動作処理情報リストＬ２のリスト番号に従って、次に参照すべき動作処理情報のリスト番号を各デバイスモデルに通知する。
【００７３】
出力部７０６は、エミュレータＥＭ上で実行された新規エミュレーションの実行結果を出力する機能を有する。具体的には、例えば、出力部７０６は、図３に示したようなログ情報ＬＤを出力する。また、出力部７０６は、エミュレータＥＭ上で実行された再現エミュレーションの実行結果を出力する機能を有する。具体的には、例えば、出力部７０６は、図８Ａおよび図８Ｂに示すような実行結果８００を出力する。
【００７４】
出力部７０６の出力形式としては、例えば、ディスプレイ２０７への表示、プリンタ（不図示）への印刷出力、Ｉ／Ｆ２０６による外部装置への送信、ＲＡＭ２０３や磁気ディスク２０５などの記憶装置への記憶などがある。
【００７５】
なお、ＣＰＵモデルの動作内容として割り込み処理以外の処理も対象とする場合には、制御部７０５は、例えば、動作処理情報から特定される次の動作内容が割り込み処理か否かをＣＰＵモデルに判断させることにしてもよい。ここで、次の動作内容が割り込み処理ではない場合、制御部７０５は、ＣＰＵモデルに次の動作内容の処理を実行させる。
【００７６】
一方、次の動作内容が割り込み処理の場合、制御部７０５は、現在のＰＣ値が動作処理情報から特定されるＰＣ値と一致するか否かをＣＰＵモデルに判断させる。ここで、ＰＣ値が不一致の場合、制御部７０５は、現在のＰＣ値が動作処理情報から特定されるＰＣ値となるまでＣＰＵモデルに待機させる。
【００７７】
一方、ＰＣ値が一致する場合、制御部７０５は、一定時間（例えば、数秒〜数十秒）待ってデバイスモデルから割り込みを受け付けたか否かをＣＰＵモデルに判断させる。そして、デバイスモデルから割り込みを受け付けた場合、制御部７０５は、ＣＰＵモデルに次の動作内容の割り込み処理を実行させる。ＣＰＵモデルが一定時間待ってもデバイスモデルから割り込みを受け付けていない場合、制御部７０５は、デバイスモデルから割り込みを受け付けるまでＣＰＵモデルを待機させてもよく、また、ＣＰＵモデルに割り込み処理を実行させてもよい。
【００７８】
また、上述した説明では、動作再現用ファイルＲＦに基づいて、第１動作処理情報リストＬ１および第２動作処理情報リストＬ２を生成することにしたが、これに限らない。具体的には、例えば、生成部７０３は、ログ情報ＬＤに基づいて、第１動作処理情報リストＬ１および第２動作処理情報リストＬ２を生成することにしてもよい。
【００７９】
（再現エミュレーションの実行結果の具体例）
図８Ａおよび図８Ｂは、再現エミュレーションの実行結果の具体例を示す説明図である。図８Ａおよび図８Ｂにおいて、実行結果８００は、エミュレータＥＭ上で被試験プログラムＴＰを再実行させた場合に各ＣＰＵモデル、デバイスモデルから出力される動作ログ（例えば、動作ログ８００−１〜８００−１０）を処理順に示す情報である。
【００８０】
実行結果８００によれば、図３Ａおよび図３Ｂに示したログ情報ＬＤと同じ動作ログが同じ処理順で示されており、再現エミュレーション時に、新規エミュレーション時のＣＰＵモデル、各デバイスモデルの動作が再現されていることがわかる。なお、生成部７０３は、この実行結果８００に基づいて、動作再現用ファイルＲＦを生成することにしてもよい。
【００８１】
（シミュレータ装置１００の各種制御処理手順）
次に、シミュレータ装置１００の各種制御処理手順について説明する。ここでは、まず、第１動作処理情報リストＬ１および第２動作処理情報リストＬ２を生成するシミュレータ装置１００の生成処理手順について説明する。
【００８２】
＜生成処理手順＞
図９は、シミュレータ装置１００の生成処理手順の一例を示すフローチャートである。図９のフローチャートにおいて、まず、シミュレータ装置１００は、第１動作処理情報リストＬ１および第２動作処理情報リストＬ２を初期化する（ステップＳ９０１）。
【００８３】
次に、シミュレータ装置１００は、ＣＰＵモデルおよび各デバイスモデルにウェイト指示を出力する（ステップＳ９０２）。なお、ウェイト指示は、ＣＰＵモデルおよび各デバイスモデルを待機状態にさせるための指示である。そして、シミュレータ装置１００は、ＲＡＭ２０３、磁気ディスク２０５等の記憶装置から動作再現用ファイルＲＦを読み込む（ステップＳ９０３）。
【００８４】
次に、シミュレータ装置１００は、動作再現用ファイルＲＦがあるか否かを判断する（ステップＳ９０４）。ここで、動作再現用ファイルＲＦがある場合（ステップＳ９０４：Ｙｅｓ）、シミュレータ装置１００は、動作再現用ファイルＲＦに基づいて、第１動作処理情報リストＬ１を生成する（ステップＳ９０５）。
【００８５】
次に、シミュレータ装置１００は、動作再現用ファイルＲＦに基づいて、第２動作処理情報リストＬ２を生成する（ステップＳ９０６）。そして、シミュレータ装置１００は、第１動作処理情報リストＬ１および第２動作処理情報リストＬ２にＬＩＳＴ［０］があるか否かを判断する（ステップＳ９０７）。
【００８６】
ここで、第１動作処理情報リストＬ１および第２動作処理情報リストＬ２にＬＩＳＴ［０］がある場合（ステップＳ９０７：Ｙｅｓ）、シミュレータ装置１００は、本フローチャートによる一連の処理を終了する。
【００８７】
一方、ＬＩＳＴ［０］がない場合（ステップＳ９０７：Ｎｏ）、シミュレータ装置１００は、ＣＰＵモデルおよび各デバイスモデルにＮＵＬＬ指示を出力して（ステップＳ９０８）、本フローチャートによる一連の処理を終了する。ＮＵＬＬ指示は、ＣＰＵモデルおよび各デバイスモデルが常に動作可能状態であることを通知するものである。
【００８８】
また、ステップＳ９０４において、動作再現用ファイルＲＦがない場合（ステップＳ９０４：Ｎｏ）、シミュレータ装置１００は、ＣＰＵモデルおよび各デバイスモデルにＮＵＬＬ指示を出力して（ステップＳ９０８）、本フローチャートによる一連の処理を終了する。
【００８９】
これにより、再現エミュレーション時にＣＰＵモデルに再現させる動作を特定する動作処理情報を処理順に示す第１動作処理情報リストＬ１を生成することができる。また、再現エミュレーション時に各デバイスモデルに再現させる動作を特定する動作処理情報を処理順に示す第２動作処理情報リストＬ２を生成することができる。
【００９０】
また、動作再現用ファイルＲＦがない場合には、ＣＰＵモデルおよび各デバイスモデルにＮＵＬＬ指示を通知することにより、ＣＰＵモデルおよび各デバイスモデルを常に動作可能状態にすることができる。この結果、動作処理情報によってＣＰＵモデルおよび各デバイスモデルの動作を制御しないエミュレーションを実行することができる。
【００９１】
＜通知処理手順＞
次に、再現エミュレーション時にＣＰＵモデル、各デバイスモデルに動作処理情報を通知する通知処理手順について説明する。まず、第１動作処理情報リストＬ１に基づいて、ＣＰＵモデルに動作処理情報を通知する第１通知処理手順について説明する。第１動作処理情報リストＬ１は、例えば、ＣＰＵモデルの割り込み処理に対応する動作処理情報を処理順に示す情報である。
【００９２】
図１０は、シミュレータ装置１００の第１通知処理手順の一例を示すフローチャートである。図１０のフローチャートにおいて、まず、シミュレータ装置１００は、第１動作処理情報リストＬ１内の動作処理情報のリスト番号を示すＬＩＳＴ［ｊ］の「ｊ」を「ｊ＝０」で初期化する（ステップＳ１００１）。
【００９３】
そして、シミュレータ装置１００は、ＣＰＵモデルにＬＩＳＴ［ｊ］を出力する（ステップＳ１００２）。次に、シミュレータ装置１００は、第１動作処理情報リストＬ１内のＬＩＳＴ［ｊ］の動作処理情報に対応する動作ログがＣＰＵモデルから出力されたか否かを判断する（ステップＳ１００３）。
【００９４】
ここで、シミュレータ装置１００は、ＬＩＳＴ［ｊ］の動作処理情報に対応する動作ログが出力されるのを待つ（ステップＳ１００３：Ｎｏ）。そして、ＬＩＳＴ［ｊ］の動作処理情報に対応する動作ログが出力された場合（ステップＳ１００３：Ｙｅｓ）、シミュレータ装置１００は、ＬＩＳＴ［ｊ］の「ｊ」をインクリメントする（ステップＳ１００４）。
【００９５】
次に、シミュレータ装置１００は、ＬＩＳＴ［ｊ］の「ｊ」が「ｍ」より大きくなったか否かを判断する（ステップＳ１００５）。ここで、「ｊ」が「ｍ」以下の場合（ステップＳ１００５：Ｎｏ）、シミュレータ装置１００は、ステップＳ１００２に戻る。
【００９６】
一方、「ｊ」が「ｍ」より大きくなった場合（ステップＳ１００５：Ｙｅｓ）、シミュレータ装置１００は、ＣＰＵモデルにＮＵＬＬ指示を出力して（ステップＳ１００６）、本フローチャートによる一連の処理を終了する。これにより、ＣＰＵモデルの動作を制御することができる。
【００９７】
次に、第２動作処理情報リストＬ２に基づいて、各デバイスモデルに動作処理情報を通知する第２通知処理手順について説明する。
【００９８】
図１１は、シミュレータ装置１００の第２通知処理手順の一例を示すフローチャートである。図１１のフローチャートにおいて、まず、シミュレータ装置１００は、第２動作処理情報リストＬ２内の動作処理情報のリスト番号を示すＬＩＳＴ［ｉ］の「ｉ」を「ｉ＝０」で初期化する（ステップＳ１１０１）。
【００９９】
そして、シミュレータ装置１００は、各デバイスモデルにＬＩＳＴ［ｉ］を出力する（ステップＳ１１０２）。次に、シミュレータ装置１００は、第２動作処理情報リストＬ２内のＬＩＳＴ［ｉ］の動作処理情報に対応する動作ログがデバイスモデルから出力されたか否かを判断する（ステップＳ１１０３）。
【０１００】
ここで、シミュレータ装置１００は、ＬＩＳＴ［ｉ］の動作処理情報に対応する動作ログが出力されるのを待つ（ステップＳ１１０３：Ｎｏ）。そして、ＬＩＳＴ［ｉ］の動作処理情報に対応する動作ログが出力された場合（ステップＳ１１０３：Ｙｅｓ）、シミュレータ装置１００は、ＬＩＳＴ［ｉ］の「ｉ」をインクリメントする（ステップＳ１１０４）。
【０１０１】
次に、シミュレータ装置１００は、ＬＩＳＴ［ｉ］の「ｉ」が「ｎ」より大きくなったか否かを判断する（ステップＳ１１０５）。ここで、「ｉ」が「ｎ」以下の場合（ステップＳ１１０５：Ｎｏ）、シミュレータ装置１００は、ステップＳ１１０２に戻る。
【０１０２】
一方、「ｉ」が「ｎ」より大きくなった場合（ステップＳ１１０５：Ｙｅｓ）、シミュレータ装置１００は、各デバイスモデルにＮＵＬＬ指示を出力して（ステップＳ１１０６）、本フローチャートによる一連の処理を終了する。これにより、各デバイスモデルの動作を制御することができる。
【０１０３】
（デバイスモデル制御処理手順）
次に、シミュレータ装置１００のデバイスモデル制御処理手順について説明する。デバイスモデル制御処理は、エミュレータＥＭ上の各デバイスモデルの動作を制御する処理である。ここでは、ＣＰＵモデルからデバイスモデルのレジスタＡまたはレジスタＢへのライト要求があった場合を例に挙げて説明する。
【０１０４】
図１２は、シミュレータ装置１００のデバイスモデル制御処理手順の一例を示すフローチャートである。図１２のフローチャートにおいて、まず、シミュレータ装置１００は、デバイスモデルにＣＰＵモデルからライト要求を受け付けたか否かを判断させる（ステップＳ１２０１）。
【０１０５】
ここで、ＣＰＵモデルからライト要求を受け付けるのを待って（ステップＳ１２０１：Ｎｏ）、ライト要求を受け付けた場合（ステップＳ１２０１：Ｙｅｓ）、シミュレータ装置１００は、デバイスモデルにレジスタＡへの書き込みか否かを判断させる（ステップＳ１２０２）。
【０１０６】
ここで、レジスタＡへの書き込みの場合（ステップＳ１２０２：Ｙｅｓ）、シミュレータ装置１００は、デバイスモデルにスレッドＡをコールさせて（ステップＳ１２０３）、ステップＳ１２０１に戻る。一方、レジスタＡへの書き込みではない場合（ステップＳ１２０２：Ｎｏ）、シミュレータ装置１００は、デバイスモデルにレジスタＢへの書き込みか否かを判断させる（ステップＳ１２０４）。
【０１０７】
ここで、レジスタＢへの書き込みの場合（ステップＳ１２０４：Ｙｅｓ）、シミュレータ装置１００は、デバイスモデルにスレッドＢをコールさせて（ステップＳ１２０５）、ステップＳ１２０１に戻る。一方、レジスタＢへの書き込みではない場合（ステップＳ１２０４：Ｎｏ）、シミュレータ装置１００は、ステップＳ１２０１に戻る。
【０１０８】
これにより、ＣＰＵモデルからのライト要求に応じたスレッドＡまたはスレッドＢを呼び出すことができる。次に、ＣＰＵモデルからのライト要求に応じて呼び出されるデバイスモデルのスレッド（スレッドＡまたはスレッドＢ）の処理手順について説明する。
【０１０９】
図１３は、デバイスモデルのスレッドの処理手順の一例を示すフローチャートである。図１３のフローチャートにおいて、まず、シミュレータ装置１００は、デバイスモデルにスレッドがコールされたか否かを判断させる（ステップＳ１３０１）。ここで、シミュレータ装置１００は、デバイスモデルにスレッドがコールされるのを待たせる（ステップＳ１３０１：Ｎｏ）。
【０１１０】
そして、スレッドがコールされた場合（ステップＳ１３０１：Ｙｅｓ）、シミュレータ装置１００は、通知されたＬＩＳＴ［ｉ］が示す動作処理情報を参照して、デバイスモデルが動作可能状態か否かをデバイスモデルに判断させる（ステップＳ１３０２）。具体的には、例えば、デバイスモデルは、デバイスモデルのデバイス名が動作処理情報から特定されるデバイス名と一致し、かつ、スレッドのスレッド名が動作処理情報から特定される動作名と一致する場合に、デバイスモデルが動作可能状態にあると判断する。
【０１１１】
ここで、動作可能状態ではない場合（ステップＳ１３０２：Ｎｏ）、シミュレータ装置１００は、デバイスモデルが動作可能状態になるまで待機させる。一方、動作可能状態の場合（ステップＳ１３０２：Ｙｅｓ）、シミュレータ装置１００は、デバイスモデルにＬＩＳＴ［ｉ］が示す動作処理情報から特定される処理内容の処理を実行させる（ステップＳ１３０３）。
【０１１２】
そして、シミュレータ装置１００は、ＬＩＳＴ［ｉ］が示す動作処理情報に対応する動作ログをデバイスモデルに出力させて（ステップＳ１３０４）、ステップＳ１３０１に戻る。これにより、動作処理情報から特定される次に動作可能なデバイスモデルにのみ動作させ、それ以外のデバイスモデルを待機させることができる。
【０１１３】
（ＣＰＵモデル制御処理手順）
次に、シミュレータ装置１００のＣＰＵモデル制御処理手順について説明する。ＣＰＵモデル制御処理は、エミュレータＥＭ上のＣＰＵモデルの動作を制御する処理である。
【０１１４】
図１４は、シミュレータ装置１００のＣＰＵモデル制御処理手順の一例を示すフローチャートである。図１４のフローチャートにおいて、まず、シミュレータ装置１００は、ＣＰＵモデルに通知されたＬＩＳＴ［ｊ］が示す動作処理情報を参照して、現在のＰＣ値が動作処理情報に含まれるＰＣ値と一致するか否かをＣＰＵモデルに判断させる（ステップＳ１４０１）。
【０１１５】
ここで、ＰＣ値が不一致の場合（ステップＳ１４０１：Ｎｏ）、シミュレータ装置１００は、ステップＳ１４０３に移行する。一方、ＰＣ値が一致する場合（ステップＳ１４０１：Ｙｅｓ）、シミュレータ装置１００は、ＣＰＵモデルを一定時間待機させる（ステップＳ１４０２）。
【０１１６】
次に、シミュレータ装置１００は、ＣＰＵモデルにデバイスモデルから割り込みを受け付けたか否かを判断させる（ステップＳ１４０３）。ここで、デバイスモデルから割り込みを受け付けた場合（ステップＳ１４０３：Ｙｅｓ）、シミュレータ装置１００は、ＣＰＵモデルに割り込み処理を実行させて（ステップＳ１４０４）、ステップＳ１４０１に移行する。
【０１１７】
一方、デバイスモデルから割り込みを受け付けていない場合（ステップＳ１４０３：Ｎｏ）、シミュレータ装置１００は、ＣＰＵモデルに現在のＰＣ値の命令を読み込ませる（ステップＳ１４０５）。そして、シミュレータ装置１００は、ＣＰＵモデルに命令が外部からのリード要求を処理するものか否かを判断させる（ステップＳ１４０６）。
【０１１８】
ここで、外部からのリード要求の場合（ステップＳ１４０６：Ｙｅｓ）、シミュレータ装置１００は、ＣＰＵモデルにリード処理を実行させて（ステップＳ１４０７）、ステップＳ１４０１に戻る。一方、外部からのリード要求ではない場合（ステップＳ１４０６：Ｎｏ）、シミュレータ装置１００は、ＣＰＵモデルに命令が外部へのライト要求を処理するものか否かを判断させる（ステップＳ１４０８）。
【０１１９】
ここで、外部へのライト要求の場合（ステップＳ１４０８：Ｙｅｓ）、シミュレータ装置１００は、ＣＰＵモデルにライト処理を実行させて（ステップＳ１４０９）、ステップＳ１４０１に戻る。一方、外部へのライト要求ではない場合（ステップＳ１４０８：Ｎｏ）、シミュレータ装置１００は、ステップＳ１４０１に戻る。
【０１２０】
これにより、現在のＰＣ値が動作処理情報に含まれるＰＣ値と一致する場合にＣＰＵモデルに割り込み処理を実行させることができる。また、現在のＰＣ値が動作処理情報に含まれるＰＣ値と一致する場合には、現在のＰＣ値が示す命令をＣＰＵモデルに実行させることができる。
【０１２１】
次に、図１４に示したステップＳ１４０４の割り込み処理の具体的な処理手順について説明する。
【０１２２】
図１５は、ＣＰＵモデルの割り込み処理の具体的処理手順の一例を示すフローチャートである。図１５のフローチャートにおいて、まず、シミュレータ装置１００は、ＣＰＵモデルに現在のＰＣ値の命令を読み込ませる（ステップＳ１５０１）。そして、シミュレータ装置１００は、ＣＰＵモデルに命令が外部からのリード要求を処理するものか否かを判断させる（ステップＳ１５０２）。
【０１２３】
ここで、外部からのリード要求の場合（ステップＳ１５０２：Ｙｅｓ）、シミュレータ装置１００は、ＣＰＵモデルにリード処理を実行させて（ステップＳ１５０３）、割り込み処理を呼び出したステップに戻る。一方、外部からのリード要求ではない場合（ステップＳ１５０２：Ｎｏ）、シミュレータ装置１００は、ＣＰＵモデルに命令が外部へのライト要求を処理するものか否かを判断させる（ステップＳ１５０４）。
【０１２４】
ここで、外部へのライト要求の場合（ステップＳ１５０４：Ｙｅｓ）、シミュレータ装置１００は、ＣＰＵモデルにライト処理を実行させて（ステップＳ１５０５）、割り込み処理を呼び出したステップに戻る。一方、外部へのライト要求ではない場合（ステップＳ１５０４：Ｎｏ）、シミュレータ装置１００は、割り込み処理を呼び出したステップに戻る。
【０１２５】
次に、図１５に示したステップＳ１５０３のリード処理またはステップＳ１５０５のライト処理の具体的な処理手順について説明する。
【０１２６】
図１６は、ＣＰＵモデルのリード処理またはライト処理の具体的処理手順の一例を示すフローチャートである。図１６のフローチャートにおいて、まず、シミュレータ装置１００は、ＬＩＳＴ［ｊ］が示す動作処理情報を参照して、ＣＰＵモデルが動作可能状態か否かをＣＰＵモデルに判断させる（ステップＳ１６０１）。具体的には、例えば、ＣＰＵモデルは、図１５に示したステップＳ１５０１において読み込んだ命令の動作内容が動作処理情報から特定される動作内容と一致する場合に動作可能状態にあると判断することにしてもよい。
【０１２７】
ここで、動作可能状態ではない場合（ステップＳ１６０１：Ｎｏ）、シミュレータ装置１００は、リード処理またはライト処理を読み出したステップに戻る。一方、動作可能状態の場合（ステップＳ１６０１：Ｙｅｓ）、シミュレータ装置１００は、読み込んだ命令の処理をＣＰＵモデルに実行させる（ステップＳ１６０２）。
【０１２８】
そして、シミュレータ装置１００は、ＬＩＳＴ［ｊ］が示す動作処理情報に対応する動作ログをＣＰＵモデルに出力させて（ステップＳ１６０３）、リード処理またはライト処理を呼び出したステップに戻る。なお、ＣＰＵモデルは、例えば、割り込み処理の動作ログを出力した場合に、スタックを積み込んで現在のＰＣ値を変更する。
【０１２９】
これにより、現在のＰＣ値が動作処理情報に含まれるＰＣ値となった場合に、ＣＰＵモデルに割り込み処理を実行させて動作ログを出力させることができる。なお、図１４に示したステップＳ１４０７のリード処理およびステップＳ１４０９のライト処理の具体的処理手順は、図１６に示したリード処理またはライト処理の具体的処理手順と同様のため説明を省略する。
【０１３０】
次に、エミュレータＥＭ上にＮＡＳ（Ｎｅｔｗｏｒｋ  Ａｒｅａ  Ｓｔｏｒａｇｅ）を作成する場合を例に挙げて、シミュレータ装置１００の制御処理例について説明する。
【０１３１】
図１７は、エミュレータＥＭ上に作成されるＮＡＳの構成例を示す説明図である。図１７において、ＮＡＳ１７００は、ＰｓｅｕｄｏＣＰＵ１７０１と、ＰｓｅｕｄｏＬＡＮＣ１７０２と、ＰｓｅｕｄｏＨＤＤ１７０３と、ＰｓｅｕｄｏＨＤＣ１７０４と、ＰｓｅｕｄｏＭＥＭ１７０５と、ＰｓｅｕｄｏＭＥＭＣ１７０６と、を含む。
【０１３２】
ここで、ＰｓｅｕｄｏＣＰＵ１７０１は、被試験プログラムを実行するＣＰＵの動作を模擬するモデルである。ＰｓｅｕｄｏＬＡＮＣ１７０２は、ＬＡＮコントローラの動作を模擬するモデルである。ＰｓｅｕｄｏＨＤＤ１７０３は、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）の動作を模擬するモデルである。ＰｓｅｕｄｏＨＤＣ１７０４は、ＨＤコントローラの動作を模擬するモデルである。
【０１３３】
ＰｓｅｕｄｏＭＥＭ１７０５は、メモリの動作を模擬するモデルである。ＰｓｅｕｄｏＭＥＭＣ１７０６は、メモリコントローラの動作を模擬するモデルである。また、各モデル１７０１〜１７０６は、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔｓ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バス１７０７により接続されている。
【０１３４】
以下の説明では、ＰｓｅｕｄｏＣＰＵ１７０１を「ＣＰＵ」と表記し、ＰｓｅｕｄｏＬＡＮＣ１７０２を「ＬＡＮＣ」と表記する場合がある。また、ＰｓｅｕｄｏＨＤＤ１７０３を「ＨＤＤ」と表記し、ＰｓｅｕｄｏＨＤＣ１７０４を「ＨＤＣ」と表記し、ＰｓｅｕｄｏＭＥＭ１７０５を「ＭＥＭ」と表記し、ＰｓｅｕｄｏＭＥＭＣ１７０６を「ＭＥＭＣ」と表記する場合がある。
【０１３５】
ここで、ＬＡＮ経由でＨＤＤ内のデータにアクセスする動作処理例について説明する。
【０１３６】
まず、ＬＡＮよりＨＤＤ内のデータに対しＲｅａｄアクセス要求が発生（Ｒｅａｄ１）した場合を想定する。なお、下記（１−１）〜（１−１５）は、Ｒｅａｄ１系の処理である。
【０１３７】
（１−１）ＬＡＮＣより、ＭＥＭＣに対しデータ書き込みが行われる(アクセス要求が書き込まれる)。
（１−２）ＬＡＮＣより、ＣＰＵに対しアクセス要求が発生したことを知らせるため割り込みが発生する。
（１−３）ＣＰＵは、現在の処理を中断し、割り込み処理としてＬＡＮＣのＳｔａｔｕｓを確認する。
（１−４）ＣＰＵは、Ｓｔａｔｕｓよりアクセス要求がきたことを認識し、Ｓｔａｔｕｓのクリアを実施する。
（１−５）ＣＰＵは、ＭＥＭＣに対しアクセス要求の内容を読み取る。
（１−６）ＣＰＵは、ＨＤＣに対しアクセス要求の箇所に対し、Ｒｅａｄ１処理を発行する。
【０１３８】
次に、ＬＡＮよりＨＤＤ内のデータに対しＲｅａｄアクセス要求が発生（Ｒｅａｄ２）した場合を想定する。なお、下記（２−１）〜（２−１５）は、Ｒｅａｄ２系の処理である。
【０１３９】
（２−１）ＬＡＮＣより、ＭＥＭＣに対しデータ書き込みが行われる(アクセス要求が書き込まれる)。
（２−２）ＬＡＮＣより、ＣＰＵに対しアクセス要求が発生したことを知らせるため割り込みが発生する。
（２−３）ＣＰＵは、現在の処理を中断し、割り込み処理としてＬＡＮＣのＳｔａｔｕｓを確認する。
（２−４）ＣＰＵは、Ｓｔａｔｕｓよりアクセス要求がきたことを認識し、Ｓｔａｔｕｓのクリアを実施する。
（２−５）ＣＰＵは、ＭＥＭＣに対しアクセス要求の内容を読み取る。
（１−７）ＨＤＣは、ＨＤＤよりデータを読み取りＭＥＭＣに対しデータを書き込む。
（１−８）ＨＤＣは、処理が完了したことを知らせるためＣＰＵに対し割り込みを発生する。
（１−９）ＣＰＵは、現在の処理を中断し、割り込み処理としてＨＤＣのＳｔａｔｕｓを確認する。
（１−１０）ＣＰＵは、Ｓｔａｔｕｓより処理が完了したことを認識し、Ｓｔａｔｕｓのクリアを実施する。
【０１４０】
ＬＡＮよりデータを出力する（Ｒｅａｄ１）
【０１４１】
（１−１１）ＣＰＵは、ＬＡＮＣに対し、ＭＥＭ上にあるＨＤＤのデータのＲｅａｄ処理をさせるように設定し、処理を実行させる。
（１−１２）ＬＡＮＣは、ＭＥＭＣに対し、データＲｅａｄを要求し、データを読み取り、ＬＡＮへデータを出力する。
（２−６）ＣＰＵは、ＨＤＣに対しアクセス要求の箇所に対し、Ｒｅａｄ２処理を発行する。
（１−１３）ＬＡＮＣは、データＲｅａｄ１処理の完了を知らせるための割り込みを発生する。
（１−１４）ＣＰＵは、処理を中断し、割り込み処理としてＬＡＮＣのＳｔａｔｕｓを確認する。
（１−１５）ＣＰＵは、Ｓｔａｔｕｓより処理が完了したことを認識し、Ｓｔａｔｕｓのクリアを実施する。
（２−７）ＨＤＣは、ＨＤＤよりデータを読み取りＭＥＭＣに対しデータを書き込む。
（２−８）ＨＤＣは、処理が完了したことを知らせるためＣＰＵに対し割り込みを発生する。
（２−９）ＣＰＵは、現在の処理を中断し、割り込み処理としてＨＤＣのＳｔａｔｕｓを確認する。
（２−１０）ＣＰＵは、Ｓｔａｔｕｓより処理が完了したことを認識し、Ｓｔａｔｕｓのクリアを実施する。
【０１４２】
ＬＡＮよりデータを出力する（Ｒｅａｄ２）
【０１４３】
（２−１１）ＣＰＵは、ＬＡＮＣに対し、ＭＥＭ上にあるＨＤＤのデータのＲｅａｄ処理をさせるように設定し、処理を実行させる。
（２−１２）ＬＡＮＣは、ＭＥＭＣに対し、データＲｅａｄを要求し、データを読み取り、ＬＡＮへデータを出力する。
（２−１３）ＬＡＮＣは、データＲｅａｄ２処理の完了を知らせるための割り込みを発生する。
（２−１４）ＣＰＵは、処理を中断し、割り込み処理としてＬＡＮＣのＳｔａｔｕｓを確認する。
（２−１５）ＣＰＵは、Ｓｔａｔｕｓより処理が完了したことを認識し、Ｓｔａｔｕｓのクリアを実施する。
【０１４４】
上記例の場合、スケジューラを持たないエミュレータ上で再度エミュレーションを実行させると、上記（１−６）のタイミングがずれたりすることにより、上記（２−１）と上記（１−７）の順番が入れ替わることがある。また、上記（１−３）の処理の中断（割り込み）タイミングが同じＰＣ値になる可能性が低く、上記例と同じ動作を再現することができないことがある。
【０１４５】
シミュレータ装置１００では、各モデル１７０１〜１７０６に対して、処理を行う際などに動作ログを出力する処理がない場合は、動作ログを出力する処理を追加し動作手順を記録する。以下、上記（１−１）〜（１−１５）において出力される動作ログ例を示す。ただし、ＣＰＵの割り込み受け付けタイミングを割愛した形で説明する。また、上記（２−１）〜（２−１５）については、上記（１−１）〜（１−１５）と同様のため説明を省略する。
【０１４６】
（１−１）ＬＡＮＣ（ＭＥＭ＿ＷＲＩＴＥ）→ＭＥＭＣ（ＡＤＲ＝ｘｘｘｘ，Ｓｉｚｅ＝ｙｙｙｙ）
（１−２）ＬＡＮＣ（ＡＣＣ  ＩＮＴ）→ＣＰＵ（ＩＮＴ）
（１−３）ＣＰＵ（ＩＮＴ  ＥＸＥＣ  ＰＣ＝ｘｘｘｘ）
ＣＰＵ（Ｍｅｍ＿Ｒｅａｄ［ＬＡＮＣ  Ｓｔａｔｕｓ］）
（１−４）ＣＰＵ（Ｍｅｍ＿Ｗｒｉｔｅ［ＬＡＮＣ  ＳｔａｔｕｓＣＬＲ］）
（１−５）ＣＰＵ（Ｍｅｍ＿Ｒｅａｄ［ＭＥＭ  ＡＤＲ＝ｘｘｘｘ］）
（１−６）ＣＰＵ（Ｍｅｍ＿Ｗｒｉｔｅ［ＨＤＣ  ＲｅａｄＥｘｅｃ（ｐａｒａｍ  ＡＤＲ＝ｘｘｘｘ，Ｓｉｚｅ＝ｙｙｙｙ）］）
（１−７）ＨＤＣ（ＨＤＣ  ＲｅａｄＥｘｅｃ  ＷｒｉｔｅＭｅｍ）→ＭＥＭＣ（ＡＤＲ＝ｘｘｘｘ，Ｓｉｚｅ＝ｙｙｙｙ）
（１−８）ＨＤＣ（ＣＯＭＰＬＥＴＥ  ＩＮＴ）→ＣＰＵ（ＩＮＴ）
（１−９）ＣＰＵ（ＩＮＴ  ＥＸＥＣ  ＰＣ＝ｘｘｘｘ）
ＣＰＵ（Ｍｅｍ＿Ｒｅａｄ［ＨＤＣ  Ｓｔａｔｕｓ］）
（１−１０）ＣＰＵ（Ｍｅｍ＿Ｗｒｉｔｅ［ＨＤＣ  ＳｔａｔｕｓＣＬＲ］）
（１−１１）ＣＰＵ（Ｍｅｍ＿Ｗｒｉｔｅ［ＬＡＮＣ  ＲｅａｄＥｘｅｃ（ｐａｒａｍ  ＡＤＲ＝ｘｘｘｘ，Ｓｉｚｅ＝ｙｙｙｙ）］）
（１−１２）ＬＡＮＣ（ＭＥＭ＿ＲＥＡＤ  ＲｅａｄＥｘｅｃ）←ＭＥＭＣ（ＡＤＲ＝ｘｘｘｘ，Ｓｉｚｅ＝ｙｙｙｙ）
（１−１３）ＬＡＮＣ（ＣＯＭＰＬＥＴＥ  ＩＮＴ）→ＣＰＵ（ＩＮＴ）
（１−１４）ＣＰＵ（ＩＮＴ  ＥＸＥＣ  ＰＣ＝ｘｘｘｘ）
ＣＰＵ（Ｍｅｍ＿Ｒｅａｄ［ＬＡＮＣ  Ｓｔａｔｕｓ］）
（１−１５）ＣＰＵ（Ｍｅｍ＿Ｗｒｉｔｅ［ＬＡＮＣ  ＳｔａｔｕｓＣＬＲ］）
【０１４７】
次に、上記例に示した動作に当てはめると以下のようになる。
【０１４８】
ＬＡＮよりＨＤＤ内のデータに対しＲｅａｄアクセス要求が発生（Ｒｅａｄ１）
【０１４９】
（１−１）ＬＡＮＣ（ＭＥＭ＿ＷＲＩＴＥ）→ＭＥＭＣ（ＡＤＲ＝ｘｘｘｘ，Ｓｉｚｅ＝ｙｙｙｙ）
（１−２）ＬＡＮＣ（ＡＣＣ  ＩＮＴ）→ＣＰＵ（ＩＮＴ）
（１−３）ＣＰＵ（ＩＮＴ  ＥＸＥＣ  ＰＣ＝ｎｎｎｎ）
ＣＰＵ（Ｍｅｍ＿Ｒｅａｄ［ＬＡＮＣ  Ｓｔａｔｕｓ］）
（１−４）ＣＰＵ（Ｍｅｍ＿Ｗｒｉｔｅ［ＬＡＮＣ  ＳｔａｔｕｓＣＬＲ］）
（１−５）ＣＰＵ（Ｍｅｍ＿Ｒｅａｄ［ＭＥＭ  ＡＤＲ＝ｘｘｘｘ］）
（１−６）ＣＰＵ（Ｍｅｍ＿Ｗｒｉｔｅ［ＨＤＣ  ＲｅａｄＥｘｅｃ（ｐａｒａｍ  ＡＤＲ＝ｚｚｚｚ，Ｓｉｚｅ＝ｖｖｖｖ）］）
【０１５０】
ＬＡＮよりＨＤＤ内のデータに対しＲｅａｄアクセス要求が発生（Ｒｅａｄ２）
【０１５１】
（２−１）ＬＡＮＣ（ＭＥＭ＿ＷＲＩＴＥ）→ＭＥＭＣ（ＡＤＲ＝ｗｗｗｗ，Ｓｉｚｅ＝ｚｚｚｚ）
（２−２）ＬＡＮＣ（ＡＣＣ  ＩＮＴ）→ＣＰＵ（ＩＮＴ）
（２−３）ＣＰＵ（ＩＮＴ  ＥＸＥＣ  ＰＣ＝ｍｍｍｍ）
ＣＰＵ（Ｍｅｍ＿Ｒｅａｄ［ＬＡＮＣ  Ｓｔａｔｕｓ］）
（２−４）ＣＰＵ（Ｍｅｍ＿Ｗｒｉｔｅ［ＬＡＮＣ  ＳｔａｔｕｓＣＬＲ］）
（２−５）ＣＰＵ（Ｍｅｍ＿Ｒｅａｄ［ＭＥＭ  ＡＤＲ＝ｗｗｗｗ］）
（１−７）ＨＤＣ（ＨＤＣ  ＲｅａｄＥｘｅｃ  ＷｒｉｔｅＭｅｍ）→ＭＥＭＣ（ＡＤＲ＝ｚｚｚｚ，Ｓｉｚｅ＝ｖｖｖｖ）
（１−８）ＨＤＣ（ＣＯＭＰＬＥＴＥ  ＩＮＴ）→ＣＰＵ（ＩＮＴ）
（１−９）ＣＰＵ（ＩＮＴ  ＥＸＥＣ  ＰＣ＝ｘｘｘｘ）
ＣＰＵ（Ｍｅｍ＿Ｒｅａｄ［ＨＤＣ  Ｓｔａｔｕｓ］）
（１−１０）ＣＰＵ（Ｍｅｍ＿Ｗｒｉｔｅ［ＨＤＣ  ＳｔａｔｕｓＣＬＲ］）
【０１５２】
ＬＡＮよりデータを出力する（Ｒｅａｄ１）
【０１５３】
（１−１１）ＣＰＵ（Ｍｅｍ＿Ｗｒｉｔｅ［ＬＡＮＣ  ＲｅａｄＥｘｅｃ（ｐａｒａｍ  ＡＤＲ＝ｚｚｚｚ，Ｓｉｚｅ＝ｙｙｙｙ）］）
（１−１２）ＬＡＮＣ（ＭＥＭ＿ＲＥＡＤ  ＲｅａｄＥｘｅｃ）←ＭＥＭＣ（ＡＤＲ＝ｚｚｚｚ，Ｓｉｚｅ＝ｙｙｙｙ）
（２−６）ＣＰＵ（Ｍｅｍ＿Ｗｒｉｔｅ［ＨＤＣ  ＲｅａｄＥｘｅｃ（ｐａｒａｍ  ＡＤＲ＝ｎｎｎｎ，Ｓｉｚｅ＝ｍｍｍｍ）］）
（１−１３）ＬＡＮＣ（ＣＯＭＰＬＥＴＥ  ＩＮＴ）→ＣＰＵ（ＩＮＴ）
（１−１４）ＣＰＵ（ＩＮＴ  ＥＸＥＣ  ＰＣ＝ｈｈｈｈ）
ＣＰＵ（Ｍｅｍ＿Ｒｅａｄ［ＬＡＮＣ  Ｓｔａｔｕｓ］）
（１−１５）ＣＰＵ（Ｍｅｍ＿Ｗｒｉｔｅ［ＬＡＮＣ  ＳｔａｔｕｓＣＬＲ］）
（２−７）ＨＤＣ（ＨＤＣ  ＲｅａｄＥｘｅｃ  ＷｒｉｔｅＭｅｍ）→ＭＥＭＣ（ＡＤＲ＝ｎｎｎｎ，Ｓｉｚｅ＝ｍｍｍｍ）
（２−８）ＨＤＣ（ＣＯＭＰＬＥＴＥ  ＩＮＴ）→ＣＰＵ（ＩＮＴ）
（２−９）ＣＰＵ（ＩＮＴ  ＥＸＥＣ  ＰＣ＝ｋｋｋｋ）
ＣＰＵ（Ｍｅｍ＿Ｒｅａｄ［ＨＤＣ  Ｓｔａｔｕｓ］）
（２−１０）ＣＰＵ（Ｍｅｍ＿Ｗｒｉｔｅ［ＨＤＣ  ＳｔａｔｕｓＣＬＲ］）
【０１５４】
ＬＡＮよりデータを出力する（Ｒｅａｄ２）
【０１５５】
（２−１１）ＣＰＵ（Ｍｅｍ＿Ｗｒｉｔｅ［ＬＡＮＣ  ＲｅａｄＥｘｅｃ（ｐａｒａｍ  ＡＤＲ＝ｌｌｌｌ，Ｓｉｚｅ＝ｕｕｕｕ）］）
（２−１２）ＬＡＮＣ（ＭＥＭ＿ＲＥＡＤ  ＲｅａｄＥｘｅｃ）←ＭＥＭＣ（ＡＤＲ＝ｌｌｌｌ，Ｓｉｚｅ＝ｕｕｕｕ）
（２−１３）ＬＡＮＣ（ＣＯＭＰＬＥＴＥ  ＩＮＴ）→ＣＰＵ（ＩＮＴ）
（２−１４）ＣＰＵ（ＩＮＴ  ＥＸＥＣ  ＰＣ＝ｏｏｏｏ）
ＣＰＵ（Ｍｅｍ＿Ｒｅａｄ［ＬＡＮＣ  Ｓｔａｔｕｓ］）
（２−１５）ＣＰＵ（Ｍｅｍ＿Ｗｒｉｔｅ［ＬＡＮＣ  ＳｔａｔｕｓＣＬＲ］）
【０１５６】
これら動作ログから抽出すべきポイントは、「処理の起動タイミング(処理実行の動作ログ)」と「完了タイミング(割り込み)」となる。そこで、その部分に注目して処理を抽出すると、「（１−１）、（１−２）、（１−７）、（１−８）、（１−１２）、（１−１３）」が処理のポイントとなり、この部分のみを抽出して並べると以下のようになる。
【０１５７】
・（１−１）ＬＡＮＣ（ＭＥＭ＿ＷＲＩＴＥ）→ＭＥＭＣ（ＡＤＲ＝ｘｘｘｘ，Ｓｉｚｅ＝ｙｙｙｙ）
・（１−２）ＬＡＮＣ（ＡＣＣ  ＩＮＴ）→ＣＰＵ（ＩＮＴ）
・（１−７）ＨＤＣ（ＨＤＣ  ＲｅａｄＥｘｅｃ  ＷｒｉｔｅＭｅｍ）→ＭＥＭＣ（ＡＤＲ＝ｚｚｚｚ，Ｓｉｚｅ＝ｖｖｖｖ）
・（２−１）ＬＡＮＣ（ＭＥＭ＿ＷＲＩＴＥ）→ＭＥＭＣ（ＡＤＲ＝ｗｗｗｗ，Ｓｉｚｅ＝ｚｚｚｚ）
・（２−２）ＬＡＮＣ（ＡＣＣ  ＩＮＴ）→ＣＰＵ（ＩＮＴ）
・（１−８）ＨＤＣ（ＣＯＭＰＬＥＴＥ  ＩＮＴ）→ＣＰＵ（ＩＮＴ）
・（１−１２）ＬＡＮＣ（ＭＥＭ＿ＲＥＡＤ  ＲｅａｄＥｘｅｃ）←ＭＥＭＣ（ＡＤＲ＝ｚｚｚｚ，Ｓｉｚｅ＝ｙｙｙｙ）
・（１−１３）ＬＡＮＣ（ＣＯＭＰＬＥＴＥ  ＩＮＴ）→ＣＰＵ（ＩＮＴ）
・（２−７）ＨＤＣ（ＨＤＣ  ＲｅａｄＥｘｅｃ  ＷｒｉｔｅＭｅｍ）→ＭＥＭＣ（ＡＤＲ＝ｎｎｎｎ，Ｓｉｚｅ＝ｍｍｍｍ）
・（２−８）ＨＤＣ（ＣＯＭＰＬＥＴＥ  ＩＮＴ）→ＣＰＵ（ＩＮＴ）
・（２−１２）ＬＡＮＣ（ＭＥＭ＿ＲＥＡＤ  ＲｅａｄＥｘｅｃ）←ＭＥＭＣ（ＡＤＲ＝ｌｌｌｌ，Ｓｉｚｅ＝ｕｕｕｕ）
・（２−１３）ＬＡＮＣ（ＣＯＭＰＬＥＴＥ  ＩＮＴ）→ＣＰＵ（ＩＮＴ）
【０１５８】
シミュレータ装置１００は、上記のように抽出した動作と同様の動作になるようにＣＰＵモデル、各デバイスモデルの動作を制御する。例えば、シミュレータ装置１００は、「上記（１−６）のタイミングがずれて、上記（２−１）と上記（１−７）の順番が入れ替わる」ことを防ぐため、上記（１−７）の実行を抑制し、上記（２−１）および（２−２）が発生するまで実行されないようにする。
【０１５９】
具体的には、例えば、シミュレータ装置１００は、上記（２−１）の「ＬＡＮＣ（ＭＥＭ＿ＷＲＩＴＥ）→ＭＥＭＣ」を識別する動作処理情報を各デバイスモデルに通知する。各デバイスモデルは、この動作処理情報に基づいて動作するか否かを判断する。この場合では、上記（２−１）のＬＡＮＣの実行が発生しなければ、ＭＥＭＣ、ＨＤＣの処理が行われない。
【０１６０】
これにより、「上記（１−６）のタイミングがずれて、上記（２−１）と上記（１−７）の順番が入れ替わる」ことを防ぐことができる。なお、上記（２−１）の「ＬＡＮＣ（ＭＥＭ＿ＷＲＩＴＥ）→ＭＥＭＣ（ＡＤＲ＝ｗｗｗｗ，Ｓｉｚｅ＝ｚｚｚｚ）」のうちＭＥＭＣ（）の（）の中はファームウェアによって決定されるため動作処理情報には含まれない。このため、上記（１−７）の「ＨＤＣ（ＨＤＣ  ＲｅａｄＥｘｅｃ  ＷｒｉｔｅＭｅｍ）→ＭＥＭＣ（）」は実行されない状態で待ち状態となる。
【０１６１】
このように、シミュレータ装置１００が各デバイスモデルに対して処理手順を指示することにより、指示した手順以外の動作を抑制し、新規エミュレーション時と同様の動作を実現することができる。
【０１６２】
また、シミュレータ装置１００は、ＣＰＵの割り込み受け付けタイミングまでチェックする場合は、上記（１−３）、（１−９）、（１−１４）を識別する動作処理情報をＣＰＵモデルに通知する。ＣＰＵは、現在のＰＣ値が動作処理情報に含まれるＰＣ値となったらウェイト状態となり割り込みを待つ。ただし、プログラムがループしている際にＣＰＵに割り込みが入る場合等が考えられるため、ＣＰＵは、一定時間待ったら再度実行状態とし、動作処理情報に含まれるＰＣ値で割り込みが発生した場合にのみ次の通知待ちとしてもよい。
【０１６３】
この場合、ＣＰＵは、例えば、上記（１−３）の動作処理情報の通知時に、現在のＰＣ値が動作処理情報のＰＣ値となっても一定時間割り込みが発生しなかったら、再度動作状態になり、現在のＰＣ値が動作処理情報のＰＣ値となるまで再度待つ。また、上記（１−３）の前に割り込みが発生した場合、ＣＰＵは、例えば、一定時間動作したら現在のＰＣ値が動作処理情報のＰＣ値とならなくても割り込み処理を実施する。これにより、ループ状態にない場合に、常に待ち状態になるのを避けることができる。なお、割り込み処理完了後は、ＣＰＵは、上記（１−９）のＰＣ値を待つ形として動作していく。
【０１６４】
このように、シミュレータ装置１００がＣＰＵモデルに対して割り込み処理を実施する際のＰＣ値を通知することにより、新規エミュレーション時と同様のタイミングで割り込み処理を実施することができる。
【０１６５】
図１８は、ＮＡＳの動作例を示す説明図である。図１８において、まず、ＣＰＵがＭＥＭからファームウェアを読み出して動作が行われており、必要に応じてＬＡＮＣやＨＤＣに対しアクセスが発生している。この状態で、「外部からの要求」が発生すると、ＬＡＮＣは「外部からの要求データ」をＭＥＭに出力する。これは、上記（１−１）の動作であるため、そのまま実行される。ＬＡＮＣが上記（１−１）に対応する動作ログを出力すると、次の動作処理情報に更新される（図１８中、順番Ｌｉｓｔ）。
【０１６６】
次に、各デバイスモデルに上記（１−２）の動作処理情報が通知される。一方、ＣＰＵは、現在のＰＣ値が上記（１−３）のＰＣ値になった際に、ある一定時間動作を中断して、そのＰＣ値で待機する。ただし、一定時間待機した後は、ＣＰＵの動作が継続される。ここで、ＣＰＵで実行されるファームウェアの具体例について説明する。
【０１６７】
図１９は、ファームウェアの具体例を示す説明図である。図１９において、ファームウェア１９００は、ＣＰＵで実行される被試験プログラムＴＰである。例えば、ＧＰＩＯ＿ＰＯＬＬ（Ｂ＿Ｐｏｒｔ，ＦＩＮ）の実行前の状態が、上記（１−３）のＰＣ値であった場合、ファームウェア１９００ではＦＩＮに応じたＷｈｉｌｅ  Ｌｏｏｐになっているため、どのタイミングでも割り込み処理にコールされる可能性がある。
【０１６８】
このため、ＣＰＵが、ＧＰＩＯ＿ＰＯＬＬ（Ｂ＿Ｐｏｒｔ，ＦＩＮ）が実行される前で待機状態とすることにより、新規エミュレーション時と同様の動作に近づける。ただし、半永久的に待機していると、ＤｅａｄＬｏｃｋが発生する可能性があるため、一定時間待機した後は動作を実行する。
【０１６９】
図１８の説明に戻り、上記（１−２）の動作処理情報に更新されると、各デバイスモデル（ＬＡＮＣ、ＨＤＣ）に上記（１−２）の動作処理情報が通知される。ＬＡＮＣは、上記（１−１）の動作完了後に上記（１−２）の動作を行うため、上記（１−２）の動作処理情報が通知されると、上記（１−２）の動作を実施する。
【０１７０】
ＬＡＮＣが上記（１−２）に対応する動作ログを出力すると、次の動作処理情報に更新される。これにより、デバイス側の動作Ｌｉｓｔが更新され、各デバイスモデル（ＬＡＮＣ、ＨＤＣ）に上記（２−１）の動作処理情報が通知される。
【０１７１】
ＣＰＵは、ＩＮＴがきたことによりＰＣ値がどの値であっても割り込み処理の動作ログを出力する。これにより、ＣＰＵ側の動作Ｌｉｓｔが更新され、ＣＰＵに上記（２−３）の動作処理情報が通知される。ＣＰＵが待機中であれば動作ログと一致した動作になるが、待機中でなかった場合は動作Ｌｉｓｔを更新する必要がある。このため、常に割り込み処理の動作ログを出力する際に動作Ｌｉｓｔを更新するようにすることにより、待機中/非待機中のどちらも対応可能になる。
【０１７２】
このように、各モデルの動作処理を進めることにより、内部動作が追い抜くような動作が抑制され、抽出に使用した動作ログと同様の動作を再現することができる。これにより、例えば、障害等が発生した動作ログを使用していた場合、同様の障害の発生を促すことが可能になり、障害の原因追究時間（ＴＡＴ：Ｔｕｒｎ  Ａｒｏｕｎｄ  Ｔｉｍｅ）の短縮化を図ることができる。具体的には、例えば、デバッガ等を用いて再現エミュレーションを行うことにより、障害発生時の内部情報を詳細に把握することが可能となり、障害原因の特定や内部状態のトレースをし易くして原因追及時間を短縮することができる。
【０１７３】
以上説明したように、シミュレータ装置１００によれば、エミュレータＥＭ上で被試験プログラムＴＰを実行させた結果得られるログ情報ＬＤに基づいて、第１動作処理情報リストＬ１を生成することができる。これにより、再現エミュレーション時にＣＰＵモデルに再現させる動作を処理順に特定することができる。
【０１７４】
また、シミュレータ装置１００によれば、第１動作処理情報リストＬ１に従って、次に動作可能な割り込み処理の動作内容と、その割り込み処理に移行した際のＰＣ値を識別する動作処理情報をＣＰＵモデルに通知することができる。また、シミュレータ装置１００によれば、ＣＰＵモデルに通知された動作処理情報に基づいて、ＣＰＵモデルに動作するか否かを判断させ、ＣＰＵモデルが動作すると判断した場合に、ＣＰＵモデルに割り込み処理を実行させることができる。これにより、新規エミュレーション時と同様のタイミングで、新規エミュレーション時と同様の割り込み処理をＣＰＵモデルに実行させることができる。
【０１７５】
また、シミュレータ装置１００によれば、ＣＰＵモデルに通知した動作処理情報に対応する動作ログがＣＰＵモデルから出力された場合に、第１動作処理情報リストＬ１に従って、次の動作処理情報をＣＰＵモデルに通知することができる。これにより、新規エミュレーション時と同様の処理順序で、新規エミュレーション時と同様の割り込み処理をＣＰＵモデルに実行させることができる。
【０１７６】
また、シミュレータ装置１００によれば、ログ情報ＬＤに基づいて、第２動作処理情報リストＬ２を生成することができる。これにより、再現エミュレーション時に各デバイスモデルに再現させる動作を処理順に特定することができる。
【０１７７】
また、シミュレータ装置１００によれば、第２動作処理情報リストＬ２に従って、次に動作可能なデバイスモデルと動作内容を識別する動作処理情報を各デバイスモデルに通知することができる。また、シミュレータ装置１００によれば、各デバイスモデルに通知された動作処理情報に基づいて、各デバイスモデルに動作するか否かを判断させることができる。また、シミュレータ装置１００によれば、各デバイスモデルが動作すると判断した場合に、各デバイスモデルに動作処理情報から特定される動作内容の処理を実行させることができる。これにより、新規エミュレーション時と同様のタイミングで、新規エミュレーション時と同様の動作内容の処理をデバイスモデルに実行させることができる。
【０１７８】
また、シミュレータ装置１００によれば、各デバイスモデルに通知した動作処理情報に対応する動作ログがいずれかのデバイスモデルから出力された場合に、第２動作処理情報リストＬ２に従って、次の動作処理情報を各デバイスモデルに通知することができる。これにより、新規エミュレーション時と同様の処理順序で、新規エミュレーション時と同様の動作内容の処理をデバイスモデルに実行させることができる。
【０１７９】
これらのことから、シミュレータ装置１００によれば、被試験プログラムＴＰの再現エミュレーション時に、被試験プログラムＴＰの新規エミュレーション時と同様の動作をエミュレータＥＭ上で再現することができる。また、エミュレータＥＭ上の各モデルを一括管理するスケジューラを設ける場合に比べて、再現エミュレーション時のＣＰＵ２０１にかかる負荷を抑えて、新規エミュレーション時と同様の動作を効率的に再現することができる。
【０１８０】
この結果、新規エミュレーション時に何らかの不具合が発生した時のログ情報ＬＤを再現エミュレーションに用いることにより、同様の不具合の発生を促すことが可能になり、被試験プログラムＴＰのデバッグにかかる作業時間の短縮化を図ることができる。また、例えば、エミュレータＥＭ上で複数のファームウェア（被試験プログラムＴＰ）を同時並列で動作させることにより、ファームウェアの同時並列動作による相互干渉問題を再現することができる。
【０１８１】
なお、本実施の形態で説明した制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１８２】
また、本実施の形態で説明したシミュレータ装置１００は、スタンダードセルやストラクチャードＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの特定用途向けＩＣ（以下、単に「ＡＳＩＣ」と称す。）やＦＰＧＡなどのＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）によっても実現することができる。具体的には、例えば、上述したシミュレータ装置１００の各機能部をＨＤＬ記述によって機能定義し、そのＨＤＬ記述を論理合成してＡＳＩＣやＰＬＤに与えることにより、シミュレータ装置１００を製造することができる。
【０１８３】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１８４】
（付記１）被試験プログラムを実行するプロセッサの動作を模擬するモデルと周辺デバイスの動作を模擬するモデルとを含むシステム上で前記被試験プログラムを実行させる実行部と、
前記被試験プログラムを実行させた結果得られる、各モデルから出力される動作ログを処理順に示すログ情報を取得する取得部と、
前記被試験プログラムを再実行中に、前記ログ情報に基づいて、次に動作可能なモデルと動作内容を識別する動作処理情報を前記各モデルに通知する通知部と、
前記各モデルに通知された前記動作処理情報に基づいて、前記各モデルに動作するか否かを判断させ、前記各モデルが動作すると判断した場合に、前記各モデルに前記動作内容の処理を実行させる制御部と、
を有することを特徴とするシミュレータ装置。
【０１８５】
（付記２）前記通知部は、
前記システム内のいずれかのモデルから前記動作処理情報に対応する動作ログが出力された場合、前記ログ情報に基づいて、次に動作可能なモデルと動作内容を識別する動作処理情報を前記各モデルに通知することを特徴とする付記１に記載のシミュレータ装置。
【０１８６】
（付記３）前記通知部は、
次に動作可能なモデルが前記周辺デバイスの動作を模擬するデバイスモデルの場合、前記次に動作可能なデバイスモデルと動作内容を識別する動作処理情報を、前記システム内の各デバイスモデルに通知し、前記システム内のいずれかのデバイスモデルから前記動作処理情報に対応する動作ログが出力された場合に、前記ログ情報に基づいて、次に動作可能なデバイスモデルと動作内容を識別する動作処理情報を前記各デバイスモデルに通知することを特徴とする付記２に記載のシミュレータ装置。
【０１８７】
（付記４）前記通知部は、
次に動作可能なモデルが前記プロセッサの動作を模擬するプロセッサモデルの場合、前記次に動作可能なプロセッサモデルと動作内容を識別する動作処理情報を、前記システム内の各プロセッサモデルに通知し、前記システム内のいずれかのプロセッサモデルから前記動作処理情報に対応する動作ログが出力された場合に、前記ログ情報に基づいて、次に動作可能なプロセッサモデルと動作内容を識別する動作処理情報を前記各プロセッサモデルに通知することを特徴とする付記２または３に記載のシミュレータ装置。
【０１８８】
（付記５）前記プロセッサモデルから出力される割り込み処理の動作ログには、前記割り込み処理に移行した際のプログラムカウンタの値が含まれており、
前記通知部は、
次に動作可能な割り込み処理の動作内容と当該割り込み処理に移行した際のプログラムカウンタの値を識別する動作処理情報を、前記各プロセッサモデルに通知することを特徴とする付記４に記載のシミュレータ装置。
【０１８９】
（付記６）被試験プログラムを実行するプロセッサの動作を模擬するモデルと、周辺デバイスの動作を模擬するモデルとを含むシステム上で前記被試験プログラムを実行させるコンピュータが、
前記被試験プログラムを実行させた結果得られる、各モデルから出力される動作ログを処理順に示すログ情報を取得し、
前記被試験プログラムを再実行中に、前記ログ情報に基づいて、次に動作可能なモデルと動作内容を識別する動作処理情報を前記各モデルに通知し、
前記各モデルに通知された前記動作処理情報に基づいて、前記各モデルに動作するか否かを判断させ、前記各モデルが動作すると判断した場合に、前記各モデルに前記動作内容の処理を実行させる、
処理を実行することを特徴とする制御方法。
【０１９０】
（付記７）被試験プログラムを実行するプロセッサの動作を模擬するモデルと、周辺デバイスの動作を模擬するモデルとを含むシステム上で前記被試験プログラムを実行させるコンピュータに、
前記被試験プログラムを実行させた結果得られる、各モデルから出力される動作ログを処理順に示すログ情報を取得し、
前記被試験プログラムを再実行中に、前記ログ情報に基づいて、次に動作可能なモデルと動作内容を識別する動作処理情報を前記各モデルに通知し、
前記各モデルに通知された前記動作処理情報に基づいて、前記各モデルに動作するか否かを判断させ、前記各モデルが動作すると判断した場合に、前記各モデルに前記動作内容の処理を実行させる、
処理を実行させることを特徴とする制御プログラム。
【符号の説明】
【０１９１】
１００  シミュレータ装置
７０１  実行部
７０２  取得部
７０３  生成部
７０４  通知部
７０５  制御部
７０６  出力部
【図１】
2014182518.tif 000003
【図２】
2014182518.tif 000004
【図３Ａ】
2014182518.tif 000005
【図３Ｂ】
2014182518.tif 000006
【図４】
2014182518.tif 000007
【図５】
2014182518.tif 000008
【図６】
2014182518.tif 000009
【図７】
2014182518.tif 000010
【図８Ａ】
2014182518.tif 000011
【図８Ｂ】
2014182518.tif 000012
【図９】
2014182518.tif 000013
【図１０】
2014182518.tif 000014
【図１１】
2014182518.tif 000015
【図１２】
2014182518.tif 000016
【図１３】
2014182518.tif 000017
【図１４】
2014182518.tif 000018
【図１５】
2014182518.tif 000019
【図１６】
2014182518.tif 000020
【図１７】
2014182518.tif 000021
【図１８】
2014182518.tif 000022
【図１９】
2014182518.tif 000023