(57)【特許請求の範囲】
【請求項１】
プロセッサが実行する方法であって、
高位プログラミング言語記述の第１の関数と、前記高位プログラミング記述の制御フロー構文内に含有される第２の関数とを判断することと、
前記第２の関数が前記第１の関数のデータ消費関数であると判断することと、
回路設計内で、ローカルメモリを備えるポートを自動的に生成することとを備え、
前記ポートは、前記回路設計内で、前記第１の関数の第１の回路ブロック実現例を前記第２の関数の第２の回路ブロック実現例に結合し、さらに
非自己同期ポートとして、前記第１の回路ブロックと前記第２の回路ブロックとの間でハンドシェイクシグナリングを行なうことによって、前記回路設計内で、前記第２の回路ブロックの動作を制御する制御回路構成を自動的に生成することを備え、前記制御回路構成は、前記第２の回路ブロック実現例を制御する前記制御フロー構文を実現する、方法。
【請求項２】
制御回路構成を自動的に生成することは、前記制御フロー構文を実現する際に互いと通信するように構成される開始制御回路と終了制御回路とを生成することを備え、前記開始制御回路は、前記第１の回路ブロック実現例から前記制御フロー構文についての終了条件を受信しかつ前記終了制御回路に前記終了条件を与え、前記開始制御回路は前記第２の回路ブロック実現例の実行の開始をカウントし、前記終了制御回路は前記第２の回路ブロック実現例の実行の終了をカウントし、前記終了制御回路は、前記第２の回路ブロック実現例の回路ブロックコンシューマとのハンドシェイクシグナリングを行ない、前記開始制御回路からの実行の前記開始の回数が前記終了条件に到達しかつ実行の前記終了の回数が前記終了条件に到達することに応答して、データを消費に利用可能であることを示す、請求項１に記載の方法。
【請求項３】
制御回路構成を自動的に生成することは、前記制御フロー構文を実現する際に互いと通信するように構成される開始制御回路と終了制御回路とを生成することを備え、前記開始制御回路は、前記第１の回路ブロック実現例から前記制御フロー構文についての終了条件を受信し、前記第２の回路ブロック実現例の実行の開始をカウントし、実行の前記開始の回数が前記終了条件に到達すると前記終了制御回路に通知し、前記終了制御回路は、前記第２の回路ブロック実現例の回路ブロックコンシューマとのハンドシェイクシグナリングを行ない、前記開始制御回路からの前記通知に応答してデータを消費に利用可能であることを示し、前記第２の回路ブロック実現例の実行の終了の回数が前記開始制御回路から与えられる前記終了条件に到達すると判断する、請求項１に記載の方法。
【請求項４】
制御回路構成を自動的に生成することは、前記第１の回路ブロックからダン制御信号を受信することに応答して前記制御フロー構文の条件に従って開始制御信号を前記第２の回路ブロックまたは第３の回路ブロックに出力する開始制御回路を生成することを備え、前記第３の回路ブロックは、第３の関数から生成され、制御回路構成を自動的に生成することはさらに、
前記第２の回路ブロックまたは前記第３の回路ブロックからダン制御信号を受信することに応答して開始制御信号を第４の回路ブロックに与える終了制御回路を生成することを備え、
前記第４の回路ブロックは、前記第２の関数または前記第３の関数のデータ消費関数である関数から生成され、前記第３の関数は、前記第１の関数のデータ消費関数である、請求項１に記載の方法。
【請求項５】
制御回路構成を自動的に生成することは、
前記第１の回路ブロックからダン制御信号を受信することに応答して前記制御フロー構文の条件に従って開始制御信号を前記第２の回路ブロックに出力する開始制御回路を生成することと、
前記第２の回路ブロックからダン制御信号を受信することに応答して開始制御信号を第３の回路ブロックに与える終了制御回路を生成することとを備え、
前記第３の回路ブロックは、前記第２の関数のデータ消費関数である第３の関数から生成される、請求項１に記載の方法。
【請求項６】
制御回路構成を自動的に生成することは、
前記第１の回路ブロックからダン制御信号を受信することに応答して前記第２の回路ブロックに開始制御信号を出力する開始制御回路を生成することと、
前記制御フロー構文の終了条件が満たされると判断することに応答して開始制御信号を第３の回路ブロックに与える終了制御回路を生成することとを備え、
前記第３の回路ブロックは、前記第２の関数のデータ消費関数である第３の関数から生成される、請求項１に記載の方法。
【請求項７】
前記開始制御回路は、前記フロー制御構文の前記終了条件を前記終了制御回路に通信する、請求項６に記載の方法。
【請求項８】
前記終了制御回路は、前記開始制御回路および前記終了制御回路の両者が前記終了条件を検出することに応答して前記開始制御信号を前記第３の回路ブロックに与える、請求項７に記載の方法。
【請求項９】
システムであって、
実行可能な動作を開始するようにプログラミングされるプロセッサを備え、前記実行可能な動作は、
高位プログラミング言語記述の第１の関数と前記高位プログラミング記述の制御フロー構文内に含有される第２の関数とを判断することと、
前記第２の関数が前記第１の関数のデータ消費関数であると判断することと、
回路設計内で、ローカルメモリを備えるポートを自動的に生成することとを備え、
前記ポートは、前記回路設計内で、前記第１の関数の第１の回路ブロック実現例を前記第２の関数の第２の回路ブロック実現例に結合し、さらに前記実行可能な動作は、
非自己同期ポートとして、前記第１の回路ブロックと前記第２の回路ブロックとの間でハンドシェイクシグナリングを行なうことによって、前記回路設計内で、前記第２の回路ブロックの動作を制御する制御回路構成を自動的に生成することを備え、前記制御回路構成は、前記第２の回路ブロック実現例を制御する前記制御フロー構文を実現する、システム。
【請求項１０】
制御回路構成を自動的に生成することは、前記制御フロー構文を実現する際に互いと通信するように構成される開始制御回路と終了制御回路とを生成することを備え、前記開始制御回路は、前記第１の回路ブロック実現例から前記制御フロー構文についての終了条件を受信しかつ前記終了制御回路に前記終了条件を与え、前記開始制御回路は前記第２の回路ブロック実現例の実行の開始をカウントし、前記終了制御回路は前記第２の回路ブロック実現例の実行の終了をカウントし、前記終了制御回路は、前記第２の回路ブロック実現例の回路ブロックコンシューマとのハンドシェイクシグナリングを行ない、前記開始制御回路からの実行の前記開始の回数が前記終了条件に到達しかつ実行の前記終了の回数が前記終了条件に到達することに応答して、データを消費に利用可能であることを示す、請求項９に記載のシステム。
【請求項１１】
制御回路構成を自動的に生成することは、前記制御フロー構文を実現する際に互いと通信するように構成される開始制御回路と終了制御回路とを生成することを備え、前記開始制御回路は、前記第１の回路ブロック実現例から前記制御フロー構文についての終了条件を受信し、前記第２の回路ブロック実現例の実行の開始をカウントし、実行の前記開始の回数が前記終了条件に到達すると前記終了制御回路に通知し、前記終了制御回路は、前記第２の回路ブロック実現例の回路ブロックコンシューマとのハンドシェイクシグナリングを行ない、前記開始制御回路からの前記通知に応答してデータを消費に利用可能であることを示し、前記第２の回路ブロック実現例の実行の終了の回数が前記開始制御回路から与えられる前記終了条件に到達すると判断する、請求項９に記載のシステム。
【請求項１２】
制御回路構成を自動的に生成することは、前記第１の回路ブロックからダン制御信号を受信することに応答して前記制御フロー構文の条件に従って開始制御信号を前記第２の回路ブロックまたは第３の回路ブロックに出力する開始制御回路を生成することを備え、前記第３の回路ブロックは、第３の関数から生成され、制御回路構成を自動的に生成することはさらに、
前記第２の回路ブロックまたは前記第３の回路ブロックからダン制御信号を受信することに応答して開始制御信号を第４の回路ブロックに与える終了制御回路を生成することを備え、
前記第４の回路ブロックは、前記第２の関数または前記第３の関数のデータ消費関数である関数から生成され、前記第３の関数は、前記第１の関数のデータ消費関数である、請求項９に記載のシステム。
【請求項１３】
制御回路構成を自動的に生成することは、
前記第１の回路ブロックからダン制御信号を受信することに応答して前記制御フロー構文の条件に従って開始制御信号を前記第２の回路ブロックに出力する開始制御回路を生成することと、
前記第２の回路ブロックからダン制御信号を受信することに応答して開始制御信号を第３の回路ブロックに与える終了制御回路を生成することとを備え、
前記第３の回路ブロックは、前記第２の関数のデータ消費関数である第３の関数から生成される、請求項９に記載のシステム。
【請求項１４】
制御回路構成を自動的に生成することは、
前記第１の回路ブロックからダン制御信号を受信することに応答して前記第２の回路ブロックに開始制御信号を出力する開始制御回路を生成することと、
前記制御フロー構文の終了条件が満たされると判断することに応答して開始制御信号を第３の回路ブロックに与える終了制御回路を生成することとを備え、
前記第３の回路ブロックは、前記第２の関数のデータ消費関数である第３の関数から生成される、請求項９に記載のシステム。
【請求項１５】
前記開始制御回路は前記フロー制御構文の前記終了条件を前記終了制御回路に通信し、前記終了制御回路は、前記開始制御回路および前記終了制御回路の両者が前記終了条件を検出することに応答して前記開始制御信号を前記第３の回路ブロックに与える、請求項１４に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
この開示は集積回路（ＩＣ）に関し、より特定的には、高位合成において回路設計用のシステムアーキテクチャを抽出することに関する。
【背景技術】
【０００２】
背景
高位合成は、電子システムの高位プログラミング言語記述から回路設計を作製する自動化された設計プロセスである。電子システムの高位プログラミング言語記述はアルゴリズム記述である。高位プログラミング言語の例は、Ｃ、Ｃ＋＋、システムＣなどを含むが、それらに限定されない。電子設計自動化（ＥＤＡ）ツールが、高位プログラミング言語記述上で動作しかつ回路設計を生成する。回路設計は、ハードウェア記述言語（ＨＤＬ）を用いて特定される電子システムのレジスタ転送レベルハードウェア記述であってもよい。
【０００３】
高位合成において、１つの目的は、並列性が導入され得る高位プログラミング言語記述の逐次部分を同定することである。回路設計に組入れられると、並列性により、結果的に得られる回路構成において、リソースの使い方が改良され、かつシステム性能が向上する。多数の高位プログラミング言語記述は本質的に反復性であり、ループ、アレイなどの複雑なプログラミング言語構文を利用する。そのような複雑な構文を有する高位プログラミング言語記述からデータフローアーキテクチャを抽出するのは困難であり、通常は行なわれない。
【発明の概要】
【課題を解決するための手段】
【０００４】
要約
方法は、高位プログラミング言語記述の第１の関数と、高位プログラミング記述の制御フロー構文内に含有される第２の関数とを判断することと、第２の関数が第１の関数のデータ消費関数であると判断することと、回路設計内で、プロセッサを用いて、ローカルメモリを含むポートを自動的に生成することとを含む。ポートは、回路設計内で、第１の関数の第１の回路ブロック実現例を第２の関数の第２の回路ブロック実現例に結合する。
【０００５】
システムは、実行可能な動作を開始するようにプログラミングされるプロセッサを含む。実行可能な動作は、高位プログラミング言語記述の第１の関数と高位プログラミング記述の制御フロー構文内に含有される第２の関数とを判断することと、第２の関数が第１の関数のデータ消費関数であると判断することと、回路設計内で、ローカルメモリを含むポートを自動的に生成することとを含む。ポートは、回路設計内で、第１の関数の第１の回路ブロック実現例を第２の関数の第２の回路ブロック実現例に結合する。
【０００６】
非一時的コンピュータ読出可能記憶媒体はその上に記憶される命令を含む。命令は、プロセッサによって実行されると、方法を実行する。方法は、高位プログラミング言語記述の第１の関数と高位プログラミング記述の制御フロー構文内に含有される第２の関数とを判断することと、第２の関数が第１の関数のデータ消費関数であると判断することと、回路設計内で、ローカルメモリを含むポートを自動的に生成することとを含む。ポートは、回路設計内で、第１の関数の第１の回路ブロック実現例を第２の関数の第２の回路ブロック実現例に結合する。
【０００７】
他の特徴は、以下の詳細な説明および請求項を検討すれば認識されるであろう。
【図面の簡単な説明】
【０００８】
【図１】例示的なデータ処理システムを示すブロック図である。
【図２】電子システムの高位プログラミング言語記述（記述）から回路設計を作製する例示的な方法を示すフロー図である。
【図３−１】電子システムの記述からの回路設計の自動作製を示すブロック図である。
【図３−２】電子システムの記述からの回路設計の自動作製を示すブロック図である。
【図４−１】電子システムの記述からの別の回路設計の自動作製を示すブロック図である。
【図４−２】電子システムの記述からの別の回路設計の自動作製を示すブロック図である。
【図５】電子システムの記述からの別の回路設計の自動作製を示すブロック図である。
【図６】電子システムの記述からの別の回路設計の自動作製を示すブロック図である。
【図７】自己同期ポートを用いる電子システムの例示的な記述を示す図である。
【図８】自己同期ポートを用いる電子システムの別の例示的な記述を示す図である。
【図９】集積回路の例示的なアーキテクチャの図である。
【発明を実施するための形態】
【０００９】
図面の詳細な説明
開示は新規の特徴を規定する請求項で結ばれるが、図面とともに説明を検討することによって本開示中に記載のさまざまな特徴がより十分に理解されると考えられる。本明細書中に記載のプロセス、機械、製造、および任意のその変形は例示の目的のために与えられる。この開示中に記載の特定の構造的および機能的詳細は限定と解釈されるべきではなく、単に請求項の根拠として、および事実上任意の適切に詳述される構造において記載の特徴をさまざまに用いることを当業者に教示するための代表的な根拠として解釈されるべきである。さらに、この開示内で用いられる用語および文言は限定を意図するものではなく、むしろ記載される特徴の理解可能な説明を提供することを意図する。
【００１０】
この開示は集積回路（ＩＣ）に関し、より特定的には高位合成において回路設計用のシステムアーキテクチャを抽出することに関する。この開示内に記載される発明の構成に従うと、電子システムの高位プログラミング言語記述は、電子システム用の回路設計を生成するように処理される。高位プログラミング言語記述は、非ネステッドループ、アレイ、条件付き制御構造などのさまざまな制御フロー構文のうち任意のものを含み得るアルゴリズム的記述である。制御フロー構文は、データ依存タイミング挙動を容易にする制御回路構成を組入れることによって処理される。回路設計のデータ依存タイミング挙動は、制御回路構成が生成し得る制御信号を用いて生成されるさまざまな回路ブロックの間で制御されるおよび／または同期される。
【００１１】
結果的に得られる回路設計は、電子システムのハードウェア記述である。回路設計は、ハードウェア記述言語を用いて特定され得る。さらに、回路設計は、電子システムの元の高位プログラミング言語の大規模なプログラムコードの複数の同時実行をサポートする。
【００１２】
１つの局面では、本明細書中に記載の発明の構成は、データ処理システムによって行なわれる方法またはプロセスとして実現され得る。別の局面では、発明の構成は、本明細書中に記載されるような回路設計を生成する実行可能な動作を実行するおよび／または開始するようにプログラミングされるプロセッサを有するデータ処理システムとして実現され得る。また別の局面では、発明の構成は、実行されると、プロセッサおよび／またはシステムに方法またはプロセスを行なわせるプログラムコードを記憶する非一時的コンピュータ読出可能記憶媒体として実現され得る。
【００１３】
この文書を通じて適用されるいくつかの定義を提示する。本明細書中に規定されるように、「自動的」という用語は、ユーザの介入がないことを意味する。本明細書中に規定されるように、「ユーザ」という用語は人間を意味する。
【００１４】
本明細書中に規定されるように、「高位プログラミング言語」という用語は、命令が記載のシステムの詳細からの強い抽象化を典型的に有する、たとえば電子システムなどのデータ処理システムを記述するのに用いられる命令の組を意味する。高位プログラミング言語は、メモリ管理または機械命令などの記載のシステムの動作の局面を隠し得、高位プログラミング言語で書かれるプログラムがさまざまなシステムに変換されるのを可能にし得る。高位プログラミング言語を用いる場合、ユーザは、プログラムから生成されるべきシステムのレジスタ、メモリアドレス、機械命令などを明示的に記述し得るが、そうする必要はない。高位プログラミング言語の例は、Ｃ、Ｃ＋＋、システムＣなどを含むが、それらに限定されない。ある場合、特定のデータ処理システムの命令の組は、交互のまたは異なるデータ処理システムの命令の組で表現されるプログラムに変換されると、「高位プログラミング言語」と考えられ得る。
【００１５】
本明細書中に規定されるように、「制御フロー構文」という用語は、その実行の結果、２つ以上の異なるデータフロー経路のうちどれに従うかに関しての選択がなされる、高位プログラミング言語の１つ以上のステートメントまたは命令を意味する。制御フロー構文は関数と同じではない。制御フロー構文の例は条件付き分岐である。条件付き分岐は、条件が満たされる場合にのみステートメントが実行される、または条件が満たされるまで実行される場合を指す。条件付き分岐は、ループ構文、for-next構文、do-until構文、if-then構文、if-then-else構文などを含む。
【００１６】
本明細書中に規定されるように、「ハードウェア記述言語」という用語は、デジタルシステムの文書化、設計、および実現例を容易にするコンピュータ言語である。デジタルシステムの実現例は、ＩＣ製造用の１組のマスクへのデジタルシステムの変換、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）などのプログラマブルＩＣのプログラミングなどを含み得る。ＨＤＬを用いると、たとえば、ユーザは、電子回路を設計しかつ特定し、回路の動作を記述し、かつ回路の動作を検証する試験を作製することができる。ＨＤＬは、空間的および時間的構造ならびにモデリングされているデジタルシステムの挙動の標準的なテキストベースの表現を含む。ＨＤＬ統語論および意味論は、デジタルシステム中の同時動作を表現しかつ同時動作の進捗を同期化させて特定の組合された挙動を達成するための明示的な表記を含む。多くの回路において、この同期化は、「クロック」と呼ばれるグローバルに可視の信号に基づいている。しかしながら、回路の部分同士の間の同期のための他の機構を設けてもよいことを認めるべきである。
【００１７】
本明細書中に規定されるように、「ハンドシェイキング」または「ハンドシェイクシグナリング」という用語は、同期化の確立、または特定の文字コンフィギュレーションおよび／もしくは信号を交換することによる、たとえば回路などの送信機器と受信機器との間での通知の提供を含み得る、ある種の制御シグナリングを意味する。ハンドシェイキングは、クロック信号に関連して１組の信号を用いて実現されてもよく、または、クロック信号とは独立した１組の信号（たとえば「二相ハンドシェイク」）を用いて実現されてもよく、またはより原始的な同期化と通信との組を組合せるプロトコルを通したデータパケットもしくはメッセージの交換を用いて実現されてもよい。
【００１８】
図示の簡潔さおよび明確性の目的のために、図に示される要素は必ずしも縮尺通りに描かれているとは限らない。たとえば、明確性のために、要素の一部の寸法は他の要素に対して誇張されることがある。さらに、適切と考えられる場合は、対応の、類似の、または同様の特徴を示すために、参照番号が図の間で繰返される。
【００１９】
図１は、例示的なデータ処理システム（システム）１００を示すブロック図である。システム１００は、システムバス１１５または他の好適な回路構成を通してメモリ素子１１０に結合される、たとえば中央処理装置（ＣＰＵ）などの少なくとも１つのプロセッサ１０５を含む。システム１００はメモリ素子１１０内にプログラムコードを記憶する。プロセッサ１０５は、システムバス１１５を介してメモリ素子１１０からアクセスされるプログラムコードを実行する。１つの局面では、システム１００は、プログラムコードを記憶するおよび／または実行するのに好適なコンピュータとして実現される。しかしながら、システム１００は、この明細書内に記載される機能を果たすことができる、プロセッサおよびメモリを含む任意のシステムの形態で実現されてもよいことを認めるべきである。
【００２０】
メモリ素子１１０は、たとえばローカルメモリ１２０および１つ以上のバルク記憶デバイス１２５などの１つ以上の物理的メモリデバイスを含む。ローカルメモリ１２０は、プログラムコードの実際の実行の際に一般的に用いられるランダムアクセスメモリ（ＲＡＭ）または他の非持続的メモリデバイスを指す。バルク記憶デバイス１２５は、ハードディスクドライブ（ＨＤＤ）、固体状態ドライブ（ＳＳＤ）、または他の持続的データ記憶デバイスとして実現することができる。システム１００は、実行の間にプログラムコードをバルク記憶デバイス１２５から取出さなければならない回数を低減するために、少なくともあるプログラムコードの一時的な記憶を提供する１つ以上のキャッシュメモリ（図示せず）も含むことがある。
【００２１】
キーボード１３０、表示デバイス１３５、およびポインティングデバイス１４０などの入出力（Ｉ／Ｏ）デバイスは、システム１００に結合されてもされなくてもよい。直接にまたは介在Ｉ／Ｏコントローラを通して、Ｉ／Ｏデバイスがシステム１００に結合され得る。介在するプライベートネットワークまたは公衆網を通してシステム１００が他のシステム、コンピュータシステム、遠隔プリンタ、および／または遠隔記憶デバイスに結合されるように、ネットワークアダプタ１４５もシステム１００に結合され得る。モデム、ケーブルモデム、イーサネット（登録商標）カード、および無線トランシーバは、システム１００内で用い得る異なる種類のネットワークアダプタ１４５の例である。
【００２２】
図１に描かれるように、メモリ素子１１０は電子設計自動化（ＥＤＡ）アプリケーション１５０を記憶する。実行可能なプログラムコードの形態で実現されるＥＤＡアプリケーション１５０は、システム１００によって実行される。そのため、ＥＤＡアプリケーション１５０はシステム１００の一体部分と考えられる。ＥＤＡアプリケーション１５０は、開発中の電子システムの受信した高位プログラミング言語記述１５５により動作する。明確性および考察の目的のため、高位プログラミング言語記述１５５は、電子システムの「記述」１５５または「記述」と称される。高位プログラミング言語を用いて特定される記述１５５は、電子システムのアルゴリズム的記述である。記述１５５は用いるべき特定のハードウェアを特定しない。
【００２３】
ＥＤＡアプリケーション１５０はアルゴリズム的記述１５５によって動作し、電子システム用の回路設計１６０を生成する。回路設計１６０は、記述１５５によって特定される電子システムのハードウェア記述である。回路設計１６０は、ＨＤＬで書かれるまたは特定されるレジスタ転送レベルハードウェア記述として特定されてもよい。
【００２４】
ＥＤＡアプリケーション１５０ならびに記述１５５および／または回路設計１６０を含む任意のデータ項目は、システム１００の一部として用いられると、またはＩＣ内で（プログラマブルＩＣ、特定用途向けＩＣ、部分プログラマブルＩＣ、もしくは非プログラマブルＩＣであっても）実現例のためにさらに処理されると、機能性を与える機能的データ構造である。
【００２５】
図２は、電子システムの記述から回路設計を作製する例示的な方法２００を示すフロー図である。方法２００は、図１のシステム１００などのシステムによって実行され得る。図示の目的のため、方法２００は、１つの制御フロー構文を処理するものとして記載される。しかしながら、方法２００は、記述内で同定され得るまたは記述内で同定される複数の制御フロー構文を処理するようにそれ以外のやり方で適合され得るさらなる制御フロー構文を処理するために、繰返し行なわれてもよいことを認めるべきである。
【００２６】
ブロック２０５で、システムは、処理のための電子システムの記述を受信する。記述は高位プログラミング言語で特定される。さらに、記述は制御フロー構文を含む。ブロック２１０で、システムは、記述内に特定される関数を同定する。
【００２７】
ブロック２１５で、システムは、記述内の制御フロー構文を同定する。ブロック２２０で、システムは、どの関数、または場合によってはどの複数の関数が制御フロー構文内に含有されるかを判断する。この明細書内で、制御フロー構文内に含有される関数は「目的関数」と称される。関数は、目的関数が実行されるかもしくは実行されないか、および／または目的関数が実行される多数の回数（繰返し）を制御フロー構文の実行が判断する際に、制御フロー構文内に含有される。
【００２８】
ブロック２２５で、システムは、任意の目的関数を含む記述の関数のうちどれがデータ生成関数でありかつどれがデータ消費関数であるかを判断する。本明細書中に規定されるように、「データ生成関数」という用語は、目的関数であるかもしれないまたは目的関数でないかもしれない別の関数によって入力として用いられるデータを生成するまたは出力する記述の関数を意味する。本明細書中に規定されるように、「データ消費関数」という用語は、目的関数であるかもしれないまたは目的関数でないかもしれない別の関数によって生成または出力されるデータを入力として受信する記述の関数を意味する。システムは、データ生成関数とデータ消費関数との関係を同定する。所与の関数は、１つの関数に関してデータ生成関数として動作し、かつ別の異なる関数に関してはデータ消費関数として動作することがある。
【００２９】
ブロック２３０で、システムは、記述のデータ生成関数とデータ消費関数との間のデータ交換を評価する。たとえば、システムは、目的関数と目的関数への入力を与えるデータ生成関数との間のデータ交換を評価する。システムはさらに、目的関数と目的関数から出力を受けるデータ消費関数との間のデータ交換を評価することがある。
【００３０】
各々の関数が回路ブロックに変換されるので、結果的に得られる回路ブロックはポートによって結合される。本明細書中に規定されるように、「ポート」は、２つ以上の回路ブロックを結合することによって回路ブロックが信号および／またはデータを交換できるようにする回路構成、またはたとえば配線、メモリ、インターフェイスなどの回路構成のハードウェア記述を指す。データ生成関数のために作製される回路ブロックをデータ消費回路ブロックのために作製される回路ブロックに結合するのに用いられるポートの種類は、データ生成関数とデータ消費関数との間に発生するデータ交換の評価から決められる。
【００３１】
システムは、データ交換の１つ以上の属性を判断し得る。１つの局面では、システムは、関数と目的関数との間で行なわれるデータ交換の種類を示す電子システムの記述に含まれるコンパイラディレクティブを検出し得る。たとえば、記述内で、特定の関数に関連付けられて、それによりデータ交換の種類を特定する「pragma」または「♯pragma」ディレクティブを見つけ得る。ディレクティブは、目的関数に関連付けられて検出されると、たとえば、回路設計を作製する際に用いるべきポートの種類を示し得る。データ交換の属性は、記述の高位プログラミング言語内に規定されるように交換されるデータの種類も含み得る。
【００３２】
別の局面では、システムは、関数への入力、関数からの出力を分析し得る、ならびに／または入力データ項目が処理されるおよび／もしくは出力データ項目が生成される逐次の順序を判断し得る。システムは、たとえばデータ生成関数が生成するデータがデータ生成関数が生成するのと同じ逐次の順序でデータ消費関数によって消費されるか否かを判断してもよい。同様に、システムは、データ生成関数が生成するデータが、データ生成関数が生成するのとは異なる逐次の順序でデータ消費関数によって消費されるか否かを判断してもよい。
【００３３】
ブロック２３５で、システムは、データ生成関数とデータ消費関数との間のデータ交換の評価に従ってポートの種類を判断する。１つ以上の局面では、システムは、検出されたコンパイラディレクティブまたは交換されるデータの種類に従ってポートの種類を判断してもよい。別の局面では、システムは、データ交換に従って、およびより特定的には、後でデータが消費される逐次の順序と比較したデータが生成される逐次の順序に従って、ポートの種類を判断する。
【００３４】
たとえば、生成されたのと同じ逐次の順序でデータが消費される場合、ポートは、先入れ先出し（ＦＩＦＯ）メモリを用いて実現され得る。ＦＩＦＯメモリの使用は、ポートが自己同期ポートとして実現されることを意味する。生成されたのとは異なる順序でデータが消費されるデータ交換は、自己同期ポートとしてまたは非自己同期ポートとして実現され得る。しかしながら、生成されたのとは異なる順序でデータが消費される場合、ＦＩＦＯメモリを用いなくてもよい。代わりに、ポートを実現するのにローカルメモリを用いる。
【００３５】
説明および明確性の目的のため、関数のために生成される回路ブロック、回路構成、または回路は、同様の用語法を用いて参照される。たとえば、関数を生成するデータ生成器のために生成される回路ブロックはデータ生成回路ブロックと称されることがある。目的関数のために生成される回路ブロックは目的回路ブロックと称されることがある。同様に、データ消費関数のために生成される回路ブロックはデータ消費回路ブロックと称されることがある。
【００３６】
一般的に、ポートは、自己同期であっても非自己同期であっても、ブロックレベルのハンドシェイキングを利用する。自己同期ポートにより、データは、データ消費回路ブロックが処理を開始した後にデータ消費回路ブロックに到達できるようになる。そのようにできるには、ブロックレベルハンドシェイクシグナリングを超えた付加的なハンドシェイクシグナリングが要件となる。データ消費回路ブロックは、たとえばメモリがデータを内蔵する前に、ブロックレベル開始ハンドシェイクを完了し、データの一部の処理を開始し得る。付加的なデータが生成されてメモリの中に入れられると、データ消費回路ブロックは付加的なハンドシェイクシグナリングを完了してこのデータをメモリから除去し、当該データを処理し得る。同様に、データ生成回路ブロックは、処理を完了する前に、ハンドシェイクシグナリングを完了してデータをメモリの中に入れ得る。データ生成回路ブロックは後にブロックレベルダン（done）ハンドシェイクを完了してもよい。
【００３７】
自己同期ポートの例はストリーミングインターフェイスである。ストリーミングインターフェイスの一例は、アドバンストエクステンシブルインターフェイス（Advanced eXtensible Interface）（ＡＸＩ）プロトコル準拠ストリーミングポートであり、これは「ＡＸＩストリーム」と称されることがある。１つの局面では、ストリーミングインターフェイスはＦＩＦＯメモリを含む。その場合、自己同期ポートはＦＩＦＯデータ転送方式に従う。別の局面では、ストリーミングインターフェイスはローカルメモリを含むことがある。ローカルメモリの場合、自己同期ポートは、順序を外れて、すなわちＦＩＦＯ順序ではなく、またはＦＩＦＯデータ転送方式に従って、データにアクセスし得る。しかしながら、いずれの場合も、自己同期ポートは、データ消費回路ブロックおよび／またはデータ生成回路ブロックと用いられる特定のメモリとの間で行なわれるハンドシェイクシグナリングなどのブロックレベルハンドシェイクシグナリングを超えたハンドシェイクシグナリングを含む。
【００３８】
注記されるように、非自己同期ポートは、ブロックレベルハンドシェイクシグナリングを利用する。ブロックレベルハンドシェイクシグナリングは、データ消費回路ブロックおよび／またはデータ生成回路ブロックがデータ転送に係る特定のメモリとの間でのシェイクシグナリングを行なわずにそれら自身の間でハンドシェイクシグナリングを行なうことを意味する。データ消費回路ブロックは、たとえばメモリとの付加的なハンドシェイクシグナリングを完了せずにブロックレベル開始ハンドシェイクを完了して、ローカルメモリ中のデータにアクセスし得る。データ生成回路ブロックは、ハンドシェイクシグナリングを完了せずにローカルメモリ中のデータにアクセスし、次にブロックレベルダンハンドシェイクシグナリングを行なってもよい。非自己同期ポートの場合、データ消費回路ブロックの処理の開始の前に、データ消費回路ブロックに与えるべきすべてのデータを準備して、データ消費回路ブロックがこれを利用可能になっていなければならない。
【００３９】
非自己同期ポートは、アドレスおよびデータ信号を有するローカルメモリを含む。当該回路構造により、記憶されているのとは異なる順序でデータを読出せるようになる。自己同期ポートまたは非自己同期ポートのいずれかを実現するのに用い得る例示的なローカルメモリは、ルックアップテーブル（ＬＵＴ）ランダムアクセスメモリ、ブロックランダムアクセスメモリ、フリップフロップなどを含むが、これらに限定されない。電子システムをその中に実現すべきＩＣ外部のメモリも「ローカルメモリ」として用いてもよい。
【００４０】
ブロック２４０で、システムは回路設計内に自動的にポートを生成する。各々のポートは、データ生成回路ブロックとデータ消費回路ブロックとを結合し、ブロック２３５で判断される種類として実現される。したがって、各々のポートは適切なメモリ種類を含む。回路設計内に回路ブロックまたはポートを生成することは、システムが、場合によっては回路ブロック、回路構成、またはポートを特定するＨＤＬモジュールを生成し、回路設計内に当該ＨＤＬを含むことを意味する。ハードウェア記述モジュールは、まとめると、電子システムのための回路設計を形成する。したがって、この開示内では、「ハードウェア記述モジュール」、「回路」、「回路ブロック」、「ポート」、および／または「回路構成」という用語は、その時々によって相互交換可能に用いられることがある。
【００４１】
ブロック２４５で、システムは回路設計内で制御回路構成を自動的に生成する。制御回路構成は開始制御回路および終了制御回路を含み得る。制御回路構成は実際に、ハードウェアにおいてアルゴリズム的記述の制御フロー構文を実現する。
【００４２】
データ生成関数およびデータ消費関数を目的関数に接続するポートが自己同期であるか否かに依存して、制御回路構成は、必要な制御信号を生成して、制御フロー構文に従って、データ生成回路ブロックと、目的回路ブロックと、データ消費回路ブロックとの間でのデータの流れを実行するように構成される。制御信号の範囲は、少なくとも部分的に、実現例のために選択されるまたは判断されるポートの種類と、検出される制御フロー構文の種類とによって決まる。
【００４３】
１つの局面では、回路設計内でポートを生成することは、データ転送のために自動的にメモリを生成することを含む。たとえば、システムは、生成されるのとは異なる順序でデータが消費されるという判断に応答して、データ生成回路ブロックから目的回路ブロックへのデータ転送を容易にするアドレス指定可能メモリを自動的に挿入する。システムは、たとえばデータ消費順とは異なるデータ生成順などの同様の状況において、目的回路ブロックからデータ消費回路ブロックへのデータ転送を容易にするアドレス指定可能メモリを自動的に挿入してもよい。ある場合、メモリは、独立して書込または読出がなされ得る複数の独立した領域を含む、たとえばピンポンメモリなどのセグメント化されたメモリであってもよい。
【００４４】
別の例では、システムは、データ生成回路ブロックが生成したのと同じ逐次の順序で目的回路ブロックがデータを消費するという判断に応答して、データ生成回路ブロックから目的回路ブロックへのデータ転送を容易にするＦＩＦＯメモリを自動的に挿入する。システムは、同様の状況で目的回路ブロックからデータ消費回路ブロックへのデータ転送を容易にするＦＩＦＯメモリを自動的に挿入してもよい。
【００４５】
ブロック２５０で、システムは、記述の各関数毎に回路ブロックを自動的に生成する。ブロック２５５で、システムは、結果的に得られる回路設計を出力する。たとえば、システムは、持続的記憶デバイスなどのメモリ内に回路設計を記憶する。
【００４６】
図３−１および図３−２は、電子システムの記述からの回路設計の自動作製を示すブロック図である。図３−１および図３−２に示されるプロセスは、図１のシステムによって実現されてもよい。
【００４７】
図３−１は、回路設計を実現するのに非自己同期ポートを用いる電子システムの記述３０５を示す。記述３０５は、関数Ａ、関数Ｂ、および関数Ｃと呼ばれる３つの関数を含む。この例では、記述３０５は、ループ型の制御フロー構文を含む。描かれるように、関数Ｂは制御フロー構文内に含有され、目的関数である。注記されるように、制御フロー構文内に含有される関数は、関数の実行が、たとえそれが条件付き実行および／または実行回数であっても、制御フロー構文によって直接に制御される関数である。
【００４８】
システムは回路設計３１０を生成している。回路設計３１０はグラフィックに図示されている。関数Ａ、Ｂ、およびＣの各々は、それぞれＡ、Ｂ、およびＣの標識を有するブロックまたは回路ブロックとして回路設計３１０中に描かれている。関数Ａ、Ｂ、およびＣを回路ブロックに変換することに加えて、システムは制御回路構成３１５を自動的に挿入している。一般的に、制御回路構成３１５は、記述３０５中に同定される制御フロー構文のハードウェア実現例である。制御回路構成３１５は開始制御回路３２０および終了制御回路３２５を含む。
【００４９】
論じられるように、システムは、関数Ａと関数Ｂとの間のデータ交換が非自己同期ポートとして実現されると判断している。システムは、メモリ３３０を挿入して回路ブロックＡから回路ブロックＢへのデータ転送を実行している。メモリ３３０はＲＡＭである。システムはメモリ３３５も挿入して回路ブロックＢから回路ブロックＣへのデータ転送を実行している。メモリ３３５はＲＡＭである。１つの局面では、アルゴリズム的記述３０５中に特定される任意のアレイは、たとえば、特定の回路ブロックによってアクセス可能なメモリ３３０および３３５などのＲＡＭなどの２つ以上のローカルメモリに変換される。たとえばメモリ３３０および３３５などの各々それぞれのローカルメモリへのアクセスは、少なくとも部分的に制御回路構成３１５によって行なわれるハンドシェイクシグナリングによって制御されるまたは限定される。
【００５０】
図３−図６内で、データ信号経路は実線を用いて示され、制御信号は点線または破線で表わされる。たとえば、回路ブロックＡからメモリ３３０、回路ブロックＢ、メモリ３３５、および回路ブロックＣへの実線の矢印は、注目される回路ブロック間でのデータの流れを表わす。データ信号経路は、回路ブロックＡと開始制御回路３２０との間および開始制御回路３２０と終了制御回路３２５との間にも存在する。アルゴリズム的記述３０５内の制御フロー構文の検出の結果、制御回路構成３１５が生成され、これにより、回路設計３１０がより多くのタスクを同時に行なえるようになる。回路設計３１０により、回路ブロックＡ、Ｂ、およびＣがパイプライン化された態様で同時に動作できるようになる。
【００５１】
回路設計３１０内で、ループ制御が以下のように実現され得る。１つの局面では、回路ブロックＡは開始制御回路３２０へダン制御信号をアサートして、回路ブロックＢを含むループ処理の繰返しを開始させる。回路ブロックＡは、データ経路を介して開始制御回路３２０へ、たとえばループ境界などのループについての終了条件を通信し、これは次にデータ経路を介して終了制御回路３２５に終了条件を通信する。
【００５２】
開始制御回路３２０は、ループボディ、すなわち回路ブロックＢ、の実行の各々の開始に応答して、回路ブロックＢとの間でのシェイクシグナリングを行ない得る。これに応じて、開始制御回路３２０はループボディの実行の開始をカウントし得る。開始制御回路３２０はさらに、終了制御回路３２５にカウントを通信し得る、または実行開始の回数が終了条件にいつ達するかを終了制御回路３２５に通知し得る。終了制御回路３２５はさらに、ループボディの実行の各々の終了に応答して、回路ブロックＢとの間でのシェイクシグナリングを行ない得る。終了制御回路３２５は、ループボディの実行の終了をカウントし、実行の終了のカウントが終了条件にいつ達するかを判断し得る。
【００５３】
終了制御回路３２５は、実行カウントの開始および実行カウントの終了の両者がループ境界に達したのに応答して、回路ブロックＣとの間でのシェイクシグナリングを行なう。たとえば、開始制御回路３２０および終了制御回路３２５の両者がループ境界または終了条件に達したのに応答して、終了制御回路３２５は、回路ブロックＣへ開始制御信号をアサートして、回路ブロックＢを含むループを終了または完了してもよい。
【００５４】
データの流れに関して、たとえば回路ブロックＡが生成するデータは、スペースが利用可能である場合は、メモリ３３０に押込まれる。回路設計３１０の実現例に依存して、データの流れのためのハンドシェイクシグナリングは、以前に別個のまたは付加的な配線として記述されたまたは実現された制御ハンドシェイクシグナリングの一部であってもよい。
【００５５】
回路ブロックＢは、ループの各々の繰返しの間にメモリ３３０からデータを読出す。回路ブロックＢが利用するデータは、回路ブロックＢがループの最後の実行についてのデータの最後の読出を行なうまでメモリ３３０中に留まる。１つの局面では、開始制御回路３２０および終了制御回路３２５は、回路ブロックＢとの間でのシェイクシグナリングを行なって、すべてのループボディの実行の開始の完了後にもはや必要なくなったデータを回路ブロックＢがメモリ３３０から除去してもよいことを示す。他の場合、メモリ３３０中に記憶されるデータがもはや回路ブロックＢによって必要とされないとシステムが判断すれば、システムは、より早期にそのようなハンドシェイクシグナリングをイネーブルし得る。
【００５６】
終了制御回路３２５は、回路ブロックＢと回路ブロックＣとの間でハンドシェイクシグナリングを行なって、回路ブロックＢがメモリ３３５に出力するデータを回路ブロックＣが消費または読出してもよいと示さなければならない。回路ブロックＣにデータの利用可能性を知らせるように行なわれるハンドシェイクシグナリングは、記載されたように、ループボディのすべての実行の完了に応答して行なわれる。
【００５７】
メモリ３３０およびメモリ３３５は、さまざまな公知の物理的メモリデバイスのうち任意のものを用いて実現され得る。たとえば、メモリ３３０およびメモリ３３５は、その中に回路設計３１０が実現されるＩＣ外部のルックアップテーブル（ＬＵＴ）ＲＡＭ、ブロックＲＡＭ、フリップフロップ、メモリを用いて実現され得る。さらに、メモリ３３０および３３５の記憶場所の数またはサイズは記述３０５の要件に従って異なる。
【００５８】
別の代替的な実現例では、開始制御回路３２０および終了制御回路３２５は、ループの各々の繰返し毎にハンドシェイクシグナリングを行なってもよい。ループの最後の繰返しは、開始制御回路３２０から終了制御回路３２５への別個の信号によって示され得る。ループの完了を示す開始制御回路３２０からの信号に応答して、終了制御回路３２５は、回路ブロックＣとの必要なハンドシェイクシグナリングを行ない得る。
【００５９】
図３−２は、回路設計を実現するのに自己同期ポートを用いる例を示す。図３−２に示される例では、自己同期ポート３５０は、回路ブロックＡから回路ブロックＢにデータを渡すように実現される。自己同期ポート３５５は、回路ブロックＢから回路ブロックＣにデータを渡すように実現される。１つの局面では、自己同期ポート３５０および自己同期ポート３５５は、ＦＩＦＯメモリを用いて実現される。別の局面では、自己同期ポート３５０および自己同期ポート３５５は、ローカルメモリを用いて実現される。別の局面では、自己同期ポート３５０または３５５のうち一方がＦＩＦＯメモリを用いて実現され得る一方で、自己同期ポート３５０または３５５の他方はローカルメモリを用いて実現される。
【００６０】
図４−１および図４−２は電子システムの記述からの別の回路設計の自動作製を示すブロック図である。図４−１および図４−２に示されるプロセスは図１のシステムによって実現され得る。
【００６１】
図４−１は、回路設計を実現するのに非自己同期ポートを用いる電子システムの記述３０５を示す。図４は、記述３０５が回路設計４１０に変換される代替的実現例を示す。回路設計４１０は、付加的なパイプライン化を容易にするように関数Ｂが複数の回路ブロックＢ１，Ｂ２、およびＢ３として実現されることを除き、図３−１の回路設計３１０と実質的に同様である。応じて、開始制御回路４２０は、回路ブロックＢ１との間でのシェイクシグナリングを行なう。終了制御回路４２５は、回路ブロックＢ３との間でのシェイクシグナリングを行なう。ハンドシェイクシグナリングは、回路ブロックＢ１とＢ２との間および回路ブロックＢ２とＢ３との間でも実現される。
【００６２】
図４−２は回路設計を実現するのに自己同期ポートを用いる例を示す。図４−２に示される例では、自己同期ポート４５０は、回路ブロックＡから回路ブロックＢ１にデータを渡すように実現される。自己同期ポート４５５は、回路ブロックＢ３から回路ブロックＣにデータを渡すように実現される。１つの局面では、自己同期ポート４５０および自己同期ポート４５５は、ＦＩＦＯメモリを用いて実現される。別の局面では、自己同期ポート４５０および自己同期ポート４５５は、ローカルメモリを用いて実現される。別の局面では、自己同期ポート４５０または４５５の一方がＦＩＦＯメモリを用いて実現され得る一方で、自己同期ポート４５０または４５５の他方はローカルメモリを用いて実現される。
【００６３】
図５は電子システムの記述からの別の回路設計の自動作製を示すブロック図である。図５に示されるプロセスは図１のシステムによって実現され得る。図５は電子システムの記述５０５を示す。記述５０５は、関数Ａ、関数Ｂ１、関数Ｂ２、および関数Ｃと呼ばれる４つの関数を含む。この例では、アルゴリズム的記述５０５は「if-then-else」型の制御フロー構文を含む。描かれるように、両方の関数Ｂ１およびＢ２は、相互に排他的な実行オプションとして制御フロー構文内に含有される。
【００６４】
システムは回路設計５１０を生成している。回路設計５１０がグラフィックに図示される。関数Ａ、Ｂ１、Ｂ２、およびＣの各々は、それぞれＡ、Ｂ１、Ｂ２、およびＣと標識付けられる回路または回路ブロックとして回路設計５１０中に描かれる。システムは制御回路構成５１５を自動的に挿入する。制御回路構成５１５は、記述５０５中に同定される「if-then-else」制御フロー構文のハードウェア実現例である。制御回路構成５１５は、開始制御回路５２０および終了制御回路５２５を含む。
【００６５】
図５の例では、システムは非自己同期ポートを生成する。システムはさらに、メモリ５３０を挿入して、回路ブロックＡから回路ブロックＢ１またはＢ２へのデータ転送を実行している。システムは、メモリ５３５も挿入して回路ブロックＢ１またはＢ２から回路ブロックＣへのデータ転送を実行している。たとえばメモリ５３０および５３５などの各々それぞれのローカルメモリへのアクセスは、制御回路構成５１５によって行なわれるハンドシェイクシグナリングによって制御または限定される。メモリ５３０および５３５はＲＡＭ型のメモリである。
【００６６】
たとえば、開始制御回路構成５２０は、回路ブロックＡからダン信号を受信し得る。ダン制御信号に応答して、開始制御回路構成５２０は、回路ブロックＡから開始制御回路５２０に渡される制御フロー構文の条件に従って、回路ブロックＢ１または回路ブロックＢ２へ開始制御信号をアサートまたは出力し得る。終了制御回路５２５は、場合によっては、回路ブロックＢ１またはＢ２からダン制御信号を受信し、それに応答して回路ブロックＣへ開始制御信号をアサートまたは出力し得る。
【００６７】
図６は電子システムの記述からの別の回路設計の自動作製を示すブロック図である。図６に示されるプロセスは図１のシステムによって実現され得る。図６は、システムが記述６０５から回路設計６１０を生成し、かつ非自己同期ポートを用いる、より詳細な図示を提示する。
【００６８】
回路設計６１０内で、システムは、関数の入力および出力の各々がメモリとして実現されると判断する。示されるように、回路設計６１０は、出力Ａのための出力Ａメモリ、出力Ｂ１のための出力Ｂ１メモリ、および出力Ｂ２のための出力Ｂ２メモリを含む。図示の容易のため、データを回路ブロックＡに与えてデータを回路ブロックＣから受信するメモリは示していない。
【００６９】
図６の例では、出力Ａメモリ、出力Ｂ１メモリ、および出力Ｂ２メモリの各々は、ピンポンメモリとして、または異なるデータセットのための回路ブロックの並列もしくは同時実行を容易にするために少なくとも２つの別個の記憶領域を有するメモリとして実現され得る。たとえば、回路ブロックＡが動作を完了すると、結果は、出力Ａメモリの第１の記憶領域に記憶され得る。関数Ｂは入力として「出力Ａ」を受信するので、回路ブロックＡは、開始制御回路６２０へダン制御信号をアサートする。回路ブロックＡからのダン制御信号は、回路ブロックＢ１およびＢ２を含むループの実行を開始する。回路ブロックＡは、結果とともに次のデータセットが出力Ａメモリの第２の領域に記憶されると、動作を開始し得る。このように、回路ブロックＢ１は、回路ブロックＡが出力Ａメモリの第２の領域に書込む間、出力Ａメモリの第１の領域にアクセスし続け得る。
【００７０】
開始制御回路６２０は、回路ブロックＢ１へ制御信号をアサートすることによってループ実行を開始する。開始制御回路６２０は、ループ脱出条件が真であると判断されるまで、新たなループ繰返しを開始し続け得る。回路ブロックＢ１が動作を完了すると、結果的に得られるデータは、出力Ｂ１メモリの第１の領域に記憶される。回路ブロックＢ１はさらに、回路ブロックＢ２へ開始信号制御信号をアサートする。回路ブロックＢ２は、出力Ｂ１メモリの第１の領域に記憶されるデータに対する動作を開始する。一方、回路ブロックＢ１は、次の繰返しのための計算を開始し得る。これがループの最後の繰返しであれば、開始制御論理は新たなループ開始を開始してもよく、ブロックＢ１は、出力Ａメモリの第２の領域から次のデータセットを取出すことによって計算を開始することができる。回路ブロックＢ１によって生成されるデータは、出力Ｂ１メモリの第２の領域に記憶される。
【００７１】
回路ブロックＢ１および回路ブロックＢ２がループについてのすべての繰返しを終えると、終了制御回路６２５は、回路ブロックＣへの開始制御信号をアサートする。終了制御回路６２５からの開始制御信号に応答して、回路ブロックＣは、出力Ｂ２メモリから処理のためのデータを取得する。
【００７２】
図７は、自己同期ポートを用いる電子システムの例示的な記述７０５を示す。記述７０５内で宣言されるような関数ＡとＢ１とＢ２とＣとの間で交換されるデータは、ストリームデータ型によって通信される。システムは記述７０５を評価し、記述自体からおよびストリームデータ型の使用から、回路設計内で自己同期ポートを用い得ると判断する。
【００７３】
図８は自己同期ポートを用いる電子システムの別の例示的な記述８０５を示す。記述８０５の場合、システムはプロデューサ関数を分析し、データが０〜Ｎ−１の指数から逐次の順序で生成されることを見出す。システムはさらにコンシューマー関数を分析し、プロデューサ関数が生成するデータがプロデューサ関数が生成するのと同じ順序で消費されると判断する。システムはＦＩＦＯメモリを用いる。というのも、システムは、データ生成順および消費順が同じであることを証明または判断することができるからである。１つの局面では、生成されるのと同じ逐次の順序でデータが消費されるとシステムが判断または証明できない場合、システムは、その条件を、生成されるのと同じ逐次の順序でデータが消費されないという判断と均等であると評価する。
【００７４】
図９は、この明細書内に開示される実施形態に従うＩＣのための例示的なアーキテクチャ９００を示すブロック図である。アーキテクチャ９００は、たとえばフィールドプログラマブルゲートアレイ（ＦＰＧＡ）型のＩＣ内において実現可能である。この明細書内に記載されるさまざまな回路設計は、たとえばコンフィギュレーションビットストリームに変換されかつアーキテクチャ９００を用いてＩＣにロードされるなど、さらに処理され得る。
【００７５】
示されるように、アーキテクチャ９００は、たとえば、論理、ブロックなどのいくつかの異なる種類のプログラマブル回路を含む。たとえば、アーキテクチャ９００は、マルチギガビットトランシーバ（ＭＧＴ）９０１、コンフィギュラブル論理ブロック（ＣＬＢ）９０２、ランダムアクセスメモリブロック（ＢＲＡＭ）９０３、入／出力ブロック（ＩＯＢ）９０４、コンフィギュレーションおよびクロッキング論理（ＣＯＮＦＩＧ／ＣＬＯＣＫＳ）９０５、デジタル信号処理ブロック（ＤＳＰ）９０６、特化されたＩ／Ｏブロック９０７（たとえばコンフィギュレーションポートおよびクロックポート）、およびデジタルクロックマネージャ、アナログ−デジタルコンバータ、システム監視論理などの他のプログラマブル論理９０８を含む多数の異なるプログラマブルタイルを含むことができる。
【００７６】
いくつかのＩＣでは、各々のプログラマブルタイルは、各々の隣接するタイルにおいて対応の相互接続素子（ＩＮＴ）９１１へのまたはそれからの規格化接続を有するプログラマブルＩＮＴ９１１を含む。したがって、ＩＮＴ９１１は、ともに、図示されるＩＣのためのプログラマブル相互接続構造を実現する。各々のＩＮＴ９１１は、図９の一番上に含まれる例に示されるように、同じタイル内にプログラマブル論理素子へのおよびそれからの接続も含む。
【００７７】
たとえば、ＣＬＢ９０２は、ユーザ論理プラス単一のＩＮＴ９１１を実現するようにプログラミングされ得るコンフィギュラブル論理素子（ＣＬＥ）９１２を含むことができる。ＢＲＡＭ９０３は、１つ以上のＩＮＴ９１１に加えて、ＢＲＡＭ論理素子（ＢＲＬ）９１３を含むことができる。典型的に、タイルに含まれるＩＮＴ９１１の数はタイルの高さに依存する。描かれる実施形態では、ＢＲＡＭタイルは５つのＣＬＢと同じ高さを有するが、他の数（たとえば４）も用いることもできる。ＤＳＰタイル９０６は、適切な数のＩＮＴ９１１に加えて、ＤＳＰ論理素子（ＤＳＰＬ）９１４を含むことができる。ＩＯＢ９０４は、ＩＮＴ９１１の１つのインスタンスに加えて、たとえば、Ｉ／Ｏ論理素子（ＩＯＬ）９１５の２つのインスタンスを含むことができる。当業者には明らかなように、たとえば、ＩＯＬ９１５に接続される実際のＩ／Ｏパッドは典型的に、ＩＯＬ９１５の区域に閉じ込められるわけではない。
【００７８】
図９に描かれる例では、たとえば、領域９０５、９０７、および９０８から形成される、ダイの中心近くのカラムナ区域をコンフィギュレーション、クロック、および他の制御論理のために用いることができる。このカラムから延在する水平方向の区域９０９は、プログラマブルＩＣの幅にわたってクロックおよびコンフィギュレーション信号を分配するのに用いられる。
【００７９】
図９に示されるアーキテクチャを利用するいくつかのＩＣは、ＩＣの大きな部分を構成する規則的なカラムナ構造を中断させる付加的な論理ブロックを含む。付加的な論理ブロックは、プログラマブルブロックおよび／または専用回路構成であり得る。たとえば、ＰＲＯＣ９１０として描かれるプロセッサブロックは、ＣＬＢおよびＢＲＡＭのいくつかの列にわたる。
【００８０】
１つの局面では、ＰＲＯＣ９１０は、専用回路構成として、たとえば、ＩＣのプログラマブル回路構成を実現するダイの一部として作製されるハードワイヤードプロセッサとして実現される。ＰＲＯＣ９１０は、複雑さの範囲がプログラムコードを実行することができる単一のコアなどの個別のプロセッサから１つ以上のコア、モジュール、コプロセッサ、インターフェイスなどを有するプロセッサシステム全体に及ぶ、さまざまな異なるプロセッサ種類および／またはシステムの任意のものを表わすことができる。
【００８１】
別の局面では、ＰＲＯＣ９１０は、アーキテクチャ９００から省略され、かつ記載されるプログラマブルブロックの他の種類のうち１つ以上で置き換えられる。さらに、ＰＲＯＣ９１０の場合にそうであるように、プログラムコードを実行することができるプロセッサを形成するようにプログラマブル回路構成のさまざまなブロックを利用することができるという点で、そのようなブロックを利用して「ソフトプロセッサ」を形成することができる。
【００８２】
「プログラマブル回路構成」という文言は、本明細書中に記載されるさまざまなプログラマブルまたはコンフィギュラブル回路ブロックまたはタイルなどのＩＣ内のプログラマブル回路素子、ならびにＩＣ中にロードされるコンフィギュレーションデータに従ってさまざまな回路ブロック、タイル、および／または素子を選択的に結合する相互接続回路構成を指すことができる。たとえば、ＣＬＢ９０２およびＢＲＡＭ９０３などのＰＲＯＣ９１０外部の図９に示される部分をＩＣのプログラマブル回路構成と考えることができる。
【００８３】
一般的に、プログラマブル回路構成の機能性は、コンフィギュレーションデータがＩＣにロードされるまでは確立されない。コンフィギュレーションビットの組は、ＦＰＧＡなどのＩＣのプログラマブル回路構成をプログラミングするのに用いることができる。コンフィギュレーションビットは典型的に、「コンフィギュレーションビットストリーム」と称される。一般的に、プログラマブル回路構成は、コンフィギュレーションビットストリームをまずＩＣにロードすることなくして動作または機能しない。コンフィギュレーションビットストリームは、プログラマブル回路構成内に特定の回路設計を有効に実現するまたはインスタンス化する。回路設計は、たとえば、プログラマブル回路ブロックの機能的局面およびさまざまなプログラマブル回路ブロック間の物理的接続性を特定する。
【００８４】
「配線接続される（hardwired）」または「ハード化された（hardened）」、すなわちプログラマブルでない、回路構成は、ＩＣの一部として製造される。プログラマブル回路構成とは異なり、配線接続された回路構成または回路ブロックは、コンフィギュレーションビットストリームのロードによるＩＣの製造後には実現されない。配線接続された回路構成は一般的に、たとえばＰＲＯＣ９１０などのＩＣにコンフィギュレーションビットストリームをまずロードすることなく機能する、たとえば専用の回路ブロックおよび相互接続を有すると考えられる。
【００８５】
ある事例では、配線接続された回路構成は、ＩＣ内の１つ以上のメモリ素子に記憶されるレジスタ設定または値に従って設定または選択され得る１つ以上の動作モードを有することができる。動作モードは、たとえば、コンフィギュレーションビットストリームをＩＣにロードすることによって設定可能である。このようにできるにも拘らず、配線される回路構成はプログラマブル回路構成とは考えられない。というのも、配線接続される回路構成は、ＩＣの一部として製造されると、動作可能でありかつ特定の機能を有するからである。
【００８６】
図９は、たとえばプログラマブルファブリックなどのプログラマブル回路構成を含むＩＣを実現するために用いることができる例示的なアーキテクチャを示すことが意図される。たとえば、列中の論理ブロックの数、列の相対的な幅、列の数および順序、列に含まれる論理ブロックの種類、論理ブロックの相対的な大きさ、ならびに図９の一番上に含まれる相互接続／論理実現例は、純粋に例示的である。たとえば、実際のＩＣでは、ユーザ回路設計の効率的な実現を容易にするために、ＣＬＢが現われる場所にはどこにでも、１つよりも多くのＣＬＢの隣接する列が典型的に含まれる。しかしながら、隣接するＣＬＢ列の数はＩＣの全体サイズによって異なり得る。さらに、ＩＣ内のＰＲＯＣ９１０などのブロックのサイズおよび／または位置決めは、図示の目的のみのためであり、この明細書に開示される１つ以上の実施形態の限定として意図されるものではない。
【００８７】
本明細書に開示される発明の構成に従うと、電子システムの記述は、制御フロー構文を同定するように評価され得る。記述から回路設計を生成する際、制御回路構成は、制御フロー構文の機能性を実現する回路設計中に挿入される。制御回路構成は、並列性を増大させ、効率的にリソースを使用し、かつ結果的に得られる回路設計を増大させるために、ハンドシェイクシグナリングなどの機能を果たす。
【００８８】
説明の目的のため、本明細書中に開示されるさまざまな発明の概念の完全な理解を与えるために具体的な術語を述べる。しかしながら、本明細書中で用いる術語は発明の構成の特定の局面を記載する目的のためのみのものであり、限定的であることを意図していない。
【００８９】
本明細書中で用いるような用語「ａ」および「an」は、１または１よりも多くとして定義される。本明細書中で用いるような用語「複数」は、２または２よりも多くとして定義される。本明細書中で用いるような用語「別の」は、少なくとも第２のものまたはそれ以上として定義される。本明細書中で用いるような用語「結合される」は、他に示されなければ、一切の介入要素なしに直接にまたは１つ以上の介入要素が存在して間接的に接続されると定義される。２つの要素は、通信チャネル、経路、ネットワーク、またはシステムを通して、機械的に、電気的に、または通信するようにリンクされて結合されることもできる。
【００９０】
本明細書中で用いるような用語「および／または」は、関連付けられて列挙される項目のうち１つ以上のありとあらゆる可能な組合せを指しかつそれらを包含する。この開示で用いられる際の用語「含む」および／または「含んでいる」は、述べられた特徴、整数、ステップ、動作、要素、および／または構成要素の存在を特定するが、その１つ以上の他の特徴、整数、ステップ、動作、要素、構成要素、および／またはその群の存在または追加を排除するものではないことがさらに理解される。第１、第２などの用語を本明細書中で用いてさまざまな要素を記載することがあるが、これらの用語は１つの要素を別の要素から区別するためにのみ用いられているため、これらの要素はこれらの用語によって限定されるべきではないことも理解される。
【００９１】
用語「ならば」は、文脈に依存して、「とき」または「すると」または「判断することに応答して」または「検出することに応答して」を意味すると解釈されることがある。同様に、「と判断されれば」または「［述べられた条件またはイベント］が検出されれば」という文言は、文脈に依存して、「判断すると」または「判断することに応答して」または「［述べられた条件またはイベント］を検出すると」または「［述べられた条件またはイベント］を検出したことに応答して」を意味すると解釈されることがある。
【００９２】
この開示内で、同じ参照符号は、端子、信号線、配線、およびそれらの対応の信号を参照するのに用いられる。この点において、「信号」、「配線」、「接続」、「端子」、および「ピン」という用語は、その時々によってこの開示内で相互交換可能に用いられることがある。「信号」、「配線」などの用語は、たとえば、単一の配線を通した単一のビットの搬送または複数の並列の配線を通した複数の並列のビットの搬送などの、１つ以上の信号を表わすことができることも認めるべきである。さらに、各々の配線または信号は、場合によっては、信号または配線によって接続される２つ以上の構成要素同士の間の双方向通信を表わすことがある。
【００９３】
この開示内に記載される１つ以上の局面は、ハードウェアにおいてまたはハードウェアとソフトウェアとの組合せにおいて実現可能である。１つ以上の局面は、１つのシステムにおいて集中された態様で、または異なる素子がいくつかの相互接続されたシステムにわたって広がっている分散された態様で、実現することができる。本明細書中に記載される方法の少なくとも一部を実行するように適合される任意の種類のデータ処理システムまたは他の装置が適している。
【００９４】
１つ以上の局面はさらに、本明細書中に記載の方法の実現例を可能化するすべての特徴を含むコンピュータプログラム製品に埋込まれることができる。コンピュータプログラム製品は、コンピュータ読出可能データ記憶媒体を含む。本明細書中に規定されるように、「コンピュータ読出可能記憶媒体」という用語は、命令実行システム、装置、またはデバイスが用いるためのまたはそれに関連したプログラムコードを内蔵するまたは記憶する記憶媒体を意味する。コンピュータ読出可能記憶媒体は非一時的であり、そのためそれ自体一時的に伝播する信号ではない。コンピュータ読出可能記憶媒体の例は、光学的媒体、磁気的媒体、光磁気媒体、ランダムアクセスメモリなどのコンピュータメモリ、たとえばハードディスクなどのバルク記憶デバイスなどを含み得るが、それらに限定されない。
【００９５】
図中のフロー図およびブロック図は、本明細書中に開示される発明の構成のさまざまな局面に従って、システム、方法、およびコンピュータプログラム製品の可能な実現例のアーキテクチャ、機能性、および動作を示す。この点において、フロー図またはブロック図中の各ブロックは、特定される論理的機能を実現するための１つ以上の実行可能な命令を含むモジュール、セグメント、またはコードの一部を表わすことがある。いくつかの代替的な実現例では、ブロック中に注記される機能は、図に注記される順序を外れて生じることがあることにも注目すべきである。たとえば、関与する機能性に依存して、続けて示される２つのブロックが実質的に同時に実行されることがあったり、またはブロックが逆の順で実行されたりすることがあり得る。ブロック図および／またはフロー図の図示の各ブロック、ならびにブロック図および／またはフロー図の図示中のブロックの組合せは、特定される機能もしくはアクトを行なう特殊用途ハードウェアベースのシステムまたは特殊用途ハードウェアとコンピュータ命令との組合せによって実現可能であることも注記される。
【００９６】
このように、この開示を通じて、「処理」または「計算」または「算出」または「判断」または「表示」などの用語を利用する表現は、コンピュータシステムのレジスタおよび／またはメモリ内の物理的（電子的）量として表わされるデータを操作する、かつこれをコンピュータシステムメモリおよび／またはレジスタもしくは他のそのような情報記憶、送信、もしくは表示デバイス内の物理的量として同様に表わされる他のデータに変換する、たとえばコンピュータシステムまたは同様の電子計算デバイスなどのデータ処理システムの行為およびプロセスを指す。
【００９７】
以下の請求項中のすべての手段またはステッププラス機能要素の対応の構造、材料、アクト、および均等物は、具体的に請求されるような他の請求される要素と組合せて、機能を果たすための任意の構造、材料、またはアクトを含むことが意図される。
【００９８】
方法は、高位プログラミング言語記述の第１の関数と、高位プログラミング記述の制御フロー構文内に含有される第２の関数とを判断することと、第２の関数が第１の関数のデータ消費関数であると判断することと、回路設計内で、プロセッサを用いて、ローカルメモリを含むポートを自動的に生成することとを含む。ポートは、回路設計内で、第１の関数の第１の回路ブロック実現例を第２の関数の第２の回路ブロック実現例に結合する。
【００９９】
方法は、非自己同期ポートとして、第１の回路ブロックと第２の回路ブロックとの間でハンドシェイクシグナリングを行なうことによって、回路設計内で、第２の回路ブロックの動作を制御する制御回路構成を自動的に生成することを含んでもよい。
【０１００】
１つの局面では、制御回路構成を自動的に生成することは、フロー制御構文を実現する開始制御回路と終了制御回路とを生成することを含んでもよい。
【０１０１】
別の局面では、制御回路構成を自動的に生成することは、第１の回路ブロックからダン制御信号を受信することに応答して制御フロー構文の条件に従って開始制御信号を第２の回路ブロックまたは第３の回路ブロックに出力する開始制御回路を生成することを含んでもよい。第２の回路ブロックまたは第３の回路ブロックからダン制御信号を受信することに応答して開始制御信号を第４の回路ブロックに与える終了制御回路が生成されてもよい。第４の回路ブロックは、第２の関数または第３の関数のデータ消費関数である関数から生成される。
【０１０２】
別の局面では、制御回路構成を自動的に生成することは、第１の回路ブロックからダン制御信号を受信することに応答して制御フロー構文の条件に従って開始制御信号を第２の回路ブロックに出力する開始制御回路を生成することを含んでもよい。第２の回路ブロックからダン制御信号を受信することに応答して開始制御信号を第３の回路ブロックに与える終了制御回路が生成されてもよい。第３の回路ブロックは、第２の関数のデータ消費関数である第３の関数から生成される。
【０１０３】
また別の局面では、制御回路構成を自動的に生成することは、第１の回路ブロックからダン制御信号を受信することに応答して第２の回路ブロックに開始制御信号を出力する開始制御回路を生成することを含んでもよい。制御フロー構文の終了条件が満たされると判断することに応答して開始制御信号を第３の回路ブロックに与える終了制御回路が生成されてもよい。第３の回路ブロックは、第２の関数のデータ消費関数である第３の関数から生成される。
【０１０４】
開始制御回路は、フロー制御構文の終了条件を終了制御回路に通信してもよい。さらに、終了制御回路は、開始制御回路および終了制御回路の両者が終了条件を検出することに応答して開始制御信号を第３の回路ブロックに与えてもよい。
【０１０５】
システムは、実行可能な動作を開始するようにプログラミングされるプロセッサを含む。実行可能な動作は、高位プログラミング言語記述の第１の関数と高位プログラミング記述の制御フロー構文内に含有される第２の関数とを判断することと、第２の関数が第１の関数のデータ消費関数であると判断することと、回路設計内で、ローカルメモリを含むポートを自動的に生成することとを含む。ポートは、回路設計内で、第１の関数の第１の回路ブロック実現例を第２の関数の第２の回路ブロック実現例に結合する。
【０１０６】
実行可能な動作は、非自己同期ポートとして、第１の回路ブロックと第２の回路ブロックとの間でハンドシェイクシグナリングを行なうことによって、回路設計内で、第２の回路ブロックの動作を制御する制御回路構成を自動的に生成することを含んでもよい。
【０１０７】
１つの局面では、制御回路構成を自動的に生成することは、フロー制御構文を実現する開始制御回路と終了制御回路とを生成することを含んでもよい。
【０１０８】
別の局面では、制御回路構成を自動的に生成することは、第１の回路ブロックからダン制御信号を受信することに応答して制御フロー構文の条件に従って開始制御信号を第２の回路ブロックまたは第３の回路ブロックに出力する開始制御回路を生成することを含んでもよい。第２の回路ブロックまたは第３の回路ブロックからダン制御信号を受信することに応答して開始制御信号を第４の回路ブロックに与える終了制御回路が生成されてもよい。第４の回路ブロックは、第２の関数または第３の関数のデータ消費関数である関数から生成される。
【０１０９】
別の局面では、制御回路構成を自動的に生成することは、第１の回路ブロックからダン制御信号を受信することに応答して制御フロー構文の条件に従って開始制御信号を第２の回路ブロックに出力する開始制御回路を生成することを含む。第２の回路ブロックからダン制御信号を受信することに応答して開始制御信号を第３の回路ブロックに与える終了制御回路が生成されてもよい。第３の回路ブロックは、第２の関数のデータ消費関数である第３の関数から生成される。
【０１１０】
また別の局面では、制御回路構成を自動的に生成することは、第１の回路ブロックからダン制御信号を受信することに応答して第２の回路ブロックに開始制御信号を出力する開始制御回路を生成することを含んでもよい。制御フロー構文の終了条件が満たされると判断することに応答して開始制御信号を第３の回路ブロックに与える終了制御回路が生成されてもよい。第３の回路ブロックは、第２の関数のデータ消費関数である第３の関数から生成される。
【０１１１】
開始制御回路は、フロー制御構文の終了条件を終了制御回路に通信してもよい。さらに、終了制御回路は、開始制御回路および終了制御回路の両者が終了条件を検出することに応答して、開始制御信号を第３の回路ブロックに与えてもよい。
【０１１２】
非一時的コンピュータ読出可能記憶媒体は、その上に記憶される命令を含む。命令は、プロセッサによって実行されると、方法を実行する。方法は、高位プログラミング言語記述の第１の関数と高位プログラミング記述の制御フロー構文内に含有される第２の関数とを判断することと、第２の関数が第１の関数のデータ消費関数であると判断することと、回路設計内で、ローカルメモリを含むポートを自動的に生成することとを含む。ポートは、回路設計内で、第１の関数の第１の回路ブロック実現例を第２の関数の第２の回路ブロック実現例に結合する。
【０１１３】
方法は、非自己同期ポートとして、第１の回路ブロックと第２の回路ブロックとの間でハンドシェイクシグナリングを行なうことによって、回路設計内で、第２の回路ブロックの動作を制御する制御回路構成を自動的に生成することを含んでもよい。
【０１１４】
１つの局面では、制御回路構成を自動的に生成することは、フロー制御構文を実現する開始制御回路と終了制御回路とを生成することを含んでもよい。
【０１１５】
開始制御回路はフロー制御構文の終了条件を終了制御回路に通信してもよい。
この開示内に記載される特徴は、その精神または必須の属性から逸脱することなく他の形態で具体化されることができる。したがって、そのような特徴および実現例の範囲を示すものとして、以上の開示よりもむしろ以下の請求項を参照すべきである。
【図１】
0006655028.tif 000002
【図２】
0006655028.tif 000003
【図３−１】
0006655028.tif 000004
【図３−２】
0006655028.tif 000005
【図４−１】
0006655028.tif 000006
【図４−２】
0006655028.tif 000007
【図５】
0006655028.tif 000008
【図６】
0006655028.tif 000009
【図７】
0006655028.tif 000010
【図８】
0006655028.tif 000011
【図９】
0006655028.tif 000012