(57)【要約】【課題】  インサーキットエミュレータなどの特殊な調査用機器を必要とせず、かつ、容易に割込み遅延を調査できる半導体装置およびデバッグ方法を提供する。【解決手段】  ＣＰＵ制御部は、割込み要求ＩＲＱ＿２を受けて、割込み要求ＩＲＱ＿２の優先レベルに応じて優先レベルを「１０」に変更しタスク２を実行する。時刻Ｔｂにおいて、割込み禁止命令が実行されと、ＣＰＵ制御部は、優先レベルを「１５」に変更して他のすべての割込み要求を禁止する。時刻Ｔｃにおいて、優先レベル「１４」の割込み要求ＩＲＱ＿１が入力されると、ＩＰＣ制御部は、プログラムカウンタ値をプログラムカウンタから読出し、ＩＰＣレジスタへ格納する。そして、タスク１に含まれるレジスタ読出し命令により、ＩＰＣレジスタに格納されているタスク２のプログラムカウンタ値を読出す。【選択図】        図２
2006185365.tif 000002
【特許請求の範囲】
【請求項１】
割込み要求を受けると、実行中のプログラムを中断して前記割込み要求に応じた割込みプログラムを実行し、かつ、前記割込み要求の優先レベルまたは前記割込みプログラムで設定される優先レベルを出力する演算部と、
外部から優先レベルの設定された割込み要求を受けると、前記演算部から受けた前記優先レベルと前記割込み要求の優先レベルとを比較し、前記演算部からの前記優先レベルが前記割込み要求の優先レベルより低い場合には、前記割込み要求を前記演算部へ出力し、前記演算部からの前記優先レベルが前記割込み要求の優先レベルと同一またはより高い場合には、前記演算部からの前記優先レベルが低くなるまで前記割込み要求の出力を遅延させる割込み制御部と、
前記割込み制御部が前記割込み要求を受けると、前記演算部におけるプログラムの実行状態を示す情報を格納する割込み遅延調査部とを備える、半導体装置。
【請求項２】
前記割込み遅延調査部は、前記割込み制御部が前記割込み要求を受けた時点において、前記演算部が実行しているプログラムのプログラムカウンタ値を格納するプログラムカウンタ値格納部を含む、請求項１に記載の半導体装置。
【請求項３】
前記割込み遅延調査部は、前記割込み制御部が前記割込み要求を受けると、前記演算部において前記割込みプログラムが実行されるまでに要する時間を計測する遅延時間計測部をさらに含む、請求項１または２に記載の半導体装置。
【請求項４】
前記割込み遅延調査部は、
前記割込み制御部が前記割込み要求を受けた時点において、前記演算部が実行しているプログラムのプログラムカウンタ値を格納するプログラムカウンタ値格納部と、
前記割込み制御部が前記割込み要求を受けると、前記演算部において前記割込みプログラムが実行されるまでに要する時間を計測する遅延時間計測部と、
予め定められた設定値に応じて、前記プログラムカウンタ値格納部および前記遅延時間計測部のいずれか一方を有効とする切換部とをさらに含む、請求項１に記載の半導体装置。
【請求項５】
前記プログラムカウンタ値格納部は、予め定められた設定値に応じて、前記演算部が実行しているプログラムのプログラムカウンタ値を格納するか否かを決定する、請求項２または４に記載の半導体装置。
【請求項６】
前記遅延時間計測部は、前記割込み制御部が受けた前記割込み要求の優先レベルに応じて、前記時間を計測するか否かを決定する、請求項３または４に記載の半導体装置。
【請求項７】
前記遅延時間計測部は、前記計測した時間が予め定められた設定値以上となれば、前記演算部において前記割込みプログラムを強制的に実行させる、請求項３，４または６のいずれか１項に記載の半導体装置。
【請求項８】
前記割込み遅延調査部は、前記割込み制御部が前記割込み要求を受けると、前記演算部におけるトレース情報を格納するトレース部をさらに含む、請求項１〜７のいずれか１項に記載の半導体装置。
【請求項９】
前記割込み遅延調査部は、前記割込み制御部が前記割込み要求を受けると、前記演算部におけるプログラムの実行状態を示す情報を外部へ出力する情報出力部をさらに含む、請求項１〜８のいずれか１項に記載の半導体装置。
【請求項１０】
前記情報出力部は、前記演算部におけるプログラムの実行状態を示す情報として、前記演算部のバスアクセス情報を外部へ出力する、請求項９に記載の半導体装置。
【請求項１１】
前記情報出力部は、前記演算部におけるプログラムの実行状態を示す情報として、前記演算部のプログラムカウンタ値をさらに外部へ出力する、請求項１０に記載の半導体装置。
【請求項１２】
割込み要求を受けると、実行中のプログラムを中断して前記割込み要求に応じた割込みプログラムを実行し、かつ、前記割込み要求の優先レベルまたは前記割込みプログラムで設定される優先レベルを出力する演算部と、
外部から優先レベルの設定された割込み要求を受けると、前記演算部から受けた前記優先レベルと前記割込み要求の優先レベルとを比較し、前記演算部からの前記優先レベルが前記割込み要求の優先レベルより低い場合には、前記割込み要求を前記演算部へ出力し、前記演算部からの前記優先レベルが前記割込み要求の優先レベルと同一またはより高い場合には、前記演算部からの前記優先レベルが低くなるまで前記割込み要求の出力を遅延させる割込み制御部とからなる半導体装置において実行されるプログラムの割込み遅延を回避するためのデバッグ方法であって、
前記割込み制御部が前記割込み要求を受けると、前記演算部が実行しているプログラムを特定するためのプログラムカウンタ値を格納するステップと、
前記割込み要求に応じて実行される割込みプログラムにおいて前記格納したプログラムカウンタ値を読出すステップとを含む、デバッグ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は半導体装置に関し、特に割込み遅延の原因を容易に調査できる手段を備えた半導体装置およびデバッグ方法に関する。
【背景技術】
【０００２】
電子計算機の分野では、プログラムの実行とは無関係に生じる例外的な事象に対処するため、割込み要求による制御が行われる。
【０００３】
プログラムを実行する演算部は、割込み要求が入力されると、プログラムカウンタ値などを一時的に退避させて実行中のプログラムを中断し、割込みプログラムを優先的に実行する。
【０００４】
さらに、複数の例外的な事象に対処するため、それぞれ優先レベルが設定された複数の割込み要求が入力できるように構成される。
【０００５】
たとえば、非特許文献１に開示されているように、同時に複数の割込み要求が入力された場合や先に入力された割込み要求に対応する割込みプログラムが終了しない間に次の割込み要求が入力された場合などには、優先レベルが高い方の割込みプログラムが優先的に実行される。
【０００６】
ところで、複数のプログラムが共有資源であるメモリやファイルなどを取り合う状態、いわゆるクリティカルセクションにおいては、バグが生じやすい。そこで、他のプログラムの実行を阻止する排他処理が一般的に行われる。そのため、割込みプログラムにおいても、一時的に優先レベルを最大値に設定し、他のすべての割込みプログラムの実行を禁止する割込み禁止処理が常套手段となっている。
【０００７】
その結果、先に入力された割込み要求より優先レベルが高い割込み要求が後に入力されたとしても、先に入力された割込み要求に応じて実行される割込みプログラム中で割込み禁止処理が行われると、後に入力された優先レベルが高い割込み要求に応じた割込みプログラムの開始が遅延することになる。このような現象は、「割込み遅延」と称される。したがって、例外的な事象が発生してから実行完了までの時間が制約されるような割込みプログラムの場合には、割込み遅延により処理に支障をきたす。
【０００８】
そのため、割込み遅延の原因となる割込み禁止処理を行っているプログラムを特定し、その内容を修正するデバッグを行う必要が生じる。
【０００９】
上述のような割込み遅延の原因となっているプログラムを特定する方法としては、プログラムの全ソースコードレビューによる方法およびインサーキットエミュレーションによる方法がある。
【００１０】
プログラムの全ソースコードレビューは、プログラム開発者がソースコードを見直し、割込み禁止処理を行っているプログラムを特定する方法である。
【００１１】
インサーキットエミュレーションは、演算部に代えて、演算部の動作を再現する装置（インサーキットエミュレータ）を用いて、プログラムを実行させることにより割込み禁止処理を行っているプログラムを特定する方法である。
【００１２】
特許文献１には、割込み要求の入力に対して割込み処理プログラムが実行されない場合にデバッグ可能なインサーキットエミュレータが開示されている。
【特許文献１】特開２０００−４００１５号公報
【非特許文献１】ＳＨ７０１１ハードウェアマニュアルＨＤ６４１７０１１、平成１１年２月  第１版、株式会社日立製作所  半導体事業本部、ｐ６４，ｐ７４〜７８
【発明の開示】
【発明が解決しようとする課題】
【００１３】
しかしながら、近年では、プログラムのソースコードサイズが肥大化しており、プログラム開発者などがソースコードを見直すことが困難となっている。
【００１４】
また、インサーキットエミュレータは、各演算部に応じて製作する必要があり、汎用的な半導体装置を除いては、一般的ではなかった。また、機能上の制約も多かった。そのため、必ずしも十分なデバッグを行うことができなかった。
【００１５】
そこで、この発明は、かかる問題を解決するためになされたものであり、その目的は、インサーキットエミュレータなどの特殊な調査用機器を必要とせず、かつ、容易に割込み遅延を調査できる半導体装置およびデバッグ方法を提供することである。
【課題を解決するための手段】
【００１６】
この発明は、割込み要求を受けると、実行中のプログラムを中断して割込み要求に応じた割込みプログラムを実行し、かつ、割込み要求の優先レベルまたは割込みプログラムで設定される優先レベルを出力する演算部と、外部から優先レベルの設定された割込み要求を受けると、演算部から受けた優先レベルと割込み要求の優先レベルとを比較し、演算部からの優先レベルが割込み要求の優先レベルより低い場合には、割込み要求を演算部へ出力し、演算部からの優先レベルが割込み要求の優先レベルと同一またはより高い場合には、演算部からの優先レベルが低くなるまで割込み要求の出力を遅延させる割込み制御部と、割込み制御部が割込み要求を受けると、演算部におけるプログラムの実行状態を示す情報を格納する割込み遅延調査部とを備える半導体装置である。
【００１７】
また、この発明は、割込み要求を受けると、実行中のプログラムを中断して割込み要求に応じた割込みプログラムを実行し、かつ、割込み要求の優先レベルまたは割込みプログラムで設定される優先レベルを出力する演算部と、外部から優先レベルの設定された割込み要求を受けると、演算部から受けた優先レベルと割込み要求の優先レベルとを比較し、演算部からの優先レベルが割込み要求の優先レベルより低い場合には、割込み要求を演算部へ出力し、演算部からの優先レベルが割込み要求の優先レベルと同一またはより高い場合には、演算部からの優先レベルが低くなるまで割込み要求の出力を遅延させる割込み制御部とからなる半導体装置において実行されるプログラムの割込み遅延を回避するためのデバッグ方法であって、割込み制御部が割込み要求を受けると、演算部が実行しているプログラムを特定するためのプログラムカウンタ値を格納するステップと、割込み要求に応じて実行される割込みプログラムにおいて格納したプログラムカウンタ値を読出すステップとを含む。
【発明の効果】
【００１８】
この発明によれば、割込み遅延調査部は、割込み制御部が割込み要求を受けると、演算部におけるプログラムの実行状態を示す情報を格納するので、割込み要求に応じた割込みプログラムが実行される直前に実行されていたプログラムの情報を取得できる。よって、その格納されたプログラムの実行状態を示す情報に基づいて、割込み遅延の原因を容易に調査でき、さらにその調査した原因に基づいてデバッグを行うことができる。
【発明を実施するための最良の形態】
【００１９】
この発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
【００２０】
［実施の形態１］
図１は、この発明の実施の形態１に従う半導体装置１００の構成を示す概略ブロック図である。
【００２１】
図１を参照して、この発明の実施の形態１に従う半導体装置１００は、割込み制御部２と、演算部（ＣＰＵ部：Central Processing Unit；以下、ＣＰＵ部と称す）４と、メモリ１４と、内部バス５２とを備える。
【００２２】
割込み制御部２、ＣＰＵ部４およびメモリ１４は、内部バス５２を介して相互に接続される。
【００２３】
割込み制御部２は、レジスタ２０と、入力制御部１８と、優先レベル設定レジスタ２８と、優先順位判定部２６と、比較器３０とからなる。
【００２４】
レジスタ２０は、割込み制御レジスタ（ＩＣＲ：Interrupt Control Register）２２と、割込みステータスレジスタ（ＩＳＲ：Interrupt Status Register）２４とからなる。
【００２５】
割込み制御レジスタ２２は、入力制御部１８へ入力される割込み要求のそれぞれについて、割込みの許可または禁止の設定値を記憶する。
【００２６】
割込みステータスレジスタ２４は、割込み要求のそれぞれの入力状態を記憶する。
【００２７】
入力制御部１８は、割込み要求ＩＲＱ＿１，ＩＲＱ＿２，・・・，ＩＲＱ＿ｎのうちいずれかが入力されると、入力された割込み要求に対応する設定値を割込み制御レジスタ２２から読出す。そして、入力制御部１８は、読出した設定値に基づいて、当該割込み要求が許可されているか否かを判断し、許可されていれば当該割込み要求を優先順位判定部２６へ出力する。さらに、入力制御部１８は、割込み要求のそれぞれの入力状態を割込みステータスレジスタ２４へ格納する。
【００２８】
優先レベル設定レジスタ２８は、入力制御部１８に入力されるそれぞれの割込み要求に設定される優先レベルを記憶する。
【００２９】
優先順位判定部２６は、入力制御部１８から割込み要求を受けると、当該割込み要求に設定される優先レベルを優先レベル設定レジスタ２８から読出す。また、優先順位判定部２６は、同時に複数の割込み要求が入力されていれば、それぞれの割込み要求に設定される優先レベルを互いに比較し、優先レベルが高い割込み要求から比較器３０へ順次出力する。
【００３０】
比較器３０は、優先順位判定部２６から割込み要求を受けると、当該割込み要求の優先レベルと、ＣＰＵ部４から受けた優先レベルとを比較する。そして、比較器３０は、ＣＰＵ部４から受けた優先レベルが割込み要求の優先レベルより低ければ、当該割込み要求をＣＰＵ部４へ出力する。また、比較器３０は、ＣＰＵ部４から受けた優先レベルが割込み要求の優先レベル以上であれば、ＣＰＵ部４から受けた優先レベルが割込み要求の優先レベルより低くなるまで当該割込み要求の出力を遅延させる。
【００３１】
ＣＰＵ部４は、レジスタ３２と、ＣＰＵ制御部５４と、ＩＰＣ制御部４０とからなる。
【００３２】
レジスタ３２は、ＩＰＣレジスタ４２と、ＩＰＣ制御レジスタ４４と、プログラムカウンタ（ＰＣ：Program Counter）４６と、ステータスレジスタ（ＳＲ：Status Register）４８と、スタックポインタ（ＳＰ：Stack Pointer）５０とからなる。
【００３３】
プログラムカウンタ４６は、ＣＰＵ部４において実行されるプログラムの命令アドレスを記憶する。
【００３４】
ステータスレジスタ４８は、ＣＰＵ部４の優先レベルを記憶する。
【００３５】
スタックポインタ５０は、メモリ１４内のスタック領域を指定するためのアドレス値を記憶する。
【００３６】
ＩＰＣレジスタ４２は、ＩＰＣ制御部４０から出力されたプログラムカウンタ値を記憶する。
【００３７】
ＩＰＣ制御レジスタ４４は、ＩＰＣ制御部４０に割込み要求が入力された場合に、ＩＰＣ制御部４０の動作が有効であるか否かの設定値を記憶する。
【００３８】
ＣＰＵ制御部５４は、実行されるプログラムに従い、プログラムカウンタ４６の値をカウントアップする。そして、ＣＰＵ制御部５４は、割込み制御部２から割込み要求を受けると、スタックポインタ５０に記憶されているアドレス値に基づいて、プログラムカウンタ４６に記憶されている値およびステータスレジスタ４８に記憶されている値をメモリ１４内のスタック領域に退避させ、割込み要求に応じた割込みプログラムを実行させる。さらに、ＣＰＵ制御部５４は、ステータスレジスタ４８の値を割込み要求の優先レベルに変更する。また、ＣＰＵ制御部５４は、実行されるプログラムの命令に応じて、ステータスレジスタ４８の値を変更する。
【００３９】
ＩＰＣ制御部４０は、優先順位判定部２６から比較器３０へ割込み要求が出力されると同時に当該割込み要求を受け、ＩＰＣ制御レジスタ４４から設定値を読出し、その設定値が有効であるか否かを判断する。そして、設定値が有効である場合にのみ、ＩＰＣ制御部４０は、プログラムカウンタ４６に記憶されているプログラムカウンタ値を読出し、その値をＩＰＣレジスタ４２へ格納する。
【００４０】
実施の形態１においては、ＩＰＣ制御部４０、ＩＰＣレジスタ４２およびＩＰＣ制御レジスタ４４が、プログラムカウンタ値格納部を構成する。
【００４１】
図２は、この発明の実施の形態１に従う半導体装置１００の状態図の一例である。
【００４２】
図２を参照して、半導体装置１００は、外部から割込み要求ＩＲＱ＿１およびＩＲＱ＿２を受け、それぞれ割込みプログラムとして割込みハンドラ１および割込みハンドラ２を実行する。また、割込み要求の優先レベルは、１〜１４の範囲で設定可能であり、割込み要求ＩＲＱ＿１およびＩＲＱ＿２の優先レベルは、それぞれ「１４」および「１０」とする。すなわち、割込みハンドラ１は、割込みハンドラ２に比較してより優先度が高い。
【００４３】
図１および図２を参照して、時刻Ｔ０では、割込み要求ＩＲＱ＿１およびＩＲＱ＿２のいずれも入力されておらず、ＣＰＵ部４では、ＩＤＬＥタスクが実行されている。また、ＣＰＵ部４の優先レベルは「０」となっている。
【００４４】
次に、時刻Ｔａにおいて、外部から割込み要求ＩＲＱ＿２が入力されると、他の割込み要求が入力されていないので、割込み要求ＩＲＱ＿２は、入力制御部１８および優先順位判定部２６を通過して比較器３０へ出力される。比較器３０は、ＣＰＵ部４から受けた優先レベル「０」と、割込み要求ＩＲＱ＿２の優先レベル「１０」とを比較し、優先レベルが高い割込み要求ＩＲＱ＿２をＣＰＵ制御部５４へ出力する。すると、ＣＰＵ制御部５４は、割込み要求ＩＲＱ＿２を受けて、割込み処理を行い、実行中のプログラムカウンタ４６に記憶されている値およびステータスレジスタ４８に記憶されている値をメモリ１４のスタック領域へ退避させる（ステップＳ１）。同時に、ＣＰＵ制御部５４は、割込み要求ＩＲＱ＿２の優先レベルに応じて、優先レベルを「１０」に変更する。そして、ＣＰＵ制御部５４は、ＩＲＱ＿２の割込みプログラムである割込みハンドラ２を実行する（ステップＳ２）。
【００４５】
時刻Ｔｂにおいて、割込みハンドラ２の処理過程でクリティカルセクションが生じると、割込み禁止命令が実行される。すると、ＣＰＵ制御部５４は、優先レベルを割込み要求の優先レベルの最大値を超える「１５」に変更し、他のすべての割込み要求を禁止する（ステップＳ３）。
【００４６】
他のすべての割込み要求が禁止されている時刻Ｔｃにおいて、外部から割込み要求ＩＲＱ＿１が入力されると、優先レベル「１４」に設定されている割込み要求ＩＲＱ＿１は、入力制御部１８および優先順位判定部２６を通過して比較器３０へ出力される。比較器３０は、ＣＰＵ部４から受けた優先レベル「１５」と、割込み要求ＩＲＱ＿１の優先レベル「１４」とを比較し、優先レベルの低い割込み要求ＩＲＱ＿１の出力を遅延させる。
【００４７】
その後、時刻Ｔｄにおいて、割込みハンドラ２のクリティカルセッションが終了し、割込み禁止解除命令が実行される。すると、ＣＰＵ制御部５４は、優先レベルを元の「１０」に変更する。優先レベルの低下を受けて、比較器３０は、割込み要求ＩＲＱ＿１をＣＰＵ制御部５４へ出力する。すると、ＣＰＵ制御部５４は、割込み要求ＩＲＱ＿１に応じて、上述のステップＳ１と同様に、割込み処理を行う（ステップＳ５）。同時に、ＣＰＵ制御部５４は、割込み要求ＩＲＱ＿１の優先レベルに応じて、優先レベルを「１４」に変更する。そして、ＣＰＵ制御部５４は、ＩＲＱ＿１の割込みプログラムである割込みハンドラ１を実行する（ステップＳ６）。
【００４８】
上述のように、先に入力された割込み要求ＩＲＱ＿２に応じて実行される割込みプログラムに含まれる割込み禁止命令により、後に入力されたより優先レベルが高い割込み要求ＩＲＱ＿１に対応する割込みプログラムの実行が（Ｔｅ−Ｔｃ）だけ遅延することになる。
【００４９】
一方、ＩＰＣ制御部４０は、優先順位判定部２６から出力される割込み要求を受けた時点、すなわち時刻Ｔｃにおいて、ＣＰＵ部４において実行されているプログラムのプログラムカウンタ値をプログラムカウンタ４６から読出し、ＩＰＣレジスタ４２へ格納する。
【００５０】
ＩＰＣレジスタ４２は、レジスタ３２に含まれるので、プログラム中のレジスタ読出し命令を用いて、ＩＰＣレジスタ４２に格納されているデータを読出すことができる。
【００５１】
よって、割込み要求ＩＲＱ＿１に応じて実行される割込みハンドラ１にレジスタ読出し命令を含ませることにより、ＩＰＣレジスタ４２に格納されているプログラムカウンタ値を読出すことができる。このようにして、割込みハンドラ１の割込み遅延の原因である割込みハンドラ２のプログラムカウンタ値が得られる。
【００５２】
したがって、プログラム開発者は、得られたプログラムカウンタ値から、割込み遅延の原因となっているプログラムを特定でき、デバッグを容易に行うことができる。
【００５３】
図３は、この発明の実施の形態１に従う半導体装置１００を用いてデバッグを行う方法を示すフローチャートである。
【００５４】
図３を参照して、ＩＰＣ制御部４０は、優先順位判定部２６から割込み要求を受けたか否かを判断する（ステップＳ１００）。割込み要求を受けていない場合（ステップＳ１００においてＮＯの場合）には、ＩＰＣ制御部４０は、割込み要求を受けるまで待機する（Ｓ１００）。割込み要求を受けた場合（ステップＳ１００においてＹＥＳの場合）には、ＩＰＣ制御部４０は、プログラムカウンタ４６からプログラムカウンタ値を読出してＩＰＣレジスタ４２へ格納する（ステップＳ１０２）。
【００５５】
そして、当該割込み要求に応じて実行される割込みプログラムにおいて、ＩＰＣレジスタ４からプログラムカウンタ値を読出す（ステップＳ１０４）。
【００５６】
プログラム開発者は、読出されたプログラムカウンタ値に基づいてプログラムを特定する（Ｓ１０６）。そして、プログラム開発者は、その特定したプログラムに対してデバッグする（Ｓ１０８）。
【００５７】
なお、実施の形態１においては、プログラムカウンタ値格納部を構成する、ＩＰＣ制御部４０、ＩＰＣレジスタ４２およびＩＰＣ制御レジスタ４４をＣＰＵ部４の内部に配置する場合について説明したが、ＣＰＵ部４とデータの授受を行うバスを介してＣＰＵ部４の外部に配置してもよい。
【００５８】
実施の形態１によれば、ＩＰＣ制御部は、外部から与えられた割込み要求が優先順位判定部から出力されると、当該割込み要求がＣＰＵ部に与えられるか否かにかかわらず、ＣＰＵ部において実行されているプログラムのプログラムカウンタ値を格納する。そして、割込み要求に応じて実行される割込みプログラムにおいて格納された当該プログラムカウンタ値を読出すことができる。よって、割込みプログラムに割込み遅延が生じた場合には、プログラム開発者は、読出されたプログラムカウンタ値からその遅延原因となったプログラムを特定でき、デバッグを容易に行うことができる。
【００５９】
また、実施の形態１によれば、ＩＰＣ制御部は、ＩＰＣ制御レジスタに記憶される設定値に基づいてプログラムカウンタ値を格納するか否かを決定するので、割込み遅延の原因となるプログラムを特定する必要がある場合にのみプログラムカウンタ値を格納させることができる。よって、通常時には、プログラムカウンタ値を格納しないように設定することで冗長な処理を回避できる。
【００６０】
［実施の形態２］
図４は、この発明の実施の形態２に従う半導体装置２００の構成を示す概略ブロック図である。
【００６１】
図４を参照して、この発明の実施の形態２に従う半導体装置２００は、図１に示す実施の形態１に従う半導体装置１００において、ＣＰＵ部４をＣＰＵ部６に代えたものである。
【００６２】
ＣＰＵ部６は、レジスタ３４と、ＣＰＵ制御部５６と、比較器６２と、タイマー（ＴＭＲ）制御部６０とからなる。
【００６３】
レジスタ３４は、タイマー起動優先レベルレジスタ（Ｉ＿ＬＶＬ）６４と、タイマーカウントレジスタ（ＴＭ＿ＣＮＴ）６６と、プログラムカウンタ４６と、ステータスレジスタ４８と、スタックポインタ５０とからなる。
【００６４】
タイマー起動優先レベルレジスタ６４は、タイマー制御部６０が割込み要求を受けて時間計測を開始する条件となる優先レベルの設定値を記憶する。
【００６５】
タイマーカウントレジスタ６６は、タイマー制御部からリセット値（０）または時間の計測値を受けて、その値を記憶する。
【００６６】
プログラムカウンタ４６と、ステータスレジスタ４８と、スタックポインタ５０とについては、上述の実施の形態１と同様であるので説明は繰返さない。
【００６７】
ＣＰＵ制御部５６は、上述の実施の形態１におけるＣＰＵ制御部５４の機能に加え、タイマー制御部６０から指令を受けて、ステータスレジスタ４８の値を変更する。
【００６８】
比較器６２は、優先順位判定部２６から割込み要求が出力されると、当該割込み要求の優先レベルと、タイマー起動優先レベルレジスタ６４から読出した優先レベルとを比較する。そして、比較器６２は、割込み要求の優先レベルが、タイマー起動優先レジスタの優先レベルより高い場合にのみ、当該割込み要求をタイマー制御部６０へ出力する。
【００６９】
タイマー制御部６０は、比較器６２から割込み要求を受けると、タイマーカウントレジスタ６６の値をリセットした後、時間の計測を開始する。そして、タイマー制御部６０は、その計測した値をタイマーカウントレジスタ６６へ格納する。さらに、タイマー制御部６０は、計測した時間が予め定められた設定値を超えると、ＣＰＵ部４の優先レベルを強制的に下げるための指令をＣＰＵ制御部５６へ与える。なお、このようにＣＰＵ部４の優先レベルを強制的に下げる処理は、ＮＭＩ（Non Maskable Interrupt）処理と称される。
【００７０】
実施の形態２においては、タイマー制御部６０、比較器６２、タイマー起動優先レベルレジスタ６４およびタイマーカウントレジスタ６６が遅延時間計測部を構成する。
【００７１】
図５は、この発明の実施の形態２に従う半導体装置２００の状態図の一例である。
【００７２】
図２に示す実施の形態１に従う半導体装置１００と同様に、半導体装置２００は、外部から割込み要求ＩＲＱ＿１およびＩＲＱ＿２を受け、それぞれ割込みプログラムとして割込みハンドラ１および割込みハンドラ２を実行する。また、割込み要求に対する優先レベルは、１〜１４の範囲で設定可能であり、割込み要求ＩＲＱ＿１およびＩＲＱ＿２の優先レベルは、それぞれ「１４」および「１０」である。
【００７３】
図４および図５を参照して、時刻Ｔ０から時刻Ｔｂまでは、図２と同様であるので、説明は繰返さない。
【００７４】
時刻Ｔｃにおいて、外部から割込み要求ＩＲＱ＿１が入力されると、最高の優先レベル「１４」に設定されている割込み要求ＩＲＱ＿１は、入力制御部１８および優先順位判定部２６を通過して比較器３０および６２へ出力される。
【００７５】
比較器３０は、ＣＰＵ部４から受けた優先レベル「１５」と、割込み要求ＩＲＱ＿１の優先レベル「１４」とを比較し、レベルの低い割込み要求ＩＲＱ＿１の出力を遅延させる。
【００７６】
一方、比較器６２は、優先順位判定部２６から受けた割込み要求ＩＲＱ＿１の優先レベル「１４」と、タイマー起動優先レベルレジスタ６４に記憶されている優先レベルとを比較する。たとえば、タイマー起動優先レベルレジスタの優先レベルを「１３」とすると、比較器６２は、優先レベルが高い割込み要求ＩＲＱ＿１をタイマー制御部６０へ出力する。すると、タイマー制御部６０は、タイマーカウントレジスタ６６をリセットした後、時間の計測を開始し、その計測した値をタイマーカウントレジスタ６６へ格納する。
【００７７】
タイマーカウントレジスタ６６は、レジスタ３２に含まれるので、プログラムで実行されるレジスタ読出し命令により格納されているデータを読出すことができる。
【００７８】
よって、割込み要求ＩＲＱ＿１に応じて実行される割込みハンドラ１にレジスタ読出し命令を含ませることにより、ＩＰＣレジスタ４２に格納されている時間計測値が読出され、割込みハンドラ１の割込み遅延時間が得られる。このようにして、プログラム開発者は、割込みハンドラ１の遅延状態を把握できる。
【００７９】
したがって、プログラム開発者は、割込みプログラムの実行毎に、割込み遅延が生じているか否かを知ることができ、デバッグを容易に行うことができる。
【００８０】
さらに、割込み遅延の時間が予め定められた設定値を超えると、タイマー制御部６０がＮＭＩ処理を実行し、ＣＰＵ制御部５６がＣＰＵ部４の優先レベルを下げるので、割込み禁止処理により遅延させられていた割込みプログラムが実行される。
【００８１】
よって、タイマー制御部６０におけるＮＭＩ処理を実行する条件となる設定値を割込み遅延の許容時間以下とすることで、割込み遅延による処理の不具合を回避できる。
【００８２】
なお、実施の形態２においては、遅延時間計測部を構成する、タイマー制御部６０、比較器６２、タイマー起動優先レベルレジスタ６４およびタイマーカウントレジスタ６６をＣＰＵ部６の内部に配置する場合について説明したが、ＣＰＵ部６とデータの授受を行うバスを介してＣＰＵ部６の外部に配置してもよい。
【００８３】
実施の形態２によれば、ＩＰＣ制御部は、外部から与えられた割込み要求が優先順位判定部から出力されると、当該割込み要求がＣＰＵ部に与えられるか否かにかかわらず、時間の計測を開始する。そして、割込み要求に応じて実行される割込みプログラムにより計測値を読出すことができる。よって、プログラム開発者は、割込みプログラムの割込み遅延状態を把握でき、複数の割込みプログラムが実行される場合に、いずれの割込みプログラムに問題があるのかを特定できるため、デバッグを容易に行うことができる。
【００８４】
また、実施の形態２によれば、タイマー制御部は、タイマー起動優先レベルレジスタに記憶される優先レベルより高い優先レベルに設定された割込み要求が入力された場合に遅延時間を計測する。よって、特に処理完了までの時間制約が厳しく、高い優先レベルに設定された割込みプログラムに着目して、割込み遅延状態を監視できる。
【００８５】
さらに、実施の形態２によれば、タイマー制御部は、割込み遅延時間が設定値を超えた場合には、ＮＭＩ処理を行い割込みプログラムを強制的に実行させる。よって、割込みプログラムの割込み遅延時間を所定の値以下に抑制でき、割込み遅延による処理の不具合を回避できる。
【００８６】
［実施の形態３］
上述の実施の形態１においては、外部から与えられた割込み要求が優先順位判定部から出力されると、実行されているプログラムのプログラムカウンタ値を格納する場合について説明した。また、上述の実施の形態２においては、外部から与えられた割込み要求が優先順位判定部から出力されると、時間を計測する場合について説明した。
【００８７】
一方、実施の形態３においては、両方の機能を備える場合について説明する。
【００８８】
図６は、この発明の実施の形態３に従う半導体装置３００の構成を示す概略ブロック図である。
【００８９】
図６を参照して、この発明の実施の形態３に従う半導体装置３００は、図１に示す実施の形態１に従う半導体装置１００において、ＣＰＵ部４をＣＰＵ部８に代えたものである。
【００９０】
ＣＰＵ部８は、レジスタ３６と、ＣＰＵ制御部５４と、切換部７２と、タイマー制御部６０と、ＩＰＣ制御部４０とからなる。
【００９１】
レジスタ３６は、切換設定レジスタ（ＦＳＷ）７８と、共用レジスタ８０と、プログラムカウンタ４６と、ステータスレジスタ４８と、スタックポインタ５０とからなる。
【００９２】
切換設定レジスタ７８は、切換部７２がタイマー制御部６０およびＩＰＣ制御部４０のいずれを有効にするかを切換えるための設定値を記憶する。
【００９３】
共用レジスタ８０は、タイマー制御部６０およびＩＰＣ制御部４０から出力されるデータを記憶する。
【００９４】
プログラムカウンタ４６と、ステータスレジスタ４８と、スタックポインタ５０と、ＣＰＵ制御部５４とについては、上述の実施の形態１と同様であるので説明は繰返さない。
【００９５】
切換部７２は、優先順位判定部２６から割込み要求を受けると、切換設定レジスタ７８から設定値を読出し、その読出した設定値に応じて、タイマー制御部６０またはＩＰＣ制御部４０のいずれかに割込み要求を与える。
【００９６】
タイマー制御部６０は、切換部７２から割込み要求を受けると、共用レジスタ８０をリセットした後、時間の計測を開始する。そして、タイマー制御部６０は、その計測したデータを共用レジスタ８０へ格納する。
【００９７】
ＩＰＣ制御部４０は、切換部７２から割込み要求を受けると、プログラムカウンタ４６に記憶されているプログラムカウンタ値を読出し、共用レジスタ８０へ格納する。
【００９８】
実施の形態３においては、ＩＰＣ制御部４０および共用レジスタ８０が、プログラムカウンタ格納部を構成し、タイマー制御部６０および共用レジスタ８０が、遅延時間計測部を構成する。
【００９９】
切換設定レジスタ７８および共用レジスタ８０はレジスタ３６に含まれるので、プログラム中のレジスタ書込み命令を用いて格納されているデータを更新でき、かつ、レジスタ読出し命令を用いて格納されているデータを読出すことができる。
【０１００】
たとえば、割込みプログラム中でレジスタ書込み命令を実行させて、切換設定レジスタ７８に格納されている設定値をタイマー制御部６０が有効となるように変更する。さらに、レジスタ読出し命令を実行させて、共用レジスタ８０に格納されている時間計測値を読出す。このようにして、まず割込みプログラムにおける割込み遅延状態を把握する。
【０１０１】
そして、割込みプログラムの割込み遅延が生じていれば、割込みプログラム中でレジスタ書込み命令を実行させて、切換設定レジスタ７８に格納されている設定値をＩＰＣ制御部４０が有効となるように変更する。さらに、レジスタ読出し命令を実行させて、共用レジスタ８０に格納されているプログラムカウンタ値を読出す。このようにして、割込み遅延の原因であるプログラムのプログラムカウンタ値が得られる。
【０１０２】
したがって、プログラム開発者は、割込み遅延が生じているか否かを判断することができ、さらに、割込み遅延の原因となっているプログラムを特定できるため、デバッグを容易に行うことができる。
【０１０３】
なお、実施の形態３においては、プログラムカウンタ格納部および遅延時間計測部を構成する、ＩＰＣ制御部４０、タイマー制御部６０、切換設定レジスタ７８および共用レジスタ８０をＣＰＵ部８の内部に配置する場合について説明したが、ＣＰＵ部８とデータの授受を行うバスを介してＣＰＵ部８の外部に配置してもよい。
【０１０４】
実施の形態３によれば、切換設定レジスタの設定値に応じて、ＩＰＣ制御部またはタイマー制御部のいずれかが有効となるので、ＩＰＣ制御部およびタイマー制御部がデータを格納するための領域を共用できる。よって、ＣＰＵ部のレジスタを有効に利用することができるため、レジスタ領域を抑制できる。
【０１０５】
［実施の形態４］
図７は、この発明の実施の形態４に従う半導体装置４００の構成を示す概略ブロック図である。
【０１０６】
図７を参照して、この発明の実施の形態４による半導体装置４００は、図１に示す実施の形態１に従う半導体装置１００において、ＣＰＵ部４をＣＰＵ部１０に代え、インターフェイス部８４を加えたものである。
【０１０７】
ＣＰＵ部１０は、レジスタ３８と、ＣＰＵ制御部５８と、トレース部８２とからなる。
【０１０８】
レジスタ３８は、プログラムカウンタ４６と、ステータスレジスタ４８と、スタックポインタ５０とからなる。プログラムカウンタ４６と、ステータスレジスタ４８と、スタックポインタ５０とについては、上述の実施の形態１と同様であるので説明は繰返さない。
【０１０９】
ＣＰＵ制御部５８は、上述の実施の形態１におけるＣＰＵ制御部５４の機能に加え、実行アドレス、実行した命令コードおよびオペランドアクセス情報などからなるトレース情報をトレース部８２へ出力する。
【０１１０】
トレース部８２は、優先順位判定部２６から割込み要求を受けると、ＣＰＵ制御部５８を介してＣＰＵ部１０のトレース情報の収集を開始する。そして、トレース部８２は、収集したトレース情報を自身へ格納する。さらに、トレース部８２は、その収集したトレース情報をインターフェイス部８４へ出力する。
【０１１１】
インターフェイス部８４は、トレース部８２から受けたトレース情報を所定の形式のデータに変換し、外部の解析装置などへ出力する。
【０１１２】
プログラム中で実行される読出し命令を用いて、トレース部８２に格納されているトレース情報を読出すことができる。よって、プログラム開発者は、割込み遅延発生時のより詳細な情報を取得できる。
【０１１３】
また、トレース部８２は、格納したトレース情報をインターフェイス部８４を介して外部の解析装置へ出力する。よって、プログラム開発者は、割込み遅延発生時のプログラム実行状態の解析をより容易に行うことができる。
【０１１４】
なお、実施の形態４においては、トレース部８２をＣＰＵ部１０の内部に配置する場合について説明したが、ＣＰＵ部１０とデータの授受を行うバスを介してＣＰＵ部１０の外部に配置してもよい。
【０１１５】
実施の形態４によれば、トレース部は、外部から与えられた割込み要求が優先順位判定部から出力されると、トレース情報の収集を開始する。そのため、必要なトレース情報だけを収集できるので、トレース部が冗長なトレース情報を収集することがなく、トレース部の記憶容量を抑制でき、かつ、効率的に解析作業を行える。
【０１１６】
［実施の形態５］
図８は、この発明の実施の形態５に従う半導体装置５００の構成を示す概略ブロック図である。
【０１１７】
図８を参照して、この発明の実施の形態５による半導体装置５００は、図７に示す実施の形態４に従う半導体装置４００において、ＣＰＵ部１０をＣＰＵ部１２に代えたものである。そして、ＣＰＵ部１２はＣＰＵ部１０において、ＣＰＵ制御部５８をＣＰＵ制御部５９に代え、トレース部８２をバス関連情報格納部９４に代えたものである。
【０１１８】
ＣＰＵ制御部５９は、上述の実施の形態１におけるＣＰＵ制御部５４の機能に加え、バスアクセス情報をバス関連情報格納部９４へ出力する。
【０１１９】
バス関連情報格納部９４は、バスアクセスカウンタ９２と、パフォーマンスカウンタ９０とからなる。そして、バス関連情報格納部９４は、優先順位判定部２６から割込み要求を受けると、バスアクセスカウンタ９２およびパフォーマンスカウンタ９０を起動させる。さらに、バス関連情報格納部９４は、バスアクセスカウンタ９２およびパフォーマンスカウンタ９０に格納されているデータを読出してインターフェイス部８４へ出力する。
【０１２０】
バスアクセスカウンタ９２は、ＣＰＵ制御部５９から受けたバスアクセス情報に基づいて、ＣＰＵ部１２が内部バス５２に対して行ったバスアクセス回数、すなわち、リード／ライトアクセスを行った回数をカウントし、そのカウント回数を記憶する。
【０１２１】
パフォーマンスカウンタ９０は、ＣＰＵ制御部５９から受けたバスアクセス情報に基づいて、ＣＰＵ部１２が内部バス５２に対して行ったバスアクセスの実行サイクル数、すなわち、リード／ライトアクセスに要したサイクル数（クロック数）をカウントし、そのカウント回数を記憶する。
【０１２２】
また、バス関連情報格納部９４は、プログラムカウンタ４６に記憶されているプログラムカウンタ値を読出し、インターフェイス部８４へ出力する。
【０１２３】
実施の形態５においては、バス関連情報格納部９４およびインターフェイス部８４が情報出力部を構成する。
【０１２４】
また、バス関連情報格納部９４は、インターフェイス部８４を介して接続された記録装置にバスアクセス回数、バスアクセスの実行サイクル数およびプログラムカウンタ値を出力できる。プログラム開発者は、割込み遅延発生時のプログラム実行状態の解析をより容易に行うことができる。
【０１２５】
なお、実施の形態５においては、バス関連情報格納部９４をＣＰＵ部１２部に配置する場合について説明したが、ＣＰＵ部１２とデータの授受を行うバスを介してＣＰＵ部１２の外部に配置してもよい。
【０１２６】
実施の形態５によれば、バス関連情報格納部は、外部から与えられた割込み要求が優先順位判定部から出力されると、バスアクセス回数およびバスアクセス実行サイクル数の収集を開始する。そのため、必要なタイミングにおけるバス関連情報を収集できるので、不用な情報を収集することがなく、効率的に解析作業を行える。さらに、プログラムカウンタ値も同時に出力されるので、より効率的に解析作業を行える。
【０１２７】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【０１２８】
【図１】この発明の実施の形態１に従う半導体装置の構成を示す概略ブロック図である。
【図２】この発明の実施の形態１に従う半導体装置１００の状態図の一例である。
【図３】この発明の実施の形態１に従う半導体装置１００を用いてデバッグを行う方法を示すフローチャートである。
【図４】この発明の実施の形態２に従う半導体装置２００の構成を示す概略ブロック図である。
【図５】この発明の実施の形態２に従う半導体装置２００の状態図の一例である。
【図６】この発明の実施の形態３に従う半導体装置３００の構成を示す概略ブロック図である。
【図７】この発明の実施の形態４に従う半導体装置４００の構成を示す概略ブロック図である。
【図８】この発明の実施の形態５に従う半導体装置５００の構成を示す概略ブロック図である。
【符号の説明】
【０１２９】
２  割込み制御部、４，６，８，１０，１２  演算部（ＣＰＵ部）、１４  メモリ、１８  入力制御部、２０，３２，３４，３６，３８  レジスタ、２２  割込み制御レジスタ（ＩＣＲ）、２４  割込みステータスレジスタ（ＩＳＲ）、２６  優先順位判定部、２８  優先レベル設定レジスタ、３０，６２  比較器、４０  ＩＰＣ制御部、４２  ＩＰＣレジスタ、４４  ＩＰＣ制御レジスタ、４６  プログラムカウンタ（ＰＣ）、４８  ステータスレジスタ（ＳＲ）、５０  スタックポインタ（ＳＰ）、５２  内部バス、５４，５６，５８，５９  ＣＰＵ制御部、６０  タイマー（ＴＭＲ）制御部、６４  タイマー起動優先レベルレジスタ（Ｉ＿ＬＶＬ）、６６  タイマーカウントレジスタ（ＴＭ＿ＣＮＴ）、７２  切換部、７８  切換設定レジスタ（ＦＳＷ）、８０  共用レジスタ、８２  トレース部、８４  インターフェイス部、９０  パフォーマンスカウンタ、９２  バスアクセスカウンタ、９４  バス関連情報格納部、１００，２００，３００，４００，５００  半導体装置、ＩＲＱ＿１，ＩＲＱ＿２，・・・，ＩＲＱ＿ｎ  割込み要求。
【図１】
2006185365.tif 000003
【図２】
2006185365.tif 000004
【図３】
2006185365.tif 000005
【図４】
2006185365.tif 000006
【図５】
2006185365.tif 000007
【図６】
2006185365.tif 000008
【図７】
2006185365.tif 000009
【図８】
2006185365.tif 000010