(57)【要約】【課題】マルチＣＰＵコアのデータ処理装置においてタスクのスケジューリングを容易とすること。【解決手段】マイクロコンピュータ１は、複数のＣＰＵコア２、３と、ＣＰＵコアのレジスタ退避用共有メモリ５とを含む。ＣＰＵコア２、３は、相手側のレジスタファイルのスタックポインタＳＰの値をあたかも自己のＳＰとして処理する仮想スタックポインタ２３、３３を含む。一方のＣＰＵ３が優先度の高い処理をしている間に他方のＣＰＵ２に優先度の低い処理が発生すると、低優先度の処理は他方のＣＰＵ２により実行されず、他方のＣＰＵ２のレジスタファイルの内容は共有メモリ５とスタック領域とに退避される。高優先度の処理が完了すると、共有メモリ５から他方のＣＰＵ２から退避されたデータが一方のＣＰＵ３のレジスタファイルに格納されて、一方のＣＰＵ３は他方のＣＰＵ２によって中断された低優先度の処理を再開して実行する。【選択図】図１
2008015638.tif 000002
【特許請求の範囲】
【請求項１】
第１ＣＰＵコアと、第２ＣＰＵコアとを具備して、
前記第１ＣＰＵコアは第１レジスタファイルと第１命令デコーダ・演算器とを含み、前記第２ＣＰＵコアは第２レジスタファイルと第２命令デコーダ・演算器とを含み、
前記第１ＣＰＵコアの前記第１レジスタファイルの内容と前記第２ＣＰＵコアは前記第２レジスタファイルの内容とを格納する共有メモリを更に具備して、
前記第１ＣＰＵコアは前記第２ＣＰＵコアの前記第２レジスタファイル内部のスタックポインタの値をあたかも前記第１ＣＰＵコアのスタックポインタの値として処理するための第１記憶回路を含み、前記第２ＣＰＵコアは前記第１ＣＰＵコアの前記第１レジスタファイル内部のスタックポインタの値をあたかも前記第２ＣＰＵコアのスタックポインタの値として処理するための第２記憶回路を含み、
前記第１ＣＰＵコアと前記第２ＣＰＵコアとの一方のＣＰＵコアが優先度の高い処理を実行している間に、前記第１ＣＰＵコアと前記第２ＣＰＵコアとの他方のＣＰＵコアに前記一方のＣＰＵコアが実行している前記処理よりも優先度の低い要求が発生することによって、優先度の低い前記要求は前記他方のＣＰＵコアによって実行されることなく中断され、前記他方のＣＰＵコアの前記レジスタファイルのプログラムカウンタの内容とステータスレジスタの内容とがスタック領域に退避される一方、前記他方のＣＰＵコアのレジスタファイルのその他の内容が前記共有メモリに退避され、
前記一方のＣＰＵコアが優先度の高い前記処理を完了すると、前記一方のＣＰＵコアは前記共有メモリに退避された前記他方のＣＰＵコアの前記レジスタファイルの前記その他の内容を前記一方のＣＰＵコアのレジスタファイルに格納して、前記一方のＣＰＵコアは、前記他方のＣＰＵコアの前記レジスタファイルのスタックポインタの内容を前記第１記憶回路と前記第２記憶回路の一方の記憶回路に転送して、前記他方のＣＰＵコアによって中断された前記処理を前記一方のＣＰＵコアが再開して実行するデータ処理装置。
【請求項２】
前記第１ＣＰＵコアと前記第２ＣＰＵコアとに接続されたシステムコントローラを更に具備して、
前記システムコントローラは、第１フラグ情報と第２フラグ情報とを格納して、
前記一方のＣＰＵコアが優先度の高い前記処理を完了すると、前記一方のＣＰＵコアは前記第１フラグ情報と前記第２フラグ情報との一方のフラグ情報を所定の状態にセットして、
前記一方のフラグ情報が前記所定の状態にセットされることに応答して、前記他方のＣＰＵコアによって中断された前記処理を前記他方のＣＰＵコアが再開して実行することが禁止され、前記他方のＣＰＵコアによって中断された前記処理を前記一方のＣＰＵコアが再開して実行することが許可される請求項１に記載のデータ処理装置。
【請求項３】
前記システムコントローラは前記第１ＣＰＵコアの前記第１レジスタファイルの内容を前記共有メモリの第１領域に格納する一方、前記第２ＣＰＵコアの前記第２レジスタファイルの内容を前記共有メモリの前記第１領域と異なる第２領域に格納するアドレス管理ユニットを含む請求項１と請求項２のいずれかに記載のデータ処理装置。
【請求項４】
前記データ処理装置は、前記第１ＣＰＵコアと前記第２ＣＰＵコアとに接続された内部メモリを更に具備する一方、メインメモリと接続可能であり、
前記内部メモリと前記メインメモリとの少なくともいずれか一方に、前記他方のＣＰＵコの前記レジスタファイルの前記プログラムカウンタの前記内容と前記ステータスレジスタの前記内容とが退避される前記スタック領域が形成される請求項１から請求項３のいずれかに記載のデータ処理装置。
【請求項５】
第１ＣＰＵコアと、第２ＣＰＵコアとを具備して、
前記第１ＣＰＵコアは第１レジスタファイルと第１命令デコーダ・演算器とを含み、前記第２ＣＰＵコアは第２レジスタファイルと第２命令デコーダ・演算器とを含み、
前記第１ＣＰＵコアの前記第１レジスタファイルの内容と前記第２ＣＰＵコアは前記第２レジスタファイルの内容とを格納する共有メモリを更に具備して、
前記第１ＣＰＵコアは前記第２ＣＰＵコアの前記第２レジスタファイル内部のスタックポインタの値を格納するための第１記憶回路を含み、前記第２ＣＰＵコアは前記第１ＣＰＵコアの前記第１レジスタファイル内部のスタックポインタの値を格納するための第２記憶回路を含み、
前記第１ＣＰＵコアと前記第２ＣＰＵコアとの一方のＣＰＵコアが優先度の高い処理を実行している間に、前記第１ＣＰＵコアと前記第２ＣＰＵコアとの他方のＣＰＵコアに前記一方のＣＰＵコアが実行している前記処理よりも優先度の低い要求が発生することによって、優先度の低い前記要求は前記他方のＣＰＵコアによって実行されることなく中断され、前記他方のＣＰＵコアの前記レジスタファイルのプログラムカウンタの内容とステータスレジスタの内容とがスタック領域に退避される一方、前記他方のＣＰＵコアのレジスタファイルのその他の内容が前記共有メモリに退避され、
前記一方のＣＰＵコアが優先度の高い前記処理を完了すると、前記一方のＣＰＵコアは前記共有メモリに退避された前記他方のＣＰＵコアの前記レジスタファイルの前記その他の内容を読み出して、読み出された前記他方のＣＰＵコアの前記レジスタファイルの前記その他の内容を前記一方のＣＰＵコアの前記レジスタファイルに格納する処理と、前記一方のＣＰＵコアは、前記他方のＣＰＵコアの前記レジスタファイルのスタックポインタの内容を前記第１記憶回路と前記第２記憶回路の一方の記憶回路に転送する処理と、前記一方のＣＰＵコアは、前記一方の記憶回路に転送された前記スタックポインタの前記内容で指示される前記スタック領域から前記他方のＣＰＵコアの前記レジスタファイルの前記プログラムカウンタの前記内容と前記ステータスレジスタの前記内容とを読み出して、読み出された前記プログラムカウンタの前記内容と前記ステータスレジスタの前記内容とを前記一方のＣＰＵコアの前記レジスタファイルのプログラムカウンタとステータスレジスタとにそれぞれ格納する処理とを実行して、
その後、前記一方のＣＰＵコアは、前記一方のＣＰＵコアの前記レジスタファイルに格納された前記他方のＣＰＵコアの前記レジスタファイルの前記その他の内容と前記一方のＣＰＵコアの前記レジスタファイルの前記プログラムカウンタと前記ステータスレジスタとにそれぞれ格納された前記他方のＣＰＵコアの前記レジスタファイルの前記プログラムカウンタの前記内容と前記ステータスレジスタの前記内容とを使用することによって、前記他方のＣＰＵコアによって中断された前記処理を前記一方のＣＰＵコアが再開して実行するデータ処理装置。
【請求項６】
前記第１ＣＰＵコアと前記第２ＣＰＵコアとに接続されたシステムコントローラを更に具備して、
前記システムコントローラは、第１フラグ情報と第２フラグ情報とを格納して、
前記一方のＣＰＵコアが優先度の高い前記処理を完了すると、前記一方のＣＰＵコアは前記第１フラグ情報と前記第２フラグ情報との一方のフラグ情報を所定の状態にセットして、
前記一方のフラグ情報が前記所定の状態にセットされることに応答して、前記他方のＣＰＵコアによる前記共有メモリに退避された前記他方のＣＰＵコアの前記レジスタファイルの前記その他の内容の読み出しが禁止される一方、前記一方のＣＰＵコアによる前記共有メモリに退避された前記他方のＣＰＵコアの前記レジスタファイルの前記その他の内容の読み出しが許可され、前記他方のＣＰＵコアによる前記スタック領域から前記他方のＣＰＵコアの前記レジスタファイルの前記プログラムカウンタの前記内容と前記ステータスレジスタの前記内容とを読み出しが禁止されて、前記一方のＣＰＵコアによる前記スタック領域から前記他方のＣＰＵコアの前記レジスタファイルの前記プログラムカウンタの前記内容と前記ステータスレジスタの前記内容との読み出しが許可され、読み出された前記プログラムカウンタの前記内容と前記ステータスレジスタの前記内容とを前記一方のＣＰＵコアの前記レジスタファイルのプログラムカウンタとステータスレジスタとにそれぞれ格納する請求項５に記載のデータ処理装置。
【請求項７】
前記一方のフラグ情報が前記所定の状態にセットされることに応答して、前記他方のＣＰＵコアによって中断された前記処理を前記他方のＣＰＵコアが再開して実行することが禁止され、前記他方のＣＰＵコアによって中断された前記処理を前記一方のＣＰＵコアが再開して実行することが許可される請求項６に記載のデータ処理装置。
【請求項８】
前記システムコントローラは前記第１ＣＰＵコアの前記第１レジスタファイルの内容を前記共有メモリの第１領域に格納する一方、前記第２ＣＰＵコアの前記第２レジスタファイルの内容を前記共有メモリの前記第１領域と異なる第２領域に格納するアドレス管理ユニットを含む請求項５から請求項７のいずれかに記載のデータ処理装置。
【請求項９】
前記データ処理装置は、前記第１ＣＰＵコアと前記第２ＣＰＵコアとに接続された内部メモリを更に具備する一方、メインメモリと接続可能であり、
前記内部メモリと前記メインメモリとの少なくともいずれか一方に、前記他方のＣＰＵコの前記レジスタファイルの前記プログラムカウンタの前記内容と前記ステータスレジスタの前記内容とが退避される前記スタック領域が形成される請求項５から請求項７のいずれかに記載のデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のＣＰＵコアを有するデータ処理装置に関し、特にマルチＣＰＵコアのタスクのスケジューリングを容易とするのに有益な技術に関する。
【背景技術】
【０００２】
マイクロコンピュータのようなデータ処理装置においては、割込み例外処理や、マルチタスクでのタスク切換え時には、元の状態に復帰するために汎用レジスタもしくはレジスタファイルのステータスレジスタ等のレジスタファイルのデータ退避が行なわれる。退避先としては、外部のメインメモリ等のスタック領域を利用することも可能であるが、レジスタバンクと呼ばれる専用レジスタバンクを用いることでレジスタファイルの退避及び復帰を高速化することができ、リアルタイムな応答を実現できるようになる。
【０００３】
下記特許文献１にはレジスタバンク方式のシングルチップでオーバーフローフラグを設けることにより、レジスタバンクがすべて使用状態であってもスタック領域に退避することが出来るようにすることで、効率的に割込み応答が可能なレジスタバンク方式を実現している。
【０００４】
一方、下記非特許文献１には、デュアルＣＰＵコアをチップ上に搭載したプロセッサが記載されている。
【０００５】
【特許文献１】特開２００４−１５７６３６号公報
【非特許文献１】Ｓａｍｕｅｌ  Ｎａｆｆｚｉｇｅｒ  ｅｔ  ａｌ，“Ｔｈｅ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ  ｏｆ  ａ  ２−Ｃｏｒｅ，  Ｍｕｌｔｉ−Ｔｈｒｅａｄｅｄ  Ｉｔａｎｉｕｍ  Ｆａｍｉｌｙ  Ｐｒｏｃｅｓｓｏｒ”，  ＩＥＥＥ  ＪＯＵＲＮＡＬ  ＯＦ  ＳＯＬＩＤ−ＳＴＡＴＥ  ＣＩＲＣＵＩＴＳ，  ＶＯＬ．  ４１，  Ｎ．１  ＪＡＮＵＡＲＹ  ２００６，  ＰＰ．１９７−２０９．
【発明の開示】
【発明が解決しようとする課題】
【０００６】
マルチタスク環境での近年の処理要求の増大に対応するために、ＣＰＵ（中央処理ユニット）を複数備えたマルチＣＰＵコアのデータ処理装置が検討されている。
【０００７】
本発明に先立って本発明者等は、メモリを共有するマルチコアＣＰＵにおいて、割込み等の高速切り換え処理するデータ退避のための前記レジスタバンクを複数のＣＰＵで共有する共有レジスタバンクを採用することを検討した。しかしながら、マルチコアＣＰＵで各ＣＰＵコアに任意にタスクを実行させていくと、条件によってタスクのスケジューリングの問題が発生することが判明した。
【０００８】
具体的には例えば、共有レジスタバンクを有するマルチコアＣＰＵにおいて、２つのＣＰＵコアの一方のＣＰＵコアが優先度の高い処理を行なっている間に、他方のＣＰＵコアに一方のＣＰＵコアよりも優先度の低い複数の処理要求が連続して発生したとする。スーパースカラー・アーキテクチャー等によるマルチコアＣＰＵにおいては、一方のＣＰＵコアでの優先度の高い処理と他方のＣＰＵコアでの優先度の低い処理とがそれぞれのＣＰＵコアのレジスタファイルを使用することで実行可能であり、２つの処理の実行のために内蔵ＲＡＭ、外部のメインメモリ、入出力装置、周辺装置のハードウェアリソースの使用の競合が発生せずに、優先度の高い処理の結果と優先度の低い処理の結果とが独立であれば、２つの処理は並列に実行可能である。
【０００９】
しかし、２つの処理並列の実行条件が満足されなければ、他方のＣＰＵコアでの優先度の低い処理は実行されることができず、中断されることとなる。この中断に際して、最初は他方のＣＰＵコアのレジスタファイルの内容は、共有レジスタバンクに退避される。しかし、処理要求の連続発生によって、退避先の共有レジスタバンクがオーバーフローする。すると、他方のＣＰＵコアのレジスタバンクに中断された処理が、内蔵ＲＡＭや外部のメインメモリの複数のスタック領域に退避されることになる。しかる後に一方のＣＰＵコアが優先度の高い処理が終了した時点で、新たな処理要求が無い場合には、処理のストールが生じてタスクのスケジューリングが不可能となる。これは新たな処理要求が与えられていない一方のＣＰＵコアが、他方のＣＰＵコアに関して処理待ちの優先度の低い複数の処理要求が外部のメインメモリの複数のスタック領域に退避されていることを認識できないことに起因している。
【００１０】
その結果、他方のＣＰＵコアに関しては処理待ちの優先度の低い複数の処理要求が外部のメインメモリの複数のスタック領域に退避されているにもかかわらず、新たな処理要求が与えられていない一方のＣＰＵコアはアイドル状態（ストール状態）となってしまうことが判明した。
【００１１】
本発明は本発明に先立って本発明者等によって行われた上記のような検討の結果を基にしてなされたものであり、その目的とするところは、マルチＣＰＵコアのデータ処理装置においてタスクのスケジューリングを容易とすることにある。
【００１２】
また本発明のその他の目的とするところは、マルチＣＰＵコアのデータ処理装置において優先度の高い処理を行なっていた一方のＣＰＵコアが優先度の高い処理が終了した時点で、一方のＣＰＵコアに新たな処理要求が与えられていない場合の一方のＣＰＵコアでのアイドル状態（ストール状態）を回避することにある。
【００１３】
本発明の前記並びにその他の目的と新規な特徴とは、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１４】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば、下記の通りである。
【００１５】
すなわち、本発明のひとつの形態によるデータ処理装置（１）は、第１ＣＰＵコア（２）と、第２ＣＰＵコア（３）とを具備する。前記第１ＣＰＵコア（２）は第１レジスタファイル（２１）と第１命令デコーダ・演算器（２２）とを含み、前記第２ＣＰＵコア（３）は第２レジスタファイル（３１）と第２命令デコーダ・演算器（３２）とを含んでいる。前記データ処理装置（１）は、前記第１ＣＰＵコア（２）の前記第１レジスタファイル（２１）の内容と前記第２ＣＰＵコア（３）は前記第２レジスタファイル（３１）の内容とを格納する共有メモリ（５）を更に具備する。
【００１６】
前記第１ＣＰＵコア（２）は前記第２ＣＰＵコア（３）の前記第２レジスタファイル（３１）内部のスタックポインタ（ＳＰ、Ｒ１５）の値をあたかも前記第１ＣＰＵコア（２）のスタックポインタの値として処理するための第１記憶回路（（Ｖｔｌ＿ＳＰ）２３）を含み、前記第２ＣＰＵコア（３）は前記第１ＣＰＵコア（２）の前記第１レジスタファイル（２１）内部のスタックポインタ（ＳＰ、Ｒ１５）の値をあたかも前記第２ＣＰＵコア（３）のスタックポインタの値として処理するための第２記憶回路（（Ｖｔｌ＿ＳＰ）３３）を含んでいる。
【００１７】
前記第１ＣＰＵコア（２）と前記第２ＣＰＵコア（３）との一方のＣＰＵコア（第２ＣＰＵコア（３））が優先度の高い処理を実行している間に、前記第１ＣＰＵコア（２）と前記第２ＣＰＵコア（３）との他方のＣＰＵコア（第１ＣＰＵコア（２））に前記一方のＣＰＵコア（第２ＣＰＵコア（３））が実行している前記処理よりも優先度の低い要求が発生することによって、優先度の低い前記要求は前記他方のＣＰＵコア（第１ＣＰＵコア（２））によって実行されることなく中断され、前記他方のＣＰＵコア（第１ＣＰＵコア（２））の前記レジスタファイル（第１レジスタファイル（２１））のプログラムカウンタ（ＰＣ）の内容とステータスレジスタ（ＳＲ）の内容とがスタック領域に退避される一方、前記他方のＣＰＵコア（第１ＣＰＵコア（２））のレジスタファイル（第１レジスタファイル（２１））のその他の内容が前記共有メモリ（５）に退避される。
【００１８】
前記一方のＣＰＵコア（第２ＣＰＵコア（３））が優先度の高い前記処理を完了すると、前記一方のＣＰＵコア（第２ＣＰＵコア（３））は前記共有メモリ（５）に退避された前記他方のＣＰＵコア（第１ＣＰＵコア（２））の前記レジスタファイル（第１レジスタファイル（２１））の前記その他の内容を前記一方のＣＰＵコア（第２ＣＰＵコア（３））のレジスタファイル（第２レジスタファイル（３１））に格納して、前記一方のＣＰＵコア（第２ＣＰＵコア（３））は、前記他方のＣＰＵコア（第１ＣＰＵコア（２））の前記レジスタファイル（第１レジスタファイル（２１））のスタックポインタ（ＳＰ）の内容を前記第１記憶回路（（Ｖｔｌ＿ＳＰ）２３）と前記第２記憶回路（（Ｖｔｌ＿ＳＰ）３３）の一方の記憶回路（第２記憶回路（３３））に転送する。次に、前記他方のＣＰＵコア（第１ＣＰＵコア（２））によって中断された前記処理を前記一方のＣＰＵコア（第２ＣＰＵコア（３））が再開して実行する（図１参照）。
【００１９】
本発明の前記ひとつの形態による手段によれば、マルチＣＰＵコアのデータ処理装置において優先度の高い処理を行なっていた一方のＣＰＵコア（第２ＣＰＵコア（３））が優先度の高い処理が終了した時点で、一方のＣＰＵコア（第２ＣＰＵコア（３））に新たな処理要求が与えられていない場合に、他方のＣＰＵコア（第１ＣＰＵコア（２））によって中断された処理を一方のＣＰＵコア（第２ＣＰＵコア（３））が再開して実行するものである。その結果、一方のＣＰＵコア（第２ＣＰＵコア（３））でのアイドル状態（ストール状態）を回避することが可能となる。
【００２０】
本発明の１つの好適な形態によるデータ処理装置（１）は、前記第１ＣＰＵコア（２）と前記第２ＣＰＵコア（３）とに接続されたシステムコントローラ（４）を更に具備する。前記システムコントローラ（４）は、第１フラグ情報（ＢＬ０）と第２フラグ情報（ＢＬ１）とを格納する。
【００２１】
前記一方のＣＰＵコア（第２ＣＰＵコア（３））が優先度の高い前記処理を完了すると、前記一方のＣＰＵコア（第２ＣＰＵコア（３））は前記第１フラグ情報（ＢＬ０）と前記第２フラグ情報（ＢＬ１）との一方のフラグ情報（ＢＬ１）を所定の状態（”１”）にセットする。前記一方のフラグ情報（ＢＬ１）が前記所定の状態（”１”）にセットされることに応答して、前記他方のＣＰＵコア（第１ＣＰＵコア（２））によって中断された前記処理を前記他方のＣＰＵコア（第１ＣＰＵコア（２））が再開して実行することが禁止され、前記他方のＣＰＵコア（第１ＣＰＵコア（２））によって中断された前記処理を前記一方のＣＰＵコア（第２ＣＰＵコア（３））が再開して実行することが許可される。
【００２２】
本発明の他の１つの更に好適な形態によるデータ処理装置（１）では、前記システムコントローラ（４）は前記第１ＣＰＵコア（２）の前記第１レジスタファイル（２１）の内容を前記共有メモリ（５）の第１領域（Ｒｅｇｂａｎｋ０、２、４…）に格納する一方、前記第２ＣＰＵコア（３）の前記第２レジスタファイル（３１）の内容を前記共有メモリ（５）の前記第１領域（Ｒｅｇｂａｎｋ０、２、４…）と異なる第２領域（Ｒｅｇｂａｎｋ１、３、５…）に格納するアドレス管理ユニット（４１、４２…４８、４９）を含む。
格納する共有バンクメモリ（５）を更に具備する（図１参照）。
【００２３】
本発明の前記他の１つの好適な形態による手段によれば、相手側のＣＰＵコアからの前記共有メモリ（５）退避データの上書きによるデータ破壊を回避することが可能である。
【００２４】
本発明の最も具体的な形態によるデータ処理装置（１）は、前記第１ＣＰＵコア（２）と前記第２ＣＰＵコア（３）とに接続された内部メモリ（ＲＡＭ８）を更に具備する一方、メインメモリと接続可能である。
【００２５】
前記内部メモリ（ＲＡＭ８）と前記メインメモリとの少なくともいずれか一方に、前記他方のＣＰＵコア（第１ＣＰＵコア（２））の前記レジスタファイル（第１レジスタファイル（２１））の前記プログラムカウンタ（ＰＣ）の前記内容と前記ステータスレジスタ（ＳＲ）の前記内容とが退避される前記スタック領域が形成される。
【００２６】
また、本発明の他のひとつの形態によるデータ処理装置（１）は、第１ＣＰＵコア（２）と、第２ＣＰＵコア（３）とを具備する。前記第１ＣＰＵコア（２）は第１レジスタファイル（２１）と第１命令デコーダ・演算器（２２）とを含み、前記第２ＣＰＵコア（３）は第２レジスタファイル（３１）と第２命令デコーダ・演算器（３２）とを含んでいる。前記データ処理装置（１）は、前記第１ＣＰＵコア（２）の前記第１レジスタファイル（２１）の内容と前記第２ＣＰＵコア（３）は前記第２レジスタファイル（３１）の内容とを格納する共有メモリ（５）を更に具備する。
【００２７】
前記第１ＣＰＵコア（２）は前記第２ＣＰＵコア（３）の前記第２レジスタファイル（３１）内部のスタックポインタ（ＳＰ、Ｒ１５）の値を格納するための第１記憶回路（（Ｖｔｌ＿ＳＰ）２３）を含み、前記第２ＣＰＵコア（３）は前記第１ＣＰＵコア（２）の前記第１レジスタファイル（２１）内部のスタックポインタ（ＳＰ、Ｒ１５）の値を格納するための第２記憶回路（（Ｖｔｌ＿ＳＰ）３３）を含んでいる。
【００２８】
前記第１ＣＰＵコア（２）と前記第２ＣＰＵコア（３）との一方のＣＰＵコア（第２ＣＰＵコア（３））が優先度の高い処理を実行している間に、前記第１ＣＰＵコア（２）と前記第２ＣＰＵコア（３）との他方のＣＰＵコア（第１ＣＰＵコア（２））に前記一方のＣＰＵコア（第２ＣＰＵコア（３））が実行している前記処理よりも優先度の低い要求が発生することによって、優先度の低い前記要求は前記他方のＣＰＵコア（第１ＣＰＵコア（２））によって実行されることなく中断され、前記他方のＣＰＵコア（第１ＣＰＵコア（２））の前記レジスタファイル（第１レジスタファイル（２１））のプログラムカウンタ（ＰＣ）の内容とステータスレジスタ（ＳＲ）の内容とがスタック領域に退避される一方、前記他方のＣＰＵコア（第１ＣＰＵコア（２））のレジスタファイル（第１レジスタファイル（２１））のその他の内容が前記共有メモリ（５）に退避される。
【００２９】
前記一方のＣＰＵコア（第２ＣＰＵコア（３））が優先度の高い前記処理を完了すると、前記一方のＣＰＵコア（第２ＣＰＵコア（３））は前記共有メモリ（５）に退避された前記他方のＣＰＵコア（第１ＣＰＵコア（２））の前記レジスタファイル（第１レジスタファイル（２１））の前記その他の内容を読み出して、読み出された前記他方のＣＰＵコア（第１ＣＰＵコア（２））の前記レジスタファイル（第１レジスタファイル（２１））の前記その他の内容を前記一方のＣＰＵコア（第２ＣＰＵコア（３））のレジスタファイル（第２レジスタファイル（３１））に格納する処理と、前記一方のＣＰＵコア（第２ＣＰＵコア（３））は、前記他方のＣＰＵコア（第１ＣＰＵコア（２））の前記レジスタファイル（第１レジスタファイル（２１））のスタックポインタ（ＳＰ）の内容を前記第１記憶回路（（Ｖｔｌ＿ＳＰ）２３）と前記第２記憶回路（（Ｖｔｌ＿ＳＰ）３３）の一方の記憶回路（第２記憶回路（３３））に転送する処理と、前記一方のＣＰＵコア（第２ＣＰＵコア（３））は、前記一方の記憶回路（第２記憶回路（３３））に転送された前記スタックポインタ（ＳＰ）の前記内容で指示される前記スタック領域から前記他方のＣＰＵコア（第１ＣＰＵコア（２））の前記レジスタファイル（第１レジスタファイル（２１））の前記プログラムカウンタ（ＰＣ）の前記内容と前記ステータスレジスタ（ＳＲ）の前記内容とを読み出して、読み出された前記プログラムカウンタ（ＰＣ）の前記内容と前記ステータスレジスタ（ＳＲ）の前記内容とを前記一方のＣＰＵコア（第２ＣＰＵコア（３））の前記レジスタファイル（第２レジスタファイル（３１））のプログラムカウンタ（ＰＣ）とステータスレジスタ（ＳＲ）とにそれぞれ格納する処理とを実行する。
【００３０】
その後、前記一方のＣＰＵコア（第２ＣＰＵコア（３））は、前記一方のＣＰＵコア（第２ＣＰＵコア（３））の前記レジスタファイル（第２レジスタファイル（３１））に格納された前記他方のＣＰＵコア（第１ＣＰＵコア（２））の前記レジスタファイル（第１レジスタファイル（２１））の前記その他の内容と前記一方のＣＰＵコア（第２ＣＰＵコア（３））の前記レジスタファイル（第２レジスタファイル（３１））の前記プログラムカウンタ（ＰＣ）と前記ステータスレジスタ（ＳＲ）とにそれぞれ格納された前記他方のＣＰＵコア（第１ＣＰＵコア（２））の前記レジスタファイル（第１レジスタファイル（２１））の前記プログラムカウンタ（ＰＣ）の前記内容と前記ステータスレジスタ（ＳＲ）の前記内容とを使用することによって、前記他方のＣＰＵコア（第１ＣＰＵコア（２））によって中断された前記処理を前記一方のＣＰＵコア（第２ＣＰＵコア（３））が再開して実行する（図１参照）。
【００３１】
本発明の前記他のひとつの形態による手段によれば、マルチＣＰＵコアのデータ処理装置において優先度の高い処理を行なっていた一方のＣＰＵコア（第２ＣＰＵコア（３））が優先度の高い処理が終了した時点で、一方のＣＰＵコア（第２ＣＰＵコア（３））に新たな処理要求が与えられていない場合に、他方のＣＰＵコア（第１ＣＰＵコア（２））によって中断された処理を一方のＣＰＵコア（第２ＣＰＵコア（３））が再開して実行するものである。その結果、一方のＣＰＵコア（第２ＣＰＵコア（３））でのアイドル状態（ストール状態）を回避することが可能となる。
【００３２】
本発明の他の１つの好適な形態によるデータ処理装置（１）は、前記第１ＣＰＵコア（２）と前記第２ＣＰＵコア（３）とに接続されたシステムコントローラ（４）を更に具備する。前記システムコントローラ（４）は、第１フラグ情報（ＢＬ０）と第２フラグ情報（ＢＬ１）とを格納する。
【００３３】
前記一方のＣＰＵコア（第２ＣＰＵコア（３））が優先度の高い前記処理を完了すると、前記一方のＣＰＵコア（第２ＣＰＵコア（３））は前記第１フラグ情報（ＢＬ０）と前記第２フラグ情報（ＢＬ１）との一方のフラグ情報（ＢＬ１）を所定の状態（”１”）にセットする。
【００３４】
前記一方のフラグ情報（ＢＬ１）が前記所定の状態（”１”）にセットされることに応答して、前記他方のＣＰＵコア（第１ＣＰＵコア（２））による前記共有メモリ（５）に退避された前記他方のＣＰＵコア（第１ＣＰＵコア（２））の前記レジスタファイル（第１レジスタファイル（２１））の前記その他の内容の読み出しが禁止される一方、前記一方のＣＰＵコア（第２ＣＰＵコア（３））による前記共有メモリ（５）に退避された前記他方のＣＰＵコア（第１ＣＰＵコア（２））の前記レジスタファイル（第１レジスタファイル（２１））の前記その他の内容の読み出しが許可され、前記他方のＣＰＵコア（第１ＣＰＵコア（２））による前記スタック領域から前記他方のＣＰＵコア（第１ＣＰＵコア（２））の前記レジスタファイル（第１レジスタファイル（２１））の前記プログラムカウンタ（ＰＣ）の前記内容と前記ステータスレジスタ（ＳＲ）の前記内容とを読み出しが禁止されて、前記一方のＣＰＵコア（第２ＣＰＵコア（３））による前記スタック領域から前記他方のＣＰＵコア（第１ＣＰＵコア（２））の前記レジスタファイル（第１レジスタファイル（２１））の前記プログラムカウンタ（ＰＣ）の前記内容と前記ステータスレジスタ（ＳＲ）の前記内容との読み出しが許可され、読み出された前記プログラムカウンタ（ＰＣ）の前記内容と前記ステータスレジスタ（ＳＲ）の前記内容とを前記一方のＣＰＵコア（第２ＣＰＵコア（３））の前記レジスタファイル（第２レジスタファイル（３１））のプログラムカウンタ（ＰＣ）とステータスレジスタ（ＳＲ）とにそれぞれ格納する（図１参照）。
【００３５】
本発明の前記他の１つの好適な形態による手段によれば、マルチタスクのスケジューリングが容易となる。
【００３６】
本発明の他の１つの更に好適な形態によるデータ処理装置（１）では、前記一方のフラグ情報（ＢＬ１）が前記所定の状態（”１”）にセットされることに応答して、前記他方のＣＰＵコア（第１ＣＰＵコア（２））によって中断された前記処理を前記他方のＣＰＵコア（第１ＣＰＵコア（２））が再開して実行することが禁止され、前記他方のＣＰＵコア（第１ＣＰＵコア（２））によって中断された前記処理を前記一方のＣＰＵコア（第２ＣＰＵコア（３））が再開して実行することが許可される。
【発明の効果】
【００３７】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば、下記の通りである。
【００３８】
すなわち、本発明によれば、マルチＣＰＵコアのデータ処理装置においてタスクのスケジューリングを容易とすることができる。
【００３９】
また、本発明によれば、マルチＣＰＵコアのデータ処理装置において優先度の高い処理を行なっていた一方のＣＰＵコアが優先度の高い処理が終了した時点で、一方のＣＰＵコアに新たな処理要求が与えられていない場合の一方のＣＰＵコアでのアイドル状態（ストール状態）を回避することも可能である。
【発明を実施するための最良の形態】
【００４０】
≪マルチＣＰＵコアのデータ処理装置の構成≫
図１は、本発明の１つの実施形態によるマルチＣＰＵコアのデータ処理装置を示す図である。
【００４１】
同図に示すように、マイクロコンピュータ１は、第１ＣＰＵコア２と第２ＣＰＵコア３との２つのＣＰＵコアからなるデュアルコアプロセッサである。第１ＣＰＵコア２と第２ＣＰＵコア３には、割り込みやリセットによるＣＰＵの動作制御を行うシステムコントローラ４が接続されている。
【００４２】
第１ＣＰＵコア２は第１レジスタファイル２１と第１命令デコーダ・演算器２２とを含み、第２ＣＰＵコア３は第２レジスタファイル３１と第２命令デコーダ・演算器３２とを含んでいる。
【００４３】
第１ＣＰＵコア２は専用の第１ＣＰＵバス１２に接続されて、第２ＣＰＵコア３は専用の第２ＣＰＵバス１３に接続され、第１ＣＰＵコア２と第２ＣＰＵコア３とは共有のレジスタバンクバス１１を介してバンクメモリ５に接続されている。このバンクメモリ５は、第１ＣＰＵコア２の第１レジスタファイル２１と第２ＣＰＵコア３の第２レジスタファイル３１の退避及び復帰を高速化するレジスタバンクＲｅｇ＿Ｂｋを含んでいる。
【００４４】
また、特に本発明の１つの実施形態では、第１ＣＰＵコア２は第２ＣＰＵコア３の第２レジスタファイル３１内部のスタックポインタＳＰの値をあたかも自己のスタックポインタの値として処理するための第１仮想スタックポインタ（Ｖｔｌ＿ＳＰ）２３を含み、同様に第２ＣＰＵコア３は第１ＣＰＵコア２の第１レジスタファイル２１内部のスタックポインタＳＰの値をあたかも自己のスタックポインタの値として処理するための第２仮想スタックポインタ（Ｖｔｌ＿ＳＰ）３３を含んでいる。良く知られているように、スタックポインタは、サブルーチン実行時や割り込み処理時にレジスタファイルや汎用レジスタの内容を退避するメモリのスタック領域の最上位のアドレスを示すものである。
【００４５】
第１ＣＰＵバス１２と第２ＣＰＵバス１３には、デュアルポートの不揮発性フラッシュメモリ等のリードオンリーメモリ（ＲＯＭ）７と、デュアルポートのスタティックランダムアクセスメモリ等のランダムアクセスメモリ（ＲＡＭ）８と、バスステートコントローラ９とが接続されている。バスステートコントローラ９はシステムバス１４にも接続され、システムバス１４には割り込みコントローラ６と入出力ポート１０とが接続されている。従って、第１ＣＰＵコア２は第１ＣＰＵバス１２を介してＲＯＭ７、ＲＡＭ８をアクセスして、更にバスステートコントローラ９を経由してシステムバス１４に接続された割り込みコントローラ６と入出力ポート１０とをアクセスすることができる。同様に、第２ＣＰＵコア３は第２ＣＰＵバス１３を介してＲＯＭ７、ＲＡＭ８をアクセスして、更にバスステートコントローラ９を経由してシステムバス１４に接続された割り込みコントローラ６と入出力ポート１０とをアクセスすることができる。
【００４６】
割り込みコントローラ６は、外部からの割り込み要因を整理して、システムコントローラ４に通知する。ＲＡＭ８は、第１ＣＰＵコア２及び第２ＣＰＵコア３の一時的記憶領域もしくはワーク領域となる。ＲＯＭ７には、第１ＣＰＵコア２及び第２ＣＰＵコア３の動作プログラムが格納される。
【００４７】
図１の左上と右上とに第１ＣＰＵコア２の第１レジスタファイル２１と第２ＣＰＵコア３の第２レジスタファイル３１がそれぞれ示されている。２つの第１レジスタファイル２１、３１は、同一のレジスタの構成となっており、現在実行中のプログラムのメモリアドレスを指定するプログラムカウンタＰＣと、サブルーチンプロシージャからの戻りアドレスを格納するプロシージャレジスタＰＲと、グローバルベースレジスタ間接アドレッシングモードのベースアドレスを示すグローバルベースレジスタＧＢＲと、ＣＰＵコアの状態を示すステータスレジスタＳＲと、乗算と積和演算の結果を格納する２つの積和レジスタＭＡＣＨ、ＭＡＣＬと、データ処理やアドレス計算に使用される１６本の汎用レジスタＲ０…Ｒ１５とを含んでいる。
【００４８】
１６本目の汎用レジスタＲ１５は、ハードウェアスタックポインタＳＰとして使用される。割り込み処理時や例外処理時でのステータスレジスタＳＲとプログラムカウンタＰＣの退避、復帰は１６本目の汎用レジスタＲ１５（ＳＰ）を用いてＲＡＭ８や入出力ポート１０に接続される外部のメインメモリのスタック領域を参照して実行される。
【００４９】
一方、第１レジスタファイル２１、３１内部で、破線Ｓｖ＿Ｒｅｇ＿ＢＫで囲まれたレジスタの内容は、オーバーフローしない限りはバンクメモリ５のレジスタバンクＲｅｇ＿Ｂｋに退避され、バンクメモリ５のレジスタバンクＲｅｇ＿ＢｋがオーバーフローするとＲＡＭ８や入出力ポート１０に接続される外部のメインメモリのスタック領域に退避される。
【００５０】
図１の左下にバンクメモリ５のレジスタバンクＲｅｇ＿Ｂｋの詳細が、示されている。
【００５１】
レジスタ退避用のレジスタバンクＲｅｇ＿Ｂｋとして、メモリバンク５のメモリセルアレイに割り当てられたレジスタバンクＲｅｇｂａｎｋ０〜Ｒｅｇｂａｎｋｉが使用される。バンクメモリ５のレジスタバンクＲｅｇ＿Ｂｋに退避されるのは、上述したように２つの第１レジスタファイル２１、３１の汎用レジスタＲ０〜Ｒ１４と、グローバルベースレジスタＧＢＲと、２つの乗算レジスタＭＡＣＨ、ＭＡＣＬと、プロシージャレジスタＰＲ以外に、デバッグ情報としての割り込みに対するベクタ番号（ＩＶＮ）とされている。
【００５２】
また、本実施形態では、システムコントローラ４による論理制御によって、バンクメモリ５のレジスタバンクＲｅｇ＿Ｂｋの複数のレジスタバンクＲｅｇｂａｎｋ０〜Ｒｅｇｂａｎｋｉの内部で第１ＣＰＵコア２で割り込み発生時にレジスタ退避するためのレジスタバンクと第２ＣＰＵコア３で割り込み発生時にレジスタ退避するためのレジスタバンクとが区別される。
【００５３】
図１の上中央には、システムコントローラ４の詳細な構成が示されている。システムコントローラ４は、第１ＣＰＵコア２のための加減算器４１、レジスタバンクレジスタ（ＢＮ０）４３、演算器４５、バンクロックビットレジスタ（ＢＬ０）４７と、第２ＣＰＵコア３のための加減算器４２、レジスタバンクレジスタ（ＢＮ１）４４、演算器４６、バンクロックビットレジスタ（ＢＬ１）４８と、セレクタ４９とから構成されている。第１ＣＰＵコア２の割り込み退避時のバンクメモリ５のレジスタバンクＲｅｇ＿Ｂｋのレジスタバンクを指定するのがレジスタバンクレジスタＢＮ０であり、第２ＣＰＵコア３の割り込み退避時のバンクメモリ５のレジスタバンクＲｅｇ＿Ｂｋのレジスタバンクを指定するのがレジスタバンクレジスタＢＮ１である。マイクロコンピュータ１のパワーオン時やパワーオンリセット時のシステム初期化時に、レジスタバンクレジスタＢＮ０、ＢＮ１は共に“０”にリセットされる。
【００５４】
≪マルチＣＰＵコアのデータ処理装置の動作≫
割り込み例外処理が発生して、第１ＣＰＵコア２からバンクメモリ５のレジスタバンクＲｅｇ＿Ｂｋへの第１レジスタファィル２１の所定のレジスタセットＰＲ、ＧＢＲ、ＭＡＣＨ、ＭＡＣＬ、Ｒ０…Ｒ１４の内容のレジスタ退避要求が発生したと想定する。すると、レジスタバンクレジスタＢＮ０の値が、演算器４５によって２倍される。その演算結果がセレクタ４９で選択され、レジスタバンクレジスタＢＮ０の２倍の値が指示するバンクメモリ５のレジスタバンクＲｅｇｂａｎｋ０に所定のレジスタセットの内容が退避させられる。その後、レジスタバンクレジスタＢＮ０の値は加減算器４１で＋１インクリメントされてレジスタバンクレジスタＢＮ０に格納される。
【００５５】
第１ＣＰＵコア２からレジスタ復帰命令（ＲＥＳＢＡＮＫ命令）が発行された場合には、レジスタバンクレジスタＢＮ０の値はまず加減算器４１で−１ディクリメントされてレジスタバンクレジスタＢＮ０に格納される。続いてレジスタバンクレジスタＢＮ０の値を２倍した値がセレクタ４９で選択されて、バンクメモリ５のレジスタバンクＲｅｇｂａｎｋ０から第１レジスタファィル２１の所定のレジスタセットＰＲ、ＧＢＲ、ＭＡＣＨ、ＭＡＣＬ、Ｒ０…Ｒ１４へのレジスタ復帰データの転送が行なわれる。
【００５６】
同様に、第２ＣＰＵコア３で割り込み例外処理が発生して、バンクメモリ５のレジスタバンクＲｅｇ＿Ｂｋへの第２レジスタファィル３１の所定のレジスタセットＰＲ、ＧＢＲ、ＭＡＣＨ、ＭＡＣＬ、Ｒ０…Ｒ１４の内容の退避要求が発生したと想定する。すると、レジスタバンクレジスタＢＮ１の値が、演算器４４によって２倍された後＋１インクリメントされる。その演算結果がセレクタ４９で選択され、レジスタバンクレジスタＢＮ１の２倍に１を足した値が指示するバンクメモリ５のレジスタバンクＲｅｇｂａｎｋ１に所定のレジスタセットの内容が退避させられる。その後、レジスタバンクレジスタＢＮ１の値は加減算器４２で＋１インクリメントされてレジスタバンクレジスタＢＮ１に格納される。
【００５７】
第２ＣＰＵコア３からレジスタ復帰命令（ＲＥＳＢＡＮＫ命令）が発行された場合に、レジスタバンクレジスタＢＮ１の値はまず加減算器４３で−１ディクリメントされてレジスタバンクレジスタＢＮ１に格納される。続いてレジスタバンクレジスタＢＮ１の値を２倍して１足した値の指示するバンクメモリ５のレジスタバンクＲｅｇｂａｎｋ１から第２レジスタファィル３１の所定のレジスタセットＰＲ、ＧＢＲ、ＭＡＣＨ、ＭＡＣＬ、Ｒ０…Ｒ１４へのレジスタ復帰データの転送が行なわれる。このように、バンクメモリ５では、偶数番号のレジスタバンクＲｅｇｂａｎｋ０、２、４・・・で第１ＣＰＵコア２の第１レジスタファィル２１のレジスタセットの退避・復帰処理が行なわれ、奇数番号のレジスタバンクＲｅｇｂａｎｋ１、３、５・・・で第２ＣＰＵコア３の第２レジスタファィル３１レジスタセットの退避・復帰処理が行なわれることになる。尚、レジスタバンクレジスタＢＮ０、ＢＮ１は、次にレジスタセットの退避・復帰処理に使用されるバンクメモリ５のレジスタバンクの値を指示することになる。このように本実施形態では、第１ＣＰＵコア２の使用するレジスタバンクと第２ＣＰＵコア３の使用するレジスタバンクとをレジスタバンクレジスタＢＮ０、ＢＮ１により指示している。このように、第１ＣＰＵコア２に偶数番号のレジスタバンク、第２ＣＰＵコア３の奇数番号のレジスタバンクを割り当てることで、相手側のコアからのレジスタバンクの上書きによる破壊を回避している。
【００５８】
更に、本実施形態では、第２ＣＰＵコア３が多重割り込み状態にある一方、第１ＣＰＵコア２に実行すべき処理が無い場合に、第２ＣＰＵコア３からバンクメモリ５のレジスタバンクＲｅｇ＿Ｂｋに退避されている処理を第１ＣＰＵコア２が引き継ぐための第１仮想スタックポインタ（Ｖｔｌ＿ＳＰ）２３を第１ＣＰＵコア２が含んでいる。同様に、第１ＣＰＵコア２が多重割り込み状態にある一方、第２ＣＰＵコア３に実行すべき処理が無い場合に、第１ＣＰＵコア２からバンクメモリ５のレジスタバンクＲｅｇ＿Ｂｋに退避されている処理を第２ＣＰＵコア３が引き継ぐための第２仮想スタックポインタ（Ｖｔｌ＿ＳＰ）３３を第２ＣＰＵコア３が含んでいる。
【００５９】
また更に、本実施形態では、この第１仮想スタックポインタ（Ｖｔｌ＿ＳＰ）２３と第２仮想スタックポインタ（Ｖｔｌ＿ＳＰ）３３とに関係してシステムコンローラ４は、バンクロックビットレジスタ（ＢＬ０）４７、バンクロックビットレジスタ（ＢＬ１）４８を含んでいる。
【００６０】
次に図２の処理フローを参照して、バンクロックビットレジスタ（ＢＬ０）４７、バンクロックビットレジスタ（ＢＬ１）４８により制御される第１仮想スタックポインタ（Ｖｔｌ＿ＳＰ）２３と第２仮想スタックポインタ（Ｖｔｌ＿ＳＰ）３３の機能を説明する。尚、システムコンローラ４のバンクロックビットレジスタ（ＢＬ０）４７のバンクロックビットＢＬ０とバンクロックビットレジスタ（ＢＬ１）４８のバンクロックビットＢＬ１とは、最初はともに”０”にリセットされている。
【００６１】
まず、第２ＣＰＵコア３が優先度の高い処理を行なっている間に、第１ＣＰＵコア２に第２ＣＰＵコア３よりも優先度の低い複数の処理要求が連続して発生したとする。優先度の高い処理の実行と優先度の低い処理の実行とが並列に実行できない条件では、優先度の低い処理は第１ＣＰＵコア２により処理されることができず中断される。従って、最初は第１ＣＰＵコア２の第１レジスタファイル２１の内容は、バンクメモリ５のレジスタバンクＲｅｇ＿Ｂｋに退避される。しかし、処理要求の連続発生によって、退避先のバンクメモリ５のレジスタバンクＲｅｇ＿Ｂｋがオーバーフローする。すると、第１ＣＰＵコア２の第１レジスタファイル２１の内容は、内蔵ＲＡＭ８や外部のメインメモリの複数のスタック領域に退避されることになる。
【００６２】
その後、ステップ２０１で第２ＣＰＵコア３が優先度の高い処理が終了した時点で、第２ＣＰＵコア３に新たな処理要求が与えられていないと、第２ＣＰＵコア３はシステムコンローラ４のバンクロックビットレジスタ（ＢＬ１）４８のバンクロックビットＢＬ１を”０”から”１”にセットしようとする。この時に第１ＣＰＵコア２の第１レジスタファイル２１のレジスタセットのデータがバンクメモリ５のレジスタバンクＲｅｇ＿Ｂｋに退避されていなれば、レジスタバンクレジスタＢＮ０の値は“０”なので、バンクロックビットＢＬ１はセットされず“０”のままである。しかし、第１ＣＰＵコア２の第１レジスタファイル２１のレジスタセットのデータが退避されていればレジスタバンクレジスタＢＮ０の値は“１”以上なので、バンクロックビットレジスタ（ＢＬ１）４８のバンクロックビットＢＬ１は“１”にセットされる。それにより、第１ＣＰＵコア２の新たな割り込みは禁止されて、また第１ＣＰＵコア２によるレジスタ復帰命令（ＲＥＳＢＡＮＫ命令）の実行もストールされる。
【００６３】
続くステップ２０２で第２ＣＰＵコア３はシステムコンローラ４のバンクロックビットレジスタ（ＢＬ１）４８のバンクロックビットＢＬ１が“１”であるか否か確認する。“０”の場合はステップ２０３のアイドルルーチンの処理へ分岐して、“１”である場合にはステップ２０４へ分岐する。
【００６４】
ステップ２０３のアイドルルーチンの処理では、第２ＣＰＵ３には第１ＣＰＵコア２から引き継ぐ処理は無いのでこのフローを終了し、アイドル時に実行すべき処理へ移行する。
【００６５】
ステップ２０４では、第２ＣＰＵ３は退避先のバンクメモリ５のレジスタバンクＲｅｇ＿Ｂｋや内蔵ＲＡＭ８や外部のメインメモリに退避されていたデータを復帰するレジスタ復帰命令（ＲＥＳＢＡＮＫ命令）を実行する。このレジスタ復帰命令（ＲＥＳＢＡＮＫ命令）の実行は、バンクロックビットレジスタ（ＢＬ１）４８のバンクロックビットＢＬ１の“１”へのセットと、第１ＣＰＵコア２の第１レジスタファイル２１内部のスタックポインタＳＰの値をあたかも第２ＣＰＵコア３の第２レジスタファイル３１内部のスタックポインタＳＰの値であるかのように処理する第２仮想スタックポインタ（Ｖｔｌ＿ＳＰ）３３の引き継ぎ機能とにより実現されることができる。
【００６６】
すなわち、システムコンローラ４のバンクロックビットレジスタ（ＢＬ１）４８のバンクロックビットＢＬ１は、”１”にセットされている。従って、第２ＣＰＵ３によるレジスタ復帰命令（ＲＥＳＢＡＮＫ命令）の実行においては第２ＣＰＵ３のためのレジスタバンクレジスタＢＮ１の指示するレジスタバンクからではなく、第１ＣＰＵコア２のためのレジスタバンクレジスタＢＮ０の指示するバンクメモリ５のレジスタバンクＲｅｇ＿Ｂｋから、第１ＣＰＵ１の第１レジスタファイル２１のレジスタセットではなく、第２ＣＰＵ３の第２レジスタファイル２１のレジスタセットＰＲ、ＧＢＲ、ＭＡＣＨ、ＭＡＣＬ、Ｒ０…Ｒ１４へ、復帰データが格納される。また、１つのレジスタ復帰命令（ＲＥＳＢＡＮＫ命令）が実行されると、第２ＣＰＵ３はシステムコントローラ４の第１ＣＰＵコア２のためのレジスタバンクレジスタＢＮ０の値を−１デクリメントする。
【００６７】
次のステップ２０５では、バンクメモリ５のレジスタバンクＲｅｇ＿ＢｋではなくＲＡＭ８や入出力ポート１０に接続される外部のメインメモリのスタック領域に退避されていた第１ＣＰＵコア２の第１レジスタファイル２１のステータスレジスタＳＲの値とプログラムカウンタＰＣの値とを回復する割り込み復帰命令（ＲＴＥ命令）が、第２ＣＰＵコア３によって実行される。既に説明したように、ステータスレジスタＳＲとプログラムカウンタＰＣの退避、復帰は１６本目の汎用レジスタＲ１５（ＳＰ）を用いてＲＡＭ８や入出力ポート１０に接続される外部のメインメモリのスタック領域を参照して実行される。また、第２ＣＰＵコア３による割り込み復帰命令（ＲＴＥ命令）の実行も、第１ＣＰＵコア２の第１レジスタファイル２１内部のスタックポインタＳＰの値をあたかも第２ＣＰＵコア３の第２レジスタファイル３１内部のスタックポインタＳＰの値であるかのように処理する第２仮想スタックポインタ（Ｖｔｌ＿ＳＰ）３３の引き継ぎ機能により実現されることができる。まず、第２ＣＰＵコア３は、第２仮想スタックポインタ（Ｖｔｌ＿ＳＰ）３３によって指示される内蔵ＲＡＭ８や入出力ポート１０に接続される外部のメインメモリのスタック領域から第１ＣＰＵコア２の第１レジスタファイル２１のステータスレジスタＳＲの値とプログラムカウンタＰＣの値とを読み出す。次に、第２ＣＰＵコア３は、読み出された第１ＣＰＵコア２の第１レジスタファイル２１のステータスレジスタＳＲの値とプログラムカウンタＰＣの値とを第１ＣＰＵ１の第１レジスタファイル２１のステータスレジスタＳＲとプログラムカウンタＰＣとではなく第２ＣＰＵ３の第２レジスタファイル３１のステータスレジスタＳＲとプログラムカウンタＰＣとに格納する。次に、第２仮想スタックポインタ（Ｖｔｌ＿ＳＰ）３３の値はステータスレジスタＳＲの値とプログラムカウンタＰＣの値のサイズにより減算された後、演算結果は第１ＣＰＵコア２の第１レジスタファイル２１の１６本目の汎用レジスタＲ１５（ＳＰ）に格納される。その後、第２仮想スタックポインタ（Ｖｔｌ＿ＳＰ）３３はクリアされ、システムコンローラ４のバンクロックビットレジスタ（ＢＬ１）４８のバンクロックビットＢＬ１は”０”にリセットされる。
【００６８】
従って、第２ＣＰＵ３によるレジスタ復帰命令（ＲＥＳＢＡＮＫ命令）と割り込み復帰命令（ＲＴＥ命令）の実行の後には、第１ＣＰＵコア２のためのレジスタバンクレジスタＢＮ０の指示するバンクメモリ５のレジスタバンクＲｅｇ＿Ｂｋから第２ＣＰＵ３の第２レジスタファイル２１のレジスタセットＰＲ、ＧＢＲ、ＭＡＣＨ、ＭＡＣＬ、Ｒ０…Ｒ１４へ復帰データが格納され、第２仮想スタックポインタ（Ｖｔｌ＿ＳＰ）３３によって指示される内蔵ＲＡＭ８や入出力ポート１０に接続される外部のメインメモリのスタック領域から読み出された第１ＣＰＵコア２の第１レジスタファイル２１のステータスレジスタＳＲの値とプログラムカウンタＰＣの値とが第２ＣＰＵ３の第２レジスタファイル３１のステータスレジスタＳＲとプログラムカウンタＰＣとに格納されている。
【００６９】
次のステップ２０６では、第２ＣＰＵ３の第２レジスタファイル２１のレジスタセットＰＲ、ＧＢＲ、ＭＡＣＨ、ＭＡＣＬ、Ｒ０…Ｒ１４とステータスレジスタＳＲとプログラムカウンタＰＣとへそれぞれ格納された復帰データとステータス情報とプログラムカウンタ値とを使用して、第２ＣＰＵコア３は第１ＣＰＵコア２によって中断された処理を再開して実行することが可能となる。
【００７０】
以上の説明では、第２ＣＰＵコア３が優先度の高い処理を行なっている間に、第１ＣＰＵコア２に第２ＣＰＵコア３よりも優先度の低い複数の処理要求が連続して発生して、優先度の低い処理が第１ＣＰＵコア２にによって実行されずに中断され、その後、第２ＣＰＵコア３が優先度の高い処理が終了した時点で、第２ＣＰＵコア３は第１ＣＰＵコア２によって中断された処理を再開して実行するものである。
【００７１】
一方、本実施形態のマイクロプロセッサは対照型アーキテクチャーを採用しているので、上記と反対に、第１ＣＰＵコア２が優先度の高い処理を行なっている間に、第２ＣＰＵコア３に第１ＣＰＵコア２よりも優先度の低い複数の処理要求が連続して発生して、優先度の低い処理が第２ＣＰＵコア３によって実行されずに中断され、その後、第１ＣＰＵコア２が優先度の高い処理が終了した時点で、第１ＣＰＵコア２は第２ＣＰＵコア３によって中断された処理を再開して実行することは言うまでもないであろう。
【００７２】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【００７３】
例えば、図１において、第１ＣＰＵコア２にレベル１の第１のキャッシュメモリを接続して、第２ＣＰＵコア３にレベル１の第１のキャッシュメモリを接続して、バンクメモリ５のいくつかのレジスタバンクをレベル２の共有キャッシュメモリとして使用することも可能である。
【００７４】
更に、マイクロプロセッサ１内部のＣＰＵコアは２個以外の例えば４個としたマルチＣＰＵコアとすることも可能であり、更に極めて多数のＣＰＵコアを接続した超並列アーキテクチャーにも適用することも可能である。
【００７５】
また本発明は、マイクロコントローラやマイクロプロセッサ以外に各種の用途に使用されるシステムＬＳＩやディジタル・アナログ・ミックスド・シグナルＬＳＩのように、マルチメディア画像データの高速処理のために複数のＣＰＵコアを含むＬＳＩ全般に適用可能であることは言うまでもないであろう。
【産業上の利用可能性】
【００７６】
本発明は、複数のＣＰＵコアを含むマルチＣＰＵコアアーキテクチャーに広く実施することができる。
【図面の簡単な説明】
【００７７】
【図１】本発明の１つの実施形態によるマルチＣＰＵコアのデータ処理装置を示す図である。
【図２】図２は、図１に示したマルチＣＰＵコアのデータ処理装置の動作を説明するための処理フローである。
【符号の説明】
【００７８】
１  データプロセッサ
２、３  ＣＰＵコア
４  システムコントローラ
５  バンクメモリ
２１、３１  レジスタファィル
２２、３２  命令デコーダ＆演算回路部
２３  第１仮想スタックポインタ（Ｖｔｌ＿ＳＰ）
３３  第２仮想スタックポインタ（Ｖｔｌ＿ＳＰ）
６  割込みコントローラ
７  ＲＯＭ
８  ＲAM
９  バスステートコントローラ（ＢＳＣ）
１０  ＩＯポート
１１  レジスタバンクバス
１２、１３  ＣＰＵバス
１４  システムバス
２１、３１  レジスタセット
Ｒ０〜Ｒ１５  汎用レジスタ
ＳＰ  スタックポインタ
ＭＡＣＨ、ＭＡＣＬ  積和レジスタ
PＲ  プロシージャレジスタ
ＧＢＲ  グローバルベースレジスタ
ＳＲ  ステータスレジスタ
４１、４２  加減算器
４３、４４  レジスタバンクレジスタ
４５、４６  演算器
４７、４８  バンクロックビットレジスタ
４９  セレクタ
【図１】
2008015638.tif 000003
【図２】
2008015638.tif 000004