(57)【要約】【課題】CPUの暴走の原因を特定することを容易に可能とするデバッグ装置を提供する。【解決手段】CPU２６を含んでバウンダリスキャンを実行可能な半導体チップ９１のデバックを行うデバッグ装置２１は、CPU２６の暴走の原因に関わるバーストリフィル監視ユニット１０７の動作出力端子を有する半導体チップ９１に対してバウンダリスキャンの実行要求を行う。さらに、デバッグ装置２１は、バウンダリスキャンの実行要求に応じて出力された半導体チップのバウンダリスキャンデータを取得し、その取得したバーストリフィル監視ユニット１０７の動作出力端子のバウンダリスキャンデータを時系列に画面上に表示させる。【選択図】図４
2009258857.tif 000002
【特許請求の範囲】
【請求項１】
CPUを含んでバウンダリスキャンを実行可能な半導体チップのデバックを行うデバッグ装置であって、
前記CPUの暴走の原因に関わる回路の動作出力端子を有する前記半導体チップに対して前記バウンダリスキャンの実行要求を行うバウンダリスキャン実行要求部と、
前記バウンダリスキャンの実行要求に応じて出力された前記半導体チップのバウンダリスキャンデータを取得するバウンダリスキャンデータ取得部と、
前記半導体チップから取得した、前記回路の動作出力端子のバウンダリスキャンデータを時系列に画面上に表示させるバウンダリスキャンデータ表示部と、
を有することを特徴とするデバッグ装置。
【請求項２】
前記回路は、バーストリフィル監視部の回路であることを特徴とする請求項１に記載のデバッグ装置。
【請求項３】
前記バウンダリスキャンデータ表示部は、前記回路以外の他の回路の端子のバウンダリスキャンデータと共に、前記回路の動作出力端子のバウンダリスキャンデータを時系列に表示することを特徴とする請求項１又は２に記載のデバッグ装置。
【請求項４】
前記バウンダリスキャン実行要求部は、JTAG対応のエミュレータを介して前記半導体チップに対して前記バウンダリスキャンの実行要求を行うことを特徴とする請求項１から３のいずれか１つに記載のデバッグ装置。
【請求項５】
CPUを含んでバウンダリスキャンを実行可能な半導体チップのデバック方法であって、
前記半導体チップに、前記CPUの暴走の原因に関わる回路の動作出力端子を設け、
デバッガが、前記半導体チップに前記バウンダリスキャンを複数回実行させ、前記バウンダリスキャンにより得られた前記動作出力端子のバウンダリスキャンデータを時系列に表示することを特徴とするデバッグ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デバッグ装置及びデバッグ方法に関し、特に、バウンダリスキャンデータを表示するデバッグ装置及びデバッグ方法に関する。
【背景技術】
【０００２】
従来より、SoC（System On Chip）等のシステム開発のためのデバッグ装置が利用されている。例えば、デバッグを行う者（以下、ユーザともいう）は、デバッグ装置に接続したエミュレータを利用して、SoC（System On Chip）のシステムのデバッグを行うことができる。SoC等のシステムにおいてプログラムを実行させ、何らかの異常が発生すると、その異常の原因を追求するためにデバッグが行われる。
【０００３】
例えば、ターゲットシステムの中央処理装置（以下、CPUという）のデータキャッシュリフィルが４ワードに設定されているとする。データリード時にキャッシュヒットしなければリフィルサイクルのバーストアクセスが発生する。このとき、４回のメモリアクセスが生じ、各アクセスに対応するACK（応答）が必要となる。
【０００４】
しかし、データキャッシュリフィルを４ワードと設定し、４回のメモリアクセスに対応する複数のACK（応答）が必要であるにも拘わらず、１回のACKのタイミングで外部デバイスが動作するという、誤った前提でターゲットシステムの設計がされてしまうと、リフィルサイクルのバーストアクセスが発生したとき、外部デバイスではバーストアクセス動作において、ACK待ち状態となってしまう。
【０００５】
このような状態になると、CPUは、キャッシュからデータを得られず、実行中のプログラムは、次の命令実行待ち状態となるため、デバッガによりデバッグすると、CPUがロック状態になっているように見える。
【０００６】
CPUがロック状態となった場合、CPUの暴走の原因を判定するために、ロジックアナライザ等の機器を利用して各種信号の波形を見ることによって行うこともできる。しかし、ロジックアナライザ等の機器を利用する方法には、非常に多くの時間がかかってしまうという問題がある。
【０００７】
デバッグ用のソフトウェアにJTAGのバウンダリスキャン機能を有するものもある（非特許文献１参照）。しかし、バウンダリスキャン結果を表示させことができるが、上述したようなCPUの暴走の判定については考慮されていない。
【非特許文献１】MITOUJTAGの特徴、URL「http://www.nahitech.com/jtag/mitoujtag.html」
【発明の開示】
【発明が解決しようとする課題】
【０００８】
そこで、本発明は、CPUの暴走の原因を特定することを容易に可能とするデバッグ装置及びデバッグ方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の一態様によれば、CPUを含んでバウンダリスキャンを実行可能な半導体チップのデバックを行うデバッグ装置であって、前記CPUの暴走の原因に関わる回路の動作出力端子を有する前記半導体チップに対して前記バウンダリスキャンの実行要求を行うバウンダリスキャン実行要求部と、前記バウンダリスキャンの実行要求に応じて出力された前記半導体チップのバウンダリスキャンデータを取得するバウンダリスキャンデータ取得部と、前記半導体チップから取得した、前記回路の動作出力端子のバウンダリスキャンデータを時系列に画面上に表示させるバウンダリスキャンデータ表示部と、を有するデバッグ装置を提供することができる。
【００１０】
本発明の一態様によれば、CPUを含んでバウンダリスキャンを実行可能な半導体チップのデバック方法であって、前記半導体チップに、前記CPUの暴走の原因に関わる回路の動作出力端子を設け、デバッガが、前記半導体チップに前記バウンダリスキャンを複数回実行させ、前記バウンダリスキャンにより得られた前記動作出力端子のバウンダリスキャンデータを時系列に表示することを特徴とするデバッグ方法を提供することができる。
【発明の効果】
【００１１】
本発明によれば、CPUの暴走の原因を特定することを容易に可能とするデバッグ装置及びデバッグ方法を実現することができる。
【発明を実施するための最良の形態】
【００１２】
以下、図面を参照して本発明の実施の形態を説明する。  
（構成）
まず図１に基づき、本実施の形態に係わるデバッグシステムの構成を説明する。図１は、本実施の形態に係わるデバッグシステムの構成を示す構成図である。図１は、ターゲットシステムのデバッグ環境の構成を示す。
【００１３】
図１に示すように、デバッグシステム１は、パーソナルコンピュータ（以下、PCという）等のコンピュータであるホストコンピュータ（以下、単にホストという）１１と、エミュレータ１２と、デバッグ対象であるターゲットCPUを搭載したターゲットシステム１３とを含んで構成されている。
【００１４】
ホスト１１には、後述するようなバウンダリスキャンデータを記憶するための記憶装置１４が接続されている。ホスト１１は、内部にデバッグ用のプログラムであるデバッガ２１を有しており、デバッグを行うユーザは、ホスト１１に接続されたキーボード、マウス等の入力装置（図示せず）を操作して、デバッガ２１を起動させて動作させることができる。デバッガ２１は、ターゲットボード１３上に構成されたターゲットシステム向けのデバッガである。ホスト１１は、表示装置２２を有し、デバッガ２１は、表示装置２２の画面上に、各種操作指示を与え、かつ後述するような各種デバッグの結果情報を表示するためグラフィカルカルユーザインターフェース（GUI）を表示する。
【００１５】
ホスト１１とエミュレータ１２は、所定の通信ライン、ここではUSBのケーブル１５により接続されている。そのため、ホスト１１とエミュレータ１２は、それぞれ、USB接続のためのインタフェースを有している。
【００１６】
エミュレータ１２は、コントローラ２３と、ホスト１１との通信インタフェースであるホストインタフェース２４と、ターゲットシステム１３との通信インタフェースであるJTAGインタフェース２５を有している。ホストインタフェース２４は、ホスト１１のインタフェース（図示せず）と、ケーブル１５を介して接続されている。コントローラ２３は、ホスト１１とターゲットボード１３を制御する。エミュレータ１２は、デバッガ２１から指示されたCPU２６内のデバッグ対象プログラムの実行を制御する機能だけでなく、ターゲットボード１３からのバウンダリスキャンデータをデバッガ２１へ送信する機能等を有するJTAG対応のエミュレータである。
【００１７】
JTAGインタフェース２５は、EJTAGコネクタユニット１６を介して、ターゲットシステム１３と接続されている。
【００１８】
ターゲットシステム１３は、ここでは、ターゲットCPU２６が搭載されたターゲットボードである。CPU２６は、デバッグサポートユニット（以下、DSUという）３１と、JTAGインタフェース３２とを含む。ターゲットシステム１３のボード上には、CPU２６のJTAGインタフェース３２用の複数の入出力端子、すなわちピンと接続され、EJTAGコネクタユニット１６に接続するためのEJTAGコネクタ３３が設けられている。従って、EJTAGコネクタ３３は、ターゲットCPU２６に内蔵されたJTAGインタフェース３２とエミュレータ１２間において信号の送受信を行うコネクタである。
【００１９】
DSU３１は、バウンダリスキャン対応のデバッグサポートユニットである。ここでは、バウンダリスキャン対応のDSU３１を内蔵するCPU２６に対する、オン・チップ・デバッグ環境において、デバッガ２１は、後述するように、バウンダリスキャンデータをエミュレータ１２経由で取得し、バウンダリスキャンデータを表示する。
【００２０】
図２は、図１のデバッガ２１の構成を示すブロック図である。デバッガ２１は、プログラム実行／停止制御部４１と、プログラム表示制御部４２と、バウンダリスキャンデータ表示部４３と、その他のデバッガ実行制御部４４とを含んで構成される。プログラム実行／停止制御部４１は、CPU２６において実行されるプログラムの実行、停止、再実行、強制停止、等を制御するプログラムである。プログラム表示制御部４２は、プログラムのソースコード表示、レジスタのデータ表示、メモリのデータ表示、トレース結果表示、等のデバッグ実行内容及び結果の表示を制御するプログラムである。バウンダリスキャンデータ表示部４３は、エミュレータ１２から取得したバウンダリスキャンデータを表示する処理を行うプログラムである。その他のデバッガ実行制御部４４は、レジスタのデータ表示、メモリのデータ表示、スタックのデータ表示、等のデバッグ実行の設定および実行を制御する処理を行うプログラムである。これらのプログラムは、ユーザの指示により実行される。
【００２１】
図３は、デバッガ画面の例を示す図である。  
デバッガ２１は種々の機能を有し、その機能に応じた表示を表示装置２２の画面上に行う。図３の画面５１は、表示装置２２の画面上に表示される。画面５１上には、各種機能の実行を指示するためのボタン、アイコン等が設けられている。画面５１上の各ボタン等は、実行指示部を構成し、各ボタン等を押すことによって、各種機能の実行を指示することができる。
【００２２】
図３の画面５１には、エミュレータ１２を介して接続されたターゲットボード１３に対して、デバッグに必要な複数のコマンドのボタンが表示されたコマンド表示部５２を有する。
【００２３】
コマンド表示部５２における「Step」は、命令をステップ毎に実行させるための機能ボタンである。「Next」は、ソースコード単位で次のソースコードを実行させるための機能ボタンである。「Go」は、プログラムの実行を指示するための機能ボタンである。「Restart」は、プログラムの実行を再スタートさせるための機能ボタンである。「Stop」は、実行中のプログラムを停止させるための機能ボタンである。「Halt」は、実行中のプログラムを強制停止させるための機能ボタンである。「Reg」は、レジスタのデータを表示させるための機能ボタンである。「Mem」は、メモリのデータを表示させるための機能ボタンである。「Remote」は、エミュレータ１２を介してターゲットボード１３のCPU２６と、ホスト１１とを接続および切断し、ホスト１１からCPU２６を遠隔で操作できるようにするための機能ボタンである。従って、「Remote」は、デバッグを行うときに最初に押される。「CPUCheck」は、後述するようにバウンダリスキャンを実行させてバウンダリスキャンデータを表示装置２２の画面上に表示させるための機能ボタンである。「Reset」は、CPU２６をリセットするための機能ボタンである。
【００２４】
図３の画面５１は、実行されるプログラムのソースコードが表示されるコード表示部５３と、コマンド実行およびエラー表示部５４とを有している。  
コード表示部５３は、ソースコードを表示し、ソースコードの各行に対応して、プログラムの行番号、所定の記号、等を併せて表示する表示領域である。黒丸５５は、ブレークポイントが設定できる行であることを示す記号である。星印５６は、プログラムが停止している行を示す記号である。  
コマンド実行及びエラー表示部５４は、機能ボタンを使わないでコマンドの実行やスクリプトファイルの実行、および発生したエラーの内容を表示するための表示領域である。図３の画面５１は、プログラムの実行を行うが、ブレークポイントでプログラムが停止しないためHaltボタンが押されて強制停止が実行され、実行中のプログラムを強制停止させたとき、コマンド実行及びエラー表示部５４に示すエラーが発生していることを示している。
【００２５】
従って、ユーザは、実行させたい機能に対応するボタンを、コマンド表示部５２の中から選択することによって、ターゲットボード１３のCPU２６のデバッグを行うことができる。
【００２６】
図４は、バウンダリスキャンデータを表示する表示画面の例を示す画面である。図３の画面上で、「CPUCheck」ボタンをマウス等でクリックすると、エミュレータ１２は、バウンダリスキャンを実行させ、バウンダリスキャンデータを取得し、デバッガ２１へバウンダリスキャンデータを出力する。そして、表示装置２２の画面上に、図４のような実行結果であるバウンダリスキャンデータが表示される。
【００２７】
図４の画面６１は、CPU２６のバウンダリスキャンセルに接続された複数の外部ピンの全てあるいは指定された一部についての所定の番号を示すピン番号欄６２と、ピン番号欄６２の各ピンに対応する、バウンダリスキャンデータを時系列に表示するステータス欄６３とを有する。
【００２８】
ステータス欄６３には、各ピンについての、０と１のステータスデータが表示され、１はHighを、０はLowを示している。ここでは、デバッガ２１から、所定の回数の、ここでは４０回の、バウンダリスキャンデータの取得要求が通信によりエミュレータ１２へ出力される。その結果、デバッガ２１は、各ピンについて、４０個のステータスデータを得る。従って、図４は、各ピン毎の時系列のバウンダリスキャンデータを示す。
【００２９】
エミュレータ１２は、デバッガ２１からのバウンダリスキャンの実行要求に応じて、ターゲットシステム１３に対してバウンダリスキャンを実行させ、得られた結果データをデバッガ２１へ送信する。
【００３０】
図５は、エミュレータ１２がデバッガ２１へ送信するときのバウンダリスキャンデータの通信パケットの構成を示す図である。通信パケット７１は、スタートコード（START）７２，シーケンスコード（SEQ）７３，データ部（DATA）７４，エンドコード（END）７５，サムコード（SUM）７６，及びナムコード（NUM）７７を含む。スタートコード（START）７２は、１バイト長を有し、パケット先頭を示すコードである。シーケンスコード（SEQ）７３は、１バイト長を有し、パケット識別とパケット番号を示すコードである。データ部（DATA）７４は、１５バイト長を有し、バウンダリスキャンデータを含むデータである。エンドコード（END）７５は、１バイト長を有し、バケットの終了を表すコードである。サムコード（SUM）は、１バイト長を有し、スタートコードからエンドコードの前までのバイトの加算値を示すデータである。ナムコード（NUM）７９は、ナムコード自体のバイト数を含む、データの総バイト数である。
【００３１】
図５に示す通信パケット７１が、バウンダリスキャンの実行結果として、エミュレータ１２からデバッガ２１へ供給される。よって、上述したように、４０回のバウンダリスキャンの実行要求、あるいはバウンダリスキャンデータの取得要求、がエミュレータ１２に指示されるので、４０個の通信パケット７１がデバッガ２１に送信される。
【００３２】
ホスト１１のデバッガ２１は、受信した複数の通信パケット７１のデータを、記憶装置１４に記憶する。  
図６は、記憶装置１４に記憶されるバウンダリスキャンデータのテーブルデータの例を示す図である。
【００３３】
１回のバウンダリスキャンデータの取得要求で、図５のデータ部７４には、複数のピンの、ここでは１１５個のピンの、ステータスデータが含まれる。例えば、１回目の実行の結果としてストアされるデータは、図６の点線で示す枠８４で囲まれた範囲のデータである。４０回の実行の結果、４０組のバウンダリスキャンデータが、テーブル８１に記憶される。テーブル８１は、ピン番号欄８２と、各ピンに対応するステータスデータが記憶されるステータス欄８３とを含む。すなわち、ステータス欄８３には、４０回分の通信パケットのデータが時系列に格納される。
【００３４】
図６に示すように、デバッガ２１は、エミュレータ１２から取得したバウンダリスキャンデータを、ピン番号と、そのピン番号に対応する、４０ビットのステータスデータとにより管理する。図４と同様に、ステータスデータにおいて、０はLowを、１はHighを示す。図６のステータス欄８３のバウンダリスキャンデータは、図４のステータス欄６３のデータと一対一で対応している。
【００３５】
次に、ターゲットシステム１３の構成について、説明する。図７は、ターゲットシステム１３の構成を示すブロック図である。ターゲットシステム１３は、上述したDSU３１及びJTAGインタフェース３２を含むCPU２６と、EJTAGコネクタ３３が搭載されたボードである。そのボード上には、さらに、メモリ８１及び周辺回路８２も搭載されている。
【００３６】
CPU２６は、SoC（System on Chip）のシステムチップ９１に含まれる。システムチップ９１は、メモリ８１を制御するメモリコントローラ９２と、周辺回路８２を制御する周辺回路コントローラ９３も含む。従って、システムチップ９１は、CPU２６を含んで、バウンダリスキャンを実行可能な半導体チップである。
【００３７】
CPU２６は、上述したDSU３１及びJTAGインタフェース３２の他に、ベースコア１０１と、メモリ管理ユニット（MMU）１０２と、データキャッシュ１０３と、命令キャッシュ１０４と、汎用レジスタ１０５と、システム制御コプロセッサレジスタ１０６と、バーストリフィル監視ユニット（以下、バーストリフィル監視部ともいう）１０７と、ライトバッファユニット１０８と、アドレスプロテクションユニット１０９と、グローバルバスインタフェースユニット１１０と、グローバルバス１１１とを含む。ベースコア１０１は、ベースとなるコアCPUである。システム制御コプロセッサレジスタ１０６は、図示しないコプロセッサを制御するためのレジスタである。CPU２６は、グローバルバスインタフェースユニット１１０を介して、グローバルバス１１１に接続されている。メモリコントローラ９２と周辺回路コントローラ９３も、グローバルバス１１１に接続されている。メモリコントローラ９２と周辺回路コントローラ９３は、それぞれ、グローバス１１１経由でコマンド等を受けて、メモリ８１と周辺回路８２の制御を行う。
【００３８】
DSU（デバッグサポートユニット）３１は、オンチップデバッグを実現するための機能ユニットであり、実行、ブレーク、シングルステップ、等のCPU２６の実行制御、レジスタ及びメモリの読み書き、等の操作を行う。
【００３９】
バーストリフィル監視ユニット１０７は、リフィルサイクルのバーストアクセスの発生、メモリアクセス回数、等の監視を行う。バーストリフィル監視ユニット１０７は、本実施の形態のCPU２６において、新たに追加された回路であり、後述するように、CPU２６の暴走の原因に関わる回路である。
【００４０】
図８は、JTAGインタフェースの構成を説明するためのブロック図である。JTAGインタフェース３２は、バウンダリスキャン機能と、DSU３１とエミュレータ１２間の通信制御機能の２つの機能をもつインタフェース回路である。バウンダリスキャンは、テストアクセスポート（以下、TAPという）を使用して、集積回路である半導体チップの内部回路のテストをするために、チップの入力あるいは出力のピンとピンとを一筆書きに接続し、テストデータを直列にシフトしながら行われるものである。
【００４１】
JTAGインタフェース３２は、ターゲットCPU２６内の内部論理回路２６ａに対してバウンダリスキャンテストを行う時に使用される複数のバウンダリスキャンレジスタ１２１と、TAP（Test Access Port）コントローラ１２２とを含んで構成される。SoCのシステムチップ９１には、CPU２６の内部論理回路２６ａと外部とを接続するための複数のピンすなわち入力あるいは出力のための端子（以下、入出力端子あるいは端子ともいう）１２３が設けられている。さらに、システムチップ９１には、バウンダリスキャンテスト用のJTAG信号用のピンすなわち入出力端子（以下、端子とも言う）１２４から１２８も設けられている。
【００４２】
端子１２４は、TDI信号の入力端子であり、端子１２５は、TMS信号の入力端子であり、端子１２６は、TCK信号の入力端子であり、端子１２７は、TDO信号の出力端子であり、端子１２８は、TRST信号の入力端子である。TMS信号は、TAPコントローラ１２２へのテストモード選択信号、すなわちテストロジックを制御する信号である。TCK信号は、TAPコントローラ１２２へのクロック信号である。TRST信号は、TAPコントローラ１２２を非同期に初期化する信号である。TDI信号とTDO信号は、それぞれ、バウンダリスキャンのための、TAPコントローラ１２２への入力信号と出力信号である。より具体的には、TDI信号は、TAPコントローラ１２２のテストロジックに命令やデータをシリアル入力するための信号である。TDO信号は、TAPコントローラ１２２のテストロジックからのデータを出力する信号である。
【００４３】
TAPコントローラ１２２は、バウンダリスキャンテスト機能を実現するための命令レジスタ１３１、バイパスレジスタ１３２、デコーダ１３３、入力インタフェース１３４、及び出力インタフェース１３５を含む。
【００４４】
JTAG信号用の端子１２４から１２８は、エミュレータ１２とのデータの送受信を行うポートである。従って、ターゲットシステム１３とエミュレータ１２との間では、５つの信号、すなわち、TCK、TMS、TDI、TDO、TRSTの各信号の送受信が行われる。
【００４５】
また、TAPコントローラ１２２は、２つのモード、すなわちバウンダリスキャン機能とデバッグサポートユニットの制御機能の２つの機能モードの制御を行う。命令レジスタ１３１は、シフトレジスタを基本とする４個のセルを含み、命令コードと、その命令コードから制御されるレジスタのデータを格納する。
【００４６】
バウンダリスキャンレジスタ１２１は、外部の端子と内部論理回路２６ａとの間に配置されたシフトレジスタである。TAPコントローラ１２２は、TDI信号用の端子１２４から入力されたデータをバウンダリスキャンレジスタ１２１へ取り込んだり、バウンダリスキャンレジスタ１２１のデータをTDO用の端子１２７にシフトアウトしたりする制御を行う。
【００４７】
バイパスレジスタ１３２は１ビット幅で、特定のテストに必要でないバウンダリスキャンチェーン内のデバイスをバイパスできるようにするためのレジスタである。
【００４８】
複数の入出力端子１２３の中には、CPU２６中に設けられたバーストリフィル監視ユニット１０７の動作をモニタするための動作出力端子すなわち動作出力ピンが含まれている。ここでは、複数の入出力端子１２３の中で、ピン番号３から５の３つの入出力端子１２３が、CPUの暴走の原因に関わる回路であるバーストリフィル監視ユニット１０７に接続された動作出力ピンある、とする。上述したように、バーストリフィル監視ユニット１０７は、リフィルサイクルのバーストアクセスの発生、メモリアクセス回数、等の監視を行う回路である。従って、バーストリフィル監視ユニット１０７が、動作していると、ピン番号３から５の３つの入出力端子１２３に信号が現れる。言い換えると、ピン番号３から５の３つの入出力端子は、バーストリフィル監視ユニット１０７の動作状態を示す端子である。
【００４９】
図９はバウンダリスキャン順序を示すテーブルデータの例を示す図である。図９は、ピン番号１から１１５まで順番にバウンダリスキャンが実行されることを示している。バウンダリスキャンを実行するピンの順序の各ビット番号１４１は、図６のバウンダリスキャンデータテーブルのピン番号８２と１対１で対応している。
【００５０】
（動作）
以下、上述したデバッグ環境におけるデバッグシステムの動作を説明する。  
上述したように、例えば、CPUでは、キャッシュミス時にデータキャッシュリフィルを４ワードと設定し、外部デバイスでは、４回のメモリアクセスに対応するACK（応答）ではなく１回のACKのタイミングで所定の処理を実行するように誤って設計していた場合、その誤った設計の結果、プログラム実行中にCPUロックが発生する場合がある。そして、そのCPUロックの原因がプログラムの暴走による場合、プログラムが暴走しているときに、CPUを強制停止しても、バーストリフィル監視ユニット１０７は動作し続ける場合がある。従って、CPUの強制停止後も、バーストリフィル監視ユニット１０７が動作していれば、ピン番号３から５の動作出力端子には、信号が現れる。
【００５１】
プログラム実行中にCPUロックが発生し、CPUが強制停止された後、ユーザがその原因を追及するために、以下のような操作が行われる。
【００５２】
ユーザは、ホスト１１を操作して、SoCのシステムチップ９１を含むターゲットシステム１３のデバッグを行う。始めに、ユーザは、デバッガ２１のプログラムを起動して、図３のデバッガ画面を表示させる。次に、図３のデバッガ画面５１のRemoteボタンを押して、ホスト１１を、エミュレータ１２を経由して、ターゲットシステム１３に接続する。そして、ユーザは、Goボタンを押して、CPU２６上で実行させる、デバッグ対象のプログラムをターゲットシステム１３にダウンロードして、そのプログラムをSoCのシステムチップ９１上で実行させる。
【００５３】
そのプログラムの実行の結果，上述した場合、CPUのロック状態が発生する。ユーザは、CPUロックが発生すると、Haltボタンを押して、CPUを強制停止することができる。そして、デバッガ画面５１のコマンド実行及びエラー表示部５４には、タイムアウトエラーが発生したことを示すメッセージが表示される。
【００５４】
タイムアウトエラーの原因を追求するために、ユーザは、図３のデバッガ画面のCPUCheckボタンを押すことによって、CPU２６にバウンダリスキャンを実行させ、得られたバウンダリスキャンデータを表示させる。
【００５５】
図１０は、バウンダリスキャンデータの取得をするときのデバッガ２１の処理の流れの例を示すフローチャートである。
【００５６】
CPUCheckボタンが押されると、図１０の処理が実行される。先ず、デバッガ２１は、エミュレータ１２へ、システムチップ９１に対してバウンダリスキャンの実行要求を行う（ステップS1）。すなわち、ステップS1は、バウンダリスキャンの実行要求を行うバウンダリスキャン実行要求部を構成する。
【００５７】
そして、デバッガ２１は、エミュレータ１２からバウンダリスキャンデータを取得したか否かを判定する（ステップS2）。バウンダリスキャンデータを取得しなければ、処理は、何もしない。バウンダリスキャンデータを取得すると、ステップS2でYESとなり、取得したバウンダリスキャンデータを記憶装置１４の所定の記憶領域にストアする（ステップS3）。
【００５８】
そして、デバッガ２１は、バウンダリスキャンデータを所定の回数分だけ取得したか否かを判定する（ステップS4）。バウンダリスキャンデータを所定の回数分だけ取得しなければ、NOとなって処理は、ステップS1へ戻る。ステップS2からS4が、システムチップ９１のバウンダリスキャンデータを取得するバウンダリスキャンデータ取得部を構成する。
【００５９】
バウンダリスキャンデータを所定の回数分だけ取得した場合は、ステップS4でYESとなり、図４のバウンダリスキャンデータの画面６１を生成し表示する（ステップS5）。ステップS5が、バウンダリスキャンデータ表示部を構成する。
【００６０】
なお、ステップS5を実行すると、デバッガ２１は、エミュレータ１２へバウンダリスキャンの実行停止要求を送信する。エミュレータ１２はEJTAGコネクタ１６経由でターゲットシステム１３のCPU２６へバウンダリスキャンテストの実行停止要求を送信する。JTAGインタフェース３２は、バウンダリスキャンテストの実行停止要求を受信すると、TAPコントローラ１２２はバウンダリスキャンテストの実行を停止し、デバックサポートユニット（DSU）モードに切替える。
【００６１】
ここで、バウンダリスキャンデータの取得をするときのエミュレータ１２の処理について説明する。図１１は、バウンダリスキャンデータの取得をするときのエミュレータの処理の流れの例を示すフローチャートである。
【００６２】
エミュレータ１２は、ホスト１１のデバッガ２１からバウンダリスキャンデータの実行要求を受信したか否かを判定する（ステップS11）。
【００６３】
エミュレータ１２が、バウンダリスキャンデータの実行要求を受信しない場合は、ステップS11でNOとなり、処理は、何もしない。エミュレータ１２が、バウンダリスキャンデータの実行要求を受信した場合は、ステップS11でYESとなり、ターゲットシステム１３へバウンダリスキャンテストの実行要求をEJTAGコネクタ１６経由で送信する（ステップS12）。
【００６４】
CPU２６のJTAGインタフェース３２では、バウンダリスキャンテストの実行要求を受信すると、TAPコントローラ１２２は、バウンダリスキャンモードに切替り、バウンダリスキャンテストを実行する。
【００６５】
ここでは、バウンダリスキャンレジスタは１１５ビット幅とする。TMS信号とTDI信号はTCK信号の立ち上がりエッジでサンプルリングされる。その結果、バウンダリスキャンレジスタが、TDI信号とTDO信号間で接続される。TDO信号はTCK信号の立ち下がりエッジでサンプリングされ、データは直列にスキャンアウトされる。図９のスキャン順序に従って、テストデータが実行される。TAPコントローラ１２２は、バウンダリスキャンレジスタ１２１のデータをEJTAGコネクタ１６経由でエミュレータ１２へ送信する。
【００６６】
エミュレータ１２は、バウンダリスキャンデータを取得したか否かを判定し（ステップS13）、バウンダリスキャンデータを取得した場合は、ステップS13でYESとなり、デバッガ２１へバウンダリスキャンデータを送信する（ステップS14）。なお、エミュレータ１２は、バウンダリスキャンレジスタ１２１のデータを受信すると、エミュレータ１２のバウンダリレジスタ（図示せず）へ格納する。エミュレータ１２は、バウンダリスキャンデータを図５の通信パケットのDATA７４のフィールドに格納し、デバッガ２１へ送信する。デバッガ２１は、その通信パケットを受信し、バウンダリスキャンレジスタ１２１のデータを図６のバウンダリスキャンデータテーブルのステータス欄８３へデータを格納する。
【００６７】
上述したように、デバッガ２１は、図６のバウンダリスキャンデータテーブルのデータが所定量だけ満たされるまで、エミュレータ１２へバウンダリスキャンデータ取得要求の送信をくり返し、バウンダリスキャンデータを取得する。デバッガ２１は、図６のバウンダリスキャンデータテーブルのデータが所定回数分だけ得られると、図４のバウンダリスキャンデータ画面６１を生成し、バウンダリスキャンデータテーブルのデータを表示装置２２の画面上に表示する。
【００６８】
以上の処理が実行されることによって、バウンダリスキャンデータを表示する図４の表示画面６１が生成される。図４に示すように、バーストリフィル監視ユニット１０７の動作出力端子のバウンダリスキャンデータは、バーストリフィル監視ユニット１０７以外の他の回路の端子のバウンダリスキャンデータと共に、時系列に表示される。
【００６９】
ユーザは、図４の画面６１を見ることにより、ピン番号３，４および５以外のピンの出力データは、すべて０（ゼロ）になっているのに対して、ピン番号３，４、および５の出力データだけが変化していることを認識する。すなわち、ユーザは、図４のバウンダリスキャンデータ画面からCPU I/O端子の状態が参照でき、ピン番号３から５に繋がる回路は、CPU２６が停止しているにもかかわらず、動作していることがわかる。ピン番号３から５は、バースリフィル監視部１０７の動作に関するデータであるので、ユーザは、CPUロックの原因が、バーストリフィルに関するもの、すなわちキャッシュミス時のリフィルに関するもの、であると判定して、CPUロックの原因の追求を容易に行える。
【００７０】
上述したように、ユーザは、図３のエラーメッセージと、図４のバウンダリスキャンデータの時系列変化とにより、CPUロックの原因が、バーストリフィルに関するものであって、タイムアウトエラーとなるものである、ということを認識することができる。その結果、ユーザは、CPUロックの原因を、CPUからのACKに関する仕様、コード等を調べる方針を立てることができる。すなわち、CPUがロックした原因、CPUタイムアウトが発生した原因の絞込みを行うことができる。
【００７１】
以上のように、上述した実施の形態にかかるデバッグシステム１によれば、エミュレータ１２を利用したSoCシステムのデバッグ環境において、デバッガ２１はバウンダリスキャンデータをエミュレータ１２経由で取得し、特に、発生したCPUの暴走の原因に関わるバウンダリスキャンデータを表示することができる。よって、CPUロック等の原因の絞込み等、デバッグの時間を短縮することができる。
【００７２】
従来であれば、プログラム実行中にCPUがロックした場合、CPUロックの原因がプログラムの問題なのか、ターゲットシステムの問題なのか、あるいはデバッガ、エミュレータなどの問題なのかを判断するのが難しく、原因を絞る込むための時間がかかった。しかし、上述した本実施の形態によれば、CPUロックの原因を短時間で特定することができる。
【００７３】
そして、CPUロックの原因の絞込みを早くできることは、デバッグ時間の短縮、デバッグの品質の向上等に繋がるものである。
【００７４】
また、このようなデバッグシステム１によれば、ボード、LSIなどの検証などに利用できるため、ハードウェアとソフトウェアの協調デバッグも可能となる。
【００７５】
なお、上述した例では、CPUの暴走の原因となる動作に関わる回路として、バーストリフィル監視部を挙げたが、CPUの暴走の原因となる動作に関わる回路として、PCIバス監視部等の他の回路でもよい。
【００７６】
例えば、PCIバス監視部は、PCIバスのバス権の監視を行う回路である。PCIバスのバス権処理が適切に行われないと、システムのブート時にプログラムがmainのプログラムが実行されずにCPUが暴走する場合がある。すなわち、ブート時に、処理は、mainのプログラムの実行まで到達できずに、CPUが暴走状態となる場合がある。この状態は、例えば、PCIバスのバス権が、ブート時の処理において有効にならず、リセット処理により有効になるように仕様が誤って設定されている場合に生じる。従って、このようなPCIバス監視部状態の動作出力ピンの信号状態をバウンダリスキャンデータとして取得するようにすれば、CPUの暴走の原因がPCIバス権の処理にあるか否かを判定することができる。
【００７７】
本明細書における各「部」は、実施の形態の各機能に対応する概念的なもので、必ずしも特定のハードウェアやソフトウェア・ルーチンに１対１には対応しない。従って、本明細書では、以下、実施の形態の各機能を有する仮想的回路ブロック（部）を想定して実施の形態を説明した。また、本実施の形態における各手順の各ステップは、その性質に反しない限り、実行順序を変更し、複数同時に実行し、あるいは実行毎に異なった順序で実行してもよい。
【００７８】
なお、以上説明した動作を実行するプログラムは、コンピュータプログラム製品として、フレキシブルディスク、ＣＤ−ＲＯＭ等の可搬媒体や、ハードディスク等の記憶装置等に、その全体あるいは一部が記録され、あるいは記憶されている。そのプログラムがコンピュータにより読み取られて、動作の全部あるいは一部が実行される。あるいは、そのプログラムの全体あるいは一部を通信ネットワークを介して流通または提供することができる。利用者は、通信ネットワークを介してそのプログラムをダウンロードしてコンピュータにインストールしたり、あるいは記録媒体からコンピュータにインストールすることで、容易に本発明のデバッグシステムを実現することができる。
【００７９】
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
【図面の簡単な説明】
【００８０】
【図１】本発明の実施の形態に係わるデバッグシステムの構成を示す構成図である。
【図２】本発明の実施の形態に係わるデバッガの構成を示すブロック図である。
【図３】本発明の実施の形態に係わるデバッガ画面の例を示す図である。
【図４】本発明の実施の形態に係わるバウンダリスキャンデータを表示する表示画面の例を示す画面である。
【図５】本発明の実施の形態に係わるバウンダリスキャンデータの通信パケットの構成を示す図である。
【図６】本発明の実施の形態に係わる、記憶装置に記憶されるバウンダリスキャンデータのテーブルデータの例を示す図である。
【図７】本発明の実施の形態に係わる、ターゲットシステムの構成を示すブロック図である。
【図８】本発明の実施の形態に係わる、JTAGインタフェースの構成を説明するためのブロック図である。
【図９】本発明の実施の形態に係わる、バウンダリスキャン順序を示すテーブルデータの例を示す図である。
【図１０】本発明の実施の形態に係わる、バウンダリスキャンデータの取得をするときのデバッガ２１の処理の流れの例を示すフローチャートである。
【図１１】本発明の実施の形態に係わる、バウンダリスキャンデータの取得をするときのエミュレータの処理の流れの例を示すフローチャートである。
【符号の説明】
【００８１】
１  デバッグシステム、１１  ホスト、１２  エミュレータ、１３  ターゲットシステム、１４  記憶装置、１５  ケーブル、１６  EJTAGコネクタユニット、２１  デバッガ、２２  表示装置、２３  コントローラ、２４  ホストインターフェース、２５、３２  JTAGインターフェース、２６  CPU、３１  DSU、９１  システムチップ、１１１  グローバルバス
【図１】
2009258857.tif 000003
【図２】
2009258857.tif 000004
【図３】
2009258857.tif 000005
【図４】
2009258857.tif 000006
【図５】
2009258857.tif 000007
【図６】
2009258857.tif 000008
【図７】
2009258857.tif 000009
【図８】
2009258857.tif 000010
【図９】
2009258857.tif 000011
【図１０】
2009258857.tif 000012
【図１１】
2009258857.tif 000013