(57)【要約】【課題】あるプロセッサがデバッグモードに移行した場合に、ほかのプロセッサも同時にデバッグモードへ移行することで、すべてのプロセッサの状態を観測可能にすると共に、プロセッサがデバッグモードへ移行しても、クロック全体を停止させた場合と同じように動作を再開でき、プロセッサのパイプラインが原因で発生するプログラムカウンタとレジスタの不一致問題をも解決する。【解決手段】ブレーク検出ユニットは、周辺回路からの信号の状態が、予め設定されたブレーク条件と合致するかどうかを検出し、合致する場合にブレーク信号を生成する。割込制御ユニットは、ブレーク検出ユニットからのブレーク信号を検出した時およびプロセッサからのブレーク信号を検出した時に回路に含まれる全プロセッサに割込信号を入力する。クロック制御ユニットは、割込制御ユニットがブレーク信号を検出したら直ちにプロセッサにクロック信号を供給し、周辺回路にクロック信号を供給しない。【選択図】図１
2010277142.tif 000002
【特許請求の範囲】
【請求項１】
割込制御によりその動作検証を行う複数のプロセッサと、前記プロセッサ以外の周辺回路とを含む回路の動作を検証する装置において、
前記周辺回路からの信号の状態が、予め設定されたブレーク条件と合致するかどうかを検出し、合致する場合にブレーク信号を生成するブレーク検出手段と、
前記プロセッサからのブレーク信号および前記ブレーク検出手段からのブレーク信号を検出して、全プロセッサに割込信号を入力する割込制御手段と、
前記プロセッサおよび前記周辺回路へ供給するクロック信号を制御するクロック制御手段と、
前記割込制御手段が伝達したブレーク発生を前記クロック制御手段に伝達し、前記ブレーク検出手段および前記プロセッサのデバッグ制御手段の制御を行う中央制御手段と、を備え、
前記割込制御手段は、前記ブレーク検出手段からのブレーク信号を検出した時および前記プロセッサからのブレーク信号を検出した時に前記回路に含まれる全プロセッサに割込信号を入力し、
前記クロック制御手段は、前記割込制御手段がブレーク信号を検出したら直ちに前記プロセッサにクロック信号を供給し、前記周辺回路にクロック信号を供給しないことを特徴とする回路検証装置。
【請求項２】
前記プロセッサに割込信号を入力したとき、割込発生から割込ベクタに遷移する前に実行する命令の数が異なる場合、ｉ番目のプロセッサが実行する命令の数をＡ＿ｉとし、Ａ＿ｉの最大値をＢとすると、前記割込制御手段は、ブレーク信号を検出してからＢ−Ａ＿ｉサイクル遅延させて、全プロセッサに割込信号を入力することを特徴とする請求項１記載の回路検証装置。
【請求項３】
さらに、前記プロセッサがリターン命令を実行することを検出するリターン命令検出手段を備え、
前記クロック制御手段は、デバッグ状態から通常状態へ復帰する時に、リターン命令が実行されたらクロック信号の供給を一旦停止し、全プロセッサのクロック信号の供給が停止したら、各プロセッサでリターン命令を実行するのに必要なクロック数を各プロセッサに供給し、全プロセッサおよび周辺回路へのクロック信号の供給を再開することを特徴とする請求項１記載の回路検証装置。
【請求項４】
割込制御によりその動作検証を行う複数のプロセッサと、前記プロセッサ以外の周辺回路とを含む回路の動作を検証する方法において、
ブレーク検出手段が、前記周辺回路からの信号の状態が、予め設定されたブレーク条件と合致するかどうかを検出し、合致する場合にブレーク信号を生成し、
割込制御手段が、前記プロセッサからのブレーク信号および前記ブレーク検出手段からのブレーク信号を検出して、全プロセッサに割込信号を入力し、
クロック制御手段が、前記プロセッサおよび前記周辺回路へ供給するクロック信号を制御し、
中央制御手段が、前記割込制御手段が伝達したブレーク発生を前記クロック制御手段に伝達し、前記ブレーク検出手段および前記プロセッサのデバッグ制御手段の制御を行う、
方法であって、
前記割込制御手段が、前記ブレーク検出手段からのブレーク信号を検出した時および前記プロセッサからのブレーク信号を検出した時に前記回路に含まれる全プロセッサに割込信号を入力し、
前記クロック制御手段が、前記割込制御手段がブレーク信号を検出したら直ちに前記プロセッサにクロック信号を供給し、前記周辺回路にクロック信号を供給しないことを特徴とする回路検証方法。
【請求項５】
前記プロセッサに割込信号を入力したとき、割込発生から割込ベクタに遷移する前に実行する命令の数が異なる場合、ｉ番目のプロセッサが実行する命令の数をＡ＿ｉとし、Ａ＿ｉの最大値をＢとすると、前記割込制御手段が、ブレーク信号を検出してからＢ−Ａ＿ｉサイクル遅延させて、全プロセッサに割込信号を入力することを特徴とする請求項４記載の回路検証方法。
【請求項６】
さらに、リターン命令検出手段が前記プロセッサがリターン命令を実行することを検出し、
前記クロック制御手段が、デバッグ状態から通常状態へ復帰する時に、リターン命令が実行されたらクロック信号の供給を一旦停止し、全プロセッサのクロック信号の供給が停止したら、各プロセッサでリターン命令を実行するのに必要なクロック数を各プロセッサに供給し、全プロセッサおよび周辺回路へのクロック信号の供給を再開することを特徴とする請求項４記載の回路検証方法。
【請求項７】
割込制御によりその動作検証を行う複数のプロセッサと、前記プロセッサ以外の周辺回路とを含む回路の動作を検証するプログラムにおいて、
コンピュータを、
前記周辺回路からの信号の状態が、予め設定されたブレーク条件と合致するかどうかを検出し、合致する場合にブレーク信号を生成するブレーク検出手段と、
前記プロセッサからのブレーク信号および前記ブレーク検出手段からのブレーク信号を検出して、全プロセッサに割込信号を入力する割込制御手段と、
前記プロセッサおよび前記周辺回路へ供給するクロック信号を制御するクロック制御手段と、
前記割込制御手段が伝達したブレーク発生を前記クロック制御手段に伝達し、前記ブレーク検出手段および前記プロセッサのデバッグ制御手段の制御を行う中央制御手段と、
して機能させるプログラムであって、
前記割込制御手段は、前記ブレーク検出手段からのブレーク信号を検出した時および前記プロセッサからのブレーク信号を検出した時に前記回路に含まれる全プロセッサに割込信号を入力し、
前記クロック制御手段は、前記割込制御手段がブレーク信号を検出したら直ちに前記プロセッサにクロック信号を供給し、前記周辺回路にクロック信号を供給しないことを特徴とする回路検証プログラム。
【請求項８】
前記プロセッサに割込信号を入力したとき、割込発生から割込ベクタに遷移する前に実行する命令の数が異なる場合、ｉ番目のプロセッサが実行する命令の数をＡ＿ｉとし、Ａ＿ｉの最大値をＢとすると、前記割込制御手段は、ブレーク信号を検出してからＢ−Ａ＿ｉサイクル遅延させて、全プロセッサに割込信号を入力することを特徴とする請求項７記載の回路検証プログラム。
【請求項９】
さらに、コンピュータを、前記プロセッサがリターン命令を実行することを検出するリターン命令検出手段として機能させるプログラムであって、
前記クロック制御手段は、デバッグ状態から通常状態へ復帰する時に、リターン命令が実行されたらクロック信号の供給を一旦停止し、全プロセッサのクロック信号の供給が停止したら、各プロセッサでリターン命令を実行するのに必要なクロック数を各プロセッサに供給し、全プロセッサおよび周辺回路へのクロック信号の供給を再開することを特徴とする請求項７記載の回路検証プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、回路検証装置、方法およびプログラムに係り、特に複数プロセッサを含む回路のデバッグ制御装置等の回路検証装置、方法およびプログラムに関する。
【背景技術】
【０００２】
半導体技術の進歩により、半導体デバイス（論理ＬＳＩ（Large Scale Integrated circuit））の集積度は年々向上し、大規模システムを１チップに集積することが可能になってきている。そのため、従来は複数の半導体デバイスで構成されていた複雑なシステムも１チップに集積することが可能になってきている。また、半導体デバイスは、機能修正が困難でありコストもかかるため、チップ化された後もソフトウェアによりその機能的動作を変えられるＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）などを利用する半導体デバイスが近年増えている。また、処理内容に適応したプロセッサが利用されるため、１チップに内蔵されるプロセッサは一種類ではないのが一般的である。
【０００３】
プロセッサのデバッグは、主にプロセッサで動作するプログラムにブレークポイントを設定し、ブレークした時のプロセッサの状態（プログラムカウンタやレジスタの値）を参照したり、プログラム上の変数の値（あるアドレスに格納されたメモリの値）を参照したりして行われるものである。
【０００４】
ブレークポイントの実現方法は、主に２つある。ひとつは、プロセッサに付加されたイベント検出回路（ＤＣＵ、デバッグコントロール回路）がブレーク条件を検出し、プロセッサに即時割込をかけて割込ルーチンへ処理を移動させることによってプログラムの動作を一時的に停止させるハードウェアブレークである。もうひとつは、該当する命令をトラップ命令（ソフトウェア割込を生成する命令）に書き換え、該当する命令が実行された場合はプロセッサ自身が割込を生成し、割込ルーチンへ処理を移動させることによってプログラムの動作を一時的に停止させるソフトウェアブレークである。
【０００５】
ハードウェアブレークは、回路を使用して割り込みをかけるため、予めプロセッサに用意された数しかブレークポイントを同時に張ることができないなどの制限がある。一方、ソフトウェアブレークは、このような制限はないものの、命令を書き換えて実行するため、命令を書き換える機能をプロセッサに備えることが必須となる。したがって、命令がＲＯＭ（Read Only Memory）に格納されている場合は、ソフトウェアブレークを利用できないなどの制限がある（特許文献１参照）。
【０００６】
図１を参照して、関連技術のプロセッサを含んだ回路の一般的な構成について説明する。
【０００７】
図１に示す回路は、プロセッサ１００、バス１０１、デバッグ用メモリ１０２、命令メモリ１０３、データメモリ１０４、周辺回路Ａ１０５、周辺回路Ｂ１０６、およびデバッグ制御部１０７を含む。
【０００８】
プロセッサ１００は、バス１０１を通じて命令メモリ１０３やデバッグ用メモリ１０２からプログラム（命令列）を取得して動作を行うものである。
【０００９】
デバッグ用メモリ１０２は、プロセッサ１００のメモリ空間の一部であり、該当するメモリ空間をプロセッサ１００がアクセスした場合は、命令メモリ１０３ではなく、デバッグ用メモリ１０２からその値を返すように構成されている。また、デバッグ用メモリ１０２は、デバッグ制御部１０７に接続され、半導体デバイス外部からプロセッサ１００を介さず読み書き可能なメモリとすることで、プロセッサ１００のデバッグを可能にしている。
【００１０】
また、バス１０１には、周辺回路Ａ１０４や周辺回路Ｂ１０５も接続していると仮定する。
【００１１】
ここで、プロセッサ１００がデバッグモード（プロセッサ１００がデバッグ用メモリ領域を参照している状態）に入っている場合は、ブレークポイントを張るアドレスの命令を退避させるような命令をデバッグ用メモリ１０２に書き込み、プロセッサ１００がそれを実行することで該当する命令退避（ソフトウェアブレークポイントの実現）を行う。
【００１２】
より詳細に説明すると、１）ブレークポイントを張る命令をレジスタに格納する（ロード命令で実現可能）、２）トラップ命令をレジスタに格納する（ロード命令で実現可能）、３）トラップ命令のオペコードを保存したレジスタの値をブレークポイントのアドレスに格納する（ストア命令で実現可能）命令列をデバッグ用メモリ１０２に書き込み、それをプロセッサ１００自身が実行することで、ソフトウェアブレークポイントを実現する。
【００１３】
レジスタの値を観測する場合は、プロセッサ１００がレジスタの値をデバッグ用メモリ１０２に書き込む命令（ストア命令）をプロセッサ１００が実行し、デバッグ制御部１０７がデバッグ用メモリ１０２に書き込まれた値を読み込むことで実現される。レジスタの書き込みも、デバッグ制御部１０７を通じて、レジスタに設定したい値を記載したロード命令をデバッグ用メモリ１０２に書き込み、プロセッサ１００がその命令を実行することでレジスタの書き込みが行われる。別の方法としては、デバッグ制御部１０７がプロセッサ１００内部にあるレジスタを直接読み書きしても良い。データメモリ１０４の読み書きも同様で、プログラムの変数の値も命令コード列を解析してスタックにおける位置を把握し、スタックポインタの値と合わせてデータメモリ１０４を読み込むことで実現される。変数の上書きもまったく同様である。
【００１４】
デバッグ用メモリ１０２は、たとえば、１）プロセッサ１００を停止させるコード、２）処理するコード（例えば、レジスタ観測するためのストア命令等）、３）上記１）へのジャンプ命令、から構成すればよいので、非常に小さいメモリ領域で対応することが可能であり、メモリではなく、レジスタファイルや複数のレジスタで構成される場合もある。
【００１５】
また、デバッグ手法は一般的な概念を示したものであり、そのほかの異なる実現方法も考えられる。デバッグ機能（レジスタやメモリの読出や書換）は、プロセッサが持つ本来の機能（レジスタの値をメモリに格納する機能や、メモリの値をレジスタにロードする機能）を利用して実現されているため、デバッグ中でもプロセッサへのクロック供給を停止することはできない。仮にプロセッサへのクロック供給を停止させた場合は、プロセッサと通信できなくなるため、その状態をまったく把握することができない。
【００１６】
また、上述した記載は、ＩＣＥ（In-Circuit Emulator）を利用したデバッグ形態であるが、最近は、専用プロセッサやＦＰＧＡ（Field Programmable Gate Array）などを利用したエミュレーション技術の発展に伴い、プロセッサをエミュレータに実装して、その上のプログラムのデバッグを行うことも増えてきている。
【００１７】
エミュレーション技術による検証では、実際の半導体デバイスと同じようにエミュレーションしているプロセッサに外部から実際のＩＣＥを接続して同様の検証を行う形態と、エミュレーションしている回路のクロック信号を制御してデバッグする方法（特許文献２参照）がある。
【００１８】
前者は、半導体チップがエミュレータとなっただけであるため、詳細は前述した状態と同じである。後者の方法は、プロセッサへの割込信号（例えば、図１の１０８参照）を常時観測し、割込信号が発生した時に回路全体へ供給しているクロック信号を停止して実現する方法がある。エミュレータに実装されている回路全体が動作を停止するため、再びクロック供給を開始することで回路の動作を再開することができる。
【００１９】
また、一般的なエミュレータでは、専用ハードウェアにより、内部状態を全て確認することができるため、プロセッサへのクロックを停止してもＩＣＥのように観測できないなどの問題は生じない等の利点がある。
【先行技術文献】
【特許文献】
【００２０】
【特許文献１】特開２００７−００４５１６号公報
【特許文献２】特開２００１−２０９５５６号公報
【発明の概要】
【発明が解決しようとする課題】
【００２１】
ハードウェアブレークやソフトウェアブレークを利用したデバッグでは、クロック信号は常時供給されているため、該当するプロセッサのプログラム実行は一時的に停止しているものの、そのほかのプロセッサや周辺回路（図１の周辺回路Ａや周辺回路Ｂ）はクロックが供給されているため、動作を継続する。そのため、プロセッサと周辺回路の動作タイミングが実際の動作と合わなくなり、ブレークをかけたために正常に動作しないなどの問題が起きる。さらに複数のプロセッサから構成され、あるプロセッサがブレークによりデバッグモードに移行した場合、それ以外のプロセッサは通常動作をしているため、デバッグモードへ移行したプロセッサ以外の状態を知ることができない問題も起こる。これは、複数のプロセッサが協調して動作する場合のデバッグにおいて、最も大きな問題である。
【００２２】
一方、ハードウェアエミュレータのクロック制御の方法は、この問題を解決するものの、ブレークが発生した時点でプロセッサへのクロックを停止させるため、プロセッサのパイプラインが原因でライトバックされず、プログラムカウンタが示す位置とレジスタの値が一致しないなどの問題が起きる。さらに、近年のプロセッサは複雑になっているため、正確なプログラムカウンタの値を求めるためには、Ｖｅｒｉｌｏｇ、ＶＨＤＬ（Very high speed IC Hardware Description Language）に代表されるハードウェア記述言語で記載されたプロセッサ記述を修正する必要がある問題もある。
【００２３】
以上のように、複数のプロセッサを有する回路をデバッグするとき、ブレークしたプロセッサの動作は一時的に停止するが、他のプロセッサや周辺回路は動作を続けてしまうため、プロセッサや周辺回路との間で時間が合わなくなる原因となっている。逆に、周辺回路に対してもブレークを実現したとき、プロセッサ上のプログラムは動作し続けるため、同じ問題が起きる。
【００２４】
本発明の目的は、あるプロセッサがデバッグモードに移行した場合に、ほかのプロセッサも同時にデバッグモードへ移行することで、すべてのプロセッサの状態を観測可能にすると共に、プロセッサがデバッグモードへ移行しても、クロック全体を停止させた場合と同じように動作を再開でき、プロセッサのパイプラインが原因で発生するプログラムカウンタとレジスタの不一致問題をも解決する回路検証装置、方法およびシステムを提供することにある。
【課題を解決するための手段】
【００２５】
上記目的を達成するため、本発明に係る回路検証装置は、割込制御によりその動作検証を行う複数のプロセッサと、前記プロセッサ以外の周辺回路とを含む回路の動作を検証する装置において、前記周辺回路からの信号の状態が、予め設定されたブレーク条件と合致するかどうかを検出し、合致する場合にブレーク信号を生成するブレーク検出手段と、前記プロセッサからのブレーク信号および前記ブレーク検出手段からのブレーク信号を検出して、全プロセッサに割込信号を入力する割込制御手段と、前記プロセッサおよび前記周辺回路へ供給するクロック信号を制御するクロック制御手段と、前記割込制御手段が伝達したブレーク発生を前記クロック制御手段に伝達し、前記ブレーク検出手段および前記プロセッサのデバッグ制御手段の制御を行う中央制御手段と、を備え、前記割込制御手段は、前記ブレーク検出手段からのブレーク信号を検出した時および前記プロセッサからのブレーク信号を検出した時に前記回路に含まれる全プロセッサに割込信号を入力し、前記クロック制御手段は、前記割込制御手段がブレーク信号を検出したら直ちに前記プロセッサにクロック信号を供給し、前記周辺回路にクロック信号を供給しないことを特徴としている。
【００２６】
本発明に係る回路検証方法は、割込制御によりその動作検証を行う複数のプロセッサと、前記プロセッサ以外の周辺回路とを含む回路の動作を検証する方法において、ブレーク検出手段が、前記周辺回路からの信号の状態が、予め設定されたブレーク条件と合致するかどうかを検出し、合致する場合にブレーク信号を生成し、割込制御手段が、前記プロセッサからのブレーク信号および前記ブレーク検出手段からのブレーク信号を検出して、全プロセッサに割込信号を入力し、クロック制御手段が、前記プロセッサおよび前記周辺回路へ供給するクロック信号を制御し、中央制御手段が、前記割込制御手段が伝達したブレーク発生を前記クロック制御手段に伝達し、前記ブレーク検出手段および前記プロセッサのデバッグ制御手段の制御を行う方法であって、前記割込制御手段が、前記ブレーク検出手段からのブレーク信号を検出した時および前記プロセッサからのブレーク信号を検出した時に前記回路に含まれる全プロセッサに割込信号を入力し、前記クロック制御手段が、前記割込制御手段がブレーク信号を検出したら直ちに前記プロセッサにクロック信号を供給し、前記周辺回路にクロック信号を供給しないことを特徴としている。
【００２７】
本発明に係る回路検証プログラムは、割込制御によりその動作検証を行う複数のプロセッサと、前記プロセッサ以外の周辺回路とを含む回路の動作を検証するプログラムにおいて、コンピュータを、前記周辺回路からの信号の状態が、予め設定されたブレーク条件と合致するかどうかを検出し、合致する場合にブレーク信号を生成するブレーク検出手段と、前記プロセッサからのブレーク信号および前記ブレーク検出手段からのブレーク信号を検出して、全プロセッサに割込信号を入力する割込制御手段と、前記プロセッサおよび前記周辺回路へ供給するクロック信号を制御するクロック制御手段と、前記割込制御手段が伝達したブレーク発生を前記クロック制御手段に伝達し、前記ブレーク検出手段および前記プロセッサのデバッグ制御手段の制御を行う中央制御手段として機能させるプログラムであって、前記割込制御手段は、前記ブレーク検出手段からブレーク信号を検出した時および前記プロセッサからのブレーク信号を検出した時に前記回路に含まれる全プロセッサに割込信号を入力し、前記クロック制御手段は、前記割込制御手段がブレーク信号を検出したら直ちに前記プロセッサにクロック信号を供給し、前記周辺回路にクロック信号を供給しないことを特徴としている。
【発明の効果】
【００２８】
本発明によれば、次のような効果が得られる。
【００２９】
第１の効果は、あるプロセッサがデバッグモードへ移行したときに、ほかのプロセッサもデバッグモードへ移行するため、中央制御手段を通じてシステム内部にある全プロセッサの状態を取得することができる効果がある。
【００３０】
その理由は、あるプロセッサがブレークポイントに到達したときに、ほかのプロセッサも同様に割込をかけるように構成したためである。さらに周辺回路もブレーク条件が成立した場合も全プロセッサに割込をかけてデバッグモードへ移行してプログラムの実行を一時中断するとともに、周辺回路へのクロック信号の供給を停止し、動作を再開するときは全プロセッサや周辺回路が同時に動作を開始できるように、復帰命令の仕様に従って、入力するクロック信号の数を調節するためである。
【００３１】
同様の理由により、第２の効果として、クロック制御手段が全プロセッサや周辺回路が同時に動作を開始できるように、各復帰命令の仕様に従って、入力するクロック信号の数を調節するため、複数の異なるプロセッサを含んだシステムも上記全効果を持ちながら、デバッグすることを可能にする効果もある。
【００３２】
第３の効果として、デバッグモードにおいてもプロセッサはクロック供給が続くため、エミュレータ（特許文献２）のようにプロセッサがパイプライン化されている場合に発生するプログラムカウンタの値とレジスタの値の不一致問題を解決できる効果もある。
【００３３】
第４の効果として、回路を特許文献２記載のエミュレータに実装する場合は回路記述の修正を行う必要があるが、本発明は現在のプロセッサに実現されている機能を最大限利用するように構成するため、その修正も最小限（割込を入れる）となり、修正箇所を大幅に削減する効果もある。
【図面の簡単な説明】
【００３４】
【図１】関連技術のプロセッサを含む回路の一般的な構成を示すブロック図である。
【図２】本発明の第１の実施の形態に係る回路検証装置であるデバッグ制御装置の全体構成を示すブロック図である。
【図３】図２に示すデバッグ制御装置の動作を示すタイミングチャートである。
【図４】デバッグ用メモリ（デバッグモードにおけるプロセッサの動作）を示す具体例である。
【図５】図２に示すデバッグ制御装置の動作を示すフローチャートである。
【図６】本発明の第２の実施の形態に係る回路検証装置であるデバッグ制御装置の全体構成を示すブロック図である。
【図７】図６に示すデバッグ制御装置の動作を示すフローチャートである。
【発明を実施するための形態】
【００３５】
次に、本発明に係る回路検証装置、方法およびプログラムの実施の形態について、図面を参照して詳細に説明する。
【００３６】
（第１の実施の形態）
まず、図２〜図５を参照して、本発明の第１の実施の形態について説明する。
【００３７】
図２を参照すると、本実施の形態に係る回路検証装置であるデバッグ制御装置は、大きく分けてプロセッサブロックＡ２００．１と、プロセッサブロックＢ２００．２と、周辺回路２０１と、ブレーク検出ユニット（ブレーク検出手段））２０３と、割込制御ユニット（割込制御手段）２０５と、クロック制御ユニット（クロック制御手段）２０６と、中央制御ユニット（中央制御手段）２０８とを含む。
【００３８】
ブレーク検出ユニット２０３は、周辺回路２０１からの信号２０２の値に基づいて、予め設定されたブレーク条件に合致するかどうかを検出し、合致する場合にブレーク信号２０４を生成し、割込制御ユニット２０５に出力する。
【００３９】
割込制御ユニット２０５は、プロセッサブロックＡから出力されるブレーク信号Ａ２１２．１と、プロセッサブロックＢから出力されるブレーク信号Ｂ２１２．２と、ブレーク検出ユニット２０３から出力されるブレーク信号２０４とに基づいて、プロセッサブロックＡとプロセッサブロックＢに、割込信号ＡＡ２１１．１と割込信号ＢＡ２１１．２を発生し、さらにブレークが発生したことをクロック制御ユニット２０６に伝える。
【００４０】
クロック制御ユニット２０６は、プロセッサブロックＡのクロック信号Ａ２０７．１とプロセッサブロックＢのクロック信号Ｂ２０７．１と周辺回路２０１のクロック信号Ｃ２０７．３を制御する。
【００４１】
中央制御ユニット２０８は、各プロセッサブロックＡ２００．１、Ｂ２００．２の内部にあるデバッグ制御部１０８．１、１０８．２（後述参照）と、ブレーク検出ユニット２０３と、割込制御ユニット２０５と、クロック制御ユニット２０６とを制御する。
【００４２】
次に、各プロセッサブロックＡ２００．１、Ｂ２００．２について、詳細に説明する。図２の例では、プロセッサブロックＡ２００．１、Ｂ２００．２は同一構成のため、以下、プロセッサブロックＡ２００．１のみ説明する。
【００４３】
プロセッサブロックＡ２００．１は、プロセッサＡ１００．１と、バス１０１．１と、デバッグ用メモリ１０２．１と、命令メモリ１０３．１と、データメモリ１０４．１と、デバッグ制御部１０８．１から構成される。この構成は、関連技術で説明した構成と同じである。さらに、プロセッサＡは、関連技術と同じように割込信号やトラップ命令を利用してデバッグを行うプロセッサである。
【００４４】
デバッグ制御部１０８．１は、中央制御ユニット２０８からの制御によって、デバッグ用メモリ１０２．１を読み書きしてソフトウェアブレークを実現し、プロセッサＡ１００．１からの信号に基づいて割込信号ＡＢ２１０．１を発生させ、ハードウェアブレークを実現するユニットである。この点は、関連技術と同じである。関連技術と異なる点は、デバッグ制御部１０８．１は、ブレークが発生したときにアクティブにするブレーク信号Ａ２１２．１を外部に出力し、さらに外部から割込信号ＡＡ２１１．１の入力を可能する点である。
【００４５】
デバッグ制御部１０８．１は、プロセッサＡでソフトウェアブレーク、ハードウェアブレークに関わらずブレークが発生した場合、割込制御ユニット２０５が他のプロセッサＢへ割込信号ＢＡ２１１．２を発生し、クロック制御ユニット２０６が周辺回路２０１へ供給するクロック信号Ｃ２０７．３を停止する目的で、ブレーク信号Ａ２１２．１をアクティブにする。一方、割込信号ＡＡ２１１．１がアクティブになった場合（プロセッサブロックＢ２００．２がブレーク条件を満たした場合や、ブレーク検出ユニット２０３がブレーク条件を満たした場合）、デバッグ制御部１０８．１は、即座に割込信号ＡＢ２１０．１をアクティブにすることで、プロセッサＡ１００．１をデバッグモードへ移行させる。
【００４６】
本実施の形態では、プロセッサブロックＡ２００．１とプロセッサブロックＢ２００．２は同一構成をしているが、必ずしも同一である必要はない。つまり、プロセッサＡ１００．１とプロセッサＢ１００．２は、異なるアーキテクチャであるプロセッサでも構わない。さらに、同一プロセッサの場合でも、命令メモリ１０３．１、１０３．２やデバッグ用メモリ１０２．１、１０２．２の容量や構成などは同一である必要はないし、図２には記載されていないキャッシュなどをどちらか一方のプロセッサブロックが含んでいても構わない。
【００４７】
また、デバッグモードでは、プロセッサのキャッシュを一時的にオフできる機能を利用することで、より忠実に実際の動作を模擬することができる。その理由は、デバッグ用コードもキャッシュすることで実際の動作と異なるタイミングでプロセッサが動作する問題を避けることが可能だからである。また、同様なことを実現する別の方法としては、キャッシュがアクティブにならない領域にデバッグ用メモリ領域を設定する方法もある。
【００４８】
周辺回路２０１は、プロセッサＡ１００．１、Ｂ１００．２以外の回路ブロックを示し、図２のように１つでも良いが、複数（数１０個から数１００個程度）あるのが一般的である。周辺回路２０１の具体的な例を挙げると、画像を扱う半導体の場合は、画像をエンコードしたり、エンコードされた画像をデコードしたりする回路ブロックである。そのほかには暗号や復号、メモリ制御を行う回路ブロック、ＵＳＢ（Universal Serial Bus）やＰＣＩ（Peripheral Component Interconnect）バスなどの外部インターフェースに接続する回路ブロックなど様々である。ただし、本発明はこれに限定されるものではない。
【００４９】
ブレーク検出ユニット２０３は、周辺回路２０１から出力される一つもしくは複数の信号２０２の値に基づいて、予め設定されてブレーク条件に合致するかを計算し、合致する場合はブレーク信号２０４を生成するユニットである。
【００５０】
ブレーク検出ユニット２０３のブレーク条件は、中央制御ユニット２０８により設定される。プロセッサと同じように専用ハードウェアを利用してブレーク判定しても良いし、高速に動作するプロセッサを利用してブレーク判定してもよい。前者は、高速に動作する周辺回路にも対応可能であるが、設定可能なブレークポイントの数に上限がある問題がある。一方、後者の場合は、周辺回路２０１の動作周波数がプロセッサと比較して遅くなければならないが、十分遅い場合は多くのブレークポイントを実現できる利点がある。
【００５１】
ブレーク条件としては、以下のものなどが考えられる。
【００５２】
１）信号の値が、予め設定された値に一致した、又は不一致した。
【００５３】
２）信号の値が、予め設定された範囲に一致した、又は不一致した。
【００５４】
３）上記１）、２）が、予め設定された数に到達した。
【００５５】
４）上記１）、２）が、予め設定されたクロック数連続して起きた。
【００５６】
５）複数の信号に関して、上記１）−４）の論理積や論理和や反転などを利用して計算したときに１になった。
【００５７】
他にも、ＳｙｓｔｅｍＶｅｒｉｌｏｇ等で用いられるアサーション記述などでブレーク条件を設定できるとよい。
【００５８】
ブレーク信号２０４は、割込制御ユニット２０５に入力され、その目的は前述したブレーク信号Ａ２１２．１と同じである。つまり、ブレーク信号２０４がアクティブになった場合、割込制御ユニット２０５は、すべてのプロセッサブロックＡ２００．１、Ｂ２００．２に即座に割込信号ＡＡ２１１．１、ＢＡ２１１．２を入力してプロセッサＡ２００．１、Ｂ２００．２の動作を一時的に停止させると同時にブレーク信号２０４がアクティブになったことをクロック制御ユニット２０６に入力して、周辺回路２０１に供給するクロック信号Ｃ２０７．３を停止させる動作を行う。
【００５９】
割込制御ユニット２０５は、プロセッサＡ２００．１、Ｂ２００．２や周辺回路２０１のブレーク信号Ａ２１２．１、Ｂ２１２．２、２０４がアクティブになったときに、すべてのプロセッサブロックＡ２００．１、Ｂ２００．２に同時に割込信号（割込信号ＡＡ２１１．１と割込信号ＢＡ２１１．２）を発生させるユニットである。これにより、プロセッサＡ２００．１とプロセッサＢ２００．２に割込信号（割込信号ＡＢ２１０．１、ＢＢ２１０．２）が入力され、各プロセッサＡ２００．１、Ｂ２００．２はデバッグモード（ｄｅｂｕｇラベルのある位置）へ移行する。さらに、割込制御ユニット２０５は、クロック制御ユニット２０６にブレーク信号Ａ２１２．１、Ｂ２１２．２、２０４がアクティブになったことを通知するユニットである。
【００６０】
クロック制御ユニット２０６は、各プロセッサブロックＡ２００．１、Ｂ２００．２や周辺回路２０１に供給するクロック信号を制御するユニットである。割込制御ユニット２０５からブレーク信号がアクティブである通知を受けた場合、クロック制御ユニット２０６はすべてのプロセッサブロックＡ２００．１、Ｂ２００．２にはクロック信号Ａ２０７．１、Ｂ２０７．２を供給し、周辺回路２０１へのクロック信号Ｃ２０７．３は停止するように動作する。
【００６１】
ＰＬＬ（Phase Locked Loop）などでクロック信号が制御されている場合は、クロック信号を停止させることが困難なため、ＰＬＬが出力したクロック信号をゲーテッドクロックと同じようにマスクする形で実装しても良い。また、昨今の半導体は消費電力を抑えるためにゲーテッドクロックを多用するため、これをうまく活用することで新たな回路を追加することなくクロック制御ユニット２０６の一部を実現することができる。ただし、周辺回路においてクロック供給を停止できない回路の場合は、クロックを供給し続けなければならない。たとえば、ＤＲＡＭ（Dynamic Random Access Memory）のＩ／Ｆ（インターフェース）回路は、クロックを供給しないと正常にＲＥＦＲＥＳＨ（リフレッシュ）動作することができず、ＤＲＡＭのデータの内容を破壊してしまうため、クロックを供給し続けなければならない。一方、デバッグモードから通常の状態へ復帰する方法は後述する。
【００６２】
図３に、ブレーク信号Ａ２１２．１またはブレーク信号Ｂ２１２．２またはブレーク信号２０４がアクティブになったときの、割込信号ＡＡ２１１．１と割込信号ＢＡ２１１．２、クロック信号Ａ２０７．１、クロック信号Ｂ２０７．２、クロック信号Ｃ２０７．３の動作の様子を示す。
【００６３】
図３において、クロック信号はプロセッサブロックＡおよびプロセッサブロックＢおよび周辺回路２０１を動作させる信号であり、ブレーク信号はブレーク信号Ａ２１２．１とブレーク信号Ｂ２１２．２とブレーク信号２０４の論理和を示し、割込信号は割込信号ＡＡ２１１．１および割込信号ＢＡ２１１．２を示している。
【００６４】
また、図３の最下部には、５段パイプラインを持つ一般的なＲＩＳＣ（Reduced Instruction Set Computer）プロセッサのパイプライン動作を示している。図のＩＦは命令フェッチ、ＩＤは命令デコード、ＥＸは実行、ＭＥＭはメモリアクセス、ＷＢはライトバックを示している。プロセッサにおいて、ハードウェアブレークによる検出およびトラップ命令の実行による、ブレークの発生がともにＥＸステージであると仮定すると、上の３つの命令は実行された後、割込ルーチンへジャンプするように動作を行い、下２つの命令は破棄される。ただし、下２つの命令を実行するプロセッサも存在する。
【００６５】
もし、ハードウェアブレークによる検出とトラップ命令を実行しブレーク信号Ａ２１２．１やＢ２１２．２がアクティブになるタイミングが異なる場合は、忠実に実際の動作を模擬するため、早いタイミングのブレークをフリップフロップ等で遅延させ、時間を合わせると、よりよいデバッグ環境を提供することができる。
【００６６】
図４に、プロセッサの割り込み処理の具体例（擬似的なアセンブラコード）を示す。
【００６７】
図４のｄｅｂｕｇラベルは、プロセッサのトラップ命令実行やハードウェア割り込みなどの発生により、ジャンプしてくる場所を示している。ｄｅｂｕｇラベルからｌｏｏｐラベルまでの間にレジスタの読み出しに必要な命令等が格納される。ｌｏｏｐラベルからｊｍｐ命令（ジャンプ命令）までが無限ループである。ｒｅｔ命令は、復帰命令でありプログラムのジャンプ元の位置（トラップ命令があった位置）に戻るための命令である。ここで、デバッグモードから通常状態へ復帰する場合は、ｊｍｐ  ｌｏｏｐ命令をＮＯＰ命令に書き換えることで復帰することができる。
【００６８】
上記の各ユニットは、ハードウェアで実現するのが一般的であるが、これに限られたことではない。
【００６９】
次に、図５のフローチャートを参照して、本実施の形態の全体の動作について詳細に説明する。
【００７０】
始めに、回路動作の準備を開始する（ステップＳ５００）。より具体的には、プロセッサブロックと周辺回路を内蔵した回路にその動作に必要なさまざまな装置やデバイスを接続し、電源投入し、回路のリセットをアクティブにする。デバッガを外部から接続した状態では、プロセッサはブレークポイント等を実現するため、開始直後、デバッグ用ルーチンを実行するため、周辺回路へのクロック信号は供給を停止している状態である。
【００７１】
次に、ユーザが中央制御ユニットを通じてプロセッサやブレーク検出ユニットのブレーク条件の設定、ブレークポイントの設定、レジスタ読み書き、メモリ読み書きを行う（ステップＳ５０１）。
【００７２】
次に、プログラムを実行するかデバッグを終了するかを選択する（ステップＳ５０２）。プログラム実行は、ユーザがプログラム実行（ステップ実行またはコンティニュ（継続）実行）を選択することで行われる。ここで、デバッグ終了が選択されると、デバッグ用ルーチンの実行を終了する（ステップＳ５０７）。
【００７３】
次に、トラップ命令に書き換えた命令を元命令に戻す（ステップＳ５０３）。このステップは、デバッグ用メモリに格納した元命令を一旦レジスタにロードして、該当するアドレスに書き込みする命令をデバッグ用メモリに格納し、それをプロセッサが実行することで実現される。このステップは、ブレークポイントを設定した命令を実行しなければならないために行われる。元命令を実行後、再びトラップ命令に置き換える必要があるため、もし、ステップ後、再び割込がかかるような命令や機能をプロセッサが持っていれば、それを元命令の代わりに利用する手法もある。
【００７４】
次に、トラップ命令に置き換えた元命令を実行し、再び割込によりデバッグモードへ移行する（ステップＳ５０４）。一般的なプロセッサは、ステップ実行を行うための機構（一命令実行後、割込がかかる仕組）があるため、それを利用して元命令の実行を行う。このとき、一命令分のクロックが周辺回路には供給される。
【００７５】
次に、ブレークポイントを設定したときと同じ方法で、実行した元命令を再びトラップ命令に書き換える（ステップＳ５０５）。
【００７６】
次に、リターン命令によりプログラムをブレークポイントが張られた次の命令に戻り（ステップＳ５０６）、プロセッサや周辺回路は通常状態になる。以後、ステップＳ５０２に戻り、上記と同様の処理を繰り返し実行する。
【００７７】
以上のように、本実施の形態では、あるプロセッサでブレークが発生した場合、回路中すべてのプロセッサに対して強制的に割込をかけてプログラムの動作を一時停止させ、周辺回路はクロック供給を停止することでその動作を停止させている。
【００７８】
次に、本実施の形態の効果について説明する。
【００７９】
本実施の形態では、あるプロセッサがデバッグモードへ移行したときに、ほかのプロセッサもデバッグモードへ移行するため、中央制御ユニットを通じてシステムにある全プロセッサの状態を取得することができる効果がある。さらにデバッグモードにおいてもプロセッサはクロック供給が続きライトバックを実行するため、ライトバック前のレジスタを観測する問題を解決でき、回路をエミュレータに実装する場合は回路記述の修正を行う必要があるが、本実施の形態は現在のプロセッサに実現されている機能を最大限利用するように構成するため、その修正も最小限（割込を入れる）となり、修正箇所を大幅に削減する効果もある。
【００８０】
なお、本実施の形態では、プロセッサに割込信号を入力したとき、割込発生から割込ベクタに遷移する前に実行する命令の数が異なる場合、ｉ番目のプロセッサが実行する命令の数をＡ＿ｉとし、Ａ＿ｉの最大値をＢとすると、割込制御ユニットは、ブレーク信号を検出してから（ブレークが発生してから）、フリップフロップ（ＦＦ）等の遅延回路によりＢ−Ａ＿ｉサイクル遅延させて、全プロセッサに割込信号を入力してもよい。
【００８１】
（第２の実施の形態）
次に、図６、図７を参照して、本発明の第２の発明の実施の形態について説明する。
【００８２】
本実施の形態に係る回路検証装置であるデバッグ制御装置は、図６に示すように、第１の実施の形態にリターン命令検出ユニット（リターン命令検出手段）６００．１と６００．２と、復帰情報６０２が加えられた構成である。
【００８３】
リターン命令検出ユニット６００．１と６００．２は、プロセッサＡ１００．１、Ｂ１００．２がリターン命令を実行することを検出し、それをリターン命令検出信号６０１．１と６０１．２としてクロック制御ユニット２０６に伝えるユニットである。
【００８４】
復帰情報６０２は、各プロセッサＡ１００．１、Ｂ１００．２におけるリターン命令が費やすクロック数が書かれている情報である。たとえば、プロセッサＡ１００．１はリターン命令に７サイクル必要で、プロセッサＢ１００．２は５サイクル必要という情報が記載されたファイルである。
【００８５】
クロック制御ユニット２０６は、すべてのプロセッサＡ１００．１、Ｂ１００．２と周辺回路２０１を同時に復帰させるために、リターン検出信号および復帰情報を利用して各プロセッサＡ１００．１、Ｂ１００．２や周辺回路２０１に与えるクロック数を制御する。
【００８６】
図７は、本実施の形態の動作をフローチャートに表した図である。この図において、図５のステップＳ５００〜Ｓ５０７に加え、ステップＳ７００、Ｓ７０１、Ｓ７０２、Ｓ７０３が追加されている。ステップＳ５０３とＳ５０４の間に、ステップＳ７００、Ｓ７０１が挿入され、ステップＳ５０５とＳ５０６の間に、ステップＳ７０２、Ｓ７０３が挿入されている。ステップＳ７００とＳ７０２は、同じ動作を行う。また、ステップＳ７０１とＳ７０３も、同じ動作を行う。
【００８７】
第１の実施の形態では、デバッグが終了して復帰するときに”ｊｍｐ  ｌｏｏｐ”無限ループを強制的にＮＯＰ命令に書き換えることで復帰を行っていたが、それではサイクルレベルで動作サイクルが合わなくなる。このため、本実施の形態では、ステップＳ７００とステップＳ７０１の制御を入れることにより、実際の動作とまったく同じサイクルで復帰できるようにしたものである。
【００８８】
すなわち、本実施の形態では、各プロセッサがリターン命令を実行したことを検出するまでクロックを供給し続ける（ステップＳ７００、Ｓ７０２）。より具体的にその動作について説明すると、あるプロセッサがリターン命令を実行したら、初めにリターン命令検出ユニットがそれを検出し、クロック制御ユニットに通知する。次に、クロック制御ユニットが該当するプロセッサに供給しているクロック信号を停止させる。次に、すべてのクロック信号が停止（つまり、すべてのプロセッサがリターン命令を実行）するまで待つように動作する。
【００８９】
そして、本実施の形態では、復帰情報６０２を利用して、各プロセッサがリターン命令を実行するのに必要なクロック数を供給する（ステップＳ７０１、Ｓ７０３）。これは、複数のプロセッサが異なるアーキテクチャを持っていても、すべてのプロセッサが同時に動作を開始できるようにするためである。
【００９０】
次に、本実施の形態の効果について説明する。
【００９１】
本実施の形態では、全プロセッサや周辺回路が同時に動作を開始できるように、リターン検出ユニットを追加し、復帰情報（復帰命令が必要とするクロック数に関する情報）に基づいて、各プロセッサに入力するクロック信号の数を調節するため、異なるアーキテクチャを持つプロセッサでも同時にすべてのプロセッサや周辺回路が復帰できる効果がある。
【００９２】
本実施の形態による回路検証装置および方法は、ハードウェア、ソフトウェア又はこれらの組み合わせによって実現することができる。
【００９３】
例えば、本実施の形態による回路検証装置は、ハードウェアにより実現することができるが、コンピュータをその装置として機能させるためのプログラムを、コンピュータがコンピュータ読み取り可能な記録媒体から読み込んで実行することによっても実現することができる。
【００９４】
また、本実施の形態による回路検証方法は、ハードウェアにより実現することができるが、コンピュータにその方法を実行させるためのプログラムを、コンピュータがコンピュータ読み取り可能な記録媒体から読み込んで実行することによっても実現することができる。
【００９５】
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記実施の形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【産業上の利用可能性】
【００９６】
本発明によれば、複数のプロセッサを含む回路のデバッグ制御装置等の回路検証装置、方法およびプログラム等に利用可能である。
【符号の説明】
【００９７】
１００．１、１００．２  プロセッサＡ、Ｂ
１０１．１、１０１．２  バス
１０２．１、１０２．２  デバッグ用メモリ
１０３．１、１０３．２  命令メモリ
１０４．１、１０４．２  データメモリ
１０８．１、１０８．２  デバッグ制御部
２０１  周辺回路
２０３  ブレーク検出ユニット
２０５  割込制御ユニット
２０６  クロック制御ユニット
２０８  中央制御ユニット
２００．１、２００．２  プロセッサブロックＡ、Ｂ
【図１】
2010277142.tif 000003
【図２】
2010277142.tif 000004
【図３】
2010277142.tif 000005
【図４】
2010277142.tif 000006
【図５】
2010277142.tif 000007
【図６】
2010277142.tif 000008
【図７】
2010277142.tif 000009