(57)【要約】【課題】複数プロセッサコアのデバッグ装置において、最小限のテストシステムと端子数で装置を構成可能であり、かつ、高速に実行可能であるようにする。【解決手段】ＬＳＩ１０８の複数プロセッサコア１０６、１０７のそれぞれに対し、コンピュータシステム１０１上で動作するデバッグ用のコマンドの入出力機能を備えたデバッガ１０２、１０３でデバッグする。それぞれのデバッガ１０２、１０３からアクセス可能である共有メモリ１０４を備える。任意のデバッガよりＬＳＩへデバッグ命令が送信されるコマンドを発行する前に、共有メモリ１０４を参照して、この共有メモリ１０４の内容によってハードアクセス権を取得した場合に限り、ハードアクセスを開始する。他のデバッガがコマンドを発行する場合にもその共有メモリ１０４の内容で判断して、アクセス権が取得できなければ、ハードアクセスを行わない。【選択図】　　　図１
2004021751.tif 000002
【特許請求の範囲】
【請求項１】
ＬＳＩが、複数プロセッサコアで構成されるとともに、各プロセッサコアがシリアル接続されて一組の端子のみが出力されるターゲットシステムにて構成され、
前記複数プロセッサコアをコンピュータシステム上でデバッグするときに、前記コンピュータシステムとターゲットシステムとの間で制御ユニットを介して情報のやりとりを行なうように構成され、
デバッグ対象の前記プロセッサコアに対応した、デバッグ用のコマンドの入出力機能を備えたデバッガにて、前記デバッグを行うように構成され、
デバッグ対象の前記プロセッサコアに対応した複数のデバッガからアクセス可能であるとともに、各デバッガに対応プロセッサコアへのハードアクセス権を取得させるための情報を格納した、共有メモリを備えたことを特徴とするデバッグ装置。
【請求項２】
共有メモリは、複数デバッガのうちの任意のデバッガより、対応するプロセッサコアに対してコマンドを発行する前に、前記共有メモリの内容を参照して、そのメモリ内容によって前記コマンドを発行するか否かを決定する調停部を備えたことを特徴とする請求項１記載のデバッグ装置。
【請求項３】
共有メモリは、調停部に加えて、ハードアクセス権を取得した際にコマンドを送信するデバッガ名を格納するための送信デバッガ名格納部を備えることを特徴とする請求項２記載のデバッグ装置。
【請求項４】
共有メモリは、調停部に加えて、デバッガの起動数が２つの場合に、一方のデバッガよりコマンドを発行して他方のデバッガに実行させるためのコマンド格納部を備えることを特徴とする請求項２記載のデバッグ装置。
【請求項５】
共有メモリは、調停部に加えて、デバッガの起動数が２つ以上の場合に、一つのデバッガよりコマンドを発行して他のデバッガに実行させるためのコマンド格納部と、前記コマンドを実行させるデバッガ名を格納する受信デバッガ名格納部とを備えることを特徴とする請求項２記載のデバッグ装置。
【請求項６】
共有メモリは、調停部とコマンド格納部と受信デバッガ名格納部とに加えて、コマンドを実行した結果を格納するコマンド結果格納部を備えることを特徴とする請求項５記載のデバッグ装置。
【請求項７】
共有メモリは、調停部に加えて、コマンドの実行を優先的に行わせるための優先調停部を備えることを特徴とする請求項２記載のデバッグ装置。
【請求項８】
共有メモリは、調停部に加えて、制御ユニットが持つ複数デバッガ共通のレジスタの情報を格納する制御ユニット情報格納部を備えることを特徴とする請求項２記載のデバッグ装置。
【請求項９】
請求項１から８までのいずれか１項記載のデバッグ装置においてデバッグを行わせるためのデバッグプログラムであって、コマンドを読み込んで、前記コマンドがハードアクセスコマンドか否かを判断するステップと、ハードアクセス権が取得できるか否か判断するために共有メモリの調停部にアクセスしてその内容を参照するステップと、前記ハードアクセス権が取得可能な場合に前記調停部の内容を変更するステップと、前記コマンドを実行するステップと、前記コマンド実行が終了した場合に前記アクセス権を放棄するために前記調停部の内容を参照してその内容を再び変更するステップとを含む処理をコンピュータシステムに実行させるものであることを特徴とするデバッグプログラム。
【請求項１０】
調停部を参照してハードアクセス権を取得した場合に、共有メモリの送信デバッガ名格納部に前記ハードアクセス権を取得したデバッガ名を設定するステップと、前記ハードアクセス権を取得できなかった場合に、前記送信デバッガ名格納部を参照するステップと、前記取得したハードアクセス権を放棄する場合に前記送信デバッガ名格納部をクリアするステップとを含む処理をコンピュータシステムに実行させるものであることを特徴とする請求項９記載のデバッグプログラム。
【請求項１１】
デバッガの起動数が２つの場合に、一方のデバッガから他方のデバッガに対してコマンド実行を行うため、共有メモリのコマンド格納部にコマンド設定を行うか否かを判断するステップと、前記コマンド設定を行うと判断した場合に前記コマンド格納部にコマンドを格納するステップと、前記コマンド格納部のメモリ内容がクリアされるまでループ処理を行うステップと、コマンド入力を行わない場合に、前記コマンド格納部にデータが設定されているか否かを一定周期ごとに確認するステップと、前記コマンド格納部にデータが設定されている場合に前記コマンドを他方のデバッガで実行するステップと、前記コマンドが終了した場合に前記コマンド格納部の内容をクリアするステップと、前記コマンド格納部がクリアされたときに前記ループ処理を抜けるステップとを含む処理をコンピュータシステムに実行させるものであることを特徴とする請求項９記載のデバッグプログラム。
【請求項１２】
デバッガの起動数が２つ以上の場合に、任意のデバッガからある特定のデバッガにコマンドを発行するため、前記コマンドを実行する前記特定のデバッガの名前を共有メモリの受信デバッガ名格納部に格納するステップと、前記受信デバッガ名格納部に設定されているデータが自分自身のデバッガ名であるか否かを一定周期で判断するステップと、前記受信デバッガ名格納部に設定されているデータが自分自身のデバッガ名であると判断された場合に、共有メモリのコマンド格納部のコマンドを実行するステップと、ハードアクセス権を放棄する場合に前記受信デバッガ名格納部をクリアするステップとを含む処理をコンピュータシステムに実行させるものであることを特徴とする請求項９記載のデバッグプログラム。
【請求項１３】
任意のデバッガからある特定のデバッガにコマンド実行を行い、その結果を格納するために、共有メモリのコマンド格納部のコマンドを実行するステップの次に、共有メモリのコマンド結果格納部にコマンド結果を格納するステップと、任意のデバッガより前記コマンド結果格納部を参照するステップと、ハードアクセス権を放棄する場合に前記コマンド格納部をクリアするステップとを含む処理をコンピュータシステムに実行させるものであることを特徴とする請求項９記載のデバッグプログラム。
【請求項１４】
優先的にコマンド実行することが可能か否かを判断するために共有メモリの優先調停部を参照するステップと、優先的にコマンド実行することが可能な場合に前記優先調停部に優先実行を設定するステップと、前記優先実行を終了する場合に前記優先調停部に設定されている優先実行をクリアするステップとを含む処理をコンピュータシステムに実行させるものであることを特徴とする請求項９記載のデバッグプログラム。
【請求項１５】
共有メモリの制御ユニット情報格納部にデータがあるか否か判断するステップと、前記制御ユニット情報格納部に情報がある場合にはそれを参照するステップと、情報がない場合にはハードアクセスコマンドを発行するステップと、前記ハードアクセスコマンドの発行後に制御ユニットの各プロセッサ共通となるレジスタ割り当てに情報が格納されているか否かを判断するステップと、レジスタに情報がある場合に前記制御ユニット情報格納部に前記レジスタ情報を格納するステップとを含む処理をコンピュータシステムに実行させるものであることを特徴とする請求項９記載のデバッグプログラム。
【請求項１６】
請求項９から請求項１５までのいずれか１項に記載のデバッグプログラムを記録したことを特徴とするデバッグプログラム記憶媒体。
【請求項１７】
ＬＳＩが、複数プロセッサコアで構成されるとともに、各プロセッサコアがシリアル接続されて一組の端子のみが出力されるターゲットシステムにて構成され、
前記複数プロセッサコアをコンピュータシステム上でデバッグするように、デバッグ対象の前記プロセッサに対応した、デバッグ用のコマンドの入出力機能を備えた複数デバッガにて、前記デバッグを行うように構成され、
前記複数デバッガのそれぞれに対し、デバック対象となるシリアル接続された前記複数プロセッサコアの前後に繋がる別のプロセッサコアが持つインストラクションレジスタとデータレジスタのビット数を設定するＩＤ情報設定部と、前記ＩＤ情報設定部にて設定されたＩＤ情報を格納するＩＤ情報格納部とを備えることを特徴とするデバッグ装置。
【請求項１８】
コンピュータシステムとターゲットシステムとの間で制御ユニットを介して情報のやりとりを行なうように構成され、前記制御ユニットは、複数デバッガのＩＤ情報送信部によってＩＤ情報格納部から前記制御ユニットに送信されたＩＤ情報を受信するＩＤ情報受信部と、この受信されたＩＤ情報を格納するＩＤ情報格納部と、前記ＩＤ情報格納部で格納された前記ＩＤ情報をもとに前記複数プロセッサへ送るための命令を自動生成するためのコード自動生成部とを備えることを特徴とする請求項１７記載のデバッグ装置。
【請求項１９】
ＬＳＩが、複数プロセッサコアで構成されるとともに、各プロセッサコアがシリアル接続されて一組の端子のみが出力されるターゲットシステムにて構成され、
前記複数プロセッサコアをコンピュータシステム上でデバッグするときに、前記コンピュータシステムとターゲットシステムとの間で制御ユニットを介して情報のやりとりを行なうように構成され、
デバッグ対象の前記プロセッサコアに対応した、デバッグ用のコマンドの入出力機能を備えた複数デバッガにて、前記デバッグを行うように構成され、
前記制御ユニットは、複数デバッガより発行されたコマンドを前記プロセッサコアで実行させるように構成されるとともに、デバッガから送信されるモニタ命令を格納するモニタ命令格納部を備えることを特徴とするデバッグ装置。
【請求項２０】
前記複数デバッガは唯一つのコンピュータシステム上で動作するように構成されていることを特徴とする請求項１から８までのいずれか１項または請求項１７から１９までのいずれか１項記載のデバッグ装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はマイクロプロセッサを利用したターゲットシステムのハードウェア評価とソフトウェアデバッグとを支援するデバッグ装置に関し、特に、ターゲットシステムが複数プロセッサコアで構成されるシステムにおけるデバッグ装置に関するものである。
【０００２】
【従来の技術】
従来より、マイクロプロセッサのターゲットシステム開発において、そのシステムおよびソフトウェアの評価のためにデバッグ装置が用いられている。また近年、システムＬＳＩ化が進むにつれ、オンチップデバッグ回路を持ったプロセッサコアが増えてきており、そのデバッグ回路を利用したデバッグ装置が一般的となってきている。その中で、複数プロセッサコアからなるシステムＬＳＩのデバッグを行う際には、プロセッサコア間のシステム検証とソフトウェアデバッグとが重要な課題となっている。
【０００３】
その課題に対し、今までは、複数プロセッサコアをＪＴＡＧ方式等のシリアルポートで制御し、デバッグするプロセッサコアの数に合わせた複数組のシリアルポート出力端子に、それぞれのテストシステムをデバッグ対象のプロセッサコア分だけ用意して、デバッグシステムを構成していた。
【０００４】
テストシステムは、通常、入出力機能を備えたコンピュータシステム上にコマンド入力機能と実行結果の出力機能とを備えており、コンピュータシステムからのコマンドは、マイクロプロセッサのデバッグ回路へ送受信するデータを制御する制御ユニットを介してやりとりされる。図１９はその構成例である。ＬＳＩ２０９がＣＯＲＥ（Ａ）２０７とＣＯＲＥ（Ｂ）２０８との２つのプロセッサコアで構成され、それぞれに対してシリアルポートによる端子出力があり、それぞれが、制御ユニット（Ａ）２０５と制御ユニット（Ｂ）２０６とに接続される。また、制御ユニットからはそれぞれコンピュータシステムＰＣ（Ａ）２０１、ＰＣ（Ｂ）２０２上のデバッガ（Ａ）２０３、デバッガ（Ｂ）２０４に接続される。
【０００５】
また、別のシステムとしては、複数のプロセッサコアが一組のシリアルポートで接続され、その出力端子に、制御ユニットを介して、コンピュータシステム上のサーバアプリケーションと、デバッグ対象コアに対する複数のデバッガアプリケーションとが起動し、デバッグ装置を構成するものが存在する。図２０はその構成例である。ＬＳＩ３０９がＣＯＲＥ（Ａ）３０７とＣＯＲＥ（Ｂ）３０８とで構成され、それぞれがＪＴＡＧ方式等のシリアルチェーンで接続され、ＬＳＩ３０９からは１組のシリアルポートの端子出力があり、制御ユニット３０６に接続される。制御ユニット３０６へはマスターとなるコンピュータシステムＰＣ（Ａ）３０１が接続され、そのコンピュータシステムＰＣ（Ａ）３０１上でサーバアプリケーション３０５が制御ユニット３０６との間でのデータの送受信を行う。サーバアプリケーション３０５は、そのコンピュータシステムＰＣ（Ａ）３０１で起動するデバッガ（Ａ）３０３、またはネットワーク接続されたリモートコンピュータシステムＰＣ（Ｂ）３０２上のデバッガ（Ｂ）３０４からアクセスすることができる。
【０００６】
【発明が解決しようとする課題】
しかしながら、前記図１９の従来例にあるデバッグ装置は、複数のプロセッサコア２０７、２０８をデバッグするために、これらプロセッサコア２０７、２０８に対応した複数組のコンピュータシステム２０１、２０２と制御ユニット２０５、２０６とが必須となる。プロセッサコアが少数の場合には問題は少ないかもしれないが、多数のプロセッサコアを含むＬＳＩをデバッグする環境を構築するのは困難である。さらに、ＬＳＩの微細化により、端子数によるチップ面積制限が大きな課題となっている中で、ＬＳＩ３０９からデバッグ対象のプロセッサコア分のデバッグ用端子を個別に出力する必要があるため、チップ面積が大きくなってしまい、さらにチップのコストアップにも繋がるという課題がある。
【０００７】
また、前記図２０の従来例にあるデバッグ装置は、前記図１９の従来例のような複数組のデバッグシステムやＬＳＩからの出力端子は必要とはしないが、デバッガ３０３、３０４とプロセッサコア３０７、３０８とのデータのやり取りをサーバアプリケーション３０５を中継して行うため、デバッガの応答速度が遅くなるという課題がある。また、複数のプロセッサコアに対してデバッグを行う場合には、それに対応した複数のコンピュータシステムが必要であるという課題もある。
【０００８】
本発明は上記従来の問題点を解決するもので、最小限のテストシステムと端子数で構成可能であり、かつ、高速に実行可能である、複数プロセッサコアデバッグ環境を実現することを目的とする。
【０００９】
【課題を解決するための手段】
上記の目的を達成するため、本発明では、ＬＳＩの複数プロセッサコアのそれぞれに対し、コンピュータシステム上で動作するデバッグ用のコマンドの入出力機能を備えたデバッガでデバッグするシステムに関して、それぞれのデバッガからアクセス可能である共有メモリを備え、任意のデバッガよりＬＳＩへデバッグ命令が送信されるコマンドを発行する前に、共有メモリを参照して、この共有メモリの内容によってハードアクセス権を取得した場合に限り、ハードアクセスを開始し、その間、他のデバッガがコマンドを発行する場合にもその共有メモリの内容で判断して、アクセス権が取得できなければ、ハードアクセスを行わない。これにより、従来のようなサーバアプリケーションを用いずとも、高速に複数プロセッサコアのデバッグを行うことが可能となる。
【００１０】
このため、本発明にかかるデバッグ装置は、複数存在する任意のデバッガよりコマンドを発行する場合に、共有メモリ中の内容を参照して、その内容によってハードアクセス権を取得するかもしくはハードアクセスを取得できずに回避する調停部を備えたことを特徴とする。
【００１１】
この構成によれば、複数プロセッサコアのデバッグを行う場合に、１つのコンピュータシステムでそれぞれのプロセッサコアに対する複数デバッガを起動し、デバッグを高速に行うことができる。また、１つのコンピュータシステムと１つの制御ユニットという最小限のシステムで複数プロセッサコアをデバッグすることが可能である。また、デバッグ装置に新たにデバッガを追加する場合にも、共有メモリへのアクセス処理部を追加するだけで済むため、デバッガの対応工数が軽減される。
【００１２】
また、本発明のデバッグ装置は、共有メモリに、任意のデバッガがハードアクセス権を取得した場合に、そのデバッガの名称を格納する送信デバッガ名格納部を備えることが好ましい。
【００１３】
この構成によれば、アクセス権が取得できないデバッガから送信デバッガ名格納部を参照することにより、現在ハードアクセス中のデバッガが何であるのかを確認することが可能である。また、デバッグ対象のプロセッサコアに対してコマンドを発行するごとに、シリアル接続された複数プロセッサコアへどのプロセッサコアをバイパスするか否かの情報を送る必要があるが、送信デバッガ名格納部を参照して、前回と同じデバッガがアクセスしようとする場合はバイパス情報を送る必要がなくなるため、より高速にコマンド実行を行うことが可能となる。
【００１４】
さらに、本発明のデバッグ装置は、２つのデバッガを起動している場合に、一方のデバッガから他方のデバッガに対してコマンドを発行したい場合に、そのコマンドを格納できるコマンド格納部を備えることが好ましい。
【００１５】
この構成によれば、一方のデバッガから他方のデバッガに対してコマンド操作行うことが可能となる。例えば、任意のデバッガから他のデバッガに対して実行や強制ブレークなどの操作を行うことが可能となる。
【００１６】
また、本発明のデバッグ装置は、２つ以上のデバッガを起動している場合に、一つのデバッガから、ある特定のデバッガに対するコマンドを発行したい場合に、そのコマンド受信先であるデバッガ名を格納できる受信デバッガ名格納部を備えることが好ましい。
【００１７】
この構成によれば、一つのデバッガからある特定のデバッガに対してコマンド操作を行うことが可能となる。例えば、任意のデバッガからある特定のデバッガに対して実行や強制ブレークなどの操作を行うことが可能となる。
【００１８】
また、本発明のデバッグ装置は、コマンドを実行した結果を格納するコマンド結果格納部を備えることが好ましい。
この構成によれば、一つのデバッガからある特定のデバッガに対してコマンドを操作した結果を他方のデバッガから参照することが可能となる。例えば、任意のデバッガからある特定のデバッガのメモリ内容を参照したり、変更したりすることも可能になる。
【００１９】
また、本発明のデバッグ装置は、コマンドを優先的に実行する優先調停部を備えることが好ましい。
この構成によれば、優先度の高いコマンド要求に対するコマンド実行がリアルタイムで可能であり、効率的なデバッグが可能である。
【００２０】
また、本発明のデバッグ装置は、制御ユニットの複数デバッガ共通のレジスタ情報を任意のデバッガが格納する制御ユニット情報格納部を、共有メモリに備えることが好ましい。
【００２１】
すなわち従来では、制御ユニットの複数デバッガで使用されるレジスタに関して、任意のデバッガがそのレジスタを参照し、かつすぐにその値をクリアしなければならない場合に、その参照したデバッガのみでしかそのレジスタの情報を知ることができなかった。しかし、この構成によれば、レジスタ内容を参照したデバッガが共有メモリ中の制御ユニット情報格納部にその共通レジスタ情報を格納することで、その他のデバッガからでもそのレジスタ情報を参照することが可能となる。
【００２２】
また、上記の目的を達成するために、本発明にかかるデバッグプログラムは、コマンドを読み込んで、前記コマンドがハードアクセスコマンドか否かを判断するステップと、ハードアクセス権を取得できるか否かを判断するために共有メモリの調停部のメモリ内容を参照するステップと、ハードアクセス権が取得可能な場合に調停部のメモリ内容を変更するステップと、コマンドを実行するステップと、コマンド実行が終了した場合に調停部のアクセス権を放棄するために調停部のメモリ内容を参照してその内容を再び変更するステップとを含む処理をコンピュータシステムに実行させるものであることを特徴とする。
【００２３】
このデバッグプログラムをコンピュータシステムに実行させることにより、本発明にかかるデバッグ装置を実現できる。
本発明では、前記デバッグプログラムが、調停部にアクセスする処理に加えて、調停部を参照するステップにおいて、ハードアクセス権を取得した場合に、送信デバッガ名格納部にハードアクセス権を取得したデバッガ名を設定するステップと、ハードアクセス権を取得できなかった場合に、送信デバッガ名格納部を参照するステップと、ハードアクセス権を放棄する場合に送信デバッガ名格納部をクリアするステップとを含む処理をコンピュータシステムに実行させるものであることが好ましい。
【００２４】
さらに本発明では、前記デバッグプログラムが、デバッガの起動数が２つの場合に、調停部にアクセスする処理に加え、一方のデバッガから他方のデバッガに対してコマンド実行を行うため、コマンド格納部にコマンド設定を行うか否か判断するステップと、コマンド設定を行うと判断した場合にコマンド格納部にコマンドを格納するステップと、コマンド格納部のメモリ内容がクリアされるまでループ処理するステップと、コマンド入力を行わない場合に、共有メモリのコマンド格納部にデータが設定されているか否かを一定周期ごとに確認するステップと、コマンド格納部にデータが設定されていると判断された場合に他方のデバッガでコマンドを実行するステップと、コマンドが終了した場合にコマンド格納部の内容をクリアするステップと、コマンド格納部がクリアされたときにループ処理を抜けるステップとを含む処理をコンピュータシステムに実行させるものであることが好ましい。
【００２５】
さらに本発明では、前記デバッグプログラムが、デバッガの起動数が２つ以上の場合に、調停部にアクセスする処理とコマンド設定部にアクセスする処理に加え、任意のデバッガからある特定のデバッガにコマンドを発行するため、コマンドを実行する特定のデバッガ名を受信デバッガ名格納部に格納するステップと、共有メモリの受信デバッガ名に設定されているデータが自分自身のデバッガ名であるか否かを一定周期で判断するステップと、受信デバッガで一致すると判断された場合にコマンド格納部のコマンドを実行するステップと、ハードアクセス権を放棄する場合に受信デバッガ格納をクリアするステップとを含む処理をコンピュータシステムに実行させるものであることが好ましい。
【００２６】
さらに本発明では、前記デバッグプログラムが、調停部にアクセスする処理とコマンド設定部にアクセスする処理と受信デバッガ名格納部にアクセスする処理とに加え、任意のデバッガからある特定のデバッガにコマンド実行を行い、その結果を格納するため、コマンド格納部のコマンドを実行するステップの次にコマンド結果格納部にコマンド結果を格納するステップと、任意のデバッガよりコマンド結果格納部を参照するステップと、ハードアクセス権を放棄する場合にコマンド格納部をクリアするステップとを含むものであることが好ましい。
【００２７】
さらに本発明では、前記デバッグプログラムが、調停部にアクセスする処理に加え、優先的にコマンド実行するために、優先実行可能か否か判断する目的で優先調停部を参照するステップと、優先調停部で実行可能な場合に優先調停部に優先実行を設定するステップと、優先実行を終了する場合に優先調停部の優先実行をクリアするステップとを含むものであることが好ましい。
【００２８】
本発明のデバッグプログラム記憶媒体は、上記のデバッグプログラムうちの少なくともいずれか一つを記録したものであることを特徴とする。
また本発明のデバッグ装置は、複数デバッガそれぞれに対し、シリアル接続されたデバッグ対象となる複数プロセッサコアの前後に繋がるプロセッサコアが持つインストラクションレジスタ（ＩＲ）とデータレジスタ（ＤＲ）を定義するＩＤ情報設定部を備えることが好ましい。
【００２９】
すなわち従来では各デバッガで一意にシリアル接続された複数プロセッサコアの接続情報を持つことで対応していたが、この構成によれば、ＩＤ情報定義部にＩＲとＤＲの前後に繋がるプロセッサコアのＩＲおよびＤＲを設定するだけで、汎用的にどんな接続を後から追加しても、ＩＤ情報設定部を変更するだけで、デバッグ対象のプロセッサコアに対する命令を発行することが可能となる。
【００３０】
さらに本発明では、ＩＤ情報を格納する制御ユニットのＩＤ情報格納部と、複数プロセッサコアに対する送信コードを作成するためのコード自動生成部とを備えることが好ましい。
【００３１】
この構成によれば、従来はデバッグ用命令を各デバッガで複数プロセッサ分を生成して制御ユニットを介して送信していたものが、デバッグ対象のプロセッサコアに対するデバッグ命令のみを送信すれば、制御ユニットでＩＤ情報から目的のターゲットシステムに繋がるシリアル接続されたプロセッサコアに対する命令コードを自動生成し、そのコードをターゲットシステムへ送信することで、従来と同じように、デバッグ命令を送信可能となる。しかも、このデバッグ装置の構成では、コンピュータシステムと制御ユニットとの通信に関し、ＩＤ情報と対象となるプロセッサコア以外の命令コードを毎回送信しなくても済むため、高速にデバッグ応答を実現できる。
【００３２】
また本発明のデバッグ装置においては、制御ユニット中にモニタ命令格納部を備えることが好ましい。
すなわち従来では、ホストとなるコンピュータシステムからモニタ用のコードを１命令ずつシリアルポートを通じて入力させる方法であったが、ホストインターフェースの転送速度が原因となり、デバッガ全体の応答速度が遅くなるという問題点があった。また、例えば、デバッガがブレークした場合などに送られるモニタコード命令群は決まって一緒である。そのため本発明では、ブレーク直後に送られる命令群を制御ユニットのモニタ命令格納部に設定することで、ブレーク直後の命令のやりとりは制御ユニットおよびプロセッサ間の転送となるため、ホストインターフェース間の転送量を抑えることが可能となり、高速に命令を実行することができる。
【００３３】
また本発明によれば、複数デバッガはただ唯一のコンピュータシステム上で動作することが好ましい。
この構成によれば、最小限のテストシステムでデバッグ環境を構築することが可能となる。すなわち、ノートパソコンなどのような省スペースで軽量なコンピュータシステムと、制御ユニットとさえあれば、ターゲットシステムをデバッグすることが可能となる。
【００３４】
【発明の実施の形態】
以下、本発明の実施の形態を図面に基づいて説明する。
本発明の実施の形態にかかるデバッグ装置は、ＬＳＩが複数プロセッサコアからなり、それぞれのプロセッサコアがシリアル接続され、ＬＳＩから１組のみデバッグ用の出力端子が出力されるターゲットシステムにおいて、それぞれのプロセッサコアを、コンピュータシステム上で動作するとともにデバッグ用のコマンドの入出力機能を備えたデバッガでデバッグするシステムであることを前提とする。また、そのデバッガは、ターゲットシステム上で動作するプログラムをデバッグするために、プログラムの実行、停止（ブレーク）、ステップ実行機能、またデータ、レジスタ、スタックの参照または変更機能などを備えているものとする。
【００３５】
図１は、本発明の実施の形態にかかるデバッグ装置の概略構成を示すブロック図である。このデバッグ装置において、コンピュータシステム１０１上でデバッガ（Ａ）１０２とデバッガ（Ｂ）１０３が起動し、共有メモリ１０４が作成される。デバッガ（Ａ）１０２およびデバッガ（Ｂ）１０３からのコマンドは、制御ユニット１０５を介してＬＳＩ１０８へ送られる。ＬＳＩ１０８では、デバッガ（Ａ）１０２のデバッグ対象となるプロセッサコア（Ａ）１０６と、デバッガ（Ｂ）１０３のデバッグ対象となるプロセッサコア（Ｂ）１０７とがシリアルチェーンで接続され、ＬＳＩ１０８から一組のデバッグ用端子が出力される。このようにデバッグ用端子は１組だけのため、コンピュータシステム１０１上で起動している複数のデバッガ１０２、１０３のうち、制御ユニット１０５を介してＬＳＩ１０８へハードアクセスを行うことが可能なのは、ただ１つのデバッガのみとなる。
【００３６】
図９は、図２のように共有メモリ１０４の内部に調停部４０１が存在する場合に、任意のデバッガが共有メモリ１０４へアクセスする方法を示したフローチャートである。
【００３７】
まず、コマンド入力ステップＳ１０１でデバッガ１０２、１０３がコマンドを入力する（なお、以下の説明では、簡単のため、「ステップ」を単に「Ｓ」と略記するだけにとどめる）。Ｓ１０２では、Ｓ１０１において入力されたコマンドがハードアクセスを伴う命令（ハードアクセス命令）か否かをチェックする。Ｓ１０２の判定結果がＹＥＳであれば、次のＳ１０３において、図２の共有メモリ１０４の調停部４０１にアクセスを行い、この調停部４０１にある調停フラグの状態を判定する。調停フラグがＯＮであり、他のデバッガがハードアクセス状態であると判断した場合は、Ｓ１０１に戻る。調停フラグがＯＦＦであり、他のどのデバッガもハードアクセス状態でないことが判断できたら、Ｓ１０４で調停フラグの値をＯＮに設定する。これによりハードアクセスコマンドが許可されたので、次のＳ１０５ではハードアクセスを開始する。コマンドの実行が終了したら、Ｓ１０６で調停フラグの状態を判定する。調停フラグがＯＮであれば、Ｓ１０７で調停フラグをＯＦＦに設定し、ハードアクセスの終了手続きをする。なお、Ｓ１０２において、Ｓ１０１で入力されたコマンドが、ハードアクセスを伴わない命令である場合すなわちハードアクセス命令でない場合は、そのままＳ１０５でその命令を実行し、Ｓ１０６で調停フラグがＯＦＦであれば、そのままハードアクセスの終了手続きをとる。以上の動作を繰り返すことで、複数プロセッサコアのＬＳＩに対するデバッグが可能となる。
【００３８】
図１０は、図３のように共有メモリ１０４の内部に調停部５０１と送信デバッガ名格納部５０２とが存在する場合に、任意のデバッガが共有メモリへアクセスする方法を示したフローチャートである。
【００３９】
まず、デバッガがコマンド入力ステップＳ２０１でコマンドを入力する。また、Ｓ２０２では、Ｓ２０１により入力されたコマンドがハードアクセス命令か否かをチェックする。Ｓ２０２の判定結果がＹＥＳであれば、次のＳ２０３において、共有メモリにアクセスを行い、共有メモリ中の調停フラグの状態を判定する。Ｓ２０３において、調停フラグがＯＮであれば、その他のデバッガがハードアクセス命令を実行中であることを示す。よって、Ｓ２０５で共有メモリ中の送信デバッガ名格納部５０２を参照して、どのデバッガがハードアクセスを行っているかを確認したうえで、ステップＳ２０１に戻る。また、Ｓ２０３において調停フラグがＯＦＦであり、他のどのデバッガもハードアクセス状態でないことが判断できたら、Ｓ２０４で調停フラグの値をＯＮに設定する。次のＳ２０６では、ハードアクセスを開始したデバッガが自分自身のデバッガ名を図３の送信デバッガ名格納部５０２に格納する。次のＳ２０７では、ハードアクセスコマンドが許可されたので、ハードアクセスを開始する。コマンドの実行が終了したらＳ２０８で調停フラグの状態を判定する。調停フラグがＯＮであれば、Ｓ２０９で調停フラグをＯＦＦに設定し、Ｓ２１０で送信デバッガ名をクリアし、ハードアクセスの終了手続きをする。なお、Ｓ２０２において、Ｓ２０１で入力されたコマンドが、ハードアクセスを伴わない命令である場合すなわちハードアクセス命令でない場合は、そのままＳ２０７でその命令を実行し、Ｓ２０８で調停フラグがＯＦＦであれば、そのままハードアクセスの終了手続きをとる。
【００４０】
このように、送信デバッガ名格納部５０２にアクセス権を取得したデバッガ名を格納するので、複数のデバッガが起動している状態で、アクセス権が取れないような場合に、どのデバッガがアクセスしているかという情報について、アクセス権を取得できないデバッガ側から参照することができる。
【００４１】
図１１は、図４のように共有メモリ１０４の内部に調停部６０１とコマンド格納部６０２とが存在する場合に、任意のデバッガが共有メモリへアクセスする方法を示したフローチャートである。
【００４２】
ここでは、デバッガが２つのみ起動してデバッグを行う場合を前提とする。まず、コマンド入力ステップＳ３０１で、デバッガがコマンドの入力開始状態か否かを確認する。コマンド入力が開始された場合には、Ｓ３０２でＳ３０１により入力されたコマンドがハードアクセス命令か否かをチェックする。Ｓ３０２の判定結果がＹＥＳであれば、次のＳ３０３において、共有メモリにアクセスを行い、共有メモリ中の調停フラグの状態を判定する。調停フラグがＯＦＦであり、他方のデバッガもハードアクセス状態でないことが判断できたら、Ｓ３０４で調停フラグの値をＯＮに設定する。Ｓ３０３において調停フラグがＯＮの場合は、Ｓ３０１に戻る。
【００４３】
次のＳ３０５では、アクセス権を取得しようとしているデバッガが他方のデバッガに対してコマンドを発行するか否かを判断する。もしコマンドを発行する場合には、Ｓ３０６で、そのコマンドを図４のコマンド格納部６０２に格納する。次のＳ３０７は、コマンド格納部６０２に設定したコマンドがクリアされたか否か判断するステップで、クリアされるまでチェックされる。他方のデバッガでコマンドが実行されるとコマンド格納部６０２がクリアされるため、次のステップであるＳ３０８に進む。このＳ３０８では、上記のコマンドの実行によってハードアクセスが終了したため、調停フラグがＯＮであるか否かを判断し、ＯＮである場合にはＳ３０９で調停フラグをＯＦＦに設定し、ハードアクセスの終了手続きをとる。Ｓ３０８において調停フラグがＯＦＦである場合には、ただちにハードアクセスの終了手続きをとる。
【００４４】
Ｓ３０１のステップでコマンド入力が開始されない場合に、共有メモリ１０４の内部のコマンド格納部６０２にデータが格納されているか否かをある一定周期で判断するステップＳ３１０において、コマンド格納されていると判断された場合は、Ｓ３１１のステップでコマンド発行を行い、コマンドを実行する。コマンド格納されていないと判断された場合は、Ｓ３０１に戻る。次のＳ３１２のステップでは、コマンド格納部６０２にデータがあるか否か判断し、データが残っている場合には、次のＳ３１３のステップで、コマンド設定部６０２をクリアして、Ｓ３０７へ進み、ハードアクセスの終了手続きをする。Ｓ３１２において、データが残っていない場合には、ただちにＳ３０７に進む。
【００４５】
Ｓ３０２において、入力されたコマンドがハードアクセス命令でない場合や、Ｓ３０５において、アクセス権を取得しようとしているデバッガが他方のデバッガに対してコマンドを発行しない場合には、Ｓ３１１でコマンド発行を行う。
【００４６】
このようにコマンド格納部６０２にコマンドを設定することで、２つのデバッガが起動している場合に限り、一方のデバッガから他方のデバッガへコマンドを送信可能となり、例えば、自分自身のデバッガより相手側のデバッガに対して、強制的に実行操作を行なったり終了動作を行なったりすることができる。
【００４７】
図１２は、図５のように共有メモリ１０４に調停部７０１とコマンド格納部７０２と受信デバッガ名格納部７０３とが存在する場合に、任意のデバッガが共有メモリへアクセスする方法を示したフローチャートである。
【００４８】
ここでは、デバッガが２つ以上起動してデバッグを行う場合を前提とする。まず、コマンド入力ステップＳ４０１で、デバッガがコマンドの入力開始状態か否かを確認する。コマンド入力が開始された場合には、Ｓ４０２でＳ４０１により入力されたコマンドがハードアクセス命令か否かをチェックする。Ｓ４０２の判定結果がＹＥＳであれば、次のＳ４０３において、共有メモリ１０４にアクセスを行い、共有メモリ中の調停フラグの状態を判定する。調停フラグがＯＦＦであり、他のどのデバッガもハードアクセス状態でないことが判断できたら、Ｓ４０４で調停フラグの値をＯＮに設定する。Ｓ４０３において調停フラグがＯＮの場合は、Ｓ４０１に戻る。
【００４９】
次のＳ４０５では、アクセス権を取得しようとしているデバッガが他のデバッガに対してコマンドを発行するか否かを判断する。もしコマンドを発行する場合には、Ｓ４０６で、そのコマンドを受信するデバッガ名を図５の受信デバッガ名格納部７０３に格納する。次にＳ４０７では、実行させたいコマンド名をコマンド格納部７０２に設定する。次のＳ４０８は、コマンド格納部７０２に設定したコマンドがクリアされたか否か判断するステップで、クリアされるまでチェックされる。他のデバッガでコマンドが実行されるとコマンド格納部７０２がクリアされるため、次のステップであるＳ４０９に進む。このＳ４０９では、ハードアクセスが終了したため、調停フラグがＯＮであるか否かを判断し、ＯＮである場合にはＳ４１０で調停フラグをＯＦＦに設定し、ハードアクセスの終了手続きをとる。Ｓ４０９において調停フラグがＯＦＦである場合には、ただちにハードアクセスの終了手続をとる。
【００５０】
Ｓ４０１でコマンド入力が開始されない場合に、共有メモリ１０４の内部の受信デバッガ名格納部７０３に自分自身のデバッガ名が格納されているか否かをある一定周期で判断するＳ４１１のステップで、自分自身のデバッガ名が格納されていると判断された場合は、Ｓ４１２のステップでコマンド発行を行い、コマンドを実行する。次に、コマンド実行が終了すると、Ｓ４１３で受信デバッガ名が設定されている場合は、Ｓ４１４で受信デバッガ格納部７０３の内容をクリアする。また、Ｓ４１５でコマンド格納部７０２にコマンドが格納されている場合は、Ｓ４１６でコマンド格納部７０２の内容をクリアして、Ｓ４０８へ進み、ハードアクセスの終了手続きをする。Ｓ４１１において、自分自身のデバッガ名が格納されていない場合は、Ｓ４０１に戻る。Ｓ４１３において、受信デバッガ名が設定されていない場合は、ただちにＳ４１５に進む。またＳ４１５において、コマンド格納部７０２にコマンドが格納されていない場合は、ただちにＳ４０８に進む。
【００５１】
このようにコマンド格納部７０２にコマンドを設定することで、あるデバッガから他の特定のデバッガへコマンドを送信可能となり、例えば、自分自身のデバッガよりある特定のデバッガに対して、強制的に実行操作を行ったり、終了動作を行ったりすることができる。
【００５２】
図１３は、図６のように共有メモリ１０４に調停部８０１とコマンド格納部８０２と受信デバッガ名格納部８０３とコマンド結果格納部８０４とが存在する場合に、任意のデバッガが共有メモリへアクセスする方法を示したフローチャートである。
【００５３】
ここでは、コマンド入力ステップＳ５０１で、デバッガがコマンドの入力開始状態か否か確認する。コマンド入力が開始された場合には、Ｓ５０２でＳ５０１により入力されたコマンドがハードアクセス命令か否かをチェックする。Ｓ５０２の判定結果がＹＥＳであれば、次のＳ５０３において、共有メモリ１０４にアクセスを行い、共有メモリ中の調停フラグの状態を判定する。調停フラグがＯＦＦであり、他のどのデバッガもハードアクセス状態でないことが判断できたら、Ｓ５０４で調停フラグの値をＯＮに設定する。Ｓ５０３において調停フラグがＯＮの場合は、Ｓ５０１に戻る。
【００５４】
次のＳ５０５では、アクセス権を取得しようとしているデバッガが他方のデバッガに対してコマンドを発行するか否かを判断する。もし、コマンドを発行する場合には、Ｓ５０６で、そのコマンドを受信するデバッガ名を図６の受信デバッガ名格納部８０３に格納する。次にＳ５０７では、実行させたいコマンド名をコマンド格納部８０２に設定する。次のＳ５０８は、コマンド格納部８０２に設定したコマンドがクリアされたか否か判断するステップで、クリアされるまでチェックされる。他方のデバッガでコマンドが実行されるとコマンド格納部８０２がクリアされるため、次のステップに進む。
【００５５】
すなわち、以上にてハードアクセスが終了したため、次のＳ５０９では、図６のコマンド結果格納部８０４を参照して、コマンドを受信したデバッガのコマンド結果のデータがあるか否かを判断し、そのデータがある場合には、Ｓ５１０でコマンド結果を参照する。参照したあとに、Ｓ５１１で、コマンド結果格納部８０４のデータをクリアする。次のＳ５１２では調停フラグがＯＮであるか否かを判断し、ＯＮである場合にはＳ５１３で調停フラグをＯＦＦに設定し、ハードアクセスの終了手続きをする。Ｓ５０９においてコマンド結果のデータがない場合には、Ｓ５１２を実行する。Ｓ５１２において調停フラグがＯＦＦである場合には、ただちにハードアクセスの終了手続をとる。
【００５６】
Ｓ５０１でコマンド入力が開始されない場合に、共有メモリ１０４の内部の受信デバッガ名格納部８０３に自分自身のデバッガ名が格納されているか否かをある一定周期で判断するＳ５１４のステップで、自分自身のデバッガ名が格納されていると判断された場合は、次のＳ５１５のステップでコマンド発行を行い、コマンドを実行する。次に、コマンド実行が終了すると、Ｓ５１６で実行結果を図６のコマンド結果格納部８０４に格納するか否かの判断を行い、格納すると判断された場合にはＳ５１７でコマンド結果を格納する。
【００５７】
次に、Ｓ５１８で受信デバッガ名が設定されている場合は、Ｓ５１９で受信デバッガ格納部８０３の内容をクリアする。また、Ｓ５２０でコマンド格納部８０２にコマンドが格納されている場合は、Ｓ５２１でコマンド格納部８０２の内容をクリアして、Ｓ５０８へ進み、ハードアクセスの終了手続きをする。Ｓ５１４において、自分自身のデバッガ名が格納されていない場合は、Ｓ５０１に戻る。Ｓ５１６において、実行結果を図６のコマンド結果格納部８０４に格納しない場合は、ただちにＳ５１８に進む。またＳ５１８において、受信デバッガ名格納部８０３に受信デバッガ名が設定されていない場合は、ただちにＳ５２０に進む。さらにＳ５２０において、コマンド格納部８０２にコマンドが格納されていない場合は、ただちにＳ５０８に進む。
【００５８】
このようにコマンド格納部８０２にコマンドを設定することで、一つのデバッガから他の特定のデバッガへコマンドを送信可能となり、さらにコマンドの実行結果も、送信したデバッガ側から参照することができる。例えば、自分自身のデバッガより、ある特定のデバッガに対して、あるメモリの内容を参照、変更したりすることができる。また、ステップ実行させたあとの内容などを参照することも可能である。
【００５９】
図１４は、図７のように共有メモリ１０４に調停部９０１と優先調停部９０２とが存在する場合に、任意のデバッガが共有メモリへアクセスする方法を示したフローチャートである。
【００６０】
ここでは、デバッガがコマンド入力ステップＳ６０１においてコマンドを入力する。次のＳ６０２で共有メモリ１０４にアクセスを行い、共有メモリ１０４の中の優先フラグの状態を判定する。優先フラグがＯＦＦであり、他のどのデバッガも優先実行していないことが判断できたら、Ｓ６０３で共有メモリにアクセスを行い、共有メモリ中の調停フラグの状態を判定する。調停フラグがＯＦＦであって、他のどのデバッガもハードアクセス状態でないことが判断できたなら、Ｓ６０４で調停フラグの値をＯＮに設定する。Ｓ６０２において優先フラグがＯＮである場合と、Ｓ６０３において調停フラグがＯＮである場合とには、Ｓ６０１に戻る。
【００６１】
次のＳ６０５ではコマンド入力を優先的に実行するか否かを判断し、優先実行する場合は、Ｓ６０６で図７の優先調停部９０２において優先フラグをＯＮ設定し、Ｓ６０７でコマンド実行を行う。Ｓ６０５においてコマンド入力を優先的に実行しない場合は、ただちにＳ６０７でコマンド実行を行う。コマンドの実行が終了したら、Ｓ６０８でもう一度優先的にコマンドを実行するか否かの判断を行い、優先実行する場合はＳ６０９でコマンド入力の実行を繰り返し、Ｓ６０７でこれを一つ実行するごとにＳ６０８で優先実行するか否かを判断する。
【００６２】
優先実行を終了すると、Ｓ６１０で優先フラグの設定がＯＮであるか否かを判断し、ＯＮである場合には、Ｓ６１１で優先フラグをＯＦＦとする。また、Ｓ６１２で調停フラグがＯＮであるか否かを判断し、ＯＮである場合には、Ｓ６１３で調停フラグをＯＦＦとしてハードアクセスの終了手続きをとる。なお、Ｓ６１０で優先フラグの設定がＯＦＦである場合には、ただちにＳ６１２に進み、またＳ６１２で調停フラグがＯＦＦである場合には、ただちにハードアクセスの終了手続きをとる。このように優先調停部９０２に設定を行うことで、コマンド実行を優先的に行うことが可能である。
【００６３】
図１５は、図８のように共有メモリ１０４の内部に調停部１００１と制御ユニット情報格納部１００２とが存在する場合に、任意のデバッガが共有メモリへアクセスする方法を示したフローチャートである。
【００６４】
ここでは、デバッガがコマンド入力ステップＳ７０１においてコマンドを入力する。次に、Ｓ７０２で、共有メモリ１０４の中の制御ユニット情報格納部１００２にデータが格納されているか否かを判定する。格納されている場合には、Ｓ７０３で制御ユニット情報を参照したうえで、処理を終了する。
【００６５】
Ｓ７０２で、制御ユニット情報格納部１００２にデータが格納されていなければ、Ｓ７０４でＳ７０１で入力されたコマンドがハードアクセス命令か否かをチェックする。Ｓ７０４の判定結果がＹＥＳであれば、次のＳ７０５において、共有メモリ１０４にアクセスを行い、共有メモリ１０４中の調停部１００１における調停フラグの状態を判定する。調停フラグがＯＦＦであり、他のどのデバッガもハードアクセス状態でないことが判断できたら、Ｓ７０６で調停フラグの値をＯＮに設定する。これによりハードアクセスコマンドが許可されたので、次のＳ７０７では、ハードアクセスを開始する。なお、Ｓ７０４において、Ｓ７０１で入力されたコマンドがハードアクセス命令でなかった場合はただちにＳ７０７に進み、またＳ７０５において調停フラグがＯＮであった場合はＳ７０１に戻る。
【００６６】
Ｓ７０７のコマンドの発行の終了が確認されたら、Ｓ７０８で、制御ユニットの複数デバッガに共通のレジスタ情報が格納されているか否かを判断する。Ｓ７０８で格納されていると判断された場合は、Ｓ７０９で、その共通レジスタ情報を図８の制御ユニット情報格納部１００２に格納する。次のＳ７１０では調停フラグがＯＮであるか否かを判断し、ＯＮである場合にはＳ７１１で調停フラグをＯＦＦに設定し、ハードアクセスの終了手続きをとる。なお、Ｓ７０８でレジスタ情報が格納されていない場合には、ただちにＳ７１０に進み、またＳ７１０で調停フラグがＯＦＦである場合には、ただちにハードアクセスの終了手続きをとる。
【００６７】
このように、制御ユニット中にある共通レジスタ情報を任意のデバッガが参照したあと、クリアしなければならない場合でも、共有メモリの制御ユニット情報格納部にそのレジスタ情報を格納することで、その他のデバッガでもその情報を参照することが可能となる。
【００６８】
次に、図１６を用いて、複数のデバッガのそれぞれに対し、シリアル接続された複数プロセッサコアのうちの、デバッグ対象となるプロセッサコアの前後に繋がるプロセッサコアが持つＩＲ（インストラクションレジスタ）とＤＲ（データレジスタ）とを定義して利用する場合について説明する。
【００６９】
デバッグ用のインターフェースとして複数プロセッサコアをシリアル接続するが、通常では、ＪＴＡＧインターフェースと呼ばれるインターフェースによってデバッグ機能を実現している。ここでは、そのＪＴＡＧを用いた場合について説明する。デバッグ対象のコアの前後には、他のプロセッサコアがシリアルでスキャンチェイン接続されている。よって、特定のコアに対してアクセスするためには、その前後のプロセッサコアをバイバスしてアクセスする必要がある。
【００７０】
従来においては、任意のデバッガは、そのデバッグ対象となるプロセッサコアの前後のプロセッサコアの接続情報を、内部で直接保持していた。よって、接続の順番を変更する場合や、新たにプロセッサコアを追加する場合には、そのために前記デバッガを修正し直す必要があった。
【００７１】
これに対し、図１６では、デバッガ２００１にＩＤ情報設定部２００４を設定する。そのＩＤ情報設定部２００４にはデバッグ対象コアの前後に繋がるＩＲとＤＲのレジスタビット数を設定する。つまり、ここでは、ＬＳＩ２０１３のプロセッサＡ２０１４、プロセッサＢ２０１５、プロセッサＣ２０１６がＪＴＡＧインターフェースによってシリアル接続されているとする。プロセッサＡ２０１４はＩＲビット長が６であるとともにＤＲビット長が１であり、プロセッサＢ２０１５はＩＲビット長が４であるとともにＤＲビット長が６であり、プロセッサＣ２０１６はＩＲビット長が３であるとともにＤＲビット長が１である。そして、デバッガ２００１でプロセッサＢ２０１５をデバッグすると仮定すると、ＩＤ情報設定部２００４にはプロセッサＢ２０１５の前後に繋がるＩＲとＤＲを設定する。つまり、ＪＴＡＧの入力側となるＴＤＩのＩＲ−ＩＮ２００５にはプロセッサＡ２０１４のＩＲビット長となる６を設定する。また、ＤＲはバイパスするため、ＤＲ−ＩＮ２００７にはプロセッサＡ２０１４のＤＲビット長となる１を設定する。次に、プロセッサＢ２０１５の出力側となるＴＤＯのＩＲ−ＯＵＴ２００６にはプロセッサＣ２０１６のＩＲビット長となる３を設定する。ＤＲはバイパスするため、ＤＲ−ＯＵＴ２００８にはプロセッサＣ２０１６のＤＲビット長となる１を設定する。
【００７２】
デバッガ２００１では、ＩＤ情報設定部２００４におけるこれらの内容をＩＤ情報格納部２００３へ格納し、さらにこれをＩＤ情報送信部２００２から制御ユニット２００９へ送信する。そして前記ＩＤ情報を制御ユニット２００９のＩＤ情報受信部２０１２で受信し、受信したＩＤ情報をＩＤ情報格納部２０１１へ格納する。ＬＳＩ２０１３へはバイパスするプロセッサコアを含めシリアル送信するため、コード自動生成部２０１０において、ＩＤ情報受信部２０１２で受信したバイパスするためのＩＲとＤＲ情報をもとに、ＬＳＩ２０１３へ送信するためのコードを生成する。そして、このように生成したコードをＬＳＩ２０１３へ送信することで、デバッグ対象のプロセッサＢ２０１５に対する命令コードを送信し、その結果を得ることができる。
【００７３】
したがって、デバッガ２００１のＩＤ情報設定部２００４にデバッグ対象プロセッサＢ２０１５の前後に繋がるＩＲとＤＲのレジスタビットを設定するだけで、汎用的にどんな接続を後から追加しても、ＩＤ情報設定部２００４を変更するだけで、デバッグ対象のプロセッサＢ２０１５に対する命令を発行することが可能となる。
【００７４】
また、制御ユニット２００９へ一度だけＩＤ情報を設定し、この制御ユニット２００９における命令コードの自動生成部２０１０により命令コードを生成することで、コンピュータシステムと制御ユニット２００９との間のデータ送信はデバッグ対象プロセッサに対するＩＲとＤＲデータを送信するだけで済み、このため送信データ量を削減することが可能となる。よって、さらに高速に実行することができる。
【００７５】
図１７を参照して、デバッガから送信されるモニタ命令を一括して送るデバッグ装置について説明する。デバッグ情報を得るためにはデバッガから制御ユニットを介してＬＳＩへ命令を送信するが、その命令に関して、例えば、ブレーク直後にＬＳＩへ送られるものは、毎回決まって同じ命令列である。その命令列をデバッガ３００１の一括命令データに設定する。次に、起動時などにモニタ命令送信部３００２でモニタ命令格納部３００３のモニタ命令を制御ユニット３００４へ１度だけ送信する。前記モニタ命令は制御ユニット３００４のモニタ命令受信部３００５で受信され、モニタ命令格納部３００７に格納される。次に、デバッグ対象のプロセッサコアがブレークしたときには、モニタ命令格納部３００７のデータがモニタ命令送信部３００６からＬＳＩ３００８へ送信される。ＬＳＩ３００８は、プロセッサＡ３００９、プロセッサＢ３０１０、プロセッサＣ３０１１を有する。
【００７６】
すなわち、従来ではホストとなるコンピュータシステムからモニタ用のコードを１命令ずつシリアルポートを通じて入力する必要があったが、このデバッグ装置によると、ブレーク直後の命令のやりとりは制御ユニットおよびプロセッサ間の転送となるため、ホストインターフェース間の転送量を抑えることが可能となり、高速に命令を実行することができる。
【００７７】
以下では、図９から図１５に示したフローチャートをもとに、代表的なコマンド操作の詳細な処理例について説明する。図１８に示す１）から４）の要求に対して前記フローチャートで解析例を示しながら説明する。ターゲットシステムにＡ、Ｂ、Ｃのプロセッサコアが存在するとし、１つのコンピュータシステム上に、プロセッサコアに対応したＡ、Ｂ、Ｃの各デバッガが起動しているとする。そのときに、まず、１）デバッガＣがＲＵＮ状態であり、デバッガＡからデバッガＣに対して強制ブレークを発行する場合について説明する。
【００７８】
まず、デバッガＡは図１２のＳ４０１で強制ブレークのコマンドを入力する。それに対し、Ｓ４０２で強制ブレークコマンドがハードアクセスコマンドか否かを判断し、ハードアクセスコマンドであるので、次のＳ４０３のステップで調停部の調停フラグの内容を判断する。ここでは、調停フラグがＯＦＦであったとすると、Ｓ４０４で調停権を取得するため、調停フラグをＯＮに設定する。その次に、Ｓ４０５では他のデバッガに対するコマンドか否かを判断し、ここではデバッガＣに対するコマンドであるため、Ｓ４０６で受信デバッガとして「Ｃ」を図５の受信デバッガ名格納部７０３に入力する。また、Ｓ４０７でコマンド格納部７０２に「強制ブレークコマンド」を格納する。次に、Ｓ４０８では、コマンド格納部７０２の内容がクリアされない限り、ループ処理で待ち続ける。そのとき、デバッガＣではＳ４０１でコマンド入力を行っていないため、Ｓ４１１で一定時間の周期で受信デバッガ名格納部７０３のデータを確認し、デバッガＡから書き込まれた「Ｃ」を判断し、自分へのコマンドであると認識する。デバッガＣはＳ４１２で強制ブレークコマンドを発行し、デバッガＣは強制ブレークする。次に、Ｓ４１３で受信デバッガ名が「Ｃ」と格納されているので、Ｓ４１４で受信デバッガ名格納部７０３をクリアする。次に、Ｓ４１５でコマンド格納部７０２には「強制ブレークコマンド」が格納されているため、Ｓ４１６でコマンド格納部７０２をクリアする。その後は、デバッガＡがループ処理でコマンド格納部７０２がクリアされるのを待っていたため、Ｓ４１６でクリアされたのを確認し、Ｓ４０９へ進む。Ｓ４０９では、調停フラグがＯＮか否かを確認し、ＯＮとなっているため、調停フラグをＯＦＦに設定し、１）の要求を終了する。以上の処理により１）の要求を実現することが可能となる。
【００７９】
次に、２）デバッガＡからハードアクセスコマンドを発行するがアクセス権が取れない場合について説明する。
まず、図９のフローチャートにおいて、デバッガＡよりＳ１０１でハードアクセスコマンドを入力する。Ｓ１０２で、そのコマンドがハードアクセスコマンドと判定され、次にＳ１０３で調停フラグがＯＮであるか否かを判断するが、ここで、調停フラグがＯＮであると、すでにデバッガＡ以外のデバッガＢまたはデバッガＣからハードアクセスコマンドが発行されているのが分かる。この場合、Ｓ１０１へ戻り、再度、コマンド入力を行う。このフローチャートでは、アクセス権が取得できなかった場合はコマンド入力に戻るようなフローチャートにしているが、アクセス権を取得するために一定時間だけ調停部をアクセスして、アクセス権を取得できるまでループ処理で待つなどの処理も考えられる。
【００８０】
また、２）でデバッガＡがアクセス権を取得できなかったときに、デバッガＢまたはデバッガＣがアクセス権を持っていることは確認可能であるが、どちらがアクセス権を持っているかまでは知ることができない。そこで、デバッガＢまたはデバッガＣがアクセス権を取得する際には、図１０のフローチャートで、アクセス権を取得したデバッガ名を図３の送信デバッガ名設定部５０２に格納する。このとき、まずＳ２０１からコマンド入力を行い、Ｓ２０２でハードアクセスコマンドと判定され、Ｓ２０３で調停フラグがＯＦＦとなっているため、Ｓ２０４で調停権を取得し調停フラグをＯＮに設定する。次に、Ｓ２０６にて、送信デバッガ名を送信デバッガ名格納部５０２に設定し、Ｓ２０７でコマンド発行を行う。次にＳ２０８で、調停フラグがＯＮであるか否かを確認して、ＯＮであるため、Ｓ２０９で調停フラグをＯＦＦとし、Ｓ２１０で送信デバッガ名をクリアする。
【００８１】
このようにＳ２０９で調停フラグをＯＦＦとし、Ｓ２１０で送信デバッガ名をクリアするまでに、デバッガＡがハードアクセスコマンドを発行するため、Ｓ２０３で調停フラグがＯＮと判定され、Ｓ２０５において、Ｓ２０６で送信デバッガ名を設定したそのデバッガ名を参照することで、現在アクセス権を持っているデバッガがデバッガＢであるかデバッガＣであるかを判断することができる。以上の処理により２）の要求を実現することが可能となる。
【００８２】
次に、３）デバッガＡでステップ実行、メモリダンプを優先的に繰り返す場合について説明する。
図１４のフローチャートにおいて、Ｓ６０１でデバッガＡからステップ実行コマンドを入力する。次のＳ６０２では図７の優先調停部９０２の優先フラグがＯＮであるか否かを判断し、優先フラグがＯＦＦであるため、次のＳ６０３のステップで調停フラグがＯＮであるか否かを判断する。ここで、調停フラグがＯＦＦであり、他のデバッガからアクセスしていないと判断すると、Ｓ６０４で調停フラグをＯＮに設定する。次に、デバッガＡで優先的にコマンド実行を行いたいため、Ｓ６０５で優先コマンドであるとし、Ｓ６０６で優先調停部の優先フラグをＯＮに設定する。Ｓ６０７では入力したステップ実行コマンドが実行され、Ｓ６０８で優先実行を繰り返すか否かを判断させる。ここでは、デバッガＡはステップ実行とメモリダンプを繰り返すため、Ｓ６０９で再度コマンド入力を行う、この場合にはメモリダンプコマンドを入力する。このメモリダンプコマンドはＳ６０７で実行され、Ｓ６０８で優先実行を繰り返すか否か再度判定される。これを繰り返した後、Ｓ６０７で優先実行を終了する場合には、Ｓ６１０で優先フラグの状態をＯＮと確認して、Ｓ６１１で優先フラグをＯＦＦに設定する。またＳ６１２で調停フラグの状態をＯＮと確認して、調停フラグをＯＦＦに設定し、ハードアクセスを終了する。以上の処理により３）の要求を実現することが可能となる。
【００８３】
次に、４）デバッガＡからデバッガＢのメモリ内容を参照する場合について説明する。
図１３のフローチャートにおいて、まずＳ５０１でデバッガＡがコマンド入力を開始する。Ｓ５０２でそのコマンドがハードアクセスコマンドか否かを確認し、Ｓ５０３で調停フラグがＯＮか否かを判断して、ＯＦＦである場合にはＳ５０４で調停フラグをＯＮに設定する。Ｓ５０５では他のデバッガに対するコマンド発行を選択し、Ｓ５０６でコマンド発行したいデバッガ名を図６の受信デバッガ名格納部８０３に設定し、Ｓ５０７でコマンド格納部８０２に設定する。この場合はデバッガＢに対してメモリ内容を参照するコマンドを発行するため、受信デバッガ名格納部８０３には「Ｂ」と書き込み、コマンド格納部８０２にはダンプコマンドを書き込む。次に、Ｓ５０８ではコマンド格納部８０２のデータがクリアされるまで、ループ処理を行う。また、そのときデバッガＢでは、Ｓ５０１でコマンド入力を行っていないため、Ｓ５１４で受信デバッガ名格納部８０３をチェックすることを一定時間で繰り返し、自分自身のデバッガ名か否かを確認する。Ｓ５０６でデバッガＡが「Ｂ」と書き込んだ後、デバッガＢはＳ５１４でそれを確認し、Ｓ５１５でダンプコマンドを実行する。実行が終了した時点で、Ｓ５１６でコマンド結果をコマンド結果格納部８０４に書き込むか否かを判断し、Ｓ５１７でダンプコマンドの結果を書き込む。Ｓ５１８で受信デバッガの設定があるため、Ｓ５１９でデータをクリアする。またＳ５２０でコマンド格納部のデータがあるため、Ｓ５２１でコマンド格納部をクリアする。そのとき、デバッガＡではＳ５０８でループ処理を行っていたため、Ｓ５２１でコマンド格納部８０２をクリアしたことで、Ｓ５０９に進む。Ｓ５０９ではデバッガＢで実行されたダンプコマンドの結果についてコマンド結果格納部８０４を参照することで、デバッガＡからデバッガＢのコマンド実行結果を参照することが可能となる。次に、Ｓ５１２で調停フラグのＯＮを確認し、Ｓ５１３で調停フラグをＯＦＦに設定する。Ｓ５１０ではコマンド結果格納部８０４のデータを確認し、Ｓ５１１でコマンド結果格納部８０４のデータをクリアし、コマンド実行の処理を終了する。以上の処理により４）の要求を実現することが可能となる。
【００８４】
【発明の効果】
以上説明したように本発明によれば、最小限のテストシステムと端子数でデバッグ装置を構成可能である。よって１つのコンピュータシステムと１つの制御ユニットがあれば、複数プロセッサコアを含むターゲットシステムをデバッグすることが可能となるため、ターゲットシステムのフィールドテストなど、場所に拘らないデバッグが可能となる。かつ、従来のようなサーバアプリケーションを用いずとも、高速に複数プロセッサコアのデバッグが可能となる。また、複数デバッガで連携したデバッグが可能であり、複数プロセッサ間のシステム検証とソフトウェアデバッグを効率的に行うことが可能となる。
【図面の簡単な説明】
【図１】本発明の実施の形態の、共有メモリを含むデバッグ装置の構成図
【図２】本発明の実施の形態の、調停部を含む共有メモリの構成図
【図３】本発明の実施の形態の、送信デバッガ名格納部を含む共有メモリの構成図
【図４】本発明の実施の形態の、コマンド格納部を含む共有メモリの構成図
【図５】本発明の実施の形態の、受信デバッガ名格納部を含む共有メモリの構成図
【図６】本発明の実施の形態の、コマンド結果格納部を含む共有メモリの構成図
【図７】本発明の実施の形態の、優先調停部を含む共有メモリの構成図
【図８】本発明の実施の形態の、制御ユニット情報格納部を含む共有メモリの構成図
【図９】本発明の実施の形態の調停方法を示すフローチャート
【図１０】本発明の実施の形態の送信デバッガ名格納部の使用方法を示すフローチャート
【図１１】本発明の実施の形態のコマンド格納部の使用方法を示すフローチャート
【図１２】本発明の実施の形態の受信デバッガ名格納部の使用方法を示すフローチャート
【図１３】本発明の実施の形態のコマンド結果格納部の使用方法を示すフローチャート
【図１４】本発明の実施の形態の優先調停部の使用方法を示すフローチャート
【図１５】本発明の実施の形態の制御ユニット情報格納部の使用方法を示すフローチャート
【図１６】本発明の実施の形態のＩＤ情報設定部と制御ユニットのコード自動生成部とを含むデバッグ装置の構成図
【図１７】本発明の実施の形態のモニタ命令送受信部を含むデバッグ装置の構成図
【図１８】本発明の実施の形態のデバッグ装置の実行例を示すためのコマンドの一例の図
【図１９】従来のデバッグ装置の構成図
【図２０】従来の他のデバッグ装置の構成図
【符号の説明】
１０１　　コンピュータシステム
１０２　　デバッガ（Ａ）
１０３　　デバッガ（Ｂ）
１０４　　共有メモリ
１０５　　制御ユニット
１０６　　プロセッサコア（Ａ）
１０７　　プロセッサコア（Ｂ）
１０８　　ＬＳＩ
【図１】
2004021751.tif 000003
【図２】
2004021751.tif 000004
【図３】
2004021751.tif 000005
【図４】
2004021751.tif 000006
【図５】
2004021751.tif 000007
【図６】
2004021751.tif 000008
【図７】
2004021751.tif 000009
【図８】
2004021751.tif 000010
【図９】
2004021751.tif 000011
【図１０】
2004021751.tif 000012
【図１１】
2004021751.tif 000013
【図１２】
2004021751.tif 000014
【図１３】
2004021751.tif 000015
【図１４】
2004021751.tif 000016
【図１５】
2004021751.tif 000017
【図１６】
2004021751.tif 000018
【図１７】
2004021751.tif 000019
【図１８】
2004021751.tif 000020
【図１９】
2004021751.tif 000021
【図２０】
2004021751.tif 000022