(57)【要約】【課題】ブレーク機能を使用してデバッグモードへ遷移した状態で、デバッグモードを中断して割込みを利用したリアルタイム処理を行っているプログラムに対して、さらにブレーク機能を使用可能とする。【解決手段】デバッグモードを中断して割込みを受理したことを示すビットと、プロセッサ内部のデバッグ専用リソースのステートを示すビットを持ったＡＳＲレジスタ２を持ち、デバッグプログラムから退避及び復帰可能とする。また、ＡＳＲレジスタ２の内容をスタックとしてＡＳＥ−ＲＡＭ７に書き出すことで、さらに多重にデバッグモードを中断して割込みを受理することを可能とする。これにより、デバッグソフトウェアを中断して割込みを受理したことにより開始したユーザプログラムに対しても、ブレーク機能を使用可能とする。【選択図】図７
2007026084.tif 000002
【特許請求の範囲】
【請求項１】
第１のデバッグプログラム実行中に、割込みにより前記第１のデバッグプログラムを中断してユーザプログラムの実行が可能なマイクロプロセッサであって、
前記マイクロプロセッサの内部状態を保持し、退避可能なレジスタと、
前記マイクロプロセッサの内部状態の退避及び復帰に使用されるメモリとを有し、
前記ユーザプログラムを中断してさらに第２のデバッグプログラムの実行が可能であることを特徴とするマイクロプロセッサ。
【請求項２】
請求項１記載のマイクロプロセッサにおいて、
前記メモリは、デバッグプログラムでのみ操作可能なデバッグ専用メモリであり、
前記レジスタの退避先は、前記デバッグ専用メモリであることを特徴とするマイクロプロセッサ。
【請求項３】
請求項１記載のマイクロプロセッサにおいて、
多重割込み回数をカウントするカウンタと、
多重割込み回数の上限値を保持する保持回路と、
前記カウンタの値と前記保持回路の値とを比較する比較器とを有し、
前記比較器の比較結果に基づいて、多重割込み回数を制限することを特徴とするマイクロプロセッサ。
【請求項４】
請求項１記載のマイクロプロセッサにおいて、
デバッグモードを中断して割込みを受理したことを示すビットを有し、
前記ビットの内容に基づいて、多重割込み回数を制限することを特徴とするマイクロプロセッサ。
【請求項５】
請求項４記載のマイクロプロセッサにおいて、
前記ビットを利用して、前記割込みにより実行される処理が、リアルタイム処理の必要な処理か否かを判定し、前記リアルタイム処理を崩さない範囲でブレーク機能を利用可能とする機能を有することを特徴とするマイクロプロセッサ。
【請求項６】
請求項１記載のマイクロプロセッサにおいて、
前記レジスタに保持される前記マイクロプロセッサの内部状態は、デバッグ専用リソースのステートであることを特徴とするマイクロプロセッサ。
【請求項７】
請求項１記載のマイクロプロセッサにおいて、
前記マイクロプロセッサの内部状態の退避及び復帰は、デバッグプログラムにより行われることを特徴とするマイクロプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ユーザシステム上で動作するソフトウェアの開発支援のためのエミュレーション技術、そのエミュレーションを可能とするシステムＬＳＩもしくはマイクロプロセッサ、及びそれらを含むエミュレータに適用して有効な技術に関する。
【背景技術】
【０００２】
本発明者が検討した技術として、例えば、マイクロプロセッサ等のエミュレーション技術においては、以下の技術が考えられる。
【０００３】
システムＬＳＩもしくはマイクロプロセッサ応用機器の開発において、その応用システム（ユーザシステム）のデバッグやそのシステムの詳細な評価を行うため、エミュレータが使用されている。このエミュレータは、開発中のユーザシステムに接続されて、その詳細なシステムデバッグを支援するものである。
【０００４】
ユーザシステムのデバッグにおいて、所定の条件が成立した場合にユーザプログラムの実行を停止（ブレーク）する機能は、エミュレータの基本機能の一つとされる。
【０００５】
ユーザプログラム実行中にブレーク命令またはブレーク信号がマイクロプロセッサに入力されると、ユーザプログラムモードからデバッグモードに遷移される。この機能を用いてユーザプログラムのブレーク機能が実現される。
【０００６】
ユーザプログラムの特定アドレスの命令がブレーク命令に置き換えられたり、アドレスバスやデータバスの状態が特定条件に一致したことによりブレーク信号が生成されたりすると、それを受けて、制御がユーザプログラムモードからデバッグモードに遷移される。制御がデバッグモードに遷移されると、デバッグプログラムが動作してレジスタやメモリの内容表示や、デバッグを行っているプログラマによるエミュレータを介したレジスタやメモリの内容変更などの操作が行われる。
【０００７】
このとき、ユーザプログラムの実行は停止しているが、デバッグを行っているプログラマのエミュレータ操作と連動してユーザプログラムの実行再開を行うため、割込み応答時間として要求される時間（通常は数十マイクロ秒）と比べ、非常に長い時間、割込み処理を行うことができない。そのため、機器制御などのリアルタイム処理を必要とするシステムでは、デバッグ効率を著しく低下させる恐れがある。
【０００８】
この問題に対し、特許文献１では、デバッグプログラムが中断したことを示す信号を用意し、当該信号が“１”の時、割込からの復帰命令を実行した場合、デバッグモードへ復帰する方式で解決が図られている。
【０００９】
また同様に、特許文献２では、デバッグプログラム実行中に割込みを検出した場合、デバッグプログラムにより、割込みの種類に対応したユーザ指定のアドレスをテーブルから検索し、ブレークからの復帰命令で割込みハンドラへ直接分岐し、割込みからの復帰命令にブレークを設定し、再度デバッグプログラムへ復帰する方式で解決が図られている。
【００１０】
また、ユーザシステムのデバッグにおいて、バスに流れるアドレスやデータ、もしくはユーザプログラムの分岐元、分岐先アドレスを取り出し、所定のメモリもしくはピンを使用して外部に出力する（トレース）する機能は、前記ブレーク機能と並び、エミュレータの基本機能の一つとされる。
【００１１】
このトレース機能により、ユーザプログラム実行中に、マイクロプロセッサから、バスに接続されたメモリや他のＩＰへのロード、ストアに対するアドレスやデータ、もしくはマイクロプロセッサの実行するユーザプログラム内の分岐命令に対する分岐元アドレスや分岐先アドレスを、ユーザプログラムの実行を停止させることなく取り出すことができる。このように取り出した情報（トレースデータという）は、所定のメモリもしくはピンを介して外部へ取り出され、デバッグを行っているプログラマが確認することができる。
【特許文献１】特開平１１−１４３７３２号公報
【特許文献２】特開２０００−１４８５２９号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
ところで、前記のようなマイクロプロセッサ等のエミュレーション技術について、本発明者が検討した結果、以下のようなことが明らかとなった。
【００１３】
ブレーク機能によるユーザプログラムの停止は、トレース機能では不可能なマイクロプロセッサ内部のレジスタなどの内容表示や変更を可能とするが、機器制御などの割込みを利用したリアルタイム処理を不可能にする。
【００１４】
これに対し、前記特許文献１、特許文献２のようにデバッグモードを中断し、割込みを利用したリアルタイム処理を可能とする方法が挙げられる。この方法では、デバッグモード中であっても例外的にリアルタイム処理を可能とするが、ブレーク機能で停止させているユーザプログラム１で使用するデバイスやメモリ領域と、リアルタイム処理として実行されるユーザプログラム２で使用するデバイスやメモリ領域に共通部分がある場合、ユーザプログラム２が実行されることにより、ユーザプログラム１で使用するデバイスやメモリ領域の状態が変化してしまうことがある。そのため、ユーザプログラム１のデバッグが不可能となる場合がある。
【００１５】
そこで、ユーザプログラム２にブレーク機能を使ってデバッグすることを考えた場合、ユーザプログラム２を実行中のプロセッサ内部のレジスタなどの内容表示や変更は可能となるが、ユーザプログラム２をブレークにより長時間停止することになるため、リアルタイム処理ではなくなってしまう。また、ユーザプログラム１に対してブレーク機能を使用している状態で、ユーザプログラム２に対するブレーク機能を使用することになるため、プロセッサ内部のデバッグ専用リソースの状態（ステート）をデバッグプログラムから退避及び復帰可能とする必要がある。
【００１６】
一方、ユーザプログラム２にトレース機能を使ってデバッグを行う場合、そもそもマイクロプロセッサ内部のレジスタなどの内容表示や変更が行えないため、ブレーク機能が利用可能である場合と比べ、マイクロプロセッサ内部でどのような原因で不具合が発生するか、特定がより難しくなる。
【００１７】
本発明の前記並びにその他の目的と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１８】
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、次のとおりである。
【００１９】
すなわち、本発明によるマイクロプロセッサは、ブレーク機能を使用してデバッグモードへ遷移した状態で、デバッグモードを中断して割込みを利用したリアルタイム処理を行っているプログラムに対して、さらにブレーク機能を使用可能とするため、前記マイクロプロセッサの内部状態を保持・退避可能なレジスタと、前記マイクロプロセッサの内部状態の退避及び復帰に使用されるメモリとを有するものである。
【発明の効果】
【００２０】
本願において開示される発明のうち、代表的なものによって得られる効果を簡単に説明すれば、以下のとおりである。
【００２１】
デバッグ効率の向上を図ることができる。
【発明を実施するための最良の形態】
【００２２】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一部材には原則として同一の符号を付し、その繰り返しの説明は省略する。
【００２３】
以下に述べる本発明の実施の形態１〜３に係るマイクロプロセッサにより、デバッグモードを中断して実行している割込みを利用したリアルタイム処理に対し、デバッグを行っているプログラマが設定する割り込み応答時間の許容範囲内で、自由にブレーク機能を適用可能とし、デバッグ効率の向上を実現した。
【００２４】
（実施の形態１）
図１は、本発明の実施の形態１に係るマイクロプロセッサの構成を示すブロック図である。
【００２５】
まず、図１により、本実施の形態１に係るマイクロプロセッサの構成の一例を説明する。本実施の形態１のマイクロプロセッサ１０は、例えば、ＣＰＵ（中央処理装置）コア１、デバッグ制御回路６、ユーザＲＡＭ（ランダムアクセスメモリ）８、ＡＳＥ−ＲＡＭ（デバッグ専用メモリ）７、ＢＵＳ（バス）９などから構成されている。また、ＣＰＵコア１は、内部ステート制御回路３、モード遷移制御回路４、ＣＰＵ動作制御回路５、ＡＳＲ．ｓｔａｔｅ（内部ステート）レジスタ８０などから構成されている。なお、ユーザＲＡＭ８は、図１ではマイクロプロセッサ１０に内蔵されているが、外付けにしてもよい。また、マイクロプロセッサ１０は、通常は１つのチップで構成されるが、２つ以上の複数のチップで構成してもよい。また、マイクロプロセッサ１０はシステムＬＳＩの一部であってもよい。
【００２６】
ＡＳＲ．ｓｔａｔｅレジスタ８０は、マイクロプロセッサ１０内部のデバッグ専用リソースのステート（状態）を示すレジスタである。内部ステート制御回路３は、ＡＳＲ．ｓｔａｔｅレジスタ８０の更新制御を行う回路である。モード遷移制御回路４は、デバッグモードとデバッグモードの中断時の更新制御を行う回路である。ＣＰＵ動作制御回路５は、入力された割込み要求信号と命令実行の状態とＡＳＲ．ｓｔａｔｅレジスタ８０の内容から内部ステート制御回路３およびモード遷移制御回路４を動作させる回路である。デバッグ制御回路６は、マイクロプロセッサ１０内のデバッグ制御とマイクロプロセッサ１０外との通信を行う回路である。ＡＳＥ−ＲＡＭ７は、デバッグプログラムでのみ操作可能なデバッグ専用メモリである。ユーザＲＡＭ８は、ユーザプログラムおよびデバッグプログラムで操作可能なメモリである。ＢＵＳ９は、ＣＰＵコア１、デバッグ制御回路６、ＡＳＥ−ＲＡＭ７、ユーザＲＡＭ８とを接続するバスである。
【００２７】
図２に、ＡＳＲ．ｓｔａｔｅレジスタ８０を構成するＡＳＲ．ｓｔａｔｅビットの制御論理の一例を示す。このＡＳＲ．ｓｔａｔｅビットを複数ビット（例えば３２ビット）並べることによりＡＳＲ．ｓｔａｔｅレジスタ８０が構成される。
【００２８】
図２において、ＡＳＲ．ｓｔａｔｅビットに対応するＣＰＵコア内部のデバッグ専用リソースのステートのセット条件を４０、リセット時の初期値を４１、クリア条件を４２、内部ステートを保持するフリップフロップを４３とする。また、ＡＳＲ書き込み信号３４が“１”の時、ＡＳＲ．ｓｔａｔｅレジスタ８０に書き込む値がのったＡＳＲデータ信号３５の対応する値をフリップフロップ４３に書き込む。
【００２９】
図３に、本実施の形態１に対応するデバッグプログラムのフローチャートを示す。まず、ステップＳ９４でユーザプログラムを開始し、ステップＳ９０でブレークが発生しているか否かを判定する。ブレークが発生している場合は、ステップＳ９５でスタック待避（ＡＳＲ．ｓｔａｔｅレジスタ８０の内容をスタックとしてＡＳＥ−ＲＡＭ７に書き出す）を行い、ステップＳ９１で割込みを監視しながら、ステップＳ９６でデバッグプログラムを実行する。割込みが発生しない場合は、デバッグプログラムが終了するまで実行し（ステップＳ９６〜Ｓ９７）、ステップＳ９８でスタック復帰（ＡＳＥ−ＲＡＭ７の内容をスタックとしてＡＳＲレジスタ２に書き戻す）を行った後、ユーザプログラムに復帰する。
【００３０】
また、ステップＳ９１で割込みを受理した場合は、ステップＳ９２で割込みハンドラへ分岐して割込み処理用ユーザプログラムに分岐する。また、ユーザプログラムからデバッグプログラムへの復帰はステップＳ９３で割込みから復帰する命令（ＲＴＥ命令）の復帰先がデバッグプログラムかどうかを判定することで行う。
【００３１】
以上のような回路とデバッグプログラムの組み合わせで、デバッグモードを中断して実行している割込みを利用したユーザプログラムに対し、自由にブレーク機能が適用可能となる。
【００３２】
（実施の形態２）
図４は本発明の実施の形態２に係るマイクロプロセッサの構成を示すブロック図である。
【００３３】
まず、図４により、本実施の形態２に係るマイクロプロセッサ１０ａの構成の一例を説明する。本実施の形態のマイクロプロセッサ１０ａは、例えば、前記実施の形態１のマイクロプロセッサ１０にブレーク抑止制御回路１０００を追加したものである。本実施の形態のマイクロプロセッサ１０ａは、例えば、ＣＰＵコア１ａ、デバッグ制御回路６、ユーザＲＡＭ８、ＡＳＥ−ＲＡＭ７、ＢＵＳ９などから構成されている。また、ＣＰＵコア１ａは、内部ステート制御回路３、モード遷移制御回路４、ブレーク抑止制御回路１０００、ＣＰＵ動作制御回路５ａ、ＡＳＲ．ｓｔａｔｅレジスタ８０などから構成されている。前記実施の形態１と同様に、ユーザＲＡＭ８は、図４ではマイクロプロセッサ１０ａに内蔵されているが、外付けにしてもよい。また、マイクロプロセッサ１０ａは、通常は１つのチップで構成されるが、２つ以上の複数のチップで構成してもよい。また、マイクロプロセッサ１０ａはシステムＬＳＩの一部であってもよい。
【００３４】
ＡＳＲ．ｓｔａｔｅレジスタ８０は、プロセッサ内部のデバッグ専用リソースのステートを示すレジスタである。内部ステート制御回路３は、ＡＳＲ．ｓｔａｔｅの更新制御を行う回路である。モード遷移制御回路４は、デバッグモードとデバッグモードの中断時の更新制御を行う回路である。ブレーク抑止制御回路１０００は、デバッグモード中の割込み受理を積算し、ある回数に達するとそれ以降のブレークを抑止する信号を発生する回路である。ＣＰＵ動作制御回路５ａは、入力された割込み要求信号と命令実行の状態とＡＳＲ．ｓｔａｔｅレジスタ８０の内容から、内部ステート制御回路３およびモード遷移制御回路４を動作させる回路である。デバッグ制御回路６は、マイクロプロセッサ内のデバッグ制御とマイクロプロセッサ外との通信を行う回路である。ＡＳＥ−ＲＡＭ７は、デバッグプログラムでのみ操作可能なデバッグ専用メモリである。ユーザＲＡＭ８は、ユーザプログラムおよびデバッグプログラムで操作可能なメモリである。ＢＵＳ９はＣＰＵコア１ａ、デバッグ制御回路６、ＡＳＥ−ＲＡＭ７、ユーザＲＡＭ８とを接続するバスである。
【００３５】
ＡＳＲ．ｓｔａｔｅビットの制御論理は、前記実施の形態１で示した図２の論理を使用する。
【００３６】
図５に、ブレーク抑止制御回路１０００の構成を示す。ブレーク抑止制御回路１０００は、デバッグモード中であることを示すＡＳＥ信号３０と、割込みが受理されたことを示す割込み受理信号３１が同時に“１”になったとき、カウンタ１１００をカウントアップし、クリア信号１１０５が“１”になったときにカウントダウンする。このクリア信号１１０５が“１”になるのは、リセット期間中と、割込みから復帰する命令（ＲＴＥ命令）により、中断していたデバッグプログラムを再開する際である。また、デバッグ中断上限回数を示す信号１１０４の値をデバッグプログラムからのみ書き込み可能であって、アドレスマップされているレジスタ１１０１を持ち、前記カウンタ１１００の値と、レジスタ１１０１との値を比較して一致した場合にブレーク抑止信号１１０３を“１”とする比較器１１０２を持つ。
【００３７】
図６に、本実施の形態２に対応するデバッグプログラムのフローチャートを示す。まず、ステップＳ１２５でユーザプログラムを開始し、ステップＳ１２０でブレーク抑止制御回路１０００を使用してデバッグ中断回数が上限でないかを判定する。上限に達していた場合、ブレークを受け付けずユーザプログラムのみを実行する。そのため、割込みなどで他のユーザプログラムが動作しても、多重ブレークを使用することを抑止し、スタック領域が無限に増加することを防ぐ。一方、上限に達していない場合は、ステップＳ１２１でブレークが発生しているかを判定し、ブレークが発生している場合は、ステップＳ１２６でスタック待避を行い、ステップＳ１２２で割込みを監視しながらデバッグプログラムを実行する（ステップＳ１２７）。割込みが発生しない場合は、デバッグプログラムが終了するまで実行し（ステップＳ１２８）、ステップＳ１２９でスタック復帰を行った後、ユーザプログラムに復帰する。また、ステップＳ１２２で割込みを受理した場合は、ステップＳ１２３で割込みハンドラへ分岐して割込み処理用ユーザプログラムに分岐する。また、ユーザプログラムからデバッグプログラムへの復帰は、ステップＳ１２４でＲＴＥ命令の復帰先がデバッグプログラムかどうかを判定することでを行う。
【００３８】
以上のような回路とデバッグプログラムの組み合わせで、デバッグモードを中断して実行している割込みを利用したユーザプログラムに対し、自由にブレーク機能を適用可能となる。また、デバッグ中断回数を制限することで、デバッグ専用リソースを減らすことができる。
【００３９】
（実施の形態３）
図７は本発明の実施の形態３に係るマイクロプロセッサの構成を示すブロック図である。
まず、図７により、本実施の形態３に係るマイクロプロセッサ１０ｂの構成の一例を説明する。本実施の形態３に係るマイクロプロセッサ１０ｂは、例えば、前記実施の形態１に係るマイクロプロセッサ１０のＡＳＲ．ｓｔａｔｅレジスタ８０をＡＳＲレジスタ２に置き換えたものである。
【００４０】
本実施の形態３のマイクロプロセッサ１０ｂは、例えば、ＣＰＵコア１ｂ、デバッグ制御回路６、ユーザＲＡＭ８、ＡＳＥ−ＲＡＭ７、ＢＵＳ９などから構成されている。また、ＣＰＵコア１ｂは、内部ステート制御回路３、モード遷移制御回路４、ＣＰＵ動作制御回路５ｂ、ＡＳＲレジスタ２などから構成されている。前記実施の形態１及び２と同様に、ユーザＲＡＭ８は、図７ではマイクロプロセッサ１０ｂに内蔵されているが、外付けにしてもよい。また、マイクロプロセッサ１０ｂは、通常は１つのチップで構成されるが、２つ以上の複数のチップで構成してもよい。また、マイクロプロセッサ１０ｂはシステムＬＳＩの一部であってもよい。
【００４１】
図８に、ＡＳＲレジスタ２の構成を示す。ＡＳＲレジスタ２は、デバッグモードを中断して割込みを受理したことを示すＡＳＲ．ＡＲビット２０と、前記実施の形態１及び２のＡＳＲ．ｓｔａｔｅレジスタ８０に相当する、プロセッサ内部のデバッグ専用リソースのステートを示すＡＳＲ．ｓｔａｔｅビット２１を持ったレジスタである。
【００４２】
図７の内部ステート制御回路３は、ＡＳＲ．ｓｔａｔｅビット２１の更新制御を行う回路である。モード遷移制御回路４は、ＡＳＲ．ＡＲビット２０の更新制御を行う回路である。ＣＰＵ動作制御回路５ｂは、入力された割込み要求信号と命令実行の状態とＡＳＲレジスタ２の内容から内部ステート制御回路３およびモード遷移制御回路４を動作させる回路である。デバッグ制御回路６は、マイクロプロセッサ１０ｂ内のデバッグ制御と、マイクロプロセッサ１０ｂ外との通信を行う回路である。ＡＳＥ−ＲＡＭ７は、デバッグプログラムでのみ操作可能なデバッグ専用メモリである。ユーザＲＡＭ８は、ユーザプログラムおよびデバッグプログラムで操作可能なメモリである。、ＢＵＳ９は、ＣＰＵコア１ｂ、デバッグ制御回路６、ＡＳＥ−ＲＡＭ７、ユーザＲＡＭ８とを接続するバスである。
【００４３】
図８に示すように、ＡＳＲレジスタ２は、デバッグプログラムからのみ操作可能なアドレス割り付けの３２ビットレジスタとし、最上位ビットをＡＳＲ．ＡＲビット２０、それ以外のビットをＡＳＲ.ｓｔａｔｅビット２１とする。ＡＳＲ．ｓｔａｔｅビット２１は、ＣＰＵコア内部のデバッグ専用リソースのステートの数に従い必要な数だけ使用し、残りはリザーブビットとして“０”固定とする。
【００４４】
図９に、ＡＳＲ．ＡＲビット２０の制御論理を示す。デバッグモード中であることを示すＡＳＥ信号３０と、割込みが受理されたことを示す割込み受理信号３１が同時に“１”になったとき、フリップフロップ３２に“１”を書き込み、またＡＲクリア信号３３が“１”になったときはフリップフロップ３２に書き込まれている値を“０”に書き換える。このＡＲクリア信号３３が“１”となるのは、リセット期間中と、割込みから復帰する命令（ＲＴＥ命令という）により、中断していたデバッグプログラムを再開する際である。また、ＡＳＲ書き込み信号３４が“１”の時、ＡＳＲレジスタ２に書き込む値がのったＡＳＲデータ信号３５のＡＳＲ．ＡＲビット２０に対応する値をフリップフロップ３２に書き込む。
【００４５】
ＡＳＲ．ｓｔａｔｅビット２１の制御論理は、前記実施の形態１で示した図２の論理を使用する。図２に示すように、ＡＳＲ．ｓｔａｔｅビット２１に対応するＣＰＵコア内部のデバッグ専用リソースのステートのセット条件を４０、リセット時の初期値を４１、クリア条件を４２、内部ステートを保持するフリップフロップを４３とする。また、ＡＳＲ書き込み信号３４が“１”の時、ＡＳＲレジスタに書き込む値がのったＡＳＲデータ信号３５の対応する値をフリップフロップ４３に書き込む。
【００４６】
次に図１０により、ＡＳＲ．ＡＲビット２０の遷移を説明する。ユーザプログラムＡ５００において、ブレーク５０１が発生すると、マイクロプロセッサ１０ｂはデバッグモードに遷移し、デバッグプログラムＡ５０２の実行を開始する。このデバッグプログラムＡ５０２を実行中に、割込み５０３が発生すると、マイクロプロセッサはＡＳＲ．ＡＲビット２０に“１”を書き込み、ユーザプログラムＢ５０４の実行を開始する。ユーザプログラムＢ５０４実行中に、さらにブレーク５０５が発生すると、マイクロプロセッサ１０ｂは再度デバッグモードへ遷移し、デバッグプログラムＢ５０６の実行を開始する。デバッグプログラムＢ５０６の実行が終わると、ブレークから復帰命令（ＲＴＢ命令とよぶ）により、ブレーク機能により中断していたユーザプログラムＢ５０８に復帰する（５０７）。ユーザプログラムＢ５０８の実行が終わると、割込みからの復帰命令（ＲＴＥ命令とよぶ）により、デバッグプログラムＡ５０２の続きである５１０に復帰する（５０９）。この際、前記ＡＲクリア信号３３が“１”となるため、ＡＳＲ．ＡＲビット２０が“０”となる。デバッグプログラムＡ５１０の実行が終わると、ＲＴＢ命令により、ユーザプログラムＡ５１２に復帰し、ブレーク５０１が発生した直後の状態へ復帰する。
【００４７】
図１１に、５００〜５１２までのユーザプログラム、デバッグプログラムの実行順と、スタック操作の様子を時間軸にそって示す。ブレーク５０１によって開始されるデバッグプログラムＡ５０２では、まずＡＳＥ−ＲＡＭ７へのスタック待避Ａ６００を行う。また同様に、ブレーク５０５によって開始されるデバッグプログラムＢ５０６では、ＡＳＥ−ＲＡＭ７へのスタック待避Ｂ６０１を行う。
【００４８】
また、デバッグプログラムＢ５０６から、ユーザプログラムＢ５０８へＲＴＢ命令で復帰する際には、ＲＴＢ命令実行前に、スタック復帰Ｂ６０２を行う。同様に、デバッグプログラムＡ５１０から、ユーザプログラムＡ５１２へＲＴＢ命令で復帰する際には、ＲＴＢ命令実行前に、スタック復帰Ｂ６０３を行う。
【００４９】
以上の中で、デバッグプログラムＢ５０６を実行している期間が、多重ブレーク期間６０４である。また、デバッグプログラムのためのスタック操作をしている期間６００〜６０３は、割込み受理禁止期間であり、それ以外のデバッグモードである期間６０５がデバッグプログラム実行中の割込み許可期間６０５である。なお、スタック領域としてＡＳＥ−ＲＡＭ７を使用するのは、ユーザプログラムによる予期せぬデータ破壊からデバッグプログラムのスタック情報を保護するためである。また、ＡＳＥ−ＲＡＭ７はデバッグプログラム専用のメモリであるため、容量が非常に少なく（通常数キロバイト）、さらにデバッグプログラム本体の格納以外にトレースデータ保存用にも使用される事があるため、スタック領域のサイズはできる限り少ない方が望ましい。
【００５０】
ところで、ユーザプログラムＢ５０４，５０８は、デバッグプログラムＡ５０２，５１０よりも優先して実行すべきリアルタイム処理である。また、デバッグプログラムＡ５０２，５１０は、デバッグを行っているプログラマのエミュレータ操作と連動してユーザプログラムの実行再開を行う。
【００５１】
デバッグプログラムＡ５０２，５１０と、デバッグプログラムＢ５０６は、ともにＡＳＥ−ＲＡＭ７上に置かれる。デバッグプログラムＢ５０６は、リアルタイム処理に対するブレーク５０５の後に実行するため、デバッグプログラムＡ５０２，５１０のように、デバッグを行っているプログラマのエミュレータ操作と連動していると、ユーザプログラムＢ５０４，５０８のリアルタイム処理が不可能になってしまう。そのため、デバッグプログラムＢ５０６で実行する命令列数、多重ブレーク期間６０４の上限を設定することで、ユーザプログラムＢ５０４，５０８のリアルタイム処理を可能とする必要がある。
【００５２】
図１２に、この制約に対応するデバッグプログラムのフローチャートを示す。まず、ステップＳ７００の初期設定で、リアルタイム処理を行うユーザプログラムに対して、実行したい命令列と多重ブレーク期間の上限を設定する。その後、ステップＳ７１２でユーザプログラムを開始し、ステップＳ７０１でブレークが発生しているかを判定する。ブレークが発生している場合は、ステップＳ７０２でＡＳＲ．ＡＲビット２０の評価を行う。ＡＳＲ．ＡＲビット２０が“０”である場合は、ステップＳ７１３でスタック待避を行い、ステップＳ７０３で割込みを監視しながらデバッグを行っているプログラマのエミュレータ操作と連動したデバッグプログラムを実行する。ステップＳ７０３で割込みが発生しない場合は、ステップＳ７０５のデバッグプログラムが終了するまで実行し（ステップＳ７１４）、ステップＳ７１５でスタック復帰を行った後、ユーザプログラムに復帰する。
【００５３】
また、ステップＳ７０３で割込みを受理した場合は、ステップＳ７０７でＡＳＲ．ＡＲビット２０に“１”を書き込み、割込みハンドラへ分岐して割込み処理用ユーザプログラムに分岐する。
【００５４】
一方、ステップＳ７０２でＡＳＲ．ＡＲビット２０が“１”であった場合は、ステップＳ７００で設定した制約に違反しないかを確認する（ステップＳ７０８）。違反しない場合はさらにスタック領域に空きがあるかを確認し（ステップＳ７０９）、大丈夫な場合はステップＳ７１３のスタック操作を行う。
【００５５】
また、ステップＳ７０４ではＡＳＲ．ＡＲビット２０が“１”であるため、ステップＳ７００で設定したリアルタイム処理に対応するデバッグプログラムを実行する（ステップＳ７０６）。また、ステップＳ７０８、ステップＳ７０９の判定で、多重ブレークできなかった場合は、ステップＳ７００で設定したリアルタイム処理に対応するデバッグプログラムを実行し（ステップＳ７１０）、ステップＳ７１６で終了したらユーザプログラムに復帰する。また、ユーザプログラムからデバッグプログラムへの復帰はステップＳ７１１で判定を行う。
【００５６】
以上のような回路とデバッグプログラムの組み合わせで、リアルタイム処理ではないユーザプログラムだけでなく、デバッグモードを中断して実行している割込みを利用したリアルタイム処理に対し、デバッグを行っているプログラマが設定する割り込み応答時間の許容範囲内で、自由にブレーク機能を適用可能となる。
【００５７】
本実施の形態３のマイクロプロセッサは、デバッグモードを中断して割込みを受理したことを示すビット（ＡＳＲ．ＡＲビット２０）と、プロセッサ内部のデバッグ専用リソースのステートを示すビット（ＡＳＲ．ｓｔａｔｅビット２１）を持ったレジスタ（ＡＳＲレジスタ２）をデバッグプログラムから参照できるため、検出したブレークが通常のユーザプログラムのデバッグのために発生したものか、割込みを利用したリアルタイム処理のためにデバッグモードを中断して実行しているユーザプログラムのものかを判別可能である。また、マイクロプロセッサ内部のデバッグ専用リソースをスタックとしてメモリに書き出すことで、さらに多重にデバッグモードを中断して割込みを受理することができるという利点がある。
【００５８】
以上、本発明者によってなされた発明をその実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【００５９】
例えば、ＡＳＲレジスタのビット数を変更することで、バス幅の異なるマイクロプロセッサに適用可能である。
【００６０】
また、ＡＳＲ．ｓｔａｔｅビットの数が非常に多い場合、ＡＳＲ．ｓｔａｔｅビットのみで構成されるデバッグプログラムからのみ操作可能なアドレス割り付けのレジスタを追加定義する事で対応可能である。
【００６１】
多重ブレーク回数を制限するために、ＡＳＲ．ＡＲビットを任意のビット数のカウンタとし、またブレークの上限回数を設定するレジスタを別途用意することで、ＡＳＲ．ＡＲビットの比較などを行う回数を減らすことも可能である。
【００６２】
ブレーク発生時のデバッグプログラムの開始アドレスを、ＡＳＲ．ＡＲビットによって切り替える事で、ＡＳＲ．ＡＲビットの比較などを行う回数を減らすことも可能である。
【産業上の利用可能性】
【００６３】
本発明は、マイクロプロセッサ等の半導体製品の製造業で利用可能である。
【図面の簡単な説明】
【００６４】
【図１】本発明の実施の形態１に係るマイクロプロセッサの構成を示すブロック図である。
【図２】本発明の実施の形態１〜３において、ＡＳＲ．ｓｔａｔｅビットの制御論理を示す図である。
【図３】本発明の実施の形態１において、デバッグプログラムの動作例を示すフローチャートである。
【図４】本発明の実施の形態２に係るマイクロプロセッサの構成を示すブロック図である。
【図５】本発明の実施の形態２において、ブレーク抑止制御回路の構成を示す図である。
【図６】本発明の実施の形態２において、デバッグプログラムの動作例を示すフローチャートである。
【図７】本発明の実施の形態３に係るマイクロプロセッサの構成を示すブロック図である。
【図８】本発明の実施の形態３において、ＡＳＲレジスタの構成を示す図である。
【図９】本発明の実施の形態３において、ＡＳＲ．ＡＲビットの制御論理を示す図である。
【図１０】本発明の実施の形態３において、ＡＳＲ．ＡＲビットの遷移を示す説明図である。
【図１１】本発明の実施の形態３において、マイクロプロセッサでのユーザプログラムとデバッグプログラムの動作例を示す図である。
【図１２】本発明の実施の形態３において、デバッグプログラムの動作例を示すフローチャートである。
【符号の説明】
【００６５】
１，１ａ，１ｂ  ＣＰＵコア
２  ＡＳＲレジスタ
３  内部ステート制御回路
４  モード遷移制御回路
５，５ａ，５ｂ  ＣＰＵ動作制御回路
６  デバッグ制御回路
７  ＡＳＥ−ＲＡＭ（デバッグ専用メモリ）
８  ユーザＲＡＭ
９  ＢＵＳ
１０，１０ａ，１０ｂ  マイクロプロセッサ
２０  ＡＳＲ．ＡＲビット
２１  ＡＳＲ．ｓｔａｔｅビット
３２，４３  フリップフロップ
８０  ＡＳＲ．ｓｔａｔｅレジスタ
１０００  ブレーク抑止制御回路
１１００  カウンタ
１１０１  レジスタ
１１０２  比較器
【図１】
2007026084.tif 000003
【図２】
2007026084.tif 000004
【図３】
2007026084.tif 000005
【図４】
2007026084.tif 000006
【図５】
2007026084.tif 000007
【図６】
2007026084.tif 000008
【図７】
2007026084.tif 000009
【図８】
2007026084.tif 000010
【図９】
2007026084.tif 000011
【図１０】
2007026084.tif 000012
【図１１】
2007026084.tif 000013
【図１２】
2007026084.tif 000014