(57)【要約】【課題】トレースクロックの片方のエッジでカウントアップするカウンタにより高分解能のタイムスタンプを生成する。【解決手段】分離部２０２はステータス情報ＳＴを立上りエッジ同期ステータス情報Ｓ１と立下りエッジ同期ステータス情報Ｓ２に分離して出力する。メッセージ開始検出部２０４は、該出力がメッセージ開始ステータス情報であるか、メッセージ開始ステータス情報である場合には立上りエッジと立下りエッジのいずれに同期して入力されたかを検出する。カウンタ２１０はトレースクロックの片方のエッジに同期してカウントアップをするものであり、最初のメッセージ開始ステータス情報が検出されたときにカウントアップを開始する。タイムスタンプ生成部２１２は、メッセージ開始ステータス情報が検出される度に、カウンタ２１０のカウント値の最下位に１ビットを拡張してタイムスタンプを生成する。【選択図】図２
2011209828.tif 000002
【特許請求の範囲】
【請求項１】
トレースクロックの立上りエッジと立下りエッジの両エッジに同期して入力された、デバッグ対象のプログラムの実行履歴を示すトレースメッセージを構成する複数の有効データ及び無効データであるトレースデータと同じタイミングで転送される、前記トレースデータのステータスを示すステータス情報を、立上りエッジに同期して入力された立上りエッジ同期ステータス情報と、立下りエッジに同期して入力された立下りエッジ同期ステータス情報とに分離して出力する分離部と、
前記分離部の出力に対して、トレースメッセージの有効データのうちの最初のデータである有効開始データを示すメッセージ開始ステータス情報であるか否かと、メッセージ開始ステータス情報である場合には立上りエッジと立下りエッジのいずれに同期して入力されたかとを検出するメッセージ開始検出部と、
前記トレースクロックの立上りエッジと立下りエッジのうちの片方であるカウントエッジに同期してカウントアップをするカウンタであって、前記メッセージ開始エッジ検出部により最初のメッセージ開始ステータス情報が検出されたときにカウントアップを開始する前記カウンタと、
前記メッセージ開始エッジ検出部の検出結果に基づいて、メッセージ開始ステータス情報が検出される度に、前記カウンタのカウント値の最下位に１ビットを拡張してタイムスタンプを生成するタイムスタンプ生成部とを備えることを特徴とするトレースデータ制御回路。
【請求項２】
前記タイムスタンプ回路生成部は、
前記メッセージ開始エッジ検出部により最初のメッセージ開始ステータス情報が検出されたときに、前記カウント値の最下位に「０」を拡張したタイムスタンプを生成すると共に、該最初のメッセージ開始ステータス情報が立上りエッジと立下りエッジのいずれに同期して入力されたかを示す最初エッジ情報を保持し、
その後、前記メッセージ開始エッジ検出部によりメッセージ開始ステータス情報が検出される度に、
前記最初エッジ情報により示されるエッジと前記カウンタのカウントエッジとが同一である場合には、前記最初エッジ情報により示されるエッジと同様のエッジに同期して入力されたメッセージ開始ステータス情報について前記カウント値の最下位に「０」を拡張したタイムスタンプを生成し、前記最初エッジ情報により示されるエッジと異なるエッジに同期して入力されたメッセージ開始ステータス情報について前記カウント値の最下位に「１」を拡張したタイムスタンプを生成し、
前記最初エッジ情報により示されるエッジと前記カウンタのカウントエッジとが異なる場合には、前記最初エッジ情報により示されるエッジと同様のエッジに同期して入力されたメッセージ開始ステータス情報について前記カウント値の最下位に「０」を拡張した値から「１」を減算してタイムスタンプを生成し、前記最初エッジ情報により示されるエッジと異なるエッジに同期して入力されたメッセージ開始ステータス情報について前記カウント値の最下位に「１」を拡張した値から「１」を減算してタイムスタンプを生成することを特徴とする請求項１に記載のトレースデータ制御回路。
【請求項３】
請求項１または２に記載のトレースデータ制御回路を備えたことを特徴とするデバッグ装置。
【請求項４】
ＩＣＥ方式のエミュレータであることを特徴とする請求項３に記載のデバッグ装置。
【請求項５】
ＯＣＤ方式のエミュレータであることを特徴とする請求項３に記載のデバッグ装置。
【請求項６】
トレースクロックの立上りエッジと立下りエッジの両エッジに同期して入力された、デバッグ対象のプログラムの実行履歴を示すトレースメッセージを構成する複数の有効データ及び無効データであるトレースデータと同じタイミングで転送される、前記トレースデータのステータスを示すステータス情報を、前記立上りエッジに同期して入力された立上りエッジ同期ステータス情報と、前記立下りエッジに同期して入力された立下りエッジ同期ステータス情報とに分離して出力し、
前記出力に対して、トレースメッセージの有効データのうちの最初のデータである有効開始データを示すメッセージ開始ステータス情報であるか否かと、メッセージ開始ステータス情報である場合には立上りエッジと立下りエッジのいずれに同期して入力されたかとを検出するメッセージ開始検出処理をし、
最初のメッセージ開始ステータス情報が検出されたときに、前記トレースクロックの立上りエッジと立下りエッジのうちの片方であるカウントエッジに同期してカウントアップをするカウンタにカウントアップを開始させ、
前記メッセージ開始エッジ検出処理の検出結果に基づいて、メッセージ開始ステータス情報が検出される度に、前記カウンタのカウント値の最下位に１ビットを拡張してタイムスタンプを生成することを特徴とするタイムスタンプ生成方法。
【請求項７】
前記タイムスタンプの生成に際して、
前記メッセージ開始エッジ検出処理により最初のメッセージ開始ステータス情報が検出されたときに、前記カウント値の最下位に「０」を拡張したタイムスタンプを生成すると共に、該最初のメッセージ開始ステータス情報が立上りエッジと立下りエッジのいずれに同期して入力されたかを示す最初エッジ情報を保持し、
その後、前記メッセージ開始エッジ検出処理によりメッセージ開始ステータス情報が検出される度に、
前記最初エッジ情報により示されるエッジと前記カウンタのカウントエッジとが同一である場合には、前記最初エッジ情報により示されるエッジと同様のエッジに同期して入力されたメッセージ開始ステータス情報について前記カウント値の最下位に「０」を拡張したタイムスタンプを生成し、前記最初エッジ情報により示されるエッジと異なるエッジに同期して入力されたメッセージ開始ステータス情報について前記カウント値の最下位に「１」を拡張したタイムスタンプを生成し、
前記最初エッジ情報により示されるエッジと前記カウンタのカウントエッジとが異なる場合には、前記最初エッジ情報により示されるエッジと同様のエッジに同期して入力されたメッセージ開始ステータス情報について前記カウント値の最下位に「０」を拡張した値から「１」を減算してタイムスタンプを生成し、前記最初エッジ情報により示されるエッジと異なるエッジに同期して入力されたメッセージ開始ステータス情報について前記カウント値の最下位に「１」を拡張した値から「１」を減算してタイムスタンプを生成することを特徴とする請求項６に記載のタイムスタンプ生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デバッグに関し、特にエミュレータを用いてデバッグする際のトレースメッセージに対するタイムスタンプの生成技術に関する。
【背景技術】
【０００２】
マイクロプロセッサなどのターゲット・デバイス上で実行するユーザプログラムの開発時に、ユーザプログラムのデバッグが行われる。このデバッグは、デバッグ対象のユーザプログラムを実行しているターゲット・デバイスがターゲット・システム上でプログラム開発者が意図した通りに動作するか否かの検証、および意図した通りに動作しない場合にはその原因を突き止める作業である。デバッグに際してよく使用されるエミュレータとしては、インサーキット・エミュレータ（以下ＩＣＥという）とオンチップ・デバッグ・エミュレータ（以下ＯＣＤという）が知られている。
【０００３】
ＯＣＤの場合は、ターゲット・デバイス自身にブレーク機能やトレース機能などを備えたデバッグ資源が内蔵されており、デバッグ時に、ターゲット・システムにターゲット・デバイスを実装して、ターゲット・デバイスのデバッグ資源を利用してターゲット・デバイス上で実行するユーザプログラムの動作検証を行う。
【０００４】
ＩＣＥの場合、ＩＣＥを接続するためのソケットを有するターゲット・システムを使用し、デバッグ時にターゲット・デバイスの代わりにＩＣＥをターゲット・システムに接続し、ＩＣＥに含まれる、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）機能をエミュレーションするＣＰＵエバリュエーションチップ（ＣＰＵエバチップ）や周辺機能をエミュレーションする周辺エバチップなどで、ホスト装置例えばパーソナルコンピュータ上のデバッガからの命令に基づいて、ターゲット・デバイス上で実行されるユーザプログラムをＩＣＥで実行することにより、ターゲット・デバイスの動作をエミュレーションして、ユーザプログラムを検証する。
【０００５】
図９を例に、エミュレータを用いたデバッグの流れを説明する。
【０００６】
図９は、特許文献１の図１であり、ＯＣＤによるプログラム検査装置を示す。このプログラム検査装置は、デバッグ制御端末２１と、エミュレータ２２と、ターゲット・システム２３とから構成されている。エミュレータ２２は、シリアルバス等のホスト・インターフェイス２４を介してデバッグ制御端末２１と接続されているとともに、エミュレーション・ケーブル２５を介して、ターゲット・システム２３のプリント基板上に取り付けられたソケット（図示略）に挿入されたＣＰＵチップ３４と接続されている。
【０００７】
デバッグ制御端末２１は、マンマシン・インターフェイスのためのキーボードやディスプレイを備え、デバッガ等のトレース結果表示プログラムが実行されることなどにより、検証対象のユーザプログラム（ターゲット・プログラム）をデバッグするための各種の機能を有している。
【０００８】
エミュレータ２２は、ＪＴＡＧ（Ｊｏｉｎｔ  Ｔｅｓｔ  Ａｃｔｉｏｎ  Ｇｒｏｕｐ）コントローラ３１と、トレースデータ制御回路３２と、トレースメモリ３３とを有する。ここで、ＪＴＡＧとは、複数個の半導体デバイスが搭載されたプリント基板のテストや各種半導体デバイスの内部テスト、あるいはＣＰＵのプログラム・デバッグ等のために、半導体デバイス側で遵守すべき国際標準規格（ＩＥＥＥ  １１４９．１）の通称である。ＪＴＡＧコントローラ３１は、ターゲット・システム２３でターゲット・プログラムの実行を開始させたり、強制ブレークやブレークポイントでの一時停止をさせたり、トレースを開始させたりすることによりターゲット・プログラムをデバッグする実行制御を行う。このため、ＣＰＵチップ３４及びエミュレータ２２には、エミュレーション・ケーブル２５に含まれる５本の信号線で互いに接続されるＪＴＡＧインターフェイス回路が設けられている。
【０００９】
トレースデータ制御回路３２は、ターゲット・システム２３から順次供給されるトレースデータに、トレース開始からの経過時間を示すタイムスタンプを付加してトレースメモリ３３に記憶させる。このため、ＣＰＵチップ３４及びエミュレータ２２には、上述したＪＴＡＧインターフェイス回路の他、エミュレーション・ケーブル２５に含まれる６本の信号線で互いに接続されるトレースインターフェース回路が設けられている。トレースデータについては後述する。
【００１０】
トレースメモリ３３は、ＲＡＭ等の半導体メモリ、フロッピー（登録商標）・ディスク）やハード・ディスク等の記憶媒体からなり、データの書き込み速度は、トレースデータ制御回路３２の処理速度よりも低速である。
【００１１】
ＣＰＵチップ３４は、実チップと内部構造や端子数が同一のＣＰＵチップに、上述した実行制御やトレース機能に最低限必要なデバッグ制御ユニットやメモリ、端子を設けたものである。ＲＯＭ３５には、ＣＰＵチップ３４が実行すべきターゲット・プログラムが記憶されている。ＲＡＭ３６には、ＣＰＵチップ３４がターゲット・プログラム実行時に用いられるデータが記憶される。
【００１２】
デバッグ時に、ＣＰＵチップ３４は、デバッグ制御端末２１の制御に従ってターゲット・プログラムを実行する。また、実行の履歴を示すトレースメッセージを生成すると共に、該トレースメッセージを、ＣＰＵエバチップが備えるトレースメッセージ転送のために割り当てられた端子の数と同じビット長のトレースデータに分割してトレースクロックに同期してエミュレータ２２に出力する。
【００１３】
夫々のトレースデータについて、該トレースデータが有効なデータであるか否か、有効なデータである場合にはトレースメッセージにおける位置などを示す情報（以下ステータス情報という）もエミュレータ２２に出力される。
【００１４】
検証者は、トレース結果を表示するプログラムなどのデバッガをデバッグ制御端末２１に実行させ、トレースメモリ３３からトレースデータやタイムスタンプを読み出して解析することによりターゲット・プログラムの検証を行う。
【００１５】
図９はＯＣＤによるプログラム検査装置であるが、ＣＰＵチップ３４をエバチップに読み替えれば、ＩＣＥの場合にも上述した流れでデバッグが行われる。
【先行技術文献】
【特許文献】
【００１６】
【特許文献１】特開２００３−１７７９４１号公報
【発明の概要】
【発明が解決しようとする課題】
【００１７】
通常、トレースデータはトレースクロックの立上りエッジに同期してエミュレータに出力される。エミュレータは、トレースクロックの立上りエッジに同期してトレースデータを取り込む共に、トレースクロックの立上りエッジでカウントアップするカウンタのカウント値をタイムスタンプの値として生成する。後にトレースデータからトレースメッセージを復元する際に、上記タイムスタンプ値に基づいて各トレースメッセージのトレース開始からの経過時間を求めることができる。
【００１８】
対して、近年、マイクロコンピュータの高速化やプログラムサイズの増大により、デバッグを担うエミュレータの動作の高速化やトレースメモリの大容量化なども進んでいる。このような背景において、トレースデータの取りこぼしを回避し、トレースデータの転送量を増やすために、トレースクロックの両エッジに同期してトレースデータとステータス情報を転送することが一般的に行われるようになっている。
【００１９】
トレースクロックの立上りエッジでカウントアップするカウンタのカウント値をタイムスタンプとして生成する従来の手法は、トレースクロックの１周期につき１つのタイムスタンプしか生成できない。一方、トレースクロックの両エッジに同期してトレースデータが転送される場合には、トレースクロックの１周期につき２つのトレースデータが転送される。この場合、従来の手法では、トレースデータ毎のタイムスタンプの生成ができないため、トレースメッセージの正確な経過時間を求めることができず、デバッグに支障を来してしまう。
【課題を解決するための手段】
【００２０】
本発明の一つの態様は、タイムスタンプ生成方法である。
この方法は、トレースクロックの立上りエッジと立下りエッジの両エッジに同期して入力された、デバッグ対象のプログラムの実行履歴を示すトレースメッセージを構成する複数の有効データ及び無効データであるトレースデータと同じタイミングで転送される、前記トレースデータのステータスを示すステータス情報を、立上りエッジに同期して入力された立上りエッジ同期ステータス情報と、立下りエッジに同期して入力された立下りエッジ同期ステータス情報とに分離して出力する。
【００２１】
上記出力に対して、トレースメッセージの有効データのうちの最初のデータである有効開始データを示すメッセージ開始ステータス情報であるか否かと、メッセージ開始ステータス情報である場合には立上りエッジと立下りエッジのいずれに同期して入力されたかとを検出するメッセージ開始検出処理を行う。
【００２２】
最初のメッセージ開始ステータス情報が検出されたときに、トレースクロックの立上りエッジと立下りエッジのうちの片方であるカウントエッジに同期してカウントアップをするカウンタにカウントアップを開始させる。
【００２３】
また、メッセージ開始エッジ検出処理の検出結果に基づいて、メッセージ開始ステータス情報が検出される度に、カウンタのカウント値の最下位に１ビットを拡張してタイムスタンプを生成する。
【００２４】
なお、上記態様のタイムスタンプ生成方法を回路、装置、システムなどに置き換えて表現したものや、該タイムスタンプ生成方法を実現するトレースデータ制御回路、該トレースデータ制御回路を備えたデバッグ装置なども、本発明の態様としては有効である。
【発明の効果】
【００２５】
本発明にかかる技術によれば、トレースクロックの片方のエッジでカウントアップするカウンタにより高分解能のタイムスタンプを生成することができる。
【図面の簡単な説明】
【００２６】
【図１】本発明の実施の形態にかかるデバッグ・システムを示す図である。
【図２】図１に示すデバッグ・システムにおけるトレースデータ制御回路を示す図である。
【図３】図２に示すトレースデータ制御回路によるタイムスタンプの生成に関する処理を示すフローチャートである（その１）。
【図４】図２に示すトレースデータ制御回路によるタイムスタンプの生成に関する処理を示すフローチャートである（その２）。
【図５】図２に示すトレースデータ制御回路によるタイムスタンプの生成の具体例を示すタイミングチャートである（その１）。
【図６】図２に示すトレースデータ制御回路によるタイムスタンプの生成の具体例を示すタイミングチャートである（その２）。
【図７】図２に示すトレースデータ制御回路によるタイムスタンプの生成の具体例を示すタイミングチャートである（その３）。
【図８】図２に示すトレースデータ制御回路によるタイムスタンプの生成の具体例を示すタイミングチャートである（その４）。
【図９】特許文献１における図１である。
【発明を実施するための形態】
【００２７】
以下、図面を参照して本発明の実施の形態について説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。
【００２８】
図１は、本発明の実施の形態にかかるデバッグ・システム１００を示す。デバッグ・システム１００は、ＩＣＥ方式のデバッグ・システムであり、ターゲット・システム１１０と、エミュレータ１３０と、ホストコンピュータ１４０を備える。
【００２９】
ターゲット・システム１１０は、ソケット１１６を備える。エバチップ１２０は、マイクロコンピュータのＣＰＵと周辺ユニットの機能をエミュレーションするものであり、デバッグの対象となるターゲット・プログラムの実行履歴を示すトレースメッセージの生成や出力などを担う機能を備える。エバチップ１２０は、一端がエミュレータ１３０に接続されたエミュレーション・ケーブル１１９の先端に結合されたプラグ１１８上に設けられている。そして、このプラグ１１８は、ターゲット・システム１１０のソケット１１６に挿入される。
【００３０】
エバチップ１２０は、通常のエバチップと同様に、トレースメッセージをトレースデータに分割してトレースクロックに同期して出力する。また、トレースデータのステータス情報もトレースクロックに同期して出力する。ステータス情報は、該トレースデータが有効か否かを示す情報と、有効な場合の位置情報を含む。位置情報は、該トレースデータがトレースメッセージの先頭、中間、末尾のいずれに位置するかを示すものである。
【００３１】
本実施の形態において、エバチップ１２０は、トレースクロックの立上りエッジと立ち下がりエッジの両エッジに同期してトレースデータを出力する。ステータス情報についても同様である。すなわち、トレースクロックの１周期毎に２つのトレースデータ及びそれらのステータス情報が出力される。
【００３２】
なお、例として、本実施の形態において、エバチップ１２０とエミュレータ１３０は、ＩＥＥＥ−ＩＳＴＯ  ５００１規格に準拠するものであるとする。そのため、ステータス情報は、下記の４つがある。
【００３３】
（１）ＩＤＬＥ
このステータス情報は、無効データを示す。
（２）ＳＭ（Ｓｔａｒｔ  Ｍｅｓｓａｇｅ）
このステータス情報は、トレースメッセージの有効データのうちの最初のデータ（以下有効開始データという）を示し、以下メッセージ開始ステータス情報ともいう。
（３）ＥＰ（Ｅｎｄ  Ｐａｃｋｅｔ）
このステータス情報は、トレースメッセージ中の可変長パケットの末尾のデータ（有効データ）を示す。
（４）ＥＭ（Ｅｎｄ  Ｍｅｓｓａｇｅ）
このステータス情報は、トレースメッセージの有効データのうちの末尾のデータ（以下有効末尾データという）を示し、以下メッセージ末尾ステータス情報ともいう。
【００３４】
エミュレータ１３０は、トレースデータ制御回路２００、コントローラ１３２、トレースメモリ１３４、ホスト・インターフェイス（以下ホストＩ／Ｆという）１３６を備える。
【００３５】
エバチップ１２０が出力されたトレースメッセージなどは、エミュレータ１３０のトレースデータ制御回路２００に入力される。トレースデータ制御回路２００は、トレースメモリ１３４に保存するデータ（以下トレースメモリデータという）ＴＭＤを生成してコントローラ１３２に出力する。トレースデータ制御回路２００の詳細については後述する。
【００３６】
ホストコンピュータ１４０と、エミュレータ１３０におけるコントローラ１３２、トレースメモリ１３４、ホストＩ／Ｆ１３６は、通常のデバッグ・システムにおける相対応する構成と同様の機能を担うので、これらについては簡単に説明する。
【００３７】
コントローラ１３２は、ライトコントロール信号ＷＣと共に、トレースデータ制御回路２００からのトレースメモリデータＴＭＤとをトレースメモリ１３４に出力し、トレースメモリデータＴＭＤをトレースメモリ１３４に書き込む。
【００３８】
トレースメモリ１３４は、ライトコントロール信号ＷＣに応じて、トレースメモリデータＴＭＤを記憶する。また、ホストＩ／Ｆ１３６からのリードコントロール信号ＲＣに応じて、該当するデータ（以下リードデータＲＤという）をホストＩ／Ｆ１３６に出力する。
【００３９】
ホストＩ／Ｆ１３６は、ホストコンピュータ１４０とのインターフェイス回路であり、ホストコンピュータ１４０からのデータ要求信号ＤＲに応じてリードコントロール信号ＲＣをホストＩ／Ｆ１３６に出力すると共に、トレースメモリ１３４がリードコントロール信号ＲＣに応じて出力したリードデータＲＤをホストコンピュータ１４０に出力する。
【００４０】
ホストコンピュータ１４０は、図示しないデバッガが実装されており、ホストＩ／Ｆ１３６にデータ要求信号ＤＲを出すことによりトレースメモリ１３４に記憶されたトレースメモリデータＴＭＤを読み出して表示することができる。
【００４１】
トレースデータ制御回路２００について説明する。
図２は、トレースデータ制御回路２００を示す。トレースデータ制御回路２００は、分離部２０２、メッセージ開始検出部２０４、メッセージ形成部２０６、カウンタコントローラ２０８、カウンタ２１０、タイムスタンプ生成部２１２、データ生成部２１４を有する。
【００４２】
分離部２０２には、エバチップ１２０から、トレースクロックＣＬＫに同期してトレースデータＴＤとステータス情報ＳＴが入力される。トレースデータＴＤとステータス情報ＳＴの入力は、トレースクロックＣＬＫの立下りエッジと立下りエッジの両エッジに同期してなされる。
【００４３】
分離部２０２は、エバチップ１２０から入力されたトレースデータＴＤをトレースクロックＣＬＫの立上りエッジに同期するデータ（以下「立上りエッジ同期データ」という）Ｄ１と、立下りエッジに同期するデータ（以下「立下りエッジ同期データ」という）Ｄ２に分離すると共に、ステータス情報ＳＴもトレースクロックＣＬＫの立上りエッジに同期するステータス情報（立上りエッジ同期ステータス情報」という）Ｓ１と、立下りエッジに同期するステータス情報（以下「立下りエッジ同期ステータス情報」という）Ｓ２に分離する。立上りエッジ同期ステータス情報Ｓ１と立下りエッジ同期ステータス情報Ｓ２はメッセージ開始検出部２０４に出力され、立上りエッジ同期ステータス情報Ｓ１、立下りエッジ同期ステータス情報Ｓ２、立上りエッジ同期データＤ１、立下りエッジ同期データＤ２は、メッセージ形成部２０６に出力される。
【００４４】
メッセージ形成部２０６からの立上りエッジ同期ステータス情報Ｓ１、立下りエッジ同期ステータス情報Ｓ２、立上りエッジ同期データＤ１、立下りエッジ同期データＤ２の出力タイミングはトレースクロックＣＬＫの立ち上がりエッジまたは立ち下がりエッジのいずれかのタイミングであり、カウンタ２１０のカウントアップと同じタイミングとする。
【００４５】
また、トレースデータ制御回路２００内のメッセージ開始検出部２０４からの開始エッジ情報ＳＳの出力タイミング、メッセージ形成部２０６からのトレースメッセージＴＲＳ、メッセージ出力ステータスＭＳＳの出力タイミング、カウンタコントローラ２０８からのカウントイネーブル信号ＴＣＥの出力タイミング、カウンタ２１０からのカウント値ＴＣの出力タイミング、タイムスタンプ生成部２１２からのタイムスタンプＴＳの出力タイミング、データ生成部２１４からのトレースメモリデータＴＭＤの出力タイミングも、トレースクロックＣＬＫの立ち上がりエッジまたは立ち下がりエッジのいずれかのタイミングであり、カウンタ２１０のカウントアップと同じタイミングとする。
【００４６】
メッセージ開始検出部２０４は、入力された立上りエッジ同期ステータス情報Ｓ１と立下りエッジ同期ステータス情報Ｓ２に対してメッセージ開始検出処理を行う。具体的には、該ステータス情報がトレースメッセージの有効データのうちの最初のデータ（すなわち「有効開始データ」）を示すメッセージ開始ステータス情報ＳＭであるか否かと、メッセージ開始ステータス情報ＳＭである場合には立上りエッジと立下りエッジのいずれに同期して入力されたものであるかを検出する。メッセージ開始検出部２０４は、検出結果を示す開始エッジ情報ＳＳをカウンタコントローラ２０８とタイムスタンプ生成部２１２に出力する。
【００４７】
メッセージ形成部２０６は、分離部２０２からの立上りエッジ同期データＤ１、立下りエッジ同期データＤ２、立上りエッジ同期ステータス情報Ｓ１、立下りエッジ同期ステータス情報Ｓ２に基づいてトレースメッセージの復元とメッセージ出力ステータスの生成を行い、各トレースメッセージＴＲＳとメッセージ出力ステータスＭＳＳをデータ生成部２１４に出力する。トレースメッセージＴＲＳは、該メッセージの有効開始データ（すなわちメッセージ開始ステータス情報ＳＭに対応するデータ）から、有効末尾データ（すなわちメッセージ末尾ステータス情報ＥＭに対応するデータ）までのトレースデータであり、メッセージ出力ステータスＭＳＳは、各トレースメッセージＴＲＳの出力中にハイレベルになり、トレースメッセージＴＲＳを出力中であることを示す情報である。
【００４８】
カウンタコントローラ２０８は、メッセージ開始検出部２０４からの開始エッジ情報ＳＳに応じて、カウントアップの開始を指示するカウントイネーブル信号ＴＣＥをカウンタ２１０に出力する。具体的には、最初のメッセージ開始ステータス情報ＳＭが検出されたことを示す開始エッジ情報ＳＳを受信した際に、カウントイネーブル信号ＴＣＥを出力する。
【００４９】
カウンタ２１０は、エバチップ１２０からのトレースクロックＣＬＫと、カウンタコントローラ２０８からのカウントイネーブル信号ＴＣＥが入力される。カウンタ２１０は、トレースクロックＣＬＫの立下りエッジまたは立下りのエッジのうちの片方であるカウントエッジに同期してカウントアップするものであり、カウントイネーブル信号ＴＣＥを受信するとカウントアップを開始し、カウント値ＴＣをタイムスタンプ生成部２１２に出力する。
【００５０】
タイムスタンプ生成部２１２は、メッセージ開始検出部２０４からの開始エッジ情報ＳＳと、カウンタ２１０からのカウント値ＴＣが入力され、タイムスタンプＴＳを生成してデータ生成部２１４に出力する。なお、本実施の形態において、タイムスタンプ生成部２１２は、トレースメッセージ毎にタイムスタンプＴＳを生成する。タイムスタンプ生成部２１２によるタイムスタンプＴＳの生成動作については後述する。
【００５１】
データ生成部２１４は、メッセージ形成部２０６からのトレースメッセージＴＲＳとメッセージ出力ステータスＭＳＳ、およびタイムスタンプ生成部２１２からのタイムスタンプＴＳに基づいて、トレースメッセージＴＲＳにタイムスタンプＴＳを追加して、トレースメモリデータＴＭＤを生成してコントローラ１３２に出力する。
【００５２】
図３は、トレースデータ制御回路２００による処理のうちの、タイムスタンプの生成に関する処理の流れを示すフローチャートである。ここでは、カウンタ２１０のカウントアップクロックは、トレースクロックＣＬＫの立上がりエッジとする。
【００５３】
まず、分離部２０２は、トレースクロックＣＬＫの立上りエッジと立下りエッジに同期して入力されたステータス情報ＳＴを立上りエッジ同期ステータス情報Ｓ１と立下りエッジ同期ステータス情報Ｓ２に分離すると共に、同一のクロックに対応する立上りエッジ同期ステータス情報Ｓ１と立下りエッジ同期ステータス情報Ｓ２を同時にメッセージ開始検出部２０４に出力する（Ｓ１００、Ｓ１０２）。
【００５４】
ステップＳ１０４〜ステップＳ１１４は、メッセージ開始検出部２０４の処理である。メッセージ開始検出部２０４は、分離部２０２からの立上りエッジ同期ステータス情報Ｓ１と立下りエッジ同期ステータス情報Ｓ２に対して、該ステータス情報が、トレースメッセージの有効データのうちの最初のデータである有効開始データを示すメッセージ開始ステータス情報ＳＭであるか否かと、メッセージ開始ステータス情報ＳＭである場合には立上りエッジと立下りエッジのいずれに同期して入力されたかとを検出すると共に、検出結果を示す開始エッジ情報ＳＳをカウンタコントローラ２０８とタイムスタンプ生成部２１２に出力する。
【００５５】
具体的には、メッセージ開始検出部２０４は、分離部２０２からの立上りエッジ同期ステータス情報Ｓ１または立下りエッジ同期ステータス情報Ｓ２がメッセージ開始ステータス情報ＳＭではない場合に、開始エッジ情報ＳＳとして「００ｈ」を出力する（Ｓ１０４：Ｎｏ、Ｓ１０６）。
【００５６】
一方、立上りエッジ同期ステータス情報Ｓ１がメッセージ開始ステータス情報ＳＭであれば、メッセージ開始検出部２０４は、開始エッジ情報ＳＳとして「０１ｈ」を出力し（Ｓ１０４：Ｙｅｓ、Ｓ１１０：Ｙｅｓ、Ｓ１１２）、立下りエッジ同期ステータス情報Ｓ２がメッセージ開始ステータス情報ＳＭであれば、開始エッジ情報ＳＳとして「１０ｈ」を出力する（Ｓ１０４：Ｙｅｓ、Ｓ１１０：Ｎｏ、Ｓ１１４）。
【００５７】
すなわち、「００ｈ」である開始エッジ情報ＳＳは、メッセージ開始ステータス情報ＳＭ以外のステータス情報（及びトレースデータ）が入力されたことを示し、「０１ｈ」である開始エッジ情報ＳＳは、メッセージ開始ステータス情報ＳＭであるステータス情報がトレースクロックＣＬＫの立上りエッジに同期して入力されたことを示し、「１０ｈ」である開始エッジ情報ＳＳは、メッセージ開始ステータス情報ＳＭであるステータス情報がトレースクロックＣＬＫの立下りエッジに同期して入力されたことを示す。
【００５８】
カウンタコントローラ２０８は、メッセージ開始検出部２０４から最初の「０１ｈ」または「１０ｈ」を受信するとカウントイネーブル信号ＴＣＥを出力してカウンタ２１０にカウントアップを開始させる（Ｓ１２０：Ｎｏ、Ｓ１２２：Ｙｅｓ、Ｓ１２４）。カウンタ２１０は、カウントイネーブル信号ＴＣＥを受信すると、その後のカウントエッジ（トレースクロックＣＬＫの立上りエッジと下がりエッジのいずれか一方）に同期してカウントアップする。
【００５９】
タイムスタンプ生成部２１２は、メッセージ開始検出部２０４によりメッセージ開始ステータス情報ＳＭが検出される度に、すなわちメッセージ開始検出部２０４から「０１ｈ」または「１０ｈ」を受信する度にタイムスタンプＴＳを生成する（Ｓ１２０：Ｎｏ、Ｓ１２２：Ｙｅｓ、Ｓ２００、またはＳ１２０：Ｎｏ、Ｓ１２２：Ｎｏ、Ｓ２００）。
【００６０】
ステップＳ２００の処理は、タイムスタンプ生成部２１２により行われる。タイムスタンプ生成部２１２は、開始エッジ情報ＳＳに基づいて、カウンタ２１０のカウント値ＴＣの最下位に１ビットを拡張してタイムスタンプＴＳを生成する。
【００６１】
具体的には、タイムスタンプ生成部２１２は、開始エッジ情報ＳＳが最初の「０１ｈ」または「１０ｈ」である場合（すなわち、最初のメッセージ開始ステータス情報ＳＭが検出された場合）、該最初のメッセージ開始ステータス情報ＳＭが立上りエッジと立下りエッジのいずれに同期して入力されたかを示す最初エッジ情報を保持すると共に、式（１）に従って、カウント値ＴＣの最下位に「０」を拡張したタイムスタンプＴＳを生成する。
【００６２】
ＴＳ＝｛ＴＣ、０｝          （１）
但し，ＴＳ：タイムスタンプ
ＴＣ：カウント値
【００６３】
なお、最初エッジ情報は、最初のメッセージ開始ステータス情報ＳＭが立上りエッジと立下りエッジのいずれに同期して入力されたかを示しうる情報であればよい。本実施の形態においては、このときの開始エッジ情報ＳＳ（「０１ｈ」または「１０ｈ」）が最初エッジ情報として用いられ、「０１ｈ」は、最初のメッセージ開始ステータス情報ＳＭが立上りエッジに同期して入力されたことを示し、「１０ｈ」は、最初のメッセージ開始ステータス情報ＳＭが立下りエッジに同期して入力されたことを示す。
【００６４】
最初のメッセージ開始ステータス情報ＳＭ以降にメッセージ開始ステータス情報ＳＭが検出されたときに、タイムスタンプ生成部２１２は、下記のようにタイムスタンプＴＳを生成する。
【００６５】
（１）最初エッジ情報＝０１ｈ、開始エッジ情報ＳＳ＝０１ｈである場合
この場合、タイムスタンプ生成部２１２は、上記の式（１）に従ってタイムスタンプＴＳを生成する。
【００６６】
（２）最初エッジ情報＝０１ｈ、開始エッジ情報ＳＳ＝１０ｈである場合
この場合、タイムスタンプ生成部２１２は、式（２）に従って、カウント値ＴＣの最下位に「１」を拡張したタイムスタンプＴＳを生成する。
【００６７】
ＴＳ＝｛ＴＣ、１｝          （２）
但し，ＴＳ：タイムスタンプ
ＴＣ：カウント値
【００６８】
（３）最初エッジ情報＝１０ｈ、開始エッジ情報ＳＳ＝０１ｈである場合
この場合、タイムスタンプ生成部２１２は、式（３）に従ってカウント値ＴＣの最下位に「０」を拡張した値から「１」を減算してタイムスタンプＴＳを生成する。
【００６９】
ＴＳ＝｛ＴＣ、０｝−１          （３）
但し，ＴＳ：タイムスタンプ
ＴＣ：カウント値
【００７０】
（４）最初エッジ情報＝１０ｈ、開始エッジ情報ＳＳ＝１０ｈである場合
この場合、タイムスタンプ生成部２１２は、式（４）に従って、カウント値ＴＣの最下位に「１」を拡張した値から「１」を減算してタイムスタンプＴＳを生成する。
【００７１】
ＴＳ＝｛ＴＣ、１｝−１          （４）
但し，ＴＳ：タイムスタンプ
ＴＣ：カウント値
【００７２】
図４を参照して、カウンタ２１０がトレースクロックＣＬＫの立上りエッジに同期してカウントアップするものである場合を例にしてタイムスタンプ生成部２１２の処理（図３におけるステップＳ２００の処理）をより具体的には説明する。この場合、カウンタ２１０のカウントエッジは立上りエッジである。
【００７３】
タイムスタンプ生成部２１２は、メッセージ開始検出部２０４からの開始エッジ情報ＳＳが「００ｈ」である場合にはタイムスタンプＴＳの生成をせず、開始エッジ情報ＳＳが「０１ｈ」または「１０ｈ」である場合にタイムスタンプＴＳを生成する。
【００７４】
「０１ｈ」または「１０ｈ」である開始エッジ情報ＳＳを受信すると、タイムスタンプ生成部２１２は、まず、この「０１ｈ」または「１０ｈ」が最初の「０１ｈ」または「１０ｈ」であるか、すなわち、該開始エッジ情報ＳＳに対応するメッセージ開始ステータス情報ＳＭがエバチップ１２０から順次出力される複数のトレースメッセージのうちの先頭のトレースメッセージのメッセージ開始ステータス情報ＳＭであるかを確認する（Ｓ２０２）。
【００７５】
ステップＳ２０２が肯定されると、タイムスタンプ生成部２１２は、開始エッジ情報ＳＳ（「０１ｈ」または「１０ｈ」）を最初エッジ情報として保持すると共に、カウント値ＴＣの最下位に「０」を拡張したタイムスタンプＴＳを生成する（Ｓ２０２：Ｙｅｓ、Ｓ２０４、Ｓ２０６）。
【００７６】
一方、ステップＳ２０２が否定されると（Ｓ２０２：Ｎｏ）、タイムスタンプ生成部２１２は、最初エッジ情報によって異なる動作をする。
【００７７】
最初エッジ情報が「０１ｈ」である場合（Ｓ２１０：Ｙｅｓ）、タイムスタンプ生成部２１２は、「０１ｈ」である開始エッジ情報ＳＳを受信するとカウント値ＴＣの最下位に「０」を拡張したタイムスタンプＴＳを生成し（Ｓ２１２：Ｙｅｓ、Ｓ２１４）、「１０ｈ」である開始エッジ情報ＳＳを受信するとカウント値ＴＣの最下位に「１」を拡張したタイムスタンプＴＳを生成する（Ｓ２１２：Ｎｏ、Ｓ２１６）。
【００７８】
また、最初エッジ情報が「１０ｈ」である場合（Ｓ２１０：Ｎｏ）、タイムスタンプ生成部２１２は、「０１ｈ」である開始エッジ情報ＳＳを受信するとカウント値ＴＣの最下位に「０」を拡張した値から「１」を減算してタイムスタンプＴＳを生成し（Ｓ２２０：Ｙｅｓ、Ｓ２２２）、「１０ｈ」である開始エッジ情報ＳＳを受信するとカウント値ＴＣの最下位に「１」を拡張した値から「１」を減算してタイムスタンプＴＳを生成する（Ｓ２２０：Ｎｏ、Ｓ２２４）。
【００７９】
タイムスタンプ生成部２１２は、Ｓ２０６、Ｓ２１４、Ｓ２１６、Ｓ２２２、Ｓ２２４のステップでタイムスタンプＴＳを生成すると、それをデータ生成部２１４に出力してデータ生成部２１４によるトレースメモリデータＴＭＤの生成に供する（Ｓ２３０）。
【００８０】
以下、トレースデータ制御回路２００におけるタイムスタンプＴＳの生成までの具体例をいくつか説明する。なお、カウンタ２１０のカウントエッジがトレースクロックＣＬＫの立上りエッジであるとする。
【００８１】
図５は、最初のトレースメッセージの有効開始データとなるトレースデータＴＤとそのステータス情報ＳＴがトレースクロックＣＬＫの立上りエッジに同期して入力され、該トレースメッセージに続くトレースメッセージの有効開始データとなるトレースデータＴＤとそのステータス情報ＳＴもトレースクロックＣＬＫの立上りエッジに同期して入力された場合のタイミングチャートである。図中括弧中の数字はトレースメッセージの入力順位を示す。
【００８２】
最初のトレースメッセージは３つのトレースデータＴＤにより構成され、これらのトレースデータＴＤのステータス情報ＳＴはそれぞれＳＭ（１）、ＥＰ（１）、ＥＭ（１）である。前述したように、ＳＭ、ＥＰ、ＥＭは、それぞれ「Ｓｔａｒｔ  Ｍｅｓｓａｇｅ」、「Ｅｎｄ  Ｐａｃｋｅｔ」、「Ｅｎｄ  Ｍｅｓｓａｇｅ」である。
【００８３】
２番目のトレースメッセージも３つのトレースデータＴＤにより構成され、これらのトレースデータＴＤのステータス情報ＳＴはそれぞれＳＭ（２）、ＥＰ（２）、ＥＭ（２）である。
【００８４】
また、最初のトレースメッセージと２番目のトレースメッセージの間（すなわちＥＭ（１）とＳＭ（２）の間）に無効なトレースデータに該当するアイドルデータ（ステータス情報：ＩＤＬＥ）が１つ出力されている。
【００８５】
図示のように、ＳＭ（１）とＳＭ（２）が共にトレースクロックＣＬＫの立上りエッジに同期して入力されている。最初のトレースメッセージのタイムスタンプの期待値は、ＳＭ（１）の入力タイミングに対応する「００００」であり、２番目のトレースメッセージのタイムスタンプの期待値は、ＳＭ（２）の入力タイミングに対応する「０１００」である。
【００８６】
まず、分離部２０２は、立上りエッジ同期ステータス情報Ｓ１としてＳＭ（１）、立下りエッジ同期ステータス情報Ｓ２としてＥＰ（１）を得てメッセージ開始検出部２０４に出力する。
【００８７】
ＳＭ（１）が、立上りエッジ同期ステータス情報、かつメッセージ開始ステータス情報であるため、メッセージ開始検出部２０４は、ＳＭ（１）を受信すると「０１ｈ」である開始エッジ情報ＳＳをカウンタコントローラ２０８とタイムスタンプ生成部２１２に出力する。これは、最初の「０１ｈ」である。
【００８８】
カウンタコントローラ２０８は、最初に「０１ｈ」である開始エッジ情報ＳＳを受信すると、カウントイネーブル信号ＴＣＥをカウンタ２１０に出力する。その後、トレースの終了まで、カウントイネーブル信号ＴＣＥがアクティブのままである。
【００８９】
カウンタ２１０は、カウントイネーブル信号ＴＣＥを受信すると「０００」からカウントアップを開始する。カウンタ２１０は、トレースクロックＣＬＫの立上りエッジでカウントアップをして、カウント値ＴＣをタイムスタンプ生成部２１２に出力する。図示のように、カウンタ２１０が出力した１つ目のカウント値ＴＣが「０００」であり、その後、トレースクロックＣＬＫの立上りエッジの度に、カウント値ＴＣが「１」インクリメントされる。
【００９０】
タイムスタンプ生成部２１２は、「０１ｈ」である開始エッジ情報ＳＳを受信するとタイムスタンプＴＳを生成する。ここで、開始エッジ情報ＳＳが最初の「０１ｈ」であるため、タイムスタンプ生成部２１２は、カウント値ＴＣ（「０００」）の最下位に１ビット（０）を拡張したタイムスタンプＴＳ（「００００」）を生成する。また、タイムスタンプ生成部２１２は、最初エッジ情報として「０１ｈ」を保持する。
【００９１】
分離部２０２は、ＳＭ（１）とＥＰ（１）の次に、ＥＭ（１）と「ＩＤＬＥ」を出力する。ＥＭ（１）と「ＩＤＬＥ」のいずれもメッセージ開始ステータス情報ＳＭではないため、メッセージ開始検出部２０４は、「００ｈ」である開始エッジ情報ＳＳを出力する。
【００９２】
その後、分離部２０２は、ＳＭ（２）とＥＰ（２）を出力する。ＳＭ（２）がメッセージ開始ステータス情報、立上りエッジ同期ステータス情報であるため、メッセージ開始検出部２０４は、再び「０１ｈ」である開始エッジ情報ＳＳを出力する。
【００９３】
タイムスタンプ生成部２１２は、「０１ｈ」である開始エッジ情報ＳＳを再び受信するとタイムスタンプＴＳを生成する。保持された開始エッジ情報が立上りエッジを示す「０１ｈ」であり、現在受信した開始エッジ情報ＳＳが「０１ｈ」であるため、タイムスタンプ生成部２１２は、現在のカウント値ＴＣ（「０１０」）の最下位に１ビット（０）を拡張したタイムスタンプＴＳ（「０１００」）を生成する。
【００９４】
このように、タイムスタンプ生成部２１２により、最初のトレースメッセージと２番目のトレースメッセージに対して、それぞれの期待値と同値のタイムスタンプが生成される。
【００９５】
図６は、最初のトレースメッセージの有効開始データとなるトレースデータＴＤとそのステータス情報ＳＴがトレースクロックＣＬＫの立上りエッジに同期して入力され、該トレースメッセージに続くトレースメッセージの有効開始データとなるトレースデータＴＤとそのステータス情報ＳＴがトレースクロックＣＬＫの立下りエッジに同期して入力された場合のタイミングチャートである。各トレースメッセージの構成は図５に示す例と同様である。
【００９６】
図６の例において、最初のトレースメッセージと２番目のトレースメッセージの間（すなわちＥＭ（１）とＳＭ（２）の間）にアイドルデータ（ステータス情報：ＩＤＬＥ）が２つ出力されている。
【００９７】
図示のように、ＳＭ（１）はトレースクロックＣＬＫの立上りエッジに同期して入力されているが、ＳＭ（２）はトレースクロックＣＬＫの立下りエッジに同期して入力されている。最初のトレースメッセージのタイムスタンプの期待値は、ＳＭ（１）の入力タイミングに対応する「００００」であり、２番目のトレースメッセージのタイムスタンプの期待値は、ＳＭ（２）の入力タイミングに対応する「０１０１」である。
【００９８】
まず、分離部２０２は、立上りエッジ同期ステータス情報Ｓ１としてＳＭ（１）、立下りエッジ同期ステータス情報Ｓ２としてＥＰ（１）を得てメッセージ開始検出部２０４に出力する。
【００９９】
ＳＭ（１）が、立上りエッジ同期ステータス情報、かつメッセージ開始ステータス情報であるため、メッセージ開始検出部２０４は、ＳＭ（１）を受信すると「０１ｈ」である開始エッジ情報ＳＳをカウンタコントローラ２０８とタイムスタンプ生成部２１２に出力する。これは、最初の「０１ｈ」である。
【０１００】
カウンタコントローラ２０８は、最初に「０１ｈ」である開始エッジ情報ＳＳを受信すると、カウントイネーブル信号ＴＣＥをカウンタ２１０に出力する。その後、トレースの終了まで、カウントイネーブル信号ＴＣＥがアクティブのままである。
【０１０１】
カウンタ２１０は、カウントイネーブル信号ＴＣＥを受信すると「０００」からカウントアップを開始する。カウンタ２１０は、トレースクロックＣＬＫの立上りエッジでカウントアップをして、カウント値ＴＣをタイムスタンプ生成部２１２に出力する。図示のように、カウンタ２１０が出力した１つ目のカウント値ＴＣが「０００」であり、その後、トレースクロックＣＬＫの立上りエッジの度に、カウント値ＴＣが「１」インクリメントされる。
【０１０２】
タイムスタンプ生成部２１２は、「０１ｈ」である開始エッジ情報ＳＳを受信するとタイムスタンプＴＳを生成する。ここで、開始エッジ情報ＳＳが最初の「０１ｈ」であるため、タイムスタンプ生成部２１２は、カウント値ＴＣ（「０００」）の最下位に１ビット（０）を拡張したタイムスタンプＴＳ（「００００」）を生成する。また、タイムスタンプ生成部２１２は、最初エッジ情報として「０１ｈ」を保持する。
【０１０３】
分離部２０２は、ＳＭ（１）とＥＰ（１）の次に、ＥＭ（１）と「ＩＤＬＥ」を出力する。ＥＭ（１）と「ＩＤＬＥ」のいずれもメッセージ開始ステータス情報ＳＭではないため、メッセージ開始検出部２０４は、「００ｈ」である開始エッジ情報ＳＳを出力する。
【０１０４】
その後、分離部２０２は、「ＩＤＬＥ」と「ＳＭ（２）」を出力する。ＳＭ（２）がメッセージ開始ステータス情報、立下りエッジ同期ステータス情報であるため、メッセージ開始検出部２０４は、「１０ｈ」である開始エッジ情報ＳＳを出力する。
【０１０５】
タイムスタンプ生成部２１２は、「１０ｈ」である開始エッジ情報ＳＳを受信するとタイムスタンプＴＳを生成する。保持された開始エッジ情報が立上りエッジを示す「０１ｈ」であり、現在受信した開始エッジ情報ＳＳが「１０ｈ」であるため、タイムスタンプ生成部２１２は、現在のカウント値ＴＣ（「０１０」）の最下位に１ビット（１）を拡張したタイムスタンプＴＳ（「０１０１」）を生成する。
【０１０６】
この場合も、タイムスタンプ生成部２１２により、最初のトレースメッセージと２番目のトレースメッセージに対して、それぞれの期待値と同値のタイムスタンプが生成される。
【０１０７】
図７は、最初のトレースメッセージの有効開始データとなるトレースデータＴＤとそのステータス情報ＳＴがトレースクロックＣＬＫの立下りエッジに同期して入力され、該トレースメッセージに続くトレースメッセージの有効開始データとなるトレースデータＴＤとそのステータス情報ＳＴがトレースクロックＣＬＫの立上りエッジに同期して入力された場合のタイミングチャートである。各トレースメッセージの構成は図５に示す例と同様である。
【０１０８】
図７の例において、最初のトレースメッセージと２番目のトレースメッセージの間（すなわちＥＭ（１）とＳＭ（２）の間）にアイドルデータ（ステータス情報：ＩＤＬＥ）が出力されていない。
【０１０９】
図示のように、ＳＭ（１）はトレースクロックＣＬＫの立下りエッジに同期して入力されているが、ＳＭ（２）はトレースクロックＣＬＫの立上りエッジに同期して入力されている。最初のトレースメッセージのタイムスタンプの期待値は、ＳＭ（１）の入力タイミングに対応する「００００」であり、２番目のトレースメッセージのタイムスタンプの期待値は、ＳＭ（２）の入力タイミングに対応する「００１１」である。
【０１１０】
まず、分離部２０２は、立上りエッジ同期ステータス情報Ｓ１として「ＩＤＬＥ」、立下りエッジ同期ステータス情報Ｓ２としてＳＭ（１）を得てメッセージ開始検出部２０４に出力する。
【０１１１】
ＳＭ（１）が、立下りエッジ同期ステータス情報、かつメッセージ開始ステータス情報であるため、メッセージ開始検出部２０４は、ＳＭ（１）を受信すると「１０ｈ」である開始エッジ情報ＳＳをカウンタコントローラ２０８とタイムスタンプ生成部２１２に出力する。これは、最初の「１０ｈ」である。
【０１１２】
カウンタコントローラ２０８は、最初に「１０ｈ」である開始エッジ情報ＳＳを受信すると、カウントイネーブル信号ＴＣＥをカウンタ２１０に出力する。その後、トレースの終了まで、カウントイネーブル信号ＴＣＥがアクティブのままである。
【０１１３】
カウンタ２１０は、カウントイネーブル信号ＴＣＥを受信すると「０００」からカウントアップを開始する。カウンタ２１０は、トレースクロックＣＬＫの立上りエッジでカウントアップをして、カウント値ＴＣをタイムスタンプ生成部２１２に出力する。図示のように、カウンタ２１０が出力した１つ目のカウント値ＴＣが「０００」であり、その後、トレースクロックＣＬＫの立上りエッジの度に、カウント値ＴＣが「１」インクリメントされる。
【０１１４】
タイムスタンプ生成部２１２は、「１０ｈ」である開始エッジ情報ＳＳを受信するとタイムスタンプＴＳを生成する。ここで、開始エッジ情報ＳＳが最初の「１０ｈ」であるため、タイムスタンプ生成部２１２は、カウント値ＴＣ（「０００」）の最下位に１ビット（０）を拡張したタイムスタンプＴＳ（「００００」）を生成する。また、タイムスタンプ生成部２１２は、最初エッジ情報として「１０ｈ」を保持する。
【０１１５】
分離部２０２は、「ＩＤＬＥ」とＳＭ（１）の次に、ＥＰ（１）とＥＭ（１）を出力する。ＥＰ（１）とＥＭ（１）のいずれもメッセージ開始ステータス情報ＳＭではないため、メッセージ開始検出部２０４は、「００ｈ」である開始エッジ情報ＳＳを出力する。
【０１１６】
その後、分離部２０２は、ＳＭ（２）とＥＰ（２）を出力する。ＳＭ（２）がメッセージ開始ステータス情報、かつ立上りエッジ同期ステータス情報であるため、メッセージ開始検出部２０４は、「０１ｈ」である開始エッジ情報ＳＳを出力する。
【０１１７】
タイムスタンプ生成部２１２は、「０１ｈ」である開始エッジ情報ＳＳを受信するとタイムスタンプＴＳを生成する。保持された開始エッジ情報が立下りエッジを示す「１０ｈ」であり、現在受信した開始エッジ情報ＳＳが「０１ｈ」であるため、タイムスタンプ生成部２１２は、現在のカウント値ＴＣ（「０１０」）の最下位に１ビット（０）を拡張した値から「１」を減算してタイムスタンプＴＳ（「００１１」）を生成する。
【０１１８】
この場合も、タイムスタンプ生成部２１２により、最初のトレースメッセージと２番目のトレースメッセージに対して、それぞれの期待値と同値のタイムスタンプが生成される。
【０１１９】
図８は、最初のトレースメッセージの有効開始データとなるトレースデータＴＤとそのステータス情報ＳＴがトレースクロックＣＬＫの立下りエッジに同期して入力され、該トレースメッセージに続くトレースメッセージの有効開始データとなるトレースデータＴＤとそのステータス情報ＳＴもトレースクロックＣＬＫの立下りエッジに同期して入力された場合のタイミングチャートである。各トレースメッセージの構成は図５に示す例と同様である。
【０１２０】
図８の例において、最初のトレースメッセージと２番目のトレースメッセージの間（すなわちＥＭ（１）とＳＭ（２）の間）にアイドルデータ（ステータス情報：ＩＤＬＥ）が１つ出力されている。
【０１２１】
図示のように、ＳＭ（１）とＳＭ（２）は共にトレースクロックＣＬＫの立下りエッジに同期して入力されている。最初のトレースメッセージのタイムスタンプの期待値は、ＳＭ（１）の入力タイミングに対応する「００００」であり、２番目のトレースメッセージのタイムスタンプの期待値は、ＳＭ（２）の入力タイミングに対応する「０１００」である。
【０１２２】
まず、分離部２０２は、立上りエッジ同期ステータス情報Ｓ１として「ＩＤＬＥ」、立下りエッジ同期ステータス情報Ｓ２としてＳＭ（１）を得てメッセージ開始検出部２０４に出力する。
【０１２３】
ＳＭ（１）が、立下りエッジ同期ステータス情報、かつメッセージ開始ステータス情報であるため、メッセージ開始検出部２０４は、ＳＭ（１）を受信すると「１０ｈ」である開始エッジ情報ＳＳをカウンタコントローラ２０８とタイムスタンプ生成部２１２に出力する。これは、最初の「１０ｈ」である。
【０１２４】
カウンタコントローラ２０８は、最初に「１０ｈ」である開始エッジ情報ＳＳを受信すると、カウントイネーブル信号ＴＣＥをカウンタ２１０に出力する。その後、トレースの終了まで、カウントイネーブル信号ＴＣＥがアクティブのままである。
【０１２５】
カウンタ２１０は、カウントイネーブル信号ＴＣＥを受信すると「０００」からカウントアップを開始する。カウンタ２１０は、トレースクロックＣＬＫの立上りエッジでカウントアップをして、カウント値ＴＣをタイムスタンプ生成部２１２に出力する。図示のように、カウンタ２１０が出力した１つ目のカウント値ＴＣが「０００」であり、その後、トレースクロックＣＬＫの立上りエッジの度に、カウント値ＴＣが「１」インクリメントされる。
【０１２６】
タイムスタンプ生成部２１２は、「１０ｈ」である開始エッジ情報ＳＳを受信するとタイムスタンプＴＳを生成する。ここで、開始エッジ情報ＳＳが最初の「１０ｈ」であるため、タイムスタンプ生成部２１２は、カウント値ＴＣ（「０００」）の最下位に１ビット（０）を拡張したタイムスタンプＴＳ（「００００」）を生成する。また、タイムスタンプ生成部２１２は、最初エッジ情報として「１０ｈ」を保持する。
【０１２７】
分離部２０２は、「ＩＤＬＥ」とＳＭ（１）の次に、ＥＰ（１）とＥＭ（１）を出力する。ＥＰ（１）とＥＭ（１）のいずれもメッセージ開始ステータス情報ＳＭではないため、メッセージ開始検出部２０４は、「００ｈ」である開始エッジ情報ＳＳを出力する。
【０１２８】
その後、分離部２０２は、「ＩＤＬＥ」とＳＭ（２）を出力する。ＳＭ（２）がメッセージ開始ステータス情報、かつ立下りエッジ同期ステータス情報であるため、メッセージ開始検出部２０４は、「１０ｈ」である開始エッジ情報ＳＳを再び出力する。
【０１２９】
タイムスタンプ生成部２１２は、「１０ｈ」である開始エッジ情報ＳＳを再び受信するとタイムスタンプＴＳを生成する。保持された開始エッジ情報が立下りエッジを示す「１０ｈ」であり、現在受信した開始エッジ情報ＳＳも「１０ｈ」であるため、タイムスタンプ生成部２１２は、現在のカウント値ＴＣ（「０１０」）の最下位に１ビット（１）を拡張した値から「１」を減算してタイムスタンプＴＳ（「０１００」）を生成する。
【０１３０】
この場合も、タイムスタンプ生成部２１２により、最初のトレースメッセージと２番目のトレースメッセージに対して、それぞれの期待値と同値のタイムスタンプが生成される。
【０１３１】
このように、本実施の形態のデバッグ・システム１００おけるトレースデータ制御回路２００によれば、トレースクロックＣＬＫの立上りエッジと立下りエッジの両エッジに同期してトレースデータとステータス情報が入力される場合に、トレースクロックＣＬＫの立上りエッジの片エッジに同期してカウントアップするカウンタを用いて、とトレースメッセージの正確なタイムスタンプを生成することができる。
【０１３２】
また、これまでの実施例の説明で、「立上がりエッジ」を「立下りエッジ」に、「立下りエッジ」を「立上がりエッジ」に読み替えれば、トレースクロックＣＬＫの立下りエッジの片エッジに同期してカウントアップするカウンタを用いても、トレースメッセージの正確なタイムスタンプを生成可能であることが分かる。
【０１３３】
トレースクロックＣＬＫの両エッジのいずれにおいてもカウントアップするカウンタを用いれば、トレースクロックの１周期につき２つのカウント値を得ることができるため、カウント値をタイムスタンプとして用いることができる。しかし、ＦＰＧＡによりエミュレータを構成する場合には、両エッジでカウントアップするカウンタの実装ができない。本発明にかかるタイムスタンプ生成技術によれば、トレースクロックＣＬＫの片方のエッジでカウントアップするカウンタのカウント値から高分解能のタイムスタンプを生成できるので、トレースクロックＣＬＫの立上りエッジと立下りエッジのいずれにも同期してトレースデータとステータス情報が入力される場合にも、ＦＰＧＡによりエミュレータを構成することができる。
【０１３４】
以上、実施の形態をもとに本発明を説明した。実施の形態は例示であり、本発明の主旨から逸脱しない限り、上述した各実施の形態に対してさまざまな変更、増減を行ってもよい。これらの変更、増減が行われた変形例も本発明の範囲にあることは当業者に理解されるところである。
【０１３５】
例えば、本実施の形態のデバッグ・システム１００は、ＩＣＥ方式のエミュレータにより構成されているが、本発明にかかる技術は、ＯＣＤ方式のエミュレータの場合にも適用することができる。
【符号の説明】
【０１３６】
２１  デバッグ制御端末    ２２  エミュレータ
２３  ターゲット・システム  ２４  ホスト・インターフェイス
２５  エミュレーション・ケーブル  ３１  ＪＴＡＧコントローラ
３２  トレースデータ制御回路  ３３  トレースメモリ
３４  ＣＰＵチップ  ３５  ＲＯＭ
３６  ＲＡＭ  １００  デバッグ・システム
１１０  ターゲット・システム  １１６  ソケット
１１８  プラグ  １１９  エミュレーション・ケーブル
１２０  エバチップ  １３０  エミュレータ
１３２  コントローラ  １３４  トレースメモリ
１３６  ホストＩ／Ｆ  １４０  ホストコンピュータ
２００  トレースデータ制御回路  ２０２  分離部
２０４  メッセージ開始検出部  ２０６  メッセージ形成部
２０８  カウンタコントローラ  ２１０  カウンタ
２１２  タイムスタンプ生成部  ２１４  データ生成部
ＣＬＫ  トレースクロック  Ｄ１  立上りエッジ同期データ
Ｄ２  立下りエッジ同期データ  ＤＲ  データ要求信号
ＥＭ  メッセージ末尾ステータス情報  ＭＳＳ  メッセージ出力ステータス
ＲＣ  リードコントロール信号  ＲＤ  リードデータ
Ｓ１  立上りエッジ同期ステータス情報  Ｓ２  立下りエッジ同期ステータス情報
ＳＭ  メッセージ開始ステータス情報  ＳＳ  開始エッジ情報
ＳＴ  ステータス情報  ＴＣ  カウント値
ＴＣＥ  カウントイネーブル信号  ＴＤ  トレースデータ
ＴＭＤ  トレースメモリデータ  ＴＲＳ  トレースメッセージ
ＴＳ  タイムスタンプ  ＷＣ  ライトコントロール信号
【図１】
2011209828.tif 000003
【図２】
2011209828.tif 000004
【図３】
2011209828.tif 000005
【図４】
2011209828.tif 000006
【図５】
2011209828.tif 000007
【図６】
2011209828.tif 000008
【図７】
2011209828.tif 000009
【図８】
2011209828.tif 000010
【図９】
2011209828.tif 000011