(57)【特許請求の範囲】
【請求項１】
制御信号の受信に応答してリセット状態になるマクロと、
前記マクロが特定時点で前記リセット状態であるか否かを記憶する第１レジスタと、
前記マクロが前記特定時点より前に前記制御信号を受信して前記リセット状態になったことがあるか否かを記憶して、前記特定時点まで保持する第２レジスタと、
を有する半導体集積回路であって、
前記第２レジスタは、前記マクロが前記特定時点より前に前記リセット状態になったことがあることを記憶した後は、前記第１レジスタが記憶する前記マクロの前記リセット状態が変化した場合であっても、そのまま記憶している状態を保持し続け、
前記特定時点において前記第１レジスタが記憶している前記リセット状態、及び、前記特定時点において前記第２レジスタが記憶している前記リセット状態、の両方が前記半導体集積回路の外部の外部装置に参照される半導体集積回路。
【請求項２】
前記第１レジスタおよび前記第２レジスタのそれぞれが記憶した前記マクロの状態を前記外部装置に出力する動作を制御する制御部をさらに有することを特徴とする請求項１に記載の半導体集積回路。
【請求項３】
前記制御部は、前記外部装置からの命令に基づいて前記動作を制御することを特徴とする請求項２に記載の半導体集積回路。
【請求項４】
前記外部装置は、前記マクロをデバッグするデバッガであることを特徴とする請求項３に記載の半導体集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は半導体集積回路に関し、特に制御信号を受信するマクロを含む半導体集積回路に関する。
【背景技術】
【０００２】
プログラムのデバッグを行うデバッガは、従来、プログラムの実行履歴情報を取得しておき、デバッグが異常終了した後に実行履歴情報の参照・解析を行い、プログラムの実行状況を把握していた。この方法では、ユーザはデバッグが異常終了した時点でのデータは容易に取得することができる。しかし、デバッグが異常終了するに至るまでの情報については、ユーザが考察する必要がある。そこで、特許文献１には、プログラム実行時に実行履歴情報を出力する機能と、後からプログラムの実行を行なうために必要とするデバッグ情報を取得する機能と、実行履歴情報とデバッグ情報を関連付けるための情報を出力する機能を有する情報取得機能を有し、情報取得機能により取得した情報を使用して、任意の実行履歴情報出力時の状態を再現してプログラムを再実行するデバッグ方法が開示されている。特許文献１では、デバッグの異常終了の原因の特定が情報取得機能により取得した情報の使用により容易となる。
【０００３】
また、デバッグ専用の特別なハードウェアを付加することなく、複数のブレークポイントを設定することで、デバッグ効率の向上を図ったマルチプロセッサシステムが特許文献２に開示されている。このマルチプロセッサシステムでは、ブレークポイントの設定に関して、ブレークポイント設定テーブルを用いて、複数のＣＰＵにおいてブレークポイント発生条件を個別に設定できるようにし、それらの条件がすべて満たされ、かつ、ブレークポイント設定テーブルとブレークポイント履歴テーブルとが一致した場合にデバッグ対象プログラムの実行を中断し、デバッガプログラムを呼び出すようにしている。
【特許文献１】特開２００４−２５２６８４号公報
【特許文献２】特開２００５−３５２５９１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記従来技術には以下の課題がある。あるマクロを対象としてデバッガがデバッグを行っている際に、このデバッガ以外の他の要因によって、デバッグの対象であるマクロの状態が遷移したとする。マクロの状態とは、例えばこのマクロの内部信号や出力信号などをいう。例えばデバッグの対象であるマクロ以外の他のマクロがデバッグ対象マクロにリセット信号などの制御信号を送信し、この制御信号を受信したデバッグ対象マクロが状態遷移した場合が考えられる。この場合、デバッガがデバッグを行っているにも関わらず、デバッグの対象であるマクロの状態が遷移したことになる。そうすると、デバッガはデバッグの実行中に実行すべきプログラムの位置を見失い、異常終了（ハングアップ）してしまう。これは、デバッガが、デバッガ以外の他の要因が送信する制御信号などの外部要因を知ることができないためである。
【０００５】
例えば複数のマスタを有する実際のシステムでは、マスタである複数のマクロの中でもマスタとスレーブの関係が生じる。したがって、これら複数のマクロの中におけるマスタが、これら複数のマクロの中におけるスレーブのリセットを行なう場合がある。ゆえに、デバッガがこれらのマクロのデバッグを行う場合、プログラムにデバッグ中にアクティブになるマスタからスレーブへのリセットを禁止する設定が必要になる。このような設定は本来のソフトウェアプログラムのシーケンスから外れたものである。
【課題を解決するための手段】
【０００６】
本発明に係る半導体集積回路は、制御信号の受信に応答して一の状態になるマクロと、前記マクロが特定時点で前記一の状態であるか否かを記憶する第１レジスタと、前記マクロが前記特定時点より前に前記制御信号を受信して前記一の状態になったことがあるか否かを記憶して、前記特定時点まで保持する第２レジスタと、を有し、前記特定時点において前記第１レジスタが記憶している状態、及び、前記特定時点において前記第２レジスタが記憶している状態、の両方が前記半導体集積回路の外部の外部装置に参照されることを特徴とする。例えば、デバッガがこのマクロを対象としてデバッグを行っている際、このデバッガ以外の他の要因によって当該マクロの状態が遷移し、デバッガはデバッグを継続することができなくなったとする。このとき、デバッガは、第１レジスタおよび第２次レジスタを参照することにより、デバッグを継続することができなくなった原因を知ることができ、その原因に応じた処理を行うことができる。例えば、デバッガは、第１レジスタおよび第２レジスタを参照し、デバッグ対象であるマクロが過去に制御信号を受信して、デバッガが検知しない状態遷移を行ったことを知ることができる。この場合、デバッガは、デバッグ対象であるマクロが過去に状態遷移を行ったことに鑑みて、デバッグの再開に必要な処理を行い再びデバッグを開始することができる。例えばデバッガは、自身が有するデバッグ対象マクロの情報と、他のマクロが送信した制御信号により状態遷移した後のデバッグ対象マクロの情報との整合を図るための処理を行う。係る処理の完了後、デバッガは、デバッグ対象マクロのデバッグを再開することができる。また例えば、デバッガは、他のマクロがデバッグ対象のマクロに制御信号を送信中であって、デバッグ対象マクロの状態が係る制御信号に基づく状態に固定されていることも知ることができる。この場合、デバッガは、他のマクロがデバッグ対象マクロに対する制御信号の送信を停止するのを待つとともに、他のマクロがデバッグ対象マクロへの制御信号の送信を停止した後にデバッグの再開に必要な処理を行い再びデバッグを開始することができる。
【発明の効果】
【０００７】
本発明によれば、デバッガがデバッグを行っているマクロの状態が当該デバッガ以外の要因で変化し、デバッガがデバッグを継続できなくなった場合においても、デバッガは異常終了することなくデバッグを再開することができる。
【発明を実施するための最良の形態】
【０００８】
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。なお、以下の説明では適宜、具体的な例を用いて当該実施の形態の説明を行うが、係る具体的な例は本発明の権利範囲を限定するものではない。
【０００９】
図１は、本実施の形態にかかる半導体集積回路を示す図である。デバッガ１０は半導体集積回路２０に対してＪＴＡＧ信号やリセット信号ｎＳＲＳＴを半導体集積回路２０に対して制御信号を送信し、マクロのデバッグを行う。ここでＪＴＡＧ信号とは、ＩＥＥＥ１１４９．１のＪＴＡＧ規格で定められている信号であり、ＴＣＫ、ＴＭＳ、ＴＤＩ、ＴＤＯ、ｎＴＲＳＴの５つの信号をいう。ｎＳＲＳＴ信号は、ＣＰＵデバッグ用のリセット信号である。これらの信号に基づく種々の動作は後述する。半導体集積回路２０は、マスタとして機能するとともにリセット信号ＲＳＴ１ないしＲＳＴ３を出力する複数のマクロ２１ないし２３、端子４１ないし４４を介してＪＴＡＧ信号を受信するとともにリセット信号ＲＳＴ４を出力するデータレジスタ２４、同じくＪＴＡＧ信号を受信し、受信したＪＴＡＧ信号に基づきデータレジスタ２４などの制御を行うＴＡＰ２５、ＲＳＴ１ないし３を受信するＡＮＤゲート２６、ＡＮＤゲート２６の出力を受信するとともに、データレジスタ２５からのリセット信号ＲＳＴ４を受信するＡＮＤゲート２７、ＡＮＤゲート２７の出力およびデバッガ１０が出力するｎＳＲＳＴ信号受信するとともに、端子４７を介して半導体集積回路２０が受信する外部からのリセット信号を受信するＡＮＤゲート２８を有するＳＯＣ（System on chip）である。ＡＮＤゲート２８はリセット信号ＲＳＴ５を出力する。
【００１０】
ここで、図１の半導体集積回路２０が有するマクロ２９ないし３１は、それぞれマクロ２１ないし２３と同一である。マクロ２１ないし２３はそれぞれマスタとして機能するマクロであるが、マクロ２１ないし２３のいずれかに対するスレーブとして機能するマクロにもなる。マスタであるマクロ２１が同じくマスタであるマクロ２２やマクロ２３に対して制御信号、例えばマクロ２２やマクロ２３をリセット状態にするリセット信号を送信する場合もある。これを、図１は、マクロ２１がローアクティブであるリセット信号ＲＳＴ１を出力し、このリセット信号ＲＳＴ１がＡＮＤゲート回路２６ないし２８を介してマクロ２２と同一のマクロを示すマクロ３０あるいはマクロ２３と同一のマクロを示すマクロ３１に到達することで表現する。マクロ２２とマクロ３０は同一であって、マクロ２３とマクロ３１は同一であるからである。また、マクロ２１は自分自身を制御する場合がある。自らを上述のリセット状態にする場合がある。これを、図１は、マクロ２１がＲＳＴ１信号を出力し、このＲＳＴ１信号がＡＮＤゲート２６ないし２８を介してマクロ２９に到達することで表現する。マクロ２１とマクロ２９は同一のマクロを表しているからである。なお、ここでいうリセット状態は、マクロの内部信号や出力信号などの特定の一状態（ハイレベル又はローレベル）を示す。マクロがアクティブな信号値を示すリセット信号を受信している場合、マクロの内部信号や出力信号はアクティブなリセット信号に対応した状態を保ち続ける。
【００１１】
図１に示すＴＡＰ２５は、ＩＥＥＥ１１４９．１のＪＴＡＧ規格に基づく動作を行う制御部であり、ＴＡＰコントローラ２５１と命令レジスタ２５２とを有する。ＴＡＰコントローラ２５１はデバッガから、ＪＴＡＧ信号の内のＴＣＫ、ＴＭＳ、ｎＴＲＳＴを受信する。ＴＣＫはクロック信号であり、ＴＡＰコントローラ２５１はこのＴＣＫに同期して動作する。ＴＭＳはＴＡＰコントローラ２５１の具体的な動作を制御する信号である。ＴＡＰコントローラ２５１は、ＴＣＫの立ち上がりでデバッガが出力するＴＭＳを取得する。命令レジスタ２５２は、ＪＴＡＧ信号の内、ＴＤＩ信号とＴＤＯ信号を受信する。ＴＤＩ信号は、デバッガがＴＡＰ２５の命令レジスタ２５２およびデータレジスタ２４に出力する信号である。例えばＴＤＩ信号は、シリアルなビット列である。デバッガは、ＴＡＰコントローラ２５１に所望の動作を実行させるべく、命令コードをＴＡＰコントローラ２５１に送信する。デバッガ１０はこの命令コードをＴＤＩ信号として出力する。ＴＡＰコントローラ２５１は係る命令コードを命令レジスタ２５２に取り込み、取り込んだ命令コードに対応する命令を解釈して実行する。ＴＤＯ信号は、データレジスタ２４および命令レジスタ２５２からの出力信号である。例えば、ＴＡＰコントローラ２５１が実行した命令に基づく演算結果が、データレジスタ２４からＴＤＯ信号としてデバッガに出力される。
【００１２】
データレジスタ２４は、ＴＡＰ２５がＪＴＡＧ信号に基づき制御するレジスタである。データレジスタ２４は、内部にステータスレジスタ２４１（以下Ｓレジスタという）と、ヒストリレジスタ２４２（以下、Ｈレジスタという）を含む。図１では、Ｓレジスタ３２およびＨレジスタ３３が、データレジスタ２４が含むＳレジスタ２４１およびＨレジスタ２４２とは別個に記載されている。しかし、Ｓレジスタ２４１とＳレジスタ３２、Ｈレジスタ２４２とＨレジスタ３３は同一のレジスタである。前述したとおり、図１はマクロ２１ないし２３とマクロ２９ないし３１がそれぞれ同一であることを示している。それは、マクロ２１ないし２３はそれぞれがマスタとして機能するものの、これらのマクロのいずれかに対してスレーブとして機能することがあるからである。この表記法に従い、データレジスタ２４が含むＳレジスタ２４１およびＨレジスタ２４２と、マクロ２９ないし３１と接続するＳレジスタ３２およびＨレジスタ３４は同一であるものとする。すなわち、Ｓレジスタ３２およびＨレジスタ３２も、データレジスタ２４が含むレジスタの一種である。
【００１３】
データレジスタ２４は，コア・ロジックと入出力ピンの境界に配置されるバウンダリスキャンレジスタ、デバッガが出力したＴＤＩ信号をそのままＴＤＯ信号としてバイパスする経路を構成するバイパスレジスタ、及びその他のデータレジスタを含む。データレジスタ２４はオプションとして更に異なる用途を持つレジスタを含む場合がある。たとえばデータレジスタ２４は、デバイス及び製造メーカを識別するためのIDcodeレジスタなどを含む場合がある。本実施の形態では、上述したように、データレジスタ２４はＳレジスタ３２及びＨレジスタ３３を含む。（これらはＳレジスタ２４１およびＨレジスタ２４２とそれぞれ同一）Ｓレジスタ３２とＨレジスタ３３は、ともにＪＴＡＧ信号に基づきＴＡＰ２５が制御する。Ｓレジスタ３２およびＨレジスタ３３の役割については後述する。
【００１４】
ここで、図２は、ＴＡＰ２５が有するＴＡＰコントローラ２５１の動作とＴＭＳとの関係を示している。図２はＴＡＰコントローラ２５１の動作状態の遷移を示したステートマシンであり、ＴＡＰコントローラ２５１の動作状態はＴＣＫの立ち上がりに応答してＴＡＰコントローラ２５１が取得したＴＭＳ信号に基づき遷移する。
【００１５】
Test-Logic-Resetでは、全てのテストロジックがディスエーブルとなり、ＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）の通常動作がイネーブルとなる。ＴＡＰコントローラ２５１は、初期のステートに関わらず、信号レベルがＨｉｇｈであるＴＭＳをＴＣＫの立ち上がりに応じて５回受信することでTest-Logic-Resetステートに遷移する。ｎＴＲＳＴはＴＡＰコントローラ２５１に対するリセット信号であるが、上述の方法に従ってＴＡＰコントローラ２５１の動作状態はTest-Logic-Resetステートに遷移するため、ｎＴＲＳＴはオプションである。
ＴＡＰコントローラ２５１の動作状態がRun-Test-Idleである場合、ＴＡＰコントローラ２５１は、特定の命令が存在するときのみＩＣ内のテストロジックをアクティブにする。それ以外の場合、ＴＡＰコントローラ２５１は、ＩＣ内のテストロジックをアイドル状態にする。
【００１６】
ＴＡＰコントローラ２５１の動作状態は、Select-DR-Scanを介してCapture-DR又はSelect-IR-Scanステートに進む。
【００１７】
ＴＡＰコントローラ２５１の動作状態はSelect-IR-Scanから、Capture-IRまたはTest-Logic-Resetステートに遷移する。
【００１８】
Capture-IRでは、ＴＣＫの立ち上がりエッジで、命令レジスタ２５２に対して固定値のパターンがパラレルに読み込まれる。
【００１９】
Shift-IRでは、命令レジスタ２５２がＴＣＫの立ち上がりに応答して、ＴＤＩ信号であるシリアルなビット列を順次取得する。デバッガは命令コードをＴＤＩ信号として出力し、命令レジスタ２５２はデバッガが出力した命令コードを取得する。
【００２０】
Exit1-IRでは、ＴＡＰコントローラ２５１はPause-IRステート又はUpdate-IRステートのいずれに遷移させる。
【００２１】
Pause-IRでは、ＴＡＰコントローラ２５１は命令レジスタ２５２でのシフトを一時的に停止することができる。
【００２２】
Exit2-DRでは、ＴＡＰコントローラ２５１は動作状態をShift-IRステート又はUpdate-IRステートのいずれに遷移させる。
【００２３】
Update-IRでは、ＴＡＰコントローラ２５１は、命令レジスタ２５２がShift-IRステートで記憶した命令コードに対応する命令を実行する。
【００２４】
Capture-DRでは、ＴＣＫの立ち上がりエッジで、データが現在の命令で選択されたデータレジスタにパラレルに読み込まれる。
【００２５】
Shift-DR、Exit1-DR、Pause-DR、Exit2-DR、及びUpdate-DRは、命令パスのShift-IR、Exit1-IR、Pause-IR、Exit2-IR、及びUpdate-IR ステートと同様である。
【００２６】
以上の通り、ＴＡＰコントローラ２５１は１６種のステートを有するステートマシンであり、ＴＭＳ信号及びＴＣＫ信号により動作状態が遷移する。そして、ＴＡＰコントローラ２５１はデータレジスタや命令レジスタ２５２及びマルチプレクサなどを制御してＪＴＡＧ機能を実現する。ＴＲＳＴ（Test Reset）信号はＴＡＰコントローラ２５１を初期化する信号でオプションであり、端子４５を介してＴＡＰコントローラ２５１に入力される。ＴＭＳが"Ｈ"状態で、ＴＣＫの立ち上がりエッジを５回検出した場合もＴＡＰコントローラ２５１２５が初期化される。
【００２７】
上記ＴＤＩ、ＴＤＯ、ＴＭＳ、ＴＣＫなどのＪＴＡＧ信号は、端子４１〜４４を介して制御回路２５０、マクロ２１〜２３に入力される。さらに、ＣＰＵデバッグ用のリセット信号ｎＳＲＴ信号が端子４６を介して、また外部からのリセット信号が端子４７を介して入力される。
【００２８】
次に、デバッガ１０が半導体集積回路２０に含まれるマクロをデバッグする際のデバッガ１０および半導体集積回路２０の動作ついて説明する。デバッガ１０はマクロ（Ｍ０）２１（すなわちマクロ２９）をデバッグするものとして説明する。なお、図１のマクロ２２および２３、マクロ３０および３１に向かう点線の矢印は、マクロ２２および２３、すなわちマクロ３０および３１がデバッグ対象ではないことを示している。ここで、デバッガ１０がマクロ２１をデバッグしている際に、他のマクロがマクロ２１に対して何らかの制御信号を送信し、その制御信号を受信したマクロ２１の状態が変化したとする。具体的にはマクロ２１の内部信号や出力信号の状態が変化したとする。以下では、具体例として、この制御信号をリセット信号であるとする。つまり、デバッガ１０がマクロ２１をデバッグしている際に、例えばマクロ２２がリセット信号ＲＳＴ２を出力し、そのリセット信号ＲＳＴ２をマクロ２９が受信したとする。この場合、デバッガ１０がマクロ２１をデバッグしているにも関わらず、マクロ２１の状態がデバッガ１０の制御とは無関係にリセット状態となる。デバッガ１０は、自身が把握しているマクロ２１の状態とマクロ２１の実際の状態とが不一致となったことを検知する。この場合、デバッガ１０は、自身が把握しているマクロ２１の状態とマクロ２１の実際の状態とを一致させる処理を行う必要がある。係る処理を行わないと、デバッガ１０はマクロ２１のデバッグを再開することができず、デバッガ１０が行うデバッグは異常終了してしまうからである。そこで、次にデバッガ１０は、Ｓレジスタ３２およびＨレジスタ３３が記憶する値を参照する処理を実行する。
【００２９】
ここで、Ｓレジスタ３２およびＨレジスタ３３の基本的な機能および動作について、概念的に説明しておく。なお、ＪＴＡＧ信号やＴＡＰコントローラ２５１と関係した具体的な動作は後述する。Ｓレジスタ３２は、デバッグ対象であるマクロ２１がリセット信号を受信しているか否かを記憶する。具体的にはＡＮＤゲート２８の出力であるＲＳＴ５を受信し、マクロ２１ないしマクロ２３、データレジスタ２４、デバッガ１０、その他の外部のそれぞれがマクロ２９（すなわちマクロ２１）に対して、ＲＳＴ１ないし４、ｎＳＲＳＴ、外部からのリセット信号のそれぞれを出力したか否かを記憶する。例えば各リセット信号は信号値"０"でアクティブとなるとする。その場合、ＲＳＴ１ないし４、ｎＳＲＳＴ、外部からのリセット信号のいずれか一が"０"となれば、その信号値はＡＮＤゲート２６、２７、２８を介してリセット信号ＲＳＴ５となってマクロ２９に到達する。Ｓレジスタ３２はその信号値が"０"となったリセット信号ＲＳＴ５を受信し、記憶する。その後、ＲＳＴ１ないし４、ｎＳＲＳＴ、外部からのリセット信号のすべてが解除された場合、すなわちこれらの信号値が"１"となった場合には、ＲＳＴ５は"１"となる。Ｓレジスタ３２は、この"１"となったＲＳＴ５の値を、以前に記憶した"０"に変えて、新たに記憶する。このように、Ｓレジスタ３２は、マクロ２１が現在において、リセット状態であるか否かを記憶するレジスタである。
【００３０】
一方、Ｈレジスタ３３は、デバッグ対象であるマクロ２１が、Ｓレジスタが記憶するマクロ２１のリセット信号の受信開始より前に、ＲＳＴ１ないし、ｎＳＲＳＴ、外部からのリセット信号のいずれかを受信したことがあるか否かを記憶する。すなわちＨレジスタ３２は、マクロ２１が過去にリセット状態となったことがあるか否かの履歴を記憶するレジスタである。例えば各リセット信号は信号値"０"でアクティブとなるとする。その場合、Ｓレジスタが記憶するマクロ２１のリセット信号の受信開始より前、すなわち過去にＲＳＴ１ないし４、ｎＳＲＳＴ、外部からのリセット信号のいずれか一が"０"となれば、その信号値はＡＮＤゲート２６、２７、２８を介してリセット信号ＲＳＴ５となってマクロ２９に到達していたことになる。この場合、マクロ２１は、過去に上述の各リセット信号に応答してリセット状態になっていたことになる。Ｈレジスタ３３はその信号値が"０"となったリセット信号ＲＳＴ５を受信し、記憶する。その後、ＲＳＴ１ないし４、ｎＳＲＳＴ、外部からのリセット信号のすべてが解除された場合、すなわちこれらの信号値が"１"となった場合には、Ｈレジスタ３３は以前に記憶したＲＳＴ５の信号値"０"を"１"に書き換えることを行わない。Ｈレジスタ３３は信号値"０"を保持し続ける。
【００３１】
再びデバッガ１０がマクロ２１のデバッグを行う際の動作について説明する。デバッガ１０は上述の通り、Ｓレジスタ３２およびＨレジスタ３３を参照する。デバッガ１０はＪＴＡＧ信号の内のＴＤＩ信号をＴＡＰ２５が有する命令レジスタ２５２に出力する。この場合のＴＤＩ信号は命令コードである。命令コードはデータレジスタ２４に含まれるＳレジスタ３２およびＨレジスタ３３の記憶値をデバッガ１０に対して出力する動作を示す。命令レジスタ２５２は、ＴＡＰ２５に含まれるＴＡＰコントローラ２５１の動作状態がShift-IRとなった場合、受信するＴＣＫの立ち上がりに応じてデバッガ１０が出力した命令コードを取得する。その後、ＴＡＰコントローラ２５１の動作状態がUpdate-IRに遷移した場合、ＴＡＰ２５は、命令レジスタ２５２が記憶している命令コードに対応する命令を実行する。すなわち、ＴＡＰ２５は、データレジスタ２４に含まれるＳレジスタ３２およびＨレジスタ３３が記憶する信号値を、それぞれデバッガ１０に出力する。この場合、Ｓレジスタ３２およびＨレジスタ３３が出力する信号値はそれぞれＴＤＯ信号である。デバッガ１０はＴＤＯ信号として、Ｓレジスタ３２およびＨレジスタ３３が記憶している値を受信する。
【００３２】
デバッガ１０はＳレジスタ３２およびＨレジスタ３３が記憶している値を受信する。この動作により、デバッガ１０はデバッグ対象であるマクロ２１が過去にリセット状態になったことがあるか否か、そして現在、リセット状態であるか否かを知ることができる。ここで、デバッガ１０は取得したＳレジスタ３２およびＨレジスタ３３の値に応じて以下の処理を行う。まず、デバッガ１０が取得したＳレジスタ３２の値が"１"で、取得したＨレジスタ３３の値が"０"であった場合を考える。この場合、デバッガ１０は、マクロ２１は現在はアクティブなリセット信号を受信しておらず、リセット状態ではないものの、マクロ２１は過去にリセット状態となったことがあることを知る。デバッガ１０は、すぐにマクロ２１のデバッグを再開するための処理を行う。なお、このデバッガがデバッグを再開するための処理は、使用するデバッガの仕様などに応じて異なる。すなわち、各デバッガメーカーのデバッガごとに、その処理は異なる。例えばデバッグを再開する処理として、デバッガ自身が内部で持っているマクロ２１の情報と過去にマクロ２１が受信したリセット信号により変化したマクロ２１の情報の一致を試みる処理が考えられる。デバッガ１０は、このデバッグの再開に必要な処理が完了した後、再びマクロ２１のデバッグを開始する。
【００３３】
一方、デバッガ１０が取得したＳレジスタ３２の値が"０"で、取得したＨレジスタ３３の値が"１"または"０"であった場合を考える。この場合、デバッガ１０は、デバッグ対象であるマクロ２１が現在、リセット信号を受信しておりリセット状態であることを知る。したがって、デバッガ１０はまず、マクロ２１がリセット信号を受信しなくなるまで待つ。この動作を行うため、デバッグ１０はＳレジスタ３２の値を取得し続けなければならない。そこでデバッガ１０は、例えば以下の動作を行う。デバッガ１０は再度、命令レジスタ２５２に対してＴＤＩ信号を送信する。この場合のＴＤＩ信号も命令コードである。命令レジスタ２５２は同様に係るＴＣＫに応じて命令コードを取得する。その後ＴＡＰ２５は、命令レジスタ２５２が新たに取得した命令コードに対応する命令を実行する。この場合、ＴＡＰ２５は、Ｓレジスタ３２が記憶している値が"０"から"１"に変化するまで、係るＳレジスタ３２の値をデバッガ１０に対して出力し続ける。デバッガ１０が受信するＳレジスタ３２の値は、この場合もＴＤＯ信号としてデバッガ１０に対して出力される。デバッガ１０は、Ｓレジスタ３２の値を参照し続け、Ｓレジスタ３２の値が"０"から"１"に変化するまで待つ。そして、ある時点で、デバッガ１０が受信するＳレジスタ３２の値が"０"から"１"に変化したとする。その後デバッガ１０は、すぐにマクロ２１のデバッグを再開するための処理を行う。係る処理の完了後、デバッガ１０はマクロ２１のデバッグを再開する。
【００３４】
デバッガ１０は、マクロ２１の状態がデバッガ１０の制御とは無関係にリセット状態となりデバッグをそのまま継続することができなくなった場合において、以上の処理を行う。デバッガ１０は以上の処理を行うことで、再びデバッグを開始することができる。すなわち、マクロ２１の状態がデバッガ１０の制御とは無関係にリセット状態となっても、デバッグが異常終了することはない。
【００３５】
図３は、Ｓレジスタ３２およびＨレジスタ３３の動作をＪＴＡＧ信号に応じたＴＡＰ２５の動作を考慮せず、概念的に示したものである。図３において、"Ｓ"はＳレジスタ３２が記憶している値であり 、"Ｈ"はＨレジスタ３３が記憶する値を示す。ＴＣＫはクロック信号であり、Ｍａｓｔｅｒ  Ｒｅｓｅｔはデバッガ１０がデバッグするマクロが受信するリセット信号である。このリセット信号は信号がローレベルのときにアクティブとなる。時点ｔ１に示すように、Ｓレジスタ３２、Ｈレジスタ３３は、初期値としてそれぞれ"１"を記憶する。時点ｔ２でＭａｓｔｅｒ  Ｒｅｓｅｔ信号がローレベルとなり、デバッグ対象のマクロはリセット状態に遷移する。このとき、Ｓレジスタ３２が記憶する値は"０"に変化する。Ｈレジスタ３３が記憶する値は時点ｔ２では変化しない。時点ｔ３では、ＭａｓｔｅｒＲｅｓｅｔ信号はローレベルであり、デバッグ対象であるマクロはリセット状態である。この場合、Ｓレジスタ３２は"０"を記憶し続ける。
【００３６】
一方、Ｈレジスタ３３は、時点ｔ２で、ＭａｓｔｅｒＲｅｓｅｔ信号がハイレベルからローレベルに変化したことに応答し、記憶する値を"１"から"０"と更新する。時点ｔ３から時点ｔ４までの間のＳレジスタ３２およびＨレジスタ３３の動作は以下の通りである。Ｓレジスタ３２は、クロックの立ち上がりごとに、Ｍａｓｔｅｒ  Ｒｅｓｅｔ信号の値を記憶する。時点ｔ３からｔ４まで、Ｍａｓｔｅｒ  Ｒｅｓｅｔ信号はローレベルであり続けるため、Ｓレジスタ３２は"０"を記憶し続けることになる。一方、Ｈレジスタ３３は、時点ｔ２でＭａｓｔｅｒＲｅｓｅｔ信号がローレベルに変化してデバッグ対象マクロがリセット状態となったことに応答して時点ｔ３で記憶した値"０"をそのまま保持する。
【００３７】
時点ｔ４でＭａｓｔｅｒＲｅｓｅｔ信号がローレベルからハイレベルに変化する。つまり、デバッグ対象マクロはリセット状態ではなくなる。この場合、Ｓレジスタ３２は、クロックの立ち上がりごとにＭａｓｔｅｒＲｅｓｅｔ信号の値を記憶するので、記憶する値を"０"から"１"に更新する。一方、Ｈレジスタ３３は、時点ｔ２でＭａｓｔｅｒＲｅｓｅｔ信号がローレベルに変化してデバッグ対象マクロがリセット状態となったことに応答して時点ｔ３で記憶した値"０"をそのまま保持する。
【００３８】
時点ｔ５から時点ｔ６までの間は、ＭａｓｔｅｒＲｅｓｅｔ信号はハイレベルで一定である。したがって、Ｓレジスタ３２およびＨレジスタ３３が記憶している値は変化しない。
【００３９】
時点ｔ６で、例えばデバッグ対象マクロをデバッグするマクロが、Ｓレジスタ３２およびＨレジスタ３３の値を参照したとする。この"参照"は前述したフローに従い行われる。この場合、時点ｔ６以降、再びＭａｓｔｅｒ  Ｒｅｓｅｔ信号がローレベルに変化するまでＳレジスタ３２およびＨレジスタ３３が記憶する値は変化しない。ＭａｓｔｅｒＲｅｓｅｔ信号が再びローレベルに変化した後の動作は、これまでに説明した動作と同様である。
【００４０】
一方、時点ｔ６で、デバッガがＨレジスタ３３の値を初期化する動作を行うこともある。Ｈレジスタ３３は、任意のタイミングで記憶する値を初期化することができる機能を有することになる。具体的には、例えば以下のような場合にこの初期化動作が行われる。デバッガが、Ｓレジスタ３２およびＨレジスタ３３が記憶する値を参照し、その後でデバッグの再開に必要な処理を行ったとする。そしてデバッガがマクロのデバッグを再開したとする。そうすると、Ｈレジスタ３３が記憶する履歴情報はもはや不要である。したがって、デバッガはＨレジスタ３３が記憶する値を初期化する。例えば図１に照らして考えると、デバッガ１０が、ＴＡＰ２５に対して命令コードを送信し、ＴＡＰ２５がＨレジスタ３３の値を初期化するようにしてもよい。
【００４１】
ここまで、デバッガ１０が、ＴＡＰ２５、そしてＳレジスタ３２、Ｈレジスタ３３と協働して行うマクロ２１のデバッグについて説明してきた。以下では、ＴＡＰ２５がＪＴＡＧ規格に基づく動作を行うという観点をより詳細に考慮した場合における、Ｓレジスタ３２およびＨレジスタ３３の動作について説明する。ＴＡＰ２５は、図２に示したＴＡＰコントローラ２５１の動作状態の遷移に従って種々の制御を行う。本実施の形態においては、ＴＡＰ２５がデバッガ１０からＳレジスタ３２およびＨレジスタ３３が記憶する値を出力する命令を受けた場合、ＴＡＰコントローラ２５１がＣａｐｔｕｒｅ−ＤＲステートであるときのＳレジスタ３２およびＨレジスタ３３の値をデバッガに出力する。一方、ＴＡＰ２５は、ＴＡＰコントローラ２５１の動作状態がＵｐｄａｔｅ−ＤＲであるときのＲＳＴ５の値をＨレジスタ３３に書き込む。
【００４２】
ＴＡＰ２５は、Ｓレジスタ３２およびＨレジスタ３３が記憶する値の操作を、ＴＡＰコントローラ２５１の特定の動作状態のときに行っているが、Ｈレジスタ３３が記憶する値の更新に関しては以下の問題が発生する。ＴＡＰコントローラ２５１は動作状態が、Capture-DR, Shift-DR, Exit1-DR, Pause-DR, Exit2-DR, Update-DRの順番に遷移し、Update-DRの動作状態が終了した後、再びCapture-DRに戻って同様に遷移する場合を考える。 そして、例えばCapture-DRステートにおいて、リセット信号ＲＳＴ５の値が"１"から"０"になり、Capture-DR ステート後であってUpdate-DRステートより前にリセット信号ＲＳＴ５が"０"から"１"に変化した場合を考える。ＴＡＰ２５は、ＴＡＰコントローラ２５１の動作状態がUpdate-DRステートであるときのＲＳＴ５の値をＨレジスタ３３に書き込む。そうすると、Ｈレジスタ３３は、過去に一度ＲＳＴ５が"０"になったという履歴を記憶することなく、信号値"１"を記憶する。Ｈレジスタ３３がデバッグ対象マクロのリセット信号の受信履歴を正しく記憶することができない場合、デバッガ１０はデバッグを継続することができなくなり、デバッグが異常終了することになる。
【００４３】
図５は、この問題を解決することができるＨレジスタ３３の構成を示している。実際にデバッグ対象であるマクロがリセット状態になったことがあるか否かの履歴を記憶するのはフリップフロップＦＦｄである。フリップフロップFFaとFFbは、図１のＲＳＴ５信号をＴＣＫに同期させる役割を担うレジスタである。図５に示すＨレジスタ３３は、その他にＡＮＤ回路５１、５２、５４、５５及びセレクタ５３、５６を有する。FFcはＴＡＰコントローラ２５１の動作状態がCapture‐DRのときのＦＦｂの出力信号の値を保持する。このＦＦｂの出力信号の値は、ＲＳＴ５の値である。なお、Ｓレジスタ３２はFFaの前段に位置し、ＲＳＴ５の変化を記憶する。Ｓレジスタ３２とＨレジスタ３３の間にはFFaとFFbが存在するため、Ｓレジスタ３２が記憶値を更新した後、２クロック遅れてＨレジスタは記憶値を更新することになる。
【００４４】
このとき、ＴＡＰコントローラ２５１の動作状態がShift−DR、Exit1−DR、Exit2−DR、Pause−DRである期間に、ＦＦｂの出力信号であるＲＳＴ５の信号値が"１"から"０"に変化すると、FFcは"０"を記憶する。一度FFcが"０"を記憶した場合、その後にＦＦｂの出力信号が"０"から"１"に変化したとしても、FFcは"０"を保持する。一方、ＡＮＤゲート５４は、ＦＦｃの出力が"１"であって、ＴＡＰコントローラ２５１の動作状態がUpdate‐DRの場合に"１"を出力し、それ以外の場合には"０"を出力する。一方、FFdは、ＴＡＰコントローラ２５１の動作状態がShift−DR、Exit1−DR、Exit2−DR、Pause−DRである期間にＦＦｂの出力信号であるＲＳＴ５の信号値が"１"から"０"に変化したことに応答して、"０"を記憶している。そして、FFcは"０"をＡＮＤゲート５４にを出力する。
【００４５】
そうすると、仮にＴＡＰコントローラ２５１の動作状態がShift−DR、Exit1−DR、Exit2−DR、Pause−DRである期間にＦＦｂの出力信号が"０"から"１"に変化し、その後にＴＡＰコントローラ２５１の動作状態がUpdate-DRになった場合であっても、ＡＮＤゲート５４の出力は"０"である。従って、セレクタ５６はＦＦｂの出力信号をＦＦｄに伝達するのではなく、以前にFFdが記憶した値であるＡＮＤゲート５５の出力信号をFFdに伝達する。したがって、FFdは記憶値"０"を保持することができる。すなわち、図４の実線で示すように、クリアタイミングではＨレジスタ３２の更新（リセット履歴情報のクリア）は行なわれない。これによりCaptureDRからUpdateDR前までにノン・アクティブになったリセットも履歴として残すことが可能となる。
【００４６】
本実施の形態においては、複数のマスタを有するシステム及びＳＯＣにおいて、デバッグ対象マクロ（ターゲット）であるマクロ２１に対してデバッガ１０の管轄外でデバッグ対象マクロがリセットされたり、又はデバッグ対象マクロ２１自身が自身をリセットしたり、ボタンスイッチ等の外部からリセットされたり、又は他のマスタがデバッグ対象マクロ２１をリセットしても、デバッガ１０は、Ｓレジスタ３２及びＨレジスタ３３により、現在のリセット状態及び過去のリセット状態を監視することができる。ここで、リセットによるリセット対象リソースは、マスタ内外に存在するデバッガ１０が使用しているリソース、例えばブレークポイント、ウォッチポイント、ステータス・コントロールレジスタ、ＪＴＡＧチェーン長が変化するようなシステム等である。
【００４７】
よって、デバッガ１０は、デバッグ対象マクロの状態を見失っても次のアクションを決定することができるので、ハングアップ（異常終了）することなく、デバッグ対象ターゲットの再設定が可能で、デバッガによるデバッグを続行することができる。
【００４８】
また、ＪＴＡＧチェーンを使用してリセット監視状態をリード・ライトすることができるため、デバッグ対象マクロが自分自身をリセットしても、そのリセット状態を知ることができるため、デバッガの利用自由度を向上することができる。
【００４９】
なお、本発明は上述した実施の形態のみに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【図面の簡単な説明】
【００５０】
【図１】本発明の実施の形態にかかる半導体集積回路を示す図である。
【図２】ＴＡＰコントローラ２５１のステートを示す図である。
【図３】本発明の実施の形態にかかるリセットの監視方法を説明するための図である。
【図４】ＴＡＰステートを説明する図である。
【図５】Ｈレジスタの構成を示す図である。
【符号の説明】
【００５１】
１０  デバッガ
２０  半導体集積回路
２１−２３  マスタ側マクロ
２４  レジスタ
２６、２７、２８  ＡＮＤ回路
２９−３１  スレーブ側マクロ
３２  Ｓレジスタ
３３  Ｈレジスタ
４１、４２、４３、４４、４５、４６、４７  端子
５１、５２、５４、５５  ＡＮＤ回路
５３、５６  セレクタ
２５０  制御回路
２５１  ＴＡＰコントローラ
２５２  命令レジスタ
【図１】
0005059532.tif 000002
【図２】
0005059532.tif 000003
【図３】
0005059532.tif 000004
【図４】
0005059532.tif 000005
【図５】
0005059532.tif 000006