(57)【要約】【課題】本発明は、デバッグシステム及びデバッグ回路に関し、スタックアクセスと通常のデータアクセスのトレースを独立に行うことを可能とし、デバッグシステムの処理を低減することを目的とする。【解決手段】デバッグ対象のＣＰＵとデバッグ回路とを備えたデバッグシステムにおいて、ＣＰＵは、デバッグ回路が監視するＣＰＵのデータアクセス情報をスタックアクセス用情報とスタックアクセスを除くデータアクセス用情報として独立に出力し、デバッグ回路は、ＣＰＵが出力するスタックアクセス用情報からスタックアクセスのトレース情報を、ＣＰＵが出力するスタックアクセスを除くデータアクセス用情報からスタックアクセスを除くデータアクセスのトレース情報を、夫々独立に生成して出力するように構成する。【選択図】図９
2008065441.tif 000002
【特許請求の範囲】
【請求項１】
デバッグ対象のＣＰＵとデバッグ回路とを備えたデバッグシステムであって、
該ＣＰＵは、該デバッグ回路が監視する該ＣＰＵのデータアクセス情報をスタックアクセス用情報とスタックアクセスを除くデータアクセス用情報として独立に出力する出力手段を備え、
該デバッグ回路は、該ＣＰＵが出力するスタックアクセス用情報からスタックアクセスのトレース情報を、該ＣＰＵが出力するスタックアクセスを除くデータアクセス用情報からスタックアクセスを除くデータアクセスのトレース情報を、夫々独立に生成して出力するトレース手段を備えたことを特徴とするデバッグシステム。
【請求項２】
該出力手段は、該デバッグ回路が監視する該ＣＰＵのデータアクセス情報に、データアクセスの情報とデータアクセスがスタックアクセスか否かを示す信号を含めて出力し、
該トレース手段は、該ＣＰＵのデータアクセスがスタックアクセスか否かを示す信号からスタックアクセスのトレース情報とスタックアクセスを除くデータアクセスのトレース情報を、夫々独立に生成して出力することを特徴とする請求項１記載のデバッグシステム。
【請求項３】
該トレース手段は、スタックアクセスのトレース情報の生成とスタックアクセスを除くデータアクセスのトレース情報の生成を独立に許可する手段と、夫々のトレース情報を多重化する手段とを有し、スタックアクセスのトレース情報とスタックアクセスを除くデータアクセスのトレース情報を選択的にトレースすることを特徴とする請求項１又は２記載のデバッグシステム。
【請求項４】
該デバッグ回路が出力するスタックアクセスのトレース情報とスタックアクセスを除くデータアクセスのトレース情報から、スタックアクセスのトレースとスタックアクセスを除くデータアクセスのトレースを独立に行う外部デバッグ装置を更に備えたことを特徴とする請求項１乃至３のいずれか１項記載のデバッグシステム。
【請求項５】
該出力手段は、該デバッグ回路が監視するスタックアクセス用情報に、スタックアクセスを実行した場合には実行したスタックアクセスの種類、スタックアクセスのデータ及びスタックポインタからのオフセット値の情報を含め、スタックポインタの書き換えた場合にはスタックポインタ書き換えを実行した情報と新しいスタックポインタ値の情報を含め、
該トレース手段は、該ＣＰＵが出力するスタックアクセス用情報に基づいて、スタックアクセスを実行した場合には実行したスタックアクセスの種類、スタックアクセスのデータ及びスタックポインタからのオフセット値の情報を含むトレース情報を生成して出力し、スタックポインタの書き換えた場合にはスタックポインタ書き換えを実行した情報と新しいスタックポインタ値の情報を含むトレース情報を生成して出力し、
該外部デバッグ装置は、該デバッグ回路が出力するスタックアクセスのトレース情報からスタックポインタをトレースすることを特徴とする請求項４記載のデバッグシステム。
【請求項６】
該出力手段は、該ＣＰＵがスタックプッシュアクセスを実行した場合にスタックプッシュアクセスの発生とそのスタックアクセスのデータを該デバッグ回路が監視するスタックアクセス用情報に含めて出力し、
該トレース手段は、該ＣＰＵが出力するスタックアクセス情報からスタックプッシュアクセスとそのスタックアクセスのデータを含むスタックアクセスのトレース情報を生成して出力し、
該外部デバッグ装置は、該デバッグ回路が出力するスタックアクセスのトレース情報のうち、発生したスタックアクセスがスタックプッシュアクセスであることを示す情報に基づいてスタックポインタのディクリメントをトレースし、発生したスタックアクセスがスタックプッシュアクセスであることを示す情報と発生したスタックアクセスのデータの情報に基づいてスタックポインタが示すアドレスへのライトアクセスとそのライトデータをトレースすることを特徴とする請求項５記載のデバッグシステム。
【請求項７】
該出力手段は、該ＣＰＵがスタックポップアクセスを実行した場合にスタックポップアクセスの発生とそのスタックアクセスのデータを該デバッグ回路が監視するスタックアクセス用情報に含めて出力し、
該トレース手段は、該ＣＰＵが出力するスタックアクセス情報からスタックポップアクセスと、そのスタックアクセスのデータを含むスタックアクセスのトレース情報を生成して出力し、
該外部デバッグ装置は、該デバッグ回路が出力するスタックアクセスのトレース情報のうち、発生したスタックアクセスがスタックポップアクセスであるという情報と発生したスタックアクセスのデータの情報とに基づいて、スタックポインタが示すアドレスへのリードアクセスとそのリードデータをトレースし、発生したスタックアクセスがスタックポップアクセスであることを示す情報に基づいてスタックポインタのインクリメントをトレースすることを特徴とする請求項５記載のデバッグシステム。
【請求項８】
該出力手段は、該ＣＰＵがスタックポインタ相対アクセスを実行した場合にスタックポインタ相対アクセスの発生と、アクセスのリード・ライトと、スタックポインタからの相対アドレス値と、スタックアクセスのデータを、該デバッグ回路が監視するスタックアクセス用情報に含めて出力し、
該トレース手段は、該ＣＰＵが出力するスタックアクセス情報からスタックポインタ相対アクセスと、アクセスのリード・ライトと、スタックポインタからの相対アドレス値と、スタックアクセスのデータを含むスタックアクセスのトレース情報を生成して出力し、
該外部デバッグ装置は、該デバッグ回路が出力するスタックアクセスのトレース情報の各情報に基づいて、スタックポインタとスタックポインタからのオフセット値の和が示すアドレスへのリードアクセスとそのリードデータ、又は、ライトアクセスとそのライトデータをトレースすることを特徴とする請求項５記載のデバッグシステム。
【請求項９】
該出力手段は、該ＣＰＵがスタックポインタの書き換えを実行した場合にスタックポインタ書き換えの発生と、書き換えによる新しいスタックポインタ値を、該デバッグ回路が監視するスタックアクセス用情報に含めて出力し、
該トレース手段は、該ＣＰＵが出力するスタックアクセス情報からスタックポインタ書き換えの発生と、書き換えによる新しいスタックポインタ値を含むスタックアクセスのトレース情報を生成して出力し、
該外部デバッグ装置は、該デバッグ回路が出力するスタックアクセスのトレース情報の各情報に基づいて、スタックポインタが書き換えられたことと、書き換えによる新しいスタックポインタ値をトレースすることを特徴とする請求項５記載のデバッグシステム。
【請求項１０】
データアクセス情報をスタックアクセス用情報とスタックアクセスを除くデータアクセス用情報として独立に出力するＣＰＵをデバッグするデバッグ回路であって、
該ＣＰＵが出力するスタックアクセス用情報からスタックアクセスのトレース情報を、該ＣＰＵが出力するスタックアクセスを除くデータアクセス用情報からスタックアクセスを除くデータアクセスのトレース情報を、夫々独立に生成して出力するトレース手段を備えたことを特徴とするデバッグ回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デバッグシステム及びデバッグ回路に係り、特にマイクロコントローラ等に内蔵される情報処理装置のデバッグを支援するデバッグシステム及びデバッグ回路に関する。
【背景技術】
【０００２】
マイクロコントローラ等に代表される情報処理装置（以下、ＣＰＵと言う）を含む装置において、ＣＰＵを動作させるプログラムを開発する場合、一般的にはデバッグシステムを用いる。デバッグシステムは、開発するプログラムの諸動作情報の表示や、開発プログラムに対して特定の操作機能をプログラム開発者に提供し、デバッグを支援する。
【０００３】
図１は、従来のデバッグシステムの一例を示すブロック図である。図１において、デバッグ対象の１チップのマイクロコントローラ１は、外部デバッグ装置２を介してホストコンピュータ３に接続されている。マイクロコントローラ１は、ＣＰＵ１１、デバッグ回路１２、記憶装置１３及び周辺機能１４，１５がバス１６を介して接続された構成を有する。マイクロコントローラ１は、デバッグ専用ピン１７を介して外部デバッグ装置２に接続されている。
【０００４】
デバッグシステムは、マイクロコントローラ１に内蔵されＣＰＵ１１の各種監視を行うデバッグ回路１２と、マイクロコントローラ１の外部で各種デバッグ処理を行う外部デバッグ装置２と、デバッガソフトウェア１０が実行されるホストコンピュータ３で構成される。デバッグ回路１２と外部デバッグ装置２、及び、外部デバッグ装置２とホストコンピュータ３は、夫々専用の信号で接続される。
【０００５】
デバッグシステムの主要な機能の１つに、トレース機能がある。トレース機能には、命令の実行履歴情報を得る命令トレース機能と、データアクセスの実行履歴情報を得るデータトレース機能があり、これら機能によりＣＰＵ１１の各種動作の履歴情報（トレース情報）を得ることは、デバッグする過程において非常に有益である。
【０００６】
ＣＰＵ１１のトレース情報は、トレース情報を取得する時間に比例して情報量が増加する。大量のトレース情報をマイクロコントローラ１内のデバッグ回路１２に格納するためには、その内部に大容量の記憶装置が必要となり、マイクロコントローラ１のチップ面積及びコストが増加する。このため、一般的には、デバッグ回路１２はトレース情報を外部デバッグ装置２へ出力し、外部デバッグ装置２にトレース情報を記憶するという手法が取られている。これには、外部デバッグ装置２を１チップで構成するという要求がなく、マイクロコントローラ１内のデバッグ回路１２に大容量の記憶装置を設けるより、外部デバッグ装置２に必要な記憶装置を設けた方がコスト及び機能の面で有利だという背景がある。
【０００７】
図２は、デバッグ回路１２及び外部デバッグ装置２の構成を示すブロック図である。デバッグ回路１２はトレース装置１９を有する。他方、外部デバッグ装置２は、ライト制御部２１、トレースデータ記録部２２及びリード制御部２３を有する。デバッグシステムのデータトレース機能において、デバッグ対象のＣＰＵ１１の動作をトレースする場合、デバッグ回路１２内のトレース装置１９がＣＰＵ１１のデータアクセスを監視する。そして、トレース装置１９がトレース対象のアクセスを検出すると、アクセス種類（リード、ライト、サイズ等）、アクセスアドレス及びアクセスデータからトレース情報を生成する。ここで、デバッグ回路１２が監視するＣＰＵ１１のデータアクセスには、スタックポインタ（SP:Stack Pointer）を用いたスタックアクセス（例えば、PUSH命令、POP命令、EIT（例外、割込み、トラップ）、RETI命令、スタックポインタ相対アクセス命令等）と、スタックアクセスを除くデータアクセス（以下、「通常のデータアクセス」と言う）には区別がない。このため、デバッグ回路１２は、スタックアクセスと通常のデータアクセスを同一のトレース情報として扱う。又、このトレース情報を受け取る外部デバッグ装置２においても、これらを同一のトレース情報として扱う。
【０００８】
デバッグ回路１２は、トレース情報を生成した後、デバッグ専用ピン１７を経由して外部デバッグ回路２へ出力する。一般的に、このデバッグ専用ピン１７は、デバッグ時以外には使用しない。このため、コスト削減の観点から、デバッグ時以外に使用しないデバッグ専用ピン１７は、極力少ないピン数で実現することが望ましい。又、デバッグ専用ピン１７から出力される情報は、圧縮することが望まれる。これは、少ないピン数と有限な帯域で、最大の情報を出力するためである。
【０００９】
図３は、データトレース機能を説明する図である。図３に示すように、デバッガソフトウェア１０がデータトレースの設定指示を行うと、外部デバッグ装置２ではライト制御部２１の初期化が行われ、デバッグ回路１２ではデータトレースの設定が行われる。又、デバッガソフトウェア１０がデバッグ対象プログラムのトレース開始指示を行うと、ＣＰＵ１１ではデバッグ対象プログラムの実行が開始される。又、ＣＰＵ１１ではデバッグ対象プログラムが実行され、デバッグ回路１２ではトレースデータが生成され、外部デバッグ装置２ではトレースデータ記録部２２によりトレースデータが記録される。ＣＰＵ１１ではデバッグ対象プログラムの実行中断条件に一致するとデバッグ対象プログラムの実行を中断し、デバッガソフトウェア１０ではデバッグ対象プログラムのトレース中断を検出する。
【００１０】
デバッガソフトウェア１０ではトレースデータ量の通知指示を行い、外部デバッグ装置２ではトレースデータ量の通知を行う。デバッガソフトウェア１０ではトレースデータの読み出し指示を行い、外部デバッグ装置２ではトレースデータの読み出し及び送信を行う。デバッガソフトウェア１０では、以後トレースデータの受信、受信したトレースデータのワークエリアへの展開、受信したトレースデータの解析、トレースリストの作成及びトレース結果の表示を行う。
【００１１】
図４は、スタックアクセス及び通常のデータアクセスの抽出を説明する図である。図４は、デバッグ専用ピン１７を経由して外部デバッグ回路２へ出力されるデータトレース情報を時系列的に示す。図４において、梨地で示す矩形はスタックアクセスのトレースデータを示し、白抜きの矩形は通常のデータアクセスのトレースデータを示す。
【００１２】
図５は、データトレースのトレースリストの解析及び分離を説明する図である。図５において、左側に示すトレースリストは、デバッガソフトウェア１０の解析部１０Ａ及び分離部１０Ｂにより右側に示す通常のデータアクセスのトレースリストとスタックアクセスのトレースリストへ分離される。
【特許文献１】特開２００４−１７８５９１号公報
【特許文献２】特開２００４−３８９８１号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
従来技術では、次のような２つの課題がある。
【００１４】
第１の課題は、データトレースにおいて、スタックアクセスと通常のデータアクセスの区別がなされていないことに起因するものである。
【００１５】
従来技術のデータトレースでは、デバッグシステムにおいてスタックアクセスと通常のデータアクセスの区別がなく、デバッグ回路１２はこれらを同一のトレース情報として扱い、スタックアクセスと通常のデータアクセスを含む全トレース情報をデバッグ専用ピン１７から出力する。このため、外部デバッグ装置２では、スタックアクセスと通常のデータアクセスを含む全トレース情報を記憶装置（図示せず）に格納する。ホストコンピュータ３上のデバッガソフトウェア１０は、外部デバッグ装置２に記憶されているトレース情報を基にデータアクセスの実行履歴リスト（トレースリスト）を作成する。作成されるトレースリストにおいて、スタックアクセスと通常のデータアクセスの区別は存在しない。このため、スタックアクセスのみをトレースしたい場合や、通常のデータアクセスのみをトレースしたい場合には、図５に示すように、ホストコンピュータ３上のデバッガソフトウェア１０でトレースリストを解析し、スタックアクセスのトレースリストと通常のデータアクセスのトレースリストに分離するという工程が必要である。
【００１６】
例えばスタックアクセスと通常のデータアクセスのうち一方のみをトレースしたい場合、デバッグ専用ピン１７から出力されるトレースデータのうち、トレース対象以外のトレースデータは、最終的に破棄される。このため、デバッグ専用ピン１７に出力されるトレースデータに無駄が生じると同時に、デバッグ専用ピン１７の有限な帯域を圧迫する原因や外部デバッグ装置２内のトレースデータの記憶装置の容量を圧迫する原因となる。又、スタックアクセスと通常のデータアクセスを分離する工程では、その処理に外部デバッグ装置２やホストコンピュータ３の資源が使われ、これらに負荷がかかってしまう。
【００１７】
第２の課題は、スタックアクセスの特徴を積極的に活かしたデータトレース情報の圧縮についてである。
【００１８】
上記第１の課題で述べた通り、従来技術のデータトレースでは、スタックアクセスと通常のデータアクセスは区別がない。このため、データトレースのトレース情報のうち、アドレスに関しては全ビットの情報をベースに何らかの圧縮方法を用いて圧縮を行っている。即ち、スタックアクセスと通常のデータアクセスでは、同じアドレス圧縮方法を使用している。この結果、スタックアクセスの圧縮率は、通常のデータアクセスのそれと同等である。全ビットのアドレス情報をベースに行う圧縮技術は、例えば特許文献１や特許文献２において提案されている。
【００１９】
一方、スタックアクセスには、通常のデータアクセスと比較して、アクセスするアドレスに局所性及び連続性を持つという大きな特徴がある。ここでは、これらの特徴を説明する。図６〜図８は、３２ビットＣＰＵにおけるスタックアクセスを説明する図である。図６は汎用レジスタＲ０をプッシュするプッシュアクセスを示し、図７は汎用レジスタＲ０にポップするポップアクセスを示し、図８は汎用レジスタＲ０をスタックポインタの値に対して+0x8のオフセットでライトするスタックポインタ相対アクセスを示す。
【００２０】
スタックアクセスには、一般的にスタックへのプッシュ（PUSH）アクセスとスタックからのポップ（POP）アクセスがある。PUSHアクセスの具体的な例としては、PUSH命令、EIT（例外、割込み、トラップ）時のＣＰＵレジスタの退避アクセスがあり、これらを実行すると、図６に示すように、ＣＰＵはスタックアクセスするデータ幅に応じてスタックポインタ（SP）をディクリメントした後に、SPが示すアドレスへライトアクセスを行う。POPアクセスの具体的な例としては、POP命令、RETI命令（割込み復帰命令）時のＣＰＵレジスタの復帰アクセスがあり、これらを実行すると、図７に示すように、ＣＰＵはSPが示すアドレスからのリードアクセスを行った後に、スタックアクセスしたデータ幅に応じてSPをインクリメントする。尚、一般的に、PUSHアクセス及びPOPアクセスのデータ幅は固定であり、SPのインクリメント値及びディクリメント値も固定である。このように、PUSHアクセス又はPOPアクセスでは、SPはインクリメント、又は、ディクリメントされ、スタックアクセスのアドレスに局所性と連続性がある。
【００２１】
ＣＰＵの命令セットに依存するが、スタックアクセスには、上記のPOPアクセスとPUSHアクセス以外にSPを使ったアクセスがある。例えば、スタックポインタ相対アクセス（以下、「SP相対アクセス」と言う）を行うスタックポインタ相対アクセス命令がある。SP相対アクセス命令では、図８に示すように、ＣＰＵは、命令のオペランドに含まれるSPの値からのオフセット値により、SPから相対的に表現されるアドレスへリードアクセス、又は、ライトアクセスを行う。このSP相対アクセスには連続性はないが、SPからのオフセット範囲内でアクセスを行うという点から局所性がある。
【００２２】
これらの特徴を活用してスタックアクセスのトレース情報のアドレス部を圧縮することは、大変有益であると考えられる。しかし、デバッグ回路が監視するＣＰＵのデータアクセスにおいて、スタックアクセスと通常のデータトレースに区別がないため、容易にスタックアクセスが持つこれらの特徴に着目した圧縮を行うことはできない。
【００２３】
そこで、本発明は、少なくとも上記の第１の課題を解決し、更に望ましくは上記の第２の課題をも解決したデバッグシステム及びデバッグ回路を提供することを目的とする。つまり、本発明は、スタックアクセスと通常のデータアクセスのトレースを独立に行うことを可能とし、デバッグシステムの処理を低減することを少なくとも目的とし、更に望ましくはスタックアクセスのトレース情報について、スタックアクセスのアドレスが持つ局所性と連続性に着目した情報圧縮を可能にし、スタックアクセスのトレースの情報量を削減することをも目的とする。
【課題を解決するための手段】
【００２４】
上記の課題は、デバッグ対象のＣＰＵとデバッグ回路とを備えたデバッグシステムであって、該ＣＰＵは、該デバッグ回路が監視する該ＣＰＵのデータアクセス情報をスタックアクセス用情報とスタックアクセスを除くデータアクセス用情報として独立に出力する出力手段を備え、該デバッグ回路は、該ＣＰＵが出力するスタックアクセス用情報からスタックアクセスのトレース情報を、該ＣＰＵが出力するスタックアクセスを除くデータアクセス用情報からスタックアクセスを除くデータアクセスのトレース情報を、夫々独立に生成して出力するトレース手段を備えたことを特徴とするデバッグシステムによって達成できる。
【００２５】
上記の課題は、データアクセス情報をスタックアクセス用情報とスタックアクセスを除くデータアクセス用情報として独立に出力するＣＰＵをデバッグするデバッグ回路であって、該ＣＰＵが出力するスタックアクセス用情報からスタックアクセスのトレース情報を、該ＣＰＵが出力するスタックアクセスを除くデータアクセス用情報からスタックアクセスを除くデータアクセスのトレース情報を、夫々独立に生成して出力するトレース手段を備えたことを特徴とするデバッグ回路によって達成できる。
【発明の効果】
【００２６】
本発明によれば、少なくとも上記の第１の課題を解決し、更に望ましくは上記の第２の課題をも解決したデバッグシステム及びデバッグ回路を実現することができる。
【００２７】
つまり、本発明によれば、スタックアクセスと通常のデータアクセスのトレースを独立に行うことが可能となり、デバッグシステムの処理を低減することが可能となる。更に望ましくは、本発明によれば、スタックアクセスのトレース情報について、スタックアクセスのアドレスが持つ局所性と連続性に着目した情報圧縮が可能となり、スタックアクセスのトレースの情報量を削減することが可能となる。
【発明を実施するための最良の形態】
【００２８】
本発明は、マイクロコントローラ等に内蔵される情報処理装置（ＣＰＵ）のデバッグを支援するデバッグシステムに適用される。デバッグシステムが持つデータアクセスのトレース機能において、スタックアクセスとスタックアクセスを除くデータアクセスを独立したアクセスとして監視し、それらを選択的にトレースすることを特徴とする。
【００２９】
更に、スタックアクセスの局所性及び連続性を利用してスタックアクセスのトレース情報を圧縮するようにしても良い。
【００３０】
上記の第１の課題を解決する本発明の第１の特徴は、ＣＰＵとデバッグ回路の双方において、スタックアクセスと通常のデータアクセスを独立に扱う点にある。
【００３１】
具体的には、ＣＰＵは自らが行うデータアクセスが、スタックアクセスか、通常のデータアクセスかを識別する。ＣＰＵは、データトレース用にデバッグ回路が監視するデータアクセス情報を、スタックアクセス用情報と通常のデータアクセス用情報の２種類独立に生成して出力する。これらのアクセス情報を監視するデバッグ回路は、スタックアクセス用のトレース装置と通常のデータアクセス用のトレース装置を有する。スタックアクセス用トレース装置は、スタックアクセス用情報からスタックアクセスのトレース情報を生成し、通常のデータアクセス用トレース装置は通常のデータアクセス用情報から通常のデータアクセスのトレース情報を生成する。
【００３２】
更に、デバッグ回路は、スタックアクセスに対するトレース及びトレース出力を許可することを保持する手段と、通常のデータアクセスに対するトレース及びトレース出力を許可することを保持する手段と、スタックアクセスのトレース情報と通常のデータアクセスのトレース情報を多重化する手段を有し、トレース及びトレース出力を許可（有効）にする設定にしたスタックアクセス、及び、通常のデータアクセスのトレース情報をデバッグ専用ピンに出力する。
【００３３】
上記の第２の課題を解決する本発明の第２の特徴は、デバッグシステムにおいてスタックアクセスのトレース情報のアドレス部を、実行したスタックアクセスの情報を用いて絶対値及び相対値で表現する点にある。
【００３４】
本発明の第１の特徴により、デバッグシステムはスタックアクセスと通常のデータアクセスを独立にトレースすることが可能になる。これにより、スタックアクセスのトレースと通常のデータアクセスのトレースにおいて、別のトレース情報圧縮方法を適用できる。更に、スタックアクセスが持つアドレスの局所性と連続性に着目して、以下に示す方法によりトレース情報の圧縮を行う。
【００３５】
つまり、データアクセスのトレースでは、アクセスの種類、アドレス及びデータの３つの情報をベースにトレース情報を生成する。これに対して、スタックアクセスのトレースでは、スタックアクセス情報及びデータの２つの情報をベースにトレース情報を生成する。このスタックアクセス情報は、スタックアクセスに関する情報（PUSHアクセス、POPアクセス、SP相対リードアクセス、SP相対ライトアクセス、SP相対アクセスのオフセット値等）に加え、SPの書き換えに関する情報をも含む。
【００３６】
図６及び図７と共に説明したように、例えばPUSHアクセスやPOPアクセスでは、これらのスタックアクセスが発生した際に、一意にスタックアクセスのリード又はライトが決まる。又、現在のSP値を把握していれば、スタックアクセスのアドレスとスタックアクセス後のSP値も一意に決まる。例えば、図８と共に説明したSP相対リードアクセス又はSP相対ライトアクセスが発生した際、SPからのオフセット値の情報があり、且つ、現在のSP値を把握していれば、一意にスタックアクセスのアドレスが決まる。このように、実行したスタックアクセス情報が、スタックアクセスのアドレスをSPに対して相対値で表現している。
【００３７】
現在のSP値を把握していれば、実行したスタックアクセスのアドレスが一意に決まることは上記の通りである。現在のSP値を知るには、例えばSPの初期値設定や途中書き換え等によりSPの書き換えが発生した場合を利用する。スタックアクセス情報には、SPの書き換えに関する情報も含まれる。SPの書き換えが発生した場合、スタックアクセス情報でSPの書き換えという情報を生成する。同時に新しく書き換わったSP値の情報を生成する。このように、SP書き換え時はSP値を絶対値で表現する。絶対値で表現されたSP値は、PUSHアクセス又はPOPアクセスの実行後の更新を反映させることにより、常に現在のSP値を把握することが可能となる。
【００３８】
このように、スタックアクセスのアドレスではなくスタックアクセス情報を用いることにより、スタックアクセスのアドレスと現在のSP値をトレースすることが可能となる。又、スタックアクセス情報にはアクセスの種類が含まれるため、アクセスのリード又はライトを把握することが可能となる。
【００３９】
従って、ＣＰＵはスタックアクセス時に、スタックアクセス情報とスタックアクセスデータを生成する。デバッグ回路は、ＣＰＵが出力するスタックアクセス情報とスタックアクセスデータの２つの情報をベースに、スタックアクセスのトレース情報を生成する。スタックアクセスのトレース情報を受ける外部デバッグ装置、及び、デバッガソフトウェアは、これらの２つの情報からSP値とスタックアクセスのトレースを行う。
【００４０】
本発明の第１の特徴により、デバッグ回路は、スタックアクセスのトレース情報と通常のデータアクセスのトレース情報を独立したトレース情報として出力することができる。即ち、デバッグシステムは、スタックアクセスのトレース情報と通常のデータアクセスのトレース情報を独立に処理することが可能である。又、デバッグ回路は、スタックアクセスのトレース情報と通常のデータアクセスのトレース情報を選択的に出力することができる。即ち、デバッグシステムは所望のトレース対象のトレース情報だけを得て、処理することが可能となる。
【００４１】
本発明の第２の特徴により、デバッグ回路は、スタックアクセスのトレース情報をスタックアクセスのリード・ライト、アドレス及びデータではなく、発生したスタックアクセス情報とデータを使用することにより、より少ない情報量でトレース情報を表現できる。即ち、デバッグシステムのデータトレースのうち、スタックアクセスのトレース情報を圧縮することが可能になる。更に、この圧縮されたトレース情報を復元する過程では、スタックアクセスのトレースだけではなくSP値もトレースが可能となる。
【実施例１】
【００４２】
本発明の第１の実施例を説明する。第１実施例は、上記本発明の第１の特徴を有する。図９は第１実施例におけるデバッグシステムを示すブロック図であり、図１０は第１実施例のＣＰＵの構成を示すブロック図である。
【００４３】
図９に示すように、デバッグ対象の１チップのマイクロコントローラ（図示せず）内のＣＰＵ４１−１は、マイクロコントローラ内のデバッグ回路４２−１を介して外部デバッグ装置３２に接続されている。マイクロコントローラ自体の基本構成は、例えば図１に示すマイクロコントローラ１と同様であっても良い。
【００４４】
ＣＰＵ４１−１は、図１０に示す如く接続された命令実行制御部４１１、メモリアクセス制御部４１２、スタックポインタ（SP）４１３Ａを有するＣＰＵレジスタ４１３、データトレースインタフェース４１４、スタックトレースインタフェース４１５及びデータバスインタフェース４１６を有する。メモリアクセス時には、メモリアクセス制御部４１２からデータバスインタフェース４１６にアクセスが発生する。これと同時に、メモリアクセス制御部４１２は、アクセスがスタックアクセスであるか否かを示すＳＰアクセス信号を生成する。データトレースインタフェース４１４は、データアクセス検出時、且つ、ＳＰアクセス信号が「０」でありスタックアクセスではないことを示す場合にデータアクセスのトレース情報を生成する。データトレースインタフェース４１４で生成されたデータアクセスの種類、アドレス及びデータは、デバッグ回路４２−１内のトレース装置４９−１のデータトレース装置４９１−１に供給される。スタックトレースインタフェース４１５は、データアクセス検出時、且つ、ＳＰアクセス信号が「１」でありスタックアクセスであることを示す場合にスタックアクセスのトレース情報を生成する。スタックトレースインタフェース４１５で生成されたスタックアクセスの種類、アドレス及びデータは、デバッグ回路４２−１内のトレース装置４９−１ののスタックトレース装置４９２−１に供給される。データバスインタフェース４１６は、マイクロコントローラ内の記憶装置（図示せず）や周辺機能（図示せず）等とマイクロコントローラ内のバス（図示せず）を介して接続されている。
【００４５】
ＣＰＵ４１−１は、自らが実行したデータアクセスが、スタックアクセスか通常のデータアクセスか識別可能である。このことを利用して、ＣＰＵ４１−１は実行したスタックアクセスに対して、スタックアクセス専用にスタックアクセスの種類（リード・ライト情報）、スタックアクセスのアドレス及びスタックアクセスのデータを生成する。同様に、ＣＰＵ４１−１は実行した通常のデータアクセスに対して、データアクセス専用にデータアクセスの種類（リード・ライト情報、サイズ情報等）、データアクセスのアドレス及びデータアクセスのデータを生成する。
【００４６】
デバッグ回路４２−１は、デバッグ専用ピン４７と、デバッグ専用ピンへ出力するトレース情報を生成するトレース装置４９−１を有する。トレース装置４９−１は、図９に示す如く接続されたデータトレース装置４９１−１、スタックトレース装置４９２−１、データトレース許可の保持部４９３、多重化装置４９４及びスタックトレース許可の保持部４９５を有する。
【００４７】
トレース装置４９−１は、命令トレースを行う装置とデータトレースを行う装置を有するが、本発明の要旨は命令トレースとは直接関係がないため、図９においては命令トレースを行う装置の図示は省略する。データトレース許可の保持部４９３とスタックトレース許可の保持部４９５は、いずれもレジスタからなり、デバッグ制御用プログラムを実行するＣＰＵ４１−１からのアクセス又は外部デバッグ装置３２からのレジスタ書き換えコマンドにより設定される。データトレース装置４９１−１は、データトレース許可の保持部４９３により通常のデータトレースが許可されている場合、ＣＰＵ４１−１が生成したデータアクセスの種類（リード・ライト情報、サイズ情報等）、データアクセスのアドレス及びデータアクセスのデータを監視し、通常のデータアクセスのトレース情報を生成する。スタックトレース装置４９２−１は、スタックトレース許可の保持部４９５によりスタックトレースが許可されている場合、ＣＰＵ４１−１が生成したスタックアクセスの種類（リード・ライト情報）、スタックアクセスのアドレス及びスタックアクセスのデータを監視し、スタックアクセスのトレース情報を生成する。多重化装置４９４は、データトレース装置４９１−１が生成した通常のデータアクセスのトレース情報とスタックトレース装置４９２−１が生成したスタックアクセスのトレース情報を多重化して、トレース情報として出力する。このトレース情報は、デバッグ専用ピン４７を経由して外部デバッグ装置３２へ出力される。ここで、スタックトレース許可の保持部４９３とデータトレース許可の保持部４９５の設定により、スタックアクセスのみのトレース情報を出力する、通常のデータアクセスのトレース情報を出力する、両方のトレース情報を出力する、両方のトレース情報を出力しない、というように選択的にトレース情報を出力することができる。
【００４８】
図１１は、第１実施例におけるトレース情報フォーマットとデータトレースＩＤを説明する図である。図１１中、（ａ）は通常のデータアクセスのトレース情報フォーマットを示し、（ｂ）はスタックアクセスのトレース情報フォーマットを示し、（ｃ）はデータトレースＩＤを示す。図１１では、説明の便宜上、ＣＰＵ４１−１が３２ビットであるものとする。
【００４９】
図１１（ａ）に示すように、通常のデータアクセスのトレース情報フォーマットは、１ビットのデータトレースＩＤ、１ビットのリード・ライト情報、２ビットのサイズ情報、３２ビットのアドレス及び８ビット又は１６ビット又は３２ビットのデータで構成されている。又、図１１（ｂ）に示すように、スタックアクセスのトレース情報フォーマットは、１ビットのデータトレースＩＤ、１ビットのリード・ライト情報、３２ビットのアドレス及び３２ビットのデータで構成されている。更に、図１１（ｃ）に示すように、データトレースＩＤは１ビットであり、「0b0」であるとトレース情報が通常のデータアクセストレースであることを示し、「0b1」であるとトレース情報がスタックアクセストレースであることを示す。
【００５０】
図１１において、「アドレス」は、アクセス先のアドレスであり、例えば特許文献１や特許文献２において提案されている手法により圧縮可能であるが、ここでは３２ビットの全アドレス情報を用いるものとする。図１１（ａ）に示す通常のデータアクセスのトレース情報フォーマット上の「データ」は、８ビット、１６ビット、３２ビットと可変長であり、このビット長は「サイズ」で示され、この「サイズ」の値によりデータは８ビット又は１６ビット又は３２ビットで表現される。図１１（ｂ）に示すスタックアクセスのトレース情報フォーマット上の「データ」は、３２ビットの固定長であり、「サイズ」の情報は不要である。
【００５１】
外部デバッグ装置３２は、トレース情報を内部の記憶装置（図示せず）に格納する。外部デバッグ装置３２と接続するホストコンピュータ（図示せず）内のデバッガソフトウェアは、外部デバッグ装置３２からトレース情報を読み出し、データアクセスのトレース情報からトレースリストを作成し、トレース情報をプログラム開発者に提供する。デバッガソフトウェアは、図１１（ｃ）に示す「データトレースＩＤ」からそのトレース情報がスタックアクセスであるか通常のデータアクセスであるかを識別できるため、このトレース情報から容易にスタックアクセスのトレースリストと通常のデータアクセスの２つのトレースリストが作成できる。
【００５２】
尚、「データトレースＩＤ」は、スタックアクセスと通常のデータアクセスのうちどちらか一方のトレースをするという条件下では、デバッガソフトウェアがどちらのトレースを行っているかを把握できるため、省略することも可能である。
【実施例２】
【００５３】
本発明の第２の実施例を説明する。第２実施例は、上記本発明の第１の特徴を有する。図１２は第２実施例におけるデバッグシステムを示すブロック図であり、図１３は第２実施例のＣＰＵの構成を示すブロック図である。又、図１４は第２実施例におけるデータトレース装置の構成を示すブロック図であり、図１５は第２実施例におけるスタックトレース装置の構成を示すブロック図である。図１２及び図１３中、図９及び図１０と同一部分には同一符号を付し、その説明は省略する。
【００５４】
第２実施例と、上記第１の実施例との違いを説明する。上記第１の実施例では、ＣＰＵ４１−１は、実行したデータアクセスがスタックアクセスであるか通常のデータアクセスであるかを判断し、夫々のデータアクセスの情報を独立に生成する。又、デバッグ回路４２−１は、スタックアクセスと通常のデータアクセスのデータアクセス情報を監視する。これに対し、第２の実施例では、ＣＰＵ４１−２は実行したデータアクセスの情報と共にそのデータアクセスがスタックアクセスであるか否かを示すスタックアクセス信号を出力する。このため、図１３に示すように、ＣＰＵ４１−２にはデータトレースインタフェースが設けられていない。
【００５５】
デバッグ回路４２−２の構成は、基本的には上記第１の実施例と同様である。又、トレース装置４９−２の構成も、基本的には上記第１の実施例と同様である。上記第１実施例との相違点としては、第２実施例では、トレース装置４９−２内のデータトレース装置４９１−２とスタックトレース装置４９２−２が監視するＣＰＵ４１−２からの情報が上記第１実施例の場合とは異なる。データトレース装置４９１−２及びスタックトレース装置４９２−２は、ＣＰＵ４１−２が出力するデータアクセス情報とスタックアクセス信号を監視する。
【００５６】
データトレース装置４９１−２は、図１４に示す如く接続されたアクセス検出部４９１１、トレースデータバッファ４９１２及びバッファ制御部４９１３を有する。トレースデータバッファ４９１２には、図１１（ａ）に示すようなトレース情報フォーマットのトレースデータが、アクセス検出部４９１１のアクセス検出に応答してバッファ制御部４９１３の制御下で格納されて読み出される。データトレース装置４９１−２は、データトレース許可の保持部４９３により通常のデータアクセスのトレースが許可され、且つ、スタックアクセス信号が「０」の場合（即ち、スタックアクセスではない）、通常のデータアクセスのトレース情報を生成する。
【００５７】
スタックトレース装置４９２−２は、図１５に示す如く接続されたアクセス検出部４９２１、トレースデータバッファ４９２２及びバッファ制御部４９２３を有する。トレースデータバッファ４９２２には、図１１（ｂ）に示すようなトレース情報フォーマットのトレースデータが、アクセス検出部４９２１のアクセス検出に応答してバッファ制御部４９２３の制御下で格納されて読み出される。スタックトレース装置４９２−２は、スタックトレース許可の保持部４９５によりスタックアクセスのトレースが許可され、且つ、スタックアクセス信号が「１」の場合（即ち、スタックアクセスである）、スタックアクセスのトレース情報を生成する。トレース装置４９−２内の多重化装置４９４以降の処理は、上記第１の実施例と同様である。
【実施例３】
【００５８】
本発明の第３の実施例を説明する。第３実施例は、上記本発明の第１の特徴を有する。図１６は第３実施例におけるデバッグシステムを示すブロック図であり、図１７は第３実施例のスタックトレース装置の構成を示すブロック図である。図１６中、図９と同一部分には同一符号を付し、その説明は省略する。又、図１７中、図１５と同一部分には同一符号を付し、その説明は省略する。第３実施例では、ＣＰＵ４１−３が複数のSPを有する。
【００５９】
第３実施例と、上記第１の実施例との違いを説明する。上記第１の実施例では、図９に示すようにＣＰＵ４１−１は１つのSP４１３Ａを有する。これに対し、第３実施例では、図１６に示すようにＣＰＵ４１−３は、ユーザ用のSP（USP）４１３Ｂとシステム用のSP（SSP）４１３Ｃの２つのSPを有する。又、第３実施例では、複数のSP４１３Ｂ，４１３ＣのうちどのSPによるスタックアクセスであるかを識別するための情報として、ＣＰＵ４１−３はスタックＩＤ情報を他のスタックアクセスの情報と共に生成する。デバッグ回路４２−３は、このスタックＩＤ情報をスタックアクセスのトレース情報に盛り込み、トレース装置４９−３内の多重化装置４９４を経由してトレース情報を外部デバッグ装置３２へ出力する。外部デバッグ装置３２の記憶装置には、スタックＩＤ情報を含むトレース情報を格納する。
【００６０】
スタックトレース装置４９２−３は、図１７に示す如く接続されたアクセス検出部４９２１、トレースデータバッファ４９２２、バッファ制御部４９２３及びスタックＩＤデコーダ４９２４を有する。トレースデータバッファ４９２２には、スタックＩＤデコーダ４９２４によりスタックアクセスＩＤ情報をデコードして得られたトレース情報用のスタックＩＤを含む図１８（ｂ）に示すようなトレース情報フォーマットのトレースデータが、アクセス検出部４９２１のアクセス検出に応答してバッファ制御部４９２３の制御下で格納されて読み出される。スタックトレース装置４９２−３は、スタックトレース許可の保持部４９５によりスタックアクセスのトレースが許可され、且つ、スタックアクセス信号が「１」の場合（即ち、スタックアクセスである）、スタックアクセスのトレース情報を生成する。トレース装置４９−３内の多重化装置４９４以降の処理は、上記第１の実施例と同様である。
【００６１】
図１８は第３実施例におけるトレース情報フォーマットとデータトレースＩＤを説明する図である。図１８中、図１１と同一部分には同一符号を付し、その説明は省略する。図１１に示したフォーマットとの違いは、図１８のフォーマットではスタックＩＤが設けられている点である。その他のフォーマットは、基本的には図１１と同じである。スタックＩＤは、ＣＰＵ４１−３が複数のSP４１３Ｂ，４１３Ｃを有する場合にどのSPを用いたスタックアクセスであるかを識別するための情報を示す。USP４１３ＣとSSP４１３Ｂの２つのSPを持つＣＰＵ４１−３において、スタックＩＤは図１８（ｃ）のように割当てることで、デバッガソフトウェアは、トレース用USP４１３ＣとUSPのスタックアクセスのトレースリスト構築、トレース用SSP４１３ＢとSSPのスタックアクセスのトレースリスト構築を行うことが可能になる。
【実施例４】
【００６２】
本発明の第４の実施例を説明する。第４実施例は、上記本発明の第２の特徴を有する。図１９は第４実施例におけるデバッグシステムを示すブロック図であり、図２０は第４実施例のスタックトレース装置の構成を示すブロック図である。図１９中、図９と同一部分には同一符号を付し、その説明は省略する。又、図２０中、図１５と同一部分には同一符号を付し、その説明は省略する。
【００６３】
第４実施例と、上記第１の実施例との違いを説明する。上記第１の実施例では、ＣＰＵ４１−１は実行したスタックアクセスに対して、スタックアクセス専用にスタックアクセスの種類（リード・ライト情報）、スタックアクセスのアドレス及びスタックアクセスのデータを生成する。これに対し、第４実施例では、ＣＰＵ４１−４は実行したスタックアクセスに対して、スタックアクセス専用にスタックアクセス情報（スタックアクセス情報とスタックアクセス付加情報の２種）とスタックアクセスデータを生成する。デバッグ回路４２−４内のトレース装置４９−４のスタックトレース装置４９２−４は、スタックトレース許可の保持部４９５によりスタックトレースが許可されている場合、ＣＰＵ４１−４が生成したこれらの情報を監視し、スタックアクセスのトレース情報を生成する。スタックトレース装置４９２−４で生成されるスタックアクセスのトレース情報は、上記第１実施例の場合と同様に多重化装置４９４を経由してトレース情報としてデバッグ専用ピン４７に出力され、外部デバッグ装置３２へ出力される。
【００６４】
スタックトレース装置４９２−４は、図２０に示す如く接続されたアクセス検出部４９２１、トレースデータバッファ４９２２、バッファ制御部４９２３、マルチプレクサ部４９２５及びセレクタ部４９２６を有する。トレースデータバッファ４９２２には、トレースデータがアクセス検出部４９２１のアクセス検出に応答してバッファ制御部４９２３の制御下で格納されて読み出される。トレースデータバッファ４９２２から読み出されたトレースデータは、マルチプレクサ部４９２５で多重化され、セレクタ部４９２６により図２１（ａ）に示すスタックアクセス付加情報を含まないタイプ１のトレース情報フォーマットのトレース情報又は図２１（ｂ）に示すスタックアクセス付加情報を含むタイプ２のトレース情報フォーマットのトレース情報が選択的に出力される。タイプ１又タイプ２のトレース情報のどちらをセレクタ部４９２６から選択出力するかは、スタックアクセス情報に基づいて制御される。スタックトレース装置４９２−４は、スタックトレース許可の保持部４９５によりスタックアクセスのトレースが許可され、且つ、スタックアクセス信号が「１」の場合（即ち、スタックアクセスである）、スタックアクセスのトレース情報を生成する。トレース装置４９−３内の多重化装置４９４以降の処理は、上記第１の実施例と同様である。
【００６５】
図２１は、第４実施例におけるトレース情報フォーマット、スタックアクセス情報及びスタックアクセス付加情報を説明する図である。トレース情報フォーマットには、PUSHアクセス、POPアクセス及びSP書き換え時に使用する図２１（ａ）に示すタイプ１と、SP相対アクセス時に使用する図２１（ｂ）に示すタイプ２とがある。タイプ１とタイプ２のトレース情報フォーマットには、データトレースＩＤ、スタックアクセス情報及びスタックアクセスデータが含まれ、これに加えてタイプ２にはスタックアクセス付加情報が含まれる。データトレースＩＤは、上記本発明の第１の特徴で説明した通りである。スタックアクセス情報は、実行したスタックアクセスの種類（PUSHアクセス、POPアクセス、SP相対アクセス又はSP書き換え）を示し、図２１（ｃ）に示すように、スタックアクセスデータはスタックアクセスに関連したデータ（PUSHアクセス時、POPアクセス時又はSP相対アクセス時のアクセスデータ、SP書き換え時の新しいSP値）を示す。スタックアクセス付加情報は、SP相対アクセス時の付加的なアクセス情報を示し、具体的には図２１（ｄ）に示すように、SP相対アクセス時のリード・ライトとSP値に対するオフセット値を示す。
【００６６】
次に、このスタックアクセスのトレース情報のフォーマットで、各スタックアクセスをトレースした場合のトレースデータと、デバッガソフトウェアにおいてトレースデータから復元されるSP（トレース用SP）とスタックアクセスのトレースリストを構築する様子を示す。
【００６７】
図２２はSP書き換え時のトレースデータと、トレースデータからトレースされるトレース用SPと、トレースリスト構築の様子を説明する図である。図２２中、（ａ）はスタックアクセスのトレースデータ、（ｂ）はトレース用SP（トレースデータ反映以前）、（ｃ）はトレース用SP（トレースデータ反映以前）、（ｄ）はスタックアクセスのトレースリスト構築を示す。スタックアクセス情報は、「0b11」でSP書き換えを示し、スタックアクセスデータの「0x00004000」は新しいSP値を示す。これにより、トレース用SPはトレースデータ反映以前の値に関係なく、スタックアクセスデータにある値がトレース用SPに上書きされる。SP書き換え時は、スタックアクセスのイベントではないため、スタックアクセスのトレースリストにイベントは記録されない。
【００６８】
図２３はPUSHアクセス時のトレースデータと、トレースデータからトレースされるトレース用SPとトレースリスト構築の様子を説明する図である。図２３中、（ａ）はスタックアクセスのトレースデータ、（ｂ）はトレース用SP（トレースデータ反映以前）、（ｃ）はトレース用SP（トレースデータ反映以前）、（ｄ）はスタックアクセスのトレースリスト構築を示す。スタックアクセス情報は、「0b00」PUSHアクセスを示す。スタックアクセスデータの「0x01234567」はPUSHしたデータ値を示す。PUSHアクセスにより、トレース用SPはトレースデータ反映以前の値「0x00004000」からPUSHしたデータ幅分のアドレスをディクリメントした「0x00003FFC」となる。PUSHアクセスによるアクセスアドレスは「0x00003FFC」である。即ち、スタックアクセスとしては、アドレス「0x00003FFC」へデータ「0x01234567」をライトしたことになる。よって、トレースリストには、「アドレス0x00003FFCへデータ0x01234567をライト」というイベントが記録される。
【００６９】
図２４はPOPアクセス時のトレースデータと、トレースデータからトレースされるトレース用SPとトレースリスト構築の様子を説明する図である。図２４中、（ａ）はスタックアクセスのトレースデータ、（ｂ）はトレース用SP（トレースデータ反映以前）、（ｃ）はトレース用SP（トレースデータ反映以前）、（ｄ）はスタックアクセスのトレースリスト構築を示す。スタックアクセス情報は、「0b01」POPアクセスを示す。スタックアクセスデータの「0x89ABCDEF」はPOPしたデータ値を示す。POPアクセスによるアクセスアドレスは「0x00003FF0」である。即ち、スタックアクセスとしては、アドレス「0x00003FF0」からデータ「0x89ABCDEF」をリードしたことになる。よって、トレースリストには、「アドレス0x00003FF0からデータ0x89ABCDEFをリード」というイベントが記録される。POPアクセスにより、トレース用SPはトレースデータ反映以前の値「0x00003FF0」からPOPしたデータ幅分のアドレスをインクリメントした「0x00003FF4」となる。
【００７０】
図２５はSP相対アクセス時のトレースデータと、トレースデータからトレースされるトレース用SPとトレースリスト構築の様子を説明する図である。図２５中、（ａ）はスタックアクセスのトレースデータ、（ｂ）はトレース用SP（トレースデータ反映以前）、（ｃ）はトレース用SP（トレースデータ反映以前）、（ｄ）はスタックアクセスのトレースリスト構築を示す。スタックアクセス情報は「0b10」でSP相対アクセスを示す。スタックアクセス付加情報は「0x14」であり、ｂit４の「0b1」でライトアクセスを示し、ｂit3-0の「0x4」でSP値に対するオフセット値が「+0x10」（０x４は６ビットオフセット値の上位４ビット）であることを示す。スタックアクセスデータの「0xF0E1D2C3」はSP相対アクセスのデータ値を示す。SP相対アクセスアクセスの発生は、トレース用SPに影響を与えないため、トレース用SPはトレースデータ反映以前の値「0x00003FC0」を維持する。SP相対アクセスによるアクセスアドレスはSP値「0x00003FC0」とオフセット値「+0x10」から「0x00003FD0」である。又、SP相対アクセスは、ライトアクセスである。即ち、スタックアクセスとしては、アドレス「0z00003FD0」へデータ「0xF0E1D2C3」をライトしたことになる。よって、トレースリストには、「アドレス0x00003FD0へデータ0xF0E1D2C3をライト」というイベントが記録される。
【００７１】
以上のような方法により、ＣＰＵ４１−４とデバッグ回路４２−４は、スタックアクセス情報をベースにしたスタックアクセスのトレース情報を生成し、デバッガソフトウェアはそのトレースデータからトレース用SPとスタックアクセスのトレースリストを構築することが可能になる。
【００７２】
尚、第４実施例では、１つのSP４１３Ａを有するＣＰＵ４１−４のトレースについて説明したが、上記第３実施例のようにＣＰＵが複数のSPを有する場合にも上記スタックＩＤを追加することで容易に対応が可能である。
【００７３】
又、第４実施例は、上記第３実施例に限らず、上記第１実施例又は上記第２実施例と適宜組み合わせても良いことは言うまでもない。
【００７４】
本発明の第１の特徴によれば、デバッグシステムは、スタックアクセスと通常のデータアクセスのトレースを独立に行うことが可能になる。これにより、デバッグシステムは、スタックアクセスと通常のデータアクセスが混在するトレース情報を分析し、これらを分離する工程を省くことが可能になり、デバッグシステムの処理を低減することができる。又、本発明の第１の特徴によれば、スタックアクセスと通常のデータアクセスを選択的にトレース情報として出力することが可能になる。これにより、一方のトレースデータを得る場合において、所望しない他方のトレースによる無駄なトレースデータの生成、無駄なトレースデータのデバッグ専用ピンへの出力による帯域の圧迫、無駄なトレースデータによるトレースデータの記憶容量の圧迫をなくすことができる。言い換えれば、デバッグシステムの資源への負荷を効果的に低減できる。この結果、デバッグシステムの資源が従来技術と同じ場合では、データトレース処理の高速化が図れる。又、従来技術と比較して、同じデータトレース処理に必要なデバッグシステムの資源も低減可能となる。
【００７５】
本発明の第２の特徴によれば、スタックアクセスのトレース情報について、スタックアクセスのアドレスが持つ局所性と連続性に着目した情報圧縮が可能になる。具体的には、スタックアクセスのトレース情報にスタックアクセスのアドレスではなくスタックアクセス情報を用いる。そして、スタックアクセス時はSPに対するアクセスアドレスとSPの更新を相対値で表現し、SP書き換え時は新しいSP値を絶対値で表現する。この表現手法により、スタックアクセスのトレース情報にスタックアクセスのアドレス情報が不要になる。この結果、スタックアクセスのトレースの情報量を削減し、デバッグ専用ピンの帯域への負荷を低減することができる。又、トレースリストを構築する過程でSPを復元するため、SPのトレースが同時にできるという利点もある。尚、本発明の第２の特徴によれば、従来技術では必要なかったSP書き換えに関する情報をトレース情報として生成するため、トレース対象が増加する。しかし、SPの書き換えはプログラム実行中に何度も行うものではないので、SP書き換えをトレースすることによるトレース対象の増加の悪影響、即ち、トレース情報の増加による悪影響は、トレース情報の圧縮による効果に対して十分小さいと考えられる。
【００７６】
次に、本発明の第２の特徴を有する第４実施例におけるスタックアクセスのトレース情報の圧縮効率を簡単に見積もる。本発明の第２の特徴を用いない未圧縮トレース情報として図１１（ｂ）のフォーマットを想定し、本発明の第２の特徴を用いる圧縮トレース情報として図２１ （ａ）及び図２１ （ｂ）のフォーマットを想定する。この場合、未圧縮トレース情報では、アドレス情報は３２ビット、リード・ライト情報は１ビット、データ情報は３２ビットである。他方、圧縮トレース情報では、アクセス情報はPUSHアクセス、POPアクセス又はSP書き換えの場合は２ビット、SP相対アクセスの場合は７ビット、データ情報は３２ビットである。これより、データ情報を除く情報の圧縮率は、PUSHアクセス、POPアクセス又はSP書き換えの場合は約１／１６、SP相対アクセスの場合は約１／５であり、全情報における圧縮率はPUSHアクセス、POPアクセス又はSP書き換えの場合は約１／２、SP相対アクセスの場合は約３／５となる。
【００７７】
尚、本発明は、以下に付記する発明をも包含するものである。
（付記１）  デバッグ対象のＣＰＵとデバッグ回路とを備えたデバッグシステムであって、
該ＣＰＵは、該デバッグ回路が監視する該ＣＰＵのデータアクセス情報をスタックアクセス用情報とスタックアクセスを除くデータアクセス用情報として独立に出力する出力手段を備え、
該デバッグ回路は、該ＣＰＵが出力するスタックアクセス用情報からスタックアクセスのトレース情報を、該ＣＰＵが出力するスタックアクセスを除くデータアクセス用情報からスタックアクセスを除くデータアクセスのトレース情報を、夫々独立に生成して出力するトレース手段を備えたことを特徴とするデバッグシステム。
（付記２）  該出力手段は、該デバッグ回路が監視する該ＣＰＵのデータアクセス情報に、データアクセスの情報とデータアクセスがスタックアクセスか否かを示す信号を含めて出力し、
該トレース手段は、該ＣＰＵのデータアクセスがスタックアクセスか否かを示す信号からスタックアクセスのトレース情報とスタックアクセスを除くデータアクセスのトレース情報を、夫々独立に生成して出力することを特徴とする付記１記載のデバッグシステム。
（付記３）  該トレース手段は、スタックアクセスのトレース情報の生成とスタックアクセスを除くデータアクセスのトレース情報の生成を独立に許可する手段と、夫々のトレース情報を多重化する手段とを有し、スタックアクセスのトレース情報とスタックアクセスを除くデータアクセスのトレース情報を選択的にトレースすることを特徴とする付記１又は２記載のデバッグシステム。
（付記４）  該デバッグ回路が出力するスタックアクセスのトレース情報とスタックアクセスを除くデータアクセスのトレース情報から、スタックアクセスのトレースとスタックアクセスを除くデータアクセスのトレースを独立に行う外部デバッグ装置を更に備えたことを特徴とする付記１乃至る３のいずれか１項記載のデバッグシステム。
（付記５）  該出力手段は、該デバッグ回路が監視するスタックアクセス用情報に、スタックアクセスを実行した場合には実行したスタックアクセスの種類、スタックアクセスのデータ及びスタックポインタからのオフセット値の情報を含め、スタックポインタの書き換えた場合にはスタックポインタ書き換えを実行した情報と新しいスタックポインタ値の情報を含め、
該トレース手段は、該ＣＰＵが出力するスタックアクセス用情報に基づいて、スタックアクセスを実行した場合には実行したスタックアクセスの種類、スタックアクセスのデータ及びスタックポインタからのオフセット値の情報を含むトレース情報を生成して出力し、スタックポインタの書き換えた場合にはスタックポインタ書き換えを実行した情報と新しいスタックポインタ値の情報を含むトレース情報を生成して出力し、
該外部デバッグ装置は、該デバッグ回路が出力するスタックアクセスのトレース情報からスタックポインタをトレースすることを特徴とする付記４記載のデバッグシステム。
（付記６）  該外部デバッグ装置は、該トレース手段が出力するスタックアクセスのトレース情報からスタックアクセスをトレースすることを特徴とする付記４記載のデバッグシステム。
（付記７）  該出力手段は、該ＣＰＵがスタックプッシュアクセスを実行した場合にスタックプッシュアクセスの発生とそのスタックアクセスのデータを該デバッグ回路が監視するスタックアクセス用情報に含めて出力し、
該トレース手段は、該ＣＰＵが出力するスタックアクセス情報からスタックプッシュアクセスとそのスタックアクセスのデータを含むスタックアクセスのトレース情報を生成して出力し、
該外部デバッグ装置は、該デバッグ回路が出力するスタックアクセスのトレース情報のうち、発生したスタックアクセスがスタックプッシュアクセスであることを示す情報に基づいてスタックポインタのディクリメントをトレースし、発生したスタックアクセスがスタックプッシュアクセスであることを示す情報と発生したスタックアクセスのデータの情報に基づいてスタックポインタが示すアドレスへのライトアクセスとそのライトデータをトレースすることを特徴とする付記５又は６記載のデバッグシステム。
（付記８）  該出力手段は、該ＣＰＵがスタックポップアクセスを実行した場合にスタックポップアクセスの発生とそのスタックアクセスのデータを該デバッグ回路が監視するスタックアクセス用情報に含めて出力し、
該トレース手段は、該ＣＰＵが出力するスタックアクセス情報からスタックポップアクセスと、そのスタックアクセスのデータを含むスタックアクセスのトレース情報を生成して出力し、
該外部デバッグ装置は、該デバッグ回路が出力するスタックアクセスのトレース情報のうち、発生したスタックアクセスがスタックポップアクセスであるという情報と発生したスタックアクセスのデータの情報とに基づいて、スタックポインタが示すアドレスへのリードアクセスとそのリードデータをトレースし、発生したスタックアクセスがスタックポップアクセスであることを示す情報に基づいてスタックポインタのインクリメントをトレースすることを特徴とする付記５又は６記載のデバッグシステム。
（付記９）  該出力手段は、該ＣＰＵがスタックポインタ相対アクセスを実行した場合にスタックポインタ相対アクセスの発生と、アクセスのリード・ライトと、スタックポインタからの相対アドレス値と、スタックアクセスのデータを、該デバッグ回路が監視するスタックアクセス用情報に含めて出力し、
該トレース手段は、該ＣＰＵが出力するスタックアクセス情報からスタックポインタ相対アクセスと、アクセスのリード・ライトと、スタックポインタからの相対アドレス値と、スタックアクセスのデータを含むスタックアクセスのトレース情報を生成して出力し、
該外部デバッグ装置は、該デバッグ回路が出力するスタックアクセスのトレース情報の各情報に基づいて、スタックポインタとスタックポインタからのオフセット値の和が示すアドレスへのリードアクセスとそのリードデータ、又は、ライトアクセスとそのライトデータをトレースすることを特徴とする付記５又は６記載のデバッグシステム。
（付記１０）  該出力手段は、該ＣＰＵがスタックポインタの書き換えを実行した場合にスタックポインタ書き換えの発生と、書き換えによる新しいスタックポインタ値を、該デバッグ回路が監視するスタックアクセス用情報に含めて出力し、
該トレース手段は、該ＣＰＵが出力するスタックアクセス情報からスタックポインタ書き換えの発生と、書き換えによる新しいスタックポインタ値を含むスタックアクセスのトレース情報を生成して出力し、
該外部デバッグ装置は、該デバッグ回路が出力するスタックアクセスのトレース情報の各情報に基づいて、スタックポインタが書き換えられたことと、書き換えによる新しいスタックポインタ値をトレースすることを特徴とする付記５又は６記載のデバッグシステム。
（付記１１）  データアクセス情報をスタックアクセス用情報とスタックアクセスを除くデータアクセス用情報として独立に出力するＣＰＵをデバッグするデバッグ回路であって、
該ＣＰＵが出力するスタックアクセス用情報からスタックアクセスのトレース情報を、該ＣＰＵが出力するスタックアクセスを除くデータアクセス用情報からスタックアクセスを除くデータアクセスのトレース情報を、夫々独立に生成して出力するトレース手段を備えたことを特徴とするデバッグ回路。
（付記１２）  該ＣＰＵが出力するデータアクセス情報は、データアクセスの情報とデータアクセスがスタックアクセスか否かを示す信号を含み、
該トレース手段は、該ＣＰＵのデータアクセスがスタックアクセスか否かを示す信号からスタックアクセスのトレース情報とスタックアクセスを除くデータアクセスのトレース情報を、夫々独立に生成して出力することを特徴とする付記１１記載のデバッグ回路。
（付記１３）  該トレース手段は、スタックアクセスのトレース情報の生成とスタックアクセスを除くデータアクセスのトレース情報の生成を独立に許可する手段と、夫々のトレース情報を多重化する手段とを有し、スタックアクセスのトレース情報とスタックアクセスを除くデータアクセスのトレース情報を選択的にトレースすることを特徴とする付記１１又は１２記載のデバッグ回路。
（付記１４）  該ＣＰＵが出力するスタックアクセス用情報は、スタックアクセスを実行した場合には実行したスタックアクセスの種類、スタックアクセスのデータ及びスタックポインタからのオフセット値の情報を含み、スタックポインタの書き換えた場合にはスタックポインタ書き換えを実行した情報と新しいスタックポインタ値の情報を含み、
該トレース手段は、該ＣＰＵが出力するスタックアクセス用情報に基づいて、スタックアクセスを実行した場合には実行したスタックアクセスの種類、スタックアクセスのデータ及びスタックポインタからのオフセット値の情報を含むトレース情報を生成して出力し、スタックポインタの書き換えた場合にはスタックポインタ書き換えを実行した情報と新しいスタックポインタ値の情報を含むトレース情報を生成して出力することを特徴とする付記１１乃至１３のいずれか１項記載のデバッグ回路。
（付記１６）  デバッグ回路により監視される情報処理装置であって、
該情報処理装置のデータアクセス情報をスタックアクセス用情報とスタックアクセスを除くデータアクセス用情報として独立に該デバッグ回路へ出力する出力手段を備えたことを特徴とする情報処理装置。
（付記１７）  該出力手段は、データアクセス情報に、データアクセスの情報とデータアクセスがスタックアクセスか否かを示す信号を含めて出力することを特徴とする付記１６記載の情報処理装置。
（付記１８）  該出力手段は、スタックアクセス用情報に、スタックアクセスを実行した場合には実行したスタックアクセスの種類、スタックアクセスのデータ及びスタックポインタからのオフセット値の情報を含め、スタックポインタの書き換えた場合にはスタックポインタ書き換えを実行した情報と新しいスタックポインタ値の情報を含めることを特徴とする付記１６又は１７記載の情報処理装置。
（付記１９）  該出力手段は、該情報処理装置がスタックプッシュアクセスを実行した場合にスタックプッシュアクセスの発生とそのスタックアクセスのデータをスタックアクセス用情報に含めて出力することを特徴とする付記１６乃至１８のいずれか１項記載の情報処理装置。
（付記２０）  該出力手段は、該情報処理装置がスタックポップアクセスを実行した場合にスタックポップアクセスの発生とそのスタックアクセスのデータを該デバッグ回路が監視するスタックアクセス用情報に含めて出力することを特徴とする付記１６乃至１８のいずれか１項記載の情報処理装置。
（付記２１）  該出力手段は、該情報処理装置がスタックポインタ相対アクセスを実行した場合にスタックポインタ相対アクセスの発生と、アクセスのリード・ライトと、スタックポインタからの相対アドレス値と、スタックアクセスのデータを、該デバッグ回路が監視するスタックアクセス用情報に含めて出力することを特徴とする付記１６乃至１８のいずれか１項記載の情報処理装置。
（付記２２）  該出力手段は、該情報処理装置がスタックポインタの書き換えを実行した場合にスタックポインタ書き換えの発生と、書き換えによる新しいスタックポインタ値を、該デバッグ回路が監視するスタックアクセス用情報に含めて出力することを特徴とする付記１６乃至１８のいずれか１項記載の情報処理装置。
【００７８】
以上、本発明を実施例により説明したが、本発明は上記実施例に限定されるものではなく、本発明の範囲内で種々の変形及び改良が可能であることは言うまでもない。
【図面の簡単な説明】
【００７９】
【図１】従来のデバッグシステムの一例を示すブロック図である。
【図２】デバッグ回路及び外部デバッグ装置の構成を示すブロック図である。
【図３】データトレース機能を説明する図である。
【図４】スタックアクセス及び通常のデータアクセスの抽出を説明する図である。
【図５】データトレースのトレースリストの解析及び分離を説明する図である。
【図６】３２ビットＣＰＵにおけるスタックアクセスを説明する図である。
【図７】３２ビットＣＰＵにおけるスタックアクセスを説明する図である。
【図８】３２ビットＣＰＵにおけるスタックアクセスを説明する図である。
【図９】第１実施例におけるデバッグシステムを示すブロック図である。
【図１０】第１実施例のＣＰＵの構成を示すブロック図である。
【図１１】第１実施例におけるトレース情報フォーマットとデータトレースＩＤを説明する図である。
【図１２】第２実施例におけるデバッグシステムを示すブロック図である。
【図１３】第２実施例のＣＰＵの構成を示すブロック図である。
【図１４】第２実施例におけるデータトレース装置の構成を示すブロック図である。
【図１５】第２実施例におけるスタックトレース装置の構成を示すブロック図である。
【図１６】第３実施例におけるデバッグシステムを示すブロック図である。
【図１７】第３実施例のスタックトレース装置の構成を示すブロック図である。
【図１８】第３実施例におけるトレース情報フォーマットとデータトレースＩＤを説明する図である。
【図１９】第４実施例におけるデバッグシステムを示すブロック図である。
【図２０】第４実施例のスタックトレース装置の構成を示すブロック図である。
【図２１】第４実施例におけるトレース情報フォーマット、スタックアクセス情報及びスタックアクセス付加情報を説明する図である。
【図２２】SP書き換え時のトレースデータ、トレース用ＳＰ及びトレースリストの構築を説明する図である。
【図２３】PUSHアクセス時のトレースデータ、トレース用ＳＰ及びトレースリストの構築を説明する図である。
【図２４】POPアクセス時のトレースデータ、トレース用ＳＰ及びトレースリストの構築を説明する図である。
【図２５】SP相対アクセス時のトレースデータ、トレース用ＳＰ及びトレースリストの構築を説明する図である。
【符号の説明】
【００８０】
３２      外部デバッグ装置
４１−１〜４１−４      ＣＰＵ
４２−１〜４２−４      デバッグ回路
４９−１〜４９−４      トレース装置
４９１−１，４９１−２      データトレース装置
４９２−１〜４９２−４      スタックトレース装置
【図１】
2008065441.tif 000003
【図２】
2008065441.tif 000004
【図３】
2008065441.tif 000005
【図４】
2008065441.tif 000006
【図５】
2008065441.tif 000007
【図６】
2008065441.tif 000008
【図７】
2008065441.tif 000009
【図８】
2008065441.tif 000010
【図９】
2008065441.tif 000011
【図１０】
2008065441.tif 000012
【図１１】
2008065441.tif 000013
【図１２】
2008065441.tif 000014
【図１３】
2008065441.tif 000015
【図１４】
2008065441.tif 000016
【図１５】
2008065441.tif 000017
【図１６】
2008065441.tif 000018
【図１７】
2008065441.tif 000019
【図１８】
2008065441.tif 000020
【図１９】
2008065441.tif 000021
【図２０】
2008065441.tif 000022
【図２１】
2008065441.tif 000023
【図２２】
2008065441.tif 000024
【図２３】
2008065441.tif 000025
【図２４】
2008065441.tif 000026
【図２５】
2008065441.tif 000027