(57)【要約】【課題】全ての記録対象の情報を失うことなく記録し、且つ各分岐実行及び各データアクセス実行毎に整理したデータ形式のトレース情報を生成するトレース方法を提供する。【解決手段】ＣＰＵを含む半導体装置において前記ＣＰＵによりプログラムを実行したときの前記ＣＰＵの実行に関する実行履歴を、１つ又は複数のトレース対象に関して、ソフトウェアを介して前記半導体装置の外部からトレースするトレース方法は、前記実行履歴として記録対象の情報が発生した命令実行サイクル毎に、前記発生した記録対象の情報を前記１つ又は複数のトレース対象の実行に関するトレース情報としてバッファに記録し、前記命令実行サイクル毎に記録された前記１つ又は複数のトレース対象の実行に関するトレース情報を、前記ソフトウェアにより、前記１つ又は複数のトレース対象毎に纏めるようにデータ並べ替えを実行する各段階を含む。【選択図】図１
2010218139.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵを含む半導体装置において前記ＣＰＵによりプログラムを実行したときの前記ＣＰＵの実行に関する実行履歴を、１つ又は複数のトレース対象に関して、ソフトウェアを介して前記半導体装置の外部からトレースするトレース方法であって、
前記実行履歴として記録対象の情報が発生した命令実行サイクル毎に、前記発生した記録対象の情報を前記１つ又は複数のトレース対象の実行に関するトレース情報としてバッファに記録し、
前記命令実行サイクル毎に記録された前記１つ又は複数のトレース対象の実行に関するトレース情報を、前記ソフトウェアにより、前記１つ又は複数のトレース対象毎に纏めるようにデータ並べ替えを実行する
各段階を含むことを特徴とする実行履歴トレース方法。
【請求項２】
前記半導体装置に含まれるデバッグ回路が前記トレース情報を前記バッファに記録し、前記半導体装置に結合されるコンピュータ上で実行される前記ソフトウェアが前記データ並び替えを実行することを特徴とする請求項１記載の実行履歴トレース方法。
【請求項３】
前記トレース情報を前記バッファに記録する段階は、１つの前記命令実行サイクルで発生し得る前記記録対象の情報を漏れなく格納するビット幅を用いて前記トレース情報を前記バッファに記録することを特徴とする請求項１又は２に記載の実行履歴トレース方法。
【請求項４】
前記１つ又は複数のトレース対象は命令実行の履歴を示す分岐情報とデータアクセス実行の履歴を示すデータアクセス情報とを含み、前記命令実行サイクル毎に前記バッファに記録する前記トレース情報は、分岐元を示すデータ格納用ビット、分岐先を示すデータ格納用ビット、分岐要因を示すデータ格納用ビット、実行プログラムカウンタ値を示すビット、リードデータ値の有効を示すデータ格納用ビット、リードデータＩＤ格納用ビット、リードデータ値格納用ビット、データアクセスの有効を示すデータ格納用ビット、リード又はライトアクセスを示すデータ格納用ビット、アクセスサイズを示すデータ格納用ビット、アクセスアドレス格納用ビット、ライトデータ格納用ビット、リードアクセスＩＤ格納用ビットを含むことを特徴とする請求項１乃至３の何れか一項記載の実行履歴トレース方法。
【請求項５】
前記１つ又は複数のトレース対象を指定する段階を更に含み、前記トレース情報を前記バッファに記録する段階は、前記指定した記録対象の情報が発生した命令実行サイクル毎に前記トレース情報を前記バッファに記録することを特徴とする請求項１乃至４の何れか一項記載の実行履歴トレース方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願開示は、一般にプログラムの正しさを検査するデバッグ手法に関し、詳しくはＣＰＵによるプログラムの実行履歴をトレースするトレース方法に関する。
【背景技術】
【０００２】
ＭＣＵ（Micro Controller Unit）などのＣＰＵ（Central Processing Unit）を搭載する半導体装置において、ＣＰＵにより実行するプログラムを開発する際に、デバッグシステムを用いる。デバッグシステムは、開発対象のプログラムを実行するＣＰＵ動作に関する情報を表示したり、開発対象プログラムに対して特定の操作を行う機能を提供したりすることで、デバッグ作業を支援する。
【０００３】
プログラム実行するＣＰＵの動作履歴を示す各種実行履歴情報（トレース情報）は、分岐実行の履歴を示す分岐トレース情報、及び、データアクセス実行の履歴を示すデータトレース情報を含む。ＣＰＵによるプログラム実行においては、これらトレース情報を生成するイベントが複数同時に発生し得る。例えば、プログラムを構成する命令列中の１つの命令が、分岐先の命令であると同時にそこから更に分岐を指定する分岐元の命令でもある場合が考えられる。また例えば、分岐命令やデータアクセス命令の実行と同時に、既に実行済みのリードアクセス命令に対するリードデータ（データトレース情報の一部）がメモリからＣＰＵに供給される場合が考えられる。トレース情報の記録においては、このように複数のイベントが同時発生する場合であっても全ての記録対象の情報を失うことなく記録することが望ましい。またプログラム実行時に複数のイベントが錯綜したり同時に発生したりしていても、デバッグシステム内で取り扱われるトレース情報は、ユーザに分かり易い形式のデータであることが望ましい。即ち、プログラム実行時に複数のイベントが錯綜したり同時に発生したりしていても、各分岐実行及び各データアクセス実行毎に整理したデータ形式でトレース情報を生成することが望ましい。これにより、デバッグシステムは、トレース情報を分かり易い形でユーザに提示することができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００３−８５０００号公報
【特許文献２】特開２００８−６５４４１号公報
【特許文献３】特開平１１−３１２０９８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
以上を鑑みると、全ての記録対象の情報を失うことなく記録し、且つ各分岐実行及び各データアクセス実行毎に整理したデータ形式のトレース情報を生成するトレース方法が望まれる。
【課題を解決するための手段】
【０００６】
ＣＰＵを含む半導体装置において前記ＣＰＵによりプログラムを実行したときの前記ＣＰＵの実行に関する実行履歴を、１つ又は複数のトレース対象に関して、ソフトウェアを介して前記半導体装置の外部からトレースするトレース方法は、前記実行履歴として記録対象の情報が発生した命令実行サイクル毎に、前記発生した記録対象の情報を前記１つ又は複数のトレース対象の実行に関するトレース情報としてバッファに記録し、前記命令実行サイクル毎に記録された前記１つ又は複数のトレース対象の実行に関するトレース情報を、前記ソフトウェアにより、前記１つ又は複数のトレース対象毎に纏めるようにデータ並べ替えを実行する各段階を含む。
【発明の効果】
【０００７】
本願開示の少なくとも１つの実施例によれば、各命令実行サイクルで発生したトレース情報を、命令実行サイクル毎にそのまま格納するので、実行履歴情報が喪失することがない。また更に、トレースバッファに記録したトレース情報に基づいて、ソフトウェアによりトレース対象の各命令実行毎に纏めたデータ形式のトレース情報を生成できるので、トレース情報を分かり易い形でユーザに提示することができる。
【図面の簡単な説明】
【０００８】
【図１】デバッグシステムの構成の一例を示す図である。
【図２】トレース方法におけるトレースフレームフォーマットの一例を示す。
【図３】トレース情報を図２に示すフォーマットで記録する際のデバッグ回路の動作の一例を示す図である。
【図４】トレースバッファに記録されたトレース情報からユーザに提示するトレースリストを抽出する処理を示す図である。
【図５】トレース方法におけるサイクルフレームフォーマットの一例を示す。
【図６】デバッグ回路の構成の一例を示す図である。
【図７】トレース情報を図５に示すサイクルフレームフォーマットで記録する際のデバッグ回路の動作の一例を示す図である。
【図８】分岐トレース情報を構築する処理の一例を示すフローチャートである。
【図９】データトレース情報を構築する処理の一例を示すフローチャートである。
【図１０】トレースバッファに記録されたトレース情報からユーザに提示するトレースリストを抽出する処理を示す図である。
【図１１】ソフトウェアによるデータ並べ替え処理を実行する装置の構成を示す図である。
【発明を実施するための形態】
【０００９】
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。
【００１０】
図1は、デバッグシステムの構成の一例を示す図である。デバッグシステム１０は、ＭＰＵ等の半導体装置１１、外部デバッグ装置１２、及びホストコンピュータ１３を含む。半導体装置１１はデバッグ対象の装置であり、ＣＰＵ２１、デバッグ回路２２、ＲＡＭ２３、ＲＯＭ２４、周辺回路２５、内部バス２６を含む。ＣＰＵ２１は、ＲＡＭ２３やＲＯＭ２４に格納されたプログラムを実行する。ＣＰＵ２１は、プログラム実行時に適宜必要に応じてＲＡＭ２３をアクセスし、ＲＡＭ２３をワークエリアとして用いる。ＣＰＵ２１はデバッグ回路２２に接続されており、各種の実行履歴情報をデバッグ回路２２に供給する。またデバッグ回路２２は、ＣＰＵ２１にデバッグプログラムを実行させることにより、所望のデバッグ機能を実現する。
【００１１】
外部デバッグ装置１２は、デバッグ回路２２とデバッグ端子２８を介して結合され、デバッグ回路２２とホストコンピュータ１３との間のインターフェースとして機能する。ホストコンピュータ１３ではデバッガソフトウェア１５が実行されている。ユーザは、ホストコンピュータ１３でデバッガソフトウェア１５を操作することにより、半導体装置１１のＣＰＵ２１が実行するプログラムのデバッグ作業を行なう。デバッグ回路２２はトレースバッファ１６を含む。トレースバッファ１６は、ＣＰＵ２１の実行履歴に関する各種の情報を格納する。
【００１２】
デバッグシステム１０を用いたプログラムデバッグにおけるトレース情報の取得は、例えば、次のようなフローで行われる。まずＣＰＵ２１のプログラム実行を一旦中断するために、ＣＰＵ２１をブレークする。プログラムの実行が中断された状態をデバッグステートと呼ぶ。このデバッグステートにおいて、デバッガソフトウェア１５よりデバッグ回路２２のトレース設定を行う。このトレース設定では、例えば、トレース情報としてどのような情報を取得するかを設定し、また、プログラム中のトレースの開始ポイントと終了ポイントとを設定する。必要なトレース設定を行った後、デバッガソフトウェア１５よりブレークリターン指示を与えることで、ＣＰＵ２１はプログラムの実行を再開する。デバッグ回路２２は、ＣＰＵ２１のプログラム実行過程において、事前に設定されたトレース設定に従って、ＣＰＵ２１の各種実行履歴をトレースバッファ１６に格納する。トレース情報の取得が完了し、あらかじめブレーク要因として設定していたイベントが発生すると、ＣＰＵ２１は再度ブレーク処理を行ない、プログラムの実行を中断してデバッグステートへと移行する。以上の処理によって得られたトレース情報を、デバッガソフトウェア１５によりトレースバッファ１６から読み出し解析することで、ユーザはプログラムの実行履歴を知ることができる。
【００１３】
前述のように、各分岐実行及び各データアクセス実行毎に整理したデータ形式でトレース情報を生成することが望ましい。その目的のためには、そのように整理したデータ形式でトレース情報をトレースバッファに記録するように、デバッグ回路を構成することが考えられる。そのように整理したデータ形式を、以下においてトレースフレームフォーマットと呼ぶ。
【００１４】
図２は、トレース方法におけるトレースフレームフォーマットの一例を示す。例えばＣＰＵが３２ビット構成の場合、トレースバッファを６８ビットのデータ幅とする。ｂｉｔ６７は、２進数“０ｂ０”のときに当該トレースフレームが分岐トレースフレームであることを示し、２進数“０ｂ１”のときに当該トレースフレームがデータトレースフレームであることを示す。分岐トレースフレームの場合、ｂｉｔ６６−６４に分岐要因を示すデータが格納され、ｂｉｔ６３−３２に分岐先ＰＣ値（ＣＰＵのプログラムカウンタ値）、ｂｉｔ３１−０に分岐元ＰＣ値が格納される。データトレースフレームの場合、ｂｉｔ６６にリードアクセスかライトアクセスかを示すビット値が格納され、ｂｉｔ６５−６４にアクセスサイズ、ｂｉｔ６３−３２にアクセスアドレス、ｂｉｔ３１−０にアクセスデータが格納される。
【００１５】
図３は、ＣＰＵの実行履歴に関するトレース情報を図２に示すトレースフレームフォーマットで記録する際のデバッグ回路の動作の一例を示す図である。ｔ１乃至ｔ９は、ＣＰＵの連続した９つの命令実行サイクルを示す。実行ＰＣには各サイクルでのＰＣ値（ＣＰＵのプログラムカウンタ値）を示し、分岐情報には分岐元か分岐先かを示す。またデータアクセスにはリード／ライトアクセスを示し、ライトデータにはライトアクセスに対応するライトデータを示し、リードデータにはリードアクセスに対応するリードデータを示す。ロスト対策バッファは、ＦＩＦＯで構成され、ＣＰＵの実行情報がトレースバッファへ格納できない場合に情報を一時格納するために用いられる。トレースバッファは、発生順に下段から上段に向かって新しいトレース情報を示す。ここで、トレースバッファの図で下線が引かれた情報は、当該サイクルで新たに格納された情報を示す。図３に示す動作例では、ｔ１、ｔ２でロード命令、ｔ４で分岐命令、ｔ５、ｔ６でストア命令が実行されている。
【００１６】
ｔ１及びｔ２では、それぞれリードアクセスＲＡ０及びリードアクセスＲＡ１が発生して、リードアクセスを示すトレース情報がトレースバッファへ格納される。即ち、図２に示すデータトレースフレームが、ｂｉｔ６６に値“０ｂ０”が設定されて、トレースバッファに格納される。このデータトレースフレームのアクセスサイズ及びアクセスアドレスには当該リードアクセスに対応した値が格納される。但し、アクセスデータについては、この時点ではリードデータが入手されていないので、何ら値が設定されない。
【００１７】
ｔ４で実行した分岐命令についてはｔ５で分岐先の情報が得られる。従ってｔ５において、図２に示す分岐トレースフレームが、分岐要因を示す値、分岐先ＰＣ値（ＰＣ５）、分岐元ＰＣ値（ＰＣ４）とともにトレースバッファに格納される。図３に示す例では、ｔ５において更に、ＰＣ５の命令実行によりライトアクセスＷＡ０とライトデータＷＤ０とが発生し、また同時にＰＣ１のリードアクセスＲＡ０に対応するリードデータＲＤ０が受信される。トレースバッファへのデータ格納は、一度に１つのトレースフレームについてのみ実行できる。ｔ５においては分岐トレースフレームをトレースバッファへ格納しているので、ＷＡ０／ＷＤ０とＲＤ０とについては、ロスト対策バッファに一時格納する。
【００１８】
ｔ６では、ｔ５でロスト対策バッファに一時格納されたＷＡ０／ＷＤ０の情報をデータトレースフレームとしてトレースバッファに格納する。ｔ６では更に、ＰＣ６の命令実行によりライトアクセスＷＡ１とライトデータＷＤ１とが発生し、また同時にＰＣ２のリードアクセスＲＡ１に対応するリードデータＲＤ１が受信される。これらＷＡ１／ＷＤ１とＲＤ１とについては、ｔ６において、ロスト対策バッファに一時格納する必要がある。しかしながら、この例におけるロスト対策バッファは２段のＦＩＦＯであるため、ＲＤ１はロスト対策バッファよりあふれてしまい、読出しデータＲＤ１に関する情報は失われてしまう。
【００１９】
ｔ７では、ｔ５でロスト対策バッファに一時格納されたＲＤ０を、トレースバッファ中のＲＡ０を格納したトレースフレームに格納する。ｔ８では、ｔ６でロスト対策バッファに一時格納したＷＡ１／ＷＤ１の情報をトレースバッファに格納する。以降同様に、ＣＰＵの実行情報を発生した順にトレースバッファに格納していき、格納できない情報はロスト対策バッファへ一時格納する。
【００２０】
上記のようにしてトレースバッファに記録されたトレース情報は、各分岐実行を示す分岐トレースフレーム及び各データアクセス実行を示すデータトレースフレームとして格納されている。即ち、トレースフレームフォーマットを用いることにより、各分岐実行及び各データアクセス実行毎に整理したデータ形式でトレース情報を記録・格納している。従って、データ並び替え等の変換処理をすることなく、トレースフレームフォーマットからデータを抽出して、ユーザに分かり易い形でデータを提示することができる。
【００２１】
図４は、トレースバッファに記録されたトレース情報からユーザに提示するトレースリストを抽出する処理を示す図である。図４の左側がトレースバッファに格納される各トレースフレームであり、図３に示す実行履歴の例に対応する。図４の右側が各トレースフレームから抽出したトレースリストの情報である。例えば、ｔ８でトレースバッファに格納したＷＡ１／ＷＤ１のトレースフレームのデータから、書込みアドレスＷＡ１に書込みデータＷＤ１を書き込む命令を示す命令表記Ｗｒｉｔｅ（ＷＡ１，ＷＤ１）を生成することができる。同様にして、各トレースフレームについて、1つのトレースフレームから1つの命令表記を生成することができる。なお読出し命令Ｒｅａｄ（ＲＡ１，―――）は、読出しデータに関する履歴情報が失われたことを示している。
【００２２】
上記のように分岐トレース情報とデータトレース情報とを別々のフレームとしてトレースバッファに格納する方法では、1つのトレースフレームに属するトレース情報が複数のサイクルに渡り発生することを考慮してデバッグ回路を構成する必要がある。その結果、デバッグ回路の回路構成が複雑で大規模となってしまう。また記録すべきトレース情報が1つの命令実行サイクルで複数個同時に発生する場合があるので、ロスト対策バッファを用意する必要がある。しかしながら、トレース情報が同時発生する命令実行サイクルが複数回連続するような場合には、少なくともサイクルが連続する回数分の段数のロスト対策バッファが必要となる。サイクルが連続する回数はプログラムによって異なり、いかにロスト対策バッファの段数を多くしても、確実にデータ損失を防ぐことはできない。
【００２３】
以上説明したように、デバッグ回路において、各分岐実行及び各データアクセス実行毎に整理したデータ形式でトレース情報を記録していく方式には、幾つか問題点がある。従って、デバッグ回路において各命令実行サイクル毎にトレース情報を記録する時にはそのように整理したデータ形式を用いることなく記録し、トレース情報記録後の後処理により、整理したデータ形式のデータにトレース情報を変換することが好ましい。
【００２４】
図１に示すデバッグシステム１０では、ＣＰＵ２１を含む半導体装置１１において、ＣＰＵ２１によりプログラムを実行したときのＣＰＵ２１の実行に関する実行履歴をトレースする。その際、１つ又は複数のトレース対象に関して、デバッガソフトウェア１５を介して半導体装置１１の外部からトレースする。まず、実行履歴として記録対象の情報が発生した命令実行サイクル毎に、それら発生した記録対象の情報を１つ又は複数のトレース対象の実行に関するトレース情報としてトレースバッファ１６に記録する。例えば、図３のｔ５のように、複数のトレース対象（ＰＣ４の分岐命令、ＰＣ５の書込み命令、ＰＣ１の読出し命令）の実行に関して、そのサイクルで発生したトレース情報（ＰＣ５、ＷＡ０／ＷＤ０、ＲＤ０）をトレースバッファ１６に記録する。この状態では、発生した情報を命令実行サイクル毎にトレースバッファ１６に記録したのみであり、例えば各分岐実行及び各データアクセス実行毎に整理したデータ形式とはなっていない。次に、命令実行サイクル毎に記録された１つ又は複数のトレース対象の実行に関するトレース情報を、デバッガソフトウェア１５により、１つ又は複数のトレース対象毎に纏めるようにデータ並べ替えを実行する。即ち、発生した情報を命令実行サイクル毎にトレースバッファ１６に単に記録したトレース情報に対して、データの並び替えを実行することにより、例えば各分岐実行及び各データアクセス実行毎に整理したデータ形式のデータを生成する。
【００２５】
上記のように、発生した情報を命令実行サイクル毎にトレースバッファ１６に単に記録した場合、１命令実行サイクルにおいて発生し記録されたトレース情報（以下、サイクルフレームと呼ぶ）では、１纏まりの完全なトレース情報を構成しないことがある。例えば、分岐トレース情報は、分岐元ＰＣが判明する次のサイクルで分岐先ＰＣが判明するため、分岐元ＰＣが格納されたサイクルフレームと分岐先ＰＣが格納されたサイクルフレームとに分けて格納される。データトレース情報においても、アドレスとデータが同時に判明しない場合は、２つのサイクルフレームに分けて格納される。デバッガソフトウェア１５では、トレース情報をトレースバッファ１６から読み出した時に、トレース情報のデ―タを並び替えることにより、異なるサイクルフレームに分かれているトレース情報を１つに纏めて再構成する。なお、トレースバッファ１６でのトレース情報の再構成に必要となる情報も、あらかじめ各サイクルフレーム内に格納しておく。
【００２６】
図５は、トレース方法におけるサイクルフレームフォーマットの一例を示す。図５に示すサイクルフレームフォーマット例では、３２ビット構成のＣＰＵの場合、１サイクルフレームは１４０ビット幅で構成される。ｂｉｔ１３９は分岐元を示すフラグを格納するためのビットであり、同様にｂｉｔ１３８は分岐先を示すフラグ、ｂｉｔ１３７−１３５は分岐要因を示す値を格納するためのビットである。またｂｉｔ１３４−１０３には実行ＰＣ値が格納される。ｂｉｔ１０２は、リードデータが有効か否かを示すフラグを格納するためのビットであり、同様にｂｉｔ１０１−１００はリードデータＩＤ、ｂｉｔ９９−６８はリードデータを格納するためのビットである。またｂｉｔ６７はデータアクセスが有効か否かを示すフラグを格納するためのビットである。ｂｉｔ６６はリードかライトかを示す値、ｂｉｔ６５−６６はデータアクセスサイズ、ｂｉｔ６３−３２はアクセスアドレス、更にｂｉｔ３１−０はライトデータを格納するためのビットである。
【００２７】
ここで、分岐要因には３ビット（ｂｉｔ１３７−１３５）が割り当てられているが、このビット幅は分岐要因となる種類の数に依存する。また、リードデータＩＤには２ビット（ｂｉｔ１０１−１００）が割り当てられているが、このビット幅はＣＰＵが後続のリードアクセスを未受領のリードデータに先行していくつ発行できるかに依存する。２ビット構成の場合、あるリードアクセスのＩＤを“００”とすると、このリードアクセスに対応するリードデータを受信する前に、ＩＤが“０１”、“１０”、“１１”の３つのリードアクセスを発行できる。リードアクセスＩＤが“００”のリードアクセスにより読み出されたリードデータは、同じ値“００”のリードデータＩＤとともに記録される。またこの例ではｂｉｔ３１−０はライトデータの格納領域としているが、リードアクセス時にはライトデータが存在しないので、そのうちの一部のビットｂｉｔ１−０をリードアクセスＩＤ格納用のビットとして併用している。代りに、リードアクセスＩＤを示す値を格納するための専用のビットを設けてもよい。
【００２８】
図５に示すサイクルフレームフォーマットは一例であり、本技術はこの構成に限定されるものではない。本技術によるトレース方法では、１命令実行サイクルで同時発生し得る記録対象の全ての実行履歴情報及び後処理としてのデータ並べ替えに用いる情報（リードアクセスＩＤとリードデータＩＤ等）を含めるようなサイクルフレームフォーマットであればよい。
【００２９】
図６は、デバッグ回路の構成の一例を示す図である。図６において図１と同一の構成要素は同一の番号で参照し、その説明は省略する。デバッグ回路２２は、トレースバッファ１６、トレース制御部１７、及び通信手段１８を含む。トレース制御部１７は、ＣＰＵ２１から分岐情報、実行ＰＣ値、データアクセス属性、データアクセスアドレス、リードデータ、及びライトデータを受け取る。図５に示すサイクルフレームに格納する情報は、ＣＰＵ２１から受け取る上記情報の中に含まれている。例えば、リードデータ有効、リードデータＩＤ、データアクセス有効、リード／ライト、アクセスサイズ、及びリードアクセスＩＤの情報は、ＣＰＵ２１から受信するデータアクセス属性の中に含まれてよい。同様に、分岐元フラグ、分岐先フラグ、及び分岐要因の情報は、ＣＰＵ２１から受信する分岐情報の中に含まれてよい。
【００３０】
トレース制御部１７は、書込み制御部３１、取得トレース情報設定部３２、及びライトポインタ制御部３３を含む。取得トレース情報設定部３２には、複数のトレース対象を指定する。これにより書込み制御部３１は、取得トレース情報設定部３２に指定したトレース対象に関する記録対象の情報が発生した命令実行サイクル毎に、トレース情報をトレースバッファ１６に記録する。例えば、分岐イベント及びデータアクセスイベントをトレース対象として指定した場合、分岐及びデータアクセスに関する記録対象の情報が発生した命令実行サイクルについてのみ、サイクルフレームがトレースバッファ１６に記録される。また例えば、データアクセス情報をトレース対象として指定した場合、データアクセスに関する記録対象の情報が発生した命令実行サイクルについてのみ、サイクルフレームがトレースバッファ１６に記録される。この場合、トレース対象として指定されていない分岐に関する記録対象の情報のみが発生した命令実行サイクルについては、トレースバッファ１６への記録は行なわれない。これにより、トレース対象として指定した情報を発生する動作の実行に関する履歴のみを記録して、トレースバッファ１６の記憶スペースを有効に利用することができる。
【００３１】
書込み制御部３１は、サイクルフレームを記録する場合、書込み指示信号をアサートする。書込み指示信号はトレースバッファ１６に供給されるとともに、ライトポインタ制御部３３に供給される。ライトポインタ制御部３３は、書込み指示信号がアサートされる度にライトポインタカウンタをインクリメントする。このライトポインタカウンタの値が書込みアドレスを表すことになる。トレースバッファ１６は、書込み指示信号がアサートされたときに、書込み制御部３１から供給されるサイクルフレームを、ライトポインタ制御部３３から供給される書込みアドレスに格納する。通信手段１８は、外部デバッグ装置１２を介して供給されるホストコンピュータ１３からの読出し要求に応じて、トレースバッファ１６の記録内容を読み出し、外部デバッグ装置１２を介してホストコンピュータ１３に送信する。
【００３２】
図７は、ＣＰＵの実行履歴に関するトレース情報を図５に示すサイクルフレームフォーマットで記録する際のデバッグ回路の動作の一例を示す図である。ｔ１乃至ｔ９は、ＣＰＵ２１の連続した９つの命令実行サイクルを示す。実行ＰＣには各サイクルでのＰＣ値（ＣＰＵ２１のプログラムカウンタ値）を示し、分岐情報には分岐元か分岐先かを示す。またデータアクセスにはリード／ライトアクセスを示し、ライトデータにはライトアクセスに対応するライトデータを示し、リードデータにはリードアクセスに対応するリードデータを示す。トレースバッファは、トレースバッファ１６に記録されるトレース情報を、その記録順に下段から上段に向けて順番に示す。ここで、トレースバッファの図で下線が引かれた情報は、当該サイクルで新たに格納された情報を示す。図７に示す動作例では、ｔ１、ｔ２でロード命令、ｔ４で分岐命令、ｔ５、ｔ６でストア命令が実行されている。
【００３３】
ｔ１及びｔ２では、それぞれリードアクセスＲＡ０及びリードアクセスＲＡ１が発生して、リードアクセスを示すトレース情報がトレースバッファへ格納される。即ち、図５に示すサイクルフレームにおいて、ｂｉｔ１３４−１０３に実行ＰＣ値、ｂｉｔ６６に値“０ｂ０”を設定し、そのサイクルフレームをトレースバッファ１６に格納する。その他に、データアクセス有効を示すビットやリードアクセスＩＤを示すビットも設定される。またアクセスサイズ及びアクセスアドレスには当該リードアクセスに対応した値が格納される。但し、アクセスデータについては、この時点ではリードデータが入手されていないので、何ら値が設定されない。
【００３４】
ｔ４で実行した分岐命令については、分岐元情報のみが発生しているため、分岐元情報と実行ＰＣ値とをトレースバッファ１６に格納する。即ち、図６に示すサイクルフレームにおいて、ｂｉｔ１３９の分岐元を示すフラグをセットし、ｂｉｔ１３４−１０３に実行ＰＣ値を設定し、そのサイクルフレームをトレースバッファ１６に格納する。
【００３５】
ｔ５で分岐先の情報が得られる。従ってｔ５において、図６に示すサイクルフレームのｂｉｔ１３８の分岐先を示すフラグをセットし、ｂｉｔ１３７−１３５に分岐要因を示す値を設定するとともにｂｉｔ１３４−１０３に実行ＰＣ値を設定し、そのサイクルフレームをトレースバッファ１６に格納する。また図３に示す例では、ｔ５において更に、ＰＣ５の命令実行によりライトアクセスＷＡ０とライトデータＷＤ０とが発生し、また同時にＰＣ１のリードアクセスＲＡ０に対応するリードデータＲＤ０が受信される。従ってｔ５においてトレースバッファ１６に格納されるサイクルフレームにおいては、これらのデータアクセスに関するトレース情報も、上記分岐先情報とともに適宜設定されることになる。
【００３６】
ｔ６では、ＰＣ６の命令実行によりライトアクセスＷＡ１とライトデータＷＤ１とが発生し、また同時にＰＣ２のリードアクセスＲＡ１に対応するリードデータＲＤ１が受信される。従って、ライトアクセスを示すトレース情報とリードデータに関するトレース情報とが、１つのサイクルフレームとして、トレースバッファ１６に格納される。即ち、図５に示すサイクルフレームにおいて、ｂｉｔ１３４−１０３に実行ＰＣ値、ｂｉｔ６６に値“０ｂ１”、ｂｉｔ６７にデータアクセス有効を示すビットが格納される。またアクセスサイズ、アクセスアドレス、及びライトデータには、当該ライトアクセスに対応した値が格納される。またリードデータＩＤとリードデータとには、受信したリードデータに対応する値が格納される。以降同様に、ＣＰＵの実行情報を発生した順にトレースバッファ１６に格納していく。
【００３７】
図８は、分岐トレース情報を構築する処理の一例を示すフローチャートである。このフローチャートの処理は、ホストコンピュータ１３のデバッガソフトウェア１５により、トレースバッファ１６に記録されたサイクルフレームフォーマットのトレース情報に対して実行される。
【００３８】
ステップＳ１で、最新のサイクルフレームを着目フレームとする。ステップＳ２で、着目サイクルフレームの分岐先フラグがＨ（分岐先であることを示す値）に設定されているか否かを判定する。ＮＯの場合には、次のサイクルフレームに移動する（次のサイクルフレームを着目フレームとする）。これを繰り返し、分岐先フラグが設定されているサイクルフレームを検出すると（Ｓ２でＹＥＳ）、ステップＳ３で、着目フレームから分岐要因及び分岐先ＰＣの情報を取り出す。ステップＳ４で次のサイクルフレームに進む（次のサイクルフレームを着目フレームとする）。ステップＳ５で、着目フレームにおいて分岐元フラグが立っていることを確認し、そのサイクルフレームから分岐元ＰＣを取り出す。ステップＳ６で、ステップＳ３で取得した分岐要因及び分岐先ＰＣとステップＳ５で取得した分岐元ＰＣとを用いて、１つの分岐トレース情報を構築する。ステップＳ７で、着目フレーム内において更に分岐先フラグも立っているか否かを判定する。ＹＥＳの場合、ステップＳ３に戻り以降の処理を繰り返す。これは、着目している実行命令が分岐先かつ分岐元である場合に相当する。分岐先フラグが立っていない場合（Ｓ７でＮＯ）、ステップＳ８で、着目フレームが最後のサイクルフレームであるか否かを判定する。最後のサイクルフレームでない場合には、ステップＳ９で次のサイクルフレームに移動し（次のサイクルフレームを着目フレームとし）、ステップＳ２に戻り以降の処理を繰り返す。最後のサイクルフレームの場合（Ｓ８でＹＥＳ）、分岐トレース情報構築処理を終了する。
【００３９】
図９は、データトレース情報を構築する処理の一例を示すフローチャートである。このフローチャートの処理は、ホストコンピュータ１３のデバッガソフトウェア１５により、トレースバッファ１６に記録されたサイクルフレームフォーマットのトレース情報に対して実行される。
【００４０】
ステップＳ１で、最新のサイクルフレームを着目フレームとする。ステップＳ２で、着目サイクルフレームのリードデータ有効フラグがＨ（有効であることを示す値）に設定されているか否かを判定する。リードデータ有効フラグが設定されていない場合（Ｓ２でＮＯ）、処理はステップＳ４に進む。またリードデータ有効フラグが設定されている場合（Ｓ２でＹＥＳ）、ステップＳ３で、着目フレームからリードデータＩＤ（ＲＤＩＤ）とリードデータ（ＲＤＡＴＡ）とを取り出す。次にステップＳ４で、着目フレームにおいてデータアクセス有効フラグが立っているか否かを判定する。データアクセス有効フラグがたっていない場合（Ｓ４でＮＯ）、処理はステップＳ９に進む。データアクセス有効フラグがたっている場合（Ｓ４でＹＥＳ）、ステップＳ５で、データアクセスはライトであるか否かが判定される。
【００４１】
データアクセスがライトである場合（Ｓ５でＹＥＳ）、ステップＳ６で、実行ＰＣ、アクセスサイズ（ＳＩＺＥ）、アクセスアドレス（ＡＤＲ）、及びライトデータ（ＷＤＡＴＡ）を着目フレームから取得する。続くステップＳ８で、ステップＳ６で取得した実行ＰＣ、アクセスサイズ、アクセスアドレス、及びライトデータを用いて、1つのライトデータトレース情報を構築する。またデータアクセスがライトでない場合（Ｓ５でＮＯ）、ステップＳ７で、実行ＰＣ、アクセスサイズ（ＳＩＺＥ）、アクセスアドレス（ＡＤＲ）、及びリードアクセスＩＤ（ＲＡＩＤ）を着目フレームから取得する。続くステップＳ８で、ステップＳ７で取得した実行ＰＣ、アクセスサイズ、及びアクセスアドレスと、Ｓ７で取得したリードアクセスＩＤに対応するＳ３で取得したリードデータとを用いて、1つのリードデータトレース情報を構築する。
【００４２】
ステップＳ９で、着目フレームが最後のサイクルフレームであるか否かを判定する。最後のサイクルフレームでない場合には、ステップＳ１０で次のサイクルフレームに移動し（次のサイクルフレームを着目フレームとし）、ステップＳ２に戻り以降の処理を繰り返す。最後のサイクルフレームの場合（Ｓ９でＹＥＳ）、データトレース情報を構築する処理を終了する。
【００４３】
上記の処理において、ステップＳ５の判定は、データアクセス有効フラグとリードかライトかを示すフラグとに基づいて行なうことができる。なおリードデータトレース情報は、２つのサイクルフレームにまたがっていることもあれば、１つのサイクルフレームにリードデータとリードアクセス情報とが格納されていることもある。ライトデータトレース情報については、１つのサイクルフレームに全ての情報が格納されている。なお上記の処理において、リードデータトレース情報のみ取得するよう設定した場合は、ライトデータ関連のトレース情報はなく、また、ライトデータトレース情報のみ取得するよう設定した場合は、リードデータ関連のトレース情報はない。
【００４４】
図１０は、トレースバッファに記録されたトレース情報からユーザに提示するトレースリストを抽出する処理を示す図である。図１０の左側がトレースバッファに格納される各サイクルフレームであり、図７に示す実行履歴の例に対応する。図１０の右側が各サイクルフレームから抽出したトレースリストの情報である。例えば、ｔ６でトレースバッファに格納したサイクルフレームの情報の一部に基づいて、ＰＣ６で書込みアドレスＷＡ１に書込みデータＷＤ１を書き込む命令を示す命令表記Ｗｒｉｔｅ（ＰＣ６／ＷＡ１，ＷＤ１）が生成される。またこのｔ６でトレースバッファに格納したサイクルフレームの情報の残りの部分とｔ２でトレースバッファに格納したサイクルフレームの情報とに基づいて、ＰＣ２での読出し命令を示す命令表記Ｒｅａｄ（ＰＣ２／ＲＡ１，ＲＤ１）が生成される。同様にして、各サイクルフレームに記録されるデータを並べ替えことにより、各トレースリストの命令表記を生成する。即ち、複数のサイクルフレームに分散して記録されたデータを１つに纏めることにより、１つのトレースリストの命令表記を生成する。
【００４５】
以上説明した技術に基づけば、各命令実行サイクルで発生したトレース情報を、命令実行サイクル毎にそのまま格納するので、デバッグ回路２２による複雑なフレーム形成処理が必要ない。またトレースバッファ１６は、１サイクルで発生し得る全ての情報を格納できるビット幅を持つため、実行履歴情報が喪失することがない。また更に、ＣＰＵの実行履歴に関する情報は、命令実行サイクル毎に、実行ＰＣ値とともにトレースバッファ１６へ格納されるので、全てのトレース情報に対して実行ＰＣの値が得られる。トレースバッファ１６に記録したトレース情報には、各命令実行毎にデータを纏めるためのＩＤ情報等を含めてあるので、後でデバッガソフトウェア１５によりトレース対象の各命令実行毎に纏めたデータ形式のトレース情報を生成できる。
【００４６】
図１１は、ソフトウェアによるデータ並べ替え処理を実行する装置の構成を示す図である。図１１に示されるように、ソフトウェアによるデータ並べ替え処理を実行する装置は、例えばパーソナルコンピュータやエンジニアリングワークステーション等のコンピュータにより実現される。図１１の装置は、コンピュータ５１０と、コンピュータ５１０に接続されるディスプレイ装置５２０、通信装置５２３、及び入力装置よりなる。入力装置は、例えばキーボード５２１及びマウス５２２を含む。コンピュータ５１０は、ＣＰＵ５１１、ＲＡＭ５１２、ＲＯＭ５１３、ハードディスク等の二次記憶装置５１４、可換媒体記憶装置５１５、及びインターフェース５１６を含む。コンピュータ５１０が、図１のホストコンピュータ１３に相当する。
【００４７】
キーボード５２１及びマウス５２２は、ユーザとのインターフェースを提供するものであり、コンピュータ５１０を操作するための各種コマンドや要求されたデータに対するユーザ応答等が入力される。ディスプレイ装置５２０は、コンピュータ５１０で処理された結果等を表示すると共に、コンピュータ５１０を操作する際にユーザとの対話を可能にするために様々なデータ表示を行う。通信装置５２３は、遠隔地との通信を行なうためのものであり、例えばモデムやネットワークインターフェース等よりなる。
【００４８】
本発明によるソフトウェアによるデータ並べ替え処理は、コンピュータ５１０が実行可能なコンピュータプログラムとして提供される。このコンピュータプログラムは、可換媒体記憶装置５１５に装着可能な記憶媒体Ｍに記憶されており、記憶媒体Ｍから可換媒体記憶装置５１５を介して、ＲＡＭ５１２或いは二次記憶装置５１４にロードされる。或いは、このコンピュータプログラムは、遠隔地にある記憶媒体（図示せず）に記憶されており、この記憶媒体から通信装置５２３及びインターフェース５１６を介して、ＲＡＭ５１２或いは二次記憶装置５１４にロードされる。
【００４９】
キーボード５２１及び／又はマウス５２２を介してユーザからプログラム実行指示があると、ＣＰＵ５１１は、記憶媒体Ｍ、遠隔地記憶媒体、或いは二次記憶装置５１４からプログラムをＲＡＭ５１２にロードする。ＣＰＵ５１１は、ＲＡＭ５１２の空き記憶空間をワークエリアとして使用して、ＲＡＭ５１２にロードされたプログラムを実行し、適宜ユーザと対話しながら処理を進める。なおＲＯＭ５１３は、コンピュータ５１０の基本動作を制御するための制御プログラムが格納されている。
【００５０】
上記コンピュータプログラムを実行することにより、コンピュータ５１０が、上記実施例で説明されたようにソフトウェアによるデータ並べ替え処理を実行する。
【００５１】
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
【符号の説明】
【００５２】
１０  デバッグシステム
１１  半導体装置
１２  外部デバッグ装置
１３  ホストコンピュータ
１５  デバッガソフトウェア
１６  トレースバッファ
２１  ＣＰＵ
２２  デバッグ回路
２３  ＲＡＭ
２４  ＲＯＭ
２５  周辺回路
２６  内部バス
【図１】
2010218139.tif 000003
【図２】
2010218139.tif 000004
【図３】
2010218139.tif 000005
【図４】
2010218139.tif 000006
【図５】
2010218139.tif 000007
【図６】
2010218139.tif 000008
【図７】
2010218139.tif 000009
【図８】
2010218139.tif 000010
【図９】
2010218139.tif 000011
【図１０】
2010218139.tif 000012
【図１１】
2010218139.tif 000013