(57)【要約】  システムは、入力テンソルおよび出力テンソルを記憶するように設定されたグローバルメモリ回路網（１０２、１０４）を含む。メモリ回路網の出力ポートには、行データ経路（１０６、１０８）がそれぞれ接続されている。メモリ回路網の入力ポートには、列データ経路（１２４、１２６）が接続されている。行データ経路（１０６、１０８）と列データ経路（１２４、１２６）とにそれぞれ沿う行と列とに、処理要素（１１２、１１４、１１６、１１８）が配置されている。処理要素（１１２、１１４、１１６、１１８）は、複数のマスクを記憶するように設定されたローカルメモリ回路網（１２２）、および処理回路網（１２０）を含む。処理回路網（１２０）は、行データ経路（１０６、１０８）のうちの１つから入力テンソルの一部分を受信することと、ローカルメモリ回路網（１２２）からマスクを受信することと、テンソル演算ごとに、異なる取り出されたマスクを適用することによって、入力テンソルの同じ受信部分に対して複数のテンソル演算を行うことと、複数のテンソル演算の結果を使用して、対応する列データ経路（１２４、１２６）に対して出力を発生させることと、を行うように設定されている。【選択図】図１
2020503584.tif 000002
【特許請求の範囲】
【請求項１】
システムであって、
入力テンソルおよび出力テンソルを記憶するように設定されたグローバルメモリ回路網と、
それぞれが前記グローバルメモリ回路網の出力ポートに接続されている行データ経路と、
それぞれが前記グローバルメモリ回路網の入力ポートに接続されている列データ経路と、
前記行データ経路と前記列データ経路とにそれぞれ沿う、行と列とに配置された処理要素と、を備え、前記処理要素が、
複数のマスクを記憶するように設定されたローカルメモリ回路網と、
処理回路網であって、
前記行データ経路のうちの１つから前記入力テンソルの一部分を受信すること、
前記ローカルメモリ回路網からマスクを受信すること、
テンソル演算ごとに、異なる取り出されたマスクを適用することによって、前記入力テンソルの同じ受信部分に対して複数のテンソル演算を行うこと、および
前記複数のテンソル演算の結果を使用して、対応する列データ経路に対して出力を発生させることを行うように設定された、処理回路網と、を含む、システム。
【請求項２】
前記行データ経路が、接続された処理要素間に少なくとも１つのパイプラインステージを備えて設定されているか、または前記入力テンソルを少なくとも２つの接続された処理要素に一斉送信するように設定されている、請求項１に記載のシステム。
【請求項３】
前記ローカルメモリ回路鋼が、少なくとも１つの読み取りポートおよび１つの書き込みポートを含み、前記処理回路網が、前記出力ポートを使用して第１のマスクを取り出すとともに、前記書き込みポートを使用して第２のマスクを記憶することによって、マスクローディング待機時間を隠すように設定されている、請求項１または請求項２に記載のシステム。
【請求項４】
前記処理要素が、前記列データ経路からデータを受信し、かつ前記列データ経路からの前記データに対して数値演算を行うパイプラインステージとして、動作するように設定されている、請求項１から３のいずれか一項に記載のシステム。
【請求項５】
前記数値演算が、前記テンソル演算の結果を、前記列データ経路において受信された前記データに加えることを含む、請求項４に記載のシステム。
【請求項６】
前記テンソル演算が、前記入力テンソルの前記一部分と前記ローカルメモリ回路網からの前記マスクとの間の内積を含む、請求項１から５のいずれか一項に記載のシステム。
【請求項７】
前記グローバルメモリ回路網が、前記データ経路行のそれぞれごとに異なるメモリ回路と、隣接メモリ回路のアクセス時間間に位相オフセットをもたらすクロック回路網と、を含む、請求項１から６のいずれか一項に記載のシステム。
【請求項８】
前記入力テンソルが、行列であり、前記入力テンソルの前記受信部分が前記入力テンソルからの部分行列に対応する、請求項１から７のいずれか一項に記載のシステム。
【請求項９】
行データ経路を使用し、第１の速度において、入力テンソルの一部分を処理要素のアレイに送信することであって、各処理要素が、対応する行データ経路および対応する列データ経路に接続されている、入力テンソルの一部分を処理要素のアレイに送信することと、
前記第１の速度よりも速い第２の速度において、それぞれの処理要素に対してローカルなメモリ回路からマスクにアクセスすることと、
テンソル演算ごとに、異なる取り出されたマスクを適用することによって、入力テンソルの受信部分に対して複数のテンソル演算を行うことと、
前記複数のテンソル演算の結果を前記対応する列データ経路に提供することと、を含む、方法。
【請求項１０】
前記複数のテンソル演算を行うことが、連続する行列演算の際、様々なマスクからの重みを入力テンソルの同じ部分に適用することを含む、請求項９に記載の方法。
【請求項１１】
前記それぞれの処理要素にローカルなメモリ回路からのマスクにアクセスする間に、新しいマスクをロードすることをさらに含む、請求項９または請求項１０に記載の方法。
【請求項１２】
前記複数のテンソル演算の結果を前記対応する列データ経路に前記提供することが、前記対応する列データ経路からデータを受信し、前記結果と、前記対応する列データ経路からの前記データとの両方に関わる数値演算を行うことを含む、請求項９から１１のいずれか一項に記載の方法。
【請求項１３】
入力テンソルの一部分を前記送信することが、様々な処理要素に対してパイプラインステージを使用すること、または前記入力テンソルを少なくとも２つの接続された処理要素に一斉送信することを含む、請求項９から１２のいずれか一項に記載の方法。
【請求項１４】
前記入力テンソルが行列であり、前記入力テンソルの前記受信部分が、前記行列からの部分行列に対応する、請求項９から１３のいずれか一項に記載の方法。
【請求項１５】
それぞれの反復に対して、前記入力テンソル内の行ずれまたは列ずれを示すストライドに従って、部分行列を選択することをさらに含む、請求項１４に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、概してテンソル演算を提供する回路およびデバイスに関し、より具体的には、データ相関および畳み込みカーネルと共に使用するための回路網に関する。
【背景技術】
【０００２】
様々な異なる問題への解法を提供するために、行列、またはより広範にはテンソルは、処理回路網によって使用される。例えば、画像処理は畳み込み行列を使用する場合がある。様々なタイプの処理回路網は、このような処理のために使用され得る。
【０００３】
以下に限定されないが、デジタル信号プロセッサ（ＤＳＰ：Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）、汎用コンピュータプロセッサ、プログラマブル集積回路、プログラマブル論理デバイス（ＰＬＤ：Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）、およびシステムオンチップ（ＳｏＣ：Ｓｙｓｔｅｍ  ｏｎ  Ｃｈｉｐ）デバイスを含む、畳み込み行列を使用することができる様々な異なる回路がある。ＰＬＤは、特定論理関数を実行するようにプログラムされ得る、プログラマブル集積回路（ＩＣ：Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）のタイプである。ＰＬＤの１つのタイプ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ：Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）は、プログラマブルタイルのアレイを含むことができる。これらのプログラマブルタイルは、例えば、入出力ブロック（ＩＯＢ：Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｂｌｏｃｋ）、設定可能な論理ブロック（ＣＬＢ：Ｃｏｎｆｉｇｕｒａｂｌｅ  Ｌｏｇｉｃ  Ｂｌｏｃｋ）、専用ブロックランダムアクセスメモリ（ＢＲＡＭ：Ｂｌｏｃｋ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、乗算器、デジタル信号処理ブロック（ＤＳＰ：Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｂｌｏｃｋ）、プロセッサ、クロックマネージャ、遅延ロックループ（ＤＬＬ：Ｄｅｌａｙ  Ｌｏｃｋｅｄ  Ｌｏｏｐ）、ピーシーアイ（ＰＣＩ：Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）などのバスまたはネットワークインタフェース、ＰＣＩエクスプレス（ＰＣＩｅ：ＰＣＩ  Ｅｘｐｒｅｓｓ）、イーサネットなどを含むことができる、様々なタイプの論理ブロックを備える。いくつかのデバイスは、単一のＩＣチップ上のコンピュータシステム全体として効率的に働くのに十分な構成要素および機能性を含む。このような機能性を有するデバイスは、ＳｏＣと呼ばれる場合がある。いくつかのＳｏＣデバイスは、様々なＰＬＤによって提供されるプログラマブル論理と類似したプログラマブル論理を含むことができる。
【０００４】
様々な回路は、畳み込み行列を実行しようと試みる際、類似の障害に悩まされることが多い。共通の障害は、メモリ回路網へ往復するデータの移動である。畳み込み演算で大きなデータセットを使用するのに加えて、畳み込み演算は、同じデータに関して数回繰り返され得る。したがって、データは、処理回路を完全に活用するのに十分に早く提供されない可能性がある。
【０００５】
これらおよび他の問題は、畳み込みテンソル演算にとって解決し難い。
【発明の概要】
【０００６】
いくつかの実装形態は、入力テンソルおよび出力テンソルを記憶するように設定された、グローバルメモリ回路網を含むシステムを対象とする。行データ経路は、メモリ回路網の出力ポートにそれぞれ接続される。列データ経路は、メモリ回路網の入力ポートに接続される。処理要素は、行データ経路および列データ経路に沿って、それぞれ行と列に配列される。処理要素は、複数のマスクを記憶するように設定されたローカルメモリ回路網および処理回路網を含む。処理回路網は、行データ経路の１つから入力テンソルの一部分を受信することと、ローカルメモリ回路網からマスクを受信することと、それぞれのテンソル演算のための異なる取り出されたマスクを適用することによって入力テンソルの同じ受信部分に対して複数のテンソル演算を実行することと、複数のテンソル演算の結果を使用して対応する列データ経路のための出力を生成することと、を行うように設定される。
【０００７】
任意に、行データ経路は、接続された処理要素の間の少なくとも１つのパイプラインステージで設定され得る。
【０００８】
任意に、行データ経路は、少なくとも２つの接続された処理要素へ向けて入力テンソルを一斉送信するように設定され得る。
【０００９】
任意に、ローカルメモリ回路網は、少なくとも１つの読み取りポートおよび１つの書き込みポートを含み得る。処理回路網は、出力ポートを使用して第１のマスクを取り出すことによってマスクローディング待機時間を隠す一方で、書き込みポートを使用して第２のマスクを記憶するように設定され得る。
【００１０】
任意に、処理要素は、列データ経路からデータを受信し、列データ経路からのデータに対して数値演算を実行する、パイプラインステージとして機能するように設定され得る。
【００１１】
任意に、数値演算は、列データ経路で受信されたデータにテンソル演算の結果を加えることを含み得る。
【００１２】
任意に、テンソル演算は、入力テンソルの一部分とローカルメモリ回路網からのマスクとの間に内積を含み得る。
【００１３】
任意に、システムは、処理要素間に共有された書き込みポインタおよび読み取りポインタをさらに含み得る。処理要素は、書き込みポインタおよび読み取りポインタを使用してローカルメモリ回路網にアクセスするように設定され得る。
【００１４】
任意に、グローバルメモリ回路網は、データ経路の行のそれぞれに対する異なるメモリ回路、および隣接するメモリ回路のアクセス時間の間の位相オフセットを提供するクロック回路網を含み得る。
【００１５】
任意に、入力テンソルは行列であり得、入力テンソルの受信部分は、入力テンソルからの部分行列に対応し得る。
【００１６】
特定の実装形態は、行データ経路を使用し、第１の速度において、入力テンソルの一部分を処理要素アレイに送信することであって、各処理要素が、対応する行データ経路および対応する列データ経路に接続されている、送信することと、第１の速度よりも速い第２の速度において、それぞれの処理要素に対してローカルなメモリ回路からマスクにアクセスすることと、テンソル演算ごとに異なる取り出されたマスクを適用することによって、入力テンソルの受信部分に対して複数のテンソル演算を行うことと、複数のテンソル演算の結果を対応する列データ経路に提供することと、を含む方法を対象とする。
【００１７】
任意に、複数のテンソル演算を実行することは、連続した行列演算に対して、様々なマスクから入力テンソルの同じ部分へ重みを印加することを含み得る。
【００１８】
任意に、入力テンソルは、像の入力特徴マップであり得、複数のテンソル演算の結果は、像の出力特徴マップを表し得る。
【００１９】
任意に、第１の比率より速い第２の比率で、それぞれの処理要素に対してローカルなメモリ回路からマスクにアクセスすることは、アクセス中に処理要素によって共有される読み取りポインタの使用を含み得る。
【００２０】
任意に、方法は、それぞれの処理要素に対してローカルなメモリ回路からのマスクのアクセスの間、新しいマスクをロードすることをさらに含み得る。
【００２１】
任意に、複数のテンソル演算の結果を対応する列データ経路に提供することは、対応する列データ経路からデータを受信することと、対応する列データ経路からの結果とデータの両方を伴う数値演算を実行することと、を含み得る。
【００２２】
任意に、入力テンソルの一部分を送信することは、様々な処理要素に対するパイプラインステージを使用することを含み得る。
【００２３】
任意に、入力テンソルの一部分を送信することは、少なくとも２つの接続された処理要素に入力テンソルを一斉送信することを含み得る。
【００２４】
任意に、入力テンソルは行列であり得、入力テンソルの受信部分は、行列からの部分行列に対応し得る。
【００２５】
任意に、方法は、それぞれの反復に対して、入力テンソル内の行シフトまたは列シフトを指し示すストライドに従って、部分行列を選択することをさらに含み得る。
【００２６】
他の特徴は、以下の「発明を実施するための形態」および「特許請求の範囲」の考察から分かるであろう。
【００２７】
方法、デバイス、およびシステムの様々な態様および特徴は、以下の詳細な説明の検討および以下の図面を参照することで、明らかになるであろう。
【図面の簡単な説明】
【００２８】
【図１】本開示の様々な実装形態と一致した、処理要素のアレイおよび関連の回路網を有するシステムを表すブロック図である。
【図２】本開示の実装形態と一致した、処理要素のアレイおよびシステムに記憶されたテンソル用の標本値を備えるシステムのブロック図である。
【図３】本開示の実装形態と一致した、列に沿った１回の畳み込みの反復に対する入力データスライスおよびマスク値を示す。
【図４】２つずつの処理要素アレイおよびローカルメモリ回路へのデータ接続を描写する。
【図５】本開示の実装形態と一致した、処理要素の回路図である。
【図６】本開示の様々な実装形態と一致した、テンソル演算を実行するための流れ図である。
【図７】開示された回路およびプロセスが実装され得る、プログラマブル集積回路（ＩＣ）７００を示す。
【発明を実施するための形態】
【００２９】
次の説明では、多数の特定の詳細は、本明細書に提示された特定の例を説明するように定められる。しかし、１つまたは複数の他の例および／またはこれらの例の変形形態は、以下に与えられたすべての特定の詳細なしに実施され得ることが、当業者に明らかとなるはずである。他の例では、周知の特徴は、本明細書における例の説明を不明瞭にしないように、詳細には説明されていなかった。図を分かりやすくするために、同じ参照番号が、同じ要素または同じ要素の追加例に言及するために、異なる図において使用され得る。
【００３０】
様々な実装形態は、高処理能力でテンソル演算を提供するように設計された回路を対象としている。回路は、それぞれがより大きな行列の演算の一部分を実行する処理要素のアレイを含むことができる。本開示の特定の態様は、入力データを処理要素に提供するメモリ回路の処理能力を超える周波数で、処理要素が動作することを可能にする。
【００３１】
いくつかの実装形態によれば、処理要素は、行データ経路および列データ経路によって形成されたアレイにおけるクロスポイントに位置している。行データ経路は、アレイの同じ行の複数の処理要素に同じ入力データを提供する。アレイ設定は、データが、別個のローカル記憶域を要求することなく、複数のテンソル演算のために再利用されることを可能にする。特に、データは、複数の演算が完了するまで、行データ経路に保持され得る。データを再利用することは、メモリ回路のより低い処理能力を隠すことができるが、その理由は、処理要素が同じ入力データスライスに関する複数のテンソル演算を実行し、それによりデータの頻繁な更新を必要としないからである。
【００３２】
様々な実装形態により、テンソル演算は、それぞれの受信された入力データスライスに適用されるデータマスク（重みまたはパラメータとも呼ばれる）を使用する。マスクは、それぞれの処理要素の近くに位置する分散型ローカルメモリ回路に記憶され得る。例えば、それぞれのテンソル演算は、同じ入力データに様々なマスクを適用する処理要素に対応することができる。演算される入力（ソース）行列は、入力データスライスの集合に分離され得る。マスクの同じ集合は、処理要素で受信されるそれぞれの入力データスライスに適用され得る。これにより、ローカルメモリに記憶されたマスクが、それぞれの連続的に受信された入力データスライスに再利用されることを可能にする。追加のマスクが入力テンソルの同じ集合に使用されることになる場合（例えば、ローカルメモリ回路網に適合するより多くのマスクがある）、新しいマスクは、入力データスライスが処理要素に再び提供される前にロードされる。
【００３３】
入力行列に対する多くの入力データスライスを有するアプリケーションに対して、行列全体を処理する時間は比較的に長くなり得、ローカルメモリ回路は頻繁に更新する必要はない。多くの処理要素および多くの異なるマスクを有する大きなアレイは、マスク値を更新するために、重要なデータ処理能力をさらに要求することができることが認識される。本開示の態様は、処理要素がマスクの既存の集合を使用していると同時に、ローカルメモリ回路にマスクの新しい集合をロードすることによって、メモリローディング待機時間を隠すことを対象としている。例えば、それぞれのローカルメモリの専用書き込みポートは、活性部分がアクセスされ、処理要素によって使用されると同時に、メモリ空間の不活性部分に書き込むように使用され得る。データがロードされた後、メモリ空間の不活性部分は、活性にされ得、後続の処理に使用され得る。同様に、メモリの以前の活性部分は、マスクの追加の集合がロードされ得るように、不活性にされ得る。不活性−活性ローディングプロセスは、マスクの集合全体が使用されるまで繰り返され得る。
【００３４】
特定の例は、画像処理に使用されるものなどの、スケーラブル畳み込み加速器として役割を果たす。考察をしやすくするために、実装形態のいくつかは、ニューラルネットワークを使用する画像認識の文脈において考察される。しかし、本明細書において考察された様々な特徴は、それに限定されず、様々な他のテンソル演算および最終使用で使用され得ることが分かる。
【００３５】
画像処理の例を参照すると、様々な実装形態は、画像認識などの目的のための入力画像データの畳み込みを処理するように設計されている加速器回路網を対象としている。画像認識ニューラルネットワークに使用される畳み込みは、加速度回路網から利益を得ることができるネットワークの計算集約部であることが多い。例えば、畳み込み型ニューラルネットワーク（ＣＮＮ：Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ）内の畳み込みステージは、畳み込みカーネルの集合を有する入力特徴マップ（ＩＦＭ：Ｉｎｐｕｔ  Ｆｅａｔｕｒｅ  Ｍａｐ）の集合からの２Ｄ畳み込みの複数の総和を計算してもよい。出力特徴マップ（ＯＦＭ：Ｏｕｔｐｕｔ  Ｆｅａｔｕｒｅ  Ｍａｐ）におけるそれぞれの要素は、１つのそのような総和である。それぞれのＩＦＭ−ＯＦＭの対は、対応するマスク要素を持つそれ自身の２Ｄ畳み込みカーネルを有する。様々な実装形態と一致して、カーネルは所定値を有するマスク（重みまたはパラメータとも呼ばれる）により定義される。所定値は、ニューラルネットワークのトレーニングから取得され得る。したがって、カーネルマスクは、対応する処理要素によって使用される前にローカルメモリにプリロードされ得る一定値として処理され得る。
【００３６】
ここで図に戻ると、図１は、本開示の様々な実装形態と一致して、処理要素のアレイおよび関連の回路網を有するシステムを表すブロック図である。描写された回路網は、いくつかの処理要素（ＰＥ：Ｐｒｏｃｅｓｓｉｎｇ  Ｅｌｅｍｅｎｔ）１１２、１１４、１１６、および１１８を含む。アレイの第１の行は、処理要素１１２および１１４を含む。第１の行の処理要素は、共有された行データ経路１０６から入力データを受信する。処理要素１１６および１１８は、第２の行の一部であり、共有された行データ経路１０８から入力データを受信する。
【００３７】
メモリ回路網１０２は、入力データを行データ経路にわたって処理要素へ動かすのに使用されるデータを記憶する。特定の実装形態にしたがって、メモリ回路網は、入力データをそれぞれの行に平行に与えるように設定される。例えば、メモリ回路網１０２は、それぞれの行データ経路に対して固有の出力ポートを有する単一の論理メモリであり得る。いくつかの例では、メモリ回路網１０２は、対応する行のそれぞれに対して個別にアドレス指定可能なメモリ回路を含むことができる。特定の実装形態は、様々な行のメモリ回路が、処理要素のより速いクロックドメインと整列される位相である、位相オフセット（食い違い状）クロックドメインを使用することを可能にする。組み合わせおよび変動は、本明細書において考察されたメモリ設定の特定の例にされ得る。
【００３８】
列１２４および１２６はそれぞれ、処理要素１１２、１１６および１１４、１１８の出力を受信する。特定の実装形態では、処理要素は、前述の処理要素の列出力が後続の処理要素へ列入力として提供されるように、パイプライン形式で機能する。例えば、処理要素１１６の出力データは、列セグメント１２４上に提供される。処理要素１１２は、列入力データとして処理要素１１６から出力データを受信する。処理要素１１２のテンソル論理１２０は、受信されたデータを使用して、追加の列出力データを生成する。追加の列出力データは、メモリ回路網１０２としての同じ論理および物理メモリ回路網かまたは異なる回路網であり得る、メモリ回路網１０４における記憶域用の列セグメント１２４に提供される。この方法で、メモリ回路網１０４に記憶された列データは、対応する列におけるそれぞれの処理要素からの出力データの組み合わせ（例えば、総和）を表す。
【００３９】
いくつかの実装形態によれば、システムは、（所定）初期値をそれぞれの列における第１の処理要素１１６および１１８に提供することができる。処理要素１１６および１１８は、初期値が前述の処理要素から受信されたかのように初期値を使用し、それによりアレイの処理要素のそれぞれは実質的には同一の論理および設定を有する。初期値は、初期化ブロック１１０および１２８によって概略的に表される。初期化ブロック１１０および１２８は、例えば、レジスタ、ランダムアクセスメモリ（ＲＡＭ：Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）回路網、または同様の記憶回路を使用して実装され得る。特定の実装形態では、初期化ブロック１１０および１２８は、処理要素１１６および１１８内に位置され得る。例えば、初期値は、マスクが対応する処理要素のローカルメモリにロードされると同時にロードされ得る。
【００４０】
特定の実装形態例では、メモリ回路網１０２は、画像用の入力特徴マップ（ＩＦＭ：Ｉｎｐｕｔ  Ｆｅａｔｕｒｅ  Ｍａｐ）の集合に対応するデータを記憶することができる。システムは、画像データ（「スライスデータ」）の小部分に２次元（２Ｄ：Ｔｗｏ−Ｄｉｍｅｎｓｉｏｎａｌ）畳み込みカーネルを適用することによって、それぞれのＩＦＭを処理する。それぞれのＩＦＭに対する入力スライスデータは、ＰＥｓによって処理するためのメモリ回路網１０２によって、反復的に出力され得る。少なくとも２つの異なる畳み込みカーネル用のマスクは、それぞれのローカルメモリ回路網１２２に記憶され、入力スライスデータの集合に適用される。それぞれの列の各処理要素からの畳み込みの結果は、結合され、出力特徴マップ（ＯＦＭ：Ｏｕｔｐｕｔ  Ｆｅａｔｕｒｅ  ｍａｐ）を生成するようにメモリ回路網１０４に記憶される。
【００４１】
特定の例として、画像処理は、ソース画像の様々なカラーチャネルに対応するＩＦＭｓで行われ得る。それぞれのカラーチャネルは、光周波数の異なる集合に対応する。それぞれの行および反復に関して、スライスデータは、それぞれの行に対する異なる画像の類似部分から取られ得る。列の処理要素はそれぞれ、ローカルメモリ回路網１２２に記憶されたマスクに関連して定義される、様々な畳み込みカーネルの集合を適用する。結果は、ＯＦＭｓとしてメモリ回路網１０４に記憶される。画像の画像スライスのすべてが処理されると、システムはＯＦＭｓの新しい集合を生成し始めることができる。新しいＯＦＭｓは、新しい畳み込みカーネルかまたは新しい画像用データかのいずれか（または両方）に基づいて生成され得る。
【００４２】
システムの反復プロセスは、以下の入れ子型ループによって疑似コードにおいて論理的に表現され得る。
バッチにおける各ジョブｊに対して、
各出力スライスｄ２∈［１，Ｄ２］に対して、
2020503584.tif 000003
ここで、
Ｄ１はＩＦＭｓの数、
Ｄ２はＯＦＭｓの数、
Ｘは、Ｘ［ｊ，ｒ，ｃ，ｄ１］としてインデックス付けされたランク４入力テンソルで、ここでｊはジョブインデックスであり、ｒ∈［１，Ｈ１］およびｃ∈［１，Ｗ１］は２ＤＩＦＭの行および列インデックスであり、ｄ１∈［１，Ｄ１］はＩＦＭインデックスである。
Ｈは、Ｈ［ｕ，ｖ，ｄ１，ｄ２］としてインデックス付けされたランク４の畳み込みカーネルテンソルで、ここでｕ∈［１，Ｆｙ］およびｖ∈［１，Ｆｘ］は２Ｄの畳み込みカーネルの行および列インデックスであり、（ｄ１，ｄ２）はＩＦＭｄ１およびＯＦＭｄ２の交点における２Ｄの畳み込みカーネルを指し示す。
Ｓｘは列に沿ったストライドであり、Ｓｙは行に沿ったストライドである。
Ｙはランク４の出力テンソルＹ［ｊ，ｒ，ｃ，ｄ２］であり、ここで、ｊはジョブインデックスであり、ｒ∈［１，Ｈ２］およびｃ∈［１，Ｗ２］は２ＤのＯＦＭの行および列インデックスであり、ｄ２∈［１，Ｄ２］はＯＦＭインデックスであり、
ｃｏｎｖ２ｄ（）は、２Ｄの畳み込み演算子である。
【００４３】
処理要素ごとの畳み込み計算カーネル、ｃｏｎｖ２ｄ（）は、以下の入れ子型ループ（事前提供された入れ子型ループ内で動作する）に従って、疑似コードによって表現され得る。
2020503584.tif 000004
【００４４】
便宜上、ＩＦＭテンソルＸおよびＯＦＭテンソルＹのためのジョブインデックスは、以下の記述には省略されている。図２は、本開示の実装形態と一致した、処理要素のアレイおよびシステムに記憶されたテンソル用の標本値を備える、システムのブロック図である。描写されたアレイは、３つのＩＦＭおよび２つのＯＦＭに対応する、処理要素の２×３のアレイである。様々な大きさのアレイが可能であることが認識される（例えば、画像処理アプリケーションは、２５６を超える特徴マップを使用してもよい）。
【００４５】
代表例として処理要素２０２を使用すると、それぞれの処理要素は、複数の畳み込みカーネルに対応するマスクを記憶できるローカルメモリ回路２０５を含む。それぞれの処理要素は、対応するＩＦＭの様々な部分から３×３の入力データスライスを受信することができる。特定スライスのサイズが例として提供され、特定の実装形態により変わり得る。処理要素は、対応する演算論理ユニット２０４を使用して入力データスライスに対して畳み込み演算を実行する。例えば、演算論理ユニット２０４は、現行のスライス用の入力特徴マップの要素に、記憶されたマスクの１つの要素を掛けることができる。演算論理ユニット２０８は、３つの入力特徴マップのそれぞれに対して、その結果生じる９つの積を合計する。同じ乗法演算は、処理要素のそれぞれにおいて繰り返され、列からの結果は、演算論理ユニット２０８を使用して一緒に合計される。
【００４６】
描写されたマスクは、表記Ｈ［：，：，ｄ１，ｄ２］を使用してラベル付けされる重み値の３×３行列である。ここで、ｄ１はＩＦＭ［：，：，ｄ１］に対応する。それぞれのＩＦＭは対応する行データ経路を有し、Ｘ［：，：，１］は行データ経路２２４に対応し、Ｘ［：，：，２］は行データ経路２２２に対応し、およびＸ［：，：，３］は行データ経路２２０に対応する。同様の方法で、ｄ２はＯＦＭに対応し、および、それぞれのＯＦＭは対応する列データ経路を有し、Ｙ［：，：，１］およびＹ［：，：，２］は、セグメント２１４、２１６、２１８から構成される列データ経路に対応し、Ｙ［：，：，３］およびＹ［：，：，４］はセグメント２２６、２２８、２３０から構成される列データ経路に対応する。ローカルメモリ回路内の複数（２Ｄ畳み込みカーネル）のマスクの使用は、複数のＯＦＭがそれぞれの列データ経路にリンクされるという結果になる（それぞれの入力スライスに対する反復と比較して）。
【００４７】
様々な実装形態と一致して、それぞれの行に沿った２Ｄ畳み込みカーネルのそれぞれは、その同じ行におけるＩＦＭに適用される。例えば、４つの畳み込みカーネルＨ［：，：，３，１］〜Ｈ［：，：，３，４］はそれぞれ、入力特徴マップＸ［：，：，３］に適用され、４つの２Ｄ畳み込み結果をもたらす。その結果として、図２は、１２の異なる畳み込みカーネルを使用して、１２の２Ｄ畳み込みを図解する。それぞれのＯＦＭは、それぞれの列に沿った畳み込みの合計、すなわち３つの畳み込みの合計、入力ＩＦＭごとに１つであることから、４つのＯＦＭがある。いくつかの実装形態によれば、それぞれのＩＦＭは、画像のカラーチャネル（または光周波数の集合）に対応することができる。入力データスライスは、ＩＦＭ内の様々な行列の配置を選択することによって生成される。ストライド値は、ＩＦＭ内の行または列に対して入力データスライスのソースにおけるずれを表す。例えば、２のストライドは、同じ列のぞれぞれの連続する入力データスライスが以前より高い２つの縦の行であることを意味する。パディングは、真の画像データの外に加えられるデータを表す。描写された例は、１の深さを持つゼロパディングを使用する。
【００４８】
様々な実装形態と一致して、それぞれの入力データスライス（ＩＦＭメモリから読む）は、スライスが記憶されたマスク（例えば、要素の乗法を使用して）のそれぞれに従って処理され得るように、マスクがあるのと同じサイクルで行（横）データバス上に保持される。描写された例は、２つのマスク、およびそれぞれの処理要素に対して対応するＯＦＭを含む。Ｙ［２，１，１］およびＹ［２，１，２］に対する（ＯＦＭ１およびＯＦＭ２に対する）計算の一部として、例えば、ＩＦＭ要素Ｘ［４，３，３］＝−３は、ＩＦＭ３から読まれ、行データ経路２２０上に保持される。その結果生じる値は、１サイクルにおいて［２，３，３，１］＝−４を掛け、および別のサイクルにおいてＨ［２，３，３，２］＝１を掛ける。したがって、ＩＦＭの読み込み作業率は、マスクメモリからの２つの新しいマスク要素ごとにＩＦＭからの新しい値が必要とされるので、マスクメモリの読み込み作業率の半分しかない。さらなるＯＦＭが１つのＰＥ列に沿って一時的に折り畳まれると、ＩＦＭ読み込み作業率は、処理要素の畳み込み反復率およびローカルメモリ回路の対応する読み込み作業率の両方に関してより低くなる。
【００４９】
特定の実装形態は、畳み込みニューラルネットワーク（ＣＮＮ：Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ）内の畳み込みステージを対象としている。ＣＮＮのそれぞれの処理要素は、畳み込みカーネルの集合を持つＩＦＭｓの集合からの２Ｄ畳み込みの複数の合計を計算する。ＯＦＭのそれぞれの要素は１つのそのような合計であり、それぞれのＩＦＭ−ＯＦＭの対は、それ自身の２Ｄ畳み込みカーネルを有する。例えば、ＣＮＮの１つの畳み込みステージは、カラー画像に基づいたＯＦＭを生成する。画像は、それぞれのカラーチャネルごとに、複数のＩＦＭに分けられ得る。それぞれのＩＦＭは、２Ｄ畳み込みカーネルの１つの行に伝達される（例えば、すべての処理要素への１回の一斉送信としてかまたはパイプライン化ステージを使用してのいずれか）。これらのカーネルは、マスク、重み、およびパラメータとしても知られ、ＣＮＮの事前訓練を通して予め得られており、フィードフォワード型畳み込み加速器のための考慮された定数であり得る。
【００５０】
本開示の実装形態によれば、シフトレジスタ２１０および２１２の一組は、列に対して出力特徴マップがあるのと同じ数のアキュムレータを保持する。この例では、列のそれぞれの処理要素は、２つのＯＦＭを支持し、その結果として、２深さシフトレジスタは、２つのアキュムレータを保持するために使用される。
【００５１】
特定の実装形態と一致して、列の第１の処理要素は、第１の合計を生成するのに使用する初期値２３４、２３６を受信することができる。例えば、これらの初期値は、特定の畳み込みに対して予め定められ得、処理要素内に記憶され得る。
【００５２】
図３は、本開示の実装形態と一致して、列に沿った１回の畳み込みの反復に対する入力データスライスおよびマスク値を示す。例として、マスクＨ［：，：，１：３，１］およびデータ入力スライスＸ［：，：，１：３］（３０２、３０４、３０６での破線）を使用すると、その結果生じるＹ［３，１，：］（ＯＦＭ）値は４１である。数学的説明（行列Ａと行列Ｂとの間の要素ごとの乗法である
2020503584.tif 000005
、
および行列Ｃのすべての要素の合計である合計（Ｃ）とともに）は、以下の通りである。
2020503584.tif 000006
【００５３】
Ｙ［２，１，１］は、入力データスライスの異なる集合（３０８、３１０、３１２での点線）を使用して、同様の方法で計算される。２（Ｓｙ＝２）のストライドで、ＩＦＭを覆う次の畳み込みカーネルは、行３で始まる（行１の上の２つの行）。畳み込み反復の結果は６５である。プロセスは、ＯＦＭ全体が生成されるまで繰り返される。
【００５４】
図４は、本開示の実装形態と一致して、２×２の処理要素アレイおよびローカルメモリ回路へのデータ接続を描写する。共有された入力メモリ４０２、４０４は、対応する行における処理要素による共同使用のためにＩＦＭを保持する。いくつかの実装形態と一致して、メモリはＰＬＤのＩＣチップ内のブロックＢＲＡＭである。入力データスライス（ｄ１）は、乗算器４０６および加算器４０８の形態における演算ユニットを含む、処理要素のそれぞれに提供される。
【００５５】
特定の実装形態と一致して、処理ユニットは、ＰＬＤ全体に分配されるデジタル信号処理（ＤＳＰ）論理内に実装される。ローカルマスク／パラメータメモリ４１０は、マスクの複数の集合を記憶する。描写された例は、それぞれのメモリ回路の活性部分における３×３のマスクの４つの集合を示す。メモリ回路は、活性マスクのための値を記憶し、乗算器４０６に出力としての値を提供する。メモリ回路の不活性部分は、マスクの次の集合をロードするのに使用される。システムは、マスクの次の集合を使用するのを始め、現行の不活性部分にさらなるマスクのローディングを可能にするために、活性部分および不活性部分を交換する。
【００５６】
特定の実装形態では、ローカルメモリは、それぞれのローカルメモリによって出力されるマスク値を選択するのに使用される、１つの共通読み取りポインタを共有する。読み取りポインタは、共有２Ｄマスク読み取りバスを使用してローカルメモリに接続される。共通読み取りポインタの使用は、論理を簡略化し、そうでなければ複数の読み取りポインタおよびアドレスバスを制御するのに使用されるリソース使用量を低減することを促進することができる。特定の実装形態は、マスクのローディング中に共通書き込みポインタを使用する。書き込みポインタは、共有２Ｄマスク読み取りバスを使用してローカルメモリに接続される。共有読み取りおよび書き込みポインタは、行および列データ経路上のパイプライン化によってもたらされる遅延に合致するようにパイプライン化され得る。
【００５７】
図５は、本開示の実装形態と一致した、処理要素の回路図である。回路図は、本明細書において考察かつ描写されている様々な実装形態とともに使用され得る処理要素の例を示す。処理要素は、ローカルメモリブロック５０２および演算ユニット５０４を含む。ローカルメモリブロックは、２つのメモリ回路５０６および５０８を有し、そのそれぞれは、それぞれの入力ポート（Ｄ）および出力ポート（Ｑ）を有する。乗算器５１２は、読み取りページ信号に応じて出力間で選択する。読み取りページ信号は、現行で活性である結合されたメモリ空間の部分（またはページ）を識別する。
【００５８】
特定の実装形態によれば、それぞれのメモリ回路５０６および５０８は、読み取りモードまたは書き込みモードで動作することができるが、両方のモードは同時には起こらない。モードは、Ｒ／Ｗ入力信号の状態によって決まる。メモリ回路５０６のＲ／Ｗ入力とメモリ回路５０８のＲ／Ｗ入力とは、それぞれ、ｗｅ＿ｐｉｎｇ信号とｗｅ＿ｐｏｎｇ信号とによって制御される。ｗｅ＿ｐｉｎｇ信号およびｗｅ＿ｐｏｎｇ信号は、処理要素のクロスポイント行ＩＤに対するｗａｄｄｒ＿ｈｉ信号の比較によってさらにゲートされ得る。共有データバス（ｗｄａｔａ）を依然として使用している間に、処理要素ごとに異なるマスクがロードされ得るように、処理要素ごとに異なるＩＤが割り当てられ得る。様々な実装形態によれば、書き込みポインタと読み取りポインタとを区別するために、低アドレスビット用の２つの異なるアドレスバス（ｐｉｎｇ＿ａｄｄｒ＿ｌｏおよびｐｏｎｇ＿ａｄｄｒ＿ｌｏ）が使用される。例えば、ｐｉｎｇ＿ａｄｄｒ＿ｌｏは、メモリ回路５０６が活性であるときに読み取りポインタによって動かされ得る一方、ｐｏｎｇ＿ａｄｄｒ＿ｌｏは、書き込みポインタによって動かされ得る。読み取りポインタと書き込みポインタとは、それらのそれぞれの活性／不活性状態における変化を受けて、ｐｉｎｇアドレスバスとｐｏｎｇアドレスバスとの間で交換可能である。
【００５９】
演算ユニット５０４は、Ｘ＿データ信号ライン上で受信された入力スライスデータに対してテンソル演算を行う乗算器５１４および加算器５１６を含む。乗算器５１４はまた、乗算器５１２の出力をテンソル演算への入力と見る。乗算器５１４の出力が、ｙ＿ｄａｔａ＿ｃａｓｃａｄｅ信号からのデータとともに、加算器５１６に提供される。ｙ＿ｄａｔａ＿ｃａｓｃａｄｅ信号は、その列の前の処理要素の出力から提供される。処理要素がその列の第１の処理要素である場合、信号のソースは、処理要素または他の所に記憶され得る初期設定値に対応する可能性がある。加算器５１６は、特定の実装形態によっては、バイアス入力を受信することもできる。
【００６０】
図５は、入力クロック（三角）記号付きのボックスによって表されるいくつかのクロックドレジスタ（フリップフロップ）を示す。このレジスタは、適切な信号タイミングをもたらすのに使用され得る。例えば、レジスタブロック５１８は、メモリ回路５０６および５０８によって使用される制御信号およびデータ信号を同期させ、遅延させる。レジスタブロック５１８は、ｙ＿ｄａｔａ＿ｃａｓｃａｄｅデータ入力との同期を維持するために、その列に沿うそれぞれの点にある制御信号を遅延させるのに役立てることができる。別の例として、レジスタ５１０は、その行の後続の処理要素に対して行データをパイプライン化するのに使用され得る。
【００６１】
図６は、本開示の様々な実装形態と一致する、テンソル演算を行う際の流れ図である。流れ図は、ブロック６０２ごとの、スライスデータ（例えば、ＩＦＭのテンソル）の送信で始まる。本明細書に考察されているように、スライスデータ用のデータは、共有行データ経路を通して複数の処理要素に接続されているメモリに記憶され得る。各処理要素がスライスデータを同時に受信するような、列データ経路にわたる一斉送信によって、送信が遂行され得る。データが各パイプライン化ステージにより異なる時点で処理要素に達するように、送信がパイプライン化されていてもよい。例えば、それぞれの処理要素が異なるパイプライン化ステージの一部であり、それにより、行データ経路にわたるルーティング遅延によるタイミング問題を軽減するように、パイプライン化が実装され得る。
【００６２】
特定の実装形態によれば、行にわたる有効な周波数が、処理要素のクロック周波数に合致するように、様々な列に応じたメモリ回路が食い違い状クロックを使用して、クロック化される。例えば、メモリ回路が処理要素の周波数の１／２で動作する場合、隣接行のクロックは、１８０度の位相ずれを有するクロック信号を使用してクロック化される（１つの行用のクロックが、隣接行に対して反転される）。処理要素が、６２５ＭＨｚ（１．６ｎｓサイクル時間）の周波数で動作する場合、入力メモリ回路は、その周波数の半分、すなわち３１２．５ＭＨｚ（３．２ｎｓサイクル時間）で動作している可能性がある。連続する行に対して反転バージョンまたは非反転バージョンのクロック信号を使用することによって、第１の行（例えば、行４）のメモリ回路は、前の行（例えば、行３）のメモリ回路の後に出力データ１．６ｎｓを提供する。１．６ｎｓ遅延は、処理要素の周波数に合致するが、メモリ回路用のクロックドメインのサイクルの半分にすぎない。
【００６３】
したがって、偶数行にあるメモリ回路は、１／２の速度で動作し、かつ処理要素のクロックに揃っている位相である第１のクロックを使用することができる。奇数行にあるＩＦＭ  ＳＲＡＭは、第１のクロックの反転バージョンであり、処理要素のクロックに揃っている位相でもある第２のクロックを使用する。実装形態によっては、入力ＳＲＡＭ垂直パイプラインに沿う窮屈なタイミング経路は、それぞれの論理列の奇数行および偶数行を２つの異なる物理列に分けることによって、緩められ得る。次に、それぞれの物理列の結果がまとめられ、単一論理列の機能性をもたらすことができる。
【００６４】
それぞれの処理要素において、次に、ブロック６０４において、マスクがローカルメモリ回路からロードされ得る。本明細書に考察されているように、マスクは、ローカルメモリ内の活性なメモリ空間からロードされ得る。同時に、新しいマスクがメモリ回路内の不活性なメモリ空間にロードされ得る。ブロック６０６において、処理要素が、データスライスおよびマスクに対してテンソル演算を行う。本明細書に考察されているように、テンソル演算は、様々な異なる数学演算を使用して実装され得る。例えば、テンソル演算は、ＣＮＮの一部として使用される入力特徴マップ（ＩＦＭ）の集合の２Ｄ畳み込みの一部とすることができる。テンソル用の様々な次元およびサイズ、ならびにデータに対して行われる様々なテンソル演算を含む他の例も可能である。
【００６５】
ブロック６０８において、処理要素はまた、列データを受信する。次に、ブロック６１０において、テンソル演算の出力および受信列データを使用して、列演算が行われる。例えば、テンソル演算の結果が、列データ経路上の処理要素から受信されたデータと合計され得る。それぞれの列にある最後の処理要素は、記憶用の結果を提供する（例えば、ＯＦＭ内の要素として）。
【００６６】
本明細書に考察されている様々な実装形態と一致して、処理要素ごとのローカルメモリ回路は、メモリ回路内に複数のマスクを記憶することができる。ブロック６１２において、使用されていない追加のマスクがある場合、次のマスクがロードされ得、別の反復が実行され得る。ブロック６１２において、追加のマスクがない場合、ブロック６０２において、次の入力データスライスが取り出され得る。次のデータスライスは、現行のＩＦＭの次のスライスに対応するものであり得るか（例えば、ストライド値に対して定義されるように）、全く新しいＩＦＭからのものであってもよい（例えば、この場合、前のＩＦＭのすべてのデータスライスが受信および処理されている）。
【００６７】
特定の実装形態は、プログラマブル論理デバイス（ＰＬＤ）内で回路網を利用することができ、本明細書に考察されている様々な実装形態は、それほど限定されるものではない（例えば、特定の実装形態が特定用途向け集積回路（ＡＳＩＣ）とともに、または他のタイプの集積回路チップおよび集積回路デバイスの一部として使用されてもよい）。
【００６８】
本明細書に記載のテンソルは、様々な数の次元（またはインデックス）を有することができる。例えば、画像認識ニューラルネットワークの第１のステージが、原色のそれぞれに対して３つの行列から成る３次元テンソルとして画像を記憶してもよい。描写の例は、対応する平面が、物理的な一行のみを占めることを示すが、１つの平面が、１つよりも多い行を占めることもできる（例えば、処理要素内部のローカルメモリが、平面全体に対してマスクを記憶するのに不十分であるとき）。このような場合、１つよりも多い物理的な行が、組み合わされ、システムの１つの論理行として機能することができる。
【００６９】
図７は、本開示の回路およびプロセスが実装され得るプログラマブル集積回路（ＩＣ）７００を示す。プログラマブルＩＣは、他のプログラマブルリソースとともにフィールドプログラマブルゲートアレイ（ＦＰＧＡ：Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）論理を含むシステムオンチップ（ＳＯＣ：Ｓｙｓｔｅｍ  Ｏｎ  Ｃｈｉｐ）とも呼ばれることがある。ＦＡＧＡ論理は、いくつかの異なるタイプのプログラマブル論理ブロックをアレイに含み得る。例えば、図７は、マルチギガビットトランシーバ（ＭＧＴ）７０１と、設定可能な論理ブロック（ＣＬＢ）７０２と、ランダムアクセスメモリブロック（ＢＲＡＭ）７０３と、入力／出力ブロック（ＩＯＢ）７０４と、設定およびクロッキング論理（ＣＯＮＦＩＧ／ＣＬＯＣＫＳ）７０５と、デジタル信号処理ブロック（ＤＳＰ）７０６と、特殊化入力／出力ブロック（Ｉ／Ｏ）７０７、例えばクロックポートと、デジタルクロックマネージャ、アナログ−デジタル変換装置、システムモニタリング論理などの他のプログラマブル論理７０８と、を含む、多数の様々なプログラマブルタイルを含むプログラマブルＩＣ７００を図解する。ＦＰＧＡ論理を有するいくつかのプログラマブルＩＣは、専用プロセッサブロック（ＰＲＯＣ）７１０、ならびに内部および外部の再設定ポート（図示せず）も含む。
【００７０】
あるＦＰＧＡ論理では、それぞれのプログラマブルタイルは、それぞれの隣接タイルにおいて、対応する相互接続要素との間に標準化接続を有するプログラマブル相互接続要素（ＩＮＴ）７１１を含む。したがって、まとめられたプログラマブル相互接続要素は、図解のＦＰＧＡ論理用のプログラマブル相互接続構造を実装する。プログラマブル相互接続要素ＩＮＴ７１１は、図７の上部に含まれている例によって示されるように、同じタイル内のプログラマブル論理要素との間の接続も含む。
【００７１】
例えば、ＣＬＢ７０２は、単一のプログラマブル相互接続要素ＩＮＴ７１１に加えて、ユーザ論理を実装するようにプログラムされ得る設定可能な論理要素ＣＬＥ７１２を含むことができる。ＢＲＡＭ７０３は、１つまたは複数のプログラマブル相互接続要素に加えて、ＢＲＡＭ論理要素（ＢＲＬ）７１３を含むことができる。タイルに含まれる相互接続要素の個数は、タイルの高さによって左右されることが多い。描写の実装形態では、ＲＲＡＭタイルは、５個ＣＬＢｓと同じ高さを有するが、他の個数（例えば、４）が使用されてもよい。ＤＳＰタイル７０６には、適切な個数のプログラマブル相互接続要素に加えて、ＤＳＰ論理要素（ＤＳＰＬ）７１４を含むことができる。ＩＯＢ７０４は、例えば、プログラマブル相互接続要素ＩＮＴ７１１の１つのインスタンスに加えて、入力／出力論理要素（ＩＯＬ）７１５の２つのインスタンスを含むことができる。当業者には明らかであるように、例えば、Ｉ／Ｏ論理要素７１５に接続されている実際のＩ／Ｏボンドパッドは、様々な図解されている論理ブロックの上に積層された金属を使用して製造され、通常、入力／出力論理要素７１５の範囲に閉じ込められていない。
【００７２】
描写の実装形態において、賽の目の中央の近くの柱状範囲（図７では網掛けで表される）は、設定、クロック、および他の制御論理に使用される。列から延在する水平範囲７０９は、クロック信号および設定信号をプログラマブルＩＣの横幅にわたって分散させるのに使用される。「柱状」範囲および「水平」範囲への言及は、縦置き向きに図面を見てであることに留意されたい。
【００７３】
図７に図解されているアーキテクチャを利用するいくつかのプログラマブルＩＣは、プログラマブルＩＣの大部分を構成する規則正しい柱状構造を崩す追加の論理ブロックを含む。追加の論理ブロックは、プログラマブルブロックおよび／または専用論理とすることができる。例えば、図７に示されているプロセッサブロックＰＲＯＣ７１０は、ＣＬＢおよびＢＲＡＭのいくつかの列にわたっている。
【００７４】
図７は、プログラマブルＩＣアークテクチャの単に例を示すものであることに留意されたい。列内の論理ブロック個数、列の相対幅、列の個数および順番、列に含まれている論理ブロックのタイプ、論理ブロックの相対サイズ、および図７の上部に含まれている相互接続／論理実装形態が、単に例として提供されている。例えば、実際のプログラマブルＩＣでは、ＣＬＢが現れるときにはいつでも、ユーザ論理の効果的な実装を容易にするために、典型的には、ＣＬＢの１つより多い隣接列が含まれる。
【００７５】
特定の実装形態によれば、処理要素は、ＰＬＤまたはＦＰＧＡ内にアレイに配置されている。このアレイ内のそれぞれの処理要素は、高クロックレートで簡単に反復可能なタイミングクロージャをもたらすように、ＤＳＰスライスの周りにあることが保証された小さな事前定義の領域に実装され得る。ＰＥ内部の論理は、単純に保たれている。ＦＰＧＡの既存の分散型ＳＲＡＭインタフェースを使用して、処理レジスタファイルインタフェースが提供され得る。ＦＰＧＡのグローバル論理は、この新しい様式におけるインタフェースを使用するのに必要なデータ変換を行うように設定され得る。
【００７６】
賽の目にわたって列で配置された反復可能なタイルを使用した柱状のＰＬＤ／ＦＰＧＡアーキテクチャでは、ＤＳＰスライス行ピッチは、しばしば固定され得る。行と交差する制御信号およびデータ信号は、単一ステージによってパイプライン化され、高クロックレートを実現する。列ピッチが揃っていないこと（例えば、２つのＤＳＰスーパータイル列間の他の列の存在による）によって引き起こされるタイミングのバラツキを補うために、行パイプラインステージを加えて、列パイプラインが同じクロックレートで走ることを可能にすることができる。
【００７７】
本明細書に描かれている様々な流れ図では、ブロックおよび関連の機能の特定の順番が例として提供される。この順番付けは、必ずしも限定的ではなく、様々な実装形態により変えられ得る。
【００７８】
当業者であれば、１つまたは複数のプロセッサを含む様々な代替的なコンピューティング装置、およびプログラムコードにより設定されたメモリ装置が、本明細書に開示されている機能を行い得るプロセスおよびデータ構造をホストするのに適する可能性があることが分かるであろう。さらに、磁気もしくは光のディスクもしくはテープ、電子記憶デバイス、またはネットワーク上のアプリケーションサービスとして、などの様々なコンピュータ可読記憶媒体または配信チャネルを介してプロセスが提供され得る。
【００７９】
態様および特徴が個々の図において説明されている場合があるが、組み合わせが明確に示されていないまたは組み合わせとして明確に描写されていなくても、１つの図からの特徴が別の図の特徴と組み合わせられ得ることが分かるであろう。
【００８０】
方法およびシステムが、ＲＡＭ回路を使用する様々なシステムに適用されると考えられる。本明細書の考察から、当業者には他の態様および特徴が明らかになるであろう。方法およびシステムの一部分は、ソフトウェアを実行するように設定された１つまたは複数のプロセッサとして、特定用途向け集積回路（ＡＳＩＣ）として、またはプログラマブル論理デバイス上の論理として実装され得る。さらにまた、本明細書に特定されている様々な回路は、共通のコンピュータ処理ユニットまたはデジタル処理ユニットの使用など、ハードウェア回路網を共有し得る。本明細書および図面は、単に例として考えられるものであり、本発明の真の範囲は、以下の特許請求の範囲によって示されることが意図される。
【図１】
2020503584.tif 000007
【図２】
2020503584.tif 000008
【図３】
2020503584.tif 000009
【図４】
2020503584.tif 000010
【図５】
2020503584.tif 000011
【図６】
2020503584.tif 000012
【図７】
2020503584.tif 000013
【国際調査報告】
2020503584.tif 000014
2020503584.tif 000015
2020503584.tif 000016