JP3775462B2 - デバッグシステム及び情報記憶媒体 - Google Patents
デバッグシステム及び情報記憶媒体 Download PDFInfo
- Publication number
- JP3775462B2 JP3775462B2 JP09242899A JP9242899A JP3775462B2 JP 3775462 B2 JP3775462 B2 JP 3775462B2 JP 09242899 A JP09242899 A JP 09242899A JP 9242899 A JP9242899 A JP 9242899A JP 3775462 B2 JP3775462 B2 JP 3775462B2
- Authority
- JP
- Japan
- Prior art keywords
- information
- address
- program
- instruction
- execution
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
- Test And Diagnosis Of Digital Computers (AREA)
Description
【発明の属する技術分野】
本発明は、デバッグシステム及びデバッグシステムに用いる情報記憶媒体に関する。
【0002】
【背景技術及び発明が解決しようとする課題】
近年、ゲーム装置、カーナビゲーションシステム、プリンタ、携帯情報端末などの電子機器に組み込まれ、高度な情報処理を実現できるマイクロコンピュータに対する需要が高まっている。このような組み込み型のマイクロコンピュータは、通常、ターゲットシステムと呼ばれるユーザボードに実装される。このターゲットシステムを動作させるソフトウェアの開発を支援するためにICE(In-Circuit Emulator)と呼ばれるソフトウェア開発支援ツールが広く使用されている。
【0003】
さて、このようなICEとしては、従来、図1に示すようなCPU置き換え型と呼ばれるICEが主流を占めていた。このCPU置き換え型ICEでは、デバッグ時にターゲットシステム300からマイクロコンピュータ302を取り外し、その代わりにデバッグツール304のプローブ306を接続する。そして、このデバッグツール304に、取り外したマイクロコンピュータ302の動作をエミュレートさせる。また、このデバッグツール304に、トレース情報の取得やデバッグのために必要な種々の処理を行わせる。
【0004】
しかしながら、このCPU置き換え型ICEでは、マイクロコンピュータ302の内部動作周波数が上がるとプローブ306やトレース情報を格納するバッファで生じる信号の遅延によりリアルタイムトレースが困難になる。
【0005】
このような問題を解決するために量産チップ上でリアルタイムトレースを可能にするシステムの開発が行われている。このとき、トレース情報としてアドレスバス等の情報をリアルタイムにトレースバッファに格納しようとすると数十本の専用端子が必要となる。ここにおいて、係る端子はデバッグ時のみ必要な物で、エンドユーザーにとっては不要なものであるから、より少ないほうが好ましい。
【0006】
そこで、本出願人はリアルタイムトレースを実現するためのトレース情報を専用4端子に出力し、このトレース情報からリアルタイムトレースを可能にするシステムを開発している。
【0007】
具体的には毎クロック毎にCPUの実行ステータス情報を3端子に出力し、また絶対分岐命令等により絶対分岐が発生すると続く27クロックサイクルで分岐先のPC値をシリアルに1端子に出力する。絶対分岐命令とはプログラムの実行中にレジスタの値等によって分岐先のアドレスが決まる命令であり、命令コードからは分岐先を判断することができない命令である。従って絶対分岐命令が発生するとプログラムの命令コードから分岐先が分からないため分岐先のPC値を出力することでトレースが可能となる。
【0008】
ところが、ターゲットシステムは絶対分岐が発生するまでプログラムカウンタの値を出力しないため、この間のプログラムカウンタ値を把握できずにトレース情報が生成できないという問題点があった。
【0009】
また本出願人の開発中のターゲットシステムはデバッグ用端子を極力少なくするため、絶対分岐命令により絶対分岐が発生した場合と割り込みにより絶対分岐が発生した場合とを区別せずに、いずれも絶対分岐命令実行を示すステータス情報を出力していた。このため絶対分岐命令実行のステータス情報の場合、それが命令実行によるものか割り込みによるものか区別できないという問題点があった。
【0010】
本発明は、以上のような技術的課題に鑑みてなされたものであり、その目的とするところは、少ない端子で量産チップ上でのリアルタイムトレースを実現し、トレース情報の生成が可能なデバッグシステム及び情報記憶媒体を提供することにある。より詳しくは絶対分岐発生以前に関してもトレース情報の生成が可能なデバッグシステム及び情報記憶媒体を提供すること、また絶対分岐発生のステータス情報が絶対分岐命令実行によるものか割り込みによるものかを判別可能なデバッグシステム及び情報記憶媒体を提供することにある。
【0011】
【課題を解決するための手段】
本発明は、CPUの実行状態が通常命令実行、絶対分岐命令実行、相対分岐命令実行のいずれに属するかを判別するためのステータス情報と絶対分岐命令の分岐先アドレスを出力するターゲットシステムのトレース情報を出力するデバッグシステムであって、ターゲットシステムから前記ステータス情報を受け取って上書きしないでメモリに蓄積する手段と、当該デバッグシステムが有しているターゲットシステムの実行開始アドレス及びターゲットのCPUで実行されるプログラムの機械語命令列を把握するための情報に基づき、絶対分岐命令発生以前のトレース情報を生成するトレース情報生成手段と、を含むことを特徴とする。
【0012】
また本発明に係る情報記憶媒体は前記手段を実現するための情報を含むことを特徴とする。
【0013】
ここにおいてターゲットシステムが実行するプログラムの機械語命令列を把握するための情報とは、2進法や16進法で表された機械語の命令コード列でもよいし、機械語の命令コード列をニーモニックコードで表した命令コード列でもよい。少なくともターゲットシステムのCPUが実行する機械語の命令列が把握できるものであればよい。
【0014】
本発明ではターゲットシステムから受け取ったステータス情報を上書きしないでトレースメモリに蓄積する。このため、特に範囲指定トレース等を行わない場合には、実行開始からのステータス情報がトレースメモリの先頭から蓄積されている。このため、当該デバッグシステムはターゲットシステムの実行開始アドレス及びターゲットシステムで実行されたプログラム内容に基づき、前記メモリに蓄積開始後で絶対分岐命令発生以前のトレース情報を生成することができる。
【0015】
本発明によれば、少ないデバッグ用端子しか有しないターゲットシステムのデバッグを行う際にも、絶対分岐命令の実行以前のトレース情報が生成できないといった制約を受けることなく、実行範囲全体のトレース情報をえることができる。
【0016】
すなわち本発明のデバッグシステムは少ないデバッグ情報からでも通常のICE等と同様のトレース情報が作成可能であるため、ターゲットシステムのデバッグ用端子の削減を可能にし、ターゲットシステムのコスト削減に貢献できるという効果も有する。
【0017】
なお、前記実行開始アドレス及びターゲットシステムで実行されたプログラム内容は予めデバッグシステム内に保持しておいてもよいし、後で取得してもよい。
【0018】
例えばデバッグシステムからターゲットシステムの実行開始アドレスを指定して実行させるような場合には、指定した実行開始アドレスを保持しておくようにすることが好ましい。また、デバッグシステムからターゲットシステムに実行用のプログラムをロードするような場合には、ロードじたプログラム内容をデバッグシステム内に保持しておくようにすることが好ましい。
【0019】
本発明は CPUの実行状態が通常命令実行、絶対分岐命令実行、相対分岐命令実行のいずれに属するか及びトリガポイントにマッチしたか否かを判別するためのステータス情報と絶対分岐命令の分岐先アドレスを出力するターゲットシステムのトレース情報を出力するデバッグシステムであって、ターゲットシステムから前記ステータス情報を受け取って、メモリに蓄積する手段と、メモリに蓄積されたステータス情報がトリガポイントにマッチしていることを示している場合に、当該デバッグシステムが有しているトリガポイントアドレス及びターゲットが実行するプログラムの機械語命令列を把握するための情報に基づき絶対分岐命令発生以前のトレース情報を生成するトレース情報生成手段とを含むことを特徴とする。
【0020】
また本発明に係る情報記憶媒体は前記手段を実現するための情報を含むことを特徴とする。
【0021】
ここにおいてターゲットが実行するプログラムの機械語命令列を把握するための情報とは、2進法や16進法で表された機械語の命令コード列でもよいし、機械語の命令コード列をニーモニックコードで表した命令コード列でもよい。少なくともターゲットマシンが実行する機械語の命令コード列が把握できるものであればよい。
【0022】
またトリガポイントは複数ある場合でもよい。トリガポイントは出力する範囲を指定するために用いられ、指定された範囲のステータス情報を出力する場合でもよい。また範囲指定には関係なく、トリガポイントにマッチしたか否かの情報を出力する場合でもよい。
【0023】
メモリに蓄積されたステータス情報にはトリガポイントにマッチしたか否かの情報が含まれている。このため、当該デバッグシステムが有しているトリガポイントアドレス及びターゲットシステムで実行されたプログラム内容に基づき、前記メモリに蓄積開始後で絶対分岐命令発生以前のトレース情報を生成することができる。
【0024】
本発明によれば、少ないデバッグ用端子しか有しないターゲットシステムのデバッグを行う際にも、絶対分岐命令の実行以前のトレース情報が生成できないといった制約を受けることなく、実行範囲全体のトレース情報をえることができる。
【0025】
すなわち本発明のデバッグシステムは少ないデバッグ情報からでも通常のICE等と同様のトレース情報が作成可能であるため、ターゲットシステムのデバッグ用端子の削減を可能にし、ターゲットシステムのコスト削減に貢献できるという効果も有する。
【0026】
なお、前記トリガポイントアドレス及びターゲットシステムで実行されたプログラム内容は予めデバッグシステム内に保持しておいてもよいし、後で取得してもよい。
【0027】
例えばデバッグシステムからターゲットシステムのトリガポイントアドレスを指定して実行させるような場合には、指定したトリガポイントアドレスを保持しておくようにすることが好ましい。また、デバッグシステムからターゲットシステムに実行用のプログラムをロードするような場合には、ロードしたプログラム内容をデバッグシステム内に保持しておくようにすることが好ましい。
【0028】
本発明は CPUの実行状態が通常命令実行、絶対分岐発生、相対分岐命令実行のいずれに属するかを判別するためのステータス情報と絶対分岐命令の分岐先アドレスを出力するターゲットシステムのトレース情報を出力するデバッグシステムであって、ターゲットシステムから前記ステータス情報を受け取ってメモリに蓄積する手段と、前記メモリに蓄積されたステータス情報が絶対分岐発生を示していた場合に、当該絶対分岐発生が割り込み発生によるものか否かを、プログラムの機械語命令列を把握するための情報に基づき判別してトレース情報を生成するトレース情報生成手段とを含むことを特徴とする。
【0029】
また本発明に係る情報記憶媒体は前記手段を実現するための情報を含むことを特徴とする。
【0030】
ここにおいてターゲットが実行するプログラムの機械語命令列を把握するための情報とは、2進法や16進法で表された機械語の命令コード列でもよいし、機械語の命令コード列をニーモニックコードで表した命令コード列でもよい。少なくともターゲットマシンが実行する機械語の命令コード列が把握できるものであればよい。
【0031】
絶対分岐は一般に絶対分岐命令が実行された場合や割り込みがあった場合に発生する。ここにおいて割り込みとはプログラム分岐の一種であるが分岐命令によるものではなくコンピュータのハードウエアの信号によって分岐するものである。本発明のターゲットシステムではデバッグ用の端子を減らすために、割り込みによって絶対分岐が起こった場合と分岐命令によって絶対分岐が起こった場合とを区別せずにいずれも絶対分岐発生のステータス情報を出力している。
【0032】
従ってステータス情報と絶対分岐先のアドレスのみからでは、絶対分岐命令が実行されたのか割り込みが発生したのか判別できずトレース情報の生成が困難である。
【0033】
しかし本発明では、絶対分岐命令実行を示すステータスに対応したプログラムの機械語命令列が、実際に絶対分岐命令であるか否かを自動的に調べて前記判別を行うことで、トレース情報の生成を可能としている。
【0034】
本発明によれば、少ないデバッグ用端子しか有しないターゲットシステムのデバッグを行う際にも、絶対分岐命令と割り込みの発生の区別を行いトレース情報を生成することができる。すなわち本発明のデバッグシステムは少ないデバッグ情報からでも通常のICE等と同様のトレース情報が作成可能であるため、ターゲットシステムのデバッグ用端子の削減を可能にし、ターゲットシステムのコスト削減に貢献できるという効果も有する。
【0035】
なお、ターゲットシステムが実行するプログラムの機械語命令列を把握するための情報は予めデバッグシステム内に保持しておいてもよいし、後で取得してもよい。
【0036】
例えばデバッグシステムからターゲットシステムに実行用のプログラムをロードするような場合には、ロードしたプログラム内容をデバッグシステム内に保持しておくようにすることが好ましい。
【0037】
本発明のデバッグシステムは ターゲットが実行するプログラムの機械語命令列を把握するための情報を予め記憶しているプログラム情報記憶手段をさらに含み、前記トレース情報生成手段が、プログラム情報記憶手段に記憶された前記プログラムの機械語命令列を把握するための情報を用いてトレース情報を生成する事を特徴とする。
【0038】
また本発明に係る情報記憶媒体は前記手段を実現するための情報を含むことを特徴とする。
【0039】
本発明によれば、トレース情報生成の度にターゲットシステムのメモリを読む必要がないので、ターゲットシステム実行中でもトレース情報の生成が可能になる。またトレース情報の生成のための処理時間を大幅に削減することができる。
【0040】
【発明の実施の形態】
以下、本発明の好適な実施形態について図面を用いて詳細に説明する。
【0041】
1.本実施形態の構成の概要
まず本実施形態の構成について図2を用いて説明する。
【0042】
図2に示すように、デバッグ対象となるターゲットシステムであるマイクロコンピュータ10は、CPU(中央処理ユニット)12、実行情報出力部14、内部メモリ16を含む。
【0043】
ここで実行情報出力部16は、リアルタイムトレースを実現するための実行情報を専用4端子に出力する。具体的には毎クロック毎にCPUの命令実行ステータス情報を3端子(DST[2:0])に出力し、PC絶対分岐実行が発生すると続く27クロックサイクルで分岐先のPC値(DPCO)をシリアルに1端子に出力する。
【0044】
また内部メモリ16にはターゲットシステムで実行されるプログラム等が記憶されている。
【0045】
また本実施形態のデバッグシステム20は、ターゲットであるマイクロコンピュータに直接接続されるデバッグツール21と、当該デバッグツールと接続されたホストコンピュータ23で構成されている。
【0046】
デバッグツール21は実行情報取得部22,ターゲットメモリ書き込み部28を含み、ホストコンピュータ23はプログラム情報記憶部26、トレース情報生成部27,プログラム情報書き込み部29を含んでいる。
【0047】
実行情報取得部22は、3ビットのDST[2:0]と、分岐先のPC(プログラムカウンタ)値を表すDPCOを内部のトレースメモリ24に格納する。トレース範囲が指定されている場合には、その範囲のDST[2:0]とDPCOをトレースメモリに格納する。
【0048】
なお分岐先PCは下位ビットから1ビットずつシリアルに出力されるため、全ビット出力される前に新たな絶対分岐が発生すると、絶対分岐先のアドレス情報の一部しかを受けとれないことになる。
【0049】
ターゲットメモリ書き込み部28は、ターゲットシステムの内部メモリ16にプログラムをロードしたり、ターゲットシステムのメモリのプログラムを書き換えたりする機能を有し、TXD/RXDライン(双方向通信ライン)を介してマイクロコンピュータ10の内部メモリ14に書き込むデータを送信する。
【0050】
プログラム情報記憶部26は、ターゲットシステムの内部メモリ16に記憶されたプログラムと同一のプログラムの機械語コード列を記憶する。
【0051】
トレース情報生成部27は、ターゲットシステムから絶対分岐先アドレスの一部を受け取った場合に、ターゲットシステムが実行するプログラムが存在するアドレス領域に関する情報及びターゲットシステムから受けとったステータス情報の少なくとも一方に基づき、前記絶対分岐先アドレスの一部以外の部分を特定してトレース情報を生成する処理を行う。さらに受け取った絶対分岐先のアドレス情報の一部を下位ビットとする候補アドレス群を抽出し、ターゲットシステムから受け取ったステータス情報の配列と、候補アドレス群に含まれる所与の候補アドレスにより特定される機械語コード列から予測されるステータス情報の配列と比較して絶対分岐先のアドレス情報を特定する処理を行う。
【0052】
また当該デバッグシステムが有しているターゲットシステムの実行開始アドレス及びターゲットのCPUで実行されるプログラムの機械語コード列に基づき絶対分岐命令発生以前のトレース情報を生成する処理を行う。
【0053】
またメモリに蓄積されたステータス情報がトリガポイントにマッチしていることを示している場合には、当該デバッグシステムが有しているトリガポイントアドレス及びターゲットが実行するプログラムの機械語コード列に基づき、絶対分岐命令発生以前のトレース情報を生成する処理を行う。
【0054】
前記メモリに蓄積されたステータス情報が絶対分岐発生を示していた場合には、当該絶対分岐発生が割り込み発生によるものか否かを、プログラムの機械語コード列に基づき判別してトレース情報を生成する処理を行う。
【0055】
またトレース情報生成に際しては、プログラム情報記憶部26に記憶されたプログラムの機械語コード列を用いる。
【0056】
プログラム情報書き込み部29は、ターゲットシステムのメモリにロードしたプログラムと同一のプログラムを前記プログラム情報記憶部26にロードしたり、ターゲットシステムのメモリに記憶されているプログラムコードを読み出して前記プログラム情報記憶部26に書き込んだり、前記プログラム情報記憶部26に記憶されたプログラムをターゲットシステムのプログラムと同内容になるよう書き換えたりする処理を行う。
【0057】
2.ターゲットシステムが出力するステータス情報の内容
図3はDST[2:0]の出力値(以下DST情報という)とCPUの命令実行状態の関係を表した図である。ここにおいてPC相対分岐命令とはプログラム中に明示的に記述されたアドレスに分岐する命令であり、命令コードから分岐先を判断可能である。またPC絶対分岐命令とはプログラムの実行中にレジスタの値によって分岐先のアドレスが決まる命令であり、命令コードからは分岐先を判断することができない。
【0058】
従って本実施の形態ではPC絶対分岐命令が発生すると分岐先のPC値(DPCO)を出力することでトレースを可能としている。
【0059】
即ちマイクロプロセッサが命令をアドレスの順番に実行している時(DST情報が000又は100である場合)には、プログラムカウンタがどこまで進んだか分かるのでプログラムの命令コードからトレースが可能である。また、マイクロプロセッサがPC相対分岐命令を実行した時(DST情報が001又は101である場合)にも、プログラムの命令コードから分岐先が分かるのでトレースが可能である。
【0060】
しかし、マイクロプロセッサがPC絶対分岐命令を実行した時(DST情報が010又は110である場合)には、プログラムの命令コードから分岐先が分からないため、DST情報のみではトレースができない。そこで、係る場合に分岐先のPC値(DPCO)を出力することでトレースを可能としているのである。
【0061】
3.分岐先アドレスを特定するための処理
ターゲットシステムは、前記PC値をシリアルに1端子に出力しているので、絶対分岐命令が連続又は数命令間隔で実行されると、PC値の情報が途中で途切れてしまいトレースができないという問題点があった。
【0062】
そこで本実施の形態では、PC値の一部の情報しかえることが出来ない場合でも後述するマップ情報と前記DST情報に基づき絶対分岐の分岐先PC値を特定できるように、トレース情報生成部27は以下に説明するような分岐先アドレスを特定するための処理を行っている。
【0063】
図4(A)(B)は絶対分岐先のアドレスを特定するための候補アドレス群の抽出について説明するための図である。
【0064】
図4(A)の310は、DPCO信号から得られたPC値の情報を16進数で表したものである。PC値は下位のビットから1ビットずつ27ビット出力されるが、この間に新たな絶対分岐が発生したら、そこで新たな絶対分岐先のPC値が出力されるため、先に出力されていたPC値はそこで途切れてしまう。
【0065】
310は下位12ビット分の情報312でPC値が途切れてしまい、上位のビット情報314、316が得られていない状態である。このような場合、先頭の4ビット316(16進コードなので1桁)を0とすると絶対分岐先の候補となるPC値は216=65536個となる(図4(A)320参照)。従って、実際のPC値を特定することは困難である。
【0066】
そこで本実施の形態では、図4(B)に示すようにターゲットシステムのCPUが接続されているメモリのマップ情報330を、デバッグシステムのパラメタファイル340に格納しておく。マップ情報330とはプログラムが存在するアドレスに関する情報であり、例えばマップ情報330は、ターゲットのCPUにRAM1、IROM、RAM2が接続されており、RAM1の0−7FF番地、IROMの80000−80FFF番地、RAM2の90000−9FFFF番地にプログラムが格納されていることを示している。
【0067】
PC値の下位12ビットの情報が図4(A)と同じく802番地であるとすると、RAM1の中には候補はなく、IROMでは80802番地が候補となり、RAM2では90802〜9F802の16個が候補となり、全部で候補数は17となる(図4(B)の340参照)。
【0068】
図5(A)〜(C)はマップ情報から抽出した候補群からの絶対分岐先のアドレスを特定する処理について説明するための図である。図5(A)は、トレースメモリ24に格納されている絶対分岐命令実行以降のDST情報350を示している。
【0069】
図5(B)は、マップ情報により特定された候補群の一つである80802番地以降の命令コード360と当該命令コードの命令の種類370と当該命令コードが実行された場合に出力されるであろうDST情報380を表している。
【0070】
また、図5(C)は、マップ情報により特定された候補群の一つである90802番地以降の命令コード390と当該命令コードの命令の種類400と当該命令コードが実行された場合に出力されるであろうDST情報410を表している。他の候補群についても図5(B)(C)と同様に出力が予想されるであろうDST情報列を生成して、図5(A)のトレースメモリ24のDST情報350と比較処理を行う。そして同じであれば、当該候補が分岐先アドレスとして特定される。ここでは、図5(B)の80802番地以降の命令実行により出力されるDST情報列が図5(A)のトレースメモリ34のDST情報350と一致するので、80802番地を分岐先アドレスとして特定する。
【0071】
図6、図7、図8は、絶対分岐が短い間隔で発生しDPCOからプログラムカウンタ値が全ビット出力されない場合に分岐先アドレスを特定する処理の動作例を示すフローチャート図である。
【0072】
まず図6を用いて不完全PC値の解析処理の全体の流れについて説明する。
【0073】
不完全PC値の解析処理の開始にあたり、まず候補PC値(ulWorkPc)、候補数(ulExpectNum)の初期設定を行う(ステップS10)。
【0074】
そしてループA(ステップS20〜S40)でパラメタファイルでマップ情報を定義してあるメモリの個数分、マップ情報を利用した候補PC検索処理(ステップS30)を行う。例えば図4(B)においては、パラメタファイル340において、RAM1、IROM、RAM2の3つのメモリのマップ情報が定義されているので、3回候補PC値検索処理を行うことになる。この候補PC値検索処理で、候補PC値(ulWorkPc)、候補数(ulExpectNum)が更新される。
【0075】
ループAが終了すると、設定された候補数(ulExpectNum)が1か否か判断する。そして候補数(ulExpectNum)=1であれば、1つのPC値に特定されたと判断し、候補PC値特定処理で更新された候補PC値(ulWorkPc)を、実際にCPUが実行したアドレスとし、トレースデータの生成処理を行う(ステップS50、S60)。
【0076】
次に図7を用いて、マップ情報を利用した候補PC検索処理(図6のステップS30)の詳細な処理例について説明する。
【0077】
マップ情報で定義されたメモリの先頭アドレスをDPCO信号の出力ビット数だけ右にシフトしたものを、開始アドレス(ulMapTopAddr)にセットする。また、マップ情報で定義されたメモリの終了アドレスをDPCO信号の出力ビット数だけ右にシフトしたものを、終了アドレス(ulMapBottomAddr)にセットする。
【0078】
例えば図4(A)(B)で説明したようにDPCO信号の出力が12ビットである場合(図4(A)の312参照)には、RAM2の先頭アドレス90000を12ビットだけ右にシフトした00090を開始アドレス(ulMapTopAddr)にセットする。またRAM2の最後尾アドレス9FFFFを12ビットだけ右にシフトした0009Fを終了アドレス(ulMapBottomAddr)にセットする。なお、先頭アドレス90000、最後尾アドレス9FFFFは16進数で表記しているため、一桁で4ビット分のDPCO信号を表している。
【0079】
そしてループBで開始アドレス(ulMapTopAddr)から終了アドレス(ulMapBottomAddr)まで以下の処理を繰り返す(ステップS120〜S170)。例えば図4(B)の場合、00090から0009Fまで16回繰り返すことになる。
【0080】
まず、開始アドレス(ulMapTopAddr)をDPCO信号の出力ビット数だけ左にシフトしたものに、DPCOから得られた出力中のPC値を足したものを処理対象PC値(ulPC)にセットする(ステップS130)。
【0081】
そして命令コード上で処理対象PC値(ulPC)以降の命令値を取り出すためのワークアドレス(unWorkAddr)に処理対象PC値(ulPC)をセットする(ステップS140)。
【0082】
例えば図4(B)において、最初の開始アドレス(ulMapTopAddr)をは、00090である。従ってこれをDPCO信号の出力ビット数である12ビットだけ左にシフトさせると09000となる。これにDPCOから得られた出力中のPC値である000802を足した090802が処理対象PC値(ulPC)としてセットされる。
【0083】
そして処理対象PC値(ulPC)に対してDST情報を利用したPC値特定処理を行う(ステップS150)。
【0084】
そして次のループに備えて、開始アドレス(ulMapTopAddr)を更新しておく(ステップS160)。図4(B)では開始アドレス(ulMapTopAddr)が更新されて00091となる。
【0085】
次に図8を用いて、DST情報を利用したPC値特定処理(図7のステップS150)の詳細な処理例について説明する。
【0086】
ループCでDPCO信号の出力ビット数だけ以下の処理を繰り返す(ステップS210〜S250)。本実施の形態では1クロック毎にDPCOが1ビット出力されるので絶対分岐命令が発生してから概ねDPCO信号の出力ビット数だけそれ以降の命令が実行されているため、DPCO信号の出力ビット数だけそれ以降の命令の実行状態を表すDST情報がトレースメモリに格納されることになるからである。
【0087】
例えば図4(B)ではDPCO信号の出力ビット数が12ビットであるので、ステップS220からS240までの処理が12回繰り返されることになる。
【0088】
まず比較対象DSTコード(ucKindCode)に、ワークアドレス(unWorkAddr)が指すプログラム上の命令コードを実行した場合に出力されるであろうDST信号を代入する(ステップS220)。例えば図5(B)においてワークアドレス1(362)は分岐無し命令であるaddを指しているので、分岐無し命令が実行された場合に出力されるであろうDST情報’000’を比較対象DSTコード(ucKindCode)に代入する。
【0089】
そしてトレースメモリ上の対応するDST信号と前記比較対象DSTコードと(ucKindCode)比較して一致していなければ当該処理対象PC値は求める絶対分岐先のPC値ではないとしてループCを抜ける(ステップS230)。
【0090】
一致している場合には命令コード上の次の命令コードを取り出すために、ワークアドレス(unWorkAddr)を次の命令コード位置に位置づける(ステップS240)。αは次の命令に移行するための命令サイズである。例えば図5(B)において1命令が2バイトの場合、ワークアドレス1(362)からワークアドレス2(364)に位置づける。
【0091】
そしてDPCO信号の出力ビット数だけループCが実行された場合には、候補PC値以降の命令コードが実行された場合のDST信号とトレースメモリに格納されたDST信号がすべて一致したことになるので、当該処理対象PC値(ulPC)が求める絶対分岐先のアドレスであるとして、処理対象PC値(ulPC)を候補PC値(ulWorkPc)にセットする。また候補数(ulExpectNum)をインクリメントする(ステップS260)。
【0092】
4.ターゲットシステムを停止させることなくトレース機能を実現するための処理
本実施の形態ではターゲットシステムの実行を停止させることなくトレース情報を生成するために、ターゲットシステムの内部メモリに記憶されたプログラムの機械語命令列(以下プログラム情報という)をホストコンピュータのプログラム情報記憶部26に記憶させている。
【0093】
このようにする事により、例えばトレースメモリ上のDST信号と比較する前記比較対象DSTコード(ucKindCode)にを、プログラム情報記憶部26に記憶されたプログラム情報から作成することができる。従ってトレース情報を生成する際にターゲットシステムの内部メモリ16を読む必要がないので、ターゲットシステムの実行を停止させることなくトレース情報を生成することができる。
【0094】
また、ターゲットシステムの内部メモリ16を読む必要がないのでトレース情報生成のための処理時間を大幅に短縮することができる。
【0095】
本実施の形態ではターゲットシステムの内部メモリ16に記憶されたプログラム情報であってトレースに使うものをホストコンピュータのプログラム情報記憶部26に記憶させるために、プログラム情報書き込み部29は以下のような処理を行っている。
【0096】
図9はターゲットシステムの内部メモリにプログラムをロードする場合の動作例を説明するためのフローチャート図である。
【0097】
本実施の形態ではターゲットシステムの内部メモリにプログラムをロードする際に、当該プログラムのトレース予定がある場合にはターゲットシステムの内部メモリにロードしたプログラム内容をプログラム情報記憶部に書き込む(ステップS310、S320、S330)。
【0098】
図10は、ターゲットシステムの内部のプログラムを書き換える場合の動作例を説明するためのフローチャート図である。
【0099】
本実施の形態ではターゲットシステムの内部メモリのプログラムを書き換える際に、当該プログラムのトレース予定がある場合には前記プログラム情報記憶部に記憶されたプログラムの対応箇所をターゲットシステムのプログラムと同内容に書き換える(ステップS410、S420、S430)。
【0100】
図11は、プログラムをロードせずに、既にターゲットシステムの内部メモリにある場合の動作例について説明するためのフローチャート図である。
【0101】
当該プログラムのトレースを行う場合には、マップ情報からプログラムが格納されているメモリのスタートアドレスとエンドアドレスを特定する(ステップS510、S520)。そしてターゲットシステムの内部メモリのスタートアドレス、エンドアドレスで特定されている内容を読み込み、プログラム情報記憶部に書き込む(ステップS530)。
【0102】
5.絶対分岐命令発生以前のプログラムカウンタ解析処理
図12は絶対分岐命令発生以前のプログラムカウンタ解析処理について説明するための図である。図12は、ターゲットシステムで命令i1、i2、…が実行されて、そのステータス情報DST1〜DST12がトレースメモリに蓄積されている様子を表している。本実施の形態ではターゲットシステムは絶対分岐命令を実行するまでプログラムカウンタ値を出力しないので、命令i9が実行されるまでプログラムカウンタ値は出力されない。従って絶対分岐発生以前に実行された命令i1〜命令i8については、実行位置の特定ができずトレース情報が作成できないという問題点があった。
【0103】
そこで本実施の形態では、トレースメモリに蓄積された先頭ステータス情報DST1に対応する命令実行の際のプログラムカウンタを特定するために以下のような構成を採用している。
【0104】
すなわち、範囲指定トレースを行わない場合には、例えばプログラムの実行開始位置を指定して実行させる際に、デバッグシステムで実行開始アドレスを取得しておく。そしてトレースメモリに上書きしないオーバーライト無しモードにおいて、ターゲットシステムから出力されるステータス情報を蓄積する。
【0105】
ここにおいて、範囲指定トレースを行わない場合には、ターゲットシステムは実行したすべての命令についてステータス情報であるDST情報を出力する。従ってトレースメモリの先頭に蓄積されているDST情報DST1は、前記実行開始アドレスに対応する命令が出力したものと特定できる。
【0106】
また本実施の形態のターゲットシステムは先頭アドレスとエンドアドレスをトリガアドレスとしてセットすることにより、先頭アドレスからエンドアドレスまでの命令に対応したステータス情報のみを出力させる範囲指定トレースを行うことができる。このときデバッグシステムで、ターゲットシステムにセットしたトリガアドレスをあらかじめ取得しておく。
【0107】
係る範囲指定トレースを行う場合には、トレースメモリの先頭に蓄積されているDST情報DST1は、先頭アドレスとして指定したトリガアドレスに対応する命令が出力したものと特定できる。
【0108】
図13は、トレースメモリに蓄積されている最も古いデータ出力時のプログラムカウンタを解析する処理の動作例を表したフローチャート図である。
【0109】
範囲指定トレースを行う場合には、候補PC(ulPC)に先頭アドレスであるトリガアドレス1をセットする(ステップS610、S620)。
【0110】
また範囲指定トレースを行わない場合でトレースメモリにオーバーライトしない場合には、候補PC(ulPC)にトレース開始直前のプログラムカウンタ値をセットする(ステップS630、S640)。なお、トレース開始直前のプログラムカウンタ値には、これから実行する命令のアドレス値がセットされている。
【0111】
そして候補PC(ulPC)を、トレースメモリの最も古いステータス情報に対応した命令のアドレス値として、トレース情報を生成する(ステップS650)。
【0112】
6.ハードウエア割り込みの判別処理
図14は、絶対分岐命令実行を示すステータス情報が命令実行によるものかハードウエア割り込みによるものかを判別する処理について説明するための図である。
【0113】
図14の1410に示すようにトレースメモリに格納されているステータス情報が絶対分岐命令の実行を示すものである場合には、通常の絶対分岐命令実行によるものである場合とハードウエア割り込みによるものである場合がある。
【0114】
そこで本実施の形態では、プログラム情報記憶部に記憶されているプログラムの機械語命令列の情報と比較して、前記ステータス情報が通常の絶対分岐命令実行によるものであるかハードウエア割り込みによるものであるかを判別している。
【0115】
トレースメモリに格納されているトレース情報に対応する命令の機械語命令列がi1、i2…とすると、1410のステータス情報が通常の絶対分岐命令実行によるものである場合には対応する機械語命令は1420のi3となる。このi3が絶対分岐命令でない場合には、1410のステータス情報は通常の絶対分岐命令実行によるものでなくハードウエア割り込みによるものであることが判別できることになる。
【0116】
図15は、絶対分岐命令実行を示すステータス情報が命令実行によるものかハードウエア割り込みによるものかを判別する処理の動作例について説明するためのフローチャート図である。
【0117】
トレースメモリに蓄積されているDST情報の個数だけループAの処理を行う(ステップS710〜S760)。
【0118】
DST情報が絶対分岐命令の実行を示している場合には、まず当該DST情報出力の際のプログラムカウンタが示すアドレスを解析する(ステップS720,S730)。そして、解析結果のプログラムカウンタが示すアドレスの命令コードが絶対分岐命令でない場合にはハードウエア割り込み発生箇所とし、データに登録する(ステップS740,S750)。
【0119】
7.ターゲットシステムとデバッグツールの構成例
図16に本実施形態のマイクロコンピュータ及びデバッグシステムの詳細な構成例を示す。図16に示すように、マイクロコンピュータ1020は、CPU1022、BCU(バス制御ユニット)1026、内部メモリ(ミニモニタROM1042及びミニモニタRAM1044以外の内部ROM及び内部RAM)1028、クロック生成部1030、ミニモニタ部1040(第1のモニタ手段)、実行情報出力部1050を含む。
【0120】
ここでCPU1022は、種々の命令の実行処理を行うものであり、内部レジスタ1024を含む。内部レジスタ1024は、汎用レジスタであるR0〜R15や、特殊レジスタであるSP(スタックポインタレジスタ)、AHR(積和結果データの上位レジスタ)、ALR(積和結果データの下位レジスタ)などを含む。
【0121】
BCU1026はバスを制御するものである。例えば、CPU1022に接続されるハーバードアーキテクチャのバス1031や、内部メモリ1028に接続されるバス1032や、外部メモリ1036に接続される外部バス1033や、ミニモニタ部1040、実行情報出力部1050などに接続される内部バス1034の制御を行う。
【0122】
またクロック生成部1030は、マイクロコンピュータ1020内で使用される各種のクロックを生成するものである。クロック生成部1030はBCLKを介して外部のデバッグツール1060にもクロックを供給している。
【0123】
ミニモニタ部1040は、ミニモニタROM1042、ミニモニタRAM1044、制御レジスタ1046、SIO1048を含む。
【0124】
ここで、ミニモニタROM1042には、ミニモニタプログラムが格納される。本実施形態では、このミニモニタプログラムは、GO、リード、ライトなどのシンプルでプリミティブなコマンドの処理のみを行うようになっている。このため、ミニモニタROM42のメモリ容量を例えば256バイト程度に抑えることができ、オンチップデバッグ機能を持たせながらマイクロコンピュータ1020を小規模化できるようになる。
【0125】
ミニモニタRAM1044には、デバッグモードへの移行時に(ユーザプログラムのブレーク発生時に)、CPU1022の内部レジスタ1024の内容が退避される。これにより、デバッグモードの終了後にユーザプログラムの実行を適正に再スタートできるようになる。また内部レジスタの内容のリード等を、ミニモニタプログラムが持つプリミティブなリードコマンド等で実現できるようになる。
【0126】
制御レジスタ1046は、各種のデバッグ処理を制御するためのレジスタであり、ステップ実行イネーブルビット、ブレークイネーブルビット、ブレークアドレスビット、トレースイネーブルビットなどを有する。ミニモニタプログラムにより動作するCPU1022が制御レジスタ1046の各ビットにデータをライトしたり、各ビットのデータをリードすることで、各種のデバッグ処理が実現される。
【0127】
SIO1048は、マイクロコンピュータ1020の外部に設けられたデバッグツール1060との間でデータを送受信するためのものである。SIO1048とデバッグツール1060との間は、TXD/RXD(データ送受信ライン)で接続されている。
【0128】
実行情報出力部1050は、リアルタイムトレース機能を実現するためのものであり、CPUの実行状態を表すステータス情報であるDST情報(DST[2:0])及びPC絶対分岐が発生した際の分岐先のPC(プログラムカウンタ)値(DPCO)を実行情報として専用4端子を介して外部に出力する。
【0129】
実行情報出力部1050とデバッグツール1060との間は、CPU1022の命令実行のステータス情報を出力する3本のDST[2:0]と、絶対分岐先のPC(プログラムカウンタ)値をシリアルに1ビットずつ出力する1本のDPCOという4本のラインで接続されている。
【0130】
デバッグツール1060はメインモニタ部1062、実行情報取得部1064を含み、パーソナルコンピュータ等により実現されるホストシステム1066に接続される。
【0131】
メインモニタ部106は、ホストシステム1066から入力されるデバッグコマンドをプリミティブコマンドに変換(分解)するための処理を行う。そして、メインモニタ部1062が、プリミティブコマンドの実行を指示するデータをミニモニタ部1040に送信すると、ミニモニタ部1040が、指示されたプリミティブコマンドを実行するための処理を行うことになる。
【0132】
また、実行情報取得部1064は、3ビットのDST[2:0]と、分岐先のPC(プログラムカウンタ)値を表すDPCOを内部のトレースメモリ1104に格納する。トレース範囲が指定されている場合には、その範囲のDST[2:0]とDPCOをトレースメモリに格納する。
【0133】
次に本実施の形態で、デバッグシステムからマイクロコンピュータの内部メモリにプログラムをロードしたり、内部メモリの情報を書き換える構成について説明する。
【0134】
図17に示すように、本実施形態では、マイクロコンピュータ1020が、CPU(中央処理ユニット)1022及び本実施形態の要部であるミニモニタ部(第1のモニタ手段)1040を含む。また、マイクロコンピュータ1020の外部にはメインモニタ部(第2のモニタ手段)1062が設けられている。ここでメインモニタ部1062は、例えばホストコンピュータ1066などが発行したデバッグコマンドをプリミティブコマンドに変換(分解)するための処理を行う。また、ミニモニタ部1040は、メインモニタ部1062との間でデータを送受信する。そして、ミニモニタ部1040は、実行するプリミティブコマンドを、メインモニタ部1062からの受信データに基づいて決定し、プリミティブコマンドを実行するための処理を行う。
【0135】
ここで、メインモニタ部1062の変換処理の対象となるデバッグコマンドとしては、プログラムロード、GO、ステップ実行、メモリライト、メモリリード、内部レジスタライト、内部レジスタリード、ブレークポイント設定、ブレークポイント解除などのコマンドを考えることができる。メインモニタ部1062は、これらの多様で複雑なデバッグコマンドを、例えばGO、ライト(デバッグモード時におけるメモリマップ上の所与のアドレスへのライト)、リード(メモリマップ上の所与のアドレスからのリード)などの、シンプルでプリミティブなコマンドに変換する処理を行う。このようにすることで、ミニモニタ部1040の処理を行うミニモニタプログラムの命令コードサイズを格段に小さくすることができる。
【0136】
これにより、デバッグシステムからマイクロコンピュータの内部メモリにプログラムをロードしたり、内部メモリの情報を書き換えることができる。すなわちターゲットシステムであるマイクロコンピュータにプログラムロードを行う場合や、メモリライトを行う場合には、ホストコンピュータから、これらのデバッグコマンドを発行することになる。
【0137】
8.プリミティブコマンドへの変換
図18(A)(B)(C)(D)に、各種のデバッグコマンドをプリミティブコマンドへ変換する処理について模式的に示す。
【0138】
例えば図18(A)に示すように、(ADD・・・、SUB・・・、AND・・・、OR・・・、XOR・・・、LD.W・・・)という12バイトのプログラムを80010h番地にロードするというデバッグコマンドが発行されたとする。この場合、このプログラムロードコマンドは、ライト(80010h、ADD・・・、SUB)、ライト(80014h、AND・・・、OR・・・)、ライト(80018h、XOR・・・、LD.W・・・)という3つのプリミティブなライトコマンドに変換される。即ち、ミニモニタプログラムが、この3つのプリミティブなライトコマンドを実行することで、プログラムロードコマンドが実現されるようになる。
【0139】
また図18(B)に示すようにステップ実行コマンドというデバッグコマンドが発行されたとする。すると、このステップ実行コマンドは、図16の制御レジスタ1046のステップ実行イネーブルビットへのライトコマンドとGOコマンドに変換される。即ち、ミニモニタプログラムが、このプリミティブなライトコマンドとGOコマンドを実行することで、ステップ実行コマンドが実現されるようになる。
【0140】
また図18(C)に示すように内部レジスタリードコマンドというデバッグコマンドが発行されたとする。すると、この内部レジスタリードコマンドは、メモリマップ上のミニモニタRAM44(内部レジスタの内容の退避先)からのリードコマンドに変換される。即ち、ミニモニタプログラムが、このプリミティブなリードコマンドを実行することで、内部レジスタリードコマンドが実現されるようになる。内部レジスタライトコマンド、メモリリードコマンド、メモリライトコマンドも同様にして実現される。
【0141】
また図18(D)に示すようにトリガアドレスをブレークポイントとして設定するブレークポイント設定コマンドというデバッグコマンドが発行されたとする。すると、このブレークポイント設定コマンドは、制御レジスタ1046のブレークイネーブルビット及びブレークアドレスビットへのライトコマンドに変換される。即ち、ミニモニタプログラムが、このプリミティブなライトコマンドを実行することで、ブレークポイント設定コマンドが実現されるようになる。
【0142】
このように本実施形態では、複雑で多様なデバッグコマンドが、プリミティブでシンプルなリード、ライト、GOコマンドに変換される。そして、ミニモニタプログラムは、このプリミティブなリード、ライト、GOコマンドを実行するだけでよいため、ミニモニタプログラムの命令コードサイズは非常に小さくなる。この結果、ミニモニタROM1042のメモリ容量も小さくでき、小さなハードウェア規模でオンチップデバッグ機能を実現できるようになる。
【0143】
9.デバッグツールの構成例
図19にデバッグツール1060の構成例を示す。
【0144】
CPU1090は、ROM1108に格納されるプログラムを実行したり、デバッグツール1060の全体の制御を行うものである。送受信切替部1092は、データの送信と受信とを切り替えるためのものである。クロック制御部1094は、CPU1090のSCLK端子、アドレスアップカウンタ1100、トレースメモリ1104に供給するクロックを制御するものである。このクロック制御部1094には、マイクロコンピュータ1020(SIO1048)からのBCLKが入力される。クロック制御部1094は周波数検出回路1095、分周回路1096を含む。周波数検出回路1095は、BCLKの周波数が属する周波数範囲を検出して、その結果を制御レジスタ1098に出力する。また分周回路1096での分周比は制御レジスタ1098により制御される。即ちCPU1090により実行されるメインモニタプログラム(メインモニタROM110に格納)が、制御レジスタ1098からBCLKの周波数範囲を読み出す。そして、メインモニタプログラムは、この周波数範囲に応じた最適な分周比を決定し、この分周比を制御レジスタ1098に書き込む。そして、分周回路1096は、この分周比でBCLKを分周してSMC2を生成し、CPU1090のSCLK端子に出力する。
【0145】
アドレスアップカウンタ1100は、トレースメモリのアドレスをカウントアップするためのものである。セレクタ1102は、ライン1122(アドレスアップカウンタ1100が出力するアドレス)とライン1124(アドレスバス1120からのアドレス)のいずれかを選択し、トレースメモリ1104のアドレス端子にデータを出力する。またセレクタ1106は、ライン1126(図16の実行情報出力部1050の出力であるDST[2:0]、DPCO)とライン1128(データバス1118)のいずれかを選択し、トレースメモリ1104のデータ端子にデータを出力したり、データ端子からデータを取り出す。
【0146】
ROM1108はメインモニタROM1110(図16のメインモニタ部1062に相当)を含み、メインモニタROM1110には、メインモニタプログラムが格納される。このメインモニタプログラムは、図18(A)〜図18(D)で説明したように、デバッグコマンドをプリミティブコマンドに変換するための処理を行う。RAM1112は、CPU1090のワーク領域となるものである。
【0147】
RS232Cインターフェース1114、パラレルインターフェース1116は、図16のホストコンピュータ1066とのインターフェースとなるものであり、ホストシステム1066からのデバッグコマンドはこれらのインターフェースを介してCPU1090に入力されることになる。クロック生成部1118は、CPU1090を動作させるクロックなどを生成するものである。
【0148】
次に本実施形態でのリアルタイムトレース処理について簡単に説明する。本実施形態では、図16のCPU1022の命令実行のステータス情報を表す3ビットのDST[2:0]と、分岐先のPC値を表すDPCOをトレースメモリ1104に蓄える。そして、トレースメモリ1104に蓄えられたデータと、ホストコンピュータ1066のプログラム情報記憶部に記憶されたユーザプログラムの機械語命令列の情報とに基づいて、トレースデータを生成する。このようにすることで、マイクロコンピュータ1020とデバッグツール1060との間の接続ラインの本数を少なくしながら、リアルタイムトレース機能を実現することが可能になる。
【0149】
ユーザプログラム実行モードにおいては、ライン1122が選択され、セレクタ1102を介してアドレスアップカウンタ1100の出力がトレースメモリ1104のアドレス端子に入力される。また、ライン1126が選択され、セレクタ1106を介してDST[2:0]、DPCOがトレースメモリ1104のデータ端子に入力される。ここでアドレスアップカウンタ1100には、まず最初に、データバス1118、アドレスバス1120を用いてCPU1090により図20(A)に示すようなスタートアドレスが設定される。またアドレスアップカウンタ1100のST/SP(開始/停止)端子には、トレース範囲を特定するDST[2]のラインが接続される。そして図20(B)に示すように、DST[2]のラインに第1のパルス130が入力されると、アドレスアップカウンタ1100のアドレスアップカウントが開始する。そして、DST[2]のラインに第2のパルス132が入力されると、アドレスアップカウンタ1100のアドレスアップカウントが停止し、トレース動作が停止する。このようにして、所望のトレース範囲でのデータ(DST[2:0]、DPCO)をトレースメモリ1104に蓄えることが可能になる。
【0150】
一方、ユーザプログラム実行モードからデバッグモードに移行すると、ライン1124が選択され、セレクタ1102を介してアドレスバス1120からのアドレスがトレースメモリ1104のアドレス端子に入力される。またライン1128が選択され、セレクタ1106を介してトレースメモリ1104からのデータがデータバス1118に出力される。これにより、トレースメモリ1104に蓄えられたデータ(DST[2:0]、DPCO)を、デバッグモード時にCPU1090(メインモニタプログラム)が読み出すことが可能になる。そして、読み出されたデータとユーザープログラムの機械語命令列の情報とに基づいて、トレースデータを生成することが可能になる。
【0151】
なお、本発明は本実施形態に限定されず、本発明の要旨の範囲内で種々の変形実施が可能である。
【0152】
例えば本実施の形態では、デバッグシステムの機能を実現する手段がデバッグツールとホストコンピュータに分散して設けられている場合を例にとり説明したががこれに限られない。デバッグツールとホストコンピュータのいずれか一方にすべて機能を実現する手段を設けてデバッグシステムを実現するようにしてもよい。
【0153】
また本実施の形態では、ターゲットシステムから分岐先のPC値が1ビットずつシリアルに出力される場合を例にとり説明したがこれに限られない。分岐先PC出力用の端子を数ビット分用意しておいて数ビットずつシリアルに出力するような場合でもよい。
【0154】
また本実施の形態では二つのトリガアドレスで範囲指定トレースを行う場合を例にとり説明したがこれに限られない。例えば、トリガポイントが一つまたが3つ以上設定されている場合でもよいし、トリガポイントによって範囲指定を行わない場合でもよい。
【0155】
またマイクロコンピュータやデバッグツールの構成も本実施形態で説明したものに限定されず、種々の変形実施が可能である。
【図面の簡単な説明】
【図1】CPU置き換え型のICEの例を示す図である。
【図2】本実施形態の構成について説明するための図である。
【図3】DST[2:0]の出力値とCPUの命令実行状態の関係を表した図である。
【図4】図4(A)、図4(B)は絶対分岐先のアドレスを特定するための候補アドレス群の抽出について説明するための図である。
【図5】図5(A)〜図5(C)はマップ情報から抽出した候補群からの絶対分岐先のアドレスの特定処理について説明するための図である。
【図6】絶対分岐が短い間隔で発生しDPCOからプログラムカウンタ値が全ビット出力されない場合に分岐先アドレスを特定する処理の動作例を示すフローチャート図である。
【図7】絶対分岐が短い間隔で発生しDPCOからプログラムカウンタ値が全ビット出力されない場合に分岐先アドレスを特定する処理の動作例を示すフローチャート図である。
【図8】絶対分岐が短い間隔で発生しDPCOからプログラムカウンタ値が全ビット出力されない場合に分岐先アドレスを特定する処理の動作例を示すフローチャート図である。
【図9】ターゲットシステムの内部メモリにプログラムをロードする場合の動作例を説明するためのフローチャート図である。
【図10】ターゲットシステムの内部のプログラムコードを書き換える場合の動作例を説明するためのフローチャート図である。
【図11】プログラムをロードせずに、既にターゲットシステムの内部メモリにある場合の動作例について説明するためのフローチャート図である。
【図12】絶対分岐命令発生以前のプログラムカウンタ解析処理について説明するための図である。
【図13】トレースメモリに蓄積されている最も古いデータ出力時のプログラムカウンタを解析する処理の動作例を表したフローチャート図である。
【図14】絶対分岐命令実行を示すステータス情報が命令実行によるものかハードウエア割り込みによるものかを判別する処理について説明するための図である。
【図15】絶対分岐命令実行を示すステータス情報が命令実行によるものかハードウエア割り込みによるものかを判別する処理の動作例について説明するためのフローチャート図である。
【図16】マイクロコンピュータ、デバッグシステムの構成例を示す機能ブロック図である。
【図17】本実施の形態におけるデバッグコマンドの実行処理について説明するための図である。
【図18】図18(A)〜図18(D)は、デバッグコマンドをプリミティブコマンドへ変換(分解)する処理について説明するための図である。
【図19】デバッグツールの詳細な構成例を示す機能ブロック図である。
【図20】DST[2]とトレース範囲の関係を示す図である。
【符号の説明】
10 マイクロコンピュータ
12 CPU(中央処理ユニット)
14 実行情報出力部
16 内部メモリ
20 デバッグシステム
22 実行情報取得部
24 トレースメモリ
26 プログラム情報記憶部
27 トレース情報生成部
28 ターゲットメモリ書き込み部
29 プログラム情報書き込み部
1020 マイクロコンピュータ
1022 CPU
1024 内部レジスタ
1026 BCU
1028 内部メモリ
1030 クロック生成部
1036 外部メモリ
1040 ミニモニタ部
1042 ミニモニタROM
1044 ミニモニタRAM
1046 制御レジスタ
1048 SIO
1050 実行情報出力部
1060 デバッグツール
1062 メインモニタ部
1064 実行情報取得部
1066 ホストコンピュータ
1090 CPU
1092 送受信切替部
1094 クロック制御部
1095 周波数検出部
1096 分周回路
1098 制御レジスタ
1100 アドレスアップカウンタ
1102 セレクタ
1104 トレースメモリ
1106 セレクタ
1108 ROM
1110 外部モニタROM
1112 RAM
1114 RS232Cインターフェース
1116 パラレルインターフェース
1118 クロック生成部
Claims (2)
- CPUの実行状態が通常命令実行、絶対分岐命令実行、相対分岐命令実行のいずれに属するかを判別するためのステータス情報と絶対分岐命令の分岐先アドレスを出力するターゲットシステムのトレース情報を出力するデバッグシステムであって、
ターゲットが実行するプログラムの機械語命令列を把握するための情報を記憶部に記憶させる手段と、
ターゲットシステムから前記ステータス情報を受け取ってメモリに蓄積する蓄積手段と、
前記メモリに蓄積されたステータス情報が絶対分岐命令実行を示しているか否か判断し、絶対分岐命令実行を示している場合には、当該ステータス情報出力の際のアドレスを解析し、記憶部に記憶されているターゲットが実行するプログラムの機械語命令列を把握するための情報を読み出して、解析したアドレスの命令コードを割り出し、割り出した命令コードが絶対分岐命令でない場合には当該ステータス情報が割り込み発生によるものであると判断してトレース情報を生成するトレース情報生成手段と、を含み、
前記トレース情報生成手段は、
先に絶対分岐が発生してその後命令をアドレスの順番に実行しているときには先の絶対分岐時に出力された分岐先アドレスからプログラムカウンタがどこまで進んだかを調べて当該ステータス情報出力の際のアドレスを解析するように構成され、
前記ターゲットシステムが絶対分岐先のアドレス情報を1又は数ビットづつシリアルに出力するように構成され、先の絶対分岐先のアドレス情報の一部しか受け取れなかった場合には、受け取った絶対分岐先のアドレス情報の一部を下位ビットとする候補アドレス群に含まれる各候補アドレスについて、当該候補アドレス以降のプログラムの機械語命令列をプログラム情報記憶部から読み出し、読み出したプログラムの機械語命令列が実行された場合に出力されるであろうステータス情報列を生成して、生成したステータス情報の配列とメモリに格納されている絶対分岐命令以降のステータス情報の配列との比較処理を行い、一致する候補アドレスが1つしか存在しない場合に当該候補アドレスを先の絶対分岐先のアドレスとして、当該ステータス情報出力の際のアドレスを解析することを特徴とするデバッグシステム。 - CPUの実行状態が通常命令実行、絶対分岐命令実行、相対分岐命令実行のいずれに属するかを判別するためのステータス情報と絶対分岐命令の分岐先アドレスを出力するターゲットシステムのトレース情報を出力するデバッグシステムを制御するためのコンピュータが読みとり可能な情報記憶媒体であって、
ターゲットが実行するプログラムの機械語命令列を把握するための情報を記憶部に記憶させる手段と、
ターゲットシステムから前記ステータス情報を受け取ってメモリに蓄積する蓄積手段と、
前記メモリに蓄積されたステータス情報が絶対分岐命令実行を示しているか否か判断し、絶対分岐命令実行を示している場合には、当該ステータス情報出力の際のアドレスを解析し、記憶部に記憶されているターゲットが実行するプログラムの機械語命令列を把握するための情報を読み出して、解析したアドレスの命令コードを割り出し、割り出した命令コードが絶対分岐命令でない場合には当該ステータス情報が割り込み発生によるものであると判断してトレース情報を生成するトレース情報生成手段と、してコンピュータを機能させるためのプログラムが記憶され、
前記トレース情報生成手段は、
先に絶対分岐が発生してその後命令をアドレスの順番に実行しているときには先の絶対分岐時に出力された分岐先アドレスからプログラムカウンタがどこまで進んだかを調べて当該ステータス情報出力の際のアドレスを解析するように構成され、
前記ターゲットシステムが絶対分岐先のアドレス情報を1又は数ビットづつシリアルに出力するように構成され、先の絶対分岐先のアドレス情報の一部しか受け取れなかった場合には、受け取った絶対分岐先のアドレス情報の一部を下位ビットとする候補アドレス群に含まれる各候補アドレスについて、当該候補アドレス以降のプログラムの機械語命令列をプログラム情報記憶部から読み出し、読み出したプログラムの機械語命令列が実行された場合に出力されるであろうステータス情報列を生成して、生成したステータス情報の配列とメモリに格納されている絶対分岐命令以降のステータス情報の配列との比較処理を行い、一致する候補アドレスが1つしか存在しない場合に当該候補アドレスを先の絶対分岐先のアドレスとして、当該ステータス情報出力の際のアドレスを解析することを特徴とする情報記憶媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP09242899A JP3775462B2 (ja) | 1999-03-31 | 1999-03-31 | デバッグシステム及び情報記憶媒体 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP09242899A JP3775462B2 (ja) | 1999-03-31 | 1999-03-31 | デバッグシステム及び情報記憶媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2000284985A JP2000284985A (ja) | 2000-10-13 |
JP3775462B2 true JP3775462B2 (ja) | 2006-05-17 |
Family
ID=14054178
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP09242899A Expired - Fee Related JP3775462B2 (ja) | 1999-03-31 | 1999-03-31 | デバッグシステム及び情報記憶媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3775462B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11360713B2 (en) | 2019-02-27 | 2022-06-14 | Rohm Co., Ltd. | Semiconductor device and debug system |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7817293B2 (en) | 2005-01-07 | 2010-10-19 | Infoprint Solutions Company, Llc | Trace and debug tool for high speed printer systems |
JP2010123050A (ja) * | 2008-11-21 | 2010-06-03 | Renesas Technology Corp | 半導体装置 |
-
1999
- 1999-03-31 JP JP09242899A patent/JP3775462B2/ja not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11360713B2 (en) | 2019-02-27 | 2022-06-14 | Rohm Co., Ltd. | Semiconductor device and debug system |
Also Published As
Publication number | Publication date |
---|---|
JP2000284985A (ja) | 2000-10-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6922795B2 (en) | Microcomputer, electronic equipment, and debugging system | |
JP5414292B2 (ja) | 不良解析装置と方法及びプログラム | |
JPH08185336A (ja) | マイクロプロセッサ、マイクロプロセッサ−デバッグツール間信号伝送方法及びトレース方法 | |
US20070006035A1 (en) | Microcomputer and method for developing system program | |
US7596719B2 (en) | Microcontroller information extraction system and method | |
JP2008507025A (ja) | 集積回路テスト用エミュレーション及びデバッグインターフェイス | |
CN109254883B (zh) | 一种片上存储器的调试装置及方法 | |
US20060075310A1 (en) | Microcomputer and trace control method capable of tracing desired task | |
JP3775462B2 (ja) | デバッグシステム及び情報記憶媒体 | |
US20030191624A1 (en) | Debug function built-in type microcomputer | |
US6996704B2 (en) | Trace control circuit adapted for high-speed microcomputer operation | |
JP3741187B2 (ja) | デバッグシステム及び情報記憶媒体 | |
JP3711438B2 (ja) | デバッグシステム及び情報記憶媒体 | |
US20050086454A1 (en) | System and methods for providing a debug function built-in type microcomputer | |
CN116737078A (zh) | 一种快速闪存读写***、方法、设备及介质 | |
JPH08255096A (ja) | マイクロプロセッサ及びデバッグシステム | |
US20230314513A1 (en) | In-circuit emulator device | |
JP2004038464A (ja) | デバッグ機能内蔵マイクロコンピュータ | |
US20050033542A1 (en) | Debugger apparatus and debugging method | |
US6854047B2 (en) | Data storage device and data transmission system using the same | |
JP2664644B2 (ja) | マイクロプロセッサのリセット方法 | |
CN100369008C (zh) | 整合型的线路实体模拟器 | |
CN114168195A (zh) | 芯片内adc外设的虚拟***及方法 | |
JPH09185526A (ja) | デバッグ装置 | |
JP2003280940A (ja) | デバッグシステム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20050414 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050517 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050712 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050803 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050928 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20051026 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20051220 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20051222 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20051228 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20060201 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060214 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090303 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100303 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100303 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110303 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120303 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120303 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130303 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140303 Year of fee payment: 8 |
|
LAPS | Cancellation because of no payment of annual fees |