(57)【要約】【課題】プログラムの実行を停止する際の遷移期間においてデバッグ動作が実行されることにより生じるパイプライン・ハザードを解消できるプロセッサを提供する。【解決手段】パイプライン方式にて命令を処理する命令処理部１０において当該処理が停止される場合、新たな命令の処理が停止されるとともに、既に開始された処理が完了したか否かを示す状態信号Ｓ１が出力される。この状態信号Ｓ１が命令処理部１０における処理の未完了状態を示す場合、デバッグ部２０によるデバッグ動作の実行がデバッグ制限部３０により制限される。すなわち、命令処理部１０への命令の入力を停止してからその停止前に既に開始された処理が完了するまでの間、命令処理部１０の動作の制御やその動作状態の記録などに関連するデバッグ動作が制限される。【選択図】図１
2008269390.tif 000002
【特許請求の範囲】
【請求項１】
一連の命令をパイプライン方式にて順次に処理し、当該処理を停止する場合は、新たな命令の処理を停止するとともに既に開始された処理が完了したか否かを示す状態信号を出力する命令処理部と、
入力されるコマンドに応じて、少なくとも前記命令処理部の動作の制御又は当該動作の状態の記録に関連するデバッグ動作を実行するデバッグ部と、
前記状態信号が未完了状態を示す場合、前記状態信号が完了状態を示すまで前記デバッグ部による前記デバッグ動作を制限するデバッグ制限部と
を有するプロセッサ。
【請求項２】
前記デバッグ部は、入力されるコマンドに応じて、少なくとも、前記命令処理部がアクセス対象とする記憶部にアクセスする、又は、前記一連の命令の中へ更に命令を挿入するメモリアクセス部を有し、
前記命令処理部は、一連の命令の処理を停止する場合、新たな命令の処理を停止する前に前記メモリアクセス部のアクセスに応じて開始された処理又は前記命令の挿入に応じて開始された処理を含む既に開始された処理が完了したか否かを示す前記状態信号を出力する、
請求項１に記載のプロセッサ。
【請求項３】
前記命令処理部は、
入力される一連の命令をパイプライン方式にて実行する命令実行部と、
前記命令実行部への命令の入力を制御する入力制御部と、
前記入力制御部により前記命令実行部への命令の入力が停止されると所定の停止信号を発生する信号発生部と、
前記信号発生部において発生した停止信号を初段に入力し、前記命令実行部における命令の実行段階の進行と同期して、当該入力した停止信号を順次に後段へ伝播する複数の遅延部を含んだ信号伝播部と、
前記停止信号が前記信号伝播部を伝播しているか否か検知し、当該検知結果を前記状態信号として出力する状態信号出力部とを含む、
請求項１に記載のプロセッサ。
【請求項４】
前記データ伝播部は、
前記命令実行部において一の命令を実行するための複数の段階に対応した複数の遅延部と、
前記停止信号が当該複数の遅延部を伝播した後、前記複数の段階による命令の実行に付随した処理が実行され得る一定の期間において、前記停止信号を更に伝播する拡張遅延部とを含む、
請求項３に記載のプロセッサ。
【請求項５】
前記命令処理部は、
入力される一連の命令をパイプライン方式にて実行する命令実行部と、
前記命令実行部への命令の入力を制御する入力制御部と、
前記入力制御部により前記命令実行部への命令の入力が停止されると、所定の停止命令を前記命令実行部に供給する停止命令供給部と、
前記命令実行部において前記所定の停止命令が実行中であるか否かを検知し、当該検知結果を前記状態信号として出力する状態信号出力部とを含む、
請求項１に記載のプロセッサ。
【請求項６】
前記デバッグ部は、命令の処理を停止しているときでも割り込み要求を受け付けるように前記命令処理部を制御可能であり、
前記デバッグ制限部は、前記状態信号が未完了状態を示す場合、前記状態信号が完了状態を示すまで前記命令処理部における前記割り込み要求の受付を制限する、
請求項１、２、３、４又は５の何れか一項に記載のプロセッサ。
【請求項７】
前記デバッグ部は、入力されるコマンドに応じて、少なくとも、前記命令処理部がアクセス対象とする記憶部にアクセスする、又は、前記一連の命令の中へ更に命令を挿入するメモリアクセス部を有し、
前記デバッグ制限部は、前記状態信号が未完了状態を示す場合、前記状態信号が完了状態を示すまで前記メモリアクセス部による前記アクセス及び前記命令の挿入を制限する、
請求項１、２、３、４又は５の何れか一項に記載のプロセッサ。
【請求項８】
前記デバッグ部は、命令の処理を停止しているときでも割り込み要求を受け付けるように前記命令処理部を制御可能であり、
前記命令処理部は、命令の処理を停止しているときに前記メモリアクセス部による前記アクセス又は前記命令の挿入が生じた場合、当該アクセスに応じた処理が完了したか否か又は当該挿入した命令に応じた処理が完了したか否かを示す前記状態信号を出力し、
前記デバッグ制限部は、前記状態信号が前記メモリアクセス部のアクセスに応じた処理の未完了又は前記挿入した命令に応じた処理の未完了を示す場合、前記状態信号が完了状態を示すまで前記命令処理部における前記割り込み要求の受付を制限する、
請求項７に記載のプロセッサ。
【請求項９】
前記デバッグ部は、前記命令処理部における命令の実行状態を示すステートマシンを有し、
前記デバッグ制限部は、前記状態信号が未完了状態を示す場合、前記状態信号が完了状態を示すまで前記デバッグ部における前記ステートマシンのステートの更新を制限する、
請求項１、２、３、４又は５の何れか一項に記載のプロセッサ。
【請求項１０】
前記デバッグ部は、前記命令処理部における処理の停止原因に関わる情報を記憶する記憶部を有し、
前記デバッグ制限部は、前記状態信号が未完了状態を示す場合、前記状態信号が完了状態を示すまで前記デバッグ部における前記記憶部の記憶情報の更新を制限する、
請求項１、２、３、４又は５の何れか一項に記載のプロセッサ。
【請求項１１】
前記デバッグ部は、前記デバッグ動作として、少なくとも前記命令処理部における処理の停止又は再開を制御し、
前記デバッグ制限部は、前記状態信号が未完了状態を示す場合、前記状態信号が完了状態を示すまで前記デバッグ部の制御による前記命令処理部の処理の停止又は再開を制限する、
請求項１、２、３、４又は５の何れか一項に記載のプロセッサ。
【請求項１２】
前記デバッグ部は、前記命令処理部により命令が処理されている期間であって、前記状態信号が未完了状態を示す場合を含む期間において、前記命令処理部の処理に関連する所定のイベントの発生を示す信号をカウントするカウント部を有する、
請求項１、２、３、４又は５の何れか一項に記載のプロセッサ。
【請求項１３】
前記カウント部は、入力される制御信号に応じて、少なくとも、前記状態信号が未完了状態を示す期間における被カウント信号のカウントを実行するか否かの選択、又は、前記状態信号が未完了状態を示す期間に入力される初期化信号に応じたカウント値の初期化を実行するか否かの選択が可能である、
請求項１２に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの実行を停止してその実行結果を検証するためのデバッグ機能を備えたプロセッサに係り、特に、デバッグ機能を備えたパイプライン方式のプロセッサに関するものである。
【背景技術】
【０００２】
マイクロコンピュータのプログラムのデバッグは、ＣＰＵ（central
processing unit）による命令の実行を種々の条件で一時的に停止させて内部のレジスタの値などを調べることにより進められる。デバッグに関連するＣＰＵの制御には、一般に専用のデバッグ回路（エミュレーション回路とも呼ばれる）が用いられる。
【０００３】
下記の特許文献には、デバッグ回路を備えたプロセッサについての発明が記載されている。
【特許文献１】特開２０００−０２９７３７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
デバッグ回路は、ＣＰＵによる命令の実行を停止する場合、まずＣＰＵ内部の命令レジスタに対する命令の供給を停止する。そして、通常は、この命令供給を停止してから一定のサイクルが経過した時点より、ＣＰＵの命令の実行が停止したものとしてその後の制御を行う。
【０００５】
ところが、パイプライン方式のＣＰＵにおいては、命令の供給を停止しても、その停止以前に命令レジスタへ供給された命令については、プログラムのフローに従って順次に実行される。すなわち、命令レジスタへの命令の供給を停止した後であっても、ＣＰＵにおいて命令が実行される期間（以下、遷移期間という）が存在する。この遷移期間において、ＣＰＵの命令の実行が停止したものとしてデバッグ回路によるＣＰＵの制御が行われると、次に述べるような種々の問題（パイプライン・ハザード）が生じる。
【０００６】
例えば、デバッグ回路は、ＣＰＵに対する割り込み要求を受け付けると、そのときデバッグ用の所定のレジスタに格納されているデバッグに関する情報（ＣＰＵの停止原因となったイベントの情報など）を一時的にスタックへ保存する。そして、割り込みルーチンから復帰した際、スタックへ保存しておいた当該デバッグ用の情報を元のレジスタへ戻す。
ところが、デバッグ回路が上述の遷移期間において割り込み要求（ＣＰＵの停止時においても優先的に処理されるハードウェア制御などの割り込み要求）を受け付けてしまうと、当該割り込みに応じてデバッグ関連の情報をスタックへ保存した後で、パイプラインに残存する命令が新たな停止イベント（データやアドレスが所定の値と一致する場合に発生する停止イベントなど）を発生させてしまう場合がある。この場合、新たに発生した停止イベントは、割り込み要求を受け付ける前にＣＰＵの命令レジスタへ供給された命令に由来するものであるにも係わらず、割り込みルーチン内でデバッグ用のレジスタを有効に書き換えてしまう。すなわち、割り込み要求より前に供給された命令に由来する停止イベントが、割り込みルーチン内で発生したかのようにレジスタの情報が書き換えられてしまうという問題が生じる。
【０００７】
本発明はかかる事情に鑑みてなされたものであり、その目的は、プログラムの実行を停止する際の遷移期間においてデバッグ動作が実行されることにより生じるパイプライン・ハザードを解消できるパイプライン方式のプロセッサを提供することにある。
【課題を解決するための手段】
【０００８】
本発明に係るプロセッサは、一連の命令をパイプライン方式にて順次に処理し、当該処理を停止する場合は、新たな命令の処理を停止するとともに既に開始された処理が完了したか否かを示す状態信号を出力する命令処理部と、入力されるコマンドに応じて、少なくとも前記命令処理部の動作の制御又は当該動作の状態の記録に関連するデバッグ動作を実行するデバッグ部と、前記状態信号が未完了状態を示す場合、前記状態信号が完了状態を示すまで前記デバッグ部による前記デバッグ動作を制限するデバッグ制限部とを有する。
上記プロセッサによれば、前記命令処理部においてパイプライン方式による命令の処理が停止される場合、新たな命令の処理が停止されるとともに、既に開始された処理が完了したか否かを示す状態信号が出力される。この状態信号が前記命令処理部における処理の未完了状態を示す場合、前記デバッグ部によるデバッグ動作の実行が前記デバッグ制限部により制限される。すなわち、前記命令処理部において新たな命令の処理を停止してから残りの命令の処理が完了するまでの間、前記命令処理部の動作の制御やその動作状態の記録に関連するデバッグ動作が制限される。
【０００９】
好適に、前記デバッグ部は、入力されるコマンドに応じて、少なくとも、前記命令処理部がアクセス対象とする記憶部にアクセスする、又は、前記一連の命令の中へ更に命令を挿入するメモリアクセス部を有してよい。前記命令処理部は、一連の命令の処理を停止する場合、新たな命令の処理を停止する前に前記メモリアクセス部のアクセスに応じて開始された処理又は前記命令の挿入に応じて開始された処理を含む既に開始された処理が完了したか否かを示す前記状態信号を出力してよい。
【００１０】
好適に、前記命令処理部は、入力される一連の命令をパイプライン方式にて実行する命令実行部と、前記命令実行部への命令の入力を制御する入力制御部と、前記入力制御部により前記命令実行部への命令の入力が停止されると所定の停止信号を発生する信号発生部と、前記信号発生部において発生した停止信号を初段に入力し、前記命令実行部における命令の実行段階の進行と同期して、当該入力した停止信号を順次に後段へ伝播する複数の遅延部を含んだ信号伝播部と、前記停止信号が前記信号伝播部を伝播しているか否か検知し、当該検知結果を前記状態信号として出力する状態信号出力部とを含んでよい。
上記の構成によれば、前記入力制御部によって前記命令実行部への命令の入力が停止されると、前記信号発生部において前記停止信号が発生する。当該発生した停止信号は、前記信号伝播部における前記複数の遅延部の初段に入力され、前記命令実行部における命令の実行段階の進行と同期して、後段の遅延部へ順次に伝播される。この信号伝播部において前記停止信号が伝播している間、前記状態信号出力部からは、前記命令実行部における命令の実行が完了していないことを示す前記状態信号が出力される。
前記データ伝播部は、例えば、前記命令実行部において一の命令を実行するための複数の段階に対応した複数の遅延部と、前記停止信号が当該複数の遅延部を伝播した後、前記複数の段階による命令の実行に付随した処理が実行され得る一定の期間において、前記停止信号を更に伝播する拡張遅延部とを含んでよい。
【００１１】
また、前記命令処理部は、入力される一連の命令をパイプライン方式にて実行する命令実行部と、前記命令実行部への命令の入力を制御する入力制御部と、前記入力制御部により前記命令実行部への命令の入力が停止されると、所定の停止命令を前記命令実行部に供給する停止命令供給部と、前記命令実行部において前記所定の停止命令が実行中であるか否かを検知し、当該検知結果を前記状態信号として出力する状態信号出力部とを含んでもよい。
上記の構成によれば、前記入力制御部によって前記命令実行部への命令の入力が停止されると、前記停止命令供給部によって前記命令実行部に所定の停止命令が供給される。この所定の停止命令が前記命令実行部において実行されている間、前記状態信号出力部からは、前記命令実行部における命令の実行が完了していないことを示す前記状態信号が出力される。
【００１２】
好適に、前記デバッグ部は、命令の処理を停止しているときでも割り込み要求を受け付けるように前記命令処理部を制御可能であってよく、前記デバッグ制限部は、前記状態信号が未完了状態を示す場合、前記状態信号が完了状態を示すまで前記命令処理部における前記割り込み要求の受付を制限してよい。
【００１３】
好適に、前記デバッグ制限部は、前記状態信号が未完了状態を示す場合、前記状態信号が完了状態を示すまで前記メモリアクセス部による前記アクセス及び前記命令の挿入を制限してよい。
更に、前記命令処理部は、命令の処理を停止しているときに前記メモリアクセス部による前記アクセス又は前記命令の挿入が生じた場合、当該アクセスに応じた処理が完了したか否か又は当該挿入した命令に応じた処理が完了したか否かを示す前記状態信号を出力してよい。前記デバッグ制限部は、前記状態信号が前記メモリアクセス部のアクセスに応じた処理の未完了又は前記挿入した命令に応じた処理の未完了を示す場合、前記状態信号が完了状態を示すまで前記命令処理部における前記割り込み要求の受付を制限してよい。
【００１４】
好適に、前記デバッグ部は、前記命令処理部における命令の実行状態を示すステートマシンを有してよく、前記デバッグ制限部は、前記状態信号が未完了状態を示す場合、前記状態信号が完了状態を示すまで前記デバッグ部における前記ステートマシンのステートの更新を制限してよい。
【００１５】
好適に、前記デバッグ部は、前記命令処理部における処理の停止原因に関わる情報を記憶する記憶部を有してよく、前記デバッグ制限部は、前記状態信号が未完了状態を示す場合、前記状態信号が完了状態を示すまで前記デバッグ部における前記記憶部の記憶情報の更新を制限してよい。
【００１６】
好適に、前記デバッグ部は、前記デバッグ動作として、少なくとも前記命令処理部における処理の停止又は再開を制御してよく、前記デバッグ制限部は、前記状態信号が未完了状態を示す場合、前記状態信号が完了状態を示すまで前記デバッグ部の制御による前記命令処理部の処理の停止又は再開を制限してよい。
【００１７】
好適に、前記デバッグ部は、前記命令処理部により命令が処理されている期間であって、前記状態信号が未完了状態を示す場合を含む期間において、前記命令処理部の処理に関連する所定のイベントの発生を示す信号をカウントするカウント部を有してよい。
また、前記カウント部は、入力される制御信号に応じて、少なくとも、前記状態信号が未完了状態を示す期間における被カウント信号のカウントを実行するか否かの選択、又は、前記状態信号が未完了状態を示す期間に入力される初期化信号に応じたカウント値の初期化を実行するか否かの選択が可能であってよい。
【発明の効果】
【００１８】
本発明によれば、命令処理部における新たな命令の処理を停止してからその停止前に既に開始された処理が完了するまでの間、命令処理部の動作の制御や動作状態の記録などに関連するデバッグ動作が制限されるため、命令処理部が実行状態から停止状態へ移行する遷移期間においてデバッグ動作が実行されることにより生じる種々の問題を解消することができる
【発明を実施するための最良の形態】
【００１９】
図１は、本発明の実施形態に係るプロセッサの構成の一例を示す図である。
図１に示すプロセッサは、命令処理部１０と、デバッグ部２０と、デバッグ制限部３０とを有する。
【００２０】
［命令処理部１０］
命令処理部１０は、入力される一連の命令をパイプライン方式にて順次に処理する。すなわち、一の命令を複数の段階で処理するとともに、その各段階の処理を独立に行うことで一連の命令を並列に処理する。
【００２１】
パイプライン方式による命令の処理の段階には、例えば、プログラム・メモリ（不図示）から命令をフェッチする段階（フェッチ段階）と、フェッチされた命令をデコードして実行する段階（実行段階）が含まれる。
【００２２】
フェッチ段階には、例えば、プログラム・メモリにフェッチ対象の命令のアドレスを渡す段階（プリフェッチ段階「ＰＲＥ−ＦＥＴＣＨ１」）、プログラム・メモリからの応答を待機する段階（プリフェッチ段階「ＰＲＥ−ＦＥＴＣＨ２」）、プログラム・メモリから命令を読み出して命令バッファ・キューＩＢＱに格納する段階（フェッチ段階「ＦＥＴＣＨ」）、命令バッファ・キューＩＢＱに格納される命令を事前にデコードして命令の境界の識別やパイプライン保護用のサイクルを挿入するかについての判定を行う段階（プリデコード段階「ＰＲＥ−ＤＥＣ」）が含まれる。
【００２３】
実行段階には、例えば、命令バッファ・キューＩＢＱから命令を読み出してデコードする段階（デコード段階「ＤＥＣＯＤＥ」）、デコード結果に基づいて処理対象のデータの格納アドレスを生成する段階（アドレス段階「ＡＤＤＲＥＳＳ」）、生成されたアドレスを不図示のデータ・メモリに渡す段階（アクセス段階「ＡＣＣＥＳＳ１」）、データ・メモリからの応答を待機する段階（アクセス段階「ＡＣＣＥＳＳ２」）、データ・メモリからデータを読み出す段階（リード段階「ＲＥＡＤ」）、データ・メモリから読み出したデータやレジスタに格納されるデータに演算を施す段階（実行段階「ＥＸＥ」）、演算結果のデータをデータ・メモリやレジスタに書き込む段階（ライト段階「ＷＲＩＴＥ１」，「ＷＲＩＴＥ２」）が含まれる。
【００２４】
また、命令処理部１０は、後述するデバッグ部２０の制御に従って命令の処理を停止する場合、新たな命令の処理を停止するとともに、既に開始された処理が完了したか否かを示す状態信号Ｓ１を出力する。例えば、命令処理部１０は、プログラムの実行を停止させるイベント（以下、ＨＡＬＴイベントという）が発生すると、新たな命令のデコードを停止するとともに、既に実行段階へ移行している命令に関して、その実行が完了したか否かを示す状態信号Ｓ１を出力する。
命令処理部１０の状態信号Ｓ１によってその状態が示される「既に開始された処理」には、プログラムのフローに従って開始された通常命令の処理のほか、後述するＤＭＡ部２３のアクセス要求に応じて開始された処理や、ＤＭＡ部２３によって通常命令の中に挿入される命令に応じて開始された処理などが含まれる。
【００２５】
命令処理部１０は、例えば図１に示すように、命令バッファ・キューＩＢＱと、入力制御部１１と、セレクタ１２と、命令実行部１３と、パイプライン保護部１４と、信号発生部１５と、信号伝播部１６と、状態信号出力部１７とを有する。
【００２６】
命令バッファ・キューＩＢＱは、プログラムを格納する不図示のメモリから順次に命令をフェッチして格納する。
【００２７】
セレクタ１２は、不図示の制御回路からの制御信号ＳＥＬに従って、命令バッファ・キューＩＢＱに格納された命令若しくは割り込み命令（ＩＮＴＲ）を選択し、命令実行部１３へ入力する。
【００２８】
入力制御部１１は、デバッグ部２０において出力される各種の制御信号に従って、命令実行部１３への命令の入力を制御する。すなわち、プログラムの実行中においては、命令バッファ・キューＩＢＱに格納される命令を命令実行部１３に供給し、プログラムの実行を停止する場合は、命令バッファ・キューＩＢＱから命令実行部１３への命令の供給を停止する。
【００２９】
また、入力制御部１１は、有効な割り込み要求が発生した場合、割り込み命令（ＩＮＴＲ）を命令実行部１３へ供給する。この割り込み命令（ＩＮＴＲ）に応じて、割り込みベクタが指すメモリ・アドレスから割り込みルーチンの命令がフェッチされ、命令バッファ・キューＩＢＱに格納される。入力制御部１１は、命令バッファ・キューＩＢＱに格納された割り込みルーチンの命令を、命令実行部１３へ供給する。
【００３０】
命令実行部１３は、入力制御部１１を介して入力される一連の命令をパイプライン方式にて実行する。例えば命令実行部１３は、「ＰＲＥ−ＤＥＣ」段階において、命令バッファ・キューＩＢＱから入力した命令をプリデコードし、この命令に対して「ＤＥＣＯＤＥ」，「ＡＤＤＲＥＳＳ」，「ＡＣＣＥＳＳ１，「ＡＣＣＥＳＳ２」，「ＲＥＡＤ」，「ＥＸＥ」，「ＷＲＩＴＥ１」，「ＷＲＩＴＥ２」の各処理を段階的に進行させることにより、命令に応じた種々の動作をする。また、順次入力される命令に対して各段階の処理を独立に実行することで、複数の命令を並列に実行する。
【００３１】
図１に示す命令実行部１３は、パイプラインの構成を模式的に表しており、レジスタＲＡ１，ＲＡ２，…，ＲＡｎと処理回路Ｕ１，Ｕ２，…，Ｕｎを有する。レジスタＲＡ１は、命令バッファ・キューＩＢＱから入力した命令に対するパイプラインの第１段階目の処理で利用されるデータを格納する。処理回路Ｕ１は、レジスタＲＡ１に格納されたデータに基づいて第１段階目の処理を実行し、その結果をレジスタＲＡ２に格納する。処理回路Ｕ１は、例えば「ＤＥＣＯＤＥ」段階の処理を実行する。
同様に、レジスタＲＡｉ（ｉは２からｎまでの整数を示す）は、パイプラインの第（ｉ−１）段階目の処理結果を格納し、処理回路Ｕｉは、レジスタＲＡｉに格納されたデータに基づいて第ｉ段階目の処理を実行する。
【００３２】
パイプライン保護部１４は、パイプラインにおいて２以上の命令が並列に実行されることに伴う各種の問題（パイプライン・ハザード）を回避するため、命令実行部１３における命令の各実行段階の進行を制御する。例えば、依存関係を有する命令同士が並列に実行されることによって命令の実行順序が乱れたり、同一のハードウェアに対して２以上の命令によるアクセスが同時に発生したりすることを回避するため、パイプラインの各段階に追加のサイクル（パイプライン保護サイクル）を挿入する。パイプライン保護部１４は、例えば「ＰＲＥ−ＤＥＣ」段階のプリデコード結果などに基づいてパイプライン・ハザードの発生を予測し、それを回避するためのパイプライン保護サイクルを決定してパイプラインの各段階に挿入する。
【００３３】
信号発生部１５は、入力制御部１１により命令の入力が停止されると、当該入力停止を示す停止信号ＳＨを発生して信号伝播部１６に入力する。例えばＨＡＬＴイベントが発生してプログラムの実行を停止する場合や、プログラムの実行停止中に生じた割り込みから復帰して再停止する場合などにおいて停止信号ＳＨを発生する。
【００３４】
信号伝播部１６は、命令実行部１３における命令の実行段階の進行と同期して、信号発生部１５が発生した停止信号ＳＨを順次に伝播する複数のレジスタＲＢ１，ＲＢ２，…，ＲＢｎを有する。
レジスタＲＢ１，…，ＲＢｎは、命令実行部１３におけるレジスタＲＡ１，…，ＲＡｎ（すなわちパイプラインの第１段階，…，第ｎ段階）にそれぞれ対応しており、例えば図１に示すように直列に接続される。初段のレジスタＲＢ１は、信号発生部１５において発生する停止信号ＳＨを入力し、命令実行部１３におけるパイプラインの第１段階の進行と同期して、停止信号ＳＨをレジスタＲＢ２に伝播する。２段目以降のレジスタ（ＲＢ２〜）も同様に、パイプラインの対応する実行段階の進行と同期して、前段から入力した停止信号を次段へ伝播する。例えば、パイプライン保護部１４によってパイプラインのある段階にパイプライン保護サイクルが挿入されると、当該段階に対応するレジスタにおける停止信号ＳＨの伝播期間も延長される。
なお、レジスタＲＢ１，…，ＲＢｎは、本発明における遅延部の一例である。
【００３５】
信号伝播部１６は、上述したレジスタＲＢ１，…，ＲＢｎに加えて、その終段から出力される停止信号ＳＨを更に伝播する拡張遅延部１６１を有する。
拡張遅延部１６１は、停止信号ＳＨがレジスタＲＢ１，ＲＢ２，…，ＲＢｎを伝播した後更に一定の期間、停止信号ＳＨの伝播期間を延長する。拡張遅延部１６によって延長される伝播期間は、命令実行部１３のｎ段階のパイプラインによって命令が実行された後、これに付随した処理が実行され得る期間に相当する。
【００３６】
例えば、後述するデバッグ部２０は、メモリに書き込まれたデータの値とアドレスの値がそれぞれ予め設定したデータ値、アドレス値と一致することを条件に、命令処理部１０のＨＡＬＴイベントを発生させることができる（後述のアドレス／データ・ウォッチポイント）。このＨＡＬＴイベントは、パイプラインの最後の「ＷＲＩＴＥ２」段階においてメモリに書き込まれるデータの値と書き込み先のアドレス値が確定した後に発生する。つまり、パイプラインにおける命令の実行が完了した後も、付随的にＨＡＬＴイベントなどの処理が実行され得る。拡張遅延部１６は、このような付随的処理が実行される期間が含まれるように停止信号ＳＨの伝播期間を延長する。
【００３７】
拡張遅延部１６１は、例えば、レジスタＲＢ１，ＲＢ２，…，ＲＢｎの後段へ更にレジスタを追加することによって実現してもよいし、あるいは、レジスタＲＢ１，ＲＢ２，…，ＲＢｎのクロックサイクルに一定の遅延を与える回路を設けることによって全体の伝播期間が一定期間延長されるようにしてもよい。
【００３８】
状態信号出力部１７は、信号発生部１５において発生した停止信号ＳＨが信号伝播部１６を伝播しているか否か検知し、この検知結果を状態信号Ｓ１として出力する。
例えば、停止信号ＳＨが１ビットの信号であり、その値を「１」とすると、状態信号出力部１７は、レジスタＲＢ１，ＲＢ２，…，ＲＢｎ及び拡張遅延部１６１の何れかに値「１」の停止信号ＳＨが保持されているか否かを検知する。すなわち、レジスタＲＢ１，ＲＢ２，…，ＲＢｎ及び拡張遅延部１６１の出力信号の論理和に相当する信号を状態信号Ｓ１として出力する。ここでは一例として、状態信号Ｓ１が値「１」の場合、命令実行部１３においてパイプラインの命令の実行が完了していないことを示すものとする。
【００３９】
［デバッグ部２０］
デバッグ部２０は、デバッグ用のホスト装置（不図示）から入力されるコマンドに応じて、命令処理部１０により実行されるプログラムの検証に関わるデバッグ動作を実行する。例えば、デバッグ動作として、命令処理部１０の動作の制御や、その動作状態の記録などを行う。デバッグ部２０において実行されるコマンドの一例を以下に示す。
【００４０】
＜ＨＡＬＴコマンド＞
命令処理部１０における命令の処理を停止する。
＜ＳＴＥＰコマンド＞
命令処理部１０において、バックグラウンド・コード（デバッグのために停止可能な命令）を１個ずつ実行する。
＜ＲＵＮＣ（Conditional Run）コマンド＞
命令処理部１０において、フォアグランド・コード（デバッグ時にバックグラウンド・コードを停止しているときも実行される割り込みルーチンの命令）やバックグラウンド・コードを所定の数だけ実行したり、これらの命令をＨＡＬＴイベントが発生するまで実行する。
＜ＲＵＮＦ（Free Run）コマンド＞
命令処理部１０において、フォアグランド・コードやバックグラウンド・コードをＨＡＬＴイベントの有無にかかわらず実行する。
【００４１】
また、デバッグ部２０の制御により発生するＨＡＬＴイベントには、上述した実行コマンドの他にも例えば以下のものがある。
【００４２】
＜ソフトウェア・ブレークポイント（Break Point）＞
デバッグ部２０は、後述するＤＭＡ機能によって、メモリに格納される所望の命令をデバッグ用の命令（停止命令（ＥＳＴＯＰ）など）に置換する。命令処理部１０は、この停止命令をプリデコードすると、プログラムの実行を停止する。
＜ハードウェア・ブレークポイント＞
デバッグ部２０は、プログラム・メモリのアドレス・バスを監視し、メモリに格納される所望の命令が命令処理部１０によりフェッチされたことを検出すると、その命令に所定のタグを付加する。命令処理部１０は、このタグをプリデコードすると、プログラムの実行を停止する。ハードウェア・ブレークポイントは、メモリ上のプログラムを書き換える必要がないため、プログラム・メモリがＲＯＭ（read only memory）の場合でも利用できる。
＜アドレス／データ・ウォッチポイント（Watch Point）＞
デバッグ部２０は、データ・メモリのアドレス・バス又はデータ・バスを監視し、予め指定されたデータ値又はアドレス値を検出すると、命令処理部１０に対してプログラムの実行の停止を要求する。このＨＡＬＴイベントは、所望のアドレス値とデータ値が両方検出された場合に発生させることも可能である。
＜外部トリガ・ウォッチポイント＞
デバッグ部２０は、予め指定された外部からのトリガ信号（不図示）を監視し、そのトリガ信号を検出すると、命令処理部１０に対してプログラムの実行の停止を要求する。
【００４３】
デバッグ部２０は、例えば図１に示すように、実行制御部２１と、分析部２２と、ＤＭＡ部２３と、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）とを有する。
【００４４】
実行制御部２１は、不図示のホスト装置より入力されるコマンドや分析部２２におけるウォッチポイントの検出結果などに応じて、命令処理部１０におけるプログラムの実行状態を制御する。
例えば、実行制御部２１は、ホスト装置からコマンド（「ＨＡＬＴ」，「ＲＵＮＣ」等）が入力されると、命令処理部１０に対して当該コマンドの実行を要求するリクエスト信号ＥＸＥ＿ＲＱを出力する。
また、実行制御部２１は、分析部２２においてウォッチポイントの条件に一致する事象が検出されると、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）等を参照して、ホスト装置から入力されるコマンドに応じた実行条件や現在の命令の実行状態がそのウォッチポイントの停止条件を満たしているか判定し、停止条件を満たしている場合、命令処理部１０に対してプログラムの実行停止を要求するリクエスト信号ＷＰ−ＲＱを出力する。
更に、実行制御部２１は、デバッグのためプログラムの実行を停止しているときでも所定の割り込み要求については受け付けるように命令処理部１０を制御する。例えばハードウェアの割り込み制御などでは処理を停止することが許されないことがあり、そのような割り込み処理ルーチンを有するプログラムのデバッグにおいては、プログラムの実行停止時に割り込みイネーブル信号ＩＮＴ＿ＥＮＭを有効状態に設定することで、割り込み要求の受付を可能とする。
【００４５】
他方、実行制御部２１は、命令処理部１０の動作の状態（処理の停止原因に関する情報
など）が記憶されたデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）にアクセスし、その記憶情報を適宜更新する。
例えば、実行制御部２１は、ＨＡＬＴイベントに対する応答信号（ＨＡＬＴ＿ＡＣＫ）
が命令処理部１０から出力されると、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）においてプログラムの実行停止の原因を示す所定のフラグデータ（ＨＡＬＴイベントフラグ）をセットする。
【００４６】
また、実行制御部２１は、命令処理部１０における命令の実行状態を示すステートマシン２１１（ＥＸＳＭ）を備えている。実行制御部２１は、命令の実行状態に関して命令処理部１０から出力される各種の信号（命令のデコード開始や停止を示す信号、ＨＡＬＴイベントに対する応答信号、割り込み命令や復帰命令に対する応答信号など）に応じて、ステートマシン２１１（ＥＸＳＭ）のステートを更新する。
【００４７】
分析部２２は、予め設定された条件に従って、命令処理部１０によるメモリへのアクセスや外部からのトリガ信号を監視する。例えば、分析部２２は、命令処理部１０の要求に応じて、メモリのアドレス・バスやデータ・バスに所定値のデータが出力されたかどうかの監視や、外部から所定のトリガ信号が入力されたかどうかの監視を行う。
【００４８】
また分析部２２は、実行制御部２１により設定される条件に従って被カウント信号をカウントするベンチマークカウンタ２２１を備える。
ベンチマークカウンタ２２１は、本発明におけるカウンタ部の一例に相当するものであり、実行制御部２１等から入力される制御信号に応じて、種々の被カウント信号をカウントする。例えば、命令処理部１０の処理に関連する各種のイベント（命令処理部１０の内部イベント，分析部２２で検出されるウォッチポイント等のイベント，メモリのキャッシュ・ミス等の外部イベント）の発生を示す信号や、命令処理部１０における各命令の実行（例えば各命令のデコードの実行）を示す信号、命令処理部１０の動作タイミングの基準を示すクロック信号などをカウントする。
また、ベンチマークカウンタ２２１は、上述したイベントの発生を示す信号等を初期化信号として入力した場合に、カウント値を初期化する機能も有している。
更に、ベンチマークカウンタ２２１は、状態信号Ｓ１が命令処理部１０のパイプライン処理の未完了状態を示す遷移期間において、カウント動作や初期化動作を実行するか否かを選択可能である。すなわち、ベンチマークカウンタ２２１は、プログラムの実行が停止される際の遷移期間において、上述した被カウント信号のカウントを実行するか否か、初期化信号に応じたカウント値の初期化を実行するか否かをそれぞれ選択することができる。例えば、ベンチマークカウンタ２２１は、ウォッチポイントなどのイベントをカウントする場合、ＨＡＬＴイベントが発生していない通常の期間に加えて、ＨＡＬＴイベントが発生した後の遷移期間において発生するイベントもカウントすることが可能である。また、クロック信号をカウントする場合においては、遷移期間におけるカウントを停止することが可能である。すなわち、ベンチマークカウンタ２２１は、カウント対象の信号に応じて、遷移期間におけるカウント動作や初期化動作の有無を選択することができる。
【００４９】
ＤＭＡ（direct memory access）部２３は、不図示のホスト装置より入力されるコマンドに応じて、命令処理部１０がアクセス対象とする記憶部にアクセスし、そのデータの読み出しや書き込みを行う。命令処理部１０がアクセス対象とするメモリには、内部若しくは外部のメモリや、命令処理部１０において命令の処理に利用されるレジスタ群などが含まれる。
ＤＭＡ部２３は、例えばメモリに格納される所望の命令をデバッグ用の命令（プログラムの停止命令など）に置換することで、命令実行部１３にデバッグ命令を実行させる。
また、ＤＭＡ部２３は、命令実行部１３のデコード段階のパイプラインに対してレジスタの読み書き要求を直接挿入することにより、命令実行部１３のパイプライン処理を利用してレジスタ群にアクセスする。
また、ＤＭＡ部２３は、命令処理部１０に入力される一連の命令の中へ更に命令を挿入することで、命令処理部１０に任意の命令を実行させることもできる。この場合、ＤＭＡ部２３は、例えば、ホスト装置より入力されるコマンドにより指定された所望の命令を命令実行部１３の命令レジスタ（フェッチした命令をデコードするために格納するレジスタ）へ直接書き込む。
ＤＭＡ部２３によるアクセスは、例えば、命令処理部１０によるアクセスの合間に行ってもよいし、あるいは、命令処理部１０によるアクセスを停止させて行ってもよい。
ＤＭＡ部２３は、上記のＤＭＡアクセスを有効にする場合、命令処理部１０に対してリクエスト信号ＤＭＡ＿ＲＱを出力する。このリクエスト信号に対する応答信号が命令処理部１０から返されると、ＤＭＡ部２３はそのアクセスを有効にする。
【００５０】
デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）は、デバッグに関連する命令処理部１０の動作状態の情報を記憶する。例えば、命令処理部１０におけるプログラムの実行を停止させる原因となったＨＡＬＴイベントを示すフラグデータ（ＨＡＬＴイベントフラグ）を記憶する。
【００５１】
また、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）は、例えば次の情報を記憶する。
【００５２】
＜ＨＰＩ（high priority interrupt）＞
割り込みの実行自体が最優先とみなされ、他の割り込みの重複やデバッグ動作に制限がもたらされていることを示すフラグデータ。
＜ＩＤＳ（interrupt during suspend）＿ＡＣＴ＞
割り込みを受け付けたときに直前のバックグラウンド・コードが実行停止中であったことを示すフラグデータ。
＜ＤＦＣ（debug frame counter）＞
バックグラウンド・コードからの割り込みの階層を示す５ビットのデータ。初期値は「０ｘ１Ｆ」（「０ｘ」は１６進数を示す）であり、割り込みの階層が増すごとに１ずつインクリメントされる。デバッグ部２０は、「ＤＦＣ」を参照することによって、割り込みの階層ごとにデバッグ要求を制御する。
【００５３】
［デバッグ制限部３０］
デバッグ制限部３０は、命令処理部１０より出力される状態信号Ｓ１がパイプライン処理の未完了状態を示す場合（すなわち値「１」の場合）、状態信号Ｓ１が完了状態を示すまで（すなわち値「０」に変化するまで）デバッグ部２０によるデバッグ動作を制限する。
【００５４】
例えば、デバッグ制限部３０は、ＨＡＬＴイベントの発生によって状態信号Ｓ１が値「１」になった場合、状態信号Ｓ１が「０」に変化するまで、割り込み要求の受付や、ＤＭＡ部２３によるアクセス、命令の実行状態を示すステートマシン２１１のステートの更新、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）の記憶情報の更新、デバッグ部２０のコマンドの実行（ＨＡＬＴ、ＲＵＮＣコマンドなど）を制限する。
【００５５】
デバッグ制限部３０は、例えば図１に示すように、ＡＮＤ回路３１，３２，３３，３６と、エッジ検出回路３４と、ＡＣＫ信号保持回路３５とを有する。
【００５６】
ＡＮＤ回路３１は、実行制御部２１の割り込みイネーブル信号ＩＮＴ＿ＥＮと状態信号Ｓ１を入力し、状態信号Ｓ１が「１」の場合に値「０」を持ち、状態信号Ｓ１が「０」の場合に割り込みイネーブル信号ＩＮＴ＿ＥＮと同一値を持つ割り込みイネーブル信号ＩＮＴ＿ＥＮＭを出力する。命令処理部１０は、ＡＮＤ回路３１から出力される割り込みイネーブル信号ＩＮＴ＿ＥＮＭが「１」の場合に割り込み要求を受付可能となり、割り込みイネーブル信号ＩＮＴ＿ＥＮＭが「０」の場合は割り込み要求を受け付けない状態となる。したがって、ＨＡＬＴイベントの発生により状態信号Ｓ１が「１」になる期間（パイプラインに残る命令の処理が未完了の期間）は、命令処理部１０における割り込み要求の受付が制限される。
【００５７】
ＡＮＤ回路３２は、実行制御部２１のリクエスト信号ＥＸＥ＿ＲＱと状態信号Ｓ１を入力し、状態信号Ｓ１が「１」の場合に値「０」を持ち、状態信号Ｓ１が「０」の場合にリクエスト信号ＥＸＥ＿ＲＱと同一値を持つリクエスト信号ＥＸＥ＿ＲＱＭを出力する。命令処理部１０は、ＡＮＤ回路３２から出力されるリクエスト信号ＥＸＥ＿ＲＱＭが「１」の場合、実行制御部２１からの要求を受けてコマンド（ＨＡＬＴコマンド、ＲＵＮＣコマンドなど）を実行し、リクエスト信号ＥＸＥ＿ＲＱＭが「０」の場合はコマンドを実行しない。したがって、ＨＡＬＴイベントの発生により状態信号Ｓ１が「１」になる期間は、デバッグ部２０の制御による命令処理部１０の処理の停止や再開が制限される。
【００５８】
ＡＮＤ回路３３は、ＤＭＡ部２３のリクエスト信号ＤＭＡ＿ＲＱと状態信号Ｓ１を入力し、状態信号Ｓ１が「１」の場合に値「０」を持ち、状態信号Ｓ１が「０」の場合にリクエスト信号ＤＭＡ＿ＲＱと同一値を持つリクエスト信号ＤＭＡ＿ＲＱＭを出力する。命令処理部１０は、ＡＮＤ回路３３から出力されるリクエスト信号ＤＭＡ＿ＲＱＭが「１」の場合、ＤＭＡアクセス（メモリへのアクセス等）を許可する応答信号を返し、リクエスト信号ＤＭＡ＿ＲＱＭが「０」の場合はこの応答信号を返さない。したがって、ＨＡＬＴイベントの発生により状態信号Ｓ１が「１」になる期間、ＤＭＡ部２３によるアクセスは制限される。
【００５９】
エッジ検出回路３４は、状態信号Ｓ１が「１」から「０」へ変化する立下りエッジにおいて、実行制御部２１のステートマシン２１１（ＥＸＳＭ）のステートを「停止状態（ＤＳＵＳＰ）」に設定する信号ＤＳＵＳＰ＿ＳＥＴを出力する。すなわち、命令処理部１０のパイプラインに残る命令の処理が完了したとき、ステートマシン２１１のステートは「停止状態（ＤＳＵＳＰ）」に更新される。したがって、ＨＡＬＴイベントが発生した後、状態信号Ｓ１が「１」から「０」に変わるまでの間は、実行状態を示すステートマシン２１１（ＥＸＳＭ）のステート更新が制限される。
【００６０】
ＡＣＫ信号保持回路３５は、状態信号Ｓ１が「１」の期間において命令処理部１０より出力されるＨＡＬＴイベントの応答信号ＨＡＬＴ＿ＡＣＫを保持する。例えば、命令処理部１０は、ＨＡＬＴイベントが発生すると「１」のパルスを応答信号ＨＡＬＴ＿ＡＣＫとして出力する。状態信号Ｓ１が「１」の場合、ＡＣＫ信号保持回路３５はこの応答信号ＨＡＬＴ＿ＡＣＫを保持して「１」を出力する。その後、状態信号Ｓ１が「０」になると、ＡＣＫ信号保持回路３５は応答信号ＨＡＬＴ＿ＡＣＫの保持を解除して「０」を出力する。
他方、ＡＮＤ回路３６は、このＡＣＫ信号保持回路３５の出力信号と状態信号Ｓ１とを入力し、状態信号Ｓ１が「１」の場合に値「０」を持ち、状態信号Ｓ１が「０」の場合にＡＣＫ信号保持回路３５の出力信号と同一値を持つフラグセット信号ＦＬＧ＿ＳＥＴを出力する。
【００６１】
ＡＣＫ信号保持回路３５において応答信号ＨＡＬＴ＿ＡＣＫが保持されているとき（ＡＣＫ信号保持回路３５の出力信号が「１」のとき）、状態信号Ｓ１が「１」から「０」へ変化すると、ＡＮＤ回路３６は「１」のフラグセット信号ＦＬＧ＿ＳＥＴを出力する。状態信号Ｓ１が「０」へ変化することによりＡＣＫ信号保持回路３５が応答信号ＨＡＬＴ＿ＡＣＫの保持を解除すると（ＡＣＫ信号保持回路３５の出力信号が「０」になると）、ＡＮＤ回路３６はフラグセット信号ＦＬＧ＿ＳＥＴを「０」にする。その結果、フラグセット信号ＦＬＧ＿ＳＥＴは一旦「０」から「１」へ立ち上がり、１サイクル後に再び「１」から「０」へ戻る。すなわち、フラグセット信号ＦＬＧ＿ＳＥＴは、状態信号Ｓ１が「１」になる期間だけ応答信号ＨＡＬＴ＿ＡＣＫのパルスを遅延させた信号に相当する。
フラグセット信号ＦＬＧ＿ＳＥＴが「０」から「１」へ立ち上がると、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）は、その時点における命令処理部１０の動作状態を反映するように記憶情報（ＨＡＬＴイベントフラグなど）を更新する。
したがって、ＨＡＬＴイベントの発生により状態信号Ｓ１が「１」になる期間は、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）における記憶情報の更新が制限される。
【００６２】
ここで、上述した構成を有する本実施形態に係るプロセッサのデバッグ時の動作について説明する。
まず、プログラムの実行を停止するときにデバッグ動作の制限を行わない場合の問題点について図２〜図７を参照して説明し、次いで、本実施形態に係るプロセッサの動作について図８〜図１３を参照して説明する。
【００６３】
図２は、プログラムの実行を停止する際の遷移期間においてデバッグ動作を制限する機能をもたないプロセッサの一構成例を示す図である。
図２に示すプロセッサは、命令処理部１０Ｘとデバッグ部２０Ｘを有する。命令処理部１０Ｘは、上述した命令処理部１０における信号発生部１５，信号伝播部１６，状態信号出力部１７を省略したものであり、他の構成は命令処理部１０と同様である。デバッグ部２０Ｘは、ＨＡＬＴイベントに対する応答信号ＨＡＬＴ＿ＡＣＫが出力されてから一定サイクル後に（すなわちパイプラインの処理の完了とは無関係に）ステートマシン２１１やデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）を更新するロジック回路を有しており、他の構成は上述したデバッグ部２０と同様である。
【００６４】
＜１−１＞  プログラムの実行を停止する際の遷移期間にＨＡＬＴイベントが発生する場合
【００６５】
図３は、図２に示すプロセッサにおいて、プログラムの実行を停止する際の遷移期間にＨＡＬＴイベント（ウォッチポイント）が発生する場合の動作の一例を示すタイミング図である。
図３（Ａ）は、命令処理部１０ＸのクロックＣＬＫを示す。
図３（Ｂ）は、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）の記憶情報を示す。
図３（Ｃ）は、ステートマシン２１１（ＥＸＳＭ）のステート（命令処理部１０Ｘの実行状態）を示す。
図３（Ｄ）は、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）に記憶されるＤＦＣ（割り込みの階層）を示す。
図３（Ｅ），（Ｆ），（Ｇ），（Ｈ），（Ｉ），（Ｊ），（Ｋ），（Ｌ），（Ｍ）は、それぞれ、パイプラインにおけるプリデコード段階「ＰＲＥ−ＤＥＣ」，デコード段階「ＤＥＣＯＤＥ」，アドレス段階「ＡＤＤＲＥＳＳ」，アクセス段階「ＡＣＣＥＳＳ１」，アクセス段階「ＡＣＣＥＳＳ２」，リード段階「ＲＥＡＤ」，実行段階「ＥＸＥ」，ライト段階「ＷＲＩＴＥ１」，ライト段階「ＷＲＩＴＥ２」において処理される命令を示す。
【００６６】
命令処理部１０Ｘは、ソフトウェア・ブレークポイントの停止命令（ＥＳＴＯＰ）をプリデコードすると（サイクルＣ１）、新たな命令のデコードを停止し、このＨＡＬＴイベントに対する応答信号ＨＡＬＴ＿ＡＣＫを発生する（サイクルＣ２）。デバック部２０は、この応答信号ＨＡＬＴ＿ＡＣＫを受けて、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）のＨＡＬＴイベントフラグをセットするともに、ステートマシン２１１（ＥＸＳＭ）のステートを「実行状態（ＥＸＥ）」から「停止状態（ＤＳＵＳＰ）」に更新する（サイクルＣ３）。このとき、パイプラインの実行段階を処理する命令実行部１３には、停止命令（ＥＳＴＯＰ）より前にデコードされた命令（Ｎ〜Ｎ−５）が残っている。命令実行部１３は、これらの命令を順次に実行する（サイクルＣ３〜Ｃ８）。
【００６７】
一方、分析部２２は、予め設定された条件に従って、命令処理部１０によるメモリへのアクセスを監視している。そして、「停止状態（ＤＳＵＳＰ）」のステートに移行したとき、パイプラインに残存する命令の実行によって、ウォッチポイントの条件に一致するアクセスが発生したことを検出する（サイクルＣ９）。
【００６８】
分析部２２は、ウォッチポイントのＨＡＬＴイベントが発生したことを実行制御部２１Ｘに通知する。ところが、このとき既にステートマシン２１１（ＥＸＳＭ）は「停止状態（ＤＳＵＳＰ）」を示しているため、実行制御部２１Ｘはプログラムの実行停止を要求するリクエスト信号ＷＰ−ＲＱを出力せず、分析部２２からの通知を無視する。その結果、命令処理部１０ＸからＨＡＬＴイベントに対する応答信号（ＨＡＬＴ＿ＡＣＫ）は出力されないので、このＨＡＬＴイベントはデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）にセットされない。すなわち、停止命令（ＥＳＴＯＰ）より前にデコードされた命令に由来するＨＡＬＴイベントが発生しているにも関わらず、その事実がデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）に正しく反映されないという問題が生じる。
【００６９】
＜１−２＞  プログラムの実行を停止する際の遷移期間にＨＡＬＴイベントと割り込みが発生する場合
【００７０】
図４は、図２に示すプロセッサにおいて、プログラムの実行を停止する際の遷移期間にＨＡＬＴイベント（ウォッチポイント）と割り込みが発生する場合の第１の動作例を示すタイミング図である。
図４（Ａ）は、命令処理部１０ＸのクロックＣＬＫを示す。
図４（Ｂ），（Ｃ）は、割り込み時において命令処理部１０Ｘの動作状態の情報（ステータス情報）をスタックへ保存するためのバスＦＤＢＵＳ，ＥＤＢＵＳをそれぞれ示す。
図４（Ｄ）は、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）の記憶情報が出力されるバスＤＢＧＳＢＵＳを示す。
図４（Ｅ）は、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）の記憶情報をスタックへ保存する際に「１」となる信号ＳＡＶＥＳＴＳを示す。
図４（Ｆ）は、停止状態において割り込みを受け付けた場合に命令処理部１０Ｘが出力する応答信号ＲＴＩＮＴＡＣＫを示す。
図４（Ｇ）は、命令処理部１０Ｘのステータス情報をスタックへ保存する動作の開始時に「１」となる信号ＰＵＳＨＳＴＲＴを示す。
図４（Ｈ）は、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）の記憶情報を示す。
図４（Ｉ）は、プログラム実行中のデバッグ動作を制限する場合に「１」となるフラグデータＤＢＧＭを示す。
図４（Ｊ）は、優先度の高い割り込みによって他の割り込みの重複やデバッグ動作を制限する場合に「１」となるフラグデータＨＰＩを示す。
図４（Ｋ）は、割り込みを受け付けたときに直前のバックグラウンド・コードが実行停止中であった場合「１」となるフラグデータＩＤＳ＿ＡＣＴを示す。
図４（Ｌ）は、ステートマシン２１１（ＥＸＳＭ）のステート（命令処理部１０Ｘの実行状態）を示す。
図４（Ｍ）は、バックグラウンド・コードからの割り込みの階層を示す５ビットのデータ（ＤＦＣ）を示す
図４（Ｎ），（Ｏ），（Ｐ），（Ｑ），（Ｒ），（Ｓ），（Ｔ），（Ｕ），（Ｖ）は、それぞれ、パイプラインの段階「ＰＲＥ−ＤＥＣ」，「ＤＥＣＯＤＥ」，「ＡＤＤＲＥＳＳ」，「ＡＣＣＥＳＳ１」，「ＡＣＣＥＳＳ２」，「ＲＥＡＤ」，「ＥＸＥ」，「ＷＲＩＴＥ１」，「ＷＲＩＴＥ２」において処理される命令を示す。
【００７１】
命令処理部１０Ｘは、ソフトウェア・ブレークポイントの停止命令（ＥＳＴＯＰ）をプリデコードすると（サイクルＣ５１）、新たな命令のデコードを停止し、このＨＡＬＴイベントに対する応答信号ＨＡＬＴ＿ＡＣＫを発生する（サイクルＣ５２）。デバック部２０Ｘは、この応答信号ＨＡＬＴ＿ＡＣＫを受けて、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）のＨＡＬＴイベントフラグをセットするともに、ステートマシン２１１（ＥＸＳＭ）のステートを「実行状態（ＥＸＥ）」から「停止状態（ＤＳＵＳＰ）」に更新する（サイクルＣ５３）。このとき、パイプラインの実行段階を処理する命令実行部１３には、停止命令（ＥＳＴＯＰ）より前にデコードされた命令（Ｎ〜Ｎ−５）が残っている。命令実行部１３は、これらの命令を順次に実行する（サイクルＣ５３〜Ｃ５８）。
【００７２】
このパイプラインに残る命令を実行しているとき、命令処理部１０Ｘは、デバッグ動作よりも優先される割り込み要求を受ける（サイクルＣ５３）。命令処理部１０Ｘは、この割り込み要求に対して、応答信号ＲＴＩＮＴＡＣＫを出力する（サイクルＣ５４）。デバック部２０Ｘは、この応答信号ＲＴＩＮＴＡＣＫを受けて、ステートマシン２１１（ＥＸＳＭ）を「停止状態（ＤＳＵＳＰ）」から「停止中の割り込み状態（ＩＤＳ：interrupt during suspend）」に更新する（サイクルＣ５５）。
【００７３】
命令処理部１０Ｘは、割り込みの受け付けに伴って、ステータス・レジスタ（ＳＴ０〜ＳＴ２）等の情報をスタックに保存する処理を開始する。すなわち、命令処理部１０Ｘは、割り込み要求を受け付けると、スタックに保存する所定のレジスタの情報をバスへ出力する（サイクルＣ６０〜６２）。図４の例では、命令処理部１０Ｘの動作状態を示すステータス・レジスタＳＴ０〜ＳＴ２やプログラム・カウンタＰＣＨ，ＰＣＬ（不図示）、デバッグ部２０Ｘのデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）の記憶情報をそれぞれバスへ出力する。また、命令処理部１０Ｘは、割り込みルーチンを開始する前に、各レジスタの記憶情報（ステータス・レジスタのフラグデータＤＢＧＭなど）を初期値に設定する。
デバック部２０Ｘは、命令処理部１０Ｘにおいて上述した保存処理が開始されると、割り込み階層のデータ（ＤＦＣ）を「１」だけ増加させる（サイクルＣ５９）。そして、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）の保存処理が行われる時点(サイクルＣ６１)において、ＨＡＬＴイベントフラグを全てクリアし、フラグデータＨＰＩ，ＩＤＳ＿ＡＣＴをそれぞれ「１」に設定する。
【００７４】
一方、分析部２２は、予め設定された条件に従って、命令処理部１０によるメモリへのアクセスを監視している。そして、上述した割り込みにより「停止中の割り込み状態（ＩＤＳ）」のステートに移行したとき、パイプラインに残存する命令の実行によって、ウォッチポイントの条件に一致するアクセスが発生したことを検出する（サイクルＣ５７）。
【００７５】
実行制御部２１Ｘは、分析部２２からウォッチポイントのＨＡＬＴイベントを通知されると、このとき「停止状態（ＤＳＵＳＰ）」のステートではないので、プログラムの実行停止を要求するリクエスト信号ＷＰ−ＲＱを命令処理部１０Ｘに出力する（サイクルＣ５７）。リクエスト信号ＷＰ−ＲＱを受けた命令処理部１０Ｘは、デバッグ部２０Ｘに応答信号ＨＡＬＴ＿ＡＣＫを出力する（サイクルＣ５８）。命令処理部１０Ｘからの応答信号ＨＡＬＴ＿ＡＣＫを受けたデバッグ部２０Ｘは、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）のＨＡＬＴイベントフラグをセットするともに、ステートマシン２１１（ＥＸＳＭ）のステートを「停止中の割り込み状態（ＩＤＳ）」から再び「停止状態（ＤＳＵＳＰ）」へ戻す（サイクルＣ５９）。
【００７６】
以上のように、プログラムの実行が停止される際の遷移期間において割り込み命令とＨＡＬＴイベントが重複した結果、割り込みルーチン（フォアグラウンド・コード）へ移ったとき、ステートマシン２１１（ＥＸＳＭ）のステートは「停止状態（ＤＳＵＳＰ）」になる（サイクルＣ５９〜）。命令処理部１０Ｘは、このステートに従って、割り込みルーチンの先頭から命令の処理を停止する（サイクルＣ６３）。すなわち、割り込み要求を受け付ける前にデコードされた命令（バックグラウンド・コード）に由来するＨＡＬＴイベントが、割り込みルーチン（フォアグラウンド・コード）における命令の実行を止めてしまうという問題が生じる。
また、この場合、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）のＨＡＬＴイベントフラグは割り込みに伴う保存処理が行われると同時に全てクリアされてしまうので、ＨＡＬＴイベントに応じてプログラムの実行が停止されたのに、その原因を示す情報がデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）に記録されていないこととなる。その結果、ホスト装置においてプログラムの実行停止原因を把握できないという問題が生じる。
【００７７】
図５は、図２に示すプロセッサにおいて、プログラムの実行を停止する際の遷移期間にＨＡＬＴイベント（ウォッチポイント）と割り込みが発生する場合の第２の動作例を示すタイミング図である。図５（Ａ）〜（Ｖ）は、それぞれ図４（Ａ）〜（Ｖ）に対応する。
【００７８】
図５に示す第２の動作例では、図４に示す第１の動作例に比べて、ウォッチポイントによるＨＡＬＴイベントの発生時点が３サイクル遅くなっている。サイクルＣ１０１〜Ｃ１０６までの動作については、図４におけるサイクルＣ５１〜Ｃ５６と同じである。
【００７９】
実行制御部２１Ｘは、サイクルＣ１０３で受け付けた割り込み命令に応じて、まずデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）に格納される割り込み階層のデータ（ＤＦＣ）を「１」だけ増加させる（サイクルＣ１０９）。
次いで、命令処理部１０Ｘは、スタックに保存する所定のレジスタの情報をバスへ出力する（サイクルＣ１１０〜１１２）。
その後、命令処理部１０Ｘは、割り込みルーチンを開始するために、各レジスタの記憶情報をクリアする（サイクルＣ１１１）。またこのとき、デバッグ部２０Ｘは、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）のＨＡＬＴイベントフラグを全てクリアし、フラグデータＨＰＩ，ＩＤＳ＿ＡＣＴをそれぞれ「１」に設定する。
【００８０】
一方、分析部２２は、予め設定された条件に従って、命令処理部１０によるメモリへのアクセスを監視している。そして、「停止中の割り込み状態（ＩＤＳ）」においてステータス情報をスタックに保存しているとき、パイプラインに残存する命令の実行によって、ウォッチポイントの条件に一致するアクセスが発生したことを検出する（サイクルＣ１１０）。
【００８１】
実行制御部２１Ｘは、分析部２２からウォッチポイントのＨＡＬＴイベントを通知される
と、命令処理部１０Ｘに対してプログラムの実行停止を要求するリクエスト信号ＷＰ−ＲＱを出力する（サイクルＣ１１０）。リクエスト信号ＷＰ−ＲＱを受けた命令処理部１０Ｘは、これに対する応答信号ＨＡＬＴ＿ＡＣＫを出力する（サイクルＣ１１１）。命令処理部１０Ｘからの応答信号ＨＡＬＴ＿ＡＣＫを受けたデバッグ部２０Ｘは、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）のＨＡＬＴイベントフラグをセットするともに、ステートマシン２１１（ＥＸＳＭ）のステートを「停止中の割り込み状態（ＩＤＳ）」から「停止状態（ＤＳＵＳＰ）」へ更新する（サイクルＣ１１２）。
【００８２】
サイクルＣ１１１の時点では、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）の記憶情報は割り込みルーチンに備えてクリアされているのに、デバッグ部２０Ｘは、遷移期間中に発生したＨＡＬＴイベントに応じて、そのクリアされたデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）を書き換えてしまう。すなわち、割り込みの発生前に生じたＨＡＬＴイベントが割り込みルーチン内で生じたかのようにデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）の記憶情報を書き換えてしまうという問題が生じる。
【００８３】
＜１−３＞  割り込みルーチンから復帰してプログラムを停止する際の遷移期間にＨＡＬＴイベントが発生する場合
【００８４】
図６は、図２に示すプロセッサにおいて、割り込みルーチンから復帰してプログラムを停止する際の遷移期間にＨＡＬＴイベントが発生する場合の動作の一例を示すタイミング図である。
図６（Ａ）は、命令処理部１０ＸのクロックＣＬＫを示す。
図６（Ｂ），（Ｃ）は、割り込みから復帰する時において、スタックに保存された命令処理部１０Ｘのステータス情報を所定のレジスタへ戻すためのバスＣＤＢＵＳ，ＤＤＢＵＳをそれぞれ示す。
図６（Ｄ）は、スタックからデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）へ情報を戻す際に「１」となる信号ＲＥ−ＤＳＴＡＴを示す。
図６（Ｅ）は、割り込みからの復帰命令に応じて命令処理部１０Ｘが出力する応答信号ＲＥＴＩＡＣＫを示す。
図６（Ｆ）は、スタックから所定のレジスタへステータス情報を戻す動作の終了時に「１」となる信号ＰＯＰＥＮＤを示す。
図６（Ｇ）は、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）の記憶情報を示す。
図６（Ｈ）は、プログラム実行中のデバッグ動作を制限する場合に「１」となるフラグデータＤＢＧＭを示す。
図６（Ｉ）は、優先度の高い割り込みによって他の割り込みの重複やデバッグ動作を制限する場合に「１」となるフラグデータＨＰＩを示す。
図６（Ｊ）は、割り込みを受け付けたときに直前のバックグラウンド・コードが実行停止中であった場合「１」となるフラグデータＩＤＳ＿ＡＣＴを示す。
図６（Ｋ）は、ステートマシン２１１（ＥＸＳＭ）のステート（命令処理部１０Ｘの実行状態）を示す。
図６（Ｌ）は、バックグラウンド・コードからの割り込みの階層を示す５ビットのデータ（ＤＦＣ）を示す
図６（Ｍ），（Ｎ），（Ｏ），（Ｐ），（Ｑ），（Ｒ），（Ｓ），（Ｔ），（Ｕ）は、それぞれ、パイプラインの段階「ＰＲＥ−ＤＥＣ」，「ＤＥＣＯＤＥ」，「ＡＤＤＲＥＳＳ」，「ＡＣＣＥＳＳ１」，「ＡＣＣＥＳＳ２」，「ＲＥＡＤ」，「ＥＸＥ」，「ＷＲＩＴＥ１」，「ＷＲＩＴＥ２」において処理される命令を示す。
【００８５】
命令処理部１０Ｘは、割り込みルーチンにおいて復帰命令（ＲＴＩ−Ｒ）をプリデコードすると（サイクルＣ１５２）、新たな命令のデコードを停止して、応答信号ＲＥＴＩＡＣＫを出力する（サイクルＣ１５３）。そして、割り込みルーチンの実行前にスタックへ保存された情報をバスＣＤＢＵＳ，ＤＤＢＵＳに出力し、所定のレジスタへ戻す。
スタックの情報がデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）へ戻されると、これに記憶されるフラグデータＨＰＩ，ＩＤＳ＿ＡＣＫは、割り込み前の状態、すなわち値「０」の状態へそれぞれ戻る（サイクルＣ１５９）。割り込みの階層を示すデータ（ＤＦＣ）については、スタックへ保存する前に「１」を加算しているため、実行制御部２１Ｘは、スタックの情報が所定のレジスタへ戻された後、「ＤＦＣ」の値から「１」を減算する（サイクルＣ１６０）。
フラグデータＤＢＧＭは、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）とは別のレジスタ（例えばステータス・レジスタＳＴ２）に格納されており、フラグデータＨＰＩ，ＩＤＳ＿ＡＣＴより遅れたタイミングで割り込み前の状態（値「０」）に戻る（サイクルＣ１６１）。
【００８６】
またデバッグ部２０Ｘは、スタックへ保存された情報をレジスタへ戻す際、ステートマシン２１１（ＥＸＳＭ）のステートを「停止状態（ＤＳＵＳＰ）」に更新する。
【００８７】
一方、分析部２２は、予め設定された条件に従って、命令処理部１０によるメモリへのアクセスを監視している。そして、スタックからレジスタへステータス情報が戻される直前において、命令実行部１３のパイプラインに残存する命令の実行によって、ウォッチポイントの条件に一致するアクセスが発生したことを検出する（サイクルＣ１５６）。
【００８８】
実行制御部２１Ｘは、分析部２２からウォッチポイントのＨＡＬＴイベントを通知されると、命令処理部１０Ｘに対してプログラムの実行停止を要求するリクエスト信号ＷＰ−ＲＱを出力する（サイクルＣ１５６）。リクエスト信号ＷＰ−ＲＱを受けた命令処理部１０Ｘは、これに対する応答信号ＨＡＬＴ＿ＡＣＫを出力する（サイクルＣ１５７）。命令処理部１０Ｘからの応答信号ＨＡＬＴ＿ＡＣＫを受けたデバッグ部２０Ｘは、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）のＨＡＬＴイベントフラグをセットするともに、ステートマシン２１１（ＥＸＳＭ）のステートを「停止中の割り込み状態（ＩＤＳ）」から「停止状態（ＤＳＵＳＰ）」へ更新する（サイクルＣ１５８）。
【００８９】
ここで、サイクルＣ１５８においてウォッチポイントのＨＡＬＴイベントの発生を示すようにセットされたＨＡＬＴイベントフラグは、その直後のサイクルＣ１５９においてスタックから戻される情報により書き換えられてしまう。そのため、わざわざウォッチポイントを設定したにもかかわらず、そのＨＡＬＴイベントが発生した事実を把握できないという問題が生じる。
【００９０】
＜１−４＞  割り込みによってデバッグ・フレーム（割り込みの階層）が変わるときＤＭＡ部２３のアクセスが生じる場合
【００９１】
割り込み命令によりデバッグ・フレーム（割り込みの階層）が変わるとき、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）等に格納される命令処理部１０Ｘのステータス情報は、全て一斉に更新されるのではなく、部分的に異なるタイミングで更新される。そのため、ＤＭＡ部２３の機能によって生成されたメモリアクセス要求（例えばレジスタ値の読
み出し命令）がこのデバッグ・フレームの変わり目において実行され、命令処理部１０Ｘのステータス情報が読み出された場合、その個々の情報の間で相関がないという問題がある。
【００９２】
例えば、図４のサイクルＣ５５において、命令処理部１０Ｘの実行状態のステート（ＥＸＳＭ）は「停止中の割り込み状態（ＩＤＳ）」であるので、この場合、割り込みの階層を示す「ＤＦＣ」の値は「０ｘ００」、フラグデータＤＢＧＭ，ＨＰＩ，ＩＤＳ＿ＡＣＴの値はそれぞれ「１」になっていなければならない。しかしながら実際は、図４に示すように、「ＤＦＣ」の値は「０ｘ１Ｆ」、フラグデータＤＢＧＭ，ＨＰＩ，ＩＤＳ＿ＡＣＴの値はそれぞれ「０」になっており、「停止中の割り込み状態（ＩＤＳ）」のステートに対応していない。
このような場合、ＤＭＡ部２３がデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）等に格納されるステータス情報を読み出すと、デバッグ作業において意味のない無駄な情報がユーザに提示されてしまう。
【００９３】
＜１−５＞  プログラムの実行を停止する際の遷移期間にデバッグ部２０Ｘのコマンドが実行される場合
【００９４】
プログラムの実行を停止する際の遷移期間において、デバッグ部２０Ｘにより例えばＲＵＮＣコマンドが発行されると、次のような問題が生じる。
この場合、命令処理部１０Ｘは、ＲＵＮＣコマンドに応じてプログラムの実行を再開すし、ステートマシン２１１（ＥＸＳＭ）のステートは「停止状態（ＤＳＵＳＰ）」から「実行状態（ＥＸＥ）」に変化する。このステートの変化は、遷移期間の途中で起きる可能性があり、この場合、ステート変化時点より前に既に命令処理部１０Ｘにおいて処理中であった命令に起因したＨＡＬＴイベント（例えばアドレス／データ・ウォッチポイント）がステート変化後に発生する可能性がある。もしこのようなＨＡＬＴイベントが発生すると、命令処理部１０Ｘのステートは「実行状態（ＥＸＥ）」から再び「停止状態（ＤＳＵＳＰ）」へ戻ってしまう。
ここで、命令処理部１０Ｘの処理を停止させる原因となったＨＡＬＴイベントは、ＲＵＮＣコマンドの発行以前に既に命令処理部１０Ｘで処理が開始された命令に由来するイベントであり、本来、ＲＵＮＣコマンドの停止条件に含まれていない。つまり、ＲＵＮＣコマンドの停止条件に含まれていない停止命令によって命令処理部１０Ｘが停止してまうという問題が生じる。
【００９５】
また、割り込みルーチンから復帰してプログラムを停止する際の遷移期間において（図６参照）、デバッグ部２０Ｘにより例えばＲＵＮＣコマンドが発行されると、次のような問題が生じる。
図６の例のサイクルＣ１５８〜Ｃ１５９において、デバッグ・フレームの階層を示す「ＤＦＣ」（図６（Ｌ））の値は「０ｘ００」であり、フォアグラウンド・コードを示しているが、ステートマシン２１１（ＥＸＳＭ）のステート（図６（Ｋ））は「停止状態（ＤＳＵＳＰ）」であり、バックグラウンド・コードを示している。すなわち、サイクルＣ１５８〜Ｃ１５９においてはデバッグ・フレームの境界が重なり合った状態になっている。
ＲＵＮＣコマンドがサイクルＣ１５８より前に発行された場合、ステートマシン２１１（ＥＸＳＭ）のステートは「停止中の割り込み状態（ＩＤＳ）」にあることから、既に実行中の状態で更に実行開始を指示する無駄なコマンドが入力されたと解釈されて、ＲＵＮＣコマンドは無視される。
ところが、サイクルＣ１５８〜Ｃ１５９においてＲＵＮＣコマンドが発行された場合、ステートは「停止状態（ＤＳＵＳＰ）」にあることから、ＲＵＮＣコマンドのリクエスト信号ＥＸＥ＿ＲＱが命令処理部１０Ｘにおいて有効に受け付けられてしまう。そうすると、バックグラウンド・コードに復帰した際、命令処理部１０Ｘは「実行状態（ＥＸＥ）」となってしまい、プログラムがそのまま実行されてしまう。
ここで、サイクルＣ１５８〜Ｃ１５９において命令処理部１０Ｘに受け付けられたＲＵＮＣコマンドは、フォアグラウンド・コード（ＤＦＣ＝「０ｘ００」）に対して発行されたコマンドであるから、本来、バックグラウンド・コードにおける処理の実行に影響を与えるべきではない。つまり、デバッグ部２０Ｘにおいて発行された実行コマンドが、意図しないデバッグ・フレームにおいて実行されてしまうという問題が生じる。
【００９６】
＜１−６＞  プログラムの実行停止時に割り込みを受け付けた後、ＨＡＬＴイベントが発生した場合
【００９７】
例えばアクセススピードが遅い外部メモリ等へ書き込みアクセスを行う場合などにおいて、パイプライン保護部１４がパイプライン保護サイクルを挿入すると、命令処理部１０Ｘはパイプライン処理の進行を一時的に停止した「ストール」と呼ばれる状態になる。
もし、命令処理部１０Ｘにおける命令の処理が停止される際の遷移期間において割り込みが発生し、更にその遷移期間において上記のストールが発生すると、ストールによるパイプライン処理の停止の影響を受けて、割り込みに伴うスタックへの保存処理の実行が遅れる。この遅れがある程度より長くなると、スタックへの保存処理を実行する前に、割り込みルーチンの最初又は２番目の命令のプリデコードが行われる。
ここで、割り込みルーチンの最初又は２番目の命令がソフトウェア・ブレークポイントの停止命令（ＥＳＴＯＰ）であったり、あるいはそれらの命令にハードウェア・ブレークポイントがセットされている場合、プリデコードの実行によって有効なＨＡＬＴイベントが発生する。ＨＡＬＴイベントが発生すると、このＨＡＬＴイベントに対応するデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）のＨＡＬＴイベントフラグがセットされる。
しかしながら、ＨＡＬＴイベントフラグのセットを行った後でスタックへの保存処理が行われると、その保存処理の完了とともにＨＡＬＴイベントフラグは初期値へクリアされてしまう。割り込みルーチンへ移行したとき、命令処理部１０Ｘは正しく停止状態になるものの、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）のＨＡＬＴイベントフラグは初期値にクリアされているため、なぜ命令処理部１０Ｘが停止したのか、その原因を知ることができない。すなわち、プログラムの実行は割り込みルーチン内で停止されているのに、あたかもそのＨＡＬＴイベントは割り込みを受け付ける前に起こったものと見なされ、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）は実行停止の理由を正しく示すことができないという問題が生じる。
【００９８】
図７は、図２に示すプロセッサにおいて、プログラムの実行を停止する際の遷移期間に割り込みが発生し、更にその割り込みルーチンの先頭が停止命令（ＥＳＴＯＰ）である場合の動作の一例を示すタイミング図である。図７（Ａ）〜（Ｖ）は、それぞれ図４（Ａ）〜（Ｖ）に対応する。
【００９９】
命令処理部１０Ｘは、ソフトウェア・ブレークポイントの停止命令（ＥＳＴＯＰ）をプリデコードすると（サイクルＣ１７５）、新たな命令のデコードを停止し、このＨＡＬＴイベントに対する応答信号ＨＡＬＴ＿ＡＣＫを発生する（サイクルＣ１７６）。デバック部２０Ｘは、この応答信号ＨＡＬＴ＿ＡＣＫを受けて、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）のＨＡＬＴイベントフラグをセットするともに、ステートマシン２１１（ＥＸＳＭ）のステートを「実行状態（ＥＸＥ）」から「停止状態（ＤＳＵＳＰ）」に更新する（サイクルＣ１７７）。命令実行部１３は、停止命令（ＥＳＴＯＰ）より前にデコードされた命令（Ｎ〜Ｎ−５）を順次に実行する（サイクルＣ１７７〜Ｃ１８７）。
ところが、サイクルＣ１８１において命令「Ｎ」がライト段階「ＷＲＩＴＥ１」に移行したとき、外部メモリが以前のアクセスを完了していないため、命令「Ｎ」による書き込みを実行できない。そのため、パイプライン保護部１４はパイプライン保護サイクルを挿入して、命令「Ｎ」のライト段階「ＷＲＩＴＥ１」が完了するまでパイプラインをストール状態にする（サイクルＣ１８２〜Ｃ１８６）。
【０１００】
他方、命令処理部１０Ｘは、上述したプログラム停止時の遷移期間において、デバッグ動作よりも優先される割り込み要求を受け付ける（サイクルＣ１７７）。命令処理部１０Ｘは、この割り込み要求に対して、応答信号ＲＴＩＮＴＡＣＫを出力する（サイクルＣ１７８）。デバック部２０Ｘは、この応答信号ＲＴＩＮＴＡＣＫを受けて、ステートマシン２１１（ＥＸＳＭ）を「停止状態（ＤＳＵＳＰ）」から「停止中の割り込み状態（ＩＤＳ）」に更新する（サイクルＣ１７９）。
割り込み要求を受け付けた命令処理部１０Ｘは、ステータス・レジスタ（ＳＴ０〜ＳＴ２）をスタックに保存する処理を実行する（サイクルＣ１８７〜Ｃ１９１）。しかしながら、上述したようにパイプラインのストールが発生するため、スタックへの保存処理は遅延する。図７（Ｇ）と図４（Ｇ）を比較して分かるように、ストールが発生すると、その期間分（５サイクル）だけ信号ＰＵＳＨＳＴＲＴの立ち上がり時点が遅れる。
【０１０１】
ストールの発生によってスタックへの保存処理が遅れている間に、命令処理部１０Ｘは、割り込みルーチンの先頭の命令をプリデコードする（サイクルＣ１８７）。ここで、プリデコードした命令がソフトウェア・ブレークポイントの停止命令（ＥＳＴＯＰ）であるため、命令処理部１０Ｘは、このＨＡＬＴイベントに対する応答信号ＨＡＬＴ＿ＡＣＫを発生する（サイクルＣ１８８）。デバック部２０Ｘは、この応答信号ＨＡＬＴ＿ＡＣＫを受けて、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）のＨＡＬＴイベントフラグをセットするともに、ステートマシン２１１（ＥＸＳＭ）のステートを「停止中の割り込み状態（ＩＤＳ）」から「停止状態（ＤＳＵＳＰ）」に更新する（サイクルＣ１８９）。
【０１０２】
ストールの解消によってパイプラインの処理が再開すると、命令処理部１０Ｘは、割り込みルーチンの先頭の停止命令（ＥＳＴＯＰ）に応じて書き換えられたデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）の情報をスタックへ保存し、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）を初期値にクリアする（サイクルＣ１８９〜Ｃ１９０）。割り込みルーチンに移行したとき、命令処理部１０Ｘは「停止状態（ＤＳＵＳＰ）」になる。しかしながら、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）は初期値にクリアされており、実行停止の原因を正しく示していない。
【０１０３】
＜１−７＞  ベンチマークカウンタ２２１Ｘにおいてカウントを行っている途中でプログラムの実行を停止する場合
【０１０４】
分析部２２が備えるベンチマークカウンタ２２１Ｘは、実行制御部２１Ｘにより設定される条件に従って、命令処理部１０Ｘの処理に関連する各種のイベント（命令処理部１０Ｘの内部イベント，分析部２２で検出されるウォッチポイント等のイベント，メモリのキャッシュ・ミス等の外部イベント）の発生を示す信号をカウントする。ところが、図２に示すプロセッサでは、プログラムの実行を停止する際、パイプラインに未処理の命令が残存していても、プログラムの実行を停止するＨＡＬＴイベントが発生した時点から一定期間の後に、ベンチマークカウンタ２２１Ｘのカウントを停止する。そのため、パイプラインに残存するＨＡＬＴイベント発生以前の命令に由来するイベント(例えば、ウォッチポイント)についてはカウントの対象から除外されてしまい、カウント結果に反映されないという問題が生じる。
【０１０５】
次に、図１に示す本実施形態に係るプロセッサのデバッグ時の動作を説明する。
【０１０６】
＜２−１＞  プログラムの実行を停止する際の遷移期間にＨＡＬＴイベントが発生する場合
【０１０７】
図８は、本実施形態に係る図１に示すプロセッサにおいて、プログラムの実行を停止する際の遷移期間にＨＡＬＴイベント（ウォッチポイント）が発生する場合の動作の一例を示すタイミング図である。
図８（Ａ）は、のクロックＣＬＫを示す。
図８（Ｂ）は、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）の記憶情報を示す。
図８（Ｃ）は、ステートマシン２１１（ＥＸＳＭ）のステート（命令処理部１０の実行状態）を示す。
図８（Ｄ）は、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）に記憶されるＤＦＣ（割り込みの階層）を示す。
図８（Ｅ），（Ｆ），（Ｇ），（Ｈ），（Ｉ），（Ｊ），（Ｋ），（Ｌ），（Ｍ）は、それぞれ、パイプラインにおける「ＰＲＥ−ＤＥＣ」，「ＤＥＣＯＤＥ」，「ＡＤＤＲＥＳＳ」，「ＡＣＣＥＳＳ１」，「ＡＣＣＥＳＳ２」，「ＲＥＡＤ」，「ＥＸＥ」，「ＷＲＩＴＥ１」，「ＷＲＩＴＥ２」において処理される命令を示す。
図８（Ｎ）は、拡張遅延部１６１において追加されたパイプラインの段階「ＷＲＩＴＥ３」を示す。
図８（Ｏ）は、状態信号Ｓ１を示す。
【０１０８】
命令処理部１０は、ソフトウェア・ブレークポイントの停止命令（ＥＳＴＯＰ）をプリデコードすると（サイクルＣ２０１）、新たな命令のデコードを停止し、このＨＡＬＴイベントに対する応答信号ＨＡＬＴ＿ＡＣＫを発生する（サイクルＣ２０２）。
【０１０９】
信号発生部１５は、停止命令（ＥＳＴＯＰ）によって新たな命令のデコードが停止される（すなわち入力制御部１１において命令の入力が停止される）と、停止信号ＳＨを発生して信号伝播部１６に入力する。信号伝播部１６のレジスタＲＢ１，ＲＢ２，…は、命令実行部１３における命令の実行段階の進行に同期して（すなわちパイプライン処理の進行に合わせて）、停止信号ＳＨを順次後段に伝播する。状態信号出力部１７は、信号伝播部１６において停止信号ＳＨが伝播中であることを検知すると、値「１」の状態信号Ｓ１を出力する（サイクルＣ２０２〜Ｃ２１０）。値「１」の状態信号Ｓ１は、命令実行部１３における命令の実行が未完了であることを示す。
【０１１０】
信号伝播部１６における停止信号ＳＨの伝播は、パイプライン処理の進行に同期しているため、停止信号ＳＨは１つの命令とみなすことができる。図８において、パイプラインの段階を流れている「ＨＡＬＴ」は停止信号ＳＨを示している。
「ＨＡＬＴ」（停止信号ＳＨ）が通過するパイプラインの段階には、通常のパイプラインの段階に加えて、「ＷＲＩＴＥ３」段階が存在する。「ＷＲＩＴＥ３」段階は、拡張遅延部１６１によって生じる段階であり、通常のパイプラインの段階が終了した後で付随的な処理（ＨＡＬＴイベントに関わる処理など）が発生する期間においても状態信号Ｓ１が「１」になるように設けられている。
【０１１１】
状態信号Ｓ１が「１」の場合、命令処理部１０より出力されるＨＡＬＴイベントの応答信号ＨＡＬＴ＿ＡＣＫは、ＡＣＫ信号保持回路３５によって保持される。状態信号Ｓ１が「１」から「０」へ変化すると（サイクルＣ２１１）、ＡＣＫ信号保持回路３５に保持された応答信号ＨＡＬＴ＿ＡＣＫはＡＮＤ回路３６を通過し、フラグセット信号ＦＬＧ＿ＳＥＴとして実行制御部２１に入力される。実行制御部２１は、このフラグセット信号ＦＬＧ＿ＳＥＴを受けて、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）のＨＡＬＴイベントフラグをセットする（サイクルＣ２１２）。すなわち、ソフトウェア・ブレークポイント（ＥＳＴＯＰ）などのＨＡＬＴイベントが発生すると状態信号Ｓ１が「１」になり、この状態信号Ｓ１が「０」に変化するまで（すなわち命令実行部１３における命令の実行が完了するまで）、ＨＡＬＴイベントに伴うデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）の更新が遅延される。
【０１１２】
また、状態信号Ｓ１が「１」から「０」へ変化すると、エッジ検出回路３４は信号ＤＳＵＳＰ＿ＳＥＴを出力して、実行制御部２１のステートマシン２１１（ＥＸＳＭ）の
ステートを「停止状態（ＤＳＵＳＰ）」に設定する。すなわち、ソフトウェア・ブレークポイント（ＥＳＴＯＰ）などのＨＡＬＴイベントが発生した場合、ステートマシン２１１（ＥＸＳＭ）のステートは直ちに「停止状態（ＤＳＵＳＰ）」へ更新されず、状態信号Ｓ１が「０」に変化するまでステートの更新が遅延される。
【０１１３】
一方、分析部２２は、予め設定された条件に従って、命令処理部１０によるメモリへのアクセスや外部からのトリガ信号を監視している。そして、停止命令（ＥＳＴＯＰ）の入力により新たな命令のデコードを停止した後、パイプラインに残存する命令の実行によって、ウォッチポイントの条件に一致するアクセスが発生したことを検出する（サイクルＣ２０９）。
【０１１４】
実行制御部２１は、分析部２２からウォッチポイントのＨＡＬＴイベントを通知されると、このとき「停止状態（ＤＳＵＳＰ）」のステートではないので、プログラムの実行停止を要求するリクエスト信号ＷＰ−ＲＱを命令処理部１０に出力する。リクエスト信号ＷＰ−ＲＱを受けた命令処理部１０は、デバッグ部２０に応答信号ＨＡＬＴ＿ＡＣＫを出力する（サイクルＣ２１０）。ところが、このとき状態信号Ｓ１が「１」であるため、先の停止命令（ＥＳＴＯＰ）の場合と同様、応答信号ＨＡＬＴ＿ＡＣＫはＡＣＫ信号保持回路３５によって保持される。このウォッチポイントのＨＡＬＴイベントに応じたデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）の更新も、状態信号Ｓ１が「０」になるまで遅延される（サイクルＣ２１２）。その結果、サイクルＣ２１２においては、２つのＨＡＬＴイベント（停止命令（ＥＳＴＯＰ），ウォッチポイント）についてデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）のフラグ設定が行われる。
【０１１５】
図２に示すプロセッサでは、プログラムの実行を停止する際の遷移期間においてデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）やステートマシン２１１（ＥＸＳＭ）の更新を許可している。そのため、＜１−１＞において説明したように、遷移期間にウォッチポイントなどのＨＡＬＴイベントが発生すると、その情報がデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）に正しく記録されないという問題が生じる。
一方、本実施形態に係る図１に示すプロセッサでは、遷移期間におけるデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）やステートマシン２１１（ＥＸＳＭ）の更新を制限することによって、遷移期間に生じたＨＡＬＴイベントの情報がデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）へ正しく記録され、上記の問題が解消される。
【０１１６】
＜２−２＞プログラムの実行を停止する際の遷移期間にＨＡＬＴイベントと割り込みが発生する場合
【０１１７】
図９は、本実施形態に係る図１に示すプロセッサにおいて、プログラムの実行を停止する際の遷移期間に割り込みが発生する場合の動作例を示すタイミング図である。
図９（Ａ）は、命令処理部１０のクロックＣＬＫを示す。
図９（Ｂ）は、停止状態において割り込みを受け付けた場合に命令処理部１０が出力する応答信号ＲＴＩＮＴＡＣＫを示す。
図９（Ｃ）は、ステートマシン２１１（ＥＸＳＭ）のステート（命令処理部１０の実行状態）を示す。
図９（Ｄ）は、バックグラウンド・コードからの割り込みの階層を示す５ビットのデータ（ＤＦＣ）を示す
図９（Ｅ）は、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）の記憶情報を示す。
図９（Ｆ）は、状態信号Ｓ１を示す。
図９（Ｇ），（Ｈ），（Ｉ），（Ｊ），（Ｋ），（Ｌ），（Ｍ），（Ｎ），（Ｏ）は、それぞれ、パイプラインの段階「ＰＲＥ−ＤＥＣ」，「ＤＥＣＯＤＥ」，「ＡＤＤＲＥＳＳ」，「ＡＣＣＥＳＳ１」，「ＡＣＣＥＳＳ２」，「ＲＥＡＤ」，「ＥＸＥ」，「ＷＲＩＴＥ１」，「ＷＲＩＴＥ２」において処理される命令を示す。
図９（Ｐ）は、拡張遅延部１６１において延長されたパイプラインの段階「ＷＲＩＴＥ３」を示す。
【０１１８】
命令処理部１０は、ソフトウェア・ブレークポイントの停止命令（ＥＳＴＯＰ）をプリデコードすると（サイクルＣ２５１）、新たな命令のデコードを停止し、このＨＡＬＴイベントに対する応答信号ＨＡＬＴ＿ＡＣＫを発生する（サイクルＣ２５２）。
【０１１９】
信号発生部１５は、停止命令（ＥＳＴＯＰ）によって新たな命令のデコードが停止されると、停止信号ＳＨを発生して信号伝播部１６に入力する。状態信号出力部１７は、停止信号ＳＨが信号伝播部１６を伝播している間、命令実行部１３における命令の実行が未完了であることを示す値「１」の状態信号Ｓ１を出力する（サイクルＣ２５２〜Ｃ２６０）。
【０１２０】
状態信号Ｓ１が「１」の場合、命令処理部１０より出力される応答信号ＨＡＬＴ＿ＡＣＫは、ＡＣＫ信号保持回路３５によって保持される。状態信号Ｓ１が「１」から「０」へ変化すると（サイクルＣ２６１）、ＡＣＫ信号保持回路３５に保持された応答信号ＨＡＬＴ＿ＡＣＫはＡＮＤ回路３６を通過し、フラグセット信号ＦＬＧ＿ＳＥＴとして実行制御部２１に入力される。実行制御部２１は、このフラグセット信号ＦＬＧ＿ＳＥＴを受けて、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）のＨＡＬＴイベントフラグをセットする（サイクルＣ２６２）。
【０１２１】
また、状態信号Ｓ１が「１」から「０」へ変化すると、エッジ検出回路３４は信号ＤＳＵＳＰ＿ＳＥＴを出力して、信号実行制御部２１のステートマシン２１１（ＥＸＳＭ）のステートを「停止状態（ＤＳＵＳＰ）」に設定する（サイクルＣ２６２）。
【０１２２】
以上の動作は図８の場合と同様であり、命令実行部１３における命令の実行が完了するまでの間、デバッグ制限部３０は、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）及びステートマシン２１１（ＥＸＳＭ）の更新を制限する。
【０１２３】
一方、図９の動作例では、図８の場合と異なり、停止命令（ＥＳＴＯＰ）のＨＡＬＴイベントによって「停止状態（ＤＳＵＳＰ）」に移行した後、割り込み要求が発生する（サイクルＣ２５３）。割り込み要求が発生したとき、状態信号Ｓ１は「１」に設定されており、ＡＮＤ回路３１から出力される割り込みイネーブル信号ＩＮＴ＿ＥＮＭは「０」になる。そのため、この割り込み要求は命令処理部１０において受け付けられずに待機状態となる（サイクルＣ２５３〜Ｃ２６１）。状態信号Ｓ１が「１」から「０」に変化すると、ＡＮＤ回路３１による割り込みイネーブル信号ＩＮＴ＿ＥＮのマスキングが解除されるため、命令処理部１０は待機状態にあった割り込み要求を受け付ける（サイクルＣ２６２）。
このように、図１に示すプロセッサにおいては、命令実行部１３における命令の実行が完了するまでの間、割り込み要求の受付が制限される。
【０１２４】
図１０は、本実施形態に係る図１に示すプロセッサにおいて、プログラムの実行を停止する際の遷移期間にＨＡＬＴイベント（ウォッチポイント）と割り込みが発生する場合の第１の動作例を示すタイミング図である。
図１０（Ａ）〜（Ｖ）は、それぞれ図４（Ａ）〜（Ｖ）に対応する。
図１０（Ｗ）は、拡張遅延部１６１において延長されたパイプラインの段階「ＷＲＩＴＥ３」を示す。
図１０（Ｘ）は、状態信号Ｓ１を示す。
【０１２５】
命令処理部１０は、停止命令（ＥＳＴＯＰ）に応じて新たな命令のデコードを停止し、状態信号Ｓ１を「１」に設定する（サイクルＣ３０１，Ｃ３０２）。デバッグ制限部３０は、状態信号Ｓ１が「１」の間、デバッグ部２０による停止命令（ＥＳＴＯＰ）に応じたデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）及びステートマシン２１１（ＥＸＳＭ）の更新を制限する（サイクルＣ３０２〜Ｃ３１１）。また、この間に発生する割り込み要求（サイクルＣ３０３）を待機状態とする。以上の動作は、図９の場合と同様である。
【０１２６】
一方、図１０の動作例では、図９の場合と異なり、命令のデコードが停止された後の遷移期間において、更にウォッチポイントのＨＡＬＴイベントが発生する（サイクルＣ３０７）。
【０１２７】
分析部２２は、ウォッチポイントの条件に一致するアクセスを検出すると、その旨を実行制御部２１に通知する。このときステートマシン２１１（ＥＸＳＭ）は「停止状態（ＤＳＵＳＰ）」を示していないので、実行制御部２１はプログラムの実行停止を要求するリクエスト信号ＷＰ−ＲＱを命令処理部１０に出力する（サイクルＣ３０７）。リクエスト信号ＷＰ−ＲＱを受けた命令処理部１０は、デバッグ部２０に応答信号ＨＡＬＴ＿ＡＣＫを出力する（サイクルＣ３０８）。ところが、このとき状態信号Ｓ１が「１」であるため、先の停止命令（ＥＳＴＯＰ）の場合と同様、この応答信号ＨＡＬＴ＿ＡＣＫはＡＣＫ信号保持回路３５によって保持される。ウォッチポイントのＨＡＬＴイベントに応じたデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）の更新も、状態信号Ｓ１が「０」になるサイクルＣ３１２まで遅延される。その結果、サイクルＣ３１２においては、２つのＨＡＬＴイベント（停止命令（ＥＳＴＯＰ），ウォッチポイント）についてデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）のフラグ設定が行われる。
【０１２８】
命令処理部１０は、状態信号Ｓ１が「１」から「０」に変化すると、デバッグ制限部３０のＡＮＤ回路３１による割り込み要求の受付の制限が解除されるため、それまで待機状態としていた割り込み要求を受け付ける（サイクルＣ３１２）。
命令処理部１０は、割り込み要求を受け付けると、応答信号ＲＴＩＮＴＡＣＫを出力する（サイクルＣ３１３）。デバック部２０は、この応答信号ＲＴＩＮＴＡＣＫを受けて、ステートマシン２１１（ＥＸＳＭ）を「停止状態（ＤＳＵＳＰ）」から「停止中の割り込み状態（ＩＤＳ：interrupt during suspend）」に更新する（サイクルＣ３１４）。
命令処理部１０は、割り込みの受け付けに伴って、ステータス・レジスタ（ＳＴ０〜ＳＴ２）等の情報をスタックに保存する処理を開始する。すなわち、命令処理部１０は、割り込み要求を受け付けると、スタックに保存する所定のレジスタの情報をバスＦＤＢＵＳ，ＥＤＢＵＳへ出力する（サイクルＣ３１９〜Ｃ３２１）。そして、割り込みルーチンを開始する前に、各レジスタの記憶情報をクリアする（サイクルＣ３２０）。
デバック部２０は、このスタックへの保存処理が開始されると、割り込み階層のデータ（ＤＦＣ）を「１」だけ増加させる（サイクルＣ３１８）。そして、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）の保存処理が行われる時点(サイクルＣ３２０)において、フラグデータＨＰＩ，ＩＤＳ＿ＡＣＴをそれぞれ「１」に設定する。
【０１２９】
以上の処理を経て割り込みルーチン（フォアグラウンド・コード）へ移ったとき、ステートマシン２１１（ＥＸＳＭ）のステートは「停止中の割り込み状態（ＩＤＳ）」になっている（サイクルＣ３２２〜）。したがって、命令処理部１０は、図４の場合のように停止することなく、割り込みルーチンの命令を先頭から正常に実行する（サイクルＣ３２２）。
【０１３０】
図２に示すプロセッサでは、プログラムの実行が停止される際の遷移期間において、割り込み要求の受付を許可する。そのため、遷移期間において割り込み要求とＨＡＬＴイベントが重複してしまうと、＜１−２＞において図４を参照して説明したように、割り込み要求を受け付ける前にデコードされた命令（バックグラウンド・コード）に由来して発生したＨＡＬＴイベントが、割り込みルーチン（フォアグラウンド・コード）における命令の実行に影響を与えてしまうといった問題が生じる。
一方、本実施形態に係る図１に示すプロセッサでは、遷移期間における割り込み要求の受付を制限することにより、遷移期間に生じたＨＡＬＴイベントに伴う処理と、割り込みルーチンへ移行する際の処理との重複が回避される。これにより、割り込みルーチンへ移行する前のＨＡＬＴイベントが割り込みルーチンへ移行した後の処理の実行状態に影響を与えなくなり、上記の問題が解消される。
【０１３１】
図１１は、本実施形態に係る図１に示すプロセッサにおいて、プログラムの実行を停止する際の遷移期間にＨＡＬＴイベント（ウォッチポイント）と割り込みが発生する場合の第２の動作例を示すタイミング図である。図１１（Ａ）〜（Ｘ）は、それぞれ図１０（Ａ）〜（Ｘ）に対応する。
【０１３２】
図１１に示す第２の動作例では、ウォッチポイントによるＨＡＬＴイベントの発生時点が３サイクル遅くなっている点で、図１０に示す第１の動作例と異なる。しかしながら、第２の動作例においても、図１０の場合と同様に、遷移期間における割り込み要求の受付を制限しているため、この期間におけるＨＡＬＴイベントと割り込みの重複は回避される。したがって、割り込みルーチンへ移行する前に生じたＨＡＬＴイベントが割り込みルーチンへ移行した後の実行状態に影響を与えるという問題は解消される。
また、遷移期間におけるＨＡＬＴイベントと割り込みの重複が回避されることから、＜１−２＞において図５を参照して説明したように、割り込みルーチンへ移行する前のＨＡＬＴイベントが割り込みルーチンへ移行した後のデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）の内容に影響を与えるといった問題も解消される。
【０１３３】
＜２−３＞  割り込みルーチンから復帰してプログラムを停止する際の遷移期間にＨＡＬＴイベントが発生する場合
【０１３４】
図１２は、本実施形態に係る図１に示すプロセッサにおいて、割り込みルーチンから復帰してプログラムを停止する際の遷移期間にＨＡＬＴイベントが発生する場合の動作の一例を示すタイミング図である。
図１２（Ａ）〜（Ｕ）は、それぞれ図６（Ａ）〜（Ｕ）に対応する。
図１２（Ｖ）は、拡張遅延部１６１において延長されたパイプラインの段階「ＷＲＩＴＥ３」を示す。
図１２（Ｗ）は、状態信号Ｓ１を示す。
【０１３５】
命令処理部１０は、割り込みルーチンにおいて復帰命令（ＲＴＩ−Ｒ）をプリデコードすると（サイクルＣ４０２）、新たな命令のデコードを停止して、応答信号ＲＥＴＩＡＣＫを出力する（サイクルＣ４０３）。そして、割り込みルーチンの実行前にスタックへ保存された情報をバスＣＤＢＵＳ，ＤＤＢＵＳに出力し、所定のレジスタへ戻す。
スタックの情報がデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）へ戻されると、これに記憶されるフラグデータＨＰＩ，ＩＤＳ＿ＡＣＫは、割り込み前の状態（値「０」）へそれぞれ戻る（サイクルＣ４０９）。割り込みの階層を示すデータ（ＤＦＣ）については、スタックへ保存する前に「１」を加算しているため、デバッグ部２０は、スタックの情報がデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）へ戻されると、その値から「１」を減算する（サイクルＣ４１０）。ステータス・レジスタＳＴ２に格納されたフラグデータＤＢＧＭは、フラグデータＨＰＩ，ＩＤＳ＿ＡＣＴより遅れたタイミングで割り込み前の状態（値「０」）に戻る（サイクルＣ４１１）。
以上の復帰命令（ＲＴＩ−Ｒ）の動作は、図６の場合と同様である。
【０１３６】
一方、図１２の動作例では、図６の場合と異なり、復帰命令（ＲＴＩ−Ｒ）によって新たな命令のデコードが停止されると、信号発生部１５において停止信号ＳＨが発生する。停止信号ＳＨは、命令実行部１３における命令の実行段階の進行に同期して、パイプラインの最後の段階「ＷＲＩＴＥ３」まで信号伝播部１６を伝播する。状態信号出力部１７は、信号伝播部１６において停止信号ＳＨが伝播している間、値「１」の状態信号Ｓ１を出力する（サイクルＣ４０３〜Ｃ４１１）。
【０１３７】
状態信号Ｓ１が「１」から「０」へ変化すると、ステートマシン２１１（ＥＸＳＭ）のステートは「停止状態（ＤＳＵＳＰ）」に更新される（サイクルＣ４１３）。
【０１３８】
また、分析部２２は、上述した復帰命令（ＲＴＩ−Ｒ）の処理と並行して、予め設定された条件に従って、命令処理部１０によるメモリへのアクセスや外部からのトリガ信号を監視している。そして、ステータス情報がスタックへ保存される直前にお
いて、ウォッチポイントの条件に一致するアクセスが発生したことを検出する（サイクルＣ４０６）。
【０１３９】
実行制御部２１は、分析部２２からウォッチポイントのＨＡＬＴイベントを通知されると、命令処理部１０に対してプログラムの実行停止を要求するリクエスト信号ＷＰ−ＲＱを出力する（サイクルＣ４０６）。リクエスト信号ＷＰ−ＲＱを受けた命令処理部１０は、これに対する応答信号ＨＡＬＴ＿ＡＣＫを出力する（サイクルＣ４０７）。ところが、このとき状態信号Ｓ１が「１」であるため、応答信号ＨＡＬＴ＿ＡＣＫはＡＣＫ信号保持回路３５によって保持される。ウォッチポイントのＨＡＬＴイベントに応じたデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）の更新は、状態信号Ｓ１が「０」になるまで遅延される（サイクルＣ４１３）。デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）の更新が遅延されている間に、スタックに退避されたステータス情報が各レジスタへ戻される。
【０１４０】
図２に示すプロセッサでは、＜１−３＞において説明したように、復帰命令（ＲＴＩ−Ｒ）によってプログラムの実行を停止する遷移期間に発生したＨＡＬＴイベントの情報が、スタックに退避された情報を戻す際に消失してしまうという問題が生じる。
一方、本実施形態に係る図１に示すプロセッサでは、復帰命令（ＲＴＩ−Ｒ）に伴う処理が完了するまで、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）の更新を制限する。そのため、遷移期間に発生したＨＡＬＴイベントの情報はデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）に正しく記録され、上記の問題が解消される。
【０１４１】
＜２−４＞  割り込みによってデバッグ・フレーム（割り込みの階層）が変わるときにＤＭＡ部２３のアクセスが生じる場合
【０１４２】
図２に示すプロセッサでは、＜１−４＞で説明したように、割り込み命令によってデバッグ・フレーム（割り込みの階層）が変わるとき、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）等に格納される命令処理部１０Ｘのステータス情報は、全て一斉に更新されるのではなく、部分的に異なるタイミングで更新される。そのため、ＤＭＡ部２３の機能によって生成されたメモリアクセス要求（例えばレジスタ値の読み出し命令）がデバッグ・フレームの変わり目において実行され、命令処理部１０Ｘのステータス情報が読み出された場合、その個々の情報の間で相関がないという問題がある。
これに対し、本実施形態に係る図１に示すプロセッサでは、プログラムの実行が停止される遷移期間において状態信号Ｓ１が「１」に設定され、割り込み要求の受付が制限される。そのため、命令の供給が停止される前にＤＭＡ機能により挿入されたメモリ等へのアクセス(例えばデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）の読み出し)が遷移期間において実行されても、その遷移期間は上述したデバッグ・フレームの変わり目と重複しない。すなわち、命令の供給が停止される前にＤＭＡ機能により挿入されたメモリ等へのアクセスは、信号伝播部１６においてＨＡＬＴ命令が伝播する期間内に終了するので、割り込み要求の受付をこの期間より遅らせることで、ＤＭＡ機能によるメモリ等へのアクセスとデバッグ・フレームの変わり目とが重複しないようになる。これにより、割り込みルーチンへ移行する際のデバッグ・フレームの変わり目において相関性のないステータス情報が読み出されることがなくなり、上記の問題が解消される。
【０１４３】
また、図２に示すプロセッサでは、プログラムの実行が停止される際の遷移期間において、ＤＭＡ部２３によるアクセスが有効になっている。そのため、この遷移期間にＤＭＡ部２３へコマンドが入力されると、ＤＭＡ部２３はメモリ等へのアクセスを実行する。
もし、遷移期間中にＤＭＡ部２３によるメモリ等へのアクセス要求が命令処理部１０Ｘで受け付けられると、そのアクセス要求に伴う処理の実行には命令実行部１３が使用されるので、それ以前に開始された命令のパイプライン処理が全て完了した後も、ＤＭＡ部２３のアクセス要求に伴うパイプライン処理はしばらく続く。
つまり、遷移期間中にＤＭＡ部２３のアクセス要求を受け付けてしまうと、ＨＡＬＴ命令が信号伝播部１６を伝播し終えた後も（状態信号Ｓ１が「１」から「０」へ戻った後も）、ＤＭＡ部２３のアクセス要求に伴うパイプライン処理が続いてしまうことになる。そのため、状態信号Ｓ１が「０」の状態でＤＭＡのパイプライン処理が続いているときに割り込みが受け付けられると、先述の場合と同様に、デバッグ・フレームの変わり目において相関性のないステータス情報が読み出されるという問題が生じる。
これに対し、図１に示すプロセッサでは、遷移期間におけるＤＭＡ部２３のアクセス要求（すなわちリクエスト信号ＤＭＡ＿ＲＱＭ）を状態信号Ｓ１によって制限する。すなわち、状態信号Ｓ１が「１」の期間に発生したＤＭＡ部２３のアクセス要求は、状態信号Ｓ１が「０」に変わるまで遅延される。これにより、遷移期間中に発生したＤＭＡ部２３のアクセス要求は、命令処理部１０のパイプライン処理の完了後（すなわち「停止状態（ＤＳＵＳＰ）」）において生じたものとして取り扱うことが可能になる。
ここで、実行制御部２１は、「停止状態（ＤＳＵＳＰ）」においてＤＭＡ部２３のアクセス要求が発生すると、そのアクセス要求に伴うパイプライン処理が完了するまで割り込みの受付を制限する（割り込みイネーブル信号ＩＮＴ＿ＥＮを無効状態にする）ものとする。
そうすると、遷移期間後の「停止状態（ＤＳＵＳＰ）」において実行されるＤＭＡ部２３のアクセス期間中においては、割り込みが受け付けられなくなり、デバッグ・フレームの変わり目が生じないため、相関性のないステータス情報が読み出されるという先述の問題が解消する。
更に、ＤＭＡ部２３のアクセス要求が受け付けられた後にデバッグ・フレームの変化が生じないことから、ＤＭＡ部２３のアクセス要求が受け付けられたデバッグ・フレームと、その要求の受け付けによって実際にメモリ等へのアクセスが実行されるデバッグ・フレームとが常に一致する。すなわち、ＤＭＡ部２３によるアクセスが所望のデバッグ・フレームとは異なるフレームで実行されるという問題は生じない。
【０１４４】
図１３は、本実施形態に係る図１に示すプロセッサにおいて、プログラムの実行を停止する際の遷移期間にＤＭＡ要求が発生する場合の動作例を示すタイミング図である。図１３（Ａ）〜（Ｏ）は、それぞれ図９（Ａ），（Ｃ）〜（Ｐ）に対応する。
【０１４５】
命令処理部１０は、ソフトウェア・ブレークポイントの停止命令（ＥＳＴＯＰ）をプリデコードすると（サイクルＣ４５１）、新たな命令のデコードを停止し、状態信号Ｓ１を「１」に設定する（サイクルＣ４５２）。パイプラインに残る命令の処理が完了し、状態信号Ｓ１が「１」から「０」へ変化すると（サイクルＣ４６１）、デバッグ制限部３０による制限が解除され、デバッグ部２０はデバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）及びステートマシン２１１（ＥＸＳＭ）を更新する（サイクルＣ４６２）。
このように状態信号Ｓ１が「１」となる期間（サイクルＣ４５２〜Ｃ４６０）において、ＤＭＡ部２３はメモリ等へのアクセスを指示するコマンドを入力し、これに応じたリクエスト信号ＤＭＡ＿ＲＱを出力する（サイクルＣ４５３）。このとき状態信号Ｓ１は「１」なので、ＡＮＤ回路３３から出力されるリクエスト信号ＤＭＡ＿ＲＱＭは「０」になる。その結果、ＤＭＡ部２３から出力されるリクエスト信号ＤＭＡ＿ＲＱは命令処理部１０において受け付けられず、ＤＭＡ部２３によるＤＭＡ要求は待機状態となる。
状態信号Ｓ１が「１」から「０」に変化すると、ＡＮＤ回路３３によるリクエスト信号ＤＭＡ＿ＲＱのマスキングが解除されるため、命令処理部１０は待機状態のＤＭＡ要求を受け付ける（サイクルＣ４６２）。
このように、図１に示すプロセッサにおいては、命令実行部１３における命令の実行が完了するまでの間、ＤＭＡ部２３によるアクセスが制限されるため、割り込みに伴うデバッグ・フレームの変わり目において相関性のないステータス情報がＤＭＡ機能により読み出されるという問題は生じない。
【０１４６】
＜２−５＞  プログラムの実行を停止する際の遷移期間にデバッグ部２０のコマンドが実行される場合
【０１４７】
プログラムの実行を停止する際の遷移期間や割り込みルーチンから復帰して停止する際の遷移期間においてデバッグ部２０Ｘにより実行コマンド（ＲＵＮＣコマンド等）が発行された場合、その実行コマンドの発行以前に既に命令処理部１０Ｘで処理されていた命令に由来するＨＡＬＴイベントが発生すると、＜１−５＞において説明したように、実行コマンドの本来の停止条件に含まれていない命令によって命令処理部１０Ｘが停止してまうという問題や、意図しないデバッグ・フレームにおいて実行コマンドが実行されてしまう問題が生じる。
これに対し、本実施形態に係るプロセッサでは、プログラムの実行を停止する際の遷移期間において、デバッグ部２０のコマンドの実行（ＨＡＬＴ、ＲＵＮＣコマンドなど）を制限する。
すなわち、プログラム停止時の遷移期間において、コマンドの実行を要求するリクエスト信号ＥＸＥ＿ＲＱが実行制御部２１において出力されると、このとき状態信号Ｓ１は「１」なので、ＡＮＤ回路３２から出力されるリクエスト信号ＥＸＥ＿ＲＱＭは「０」になる。その結果、実行制御部２１から出力されるリクエスト信号ＥＸＥ＿ＲＱは命令処理部１０において受け付けられず、実行制御部２１によるコマンド実行要求は待機状態となる。状態信号Ｓ１が「１」から「０」に変化すると、ＡＮＤ回路３２によるリクエスト信号ＥＸＥ＿ＲＱのマスキングが解除されるため、命令処理部１０は待機状態のコマンド実行要求を受け付ける。
このように、図１に示すプロセッサにおいては、遷移期間におけるコマンドの実行（ＨＡＬＴ、ＲＵＮＣコマンドなど）が制限されるため、遷移期間において命令の実行や停止に関わる制御が行われることに伴う上記のような問題が解消される。
【０１４８】
＜２−６＞  プログラムの実行停止時に割り込みを受け付けた後、ＨＡＬＴイベントが発生した場合
【０１４９】
図２に示すプロセッサでは、割り込みルーチンの最初又は２番目の命令がソフトウェア・ブレークポイントの停止命令（ＥＳＴＯＰ）等の場合、＜１−６＞において説明したように、ＨＡＬＴイベントが割り込みルーチン内で発生するにもかかわらず、スタックへのステータス情報の保存が行われる前に、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）のＨＡＬＴイベントフラグがセットされ、その内容がスタックに保存されてしまうという問題が生じる。
これに対し、本実施形態に係る図１に示すプロセッサでは、図９に示すように、プログラムの実行を停止する際の遷移期間において割り込みの受付を制限するため、上述した問題が解消される。
【０１５０】
＜２−７＞  ベンチマークカウンタ２２１においてカウントを行っている途中でプログラムの実行を停止する場合
【０１５１】
図２に示すプロセッサでは、プログラムの実行を停止する際、パイプラインに未処理の命令が残存していても、ＨＡＬＴイベント発生時点から一定期間の後にカウントを停止するため、パイプラインに残存するＨＡＬＴイベント発生以前の命令に由来するイベント(例えば、ウォッチポイント)についてはカウントの対象から除外されてしまうという問題が生じる。
一方、図１に示すプロセッサが備えるベンチマークカウンタ２２１は、デバッグのためにプログラムの実行を停止する場合においては、状態信号Ｓ１が「１」の間、すなわち命令処理部１０のパイプライン処理の未完了状態を示している間において、命令処理部１０の処理に関連するイベントの発生を示す信号のカウントを継続することが可能である。したがって、図１に示すプロセッサによれば、従来カウント対象から除外されている遷移期間のイベントを正しくカウントすることが可能であり、上記の問題を解消することができる。
また、このベンチマークカウンタ２２１は、パイプライン処理が未完了の遷移期間におけるカウントの条件、すなわち、被カウント信号のカウント動作を実行するか否かや、初期化信号に応じたカウント値の初期化を実行するか否かを選択できる。すなわち、状態信号Ｓ１によって遷移期間が明確に示されていることを利用して、遷移期間におけるカウント動作やカウント値初期化動作を非常に簡易な回路で制御できる。その結果、デバッグに関わる様々なカウント機能を非常に簡易な回路構成で実現することが可能である。
更に、遷移期間におけるカウント動作やカウント値初期化動作をコマンドに応じて任意に制御できるようにベンチマークカウンタ２２１を構成すれば、様々な条件で被カウント信号のカウントを行うことが可能になるため、ユーザの利便性を向上させることができる。
【０１５２】
以上説明したように、本実施形態に係る図１に示すプロセッサによれば、パイプライン方式にて命令を処理する命令処理部１０において当該命令の処理が停止される場合、新たな命令の処理が停止されるとともに、既に開始された処理が完了したか否かを示す状態信号Ｓ１が出力される。この状態信号Ｓ１が命令処理部１０における処理の未完了状態を示す場合、デバッグ部２０によるデバッグ動作の実行がデバッグ制限部３０により制限される。すなわち、命令処理部１０への命令の入力を停止してから、その停止より前に既に開始された処理が完了するまでの間、命令処理部１０の動作の制御やその動作状態の記録などに関連するデバッグ動作が制限される。
【０１５３】
従来のパイプライン方式のプロセッサでは、ＨＡＬＴイベント等によるデバッグ状態の変化が、それ以前にデコードされた命令の実行が完了しているかどうかに関わらず、新たな命令のデコードを停止してから一定のクロックサイクル後に起こっている。これは、単純に、命令レジスタ（フェッチした命令をデコードするために格納するレジスタ）への新たな命令の供給を止めた時点において、プログラムの実行が停止状態になったと見なしていたことによる。すなわち、プログラムの実行が停止したかどうかの境界線が、命令レジスタへの命令供給の停止時点に設定されている。
しかしながら、パイプラインにおいて未だ命令の実行が続いている段階で、プロセッサの動作状態を制御するデバッグ用のコマンドを実行したり、ＨＡＬＴイベントに応じてステータス情報を更新したり、割り込み要求を受け付けたり、更にはデバッグ用のＤＭＡ機能によるメモリ等へのアクセスを有効にしたりすると、デバッグ上のさまざまな問題（パイプライン・ハザード）が生じる。これを解消するため、例えば問題が生じる条件ごとに個別に動作結果だけの整合を得ようとすると、その制御が非常に複雑になる。また、問題が生じる全ての条件を抽出することは困難である。
これらの問題の原因は、ＨＡＬＴイベントによるデバッグ状態の変化、あるいはその前後のデバック動作がプロセッサのプログラム・フローに同期化されていないことにある。本実施形態に係るプロセッサでは、ＨＡＬＴイベント事態を一つの命令（「ＨＡＬＴ」：停止信号ＳＨ）と見なし、それをパイプラインと同期した処理フロー上に明示的に乗せることで問題の解決を図っている。すなわち、この仮想的な命令「ＨＡＬＴ」がパイプラインの段階を通過しているか否かを検出することによって、命令実行部１１への命令供給を停止する以前に既に供給されている命令がパイプラインの全段階を通過してその処理が完了する時点を、デバッグ部２０に対し容易に伝えることができる。これにより、プログラムの実行の停止や開始の境界線がデバッグ動作にとって極めて明確なものとなり、命令実行部１３に実行中の命令が残っている状態でデバッグ動作が行われることによる種々の問題（パイプライン・ハザード）を解消することができる。
【０１５４】
また、本実施形態に係るプロセッサでは、命令処理部１０における命令の処理が未完了の状態か否かを示す状態信号Ｓ１を用いることによって、デバッグ用のコマンドの実行、ＨＡＬＴイベントに応じたステータス情報の更新、割り込み要求の受付、ＤＭＡ機能によるメモリへのアクセス等、様々なデバッグ動作のそれぞれについて、待機状態にするのか、無視するのか、又はそのまま実行するのかといった制御を非常に簡易な回路で実現できる。
【０１５５】
また、本実施形態に係るプロセッサでは、ＨＡＬＴイベントの命令「ＨＡＬＴ」（すなわち停止信号ＳＨ）が通常のパイプラインの段階を通過した後更に拡張段階（ＷＲＩＴＥ３）を通過するように、拡張遅延部１６１を設けている。これにより、命令がパイプラインの全段階を通過した後で、その命令の実行に付随した処理（ＨＡＬＴイベントの処理など）が発生する場合でも、その付随した処理が上述した拡張段階（ＷＲＩＴＥ３）において発生させることで、付随した処理が発生する期間においてデバッグ動作を適切に制限することができる。
【０１５６】
次に、本実施形態に係るプロセッサの変形例について説明する。
【０１５７】
図１４は、本実施形態に係るプロセッサの第１の変形例を示す図である。
図１４に示すプロセッサは、命令処理部１０Ａと、デバッグ部２０と、デバッグ制限部３０とを有する。図１４と図１における同一符号は同一の構成要素を示す。
【０１５８】
命令処理部１０Ａは、命令の処理を停止しているときにＤＭＡ部２３によるアクセスや命令の挿入が生じた場合、当該アクセス等に伴う命令の処理が完了したか否かを示す状態信号Ｓ１を出力する。命令の処理を停止する場合に状態信号Ｓ１を出力する動作については、図１における命令処理部１０と同じである。
【０１５９】
命令処理部１０Ａは、例えば図１４に示すように信号発生部１５Ａを有する。
信号発生部１５Ａは、ＨＡＬＴイベント等に応じて入力制御部１１による命令の入力が停止された場合に加えて、命令の処理を停止しているときにＤＭＡ部２３によるアクセス等が生じた場合にも、停止信号ＳＨを発生する。信号発生部１５Ａは、ステートマシン２１１（ＥＸＳＭ）におけるステートを示す信号ＥＸＳＭ＿ＳＴＡＴとＤＭＡ部２３からのリクエスト信号ＤＭＡ＿ＲＱＭとを入力し、ステートマシン２１１のステートが「停止状態（ＤＳＵＳＰ）」かつリクエスト信号ＤＭＡ＿ＲＱＭが「１」の場合に停止信号ＳＨを発生する。
【０１６０】
なお、デバッグ制限部３０は、状態信号Ｓ１がＤＭＡ部２３のアクセス等に伴う命令の処理の未完了を示す場合、状態信号Ｓ１が当該処理の完了状態を示すまで命令処理部１０Ａにおける割り込み要求の受付を制限する。
【０１６１】
命令処理部１０Ａにおいて命令の処理が停止されているとき、ＤＭＡ部２３によるメモリやレジスタへのアクセスや命令の挿入が開始され、さらにその直後に割り込み要求が受け付けられて割り込みルーチンへの移行が開始された場合、ＤＭＡ部２３のリクエストが発行されたときのデバック・フレーム（割り込みの階層）と、ＤＭＡ部２３が実際にアクセスを行うときのデバッグ・フレームとが一致しない場合がある。その場合、ＤＭＡ部２３によるアクセスが所望のデバッグ・フレームとは異なるフレームで実行されるという問題が生じる。
そこで、図１４に示すプロセッサでは、命令の処理を停止しているときにＤＭＡ部２３によるアクセス等が生じた場合、そのアクセス等に伴う処理が完了するまで、命令処理部１０Ａにおける割り込み要求の受付を制限する。
図１５はその動作例を示すタイミング図であり、図１５（Ａ）〜（Ｐ）はそれぞれ図９（Ａ）〜（Ｐ）に対応する。プログラムの実行を停止している「停止状態（ＤＳＵＳＰ）」のステートにおいてＤＭＡ部２３から「１」のリクエスト信号ＤＭＡ＿ＲＱＭを入力すると、信号発生部１５Ａは停止信号ＳＨを出力する（サイクルＣ５０１）。この停止信号ＳＨを入力した信号伝播部１６は、命令実行部１３におけるパイプラインの段階の進行に合わせて、遅延部（ＲＢ１，…，ＲＢｎ，１６１）により段階的に停止信号ＳＨを伝播する。状態信号出力部１７は、信号伝播部１８において停止信号ＳＨが伝播していることを検知すると、状態信号Ｓ１を「１」に設定する（サイクルＣ５０２〜Ｃ５１０）。状態信号Ｓ１が「１」の期間において、ＤＭＡ部２３によるアクセスが行われる。例えば、ＤＭＡ部２３は、命令実行部１３のデコード段階のパイプラインに対してレジスタの読み書き要求を直接挿入させることにより、命令実行部１３のパイプライン処理を利用してレジスタの読み書きを実行させる。このＤＭＡアクセスによるパイプライン処理が未完了の間、状態信号Ｓ１は「１」になる。状態信号Ｓ１が「１」のときに割り込み要求が発生すると（サイクルＣ５０３）、図９の場合と同様、状態信号Ｓ１が「０」になるまで割り込み要求は待機状態となる。
このように、図１４に示すプロセッサでは、プログラムの実行停止時にＤＭＡ部２３のアクセス等が発生した場合、割り込み要求の受付を制限する。これにより、ＤＭＡ部２３のアクセス等が所望のデバッグ・フレームと異なるフレームで実行される問題を解消することができる。
【０１６２】
図１６は、本実施形態に係るプロセッサの第２の変形例を示す図である。
図１６に示すプロセッサは、命令処理部１０Ｂと、デバッグ部２０と、デバッグ制限部３０とを有する。図１６と図１における同一符号は同一の構成要素を示す。
【０１６３】
命令処理部１０Ｂは、命令バッファ・キューＩＢＱと、入力制御部１１と、セレクタ１２と、命令実行部１３と、パイプライン保護部１４と、状態信号出力部１７Ｂと、停止命令供給部１８とを有する。図１６と図１の同一符号は同一の構成要素を示す。
【０１６４】
停止命令供給部１８は、入力制御部１１により命令実行部１３への命令の入力が停止されると、所定の停止命令を命令実行部１３に供給する。例えば、ＨＡＬＴイベントが発生してプログラムの実行を停止する場合や、プログラムの実行停止中に生じた割り込みから復帰して再停止する場合などにおいて所定の停止命令を発生する。
【０１６５】
また、停止命令供給部１８は、命令の処理を停止しているときにＤＭＡ部２３によるアクセスや命令の挿入が生じた場合にも、所定の停止命令を発生する。すなわち、ステートマシン２１１（ＥＸＳＭ）におけるステートを示す信号ＥＸＳＭ＿ＳＴＡＴとＤＭＡ部２３からのリクエスト信号ＤＭＡ＿ＲＱＭとを入力し、ステートマシン２１１のステートが「停止状態（ＤＳＵＳＰ）」かつリクエスト信号ＤＭＡ＿ＲＱＭが「１」の場合、所定の停止命令を発生する。
【０１６６】
状態信号出力部１７Ｂは、停止命令供給部１８より供給された所定の停止命令が命令実行部１３において実行中であるか否か（すなわちパイプラインの段階を通過中であるか）を検知し、その検知結果を状態信号Ｓ１として出力する。例えば、所定の停止命令が実行中であれば「１」、実行中でなければ「０」の状態信号Ｓ１を出力する。
なお、命令実行部１３は、この所定の停止命令については実行結果（例えばメモリへのアクセスや演算結果の出力）を伴わない形式的な処理を行ってもよいし、特定の実行結果が生じるような処理を行ってもよい。
【０１６７】
上述した構成によれば、ＨＡＬＴイベントの発生等に応じて命令実行部１３への命令の入力が停止された場合や、プログラムの実行停止時にＤＭＡ部２３のアクセス等が生じた場合、命令実行部１３に所定の停止命令が供給される。この停止命令が命令実行部１３において実行されている間、状態信号出力部１７からは、命令実行部１３における命令の実行が完了していないことを示す状態信号Ｓ１が出力される。この状態信号Ｓ１が出力される場合、デバッグ部２０によるデバッグ動作（割り込み要求の受付、ＤＭＡ部２３によるアクセス、ステートマシン２１１（ＥＸＳＭ）の更新、デバッグ状態レジスタ２４（ＤＢＧＳＴＡＴ）の更新、デバッグ部２０のコマンドの実行など）が制限される。
したがって、図１６に示すプロセッサにおいても、プログラムが実行を停止する際の遷移期間におけるデバッグ動作が制限されるため、種々のパイプライン・ハザードを防止できる。また、ＤＭＡにおけるアクセスが発生した場合に割り込み要求の受付を制限するため、所望のデバッグ・フレーム（割り込みの階層）と異なるフレームにおいてＤＭＡのアクセスが実行されることを防止できる。
【０１６８】
以上、本発明の実施形態について説明したが、本発明は上記の実施形態のみに限定されるものではなく、種々のバリエーションを含んでいる。
【０１６９】
ＣＰＵのペリフェラル・モジュールの中には、デバッグ時においてＣＰＵの命令実行が停止した場合の動作を規定するため、命令レジスタへの命令供給が停止されている状態を示す信号の出力をプロセッサに要求するものがある。本実施形態によれば、プロセッサの動作状態を示すステートマシン２１１（ＥＸＳＭ）の情報と、上述した状態信号Ｓ１とに基づいて、簡易な論理演算により上記の信号を生成することができる。
【０１７０】
本発明のプロセッサは、パイプライン方式にて命令を処理する任意のプロセッサに広く適用可能である。
【図面の簡単な説明】
【０１７１】
【図１】本発明の実施形態に係るプロセッサの構成の一例を示す図である。
【図２】プログラムの実行を停止する際の遷移期間においてデバッグ動作を制限する機能をもたないプロセッサの一構成例を示す図である。
【図３】図２に示すプロセッサにおいて、プログラムの実行を停止する際の遷移期間にＨＡＬＴイベント（ウォッチポイント）が発生する場合の動作の一例を示すタイミング図である。
【図４】図２に示すプロセッサにおいて、プログラムの実行を停止する際の遷移期間にＨＡＬＴイベント（ウォッチポイント）と割り込みが発生する場合の第１の動作例を示すタイミング図である。
【図５】図２に示すプロセッサにおいて、プログラムの実行を停止する際の遷移期間にＨＡＬＴイベント（ウォッチポイント）と割り込みが発生する場合の第２の動作例を示すタイミング図である。
【図６】図２に示すプロセッサにおいて、割り込みルーチンから復帰してプログラムを停止する際の遷移期間にＨＡＬＴイベントが発生する場合の動作の一例を示すタイミング図である。
【図７】図２に示すプロセッサにおいて、プログラムの実行を停止する際の遷移期間に割り込みが発生し、更にその割り込みルーチンの先頭が停止命令である場合の動作の一例を示すタイミング図である。
【図８】本実施形態に係る図１に示すプロセッサにおいて、プログラムの実行を停止する際の遷移期間にＨＡＬＴイベント（ウォッチポイント）が発生する場合の動作の一例を示すタイミング図である。
【図９】本実施形態に係る図１に示すプロセッサにおいて、プログラムの実行を停止する際の遷移期間に割り込みが発生する場合の動作例を示すタイミング図である。
【図１０】本実施形態に係る図１に示すプロセッサにおいて、プログラムの実行を停止する際の遷移期間にＨＡＬＴイベント（ウォッチポイント）と割り込みが発生する場合の第１の動作例を示すタイミング図である。
【図１１】本実施形態に係る図１に示すプロセッサにおいて、プログラムの実行を停止する際の遷移期間にＨＡＬＴイベント（ウォッチポイント）と割り込みが発生する場合の第２の動作例を示すタイミング図である。
【図１２】本実施形態に係る図１に示すプロセッサにおいて、割り込みルーチンから復帰してプログラムを停止する際の遷移期間にＨＡＬＴイベントが発生する場合の動作の一例を示すタイミング図である。
【図１３】本実施形態に係る図１に示すプロセッサにおいて、プログラムの実行を停止する際の遷移期間にＤＭＡ要求が発生する場合の動作例を示すタイミング図である。
【図１４】本実施形態に係るプロセッサの第１の変形例を示す図である。
【図１５】図１４に示すプロセッサにおいて、命令の処理を停止しているときにＤＭＡアクセスが発生し、そのアクセス中において更に割り込み要求が発生した場合の動作例を示すタイミング図である。
【図１６】本実施形態に係るプロセッサの第２の変形例を示す図である。
【符号の説明】
【０１７２】
図１に示すプロセッサは、命令処理部１０と、デバッグ部２０と、デバッグ制限部３０とを有する。
１０，１０Ａ，１０Ｂ…命令処理部、１１…入力制御部、１２…セレクタ、１３…命令実行部、１４…パイプライン保護部、１５，１５Ａ…信号発生部、１６…信号伝播部、１６１…拡張遅延部、１７，１７Ｂ…状態信号出力部、２０…デバッグ部、２１…実行制御部、２２…分析部、２３…ＤＭＡ部、２４…デバッグ状態レジスタ（ＤＢＧＳＴＡＴ）、３０…デバッグ制限部，３０、３１，３２，３３，３６…ＡＮＤ回路、３４…エッジ検出回路、３５…ＡＣＫ信号保持回路、ＩＢＱ…命令バッファ・キュー
【図１】
2008269390.tif 000003
【図２】
2008269390.tif 000004
【図３】
2008269390.tif 000005
【図４】
2008269390.tif 000006
【図５】
2008269390.tif 000007
【図６】
2008269390.tif 000008
【図７】
2008269390.tif 000009
【図８】
2008269390.tif 000010
【図９】
2008269390.tif 000011
【図１０】
2008269390.tif 000012
【図１１】
2008269390.tif 000013
【図１２】
2008269390.tif 000014
【図１３】
2008269390.tif 000015
【図１４】
2008269390.tif 000016
【図１５】
2008269390.tif 000017
【図１６】
2008269390.tif 000018