(57)【要約】  集積回路のための階層型部分的再構成は、コンピュータハードウェアを用いて、回路設計の第１の部分的再構成モジュールを第１の部分的再構成コンテナに変換すること（４１５）を含み、当該回路設計が配置およびルーティングされ、当該階層型部分的再構成はさらに、コンピュータハードウェアを用いて、最初は空である第１の複数の部分的再構成モジュールを含む第１のネットリストを第１の部分的再構成コンテナにロードすること（４２０）と、コンピュータハードウェアを用いて、第１の複数の部分的再構成モジュールの各々内にさらなるネットリストを含めること（４３５）とを含む。コンピュータハードウェアを用いて、第１の部分的再構成コンテナが実装され（４４０）て、第１の複数の部分的再構成モジュールが第１の部分的再構成コンテナ内に実装される。
2021530809.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
コンピュータハードウェアを用いて、回路設計の第１の部分的再構成モジュールを第１の部分的再構成コンテナに変換するステップを含み、前記回路設計が配置およびルーティングされ、前記方法はさらに、
前記コンピュータハードウェアを用いて、最初は空である第１の複数の部分的再構成モジュールを含む第１のネットリストを前記第１の部分的再構成コンテナにロードするステップと、
前記コンピュータハードウェアを用いて、前記第１の複数の部分的再構成モジュールの各々内にさらなるネットリストを含めるステップと、
前記コンピュータハードウェアを用いて、前記第１の部分的再構成コンテナと前記第１の部分的再構成コンテナ内の前記第１の複数の部分的再構成モジュールとを実装するステップとを含む、方法。
【請求項２】
前記第１の複数の部分的再構成モジュールの各々ごとに、第１の部分的再構成モジュールフロアプランを生成するステップをさらに含み、
各々の第１の部分的再構成モジュールフロアプランは、前記第１の部分的再構成コンテナのフロアプラン内に含まれているとともに、前記第１の複数の部分的再構成モジュールのそれぞれを実装するために用いられる、請求項１に記載の方法。
【請求項３】
前記第１の部分的再構成コンテナを実装するステップは、
前記第１の複数の部分的再構成モジュールの各々の回路要素が、それぞれ対応する第１の部分的再構成モジュールフロアプランによって指定される境界内に位置するように、前記第１の部分的再構成コンテナと前記第１の複数の部分的再構成モジュールの各々とを配置およびルーティングするステップを含む、請求項２に記載の方法。
【請求項４】
前記変換するステップは、
前記第１のネットリストをロードするステップの前に前記第１の部分的再構成モジュールの内容を空にするステップを含む、請求項１から３のいずれか１項に記載の方法。
【請求項５】
前記第１の複数の部分的再構成モジュールのうち選択された１つの部分的再構成モジュールへの接続のパーティションピンを、前記第１の部分的再構成コンテナの境界から、前記第１の複数の部分的再構成モジュールのうち前記選択された１つの部分的再構成モジュールの境界に移動させるステップをさらに含む、請求項１から４のいずれか１項に記載の方法。
【請求項６】
前記第１の複数の部分的再構成モジュールのための境界を指定するユーザ入力を受信するステップをさらに含む、請求項１から５のいずれか１項に記載の方法。
【請求項７】
前記第１の複数の部分的再構成モジュールのうち少なくとも１つの選択された部分的再構成モジュールについて、前記少なくとも１つの選択された部分的再構成モジュールを第２の部分的再構成コンテナに変換して、前記第２の部分的再構成コンテナ内に第２の複数の部分的再構成モジュールを実装するステップをさらに含む、請求項１から６のいずれか１項に記載の方法。
【請求項８】
集積回路であって、
外部デバイスとのインターフェイスを実装するように構成された第１のプログラマブル回路を含むスタティック領域と、
前記スタティック領域に結合された部分的再構成コンテナ領域とを含み、前記部分的再構成コンテナ領域は、第２のプログラマブル回路を用いて前記スタティック領域へのインターフェイスを実装し、
前記部分的再構成コンテナ領域は第１の複数の部分的再構成領域を含み、前記第１の複数の部分的再構成領域のうち少なくとも１つが前記部分的再構成コンテナ領域に結合される、集積回路。
【請求項９】
前記第１の複数の部分的再構成領域のうち選択された部分的再構成領域内の回路は、前記スタティック領域および前記部分的再構成コンテナ領域が途切れることなく動作し続けている間、前記集積回路の動作中に変更される、請求項８に記載の集積回路。
【請求項１０】
前記第１の複数の部分的再構成領域の各々内における回路は、前記スタティック領域および前記部分的再構成コンテナ領域が途切れることなく動作し続けている間、前記集積回路の動作中に変更される、請求項８または９に記載の集積回路。
【請求項１１】
前記第１の複数の部分的再構成領域の数はユーザ指定である、請求項８から１０のいずれか１項に記載の集積回路。
【請求項１２】
前記第１の複数の部分的再構成領域の複数の境界はユーザ指定である、請求項８から１１のいずれか１項に記載の集積回路。
【請求項１３】
前記部分的再構成コンテナ領域は、第２の複数の部分的再構成領域を含むさらなる部分的再構成コンテナ領域を含む、請求項８から１２のいずれか１項に記載の集積回路。
【請求項１４】
前記第１の複数の部分的再構成領域のうち各々の部分的再構成領域と、前記第２の複数の部分的再構成領域のうち各々の部分的再構成領域とは、独立して再構成可能である、請求項１３に記載の集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
著作物についての権利の留保
本特許文献の開示の一部は著作権保護の対象となる資料を含む。著作権者は、本特許文献または特許開示の何者かによる複写複製が、特許商標庁の特許ファイルまたは記録にある限り、それに対して異議を唱えないが、そうでない場合にはいかなるときもすべての著作権を留保する。
【０００２】
技術分野
本開示は、集積回路（integrated circuit：ＩＣ）に関し、より特定的には、プログラマブルＩＣの部分的再構成に関する。
【背景技術】
【０００３】
背景
プログラマブル集積回路（ＩＣ）は、プログラマブル回路を含む或るタイプのＩＣを指している。プログラマブルＩＣの例としてフィールドプログラマブルゲートアレイ（field programmable gate array：ＦＰＧＡ）がある。ＦＰＧＡは、プログラマブル回路ブロックを含むことを特徴とする。プログラマブル回路ブロックの例には、入出力ブロック（input/output block：ＩＯＢ）、構成可能な論理ブロック（configurable logic block：ＣＬＢ）、専用ランダムアクセスメモリブロック（dedicated random access memory block：ＢＲＡＭ）、乗算器、デジタル信号処理ブロック（digital signal processing block：ＤＳＰ）、プロセッサ、クロックマネージャおよび遅延ロックループ（delay lock loop：ＤＬＬ）が含まれるが、これらに限定されない。回路設計は、プログラマブルＩＣの構成メモリに構成ビットストリームをロードすることによって、プログラマブルＩＣのプログラマブル回路内で物理的に実装され得る。
【０００４】
部分的再構成は、プログラマブルＩＣ内のプログラマブル回路のうち「部分的再構成領域」または「ＰＲ（partial reconfiguration）領域」と称される領域が、部分的構成ビットストリームをプログラマブルＩＣ内にロードすることによって動的に再構成され得るプロセスである。部分的構成ビットストリームは、ＰＲ領域において予め実装されているものとは異なる回路を指定してもよい。部分的構成ビットストリームは、プログラマブル回路のうちＰＲ領域外にある部分のための新しい回路および／または異なる回路を指定しない。プログラマブルＩＣのプログラマブル回路のうち「スタティック回路」または「スタティック領域」と称される他の領域が途切れることなく動作し続けている間、繰り返し、複数の異なる部分的構成ビットストリームが異なる回路（またはアプリケーション）を指定する場合、ＰＲ領域は、部分的再構成によって、たとえば、当該ＰＲ領域のための部分的構成ビットストリームをロードすることによって、変更されてもよい。
【０００５】
ＰＲ領域を備えた回路設計を用いる場合、ＰＲ領域のさまざまな特徴は一定のままである。ＰＲ領域内の回路が部分的再構成技術を用いて時間の経過に応じて変化し得る一方で、ＰＲ領域の境界は変化させなくてもよい。したがって、ＰＲ領域のサイズ、ＰＲ領域の形状、ＰＲ領域の他の回路との接続性およびＰＲ領域の数などの特定の特徴はプログラマブルＩＣ内では変化しないままである。
【発明の概要】
【課題を解決するための手段】
【０００６】
概要
１つ以上の実施形態においては、方法は、コンピュータハードウェアを用いて、回路設計の第１の部分的再構成モジュールを第１の部分的再構成コンテナに変換するステップを含み、ここで回路設計が配置およびルーティングされ、当該方法はさらに、当該コンピュータハードウェアを用いて、最初は空である第１の複数の部分的再構成モジュールを含む第１のネットリストを当該第１の部分的再構成コンテナにロードするステップと、当該コンピュータハードウェアを用いて、当該第１の複数の部分的再構成モジュールの各々内にさらなるネットリストを含めるステップと、当該コンピュータハードウェアを用いて、当該第１の部分的再構成コンテナと当該第１の部分的再構成コンテナ内の当該第１の複数の部分的再構成モジュールとを実装するステップとを含む。
【０００７】
１つ以上の実施形態においては、方法は、第１の部分的ビットストリームによって指定される第１の回路をプログラマブル集積回路のスタティック領域内に実装するステップと、第２の部分的ビットストリームによって指定される第２の回路を当該プログラマブル集積回路の部分的再構成コンテナ領域内に実装するステップと、当該部分的再構成コンテナ領域内に含まれる第１の部分的再構成領域内に第３の回路を実装し、当該部分的再構成コンテナ領域内に含まれる第２の部分的再構成領域内に第４の回路を実装するステップとを含み得る。当該第３の回路は第３の部分的ビットストリームによって指定されており、当該第４の回路は第４の部分的ビットストリームによって指定されている。
【０００８】
１つ以上の実施形態においては、集積回路は、外部デバイスとのインターフェイスを実装するように構成された第１のプログラマブル回路を含むスタティック領域と、当該スタティック領域に結合された部分的再構成コンテナ領域とを含み得る。当該部分的再構成コンテナ領域は第２のプログラマブル回路を用いて当該スタティック領域へのインターフェイスを実装する。当該部分的再構成コンテナ領域は第１の複数の部分的再構成領域を含み得る。当該第１の複数の部分的再構成領域のうち少なくとも１つは当該部分的再構成コンテナ領域に結合されている。
【０００９】
この概要の段落は、単に、特定の概念を紹介するために記載されているに過ぎず、特許請求される主題のいずれかの重要な特徴または本質的な特徴を識別するために記載されるものではない。本発明の構成の他の特徴は、添付の図面および以下の詳細な説明から明らかになるだろう。
【００１０】
図面の簡単な説明
本発明の構成が一例として添付の図面に示されている。しかしながら、添付の図面は、本発明の構成を図示される特定の実装例のみに限定するものと解釈されるべきではない。以下の詳細な説明を検討するとともに添付の図面を参照すると、さまざまな局面および利点が明らかになるだろう。
【図面の簡単な説明】
【００１１】
【図１】本明細書中に記載される１つ以上の実施形態と共に用いられるデータ処理システムの例を示す図である。
【図２】プログラマブル集積回路（ＩＣ）の例を示す図である。
【図３】プログラマブルＩＣの別の例を示す図である。
【図４】階層型部分的再構成の例示的な方法を示す図である。
【図５Ａ】図４において実行される例示的な動作を示す図である。
【図５Ｂ】図４において実行される例示的な動作を示す図である。
【図５Ｃ】図４において実行される例示的な動作を示す図である。
【図５Ｄ】図４において実行される例示的な動作を示す図である。
【図５Ｅ】図４において実行される例示的な動作を示す図である。
【図５Ｆ】図４において実行される例示的な動作を示す図である。
【図５Ｇ】図４において実行される例示的な動作を示す図である。
【図６】図５Ｇの回路設計を実装する例示的なＩＣを示す図である。
【図７】ＰＰＬＯＣ処理の例を示す図である。
【図８】配置およびルーティングのための例示的な技術を示す図である。
【図９】階層型部分的再構成の別の例示的な方法を示す図である。
【図１０Ａ】図９において実行される例示的な動作を示す図である。
【図１０Ｂ】図９において実行される例示的な動作を示す図である。
【図１０Ｃ】図９において実行される例示的な動作を示す図である。
【図１０Ｄ】図９において実行される例示的な動作を示す図である。
【図１０Ｅ】図９において実行される例示的な動作を示す図である。
【図１１】ＰＰＬＯＣ処理の別の例を示す図である。
【図１２】ＩＣ内に回路を実装する例示的な方法を示す図である。
【図１３】ＩＣのための例示的なアーキテクチャを示す図である。
【発明を実施するための形態】
【００１２】
詳細な説明
本開示は、新規な特徴を規定する特許請求の範囲で締めくくられているが、本開示内に説明されるさまざまな特徴が、添付の図面と併せて当該説明を考慮することでより良く理解されるであろうと考えられる。本明細書中に記載されるプロセス、マシン、製造およびそれらのいずれかの変形例が例示を目的として提供される。本開示内に記載される具体的な構造上および機能上の詳細は、限定するものとして解釈されるべきではなく、単に特許請求の範囲の基礎として、および実質的に適切に詳述されたいずれかの構造において記載される特徴をさまざまに採用するように当業者に教示するための代表的な基礎として解釈されるべきである。さらに、本開示内で用いられる用語および表現は、限定することを意図したものではなく、記載される特徴を理解できるように説明することを意図したものである。
【００１３】
本開示は、集積回路（ＩＣ）に関し、より特定的には、プログラマブルＩＣの部分的再構成に関する。本開示内に記載される本発明の構成に従うと、プログラマブルＩＣ（本明細書中では「ターゲットＩＣ」とも称される）は、部分的再構成によって内部でさまざまな回路および／またはシステムを実装している間、外部システムとの通信リンクを維持することができる。プログラマブルＩＣのスタティック領域は、外部システムと通信するための回路を実装するために用いられる。スタティック領域は、ハードウェアアクセラレーテッドユーザアプリケーションおよび／またはユーザ指定回路（本明細書では「カーネル」と称される）をサポートする。カーネルは、プログラマブルＩＣのうち、スタティック領域と通信する部分的再構成（ＰＲ）領域内に実装される。
【００１４】
場合によっては、ＰＲ領域は、スタティック領域と密接に関連付けられており、サイズおよび境界が固定されている。しかしながら、ＰＲ領域のこのような固定された性質は、データセンタ内で用いられるような特定のアプリケーションにしばしば必要とされるような高速での再構成を制限してしまう。ＰＲ領域の固定された性質はまた、１セットのカーネルが連続的に計算している間、別のセットのカーネルをターゲットＩＣ内に新たに実装して次のセットの動作に備えるという、細粒度の並列性を妨害してしまう。
【００１５】
本開示内に記載される本発明の構成はこれらの問題などに対処する。たとえば、本開示内に記載される本発明の構成は、ファンクション・アズ・ア・サービス（Function as a Service：ＦａａＳ）ユーザがハードウェアアクセラレーションプラットフォーム設計を必要に応じてカスタマイズすることを可能にする。ユーザは、本明細書中に記載される実施形態を用いて、デフォルトの単一の計算領域を、ユーザの特定アプリケーションのためにターゲットとされて最適化される複数の計算領域を有するフルカスタムのプラットフォーム設計にカスタマイズすることができる。一般に、ＦａａＳは、クラウドコンピューティングサービスのカテゴリであって、通常、アプリケーションの開発および立上げに付随するインフラストラクチャの構築および維持を複雑にすることなく、顧客がアプリケーション機能を開発、実行および管理することを可能にするプラットフォームを提供する。
【００１６】
加えて、本明細書中に記載される例示的な実施形態は、部分的構成ビットストリーム（以下、「部分的ビットストリーム」）の数を「Ｎ  ｃｈｏｏｓｅ  Ｍ」個の部分的ビットストリームから「Ｎ×Ｍ」個の部分的ビットストリームにまで減らすことができる。ここで、ＮはＰＲ領域の数であり、Ｍは所与のＰＲ領域において実装され得るランタイム関数の数である。
【００１７】
１つ以上の実施形態においては、ＰＲコンテナ領域はターゲットＩＣ上に設けられる。ＰＲコンテナ領域は、スタティック領域に結合（たとえば通信可能にリンク）され得る。ＰＲコンテナ領域は、階層的にネストされた複数のＰＲ領域および／またはＰＲコンテナ領域を含み得る。さらに、ＰＲコンテナ領域内のＰＲ領域の１つ以上がＰＲコンテナ領域に変換されてもよく、この場合、各々のＰＲコンテナ領域はさらなる複数のＰＲ領域を含み得る。このような態様で、ＰＲ領域がＰＲコンテナ領域内において階層的にネストされ得る。これにより、ユーザが、ターゲットＩＣ内でＰＲ領域の階層を任意の深さにまで形成することが可能となる。
【００１８】
１つ以上の他の実施形態においては、ＰＲコンテナ領域内の複数のＰＲ領域の複数の境界は、或る異なるＰＲコンテナ領域をプログラマブルＩＣ内にロードすることによって変更され得る。各々の異なるＰＲコンテナ領域は、異なる数のＰＲ領域および／または内部に含まれる複数のＰＲ領域のための複数の異なる境界を含み得る。さらに、複数の異なるＰＲコンテナ領域がターゲットＩＣ内に実装されているので、スタティック領域は、外部システムとの通信リンクを維持することができる。
【００１９】
特定の実施形態においては、或るＰＲコンテナ領域内の複数のＰＲ領域は、互いに接触しないかまたは互いに交差しない。複数のＰＲ領域同士の重なり合いおよび／または接触がないことで、或るＰＲコンテナ領域のうち１つのＰＲ領域以外の他の任意のＰＲ領域およびスタティック回路が途切れることなく動作し続けている間、当該ＰＲコンテナ領域内の当該１つのＰＲ領域の部分的再構成が可能となる。その結果、一部のカーネルは、他の別のカーネルがターゲットＩＣ内で実装されている間、動作し続けることができるので、ターゲットＩＣのデータスループットが増加する。
【００２０】
従来の部分的再構成方式では、本明細書中に記載される例示的な実施形態によって提供されるようなＰＲ領域における粒度の上昇は不可能である。これにより、部分的再構成が、必要とするよりも（たとえば、より少ないＰＲ領域およびより大きなＰＲ領域を用いて）ターゲットＩＣにわたってより広範に実行されるといった状況が生じる。その結果、ターゲットＩＣ内に新しいカーネルおよび／または異なるカーネルおよび／または計算ユニットを実装するために、多くのカーネルまたは計算ユニットを一時的に減少させてもよく、これにより、部分的再構成動作中にデータスループットを減少させるかまたは場合によってはターゲットＩＣのデータスループットを一時的に停止させてもよい。
【００２１】
本発明の構成のさらなる局面が、添付の図面を参照して以下においてより詳細に説明される。例示を簡潔および明瞭にするために、図に示される要素は必ずしも縮尺どおりに描かれていない。たとえば、いくつかの要素の寸法は、明確にするために他の要素と比べて強調されている場合がある。さらに、対応する特徴、類似の特徴または同様の特徴を示すために、適切とみなされる場合、参照番号が複数の図中で繰返し用いられる。
【００２２】
図１は、本明細書中に記載される１つ以上の実施形態と共に用いるための例示的なシステム１００を示す。システム１００は、コンピュータ、サーバ、ラップトップもしくはタブレットコンピュータなどのポータブルコンピュータ、または他のデータ処理システムを実装するために用いられ得るコンピュータハードウェアの例である。コンピュータハードウェアを用いて実装されるシステムまたはデバイスは、ＩＣ内で実装するための回路設計を処理することに関連する、本明細書中に記載されるさまざまな動作を実行することができる。
【００２３】
図１の例においては、システム１００は少なくとも１つのプロセッサ１０５を含む。プロセッサ１０５は、インターフェイス回路１１５を介してメモリ１１０に結合される。システム１００は、コンピュータ読取り可能命令（「プログラムコード」とも称される）をメモリ１１０内に格納することができる。メモリ１１０は、コンピュータ読取り可能記憶媒体の一例である。プロセッサ１０５は、インターフェイス回路１１５を介してメモリ１１０からアクセスされるプログラムコードを実行することができる。
【００２４】
メモリ１１０は、たとえば、ローカルメモリおよびバルクストレージデバイスなどの１つ以上の物理メモリデバイスを含み得る。ローカルメモリは、プログラムコードの実際の実行中に一般に用いられる非永続的メモリデバイスを指す。ローカルメモリの例として、ランダムアクセスメモリ（random access memory：ＲＡＭ）および／またはプログラムコードの実行中にプロセッサが用いるのに適したさまざまなタイプのＲＡＭ（たとえば、ダイナミックＲＡＭもしくは「ＤＲＡＭ（dynamic RAM）」またはスタティックＲＡＭもしくは「ＳＲＡＭ（static RAM）」）のいずれかを含む。バルクストレージデバイスは永続的なデータストレージデバイスを指している。バルクストレージデバイスの例として、ハードディスクドライブ（hard disk drive：ＨＤＤ）、ソリッドステートドライブ（solid-state drive：ＳＳＤ）、フラッシュメモリ、読取り専用メモリ（read-only memory：ＲＯＭ）、消去可能なプログラマブル読取り専用メモリ（erasable programmable read-only memory：ＥＰＲＯＭ）、電気的に消去可能なプログラマブル読取り専用メモリ（electrically erasable programmable read-only memory：ＥＥＰＲＯＭ）、または他の好適なメモリを含むが、これらに限定されない。システム１００はまた、実行中にバルクストレージデバイスからプログラムコードを抽出しなければならない回数を減らすために、少なくともいくつかのプログラムコードを一時的に格納する１つ以上のキャッシュメモリ（図示せず）を含み得る。
【００２５】
メモリ１１０は、プログラムコードおよび／またはデータを格納することができる。説明を目的として、メモリ１１０は、オペレーティングシステム１２５、１つ以上のアプリケーション１３０および回路設計１３５を格納する。１つ以上の実施形態においては、アプリケーション１３０は、電子設計自動化（electronic design automation：ＥＤＡ）アプリケーションを含む。ＥＤＡアプリケーションは、設計フロー（たとえば、合成、配置、ルーティングおよび／またはビットストリーム生成）の１つ以上の動作と、ターゲットＩＣ内の回路設計１３５の実装および部分的再構成に関する本明細書中に記載されるさまざまな動作とを実行することができる。ターゲットＩＣは、図１３に関連付けて説明されるアーキテクチャと同じアーキテクチャまたは同様のアーキテクチャを有してもよい。
【００２６】
システム１００（たとえばプロセッサ１０５）は、本開示内で説明される動作を実行するためにオペレーティングシステム１２５およびアプリケーション１３０を実行することができる。このため、オペレーティングシステム１２５およびアプリケーション１３０は、システム１００の一体化部分とみなされてもよい。さらに、システム１００（たとえば、プロセッサ１０５）によって使用、生成および／または操作される任意のデータが、システムの一部として用いられるときに機能を付与する機能的データ構造であることが認識されるはずである。
【００２７】
インターフェイス回路１１５の例は、システムバスおよび入出力（input/output：Ｉ／Ｏ）バスを含むが、これらに限定されない。インターフェイス回路１１５は、さまざまなバスアーキテクチャのいずれかを用いて実装され得る。バスアーキテクチャの例は、拡張業界規格アーキテクチャ（Enhanced Industry Standard Architecture：ＥＩＳＡ）バス、アクセラレーテッドグラフィックスポート（Accelerated Graphics Port：ＡＧＰ）、ビデオエレクトロニクス規格協会（Video Electronics Standards Association：ＶＥＳＡ）ローカルバス、ユニバーサルシリアルバス（Universal Serial Bus：ＵＳＢ）および周辺コンポーネント相互接続エクスプレス（Peripheral Component Interconnect Express：ＰＣＩｅ）バスを含み得るが、これらに限定されない。
【００２８】
システム１００はさらに、インターフェイス回路１１５に結合される１つ以上のＩ／Ｏデバイス１２０を含み得る。Ｉ／Ｏデバイス１２０は、システム１００（たとえばインターフェイス回路１１５）に直接、または介在するＩ／Ｏコントローラを介して、結合され得る。Ｉ／Ｏデバイス１２０の例は、キーボード、ディスプレイデバイス、ポインティングデバイス、１つ以上の通信ポートおよびネットワークアダプタを含むが、これらに限定されない。ネットワークアダプタは、システム１００を、介在するプライベートネットワークまたはパブリックネットワークを通じて他のシステム、コンピュータシステム、遠隔プリンタおよび／または遠隔ストレージデバイスに結合することを可能にする回路を指す。モデム、ケーブルモデム、イーサネット（登録商標）カードおよび無線トランシーバは、システム１００とともに用いられ得るさまざまなタイプのネットワークアダプタの例である。
【００２９】
システム１００は、実装される特定のタイプのデバイスおよび／またはシステムに応じて、図１に示されるよりも少ない構成要素または図１に示されていない追加の構成要素を含み得る。加えて、含まれる特定のオペレーティングシステム、アプリケーションおよび／またはＩ／Ｏデバイスは、システムタイプに基づいてさまざまであり得る。さらに、例示的な構成要素のうちの１つ以上が別の構成要素に組込まれてもよく、またはそうでない場合には、別の構成要素の一部分を形成してもよい。たとえば、プロセッサは少なくともいくつかのメモリを含み得る。システム１００は、それぞれが図１のアーキテクチャまたはそれに類似するアーキテクチャを用いて実装されるネットワーク化もしくは相互接続された複数のコンピュータまたは単一のコンピュータを実装するために用いられてもよい。
【００３０】
１つ以上の実施形態においては、システム１００は開発システム（たとえば、ＥＤＡシステム）を表しており、当該開発システムは、回路設計１３５を処理して、スタティック領域、１つ以上の異なるＰＲコンテナ領域およびＰＲコンテナ領域内の１つ以上のＰＲ領域を実装するための部分的ビットストリームを実装することができる。スタティック領域は、通信リンクを介してターゲットＩＣ外のシステムと通信することができる通信回路をターゲットＩＣ内に実装する。たとえば、スタティック領域は、ホストシステムと通信することができるＰＣＩｅエンドポイントを実装していてもよい。ＰＲコンテナ領域はスタティック領域に結合される。ＰＲコンテナ領域は、ユーザアプリケーション（たとえば、ハードウェアアクセラレーテッドユーザアプリケーション）および／または回路設計のうちのユーザ指定部分を参照して、カーネルによって用いられるインフラストラクチャ回路を実装することができる。カーネルは、ＰＲコンテナ領域内に含まれる１つ以上のＰＲ領域内に実装されてもよい。システム１００は、結果として得られる回路設計を、ターゲットＩＣ内の部分的ビットストリームとして実装し得る。プログラマブルＩＣ１４０はターゲットＩＣの一例である。
【００３１】
１つ以上の他の実施形態においては、システム１００は、プログラマブルＩＣ１４０がインターフェイス回路１１５に結合されてハードウェアアクセラレータとして動作するランタイムシステム（たとえばホストシステム）を表している。プログラマブルＩＣ１４０は、たとえば、動作中にプログラマブルＩＣ１４０によって使用可能な追加のメモリ（たとえば、ＲＡＭ（図示せず））を含む回路基板上に搭載されてもよい。この場合、プログラマブルＩＣ１４０は、プロセッサ１０５（たとえば、ホストプロセッサ）によって部分的ビットストリームをロードして、時間の経過に応じてその内部に異なる回路を実装してもよい。プロセッサ１０５は、たとえば、時間の経過に応じてプログラマブルＩＣにロードされる特定の部分的ビットストリームと、時間の経過に応じてプログラマブルＩＣ１４０内に実装されるカーネルへの特定のタスクのオフロードとを制御するアプリケーションを実行してもよい。プログラマブルＩＣ１４０は、任意の結果をプロセッサ１０５に返してもよい。
【００３２】
システム１００は、たとえば、ＦａａＳユーザが必要に応じてハードウェアアクセラレーションプラットフォーム設計をカスタマイズすることを可能にする。ユーザは、システム１００を用いて、デフォルトの単一の計算領域を、ユーザの特定のアプリケーションのためにターゲットとされて最適化される複数の計算領域を有するフルカスタムのプラットフォーム設計にカスタマイズすることができる。加えて、本明細書中に記載される本発明の構成は、部分的再構成を伴う設計のために、部分的ビットストリームの数を「Ｎ  ｃｈｏｏｓｅ  Ｍ」個の部分的ビットストリームから「Ｎ×Ｍ」個の部分的ビットストリームにまで減らすことができる。生成する必要がある部分的ビットストリームの数を減らすことによって、本開示内で説明される本発明の構成はシステムの動作を向上させる。各々の部分的ビットストリームを生成するのに典型的に数時間の計算時間が必要となるので、システムのランタイムが大幅に低減され得る。階層型部分的再構成を実装するために本明細書中に記載されるように回路設計上で動作させることにより、必要とされる部分的ビットストリームがより少なくなり、これによりシステムの動作が向上する。
【００３３】
図２は、プログラマブルＩＣ（ＩＣ）２００の一例を示す。ＩＣ２００は、図１のプログラマブルＩＣ１４０の実装例である。本開示内において、「領域」という語は、ターゲットＩＣの物理的部分または物理的区域を指すために用いられる。概して、本明細書中に記載される領域は、回路設計の特定のモジュールおよび／またはコンテナに対応する。「ＰＲコンテナ」は、１つ以上のＰＲモジュールおよび１つ以上のＰＲコンテナを保持するかまたは含むことができる回路設計の論理構造を指す。「ＰＲコンテナ領域」は、ＰＲコンテナに対応するターゲットＩＣ上の領域を指す。したがって、ＰＲコンテナ領域は、回路設計のＰＲモジュールのそれぞれに対応している複数のＰＲ領域を含み得る。しかしながら、ＰＲ領域は別のＰＲ領域を含まない場合がある。同様に、ＰＲモジュールは、他のいずれのＰＲモジュールも含まない場合がある。
【００３４】
図２の例においては、ＩＣ２００は、スタティック領域２０５およびＰＲコンテナ領域２１０を含む。スタティック領域２０５およびＰＲコンテナ領域２１０はともに、ＩＣ２００のプログラマブル回路を用いて実装される。ＰＲコンテナ領域２１０は、ユーザ定義された複数のＰＲ領域２１５および２２０を含む。図示のとおり、ＰＲ領域２１５および２２０は、ＰＲコンテナ領域２１０内で階層的に順序付けられている。たとえば、ＰＲ領域２１５および２２０は、ＰＲコンテナ領域２１０内に完全に収容されている。
【００３５】
図２はまた、図示される複数の異なる領域を実装するためにＩＣ２００にロードされ得る複数の部分的ビットストリームを示す。たとえば、部分的ビットストリーム２３０は、スタティック領域２０５内で回路を実装するためにＩＣ２００にロードされてもよい。部分的ビットストリーム２３５は、ＰＲコンテナ領域２１０内で回路を実装するためにＩＣ２００にロードされてもよい。
【００３６】
ＰＲ領域２１５は、ＰＲ領域２１５内に異なる回路をもたらすこととなる複数の異なるユーザアプリケーションを実装することができる。図２の例においては、ＰＲ領域２１５は、部分的ビットストリーム２４０をロードすることによってアプリケーションＡに対応する回路を実装し得るか、または部分的ビットストリーム２４５をロードすることによってアプリケーションＢに対応する回路を実装し得る。ＰＲ領域２２０は、部分的ビットストリーム２５０をロードすることによってアプリケーションＣに対応する回路を実装し得るか、または部分的ビットストリーム２５５をロードすることによってアプリケーションＤに対応する回路を実装し得る。
【００３７】
図示のとおり、ＰＲ領域２１５は、ＰＲ領域２２０とは重なり合わないかまたは接触しない。これにより、ＰＲ領域２１５をＰＲ領域２２０とは別個に部分的に再構成することが可能となる。たとえば、ＰＲ領域２１５がアプリケーションＡに対応する回路を実装し得る一方で、ＰＲ領域２２０はアプリケーションＣに対応する回路を実装する。ＰＲ領域２１５は、部分的ビットストリーム２４５をロードすることによってアプリケーションＢに対応する回路を実装するように再構成され得る一方で、ＰＲ領域２２０は、アプリケーションＣを中断させずに実行し続ける（アプリケーションＣに対応する回路を中断させずに動作させる）。同様に、ＰＲコンテナ領域２１０のうちＰＲ領域２１５外の領域は、スタティック領域２０５の場合と同様に途切れることなく動作し続けてもよい。
【００３８】
いずれの時点においても、ホストシステム（たとえばプロセッサ１０５）は、或る異なるＰＲコンテナ領域を実装するＩＣ２００内に異なる部分的ビットストリームをロードすることができる。この異なるＰＲコンテナ領域は、図２に示されるものとは異なる数のＰＲ領域、および／または、複数の異なる境界を有する同じ数のＰＲ領域を含んでいてもよく、これにより、異なる形状および大きさのＰＲ領域が可能となる。
【００３９】
説明を目的として、ＰＲ領域２１５および／またはＰＲ領域２２０はＰＲコンテナ領域に変換され得る。この場合、１つ以上のＰＲ領域が、変換されたＰＲコンテナ領域において実装され得る。このプロセスは、ＩＣ２００内に部分的再構成階層を作成するために、新たに作成されたＰＲ領域上で反復的に実行する（たとえば、ＰＲコンテナ領域に変換する）ことができる。
【００４０】
図３は、ＩＣ２００の別の例を示す。図３の例においては、新しい部分的ビットストリームが、或る異なるＰＲコンテナ領域３１０を実装するＩＣ２００にロードされる。ＰＲコンテナ領域３１０は、４つのＰＲ領域３１５、３２０、３２５および３３０を含む。ＰＲ領域３１５、３２０、３２５および３３０の各々は、ＩＣ２００内に複数の異なる部分的ビットストリームをロードすることによって、１つ以上の異なるアプリケーションを実装することができる。図３は、複数のＰＲ領域境界および／またはＰＲ領域の数がＩＣ内でどのように変更され得るかについての例を示す。
【００４１】
図４は、階層型部分的再構成の例示的な方法４００を示す。方法４００は、図１に関連付けて説明したシステム１００と同じまたは同様のシステムによって実行されてもよい。方法４００は、階層型部分的再構成を実装するために回路設計のＰＲモジュールを細分化する例を示す。例示を目的として、方法４００はまた、回路設計時に実行される動作を視覚的に例示している図５Ａ〜５Ｇを参照して説明される。
【００４２】
ブロック４０５において、システムは、実装された回路設計をロードすることができる。実装された回路設計は、配置およびルーティングされる回路設計である。当該回路設計は、図５Ａに示されるように、スタティックモジュール５０５およびＰＲモジュール５１０を含む。スタティックモジュール５０５およびＰＲモジュール５１０が配置およびルーティングされる。
【００４３】
ブロック４１０において、システムは、図５Ｂに示されるように、ＰＲモジュール５１０の内容を除去することができる。図５Ｂの例においては、ＰＲモジュール５１０の陰影部分は、システムがＰＲモジュール５１０の内容を除去したことを示す。この点に関して、ＰＲモジュール５１０は「ブラックボックス」であると言われており、これは空のモジュールであって、たとえば、「部分的再構成」および「モジュール」属性を含むが内容を含まない回路設計の論理モジュールである。
【００４４】
ブロック４１５において、システムは、ＰＲモジュール５１０をＰＲコンテナモジュール５１５に変換することができる。たとえば、システムは、ＰＲモジュール５１０の「モジュール」属性を「コンテナ」に変更する。
【００４５】
ブロック４２０において、システムは、ネットリストをＰＲコンテナ５１５にロードすることができる。図５Ｂは、ＰＲコンテナ５１５内に含まれているネットリスト５４５を示す。ＰＲコンテナ５１５にロードされるネットリスト（たとえばネットリスト５４５）は２つ以上のＰＲモジュール５２０および５２５を含んでおり、図５Ｃに示されている。ＰＲモジュール５２０および５２５の各々は空であってもよい。
【００４６】
ブロック４２５において、システムは、ＰＰＬＯＣをＰＲコンテナ５１５からＰＲモジュール５２０および５２５のうちの適切なモジュールの境界に再配置することができる。ＰＰＬＯＣの再配置は、図７に関連付けてより詳細に説明される。
【００４７】
ブロック４３０において、システムは、ＰＲモジュール５２０および５２５の各々についてのＰＲモジュールフロアプランを生成することができる。ＰＲモジュールフロアプランは、各ＰＲモジュールごとに位置制約を指定する。この点に関して、ＰＲモジュール５２０についてのＰＲモジュールフロアプランは、ターゲットＩＣ内のＰＲモジュール５２０の物理的境界を指定する。特に、ＰＲモジュール５２０についてのＰＲモジュールフロアプランは、物理的境界が完全にＰＲコンテナ５１５の物理的境界内（たとえば、ＰＲコンテナ５１５についてのフロアプランの境界内）にあることを指定している。ＰＲモジュール５１０が最初に配置およびルーティングされているので、そのモジュールに対応する境界がブロック４０５においてロードされた元の回路設計から維持され得ることを理解されたい。このため、ＰＲコンテナ５１５のフロアプランが利用可能となる（たとえば、同じである）。ＰＲモジュール５２５についてのＰＲモジュールフロアプランは、ＰＲモジュール５２５の境界が完全にＰＲコンテナ５１５の境界内にあることを指定している。さらに、ＰＲモジュール５２０およびＰＲモジュール５２５の境界は互いに重なり合っていないか、またはそうでない場合、互いに接触しない。
【００４８】
１つ以上の実施形態においては、ユーザは、ＰＲモジュール５２０および５２５の各々の物理的境界を指定する１つ以上のユーザ入力を提供し得る。特定の実施形態においては、システムは、ＰＲコンテナ５１５によってカバーされるターゲットＩＣの領域を図表で表示してもよい。ユーザは、ＰＲモジュール５２０および５２５の各々に対応するＰＲコンテナ５１５内の所望の寸法および位置を有する矩形を描き得る。システムは、ユーザ指定入力を、ＰＲモジュール５２０および５２５のそれぞれについてのＰＲモジュールフロアプランとして用いてもよい。
【００４９】
ブロック４３５において、システムは、ＰＲモジュール５２０および５２５の各々内にネットリストを含めることができる。図５Ｃは、ネットリスト５５０がＰＲ領域５２０に含まれており、ネットリスト５５５がＰＲ領域５２５に含まれていることを示す。ユーザは、たとえば、ＰＲモジュール５２０内に含まれるべきネットリストと、ＰＲモジュール５２５内に含まれるべきネットリストとを指定してもよい。システムは、ＰＲモジュール５２０および５２５の各々内にユーザ指定ネットリストを含める。
【００５０】
ブロック４４０において、システムはＰＲコンテナ５１５を実装することができる。そうすることにより、システムは、それぞれのＰＲモジュールフロアプランに基づいて、ＰＲモジュール５２０および５２５の各々とそれらに含まれるそれぞれのネットリストとを含むＰＲコンテナ５１５を実装することができる。たとえば、システムは、ＰＲコンテナ５１５についてのフロアプランを用いて、ＰＲコンテナ５１５に対応する回路を配置およびルーティングすることができる。また、システムは、各々のＰＲモジュールごとに開発されたＰＲモジュールフロアプランに基づいて、ＰＲモジュール５２０（たとえば、ネットリスト５５０）および５２５（たとえば、ネットリスト５５５）の各々を配置およびルーティングすることもできる。図５Ｄは、ＰＲモジュール５２０および５２５を含むＰＲコンテナ５１５が完全に配置およびルーティングされている例を示す。
【００５１】
１つ以上の実施形態においては、システムは、ＰＲコンテナのための部分的ビットストリーム、ＰＲモジュール５２０のための部分的ビットストリームおよびＰＲモジュール５２５のための部分的ビットストリームを出力し得る。ブロック４０５における回路設計が実装されていたので、スタティックモジュール５０５のための部分的なビットストリームが最初に利用可能となり得る。
【００５２】
ＰＲモジュール５２０および５２５に対応するターゲットＩＣ上のＰＲ領域内で実装されるべき複数の異なるアプリケーションのためのさらなる部分的ビットストリームを生成するために、図５Ｃにおける回路設計の状態がその後の使用のために格納され得る。当該方法は、この時点から、複数の異なるネットリストをＰＲモジュール５２０および／またはＰＲモジュール５２５に挿入し、さらに、新しいネットリストおよび／または異なるネットリストを用いてＰＲモジュール５２０および５２５の各々を実装して、アプリケーションごとにさらなる部分的ビットストリームを生成することによって繰り返されてもよい。
【００５３】
図５Ｅ〜図５Ｇは、ＰＲモジュールをさらに細分化するために実行され得る追加のプロセスステップを示す。たとえば、方法４００に関連付けて説明される動作は、さらなるＰＲモジュールをさらなるＰＲコンテナ内で任意の深さにまで作成するように反復的に実行されてもよい。図５Ｅ〜図５Ｇの例においては、ＰＲモジュール５２５は、さらなるＰＲモジュール５３５および５４０を含むＰＲコンテナ５３０に変換される。
【００５４】
図５Ｅの例を参照すると、システムは、ＰＲモジュール５２５の内容を除去することによってＰＲコンテナ５３０を生成し、ＰＲモジュール５２５のパラメータを「コンテナ」のパラメータに変更し、図５Ｆに示されるように、複数のＰＲモジュール５３５および５４０を含む内部のネットリスト５６０をＰＲコンテナ５３０にロードすることができる。ＰＲモジュール５３５および５４０の各々は空であってもよい。図５Ｅの例においては、ＰＲモジュール５２５の陰影部分は、システムがＰＲモジュール５２５の内容を除去したことを示している。この点に関して、ＰＲモジュール５２５はブラックボックスであると言われている。図５Ｆの例においては、ネットリスト５６０は、このときＰＲコンテナ５３０であるものに含まれている。システムは、ネットリスト５６５をＰＲモジュール５３５に含め得るとともに、ネットリスト５７０をＰＲモジュール５４０に含め得る。次いで、システムは、ＰＲコンテナ５３０を実装（たとえば、配置およびルーティング）し得る。次いで、システムは、図５Ｇに示されるように、ＰＲモジュール５３５および５４０を含むＰＲコンテナ５３０を実装し得る。
【００５５】
上述したように、ＰＲコンテナおよびＰＲモジュールの階層は、任意の深さにまで続いていてもよい。さらに、いずれかの所与のＰＲコンテナに含まれるＰＲモジュールの数は３以上であってもよい。ユーザは、たとえば、ＥＤＡシステムを用いて説明される動作を開始して、任意のＰＲモジュールを、複数のＰＲモジュールを含むことができるＰＲコンテナに変換し、所望のレベルの部分的再構成階層に至るまでプロセスを繰り返してもよい。
【００５６】
図６は、図５Ｇの回路設計を実装する例示的なＩＣ６００を示す。図５Ａ〜図５Ｇは、回路設計の状態の論理図を示すとともにターゲットＩＣに対する物理的関係の図示を試みている。図６は、図５Ｇに示される配置およびルーティングされた回路設計からＩＣ６００に実装される物理領域を示す。図示のとおり、ＩＣ６００は、スタティックモジュール５０５に対応するスタティック領域６０５を含む。上述したように、スタティック領域６０５は、通信バスを介してホストプロセッサなどの外部システムとの通信リンクを維持することができる通信回路を実装し得る。ＩＣ６００はまた、ＰＲコンテナ領域６１５を含む。概して、ＰＲコンテナ領域６１５は、ＩＣ６００上においてＰＲコンテナ５１５を実装する物理領域を示す。
【００５７】
ＰＲコンテナ領域６１５は、ＰＲ領域６２０およびＰＲコンテナ領域６３０を含む。ＰＲ領域６２０は、ＩＣ６００上においてＰＲモジュール５２０を実装する物理領域を示す。ＰＲコンテナ領域６３０は、ＩＣ６００上においてＰＲコンテナ５３０を実装する物理領域を示す。ＰＲコンテナ領域６３０は、ＰＲ領域６３５およびＰＲ領域６４０を含む。ＰＲ領域６３５および６４０は、それぞれ、ＩＣ上においてＰＲモジュール５３５および５４０を実装する物理領域である。
【００５８】
図６の例においては、ＰＲ領域６２０、６３５および／または６４０のいずれか１つの領域内に異なる回路を実装するために、動作中にいつでも、複数の異なる部分的ビットストリームがＩＣ６００にロードされてもよい。ＰＲ領域６２０、６３５および／または６４０の各々は、ホストシステムの制御下で他の領域から独立して再構成され得る。別の例においては、ＰＲ領域６２０およびＰＲコンテナ領域６１５が途切れることなく動作し続けている間、いつでも、ＰＲ領域６３０の全く新しい実装がＩＣ６００内で実現され得る。ＰＲ領域６３０の新しい実装例は、ＰＲ領域６３５および６４０について示されるものとは異なる境界のＰＲ領域、および／または、ＰＲコンテナ領域６３０について示されるものとは全く異なる数のＰＲ領域を含み得る。さらに別の例においては、図６に示されるものとは全く異なるアーキテクチャを有する全く新しいバージョンのＰＲコンテナ領域６１５が実装され得る。
【００５９】
図６の例は、複数の異なるＰＲ領域間の独立性を示すとともに、１つ以上のＰＲ領域が複数の異なるカーネルを実装するように動的に再構成され得る一方で、他のＰＲ領域のカーネルが途切れることなくＩＣ６００内で動作し続けることを示すことを意図している。これにより、他のカーネルがＩＣ６００内の回路に実装されて複数の異なるタスクを実行している間、選択されたカーネルが動作し続けている状態で、ＩＣ６００のデータスループットを高いまま維持することが可能となる。図６の例はさらに、ユーザが必要に応じてアプリケーションレベルで、異なるＰＲ領域間の境界を制御および変更できることを示している。概して、ユーザアプリケーションは、所与のアプリケーションのために必要とされるＰＲコンテナ領域およびＰＲ領域の任意の階層を、当該階層がＩＣ６００のうちスタティック領域６０５内に含まれない利用可能部分内に実装され得る限り、作成し得る。
【００６０】
図７はＰＰＬＯＣ処理の例を示す。ＰＰＬＯＣは、パーティションピンがロックされて移動され得ないことを示すパラメータを有するパーティションピンを示している。パーティションピンは、スタティックモジュール（スタティック領域）とＰＲモジュール（ＰＲ領域）との間、またはＰＲモジュール（ＰＲ領域）間の信号交差を規定する。ＰＰＬＯＣ処理は、図４のブロック４２５に関連付けて説明されるように再構成モジュールの作成の一環として実行されてもよい。
【００６１】
図７は、ＰＰＬＯＣが回路設計におけるパーティション（たとえば、モジュール境界）に関してどのように処理されるかを示す。説明を目的として、ＰＲコンテナ５１５およびＰＲモジュール５２５についてのみＰＰＬＯＣが示されている。さらに、ＰＲモジュール５２０に接続するネットのためのＰＰＬＯＣが存在してもよく、これらＰＰＬＯＣは図示されていないが、同じ方法または同様の方法で処理され得る。
【００６２】
概して、システムは、ＰＲコンテナ５１５の境界を横断する接続を２つの異なるカテゴリに分類する。第１のカテゴリは、ＰＰＬＯＣパラメータを有さない接続を含む。第２のカテゴリは、ＰＰＬＯＣパラメータを有する接続を含む。図７の例においては、セルＡ（たとえば、回路ブロック）はセルＧに接続する。セルＢはセルＨおよびＰＲモジュール５２５に接続する。セルＣはＰＲモジュール５２５に接続する。接続Ａ−Ｇ、Ｂ−ＨおよびＣ−ＰＲモジュール５２５は接続の第１のカテゴリに属する。第１のカテゴリ内の接続については、システムは何のアクションも実行しない。
【００６３】
第２のカテゴリ内の接続のために、システムはＰＰＬＯＣを選択的に再配置する。ＰＰＬＯＣを再配置するとは、パーティションピンから「ロック」属性を除去し、当該「ロック」属性を別の異なるパーティションピンに追加することを指している。セルＤに関する接続の場合、システムは、ＰＰＬＯＣ  Ｐ１をＰＲコンテナ５１５の境界上のパーティションピンからＰＲ領域５２５の境界上のパーティションピンに再配置する。システムはＰＰＬＯＣ  Ｐ１を再配置する。なぜなら、セルＤ（１）がＰＲコンテナ５２５の境界上に位置するＰＰＬＯＣを有しているが、ＰＲコンテナ５１５内のうちＰＲモジュール５２０および５２５の外にある他のいずれのセルにも接続されていないからである。
【００６４】
セルＥおよびセルＩに関する接続については、システムは、ＰＲコンテナ５２５の境界上に位置しているにもかかわらずＰＰＬＯＣ  Ｐ２を移動させない。なぜなら、Ｅ−Ｉ接続がＰＲモジュール５２５またはＰＲモジュール５２０を含んでいないからである。接続Ｆ−Ｊについては、システムは、ＰＲコンテナ５１５の境界上に位置しているにもかかわらずＰＰＬＯＣ  Ｐ３を移動させない。なぜなら、セルＪがＰＲモジュール５２０またはＰＲモジュール５２５に直接接続されていないからである。ＰＲモジュール５２５への接続は、ＰＰＬＯＣ  Ｐ３の後で行われ、ＰＲコンテナ５１５内にある。
【００６５】
図８は、配置およびルーティングのための例示的な技術を示す。図８に示す技術は、図４のブロック４４０の一部としてＰＲコンテナ５１５を実装する際に用いられ得る。図８の例においては、ＰＲコンテナ領域８１０は、ＰＲ領域８２０およびＰＲ領域８３０を含む。ＰＲコンテナ領域８１０に対応するＰＲコンテナの回路素子を配置する際、システムは、ＰＲコンテナ領域８１０についてのフロアプランに従って、ＰＲコンテナ領域８１０内のうちＰＲ領域８２０および８２５を除くいずれかの場所にこのような回路素子を配置するように制限されている。ＰＲコンテナ領域８１０内のセルのための接続をルーティングする際、システムは、拡張領域８０５によって表される拡張区域を用いることが可能となる。各々の拡張区域は、拡張されている基礎の区域（たとえば、この例においてはＰＲコンテナ領域８１０）から所定の距離だけ延在していてもよい。
【００６６】
円で囲まれた１でラベル付けされた接続の各々は、拡張領域８０５内に位置するワイヤのみを用いてルーティングされなければならない接続である。このため、セルＥとセルＦとの間の接続、セルＧとＰＲ領域８３０との間の接続、ＰＲ領域８３０とセルＤとの間の接続、およびセルＡとＰＰＬＯＣ  Ｐ２との間の接続をルーティングする際、システムは、拡張領域８０５に含まれるルーティングリソース（たとえば、ワイヤ）のみを用いるように制約されている。
【００６７】
同様に、ＰＲ領域８２０および８３０に対応するＰＲモジュールの複数の回路素子を配置する際、システムは、各ＰＲ領域のＰＲモジュールフロアプランに基づいて、当該複数の回路素子をそれぞれＰＲ領域８２０および８３０内に配置するように制約されている。ＰＲ領域８２０内に位置するセル間のいずれの接続についても、システムは、拡張領域８１５内に位置するそれらのルーティングリソースのみを用いるように制約されている。ＰＲ領域８３０内に位置するセル間のいずれの接続についても、システムは、拡張領域８２５内に位置するそれらのルーティングリソースのみを用いるように制約されている。
【００６８】
説明したように、設計者であれば、本明細書中に記載される例示的な実施形態を用いて、所望され得るようにＰＲコンテナ領域およびＰＲ領域の階層を作成することができる。これにより、新しいカーネルおよび／または異なるカーネルを特定のＰＲ領域において実装することが可能となり、この間、他のＰＲ領域において実装されるカーネルを中断させずに動作させ続けることができる。これは、任意の所望のレベルの粒度で実行され得る。設計者が１つ以上のレベルの部分的再構成階層をもはや必要としなくなった場合、回路設計内の階層のレベルを減らすようにＰＲ領域が再結合されてもよい。
【００６９】
図９は、階層型部分的再構成の別の例示的な方法９００を示す。より特定的には、図４が追加の階層の作成を示す一方で、方法９００は、回路設計内の部分的再構成階層の量を減らすことに向けられている。方法９００は、図１に関連付けて説明されるシステム１００と同じかまたは同様のシステムによって実行され得る。方法９００は、回路設計のＰＲモジュールを再結合し、これにより、用いられる階層型部分的再構成の量を減らす例を示す。例示を目的として、方法９００はまた、回路設計に際して実行される動作を視覚的に説明する図１０Ａ〜図１０Ｅを参照して説明される。
【００７０】
ブロック９０５において、システムは、実装された回路設計をロードすることができる。実装された回路設計は、配置およびルーティングされるとともに部分的再構成階層を含むものである。図１０Ａに示されるように、回路設計は、スタティックモジュール５０５、ＰＲコンテナ５１５、ＰＲモジュール５２０、ＰＲコンテナ５３０、ならびにＰＲモジュール５３５および５４０を含む。例示を目的として、図１０Ａに示される回路設計は、図５Ｇに関連付けて初めに記載された回路設計である。記載されるモジュールおよびコンテナの各々が配置およびルーティングされる。
【００７１】
ブロック９１０において、システムは、ＰＰＬＯＣ処理を実行することができる。ブロック９１０において、システムは、選択されたＰＰＬＯＣをＰＲコンテナ５３０から除去し、他の選択されたＰＰＬＯＣをＰＲモジュールの境界からＰＲコンテナ５３０の境界に移動させることができる。部分的再構成階層の複数のレベルを再結合するためのＰＰＬＯＣ処理を、図１１に関連付けてより詳細に説明する。
【００７２】
ブロック９１５において、システムは、ＰＲコンテナ５３０をＰＲモジュール５２５に変換することができる。たとえば、システムは、ＰＲコンテナ５３０に関連する属性を「コンテナ」から「モジュール」に変更する。ＰＲコンテナ５３０からＰＲモジュール５２５への変換は、図１０Ｂに少なくとも部分的に例示されている。ブロック９２０において、システムは、ＰＲモジュール５２５の内容を除去することができる。内容が除去されると、ＰＲモジュール５２５がブラックボックスになる。図１０Ｂの陰影部分は、ＰＲモジュール５２５のブラックボックスの性質を示す。
【００７３】
ブロック９２５において、システムは、ネットリストをＰＲモジュール５２５にロードすることができる。システムは、図１０Ｂに示されるように、ネットリスト１００５をＰＲモジュール５２５にロードし得る。ＰＲモジュール５２５にロードされるネットリスト（たとえばネットリスト１００５）は、標準ネットリストであってよく、いずれのＰＲモジュールも含まない。
【００７４】
ブロック９３０において、システムはＰＲモジュール５２５を実装することができる。システムは、たとえば、ＰＲモジュール５２５に含まれるネットリストを配置およびルーティングすることができる。図４に関連付けて説明した部分的再構成階層の先の生成からＰＲモジュール５２５についてのフロアプランが格納されてもよい。ＰＲモジュール５２５についてのフロアプランは、そこにロードされたネットリスト１００５を実装する際に用いられ得る。図１０Ｃは、ＰＲモジュール５２５が配置およびルーティングされる例を示す。システムは、ＰＲモジュール５２５のための部分的ビットストリームを生成および出力し得る。さらに、システムは、複数の異なるネットリストをブラックボックスバージョンのＰＲモジュール５２５にロードし、次いで、記載されるようなネットリストを実装することによって、他のアプリケーションのためのさらなる部分的ビットストリームを生成し得る。
【００７５】
図９の例においては、ＰＲコンテナ５３０が処理のために選択されていた。図１０に示すレベルよりも多くのレベルを有する部分的再構成階層が処理されてもよく、図９に関連付けて説明するように、処理すべき階層内の任意の再構成コンテナがユーザによって選択され得ることを理解されたい。当該処理は、ＰＲコンテナのＰＲモジュールを実質的に排除し、ＰＲコンテナをＰＲモジュールに変換する。
【００７６】
例示を目的として、図１０Ｄおよび図１０Ｅは、ＰＲコンテナ５１５が処理され得るさらなる処理を示す。図１０Ｄの例においては、システムはＰＰＬＯＣ処理を実行し得る。システムはさらに、ＰＲコンテナ５１５のブラックボックス実装を残して、ＰＲコンテナ５１５の内容を除去し得る。次いで、システムは、ＰＲコンテナ５１５のパラメータを「コンテナ」から「モジュール」に変更し、これによりＰＲコンテナ５１５をＰＲモジュール５１０に変換し得る。次いで、システムは、ネットリスト１０１０をブラックボックスバージョンのＰＲモジュール５１０に追加し得る。
【００７７】
次いで、システムはＰＲモジュール５１０を実装し得る。このため、ＰＲモジュール５１０が配置およびルーティングされる。さらに、システムは、ＰＲモジュール５１０のための部分的ビットストリームを生成および／または出力し得る。ＰＲモジュール５１０を実装する際、システムは、図４に関連付けて説明したプロセス中に生成されるように、ＰＲモジュール５１０についてのフロアプランを用いてもよい。
【００７８】
上述したように、ＰＲコンテナおよびＰＲモジュールの階層は任意の深さにまで続いていてもよい。ユーザは、階層内の選択された任意のＰＲコンテナからの部分的再構成階層のレベル数を減らすために再結合プロセスを実装し得る。たとえば、図９を説明する際に例示の目的で、ＰＲコンテナ５３０の代わりにＰＲコンテナ５１５が最初に選択されてもよい。
【００７９】
図１１は、ＰＰＬＯＣ処理の別の例を示す。より特定的には、図１１は、部分的再構成階層のレベルを再結合するためのＰＰＬＯＣ処理を示す。図１１に示すＰＰＬＯＣ処理は、図９のブロック９１０を実装するシステムによって実行され得る。例示を目的として、ＰＲコンテナ５３０、ＰＲモジュール５３５およびＰＲモジュール５４０のためのＰＰＬＯＣが示されている。
【００８０】
概して、システムは、ＰＲコンテナ５３０の境界を横断するかまたはＰＲコンテナ５３０内にある複数の接続を２つの異なるカテゴリに分類する。第１のカテゴリは、ＰＰＬＯＣパラメータを有さない接続を含む。第２のカテゴリは、ＰＰＬＯＣパラメータを有する接続を含む。図１１の例においては、セルＡ（たとえば、回路ブロック）はセルＧに接続する。セルＢはセルＨおよびＰＲモジュール５３５に接続する。セルＣはＰＲモジュール５３５に接続する。接続Ａ−Ｇ、Ｂ−ＨおよびＣ−ＰＲモジュール５３５は、接続の第１のカテゴリに属する。第１のカテゴリ内の接続の場合、システムは何のアクションも実行しない。
【００８１】
第２のカテゴリ内の接続の場合、システムはＰＰＬＯＣを選択的に除去および／または再配置する。セルＤに関する接続の場合、システムは、ＰＰＬＯＣ  Ｐ１を、ＰＲモジュール５３５の境界上のパーティションピンからＰＲコンテナ５３０の境界上のパーティションピンへと再配置する。概して、システムは、ＰＰＬＯＣを、階層内の１レベル上の回路設計から除去されているＰＲモジュールから親ＰＲコンテナへと再配置する。システムはＰＰＬＯＣ  Ｐ１を再配置する。なぜなら、セルＤがＰＲモジュール５３５の境界上に位置するＰＰＬＯＣを有しているが、ＰＲコンテナ５３０内のうちＰＲモジュール５３５および５４０外にある他のいずれのセルにも接続されていないからである。
【００８２】
セルＥおよびセルＩに関する接続の場合、システムはＰＰＬＯＣ  Ｐ２を移動させない。なぜなら、ＰＰＬＯＣ  Ｐ２がＰＲコンテナ５３０の境界上に既に位置しており、接続Ｅ−ＩがＰＲモジュール５３５またはＰＲモジュール５４０を含まないからである。接続Ｆ−Ｊの場合、システムはＰＰＬＯＣ  Ｐ３を移動させない。なぜなら、ＰＰＬＯＣ  Ｐ３がＰＲコンテナ５３０の境界上に既に位置しており、セルＪがＰＲモジュール５３５またはＰＲモジュール５４０に直接接続されていないからである。
【００８３】
ＰＰＬＯＣ  Ｐ１に関して説明したように、回路設計から除去されているＰＲモジュールの境界上に位置するが移動されていないＰＰＬＯＣの場合、システムはこのようなＰＰＬＯＣを除去する。たとえば、システムは、ＰＰＬＯＣ  Ｐ６およびＰＰＬＯＣ  Ｐ７を除去する。なぜなら、これらのＰＰＬＯＣは、回路設計から除去されているＰＲモジュールの境界上に位置するとともに、回路設計から除去されている２つのＰＲモジュール間の接続内にあるからである。システムはまた、親ＰＲコンテナ外に位置するセルに接続されていない、除去されているＰＲモジュールの境界上に位置するＰＰＬＯＣを除去する。たとえば、システムはＰＰＬＯＣ  Ｐ５を除去する。なぜなら、ＰＰＬＯＣ  Ｐ５がＰＲコンテナ５３０に位置するセルＫへの接続内にあるからである。システムはまた、ＰＰＬＯＣ  Ｐ８を除去する。なぜなら、ＰＰＬＯＣ  Ｐ８がＰＲモジュール５３５の境界上にあり、接続の他端がＰＲコンテナ５３０の境界上の別のＰＰＬＯＣ  Ｐ３に通じているからである。
【００８４】
配置およびルーティングのために、システムは、図８に関連付けて説明されるような配置およびルーティング技術を用いてもよい。たとえば、図１０Ｂおよび図１０Ｃを参照すると、ネットリスト１００５を配置する際、システムは、ＰＲモジュール５２５に対応するＰＲ領域内にネットリスト１００５のコンポーネントを配置してもよい。ＰＲモジュール５２５をルーティングする際、システムは、ＰＲモジュール５２５に対応するＰＲ領域を越えて延在する領域内に位置するルーティングリソースを用いてもよい。同様に、システムは、ＰＲモジュール５１０に対応するＰＲ領域内にネットリスト１０１０のコンポーネントを配置してもよい。システムは、ネットリスト１０１０をルーティングする際、ＰＲモジュール５１０に対応するＰＲ領域を越えて延在する領域内に位置するルーティングリソースを用いてもよい。
【００８５】
図１２は、ＩＣ内に回路を実装する例示的な方法１２００を示す。方法１２００は、ターゲットＩＣ内に階層型部分的再構成を実装するために、ホストシステム（たとえば、図１のプロセッサ１０５）によって実行され得る。より具体的には、方法１２００は、ランタイム中に本明細書で説明するように回路のうち複数の異なる領域を実装するためにハードウェアアクセラレータとしてターゲットＩＣを用いるホストシステムによって実行されてもよい。図１２に関連付けて説明されるさまざまな領域の実装は、ホストシステムの制御下で内部に部分的ビットストリームをロードすることによって、ターゲットＩＣの部分的再構成を用いて実行されてもよい。
【００８６】
ブロック１２０５において、ホストシステムは、ターゲットＩＣのスタティック領域内に第１の回路を実装することができる。第１の回路は、ターゲットＩＣにロードされる第１の部分的ビットストリームによって指定され得る。ブロック１２１０において、ホストシステムは、ターゲットＩＣのＰＲコンテナ領域内に第２の回路を実装することができる。第２の回路は、ターゲットＩＣにロードされる第２の部分的ビットストリームによって指定され得る。
【００８７】
ブロック１２１５において、ホストシステムは、ＰＲコンテナ領域内に含まれる第１のＰＲ領域内に第３の回路を実装するとともに、ＰＲコンテナ領域内に含まれる第２のＰＲ領域内に第４の回路を実装することができる。第３の回路は、ターゲットＩＣにロードされる第３の部分的ビットストリームによって指定され得る。第４の回路は、ターゲットＩＣにロードされる第４の部分的ビットストリームによって指定され得る。
【００８８】
ホストシステムは、第１の回路、第２の回路および第４の回路が途切れることなく動作し続けている間、複数のＰＲ領域のうち一方の領域または両方の領域内に異なる回路を実装するなどのさらなる動作を実行し得る。
【００８９】
ホストシステムは、さらなる部分的なビットストリームをロードして、中に１つ以上の異なるＰＲ領域を含む完全に異なるＰＲコンテナ領域をターゲットＩＣにおいて実装してもよい。ホストは、或る異なる部分的ビットストリームをターゲットＩＣ内にロードすることによって、それぞれのＰＲ領域内に異なる回路を実装してもよい。
【００９０】
図１３は、ＩＣのための例示的なアーキテクチャ１３００を示す。一局面においては、アーキテクチャ１３００はプログラマブルＩＣ内に実装され得る。たとえば、アーキテクチャ１３００は、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）を実装するために用いられてもよい。アーキテクチャ１３００はまた、システムオンチップ（system-on-chip：ＳＯＣ）タイプのＩＣの典型例でもあってもよい。ＳＯＣは、プログラムコードを実行するプロセッサと１つ以上の他の回路とを含むＩＣである。他の回路は、ハードワイヤード回路、プログラマブル回路および／またはそれらの組み合わせとして実装されてもよい。これらの回路は、互いに協働して、および／またはプロセッサと協働して、動作し得る。
【００９１】
図示のとおり、アーキテクチャ１３００は、いくつかの異なる種類のプログラマブル回路（たとえば論理ブロック）を含む。たとえば、アーキテクチャ１３００は、マルチギガビットトランシーバ（multi-gigabit transceiver：ＭＧＴ）１３０１、構成可能な論理ブロック（ＣＬＢ）１３０２、ランダムアクセスメモリブロック（random access memory block：ＢＲＡＭ）１３０３、入力／出力ブロック（ＩＯＢ）１３０４、構成およびクロック論理（configuration and clocking logic：ＣＯＮＦＩＧ／ＣＬＯＣＫＳ）１３０５、デジタル信号処理ブロック（ＤＳＰ）１３０６、専用Ｉ／Ｏブロック１３０７（たとえば、構成ポートおよびクロックポート）、ならびに、他のプログラマブル論理１３０８、たとえばデジタルクロックマネージャ、アナログ−デジタル変換器、システム監視論理など、を含む多数のさまざまなプログラマブルタイルを含み得る。
【００９２】
いくつかのＩＣにおいては、各プログラマブルタイルはプログラマブル相互接続要素（interconnect element：ＩＮＴ）１３１１を含む。当該ＩＮＴ１３１１は、各々の隣接するタイルにおける対応するＩＮＴ１３１１へ／からの標準的な接続を有する。したがって、ＩＮＴ１３１１は、ひとまとめにして、図示されるＩＣのためのプログラマブル相互接続構造を実現する。図１３の上部に含まれる例によって示されるように、各々のＩＮＴ１３１１は、同じタイル内のプログラマブル論理要素へ／からの接続も含む。
【００９３】
たとえば、ＣＬＢ１３０２は、ユーザ論理に加えて単一のＩＮＴ１３１１を実現するようにプログラムされ得る構成可能な論理要素（configurable logic element：ＣＬＥ）１３１２を含んでもよい。ＢＲＡＭ１３０３は、１つ以上のＩＮＴ１３１１に加えて、ＢＲＡＭ論理要素（BRAM logic element：ＢＲＬ）１３１３を含んでもよい。典型的には、１つのタイルに含まれるＩＮＴ１３１１の数は、そのタイルの高さに左右される。図示されるように、ＢＲＡＭタイルは、５個のＣＬＢと同じ高さを有しているが、他の数（たとえば、４個）が用いられてもよい。ＤＳＰタイル１３０６は、適切な数のＩＮＴ１３１１に加えて、ＤＳＰ論理要素（DSP logic element：ＤＳＰＬ）１３１４を含んでもよい。ＩＯＢ１３０４は、たとえば、ＩＮＴ１３１１の１つのインスタンスに加えて、Ｉ／Ｏ論理要素（ＩＯＬ）１３１５の２つのインスタンスを含んでもよい。ＩＯＬ１３１５に接続される実際のＩ／Ｏパッドは、ＩＯＬ１３１５の区域に制限されない可能性もある。
【００９４】
図１３に示される例においては、ダイの中央付近の列状区域（たとえば、領域１３０５、１３０７および１３０８で形成される）は、構成、クロックおよび他の制御論理のために用いられてもよい。この列から延びる水平区域１３０９は、プログラマブルＩＣの幅にわたってクロックおよび構成信号を分配するために用いられてもよい。
【００９５】
図１３に示されるアーキテクチャを利用するいくつかのＩＣは、ＩＣの大部分を構成する規則的な列構造を乱す追加の論理ブロックを含む。これらの追加の論理ブロックは、プログラマブルブロックおよび／または専用回路であってもよい。たとえば、ＰＲＯＣ１３１０として示されるプロセッサブロックはＣＬＢおよびＢＲＡＭのいくつかの列にわたっている。
【００９６】
一局面においては、ＰＲＯＣ１３１０は、ＩＣのプログラマブル回路を実装するダイの一部として作製される専用回路（たとえばハードワイヤードプロセッサ）として実装されてもよい。ＰＲＯＣ１３１０は、複雑さの点で、個々のプロセッサ（たとえば、プログラムコードを実行可能な単一のコア）から、１つ以上のコア、モジュール、コプロセッサ、インターフェイスなどを有するプロセッサシステム全体までの範囲にわたる多種多様なプロセッサタイプおよび／またはシステムのいずれかを表し得る。
【００９７】
別の局面においては、ＰＲＯＣ１３１０は、アーキテクチャ１３００から省かれていてもよく、説明される他の多様なプログラマブルブロックのうちの１つ以上と置換えられてもよい。さらに、このようなブロックは、ＰＲＯＣ１３１０の場合と同様にプログラムコードを実行することができるプロセッサを形成するのにプログラマブル回路のさまざまなブロックが用いられ得るという点から、「ソフトプロセッサ」を形成するために利用され得る。
【００９８】
「プログラマブル回路」という語句は、ＩＣ内のプログラマブル回路要素（たとえば、本明細書中に記載されるさまざまなプログラマブルまたは構成可能な回路ブロックまたはタイル）、ならびにＩＣにロードされる構成データに従ってさまざまな回路ブロック、タイルおよび／または要素を選択的に結合する相互接続回路を指している。たとえば、ＰＲＯＣ１３１０外にある、図１３に示されるＣＬＢ１３０２およびＢＲＡＭ１３０３などの回路ブロックはＩＣのプログラマブル回路とみなされる。
【００９９】
一般に、プログラマブル回路の機能は、構成データがＩＣにロードされるまで確立されない。１セットの構成ビットを用いて、ＦＰＧＡなどのＩＣのプログラマブル回路をプログラムしてもよい。構成ビットは、通常、「構成ビットストリーム」と称される。一般に、プログラマブル回路は、最初にＩＣ内に構成ビットストリームをロードしなければ動作または機能し得ない。構成ビットストリームは、プログラマブル回路内で特定の回路設計を実質的に実装する。回路設計は、たとえば、プログラマブル回路ブロックの機能的局面およびさまざまなプログラマブル回路ブロック間の物理的接続性を指定する。
【０１００】
「ハードワイヤード」または「ハード化」された回路、すなわちプログラマブルでない回路はＩＣの一部として製造される。プログラマブル回路とは異なり、ハードワイヤード回路または回路ブロックは、構成ビットストリームをロードすることによるＩＣの製造後には実装されない。ハードワイヤード回路は、一般に、たとえば、最初に構成ビットストリームをＩＣ（たとえばＰＲＯＣ１３１０）にロードしなくても機能する専用の回路ブロックおよび相互接続を有するものとみなされる。
【０１０１】
場合によっては、ハードワイヤード回路は、ＩＣ内の１つ以上のメモリ要素に格納されたレジスタ設定または値に従って設定または選択され得る１つ以上の動作モードを有し得る。これらの動作モードは、たとえば、構成ビットストリームをＩＣにロードすることによって設定されてもよい。この能力にもかかわらず、ハードワイヤード回路はプログラマブル回路とは見なされない。なぜなら、ハードワイヤード回路は、ＩＣの一部として製造された場合に動作可能となり特定の機能を有するからである。
【０１０２】
ＳＯＣの場合、構成ビットストリームは、プログラマブル回路内において実装されるべき回路と、ＰＲＯＣ１３１０またはソフトプロセッサによって実行されるべきプログラムコードとを指定し得る。場合によっては、アーキテクチャ１３００は、構成ビットストリームを適切な構成メモリおよび／またはプロセッサメモリにロードする専用の構成プロセッサを含む。専用の構成プロセッサは、ユーザが指定したプログラムコードを実行しない。他の場合、アーキテクチャ１３００は、ＰＲＯＣ１３１０を利用して構成ビットストリームを受信し、構成ビットストリームを適切な構成メモリにロードし、および／または、プログラムコードを抽出して実行してもよい。
【０１０３】
図１３は、プログラマブル回路（たとえば、プログラマブルファブリック）を含むＩＣを実装するために使用され得る例示的なアーキテクチャを示すよう意図されている。たとえば、或る列における論理ブロックの数、いくつかの列の相対幅、いくつかの列の数および順序、いくつかの列に含まれる論理ブロックのタイプ、論理ブロックの相対サイズ、および図１３の上部に含まれる相互接続／論理実装例は、単に例示的なものである。実際のＩＣでは、たとえば、ユーザ回路設計の効率的な実装を容易にするために、ＣＬＢがどこに現れても、典型的にはＣＬＢの２つ以上の隣接する列が含まれている。しかしながら、隣接するＣＬＢ列の数はＩＣの全体サイズに応じて異なっていてもよい。さらに、ＩＣ内のＰＲＯＣ１３１０などブロックのサイズおよび／または位置決めは、例示を目的としているに過ぎず、限定するものとして意図されているわけではない。
【０１０４】
たとえば、図１に関連付けて説明されるシステムは、図１３と同じまたは同様のアーキテクチャを有するＩＣ内で実装するために、本明細書中に説明される処理がなされた回路設計をさらに処理することができる。当該システムは、たとえば、回路設計を合成し、配置し、ルーティングすることができる。当該システムはまた、部分的再構成階層を指定の深さもしくは任意の深さにまで作成し、および／または、部分的再構成階層のレベルを減らすように再結合を実行し得る。当該システムは、ビットストリームがＩＣ内にロードされるように適切なビットストリーム（たとえば、部分的ビットストリーム）を生成してもよく、これにより、ＩＣ内で指定される任意のレベルの部分的再構成階層を含む回路設計を物理的に実装し得る。
【０１０５】
説明を目的として、本明細書中に開示されるさまざまな本発明の概念の充分な理解を促すために、具体的な名称が記載される。しかしながら、本明細書で使用される専門用語は、本発明の構成の特定の局面を説明することのみを目的としており、限定することを意図するものではない。
【０１０６】
本明細書で定義されるとおりでは、単数形「ａ」、「ａｎ」および「ｔｈｅ」は、文脈が明確にそうではないことを示さない限り、複数形も含むことが意図される。
【０１０７】
本明細書中で定義されるとおりでは、「概ね」という語は、ほぼ正確であるかまたは正確であること、厳密にではないが近い値または量であることを意味している。たとえば、「概ね」という語は、列挙された特徴、パラメータまたは値が正確な特徴、パラメータまたは値の所定量内にあることを意味してもよい。
【０１０８】
本明細書で定義されるとおりでは、「少なくとも１つ」、「１つ以上の」および「および／または」という語句は、別段の明示的な記載がない限り、動作において接続的であるとともに離接的であるオープンエンド表現である。たとえば、「Ａ、Ｂ、およびＣのうち少なくとも１つ」、「Ａ、Ｂ、またはＣのうち少なくとも１つ」、「Ａ、Ｂ、およびＣのうちの１つ以上」、「Ａ、Ｂ、またはＣのうちの１つ以上」、ならびに「Ａ、Ｂ、および／またはＣ」という表現の各々は、Ａのみ、Ｂのみ、Ｃのみ、ＡおよびＢを一緒に、ＡおよびＣを一緒に、ＢおよびＣを一緒に、またはＡ、ＢおよびＣを一緒に、を意味する。
【０１０９】
本明細書で定義されるとおりでは、「自動的に」という語は、人の介入を伴わないことを意味する。本明細書で定義されるとおりでは、「ユーザ」という語は人を意味する。
【０１１０】
本明細書で定義されるとおりでは、「コンピュータ読取り可能記憶媒体」という語は、命令実行システム、装置もしくはデバイスによって用いられるかまたは命令実行システム、装置もしくはデバイスに関連付けて用いられるプログラムコードを含むかまたは格納する記憶媒体を意味する。本明細書で定義されるとおりでは、「コンピュータ読取り可能記憶媒体」は、それ自体が一時的な伝搬信号ではない。コンピュータ読取り可能記憶媒体は、電子ストレージデバイス、磁気ストレージデバイス、光ストレージデバイス、電磁ストレージデバイス、半導体ストレージデバイス、またはこれらの任意の適切な組合わせであり得るが、これらに限定されない。本明細書で説明するメモリのさまざまな形態は、コンピュータ読取り可能記憶媒体の例である。コンピュータ読取り可能記憶媒体のより具体的な例の非網羅的なリストは、ポータブルコンピュータディスケット、ハードディスク、ＲＡＭ、読取り専用メモリ（ＲＯＭ）、消去可能なプログラマブル読取り専用メモリ（ＥＰＲＯＭまたはフラッシュメモリ）、電子的に消去可能なプログラマブル読取り専用メモリ（electronically erasable programmable read-only memory：ＥＥＰＲＯＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ポータブルコンパクトディスク読取り専用メモリ（portable compact disc read-only memory：ＣＤ−ＲＯＭ）、デジタル多用途ディスク（digital versatile disk：ＤＶＤ）、メモリスティック、フロッピー（登録商標）ディスク等を含み得る。
【０１１１】
本明細書で定義されるとおりでは、「場合（if）」という語は、文脈に応じて、「とき（when）」または「〜すると（upon）」または「〜に応答して（in response to）」または「〜に応じて（responsive to）」を意味する。従って、「判断される場合には（if it is determined）」または「［述べられた条件もしくはイベント］が検出される場合には（if [a stated condition or event] is detected）」という表現は、文脈に応じて、「〜と判断されると（upon determining）」または「〜と判断することに応答して（in response to determining）」または「［述べられた条件もしくはイベント］を検出すると（upon detecting [the stated condition or event]）」または「［述べられた条件もしくはイベント］を検出することに応答して（in response to detecting [the stated condition or event］）」または「［述べられた条件もしくはイベント］を検出することに応じて（responsive to detecting [the stated condition or event］）」を意味すると解釈され得る。
【０１１２】
本明細書で定義されるとおりでは、「〜に応じて（responsive to）」という文言、および上記で記載されるような同様の文言、たとえば、「場合（if）」、「とき（when）」、または「〜すると（upon）」は、アクションまたはイベントに容易に応答または反応することを意味する。応答または反応は自動的に行われる。したがって、第２のアクションが第１のアクションに「応じて」実行される場合、第１のアクションの発生と第２のアクションの発生との間には因果関係が存在する。「応じて（responsive to）」という表現は因果関係を示す。
【０１１３】
本明細書で定義されるとおりでは、「一実施形態」、「ある実施形態」、「１つ以上の実施形態」、「特定の実施形態」または同様の文言は、実施形態に関連付けて記載される特定の特徴、構造または特性が、本開示内に記載される少なくとも１つの実施形態に含まれることを意味する。したがって、本開示全体を通して「一実施形態において」、「ある実施形態において」、「１つ以上の実施形態において」、「特定の実施形態において」、および同様の文言があっても、これらが必ずしも全て同じ実施形態を指すわけではない。「実施形態」および「構成（arrangement）」という語は、本開示内で互換的に使用される。
【０１１４】
本明細書で定義されるとおりでは、「プロセッサ」という語は、少なくとも１つのハードウェア回路を意味する。ハードウェア回路は、プログラムコードに含まれる命令を実行するように構成されてもよい。ハードウェア回路は集積回路であってもよい。プロセッサの例は、中央処理ユニット（central processing unit：ＣＰＵ）、アレイプロセッサ、ベクトルプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、ＦＰＧＡ、プログラマブル論理アレイ（programmable logic array：ＰＬＡ）、ＡＳＩＣ、プログラマブル論理回路、およびコントローラを含むが、これらに限定されない。
【０１１５】
本明細書で定義されるとおりでは、「出力」という語は、物理的メモリ要素（たとえば、デバイス）への格納、ディスプレイまたは他の周辺出力デバイスへの書込み、別のシステムへの送信または伝送、エクスポートなどを意味する。
【０１１６】
本明細書で定義されるとおりでは、「実質的に」という語は、記載される特徴、パラメータまたは値が厳密に達成される必要はないが、たとえば、公差、測定誤差、測定精度の限度、および当業者に公知の他の因子を含む偏差またはばらつきが、当該特徴によって与えられるよう意図された効果を排除しない分量で発生し得ることを意味する。
【０１１７】
第１、第２などの語は、本明細書中では、さまざまな要素を記述するために用いられ得る。これらの要素は、特に指定のない限り、または文脈によって明記されない限り、１つの要素を別の要素から区別するためにのみ用いられるので、これらの語によって限定されるべきではない。
【０１１８】
コンピュータプログラムプロダクトは、本明細書中に記載される本発明の構成の局面をプロセッサに実行させるためのコンピュータ読取り可能プログラム命令が格納されたコンピュータ読取り可能記憶媒体（または複数のコンピュータ読取り可能記憶媒体）を含み得る。本開示内で、「プログラムコード」という語は、「コンピュータ読取り可能プログラム命令」という語と置き換えて用いられる。本明細書中に記載されるコンピュータ読取り可能プログラム命令は、コンピュータ読取り可能記憶媒体からそれぞれの計算／処理装置に、または、たとえばインターネット、ＬＡＮ、ＷＡＮおよび／もしくはワイヤレスネットワークなどのネットワークを介して外部のコンピュータもしくは外部ストレージデバイスにダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータ、および／または、エッジサーバを含むエッジデバイス、を含み得る。各々の計算／処理装置内のネットワークアダプタカードまたはネットワークインターフェイスは、ネットワークからコンピュータ読取り可能プログラム命令を受信し、それぞれの計算／処理装置内のコンピュータ読取り可能記憶媒体に格納するために当該コンピュータ読取り可能プログラム命令を転送する。
【０１１９】
本明細書で説明する本発明の構成のための動作を実行するためのコンピュータ読取り可能プログラム命令は、アセンブラ命令、命令セットアーキテクチャ（instruction-set-architecture：ＩＳＡ）命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、または、オブジェクト指向プログラミング言語および／もしくは手続き型プログラミング言語を含む１つ以上のプログラミング言語の任意の組合わせで書かれたソースコードもしくはオブジェクトコードのいずれかであり得る。コンピュータ読取り可能プログラム命令は状態設定データを含み得る。コンピュータ読取り可能プログラム命令は、全体的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、独立型ソフトウェアパッケージとして、部分的にユーザのコンピュータ上で、部分的に遠隔コンピュータ上で、または完全に遠隔コンピュータもしくはサーバ上で実行されてもよい。後者のシナリオでは、遠隔コンピュータは、ＬＡＮもしくはＷＡＮを含む任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよく、または、接続は、（たとえば、インターネットサービスプロバイダを用いるインターネットを通じて）外部コンピュータに接続されてもよい。場合によっては、たとえば、プログラマブル論理回路、ＦＰＧＡまたはＰＬＡを含む電子回路は、本明細書中に記載される本発明の構成の局面を実行するために、電子回路を個人化するためのコンピュータ読取り可能プログラム命令の状態情報を利用することによって、コンピュータ読取り可能プログラム命令を実行してもよい。
【０１２０】
本発明の構成のいくつかの局面は、本明細書では、方法、装置（システム）およびコンピュータプログラムプロダクトのフローチャート図および／またはブロック図を参照して説明される。フローチャート図および／またはブロック図の各ブロック、ならびにフローチャート図および／またはブロック図におけるブロックの組合わせは、コンピュータ読取り可能プログラム命令（たとえばプログラムコード）によって実装され得ることを理解されたい。
【０１２１】
これらのコンピュータ読取り可能プログラム命令は、マシンを生成するように汎用コンピュータ、専用コンピュータまたは他のプログラマブルデータ処理装置のプロセッサに提供され得ることで、当該コンピュータまたは他のプログラマブルデータ処理装置のプロセッサを介して実行される命令が、フローチャートおよび／またはブロック図のブロックまたは複数のブロックにおいて指定される機能／動作を実装するための手段を作成するようにし得る。これらのコンピュータ読取り可能プログラム命令はまた、コンピュータ、プログラマブルデータ処理装置および／または他のデバイスに特定の態様で機能するように命令することができるコンピュータ読取り可能記憶媒体に格納されてもよく、このため、命令が格納されたコンピュータ読取り可能記憶媒体は、フローチャートおよび／またはブロック図のブロックまたは複数のブロックにおいて指定される動作の局面を実装する命令を含む製品を備えることとなる。
【０１２２】
コンピュータ読取り可能プログラム命令はまた、コンピュータ、他のプログラマブルデータ処理装置または他のデバイス上にロードされて、一連の動作をコンピュータ、他のプログラマブル装置または他のデバイス上で実行させて、コンピュータ実装プロセスを生成することで、コンピュータ、他のプログラマブル装置または他のデバイス上で実行される命令がフローチャートおよび／またはブロック図のブロックまたは複数のブロックにおいて指定される機能／動作を実装するようにしてもよい。
【０１２３】
図中のフローチャートおよびブロック図は、本発明の構成のさまざまな局面に従ったシステム、方法およびコンピュータプログラムプロダクトの実現可能な実装例のアーキテクチャ、機能および動作を示す。この点に関して、フローチャートまたはブロック図における各ブロックは、指定された動作を実装するための１つ以上の実行可能な命令を含む、モジュール、セグメントまたは命令の一部を表し得る。
【０１２４】
いくつかの代替的な実装例においては、ブロックに記載される動作は、図に記載される順序通りに行われない場合もある。たとえば、連続して示される２つのブロックは、関連する機能に応じて、実質的に同時に実行されてもよく、またはこれらブロックは逆の順序で実行されてもよい。他の例においては、ブロックは概して昇順で実行され得る一方で、さらに他の例においては、１つ以上のブロックが異なる順序で実行される場合もある。この場合、直後に追従していない後続および他のブロックに結果が格納されて利用されてもよい。また、ブロック図および／またはフローチャート図の各ブロック、ならびにブロック図および／またはフローチャート図のブロックの組合わせは、指定された機能もしくは動作を実行するか、または専用ハードウェアおよびコンピュータ命令の組み合わせを実行する専用のハードウェアベースのシステムによって実装され得ることにも留意されたい。
【０１２５】
添付の特許請求の範囲に見出され得るすべてのミーンズプラスファンクション要素またはステッププラスファンクション要素の対応する構造、材料、動作および同等例は、具体的に特許請求される他の特許請求される要素と組合わせて機能を実行するための任意の構造、材料または動作を含むよう意図されている。
【０１２６】
１つ以上の実施形態においては、方法は、コンピュータハードウェアを用いて、回路設計の第１の部分的再構成モジュールを第１の部分的再構成コンテナに変換するステップを含み得る。ここで、当該回路設計が配置およびルーティングされる。当該方法はさらに、当該コンピュータハードウェアを用いて、最初は空である第１の複数の部分的再構成モジュールを含む第１のネットリストを当該第１の部分的再構成コンテナにロードするステップと、当該コンピュータハードウェアを用いて、当該第１の複数の部分的再構成モジュールの各々内にさらなるネットリストを含めるステップと、当該コンピュータハードウェアを用いて、当該１の部分的再構成コンテナと当該第１の部分的再構成コンテナ内の当該第１の複数の部分的再構成モジュールとを実装するステップとを含み得る。
【０１２７】
一局面においては、当該方法は、当該第１の複数の部分的再構成モジュールの各々ごとに、第１の部分的再構成モジュールフロアプランを生成するステップを含み得る。各々の第１の部分的再構成モジュールフロアプランは、当該第１の部分的再構成コンテナのフロアプラン内に含まれており、当該第１の複数の部分的再構成モジュールのそれぞれを実装するために用いられる。
【０１２８】
別の局面においては、当該第１の部分的再構成コンテナを実装するステップは、当該第第１の複数の部分的再構成モジュールの各々の回路要素が、それぞれ対応する第１の部分的再構成モジュールフロアプランによって指定される境界内に位置するように、当該第１の部分的再構成コンテナと当該第１の複数の部分的再構成モジュールの各々とを配置およびルーティングするステップを含み得る。
【０１２９】
別の局面においては、当該変換するステップは、当該第１のネットリストをロードするステップの前に当該第１の部分的再構成モジュールの内容を空にするステップを含み得る。
【０１３０】
別の局面においては、当該方法は、当該第１の複数の部分的再構成モジュールのうち選択された１つの第１の部分的再構成モジュールへの接続のパーティションピンを、当該第１の部分的再構成コンテナの境界から、当該第１の複数の部分的再構成モジュールのうち当該選択された１つの第１の部分的再構成モジュールの境界に移動させるステップを含み得る。
【０１３１】
別の局面においては、当該方法は、当該第１の複数の部分的再構成モジュールのための境界を指定するユーザ入力を受信するステップを含み得る。
【０１３２】
別の局面においては、当該方法は、当該第１の複数の部分的再構成モジュールのうち少なくとも１つの選択された部分的再構成モジュールについて、当該少なくとも１つの選択された部分的再構成モジュールを第２の部分的再構成コンテナに変換して、当該第２の部分的再構成コンテナ内に第２の複数の部分的再構成モジュールを実装するステップを含み得る。
【０１３３】
１つ以上の実施形態においては、方法は、第１の部分的ビットストリームによって指定される第１の回路をプログラマブル集積回路のスタティック領域内に実装するステップと、第２の部分的ビットストリームによって指定される第２の回路を当該プログラマブル集積回路の部分的再構成コンテナ領域内に実装するステップと、当該部分的再構成コンテナ領域内に含まれる第１の部分的再構成領域内に第３の回路を実装し、当該部分的再構成コンテナ領域内に含まれる第２の部分的再構成領域内に第４の回路を実装するステップとを含み得る。当該第３の回路は第３の部分的ビットストリームによって指定されており、当該第４の回路は第４の部分的ビットストリームによって指定されている。
【０１３４】
一局面においては、当該方法は、当該第１の回路、当該第２の回路および当該第４の回路が途切れることなく動作し続けている間、当該第１の部分的再構成領域内に第５の回路を実装するステップを含み得る。第５の回路を第３の回路と置換えてもよい。
【０１３５】
別の局面においては、当該第５の回路は、第５の部分的ビットストリームによって指定される。
【０１３６】
別の局面においては、当該方法は、当該第１の回路および当該第２の回路が途切れることなく動作し続けている間、当該第１の部分的再構成領域内に第５の回路を実装するとともに、当該第２の部分的再構成領域内に第６の回路を実装するステップを含み得る。当該第５の回路は当該第３の回路と置換えてもよく、当該第６の回路は当該第４の回路と置換えてもよい。
【０１３７】
別の局面においては、当該第５の回路は、第５の部分的ビットストリームによって指定されてもよく、当該第６の回路は第６の部分的ビットストリームによって指定されてもよい。
【０１３８】
別の局面においては、当該方法は、第５の部分的ビットストリームによって指定される第５の回路を当該プログラマブル集積回路の当該部分的再構成コンテナ領域内に実装するステップを含み得る。当該方法はまた、当該部分的再構成コンテナ領域内で、第３の部分的再構成領域内に第６の回路を実装するとともに第４の部分的再構成領域内に第７の回路を実装するステップを含み得る。当該第６の回路は第６の部分的ビットストリームによって指定されており、当該第７の回路は第７の部分的ビットストリームによって指定されている。
【０１３９】
１つ以上の実施形態において、集積回路は、外部デバイスとのインターフェイスを実装するように構成された第１のプログラマブル回路を含むスタティック領域と、当該スタティック領域に結合される部分的再構成コンテナ領域とを含み、当該部分的再構成コンテナ領域は、第２のプログラマブル回路を用いて当該スタティック領域へのインターフェイスを実装する。当該部分的再構成コンテナ領域は第１の複数の部分的再構成領域を含み、第１の複数の部分的再構成領域のうち少なくとも１つが当該部分的再構成コンテナ領域に結合される。
【０１４０】
一局面においては、当該第１の複数の部分的再構成領域のうち選択された部分的再構成領域内の回路は、当該スタティック領域および当該部分的再構成コンテナ領域が途切れることなく動作し続けている間、当該集積回路の動作中に変更される、
別の局面においては、当該第１の複数の部分的再構成領域の各々内における回路は、当該スタティック領域および当該部分的再構成コンテナ領域が途切れることなく動作し続けている間、当該集積回路の動作中に変更される。
【０１４１】
別の局面においては、当該第１の複数の部分的再構成領域の数はユーザ指定である。
別の局面においては、当該第１の複数の部分的再構成領域の複数の境界はユーザ指定である
別の局面においては、当該部分的再構成コンテナ領域は、第２の複数の部分的再構成領域を含むさらなる部分的再構成コンテナ領域を含む。
【０１４２】
別の局面においては、当該第１の複数の部分的再構成領域のうち各々の部分的再構成領域と、当該第２の複数の部分的再構成領域のうち各々の部分的再構成領域とは、独立して再構成可能である。
【０１４３】
本明細書中に提供される本発明の構成の説明は、例示を目的としたものであって、網羅的であるよう意図されたものはなく、または、開示される形態および例に限定されるよう意図されたものはない。本明細書で用いられる専門用語は、本発明の構成の原理、市場で見られる技術に対する実用的な応用例もしくは技術的改善例を説明するために、および／または、当業者が本明細書中に開示される本発明の構成を理解することを可能にするために、選択された。当業者にとって、記載された発明の構成の範囲および精神から逸脱することのない範囲での変更および変形が明らかになるだろう。したがって、このような特徴および実装の範囲を示すものとして、上述の開示ではなく添付の特許請求の範囲が参照されるべきである。
【図１】
2021530809.tif 000003
【図２】
2021530809.tif 000004
【図３】
2021530809.tif 000005
【図４】
2021530809.tif 000006
【図５Ａ】
2021530809.tif 000007
【図５Ｂ】
2021530809.tif 000008
【図５Ｃ】
2021530809.tif 000009
【図５Ｄ】
2021530809.tif 000010
【図５Ｅ】
2021530809.tif 000011
【図５Ｆ】
2021530809.tif 000012
【図５Ｇ】
2021530809.tif 000013
【図６】
2021530809.tif 000014
【図７】
2021530809.tif 000015
【図８】
2021530809.tif 000016
【図９】
2021530809.tif 000017
【図１０Ａ】
2021530809.tif 000018
【図１０Ｂ】
2021530809.tif 000019
【図１０Ｃ】
2021530809.tif 000020
【図１０Ｄ】
2021530809.tif 000021
【図１０Ｅ】
2021530809.tif 000022
【図１１】
2021530809.tif 000023
【図１２】
2021530809.tif 000024
【図１３】
2021530809.tif 000025
【国際調査報告】
2021530809.tif 000026
2021530809.tif 000027