(57)【特許請求の範囲】
【請求項１】
集積回路であって、
少なくとも１つのプロセッサコアと、
少なくとも１つの他の回路と、
実行のために前記プロセッサコアにノウングッドコード（ＫＧＣ）を提供するように構成されたＫＧＣソースとを備え、
前記ＫＧＣは、前記集積回路内でそのライフタイムにわたって変更から保護されており、正当な実体から提供されており、前記ＫＧＣは前記他の回路のためのインタフェースコードを含み、これにより前記少なくとも１つのプロセッサコアで実行中のアプリケーションが前記ＫＧＣを介して前記少なくとも１つの他の回路とインタフェースし、前記ＫＧＣは前記アプリケーションが前記少なくとも１つの他の回路と対話するためのアプリケーションプログラミングインタフェース（ＡＰＩ）を提供し、
前記プロセッサコアは、第１の複数のレジスタを含むユーザ状態記憶域と、第２の複数のレジスタを含むＫＧＣ状態記憶域とを備え、前記ＫＧＣ状態記憶域は、プログラマブルロジックユニットとインタフェースするために、前記プロセッサコアが前記ＫＧＣを実行中の場合にのみ前記プロセッサコアにおいてアクセス可能である、集積回路。
【請求項２】
前記ＫＧＣは前記少なくとも１つの他の回路へのアクセスを管理するように構成されたデバイスマネージャを含む、請求項１に記載の集積回路。
【請求項３】
前記少なくとも１つのプロセッサコアは複数のプロセッサコアを含み、前記デバイスマネージャは前記複数のプロセッサコアの前記少なくとも１つの他の回路へのアクセスを管理するように構成されている、請求項２に記載の集積回路。
【請求項４】
前記デバイスマネージャは前記少なくとも１つの他の回路からの前記複数のプロセッサコアのうちの１つで実行中のプログラムに関連する状態を安全に保存し、別のプログラムに関連する状態を前記少なくとも１つの他の回路にロードするように構成されている、請求項３に記載の集積回路。
【請求項５】
少なくとも１つのプロセッサコアと少なくとも１つの他の回路とを有する集積回路における方法であって、
前記プロセッサコアでノウングッドコード（ＫＧＣ）を実行するステップを含み、
前記ＫＧＣは前記他の回路のためのインタフェースコードを含み、これにより前記少なくとも１つのプロセッサコアで実行中のアプリケーションが前記ＫＧＣを介して前記少なくとも１つの他の回路とインタフェースし、前記ＫＧＣは前記集積回路内でそのライフタイムにわたって変更から保護されており、正当な実体から提供されており、前記ＫＧＣは前記アプリケーションが前記少なくとも１つの他の回路と対話するためのアプリケーションプログラミングインタフェース（ＡＰＩ）を提供し、
前記プロセッサコアは、第１の複数のレジスタを含むユーザ状態記憶域と、第２の複数のレジスタを含むＫＧＣ状態記憶域とを備え、前記ＫＧＣ状態記憶域は、プログラマブルロジックユニットとインタフェースするために、前記プロセッサコアが前記ＫＧＣを実行中の場合にのみ前記プロセッサコアにおいてアクセス可能である、方法。
【請求項６】
前記ＫＧＣは前記少なくとも１つの他の回路へのアクセスを管理するように構成されたデバイスマネージャを含み、前記少なくとも１つのプロセッサコアは複数のプロセッサコアを含み、前記複数のプロセッサコアの前記少なくとも１つの他の回路へのアクセスを管理するステップをさらに含む、請求項５に記載の方法。
【請求項７】
アクセスを管理する前記ステップは前記少なくとも１つの他の回路からの前記複数のプロセッサコアの１つで実行中のプログラムに関連する状態を安全に保存するステップと、別のプログラムに関連する状態を前記少なくとも１つの他の回路にロードするステップとを含む、請求項６に記載の方法。
【請求項８】
前記少なくとも１つの他の回路はプログラマブルロジックユニットを有し、前記ＫＧＣを実行する前記ステップは前記集積回路の初期化時に前記プログラマブルロジックユニットに設定をロードするステップを含む、請求項５に記載の方法。
【請求項９】
ノウングッドコード（ＫＧＣ）を記録したコンピュータアクセス可能記録媒体であって、少なくとも１つのプロセッサコアと少なくとも１つの他の回路とを有する集積回路で実行されると、前記他の回路のためのインタフェースを提供する命令を含み、これにより前記少なくとも１つのプロセッサコアで実行中のアプリケーションが前記ＫＧＣを介して前記少なくとも１つの他の回路とインタフェースし、前記ＫＧＣは前記集積回路内でそのライフタイムにわたって変更から保護されており、正当な実体から提供されており、前記ＫＧＣは、前記アプリケーションが、前記少なくとも１つの他の回路と対話するためのアプリケーションプログラミングインタフェース（ＡＰＩ）を提供し、
前記プロセッサコアは、第１の複数のレジスタを含むユーザ状態記憶域と、第２の複数のレジスタを含むＫＧＣ状態記憶域とを備え、前記ＫＧＣ状態記憶域は、プログラマブルロジックユニットとインタフェースするために、前記プロセッサコアが前記ＫＧＣを実行中の場合にのみ前記プロセッサコアにおいてアクセス可能である、記録媒体。
【請求項１０】
前記ＫＧＣは前記少なくとも１つの他の回路へのアクセスを管理するように構成されたデバイスマネージャを含み、前記少なくとも１つのプロセッサコアは複数のプロセッサコアを含み、前記ＫＧＣは前記複数のプロセッサコアの前記少なくとも１つの他の回路へのアクセスを管理するように構成されている、請求項９に記載のコンピュータアクセス可能記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサおよびコンピュータシステムの分野に関し、より詳細には、プロセッサアーキテクチャの機能拡張を可能にしたり、オンボードデバイスを制御したり、他の用途のためのシステムのノウングッドコードの使用に関する。
【背景技術】
【０００２】
プロセッサは、命令セットアーキテクチャ（ＩＳＡ）に定義されている命令を実行するように設計されている。ＩＳＡは、命令、命令の符号化方式、ならびに命令の実行時に行われる操作を定義している。また、ＩＳＡは、一般に、プロセッサの各種の動作モードと、プログラマが、プロセッサ用のプログラムをコーディングして、所望の動作を実現するために必要な他の情報も定義している。つまり、ＩＳＡとは、本質的には、実行する命令ストリームを与えられたときの、プロセッサの動作を定義するものである。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
プログラマは、プロセッサが、ＩＳＡに定義された通りに動作することを当てにしているため、ＩＳＡの変更は、通常はプログラマ（またはソフトウェア会社）とプロセッサの設計者（または、プロセッサの製造業者）の両者からの多くの意見を取り入れて、慎重に行う必要がある。必要な挙動がプロセッサによって確実に提供されるようにするために、プロセッサは、ＩＳＡの変更をハードウェアに実装している必要がある。このため、変更を実装するにはプロセッサの新しいハードウェアを作製する必要があるため、変更の定義は慎重に記述されており、合意が得られていなければならない。後から追加で変更を行うには、ハードウェアの作製が別に必要となる。
【課題を解決するための手段】
【０００４】
一実施形態では、集積回路は、少なくとも１つのプロセッサコアと、少なくとも１つの他の回路と、実行のために前記プロセッサコアにノウングッドコード（ＫＧＣ）を提供するように構成されたＫＧＣソースとを有する。前記ＫＧＣは、前記他の回路のためのインタフェースコードを含み、これにより、前記少なくとも１つのプロセッサコアで実行中のアプリケーションが、前記ＫＧＣを介して前記少なくとも１つの他の回路とインタフェースする。
【０００５】
別の実施形態では、プロセッサは、プログラマブルマップと、前記プログラマブルマップに結合された回路とを有する。前記プログラマブルマップは、少なくとも１つの命令であって、前記プロセッサが実装している命令セットアーキテクチャのアーキテクチャの変更が定義されているが、前記プロセッサは前記変更を実装してない命令を識別するデータを記憶するように構成されている。前記回路網は、前記命令を検出し、ノウングッドコード（ＫＧＣ）への遷移を発生させるように構成されており、前記ＫＧＣは、不正な変更から保護されており、正当な実体から提供されている。前記ＫＧＣは、実行されると前記変更をエミュレートするコードを含む。
【図面の簡単な説明】
【０００６】
【図１】プロセッサと、関連するノウングッドコード（ＫＧＣ）とを示すブロック図。
【図２】プロセッサおよびＫＧＣの第１の実施形態のブロック図。
【図３】プロセッサおよびＫＧＣの第２の実施形態のブロック図。
【図４】プロセッサおよびＫＧＣの第３の実施形態のブロック図。
【図５】ＫＧＣのための遷移メカニズムの第１の実施形態を示すブロック図。
【図６】遷移メカニズムの第１の実施形態を実装するプロセッサの一実施形態のブロック図。
【図７】ＫＧＣのための遷移メカニズムの第２の実施形態を示すブロック図。
【図８】遷移メカニズムの第２の実施形態を実装するプロセッサの一実施形態のブロック図。
【図９】ＫＧＣをデバイスマネージャとして使用するマルチコア集積回路の一実施形態のブロック図。
【図１０】デバイスマネージャとしてのＫＧＣの一実施形態の動作を示すフローチャート。
【図１１】リング０を、保護された領域に分割するためのメカニズムとしてＫＧＣを使用する一実施形態のブロック図。
【図１２】プロセッサを含む集積回路上のプログラマブルロジックと共にＫＧＣを使用する一実施形態のブロック図。
【発明を実施するための形態】
【０００７】
以下の詳細な説明は添付の図面を参照している。図面の説明は「図面の簡単な説明」に記載されている。
【０００８】
本発明は、さまざまに変形されたり代替形態を取りうるが、その特定の実施形態が、例として図面に図示され、かつ本明細書に詳細に記載される。しかし、図面および詳細な説明は、本発明を開示の実施形態に限定することを意図するものではなく、添付の特許請求の範囲によって定義される本発明の趣旨ならびに範囲に含まれる全ての変形例、均等物および代替例を含むことを意図したものであることが理解されるべきである。
【０００９】
以下の説明では、ノウングッドコード（Known Good Code:KGC）を使用して、プロセッサのアーキテクチャの変更を柔軟に（例えば、ＫＧＣの実行により変更をエミュレートすることによって）実装する場合について説明する。また、以下の説明では、ＫＧＣの他の用途についても説明する。これらの用途を説明する前に、ＫＧＣの概要について記載する。
【００１０】
＜ノウングッドコード（ＫＧＣ）の概要＞
一般に、「ＫＧＣ」とは、そのライフタイムにわたって権限のない実体による変更から保護され、正当な実体から提供されるコードを指す。「正当な実体」とは、例えば、プロセッサの製造業者により、信頼できる実体として認められている実体などである。ＫＧＣは、変更不能な記憶域にコードを提供することによって変更から保護されており、この記憶域とプロセッサ間の通信メカニズムが何らかの方法で保護されている。別の実施形態では、ＫＧＣは、変更可能な記憶域または保護されていない記憶域に提供されるが、実行前に暗号による認証が行われてもよい。
【００１１】
ＫＧＣは、安全な実行コンピューティング環境（secure execution computing environment：ＳＥＣＥ）内で実行されうる。ＳＥＣＥとは、コンピュータで実行中の他のコードが、コード（ＫＧＣ）と、関連するデータとを変更または検査することができないコンピューティング環境である。ＳＥＣＥは、（例えば電源投入時に）プロセッサハードウェアによって作成されるか、あるいは起動直後に実行されるソフトウェアによって作成され、ＳＥＣＥが作成され、ＳＥＣＥ内にＫＧＣが配置されうる。ＳＥＣＥの例としては、例えば、プロセッサのマイクロコードエンジン；ローカルの安全な不揮発性メモリから、プロセッサの命令キャッシュおよびデータキャッシュにＫＧＣをロードし、キャッシュ内にコードおよびデータをロックするプロセッサ；ローカルの不揮発性メモリからＫＧＣを実行する埋め込み型プロセッサまたは実行エンジン、ならびに正当であり権限を有し、場合によっては暗号化されているか、あるいは（例えばマルチチップモジュール内で）物理的に保護されている他のデバイスへの通信インタフェース（存在する場合）などが挙げられる。明確さを期することが適切な場合、ＫＧＣは、他のコードを実行しているのと同じプロセッサによって実行される場合は「ネイティブＫＧＣ」と呼ばれ、埋込み型プロセッサなどの異なるプロセッサによって実行される場合は「非ネイティブＫＧＣ」と呼ばれる。「ＫＧＣ」との用語が「ネイティブ」または「非ネイティブ」を付けずに用いられる場合、文脈から明らかであるか、あるいは、その文脈では、ネイティブＫＧＣ、非ネイティブＫＧＣのいずれも使用することができる。
【００１２】
図１は、一実施形態のプロセッサおよび関連するＫＧＣの概念レベルのブロック図である。図に示すように、プロセッサ１０は、ＫＧＣソース１２と共に設けられる。任意選択で、暗号認証ユニット１４および／または変更保護メモリ１６が備えられてもよい。プロセッサ１０と、ＫＧＣ（変更保護メモリ１６またはＫＧＣソース１２のいずれかに存在）との間の通信リンクは保護されている（図１の参照符号１８）。
【００１３】
プロセッサ１０が、保護されたチャンネル１８を介してＫＧＣソース１２に直接結合され、ＫＧＣソース１２が変更保護されている（すなわち、ＫＧＣソース１２を権限のない実体によって変更できない）場合、暗号認証ユニット１４を省略してもよい。権限を有する実体には、ＫＧＣを作成した実体、場合によっては、プロセッサ１０の製造業者が含まれうる。このため、ＫＧＣソース１２には、コンピュータによってアクセス可能などのようなストレージデバイスが含まれてもよい。
【００１４】
プロセッサ１０が、保護されたチャンネル１８によってＫＧＣソース１２と直接結合されていない場合には、ＫＧＣは、そのソース１２内で、あるいは変更保護メモリ１６への転送中に、不正な変更を受ける可能性がある。暗号認証ユニット１４は、ＫＧＣを認証して、このような変更が行われないことを保証することができる。例えば、暗号認証ユニット１４は、プロセッサからの検証信用ルート（root of trust for verification：ＲＴＶ）を使用して、ＫＧＣを認証しうる。各種実施形態では、どのような認証方式を使用してもよい。
【００１５】
正当なＫＧＣは、変更保護メモリ１６に記憶され、プロセッサ１０は、保護されたチャンネル１８を介してＫＧＣを取り出す。一部の実施形態では、ＫＧＣソース１２から変更保護メモリ１６へのチャンネルが保護されており、ＫＧＣソース１２が変更保護されており、このため暗号認証が不要となりうる。このような実施形態は、例えば、変更保護メモリ１６が、ＫＧＣソース１２よりもアクセスのレーテンシが低いか、あるいは、変更保護以外の何らかの利点（例えば、各プロセッサが、ローカルの変更保護メモリ１６を備えるか、またはプロセッサの一部と変更保護メモリ１６を共有するマルチプロセッサシステムにおいて、低電力、同時アクセスなど）を提供する場合に実装されうる。
【００１６】
一般に、変更保護メモリ１６は、メモリ１６の内容を変更する機能が制限されているか、あるいはこのような機能が除外された、どのような種類のメモリでもよい。詳細には、変更保護メモリ１６は、メモリの内容を変更する機能を、権限を有する実体のみに制限することができる。変更保護メモリ１６は、権限を有する実体のみが内容を変更できるように物理的に分離されるか、あるいは他の何らかの方法（例えばキャッシュメモリへのロックなど）で保護されうる。
【００１７】
図２〜４は、ＫＧＣソースの実装方法のいくつかの例を示す。これらの例は、ＫＧＣの保護の度合いが異なる実施形態を示すが、網羅的なものではない。図２〜４に示す実施形態のいずれかに、必要に応じて複数のプロセッサが使用されてもよい点に留意されたい。
【００１８】
図２は、プロセッサ１０と、ＫＧＣを記憶している不揮発性メモリ２２とを備える集積回路２０の一実施形態のブロック図である。このため、不揮発性メモリ２２は、ＫＧＣソース１２として機能し、プロセッサ１０と同じ集積回路２０に物理的に設けられるため、変更保護されている。すなわち、不揮発性メモリ２２は集積回路２０の外部からアクセスできず、メモリ２２にアクセスするためのチャンネルは物理的に保護されている。
【００１９】
不揮発性メモリ２２は、さまざまな実装を有することができる。例えば、不揮発性メモリ２２は、リードオンリーメモリ（ＲＯＭ）でも、バッテリバックアップＲＡＭまたは半導体メモリでもよい。別の実施形態では、不揮発性メモリ２２は、メモリの組合せ（例えば、ＫＧＣがロードされロックされるＲＯＭまたは他の不揮発性メモリおよびキャッシュメモリなど）でもよい。ＫＧＣがキャッシュにロードされ、キャッシュにロックされる場合、他のメカニズムが実装されてもよい（例えば、コヒーレンシを維持するためにロックされたエントリがスヌープされ、コヒーレンシメカニズムによってコード／データの閲覧が阻止されたり、標準的なキャッシュルックアップの一部ではないテストポートおよび他のアクセスポイントが、ロックされたエントリにアクセスするのを禁止するなど）。
【００２０】
図３は、プロセッサ１０およびＫＧＣの別の実施形態のブロック図である。図３の実施形態では、（プロセッサ１０を１つ以上備える）プロセッサ集積回路２４が、不揮発性メモリ２２と共にマルチチップモジュール（ＭＣＭ）２６に搭載されている。プロセッサ１０が、場合によってはＫＧＣ（「ネイティブＫＧＣ」）を実行するか、ＫＧＣ（「非ネイティブＫＧＣ」）を実行するために実行エンジン２８が提供されうる。実行エンジン２８は、プロセッサ集積回路２４と通信しうる。一実施形態では、実行エンジン２８と不揮発性メモリ２２とが、１つの集積回路（例えばチップ上のシステム）に集積されうる。詳細には、チップ上の実行エンジン／不揮発性メモリシステムは、トラステッドプラットフォームモジュール（ＴＰＭ）でもよい。この実施形態では、不揮発性メモリ２２が、プロセッサ１０のＫＧＣソース１２としても動作し、暗号認証ユニット１４が設けらなくてもよい。一部の実施形態では、プロセッサ集積回路２４内に、変更保護メモリ（例えばロックキャッシュ）が設けられてもよい。
【００２１】
図４は、メモリコントローラ３０と、ネイティブＫＧＣを記憶しているメモリ３２（不揮発性など）とを備えるシステムに、プロセッサ１０が備えられる別の実施形態である。この場合、メモリ３２はプロセッサ１０の外にあり、このため、ネイティブＫＧＣは（例えば、メモリコントローラ３０あるいはプロセッサ１０内の）暗号認証ユニット１４内で暗号認証されうる。また、変更保護メモリ１６（例えばプロセッサ１０内のロックキャッシュ）も設けられうる。
【００２２】
メモリ３２は、コンピュータシステムの基本入出力システム（ＢＩＯＳ）メモリでも、コンピュータシステムに設けられた別の不揮発性メモリでもよい。
【００２３】
＜アーキテクチャの変更のためのＫＧＣへの遷移＞
ＫＧＣは、正当な実体（信頼されたソース）から提供され、不正な変更から保護されているため、ＫＧＣは、プロセッサ製造業者によって信頼されうる。このため、ＫＧＣを使用して、プロセッサハードウェアにまだ実装されていないアーキテクチャの変更を実装することができる。ＫＧＣによって実装されるアーキテクチャの変更により、ユーザ（例えば、コードの作成者およびプロセッサを備えるコンピュータシステム）が、変更がハードウェアにコミットされる前にアーキテクチャの機能拡張を使用できる（または、アーキテクチャの機能削除がハードウェアにコミットされた後でもこの削除を使用できる）ようになる。
【００２４】
例えば、アーキテクチャの機能拡張（例えば新しい命令、既存の命令およびその実行環境の新機能、プロセッサ内部に設けられるか、プロセッサの近くに結合される新しいアクセラレータまたは他の機能ブロックなど）を、ハードウェアに実装する前に、これらをＫＧＣ内で実装することができる。アーキテクチャの機能拡張をＫＧＣによって実装している間に、この機能拡張の定義に問題がみつかった場合、（例えば、機能拡張自体を変更することによって）機能拡張がハードウェアにコミットされる前に、問題を是正することができる。ＫＧＣ実装を使用して、期待される機能拡張の利点（例えば高性能、低電力消費など）を予測することができる。その後、確信を持って機能拡張をハードウェアにコミットすることができる。また、同じ命令セットアーキテクチャを使用する競合企業が、新しい特徴を導入した場合、ＫＧＣを使用して、この特徴を実装し、競合企業による変更に迅速に追い着くことができる。
【００２５】
アーキテクチャの機能削除（例えば、多用されていないか、多用されていないと考えられる命令の削除、不要であるか、不要であると考えられる従来の動作モードの削除）についても、ＫＧＣを使用して、削除された機能を実装することができる。機能が従来のコードで未だに使用されている場合でも、例えば、従来のコードを、パフォーマンスが低くなるが、正しく動作させることができる。したがって、削除した機能が使用されていても、機能削除が適切に動作することを確かめたうえで機能削除を実装することができる。
【００２６】
ＫＧＣを使用してアーキテクチャの変更を実装するために、ＫＧＣ実行に遷移するためのメカニズムが実装されうる。このメカニズムでは、プロセッサが、現在実行中のコードが、アーキテクチャの変更を使用することを検出し、これが検出されると、ＫＧＣを実行させうる。ここでは、現在実行中のコードを「ユーザプログラム」と呼ぶが、このプログラムは、特権コード（例えばオペレーティングシステムまたは他の特権コード）として実行していてもよい。この遷移は、ユーザプログラムが認識することなく行われ、このため、ユーザプログラムのために、アーキテクチャの機能拡張または機能削除がエミュレートされうる。
【００２７】
このメカニズムは、アーキテクチャの変更を検出するために、プロセッサが使用可能なデータを含むようにプログラムされうるプログラマブルマップを有しうる。マップにプログラムされるデータは、変更の検出に応じて変わりうる。例えば、図５，６に示す一実施形態では、このデータには、命令の符号の全体または一部（例えばオペコード、オペコード修飾子、オペランドフィールドなど）が含まれうる。また、データに、プロセッサの現在の動作モードを示す、１つ以上の構成／制御レジスタの各種のモード指標が含まれてもよい。更に、図７，８に示す実施形態のように、データに、命令の実行中に生成されるアドレスまたはデータが含まれていてもよい。データに、命令の実行中に生成される、および／または実行中に発生しうる他の任意のイベント（例えば例外、特定の種類の例外、割り込み、特定の種類の割り込みなど）中に生成される、命令の符号およびデータ／アドレスの任意の組み合わせが含まれうる。プログラマブルマップは、どのような種類の記憶域または記憶域の組み合わせ（例えば、プロセッサが実行する命令によってアドレッシング可能なレジスタ、メモリアレイなど）でもよい。
【００２８】
図５は、検出された命令が実行に達する前に行われる遷移メカニズムの一実施形態を示すブロックである。図５には、（アーキテクチャの機能拡張に対応する）新しい命令を含むユーザプログラムが図示されている。同様の動作が、削除された命令、あるいはアーキテクチャの変更において動作が変更された命令を含むユーザプログラムで行われてもよい。また、図５には、ＫＧＣ、ユーザプログラム状態４０、およびＫＧＣ状態４２も図示されている。ユーザプログラム状態４０は、ユーザプログラムが認識可能なプロセッサのアーキテクチャの状態（例えばレジスタ値）を含む。ＫＧＣ状態４２は、ＫＧＣコードの実行中にのみ認識されるプロセッサの状態を含む。すなわち、ユーザプログラムコードは、ＫＧＣ状態４２の読み出しも書き込みもできない。このため、ＫＧＣ状態４２は、ＫＧＣにプライベートであり、プロセッサハードウェアが実装しない、エミュレート中のアーキテクチャの変更の一部として使用されうる。ＫＧＣ状態４２は、１つ以上のレジスタなどの、少なくとも一部のプロセッサ状態を含む。このレジスタは、例えば、ＫＧＣによって生成／使用されるデータを記憶するために使用されても、ＫＧＣが使用するために予約されているメモリへのポインタを記憶するために使用されても、この両方に使用されてもよい。また、レジスタは、ＫＧＣの実行を制御する各種の構成／制御データも記憶しうる。図５に示すように、ユーザプログラムはユーザプログラム状態４０（矢印４４）にアクセスできるが、ＫＧＣ状態４２にはアクセスできない。ＫＧＣは、ユーザプログラム状態（矢印４８）のほかにＫＧＣ状態４２（矢印４６）にもアクセスできる。
【００２９】
ユーザプログラムには、図５に示すＩ１，Ｉ２，Ｉ３などの命令のストリームが含まれる。一般に、命令Ｉ１，Ｉ２，Ｉ３，Ｉ４，Ｉ５，Ｉ６は、プロセッサ１０が実装する命令セットアーキテクチャに定義されている命令（「マクロ命令」と呼ばれる）である。命令の１つ（図５の「新しい命令」）が、ＫＧＣによって実装されるアーキテクチャの変更に従って新たに定義された命令である。つまり、この命令は、プロセッサハードウェアに実装されているアーキテクチャには定義されていない。この命令は、実行が許可されると、プロセッサ１０に例外を発生させうる。あるいは、この命令は、既に定義されているが、ＫＧＣがエミュレートするアーキテクチャの変更の一部に含まれる新しい機能を使用してもよい。プロセッサ１０には、この命令のために、例外（発生する場合）を阻止し、ＫＧＣをフェッチさせて実行させる、ＫＧＣへの実行前段階マッピング（矢印５０）を有しうる。矢印５０で示すＫＧＣへの遷移により、ＫＧＣ状態４２が有効となり、ＫＧＣ内で実行中の命令からＫＧＣ状態４２が認識可能となる。場合によっては、ＫＧＣが、指定された機能を実装できることが保証されるが、ユーザプログラムのために例外を発生させるが、ＫＧＣの実行には不要なイベントが、ＫＧＣの実行中に例外を発生させることを保証するために、プロセッサ１０が、ＫＧＣの実行のために特権レベルを上げてもよい。このため、特権の向上が、特定のリソース、全体的な特権保護方式の特定の一部のみに限定されうる。
【００３０】
また、ＫＧＣは、図５に示すように、命令ＫＧＣ  Ｉ１〜ＩＮのストリームも含む。ＫＧＣ命令も、プロセッサ１０が実装する命令セットアーキテクチャで定義されている（ＫＧＣがエミュレートするアーキテクチャの変更を含まない）マクロ命令であってもよい。ＫＧＣ命令は、実行されると、プロセッサ１０に実装されていないアーキテクチャの変更をエミュレートする。ＫＧＣは、通常、実行を、新しい命令の後の命令（例えば図５の１５）でユーザプログラムに戻させる命令で終了するが、別の点で実行を続けてもよい（例えば、複数の命令がエミュレートされた場合にユーザプログラムの後に続く命令、エラーが検出された場合に例外または他のエラー処理ルーチンなど）。
【００３１】
同様に、ＫＧＣが、プロセッサ１０に実装されているアーキテクチャの変更によって削除されている機能をエミュレートすることもできる。例えば、ある命令がアーキテクチャから削除されている場合、従来のユーザプログラムが正しく動作するように、ＫＧＣがその命令をエミュレートしてもよい。更に、プロセッサ１０が命令を不適切に実装している場合（例えば、プロセッサハードウェアでバグが見つかった場合など）に、ＫＧＣを使用して、正常動作を行わせることもできる。
【００３２】
図６は、ＫＧＣへの命令の実行前マッピングを実装しうるプロセッサ１０の一実施形態のブロック図である。図に示した実施形態では、プロセッサ１０は、命令キャッシュ（ＩＣａｃｈｅ）６０、フェッチユニット６２、デコードユニット６４、実行コア６６、ユーザ状態記憶域６８、ＫＧＣ状態記憶域７０、およびプログラマブルマップ７２を有する。フェッチユニット６２はＩＣａｃｈｅ６０とデコードユニット６４とに結合され、デコードユニット６４はプログラマブルマップ７２と実行コア６６とに結合されている。更に、実行コア６６は、ユーザ状態記憶域６８とＫＧＣ状態記憶域７０とに結合されている。
【００３３】
フェッチユニット６２が、ＩＣａｃｈｅ６０から命令をフェッチし、フェッチされた命令をデコードユニット６４に提供して、プロセッサ１０は、ユーザプログラムを実行する。デコードユニット６４は、命令をデコードし、デコードした命令を実行のために実行コア６６に提供しうる。場合によっては、デコードユニット６４は、オペランドリード要求をユーザ状態記憶域６８（ＫＧＣが実行中の場合はＫＧＣ状態記憶域７０）に提供しうる。
【００３４】
また、デコードユニット６４は、プログラマブルマップ７２に結合され、プログラマブルマップ７２は、ＫＧＣ実行への遷移を発生させる１つ以上の命令を識別するデータを含むようにプログラムされうる。プログラマブルマップ７２は、プロセッサ１０の電源投入時にプログラムされ、その後、任意のユーザプログラムが実行される。プログラマブルマップ７２は、プログラムのために命令によってアドレス参照可能でも、ハードウェア回路網が、プロセッサ１０に命令を実行させる準備の一環として、指定されたコンピュータシステム位置からマップを読み出して、プログラマブルマップ７２に格納してもよい。
【００３５】
この実施形態では、プログラマブルマップ７２に記憶されているデータは、ＫＧＣ実行への遷移を発生させる命令のすべてまたは一部を識別しうる。例えば、命令のオペコードフィールド、修飾子、オペランド指示子などが使用されうる。また、一部の実施形態では、各種のモード指標が、プログラマブルマップのデータに含まれてもよい。
【００３６】
デコードユニット６４が、プログラマブルマップ７２で指定されている命令を検出すると、デコードユニット６４は、その命令（と、ユーザプログラムコードストリーム内の後続の命令）を廃棄し、フェッチユニット６２に信号を送信してＫＧＣをフェッチさせる（図６の「ＫＧＣフェッチ」信号）。例えば、ＩＣａｃｈｅ６０内でネイティブＫＧＣがロックされうる。別の実施形態では、ネイティブＫＧＣは、同じチップまたは同じＭＣＭ上の不揮発性メモリに存在しても、別個のシステムメモリに存在してもよい。別の実施形態では、デコードユニット６４は、図３に示すような外部の実行エンジンに、非ネイティブＫＧＣを実行させるように信号を送信してもよい。
【００３７】
デコードユニット６４は、どのようなデコード回路網を有しうる。デコードユニットは、命令をデコードするように構成された１つ以上のハードウェアデコーダを有しうる（複数のデコーダが提供される場合、異なる命令を並列にデコードしうる）。また、デコードユニットは、より複雑な命令のためにマイクロコードルーチンをディスパッチするように構成されたマイクロコードユニットも有しうる。
【００３８】
実行コア６６は、どのような実行構成（例えばスーパースカラ、スーパーパイプライン化、インオーダー、アウトオブオーダーなど）を有していてもよい。また、実行コア６６は、ネイティブＫＧＣが実行中の場合のみ、ＫＧＣ状態記憶域７０へのアクセスを許可しうる。ユーザ状態記憶域６８とＫＧＣ状態記憶域７０は、それぞれのどのような半導体記憶装置（例えばレジスタ、レジスタファイル、メモリアレイなど）を有してもよい。
【００３９】
図７は、検出された（ＫＧＣ実行への遷移を発生させる）命令の実行後、または検出された命令の実行中に行われる遷移メカニズムの別の実施形態を示すブロック図である。図５と同様に、図７はユーザプログラムとＫＧＣとを示す。この実施形態では、アーキテクチャの変更を実装する命令が実行され、その実行中に発生するイベントが、ＫＧＣを実行すべきことの検出に使用される。また、図７には、図５と同様に、ユーザプログラム状態４０とＫＧＣ状態４２とも図示されている。図５と同様に、ユーザプログラムはユーザプログラム状態４０（矢印４４）にアクセスできるが、ＫＧＣ状態４２にはアクセスできない。ＫＧＣは、ユーザプログラム状態（矢印４８）のほかにＫＧＣ状態４２（矢印４６）にもアクセスできる。
【００４０】
ユーザプログラムには、図７に示すＩ１，Ｉ２，Ｉ３などの命令のストリームが含まれる。一般に、命令Ｉ１，Ｉ２，Ｉ３，Ｉ４，ＩＯ命令，Ｉ５，Ｉ６は、マクロ命令である。ＩＯ命令は、メモリマップドＩ／Ｏ、またはいわゆるイン／アウトＩ／Ｏ（ＩＯＩＯ）のいずれかの入出力（Ｉ／Ｏ）にマップする命令である。ＩＯＩＯは、ｘ８６命令セットのＩＮ命令およびＯＵＴ命令に対応する。一般に、ＩＯＩＯ命令は、Ｉ／Ｏサイクルを発生させるどのような命令でもよく、Ｉ／Ｏサイクルは、メモリアドレス空間とは別個のＩ／Ｏアドレス空間で発生し、プロセッサによって「別個である」と認識される。ＩＯ命令は、ＫＧＣ実行への遷移を発生させるトリガイベント（矢印８０）を介して、実行中のプロセッサ１０によって検出されうる。
【００４１】
一実装では、トリガイベントは、ＩＯ命令の実行中に生成されるアドレスでもよい。別の実施形態では、実行中に読み出されるかまたは書き込まれるデータがトリガイベントでも、ＩＯ命令の実行中の他のどのようなイベントがトリガイベントでもよい。別の実施形態では、命令は、プロセッサ１０がトリガイベントとして検出できるイベントを発生させるものであれば、必ずしも入出力命令でなくてもよい。ほかのトリガイベントとしては、タイマー切れ、エラー検出（ＥＣＣエラーなど）、あるいは、マシン状態の他の任意の検出可能な変化などが挙げられる。
【００４２】
図８は、トリガイベントに基づいて、実行中または実行後に、命令のＫＧＣへのマッピングを実装しうるプロセッサ１０の別の実施形態のブロック図である。図６の実施形態と同様に、図８の実施形態は命令キャッシュ（ＩＣａｃｈｅ）６０、フェッチユニット６２、デコードユニット６４、実行コア６６、ユーザ状態記憶域６８、ＫＧＣ状態記憶域７０、およびプログラマブルマップ７２を備える。フェッチユニット６２はＩＣａｃｈｅ６０とデコードユニット６４とに結合され、デコードユニット６４は実行コア６６に結合されている。更に、実行コア６６は、ユーザ状態記憶域６８とＫＧＣ状態記憶域７０とに結合されている。
【００４３】
図８の実施形態では、プログラマブルマップ７２に結合されており、フェッチユニット６２（または外部実行エンジン）にフェッチＫＧＣ指標を生成するのは実行コア６６である。プログラマブルマップ７２のデータは、ＫＧＣへの遷移を発生させる命令の実行中のトリガイベントである、アドレス、アドレス範囲、データ、データ範囲、例外、割り込みなどを識別しうる。また、このデータには、ＫＧＣへの遷移を発生させる命令を識別する実行生成データと共に使用される（あるいは、実行生成データの代わりに使用される）、命令を識別するデータ（例えばオペコード、および他の符号）も含まれてもよい。上で説明したように、このデータには、各種のモード指標が含まれてもよい。
【００４４】
ＫＧＣのフェッチ／実行を指示する信号を送信するほか、実行コア６６は、トリガイベントに対応する命令に同期しうる（トリガした命令および先行する全命令が実行を完了するまで、第１のＫＧＣ命令の実行を待機し、ＫＧＣ実行が完了するまで、ユーザプログラム内のトリガした命令の後の続に続く命令を実行しない）。また、実行コア６６は、パイプラインの実行段階前に、デコードユニット６４および他の任意のユニットに、ユーザプログラム命令をパージさせても、ＫＧＣフェッチ信号を使用してパージが指示されてもよい。
ＫＧＣの他の用途
【００４５】
前のセクションでは、アーキテクチャの変更を実装するためのＫＧＣの使用について説明した。ＫＧＣの他の用途も考察される。
【００４６】
例えば、図９は、１つ以上の汎用（ＧＰ）コア９２Ａ〜９２Ｎと、１つ以上の特殊用途（ＳＰ）コア９４Ａ〜９４Ｍとを有し、これらがすべて１つのシリコン基板に集積されている（または、別の実装ではＭＣＭに搭載されている）集積回路９０を示す。ＧＰコア９２Ａ〜９２Ｎは、プロセッサ１０と同様の、命令セットアーキテクチャに定義されている命令を実行するように設計されたプロセッサでもよい。ＳＰコアは、アクセラレータ、追加機能または他のデバイスでもよい。例えば、ＳＰコアは、グラフィック操作のために最適化されたグラフィック処理ユニット（ＧＰＵ）、暗号化タスクを実行するように構成された暗号アクセラレータ、トラステッドプラットフォームモジュール、電力管理用に使用されうる低電力消費／低パフォーマンスのプロセッサコア、および他の所望のデバイスであってもよい。複数のＳＰコアが搭載される場合、ＳＰコアは相互に異なっていてもよい。一般に、ＳＰコア９４Ａ〜９４Ｍは、ＧＰコア９２Ａ〜９２Ｎに追加で設けられる、どのような望ましい回路網を含んでもよい。
【００４７】
図９の実施形態のＫＧＣは、ＧＰコア９２Ａ〜９２ＮによるＳＰコア９４Ａ〜９４Ｎへのアクセスを制御するデバイスマネージャ９６でもよい。ＫＧＣは、ＳＰコア９４Ａ〜９４Ｍにアクセスするために、ＧＰコア９２Ａ〜９２Ｎで実行中のユーザプログラムによって使用されうるアプリケーションプログラミングインタフェース（ＡＰＩ）を提供しうる。このため、ＳＰコア９４Ａ〜９４Ｍは、ＳＰコアへのアクセスを含めて変更されるが、ＧＰコア９２Ａ〜９２Ｎ（およびユーザプログラム）を、この変更から切り離すことができる。また、ＫＧＣデバイスマネージャ９６は、タスクの優先度の決定と、ＧＰコア９２Ａ〜９２Ｍ間でのＳＰコア９４Ａ〜９４Ｍの共有も処理しうる。例えば、ＳＰコア９４Ａ〜９４Ｍが、優先度の高いタスクが要求されたときに、優先度の低いタスクを実行しているとする。ＫＧＣデバイスマネージャ９６はこのＳＰコアに割り込み、優先度の低いタスクに対応する状態を保存して、優先度の高いタスクを開始する。ＫＧＣデバイスマネージャ９６は、異なるタスクの状態が、関係のないユーザプログラムに公開されないように、タスクの状態を保持するための安全な記憶位置を有しうる。つまり、あるプログラムの状態が、ＫＧＣによって、別のプログラムから隠される。このため、ＫＧＣデバイスマネージャ９６は、セキュリティを提供することができる。例えば、ＳＰコアが暗号デバイスである場合、暗号化に使用するキーやその他の機密データを、関係のないプロセスから隠すことができる。また、ＫＧＣデバイスマネージャ９６は、ＳＰコアをエミュレートして、このＳＰコアの除去を可能にしたり、あるいは要求の受信時に物理コアがすべて使用されている場合に、仮想コアを実現する。
【００４８】
また、ＫＧＣデバイスマネージャ９６は、集積回路９０内でどの機能を有効にし、どの機能を無効にするかも制御しうる。このような機能制御には、さまざまな用途がある。例えば、購入した機能を有効にし、購入期限が切れたときに、この機能を無効にするプリペイドモデルをサポートすることができる。最初の販売時に機能を無効にし、利用者が追加で支払を行った場合に、この機能を有効にすることができる。
【００４９】
ＧＰコア９２Ａ〜９２Ｎからの要求に応答するデバイスマネージャ９４としてのＫＧＣの一実施形態の動作の例が、図１０のフローチャートに示される。図１０ではブロックが理解しやすいように図示されているが、順序を変更してもよい。ＫＧＣは、実行されると、図１０のフローチャートを実装する命令を有しうる。
【００５０】
ＫＧＣは、要求されたコアが集積回路９０に存在するかどうかを判定しうる（判定ブロック１３０）。要求されたコアが存在しない場合（例えば、コアが除去されているか、集積回路９０の後の設計に含まれていない場合、判定ブロック１３０の「いいえ」の線）、ＫＧＣは、存在しないコアをエミュレートしうる（ブロック１３２）。あるいは、要求されたコアが、集積回路９０に存在しないが、同等のハードウェアが、プロセッサを含むコンピュータシステムの他の部分で使用可能な場合、ＫＧＣは、要求されたタスクを実行するために、外部ハードウェアと通信しうる。ＫＧＣは、有無の確認とエミュレーションを行うことによって、ＳＰコアが存在しない場合であっても、ＳＰコア９４Ａ〜９４Ｍを使用するプログラムを機能させることができる。
【００５１】
要求されたコアが集積回路９０に存在する場合、（判定ブロック１３０の「はい」の線）、ＫＧＣは、要求されたコア９４Ａ〜９４Ｍが使用可能かどうかを判定しうる（判定ブロック１３４）。所定のタイプのコアが複数存在し、要求されたタイプのコア９４Ａ〜９４Ｍのいずれか使用可能である場合（例えば有効であり、アイドルの場合）、そのコア９４Ａ〜９４Ｍがタスクの実行に割り当てられうる。要求されたコア９４Ａ〜９４Ｍが使用可能である場合（判定ブロック１３４の「はい」の線）、ＫＧＣは、要求されたタスクを実行するようにコアをプログラムしうる（ブロック１３６）。タスクが終了すると（判定ブロック１３８の「はい」の線）、ＫＧＣは要求側に通知しうる（ブロック１４０）。タスクの終了の判定は、さまざまな形をとることができる。例えば、ＫＧＣが割り当てたコア９４Ａ〜９４Ｍをポーリングしても、割り当てたコアが終了時に割り込みをアサートしてもよい。終了したタスクが、コアの別のタスクを剥奪した場合（判定ブロック１４２の「はい」の線）、ＫＧＣは、剥奪されたタスクのタスク状態を安全な記憶域から安全に転送し（ブロック１４４）、記憶されている状態から要求を実行するようにコアをプログラムし（ブロック１３６）、このタスクが上で説明したように実行を続けうる。安全な記憶域は、ＫＧＣ以外のコードからは隠されているＫＧＣ割当のデータ記憶域（例えば、データキャッシュ記憶域、書き込み可能ＮＶＲＡＭ記憶域などにある）であってもよい。終了したタスクがタスクを剥奪しておらず、（安全な記憶域内に）実行を待機中のタスクが存在する（判定ブロック１４６の「はい」の線）場合、ＫＧＣは、待機中のタスクのタスク状態を安全な記憶域から安全に転送し（ブロック１４４）、待機中のタスクを実行するようにコアをプログラムし（ブロック１３６）、このタスクが上で説明したように実行されうる。
【００５２】
要求されたコアが使用できない場合（判定ブロック１３４の「いいえ」の線）、ＫＧＣは、要求されたコアが、要求されたタスクよりも優先度の低いタスクを実行しているかどうかを判定しうる（判定ブロック１４８）。優先度は、どのような所望の優先度方式を使用してタスクに割り当ててもよい。優先度方式は、要求されたタスクに関連付けられていても（例えば、ある種類のタスクが、他の種類のタスクよりも優先度が高いなど）、または要求を発生させたユーザプログラムの相対的な優先度に基づいて割り当てられてもよい。優先度の低いタスクがコア９４Ａ〜９４Ｍで実行されている場合（判定ブロック１４８の「はい」の線）、ＫＧＣは、優先度の高いタスクを実行するために、優先度の低いタスクを剥奪しうる（ブロック１５０）。ＫＧＣは、剥奪したタスクの状態が、他のユーザプログラムから隠される（開始したユーザプログラム自身からさえも隠される）ように、この状態を安全な記憶域に安全に転送しうる（ブロック１５２）。ＫＧＣは、要求を実行するようにコアをプログラムし（ブロック１３６）、このタスクが上で説明したように実行されうる。優先度の低いタスクを実行しているコアがない場合（判定ブロック１４８の「いいえ」の線）、ＫＧＣは、安全な記憶域にタスク要求状態を記憶し、コアが使用可能になるまで待機する（ブロック１５４）。別の実施形態では、ＫＧＣが、必要に応じて要求されたコアをエミュレートしてもよい。
【００５３】
考えられるＫＧＣの別の用途は、ｘ８６（あるいは、ＩＡ−３２、ＡＭＤ−６４（登録商標）などの拡張）命令セットに関連する。ｘ８６命令セットは、４レベルの特権方式によって特権を制御している。最も特権の高いレベルは、リング０と呼ばれ、多くの場合、オペレーティングシステムのカーネル動作のために必要となる。しかし、リング０はパーティション化されていない。リング０で動作しているどのタスクも、そのタスクがアクセスすべきではない状態を含め、マシンのどの状態にも影響する（effect）ことができる。このようなリング０の構成により、不正なコードが、関係のない操作に問題を引き起こすことが可能となり、セキュリティ上の懸念となっている。
【００５４】
ＫＧＣは、リング０をパーティション化することにより、この影響に対処するために使用することができる。図１１は、パーティションを示し、円１００で示されるリング０と、パーティションを示す線１０２Ａ〜１０２Ｃが図示されている。あるパーティションに属するコードが、そのパーティションにはないリソースにアクセスしようとした場合、ＫＧＣ１０４は、そのアクセスを傍受して、このアクセスが許されるかどうかを判定しうる。例えば、パーティションから別のパーティションへのアクセスが、破線矢印１０６で示される。アクセスが許可される代わりに、アクセスがＫＧＣ１０４に転送されうる（実線矢印１０８）。アクセスが許可される場合、ＫＧＣ１０４は、要求側に代わってアクセスを実行しうる（実線矢印１１０）。このようにして、パーティションを相互に分離することができる。パーティションに悪意のあるコードが侵入した場合、そのパーティションは影響を受けるが、ほかのパーティションへの影響を低く抑えることができ、場合によっては影響をなくすことができる。
【００５５】
図１１に示すパーティション化は、さまざまな方法で実装することができる。例えば、異なるメモリ範囲を異なるパーティションに割り当て、パーティションが、プログラマブルマップ７２にプログラムされてもよい。実行中のコードのパーティションの外にあるメモリアドレスが生成されると、ＫＧＣへの遷移が発生してもよい。同様に、構成／制御レジスタ状態をパーティションに分割し、許容されないレジスタをオペランドとして検出するようにプログラマブルマップ７２をプログラムすることによって、現在のパーティションに基づいて、構成／制御レジスタへのアクセスを制限してもよい。
【００５６】
ＫＧＣを使用して、新しいアーキテクチャの機能を実装することもできるが、場合によっては、ＫＧＣ単独では、ハードウェア実装が提供する所望のパフォーマンスを提供できないこともある。一実施形態では、ＫＧＣは、プロセッサと共に集積回路に含まれるプログラマブルロジックユニットへのインタフェースを管理しうる。ＫＧＣに割り当てられる機能の少なくとも一部が、プログラマブルロジックユニット内に実装され、このため、「ハードウェア様」の高速で実行されうる。残りの機能はＫＧＣ自体に実装されうる。
【００５７】
図１２は、プロセッサ１０（ユーザ状態記憶域６８とＫＧＣ状態記憶域７０を備える）と、プログラマブルロジックユニット１２２とを有する集積回路１２０の一実施形態のブロック図である。また、図１２には、ＫＧＣと、少なくとも１つのプログラマブルロジック構成１２４Ａとを記憶しているＫＧＣソース１２も図示されている。場合によっては、プログラマブルロジック構成１２４Ｂなどの、追加のプログラマブルロジック構成も記憶されている。
【００５８】
プログラムインタフェース（図１２の「プログラム」）を使用して、プログラマブルロジック構成がプログラマブルロジックユニット１２２にロードされうる。プログラムインタフェースは、集積回路１２０の外部入出力から切り離されており、このため、プロセッサ１０で実行中のＫＧＣのみがプログラムすることができる。ＫＧＣは、ＫＧＣソース１２から構成１２４Ａまたは１２４Ｂを読み出し、プログラムインタフェースを介してプログラマブルロジックユニット１２２にこの構成を書き込みうる。
【００５９】
一部の実装では、プログラマブルロジックユニット１２２の構成が起動時に選択されてもよく、ＫＧＣは、起動時に構成をプログラマブルロジックユニット１２２にロードし、その後もこの構成を保持しうる。別の実装では、ＫＧＣソース１２から別の構成を選択して、プログラマブルロジックユニット１２２を再プログラムすることにより、プログラマブルロジックユニット１２２の構成が動作中に変更されてもよい。このような実装では、ＫＧＣによって実行中のタスクに基づいて、プログラマブルロジックユニット１２２の動作が変わりうる。例えば、プログラマブルロジックユニット１２２を利用する２つの演算量の多いタスクがＫＧＣに含まれる場合、頻繁に使用されるタスクの構成が、プログラマブルロジックユニット１２２にロードされうる。（プログラマブルロジックユニット１２２にロードされていない）他のタスクが要求されると、プログラマブルロジックユニット１２２が変更されうる。あるいは、他のタスクが頻繁に要求される場合にのみ、プログラマブルロジックユニット１２２が変更されてもよく、プログラマブルロジックユニット１２２の構成を変更すべきと判定されるまで、ＫＧＣはソフトウェア内でそのタスクを実行しうる。
【００６０】
プログラマブルロジックユニットは、入力（図１２の［０：ｎ］）を受け取り、出力（図１２のＯｕｔ［０：ｍ］）を生成しうる。入力はＫＧＣ状態記憶域７０から供給され、出力がＫＧＣ状態記憶域７０で受信され、ＫＧＣがプログラマブルロジックユニット１２２を動作させ、プログラマブルロジックユニット１２２から結果を受け取るメカニズムが提供される。例えば、入力と出力が、ＫＧＣ状態記憶域７０内のレジスタのビットにマップされうる。
【００６１】
プログラマブルロジックユニット１２２は、どのような種類の非永続的なプログラマブルロジックを有してもよい。例えば、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）またはコンプレックス合プログラマブルロジックデバイス（ＣＰＬＤ）技術を使用することができる。フラッシュ、消去可能リードオンリーメモリまたはランダムアクセスメモリ技術が、プログラマブルロジックユニット１２２に使用されてもよい。
【００６２】
上記の開示を完全に理解できれば、数多くの変形例および変更例が当業者にとって明らかであろう。下記の特許請求の範囲は、このような変形例および変更例を全て包含するものと解釈されることが意図される。
【産業上の利用可能性】
【００６３】
本発明は、一般に、プロセッサおよびコンピュータシステムに利用可能である。
【図１】
0005410445.tif 000002
【図２】
0005410445.tif 000003
【図３】
0005410445.tif 000004
【図４】
0005410445.tif 000005
【図５】
0005410445.tif 000006
【図６】
0005410445.tif 000007
【図７】
0005410445.tif 000008
【図８】
0005410445.tif 000009
【図９】
0005410445.tif 000010
【図１０】
0005410445.tif 000011
【図１１】
0005410445.tif 000012
【図１２】
0005410445.tif 000013