この明細書は新規とみなされる1つ以上の実施例の特徴を定める請求項で終えるが、1つ以上の実施例は、図面と併せた記載を考慮することによってさらによく理解されると思われる。要求されるように、1つ以上の実施例は、この明細書中に開示される。しかし、1つ以上の実施例は、単に例示であると理解されるべきである。そのため、この明細書中に開示される特定の構造および機能的な詳細は、限定解釈されず、単に請求項の根拠として、かつ、実質的に任意の適切な詳細構成における1つ以上の実施例をさまざまに採用するように当業者に教示するための代表的な根拠として解釈される。さらに、ここで使用される用語および語句は、限定することでなく、ここに開示される1つ以上の実施例の理解可能な説明を与えることを意図する。
この明細書中に開示される1つ以上の実施例は、集積回路に関し、より特定的には、IC内で実現されるプロセッサシステムの拡張に関する。ICは、プログラマブルファブリックの一部に結合されるプロセッサシステムを含むように実現され得る。プロセッサシステムの機能性は、プロセッサシステムと連動して、たとえば相補的に、プログラマブルファブリックの能力を活用することによって拡張され得る。プロセッサシステムによって実行されるあるいはされ得る1つ以上のプロセスは、たとえば、プログラムコードの実行を通して、プログラマブルファブリック内で実現される回路、たとえばハードウェアにオフロードされ得る。場合によって、回路においてソフトウェアプロセスを実現することは、プロセッサシステム内のプログラムコードの実行を通したプロセスを実現することよりも、完了のために少ない時間を必要とし、少ない時間遅れを有し、および/または少ないエネルギーを使用する。
したがって、1つ以上のプロセスが、選択され、かつプログラマブルファブリック内で実現される回路にオフロードされ得る。回路は、特に、オフロードプロセスを実現するために設計される。たとえば、プロセッサシステムによって実行されるプログラムコードにおいて特定される特定のアルゴリズムまたは手順は、プログラマブルファブリック内のハードウェアにおいて実現され得る。プロセッサシステムは、回路、たとえばプロセス特定回路にプロセスを実行するように指示する。そのため、プロセスは、プロセッサシステム内のプログラムコードの実行を介してよりも、プログラマブルファブリック内のプロセス特定回路によって実行される。
オフロードされるべきプロセスの選択と、いつプロセスをオフロードするかについての決定とは、さまざまな異なる技術を使用してプロセッサシステムによって実行され得る。たとえば、インジケータは、これらのプロセスがオフロードされることを特定するプロセッサシステムによって実行されるプログラムコード内に配置され得る。別の局面において、プロセッサシステムは、プロセス選択および選択されるプロセスがいつプログラマブルファブリックにオフロードされるかに関する、より動的かつ知的な決定をする。
図1は、この明細書中に開示される実施例に従うICのアーキテクチャ100を説明する第1ブロックダイアグラムである。アーキテクチャ100は、フィールドプログラマブルゲートアレイ(FPGA:field programmable gate array)タイプのIC内に実現され得る。図示されるように、アーキテクチャ100は複数の異なるタイプのプログラマブル回路、たとえば論理、のブロックを含む。たとえば、アーキテクチャ100は、マルチギガビットトランシーバ(MGT)101と、設定論理ブロック(CLB)102と、ランダムアクセスメモリブロック(BRAM)103と、入力/出力ブロック(IOB)104と、設定およびクロッキング論理(CONFIG/CLOCK)105と、ディジタル信号処理ブロック(DSP)106と、専用入力/出力ブロック(I/O)107(たとえば設定ポートおよびクロックポート)と、ディジタルクロックマネージャ、アナログ−ディジタル変換器、およびシステムモニタリング論理などの他のプログラマブル論理108とを含む複数の異なるプログラマブルタイルを含む。
幾つかのプログラマブルICにおいて、プログラマブルタイルの各々は、プログラマブル相互接続素子(INT)111を含む。プログラマブル相互接続素子(INT)111は、隣接の各々のタイルの対応するINT111へ/からの、標準化された接続を有する。そのため、INT111は、ともに、図示されるICのプログラマブル相互接続構造を実現する。各INT111は、図1の上部に含まれる例に示されるように、同じタイル内のプログラマブル論理素子へ/からの、接続も含む。
たとえば、CLB102は、ユーザ論理に加えて単一のINT111を実現するようにプログラムされ得るコンフィギュラブル論理素子(CLE)112を含み得る。BRAM103は、1つ以上のINT111に加え、BRAM論理素子(BRL)113を含み得る。典型的には、タイル内に含まれるINT111の数は、タイルの高さに依存する。図示される実施例において、BRAMタイルは、CLVの5倍の高さを有するが、他の数(たとえば4)が使用されてもよい。DSPタイル106は、適切な数のINT111に加え、DSP論理素子(DSPL)114を含み得る。IOB104は、たとえば、1つのINT111のインスタンスに2つの入力/出力論理素子(IOL)115を加えたものを含み得る。当業者に明確なように、実際にたとえばIOL115へ接続されるI/Oパッドは、典型的には、IOL115に限られない。
図1に示される例において、ダイ中央付近のコラム状の領域(図1のハッチングで示される)は、設定と、クロックと、他の制御論理とに使用される。このコラムから延びる水平領域109は、プログラマブルICの幅を横切るクロックおよび設定信号を分配する。
図1に示されるアーキテクチャを利用する幾つかのプログラマブルICは、プログラマブルICの大部分を構成する規則的なコラム状の構造を中断させる追加の論理ブロックを含み得る。追加の論理ブロックは、プログラマブルブロックおよび/または専用回路とすることができる。たとえば、PROC110として示されるプロセッサブロックは、CLBとBRAMとの複数のコラムにおよぶ。
PROC110は、ICのプログラマブルファブリックを実現するダイの一部として製造され、ハードウェアにより実現されるプロセッサとして実現され得る。PROC110は、ことなるさまざまなプロセッサタイプ、および/または、個別のプロセッサ、たとえばプログラムコードを実行可能なシングルコア、から、1つ以上の、コア、モジュール、コプロセッサ、インタフェイス、あるいは同様のものを有するプロセッサシステム全体のような複雑なものに至るまでを表わし得る。
より複雑な配列において、たとえば中央処理ユニット、キャッシュメモリ、メモリコントローラ、プログラマブルICのI/Oピンに直接結合するおよび/またはプログラマブルICのプログラマブル回路に結合するように構成可能な一方向および/または双方向インタフェイスなどの1つ以上のコアを含み得る。「プログラマブル回路」は、ここで記載されるさまざまなプログラム可能なまたは設定可能な回路ブロックまたはタイルを参照し得る。ICにロードされる設定データに従って、さまざまな回路ブロック、タイル、および/または素子を選択的に結合する相互接続回路についても同様である。
PROC110内で利用可能なさまざまなインタフェイスを用いることで、PROC110によって実行されるプログラマブルコードにより定められるプロセスは、プログラマブルファブリック内に実現される回路にオフロードされ得る。述べられたようなアーキテクチャを有するIC内にロードされる設定データは、たとえば、プログラマブルファブリック内の1つ以上のプロセス特定回路(PSC)を実現し得る。PROC110は、ハードウェアの実施、すなわちPSCまたはPSCを特定する設定データ、に関連づけられる1つ以上のプロセスを選択し、実現のためのプロセスをプログラマブルファブリック内にオフロードし得る。
図1は、プログラマブルICを実現するのに使用されるアーキテクチャの例を単に説明することが意図されたものである。たとえば、コラム内の論理ブロックの数と、コラムの相対幅と、コラムの順序と、コラムに含まれる論理ブロックのタイプと、論理ブロックの相対サイズと、図1の上部に含まれる相互接続/論理の実行例は、単に例示にすぎない。実際のICにおいて、たとえば、ユーザ回路デザインの効率的な実現を促進するために、CLBの1より多い隣接コラムは、典型的には、CLBが現れるところのどこにでも含まれる。しかし、隣接CLBコラムの数は、IC全体のサイズで変わり得る。
図2は、この明細書中に開示される別の実施例に従って構成されるIC200を説明する第2ブロックダイアグラムである。IC200は、たとえばプログラマブルファブリック204のようなプログラマブル回路に結合されるプロセッサシステム(PS)202を含む任意のさまざまな異なる構成を使用して実現することができる。たとえば、IC200は、図1のアーキテクチャ100と同じあるいは類似したアーキテクチャを使用して実現され得るが、その場合に限られない。一般に、IC200は、PS202からハードウェアへのソフトウェアベースプロセスのオフロードを促進するために、PS202をプログラマブルファブリック204内に実現される回路に結合するために使用されるさまざまなインタフェイスをより詳細に説明する。
図2に示される例において、PS202は、IC200のダイのおよそ三分の二を占めるように図示され、一方でプログラマブルファブリック204は、同じダイのおよそ三分の一を占めると説明される。図2は、しかし、IC200の代表的なスケールを意図しているのではない。むしろ、図2は、例示を目的として与えられ、この明細書内に開示される1つ以上の実施例の限定を意図していない。
一般に、PS202は、IC200内にハードウェアにより構成されるシステムとして実現される。PS202内のさまざまな部品やモジュールは、ある程度、矢印を有するライン、たとえば信号または通信のリンクなど、によって結合される。そのような矢印は、制御のフローの方向を説明することを意図する。この点で、方向矢印を有するラインとして図示される信号は、一般に、信号の制御が、ターゲット部品よりも矢印を発するソース部品によってもたらされることを示している。矢印は、一般に、データまたは信号の方向を示すことを意図するものではない。この点で、信号は、方向矢印の存在にかかわらず、双方向信号または通信リンクとして実現され得る。
この明細書中において、同じ参照符号は、端子と、信号ラインと、ワイヤと、それらの一致する信号とを参照するために使用される。この点で、「信号」と、「ワイヤ」と、「接続」と、「端子」と、「ピン」との用語は、随時、この明細書中において、同義に使用されてもよい。「信号」や「ワイヤ」などは、シングルワイヤを介するシングルビットの伝達または複数の並列ワイヤを介する複数の並列ビットの伝達などの1つ以上の信号を表わし得ると認められるべきである。さらに、ワイヤまたは信号の各々は、別掲のとおり、信号またはワイヤによって接続された2つ以上の要素間の双方向通信を表わす場合もあってよい。
示されるように、PS202は、コア複合体206を含む。コア複合体206は、コア208および210と、DSPユニット212および214と、割り込み要求ユニット(IRQ)216と、スヌープ制御ユニット(SCU)218とを含む。コア208および210の各々は、そこに組み込まれたレベル1(L1)キャッシュ(図示しない)を含み得る。任意のさまざまな異なるタイプのプロセッサコアおよび/またはDSPユニットが使用され得るが、ここに開示される実施例において、コア208および210の各々は、32KBの命令キャッシュと32KBのデータキャッシュとを有するARM Cortex(登録商標)−A9タイプのプロセッサコアとして実現され得る。DSPユニット212および214は、NEON(登録商標)メディアおよび/または浮動小数点処理エンジンの形で実現され得る。DSPユニット212および214の各々は、128ビットのベクトルベースのDSP機能を与え得る。ARM Cortex(登録商標)−A9プロセッサおよびNEON(登録商標)メディアおよび/または浮動小数点処理エンジンは、英国ケンブリッジのARMホールディングス(ARM)から利用可能である。
PS202内において、コア複合体206は、レベル2(L2)キャッシュ220とオンチップメモリ(OCM)222とに結合される。L2キャッシュ220は、256KBメモリとして実現され得る。OCM222も、256KBメモリとして実現され得る。コア208および210とDSPユニット212および214とは、L2キャッシュ220およびOCM222に直接アクセスし得る。一般に、OCM222は、PS202および/またはプログラマブルファブリック204たとえばプログラマブルファブリック204内に実現される回路、に対して利用可能なローカルメモリを実現する。比較により、メモリでもあるL2キャッシュ220は、PS202のキャッシュとして機能する。したがって、L2キャッシュ220は、オフチップ実行メモリなどのRAM内に記憶されたデータビットを効率的なコピーであるデータの小さいブロックまたは一部を記憶し得る。もし、たとえば、L2キャッシュ220内に記憶されたデータの読み出し要求が発行されると、RAMから取り戻されるのと反対に、データはL2キャッシュ220から読まれる。
PS202はさらにリセットユニット224と、クロックユニット226と、メモリコントローラ228とを含む。リセットユニット224は、信号230などのIC200の外部のソースを起源とする1つ以上の信号を受ける。信号230は、PS202および/またはPS202内の1つ以上の全ての部品をリセットするように、リセットユニット224に指示する。クロックユニット226は、信号232などのIC200の外部のソースを起源とする1つ以上の基準信号を受け得る。クロックユニット226は、たとえば、受信された信号232と同期できる位相同期回路として実現され得、あるいはそれを含み得る。クロックユニット226は、1つ以上の異なる周波数のクロック信号を生成し得、そのクロック信号はPS202のいたるところに分配される(図示しない)。さらに、クロックユニット226は、1つ以上の異なる周波数の1つ以上のクロック信号を生成し得、そのクロック信号はプログラマブルファブリック204内に実現される回路による使用のためにプログラマブルファブリック204に分配され得る。
メモリコントローラ228は、「オフチップ」などのIC200の外部に配置される1つ以上の異なるタイプのRAMと通信するように実現され得る。たとえば、メモリコントローラ228は限定されないが、デュアルデータレート(DDR)2、DDR3、ロー電力(LP)DDR2タイプのメモリ、16ビット、32ビット、ECCを有する16ビットなどを含む、さまざまなタイプのメモリにアクセス、たとえば読みおよび/または書きなど、するように実現され得る。メモリコントローラ228が通信可能である異なるメモリタイプのリストは、説明のためのみ与えられ、限定や網羅的であることを意図しているのではない。
PS202は、コアスイッチ236とプログラマブルファブリック204とに結合されるダイレクトメモリアクセス(DMA)インタフェイス234も含み得る。PS202は、この明細中により詳細に記載されるインタフェイス256の1つ、すなわちインタフェイス256D、と、OCM222と、メモリコントローラ228とに結合するメモリスイッチ238をさらに含む。
コアスイッチ236は、示されるように、PS202のさまざまな部品の間に信号を送る。実施例において、コアスイッチ236は、PS202の内部バス(図示しない)に直接結合され得る。そのような実施例において、コアスイッチ236と接続するPS202内の他の部品の各々は、内部バスを介してコアスイッチ236に結合され得る。たとえば、インタフェイス240,242,246,および248の各々は、内部バスを経由してコアスイッチ236に結合され得る。内部バスは、たとえばアドバンストペリフェラスバス(APB)のような任意のさまざまな異なるバスとして実現され得る。
一般に、PS202は、およそ4つのI/Oのカテゴリーを含み得る。PS202には、フラッシュメモリタイプのインタフェイスと、より高いパフォーマンスのインタフェイスと、より低いパフォーマンスのインタフェイスと、デバッギングインタフェイスとが設けられる。I/Oの第1カテゴリに関して、PS202は、240Aおよび240Bとして説明される1つ以上のフラッシュメモリインタフェイス240を含み得る。たとえば、1つ以上のフラッシュメモリインタフェイス240は、4ビット通信用に構成されるクワッドシリアルペリフェラスインタフェイス(QSPI)として実現され得る。1つ以上のフラッシュメモリインタフェイス240は、パラレル8ビットNOR/SRAMタイプのインタフェイスとして実現されてもよい。1つ以上のフラッシュメモリインタフェイス240は、8ビットおよび/または16ビット通信用に構成されるNANDインタフェイスとして実現され得る。述べられる特定のインタフェイスは、説明の目的のためであり、限定を目的とするものでないと理解されるべきである。異なるビット幅を有する他のインタフェイスも使用され得る。
I/Oの第2カテゴリに関して、PS202は、I/Oの第1カテゴリよりもより高いレベルの性能を与える1つ以上のインタフェイス242を含み得る。インタフェイス242A−242Cの各々は、DMAコントローラ244A−244Cにそれぞれ結合され得る。たとえば、1つ以上のインタフェイス242は、ユニバーサルシリアルバス(USB)タイプのインタフェイスとして実現され得る。1つ以上のインタフェイス242は、ギガビットイーサネット(登録商標)タイプのインタフェイスとして実現されてもよい。1つ以上のインタフェイス242は、セキュアディジタル(SD)タイプのインタフェイスとして実現されてもよい。
I/Oの第3カテゴリに関して、PS202は、I/Oの第2カテゴリよりも低いレベルの性能を与えるインタフェイス246A−246Dのような1つ以上のインタフェイス246を含み得る。たとえば、1つ以上のインタフェイス246は、汎用I/O(GPIO)タイプのインタフェイスとして実現され得る。1つ以上のインタフェイス246は、ユニバーサル非同期レシーバ/トランスミッタ(UART)タイプのインタフェイスとして実現されてもよい。1つ以上のインタフェイス246は、シリアルペリフェラルインタフェイス(SPI)バスタイプのインタフェイスの形で実現されてもよい。1つ以上のインタフェイス246は、コントローラエリアネットワーク(CAN)タイプのインタフェイスの形で実現されてもよい。1つ以上のインタフェイス246は、トリプルタイマカウンタ(TTC)および/またはウォッチドッグタイマ(WDT)タイプのインタフェイスの形で実現されてもよい。
I/Oの第4カテゴリに関して、PS202は、プロセッサJTAG(PJTAG)ポートまたはインタフェイス248A、およびトレースインタフェイス248Bのような1つ以上のデバッグインタフェイス248を含み得る。PJTAGポート248Aは、PS202のための外部のデバッグインタフェイスを与え得る。トレースインタフェイス248Bは、トレースなどのデバッグ情報をプログラマブルファブリック204から受けるためのポートと、PS202のデバッギングデータをプログラマブルファブリック204に送り出すためのポートと、クロストリガポートとを与え得る。クロストリガポートは、プログラマブルファブリック204内の回路にPS202内のトレースのようなデバッグ機能を起動することができる。同様に、PS202は、プログラマブルファブリック204内に実現される回路内のデバッグ機能を開始させ得る。
示されるように、インタフェイス240,242,246,および248の各々は、マルチプレクサ250に結合され得る。マルチプレクサ250は、内部にIC200が配置されるパッケージのボールなどのIC200の外部のピンに直接送られまたは結合される複数の出力を与える。たとえば、IC200の複数のI/Oピン、たとえば53個のピン、は、インタフェイス240,242,246,および248の間で共有され得る。ユーザは、PS202の一部としてマルチプレクサ250をインタフェイス240−248のいずれが使用されるか、したがって、マルチプレクサ250を経由してIC200のI/Oピンに結合されるかを選択するように構成することができる。
示されるように、インタフェイス242−248は、ファブリックマルチプレクサ入力/出力(FMIO)インタフェイス252にも選択的に結合され得る。したがって、IC200、より具体的にはPS202のユーザ設定に基づいて、カテゴリ2,3,4、すなわちインタフェイス242−248の任意の1つは、FMIOインタフェイス252を経由してIC200のプログラマブルファブリック204に結合され得る。このことは、さらなる処理または/およびモニタリングのために、インタフェイス242−248のいずれか1つを経由して通知されるデータがプログラマブルファブリック204内の回路に送られるようにすることができる。
制御レジスタ254は、ほとんどでなくとも、さまざまなPS202のアスペクトを制御するように設定され得る。1つ以上の指令は、制御レジスタ254に書き込まれてPS202のオペレーションを制御または調整する。たとえば、プログラマブルファブリック204内の回路は、ここでさらに詳細に記載されるインタフェイス256Bのようなインタフェイスを介して制御レジスタ254に書き込まれ得る。制御レジスタ254は、知的所有権(IP)イネーブルリセットの制御と、クロックユニット226によって生成されるクロック周波数の設定、I/Oのドライブ強度の特定および、他のシステムレベル機能のような機能を制御または調整することができる。制御レジスタ254は、PS202のパワーダウン、PS202の特定のインタフェイスを個別にパワーダウンまたは非活性化するような追加の機能を調整することができる。制御レジスタ254は、たとえば、制御レジスタ254をコアスイッチ236に結合させるAPB(図示しない)のようなバスを介してアクセスされ得る。
PS202は、プログラマブルファブリック204に直接結合するインタフェイス256A−256Dとして示される1つ以上のインタフェイス256も含み得る。実施例において、1つ以上の全てのインタフェイス256は、ARMによって発行されるAMBA AXIプロトコル仕様(AXI)に従って実現され得る。たとえば、インタフェイス256の各々は、AMBA AXIプロトコル仕様V.2.0に準拠して実現され得る。一般に、AXIは、サブミクロン相互接続に適した高い性能、高い周波数のインタフェイスである。
図2を再び参照して、インタフェイス256Aおよび256Bの各々は、たとえば、プログラマブルファブリック204をコアスイッチ236に結合する2つの32ビットチャネルを与えるように実現され得る。インタフェイス256Aは、汎用マスタインタフェースとして実現され得る。インタフェイス256Aは、たとえば、PS202および/またはDMAコントローラからプログラマブルファブリック204へのデータの汎用転送を実行するために使用され得る。たとえば、インタフェイス256Bは、PS202とプログラマブルファブリック204との間の汎用データ転送のために使用され得る。
インタフェイス256A−256Bとコアスイッチ236とを介して、プログラマブルファブリック204内に実現される回路は、さまざまなインタフェイス240,242,246,および248の1つにアクセスし得る。インタフェイス256Aおよび/または256Bを介して、コアスイッチ236との組み合わせにより、プログラマブルファブリック204内の回路はOCM222に直接、そしてメモリコントローラ228などを介してオフチップメモリに、さらにアクセルし得る。
インタフェイス256Cは、プログラマブルファブリック204をコア複合体206、より具体的にはSCU218、に直接結合する64ビットスレーブインタフェイスとして実現され得る。インタフェイス256CとSCU218とを介して、プログラマブルファブリック204内に実現される回路は、コア208および210、IRQ216、L2キャッシュ220およびOCM222の各々の中にあるL1キャッシュへの直接のアクセスを与える。したがって、プログラマブルファブリック204内の回路は、そのようなメモリに対する読出しおよび/または書き込みと、コア複合体206内で生成されるまたはアサートされる割り込みの検出とを行ない得る。加えて、信号290は、ポートまたは信号としてIRQ216に与えられ得る、プログラマブルファブリック204からの1つ以上の割り込みおよび/またはPS202から、より具体的にはコア複合体206からの、ポートまたは信号しとしてプログラマブルファブリック204へ提供され得る、1以上の割り込みのコピー、を表わし得る。より具体的には、プログラマブルファブリック204にポートまたは信号として与えられ得るコア複合体206からポートまたは信号としてプログラマブルファブリック204に与えられ得る。別の実施例において、インタフェイス256Cは、コプロセッサとしての回路機能による使用に適するコア複合体206へのコヒーレントアクセスを与える。たとえば、プログラマブルファブリック204内にPSCたとえばPSC282の形で実現されるソフトプロセッサは、インタフェイス256Cを経由してPS202と通信し得る。
インタフェイス256Dは、複数、たとえば4つの、64ビットスレーブインタフェイスを与えるように実現され得る。インタフェイス256Dは、PS202とプログラマブルファブリック204内に実現される回路との間の大量のデータを効率良く交換するために使用され得る。示されるように、インタフェイス256Dは、メモリスイッチ238を経由するOCM222へのアクセスと、メモリスイッチ238およびメモリコントローラ228を経由するオフチップメモリへのアクセスを有する、プログラマブルファブリック204内に実現される回路を提供する。
PS202は、プロセッサ設定アクセスポート(PCAP)258をさらに含む。示されるように、PCAP258は、設定コントローラ260とプログラマブルファブリック204内に配置されるシステムモニタブロック262とに結合され得る。設定コントローラ260とシステムモニタブロック262とは、ハードウェアにより実現される回路の形で実現され得る。設定コントローラ260は、設定データを設定メモリセルへ書き込むことを担当し、それによって、プログラマブルファブリック204内の設定データにより特定される回路を物理的に実現する。システムモニタブロック262は、アナログディジタル(AD)変換、電圧モニタリング、電流モニタリング、および/または温度モニタリングのような機能を実行し得る。
プログラマブルファブリック204は、プログラマブル相互接続回路を使用してともに結合され得る1つ以上のプログラマブル回路ブロックを含むように実現され得る。プログラマブル回路ブロックとプログラマブル相互接続回路とは、IC200内にロードされた設定データに基づいて、1つ以上の異なる物理回路、たとえばユーザ回路280実現するように構成され得る。プログラマブルファブリック204、その中に実現されるハードウェアにより実現されるさまざまな回路を除く、は、設定データが設定メモリ内にロードされて、プログラマブルファブリック204内に物理回路が実現されるまで、動作ユニットまたは機能ユニットでないと理解されるべきである。
プログラマブルファブリック204は、ハードウェアにより実現される回路の形の1つ以上のインタフェイスを実現するようにも構成され得る。たとえば、JTAGインタフェイス262と、1つ以上のMGT266A−266Dと、周辺部品相互接続エクスプレス(PCLe)インタフェイス268と、相互設定アクセスポート(ICAP)270と、セキュリティポート272とは、IC200の一部のプログラマブルファブリック内にハードウェアにより実現される回路として含まれ得る。プログラマブルファブリック204を参照して述べられるさまざまなインタフェイスは、実現され得るインタフェイスの例を説明するのであって、この明細書中に開示される1つ以上の実施例について制限または限定することを意図するものではない。
たとえば、設定データは、IC200内にロードされ、設定コントローラ260によって受信され得る。実施例において、設定データは、IC200の設定プロセスを制御し得るPS202を介して受信され得る。プログラマブルファブリック204内にハードウェアにより実現される回路として実現され得る設定コントローラ260は、PCAP258を経由してPS202から受信される設定データをIC200の設定メモリ(図示しない)内にロードし得る。ユーザ回路280のような異なる物理回路は、IC200の設定メモリ内にロードされる特定の設定データによって特定されるプログラマブルファブリック204内に実現または形成され得る。ハードウェアにより実現される回路によるこのような態様における設定データのローディングは、プログラマブルファブリック204の初期設定を要求しないと理解されるべきである。設定データのローディングの結果によってプログラマブルファブリック204内に実現される回路は、物理回路であるか、その回路が、ハード回路あるいはそうでなければIC200内に固定されるというよりはむしろプログラマブル回路内に形成されるという点で、典型的に「ソフト」と称される。
PSC282は、ユーザ回路280同様、上述された任意のさまざまなインタフェイスを介してPS202に結合され得る。直接アクセスは、インタフェイス256を経由して与えられ得、一方、PS202へのさらなるアクセスは、FMIOインタフェイス252を介して容易にされ得る。PSC282にオフロードされる特定の機能性およびプロセスは、一般に、PS202との通信に必要なインタフェイスのタイプを決定すると理解されるべきである。
図3は、この明細書中に開示される別の実施例に従うプロセッサシステムの拡張のために構成されるIC300を説明するための第3ブロック図である。IC300は、図2のIC200を参照して述べられるものとして実質的に実現され得る。図3は、しかし、PS302からプログラマブルファブリック304内のPSC320のような回路へのソフトウェアベースプロセスのオフロードの摘要図を示す。
図3は、プログラムコード315を実行するコア310を示す。プログラムコード315は、1つ以上の異なるプロセスを含み、または特定し得る。説明のため、プログラムコード315は、プロセス1と、プロセス2と、プロセス3と、プロセス4とを含むように示される。プロセス2は、PSC、この例ではPSC320、に関連づけられることを説明するために、ハッチングされている。示されるように、PSC320は、プログラマブルファブリック304内に実現される。したがって、コア310は、PSCがプロセス2のために存在することを決定するようにプログラムされ得る。プロセス2を実行するよりも、コア310は、プロセッシングをオフロードし得る、そうでなければプロセッシングは、PS302によるプログラマブルファブリック304へのプログラムコードの実行を通して実行される。コア310は、たとえば、PSC320に対して入力として利用可能なプロセス2の実行に必要な任意のソースデータを作るようにアレンジし得る。一度PSC320によるプロセスが完了すると、PSC320によって生成される任意のデータ結果は、コア310によるプロセスまたは使用のために、PS302に与え返され得る。
実施例において、プロセス2は、プログラマブルファブリック304内の実現のためにプログラムコード315内で識別され、または、そうでなければマークされ得る。たとえば、コア315は、プロセス2が実行されておらず、PSCによるハードウェアにおいて実行されていることを特定するインジケータを識別し得る。別の実施例において、プロセス2は、単に、コア315がPSC320に特定のプロセスをオフロードするまたはPSC320を使用するプロセスを実行することを知らせる指令であり得る。その場合、プロセス2は、実行されるプロセスを特定する実際のプログラムコードを含む必要はない。むしろ、進行中、ソフトウェアにおいてよりも、ハードウェア内にプロセス2を実現するように決定がされ得る。プロセス2は、プロセスをPSC320にオフロードするようにPS302に指示するインジケータと効率的に置き換えられ得る。さらに別の実施例において、PSC320にプロセスをオフロードするための決定は、動的に、たとえばフィールドにおけるIC300のオペレーションの間にされ得る。
PSCの形で特定のプロセスを実行するための決定が、IC300内に実現されるシステムの設計サイクルの間に実行されようが、PS302によってフィールドにおいてダイナミックに実行されようが、決定は、1つ以上の異なるコスト測定あるいは単に「コスト」に基づいてなされる。コストは、PS302内のソフトウェア内のプロセスの実行に関連づけられる1つ以上のコストを反映する実行コストを決定するために評価され得る。1つ以上のコストは、プログラマブルファブリック304内のPSC320にプロセスをオフロードするための実現コストを決定するためにさらに評価され得る。一般に、実現コストが、実行コストよりも少ない場合、あるいは、実行コストよりも所定の量またはパーセンテージ少ない場合は、プロセスは、対応するPSCにオフロードされ得る。
実施例において、実行コストと実現コストとの各々は、時間要素、電力要素、または時間要素およびパワー要素の両方の幾つかの組み合わせを含み得る。場合によって、PS302からプログラマブルファブリック304へのプロセスのオフローディングは、有益である。なぜなら、PSCは、PS203がプロセスを実行し得るよりも早くプロセスを実行し得るためである。他の場合においては、PSCは、プロセスを実行するためにPS302によって使用されるエネルギーよりも少ないエネルギーでプロセスを実行し得る。さらに他の場合には、PSCは、PS302よりも少ない時間および少ないエネルギーでプロセスを実行し得る。実行コストおよび実現コストは、プロセスのオフローディングが、省時間または省電力あるいは省時間と省電力の両方をもたらす状況を識別するために、算出され比較され得る。
実施例において、時間要素は、時間遅れの面で測定され得る。たとえば、プロセスをオフロードするか否かの決定は、PSCが、PS203がプロセスを実行するよりも少ない時間遅れでプロセスを実行し得るか否かに基づく。一例において、各々が図2のIRQ216に与えられる割り込みを扱うまたは処理するように構成され得る1つ以上のPSCは、プログラマブルファブリック304内に実現され得る。1つ以上のPS302の割り込みは、IRQを介してプログラマブルファブリック304内の回路、たとえば1つ以上のPSCにさらされる。割り込みを検出すると、割り込みは、PS302内のプログラムコードの扱いの除外の実行を通して扱われるのと対照的に、プログラマブルファブリック304内のPSCによって扱われ得る。PSCを使用する割り込みの扱いは、PS302に他のタスクまたは要求に応じることによって、システム時間遅れを低減し得る。
図4は、この明細書中に開示される別の実施例に従うプロセッサシステムの拡張のために構成されるIC400を説明するための第4ブロック図である。IC400は、図2のIC200を参照して述べられたように、実質的に実現され得る。図4は、図3同様に、PS402からプログラマブルファブリック404内の回路へのソフトウェアベースプロセスのオフロードを説明するための、IC400の摘要図を示す。
図4は、プログラムコード415を実行するコア410を示す。プログラムコード415は、1つ以上の異なるプロセスを含みまたは特定し得る。説明のため、プログラムコード415は、プロセス1と、プロセス2と、プロセス3とプロセス4とを含むように示される。プロセス2と4とは、両プロセスがPSCを特定する設定データに対応して関連づけられることを説明するために、ハッチングされている。プロセス2は、プロセス2設定データに関連づけられる。プロセス4は、プロセス4設定データに関連づけられる。
たとえば、プロセス2は、プログラムコード内に実現されさらに「プロセス2設定データ」として示される設定データに関連づけられる。プロセス2設定データがIC400内にロードされるとき、PSC440は、プログラマブルファブリック404内に実現される。プロセス4は、プログラムコード内に実現され、さらに「プロセス4設定データ」として示される設定データに関連付けられる。プロセス4設定データがIC400内にロードされるとき、PSC445はプログラマブルファブリック404内に実現される。
PSC440とPSC445とは、プログラマブルファブリック404内にそれぞれ実現されるエリアを説明するために、ブロックとして示される。PSC440と445とを実現するよう要求されるエリアは、プログラムコード415の一部として知られかつ記憶され、または要求されるときの使用のために、IC400内の他のメモリ内に記憶され得る。
実施例において、PSCの各々は、PSCのサイズが見積もられまたは決定され得るように、進行の間、プログラマブルファブリック内に提供され得る。別の実施例において、PSCのサイズは、プログラムコードのライン(LOC)の1つ、またはLOCまたは指令を実現するために必要とされるプログラマブルファブリックの平均部品数に対する指令との関係に基づいて見積もられまたは算出され得る。たとえば、指令の各々は、実現のために特定の数のLUTを要求し得る。そのため、所与のプロセスのためのPSCのサイズは、LOCの各々を実行するために必要とされるハードウェアユニットの数で乗算されるプロセスのためのLOCとして決定され得る。
示されるように、プログラマブルファブリック404は、プログラマブルファブリック404内にすでに提供実現されユーザ回路設計を表わすユーザ回路420を含む。IC400は、プログラマブルファブリック404内の回路を実現するために設定データを設定メモリセル内にロードするために構成される設定コントローラ425をさらに含む。利用可能スペース430は、プログラマブルファブリック404の使用されていない部分を表わす。利用可能スペース430のサイズは、さらに、知られまたは決定されかつコア410に利用可能とされ得る。たとえば、設定コントローラ425は、利用可能スペース430を算出し、標準特定用途プログラミングインタフェイス(API)を介してPS402がその情報を利用できるようにする。
したがって、実施例において、プロセス2の実行の代わりにプログラマブルファブリック404内にプロセス2のような特定のプロセスを提供するか否か決定するとき、コア410は、プログラマブルファブリック404内の利用可能スペース430がPSC440を実現するために十分であるか否かを決定し得る。説明されるように、利用可能スペース430は、PSC445でなく、PSC440を実現するために十分広い。
利用可能スペース430の量は、IC400のオペレーションの間、たとえばIC400がフィールドにおいて時々動的部分的再構成、完全な再構成などを受けるときに変化し得ると理解されるべきである。したがって、所与のプロセスがハードウェア内に実現され得るか否かは、プロセスのオフローディングが望まれ得る特定の時間での利用可能スペース430の量と同様に、すでに手短に議論されたさまざまな要素に基づき得る。
プログラマブルファブリックに特定のプロセスをオフロードするか否か決定するとき、別掲のとおり、実行コストは、実現コストと比較され得る。一般に、実現コストおよび実行コストの各々は、時間、たとえばプロセスが実行され得るスピード、時間遅れ、電力および、たとえばプロセスを実行するのに消費されるまたは必要とされる電力の量、あるいは時間および時間遅れの両方、および/または電力との幾つかの組み合わせに依存する。
実行コストは、異なるさまざまな技術を使用することによって算出され得る。一局面において、たとえば、実行コストは、実行されるプロセスのLOCの数に対応して定められ得る。別の局面において、実行コストは、実行されるオペレーションの数および/またはそれぞれのオペレーションのタイプに対応して定められ得る。たとえば、追加オペレーションは、実行するための第1時間量と第1電力量とを必要とすることが知られ得る。特定のDSPオペレーションは、実行するための第2時間量と第2電力量とを必要とすることが知られ得る。電力消費と実行時間とに関する情報は、一般に、プロセッサまたはPSの、メーカまたはプロバイダから利用可能である。
そのため、所与のプロセッサまたはPSに対し、LOCの実行または特定の動作の実行に必要とされる時間は、一般に知られている。同様に、LOCを実行または所与のタイプの動作の実行に必要とされる電力量も、一般に知られている。PSによって実行されるプログラムコードの各々は、オフロードされ、実行コストを特定し得るプロファイルに関連づけられ得る。実行コストは、電力消費、時間遅れ、待機時間、あるいは、電力消費、実行する時間、および/または時間遅れのうちの2つ以上の組み合わせを反映し得る。
実現コストは、さらに、さまざまな異なるテクニックを使用することによって決定され得る。たとえば、実現コストは、プロセスのオフローディングをセットアップするためにPSによって実行されなければならない1つ以上の動作に依存し得る。オフローディングをセットアップするために、たとえば、PSは、最初に、PSCによって必要とされる入力としてのソースデータが利用可能であることを保証する必要があり得る。そのため、PSは、ソースメモリからデータを読み出し、ソースデータを計算し、ソースデータをPSCがソースデータにアクセス可能なデスティネーションメモリに書き込み、および/または1つ以上のアドレス変換を実行するように要求され得る。
加えて、メモリにアクセス、たとえば読み出しおよび/または書き込みするために必要とされる時間の量は、メモリの配置に依存する。電力消費に関しても同様である。一般に、PS内部のメモリは、IC外部のメモリ、たとえばメモリコントローラを介してアクセスされるRAM、よりも短い時間および少ない電力消費においてアクセスされ得る。さらに、L1キャッシュは、L2キャッシュより短い時間においてアクセスされ得、L1またはL2キャッシュのいずれかは、OCMよりも短い時間においてアクセスされ得る。
PSCが未だプログラマブルファブリック内に実現されていない場合、PSCを設定するための設定データが設定メモリ内にロードされるための追加時間が必要とされる。PSCを実現するために必要とされる時間は、たとえば、ロードされる設定データと設定が外部ソースからロードされ得るスピードとに依存し得る。プログラマブルファブリック内にPSCを実現するために必要とされる時間および電力とが、見積もられ、実現コストに寄与し得る。
PSCによって実行される実際の処理の観点から、PSCは、電力消費と、実行される動作の数および/またはタイプや、動作を実行するための特定の回路などのような要因に対応するプロセスのオフロードを完了するのに必要な時間のためにプロファイルされ得る。典型的に、電力消費とスピートとは、PSCによって実行される動作数と、PSCによって実行される動作タイプと、オフロードプロセスの動作を実現するためのPSCの特定の回路素子とに基づいて決定され得る。
実現コストは、さらに、オフロードプロセスの結果がPSCからPSに返される態様に依存し得る。別掲のとおり、結果が記憶される特定のメモリと結果がPSに送られるために介される通信チャネルとは、時間とパワーとの両方に影響し得、そのため、実現コストに影響し得る。
時間と電力とに加え、図4に示されるように、プログラマブルファブリック内の十分なスペースは、PSCを実現するために利用可能でなければならない。たとえば、プロセスの各々は、実行コストと、実現コストと、プロセスのためのPSCを特定する設定データとに関連付けられ得る。実現コストは、プログラマブルファブリック内にPSCを実現するために必要とされるエリアの推定を含みまたは特定し得る。そのため、一局面において、プロセスの各々のための実行コストは記憶され得る。プロセスの実現コストの1つ以上の要素は、記憶され得る。しかし、別掲のとおり、1つ以上の他の要因は、IC内の状態の変化、たとえばPSCがすでに実現されているか否か、プログラマブル回路内の利用可能スペースが足りるか否かなどによって、動的に、たとえばフィールドにおける動作の間、算出される必要があり得る。
一般に、実現コストおよび/または実行コストは、述べられたさまざまな個別のコスト要素の合算によって算出され得る。別掲のとおり、1つ以上のコスト要素は、重みづけたとえば提供および/または実行算出の全体のコスト内の、特定のコスト要素の重要性を増加させるか、または特定のコスト要素の重要性を低減させる係数と掛けあわされ得る。実行コストと実現コストとの決定のための異なる方法および技術は、説明のために与えられ、この明細書中に開示される1つ以上の実施例を制限することを意図するものではない。
実施例において、PSCにオフロードされるプロセスは、ICおよびPSへのデータの入力と、ICおよび/またはPSからのデータの出力とを含むものであり得る。PSCは、効率的に、PSのI/O周辺機器を提供し得る。たとえば、PSCは、入来データを受信し、データの初期プロセッシングを実行し、PSによってアクセス可能なRAM内にデータを記憶するように構成され得る。したがって、PSは、必要なときに、RAMからのデータにアクセスし得る。RAM内のデータの収容は、事前処理と同様、PSにかかわらず、PSCによって実行され得る。同様に、RAMのようなメモリに記憶されるデータは、PSにかかわらず、PSCによって出力され得る。PSCは、PSにかかわらず、指定されるメモリからデータを読み出し、必要な場合任意のプロセスも実行し、データ結果を出力し得る。PSは、たとえば、この明細書中に述べられた1つ以上の技術を使用することによって、データが出力されるようにPSCに通知する。上述のI/O周辺機器としてのPSCの使用を説明する一例は、ビデオプロセッシングの状況中にある。PSCは、1つ以上のプリプロセッシングタスクを実行し、PSによる使用のためメモリ内にデータ結果を記憶し得る。
図5は、この明細書中に開示される別の実施例に従うIC内のプロセッサシステムの拡張の方法500を説明するための第1フローチャートである。方法500は、この明細書中に開示されるようなIC、たとえばプログラマブルファブリックに結合されるPSを含むもの、によって実現され得る。方法500は、一般に、フィールドにおいて適応され得る動的な態様における動作中のPSの拡張のための技術を説明する。しかし、述べられたさまざまなコストおよびプログラマブルファブリック内の実現のために別のプロセスを経て1つのプロセスを選択するためのテクニックは、さらに、システムの進行の間適用され得る。これは、PSによって実行されるプログラムコード内へのそのような決定を「ハードコーディング(hard-code)」するためおよび/またはどのプロセスがPSによって扱われるか、およびどのプロセスがPSC、たとえばI/O周辺機器、インタラプトハンドラなどとして提供されるべきかを決定するためである。
PSがどのプロセスを動的に、たとえば動作の間およびフィールドにおける実行時間で、実現するかを決定する実施例において、PSによって実行されるプログラムコードは、図5を参照して述べられる知能と決定とを含み得る。さらに、ソフトウェアプロセスのプロファイリングの観点から使用されるさまざまな量およびソフトウェアプロセスを実現するPSCは、PS内で実行するプログラムコードの一部として記憶され、プログラムコードの実行の間PSによってアクセス可能な態様でIC内の他の場所に記憶され、または実行時間あるいはその間に算出され得る。
したがって、方法500は、ICのPSがプログラムコードを実行するステップ505において開始し得る。別掲のとおり、プログラムコードは、複数の異なるプロセスを含み得る。1つ以上のプロセスは、プログラマブルファブリックにオフロードされ得る。PSによって実行されるプログラムコードは、さらに、オフローディングのためのプロセスの選択とそのようなプロセスをいつオフロードするかの決定において、図5を参照して述べられる機能性を含み得る。
ステップ510において、PSは、PSCとしてプログラマブルファブリックにオフロードされるために実行されるプログラムコードの候補プロセスを決定し得る。実施例において、PSは、予め定められた量の時間内、たとえば次のプロセスが実行される時間内に実行されると予測される1つ以上のプロセス、次のNプロセス内のプロセス、Nは予め定められた整数値、または将来における予め定められた数のクロックサイクル数内に実行されると推定されるプロセスを識別し得る。たとえば、PSは、候補プロセスを選択する先行(look-ahead)機能を活用し得る。
ステップ515において、PSは、候補プロセスがPSCに関連付けられるか否か決定し得る。候補プロセスがPSCに関連付けられる場合、方法500は継続する。候補プロセスがPSCに関連付けられない場合、方法500は、異なる候補プロセスを選択するためにループバックし得る。
ステップ520において、PSは、PSCがすでにプログラマブルファブリック内に提供されたか否か決定し得る。1つ以上のPSCは、すでにプログラマブルファブリック内に実現され得る。PSCがすでにプログラマブル回路内に実現されている場合、実現コストの時間要素および電力要素は、オフローディングに先行してプログラマブルファブリック内にPSCの実現を要求するよりも少なくなる。PSCがまだプログラマブルファブリック内に実現されていない場合、実現コストの時間要素とコスト要素の各々は、プログラマブルファブリック内にすでにPSCが実現されたものよりも大きくなる。さらに、PSは、PSCの実現のためにプログラマブルファブリック内に十分な利用可能スペースが存在するか否か決定しなければならない。したがって、PSCが、プログラマブルファブリック内に実現される場合は、方法500は、ステップ535に処理を進める。PSCがプログラマブルファブリック内に実現されない場合は、方法500はステップ525に処理を進める。
ステップ525において、PSは、プログラマブルファブリック内の利用可能スペースの量を決定し得る。別掲のとおり、利用可能スペースの量は、PSCのようなさらなる回路設計を実現することが可能な使用されていないプログラマブルファブリックの量であり得る。ステップ530において、PSは、プログラマブルファブリック内の利用可能スペースの量がPSCを実現するのに十分であるか否かを決定し得る。PSCを実現するために十分な利用可能スペースがプログラマブルファブリック内にある場合は、方法500は、ステップ535に処理を進める。PSCを実現するための十分な利用可能スペースがプログラマブルファブリック内にないと、方法500は、オフローディングのための異なる候補プロセスがあればそれを選択するために、ステップ510にループバックし得る。
ステップ535において、PSは、PSCの実現コストとPS内のプロセスの実行コストとを算出または決定し得る。別掲のとおり、必要に応じて、実行コストと実現コストとは、1つ以上の時間要素、1つ以上の電力要素、または1つ以上の時間要素および1つ以上の電力要素の組み合わせを反映させ得る。時間、電力、または両方が考慮されるか否かについて、機能は、実現コストの算出に組み込まれるさまざまな要素を重みづけするために使用される。たとえば、実現コストの算出において、時間は、より重く、たとえば電力よりも大きな重要性を与え、重みづけられる。あるいは、電力は、時間より重く重みづけられる。実行コストの算出に組み込まれるさまざまなコスト要素を重みづけするために異なる機能が使用されてもよい。
別の実施例において、実現コストおよび/または実行コストの計算のための複数の機能は、時間、電力またはそれらの組み合わせの値が異なって記憶され得る。実現コストおよび/または実行コストの計算のための特定の機能は、動作状態、動作状況、またはフィールドにおいて動作の間にICに与えられる他の指令に従ってPSによって動的に選択され得る。そのため、フィールドにおける実現コストの算出および/または実行コストの算出を変えることによって、所与のプロセスをオフロードするための決定が行なわれる方法は、随時動的に変えられ得る。
さらに別の実施例において、利用可能スペースの決定は、実現コストの決定ステップに組み込まれ得ると理解されるべきである。たとえば、プログラマブルファブリックが十分な利用可能スペースを含むか否かの決定は、実現コストの算出によって生み出されるいかなる結果に優先し得るバイナリタイプの変数として実現コストに直接組み込まれ得る。別の例において、PSCを実現するためにプログラマブルファブリック内に十分でないスペースが利用可能な場合は、実現コストが確実に実行コストよりも大きいためにPSCがプログラマブルファブリック内に実現されていないことを保証するのに十分大きい乗算器が使用され得る。
別掲のとおり、実現コストと実行コストとは、一般に、デザインプロセスの間に知られまたは決定され得、プログラムコード内で特定される。しかしながら、1つ以上のコスト要素は、限定されないが、ICのプログラマブルファブリック内の利用可能スペースの量および評価される特定のプロセスがすでにPSCとしてプログラマブルファブリック内に実現されているか否かを含むICの電流オペレーティング状態、に従って変わり得る。別掲のとおり、PSは、さらに、実現コストおよび/または実行コストの決定のための特定の態様あるいは機能を選択し得る。
ステップ540において、PSは、実現コストと実行コストとを比較する。ステップ545において、PSは、プログラマブルファブリックにプロセスをオフロードするか否かを決定する。実行コストが実現コストを超える、あるいは実現コストがあるパーセンテージだけまたは予め定められた量だけ超える場合、PSは、プログラマブルファブリックへのプロセスのオフローディングが無駄でないと決定し実行されるように決定し得る。プロセスがプログラマブルファブリックにオフロードされない場合、方法500は、ステップ510にループバックして実行されるプログラムコードの一部である1つ以上の追加プロセスを評価する。プロセスがオフロードされる場合、方法500は、ステップ550に処理を進める。
ステップ550において、PSは、PSCがプログラマブルファブリック内に実現されているか否か決定し得る。ステップ550は、明確性および説明目的のために示されているが、分離されたプロセスステップとして実行される必要はない。情報はすでにPS、たとえばステップ520、から知られているためである。ステップ550は、たとえば、PSCがプログラマブルファブリック内に実現されない場合は、PSCを実現するために設定プロセスが実行されなければならないことを説明するために示される。
いずれの場合も、プロセスがPSCとしてすでにプログラマブル回路内に実現されている場合は、方法500は、ステップ560に処理を進める。プロセスがPSCとしてプログラマブルファブリック内にいまだ実現されていないと、方法500は、ステップ555に処理を進める。ステップ555において、PSCは、プログラマブルファブリック内に実現される。PSCは、実現されるPSCを特定する設定データのローディングを介して実現され得る。実施例において、プログラマブルファブリックの設定は、PSによって制御、たとえば開始され得る。たとえば、PSは、外部ソースからIC内に設定データをロードし、設定コントローラに設定データを提供し得る。別掲のとおり、プログラマブルファブリックは、完全に再構成され得、またはプログラマブルファブリックの一部は、動的部分再構成を経ることができる。一度プログラマブルファブリックの設定が完了すると、PSCは、物理的にそこに実現される。
ステップ560において、PSは、PSCにプロセスをオフロードし得る。ステップ565において、PSCは、オフロードされたプロセスを実行し得る。したがって、ステップ570において、オフロードされたプロセスの実行においてPSCによって生じるいかなる結果データも、PSに対して利用可能になり得る。
図6〜図8は、ICのプログラマブルファブリック内の回路へのプロセスのオフロードの実現のためのさまざまな技術を説明する。図6〜図8の各々は、明細書中に述べられたICを使用することによって実現され得る。図6〜図8の各々は、プログラマブルファブリックへのプロセスのオフロードの決定がされ、かつ、プログラマブルファブリック内のPSCが実現された状態において開始し得る。
図6は、この明細書中に開示される別の実施例に従うICのプログラマブルファブリック内に実現される回路へのプロセスのオフローディングの方法600を説明するための第2フローチャートである。図6は、オフロードが、PSによって主に駆動され、完全でない場合のケースを説明する。方法600は、オフロードされるプロセスが非常に複雑で、かつ比較的小さいデータのセットで動作するときに適用され得る使用例を説明する。図6で説明される例において、データは、PSからプログラマブルファブリックにプッシュされ、結果は、プログラマブルファブリックからPSによって獲得される。
ステップ605において、PSは、プロセス特定回路に入力として与えられるべきソースデータを選択的に計算し得る。ステップ610において、PSは、ソースデータをPSCに直接プッシュし得る。たとえば、PSは、インタフェイス256Bのようなスレーブインタフェイスを経由してソースデータをプッシュし、PSCにソースデータをプッシュするようにDMAを設定し、または、FMIOインタフェイス252を経由してPSCにデータを送り得る。ステップ615において、PSCは、ソースデータを処理し得る。PSCがソースデータの処理を終えると、PSCは、PSによる読み出しのために、メモリ位置で生成された任意の結果データをプログラマブルファブリック内に記憶し得る。
ステップ620において、PSは、PSCがいつソースデータの処理を完了したかを決定するために、プログラマブルファブリック内の回路をポーリングし得る。たとえば、プロセッサは、PSCの状態がビジーまたはフリーであることを示すプログラマブルファブリック内の特定のレジスタをポーリングし得る。レジスタは、PSCの一部であり得、またはPSCの外部にあり得るが、未だプログラマブルファブリック内に配置される。ビジー状態は、PSCがソースデータの処理を終えていないことを示す。フリー状態は、PSCがソースデータの処理を完了したことおよび/または結果データが利用可能であることを示す。
ステップ625において、PSは、PSCの状態を決定し得る。完了している場合、結果データは利用可能であり、方法600はステップ630に処理を進める。完了していない場合は、PSCはソースデータ処理の処理を終えておらず、方法600は、ステップ620にループバックしてPSC状態のポーリングを継続し得る。ステップ630に処理が進むと、結果データが利用可能な場合は、PSは、プログラマブルファブリック内のメモリから結果データを読み出し得る。データは、たとえばDMA転送などを介して読み出され得る。
図7は、この明細書中に開示される別の実施例に従うICのプログラマブルファブリック内に実現される回路へのプロセスのオフローディングの方法700を説明するための第3フローチャートである。図6がPSによって駆動されるオフローディング技術を説明するのに対して、図7は、PSとPSCとの間に存在するよりタイトなレベルの統合における例を説明する。したがって、ステップ705において、PSは、計算のための入力としてPSCに与えられるいかなるソースデータを任意的に計算し得る。実施例において、オフロードされるべき処理がソースデータを入力として要求するとき、PSは、そのソースデータを計算または取得し得る。プログラマブルファブリックのタイトな統合を容易にするために、PSは、PSの内部のメモリ内のメモリ位置にソースデータを記憶し得る。たとえば、一度計算されると、ソースデータは、OCM、L1キャッシュ、またはL2キャッシュ内のアドレスに記憶され得る。
ステップ710において、PSは、ディスクリプタを生成し、記憶し得る。ディスクリプタは、オフロードされるプロセスを実現または実行するために、PSCのためのリファレンスおよび/または指令を含むメモリのブロックまたはセグメントであり得る。ソースデータ同様、ディスクリプタは、OCM、L1キャッシュまたはL2キャッシュ内に記憶され得る。ディスクリプタは、ソースデータに対するポインタまたは基準、結果データをどこに、たとえばどのアドレスまたはメモリに記憶するかに関する指令、などを含み得る。
実施例において、ディスクリプタを生成すると、PSは、アドレス変換を実行し、仮想アドレスを物理アドレスにあるいはその逆に変換し得る。一般に、PSは、仮想アドレスを理解しまたは解釈し得る。しかし、そこに実現される任意の回路を包括するプログラマブルファブリックは、物理アドレスを仮想アドレスにまたはその逆に変換できない。プログラマブルファブリックは、物理アドレスのみを理解する。このようにディスクリプタ内で特定される任意のアドレスは、プログラマブルファブリックによって用いられる物理アドレスとして特定されなければならない。
ステップ715において、PSは、プロセスがオフローディングの準備ができていることをPSCに通知し得る。通知は、たとえば、ソースデータがPSCによるプロセスに利用可能であることを示し得る。PSは、PSCに任意のさまざまな異なるメカニズムを用いて通知する。たとえば、PSは、インタフェイス256あるいはFMIOインタフェイス252を経由して、PSCによってモニタされるプログラマブルファブリック内のレジスタ、またはPSC自身の内部のレジスタに書き込み得る。ステップ720において、レジスタが書き込まれたまたは特定の値に書き込まれたことのPSCの決定に応じて、PSCはプロセッサ内のメモリからディスクリプタを読み出し得る。たとえば、PSCは、通知目的のためにレジスタが書き込まれると、ディスクリプタが記憶または配置されるPS内の特定のアドレスから読み出すように構成され得る。
ステップ725において、PSCは、ディスクリプタによって特定されるソースデータを取り戻しまたは読み出し得る。ステップ730において、PSCは、ソースデータを処理しかつ結果データを生成または出力し得る。ステップ735において、PSCは、ディスクリプタによって特定される場所に結果データを記憶し得る。結果データは、PSの内部メモリ内、たとえばOCM,L1キャッシュまたはL2キャッシュにも記憶され得る。
ステップ740において、PSCは、結果データが利用可能であることをPSに通知する。たとえば、PSCは、PSによってモニタされる内部メモリのアドレス、たとえばOCM,L2キャッシュまたはL2キャッシュ内に書き込み得る。実施例において、通知が書き込まれるまたは提供されるアドレスは、ディスクリプタによって特定もされ得る。メモリアドレスがたとえば結果データが準備できていることを示すPSCからの値とともに書き込まれたことをPSが決定すると、PSは、ディスクリプタによって特定されたようにPSCが結果データを記憶した場所から結果データを読み出し得る。特定のポート、たとえばインタフェイス256Cが使用されると、キャッシュの一貫が達成され得ると理解されるべきである。他のインタフェイス、たとえばインタフェイス256A,256Bおよび/または256Dは、PSのキャッシュまたは内部メモリへのアクセスを保持しなくてもよい。ステップ745において、PSは結果データを取り戻しまたは読み出し得る。
ディスクリプタの使用は、毎回同じPSCが呼び出される場合であっても、ソースデータおよび任意の結果データが記憶される場所を変えることができると理解されるべきである。PSCは、ディスクリプタによって特定される物理アドレスを読み出し、列挙された場所からソースデータを取得し、かつ列挙された場所に結果データを記憶する。そのような場所は、同じPSCまたは異なるPSCのために意図された複数のディスクリプタの各々の間で異なり得る。
図8は、この明細書中に開示される別の実施例に従うICのプログラマブルファブリック内に実現される回路へのプロセスのオフローディングの方法800を説明するための第4フローチャートである。図8は、PSがPSCを活用して、PSCとPSとの間の接続手順のようなトランザクション設定および作業によって負担をかけられることなくプロセスの複数の細かい動作を実現するオフローディングメカニズムを説明する。図8は、ディスクリプタの使用を活用もする、図7に対する代替のメカニズムを示す。一般に、複数のディスクリプタが、PSCに提供され得る。PSCは、以下に述べられるような割り込まれない連続した態様でにおけるディスクリプタの各々を実行し得る。
ステップ805において、PSは、計算のための入力としてPSCに提供される任意のソースデータを任意的にに計算し得る。別掲のとおり、一旦計算されると、ソースデータは、OCM,L1キャッシュまたはL2キャッシュ内に記憶され得る。別の実施例において、ソースデータは、ICのプログラマブルファブリック内に配置されるメモリ内に記憶され得る。
ステップ810において、PSは、複数のディスクリプタを生成しかつ記憶し得る。ディスクリプタの各々は、PSCのための参照および/または指令を含むメモリのブロックまたはセグメントであり、プロセスがオフロードされるように実現または実行し得る。実施例において、PSは、PSの内部メモリの1つ内に複数のディスクリプタを記憶し得る。別の実施例において、PSは、複数のディスクリプタを、PSCによってアクセス可能なプログラマブルファブリック内またはPSC内のキューのようなメモリ内に記憶し得る。
別掲のとおり、ディスクリプタは、そこから入力として使用される任意のソースデータを取得する場所、および任意の結果データが記憶される場所、たとえば物理メモリアドレスを特定し得る。複数のディスクリプタの処理を実施するために、前述の情報に加え、ディスクリプタの各々は、リンクされたディスクリプタの連鎖を形成する複数のディスクリプタ内の次のディスクリプタに対するポインタを含むまたは特定し得る。ディスクリプタの鎖中の最後のディスクリプタは、次のディスクリプタに対するポインタの欠如によって特徴づけられる。
ディスクリプタ内で特定され得る追加の情報は、たとえばハードウェアにおいて実行される計算ステップのためのインジケータ、データを取得するためまたはデータが記憶されるバッファポインタ、PSへの通知または通信のためのメールボックスまたはレジスタアドレスを含み得る。述べられた複数のディスクリプタを使用することによって、PSCは、それ以上ディスクリプタが残らないようになるまで処理を続け得る。たとえば、PSCは、ディスクリプタがいつ特定のメモリ内またはキュー内に記憶されるかを検知するように構成され得る。PSCは、最後のディスクリプタが処理されるまで、PSからのさらなる指令を伴うことなく自動的に複数のディスクリプタの各々を処理し続け得る。この配置は、複数のディスクリプタ内の第1ディスクリプタの処理のための設定を要求する。しかし、それに続くディスクリプタの設定は、最小化または省略される。
ステップ815において、PSCは、複数のディスクリプタのディスクリプタを取り込み得る。たとえば、PSCは、PSによって生成または記憶される複数のディスクリプタの第1ディスクリプタの存在のための所定のメモリ場所をチェックするように構成され得る。PSCは、処理のためのディスクリプタを現在のディスクリプタとして取り出し得る。ステップ820において、PSCは、現在のディスクリプタを処理し得る。たとえば、PSCは、任意の特定されるソースデータを取り戻し、結果データを生成するためのソースデータを処理し、現在のディスクリプタとして示される結果データを記憶し得る。
ステップ825において、PSCは、処理されるべきさらなるディスクリプタが残っているか否か決定し得る。たとえば、PSCは、現在のディスクリプタが次のディスクリプタに対するポインタを特定するか否か決定する。現在のディスクリプタが次のディスクリプタに対するポインタを特定する場合、PSCは、ステップ830に処理を進める。ステップ830において、PSCは、ポインタによって特定された次のディスクリプタを選択し、ステップ815にループバックする。現在のディスクリプタが次のディスクリプタに対するポインタを特定しない場合、PSCは、現在のディスクリプタが最後のディスクリプタであると決定する。従って、PSCは、ディスクリプタの処理を中止し、ステップ835に処理を進める。
ステップ835において、PSCが複数のディスクリプタの各々の処理を完了すると、PSCは、結果データが利用可能であることをPSに通知する。実施例において、PSCは、ディスクリプタの処理の完了に応じて、PSがそこから結果データを取り戻し得る特定の場所内に結果データを記憶し得る。その場所は、1つ以上のディスクリプタの個々のものからの結果データが記憶され得る中間の場所と異なっていてもよい。
指示の受信に応じて、PSは、結果データを取得する。たとえば、PSは、PSCからの結果データの利用可能性を待ちながら別のスレッドを実行しそれによってPSに他のタスクを実行させる。別の実施例において、PSは、メールボックス、セマフォまたは割り込みを活用してPSに通知し得る。
一般に、プロセスのオフローディングのために不適切な技術の使用は、プログラマブルファブリックまたは定期的なポーリングに対するソースデータの提供のような論理動作によって負担を強いられる時間および/または電力の任意の節約をもたらし得る。この点で、実現のコストを計算すると、実現のコストは、プログラマブルファブリックへのプロセスのオフロードに使用される特定の技術によって変動すると理解されるべきである。そのため、たとえば、選択されるプロセスの実現のコストは、オフロードが図6、図7または図8の方法を使用して実行されるか否かに従って変動する。
図中のフローチャートは、この明細書中に開示される1つ以上の実施例に従うシステム、方法およびコンピュータプログラム製品の可能性のある実施例のアーキテクチャと、機能と、動作とを示す。この点で、フローチャートのブロックの各々は、特定される論理機能を実現する実行可能なプログラムコードの1つ以上の部分を備えるモジュール、セグメント、またはコードを表わし得る。
幾つかの代替的な実行例において、ブロック内に示される機能は、図に示される順序と異なって生じてもよい。たとえば、連続して示される2つのブロックは、実際に、含まれる機能によって、実質的に同時に実行されてもよいし、あるいは、ときにはブロックは逆の順序で実行されてもよい。フローチャートの例のブロックの各々と、フローチャートの例のブロックの組み合わせとは、特定の機能、または作用、あるいは特別な目的のハードウェアと実行可能な指令との組み合わせを実行する特別な目的のハードウェアベースのシステムによって実現され得る。
1つ以上の実施例は、ハードウェアまたはハードウェアとソフトウェアとの組み合わせとして実現され得る。1つ以上の実施例は、1つのシステムに集中される形、または異なる要素がいくつかの相互接続されたシステムをまたがって分配される形で実現され得る。本明細書で述べられた方法の少なくとも一部を実行するように適合される任意の種類のデータ処理システムまたは他の装置が好適である。
1つ以上の実施例は、さらに、ここで述べられた方法の実行例をイネーブルする全ての特徴を含むコンピュータプログラム製品のようなデバイスに組み込まれ得る。デバイスは、プログラムコードを記憶する、非一時的データ記録媒体、たとえばコンピュータが使用可能媒体またはコンピュータが読み取り可能媒体な、を含み得る。プログラムコードは、メモリとプロセッサとを備えるシステム内にロードされ実行されると、システムにこの明細書中に述べられた機能の少なくとも一部を実行させる。非一時的データ記録媒体の例は、光媒体、磁気媒体、光磁気媒体、ランダムアクセスメモリまたはハードディスクのようなコンピュータメモリなどを含み得るが、それらに限定されない。施例の範囲を示す、以下の請求項が参照されるべきである。
「コンピュータプログラム」、「ソフトウェア」、「アプリケーション」、「コンピュータが使用可能なプログラムコード」、「プログラムコード」、「実行可能なコード」、それらの変形および/または組み合わせ、この文脈において、いかなるの言語、コードまたは表記は、情報処理能力を有するシステムに直接または以下のいずれかあるいは両方の後に特定の機能を実行させることを意図した一組の指令の任意の表現を意味する。a)別の言語、コードまたは表記への変換、b)異なる材料形態での再生。たとえば、プログラムコードは、サブルーチン、機能、処理、オブジェクトメソッド、オブジェクトインプリメンテーション、実行可能なアプリケーション、アプレット、サーブレット、ソースコード、オブジェクトコード、共有ライブラリ/ダイナミックロードライブラリおよび/またはコンピュータシステムで実行するために設計される他の指令のシーケンスを含み得る。
「a」および「an」の用語は、ここで使用されるように、1つ以上として定められる。「複数」の用語は、ここで使用されるように、2つ以上として定められる。「別の」の用語は、ここで使用されるように、少なくとも第2またはそれ以上のものとして定められる。「含む」および/または「有する」の用語は、ここで使用されるように、備える、すなわちオープンランゲージとして定められる。「結合され」の用語は、ここで使用されるように、いかなる要素も介在せずに直接か1つ以上の要素を介在して間接的に接続されるものとして定められる。2つの要素は、機械的に、電気的に結合されるか、または通信チャネル、配線、ネットワークあるいはシステムを介して通信可能にリンクされ得る。
この明細書中に開示される1つ以上の実施例は、その中の精神または本質的属性から逸脱することなく他の形で実施され得る。したがって、前述の明細書よりも、1つ以上の実施例の範囲を示す、以下の請求項が参照されるべきである。