以下の説明は、実施形態の良好な理解を提供するために、特定のシステム、コンポーネント、方法等の例のように複数の特定の詳細を説明する。しかしながら、少なくともいくつかの実施形態がこれらの特定の詳細なしに実施され得ることは、当業者には明らかであろう。他の例では、周知のコンポーネント又は方法は、実施形態を不要に不明瞭にすることを避けるために、詳細には記載されておらず、又は、単純なブロック図形式で示されている。したがって、記載された特定の詳細は単なる例示である。特定の実施態様は、これらの例示的な詳細と異なる可能性があるが、依然として実施形態の趣旨及び範囲内にあると考えられる。
プログラマブルデバイスの一実施形態は、命令ストリーム内の命令に基づいて互いに並列且つ独立して再構成可能な複数の構成ドメインを有するフィールドプログラマブルゲートアレイ(FPGA)である。複数の構成ドメインの各々の構成データを、構成データへ高帯域幅アクセスを提供する3次元(3D)積層メモリに記憶することができる。デバイス内のプログラマブルロジックを高帯域幅メモリと共に分割することによって、数クロックサイクル内でプログラマブルロジックを再構成することが可能になり、異なるタイプの命令に適応するように再構成することができる柔軟なパイプラインが可能になる。
命令ストリームの実行を中断することなく複数のタイプの命令の何れかを実行するように任意のパイプラインを再構成することができるので、柔軟なパイプラインの実装によって、固定機能を処理するパイプラインとは対照的に、命令スケジューリングにおいてより高い柔軟性を可能にする。このようなシステムでは、異なる機能を実行する異なるスレッドを、複数の実行レーンに亘って単一サイクルでスケジューリングすることができる。
図1は、複数の構成ドメインを有するプログラマブルデバイス(すなわち、FPGA120)を含むコンピューティングシステム100の実施形態を示す図である。コンピューティングシステム100は、シリコン貫通ビア(TSV)104のセットによってコンピューティングシステム100に実装されるバスを使用して相互に通信することの可能なコンポーネントを含む。TSV104は、プロセッサロジックブロック105(プロセッサ101及びメモリコントローラ102を含む)と、メモリブロック110と、メモリブロック115と、FPGA120と、の間を接続し、通信を可能にする。一実施形態では、各ブロック105,110、115,120は、単一の集積回路ダイに対応する。代替の実施形態では、異なるブロックにあるように示されたコンポーネントは、同一のダイ上に集積されてもよく、同じブロックにあるように示されたコンポーネントは、複数のダイに分割されてもよい。
プロセッサ101は、TSV104に接続された1つ以上の他のデバイスにアドレス指定されたTSV104を介してデータを送信することができ、TSV104に接続された他のデバイスからデータを受信することもできる。また、プロセッサ101は、メモリサブシステム110に記憶された命令によって定義されるプログラムを実行することができ、これらの命令の一部又は全てを、FPGA120によって実行される命令ストリームにディスパッチすることができる。
FPGA120は、プログラミング領域122,123を含む。プログラミング領域122は、構成可能論理ブロック131〜134を含み、プログラミング領域123は、構成可能論理ブロック135〜138を含む。FPGA120内のプログラマブルロジックは、構成可能論理ブロック131〜138に存在しているので、別々に構成可能であり、プログラミング領域122,123の境界によって画定される複数の構成ドメインに分割される。図1は、FPGA120が2つのプログラミング領域122,123を含むように示しているが、代替の実施形態では、FPGA120は、3つ以上のプログラミング領域を含むことが可能である。代替の実施形態では、各プログラミング領域は、4つより少ない又は多い構成可能論理ブロックを含むこともできる。また、FPGA120は、構成データを受信し、受信した構成データにしたがってFPGA120内の1つ以上のプログラミング領域を再構成する構成ロジック121を含む。
メモリ110は、FPGA120内のプログラミング領域の構成データを記憶する構成メモリ領域111,112を含む。構成メモリ領域111,112は、それぞれプログラミング領域122,123に対応し、これにより、構成メモリ111は、プログラミング領域122を構成するのに使用可能な構成データを記憶し、構成メモリ112は、プログラミング領域123を構成するのに使用可能な構成データを記憶する。構成メモリ領域111,112の各々は、プログラミング領域にプログラムするために選択することができる複数の構成状態(例えば、メモリ111の状態A及びB、メモリ112の状態C及びD)を記憶する。例えば、構成メモリ111の状態A又は状態Bは、対応するプログラミング領域122の構成を決定するために選択され得る。
また、メモリ110は、異なる構成に関連する状態情報を記憶するのに使用されるコンテキストメモリ113及びコンテキストメモリ114を含む。コンテキストメモリ113及びコンテキストメモリ114の各々は、プログラミング領域122,123の状態情報を記憶する。
メモリ115は、プログラミング領域122,123にそれぞれ対応するキャッシュ116及びキャッシュ117を含む。各キャッシュ116,117は、同じプログラミング領域に対応する構成メモリよりも低いレイテンシを有するメモリ技術(例えば、SRAM又はSTT−MRAM)を使用して実装される。例えば、構成メモリ111は、DRAMを用いて実装され、キャッシュ116は、SRAM又はスピントランスファトルク磁気ランダムアクセスメモリ(STT−MRAM)を用いて実装されてもよい。低レイテンシメモリは、プログラミング領域内のハードウェアを再構成する時間を短縮するために、構成ビットストリームデータをキャッシュするために使用される。
コンピューティングシステム100は、TSV104に接続されたメモリコントローラ102を含み、メモリコントローラ102は、TSV104に取り付けられた他のデバイス間の通信を容易にするロジックを含む。例えば、プロセッサ101は、メモリ領域111,112の何れかをアドレス指定することと、アドレス指定されたメモリ領域から一時バッファ(例えば、SRAM)へTSVを介して構成データを読み出すことと、FPGA120をアドレス指定することと、対応するプログラミング領域122又はプログラミング領域123を再構成するためにTSVを介して構成データをFPGA120に書き込むことと、によって、構成メモリ領域111,112及びFPGA120間の通信を容易にするようにメモリコントローラ102に指示してもよい。したがって、メモリコントローラ102は、コンピューティングシステム100のこれらのコンポーネント間のデータ転送を調整する。
コンピューティングシステム100において、メモリコントローラ102は、デバイス選択信号102aを介してデバイスを選択することによって、TSVに接続される1つのデバイス(例えば、FPGA120又はメモリ110)と通信を確立する。代替の実施形態では、デバイス選択信号は、FPGA120及びメモリ110以外の追加デバイスに及ぶことができる。あるいは、他のアドレス指定方法を使用することもできる。例えば、選択されたデバイスのアドレスがTSV104を介して送信されてもよい。
コンピューティングシステム100は、ソースコードに基づいて命令を生成するコンパイラ103を含む。コンパイラ103によって生成された命令はメモリサブシステム110に記憶され、プロセッサ101は、メモリサブシステム110から命令を取得して実行することができる。
図2は、FPGA120の実施形態の内部コンポーネントを示す図である。FPGA120は、論理ブロック(すなわち、ブロック131〜142)と呼ばれるプログラマブル回路要素のアレイと、論理ブロック131〜142を選択的に接続するために使用される相互接続リソース220〜222と、を備えるプログラマブルデバイスである。
FPGA120において、プログラミング領域122〜125の境界は破線で示されている。プログラミング領域122は、論理ブロック131〜134を含み、プログラミング領域123は、論理ブロック135〜138を含み、プログラミング領域124は、論理ブロック139,140を含み、プログラミング領域125は、論理ブロック141,142を含む。プログラミング領域122〜125は、FPGA120に含まれる論理ブロックを、互いに独立して動作及びプログラムできるか、より大きなプログラマブル領域として動作するように組み合わせることができる別々の構成ドメインに分割する。
プログラミング後に、プログラミング領域122〜125に含まれるロジックは、中央処理装置(CPU)又はグラフィックス処理ユニット(GPU)パイプラインの一部として使用することができる。したがって、プログラミング領域を使用して、CPU又はGPUからFPGA120に提供される命令ストリームにおいて受信された1つ以上の命令を実行することができる。
図2に示すように、プログラミング領域122,123の各々は、4つの構成可能論理ブロックを含み、プログラミング領域124,125の各々は、2つの構成可能論理ブロックを含む。したがって、所定のプログラミング領域は、同じプログラマブルデバイス内の別のプログラミング領域と同じ数の構成可能論理ブロックを含む必要がない。代替の実施形態では、プログラミング領域は、図示された数よりも少ない又は多い構成可能論理ブロックを含むことができる。
構成可能論理ブロック131〜142の各々は、ルックアップテーブル(LUT)及び固定機能ブロックを含む。プログラミングの後、LUTへの機能入力の各々の組み合わせは、任意の論理機能の実現を可能にする所定の出力をもたらす。構成可能論理ブロックの各々は、適切な値をLUT、及び、論理ブロック内のコンポーネント(例えば、LUT、固定機能ブロック等)間の接続を制御する構成メモリ領域又はレジスタに書き込むことによって、様々な機能を実行するようにプログラムすることができる。
構成可能論理ブロック131〜142の各々はプログラマブル相互接続ファブリック220に接続され、プログラマブル相互接続ファブリック220は、ブロック131〜142が選択的に相互接続されるのを可能にする導電性トレース及びスイッチを含む。図2では、構成可能なロジック131をプログラマブル相互接続ファブリック220に接続する導電性トレースが示されている。また、他のブロック132〜142も導電性トレースを介して相互接続ファブリック220に接続される。しかし、これらのブロック132〜142を相互接続ファブリック220に接続する導電性トレースは、明瞭化のために図面から省略されている。
プログラマブル相互接続ファブリック220は、代替の実施形態では、図2に示されるものと一様ではない場合がある。例えば、相互接続ファブリックは、異なる長さを有する導電性トレースを含むことができ、又は、FPGA120の異なる領域に異なる数の平行な導電性トレースを含むことができる。相互接続ファブリック220の導電性トレースは、それらが交差するスイッチによって相互に接続される。例えば、複数のトレースが交差する領域221(点線で示される)は、2つの導電性トレース間の各交点間のスイッチを含む。あるいは、スイッチは、領域221内のいくつかの交点にのみ存在してもよい。
また、プログラマブル相互接続ファブリックは、1つのプログラミング領域内のコンポーネントを他のプログラミング領域から選択的に隔離するために使用することの可能な境界スイッチ(例えば、スイッチ222等)を含む。境界スイッチは、FPGA120内のプログラミング領域122〜125の境界に配置される。例えば、プログラマブル相互接続ファブリック220の導電性トレースがプログラミング領域122の境界を横切るところに境界スイッチ222が配置される。
したがって、境界スイッチ222を使用して、構成可能論理ブロック131〜134及びプログラミング領域122の他のコンポーネントを、他のプログラミング領域123〜125から隔離することができる。さらに、境界スイッチは、プログラミング領域を組み合わせるために、選択的に開閉することができる。例えば、プログラミング領域122,123間にある境界スイッチ222を閉じて領域122,123を互いに組み合わせ、他の境界スイッチを開いたままにして、組み合わせたプログラミング領域122,123を他のプログラミング領域124,125から隔離することができる。
図1を参照すると、FPGA120は、FPGA120内のプログラミング領域122,123のプログラミングを容易にする構成ロジック121を含む。特に、構成ロジック121は、プログラミング領域122の構成可能論理ブロック131〜134又はプログラミング領域123の構成可能論理ブロック135〜138のハードウェアを、既存のハードウェア構成から新たなハードウェア構成に再構成することによって、TSV104を介して受信する命令に応答する。構成ロジック121による1つのプログラミング領域内のハードウェアの再構成は、1つ以上の命令を実行するために異なるプログラミング領域が使用されている間に行われる。
構成ロジック121は、TSV104を介して受信した明示的な再構成命令に応じて、FPGA120内の1つ以上のプログラミング領域を再構成し、1つ以上のプログラミング領域を再構成することによって特定の機能の使用を要求する命令に対して黙示的に応答することができる。
命令ストリームに含まれる明示的な再構成命令は、FPGA120のランタイム動作中に受信され、再構成の対象となるプログラミング領域と、対象となるプログラミング領域のために選択された構成と、の両方を識別することができる。明示的な再構成命令に応じて、構成ロジック121は、対象となるプログラミング領域をFPGA120内の他のプログラミング領域から独立して再構成するために、(例えば、対象となるプログラミング領域のエッジにおいて境界スイッチを開くことによって)対象となるプログラミング領域を隔離し、次いで、選択された構成を対象となるプログラミング領域に適用することによって、対象となるプログラミング領域を再構成することができる。
明示的な再構成命令は、FPGAプログラミングビットストリームのアドレスを直接参照することによって、又は、所定のカスタマイズ可能な機能の1つのセットを参照することによって、対象となるプログラミング領域に実装される機能を参照する。例えば、構成メモリ111内の状態A,Bの各々は、プログラミング領域122にプログラム可能な機能に対応し、構成メモリ112内に記憶される状態C,Dの各々は、プログラミング領域123にプログラム可能な機能に対応している。状態A,B,C,Dの各々は、プログラミング領域内の対応する機能を実現するために使用され得る構成ビットストリームを記憶する。
構成ビットストリームは、構成ロジック121が対応する機能の実装を要求する明示的な再構成命令を受信する前に、構成メモリ領域111,112に記憶される。例えば、構成ビットストリームは、命令ストリームを生成するアプリケーションの実行開始時に記憶されてもよいし、アプリケーション内のプログラムループ又は他の実行バリアの先頭に記憶されてもよい。
構成ロジック121は、明示的な再構成命令が受信されなくても、プログラミング領域122,123の何れかのハードウェアを黙示的に再構成することができる。例えば、プログラミング領域122,123の何れにも実装されていない機能を呼び出す命令を受信した場合に、構成ロジック121は、再構成された1つ以上のプログラミング領域で命令を実行する前に、この機能を実現するためにプログラミング領域122,123の1つ以上を再構成する。
特定のプログラミング領域の構成メモリには、プログラミング領域の現在の構成も記録される。例えば、プログラミング領域122に関連する構成メモリ111は、プログラミング領域122の現在の構成を記憶する。したがって、特定の機能を呼び出す命令を受信したときに、命令をプログラミング領域で実行可能であるかどうか、又は、命令を実行するためにプログラミング領域を再構成すべきかどうかを判別するために、プログラミング領域の現在の構成を確認することができる。代替の実施形態では、FPGA120内の各プログラミング領域122〜123の現在の構成は、構成メモリ領域111〜112以外の場所に記憶される。例えば、現在の構成は、FPGA120自体に位置するメモリ又はレジスタに記憶され得る。
特定の機能を呼び出す命令に応じて、FPGA120の各プログラミング領域122〜123の現在の構成が確認され、呼び出された機能がプログラミング領域122〜123の何れかで実行可能であるかどうかが判別される。プログラミング領域122〜123の何れも呼び出された機能を実行するように構成されていない場合に、構成ロジック121は、プログラミング領域122〜123のうち1つ以上を、呼び出された機能を実行することの可能な新たな構成に再構成する。
図3は、一実施形態による、構成ロジック121がプログラミング領域の黙示的な再構成を実行するときに、プログラミング領域の構成ビットストリームが、受信した命令300に基づいてどのようにメモリに配置されるかを示す図である。図3に示すように、受信した命令300は、値ID1,ID2によって識別される2つの機能を識別する単一命令多重データ(SIMD)命令である。機能ID1に対して、命令300は、2つのオペランドSRC1A,SRC1Bと、機能結果の宛先DEST1と、を識別する。機能ID2に対して、命令300は同様に、2つのオペランドSRC2A,SRC2Bと、機能結果の宛先DEST2と、を識別する。
構成ロジック121は、命令300を受信すると、機能テーブル301内の呼び出された機能ID1,ID2のエントリを参照する。図3に示すように、機能テーブル301は、機能ID1,ID2の各々のアドレスA及びアドレスBを返す。アドレスA,Bは、構成メモリ111に記憶されている構成ビットストリーム(すなわち、状態A及び状態B)の位置を識別する。構成ロジックは、状態A及び状態Bに記憶されている識別された構成ビットストリームを使用して、命令300の実行のためにプログラミング領域123を再構成する。
状態A〜Dにおける構成ビットストリームは、単純な単一オペレーション又はより複雑な複合オペレーションであるプログラミング領域122〜123で実装するための機能を定義することができる。プログラムされると、プログラミング領域122〜123は、各々がメモリアドレスの範囲を通してアクセス可能な独立した論理ユニットとして使用することができる。適切に構成されたプログラミング領域で命令を実行する場合、プログラミング領域の入力に接続された所定のオペランドレジスタを介して、命令のオペランドを渡すことができる。
FPGA120内の構成可能論理ブロック131〜138は、コンピューティングシステム100の構築された状態のかなりの部分を含むことができる。例えば、状態情報は、プログラミング領域内の命令の実行中に変更可能な値を含むことができる。論理ブロック131〜138の再構成によってコンテキストスイッチが行われると、再構成された論理ブロックの状態を、後で復元することができるように一時的に記憶することができる。例えば、プログラミング領域で実行されている第1スレッドは、第2スレッドがプログラミング領域を再構成することができるように一時停止することができ、第2スレッドがプログラミング領域での実行を終了した後に第1スレッドを再開するために、プログラミング領域の以前の構成及びコンテキストをコンテキストメモリから復元することができる。
図1を再度参照すると、構成メモリ111,112は、プログラミング領域122,123の各々に関連するコンテキストメモリ113,114を含む。コンテキストメモリ113,114は、論理ブロックの状態情報を各々のプログラミング領域122,123に記憶するために使用される。プログラミング領域122,123の何れかの再構成の前に、再構成されるプログラミング領域のコンテキストメモリは、同じコンテキストでプログラミング領域の元の構成を後に復元することができるように、論理ブロックの状態情報をプログラミング領域に記憶する。
具体的には、コンテキストデータは、プログラミング領域のハードウェア構成及びプログラミング領域内のレジスタ及びメモリブロック内に記憶された値を識別する情報を含むことができる。コンテキストメモリ113,114の何れかに記憶されたデータは、論理スタックとして編成することができる。したがって、プログラミング領域の第1構成に関連するコンテキストデータは、プログラミング領域を第2構成に再構成する前にスタックにプッシュされる。プログラミング領域が第1構成に再構成される場合に、第1構成のコンテキストデータがスタックからポップされ、第1構成のコンテキストが復元される。
概して、本明細書で説明する動作は、コンピューティングシステム100内の図示されたコンポーネントの1つによって実行されるものとして、別の実施形態ではコンピューティングシステム100内の他のコンポーネントによって実行され得る。例えば、構成ロジック121によって実行される動作は、他の実施形態では、コンピューティングシステム100の他のコンポーネントで実行されてもよい。構成メモリ111,112は、別のメモリ110上に配置されるように示されているが、その代わりにコンピューティングシステム100の他のコンポーネントに配置され得る。例えば、FPGA120は、代替の実施形態では、構成メモリ111,112の機能を実行するために使用可能なメモリを含むことができる。
図1を参照すると、コンピューティングシステム100のコンパイラ103は、アプリケーションのソースコードに基づいてアプリケーション用の命令を生成し、生成された命令を、プロセッサ101がアクセス可能な場所(例えば、メモリ110)に記憶する。代替の実施形態では、命令は、ハードディスクドライブ又は他の永続メモリ等のように、メモリ110と異なるメモリ場所に記憶される。図1では、コンパイラ103は、コンピューティングシステム100上で実行されるものとして示されているが、代替の実施形態では、別のコンピューティングシステム上で実行され、生成した命令をコンピューティングシステム100に送信することができる。
コンピューティングシステム100用の命令を生成する場合、コンパイラ103は、FPGA120内のプログラミング領域をプログラムするために、構成ビットストリームを構成メモリ領域(例えば、メモリ111,112)にプリロードする命令を挿入する。コンパイラは、ソースコードに基づいて実行され得る命令のタイプを識別し、次いで、命令を実行するための機能を実施するために、適切な構成ビットストリームをプリロードするための命令を挿入する。例えば、コンパイラ103は、プログラミング領域122,123の構成を利用する命令を実行する前に、コンフィギュレーション状態A,B,C,Dを構成メモリ111,112にプリロードする命令を生成する。構成ビットストリームを構成メモリ111,112にプリロードすることによって、構成ロジック121は、命令ストリームの命令に応じてプログラミング領域の黙示的な再構成を迅速に実行することができる。
コンパイラ103は、明示的な再構成命令を、アプリケーション用の命令ストリームに挿入することもできる。コンパイラ103は、アプリケーションのソースコードに基づいて、プログラミング領域に実装可能な機能によって実行可能な命令を識別し、その後、明示的な再構成命令を、識別された命令の前に命令ストリームに挿入する。したがって、明示的な再構成命令は、識別された命令が実行されるようにスケジューリングされる前に、識別された命令の実行のためにプログラミング領域の1つを再構成させる。
コンパイラ103は、再構成されるプログラミング領域の使用の前に明示的な再構成命令をスケジューリングし、他の命令がFPGA120の他のプログラミング領域又はプロセッサ101で並列に実行されている間に再構成が行われるように、明示的な再構成命令をスケジューリングすることもできる。明示的な再構成命令の完了に依存する命令は、再構成が完了するまで命令の実行を抑制する、命令の一部としての依存性を示す。
また、コンパイラ103は、プログラミング領域に実装される特定の機能を呼び出す命令と、この機能を実現するための再構成レイテンシとを識別することに基づいて、構成プリフェッチ命令を挿入することもできる。構成プリフェッチ命令は、プログラミング領域の所期の明示的又は黙示的な構成変更の前に、プログラミング領域の構成ビットを、メインメモリから例えばローカルSRAM又はSTT−MRAMバッファ等のより高速なメモリに転送する。したがって、構成プリフェッチ命令は、プログラミング領域を再構成するためのレイテンシを低減することができる。
また、コンパイラ103は、プログラミング領域を再構成する回数を減らすために、同じプログラマブル機能を使用する命令のグループをクラスタリングして、プログラミング領域を再構成するのに費やされる時間及び電力を削減することを試みる。
コンパイラ103は、再構成バリア命令を、アプリケーションの命令ストリームに挿入することもできる。再構成バリア命令は、複数のスレッドの何れかの実行が継続する前に、複数のスレッドに対して、1つ以上のプログラミング領域の再構成が完了するのを待機させる。再構成バリア命令は、例えば、複数の実行レーンを実装する1つ以上のプログラミング領域を、新たなワークグループを実行するための新たな機能のセットに再構成するために使用され得る。
図4Aは、一実施形態による、3次元(3D)ダイスタック400としてのコンピューティングシステム100のコンポーネントの物理的な配置を示す図である。図4Aに示すように、複数の集積回路ダイ401〜404は、スタック400のインタポーザ405上に垂直に配置される。集積回路ダイのスタックの各々は、上から下に積み重ねられたDRAMダイ401と、SRAMダイ402と、FPGAダイ403と、プロセッサロジックダイ404と、を含む。プロセッサロジックダイ404は、図1に示すようなプロセッサロジックブロック105に対応し、これにより、コンピューティングシステム100のプロセッサ101及びメモリコントローラ102は、プロセッサロジックダイ404上に存在する。FPGA120は、FPGAダイ403上に存在する。DRAMダイ401は、プロセッサ101及びFPGA120によってアクセス可能であり、プログラムコード、プログラムデータ及び構成ビットストリームを構成メモリ領域111,112に記憶するメモリ110を含む。
SRAMダイ402は、DRAM401よりも低いレイテンシを有するメモリを含み、DRAM401に加えて構成ビットストリームを記憶するために設けられている。SRAMダイ402は、構成ビットストリームのキャッシングを実行する構成キャッシュ116,117を含むメモリ115を実装するために使用され、より少ないクロックサイクルでFPGA120内のプログラミング領域の再構成を可能にする。SRAMダイ402は、命令をキャッシュするためにも使用することができる。代替の実施形態では、SRAMダイ402の代わりに、DRAMよりも高速のSTT−MRAMメモリダイ又は他のメモリ技術が使用される。
3Dダイスタック400内のコンポーネント401〜405の配置、及び、1つ以上のTSVのセットによるこれらのコンポーネント401〜405の接続は、FPGA120のプログラミング領域122,123内の構成可能論理ブロック131〜138への新たな構成の迅速な転送を容易にする。スタック400に配置されているように、コンピューティングシステム100は、プログラムの命令ストリーム内の明示的又は黙示的な命令に応じて、少ないクロックサイクルでプログラミング領域を再構成することができる。
図4Bは、ダイ401〜404間を接続して通信を可能にするTSV104A,104Bとともに、DRAMメモリダイ401と、SRAMメモリダイ402と、FPGAダイ403と、処理ロジックダイ404と、を示す図である。図1に示すように、TSV104は、TSV104A,104Bを含む。TSV104A,104Bは、積層されたダイ401〜404間の1つ以上のTSVを表すことができる。例えば、TSV104A,104Bの各セットは、コマンド、アドレス及びデータTSVのサブセットを含むことができる。TSV104Aは、構成メモリ111と、構成キャッシュ116と、プログラミング領域122と、メモリコントローラ102と、の間の通信のためのデータパスを提供する。TSV104Bは、構成メモリ112と、構成キャッシュ117と、プログラミング領域123と、メモリコントローラ102と、の間の通信のためのダイレクトデータパスを提供する。
ダイスタック400では、構成キャッシュ及び構成メモリ領域は、物理的に、FPGA120内の他のプログラミング領域と比べて、対応するプログラミング領域により近く配置される。例えば、構成メモリ111及び構成キャッシュ116の各々は、FPGA120内の他のプログラミング領域(例えば、プログラミング領域123)と比べて、対応するプログラミング領域122に近い位置に配置される。同様に、構成メモリ112及び構成キャッシュ117の各々は、他のプログラミング領域と比べて、対応するプログラミング領域123に近い位置に配置される。また、スタック400の各構成メモリ及び構成キャッシュは、メモリ又はキャッシュの少なくとも一部が対応するプログラミング領域に配置されるように、積層される。関連するプログラミング領域に最も近い構成メモリ及びキャッシュ領域の位置決めと、FPGAダイ403上でのメモリダイ401,402の垂直方向の積層とは、TSV104A,104Bの長さを最小化し、構成データのより高速な伝送を容易にする。
FPGA120内の各プログラミング領域は、自身と、プロセッサロジックダイ404上に配置された共通メモリコントローラ102と、の間に専用のバス帯域幅を有する。代替の実施形態では、メモリコントローラ102を、処理ロジックダイ404の代わりに異なるダイ(例えば、FPGAダイ403)上に配置することができる。プログラミング領域の再構成が行われる場合に、メモリコントローラ102は、再構成されるプログラミング領域に関連する構成メモリ又は構成キャッシュからTSVを介して適切な構成ビットストリームデータを読み出す。次に、メモリコントローラ102は、構成ビットストリームデータを、TSVを介してプログラミング領域に書き込む。代替の実施形態では、各プログラミング領域は、複数のプログラミング領域と通信するために使用される共通メモリコントローラ102ではなく、FPGA120に実装されたそれ自身の単純なメモリコントローラを有することができる。
図5A〜5Dは、コンピューティングシステム100のコンポーネントが存在するダイをスタック400と異なるように配置する、コンピューティングシステム100の代替の実施形態を示す図である。図5A,5B,5C,5Dに示すように、スタック510,520A〜B,530A〜B,540A〜Cについて、これらのダイスタックに含まれるダイは、スタック400内の同様に名付けられた対応物と同様の特徴を有する。代替の実施形態では、他の構成も可能である。例えば、コンピューティングシステム100のいくつかのコンポーネントを、スタック400と比較して異なるダイ上に配置することができる。
図5Aは、インタポーザ514上で上から下に積層されたDRAMダイ511と、FPGAダイ512と、プロセッサロジックダイ513と、を含むダイスタック510を示す図である。図4Aに示すスタック400と比較して、スタック510は、低レイテンシメモリダイ(例えば、SRAMダイ又はSTT−MRAMダイ)の省略によって、コスト及び複雑さが低減される。
図5Bは、コンピューティングシステム100のコンポーネントが存在するダイを、2つのスタック520A,520Bに配置する構成を示す図である。スタック520Aは、インタポーザ524上で上から下に積層されたFPGAダイ521と、プロセッサロジックダイ522と、を含む。DRAMメモリダイ523は、隣接するスタック520B内の同じインタポーザ524上に積層され、インタポーザ524は、異なるスタック520A,520B内のダイ間の通信を可能にする電気接続を提供する。ロジックダイ521,522をメモリダイ523から隔離することによって、構造体からの放熱が促進される。
図5Cは、図5Bに示すダイスタック520A,520Bと同様の構成を有するダイスタック530A,530Bを含む構造を示す図である。しかし、スタック520Aとは対照的に、スタック530Aは、FPGAダイ532と、プロセッサロジックダイ533上に積層された追加の低レイテンシメモリダイ(すなわち、SRAMダイ531)と、を含む。SRAMダイ531は、FPGA120内のプログラミング領域を再構成する時間を短縮するために、構成キャッシュメモリを実装するために使用される。DRAMダイ534は隣接するスタック530Bに配置され、ダイスタック530A,530Bの両方は、異なるスタック530A,530Bのダイ間の通信を可能にする電気接続を提供するインタポーザ535上に積層される。
図5Dは、コンピューティングシステム100のコンポーネントが、共通インタポーザ545上の3つのダイスタック540A,540B,540Cに配置される構造を示す図である。複数のダイスタック540A、540B,540Cへのダイの配置は、構造体からの放熱を促進する。ダイスタック540Aはプロセッサロジックダイ542を含み、ダイスタック540CはDRAMダイ544を含み、ダイスタック540Bは、FPGAダイ543上に積層されたSRAMダイ541を含む。ダイ541〜544の各々は、共通インタポーザ545によって提供される電気接続を介して他のスタックのダイと通信することができる。
図6は、命令ストリームの命令に基づいて再構成可能なFPGA120を含むコンピューティングシステム100において命令ストリームを実行するためのプロセス600の実施形態を示す図である。プロセス600の動作は、プロセッサ101から発行された命令ストリームの命令を実行するために、コンピューティングシステム100の様々なコンポーネントによって実行される。一実施形態では、命令ストリームは、単一のコンピュータプログラムを定義する命令のサブセットを少なくとも含む連続命令ストリームである。
プロセス600は、ブロック601で開始する。ブロック601において、コンピューティングシステム100は、FPGA120内のプログラミング領域毎に1つ以上の選択可能な構成を記憶する。例えば、プログラミング領域122に関連する構成メモリ111は、プログラミング領域122へのプログラミングのために選択可能な少なくとも2つの構成、状態A及び状態Bを記憶する。この例を続けると、状態Aは、4つの加算器ユニットを実装するようにプログラミング領域122を構成するための構成ビットストリームを含み、状態Bは、4つの乗算器ユニットを実装するようにプログラミング領域122を構成するための構成ビットストリームを含む。プロセス600は、ブロック601からブロック603に進む。
ブロック603において、FPGA120は、命令ストリーム内の第1命令を受信する。例えば、プロセッサ101は、実行される命令を、FPGA120の1つのプログラミング領域にディスパッチすることができる。命令は、FPGA120の構成ロジック121で受信される。プロセス600は、ブロック603からブロック605に進む。
ブロック605〜607において、構成ロジック121は、受信した命令に基づいて、受信した命令又は後続の命令が実行される前に何れかのプログラミング領域を再構成すべきかどうかを判別する。ブロック605において、構成ロジック121は、ブロック603で受信した命令が明示的な再構成命令であるかどうかを判別する。命令が明示的な再構成命令でない場合、プロセス600はブロック607に進む。
ブロック607において、構成ロジック121は、ブロック603で受信した命令を実行するためにプログラミング領域が既に構成されているかどうかを判別する。例えば、命令が乗算命令である場合、構成ロジック121は、プログラミング領域122,123の何れかの既存の構成が命令を実行するために使用可能な乗算器ユニットを含むかどうかを判別する。ブロック607において、少なくとも1つのプログラミング領域が命令を実行することができる場合、プロセス600はブロック609に進む。
ブロック609において、命令は、命令を実行するために適切に構成されたプログラミング領域内で実行される。したがって、ブロック603〜609の動作によって、明示的な再構成命令ではなく、命令を実行するためにプログラミング領域が適切に構成されているときに受信する命令は、命令を受信することに応じてプログラミング領域で単純に実行される。プロセス600は、ブロック609からブロック603に戻る。
ブロック603において、FPGA120は、命令ストリーム内の第2命令を受信し、この第2命令によって、1つ以上のプログラミング領域が再構成される。第2命令は、命令ストリーム内の第1命令の後の次の命令とすることができる。換言すれば、プログラミング領域の再構成を引き起こす命令は、既存の構成を使用するプログラミング領域で実行される第1命令と同じ連続命令ストリームの一部とすることができる。一実施形態では、命令ストリームを制御するプロセス又はエンティティが、別のプロセス又はエンティティ(例えば、オペレーティングシステム、ハードウェアデバイス等)による中断無しに、ストリーム内の各命令から次の命令へ自動的に進むことを可能にする間、命令ストリームは連続的であるとみなされることができる。プロセス600は、ブロック603からブロック605に進む。
ブロック605において、構成ロジック121は、ブロック603で受信した第2命令が明示的な再構成命令であるかどうかを判別する。明示的な再構成命令は、プログラミング領域を識別し、識別されたプログラミング領域の構成を識別する。例えば、明示的な再構成命令は、プログラミング領域122と、プログラミング領域122を構成するための構成メモリ111内の状態Bと、を識別することができる。第2命令が明示的な再構成命令である場合、プロセス600はブロック611に進み、そうでない場合、プロセス600はブロック607に進む。
ブロック607において、構成ロジック121は、ブロック603で受信した第2命令を実行するために、プログラミング領域が既に構成されているかどうかを判別する。FPGA120内のプログラミング領域が第2命令の実行のために既に構成されている場合には、プロセス600がブロック609に進み、命令がプログラミング領域で実行される。そうでなければ、プロセス600はブロック611に進む。
ブロック611において、構成ロジック121は、FPGA120内の1つ以上のターゲットプログラミング領域を識別し、1つ以上のターゲットプログラミング領域のコンテキストデータを、1つ以上のターゲットプログラミング領域に対応するコンテキストメモリに記憶することによって、1つ以上のターゲットプログラミング領域を再構成する準備をする。例えば、明示的な再構成命令に応じて再構成が実行されている場合、明示的な再構成命令は、FPGA120内のどのプログラミング領域を再構成すべきかを示す。黙示的な再構成のために、構成ロジック121は、使用されていないか、近い将来に使用されることが予想されないプログラミング領域をターゲットプログラミング領域として識別することができる。プロセス600は、ブロック611からブロック613に進む。
ブロック613において、構成ロジック121は、ターゲットプログラミング領域の境界にて境界スイッチを開き、ターゲットプログラミング領域の構成可能論理ブロックを他のプログラミング領域から切断することによって、ターゲットプログラミング領域をFPGA120内の他のプログラミング領域から隔離する。このターゲットプログラミング領域の隔離により、ターゲットプログラミング領域内のハードウェアを、FPGA120内の他のプログラミング領域の何れかから独立して再構成することができる。図2を参照して、プログラミング領域122をターゲットプログラミング領域として上述した例を続けると、構成ロジック121は、プログラミング領域122の境界で境界スイッチ222を切断することによって、プログラミング領域122の構成可能論理ブロック131〜134を隔離する。プロセス600は、ブロック613からブロック615に進む。
ブロック615において、構成ロジック121は、ブロック603で受信した命令に基づいて、ターゲットプログラミング領域の1つの構成を選択する。命令が明示的な再構成命令である場合、構成ロジック121は、命令に示された構成を選択する。例えば、「状態B」構成を示す明示的な再構成命令は、構成ロジック121に、構成メモリ111に記憶されている状態Bに対応する構成ビットストリームを選択させる。
あるいは、ブロック603で受信した命令が明示的な再構成命令ではない場合に、構成ロジック121は、図3に示すように、機能テーブル301を使用して構成を選択する。構成ロジック121は、機能テーブル301内の命令のオペコード(例えば、ID1、ID2)をルックアップして、プログラミング領域を構成するための構成ビットストリームのアドレス(例えば、アドレスA、アドレスB)を決定する。プロセス600は、ブロック615からブロック617に進む。
ブロック617において、構成ロジック121は、選択された構成ビットストリームを使用してターゲットプログラミング領域の構成可能論理ブロック内のハードウェアを再構成する。メモリコントローラ102は、選択された構成ビットストリームを構成メモリから取得し、ビットストリームを、TSV104を介してFPGA120に送信する。次に、構成ロジック121は、構成ビットストリームを使用してターゲットプログラミング領域を再構成する。例えば、ターゲットプログラミング領域122が状態Bにしたがって再構成される場合、構成ロジック121は、状態Bに対応する構成ビットストリームをTSV104を介して受信し、状態Bの構成ビットストリームを使用してプログラミング領域122の構成可能論理ブロック131〜134をプログラムする。一実施形態では、構成ビットストリームを、ターゲットプログラミング領域122の対応するキャッシュメモリ141にキャッシュすることができる。一実施形態では、ターゲットプログラミング領域の1つ以上の構成可能論理ブロック内のハードウェアを再構成するための持続時間は、1ミリ秒未満であってもよい。プロセス600は、ブロック617からブロック619に進む。
ブロック619において、ブロック603で受信した命令が実行を保留している場合、プロセス600はブロック609に進み、再構成されたプログラミング領域で命令を実行する。そうでなく、命令が実行を保留していない場合(例えば、命令が、再構成が完了した明示的な再構成命令である場合)、プロセス600はブロック603に戻り、命令ストリーム内の次の命令を受信する。したがって、実行プロセス600は、特定の機能の要求に応じて明示的又は黙示的に指示されたときにプログラミング領域を適切に再構成するように、命令ストリーム内で受信した命令を実行するループで動作する。
本明細書で使用される場合、「に結合される」という用語は、1つ以上の介在するコンポーネントを介して直接的又は間接的に結合されることを意味し得る。本明細書で説明される様々なバスを介して提供される信号の何れかは、他の信号と時間多重化され、1つ以上の共通バスを介して提供される。また、回路コンポーネント又はブロック間の相互接続は、バス又は単一の信号線として示すことができる。各バスは1つ以上の単一信号線であってもよく、単一信号線の各々はバスであってもよい。
特定の実施形態は、非一時的(non-transitory)なコンピュータ可読媒体に記憶された命令を含むことができるコンピュータプログラム製品として実装されてもよい。これらの命令は、説明した動作を実行するように汎用又は専用プロセッサをプログラムするために使用されてもよい。コンピュータ可読媒体は、機械(例えば、コンピュータ)によって読み取り可能な形式(例えば、ソフトウェア、処理アプリケーション)で情報を記憶又は送信する任意のメカニズムを有する。非一時的なコンピュータ可読記憶媒体は、限定されないが、磁気記憶媒体(例えば、フロッピー(登録商標)ディスケット)、光記憶媒体(例えば、CD−ROM)、光磁気記憶媒体、読み出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、消去可能プログラマブルメモリ(例えば、EPROM及びEEPROM)、フラッシュメモリ、又は、電子命令を記憶するのに適した他のタイプの媒体を含むことができる。
また、いくつかの実施形態は、コンピュータ可読媒体が複数のコンピュータシステムに記憶され、及び/又は、複数のコンピュータシステムによって実行される分散コンピューティング環境で実施することができる。さらに、コンピュータシステム間で転送される情報は、コンピュータシステムを接続する伝送媒体を介してプル又はプッシュされてもよい。
一般に、コンピュータ可読記憶媒体に運ばれるコンピューティングシステム100及び/又はその一部を表すデータ構造は、プログラムによって読み取られ、コンピューティングシステム100を含むハードウェアを製造するために直接的又は間接的に使用され得るデータベース又は他のデータ構造であってもよい。例えば、データ構造は、Verilog又はVHDL等の高レベル設計言語(HDL)におけるハードウェア機能の動作レベル記述又はレジスタ転送レベル(RTL)記述であってもよい。記述は、合成ライブラリからゲートのリストを含むネットリストを生成するために記述を合成する合成ツールによって読み取られてもよい。ネットリストは、コンピューティングシステム100を含むハードウェアの機能も表すゲートのセットを含む。次に、ネットリストを配置及びルーティングして、マスクに適用される幾何学的形状を記述するデータセットを生成することができる。次いで、マスクは、様々な半導体製造ステップで使用され、コンピューティングシステム100に対応する1つ以上の半導体回路を製造することができる。あるいは、コンピュータ可読記憶媒体上のデータベースは、所望によりネットリスト(合成ライブラリを含む又は含まない)若しくはデータセット、又は、グラフィックデータシステム(GDS)IIデータであってもよい。
本明細書の方法の動作を特定の順序で示して説明しているが、各方法の動作の順序は、特定の動作が逆の順序で実行されるように、又は、特定の動作が他の動作と少なくとも部分的に並行して実行されるように変更されてもよい。別の実施形態では、別個の動作の命令又はサブ動作は、断続的及び/又は交互の方法であってもよい。
前述した本明細書では、実施形態を、その特定の例示的な実施形態を参照して説明してきた。しかし、添付の特許請求の範囲に記載された実施形態のより広い趣旨及び範囲から逸脱することなく、様々な修正及び変更がなされ得ることは明らかであろう。したがって、本明細書及び図面は、限定的な意味ではなく例示的な意味であるとみなされるべきである。