(57)【特許請求の範囲】
【請求項１】
プログラムコンテクストを切替えるためのコンピュータベースのシステムであって、
スレッド選択ハードウェアに結合された実行パイプラインにおいて第１のプログラムスレッド及び第２のプログラムスレッドを有することが可能なパイプラインプロセッサであって、前記実行パイプラインが、命令を実行するための１組のステージを含み、前記１組のステージのそれぞれ異なるステージにおいて単一の命令を実行するように構成される、パイプラインプロセッサと、
前記パイプラインプロセッサの第１のスレッド状態を記憶する機能を有するデータ記憶装置の第１の集合と、
前記パイプラインプロセッサの第２のスレッド状態を記憶する機能を有するデータ記憶装置の第２の集合と、
前記第１のプログラムスレッド及び前記第２のプログラムスレッドのうち、前記パイプラインプロセッサが実行するプログラムスレッドを識別し、前記実行パイプラインが前記データ記憶装置の第１の集合から命令を読み出すか、それとも前記データ記憶装置の第２の集合から命令から命令を読み出すかを制御する所定の固定実行スケジュールに従って、前記パイプラインプロセッサの空き処理時間を少なくとも前記第１のプログラムスレッド及び前記第２のプログラムスレッドに分配するように構成されたハードウェアスレッドスケジューラであって、前記スケジュールは、第１数のサイクル毎に前記第１のプログラムスレッドに処理時間を割当てなければならないこと、及び第２数のサイクル毎に前記第２のプログラムスレッドに処理時間を割当てなければならないことを規定し、前記第１数のサイクルは、前記第２数のサイクルと等しくない、ハードウェアスケジューラと、
を含み、
前記ハードウェアスレッドスケジューラが、前記パイプラインプロセッサによる実行中に前記第２のスレッド状態を識別することに応答し、前記第２のスレッド状態に含まれる命令に関連するコンテクスト番号から識別される前記データ記憶装置の第２の集合に含まれる１以上のレジスタを前記実行パイプラインに接続することにより、前記パイプラインプロセッサ上の前記スレッド選択ハードウェアは、時間的不利益を被ることなく、及び割り込みを使用することなく、連続した命令間において前記第１のスレッド状態から前記第２のスレッド状態へと直接切替わる、コンピュータベースのシステム。
【請求項２】
前記プロセッサは、前記第１のプログラムスレッドの実行の際に、前記プロセッサの前記第２のスレッド状態を記憶する機能を有する、請求項１に記載のコンピュータベースのシステム。
【請求項３】
前記データ記憶装置の第１の集合は、複数のスレッドにより共有されるレジスタからなる、請求項１に記載のコンピュータベースのシステム。
【請求項４】
前記プロセッサは、状態選択レジスタを変更することにより、前記第１のスレッド状態と前記第２のスレッド状態とを切替える、請求項１に記載のコンピュータベースのシステム。
【請求項５】
前記ハードウェアスレッドスケジューラは、
少なくとも１つのハードリアルタイム（ＨＲＴ）スレッド、及び少なくとも１つの非リアルタイム（ＮＲＴ）スレッドと、
空きの量子時間内でＨＲＴスレッドを定期的にスケジューリングするためのＨＲＴスケジューラであって、所定の時刻における前記ＨＲＴスレッドの実行を確保するように前記ＨＲＴスレッドをスケジューリングするＨＲＴスケジューラと
を含む、請求項１に記載のコンピュータベースのシステム。
【請求項６】
前記量子時間は、少なくとも１つ命令サイクルである、請求項５に記載のコンピュータベースのシステム。
【請求項７】
前記ハードウェアスレッドスケジューラは、スケジューリングされた前記ＨＲＴスレッドがアイドル状態である場合、スケジューリングされた前記ＨＲＴスレッドを置き換えるようにＮＲＴスレッドをスケジューリングする、請求項５に記載のコンピュータベースのシステム。
【請求項８】
前記ハードウェアスレッドスケジューラは、ＨＲＴに割当てられていない量子時間においてＮＲＴスレッドの実行をスケジューリングする、請求項５に記載のコンピュータベースのシステム。
【請求項９】
前記ハードウェアスレッドスケジューラは、ＮＲＴスレッドを定期的に実行されるようにスケジューリングする、請求項８に記載のコンピュータベースのシステム。
【請求項１０】
プログラム命令を記憶する第１の記憶装置であって、前記プロセッサが、第１のフェッチ周期において前記第１の記憶装置から命令をフェッチする、第１の記憶装置と、
プログラム命令を記憶する第２の記憶装置であって、前記プロセッサが、第２のフェッチ周期において前記第２の記憶装置から命令をフェッチする、第２の記憶装置と
をさらに含み、前記第１のフェッチ周期は、前記第２のフェッチ周期よりも実質的に短い、請求項５に記載のコンピュータベースのシステム。
【請求項１１】
前記量子時間は、ちょうど１命令サイクルである、請求項５に記載のコンピュータベースのシステム。
【請求項１２】
ハードウェアスレッドセレクタ、及び実行パイプラインを有するマルチスレッドパイプラインプロセッサにおいてプログラムコンテクストを切替えるためのコンピュータを利用した方法であって、前記実行パイプラインが、命令を実行するための１組のステージを含み、前記１組のステージのそれぞれ異なるステージにおいて単一の命令を実行するように構成されるものにおいて、
第１のプログラムスレッドに対応する前記パイプラインプロセッサの第１のコンテクストをデータ記憶装置の第１の集合に記憶するステップと、
第２のプログラムスレッドに対応する前記パイプラインプロセッサの第２のコンテクストをデータ記憶装置の第２の集合に記憶するステップと、
前記第１のプログラムスレッド及び前記第２のプログラムスレッドに処理時間を割当てる所定の固定スケジュールに応答し、前記データ記憶装置の第２の集合を識別する命令に関連するコンテクスト番号に従って、前記実行パイプラインを前記ハードウェアスレッドセレクタを介して前記データ記憶装置の第１の集合から前記データ記憶装置の第２の集合に結合することにより、割り込みを使用することなく、及び時間的不利益を被ることなく、ある実行サイクルの終わりと、次に続く実行サイクルの始まりの前との間において、前記パイプラインプロセッサを前記第１のプログラムスレッドの実行から前記第２のプログラムスレッドの実行へと切替えるステップと
を含み、前記スケジュールは、第１数のサイクル毎に前記第１のプログラムスレッドに処理時間を割当てなければならないこと、及び第２数のサイクル毎に前記第２のプログラムスレッドに処理時間を割当てなければならないことを規定し、前記第１数のサイクルは、前記第２数のサイクルと等しくないことからなる、コンピュータを利用した方法。
【請求項１３】
前記切替えるステップは、前記ハードウェアスレッドセレクタに含まれる状態選択レジスタを変更することを含む、請求項１２に記載のコンピュータを利用した方法。
【請求項１４】
前記第１のプログラムスレッド、及び前記第２のプログラムスレッドのうち、前記プロセッサが前記スケジュールに従って実行するプログラムスレッドを識別するステップをさらに含む、請求項１２に記載のコンピュータを利用した方法。
【請求項１５】
前記スケジュールに従って前記プロセッサの空き処理時間を少なくとも前記第１のスレッド及び前記第２のスレッドに分配するステップをさらに含む、請求項１４に記載のコンピュータを利用した方法。
【請求項１６】
前記分配するステップは、前記空き処理時間を、各量子時間がスレッドを実行するための命令サイクルの数に対応する複数の量子時間に分割することを含む、請求項１５に記載のコンピュータを利用した方法。
【請求項１７】
少なくとも１つの量子時間は、所定数の実行サイクルの後、定期的に実行されるようにスケジューリングされたスレッドに対応する、請求項１６に記載のコンピュータを利用した方法。
【請求項１８】
前記識別するステップは、少なくとも１つのハードリアルタイム（ＨＲＴ）スレッド、及び少なくとも１つの非リアルタイム（ＮＲＴ）スレッドを識別することを含む、請求項１４に記載のコンピュータを利用した方法。
【請求項１９】
空き量子時間内でＨＲＴスレッドをスケジューリングするステップであって、所定時刻における前記ＨＲＴスレッドの実行を確保するように前記ＨＲＴスレッドをスケジューリングするステップをさらに含む、請求項１８に記載のコンピュータを利用した方法。
【請求項２０】
前記ＨＲＴスレッドがアイドル状態である場合、前記ＨＲＴスレッドに割当てられた量子時間に対し、ＮＲＴスレッドをスケジューリングするステップをさらに含む、請求項１８に記載のコンピュータを利用した方法。
【発明の詳細な説明】
【０００１】
関連出願
本出願は、1999年12月22日付の米国仮出願番号60/171,731、2000年6月22日付の米国仮出願番号60/213,745、および2000年12月1日付の米国仮出願番号60/250,781に基づいて優先権を主張し、これらは、ここで参照することによってすべて包含される。
【０００２】
【発明の属する技術分野】
本発明は、組込み型プロセッサアーキテクチャの分野に関する。
【０００３】
【従来の技術】
マイクロコントローラなどの従来の組込み型プロセッサは、一度に１つの割り込みにしか応答することができないので、単一のハードリアルタイム同期プロセスのみをサポートしている。Virtual Peripheral（VP）とよばれるハードウェア機能のソフトウェア実装のほとんどは、非同期に応答するので、これらの割り込みも非同期である。ＶＰの例には、イーサネット周辺装置（例えば100Mbitおよび10Mbitの送受信速度）、12Mbps USBなどの高速シリアル標準規格の周辺装置、IEEE-1394 FireWire 音声処理および圧縮:ADPCM、G.729、Acoustical Echo Cancellation(AFC)、画像処理周辺装置、モデム、IRDA（1.5Mおよび4Mbps）などの無線周辺装置、および、Bluetooth互換システムなどが含まれる。これらのＶＰは、家庭用PNA(Programmable Network Access)システム、VoIP(Voice over Internet Protocol)システム、および、非対称型デジタル加入者線（ADSL）などの様々なデジタル加入者線システムの一部として用いることができると共に、機械制御などの従来の組込み型システムアプリケーションにも用いることができる。
【０００４】
割り込みは、イベントが発生したことを示す中央演算処理装置（ＣＰＵ）に対する信号  である。従来の組込み型プロセッサは、外部ハードウェア割り込み、タイマ割り込みおよびソフトウェア割り込みを含む様々な割り込みをサポートしている。従来のシステムにおいて、割り込みが発生すると、ＣＰＵは、現在の命令を終了し、ＣＰＵコンテクストをセーブし（最低でもプログラムカウンタはセーブする）、その割り込みに応じる割り込みサービスルーチン（ＩＳＲ）のアドレスへジャンプする。ＩＳＲが完了して割り込みに対して応答が返されると、ＣＰＵは、割り込みからの復帰命令を実行して先のＣＰＵコンテクストを回復し、割り込みを受けた位置からメインコードを再び実行する。
【０００５】
ＣＰＵは、複数の割り込みを受信しても、これらを処理できなければならない。従来のシステムの中には、第１の割り込みを処理中に第２の割り込みが生じると、第１の割り込みが処理されるまで第２の割り込みが無視されるものもある。図１は、従来の割り込み応答を示している。「メイン」コードが第１の割り込み「Ａ  ＩＮＴ」によって中断されると、ＣＰＵは、その後、この割り込みに対するＩＳＲを処理する。第１の割り込みの処理中に第２の割り込み「Ｂ  ＩＮＴ」が受信される。この従来のシステムにおいては、第２の割り込み対するＩＳＲは、第１の割り込みに対するＩＳＲが完了するまで開始されない。
【０００６】
別の従来のシステムとしては、２レベルの割り込み優先順位を利用し、優先順位の高い方の割り込みが優先順位の低い方の割り込みに割り込むことができるが同じ優先順位の割り込みには割り込めないという規則を用いているものもある。
【０００７】
組込み型プロセッサには、多数の割り込みソースがあるので、いずれの割り込みソースがプロセッサに割り込みをかけることができるかを選択するための何らかの手段が存在しなければならない。従来のシステムにおいては、この選択は、制御（マスク）レジスタを使用することによって行なわれる。
【０００８】
上述のように、ＣＰＵは、割り込みが生じると、適切な割り込みサービスルーチン（ＩＳＲ）のアドレスをプログラムカウンタにロードする。この一実施形態では、割り込み番号をランダムアクセスメモリ（ＲＡＭ）への索引として用い、例えば割り込みベクトルテーブルを用いて、動的ＩＳＲアドレス（例えばIntel社の8x86プロセッサで使用されているような）を検索することである。この割り込みベクトルテーブルの大きさは、通常、限られた数の割り込みしか有しないこと、または、割り込み同士をグループ化して同じアドレスを使用することによって、制限されている。グループ化された割り込みは、その後、割り込みのソースを判定するためにさらに分析される。
【０００９】
１以上の割り込みの処理に伴う問題は、上述のように、その割り込みを処理する前に、ＣＰＵのコンテクストを格納しなければならないことにある。この格納は、ＣＰＵがＩＳＲの処理を終えたあと、割り込みを受信したときと同じ位置から処理を続行するために必要とされる。プログラムカウンタおよびその他様々なレジスタなどのコンテクスト情報の格納は、通常、少なくとも１クロックサイクルを必要とし、もっと多くのクロックサイクルを必要とする場合もある。この遅延は、ＣＰＵの有効処理速度を低減させてしまう。
【００１０】
コンテクスト格納は、ＲＩＳＣベースのプロセッサなど、多くの従来のプロセッサで用いられており、これらは、単一のレジスタ集合、例えば３２個のレジスタ（Ｒ０〜Ｒ３１）を含んでいる。しかし、これらのレジスタは、所望の処理タスクを行うのに不充分な場合がある。そのため、プロセッサは、コンテクストを切り替えるために、レジスタ値を頻繁にセーブおよびリストアしなければならなくなる。コンテクストの切り替えは、割り込みを処理するとき、または、マルチスレッド環境において別のプログラムスレッドに切り替えるときに発生する。命令を用いて古いコンテクストがスタックにセーブされ、コンテクストが切り替えられ、その後、新しいスレッド用の先のコンテクストが命令を用いてスタックの値を引き出すことによってリストアされる。これによって、次のようなものを含めて、様々な問題が生じる。（１）各コンテクスト切り替えに対してセーブおよびリストア動作が頻繁に必要とされるので、プロセッサの性能を大幅に低下させる。（２）コンテクストを切り替えるために必要とされるオーバヘッドによって、重要なタスクを適切に実行できない場合がある。
【００１１】
例えば、プログラムが１００クロックサイクルごとにポート位置の値を取得するためにそのポート位置を読み出す必要があり、その読み出し動作に５クロックサイクルしか要しないものと仮定すると、仮に、プログラムが、コンテクスト切り替えのために３２個のレジスタを必要とし、そのセーブ動作およびリストア動作のそれぞれが各レジスタについて２つの命令を必要とする場合、コンテクストのスイッチおよびリストアには、１２８個の命令が必要となり、読み出し動作は毎１００クロックサイクルごとに行わなければならないので、タスクを完全に実行することができなくなる。
【００１２】
従来のシステムは、タイムクリティカルなタスク用の専用ハードウェア、またはフロントエンド専用ロジックを用いることによってデータを取り込み、それをファースト・イン・ファーストアウト（ＦＩＦＯ）バッファにプットし、ソフトウェアで処理することによって、この問題を解決しようと試みてきた。これらの技術に伴ういくつかの問題としては、（１）専用フロントエンドロジックを必要とすること、および（２）多くのメモリを必要とすることがある。例えば、ＦＩＦＯは、使用できない空間を増加させ、他のいかなる機能にも利用することができない。
【００１３】
従来の組込み型プロセッサシステムの割り込み処理に関する他の問題は、クリティカルなタイミング要件を有する割り込みが失敗する場合があるということである。図１を参照すると、割り込みＡおよび割り込みＢがいずれもタイムクリティカルである場合、これらがいずれも高優先順位を有するようにスケジューリングされるので（優先順位を利用できる場合）、割り込みＡは適当な時点で処理されるが、割り込みＢは、割り込みＡが処理され終わるまで処理されない。この遅延によって、割り込みＢは、所定の時間内に処理されないことがあるので、失敗する場合がある。即ち、従来のシステムは、割り込みが処理される時間に関して、適当な確実性を提供しない。
【００１４】
組込み型プロセッサは、特定の目的に使用されるプロセッサである。組込み型プロセッサは、通常、何らかのメモリおよび周辺機能をチップ上に集積させている。従来の組込み型プロセッサは、複数のハードウェアスレッドを用いて動作する能力を持たない。
【００１５】
パイプラインプロセッサは、第１の命令の実行が完了する前に第２の命令を開始するプロセッサである。即ち、複数の命令が、異なるステージのそれぞれにおいて、同時に「パイプライン」に存在する。図３は、従来のパイプラインを例示している。
【００１６】
フェッチステージ（Ｆ）は、メモリから命令をフェッチし、通常１サイクル当たり１命令をフェッチする。デコードステージ（Ｄ）は、実行すべき命令機能を解読して必要とされるリソースを識別する。リソースには、汎用レジスタ、バスおよび機能ユニットなどが含まれる。発行（Ｉ）ステージは、リソースを予約する。例えば、パイプライン制御のインターロックがこのステージに保持される。発行ステージの間に、レジスタからオペランドも読み出される。命令は、複数存在し得る実行ステージ（Ｅ）のうちの１つにおいて実行される。最後のライトバックステージ（Ｗ）は、結果をレジスタに書き込むために用いられる。
【００１７】
従来のパイプラインプロセッサが抱える問題は、ＣＰＵの速度が増大することに伴って、待機状態にすることなく、即ち、命令パイプラインをストールさせることなく、フラッシュメモリから命令オペコードをフェッチすることが困難になるということである。より高速のメモリ、例えばスタティックＲＡＭ（ＳＲＡＭ）を用いて命令フェッチ回数を増加させることができるが、組込み型プロセッサに必要とされる空間および電力も増加してしまう。従来のシステムは、様々な技術を用いてこの問題を解決しようと試みてきた。かかる技術の１つには、フラッシュメモリからフェッチおよび実行することがある。しかし、この技術は、従来のプロセッサの実行速度を、例えば４０ＭＩＰＳ（１秒当たり４千万命令）にまで制限する場合があり、この速度は多くのアプリケーションにとって満足なものでない。
【００１８】
他の技術としては、プログラムコードをフラッシュメモリその他の不揮発メモリから高速なＳＲＡＭにロードし、その後すべてのプログラムコードをＳＲＡＭから実行することがある。上述のように、この解決方法の問題点は、ＳＲＡＭがかなり大きな空間をダイ上に必要とし（相当するフラッシュメモリに比較して約５倍の空間を必要とする）、動作させるためにかなりの電力を必要とすることである。
【００１９】
第３の技術としては、フラッシュメモリおよびＳＲＡＭキャッシュを用いることがある。参照するプログラムがＳＲＡＭ内にあれば全速力での実行が可能になるが、そうでなければキャッシュミスが発生し、次のキャッシュロードの間に長い待ち時間が生じる。かかるシステムは、実行時間が予測不能かつ判定不能になり、これは通常、実時間性に制約があるプロセッサにとって許容されない。この実時間性の制約は、IEEE802.3（Ethernet（登録商標））、USB、HomePNA1.1またはSPI(シリアル周辺装置インタフェース）等の標準規格に必要とされるタイミングに適合させるために課せられる制約である。これらの標準規格では、イベントが発生してから一定量の時間内に応答が生成されることを必要とする。
【００２０】
【発明が解決しようとする課題】
従って、（１）組込み型プロセッサにおいてマルチスレッド化を可能にし、（２）マルチスレッド環境においてゼロタイムコンテクストスイッチを行い、（３）マルチスレッドに対して複数のハードリアルタイムおよび非リアルタイム優先順位レベルを許容するようにスケジューリングし、（４）マルチスレッド環境においてデータおよび命令を複数のメモリブロックからフェッチし、および（５）特定のスレッドがマルチスレッドの複数の状態を命令パイプラインに格納できるようにする、システムおよび方法が必要とされている。
【００２１】
本発明は、デジタル信号プロセッサ（ＤＳＰ）と共に用いることも可能であり、その場合、本発明によって、より小さいメモリバッファ、より高速の応答時間および入出力遅延時間の低減が可能になる。
【００２２】
【課題を解決するための手段】
本発明は、組込み型プロセッサにおいてマルチスレッド化を可能にし、マルチスレッド環境においてゼロタイムコンテクストスイッチを行い、複数のハードリアルタイムおよび非リアルタイム優先順位レベルを許容するように複数のハードウェアスレッドをスケジューリングし、マルチスレッド環境においてデータおよび命令を複数のメモリブロックからフェッチし、特定のスレッドがマルチスレッドの複数の状態を命令パイプラインに格納できるようにする、システムおよび方法である。
【００２３】
【発明の実施の形態】
図面を参照して、本発明の好ましい実施形態をこれから説明する。図面において、同じ符号は、同一または機能的に類似した構成要素を示している。また、図面において、各符号の一番左の桁は、その符号が最初に使用された図面の番号に対応している。
【００２４】
本発明は、上述した問題を解決するシステムおよび方法である。具体的には、本発明は、組込み型プロセッサにおいてマルチスレッド化を可能にし、マルチスレッド環境においてゼロタイムコンテクストスイッチを行い、多数のハードリアルタイムおよび非リアルタイム優先順位レベルを許容するようにマルチスレッドをスケジューリングし、マルチスレッド環境においてデータおよび命令を複数のメモリブロックからフェッチし、特定のスレッドがマルチスレッドの複数の状態を命令パイプラインに格納できるようにするものである。
【００２５】
本発明は、複数のプログラムスレッドを単一プロセッサ上で同時実行しているように見せると共に、スレッド間の実行の自動切替を可能にすることによって、従来の組込み型プロセッサの制限を克服している。本発明は、ゼロタイムコンテクストスイッチ能力、自動スレッドスケジューラおよび複数種類のメモリ（例えばＳＲＡＭおよびフラッシュメモリ）からのフェッチコードを有することによって、これを達成する。この同時実行の態様は、プロセッサのパイプラインを利用可能なスレッド間で時分割多重化することによって達成される。
【００２６】
本発明のマルチスレッド化能力によって、複数のスレッドがパイプラインに同時に存在することが可能になる。図２は、マルチスレッド環境における割り込み応答を例示している。スレッドＡおよびＢは、いずれもハードリアルタイム（ＨＲＴ）スレッドであり、それぞれ割り込みＡおよびＢに依存してストールしている。スレッドＣは、メインコードスレッドであり、非リアルタイム（ＮＲＴ）である。割り込みＡが発生すると、スレッドＡが再開され、スレッドＡは、スレッドＣとインタリーブされる。スレッドＣは、ＮＲＴなので、もはや完全なパイプラインスループットを有しなくなる。割り込みＢが発生すると、スレッドＢが再開され、スレッドＢは、スレッドＡと同じ優先順位であるので、パイプラインにインタリーブされ、その時点でスレッドＣが完全にストールする。メインコードであるスレッドＣは、ＨＲＴスレッドがパイプラインスループットのすべてを使用してはいないときにのみ、実行を継続する。
【００２７】
図５は、本発明の一実施形態による組込み型プロセッサを例示している。この組込み型プロセッサは、フェーズロックドループ（ＰＬＬ）即ちウォッチドッグタイマーなどの周辺装置ブロックを含むことができる。また、この組込み型プロセッサは、シャドウＳＲＡＭ付きフラッシュメモリを含むこともできる。シャドウＳＲＡＭは、プログラムに対してより高速なアクセスを提供する。半導体製造プロセスによっては、ＳＲＡＭのアクセスは、フラッシュメモリのアクセスよりも速い場合がある。シャドウＳＲＡＭへのプログラムのロードは、プログラム制御で行なわれる。また、この組込み型プロセッサは、従来のＳＲＡＭデータメモリ、ＣＰＵコア、Virtual Peripheralサポートロジックと呼ばれる入出力（Ｉ／Ｏ）サポートロジック、および、有限インパルス応答（ＦＩＲ）フィルタコプロセッサも含む。本発明のマルチスレッド化態様は、マルチスレッドコンテクストおよびスレッド選択ロジックが内在する場合、ＣＰＵの大部分を占める。さらに、マルチスレッド化の実施形態によっては、同一チップ上にコプロセッサまたはＤＳＰコアも存在する場合がある。
【００２８】
上述のように、本発明の特徴は、スレッドコンテクストをオーバヘッドなしに切り替える能力にある。オーバヘッドのないコンテクストスイッチは、フェッチユニットが命令をフェッチするために使用するプログラムカウンタを制御することによって、達成される。図４は、本発明の一実施形態によるマルチスレッド化されたフェッチ切替パイプラインを例示している。プロセッサは、すべてのレジスタアクセスが正しいスレッドのコンテクスト内の正しいレジスタに関連する限り、パイプライン内の異なるステージにおいて異なるスレッドからの情報を用いて機能する。
【００２９】
毎サイクルごとに（または毎特定量ごと、即ちあるセット数のサイクルまたは命令ごとに）スレッドを切り替えることによって、システムは、アクティブな同優先順位のスレッドの数に依存するジャンプ（パイプラインのフラッシュを必要とする）によるペナルティも低減／除去する。跳んでいるスレッドをフラッシュする必要しかないので、その他のスレッドがすでにパイプラインに存在していれば、フラッシュが回避／低減される。
【００３０】
ゼロタイムコンテクストスイッチは、いかなる時間ペナルティを招くこともなく、あるプログラムコンテクストと別のプログラムコンテクストとの間を切り替える能力である。これは、コンテクストスイッチがマシン命令間で行なわれることを意味している。同様の発想は、コンテクスト間のスイッチのコストがゼロではないが小さい、低オーバーヘッドコンテクストスイッチに適用することもできる。本発明は、これらの状況のいずれをも包含しているが、分かりやすくする目的で、ゼロタイムコンテクストスイッチを以下で説明する。ゼロタイムコンテクストスイッチと低オーバーヘッドコンテクストスイッチとの違いは、当業者には明らかであろう。上述のように、プログラムコンテクストは、マシンの状態を表すレジスタの集まりである。コンテクストには、通常、プログラムカウンタ、状態レジスタおよび複数のデータレジスタが含まれる。すべてのプログラム間で共用する他の何らかのレジスタを含むことも可能である。
【００３１】
命令がパイプラインに渡されるとき、コンテクスト番号も一緒に渡される。このコンテクスト番号は、プログラムカウンタをロードするために使用するコンテクストレジスタを定め、レジスタ値をロードまたはセーブする。これによって、各パイプラインステージが個別のコンテクストで動作できるようになっている。コンテクスト間の切り替えは、単に異なるコンテクスト番号を用いることによって行なわれる。
【００３２】
図６は、本発明の一実施形態によるスレッドごとのコンテクストの例を示している。この例におけるコンテクストには、図示のように、３２個の汎用レジスタ、８個のアドレスレジスタ、および、様々なその他の情報が含まれている。スレッドのコンテクストの一部として格納されるデータの種類は、図６に例示するものとは異なる場合もある。
【００３３】
本発明は、ゼロタイムコンテクストスイッチによって２以上のコンテクスト間を迅速に（すべての命令をできる限り頻繁に）切り替えるという利点を有する、命令レベルでマルチスレッド化するシステムおよび方法である。各コンテクストが実行に要する時間の量は、「量子時間」(quantum)と呼ばれる。最小の量子時間は、１命令に相当する１クロックサイクルである。マルチサイクル命令の場合、量子時間は１命令よりも小さい場合がある（即ち、タイムスライスの分解能は、スレッドが実行している命令ではなく、単に量子時間によって決まる）。
【００３４】
利用可能なコンテクスト間での利用可能な処理時間の割り当ては、スケジューリングアルゴリズムによって実施される。S.Eggers他による「Simultaneous Multithreading:APlatform for Next Generation Processors」IEEE Micro, pp.12-19（1997年9/10月）など、従来のマルチスレッド化システムにおいては、コンテクスト間での量子時間の割り当ては、キャッシュ内の命令の利用可能性などの外部刺激によって決まる。
【００３５】
本発明においては、量子時間の割り当てが固定のスケジュールに従って行なわれる場合に利点が生じる。このコンテクストのスケジューリングは、厳密なスケジューリング、やや柔軟なスケジューリングおよび自由なスケジューリングの３つに大別することができる。
【００３６】
図７ａは、本発明の一実施形態による厳密なスケジューリングの例を示している。図７ｂは、本発明の一実施形態によるやや柔軟なスケジューリングの例を示している。図７ｃは、本発明の実施形態による自由なスケジューリングの例を示している。
【００３７】
図７ａを参照すると、図４に例示したスレッドコントローラ等のスケジューラを用いて厳密なスケジューリングを行う場合、スケジュールは固定され、短時間にわたって変化しない。例えば、スケジュールが図７ａに示すように「ＡＢＡＣ」とプログラムされている場合、スレッドの実行時シーケンスは、図７ａに示すように「ＡＢＡＣＡＢＡＣＡＢＡＣ...」となる。厳密にスケジューリングされたスレッドは、一秒当たりに実行される命令の数が厳密であることからハードリアルタイム（ＨＲＴ）スレッドと呼ばれ、ＨＲＴスレッドは、厳しいタイミング要件を満たすことのできる決定性性能（deterministic performance）を有する。
【００３８】
図７ｂを参照すると、スケジューラがやや柔軟なスケジューリング技術を用いる場合、スケジュールのいくらかが固定され、残りの利用可能な量子時間は、非リアルタイム（ＮＲＴ）スレッドで満たされている。例えば、スケジュールが「Ａ＊Ｂ＊」とプログラムされていて、「＊」が任意のＮＲＴスレッドを実行することができるワイルドカードであるものとすると、スレッドの実行時シーケンスは、ＮＲＴスレッドであるスレッドＤ、EおよびFを用いて、図７ｂに示すように「ＡＤＢＥＡＦＢＥＡＦＢＥ...」のようになる。
【００３９】
厳密なスケジューリングまたはやや柔軟なスケジューリングを用いることの利点は、各ＨＲＴスレッドに対する実行時間の割り当てが設定されているので、各スレッドを実行するために必要な時間が予測可能であることにある。スレッドが多い場合、スレッドが所定の時間内で実行を完了する必要がある場合があるので、かかる予測可能性は、重要である。これに対して、従来のシステムを参照して上述した割り込みサービスルーチンは、ハードリアルタイムスレッドが予測可能な時間で完了することを保証していない。
【００４０】
ハードリアルタイムスレッドについてのこれらの静的およびやや柔軟なスケジュールは、プログラム可能な量子時間サイクルテーブルを用いて達成される。テーブル内の各エントリは、利用可能な量子時間サイクルを表し、そのサイクルが割り当てられるハードリアルタイムスレッドを提供する。テーブルは、例えば６４エントリまでの可変長である。テーブルの端に達すると、スケジューラは、テーブル内の最初の要素から続けて、無限に繰り返すシーケンスを提供する。例えば、図７ｄは、本発明の一実施形態による３つのハードリアルタイムスレッドを用いたやや柔軟なスレッドスケジュールの例である。スレッドAには時間の５０％がスケジュールされ、スレッドBには時間の２５％の時間がスケジュールされ、および、スレッドCには時間の１２．５％がスケジュールされている。ＣＰＵが２００MIPSのクロックである場合、これらは、スレッドAが１００MIPSの専用ＣＰＵ実行速度を有し、スレッドBが５０MIPSの専用ＣＰＵ実行速度を有し、スレッドCが２５MIPSの専用ＣＰＵ実行速度を有し、残りのスレッド（例えば、非リアルタイムスレッド）が２５MIPSの最小ＣＰＵ実行速度を有することに等しい。
【００４１】
従って、各ハードリアルタイムスレッドは、テーブルで指定されたように命令スロットが割り当てられるので、指定した実行速度が保証され、各々が保証された決定性性能を有する。本発明によって与えられる予測可能性は、ハードリアルタイムスレッドを実行するために必要とされる時間が分かり、また、スレッドを確実に完了させるためにプログラムが追加の時間を割り当てる必要がなくなるので、プログラムの効率を大幅に向上させる。即ち、各ハードリアルタイムスレッドに対する割り込み待ち時間は、その静的割り当ての分解能内に判定される。この待ち時間は、パイプライン長とスレッドが次にスケジューリングされるまでの時間とによって判定される。付加されるスケジューリングジッタは、同期クロックと同期する非同期割り込みと同じであると考えることができる。例えば、２５％の割り当てをもつスレッドは、システムクロックの２５％で動作しているクロックに関して、決定性割り込み待ち時間を有することになる。
【００４２】
このテーブルは、ハードリアルタイムタスクのために命令スロットを予約しているが、これは、他の非リアルタイムタスクもその命令スロットで実行できないことを意味しているのではない。例えば、スロットCは、ほとんどの時間、アイドル状態である場合がある。例えば、スレッドCが１１５．２ｋｂｐｓのＵＡＲＴを表す場合、スレッドＣは、データを送受信するときにしか決定性性能を必要としない。スレッドは、アクティブでない場合、スケジューリングされる必要がない。スケジューラは、すべての空き命令スロットおよびスレッドに割り当てられているがアクティブではない命令スロットを、非リアルタイムスレッドのために利用することができる。
【００４３】
利用可能なＭＩＰＳのうちの５０％より多くを単一スロットに割り当てることができ、これによって、同一のスレッドからの連続する命令相互間の遅延時間が非決定性になるが、同じにはならない。アプリケーションによっては、この命令相互間の遅延のばらつきは欠点でない場合もある。例えば、あるスレッドをスロット1,2,3,4,5,6,7,9,...にスケジューリングすることによって、ＣＰＵの利用可能なＭＩＰＳの７５％を達成できる場合もある。ある種のＮＲＴスレッドのスケジューリングは、各スレッドをとおして回転する。即ち、スレッドは、各アクティブなスレッドから実行された１命令を用いて、順番にスケジューリングされる。この種のやや柔軟なスケジューリングによって、非リアルタイムスレッドをスケジュール内の空きスロットに（例えば、図７ｄに「＊」でラベル付けされた量子時間に）スケジューリングすることが可能になり、スロット内において、スケジューリングされたハードリアルタイムスレッドは、上述のように非アクティブである（例えば、スレッドＢがアクティブでないとすれば、スレッドＢの位置において）。この種のスケジューリングは、しばしば「ラウンドロビン」スケジューリングと呼ばれる。
【００４４】
非リアルタイムシステムについて、複数レベルの優先順位がサポートされる。低優先順位のスレッドは、高優先順位のスレッドに対して常に道をゆずる。高レベル優先順位によって、低優先順位のスレッドに対して複数命令の微小な動作が可能になるので、リアルタイムオペレーティングシステム（ＲＴＯＳ）のソフトウェアでの実施が可能になる。ＲＴＯＳカーネルのＮＲＴスレッドが、その制御下で他のＮＲＴスレッドよりも高い優先順位を有している場合、その高優先順位のスレッドが動作している間は、いかなる低優先順位のスレッドもスケジューリングされないことが保証される。それゆえ、ＲＴＯＳカーネルは、他のＮＲＴスレッドによって割り込みを受ける可能性を考慮することなく、動作を実行することができる。
【００４５】
図７ｃを参照すると、自由なスケジューリング技術を利用する場合、非リアルタイムスレッド用に特に予約される量子時間はなく、いずれの量子時間もリアルタイムスレッドのために用いることができる。
【００４６】
スレッドは、静的なスケジュールを有し（即ち、スレッドには、ＨＲＴテーブルの固定スロットが割り当てられる）、スレッドには、ＮＲＴスレッドとしてフラグを立てることもできる。従って、スレッドは、ＨＲＴテーブルによる割り当てにしたがって最小実行速度が保証されているが、他のスロットをＮＲＴスレッドとして用いることによって、さらに高速に実行することもできる。
【００４７】
本発明には、複数のソフトウェアスレッドを実行し、これらのスレッド間を自動的に切り替えるためのハードウェア支援機能が含まれ、以下にこれを説明する。このマルチスレッド化支援機能には、リアルタイムおよび非リアルタイムタスクのスケジューリング、バイナリおよびカウンティングセマフォ（割り込み）によるタスク間通信、高速割り込み応答、並びに、コンテクストスイッチおよび増分リンクなどを含む、様々な特徴が含まれる。
【００４８】
マルチスレッド化支援機能を組込み型プロセッサのコアに含めることによって、コンテクストスイッチのためのオーバーヘッドをゼロまで低減させることができる。ゼロタイムコンテクストスイッチは、個々の命令間でのコンテクストスイッチを可能にする。ゼロタイムコンテクストスイッチは、コアの時分割多重化のようなものと考えることができる。
【００４９】
本発明の一実施形態においては、フラッシュメモリが複数の独立したブロックに分割されている場合であっても、ＳＲＡＭとフラッシュメモリとの両方からコードをフェッチすることを可能にしている。このことは、本発明のスレッドスケジューリングを複雑にしている。本発明において、各メモリブロックは、スレッドの全体的なスケジューリングとは独立にスケジューリングされる。図８は、本発明の一実施形態による２レベルのスケジューリングを用いたスレッドフェッチロジックを例示している。
【００５０】
本発明の一実施形態において、フェッチされた命令は、複数種のメモリに格納することができる。例えば、命令は、ＳＲＡＭおよびフラッシュメモリに格納することができる。上述のように、命令等のデータをＳＲＡＭからアクセスする場合、同じデータまたは命令をフラッシュメモリからアクセスするよりも高速である。この実施形態においては、ハードリアルタイムスレッドが単一サイクルでフェッチされ、ハードリアルタイムスレッドについてのすべての命令がＳＲＡＭに格納されるようにすることが好ましい。これに対して、非リアルタイムスレッドからフェッチする命令は、ＳＲＡＭまたはフラッシュメモリのうちのいずれに格納してもよい。
【００５１】
図８を参照すると、シャドウＳＲＡＭ内の命令は、ＨＲＴスレッドセレクタ802またはＮＲＴシャドウスレッドセレクタ804からのポインタに基づいてフェッチされる。フラッシュメモリからの命令は、ＮＲＴフラッシュスレッドセレクタ806からのポインタに基づいてフェッチされる。スレッドセレクタ802,804,806については、以下でさらに詳しく説明する。ＳＲＡＭおよびフラッシュメモリの出力は、マルチプレクサ（ＭＵＸ）810に入力され、マルチプレクサは、ポストフェッチセレクタ812からの出力に基づいて、以下で説明するように、適切な命令を出力する。その後、ＭＵＸの出力をデコードし、従来のパイプラインプロセスまたは以下で説明する修正したパイプラインプロセスを用いて、実行を継続することができる。
【００５２】
図９は、本発明の一実施形態によるＨＲＴスレッドセレクタ802を例示している。上で示したように、シャドウＳＲＡＭ820は、単一サイクルランダムアクセス命令フェッチを提供する。この実施形態において、ハードリアルタイム（ＨＲＴ）スレッドは、単一サイクルの判定を必要とするので、かかるＨＲＴスレッドがＳＲＡＭからしか実行できない場合がある。ＨＲＴスレッドコントローラ802は、複数のＨＲＴスケジュールテーブルの選択を可能にするバンクセレクタ902を含んでいる。バンクセレクタは、任意のある時点においていずれのテーブルが使用中であるかを判定する。複数テーブルの使用によって、既に実行されているＨＲＴスレッドに影響を与えることなく、新しいスケジュールを構築することができるようになる。カウンタ904は、ＨＲＴセレクタ802内のレジスタにおけるタイムスライスを指し示すために用いられる。カウンタ904は、最後のエントリに達したとき、即ちタイムスライス63が読み出されたときに、リセットされる。カウンタ904はバンクセレクタ902とともに用いられ、後続のサイクルにおいてシャドウＳＲＡＭにフェッチされることになるスレッドを識別する。識別されたスレッドがアクティブである（例えばサスペンドされていない）場合、識別されたスレッドのプログラムカウンタ（ＰＣ）が獲得され、後続のサイクルにおいてシャドウＳＲＡＭのアドレスとして用いられる。例えば、図９に関して説明すると、バンクセレクタ902およびカウンタ904に基づいてタイムスライス番号1が識別された場合、このタイムスライスによって識別されたスレッドは、後続のサイクルにおいてＳＲＡＭによってフェッチされることになるスレッドを表している。図９に記載したブロックの出力は、信号の集合である。８つの信号を用いて、８スレッドのうちのいずれがフェッチされることになるかを判定する。もちろん、本発明は、８スレッドのみの制御に限定されるわけではない。さらに多くの信号を用いてさらに多くのスレッドを制御することもできる。信号の１つは、フェッチすべきＨＲＴスレッドが存在しないことを示すために用いられる。
【００５３】
図１０は、本発明の一実施形態によるＮＲＴシャドウＳＲＡＭスレッドセレクタ804およびシャドウＳＲＡＭアクセスロジックを例示している。ＮＲＴシャドウスレッドセレクタ804には、利用可能なスレッド識別装置1010、シャドウＳＲＡＭからフェッチされた過去の動的スレッドを識別するためのレジスタ1012、および、フリップフロップ（Ｆ／Ｆ）が含まれる。レジスタおよび利用可能なスレッド識別装置1010（以下で説明する）は、スレッドセレクタユニットによって受信され、次のサイクルにおいて（存在すれば）ＳＲＡＭによってアクセスされるべきスレッドを識別する。スレッドセレクタ1014は、1012から受信した最後のスレッド番号と1010から受信した利用可能なスレッド識別装置とを用いて次にフェッチすべきスレッドを判定し、ＮＲＴスレッドの正しいラウンドロビン選択を保証する。
【００５４】
図１１は、本発明の一実施形態によるＮＲＴ利用可能スレッド識別装置1010を例示している。ＮＲＴ利用可能スレッド識別装置1010は、各スレッドについて、そのスレッドがアクティブであるか否か、そのスレッドが動的なものとして識別されているか否か、および、そのスレッドが高優先順位なものとしてマークされているか否かに基づいて、出力を生成する。アクティブ、動的、高優先順位のスレッドが存在しない場合、ＮＲＴ利用可能スレッド識別装置1010は、各スレッドについて、そのスレッドがアクティブであるか否か、そのスレッドが動的（ＮＲＴ）なものとして識別されているか否か、および、そのスレッドが低優先順位なものとしてマークされているか否かに基づいて、出力を生成する。
【００５５】
ＮＲＴシャドウＳＲＡＭスレッドセレクタ804は、各スレッドについて、ＮＲＴスケジュール可能出力が真であるか否か、および、そのスレッドのＰＣがシャドウＳＲＡＭを指しているか否かを判定するロジックに基づいて、シャドウＮＲＴスケジュール可能ロジック出力を生成する。ＰＣがシャドウＳＲＡＭ内の位置を指しているか否かの判定は、アドレスを検査することによって、即ち、シャドウＳＲＡＭおよびフラッシュメモリがアドレス空間内の異なる領域にマップされていることを検査することによって、行なわれる。
【００５６】
上述のように、ＮＲＴ利用可能スレッド識別装置1010は、利用可能なスレッドを識別し、これらのスレッドのうちの１つは、過去に選択され、シャドウＲＡＭから連続的にフェッチされ、パイプラインによって使用されて、レジスタ1012に格納されている過去のスレッドに基づいて選択される。
【００５７】
ＨＲＴスレッドセレクタ802が、そのサイクルがＮＲＴスレッドのために利用可能であることを示す場合、選択されたスレッドのＰＣが取得され、次のサイクルにおいてシャドウＳＲＡＭアクセスのためのアドレスとして使用される。
【００５８】
現在のシャドウＳＲＡＭアクセスがＮＲＴスレッド（過去のサイクルで選択された）でなく、かつ、ポストフェッチセレクタ812がそのシャドウＳＲＡＭをデコードステージのためのソースとして選択しない限り、選択されたスレッド番号（「スレッドなし」の場合も含む）がレジスタ1012にラッチされる。即ち、現在のシャドウＳＲＡＭアクセスがＨＲＴスレッドである場合、現在のシャドウＳＲＡＭアクセスが非スレッドである場合、または、現在のＳＲＡＭアクセスがポストフェッチセレクタ812によって選択されたＮＲＴスレッドである場合にのみ、選択されたスレッド番号が「過去のスレッド」であるものとしてラッチされる。ポストフェッチセレクタ812は、以下でさらに詳細に説明する。
【００５９】
図１２は、本発明の一実施形態によるＮＲＴフラッシュメモリスレッドセレクタ806を例示している。フラッシュ読み出し専用メモリ（ＲＯＭ）は、そのデータにアクセスするために複数のクロックサイクルを必要とする。本発明のこの実施形態においては、フラッシュＲＯＭからの命令速度を向上させるために、フラッシュメモリが４つのブロックに分割され、それぞれがアドレス空間における４つの範囲に対応している。これらのブロックは、図８において、フラッシュＡ、フラッシュＢ、フラッシュＣおよびフラッシュＤとして示されている。各ブロックは独立にフェッチすることができ、そのため、各ブロックは、そのブロックからいずれのスレッドをフェッチすることができるかを判定するために、各自のＮＲＴスレッドセレクタ806を必要とする。上述のように、ＮＲＴスレッドだけは、フラッシュＲＯＭから実行することができる。
【００６０】
アクティブなスレッドの集合とＰＣがこのフラッシュブロックに存在するスレッドの集合との交差が、利用可能スレッド識別装置1010によって生成され、スレッドセレクタ1214によって受信される。スレッドセレクタ1214は、過去のスレッド番号を用いて次のスレッドをラウンドロビンの方法で選択する。スレッドＰＣのユニット1214は、選択されたスレッドに対するプログラムカウンタ（ＰＣ）を判定し、このＰＣをアドレスに従ってフラッシュブロックに渡す。フラッシュメモリの出力は２重バッファリングされており、後続のフェッチ動作が開始された後でもその出力が「有効」にとどまるようにしている。
【００６１】
図１３は、本発明の一実施形態によるポストフェッチセレクタを例示している。フラッシュブロックおよびＳＲＡＭブロックのそれぞれがスレッドを選択した後、ポストフェッチセレクタ812は、そのスレッドをパイプラインに渡すスレッドとして選択する。ＨＲＴスレッドがアクティブであれば、これが常に選択される。そうでなければＮＲＴスレッドが選択される。この例においては、フラッシュ／シャドウＳＲＡＭリソースは、ソースセレクタ1302によってＮＲＴスレッドが選択された元の最後のフラッシュ（またはシャドウＳＲＡＭ）ブロックに応じて、ラウンドロビンの順で選択される。
【００６２】
本発明の別の態様は、関連するスレッドまたは他のスレッドについてのスレッド状態をセーブおよびリストアする能力である。マルチスレッドＣＰＵは、機能ユニットの集合に対してインターリーブされた複数のスレッドの実行を有する。ＣＰＵ状態は、各スレッドに対して複製される。スレッドによっては、他のスレッドの状態を読み出しまたは書き込みできる必要があるスレッドもある。例えば、１スレッドで動作しているリアルタイムオペレーティングシステム（ＲＴＯＳ）は、単一のハードウェアスレッドに対して多重の複数のソフトウェアスレッドの実行を必要とする場合があり、そのため、ＲＴＯＳは、かかるソフトウェアスレッドの状態をセーブおよびリストアできる必要がある場合がある。
【００６３】
他のプロセッサは、各ハードウェアスレッド上で動作する個別のオペレーティングシステム（ＯＳ）カーネルを有し、カーネルはこれらのスレッドの状態をセーブおよびリストアすることに責任を負っている。これは、既存のＲＴＯＳからのコードがハードウェアスレッドを制御することに用いられる場合、適当ではない。
【００６４】
本発明と共に用いることのできる命令集合の１種は、１つの一般的なソース（メモリまたはレジスタ）、１つのレジスタソースおよび１つの一般的な宛先を用いて、命令集合を記憶するためのメモリである。本発明は、１つのスレッドにその一般的なソースあるいは一般的な宛先またはその両方を設定し、他のスレッドの状態を用いることを可能にする。プロセッサ状態ワードにおける２つのフィールド、ソーススレッドおよび宛先スレッドが使用され、レジスタまたはメモリに対するソースおよび／または宛先アクセスについての正常なスレッドＩＤを上書きする。
【００６５】
本発明は、従来の単一スレッドのＣＰＵからのＲＴＯＳコードを新しいマルチスレッドのアーキテクチャに容易に移植することを可能にする。本発明は、作業者スレッドと管理者スレッドとの間に提示する単純な方法を与える。
【００６６】
本発明の他の実施形態において、上述のマルチスレッド化システムは、さらに強力なパイプライン構造と共に用いられる。図１４は、本発明の一実施形態によるマルチスレッド化された発行スイッチパイプラインを例示している。従来のパイプライン処理環境においては、フェッチおよびデコードステージは、そのフェッチおよびデコードステージがいつ行なわれたに関わらず、同一の出力になる。これに対して、本発行ステージはデータ依存であり、このステージは、データをソースレジスタから取得するので、この動作の結果は、発行動作の時点におけるソースレジスタのデータに依存している。本発明のこの実施形態においては、スレッド選択決定は、発行ステージの入力に対して遅延される。
【００６７】
本発明の一実施形態において、発行スイッチは、図１４に示すように、フェッチおよび発行ステージにおいてスレッドラッチを使用することによって、実施される。この発行ステージは、いずれのスレッドを実行すべきかを、優先順位およびスレッドスイッチアルゴリズム（プリフェッチ選択に従う）に基づくだけでなく、データおよびリソース依存性にも基づいて決定する。フェッチおよび発行ステージ内のラッチの数を増やすことによって、いかなる数のスレッドも扱うことができる。
【００６８】
図１５は、本発明の一実施形態によるマルチスレッド化された並列デコードパイプラインを例示している。図１５は、並列フェッチおよびデコード拡張を示している。並列フェッチステージは、各サイクルごとにメモリアクセスを必要とするので、プリフェッチシステムなしに、または、プログラムメモリをマルチポート化することなく並列化することができない。プログラムメモリのマルティポート化は、すべてのスレッドのそれぞれが利用性のほとんどない各自のポートを有する必要があるので、経済的な解決方法ではない。プリフェッチシステムを用いて、一時的にプログラムメモリの線をフェッチすることによって、バス競合を低減することができる。すべてのスレッドのそれぞれについてバッファ線を実装し、これらのバッファ線をフェッチステージとデコードステージとの間でマルチポートした場合、フェッチユニットは命令を任意のスレッドから並列に供給することができる。その結果、スレッドスイッチをよりよくパイプラインフラッシュから隠し、割り込み待ち時間を減少させることができる。例えば、ジャンプフラッシュの改善は、完全に同一ではない優先順位の開始すべきスレッドが存在し、低い方の優先順位のスレッドが開始される場合に行なわれる。割り込み待ち時間の改善は、既にフェッチおよびデコードされて割り込みに対して発行を準備しているＩＳＲコードを開始することによってなされる。
【００６９】
図１６は、本発明の一実施形態によるマルチスレッド化されたスーパースカラーパイプラインを例示している。図１６において、機能ユニットを最大限利用するために、複数の命令が同一のスレッドまたは異なるスレッドから並列に実行される。発行ステージは、スレッド選択、リソース割り当ておよびデータ依存物保護について責任を負う。そのため、発行ステージは、スレッドのスケジューリングを最適化して、最大限のリソース利用および最大限のトータルスループットを保証している。それより前のステージ（フェッチステージおよびデコードステージ）は、発行スレッドセレクタから利用可能なスレッドのプールを維持しようと試みる。
【００７０】
本発明の組込み型プロセッサのマルチスレッド化の特徴の１つは、独立に書かれてオブジェクト形態で配布されているVirtual Peripheral（ＶＰ）を統合する能力である。ＶＰが極めて厳しいジッタ許容差を有していても、異なるＶＰに対して互いの影響を考慮することなく、これらを結合することができる。
【００７１】
例えば、次のようなＶＰおよびジッタ許容差を考える。（１）ＵＡＲＴ  １１５．２ｋｂｐｓ、２１７ｎｓ（ナノセカンド）、（２）１０ＢａｓｅＴイーサネット、１０ｎｓ、（３）ＴＣＰ／ＩＰスタック、１０ｍｓ（ミリセカンド）、および、（４）アプリケーションコード、５０ｍｓ。設計者がこれらのＶＰを統合してシステムを作成した場合、設計者は、静的スケジュールテーブルを判定する必要がほとんどない。
【００７２】
ＴＣＰ／ＩＰおよびアプリケーションコードは、タイミングの影響を受けないので、いずれのＶＰもＮＲＴスレッドとしてスケジューリングされる。他の２つのＶＰは、外部イベントに対して決定性応答を必要とするので、ハードリアルタイムスレッドとしてスケジューリングされなければならない。目的のＣＰＵ速度が２００ＭＨｚであるとき、イーサネットＶＰは、ＭＩＰＳの５０％、即ち５ｎｓの応答を必要とし、その命令間に１より大きな命令遅延を有することができない。ＵＡＲＴ  ＶＰは、ＭＩＰＳの１％未満しか必要としないが、そのジッタ許容差内でサービスされることを必要とするので、テーブル内に４回スケジュールされる。
【００７３】
その結果、これら４つのＶＰは、それぞれが異なるベンダー製であっても、いかなるコードも修正することなく、各スレッドが必要とする全計算能力に占める割合を判定するための何らかの単純な数学的処理を必要とするだけで、統合することができる。これらのＶＰは、タイミングを必要とするスレッドの各々がそのジッタ性能を保証されているので、いかなるタイミング問題を伴うことなく同時に動作する。
【００７４】
もちろん、ＶＰは、互いに通信できても、同時に動作するだけである。これは、適切な高レベルＡＰＩの定義を必要とし、その詳細は当業者には明らかであろう。
【００７５】
表１は、受信ＵＡＲＴスレッドの例である：
【表１】
0004693326.tif 000002
【００７６】
スレッドは、開始ビットのエッジが下がるまでは自身をサスペンドする。この割り込みが発生すると、スレッドが再開され、入ってくるデータのタイミングは、開始エッジが検出された正確な時間に基づく。この技術によって、さらに高い精度が可能になり、よって組込み型プロセッサの動作が改善される。
【００７７】
スレッドは、受信された各ビットについて、次のタイマ割り込みがあるまでは自身をサスペンドする（ＲＴＣＣタイマは、各スレッドについて独立であるので、他のＶＰと衝突することがない）。
【００７８】
バイトの完了時、コードは、バイトを読み出し可能なアプリケーション層にソフトウェア割り込みの信号を発行する。この「割り込み」命令は、単に割り込みフラグを設定するだけである。アプリケーション層は、この割り込みフラグをポーリングされるか、または、サスペンドされた後この割り込みによって再開される。
【００７９】
送信ＵＡＲＴスレッドの例を表２に示す：
【表２】
0004693326.tif 000003
【００８０】
スレッドは、ユーザー定義の送信開始ソフトウェア割り込み（TxStart）に応じて自身をサスペンドする。この割り込みがアプリケーションスレッドによってトリガされると、送信ＵＡＲＴスレッドが再開され、送信すべきバイトが内部レジスタ（UartTxBits）に送信される。この時点でアプリケーションは、第２のバイトを自由に送信することができ、そのため、割り込みフラグがクリアされ、UartTxEmpty割り込みがトリガされる。
【００８１】
このバイトは、各ビットの後に続く次のＲＴＴＣ割り込みをサスペンドすることによって、送信される（ＲＴＴＣタイマは、各スレッドについて独立なので、他のＶＰと衝突することがない）。
【００８２】
送信が完了すると、スレッドは、送信開始割り込みに応じて再びサスペンドする。送信開始割り込みを最後のバイトの送信中にトリガーして、スレッドを直ちに再開できるようにすることも可能である。
【００８３】
ここまで本発明を具体的に例示し、特定の実施形態およびいくつかの代替の実施形態を参照して説明してきたが、当業者であれば、本発明の思想と範囲から逸脱することなく形態および細部の様々な変更を行うことが可能であることが容易に分かるであろう。
【図面の簡単な説明】
【図１】  従来の割り込み応答を示す図である。
【図２】  マルチスレッド化された環境における割り込み応答を示す図である。
【図３】  従来のパイプラインを示す図である。
【図４】  本発明の一実施形態によるマルチスレッド化されたフェッチスイッチパイプラインを示す図である。
【図５】  本発明の一実施形態による組込み型プロセッサを示す図である。
【図６】  本発明の一実施形態によるスレッドごとのコンテクストの例を示す図である。
【図７ａ】  本発明の一実施形態による厳密なスケジューリングの例を示す図である。
【図７ｂ】  本発明の一実施形態によるやや柔軟なスケジューリングの例を示す図である。
【図７ｃ】  本発明の一実施形態による自由なスケジューリングの例を示す図である。
【図７ｄ】  本発明の一実施形態による３つのハードリアルタイムスレッドを用いたやや柔軟なスケジューリングを示す図である。
【図８】  本発明の一実施形態による２レベルのスケジューリングを用いたスレッドフェッチアルゴリズムを示す図である。
【図９】  本発明の一実施形態によるＨＲＴスレッドセレクタを示す図である。
【図１０】  本発明の一実施形態によるＮＲＴシャドウＳＲＡＭスレッドセレクタおよびＳＲＡＭアクセスロジックを示す図である。
【図１１】  本発明の一実施形態によるＮＲＴスレッド利用可能性セレクタを示す図である。
【図１２】  本発明の一実施形態によるＮＲＴフラッシュメモリスレッドセレクタを示す図である。
【図１３】  本発明の一実施形態によるポストフェッチセレクタを示す図である。
【図１４】  本発明の一実施形態によるマルチスレッド化された発行スイッチパイプラインを示す図である。
【図１５】  本発明の一実施形態によるパイプライン化されたフェッチ並行デコードパイプラインを示す図である。
【図１６】  本発明の一実施形態によるマルチスレッド化されたスーパースカラーパイプラインを示す図である。
【図１】
0004693326.tif 000004
【図２】
0004693326.tif 000005
【図３】
0004693326.tif 000006
【図４】
0004693326.tif 000007
【図５】
0004693326.tif 000008
【図６】
0004693326.tif 000009
【図７ａ】
0004693326.tif 000010
【図７ｂ】
0004693326.tif 000011
【図７ｃ】
0004693326.tif 000012
【図７ｄ】
0004693326.tif 000013
【図８】
0004693326.tif 000014
【図９】
0004693326.tif 000015
【図１０】
0004693326.tif 000016
【図１１】
0004693326.tif 000017
【図１２】
0004693326.tif 000018
【図１３】
0004693326.tif 000019
【図１４】
0004693326.tif 000020
【図１５】
0004693326.tif 000021
【図１６】
0004693326.tif 000022