(57)【要約】  半導体装置は、第１および第２の中央処理装置（０，３）と、第２の中央処理装置（３）の内部または外部に設けられた監視用レジスタ群（６０）とを備える。監視用レジスタ群（６０）には、プログラムの実行中に第１の中央処理装置（０）の内部状態を表わす情報が第１の中央処理装置（０）から転送され、監視用レジスタ群（６０）はこれらの転送された情報を保持する。監視用レジスタ群（６０）は、第２の中央処理装置（３）のメモリ空間にマッピングされている。
2012127955.tif 000002
【特許請求の範囲】
【請求項１】
第１および第２の中央処理装置と、
前記第２の中央処理装置の内部または外部に設けられ、プログラムの実行中に前記第１の中央処理装置の内部状態を表わす情報が前記第１の中央処理装置から転送され、転送された情報を保持する監視用レジスタ群とを備え、
前記監視用レジスタ群は、前記第２の中央処理装置のメモリ空間にマッピングされている、半導体装置。
【請求項２】
前記第２の中央処理装置は、
プログラムを実行するコア回路と、
専用ポートを介して前記半導体装置の外部から特定命令を受けたときに、メモリ空間にマッピングされた前記監視用レジスタ群の値を前記コア回路に出力させ、出力された前記監視用レジスタ群の値を前記専用ポートを介して前記半導体装置の外部に出力するデバッグ回路とを含む、請求項１に記載の半導体装置。
【請求項３】
前記第１の中央処理装置は、プログラムを実行するコア回路を含み、
前記コア回路は、プログラムの実行中に用いられる特殊レジスタ群を有し、
前記特殊レジスタ群の値は、前記第１の中央処理装置の内部状態を表わす情報として、前記監視用レジスタ群に転送される、請求項１に記載の半導体装置。
【請求項４】
前記特殊レジスタ群は、プログラムカウンタを含む、請求項３に記載の半導体装置。
【請求項５】
前記特殊レジスタ群は、オペランドアドレスを保持するレジスタを含む、請求項３に記載の半導体装置。
【請求項６】
前記第１の中央処理装置は、仮想アドレスと物理アドレスとの変換を行なうメモリ管理ユニットを含み、
前記メモリ管理ユニットによって仮想アドレスに対応付けられた物理アドレスの情報は、前記第１の中央処理装置の内部状態を表わす情報として、前記監視用レジスタ群に転送される、請求項１に記載の半導体装置。
【請求項７】
前記監視用レジスタ群の一部である１または複数の監視用レジスタの値は、クロックサイクルごとに前記第１の中央処理装置から転送された情報によって更新される、請求項１に記載の半導体装置。
【請求項８】
前記半導体装置は、さらに、前記監視用レジスタ群の一部である１または複数の監視用レジスタの前段にそれぞれ設けられた１または複数の保持回路を備え、
前記１または複数の保持回路の各々は、クロックサイクルごとに前記第１の中央処理装置から転送された新たな情報を保持し、
前記１または複数の保持回路の各々は、保持した情報の値が変化したときのみ、変化前の情報によって対応の監視用レジスタの値を更新する、請求項１に記載の半導体装置。
【請求項９】
前記半導体装置は、さらに、前記監視用レジスタ群の一部である１または複数の監視用レジスタの前段にそれぞれ設けられた１または複数の保持回路を備え、
前記１または複数の保持回路の各々は、クロックサイクルごとに前記第１の中央処理装置から転送された新たな情報を保持し、
前記１または複数の保持回路の各々は、前記第１の中央処理装置から受けた特定の信号が活性化されている間、保持した情報によって対応のレジスタの保持内容を更新する、請求項１に記載の半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、複数の中央処理装置を搭載した半導体装置に関する。
【背景技術】
【０００２】
ソフトウェアの開発を効率化するために、中央処理装置（ＣＰＵ：Central  Processing  Unit）には、ＪＴＡＧ（Joint  Test  Action  Group）規格などに対応したオンチップデバッグ機能が搭載されるものが多い。オンチップデバッグ機能は、専用インターフェースを介して命令コードを入力することでＣＰＵを動作させ、半導体チップ内のリソース情報を取り出すものである。オンチップデバッグ機能には、ユーザ・プログラムの実行を所望の箇所で停止可能なブレーク機能や、ユーザ・プログラム実行中の任意の時点での内部バスの情報を取得可能なトレース機能などがある。【０００３】
特開２００１−３５０６４８号公報（特許文献１）に記載の技術では、上記のオンチップデバッグ機能を備えたマイクロコンピュータに、さらに、ユーザ・プログラム実行中に所定の内部状態情報を外部へ出力させる内部状態出力回路と、前記内部状態情報を出力するための端子とが設けられる。【０００４】
特開平６−２１４８１９号公報（特許文献２）にも、上記の文献と同様の記載がある。具体的に、この文献の記載のマイクロコンピュータには、プログラムカウンタの内容を外部に出力したり、ＣＰＵと機能モジュールとの間で入出力される信号などを選択して外部に出力したりする出力回路が設けられる。【０００５】
ところで、近年、低電力かつ高性能のシステムを実現するために、複数のＣＰＵを同一のＬＳＩ（Large  Scale  Integration）に搭載したマルチプロセッサ（マルチコアプロセッサ）の開発が進められている。複数のＣＰＵを搭載したシステムのデバッグでは、単一のＣＰＵを搭載したシステムとは異なる新たな問題がある。【０００６】
たとえば、複数のＣＰＵを搭載したシステムのデバッグでは、ブレーク、ステップ実行、およびトレースなどがＣＰＵ毎に実施される。このため、効率の良いデバッグを行なうには、各ＣＰＵのブレーク、ステップ実行を協調動作させること、および各ＣＰＵのトレースデータの時間関係を知ることが必要になる。特開２００３−１６２４２６号公報（特許文献３）には、このための制御回路を備えたコンピュータシステムについて記載されている。【０００７】
デバッグ用の端子群と複数のＣＰＵとの接続方法もマルチプロセッサに固有の問題である。植田等（非特許文献１）によれば、ＪＴＡＧインターフェースを使ったデバッグを想定した場合、ＪＴＡＧポートと制御対象のＣＰＵコアとの接続方法は、４種類考えられる。すなわち、カスケード接続にするかパラレル・スイッチ接続にするかという選択肢と、ＣＰＵコア間の同期を取る機能などを備えるか否かという選択肢がある。たとえば、特開２００４−１６４３６７号公報（特許文献４）は、レジスタを用いた簡単な構成のスイッチ回路（選択回路）によって、デバッグ用端子群と選択されたＣＰＵとを接続する技術を開示する。【０００８】
特開２００９−１９３３０５号公報（特許文献５）は、複数のＣＰＵを同一のＬＳＩ上に搭載したマルチコアＬＳＩにおいて、他のＣＰＵが正常に動作するなかで、あるＣＰＵが暴走して共有バスをハングアップした場合に対処可能な技術を開示する。具体的には、この文献のマルチコアＬＳＩは、第１の共有バスに接続された複数のＣＰＵと、第２の共有バスに接続された１個以上のモジュールと、第１の共有バスと第２の共有バスとの間に接続され、複数のＣＰＵのモジュールへのアクセスを調停する共有バス制御部と、アクセス先のモジュールから、各ＣＰＵのアクセス要求信号に対する応答信号が出力されたか否かを監視するシステムコントローラとを備える。システムコントローラは、共有バス制御部から第２の共有バスにアクセス要求信号が出力されてから所定時間経過するまでに、アクセス先のモジュールから応答信号が出力されない場合は、共有バス制御部を介して第１の共有バスに疑似応答信号を出力して、アクセス中のＣＰＵの当該アクセスを終了させる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００１−３５０６４８号公報
【特許文献２】特開平６−２１４８１９号公報
【特許文献３】特開２００３−１６２４２６号公報
【特許文献４】特開２００４−１６４３６７号公報
【特許文献５】特開２００９−１９３３０５号公報
【非特許文献】
【００１０】
【非特許文献１】植田  他４名、「Ｌｉｎｕｘ（登録商標）やマルチコア環境のデバッグを支える仮想化技術」、日経エレクトロニクス、2006年1月2日号、p.115-122
【発明の概要】
【発明が解決しようとする課題】
【００１１】
ＣＰＵが何らかの理由でハングアップした場合、オンチップデバッグ機能ではハングアップしたＣＰＵの内部情報を取り出すことができない。このため、ハングアップしたプログラムの箇所を特定するのが困難になる。【００１２】
特に、複数のＣＰＵが搭載されているマルチプロセッサの場合には、シングルプロセッサの場合よりもデバッグが困難になる。この理由は、マルチプロセッサでは、タスク割り当てが毎回変わるためにハングアップの発生の再現性が低く、たとえば、プログラムを実行する毎に異なるＣＰＵでハングアップが生じたりするからである。さらには、マルチプロセッサでは、各ＣＰＵからアクセスが発生するためにリソース競合が生じやすいことや、大規模のプログラムを扱うためにデバッグの分量も多いことがあり、これらのこともデバッグをより困難にしている。【００１３】
シングルプロセッサの場合には、トレース機能を利用してハングアップした場合のデバッグの容易化を図っているが、マルチプロセッサの場合には、全てのプロセッサにシングルプロセッサと同等のトレース機能を付けることは回路規模や端子の制約で難しい。【００１４】
上記の、特開２００３−１６２４２６号公報（特許文献３）および特開２００４−１６４３６７号公報（特許文献４）は、マルチプロセッサのデバッグの容易化を目的としたものであるが、ＣＰＵがハングアップした場合については言及されていない。特開２００９−１９３３０５号公報（特許文献５）はＣＰＵがハングアップした場合についての発明であるが、ハングアップを解消することに主眼がおかれ、デバッグ容易化のための手段を提供するものではない。【００１５】
したがって、この発明の目的は、複数の中央処理装置（ＣＰＵ）が搭載された半導体装置において、いずれかのＣＰＵがハングアップした場合に、従来よりも容易にデバッグを行なうことができる半導体装置を提供することである。
【課題を解決するための手段】
【００１６】
この発明の実施の一形態による半導体装置は、第１および第２の中央処理装置と、第２の中央処理装置の内部または外部に設けられた監視用レジスタ群とを備える。監視用レジスタ群には、プログラムの実行中に第１の中央処理装置の内部状態を表わす情報が第１の中央処理装置から転送され、監視用レジスタ群はこれらの転送された情報を保持する。監視用レジスタ群は、第２の中央処理装置のメモリ空間にマッピングされている。
【発明の効果】
【００１７】
上記の実施の形態によれば、第１の中央処理装置がハングアップした場合に、第２の中央処理装置を用いて第１の中央処理装置の内部状態を取得することができるので、従来よりも容易にデバッグを行なうことができる。
【図面の簡単な説明】
【００１８】
【図１】この発明の実施の形態１によるマイクロコンピュータチップ１００の構成を示すブロック図である。
【図２】図１に示したＣＰＵ０の内部情報の転送に用いられるハードウェアの一例を示す回路図である。
【図３】４個のＣＰＵを備えたマイクロコンピュータチップにおけるＣＰＵコア間の信号伝送について説明するための概念図である。
【図４】ＣＰＵ３に設けられた監視用レジスタ群の一覧表である。
【図５】図４の各監視用レジスタについて説明するための図である。
【図６】図１のＣＰＵ３のアドレスマップの一例を示す図である。
【図７】ＣＰＵ０がハングアップしていない場合のオンチップデバッグ方法について説明するための図である。
【図８】ＣＰＵ０がハングアップしている場合のオンチップデバッグ方法について説明するための図である。
【図９】４個のＣＰＵを備えたマイクロコンピュータチップにおける各ＣＰＵの内部状態の読出経路がリング構成になっている例を示す図である。
【図１０】４個のＣＰＵを備えたマイクロコンピュータチップにおける各ＣＰＵの内部状態の読出経路がバス構成になっている例を示す図である。
【図１１】７個のＣＰＵを備えたマイクロコンピュータチップにおける各ＣＰＵの内部状態の読出経路がツリー構成になっている例を示す図である。
【発明を実施するための形態】
【００１９】
以下、この発明の実施の形態について図面を参照して詳しく説明する。なお、同一または相当する部分には同一の参照符号を付して、その説明を繰返さない。
【００２０】
＜実施の形態１＞
［マイクロコンピュータチップの構成］
図１は、この発明の実施の形態１によるマイクロコンピュータチップ１００の構成を示すブロック図である。図１を参照して、マイクロコンピュータチップ１００は、複数の中央処理装置（ＣＰＵ）と、内部メモリ２１と、マイクロコンピュータチップ１００を周辺機器に接続するための入出力インターフェース（周辺ＩＯ）２２と、外部バスインターフェース２３とを含む。これらの要素は、内部バス２０を介して相互に接続される。なお、図１にはマイクロコンピュータチップ１００に設けられた複数のＣＰＵのうち、ＣＰＵ０およびＣＰＵ３が代表として示されている。
【００２１】
入出力インターフェース２２は、入出力ポート２６を介してマイクロコンピュータチップ１００の外部に設けられた周辺機器と接続される。
【００２２】
外部バスインターフェース２３は、マイクロコンピュータチップ１００の外部に設けられた外部メモリ（たとえば、ＤＲＡＭ（Dynamic  Random  Access  Memory））やＡＳＩＣ（Application  Specific  Integrated  Circuit）などと入出力ポート２７を介して接続される。
【００２３】
ＣＰＵ０は、コア回路（ＣＰＵコア）１０＿０と、メモリ管理ユニット（ＭＭＵ：Memory  Management  Unit）１１＿０と、一次キャッシュ（命令キャッシュ（ｉｃａｃｈｅ）１３＿０およびデータキャッシュ（ｄｃａｃｈｅ）１２＿０）と、デバッグ回路１４＿０とを含む。コア回路１０＿０は、内部メモリ２１または外部メモリに記憶されたプログラムを実行するＣＰＵの中核部分である。メモリ管理ユニット１１＿０は、仮想アドレスと物理アドレスとの変換を行なう。一次キャッシュは、メモリの一部のデータが転送されることによってデータアクセスの高速化を図るものである。デバッグ回路１４＿０は、ＪＴＡＧ  ＩＣＥ（In-circuit  Emulator）によるオンボードデバッグを実現するためにプロセッサ内部に設けられた専用回路である。
【００２４】
ＣＰＵ３も、ＣＰＵ０と同様に、コア回路１０＿３と、ＭＭＵ１１＿３と、一次キャッシュ（１２＿３，１３＿３）と、デバッグ回路１４＿３とを含む。ただし、後述するように、ＣＰＵ３のコア回路１０＿３には、プログラムの実行中にＣＰＵ０の内部状態に関する情報が転送される監視用のレジスタ群が設けられる。監視用のレジスタ群は、ＣＰＵ３のメモリ空間にマッピングされている。すなわち、監視用レジスタ群を構成する各レジスタにはアドレスが割当てられる。この割当てられたアドレスをオペランドアドレスとして記載した読出命令をＣＰＵ３に発行することによって、監視用レジスタ群に保持された内容を読み出すことができる。
【００２５】
マイクロコンピュータチップ１００は、さらに、複数のＣＰＵにそれぞれ対応して設けられたＪＴＡＧインターフェース１５と、スイッチ回路２４と、ＪＴＡＧポート２８とを含む。図１には、ＣＰＵ０，３にそれぞれ対応するＪＴＡＧインターフェース１５＿０，１５＿３が代表的に示されている。
【００２６】
各ＪＴＡＧインターフェース１５は、ＴＡＰ（Test  Access  Port）１６と呼ばれる専用のコントローラを有し、ＴＡＰを介して対応のＣＰＵとＪＡＴＧポート２８に接続された外部のデバッグ装置との通信が行なわれる。ＪＴＡＧインターフェース１５は、特定のＴＡＰだけが外部のデバッグ装置と通信できる仕様となっている。スイッチ回路２４は、ＪＴＡＧポート２８と各ＪＴＡＧインターフェース１５との接続を切替える。
【００２７】
図２は、図１に示したＣＰＵ０の内部情報の転送に用いられるハードウェアの一例を示す回路図である。
【００２８】
図２を参照して、プログラムの実行中にはＣＰＵ０の内部情報がＣＰＵ３のコア回路１０＿３に設けられた監視用レジスタ群６０に転送される。監視用レジスタ群６０は、ＣＰＵ３のメモリ空間にマッピングされている。転送されるＣＰＵ０の内部状態は、たとえば、プログラム実行時に用いられるプログラムカウンタなどの特殊レジスタ群３０の値であり、割込み動作時に退避されるＣＰＵコンテキストに相当する情報である。
【００２９】
実施の形態１の場合には、図２に示されるように、プログラムカウンタ（ＥＰＣ：Execute  Program  Counter、単にＰＣとも記載する）３１の値、バックアッププログラムカウンタ（ＢＰＣ：Backup  Program  Counter）３２の値、プログラムステータスワード（ＰＳＷ：Program  Status  Word）３３の値、およびオペランドアクセス（ＯＡ：Operand  Access）の情報３４などが監視用レジスタ群６０に転送される。オペランドアクセスの情報としては、オペランドアクセス要求（ＲＥＱ）、ライトおよびリード属性（ＷＲ）、バスロック要求属性（ＬＯＣＫ）、バイトコントロール（ＢＣ）、オペランドアドレス情報（ＡＤＤＲ）、およびオペランドアクセス要求に対するバス受付（acknowledge）信号（ＤＣＣ１ＨＯＡＡＣＫ）などが挙げられる。この実施の形態の場合、バス構成上の理由で、バス受付信号（ＤＣＣ１ＨＯＡＡＣＫ）は、データキャッシュ１２＿０が出力する。なお、ＢＰＣ３２は、割り込み、トラップ、例外が発生したときにＰＣの値を退避する。
【００３０】
図２には図示されていないが、図１のメモリ管理ユニット１１＿０の内部情報、すなわち、ＴＬＢ（Translation  Look-aside  Buffer）エントリ（仮想アドレスに対応付けられた物理アドレスの情報）も監視用レジスタ群６０に転送するのが望ましい。
【００３１】
転送されるＣＰＵ０の内部情報は、レイテンシ（遅延時間）を考慮して複数のフリップフロップ（保持回路）を介して監視用レジスタ群に転送される。図２の場合には、フリップフロップ４１〜４５が情報の出力側であるＣＰＵ０に設けられ、フリップフロップ４６〜５４が情報の受け側であるＣＰＵ３に設けられる。
【００３２】
監視用レジスタ群６０を構成する各レジスタ６１〜６８の構成の詳細については、図４および図５を参照して後述する。ここで、レジスタ６１，６３，６４，６５，６６の値は、クロックサイクル毎に更新されるのに対して、レジスタ６２，６７，６８は必ずしもクロックサイクル毎に更新されない。
【００３３】
レジスタ６２は、プログラムカウンタ（ＰＣ）の値が更新されたときのみ、更新前のプログラムカウンタの値を保持する。この目的のため、レジスタ６２の前段にフリップフロップ５２が設けられるとともに、比較回路５５が設けられる。比較回路５５は、フリップフロップ５１に保持されているプログラムカウンタの値と、クロックサイクル毎に入力される新たなプログラムカウンタの値とを比較し、両者が一致している場合に“０”を出力し、不一致の場合に“１”を出力する。フリップフロップ５２は、クロックサイクル毎にプログラムカウンタの値を保持し、比較回路５５の出力が“１”のときのみ（ＷＥ＝“１”）、保持したプログラムカウンタの値をレジスタ６２に出力することによってレジスタ６２の値を更新する。
【００３４】
レジスタ６７，６８は、オペランドアドレスおよびオペランドアクセスの属性が更新されたときのみ、更新前の値を保持する。この目的のため、レジスタ６７，６８の前段にフリップフロップ５４が設けられる。フリップフロップ５４は、クロックサイクル毎にオペランドアドレスおよびオペランドアクセスの属性を保持する。フリップフロップ５４は、バス受付信号（ＤＣＣ１ＨＯＡＡＣＫ）が活性化されたときに、保持したオペランドアドレスおよびオペランドアクセスの属性をレジスタ６７，６８にそれぞれ出力することによってレジスタ６７，６８の内容を更新する。
【００３５】
なお、監視用レジスタ群６０は、必ずしもＣＰＵコア１０＿３の内部に設けなくてもよいが、ＣＰＵ０の内部情報を伝達するための信号経路を短くするためには、図２に示すようにＣＰＵコア１０＿３の内部に設けたほうが望ましい。もし、監視用レジスタ群６０をＣＰＵ３の外部に設けて、監視用レジスタ群６０とＣＰＵ３との間をバス２０で接続すれば、バス２０がハングアップしている場合にＣＰＵ３から監視用レジスタ群６０にアクセスできなくなる。あるいはこの問題を回避するために、監視用レジスタ群６０とＣＰＵ３との間を多数の専用信号線で接続することになる。
【００３６】
図３は、４個のＣＰＵを備えたマイクロコンピュータチップにおけるＣＰＵコア間の信号伝送について説明するための概念図であり、各ＣＰＵ内部状態の読出経路がツリー状に構成された例が示される。
【００３７】
図３を参照して、ＣＰＵ０，１，２の各内部情報がＣＰＵ３に設けられた監視用レジスタ群に転送される。さらに、ＣＰＵ３自身の内部情報を保持するための監視用レジスタ群をＣＰＵ３の内部に設けるのが望ましい。ＣＰＵ３に設けられた監視用レジスタ群はＣＰＵ３のメモリ空間にマッピングされているので、一般的なデバッガが搭載しているメモリダンプ機能を用いて、これらのＣＰＵ０〜３の内部情報を一括してＣＰＵの外部に出力することができる。すなわち、所望の観測対象をＣＰＵ３のメモリ空間にマッピングするだけで、メモリダンプ機能を使ってこれらの観測対象をマイクロコンピュータチップの外部から観測することができる。エミュレータやエミュレータファームなどのデバッガ側の改変は不要である。
【００３８】
なお、実際にプログラムをデバッグするときには、初期段階では、ＣＰＵ３をモニタ専用としてＣＰＵ０〜ＣＰＵ２のみでプログラムを動作させるのが望ましい。そして、ある程度デバッグが進んだ段階でＣＰＵ０〜３の全てを使ってプログラムを動作させるのが効率的である。
【００３９】
［監視用レジスタ群の詳細］
図４は、ＣＰＵ３に設けられた監視用レジスタ群の一覧表である。図４に示すアドレスの上位ビット「ＸＸＸＸ＿ＸＸ」は、メモリ空間内の特定アドレスを示す。
【００４０】
図５は、図４の各監視用レジスタについて説明するための図である。図４、図５を参照して、レジスタＣＲＭＣＰＵ０ＰＣ〜ＣＲＭＣＰＵ３ＰＣ（図２のレジスタ６１）は、ＣＰＵ０〜３のプログラムカウンタ（ＰＣ）の値（３２ビット：ビットｂ０〜ｂ３１）をそれぞれ保持する。
【００４１】
レジスタＣＲＭＣＰＵ０ＢＰＣ〜ＣＲＭＣＰＵ３ＢＰＣ（図２のレジスタ６３）は、ＣＰＵ０〜３のバックアッププログラムカウンタ（ＢＰＣ）の値（３２ビット）をそれぞれ保持する。
【００４２】
レジスタＣＲＭＣＰＵ０ＯＬＤＰＣ〜ＣＲＭＣＰＵ３ＯＬＤＰＣ（図２のレジスタ６２）は、ＣＰＵ０〜３のプログラムカウンタが現在の値に変わる直前の値（ＯＬＤＰＣ：３２ビット）をそれぞれ保持する。ＣＰＵがハングアップする場合は、現在実行中の命令よりも１つ以上前の命令が原因となっていることが多く、またプログラムフロー取得のため、１段以上のプログラムカウンタ履歴を保持しておくことは重要である。
【００４３】
レジスタＣＲＭＣＰＵ０ＰＳＷ〜ＣＲＭＣＰＵ３ＰＳＷ（図２のレジスタ６４）は、ＣＰＵ０〜３のプログラムステータスワード（ＰＳＷ）の値（３２ビット）をそれぞれ保持する。
【００４４】
レジスタＣＲＭＣＰＵ０ＯＡＡＤＤＲ〜ＣＲＭＣＰＵ３ＯＡＡＤＤＲ（図２のレジスタ６５）は、ＣＰＵ０〜３が出力しているオペランドアクセスアドレス（ＯＡＡＤＤＲ：３２ビット）をそれぞれ保持する。
【００４５】
レジスタＣＲＭＣＰＵ０ＯＡＡＴＴＲ〜ＣＲＭＣＰＵ３ＯＡＡＴＴＲ（図２のレジスタ６６）は、ＣＰＵ０〜３がそれぞれ出力しているオペランドアクセスの属性（リクエストＲ、ライトＷ、ロックＬ、バイトコントロールＢＣ）を保持する。具体的には、Ｒ＝０の場合がリクエスト無しを表わし、Ｒ＝１の場合がリクエスト有りを表わす。Ｗ＝０の場合がリードリクエストを表わし、Ｗ＝１の場合がライトリクエストを表す。Ｗの値はＲ＝１のときのみ有効である。Ｌ＝０の場合がロック期間中ではない、もしくはアンロックリクエスト中であることを示し、Ｌ＝１の場合がロック期間中、もしくはロックリクエスト中であることを示す。バイトコントロールＢＣは、４ビットのバイトコントロール信号であり、Ｒ＝１のときのみ有効である。
【００４６】
レジスタＣＲＭＣＰＵ０ＯＬＤＯＡＡＤ〜ＣＲＭＣＰＵ３ＯＬＤＯＡＡＤ（図２のレジスタ６７）は、ＣＰＵ０〜３がそれぞれ出力している現在のオペランドアクセスアドレスよりも１つ前のオペランドアクセスアドレス（ＯＬＤＯＡＡＤ）の値（３２ビット）を保持する。ＣＰＵがハングアップする場合は、現在実行中のオペランドアクセスよりも１つ以上前のオペランドアクセスが原因となっていることが多いので、１段以上のオペランドアクセスアドレスの履歴を保持しておくことは重要である。
【００４７】
レジスタＣＲＭＣＰＵ０ＯＬＤＯＡＡＴ〜ＣＲＭＣＰＵ３ＯＬＤＯＡＡＴ（図２のレジスタ６８）は、ＣＰＵ０〜３がそれぞれ出力している現在のオペランドアクセスの属性（リクエストＲ、ライトＷ、ロックＬ、バイトコントロールＢＣ）の１つ前のオペランドアクセスの属性を保持する。ＣＰＵがハングアップする場合は、現在実行中のオペランドアクセスよりも１つ以上前のオペランドアクセスが原因となっていることが多いので、１段以上のオペランドアクセスの属性の履歴を保持しておくことは重要である。
【００４８】
図６は、図１のＣＰＵ３のアドレスマップの一例を示す図である。
図６を参照して、Ｈ’００００＿００００〜Ｈ’１ＦＦＦ＿ＦＦＦＦの５１２Ｍバイトはブロックに分割される。各ブロックには１６ＭＢの外部領域が割当てられる。外部領域は、図１の外部バスインターフェース２３を通じてアクセスする。図１の内部メモリ、周辺ＩＯ２２は内部領域に割当てられる。
【００４９】
Ｈ’ＦＥ００＿０００００〜Ｈ’ＦＦＦＦ＿ＦＦＦＦの３２Ｍバイトはシステム領域に割当てられる。
【００５０】
図４の監視用レジスタ群は、たとえば、システム領域内にある領域Ａや内部領域２Ｍバイトの一部である、領域Ｂなど、他のリソースに割当てられていない空き領域に割当てることができる。
【００５１】
［デバッグ方法の説明］
図７は、ＣＰＵ０がハングアップしていない場合のオンチップデバッグ方法について説明するための図である。
【００５２】
図７を参照して、ＣＰＵコア１０＿０自身と、ＣＰＵコア１０＿０からアクセス可能な内部メモリ２１、入出力インターフェース２２、および外部バスインターフェース２３とをデバッグ対象７０とする。
【００５３】
まず、マイクロコンピュータチップ１００の外部から制御コードがデバッグ回路１４＿０に到達する。この場合の制御コードがオペランドアクセスの場合、デバッグ回路１４＿０はロード、ストアなどの命令をＣＰＵコア１０＿０に発行する（図７の参照符号７１）。ＣＰＵコア１０＿０は、デバッグ回路１４＿０からの命令を受けて、たとえば、観測対象である内部メモリ２１にアクセスする（図７の参照符号７２）。ＣＰＵコア１０＿０によるメモリアクセスの結果は、デバッグ回路１４＿０、ＪＴＡＧインターフェース１５＿０、およびＪＴＡＧポート２８を介して外部に出力される（図７の参照符号７３）。
【００５４】
図８は、ＣＰＵ０がハングアップしている場合のオンチップデバッグ方法について説明するための図である。
【００５５】
ＣＰＵコアが動作できない原因として、ＣＰＵに命令が供給されてもバスアクセス経路がふさがっていることが考えられる。この場合、ＣＰＵは先行するオペランドアクセス処理が完了できず、ハングアップする。他の原因として、ＣＰＵコア内のバグでハングアップする場合などが考えられる。ＣＰＵ０がハングアップすると、デバッグ対象系７０から情報を外部に出すことができなくなる。
【００５６】
既に説明したように、実施の形態１のマイクロコンピュータチップ１００では、ＣＰＵ０の内部状態を表わす情報がＣＰＵコア１０＿３内の監視用レジスタ群に転送される。そして、監視用レジスタ群はＣＰＵ３のメモリ空間にマッピングされている。したがって、デバッグ回路１４＿３は、監視用レジスタ群の内容をロードする命令をＣＰＵ３に発行する（図８の参照符号７４）ことによって、ハングアップしたＣＰＵ０の情報をＪＴＡＧインターフェース１５＿３およびＪＴＡＧポート２８を介して外部に出力することができる（図８の参照符号７５）。この結果、従来よりも容易にデバッグを行なうことができる。
【００５７】
＜実施の形態２＞
実施の形態１では、ＣＰＵ０〜３の内部状態を表わす情報がＣＰＵ３に設けられた監視用レジスタ群に全て転送されるように、内部状態の読出経路がツリー状に構成される例を示した。実施の形態２では、各ＣＰＵの内部状態の読出経路の変形例を説明する。各ＣＰＵの内部状態の読出経路は、各ＣＰＵの結合網の形態（オンチップバス、ネットワークオンチップの各トポロジ）に左右されず、自由に決定することができるので、この発明によるオンチップデバッグ方法は、オンチップマルチプロセッサに適している。たとえば、結合網がネットワークオンチップでメッシュ構成をとっている場合でも、各ＣＰＵの内部状態の読出経路はツリー構造をとることで経路を簡単化することができる。
【００５８】
図９は、４個のＣＰＵを備えたマイクロコンピュータチップにおける各ＣＰＵの内部状態の読出経路がリング構成になっている例を示す図である。図９に示す例では、ＣＰＵ０の内部情報がＣＰＵ１に設けられた監視用レジスタ群に転送され、ＣＰＵ１の内部情報がＣＰＵ３に設けられた監視用レジスタ群に転送され、ＣＰＵ３の内部情報がＣＰＵ２に設けられた監視用レジスタ群に転送され、ＣＰＵ２の内部情報がＣＰＵ０に設けられた監視用レジスタ群に転送される。すなわち、各ＣＰＵの内部状態の読出経路がリング構成になっている。
【００５９】
図１０は、４個のＣＰＵを備えたマイクロコンピュータチップにおける各ＣＰＵの内部状態の読出経路がバス構成になっている例を示す図である。図１０に示す例では、ＣＰＵ０〜３の各々の内部情報が、バス（ＢＵＳ）を経由してＣＰＵ０〜３の少なくとも１つに設けられた監視用レジスタ群に転送される。
【００６０】
図１１は、７個のＣＰＵを備えたマイクロコンピュータチップにおける各ＣＰＵの内部状態の読出経路がツリー構成になっている例を示す図である。図１１では、各ＣＰＵの内部状態の読出経路がツリー状に構成された例が示される。具体的には、ＣＰＵ１０，１１の各内部情報がＣＰＵ１に設けられた監視用レジスタ群に転送され、ＣＰＵ２０，２１の各内部情報がＣＰＵ２に設けられた監視用レジスタ群に転送され、ＣＰＵ１，２の各内部情報がＣＰＵ０に設けられた監視用レジスタ群に転送される。
【００６１】
今回開示された実施の形態はすべての点で例示であって制限的なものでないと考えられるべきである。この発明の範囲は上記した説明ではなくて請求の範囲によって示され、請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【００６２】
０〜３  ＣＰＵ、１０  コア回路（ＣＰＵコア）、１１  メモリ管理ユニット、１２  データキャッシュ、１３  命令キャッシュ、１４  デバッグ回路、１５  ＪＴＡＧインターフェース、２０  内部バス、２１  内部メモリ、２２  入出力インターフェース、２３  外部バスインターフェース、２４  スイッチ回路、２６，２７  入出力ポート、２８  ＪＴＡＧポート、３０  特殊レジスタ群、３１  プログラムカウンタ、３３  プログラムステータスワード、４１〜５４  フリップフロップ、６０  監視用レジスタ群、１００  マイクロコンピュータチップ。
【図１】
2012127955.tif 000003
【図２】
2012127955.tif 000004
【図３】
2012127955.tif 000005
【図４】
2012127955.tif 000006
【図５】
2012127955.tif 000007
【図６】
2012127955.tif 000008
【図７】
2012127955.tif 000009
【図８】
2012127955.tif 000010
【図９】
2012127955.tif 000011
【図１０】
2012127955.tif 000012
【図１１】
2012127955.tif 000013
【国際調査報告】
2012127955.tif 000014
2012127955.tif 000015
2012127955.tif 000016
2012127955.tif 000017