(57)【要約】【課題】タスクスイッチを伴う場合とそうでない場合の何れに対しても割り込みからの復帰を円滑に行なう。【解決手段】中央処理装置は、割り込み例外処理の発生に応答してレジスタバンクへの退避処理を開始する。割り込み処理から復帰するとき、中央処理装置は、レジスタ復帰命令（ＲＥＳＢＡＮＫ命令）を実行し、レジスタバンクからレジスタセットに記憶情報を復帰する。このとき、割り込み処理からの復帰先がタスクスイッチにより別のタスクにされる場合、ＯＳにより、中央処理装置はスイッチ前のタスクの汎用レジスタをＯＳの管理領域に保存し、スイッチ後のタスクに関する保存データをＯＳの管理領域からレジスタセットに復帰する。この後、中央処理装置は、スタック領域に格納されているプログラムカウンタの値とステータスレジスタの値をそれぞれ復帰させてスイッチ先のプログラム実行処理を開始可能にするリターン命令（ＲＴＥ命令）を実行する。【選択図】図１０
2007317232.tif 000002
【特許請求の範囲】
【請求項１】
所定のレジスタセットと複数のレジスタバンクを利用して命令を実行するデータ処理装置であって、
前記複数のレジスタバンクは割込み発生時に前記所定のレジスタセットが保有する記憶情報の退避に利用され、
前記レジスタバンクへの退避処理は、割込み処理ルーチンの先頭命令のフェッチ前に開始され、
前記データ処理装置の命令セットは、最後に退避されたレジスタバンクから記憶情報を前記所定のレジスタセットに復帰させるレジスタ復帰命令と、割り込み例外処理でスタック領域に退避したプログラムカウンタの値とステータスレジスタの値をそれぞれ復帰させて元のプログラム実行処理に復帰させるリターン命令と、を別々に有することを特徴とするデータ処理装置。
【請求項２】
さらに、レジスタバンクに退避されたレジスタセットの数を示すバンク番号レジスタを有し、
前記割込発生時にレジスタバンクへの退避処理を実行して前記バンク番号レジスタへ１加算し、前記レジスタ復帰命令の実行により前記バンク番号レジスタを１減算し、前記バンク番号レジスタで示されるレジスタバンクからレジスタセットデータを復帰させることを特徴とする請求項１記載のデータ処理装置。
【請求項３】
さらに、前記所定のレジスタセットと前記複数のレジスタバンクを接続する専用バスを有し、
前記専用バスは、複数のレジスタを並列に転送可能なビット幅を有し、前記レジスタバンクへの退避処理時にレジスタ情報を転送し、前記レジスタ復帰命令実行時に、レジスタバンクに退避された情報を所定のレジスタセットに復帰するための転送が可能であり、
前記データ処理装置の内部に配置される内部メモリに割り当てられる前記スタック領域へは、内部バスを介して退避および復帰転送が行われることを特徴とする請求項２記載のデータ処理装置。
【請求項４】
所定のレジスタセットを有する中央処理装置と、
前記所定のレジスタセットに応ずる複数のレジスタバンクと有し、
前記複数のレジスタバンクは前記所定のレジスタセットが保有する記憶情報の退避に利用され、
前記退避処理は、前記中央処理装置による割込処理ルーチンの先頭命令のフェッチ前に開始され、
前記中央処理装置の命令セットには、最後に退避されたレジスタバンクから記憶情報を前記所定のレジスタセットに復帰させるレジスタ復帰命令と、割り込み例外処理でスタック領域に退避したプログラムカウンタの値とステータスレジスタの値をそれぞれ復帰させて元のプログラム実行処理に復帰させるリターン命令と、を別々に有することを特徴とするデータ処理装置。
【請求項５】
前記データ処理装置は、割込み例外処理を用いたタスクスイッチに際して、割り込み例外処理からの復帰において、前記レジスタ復帰命令を実行してスイッチ元タスクにおけるレジスタバンクのデータをレジスタセットに復帰し、復帰データをＯＳが管理するＯＳ内部テーブルに保存し、スイッチ先タスクのレジスタセットデータをＯＳ内部テーブルから前記所定のレジスタセットに復帰し、前記リターン命令を実行してスイッチ先タスクのプログラム実行処理に移行することを特徴とする請求項４記載のデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、レジスタバンクを有するデータ処理装置、更には、割り込み例外（割り込み及び例外を総称する）処理やタスクスイッチに伴うレジスタセットの退避及び復帰に関し、例えばシングルチップマイクロコンピュータに適用して有効な技術に関する。
【背景技術】
【０００２】
割り込み例外処理、或はマルチタスク環境下でタスク切換え（タスクスイッチ）が行なわれるとき、元の状態に復帰可能なように、その時の汎用レジスタやステータスレジスタ等の所定のレジスタセットに対する退避が行なわれる。退避先として、外部メモリ等に割当てられるスタック領域を利用することも可能であるが、レジスタセットの退避及び復帰を高速化するためにレジスタバンクを用いることができる。レジスタバンク方式を利用することにより割込み応答時間の短縮が可能になる。
【０００３】
特許文献１には、汎用レジスタを内蔵ＲＡＭ（ランダム・アクセス・メモリ）でバンク構成とし、そのための専用バスを設けたシングルチップマイクロコンピュータについて記載がある。特許文献２にはレジスタファイルと内蔵ＲＡＭの間に専用バスを設けたレジスタバンク構成の情報処理装置が記載される。特許文献３にはレジスタファイル構成として内蔵ＲＡＭとの間に専用のバスを設けた拡張中央処理装置について記載がある。
【０００４】
【特許文献１】特開平０５−１６５６４１号公報
【特許文献２】特開平０６−３０９１６９号公報
【特許文献３】特開平０５−２６５７５３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明者は割込み応答時間の短縮化を契機としてレジスタバンク方式について検討した。先ず、レジスタバンクに対するオーバーフローの考慮である。割り込み発生時、割り込み処理ルーチンの中でも、割り込み要因フラグクリアなどの緊急度の高いクリティカルなセクションだけその割り込みレベルでマスクし、その処理が終了した後は同じあるいは低いレベルの割り込みの再入力を受け付ける場合がある。このような、割り込みレベルを意図的に低くして割り込み処理を行う場合には、割り込みレベル数以上の割り込みが発生するため、割り込みレベル数分用意してあるレジスタバンクがオーバーフローしてしまう。そのため、オーバーフロー時の対策を施していないＣＰＵ（中央処理装置）では不所望にその動作が停止する虞がある。
【０００６】
第２は、ＯＳ（オペレーティング・システム）を用いる場合に、割り込みでタスクスイッチを行なう場合についての考慮である。即ち、タスクスイッチに際して、タスク切換え前のレジスタセットのデータをＯＳ内部テーブルに退避した後、切換え後のタスクに関するレジスタセットのデータをＯＳ内部テーブルからレジスタセットに回復することが必要である。そうしなければ、再び元のタスクに戻ることができない。
【０００７】
本発明はデータ処理装置におけるレジスタバンクの退避・復帰に関し、動作不良の虞を回避する技術を提供することにある。
【０００８】
本発明の具体的な目的は、レジスタバンクのオーバーフローによる不所望な動作停止を生ずることのないデータ処理装置を提供することにある。
【０００９】
本発明の別の具体的な目的は、タスクスイッチを伴う場合、タスクスイッチを伴わない場合の何れに対しても割り込みからの復帰を円滑に、且つ無駄無く行なうことができ、マルチタスク処理への適応性に優れたデータ処理装置を提供することにある。
【００１０】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１１】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【００１２】
〔１〕ステータスレジスタと複数のレジスタバンクを利用して命令を実行するデータ処理装置において、前記ステータスレジスタは前記複数のレジスタバンクのオーバーフローを示すためのオーバーフローフラグを有する。
【００１３】
本発明の更に具体的な形態として、データ処理装置は、ステータスレジスタと所定のレジスタセットを有する中央処理装置と、前記所定のレジスタセットに応ずる複数のレジスタバンクとを有し、前記複数のレジスタバンクは割り込み発生時に前記所定のレジスタセットが保有する記憶情報の退避に利用され、前記ステータスレジスタは複数のレジスタバンクのオーバーフローを示すためのオーバーフローフラグを有する。
【００１４】
上記オーバーフローフラグを設けることにより、レジスタセットへのデータ復帰処理では、レジスタバンクのオーバーフローを認識することができる。
【００１５】
例えば、レジスタバンクの全てのバンクに退避が行われている状態で割り込み例外（割り込み要求）が発生し、受け付けられた割り込み例外がレジスタバンクの使用を許可されているとき、中央処理装置は、スタック領域にレジスタセットのデータを退避させ、前記オーバーフローフラグにオーバーフロー状態を反映させる。そして、オーバーフローフラグがオーバーフロー状態になっているとき、レジスタバンクからレジスタセットへのデータ復帰が指示されると、中央処理装置はスタック領域からレジスタセットにデータを復帰する。
【００１６】
ここで注意すべきは、割り込み例外処理においては、少なくともオーバーフローフラグを持つステータスレジスタとプログラムカウンタをスタック領域に退避する動作を行い、かつ、割り込み復帰命令（ＲＴＥ命令）は、前記スタック領域から、プログラムカウンタとステータスレジスタの値を復帰する動作を行うことが条件である。すなわち、割り込みサービス処理の多重処理を考えた場合でも、どの割り込みサービスルーチン中からでも、ステータスレジスタ中のオーバーフローフラグ（オーバーフロービット）を観測すれば、当該割り込みによってレジスタバンクがオーバーフローしたかどうかを知ることができる。
【００１７】
ただし、ＯＳによるタスク切換えを割り込みで行っている場合は、割り込みサービスルーチンからの復帰命令（ＲＴＥ命令）の実行前に、切換え先タスクに対応するステータスレジスタ値を復帰値が置かれるスタック領域にあらかじめ準備しておく必要がある。しかし、これはＯＳでのタスク切換え処理での必然の動作であり、今回の発明によって余分に増える処理とはならない。
【００１８】
これにより、レジスタバンクのオーバーフローによるデータ処理装置の不所望な動作停止を抑止することができる。
【００１９】
レジスタバンクの全てのバンクに退避が行われている状態で割り込み例外が発生し、受け付けられた割り込み例外がレジスタバンクの使用を許可されていないときは、中央処理装置は所定の例外処理ルーチンを実行すればよい。
【００２０】
前記複数のレジスタバンクをＲＡＭで構成し、前記ＲＡＭと所定のレジスタセットの接続に専用化されたバスを採用し、前記バスには前記レジスタセットに含まれる複数のレジスタ単位で並列にデータ転送可能なビット数を与える。専用化されたバスによるレジスタセットの待避処理に並行して割込み例外処理の実行が可能になり、割り込み応答速度を更に高速化可能になる。要するに、複数レジスタ同時退避により、割り込み処理時間（割り込み応答性能・割り込み復帰性能）を向上させることができる。バンク領域を専用バス接続し並列処理することにより、見かけ上レジスタ退避・復帰処理オーバヘッドを低減する事ができる。
【００２１】
〔２〕割り込み例外処理を利用してＯＳによるタスクスイッチを行なう場合に着目する。前記中央処理装置は、割り込み例外処理の発生に応答して前記レジスタバンクへの退避処理を開始する。割り込みサービスルーチンから復帰するとき、前記中央処理装置は、レジスタ復帰命令（ＲＥＳＢＡＮＫ命令）を実行し、最後に退避されたレジスタバンクから前記所定のレジスタセットに記憶情報を復帰する。このとき、割り込みサービスルーチンからの復帰先が別のタスクである場合、すなわちタスクスイッチを行なう場合、ＯＳにより、中央処理装置はスイッチ前のタスクの汎用レジスタをＯＳの管理領域に保存し、スイッチ後のタスクに関する保存データをＯＳの管理領域からレジスタセットに復帰する。この後、中央処理装置は、ＯＳによって調整された、スタック領域に格納されているプログラムカウンタの値とステータスレジスタの値をそれぞれ復帰させてスイッチ先のプログラム実行処理を開始可能にするリターン命令（ＲＴＥ命令）を実行する。ここで重要なことは、割り込みによりレジスタバンクへレジスタ群の値を退避する中央処理装置において、ＯＳによるタスク切換えを行う場合は、その中央処理装置は、前記レジスタ復帰命令（ＲＥＳＢＡＮＫ命令）とリターン命令（ＲＴＥ命令）を別々に持つ必要がある。タスクスイッチを全く伴わなければ、上記レジスタ回復命令の処理に続くＯＳによるタスクスイッチ用の処理は不要であり、前記レジスタ復帰命令の処理とリターン命令の処理を分ける必要がなく、割り込みサービスルーチンからの復帰命令（ＲＴＥ命令）において、レジスタバンクからの復帰動作も一括して実施すればいい。しかし前述のとおり双方の命令を一つの命令にすると、タスク切換えを行なうことが困難になる。
【００２２】
本発明の更に具体的な形態では、前記データ処理装置はＯＳの制御に基づいて割り込み例外処理が可能にされ、また、割り込み例外処理を用いてタスクスイッチが可能にされる。割り込み例外処理では、前記所定のレジスタセットをレジスタバンクに退避して、割り込み例外処理ルーチン（割り込みサービスルーチン）を実行し、割り込み例外処理ルーチンからの復帰において、前記レジスタ復帰命令（ＲＥＳＢＡＮＫ命令）を実行して最後の退避に利用されたレジスタバンクのデータをレジスタセットに回復し、前記リターン命令（ＲＴＥ命令）を実行して元のプログラム実行処理に復帰する。割り込み例外処理を用いたタスクスイッチでは、割り込み例外処理ルーチンからの復帰において、前記レジスタ復帰命令を実行してスイッチ元タスクにおけるレジスタバンクのデータをレジスタセットに復帰し、復帰データをＯＳが管理する領域に保存し、スイッチ先タスクのレジスタセットデータをＯＳ管理領域から前記所定のレジスタセットに回復し、前記リターン命令を実行して、スイッチ先タスクのプログラム実行処理に移行する。
【発明の効果】
【００２３】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記のとおりである。
【００２４】
すなわち、レジスタバンクのオーバーフローフラグを採用するから、レジスタセットへのデータ復帰処理では、レジスタバンクのオーバーフローを認識することができる。これにより、レジスタバンクのオーバーフローによるデータ処理装置の不所望な動作停止を抑止することができる。
【００２５】
バンク復帰命令をリターン命令とは独立のバンク回復専用命令とするから、タスクスイッチを伴う場合、タスクスイッチを伴わない場合の何れに対しても割り込みからの復帰を円滑に、且つ無駄無く行なうことができ、マルチタスク処理への適応性に優れる。
【００２６】
複数レジスタ同時退避により、割り込み処理時間を向上させることができる。バンク領域を専用バス接続し並列処理することにより、見かけ上レジスタ退避・復帰処理のオーバヘッドを低減する事ができる。
【発明を実施するための最良の形態】
【００２７】
《レジスタバンク》
図１には本発明の一例に係るデータプロセッサのブロック図が例示される。同図に示されるデータプロセッサ１は、例えばＣＭＯＳ集積回路製造技術により単結晶シリコンのような１個の半導体基板（半導体チップ）に形成されている。
【００２８】
同図に示されるデータプロセッサ１は、代表的に示されたＣＰＵ２、バンクメモリ３、割り込みコントローラ（ＩＮＴＣ）４、バスステートコントローラ（ＢＳＣ）５、ＲＯＭ（リード・オンリ・メモリ）６、及びＲＡＭ７を有して成る。
【００２９】
ＣＰＵ２はデータバス１０及びデータアドレスバス１１を介してＲＡＭ７に、命令データバス１２及び命令アドレスバス１３を介してＲＯＭ６に接続される。ＲＡＭ７はＣＰＵ２のワーク領域もしくはデータ一時記憶領域とされる。ＲＯＭ６はＣＰＵ２の動作プログラムとして例えばＯＳや制御プログラムが格納される。前記バス１０〜１３はバスステートコントローラ５を介して周辺データバス１４及び周辺アドレスバス１５にインタフェースされ、ここには割り込みコントローラ４、Ｉ／Ｏポート１６などの外部入出力回路が設けられる。前記バンクメモリ３は複数のレジスタバンクＲＢＫ０〜ＲＢＫｉを構成し、レジスタバンク専用バス１７でＣＰＵ２に接続される。前記Ｉ／Ｏポート１６は図示を省略するデータプロセッサ外部のバスと接続される。
【００３０】
ＣＰＵ２は、命令レジスタ２０にフェッチした命令を命令デコーダ２１で解読し、解読結果にしたがってレジスタ回路２３、演算回路２４、アドレス演算回路２５及びシステムコントローラ２６などを制御して、その命令を実行する。アドレス演算回路２５は、プログラムカウンタ（ＰＣ）２７が保有する命令アドレスやレジスタ回路２３が保有するアドレス情報などに従って、命令アドレスを命令アドレスバス１３に、オペランドアドレスをデータアドレスバス１１に出力する。前記割り込みコントローラ４はデータプロセッサの内外からの割り込み要求を入力し、割り込み優先レベルなどにしたがって割込み要求を調停し、割込み要求を受付けるとＣＰＵ２に割り込み信号ＩＲＱをアサートする。割り込み信号ＩＲＱとしては、割り込みベクタ番号（ＩＶＮ）の情報を含む複数の信号線からなる形態が考えられる。
【００３１】
演算回路２４は夫々図示を省略する算術論理演算器、シフタ、乗算器等によって構成される。レジスタ回路２３は、汎用レジスタＲ０〜Ｒ１５（ＳＰ）、乗算レジスタＭＡＣＨ、ＭＡＣＬ、プロシージャレジスタＰＲ、グローバルベースレジスタＧＢＲ、リードデータバッファレジスタＲＢＲ、ライトデータバッファレジスタＷＤＲ、及びステータスレジスタＳＲ等を有する。
【００３２】
前記汎用レジスタＲ０〜Ｒ１５は、アドレスレジスタとしてもデータレジスタとしても使用することができる。汎用レジスタＲ１５には、汎用レジスタとしての機能に加えて、スタックポインタＳＰとしての機能が割当てられる。割り込み時やサブルーチンコール時の戻り先アドレスや汎用レジスタなどに対する退避、復帰は、スタックポインタＳＰを用いてスタック領域との間で行なわれる。前記スタックポインタＳＰはスタック領域のスタック可能なアドレスを指す。スタック領域は例えば前記ＲＡＭ７、又は前記Ｉ／Ｏポート１６に接続される外部バス上のメモリ（図示せず）に割当てられる。
【００３３】
プログラムカウンタ（ＰＣ）２７はＣＰＵ２が実行する命令のアドレスを示す。ステータスレジスタＳＲは、ＣＰＵ２の状態を示すレジスタである。プロシージャレジスタＰＲはサブルーチンコール時に戻り先アドレスを格納する。
【００３４】
図２にはレジスタバンクと退避・復帰対象のレジスタセットが例示される。ここでは、割り込み処理におけるレジスタ退避・復帰を、従来のスタック領域ではなく、レジスタ退避専用バンク領域としてレジスタバンクＲＢＫ０〜ＲＢＫｉを利用する。レジスタバンクＲＢＫ０〜ＲＢＫｉはバンクメモリ３のメモリセルアレイに割当てられる。バンクメモリ３は例えばＳＲＡＭ（スタティック・ランダム・アクセス・メモリ）から構成される。
【００３５】
退避・復帰対象レジスタは、割り込みによってその内容が破壊される虞のある所定のレジスタセットとされ、例えば、汎用レジスタＲ０〜Ｒ１４、グローバルベースレジスタＧＢＲ、乗算レジスタＭＡＣＨ、ＭＡＣＬ、プロシージャレジスタＰＲ、およびデバック情報としての当該割り込みに対応するベクタ番号（ＩＶＮ）とされる。レジスタバンクＲＢＫ０〜ＲＢＫｉには夫々前記レジスタセットを保持することができる記憶容量が割当てられる。
【００３６】
レジスタバンクＲＢＫ０〜ＲＢＫｉの数は割り込みがネスト（割り込みが多重）する度にレジスタ退避・復帰する必要があるため、最低限、割り込みレベル数分だけレジスタバンクを用意することが望ましい。例えば割込み優先レベルが１５段階あれば、レジスタバンクＲＢＫ０〜ＲＢＫｉは１５個備えられるべきである。
【００３７】
前記所定のレジスタセットＲ０〜Ｒ１４、ＧＢＲ、ＭＡＣＨ、ＭＡＣＬ、ＰＲ、及びベクタ番号ＩＶＮは割り込み発生時のＣＰＵ処理で自動的に所定のレジスタバンクにストアされる。レジスタバンクにストアされた所定のレジスタセットのデータ（レジスタセットデータ）をレジスタセットに復帰する処理はＣＰＵ２が所定のレジスタ復帰命令を実行する事により行なわれる。ここでは所定のレジスタ復帰命令としてＲＥＳＢＡＮＫ命令を採用する。
【００３８】
《退避・復帰用の制御レジスタ》
図３には所定のレジスタセットに対する退避・復帰用の制御レジスタの一例が示される。割り込みコントローラ４にはバンクコントロールレジスタＩＢＣＲ、バンク番号レジスタＩＢＮＲが設けられる。バンクコントロールレジスタＩＢＣＲは割り込み優先レベル或は割込要因（割り込み要求）に対して、レジスタバンクＲＢＫ０〜ＲＢＫｉ使用の許可／禁止を設定するレジスタである。ここでは、割り込み優先レベルが１〜１５とされ、レベルが大きいほど割り込み優先度が高いとされ、０はマスクされる。さらに、その夫々に対して、レジスタバンク使用の許可／禁止を設定するＥ１〜Ｅ１５がビット１〜ビット１５に割当てられる。“０”は使用禁止、“１”は使用許可を意味する。ビット０は予約ビットとされる。
【００３９】
図３に示されるバンク番号レジスタＩＢＮＲは、マスタイネーブルＭＥ、バンク番号ＢＮのフィールドを有する。マスタイネーブルＭＥの“００”は全ての割り込みでレジスタバンクの使用を禁止することを意味する。このとき、バンクコントロールレジスタＩＢＣＲの状態は無視される。マスタイネーブルＭＥの“０１”はＮＭＩ（ノン・マスカブル・インタラプト）以外の全ての割り込みでバンク使用を許可することを意味する。マスタイネーブルＭＥが“１１”のときはレジスタバンクの使用はバンクコントロールレジスタＩＢＣＲの設定に従う。マスタイネーブルＭＥの“１０”は予約とされる。バンク番号ＢＮは、次に退避されるバンク番号を示す。
【００４０】
《レジスタバンクのＦＩＬＯ制御》
前記レジスタバンクＲＢＫ０〜ＲＢＫｉの動作形態はＦＩＬＯ（ファーストイン・ラストアウト）動作、即ち先入れ・後出し動作される。レジスタバンクＲＢＫ０〜ＲＢＫｉのＦＩＬＯ動作にはシステムコントローラ２６及び命令デコーダ２１の制御が介在される。前記バンク番号ＢＮはシステムコントローラ２６に与えられる。システムコントローラ２６は割り込みコントローラ４から割込み信号ＩＲＱが与えられ、命令デコーダ２１から所定の命令デコード信号が与えられる。その他に図示を省略するモード信号などが与えられる。システムコントローラ２６は命令実行のフロー制御、動作モード制御、バンクメモリ３のアクセス制御等を行なうロジック回路とされる。
【００４１】
図４にはレジスタバンクＲＢＫ０〜ＲＢＫｉの動作形態が示される。ここでは、システムコントローラ２６によるバンクメモリ３のＦＩＬＯアクセス制御を説明する。リセット直後のバンク番号ＢＮの値は０である。レジスタバンクを使用する割り込みが受付けられると、システムコントローラ２６がバンク番号ＢＮが示すバンクにレジスタセットの退避を行ない、バンク番号ＢＮを＋１する。ＲＥＳＢＡＮＫ命令が実行されると、システムコントローラ２６はバンク番号ＢＮを−１した後、バンク番号ＢＮが示すレジスタバンクから前記所定のレジスタセットに対するレジスタセットデータの回復（データ復帰）を行なう。ここではバンク番号ＢＮに対するインクリメント及びデクリメントの演算は割り込みコントローラ４の内部でインクリメンタ・デクリメンタ２９により行なわれる。
【００４２】
《ＣＰＵ処理とレジスタ退避処理の並列化》
図５には割り込み発生時のＣＰＵ例外処理と並行してレジスタ退避処理が可能にされる様子が例示される。前記所定のレジスタセットの各レジスタは例えば３２ビットとされる。このとき、レジスタバンク操作用の前記専用バス１７は、例えば４個のレジスタを並列に入出力可能な１２８ビットとされる。専用バス１７をそのようにワイドバス幅とすれば、複数レジスタを同時に転送可能となり、転送効率が上がる。レジスタバンク操作用のバス１７はそれに専用化されるから、ＣＰＵ２は他の処理と並行してレジスタセットに対する退避・復帰処理を行うことができる。割り込み発生時のＣＰＵ例外処理と並行してレジスタ退避処理を行い、見かけ上レジスタ退避によるオーバヘッドをゼロ若しくは大幅に低減することも可能である。図５では、レジスタセットの退避は、割り込み受付によって自動的に開始されるから、割り込みサービスルーチンの先頭命令が割り込みベクタに従ってフェッチされる前に開始され、割り込み応答性能は更に向上する。
【００４３】
図６には上記レジスタバンク方式による割り込み応答処理時間と割り込み復帰処理時間の一例が示される。図７にはその比較例としてレジスタバンクを採用せずデータ転送命令を用いてスタック領域との間で退避・復帰する場合の割り込み応答処理時間と割り込み復帰処理時間が示される。
【００４４】
《レジスタバンクのオーバーフロー処理》
次にレジスタバンクのオーバーフロー処理について説明する。レジスタバンクがオーバーフローしたことを検知可能にするため、ステータスレジスタＳＲに、レジスタバンクがオーバーフローしたことを示すオーバーフローフラグＢＯを設定する。図８にオーバーフローフラグＢＯが例示される。
【００４５】
レジスタバンクの全てのバンクに退避が行われている状態で割り込みが発生し、さらにＣＰＵ２で受け付けられた割り込みがレジスタバンクの使用を許可されている場合（レジスタバンクのオーバーフロー状態）、レジスタバンクの代わりにスタック領域に自動的にレジスタセットデータの退避を行なう。スタック領域への自動退避・復帰の動作は以下の通りである。
【００４６】
退避動作では、先ず、スタックポインタＳＰの値にしたがってステータスレジスタＳＲ、プログラムカウンタＰＣ、及び前記所定のレジスタセットＲ０〜Ｒ１４，ＧＢＲ，ＭＡＣＨ，ＭＡＣＬ，ＰＲをスタック領域に退避する。次にステータスレジスタＳＲのレジスタバンクオーバーフロービットＢＯを“１”にセットする。バンク番号レジスタＩＢＮＲのバンク番号ＢＮは最大値のまま変化させない。
【００４７】
復帰動作では、ステータスレジスタＳＲのレジスタバンクオーバーフロービットＢＯが“１”にセットされている状態で、バンク復帰命令ＲＥＳＢＡＮＫ命令が実行されると、次のように動作する。先ず、スタックポインタＳＰの値にしたがってスタック領域から所定のレジスタセットＲ０〜Ｒ１４，ＧＢＲ，ＭＡＣＨ，ＭＡＣＬ，ＰＲにデータを復帰する。バンク番号レジスタＩＢＮＲのバンク番号ＢＮは最大値のまま変化させない。
【００４８】
一方、レジスタバンクの全てのバンクに退避が行われている状態で割り込みが発生し、さらにＣＰＵ２で受け付けられた割り込みがレジスタバンクの使用を許可されていて、かつレジスタバンクエラー例外処理の発生を割り込みコントローラ内の所定の設定で選択していた場合、下記のレジスタバンクエラー例外処理が開始される。先ず、ステータスレジスタＳＲをスタック領域に退避する。次に、プログラムカウンタ（ＰＣ）２７をスタック領域に退避する。退避するプログラムカウンタ（ＰＣ）２７の値は、最後に実行した命令の次命令の先頭アドレスになっている。そして、発生したレジスタバンクエラーに対応する例外処理ベクタテーブルから例外サービスルーチンスタートアドレスを取り出し、そのアドレスからプログラムを実行する。この場合は、レジスタバンクへの退避は行われず、バンク番号ＢＮも変化しない。これは、レジスタバンクがオーバフローしていてそれを使うことができなかったことを検出して、必要な処理を採ることが要求されているアプリケーションを考慮したものである。所望の性能が得られないことの検出や、あるいは少なくともデバック時には有効と考えられる。
【００４９】
ところでレジスタバンク復帰命令（ＲＥＳＢＡＮＫ命令）を、レジスタバンクが空（ＢＮ＝０）のときに実行した場合も、レジスタバンクエラー例外処理を行う。これは明らかに異常動作であり、その検出を必要と考えたものである。
【００５０】
上記オーバーフローフラグＢＯを設けることにより、レジスタセットへのデータ復帰処理では、レジスタバンクのオーバーフローを認識することができる。これにより、レジスタバンクのオーバーフローによるデータ処理装置の不所望な動作停止を抑止することができる。
【００５１】
《タスクスイッチの考慮》
ＣＰＵ２がＯＳの管理の下でマルチタスク処理を行なう場合、図９に例示されるように、割り込み処理の後の復帰先は必ずしも割り込み発生元とはならない。ＯＳが管理するイベントの状況により、別のタスク（タスクＢ）に復帰する場合もある。
【００５２】
図１０にはタスクスイッチが行なわれるときの処理手順が示される。図１１には図１０の処理におけるレジスタセット、レジスタバンク、及びＯＳ内部テーブルの関係が例示される。図１０及び図１１を参照しながら、上記割り込みによるタスクスイッチについて考察する。前記ＣＰＵ２は、割り込み例外処理の発生に応答して前記レジスタバンクへの退避処理を開始する（Ｓ１）。割り込み例外処理後の割り込みサービスルーチンすなわちＯＳ処理内では、前記ＣＰＵ２は、最後に退避されたレジスタバンクから前記所定のレジスタセットに記憶情報を復帰させるＲＥＳＢＡＮＫ命令を実行する（Ｓ２）。このとき、ＯＳが管理するイベントの状況により、タスクスイッチを行なう場合、中央処理装置はスイッチ前のタスク（タスクＡ）のレジスタセットデータをＯＳ内部テーブルに保存し（Ｓ３）、スイッチ後のタスク（タスクＢ）に関するレジスタセットの保存データをＯＳ内部テーブルからレジスタセットに回復する（Ｓ４）。Ｓ３及びＳ４の処理はＯＳに基づく処理とされる。この後、ＣＰＵ２は、タスクＢとしての復帰先プログラムカウンタの値とステータスレジスタの値がＯＳによってスタック領域中に準備調整されてから、それらをスタック領域から復帰させてスイッチ先のプログラム実行処理に復帰可能にするリターン命令（ＲＴＥ命令）を実行する。中央処理装置は、前記ＲＥＳＢＡＮＫ命令（レジスタ回復命令）とＲＴＥ命令（リターン命令）を別々に持つ。これは、割り込み例外処理においてＯＳからの復帰はタスクスイッチを伴う場合があることを考慮している。タスクスイッチを伴わなければ、上記レジスタ回復命令の後に続くＯＳによるＳ３及びＳ４の処理は不要となり、前記レジスタ回復命令の処理とリターン命令の処理を分ける必要がなくなるが、双方の命令を一つの命令にすると、タスク切替えを行なうことが困難になり、オーバヘッドを生ずる。また、双方の命令を一つの命令にした場合、ＯＳによる処理内容に対応した動作を当該命令のパラメータで指示したりすることが必要になり、ＯＳ内部テーブルに対するアドレシングモード、タスクスイッチの有無による処理ルーチンの相違の指示等を特定しなければならず、パラメータが増え、命令が複雑化する。
【００５３】
前記ＲＥＳＢＡＮＫ命令（バンク復帰命令）をサブルーチンリターン命令のようなＲＴＥ命令とは独立のバンク回復専用命令とするから、タスクスイッチを伴う場合、タスクスイッチを伴わない場合の何れに対しても割り込みからの復帰を円滑に、且つ無駄無く行なうことができ、マルチタスク処理への適応性に優れる。
【００５４】
《レジスタバンク転送命令》
ＣＰＵ２の命令セットには図１２に示すように、レジスタバンク転送命令がある。レジスタバンク転送命令は、デバッグ用命令であり、レジスタバンクの任意のデータを汎用レジスタＲ０との間で転送する命令である。ＬＤＢＡＮＫ命令はＲｍが示すレジスタバンクアドレスからの４バイトデータをＲ０に転送する命令である。ＳＴＢＡＮＫ命令はＲ０をＲｎが示すレジスタバンクアドレスへ転送する命令である。
【００５５】
図１３にはレジスタバンク転送命令のアドレス（ＬＤＢＡＮＫはＲｍ、ＳＴＢＡＮＫはＲｎの値）と、レジスタバンクのエントリの対応を示す。アドレスの１５〜７ビット（ＢＮ）でバンク番号を指定し、アドレスの６〜２ビット（ＥＮ）でバンク内のエントリ（Ｒ０〜Ｒ１４、ＧＢＲ、ＭＡＣＨ、ＭＡＣＬ、ＰＲ、ＩＶＮ）を指定する。アドレスの３１〜１６ビットと１〜０ビットは全て０にされて利用される。
【００５６】
レジスタバンク転送命令により、一命令でレジスタバンクの任意のデータを転送する事が可能になる。
【００５７】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【００５８】
例えば、浮動小数点演算ユニット（ＦＰＵ）、ディジタル信号処理プロセッシングユニット（ＤＳＰ）といったコプロセッサレジスタもレジスタセットに含めて汎用レジスタ等と一緒に退避・復帰するようにしてもよい。割り込み処理でコプロセッサレジスタを使用する場合、これらのレジスタも同時退避・復帰できるようにすると、より性能が向上する。ただし、コプロセッサレジスタを使用しない割り込み処理の考慮や、より多くのバンク領域を用意する必要がある。コプロセッサレジスタの退避・復帰処理時間を削減することができる。
【００５９】
また、割り込み数分のバンク領域を確保できない場合、割り込み選択型レジスタバンクという方式を採ることも可能である。割り込み発生時、バンクに空きがなかった際はスタック領域を使用することになるが、割り込みネスト状況によっては高レベルの割り込みがバンクを使用できないという事態が発生し、リアルタイムシステムにおいては致命傷となる可能性がある。このため、バンクに空きがない場合には、バンクを使用する割り込みを選択できるようにして、リアルタイム性を確保する。バンク領域が制限されたマイクロコンピュータでの割り込み性能の改善に役立つ。
【００６０】
更に具体的には、割り込みレベル毎に、「バンク割り込み（必ずバンクを使用する割り込みレベル）」と「don't care割り込み（バンク、スタックどちらを使用しても良い割り込みレベル）」を静的に決定する。そして、割り込み発生時のバンク切り換え命令によって、発生した割り込みがバンク割り込みであればレジスタバンクを切り換える（例：カレントバンク０→１）。don't care割り込みであれば、「残りバンク数−残りバンク割り込み数」が１以上のときバンクを切り換え、０のときはカレントバンクの内容をスタックに退避することで、don't care割り込みもバンクを有効に活用する。レジスタ退避先が、バンクとスタックにまたがるため、CPUは、どのバンクを使用中に何回スタッキングがあったかを記憶しておき、バンク切り換え命令がその情報をもとにバンクを切り換え、スタック・ポップ（pop）を制御する。ただし、バンクとスタック制御が必要になるため、全割り込みバンク方式より性能は劣り、ＣＰＵのハードウェアも複雑になる。
【００６１】
また、割り込みだけでなく、全タスクにそれぞれレジスタバンクを設けることで、タスク切り換え時のレジスタ退避・回復処理を省く事ができる。タスクのレジスタ退避・復帰も高速化できる。ハードウェアはＯＳのタスクを認識できないため、どのタスクがどのバンクに割り当てられているかという情報をもとにバンク切り換えを行う必要がある。この方式の場合、上記同様、ＣＰＵのハードウェアが複雑になり、大容量バンクを必要とする。
【００６２】
また、ＲＡＭ領域とは異なる専用バスを用いた領域を設ける。命令の他の実行ステージと並列にメモリアクセス可能とし、見かけ上メモリアクセスオーバヘッドゼロとなる。本領域は、アドレス空間に割り当てられ、通常のメモリ領域と同様にアクセス可能とする。スタック専用メモリ領域によるレジスタ退避・復帰の高速化、割り込み処理及びタスク処理の性能向上を図ることができるが、ＲＡＭ兼用とすることで用途を広げることもできる。
【００６３】
また、レジスタバンクはＣＰＵ内のレジスタセットに対してＲＡＭ上に割当てられる回路に限定されない。概念としては、複数のレジスタセットを構成するレジスタファイルによって構成してもよい。
【図面の簡単な説明】
【００６４】
【図１】本発明の一例に係るデータプロセッサのブロック図である。
【図２】レジスタバンクと退避・復帰対象のレジスタセットを例示する説明図である。
【図３】所定のレジスタセットに対する退避・復帰用の制御レジスタの一例を示す説明図である。
【図４】レジスタバンクＲＢＫ０〜ＲＢＫｉの動作形態を例示する説明図である。
【図５】割り込み発生時のＣＰＵ処理と並行してレジスタ退避処理が可能にされる様子を例示するタイミングチャートである。
【図６】レジスタバンク方式による割り込み応答処理時間と割り込み復帰処理時間の一例を示す説明図である。
【図７】図６の比較例としてレジスタバンクを採用せずデータ転送命令を用いてスタック領域との間で退避・復帰する場合の割り込み応答処理時間と割り込み復帰処理時間を例示する説明図である。
【図８】ステータスレジスタに対するオーバーフローフラグの配置を示す説明図である。
【図９】ＣＰＵがＯＳの管理の下でマルチタスク処理を行なう場合に割り込み処理の後の復帰先は必ずしも割り込み発生元とはならず、タスクスイッチされる場合のあることを示す説明図である。
【図１０】タスクスイッチが行なわれるときの処理手順を例示する説明図である。
【図１１】図１０の処理におけるレジスタセット、レジスタバンク、及びＯＳ内部テーブルの関係を例示する説明図である。
【図１２】レジスタバンク転送命令の説明図である。
【図１３】レジスタバンク転送命令が指定するアドレスとレジスタバンクのエントリの対応を示す説明図である。
【符号の説明】
【００６５】
１  データプロセッサ
２  ＣＰＵ
３  バンクメモリ
ＲＢＫ０〜ＲＢＫｉ  レジスタバンク
４  割り込みコントローラ
ＩＲＱ  割り込み信号
ＩＢＣＲ  バンクコントロールレジスタ
ＩＢＮＲ  バンク番号レジスタ
ＢＮ  バンク番号
７  ＲＡＭ
１７  レジスタバンク専用バス
２１  命令デコーダ
２３  レジスタ回路
２６  システムコントローラ
２７  プログラムカウンタ（ＰＣ）
Ｒ０〜Ｒ１５  汎用レジスタ
ＳＰ  スタックポインタ
ＭＡＣＨ，ＭＡＣＬ  乗算レジスタ
ＰＲ  プロシージャレジスタ
ＧＢＲ  グローバルベースレジスタ
ＩＶＮ  割り込みベクタレジスタ
ＲＢＲ  リードバッファレジスタ
ＷＢＲ  ライトバッファレジスタ
ＳＲ  ステータスレジスタ
ＢＯ  オーバーフローフラグ
【図１】
2007317232.tif 000003
【図２】
2007317232.tif 000004
【図３】
2007317232.tif 000005
【図４】
2007317232.tif 000006
【図５】
2007317232.tif 000007
【図６】
2007317232.tif 000008
【図７】
2007317232.tif 000009
【図８】
2007317232.tif 000010
【図９】
2007317232.tif 000011
【図１０】
2007317232.tif 000012
【図１１】
2007317232.tif 000013
【図１２】
2007317232.tif 000014
【図１３】
2007317232.tif 000015