(57)【要約】【課題】パイプライン処理のための回路を有効利用して割り込み命令の実行処理を高速化するマイクロプロセッサを提供すること。【解決手段】マイクロプロセッサ１０は、パイプライン処理を制御するパイプライン制御部３００を含む。パイプライン制御部３００は、割り込み命令の第１の命令実行ステージにおいて、割り込み命令の命令コードをデコードし、デコードした結果に基づいて、即値生成部１００に、ベクタテーブル２２０に格納された割り込み命令に対応する分岐先アドレスの情報を参照するためのベクタアドレスを生成させる。パイプライン制御部３００は、割り込み命令の第１の命令実行ステージの終了時に、パイプラインレジスタ１（６０）にベクタアドレスが設定され、パイプラインレジスタ２（７０）にスタックポインタ５０の値が設定され、パイプラインレジスタ３（８０）に所定の定数値が設定されるように制御する。【選択図】図１
2008262399.tif 000002
【特許請求の範囲】
【請求項１】
所定のメモリに命令コードが格納されている各命令の実行において、前記命令コードをフェッチする命令フェッチステージと、前記各命令を実行する１以上の命令実行ステージを含むパイプライン処理を行う機能を有するマイクロプロセッサであって、
前記パイプライン処理を制御するパイプライン制御部と、
前記命令コードの格納先を参照するためのプログラムカウンタと、
少なくとも２つの入力に基づいて所定の算術演算を実行する汎用の算術演算ユニットと、
少なくとも前記プログラムカウンタの値を退避させるスタック領域を参照するためのスタックポインタと、
少なくとも割り込み命令に対応する分岐先アドレスの情報が格納されたメモリのアドレスを設定するために使用される第１のパイプラインレジスタと、
少なくとも前記算術演算ユニットの第１の入力を設定するために使用される第２のパイプラインレジスタと、
少なくとも前記算術演算ユニットの第２の入力を設定するために使用される第３のパイプラインレジスタと、を含み、
前記パイプライン制御部は、
複数の命令実行ステージにより実行される割り込み命令の第１の命令実行ステージにおいて、
前記割り込み命令の命令コードをデコードし、
デコードした結果に基づいて、所定のブロックに、前記割り込み命令に対応する分岐先アドレスの情報を参照するためのベクタアドレスを生成させ、
前記割り込み命令の第１の命令実行ステージの終了時に、
前記第１のパイプラインレジスタに前記ベクタアドレスが設定され、
前記第２のパイプラインレジスタに前記スタックポインタの値が設定され、
前記第３のパイプラインレジスタに所定の定数値が設定されるように制御することを特徴とするマイクロプロセッサ。
【請求項２】
請求項１において、
即値アドレス又は即値データを生成するための即値生成部を含み、
前記パイプライン制御部は、
前記割り込み命令の第１の命令実行ステージにおいて、前記即値生成部に前記ベクタアドレスを生成させることを特徴とするマイクロプロセッサ。
【請求項３】
請求項２において、
前記即値生成部の出力から前記第１のパイプラインレジスタの入力に至る信号経路と、
前記第１のパイプラインレジスタの出力から前記分岐先アドレスの情報が記憶されているメモリのアドレス入力に至る信号経路と、
前記スタックポインタの出力から前記第２のパイプラインレジスタの入力に至る信号経路と、
前記第２のパイプラインレジスタの出力から前記算術演算ユニットの第１の入力に至る信号経路と、
前記所定の定数値の供給源から前記第３のパイプラインレジスタの入力に至る信号経路と、
前記第３のパイプラインレジスタの出力から前記算術演算ユニットの第２の入力に至る信号経路と、を含むことを特徴とするマイクロプロセッサ。
【請求項４】
請求項１乃至３のいずれかにおいて、
汎用データバスを含み、
前記第ｎ（ｎは１、２、３のいずれか）のパイプラインレジスタは、
前記汎用データバスの少なくとも一部に所定のデータを供給するためにも使用され、
前記パイプライン制御部は、
前記割り込み命令の第２の命令実行ステージにおいて、
前記スタックポインタの値及び前記所定の定数値に基づいて、前記算術演算ユニットに所定の算術演算を実行させ、
前記割り込み命令の第２の命令実行ステージの終了時に、
前記スタックポインタに前記算術演算の結果が設定され、
前記第ｎのパイプラインレジスタに前記プログラムカウンタの値が設定され、
前記プログラムカウンタに前記ベクタアドレスによって参照される前記分岐先アドレスの情報が設定されるように制御することを特徴とするマイクロプロセッサ。
【請求項５】
請求項４において、
前記プログラムカウンタの出力から前記第ｎのパイプラインレジスタの入力までの信号経路と、
前記第ｎのパイプラインレジスタの出力から前記汎用データバスの少なくとも一部までの信号経路と、を含むことを特徴とするマイクロプロセッサ。
【請求項６】
請求項１乃至３のいずれかにおいて、
汎用データバスと、
少なくとも前記汎用データバスの少なくとも一部に所定のデータを供給するために使用される第４のパイプラインレジスタと、
前記プログラムカウンタの出力から前記第４のパイプラインレジスタの入力までの信号経路と、
前記第４のパイプラインレジスタの出力から汎用データバスの少なくとも一部までの信号経路と、を含み、
前記パイプライン制御部は、
前記割り込み命令の第２の命令実行ステージにおいて、
前記スタックポインタの値及び所定の定数値に基づいて、前記算術演算ユニットに所定の算術演算を実行させ、
前記割り込み命令の第２の命令実行ステージの終了時に、
前記スタックポインタに前記算術演算の結果が設定され、
前記第４のパイプラインレジスタに前記プログラムカウンタの値が設定され、
前記プログラムカウンタに前記ベクタアドレスによって参照される前記分岐先アドレスの情報が設定されるように制御することを特徴とするマイクロプロセッサ。
【請求項７】
請求項４乃至６のいずれかにおいて、
前記マイクロプロセッサの所定の状態を表示する状態レジスタを含み、
前記パイプライン制御部は、
前記割り込み命令の第３の命令実行ステージにおいて、
前記パイプラインレジスタに設定された前記プログラムカウンタの値及び前記状態レジスタの値が、前記スタック領域に書き込まれるように制御することを特徴とするマイクロプロセッサ。
【請求項８】
請求項７において、
前記状態レジスタの出力から前記汎用データバスの少なくとも一部までの信号経路と、
前記汎用データバスから前記スタック領域を有するメモリのデータ入力までの信号経路と、を含むことを特徴とするマイクロプロセッサ。
【請求項９】
請求項７又は８において、
前記プログラムカウンタは、
ｉビット（ｉは１以上の整数）のビット幅を有し、
前記状態レジスタは、
ｊビット（ｊは１以上の整数）のビット幅を有し、
前記スタック領域を有するメモリは、
ｋビット幅（ｋは１以上の整数）の入力データバスを有し、
ｋはｉ＋ｊ以上であることを特徴とするマイクロプロセッサ。
【請求項１０】
請求項７乃至９のいずれかにおいて、
前記スタック領域を有するメモリは、
ｋビット幅（ｋは１以上の整数）の入力データバスを有し、
前記スタックポインタは、ｋビット境界のアドレスを指定して前記スタック領域を参照することを特徴とするマイクロプロセッサ。
【請求項１１】
請求項１乃至１０のいずれかに記載のマイクロプロセッサを含むことを特徴とするマイクロコンピュータ。
【請求項１２】
請求項１１に記載のマイクロコンピュータと、
前記マイクロコンピュータの処理対象となるデータの入力手段と、
前記マイクロコンピュータにより処理されたデータを出力するための出力手段とを含むことを特徴とする電子機器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサ、マイクロコンピュータ、電子機器に関する。
【背景技術】
【０００２】
今日の多くのマイクロプロセッサでは、プログラムの高速処理を実現するために、プログラムを構成する各命令の実行処理を１クロックサイクルで終了する複数の工程に分割し、連続する複数の命令間でそれぞれ異なる工程の処理を並行して行い、プログラム全体としての処理を高速化するパイプライン処理を行うアーキテクチャが採用されている。例えば、各命令の処理工程の数を統一し、各工程の処理時間を短くするために、単純な命令セットの組み合わせで複雑な処理を実現することによりパイプライン処理の高速化を図るＲＩＳＣ（Reduced Instruction Set Computer）プロセッサが知られている。
【特許文献１】特公平８−１６０４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
多くのマイクロプロセッサでは、通常動作時は無駄のないパイプライン処理を実現することができるが、何らかの割り込み要因が発生すると割り込み命令が実行されて割り込み処理プログラムへの分岐が発生するため、パイプライン処理が停止される。割り込み処理に時間がかかるとプログラムの応答性が低下するため、割り込み処理プログラムの実行時間の短縮化のみならず、割り込み命令の実行時間の短縮化も要求される。
【０００４】
一般に、割り込み命令の実行は、割り込み命令のデコード処理、分岐先アドレスの生成、プログラムカウンタ値やステータス情報のスタックへの退避、分岐先アドレスへのジャンプの過程を踏まなければならない。
【０００５】
分岐先アドレスは割り込み要因毎に異なり、割り込み要因と分岐先アドレスの対応テーブル（ベクタテーブル）が設けられている。そのため、分岐先アドレスの生成過程では、ベクタテーブルを参照するためのアドレス（ベクタアドレス）の生成及びベクタアドレスで参照される記憶領域から分岐先アドレスの読み出しの処理が必要である。
【０００６】
また、スタックへの退避過程では、スタックポインタの更新、プログラムカウンタ値のデータバスへの出力、プログラムカウンタ値のスタックへの退避、ステータス情報のデータバスへの出力、ステータス情報のスタックへの退避の処理が必要である。
【０００７】
結果的に、従来のマイクロプロセッサでは、分岐先アドレスの生成過程の実行に少なくとも２〜３クロックサイクルを要し、スタックへの退避過程の実行に少なくとも３〜５クロックサイクルを要しており、割り込み命令の実行に７〜１０クロックサイクル程度を要していた。
【０００８】
割り込み命令の実行のための専用回路を付加すれば、割り込み命令の実行に要するクロックサイクルを削減することができる。しかし、割り込み命令は頻繁に実行されるわけではないので、コストアップにつながる専用回路の付加は得策ではない。
【０００９】
本発明は、以上のような問題点に鑑みてなされたものであり、パイプライン処理のための回路を有効利用して割り込み命令の実行処理を高速化するマイクロプロセッサを提供することを目的とする。
【課題を解決するための手段】
【００１０】
（１）本発明に係るマイクロプロセッサは、
所定のメモリに命令コードが格納されている各命令の実行において、前記命令コードをフェッチする命令フェッチステージと、前記各命令を実行する１以上の命令実行ステージを含むパイプライン処理を行う機能を有するマイクロプロセッサであって、
前記パイプライン処理を制御するパイプライン制御部と、
前記命令コードの格納先を参照するためのプログラムカウンタと、
少なくとも２つの入力に基づいて所定の算術演算を実行する汎用の算術演算ユニットと、
少なくとも前記プログラムカウンタの値を退避させるスタック領域を参照するためのスタックポインタと、
少なくとも割り込み命令に対応する分岐先アドレスの情報が格納されたメモリのアドレスを設定するために使用される第１のパイプラインレジスタと、
少なくとも前記算術演算ユニットの第１の入力を設定するために使用される第２のパイプラインレジスタと、
少なくとも前記算術演算ユニットの第２の入力を設定するために使用される第３のパイプラインレジスタと、を含み、
前記パイプライン制御部は、
複数の命令実行ステージにより実行される割り込み命令の第１の命令実行ステージにおいて、
前記割り込み命令の命令コードをデコードし、
デコードした結果に基づいて、所定のブロックに、前記割り込み命令に対応する分岐先アドレスの情報を参照するためのベクタアドレスを生成させ、
前記割り込み命令の第１の命令実行ステージの終了時に、
前記第１のパイプラインレジスタに前記ベクタアドレスが設定され、
前記第２のパイプラインレジスタに前記スタックポインタの値が設定され、
前記第３のパイプラインレジスタに所定の定数値が設定されるように制御することを特徴とする。
【００１１】
命令コードが格納されている所定のメモリは、例えば、ＲＯＭ(Read Only Memory)であってもよい。
【００１２】
各命令毎に命令実行ステージの数が異なっていてもよい。
【００１３】
例えば、ソフトウェア割り込みの場合は、割り込み命令の命令コードはあらかじめ所定のメモリに格納されていてもよいし、ハードウェア割り込みの場合は、割り込み要因を埋め込んだ割り込み命令の命令コードを生成してもよい。
【００１４】
割り込み命令に対応する分岐先アドレスの情報が格納されたメモリは、本発明に係るマイクロプロセッサの内部にあってもよいし、外部にあってもよい。
【００１５】
パイプラインレジスタは、パイプライン処理の次のステージの処理に必要な情報を設定するために使用されるレジスタである。
【００１６】
ベクタアドレスを生成させる所定のブロックは、即値アドレスや即値データを生成するための即値生成部であってもよいし、汎用の算術演算ユニットでもよいし、ベクタアドレスを生成する専用のブロックであってもよい。
【００１７】
所定の定数値は、例えば、スタック領域が少なくともバイトアクセス及びワードアクセスが可能なメモリに割り当てられている場合、１ワードに相当するビット数を１バイトに相当するビット数で除算した値であってもよい。例えば、1ワードが３２ビットの場合、所定の定数値は４であってもよい。
【００１８】
本発明によれば、割り込み命令の第１の命令実行ステージにおいて、命令コードのデコードとベクタアドレスの生成を行うことができる。また、本発明によれば、割り込み命令の第１の命令実行ステージの終了時点で、各パイプラインレジスタに、分岐先アドレスの情報が格納されたメモリのアドレス（ベクタアドレス）の設定及びスタックポインタ更新のための算術演算入力の設定をすることができる。従って、割り込命令の実行に要するクロックサイクルを削減することができる。
【００１９】
（２）本発明に係るマイクロプロセッサは、
即値アドレス又は即値データを生成するための即値生成部を含み、
前記パイプライン制御部は、
前記割り込み命令の第１の命令実行ステージにおいて、前記即値生成部に前記ベクタアドレスを生成させることを特徴とする。
【００２０】
本発明によれば、割り込み命令の第１の命令実行ステージにおいて、即値生成部を使用してベクタアドレスを生成するので、専用回路を使用する場合と比較して面積コストを削減することができる。
【００２１】
（３）本発明に係るマイクロプロセッサは、
前記即値生成部の出力から前記第１のパイプラインレジスタの入力に至る信号経路と、
前記第１のパイプラインレジスタの出力から前記分岐先アドレスの情報が記憶されているメモリのアドレス入力に至る信号経路と、
前記スタックポインタの出力から前記第２のパイプラインレジスタの入力に至る信号経路と、
前記第２のパイプラインレジスタの出力から前記算術演算ユニットの第１の入力に至る信号経路と、
前記所定の定数値の供給源から前記第３のパイプラインレジスタの入力に至る信号経路と、
前記第３のパイプラインレジスタの出力から前記算術演算ユニットの第２の入力に至る信号経路と、を含むことを特徴とする。
【００２２】
本発明によれば、即値生成部の出力から第１のパイプラインレジスタの入力に至る信号経路及び第１のパイプラインレジスタの出力から分岐先アドレスの情報が記憶されているメモリのアドレス入力に至る信号経路が存在するので、１クロックサイクルで、当該メモリのアドレス入力に即値生成部が生成したベクタアドレスを供給することができる。また、本発明によれば、スタックポインタの出力から第２のパイプラインレジスタの入力に至る信号経路及び第２のパイプラインレジスタの出力から算術演算ユニットの第１の入力に至る信号経路が存在するので、１クロックサイクルで、算術演算ユニットの第１の入力にスタックポインタの値を供給することができる。また、本発明によれば、所定の定数値の供給源から第３のパイプラインレジスタの入力に至る信号経路及び第３のパイプラインレジスタの出力から算術演算ユニットの第２の入力に至る信号経路が存在するので、１クロックサイクルで、算術演算ユニットの第２の入力に所定の定数値を供給することができる。従って、割り込命令の実行に要するクロックサイクルを削減することができる。
【００２３】
（４）本発明に係るマイクロプロセッサは、
汎用データバスを含み、
前記第ｎ（ｎは１、２、３のいずれか）のパイプラインレジスタは、
前記汎用データバスの少なくとも一部に所定のデータを供給するためにも使用され、
前記パイプライン制御部は、
前記割り込み命令の第２の命令実行ステージにおいて、
前記スタックポインタの値及び前記所定の定数値に基づいて、前記算術演算ユニットに所定の算術演算を実行させ、
前記割り込み命令の第２の命令実行ステージの終了時に、
前記スタックポインタに前記算術演算の結果が設定され、
前記第ｎのパイプラインレジスタに前記プログラムカウンタの値が設定され、
前記プログラムカウンタに前記ベクタアドレスによって参照される前記分岐先アドレスの情報が設定されるように制御することを特徴とする。
【００２４】
所定の算術演算は、例えば、加算であってもよいし、減算であってもよい。例えば、４バイトが１ワードに相当するメモリにスタック領域が割り当てられている場合、所定の定数値は４であってもよく、算術演算ユニットはスタックポインタの値−４の算術演算をするようにしてもよい。
【００２５】
本発明によれば、割り込み命令の第２の命令実行ステージにおいて、スタックポインタの値及び所定の定数値からスタックポインタの更新値を計算することができる。また、本発明によれば、割り込み命令の第２の命令実行ステージの終了時点で、スタックポインタの更新、第ｎのパイプラインレジスタへのプログラムカウンタ値の設定（汎用データバスの少なくとも一部へのプログラムカウンタ値の供給）及びプログラムカウンタへの分岐先アドレスの情報の設定をすることができる。さらに、本発明によれば、第ｎのパイプラインレジスタにプログラムカウンタ値の設定を行うので、プログラムカウンタ値をスタック領域に退避する前に、プログラムカウンタに分岐先アドレスの情報を設定することができる。従って、割り込命令の実行に要するクロックサイクルを削減することができる。また、汎用の算術演算ユニットを使用してスタックポインタの更新値の計算をするので、専用回路を使用する場合と比較して面積コストを削減することができる。
【００２６】
（５）本発明に係るマイクロプロセッサは、
前記プログラムカウンタの出力から前記第ｎのパイプラインレジスタの入力までの信号経路と、
前記第ｎのパイプラインレジスタの出力から前記汎用データバスの少なくとも一部までの信号経路と、を含むことを特徴とする。
【００２７】
本発明によれば、プログラムカウンタの出力から第ｎのパイプラインレジスタの入力までの信号経路及び第ｎのパイプラインレジスタの出力から汎用データバスの少なくとも一部までの信号経路が存在するので、１クロックサイクルで、汎用データバスにプログラムカウンタ値を供給することができる。従って、割り込命令の実行に要するクロックサイクルを削減することができる。
【００２８】
（６）本発明に係るマイクロプロセッサは、
汎用データバスと、
少なくとも前記汎用データバスの少なくとも一部に所定のデータを供給するために使用される第４のパイプラインレジスタと、
前記プログラムカウンタの出力から前記第４のパイプラインレジスタの入力までの信号経路と、
前記第４のパイプラインレジスタの出力から汎用データバスの少なくとも一部までの信号経路と、を含み、
前記パイプライン制御部は、
前記割り込み命令の第２の命令実行ステージにおいて、
前記スタックポインタの値及び所定の定数値に基づいて、前記算術演算ユニットに所定の算術演算を実行させ、
前記割り込み命令の第２の命令実行ステージの終了時に、
前記スタックポインタに前記算術演算の結果が設定され、
前記第４のパイプラインレジスタに前記プログラムカウンタの値が設定され、
前記プログラムカウンタに前記ベクタアドレスによって参照される前記分岐先アドレスの情報が設定されるように制御することを特徴とする。
【００２９】
本発明によれば、割り込み命令の第２の命令実行ステージにおいて、スタックポインタの値及び所定の定数値からスタックポインタの更新値を計算することができる。また、本発明によれば、割り込み命令の第２の命令実行ステージの終了時点で、スタックポインタの更新、第４のパイプラインレジスタへのプログラムカウンタ値の設定及びプログラムカウンタへの分岐先アドレスの情報の設定をすることができる。さらに、本発明によれば、第４のパイプラインレジスタにプログラムカウンタ値の設定を行うので、プログラムカウンタ値をスタック領域に退避する前に、プログラムカウンタに分岐先アドレスの情報を設定することができる。従って、割り込命令の実行に要するクロックサイクルを削減することができる。また、汎用の算術演算ユニットを使用してスタックポインタの更新値の計算をするので、専用回路を使用する場合と比較して面積コストを削減することができる。
【００３０】
また、本発明によれば、プログラムカウンタの出力から第４のパイプラインレジスタの入力までの信号経路及び第４のパイプラインレジスタの出力から汎用データバスの少なくとも一部までの信号経路が存在するので、１クロックサイクルで、汎用データバスにプログラムカウンタ値を供給することができる。従って、割り込命令の実行に要するクロックサイクルを削減することができる。さらに、本発明によれば、第４のパイプラインレジスタの出力から汎用データバスまでの信号経路が存在するので、第１〜３のパイプラインレジスタを介することなく、汎用データバスに所望のデータを供給することができる。例えば、汎用データバスへのデータ供給と算術演算ユニットの入力の供給を同一の実行ステージで行うことができる。従って、割り込み処理命令以外の命令においても実行サイクルを削減することができる。
【００３１】
（７）本発明に係るマイクロプロセッサは、
前記マイクロプロセッサの所定の状態を表示する状態レジスタを含み、
前記パイプライン制御部は、
前記割り込み命令の第３の命令実行ステージにおいて、
前記パイプラインレジスタに設定された前記プログラムカウンタの値及び前記状態レジスタの値が、前記スタック領域に書き込まれるように制御することを特徴とする。
【００３２】
本発明によれば、割り込み命令の第３の命令実行ステージにおいて、プログラムカウンタの値のスタック領域への退避及び状態レジスタの値のスタック領域への退避を同時に行うことができる。従って、割り込命令の実行に要するクロックサイクルを削減することができる。
【００３３】
（８）本発明に係るマイクロプロセッサは、
前記状態レジスタの出力から前記汎用データバスの少なくとも一部までの信号経路と、
前記汎用データバスから前記スタック領域を有するメモリのデータ入力までの信号経路と、を含むことを特徴とする。
【００３４】
本発明によれば、状態レジスタの出力から汎用データバスの少なくとも一部までの信号経路及び汎用データバスからスタック領域を有するメモリのデータ入力までの信号経路が存在するので、１クロックサイクルで、スタック領域を有するメモリのデータ入力に汎用データバス上のデータを供給することができる。従って、割り込命令の実行に要するクロックサイクルを削減することができる。
【００３５】
（９）本発明に係るマイクロプロセッサは、
前記プログラムカウンタは、
ｉビット（ｉは１以上の整数）のビット幅を有し、
前記状態レジスタは、
ｊビット（ｊは１以上の整数）のビット幅を有し、
前記スタック領域を有するメモリは、
ｋビット幅（ｋは１以上の整数）の入力データバスを有し、
ｋはｉ＋ｊ以上であることを特徴とする。
【００３６】
例えば、プログラムカウンタが２４ビット、状態レジスタが８ビット、スタック領域を有するメモリの入力データバスが３２ビットであってもよい。
【００３７】
本発明によれば、スタック領域を有するメモリの入力データバスのビット数が、プログラムカウンタのビット数と状態レジスタのビット数の和以上であるので、１クロックサイクルで、プログラムカウンタの値及び状態レジスタの値をスタック領域に退避することができる。従って、割り込命令の実行に要するクロックサイクルを削減することができる。
【００３８】
（１０）本発明に係るマイクロプロセッサは、
前記スタック領域を有するメモリは、
前記スタック領域を有するメモリは、
ｋビット幅（ｋは１以上の整数）の入力データバスを有し、
前記スタックポインタは、ｋビット境界のアドレスを指定して前記スタック領域を参照することを特徴とする。
【００３９】
ｋビット境界のアドレスは、スタック領域を有するｋビット幅の入力データバスのメモリにｋビットのデータを１クロックサイクルで書き込むことができるアドレスであればよい。例えば、１バイト（８ビット）の記憶領域毎にアドレスが割り当てられているメモリが３２ビットに入力データバスを有する場合であれば、３２ビットのデータは４アドレス分の記憶領域に格納されるので、例えば、３２ビット境界のアドレスは、下位２ビットが０のアドレスであってもよい。
【００４０】
本発明によれば、ｋビットのデータを１クロックサイクルでスタック領域に書き込むことができる。従って、プログラムカウンタのビット数と状態レジスタのビット数の和がｋ以下の場合は、１クロックサイクルで、プログラムカウンタの値及び状態レジスタの値をスタック領域に退避することができる。
【００４１】
（１１）本発明は、
上記に記載のマイクロプロセッサを含むことを特徴とするマイクロコンピュータである。
【００４２】
（１２）本発明は、
上記に記載のマイクロコンピュータと、
前記マイクロコンピュータの処理対象となるデータの入力手段と、
前記マイクロコンピュータにより処理されたデータを出力するための出力手段とを含むことを特徴とする電子機器である。
【発明を実施するための最良の形態】
【００４３】
以下、本発明の好適な実施形態について図面を用いて詳細に説明する。なお、以下に説明する実施の形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また以下で説明される構成の全てが本発明の必須構成要件であるとは限らない。
【００４４】
１．マイクロプロセッサ
図１は、本実施形態に係るマイクロプロセッサの一部の構成例を説明するための図である。図１では、特に、本実施形態に係るマイクロプロセッサに含まれる割り込み処理に関連する部分の回路構成例を示している。
【００４５】
ＲＡＭ２００は、例えば、３２ｋバイトのＲＡＭであり、２４ビットアドレス空間の０ｘ００００００〜０ｘ００７ＦＦＦにマッピングされている。ＲＡＭ２００は、少なくとも１クロックサイクルのバイトアクセス（８ビットアクセス）及びワードアクセス（３２ビットアクセス）が可能な構成になっている。ＲＡＭ２００は、２４ビットアドレスの下位２ビットが００〜１１の４バイト毎にワード境界（３２ビット境界）が設定されており、ワード境界（３２ビット境界）のアドレス（下位２ビットが００のアドレス）を指定してワードアクセスをすれば、１クロックサイクルで１ワード（３２ビット）データの書き込み又は読み出しが可能である。ＲＡＭ２００は、マイクロプロセッサ１０の内部メモリであってもよいし、外部メモリであってもよい。
【００４６】
マイクロプロセッサ１０は、２４ビットのプログラムカウンタ２０を含む。プログラムカウンタ２０の出力はＲＯＭ３０のアドレス入力に接続されており、プログラムカウンタ２０はＲＯＭ３０を参照するために使用される。ＲＯＭ３０は、例えば、６４ｋバイトのＲＯＭであり、２４ビットのアドレス空間の０ｘ０１００００〜０ｘ０１ＦＦＦＦにマッピングされている。ＲＯＭ３０には複数の命令コードが先頭アドレスから順に格納されている。例えば、各命令コードは１６ビット固定長であり、連続する２つのアドレスに格納されている。プログラムカウンタ２０の入力は３ｔｏ１セレクタ２４の出力に接続されている。プログラムカウンタ２０は、クロック信号（図示せず）の立ち上がりで３ｔｏ１セレクタ２４の出力を取り込んで更新される。３ｔｏ１セレクタ２４の３つの入力はそれぞれ、プログラムカウンタ２０の出力、インクリメンタ４０の出力、３２ビットの汎用データバス１５０の下位２４ビットに接続されている。３ｔｏ１セレクタ２４は、各命令コードに従い、プログラムカウンタ２０の出力、インクリメンタ４０の出力又は汎用データバス１５０上のデータのいずれかを選択してプログラムカウンタ２０の入力に供給する。例えば、ＲＯＭ３０に格納された命令コードをアドレス順に読み出す場合には、３ｔｏ１セレクタ２４はインクリメンタ４０の出力を選択する。例えば、各命令コードがＲＯＭ３０の連続する２つのアドレスに格納されている場合、インクリメンタ４０はプログラムカウンタ２０の値に２を加えた値を出力する。また、例えば、ＲＯＭ３０に格納された次の命令コードの読み出しを待たせる場合には、３ｔｏ１セレクタ２４はプログラムカウンタ２０の出力を選択する。また、例えば、分岐先命令の分岐先アドレスをプログラムカウンタ２０に設定するためには、３ｔｏ１セレクタ２４は汎用データバス１５０の下位２４ビットを選択する。
【００４７】
８つの２４ビット汎用レジスタＲ０〜Ｒ７は、各命令コードの実行処理において汎用的に使用される。また、マイクロプロセッサ１０は、２４ビットのスタックポインタ（ＳＰ）５０を含む。スタックポインタ５０は、ＲＡＭ２００に設けられたスタック領域２１０のアドレスを参照するために使用される。汎用レジスタＲ０〜Ｒ７及びスタックポインタ５０の各入力は２ｔｏ１セレクタ５４の出力に接続されている。２ｔｏ１セレクタ５４の一方の入力は汎用データバス１５０の下位２４ビットに接続されており、他方の入力はＡＬＵ（算術演算ユニット）９０の出力に接続されている。２ｔｏ１セレクタ５４は、各命令コードに従い、汎用データバス１５０上の下位２４ビットのデータ又はＡＬＵ９０の出力のいずれかを選択して汎用レジスタＲ０〜Ｒ７及びスタックポインタ５０の各入力に供給する。汎用レジスタＲ０〜Ｒ７及びスタックポインタ５０の各出力は、９ｔｏ１セレクタ６４及び９ｔｏ１セレクタ７４の各入力に接続されている。９ｔｏ１セレクタ６４及び９ｔｏ１セレクタ７４の各出力はそれぞれ２ｔｏ１セレクタ６６及び３ｔｏ１セレクタ７６の１つの入力に接続されている。２ｔｏ１セレクタ６６の他方の入力は、プログラムカウンタ２０の出力に接続されている。３ｔｏ１セレクタ７６の他の２つの入力は、２ｔｏ１セレクタ５４の出力及び即値生成部１００の出力に接続されている。２ｔｏ１セレクタ６６の出力は、パイプラインレジスタ２（ＰＲＥＧ２）（７０）のデータ入力に接続されている。３ｔｏ１セレクタ７６の出力は、パイプラインレジスタ１（ＰＲＥＧ１）（６０）のデータ入力及び２ｔｏ１セレクタ８４の一方の入力に接続されている。２ｔｏ１セレクタ８４の他方の入力には、定数値４が供給される。２ｔｏ１セレクタ８４の出力は、パイプラインレジスタ３（ＰＲＥＧ３）（８０）のデータ入力に接続されている。従って、９ｔｏ１セレクタ６４及び２ｔｏ１セレクタ６６は、各命令コードに従い、汎用レジスタＲ０〜Ｒ７のいずれかの出力、スタックポインタ５０の出力又はプログラムカウンタ２０の出力のいずれかを選択してパイプラインレジスタ２（７０）のデータ入力に供給する。また、９ｔｏ１セレクタ７４及び３ｔｏ１セレクタ７６は、各命令コードに従い、汎用レジスタＲ０〜Ｒ７のいずれかの出力、スタックポインタ５０の出力、２ｔｏ１セレクタ５４の出力又は即値生成部１００の出力のいずれかを選択してパイプラインレジスタ１（６０）のデータ入力に供給する。さらに、９ｔｏ１セレクタ７４、３ｔｏ１セレクタ７６及び２ｔｏ１セレクタ８４は、各命令コードに従い、汎用レジスタＲ０〜Ｒ７のいずれかの出力、スタックポインタ５０の出力、２ｔｏ１セレクタ５４の出力、即値生成部１００の出力又は定数値４のいずれかを選択してパイプラインレジスタ３（８０）のデータ入力に供給する。
【００４８】
即値生成部１００は、各命令コードに従い、各種の即値アドレス又は即値データを生成する。割り込み命令の実行時には、１７ビットのＴＴＢＲ（Trap Table Base Register）レジスタ１２０の出力及び５ビットのベクタコード（割り込み番号）３１２が即値生成部１００に供給される。ＴＴＢＲレジスタ１２０にはベクタテーブルのベースアドレスが設定されている。ベクタコード３１２は割り込み命令の命令コードの所定の５ビットに割り当てられており、デコード処理部３１０が割り込み命令をデコードしてベクタコード３１２を出力する。割り込み命令の実行時には、即値生成部１００は、ＴＴＢＲレジスタ１２０の出力とベクタコード３１２を結合し、さらに下位２ビットに０を付加して２４ビットのベクタアドレスを生成する。
【００４９】
マイクロプロセッサ１０は、パイプラインレジスタ１（６０）（第１のパイプラインレジスタ）、パイプラインレジスタ２（７０）（第２のパイプラインレジスタ）及びパイプラインレジスタ３（８０）（第３のパイプラインレジスタ）を含む。パイプラインレジスタ１（６０）、パイプラインレジスタ２（７０）、パイプラインレジスタ３（８０）は、例えば２４ビットのレジスタであり、パイプライン処理を実現するために使用される。
【００５０】
パイプラインレジスタ１（６０）の出力はＲＡＭ２００のアドレス入力に接続されており、パイプラインレジスタ１（６０）はＲＡＭ２００のアドレスを設定するために使用される。ＲＡＭ２００には、汎用のデータ記憶領域（図示せず）に加えて、スタック領域２１０が割り当てられている。また、ＲＡＭ２００にはベクタテーブル２２０が格納されている。スタック領域２１０は、分岐命令を実行する際にプログラムカウンタ２０の値を退避させるために使用され、また、割り込み命令を実行する際にプログラムカウンタ２０の値及び状態レジスタ１１０の値を退避させるために使用される。従って、分岐命令又は割り込み命令の実行時には、所定のタイミングでパイプラインレジスタ１（６０）にスタックポインタ５０の値が設定される。ベクタテーブル２２０は、割り込み命令に対応する割り込み処理ルーチンへの分岐先アドレスの情報を有する。従って、割り込み命令の実行時には、所定のタイミングでパイプラインレジスタ１（６０）に分岐先アドレスの情報を参照するためのベクタアドレスが設定される。
【００５１】
ＲＡＭ２００のデータ入出力は汎用データバス１５０に接続されている。また、パイプラインレジスタ２（７０）の出力は汎用データバス１５０に接続されており、パイプラインレジスタ２（７０）は、３２ビットの汎用データバス１５０の少なくとも一部（例えば、下位２４ビット）に所定のデータを供給するために使用される。また、パイプラインレジスタ２（７０）の出力はＡＬＵ９０の第１の入力に接続されており、ＡＬＵ９０の第１の入力を設定するために使用される。すなわち、パイプラインレジスタ２（７０）は汎用データバス１５０に供給されるデータ又はＡＬＵ９０の第１の入力データを設定するためのパイプラインレジスタである。
【００５２】
パイプラインレジスタ３（８０）の出力はＡＬＵ９０の第２の入力に接続されており、ＡＬＵ９０の第２の入力を設定するために使用される。
【００５３】
マイクロプロセッサ１０は、ＡＬＵ９０を含む。ＡＬＵ９０は、少なくとも２つの入力に基づいて所定の算術演算を実行する汎用の算術演算ユニットであり、例えば、２４ビットの２つの入力データに対して各種の算術演算（加算、減算、乗算、論理演算等）を行い、２４ビットの演算結果を出力する。ＡＬＵ９０の出力は２ｔｏ１セレクタ５４の一方の入力に接続されている。従って、ＡＬＵ９０の演算結果は、２ｔｏ１セレクタ５４を介して汎用レジスタＲ０〜Ｒ７又はスタックポインタ５０のいずれかに格納することができる。また、ＡＬＵ９０の演算結果は、２ｔｏ１セレクタ５４及び３ｔｏ１セレクタ７６を介してパイプラインレジスタ１（６０）に格納することもできる。さらに、ＡＬＵ９０の演算結果は、２ｔｏ１セレクタ５４、３ｔｏ１セレクタ７６及び２ｔｏ１セレクタ８４を介してパイプラインレジスタ３（８０）に格納することもできる。
【００５４】
汎用データバス１５０には、パイプラインレジスタ２（７０）の出力、ＲＡＭ２００のデータ入出力、状態レジスタ１１０の出力、２ｔｏ１セレクタ２４の一方の入力及び２ｔｏ１セレクタ５４の一方の入力が接続されている。状態レジスタ１１０は、マイクロプロセッサの所定の状態を表示する８ビットレジスタである。汎用データバス１５０には、パイプラインレジスタ２（７０）の出力及び状態レジスタ１１０の出力、ＲＡＭ２００の出力のいずれか一つのみが供給されるように制御される。ここで、汎用データバス１５０は３２ビットなので、例えば、汎用データバス１５０の下位２４ビットにパイプラインレジスタ２（７０）の出力を供給すると同時に、汎用データバス１５０の上位８ビットに状態レジスタ１１０の出力を供給することが可能である。
【００５５】
割り込み命令生成部１３０は、例えば、３２種類の割り込み要因（割り込み番号０〜３１）のいずれかによるハードウェア割り込みが発生した場合に、割り込み番号０〜３１に対応して発生する割り込み信号ＩＮＴ０〜ＩＮＴ３１から割り込み命令の１６ビット命令コード１３２を生成する。割り込み生成部１３０の出力は、２ｔｏ１セレクタ１４４の一方の入力に接続されている。２ｔｏ１セレクタ１４４の他方の入力には、ＲＯＭのデータ出力が接続されている。２ｔｏ１セレクタ１４４の出力は、１６ビットの命令フェッチレジスタ１４０の入力に接続されている。２ｔｏ１セレクタ１４４は、ＲＯＭ３０から読み出した命令コード３２又は割り込み命令生成部１３０が生成した命令コード１３２のいずれかを選択して命令フェッチレジスタ１４０の入力に供給する。例えば、ハードウェア割り込みが発生した場合には、２ｔｏ１セレクタ１４４は割り込み命令生成部１３０が生成した命令コード１３２を選択する。一方、ハードウェア割り込みが発生していない場合は、２ｔｏ１セレクタ１４４はＲＯＭ３０から読み出した命令コード３２を選択する。命令フェッチレジスタは、クロック信号（図示せず）の立ち上がりで２ｔｏ１セレクタ１４４の出力を取り込んで命令コードをフェッチする。
【００５６】
マイクロプロセッサ１０は、パイプライン制御部３００を含む。パイプライン制御部３００は、ＲＯＭ２０（所定のメモリ）に命令コードが格納されている各命令の実行において、命令コードをフェッチする命令フェッチステージと、各命令を実行する１以上の命令実行ステージを含むパイプライン処理を制御する。パイプライン制御部３００は、デコード処理部３１０及び制御信号生成部３２０を含んで構成されていてもよい。デコード処理部３１０の入力は命令フェッチレジスタ１４０の出力に接続されている。デコード処理部３１０は、命令フェッチレジスタ１４０の出力１４２（フェッチした命令コード）をデコードし、命令を解読する。制御信号生成部３２０は、デコード処理部３１０の出力（デコード結果）に基づいて、各命令のパイプライン処理を制御するための制御信号３２２−１〜ｍを生成する。制御信号３２２−１〜ｍには、セレクタ２４、５４、６４，６６、７４、７６、８４、１４４の各選択信号、汎用レジスタＲ０〜Ｒ７、スタックポインタ５０、パイプラインレジスタ１、２、３（６０、７０、８０）の各書き込み信号、ＡＬＵ９０の算術演算選択信号、パイプラインレジスタ２（７０）、状態レジスタ１１０、ＲＡＭ２００の汎用データバス１５０への出力制御信号、ＲＡＭ２００に対する書き込みイネーブル信号などが含まれる。
【００５７】
図２は状態レジスタの構成例を説明するための図である。状態レジスタ１１０は、マイクロプロセッサの所定の状態を表示する、例えば、８ビットレジスタである。例えば、ビット７〜０は、それぞれ以下のようなマイクロプロセッサの状態表示が割り当てられる。ビット７〜５の３ビットに割り当てられたＩＬ[２：０]（Interrupt Level）ビットは、割り込みの優先レベルを表示するビットであり、ＩＬ[２：０]ビットの設定値よりも高い優先度の割り込みのみが受け付けられる。ビット４に割り当てられたＩＥ（Interrupt Enable）ビットは、外部割り込みを受け付けるか否かを決定するビットであり、例えば、ＩＥビットが１の時に外部割り込みが受け付けられる。ビット３に割り当てられたＣ（Carry）ビットはＡＬＵ９０の算術演算において、桁上げ又は桁借りが発生した時に１になるビットである。ビット２に割り当てられたＶ（Overflow）ビットはＡＬＵ９０の算術演算において、オーバーフロー又はアンダーフローが発生した時に１になるビットである。ビット１に割り当てられたＺ（Zero）ビットはＡＬＵ９０の出力が０の時に１になるビットである。ビット０に割り当てられたＮ（Neg ative）ビットはＡＬＵ９０の出力の符号ビット（最上位ビット（ビット２３））と一致する。
【００５８】
図３は、ベクタテーブルの構成例を説明するための図である。ベクタテーブル２２０は、割り込み番号０〜３１に対応して分岐先アドレス０〜３１を格納する記憶領域ｍ０〜ｍ３１を有する。各記憶領域ｍ０〜ｍ３１はそれぞれ、ＴＴＢＲ×１２８＋０ｘ００〜ＴＴＢＲ×１２８＋０ｘ７Ｃのワード（３２ビット）境界のアドレスに割り当てられている。例えば、ＴＴＢＲの値を０ｘ０００７Ｅとすると、各記憶領域ｍ０〜ｍ３１はそれぞれ、０ｘ００３Ｆ００〜０ｘ００３Ｆ７Ｃアドレスに割り当てられる。
【００５９】
図４は、割り込み命令の命令コードの構成例を説明するための図である。割り込み命令は、プログラムカウンタ値と状態レジスタ値をスタック領域に退避し、割り込み要因毎に用意された割り込み処理ルーチンの開始アドレスに分岐する命令である。割り込み命令の命令コードは、例えば、１６ビットのフィールドを有する。例えば、ビット１５〜７の上位９ビットのフィールドには、命令の種類を識別するためのＯＰコードが割り当てられる。例えば、割り込み命令のＯＰコードは０ｘ０Ｅ８である。また、例えば、ビット６〜２の５ビットフィールドには、割り込み番号０〜３１のいずれか、すなわち、０ｘ００〜０ｘ１Ｆのいずれかが埋め込まれる。最下位の２ビットは、例えば、未定義のビットである。
【００６０】
ソフトウェア割り込みの場合は、パイプライン制御部３００のデコード処理部３１０は、命令コード１４２をデコードし、上位９ビットが０ｘ０Ｅ８に一致すれば割り込み命令と判断する、また、デコード処理部３１０は、例えば、命令コード１４２のビット６〜２の５ビットをベクタコード３１２として出力する。
【００６１】
ハードウェア割り込みの場合は、割り込み命令生成部１３０は、例えば、３２種類の割り込み要因（割り込み番号０〜３１）のいずれかによるハードウェア割り込みが発生した場合に、ビット１５〜７の上位９ビットを０ｘ０Ｅ８とし、発生したハードウェア割り込みに対応する割り込み番号をビット６〜２の５ビットに埋め込んで割り込み命令の命令コード１３２を生成する。
【００６２】
図５は、本実施形態に係るマイクロプロセッサがソフトウェア割り込みを実行する場合の動作を説明するための図である。以下、図１を参照しながら図５の割り込み動作について説明する。なお、以下の説明では、時刻Ｔ０〜Ｔ６においてパイプライン制御部３００（制御信号生成部３２０）は、セレクタ１４４がＲＯＭ３０から読み出された命令コード３２を選択するように選択信号を生成しており、セレクタ１４４の出力には命令コード３２が伝播している。
【００６３】
時刻Ｔ０におけるクロックの立ち上がりでプログラムカウンタ２０が更新され、プログラムカウンタ２０には割り込み命令の１つ前の命令の命令コードが格納されたアドレスが設定され、ＲＯＭ３０から割り込み命令の１つ前の命令の命令コードが読み出される。時刻Ｔ０〜Ｔ１において、パイプライン制御部３００（制御信号生成部３２０）は、セレクタ２４がインクリメンタ４０の出力を選択するように選択信号を生成しており、セレクタ２４の出力にはプログラムカウンタ２０の値＋２の計算結果が伝播している。時刻Ｔ１におけるクロックの立ち上がりで、命令フェッチレジスタ１４０に、割り込み命令の１つ前の命令の命令コードが格納される。時刻Ｔ０〜Ｔ１は、割り込み命令の１つ前の命令の命令フェッチステージに対応する。
【００６４】
時刻Ｔ１におけるクロックの立ち上がりでプログラムカウンタ２０の値が＋２増加する。その結果、プログラムカウンタ２０には割り込み命令の命令コードが格納されたアドレスが設定され、ＲＯＭ３０から割り込み命令の命令コードが読み出される。時刻Ｔ１〜Ｔ２において、パイプライン制御部３００（制御信号生成部３２０）は、セレクタ２４がインクリメンタ４０の出力を選択するように選択信号を生成しており、セレクタ２４の出力にはプログラムカウンタ２０の値＋２の計算結果が伝播している。さらに、パイプライン制御部３００は、命令フェッチレジスタ１４０に格納された命令コード（割り込み命令の１つ前の命令の命令コード）をデコードし、デコード結果に基づいて制御信号３２２−１〜ｍを生成する。例えば、割り込み命令の１つ前の命令が何らかの算術演算命令であれば、ＡＬＵ９０が所望のデータの算術演算を実行することができるように、セレクタ５４、６４、６６、７４、７６、８４等を制御する制御信号３２２−１〜ｍが生成される。時刻Ｔ２におけるクロックの立ち上がりで、パイプラインレジスタ１、２、３（６０、７０、８０）に所望のデータが設定される。また、時刻Ｔ２におけるクロックの立ち上がりで、命令フェッチレジスタ１４０に、割り込み命令の命令コードが格納される。時刻Ｔ１〜Ｔ２は、割り込み命令の１つ前の命令の第１の命令実行ステージ及び割り込み命令の命令フェッチステージに対応する。
【００６５】
時刻Ｔ２におけるクロックの立ち上がりでプログラムカウンタ２０の値が＋２増加する。その結果、プログラムカウンタ２０には割り込み命令の１つ後の命令の命令コードが格納されたアドレスが設定され、ＲＯＭ３０から割り込み命令の１つ後の命令の命令コードが読み出される。時刻Ｔ２〜Ｔ３において、パイプライン制御部３００は、命令フェッチレジスタ１４０に格納された命令コード（割り込み命令の命令コード）をデコードし、デコード結果に基づいて制御信号３２２−１〜ｍを生成する。具体的には、パイプライン制御部３００（デコード処理部３１０）が、割り込み命令の命令コードをデコードして割り込み要因に対応するベクタコード３１２を生成する。さらに、即値生成部１００は、ＴＴＢＲレジスタ１２０の値とベクタコード３１２の値を結合し、下位２ビットに０を付加してベクタアドレスを生成する。また、時刻Ｔ２〜Ｔ３において、パイプライン制御部３００（制御信号生成部３２０）は、即値生成部１００の出力（ベクタアドレス）がパイプラインレジスタ１（６０）の入力に伝播するようにセレクタ５４、７６の各選択信号を生成し、スタックポインタ５０の出力がパイプラインレジスタ２（７０）の入力に伝播するようにセレクタ６４、６６の各選択信号を生成し、定数値４がパイプラインレジスタ３（８０）の入力に伝播するようにセレクタ８４の選択信号を生成する。さらに、パイプライン制御部３００（制御信号生成部３２０）は、セレクタ２４がプログラムカウンタ２０の出力を選択するように選択信号を生成しており、セレクタ２４の出力にはプログラムカウンタ２０の値が伝播している。ここで、パイプライン制御部３００（制御信号生成部３２０）が、時刻Ｔ０〜Ｔ２と異なり、セレクタ２４がインクリメンタ４０の出力を選択するように選択信号を生成しないのは、後述するように、割り込み処理の終了後に割り込み命令の１つ後の命令のフェッチからやり直すために、割り込み命令の１つ後の命令の命令コードが格納されているアドレス値をスタック領域２１０に退避するためである。時刻Ｔ３におけるクロックの立ち上がりで、パイプラインレジスタ１、２、３（６０、７０、８０）にそれぞれ、ベクタアドレス、スタックポインタ５０の値、定数値４が設定される。また、時刻Ｔ３におけるクロックの立ち上がりで、割り込み命令の１つ前の命令が何らかの算術演算命令であれば、ＡＬＵ９０の出力が、例えば、汎用レジスタＲ０に格納される。なお、パイプライン制御部３００（制御信号生成部３２０）は、時刻Ｔ３におけるクロックの立ち上がりで、命令フェッチレジスタ１４０に、割り込み命令の１つ後の命令コードがフェッチされないように制御する。時刻Ｔ２〜Ｔ３は、割り込み命令の１つ前の命令の第２の命令実行ステージ及び割り込み命令の第１の命令実行ステージに対応する。
【００６６】
時刻Ｔ３〜Ｔ４において、パイプライン制御部３００（制御信号生成部３２０）は、割り込み命令のデコード結果及び実行ステートに基づいて制御信号３２２−１〜ｍを生成する。具体的には、パイプライン制御部３００（制御信号生成部３２０）は、ＡＬＵ９０が減算を実行するように制御信号を生成し、汎用データバス１５０にＲＡＭ２００の出力データが供給されるように制御信号を生成する。従って、ＡＬＵ９０は、パイプラインレジスタ２（７０）の値とパイプラインレジスタ３（８０）の値の減算を行い、減算結果（スタックポインタ５０の値−４）を出力する。また、パイプラインレジスタ１（６０）により指定されるベクタアドレスによりＲＡＭ２００のベクタテーブル２２０から分岐先アドレスが読み出され、汎用データバス１５０に供給される。さらに、時刻Ｔ３〜Ｔ４において、パイプライン制御部３００（制御信号生成部３２０）は、ＡＬＵ９０の出力がスタックポインタ５０の入力及びパイプラインレジスタ１（６０）の入力に伝播するようにセレクタ５４、７６の各選択信号を生成し、プログラムカウンタ２０の出力がパイプラインレジスタ２（７０）の入力に伝播するようにセレクタ６６の選択信号を生成し、汎用データバス１５０のデータがプログラムカウンタ２０の入力に伝播するようにセレクタ２４の選択信号を生成する。時刻Ｔ４におけるクロックの立ち上がりで、スタックポインタ５０及びパイプラインレジスタ１（６０）にスタックポインタ５０の値−４が設定され、パイプラインレジスタ２（７０）にプログラムカウンタ２０の値（割り込み命令の１つ後の命令の命令コードが格納されているアドレス値）が設定される。さらに、時刻Ｔ４におけるクロックの立ち上がりで、プログラムカウンタ２０に汎用データバス１５０のデータ（分岐先アドレス）が設定される。なお、パイプライン制御部３００（制御信号生成部３２０）は、時刻Ｔ４におけるクロックの立ち上がりで、命令フェッチレジスタ１４０に、割り込み命令の１つ後の命令コードがフェッチされないように制御する。時刻Ｔ３〜Ｔ４は、割り込み命令の第２の命令実行ステージに対応する。
【００６７】
時刻Ｔ４〜Ｔ５において、パイプライン制御部３００（制御信号生成部３２０）は、割り込み命令のデコード結果及び実行ステートに基づいて制御信号３２２−１〜ｍを生成する。具体的には、パイプライン制御部３００（制御信号生成部３２０）は、汎用データバス１５０にパイプラインレジスタ２（７０）の出力及び状態レジスタ１１０の出力が供給されるように制御信号を生成し、ＲＡＭ２００に対する書き込みイネーブル信号を生成する。さらに、パイプライン制御部３００（制御信号生成部３２０）は、インクリメンタ４０の出力がプログラムカウンタ２０の入力に伝播するようにセレクタ２４の選択信号を生成する。時刻Ｔ５におけるクロックの立ち上がりで、ＲＡＭ２００の入力データにパイプラインレジスタ２（７０）の値（割り込み命令の１つ後の命令の命令コードが格納されているアドレス値）及び状態レジスタ１１０の値が設定され、ＲＡＭ２００のアドレスにパイプラインレジスタ１（６０）（スタックポインタ５０）の出力が設定されて、書き込みが行われる。その結果、ＲＡＭ２００のスタック領域２１０に割り込み命令の１つ後の命令の命令コードが格納されているアドレス値及び状態レジスタ１１０の値が退避される。また、時刻Ｔ５におけるクロックの立ち上がりで、命令フェッチレジスタ１４０に、分岐先アドレスに格納された命令（分岐先命令）の命令コードが格納される。時刻Ｔ４〜Ｔ５は、割り込み命令の第３の命令実行ステージ及び分岐先命令の命令フェッチステージに対応する。
【００６８】
時刻Ｔ５におけるクロックの立ち上がりでプログラムカウンタ２０の値が＋２増加する。その結果、プログラムカウンタ２０には分岐先命令の１つ後の命令の命令コードが格納されたアドレスが設定され、ＲＯＭ３０から分岐先命令の１つ後の命令の命令コードが読み出される。時刻Ｔ５〜Ｔ６において、パイプライン制御部３００（制御信号生成部３２０）は、命令フェッチレジスタ１４０に格納された命令コード（分岐先命令の命令コード）をデコードし、デコード結果に基づいて制御信号３２２−１〜ｍを生成する。時刻Ｔ６におけるクロックの立ち上がりで、命令フェッチレジスタ１４０に、分岐先命令の１つ後の命令の命令コードが格納される。時刻Ｔ５〜Ｔ６は、分岐先命令の第１の命令実行ステージ及び分岐先命令の１つ後の命令の命令フェッチステージに対応する。以降は、分岐先の割り込み処理プログラムが実行される。
【００６９】
以上説明したとおり、本実施形態に係るマイクロプロセッサは、割り込み命令を３クロックサイクル（第１〜３の命令実行ステージ）で実行することができる。
【００７０】
図６は、割り込み実行時におけるプログラムカウンタ及び状態レジスタのスタック領域への退避動作を説明するための図である。以下、図１及び図５を参照しながら図６について説明する。
【００７１】
スタック領域２１０は、２４ビットアドレス空間０ｘ００００００〜０ｘ００７ＦＦＦにマッピングされたＲＡＭ２００に含まれており、例えば、０ｘ００７Ｆ００〜０ｘ００７ＦＦＦにマッピングされた２５６バイトの記憶領域である。割り込み命令を実行する前（図５の時刻Ｔ０〜Ｔ２）は、スタックポインタ５０（ＳＰ）の値は０ｘ００７Ｆ１４であり、スタックポインタ５０（ＳＰ）は０ｘ００７Ｆ１４アドレスに割り当てられた記憶領域２１１を指している。０ｘ００７Ｆ１４アドレスは、下位２ビットが００のアドレスなので、ワード境界（３２ビット境界）のアドレスである。図５で説明したように、割り込み命令を実行すると、第２の命令実行ステージの最後（時刻Ｔ４）に、スタックポインタ５０及びパイプラインレジスタ１（６０）にスタックポインタ５０の値−４の計算値、すなわち、０ｘ００７Ｆ１０が設定される。ここで、０ｘ００７Ｆ１０アドレスは、下位２ビットが００のアドレスなので、ワード境界（３２ビット境界）のアドレスである。次に、第３の命令実行ステージ（時刻Ｔ４〜Ｔ５）において、プログラムカウンタ２０の出力及び状態レジスタ１１０の出力が汎用データバス１５０に供給される。例えば、３２ビットのデータバスの下位２４ビット及び上位８ビットにそれぞれプログラムカウンタ２０の２４ビット出力（ＰＣ[２３：０]）及び状態レジスタ１１０の８ビット出力（ＰＳＲ[７：０]）が供給される。そして、第３の命令実行ステージの最後（時刻Ｔ５）に、汎用データバス１５０に供給された３２ビットのデータがスタック領域の０ｘ００７Ｆ１０アドレスに退避される。具体的には、３２ビットデータが１バイト（８ビット）毎に区切られ、アドレス０ｘ００７Ｆ１０〜０ｘ００７Ｆ１４に割り当てられた記憶領域２１１〜２１４にそれぞれ、ＰＣ[７：０]、ＰＣ[１５：８]、ＰＣ[２３：１６]、ＰＳＲ[７：０]が格納される。ここで、プログラムカウンタ２０の２４ビットと状態レジスタ１１０の８ビットを加えてもＲＡＭ２００の入力データバスの３２ビット幅以下となるように構成し、かつ、ワード境界（３２ビット境界）のアドレス０ｘ００７Ｆ１０を指定してワードアクセスをしているので、１クロックサイクルでのスタック領域２１０への退避を可能にしている。
【００７２】
２．マイクロコンピュータ
図７は、本実施の形態のマイクロコンピュータのハードウエアブロック図の一例である。
【００７３】
本マイクロコンピュータ７００は、ＣＰＵ５１０（本実施形態に係るマイクロプロセッサ）、キャッシュメモリ５２０、ＲＯＭ７１０、ＲＡＭ７２０、ＭＭＵ７３０、ＬＣＤコントローラ５３０、リセット回路５４０、プログラマブルタイマ５５０、リアルタイムクロック（ＲＴＣ）５６０、ＤＭＡコントローラ５７０、割り込みコントローラ５８０、通信制御回路５９０、バスコントローラ６００、Ａ／Ｄ変換器６１０、Ｄ／Ａ変換器６２０、入力ポート６３０、出力ポート６４０、Ｉ／Ｏポート６５０、クロック発生装置６６０、プリスケーラ６７０、クロック停止制御回路７４０及びそれらを接続する汎用バス６８０、専用バス７５０等、各種ピン６９０等を含む。
【００７４】
３．電子機器
図８に、本実施の形態の電子機器のブロック図の一例を示す。本電子機器８００は、マイクロコンピュータ（またはＡＳＩＣ）８１０、入力部８２０、メモリ８３０、電源生成部８４０、ＬＣＤ８５０、音出力部８６０を含む。
【００７５】
ここで、入力部８２０は、種々のデータを入力するためのものである。マイクロコンピュータ８１０は、この入力部８２０により入力されたデータに基づいて種々の処理を行うことになる。メモリ８３０は、マイクロコンピュータ８１０などの作業領域となるものである。電源生成部８４０は、電子機器８００で使用される各種電源を生成するためのものである。ＬＣＤ８５０は、電子機器が表示する各種の画像（文字、アイコン、グラフィック等）を出力するためのものである。
【００７６】
音出力部８６０は、電子機器８００が出力する各種の音（音声、ゲーム音等）を出力するためのものであり、その機能は、スピーカなどのハードウェアにより実現できる。
【００７７】
図９（Ａ）に、電子機器の１つである携帯電話９５０の外観図の例を示す。この携帯電話９５０は、入力部として機能するダイヤルボタン９５２や、電話番号や名前やアイコンなどを表示するＬＣＤ９５４や、音出力部として機能し音声を出力するスピーカ９５６を備える。
【００７８】
図９（Ｂ）に、電子機器の１つである携帯型ゲーム装置９６０の外観図の例を示す。この携帯型ゲーム装置９６０は、入力部として機能する操作ボタン９６２、十字キー９６４や、ゲーム画像を表示するＬＣＤ９６６や、音出力部として機能しゲーム音を出力するスピーカ９６８を備える。
【００７９】
図９（Ｃ）に、電子機器の１つであるパーソナルコンピュータ９７０の外観図の例を示す。このパーソナルコンピュータ９７０は、入力部として機能するキーボード９７２や、文字、数字、グラフィックなどを表示するＬＣＤ９７４、音出力部９７６を備える。
【００８０】
本実施の形態のマイクロコンピュータを図９（Ａ）〜図９（Ｃ）の電子機器に組みむことにより、低価格でプログラムの応答性の高い電子機器を短期間で提供することができる。
【００８１】
なお、本実施形態を利用できる電子機器としては、図９（Ａ）、（Ｂ）、（Ｃ）に示すもの以外にも、携帯型情報端末、ページャー、電子卓上計算機、タッチパネルを備えた装置、プロジェクタ、ワードプロセッサ、ビューファインダ型又はモニタ直視型のビデオテープレコーダ、カーナビゲーション装置等のＬＣＤを使用する種々の電子機器を考えることができる
なお、本発明は本実施形態に限定されず、本発明の要旨の範囲内で種々の変形実施が可能である。
【００８２】
例えば、図１で説明した本発明に係るマイクロプロセッサの一部の構成は、他の構成とすることもできる。例えば、マイクロプロセッサ１０に、乗算等の複雑な計算を高速に実行するコプロセッサが接続されるような場合、セレクタ５４の入力にコプロセッサの出力を接続する構成であってもよいし、パイプラインレジスタ２、３（７０、８０）の出力をコプロセッサの各データ入力に接続する構成であってもよい。
【００８３】
また、例えば、パイプラインレジスタ４（第４のパイプラインレジスタ）を追加し、パイプラインレジスタ２（７０）をＡＬＵ９０の入力データの設定用に専用に使用し、パイプラインレジスタ４をＲＡＭ２００のアドレス設定用に専用に使用する構成にしてもよい。その場合は、図５の時刻Ｔ４において、パイプラインレジスタ２（７０）にプログラムカウンタ２０の値を格納する代わりに、パイプラインレジスタ４にプログラムカウンタ２０の値を格納するように変更し、時刻Ｔ５において、パイプラインレジスタ２（７０）の値をスタック領域に退避する代わりに、パイプラインレジスタ４の値をスタック領域に退避するように変更すれば、図５の説明を同様に適用することができる。
【００８４】
また、例えば、セレクタ６６の一方の入力に、プログラムカウンタ２０の出力の代わりにインクリメンタ４０の出力を接続してもよい。その場合は、図５の時刻Ｔ４において、パイプラインレジスタ２（７０）にプログラムカウンタ２０の値を格納する代わりに、インクリメンタ４０の出力値を格納するように変更すれば、図５の説明を同様に適用することができる。
【００８５】
また、例えば、割り込み命令の第１の命令実行ステージにおいて、ＡＬＵ９０にベクタアドレスを生成させるようにしてもよい。例えば、パイプラインレジスタ２（７０）の出力とＡＬＵ９０の第１の入力の間に２ｔｏ１セレクタを挿入し、２ｔｏ１セレクタの一方の入力にはパイプラインレジスタ２（７０）の出力を接続し、２ｔｏ１セレクタの他方の入力にはＴＴＢＲレジスタ１２０の出力を接続する。さらに、パイプラインレジスタ３（８０）の出力とＡＬＵ９０の第２の入力の間にも２ｔｏ１セレクタを挿入し、２ｔｏ１セレクタの一方の入力にはパイプラインレジスタ３（８０）の出力を接続し、２ｔｏ１セレクタの他方の入力にはベクタコード３１２を接続する。この場合、例えば、図５の時刻Ｔ２〜Ｔ３において、パイプライン制御部３００（制御信号生成部３２０）は、これら２つの２ｔｏ１セレクタがそれぞれ、ＴＴＢＲレジスタ１２０の出力及びベクタコード３１２を選択するように選択信号を生成し、ＡＬＵ９０が加算を実行するように制御信号を生成し、ＡＬＵ９０の出力（ベクタアドレス）がパイプラインレジスタ１（６０）の入力に伝播するようにセレクタ５４、７６の各選択信号を生成するようにしてもよい。また、時刻Ｔ３〜Ｔ４において、パイプライン制御部３００（制御信号生成部３２０）は、これら２つの２ｔｏ１セレクタがそれぞれ、パイプラインレジスタ２、３（７０、８０）を選択するように選択信号を生成し、ＡＬＵ９０が減算を実行するように制御信号を生成するようにしてもよい。
【００８６】
また、図５では本発明に係るマイクロプロセッサがソフトウェア割り込みを実行する場合の動作を説明したが、ハードウェア割り込みを実行する場合も同様に適用することができる。ハードウェア割り込みを実行する場合は、時刻Ｔ１において、ハードウェア割り込みの発生を検出する処理を追加し、時刻Ｔ１〜Ｔ２の命令フェッチステージにおいて、ＲＯＭ３０から割り込み命令を読み出す処理を、割り込み命令生成部が割り込み要因ＩＮＴ０〜ＩＮＴ３１を埋め込んだ割り込み命令の命令コードを生成する処理に変更すれば、時刻Ｔ２以降の処理を同様に適用することができる。
【００８７】
本発明は、実施の形態で説明した構成と実質的に同一の構成（例えば、機能、方法及び結果が同一の構成、あるいは目的及び効果が同一の構成）を含む。また、本発明は、実施の形態で説明した構成の本質的でない部分を置き換えた構成を含む。また、本発明は、実施の形態で説明した構成と同一の作用効果を奏する構成又は同一の目的を達成することができる構成を含む。また、本発明は、実施の形態で説明した構成に公知技術を付加した構成を含む。
【図面の簡単な説明】
【００８８】
【図１】本実施形態に係るマイクロプロセッサの一部の構成例を説明するための図。
【図２】状態レジスタの構成例を説明するための図。
【図３】ベクタテーブルの構成例を説明するための図。
【図４】割り込み命令の命令コードの構成例を説明するための図。
【図５】本実施形態に係るマイクロプロセッサがソフトウェア割り込みを実行する場合の動作を説明するための図。
【図６】割り込み実行時におけるプログラムカウンタ及び状態レジスタのスタック領域への退避動作を説明するための図。
【図７】本実施の形態のマイクロコンピュータのハードウエアブロック図の一例である。
【図８】集積回路装置を含む電子機器のブロック図の一例を示す。
【図９】図９（Ａ）（Ｂ）（Ｃ）は、種々の電子機器の外観図の例である。
【符号の説明】
【００８９】
１０  マイクロプロセッサ、２０  プログラムカウンタ、２４  セレクタ、３０  ＲＯＭ、３２  命令コード、４０  インクリメンタ、５０  スタックポインタ、５４  セレクタ、６０  パイプラインレジスタ１、６４  セレクタ、６６  セレクタ、７０  パイプラインレジスタ２、７４  セレクタ、７６  セレクタ、８０  パイプラインレジスタ３、８４  セレクタ、９０  ＡＬＵ（算術演算ユニット）、１００  即値生成部、１１０  状態レジスタ、１２０  ＴＴＢＲ（Trap Table base Register）レジスタ、１３０  割り込み命令生成部、１３２  割り込み命令コード、１４０  命令フェッチレジスタ、１４２  命令コード、１４４  セレクタ、１５０  汎用データバス、２００  ＲＡＭ、２１０  スタック領域、２２０  ベクタテーブル、３００  パイプライン制御部、３１０  デコード処理部、３１２  ベクタコード、３２０  制御信号生成部、３２２−１〜ｍ  制御信号、５１０  ＣＰＵ、５２０  キャッシュメモリ、５３０  ＬＣＤコントローラ、５４０  リセット回路、５５０  プログラマブルタイマ、５６０  リアルタイムクロック（ＲＴＣ）、５７０  ＤＭＡコントローラ兼バスＩ／Ｆ、５８０  割り込みコントローラ、５９０  通信制御回路（シリアルインターフェース）、６００  バスコントローラ、６１０  Ａ／Ｄ変換器、６２０  Ｄ／Ａ変換器、６３０  入力ポート、６４０  出力ポート、６５０  Ｉ／Ｏポート、６６０  クロック発生装置（ＰＬＬ）、６７０  プリスケーラ、６８０  汎用バス、６９０  各種ピン、７００  マイクロコンピュータ、７１０  ＲＯＭ、７２０  ＲＡＭ、７３０  ＭＭＵ、７４０  クロック停止制御回路、７５０  専用バス、８００  電子機器、８１０  マイクロコンピュータ（ＡＳＩＣ）、８２０  入力部、８３０  メモリ、８４０  電源生成部、８５０  ＬＣＤ、８６０  音出力部、９５０  携帯電話、９５２  ダイヤルボタン、９５４  ＬＣＤ、９５６  スピーカ、９６０  携帯型ゲーム装置、９６２  操作ボタン、９６４  十字キー、９６６  ＬＣＤ、９６８  スピーカ、９７０  パーソナルコンピュータ、９７２  キーボード、９７４  ＬＣＤ、９７６  音出力部
【図１】
2008262399.tif 000003
【図２】
2008262399.tif 000004
【図３】
2008262399.tif 000005
【図４】
2008262399.tif 000006
【図５】
2008262399.tif 000007
【図６】
2008262399.tif 000008
【図７】
2008262399.tif 000009
【図８】
2008262399.tif 000010
【図９】
2008262399.tif 000011