(57)【要約】【課題】公知文献記載の技術では、トレースメモリを大容量化できないという課題があった。また、トレース対象とするチップの回路規模が大きくなるという課題があった。【解決手段】タイムスタンプカウンタと、ＯＶＦフラグと、ＯＶＦカウンタと、トレースメモリ書き込み制御回路とを具備するタイムスタンプ取得回路によって解決することができる。タイムスタンプカウンタは、所定のクロックに従って、一定の時間間隔を計数する。ＯＶＦフラグは、タイムスタンプカウンタがオーバーフローしたことを記録する。ＯＶＦカウンタは、タイムスタンプカウンタがオーバーフローした回数を計数する。トレースメモリ書き込み制御回路は、一のトレースデータが収集された場合において、ＯＶＦフラグがオンになっていたときには、一のトレースデータと、タイムスタンプカウンタのカウント値と、ＯＶＦカウンタのカウント値とをトレースメモリに書き込む。【選択図】図１
2010128681.tif 000002
【特許請求の範囲】
【請求項１】
所定のクロックに従って、一定の時間間隔を計数するタイムスタンプカウンタと、
前記タイムスタンプカウンタがオーバーフローしたことを記録するオーバーフローフラグと、
前記タイムスタンプカウンタがオーバーフローした回数を計数するオーバーフローカウンタと、
一のトレースデータが収集された場合において、前記オーバーフローフラグがオンになっていたときには、前記一のトレースデータと、前記タイムスタンプカウンタのカウント値と、前記オーバーフローカウンタのカウント値とをトレースメモリに書き込むトレースメモリ書き込み制御回路とを具備する
タイムスタンプ取得回路。
【請求項２】
前記一のトレースデータが収集された場合に、前記一のトレースデータと、前記タイムスタンプカウンタのカウント値と、前記オーバーフローフラグの値とを含む一のトレースメッセージを生成するトレースメッセージ生成回路と、
前記一のトレースメッセージを記憶する第一のバッファと、
前記一のトレースデータが収集された場合において、前記オーバーフローフラグがオンになっていたときに、前記オーバーフローカウンタのカウント値を記憶する第二のバッファとを更に具備し、
トレースメモリ書き込み制御回路は、
前記第一のバッファから読み出した前記一のトレースメッセージにおけるオーバーフローフラグの値がオフになっていた場合には、前記一のトレースメッセージを前記トレースメモリに書き込み、
前記第一のバッファから読み出した前記一のトレースメッセージにおけるオーバーフローフラグの値がオンになっていた場合には、前記一のトレースメッセージと、前記第二のバッファに記憶された前記オーバーフローカウンタのカウント値とを前記トレースメモリに書き込む
請求項１記載のタイムスタンプ取得回路。
【請求項３】
前記第一のバッファと、前記第二のバッファとは、
ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）メモリで成り、
前記トレースメッセージ生成回路は、
前記一のトレースメッセージを生成すると、前記一のトレースメッセージを前記第一のバッファに書き込むと共に、前記一のトレースメッセージにおけるオーバーフローフラグの値がオンであった場合には、前記オーバーフローカウンタのカウント値を前記第二のバッファに書き込むことを要求する制御信号を出力する
請求項２記載のタイムスタンプ取得回路。
【請求項４】
トレース対象とするチップの内部に、前記タイムスタンプカウンタを設け、
前記チップの外部に、前記オーバーフローカウンタを設けた
請求項３記載のタイムスタンプ取得回路。
【請求項５】
前記チップは、
デバッグチップ又はＣＰＵエバリュエーションチップである
請求項４記載のタイムスタンプ取得回路。
【請求項６】
所定のクロックを与えられるタイムスタンプカウンタにより、一定の時間間隔を計数することと、
前記タイムスタンプカウンタがオーバーフローしたことをオーバーフローフラグに記録することと、
オーバーフローカウンタにより、前記タイムスタンプカウンタがオーバーフローした回数を計数することと、
一のトレースデータが収集された場合において、前記オーバーフローフラグがオンになっていたときには、前記一のトレースデータと、前記タイムスタンプカウンタのカウント値と、前記オーバーフローカウンタのカウント値とをトレースメモリに書き込むこととを具備する
タイムスタンプ取得方法。
【請求項７】
前記一のトレースデータが収集された場合に、前記一のトレースデータと、前記タイムスタンプカウンタのカウント値とを含む一のトレースメッセージを生成することと、
第一のバッファに、前記一のトレースメッセージを記憶することと、
前記一のトレースデータが収集された場合において、前記オーバーフローフラグがオンになっていたときには、
前記一のトレースメッセージに追加して、前記オーバーフローカウンタのカウント値を前記トレースメモリに書き込むべき旨を表示することと、
第二のバッファに、前記オーバーフローカウンタのカウント値を記憶することとを更に具備し、
前記書き込むことは、
前記第一のバッファから前記一のトレースメッセージを読み込むことと、
前記一のトレースメッセージに対して、前記書き込むべき旨の表示がなされていなかった場合には、前記一のトレースメッセージを前記トレースメモリに書き込むことと、
前記一のトレースメッセージに対して、前記書き込むべき旨の表示がなされていた場合には、前記第二のバッファから前記オーバーフローカウンタのカウント値を読み込み、前記一のトレースメッセージと、前記オーバーフローカウンタのカウント値とを前記トレースメモリに書き込むこととを含む
請求項６記載のタイムスタンプ取得方法。
【請求項８】
前記表示することは、
前記一のトレースメッセージに、前記オーバーフローフラグの値を更に含めたものを、前記第一のバッファに記憶することを含み、
前記書き込むことは、
前記一のトレースメッセージにおけるオーバーフローフラグの値がオフになっていた場合を、前記書き込むべき旨の表示がなされていなかった場合とすることと、
前記一のトレースメッセージにおけるオーバーフローフラグの値がオンになっていた場合を、前記書き込むべき旨の表示がなされていた場合とすることとを更に含む
請求項７記載のタイムスタンプ取得方法。
【請求項９】
前記第一のバッファと、前記第二のバッファとは、ＦＩＦＯメモリで成り、
前記一のトレースメッセージを記憶することは、
前記第一のバッファに、順番にトレースメッセージを記憶することを含み、
前記オーバーフローカウンタのカウント値を記憶することは、
前記第二のバッファに、順番に前記カウント値を記憶することを含む
請求項８記載のタイムスタンプ取得方法。
【請求項１０】
トレース対象とするチップの内部に、前記タイムスタンプカウンタを設けることと、
前記チップの外部に、前記オーバーフローカウンタを設けることとを更に具備する
請求項９記載のタイムスタンプ取得方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、タイムスタンプ取得回路及びタイムスタンプ取得方法に関する。
【背景技術】
【０００２】
マイコンのプログラム開発及びデバッグには、エミュレータやデバッグシステムが使用される。エミュレータやデバッグシステムは、マイコンからトレースデータを収集することができ、また、プログラム開発者は、その収集されたトレースデータを解析して、効率的に作業を進めることが可能である。
【０００３】
近年、エミュレータやデバッグシステムに求められるトレース情報量が増え続けている。データトレースを行うときには、アクセスアドレス値、アクセスデータ値のみならず、アクセス命令実行プログラムカウンタ値（Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ  値：ＰＣ値）の収集が求められている。また、プログラム実行トレースに関しては、最近では、分岐トレースが広く採用されている。分岐トレースを行うときには、分岐命令実行時の分岐元／分岐先ＰＣ値の収集が求められている。分岐トレースを行うと分かるのであるが、分岐回数が多く、分岐頻度が高いプログラムも存在し、また、プログラムのデバッグでは、数日間に亘るプログラム実行状況をトレースすることも珍しくはない。よって、分岐トレースでは、分岐回数が膨大になることが多々あり、この場合には、トレース情報量が肥大化してしまう。更に、近年のマルチコアチップの登場により、ＣＰＵの個数分だけトレースデータを収集しなければならなくなっている。
【０００４】
一般に、トレースメモリには、トレースデータと共に、そのトレースデータを収集した時間を示すタイムスタンプがセットで蓄積される。トレースメモリを有効活用するために、タイムスタンプのデータ量を縮小する技術が知られる。特開２００７−２４１４３１号公報（特許文献１参照）に記載された「トレースデータ記録装置」の発明は、リアルタイムカウンタのビット数よりも少ないビット数でカウントを行うｎビットカウンタを用いる。ｎビットカウンタは、トレース対象のバス情報をトレースメモリに書き込んだ間隔をカウントしており、トレースメモリには、バス情報と、ｎビットカウンタのカウント値とが対応付けられて記憶される。但し、ｎビットカウンタがフルカウントになった場合には、リアルタイムカウンタのカウント値がトレースメモリに記憶される。ｎビットカウンタのカウント値は、リアルタイムカウンタのカウント値よりもビット数が少ないので、トレースメモリに記憶されるデータ量が全体として小さくなる。
【０００５】
【特許文献１】特開２００７−２４１４３１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
トレース情報量が膨大になると、大容量のトレースメモリが必要となる。しかし、エバリュエーションチップに内蔵される程度のメモリ容量では、実際のプログラムデバッグの使用に耐え得ない。よって、現実的には、トレースメモリはエバリュエーションチップの外部に大規模のものを備えることが必須となる。トレースメモリをチップの外部に設ければ、エミュレーション対象のマイコンごとに、エミュレータやデバッグシステムの製品仕様ごとに、トレースメモリの容量を変えることも可能となる。上記公知文献記載の「トレースデータ記録装置」では、ＣＰＵとトレースメモリとが同一のチップに実装されている。そのため、トレースメモリの大容量化が難しいという課題がある。
【０００７】
特に、マイコン製品の中にエミュレーション機能を内蔵するデバッグチップでは、回路規模をできるだけ小さくし、チップコストを抑えたいという要求がある。内蔵されるタイムスタンプ用カウンタのビット数は少ないほど、その回路規模が小さいほどチップコストの面で好ましい。しかし、上記公知文献記載の技術では、ｎビットカウンタのほかに、回路規模が非常に大きいリアルタイムカウンタを搭載しているので、コスト高を招いているという課題がある。
【課題を解決するための手段】
【０００８】
以下に、［発明を実施するための最良の形態］で使用される番号・符号を用いて、［課題を解決するための手段］を説明する。これらの番号・符号は、［特許請求の範囲］の記載と［発明を実施するための最良の形態］との対応関係を明らかにするために括弧付きで付加されたものである。ただし、それらの番号・符号を、［特許請求の範囲］に記載されている発明の技術的範囲の解釈に用いてはならない。
【０００９】
本発明の一つ目のアスペクトによるタイムスタンプ取得回路は、タイムスタンプカウンタ（３６）と、オーバーフローフラグ（３４）と、オーバーフローカウンタ（７１）と、トレースメモリ書き込み制御回路（７４）とを具備する。タイムスタンプカウンタ（３６）は、所定のクロックに従って、一定の時間間隔を計数する。オーバーフローフラグ（３４）は、タイムスタンプカウンタ（３６）がオーバーフローしたことを記録する。オーバーフローカウンタ（７１）は、タイムスタンプカウンタ（３６）がオーバーフローした回数を計数する。トレースメモリ書き込み制御回路（７４）は、一のトレースデータが収集された場合において、オーバーフローフラグ（３４）がオンになっていたときには、一のトレースデータと、タイムスタンプカウンタ（３６）のカウント値と、オーバーフローカウンタ（７１）のカウント値とをトレースメモリ（８０）に書き込む。
【００１０】
本発明の二つ目のアスペクトによるタイムスタンプ取得方法は、時間間隔を計数することと、記録することと、回数を計数することと、書き込むこととを具備する。計数することにおいては、所定のクロックを与えられるタイムスタンプカウンタ（３６）により、一定の時間間隔を計数する。記録することにおいては、タイムスタンプカウンタ（３６）がオーバーフローしたことをオーバーフローフラグ（３４）に記録する。回数を計数することにおいては、オーバーフローカウンタ（７１）により、タイムスタンプカウンタ（３６）がオーバーフローした回数を計数する。書き込むことにおいては、一のトレースデータが収集された場合において、オーバーフローフラグ（３４）がオンになっていたときには、一のトレースデータと、タイムスタンプカウンタ（３６）のカウント値と、オーバーフローカウンタ（７１）のカウント値とをトレースメモリ（８０）に書き込む。
【００１１】
これらのタイムスタンプ取得回路及びタイムスタンプ取得方法は、タイムスタンプカウンタ（３６）のカウント値と、オーバーフローカウンタ（７１）のカウント値とを合わせることで、かなり長い時間を計測することが可能になる。また、トレース対象とするチップの内部にタイムスタンプカウンタ（３６）を設け、そのチップの外部にオーバーフローカウンタ（７２）を設けることにより、トレース対象とするチップの回路規模を抑制し、コストダウンを図ることができる。さらに、トレースメモリ（８０）も、トレース対象とするチップの外部に設けることが可能であるから、トレースメモリ（８０）を大容量化することができる。
【発明の効果】
【００１２】
本発明によれば、トレースメモリを大容量化することができる。また、トレース対象とするデバッグチップやエバリュエーションチップの回路規模を小さくすることができる。
【発明を実施するための最良の形態】
【００１３】
図１は、本発明を実施するための最良の形態の一つを説明するブロック構成図である。図１において、タイムスタンプ取得回路は、タイムスタンプカウンタ制御回路３０と、オーバーフローカウンタ制御回路７０とを備え、マルチコアのプロセッサからトレースデータを収集し、そのトレースデータにタイムスタンプを付加して、トレースメモリ８０への書き込みを行っている。タイムスタンプカウンタ制御回路３０は、プロセッサと同一のチップに実装することができ、所定のクロックに従ってカウント動作を行うタイムスタンプカウンタ３６によって、時間間隔を計測する。オーバーフローカウンタ制御回路７０は、プロセッサチップの外部に実装することができ、タイムスタンプカウンタ３６がキャリー信号を出力した回数を計数するオーバーフローカウンタ７１によって、タイムスタンプカウンタ３６による時間計測を補足する。トレースメモリ８０は、オーバーフローカウンタ制御回路７０と同様に、プロセッサチップの外部に実装することができる。
【００１４】
図１に示すように、本実施の形態によるタイムスタンプ取得回路は、マルチコアのプロセッサからトレースデータを収集することができる。このマルチコアのプロセッサは、第１ＣＰＵコア１１を含む第１プロセッサ１３と、第２ＣＰＵコア１２を含む第２プロセッサ１４とを有している。第１プロセッサ１３、及び、第２プロセッサ１４は、各々が内蔵する第１ＣＰＵコア１１、及び、第２ＣＰＵコア１２がトレース対象命令を実行すると、トレース対象命令実行検出信号と、トレースデータとを出力する。タイムスタンプカウンタ制御回路３０は、これらのトレース対象命令実行検出信号と、トレースデータとを入力する。
【００１５】
図示するように、タイムスタンプカウンタ制御回路３０は、トレースメッセージ生成回路３５と、タイムスタンプカウンタ３６と、トレースメッセージバッファ３７とを有している。図中、タイムスタンプカウンタ３６は、トレースメッセージ生成回路３５からリセット信号（ＲＥＳ）を受信すると初期化され、ゼロから計数を開始する。タイムスタンプカウンタ３６は、所定のクロックに同期して、一定の時間間隔でカウント動作を行い、そのタイムスタンプカウント値は、トレースメッセージ生成回路３５に送出される。タイムスタンプカウンタ３６は、フルカウントを計数し、オーバーフローすると、キャリー信号を出力する。トレースメッセージ生成回路３５は、このキャリー信号を入力する。それから、オーバーフローカウンタ制御回路７０も、このキャリー信号を入力する。
【００１６】
トレースメッセージ生成回路３５は、ＯＶＦ（Ｏｖｅｒｆｌｏｗ：オーバーフロー）フラグ３４の制御を行っている。図２Ａ及び図２Ｂは、トレースメッセージ生成回路３５によるＯＶＦフラグ３４の制御方法の説明図である。図２Ａに示すように、トレースメッセージ生成回路３５は、タイムスタンプカウンタ３６から出力されるキャリー信号を監視する（ステップＳ１０）。そして、キャリー信号を受信すると、ＯＶＦフラグ３４をセットする（Ｓ１２）。ＯＶＦフラグ３４は、オンになる。２回目以降のキャリー信号を受信した場合には、そのままオン状態を維持する。すなわち、一度でもキャリー信号がアクティブになると、ＯＶＦフラグ３４はオンになる。一方、図２Ｂに示すように、トレースメッセージ生成回路３５は、トレースメッセージバッファ３７に書き込むトレースメッセージの生成処理が終了したか否かを判定し（Ｓ１４）、終了したならば、ＯＶＦフラグ３４をクリアする（Ｓ１６）。ＯＶＦフラグ３４はオフになる。
【００１７】
トレースメッセージ生成回路３５は、トレースメッセージの生成を行う。トレースメッセージ生成回路３５は、トレース対象の事象（例えば、実行ＰＣ値、直接分岐、間接分岐、ＲＡＭアクセス）ごとに、トレースしたデータを決まったフォーマットに整形する。整形されたデータをトレースメッセージと呼ぶ。
【００１８】
図２Ｃは、第１プロセッサ１３、及び、第２プロセッサ１４から送出されるトレースデータを、トレースメッセージバッファに書き込むトレースメッセージ生成回路３５の動作説明図である。図２Ｃにおいて、トレースメッセージ生成回路３５は、第１プロセッサ１３、及び、第２プロセッサ１４から送出されるトレース対象命令実行検出信号を監視している（Ｓ２０）。トレース対象命令実行検出信号を受信すると、トレースメッセージ生成回路３５は、トレースメッセージの生成を行い、また、必要に応じて、オーバーフローカウンタ７１のカウント値を要求する（Ｓ２２）。トレースメッセージには、第１プロセッサ１３又は第２プロセッサ１４から受け取るトレースデータと、タイムスタンプカウンタ３６から受け取るタイムスタンプカウント値と、ＯＶＦフラグ３４の値とが含まれる。それから、本実施の形態では、マルチコアのプロセッサを対象としているので、更に、どちらのプロセッサからのトレースデータかを示すプロセッサ識別子も含まれる。トレースメッセージ生成回路３５は、生成したトレースメッセージを、トレースメッセージバッファ３７に書き込む（Ｓ２４）。
【００１９】
図２Ｄは、トレースメッセージ生成回路３５が、オーバーフローカウンタ制御回路７０に対して行っているオーバーフローカウント値の要求方法の説明図である。トレースメッセージ生成回路３５は、トレースメッセージの生成を行うときに、オーバーフローカウンタ７１のカウント値要求処理を行っている。トレースメッセージ生成回路３５は、ＯＶＦフラグ３４を参照し、ＯＶＦフラグ３４のオン／オフを判定する（Ｓ２６）。ＯＶＦフラグ３４がオンのとき、トレースメッセージ生成回路３５は、オーバーフローカウンタ７１のカウント値要求信号を出力する（Ｓ２８）。一方、ＯＶＦフラグ３４がオフのとき、トレースメッセージ生成回路３５は、オーバーフローカウンタ７１のカウント値要求信号を出力することを行わない。
【００２０】
従って、トレースメッセージ生成回路３５は、ＯＶＦフラグ３４がオンのとき、生成したトレースメッセージを、トレースメッセージバッファ３７に書き込むと共に（Ｓ２４）、オーバーフローカウンタ７１のカウント値要求信号を出力する（Ｓ２８）。その結果、トレースメッセージと、オーバーフローカウンタ７１のカウント値とが対応付けられて、トレースメッセージバッファ３７と、ＯＶＦカウント値バッファ７３とに、それぞれ書き込まれる。一方、ＯＶＦフラグ３４がオフのときには、結果として、トレースメッセージバッファ３７への書き込みのみが行われる（Ｓ２４）。
【００２１】
トレースメッセージバッファ３７は、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ：先入れ先出し）バッファで成る。トレースメッセージバッファ３７は、トレースメッセージ生成回路３５によって生成されたトレースメッセージを、生成された順番にエントリすると共に、先頭のトレースメッセージを出力クロック同期で、バス幅毎に分割して出力する。それぞれの分割データは、一つのトレースメッセージの最初の分割データか、最後の分割データか、途中の分割データか等を示すステータス信号を伴って出力される。
【００２２】
図１において、オーバーフローカウンタ制御回路７０は、ＯＶＦカウンタ７１と、ＯＶＦカウント値生成回路７２と、ＯＶＦカウント値バッファ７３と、トレースメモリ書き込み制御回路７４とを有している。ＯＶＦカウンタ７１は、トレースメッセージ生成回路３５からリセット信号（ＲＥＳ）を受信すると初期化され、ゼロから計数を開始する。ＯＶＦカウンタ７１は、タイムスタンプカウンタ３６から出力されるキャリー信号の数を計数しており、キャリー信号がアクティブになるごとにカウントアップする。
【００２３】
ＯＶＦカウント値生成回路７２は、トレースメッセージ生成回路３５からのＯＶＦカウント値要求信号がアクティブになると、ＯＶＦカウンタ７１のカウント値を読み出し、そのカウント値をＯＶＦカウント値バッファ７３にエントリする。トレースメッセージ生成回路３５からのＯＶＦカウント値要求信号がアクティブでは無いときには、ＯＶＦカウント値バッファ７３への書き込みは行わない。
【００２４】
ＯＶＦカウント値バッファ７３は、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ：先入れ先出し）バッファで成る。ＯＶＦカウント値生成回路７２によって生成されたカウント値は、生成された順番に、ＯＶＦカウント値バッファ７３にエントリされる。
【００２５】
トレースメモリ書き込み制御回路７４は、トレースメッセージバッファ３７から出力されるトレースメッセージを受け取り、また、ＯＶＦカウント値バッファ７３から出力されるカウント値を受け取る。そして、トレースメモリ８０への書き込みを行う。図３及び図４は、トレースメモリ書き込み制御回路７４の動作説明図である。図３は、二つのバッファ３７，７３及びトレースメモリ８０におけるデータ構造の具体例を示したものである。図３の例を参照すると、トレースメッセージバッファ３７には六つのエントリがあり、ＯＶＦカウント値バッファ７３には二つのエントリがある。トレースメッセージバッファ３７の六つのエントリを参照すると、四つ目のトレースメッセージにおけるトレースデータを収集したときに、タイムスタンプカウンタ３６がオーバーフローし、一個目のキャリー信号が出力されていることが分かる。また、六つ目のトレースメッセージにおけるトレースデータを収集したときに、タイムスタンプカウンタ３６がオーバーフローし、二個目のキャリー信号が出力されていることが分かる。
【００２６】
図３の具体例と、図４のフローチャートとに基づいて、トレースメモリ書き込み制御回路７４の書き込み動作を詳細に説明する。まず、トレースメモリ書き込み制御回路７４は、トレースメッセージバッファ３７から、一つ目のトレースメッセージを読み込む。そして、そのトレースメッセージにおけるオーバーフローフラグを参照し、オンかオフかを判定する（Ｓ４０）。図３に示すように、一つ目のトレースメッセージにおけるオーバーフローフラグはオフなので、トレースメモリ書き込み制御回路７４は、トレースメモリ８０に、一つ目のトレースメッセージを書き込む（Ｓ４３）。トレースメモリ８０への書き込みアドレスをインクリメントする（Ｓ４４）。同様に、トレースメモリ書き込み制御回路７４は、トレースメモリ８０に、二つ目のトレースメッセージと、三つ目のトレースメッセージとを書き込む（Ｓ４３）。
【００２７】
続いて、トレースメモリ書き込み制御回路７４は、トレースメッセージバッファ３７から、四つ目のトレースメッセージを読み込む。そして、その四つ目のトレースメッセージにおけるオーバーフローフラグを参照し、オンかオフかを判定する（Ｓ４０）。四つ目のトレースメッセージにおけるオーバーフローフラグはオンなので、トレースメモリ書き込み制御回路７４は、ＯＶＦカウント値バッファから、一個目のＯＶＦカウント値を読み込む。そして、トレースメモリ８０に、一個目のＯＶＦカウント値を書き込む（Ｓ４１）。トレースメモリ８０への書き込みアドレスをインクリメントする（Ｓ４２）。更に、トレースメモリ書き込み制御回路７４は、トレースメモリ８０に、四つ目のトレースメッセージを書き込む（Ｓ４３）。トレースメモリ８０への書き込みアドレスをインクリメントする（Ｓ４４）。
【００２８】
次に、トレースメモリ書き込み制御回路７４は、トレースメッセージバッファ３７から、五つ目のトレースメッセージを読み込む。そして、そのトレースメッセージにおけるオーバーフローフラグを参照し、オンかオフかを判定する（Ｓ４０）。五つ目のトレースメッセージにおけるオーバーフローフラグはオフなので、トレースメモリ書き込み制御回路７４は、トレースメモリ８０に、五つ目のトレースメッセージを書き込む（Ｓ４３）。トレースメモリ８０への書き込みアドレスをインクリメントする（Ｓ４４）。
【００２９】
それから、トレースメモリ書き込み制御回路７４は、トレースメッセージバッファ３７から、最後の六つ目のトレースメッセージを読み込む。そして、その六つ目のトレースメッセージにおけるオーバーフローフラグを参照し、オンかオフかを判定する（Ｓ４０）。六つ目のトレースメッセージにおけるオーバーフローフラグはオンなので、トレースメモリ書き込み制御回路７４は、ＯＶＦカウント値バッファから、最後の二個目のＯＶＦカウント値を読み込む。そして、トレースメモリ８０に、二個目のＯＶＦカウント値を書き込む（Ｓ４１）。トレースメモリ８０への書き込みアドレスをインクリメントする（Ｓ４２）。更に、トレースメモリ書き込み制御回路７４は、トレースメモリ８０に、六つ目のトレースメッセージを書き込む（Ｓ４３）。トレースメモリ８０への書き込みアドレスをインクリメントする（Ｓ４４）。
【００３０】
以上の書き込み動作によって、トレースメモリ８０の内容は、図３に示した如くになる。図示するように、トレースメッセージバッファ３７から読み出したトレースメッセージにおけるオーバーフローフラグがオンのときには、トレースメモリ８０には、ＯＶＦカウント値と、トレースメッセージとがセットで記憶されている。一方、トレースメッセージバッファ３７から読み出したトレースメッセージにおけるオーバーフローフラグがオフのときには、トレースメモリ８０には、トレースメッセージのみが記憶されている。
【００３１】
本実施の形態におけるタイムスタンプ取得回路の全体の動作例について簡単に説明しておく。
ステップ１．タイムスタンプカウンタ３６、ＯＶＦカウンタ７１を初期化する。
ステップ２．第１プロセッサ１３又は第２プロセッサ１４にて、ユーザプログラムを実行する。同時にタイムスタンプカウンタ３６、ＯＶＦカウンタ７１のカウントアップを開始する。
ステップ３．第１プロセッサ１３が第１ＣＰＵコア１１でトレース対象命令の実行を検出すると、トレース対象命令実行検出信号とトレースデータとがトレースメッセージ生成回路３５に出力される。
ステップ４．同様に、第２プロセッサ１４が第２ＣＰＵコア１２でトレース対象命令の実行を検出すると、トレース対象命令実行検出信号とトレースデータとがトレースメッセージ生成回路３５に出力される。
ステップ５．トレースメッセージ生成回路３５は、第１プロセッサ１３又は第２プロセッサ１４から、トレース対象命令実行検出信号を受け取る前に、一度でもタイムスタンプカウンタ３６のキャリー信号がアクティブになると、ＯＶＦフラグ３４をセットする。セットしたＯＶＦフラグ３４の状態は、トレース対象命令実行検出信号を受け取ったあと、トレースメッセージを生成するまで、保持する。
ステップ６．トレースメッセージ生成回路３５は、第１プロセッサ１３および第２プロセッサ１４から、トレース対象命令実行検出信号を受け取ると、タイムスタンプカウンタ３６からカウント値をリードする。また、このとき、ＯＶＦフラグ３４がセットされていれば、ＯＶＦカウント値要求信号をＯＶＦカウント値生成回路７２に出力する。
ステップ７．トレースメッセージ生成回路３５は、第１プロセッサ１３及び第２プロセッサ１４からのトレースデータ（本実施の形態におけるプロセッサはマルチコアなので、どちらのプロセッサからのデータかを示す情報を含む。）、タイムスタンプカウント値、ＯＶＦフラグ３４の値からトレースメッセージを生成し、トレースメッセージバッファ３７にエントリする。
ステップ８．ＯＶＦカウント値生成回路７２は、ＯＶＦカウント値要求信号を受け取ると、ＯＶＦカウンタ７１のカウント値をＯＶＦカウント値バッファ７３にエントリする。
ステップ９．トレースメッセージ生成回路３５は、リセット信号（ＲＥＳ）をアクティブにし、タイムスタンプカウンタ３６、ＯＶＦカウンタ７１を０クリアする。
ステップ１０．トレースメッセージバッファ３７は、トレースメッセージを先頭から順次、トレースメモリ書き込み制御回路７４に出力する。
ステップ１１．第１プロセッサ１３、第２プロセッサ１４が、トレース対象命令の実行を検出するたびに、上記ステップ３．〜ステップ９．を実行する。
ステップ１２．トレースメモリ書き込み制御回路７４は、トレースメッセージバッファ３７から出力されるトレースメッセージを受け取る。そのトレースメッセージ内のオーバーフローフラグがオフであれば、トレースメッセージをトレースメモリ８０に書き込み、トレースメモリ８０への書き込みアドレスをインクリメントする。
ステップ１３．トレースメモリ書き込み制御回路７４は、そのトレースメッセージ内のオーバーフローフラグがオンであれば、トレースメッセージをトレースメモリ８０に書き込む前に、ＯＶＦカウント値バッファ７３の先頭のＯＶＦカウント値を先にトレースメモリ８０に書き込み、アドレスをインクリメントした後で、トレースメッセージを書き込み、更にトレースメモリ８０のアドレスをインクリメントする。
【００３２】
本実施の形態における効果として、次のような効果を挙げることができる。
〔１〕本実施の形態においては、トレースメモリ８０を、プロセッサと同一のチップに設ける必要が無い。よって、トレースメモリ８０の容量を十分に大きくすることができるので、マルチコアチップのプログラム開発／デバッグに必要な大量のトレースデータの取得を可能にするという効果がある。
〔２〕本実施の形態においては、プロセッサと同一のチップに、比較的小さなタイムスタンプカウンタを一つ設ければ良いので、出力バスのバス幅が拡がることを抑制することができる。よって、デバッグチップ、エバリュエーションチップのコストを低減できるという効果がある。また、タイムスタンプカウンタの回路規模は、上記特許文献１の図１に示されているようなリアルタイムカウンタの回路規模と比較すると、かなりの小型化を図ることが可能である。よって、デバッグチップ、エバリュエーションチップの回路規模を相当小さくすることができるという効果がある。
〔３〕本実施の形態においては、トレースメッセージと、ＯＶＦカウント値とを別々に異なるＦＩＦＯに保持しているが、これらは対応付けられて書き込まれている。よって、タイムスタンプカウンタ３６のオーバーフローが、トレースメッセージバッファ（ＦＩＦＯ）３７を経由して順次出力されるトレースメッセージのどのメッセージ間で発生したかを容易に特定できるという効果がある。
【実施例１】
【００３３】
図５に、実施例１の構成を説明するブロック図を示す。実施例１は、上述した実施の形態によるタイムスタンプ取得回路を、デバッグチップ４１と、エミュレータ本体５０とに組み込んだ例である。図中、プログラム開発対象のマイクロコンピュータが搭載されるユーザーターゲットシステム２０に、ソケット２１が実装されている。デバッグチップ４１は、プログラム開発対象のマイクロコンピュータが持つ全機能を担い、また、上述した諸機能を備えるタイムスタンプ制御回路３０を内部に実装している。デバッグチップ４１は、ソケット２１を介して電気的にユーザーターゲットシステム２０と接続されている。更に、デバッグチップ４１は、エミュレーションプローブ２２を介して、エミュレータ本体５０の構成要素であるエミュレーション制御回路５１と電気的に接続されている。エミュレーション制御回路５１は、上述した諸機能を備えるオーバーフローカウンタ制御回路７０を有している。エミュレーションプローブ２２は、信号を伝達するケーブルの役割を担っている。
【００３４】
エミュレータ本体５０は、エミュレーション制御回路５１と、トレースメモリ８０と、ホストＩ／Ｆ  ５２とを有している。これらは、別々のチップに実装されている。エミュレータ本体５０は、ホストＰＣ  ６０と、ＵＳＢケーブルなどによって接続される。ホストＰＣ  ６０では、デバッガプログラムが実行される。ユーザの操作を受け付けるデバッガプログラムは、ホストＩ／Ｆ  ５２を介してエミュレータ本体５０と通信を行うことができる。
【００３５】
トレースデータの収集は、デバッガプログラムが実行されるホストＰＣ  ６０からの指示によって開始することができる。また、ホストＰＣ  ６０からの要求により、トレースメモリ８０に保存されたトレースメッセージを、エミュレータ本体５０からホストＰＣ  ６０へ読み出すことが可能である。ホストＰＣ  ６０は、その他、ホストＩ／Ｆ  ５２を介して、エミュレーション制御回路５１の設定レジスタの設定を行うことができ、また、エミュレーション制御回路５１を介して、デバッグチップ４１の設定レジスタの設定を行うことができる。なお、点線で囲んだ矩形の回路ブロック４０は、図１の構成図と概ね対応している。その対応関係を分かり易く説明するために図示したものである。
【実施例２】
【００３６】
図６に、実施例２の構成を説明するブロック図を示す。実施例２は、上述した実施の形態によるタイムスタンプ取得回路を、エバリュエーションチップを備えたエミュレータ本体５５内部に全て組み込んだ例である。図６において、エミュレータ本体５５は、周辺エバリュエーションチップ５６と、ＣＰＵエバリュエーションチップ４３と、エミュレーション制御回路５１と、トレースメモリ８０と、ホストＩ／Ｆ  ５２とを有している。これらは、別々のチップに実装されている。ＣＰＵエバリュエーションチップ４３は、プログラム開発対象のマイクロコンピュータが持つ全機能を担い、また、上述した諸機能を備えるタイムスタンプ制御回路３０を内部に実装している。ＣＰＵエバリュエーションチップ４３は、周辺エバリュエーションチップ５６と、エミュレーションプローブ２２と、ソケット２１とを介して、電気的にユーザーターゲットシステム２０と接続されている。また、エミュレータ本体５５のエミュレーション制御回路５１とも電気的に接続されている。エミュレーション制御回路５１は、上述した諸機能を備えるオーバーフローカウンタ制御回路７０を有している。
【００３７】
エミュレータ本体５５は、ホストＰＣ  ６０と、ＵＳＢケーブルなどによって接続される。ホストＰＣ  ６０では、デバッガプログラムが実行される。ユーザの操作を受け付けるデバッガプログラムは、ホストＩ／Ｆ  ５２を介してエミュレータ本体５５と通信を行うことが可能である。トレースデータの収集は、デバッガプログラムが実行されるホストＰＣ  ６０からの指示によって開始することができる。また、ホストＰＣ  ６０からの要求により、トレースメモリ８０に保存されたトレースメッセージを、エミュレータ本体５５からホストＰＣ  ６０へ読み出すことができる。ホストＰＣ  ６０は、その他、ホストＩ／Ｆ  ５２を介して、エミュレーション制御回路５１の設定レジスタの設定を行うことができ、また、エミュレーション制御回路５１を介して、ＣＰＵエバリュエーションチップ４３の設定レジスタの設定を行うことができる。なお、点線で囲んだ矩形の回路ブロック４２は、図１の構成図と概ね対応している。その対応関係を分かり易く説明するために図示したものである。
【図面の簡単な説明】
【００３８】
【図１】本発明を実施するための最良の形態の一つを説明するブロック構成図
【図２Ａ】ＯＶＦフラグ３４のセット方法を説明するフローチャート
【図２Ｂ】ＯＶＦフラグ３４のクリア方法を説明するフローチャート
【図２Ｃ】トレースメッセージ生成回路３５による書き込み動作を説明するフローチャート
【図２Ｄ】オーバーフローカウント値の要求方法を説明するフローチャート
【図３】トレースメモリ書き込み制御回路７４の動作を説明するためのデータ構造図
【図４】トレースメモリ書き込み制御回路７４の動作を説明するフローチャート
【図５】実施例１の構成を説明するブロック図
【図６】実施例２の構成を説明するブロック図
【符号の説明】
【００３９】
１１，１２  ＣＰＵコア
１３，１４  プロセッサ
２０  ユーザーターゲットシステム
２１  ソケット
２２  エミュレーションプローブ
３０  タイムスタンプカウンタ制御回路
３４  ＯＶＦフラグ
３５  トレースメッセージ生成回路
３６  タイムスタンプカウンタ
３７  トレースメッセージバッファ
４０，４２  回路ブロック
４１  デバッグチップ
４３  ＣＰＵエバリュエーションチップ
５０，５５  エミュレータ本体
５１  エミュレーション制御回路
５２  ホストＩ／Ｆ
５６  周辺エバリュエーションチップ
６０  ホストＰＣ
７０  オーバーフローカウンタ制御回路
７１  ＯＶＦカウンタ
７２  ＯＶＦカウント値生成回路
７３  ＯＶＦカウント値バッファ
７４  トレースメモリ書き込み制御回路
８０  トレースメモリ
【図１】
2010128681.tif 000003
【図２Ａ】
2010128681.tif 000004
【図２Ｂ】
2010128681.tif 000005
【図２Ｃ】
2010128681.tif 000006
【図２Ｄ】
2010128681.tif 000007
【図３】
2010128681.tif 000008
【図４】
2010128681.tif 000009
【図５】
2010128681.tif 000010
【図６】
2010128681.tif 000011