(57)【特許請求の範囲】
【請求項１】
ＣＰＵの動作を模擬するエミュレーション装置と、前記エミュレーション装置からの転送データを受け取るホスト装置と、を備えるエミュレーションシステムであって、
前記エミュレーション装置は、
ＣＰＵの処理を模擬して検証対象のプログラムをシミュレーション実行する処理部と、
前記処理部が出力するトレースデータを格納する第１格納部と、
前記ホスト装置から受信した制御情報に応じて、前記処理部の処理、または前記第１格納部へのトレースデータの書き込み、を制御する第１制御部と、を備え、
前記エミュレーション装置及び前記ホスト装置のいずれかは、前記処理部が出力するトレースデータをフィルタリング条件に従ってフィルタリングしたフィルタリング結果データを生成し、
前記ホスト装置は、
前記フィルタリング結果データを格納する第２格納部と、
前記フィルタリング結果データが所定条件を満たした場合に、前記制御情報を生成して前記エミュレーション装置に出力する第２制御部と、を備える、
エミュレーションシステム。
【請求項２】
前記エミュレーション装置は、
前記フィルタリングを行うフィルタリング部を備えることを特徴とする請求項１に記載のエミュレーションシステム。
【請求項３】
前記制御情報は、
前記処理部のシミュレーション処理の停止、前記処理部のトレースデータの出力停止、または前記第１格納部へのトレースデータの書き込みの禁止、のいずれかを指示する停止制御情報、
または、前記処理部のシミュレーション処理の再開、前記処理部のトレースデータの出力再開、前記第１格納部へのトレースデータの書き込みの再開、のいずれかを指示する再開制御情報、のいずれかの値をとることを特徴とする請求項１または請求項２に記載のエミュレーションシステム。
【請求項４】
前記ホスト装置は、
比較対象となるトレースデータを保持する第３格納部を更に備え、
前記第２制御部は、前記第２格納部に格納された前記フィルタリング結果データと、前記第３格納部に格納されたトレースデータと、を比較し、比較結果に基づいて前記制御情報を生成することを特徴とする請求項３に記載のエミュレーションシステム。
【請求項５】
前記第３格納部は、前記プログラムまたは当該プログラムを一部改変したプログラムの実行履歴であるトレースデータを保持することを特徴とする請求項４に記載のエミュレーションシステム。
【請求項６】
前記第２制御部は、前記第２格納部が保持する前記フィルタリング結果データと、前記第３格納部に格納されたトレースデータに不一致箇所がある場合に、前記制御情報として前記停止制御情報を生成することを特徴とする請求項５に記載のエミュレーションシステム。
【請求項７】
前記ホスト装置は、第４格納部を有し、
前記第１制御部は、前記制御情報として前記停止制御情報を受信した場合、前記処理部の処理、または前記第１格納部へのトレースデータの書き込み、の停止制御をするとともに、前記第１格納部に格納されたトレースデータを、エラーにかかるトレースデータであるエラートレースデータとして前記ホスト装置に転送し、
前記第４格納部は、前記エラートレースデータを格納することを特徴とする請求項３乃至請求項６のいずれか１項に記載のエミュレーションシステム。
【請求項８】
前記第１制御部は、前記エラートレースデータの転送処理後に、前記停止制御の解除を行うことを特徴とする請求項７に記載のエミュレーションシステム。
【請求項９】
前記第１格納部は、リングモードでのデータ保持を行うトレースメモリであることを特徴とする請求項１乃至請求項８のいずれか１項に記載のエミュレーションシステム。
【請求項１０】
前記第２制御部は、前記フィルタリング結果データが前記所定条件を満たしてから一定時間を待ち合わせた後に、前記制御情報を前記エミュレーション装置に送信することを特徴とする請求項１乃至請求項９のいずれか１項に記載のエミュレーションシステム。
【請求項１１】
シミュレーション結果であるトレースデータをホスト装置に転送するエミュレーション装置であって、
ＣＰＵの処理を模擬して検証対象のプログラムをシミュレーションする処理部と、
前記処理部が出力するトレースデータを格納する第１格納部と、
前記ホスト装置から受信した制御情報に応じて、前記処理部の処理、または前記第１格納部へのトレースデータの書き込み、を制御する第１制御部と、を備え、
前記制御情報は、前記処理部が出力するトレースデータをフィルタリング条件に従いフィルタリングしたフィルタリング結果データが、所定条件を満たした場合に前記ホスト装置から送信される情報である、ことを特徴とする、エミュレーション装置。
【請求項１２】
前記制御情報は、
前記処理部のシミュレーション処理の停止、前記処理部のトレースデータの出力停止、または前記第１格納部へのトレースデータの書き込みの禁止、のいずれかを指示する停止制御情報、
または、前記処理部のシミュレーション処理の再開、前記処理部のトレースデータの出力再開、前記第１格納部へのトレースデータの書き込みの再開、のいずれかを指示する再開制御情報、のいずれかの値をとることを特徴とする請求項１１に記載のエミュレーション装置。
【請求項１３】
前記フィルタリングを行うフィルタリング部を備えることを特徴とする請求項１１または請求項１２に記載のエミュレーション装置。
【請求項１４】
前記第１格納部は、リングモードでのデータ保持を行うトレースメモリであることを特徴とする請求項１１乃至請求項１３のいずれか１項に記載のエミュレーション装置。
【請求項１５】
ＣＰＵの動作を模擬するエミュレーション装置と、前記エミュレーション装置からの転送データを受け取るホスト装置と、を備えるエミュレーションシステムの制御方法であって、
前記エミュレーション装置は、
ＣＰＵの処理を模擬して検証対象のプログラムのシミュレーションを実行し、
シミュレーション結果であるトレースデータを第１格納部に格納し、
前記ホスト装置から受信した制御情報に応じて、前記シミュレーション、または前記第１格納部へのトレースデータの書き込み、を制御し、
前記ホスト装置は、
前記トレースデータをフィルタリング条件に従いフィルタリングしたフィルタリング結果データを第２格納部に格納し、
前記フィルタリング結果データが所定条件を満たした場合に、前記制御情報を生成して前記エミュレーション装置に出力する、制御方法。
【請求項１６】
前記制御情報は、
前記シミュレーションの処理の停止、前記トレースデータの出力停止、または前記第１格納部へのトレースデータの書き込みの禁止、のいずれかを指示する停止制御情報、
または、前記シミュレーションの処理の再開、前記トレースデータの出力再開、前記第１格納部へのトレースデータの書き込みの再開、のいずれかを指示する再開制御情報、のいずれかの値をとることを特徴とする請求項１５に記載の制御方法。
【請求項１７】
前記エミュレーション装置は、
前記フィルタリングを行うフィルタリング部を備えることを特徴とする請求項１５または請求項１６に記載の制御方法。
【請求項１８】
前記ホスト装置は、
比較対象となるトレースデータを保持する第３格納部を更に備え、
前記第２格納部に格納された前記フィルタリング結果データと、前記第３格納部に格納されたトレースデータと、を比較し、比較結果に基づいて前記制御情報を生成することを特徴とする請求項１５乃至請求項１７のいずれか１項に記載の制御方法。
【請求項１９】
ＣＰＵを模擬してシミュレーションを実行し、実行結果であるトレースデータを第１格納部に格納するエミュレーション装置から転送データを受信するホストコンピュータで実行されるプログラムであって、
前記ホストコンピュータに、
前記トレースデータをフィルタリングしたフィルタリング結果データが、所定条件を満たすか否かを判定する判定ステップと、
前記判定ステップにおいて前記所定条件を満たすと判定された場合に、前記シミュレーションの処理または前記第１格納部への書き込みを制御する制御情報を生成する生成ステップと、
前記制御情報を前記エミュレーション装置に送信する送信ステップと、を実行させる、
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、エミュレーションシステム、エミュレーション装置、エミュレーションシステムの制御方法、プログラムに関し、特にシミュレーション結果をトレースデータとして保存するエミュレーションシステム、エミュレーション装置、エミュレーションシステムの制御方法、プログラムに関する。
【背景技術】
【０００２】
マイクロコンピュータは、高性能化、高機能化が進んでいる。これに伴い、マイクロコンピュータ上で動作する実行プログラムも大規模化し、かつ複雑化してきている。
【０００３】
近年では、マイクロコンピュータ（マイクロコントローラ、マイコンとも呼称する。）を模擬するシミュレーションシステムや装置が多く開発されている。これらのシミュレーションシステムは、一般的に、オンチップデバッグエミュレータ、インサーキットエミュレータをはじめとするエミュレーション装置と、ホストコンピュータと、から構成される。
【０００４】
一般に、これらのシミュレーションシステムを用いてプログラムのデバッグや性能解析を行う場合に、ユーザは、マイクロコンピュータのＣＰＵ（Central Processing Unit）を模擬する処理部の処理結果が記載されたトレースデータを参照する。以下、トレースデータの取得に関する先行技術について説明する。
【０００５】
特許文献１は、トレースメモリの容量に依存しない長時間トレースシステムを開示している。この長時間トレースシステムは、インサーキットエミュレータと、ホストコンピュータと、から構成される。インサーキットエミュレータ内にてエミュレーション動作を行い、その実行結果であるトレースデータがインサーキットエミュレータ内のデュアルポートメモリに書き込まれる。この書き込みと同時に、インサーキットエミュレータは、トレースデータをホストコンピュータに転送する。ホストコンピュータは、大容量の記憶装置を有し、受信したトレースデータをこの大容量の記憶装置内に格納する。
【０００６】
特許文献２は、デバッグ対象としているタスクに関するトレースデータのみをトレースメモリに格納することが可能なマイクロコンピュータを開示している。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００１−３２５１２１号公報
【特許文献２】特開２００６−９２０２９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
一般に、ユーザがトレースデータの全てを詳細に参照する必要があるケースは少ない。多くの場合、ある一部の情報を参照すれば、ユーザは、マイクロコンピュータのデバッグや性能解析に十分に対応可能である。しかし、エラーが生じた場合には、その前後の動作の詳細を的確に把握したい場合が多い。すなわち、通常動作時には必要なトレースデータのみを参照することができ、かつ所定の事象が発生した場合（たとえば異常発生時）には詳細なトレースデータを参照できることが望ましい。
【０００９】
特許文献１に記載の長時間トレースシステムでは、インサーキットエミュレータは、全てのトレースデータをホストコンピュータに転送している。そのため、デバッグや性能調査に従事するユーザは、ホストコンピュータ上で全てのトレースデータから所望のデータを検索して参照しなければならない。
【００１０】
特許文献２に記載のマイクロコンピュータでは、タスクに関するトレースデータのみを取得可能である。しかしながら、何らかの異常が発生した場合であっても、該当タスクに関するトレースデータのみしか取得できない。
【００１１】
すなわち、エミュレーションシステムにおいて、通常動作時には必要なトレースデータのみを参照することができるものの、所定の事象が発生した場合（たとえば異常発生時）に詳細なトレースデータを参照することが出来ないという問題があった。
【課題を解決するための手段】
【００１２】
本発明にかかるエミュレーションシステムの一態様は、
ＣＰＵの動作を模擬するエミュレーション装置と、前記エミュレーション装置からの転送データを受け取るホスト装置と、を備えるエミュレーションシステムであって、
前記エミュレーション装置は、
ＣＰＵの処理を模擬して検証対象のプログラムをシミュレーションする処理部と、
前記処理部が出力するトレースデータを格納する第１格納部と、
前記ホスト装置から受信した制御情報に応じて、前記処理部の処理、または前記第１格納部へのトレースデータの書き込み、を制御する第１制御部と、を備え、
前記ホスト装置は、
前記処理部が出力するトレースデータをフィルタリング条件に従いフィルタリングしたフィルタリング結果データを格納する第２格納部と、
前記フィルタリング結果データが所定条件を満たした場合に、前記制御情報を前記エミュレーション装置に出力する第２制御部と、を備える、ものである。
【００１３】
本発明にかかるエミュレーション装置の一態様は、
シミュレーション結果であるトレースデータをホスト装置に転送するエミュレーション装置であって、
ＣＰＵの処理を模擬して検証対象のプログラムをシミュレーションする処理部と、
前記処理部が出力するトレースデータを格納する第１格納部と、
前記ホスト装置から受信した制御情報に応じて、前記処理部の処理、または前記第１格納部へのトレースデータの書き込み、を制御する第１制御部と、を備え、
前記制御情報は、前記処理部が出力するトレースデータをフィルタリング条件に従いフィルタリングしたフィルタリング結果データが、所定条件を満たした場合に前記ホスト装置から送信される、ものである。
【００１４】
本発明にかかる制御方法の一態様は、
ＣＰＵの動作を模擬するエミュレーション装置と、前記エミュレーション装置からの転送データを受け取るホスト装置と、を備えるエミュレーションシステムの制御方法であって、
前記エミュレーション装置は、
ＣＰＵの処理を模擬して検証対象のプログラムのシミュレーションを実行し、
シミュレーション結果であるトレースデータを第１格納部に格納し、
前記ホスト装置から受信した制御情報に応じて、前記シミュレーション、または前記第１格納部へのトレースデータの書き込み、を制御し、
前記ホスト装置は、
前記トレースデータをフィルタリング条件に従いフィルタリングしたフィルタリング結果データを第２格納部に格納し、
前記フィルタリング結果データが所定条件を満たした場合に、前記制御情報を前記エミュレーション装置に出力する、ものである。
【００１５】
本発明にかかるプログラムに一態様は、
ＣＰＵを模擬してシミュレーションを実行し、実行結果であるトレースデータを第１格納部に格納するエミュレーション装置から転送データを受信するホストコンピュータで実行されるプログラムであって、
前記ホストコンピュータに、
前記トレースデータをフィルタリングしたフィルタリング結果データが、所定条件を満たすか否かを判定する判定ステップと、
前記判定ステップにおいて前記所定条件を満たすと判定された場合に、前記シミュレーションの処理または前記第１格納部への書き込みを制御する制御情報を生成する生成ステップと、
前記制御情報を前記エミュレーション装置に送信する送信ステップと、を実行させる、ものである。
【００１６】
本発明では、エミュレーション装置内にトレースデータを格納するとともに、所望の条件によりフィルタリング済みのトレースデータ（フィルタリング結果データ）をホスト装置が保持する。これにより、ユーザは、シミュレーションを通常実行している場合には、ホスト装置内のトレースデータ（フィルタリング結果データ）を参照することにより、必要なトレースデータのみを参照することができる。さらに、ホスト装置は、フィルタリング結果データが所定条件（たとえばエラー発生時）を満たした場合にエミュレーション装置におけるシミュレーション処理またはトレースデータの書き込みを制御する。これにより、エミュレーション装置におけるトレースデータの上書き等を禁止できる。上書き等を禁止により、ユーザは、エラー発生時の詳細なトレースデータをエミュレーション装置上で参照することができる。
【発明の効果】
【００１７】
本発明では、通常動作時には必要なトレースデータのみを参照することができ、かつ所定の事象が発生した場合（たとえば異常発生時）には詳細なトレースデータを参照することが出来るエミュレーションシステム、エミュレーション装置、エミュレーションシステムの制御方法、プログラムを提供することができる。
【図面の簡単な説明】
【００１８】
【図１】本発明の実施の形態１にかかるエミュレーションシステムの構成を示すブロック図である。
【図２】本発明の実施の形態１にかかるトレースメモリ１２０の構成、及び書き込み手法を示す概念図である。
【図３】本発明の実施の形態１にかかる制御部２２０の動作、及びトリガ条件の詳細を示す概念図である。
【図４】本発明の実施の形態１にかかるエミュレーションシステムの動作を示すフローチャートである。
【図５】本発明の実施の形態２にかかるエミュレーションシステムの構成を示すブロック図である。
【図６】本発明の実施の形態２にかかる制御部２２０の動作を示す概念図である。
【図７】本発明の実施の形態２にかかる制御部２２０の動作を示す概念図である。
【図８】本発明の実施の形態３にかかるエミュレーションシステムの構成を示すブロック図である。
【図９】本発明の実施の形態１にかかるエミュレーションシステムの構成を示すブロック図である。
【図１０】コンピュータシステムのハードウェア構成例を示すブロック図である。
【発明を実施するための形態】
【００１９】
＜実施の形態１＞
以下、図面を参照して本発明の実施の形態について説明する。図１は、本実施の形態にかかるエミュレーションシステムの構成を示すブロック図である。当該エミュレーションシステムは、エミュレータ１００（エミュレーション装置）と、ホストコンピュータ２００（ホスト装置）と、を備える。エミュレータ１００は、マイクロコンピュータの機能を実現するインサーキットエミュレータ（ＩＣＥ）あるいはオンチップデバッグエミュレータである。
【００２０】
エミュレータ１００は、ＣＰＵ（Central Processing Unit）シミュレーション部１１０（処理部）と、トレースメモリ１２０（第１格納部）と、制御部１３０（第１制御部）と、フィルタ部１４０と、ホストインターフェイス１５０と、を備える。
【００２１】
ＣＰＵシミュレーション部１１０には、シミュレーションの対象となるマイクロコンピュータを動作させるためのプログラムが入力される。ＣＰＵシミュレーション部１１０は、当該プログラムを動作させることにより、マイクロコンピュータの動作をシミュレーションする。
【００２２】
ＣＰＵシミュレーション部１１０は、シミュレーションの実行結果としてトレースデータを生成する。ＣＰＵシミュレーション部１１０は、例えば図示しないピンの設定、あるいはレジスタ設定により、生成するトレースデータの種別（分岐トレース情報、アクセストレース情報等）を決定する。ＣＰＵシミュレーション部１１０は、生成したトレースデータを、トレース出力部１１１を介して制御部１３０及びフィルタ部１４０に供給する。トレース出力部１１１は、トレースデータをフィルタ部１４０及び制御部１３０に出力するインターフェイスである。
【００２３】
トレースメモリ１２０は、トレースデータを逐次保持していく記憶装置である。トレースメモリ１２０は、後述するトレースデータ格納部２３０に比べて小容量である場合が一般的である。トレースメモリ１２０は、例えば、リングモードで書き込みが可能な記憶装置である。トレースメモリ１２０の構成の一例を、図２を参照して説明する。
【００２４】
トレースメモリ１２０には、先頭アドレス（図２では、アドレス"０ｘ００００００"）から順にデータが書き込まれる。より詳細には、トレースメモリ１２０は、先頭アドレスから順にデータが書き込まれるように制御し、最終アドレス（図２では、アドレス"０ｘｆｆｆｆｆｆ"）まで書き込みが終了した場合に、再度先頭アドレスから書き込みが行われるように制御する。すなわち、トレースメモリ１２０は、容量超過時には古いデータを優先的に新しいデータに更新する、リングモード形式で書込みを行う記憶装置である。なお、トレースメモリ１２０は、読み出し処理と書き込み処理を同時に実行可能なデュアルポートメモリであってもよく、他の形態のメモリであっても良い。ユーザは、トレースメモリ１２０に書き込まれたトレースデータを参照することにより、シミュレーションの実行状態を把握する。
【００２５】
再び図１を参照する。制御部１３０は、トレースメモリ１２０へのトレースデータの書き込みを制御する。制御部１３０は、ＣＰＵエミュレーション部１１０によるシミュレーション実行の状態に応じてトレースメモリ１３０へのデータ書き込みを開始、または停止することができる（セレクショントレース機能）。
【００２６】
例えば、ＣＰＵエミュレーション部１１０により、特定番地からの命令実行が行われた場合、制御部１３０は、トレースメモリ１２０へのトレースデータ書き込みを開始（または停止）する。また、制御部１３０は、トレースメモリ１２０がトレースメモリフル（全容量を使い切った、すなわち空き容量がない）となった場合にもトレースデータの書き込みを停止しても良い。
【００２７】
さらに、本実施の形態にかかる制御部１３０は、ホストコンピュータ２００からの制御情報の通知に応じて、トレースメモリ１２０またはＣＰＵシミュレーション部１１０の制御を行う。制御情報とは、ホストコンピュータ２００に格納されるトレースデータが所定の条件を満たした場合に、発行される情報である。
【００２８】
一般的に、制御部１３０は、ホストコンピュータ２００においてエラーの疑いのあるトレースデータが検出された場合に、トレースメモリ１２０に上書きが生じないように制御する。詳細には、制御部１３０は、制御情報の通知を受け付けた場合に以下の制御のいずれかを行う。
（１）トレースメモリ１２０へのトレースデータの書き込みの停止、または書き込み停止の解除
（２）ＣＰＵシミュレーション部１１０によるシミュレーション実行の停止、またはシミュレーション実行の再開
（３）トレース出力部１１１からのトレースデータの出力の停止、またはトレースデータの出力の再開
【００２９】
制御情報は、停止制御を指示する情報（停止制御情報）、または再開制御を指示する情報（再開制御情報）のいずれかの値となる。制御情報が停止制御を指示する情報である場合、制御部１３０は、（１）トレースメモリ１２０へのトレースデータの書き込みの停止、（２）ＣＰＵシミュレーション部１１０によるシミュレーション実行の停止、（３）トレース出力部１１１からのトレースデータの出力の停止、のいずれかの制御を行う。一方、制御情報が再開制御を指示する情報である場合、制御部１３０は、（１）トレースメモリ１２０へのトレースデータの書き込みの再開、（２）ＣＰＵシミュレーション部１１０によるシミュレーション実行の再開、（３）トレース出力部１１１からのトレースデータの出力の再開、のいずれかの制御を行う。
【００３０】
ここで、（２）に記載するＣＰＵシミュレーション部１１０によるシミュレーション実行の停止制御を行う場合、制御情報の通知（エラー発生時等）によって、ＣＰＵによるシミュレーションが確実に停止し、ユーザによるトレースメモリ１２０の参照後に停止箇所からのシミュレーションを再開できる。しかしながら、ＣＰＵの動作を止めるように制御するため、他の処理も全て止まってしまう。
【００３１】
一方、（１）または（３）に記載する制御を行う場合、トレースメモリ１２０の更新のみが停止し、ＣＰＵシミュレーション部１１０によるシミュレーション実行が継続してしまう。すなわち、トレースデータが記録されないままシミュレーションが実行されてしまう。しかしながら、ＣＰＵのシミュレーション動作が止まらないため、他の処理部に対する影響が少ない。
【００３２】
そのため、シミュレーションを行うプログラムの性質等を考慮し、ユーザは、制御部１３０がどのような制御を行うのかを設定すればよい。
【００３３】
ホストコンピュータ２００による制御情報の生成の詳細は、図３等を参照して後述する。
【００３４】
フィルタ部１４０は、設定されたフィルタリング条件を用いて、ＣＰＵシミュレーション部１１０から供給されたトレースデータを順次フィルタリングする。当該フィルタリング条件は、予めユーザによって設定される。フィルタリング条件の一例として、「分岐トレース情報からタスク遷移情報のみを取得する」、「アクセストレース情報から変数遷移に関する情報のみを取得する」等が挙げられる。フィルタ部１４０は、フィルタリングしたトレースデータ（フィルタリング条件に合致したトレースデータ）を、ホストインターフェイス１５０を介してホストコンピュータ２００に転送する。なお、以下の記載において、フィルタ部１４０によるフィルタリング処理を行った後のトレースデータを、「フィルタリング結果データ」とも記載する。
【００３５】
フィルタ部１４０は、設定されたフィルタリング条件に合致するトレースデータをすべてフィルタリング結果データとして出力する。よって、フィルタリング条件によっては、ＣＰＵシミュレーション部１１０が出力したトレースデータと、フィルタリング結果データと、が完全に一致する場合がある。また、フィルタリング条件によっては、フィルタリング結果データとして空データが出力される場合がある。
【００３６】
ホストインターフェイス１５０は、ホストコンピュータ２００とのデータのやり取りを行うインターフェイスである。ホストインターフェイス１５０は、フィルタ部１４０からフィルタリング結果データを受信する。ホストインターフェイス１５０は、受信したフィルタリング結果データをホストコンピュータ２００に順次転送する。なお、ホストインターフェイス１５０は、例えば内部にＦＩＦＯ（First In First Out）メモリを有し、トレースデータをＦＩＦＯメモリ内に適宜格納し、所定時間経過毎にＦＩＦＯメモリ内のトレースデータを転送する。
【００３７】
さらに、ホストインターフェイス１５０は、ホストコンピュータ２００からの書き込み制御情報を受信し、受信した書き込み制御情報を制御部１３０に供給する。
【００３８】
ホストコンピュータ２００は、ホストインターフェイス２１０と、制御部２２０（第２制御部）と、トレースデータ格納部２３０（第２格納部）と、を備える。ホストコンピュータ２００は、図示しないＬＣＤ（Liquid Crystal Display）等のディスプレイ装置と接続または一体化され、マウス、キーボード等の入力装置と接続されている。ユーザは、ホストコンピュータ２００の入力装置を操作することにより、フィルタリング結果データを適宜参照することができる。
【００３９】
ホストインターフェイス２１０は、エミュレータ１００とのデータやり取りのインターフェイスとなる。ホストインターフェイス２１０は、エミュレータ１００からフィルタリング結果データを受信する。ホストインターフェイス２１０は、受信したフィルタリング結果データを制御部２２０に転送する。さらに、ホストインターフェイス２１０は、制御部２２０から制御情報を受信し、当該制御情報をエミュレータ１００に転送する。
【００４０】
制御部２２０は、ホストコンピュータ２００の各種制御を行う。制御部２２０は、受信したフィルタリング結果データをトレースデータ格納部２３０に格納する。また、制御部２２０は、トレースデータ格納部２３０内のフィルタリング結果データが、ユーザにより指定された条件（トリガ条件）を満たした場合に、制御情報を生成する。制御部２２０は、図示しない記憶部に上述のトリガ条件を保持する。
【００４１】
図３を参照して、制御部２２０の動作、及びトリガ条件の詳細について説明する。図３は、ＣＰＵシミュレーション部１１０が出力するトレースデータ、フィルタ部１４０の処理、及び制御部２２０の動作を示す概念図である。
【００４２】
ＣＰＵシミュレーション部１１０は、シミュレーションの実行結果として分岐トレース情報（分岐元アドレス、分岐先アドレス、分岐要因、及び関数遷移先）を出力する。フィルタ部１４０は、当該分岐トレース情報を予め定められたフィルタリング条件に従ってフィルタリングする。ここで、フィルタリング条件は、分岐要因が"ＣＡＬＬＴ"である全てのデータを取得するものとする。フィルタ部１４０は、条件に合致するデータを抽出し、ホストインターフェイス１５０を介して制御部２２０にフィルタリング結果データを送信する。
【００４３】
制御部２２０は、トリガ条件を有している。本例では、トリガ条件は、関数遷移が"Ａ、Ｂ、Ｃ、Ｄ、Ｘ"の順で生じた場合または"Ａ、Ｘ"の順で生じた場合、停止制御情報を送信することが定められている。制御部２２０は、フィルタリング結果条件が当該トリガ条件（関数遷移が"Ａ、Ｂ、Ｃ、Ｄ、Ｘ"の順）を満たしているため、制御情報として停止制御情報を、ホストインターフェイス２１０を介して制御部１３０に送信する。
【００４４】
なお、トリガ条件は、任意の条件を設定することができる。例えば、「一定時間内に割り込み処理が５回以上発生した」、「所定の関数遷移（たとえば関数遷移（Ａ、Ｂ、Ｃ））が複数回実行された」等の事象をトリガ条件としても良い。また、当該トリガ条件に対して、停止制御情報だけでなく、再開制御情報を関連付けてもよい。
【００４５】
さらに、当該条件に、待ち時間の概念を設けても良い。例えば、トリガ条件に、「関数遷移が"Ａ、Ｂ、Ｃ、Ｄ、Ｘ"の順で生じた場合に、"１００ｍｓ"だけ待ち合わせた後に停止制御情報を送信する」という情報を設定しても良い。この場合、条件を満たした後、一定期間だけトレースメモリ１２０へのトレースデータの格納が確実に継続される。これにより、エラー発生前の詳細なトレースデータがトレースメモリ１２０に保存されると共に、エラー発生後の詳細なトレースデータがトレースメモリ１２０に格納される。すなわち、一定時間待ち合わせを行うことにより、所定の条件を満たした時間の前後の詳細なトレースデータをトレースメモリ１２０内に格納することができる。
【００４６】
再び、図１を参照して説明する。トレースデータ格納部２３０は、エミュレータ１００から転送されたトレースデータ（すなわちフィルタリング結果データ）を格納する。トレースデータ格納部２３０は、エミュレータ１００が現在実行中のシミュレーションに関するフィルタリング結果データが格納される。トレースデータ格納部２３０は、例えばデータを電子ファイル形式で保持する。ホストコンピュータ２００は、エミュレータ１００と比べて大容量のＨＤＤ（Hard Disc Drive）を有する。トレースデータ格納部２３０は、一般的に、トレースメモリ１２０と比べて大容量のデータを保持することができる。
【００４７】
続いて、図４を参照して、本実施の形態にかかるエミュレーションシステムの動作について説明する。図４は、本実施の形態にかかるエミュレーションシステムの動作を示すフローチャートである。
【００４８】
はじめに、エミュレータ１００は、シミュレーションを行う前の各種設定を行う（Ｓ１１）。そして、エミュレータ１００内のＣＰＵシミュレーション部１１０は、入力されたプログラムを用いて、シミュレーションを実行する（Ｓ１２）。シミュレーションの実行に応じて、ＣＰＵシミュレーション部１１０は、随時トレースデータを制御部１３０及びフィルタ部１４０に出力する（Ｓ１３）。
【００４９】
制御部１３０は、ＣＰＵシミュレーション部１１０から入力されたトレースデータをトレースメモリ１２０に書き込む（Ｓ１４）。フィルタ部１４０は、ＣＰＵシミュレーション部１１０から入力されたトレースデータに対して、フィルタリング条件に規定されたフィルタリング処理を行う（Ｓ１５）。そして、フィルタ部１４０は、フィルタリング結果データ（フィルタ済みのデータ）をホストコンピュータ２００に転送する（Ｓ１６）。
【００５０】
ホストコンピュータ２００内の制御部２２０は、転送されたフィルタリング結果データをトレースデータ格納部２３０に格納する（Ｓ１７）。これと共に、制御部２２０は、格納したフィルタリング結果データが、トリガ条件（制御情報を生成するか否かを決定する条件）に合致しているか否かを判定する（Ｓ１８）。
【００５１】
フィルタリング結果データがトリガ条件に合致していた場合、制御部２２０は、制御情報をエミュレータ１００に対して送信する（Ｓ１８）。制御情報に応じて、エミュレータ１００内の制御部１３０は、トレースメモリ１２０の書き込み、またはＣＰＵエミュレーション部１１０の処理、の制御を行う（Ｓ１４）。
【００５２】
ＣＰＵシミュレーション部１１０によるシミュレーション処理が終了した場合またはトレースデータの出力が終了した場合（Ｓ１９：Ｙｅｓ）、ユーザは、トレースメモリ１２０からトレースデータを取得するとともに、トレースデータ格納部２３０からフィルタリング結果データ（フィルタ済みのトレースデータ）を取得する（Ｓ２０）。
【００５３】
続いて、本実施の形態にかかるエミュレーションシステムの効果について説明する。上述したように、エミュレーション装置１００は、トレースデータをトレースメモリ１２０に格納し、ホストコンピュータ２００は、トレースデータをフィルタリングしたフィルタリング結果データをトレースデータ格納部２３０に格納する。ユーザは、トレースデータ格納部２３０に格納されたデータを参照することにより、所望のデータのみを参照することができる。さらに、エラー等の所定条件を満たす事象が発生した場合に、トレースメモリ１２０への書き込み、またはエミュレーション装置１００内のＣＰＵシミュレーション部１１０の処理が制御される。これにより、トレースメモリ１２０の更新が制御（すなわち停止）される。トレースメモリ１２０の更新が停止されるため、ユーザは、エラー発生直前の詳細データをトレースメモリ１２０から取得して参照することができる。
【００５４】
また、トレースメモリ１２０の更新が停止されるため、エミュレータ１００が備えるトレースメモリ１２０が容量の大きくないリングモード形式の書き込みを行う記憶装置であっても、ユーザは、エラー発生直前の詳細データを確実に参照することができる。
【００５５】
さらに、エミュレータ１００は、フィルタリング結果データをホストコンピュータ２００に対して送信している。すなわち、エミュレータ１００は、転送するデータ量を予め削減して転送処理を行っている。そのため、エミュレータ１００の転送負荷を削減することができ、送信するデータが多すぎることによるトレースデータの転送ロスを回避することができる。
【００５６】
＜実施の形態２＞
本発明の実施の形態２にかかるエミュレーションシステムは、ホストコンピュータ２００がフィルタリング結果データの比較対象となるリファレンストレースデータを保持することを特徴とする。実施の形態２にかかるエミュレーションシステムについて、実施の形態１と異なる点を中心に説明する。なお、以下の記載において、同一名称、同一符号を付し、特に説明しない処理部については、原則として実施の形態１（他の実施の形態）と同様の処理を行う（実施の形態３以降についても同様である）。
【００５７】
図５は、本実施の形態にかかるエミュレーションシステムの構成を示すブロック図である。ホストコンピュータ２００は、図１に記載の構成に加えて、リファレンストレースデータ格納部２４０（第３格納部）を備える。
【００５８】
リファレンストレースデータ格納部２４０は、トレースデータ格納部２３０内に格納されたフィルタリング結果データの比較対象となるトレースデータを格納する。好適には、リファレンストレースデータ格納部２４０は、以前に同一プログラム（または一部のみを修正したプログラム）を基にシミュレーションし、正常に実行が終了した際にエミュレータ１００から転送されたフィルタリング結果データを格納する。リファレンストレースデータ格納部２４０内のフィルタリング結果データは、制御部２２０から適宜参照される。
【００５９】
制御部２２０は、シミュレーション終了時に、トレースデータ格納部２３０から適宜フィルタリング結果データを読み出し、読み出したフィルタリング結果データをリファレンストレースデータ格納部２４０に転送する。制御部２２０は、転送後にトレースデータ格納部２３０をクリア（データを削除）する。なお、制御部２２０は、シミュレーション終了時に、自動的にリファレンストレースデータ格納部２４０への転送を行うのではなく、ＧＵＩ（Graphical User Interface）等を介したユーザへの問い合わせを行い、問い合わせの結果に応じて転送処理を行っても良い。
【００６０】
制御部２２０は、リファレンストレースデータ格納部２４０に格納されたフィルタリング結果データと、トレースデータ格納部２３０に格納するフィルタリング結果データと、を比較し、その比較結果に応じて制御情報を生成する。以下、図６を参照して、制御部２２０による制御情報の生成の例を説明する。
【００６１】
図６は、本実施の形態にかかる制御部２２０の処理を示す概念図である。図６には、リファレンストレースデータ格納部２４０に格納されたフィルタリング結果データ、エミュレータ１００から転送されたフィルタリング結果データが示されている。エミュレータ１００は、フィルタリング結果データを随時転送する。図６では、図３と同様に、ＣＰＵシミュレーション部１１０は、シミュレーションの実行結果として分岐トレース情報（分岐元アドレス、分岐先アドレス、分岐要因、及び関数遷移先）を出力し、フィルタ部１４０は、当該分岐トレース情報のうち分岐要因が"ＣＡＬＬＴ"である全てのデータを取得する。
【００６２】
制御部２２０は、リファレンストレースデータ格納部２４０に格納されたフィルタリング結果データと、トレースデータ格納部２３０に格納するフィルタリング結果データと、に相違点が生じた時点で、制御情報として停止制御情報を生成してエミュレータ１００に送信する。ここでは、リファレンストレースデータ格納部２４０内に、"Ａ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇ"の順序で関数呼び出しが行われたことを示すデータが保持されている。
【００６３】
制御部２２０は、トレースデータ格納部２３０に格納するフィルタリング結果データと、この関数呼び出しの遷移に相違があるかを検証する。制御部２２０は、関数遷移"Ａ、Ｂ、Ｃ、Ｄ"までは両者が同一であると判定する。そのため、制御部２２０は、関数遷移先"Ｄ"が記載されたデータの入力時点までは制御情報の生成を行わない。
【００６４】
関数遷移先"Ｘ"が記載されたデータを受信した場合、制御部２２０は、リファレンストレースデータ格納部２４０に格納されたデータの関数遷移とは異なることを検出する。そこで、制御部２２０は、この検出の時点に停止制御情報を生成する。すなわち、制御部２２０は、トレースメモリ１２０の更新が停止するように制御を行う。
【００６５】
上記一連の処理により、ユーザは、正常実行時との実行結果の差が生じた直前の詳細なデータを、トレースメモリ１２０を参照することにより把握することができる。
【００６６】
次に、図７を参照して、リファレンストレースデータ格納部２４０が複数回のシミュレーションに関するフィルタリング結果データを保持している場合の制御部２２０の動作を説明する。図７は、ｎ回のシミュレーションに関するフィルタリング結果データをリファレンストレースデータ格納部２４０が保持している場合の制御部２２０の動作を示す概念図である。ここで、各シミュレーションにおいて実行されたプログラムは、完全に同一でなくても良く、デバッグ処理により多少の相違のあるプログラムであっても良い。
【００６７】
制御部２２０は、リファレンストレースデータ格納部２４０に格納された全てのフィルタリング結果データと、トレースデータ格納部２３０に格納するフィルタリング結果データと、に相違点が生じた時点で、制御情報として停止制御情報を生成してエミュレータ１００に送信する。ここでは、リファレンストレースデータ格納部２４０内に、"Ａ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇ"、または"Ａ、Ｂ、Ｃ、Ｄ、Ｒ、Ｆ、Ｇ"の順序で関数呼び出しが行われたことを示すデータが保持されている。
【００６８】
制御部２２０は、トレースデータ格納部２３０に格納するフィルタリング結果データが、リファレンストレースデータ格納部２４０に格納されたフィルタリング結果データのいずれとも合致しない場合を検出する。制御部２２０は、関数遷移"Ａ、Ｂ、Ｃ、Ｄ"まではリファレンストレースデータ格納部２４０に格納されたフィルタリング結果データと同一パターンであると判定する。そのため、制御部２２０は、関数遷移先"Ｄ"が記載されたフィルタリング結果データの入力時点までは制御情報の生成を行わない。
【００６９】
関数遷移先"Ｘ"が記載されたフィルタリング結果データを受信した場合、制御部２２０は、リファレンストレースデータ格納部２４０に格納されたフィルタリング結果データの関数遷移のいずれとも合致しないことを検出する。そこで、制御部２２０は、この検出の時点に停止制御情報を生成する。すなわち、制御部２２０は、トレースメモリ１２０の更新が停止するように制御を行う。
【００７０】
上記一連の処理により、制御部２２０は、これまでのシミュレーションでは一度も実行されなかった動作が生じた場合に、トレースメモリ１２０の更新を停止できる。これにより、例えば発生確率の極めて低いエラーが発生した場合の詳細データをトレースメモリ１２０に格納することができる。
【００７１】
なお、上述の説明では、制御部２２０は、リファレンストレースデータ格納部２４０に格納されていないパターンのフィルタリング結果データが検出された場合に、トレースメモリ１２０の更新を停止させたが必ずしもこれに限られない。制御部２２０は、リファレンストレースデータ格納部２４０に格納されているものの検出回数が非常に少ないフィルタリング結果データと同一のデータパターンが検出された場合にも、トレースメモリ１２０の更新を停止しても良い。
【００７２】
また、制御部２２０は、ユーザが設定したトリガ条件によるトレースメモリ１２の制御と、リファレンストレースデータ格納部２４０を用いた制御を組み合わせて実行しても良い。
【００７３】
続いて、本実施の形態にかかるエミュレーションシステムの効果について記載する。本実施の形態にかかる制御部２２０は、リファレンストレースデータ格納部２４０に格納されたデータを用いて、制御情報の生成を行っている。これにより、ユーザは、制御部２２０に与えるトリガ条件を逐次設定する必要が無くなる。これにより、ユーザによる設定の手間が省けるとともに、設定ミスによるトレースメモリ１２０の誤制御を防止することができる。
【００７４】
なお、上述の説明では、リファレンストレースデータ格納部２４０には、過去にシミュレーションしたフィルタリング結果データが格納されるものとして説明したが、必ずしもこれに限られない。リファレンストレースデータ格納部２４０には、他のエミュレーションシステムにおいて実行されたシミュレーションの結果データが格納されてもよい。
【００７５】
＜実施の形態３＞
本実施の形態におけるエミュレーションシステムは、エラー発生時（トレースメモリ１２０の更新停止時）にトレースメモリ１２０内のデータをホストコンピュータ２００に転送することを特徴とする。本実施の形態にかかるエミュレーションシステムについて、他の実施の形態と異なる点を中心に説明する。
【００７６】
図８は、本実施の形態にかかるエミュレーションシステムの構成を示すブロック図である。本実施の形態にかかるエミュレーションシステムは、図５に示すエミュレーションシステムの構成に加えて、ホストコンピュータ２００内にエラートレースデータ格納部２５０（第４格納部）を有する。
【００７７】
エラートレースデータ格納部２５０は、トレースメモリ１２０の更新が停止した時点でのトレースメモリ１２０内のトレースデータのコピーを格納する記憶部である。
【００７８】
制御部２２０は、実施の形態１または実施の形態２と同様の手法でフィルタリング結果データを解析し、所定条件を満たした場合に停止制御情報を制御部１３０に対して送信する。
【００７９】
制御部１３０は、停止制御情報を受信した場合、トレースメモリ１２０への書き込みを停止する。なお、制御部１３０は、上述したようにＣＰＵシミュレーション部１１０によるシミュレーションの実行停止、またはトレース出力部１１１によるトレースデータの出力停止の制御を行ってもよい。
【００８０】
制御部１３０は、トレースメモリ１２０への書き込み停止制御の後に、トレースメモリ１２０内のトレースデータを全て読み出す。そして、制御部１３０は、読み出したトレースデータを、ホストインターフェイス１５０を介してホストコンピュータ２００に転送する。この際に、制御部１３０は、転送するトレースデータがトレースメモリ１２０の書き込み停止制御後のデータであること、すなわちエラーが生じた直後に更新が停止されたトレースデータ（エラートレースデータ）であることをホストコンピュータ２００に通知する。
【００８１】
ホストコンピュータ２００内の制御部２２０は、エラートレースデータを受信し、当該データをエラートレースデータ格納部２５０に格納する。
【００８２】
制御部１３０は、エラートレースデータの転送が終了した時点で、トレースメモリ１２０への書き込みの停止を解除する。
【００８３】
続いて、本実施の形態にかかるエミュレーションシステムの効果について説明する。上述したように、エラートレースデータ格納部２５０は、トレースメモリ１２０に格納されていたトレースデータと同一のデータを保持する。すなわち、エラートレースデータ格納部２５０には、エラー発生直前のトレースデータが格納される。これにより、ホストコンピュータ２００内に所望のフィルタリング条件を満たしたトレースデータ（トレースデータ格納部２３０）、及びエラー発生直前のトレースデータ（エラートレースデータ格納部２５０）が集約される。ユーザは、ホストコンピュータ２００を操作することのみにより、これらのトレースデータの参照が可能となる。
【００８４】
さらに、上述のように、エミュレータ１００は、トレースメモリ１２０内のトレースデータをホストコンピュータ２００に転送した後に、トレースメモリ１２０の更新を再開する（または、ＣＰＵシミュレーション部１１０によるシミュレーション実行の再開、またはトレース出力部１１１によるトレースデータ出力の再開）。これにより、シミュレーションが途中で中断したままの状態となることを防止することができる。
【００８５】
さらにまた、エラートレースデータ格納部２５０には、所定の場合（トリガ条件を満たした場合、またはリファレンストレースデータ格納部２４０内には存在しないデータパターンが検出された場合）にのみトレースデータが格納される。そのため、ユーザは、エラートレースデータ格納部２５０内にトレースデータが存在するか否かを判定するのみで、エラーと思われる事象が生じたか否かを容易に判定することができる。
【００８６】
以上、本発明を上記実施形態に即して説明したが、上記実施形態の構成にのみ限定されるものではなく、本願特許請求の範囲の請求項の発明の範囲内で当業者であればなし得る各種変形、修正、組み合わせを含むことは勿論である。
【００８７】
たとえば、上述の説明では、エミュレータ１００がフィルタ部１４０を備えることとしたが、これに限られず、ホストコンピュータ２００がフィルタ部を備えることとしてもよい。当該構成を図９に示す。エミュレータ１００は、トレース出力部１１１からの出力トレースデータをそのままホストコンピュータ２００に送信する。ホストコンピュータ２００内のフィルタ部２６０は、受信したトレースデータを所定のフィルタ条件に従ってフィルタリングする。その他の処理は、実施の形態１と同様である。
【００８８】
エミュレータ１００内の各処理部（ＣＰＵシミュレーション部１１０、制御部１３０、フィルタ部１４０）、及びホストコンピュータ２００内の制御部２２０の処理は、例えば任意のコンピュータ内で動作するプログラムとして実現することが可能である。
【００８９】
プログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（random access memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００９０】
ホストコンピュータ２００内の制御部２２０の処理をプログラムとして実行するコンピュータのハードウェア構成の一例を図１０に示す。当該コンピュータは、中央処理装置（ＣＰＵ, Central Processing Unit）３１０と、メモリ３２０と、を含んでいる。ＣＰＵ３１０及びメモリ３２０は、バスを介して補助記憶装置としてのハードディスク装置（ＨＤＤ）３３０に接続される。このコンピュータは、典型的には、ユーザ・インターフェース・ハードウェアを備える。ユーザ・インターフェース・ハードウェアとしては、例えば、入力をするためのポインティング・デバイス（マウス、ジョイスティック等）やキーボード等の入力装置３４０や、視覚データをユーザに提示するための液晶ディスプレイなどの表示装置３５０がある。ハードディスク装置３３０等の記憶媒体にはオペレーティングシステムと共同してＣＰＵ３１０等に命令を与え、上述した制御部２２０の各処理を実施するためのコンピュータ・プログラムを記憶することができる。
【符号の説明】
【００９１】
１００  エミュレータ
１１０  ＣＰＵシミュレーション部
１２０  トレースメモリ
１３０  制御部
１４０  フィルタ部
１５０  ホストインターフェイス
２００  ホストコンピュータ
２１０  ホストインターフェイス
２２０  制御部
２３０  トレースデータ格納部
２４０  リファレンストレースデータ格納部
２５０  エラートレースデータ格納部
２６０  フィルタ部
３１０  ＣＰＵ
３２０  メモリ
３３０  ハードディスク装置（ＨＤＤ）
３４０  入力装置
３５０  表示装置
【図１】
0005782389.tif 000002
【図２】
0005782389.tif 000003
【図３】
0005782389.tif 000004
【図４】
0005782389.tif 000005
【図５】
0005782389.tif 000006
【図６】
0005782389.tif 000007
【図７】
0005782389.tif 000008
【図８】
0005782389.tif 000009
【図９】
0005782389.tif 000010
【図１０】
0005782389.tif 000011