(57)【特許請求の範囲】
【請求項１】
複数のステージから構成され、複数の前記ステージにおいて複数の命令をずらして順次実行することにより、同時に並行してデータを演算する少なくとも１系統の演算手段と、
前記演算手段を構成する複数の前記ステージにおける状態を、複数のタスクに対応させて記憶するために、前記ステージごとに対応付けて、前記演算手段の1系統に対して少なくとも２系統設けられる記憶手段と、
第１のタスクが実行される場合、複数の前記ステージにおけるそれぞれの状態を記憶するものとして、少なくとも２系統設けられる前記記憶手段のうち、前記ステージごとにいずれかの前記記憶手段を選択するように制御する制御手段と、
前記制御手段によって選択された前記記憶手段を用いて前記第１のタスクを実行中に、前記第１のタスクの実行に用いられていない前記記憶手段で保持されている第２のタスクに関する複数の前記ステージにおける状態を退避する退避手段と、
前記制御手段によって選択された前記記憶手段を用いて前記第１のタスクを実行中に、前記退避手段に退避されている第３のタスクに関する複数の前記ステージにおける状態を、前記第１のタスクの実行に用いられていない前記記憶手段に復元する復元手段と
を備えることを特徴とするマイクロプロセッサ。
【請求項２】
前記制御手段は、タスク切り替え制御信号が発生されたとき、現在のタスクの実行に用いられていない前記記憶手段を新たなタスクの複数の前記ステージにおけるそれぞれの状態を記憶するものとして選択するように制御し、前記記憶手段の選択のタイミングは、前記ステージごとに対応付けて設けられているそれぞれの前記記憶手段で異なるように制御する
ことを特徴とする請求項１に記載のマイクロプロセッサ。
【請求項３】
前記制御手段は、外部から割り込み制御信号の入力を受けたとき、現在のタスクの実行に用いられていない前記記憶手段を新たなタスクの複数の前記ステージにおけるそれぞれの状態を記憶するものとして選択するように制御し、前記記憶手段の選択のタイミングは、前記ステージごとに対応付けて設けられているそれぞれの前記記憶手段で異なるように制御する
ことを特徴とする請求項１に記載のマイクロプロセッサ。
【請求項４】
前記退避手段により前記データを退避している途中で前記割り込み制御信号の入力を受けたとき、前記制御手段は、前記退避手段により前記データの退避が終了するまで前記割り込み制御信号を保留し、前記データの退避が終了したとき、現在のタスクの実行に用いられていない前記記憶手段を新たなタスクの複数の前記ステージにおけるそれぞれの状態を記憶するものとして選択するように制御し、前記記憶手段の選択のタイミングは、前記ステージごとに対応付けて設けられているそれぞれの前記記憶手段で異なるように制御する
ことを特徴とする請求項３に記載のマイクロプロセッサ。
【請求項５】
前記復元手段により前記データを復元している途中で前記割り込み制御信号の入力を受けたとき、前記制御手段は、前記データの復元を中止し、現在のタスクの実行に用いられていない前記記憶手段を新たなタスクの複数の前記ステージにおけるそれぞれの状態を記憶するものとして選択するように制御し、前記記憶手段の選択のタイミングは、前記ステージごとに対応付けて設けられているそれぞれの前記記憶手段で異なるように制御する
ことを特徴とする請求項３に記載のマイクロプロセッサ。
【請求項６】
前記記憶手段は、レジスタファイルをさらに含む
ことを特徴とする請求項１に記載のマイクロプロセッサ。
【請求項７】
前記記憶手段は、プログラムカウンタをさらに含む
ことを特徴とする請求項１に記載のマイクロプロセッサ。
【請求項８】
前記退避手段を複数有し、それらが相互に連結されている
ことを特徴とする請求項１に記載のマイクロプロセッサ。
【請求項９】
前記退避手段をマイクロプロセッサ外部に存在するメモリ及び前記１系統の演算手段と接続し、
前記退避手段を前記マイクロプロセッサ外部に存在するメモリのキャッシュとして動作させる
ことを特徴とする請求項１に記載のマイクロプロセッサ。
【請求項１０】
前記退避手段をマイクロプロセッサ外部に存在するメモリ及び前記１系統の演算手段と接続し、
前記退避手段を前記マイクロプロセッサ外部に存在するメモリの代用として動作させる
ことを特徴とする請求項１に記載のマイクロプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マイクロプロセッサに関し、特に、例えば、時間的オーバヘッドの少ないタスクスイッチングを可能にしたマイクロプロセッサに関する。特に、ソフトウェア無線技術（software radio）のように、復調処理、誤り訂正処理、プロトコル処理のように種々の異なる処理を要求されるプロセッサに好適なマイクロプロセッサに関する。
【０００２】
【従来の技術】
近年、電子機器の高度化が進み、電子機器内部に組み込まれるマイクロプロセッサにおいても、さらなる高度化、かつ、効率的な処理が要求されている。すなわち、大量のプログラムを実行する高速なマイクロプロセッサが必要とされている。
【０００３】
一般に、組み込みマイクロプロセッサは、リアルタイム処理を要求されることが多く、複雑なプログラムの中でタイミングに制約のある部分を、確実に、かつ、決められた時間内に実行すること、並びに、プログラムを変更した際に処理時間が間に合うか否かを見通し良く予測することが強く望まれる。
【０００４】
その一方で、近年の半導体技術の進歩により、以前に較べ、より多くの回路をマイクロプロセッサに使用することが可能となり、高度化、かつ、効率的な処理の要求が満たされるのであれば、多少の回路量の増大は許容される場合が多くなってきた。
【０００５】
また、半導体技術の進歩により、回路の集積密度が向上しているため、マイクロプロセッサとは別のチップとされていたメモリなどを同一チップに集積することができ、パッケージのピン数などの制約を受けることにより制限されてきたマイクロプロセッサとメモリ間のバス幅を大幅に広げることが可能となる。従って、バス幅の増大およびバスの複数化に関して、制約が大幅に緩和されている。
【０００６】
ところで、マイクロプロセッサにおいてリアルタイム処理を実行する場合、外部周辺回路から、不定期もしくは周期的な割り込み制御信号の入力を受け付け、各種割り込みに応じたプログラム（いわゆる割り込みサービス）を実行することができる。
【０００７】
この際、実行していたプログラムと割り込みサービスの間には連続性がないため、マイクロプロセッサの内部状態（例えば、演算回路に使用しているパイプラインフリップフロップなど）を退避させるか、もしくは、実行をストールするかによって、それまで実行していたプログラムの演算結果を割り込みサービスが変更しないようになされている。
【０００８】
ここで、従来のマイクロプロセッサの内部の構成について、図１を参照して説明する。
【０００９】
プログラムカウンタ１は、次に実行すべき命令（タスク）のアドレスを記憶しておくためのレジスタであり、記憶されている、次に実行すべき命令のアドレスを命令メモリ２に供給する。命令メモリ２は、プログラムカウンタ１から供給されるアドレスに基づいて読み出された命令を演算回路３に供給する。命令キャッシュ７は、命令メモリ２のデータの出し入れの速度が、演算回路３と比較して遅い場合に、アクセス局所性（Access Locality）を利用して擬似的に高速なデータアクセスをなすための緩衝用のメモリである。
【００１０】
このマイクロプロセッサは、ステージ１１乃至１５の５段のパイプラインのRISC（Reduced Instruction Set Computer）プロセッサで構成されているものとする。
【００１１】
ステージ１１は、命令メモリ２に記憶されている命令（タスク）を読み出し（IF：Instruction Fetch）、記憶素子２０に記憶させる。ステージ１２は、記憶素子２０に記憶されている命令およびレジスタファイル４に格納されているデータを読み出してデコード（ID：Instruction Decode）し、記憶素子２１に記憶させる。
【００１２】
ステージ１３は、記憶素子２１に記憶されている命令を読み出して実行し（EX：Execution）、その命令によって演算されたデータを記憶素子２２に記憶させる。
【００１３】
ステージ１４は、記憶素子２２に記憶されているデータを読み出し、記憶素子２３に記憶させる。ステージ１４はまた、演算回路３内の内部状態に関するデータおよびレジスタファイル４の内容をデータメモリ５に書き込ませる（MEM：Memory access）とともに、データメモリ５に書き込まれているデータを読み出し、演算回路３およびレジスタファイル４に復元させる。ステージ１５は、記憶素子２３に記憶されているデータを読み出し、レジスタファイル４へライトバック（WB：Write Back）する。データメモリ５とステージ１４の間には、擬似的に高速なデータアクセスをなすためのデータキャッシュ６が一般的には存在する。
【００１４】
図２は、図１に示したマイクロプロセッサにおける、割り込みサービスによるタスク切り替えのタイミング動作を説明する図である。
【００１５】
同図に示されるように、時刻Ｔ１において、ステージ１１は、命令メモリ２に記憶されているタスク１を読み出し、記憶素子２０に記憶させる。時刻Ｔ２において、ステージ１２は、記憶素子２０に記憶されているタスク１を読み出し、それをデコードし、記憶素子２１に記憶させる。時刻Ｔ３において、ステージ１３は、記憶素子２１に記憶されているタスク１を読み出し、それを実行し、演算結果を記憶素子２２に記憶させる。時刻Ｔ４において、ステージ１４は、記憶素子２２に記憶されているデータを読み出し、記憶素子２３に記憶させる。時刻Ｔ５において、ステージ１５は、記憶素子２３に記憶されているデータを読み出し、レジスタファイル４へライトバックする。
【００１６】
このように、ステージ（例えば、ステージ１１）に入力された信号は、クロック時間Ｔを経過した後、次のステージ（いまの場合、ステージ１２）に供給される。その後、このステージ（ステージ１１）に次の入力があっても、この信号は、クロック時間Ｔを経過した後、次のステージ（ステージ１２）に供給される。従って、次のステージ（ステージ１２）は、前のステージ（ステージ１１）の入力の影響を受ける前に、現在の信号を、さらに次のステージ（いまの場合、ステージ１３）に供給することができる。
【００１７】
時刻Ｔ７において、タスク切り替え制御信号（割り込みサービス）が発生されると、マイクロプロセッサは、時刻Ｔ８において、次に実行すべき命令（タスク２）のアドレスを命令メモリ２に供給させるようにプログラムカウンタ１のアドレス切り替えを制御する。その後、演算回路３には、パイプラインストールが発生されるため、レジスタ退避命令が発生されるまで待機する。
【００１８】
時刻Ｔ１２において、ステージ１５によってデータがレジスタファイル４へライトバックされると（全てのタスク１が吐き出されると）同時に、レジスタ退避命令が発生され、ステージ１４からデータメモリ５に、演算回路３内の内部状態に関するデータおよびレジスタファイル４の内容が退避される。
【００１９】
ステージ１１のデータ退避が終了する時刻Ｔ１５において、命令メモリ２に記憶されているタスク２が読み出され、タスク２の実行が開始される。それ以降、上述したタスク１と同様の動作が繰り返し実行される。
【００２０】
そして、ステージ１１のタスク２の実行が終了する時刻Ｔ５２において、レジスタ復帰命令が発生され、データメモリ５から、タスク１の実行における演算回路３の内部状態およびレジスタファイル４の内容が復元される。ステージ１１のデータ復元が終了する時刻Ｔ５５において、マイクロプロセッサは、次に実行すべき命令（タスク１）のアドレスを命令メモリ２に供給させるようにプログラムカウンタ１のアドレス復帰を制御する。その後、演算回路３には、パイプラインストールが発生され、ステージ１５のデータ復元が終了されるまで待機する。時刻Ｔ５９において、ステージ１５のデータ復元が終了されると、タスク１の実行が再開され、上述した動作が繰り返される。
【００２１】
このように、割り込みサービスプログラムの実行によりレジスタファイル４の内容が破壊されないように、割り込みサービスを受け付ける前に、実行中の演算回路３の内部状態およびレジスタファイル４の内容が退避される。そして、割り込みサービスから復帰する場合には、退避させていた演算回路３の内部状態およびレジスタファイル４の内容を復元することにより、割り込みサービスによって、それ以前に実行されていたプログラムの演算結果が変更されることを防止している。
【００２２】
また、図３に示されるように、２系統のレジスタファイル４−１および４−２を設け、割り込みサービスを実行する際にレジスタファイルを切り替えることによって瞬時にタスクを切り替えることができるようにしたマイクロプロセッサも存在する。なお、図１と対応する部分には同一の符号を付してあり、その説明は適宜省略する。
【００２３】
図３の構成においては、一方のレジスタファイル４−１に記憶されているタスクが実行されている状態で割り込みサービスを受け付けたとき、他方のレジスタファイル４−２に記憶されているタスクを瞬時に実行することができるようにスイッチ３１および３２がレジスタファイル４−１からレジスタファイル４−２を選択するように切り替えられるため、データ退避のためのオーバヘッドが発生しない。
【００２４】
図４は、図３に示したマイクロプロセッサにおける、割り込みサービスによるタスク切り替えのタイミング動作を説明する図である。
【００２５】
同図に示されるように、時刻Ｔ７において、タスク切り替え制御信号（割り込みサービス）が発生されると、マイクロプロセッサは、時刻Ｔ８において、次に実行すべき命令（タスク２）のアドレスを命令メモリ２に供給するようにプログラムカウンタ１のアドレス切り替えを制御する。その後、演算回路３には、パイプラインストールが発生され、時刻Ｔ１２において、ステージ１５によってデータがレジスタファイル４−１へライトバックされると（全てのタスクが吐き出されると）同時に、スイッチ３１および３２がレジスタファイル４−１からレジスタファイル４−２を選択するように切り替えられ、命令メモリ２に記憶されているタスク２が読み出され、実行される。
【００２６】
このように、２系統のレジスタファイルを設けることにより、タスク１およびタスク２の切り替えを瞬時に行うことができる。
【００２７】
【発明が解決しようとする課題】
しかしながら、図１および図２の例の場合、レジスタファイルの内部状態の退避およびパイプラインストールのために数十クロックを使用しなければならず、割り込みサービスが発生する毎に、比較的大きな時間的オーバヘッドが生じる課題があった。
【００２８】
また、図３および図４の例の場合、予め用意したレジスタファイル群（図３の場合、２個）以上の多重割り込みサービスが存在する場合、やはり、図１の例の場合と同様に、レジスタファイル４の内部状態の退避およびパイプラインストールのための時間的オーバヘッドが生じてしまう課題があった。
【００２９】
さらに、マイクロプロセッサにおけるメモリ階層構造の中で、最も高速で動作しなければならないレジスタファイルを大量に設けることは、回路規模が大きくなり、かつ、配線が多くなることを意味し、マイクロプロセッサのクロック速度向上の妨げとなる課題があった。
【００３０】
本発明はこのような状況に鑑みてなされたものであり、レジスタファイルを大量に設けなくても、時間的オーバヘッドの少ないタスク切り替えを可能にするとともに、ほぼ無制限の割り込み多重化を実現することができるようにするものである。
【００３１】
【課題を解決するための手段】
本発明のマイクロプロセッサは、複数のステージから構成され、複数のステージにおいて複数の命令をずらして順次実行することにより、同時に並行してデータを演算する少なくとも１系統の演算手段と、演算手段を構成する複数のステージにおける状態を、複数のタスクに対応させて記憶するために、ステージごとに対応付けて、演算手段の1系統に対して少なくとも２系統設けられる記憶手段と、第１のタスクが実行される場合、複数のステージにおけるそれぞれの状態を記憶するものとして、少なくとも２系統設けられる記憶手段のうち、ステージごとにいずれかの記憶手段を選択するように制御する制御手段と、制御手段によって選択された記憶手段を用いて第１のタスクを実行中に、第１のタスクの実行に用いられていない記憶手段で保持されている第２のタスクに関する複数のステージにおける状態を退避する退避手段と、制御手段によって選択された記憶手段を用いて第１のタスクを実行中に、退避手段に退避されている第３のタスクに関する複数のステージにおける状態を、第１のタスクの実行に用いられていない記憶手段に復元する復元手段とを備えることを特徴とする。
【００３２】
制御手段には、タスク切り替え制御信号が発生されたとき、現在のタスクの実行に用いられていない記憶手段を新たなタスクの複数のステージにおけるそれぞれの状態を記憶するものとして選択するように制御させることができ、記憶手段の選択のタイミングは、ステージごとに対応付けて設けられているそれぞれの記憶手段で異なるように制御させることができる。
【００３３】
制御手段には、外部から割り込み制御信号の入力を受けたとき、現在のタスクの実行に用いられていない記憶手段を新たなタスクの複数のステージにおけるそれぞれの状態を記憶するものとして選択するように制御させることができ、記憶手段の選択のタイミングは、ステージごとに対応付けて設けられているそれぞれの記憶手段で異なるように制御させることができる。
【００３４】
退避手段によりデータを退避している途中で割り込み制御信号の入力を受けたとき、制御手段には、退避手段によりデータの退避が終了するまで割り込み制御信号を保留させ、データの退避が終了したとき、現在のタスクの実行に用いられていない記憶手段を新たなタスクの複数のステージにおけるそれぞれの状態を記憶するものとして選択するように制御させることができ、記憶手段の選択のタイミングは、ステージごとに対応付けて設けられているそれぞれの記憶手段で異なるように制御させることができる。
【００３５】
復元手段によりデータを復元している途中で割り込み制御信号の入力を受けたとき、制御手段には、データの復元を中止させ、現在のタスクの実行に用いられていない記憶手段を新たなタスクの複数のステージにおけるそれぞれの状態を記憶するものとして選択するように制御させることができ、記憶手段の選択のタイミングは、ステージごとに対応付けて設けられているそれぞれの記憶手段で異なるように制御させることができる。
【００３６】
記憶手段は、レジスタファイルをさらに含むものであるとすることができる。
また、記憶手段は、プログラムカウンタをさらに含むものであるとすることができる。
【００３７】
退避手段を複数有し、それらを相互に連結させることができる。
【００３８】
退避手段をマイクロプロセッサ外部に存在するメモリ及び１系統の演算手段と接続し、退避手段をマイクロプロセッサ外部に存在するメモリのキャッシュとして動作させることができる。
退避手段をマイクロプロセッサ外部に存在するメモリ及び１系統の演算手段と接続し、退避手段をマイクロプロセッサ外部に存在するメモリの代用として動作させることができる。
【００３９】
本発明のマイクロプロセッサにおいては、複数のステージにおいて複数の命令をずらして順次実行することにより同時に並行して演算された複数のステージごとの状態を複数のタスクに対応させて記憶するために、ステージごとに対応付けて、演算経路の1系統に対して少なくとも２系統設けられる記憶経路のうちのいずれかが選択され、選択された記憶経路を用いて第１のタスクを実行中に、第１のタスクの実行に用いられていない記憶経路で保持されている第２のタスクに関する複数のステージにおける状態がメモリに退避され、メモリに退避されている第３のタスクに関する複数のステージにおける状態が、第１のタスクの実行に用いられていない記憶経路に復元される。
【００４０】
【発明の実施の形態】
以下、図を参照して、本発明の実施の形態について説明する。
【００４１】
図５は、本発明を適用したマイクロプロセッサの内部の構成例を示すブロック図である。なお、従来と対応する部分には同一の符号を付してあり、その説明は適宜省略する。本発明においては、プログラムカウンタ１、レジスタファイル４、並びに、演算回路３内の記憶素子２０乃至２３を、それぞれ２系統で構成するが、勿論、２以上の複数系統で構成するようにしてもよい。これに対して、ステージ１１乃至１５は、１系統のみで構成されている。厳密に言うと、命令メモリ２とデータメモリ５は、マイクロプロセッサには含まれず、それ以外の部分をマイクロプロセッサコア（Microprocessor Core）という。
【００４２】
タスク切替制御部４１は、マイクロプロセッサ内のスイッチ５１乃至７０を、所定の時間毎に発生されるタスク切り替え制御信号により切り替えるように制御するか、もしくは外部割り込み制御信号の入力により切り替えるように制御する。初期状態において、タスク切替制御部４１は、プログラムカウンタ１−１および１−２のうち、プログラムカウンタ１−１を選択するようにスイッチ５２を制御し、演算回路３内の２系統のパイプラインのうち、記憶素子２０−１，２１−１，２２−１および２３−１をそれぞれ選択するようにスイッチ５７乃至６０を制御し、レジスタファイル４−１および４−２のうち、レジスタファイル４−１を選択するようにスイッチ６８および６９をそれぞれ制御する。
【００４３】
スイッチ５１は、退避用読み出しのためのスイッチ（選択装置）であり、タスク切替制御部４１の制御の下、プログラムカウンタ１−１または１−２から供給されるアドレスを第１の退避メモリ４２に供給する。スイッチ５２は、タスク切替制御部４１の制御の下、プログラムカウンタ１−１または１−２から供給されるアドレスを命令メモリ２に供給する。
【００４４】
命令メモリ２は、スイッチ５２を介してプログラムカウンタ１−１または１−２から供給されるアドレスに基づいて読み出される命令（タスク）を、演算回路３に供給する。
【００４５】
演算回路３は、ステージ１１乃至１５の５段のパイプラインのRISCプロセッサで構成されており、記憶素子が２個ずつ設けられているため、２系統のパイプラインとされている。なお、本発明の実施の形態においては、パイプラインが５段になっている例を示したが、段数は任意であり、より多くても少なくてもよい。
【００４６】
ステージ１１は、命令メモリ２に記憶されている命令（タスク）を読み出し、記憶素子２０−１または２０−２に記憶させる。ステージ１２は、記憶素子２０−１または２０−２に記憶されている命令をスイッチ５７を介して読み出すとともに、レジスタファイル４−１または４−２に格納されているデータをスイッチ６８または６９を介して読み出し、それらをデコードし、記憶素子２１−１または２１−２に記憶させる。
【００４７】
ステージ１３は、記憶素子２１−１または２１−２に記憶されている命令をスイッチ５８を介して読み出し、読み出した命令を実行し、その命令によって演算されたデータを記憶素子２２−１または２２−２に記憶させる。
【００４８】
ステージ１４は、記憶素子２２−１または２２−２に記憶されているデータをスイッチ５９を介して読み出し、記憶素子２３−１または２３−２に記憶させる。ステージ１４はまた、タスクの実行により得られるデータをデータメモリ５に書き込ませるとともに、データメモリ５に書き込まれているデータを読み出し、記憶素子２３−１または２３−２に記憶させる。
【００４９】
ステージ１５は、記憶素子２３−１または２３−２に記憶されているデータをスイッチ６０を介して読み出し、レジスタファイル４−１または４−２へライトバックする。
【００５０】
スイッチ５３は、退避用読み出しのためのスイッチ（選択装置）であり、タスク切替制御部４１の制御の下、記憶素子２０−１または２０−２から読み出される命令（タスク）を第１の退避メモリ４２に供給する。スイッチ５４は、退避用読み出しのためのスイッチであり、タスク切替制御部４１の制御の下、記憶素子２１−１または２１−２から読み出されるデータを第１の退避メモリ４２に供給する。スイッチ５５は、退避用読み出しのためのスイッチであり、タスク切替制御部４１の制御の下、記憶素子２２−１または２２−２から読み出されるデータを第１の退避メモリ４２に供給する。スイッチ５６は、退避用読み出しのためのスイッチであり、タスク切替制御部４１の制御の下、記憶素子２３−１または２３−２から読み出されるデータを第１の退避メモリ４２に供給する。
【００５１】
スイッチ６１は、復元用書き込みのためのスイッチであり、第１の退避メモリ４２から供給されるデータ（アドレス）を、プログラムカウンタ１−１または１−２に供給する。スイッチ６２は、復元用書き込みのためのスイッチであり、第１の退避メモリ４２から供給されるデータ（命令）を、記憶素子２０−１または２０−２に供給する。スイッチ６３は、復元用書き込みのためのスイッチであり、第１の退避メモリ４２から供給されるデータを、記憶素子２１−１または２１−２に供給する。スイッチ６４は、復元用書き込みのためのスイッチであり、第１の退避メモリ４２から供給されるデータを、記憶素子２２−１または２２−２に供給する。スイッチ６５は、復元用書き込みのためのスイッチであり、第１の退避メモリ４２から供給されるデータを、記憶素子２３−１または２３−２に供給する。
【００５２】
スイッチ６６は、演算データ書き込みのためのスイッチであり、タスク切替制御部４１の制御の下、ステージ１５からライトバックされるデータを、レジスタファイル４−１または４−２に供給する。
【００５３】
スイッチ６７は、復元用書き込みのためのスイッチであり、タスク切替制御部４１の制御の下、第１の退避メモリ４２から供給されるデータを、レジスタファイル４−１または４−２に供給する。
【００５４】
スイッチ６８および６９は、演算データ読み出しのためのスイッチであり、タスク切替制御部４１の制御の下、レジスタファイル４−１または４−２から読み出されるデータをステージ１２に供給する。
【００５５】
スイッチ７０は、退避用読み出しのためのスイッチであり、タスク切替制御部４１の制御の下、レジスタファイル４−１または４−２から読み出されるデータを、第１の退避メモリ４２に供給する。
【００５６】
第１の退避メモリ４２は、スイッチ５１を介して供給されるプログラムカウンタ１−１または１−２からの退避データ、スイッチ５３乃至５６を介して供給される演算回路３からの退避データ、並びに、スイッチ７０を介して供給されるレジスタファイル４−１または４−２からの退避データを書き込む。書き込まれた退避データは、復元時に読み出される。また、第１の退避メモリ４２に加え、第２の退避メモリ４３が存在するとさらに好適である。例えば、第１の退避メモリ４２は容量（capacity）は小さいが、転送速度が早いメモリ（High Access bandwidth）であり、第２の退避メモリ４３は、容量は大きいが転送速度が遅い（Low Access bandwidth）ものとする。その場合は、すぐに処理が必要とされないデータは第２の退避メモリ４３にセーブしておく、などの多段階の処理が可能になる。
【００５７】
また、マイクロプロセッサの外部に存在する命令メモリ２と、第１の退避メモリ４２及び第２の退避メモリ４３を接続し、さらにその入出力をステージ１１へ双方向接続することにより、第１の退避メモリ４２又は第２の退避メモリ４３を命令キャッシュ７（図１）として利用することもできる。同様に、マイクロプロセッサの外部に存在するデータメモリ５と、第１の退避メモリ４２及び第２の退避メモリ４３を接続し、さらにその入出力をステージ１４へ双方向接続することにより、第１の退避メモリ４２又は第２の退避メモリ４３をデータキャッシュ６（図１）として利用することもできる。このように、退避メモリとキャッシュを兼用することにより、実装効率（面積効率）を改善することができる。
【００５８】
また、命令メモリ２と第１の退避メモリ４２及び第２の退避メモリ４３が接続されることで、退避メモリを命令メモリ２として代用することも可能になる。これを上述の例にあてはめると、容量は小さいが転送速度の速い第１の退避メモリ４２を命令キャッシュ７として代用し、容量は大きいが転送速度の遅い第２の退避メモリ４３を命令メモリ２として代用することも可能である。このような構成にすることで、実装効率（面積効率）を改善することもできる。
【００５９】
なお、第２の退避メモリ４３は、マイクロプロセッサ内部にあってもよいし、外部にあってもよい。
【００６０】
なお、退避データは、多重化して順次書き込まれるか、もしくは、並列に同時に書き込まれる。また同様に、復元するデータも、多重化して読み出されるか、もしくは、並列に同時に読み出される。
【００６１】
図６は、図５に示したマイクロプロセッサにおける、割り込みサービスによるタスク切り替えのタイミング動作を説明する図である。ここでは、タスク１、タスク２、およびタスク３の順で実行されるようにスケジュールされているものとし、これらタスク１乃至タスク３のうち、タスク３は、以前に、タスクの実行途中に割り込み入力されたことがあり、第１の退避メモリ４２に退避データが存在するものとし、タスク２は、第１の退避メモリ４２に退避データが存在せず、タスク２の実行開始時において退避データの復元は必要ないものとして説明する。なお、現在演算に使用されているレジスタファイルを「表」、現在演算に使用していないレジスタファイルを「裏」と適宜称することにする。
【００６２】
同図に示されるように、初期状態においてタスク１が実行されており、時刻Ｔ７において、タスク切り替え制御信号が発生されると、タスク切替制御部４１は、時刻Ｔ８において、プログラムカウンタ１−１からプログラムカウンタ１−２を選択するようにスイッチ５２を制御する。時刻Ｔ９において、タスク切替制御部４１は、レジスタファイル４−１からレジスタファイル４−２の経路に切り替えるようにスイッチ６８および６９を制御する。これにより、レジスタファイル４−１が「表」から「裏」に切り替えられ、レジスタファイル４−２が「裏」から「表」に切り替えられ、命令メモリ２に記憶されているタスク２の実行が開始される。それ以降、タスク１と同様の動作が繰り返し実行される。
【００６３】
すなわち、タスク切替制御部４１は、時刻Ｔ８において、記憶素子２０−２を選択するようにスイッチ５７を切り替え、時刻Ｔ９において、記憶素子２１−２を選択するようにスイッチ５８を切り替え、時刻Ｔ１０において、記憶素子２２−２を選択するようにスイッチ５９を切り替え、時刻Ｔ１１において、記憶素子２３−２を選択するようにスイッチ６０を切り替える。このように、各ステージ毎にタスク１の実行からタスク２の実行に切り替えられる。
【００６４】
時刻Ｔ１２において、ステージ１５によってデータがレジスタファイル４−１へライトバックされると（全てのタスク１が吐き出されると）同時に、タスク切替制御部４１は、レジスタファイル４−２にデータをライトバックするように、スイッチ６６を切り替える。これにより、レジスタファイル４−１は「裏」（待機状態）となるため、その時間を利用して、第１の退避メモリ４２に、レジスタファイル４−１の内容およびタスク１の実行における演算回路３の内部状態に関するデータを退避させ、次に実行すべきタスクを復元させておく。
【００６５】
いまの場合、タスク２の次にタスク３が実行されるようにスケジュールされているため、タスク２の実行中に、タスク１のデータ退避、およびタスク３のデータ復元を行うようにする。
【００６６】
具体的には、時刻Ｔ１３において、タスク切替制御部４１によって、スイッチ５１、スイッチ５３乃至５６、並びにスイッチ７０が、「裏」となるプログラムカウンタ１−１、演算回路３の記憶素子２０−１，２１−１，２２−１および２３−１、並びにレジスタファイル４−１をそれぞれ選択するように切り替えられ、プログラムカウンタ１−１、演算回路３の記憶素子２０−１，２１−１，２２−１および２３−１、並びにレジスタファイル４−１に記憶されているデータが第１の退避メモリ４２に退避される。そして、時刻Ｔ３２において、データ退避が終了されると、時刻Ｔ３４において、第１の退避メモリ４２に退避されているタスク３のデータが、「裏」となるプログラムカウンタ１−１、演算回路３の記憶素子２０−１，２１−１，２２−１および２３−１、並びにレジスタファイル４−１にそれぞれ書き込まれ、復元される。
【００６７】
このように、タスク２の実行中に、「裏」となるプログラムカウンタ１−１、演算回路３の記憶素子２０−１，２１−１，２２−１および２３−１、並びにレジスタファイル４−１にタスク３の以前の切り替え時のデータが復元されるため、タスク１からタスク２の切り替えと同様に、瞬時にタスク２からタスク３に切り替えられる。
【００６８】
また、タスク３を実行中に、「裏」となるレジスタファイル４−２、プログラムカウンタ１−２、演算回路３の記憶素子２０−２，２１−２，２２−２および２３−２に記憶されているタスク２のデータを第１の退避メモリ４２に退避させ、次に実行すべきタスク１をそれらに復元することによって、時間的オーバヘッドなしにタスク切り替え（タスクスイッチング）を実行することができる。
【００６９】
さらに、第１の退避メモリ４２の記憶容量に応じて、複数のタスクを自由に切り替えて実行することも可能となる。
【００７０】
以上においては、タスク切り替え制御信号が、適切なタイミングで与えられるものとして説明したが、例えば、自走するカウンタによってタスク切り替え制御信号を生成することによって、各タスクに均等に実行時間を与えることもできる。
【００７１】
また、プリロード可能なダウンカウンタを設け、そのダウンカウンタの値が０となるタイミングでタスク切り替え制御信号を発生させるものとし、タスク切り替え制御信号が発生したときにプリロード値をダウンカウンタ内にロードするように構成すれば、予め設定するプリロード値を変更するだけで、タスク切り替えの間隔を可変にすることができる。
【００７２】
さらに、ダウンカウンタにロードするプリロード値を保持する複数のレジスタを設け、それらのレジスタをどのような順番でロードするかをプログラムによって設定することにより、柔軟なタスク切り替えを実現することができる。
【００７３】
また以上においては、予めタスクスイッチが予測可能である場合について説明したが、外部割込みサービスにおいても、時間的オーバヘッドなしにタスク切り替えを実行することができる。
【００７４】
なお、マイクロプロセッサ内に第１の退避メモリ４２を設ける場合を例にして説明したが、これに限らず、例えば、図示せぬキャッシュメモリに退避メモリを兼用させるようにしてもよい。
【００７５】
図７は、外部割込みサービスによるタスク切り替えのタイミング動作を説明する図である。この例の場合、データ退避およびデータ復元が実行されていないタイミングに割り込みサービスがあるため、通常のタスク切り替えと同様に扱うことができる。
【００７６】
同図に示されるように、タスク２の実行中に行われるタスク１のデータ退避が時刻Ｔ３２に終了し、その後、時刻Ｔ３３において、外部から割り込み制御信号の入力を受け付けると、タスク切替制御部４１は、時刻Ｔ３４において、プログラムカウンタ１−２からプログラムカウンタ１−１を選択するようにスイッチ５２を制御するとともに、演算回路３の記憶素子２０−１，２１−１，２２−１および２３−１をそれぞれ選択するようにスイッチ６１乃至６５を制御する。時刻Ｔ３５において、タスク切替制御部４１は、レジスタファイル４−２からレジスタファイル４−１の経路に切り替えるようにスイッチ６８および６９を制御する。
【００７７】
これにより、第１の退避メモリ４２に退避されているタスク３のデータが、プログラムカウンタ１−１、演算回路３の記憶素子２０−１，２１−１，２２−１および２３−１、並びにレジスタファイル４−１にそれぞれ復元され、タスク３が実行され、いままで実行されていたタスク２は中断される。すなわち、レジスタファイル４−１の内容、およびタスク１の実行における演算回路３の内部状態に関するデータは既に第１の退避メモリ４２に退避されているため、直ちにタスク３の実行を行うことができる。
【００７８】
時刻Ｔ３８において、ステージ１５によってデータがレジスタファイル４−１へライトバックされると（全てのタスク２が吐き出されると）同時に、タスク切替制御部４１は、タスク３をレジスタファイル４−１にライトバックするように、スイッチ６６を切り替える。
【００７９】
ステージ１１のタスク３の実行が終了する時刻Ｔ４０において、タスク切替制御部４１は、レジスタファイル４−１から４−２の経路に切り替えるようにスイッチ６８および６９を制御する。これにより、割り込みにより中断されていたタスク２の実行が再開される。
【００８０】
時刻Ｔ４１において、タスク切替制御部４１によって、スイッチ６１乃至６５、およびスイッチ６７が、「裏」となるプログラムカウンタ１−１、演算回路３の記憶素子２０−１，２１−１，２２−１および２３−１、並びにレジスタファイル４−１をそれぞれ選択するように切り替えられ、第１の退避メモリ４２に退避されているデータが、レジスタファイル４−１、プログラムカウンタ１−１、演算回路３の記憶素子２０−１，２１−１，２２−１および２３−１に書き込まれ、復元される。
【００８１】
このように、現在使用していないプログラムカウンタ１−１、演算回路３の記憶素子２０−１，２１−１，２２−１および２３−１、並びにレジスタファイル４−１を、割り込みが入ったタスクの演算用に割り当てることにより、割り込みされ、一時中断されたタスク２の状態を保存する必要がない。すなわち、データ退避およびデータ復元は不要となる。
【００８２】
図８は、他の外部割り込みサービスによるタスク切り替えのタイミング動作を説明する図である。この例においては、データ退避中に割り込みサービスがあった場合の動作について説明する。
【００８３】
同図に示されるように、タスク２の実行中に行われるデータ退避の途中の時刻Ｔ３１において、外部から割り込み制御信号の入力を受け付けると、タスク切替制御部４１は、その受け付けを一旦保留し、データ退避が終了するまで待機する。
【００８４】
そして、時刻Ｔ３２において、タスク２の実行中に行われるデータ退避が終了されると、時刻Ｔ３３において、タスク切替制御部４１は、保留されている割り込み制御信号の入力を受け付ける。時刻Ｔ３４において、タスク切替制御部４１は、プログラムカウンタ１−２からプログラムカウンタ１−１を選択するようにスイッチ５２を制御するとともに、演算回路３の記憶素子２０−１，２１−１，２２−１および２３−１をそれぞれ選択するようにスイッチ６１乃至６５を制御する。時刻Ｔ３５において、タスク切替制御部４１は、レジスタファイル４−２からレジスタファイル４−１の経路に切り替えるようにスイッチ６８および６９を制御する。
【００８５】
これにより、第１の退避メモリ４２に退避されているタスク３のデータが、プログラムカウンタ１−１、演算回路３の記憶素子２０−１，２１−１，２２−１および２３−１、並びにレジスタファイル４−１にそれぞれ復元され、タスク３が実行され、いままで実行されていたタスク２は中断される。
【００８６】
時刻Ｔ３８において、ステージ１５によってデータがレジスタファイル４−２へライトバックされると（全てのタスク２が吐き出されると）同時に、タスク切替制御部４１は、タスク３をレジスタファイル４−１にライトバックするように、スイッチ６６を切り替える。時刻Ｔ３９において、タスク切替制御部４１によって、スイッチ５１、スイッチ５３乃至５６、並びにスイッチ７０が、「裏」となるプログラムカウンタ１−２、演算回路３の記憶素子２０−１，２１−２，２２−２および２３−２、並びにレジスタファイル４−２をそれぞれ選択するように切り替えられ、プログラムカウンタ１−２、演算回路３の記憶素子２０−２，２１−２，２２−２および２３−２、並びにレジスタファイル４−２に記憶されているデータが第１の退避メモリ４２に退避される。
【００８７】
このように、データの退避中に割り込みが入る場合には、その退避が終了するまで割り込み制御信号の受け付けを保留にすることによって、確実にデータを退避させることができ、かつ、時間的オーバヘッドなしにタスク切り替えを実行することができる。
【００８８】
図９は、他の外部割込みサービスによるタスク切り替えのタイミング動作を説明する図である。この例においては、データ復元中に割り込みサービスがあった場合の動作について説明する。
【００８９】
同図に示されるように、タスク２の実行中に行われるデータ復元の途中の時刻Ｔ１１において、外部から割り込み制御信号の入力を受け付けると、データの復元を中止し、時刻Ｔ１２において、タスク切替制御部４１は、プログラムカウンタ１−２からプログラムカウンタ１−１を選択するようにスイッチ５２を制御するとともに、レジスタファイル４−２からレジスタファイル４−１の経路に切り替えるようにスイッチ６８および６９を制御する。
【００９０】
これにより、第１の退避メモリ４２に退避されているタスク３のデータが、プログラムカウンタ１−１、演算回路３の記憶素子２０−１，２１−１，２２−１および２３−１、並びにレジスタファイル４−１にそれぞれ復元され、タスク３が実行され、いままで実行されていたタスク２は中断される。なお、途中まで復元されていたデータは、割り込まれたタスク３によって上書きされる。
【００９１】
時刻Ｔ１９において、割り込みサービスが終了すると、時刻Ｔ２０において、タスク切替制御部４１は、レジスタファイル４−１からレジスタファイル４−２の経路に切り替えるようにスイッチ６８および６９を制御する。これにより、中断されていたタスク２が再開され、時刻Ｔ２０において、割り込みにより中止されたデータの復元が再開される。
【００９２】
このように、データの復元中に割り込みが入る場合には、その復元を中止し、割り込みサービスが終了した時点で、復元をやり直すことによって、確実にデータを復元させることができ、かつ、時間的オーバヘッドなしにタスク切り替えを実行することができる。
【００９３】
以上のように、演算に使用していない裏のレジスタファイルのデータを第１の退避メモリ４２に退避させた後、そこに、次に実行すべきデータを第１の退避メモリ４２から復元することにより、ほぼ無制限の割り込みサービスに対して、時間的オーバヘッドなしにタスク切り替えを実現することができる。
【００９４】
【発明の効果】
本発明のマイクロプロセッサによれば、複数のステージにおいて複数の命令をずらして順次実行することにより同時に並行して演算された複数のステージごとの状態を複数のタスクに対応させて記憶するために、ステージごとに対応付けて、演算経路の1系統に対して少なくとも２系統設けられる記憶経路のうちのいずれかを選択し、選択された記憶経路を用いて第１のタスクを実行中に、第１のタスクの実行に用いられていない記憶経路で保持されている第２のタスクに関する複数のステージにおける状態をメモリに退避し、メモリに退避されている第３のタスクに関する複数のステージにおける状態を、他方の記憶経路に復元するようにしたので、ほぼ無制限の割り込みサービスに対して、時間的オーバヘッドなしにタスク切り替えを実現することができる。オーバヘッドをなくすことにより、ソフトウェア無線などで必要とされる性質の異なる処理（復調、誤り訂正など）の高速切り替えを、効率的に行うことができる。
【図面の簡単な説明】
【図１】従来のマイクロプロセッサの内部の構成例を示す図である。
【図２】図１のマイクロプロセッサにおける、割り込みサービスによるタスク切り替えのタイミング動作を説明する図である。
【図３】従来の他のマイクロプロセッサの内部の構成例を示す図である。
【図４】図２のマイクロプロセッサにおける、割り込みサービスによるタスク切り替えのタイミング動作を説明する図である。
【図５】本発明を適用したマイクロプロセッサの内部の構成例を示すブロック図である。
【図６】図５のマイクロプロセッサにおける、割り込みサービスによるタスク切り替えのタイミング動作を説明する図である。
【図７】図５のマイクロプロセッサにおける、外部割り込みサービスによるタスク切り替えのタイミング動作を説明する図である。
【図８】図５のマイクロプロセッサにおける、他の外部割り込みサービスによるタスク切り替えのタイミング動作を説明する図である。
【図９】図５のマイクロプロセッサにおける、他の外部割り込みサービスによるタスク切り替えのタイミング動作を説明する図である。
【符号の説明】
１−１，１−２  プログラムカウンタ，  ２  命令メモリ，  ３  演算回路，４−１，４−２  レジスタファイル，  ５  データメモリ，  ６  データキャッシュ，  ７  命令キャッシュ，  １１乃至１５  ステージ，  ２０−１，２０−２，２１−１，２１−２，２２−１，２２−２，２３−１，２３−２  記憶素子，  ４１  タスク切替制御部，  ４２  第１の退避メモリ，  ４３  第２の退避メモリ，  ５１乃至７０  スイッチ
【図１】
0003767529.tif 000002
【図２】
0003767529.tif 000003
【図３】
0003767529.tif 000004
【図４】
0003767529.tif 000005
【図５】
0003767529.tif 000006
【図６】
0003767529.tif 000007
【図７】
0003767529.tif 000008
【図８】
0003767529.tif 000009
【図９】
0003767529.tif 000010