(57)【特許請求の範囲】
【請求項１】
ＣＰＵの実行状態を表すステータス情報と絶対分岐先アドレスを分割して出力するターゲットシステムのトレース情報を出力するデバッグシステムであって、
ターゲットシステムから分割された絶対分岐先アドレスとステータス情報を受け取る手段と、
ターゲットシステムから絶対分岐先アドレスの一部を受け取った場合に、ターゲットシステムが実行するプログラムが存在するアドレス領域に関する情報及びターゲットシステムから受けとったステータス情報の少なくとも一方に基づき、前記絶対分岐先アドレスの一部以外の部分を解析する手段と、を含み、
受け取った絶対分岐先のアドレス情報の一部を下位ビットとする候補アドレス群を抽出し、当該候補アドレス群の中から絶対分岐先のアドレスを解析することを特徴とするデバッグシステム。
【請求項２】
絶対分岐先のアドレス情報を分割して出力するターゲットシステムのトレース情報を生成するデバッグシステムであって、
前記ターゲットシステムから絶対分岐先のアドレス情報の一部を受けとる手段と、
プログラムが存在するアドレス領域に関する情報に基づき受け取った絶対分岐先のアドレス情報の一部以外の部分を解析する手段と、
を含むことを特徴とするデバッグシステム。
【請求項３】
請求項１乃至２のいずれかにおいて、
ターゲットシステムから受け取ったステータス情報の配列と、候補アドレス群に含まれる所与の候補アドレスにより特定されるプログラムの機械語命令列から予測されるステータス情報の配列と比較して絶対分岐先のアドレス情報を解析することを特徴とするデバッグシステム。
【請求項４】
請求項１乃至３のいずれかにおいて、
前記ステータス情報として、ターゲットシステムのＣＰＵの実行状態が通常命令実行、絶対分岐命令実行、相対分岐命令実行のいずれに属するかを判別するための情報を含むことを特徴とするデバッグシステム。
【請求項５】
ＣＰＵの実行状態を表すステータス情報と絶対分岐先アドレスを分割して出力するターゲットシステムのトレース情報を出力するデバッグシステムを制御するためのコンピュータが読みとり可能な情報記憶媒体であって、
ターゲットシステムから分割された絶対分岐先アドレスとステータス情報を受け取る手段と、
ターゲットシステムから絶対分岐先アドレスの一部を受け取った場合に、ターゲットシステムが実行するプログラムが存在するアドレス領域に関する情報及びターゲットシステムから受けとったステータス情報の少なくとも一方に基づき、前記絶対分岐先アドレスの一部以外の部分を解析する手段と、
を実現するために必要な情報を含み、
受け取った絶対分岐先のアドレス情報の一部を下位ビットとする候補アドレス群を抽出し、当該候補アドレス群の中から絶対分岐先のアドレスを解析するために必要な情報を含むことを特徴とする情報記憶媒体。
【請求項６】
絶対分岐先のアドレス情報を分割して出力するターゲットシステムのトレース情報を生成するデバッグシステムを制御するためのコンピュータが読みとり可能な情報記憶媒体であって、
前記ターゲットシステムから絶対分岐先のアドレス情報の一部を受けとる手段と、
プログラムが存在するアドレス領域に関する情報に基づき受け取った絶対分岐先のアドレス情報の一部以外の部分を解析する手段と、
を実現するために必要な情報を含むことを特徴とする情報記憶媒体。
【請求項７】
請求項５乃至６のいずれかにおいて、
前記トレース情報生成手段が、
ターゲットシステムから受け取ったステータス情報の配列と、候補アドレス群に含まれる所与の候補アドレスにより特定されるプログラムの機械語命令列から予測されるステータス情報の配列と比較して絶対分岐先のアドレス情報を解析するために必要な情報を含むことを特徴とする情報記憶媒体。
【請求項８】
請求項５乃至７のいずれかにおいて、
前記ステータス情報として、ターゲットシステムのＣＰＵの実行状態が通常命令実行、絶対分岐命令実行、相対分岐命令実行のいずれに属するかを判別するために必要な情報を含むことを特徴とする情報記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、デバッグシステム及びデバッグシステムに用いる情報記憶媒体に関する。
【０００２】
【背景技術及び発明が解決しようとする課題】
近年、ゲーム装置、カーナビゲーションシステム、プリンタ、携帯情報端末などの電子機器に組み込まれ、高度な情報処理を実現できるマイクロコンピュータに対する需要が高まっている。このような組み込み型のマイクロコンピュータは、通常、ターゲットシステムと呼ばれるユーザボードに実装される。このターゲットシステムを動作させるソフトウェアの開発を支援するためにＩＣＥ（In-Circuit Emulator）と呼ばれるソフトウェア開発支援ツールが広く使用されている。
【０００３】
さて、このようなＩＣＥとしては、従来、図１に示すようなＣＰＵ置き換え型と呼ばれるＩＣＥが主流を占めていた。このＣＰＵ置き換え型ＩＣＥでは、デバッグ時にターゲットシステム３００からマイクロコンピュータ３０２を取り外し、その代わりにデバッグツール３０４のプローブ３０６を接続する。そして、このデバッグツール３０４に、取り外したマイクロコンピュータ３０２の動作をエミュレートさせる。また、このデバッグツール３０４に、トレース情報の取得やデバッグのために必要な種々の処理を行わせる。
【０００４】
しかしながら、このＣＰＵ置き換え型ＩＣＥでは、マイクロコンピュータ３０２の内部動作周波数が上がるとプローブ３０６やトレース情報を格納するバッファで生じる信号の遅延によりリアルタイムトレースが困難になる。
【０００５】
このような問題を解決するために量産チップ上でリアルタイムトレースを可能にするシステムの開発が行われている。このとき、トレース情報としてアドレスバス等の情報をリアルタイムにトレースバッファに格納しようとすると数十本の専用端子が必要となる。ここにおいて、係る端子はデバッグ時のみ必要な物で、エンドユーザーにとっては不要なものであるから、より少ないほうが好ましい。
【０００６】
そこで、本出願人はリアルタイムトレースを実現するためのトレース情報を専用４端子に出力し、このトレース情報からリアルタイムトレースを可能にするシステムを開発している。
【０００７】
具体的には毎クロック毎にＣＰＵの実行ステータス情報を３端子に出力し、また絶対分岐命令等により絶対分岐が発生すると続く２７クロックサイクルで分岐先のＰＣ値をシリアルに１端子に出力する。絶対分岐命令とはプログラムの実行中にレジスタの値等によって分岐先のアドレスが決まる命令であり、命令コードからは分岐先を判断することができない命令である。従って絶対分岐命令が発生するとプログラムの命令コードから分岐先が分からないため分岐先のＰＣ値を出力することでトレースが可能となる。
【０００８】
ところが前記ＰＣ値をシリアルに１端子に出力しているため、絶対分岐命令が連続又は数命令間隔で実行されると、ＰＣ値の情報が途中で途切れてしまいトレースができないという問題点があった。
【０００９】
本発明は、以上のような技術的課題に鑑みてなされたものであり、その目的とするところは、少ない端子で量産チップ上でのリアルタイムトレースを実現し、絶対分岐命令が連続又は短い間隔で実行されてもトレース可能なデバッグシステム及び情報記憶媒体を提供することにある。
【００１０】
【課題を解決するための手段】
本発明は、ＣＰＵの実行状態を表すステータス情報と絶対分岐先アドレスを分割して出力するターゲットシステムのトレース情報を出力するデバッグシステムであって、ターゲットシステムから分割された絶対分岐先アドレスとステータス情報を受け取る手段と、ターゲットシステムから絶対分岐先アドレスの一部を受け取った場合に、ターゲットシステムが実行するプログラムが存在するアドレス領域に関する情報及びターゲットシステムから受けとったステータス情報の少なくとも一方に基づき、前記絶対分岐先アドレスの一部以外の部分を特定してトレース情報を生成するトレース情報生成手段と、を含むことを特徴とする。
【００１１】
また本発明に係る情報記憶媒体は前記手段を実現するための情報を含むことを特徴とする。
【００１２】
絶対分岐先のアドレス情報を分割して出力するとは、例えば絶対分岐先のアドレスを１又は数ビットずつシリアルに出力するような場合をいう。
【００１３】
またプログラムが存在するアドレス領域に関する情報とは、例えばマップのアドレス割り当て情報等である。またアドレスとしてとりうるビット数からプログラムが存在するアドレス領域を特定できる場合は、その情報でもよい。例えば１６ビットアドレスならば６４ｋバイトのアドレス領域が指定可能であるので、プログラムが存在するアドレス領域を０〜６４ｋバイトとすることができる。
【００１４】
またプログラムが存在するアドレス領域に関する情報はデバッグシステム内に予め有していてもよいし、トレース情報生成に際して受け取るようにしてもよい。
【００１５】
ターゲットシステムから絶対分岐先アドレスが分割して出力される場合には、短い間隔で絶対分岐が発生すると、先の絶対分先アドレスを全部出力し終わる前に新たな絶対分岐先が出力され、絶対分岐先のアドレスの一部しか受け取れない場合がある。
【００１６】
本発明によればこのような場合でも、ターゲットシステムが実行するプログラムが存在するアドレス領域に関する情報及びターゲットシステムから受けとったステータス情報の少なくとも一方に基づき、前記絶対分岐先アドレスの一部以外の部分を特定してトレース情報を生成することができる。
【００１７】
本発明のデバッグシステムは、ステータス情報と絶対分岐先アドレスという少ないデバッグ情報からでも通常のＩＣＥ等と同様のトレース情報が作成可能であるため、ターゲットシステムのデバッグ用端子の削減を可能にし、ターゲットシステムのコスト削減に貢献できるという効果も有する。
【００１８】
本発明のデバッグシステムは、前記トレース情報生成手段が、受け取った絶対分岐先のアドレス情報の一部を下位ビットとする候補アドレス群を抽出し、当該候補アドレス群の中から絶対分岐先のアドレスを特定することを特徴とする。
【００１９】
また本発明に係る情報記憶媒体は前記手段を実現するための情報を含むことを特徴とする。
【００２０】
本発明のように受け取った絶対分岐先のアドレス情報の一部を下位ビットとする候補アドレス群を抽出する事により、可能性のある絶対分岐先のアドレスを候補アドレス群に絞り込むことができ、より効率よく絶対分岐先の特定を行うことができる。
【００２１】
本発明のデバッグシステムは、前記トレース情報生成手段が、ターゲットシステムから受け取ったステータス情報の配列と、候補アドレス群に含まれる所与の候補アドレスが指すプログラムの機械語命令列から予測されるステータス情報の配列と比較して絶対分岐先のアドレス情報を特定することを特徴とする。
【００２２】
また本発明に係る情報記憶媒体は前記手段を実現するための情報を含むことを特徴とする。
【００２３】
ここにおいてターゲットシステムが実行するプログラムの機械語命令列を把握するための情報とは、２進法や１６進法で表された機械語の命令コード列でもよいし、機械語の命令コード列をニーモニックコードで表した命令コード列でもよい。少なくともターゲットシステムのＣＰＵが実行する機械語の命令列が把握できるものであればよい。なお、ターゲットシステムが実行するプログラムの機械語命令列を把握するための情報は予めデバッグシステム内に保持しておいてもよいし、後で取得してもよい。
【００２４】
候補アドレス群に含まれるアドレスが絶対分岐先アドレスである場合には、ターゲットシステムから受け取ったステータス情報の配列と、候補アドレス群に含まれるアドレスが指すプログラムの機械語命令列から予測されるステータス情報の配列とが一致するはずである。従ってこれらを比較して、一致していなければ当該アドレスは絶対分岐先のアドレスではないと判断することができる。
【００２５】
このようにすることで本発明では、絶対分岐先のアドレス情報の一部しか受け取れない場合でも絶対分岐先のアドレスをより正確に特定してトレース情報を生成することができる。
【００２６】
本発明のデバッグシステムは、前記ステータス情報として、ターゲットシステムのＣＰＵの実行状態が通常命令実行、絶対分岐命令実行、相対分岐命令実行のいずれに属するかを判別するための情報を含むことを特徴とする。
【００２７】
また本発明に係る情報記憶媒体は前記手段を実現するための情報を含むことを特徴とする。
【００２８】
ここにおいて、相対分岐命令とはプログラム中に明示的に記述されたアドレスに分岐する命令であり、ソースコードから分岐先を判断可能な命令である。また絶対分岐命令とはプログラムの実行中にレジスタの値によって分岐先のアドレスが決まる命令であり、ソースコードからは分岐先を判断することができない命令である。通常命令とは、命令のアドレス順に実行される命令である。この３種類のいずれに属するかを示す情報及び絶対分岐先のアドレス情報が得られると、実行プログラムの機械語命令列の情報と照らし合わせることによりトレースを行うことが可能となる。このためわずか３本という少ない端子から受け取った情報からでもリアルタイムトレースを行うことができる。
【００２９】
本発明は、絶対分岐先のアドレス情報を分割して出力するターゲットシステムのトレース情報を生成するデバッグシステムであって、前記ターゲットシステムから絶対分岐先のアドレス情報の一部を受けとる手段と、プログラムが存在するアドレス領域に関する情報に基づき受け取った絶対分岐先のアドレス情報の一部以外の部分を特定する手段と、を含むことを特徴とする。
【００３０】
また本発明に係る情報記憶媒体は前記手段を実現するための情報を含むことを特徴とする。
【００３１】
絶対分岐先のアドレス情報を分割して出力するとは、例えば絶対分岐先のアドレスを１又は数ビットずつシリアルに出力するような場合をいう。
【００３２】
本発明によれば、短い間隔で絶対分岐が発生して絶対絶対分先アドレスの一部しか受け取れない場合でも、絶対分岐先のアドレスを特定してトレース情報を生成する。このため絶対分岐命令が連続してプログラムカウンタの一部の情報しか得ることができない場合でもトレース情報の生成を行うことができる。
【００３３】
また本発明のデバッグシステムは少ないデバッグ情報からでも通常のＩＣＥ等と同様のトレース情報が作成可能であるため、ターゲットシステムのデバッグ用端子の削減を可能にし、ターゲットシステムのコスト削減に貢献できるという効果も有する。
【００３４】
【発明の実施の形態】
以下、本発明の好適な実施形態について図面を用いて詳細に説明する。
【００３５】
１．本実施形態の構成の概要
まず本実施形態の構成について図２を用いて説明する。
【００３６】
図２に示すように、デバッグ対象となるターゲットシステムであるマイクロコンピュータ１０は、ＣＰＵ（中央処理ユニット）１２、実行情報出力部１４、内部メモリ１６を含む。
【００３７】
ここで実行情報出力部１６は、リアルタイムトレースを実現するための実行情報を専用４端子に出力する。具体的には毎クロック毎にＣＰＵの命令実行ステータス情報を３端子（ＤＳＴ［２：０］）に出力し、ＰＣ絶対分岐実行が発生すると続く２７クロックサイクルで分岐先のＰＣ値（ＤＰＣＯ）をシリアルに１端子に出力する。
【００３８】
また内部メモリ１６にはターゲットシステムで実行されるプログラム等が記憶されている。
【００３９】
また本実施形態のデバッグシステム２０は、ターゲットであるマイクロコンピュータに直接接続されるデバッグツール２１と、当該デバッグツールと接続されたホストコンピュータ２３で構成されている。
【００４０】
デバッグツール２１は実行情報取得部２２，ターゲットメモリ書き込み部２８を含み、ホストコンピュータ２３はプログラム情報記憶部２６、トレース情報生成部２７，プログラム情報書き込み部２９を含んでいる。
【００４１】
実行情報取得部２２は、３ビットのＤＳＴ［２：０］と、分岐先のＰＣ（プログラムカウンタ）値を表すＤＰＣＯを内部のトレースメモリ２４に格納する。トレース範囲が指定されている場合には、その範囲のＤＳＴ［２：０］とＤＰＣＯをトレースメモリに格納する。
【００４２】
なお分岐先ＰＣは下位ビットから１ビットずつシリアルに出力されるため、全ビット出力される前に新たな絶対分岐が発生すると、絶対分岐先のアドレス情報の一部しかを受けとれないことになる。
【００４３】
ターゲットメモリ書き込み部２８は、ターゲットシステムの内部メモリ１６にプログラムをロードしたり、ターゲットシステムのメモリのプログラムを書き換えたりする機能を有し、ＴＸＤ／ＲＸＤライン（双方向通信ライン）を介してマイクロコンピュータ１０の内部メモリ１４に書き込むデータを送信する。
【００４４】
プログラム情報記憶部２６は、ターゲットシステムの内部メモリ１６に記憶されたプログラムと同一のプログラムの機械語コード列を記憶する。
【００４５】
トレース情報生成部２７は、ターゲットシステムから絶対分岐先アドレスの一部を受け取った場合に、ターゲットシステムが実行するプログラムが存在するアドレス領域に関する情報及びターゲットシステムから受けとったステータス情報の少なくとも一方に基づき、前記絶対分岐先アドレスの一部以外の部分を特定してトレース情報を生成する処理を行う。さらに受け取った絶対分岐先のアドレス情報の一部を下位ビットとする候補アドレス群を抽出し、ターゲットシステムから受け取ったステータス情報の配列と、候補アドレス群に含まれる所与の候補アドレスにより特定される機械語コード列から予測されるステータス情報の配列と比較して絶対分岐先のアドレス情報を特定する処理を行う。
【００４６】
また当該デバッグシステムが有しているターゲットシステムの実行開始アドレス及びターゲットのＣＰＵで実行されるプログラムの機械語コード列に基づき絶対分岐命令発生以前のトレース情報を生成する処理を行う。
【００４７】
またメモリに蓄積されたステータス情報がトリガポイントにマッチしていることを示している場合には、当該デバッグシステムが有しているトリガポイントアドレス及びターゲットが実行するプログラムの機械語コード列に基づき、絶対分岐命令発生以前のトレース情報を生成する処理を行う。
【００４８】
前記メモリに蓄積されたステータス情報が絶対分岐発生を示していた場合には、当該絶対分岐発生が割り込み発生によるものか否かを、プログラムの機械語コード列に基づき判別してトレース情報を生成する処理を行う。
【００４９】
またトレース情報生成に際しては、プログラム情報記憶部２６に記憶されたプログラムの機械語コード列を用いる。
【００５０】
プログラム情報書き込み部２９は、ターゲットシステムのメモリにロードしたプログラムと同一のプログラムを前記プログラム情報記憶部２６にロードしたり、ターゲットシステムのメモリに記憶されているプログラムコードを読み出して前記プログラム情報記憶部２６に書き込んだり、前記プログラム情報記憶部２６に記憶されたプログラムをターゲットシステムのプログラムと同内容になるよう書き換えたりする処理を行う。
【００５１】
２．ターゲットシステムが出力するステータス情報の内容
図３はＤＳＴ［２：０］の出力値（以下ＤＳＴ情報という）とＣＰＵの命令実行状態の関係を表した図である。ここにおいてＰＣ相対分岐命令とはプログラム中に明示的に記述されたアドレスに分岐する命令であり、命令コードから分岐先を判断可能である。またＰＣ絶対分岐命令とはプログラムの実行中にレジスタの値によって分岐先のアドレスが決まる命令であり、命令コードからは分岐先を判断することができない。
【００５２】
従って本実施の形態ではＰＣ絶対分岐命令が発生すると分岐先のＰＣ値（ＤＰＣＯ）を出力することでトレースを可能としている。
【００５３】
即ちマイクロプロセッサが命令をアドレスの順番に実行している時（ＤＳＴ情報が０００又は１００である場合）には、プログラムカウンタがどこまで進んだか分かるのでプログラムの命令コードからトレースが可能である。また、マイクロプロセッサがＰＣ相対分岐命令を実行した時（ＤＳＴ情報が００１又は１０１である場合）にも、プログラムの命令コードから分岐先が分かるのでトレースが可能である。
【００５４】
しかし、マイクロプロセッサがＰＣ絶対分岐命令を実行した時（ＤＳＴ情報が０１０又は１１０である場合）には、プログラムの命令コードから分岐先が分からないため、ＤＳＴ情報のみではトレースができない。そこで、係る場合に分岐先のＰＣ値（ＤＰＣＯ）を出力することでトレースを可能としているのである。
【００５５】
３．分岐先アドレスを特定するための処理
ターゲットシステムは、前記ＰＣ値をシリアルに１端子に出力しているので、絶対分岐命令が連続又は数命令間隔で実行されると、ＰＣ値の情報が途中で途切れてしまいトレースができないという問題点があった。
【００５６】
そこで本実施の形態では、ＰＣ値の一部の情報しかえることが出来ない場合でも後述するマップ情報と前記ＤＳＴ情報に基づき絶対分岐の分岐先ＰＣ値を特定できるように、トレース情報生成部２７は以下に説明するような分岐先アドレスを特定するための処理を行っている。
【００５７】
図４（Ａ）（Ｂ）は絶対分岐先のアドレスを特定するための候補アドレス群の抽出について説明するための図である。
【００５８】
図４（Ａ）の３１０は、ＤＰＣＯ信号から得られたＰＣ値の情報を１６進数で表したものである。ＰＣ値は下位のビットから１ビットずつ２７ビット出力されるが、この間に新たな絶対分岐が発生したら、そこで新たな絶対分岐先のＰＣ値が出力されるため、先に出力されていたＰＣ値はそこで途切れてしまう。
【００５９】
３１０は下位１２ビット分の情報３１２でＰＣ値が途切れてしまい、上位のビット情報３１４、３１６が得られていない状態である。このような場合、先頭の４ビット３１６（１６進コードなので１桁）を０とすると絶対分岐先の候補となるＰＣ値は２16＝６５５３６個となる（図４（Ａ）３２０参照）。従って、実際のＰＣ値を特定することは困難である。
【００６０】
そこで本実施の形態では、図４（Ｂ）に示すようにターゲットシステムのＣＰＵが接続されているメモリのマップ情報３３０を、デバッグシステムのパラメタファイル３４０に格納しておく。マップ情報３３０とはプログラムが存在するアドレスに関する情報であり、例えばマップ情報３３０は、ターゲットのＣＰＵにＲＡＭ１、ＩＲＯＭ、ＲＡＭ２が接続されており、ＲＡＭ１の０−７ＦＦ番地、ＩＲＯＭの８００００−８０ＦＦＦ番地、ＲＡＭ２の９００００−９ＦＦＦＦ番地にプログラムが格納されていることを示している。
【００６１】
ＰＣ値の下位１２ビットの情報が図４（Ａ）と同じく８０２番地であるとすると、ＲＡＭ１の中には候補はなく、ＩＲＯＭでは８０８０２番地が候補となり、ＲＡＭ２では９０８０２〜９Ｆ８０２の１６個が候補となり、全部で候補数は１７となる（図４（Ｂ）の３４０参照）。
【００６２】
図５（Ａ）〜（Ｃ）はマップ情報から抽出した候補群からの絶対分岐先のアドレスを特定する処理について説明するための図である。図５（Ａ）は、トレースメモリ２４に格納されている絶対分岐命令実行以降のＤＳＴ情報３５０を示している。
【００６３】
図５（Ｂ）は、マップ情報により特定された候補群の一つである８０８０２番地以降の命令コード３６０と当該命令コードの命令の種類３７０と当該命令コードが実行された場合に出力されるであろうＤＳＴ情報３８０を表している。
【００６４】
また、図５（Ｃ）は、マップ情報により特定された候補群の一つである９０８０２番地以降の命令コード３９０と当該命令コードの命令の種類４００と当該命令コードが実行された場合に出力されるであろうＤＳＴ情報４１０を表している。他の候補群についても図５（Ｂ）（Ｃ）と同様に出力が予想されるであろうＤＳＴ情報列を生成して、図５（Ａ）のトレースメモリ２４のＤＳＴ情報３５０と比較処理を行う。そして同じであれば、当該候補が分岐先アドレスとして特定される。ここでは、図５（Ｂ）の８０８０２番地以降の命令実行により出力されるＤＳＴ情報列が図５（Ａ）のトレースメモリ３４のＤＳＴ情報３５０と一致するので、８０８０２番地を分岐先アドレスとして特定する。
【００６５】
図６、図７、図８は、絶対分岐が短い間隔で発生しＤＰＣＯからプログラムカウンタ値が全ビット出力されない場合に分岐先アドレスを特定する処理の動作例を示すフローチャート図である。
【００６６】
まず図６を用いて不完全ＰＣ値の解析処理の全体の流れについて説明する。
【００６７】
不完全ＰＣ値の解析処理の開始にあたり、まず候補ＰＣ値（ulWorkPc）、候補数（ulExpectNum）の初期設定を行う（ステップＳ１０）。
【００６８】
そしてループＡ（ステップＳ２０〜Ｓ４０）でパラメタファイルでマップ情報を定義してあるメモリの個数分、マップ情報を利用した候補ＰＣ検索処理（ステップＳ３０）を行う。例えば図４（Ｂ）においては、パラメタファイル３４０において、ＲＡＭ１、ＩＲＯＭ、ＲＡＭ２の３つのメモリのマップ情報が定義されているので、３回候補ＰＣ値検索処理を行うことになる。この候補ＰＣ値検索処理で、候補ＰＣ値（ulWorkPc）、候補数（ulExpectNum）が更新される。
【００６９】
ループＡが終了すると、設定された候補数（ulExpectNum）が１か否か判断する。そして候補数（ulExpectNum）＝１であれば、１つのＰＣ値に特定されたと判断し、候補ＰＣ値特定処理で更新された候補ＰＣ値（ulWorkPc）を、実際にＣＰＵが実行したアドレスとし、トレースデータの生成処理を行う（ステップＳ５０、Ｓ６０）。
【００７０】
次に図７を用いて、マップ情報を利用した候補ＰＣ検索処理（図６のステップＳ３０）の詳細な処理例について説明する。
【００７１】
マップ情報で定義されたメモリの先頭アドレスをＤＰＣＯ信号の出力ビット数だけ右にシフトしたものを、開始アドレス（ulMapTopAddr）にセットする。また、マップ情報で定義されたメモリの終了アドレスをＤＰＣＯ信号の出力ビット数だけ右にシフトしたものを、終了アドレス（ulMapBottomAddr）にセットする。
【００７２】
例えば図４（Ａ）（Ｂ）で説明したようにＤＰＣＯ信号の出力が１２ビットである場合（図４（Ａ）の３１２参照）には、ＲＡＭ２の先頭アドレス９００００を１２ビットだけ右にシフトした０００９０を開始アドレス（ulMapTopAddr）にセットする。またＲＡＭ２の最後尾アドレス９ＦＦＦＦを１２ビットだけ右にシフトした０００９Ｆを終了アドレス（ulMapBottomAddr）にセットする。なお、先頭アドレス９００００、最後尾アドレス９ＦＦＦＦは１６進数で表記しているため、一桁で４ビット分のＤＰＣＯ信号を表している。
【００７３】
そしてループＢで開始アドレス（ulMapTopAddr）から終了アドレス（ulMapBottomAddr）まで以下の処理を繰り返す（ステップＳ１２０〜Ｓ１７０）。例えば図４（Ｂ）の場合、０００９０から０００９Ｆまで１６回繰り返すことになる。
【００７４】
まず、開始アドレス（ulMapTopAddr）をＤＰＣＯ信号の出力ビット数だけ左にシフトしたものに、ＤＰＣＯから得られた出力中のＰＣ値を足したものを処理対象ＰＣ値（ulPC）にセットする（ステップＳ１３０）。
【００７５】
そして命令コード上で処理対象ＰＣ値（ulPC）以降の命令値を取り出すためのワークアドレス（unWorkAddr）に処理対象ＰＣ値（ulPC）をセットする（ステップＳ１４０）。
【００７６】
例えば図４（Ｂ）において、最初の開始アドレス（ulMapTopAddr）をは、０００９０である。従ってこれをＤＰＣＯ信号の出力ビット数である１２ビットだけ左にシフトさせると０９０００となる。これにＤＰＣＯから得られた出力中のＰＣ値である０００８０２を足した０９０８０２が処理対象ＰＣ値（ulPC）としてセットされる。
【００７７】
そして処理対象ＰＣ値（ulPC）に対してＤＳＴ情報を利用したＰＣ値特定処理を行う（ステップＳ１５０）。
【００７８】
そして次のループに備えて、開始アドレス（ulMapTopAddr）を更新しておく（ステップＳ１６０）。図４（Ｂ）では開始アドレス（ulMapTopAddr）が更新されて０００９１となる。
【００７９】
次に図８を用いて、ＤＳＴ情報を利用したＰＣ値特定処理（図７のステップＳ１５０）の詳細な処理例について説明する。
【００８０】
ループＣでＤＰＣＯ信号の出力ビット数だけ以下の処理を繰り返す（ステップＳ２１０〜Ｓ２５０）。本実施の形態では１クロック毎にＤＰＣＯが１ビット出力されるので絶対分岐命令が発生してから概ねＤＰＣＯ信号の出力ビット数だけそれ以降の命令が実行されているため、ＤＰＣＯ信号の出力ビット数だけそれ以降の命令の実行状態を表すＤＳＴ情報がトレースメモリに格納されることになるからである。
【００８１】
例えば図４（Ｂ）ではＤＰＣＯ信号の出力ビット数が１２ビットであるので、ステップＳ２２０からＳ２４０までの処理が１２回繰り返されることになる。
【００８２】
まず比較対象ＤＳＴコード（ucKindCode）に、ワークアドレス（unWorkAddr）が指すプログラム上の命令コードを実行した場合に出力されるであろうＤＳＴ信号を代入する（ステップＳ２２０）。例えば図５（Ｂ）においてワークアドレス１（３６２）は分岐無し命令であるaddを指しているので、分岐無し命令が実行された場合に出力されるであろうＤＳＴ情報’０００’を比較対象ＤＳＴコード（ucKindCode）に代入する。
【００８３】
そしてトレースメモリ上の対応するＤＳＴ信号と前記比較対象ＤＳＴコードと（ucKindCode）比較して一致していなければ当該処理対象ＰＣ値は求める絶対分岐先のＰＣ値ではないとしてループＣを抜ける（ステップＳ２３０）。
【００８４】
一致している場合には命令コード上の次の命令コードを取り出すために、ワークアドレス（unWorkAddr）を次の命令コード位置に位置づける（ステップＳ２４０）。αは次の命令に移行するための命令サイズである。例えば図５（Ｂ）において１命令が２バイトの場合、ワークアドレス１（３６２）からワークアドレス２（３６４）に位置づける。
【００８５】
そしてＤＰＣＯ信号の出力ビット数だけループＣが実行された場合には、候補ＰＣ値以降の命令コードが実行された場合のＤＳＴ信号とトレースメモリに格納されたＤＳＴ信号がすべて一致したことになるので、当該処理対象ＰＣ値（ulPC）が求める絶対分岐先のアドレスであるとして、処理対象ＰＣ値（ulPC）を候補ＰＣ値（ulWorkPc）にセットする。また候補数（ulExpectNum）をインクリメントする（ステップＳ２６０）。
【００８６】
４．ターゲットシステムを停止させることなくトレース機能を実現するための処理
本実施の形態ではターゲットシステムの実行を停止させることなくトレース情報を生成するために、ターゲットシステムの内部メモリに記憶されたプログラムの機械語命令列（以下プログラム情報という）をホストコンピュータのプログラム情報記憶部２６に記憶させている。
【００８７】
このようにする事により、例えばトレースメモリ上のＤＳＴ信号と比較する前記比較対象ＤＳＴコード（ucKindCode）にを、プログラム情報記憶部２６に記憶されたプログラム情報から作成することができる。従ってトレース情報を生成する際にターゲットシステムの内部メモリ１６を読む必要がないので、ターゲットシステムの実行を停止させることなくトレース情報を生成することができる。
【００８８】
また、ターゲットシステムの内部メモリ１６を読む必要がないのでトレース情報生成のための処理時間を大幅に短縮することができる。
【００８９】
本実施の形態ではターゲットシステムの内部メモリ１６に記憶されたプログラム情報であってトレースに使うものをホストコンピュータのプログラム情報記憶部２６に記憶させるために、プログラム情報書き込み部２９は以下のような処理を行っている。
【００９０】
図９はターゲットシステムの内部メモリにプログラムをロードする場合の動作例を説明するためのフローチャート図である。
【００９１】
本実施の形態ではターゲットシステムの内部メモリにプログラムをロードする際に、当該プログラムのトレース予定がある場合にはターゲットシステムの内部メモリにロードしたプログラム内容をプログラム情報記憶部に書き込む（ステップＳ３１０、Ｓ３２０、Ｓ３３０）。
【００９２】
図１０は、ターゲットシステムの内部のプログラムを書き換える場合の動作例を説明するためのフローチャート図である。
【００９３】
本実施の形態ではターゲットシステムの内部メモリのプログラムを書き換える際に、当該プログラムのトレース予定がある場合には前記プログラム情報記憶部に記憶されたプログラムの対応箇所をターゲットシステムのプログラムと同内容に書き換える（ステップＳ４１０、Ｓ４２０、Ｓ４３０）。
【００９４】
図１１は、プログラムをロードせずに、既にターゲットシステムの内部メモリにある場合の動作例について説明するためのフローチャート図である。
【００９５】
当該プログラムのトレースを行う場合には、マップ情報からプログラムが格納されているメモリのスタートアドレスとエンドアドレスを特定する（ステップＳ５１０、Ｓ５２０）。そしてターゲットシステムの内部メモリのスタートアドレス、エンドアドレスで特定されている内容を読み込み、プログラム情報記憶部に書き込む（ステップＳ５３０）。
【００９６】
５．絶対分岐命令発生以前のプログラムカウンタ解析処理
図１２は絶対分岐命令発生以前のプログラムカウンタ解析処理について説明するための図である。図１２は、ターゲットシステムで命令ｉ１、ｉ２、…が実行されて、そのステータス情報ＤＳＴ１〜ＤＳＴ１２がトレースメモリに蓄積されている様子を表している。本実施の形態ではターゲットシステムは絶対分岐命令を実行するまでプログラムカウンタ値を出力しないので、命令ｉ９が実行されるまでプログラムカウンタ値は出力されない。従って絶対分岐発生以前に実行された命令ｉ１〜命令ｉ８については、実行位置の特定ができずトレース情報が作成できないという問題点があった。
【００９７】
そこで本実施の形態では、トレースメモリに蓄積された先頭ステータス情報ＤＳＴ１に対応する命令実行の際のプログラムカウンタを特定するために以下のような構成を採用している。
【００９８】
すなわち、範囲指定トレースを行わない場合には、例えばプログラムの実行開始位置を指定して実行させる際に、デバッグシステムで実行開始アドレスを取得しておく。そしてトレースメモリに上書きしないオーバーライト無しモードにおいて、ターゲットシステムから出力されるステータス情報を蓄積する。
【００９９】
ここにおいて、範囲指定トレースを行わない場合には、ターゲットシステムは実行したすべての命令についてステータス情報であるＤＳＴ情報を出力する。従ってトレースメモリの先頭に蓄積されているＤＳＴ情報ＤＳＴ１は、前記実行開始アドレスに対応する命令が出力したものと特定できる。
【０１００】
また本実施の形態のターゲットシステムは先頭アドレスとエンドアドレスをトリガアドレスとしてセットすることにより、先頭アドレスからエンドアドレスまでの命令に対応したステータス情報のみを出力させる範囲指定トレースを行うことができる。このときデバッグシステムで、ターゲットシステムにセットしたトリガアドレスをあらかじめ取得しておく。
【０１０１】
係る範囲指定トレースを行う場合には、トレースメモリの先頭に蓄積されているＤＳＴ情報ＤＳＴ１は、先頭アドレスとして指定したトリガアドレスに対応する命令が出力したものと特定できる。
【０１０２】
図１３は、トレースメモリに蓄積されている最も古いデータ出力時のプログラムカウンタを解析する処理の動作例を表したフローチャート図である。
【０１０３】
範囲指定トレースを行う場合には、候補ＰＣ（ulＰＣ）に先頭アドレスであるトリガアドレス１をセットする（ステップＳ６１０、Ｓ６２０）。
【０１０４】
また範囲指定トレースを行わない場合でトレースメモリにオーバーライトしない場合には、候補ＰＣ（ulＰＣ）にトレース開始直前のプログラムカウンタ値をセットする（ステップＳ６３０、Ｓ６４０）。なお、トレース開始直前のプログラムカウンタ値には、これから実行する命令のアドレス値がセットされている。
【０１０５】
そして候補ＰＣ（ulＰＣ）を、トレースメモリの最も古いステータス情報に対応した命令のアドレス値として、トレース情報を生成する（ステップＳ６５０）。
【０１０６】
６．ハードウエア割り込みの判別処理
図１４は、絶対分岐命令実行を示すステータス情報が命令実行によるものかハードウエア割り込みによるものかを判別する処理について説明するための図である。
【０１０７】
図１４の１４１０に示すようにトレースメモリに格納されているステータス情報が絶対分岐命令の実行を示すものである場合には、通常の絶対分岐命令実行によるものである場合とハードウエア割り込みによるものである場合がある。
【０１０８】
そこで本実施の形態では、プログラム情報記憶部に記憶されているプログラムの機械語命令列の情報と比較して、前記ステータス情報が通常の絶対分岐命令実行によるものであるかハードウエア割り込みによるものであるかを判別している。
【０１０９】
トレースメモリに格納されているトレース情報に対応する命令の機械語命令列がｉ１、ｉ２…とすると、１４１０のステータス情報が通常の絶対分岐命令実行によるものである場合には対応する機械語命令は１４２０のｉ３となる。このｉ３が絶対分岐命令でない場合には、１４１０のステータス情報は通常の絶対分岐命令実行によるものでなくハードウエア割り込みによるものであることが判別できることになる。
【０１１０】
図１５は、絶対分岐命令実行を示すステータス情報が命令実行によるものかハードウエア割り込みによるものかを判別する処理の動作例について説明するためのフローチャート図である。
【０１１１】
トレースメモリに蓄積されているＤＳＴ情報の個数だけループＡの処理を行う（ステップＳ７１０〜Ｓ７６０）。
【０１１２】
ＤＳＴ情報が絶対分岐命令の実行を示している場合には、まず当該ＤＳＴ情報出力の際のプログラムカウンタが示すアドレスを解析する（ステップＳ７２０，Ｓ７３０）。そして、解析結果のプログラムカウンタが示すアドレスの命令コードが絶対分岐命令でない場合にはハードウエア割り込み発生箇所とし、データに登録する（ステップＳ７４０，Ｓ７５０）。
【０１１３】
７．ターゲットシステムとデバッグツールの構成例
図１６に本実施形態のマイクロコンピュータ及びデバッグシステムの詳細な構成例を示す。図１６に示すように、マイクロコンピュータ１０２０は、ＣＰＵ１０２２、ＢＣＵ（バス制御ユニット）１０２６、内部メモリ（ミニモニタＲＯＭ１０４２及びミニモニタＲＡＭ１０４４以外の内部ＲＯＭ及び内部ＲＡＭ）１０２８、クロック生成部１０３０、ミニモニタ部１０４０（第１のモニタ手段）、実行情報出力部１０５０を含む。
【０１１４】
ここでＣＰＵ１０２２は、種々の命令の実行処理を行うものであり、内部レジスタ１０２４を含む。内部レジスタ１０２４は、汎用レジスタであるＲ０〜Ｒ１５や、特殊レジスタであるＳＰ（スタックポインタレジスタ）、ＡＨＲ（積和結果データの上位レジスタ）、ＡＬＲ（積和結果データの下位レジスタ）などを含む。
【０１１５】
ＢＣＵ１０２６はバスを制御するものである。例えば、ＣＰＵ１０２２に接続されるハーバードアーキテクチャのバス１０３１や、内部メモリ１０２８に接続されるバス１０３２や、外部メモリ１０３６に接続される外部バス１０３３や、ミニモニタ部１０４０、実行情報出力部１０５０などに接続される内部バス１０３４の制御を行う。
【０１１６】
またクロック生成部１０３０は、マイクロコンピュータ１０２０内で使用される各種のクロックを生成するものである。クロック生成部１０３０はＢＣＬＫを介して外部のデバッグツール１０６０にもクロックを供給している。
【０１１７】
ミニモニタ部１０４０は、ミニモニタＲＯＭ１０４２、ミニモニタＲＡＭ１０４４、制御レジスタ１０４６、ＳＩＯ１０４８を含む。
【０１１８】
ここで、ミニモニタＲＯＭ１０４２には、ミニモニタプログラムが格納される。本実施形態では、このミニモニタプログラムは、ＧＯ、リード、ライトなどのシンプルでプリミティブなコマンドの処理のみを行うようになっている。このため、ミニモニタＲＯＭ４２のメモリ容量を例えば２５６バイト程度に抑えることができ、オンチップデバッグ機能を持たせながらマイクロコンピュータ１０２０を小規模化できるようになる。
【０１１９】
ミニモニタＲＡＭ１０４４には、デバッグモードへの移行時に（ユーザプログラムのブレーク発生時に）、ＣＰＵ１０２２の内部レジスタ１０２４の内容が退避される。これにより、デバッグモードの終了後にユーザプログラムの実行を適正に再スタートできるようになる。また内部レジスタの内容のリード等を、ミニモニタプログラムが持つプリミティブなリードコマンド等で実現できるようになる。
【０１２０】
制御レジスタ１０４６は、各種のデバッグ処理を制御するためのレジスタであり、ステップ実行イネーブルビット、ブレークイネーブルビット、ブレークアドレスビット、トレースイネーブルビットなどを有する。ミニモニタプログラムにより動作するＣＰＵ１０２２が制御レジスタ１０４６の各ビットにデータをライトしたり、各ビットのデータをリードすることで、各種のデバッグ処理が実現される。
【０１２１】
ＳＩＯ１０４８は、マイクロコンピュータ１０２０の外部に設けられたデバッグツール１０６０との間でデータを送受信するためのものである。ＳＩＯ１０４８とデバッグツール１０６０との間は、ＴＸＤ／ＲＸＤ（データ送受信ライン）で接続されている。
【０１２２】
実行情報出力部１０５０は、リアルタイムトレース機能を実現するためのものであり、ＣＰＵの実行状態を表すステータス情報であるＤＳＴ情報（ＤＳＴ［２：０］）及びＰＣ絶対分岐が発生した際の分岐先のＰＣ（プログラムカウンタ）値（ＤＰＣＯ）を実行情報として専用４端子を介して外部に出力する。
【０１２３】
実行情報出力部１０５０とデバッグツール１０６０との間は、ＣＰＵ１０２２の命令実行のステータス情報を出力する３本のＤＳＴ［２：０］と、絶対分岐先のＰＣ（プログラムカウンタ）値をシリアルに１ビットずつ出力する１本のＤＰＣＯという４本のラインで接続されている。
【０１２４】
デバッグツール１０６０はメインモニタ部１０６２、実行情報取得部１０６４を含み、パーソナルコンピュータ等により実現されるホストシステム１０６６に接続される。
【０１２５】
メインモニタ部１０６は、ホストシステム１０６６から入力されるデバッグコマンドをプリミティブコマンドに変換（分解）するための処理を行う。そして、メインモニタ部１０６２が、プリミティブコマンドの実行を指示するデータをミニモニタ部１０４０に送信すると、ミニモニタ部１０４０が、指示されたプリミティブコマンドを実行するための処理を行うことになる。
【０１２６】
また、実行情報取得部１０６４は、３ビットのＤＳＴ［２：０］と、分岐先のＰＣ（プログラムカウンタ）値を表すＤＰＣＯを内部のトレースメモリ１１０４に格納する。トレース範囲が指定されている場合には、その範囲のＤＳＴ［２：０］とＤＰＣＯをトレースメモリに格納する。
【０１２７】
次に本実施の形態で、デバッグシステムからマイクロコンピュータの内部メモリにプログラムをロードしたり、内部メモリの情報を書き換える構成について説明する。
【０１２８】
図１７に示すように、本実施形態では、マイクロコンピュータ１０２０が、ＣＰＵ（中央処理ユニット）１０２２及び本実施形態の要部であるミニモニタ部（第１のモニタ手段）１０４０を含む。また、マイクロコンピュータ１０２０の外部にはメインモニタ部（第２のモニタ手段）１０６２が設けられている。ここでメインモニタ部１０６２は、例えばホストコンピュータ１０６６などが発行したデバッグコマンドをプリミティブコマンドに変換（分解）するための処理を行う。また、ミニモニタ部１０４０は、メインモニタ部１０６２との間でデータを送受信する。そして、ミニモニタ部１０４０は、実行するプリミティブコマンドを、メインモニタ部１０６２からの受信データに基づいて決定し、プリミティブコマンドを実行するための処理を行う。
【０１２９】
ここで、メインモニタ部１０６２の変換処理の対象となるデバッグコマンドとしては、プログラムロード、ＧＯ、ステップ実行、メモリライト、メモリリード、内部レジスタライト、内部レジスタリード、ブレークポイント設定、ブレークポイント解除などのコマンドを考えることができる。メインモニタ部１０６２は、これらの多様で複雑なデバッグコマンドを、例えばＧＯ、ライト（デバッグモード時におけるメモリマップ上の所与のアドレスへのライト）、リード（メモリマップ上の所与のアドレスからのリード）などの、シンプルでプリミティブなコマンドに変換する処理を行う。このようにすることで、ミニモニタ部１０４０の処理を行うミニモニタプログラムの命令コードサイズを格段に小さくすることができる。
【０１３０】
これにより、デバッグシステムからマイクロコンピュータの内部メモリにプログラムをロードしたり、内部メモリの情報を書き換えることができる。すなわちターゲットシステムであるマイクロコンピュータにプログラムロードを行う場合や、メモリライトを行う場合には、ホストコンピュータから、これらのデバッグコマンドを発行することになる。
【０１３１】
８．プリミティブコマンドへの変換
図１８（Ａ）（Ｂ）（Ｃ）（Ｄ）に、各種のデバッグコマンドをプリミティブコマンドへ変換する処理について模式的に示す。
【０１３２】
例えば図１８（Ａ）に示すように、（ＡＤＤ・・・、ＳＵＢ・・・、ＡＮＤ・・・、ＯＲ・・・、ＸＯＲ・・・、ＬＤ．Ｗ・・・）という１２バイトのプログラムを８００１０ｈ番地にロードするというデバッグコマンドが発行されたとする。この場合、このプログラムロードコマンドは、ライト（８００１０ｈ、ＡＤＤ・・・、ＳＵＢ）、ライト（８００１４ｈ、ＡＮＤ・・・、ＯＲ・・・）、ライト（８００１８ｈ、ＸＯＲ・・・、ＬＤ．Ｗ・・・）という３つのプリミティブなライトコマンドに変換される。即ち、ミニモニタプログラムが、この３つのプリミティブなライトコマンドを実行することで、プログラムロードコマンドが実現されるようになる。
【０１３３】
また図１８（Ｂ）に示すようにステップ実行コマンドというデバッグコマンドが発行されたとする。すると、このステップ実行コマンドは、図１６の制御レジスタ１０４６のステップ実行イネーブルビットへのライトコマンドとＧＯコマンドに変換される。即ち、ミニモニタプログラムが、このプリミティブなライトコマンドとＧＯコマンドを実行することで、ステップ実行コマンドが実現されるようになる。
【０１３４】
また図１８（Ｃ）に示すように内部レジスタリードコマンドというデバッグコマンドが発行されたとする。すると、この内部レジスタリードコマンドは、メモリマップ上のミニモニタＲＡＭ４４（内部レジスタの内容の退避先）からのリードコマンドに変換される。即ち、ミニモニタプログラムが、このプリミティブなリードコマンドを実行することで、内部レジスタリードコマンドが実現されるようになる。内部レジスタライトコマンド、メモリリードコマンド、メモリライトコマンドも同様にして実現される。
【０１３５】
また図１８（Ｄ）に示すようにトリガアドレスをブレークポイントとして設定するブレークポイント設定コマンドというデバッグコマンドが発行されたとする。すると、このブレークポイント設定コマンドは、制御レジスタ１０４６のブレークイネーブルビット及びブレークアドレスビットへのライトコマンドに変換される。即ち、ミニモニタプログラムが、このプリミティブなライトコマンドを実行することで、ブレークポイント設定コマンドが実現されるようになる。
【０１３６】
このように本実施形態では、複雑で多様なデバッグコマンドが、プリミティブでシンプルなリード、ライト、ＧＯコマンドに変換される。そして、ミニモニタプログラムは、このプリミティブなリード、ライト、ＧＯコマンドを実行するだけでよいため、ミニモニタプログラムの命令コードサイズは非常に小さくなる。この結果、ミニモニタＲＯＭ１０４２のメモリ容量も小さくでき、小さなハードウェア規模でオンチップデバッグ機能を実現できるようになる。
【０１３７】
９．デバッグツールの構成例
図１９にデバッグツール１０６０の構成例を示す。
【０１３８】
ＣＰＵ１０９０は、ＲＯＭ１１０８に格納されるプログラムを実行したり、デバッグツール１０６０の全体の制御を行うものである。送受信切替部１０９２は、データの送信と受信とを切り替えるためのものである。クロック制御部１０９４は、ＣＰＵ１０９０のＳＣＬＫ端子、アドレスアップカウンタ１１００、トレースメモリ１１０４に供給するクロックを制御するものである。このクロック制御部１０９４には、マイクロコンピュータ１０２０（ＳＩＯ１０４８）からのＢＣＬＫが入力される。クロック制御部１０９４は周波数検出回路１０９５、分周回路１０９６を含む。周波数検出回路１０９５は、ＢＣＬＫの周波数が属する周波数範囲を検出して、その結果を制御レジスタ１０９８に出力する。また分周回路１０９６での分周比は制御レジスタ１０９８により制御される。即ちＣＰＵ１０９０により実行されるメインモニタプログラム（メインモニタＲＯＭ１１０に格納）が、制御レジスタ１０９８からＢＣＬＫの周波数範囲を読み出す。そして、メインモニタプログラムは、この周波数範囲に応じた最適な分周比を決定し、この分周比を制御レジスタ１０９８に書き込む。そして、分周回路１０９６は、この分周比でＢＣＬＫを分周してＳＭＣ２を生成し、ＣＰＵ１０９０のＳＣＬＫ端子に出力する。
【０１３９】
アドレスアップカウンタ１１００は、トレースメモリのアドレスをカウントアップするためのものである。セレクタ１１０２は、ライン１１２２（アドレスアップカウンタ１１００が出力するアドレス）とライン１１２４（アドレスバス１１２０からのアドレス）のいずれかを選択し、トレースメモリ１１０４のアドレス端子にデータを出力する。またセレクタ１１０６は、ライン１１２６（図１６の実行情報出力部１０５０の出力であるＤＳＴ［２：０］、ＤＰＣＯ）とライン１１２８（データバス１１１８）のいずれかを選択し、トレースメモリ１１０４のデータ端子にデータを出力したり、データ端子からデータを取り出す。
【０１４０】
ＲＯＭ１１０８はメインモニタＲＯＭ１１１０（図１６のメインモニタ部１０６２に相当）を含み、メインモニタＲＯＭ１１１０には、メインモニタプログラムが格納される。このメインモニタプログラムは、図１８（Ａ）〜図１８（Ｄ）で説明したように、デバッグコマンドをプリミティブコマンドに変換するための処理を行う。ＲＡＭ１１１２は、ＣＰＵ１０９０のワーク領域となるものである。
【０１４１】
ＲＳ２３２Ｃインターフェース１１１４、パラレルインターフェース１１１６は、図１６のホストコンピュータ１０６６とのインターフェースとなるものであり、ホストシステム１０６６からのデバッグコマンドはこれらのインターフェースを介してＣＰＵ１０９０に入力されることになる。クロック生成部１１１８は、ＣＰＵ１０９０を動作させるクロックなどを生成するものである。
【０１４２】
次に本実施形態でのリアルタイムトレース処理について簡単に説明する。本実施形態では、図１６のＣＰＵ１０２２の命令実行のステータス情報を表す３ビットのＤＳＴ[２：０］と、分岐先のＰＣ値を表すＤＰＣＯをトレースメモリ１１０４に蓄える。そして、トレースメモリ１１０４に蓄えられたデータと、ホストコンピュータ１０６６のプログラム情報記憶部に記憶されたユーザプログラムの機械語命令列の情報とに基づいて、トレースデータを生成する。このようにすることで、マイクロコンピュータ１０２０とデバッグツール１０６０との間の接続ラインの本数を少なくしながら、リアルタイムトレース機能を実現することが可能になる。
【０１４３】
ユーザプログラム実行モードにおいては、ライン１１２２が選択され、セレクタ１１０２を介してアドレスアップカウンタ１１００の出力がトレースメモリ１１０４のアドレス端子に入力される。また、ライン１１２６が選択され、セレクタ１１０６を介してＤＳＴ［２：０］、ＤＰＣＯがトレースメモリ１１０４のデータ端子に入力される。ここでアドレスアップカウンタ１１００には、まず最初に、データバス１１１８、アドレスバス１１２０を用いてＣＰＵ１０９０により図２０（Ａ）に示すようなスタートアドレスが設定される。またアドレスアップカウンタ１１００のＳＴ／ＳＰ（開始／停止）端子には、トレース範囲を特定するＤＳＴ［２］のラインが接続される。そして図２０（Ｂ）に示すように、ＤＳＴ［２］のラインに第１のパルス１３０が入力されると、アドレスアップカウンタ１１００のアドレスアップカウントが開始する。そして、ＤＳＴ［２］のラインに第２のパルス１３２が入力されると、アドレスアップカウンタ１１００のアドレスアップカウントが停止し、トレース動作が停止する。このようにして、所望のトレース範囲でのデータ（ＤＳＴ［２：０］、ＤＰＣＯ）をトレースメモリ１１０４に蓄えることが可能になる。
【０１４４】
一方、ユーザプログラム実行モードからデバッグモードに移行すると、ライン１１２４が選択され、セレクタ１１０２を介してアドレスバス１１２０からのアドレスがトレースメモリ１１０４のアドレス端子に入力される。またライン１１２８が選択され、セレクタ１１０６を介してトレースメモリ１１０４からのデータがデータバス１１１８に出力される。これにより、トレースメモリ１１０４に蓄えられたデータ（ＤＳＴ［２：０］、ＤＰＣＯ）を、デバッグモード時にＣＰＵ１０９０（メインモニタプログラム）が読み出すことが可能になる。そして、読み出されたデータとユーザープログラムの機械語命令列の情報とに基づいて、トレースデータを生成することが可能になる。
【０１４５】
なお、本発明は本実施形態に限定されず、本発明の要旨の範囲内で種々の変形実施が可能である。
【０１４６】
例えば本実施の形態では、デバッグシステムの機能を実現する手段がデバッグツールとホストコンピュータに分散して設けられている場合を例にとり説明したががこれに限られない。デバッグツールとホストコンピュータのいずれか一方にすべて機能を実現する手段を設けてデバッグシステムを実現するようにしてもよい。
【０１４７】
また本実施の形態では、ターゲットシステムから分岐先のＰＣ値が１ビットずつシリアルに出力される場合を例にとり説明したがこれに限られない。分岐先ＰＣ出力用の端子を数ビット分用意しておいて数ビットずつシリアルに出力するような場合でもよい。
【０１４８】
また本実施の形態では二つのトリガアドレスで範囲指定トレースを行う場合を例にとり説明したがこれに限られない。例えば、トリガポイントが一つまたが３つ以上設定されている場合でもよいし、トリガポイントによって範囲指定を行わない場合でもよい。
【０１４９】
またマイクロコンピュータやデバッグツールの構成も本実施形態で説明したものに限定されず、種々の変形実施が可能である。
【図面の簡単な説明】
【図１】ＣＰＵ置き換え型のＩＣＥの例を示す図である。
【図２】本実施形態の構成について説明するための図である。
【図３】ＤＳＴ［２：０］の出力値とＣＰＵの命令実行状態の関係を表した図である。
【図４】図４（Ａ）、図４（Ｂ）は絶対分岐先のアドレスを特定するための候補アドレス群の抽出について説明するための図である。
【図５】図５（Ａ）〜図５（Ｃ）はマップ情報から抽出した候補群からの絶対分岐先のアドレスの特定処理について説明するための図である。
【図６】絶対分岐が短い間隔で発生しＤＰＣＯからプログラムカウンタ値が全ビット出力されない場合に分岐先アドレスを特定する処理の動作例を示すフローチャート図である。
【図７】絶対分岐が短い間隔で発生しＤＰＣＯからプログラムカウンタ値が全ビット出力されない場合に分岐先アドレスを特定する処理の動作例を示すフローチャート図である。
【図８】絶対分岐が短い間隔で発生しＤＰＣＯからプログラムカウンタ値が全ビット出力されない場合に分岐先アドレスを特定する処理の動作例を示すフローチャート図である。
【図９】ターゲットシステムの内部メモリにプログラムをロードする場合の動作例を説明するためのフローチャート図である。
【図１０】ターゲットシステムの内部のプログラムコードを書き換える場合の動作例を説明するためのフローチャート図である。
【図１１】プログラムをロードせずに、既にターゲットシステムの内部メモリにある場合の動作例について説明するためのフローチャート図である。
【図１２】絶対分岐命令発生以前のプログラムカウンタ解析処理について説明するための図である。
【図１３】トレースメモリに蓄積されている最も古いデータ出力時のプログラムカウンタを解析する処理の動作例を表したフローチャート図である。
【図１４】絶対分岐命令実行を示すステータス情報が命令実行によるものかハードウエア割り込みによるものかを判別する処理について説明するための図である。
【図１５】絶対分岐命令実行を示すステータス情報が命令実行によるものかハードウエア割り込みによるものかを判別する処理の動作例について説明するためのフローチャート図である。
【図１６】マイクロコンピュータ、デバッグシステムの構成例を示す機能ブロック図である。
【図１７】本実施の形態におけるデバッグコマンドの実行処理について説明するための図である。
【図１８】図１８（Ａ）〜図１８（Ｄ）は、デバッグコマンドをプリミティブコマンドへ変換（分解）する処理について説明するための図である。
【図１９】デバッグツールの詳細な構成例を示す機能ブロック図である。
【図２０】ＤＳＴ［２］とトレース範囲の関係を示す図である。
【符号の説明】
１０    マイクロコンピュータ
１２    ＣＰＵ（中央処理ユニット）
１４    実行情報出力部
１６    内部メモリ
２０    デバッグシステム
２２    実行情報取得部
２４    トレースメモリ
２６    プログラム情報記憶部
２７    トレース情報生成部
２８    ターゲットメモリ書き込み部
２９    プログラム情報書き込み部
１０２０  マイクロコンピュータ
１０２２  ＣＰＵ
１０２４  内部レジスタ
１０２６  ＢＣＵ
１０２８  内部メモリ
１０３０  クロック生成部
１０３６  外部メモリ
１０４０  ミニモニタ部
１０４２  ミニモニタＲＯＭ
１０４４  ミニモニタＲＡＭ
１０４６  制御レジスタ
１０４８  ＳＩＯ
１０５０  実行情報出力部
１０６０  デバッグツール
１０６２  メインモニタ部
１０６４  実行情報取得部
１０６６  ホストコンピュータ
１０９０  ＣＰＵ
１０９２  送受信切替部
１０９４  クロック制御部
１０９５  周波数検出部
１０９６  分周回路
１０９８  制御レジスタ
１１００  アドレスアップカウンタ
１１０２  セレクタ
１１０４  トレースメモリ
１１０６  セレクタ
１１０８  ＲＯＭ
１１１０  外部モニタＲＯＭ
１１１２  ＲＡＭ
１１１４  ＲＳ２３２Ｃインターフェース
１１１６  パラレルインターフェース
１１１８  クロック生成部
【図１】
0003711438.tif 000002
【図２】
0003711438.tif 000003
【図３】
0003711438.tif 000004
【図４】
0003711438.tif 000005
【図５】
0003711438.tif 000006
【図６】
0003711438.tif 000007
【図７】
0003711438.tif 000008
【図８】
0003711438.tif 000009
【図９】
0003711438.tif 000010
【図１０】
0003711438.tif 000011
【図１１】
0003711438.tif 000012
【図１２】
0003711438.tif 000013
【図１３】
0003711438.tif 000014
【図１４】
0003711438.tif 000015
【図１５】
0003711438.tif 000016
【図１６】
0003711438.tif 000017
【図１７】
0003711438.tif 000018
【図１８】
0003711438.tif 000019
【図１９】
0003711438.tif 000020
【図２０】
0003711438.tif 000021