(57)【要約】      （修正有）【課題】キャッシュメモリのロック機能を利用することなく、中断命令コードによるブレーク機能を実現する。【解決手段】命令コード記憶部から命令コード群の少なくとも一部を読み出して一時的に記憶するキャッシュメモリと、アドレスをカウントするカウンタと、カウンタが示すアドレスの命令コードをキャッシュメモリから読み出して実行する演算処理部とに加え、ブレークポイントアドレス記憶手段と、キャッシュミスアドレス発生時のカウンタアドレスを記憶するキャッシュミスアドレス記憶手段と、キャッシュミスアドレスに基づいて命令コード記憶部からの命令コードの読み出しアドレス範囲を設定する読み出し範囲設定手段と、ブレークポイントアドレスが当該読み出しアドレス範囲内に含まれる場合にキャッシュメモリ内における当該ブレークポイントアドレスに相当するアドレスに中断命令コードを記憶する中断命令コード記憶手段とを含む。【選択図】図１
2009043061.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを構成する命令コード群を一連のアドレスに記憶する命令コード記憶部と、
読み出しアドレス範囲の内のアドレスに記憶されている命令コード群を前記命令コード記憶部から読み出しこれを一時的に記憶する書き換え自在のキャッシュメモリと、
前記一連のアドレスを順次カウントするカウンタと、
前記カウンタが示すアドレスの命令コードを当該カウント毎に前記キャッシュメモリから読み出して実行し且つ前記命令コードが中断命令コードである場合に当該読み出しを中断する演算処理部と、を含むデバッグ装置であって、
少なくとも１つの中断アドレスを記憶する中断アドレス記憶手段と、
前記カウンタが前記読み出しアドレス範囲の外のアドレスを示した場合にキャッシュミス割り込み信号を生成するキャッシュミス割り込み信号生成手段と、
前記キャッシュミス割り込み信号に応じて前記カウンタが示すアドレスをキャッシュミスアドレスとして記憶するキャッシュミスアドレス記憶手段と、
前記キャッシュミス割り込み信号に応じて前記キャッシュミスアドレスに基づいて前記読み出しアドレス範囲を設定する読み出し範囲設定手段と、
前記キャッシュミス割り込み信号に応じて前記中断アドレスの各々について前記読み出しアドレス範囲の内に含まれるか否かを判別し前記中断アドレスが前記読み出しアドレス範囲の内に含まれる場合に当該中断アドレスに相当するキャッシュメモリのアドレスに中断命令コードを記憶する中断命令コード記憶手段と、を含むことを特徴とするデバッグ装置。
【請求項２】
プログラムを構成する命令コード群を一連のアドレスに記憶する命令コード記憶部と、読み出しアドレス範囲の内のアドレスに記憶されている命令コード群を前記命令コード記憶部から読み出しこれを一時的に記憶する書き換え自在のキャッシュメモリと、前記一連のアドレスを順次カウントするカウンタと、前記カウンタが示すアドレスの命令コードを当該カウント毎に前記キャッシュメモリから読み出して実行し且つ前記命令コードが中断命令コードである場合に当該読み出しを中断する演算処理部と、を含むデバッグ装置における前記プログラムのデバッグ方法であって、
少なくとも１つの中断アドレスを記憶する中断アドレス記憶ステップと、
前記カウンタが前記読み出しアドレス範囲の外のアドレスを示した場合にキャッシュミス割り込み信号を生成するキャッシュミス割り込み信号生成ステップと、
前記キャッシュミス割り込み信号に応じて前記カウンタが示すアドレスをキャッシュミスアドレスとして記憶するキャッシュミスアドレス記憶ステップと、
前記キャッシュミス割り込み信号に応じて前記キャッシュミスアドレスに基づいて前記読み出しアドレス範囲を設定する読み出し範囲設定ステップと、
前記キャッシュミス割り込み信号に応じて前記中断アドレスの各々について前記読み出しアドレス範囲の内に含まれるか否かを判別し前記中断アドレスが前記読み出しアドレス範囲の内に含まれる場合に当該中断アドレスに相当するキャッシュメモリのアドレスに中断命令コードを記憶する中断命令コード記憶ステップと、を含むことを特徴とするデバッグ方法。
【請求項３】
前記キャッシュメモリのメモリサイズを記憶するキャッシュメモリサイズ記憶手段を含み、
前記読み出し範囲設定手段は前記キャッシュミスアドレス及び前記メモリサイズに基づいて前記読み出しアドレス範囲を設定することを特徴とする請求項１に記載のデバッグ装置。
【請求項４】
前記キャッシュメモリのメモリサイズを記憶するキャッシュメモリサイズ記憶ステップを含み、
前記読み出し範囲設定ステップは前記キャッシュミスアドレス及び前記メモリサイズに基づいて前記読み出しアドレス範囲を設定することを特徴とする請求項２に記載のデバッグ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプログラムの不具合を修正するためのデバッグ装置及びデバッグ方法に関する。
【背景技術】
【０００２】
従来、プログラムメモリ上のプログラムのデバッグにおいてブレークポイントを設定する方法として、ハードウェア・ブレークポイントと呼ばれる方法がある。ハードウェア・ブレークポイントは、ブレークポイントアドレスを記憶した専用デバッグ回路がチップ内又はチップ外に準備され、その専用デバッグ回路がバスを監視して所望の位置でプログラムのブレークを発生させるものである（例えば特許文献１）。しかしながら、ハードウェア・ブレークポイントは、専用のハードウェアの準備が必要で、また設定するブレークポイントの数が多数の場合にデバッグ回路の規模が大きくなる、といったデメリットがあった。
【０００３】
これに対して、ソフトウェア・ブレークポイントと呼ばれる方法がある。ソフトウェア・ブレークポイントは、デバッガがプログラムの所望の位置の命令コードをブレーク命令に置き換えることでブレークを発生させるものである。ソフトウェア・ブレークポイントは、専用ハードウェアの用意が不要であり、多数のブレークポイントの設定も容易であるというメリットがある。しかし、ＲＯＭ（Read Only Memory）に書き込まれたプログラムは書き換えることができないため、ＲＯＭ上のプログラムに対してブレークポイントの設定を行いたい場合には、一時的にプログラムを何らかの形で用意したＲＡＭ（Random Access Memory）に移動させた上でブレークポイントの設定を行う必要があった。
【０００４】
この点、近年のマイクロプロセッサはキャッシュメモリを備えている場合が多いため、キャッシュメモリ上でブレークポイントの設定を行う方法が知られている。キャッシュメモリ上でブレークポイントの設定を行う方法は、ＲＡＭを用意する必要がないというメリットがある。しかしながら、この方法によると、キャッシュメモリ上でブレークポイントの設定（ブレーク命令コードへの書き換え）を行った後にキャッシュミスが発生した場合、新たなプログラムがＲＯＭからキャッシュメモリへ上書きされるため、ブレーク命令コードに書き換えられたプログラムは消滅してしまうという問題があった。
【０００５】
ソフトウェアブレークポイント機能は、プログラムメモリ上のプログラムコードをブレーク命令コードに置き換えることにより実現する。キャッシュメモリにロードされたプログラムコードにブレークポイントを設定する方法は以下のとおりである。１．デバッガはブレークポイントを設定するアドレスの命令コードをブレーク命令コードに置き換える。２．ブレークポイントの対象となる命令コードがキャッシュメモリに存在する場合、キャッシュメモリ上の命令コードをブレーク命令コードに置き換える。このとき、本来のプログラムコードが存在するメモリ領域に対しては、ブレーク命令コードの置き換えは実施されない。３．キャッシュミスが発生した場合、ブレーク命令コードに置き換えた命令コードを含む命令コード群はリプレースされ、キャッシュメモリからブレーク命令コードが消滅する。４．上記３．の時点で、キャッシュメモリ、及び本来のプログラムコード群が存在するメモリにブレーク命令コードが存在しなくなるため、プログラムがブレークしなくなるという問題が生じる。上記４．の問題を解決するために、特許文献２及び３では、キャッシュメモリのロック機能を用いてキャッシュメモリのリプレースの発生を抑止している。
【特許文献１】特開平５−１００９０５号公報
【特許文献２】特開２０００−２６７８８５号公報
【特許文献３】特開２００４−１０３０２４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、キャッシュメモリのロック機能を利用する方法は、キャッシュメモリをデバッグ用に占有してしまい、キャッシュメモリの動作を再現できないという問題が発生する。
【０００７】
本発明は上記した如き問題点に鑑みてなされたものであって、特許文献２及び３に開示される如きキャッシュメモリのロック機能を利用することなく、本来のキャッシュメモリの動作を再現させながら、ブレーク命令コードによるブレーク機能を実現するデバッグ装置及びデバッグ方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明によるデバッグ装置は、プログラムを構成する命令コード群を一連のアドレスに記憶する命令コード記憶部と、読み出しアドレス範囲の内のアドレスに記憶されている命令コード群を前記命令コード記憶部から読み出しこれを一時的に記憶する書き換え自在のキャッシュメモリと、前記一連のアドレスを順次カウントするカウンタと、前記カウンタが示すアドレスの命令コードを当該カウント毎に前記キャッシュメモリから読み出して実行し且つ前記命令コードが中断命令コードである場合に当該読み出しを中断する演算処理部と、を含むデバッグ装置であって、少なくとも１つの中断アドレスを記憶する中断アドレス記憶手段と、前記カウンタが前記読み出しアドレス範囲の外のアドレスを示した場合にキャッシュミス割り込み信号を生成するキャッシュミス割り込み信号生成手段と、前記キャッシュミス割り込み信号に応じて前記カウンタが示すアドレスをキャッシュミスアドレスとして記憶するキャッシュミスアドレス記憶手段と、前記キャッシュミス割り込み信号に応じて前記キャッシュミスアドレスに基づいて前記読み出しアドレス範囲を設定する読み出しアドレス範囲設定手段と、前記キャッシュミス割り込み信号に応じて前記中断アドレスの各々について前記読み出しアドレス範囲の内に含まれるか否かを判別し前記中断アドレスが前記読み出しアドレス範囲の内に含まれる場合に当該中断アドレスに相当するキャッシュメモリのアドレスに中断命令コードを記憶する中断命令コード記憶手段と、を含むことを特徴とする。
【０００９】
また、本発明によるデバッグ方法は、プログラムを構成する命令コード群を一連のアドレスに記憶する命令コード記憶部と、読み出しアドレス範囲の内のアドレスに記憶されている命令コード群を前記命令コード記憶部から読み出しこれを一時的に記憶する書き換え自在のキャッシュメモリと、前記一連のアドレスを順次カウントするカウンタと、前記カウンタが示すアドレスの命令コードを当該カウント毎に前記キャッシュメモリから読み出して実行し且つ前記命令コードが中断命令コードである場合に当該読み出しを中断する演算処理部と、を含むデバッグ装置における前記プログラムのデバッグ方法であって、少なくとも１つの中断アドレスを記憶する中断アドレス記憶ステップと、前記カウンタが前記読み出しアドレス範囲の外のアドレスを示した場合にキャッシュミス割り込み信号を生成するキャッシュミス割り込み信号生成ステップと、前記キャッシュミス割り込み信号に応じて前記カウンタが示すアドレスをキャッシュミスアドレスとして記憶するキャッシュミスアドレス記憶ステップと、前記キャッシュミス割り込み信号に応じて前記キャッシュミスアドレスに基づいて前記読み出しアドレス範囲を設定する読み出しアドレス範囲設定ステップと、前記キャッシュミス割り込み信号に応じて前記中断アドレスの各々について前記読み出しアドレス範囲の内に含まれるか否かを判別し前記中断アドレスが前記読み出しアドレス範囲の内に含まれる場合に当該中断アドレスに相当するキャッシュメモリのアドレスに中断命令コードを記憶する中断命令コード記憶ステップと、を含むことを特徴とする。
【発明を実施するための最良の形態】
【００１０】
以下、本発明に係る実施例について添付の図面を参照しつつ詳細に説明する。
【００１１】
図１は本発明によるデバッグ装置を表すブロック図である。デバッグ装置１は、命令コード記憶部１００と、ＭＰＵ（Micro Processing Unit）２００と、カウンタアドレス格納部３１０と、ブレークポイントアドレス記憶部３２０と、キャッシュミス割り込み処理部３３０とを含む、プログラムの不具合を修正するためのデバッグ装置である。
【００１２】
命令コード記憶部１００は、例えばＲＯＭ（Read Only Memory）などであり、デバッグ対象のプログラムを構成する命令コード群を一連のアドレスに記憶している。命令コード記憶部１００における命令コード群の記憶例については後述する。
【００１３】
ＭＰＵ２００は、キャッシュメモリ２１０と、ＣＰＵ２２０と、を含む演算処理ユニットである。
【００１４】
キャッシュメモリ２１０は、読み出しアドレス範囲内のアドレスに記憶されている命令コード群を命令コード記憶部１００から読み出し、これを一時的に記憶する書き換え自在のキャッシュメモリである。ここでの読み出しアドレス範囲は、後述するキャッシュミス割り込み処理部３３０によって指示される。キャッシュメモリ２１０は、後述するＰＣ（プログラムカウンタ）２２１が示すアドレスを監視しており、ＰＣ２２１が当該読み出しアドレス範囲外のアドレスを示した場合（以下、この場合をキャッシュミスと称する）に、自身が現在記憶している命令コード群を破棄し、当該アドレスを含む読み出しアドレス範囲内のアドレスに記憶されている命令コード群を命令コード記憶部１００から読み出し、これを一時的に記憶する命令コード書き換え手段を有する。なお、ＰＣ２２１が当該読み出しアドレス範囲外のアドレスを示した場合（以下、この場合をキャッシュヒットと称する）には、キャッシュメモリ２１０は、命令コード記憶部１００からの命令コード群の読み出しは行わない。
【００１５】
図２はキャッシュメモリ２１０による命令コードの読み出しを表す模式図である。キャッシュメモリ２１０は、命令コード記憶部１００の一連のアドレスの内から、キャッシュミス割り込み処理部３３０より指示された読み出しアドレス範囲ＲＲのアドレスに記憶されている命令コード群を読み出す。読み出しアドレス範囲ＲＲは、読み出し開始アドレスＡ１及び読み出し終了アドレスＡ２によって表され、これら両アドレスはキャッシュミス割り込み処理部３３０によって算出される。キャッシュメモリ２１０は、キャッシュミスが生じる毎に指示される読み出しアドレス範囲ＲＲに基づいて命令コード群を読み出す。
【００１６】
また、キャッシュメモリ２１０は、上記した命令コード群の書き換えに続いて、キャッシュミス割り込み信号を生成し、これを後述するカウンタアドレス格納部３１０及びキャッシュミス割り込み処理部３３０に与える。なお、デバッグ対象のプログラムの実行を中断させたくない場合には、キャッシュメモリ２１０がキャッシュミス割り込み信号を生成しないように設定すれば良い。
【００１７】
ＣＰＵ（Central Processing Unit）２２０は、各種演算及び制御処理を実行する演算処理部である。ＣＰＵ２２０は、命令コード記憶部１００における一連のアドレスを順次、カウントするＰＣ（プログラムカウンタ）２２１を含む。ＣＰＵ２２０は、ＰＣ２２１が示すアドレスの命令コードをキャッシュメモリ２１０から読み出して実行する。すなわち、ＣＰＵ２２０は、ＰＣ２２１がカウントするアドレスの命令コードを順次、実行することにより、デバッグ対象のプログラムを実行する。ＣＰＵ２２０は、キャッシュメモリ２１０から読み出した命令コードが後述する中断命令コードである場合に命令コードの実行を中断する。
【００１８】
カウンタアドレス格納部３１０は、アドレス格納レジスタ３１１を含み、キャッシュメモリ２１０から受け取ったキャッシュミス割り込み信号に応じて、ＰＣ２２１が示すアドレスをキャッシュミスアドレスとしてアドレス格納レジスタ３１１に記憶するキャッシュミスアドレス記憶手段を有する。
【００１９】
ブレークポイントアドレス記憶部３２０は、例えばＲＡＭ（Random Access Memory）などであり、複数の中断アドレス（以下、ブレークポイントアドレスと称する）を記憶するブレークポイントアドレス記憶手段を有する。ブレークポイントアドレスは、デバッグ対象のプログラムの実行を中断（ブレーク）すべきアドレスを表す。ここでのアドレスは命令コード記憶部１００のアドレスである。ブレークポイントアドレス記憶部３２０は、ブレークポイントアドレスを、キャッシュメモリ２１０のメモリサイズ及びブレークポイントアドレスの個数と併せてブレークポイントアドレステーブルに記憶している。
【００２０】
図３はブレークポイントアドレステーブルを表す図である。当該テーブルの最上段には、キャッシュメモリ２１０のメモリサイズが示されている。次段にはブレークポイントアドレスの個数ｎ（ここでのｎは正整数）が示されている。以降の段にはブレークポイントアドレス１〜ｎが示されている。なお、デバッグ対象のプログラムの実行を中断させたくない場合には、ブレークポイントアドレステーブルからブレークポイントアドレスを削除すれば良い。
【００２１】
キャッシュミス割り込み処理部３３０は、キャッシュメモリ２１０から受け取ったキャッシュミス割り込み信号に応じて、アドレス格納レジスタ３１１に記憶されているキャッシュミスアドレス及びブレークポイントアドレス記憶部３２０に記憶されているメモリサイズを取り出し、これらに基づいて読み出しアドレス範囲を設定する読み出しアドレス範囲設定手段を有する。また、キャッシュミス割り込み処理部３３０は、キャッシュメモリ２１０からのキャッシュミス割り込み信号に応じて、ブレークポイントアドレス記憶部３２０が記憶している複数の中断アドレスの各々について当該読み出しアドレス範囲内に含まれるか否かを判別する。キャッシュミス割り込み処理部３３０は、当該読み出しアドレス範囲内に含まれる中断アドレスに相当するキャッシュメモリ２１０におけるアドレスに、中断命令コード（ブレーク命令コード）を設定する中断命令コード設定手段を有する。
【００２２】
図４は、キャッシュミス割り込み処理部３３０によるキャッシュミス割り込み処理ルーチンを表すフローチャートである。キャッシュミス割り込み処理部３３０は、キャッシュメモリ２１０からのキャッシュミス割り込み信号に応じてキャッシュミス割り込み処理を開始する。
【００２３】
キャッシュミス割り込み処理部３３０は、最初にアドレス格納レジスタ３１１からキャッシュミスアドレスを取り出す（ステップＳ１０１）。次にキャッシュミス割り込み処理部３３０は、ブレークポイントアドレス記憶部３２０からキャッシュメモリサイズを取り出す（Ｓ１０２）。続いてキャッシュミス割り込み処理部３３０は、キャッシュミスアドレス及びキャッシュメモリサイズに基づいて、読み出し開始アドレス及び読み出し終了アドレスを算出する（Ｓ１０３、Ｓ１０４）。読み出し開始アドレス及び読み出し終了アドレスの算出方法は以下のとおりである。読み出し開始アドレス＝（キャッシュミスアドレス／キャッシュサイズ）×キャッシュサイズ。読み出し終了アドレス＝（読み出し開始アドレス＋キャッシュサイズ）−１。例えば、キャッシュのメモリサイズが２Ｋバイト（２００Ｈ）の場合は、キャッシュメモリ２１０が読み出すべき命令コード記憶部１００のアドレス範囲は、０から１ＦＦＨ、２００Ｈから３ＦＦＨ、・・・、となる。キャッシュミス割り込みが発生したときのキャッシュミスアドレスが１２３４Ｈであった場合、上記計算式に当てはめると以下のようになる。読み出し開始アドレス＝（１２３４Ｈ／２００Ｈ）×２００Ｈ＝１２００Ｈ。読み出し終了アドレス＝（１２００Ｈ＋２００Ｈ）−１＝１３ＦＦＨ。上記の方法にて算出した読み出し開始アドレスから読み出し終了アドレスの間を読み出しアドレス範囲と称する。
【００２４】
次にキャッシュミス割り込み処理部３３０は、最初にブレークポイントアドレス記憶部３２０からブレークポイントアドレス個数ｎを取り出す（ステップＳ１０５）。続いてキャッシュミス割り込み処理部３３０は、ブレークポイントアドレス記憶部３２０に記憶されているｎ個のブレークポイントアドレスの各々について、読み出しアドレス範囲内に含まれるか否かを順に判別する（Ｓ１０６）。ブレークポイントアドレスが読み出しアドレス範囲内に含まれる場合、キャッシュミス割り込み処理部３３０は、当該ブレークポイントアドレスに相当するキャッシュメモリ２１０のアドレスに中断命令コードを設定する（Ｓ１０７）。また、ブレークポイントアドレスが読み出しアドレス範囲内に含まれない場合、キャッシュミス割り込み処理部３３０は、中断命令コードの設定は行わない。キャッシュミス割り込み処理部３３０は、中断命令コードの設定処理をｎ回繰り返し（Ｓ１０８）、全てのブレークポイントアドレスについて完了したらキャッシュミス割り込み処理ルーチンを終了する。
【００２５】
以下に、キャッシュメモリ２１０が命令コード記憶部１００から命令コード群を読み出す通常の動作について説明する。なお、ここでは、キャッシュミス割り込み処理がなされない場合の通常の動作について説明する。
【００２６】
図５は、命令コード記憶部１００における命令コード群の記憶例を表す図である。命令コード記憶部１００のメモリサイズを６４Ｋバイト（アドレス範囲０Ｈから０ＦＦＦＦＨ）とする。命令コード記憶部１００のアドレス１００Ｈには、アドレス３００Ｈへのジャンプを表す命令コード「ＪＭＰ  ３００Ｈ」が記憶されている。命令コード記憶部１００のアドレス３００Ｈには、変数Ｒ０とＲ１との加算を表す命令コード「ＡＤＤ  Ｒ０，Ｒ１」が記憶されている。
【００２７】
ＰＣ２２１の初期値はアドレス０Ｈを示しているとする。キャッシュメモリ２１０は、命令コード記憶部１００の一連のアドレスの内、アドレス０Ｈを含む読み出しアドレス範囲内のアドレスに記憶されている命令コード群を記憶していないため、キャッシュミスとなる。キャッシュメモリ２１０は、アドレス０Ｈを含む読み出しアドレス範囲０から１ＦＦＨのアドレスに記憶されている命令コード群を命令コード記憶部１００から読み出し、これを一時的に記憶する。図６は当該読み出し後のキャッシュメモリ２１０における命令コード群の記憶状態を表す図である。キャッシュメモリ２１０のメモリサイズは２Ｋバイト（アドレス範囲は０から１ＦＦＨ）である。キャッシュメモリ２１０のアドレス１００Ｈには命令コード「ＪＭＰ  ３００Ｈ」が記憶されている。
【００２８】
ＰＣ２２１は一連のアドレスをアドレス０Ｈから順次カウントアップする。ＣＰＵ２２０は、ＰＣ２２１が示すアドレスの命令コードをキャッシュメモリ２１０から読み出して実行する。ＰＣ２２１がアドレス１００Ｈを示すと、ＣＰＵ２２０は、命令コード「ＪＭＰ  ３００Ｈ」を読み出して実行する。当該命令コードは、アドレス３００Ｈへのジャンプを表す命令コードであるため、ＰＣ２２１はアドレス３００Ｈを示す。キャッシュメモリ２１０は、命令コード記憶部１００の一連のアドレスの内、アドレス３００Ｈを含む読み出しアドレス範囲内のアドレスに記憶されている命令コード群を記憶していないため、キャッシュミスとなる。
【００２９】
キャッシュメモリ２１０は、現在記憶している命令コード群を破棄し、アドレス３００Ｈを含む読み出しアドレス範囲２００Ｈから３ＦＦＨのアドレスに記憶されている命令コード群を命令コード記憶部１００から読み出し、これを一時的に記憶する。図７は当該読み出し後のキャッシュメモリ２１０における命令コード群の記憶状態を表す図である。キャッシュメモリ２１０のアドレス１００Ｈには、命令コード記憶部１００のアドレス３００Ｈに記憶されていた命令コード「ＡＤＤ  Ｒ０，Ｒ１」が記憶されている。キャッシュメモリ２１０のメモリサイズが２Ｋバイト（アドレス範囲が０から１ＦＦＨ）であり、読み出しアドレス範囲を２Ｋバイトとしているため、命令コード記憶部１００のアドレス３００Ｈがキャッシュメモリ２１０のアドレス１００Ｈに相当する。
【００３０】
ＰＣ２２１がアドレス３００Ｈを示しているため、ＣＰＵ２２０は、命令コード「ＡＤＤ  Ｒ０，Ｒ１」を読み出して実行する。上記したように、キャッシュメモリ２１０が命令コード記憶部１００から命令コード群を読み出す通常の動作においては、キャッシュミスが発生した場合、キャッシュメモリ２１０にそれまで記憶されていた命令コードが全て破棄される。
【００３１】
以下に、キャッシュミス割り込み処理を実行する場合の動作について説明する。先ず、デバッグ対象のプログラムを実行する前にブレークポイントアドレステーブルを設定する。図８はブレークポイントアドレステーブルの設定例を表す図である。当該テーブルの最上段には、キャッシュメモリ２１０のメモリサイズ２Ｋバイトが示されている。次段にはブレークポイントアドレスの個数２が示されている。以降の段にはブレークポイントアドレス１００Ｈ及び３００Ｈが示されている。図９は、命令コード記憶部１００におけるデバッグ対象のプログラムの命令コード群の記憶例を表す図である。命令コード記憶部１００のメモリサイズを６４Ｋバイト（アドレス範囲０Ｈから０ＦＦＦＦＨ）とする。命令コード記憶部１００のアドレス１００Ｈには、アドレス３００Ｈへのジャンプを表す命令コード「ＪＭＰ  ３００Ｈ」が記憶されている。命令コード記憶部１００のアドレス３００Ｈには、変数Ｒ０とＲ１との加算を表す命令コード「ＡＤＤ  Ｒ０，Ｒ１」が記憶されている。
【００３２】
ＰＣ２２１の初期値はアドレス０Ｈを示しているとする。キャッシュメモリ２１０は、命令コード記憶部１００の一連のアドレスの内、アドレス０Ｈを含む読み出しアドレス範囲内のアドレスに記憶されている命令コード群を記憶していないため、キャッシュミスとなる。キャッシュメモリ２１０は、アドレス０Ｈを含む読み出しアドレス範囲０Ｈから１ＦＦＨのアドレスに記憶されている命令コード群を命令コード記憶部１００から読み出し、これを一時的に記憶する。この時点においてキャッシュメモリ２１０が記憶している命令コード群は図６に示されるのと同様である。続いて、キャッシュメモリ２１０は、キャッシュミス割り込み信号を生成し、これをカウンタアドレス格納部３１０及びキャッシュミス割り込み処理部３３０に与える。カウンタアドレス格納部３１０は、キャッシュメモリ２１０からのキャッシュミス割り込み信号に応じて、ＰＣ２２１が示すアドレス０Ｈをキャッシュミスアドレス０Ｈとしてアドレス格納レジスタ３１１に記憶する。
【００３３】
以下に再び図４も併せて参照しつつ、キャッシュミス割り込み処理について説明する。キャッシュミス割り込み処理部３３０は、キャッシュメモリ２１０からのキャッシュミス割り込み信号に応じて、アドレス格納レジスタ３１１からキャッシュミスアドレス０Ｈを取り出す（ステップＳ１０１）。次にキャッシュミス割り込み処理部３３０は、ブレークポイントアドレス記憶部３２０からキャッシュメモリサイズ２Ｋバイト（２００Ｈ）を取り出す（Ｓ１０２）。続いてキャッシュミス割り込み処理部３３０は、キャッシュミスアドレス０Ｈ及びキャッシュメモリサイズ２００Ｈに基づいて、読み出し開始アドレス及び読み出し終了アドレスを算出する（Ｓ１０３、Ｓ１０４）。読み出し開始アドレス及び読み出し終了アドレスは以下のように算出される。読み出し開始アドレス＝（０Ｈ／２００Ｈ）×２００Ｈ＝０Ｈ。読み出し終了アドレス＝（０Ｈ＋２００Ｈ）−１＝１ＦＦＨ。
【００３４】
次にキャッシュミス割り込み処理部３３０は、ブレークポイントアドレス記憶部３２０からブレークポイントアドレス個数２を取り出す（ステップＳ１０５）。続いてキャッシュミス割り込み処理部３３０は、ブレークポイントアドレス記憶部３２０に記憶されている２個のブレークポイントアドレス１００Ｈ及び３００Ｈの各々について、読み出しアドレス範囲０Ｈから１ＦＦＨに含まれるか否かを順に判別する（Ｓ１０６）。ブレークポイントアドレス１００Ｈは読み出しアドレス範囲０Ｈから１ＦＦＨに含まれるため、キャッシュミス割り込み処理部３３０は、ブレークポイントアドレス１００Ｈに相当するキャッシュメモリ２１０のアドレス１００Ｈに中断命令コードを設定する（Ｓ１０７）。また、ブレークポイントアドレス３００Ｈは読み出しアドレス範囲０Ｈから１ＦＦＨに含まれないため、キャッシュミス割り込み処理部３３０は、ブレークポイントアドレス３００Ｈについては中断命令コードの設定は行わない。キャッシュミス割り込み処理部３３０は、上記２個のブレークポイントアドレスの設定処理を完了したら、キャッシュミス割り込み処理ルーチンを終了する。
【００３５】
図１０は、キャッシュミス割り込み処理終了後のキャッシュメモリ２１０における命令コード群の記憶状態を表す図である。キャッシュメモリ２１０のアドレス１００Ｈには中断命令コードＢｒｅａｋが記憶されている。キャッシュミス割り込み処理ルーチン終了後、ＰＣ２２１はアドレス０Ｈから順次カウントアップする。ＣＰＵ２２０は、ＰＣ２２１が示すアドレスの命令コードをキャッシュメモリ２１０から読み出して実行する。ＰＣ２２１がアドレス１００Ｈを示すと、ＣＰＵ２２０は、中断命令コードＢｒｅａｋを読み出して実行する。このとき、キャッシュメモリ２１０は、一連の命令コードの実行、すなわち、デバッグ対象のプログラムの実行を中断し、アドレス１００Ｈでプログラムの実行を中断した旨をデバッガ（図示せず）に通知する。
【００３６】
上記したように、キャッシュミスが発生し、キャッシュメモリ２１０が新たに命令コード群を読み出して記憶した場合においても、所望のアドレスでプログラムの実行を中断することができる。
【００３７】
以下に、命令コード記憶部１００が図１１に示す如く命令コード群を記憶している場合の動作について説明する。図１１は、命令コード記憶部１００におけるデバッグ対象のプログラムの命令コード群の記憶例を表す図である。命令コード記憶部１００のメモリサイズを６４Ｋバイト（アドレス範囲０Ｈから０ＦＦＦＦＨ）とする。命令コード記憶部１００のアドレス０Ｈには、アドレス３００Ｈへのジャンプを表す命令コード「ＪＭＰ  ３００Ｈ」が記憶されている。命令コード記憶部１００のアドレス３００Ｈには、変数Ｒ０とＲ１との加算を表す命令コード「ＡＤＤ  Ｒ０，Ｒ１」が記憶されている。ブレークポイントアドレステーブルは図８の如く設定されている。当該テーブルの最上段には、キャッシュメモリ２１０のメモリサイズ２Ｋバイトが示されている。次段にはブレークポイントアドレスの個数２が示されている。以降の段にはブレークポイントアドレス１００Ｈ及び３００Ｈが示されている。
【００３８】
ＰＣ２２１の初期値はアドレス０Ｈを示しているとする。キャッシュメモリ２１０は、命令コード記憶部１００の一連のアドレスの内、アドレス０Ｈを含む読み出しアドレス範囲内のアドレスに記憶されている命令コード群を記憶していないため、キャッシュミスとなる。キャッシュメモリ２１０は、アドレス０Ｈを含む読み出しアドレス範囲０Ｈから１ＦＦＨのアドレスに記憶されている命令コード群を命令コード記憶部１００から読み出し、これを一時的に記憶する。この時点におけるキャッシュメモリ２１０は図１２に示される如く命令コード群を記憶している。続いて、キャッシュメモリ２１０は、キャッシュミス割り込み信号を生成し、これをカウンタアドレス格納部３１０及びキャッシュミス割り込み処理部３３０に与える。カウンタアドレス格納部３１０は、キャッシュメモリ２１０からのキャッシュミス割り込み信号に応じて、ＰＣ２２１が示すアドレス０Ｈをキャッシュミスアドレス０Ｈとしてアドレス格納レジスタ３１１に記憶する。続いて、キャッシュミス割り込み処理部３３０は、前述したのと同様のキャッシュミス割り込み処理を実行してキャッシュメモリのアドレス１００に中断命令コードＢｒｅａｋを設定する。この時点におけるキャッシュメモリ２１０は図１３に示される如く命令コード群を記憶している。
【００３９】
続いてＣＰＵ２２０は、ＰＣ２２１が示すアドレス０Ｈの命令コード「ＪＭＰ  ３００Ｈ」を読み出して実行する。当該命令コードは、アドレス３００Ｈへのジャンプを表す命令コードであるため、ＰＣ２２１はアドレス３００Ｈを示す。キャッシュメモリ２１０は、命令コード記憶部１００の一連のアドレスの内、アドレス３００Ｈを含む読み出しアドレス範囲内のアドレスに記憶されている命令コード群を記憶していないため、キャッシュミスとなる。
【００４０】
キャッシュメモリ２１０は、アドレス３００Ｈを含む読み出しアドレス範囲２００Ｈから３ＦＦＨのアドレスに記憶されている命令コード群を命令コード記憶部１００から読み出し、これを一時的に記憶する。この時点におけるキャッシュメモリ２１０は図１４に示される如く命令コード群を記憶している。続いて、キャッシュメモリ２１０は、キャッシュミス割り込み信号を生成し、これをカウンタアドレス格納部３１０及びキャッシュミス割り込み処理部３３０に与える。カウンタアドレス格納部３１０は、キャッシュメモリ２１０からのキャッシュミス割り込み信号に応じて、ＰＣ２２１が示すアドレス３００Ｈをキャッシュミスアドレス３００Ｈとしてアドレス格納レジスタ３１１に記憶する
以下に再び図４も併せて参照しつつ、キャッシュミス割り込み処理について説明する。キャッシュミス割り込み処理部３３０は、キャッシュメモリ２１０からのキャッシュミス割り込み信号に応じて、アドレス格納レジスタ３１１からキャッシュミスアドレス３００Ｈを取り出す（ステップＳ１０１）。次にキャッシュミス割り込み処理部３３０は、ブレークポイントアドレス記憶部３２０からキャッシュメモリサイズ２Ｋバイト（２００Ｈ）を取り出す（Ｓ１０２）。続いてキャッシュミス割り込み処理部３３０は、キャッシュミスアドレス３００Ｈ及びキャッシュメモリサイズ２００Ｈに基づいて、読み出し開始アドレス及び読み出し終了アドレスを算出する（Ｓ１０３、Ｓ１０４）。読み出し開始アドレス及び読み出し終了アドレスは以下のように算出される。読み出し開始アドレス＝（３００Ｈ／２００Ｈ）×２００Ｈ＝２００Ｈ。読み出し終了アドレス＝（２００Ｈ＋２００Ｈ）−１＝３ＦＦＨ。
【００４１】
次にキャッシュミス割り込み処理部３３０は、ブレークポイントアドレス記憶部３２０からブレークポイントアドレス個数２を取り出す（ステップＳ１０５）。続いてキャッシュミス割り込み処理部３３０は、ブレークポイントアドレス記憶部３２０に記憶されている２個のブレークポイントアドレス１００Ｈ及び３００Ｈの各々について、読み出しアドレス範囲０Ｈから１ＦＦＨに含まれるか否かを順に判別する（Ｓ１０６）。ブレークポイントアドレス１００Ｈは読み出しアドレス範囲２００Ｈから３ＦＦＨに含まれないため、キャッシュミス割り込み処理部３３０は、ブレークポイントアドレス１００Ｈについては中断命令コードの設定は行わない。また、ブレークポイントアドレス３００Ｈは読み出しアドレス範囲２００Ｈから３ＦＦＨに含まれるため、キャッシュミス割り込み処理部３３０は、ブレークポイントアドレス３００Ｈに相当するキャッシュメモリ２１０のアドレス１００Ｈに中断命令コードを設定する（Ｓ１０７）。キャッシュミス割り込み処理部３３０は、上記２個のブレークポイントアドレスの設定処理を完了したら、キャッシュミス割り込み処理ルーチンを終了する。
【００４２】
図１５は、キャッシュミス割り込み処理終了後のキャッシュメモリ２１０における命令コード群の記憶状態を表す図である。キャッシュメモリ２１０のアドレス１００Ｈには中断命令コードＢｒｅａｋが記憶されている。キャッシュミス割り込み処理ルーチン終了後、ＰＣ２２１はアドレス３００Ｈから順次カウントアップする。ＰＣ２２１が示すアドレス３００Ｈは、キャッシュメモリのアドレス１００Ｈに相当する。キャッシュメモリのアドレス１００Ｈには中断命令コードＢｒｅａｋが記憶されており、ＣＰＵ２２０は、当該中断命令コードＢｒｅａｋを読み出して実行する。このとき、キャッシュメモリ２１０は、一連の命令コードの実行、すなわち、デバッグ対象のプログラムの実行を中断し、アドレス３００Ｈでプログラムの実行を中断した旨をデバッガ（図示せず）に通知する。
【００４３】
上記した如く本実施例によるデバッグ装置１は、プログラムを中断させたいアドレス（ブレークポイントアドレス）を予め記憶するブレークポイントアドレス記憶部３２０と、キャッシュメモリ２１０からのキャッシュミス割り込み信号に応じて、キャッシュミスが生じたアドレス（キャッシュミスアドレス）を記憶するカウンタアドレス格納部３１０とを含む。キャッシュミス割り込み処理部３３０は、キャッシュミス割り込み信号に応じて、キャッシュミスアドレスに基づいて命令コードの読み出しアドレス範囲を算出し、ブレークポイントアドレスが当該読み出しアドレス範囲内に含まれるか否かを判別する。ブレークポイントアドレスが当該読み出しアドレス範囲内に含まれる場合、キャッシュミス割り込み処理部３３０は、キャッシュメモリ２１０内において当該ブレークポイントアドレスに相当するアドレスに中断命令コードを設定する。このキャッシュミス割り込み処理を実行することにより、キャッシュミス発生時にキャッシュメモリ２１０が命令コード群を書き換えた場合においても、所望のアドレスでデバッグ対象のプログラムの実行を中断することができる。
【００４４】
本実施例によれば、従来知られていたキャッシュメモリのロック機能を利用しないため、キャッシュメモリ２１０がデバッグ専用のメモリとして占有されることなく、キャッシュメモリ２１０の本来の動作を再現させながら、所望のアドレスでデバッグ対象のプログラムの実行を中断することができる。また、仮にキャッシュメモリ内にブレークポイントアドレスを設定してキャッシュメモリをロックする方法を用いた場合には、中断命令コードを設定するアドレス範囲がキャッシュメモリのメモリサイズ内に限定されてしまうが、本実施例によれば、ブレークポイントアドレスを予め記憶するブレークポイントアドレス記憶部３２０を別に備え、キャッシュメモリ２１０が命令コード群を読み出す毎に当該ブレークポイントアドレスに相当するキャッシュメモリ２１０のアドレスに中断命令コードを設定するため、デバッグ対象のプログラムが記憶されている命令コード記憶部１００の全てのアドレス範囲に亘って中断命令コードを設定することができる。
【００４５】
キャッシュミス割り込み処理は以下に示す３つの変形例においても本実施例と同様の効果を奏する。変形例１．キャッシュミス割り込み処理機能をデバッガ（図示せず）に備え、キャッシュミス発生時にデバッグ対称のプログラムを中断させ、当該デバッガが中断命令コードをキャッシュメモリ２１０に設定した後に、当該プログラムの実行を再開させる。変形例２．デバッグ装置１とデバッガとの間にインサーキットエミュレータ（図示せず）を配置する場合には、キャッシュミス割り込み処理機能を当該インサーキットエミュレータに備えても良い。変形例３．変形例２において、インサーキットエミュレータがデバッガからの設定指示に応じてキャッシュミス割り込み処理を実行するようにしても良い。
【００４６】
本実施例においては、カウンタアドレス格納部３１０をＭＰＵ２００の外部に設けているが、カウンタアドレス格納部３１０をＭＰＵ２００内に備えても良い。
【図面の簡単な説明】
【００４７】
【図１】本発明によるデバッグ装置を表すブロック図である。
【図２】キャッシュメモリによる命令コードの読み出しを表す模式図である。
【図３】ブレークポイントアドレステーブルを表す図である。
【図４】キャッシュミス割り込み処理ルーチンを表すフローチャートである。
【図５】命令コード記憶部における命令コード群の記憶例を表す図である。
【図６】キャッシュメモリにおける命令コード群の記憶例を表す図である。
【図７】キャッシュメモリにおける命令コード群の記憶例を表す図である。
【図８】ブレークポイントアドレステーブルの設定例を表す図である。
【図９】命令コード記憶部における命令コード群の記憶例を表す図である。
【図１０】キャッシュメモリにおける命令コード群の記憶例を表す図である。
【図１１】命令コード記憶部における命令コード群の記憶例を表す図である。
【図１２】キャッシュメモリにおける命令コード群の記憶例を表す図である。
【図１３】キャッシュメモリにおける命令コード群の記憶例を表す図である。
【図１４】キャッシュメモリにおける命令コード群の記憶例を表す図である。
【図１５】キャッシュメモリにおける命令コード群の記憶例を表す図である。
【符号の説明】
【００４８】
１  デバッグ装置
１００  命令コード記憶部
２００  ＭＰＵ
２１０  キャッシュメモリ
２２０  ＣＰＵ
２２１  ＰＣ（プログラムカウンタ）
３１０  カウンタアドレス格納部
３１１  アドレス格納レジスタ
３２０  ブレークポイントアドレス記憶部
３３０  キャッシュミス割り込み処理部
【図１】
2009043061.tif 000003
【図２】
2009043061.tif 000004
【図３】
2009043061.tif 000005
【図４】
2009043061.tif 000006
【図５】
2009043061.tif 000007
【図６】
2009043061.tif 000008
【図７】
2009043061.tif 000009
【図８】
2009043061.tif 000010
【図９】
2009043061.tif 000011
【図１０】
2009043061.tif 000012
【図１１】
2009043061.tif 000013
【図１２】
2009043061.tif 000014
【図１３】
2009043061.tif 000015
【図１４】
2009043061.tif 000016
【図１５】
2009043061.tif 000017