(57)【特許請求の範囲】
【請求項１】
少なくとも第１および第２の処理コアを含む少なくとも１つの中央処理ユニット（ＣＰＵ）を有するデータ処理システムにおける処理コアの使用を動的に更新する方法であって、
前記少なくとも第１および第２の処理コアのうちのいずれを用いるかを特定する制御入力を受信するステップと、
前記制御入力の受信に応答して、前記少なくとも第１および第２の処理コアのうちの１つ以上をアクティブにし、前記少なくとも第１および第２の処理コアのうちの全部または１つ以上を非アクティブにすることによって、前記データ処理システムを構成するステップとを含み、
前記制御入力を受信するステップは、前記第１の処理コアを用いて、前記第２の処理コアを用いない第１のオプションと、前記第２の処理コアが用いて、前記第１の処理コアを用いない第２のオプションと、前記第１および第２の処理コアをともに用いる第３のオプションのうちから構成オプションを特定する選択入力を受信するステップを含み、
前記データ処理システムを構成するステップは、前記特定された構成オプションにより、前記データ処理システムを構成するステップを含むことを特徴とする、処理コアの使用を動的に更新する方法。
【請求項２】
前記第１の処理コアが誤動作したという判別に応答して、前記制御入力を生成するステップをさらに含む、請求項１に記載の方法。
【請求項３】
前記制御入力を受信するステップは、前記第２の処理コアを前記第１の処理コアの代わりに用いることを指示する構成入力を受信するステップを含み、
前記データ処理システムを構成するステップは、
前記第１の処理コアにアドレス指定された情報を、前記第２の処理コアで受信させ処理させるステップと、
前記第２の処理コアからの出力を前記第１の処理コアの出力パスに送るステップとを含む、請求項１に記載の方法。
【請求項４】
前記第１の処理コアにアドレス指定された情報を、前記第２の処理コアで受信させ処理されるステップは、
前記第２の処理コア内の１つ以上のプロセッサ識別子フィールドに、前記第１の処理コアのプロセッサ識別子を記憶させるステップを含む、請求項３に記載の方法。
【請求項５】
前記情報は、前記プロセッサ識別子に関連する処理スレッドを含み、
前記情報を処理するステップは、前記第２の処理コア内で前記処理スレッドを実行するステップを含む、請求項４に記載の方法。
【請求項６】
前記第２の処理コアからの出力を前記第１の処理コアの出力パスに送るステップは、出力コントローラをセットし、前記第２の処理コアからの出力を、前記出力コントローラを経て前記データ処理システムのデータ記憶装置に入力させるステップを含む、請求項３に記載の方法。
【請求項７】
少なくとも第１および第２の処理コアを含む少なくとも１つの中央処理ユニットと、
前記少なくとも第１および第２の処理コアのうちのいずれを用いるかを特定する１つ以上の制御入力を受信する入力装置と、
前記制御入力に応答して、前記少なくとも第１および第２の処理コアのうちの１つ以上をアクティブにし、前記少なくとも第１および第２の処理コアの全部または１つ以上を非アクティブにすることによって、前記データ処理システムを構成する構成論理とを有し、
前記制御入力は、前記第１の処理コアを用いて、前記第２の処理コアを用いない第１のオプションと、前記第２の処理コアを用いて、前記第１の処理コアを用いない第２のオプションと、前記第１および第２の処理コアをともに用いる第３のオプションのうちから構成オプションを特定する選択入力を有し、
前記構成論理は、前記特定されたオプションにより、前記データ処理システムを構成することを特徴とする、データ処理システム。
【請求項８】
前記第１および第２の処理コア，前記入力装置，および前記構成論理は、１つの集積回路内に設けられている、請求項７に記載のデータ処理システム。
【請求項９】
前記選択入力は、前記第１および第２の処理コアをともに用いることを指示し、
前記構成論理は、前記第１および第２の処理コアをアクティブにすることによって、前記選択入力に応答する、請求項７に記載のデータ処理システム。
【請求項１０】
前記第１の処理コアが、誤動作したという判別に応答して前記制御入力を生成するエラー回復装置をさらに有する、請求項７に記載のデータ処理システム。
【請求項１１】
前記制御入力は、前記第２の処理コアを前記第１の処理コアの代わりに用いることを指示し、
前記構成論理は、
前記第１の処理コアにアドレス指定された情報を、前記第２の処理コアで受信させ処理させ、
前記第２の処理コアからの出力を前記第１の処理コアの出力パスに送ることによって、前記制御入力に応答する、請求項７
に記載のデータ処理システム。
【請求項１２】
前記構成論理は、前記第２の処理コア内の１つ以上のプロセッサ識別子フィールドに、前記第１の処理コアのプロセッサ識別子を記憶させることによって、前記第２の処理コアで処理すべき前記情報を生成する論理を含む、請求項１１に記載のデータ処理システム。
【請求項１３】
前記情報は、前記プロセッサ識別子に関連する処理スレッドを含み、
前記第２の処理コアは、前記処理スレッドを実行することによって、前記情報を処理する、請求項１２に記載のデータ処理システム。
【請求項１４】
前記構成論理は、出力コントローラをセットすることによって、前記第２の処理コアからの出力を前記第１の処理コアの出力パスに送り、前記第２の処理コアからの出力を、前記出力コントローラを経て前記データ処理システムのデータ記憶装置に入力させる、請求項１２に記載のデータ処理システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般に、データ処理システムに関し、特に、２つ以上の処理コアを有するデータ処理システムに関する。特に、本発明は、複数の処理コアを有する中央処理ユニットを動的に構成する方法およびシステムに関する。
【０００２】
【従来の技術】
現在、マイクロコンピュータは、家庭およびオフィスにおいて、とりわけ言語処理デバイスおよびウェブ・ブラウザとして広く用いられている。このようなデータ処理システムは、一般に、単一のマイクロプロセッサ・チップに含まれた単一の中央処理ユニット（ＣＰＵ）を用いる。これとは対照的に、より多くの要求タスクのために構成されたマイクロコンピュータ（例えば、ネットワーク・サーバ）は、通常、複数のＣＰＵを含む。使用可能なプロセッサの数を増大することは、コンピュータの計算能力を増大するが、共働するＣＰＵの動作を調整することは、全システム・アーキテクチャの複雑性の付随的な増大を要求する。例えば、中央処理ユニットに加えて、マルチプロセッサ・システムは、典型的には、サービス・プロセッサをさらに含み、サービス・プロセッサの主な役割は、システムがパワーアップまたはリセットされる（すなわちブートされる）ときの動作に対してシステムを準備させることである。サービス・プロセッサは、典型的には、開始ルーチンの指示の下で、システム要素をテストし、システムのハードウェア構成に関する情報を収集し、次に、オペレーティング・システムの起動およびブート手順の完了のために、ＣＰＵの１つに制御を渡すことによってその役割を果たす。
【０００３】
しかしながら、集積回路の製造における最近の進歩により、マルチコア・マイクロプロセッサ・チップは、高性能マイクロコンピュータのための優れたプロセッサとして、まもなくシングルコアＣＰＵに取って代わることができる。マルチコア・マイクロプロセッサは、２つ以上の主要な処理コアを含む単一の集積回路を特徴とし、処理コアの各々は、別個の中央処理ユニットであるかのように用いることができる。さらに、最新のマルチコア・プロセッサにおいては、主要コアの各々は、従来の高性能シングルコア・プロセッサの計算能力に等しいかそれを超える計算能力を与える。
【０００４】
マルチコア・プロセッサによって与えられる利点の中には、個別プロセッサ間の通信の遅延に比べ、単一チップ内のコア間の通信について伝搬遅延の減少がある。また、マルチコア・プロセッサは、コア単位では、匹敵するシングルコア・プロセッサよりも高価ではない。しかし、マルチコアＣＰＵに関する問題は、マルチコアＣＰＵが、製造テスト，ブート・テスト，およびシステム動作の領域に、付加的な複雑さの導入を要求することである。また、マルチコア・プロセッサは、シングルコア・プロセッサよりも、物理的に大きくかつ複雑であり、従って、製造欠陥を生じる傾向にある。しかしながら、従来のマルチコア・データ処理システムは、これらの問題を解決するのに有効な手段を欠いている。
【０００５】
【発明が解決しようとする課題】
従って、マルチコアＣＰＵのテストおよび利用に関連する複雑さを減少する方法およびシステムの必要性がある。また、マルチコア・プロセッサを構成することに関してフレキシビリティを与える必要性がある。例えば、第１のコア（第２ではない）に製造欠陥を有するマルチコアＣＰＵが、第２のコアが第１のコアであるかのように動作するように構成することができると、製造歩留まりを増大することができる。また、処理能力を増大させること、および、システムを停止させることなく、あるいはシステム動作を中断させることなく、誤動作の処理コアを取り替えたりおよび／または取り除いたりすることは、利点がある。また、シングルコア・マルチプロセッサ・マシンを用い構成されたエンジニアリング・コード，テスト・コード，開始ルーチンをマルチコア・プロセッサを含むシステムにおいて、わずかな変更または変更なしに、利用可能にするには有利である。以下に説明するように、本発明は、これらのまたは他の利点を与える。
【０００６】
【課題を解決するための手段】
本発明によるデータ処理システムは、少なくとも第１および第２の処理コアを含む少なくとも１つの中央処理ユニット（ＣＰＵ）を有する。また、データ処理システムは、いずれの処理コアが用いられるべきかを特定する制御入力を受信する入力装置を含む。さらに、データ処理システムは、制御入力の受信に応答して、その制御入力によって、１つ以上の処理コアをアクティブにし、全部または１つ以上の処理コアを非アクティブにすることによって、データ処理システムを構成する構成論理を含む。例示の実施例では、部分的グッド論理は、第１の処理コアの代わりに第２の処理コアを用いるように、データ処理システムを構成する。
【０００７】
本発明の目的，特徴，利点の全ては、以下の詳細な説明の中で明らかになるであろう。
【０００８】
【発明の実施の形態】
本発明の特徴を実現する新規な形態は、特許請求の範囲に記載されている。しかし、本発明自体および好適な使用形態、さらには、本発明の目的および利点は、実施例の以下の詳細な説明を図面と共に参照することにより最も理解されるであろう。
【０００９】
次に、図面を参照すると、特に、図１に、マルチコア中央処理ユニット（ＣＰＵ）を動的に構成する本発明による装置を有する例示のデータ処理システム１００を示す。図に示すように、データ処理システム１００は、システム・バス１２０およびメモリ・マネージャー１２２を介して、ランダムアクセス・メモリ（ＲＡＭ）１２４に接続されているＣＰＵ１１０を含む。また、データ処理システム１００には、１つ以上の中間バス・ブリッジ１５２を介して、システム・バス１２０と通信する１つ以上のローカル・バス１５０が含まれる。ディスクドライブ１６０のような１つ以上の永続的データ記憶デバイスが、ローカル・バス１５０に設けられ、同様に、キーボード，マウス，表示デバイス，通信ポート，および／または他のＩ／Ｏ装置（図示せず）のような入力／出力（Ｉ／Ｏ）デバイス１６２が、ローカル・バス１５０に設けられている。
【００１０】
本発明によれば、ＣＰＵ１１０は、少なくとも２つの処理コア１６０Ａおよび１６０Ｂと、対応するＬ１キャッシュ１６２Ａおよび１６２Ｂとを含む単一の集積回路である。処理コアは、コア（０）１６０Ａおよびコア（１）１６０Ｂとして指定され、その各々は、ＣＰＵ１１０に設けられている記憶コントローラ１７０に接続されている。記憶コントローラ１７０は、Ｌ２キャッシュ１７２を含み、コア（０）１６０Ａおよびコア（１）１６０Ｂに、ＲＡＭ１２４のようなグローバル・データ記憶装置へのインターフェースを与える。
【００１１】
また、データ処理システム１００は、ＩＥＥＥ標準１１４９．１に従うＪｏｉｎｔ  Ｔｅｓｔ  Ａｃｃｅｓｓ  Ｇｒｏｕｐ（ＪＴＡＧ）インターフェースのような構成バス１３２を介して、ＣＰＵ１１０に接続されているサービス・プロセッサ１３０を含む。選択的には、データ処理システム１００は、付加的なＣＰＵを含むことができ、その各々は、ＣＰＵ１１０のように、システム・バス１２０およびサービス・プロセッサ１３０の両方に接続される。
【００１２】
データ処理システム１００がパワーアップされると、サービス・プロセッサ１３０は、データ処理システム１００の読取り専用メモリ（ＲＯＭ）１４０のブート・プログラム１３４として記憶されている開始命令を実行することによって、システムを動作に対して自動的に準備させる。特に、ブート・プログラム１３４は、サービス・プロセッサ１３０に、初期システムのテストおよび構成機能を実行させる。例えば、以下により詳細に説明するように、サービス・プロセッサは、処理コアの全てが、動作可能であるか否かを判別するプロセッサ妥当性検査ルーチンを実行し、動作しているコアの各々に対して異なるプロセッサ識別子（ＰＩＤ）を含むＰＩＤテーブルを作成する。ＰＩＤテーブルは、システムの動作中に、オペレーティング・システムおよび／またはアプリケーション・プログラムによって用いられ、コア間の役割（ｄｕｔｙ）を割り当てる。
【００１３】
次に、図２に、ＣＰＵ１１０の詳細なブロック図を示す。図に示すように、サービス・プロセッサ１３０は、クロックおよびスキャン制御論理２１０を経て、コア（０）１６０Ａおよびコア（１）１６０Ｂと通信し、コア（０）１６０Ａおよびコア（１）１６０Ｂは、記憶コントローラ１７０を経て、グローバル・データ記憶装置と通信する。クロックおよびスキャン制御論理２１０は、サービス・プロセッサ１３０に、グローバル障害アイソレーション・レジスタ３１０（図３に示す）のようなグローバル・レジスタを操作させるレジスタ・インターフェース論理を含む。この実施例では、クロックおよびスキャン制御論理２１０、および記憶コントローラ１７０は、コア（０）１６０Ａおよびコア（１）１６０Ｂと共に、ＣＰＵ１１０に含まれる。
【００１４】
コア（０）１６０Ａおよびコア（１）１６０Ｂの各々は、従来のシングルコアＣＰＵによって用いられるフルセットの要素を含み、データ処理システム１００の他の部分と行き来する命令および転送情報を取り出し、デコードし、実行する。例えば、コア（０）１６０Ａおよびコア（１）１６０Ｂは、それぞれ、ロード／記憶ユニット（ＬＳＵ）２２２Ａおよび２２２Ｂ，構成／状態レジスタ２２４Ａおよび２２４Ｂ，プロセッサ識別／特定用途レジスタ（ＰＩＤ／ＳＰＲ）２２６Ａおよび２２６Ｂを含む。ＬＳＵ２２２Ａおよび２２２Ｂ，構成／状態レジスタ２２４Ａおよび２２４Ｂ，およびＰＩＤ／ＳＰＲ２２６Ａおよび２２６Ｂの各々には、ＣＰＵ１１０に搬送される命令およびデータを特定コアに適合させるために用いられるプロセッサ識別（ＰＩＤ）フィールドがある。これらＰＩＤフィールドは、システムがブートされるときに作成されるＰＩＤテーブルのＰＩＤに対応する。
【００１５】
図４（ＬＳＵ２２２Ａおよび２２２Ｂの典型的なＰＩＤフィールドの構造を示す）に示すように、各ＰＩＤフィールド４００は、ＣＰＵ（またはチップ）識別フィールド４１０およびコア識別フィールド４１２を含む。この実施例では、ＣＰＵ識別子として６ビットが用いられ、コア識別子として１ビットが用いられ、これにより、最大６４個のデュアルコア・プロセッサをサポートする。しかし、当業者に明らかなように、３個以上の処理コアを含むＣＰＵをサポートするために、コア識別子に付加的ビットを用いることができ、６４個より多くのＣＰＵのために、ＣＰＵ識別子に付加的ビットを用いることができる。いずれの場合でも、コア（０）１６０Ａおよびコア（１）１６０Ｂのためのデータが、データ処理システム１００に伝送されると、宛先コアを識別する（ＰＩＤによって）データ・タグが、データと共に伝送される。コア（０）１６０Ａおよびコア（１）１６０Ｂは、ＰＩＤフィールドをデータ・タグと比較して、処理のためにどのデータを受け取るべきかを判別する。
【００１６】
シングルコアＣＰＵを有する従来のシステムでは、ブート・プログラムは、ＰＩＤテーブルから欠陥コアを簡単に取り除くことができる。しかし、マルチコアＣＰＵが、バッドコアを有することが分かると、システムをバッドコアなしに動作するように準備させることは、より困難となる。例えば、システムが、それぞれ、コア（０）およびコア（１）を有する第１および第２のＣＰＵを含み、第１のＣＰＵのコア（０）がバッドであると、従来の方法を用いる開始ルーチンは、ＰＩＤ１，ＰＩＤ２，およびＰＩＤ３をリストするＰＩＤテーブルを簡単に作成することができ、これらのＰＩＤは、第１のＣＰＵのコア（１）と、第２のＣＰＵのコア（０）およびコア（１）とにそれぞれ関連する。しかし、コアをテストし、保守し、利用するためのサービス・プロセッサおよびオペレーティング・システム・ルーチンは、コア（０）（または、ＰＩＤ（０））と対話する（独占的にまたはデフォルトによって）ようにしばしば構成される。例えば、ブート・プログラムは、典型的には、サービス・プロセッサにブート・プロセスの一部として、ＰＩＤ（０）に制御を渡すようにさせる。さらに、マルチコアＣＰＵの技術および製造テストのための装置は、同様の制約を与え、ハードフェア制約（１つのＪＴＡＧインターフェースのみを有するＰＩＤ（０）およびマルチコアＣＰＵのためにハードワイヤされる外部割り込みのような）を含む他のシステム要素によってさらなる困難が与えられることがある。従って、データ処理システムを動作に対して準備させるとき、もちろん、デフォルト・コアがバッドであることを判別し、従って、通信をリダイレクトするために含まれる種々の要素に追加の機能が付加されるのでなければ、サービス・プロセッサは、通常、欠陥コア（０）に対応するＰＩＤを簡単に取り除くべきではない。
【００１７】
本発明は、ＣＰＵ１１０に設けられ、ＣＰＵ１１０と対話する要素（開始プログラムおよびテスト装置のような）に対して、殆どあるいは全く変更することなく、このような制約を克服することができる部分的グッド論理を与える。特に、本発明の部分的グッド論理によってサポートされるＣＰＵ構成の中に、データ処理システム１００にコア（０）１６０Ａのみを用いることを許容する第１の構成と、コア（１）１６０Ｂのみを用いることを許容する第２の構成と、データ処理システム１００が、コア（０）１６０Ａおよびコア（１）１６０Ｂを共に用いるデュアルプロセッサ・システムとして動作する第３の構成とがある。以下により詳細に説明するように、第１および第２の構成では、部分的グッド論理は、休止コアからの出力が、記憶コントローラ１７０に達することを阻止する。さらに、第２の構成では、部分的グッド論理は、コア（１）１６０Ｂに、コア（０）１６０Ａをエミュレートさせる。特に、部分的グッド論理は、コア（１）１６０Ｂのコア識別ビットをクリアし、これにより、コア（１）１６０Ｂに、コア（０）１６０Ａにアドレス指定された命令およびデータを処理させ、これにより、サービス・プロセッサ命令のようなシステム要素は、たとえ、コア（０）１６０Ａが、非アクティブにされていても、バーチャル・コア（０）と対話することを可能にする。さらに、以下により詳細に説明するように、部分的グッド論理を、動的に構成することができる（すなわち、ブート・プロセス中、および／または実行時に）。
【００１８】
いかにして部分的グッド論理が、コア（１）１６０Ｂにコア（０）１６０Ａをエミュレートさせる（従って、バーチャル・コア（０）として働かせる）ことができるかの一例として、アドレスｘ′０２１２５０′は、コア（０）のリソース（データ・キャッシュ障害レジスタのような）を示すが、アドレスｘ′０２１２５０′は、各アドレスの最初の数字がコア識別子として働くマッチング・コア（１）のリソースを示すことが知られている。サービス・プロセッサ１３０が、アドレスｘ′０２１２５０′のコンテンツを要求し、コア（０）１６０Ａのコア識別ビットが、０に設定される（すなわち、クリアされる）と、コア（０）１６０Ａは、要求されたデータをサービス・プロセッサ１３０に戻す。しかし、コア（０）１６０Ａが休止し、コア（１）１６０Ｂのコア識別ビットが、０に設定されると、コア（１）１６０Ｂは、たとえ、リクエストがコア（０）１６０Ａにアドレス指定されても、要求されたデータを戻すであろう。外部割り込みからの入力および他の制御信号も同様に、部分的グッド論理によって適切な宛先に指示される。
【００１９】
デフォルト・ハードウェア構成（Ｄｅｆａｕｌｔ  Ｈａｒｄｗａｒｅ  Ｃｏｎｆｉｇｕｒａｔｉｏｎ）
部分的グッド論理のデフォルト構成は、ＣＰＵ１１０のハードウェアによって特定することができ、この構成は、サービス・プロセッサ１３０によって、例えば、ブート・プログラム１３４の命令により、あるいは、実行時に検出されたエラー状態に応答して、動的に変えることができる。デフォルト・ハードウェア構成を決定する部分的グッド論理の要素は、バッドコア（０）フューズ２３０Ａおよびバッドコア（１）フューズ２３０Ｂを含む。製造プロセスにおいて、コア（０）１６０Ａまたはコア（１）１６０Ｂに欠陥があると判別されると、対応するバッドコア（０）フューズ２３０Ａまたはバッドコア（１）フューズ２３０Ｂをブローし、上述した第１および第２の構成をデフォルト構成として実現することができる。あるいは、バッドコア（０）フューズ２３０Ａおよびバッドコア（１）フューズ２３０Ｂは、ブローされないまま残り、第３の構成をデフォルト構成として選択する。また、部分的グッド論理は、フューズオーバーライド・ラッチ２４０を含み、フューズオーバーライド・ラッチ２４０は、デフォルト構成をオーバーライドするために、サービス・プロセッサ１３０によって高レベルに設定することができる。
【００２０】
以下の３つの例は、フューズオーバーライド・ラッチ２４０が低レベルに設定されると、いかにしてこの実施例の部分的グッド論理の部分が動作するかを示す。バッドコア（１）フューズ２３０Ｂがブローされ、バッドコア（０）フューズ２３０Ａがブローされないと、第１の構成が指示される。従って、低レベル信号が、インバータ２３２Ｂからマルチプレクサ２３４Ｂに送られる。次に、低レベル信号は、ＡＮＤゲート２４２Ｂを介して、１個のＡＮＤゲート（あるいは複数個のＡＮＤゲート）２４４Ｂに送られ、コア（１）１６０ＢのＬＳＵ出力バス２４６Ｂ上の信号を阻止する（あるいは、さえぎる）。さらに、高レベル信号が、インバータ２３２Ａからマルチプレクサ２３４Ａを経て、インバータ２５０に送られる。従って、インバータ２５０は、低レベル信号を、ＬＳＵ２２２Ａ，構成／状態レジスタ２２４Ａ，およびＰＩＤ／ＳＰＲ２２６Ａに伝送し、コア（０）１６０Ａのコア識別ビットを０に設定する。
【００２１】
あるいはまた、バッドコア（０）フューズ２３０Ａがブローされ、バッドコア（１）フューズ２３０Ｂがブローされないと、第２の構成が指示される。従って、低レベル信号が、インバータ２３２Ａからマルチプレクサ２３４ＡおよびＡＮＤゲート２４２Ａを経て、１個のＡＮＤゲート（あるいは複数個のＡＮＤゲート）２４４Ａに送られ、コア（０）１６０ＡのＬＳＵ出力バス２４６Ａ上の信号を阻止（あるいは、さえぎる）する。さらに、マルチプレクサ２３４Ａからの低レベル信号が、コア（１）１６０ＢのＬＳＵ２２２Ｂ，構成／状態レジスタ２２４Ｂ，およびＰＩＤ／ＳＰＲ２２６Ｂに伝送される。この信号は、クリアされるべき各要素内の各々のＰＩＤフィールドにコア識別ビットを生成し、これにより、上述したように、コア（１）１６０Ｂに、コア（０）１６０Ａをエミュレートさせる。
【００２２】
しかしながら、バッドコア・フューズのいずれもブローされないと、第３の（デュアルプロセッサ）構成が指示される。従って、上述したように、高レベル信号が、インバータ２３２Ａおよび２３２ＢからＡＮＤゲート２４４Ａおよび２４４Ｂに送られ、これにより、コア（０）１６０Ａおよびコア（１）１６０Ｂが共に、記憶コントローラ１７０にデータを伝送することができる。また、インバータ２３２Ａからの高レベル信号は、コア（１）１６０Ｂのコア識別ビットを設定させ、インバータ２５０によってフリップされた後、コア（０）１６０Ａのコア識別ビットをクリアさせる。
【００２３】
動的再構成（Ｄｙｎａｍｉｃ  Ｒｅｃｏｎｆｉｇｕｒａｔｉｏｎ）
しかしながら、デフォルト構成以外の構成を動的に実現するためには、サービス・プロセッサ１３０は、フューズオーバーライド・ラッチ２４０を高レベルに設定し、部分的グッド論理のグッド（０）ラッチ２６０Ａおよびグッド（１）ラッチ２６０Ｂをセットまたはクリアする。例えば、サービス・プロセッサ１３０は、以下に説明するプロセスを用いて、ブート時にデータ処理システム１００をテストし構成し、および／または、実行時に構成を変更する（例えば、コア（０）１６０Ａを非アクティブにし、コア（０）１６０Ａの誤動作に応じてコア（１）１６０Ｂをアクティブにする）。
【００２４】
図５〜図７には、本発明によって、ＣＰＵ１１０を動的に構成するブート・プロセス内の例示的方法の論理的フローチャートを示す。この方法は、１つの処理コアを用いて他の処理コアをエミュレートするためにＣＰＵ１１０を構成するステップを含む。プロセスは、ブロック５００で開始し、サービス・プロセッサ１３０は、例えば、データ処理システム１００がパワーアップしていることを検出すると、ブート・プログラム１３４を開始する。次に、プロセスは、ブロック５１０に進む。ブロック５１０は、サービス・プロセッサ１３０が、フューズオーバーライド・ラッチ２４０をセットすることを示す。次に、ブロック５１２に示すように、サービス・プロセッサ１３０は、グッド（０）ラッチ２６０Ａをセットし、グッド（１）ラッチ２６０Ｂをクリアし、これにより、コア（０）１６０Ａがバーチャル・コア（０）として働く第１の構成を生じさせる。次に、ブロック５１４に示すように、サービス・プロセッサ１３０は、コア（０）１６０Ａをクリーン状態に初期化し、次に、例えば、ビルドイン・セルフ・テスト（ＢＩＳＴ）を実行させることによって、および／または、コア（０）１６０Ａのスキャン・チェーンをテストするＪＴＡＧインターフェースを用いることによって、コア（０）１６０Ａをテストする。
【００２５】
次に、プロセスは、ブロック５２０に進む。ブロック５２０では、サービス・プロセッサ１３０が、グッド（０）ラッチ２６０Ａをクリアし、グッド（１）ラッチ２６０Ｂをセットし、これにより、第２の構成を生じることを示す。次に、サービス・プロセッサ１３０は、コア（０）１６０Ａで行ったように、コア（１）１６０Ｂを初期化しテストする。実際には、現在の部分的グッド論理構成は、コア（１）１６０Ｂにコア（０）１６０Ａをエミュレートさせるので、サービス・プロセッサ１３０によって用いられるテスト・プログラムは、テスト・データを複数のコアに送り、複数のコアからの結果を受信する論理で複雑にする必要はない。逆に、サービス・プロセッサ１３０は、１つのコアのみを含むＣＰＵ（すなわち、コア（０）のみを含むＣＰＵ）のために構成されたテスト・コードを簡単に用いることができる。部分的グッド論理は、バーチャル・コア（０）として働いているコアへの入力および出力を自動的にリダイレクトする。
【００２６】
コア（０）１６０Ａおよびコア（１）１６０Ｂの両方がテストされた後、プロセスは、ブロック５２４に進む。ブロック５２４では、サービス・プロセッサ１３０が、両方のコアを必要とするか否かを判別することを示す。例えば、データ処理システム・ベンダーは、シングルコア・システムおよびデュアルコア・システムの両方を提供できるが、実際には、デュアルコア・システムのみを提供することができ、顧客がシングルコア・システムを要求したならば、１つのコアが非アクティブになる。さらに、ベンダーは、いくつのコアが一度にアクティブにされるべきかを特定する命令を記憶するシステムＲＯＭを用いることができる。本発明は、このような構成をサポートし、これにより、ベンダーが、より一定の製造プロセスを用いることができ、重要なことは、以下に示すように、コアがバッドになるとき問題となるダウン時間の長さを減少または排除することができることである。
【００２７】
両方のコアが必要、両方のフューズがブローされない、コア・テストがグッド（Ｂｏｔｈ  Ｃｏｒｅｓ  Ｄｅｓｉｒｅｄ；Ｂｏｔｈ  Ｆｕｓｅｓ  Ｉｎｔａｃｔ；Ｃｏｒｅｓ  Ｔｅｓｔ  Ｇｏｏｄ）
両方のコアが必要とされると、サービス・プロセッサ１３０は、ブロック５３０に示される。選択構成に入り、ブロック５３２に示すように、バッドコア（０）フューズ２３０Ａまたはバッドコア（１）フューズ２３０Ｂのいずれがブローされるかについての判別が行われる。両方のフューズがブローされないと、ブロック５３４に示すように、プロセスは他の選択構成に入る。次に、サービス・プロセッサ１３０は、ブロック５３６に示すように、初期テストの結果が、コア（０）１６０Ａおよびコア（１）１６０Ｂが共にグッドであることを示すか否かを判別する。グッドであれば、プロセスは、ブロック５３８に進む。ブロック５３８は、サービス・プロセッサ１３０が、フューズオーバーライド・ラッチ２４０をクリアすることを示し、これにより、マルチプレクサ２３４Ａおよび２３４Ｂに、それぞれ、インバータ２３２Ａおよび２３２Ｂからの高レベル信号を渡す。
【００２８】
次に、ブロック５４０に示すように、サービス・プロセッサ１３０は、出力イネーブル・ラッチ２７０および２７２（図２に示す）をセットする。出力イネーブル・ラッチ２７０および２７２は、コア（０）１６０Ａおよびコア（１）１６０Ｂからの出力を制御する付加的手段として働く。しかし、グッド（０）およびグッド（１）ラッチ２６０Ａおよび２６０Ｂと違って、出力イネーブル・ラッチ２７０および２７２は、物理的コアよりもむしろバーチャル・コアを参照することによって出力を阻止することができる。例えば、出力イネーブル・ラッチ２７０は、バーチャル・コア（０）からの出力を制御する（バーチャル・コア（０）が、コア（０）１６０Ａによって、またはコア（０）１６０Ａのエミュレーションであるコア（１）１６０Ｂによって実際に与えられるか否かに拘わらず）。同様にして、出力イネーブル・ラッチ２７２は、バーチャル・コア（０）からの出力を制御する。
【００２９】
例えば、図２を再び参照すると、コア（０）１６０Ａおよびコア（１）１６０Ｂの両方がアクティブであり、出力イネーブル・ラッチ２７０および２７２の両方がセットされると、ＡＮＤゲート２４２Ａは、マルチプレクサ２３４Ａおよび出力イネーブル・ラッチ２７０からの高レベル信号を受信する。従って、ＡＮＤゲート２４４Ａが、コア（０）１６０Ａからの信号を通過させることができる。また、マルチプレクサ２３４Ａからの高レベル信号は、マルチプレクサ２６４に、出力イネーブル・ラッチ２７２からＡＮＤゲート２４２Ｂに高レベル信号を送らせ、ＡＮＤゲート２４２Ｂは、さらに、マルチプレクサ２３４Ｂからの高レベル信号を受信する。従って、ＡＮＤゲート２４４Ｂも同様に、コア（１）１６０Ｂからの信号を通過させることができる。
【００３０】
あるいはまた、コア（０）１６０Ａが非アクティブにされ、コア（１）１６０Ｂがバーチャル・コアとして働くと、マルチプレクサ２６４は、マルチプレクサ２３４Ａから選択された低レベル信号を受信する。この信号は、マルチプレクサ２６４に、バーチャル・コア（０）イネーブル信号を、出力イネーブル・ラッチ２７０からＡＮＤゲート２４２Ｂに渡す。さらに、マルチプレクサ２３４Ａからの低レベル信号が、ＡＮＤゲート２４２Ａを経てＡＮＤゲート２４４Ａに送られ、これにより、コア（０）１６０Ａからの出力を阻止する。
【００３１】
図５〜図７を再び参照すると、出力イネーブル・ラッチ２７０および２７２がセットされると、プロセスは、ブロック５４２に進む。ブロック５４２では、サービス・プロセッサ１３０が、例えば、マルチプレクサ２３４Ａおよび２３４Ｂからの信号を、システム・クロック（図示せず）からコア（０）１６０Ａおよびコア（１）１６０Ｂへの個々のパス内の個々のＡＮＤゲート（図示せず）に送ることによって、コア（０）１６０Ａおよびコア（１）１６０Ｂをアクティブにすることを示す。次に、プロセスは、接続記号Ｄを経て、ブロック５４６に進む。ブロック５４６では、サービス・プロセッサ１３０が、バーチャル・コア（０）に制御を渡す（例えば、バーチャル・コア（０）の命令ポインタの中に、処理されるべき次のブート命令のアドレスをロードすることによって）ことを示す。次に、ブロック５４８に示すように、サービス・プロセッサ１３０に関する限り、データ処理システム１００をブートするプロセスは、終了する。
【００３２】
両方のコアが必要、両方のフューズがブローされない、コア・テストがバッド（Ｂｏｔｈ  Ｃｏｒｅｓ  Ｄｅｓｉｒｅｄ；Ｂｏｔｈ  Ｆｕｓｅｓ  Ｉｎｔａｃｔ；Ｃｏｒｅ  Ｔｅｓｔｓ  Ｂａｄ）
次に、ブロック５３４を参照すると、コア（０）１６０Ａおよびコア（１）１６０Ｂが共にグッドでないが、コア（０）１６０Ａのみがグッドであると判別されると、プロセスは、ブロック５５０を経てブロック５５２に進む。ブロック５５２では、サービス・プロセッサ１３０が、グッド（０）ラッチ２６０Ａをセットし、グッド（１）ラッチ２６０Ｂをクリアする（および、フューズオーバーライド・ラッチ２４０を高レベルに設定する）ことを示す。従って、上述したように、マルチプレクサ２３４Ａおよび２３４Ｂが、それぞれ、高レベル信号および低レベル信号を伝送し、コア（０）１６０Ａをバーチャル・コア（０）として働かせ、コア（１）１６０Ｂからの出力を阻止する。次に、ブロック５５４に示すように、サービス・プロセッサ１３０は、出力イネーブル・ラッチ２７０を高レベルに設定し、ブロック５５６に示すように、コア（０）１６０Ａをアクティブにし、コア（１）１６０Ｂを非アクティブにする。次に、プロセスは、接続記号Ｄを経て、ブロック５４６に進む。ブロック５４６では、上述したように、サービス・プロセッサ１３０が、バーチャル・コア（０）に制御を渡すことを示す。次に、ブロック５４８に示すように、プロセスは、終了する。
【００３３】
次に、ブロック５３４を再び参照すると、コア（１）１６０Ｂのみがグッドであると判別されると、プロセスは、ブロック５６０を経てブロック５６２に進む。ブロック５６２では、サービス・プロセッサ１３０が、グッド（０）ラッチ２６０Ａをクリアし、グッド（１）ラッチ２６０Ｂをセットすることを示す。その結果、図２を参照して上述したように、マルチプレクサ２３４Ａおよび２３４Ｂは、それぞれ、低レベル信号および高レベル信号を伝送し、コア（１）１６０Ｂをバーチャル・コア（０）として働かせ、コア（０）１６０Ａからの出力を阻止する。次に、ブロック５６４および５６６に示すように、サービス・プロセッサ１３０は、出力イネーブル・ラッチ２７０を高レベルに設定し、コア（０）１６０Ａを非アクティブにし、コア（１）１６０Ｂをアクティブにする。次に、プロセスは、接続記号Ｄを経て、ブロック５４６に進む。ブロック５４６では、サービス・プロセッサ１３０が、バーチャル・コア（０）に制御を渡すことを示す。次に、ブロック５４８に示すように、プロセスは、終了する。
【００３４】
両方のコアが必要、１つのヒューズがブローされる（Ｂｏｔｈ  Ｃｏｒｅｓ  Ｄｅｓｉｒｅｄ；Ｏｎｅ  Ｈｕｓｅ  Ｂｌｏｗｎ）
しかし、ブロック５３０を再び参照すると、サービス・プロセッサ１３０は、バッドコア（０）フューズ２３０Ａが依然としてブローされていないが、バッドコア（１）フューズ２３０Ｂがブローされていることを判別し、プロセスは、ブロック５６２および接続記号Ａを経て、ブロック５７０に進む。ブロック５７０に示すように、サービス・プロセッサ１３０は、初期テストが、コア（０）１６０Ａがグッドであることを示すか否かを判別する。グッドであれば、ブロック５７２に示すように、サービス・プロセッサ１３０は、フューズオーバーライド・ラッチ２４０をクリアし、マルチプレクサ２３４Ａにインバータ２３２Ａからの高レベル信号を渡し、マルチプレクサ２３４Ｂにインバータ２３２Ｂからの低レベル信号を渡し、上述したように、コア（０）１６０Ａをバーチャル・コア（０）として動作させ、ＡＮＤゲート２４４Ｂにコア（１）１６０Ｂからの出力を阻止させる。次に、ブロック５７４に示すように、サービス・プロセッサ１３０は、出力イネーブル・ラッチ２７０をセットし、ブロック５７６に示すように、コア（０）１６０Ａをアクティブにし、コア（１）１６０Ｂを非アクティブにする。次に、ブロック５４６および５４８にそれぞれ示すように、サービス・プロセッサ１３０は、バーチャル・コア（０）に制御を渡し、プロセスは、終了する。しかし、ブロック５７０を再び参照すると、ブロック５７８および５４８にそれぞれ示すように、コア（０）１６０Ａがバッドとテストされたと判別されると、サービス・プロセッサ１３０は、致命的エラーを単に報告し、プロセスは、終了する。
【００３５】
図５のブロック５３０を再び参照すると、バッドコア（０）フューズ２３２Ａのみがブローされていると判別されると、プロセスは、ブロック５７９および接続記号Ｂを経て、ブロック５８０に進む。ブロック５８０では、サービス・プロセッサ１３０が、初期テストがコア（１）１６０Ｂが正確に機能していることを示すか否かを判別することを示す。正確に機能しているならば、ブロック５８２，５８４，５８６にそれぞれ示すように、サービス・プロセッサ１３０は、フューズオーバーライド・ラッチ２４０をクリアし、出力イネーブル・ラッチ２７０をセットし、コア（０）１６０Ａを非アクティブにするが、コア（１）１６０Ｂをアクティブにし、これにより、上述したように、コア（１）１６０Ｂをバーチャル・コア（０）として用いるように、データ処理システム１００を構成する。次に、プロセスは、接続記号Ｄを経て、ブロック５４６に進む。ブロック５４６では、サービス・プロセッサ１３０が、バーチャル・コア（０）に制御を渡し、ブロック５４８に示すように、プロセスは、終了する。しかし、ブロック５８０を再び参照すると、コア（１）１６０Ｂがバッドとテストされたと判別されると、ブロック５８８および５４８にそれぞれ示すように、サービス・プロセッサ１３０は、致命的エラーを単に報告し、プロセスは、終了する。
【００３６】
１つのコアが必要、両方のフューズがブローされない（Ｏｎｅ  Ｃｏｒｅ  Ｄｅｓｉｒｅｄ；Ｂｏｔｈ  Ｆｕｓｅｓ  Ｉｎｔａｃｔ）
図５のブロック５２４で、コア（０）１６０Ａおよびコア（１）１６０Ｂの両方が必要とされないと判別されると、プロセスは、接続記号Ｃを経て、図７のブロック５９０に進む。次に、ブロック５９２に示すように、サービス・プロセッサ１３０は、バッドコア（０）フューズ２３０Ａおよびバッドコア（１）フューズ２３０Ｂが共にまだブローされていないか否かを判別する。ブローされないならば、ブロック５９４に示すように、プロセスは、選択された他の構成に進む。次に、コア（０）１６０Ａがグッドであるとテストされたか否かを判別する。グッドであれば、プロセスは、ブロック５９６を経て、ブロック５９８に進む。ブロック５９８では、サービス・プロセッサ１３０が、グッド（０）ラッチ２６０Ａをセットし、グッド（１）ラッチ２６０Ｂをクリアすることを示し、これにより、コア（０）１６０Ａをバーチャル・コア（０）として設定し、コア（１）１６０Ｂからの出力を阻止する。次に、ブロック６００に示すように、サービス・プロセッサ１３０は、出力イネーブル・ラッチ２７０をセットし、ブロック６０２に示すように、コア（０）１６０Ａをアクティブにし、コア（１）１６０Ｂを非アクティブにする。次に、プロセスは、接続記号Ｄを経て、図６のブロック５４６に進む。ブロック５４６に示すように、サービス・プロセッサ１３０は、バーチャル・コア（０）に制御を転送し、ブロック５４８に示すように、プロセスは、終了する。
【００３７】
ブロック５９４を再び参照すると、コア（１）１６０Ｂのみがグッドとテストされたと判別されると、プロセスは、ブロック６０４を経て、ブロック６０６，６０８，６１０に進む。これらのブロックでは、サービス・プロセッサ１３０が、グッド（０）ラッチ２６０Ａをクリアし、出力イネーブル・ラッチ２７０をセットし、コア（０）１６０Ａを非アクティブにし、コア（１）１６０Ｂをアクティブにすることによって、コア（１）１６０Ｂをバーチャル・コア（０）として用いるように、データ処理システム１００を構成することを示す。次に、プロセスは、接続記号Ｄを経て、ブロック５４６および５４８に進む。ブロック５４６および５４８では、それぞれ、サービス・プロセッサ１３０が、バーチャル・コア（０）に制御を渡すこと、およびプロセスが終了することを示す。
【００３８】
ブロック５９４を再び参照すると、コア（０）１６０Ａおよびコア（１）１６０Ｂの両方がバッドとテストされたと判別されると、プロセスは、ブロック６１２を経て、ブロック６１４に進む。ブロック６１４では、サービス・プロセッサ１３０が、致命的エラーを報告することを示す。次に、ブロック６１６に示すように、プロセスは、終了する。
【００３９】
１つのコアが必要、１つのフューズがブローされる（Ｏｎｅ  Ｃｏｒｅ  Ｄｅｓｉｒｅｄ：Ｏｎｅ  Ｆｕｓｅ  ｂｌｏｗｎ）
しかし、ブロック５９０で、バッドコア（１）フューズ２３０Ｂが、ブローされていると判別されると、プロセスは、ブロック６２０を経て、ブロック６２２に進む。ブロック６２２では、サービス・プロセッサ１３０が、コア（０）１６０Ａがグッドとテストされたか否かを判別することを示す。グッドであれば、ブロック６２４に示すように、サービス・プロセッサ１３０が、フューズオーバーライド・ラッチ２４０をクリアし、これにより、マルチプレクサ２３４Ａにインバータ２３２Ａからの高レベル信号を渡し、マルチプレクサ２３４Ｂにインバータ２３２Ｂからの低レベル信号を渡し、上述したように、コア（０）１６０Ａをバーチャル・コア（０）として動作させ、コア（１）１６０Ｂからの出力を阻止させる。次に、ブロック６２６および６２８に示すように、サービス・プロセッサ１３０は、出力イネーブル・ラッチ２７０をセットし、コア（０）１６０Ａをアクティブにし、コア（１）１６０Ｂを非アクティブにする。次に、プロセスは、接続記号Ｄを経て、ブロック５４６に進み、ブロック５４６は、サービス・プロセッサ１３０が、バーチャル・コア（０）に制御を渡すことを示す。次に、ブロック５４８に示すように、プロセスは、終了する。しかし、ブロック６２２で、コア（０）１６０Ａがバッドをテストされたと判別されると、ブロック６４０および６４２にそれぞれ示すように、サービス・プロセッサ１３０は、致命的エラーを報告し、プロセスは、終了する。
【００４０】
一方、サービス・プロセッサ１３０が、ブロック５９０において、バッドコア（０）フューズ２３０Ａがブローされていると判別すると、プロセスは、ブロック６３０を経て、ブロック６３２に進む。ブロック６３２では、サービス・プロセッサ１３０が、コア（１）１６０Ｂがグッドとテストされたか否かを判別することを示す。グッドであれば、ブロック６３４に示すように、サービス・プロセッサ１３０は、フューズオーバーライド・ラッチ２４０をクリアし、これにより、マルチプレクサ２３４Ａにインバータ２３２Ａからの低レベル信号を渡し、マルチプレクサ２３４Ｂにインバータ２３２Ｂからの高レベル信号を渡し、コア（１）１６０Ｂをバーチャル・コア（０）として動作させ、コア（０）１６０Ａからの出力を阻止させる。次に、ブロック６３６および６３８に示すように、サービス・プロセッサ１３０は、出力イネーブル・ラッチ２７０をセットし、コア（０）１６０Ａを非アクティブにし、コア（１）１６０Ｂをアクティブにする。次に、プロセスは、接続記号Ｄを経て、ブロック５４６に進む。ブロック５４６では、サービス・プロセッサ１３０が、バーチャル・コア（０）に制御を渡すことを示す。次に、ブロック５４８に示すように、プロセスは、終了する。しかし、ブロック６３２で、コア（１）１６０Ｂがバッドとテストされたと判別されると、ブロック６４０および６４２に示すように、致命的エラーが報告され、プロセスは、終了する。
【００４１】
従って、本発明の部分的グッド論理は、ＣＰＵ１１０のようなマルチコア・プロセッサのカスタマイズされた静的および動的構成を可能にする。特に、本発明は、フューズおよびブート・コードを用いて、使用される特定の構成を制御することを可能にし、１つのコアが他のコアをエミュレートすることを可能にする必要があるときに入力をリダイレクトし、全ての休止コアからの出力を阻止することができる。
【００４２】
付加的な部分的グッド出力論理（Ａｄｄｉｔｉｏｎａｌ  Ｐａｒｔｉａｌ−Ｇｏｏｄ  Ｏｕｔｐｕｔ  Ｌｏｇｉｃ）
さらに、部分的グッド論理は、ＬＳＵ２２２Ａおよび２２２Ｂ以外のコア（０）１６０Ａおよびコア（１）１６０Ｂの部分から来る出力をリダイレクトする働きをする回路（構成レジスタ２２４Ａおよび２２４ＢおよびＰＩＲ／ＳＰＲ２２６および２２６Ｂのような）を含む。例えば、図３を再び参照すると、グローバル障害アイソレーション・レジスタ（ＦＩＲ）３１０へ出力を接続する典型的な部分的グッド論理を示す。部分的グッド論理は、コア（０）１６０Ａおよびコア（１）１６０Ｂのエラー信号生成器とそれぞれ通信するラッチ３２０Ａおよび３２０Ｂを有する。図２の出力イネーブル・ラッチ２７０が、高レベルに設定され（バーチャル・コア（０）がイネーブルであることを示す）、コア（０）１６０Ａがラッチ３２０Ａにエラー信号を伝送すると、そのエラー信号は、ＡＮＤゲート３２２を経て、マルチプレクサ３２４に送られる。さらに、マルチプレクサ３２４がグッド（０）マルチプレクサ２３４Ａから高レベル選択信号を受信すると、マルチプレクサ３２４は、そのエラー信号をＦＩＲ３１０に送り、バーチャル・コア（０）に関連するエラー・フラグ３２６をセットする。さらに、出力イネーブル・ラッチ２７２が高レベルに設定され（バーチャル・コア（１）がイネーブルであることを示す）、コア（１）１６０Ｂがエラー信号を生成するが、マルチプレクサ２３４Ａが、高レベル信号を出力する（コア（０）２６０Ａがグッドであることを示す）と、コア（１）１６０Ｂからのエラー信号は、ラッチ３２０Ｂ，ＡＮＤゲート３３０，およびＡＮＤゲート３３１を経て、ＦＩＲ３１０に送られ、バーチャル・コア（１）に関連するエラー・フラグ３２８をセットする。
【００４３】
しかし、グッド（０）マルチプレクサ２３４Ａが低レベル信号を出力していると、マルチプレクサ３２４は、コア（０）１６０Ａよりもむしろコア（１）１６０Ｂから受信されたエラー信号を出力する。さらに、グッド（０）マルチプレクサ２３４Ａからの低レベル信号は、コア（１）１６０ＢからＡＮＤゲート３３１のエラー・フラグ３２８までの信号のためのパスを阻止するが、マルチプレクサ３３２が、コア（０）イネーブル信号をＡＮＤゲート３３０に出力する。従って、コア（１）１６０Ｂがバーチャル・コア（０）として動作していると、部分的グッド論理は、コア（１）１６０Ｂからバーチャル・コア（０）に関連するエラー・フラグにエラー信号を送信する。
【００４４】
さらに、部分的グッド論理は、外部割り込み，命令取出しユニット（ＩＦＵ），および他のエラー指示および制御信号のためのパスのような中央処理ユニット１１０の他の機能パス上の入力および出力を動的にリダイレクトする同様の回路を含む。従って、ＣＰＵ１１０の外部にあるデータ処理システム１００の要素は、バーチャル・コア（０）をアドレス指定するために簡単にハードワイヤすることができ、たとえ、コア（０）１６０Ａがバッドであっても、これらの要素からの信号を、コア（０）１６０Ａのエミュレーションであるコア（１）１６０Ｂによって有効に処理することができる。同様にして、エンジニアリング・コードおよびテスト・コードは、可能なグッドコア／バッドコアの組合せの全てを処理する複雑な条件付き処理論理を含む必要はないが、バーチャル・コア（０）をアドレス指定するように、また、特定のタスクに必要とされる処理コアをアクティブまたは非アクティブにするように、簡単に構成することができる。
【００４５】
さらに、本発明は、実行時にコアをアクティブまたは非アクティブにすることができるので、サービス・プロセッサ１３０は、ブート・プロセスが完了して通常動作が始まった後に生じるアクティブ・コアの誤動作に自動的に応答するようにプログラミングすることができる。例えば、サービス・プロセッサ１３０は、上述した部分的グッド論理を用いることによって、コアの誤動作の通知に応答するようにプログラミングされ、バッドコアを自動的に非アクティブにすることができる。また、プログラムは、グッドコアが使用可能かつ非アクティブであると、グッドコアを自動的にアクティブにし、誤動作コアをエミュレートすることができ、これにより、システム・クラッシュを回避することができる。さらに、本発明は、実行時に非アクティブ・コアをアクティブにさせ、これにより、ベンダーは、顧客サイトで動作中のコンピュータの処理電力をアップグレードするのに必要とされるダウン時間を最小にするか、排除することができる。
【００４６】
上述したように、本発明は、マルチコア・プロセッサを動的に構成する方法およびシステムを提供する。特に、本発明は、コアを動的にアクティブおよび非アクティブにすることができ（例えば、製造テスト中，ブート時，実行時に）、１つのコアに他のコアをエミュレートさせるように構成することができる部分的グッド論理を与える。例えば、本発明の例示の実施例は、欠陥コアを非アクティブにし、デフォルトによって１つのコアに他のコアをエミュレートさせるためにブローされるフューズと、デフォルト構成をオーバーライドするように設定できるラッチとを特徴とする（例えば、バッドコアを初期化して、そのコアの誤動作に応じてコアを非アクティブにしたり、および／または、障害コアを交換するか、処理能力を増大するために、休止コアをアクティブにしたりする）。
【００４７】
本発明を、特に、例示の実施例を参照して示し説明したが、当業者によれば、本発明の趣旨および範囲から逸脱することなく、形態および詳細の種々の変更を行うことができることが分かるであろう。例えば、例示の実施例のブート・プログラムは、コア（０）を対抗条件のない場合にはバーチャル・コア（０）として働かせ、ブート・プログラムは、コア（１）をデフォルトによってバーチャル・コア（０）として働かせるように構成することができる。
【００４８】
本発明の形態を、典型的なハードウェアについて説明したが、本発明は、説明した特定のハードウェア・アーキテクチャーに限定されるものではないことが分かるべきである。例えば、本発明を、１つ以上のデュアルコアＣＰＵを有するデータ処理システムを参照して説明したが、本発明を、容易に拡張して３つ以上のコアを有するＣＰＵを処理することができる。また、特定のデジタル回路素子（ＡＮＤゲートおよびマルチプレクサのような）を用いて典型的な実施例を説明したが、等価の機能を論理ゲートの他の構成を用いて、できる限りソフトウェアおよび／またはファームウェアと組み合わせて実現することができる。
【００４９】
まとめとして、本発明の構成に関して、以下の事項を開示する。
（１）少なくとも第１および第２の処理コアを含む少なくとも１つの中央処理ユニット（ＣＰＵ）を有するデータ処理システムにおける処理コアの使用を動的に更新する方法であって、
前記少なくとも第１および第２の処理コアのうちのいずれが用いられるべきかを特定する制御入力を受信するステップと、
前記制御入力の受信に応答して、前記制御入力によって、前記少なくとも第１および第２の処理コアのうちの１つ以上をアクティブにし、前記少なくとも第１および第２の処理コアのうちの全部または１つ以上を非アクティブにすることによって、前記データ処理システムを構成するステップとを含む、処理コアの使用を動的に更新する方法。
（２）前記制御入力を受信するステップは、前記第１の処理コアが用いられるべきであり、前記第２の処理コアが用いられるべきでない第１のオプションと、前記第２の処理コアが用いられるべきであり、前記第１の処理コアが用いられるべきでない第２のオプションと、前記第１および第２の処理コアがともに用いられるべきである第３のオプションとのうちから構成オプションを特定する選択入力を受信するステップを含み、
前記データ処理システムを構成するステップは、前記特定された構成オプションにより、前記データ処理システムを構成するステップを含む、上記（１）に記載の方法。
（３）前記選択入力は、前記第１および第２の処理コアがともに用いられるべきであることを指示し、
前記データ処理システムを構成するステップは、前記第１および第２の処理コアをアクティブにするステップを含む、上記（２）に記載の方法。
（４）前記第１の処理コアが誤動作したという判別に応答して、前記制御入力を生成するステップをさらに含む、上記（１）に記載の方法。
（５）前記制御入力を受信するステップは、前記第２の処理コアが前記第１の処理コアの代わりに用いられるべきであることを指示する構成入力を受信するステップを含み、
前記データ処理システムを構成するステップは、
前記第１の処理コアにアドレス指定された情報を、前記第２の処理コアで受信させ処理させるステップと、
前記第２の処理コアからの出力を前記第１の処理コアの出力パスに送るステップとを含む、上記（１）に記載の方法。
（６）前記第１の処理コアにアドレス指定された情報を、前記第２の処理コアで受信させ処理されるステップは、
前記第２の処理コア内の１つ以上のプロセッサ識別子フィールドに,前記第１の処理コアのプロセッサ識別子を記憶させるステップを含む、上記（５）に記載の方法。
（７）前記情報は、前記プロセッサ識別子に関連する処理スレッドを含み、
前記情報を処理するステップは、前記第２の処理コア内で前記処理スレッドを実行するステップを含む、上記（６）に記載の方法。
（８）前記第２の処理コアからの出力を前記第１の処理コアの出力パスに送るステップは、出力コントローラをセットし、前記第２の処理コアからの出力を、前記出力コントローラを経て前記データ処理システムのデータ記憶装置に入力させるステップを含む、上記（５）に記載の方法。
（９）前記制御入力は、第１の構成を特定し、
前記方法は、前記第１の構成と異なる第２の構成に対応するオーバーライド入力が受信されているか否かを判別するステップをさらに含み、
前記第１の処理コアにアドレス指定された情報を、前記第２の処理コアで受信させ処理させるステップは、前記オーバーライド入力が受信されていないときのみ実行される、上記（５）に記載の方法。
（１０）少なくとも第１および第２の処理コアを含む少なくとも１つの中央処理ユニット（ＣＰＵ）を有するデータ処理システムにおける処理コアの使用を動的に更新する装置であって、
前記第１および第２の処理コアのうちのいずれが用いられるべきかを特定する１つ以上の制御入力を受信する入力装置と、
前記制御入力の受信に応答して、前記制御入力によって、前記第１および第２の処理コアのうちの１つ以上をアクティブにし、前記第１および第２の処理コアの全部または１つ以上を非アクティブにすることによって、前記データ処理システムを構成する構成論理とを有する、処理コアの使用を動的に更新する装置。
（１１）前記第１および第２の処理コア，前記入力装置，および前記構成論理は、１つの集積回路内に設けられている、上記（１０）に記載の装置。
（１２）前記制御入力は、前記第１の処理コアが用いられるべきであり、前記第２の処理コアが用いられるべきでない第１のオプションと、前記第２の処理コアが用いられるべきであり、前記第１の処理コアが用いられるべきでない第２のオプションと、前記第１および第２の処理コアがともに用いられるべきである第３のオプションとのうちから構成オプションを特定する選択入力を有し、
前記構成論理は、前記特定されたオプションにより、前記データ処理システムを構成する、上記（１０）に記載の装置。
（１３）前記選択入力は、前記第１および第２の処理コアがともに用いられるべきであることを指示し、
前記構成論理は、前記第１および第２の処理コアをアクティブにすることによって前記選択入力に応答する、上記（１０）に記載の装置。
（１４）前記第１の処理コアが誤動作したという判別に応答して、前記制御入力を生成するエラー回復装置をさらに有する、上記（１０）に記載の装置。
（１５）前記制御入力は、前記第２の処理コアが、前記第１の処理コアの代わりに用いられるべきであることを指示し、
前記構成論理は、
前記第１の処理コアにアドレス指定された情報を、前記第２の処理コアで受信させ処理させ、
前記第２の処理コアからの出力を前記第１の処理コアの出力パスに送ることによって、前記制御入力に応答する、上記（１０）に記載の装置。
（１６）前記構成論理は、前記第２の処理コア内の１つ以上のプロセッサ識別子フィールドに、前記第１の処理コアのプロセッサ識別子を記憶させることによって、前記情報を前記第２の処理コアで処理させるコア・ラベリング論理を含む、上記（１５）に記載の装置。
（１７）前記情報は、前記プロセッサ識別子に関連する処理スレッドを含み、
前記第２の処理コアは、前記処理スレッドを実行することによって、前記情報を処理する、上記（１６）に記載の装置。
（１８）前記構成論理は、出力コントローラをセットすることによって、前記第２の処理コアからの出力を前記第１の処理コアの出力パスに送り、前記第２の処理コアからの出力を、前記出力コントローラを経て前記データ処理システムのデータ記憶装置に入力させる、上記（１５）に記載の装置。
（１９）前記制御入力は、第１の構成を特定し、
前記処理コアの使用を動的に更新する装置は、前記制御入力を生成するバッドコア・インジケータと、前記第１の構成と異なる第２の構成を特定するオーバーライド指示を生成するオーバーライド素子とをさらに有し、
前記構成論理は、前記入力装置が、前記オーバーライド入力を受信していないときのみ、前記第１の構成を実現する、上記（１５）に記載の装置。
（２０）少なくとも第１および第２の処理コアを含む少なくとも１つの中央処理ユニットと、
前記少なくとも第１および第２の処理コアのうちのいずれが用いられるべきかを特定する１つ以上の制御入力を受信する入力装置と、
前記制御入力に応答して、前記制御入力によって、前記少なくとも第１および第２の処理コアのうちの１つ以上をアクティブにし、前記少なくとも第１および第２の処理コアの全部または１つ以上を非アクティブにすることによって、前記データ処理システムを構成する構成論理とを有する、データ処理システム。
（２１）前記第１および第２の処理コア，前記入力装置，および前記構成論理は、１つの集積回路内に設けられている、上記（２０）に記載のデータ処理システム。
（２２）前記制御入力は、前記第１の処理コアが用いられるべきであり、前記第２の処理コアが用いられるべきでない第１のオプションと、前記第２の処理コアが用いられるべきであり、前記第１の処理コアが用いられるべきでない第２のオプションと、前記第１および第２の処理コアがともに用いられるべきである第３のオプションとのうちから構成オプションを特定する選択入力を有し、
前記構成論理は、前記特定された構成オプションにより、前記データ処理システムを構成する、上記（２０）に記載のデータ処理システム。
（２３）前記選択入力は、前記第１および第２の処理コアがともに用いられるべきであることを指示し、
前記構成論理は、前記第１および第２の処理コアをアクティブにすることによって、前記選択入力に応答する、上記（２２）に記載のデータ処理システム。
（２４）前記第１の処理コアが、誤動作したという判別に応答して前記制御入力を生成するエラー回復装置をさらに有する、上記（２０）に記載のデータ処理システム。
（２５）前記制御入力は、前記第２の処理コアが、前記第１の処理コアの代わりに用いられるべきであることを指示し、
前記構成論理は、
前記第１の処理コアにアドレス指定された情報を、前記第２の処理コアで受信させ処理させ、
前記第２の処理コアからの出力を前記第１の処理コアの出力パスに送ることによって、前記制御入力に応答する、上記（２０）に記載のデータ処理システム。
（２６）前記構成論理は、前記第２の処理コア内の１つ以上のプロセッサ識別子フィールドに、前記第１の処理コアのプロセッサ識別子を記憶させることによって、前記第２の処理コアで処理すべき前記情報を生成するコア・ラベリング論理を含む、上記（２５）に記載のデータ処理システム。
（２７）前記情報は、前記プロセッサ識別子に関連する処理スレッドを含み、
前記第２の処理コアは、前記処理スレッドを実行することによって、前記情報を処理する、上記（２６）に記載のデータ処理システム。
（２８）前記構成論理は、出力コントローラをセットすることによって、前記第２の処理コアからの出力を前記第１の処理コアの出力パスに送り、前記第２の処理コアからの出力を、前記出力コントローラを経て前記データ処理システムのデータ記憶装置に入力させる、上記（２５）に記載のデータ処理システム。
（２９）前記制御入力は、第１の構成を特定し、
前記システムは、前記制御入力を生成するバッドコア・インジケータと、前記第１の構成と異なる第２の構成を特定するオーバーライド指示を生成するオーバーライド素子とをさらに有し、
前記構成論理は、前記入力装置が、前記オーバーライド入力を受信していないときのみ、前記第１の構成を実現する、上記（２５）に記載のデータ処理システム。
【図面の簡単な説明】
【図１】本発明によって、マルチ処理コアを持つ中央処理ユニット（ＣＰＵ）を動的に構成する装置を有する典型的なデータ処理システムのブロック図である。
【図２】図１のデータ処理システムのＣＰＵの詳細なブロック図である。
【図３】図２のＣＰＵにおいて、本発明によって、典型的なタイプの出力を適切な宛先に送る装置のブロック図である。
【図４】図２のＣＰＵの典型的なロード／記憶ユニット内の例示のプロセッサ識別子フィールドの構造を示す図である。
【図５】本発明によって、１つの処理コアを用いて他の処理コアにエミュレートするために図２のＣＰＵを構成するブート・プロセス内の例示の方法の論理フローチャートである。
【図６】本発明によって、１つの処理コアを用いて他の処理コアにエミュレートするために図２のＣＰＵを構成するブート・プロセス内の例示の方法の論理フローチャートである。
【図７】本発明によって、１つの処理コアを用いて他の処理コアにエミュレートするために図２のＣＰＵを構成するブート・プロセス内の例示の方法の論理フローチャートである。
【符号の説明】
１００  データ処理システム
１１０  ＣＰＵ
１２０  システム・バス
１２２  メモリ・マネジャー
１２４  ＲＡＭ
１３０  サービス・プロセッサ
１５２  ブリッジ
１６０  ディスクドライブ
１６０Ａ，１６０Ｂ  処理コア
１６２  Ｉ／Ｏデバイス
１７０  記憶コントローラ
１７２  キャッシュ
２１０  クロックおよびスキャン制御論理
２２２Ａ，２２２Ｂ  ＬＳＵ
２２４Ａ，２２４Ｂ  構成／状態レジスタ
２２６Ａ，２２６Ｂ  ＰＩＲ
２５０  インバータ
２３０Ａ  バッドコア（０）フューズ
２３０Ｂ  バッドコア（１）フューズ
２３２Ａ，２３２Ｂ  インバータ
２３４Ａ，２３４Ｂ  マルチプレクサ
２４０  フューズオーバーライド・ラッチ
２４２Ａ，２４２Ｂ  ＡＮＤゲート
２４４Ａ，２４４Ｂ  構成レジスタ
２４６Ａ，２４６Ｂ  ＬＳＵ出力バス
２６０Ａ  グッド（０）ラッチ
２６０Ｂ  グッド（１）ラッチ
２６４  マルチプレクサ
３１０  グローバルＦＩＲ
３２０Ａ，３２０Ｂ  ラッチ
３２６，３２８  エラー・フラグ
【図１】
0003706542.tif 000002
【図２】
0003706542.tif 000003
【図３】
0003706542.tif 000004
【図４】
0003706542.tif 000005
【図５】
0003706542.tif 000006
【図６】
0003706542.tif 000007
【図７】
0003706542.tif 000008