(57)【要約】【課題】必要なトレースデータを確実に転送することができるエミュレーション装置、エミュレーション方法、及びエミュレーションシステムを提供すること【解決手段】ＣＰＵシミュレーション部１１０は、ＣＰＵの処理をシミュレーションする。フィルタ部１４０は、ＣＰＵシミュレーション部１１０が出力するトレースデータをフィルタリング条件に基づいてフィルタリングする。転送部１５２は、フィルタリング結果を転送する。フィルタ部１５２は、フィルタリング結果の転送量と、転送部１５２の最大転送容量から定まる比較基準と、の比較を行う。フィルタ部１４０は、転送部１５２の比較に応じて前記フィルタリング条件を変更する。【選択図】図１
2013084033.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵ（Central Processing Unit）の処理をシミュレーションするＣＰＵシミュレーション部と、
前記ＣＰＵシミュレーション部が出力するトレースデータをフィルタリング条件に基づいてフィルタリングするフィルタ部と、
前記フィルタ部のフィルタリング結果を転送する転送部と、を備え、
前記転送部は、前記フィルタリング結果の転送量と、前記転送部の最大転送容量から定まる比較基準と、の比較を行い、
前記フィルタ部は、前記転送部の比較に応じて前記フィルタリング条件を変更する、エミュレーション装置。
【請求項２】
前記フィルタ部は、前記フィルタリング条件を構成する各条件に設定された優先順位に基づいて、前記フィルタリング条件を変更することを特徴とする請求項１に記載のエミュレーション装置。
【請求項３】
前記フィルタ部は、前記フィルタリング条件の変更が生じた際に、前記フィルタリング結果に前記フィルタリング条件を構成する条件式の情報を挿入することを特徴とする請求項１または請求項２に記載のエミュレーション装置。
【請求項４】
前記比較基準は、下限値と上限値を持つ転送容量範囲であることを特徴とする請求項１乃至請求項３のいずれか１項に記載のエミュレーション装置。
【請求項５】
前記転送部は、前記フィルタリング結果の転送量が前記下限値未満である場合、または前記フィルタリング結果の転送量が前記上限値より大きい場合に、前記フィルタ部に対して前記フィルタリング条件の変更を指示することを特徴とする請求項４に記載のエミュレーション装置。
【請求項６】
前記フィルタ部は、前記フィルタリング結果の転送量が前記転送容量範囲内となり、かつ前記下限値または前記上限値との差分が最小となるように前記フィルタリング条件を設定することを特徴とする請求項５に記載のエミュレーション装置。
【請求項７】
前記フィルタ部は、第１の間隔毎に、前記フィルタリング条件を構成する各条件固有のトレース量を算出し、
前記フィルタ部は、前記優先順位の順序により直近の各条件固有のトレース量を積算し、当該積算値が前記転送容量範囲内となるように前記フィルタリング条件を設定することを特徴とする請求項６に記載のエミュレーション装置。
【請求項８】
前記ＣＰＵシミュレーション部が出力するトレースデータの各々にタイムスタンプを関連付けるタイムスタンプ付与部と、
前記フィルタ部のフィルタリング結果に応じて、前記タイムスタンプを補正するタイムスタンプ補正部と、を備えることを特徴とする請求項１乃至請求項７のいずれか１項に記載のエミュレーション装置。
【請求項９】
前記フィルタ部の出力するフィルタリング結果を格納する格納部を備え、
前記転送部は、第２の間隔毎に、前記格納部から前記フィルタリング結果を取得して転送することを特徴とする請求項１乃至請求項８のいずれか１項に記載のエミュレーション装置。
【請求項１０】
前記転送部は、前記フィルタリング結果の転送量が前記最大転送容量を超過し、転送ロスが生じた場合、当該転送ロスが生じたことを転送先に通知することを特徴とする請求項１乃至請求項９のいずれか１項に記載のエミュレーション装置。
【請求項１１】
ＣＰＵ（Central Processing Unit）の処理をシミュレーションするエミュレーション装置と、前記エミュレーション装置からの転送データを受け取るホスト装置と、を備えるエミュレーションシステムであって、
前記エミュレーション装置は、
前記ＣＰＵの処理をシミュレーションするＣＰＵシミュレーション部と、
前記ＣＰＵシミュレーション部が出力するトレースデータをフィルタリング条件に基づいてフィルタリングするフィルタ部と、
前記フィルタ部のフィルタリング結果を転送する転送部と、を備え、
前記ホスト装置は、
前記転送部から受信したフィルタリング結果を受信し、受信能力または前記転送部の最大転送容量に基づいて定まる比較基準と、前記フィルタリング結果の転送量と、を比較する受信部を備え、
前記フィルタ部は、前記受信部の比較に応じて前記フィルタリング条件を設定する、エミュレーションシステム。
【請求項１２】
エミュレータと、エミュレータからの転送データを取得する装置とを用いたエミュレーション方法であって、
前記エミュレータは、
ＣＰＵ（Central Processing Unit）の処理のシミュレーションを実行し、
前記シミュレーションの実行結果情報を示すトレースデータをフィルタリング条件に基づいてフィルタリングし、
前記トレースデータのフィルタリング結果を転送するとともに、前記フィルタリング結果の転送量と、最大転送容量に基づいて定まる比較基準と、の比較に応じて、前記フィルタリング条件を設定する、エミュレーション方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、エミュレーション装置、エミュレーション方法、及びエミュレーションシステムに関し、特にエミュレーション結果をトレースデータとして扱うエミュレーション装置、エミュレーション方法、エミュレーションシステムに関する。
【背景技術】
【０００２】
マイクロコンピュータは、高性能化、高機能化が進んでいる。これに伴い、マイクロコンピュータ上で動作する実行プログラムも大規模化し、かつ複雑化してきている。
【０００３】
近年、マイクロコンピュータ（マイクロコントローラ、マイコンとも呼称する。）を模擬するシミュレーションシステム、装置が多く開発されている。これらのシミュレーションシステムは、一般的に、オンチップデバッグエミュレータ、インサーキットエミュレータをはじめとするエミュレーション装置と、ホストコンピュータと、から構成される。
【０００４】
一般に、これらのシミュレーションシステムを用いてプログラムのデバッグや性能解析を行う場合に、ユーザは、マイクロコンピュータのＣＰＵ（Central Processing Unit）を模擬する処理部の処理結果が記載されたトレースデータを参照する。プログラムのデバッグや性能解析を効率的に行うためには、シミュレーションシステムが、長時間のトレースデータ取得を出来るように構成することが必要である。
【０００５】
以下、シミュレーションシステムにおけるトレースデータの取得に関する先行技術を説明する。
【０００６】
特許文献１は、トレースメモリの容量に依存しない長時間トレースシステムを開示している。この長時間トレースシステムは、インサーキットエミュレータと、ホストコンピュータと、から構成される。インサーキットエミュレータ内にてエミュレーション動作を行い、その実行結果であるトレースデータがインサーキットエミュレータ内のデュアルポートメモリに書き込まれる。この書き込みと同時に、インサーキットエミュレータは、トレースデータをホストコンピュータに転送する。ホストコンピュータは、大容量の記憶装置を有し、受信したトレースデータをこの大容量の記憶装置内に格納する。
【０００７】
特許文献２は、トレースデータを圧縮し、圧縮したトレースデータをトレースメモリ内に格納するインサーキットエミュレータを開示している。これにより、当該インサーキットエミュレータでは、トレースデータのデータトラフィック量を減少させている。
【０００８】
特許文献３は、トレースメモリの容量を圧縮できるインサーキットエミュレータを開示している。当該インサーキットエミュレータでは、分岐命令の種別（条件分岐、割り込み、間接分岐）に応じて、符号、分岐先アドレス、分岐元アドレス等をトレースメモリに書き込む。このインサーキットエミュレータは、条件分岐が実行された場合には、符号のみを書き込み対象とする。実行プログラム内に条件分岐が含まれる確率が多いため、このインサーキットエミュレータでは、トレースデータの書き込み量を減少させている。
【０００９】
なお、一般的なインサーキットエミュレータでは、ＣＰＵを模擬する処理部が出力するトレースデータの種別（分岐トレース情報、アクセストレース情報等）を設定することができる。しかしながら、トレースデータの種別の設定のみでは、出力されるデータ量を十分に減らして、長時間のシミュレーションを実行することは困難である。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００１−３２５１２１号公報
【特許文献２】特開２０００−２０７２４５号公報
【特許文献３】特開２００１−６０１６２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
一般に、ユーザがトレースデータの全てを詳細に参照する必要があるケースは少ない。多くの場合、ある一部の情報を参照すれば、ユーザは、マイクロコンピュータのデバッグや性能解析に十分に対応可能である。
【００１２】
特許文献１に記載の長時間トレースシステムでは、インサーキットエミュレータは、全てのトレースデータをホストコンピュータに転送している。そのため、デバッグや性能調査に従事するユーザは、ホストコンピュータ上で全てのトレースデータから所望のデータを検索して参照しなければならない。さらに、インサーキットエミュレータが大量のトレースデータを転送することができないため、転送ロスが生じてしまう恐れがある。なお、転送ロスを回避するためには、インサーキットエミュレータが、高性能の転送能力を有する必要がある。
【００１３】
特許文献２に記載のインサーキットエミュレータは、トレースデータの圧縮処理を行っているが、全てのデータを圧縮対象としている。すなわち、トレースデータの情報量を削減している（不必要と思われるデータを削除している）わけではない。そのため、デバッグや性能調査に従事するユーザは、全てのトレースデータから所望のデータを検索して、参照しなければならない。さらに、圧縮率によっては、トレースデータのデータサイズを十分に削減することができない恐れがある。
【００１４】
特許文献３に記載のインサーキットエミュレータは、特許文献２と同様に、データの情報量の削除を行っているわけではない。そのため、トレースデータのデータサイズを十分に削減することができない恐れがある。
【００１５】
すなわち、上記した技術では、エミュレータからホストコンピュータにトレースデータを転送する際に、大量のトレースデータを転送対象としてしまう恐れがある。そのため、エミュレータは、必要な（ユーザが参照したい）トレースデータを確実に転送することが困難である、すなわち転送ロスが生じてしまうという問題があった。
【課題を解決するための手段】
【００１６】
本発明にかかるエミュレーション装置の一態様は、
ＣＰＵ（Central Processing Unit）の処理をシミュレーションするＣＰＵシミュレーション部と、
前記ＣＰＵシミュレーション部が出力するトレースデータをフィルタリング条件に基づいてフィルタリングするフィルタ部と、
前記フィルタ部のフィルタリング結果を転送する転送部と、を備え、
前記転送部は、前記フィルタリング結果の転送量と、最大転送容量と、の比較を行い、
前記フィルタ部は、前記転送部の比較に応じて前記フィルタリング条件を設定する、ものである。
【００１７】
本発明にかかるエミュレーション方法の一態様は、
エミュレータと、エミュレータからの転送データを取得する装置とを用いたエミュレーション方法であって、
前記エミュレータは、
ＣＰＵ（Central Processing Unit）の処理のシミュレーションを実行し、
前記シミュレーションの実行結果情報を示すトレースデータをフィルタリング条件に基づいてフィルタリングし、
前記トレースデータのフィルタリング結果を転送するとともに、前記フィルタリング結果の転送量と、最大転送容量に基づいて定まる比較基準と、の比較に応じて、前記フィルタリング条件を設定する、ものである。
【００１８】
本発明にかかるエミュレーションシステムの一態様は、
ＣＰＵ（Central Processing Unit）の処理をシミュレーションするエミュレーション装置と、前記エミュレーション装置からの転送データを受け取るホスト装置と、を備えるエミュレーションシステムであって、
前記エミュレーション装置は、
前記ＣＰＵの処理をシミュレーションするＣＰＵシミュレーション部と、
前記ＣＰＵシミュレーション部が出力するトレースデータをフィルタリング条件に基づいてフィルタリングするフィルタ部と、
前記フィルタ部のフィルタリング結果を転送する転送部と、を備え、
前記ホスト装置は、
前記転送部から受信したフィルタリング結果を受信し、受信能力または前記転送部の最大転送容量に基づいて定まる比較基準と、前記フィルタリング結果の転送量と、を比較する受信部を備え、
前記フィルタ部は、前記受信部の比較に応じて前記フィルタリング条件を設定する、ものである。
【００１９】
本発明では、トレースデータをフィルタリングし、そのフィルタリング結果を最大転送容量から定まる比較基準と比較し、比較結果に応じてフィルタリング条件を変更する。これにより、最大転送量に応じたフィルタリング条件を変更することができ、必要なトレースデータを転送できるとともに、転送ロスを回避することができる。
【発明の効果】
【００２０】
本発明によれば、必要なトレースデータを確実に転送することができるエミュレーション装置、エミュレーション方法、及びエミュレーションシステムを提供することができる。
【図面の簡単な説明】
【００２１】
【図１】本発明の実施の形態１にかかるエミュレーションシステムの構成を示すブロック図である。
【図２】本発明の実施の形態１にかかるフィルタ部１４０のフィルタリング処理を示す図である。
【図３】本発明の実施の形態１にかかるフィルタ部１４０のフィルタリング処理を示す図である。
【図４】本発明の実施の形態１にかかるフィルタ部１４０のフィルタリング処理を示す図である。
【図５】本発明の実施の形態１にかかるフィルタ部１４０のフィルタリング処理を示す図である。
【図６】本発明の実施の形態１にかかるフィルタ部１４０のフィルタリング処理を示す図である。
【図７】本発明の実施の形態１にかかるフィルタ部１４０のフィルタリング処理を示す図である。
【図８】本発明の実施の形態１にかかるフィルタ部１４０のフィルタリング処理を示す図である。
【図９】本発明の実施の形態１にかかるフィルタ部１４０のフィルタリング処理を示す図である。
【図１０】本発明の実施の形態１にかかるフィルタ部１４０のフィルタリング処理を示す図である。
【図１１】本発明の実施の形態１にかかるフィルタ部１４０のフィルタリング処理を示す図である。
【図１２】本発明の実施の形態１にかかるエミュレータ１００のシミュレーション実行中の動作概要を示すフローチャートである。
【図１３】本発明の実施の形態２にかかるエミュレーションシステムの構成を示すブロック図である。
【図１４】本発明の実施の形態３にかかるエミュレーションシステムの構成を示すブロック図である。
【図１５】本発明の実施の形態３にかかるエミュレータの動作を示す概念図である。
【発明を実施するための形態】
【００２２】
＜実施の形態１＞
以下、図面を参照して本発明の実施の形態について説明する。図１は、本実施の形態にかかるエミュレーションシステムの構成を示すブロック図である。当該エミュレーションシステムは、エミュレータ１００と、ホストコンピュータ２００と、を備える。エミュレータ１００は、マイクロコンピュータの機能を実現するいわゆるＩＣＥ（In-circuit Emulator）あるいはオンチップデバッグエミュレータである。
【００２３】
エミュレータ１００は、ＣＰＵ（Central Processing Unit）シミュレーション部１１０と、トレースメモリ制御部１２０と、トレースメモリ１３０と、フィルタ部１４０と、ホストインターフェイス１５０と、を備える。ホストインターフェイス１５０は、内部にＦＩＦＯ（First In First Out）メモリ１５１と、転送部１５２と、を備える。
【００２４】
ＣＰＵシミュレーション部１１０には、シミュレーションの対象となるマイクロコンピュータを動作させるためのプログラムが入力される。ＣＰＵシミュレーション部１１０は、当該プログラムを動作させることにより、マイクロコンピュータの動作をシミュレーションする。
【００２５】
ＣＰＵシミュレーション部１１０は、シミュレーションの実行結果としてトレースデータを生成する。ＣＰＵシミュレーション部１１０は、例えば図示しないピンの設定、あるいはレジスタ設定により、生成するトレースデータの種別（分岐トレース情報、アクセストレース情報等）を決定する。ＣＰＵシミュレーション部１１０は、生成したトレースデータをトレースメモリ制御部１２０及びフィルタ部１４０に供給する。
【００２６】
トレースメモリ制御部１２０は、トレースデータのトレースメモリ１３０への書き込みを制御する。トレースメモリ１３０は、トレースメモリ制御部１２０から書き込まれたトレースデータを記憶する記憶部である。
【００２７】
フィルタ部１４０は、設定されたフィルタリング条件を用いて、ＣＰＵシミュレーション部１１０から供給されたトレースデータをフィルタリングする処理部である。フィルタ部１４０が用いるフィルタリング条件は、後述の転送部１５２による転送量の比較に応じて適宜変更される。また、当該フィルタリング条件を構成する各条件には、ユーザが適宜優先順位を設定できる。当該優先順位は優先順位テーブル１４１に設定される。なお、以降の説明では、フィルタ部１４０によるフィルタリング処理後のトレースデータをフィルタリング結果データと記載する。エミュレータ１００のユーザは、フィルタ部１４０のフィルタリング条件の初期値を設定できる。ユーザがフィルタリング条件の初期値を設定しなかった場合、全トレースデータを出力する（フィルタリングを行わない）。
【００２８】
なお、優先順位テーブル１４１を用いたフィルタ部１４０の処理内容の詳細は、例（図８〜図１１）を交えて後述する。
【００２９】
ＦＩＦＯメモリ１５１には、フィルタ部１４０によるフィルタリング結果データが書き込まれる。ＦＩＦＯメモリ１５１は、先入れ先だし形式（First In First Out）のデータ格納部であり、フィルタリング結果データが転送部１５２に読み出されるまで一時的にフィルタリング結果データを保持する。
【００３０】
転送部１５２は、ＦＩＦＯメモリ１５１内に一時的に格納されたフィルタリング結果データをホストコンピュータ２００に転送するとともに、フィルタリング結果データの転送データ量と、最大転送容量から定まる比較基準と、を比較し、比較結果をフィルタ部１４０に通知する処理部である。以下に、転送部１５２の詳細を説明する。
【００３１】
転送部１５２は、フィルタリング結果データをＦＩＦＯメモリ１５１から取得して、ホストコンピュータ２００に転送する。転送部１５２は、例えば所定間隔毎にＦＩＦＯメモリ１５１からフィルタリング結果データを取得し、ホストコンピュータ２００に転送する。
【００３２】
転送部１５２は、仕様により予め定められた最大転送容量を基に算出した比較基準と、実際に転送しているフィルタリング結果データのデータ量と、を比較する。
【００３３】
ここで比較基準とは、転送部１５２の最大転送量そのもののように１つの閾値であっても良く、転送部１５２の最大転送容量の６０〜８０％のように上限値と下限値を持つ容量範囲であっても良い。すなわち、比較基準は、転送部１５２の最大転送量に基づいて定まる値であればよい。
【００３４】
転送部１５２は、実際に転送しているフィルタリング結果データのデータ量が比較基準を超過している場合、フィルタリング結果データのデータ量が減少するようにフィルタ部１４０に指示を行う。この際、転送部１５２は、比較した両データ量の差分をフィルタ部１４０に通知し、フィルタ部１４０は、当該差分に応じてフィルタリング設定を変更することが望ましい。
【００３５】
一方、転送部１５２は、実際に転送しているフィルタリング結果データのデータ量が比較基準よりも少ない場合、フィルタリング結果データのデータ量が増加するようにフィルタ部１４０に指示を行う。この際、転送部１５２は、比較した両データ量の差分をフィルタ部１４０に通知し、フィルタ部１４０は、当該差分に応じてフィルタリング設定を変更することが望ましい。転送部１５２及びフィルタ部１４０によるフィルタリング条件の変更の具体例は、後述する。
【００３６】
フィルタ部１４０は、転送部１５２の比較結果に応じて適宜フィルタリング条件を変更する。しかし、フィルタリング条件を変更してもなおフィルタリング結果データが膨大であり、転送ロスを生じてしまうケースがある。この場合、転送部１５２は、転送ロスが生じたことをホストインターフェイス２３０に通知する。これにより、ホストコンピュータ２００のユーザは、転送された（参照している）フィルタリング結果データに欠損があることを認識しつつ、データを参照できる。
【００３７】
なお、転送部１５２は、ＦＩＦＯメモリ１５１におけるフィルタリング結果データの格納量がメモリ容量の所定割合（たとえば９０％以上）になった場合、ＦＩＦＯメモリ１５１からフィルタリング結果データを取得し、ホストコンピュータ２００に転送してもよい。この場合、転送部１５２は、所定間隔より前に転送を行ったか否かを判定し、当該判定を上述した比較基準と、フィルタリング結果データのデータ量と、の比較の代用としても良い。
【００３８】
ホストコンピュータ２００は、制御部２１０と、トレースデータ格納部２２０と、ホストインターフェイス２３０と、を備える。制御部２１０は、ホストインターフェイス２３０の制御も含む、各種の制御処理を行う処理部である。
【００３９】
トレースデータ格納部２２０は、エミュレータ１００から転送され、ホストインターフェイス２３０を介して受信したトレースデータ（フィルタリング結果データ）を記憶する記憶部である。トレースデータ格納部２２０は、トレースメモリ１３０よりも大容量の記憶装置であり、大量のトレースデータを記憶することができる。
【００４０】
ホストインターフェイス２３０は、内部に受信部２３１を備える。受信部２３１は、エミュレータ１００から転送されたフィルタリング結果データを適宜受信し、受信したフィルタリング結果データをトレースデータ格納部２２０に格納する。
【００４１】
なお、ユーザは、ホストコンピュータ２００の操作部（図示せず、キーボード、マウス等）を操作し、トレースデータ格納部２２０に格納されたトレースデータを適宜参照する。ここで、トレースデータ格納部２２０に格納されたデータは、すでにフィルタリング処理が行われたデータである。そのため、ユーザは、必要なトレースデータのみを参照することができ、効率よくデバッグ等の処理を行うことができる。
【００４２】
次に、フィルタ部１４０によるフィルタリングの具体例を図２〜図７を参照して説明する。図２は、フィルタ部１４０が全トレースデータ（分岐トレース情報）からＣＡＬＬＴ命令（関数遷移命令）にかかるトレースデータのみを取得する例を示している。
【００４３】
図示するように、各トレースデータには、分岐元アドレス、分岐先アドレス、及び分岐要件が含まれる。フィルタ部１４０は、全トレースデータから分岐要件が"ＣＡＬＬＴ"にかかるものだけをフィルタリング結果データとして抽出する。なお、図２では、フィルタ部１４０は、分岐元アドレス及び分岐先アドレスの情報のみを抽出しているが、必ずしもこれに限られず、分岐要件の情報も抽出しても良い。このように、フィルタ部１４０は、関数遷移に関するトレースデータのみを抽出する。これにより、転送部１５２が転送するデータ量が削減でき、長時間のエミュレーション処理が実現できる。
【００４４】
図３は、フィルタ部１４０が全トレースデータ（分岐トレース情報）からＩＮＴ命令（割込み命令）による分岐にかかるトレースデータのみを取得する例を示している。フィルタ部１４０は、全トレースデータから分岐要件が"ＩＮＴ"にかかるものだけをフィルタリング結果データとして抽出する。なお、図３では、フィルタ部１４０は、分岐先アドレスの情報のみを抽出しているが、必ずしもこれに限られず、分岐元アドレス及び分岐要件の情報も抽出しても良い。ホストコンピュータ２００は、このフィルタリング結果データを受信する。ホストコンピュータ２００を操作するユーザは、フィルタリング結果データを参照することにより、分岐先情報を把握でき、この分岐先情報から割り込みベクタ（割り込み要因）が特定できる。これにより、ユーザは、割り込みの発生履歴、各割り込みの発生回数を把握することができる。
【００４５】
図４は、フィルタ部１４０が全トレースデータ（分岐トレース情報）から予め指定した関数に遷移する命令に関するトレースデータのみを取得する例を示している。図４に示すように、フィルタ部１４０は、プログラムに含まれる関数の識別番号、各関数の先頭アドレス、及びフラグが規定されたテーブルを有する。フラグは、当該関数をフィルタリング結果データとして抽出するか否かを示すビット値（０：フィルタリング結果データとして抽出しない（ホストコンピュータ２００に転送しない）、１：フィルタリング結果データとして抽出する（ホストコンピュータ２００に転送する））である。当該テーブルは、例えばプログラムをコンパイルする際にコンパイラが出力する情報を用いて生成される。テーブル内のフラグは、ユーザが設定する。
【００４６】
フィルタ部１４０は、全トレースデータ（分岐トレース情報）の分岐先アドレスと、当該テーブル内の先頭アドレスと、が一致するトレースデータであって、テーブル内にフラグに１が設定されているトレースデータの関数識別番号をフィルタリング結果データとして抽出する。
【００４７】
ホストコンピュータ２００は、このフィルタリング結果データを受信する。ホストコンピュータ２００を操作するユーザは、ホストコンピュータ２００内にある関数番号の情報とフィルタリング結果データを比較することにより、どの関数が実行されたかを把握することができる。なお、図４に示す例では、フィルタ部１４０は、フィルタリング結果データとして、関数番号を抽出したが必ずしもこれに限られず、分岐元アドレス、分岐先アドレス、及び分岐要因からなるデータ列をフィルタリング結果データとして取得しても良い。
【００４８】
図５は、フィルタ部１４０が全トレースデータ（分岐トレース情報）からタスク遷移情報を抽出する例を示している。なお、本例では、オーナーシップトレース機能をエミュレーション対象のＣＰＵがサポートしているものとする。トレース対象となるトレースデータ（分岐トレース情報）は、タスクＩＤに関する情報を有する。ＣＰＵシミュレーション部１１０は、タスクＩＤが変化した場合、そのタスクＩＤを出力する。
【００４９】
フィルタ部１４０は、タスクＩＤのみを抽出する。図５の例では、フィルタ部１４０は、２回のタスクＩＤの切り替えをフィルタリング結果データとして抽出している。ホストコンピュータ２００は、このフィルタリング結果データを受信する。ホストコンピュータ２００を操作するユーザは、当該フィルタリング結果データを参照することによりタスクの遷移履歴、各タスクの実行回数を把握することができる。
【００５０】
図６は、オーナーシップトレース機能をエミュレーション対象のＣＰＵがサポートしていない場合に、フィルタ部１４０が全トレースデータ（アクセストレース情報）から図５と同等のフィルタリング結果データを抽出する例を示している。
【００５１】
ＣＰＵエミュレーション部１１０は、アクセストレース情報（アクセスアドレス、アクセスデータ、リード／ライト）を出力する。オペレーティングシステムの機能により、所定の値がタスクＩＤに設定される。具体的には、各タスクの実行時には、実行にかかるタスクが自身に割り当てられたユニークなＩＤをタスクＩＤに設定する。
【００５２】
図６の例では、タスクＩＤ（タスクを実行する当該タスクに割り当てられたＩＤ）のアドレスは、０ｘ８０５０とする。フィルタ部１４０は、アクセスアドレスが０ｘ８０５０であり、ライト（書き込み）にかかるトレースデータを選択し、選択したトレースデータ内のアクセスデータをフィルタリング結果データとして取得する。ここで、アクセスデータは、タスクが自身のＩＤをアドレスに書き込むことにより、タスクＩＤと同視することができる。そのため、図５と同様に、ユーザは、タスクの遷移履歴、各タスクの実行回数を把握することができる。
【００５３】
図７は、全トレースデータ（アクセストレース情報）から変数遷移をトレースする例を示している。ＣＰＵエミュレーション部１１０は、アクセストレース情報（アクセスアドレス、アクセスデータ、リード／ライト）を出力する。
【００５４】
フィルタ部１４０は、内部にテーブルを持つ。当該テーブルには、トレース対象としたい変数の識別番号と、各変数が書き込まれるアドレスと、が定義されている。なお、本例では、変数１のアドレスを０ｘ８０１０とする。フィルタ部１４０は、全トレースデータから当該テーブルに定義された変数にかかるトレースデータのみをフィルタリング結果データとして取得する。詳細には、フィルタ部１４０は、全トレースデータのアクセスアドレスと、これにより、フィルタ部１４０内のテーブルの対応変数アドレスが合致するトレースデータをフィルタリング結果データとして抽出する。ユーザは、特定変数のアクセスにかかるトレースデータのみを参照することができる。
【００５５】
続いて、フィルタリング結果データのデータ量と、フィルタ部１４０のフィルタ条件との関係を、具体例を用いて説明する。図８及び図９は、フィルタ部１４０のフィルタリング処理と、フィルタリング条件の変化を示す概念図である。図８は、あるプログラムの実行を開始した時刻（ｔ０）から所定時間（Ｘ）後の時刻ｔ０＋Ｘまでのフィルタ部１４０のフィルタリング処理を示す図である。図９は、時刻ｔ０＋Ｘから所定時間（Ｘ）後の時刻ｔ０＋２Ｘまでのフィルタ部１４０のフィルタリング処理を示す図である。
【００５６】
なお、本例では、転送部１５２は、所定時間（Ｘ）毎に送信するフィルタリング結果データのデータ量が最大転送容量の何％であるかを判定する。本例では、転送部１５２は、所定時間（Ｘ）毎に送信するフィルタリング結果データのデータ量が最大転送容量の６０〜８０％であれば、最適な転送量であるとする。転送部１５２は、フィルタリング結果データのデータ量が最適な転送量ではない場合、フィルタ部１４０に通知する。通知を受けたフィルタ部１４０は、優先順位テーブル１４１を参照して、フィルタリング条件を変更する。
【００５７】
なお、以下の説明では、説明の容易化を図るため、転送部１５２は、所定時間（Ｘ）毎に１０行分のトレースデータを転送できるものとする。
【００５８】
フィルタ部１４０内には、優先順位テーブル１４１が定義されている。本例では、優先順位テーブル１４１には、各分岐要件に対して優先順位が設けられている。当該優先順位が高い分岐要件は、フィルタリング条件の変更時に、フィルタリング条件に優先して含まれる。すなわち、優先順位が高い順序で、フィルタリング条件に採用される。優先順位テーブル１４１は、フィルタリング条件の変更時に参照される。
【００５９】
本例（図８、図９）では、フィルタ部１４０のフィルタリング条件の初期値は、「全てを出力（ＡＬＬ）」とする。時刻ｔ０〜ｔ０＋Ｘの間、フィルタ部１４０は、トレースデータの全てをフィルタリング結果データとして出力する。なお、フィルタ部１４０は、図８に示すようにフィルタリング条件（"フィルタリング条件＝ＡＬＬ"）をフィルタリング結果データに含めて出力しても良い。これにより、フィルタリング結果データを参照するユーザは、時刻ｔ０〜ｔ０＋Ｘの間に用いられたフィルタリング条件を参照しながらフィルタリング結果データを参照することができる。
【００６０】
転送部１５２は、時刻ｔ０〜ｔ０＋Ｘにおけるフィルタリング結果データのデータ量が最大転送容量の９０％であるため、最適な転送量の範囲（６０〜８０％）を超えていることをフィルタ部１４０に通知する。通知を受けたフィルタ部１４０は、優先順位テーブル１４１を参照して、フィルタリング結果データが削減されるようにフィルタリング条件を変更する。以下、フィルタリング条件の変更の手順例を説明する。
【００６１】
フィルタ部１４０は、はじめにフィルタ部１４０から時刻ｔ０〜ｔ０＋Ｘの間の各分岐要件にかかる転送データ量を取得する。本例では、フィルタ部１４０は、分岐要件ＣＡＬＬＴにかかるデータ行が３行、分岐要件ＪＵＭＰにかかるデータ行が２行、分岐要件ＩＮＴにかかるデータ行が２行、分岐要件ＲＥＴＩにかかるデータ行が２行であることを取得する。
【００６２】
フィルタ部１４０は、優先順位テーブル１４１を参照し、優先順位の高い分岐要件から順にデータ量を積算する。ここで、優先順位が２である分岐要件ＲＥＴＩにかかるデータ量まで積算した場合、積算値は、最大転送容量の４０％となる。次に、優先順位が３である分岐要件ＣＡＬＬＴ及びＪＵＭＰのデータ転送量まで積算した場合、積算値は、最大転送容量の９０％、すなわち最適な転送量の範囲を超えてしまう。この場合、フィルタ部１４０は、分岐要件ＣＡＬＬＴ及びＪＵＭＰを共にフィルタリング条件から除外しても良い。また、フィルタ部１４０は、分岐要件ＣＡＬＬＴのみのデータ転送量を積算した場合の積算データ量と、分岐要件ＪＵＭＰのみのデータ転送量を積算した場合の積算データ量と、をそれぞれ算出し、算出値に応じて一方をフィルタリング条件に含めても良い。以下、積算データ量を算出する場合の処理について説明する。
【００６３】
フィルタ部１４０は、分岐要件ＣＡＬＬＴのみのデータ転送量を積算した場合の積算データ量が最大転送容量の７０％であることを算出する。同様に、フィルタ部１４０は、分岐要件ＣＡＬＬＴのみのデータ転送量を積算した場合の積算データ量が最大転送容量の６０％であることを算出する。そのため、フィルタ部１４０は、最適な転送量の範囲（６０〜８０％）となり、かつ多くの情報を得るため、分岐要件ＣＡＬＬＴをフィルタリング条件に含めることを決定する。すなわち、フィルタ部１４０は、最適な転送量の範囲（６０〜８０％）となり、かつ当該範囲の上限値に最も近くなるように、フィルタリング条件に含める条件を決定する。本例では、フィルタ部１４０は、分岐要件ＩＮＴ、ＲＥＴI，ＣＡＬＬＴにかかるトレースデータのみを時刻ｔ０＋Ｘ〜ｔ０＋２Ｘにおいて取得するようにフィルタリング条件を変更する。
【００６４】
続いて、図９を参照して時刻ｔ０＋Ｘ〜ｔ０＋２Ｘの間のフィルタリング処理について説明する。前述のように、フィルタ部１４０は、分岐要件ＩＮＴ、ＲＥＴＩ、及びＣＡＬＬＴにかかるトレースデータのみをフィルタリング結果データとして出力する。また、フィルタ部１４０は、フィルタリング条件（"フィルタリング条件＝ＩＮＴ，ＲＥＴＩ，ＣＡＬＬＴ"）をフィルタリング結果データに含めて出力する。フィルタリング条件を出力することにより、ユーザは、どのようなフィルタリング条件によって抽出された結果であるかを把握することができる。
【００６５】
転送部１５２は、時刻ｔ０＋Ｘ〜ｔ０＋２Ｘの間のフィルタリング結果データと、最大転送容量から定まる比較基準を比較する。すなわち、転送部１５２は、時刻ｔ０＋Ｘ〜ｔ０＋２Ｘの間のフィルタリング結果データが最適な転送量の範囲（最大転送容量の６０〜８０％）となっているか否かを判定する。本例（図９）では、転送部１５２は、フィルタリング結果データが最適な転送量の範囲内にあると判定する。そのため、転送部１５２は、フィルタ部１４０に対する通知（フィルタリング条件の変更通知）を行わない。
【００６６】
なお、図８及び図９の例では、フィルタ部１４０は、多くの情報を得るために、優先順位の同じ分岐要件ＣＡＬＬＴとＪＵＭＰのうち、分岐要件ＣＡＬＬＴをフィルタリング条件に採用した。しかしながら、必ずしもこれに限られず、フィルタ部１４０は、転送ロスを確実に避けるために、分岐要件ＪＵＭＰをフィルタリング条件に採用しても良い。すなわち、フィルタ部１４０は、最適転送範囲に収まり、かつ、当該範囲の下限値に最も近くなるようにフィルタリング条件を設定しても良い。
【００６７】
図８、図９に示すように、フィルタリング結果データが多い場合、すなわち転送ロスを生じる恐れがある場合、エミュレータ１００は、自律的にフィルタリング結果データを減らすように制御する。  
【００６８】
続いて、図１０及び図１１を参照して、図８及び図９に示したプログラムとは異なるプログラムを実行した場合のフィルタ部１４０、転送部１５２の動作例を説明する。図１０は、当該プログラムの実行を開始した時刻（ｔ０）から所定時間（Ｘ）後の時刻ｔ０＋Ｘまでのフィルタ部１４０のフィルタリング処理を示す図である。図１１は、時刻ｔ０＋Ｘから所定時間（Ｘ）後の時刻ｔ０＋２Ｘまでのフィルタ部１４０のフィルタリング処理を示す図である。
【００６９】
転送部１５２は、所定時間（Ｘ）毎に送信するフィルタリング結果データのデータ量が最大転送容量の６０〜８０％であれば、最適な転送量であるとする。本例では、フィルタリング条件の初期値として、分岐要件ＩＮＴにかかるトレースデータのみを抽出する（フィルタリング条件＝ＩＮＴ）という条件が設定されている。
【００７０】
フィルタ部１４０は、時刻ｔ０〜ｔ０＋Ｘの間、トレースデータのうち、分岐要件ＩＮＴにかかるトレースデータのみをフィルタリング結果データとして抽出する。フィルタ部１４０は、フィルタリング条件（"フィルタリング条件＝ＩＮＴ"）をフィルタリング結果データに含めて出力する。
【００７１】
転送部１５２は、時刻ｔ０〜ｔ０＋Ｘにおけるフィルタリング結果データのデータ量が最大転送容量の２０％であるため、最適な転送量の範囲（６０〜８０％）に満たないことをフィルタ部１４０に通知する。フィルタ部１４０は、前述の手法により、フィルタリング条件を変更（"フィルタリング条件＝ＩＮＴ，ＲＥＴＩ，ＣＡＬＬＴ"）する。
【００７２】
続いて、図１１を参照して時刻ｔ０＋Ｘ〜ｔ０＋２Ｘの間のフィルタリング処理について説明する。前述のように、フィルタ部１４０は、分岐要件ＩＮＴ、ＲＥＴＩ、及びＣＡＬＬＴにかかるトレースデータのみをフィルタリング結果データとして出力する。また、フィルタ部１４０は、フィルタリング条件（"フィルタリング条件＝ＩＮＴ，ＲＥＴＩ，ＣＡＬＬＴ"）をフィルタリング結果データに含めて出力する。
【００７３】
転送部１５２は、時刻ｔ０＋Ｘ〜ｔ０＋２Ｘの間のフィルタリング結果データが最適な転送量の範囲（最大転送容量の６０〜８０％）となっていることを判定する。そのため、転送部１５２は、フィルタ部１４０に対する通知（フィルタリング条件の変更通知）を行わない。
【００７４】
図１０、図１１に示すように、フィルタリング結果データが少ない場合、すなわち、エミュレータ１００は、自律的にフィルタリング結果データを増加させるように制御する。これにより、ユーザは、優先順位に応じて必要な情報を十分に参照することができる。
【００７５】
上記の図８〜図１１の例では、分岐トレース情報に対するフィルタリングを例に取り、フィルタリング条件の変更について説明したが必ずしもこれに限られない。フィルタ部１４０は、分岐トレース情報にかかるフィルタリングに限らず、アクセストレース情報等を対象とするフィルタリングにおいてフィルタリング条件を適宜変更することも勿論可能である。
【００７６】
図８〜図１１の例では、優先順位テーブル１４１が設定されていることを前提に説明した。しかしながら、フィルタ部１４０は、優先順位テーブル１４１が設定されていない場合であっても、全ての分岐要件を同一優先順位とみなす等の処理を行うことにより、上述のようなフィルタリング条件の変更が可能である。
【００７７】
本実施の形態にかかるエミュレータ１００のシミュレーション実行中の動作概要を図１２のフローチャートを参照して再度説明する。ＣＰＵシミュレーション部１１０は、シミュレーションを実行し、トレースデータをフィルタ部１４０及びトレースデータ制御部１２０に供給する。トレースデータ制御部１２０は、供給されたトレースデータをそのままトレースメモリ１３０に書き込む。
【００７８】
フィルタ部１４０は、設定されているフィルタリング条件を用いてトレースデータのフィルタリングを行う（Ｓ１）。フィルタ部１４０は、フィルタリング結果データをＦＩＦＯメモリ１５１に書き込む。
【００７９】
転送部１５２は、ＦＩＦＯメモリ１５１からフィルタリング結果データを読み出し、随時転送する（Ｓ２）。転送部１５２は、最大転送容量から定まる比較基準と、実際に転送したフィルタリング結果データを転送時に比較し、比較結果をフィルタ部１４０に通知する。フィルタ部１４０は、比較結果に応じてフィルタリング条件を変更する（Ｓ３）。エミュレータ１００は、上述のＳ１〜Ｓ３の処理をシミュレーションが終了するまで実行し続ける。
【００８０】
続いて、本実施の形態にかかるエミュレーションシステムの効果について説明する。エミュレータ１００は、トレースデータをフィルタリングし、そのフィルタリング結果を、最大転送容量を基に定めた比較基準と比較し、比較結果に応じてフィルタリング条件を変更している。これによりエミュレータ１００は、最大転送容量に応じたフィルタリング条件を設定することができ、必要なトレースデータを転送できるとともに、転送ロスを回避することができる。
【００８１】
また、エミュレータ１００は、フィルタリング条件の変更時に優先順位テーブル１４１を参照することにより、必要となる順序で条件を採用し、その結果を取得することができる。これにより、ユーザは、必要な情報を優先して参照することができる。必要な情報を優先して参照できることにより、ユーザは、プログラムのデバッグや性能解析を確実に行うことができる。
【００８２】
さらにまた、フィルタリング結果データは、フィルタリング条件を逐次含むことができる。これにより、ユーザは、どのようなフィルタリング条件を用いて得られたデータを参照しているかを把握することができる。
【００８３】
上述のように、比較基準は、転送部１５２の最大転送容量の６０〜８０％のように上限と下限を持つ容量範囲であっても良い。これにより、比較基準を柔軟に定めることができるため、フィルタ部１４０は、より正確にフィルタリング条件を設定することができる。
【００８４】
＜実施の形態２＞
本実施の形態にかかるエミュレーションシステムは、ホストコンピュータがフィルタリング結果データと、最大転送容量から定まる比較基準と、を比較することを特徴とする。本実施の形態にかかるエミュレーションシステムについて、実施の形態１との差異を以下に説明する。なお、図面において同一名及び同一符号を付しており、以下に言及しない処理部は実施の形態１と基本的に同じ処理を行う。
【００８５】
図１３は、本実施の形態にかかるエミュレーションシステムの構成を示すブロック図である。基本的に、エミュレータ１００は、実施の形態１と同様の処理部を有する。また、ホストコンピュータ２００は、実施の形態１と同様の処理部を有する。
【００８６】
本実施の形態における受信部２３１は、最大転送容量に基づく比較基準と、受信したフィルタリング結果データと、を比較し、比較結果をフィルタ部１４０に通知する。ここで、最大転送容量は、予め転送部１５２から通知された値（転送部１５２のデータ転送容量）と、受信部２３１の受信能力（受信できるデータ容量）と、のうちの小さい値である。
【００８７】
受信部２３１は、実施の形態１の転送部１５２と略同一の比較を行い、フィルタリング条件を変更する必要が生じた場合に、フィルタ部１４０に通知を行う。この際に、受信部２３１は、フィルタリング結果データを減らすべきであるか、増加させるべきであるか、現在のフィルタリング結果データの転送量が最大転送容量の何％であるか、等をフィルタ部１４０に通知する。
【００８８】
フィルタ部１４０は、受信部２３１の通知に応じて、実施の形態１と同様の手法でフィルタリング条件を変更する。
【００８９】
上記したように、受信部２３１がフィルタリング結果データにかかる比較を行う。当該構成によっても、実施の形態１と同様の効果、すなわち最大転送容量に応じたフィルタリング条件を設定することができるために必要なトレースデータを転送でき、かつ転送ロスを回避することができる。
【００９０】
＜実施の形態３＞
本実施の形態にかかるエミュレーションシステムは、各トレースデータを取得したタイミングを正確に把握できることを特徴とする。以下、本実施の形態にかかるエミュレーションシステムについて、実施の形態１にかかるエミュレーションシステムとの相違点を中心に説明する。
【００９１】
図１４は、本実施の形態にかかるエミュレーションシステムの構成を示すブロック図である。エミュレータ１００は、実施の形態１に記載の構成に加え、タイムスタンプ付与部１６０及びタイムスタンプ補正部１７０を有する構成である。タイムスタンプ付与部１６０及びタイムスタンプ補正部１７０の詳細な動作を、図１４及び図１５を参照して説明する。図１５は、タイムスタンプ付与部１６０及びタイムスタンプ補正部１７０の動作を示す概念図である。
【００９２】
タイムスタンプ１６０は、ＣＰＵシミュレーション部１１０から出力された各トレースデータに対し、タイムスタンプ値を付与する処理部である。タイムスタンプ値は、直前のトレースデータの出力からの経過クロック数である。図１５では、トレース１は、直前のトレースデータの出力から４クロック経過後に出力されている。同様に、トレース２は、トレース１の出力から５クロック経過後に出力されている。トレース３は、トレース２の出力から５クロック経過後に出力されている。トレース４は、トレース３の出力から６クロック経過後に出力されている。
【００９３】
フィルタ部１４０は、実施の形態１と同様の手法を用いて、全トレースデータをフィルタリングする。ここで、フィルタ部１４０は、全トレースデータを出力するとともに、不要となるトレースデータと必要となるトレースデータが識別できるようにデータを加工する。図１５では、トレース１及びトレース３に対し、不要であることを示す識別情報が付されている。そして、フィルタ部１４０は、加工したデータ（フィルタリング結果データの一態様）をタイムスタンプ補正部１７０に出力する。
【００９４】
タイムスタンプ補正部１７０は、フィルタ部１４０から加工データを受信する。そして、タイムスタンプ補正部１７０は、当該加工データのタイムスタンプ値を参照して、タイムスタンプ値を補正し、不要となるトレースデータを削除したデータをＦＩＦＯメモリ１５１に格納する。以下、詳細な動作を説明する。
【００９５】
図１５では、トレース２及びトレース４が出力対象となる。前述のように、タイムスタンプ値は直近のトレースデータの出力からの経過クロック数であるため、タイムスタンプ補正部１７０は、必要となる各トレースデータ（フィルタリング結果データとして出力するデータ）についてタイムスタンプ値を補正する。図１５では、タイムスタンプ補正部１７０は、トレース２が直前のトレースデータの出力から９クロック経過後に出力されたことを示すようにタイムスタンプを補正する。同様に、タイムスタンプ補正部１７０は、トレース４がトレース２の出力から１１クロック経過後に出力されたことを示すようにタイムスタンプを補正する。そして、タイムスタンプ補正部１７０は、補正後のデータ、すなわちフィルタリング結果データをＦＩＦＯメモリ１５１に格納する。
【００９６】
他の処理部（ホストインターフェイス１５０、ホストコンピュータ２００内の各処理部）の処理は、実施の形態１と同様である。なお、上述の説明では、実施の形態１の構成に対してタイムスタンプ付与部１６０及びタイムスタンプ補正部１７０を追加したが、実施の形態２の構成に対してタイムスタンプ付与部１６０及びタイムスタンプ補正部１７０を追加しても良い。
【００９７】
続いて、本実施の形態にかかるエミュレーション装置の効果について説明する。上記したように、エミュレータ１００は、フィルタリング結果データを出力するとともに、フィルタリング結果データに含まれる各トレースデータに対してタイムスタンプを関連付けている。この際、タイムスタンプ補正部１７０は、フィルタ部１４０によるフィルタリングに応じてタイムスタンプ値を補正している。これにより、ホストコンピュータ２００のユーザは、各トレースの発生タイミングを正確に把握することができる。
【００９８】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、上述の説明では、トレースメモリ１３０をエミュレータ１００内に設けたが、必ずしもこれに限られない。ユーザは、ホストコンピュータ２００上でのみフィルタリング結果データ（トレースデータ）を参照する。そして、トレースメモリ１３０及びトレースメモリ制御部１２０がエミュレータ１００内に存在しない構成であっても良い。
【００９９】
また、ホストインターフェイス１５０は、ＦＩＦＯメモリ１５１を有さない構成であっても良い。この場合、転送部１５２は、フィルタ部１４０が出力したフィルタリング結果データを適宜転送するとともに、転送毎に、上述の比較処理を行う。
【符号の説明】
【０１００】
１００  エミュレータ
１１０  ＣＰＵシミュレーション部
１２０  トレースメモリ制御部
１３０  トレースメモリ
１４０  フィルタ部
１５０  ホストインターフェイス
１５１  ＦＩＦＯメモリ
１５２  転送部
１６０  タイムスタンプ付与部
１７０  タイムスタンプ補正部
２００  ホストコンピュータ
２１０  制御部
２２０  トレースデータ格納部
２３０  ホストインターフェイス
２３１  受信部
【図１】
2013084033.tif 000003
【図２】
2013084033.tif 000004
【図３】
2013084033.tif 000005
【図４】
2013084033.tif 000006
【図５】
2013084033.tif 000007
【図６】
2013084033.tif 000008
【図７】
2013084033.tif 000009
【図８】
2013084033.tif 000010
【図９】
2013084033.tif 000011
【図１０】
2013084033.tif 000012
【図１１】
2013084033.tif 000013
【図１２】
2013084033.tif 000014
【図１３】
2013084033.tif 000015
【図１４】
2013084033.tif 000016
【図１５】
2013084033.tif 000017