(57)【要約】      （修正有）【課題】アプリケーションの実行中にＦＰＧＡを動的にプログラムする方法および装置を提供すること。【解決手段】プロセッサに結合されたコプロセッサ中のＦＰＧＡを動的にプログラムする方法は、プロセッサがアプリケーションの実行を開始させるステップと、コプロセッサが、アプリケーションのための関数の実行を求める命令をプロセッサから受け取るステップと、コプロセッサ中のＦＰＧＡが関数用のロジックでプログラムされていないと判定するステップと、関数用のコンフィギュレーション・ビット・ストリームをフェッチするステップと、ＦＰＧＡをコンフィギュレーション・ビット・ストリームでプログラムするステップとを含む。【効果】ＦＰＧＡは、アプリケーション実行中に動的にプログラム可能である。アプリケーションは、ＦＰＧＡによって提供されるハードウェアによる加速および資源共用の利点をより頻繁に利用することができる。【選択図】図２
2006215592.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサに結合されたコプロセッサ中のＦＰＧＡを動的にプログラムする方法であって、
（ａ）前記プロセッサがアプリケーションの実行を開始させるステップと、
（ｂ）前記コプロセッサが前記アプリケーションのための関数の実行を求める命令を前記プロセッサから受け取るステップと、
（ｃ）前記コプロセッサ中の前記ＦＰＧＡが前記関数用のロジックでプログラムされていないと判定するステップと、
（ｄ）前記関数用のコンフィギュレーション・ビット・ストリームをフェッチするステップと、
（ｅ）前記ＦＰＧＡを前記コンフィギュレーション・ビット・ストリームでプログラムするステップと
を含む方法。
【請求項２】
前記受け取るステップ（ｂ）が、
（ｂ１）前記プロセッサと前記コプロセッサの間のＡＰＵインターフェースが前記命令を受け取るステップを含む、請求項１に記載の方法。
【請求項３】
前記判定するステップ（ｃ）が、
（ｃ１）前記ＡＰＵインターフェースが誤ったコミットを発行したと判定するステップを含む、請求項２に記載の方法。
【請求項４】
前記フェッチするステップ（ｄ）が、
（ｄ１）前記プロセッサが例外処理サブルーチンを開始させるステップと、
（ｄ２）前記プロセッサの前記例外処理サブルーチンが前記関数用の前記コンフィギュレーション・ビット・ストリームをフェッチするステップと
を含む、請求項１に記載の方法。
【請求項５】
前記開始させるステップ（ｄ１）が、
（ｄ１ｉ）前記コプロセッサが誤ったコミットを発行したと判定するステップと、
（ｄ１ｉｉ）前記プロセッサが、前記誤ったコミットに応答して前記例外処理サブルーチンに分岐するステップと
を含む、請求項４に記載の方法。
【請求項６】
前記フェッチするステップ（ｄ２）が、
（ｄ２ｉ）前記例外処理サブルーチンが関数識別子をデコードするステップと、
（ｄ２ｉｉ）前記関数の所有権を要求し、前記所有権を譲り受けるステップと、
（ｄ２ｉｉｉ）メモリから前記関数用の前記コンフィギュレーション・ビット・ストリームをフェッチするステップと、
（ｄ２ｉｖ）前記コンフィギュレーション・ビット・ストリームの例外タイプおよびコプロセッサ命令タイプを識別するステップと、
（ｄ２ｖ）前記コンフィギュレーション・ビット・ストリームを前記コプロセッサに送るステップと
を含む、請求項４に記載の方法。
【請求項７】
前記プログラムするステップ（ｅ）が、
（ｅ１）前記プロセッサの前記例外処理サブルーチンが一連のロードおよびストア命令を実行して、前記ＦＰＧＡを前記コンフィギュレーション・ビット・ストリームでプログラムするステップを含む、請求項１に記載の方法。
【請求項８】
（ｆ）前記コプロセッサが前記命令の再発行版を受け取るステップをさらに含む、請求項１に記載の方法。
【請求項９】
プロセッサに結合されたコプロセッサ中のＦＰＧＡを動的にプログラムする方法であって、
（ａ）前記プロセッサがアプリケーションの実行を開始させるステップと、
（ｂ）前記コプロセッサが前記アプリケーションのための関数の実行を求める命令を前記プロセッサから受け取るステップと、
（ｃ）前記コプロセッサ中の前記ＦＰＧＡが前記関数用のロジックでプログラムされていないとき、誤ったコミットを発行するステップと、
（ｄ）前記プロセッサが、前記誤ったコミットに応答して例外処理サブルーチンを開始させるステップと、
（ｅ）前記例外処理サブルーチンが前記関数用のコンフィギュレーション・ビット・ストリームをフェッチするステップと、
（ｆ）前記例外処理サブルーチンが一連のロードおよびストア命令を実行して、前記ＦＰＧＡを前記コンフィギュレーション・ビット・ストリームでプログラムするステップと
を含む方法。
【請求項１０】
プロセッサに結合されたコプロセッサ中のＦＰＧＡを動的にプログラムするためのプログラム命令を有するコンピュータ読取り可能な媒体であって、
（ａ）前記プロセッサがアプリケーションの実行を開始させるための命令と、
（ｂ）前記コプロセッサが前記アプリケーションのための関数の実行を求める命令を前記プロセッサから受け取るための命令と、
（ｃ）前記コプロセッサ中の前記ＦＰＧＡが前記関数用のロジックでプログラムされていないと判定するための命令と、
（ｄ）前記関数用のコンフィギュレーション・ビット・ストリームをフェッチするための命令と、
（ｅ）前記ＦＰＧＡを前記コンフィギュレーション・ビット・ストリームでプログラムするための命令と
を含む、媒体。
【請求項１１】
前記発行するための命令（ｂ）が、
（ｂ１）前記プロセッサと前記コプロセッサの間のＡＰＵインターフェースが前記命令を受け取るための命令を含む、請求項１０に記載の媒体。
【請求項１２】
前記判定するための命令（ｃ）が、
（ｃ１）前記ＡＰＵインターフェースが誤ったコミットを発行したと判定するための命令を含む、請求項１１に記載の媒体。
【請求項１３】
前記フェッチするための命令（ｄ）が、
（ｄ１）前記プロセッサが例外処理サブルーチンを開始させるための命令と、
（ｄ２）前記プロセッサの前記例外処理サブルーチンが前記関数用の前記コンフィギュレーション・ビット・ストリームをフェッチするための命令と
を含む、請求項１０に記載の媒体。
【請求項１４】
前記開始するための命令（ｄ１）が、
（ｄ１ｉ）前記コプロセッサが誤ったコミットを発行したと判定するための命令と、
（ｄ１ｉｉ）前記プロセッサが、前記誤ったコミットに応答して前記例外処理サブルーチンに分岐するための命令と
を含む、請求項１３に記載の媒体。
【請求項１５】
前記フェッチするための命令（ｄ２）が、
（ｄ２ｉ）前記例外処理サブルーチンが関数識別子をデコードするための命令と、
（ｄ２ｉｉ）前記関数の所有権を要求し、前記所有権を譲り受けるための命令と、
（ｄ２ｉｉｉ）メモリから前記関数用の前記コンフィギュレーション・ビット・ストリームをフェッチするための命令と、
（ｄ２ｉｖ）前記コンフィギュレーション・ビット・ストリームのために例外タイプおよびコプロセッサ命令タイプを識別するための命令と、
（ｄ２ｖ）前記コンフィギュレーション・ビット・ストリームを前記コプロセッサに送るための命令と
を含む、請求項１３に記載の媒体。
【請求項１６】
前記プログラムするための命令（ｅ）が、
（ｅ１）前記プロセッサの前記例外処理サブルーチンが一連のロードおよびストア命令を実行して、前記ＦＰＧＡを前記コンフィギュレーション・ビット・ストリームでプログラムするための命令を含む、請求項１０に記載の媒体。
【請求項１７】
（ｆ）前記コプロセッサが前記命令の再発行版を受け取るための命令をさらに含む、請求項１０に記載の媒体。
【請求項１８】
プロセッサに結合されたコプロセッサ中のＦＰＧＡを動的にプログラムするためのプログラム命令を有するコンピュータ読取り可能な媒体であって、
前記プログラム命令が、
（ａ）前記プロセッサがアプリケーションの実行を開始させるための命令と、
（ｂ）前記コプロセッサが前記アプリケーションのための関数の実行を求める命令を前記プロセッサから受け取るための命令と、
（ｃ）前記コプロセッサ中の前記ＦＰＧＡが前記関数用のロジックでプログラムされていないとき、誤ったコミットを発行するための命令と、
（ｄ）前記プロセッサが前記誤ったコミットに応答して例外処理サブルーチンを開始させるための命令と、
（ｅ）前記例外処理サブルーチンが前記関数用のコンフィギュレーション・ビット・ストリームをフェッチするための命令と、
（ｆ）前記例外処理サブルーチンが一連のロードおよびストア命令を実行して、前記ＦＰＧＡを前記コンフィギュレーション・ビット・ストリームでプログラムするための命令と
を含む、媒体。
【請求項１９】
アプリケーションを実行するためのプロセッサと、
前記プロセッサに結合され、ＦＰＧＡを含むコプロセッサと、
前記プロセッサおよび前記コプロセッサに結合され、少なくとも１つの関数用のコンフィギュレーション・ビット・ストリームを含むメモリとを含むシステムであって、
前記プロセッサが、前記アプリケーションの実行中に前記アプリケーションのための前記関数の実行を求める命令を前記コプロセッサに発行し、
前記コプロセッサが、前記ＦＰＧＡが前記関数用のロジックでプログラムされていないと判定し、
前記少なくとも１つの前記関数用のコンフィギュレーション・ビット・ストリームをフェッチし、
前記ＦＰＧＡを前記少なくとも１つのコンフィギュレーション・ビット・ストリームでプログラムする、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサに関し、より詳しくは、マイクロプロセッサに関連するコプロセッサの構成に関する。
【背景技術】
【０００２】
ＡＳＩＣ（Application Specific IntegratedCircuit、特定用途向けＩＣ）チップまたはシステム・オン・チップあるいはその両方にＦＰＧＡ（Field Programmable Gate Array、書換え可能ゲート・アレイ）を使用して、命令レベルのハードウェアによる加速および資源共用をもたらすことが、当技術分野で知られている。図１に、ＦＰＧＡを利用した従来の装置を示す。この装置は、メイン・プロセッサ１０２、コプロセッサ１０４、およびインターナショナル・ビジネス・マシーンズ・コーポレーション（商標）によって開発されたＰＬＢ（ProcessorLocal Bus、プロセッサ・ローカル・バス）１０６などのローカル・バスを含む、ＡＳＩＣ、システム・オン・チップまたは何らかの他のチップとすることができる。アーム社（ＡＲＭ  Ｌｔｄ．）（商標）によって開発されたＡＭＢＡ（AdvancedMicro-Controller Bus Architecture、高度マイクロコントローラ・バス・アーキテクチャ）など他のローカル・バスを使用することもできる。コプロセッサ１０４は、ＦＰＧＡセル１１０および複数のインターフェースを含む。このインターフェースには、ＦＰＧＡ１１０をプログラムするプログラミング・インターフェース１０８、ＰＬＢインターフェース１１２、およびＡＰＵ（AuxiliaryProcessing Unit、補助処理装置）インターフェース１１４が含まれる。ＡＰＵインターフェース１１４は、特別のハードウェアにより加速される関数が命令フロー・レベルにおいてプロセッサ１０２と密結合することを可能にする。緩結合オペレーションでは、プロセッサ１０２は、ＰＬＢ１０６を介してコプロセッサ１０４と通信する。プロセッサ１０２内部のフェッチされた命令は、ＡＰＵインターフェースを介してコプロセッサ１０４と同時に共用される。コプロセッサ１０４が、その実行ユニットに対して有効な命令またはオペレーション・コード（「オペコード」）に出会ったとき、コプロセッサ１０４はプロセッサ１０２にその旨を通知する。次いで、コプロセッサ１０４は、命令とともに供給されたオペランドに対して要求された関数を実行し、ＡＰＵインターフェース１１４を介してプロセッサ１０２にその結果を戻す。
【０００３】
従来、ＦＰＧＡ１１０内部のロジックは、プロセッサ１０２によって供給されるオペランドに対して特殊な関数を実行するようにシステム開発者によってプログラムされる。コプロセッサ命令に対して複数のオペレーションを提供するために、複数の関数をＦＰＧＡ１１０内部でビット・マッピングすることができる。通常、このプログラミングは、プロセッサ１０２が実行するアプリケーションのセットアップ中またはチップ初期化中に実施される。しかし、アプリケーション実行中にアプリケーションがＦＰＧＡ中にプログラムされていない関数を要求した場合は、たとえ、要求された関数がＦＰＧＡ１１０をプログラムするために利用できる関数ライブラリ内に存在していたとしても、アプリケーションは、コプロセッサ１０４によって提供されるハードウェアによる加速または資源共用を利用できない。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
したがって、ＦＰＧＡ（Field Programmable Gate Array）を動的にプログラムする方法および装置が必要である。この方法および装置は、アプリケーション実行中にＦＰＧＡをプログラムまたは再プログラムすることを可能にすべきである。本発明は、このような必要に対処する。
【課題を解決するための手段】
【０００５】
プロセッサに結合されたコプロセッサ中のＦＰＧＡを動的にプログラムする方法は、プロセッサがアプリケーションの実行を開始させるステップと、コプロセッサがアプリケーションのための関数の実行を求める命令をプロセッサから受け取るステップと、コプロセッサ中のＦＰＧＡが関数用のロジックでプログラムされていないと判定するステップと、関数用のコンフィギュレーション・ビット・ストリームをフェッチするステップと、ＦＰＧＡをコンフィギュレーション・ビット・ストリームでプログラムするステップとを含む。このようにして、ＦＰＧＡは、アプリケーション実行中に「オンザフライ」で、すなわち動的にプログラム可能である。ＦＰＧＡによって提供されるハードウェアによる加速および資源共用の利点を、アプリケーションはより頻繁に利用することができる。コプロセッサおよびプロセッサを含むチップ上でのロジックの柔軟性および空間の節約も得られる。
【０００６】
本発明は、ＦＰＧＡを動的にプログラムする方法および装置を提供する。以下の説明は、当分野の技術者が本発明を実施し使用することができるように提示され、特許の応用およびその要件に関して提供されたものである。記載の好ましい実施形態に対する様々な修正は、当分野の技術者には容易に明らかであり、本明細書中の一般的原理は、他の諸実施形態にも適用することができる。したがって、本発明は、ここに示された実施形態に限定されるべきでなく、本明細書中に記載の原理および機能に一致する最も広い範囲で認められるものとする。
【発明を実施するための最良の形態】
【０００７】
本発明の機能のより具体的な説明については、図２から図７を以下の議論と併せ参照されたい。
【０００８】
図２に、本発明による、ＦＰＧＡを動的にプログラムする装置の好ましい実施形態を示す。この装置は、メイン・プロセッサ２０２、コプロセッサ２０４、およびローカル・バスとしてのＰＬＢ（Processor Local Bus）２０６を含む。他のタイプのローカル・バスを使用することもできる。プロセッサ２０２は、例外処理サブルーチン２２２を含む。これについては下記でさらに説明する。コプロセッサ２０４は、動的にプログラム可能なＦＰＧＡ２１０、このＦＰＧＡ２１０をプログラムするためのプログラミング・インターフェース２０８、ＰＬＢインターフェース２１２、およびＡＰＵインターフェース２１４を含む。この装置はさらに、コンフィギュレーション・ビット・ストリーム２２０を格納するためのメモリ２１６を含む。このコンフィギュレーション・ビット・ストリーム２２０は、プロセッサ２０２が実行するアプリケーションが要求することのできる様々な関数用のものである。メモリ２１６はプロセッサ２０２およびコプロセッサ２０４とともにチップ上に組み込むことができ、またチップに外付けすることもできる。本発明によれば、プロセッサ２０２がアプリケーションを実行中に、アプリケーションの要求した関数がＦＰＧＡ２１０中にプログラムされていない場合、その関数用のコンフィギュレーション・ビット・ストリームをメモリ２１６からフェッチし、ＰＬＢ２０６に結合されたプログラミング・チャネル２１８を介してプログラミング・インターフェース２０８に送ることができる。次いで、ＦＰＧＡ２１０は、フェッチされたコンフィギュレーション・ビット・ストリームでプログラムされる。プログラムされた後、コプロセッサ２０４がアプリケーションの要求した関数を実行することができる。このようにして、ＦＰＧＡ２１０は、アプリケーション実行中に「オンザフライ」で、すなわち動的にプログラム可能である。
【０００９】
図３は、本発明による、ＦＰＧＡを動的にプログラムする方法の好ましい実施形態を示すフローチャートである。まず、ステップ３０２で、プロセッサ２０２によるアプリケーションの実行が開始される。次に、ステップ３０４で、コプロセッサ２０４がアプリケーションのための関数の実行を求める命令をプロセッサ２０２から受け取る。好ましい実施形態では、この命令は、コプロセッサ２０４のＡＰＵインターフェース２１４に送られる。次に、ステップ３０６で、コプロセッサ２０４のＦＰＧＡ２１０は、要求された関数用のロジックでプログラムされていないと判定される。好ましい実施形態では、ＦＰＧＡ２１０が関数でプログラムされていないときは、ＡＰＵインターフェース２１４がエラーを返す。次いで、ステップ３０８で、プロセッサ２０２がメモリ２１６からその関数用のコンフィギュレーション・ビット・ストリーム２２０をフェッチする。次いで、ステップ３１０で、ＦＰＧＡ２１０がそのコンフィギュレーション・ビット・ストリーム２２０でプログラムされる。
【００１０】
好ましい実施形態においては、プロセッサ２０２がＡＰＵインターフェース２１４からエラーを受け取ったとき、プロセッサ２０２が例外処理サブルーチン２２２を開始させる。この例外処理サブルーチン２２２では、メモリ２１６から関数用のコンフィギュレーション・ビット・ストリーム２２０をフェッチする。次いで、そのビット・ストリーム２２０がプログラミング・チャネル２１８を介してプログラミング・インターフェース２０８に送られる。好ましい実施形態においては、プログラミング・チャネル２１８は、ダイレクト・メモリ・アクセス（ＤＭＡ）チャネルである。プロセッサ２０２の例外処理サブルーチン２２２は、要求された関数用のコンフィギュレーション・ビット・ストリーム２２０が格納されているメモリ２１６中の記憶位置をＤＭＡチャネルに指し示す。次いで、ＤＭＡがビット・ストリーム２２０をフェッチし、それをＦＰＧＡ２１０中に書き込む。本発明の精神および範囲から逸脱することなく、他のタイプのプログラミング・チャネルを使用することもできる。たとえば、ＰＬＢ２０６上の入出力（Ｉ／Ｏ）レジスタ・ロジックを使用することができ、これを介してプロセッサ２０２がＦＰＧＡ２１０を直接プログラムすることができる。
【００１１】
図４は、本発明による、動的にプログラム可能なＦＰＧＡを有するコプロセッサの好ましい実施形態を示す。コプロセッサ２０４は、複数のコプロセッサ状態機械（ＣＳＭ１〜ＣＳＭ３）を含む。各コプロセッサ状態機械（ＣＳＭ）が関数型を表し、１つまたは複数のコプロセッサ管理資源（ＣＭＲ１〜ＣＭＲ９）を管理する。コプロセッサ管理資源（ＣＭＲ）が、各コプロセッサ関数用のＦＰＧＡ２１０内部のロジックを表す。このコプロセッサ管理資源は、その対応するＣＳＭによって管理される。ＡＰＵインターフェース２１４が受け取った命令は、命令タイプを記述し、追加の情報またはパラメータを含むことがある。ＡＰＵインターフェース２１４が命令タイプに基づき適切なＣＳＭにその命令を送る。次いで、このＣＳＭが、要求された関数用の適切なＣＭＲを実行させる。ＣＭＲのどれも要求された関数でプログラムされていない場合、ＡＰＵインターフェース２１４がプロセッサ２０２にエラーを返す。上記のように、要求された関数用のコンフィギュレーション・ビット・ストリームがフェッチされ、適切なＣＭＲがそのコンフィギュレーション・ビット・ストリームでプログラムされる。
【００１２】
たとえば、ステップ３０２で、アプリケーションが、特定のイベント・タイマを実行するよう要求する命令をコプロセッサ２０４に発行したと想定する。ＡＰＵインターフェース２１４がその命令を受け取り、イベント・タイマ関数を管理するＣＳＭ１にその命令を送る。ステップ３０６で、ＣＳＭ１は、要求されたイベント・タイマ関数用のロジックがＣＭＲ１〜ＣＭＲ４のいずれの中にもプログラムされていないと判定する。ＡＰＵインターフェース２１４がこのエラーをプロセッサ２０２に返す。次いで、プロセッサ２０２が例外処理サブルーチン２２２を実行させる。例外処理サブルーチン２２２がメモリ２１６から要求されたイベント・タイマ関数用のコンフィギュレーション・ビット・ストリームをフェッチし、このコンフィギュレーション・ビット・ストリームをプログラミング・インターフェース２０８に送る。次いで、ＣＭＲの中の１つが、適切なコンフィギュレーション・ビット・ストリームでプログラムされる。
【００１３】
図５は、本発明による、ＦＰＧＡを動的にプログラムする方法の好ましい実施形態をより詳しく示すフローチャートである。アプリケーション実行中、ステップ５０２で、プロセッサ２０２が命令をフェッチする。ステップ５０４で、この命令がＡＰＵインターフェース２１４に送られる。ステップ５０６で、この命令がコプロセッサ２０４向けである場合、ＡＰＵインターフェース２１４がコミットを発行する。そうでない場合は、ステップ５０８で、ＡＰＵインターフェース２１４がプロセッサ・パイプライン上の次の命令を処理する。ＡＰＵインターフェース２１４がコミットする場合は、ＡＰＵインターフェース２１４が関数を実行しようと試みる。その関数がＦＰＧＡ２１０中にプログラムされている場合、ステップ５１６で、ＦＰＧＡがその関数を実行する。ステップ５１８で、コプロセッサ２０４が直ちに応答して結果レジスタ中に値を入れることができる場合、ステップ５２２でその結果を返し、ステップ５２４で、命令が完了する。結果を直ちに返すことができない場合には、関数がその実行を完了するまでにもっとクロック・サイクルを必要としており、ステップ５２０で、プロセッサ・パイプラインが結果を待つために保留にされる。
【００１４】
関数がＦＰＧＡ２１０中にプログラムされていない場合は、ステップ５１０で、ＡＰＵインターフェースのコミットは、誤ったコミットである。誤ったコミットが返されると、ステップ５１２で、プロセッサ２０２が例外処理サブルーチン２２２を開始させる。次いで、ステップ５１４で、例外処理サブルーチン２２２がＦＰＧＡ２１０を要求された関数でプログラムする。プログラムされた後、ステップ５２６で、プロセッサ２０２が元の命令を再発行する。
【００１５】
図６は、本発明による、ＦＰＧＡを所望の関数でプログラムするステップをより詳しく示すフローチャートである。関数がＦＰＧＡ２１０中にプログラムされていない場合、ステップ６０２で、コプロセッサ２０４、より具体的に言うとＡＰＵインターフェース２１４が結果レジスタ中に例外コードを入れる。ステップ６０４で、プロセッサ２０２が例外コードに応答して例外処理サブルーチン２２２に分岐する。ステップ６０６で、例外処理サブルーチン２２２が渡された関数識別子をデコードする。次いで、ステップ６０８で、例外処理サブルーチン２２２が、ＰＬＢ２０６を介して必要とされる関数の所有権を要求し、プログラミング・チャネル２１８からその所有権を授与される。次いで、ステップ６１０で、プロセッサ２０２が関数用のコンフィギュレーション・ビット・ストリーム２２０をメモリ２１６からフェッチする。ステップ６１２で、例外処理サブルーチン２２２が例外タイプおよびコプロセッサ命令タイプを識別する。次いで、ステップ６１４で、例外処理サブルーチン２２２がプログラミング・チャネル２１８およびプログラミング・インターフェース２０８を介して一連のロード／ストア命令を実行し、それによってＦＰＧＡ２１０をコンフィギュレーション・ビット・ストリームでプログラムする。次いで、ステップ６１６で、プロセッサ２０２が命令を再発行する。
【００１６】
上記ならびに図５および図６に示したように、ＦＰＧＡの動的なプログラミングの細部は、ソフトウェアの形で処理することができるが、本発明の精神および範囲から逸脱することなく、この動的なプログラミングの実施をハードウェアの形で行うこともできる。
【００１７】
図７は、本発明による、ＦＰＧＡを動的にプログラムする装置の第２の好ましい実施形態を示す。この実施形態では、複数のプロセッサ７０２，７０８および７１２が、プログラム・メモリ（図示せず）およびコプロセッサ７０４、７１０、７１４などのシステム資源を共用する。各コプロセッサ７０４、７１０および７１４は、共用資源エージェント（Shared Resource Agent）として働き、それぞれＳＲＩ（Shared Resource Interface、共用資源インターフェース）７０６，７１１および７１６を介してＰＬＢ２０６に接続される。ＰＬＢ２０６にＳＲＭ（SharedResource Manager、共用資源マネージャ）７１８が結合される。ＳＲＭ７１８は、所与の資源を修正する権利を一時に１つのプロセッサのみに確実に与えることによって、共用資源間でデータ整合性が維持されることを保証する。各プロセッサ７０２，７０８および７１２ならびに各コプロセッサ７０４、７１０および７１４は、それぞれそれらのＳＲＩ７０６，７１１および７１６を介して共用システム資源に別々にアクセスでき、それらのアクセスはＳＲＭ７１８によって制御される。各コプロセッサ７０４，７１０および７１４中でのＦＰＧＡのプログラミングは、上記と同じ方法で実施される。ただし、ＳＲＭ７１８はプログラミング・チャネル２１８として動作することができ、プロセッサ７０２、７０８および７１２によってフェッチされる命令をコプロセッサ７０４，７１０および７１４のうちのどのコプロセッサのＦＰＧＡにも送ることができる。ＳＲＭ７１８は、フェッチされたコンフィギュレーション・ビット・ストリーム２２０をＦＰＧＡ２１０中にプログラムすることができる。あるいは、プロセッサが資源をＳＲＭ７１８に要求することもできる。ＳＲＭ７１８が資源をそのプロセッサに譲渡後、プロセッサ２０２がＦＰＧＡをプログラムする。
【００１８】
要求された関数をコプロセッサ中にロードしなければならないが、新しい関数をプログラムするのに十分な未使用のロジック資源がＦＰＧＡ中にないとき、別の例外条件が起こり得る。この状況では、最小使用頻度（Least Recently Used、ＬＲＵ）アルゴリズムをコプロセッサ中で、またはプロセッサ上で走るスレッドとして実装することができる。ＬＲＵ関数マネージャは、コプロセッサ中にロードされる関数を常に把握し、所与の期間中それぞれがどれくらいの頻度で使用されたかを追跡する。新しい関数をロードするために古い関数のどれをディスエーブルしてロジック資源を空けるか決定するために、このＬＲＵ関数マネージャに照会することができる。このようにして、コプロセッサは、プロセッサのための関数キャッシュとして動作することができる。この関数ライブラリは、ＳＲＭ７１８によって管理される。プロセッサによる例外処理は、ＬＲＵ関数マネージャのオペレーションに起因する遅延が増す点を除き、上記と同じである。
【００１９】
ＦＰＧＡを動的にプログラムする方法および装置を開示した。この方法は、プロセッサがアプリケーションの実行を開始させるステップと、コプロセッサが、アプリケーションのための関数の実行を求める命令をプロセッサから受け取るステップと、コプロセッサ中のＦＰＧＡが関数用のロジックでプログラムされていないと判定するステップと、関数用のコンフィギュレーション・ビット・ストリームをフェッチするステップと、ＦＰＧＡをコンフィギュレーション・ビット・ストリームでプログラムするステップとを含む。このようにして、ＦＰＧＡは、アプリケーション実行中に「オンザフライ」で、すなわち動的にプログラム可能である。コプロセッサおよびプロセッサを含むチップ上でのロジックの柔軟性および空間の節約も得られる。
【００２０】
ここに示した実施形態に則して本発明を説明したが、当分野の技術者は、この実施形態に対する様々な諸変形形態があり得、それらの変形形態が本発明の精神および範囲に含まれることを容易に理解されよう。したがって、当分野の技術者は、添付の特許請求の範囲で定義される精神および範囲を逸脱することなく多くの修正を行うことができる。
【図面の簡単な説明】
【００２１】
【図１】ＦＰＧＡを利用した従来の装置を示す図である。
【図２】本発明による、ＦＰＧＡを動的にプログラムする装置の好ましい実施形態を示す図である。
【図３】本発明による、ＦＰＧＡを動的にプログラムする方法の好ましい実施形態を示すフローチャートである。
【図４】本発明による、動的にプログラム可能なＦＰＧＡを有するコプロセッサの好ましい実施形態を示す図である。
【図５】本発明による、ＦＰＧＡを動的にプログラムする方法の好ましい実施形態をより詳しく示すフローチャートである。
【図６】本発明による、ＦＰＧＡを所望の関数でプログラムするステップをより詳しく示すフローチャートである。
【図７】本発明による、ＦＰＧＡを動的にプログラムする装置の第２の好ましい実施形態を示す図である。
【符号の説明】
【００２２】
２０２  メイン・プロセッサ
２０４  コプロセッサ
２０６  ＰＬＢ（プロセッサ・ローカル・バス）
２０８  プログラミング・インターフェース
２１０  ＦＰＧＡ（書換え可能ゲート・アレイ）
２１２  ＰＬＢインターフェース
２１４  ＡＰＵ（補助処理装置）インターフェース
２１６  メモリ
２１８  プログラミング・チャネル
２２０  コンフィギュレーション・ビット・ストリーム
２２２  例外処理サブルーチン
７０２  プロセッサ
７０４  コプロセッサ
７０６  ＳＲＩ（共用資源インターフェース）
７０８  プロセッサ
７１０  コプロセッサ
７１１  ＳＲＩ（共用資源インターフェース）
７１２  プロセッサ
７１４  コプロセッサ
７１６  ＳＲＩ（共用資源インターフェース）
７１８  ＳＲＭ（共用資源マネージャ）
【図１】
2006215592.tif 000003
【図２】
2006215592.tif 000004
【図３】
2006215592.tif 000005
【図４】
2006215592.tif 000006
【図５】
2006215592.tif 000007
【図６】
2006215592.tif 000008
【図７】
2006215592.tif 000009