(57)【特許請求の範囲】
【請求項１】
ターゲットプログラムを実行するＣＰＵと、
前記ＣＰＵから入力する命令アドレス・命令コードデータが予めイベント条件として設定された所定の命令アドレスまたは所定の命令コードと一致することを検出したときにプログラムのある範囲のみを繰り返しトレースするセクショントレースのセクショントレース開始信号をアクティブにして出力するイベント検出部と、
前記命令アドレス・命令コードデータおよび前記セクショントレース開始信号を入力し前記命令アドレス・命令コードデータの命令コードが分岐命令であるかまたはセクショントレース開始信号がアクティブであるときには命令アドレスを非圧縮のままトレースデータとして出力し、前記命令アドレス・命令コードデータの命令コードが分岐命令でなく且つ前記セクショントレース開始信号がアクティブでないときには前記命令アドレス・命令コードデータの命令アドレスを圧縮して圧縮命令アドレスを生成し複数個の前記圧縮命令アドレスを合成してトレースデータとして出力するトレースデータ作成部と、
前記トレースデータを蓄積するトレースメモリとを備えることを特徴とするプログラム開発支援装置。
【請求項２】
ターゲットプログラムを実行するＣＰＵと、
前記ＣＰＵから入力する命令アドレス・命令コードデータが予めイベント条件として設定された所定の命令アドレスまたは所定の命令コードと一致することを検出したときにプログラムのある範囲のみを繰り返しトレースするセクショントレースのセクショントレース開始信号をアクティブにして出力するとともにデータ取り込み信号を所定の期間アクティブに維持するイベント検出部と、
データ取り込み信号がアクティブのときには前記命令アドレス・命令コードデータを取り込み、前記命令アドレス・命令コードデータの命令コードが分岐命令であるかまたは前記セクショントレース開始信号がアクティブであるときには命令アドレスを非圧縮のままトレースデータとして出力し、前記命令アドレス・命令コードデータの命令コードが分岐命令でなく且つ前記セクショントレース開始信号がアクティブでないときには現在の命令アドレス・命令コードデータの命令アドレスの値からひとつ前の命令アドレス・命令コードデータの命令アドレスの値を減じた差分値の圧縮命令アドレスを生成し連続する複数の前記命令アドレス・命令コードデータに対応する複数の前記圧縮命令アドレスを合成してトレースデータとして出力するトレースデータ作成部と、
前記トレースデータを蓄積するトレースメモリとを備えることを特徴とするプログラム開発支援装置。
【請求項３】
前記イベント検出部が、
予めイベント条件として外部から所定の命令アドレスまたは所定の命令コードが設定されているときには前記所定の命令アドレスまたは所定の命令コードとともにデータ取り込み信号のアクティブ期間をも保持するイベント設定回路と、
前記イベント設定回路から転送された前記所定の命令アドレスまたは前記所定の命令コードとＣＰＵから入力する命令アドレス・命令コードデータの命令アドレスまたは命令コードが一致することを検出したときにセクショントレース開始信号をアクティブにして出力するとともに前記イベント設定回路に設定された前記アクティブ期間の間前記データ取り込み信号をアクティブにして出力するイベント検出回路とを有する請求項２記載のプログラム開発支援装置。
【請求項４】
前記トレースデータ作成部が、
ＣＰＵから出力された命令アドレス・命令コードデータをデータ取り込み信号がアクティブの期間に読み込んで、命令アドレスと命令コードとを出力する命令アドレス・命令コード取り込み回路と、
前記命令アドレスと非圧縮データ選択信号とを入力し前記非圧縮データ選択信号がアクティブのときには前記命令アドレスをそのまま圧縮命令アドレスとして出力し前記非圧縮データ選択信号がアクティブでないときには現在の命令アドレスからひとつ前の命令アドレスを減じた差分データを前記圧縮命令アドレスとして出力する命令アドレスデータ圧縮回路と、
前記命令コードを入力し該命令コードが分岐命令であるか否かを判定し分岐命令であると判定したときには分岐命令検出信号をアクティブにして出力する分岐命令判定回路と、
前記圧縮命令アドレスと前記非圧縮データ選択信号を入力し前記非圧縮データ選択信号がアクティブのときには前記圧縮命令アドレスをそのままトレースデータとして出力し、前記非圧縮データ選択信号がアクティブでないときには連続して入力した複数の前記圧縮命令アドレスをトレースメモリのビット幅に合わせて合成して前記トレースデータとして出力するとともに前記トレースデータの書込みを前記トレースメモリに指示するトレースデータ書込み信号および前記トレースメモリでの格納アドレスを指定するトレースメモリアドレスを出力するトレース制御回路と、
前記分岐命令検出信号またはセクショントレース開始信号の少なくとも一方がアクティブのときに前記非圧縮データ選択信号をアクティブにして出力する２入力ＯＲ回路とを有する請求項２記載のプログラム開発支援装置。
【請求項５】
ターゲットプログラムを実行するＣＰＵと、
予めイベント条件として外部から所定の命令アドレスまたは所定の命令コードが設定されているときには前記所定の命令アドレスまたは所定の命令コードとともにデータ取り込み信号のアクティブ期間をも保持するイベント設定回路と、前記イベント設定回路から入力したイベント設定データ信号に含まれた前記所定の命令アドレスまたは前記所定の命令コードと前記ＣＰＵから入力する命令アドレス・命令コードデータの命令アドレスまたは命令コードとが一致することを検出したときにプログラムのある範囲のみを繰り返しトレースするセクショントレースのセクショントレース開始信号をアクティブにして出力するとともに前記イベント設定回路に設定された前記アクティブ期間の間前記データ取り込み信号をアクティブにして出力するイベント検出回路とを有する前記イベント検出部と、実行した命令順に命令アドレスを示すデータをトレースデータとして蓄積するトレースメモリと、
前記ＣＰＵから出力された前記命令アドレス・命令コードデータを前記データ取り込み信号がアクティブの期間に読み込んで、前記命令アドレスと前記命令コードとを出力する命令アドレス・命令コード取り込み回路と、前記命令アドレスと非圧縮データ選択信号とを入力し前記非圧縮データ選択信号がアクティブのときには前記命令アドレスをそのまま圧縮命令アドレスとして出力し前記非圧縮データ選択信号がアクティブでないときには現在の命令アドレスからひとつ前の命令アドレスを減じた差分データを前記圧縮命令アドレスとして出力する命令アドレスデータ圧縮回路と、前記命令コードを入力し該命令コードが分岐命令であるか否かを判定し分岐命令であると判定したときには分岐命令検出信号をアクティブにして出力する分岐命令判定回路と、前記圧縮命令アドレスと前記非圧縮データ選択信号を入力し前記非圧縮データ選択信号がアクティブのときには前記圧縮命令アドレスをそのまま前記トレースデータとして出力し、前記非圧縮データ選択信号がアクティブでないときには連続して入力した複数の前記圧縮命令アドレスを前記トレースメモリのビット幅に合わせて合成して前記トレースデータとして出力するとともに前記トレースデータの書込みを前記トレースメモリに指示するトレースデータ書込み信号および前記トレースメモリでの格納アドレスを指定するトレースメモリアドレスを出力するトレース制御回路と、前記イベント設定データ信号と前記トレースメモリアドレスとを入力し、両者の所定部分が一致したときにフレーム一致信号をアクティブにするフレームアドレス比較回路と、前記分岐命令検出信号、前記セクショントレース開始信号および前記フレーム一致信号を入力しこれらのうちの少なくともひとつの信号がアクティブであるときには前記非圧縮データ選択信号をアクティブにして出力する３入力ＯＲ回路とを有するトレースデータ作成部とを備えることを特徴とするプログラム開発支援装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はプログラム開発支援装置に関し、特に、コンピュータプログラムのデバッグを支援するプログラム開発支援装置に関する。
【０００２】
【従来の技術】
本発明が関するプログラム開発支援装置は、特にコンピュータ装置を動作させるためのプログラムの開発、デバッグに用いられている。特に、トレース機能を持つプログラム開発支援装置は、一般的にプログラム実行によって刻々変化するＣＰＵの命令アドレスや命令コード等をトレースメモリと呼ばれるメモリに蓄積し、プログラムの実行結果として解析するのに使用される。
【０００３】
ところが、近年コンピュータ装置に内蔵するプログラムが複雑化、大規模化、するに従い、トレースメモリにはより多くの実行結果を蓄積するために大容量のメモリが要求されている。また、これとは別にＣＰＵの動作速度が高速化することで、より高速なメモリが必要にもなってきている。トレース機能を有するプログラム開発支援装置では、一般的にＣＰＵの動作周波数と同じスピードで動作させることが必要だが、大容量かつ高速なメモリはきわめて高価であるため、トレースメモリに格納するトレースデータの削減が要請されている。
【０００４】
この要請に応える技術として、直前のプログラムカウンタの値と現在のプログラムカウンタの値との差分値をトレースメモリに記録し、分岐命令の時だけプログラムカウンタの値そのものを記録することによりトレースデータを圧縮する技術が特開平１１−２５９３３５号公報に開示されている。以下、これを従来例として説明する。図１２は、従来のプログラム開発支援装置のブロック図である。
【０００５】
プログラム開発支援装置はプログラム開発用につくられたエバチップ３０１と命令のトレース結果を蓄積するトレーサ３０２とを備えている。エバチップ３０１内のＣＰＵ３０３から出力される命令アドレス・命令コードデータをクロック信号ＣＬＫに同期して命令アドレス・命令コード取り込み回路３２１に取込み、命令が分岐命令であるか否かを分岐命令判定回路３２３で判定する。命令が分岐命令でないときには命令アドレスデータ圧縮回路３２２により直前のプログラムカウンタの値と現在のプログラムカウンタの値との差分値を生成することにより命令アドレスの圧縮を行い、トレース制御回路３２４でトレースメモリ３０６のビット幅に合わせて複数の命令アドレスの圧縮データをトレースデータに合成し、トレースデータはトレースメモリ３０６に書き込まれる。命令が分岐命令のときには、命令アドレスは圧縮されずにそのままトレースメモリ３０６に書き込まれる。
【０００６】
この従来例では、分岐命令の命令アドレス以外の命令アドレスは、圧縮されてトレースメモリに格納されるので、トレースメモリの容量を削減できる。また、分岐命令の命令アドレスの非圧縮データを起点として、圧縮された差分値を加算していくことにより、命令アドレスを復元することができる。
【０００７】
【発明が解決しようとする課題】
しかしながら、図１２の従来例では、分岐命令のみを検出しているだけであるので、例えばセクショントレースのようにプログラムのある範囲のみを繰り返しトレースしたい場合には、圧縮されたデータから本来のアドレスを復元することができないという改良すべき問題が残っていた。セクショントレース開始の命令アドレスが分岐命令ではないので他の命令のアドレスと同様に圧縮されてしまうからである。
【０００８】
本発明は、従来例のもつ命令アドレス圧縮・復元機能に加えて、セクショントレースのように分岐命令以外の特定の特定の命令コードまたは特定のアドレスを起点として特定範囲のトレースを実行する場合にも命令アドレスの圧縮・復元が可能で、限られたメモリ容量においても大量のトレースデータを蓄積可能なプログラム開発支援装置を提供することにある。
【０００９】
【課題を解決するための手段】
本発明のプログラム開発支援装置は、ターゲットプログラムを実行するＣＰＵと、前記ＣＰＵから入力する命令アドレス・命令コードデータが予めイベント条件として設定された所定の命令アドレスまたは所定の命令コードと一致することを検出したときにはセクショントレース開始信号をアクティブにして出力するイベント検出部と、前記命令アドレス・命令コードデータおよび前記セクショントレース開始信号を入力し前記命令アドレス・命令コードデータの命令コードが分岐命令であるかまたはセクショントレース開始信号がアクティブであるときには命令アドレスを非圧縮のままトレースデータとして出力し、前記命令アドレス・命令コードデータの命令コードが分岐命令でなく且つ前記セクショントレース開始信号がアクティブでないときには前記命令アドレス・命令コードデータの命令アドレスを圧縮して圧縮命令アドレスを生成し複数個の前記圧縮命令アドレスを合成してトレースデータとして出力するトレースデータ作成部と、前記トレースデータを蓄積するトレースメモリとを備えている。
【００１０】
【発明の実施の形態】
本発明のプログラム開発支援装置は、予め外部から設定された所定の命令アドレスまたは所定の命令コードを検出するイベント検出部を設け、イベントが検出されたときには検出された命令アドレスまたは検出された命令コードを格納する命令アドレスを非圧縮のままトレースメモリに格納する機構を備えたものである。
【００１１】
次に本発明について詳細に説明する。図１は、本発明の一実施の形態のブロック図である。
【００１２】
プログラム開発支援装置は、ターゲットプログラムを実行するエバチップ１と、実行した結果を蓄積するトレーサ２と備えている。
【００１３】
エバチップ１は実際にターゲットプログラムを実行するＣＰＵ３と、イベント検出部４とを有している。イベント検出部４は、ＣＰＵ３から命令アドレス・命令コードデータ１４を入力し、予め命令コードまたは命令アドレスがイベント条件として設定されていてこれと一致することを検出したときには、セクショントレース開始信号１６とをアクティブにするとともにセクショントレース期間データ取り込み信号１５をアクティブに保つ。
【００１４】
トレーサ２は、トレースデータ作成部５と、トレースデータを蓄積するトレースメモリ６とを有している。トレースデータ作成部５は、命令アドレス・命令コードデータ１４およびセクショントレース開始信号１６を入力し、命令アドレス・命令コードデータ１４の命令コードが分岐命令であるかまたはセクショントレース開始信号１６がアクティブであるときには、命令アドレス２７を非圧縮のままトレースメモリ６へ書き込み、命令アドレス・命令コードデータ１４の命令コード２８が分岐命令でなく且つセクショントレース開始信号１６がアクティブでないときには、現在の命令アドレス・命令コードデータ１４の命令アドレス２７から前の命令アドレス・命令コードデータの命令アドレスを減じた差分値の圧縮命令アドレス３１を生成し、連続する複数の命令アドレス・命令コードデータ１４に対応する複数の圧縮命令アドレス３１をトレースメモリ６のビット幅に合わせて合成して、トレースデータ３２としてトレースメモリ６へ書き込む。
【００１５】
また、イベント検出部４は、予めイベント条件として外部から命令アドレスまたは命令コードが設定されているときにはデータ取り込み信号１５のアクティブ期間をも保持するイベント設定回路１１と、イベント設定回路１１からイベント設定データ信号１７により転送された命令アドレスまたは命令コードの設定値とＣＰＵ３が出力する命令アドレスまたは命令コードが一致することを検出したときにセクショントレース開始信号１６をアクティブにするとともにイベント設定回路１１に設定された期間データ取り込み信号１５をアクティブレベルとするイベント検出回路１２とを有している。イベント条件が設定されていないときには、データ取り込み信号１５はアクティブレベルを継続出力する。
【００１６】
また、トレースデータ作成部５は、命令アドレス・命令コード取り込み回路２１と、命令アドレスデータ圧縮回路２２と、分岐命令判定回路２３と、トレース制御回路２４と、２入力ＯＲ回路２５とを有している。
【００１７】
命令アドレス・命令コード取り込み回路２１は、エバチップ１のＣＰＵ３から出力された命令アドレス・命令コードデータ１４をデータ取り込み信号１５に基づきクロック信号１３に同期して読み込んで、命令アドレス２７と命令コード２８を出力する。
【００１８】
命令アドレスデータ圧縮回路２２は、命令アドレス２７と非圧縮データ選択信号３０を入力し、非圧縮データ選択信号３０がアクティブのときには命令アドレス２７をそのまま圧縮命令アドレス３１として出力し、非圧縮データ選択信号３０がアクティブでないときには現在の命令アドレスからひとつ前の命令アドレスを減じた差分データを圧縮命令アドレス３１として出力する。
【００１９】
分岐命令判定回路２３は、命令コード２８を入力し、その命令コードが分岐命令であるか否かを判定し、分岐命令であると判定したときには分岐命令検出信号２９をアクティブ（ハイレベル）として出力する。
【００２０】
トレース制御回路２４は、圧縮命令アドレス３１と非圧縮データ選択信号３０を入力し、非圧縮データ選択信号３０がアクティブのときには圧縮命令アドレス３１をそのままトレースデータ３２として出力し、非圧縮データ選択信号３０がアクティブでないときには連続して入力した複数の圧縮命令アドレス３１をトレースメモリ６のビット幅に合わせて合成してトレースデータ３２として出力するとともに、トレースデータの書込みを指示するトレースデータ書込み信号３４および格納アドレスを指定するトレースメモリアドレス３３をトレースメモリ６に出力する。
【００２１】
２入力ＯＲ回路２５は、分岐命令検出信号２９またはイベント検出部４からのセクショントレース開始信号１６の少なくとも一方がアクティブ（ハイレベル）のときに非圧縮データ選択信号３０をアクティブとして出力する。
【００２２】
次に各回路の詳細構成について説明する。図２は、命令アドレス・命令コード取り込み回路２１の回路図であり、図３は、命令アドレスデータ圧縮回路２２の回路図であり、図４は、トレース制御回路２４の回路図である。
【００２３】
図２を参照すると、命令アドレス・命令コード取り込み回路２１は、命令アドレス・命令コードデータ１４をデータラッチ２１１で保持し、命令アドレス２７および命令コード２８としてそれぞれ取り出す。
【００２４】
命令アドレス・命令コードデータ１４をデータラッチ２１１でラッチするタイミングは、基本的にはＣＰＵ３から出力されるクロック信号１３によって命令アドレス・命令コードデータ１４と同期して行われるが、イベント検出回路１２から出力されるデータ取り込み信号１５でＡＮＤ回路２１２によってマスク制御することにより、選択的にラッチされるように構成されている。データ取り込み信号１５はセクショントレースのときにはセクショントレースの開始から終了までの間のみアクティブレベルであるが、通常のトレース状態では常にアクティブレベルを継続する。
【００２５】
次に、図３を参照して命令アドレスデータ圧縮回路２２の詳細について説明する。命令アドレスの圧縮方法は、非圧縮時には命令アドレス値（例えば３２ビット長）をベースアドレスとして記録し、圧縮時にはひとつ前の命令アドレス値と現在の命令アドレス値との差分値（例えば８ビット長）を圧縮命令アドレスのデータとして記録する方法をとっている。命令アドレスデータ圧縮回路２２は、圧縮命令アドレスのデータとして前の命令アドレス値との差分データを生成するための前命令アドレスラッチ２２１と、前命令アドレスラッチ２２１の出力と現在の命令アドレスとの差分を演算して圧縮データを生成する減算器２２２と、減算器２２２からの圧縮データと非圧縮データの命令アドレスデータ２７とを切り換える圧縮／非圧縮切り換え回路２２３を備えている。非圧縮データ選択信号３０がアクティブになると、非圧縮のままの命令アドレス２７が圧縮／非圧縮切り換え器２２３から圧縮命令アドレス３１として出力される。
【００２６】
次に、図４を参照してトレース制御回路２４の詳細について説明する。トレース制御回路２４は、トレースメモリ６に書き込むためのトレースメモリアドレス３３の生成と、書込み動作を許可するトレース書込み信号３４の生成を行い、最終的にトレースメモリ６にデータを書き込むためのタイミング信号の生成を行う。また、同時に、命令アドレスデータ圧縮回路２２にて生成された圧縮命令アドレス信号３１の、トレースメモリ６のビット幅への合わせ込みを行う。トレースアドレスカウンタ２４４はトレース書込み信号３４がアクティブのときにクロック信号１３の立ち上がりに同期して＋１インクリメントする。トレースアドレスカウンタ２４４の出力のトレースメモリアドレス３３は、トレースメモリ６のフレームに順番にトレースデータ３２を記録するためのアドレスを示す。トレースメモリアドレス３３は、トレースメモリ６への書込みタイミングに同期して変化し、通常はトレースメモリ６への書込みが完了した直後にインクリメントされる。書込みのタイミングについては後述する。
【００２７】
次に、圧縮データのトレースメモリ６のビット幅への合わせ込み動作について説明する。ベースアドレスよりもビット幅の少ない圧縮データを、トレースメモリ６のビット幅へ合わせ込むために、圧縮データシフトレジスタ２４１が使用される。圧縮データシフトレジスタ２４１は、圧縮命令アドレス３１のデータが圧縮データである場合にはトレースメモリのビット幅一杯になるまで順次シフト動作を行いながらデータを蓄積する。図４では、（非圧縮データ）対（圧縮データ）のデータ幅の比を４対１としているため、圧縮データシフトレジスタ２４１は最大４命令分の命令アドレスの圧縮データを順次蓄積する。また４個目の圧縮データが圧縮データシフトレジスタ２４１に書き込まれると、アライメント完了信号２４６がアクティブとなり、２入力ＯＲ回路２４５を経てトレースメモリ６に１フレーム分のデータとして記録される。同時に圧縮データシフトレジスタ２４１の内容がクリアされて次の圧縮データの蓄積に備える。
【００２８】
非圧縮データである命令アドレス２７をトレースデータ３２として出力するか、圧縮データシフトレジスタ２４１でビット幅に合わせ込んだアライメント済圧縮データ２４７をトレースデータ３２として出力するかは、非圧縮データ選択信号３０を非圧縮データラッチ２４２で一旦ラッチしてタイミング調整した信号にしたがってトレースデータ切替回路２４３で選択される。
【００２９】
次に、図１の実施例の動作について、先ず、図１２の従来例と同様の分岐命令と通常命令に対するデータ圧縮／非圧縮の動作について説明した後に、本発明に特有のセクショントレースにおける動作について説明する。
【００３０】
図５は、トレース動作を説明するためのサンプルプログラムリスト図である。このサンプルプログラムは大規模なプログラムの一部を抜き出したものであり、命令１〜命令２７のうち、命令３〜命令２６は一重のループを構成しており、命令２６の条件分岐命令にて任意の回数、命令３への分岐を繰り返す構成となっている。命令アドレス空間は３２ビットで、命令コード長は４バイトまたは２バイトであるものとし、また、トレースメモリには（０００００）から（０００ＦＦ）までのアドレスを持つリングバッファが使用されているとする。
【００３１】
図６は、分岐命令判定時の動作タイミング図である。図６では、セクショントレースを用いない場合であるので、基本的には図１２の従来例と同様に動作する。
【００３２】
イベント設定回路１１にイベント条件が設定されておらず、セクショントレースを用いない場合には、データ取り込み信号１５は常にアクティブとなり、命令アドレス・命令コード取り込み回路２１はクロック信号１３毎に図５の命令１から順次に命令アドレス・命令コードデータ１４をラッチして命令アドレス２７に出力する。
【００３３】
命令２６まで進むと、命令２６が分岐命令であるので、ＣＰＵ３から出力される命令アドレス・命令コードデータ１４は命令３に変化する。このとき、分岐命令判定回路２３は直前に分岐命令が実行されたことを判別し、分岐命令検出信号２９をアクティブにする。
【００３４】
これに伴い、命令アドレスデータ圧縮回路２２は、直前まで出力していたアドレス値の差分すなわち圧縮データから、命令３の命令アドレスの非圧縮データに切り換えて圧縮命令アドレス３１に出力する。
【００３５】
トレース制御回路２４は、分岐命令検出信号２９がアクティブになると２クロック期間の間トレースデータ書込み信号３４をアクティブにしてトレースメモリ６に出力し、トレースメモリアドレス３３はクロック信号１３の第１番目の立ち上がりに同期してインクリメントして（０００００）となり、これに対応するトレースメモリ６のフレームアドレスに、命令３の命令アドレスが非圧縮データの状態で書き込まれる。フレームの書込みが終了した時点で、トレースメモリアドレス３３は次のフレームに書込みが行われるようにするために、トレースデータ書込み信号３４がアクティブの期間内のクロック信号１３の第２番目の立ち上がりに同期して＋１インクリメントされ、（００００１）となる。
【００３６】
その後、命令４に対しては命令アドレスデータ圧縮回路２２で、（（命令４の命令アドレス）−（命令３の命令アドレス））を計算して結果を下位の１バイトのデータに圧縮し、同様にして命令５，命令６，命令７と圧縮データを生成してトレース制御回路２４の圧縮データシフトレジスタ２４１に順次圧縮データを送り込むので、命令７の圧縮データを入力したときに圧縮データシフトレジスタ２４１が一杯になりアライメント完了信号２４６を出力する。トレース制御回路２４はアライメント完了信号２４６に合わせてトレースデータ書込み信号３４を発生して命令４〜命令７の４命令の圧縮データを合成したトレースデータ３２をトレースメモリ６に書き込んだ後に、クロック信号１３の立ち上がりに同期してトレースメモリアドレス３３を＋１インクリメントし（００００２）となる。以降は、次に分岐命令を検出するまで同様に動作を継続する。
【００３７】
図７は、分岐命令判定後のトレースメモリのデータ図であり、以上の動作によってトレースメモリ６に記録されたサンプルプログラムの実行結果である。
【００３８】
トレースメモリに格納されたトレースデータでは、命令３に相当するデータは圧縮フラグが０となっており、命令アドレスが非圧縮の状態で読み出せることを示している。それ以外の命令については、それぞれ直前の命令アドレスからの増分（命令コードのバイト数に一致）が蓄積されているので、読み出した後に前の命令アドレスに加算することによる復元アドレスを得る。
【００３９】
図８は、トレースデータの読み出し手順のフローチャート図である。以下、トレースデータの読み出しについて具体的に説明する。
【００４０】
Ｓ１〜Ｓ３は、読み出し動作の初期化に相当する。
【００４１】
ステップＳ３で圧縮フラグが０のときはステップＳ４に進み、圧縮フラグが１のときにはステップＳ５に進む。
【００４２】
ステップＳ４では、トレースメモリ６の先頭フレームからトレースデータを読み込み、圧縮されていないフレームの命令アドレスをベースアドレスとして設定してステップＳ６に進む。
【００４３】
ステップＳ６では、ベースアドレスから、当該アドレスの命令コードを読み取り命令を表示する。
【００４４】
ステップＳ７では、読み出しポインタをインクリメントし、次のトレースフレームを読み出す。
【００４５】
ステップＳ３で圧縮フラグが１ならば、そのフレームデータは圧縮データなので、ステップＳ５でベースアドレスにオフセット分を加算し、新しいベースアドレスとして設定してステップＳ６に進む。ステップＳ６以降は同様である。
【００４６】
以上の手順で命令アドレスを復元して図７の復元アドレスを得る。
【００４７】
次にセクショントレースを用いた場合について動作を説明する。図９は、セクショントレース動作時のタイミング図である。
【００４８】
セクショントレースでは、プログラムの特定の範囲についてのみ着目してトレースを行う。具体的な例として、図５のサンプルプログラムリストにおいて、データの書込みを行っている命令４〜命令７の４ステップの範囲だけに着目してトレースを行うときの動作について説明する。
【００４９】
ＣＰＵ３から出力される命令アドレス・命令コードデータ１４はイベント設定回路１１に設定されているデータ取り込み信号１５のアクティブ期間に基づいて命令４から命令７が実行されている間だけトレースデータ取り込み部７のデータラッチ２１１にサンプリングされる。このため図９に示すように、命令アドレス２７としては、命令４〜命令７の命令アドレスだけが命令アドレス・命令コード取り込み回路２１から命令アドレスデータ圧縮回路２２へ出力される。
【００５０】
また、セクショントレースの開始位置を示すセクショントレース開始信号１６が命令４の実行開始から２クロック期間アクティブになる。セクショントレース開始信号１６は、分岐命令検出信号２９とともに２入力ＯＲ回路２５の入力であるので、２入力ＯＲ回路２５の出力の非圧縮データ選択信号３０は、命令が分岐命令であるか否かには無関係にセクショントレース信号がアクティブ（ハイレベル）になったことを受けて非圧縮データ選択信号３０はアクティブとなる。その結果、命令４の命令アドレスは非圧縮データのままクロック信号１３のローレベル期間に出力される。
【００５１】
命令５〜命令７についての圧縮データの生成およびトレースデータへの合成については、図６と同様であるので説明を省略する。
【００５２】
図１０は、セクショントレース後のトレースメモリのデータ図であり、以上の動作によって、トレースメモリ６に記録されたサンプルプログラムのセクショントレースの実行結果である。トレースデータとして命令４に相当するデータは圧縮フラグが０となっており、命令アドレスが非圧縮の状態であることを示している。セクショントレースの場合のトレースデータの読出しも図８と同様である。
【００５３】
図１１は、本発明の第２の実施例のブロック図である。図１１のプログラム開発支援装置は、その基本的構成は図１の第１の実施例と同様であるが、フレームアドレス比較回路２６が追加され、また２入力ＯＲ回路２５に変えて３入力ＯＲ回路２５ａとしている点のみが異なっている。
【００５４】
フレームアドレス比較回路２６は、イベント設定データ信号１７とトレースメモリアドレス３３とを入力し、両者の所定部分が一致したときにフレーム一致信号３５をアクティブにして出力する。
【００５５】
３入力ＯＲ回路２５ａは、分岐命令検出信号２９およびセクショントレース開始信号１６に加えてフレーム一致信号３６をも入力し、これらのうちの少なくともひとつの信号がアクティブであるときには非圧縮データ選択信号３０をアクティブとして出力する。
【００５６】
ここで、イベント設定回路１１に設定されるイベント条件を、例えば一定のフレーム間隔でトレースメモリアドレス３３と一致するような値とすることにより、任意のフレームに非圧縮のトレースデータを埋め込む事ができる。このように、本実施例では、セクショントレースの範囲がトレースメモリの最大フレーム数（説明に用いた例ではトレースメモリのフレームは０００００〜０００ＦＦ）を越えるような場合でも非圧縮データをトレースデータ中に埋め込むことができるので、このような場合にも非圧縮データをベースの命令アドレスとして圧縮済のトレースデータから本来の命令アドレスを復元することができるという効果が得られる。
【００５７】
【発明の効果】
以上のように、本発明によれば、圧縮されたトレースデータの復元の際にベースアドレスとするために非圧縮とする命令アドレスを外部からイベント検出部に設定できるので、セクショントレースのようにトレースデータ中に分岐命令が含まれない状態においても復元の基となるベースアドレスをトレースデータ中に残すことが可能となり、正しく命令アドレスを復元することができるという効果が生じる。
【００５８】
本発明では、セクショントレースのみにとどまらず、イベント設定器に例えばＣＰＵのＤＭＡや割り込みのトレースなどにおいて、分岐命令を含まないがプログラムの実行順が変化したりＣＰＵの動作とは異なるバスアクセスを行う命令のアドレス情報を設定することにより、非圧縮のままトレースメモリに格納して命令アドレス復元のときにベースアドレスとすることができるので、そのような場合にも正しく復元することができる。
【図面の簡単な説明】
【図１】本発明の第１の実施例のブロック図である。
【図２】命令アドレス・命令コード取り込み回路の回路図である。
【図３】命令アドレスデータ圧縮回路の回路図である。
【図４】トレース制御回路の回路図である。
【図５】サンプルプログラムリスト図である。
【図６】分岐命令判定時の動作タイミング図である。
【図７】分岐命令判定後のトレースメモリのデータ図である。
【図８】トレースデータの読み出し手順のフローチャート図である。
【図９】セクショントレース動作時のタイミング図である。
【図１０】セクショントレース後のトレースメモリのデータ図である。
【図１１】本発明の第２の実施例のブロック図である。
【図１２】従来のプログラム開発支援装置のブロック図である。
【符号の説明】
１，３０１    エバチップ
２，３０２    トレーサ
３，３０３    ＣＰＵ
４    イベント検出部
５    トレースデータ作成部
６，３０６    トレースメモリ
１１    イベント設定回路
１２    イベント検出回路
１３    クロック信号
１４    命令アドレス・命令コードデータ
１５    データ取り込み信号
１６    セクショントレース開始信号
１７    イベント設定データ信号
２１，３２１    命令アドレス・命令コード取り込み回路
２２，３２２    命令アドレスデータ圧縮回路
２３，３２３    分岐命令判定回路
２４，３２４    トレース制御回路
２５，２４５    ２入力ＯＲ回路
２５ａ    ３入力ＯＲ回路
２６    フレームアドレス比較回路
２７    命令アドレス
２８    命令コード
２９    分岐命令検出信号
３０    非圧縮データ選択信号
３１    圧縮命令アドレス
３２    トレースデータ
３３    トレースメモリアドレス
３４    トレースデータ書込み信号
３５    フレーム一致信号
２１１    データラッチ
２１２    ＡＮＤ回路
２２１    前命令アドレスラッチ
２２２    減算器
２２３    圧縮／非圧縮切替回路
２４１    圧縮データシフトレジスタ
２４２    非圧縮データラッチ
２４３    トレースデータ切替回路
２４４    トレースアドレスカウンタ
２４６    アライメント完了信号
２４７    アライメント済圧縮データ
【図１】
0003629181.tif 000002
【図２】
0003629181.tif 000003
【図３】
0003629181.tif 000004
【図４】
0003629181.tif 000005
【図５】
0003629181.tif 000006
【図６】
0003629181.tif 000007
【図７】
0003629181.tif 000008
【図８】
0003629181.tif 000009
【図９】
0003629181.tif 000010
【図１０】
0003629181.tif 000011
【図１１】
0003629181.tif 000012
【図１２】
0003629181.tif 000013