JP2023523587A - 計算データフローアーキテクチャ - Google Patents

計算データフローアーキテクチャ Download PDF

Info

Publication number
JP2023523587A
JP2023523587A JP2022564306A JP2022564306A JP2023523587A JP 2023523587 A JP2023523587 A JP 2023523587A JP 2022564306 A JP2022564306 A JP 2022564306A JP 2022564306 A JP2022564306 A JP 2022564306A JP 2023523587 A JP2023523587 A JP 2023523587A
Authority
JP
Japan
Prior art keywords
tiles
interconnect
circuit
local
connections
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2022564306A
Other languages
English (en)
Inventor
ヤング,スティーブン・ピィ
ガイド,ブライアン・シィ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xilinx Inc
Original Assignee
Xilinx Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Xilinx Inc filed Critical Xilinx Inc
Publication of JP2023523587A publication Critical patent/JP2023523587A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03KPULSE TECHNIQUE
    • H03K19/00Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits
    • H03K19/02Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components
    • H03K19/173Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components using elementary logic circuits as components
    • H03K19/177Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components using elementary logic circuits as components arranged in matrix form
    • H03K19/17736Structural details of routing resources
    • H03K19/17744Structural details of routing resources for input/output signals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/04Generating or distributing clock signals or signals derived directly therefrom
    • G06F1/10Distribution of clock signals, e.g. skew
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03KPULSE TECHNIQUE
    • H03K19/00Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits
    • H03K19/02Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components
    • H03K19/173Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components using elementary logic circuits as components
    • H03K19/177Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components using elementary logic circuits as components arranged in matrix form
    • H03K19/17748Structural details of configuration resources
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03KPULSE TECHNIQUE
    • H03K19/00Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits
    • H03K19/02Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components
    • H03K19/173Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components using elementary logic circuits as components
    • H03K19/177Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components using elementary logic circuits as components arranged in matrix form
    • H03K19/17736Structural details of routing resources

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Logic Circuits (AREA)
  • Multi Processors (AREA)

Abstract

例示的な集積回路は、回路タイルのアレイと、アレイ内の回路タイルを結合する相互接続とを備え、相互接続は、複数の接続を各々が有する相互接続タイルを含み、複数の接続は、少なくとも回路タイルのそれぞれの1つへの接続と、少なくとも1つの他の相互接続タイルへの複数の接続とを含み、集積回路は、相互接続タイルの各々における複数のローカルクロスバーを備え、複数のローカルクロスバーは非ブロッキングクロスバーを形成するように結合され、複数のローカルクロスバーの各々は、非同期通信のためのハンドシェイク回路を備える。

Description

本開示の例は、概して電子回路に関し、特に、プログラマブルデバイスのための計算データフローアーキテクチャに関する。
プログラマブルデバイス(たとえば、プログラマブルロジックを含む集積回路)は、異なる構成可能論理要素(CLE:Configurable Logic Element)間でデータを転送するためのネットワークを含む。同期ネットワークは、クロックサイクルごとに2つのエンドポイント間でデータを転送することができる。しかしながら、これらの転送の周波数は、クロック速度およびCLEの配置に限定される。さらに、ネットワークは、パイプライン化を実行するために使用され得る複数の相互接続(相互接続タイルまたはスイッチング要素とも呼ばれる)を含み得る。集積回路におけるクロック速度は、前の世代では急速に増大していないが、高度にパイプライン化された設計は、低速回路にもかかわらずスループットを増大させることができる。しかしながら、同期ネットワークでは、並列パス内のパイプラインステージは、機能的正確性を維持するために相互に整合しなければならないが、クロックジッタ、クロックスキュー、フリップフロップセットアップ/クロックトゥーアウトオーバーヘッド、不完全なフリップフロップタイミングロケーションのため、パイプライン化は、同期ネットワーク内で達成することが困難である。
1つの解決策は、プログラマブルロジック内のCLE間でデータを転送するために非同期ネットワークを使用することであり、これは、同期ネットワーク内のパイプライン化の限界を克服する。すなわち、非同期ネットワークは、異なる長さを有する異なる並列パスを有し、依然としてパイプライン化を行うことができる。さらに、非同期ネットワークは、クロックジッタまたは異なるクロックドメインに依存しない。しかしながら、非同期ネットワークは、ハンドシェイクおよびファンアウトの有効化を必要とするなどの同期ネットワークに対する欠点を有する。
プログラマブルデバイスのための計算データフローアーキテクチャを提供するための技術が説明される。一例では、集積回路は、データ演算を実行するように構成された回路を備える回路タイルのアレイと、アレイ内の回路タイルを結合する相互接続とを含み、相互接続は、複数の接続を各々が有する相互接続タイルを含み、複数の接続は、少なくとも回路タイルのそれぞれの1つへの第1の接続と、複数の他の相互接続タイルへの複数の接続とを有し、集積回路は、相互接続タイルの各々における複数のローカルクロスバーを含み、複数のローカルクロスバーは、非ブロッキングクロスバーを形成するように結合される。
別の例では、集積回路は、データ演算を実行するように構成された回路を備える回路タイルのアレイと、アレイ内の回路タイルを結合する相互接続とを含み、相互接続は、複数の接続を各々が有する相互接続タイルを含み、複数の接続は、少なくとも回路タイルのそれぞれの1つへの第1の接続と、複数の他の相互接続タイルへの複数の接続とを有する。さらに、相互接続タイルは、複数のバスを使用して互いに接続され、相互接続タイルの各々は、非同期通信のためのハンドシェイク回路を含む。
別の例では、方法であって、プログラマブル相互接続および複数の相互接続タイルを使用して通信可能に結合された複数の回路タイルのアレイを備える集積回路において実装されるソースコードを受信することと、ソースコードをフロー制御グラフに変換することと、フロー制御グラフを、複数の事前定義されたプリミティブを備えるプリミティブグラフに変換することとを含み、事前定義されたプリミティブの各々は、フロー制御グラフにおいて定義された演算の少なくとも一部を実行するための回路を含み、方法は、プリミティブグラフにおける事前定義されたプリミティブを複数の回路タイルにマッピングすることをさらに含み、複数の回路タイルは少なくとも乗算器と、プログラム的に選択され得る1つの追加の論理機能を実行するための回路とをそれぞれ備え、方法は、複数の相互接続タイルを用いて複数の回路タイルを接続することにより、集積回路におけるソースコードに実装することを含む。
これらおよび他の態様は、以下の詳細な説明を参照することによって理解され得る。
上記で列挙した特徴を詳細に理解することができるように、上記で簡潔に要約した、より具体的な説明は、例示的な実装形態を参照することによって行うことができ、そのいくつかを添付の図面に示す。しかしながら、添付の図面は、典型的であって例示的な実装形態のみを示し、したがって、その範囲を限定するものと見なされるべきではないことに留意されたい。
一例に従うプログラマブルICを示すブロック図である。 一例に従うプログラマブルデバイスを示すブロック図である。 一例に従うプログラマブルICのFPGA(Field Programmable Gate Array)実装を示す図である。 一例に従うプログラマブルロジックの一部を示すブロック図である。 一例に従う相互接続タイルを示すブロック図である。 一例に従う相互接続タイルを実装するための完全な非ブロッキングクロスバーを示すブロック図である。 一例に従うローカルクロスバーを示すブロック図である。 一例に従う中間プリミティブを使用してプログラマブルロジックを構成するためのフローチャートである。 一例に従うCLEから形成され得る異なるプリミティブを示すブロック図である。 一例に従うCLEから形成され得る異なるプリミティブを示すブロック図である。 一例に従うCLEから形成され得る異なるプリミティブを示すブロック図である。 一例に従うCLEから形成され得る異なるプリミティブを示すブロック図である。
理解を容易にするために、可能な場合、図面に共通する同一の要素を示すために同一の参照番号が使用されている。ある例の要素は、他の例に有益に組み込まれ得ることが企図される。
[詳細な説明]
以下、図面を参照して様々な特徴を説明する。図面は、縮尺通りに描かれていてもいなくてもよく、同様の構造または機能の要素は、図面全体にわたって同様の参照番号によって表されることに留意されたい。図面は、特徴の説明を容易にすることのみを意図していることに留意されたい。これらは、請求項に係る発明の網羅的な説明として、または特許請求される発明の範囲に対する限定として意図されない。さらに、図示される例は、示される全ての態様または利点を有する必要はない。特定の例に関連して説明される態様または利点は、必ずしもその例に限定されず、そのように示されていないか、またはそのように明示的に説明されていない場合であっても、任意の他の例において実施され得る。
図1Aは、一例に従うプログラマブルIC1を示すブロック図である。プログラマブルIC1は、プログラマブルロジック3(プログラマブルファブリックとも呼ばれる)と、コンフィギュレーション論理25と、コンフィギュレーションメモリ26とを含む。プログラマブルIC1は、不揮発性メモリ27、DRAM28、および他の回路29などの外部回路に接続することができる。プログラマブルロジック3は、論理セル30と、サポート回路31と、プログラマブル相互接続32とを含む。論理セル30は、複数の入力の一般的な論理機能を実装するように構成することができる回路を含む。サポート回路31は、トランシーバ、入出力ブロック、デジタル信号プロセッサ、メモリなどの専用回路を含む。論理セルとサポート回路31とは、プログラマブル相互接続32を用いて相互接続されることができる。論理セル30をプログラムするための情報、サポート回路31のパラメータを設定するための情報、プログラマブル相互接続32をプログラムするための情報は、コンフィギュレーション論理25によって、コンフィギュレーションメモリ26に格納される。構成論理25は、不揮発性メモリ27または任意の他のソース(たとえば、DRAM28または他の回路29からである)から構成データを取得することができる。いくつかの例では、プログラマブルIC1は処理システム2を含む。処理システム2は、マイクロプロセッサ、メモリ、サポート回路、IO回路などを含むことができる。いくつかの例では、プログラマブルIC1は、ネットワークオンチップ(NOC:Network-On-Chip)55およびデータ処理エンジン(DPE: Data Processing Engine)アレイ56を含む。NOC55は、PS2とPL3とDPEアレイ56との間など、プログラマブルIC1のサブシステム間の通信を提供するように構成される。DPEアレイ56は、ベクトルプロセッサのアレイなど、データ処理を実行するように構成されたDPEのアレイを含むことができる。
図1Bは、一例に従うプログラマブルデバイス54を示すブロック図である。プログラマブルデバイス54は、複数のプログラマブルIC(Integrated Circuit)1、たとえばプログラマブルIC1A,1B,1C,1Dを含む。一例では、各プログラマブルIC1は、インターポーザ60上に配置されたICダイである。各プログラマブルIC1は、プログラマブルデバイス54のスーパー論理領域(SLR:Super Logic Region)53、たとえばSLR53A、53B、53C、53Dを備える。プログラマブルIC1は、インターポーザ60上の導体(スーパーロングライン(SLL:Super Long Lines)52と呼ばれる)を介して相互接続されている。
図1Cは、PL3を含むプログラマブルIC1のFPGA(Field Programmable Gate Array)の実装を示す。図1Cに示すPL3は、本明細書で説明するプログラマブルデバイスの任意の例で使用することができる。PL3は、トランシーバ37、構成論理ブロック(CLBs:Configurable Logic Blocks)33、ランダムアクセスメモリブロック(BRAMs)34、入力/出力ブロック(IOBs:Input/Output Blocks)36、構成およびクロック論理(CONFIG/CLOCKS)42、デジタル信号処理ブロック(DSPs:Digital Signal Processing Blocks)35、専用入力/出力ブロック(I/O)41(たとえば、構成ポートおよびクロックポート)、ならびにデジタルクロックマネージャ、アナログデジタル変換器、システム監視論理などの他のプログラマブルロジック39を含む多数の異なるプログラマブタイルを有する。PL3はまた、PCIeインターフェース40、アナログデジタル変換器(ADC: Analog-to-Digital Converters)38などを含むことができる。
いくつかのPLでは、各プログラマブルタイルは、図1Cの上部に含まれる実施例によって示されるように、同じタイル内のプログラマブルロジック要素の入力および出力端子48への接続を有する、少なくとも1つのプログラマブル相互接続要素(INT:Interconnect Element)43を含むことができる。各プログラマブル相互接続要素43は、また、同じタイルまたは他のタイル内の隣接するプログラマブル相互接続要素の相互接続セグメント49に対する接続を含むことができる。各プログラマブル相互接続要素43は、また、論理ブロック(図示せず)間の汎用ルーティングリソースの相互接続セグメント50に対する接続を含むことができる。汎用ルーティングリソースは、相互接続セグメント(たとえば、相互接続セグメント50)のトラックを備える論理ブロック(図示せず)と、相互接続セグメントを接続するためのスイッチブロック(図示せず)との間のルーティングチャネルを含むことができる。汎用ルーティングリソースの相互接続セグメント(たとえば、相互接続セグメント50)は、1つ以上の論理ブロックに及ぶことができる。プログラマブル相互接続要素43は、汎用ルーティングリソースと共に、図示されたPLのためのプログラマブル相互接続構造(プログラマブル相互接続)を実装する。
例示的な実装形態では、CLB33は、ユーザ論理に加えて単一のプログラマブル相互接続要素(INT)43を実装するようにプログラムされ得る構成可能論理要素(CLE)44を含むことができる。BRAM34は、1つまたは複数のプログラマブル相互接続要素に加えて、BRAM論理要素(BRL:BRAM Logic Element)45を含むことができる。典型的には、タイルに含まれる相互接続要素の数は、タイルの高さに依存する。図示の例では、BRAMタイルは、5つのCLBと同じ高さを有するが、他の数(たとえば、4つ)を使用することもできる。DSPタイル35は、適切な数のプログラマブル相互接続要素に加えてDSP論理要素(DSPL:DSP Logic Element)46を含むことができる。IOB36は、たとえば、プログラマブル相互接続要素43の1つのインスタンスに加えて、I/O論理要素(IOL:Input/Output Logic Element)47の2つのインスタンスを含むことができる。当業者には明らかなように、たとえば、I/O論理素子47に接続される実際のI/Oパッドは、典型的には、I/O論理素子47の領域に限定されない。
図示の例では、ダイの中心付近の水平領域(図3Dに示す)は、構成、クロック、および他の制御論理に使用される。この水平領域または列から延在する垂直列51は、PLの幅にわたってクロックおよび構成信号を分配するために使用される。
図1Cに示されるアーキテクチャを利用するいくつかのPLは、PLの大部分を構成する規則的な柱状構造を破壊する追加の論理ブロックを含む。追加の論理ブロックは、プログラム可能ブロックおよび/または専用論理であり得る。
図1Cは、例示的なPLアーキテクチャのみを示すことを意図していることに留意されたい。たとえば、行内の論理ブロックの数、行の相対的な幅、行の数および順序、行に含まれる論理ブロックの種類、論理ブロックの相対的なサイズ、および図1Cの上部に含まれる相互接続/論理実装は、純粋に例示である。たとえば、実際のPLでは、ユーザ論理の効率的な実装を容易にするために、CLBの複数の隣接する行が、典型的にはCLBが現れるどこにでも含まれるが、隣接するCLB行の数は、PLの全体的なサイズによって変化する。
上述のプログラマブル相互接続32は、プログラマブルロジック3内の様々な回路タイルに結合される。プログラマブル相互接続32(相互接続とも呼ばれる)は、異なる回路タイルを互いに接続してプログラマブルロジック3内の回路を形成するために、コンフィギュレーションメモリ26を使用してプログラムされることができる。1つのタイプの相互接続32はパイプライン同期相互接続である。しかしながら、大型デバイスの場合、高度にパイプライン化された同期相互接続は、多数のレジスタを有し、過度に多くの面積およびパワーを消費するであろう。さらに、多くのシーケンシャルレジスタを通って流れる信号には、大きな待ち時間がある。加えて、クロックイネーブル(CE)タイミングは、高周波数において問題となる。最後に、相互接続をプログラムするためのデータを生成するソフトウェアツールは、並列パス上でマッチしたサイクルカウントを保証し、オプションのレジスタ、余分な先入れ先出し(FIFO)、およびそれらのコンポーネントのためのツールサポートを必要とする。
ある例では、相互接続32は非同期である。高度にパイプライン化された非同期相互接続は、同期相互接続に関連する上述の問題のほとんどを回避する。回路は、データが回路の切り替えを示すときにのみ切り替わる。クロックまたはクロックイネーブルは存在しない。非同期ハンドシェイクは、細粒度クロックおよびクロックイネーブルとして機能する。並列パスは、段数に整合する必要はない。プッシュバックがない場合、データはオープンゲートを素早く流れ、待ち時間を最小限に抑える。非同期相互接続32は、同期の最悪のケースを保証するというよりも、シリコン、電圧、および温度が許容する限り速く、演算することができる。これは、計算用途にとって有利であり、デバイス内の温度依存電圧スケーリングと互換性がある。
図2は、一例に従うプログラマブルロジック3の一部分200を示すブロック図である。プログラマブルロジック3は、回路タイルのアレイ、たとえばCLEs202A~F(総称してCLEs202と呼ばれる)を含む。上述のように、プログラマブルロジック3は、CLE以外の異なるタイプの回路タイルを含むことができるが、例によって明確にすることを目的として、CLEs202が示されている。相互接続32は、相互接続タイル204A~F(総称して相互接続タイル204と呼ぶ)を含む。各CLEs202は、相互接続タイル204のインターフェースに結合される。各相互接続タイル204は、他の相互接続タイル204への追加のインターフェースを含む。図示の例では、相互接続タイル204間の接続は、単一接続206および二重接続208を含む。接続は、CLEs202への接続210をさらに含む。単一接続206は、隣接する相互接続タイル204を接続する。二重接続208は、1つの相互接続タイル204を、その間に1つの相互接続タイルを有する別の隣接しない相互接続タイル204に接続する。
各接続206、208、210は、複数のNビットバスを含む。たとえば、単一接続206は、相互接続タイル204間の各方向に2つの4ビットバスを含むことができる。同様に、二重接続208は、それぞれの相互接続タイル204間の各方向に2つの4ビットバスを含むことができる。そのような場合、2×2×4=16のワイヤが2つの隣接する相互接続タイル204の間に存在し、単一接続206を実装する。同様に、相互接続タイル204の間に配置される2つの二重接続208を実装するための、2つの隣接する相互接続タイル204の間でデータ信号を伝送する2×2×2×4=32のワイヤがある(非エッジの場合を仮定する)。各バスはまた、ReadyおよびAcknowledgeハンドシェイク信号を有してもよく、これは、各4ビットバスのための2つ以上のワイヤを追加し、その結果、合計48本のワイヤが2つの隣接する相互接続タイル205の間に延在する。一例では、相互接続タイル204とCLEs202との間の接続210は、CLEs202への3つの4ビットバスと、CLEs202からの2つの4ビットバスとを含む。そのような場合、相互接続タイル204とCLEs202との間に3×2×4=24のワイヤがある。当業者は、単一接続206、二重接続208、およびCLEs202への接続210を実装するバスの数およびバスの幅Nが、本明細書で説明される例から変化し得ることを理解するであろう。
一実施形態では、一部分200内の相互接続タイル204は、CLEs202間でデータを転送するための非同期ネットワークを形成する。一実施形態では、相互接続タイル204は、CLEs202間にパイプラインを形成する。たとえば、各相互接続タイル204は、パイプライン内のステージとしての役割を果たすことができる。代替的にまたは追加的に、各相互接続タイル204は、パイプライン内に複数の(内部)ステージを有することができる。クロック信号を使用するよりも、パイプライン内のステージは、ハンドシェイクプロトコルを使用してデータを転送することができる。たとえば、図2の左上のCLEs202Aが、右下のCLEs202Fに転送されるべきデータを有する場合、相互接続タイル204A、B、C、およびFは、データを転送するためのパイプラインを形成することができる。すなわち、第1のデータチャンクがCLEs202Aから相互接続タイル204Aに転送される。ハンドシェイクプロトコルを使用して、相互接続タイル204Aは、第1のデータチャンクを相互接続タイル204Bに転送する。並行して、CLEs202Aは、第2のデータチャンクを相互接続タイル204Aに転送することができる。再度、ハンドシェイクプロトコルを使用して、相互接続タイル204Bは、第1のデータチャンクを相互接続タイル204Cに転送することができる一方で、相互接続タイル204Aは、第2のデータチャンクを相互接続タイル204Bに転送し、CLEs202Aは、第3のデータチャンクを相互接続タイル204Aに転送する。次いで、第1のデータチャンクを相互接続タイル204Cから相互接続タイル204Fに転送することができる一方で、第2および第3のデータチャンクもパイプライン内で前進し、CLEs202Aは第4のデータチャンクを相互接続タイル204Aに転送する。次いで、第1のデータチャンクはCLEs202Fに転送される。このようにして、複数のチャンクは、相互接続タイル204を使用して形成されたパイプラインのステージを通って伝搬することができる。さらに、データの転送は非同期であり、共有クロックに依拠せず、むしろステージがデータを転送する準備ができているときを示すハンドシェイク信号に依拠する。さらに、この例は、以下で説明するように、相互接続タイル204をステージとして使用することを説明しているが、相互接続タイル204自体は、パイプラインの複数の内部ステージを形成することができる。
図3は、一例に従う相互接続タイル204を示すブロック図である。この例では、相互接続タイル204は、北、東、南、および西に隣接する相互接続タイル204のそれぞれに対する単一接続302N、302E、302S、および302Wを含む。相互接続タイル204は、北、東、南、および西に隣接しない相互接続タイル204のそれぞれに対する二重接続304N、304E、304S、および304Wを含む。相互接続タイル204は、それぞれのCLEへのCLE接続306を含む。図3に示す相互接続タイル204は、非エッジの場合のものである。当業者は、エッジにおいていくつかの方向にさらなるタイルがなくてもよいため、エッジ上の相互接続タイルは、N、E、S、およびW接続の全てより少ない接続を持つことを理解するであろう。
図4は、一例に従う相互接続タイル204を実装するための非ブロッキングクロスバー400を示すブロック図である。すなわち、非ブロッキングクロスバー400は、図2および図3の相互接続タイル204を実装するために使用され得る回路の一実装形態である。一実施形態では、クロスバー400は「非ブロッキング」であり、その理由は、左側のバス上で同時に受信される信号の任意のセットを、(衝突することなく)右側のバスに首尾よくルーティングすることができるからである。すなわち、クロスバー400は、クロスバー400を通して首尾よくルーティングすることができる信号の任意のセットを同時に受信することができるが、クロスバー400は、非ブロッキングソリューションに到達するために信号をルーティングする方法を再配置しなければならない場合がある。
非ブロッキングクロスバー400は、ローカルクロスバー402~430(スイッチボックスとも称され得る)から形成される。この例では、単一接続206に対しては両方向の2つのバスを想定し、二重接続208に対しては両方向の2つのバスを想定する。そのような場合、各方向に対してN、S、E、およびW方向の各々から来る4つのバスがある。特に、南から2つのバスS1および2つのバスS2があり、北から2つのバスN1および2つのバスN2があり、東から2つのバスE1および2つのバスE2があり、西から2つのバスW1および2つのバスW2がある。また、この例では、CLEへの3つの入力バス(In)と、CLEからの2つの出力バス(Out)がある。さらに、本例では、積層されたダイ層間の通信をサポートするために、Z方向における上下に1つの4ビットバスが存在する。ローカルクロスバー402~430は、非ブロッキングクロスバーとして機能するように接続される。非ブロッキングクロスバーは、ソフトウェアツールが、デバイスのモデルを単純化することによってランタイムを大幅に低減すること可能にする。ソフトウェアツールがランタイムを減らすことができる1つの理由は、さらなるグローバルスケールで演算するソフトウェアアルゴリズムが、ローカルルーティング問題が解決可能であり、ローカルレベルでの詳細な接続について心配する必要がないと仮定できることである。言い換えれば、詳細を抽象化することができ、ローカルルーティング問題の全てを後の段階で並行して迅速に解決することができる。ビルディングブロックとしてより小さいローカルクロスバーを使用することは、アクノレッジハンドシェイク回路をローカルに効率的に実装することを可能とし、(後述する)プログラマブル相互接続におけるファンアウトを可能とする。
ある例では、ローカルクロスバー402~430間の接続の数は、完全な非ブロッキングクロスバー実装において通常存在する数に対して低減される。すなわち、完全な非ブロッキングクロスバーは、信号が逆転し、そこから来た方向に進行することを可能にする接続を含むであろう。たとえば、信号が南方向から到着した場合、完全な非ブロッキングクロスバーは、その信号を南方向に戻してルーティングすることができる。しかしながら、フルクロスバーに基づくルーティングネットワークの場合、信号が方向を逆転させるべき理由はなく、したがって、図4に示される非ブロッキングクロスバー400は、信号の方向を逆転させるための回路を有さない。すなわち、不必要に進行方向を反転させる接続は省略している。
これは、クロスバーの非ブロッキング性を維持しながら、非ブロッキングクロスバー400の実装コストを約20%削減する。方向を反転させるための回路を除去することの効果は、ローカルクロスバー402が4つの入力(南方向に2つのバス)を受け取り、中央の列への4つの出力のみを有する左の列において見ることができる。とりわけ、クロスバー402は(クロスバーが、南方向に延在するバスに結合されるローカルクロスバー402および430に対して接続しないことを示す、~SすなわちSOUTHではない、とラベル付けされている)ローカルクロスバー420に接続しない。(すなわち、ローカルクロスバー412,414,416,および418である)中央の列内の他の4つのクロスバーを使用して、ローカルクロスバー402は、N、E、およびW方向にデータを転送することができる。同様に、東方向に延在するバスに結合されるローカルクロスバー404および424は、(~Eとラベル付けされている)ローカルクロスバー418に接続されず、西方向に延在するバスに結合されるローカルクロスバー408および428は、(~Wとラベル付けされている)ローカルクロスバー414に接続されない。そして、北方向に延びるローカルバスに接続されたローカルクロスバー410および422は、(~Nとラベル付けされている)ローカルクロスバー412に接続されていない。これは、関連する方向におけるクロスバー400の非ブロッキング態様を依然として維持しながら回路の複雑さを低減し、たとえば、南バウンド信号をN、E、およびWにルーティングされることができ、北バウンド信号をE、W、およびSにルーティングされることができ、東バウンド信号をN、W、およびSにルーティングされることができる。そして、西バウンド信号は、N、S、およびEにルーティングされることができる。
この例では、ローカルクロスバー402は、一方の側でS1およびS2に結合され、他方の側でローカルクロスバー412,414,416,および418の各々に結合される。ローカルクロスバー404は、一方の側でE1およびE2に結合され、他方の側でローカルクロスバー412,414,416,および420の各々に結合される。ローカルクロスバー408は、一方の側でW1およびW2を受け取るために結合され、他方の側でローカルクロスバー412,416,418,および420の各々に結合される。ローカルクロスバー402は、一方の側でN1およびN2を受け取るために結合され、他方の側でローカルクロスバー414,416,418,および420の各々に結合される。ローカルクロスバー402,404,408,および410の各々は、4×5クロスバーではなく4×4クロスバーであり、その理由は、上述のように方向を反転可能である必要がないからである。
この例では、ローカルクロスバー430は、一方の側でS1およびS2に結合され、他方の側でローカルクロスバー412,414,416,および418の各々に結合される。ローカルクロスバー424は、一方の側でE1およびE2に結合され、他方の側でローカルクロスバー412,414,416,および420の各々に結合される。ローカルクロスバー428は、一方の側でW1およびW2を受け取るために結合され、他方の側でローカルクロスバー412,416,418,および420の各々に結合される。ローカルクロスバー422は、一方の側でN1およびN2を受け取るために結合され、他方の側でローカルクロスバー414,416,418,および420の各々に結合される。ローカルクロスバー422,424,428,および430の各々は、4×4クロスバーである。
ローカルクロスバー406は、一方の側でOutおよびZに結合され、他方の側でローカルクロスバー412~420の各々に結合される。この例では、ローカルクロスバー406は、4×4クロスバーではなく4×5クロスバーであり、(CLEに接続される)Out信号が逆方向になり、(同様にCLEに接続される)In信号を使用してCLEにフィードバック可能であるようにする。しかしながら、CLEからのデータが方向を逆転させる必要がない場合、ローカルクロスバー406は、4×4クロスバーであり得る。ローカルクロスバー426は、一方の側でInおよびZに結合され、他方の側でローカルクロスバー412~420の各々に結合される。Zバスは、プログラマブルデバイス(たとえば、集積回路)が他の集積回路上の他のプログラマブルデバイスと積層される場合に使用される。すなわち、Zバスは、第1のプログラマブルデバイス内の相互接続タイルが第2のプログラマブルデバイス内の相互接続タイルと通信することを可能にする(X方向およびY方向に延びる北方向、東方向、南方向および西方向ではないZ方向において)。しかしながら、プログラマブルデバイスが他のプログラマブルデバイスと積み重ねられていない(たとえば、繋がれていない)場合、Zバスは省略されてもよい。この例では、ローカルクロスバー426は5×5クロスバーである。ローカルクロスバー412,414,418,および420の各々は、4×4クロスバーである。ローカルクロスバー416は、5×5クロスバーである。
加えて、ローカルクロスバーの回路は、同一のワイヤ間を選択するため柔軟性を排除することによって、さらに低減することができる。図4では、バスの各方向をサービスする4×4のスイッチボックスが、第1の列および最後の列に存在する。たとえば、長さ1の東バスが2つあるので、ルーティングは、これらの2つの同一のバスのうちのどれが所与のルーティングされた信号によって使用されるかについて構わない。その結果、ローカルクロスバーは、ローカルクロスバーを通して信号の全ての組み合わせをルーティングするように構成され得るが、これらの信号は、全ての出力ピン置換ではなく、任意の出力ピンにのみルーティングされる。一実施形態では、4×4スイッチボックスは、このビットの柔軟性を除去するために、第1の列または最後の列(両方ではない)のいずれかで2つの2×2スイッチボックスに縮小することができる。
図5は、一例に従うローカルクロスバー500を示すブロック図である。ローカルクロスバー500は、2×2のクロスバーであるが、図4に示す4×5、5×4、および5×5のローカルクロスバーは、同様の構造を有することができる。ローカルクロスバー500は、ローカルクロスバー500の入力と出力との間の非同期通信を提供するハンドシェイク回路502を含む。非同期通信は、一般に、確認応答のためのデータ信号および制御信号を含む。図示のように、ハンドシェイク回路502は、データパス505内のデータ信号A、B、X、およびYに対する確認応答信号(すなわち、Aack、Back、XackおよびYackである)を含む。一実施形態では、A信号およびB信号はローカルクロスバー500への入力であり得るが、X信号およびY信号は出力である。たとえば、A信号は、ローカルクロスバー500において受信される第1のバスにおける第1のビットであり得る一方で、B信号は、ローカルクロスバー500において受信される第2のバスにおける第1のビットであり得る。図示されていないが、ローカルクロスバー500は、2つのバスの幅に応じてデータパス505の複数のコピーを有することができる。たとえば、2つのバスが4ビットバスである場合、ローカルクロスバーは、データパス505の4つのコピーを有し、1つのコピーは、バス内の各ビットである。
ハンドシェイク回路502は、1つの信号が複数の入力に「ファンアウト」することができるファンアウトを可能にする。たとえば、A信号は、X出力、Y出力、またはXおよびY出力の両方で出力することができる。A信号がX出力とY出力の両方で同時に出力され得るように、A信号がファンアウトすることを可能にすることは、Aで入力されたデータがX出力とY出力の両方で受信されたことをハンドシェイク回路502が判定することを必要とする。そうするために、ハンドシェイク回路502は、入力信号が複数の出力信号にファンアウトするときに非同期ハンドシェイクを可能にするためのC要素および多重化を含み得る。図4のローカルクロスバーを参照すると、これらのクロスバー内のハンドシェイク回路は、入力のうちの1つが出力のうちのいくつかまたは全てに同時にファンアウトすることを可能にする(たとえば、ローカルクロスバーにおける出力の数に応じて、出力のうちの2つ、3つ、4つ、または5つである)。一実施形態では、これらの小さなローカルクロスバーにおけるファンアウトは非常に局所化され、ローカル回路が図5の例に示すように確認応答信号を容易に実装することを可能にする。ファンアウトが局在化されていない(たとえば、互いに遠く離れた回路に延在する)場合、確認応答を生成することは、多くのワイヤがファンアウト位置の各々から戻る必要があるため、非常に高価であり、非実用的であり得る。したがって、ローカルクロスバーにおけるファンアウトの局所化は、装置の性能およびコストを改善する。
一実施形態では、図5に示すローカルクロスバーにおいて、X_select_A、Y_select_A、X_select_B、Y_select_Bは全て、一般的なFPGAルーティングアーキテクチャと整合する構成メモリセルからの信号である。言い換えれば、どの信号をマルチプレクサを通してルーティングするかの選択は、連続的に動的ではなく、むしろメモリセル値に依存する。
ある例では、CLEは、CまたはC++などの高水準プログラミング言語の中間プリミティブをサポートするように設計されたビルディングブロックのセットを実装する。これは、ハードウェア記述言語(HDL:Hardware Description Language)を使用して記述されるランダムロジックをサポートするためのルックアップテーブル(LUT:Lookup Tables)およびフリップフロップを有する従来のFPGAと対照的である。すなわち、現在のソリューションは、プログラミング言語のコンパイルされたソースコードを相互接続されたLUTおよびフリップフロップに変換するが、これは、これらの回路を使用して、ソースコードで表現することもできる本質的に任意の論理構成を表現することができるからである。しかしながら、LUTおよびフリップフロップを含むプログラマブルロジックのための設計にソースコードを合成することは、大量の時間を必要とする。さらに、合成プロセスは、ルーティング制約およびタイミング問題を考慮することを必要とする。さらに、ローカルクロスバー内の記憶素子は、たとえば、2相または4相ハンドシェイクのいずれが使用されるかに応じて、エッジ感知ラッチまたはレベル感知ラッチのいずれかであり得る。両方とも可能であり、内部ハンドシェイク論理に対する対応する変更を用いて実装することができる。
以下の実施形態は、中間プリミティブを使用して、ソースコードを、非同期ネットワーク(たとえば、上記で説明した相互接続タイル)を使用して相互接続されるCLEにマッピングすることについて論じる。そうすることは、ソースコードをレジスタ転送レベル(RTL:Register Transfer Level)コードに変換する従来の方法と比較して、時間を節約し、リソースを計算することができ、これは、それからプログラマブルロジック内のLUTおよびフリップフロップを構成するために使用される。
図6は、本明細書で説明する一実施形態による、中間プリミティブを使用してプログラマブルロジックを構成するための方法600のフローチャートである。ブロック605において、コンパイラは、ソースコードをフロー制御グラフに変換する。すなわち、コンパイラは、高水準プログラミング言語(たとえば、C、C++などである)を使用して開発されたソースコードをフロー制御グラフにマッピングする。本明細書の実施形態は、ソースコードをフロー制御グラフに変換するためのいかなる特定の技法にも限定されない。
一実施形態では、フロー制御グラフは、ソースコード内の演算によって定義されるようなデータがどのように流れるかを表す。たとえば、フロー制御グラフは、演算間にデータ依存性があるかどうか、または演算が互いに独立しているかどうかを示すことができる。独立した演算は、フロー制御グラフにおいて並列に実行することができる。対照的に、ある演算の出力が別の演算の入力に影響を与え得るので、従属する演算は、チェーンで接続され得る。
典型的には、プログラマブルロジックを使用してソースコードを実装するとき、シンセサイザは、フロー制御グラフをRTLに変換し、RTLは、プログラマブルロジック内のLUTおよびフリップフロップにマッピングされる。しかしながら、上述のように、これは、タイミング制約、ルーティングおよび配置などの合成プロセスに多くの複雑さをもたらす。
フロー制御グラフをRTLに変換する代わりに、ブロック610において、シンセサイザは、フロー制御グラフを、中間プリミティブの事前定義されたグループを使用して形成されたプリミティブグラフに変換する。すなわち、シンセサイザは、ソースコード(およびフロー制御グラフ)における演算を事前定義された中間プリミティブに直接マッピングすることができる。たとえば、ソースコードにおいて表現され得る演算のタイプごとに中間プリミティブがあり得る。
図7A~図7Dは、一例に従う異なる中間プリミティブを示すブロック図である。図7Aは、3つの入力、2つの出力のLUTによって形成される中間プリミティブを示す。LUTの柔軟性により、それらは多くの異なるソースコード演算を実行することができる。言い換えれば、ソースコードを使用して定義され得る多くの異なる演算は、任意のバイナリ演算(たとえば、ビットごとのOR、AND、NOTなど、またはビットシフト演算)など、LUTを使用してハードウェアで実装され得る。さらに、図7Aのプリミティブは2つの入力/2つの出力のLUTであり得るが、3つの入力/2つの出力のLUTは、2つの入力/2つの出力のLUTに関連する少量の回路のみを追加することと並行して2つのバイナリ演算を実行することができる。
図7Bは、加算演算、乗算演算、または比較演算(すなわち、加算演算、減算演算、および乗算演算である)を実行するための中間プリミティブを示す。すなわち、この中間プリミティブは、ソースコードおよびフロー制御グラフにおいて定義される追加、乗算、または比較演算にマッピングすることができる。
図7Cは、ソースコードにおける「if」、「while」、および「for」演算(またはステートメント)に対応することができるフロー制御を実行するためのフロー制御プリミティブを示す。たとえば、「if」演算の場合、図7Cのプリミティブは、入力のAとBとを比較し、AとBとが等しいか否かを示すビット(0または1)を出力することができる。この出力は、その入力のうちのどれが出力されるかを選択するためのCNTRL信号として別のフロー制御プリミティブに供給され得る。さらに、図7Cのフロー制御プリミティブは、トークン管理およびハンドシェイクを使用して、ソースコード演算を実行することができる。このようにして、if演算は、フロー制御プリミティブのうちの2つ(またはそれ以上)にマッピングされ得る。「while」または「for」演算などのループ演算は、同様の方法でマッピングすることができる(しかし、ソースコード演算にマッピングされるフロー制御プリミティブの数は変化し得る)。
図7Dは、マルチシフト演算を実行するための中間プリミティブを示す。一実施形態では、CLEs202は、シフトが2のべき乗で乗算されるので、乗算ブロックを含むことができ、シフターとしても使用することができる。シフトを目的としてこのブロックを再使用することは、シフトが共通の演算ではないと仮定すると、より効率的であり得る。シフトが非常に共通のプリミティブであることが判明した場合、CLEs202は、乗算器を使用するよりも効率的にシフトを行う別個のシフトブロックを有し得る。たとえば、複数のブロックを使用するとき、シフト値をその2のべき乗に変換するための論理の余分なビットがある。
図7A~図7Dに示す中間プリミティブは、ソースコード演算に定義およびマッピングされ得るプリミティブの例のいくつかにすぎない。一実施形態では、各ソースコード演算は、1つ(または複数のプリミティブ)にマッピングされ得る。たとえば、ソースコードにおいて定義されたif演算またはループ演算を実行するために、いくつかのフロー制御プリミティブを必要とし得る。しかしながら、別の実施形態では、いくつかのソースコード演算は、事前定義されたプリミティブを有さなくてもよく、またはいくつかの演算は、同じタイプのプリミティブにマッピングされてもよい(たとえば、ソースコードにおける乗算およびシフト演算は、両方とも乗算プリミティブにマッピングすることができる)。さらに、プリミティブにマッピングすることができないソースコード演算があり得る。その場合、フロー制御グラフの対応する部分は、以前の技法(たとえば、中間プリミティブにマッピングされるのではなく、RTLに変換される)を使用してプログラマブルロジックに合成され得る。
一実施形態では、シンセサイザは、事前定義されたプリミティブにマッピングすることができるフロー制御グラフ内のソースコード演算を識別する。上述のように、(ソースコードにおいて、「if」および「while」ステートメントの場合、)1つの演算が複数のプリミティブにマッピングされるようにしてもよい。これらのプリミティブは、フロー制御グラフの各種信号が接続されているように、プリミティブグラフを形成するため、相互接続されることができる。これにより、プリミティブグラフは、フロー制御およびソースコードと同じ論理を表現できる。
方法600に戻ると、ブロック615においてシンセサイザは、プログラマブルロジックにおけるCLEに、プリミティブグラフにおける中間プリミティブをマッピングする。たとえば、図7A~図7Dの各中間プリミティブは、図2に示すCLEs202の1つに直接的にマッピングされ得る。すなわち、CLEs202は、1つのプリミティブによって定義された機能を実行するために構成される。一実施形態では、CLEs202(たとえば、回路タイル)は、異なる機能を実行する回路を含む。一実施形態では、CLEs202は、少なくとも1つの乗算器および、LUT、制御フロー、加算/減算/比較などの少なくとも1つの他の論理関数を実行するための回路を含む。プリミティブは、論理機能のうちのどれがCLEs202において選択されるかをプログラム的に決定する。したがって、CLEs202は、固定論理機能を有する(すなわち、ブロックによって実行される論理機能が選択可能でない)固定ブロックとは異なる。
中間プリミティブを使用してCLEを直接構成することは、RTLを生成し、次いでプログラマブルロジック内の様々な位置にRTLを配置する必要性を回避する。代わりに、中間プリミティブは、CLEのうちの1つにマッピングするように設計される。上述のように、1つの演算は複数のプリミティブにマッピングすることができ、その場合、その演算は複数のCLEを使用して実行することができる。
一実施形態では、ICは、図2に示すようにCLEのアレイを含む。これらのCLEは、相互接続タイル204およびプログラマブル接続210(たとえば、プログラマブル相互接続)によって通信可能に接続される。すなわち、ラインは、相互接続タイル204間、および、タイル204とCLEs202との間に延在する。
ブロック620において、シンセサイザは、プリミティブグラフ内のデータの流れに従ってCLEを接続する。すなわち、選択されたCLEは、上の図に示された非同期相互接続タイルを使用して接続され得る。たとえば、フロー制御グラフが32ビット加算演算を含む場合、この演算は、これらのプリミティブが8ビットバスを有すると仮定して、(たとえば、図7Bに示されるように)4つの加算プリミティブに分割され得る。これらの4つのプリミティブは、プログラマブルロジック内の4つのCLEにマッピングされ得、相互接続タイルは、32ビット加算演算を実行するためにCLE(たとえば、キャリーラインおよび中間和)間でデータを転送するように構成され得る。相互接続タイルは非同期であるため、シンセサイザは、CLEを選択し、CLE間でデータを転送するように相互接続タイルを構成するときに、タイミング制約および異なるクロックドメインを考慮する必要がない。
開示される技術は、いくつかの非限定的な例において表現され得る。
[例1]
集積回路であって、
データ演算を実行するように構成された回路を備える回路タイルのアレイと、
アレイ内の回路タイルを結合する相互接続とを備え、相互接続は、複数の接続を各々が有する相互接続タイルを含み、複数の接続は、少なくとも回路タイルのそれぞれの1つへの第1の接続と、複数の他の相互接続タイルへの複数の接続とを含み、
集積回路は、
前記相互接続タイルの各々における複数のローカルクロスバーを備え、複数のローカルクロスバーは、非ブロッキングクロスバーを形成するように結合された、集積回路。
[例2]
各々の相互接続タイルの複数の接続は、北、東、南、および西の相互接続タイルへの北、東、南、および西のそれぞれの接続を含む、例1に記載の集積回路。
[例3]
各々の相互接続タイルの複数の接続は、隣接する相互接続タイルへの接続と、隣接しない相互接続タイルへの接続とを含む、例1に記載の集積回路。
[例4]
複数のローカルクロスバーは、非ブロッキングクロスバーを通る方向を逆転させる接続を除去するように構成される、例1に記載の集積回路。
[例5]
前記複数のローカルクロスバーは、前記ローカルクロスバーを通して信号の全ての組み合わせを、全ての出力ピン置換ではなく任意の出力ピンにのみルーティングするように構成される、例1に記載の集積回路。
[例6]
複数のローカルクロスバーの各々は、ローカルクロスバーの入力とローカルクロスバーの出力との間の非同期通信のためのハンドシェイク回路を備える、例1に記載の集積回路。
[例7]
ハンドシェイク回路は、1つの入力信号がローカルクロスバーの複数の出力に同時に出力され得る複数のローカルクロスバーの各々におけるファンアウトを可能にする、例6に記載の集積回路。
[例8]
回路タイルのアレイは、集積回路のプログラマブルロジックを含む、例1に記載の集積回路。
[例9]
回路タイルのアレイおよび相互接続をプログラムするように構成されている構成メモリをさらに備える、例1に記載の集積回路。
[例10]
集積回路であって、
データ演算を実行するように構成された回路を備える回路タイルのアレイと、
アレイ内の回路タイルを結合する相互接続とを備え、相互接続は、複数の接続を各々が有する相互接続タイルを含み、複数の接続は、少なくとも回路タイルのそれぞれの1つへの第1の接続と、複数の他の相互接続タイルへの複数の接続とを含み、相互接続タイルは、複数のバスを使用して互いに接続され、相互接続タイルの各々は、非同期通信のためのハンドシェイク回路を備える、集積回路。
[例11]
方法であって、
プログラマブル相互接続および複数の相互接続タイルを使用して通信可能に結合された複数の回路タイルのアレイを備える集積回路において実装されるソースコードを受信することと、
ソースコードをフロー制御グラフに変換することと、
フロー制御グラフを、複数の事前定義されたプリミティブを備えるプリミティブグラフに変換することとを含み、事前定義されたプリミティブの各々は、フロー制御グラフにおいて定義された演算の少なくとも一部を実行するための回路を含み、
方法は、
プリミティブグラフにおける事前定義されたプリミティブを複数の回路タイルにマッピングすることをさらに含み、複数の回路タイルは各々、少なくとも乗算器と、プログラム的に選択され得る1つの追加の論理機能を実行するための回路とを備え、
方法は、
複数の相互接続タイルを用いて複数の回路タイルを接続することにより、集積回路におけるソースコードに実装することを含む、方法。
[例12]
フロー制御グラフをプリミティブグラフに変換することは、フロー制御グラフにおいて定義された演算を事前定義されたプリミティブにそれぞれマッピングすること、および
事前定義されたプリミティブを接続することを含む、例11に記載の方法。
[例13]
プリミティブグラフにおける事前定義されたプリミティブは、1対1の方法で複数の回路タイルにマッピングされる、例11に記載の方法。
[例14]
複数の回路タイルの各々は、複数の事前定義されたプリミティブのいずれか1つを実装するように構成可能なプログラマブルロジックを含む、例11に記載の方法。
[例15]
複数の相互接続タイルは各々、複数の回路タイルのそれぞれ1つへの少なくとも第1の接続と、複数の他の相互接続タイルへの複数の接続とを含む複数の接続を有する、例11に記載の方法。
[例16]
複数の相互接続タイルは、非同期通信を使用してデータを転送する、例15に記載の方法。
[例17]
事前定義されたプリミティブは、ソースコード内の演算にマッピングする、例11に記載の方法。
[例18]
ソースコードにおける演算は、加算演算、減算演算、および乗算演算のうちの少なくとも1つを備える、例17に記載の方法。
[例19]
ソースコードにおける演算は、ifステートメントおよびwhenステートメントのうちの少なくとも1つを含む、例17に記載の方法。
[例20]
ソースコードにおけるifステートメントまたはwhileステートメントの単一のインスタンスは、複数の回路タイルのうちの複数の回路タイルにマッピングされる複数の事前定義されたプリミティブに変換される、例19に記載の方法。
前述は、具体的実施例を対象とするが、その基本的範囲から逸脱することなく、他のおよびさらなる実施例が考案されてもよく、その範囲は、以下の請求項によって決定される。

Claims (14)

  1. 集積回路であって、
    データ演算を実行するように構成された回路を備える回路タイルのアレイと、
    前記アレイ内の前記回路タイルを結合する相互接続とを備え、
    前記相互接続は、複数の接続を各々が有する相互接続タイルを含み、前記複数の接続は、少なくとも前記回路タイルのそれぞれの1つへの第1の接続と、複数の他の相互接続タイルへの複数の接続とを含み、
    前記集積回路は、
    前記相互接続タイルの各々における複数のローカルクロスバーをさらに備え、前記複数のローカルクロスバーは、非ブロッキングクロスバーを形成するように結合された、集積回路。
  2. 各々の相互接続タイルの前記複数の接続は、北、東、南、および西の相互接続タイルへの北、東、南、および西のそれぞれの接続を含む、請求項1に記載の集積回路。
  3. 各々の相互接続タイルの前記複数の接続は、隣接する相互接続タイルへの接続と、隣接しない相互接続タイルへの接続とを含む、請求項1に記載の集積回路。
  4. 前記複数のローカルクロスバーは、前記非ブロッキングクロスバーを通る方向を逆転させる接続を除去するように構成される、請求項1に記載の集積回路。
  5. 前記複数のローカルクロスバーは、前記ローカルクロスバーを通して信号の全ての組み合わせを、全ての出力ピン置換ではなく任意の出力ピンにのみルーティングするように構成される、請求項1に記載の集積回路。
  6. 前記複数のローカルクロスバーの各々は、前記ローカルクロスバーの入力と前記ローカルクロスバーの出力との間の非同期通信のためのハンドシェイク回路を備える、請求項1に記載の集積回路。
  7. 前記ハンドシェイク回路は、1つの入力信号がローカルクロスバーの複数の出力に同時に出力され得る前記複数のローカルクロスバーの各々におけるファンアウトを可能にする、請求項6に記載の集積回路。
  8. 回路タイルの前記アレイは、前記集積回路のプログラマブルロジックを含む、請求項1に記載の集積回路。
  9. 回路タイルの前記アレイおよび前記相互接続をプログラムするように構成されている構成メモリをさらに備える、請求項1に記載の集積回路。
  10. 集積回路であって、
    データ演算を実行するように構成された回路を備える回路タイルのアレイと、
    前記アレイ内の前記回路タイルを結合する相互接続とを備え、
    前記相互接続は、複数の接続を各々が有する相互接続タイルを含み、前記複数の接続は、少なくとも前記回路タイルのそれぞれの1つへの第1の接続と、複数の他の相互接続タイルへの複数の接続とを含み、
    前記相互接続タイルは、複数のバスを使用して互いに接続され、
    前記相互接続タイルの各々は、非同期通信のためのハンドシェイク回路を備える、集積回路。
  11. 方法であって、
    プログラマブル相互接続および複数の相互接続タイルを使用して通信可能に結合された複数の回路タイルのアレイを備える集積回路において実装されるソースコードを受信することと、
    前記ソースコードをフロー制御グラフに変換することと、
    前記フロー制御グラフを、複数の事前定義されたプリミティブを備えるプリミティブグラフに変換することとを含み、
    前記事前定義されたプリミティブの各々は、前記フロー制御グラフにおいて定義された演算の少なくとも一部を実行するための回路を含み、
    前記方法は、
    前記プリミティブグラフにおける前記事前定義されたプリミティブを前記複数の回路タイルにマッピングすることをさらに含み、
    前記複数の回路タイルは各々、少なくとも乗算器と、プログラム的に選択され得る1つの追加の論理機能を実行するための回路とを備え、
    前記方法は、
    前記複数の相互接続タイルを用いて前記複数の回路タイルを接続することにより、前記集積回路における前記ソースコードに実装することを含む、方法。
  12. 前記フロー制御グラフを前記プリミティブグラフに変換することは、
    前記フロー制御グラフにおいて定義された演算を事前定義されたプリミティブにそれぞれマッピングすること、および
    前記事前定義されたプリミティブを接続することを含む、請求項11に記載の方法。
  13. 前記プリミティブグラフにおける前記事前定義されたプリミティブは、1対1の方法で前記複数の回路タイルにマッピングされる、請求項11に記載の方法。
  14. 前記複数の回路タイルの各々は、前記複数の事前定義されたプリミティブのいずれか1つを実装するように構成可能なプログラマブルロジックを含む、請求項11に記載の方法。
JP2022564306A 2020-04-23 2021-04-22 計算データフローアーキテクチャ Pending JP2023523587A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/857,090 US11451230B2 (en) 2020-04-23 2020-04-23 Compute dataflow architecture
US16/857,090 2020-04-23
PCT/US2021/028656 WO2021216882A2 (en) 2020-04-23 2021-04-22 Compute dataflow architecture

Publications (1)

Publication Number Publication Date
JP2023523587A true JP2023523587A (ja) 2023-06-06

Family

ID=75905031

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022564306A Pending JP2023523587A (ja) 2020-04-23 2021-04-22 計算データフローアーキテクチャ

Country Status (6)

Country Link
US (2) US11451230B2 (ja)
EP (1) EP4140038A2 (ja)
JP (1) JP2023523587A (ja)
KR (1) KR20230002937A (ja)
CN (1) CN115428341A (ja)
WO (1) WO2021216882A2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11429358B2 (en) * 2020-08-12 2022-08-30 Microsoft Technology Licensing, Llc Representing asynchronous state machine in intermediate code
US11435989B2 (en) 2020-08-25 2022-09-06 Microsoft Technology Licensing, Llc Thread-local return structure for asynchronous state machine
US20230376437A1 (en) * 2022-05-17 2023-11-23 Xilinx, Inc. Data processing array interface having interface tiles with multiple direct memory access circuits

Family Cites Families (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5396491A (en) * 1988-10-14 1995-03-07 Network Equipment Technologies, Inc. Self-routing switching element and fast packet switch
US5815726A (en) * 1994-11-04 1998-09-29 Altera Corporation Coarse-grained look-up table architecture
US6191612B1 (en) 1998-11-19 2001-02-20 Vantis Corporation Enhanced I/O control flexibility for generating control signals
US7504851B2 (en) 2006-04-27 2009-03-17 Achronix Semiconductor Corporation Fault tolerant asynchronous circuits
US7610567B2 (en) 2006-04-27 2009-10-27 Achronix Semiconductor Corporation Systems and methods for performing automated conversion of representations of synchronous circuit designs to and from representations of asynchronous circuit designs
US7614029B2 (en) 2007-01-05 2009-11-03 Achronix Semiconductor Corporation Methods and systems for converting a synchronous circuit fabric into an asynchronous dataflow circuit fabric
US7739628B2 (en) 2008-02-15 2010-06-15 Achronix Semiconductor Corporation Synchronous to asynchronous logic conversion
US8185720B1 (en) 2008-03-05 2012-05-22 Xilinx, Inc. Processor block ASIC core for embedding in an integrated circuit
US7948265B1 (en) 2009-04-02 2011-05-24 Xilinx, Inc. Circuits for replicating self-timed logic
US7746112B1 (en) 2009-04-02 2010-06-29 Xilinx, Inc. Output structure with cascaded control signals for logic blocks in integrated circuits, and methods of using the same
US9002915B1 (en) 2009-04-02 2015-04-07 Xilinx, Inc. Circuits for shifting bussed data
US7746108B1 (en) 2009-04-02 2010-06-29 Xilinx, Inc. Compute-centric architecture for integrated circuits
US7746105B1 (en) 2009-04-02 2010-06-29 Xilinx, Inc. Merging data streams in a self-timed programmable integrated circuit
US9411554B1 (en) 2009-04-02 2016-08-09 Xilinx, Inc. Signed multiplier circuit utilizing a uniform array of logic blocks
US7746110B1 (en) 2009-04-02 2010-06-29 Xilinx, Inc. Circuits for fanning out data in a programmable self-timed integrated circuit
US7746106B1 (en) 2009-04-02 2010-06-29 Xilinx, Inc. Circuits for enabling feedback paths in a self-timed integrated circuit
US7746109B1 (en) 2009-04-02 2010-06-29 Xilinx, Inc. Circuits for sharing self-timed logic
US7746103B1 (en) 2009-04-02 2010-06-29 Xilinx, Inc. Multi-mode circuit in a self-timed integrated circuit
US7746111B1 (en) 2009-04-02 2010-06-29 Xilinx, Inc. Gating logic circuits in a self-timed integrated circuit
US7746104B1 (en) 2009-04-02 2010-06-29 Xilinx, Inc. Dynamically controlled output multiplexer circuits in a programmable integrated circuit
US8527572B1 (en) 2009-04-02 2013-09-03 Xilinx, Inc. Multiplier architecture utilizing a uniform array of logic blocks, and methods of using the same
US7733123B1 (en) 2009-04-02 2010-06-08 Xilinx, Inc. Implementing conditional statements in self-timed logic circuits
US7746102B1 (en) 2009-04-02 2010-06-29 Xilinx, Inc. Bus-based logic blocks for self-timed integrated circuits
US8964795B2 (en) * 2009-06-01 2015-02-24 Achronix Semiconductor Corporation Asynchronous pipelined interconnect architecture with fanout support
US8191019B2 (en) 2009-07-17 2012-05-29 Achronix Semiconductor Corporation Non-predicated to predicated conversion of asynchronous representations
US8300635B2 (en) * 2009-09-10 2012-10-30 Achronix Semiconductor Corporation Programmable crossbar structures in asynchronous systems
US8301933B2 (en) 2009-09-14 2012-10-30 Achronix Semiconductor Corporation Multi-clock asynchronous logic circuits
US7900078B1 (en) 2009-09-14 2011-03-01 Achronix Semiconductor Corporation Asynchronous conversion circuitry apparatus, systems, and methods
US7982502B2 (en) 2009-09-15 2011-07-19 Achronix Semiconductor Corporation Asynchronous circuit representation of synchronous circuit with asynchronous inputs
US8766666B2 (en) * 2010-06-10 2014-07-01 Micron Technology, Inc. Programmable device, hierarchical parallel machines, and methods for providing state information
US8773164B1 (en) 2012-11-01 2014-07-08 Xilinx, Inc. Programmable interconnect network
US8773166B1 (en) 2012-11-01 2014-07-08 Xilinx, Inc. Self-timed single track circuit
US9509307B1 (en) 2014-09-22 2016-11-29 Xilinx, Inc. Interconnect multiplexers and methods of reducing contention currents in an interconnect multiplexer
US9438244B2 (en) 2014-10-28 2016-09-06 Xilinx, Inc. Circuits for and methods of controlling power within an integrated circuit
EP3259843B1 (en) * 2015-02-22 2022-03-02 Flex Logix Technologies, Inc. Mixed-radix and/or mixed-mode switch matrix architecture and integrated circuit, and method of operating same
US11113030B1 (en) * 2019-05-23 2021-09-07 Xilinx, Inc. Constraints for applications in a heterogeneous programming environment
US11159381B2 (en) * 2019-07-30 2021-10-26 Oracle International Corporation Verification of software-defined networking (SDN) policies for specific topologies

Also Published As

Publication number Publication date
US20210336622A1 (en) 2021-10-28
US20220368330A1 (en) 2022-11-17
EP4140038A2 (en) 2023-03-01
US11451230B2 (en) 2022-09-20
US11750195B2 (en) 2023-09-05
WO2021216882A2 (en) 2021-10-28
KR20230002937A (ko) 2023-01-05
CN115428341A (zh) 2022-12-02
WO2021216882A3 (en) 2021-12-16

Similar Documents

Publication Publication Date Title
US11677662B2 (en) FPGA-efficient directional two-dimensional router
JP2023523587A (ja) 計算データフローアーキテクチャ
JP5354427B2 (ja) 集積回路のための再構成可能論理ファブリックおよび再構成可能論理ファブリックを構成するためのシステムおよび方法
JP4971998B2 (ja) 半導体集積回路、プログラム変換装置及びマッピング装置
US11580056B2 (en) Control barrier network for reconfigurable data processors
WO2016191304A1 (en) Directional two-dimensional router and interconnection network for field programmable gate arrays, and other circuits, and applications of the router and network
US20190266088A1 (en) Backbone network-on-chip (noc) for field-programmable gate array (fpga)
US10374605B2 (en) Logical elements with switchable connections in a reconfigurable fabric
Royal et al. Globally asynchronous locally synchronous FPGA architectures
Pontes et al. Hermes-A–an asynchronous NoC router with distributed routing
Jia et al. A novel asynchronous FPGA architecture design and its performance evaluation
US9081901B2 (en) Means of control for reconfigurable computers
Essig et al. On-demand instantiation of co-processors on dynamically reconfigurable FPGAs
Venugopal et al. Efficient Router Architecture Design on FPGA for Torus based Network on Chip
Shan et al. The Buffered Edge Reconfigurable Cell Array and Its Applications
Kato et al. A study on interconnection networks of the Dynamically Reconfigurable Processor Array MuCCRA

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20240312