(57)【要約】プログラマブルデバイスは、複数の構成可能論理ブロックをそれぞれ含む１つ以上のプログラミング領域を備え、複数の構成可能論理ブロックの各々は、プログラム可能な相互接続ファブリックを介して任意の他の構成可能論理ブロックに選択的に接続可能である。プログラマブルデバイスは、命令ストリーム内の命令に応じて、他のプログラミング領域の何れかとは独立してプログラミング領域内の１つ以上の構成可能論理ブロックのハードウェアを再構成するように構成された構成ロジックをさらに備える。【選択図】図１
2018530025.tif 000002
【特許請求の範囲】
【請求項１】
複数の構成可能論理ブロックを含む１つ以上のプログラミング領域と、
構成ロジックと、を備え、
前記複数の構成可能論理ブロックの各々は、プログラマブル相互接続ファブリックを介して前記複数の構成可能論理ブロックの他の構成可能論理ブロックに選択的に接続可能であり、
前記１つ以上のプログラミング領域のうち第１プログラミング領域は、命令ストリーム内の第１命令を実行するように構成されており、
前記構成ロジックは、前記命令ストリーム内の第２命令に応じて、前記第１プログラミング領域において、前記１つ以上のプログラミング領域の他のプログラミング領域から独立して、前記複数の構成可能論理ブロックのうち１つ以上の構成可能論理ブロックのハードウェアを再構成するように構成されている、
プログラマブルデバイス。
【請求項２】
各プログラミング領域は、前記プログラミング領域用の複数の選択可能な構成を記憶するように構成された構成メモリと接続され、前記構成ロジックは、前記プログラミング領域の前記構成メモリに記憶された前記複数の選択可能な構成のうち選択された構成に基づいて、前記プログラミング領域を再構成するように構成されている、請求項１のプログラマブルデバイス。
【請求項３】
前記構成メモリは、スタティックランダムアクセスメモリ（ＳＲＡＭ）を備える、請求項２のプログラマブルデバイス。
【請求項４】
前記構成メモリは、他のプログラミング領域よりも前記プログラミング領域の近くに配置されている、請求項２のプログラマブルデバイス。
【請求項５】
前記第１プログラミング領域は、前記第１プログラミング領域内の前記複数の構成可能論理ブロックのうち１つ以上の構成可能論理ブロックのハードウェアの再構成後に、前記第２命令を実行するように構成されており、前記命令ストリームは、単一のコンピュータプログラムを定義する命令のサブセットを少なくとも含む連続命令ストリームであり、前記第２命令は、前記命令ストリーム内の前記第１命令の次に続く命令である、請求項１のプログラマブルデバイス。
【請求項６】
プログラミング領域を他のプログラミング領域から電気的に隔離するように構成された前記プログラマブル相互接続ファブリック内の境界スイッチのセットを備える、請求項１のプログラマブルデバイス。
【請求項７】
前記第２命令は、前記第１プログラミング領域を識別し、前記第１プログラミング領域の選択された構成を識別する再構成命令である、請求項１のプログラマブルデバイス。
【請求項８】
前記１つ以上の構成可能論理ブロックのハードウェアの再構成前に、前記第１プログラミング領域のコンテキストデータを記憶するように構成されたコンテキストメモリを備える、請求項１のプログラマブルデバイス。
【請求項９】
前記プログラマブルデバイスは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）デバイスである、請求項１のプログラマブルデバイス。
【請求項１０】
前記プログラマブルデバイスは、シリコン貫通ビア（ＴＳＶ）によって接続された複数の積層ダイのうち１つの積層ダイに存在する、請求項１のプログラマブルデバイス。
【請求項１１】
複数の命令の各々について構成ビットストリームのアドレスを記憶するように構成された機能テーブルを備え、前記構成ロジックは、前記第２命令に対応する構成ビットストリームのアドレスを前記機能テーブルから識別するように構成されている、請求項１のプログラマブルデバイス。
【請求項１２】
命令ストリーム内の第１命令を受信したことに応じて、プログラマブルデバイス内の１つ以上のプログラミング領域のうち第１プログラミング領域において前記第１命令を実行することと、
前記命令ストリーム内の第２命令を受信したことに応じて、前記第１プログラミング領域において、前記１つ以上のプログラミング領域の他のプログラミング領域から独立して、複数の構成可能論理ブロックのうち１つ以上の構成可能論理ブロックのハードウェアを再構成することと、
を含む、方法。
【請求項１３】
前記１つ以上のプログラミング領域のプログラミング領域毎に、
前記プログラミング領域用の複数の選択可能な構成を記憶し、
前記プログラミング領域の構成メモリに記憶された前記複数の選択可能な構成のうち選択された構成に基づいて、前記プログラミング領域を再構成すること、を含む、請求項１２の方法。
【請求項１４】
前記第２命令は、前記第１プログラミング領域を識別し、前記第１プログラミング領域の前記選択された構成を識別する再構成命令であり、前記第１プログラミング領域を再構成することは、前記第２命令に基づいて、前記第１プログラミング領域の前記構成メモリに記憶された前記複数の選択可能な構成のうち１つの構成を選択することを含む、請求項１３の方法。
【請求項１５】
前記第１プログラミング領域内の前記複数の構成可能論理ブロックのうち１つ以上の構成可能論理ブロックのハードウェアの再構成後に、前記第２命令を実行することを含み、
前記命令ストリームは、単一のコンピュータプログラムを定義する命令のサブセットを少なくとも含む連続命令ストリームであり、前記第２命令は、前記命令ストリーム内の前記第１命令の次に続く命令である、請求項１２の方法。
【請求項１６】
前記第１プログラミング領域を、前記複数の構成可能論理ブロックを接続するプログラマブル相互接続ファブリック内の境界スイッチのセットを介して、前記１つ以上のプログラミング領域の他のプログラミング領域から隔離することを含む、請求項１２の方法。
【請求項１７】
前記１つ以上の構成可能論理ブロックにおいて前記ハードウェアを再構成する前に、前記第１プログラミング領域のコンテキストデータをコンテキストメモリに記憶することを含む、請求項１２の方法。
【請求項１８】
前記プログラマブルデバイスは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）デバイスである、請求項１２の方法。
【請求項１９】
前記プログラマブルデバイスは、シリコン貫通ビア（ＴＳＶ）によって接続された複数の積層ダイのうち１の積層ダイに存在する、請求項１２の方法。
【請求項２０】
複数の命令の各々について構成ビットストリームのアドレスを機能テーブルに記憶することと、
前記第２命令に対応する構成ビットストリームのアドレスを前記機能テーブルから識別することと、を含む、請求項１２の方法。
【請求項２１】
命令ストリーム内の複数の命令をディスパッチするように構成されたプロセッサと、
前記プロセッサと接続されたプログラマブルデバイスと、を備え、
前記プログラマブルデバイスは、
複数の構成可能論理ブロックを含む１つ以上のプログラミング領域と、
構成ロジックと、を備え、
各構成可能論理ブロックは、プログラマブル相互接続ファブリックを介して他の構成可能論理ブロックに選択的に接続可能であり、前記１つ以上のプログラミング領域のうち第１プログラミング領域は、命令ストリーム内の第１命令を実行するように構成されており、
前記構成ロジックは、前記命令ストリーム内の第２命令に応じて、前記第１プログラミング領域において、他のプログラミング領域から独立して、前記第１プログラミング領域内の前記複数の構成可能論理ブロックのうち１つ以上の構成可能論理ブロックのハードウェアを再構成するように構成されている、
コンピューティングシステム。
【請求項２２】
プログラミング領域毎に、前記プログラミング領域用の複数の選択可能な構成を記憶するように構成された構成メモリを備え、
前記構成メモリは、前記プログラマブルデバイス上に積層されたダイナミックランダムアクセスメモリ（ＤＲＡＭ）内に配置され、１つ以上のシリコン貫通ビアを介して前記プログラミング領域に接続されている、請求項２１のコンピューティングシステム。
【請求項２３】
前記構成メモリに接続され、前記複数の選択可能な構成のうち選択された構成を前記構成メモリから受信し、前記選択された構成を前記プログラマブルデバイスに適用するように構成されたメモリコントローラを備える、請求項２２のコンピューティングシステム。
【請求項２４】
前記プログラマブルデバイスは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）デバイスを含む、請求項２１のコンピューティングシステム。
【請求項２５】
前記プログラマブルデバイスを含む第１集積回路ダイは、前記プロセッサを含む第２集積回路ダイ上に積層されており、前記第１集積回路ダイ及び前記第２集積回路ダイは、シリコン貫通ビア（ＴＳＶ）を介して接続されている、請求項２１のコンピューティングシステム。
【請求項２６】
複数の命令の各々について構成ビットストリームのアドレスを記憶するように構成された機能テーブルを備え、
前記構成ロジックは、前記第２命令に対応する構成ビットストリームのアドレスを前記機能テーブルから識別するように構成されている、請求項２１のコンピューティングシステム。
【請求項２７】
前記構成ロジックは、前記ハードウェアを第１ハードウェア構成から第２ハードウェア構成に再構成することによって、前記複数の構成可能論理ブロックのうち１つ以上の構成可能論理ブロックの前記ハードウェアを再構成するように構成されており、
前記コンピューティングシステムは、コンパイラを備え、
前記コンパイラは、
入力ソースコードに基づいて、前記ハードウェアが前記第２ハードウェア構成にある場合に、前記第１プログラミング領域で実行可能な第３命令を識別し、
前記第３命令を識別したことに応じて、前記命令ストリーム内の前記第３命令の前に前記第２命令を生成する、ように構成されている、請求項２１のコンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、プログラマブルデバイスの分野に関し、特に、命令ストリームの命令に応じて論理回路を再構成することに関する。
【背景技術】
【０００２】
フィールドプログラマブルゲート・アレイ（ＦＰＧＡ）は、製造後にエンドユーザにより構成されるように設計された集積回路デバイスである。一般に、ＦＰＧＡは、プログラマブル相互接続ファブリックを構成する相互接続リソースによって相互に接続された論理ブロックと呼ばれる、コミットされない回路素子のアレイを備える。相互接続リソースは、例えば、異なる構成で内部配線され得る論理ゲートを含むことができる。ＦＰＧＡ内の論理ブロックは、複雑な組み合わせ機能、又は、ＡＮＤやＸＯＲ等の論理機能を実行するように構成され得る。また、ＦＰＧＡ内の論理ブロックは、単純なフリップフロップ又はより完全なメモリブロックとして実装され得るメモリ要素を含むことができる。
【０００３】
ＦＰＧＡでは、論理ブロックは、ルックアップテーブル（ＬＵＴ）等の要素と、小型のスタティックランダムアクセスメモリ（ＳＲＡＭ）、又は、レジスタに値を挿入することによってプログラムされる他の固定機能と、を含むことができる。論理ブロックが使用可能になる前にプログラミングを実行する必要がある。プログラミングの後に、ＬＵＴへの機能入力の各組み合わせは、任意の論理機能の実行を可能にする所定の出力をもたらす。一般的なＦＰＧＡは、外部メモリデバイスと、構成のための単一の比較的遅いシリアルプログラミングポートと、に依存している。ＦＰＧＡは、通常、「構成モード」と、チップ全体がプログラム待ちのアイドル状態にあるか、プログラムされたチップが動作している「ユーザモード」と、を有する。
【０００４】
本開示は、限定ではなく例として、添付図面に示されている。
【図面の簡単な説明】
【０００５】
【図１】コンピューティングシステムの実施形態を示す図である。
【図２】一実施形態による、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）のコンポーネントを示す図である。
【図３】一実施形態による、機能テーブルの動作を示す図である。
【図４Ａ】一実施形態による、ダイスタックを示す図である。
【図４Ｂ】一実施形態による、ダイスタック内のシリコン貫通ビア（ＴＳＶ）を示す図である。
【図５Ａ】様々な実施形態による、ダイスタックを示す図である。
【図５Ｂ】様々な実施形態による、ダイスタックを示す図である。
【図５Ｃ】様々な実施形態による、ダイスタックを示す図である。
【図５Ｄ】様々な実施形態による、ダイスタックを示す図である。
【図６】一実施形態による、コンピューティングシステムにおいて命令を実行するプロセスを示すフロー図である。
【発明を実施するための形態】
【０００６】
以下の説明は、実施形態の良好な理解を提供するために、特定のシステム、コンポーネント、方法等の例のように複数の特定の詳細を説明する。しかしながら、少なくともいくつかの実施形態がこれらの特定の詳細なしに実施され得ることは、当業者には明らかであろう。他の例では、周知のコンポーネント又は方法は、実施形態を不要に不明瞭にすることを避けるために、詳細には記載されておらず、又は、単純なブロック図形式で示されている。したがって、記載された特定の詳細は単なる例示である。特定の実施態様は、これらの例示的な詳細と異なる可能性があるが、依然として実施形態の趣旨及び範囲内にあると考えられる。
【０００７】
プログラマブルデバイスの一実施形態は、命令ストリーム内の命令に基づいて互いに並列且つ独立して再構成可能な複数の構成ドメインを有するフィールドプログラマブルゲートアレイ（ＦＰＧＡ）である。複数の構成ドメインの各々の構成データを、構成データへ高帯域幅アクセスを提供する３次元（３Ｄ）積層メモリに記憶することができる。デバイス内のプログラマブルロジックを高帯域幅メモリと共に分割することによって、数クロックサイクル内でプログラマブルロジックを再構成することが可能になり、異なるタイプの命令に適応するように再構成することができる柔軟なパイプラインが可能になる。
【０００８】
命令ストリームの実行を中断することなく複数のタイプの命令の何れかを実行するように任意のパイプラインを再構成することができるので、柔軟なパイプラインの実装によって、固定機能を処理するパイプラインとは対照的に、命令スケジューリングにおいてより高い柔軟性を可能にする。このようなシステムでは、異なる機能を実行する異なるスレッドを、複数の実行レーンに亘って単一サイクルでスケジューリングすることができる。
【０００９】
図１は、複数の構成ドメインを有するプログラマブルデバイス（すなわち、ＦＰＧＡ１２０）を含むコンピューティングシステム１００の実施形態を示す図である。コンピューティングシステム１００は、シリコン貫通ビア（ＴＳＶ）１０４のセットによってコンピューティングシステム１００に実装されるバスを使用して相互に通信することの可能なコンポーネントを含む。ＴＳＶ１０４は、プロセッサロジックブロック１０５（プロセッサ１０１及びメモリコントローラ１０２を含む）と、メモリブロック１１０と、メモリブロック１１５と、ＦＰＧＡ１２０と、の間を接続し、通信を可能にする。一実施形態では、各ブロック１０５，１１０、１１５，１２０は、単一の集積回路ダイに対応する。代替の実施形態では、異なるブロックにあるように示されたコンポーネントは、同一のダイ上に集積されてもよく、同じブロックにあるように示されたコンポーネントは、複数のダイに分割されてもよい。
【００１０】
プロセッサ１０１は、ＴＳＶ１０４に接続された１つ以上の他のデバイスにアドレス指定されたＴＳＶ１０４を介してデータを送信することができ、ＴＳＶ１０４に接続された他のデバイスからデータを受信することもできる。また、プロセッサ１０１は、メモリサブシステム１１０に記憶された命令によって定義されるプログラムを実行することができ、これらの命令の一部又は全てを、ＦＰＧＡ１２０によって実行される命令ストリームにディスパッチすることができる。
【００１１】
ＦＰＧＡ１２０は、プログラミング領域１２２，１２３を含む。プログラミング領域１２２は、構成可能論理ブロック１３１〜１３４を含み、プログラミング領域１２３は、構成可能論理ブロック１３５〜１３８を含む。ＦＰＧＡ１２０内のプログラマブルロジックは、構成可能論理ブロック１３１〜１３８に存在しているので、別々に構成可能であり、プログラミング領域１２２，１２３の境界によって画定される複数の構成ドメインに分割される。図１は、ＦＰＧＡ１２０が２つのプログラミング領域１２２，１２３を含むように示しているが、代替の実施形態では、ＦＰＧＡ１２０は、３つ以上のプログラミング領域を含むことが可能である。代替の実施形態では、各プログラミング領域は、４つより少ない又は多い構成可能論理ブロックを含むこともできる。また、ＦＰＧＡ１２０は、構成データを受信し、受信した構成データにしたがってＦＰＧＡ１２０内の１つ以上のプログラミング領域を再構成する構成ロジック１２１を含む。
【００１２】
メモリ１１０は、ＦＰＧＡ１２０内のプログラミング領域の構成データを記憶する構成メモリ領域１１１，１１２を含む。構成メモリ領域１１１，１１２は、それぞれプログラミング領域１２２，１２３に対応し、これにより、構成メモリ１１１は、プログラミング領域１２２を構成するのに使用可能な構成データを記憶し、構成メモリ１１２は、プログラミング領域１２３を構成するのに使用可能な構成データを記憶する。構成メモリ領域１１１，１１２の各々は、プログラミング領域にプログラムするために選択することができる複数の構成状態（例えば、メモリ１１１の状態Ａ及びＢ、メモリ１１２の状態Ｃ及びＤ）を記憶する。例えば、構成メモリ１１１の状態Ａ又は状態Ｂは、対応するプログラミング領域１２２の構成を決定するために選択され得る。
【００１３】
また、メモリ１１０は、異なる構成に関連する状態情報を記憶するのに使用されるコンテキストメモリ１１３及びコンテキストメモリ１１４を含む。コンテキストメモリ１１３及びコンテキストメモリ１１４の各々は、プログラミング領域１２２，１２３の状態情報を記憶する。
【００１４】
メモリ１１５は、プログラミング領域１２２，１２３にそれぞれ対応するキャッシュ１１６及びキャッシュ１１７を含む。各キャッシュ１１６，１１７は、同じプログラミング領域に対応する構成メモリよりも低いレイテンシを有するメモリ技術（例えば、ＳＲＡＭ又はＳＴＴ−ＭＲＡＭ）を使用して実装される。例えば、構成メモリ１１１は、ＤＲＡＭを用いて実装され、キャッシュ１１６は、ＳＲＡＭ又はスピントランスファトルク磁気ランダムアクセスメモリ（ＳＴＴ−ＭＲＡＭ）を用いて実装されてもよい。低レイテンシメモリは、プログラミング領域内のハードウェアを再構成する時間を短縮するために、構成ビットストリームデータをキャッシュするために使用される。
【００１５】
コンピューティングシステム１００は、ＴＳＶ１０４に接続されたメモリコントローラ１０２を含み、メモリコントローラ１０２は、ＴＳＶ１０４に取り付けられた他のデバイス間の通信を容易にするロジックを含む。例えば、プロセッサ１０１は、メモリ領域１１１，１１２の何れかをアドレス指定することと、アドレス指定されたメモリ領域から一時バッファ（例えば、ＳＲＡＭ）へＴＳＶを介して構成データを読み出すことと、ＦＰＧＡ１２０をアドレス指定することと、対応するプログラミング領域１２２又はプログラミング領域１２３を再構成するためにＴＳＶを介して構成データをＦＰＧＡ１２０に書き込むことと、によって、構成メモリ領域１１１，１１２及びＦＰＧＡ１２０間の通信を容易にするようにメモリコントローラ１０２に指示してもよい。したがって、メモリコントローラ１０２は、コンピューティングシステム１００のこれらのコンポーネント間のデータ転送を調整する。
【００１６】
コンピューティングシステム１００において、メモリコントローラ１０２は、デバイス選択信号１０２ａを介してデバイスを選択することによって、ＴＳＶに接続される１つのデバイス（例えば、ＦＰＧＡ１２０又はメモリ１１０）と通信を確立する。代替の実施形態では、デバイス選択信号は、ＦＰＧＡ１２０及びメモリ１１０以外の追加デバイスに及ぶことができる。あるいは、他のアドレス指定方法を使用することもできる。例えば、選択されたデバイスのアドレスがＴＳＶ１０４を介して送信されてもよい。
【００１７】
コンピューティングシステム１００は、ソースコードに基づいて命令を生成するコンパイラ１０３を含む。コンパイラ１０３によって生成された命令はメモリサブシステム１１０に記憶され、プロセッサ１０１は、メモリサブシステム１１０から命令を取得して実行することができる。
【００１８】
図２は、ＦＰＧＡ１２０の実施形態の内部コンポーネントを示す図である。ＦＰＧＡ１２０は、論理ブロック（すなわち、ブロック１３１〜１４２）と呼ばれるプログラマブル回路要素のアレイと、論理ブロック１３１〜１４２を選択的に接続するために使用される相互接続リソース２２０〜２２２と、を備えるプログラマブルデバイスである。
【００１９】
ＦＰＧＡ１２０において、プログラミング領域１２２〜１２５の境界は破線で示されている。プログラミング領域１２２は、論理ブロック１３１〜１３４を含み、プログラミング領域１２３は、論理ブロック１３５〜１３８を含み、プログラミング領域１２４は、論理ブロック１３９，１４０を含み、プログラミング領域１２５は、論理ブロック１４１，１４２を含む。プログラミング領域１２２〜１２５は、ＦＰＧＡ１２０に含まれる論理ブロックを、互いに独立して動作及びプログラムできるか、より大きなプログラマブル領域として動作するように組み合わせることができる別々の構成ドメインに分割する。
【００２０】
プログラミング後に、プログラミング領域１２２〜１２５に含まれるロジックは、中央処理装置（ＣＰＵ）又はグラフィックス処理ユニット（ＧＰＵ）パイプラインの一部として使用することができる。したがって、プログラミング領域を使用して、ＣＰＵ又はＧＰＵからＦＰＧＡ１２０に提供される命令ストリームにおいて受信された１つ以上の命令を実行することができる。
【００２１】
図２に示すように、プログラミング領域１２２，１２３の各々は、４つの構成可能論理ブロックを含み、プログラミング領域１２４，１２５の各々は、２つの構成可能論理ブロックを含む。したがって、所定のプログラミング領域は、同じプログラマブルデバイス内の別のプログラミング領域と同じ数の構成可能論理ブロックを含む必要がない。代替の実施形態では、プログラミング領域は、図示された数よりも少ない又は多い構成可能論理ブロックを含むことができる。
【００２２】
構成可能論理ブロック１３１〜１４２の各々は、ルックアップテーブル（ＬＵＴ）及び固定機能ブロックを含む。プログラミングの後、ＬＵＴへの機能入力の各々の組み合わせは、任意の論理機能の実現を可能にする所定の出力をもたらす。構成可能論理ブロックの各々は、適切な値をＬＵＴ、及び、論理ブロック内のコンポーネント（例えば、ＬＵＴ、固定機能ブロック等）間の接続を制御する構成メモリ領域又はレジスタに書き込むことによって、様々な機能を実行するようにプログラムすることができる。
【００２３】
構成可能論理ブロック１３１〜１４２の各々はプログラマブル相互接続ファブリック２２０に接続され、プログラマブル相互接続ファブリック２２０は、ブロック１３１〜１４２が選択的に相互接続されるのを可能にする導電性トレース及びスイッチを含む。図２では、構成可能なロジック１３１をプログラマブル相互接続ファブリック２２０に接続する導電性トレースが示されている。また、他のブロック１３２〜１４２も導電性トレースを介して相互接続ファブリック２２０に接続される。しかし、これらのブロック１３２〜１４２を相互接続ファブリック２２０に接続する導電性トレースは、明瞭化のために図面から省略されている。
【００２４】
プログラマブル相互接続ファブリック２２０は、代替の実施形態では、図２に示されるものと一様ではない場合がある。例えば、相互接続ファブリックは、異なる長さを有する導電性トレースを含むことができ、又は、ＦＰＧＡ１２０の異なる領域に異なる数の平行な導電性トレースを含むことができる。相互接続ファブリック２２０の導電性トレースは、それらが交差するスイッチによって相互に接続される。例えば、複数のトレースが交差する領域２２１（点線で示される）は、２つの導電性トレース間の各交点間のスイッチを含む。あるいは、スイッチは、領域２２１内のいくつかの交点にのみ存在してもよい。
【００２５】
また、プログラマブル相互接続ファブリックは、１つのプログラミング領域内のコンポーネントを他のプログラミング領域から選択的に隔離するために使用することの可能な境界スイッチ（例えば、スイッチ２２２等）を含む。境界スイッチは、ＦＰＧＡ１２０内のプログラミング領域１２２〜１２５の境界に配置される。例えば、プログラマブル相互接続ファブリック２２０の導電性トレースがプログラミング領域１２２の境界を横切るところに境界スイッチ２２２が配置される。
【００２６】
したがって、境界スイッチ２２２を使用して、構成可能論理ブロック１３１〜１３４及びプログラミング領域１２２の他のコンポーネントを、他のプログラミング領域１２３〜１２５から隔離することができる。さらに、境界スイッチは、プログラミング領域を組み合わせるために、選択的に開閉することができる。例えば、プログラミング領域１２２，１２３間にある境界スイッチ２２２を閉じて領域１２２，１２３を互いに組み合わせ、他の境界スイッチを開いたままにして、組み合わせたプログラミング領域１２２，１２３を他のプログラミング領域１２４，１２５から隔離することができる。
【００２７】
図１を参照すると、ＦＰＧＡ１２０は、ＦＰＧＡ１２０内のプログラミング領域１２２，１２３のプログラミングを容易にする構成ロジック１２１を含む。特に、構成ロジック１２１は、プログラミング領域１２２の構成可能論理ブロック１３１〜１３４又はプログラミング領域１２３の構成可能論理ブロック１３５〜１３８のハードウェアを、既存のハードウェア構成から新たなハードウェア構成に再構成することによって、ＴＳＶ１０４を介して受信する命令に応答する。構成ロジック１２１による１つのプログラミング領域内のハードウェアの再構成は、１つ以上の命令を実行するために異なるプログラミング領域が使用されている間に行われる。
【００２８】
構成ロジック１２１は、ＴＳＶ１０４を介して受信した明示的な再構成命令に応じて、ＦＰＧＡ１２０内の１つ以上のプログラミング領域を再構成し、１つ以上のプログラミング領域を再構成することによって特定の機能の使用を要求する命令に対して黙示的に応答することができる。
【００２９】
命令ストリームに含まれる明示的な再構成命令は、ＦＰＧＡ１２０のランタイム動作中に受信され、再構成の対象となるプログラミング領域と、対象となるプログラミング領域のために選択された構成と、の両方を識別することができる。明示的な再構成命令に応じて、構成ロジック１２１は、対象となるプログラミング領域をＦＰＧＡ１２０内の他のプログラミング領域から独立して再構成するために、（例えば、対象となるプログラミング領域のエッジにおいて境界スイッチを開くことによって）対象となるプログラミング領域を隔離し、次いで、選択された構成を対象となるプログラミング領域に適用することによって、対象となるプログラミング領域を再構成することができる。
【００３０】
明示的な再構成命令は、ＦＰＧＡプログラミングビットストリームのアドレスを直接参照することによって、又は、所定のカスタマイズ可能な機能の１つのセットを参照することによって、対象となるプログラミング領域に実装される機能を参照する。例えば、構成メモリ１１１内の状態Ａ，Ｂの各々は、プログラミング領域１２２にプログラム可能な機能に対応し、構成メモリ１１２内に記憶される状態Ｃ，Ｄの各々は、プログラミング領域１２３にプログラム可能な機能に対応している。状態Ａ，Ｂ，Ｃ，Ｄの各々は、プログラミング領域内の対応する機能を実現するために使用され得る構成ビットストリームを記憶する。
【００３１】
構成ビットストリームは、構成ロジック１２１が対応する機能の実装を要求する明示的な再構成命令を受信する前に、構成メモリ領域１１１，１１２に記憶される。例えば、構成ビットストリームは、命令ストリームを生成するアプリケーションの実行開始時に記憶されてもよいし、アプリケーション内のプログラムループ又は他の実行バリアの先頭に記憶されてもよい。
【００３２】
構成ロジック１２１は、明示的な再構成命令が受信されなくても、プログラミング領域１２２，１２３の何れかのハードウェアを黙示的に再構成することができる。例えば、プログラミング領域１２２，１２３の何れにも実装されていない機能を呼び出す命令を受信した場合に、構成ロジック１２１は、再構成された１つ以上のプログラミング領域で命令を実行する前に、この機能を実現するためにプログラミング領域１２２，１２３の１つ以上を再構成する。
【００３３】
特定のプログラミング領域の構成メモリには、プログラミング領域の現在の構成も記録される。例えば、プログラミング領域１２２に関連する構成メモリ１１１は、プログラミング領域１２２の現在の構成を記憶する。したがって、特定の機能を呼び出す命令を受信したときに、命令をプログラミング領域で実行可能であるかどうか、又は、命令を実行するためにプログラミング領域を再構成すべきかどうかを判別するために、プログラミング領域の現在の構成を確認することができる。代替の実施形態では、ＦＰＧＡ１２０内の各プログラミング領域１２２〜１２３の現在の構成は、構成メモリ領域１１１〜１１２以外の場所に記憶される。例えば、現在の構成は、ＦＰＧＡ１２０自体に位置するメモリ又はレジスタに記憶され得る。
【００３４】
特定の機能を呼び出す命令に応じて、ＦＰＧＡ１２０の各プログラミング領域１２２〜１２３の現在の構成が確認され、呼び出された機能がプログラミング領域１２２〜１２３の何れかで実行可能であるかどうかが判別される。プログラミング領域１２２〜１２３の何れも呼び出された機能を実行するように構成されていない場合に、構成ロジック１２１は、プログラミング領域１２２〜１２３のうち１つ以上を、呼び出された機能を実行することの可能な新たな構成に再構成する。
【００３５】
図３は、一実施形態による、構成ロジック１２１がプログラミング領域の黙示的な再構成を実行するときに、プログラミング領域の構成ビットストリームが、受信した命令３００に基づいてどのようにメモリに配置されるかを示す図である。図３に示すように、受信した命令３００は、値ＩＤ１，ＩＤ２によって識別される２つの機能を識別する単一命令多重データ（ＳＩＭＤ）命令である。機能ＩＤ１に対して、命令３００は、２つのオペランドＳＲＣ１Ａ，ＳＲＣ１Ｂと、機能結果の宛先ＤＥＳＴ１と、を識別する。機能ＩＤ２に対して、命令３００は同様に、２つのオペランドＳＲＣ２Ａ，ＳＲＣ２Ｂと、機能結果の宛先ＤＥＳＴ２と、を識別する。
【００３６】
構成ロジック１２１は、命令３００を受信すると、機能テーブル３０１内の呼び出された機能ＩＤ１，ＩＤ２のエントリを参照する。図３に示すように、機能テーブル３０１は、機能ＩＤ１，ＩＤ２の各々のアドレスＡ及びアドレスＢを返す。アドレスＡ，Ｂは、構成メモリ１１１に記憶されている構成ビットストリーム（すなわち、状態Ａ及び状態Ｂ）の位置を識別する。構成ロジックは、状態Ａ及び状態Ｂに記憶されている識別された構成ビットストリームを使用して、命令３００の実行のためにプログラミング領域１２３を再構成する。
【００３７】
状態Ａ〜Ｄにおける構成ビットストリームは、単純な単一オペレーション又はより複雑な複合オペレーションであるプログラミング領域１２２〜１２３で実装するための機能を定義することができる。プログラムされると、プログラミング領域１２２〜１２３は、各々がメモリアドレスの範囲を通してアクセス可能な独立した論理ユニットとして使用することができる。適切に構成されたプログラミング領域で命令を実行する場合、プログラミング領域の入力に接続された所定のオペランドレジスタを介して、命令のオペランドを渡すことができる。
【００３８】
ＦＰＧＡ１２０内の構成可能論理ブロック１３１〜１３８は、コンピューティングシステム１００の構築された状態のかなりの部分を含むことができる。例えば、状態情報は、プログラミング領域内の命令の実行中に変更可能な値を含むことができる。論理ブロック１３１〜１３８の再構成によってコンテキストスイッチが行われると、再構成された論理ブロックの状態を、後で復元することができるように一時的に記憶することができる。例えば、プログラミング領域で実行されている第１スレッドは、第２スレッドがプログラミング領域を再構成することができるように一時停止することができ、第２スレッドがプログラミング領域での実行を終了した後に第１スレッドを再開するために、プログラミング領域の以前の構成及びコンテキストをコンテキストメモリから復元することができる。
【００３９】
図１を再度参照すると、構成メモリ１１１，１１２は、プログラミング領域１２２，１２３の各々に関連するコンテキストメモリ１１３，１１４を含む。コンテキストメモリ１１３，１１４は、論理ブロックの状態情報を各々のプログラミング領域１２２，１２３に記憶するために使用される。プログラミング領域１２２，１２３の何れかの再構成の前に、再構成されるプログラミング領域のコンテキストメモリは、同じコンテキストでプログラミング領域の元の構成を後に復元することができるように、論理ブロックの状態情報をプログラミング領域に記憶する。
【００４０】
具体的には、コンテキストデータは、プログラミング領域のハードウェア構成及びプログラミング領域内のレジスタ及びメモリブロック内に記憶された値を識別する情報を含むことができる。コンテキストメモリ１１３，１１４の何れかに記憶されたデータは、論理スタックとして編成することができる。したがって、プログラミング領域の第１構成に関連するコンテキストデータは、プログラミング領域を第２構成に再構成する前にスタックにプッシュされる。プログラミング領域が第１構成に再構成される場合に、第１構成のコンテキストデータがスタックからポップされ、第１構成のコンテキストが復元される。
【００４１】
概して、本明細書で説明する動作は、コンピューティングシステム１００内の図示されたコンポーネントの１つによって実行されるものとして、別の実施形態ではコンピューティングシステム１００内の他のコンポーネントによって実行され得る。例えば、構成ロジック１２１によって実行される動作は、他の実施形態では、コンピューティングシステム１００の他のコンポーネントで実行されてもよい。構成メモリ１１１，１１２は、別のメモリ１１０上に配置されるように示されているが、その代わりにコンピューティングシステム１００の他のコンポーネントに配置され得る。例えば、ＦＰＧＡ１２０は、代替の実施形態では、構成メモリ１１１，１１２の機能を実行するために使用可能なメモリを含むことができる。
【００４２】
図１を参照すると、コンピューティングシステム１００のコンパイラ１０３は、アプリケーションのソースコードに基づいてアプリケーション用の命令を生成し、生成された命令を、プロセッサ１０１がアクセス可能な場所（例えば、メモリ１１０）に記憶する。代替の実施形態では、命令は、ハードディスクドライブ又は他の永続メモリ等のように、メモリ１１０と異なるメモリ場所に記憶される。図１では、コンパイラ１０３は、コンピューティングシステム１００上で実行されるものとして示されているが、代替の実施形態では、別のコンピューティングシステム上で実行され、生成した命令をコンピューティングシステム１００に送信することができる。
【００４３】
コンピューティングシステム１００用の命令を生成する場合、コンパイラ１０３は、ＦＰＧＡ１２０内のプログラミング領域をプログラムするために、構成ビットストリームを構成メモリ領域（例えば、メモリ１１１，１１２）にプリロードする命令を挿入する。コンパイラは、ソースコードに基づいて実行され得る命令のタイプを識別し、次いで、命令を実行するための機能を実施するために、適切な構成ビットストリームをプリロードするための命令を挿入する。例えば、コンパイラ１０３は、プログラミング領域１２２，１２３の構成を利用する命令を実行する前に、コンフィギュレーション状態Ａ，Ｂ，Ｃ，Ｄを構成メモリ１１１，１１２にプリロードする命令を生成する。構成ビットストリームを構成メモリ１１１，１１２にプリロードすることによって、構成ロジック１２１は、命令ストリームの命令に応じてプログラミング領域の黙示的な再構成を迅速に実行することができる。
【００４４】
コンパイラ１０３は、明示的な再構成命令を、アプリケーション用の命令ストリームに挿入することもできる。コンパイラ１０３は、アプリケーションのソースコードに基づいて、プログラミング領域に実装可能な機能によって実行可能な命令を識別し、その後、明示的な再構成命令を、識別された命令の前に命令ストリームに挿入する。したがって、明示的な再構成命令は、識別された命令が実行されるようにスケジューリングされる前に、識別された命令の実行のためにプログラミング領域の１つを再構成させる。
【００４５】
コンパイラ１０３は、再構成されるプログラミング領域の使用の前に明示的な再構成命令をスケジューリングし、他の命令がＦＰＧＡ１２０の他のプログラミング領域又はプロセッサ１０１で並列に実行されている間に再構成が行われるように、明示的な再構成命令をスケジューリングすることもできる。明示的な再構成命令の完了に依存する命令は、再構成が完了するまで命令の実行を抑制する、命令の一部としての依存性を示す。
【００４６】
また、コンパイラ１０３は、プログラミング領域に実装される特定の機能を呼び出す命令と、この機能を実現するための再構成レイテンシとを識別することに基づいて、構成プリフェッチ命令を挿入することもできる。構成プリフェッチ命令は、プログラミング領域の所期の明示的又は黙示的な構成変更の前に、プログラミング領域の構成ビットを、メインメモリから例えばローカルＳＲＡＭ又はＳＴＴ−ＭＲＡＭバッファ等のより高速なメモリに転送する。したがって、構成プリフェッチ命令は、プログラミング領域を再構成するためのレイテンシを低減することができる。
【００４７】
また、コンパイラ１０３は、プログラミング領域を再構成する回数を減らすために、同じプログラマブル機能を使用する命令のグループをクラスタリングして、プログラミング領域を再構成するのに費やされる時間及び電力を削減することを試みる。
【００４８】
コンパイラ１０３は、再構成バリア命令を、アプリケーションの命令ストリームに挿入することもできる。再構成バリア命令は、複数のスレッドの何れかの実行が継続する前に、複数のスレッドに対して、１つ以上のプログラミング領域の再構成が完了するのを待機させる。再構成バリア命令は、例えば、複数の実行レーンを実装する１つ以上のプログラミング領域を、新たなワークグループを実行するための新たな機能のセットに再構成するために使用され得る。
【００４９】
図４Ａは、一実施形態による、３次元（３Ｄ）ダイスタック４００としてのコンピューティングシステム１００のコンポーネントの物理的な配置を示す図である。図４Ａに示すように、複数の集積回路ダイ４０１〜４０４は、スタック４００のインタポーザ４０５上に垂直に配置される。集積回路ダイのスタックの各々は、上から下に積み重ねられたＤＲＡＭダイ４０１と、ＳＲＡＭダイ４０２と、ＦＰＧＡダイ４０３と、プロセッサロジックダイ４０４と、を含む。プロセッサロジックダイ４０４は、図１に示すようなプロセッサロジックブロック１０５に対応し、これにより、コンピューティングシステム１００のプロセッサ１０１及びメモリコントローラ１０２は、プロセッサロジックダイ４０４上に存在する。ＦＰＧＡ１２０は、ＦＰＧＡダイ４０３上に存在する。ＤＲＡＭダイ４０１は、プロセッサ１０１及びＦＰＧＡ１２０によってアクセス可能であり、プログラムコード、プログラムデータ及び構成ビットストリームを構成メモリ領域１１１，１１２に記憶するメモリ１１０を含む。
【００５０】
ＳＲＡＭダイ４０２は、ＤＲＡＭ４０１よりも低いレイテンシを有するメモリを含み、ＤＲＡＭ４０１に加えて構成ビットストリームを記憶するために設けられている。ＳＲＡＭダイ４０２は、構成ビットストリームのキャッシングを実行する構成キャッシュ１１６，１１７を含むメモリ１１５を実装するために使用され、より少ないクロックサイクルでＦＰＧＡ１２０内のプログラミング領域の再構成を可能にする。ＳＲＡＭダイ４０２は、命令をキャッシュするためにも使用することができる。代替の実施形態では、ＳＲＡＭダイ４０２の代わりに、ＤＲＡＭよりも高速のＳＴＴ−ＭＲＡＭメモリダイ又は他のメモリ技術が使用される。
【００５１】
３Ｄダイスタック４００内のコンポーネント４０１〜４０５の配置、及び、１つ以上のＴＳＶのセットによるこれらのコンポーネント４０１〜４０５の接続は、ＦＰＧＡ１２０のプログラミング領域１２２，１２３内の構成可能論理ブロック１３１〜１３８への新たな構成の迅速な転送を容易にする。スタック４００に配置されているように、コンピューティングシステム１００は、プログラムの命令ストリーム内の明示的又は黙示的な命令に応じて、少ないクロックサイクルでプログラミング領域を再構成することができる。
【００５２】
図４Ｂは、ダイ４０１〜４０４間を接続して通信を可能にするＴＳＶ１０４Ａ，１０４Ｂとともに、ＤＲＡＭメモリダイ４０１と、ＳＲＡＭメモリダイ４０２と、ＦＰＧＡダイ４０３と、処理ロジックダイ４０４と、を示す図である。図１に示すように、ＴＳＶ１０４は、ＴＳＶ１０４Ａ，１０４Ｂを含む。ＴＳＶ１０４Ａ，１０４Ｂは、積層されたダイ４０１〜４０４間の１つ以上のＴＳＶを表すことができる。例えば、ＴＳＶ１０４Ａ，１０４Ｂの各セットは、コマンド、アドレス及びデータＴＳＶのサブセットを含むことができる。ＴＳＶ１０４Ａは、構成メモリ１１１と、構成キャッシュ１１６と、プログラミング領域１２２と、メモリコントローラ１０２と、の間の通信のためのデータパスを提供する。ＴＳＶ１０４Ｂは、構成メモリ１１２と、構成キャッシュ１１７と、プログラミング領域１２３と、メモリコントローラ１０２と、の間の通信のためのダイレクトデータパスを提供する。
【００５３】
ダイスタック４００では、構成キャッシュ及び構成メモリ領域は、物理的に、ＦＰＧＡ１２０内の他のプログラミング領域と比べて、対応するプログラミング領域により近く配置される。例えば、構成メモリ１１１及び構成キャッシュ１１６の各々は、ＦＰＧＡ１２０内の他のプログラミング領域（例えば、プログラミング領域１２３）と比べて、対応するプログラミング領域１２２に近い位置に配置される。同様に、構成メモリ１１２及び構成キャッシュ１１７の各々は、他のプログラミング領域と比べて、対応するプログラミング領域１２３に近い位置に配置される。また、スタック４００の各構成メモリ及び構成キャッシュは、メモリ又はキャッシュの少なくとも一部が対応するプログラミング領域に配置されるように、積層される。関連するプログラミング領域に最も近い構成メモリ及びキャッシュ領域の位置決めと、ＦＰＧＡダイ４０３上でのメモリダイ４０１，４０２の垂直方向の積層とは、ＴＳＶ１０４Ａ，１０４Ｂの長さを最小化し、構成データのより高速な伝送を容易にする。
【００５４】
ＦＰＧＡ１２０内の各プログラミング領域は、自身と、プロセッサロジックダイ４０４上に配置された共通メモリコントローラ１０２と、の間に専用のバス帯域幅を有する。代替の実施形態では、メモリコントローラ１０２を、処理ロジックダイ４０４の代わりに異なるダイ（例えば、ＦＰＧＡダイ４０３）上に配置することができる。プログラミング領域の再構成が行われる場合に、メモリコントローラ１０２は、再構成されるプログラミング領域に関連する構成メモリ又は構成キャッシュからＴＳＶを介して適切な構成ビットストリームデータを読み出す。次に、メモリコントローラ１０２は、構成ビットストリームデータを、ＴＳＶを介してプログラミング領域に書き込む。代替の実施形態では、各プログラミング領域は、複数のプログラミング領域と通信するために使用される共通メモリコントローラ１０２ではなく、ＦＰＧＡ１２０に実装されたそれ自身の単純なメモリコントローラを有することができる。
【００５５】
図５Ａ〜５Ｄは、コンピューティングシステム１００のコンポーネントが存在するダイをスタック４００と異なるように配置する、コンピューティングシステム１００の代替の実施形態を示す図である。図５Ａ，５Ｂ，５Ｃ，５Ｄに示すように、スタック５１０，５２０Ａ〜Ｂ，５３０Ａ〜Ｂ，５４０Ａ〜Ｃについて、これらのダイスタックに含まれるダイは、スタック４００内の同様に名付けられた対応物と同様の特徴を有する。代替の実施形態では、他の構成も可能である。例えば、コンピューティングシステム１００のいくつかのコンポーネントを、スタック４００と比較して異なるダイ上に配置することができる。
【００５６】
図５Ａは、インタポーザ５１４上で上から下に積層されたＤＲＡＭダイ５１１と、ＦＰＧＡダイ５１２と、プロセッサロジックダイ５１３と、を含むダイスタック５１０を示す図である。図４Ａに示すスタック４００と比較して、スタック５１０は、低レイテンシメモリダイ（例えば、ＳＲＡＭダイ又はＳＴＴ−ＭＲＡＭダイ）の省略によって、コスト及び複雑さが低減される。
【００５７】
図５Ｂは、コンピューティングシステム１００のコンポーネントが存在するダイを、２つのスタック５２０Ａ，５２０Ｂに配置する構成を示す図である。スタック５２０Ａは、インタポーザ５２４上で上から下に積層されたＦＰＧＡダイ５２１と、プロセッサロジックダイ５２２と、を含む。ＤＲＡＭメモリダイ５２３は、隣接するスタック５２０Ｂ内の同じインタポーザ５２４上に積層され、インタポーザ５２４は、異なるスタック５２０Ａ，５２０Ｂ内のダイ間の通信を可能にする電気接続を提供する。ロジックダイ５２１，５２２をメモリダイ５２３から隔離することによって、構造体からの放熱が促進される。
【００５８】
図５Ｃは、図５Ｂに示すダイスタック５２０Ａ，５２０Ｂと同様の構成を有するダイスタック５３０Ａ，５３０Ｂを含む構造を示す図である。しかし、スタック５２０Ａとは対照的に、スタック５３０Ａは、ＦＰＧＡダイ５３２と、プロセッサロジックダイ５３３上に積層された追加の低レイテンシメモリダイ（すなわち、ＳＲＡＭダイ５３１）と、を含む。ＳＲＡＭダイ５３１は、ＦＰＧＡ１２０内のプログラミング領域を再構成する時間を短縮するために、構成キャッシュメモリを実装するために使用される。ＤＲＡＭダイ５３４は隣接するスタック５３０Ｂに配置され、ダイスタック５３０Ａ，５３０Ｂの両方は、異なるスタック５３０Ａ，５３０Ｂのダイ間の通信を可能にする電気接続を提供するインタポーザ５３５上に積層される。
【００５９】
図５Ｄは、コンピューティングシステム１００のコンポーネントが、共通インタポーザ５４５上の３つのダイスタック５４０Ａ，５４０Ｂ，５４０Ｃに配置される構造を示す図である。複数のダイスタック５４０Ａ、５４０Ｂ，５４０Ｃへのダイの配置は、構造体からの放熱を促進する。ダイスタック５４０Ａはプロセッサロジックダイ５４２を含み、ダイスタック５４０ＣはＤＲＡＭダイ５４４を含み、ダイスタック５４０Ｂは、ＦＰＧＡダイ５４３上に積層されたＳＲＡＭダイ５４１を含む。ダイ５４１〜５４４の各々は、共通インタポーザ５４５によって提供される電気接続を介して他のスタックのダイと通信することができる。
【００６０】
図６は、命令ストリームの命令に基づいて再構成可能なＦＰＧＡ１２０を含むコンピューティングシステム１００において命令ストリームを実行するためのプロセス６００の実施形態を示す図である。プロセス６００の動作は、プロセッサ１０１から発行された命令ストリームの命令を実行するために、コンピューティングシステム１００の様々なコンポーネントによって実行される。一実施形態では、命令ストリームは、単一のコンピュータプログラムを定義する命令のサブセットを少なくとも含む連続命令ストリームである。
【００６１】
プロセス６００は、ブロック６０１で開始する。ブロック６０１において、コンピューティングシステム１００は、ＦＰＧＡ１２０内のプログラミング領域毎に１つ以上の選択可能な構成を記憶する。例えば、プログラミング領域１２２に関連する構成メモリ１１１は、プログラミング領域１２２へのプログラミングのために選択可能な少なくとも２つの構成、状態Ａ及び状態Ｂを記憶する。この例を続けると、状態Ａは、４つの加算器ユニットを実装するようにプログラミング領域１２２を構成するための構成ビットストリームを含み、状態Ｂは、４つの乗算器ユニットを実装するようにプログラミング領域１２２を構成するための構成ビットストリームを含む。プロセス６００は、ブロック６０１からブロック６０３に進む。
【００６２】
ブロック６０３において、ＦＰＧＡ１２０は、命令ストリーム内の第１命令を受信する。例えば、プロセッサ１０１は、実行される命令を、ＦＰＧＡ１２０の１つのプログラミング領域にディスパッチすることができる。命令は、ＦＰＧＡ１２０の構成ロジック１２１で受信される。プロセス６００は、ブロック６０３からブロック６０５に進む。
【００６３】
ブロック６０５〜６０７において、構成ロジック１２１は、受信した命令に基づいて、受信した命令又は後続の命令が実行される前に何れかのプログラミング領域を再構成すべきかどうかを判別する。ブロック６０５において、構成ロジック１２１は、ブロック６０３で受信した命令が明示的な再構成命令であるかどうかを判別する。命令が明示的な再構成命令でない場合、プロセス６００はブロック６０７に進む。
【００６４】
ブロック６０７において、構成ロジック１２１は、ブロック６０３で受信した命令を実行するためにプログラミング領域が既に構成されているかどうかを判別する。例えば、命令が乗算命令である場合、構成ロジック１２１は、プログラミング領域１２２，１２３の何れかの既存の構成が命令を実行するために使用可能な乗算器ユニットを含むかどうかを判別する。ブロック６０７において、少なくとも１つのプログラミング領域が命令を実行することができる場合、プロセス６００はブロック６０９に進む。
【００６５】
ブロック６０９において、命令は、命令を実行するために適切に構成されたプログラミング領域内で実行される。したがって、ブロック６０３〜６０９の動作によって、明示的な再構成命令ではなく、命令を実行するためにプログラミング領域が適切に構成されているときに受信する命令は、命令を受信することに応じてプログラミング領域で単純に実行される。プロセス６００は、ブロック６０９からブロック６０３に戻る。
【００６６】
ブロック６０３において、ＦＰＧＡ１２０は、命令ストリーム内の第２命令を受信し、この第２命令によって、１つ以上のプログラミング領域が再構成される。第２命令は、命令ストリーム内の第１命令の後の次の命令とすることができる。換言すれば、プログラミング領域の再構成を引き起こす命令は、既存の構成を使用するプログラミング領域で実行される第１命令と同じ連続命令ストリームの一部とすることができる。一実施形態では、命令ストリームを制御するプロセス又はエンティティが、別のプロセス又はエンティティ（例えば、オペレーティングシステム、ハードウェアデバイス等）による中断無しに、ストリーム内の各命令から次の命令へ自動的に進むことを可能にする間、命令ストリームは連続的であるとみなされることができる。プロセス６００は、ブロック６０３からブロック６０５に進む。
【００６７】
ブロック６０５において、構成ロジック１２１は、ブロック６０３で受信した第２命令が明示的な再構成命令であるかどうかを判別する。明示的な再構成命令は、プログラミング領域を識別し、識別されたプログラミング領域の構成を識別する。例えば、明示的な再構成命令は、プログラミング領域１２２と、プログラミング領域１２２を構成するための構成メモリ１１１内の状態Ｂと、を識別することができる。第２命令が明示的な再構成命令である場合、プロセス６００はブロック６１１に進み、そうでない場合、プロセス６００はブロック６０７に進む。
【００６８】
ブロック６０７において、構成ロジック１２１は、ブロック６０３で受信した第２命令を実行するために、プログラミング領域が既に構成されているかどうかを判別する。ＦＰＧＡ１２０内のプログラミング領域が第２命令の実行のために既に構成されている場合には、プロセス６００がブロック６０９に進み、命令がプログラミング領域で実行される。そうでなければ、プロセス６００はブロック６１１に進む。
【００６９】
ブロック６１１において、構成ロジック１２１は、ＦＰＧＡ１２０内の１つ以上のターゲットプログラミング領域を識別し、１つ以上のターゲットプログラミング領域のコンテキストデータを、１つ以上のターゲットプログラミング領域に対応するコンテキストメモリに記憶することによって、１つ以上のターゲットプログラミング領域を再構成する準備をする。例えば、明示的な再構成命令に応じて再構成が実行されている場合、明示的な再構成命令は、ＦＰＧＡ１２０内のどのプログラミング領域を再構成すべきかを示す。黙示的な再構成のために、構成ロジック１２１は、使用されていないか、近い将来に使用されることが予想されないプログラミング領域をターゲットプログラミング領域として識別することができる。プロセス６００は、ブロック６１１からブロック６１３に進む。
【００７０】
ブロック６１３において、構成ロジック１２１は、ターゲットプログラミング領域の境界にて境界スイッチを開き、ターゲットプログラミング領域の構成可能論理ブロックを他のプログラミング領域から切断することによって、ターゲットプログラミング領域をＦＰＧＡ１２０内の他のプログラミング領域から隔離する。このターゲットプログラミング領域の隔離により、ターゲットプログラミング領域内のハードウェアを、ＦＰＧＡ１２０内の他のプログラミング領域の何れかから独立して再構成することができる。図２を参照して、プログラミング領域１２２をターゲットプログラミング領域として上述した例を続けると、構成ロジック１２１は、プログラミング領域１２２の境界で境界スイッチ２２２を切断することによって、プログラミング領域１２２の構成可能論理ブロック１３１〜１３４を隔離する。プロセス６００は、ブロック６１３からブロック６１５に進む。
【００７１】
ブロック６１５において、構成ロジック１２１は、ブロック６０３で受信した命令に基づいて、ターゲットプログラミング領域の１つの構成を選択する。命令が明示的な再構成命令である場合、構成ロジック１２１は、命令に示された構成を選択する。例えば、「状態Ｂ」構成を示す明示的な再構成命令は、構成ロジック１２１に、構成メモリ１１１に記憶されている状態Ｂに対応する構成ビットストリームを選択させる。
【００７２】
あるいは、ブロック６０３で受信した命令が明示的な再構成命令ではない場合に、構成ロジック１２１は、図３に示すように、機能テーブル３０１を使用して構成を選択する。構成ロジック１２１は、機能テーブル３０１内の命令のオペコード（例えば、ＩＤ１、ＩＤ２）をルックアップして、プログラミング領域を構成するための構成ビットストリームのアドレス（例えば、アドレスＡ、アドレスＢ）を決定する。プロセス６００は、ブロック６１５からブロック６１７に進む。
【００７３】
ブロック６１７において、構成ロジック１２１は、選択された構成ビットストリームを使用してターゲットプログラミング領域の構成可能論理ブロック内のハードウェアを再構成する。メモリコントローラ１０２は、選択された構成ビットストリームを構成メモリから取得し、ビットストリームを、ＴＳＶ１０４を介してＦＰＧＡ１２０に送信する。次に、構成ロジック１２１は、構成ビットストリームを使用してターゲットプログラミング領域を再構成する。例えば、ターゲットプログラミング領域１２２が状態Ｂにしたがって再構成される場合、構成ロジック１２１は、状態Ｂに対応する構成ビットストリームをＴＳＶ１０４を介して受信し、状態Ｂの構成ビットストリームを使用してプログラミング領域１２２の構成可能論理ブロック１３１〜１３４をプログラムする。一実施形態では、構成ビットストリームを、ターゲットプログラミング領域１２２の対応するキャッシュメモリ１４１にキャッシュすることができる。一実施形態では、ターゲットプログラミング領域の１つ以上の構成可能論理ブロック内のハードウェアを再構成するための持続時間は、１ミリ秒未満であってもよい。プロセス６００は、ブロック６１７からブロック６１９に進む。
【００７４】
ブロック６１９において、ブロック６０３で受信した命令が実行を保留している場合、プロセス６００はブロック６０９に進み、再構成されたプログラミング領域で命令を実行する。そうでなく、命令が実行を保留していない場合（例えば、命令が、再構成が完了した明示的な再構成命令である場合）、プロセス６００はブロック６０３に戻り、命令ストリーム内の次の命令を受信する。したがって、実行プロセス６００は、特定の機能の要求に応じて明示的又は黙示的に指示されたときにプログラミング領域を適切に再構成するように、命令ストリーム内で受信した命令を実行するループで動作する。
【００７５】
本明細書で使用される場合、「に結合される」という用語は、１つ以上の介在するコンポーネントを介して直接的又は間接的に結合されることを意味し得る。本明細書で説明される様々なバスを介して提供される信号の何れかは、他の信号と時間多重化され、１つ以上の共通バスを介して提供される。また、回路コンポーネント又はブロック間の相互接続は、バス又は単一の信号線として示すことができる。各バスは１つ以上の単一信号線であってもよく、単一信号線の各々はバスであってもよい。
【００７６】
特定の実施形態は、非一時的（non-transitory）なコンピュータ可読媒体に記憶された命令を含むことができるコンピュータプログラム製品として実装されてもよい。これらの命令は、説明した動作を実行するように汎用又は専用プロセッサをプログラムするために使用されてもよい。コンピュータ可読媒体は、機械（例えば、コンピュータ）によって読み取り可能な形式（例えば、ソフトウェア、処理アプリケーション）で情報を記憶又は送信する任意のメカニズムを有する。非一時的なコンピュータ可読記憶媒体は、限定されないが、磁気記憶媒体（例えば、フロッピー（登録商標）ディスケット）、光記憶媒体（例えば、ＣＤ−ＲＯＭ）、光磁気記憶媒体、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルメモリ（例えば、ＥＰＲＯＭ及びＥＥＰＲＯＭ）、フラッシュメモリ、又は、電子命令を記憶するのに適した他のタイプの媒体を含むことができる。
【００７７】
また、いくつかの実施形態は、コンピュータ可読媒体が複数のコンピュータシステムに記憶され、及び／又は、複数のコンピュータシステムによって実行される分散コンピューティング環境で実施することができる。さらに、コンピュータシステム間で転送される情報は、コンピュータシステムを接続する伝送媒体を介してプル又はプッシュされてもよい。
【００７８】
一般に、コンピュータ可読記憶媒体に運ばれるコンピューティングシステム１００及び／又はその一部を表すデータ構造は、プログラムによって読み取られ、コンピューティングシステム１００を含むハードウェアを製造するために直接的又は間接的に使用され得るデータベース又は他のデータ構造であってもよい。例えば、データ構造は、Ｖｅｒｉｌｏｇ又はＶＨＤＬ等の高レベル設計言語（ＨＤＬ）におけるハードウェア機能の動作レベル記述又はレジスタ転送レベル（ＲＴＬ）記述であってもよい。記述は、合成ライブラリからゲートのリストを含むネットリストを生成するために記述を合成する合成ツールによって読み取られてもよい。ネットリストは、コンピューティングシステム１００を含むハードウェアの機能も表すゲートのセットを含む。次に、ネットリストを配置及びルーティングして、マスクに適用される幾何学的形状を記述するデータセットを生成することができる。次いで、マスクは、様々な半導体製造ステップで使用され、コンピューティングシステム１００に対応する１つ以上の半導体回路を製造することができる。あるいは、コンピュータ可読記憶媒体上のデータベースは、所望によりネットリスト（合成ライブラリを含む又は含まない）若しくはデータセット、又は、グラフィックデータシステム（ＧＤＳ）ＩＩデータであってもよい。
【００７９】
本明細書の方法の動作を特定の順序で示して説明しているが、各方法の動作の順序は、特定の動作が逆の順序で実行されるように、又は、特定の動作が他の動作と少なくとも部分的に並行して実行されるように変更されてもよい。別の実施形態では、別個の動作の命令又はサブ動作は、断続的及び／又は交互の方法であってもよい。
【００８０】
前述した本明細書では、実施形態を、その特定の例示的な実施形態を参照して説明してきた。しかし、添付の特許請求の範囲に記載された実施形態のより広い趣旨及び範囲から逸脱することなく、様々な修正及び変更がなされ得ることは明らかであろう。したがって、本明細書及び図面は、限定的な意味ではなく例示的な意味であるとみなされるべきである。
【図１】
2018530025.tif 000003
【図２】
2018530025.tif 000004
【図３】
2018530025.tif 000005
【図４Ａ】
2018530025.tif 000006
【図４Ｂ】
2018530025.tif 000007
【図５Ａ】
2018530025.tif 000008
【図５Ｂ】
2018530025.tif 000009
【図５Ｃ】
2018530025.tif 000010
【図５Ｄ】
2018530025.tif 000011
【図６】
2018530025.tif 000012
【手続補正書】
【提出日】平成30年2月27日(2018.2.27)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の構成可能論理ブロックを含む１つ以上のプログラミング領域と、
構成ロジックと、を備え、
前記複数の構成可能論理ブロックの各々は、プログラマブル相互接続ファブリックを介して前記複数の構成可能論理ブロックの他の構成可能論理ブロックに選択的に接続可能であり、
前記１つ以上のプログラミング領域のうち第１プログラミング領域は、命令ストリーム内の第１命令を実行するように構成されており、
前記構成ロジックは、前記命令ストリーム内の第２命令に応じて、前記第１プログラミング領域において、前記１つ以上のプログラミング領域の他のプログラミング領域から独立して、前記複数の構成可能論理ブロックのうち１つ以上の構成可能論理ブロックのハードウェアを再構成するように構成されており、
前記第１プログラミング領域は、前記第１プログラミング領域内の前記複数の構成可能論理ブロックのうち１つ以上の構成可能論理ブロックの再構成されたハードウェアを用いて、前記第２命令を実行するように構成されている、
プログラマブルデバイス。
【請求項２】
各プログラミング領域は、前記プログラミング領域用の複数の選択可能な構成を記憶するように構成された構成メモリと接続され、前記構成ロジックは、前記プログラミング領域の前記構成メモリに記憶された前記複数の選択可能な構成のうち選択された構成に基づいて、前記プログラミング領域を再構成するように構成されている、請求項１のプログラマブルデバイス。
【請求項３】
前記構成メモリは、スタティックランダムアクセスメモリ（ＳＲＡＭ）を備える、請求項２のプログラマブルデバイス。
【請求項４】
前記構成メモリは、他のプログラミング領域よりも前記プログラミング領域の近くに配置されている、請求項２のプログラマブルデバイス。
【請求項５】
前記命令ストリームは、単一のコンピュータプログラムを定義する命令のサブセットを少なくとも含む連続命令ストリームであり、前記第２命令は、前記命令ストリーム内の前記第１命令の次に続く命令である、請求項１のプログラマブルデバイス。
【請求項６】
プログラミング領域を他のプログラミング領域から電気的に隔離するように構成された前記プログラマブル相互接続ファブリック内の境界スイッチのセットを備える、請求項１のプログラマブルデバイス。
【請求項７】
前記第２命令は、前記第１プログラミング領域を識別し、前記第１プログラミング領域の選択された構成を識別する再構成命令である、請求項１のプログラマブルデバイス。
【請求項８】
前記１つ以上の構成可能論理ブロックのハードウェアの再構成前に、前記第１プログラミング領域のコンテキストデータを記憶するように構成されたコンテキストメモリを備える、請求項１のプログラマブルデバイス。
【請求項９】
前記プログラマブルデバイスは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）デバイスである、請求項１のプログラマブルデバイス。
【請求項１０】
前記プログラマブルデバイスは、シリコン貫通ビア（ＴＳＶ）によって接続された複数の積層ダイのうち１つの積層ダイに存在する、請求項１のプログラマブルデバイス。
【請求項１１】
複数の命令の各々について構成ビットストリームのアドレスを記憶するように構成された機能テーブルを備え、前記構成ロジックは、前記第２命令に対応する構成ビットストリームのアドレスを前記機能テーブルから識別するように構成されている、請求項１のプログラマブルデバイス。
【請求項１２】
命令ストリーム内の第１命令を受信したことに応じて、プログラマブルデバイス内の１つ以上のプログラミング領域のうち第１プログラミング領域において前記第１命令を実行することと、
前記命令ストリーム内の第２命令を受信したことに応じて、前記第１プログラミング領域において、前記１つ以上のプログラミング領域の他のプログラミング領域から独立して、複数の構成可能論理ブロックのうち１つ以上の構成可能論理ブロックのハードウェアを再構成することと、
前記第１プログラミング領域内の前記複数の構成可能論理ブロックのうち１つ以上の構成可能論理ブロックの再構成されたハードウェアを用いて、前記第２命令を実行することと、
を含む、方法。
【請求項１３】
前記１つ以上のプログラミング領域のプログラミング領域毎に、
前記プログラミング領域用の複数の選択可能な構成を記憶し、
前記プログラミング領域の構成メモリに記憶された前記複数の選択可能な構成のうち選択された構成に基づいて、前記プログラミング領域を再構成すること、を含む、請求項１２の方法。
【請求項１４】
前記第２命令は、前記第１プログラミング領域を識別し、前記第１プログラミング領域の前記選択された構成を識別する再構成命令であり、前記第１プログラミング領域を再構成することは、前記第２命令に基づいて、前記第１プログラミング領域の前記構成メモリに記憶された前記複数の選択可能な構成のうち１つの構成を選択することを含む、請求項１３の方法。
【請求項１５】
前記命令ストリームは、単一のコンピュータプログラムを定義する命令のサブセットを少なくとも含む連続命令ストリームであり、前記第２命令は、前記命令ストリーム内の前記第１命令の次に続く命令である、請求項１２の方法。
【請求項１６】
前記第１プログラミング領域を、前記複数の構成可能論理ブロックを接続するプログラマブル相互接続ファブリック内の境界スイッチのセットを介して、前記１つ以上のプログラミング領域の他のプログラミング領域から隔離することを含む、請求項１２の方法。
【請求項１７】
前記１つ以上の構成可能論理ブロックにおいて前記ハードウェアを再構成する前に、前記第１プログラミング領域のコンテキストデータをコンテキストメモリに記憶することを含む、請求項１２の方法。
【請求項１８】
前記プログラマブルデバイスは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）デバイスである、請求項１２の方法。
【請求項１９】
前記プログラマブルデバイスは、シリコン貫通ビア（ＴＳＶ）によって接続された複数の積層ダイのうち１の積層ダイに存在する、請求項１２の方法。
【請求項２０】
複数の命令の各々について構成ビットストリームのアドレスを機能テーブルに記憶することと、
前記第２命令に対応する構成ビットストリームのアドレスを前記機能テーブルから識別することと、を含む、請求項１２の方法。
【請求項２１】
命令ストリーム内の複数の命令をディスパッチするように構成されたプロセッサと、
前記プロセッサと接続されたプログラマブルデバイスと、を備え、
前記プログラマブルデバイスは、
複数の構成可能論理ブロックを含む１つ以上のプログラミング領域と、
構成ロジックと、を備え、
各構成可能論理ブロックは、プログラマブル相互接続ファブリックを介して他の構成可能論理ブロックに選択的に接続可能であり、前記１つ以上のプログラミング領域のうち第１プログラミング領域は、命令ストリーム内の第１命令を実行するように構成されており、
前記構成ロジックは、前記命令ストリーム内の第２命令に応じて、前記第１プログラミング領域において、他のプログラミング領域から独立して、前記第１プログラミング領域内の前記複数の構成可能論理ブロックのうち１つ以上の構成可能論理ブロックのハードウェアを再構成するように構成されており、
前記第１プログラミング領域は、前記第１プログラミング領域内の前記複数の構成可能論理ブロックのうち１つ以上の構成可能論理ブロックの再構成されたハードウェアを用いて、前記第２命令を実行するように構成されている、
コンピューティングシステム。
【請求項２２】
プログラミング領域毎に、前記プログラミング領域用の複数の選択可能な構成を記憶するように構成された構成メモリを備え、
前記構成メモリは、前記プログラマブルデバイス上に積層されたダイナミックランダムアクセスメモリ（ＤＲＡＭ）内に配置され、１つ以上のシリコン貫通ビアを介して前記プログラミング領域に接続されている、請求項２１のコンピューティングシステム。
【請求項２３】
前記構成メモリに接続され、前記複数の選択可能な構成のうち選択された構成を前記構成メモリから受信し、前記選択された構成を前記プログラマブルデバイスに適用するように構成されたメモリコントローラを備える、請求項２２のコンピューティングシステム。
【請求項２４】
前記プログラマブルデバイスは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）デバイスを含む、請求項２１のコンピューティングシステム。
【請求項２５】
前記プログラマブルデバイスを含む第１集積回路ダイは、前記プロセッサを含む第２集積回路ダイ上に積層されており、前記第１集積回路ダイ及び前記第２集積回路ダイは、シリコン貫通ビア（ＴＳＶ）を介して接続されている、請求項２１のコンピューティングシステム。
【請求項２６】
複数の命令の各々について構成ビットストリームのアドレスを記憶するように構成された機能テーブルを備え、
前記構成ロジックは、前記第２命令に対応する構成ビットストリームのアドレスを前記機能テーブルから識別するように構成されている、請求項２１のコンピューティングシステム。
【請求項２７】
前記構成ロジックは、前記ハードウェアを第１ハードウェア構成から第２ハードウェア構成に再構成することによって、前記複数の構成可能論理ブロックのうち１つ以上の構成可能論理ブロックの前記ハードウェアを再構成するように構成されており、
前記コンピューティングシステムは、コンパイラを備え、
前記コンパイラは、
入力ソースコードに基づいて、前記ハードウェアが前記第２ハードウェア構成にある場合に、前記第１プログラミング領域で実行可能な第３命令を識別し、
前記第３命令を識別したことに応じて、前記命令ストリーム内の前記第３命令の前に前記第２命令を生成する、ように構成されている、請求項２１のコンピューティングシステム。
【国際調査報告】
2018530025.tif 000013
2018530025.tif 000014
2018530025.tif 000015