(57)【要約】【課題】トレース対象の命令の実行が同時に生じた場合に、正確な命令発生タイミングを把握すること【解決手段】タイミング情報生成回路１３１は、第１ＣＰＵコア１１１、第２ＣＰＵコア１２１の各々からのトレースデータの出力と同期して出力されるプロセッサ１（２）出力イネーブル信号に基づき、トレースデータの出力タイミングが同一であるか否かを示すタイミング情報を出力する。トレースメッセージ生成回路１３２は、各トレースデータと、各トレースデータ取得時のタイムスタンプと、タイミング情報と、を対応付けたトレースメッセージを生成する。トレースメモリ書き込み制御回路１４４は、トレースメッセージ生成回路１３２が生成したトレースメッセージをトレースメモリ１５０に書き込む。【選択図】図１
2013109621.tif 000002
【特許請求の範囲】
【請求項１】
第１、第２プロセッサの各々からのトレースデータの出力と同期して出力される第１、第２出力イネーブル信号に基づき、トレースデータの出力タイミングが同一であるか否かを示すタイミング情報を出力するタイミング情報生成回路と、
前記第１または前記第２のプロセッサから出力された各トレースデータと、各トレースデータ取得時のタイムスタンプと、前記タイミング情報と、を対応付けたトレースメッセージを生成するトレースメッセージ生成回路と、
前記トレースメッセージ生成回路が生成したトレースメッセージをトレースメモリに書き込むトレースメモリ書き込み制御回路と、を備えるインサーキットエミュレータ。
【請求項２】
前記タイミング情報は、１ビットのビット値であり、
前記タイミング情報生成回路は、前記第１、前記第２イネーブル信号のいずれかがトレースメッセージの出力を示す値となる度に前記ビット値を反転させることを特徴とする請求項１に記載のインサーキットエミュレータ。
【請求項３】
前記タイミング情報生成回路は、
前記第１出力イネーブル信号と前記第２出力イネーブル信号の論理和を出力するＯＲ回路と、
前記ＯＲ回路の出力をイネーブル端子の入力とし、クロック信号をデータ端子の入力とするディレイラッチと、
前記ディレイラッチの出力をクロック端子の入力とし、自身の出力の反転信号をデータ端子の入力とするフリップフロップと、
前記フリップフロップの出力信号を反転し、前記反転信号を生成するＮＯＴ回路と、を備え、
前記フリップフロップの出力信号を前記タイミング情報とすることを特徴とする請求項２に記載のインサーキットエミュレータ。
【請求項４】
前記タイミング情報生成回路は、
前記第１出力イネーブル信号と前記第２出力イネーブル信号の論理和を出力するＯＲ回路と、
前記ＯＲ回路の出力をイネーブル端子の入力とし、クロック信号をデータ端子の入力とするディレイラッチと、
前記ディレイラッチの出力をクロック端子の入力とし、自身の出力信号の反転信号を出力する出力端子と、データ入力端子と、を接続したフリップフロップと、を備え、
前記フリップフロップの出力信号を前記タイミング情報とすることを特徴とする請求項２に記載のインサーキットエミュレータ。
【請求項５】
前記タイミング情報生成回路は、
前記第１出力イネーブル信号と前記第２出力イネーブル信号の論理和を出力するＯＲ回路と、
前記ＯＲ回路の出力と、クロック信号と、の論理積を出力するＡＮＤ回路と、
前記ＡＮＤ回路の出力をクロック端子の入力とし、自身の出力の反転信号をデータ端子の入力とするフリップフロップと、
前記フリップフロップの出力信号を反転し、前記反転信号を生成するＮＯＴ回路と、を備え、
前記フリップフロップの出力信号を前記タイミング情報とすることを特徴とする請求項２に記載のインサーキットエミュレータ。
【請求項６】
前記タイミング情報は、ｎビットのｎビット値を生成し、
前記タイミング情報生成回路は、前記第１、前記第２イネーブル信号のいずれかがトレースメッセージの出力を示す値となる度に前記ｎビット値をカウントアップし、前記ｎビット値が前記ｎビット以上の値となるタイミングでリセットすることを特徴とする請求項1に記載のインサーキットエミュレータ。
【請求項７】
前記ｎビット値は、３ビット値であり、
前記タイミング情報生成回路は、
前記第１出力イネーブル信号と前記第２出力イネーブル信号の論理和を出力するＯＲ回路と、
前記ＯＲ回路の出力をイネーブル端子の入力とし、クロック信号をデータ端子の入力とするディレイラッチと、
第１データ入力端子、第１データ出力端子、前記第１データ出力端子の反転信号を出力する第１データ反転端子、第１クロック端子を有し、前記ディレイラッチの出力を前記第１クロック端子の入力とし、前記第１データ反転端子と前記第１データ入力端子を接続した第１フリップフロップと、
第２データ入力端子、第２データ出力端子、前記第２データ出力端子の反転信号を出力する第２データ反転端子、第２クロック端子を有し、前記第１データ反転端子の出力を前記第２クロック端子の入力とし、前記第２データ反転端子と前記第２データ入力端子を接続した第２フリップフロップと、
第３データ入力端子、第３データ出力端子、前記第３データ出力端子の反転信号を出力する第３データ反転端子、第３クロック端子を有し、前記第２データ反転端子の出力を前記第３クロック端子の入力とし、前記第３データ反転端子と前記第３データ入力端子を接続した第３フリップフロップと、を有し、
前記第１データ出力端子の出力、前記第２データ出力端子の出力、前記第３データ出力端子の出力、を下位ビットから構成することにより前記第３ビット値を生成することを特徴とする請求項６に記載のインサーキットエミュレータ。
【請求項８】
所定クロックに従って、一定時間間隔を係数するタイムスタンプカウンタと、
前記タイムスタンプカウンタのオーバーフローの回数を計数するオーバーフローカウンタと、を更に備え、
前記トレースメッセージ生成回路は、前記タイムスタンプカウンタがオーバーフローしたか否かを示すオーバーフローフラグを保持し、
前記トレースメモリ書き込み制御回路は、直近に前記トレースメモリに書き込んだトレースメッセージに含まれる前記タイミング情報を保持するレジスタを備え、前記オーバーフローフラグがオンであり、かつ書き込み対象のトレースデータの前記タイミング情報と、前記レジスタの前記タイミング情報と、が一致しない場合に前記オーバーフローカウンタのカウント値を前記トレースメモリに書き込む、ことを特徴とする請求項１乃至請求項７のいずれか１項に記載のインサーキットエミュレータ。
【請求項９】
前記トレースメッセージ生成回路は、トレースメッセージの生成毎に、前記タイムスタンプカウンタ及び前記オーバーフローカウンタに対して、カウント値のリセットを要求するカウンタリセット信号を出力することを特徴とする請求項８に記載のインサーキットエミュレータ。
【請求項１０】
請求項１乃至９のいずれか１項に記載のインサーキットエミュレータと、
前記トレースメモリから各トレースメッセージを読み出し、各トレースメッセージ内の前記タイミング情報に基づき、他のトレースメッセージと出力タイミングが異なるかを判別できるように各トレースメッセージを表示する表示情報を生成するデバッグプログラムを実行するホストコンピュータと、を備えるエミュレーションシステム。
【請求項１１】
第１、第２プロセッサの各々からのトレースデータと、各トレースデータ取得時のタイムスタンプと、トレースデータの出力タイミングが同一であるか否かを示すタイミング情報と、を対応付けたトレースメッセージを出力順に受け付け、トレースメモリに書き込むトレースメモリ書き込み制御回路と、
前記トレースメモリから各トレースメッセージを読み出し、各トレースメッセージ内の前記タイミング情報に基づき、他のトレースメッセージと出力タイミングが異なるかを判別できるように各トレースメッセージを表示する表示情報を生成するデバッグプログラムを実行するホストコンピュータと、を備えるトレースメモリ制御システム。
【請求項１２】
第１、第２プロセッサの各々からのトレースデータの出力と同期して出力される第１、第２出力イネーブル信号に基づき、トレースデータの出力タイミングが同一であるか否かを示すタイミング情報を出力するタイミング情報生成回路と、
前記第１または前記第２のプロセッサから出力された各トレースデータと、各トレースデータ取得時のタイムスタンプと、前記タイミング情報と、を対応付けたトレースメッセージを生成し、前記タイミング情報に基づいて、各トレースメッセージを表示する制御装置に対し、生成したトレースメッセージを供給する、トレースメッセージ生成回路と、
を備えるトレースメッセージ生成装置。
【請求項１３】
第１、第２プロセッサの各々からのトレースデータの出力と同期して出力される第１、第２出力イネーブル信号に基づき、トレースデータの出力タイミングが同一であるか否かを示すタイミング情報を生成し、
前記第１または前記第２のプロセッサから出力された各トレースデータと、各トレースデータ取得時のタイムスタンプと、前記タイミング情報と、を対応付けたトレースメッセージを生成し、
前記トレースメッセージ生成回路が生成したトレースメッセージをトレースメモリに書き込む、トレースメッセージ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、インサーキットエミュレータ、トレースメモリ制御装置、トレースメッセージ生成装置及びトレースメッセージ処理方法に関する。
【背景技術】
【０００２】
近年、家電製品等の各製品の機能増加に伴い、当該製品を制御するマイクロコンピュータが高性能化してきている。特に複数のＣＰＵ（Central Processing Unit）コア、メモリ等を備え、処理時間を短縮するマルチコア型のマイクロコンピュータが広く使用されるようになってきている。これに伴い、当該マイクロコンピュータを使用したハードウェア及びソフトウェアをデバッグする開発支援装置（以降、インサーキットエミュレータと記載する。）の機能も複雑化してきている。
【０００３】
インサーキットエミュレータでは、マイクロコンピュータのマルチコア化に伴い、トレース機能及びタイムスタンプ機能の高性能化が必要となる。トレース機能とは、ソフトウェア開発時に被実行プログラムの実行結果を格納する機能である。タイムスタンプ機能とは、プログラムの開始からトレース対象に設定されたイベントの発生時点までの累積時間、または直前のトレース対象イベントが実行されてからの経過時間を記録し、当該時間情報をプログラムの実行結果と関連付けて記録する機能である。マイクロコンピュータ内にある複数のＣＰＵコアのうち、どのＣＰＵコアがトレース対象イベントを実行した場合であっても、タイムスタンプ機能は、正確にタイムスタンプを生成することが求められる。
【０００４】
上述したインサーキットエミュレータに関連する技術を以下に説明する。特許文献１には、タイムスタンプ取得回路の一態様が開示されている。はじめに、図１７を参照して一般的なデバッグ環境の構成を説明する。図１７は、特許文献１に記載のタイムスタンプ取得回路を一般的なデバッグ環境に組み込んだ例を示す図である。
【０００５】
ユーザーターゲットシステム３００は、プログラム開発対象のマイクロコンピュータを搭載するシステムである。デバッグチップ３２０は、プログラム開発対象のマイクロコンピュータが持つ全機能を実現するチップである。デバッグチップ３２０は、後述するタイムスタンプカウンタ制御回路３３０を内部に実装している。デバッグチップ３２０は、ソケット３１０を介して電気的にユーザーターゲットシステム３００と接続されている。デバッグチップ３２０は、エミュレーションプローブ３４０を介して、エミュレータ本体３５０の構成要素であるエミュレーション制御回路３６０と電気的に接続されている。エミュレーション制御回路３６０は、後述するオーバーフローカウンタ制御回路３７０を有している。
【０００６】
エミュレータ本体３５０は、エミュレーション制御回路３６０と、トレースメモリ３８０と、ホストＩ／Ｆ３９０とを有している。これらは、別々のチップに実装されている。エミュレータ本体３５０は、ホストＰＣ４００と、ＵＳＢケーブル４１０などによって接続される。ホストＰＣ４００では、デバッガプログラムが実行される。ユーザの操作を受け付けるデバッガプログラムは、ホストＩ／Ｆ３９０を介してエミュレータ本体３５０と通信を行うことができる。
【０００７】
トレースデータの収集は、デバッガプログラムが実行されるホストＰＣ４００からの指示によって開始する。また、ホストＰＣ４００からの要求により、トレースメモリ３８０に保存されたトレースメッセージを、エミュレータ本体３５０からホストＰＣ４００へ読み出すことが可能である。
【０００８】
図１８は、上述のタイムスタンプカウンタ制御回路３３０及びオーバーフローカウンタ制御回路３７０を有するタイムスタンプ取得回路の構成を示す図である。当該タイムスタンプ取得回路は、タイムスタンプカウンタ制御回路３３０と、オーバーフローカウンタ制御回路３７０とを備える。タイムスタンプカウンタ制御回路３３０は、複数のプロセッサの各々からトレースデータを収集し、そのトレースデータにタイムスタンプを付加して、トレースメモリ３８０に書き込みを行う。
【０００９】
この複数のプロセッサは、第１ＣＰＵコア４１０を含む第１プロセッサ４２０と、第２ＣＰＵコア４３０を含む第２プロセッサ４４０と、から構成される。第１プロセッサ４２０、及び第２プロセッサ４４０は、各々が内蔵する第１ＣＰＵコア４１０、及び、第２ＣＰＵコア４３０がトレース対象命令を実行した場合に、トレース対象命令実行検出信号及びトレースデータを出力する。タイムスタンプカウンタ制御回路３３０には、トレース対象命令実行検出信号及びトレースデータが入力される。
【００１０】
タイムスタンプカウンタ制御回路３３０は、トレースメッセージ生成回路３３１と、タイムスタンプカウンタ３３２と、トレースメッセージバッファ３３３とを有している。タイムスタンプカウンタ３３２は、トレースメッセージ生成回路３３１からリセット信号（ＲＥＳ）を受信すると初期化され、ゼロから計数を開始する。タイムスタンプカウンタ３３２は、所定のクロックに同期して、一定の時間間隔でカウント動作を行う。タイムスタンプカウント値（タイムスタンプカウンタ３３２のカウントした値）は、トレースメッセージ生成回路３３１に送出される。タイムスタンプカウンタ３３２は、フルカウントまで計数し、オーバーフローすると、キャリー信号をＯＶＦカウンタ３７１及びトレースメッセージ生成回路３３１に出力する。トレースメッセージ生成回路３３１は、キャリー信号が出力されると、ＯＶＦフラグ３３４を１に設定する。
【００１１】
トレースメッセージ生成回路３３１は、トレース対象命令実行検出信号を受信した場合、タイムスタンプカウンタ３３２からカウント値をリードし、ＯＶＦフラグ３３４がセットされている場合にはＯＶＦカウント値要求信号をＯＶＦカウント値生成回路３７２に送信する。そして、トレースメッセージ生成回路３３１は、トレースメッセージを生成し、当該メッセージをトレースメッセージバッファ３３３にエントリする。
【００１２】
ＯＶＦカウンタ３７１は、キャリー信号が入力される度にカウントアップするカウンタである。ＯＶＦカウンタ３７１は、トレースメッセージ生成回路３３１からリセット信号（ＲＥＳ）を受信すると初期化され、０から計測を開始する。ＯＶＦカウント値生成回路３７２は、ＯＶＦカウント値要求信号を受け取ると、ＯＶＦカウンタ３７１の値をＯＶＦカウント値バッファ３７３に供給する。
【００１３】
トレースメッセージ生成回路３３１は、トレースメッセージの作成後にリセット信号（ＲＥＳ）をアクティブにする。
【００１４】
トレースメモリ書き込み制御回路３７４は、トレースメッセージバッファ３３３内のトレースメッセージを順次トレースメモリ３８０に書き込む。この際、トレースメモリ書き込み制御回路３７４は、書き込み対象のトレースメッセージ内のオーバーフローフラグがオフの場合、そのままトレースメッセージをトレースメモリ３８０に書き込む。書き込み対象のトレースメッセージ内のオーバーフローフラグがオンの場合、トレースメモリ書き込み制御回路３７４は、ＯＶＦカウント値バッファ３７３の先頭のＯＶＦカウント値を先にトレースメモリ３８０に書き込み、その後トレースメッセージを書き込む。
【００１５】
図１９は、特許文献１に記載のトレースメモリ書き込み制御回路３７４の動作を説明するためのデータ構造図である。図１９は、トレースメッセージバッファ３３３、ＯＶＦカウント値バッファ３７３、及びトレースメモリ３８０におけるデータ構造の具体例を示している。トレースメッセージバッファ３３３には六つのエントリがあり、ＯＶＦカウント値バッファ３７３には二つのエントリがある。トレースメッセージバッファ３３３の四つ目のエントリにはオーバーフローフラグがセット（１個目）されている。そのため、トレースメッセージバッファ３３３の四つ目のエントリ入力前に、オーバーフローが生じていることがわかる。また、トレースメッセージバッファ３３３の六つ目のエントリにはオーバーフローフラグがセット（２個目）されている。そのため、トレースメッセージバッファ３３３の六つ目のエントリ入力前に、２回目のオーバーフローが生じていることがわかる。このオーバーフローのタイミングから、ユーザは、各イベントが生じたタイミングを把握することができる。
【００１６】
なお、特許文献２には、マイクロプロセッサシステムにおける共有メモリの制御に関する技術が開示されている。本技術では、マイクロシステムからの制御内容を時系列に沿って表示する手法が開示されている。
【先行技術文献】
【特許文献】
【００１７】
【特許文献１】特開２０１０−１２８６８１号公報
【特許文献２】特開平５−２６５７９５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１８】
マイクロコンピュータのマルチコア環境において、複数のＣＰＵコアが同時にトレース対象命令を実行する場合がある。しかしながら、一般に、同時に命令が実行されたか否かを考慮したトレース書き込みが行われていない。そのため、デバッガが、トレースメモリ内のメッセージを参照しても、正しいタイムスタンプ値が参照できない恐れがある。
【００１９】
例えば、特許文献１に記載の構成において、第１ＣＰＵコア４１０と第２ＣＰＵコア４３０とが同時にトレース対象イベントを実行したことを想定する。しかし、トレースメモリ書き込み制御回路３７４にトレースメッセージを入力する場合に、これらのイベントが同時に発生したことを通知する手段がない。そのため、トレースメモリ書き込み制御回路３７４は、便宜的に先にトレースメッセージバッファ３３３に入力されたトレースメッセージを、先に発生したイベントにかかるメッセージと認識する。さらに、トレースメモリ書き込み制御回路３７４は、便宜的に後にトレースメッセージバッファ３３３に入力されたトレースメッセージを、後に発生したイベントにかかるメッセージと認識する。ここで、両トレースメッセージ内のＯＶＦフラグが設定される場合がある。この場合、トレースメモリ書き込み制御回路３７４は、先に入力されたトレースメッセージの書き込み前にＯＶＦカウント値バッファ３７３から先頭のＯＶＦカウント値を読み込んでトレースメモリ３８０に書き込む。さらに、トレースメモリ書き込み制御回路３７４は、後に入力されたトレースメッセージの書き込み前にＯＶＦカウント値バッファ３７３から先頭のＯＶＦカウント値を読み込んでトレースメモリ３８０に書き込む。しかしながら、先のＯＶＦカウント値の書き込みによりＯＶＦカウント値バッファ２７３が空になる可能性がある。そのため、トレースメモリ書き込み制御回路３７４は、不定値をトレースメモリ３８０に書き込む恐れがある。
【００２０】
なお、特許文献２でも、同一のタイミングで共有メモリに書き込むことが想定されていないため、正確なタイムスタンプ値を持つトレースデータを参照することができない。
【００２１】
このように、上記した技術では、トレース対象の命令の実行が同時に生じた場合に、正確な命令発生タイミングを把握することができない恐れがあった。
【課題を解決するための手段】
【００２２】
本発明にかかるインサーキットエミュレータの一態様は、
第１、第２プロセッサの各々からのトレースデータの出力と同期して出力される第１、第２出力イネーブル信号に基づき、トレースデータの出力タイミングが同一であるか否かを示すタイミング情報を出力するタイミング情報生成回路と、
前記第１または前記第２のプロセッサから出力された各トレースデータと、各トレースデータ取得時のタイムスタンプと、タイムスタンプをカウントするタイムスタンプカウンタがオーバーフローしたことを示すオーバーフローフラグと、前記タイミング情報と、を対応付けたトレースメッセージを生成するトレースメッセージ生成回路と、
前記トレースメッセージ生成回路が生成したトレースメッセージをトレースメモリに書き込みを行う制御回路であって、前記オーバーフローフラグの設定時には、同じタイミング情報を持つトレースメッセージ群をトレースメモリに書き込む前にオーバーフローカウント値をトレースメモリに書き込み、その後に同じタイミング情報を持つトレースメッセージ群をトレースメモリに書き込む、トレースメモリ書き込み制御回路と、を備えるものである。
【００２３】
本発明にかかるトレースメモリ制御システムの一態様は、
第１、第２プロセッサの各々からのトレースデータと、各トレースデータ取得時のタイムスタンプと、トレースデータの出力タイミングが同一であるか否かを示すタイミング情報と、を対応付けたトレースメッセージを出力順に受け付け、トレースメモリに書き込むトレースメモリ書き込み制御回路を備えた装置と、
前記トレースメモリから各トレースメッセージを読み出し、各トレースメッセージ内の前記タイミング情報に基づき、他のトレースメッセージと出力タイミングが異なるかを判別できるように各トレースメッセージを表示する表示情報を生成するデバッグプログラムを実行するホストコンピュータと、を備える、ものである。
【００２４】
本発明にかかるトレースメッセージ生成装置の一態様は、
第１、第２プロセッサの各々からのトレースデータの出力と同期して出力される第１、第２出力イネーブル信号に基づき、トレースデータの出力タイミングが同一であるか否かを示すタイミング情報を出力するタイミング情報生成回路と、
前記第１または前記第２のプロセッサから出力された各トレースデータと、各トレースデータ取得時のタイムスタンプと、前記タイミング情報と、を対応付けたトレースメッセージを生成し、前記タイミング情報に基づいて、各トレースメッセージを表示する制御装置に対し、生成したトレースメッセージを供給する、トレースメッセージ生成回路と、を備える、ものである。
【００２５】
本発明にかかるトレースメッセージ処理方法の一態様は、
第１、第２プロセッサの各々からのトレースデータの出力と同期して出力される第１、第２出力イネーブル信号に基づき、トレースデータの出力タイミングが同一であるか否かを示すタイミング情報を生成し、
前記第１または前記第２のプロセッサから出力された各トレースデータと、各トレースデータ取得時のタイムスタンプと、前記タイミング情報と、を対応付けたトレースメッセージを生成し、
前記トレースメッセージ生成回路が生成したトレースメッセージをトレースメモリに書き込む、ものである。
【００２６】
本発明では、トレースデータの出力と同期して出力される出力イネーブル信号から、トレースデータの出力タイミングの異同を示すタイミング情報が生成される。トレースメッセージは、タイミング情報とトレースデータが関連付けられてトレースメモリ内に格納される。そして、表示時には、トレースメッセージ内のタイミング情報を参照することにより、出力タイミングの異同を判別できる表示画面が生成される。これにより、トレース対象の命令の実行が同時に生じた場合であっても、正確な発生タイミングを把握することができる。
【発明の効果】
【００２７】
本発明によれば、トレース対象の命令の実行が同時に生じた場合であっても、正確な命令発生タイミングを把握することができるインサーキットエミュレータ、トレースメモリ制御装置、トレースメッセージ生成装置及びトレースメッセージ処理方法を提供することができる。
【図面の簡単な説明】
【００２８】
【図１】実施の形態１にかかるインサーキットエミュレータの構成を示すブロック図である。
【図２】実施の形態１にかかるタイミング情報生成回路の内部構成を示すブロック図である。
【図３】実施の形態１にかかるタイミング情報生成回路内の各回路の出力信号を示すタイミングチャートである。
【図４】実施の形態１にかかるタイミング情報生成回路の動作を示すフローチャートである。
【図５】実施の形態１にかかるトレースメッセージ生成回路の動作を示すフローチャートである。
【図６】実施の形態１にかかるオーバーフローカウント値生成回路の動作を示すフローチャートである。
【図７】実施の形態１にかかるトレースメモリ書き込み制御回路の動作を示すフローチャートである。
【図８】実施の形態１にかかるトレースメモリ書き込み制御回路の動作を示すフローチャートである。
【図９】実施の形態１にかかるインサーキットエミュレータの動作を示す概念図である。
【図１０】実施の形態１にかかるタイミング情報生成回路内の各回路の出力信号を示すタイミングチャートである。
【図１１】実施の形態２にかかるタイミング情報生成回路の内部構成を示すブロック図である。
【図１２】実施の形態２にかかるタイミング情報生成回路内の各回路の出力信号を示すタイミングチャートである。
【図１３】実施の形態３にかかるタイミング情報生成回路の内部構成を示すブロック図である。
【図１４】実施の形態４にかかるタイミング情報生成回路の内部構成を示すブロック図である。
【図１５】実施の形態４にかかるタイミング情報生成回路内の各回路の出力信号を示すタイミングチャートである。
【図１６】実施の形態４にかかるタイミング情報生成回路内の各回路の出力信号を示すタイミングチャートである。
【図１７】一般的なデバッグ環境を示すブロック図である。
【図１８】特許文献１に記載のタイムスタンプカウンタ制御回路の構成を示すブロック図である。
【図１９】特許文献１に記載のトレースメモリ書き込み制御回路の動作を示す図である。
【発明を実施するための形態】
【００２９】
＜実施の形態１＞
以下、図面を参照して本発明の実施の形態について説明する。図１は、本実施の形態にかかるインサーキットエミュレータシステムの構成を示すブロック図である。当該当該インサーキットエミュレータシステムは、インサーキットエミュレータ１０と、ホストコンピュータ２０と、を備える。
【００３０】
インサーキットエミュレータ１０は、第１プロセッサ１１０と、第２プロセッサ１２０と、タイムスタンプカウンタ制御回路１３０と、オーバーフローカウンタ制御回路１４０と、トレースメモリ１５０と、ホストＩＦ（インターフェイス）１６０と、を備える。
【００３１】
第１プロセッサ１１０、第２プロセッサ１２０、及びタイムスタンプ取得回路１３０は、同一チップ上に実装することができ、デバッグチップとして動作する。タイムスタンプカウンタ制御回路１３０は、タイミング情報生成回路１３１と、トレースメッセージ生成回路１３２と、タイムスタンプカウンタ１３５と、トレースメッセージバッファ１３６と、を備える。なお、タイムスタンプカウンタ制御回路１３０内の各処理部には、クロック信号が入力される。
【００３２】
第１プロセッサ１１０及び第２プロセッサ１２０は、各々が内蔵する第１ＣＰＵコア１１１、第２ＣＰＵコア１２１がトレース対象命令を実行した場合、出力イネーブル信号（プロセッサ１出力イネーブル信号、プロセッサ２出力イネーブル信号）をタイミング情報生成回路１３１、及びトレースメッセージ生成回路１３２に出力し、トレースデータをトレースメッセージ生成回路１３２に出力する。ここで、第１プロセッサ１１０、第２プロセッサ１２０が出力するトレースデータには、第１プロセッサ１１０、第２プロセッサ１２０のどちらから出力されているかを示すプロセッサ識別子が含まれる。
【００３３】
タイミング情報生成回路１３１は、第１プロセッサ１１０、または第２プロセッサ１２０のトレースデータ出力タイミングを示すタイミング情報を出力する。本実施の形態において、タイミング情報生成回路１３１は、タイミング情報として１ビットのビット値であるタイミングフラグを出力する。タイミング情報生成回路１３１は、プロセッサ１出力イネーブル信号、プロセッサ２出力イネーブル信号の少なくとも一方が入力されたタイミングにタイミングフラグを反転する。
【００３４】
タイミング情報生成回路１３１の内部構成の一例を図２に示す。図示するようにタイミング情報生成回路１３１は、ＯＲ回路１７１と、ＡＮＤ回路１７２と、Ｄ型フリップフロップ１７３と、ＮＯＴ回路１７４と、を備える。各回路の出力信号を図３のタイミングチャートに示す。
【００３５】
ＯＲ回路１７１には、プロセッサ１出力イネーブル信号及びプロセッサ２出力イネーブル信号が入力される。ＯＲ回路１７１は、プロセッサ１出力イネーブル信号及びプロセッサ２出力イネーブル信号の一方がハイレベル（"１"、以下同様である。）である場合にハイレベルをＡＮＤ回路１７２に出力し、それ以外の場合（両信号がいずれもロウレベル（"０"以下同様である。）である場合）にロウレベルをＡＮＤ回路１７２に出力する（図３参照）。
【００３６】
ＡＮＤ回路１７２には、クロック信号と、ＯＲ回路１７１からの出力信号が入力される。ＡＮＤ回路１７２は、両入力信号が共にハイレベルである場合にＤ型フリップフロップ１７３のクロック入力端子にハイレベルを供給し、それ以外の場合にＤ型フリップフロップ１７３のクロック入力端子にロウレベルを供給する（図３参照）。
【００３７】
Ｄ型フリップフロップ１７３のクロック入力端子には、ＡＮＤ回路１７２の出力信号が入力される。Ｄ型フリップフロップ１７３の入力端子Ｄには、Ｄ型フリップフロップ１７３の出力信号の反転信号（ＮＯＴ回路１７４の出力信号）が入力される。Ｄ型フリップフロップ１７３は、一般的なディレイ型のフリップフロップと同様の動作を行う。Ｄ型フリップフロップ１７３は、出力信号をトレースメッセージ生成回路１３２にタイミングフラグ信号として供給する。
【００３８】
ＮＯＴ回路１７４は、Ｄ型フリップフロップ１７３の出力信号を反転（すなわち、ロウレベルであればハイレベルに変換し、ハイレベルであればロウレベルに変換する。）し、反転信号をＤ型フリップフロップ１７３の入力端子Ｄに供給する。
【００３９】
改めて、図３を参照し、各回路の出力信号について説明する。ＯＲ回路１７１は、プロセッサ１出力イネーブル信号及びプロセッサ２出力イネーブル信号の一方がハイレベルである場合にハイレベルをＡＮＤ回路１７２に出力する。そのため、ＯＲ回路１７１は、ｔ２〜ｔ８、ｔ９〜ｔ１０、ｔ１１〜ｔ１２にハイレベルを出力する。
【００４０】
ＡＮＤ回路１７２は、クロック信号とＯＲ回路１７１の出力信号が共にハイレベルである場合にハイレベルを出力する。よって、ＡＮＤ回路１７２は、ｔ２〜ｔ２．５（タイミングｔ２とタイミングｔ３の中間タイミング、以下同様の記載を行う。）、ｔ３〜ｔ３．５、ｔ４〜ｔ４．５、ｔ５〜ｔ５．５、ｔ６〜ｔ６．５、ｔ７〜ｔ７．５、ｔ９〜ｔ９．５、ｔ１１〜ｔ１１．５にハイレベルを出力する。
【００４１】
Ｄ型フリップフロップ１７３では、前述のようにＡＮＤ回路１７２の出力信号がクロック入力端子に供給され、自身の出力信号の反転信号が入力端子Ｄに供給される。そのため、Ｄ型フリップフロップ１７３は、ｔ２〜ｔ３、ｔ４〜ｔ５、ｔ６〜ｔ７、ｔ９〜ｔ１１にハイレベルを出力する。これにより、Ｄ型フリップフロップ１７３の出力信号、すなわちタイミングフラグは、図３に示すように、第１プロセッサ１１０及び第２プロセッサ１３０の少なくとも一方のトレース出力タイミングで値を反転している。
【００４２】
再び、図１を参照する。トレースメッセージ生成回路１３２は、ＯＶＦフラグ１３３と、タイミングフラグ１３４と、を保持する。トレースメッセージ生成回路１３２は、タイミング情報生成回路１３１から入力されるタイミングフラグ１３４をトレースデータ毎に保持する。さらに、トレースメッセージ生成回路１３２は、タイムスタンプカウンタ１３５からキャリー信号が入力された場合に、ＯＶＦフラグ１３３をオンに設定する。
【００４３】
トレースメッセージ生成回路１３２は、プロセッサ１出力イネーブル信号、プロセッサ２出力イネーブル信号の一方または双方を受信した場合、ＯＶＦフラグ１３３がオンに設定されているか否かを判定する。ＯＶＦフラグ１３３がオンに設定されている場合、ＯＶＦカウント値要求信号をＯＶＦカウント値生成回路１４２に供給する。ＯＶＦカウント値要求信号とは、ＯＶＦカウント値生成回路１４２に対し、ＯＶＦカウンタ１４１のカウント値を用いてＯＶＦカウント値を生成し、生成値をＯＶＦカウント値バッファ１４３に格納することを要求する信号である。
【００４４】
トレースメッセージ生成回路１３２は、プロセッサ１出力イネーブル信号を受信した場合、第１プロセッサ１１０からトレースデータ、タイムスタンプカウンタ１３５からタイムスタンプカウント値、タイミング情報生成回路１３１からタイミングフラグを受信する。同様に、トレースメッセージ生成回路３２は、プロセッサ２出力イネーブル信号を受信した場合、第２プロセッサ１２０からトレースデータ、タイムスタンプカウンタ１３５からタイムスタンプカウント値、タイミング情報生成回路１３１からタイミングフラグを受信する。
【００４５】
トレースメッセージ生成回路１３２は、トレースデータと、タイムスタンプカウント値と、タイミングフラグと、ＯＶＦフラグ１３３の値と、を関連付けたトレースメッセージを生成する。
【００４６】
トレースメッセージバッファ１３６は、ＦＩＦＯ（First In First Out）型の記憶部である。
【００４７】
トレースメッセージ生成回路１３２は、トレースメッセージの作成後にＯＶＦフラグ１３３の値をクリア（オフ）し、カウンタリセット信号（ＲＥＳ）をタイムスタンプカウンタ１３５及びＯＶＦカウンタ１４１に供給する。カウンタリセット信号は、タイムスタンプカウンタ１３５のカウント値、及びＯＶＦカウンタ１４１のカウント値をリセットする信号である。トレースメッセージ生成回路１３２は、生成したトレースメッセージをトレースメッセージバッファ１３６に入力する。
【００４８】
なお、トレースメッセージ生成回路１３２は、プロセッサ１出力イネーブル信号及びプロセッサ２出力イネーブル信号を受信した場合、プロセッサ毎のトレースメッセージを同時に作成し、トレースメッセージバッファ１３６に入力する。
【００４９】
タイムスタンプカウンタ１３５は、クロック信号に同期して、一定の時間間隔でカウント動作を行う。タイムスタンプカウンタ１３５は、カウント値をトレースメッセージ生成回路１３２に供給する。タイムスタンプカウンタ１３５は、カウント値が上限値に到達する（オーバーフローする）と、キャリー信号をトレースメッセージ生成回路１３２及びオーバーフローカウンタ制御回路１４０に供給する。タイムスタンプカウンタ１３５は、トレースメッセージ生成回路１３２からカウンタリセット信号を受信した場合に、カウント値をリセット（０に設定）する。
【００５０】
オーバーフローカウンタ制御回路１４０は、ＯＶＦカウンタ１４１と、ＯＶＦカウント値生成回路１４２と、ＯＶＦカウント値バッファ１４３と、トレースメモリ書き込み制御回路１４４と、を備える。トレースメモリ書き込み制御回路１４４は、内部にレジスタ１４５を有する。
【００５１】
ＯＶＦカウンタ１４１は、トレースメッセージ生成回路１３２からカウンタリセット信号（ＲＥＳ）を受信すると初期化され、ゼロから計数を開始する。ＯＶＦカウンタ１４１は、タイムスタンプカウンタ１３５から出力されるキャリー信号の入力回数を計数する。
【００５２】
ＯＶＦカウント値生成回路１４２は、トレースメッセージ生成回路１３２からＯＶＦカウント値要求信号が入力される（アクティブになる）と、ＯＶＦカウンタ１４１のカウント値を読み出す。ＯＶＦカウント値生成回路１４２は、読み出したカウント値をＯＶＦカウント値バッファ１４３に入力する。
【００５３】
ＯＶＦカウント値バッファ１４３は、ＦＩＦＯ（First In First Out）型の記憶部である。ＯＶＦカウント値バッファ１４３は、ＯＶＦカウント値生成回路１４２によって生成された順序でカウント値を保持する。
【００５４】
トレースメモリ書き込み制御回路１４４は、トレースメッセージバッファ１３６からトレースメッセージを順次読み出し、読み出したトレースメッセージをトレースメモリ１５０に書き込む回路である。
【００５５】
トレースメモリ書き込み制御回路１４４は、内部にレジスタ１４５を有する。レジスタ１４５は、トレースメモリ書き込み制御回路１４４が直近に書き込んだトレースメッセージに含まれるタイミング情報（本実施の形態ではタイミングフラグの値）を保持する。トレースメモリ書き込み制御回路１４４は、これから書き込むトレースメッセージ内のＯＶＦフラグを抽出し、オンに設定されているか否かを判定する。さらに、トレースメモリ書き込み制御回路１４４は、これから書き込むトレースメッセージ内のタイミングフラグの値と、レジスタ１４５が保持するタイミングフラグの値と、を比較する。
【００５６】
ＯＶＦフラグがオンであり、タイミングフラグの値が一致しない場合、トレースメモリ書き込み制御回路１４４は、ＯＶＦカウント値バッファ１４３の先頭に位置するカウント値を取得する。トレースメモリ書き込み制御回路１４４は、取得したカウント値をトレースメモリ１５０に書き込む。その後、トレースメモリ書き込み制御回路１４４は、書き込み対象のトレースメッセージをトレースメモリ１５０に書き込む。
【００５７】
一方、ＯＶＦフラグがオンではない場合、またはタイミングフラグの値が一致する場合、トレースメモリ書き込み制御回路１４４は、ＯＶＦカウント値バッファ１４３からカウント値を取得しない。トレースメモリ書き込み制御回路１４４は、書き込み対象のトレースメッセージをトレースメモリ１５０に書き込む。
【００５８】
トレースメモリ１５０は、トレースメモリ書き込み制御回路１４４から書き込まれるトレースメッセージを格納する記憶部である。
【００５９】
ホストＩＦ１６０は、トレースメモリ１５０と、デバッグプログラム２１０と、のデータのやり取りを仲介する処理部である。
【００６０】
ホストコンピュータ２０は、デバッグプログラム２１０を実行する。デバッグプログラム２１０は、第１ＣＰＵコアおよび第２ＣＰＵコアでのデバッグ対象のプログラムの実行、停止を指示したり、トレースメモリ１５０に書き込まれたトレースメッセージを取り込んでホストコンピュータの表示装置へ渡し、トレースメッセージの内容を表示させる。ホストコンピュータ２０は、液晶ディスプレイ等の表示部と一体化された装置、または接続可能に構成された装置である。ホストコンピュータ２０は、ＣＰＵ（Central Processing Unit）やＨＤＤ（Hard Disk Drive）等の補助記憶装置、ＲＡＭ（Random Access Memory）等の不揮発性メモリを有する。デバッグプログラム２１０は、補助記憶装置内に格納され、実行時にＲＡＭに適宜読み出されてＣＰＵにより実行される。
【００６１】
デバッグプログラム２１０は、前述の表示部に表示する表示メッセージを取得、生成する
【００６２】
続いて、図４を参照して、タイミング情報生成回路１３１の動作を説明する。図４は、本実施の形態にかかるタイミング情報生成回路１３１の動作を示すフローチャートである。
【００６３】
各ＣＰＵコアにてユーザプログラムが実行される前に、タイミング情報生成回路１３１内のタイミングフラグの値をリセットする（Ｓ１１）。すなわち、はじめにタイミング情報生成回路１３１が生成するタイミングフラグの値を０（ロウレベル）とする。タイミングフラグの値のリセットは、ライトアクセスを行うことにより実現する。
【００６４】
タイミング情報生成回路１３１は、第１ＣＰＵコア１１０及び第２ＣＰＵコア１２０がユーザプログラムを実行中であるか否かを判定する（Ｓ１２）。ユーザプログラムの実行中ではない場合（Ｓ１２：Ｎｏ）、タイミング情報生成回路１３１は、処理を終了する。
【００６５】
ユーザプログラムの実行中である場合（Ｓ１２：Ｙｅｓ）、タイミング情報生成回路１３１は、出力イネーブル信号（プロセッサ１出力イネーブル信号、プロセッサ２出力イネーブル信号）が有効（"１"、ハイレベル）であるか否かを判定する（Ｓ１３）。いずれも有効ではない場合、タイミング情報生成回路１３１は、Ｓ１２の処理を再度行う。
【００６６】
出力イネーブル信号の一方が有効である場合（Ｓ１３：Ｙｅｓ）、タイミング情報生成回路１３１は、タイミングフラグを反転する（Ｓ１４）。
【００６７】
続いて、図５を参照して、トレースメッセージ生成回路１３２の動作を説明する。図５は、トレースメッセージ生成回路１３２の動作を示すフローチャートである。
【００６８】
各ＣＰＵコアにてユーザプログラムが実行される前に、タイムスタンプカウンタ１３５のカウント値、ＯＶＦフラグ１３３、及びＯＶＦカウンタ１４１をライトアクセスによりリセットする（Ｓ２１）。
【００６９】
トレースメッセージ生成回路１３２は、第１ＣＰＵコア１１１及び第２ＣＰＵコア１２１がユーザプログラムを実行中であるか否かを判定する（Ｓ２２）。ユーザプログラムの実行中ではない場合（Ｓ２２：Ｎｏ）、トレースメッセージ生成回路１３２は、処理を終了する。
【００７０】
ユーザプログラムの実行中である場合（Ｓ２２：Ｙｅｓ）、トレースメッセージ生成回路１３２は、出力イネーブル信号（プロセッサ１出力イネーブル信号、プロセッサ２出力イネーブル信号）が有効である否かを判定する（Ｓ２３）。出力イネーブル信号が有効ではない場合（Ｓ２３：Ｎｏ）、トレースメッセージ生成回路１３２は、Ｓ２２の処理を再度行う。
【００７１】
出力イネーブル信号が有効になった場合（Ｓ２３：Ｙｅｓ）、トレースメッセージ生成回路１３２は、ＯＶＦフラグ１３３がオンに設定されているか否かを判定する（Ｓ２４）。ＯＶＦフラグ１３３がオンに設定されている場合（Ｓ２４：Ｙｅｓ）、トレースメッセージ生成回路１３２は、ＯＶＦカウント値要求信号をＯＶＦカウント値生成回路１４２に供給する（Ｓ２５）。
【００７２】
ＯＶＦフラグ１３３がオンに設定されていない場合（Ｓ２４：Ｎｏ）、トレースメッセージ生成回路１３２は、ＯＶＦカウント値要求信号を出力しない。
【００７３】
そして、トレースメッセージ生成回路１３２は、出力イネーブル信号の受信に応じて、トレースデータ、タイムスタンプカウント値、及びタイミングフラグを取得する（Ｓ２６）。トレースメッセージ生成回路１３２は、トレースデータと、タイムスタンプカウント値と、タイミングフラグと、ＯＶＦフラグ１３３の値と、を関連付けたトレースメッセージを生成する（Ｓ２７）。
【００７４】
トレースメッセージ生成回路１３２は、ＯＶＦフラグ１３３の値をクリア（オフ）すると共に、カウンタリセット信号をタイムスタンプカウンタ１３５及びＯＶＦカウンタ１４１に供給する（Ｓ２８）。トレースメッセージ生成回路１３２は、生成したトレースメッセージをトレースメッセージバッファ１３６に入力する（Ｓ２９）。Ｓ２９の処理の後、トレースメッセージ生成回路１３２は、Ｓ２３の処理を再度行う。
【００７５】
続いて、図６を参照して、オーバーフローカウント値生成回路１４２の動作を説明する。図６は、オーバーフローカウント値生成回路１４２の動作を示すフローチャートである。
【００７６】
オーバーフローカウント値生成回路１４２は、第１ＣＰＵコア１１１及び第２ＣＰＵコア１２１がユーザプログラムを実行中であるか否かを判定する（Ｓ３１）。ユーザプログラムの実行中ではない場合（Ｓ３１：Ｎｏ）、オーバーフローカウント値生成回路１４２は、処理を終了する。
【００７７】
ユーザプログラムの実行中である場合（Ｓ３１：Ｙｅｓ）、オーバーフローカウント値生成回路１４２は、ＯＶＦカウント値要求信号の受信を受け付ける（Ｓ３２）。ＯＶＦカウント値要求信号を受信しない場合（Ｓ３２：Ｎｏ）、オーバーフローカウント値生成回路１４２は、Ｓ３１から処理を再度行う。
【００７８】
ＯＶＦカウント値要求信号を受信した場合（Ｓ３２：Ｙｅｓ）、オーバーフローカウント値生成回路１４２は、ＯＶＦカウンタ１４１からカウント値を取得する（Ｓ３３）。そして、ＯＶＦカウント値生成回路１４２は、取得したカウント値をＯＶＦカウント値バッファ１４３に入力する（Ｓ３４）。その後、オーバーフローカウント値生成回路１４２は、Ｓ３２から処理を再度行う。
【００７９】
続いて、図７及び図８を参照して、トレースメモリ書き込み制御回路１４４の動作を説明する。図７及び図８は、トレースメモリ書き込み制御回路１４４の動作を示すフローチャートである。
【００８０】
各ＣＰＵコアにてユーザプログラムが実行される前に、タイミング情報生成回路１３１内のタイミングフラグの値をリセットする（Ｓ４１）。すなわち、はじめにタイミング情報生成回路１３１が生成するタイミングフラグを０とする。
【００８１】
トレースメモリ書き込み制御回路１４４は、第１ＣＰＵコア１１１及び第２ＣＰＵコア１２１がユーザプログラムを実行中であるか否かを判定する（Ｓ４２）。ユーザプログラムの実行中ではない場合（Ｓ４２：Ｎｏ）、トレースメモリ書き込み制御回路１４４は、処理を終了する。
【００８２】
ユーザプログラムの実行中である場合（Ｓ４２：Ｙｅｓ）、トレースメモリ書き込み制御回路１４４は、トレースメッセージバッファ１３６にトレースメッセージが格納されているか否かを判定する（Ｓ４３）。トレースメッセージが格納されていない場合（Ｓ４３：Ｎｏ）、トレースメモリ書き込み制御回路１４４は、Ｓ４２から処理を再度行う。
【００８３】
トレースメッセージが格納されている場合（Ｓ４３：Ｙｅｓ）、トレースメモリ書き込み制御回路１４４は、トレースメッセージバッファ１３６の先頭からトレースメッセージを取得する（Ｓ４４）。トレースメモリ書き込み制御回路１４４は、取得したトレースメッセージからＯＶＦフラグの値を抽出する。トレースメモリ書き込み制御回路１４４は、抽出したＯＶＦフラグがオンに設定されているか否かを判定する（Ｓ４５）。
【００８４】
ＯＶＦフラグがオンに設定されている場合（Ｓ４５：Ｙｅｓ）、トレースメモリ書き込み制御回路１４４は、トレースメッセージ内のタイミングフラグの値を抽出する。トレースメモリ書き込み制御回路１４４は、抽出したタイミングフラグの値と、レジスタ１４５が保持する値と、を比較する（Ｓ４６）。両者が一致しない場合（Ｓ４６：Ｎｏ）、トレースメモリ書き込み制御回路１４４は、ＯＶＦカウント値バッファ１４３の先頭に格納されたカウント値を取得し（Ｓ４７）、取得したカウント値をトレースメモリ１５０に書き込む（Ｓ４８）。そして、トレースメモリ書き込み制御回路１４４は、トレースメモリ１５０のアドレスをインクリメントする（Ｓ４９）。
【００８５】
ＯＶＦフラグがオンに設定されていない場合（Ｓ４５：Ｎｏ）、または書き込み対象のトレースメッセージに含まれるタイミングフラグの値とレジスタ１４５が保持する値とが一致する場合（Ｓ４６：Ｙｅｓ）、トレースメモリ書き込み制御回路１４４は、Ｓ４７〜Ｓ４９の処理を行わない。
【００８６】
トレースメモリ書き込み制御回路１４４は、書き込み対象のトレースメッセージからタイミングフラグの値を取得し、取得した値をレジスタ１４５に上書きする（Ｓ５０）。トレースメモリ書き込み制御回路１４４は、トレースメッセージをトレースメモリ１５０に書き込む（Ｓ５１）。そして、トレースメモリ書き込み制御回路１４４は、トレースメモリ１５０のアドレスをインクリメントする（Ｓ５２）。
【００８７】
トレースメモリ書き込み制御回路１４４は、トレースメモリ１５０のアドレスのインクリメント（Ｓ５２）の後に、再度、トレースメッセージバッファ１３６にトレースメッセージが格納されているか否かを判定する（Ｓ４３）。
【００８８】
次に、図９の模式図を参照して、各処理部の動作を更に説明する。なお、以下の説明において、参考として上述のフローチャート（図４〜図８）の符号も併せて記載する。タイミング情報生成回路１３１は、上述した方法により、トレースデータの入力毎に反転するタイミングフラグを生成する（Ｓ１１〜Ｓ１４）。この際、タイミング情報生成回路１３１は、どのプロセッサがトレースデータを出力したか、または複数のプロセッサがトレースデータを出力したか、等に関わらずトレースデータの入力毎にタイミングフラグを反転する。トレースメッセージ生成回路１３２は、トレースデータに、タイミングフラグ、ＯＶＦフラグ及びタイムスタンプカウンタのカウント値を関連付けたトレースメッセージを生成する（Ｓ２７）。
【００８９】
図９では、トレースメッセージ２のトレースデータと、トレースメッセージ３のトレースデータと、が同じタイミングで出力されている。この場合、トレースメッセージ２とトレースメッセージ３は、同じタイミングフラグ、同じＯＶＦフラグ、及び同じタイムスタンプカウント値を持つ。同様に、トレースメッセージ４のトレースデータと、トレースメッセージ５のトレースデータと、が同じタイミングで出力されている。この場合、トレースメッセージ４とトレースメッセージ５は、同じタイミングフラグ、同じＯＶＦフラグ、及び同じタイムスタンプカウント値を持つ。
【００９０】
トレースメッセージ生成回路１３２は、生成したトレースメッセージを順次トレースメッセージバッファ１３６にエントリする。図９の上部には、トレースメッセージバッファ１３６にエントリされたトレースメッセージが示されている。
【００９１】
トレースメモリ書き込み制御回路１４４は、トレースメッセージバッファ１３６からトレースメッセージを取得する。トレースメモリ書き込み制御回路１４４は、ＯＶＦフラグが"０"であれば、タイミングフラグの値をレジスタ１４５に書き込み（Ｓ５０）、トレースメッセージをトレースメモリ１５０に書き込む（Ｓ５１）。図９では、トレースメッセージバッファ１３６のトレースメッセージ１〜３は、ＯＶＦフラグの値が"０"であるため、トレースメモリ１５０にそのまま書き込まれる。
【００９２】
トレースメモリ書き込み制御回路１４４は、ＯＶＦフラグが"１"であれば、取得したトレースメッセージのタイミングフラグと、レジスタ１４５の値を比較する（Ｓ４６）。一致しない場合、トレースメモリ書き込み制御回路１４４は、直近のトレースデータの発生後にタイムスタンプがオーバーフローし、その後にトレースデータが出力されたと判定する。この場合、トレースメモリ書き込み制御回路１４４は、ＯＶＦカウント値バッファ１４３からＯＶＦカウント値を取得し（Ｓ４７）、取得したＯＶＦカウント値をトレースメモリ１５０に書き込む（Ｓ４８）。そして、トレースメモリ書き込み制御回路１４４は、タイミングフラグの値をレジスタ１４５に書き込み（Ｓ５０）、トレースメッセージをトレースメモリ１５０に書き込む（Ｓ５１）。
【００９３】
図９では、トレースメッセージ４〜６は、保持するＯＶＦフラグの値が"１"である。トレースメッセージ４のタイミングフラグの値は、直近のトレースメッセージのタイミングフラグと一致しない。そのため、トレースメッセージ４は、"ＯＶＦカウント値１"の書き込みの後にトレースメモリ１５０に書き込まれる。
【００９４】
トレースメッセージ５のタイミングフラグの値は、直近のトレースメッセージのタイミングフラグと一致している。そのため、トレースメッセージ５は、トレースメッセージ４と同時に出力されたと判定される。ここで、ＯＶＦカウント値（"１"）は、すでにトレースメモリ１５０に書き込まれている。そのため、トレースメモリ書き込み制御回路１４４は、タイミングフラグの値をレジスタ１４５に書き込み（Ｓ５０）、ＯＶＦカウント値を書き込むことなく、トレースメッセージ５をトレースメモリ１５０に書き込む（Ｓ５１）。
【００９５】
トレースメッセージ６のタイミングフラグの値は、直近のトレースメッセージのタイミングフラグと一致しない。そのため、トレースメッセージ６は、"ＯＶＦカウント値２"の書き込みの後にトレースメモリ１５０に書き込まれる。
【００９６】
次に、ホストコンピュータ２０によるトレースメモリの読み出し処理について説明する。ホストコンピュータ２０上で実行されるデバッグプログラム２１０は、第１プロセッサ１１０及び第２プロセッサ１２０によるプログラム実行が終了した後に、トレース結果をホストコンピュータ２０上（ホストコンピュータ２０に接続されたディスプレイ装置等）に表示するため、トレースメモリ１５０からトレースメッセージとＯＶＦカウント値を読み出す。なお、表示処理部２１０の処理は、一般にコンピュータが実行するデバッガプログラムとして実現される。デバッグプログラム２１０は、読み出したトレースメッセージを基に、例えばＧＵＩ（Graphical User Interface）形式のユーザに対する表示画面を生成する。
【００９７】
デバッグプログラム２１０が最初に読み出したトレースメッセージに含まれるタイムスタンプの値は、ユーザプログラム実行開始から最初のトレースデータが生成されるまでの時間間隔を示す。
【００９８】
デバッグプログラム２１０は、トレースメッセージを書き込み順に読み出す。デバッグプログラム２１０は、読み出したトレースメッセージ内のタイミングフラグと、直前に読み出したトレースメッセージ内のタイミングフラグを比較する。タイミングフラグの値が同じである場合、デバッグプログラム２１０は、これらのトレースメッセージに含まれるトレースデータが同時出力されたと判断する。
【００９９】
ここで、タイミングフラグの値が異なる場合、読み出したトレースメッセージ内のトレースデータの発生と、直近のトレースメッセージ内のトレースデータの発生との間隔は、読み出したトレースメッセージに含まれるタイムスタンプ値となる。
【０１００】
読み出したトレースメッセージの直近にＯＶＦカウント値が書き込まれている場合、読み出したトレースメッセージ内のトレースデータの発生と、直近のトレースメッセージ内のトレースデータの発生との間隔は、以下の（数１）により算出される。
【０１０１】
（数１）
（ＯＶＦカウント値×タイムスタンプカウンタ１３５のフルカウント値）＋読み出したトレースメッセージのタイムスタンプ値
【０１０２】
デバッグプログラム２１０は、タイミングフラグに基づいて、直近のトレースデータとの出力タイミングが同じであるか否か、トレースデータ間の出力間隔等が把握できる表示画面を生成する。例えば、デバッグプログラム２１０は、図９に示すトレースメモリ１５０内の構成に類似した画面を生成し、トレースデータ２とトレースデータ３が同時発生したこと、及びトレースデータ４とトレースデータ５が同時発生したこと、を当該画面上に表示すればよい。
【０１０３】
ここで、本実施の形態にかかるインサーキットエミュレータの効果について再度説明する。上述したように、タイミング情報生成回路１３１は、トレースデータの入力タイミング毎に反転するタイミングフラグを生成する。図３に示すように、同時にトレースデータが出力された場合、両トレースデータには同じ値を持つタイミングフラグが関連付けられる。そのため、デバッグプログラム２１０は、同時発生したイベントにかかるトレースメッセージを判別可能な表示画面を生成することができる。
【０１０４】
＜実施の形態２＞
本実施の形態にかかるインサーキットエミュレータは、タイミング情報生成回路１３１の構成が実施の形態１と異なり、ノイズ（グリッチノイズ）を防止できることを特徴とする。本実施の形態にかかるインサーキットエミュレータについて、実施の形態１と異なる点を中心に説明する。なお、以下の説明において、同一符号、同一名称を付した処理部であって、特に言及しない処理部は、基本的に実施の形態１と同様の処理を行う。本実施の形態にかかるインサーキットエミュレータは、タイミング情報生成回路１３１の構成を除いて、実施の形態１の構成（図１）と同一構成である。はじめに実施の形態１にかかるタイミング情報生成回路１３１では、問題が起きる場合について説明する。続いて、本実施の形態にかかるタイミング情報生成回路１３１の構成、及び動作について説明する。
【０１０５】
図１０を参照して、実施の形態１にかかるタイミング情報生成回路１３１では、問題が起きる場合について説明する。図１０は、実施の形態１にかかるタイミング情報生成回路１３１の動作を示すタイミングチャートであり、縮尺が異なるものの図３と対応するものである。
【０１０６】
上述のように、ＡＮＤ回路１７２は、ＯＲ回路１７１（プロセッサ１イネーブル信号とプロセッサ２イネーブル信号の論理和出力）とクロック信号との論理積を出力する。しかし、何らかの誤操作により、クロック信号の立ち上がりがＯＲ回路１７１の信号立下りよりも若干速く発生する可能性がある。この場合、ＡＮＤ回路１７２は、一瞬だけハイレベルとなる出力信号を生成する可能性がある。例えば、図１０では、ＡＮＤ回路１７２は、ｔ８において一瞬だけ立ち上がる信号（ノイズの存在する信号）を生成してしまう可能性がある。このようなＡＮＤ回路１７２の出力信号を用いた場合、タイミングフラグの値が誤ったものとなる。
【０１０７】
次に、このような問題を解決するためのタイミング情報生成回路１３１の構成について説明する。図１１は、本実施の形態にかかるタイミング情報生成回路１３１の構成を示すブロック図である。タイミング情報生成回路１３１は、ＯＲ回路１７５と、Ｄラッチ１７６と、Ｄ型フリップフロップ１７７と、ＮＯＴ回路１７８と、を備える。各回路の出力信号を図１２のタイミングチャートに示す。
【０１０８】
ＯＲ回路１７５には、プロセッサ１出力イネーブル信号及びプロセッサ２出力イネーブル信号が入力される。ＯＲ回路１７５は、プロセッサ１出力イネーブル信号及びプロセッサ２出力イネーブル信号の一方がハイレベルである場合にハイレベルをＤラッチ１７６のイネーブル端子Ｅに供給し、それ以外の場合（両信号がいずれもロウレベルである場合）にロウレベルをＤラッチ１７６のイネーブル端子Ｅに供給する（図１２参照）。
【０１０９】
Ｄラッチ１７６は、一般的なＤラッチの動作を行う。Ｄラッチ１７６のイネーブル端子Ｅには、ＯＲ回路１７５の出力信号が供給される。また、Ｄラッチ１７６の入力端子Ｄには、クロック信号が入力される。Ｄラッチ１７６は、出力信号をＤ型フリップフロップ１７７のクロック端子に供給する。
【０１１０】
Ｄ型フリップフロップ１７７のクロック端子には、Ｄラッチ１７６の出力信号が入力され、入力端子Ｄには自身の出力信号の反転信号（ＮＯＴ回路１７８の出力信号）が入力される。Ｄ型フリップフロップ１７７は、一般的なディレイ型のフリップフロップと同様の動作を行う。Ｄ型フリップフロップ１７７は、出力信号をトレースメッセージ生成回路１３２にタイミングフラグ信号として出力する。
【０１１１】
ＮＯＴ回路１７８は、Ｄ型フリップフロップ１７７の出力信号を反転（すなわち、ロウレベルであればハイレベルに変換し、ハイレベルであればロウレベルに変換する。）し、反転信号をＤ型フリップフロップ１７７の入力端子Ｄに供給する。
【０１１２】
次に図１２を参照し、各回路の出力信号について説明する。なお、図１２のプロセッサ１出力イネーブル信号及びプロセッサ２イネーブル信号の波形は、図１０と同一である。ＯＲ回路１７５は、プロセッサ１出力イネーブル信号及びプロセッサ２出力イネーブル信号の一方がハイレベルである場合にハイレベルをＤラッチ１７６に供給する。そのため、ＯＲ回路１７５は、ｔ２〜ｔ８、ｔ９〜ｔ１０、ｔ１１〜ｔ１２にハイレベルを出力する。
【０１１３】
Ｄラッチ１７６は、前述のようにＯＲ回路１７５の出力信号（Ｅ１）をイネーブル端子Ｅの入力とし、クロック信号ＣＫを入力端子Ｄの入力とする。Ｄラッチ１７６は、信号Ｅ１の立ち上がりに同期してクロック信号ＣＫをスルー出力する。また、Ｄラッチ１７６は、信号Ｅ１の立ち下がりに同期してクロック信号ＣＫを保持し、信号Ｅ１が立ち上がるまでその値を出力する。
【０１１４】
そのため、図１２のタイミングｔ８においてクロック信号が所望のタイミングよりも若干速く立ち上がった場合であっても、Ｄラッチ１７６の出力信号Ｑ１はハイレベルのままとなる（クロック信号ＣＫの値が保持される）。そのため、図１０に示すようなノイズの影響は受けない。
【０１１５】
Ｄ型フリップフロップ１７７は、図１２に示す出力信号を出力する。なお、実施の構成１（図３）と比べてタイミングフラグの出力波形も変化している。しかし、図１２に示すタイミングフラグは、トレースデータの少なくとも一方が出力される毎に値が反転している。そのため、実施の形態１と同様の効果（トレースデータの同時出力を把握することができる）を得ることができる。
【０１１６】
続いて、本実施の形態にかかるインサーキットエミュレータの効果について再度説明する。上述したように実施の形態１にかかるタイミング情報生成回路１３１は、クロック信号の入力タイミングのずれに起因して動作が不正確になる恐れがある。一方、本実施の形態にかかるタイミング情報生成回路１３１は、Ｄラッチ１７６を備える構成である。これにより、クロック信号の入力タイミングのずれが生じた場合であっても、このずれに起因するノイズが生じない。ノイズの発生を防止することにより、誤動作の少ないインサーキットエミュレータを実現することができる。
【０１１７】
＜実施の形態３＞
本実施の形態にかかるインサーキットエミュレータは、実施の形態２と略同一の構成を有する。以下、本実施の形態にかかるインサーキットエミュレータについて、実施の形態２と異なる点を説明する。
【０１１８】
図１３は、本実施の形態にかかるタイミング情報生成回路１３１の構成を示すブロック図である。本実施の形態にかかるタイミング情報生成回路１３１は、Ｄ型フリップフロップ１７９の構成のみが実施の形態２と異なる。
【０１１９】
Ｄ型フリップフロップ１７９は、出力端子Ｑからの出力信号の反転信号を出力する出力端子ＱＢと、入力端子Ｄと、を接続する。これにより、図１２と同一の動作を行う。
【０１２０】
なお、図示するように、図１３の構成ではＮＯＴ回路を設ける必要性が無くなる。そのため、回路規模の縮小を実現することができる。
【０１２１】
＜実施の形態４＞
本実施の形態にかかるインサーキットエミュレータは、タイミング情報としてタイミングカウント値（所定値までカウントアップし、所定値となった時点でリセットされるカウント値）を用いることを特徴とする。本実施の形態にかかるインサーキットエミュレータについて、実施の形態１と異なる点を中心に説明する。
【０１２２】
はじめに、本実施の形態にかかるタイミング情報生成回路１３１の構成について説明する。図１４は、本実施の形態にかかるタイミング情報生成回路１３１の構成を示すブロック図である。
【０１２３】
タイミング情報生成回路１３１は、ＯＲ回路１８０と、Ｄラッチ１８１と、Ｄ型フリップフロップ１８２と、Ｄ型フリップフロップ１８３と、Ｄ型フリップフロップ１８４と、を備える。
【０１２４】
ＯＲ回路１８０には、プロセッサ１出力イネーブル信号及びプロセッサ２出力イネーブル信号が入力される。ＯＲ回路１８０は、プロセッサ１出力イネーブル信号及びプロセッサ２出力イネーブル信号の論理和をＤラッチ１８１のイネーブル端子Ｅに供給する。
【０１２５】
Ｄラッチ１８１は、一般的なＤラッチの動作を行う。Ｄラッチ１８１のイネーブル端子Ｅには、ＯＲ回路１８０の出力信号が供給される。また、Ｄラッチ１８１の入力端子Ｄにはクロック信号が入力される。Ｄラッチ１７６は、出力信号をＤ型フリップフロップ１８２のクロック端子に供給する。
【０１２６】
Ｄ型フリップフロップ１８２では、出力端子Ｑからの出力信号の反転信号を出力する出力端子ＱＢと、入力端子Ｄと、が接続される。Ｄ型フリップフロップ１８２は、出力端子Ｑから出力信号Ｄ０を出力する。Ｄ型フリップフロップ１８２は、出力端子ＱＢからの出力信号（Ｄ０の反転信号）をＤ型フリップフロップ１８３のクロック端子に供給する。
【０１２７】
Ｄ型フリップフロップ１８３では、出力端子Ｑからの出力信号の反転信号を出力する出力端子ＱＢと、入力端子Ｄと、が接続される。Ｄ型フリップフロップ１８２は、出力端子Ｑから出力信号Ｄ１を出力する。Ｄ型フリップフロップ１８２は、出力端子ＱＢからの出力信号（Ｄ１の反転信号）をＤ型フリップフロップ１８４のクロック端子に供給する。
【０１２８】
Ｄ型フリップフロップ１８４では、出力端子Ｑからの出力信号の反転信号を出力する出力端子ＱＢと、入力端子Ｄと、が接続される。Ｄ型フリップフロップ１８２は、出力端子Ｑから出力信号Ｄ２を出力する。
【０１２９】
上述の出力信号Ｄ０、Ｄ１、Ｄ２の順に下位から連結させた３ビット値が、タイミングカウント値（タイミング情報）としてトレースメッセージ生成回路１３２に供給される。
【０１３０】
続いて、図１５、図１６のタイミングチャートに各信号の出力信号を示す。なお、各回路の出力信号（値の変化）は、上述の回路構成に基づいて当然に理解できるため、詳細な説明は省略する。
【０１３１】
ここで、［Ｄ２,Ｄ１，Ｄ０］（信号Ｄ０〜Ｄ２より生成される３ビット値）は、トレースデータの入力毎にカウントアップし、"１１１"となった後にリセット（"０００"）される。
【０１３２】
上述の構成であっても、トレースデータの出力タイミングを正確に把握することができる。すなわち、同時に出力されたトレースデータを把握することができる。なお、トレースメモリ書き込み制御回路１４４は、本実施の形態においてタイミングフラグを扱う場合と略同一の手法でタイミングカウント値を参照し、トレースメッセージの書き込みを制御すればよい。
【０１３３】
なお、上述の説明では、３ビットのカウント値を用いて説明を行ったが、ｎビットの任意のカウント値を用いれば良い。
【０１３４】
本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
【符号の説明】
【０１３５】
１０  インサーキットエミュレータ
１１０  第１プロセッサ
１１１  第１ＣＰＵコア
１２０  第２プロセッサ
１２１  第２ＣＰＵコア
１３０  タイムスタンプ取得回路
１３１  タイミング情報生成回路
１３２  トレースメッセージ生成回路
１３３  ＯＶＦフラグ
１３４  タイミング情報
１３５  タイムスタンプカウンタ
１３６  トレースメッセージバッファ
１４０  オーバーフローカウンタ制御回路
１４１  ＯＶＦカウンタ
１４２  ＯＶＦカウント値生成回路
１４３  ＯＶＦカウント値バッファ
１４４  トレースメモリ書き込み制御回路
１４５  レジスタ
１５０  トレースメモリ
１６０  ホストＩＦ
１７１、１７５，１８０  ＯＲ回路
１７２  ＡＮＤ回路
１７３、１７７、１７９、１８２、１８３、１８４  Ｄ型フリップフロップ
１７４、１７８  ＮＯＴ回路
１７６、１８１  Ｄラッチ
２０  ホストコンピュータ
２１０  デバッグプログラム
【図１】
2013109621.tif 000003
【図２】
2013109621.tif 000004
【図３】
2013109621.tif 000005
【図４】
2013109621.tif 000006
【図５】
2013109621.tif 000007
【図６】
2013109621.tif 000008
【図７】
2013109621.tif 000009
【図８】
2013109621.tif 000010
【図９】
2013109621.tif 000011
【図１０】
2013109621.tif 000012
【図１１】
2013109621.tif 000013
【図１２】
2013109621.tif 000014
【図１３】
2013109621.tif 000015
【図１４】
2013109621.tif 000016
【図１５】
2013109621.tif 000017
【図１６】
2013109621.tif 000018
【図１７】
2013109621.tif 000019
【図１８】
2013109621.tif 000020
【図１９】
2013109621.tif 000021