(57)【要約】【課題】  動的再構成プロセッサの利用においてマルチタスクを容易に実現する機能を提供する。【解決手段】  コンフィグレーション・データを切り替えることによってその機能を変更し、複数のスレッドを時分割で実行する動的再構成プロセッサを具備し、動的再構成プロセッサFEは、対応するスレッドが実行可能な状態か否かを示すフラグレジスタをスレッド毎に複数有するスレッド管理テーブルと、スレッド管理テーブルの情報に基づいて前記スレッドの切り替えを制御するシーケンサSEQとを有し、シーケンサは、前記複数のフラグレジスタの内容を参照することにより前記スレッドの切り替えを行う。【効果】  動的再構成プロセッサを含むチップにおけるマルチタスク処理を行う場合のオーバーヘッドを削減することができる。【選択図】  図２
2007133456.tif 000002
【特許請求の範囲】
【請求項１】
コンフィグレーション・データを切り替えることによってその機能を変更し、複数のスレッドを時分割で実行する動的再構成プロセッサを具備し、
前記動的再構成プロセッサは、対応するスレッドが実行可能な状態か否かを示すフラグレジスタをスレッド毎に複数有するスレッド管理テーブルと、前記スレッド管理テーブルの情報に基づいて前記スレッドの切り替えを制御するシーケンサとを有し、
前記シーケンサは、前記複数のフラグレジスタの内容を参照することにより前記スレッドの切り替えを行うことを特徴とする半導体装置。
【請求項２】
請求項１において、
前記動的再構成プロセッサにおける処理と並列に処理を行うモジュールと、
前記モジュールと前記動的再構成プロセッサを接続するバスとを更に具備し、
前記フラグレジスタは、動的再構成プロセッサ自身、および、前記モジュールによって書き換えられることを特徴とする半導体装置。
【請求項３】
請求項１において、
前記複数のフラグレジスタの夫々は、対応するスレッドを実行可能状態とするための条件を保持する複数のビットを有し、
前記スレッド管理テーブルは、前記複数のビットのうち、対応するスレッドを実行可能とする際に参照するビットを指定するフラグ・マスクレジスタをスレッド毎に複数有することを特徴とする半導体装置。
【請求項４】
請求項１において、
前記スレッド管理テーブルは、各スレッド毎に優先度を指定する優先度フラグを更に有し、
前記シーケンサは、複数のスレッドが実行可能状態となった場合に優先度フラグの値を参照し、優先度の高いスレッドを実行状態とすることを特徴とする半導体装置。
【請求項５】
請求項１において、
前記コンフィグレーション・データを格納するメモリと、
前記メモリ及び前記動的再構成プロセッサを接続するバスとを更に具備し、
前記動的再構成プロセッサは、前記メモリに格納された前記コンフィグレーション・データがロードされるコンフィグレーション・バッファを更に有し、
前記スレッド管理テーブルは、スレッドに対応する前記コンフィグレーション・データが前記コンフィグレーション・バッファに格納されているか否かを示すコンフィグロードフラグをスレッド毎に複数有することを特徴とする半導体装置。
【請求項６】
請求項５において、
前記スレッド管理テーブルは、スレッドに対応する前記コンフィグレーション・データを格納している前記コンフィグレーション・バッファのアドレスを保持するコンフィグ・アドレスレジスタをスレッド毎に複数有することを特徴とする半導体装置。
【請求項７】
請求項１において、
前記動的再構成プロセッサは、遷移元のスレッド情報と遷移先のスレッド情報を遷移状態毎に管理するスレッド切り替え管理テーブルを更に有し、
前記シーケンサは、実行中のスレッドの処理が終了した場合に、前記スレッド切り替え管理テーブルに保持された情報を用いて次に実行すべきスレッドを決定することを特徴とする半導体装置。
【請求項８】
請求項７において、
前記スレッド切り替え管理テーブルは、スレッド切り替え条件を遷移状態毎に保持し、
前記シーケンサは、前記遷移元のスレッド情報及び前記スレッド切り替え条件が一致した場合、対応する転送先のスレッドを実行可能状態とすることを特徴とする半導体装置。
【請求項９】
コンフィグレーション・データを切り替えることによってその機能を変更し、複数のスレッドを時分割で実行する動的再構成プロセッサを具備し、
前記複数のスレッドの夫々は、一つ又は複数の条件がそろった場合に実行可能とされ、
前記動的再構成プロセッサは、前記一つ又は複数の条件の夫々が満たされた否かを夫々が保持する複数のビットを有するフラグレジスタと、前記複数のビットのうちどの条件が満たされた場合に対応するスレッドを実行可能状態とするかを指定するフラグ・マスクレジスタをスレッド毎に複数有するスレッド管理テーブルを有することを特徴とする半導体装置。
【請求項１０】
請求項９において、
前記動的再構成プロセッサは、前記フラグレジスタ及び前記フラグ・マスクレジスタの情報に基づいて、切り替えるべきスレッドを決定するシーケンサを更に有することを特徴とする半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動的にコンフィグレーション情報が変更可能な半導体装置又はその半導体装置に関し、特に、コンフィグレーションの管理と、これを管理するプロセッサを備える半導体装置のオーバーヘッド削減に有用なものである。
【背景技術】
【０００２】
近年、情報処理機器の普及と高性能化に伴い、さまざまなアプリケーションと、さまざまなフォーマットが登場している。例えば動画の圧縮方式一つをとってもＭＰＥＧ１、ＭＰＥＧ２、ＭＰＥＧ４、Ｈ．２６４、ウィンドウズ（登録商標）メディアなど多くのフォーマットがある。
【０００３】
ところが、最近の動画圧縮方式をソフトウェアで実現するには、プロセッサの汎用性と、高い処理性能が必要となり、現在組み込み用途で用いられている汎用プロセッサでは実現が困難であるといった問題がある。さらには、現在、半導体製造技術の進歩によりＬＳＩで実現できる回路規模が拡大しており、大きな回路を有効利用したＬＳＩが求められている。
【０００４】
こうした問題に対して、動的再構成可能なプロセッサに代表されるような、ハードウェアをどのように構成するかを指定したコンフィグレーション情報を変更することで動作を変えるＬＳＩを用いることで解決を図る例が、特許文献１や、特許文献２に開示されている。
【０００５】
かかる先行技術では、他のコントローラやＣＰＵの介在なしに自立的に動的なリコンフィギュレーションを行うための制御構造が提示されているが、分岐のサポートはあるものの基本的にシーケンシャルな制御機構であり、昨今組み込み機器で重要となっているマルチタスク処理や、リアルタイム処理をそのまま行うことが難しい。
【０００６】
【特許文献１】特開平１０−４３４５号公報
【０００７】
【特許文献２】特開２００１−３１２４８１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
特許文献１や特許文献２に示される従来の方法では、動的再構成の制御は外部の制御用プロセッサか、比較的単純なシーケンサを用いて、簡単な状態遷移や分岐によってスレッドの制御を行っていた。そのため、例えば複数のタスクを同時に実行するマルチタスク処理では、制御用のプロセッサによってスレッドの複雑な制御を行わなくてはならなかった。 ここで、スレッドとは、動的再構成プロセッサの一つのコンフィグレーション・データで行う処理を表す。また、タスクは複数のスレッドによって構成される。
【０００９】
この場合、スレッドを切り替えるには動的再構成プロセッサから制御用プロセッサに割り込みを行い、制御用プロセッサが状況を判断して、次に実行するスレッドを決定し、動的再構成プロセッサに通知しなくてはならないため、オーバーヘッドが大きい。
【００１０】
オーバーヘッドとしては、制御用プロセッサでの割り込み処理、次に実行するスレッドの決定処理、動的再構成プロセッサとの通信時間、動的再構成プロセッサが次のスレッドを実行するまでの待ち時間などがあり、チップ全体の性能を低下させる原因となる。
【００１１】
今後、組み込み機器が複雑になり、さまざまな機能が搭載されるようになるにつれマルチタスクに関連した上記のような問題は顕著になると考えられる。マルチタスクでは、タスク間の切り替えが頻発するし、その度にＣＰＵによる上記の処理を行うためである。
【００１２】
本発明の目的は、動的再構成プロセッサの利用においてマルチタスクを容易に実現する機能を提供し、マルチタスク処理を行った場合のオーバーヘッドを削減して、より効率的なチップの利用を可能とすることである。
【課題を解決するための手段】
【００１３】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記のとおりである。
【００１４】
動的再構成プロセッサのスレッドを管理するシーケンサにおいて、スレッド管理テーブルと、スレッド切り替え管理テーブルを備える。スレッドとは、動的再構成を行うための一つのコンフィグレーション・データで行う処理を表す。
【００１５】
スレッド管理テーブルはスレッド番号と、スレッド有効フラグと、コンフィグ・アドレスと、優先順位と、コンフィグロードフラグと、ステータスと、フラグレジスタと、フラグ・マスクレジスタと、マスク方法指定レジスタと、フラグリセット・マスクレジスタを含んで構成される。
【００１６】
スレッド切り替え管理テーブルはスレッド切り替え番号と、スレッド切り替え有効フラグと、切り替え元スレッドと、切り替え先スレッドと、スレッド切り替え割り込みと、スレッド切り替え条件を含んで構成される。
【発明の効果】
【００１７】
本発明の構成および方式により、動的再構成プロセッサを含むチップにおけるマルチタスク処理を行う場合のオーバーヘッドを削減することができる。
【発明を実施するための最良の形態】
【００１８】
以下、本発明による代表的な実施例を図面に従って詳細に説明する。なお、以下においては、同じ参照番号、記号は同じものもしくは類似のものを表わすものとする。
【００１９】
図１は、本発明が対象とするチップ構成の一例を示すものである。図１で示すチップはＣＰＵと、ダイレクト・メモリアクセス・コントローラＤＭＡＣと、割り込みコントローラＩＮＴＣと、動的再構成プロセッサＦＥと、内蔵メモリＭＥＭと、バス・ステート・コントローラＢＳＣを含んで構成される。この６つのモジュールはプロセッサバス１０２で接続されている。
【００２０】
ＣＰＵは、本チップ中のメインのプロセッサであり、他のモジュールの管理や、プログラムされた主要な処理を行う。割り込みコントローラＩＮＴＣは、ＣＰＵに対する割り込みを管理するモジュールである。ＣＰＵに対する割り込みはすべてここで受け付けられ、優先度判定をして通知すべき割り込みを決定する。動的再構成プロセッサＦＥの割り込み信号線１０１は割り込みコントローラＩＮＴＣに接続される。実際には他のモジュールからも割り込みコントローラへの信号が出力されるが、本発明と関連が少ないのでここでは省略する。ダイレクト・メモリアクセス・コントローラＤＭＡＣは、ＣＰＵを利用しないでデータ転送を行うためのモジュールである。あらかじめＣＰＵから設定しておき、起動信号を送ることで自動的にデータを転送することができる。動的再構成プロセッサＦＥは、複数の演算器を備え高い性能を備えることを特徴としたプロセッサである。本実施例では初めの設定はＣＰＵから行い、一度起動した後は設定されたデータにしたがって自動的に動作する。内蔵メモリＭＥＭは、ＣＰＵでの処理に用いるオン・チップメモリである。バス・ステート・コントローラＢＳＣは、プロセッサバス１０２の管理や、外部バス１００とプロセッサバス１０２のデータのブリッジ等を行う。
【００２１】
図２は、動的再構成プロセッサＦＥのモジュール構成の一例を示す図である。動的再構成プロセッサＦＥは、バスインターフェースＢＵＳＩＦと、コンフィグレーション・コントローラＣＦＧＣＮＴと、動的再構成が可能なセルアレイＲＣＡと、シーケンサＳＥＱと、ＦＥ内部バス２００を含んで構成される。
【００２２】
バスインターフェースＢＵＳＩＦはプロセッサバス１０２と内部バス２００に接続され、バス間のデータの受け渡しを行う。コンフィグレーション・コントローラＣＦＧＣＮＴはシーケンサＳＥＱの指示に従って、動的再構成が可能なセルアレイＲＣＡにコンフィグレーション・データを送る。ここで、コンフィグレーション・データとは動的再構成が可能なセルアレイＲＣＡの再構成情報を指す。コンフィグレーション・コントローラＣＦＧＣＮＴは内部にコンフィグレーション・バッファを備えており多数のコンフィグレーション・データを蓄えることが可能である。本実施例では動的再構成プロセッサＦＥ外部からコンフィグレーション・バッファへのデータ転送は、ＣＰＵやダイレクト・メモリアクセス・コントローラＤＭＡＣなどの動的再構成プロセッサＦＥ以外のモジュールにより行う方法を想定しているが、ＣＰＵのキャッシュと同じようにコンフィグレーション・コントローラＣＦＧＣＮＴが自動的にコンフィグレーション・データをロードする方式も可能である。コンフィグレーション・データは、内蔵メモリＭＥＭ若しくは外部メモリに格納し、コンフィグレーション・バッファに必要なコンフィグレーション・データのみを蓄えることで、コンフィグレーション・バッファの容量を削減することが可能となる。動的再構成が可能なセルアレイＲＣＡは、演算を行う複数の演算セルと、内部メモリと、内部メモリと演算セルとの通信をサポートするロードストアセル、各セルを結ぶ配線から構成される。本発明では動的再構成が可能なセルアレイＲＣＡ内部の構成は特に限定されないが、コンフィグレーション・データにより高速に再構成が可能で、内部メモリのデータを用いて計算を行うことを特徴とする。
【００２３】
シーケンサＳＥＱは、動的再構成プロセッサＦＥを制御するモジュールであり本発明の主要なモジュールである。設定に応じてコンフィグレーション・コントローラＣＦＧＣＮＴへのコンフィグレーション・データロードの指示と、動的再構成が可能なセルアレイＲＣＡの起動、停止、コンフィグレーション切り替えの指示と、コンフィグレーション切り替えの管理を行う。シーケンサＳＥＱはスレッド管理テーブルと、スレッド切り替え管理テーブルと、割り込み要因レジスタを含んで構成される。これらのテーブルの内容と、これらを利用した動作については後で説明する。
【００２４】
ここで、本実施例中のスレッドとは、動的再構成が可能なセルアレイＲＣＡの一つのコンフィグレーション・データで行う処理を表す。動的再構成プロセッサＦＥはスレッドを切り替えることで、さまざまな処理を行うことが可能である。
【００２５】
図３は、以降の説明で用いる処理例の内容を示す図である。図中の丸はスレッドを表し、実線矢印はスレッド切り替えを表し、点線矢印は実行条件であるフラグのセットを表し、四角がタスクを表す。各タスクはスレッドとスレッド切り替えから構成され、内部の条件や、動的再構成プロセッサＦＥ外部からのフラグのセットにより動作する。この図に示す処理はＴ１、Ｔ２、Ｔ３の三つのタスクから構成される。
【００２６】
タスクＴ１は、スレッドＴｈ３とスレッドＴｈ４の二つのスレッドから構成される。スレッド切り替えＴｒ４はスレッドＴｈ３からＴｈ４への切り替えを表し、スレッド切り替えＴｒ５はスレッドＴｈ４からスレッドＴｈ３への切り替えを表す。スレッドＴｈ３はスレッド切り替えＴｒ５によりセットされるフラグと、動的再構成プロセッサＦＥの外部よりセットされるフラグｆｌｇ１と、タスクＴ２よりセットされるｆｌｇ２の３つのフラグがセットされることが起動条件である。スレッドＴｈ４はスレッド切り替えＴｒ４によりセットされるフラグが起動条件である。
【００２７】
タスクＴ２は、スレッドＴｈ０とスレッドＴｈ１とスレッドＴｈ２の三つのスレッドから構成される。スレッド切り替えＴｒ０はスレッドＴｈ０からＴｈ１への切り替えを表し、スレッド切り替えＴｒ１はスレッドＴｈ１からＴｈ２への切り替えを表し、スレッド切り替えＴｒ２はスレッドＴｈ２からＴｈ０への切り替えを表し、スレッド切り替えＴｒ３はスレッドＴｈ２からＴｈ１への切り替えを表す。スレッドＴｈ０はスレッド切り替えＴｒ２、または、動的再構成プロセッサＦＥの外部よりセットされるフラグｆｌｇ０のどちらかがセットされることが起動条件である。スレッドＴｈ１はスレッド切り替えＴｒ０、または、スレッド切り替えＴｒ３のどちらかがセットするフラグが起動条件である。スレッドＴｈ２はスレッド切り替えＴｒ１によりセットされるフラグが起動条件である。
【００２８】
タスクＴ３は、スレッドＴｈ５のみにより構成される。スレッド切り替えＴｒ６はスレッドＴｈ５の終了を表す。スレッドＴｈ５は動的再構成プロセッサＦＥの外部よりセットされるフラグｆｌｇ３が起動条件である。
【００２９】
ここで、タスク間の優先度は、タスクＴ３が最も高く、続いてタスクＴ１、タスクＴ２と設定している。複数のタスクが実行可能な状態であるなら最も優先度の高いタスクを実行する。
【００３０】
以降では図３に示された処理内容を用いて動作を説明する。図３に示した処理内容は特に特定のアプリケーションの実行を表したものではないが、複数のタスクを同時に実行した場合の特徴を用いている。例えば、タスクＴ１とタスクＴ２はビデオ再生における動画像と音声のデコードを、同期を取りながら同時に実行するような場合に当てはまる。タスクＴ３はタイマー割り込みを用いて特定のセンサや、ハードウェアを駆動するような場合に当てはまる。
【００３１】
図４はシーケンサＳＥＱの構成要素の一つであるスレッド管理テーブルを示した図である。テーブルは、スレッド番号ＴＨＮと、スレッド有効フラグＴＮＥＮと、コンフィグ・アドレスＣＦＧＡと、優先順位ＰＲＩと、コンフィグロードフラグＣＦＧＬＤと、ステータスＳＴＡＴと、フラグレジスタＦＬＧＲと、フラグ・マスクレジスタＦＬＧＭＲと、マスク方法指定レジスタＭＳＲと、フラグリセット・マスクレジスタＦＬＧＲＭＲを含んで構成される。
【００３２】
スレッド番号ＴＨＮは、スレッド識別用の番号である。図４のスレッド番号は図３のスレッド番号と対応しており、他の設定についても同様に、図３の動作を示す設定としてある。ただし、スレッドＴｈ６は図３の処理では利用しないスレッドである。
【００３３】
スレッド有効フラグＴＮＥＮは、そのスレッドの定義が有効か、無効かを設定する。リセット実行時は無効を示す値となり、他の値を設定後に有効を示す値とする。リセット実行時は、スレッド管理テーブルに保持している情報が正確か否かが判断できないためであり、このように設定しておくことで、不正確なデータによる暴走を阻止することが可能となる。なお、本実施例では有効を１、無効を０としている。ここでは、スレッドＴｈ０からスレッドＴｈ５は利用するため１に設定し、スレッドＴｈ６は利用しないため０に設定してある。
【００３４】
コンフィグ・アドレスＣＦＧＡは、コンフィグレーション・コントローラＣＦＧＣＮＴ内のコンフィグレーション・バッファに置ける対応スレッドのコンフィグレーション・データが格納されているアドレスを示す。コンフィグレーション・データを管理テーブルに持つのではなく、コンフィグレーション・データが格納されるコンフィグレーション・バッファのアドレスを保持することで、異なるスレッドで同じコンフィグレーション・データを用いることが可能となり、コンフィグレーション・データをスレッド毎に持つ場合と比較して、動的再構成プロセッサの面積を小さくすることが可能となる。なお、本実施例ではアドレスを１６ビットで扱い、１６進数で示している。“０ｘ”は１６進数を示す接頭語である。
【００３５】
優先度ビットＰＲＩは、スレッドの優先順位を示す。複数のスレッドに同じ優先度を割り当てることも可能である。本実施例では値が１に近いほど優先順位が高いとして扱っている。ただし、優先度０は無効として扱っている。例えば、優先度１と優先度２のスレッドが同時に実行可能な状態にある場合は優先度１のスレッドを実行すると言った具合である。したがって、スレッドＴｈ０からスレッドＴｈ２は優先度３、スレッドＴｈ３とスレッドＴｈ４は優先度２、スレッドＴｈ５は優先度１を割り当てている。また、所定の優先度を無効としておくことにより、あるスレッド管理番号ＴＨＮに所定の情報を登録したことによりスレッド有効フラグＴＮＥＮは有効にし、当該優先度フラグＰＲＩにより無効にすることができる。従って、優先度フラグＰＲＩを有効から無効又は無効から有効に変えることにより、スレッド管理番号ＴＨＮに格納される情報は有効だが、現在は使用しないとすることが可能となる。なお、スレッド番号ＴＨＮ順に固定的に優先度を割り当てる（例えば、Ｔｈ０が最も優先度を高くする)ことも可能であるが、本実施例のように優先度を設定できるようにすることで、ユーザがスレッド管理テーブルに自由にスレッドを配置することが可能となり、利便性が向上する。
【００３６】
コンフィグロードフラグＣＦＧＬＤは、スレッドに対応するコンフィグレーション・データがコンフィグレーション・バッファ内にあるか無いかを示す。これにより、コンフィグレーション・バッファにすべてのコンフィグレーション・データを格納する必要がなくなり、コンフィグレーション・バッファの容量を削減できる。ここではコンフィグレーション・データがある場合を１、無い場合を０で示している。例えば、実行したいスレッドに対応したコンフィグレーション・データのすべてが、コンフィグレーション・バッファに入らない場合は、コンフィグロードフラグＣＦＧＬＤを用いて管理を行い、適切なタイミングでＣＰＵ又はＤＭＡＣを使用してコンフィグレーション・バッファを入れ替える必要がある。本実施例ではすべてのコンフィグレーション・データをあらかじめロードした状態を想定しているため、スレッドＴｈ０からスレッドＴｈ５のコンフィグロードフラグＣＦＧＬＤは１としている。コンフィグロードフラグＣＦＧＬＤは、動作中も書き換え可能とすることで、バックグランドでのコンフィグデータのコンフィグレーション・バッファへの転送が可能となる。
【００３７】
ステータスＳＴＡＴは、スレッドの状態を示す。ステータスＳＴＡＴはＷａｉｔｉｎｇ、Ｒｅａｄｙ、Ｒｕｎｎｉｎｇの３つの状態を取りうる。Ｗａｉｔｉｎｇはまだ実行準備ができていない状態を表す。Ｒｅａｄｙは実行準備ができた状態、すなわち実行可能状態を表す。Ｒｕｎｎｉｎｇは実行中の状態を表す。状態の管理方法は後で説明する。本処理例では初期値はすべてＷａｉｔｉｎｇに設定している。
【００３８】
フラグレジスタＦＬＧＲは、そのスレッドの実行に必要な条件が満たされたか否かをセットするためのレジスタである。本実施例では条件が満たされた場合１、満たされない場合０を設定する。本レジスタは動作中、停止中によらず、ＦＥ内部のモジュール（例えば、リコンフィギュラブルセルアレイＲＣＡ）とＦＥ外部のモジュール（例えば、ＣＰＵ）より更新される。ＦＥ内部のモジュールから更新を可能とすることで、動的再構成プロセッサは、ＣＰＵを使用しなくとも自律的に対応するスレッドが実行に必要な条件が満たされたことを示すことが可能となる。また、ＦＥ外部から動作中・停止中によらず更新可能とすることで、ＦＥ外部のモジュール（例えばＣＰＵ）は、ＦＥの状態によらず自ら都合のよいタイミングで更新することが可能となる。
【００３９】
また、本実施例では本レジスタに３２ビットを割り当てているが、第０ビット（最も下位のビット）は特別にスレッド切り替えによりセットされるように機能を割り当てている。具体的には、例えば、図３におけるＴ２のように一連の処理を３つのスレッドに分解した場合に、スレッド１は、スレッド０の処理終了が条件となる。スレッド1のフラグレジスタＦＬＧＲの第0ビットは、スレッド０の終了時に”１”が立てられ条件が満たされる。従って、一連の処理を複数のスレッドに分解することが可能となる。その他のビットに関してはユーザが自由に要因を割り当てることが可能である。
【００４０】
フラグ・マスクレジスタＦＬＧＭＲは、フラグレジスタＦＬＧＲのうちどのビットを参照するかを設定するレジスタである。本実施例では参照する場合は１、参照しない場合は０を割り当てている。本処理例ではスレッド切り替えによる最下位ビットのほかに、ｆｌｇ０に対応したスレッドＴｈ０の第１６ビット、ｆｌｇ１に対応したスレッドＴｈ３の第２０ビット、ｆｌｇ２に対応したスレッドＴｈ３の第２４ビット、ｆｌｇ３に対応したスレッドＴｈ５の第２８ビットを有効にしている。スレッドＴｈ５はスレッド切り替えによる要因を利用しないため最下位ビットは０としている。フラグ・マスクレジスタＦＬＧＭＲを設けることにより、異なる条件により実行可能状態となるスレッドを同じスレッド管理番号に入れ替えて用いることが可能となる。
【００４１】
マスク方法指定レジスタＭＳＲは、フラグ・マスクレジスタＦＬＧＭＲで指定されたビットをどのように扱うかを設定するレジスタである。例えば、本レジスタが“ｏｒ”を示す値であった場合、フラグレジスタＦＬＧＲ中のフラグ・マスクレジスタＦＬＧＭＲで指定されたビットの全ビット論理ＯＲを計算し、その結果が１であればステータスＳＴＡＴをＲｅａｄｙに変更する。また、本レジスタが“ａｎｄ”を示す値であった場合、フラグレジスタＦＬＧＲ中のフラグ・マスクレジスタＦＬＧＭＲで指定されたビットの全ビット論理ＡＮＤを計算し、その結果が１であればステータスＳＴＡＴをＲｅａｄｙに変更する。マスク方法指定レジスタＭＳＲを有することによりユーザは、上記のフラグレジスタＦＬＧＲ及びフラグ・マスクレジスタＦＬＧＭＲの設定、即ち、スレッドを実行可能状態とするタイミングを自由に設定することが可能となり、スレッド管理テーブルに格納できる情報を増やすことが可能となる。例えば、条件Ａと条件Ｂのいずれか一方でスレッドを切り替える場合、ａｎｄ条件のみとすると、条件Ａに関するスレッド切り替えと条件Ｂに関するスレッド切り替えを夫々異なるスレッド管理番号に格納する必要が出てくるがｏｒ条件も設定可能とすると一つのスレッド管理番号に格納することが可能となる。
【００４２】
フラグリセット・マスクレジスタＦＬＧＲＭＲは、ステータスＳＴＡＴがＷａｉｔｉｎｇからＲｅａｄｙに遷移したときに、フラグレジスタＦＬＧＲ中のどのビットをリセットするかを設定するレジスタである。ここで図中の“〜０ｘ０００１０００１”とは“０ｘ０００１０００１”の１の補数（ビット反転）を表している。ステータスＳＴＡＴがＷａｉｔｉｎｇからＲｅａｄｙに遷移したときは、フラグリセット・マスクレジスタＦＬＧＲＭＲとフラグレジスタＦＬＧＲの論理ＡＮＤをとり、その結果をフラグレジスタＦＬＧＲにセットする。本処理例ではスレッドＴｈ３以外はすべてのフラグをリセットするようになっている。スレッドＴｈ３についてはｆｌｇ２によるビットのみリセットしないようになっている。フラグリセット・マスクレジスタＦＬＧＲＭＲを有することで、例えば、1番始めにスレッドＴｈ３を起動するタイミングは、所定の処理が終了したという条件Ｃと外部要因の条件Ｄがそろった場合であり、2番目以降は、外部要因の条件Ｄのみで切り替えを行いたいということが可能となり、更に自由度が高くなる。
【００４３】
以上で述べたスレッド管理テーブルのうち、フラグレジスタＦＬＧＲとコンフィグロードフラグＣＦＧＬＤは動作中も含め、常に書き換え可能である。また、その他の要素についても、スレッド有効フラグＴＮＥＮを無効にセットすれば常に書き込み可能である。逆にスレッド有効フラグＴＮＥＮが有効な場合はフラグレジスタＦＬＧＲとコンフィグロードフラグＣＦＧＬＤ以外を書き換えることはできない。
【００４４】
図５は、図４に示したスレッド管理テーブルのうち、フラグレジスタＦＬＧＲに関連した動作と、ステータスＳＴＡＴ管理でＷａｉｔｉｎｇからＲｅａｄｙに変更する動作を示したフローチャートである。本フローチャートに示した処理はスレッドごと独立に行われる。
【００４５】
６００では、フラグレジスタＦＬＧＲの変化をトリガーとして本フローチャートの処理を開始する。６０１では、スレッド有効フラグＴＮＥＮが有効を示す値（１）の場合は６０２に進み、無効を示す値（０）の場合は６００に戻る。なお、無効を示す値の場合は、搭載するアプリケーションに依存して、ＣＰＵに無効である旨のエラーを送信してもよいし、送信しなくとも良い。この場合、スレッド管理番号毎にエラーの送信の可否を示すフラグを追加することで、動的再構成プロセッサで処理するアプリケーションにより変更することが可能となる。
【００４６】
６０２では、マスク方法指定レジスタＭＳＲの値が“ａｎｄ”の場合は６０３に進み、“ｏｒ”の場合は６０４に進む。６０３では、フラグレジスタＦＬＧＲとフラグ・マスクレジスタＦＬＧＭＲの排他的論理和をとり、さらに全ビット反転し、その結果の全ビット論理積をとった結果が１ならば６０６に進み、結果が０ならば６０５に進む。
【００４７】
６０４では、フラグレジスタＦＬＧＲとフラグ・マスクレジスタＦＬＧＭＲの論理積をとり、その結果の全ビット論理和をとった結果が１ならば６０６に進み、０ならば６０５へ進む。６０５では、ステータスＳＴＡＴの変化はなしとして６００へ戻る。６０６では、コンフィグロードフラグＣＦＧＬＤが１、すなわち対応するコンフィグレーション・データがコンフィグレーション・バッファにあるならば６０８に進み、コンフィグロードフラグＣＦＧＬＤが０ならば６０７に進む。６０７では、該当スレッドに対応するコンフィグレーション・データがロードされていないことを示すエラー割り込みを発生させ、６０５に進む。
【００４８】
６０８では、ステータスＳＴＡＴをＷａｉｔｉｎｇからＲｅａｄｙに変化させ、６０９に進む。６０９では、フラグレジスタＦＬＧＲにフラグレジスタＦＬＧＲとフラグリセット・マスクレジスタＦＬＧＲＭＲの論理積をとった結果を代入し、６００に戻る。
【００４９】
図６はシーケンサＳＥＱの構成要素の一つであるスレッド切り替え管理テーブルを示す図である。スレッド切り替え管理テーブルは、スレッド切り替え番号ＴＴＮと、スレッド切り替え有効フラグＴＲＥＮと、切り替え元スレッドＦＴＨと、切り替え先スレッドＴＴＨと、スレッド切り替え割り込みＩＮＴと、スレッド切り替え条件ＴＣＣＮＤを含んで構成される。
【００５０】
スレッド切り替え番号ＴＴＮは、スレッド切り替え識別用の番号である。図６のスレッド切り替え番号ＴＴＮは図３のスレッド切り替え番号と対応しており、他の設定についても同様に、図３の動作を示す設定としてある。
【００５１】
スレッド切り替え有効フラグＴＲＥＮは、そのスレッド切り替えの定義が有効か、無効かを設定する。リセット実行時は無効を示す値となり、他の値を設定後に有効を示す値とする。本実施例では有効を１、無効を０としている。
【００５２】
切り替え元スレッドＦＴＨは、スレッド切り替えの切り替え元スレッド番号を指定する。切り替え元スレッドＦＴＨと、スレッド切り替え条件ＴＣＣＮＤ一致した場合にスレッド切り替えは実行される。切り替え元スレッドＦＴＨには指定なしを設定することも可能である。この場合、スレッド切り替え条件ＴＣＣＮＤのみでスレッド切り替えの実行が判断される。
【００５３】
切り替え先スレッドＴＴＨは、スレッド切り替えの切り替え先スレッド番号を指定する。スレッド切り替え発生時には、切り替え先スレッドＴＴＨに設定されたスレッド番号ＴＨＮが指すフラグレジスタＦＬＧＲの最下位ビットを１にセットする。切り替え先スレッドＴＴＨには指定なしを設定することも可能である。この場合、フラグレジスタＦＬＧＲの最下位ビットの更新は行われない。
【００５４】
スレッド切り替え割り込みＩＮＴは、スレッド切り替え発生時にＣＰＵに対して割り込みを行うかどうかを指定する。本実施例では値が１の場合に割り込みを発生させ、０の場合には割り込みを発生させない。本実施例では、ＣＰＵの介在なしでスレッドの切り替えをおこなっているが、これにより、処理の終了通知や、ＣＰＵとの同期を取ることが可能となる。
【００５５】
スレッド切り替え条件ＴＣＣＮＤは、スレッド切り替えの条件を指定する。本実施例ではリコンフィギュラブルセルアレイＲＣＡからシーケンサＳＥＱに対して、スレッド切り替え条件ＴＣＣＮＤに対応した信号を送る。この信号と比較を行い、条件を判定する。例えば、図３のＴｈ３の処理が終了した場合、切り替え番号Ｔｒ２又はＴｒ３のいずれか一方に遷移することになる。Ｔｒ２又はＴｒ３のいずれに分岐するかは、このスレッド切り替え条件ＴＣＣＮＤで判断される。このようにスレッド切り替え条件ＴＣＣＮＤを有することで、条件分岐に対応することが可能となる。
【００５６】
以上で述べたスレッド切り替え管理テーブルの値は、スレッド切り替え有効フラグＴＲＥＮが無効（０）のときに書き込み可能である。ここで、書き込みの可能、不可能はスレッド切り替え番号毎に判定される。
【００５７】
図７はスレッド切り替え発生と、ステートＳＴＡＴのＲｕｎｎｉｎｇからＷａｉｔｉｎｇへの変更に関する処理を示したフローチャートである。本フローチャートで示される処理はスレッド切り替えごと独立に行われる。
【００５８】
７００では、スレッド切り替え条件ＴＣＣＮＤの変化をトリガーとして本フローチャートの処理を開始する。
【００５９】
７０１では、スレッド切り替え有効フラグＴＲＥＮの値が有効を示す値（１）であれば、７０２へ進み、無効を示す値（０）であれば７００に戻る。
【００６０】
７０２では、切り替え元スレッドＦＴＨに切り替え元の指定がある場合は７０３に進み、指定が無い場合には７０５に進む。
【００６１】
７０３では、切り替え元スレッドＦＴＨが実行中のスレッドと一致する、すなわちスレッド管理テーブルのステータスＳＴＡＴがＲｕｎｎｉｎｇとなっているスレッド番号と、切り替え元スレッドＦＴＨで指定されるスレッド番号が一致する場合には７０５に進み、一致しない場合には７００へ戻る。
【００６２】
７０５では、スレッド切り替え条件ＴＣＣＮＤと、リコンフィギュラブルセルアレイＲＣＡからシーケンサＳＥＱに対して出力する信号が一致するならば７０６に進み、一致しないならば７００へ戻る。
【００６３】
７０６以降は、スレッド切り替えが発生した時の処理である。
【００６４】
７０６では、ステータスＳＴＡＴがＲｕｎｎｉｎｇのスレッドをＷａｉｔｉｎｇに変更する。これにより、リコンフィギュラブルセルアレイＲＣＡは演算を停止する。
【００６５】
７０７では、切り替え先スレッドＴＴＨのフラグレジスタの最下位ビットを１にセットする。先にも述べたが、本実施例ではフラグレジスタＦＬＧＲの最下位ビットはスレッド切り替えによるフラグとして割り当てている。また、切り替え先スレッドＴＴＨにスレッドの指定が無ければ、フラグレジスタＦＬＧＲへの設定は行わない。
【００６６】
７０８では、スレッド切り替え割り込みＩＮＴに割り込みあり（１）が設定されている場合は７０９に進み、割り込みなし（０）の場合は７００に戻る。
【００６７】
７０９では、ＣＰＵに対して割り込みを発生させ、シーケンサＳＥＱ中の割り込み要因レジスタをセットし、７００に戻る。
【００６８】
図８は、次に実行するスレッドを決定する処理を示したフローチャートである。
【００６９】
８００では、スレッド管理テーブルに記述されたすべてのスレッドのうち、どれか一つのステータスＳＴＡＴが変化することをトリガーとして、本フローチャートの動作を開始する。
【００７０】
８０１では、ステータスＳＴＡＴがＲｕｎｎｉｎｇのスレッドがあれば、まだ次のスレッドをＲｕｎｎｉｎｇにできないため、８００に戻る。ステータスＳＴＡＴがＲｕｎｎｉｎｇのスレッドが無ければ、次に実行するスレッドを決めるため、８０２に進む。なお、Ｒｕｎｎｉｎｇのスレッドが終了した場合、そのスレッドのステータスＳＴＡＴはＷａｉｔｉｎｇに変化するため、このタイミングで図８のフローを開始するため、Ｒｅａｄｙのスレッドが多数あった場合でも効率よく実行することが可能となる。
【００７１】
８０２では、ステータスＳＴＡＴがＲｅａｄｙのスレッドが無ければ、まだ実行準備が終わったスレッドがないということなので、８００に戻る。ステータスＳＴＡＴがＲｅａｄｙのスレッドが一つ以上あれば８０３に進む。
【００７２】
８０３では、ステータスＳＴＡＴがＲｅａｄｙのスレッドが複数か、一つかを判定する。ステータスＳＴＡＴがＲｅａｄｙのスレッドが一つの場合は８０７に進み、複数の場合は８０４に進む。
【００７３】
８０４では、ステータスＳＴＡＴがＲｅａｄｙのスレッドのうち、最も優先度の高いスレッドを選択する。本実施例ではスレッド管理テーブルの優先度ＰＲＩの値が小さいほど優先度が高いとしている。最も優先度が高いのは優先度ＰＲＩが１のスレッドである。
【００７４】
８０５では、８０４で選択されたスレッドが一つであれば８０７へ進み、複数あれば８０６へ進む。
【００７５】
８０６では、８０４で選択されたスレッドのうち、最もスレッド番号の小さいスレッドを一つ選択する。
【００７６】
８０７では、以上のフローチャートの動作により選択されたスレッドのステータスＳＴＡＴをＲｕｎｎｉｎｇとし、実行を開始する。その後８００へ戻る。
【００７７】
以上に図８に示した実行するスレッドを決定する処理を説明したが、特に８０６については種々の方法を設定可能である。例えば、スレッド番号の大きい順や、ラウンドロビンに選択する方法、最も早くＲｅａｄｙ状態になったスレッドを選択する方法などがありえる。
【００７８】
図９では、本実施例で図３の処理を実行した場合の動作と比較するために、本実施例の構成なしで図３の処理を実行した場合のタイミングチャートである。一番上のラインがＣＰＵの動作状況を表し、下の３つのラインが動的再構成プロセッサＦＥの動作を示している。特に動的再構成プロセッサＦＥの動作に関しては分かりやすくするためタスクごとに違うラインを引いている。Ｔ１、Ｔ２、Ｔ３は一つの動的再構成プロセッサＦＥで実行されるため、実際にはどれか一つしか動作状態にならない。図中の細い横のラインは休止状態（処理を行っていない状態）を表し、四角で示した部分が実行状態を表している。
【００７９】
従来のリコンフィギュラブルプロセッサでもシーケンシャルなスレッド切り替えや、単純な分岐を含んだスレッド切り替えは可能であるが、図３に示したような外部からのフラグや、スレッドの優先順位による管理は備えていないため、ＣＰＵでスレッドの切り替えを制御しなくてはならない。
【００８０】
以下図９のタイミングチャートに示す動作を時系列に沿って（左から）説明する。
【００８１】
初期設定として、スレッド切り替えＴｒ５によりセットされるフラグはあらかじめセットしておく。
【００８２】
タイミングＢ１では、ＣＰＵはｆｌｇ０が発生すると動的再構成プロセッサＦＥの制御レジスタにアクセスし、スレッドＴｈ０を実行させる。ｆｌｇ０がＣＰＵ外部で発生する要因の場合は割り込み等で対応する。
【００８３】
タイミングＢ２では、動的再構成プロセッサＦＥはスレッドＴｈ０が終了すると、割り込みを利用してＣＰＵに終了を通知する。ＣＰＵはスレッドＴｈ０終了を意味する割り込みを受け、スレッド制御情報を更新する。この時点で、実行可能な状態のスレッドはスレッドＴｈ１のみである。したがって、動的再構成プロセッサＦＥの制御レジスタにアクセスしてスレッドＴｈ１を実行させる。
【００８４】
タイミングＢ３では、ＣＰＵはｆｌｇ１を受け付け、スレッドの管理情報を更新する。
【００８５】
タイミングＢ４では、ＣＰＵはスレッドＴｈ１からのｆｌｇ２を受け付け、スレッドの管理情報を更新する。スレッドＴｈ１からＣＰＵへの通知には動的再構成プロセッサＦＥの割り込み機能を利用することが想定される。この時点でスレッドＴｈ３が実行可能な状態となる。
【００８６】
タイミングＢ５では、動的再構成プロセッサＦＥはスレッドＴｈ１が終了すると、割り込みを利用してＣＰＵに終了を通知する。ＣＰＵはスレッドＴｈ１の終了を意味する割り込みを受け、スレッド制御情報を更新する。この時点で、実行可能な状態のスレッドはスレッドＴｈ２とスレッドＴｈ３となる。ＣＰＵは優先度を基に次に実行するスレッドをスレッドＴｈ３と決定し、動的再構成プロセッサＦＥの制御レジスタにアクセスしてスレッドＴｈ３を実行させる。
【００８７】
タイミングＢ６では、ＣＰＵはｆｌｇ３を受け付け、スレッドの管理情報を更新する。この時点でスレッドＴｈ５が実行可能状態となる。
【００８８】
タイミングＢ７では、動的再構成プロセッサＦＥはスレッドＴｈ３が終了すると、割り込みを利用してＣＰＵに終了を通知する。ＣＰＵはスレッドＴｈ３の終了を意味する割り込みを受け、スレッド制御情報を更新する。この時点で、実行可能な状態のスレッドはスレッドＴｈ２とスレッドＴｈ４とスレッドＴｈ５の三つとなる。ＣＰＵは優先度を基に次に実行するスレッドをスレッドＴｈ５と決定し、動的再構成プロセッサＦＥの制御レジスタにアクセスしてスレッドＴｈ５を実行させる。
【００８９】
タイミングＢ８では、動的再構成プロセッサＦＥはスレッドＴｈ５が終了すると、割り込みを利用してＣＰＵに終了を通知する。ＣＰＵはスレッドＴｈ５の終了を意味する割り込みを受け、スレッド制御情報を更新する。この時点で、実行可能な状態のスレッドはスレッド２とスレッドＴｈ４の二つとなる。ＣＰＵは優先度を基に次に実行するスレッドをスレッドＴｈ４と決定し、動的再構成プロセッサＦＥの制御レジスタにアクセスしてスレッドＴｈ４を実行させる。
【００９０】
タイミングＢ９では、動的再構成プロセッサＦＥはスレッドＴｈ４が終了すると、割り込みを利用してＣＰＵに終了を通知する。ＣＰＵはスレッドＴｈ４の終了を意味する割り込みを受け、スレッド制御情報を更新する。この時点で、実行可能な状態のスレッドはスレッド２のみとなる。ＣＰＵは次に実行するスレッドをスレッドＴｈ２と決定し、動的再構成プロセッサＦＥの制御レジスタにアクセスしてスレッドＴｈ２を実行させる。
【００９１】
以上で説明したように従来の構成で図３に示すようなタスクの管理を実現しようとすると、ＣＰＵでスレッドを管理しなければならず、スレッドの管理や、割り込みなどでＣＰＵにかかるオーバーヘッドが大きくなってしまう。また、スレッド切り替え時は演算を止めるが、ＣＰＵでスレッド管理を行うとスレッド切り替えに時間がかかるため動的再構成プロセッサＦＥの性能を十分に引き出すことができない。
【００９２】
図１０は、本実施例の構成を用いて図３の処理を実行した場合のタイミングチャートである。本実施例の構成では図３の処理をＣＰＵの介在無く実現できるため、ＣＰＵの動作を示すラインは無い。ただし、初期設定はＣＰＵから行うこととする。動的再構成プロセッサＦＥの動作を分かりやすく示すためタスクごとに違うラインを引いている。Ｔ１、Ｔ２、Ｔ３は一つの動的再構成プロセッサＦＥで実行されるため、実際にはどれか一つしか動作状態にならない。図中の細い横のラインは休止状態（処理を行っていない状態）を表し、四角で示した部分が実行状態を表している。
【００９３】
以下図１０のタイミングチャートに示す動作を時系列に沿って（左から）説明する。
【００９４】
まず、初期値としてスレッドＴｈ３のフラグレジスタＦＬＧＲを0x00000001にセットしておく。
【００９５】
タイミングＡ１では、ｆｌｇ０がフラグレジスタＦＬＧＲにセットされ、0x00010000となる。スレッドＴｈ０はＲｅａｄｙとなるフラグがそろったため、Ｒｅａｄｙとなる。Ｒｅａｄｙへの変化に伴い、スレッドＴｈ０のフラグレジスタＦＬＧＲはリセットされて0x00000000となる。このタイミングでＲｅａｄｙのスレッドは一つのみであるからスレッドＴｈ０がＲｕｎｎｉｎｇとなる。
【００９６】
タイミングＡ２では、スレッド切り替えＴｒ０の発生により、スレッドＴｈ０がＷａｉｔｉｎｇとなり、スレッドＴｈ１のフラグレジスタＦＬＧＲが0x00000001となる。スレッドＴｈ１はＲｅａｄｙとなるフラグがそろったため、Ｒｅａｄｙとなる。Ｒｅａｄｙへの変化に伴い、スレッドＴｈ１のフラグレジスタＦＬＧＲはリセットされて0x00000000となる。この時点で実行可能な状態のスレッドはスレッドＴｈ１のみである。したがってスレッドＴｈ１がＲｕｎｎｉｎｇとなる。
【００９７】
タイミングＡ３では、ｆｌｇ１によりスレッドＴｈ３のフラグレジスタＦＬＧＲが0x00100000にセットされる。
【００９８】
タイミングＡ４では、スレッドＴｈ１からスレッドＴｈ３のフラグレジスタＦＬＧＲのｆｌｇ２に対応した値をセットし、0x01100001となる。スレッドＴｈ３はＲｅａｄｙとなるフラグがそろったため、Ｒｅａｄｙとなる。Ｒｅａｄｙへの変化に伴い、スレッドＴｈ３のフラグレジスタＦＬＧＲはリセットされて0x00100000となる。この時点で実行可能な状態のスレッドはスレッドＴｈ３のみである。
【００９９】
タイミングＡ５では、スレッド切り替えＴｒ１の発生により、スレッドＴｈ１がＷａｉｔｉｎｇとなり、スレッドＴｈ２のフラグレジスタＦＬＧＲが0x00000001となる。スレッドＴｈ２はＲｅａｄｙとなるフラグがそろったため、Ｒｅａｄｙとなる。Ｒｅａｄｙへの変化に伴い、スレッドＴｈ１のフラグレジスタＦＬＧＲはリセットされて0x00000000となる。この時点で実行可能な状態のスレッドはスレッドＴｈ２と、スレッドＴｈ３の二つである。優先度ＰＲＩを基に、次に実行するスレッドはスレッドＴｈ３と決定され、スレッドＴｈ３がＲｕｎｎｉｎｇとなる。
【０１００】
タイミングＡ６では、ｆｌｇ３によりスレッドＴｈ５のスラグレジスタＦＬＧＲが0x10000000にセットされる。スレッドＴｈ５はＲｅａｄｙとなるフラグがそろったため、Ｒｅａｄｙとなる。Ｒｅａｄｙへの変化に伴い、スレッドＴｈ５のフラグレジスタＦＬＧＲはリセットされて0x00000000となる。この時点で実行可能な状態のスレッドはスレッドＴｈ２と、スレッドＴｈ５の二つである。
【０１０１】
タイミングＡ７では、スレッド切り替えＴｒ４の発生により、スレッドＴｈ３がＷａｉｔｉｎｇとなり、スレッドＴｈ４のフラグレジスタＦＬＧＲが0x00000001となる。スレッドＴｈ４はＲｅａｄｙとなるフラグがそろったため、Ｒｅａｄｙとなる。Ｒｅａｄｙへの変化に伴い、スレッドＴｈ４のフラグレジスタＦＬＧＲはリセットされて0x00000000となる。この時点で実行可能な状態のスレッドはスレッドＴｈ２と、スレッドＴｈ４と、スレッドＴｈ５の三つである。優先度ＰＲＩを基に、次に実行するスレッドはスレッドＴｈ５と決定され、スレッドＴｈ５がＲｕｎｎｉｎｇとなる。
【０１０２】
タイミングＡ８では、スレッド切り替えＴｒ６の発生により、スレッドＴｈ５がＷａｉｔｉｎｇとなる。スレッド切り替えＴｒ６は、切り替え先スレッドＴＴＨに指定が無いためスレッド切り替えによるフラグレジスタＦＬＧＲのセットは行わない。この時点で実行可能な状態のスレッドはスレッドＴｈ２と、スレッドＴｈ４の二つである。優先度ＰＲＩを基に、次に実行するスレッドはスレッドＴｈ４と決定され、スレッドＴｈ４がＲｕｎｎｉｎｇとなる。
【０１０３】
タイミングＡ９では、スレッド切り替えＴｒ５の発生により、スレッドＴｈ４がＷａｉｔｉｎｇとなり、スレッドＴｈ３のフラグレジスタＦＬＧＲが0x00100001となる。この時点で実行可能な状態のスレッドはスレッドＴｈ２のみである。したがって、スレッドＴｈ２がＲｕｎｎｉｎｇとなる。
【０１０４】
本実施例では図１０で説明したように動作するため、スレッド切り替えに伴うＣＰＵによる制御が発生しないで、動的再構成プロセッサＦＥが自立的にスレッドを管理できるため、ＣＰＵとの通信による待ち時間や、オーバーヘッドが削減できる。また、ＣＰＵで行う制御処理も少なくなるためチップ全体として性能が向上するといえる。
【０１０５】
本実施例のようなシーケンサを有することにより、スレッドはそれぞれフラグレジスタによって実行可能状態か否かが管理され、優先度によって複数実行可能なスレッドから一つが選ばれて実行されるといったマルチタスク処理が可能となる。また、フラグレジスタは動的再構成プロセッサ内外から更新することが可能であり、他のモジュールと同期した処理も容易に実現可能である。
【０１０６】
図１１は、図４で示したスレッド管理テーブルの第二の構成を示す図である。同じ記号で示した部分は同じ機能を持つため説明を省略する。本スレッド管理テーブルはメモリバンク指定ＭＢをさらに含む。
【０１０７】
メモリバンク指定ＭＢは、動的再構成が可能なセルアレイＲＣＡ中に含まれるローカルメモリのうち、そのスレッドが利用可能な領域（バンク）を指定する。例えば、メモリバンク指定ＭＢ＝０としてコンフィグレーション・データで１００番地をアクセスした場合には、バンク０の１００番地にアクセスし、メモリバンク指定ＭＢ＝１としてコンフィグレーション・データで１００番地をアクセスした場合には、バンク１の１００番地にアクセスする。これによりタスク間のメモリを共有したり、分離したりすることが可能になる。図１１のメモリバンク指定ＭＢでは、タスクごとに異なるバンクを割り当てており、それぞれのタスクの使用するメモリ領域が競合しないようにしている。
【０１０８】
本機能により、メモリ管理が容易になるため、タスクの管理も用意になる。また、別々に設計されたタスクを一つの動的再構成が可能なセルアレイＲＣＡで実行するのが容易に実現できるようになる。
【０１０９】
以上、実施例に基づいて本発明を説明してきたが、本発明の趣旨を逸脱しない範囲で種々の変更が可能である。
【０１１０】
本発明の動的再構成プロセッサによれば、制御用プロセッサの能力を利用しないでマルチタスクが実現できるため、非常にオーバーヘッドが少なく目的の処理を実現することが可能である。
【図面の簡単な説明】
【０１１１】
【図１】本発明の一つの実施形態であるチップ構成を示す図である。
【図２】本発明の一つの実施形態である動的再構成プロセッサＦＥのモジュール構成を示す図である。
【図３】本発明の動作を説明するために用いる処理内容を示す図である。
【図４】本発明の一つの実施形態であるスレッド管理テーブルの構成を示す図である。
【図５】本発明の一つの実施形態であるスレッド管理テーブルの、フラグレジスタの変化に伴う動作を示す図である。
【図６】本発明の一つの実施形態であるスレッド切り替え管理テーブルの構成を示す図である。
【図７】本発明の一つの実施形態であるスレッド切り替え管理テーブルの、切り替え条件の変化に伴う動作を示す図である。
【図８】本発明の一つの実施形態であるスレッド管理テーブルの、ステータスの変化に伴う動作を示す図である。
【図９】従来構成において図３に示す処理を行った場合の動作の一例である。
【図１０】本発明を用いて図３に示す処理を行った場合の動作の一例である。
【図１１】本発明の一つの実施形態であるスレッド管理テーブルの第二の構成を示す図である。
【符号の説明】
【０１１２】
１００…チップ外部バス、１０１…割り込み信号線、１０２…プロセッサバス、２００…ＦＥ内部バス、DMAC…ダイレクト・アクセス・コントローラ、INTC…割り込みコントローラ、FE…動的再構成プロセッサ、MEM…内蔵メモリ、BSC…バス・ステート・コントローラ、BUSIF…バスインターフェース、CGFCNT…コンフィグレーション・コントローラ、RCA…動的再構成が可能なセルアレイ、SEQ…シーケンサ、THN…スレッド番号、THEN…スレッド有効フラグ、CFGA…コンフィグ・アドレスＣＦＧＡ、PRI…優先順位、CFGLD…コンフィグロードフラグ、STAT…ステータス、FLGR…フラグレジスタ、FLGMR…フラグ・マスクレジスタ、MSR…マスク方法指定レジスタ、FLGRMR…フラグリセット・マスクレジスタ、TTN…スレッド切り替え番号、TREN…スレッド切り替え有効フラグ、TTH…切り替え先スレッド、INT…スレッド切り替え割り込み、TCCND…スレッド切り替え条件、MB…メモリバンク指定。
【図１】
2007133456.tif 000003
【図２】
2007133456.tif 000004
【図３】
2007133456.tif 000005
【図４】
2007133456.tif 000006
【図５】
2007133456.tif 000007
【図６】
2007133456.tif 000008
【図７】
2007133456.tif 000009
【図８】
2007133456.tif 000010
【図９】
2007133456.tif 000011
【図１０】
2007133456.tif 000012
【図１１】
2007133456.tif 000013