JP2005520243A - 合成方法および装置 - Google Patents
合成方法および装置 Download PDFInfo
- Publication number
- JP2005520243A JP2005520243A JP2003575692A JP2003575692A JP2005520243A JP 2005520243 A JP2005520243 A JP 2005520243A JP 2003575692 A JP2003575692 A JP 2003575692A JP 2003575692 A JP2003575692 A JP 2003575692A JP 2005520243 A JP2005520243 A JP 2005520243A
- Authority
- JP
- Japan
- Prior art keywords
- subnetwork
- function
- output
- index
- functions
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
- G06F30/327—Logic synthesis; Behaviour synthesis, e.g. mapping logic, HDL to netlist, high-level language to RTL or netlist
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99931—Database or file accessing
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99941—Database schema or data structure
- Y10S707/99943—Generating database or data structure, e.g. via user interface
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Design And Manufacture Of Integrated Circuits (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Communication Control (AREA)
Abstract
本発明のいくつかの実施形態は、部分回路網を事前集計する方法を提供する。この方法は、(1)ある関数を実行する部分回路網を生成し、(2)この関数に基づいてパラメータを生成し、(3)生成されたパラメータに基づいて部分回路網を記憶構造体内に記憶する。いくつかの実施形態においては、生成された部分回路網はいくつかの回路素子を有する。また、いくつかの実施形態においては、生成された部分回路網は2つまたはそれ以上の関数の集合を実行する。いくつかの実施形態においては、各々の生成された部分回路網を符号化形式で記憶する。いくつかの実施形態は、設計の回路記述を作成する方法を提供する。この方法は、(1)設計から部分回路網候補を選択し、(2)部分回路網によって実行される出力関数を識別し、(3)識別された出力関数に基づいて、代替部分回路網を記憶する記憶構造体から代替部分回路網を識別し、(4)場合によって、選択した部分回路網候補を識別された代替部分回路網に置き換える。いくつかの実施形態においては、この方法を実行して設計を特定の技術ライブラリにマッピングする。いくつかの実施形態では、部分回路網の出力関数から取り出されたパラメータに基づいて複数の部分回路網を記憶するデータ記憶構造体が提供される。
Description
本発明は、合成方法および装置に関する。
組合せ論理シンセサイザは、集積回路(「IC」)の特定の領域の効率的な回路記述を生成する。IC領域は、IC全体またはその一部(すなわち、ブロック)である。ICまたはICブロックは、通常ブール変数の集合Xに依存するブール組合せ論理関数の集合Fを実行する。ブール関数の集合Fは、通常いくつかの関数f_1,...,f_mを含み、ブール変数の集合Xは、通常いくつかの変数X_1,...,X_nを含む。
IC設計に関して、変数の集合XはIC領域への入力を含む。また、ブール関数f_iの一部または全部の出力は、IC領域の出力の役目を果たす。さらに、各関数f_iは、その関数への1つまたは複数の入力について実行しなければならない論理演算を指定する。各ブール関数f_i(X)の出力は真または偽である。
各関数f_iは最初、レジスタ転送レベル(RTL)記述(例えば、VerilogまたはVHDL記述)、ブール式、または技術レベルのネットリストなどのさまざまな形式で与えられる。これらの記述形式は相互に交換可能で、そのような記述を別の記述に変換する周知の方法がある。
シンセサイザによって生み出される回路記述の「効率」は、通常、推定「サイズ」および「深さ」で測定される。しかし、他の判定基準も可能である。サイズおよび深さは、記述の所望の出力形式で定義される。IC設計に通常使用される2つの出力形式は、(1)技術レベル出力と(2)中間レベル出力である。
技術レベル設計は、通常、目標ライブラリと呼ばれる特定の技術ライブラリと結合した回路記述である。技術レベル設計の回路素子は、周知の物理特性(例えば、周知のタイミング挙動、消費電力、サイズなど)を備えたユニットとしてシリコンで実施される。これはそのような回路素子とその関連論理および物理的挙動が目標ライブラリ内に記述されているためである。したがって、技術レベルの出力では、「サイズ」と「深さ」という用語は、通常、回路全体の実際の物理特性を指す。例えば、「サイズ」は回路素子の数、回路素子の総面積、総消費電力などで測定できるが、「深さ」は、通常、回路の段数に関連する回路のタイミング挙動で測定できる。
IC設計に関して、変数の集合XはIC領域への入力を含む。また、ブール関数f_iの一部または全部の出力は、IC領域の出力の役目を果たす。さらに、各関数f_iは、その関数への1つまたは複数の入力について実行しなければならない論理演算を指定する。各ブール関数f_i(X)の出力は真または偽である。
各関数f_iは最初、レジスタ転送レベル(RTL)記述(例えば、VerilogまたはVHDL記述)、ブール式、または技術レベルのネットリストなどのさまざまな形式で与えられる。これらの記述形式は相互に交換可能で、そのような記述を別の記述に変換する周知の方法がある。
シンセサイザによって生み出される回路記述の「効率」は、通常、推定「サイズ」および「深さ」で測定される。しかし、他の判定基準も可能である。サイズおよび深さは、記述の所望の出力形式で定義される。IC設計に通常使用される2つの出力形式は、(1)技術レベル出力と(2)中間レベル出力である。
技術レベル設計は、通常、目標ライブラリと呼ばれる特定の技術ライブラリと結合した回路記述である。技術レベル設計の回路素子は、周知の物理特性(例えば、周知のタイミング挙動、消費電力、サイズなど)を備えたユニットとしてシリコンで実施される。これはそのような回路素子とその関連論理および物理的挙動が目標ライブラリ内に記述されているためである。したがって、技術レベルの出力では、「サイズ」と「深さ」という用語は、通常、回路全体の実際の物理特性を指す。例えば、「サイズ」は回路素子の数、回路素子の総面積、総消費電力などで測定できるが、「深さ」は、通常、回路の段数に関連する回路のタイミング挙動で測定できる。
中間レベル設計は、特定の技術ライブラリに結びついていない回路記述である。それどころか、この回路記述は、以降のステップで特定の目標ライブラリにマッピングできる何らかの中間形式をとる。中間レベル出力は、特定の目標ライブラリに結びつかず任意の複雑な論理関数を演算する回路素子を含むことができる。
中間設計素子は必ずしも直接の物理IC形態に結びついているわけではない。中間レベル設計の「サイズ」は、通常、最終面積推定値、設計の回路素子が実行する関数のすべての変数の総和、または他の何らかの抽象的な定量によって測定される。同様に、中間レベル設計の「深さ」はしばしば抽象的に定量化される。例えば、中間レベル設計の「深さ」は、回路の段数プラス各回路素子の内部の深さの推定値として測定できる。また、他のより高度な推定値も可能である。
効率的な回路設計を引き出すという問題は広範に研究されてきた。これはICのサイズと速度の両方が回路設計の効率に直接依存するからである。組合せ論理最適化の問題についての現在の3つの手法は、(1)規則ベースの技法、(2)因数分解による最適化技法、および(3)2レベル最小化技法を含む。
規則ベースのシステムにおいては、入力は、通常、技術レベルの記述である。ここでシステムは、比較的小さい固定の規則の集合に従って繰り返し改善を試みる。各規則はある局所構成とこの構成を異なる回路素子の組と交換する方法を規定する。そのような規則は専門家およびプログラマによって定義され、ハンドコードされてきたが、時にはシステムのエンド・ユーザによってパラメータ化することも可能である。規則の集合はシナリオまたはスクリプトとして組み合わされる(エンド・ユーザによって、または専門家の手でテンプレートとして)。スクリプトは順次適用されるいくつかの最適化パスと各パスの際に使用すべき規則の部分集合(およびそのパラメータ)を規定する。
因数分解による最適化システムでは、入力および出力は、通常、任意のブール関数を実施する回路素子の中間レベルの記述で表される。これらのシステムは、回路の異なる部材の共通の副関数(すなわち、共通因数)を識別しようとする代数因数分解アルゴリズムを適用することで最適化を実行する。そのような副関数を複数回実現する代わりに、関数が抽出され(一度別々に実現され)、その結果がそれを必要とする複数の場所に帰還される。これらのシステムはまた、ノードのコラプシング(すなわち、複数のノードを1つにすること)などの他の方法によって設計を変更する。
2レベル最小化は、2レベル論理、例えば、積の総和で表される論理関数のための特別の最適化技法である。周知のアルゴリズムは非常に強力であり、部分的には最適ですらある。しかし、その形式では単純論理関数しか効率的に表すことができないので、2レベル最小化の適用は限られている。
また、PLAフォールディング、FPGAのためのルックアップ・テーブル最適化などの特殊な基本チップ技術のために開発されてきたさまざまなアルゴリズムと技法がある。これらはより一般的な回路の最適化には適さない極めて特殊なアルゴリズムである。
中間設計素子は必ずしも直接の物理IC形態に結びついているわけではない。中間レベル設計の「サイズ」は、通常、最終面積推定値、設計の回路素子が実行する関数のすべての変数の総和、または他の何らかの抽象的な定量によって測定される。同様に、中間レベル設計の「深さ」はしばしば抽象的に定量化される。例えば、中間レベル設計の「深さ」は、回路の段数プラス各回路素子の内部の深さの推定値として測定できる。また、他のより高度な推定値も可能である。
効率的な回路設計を引き出すという問題は広範に研究されてきた。これはICのサイズと速度の両方が回路設計の効率に直接依存するからである。組合せ論理最適化の問題についての現在の3つの手法は、(1)規則ベースの技法、(2)因数分解による最適化技法、および(3)2レベル最小化技法を含む。
規則ベースのシステムにおいては、入力は、通常、技術レベルの記述である。ここでシステムは、比較的小さい固定の規則の集合に従って繰り返し改善を試みる。各規則はある局所構成とこの構成を異なる回路素子の組と交換する方法を規定する。そのような規則は専門家およびプログラマによって定義され、ハンドコードされてきたが、時にはシステムのエンド・ユーザによってパラメータ化することも可能である。規則の集合はシナリオまたはスクリプトとして組み合わされる(エンド・ユーザによって、または専門家の手でテンプレートとして)。スクリプトは順次適用されるいくつかの最適化パスと各パスの際に使用すべき規則の部分集合(およびそのパラメータ)を規定する。
因数分解による最適化システムでは、入力および出力は、通常、任意のブール関数を実施する回路素子の中間レベルの記述で表される。これらのシステムは、回路の異なる部材の共通の副関数(すなわち、共通因数)を識別しようとする代数因数分解アルゴリズムを適用することで最適化を実行する。そのような副関数を複数回実現する代わりに、関数が抽出され(一度別々に実現され)、その結果がそれを必要とする複数の場所に帰還される。これらのシステムはまた、ノードのコラプシング(すなわち、複数のノードを1つにすること)などの他の方法によって設計を変更する。
2レベル最小化は、2レベル論理、例えば、積の総和で表される論理関数のための特別の最適化技法である。周知のアルゴリズムは非常に強力であり、部分的には最適ですらある。しかし、その形式では単純論理関数しか効率的に表すことができないので、2レベル最小化の適用は限られている。
また、PLAフォールディング、FPGAのためのルックアップ・テーブル最適化などの特殊な基本チップ技術のために開発されてきたさまざまなアルゴリズムと技法がある。これらはより一般的な回路の最適化には適さない極めて特殊なアルゴリズムである。
したがって、単純論理関数またはハンドコードされた関数に限定されない強力な論理シンセサイザが必要である。理想的には、そのようなシンセサイザは事前集計された部分回路網の豊かな集合を使用する。そのような手法では、事前集計された部分回路網を効率的に記憶し識別する索引付け方法が必要である。理想的には、そのような索引付け方法では、多素子および/または多機能部分回路網を効率よく記憶して識別することができる。
いくつかの現在の手法は技術レベル設計を簡単な回路素子の特定の技術レベル・ライブラリにマッピングするための索引付け方法を使用する。現在の手法は単一関数照会を実現するライブラリ内にすべての回路素子を発見する。各ライブラリの回路素子が一致のあるなしにかかわらず試験されるように以前のフィルタが構築された。まず簡単な計算可能ないくつかの特性を検査することで実行され(大半の可能性を迅速に除外し)、次に等価性の最終試験を実行する(論理関数の何らかの表現に基づいて)ことでこれらの試験は実行された。
いくつかの現在の手法は技術レベル設計を簡単な回路素子の特定の技術レベル・ライブラリにマッピングするための索引付け方法を使用する。現在の手法は単一関数照会を実現するライブラリ内にすべての回路素子を発見する。各ライブラリの回路素子が一致のあるなしにかかわらず試験されるように以前のフィルタが構築された。まず簡単な計算可能ないくつかの特性を検査することで実行され(大半の可能性を迅速に除外し)、次に等価性の最終試験を実行する(論理関数の何らかの表現に基づいて)ことでこれらの試験は実行された。
本発明のいくつかの実施形態は、部分回路網を事前集計する方法を提供する。この方法は、(1)ある関数を実行する部分回路網を生成し、(2)この関数に基づいてパラメータを生成し、(3)生成されたパラメータに基づいて部分回路網を記憶構造体内に記憶する。いくつかの実施形態においては、生成された部分回路網はいくつかの回路素子を有する。また、いくつかの実施形態においては、生成された部分回路網は2つまたはそれ以上の関数の集合を実行する。生成されたパラメータはいくつかの実施形態では記憶構造体へのインデックスである。また、いくつかの実施形態においては、部分回路網が実行する関数の出力の記号表現に基づいてこのパラメータを生成する。関数の出力の記号表現は関数名とは異なる。記号表現の例は、二分決定グラフ、真理値表、またはブール式を含む。いくつかの実施形態では各々の生成された部分回路網のグラフ構造を符号化形式で記憶する。
本発明のいくつかの実施形態は、設計の回路記述を作成する方法を提供する。設計から、この方法は部分回路網候補を選択する。次に、この方法は部分回路網によって実行される出力関数を識別する。識別された出力関数に基づいて、この方法は代替部分回路網を記憶する記憶構造体から代替部分回路網を識別する。次に、選択した部分回路網候補を識別された代替部分回路網に置き換えるか否かを決定する。この方法が選択された部分回路網候補を置き換える決定をした場合、設計内のこの部分回路網を識別された代替部分回路網に置き換える。いくつかの実施形態においては、選択された部分回路網はいくつかの回路素子を有する。また、いくつかの実施形態においては、選択された部分回路網は2つまたはそれ以上の関数の集合を実行する。生成されたパラメータは、いくつかの実施形態では記憶構造体へのインデックスである。
本発明のいくつかの実施形態は、設計の回路記述を作成する方法を提供する。設計から、この方法は部分回路網候補を選択する。次に、この方法は部分回路網によって実行される出力関数を識別する。識別された出力関数に基づいて、この方法は代替部分回路網を記憶する記憶構造体から代替部分回路網を識別する。次に、選択した部分回路網候補を識別された代替部分回路網に置き換えるか否かを決定する。この方法が選択された部分回路網候補を置き換える決定をした場合、設計内のこの部分回路網を識別された代替部分回路網に置き換える。いくつかの実施形態においては、選択された部分回路網はいくつかの回路素子を有する。また、いくつかの実施形態においては、選択された部分回路網は2つまたはそれ以上の関数の集合を実行する。生成されたパラメータは、いくつかの実施形態では記憶構造体へのインデックスである。
いくつかの実施形態においては、この方法は設計を特定の技術ライブラリにマッピングする。これらの実施形態のいくつかでは、選択された部分回路網は指令された非周期グラフ構造を有することができる。また、いくつかの実施形態においては、選択された部分回路網はいくつかの出力ノードを有する。さらに、いくつかの実施形態においては、この方法を用いて、1つの技術に基づく設計を、第2の技術に基づく設計にマッピングする。
いくつかの実施形態は、回路素子の集合を有する部分回路網を符号化する方法を提供する。この方法は最初に、各グラフがノードの集合を有する複数のグラフを定義する。次に、各グラフについて、特定の各々のグラフの局所関数の各集合が特定のグラフの各ノードの1つの局所関数を含み、各グラフの局所関数の集合のうちの1つとの組合せが部分回路網を指定する局所関数の異なる集合を指定する。この方法はこのグラフと局所関数とを記憶する。各々の特定の指定された部分回路網について、この方法は特定の局所関数の集合を指定する識別子と特定の部分回路網を指定する特定のグラフを記憶する。
本発明の新規な特徴は添付の特許請求の範囲に記載する。しかし、説明のために、本発明のいくつかの実施形態を以下の図に示す。
いくつかの実施形態は、回路素子の集合を有する部分回路網を符号化する方法を提供する。この方法は最初に、各グラフがノードの集合を有する複数のグラフを定義する。次に、各グラフについて、特定の各々のグラフの局所関数の各集合が特定のグラフの各ノードの1つの局所関数を含み、各グラフの局所関数の集合のうちの1つとの組合せが部分回路網を指定する局所関数の異なる集合を指定する。この方法はこのグラフと局所関数とを記憶する。各々の特定の指定された部分回路網について、この方法は特定の局所関数の集合を指定する識別子と特定の部分回路網を指定する特定のグラフを記憶する。
本発明の新規な特徴は添付の特許請求の範囲に記載する。しかし、説明のために、本発明のいくつかの実施形態を以下の図に示す。
以下に、説明のために多数の具体例を挙げる。しかし、当業者であれば、本発明はこれらの特定の具体例を使用せずに実施できることを理解することができるだろう。他の例では、本発明を不要な具体例で分かりにくくしないために、周知の構造および装置はブロック図で示している。
I.用語
本明細書のいくつかの用語を以下に定義する。
IC領域はIC全体またはICの一部(またはブロック)を指す。
設計の論理記述は設計の論理表現を指す。論理記述の例はRTL記述(例えば、Verilog、VHDL、HDL、またはBLIFF記述)、組合せ論理表現(例えば、ブール式)などを含む。設計の回路記述は設計の回路表現を指す。回路記述の例は技術レベルの設計(結合回路網とも呼ばれる)、中間レベル設計(非結合回路網とも呼ばれる)などを含む。
IC設計はさまざまな回路素子を使用する。そのような素子は通常、入力と出力を有する。これらの回路素子は組合せおよび順序素子を含む。組合せ素子は1つまたは複数の離散値入力を受け取り、受け取った入力の値と組合せ素子が実行する1つまたは複数の論理関数に依存する1つまたは複数の離散値出力を生成する。組合せ素子の出力は素子の以前の状態に依存しない。ブール組合せ素子は組合せ素子の一例である。ブール組合せ素子では、入力と出力は2つの値のうちの1つを有することができる。各ブール組合せ素子は1つまたは複数のブール関数を計算する。ブール組合せ回路素子の例は低レベル素子(例えば、インバータ、NANDゲート、NORゲート、ANDゲート、ORゲート、XORゲート)または高レベル素子(例えば、多重化装置、加算器など)を含む。
順序素子はその素子の1つまたは複数の以前の状態(例えば、その入力および/または出力の1つまたは複数の以前の値)に依存する出力を生成する素子である。いくつかの順序素子はある時点に入力で受け取る値を記憶し、後でこれらの値を解放する(クロックまたは制御信号などに応じて)。そのような素子の例は、ラッチ、レジスタ、フリップフロップ、RAM、ROMなどである。
特定の技術ライブラリに結びついている回路素子は、周知の物理特性(例えば、周知のタイミング挙動、消費電力、サイズなど)を備えたユニットとしてシリコンで実施される。基礎の技術および設計スタイルに応じて、回路素子は標準のセル、カスタム・ブロック、ゲート・アレイまたはFPGAの基本セルなどに対応することができる。
I.用語
本明細書のいくつかの用語を以下に定義する。
IC領域はIC全体またはICの一部(またはブロック)を指す。
設計の論理記述は設計の論理表現を指す。論理記述の例はRTL記述(例えば、Verilog、VHDL、HDL、またはBLIFF記述)、組合せ論理表現(例えば、ブール式)などを含む。設計の回路記述は設計の回路表現を指す。回路記述の例は技術レベルの設計(結合回路網とも呼ばれる)、中間レベル設計(非結合回路網とも呼ばれる)などを含む。
IC設計はさまざまな回路素子を使用する。そのような素子は通常、入力と出力を有する。これらの回路素子は組合せおよび順序素子を含む。組合せ素子は1つまたは複数の離散値入力を受け取り、受け取った入力の値と組合せ素子が実行する1つまたは複数の論理関数に依存する1つまたは複数の離散値出力を生成する。組合せ素子の出力は素子の以前の状態に依存しない。ブール組合せ素子は組合せ素子の一例である。ブール組合せ素子では、入力と出力は2つの値のうちの1つを有することができる。各ブール組合せ素子は1つまたは複数のブール関数を計算する。ブール組合せ回路素子の例は低レベル素子(例えば、インバータ、NANDゲート、NORゲート、ANDゲート、ORゲート、XORゲート)または高レベル素子(例えば、多重化装置、加算器など)を含む。
順序素子はその素子の1つまたは複数の以前の状態(例えば、その入力および/または出力の1つまたは複数の以前の値)に依存する出力を生成する素子である。いくつかの順序素子はある時点に入力で受け取る値を記憶し、後でこれらの値を解放する(クロックまたは制御信号などに応じて)。そのような素子の例は、ラッチ、レジスタ、フリップフロップ、RAM、ROMなどである。
特定の技術ライブラリに結びついている回路素子は、周知の物理特性(例えば、周知のタイミング挙動、消費電力、サイズなど)を備えたユニットとしてシリコンで実施される。基礎の技術および設計スタイルに応じて、回路素子は標準のセル、カスタム・ブロック、ゲート・アレイまたはFPGAの基本セルなどに対応することができる。
技術ライブラリ(目標ライブラリとも呼ばれる)はICを実施する特定の技術に使用できる標準の回路素子を含む。そのようなライブラリは、通常、その回路素子の論理および物理特性の記述を含む。回路網は、通常、電気的に接続する必要がある回路素子であるピンの集合として定義される。回路網はピンを接続する物理的配線(例えば、金属またはポリシリコン配線)の網またはピンの1つの組から別の組へ論理信号(例えば、2進信号)を伝搬する純粋に抽象的な接続として観察できる。回路網リストは回路網のリストである。
技術レベル設計はIC領域の回路記述である。この記述は特定の技術ライブラリに結びついている(すなわち、特定の技術ライブラリからの回路素子のみを含む)。中間レベル設計はIC領域の回路記述でもある。しかし、この記述は特定の技術ライブラリには結びついていない(すなわち、その回路素子のすべてまたは一部がいかなる技術ライブラリの部分でもない)。それどころか、この回路記述は以降のステップで特定の目標ライブラリにマッピングできる何らかの中間形式をとる。言い換えれば、中間レベル出力は特定の目標ライブラリに結びつかず任意の複雑な論理関数を演算する回路素子を含む。
回路網は、複数のIC、IC全体、またはICの部分の回路記述を指す。回路網は技術レベルの設計または中間レベルの設計である。技術レベルの設計である回路網は結合回路網である(すなわち、その回路素子が特定の技術ライブラリに「結合」している)。他方、中間レベルの設計である回路網は非結合回路網である(すなわち、その回路素子が特定の技術ライブラリに「結合」していない)。
回路網内の回路素子は回路網内のノードとも呼ばれる。回路網の各組合せノード(すなわち、各組合せ論理回路素子)は各々が組合せ論理ノードの局所関数と呼ばれる組合せ論理関数の集合を実行する。回路網が特定の技術ライブラリに結びついていない時には、回路網の回路素子は、通常、物理特性(サイズ、タイミング挙動など)に関連せず、組合せ論理ノードの局所関数は任意の複雑な論理関数でよい。
技術レベル設計はIC領域の回路記述である。この記述は特定の技術ライブラリに結びついている(すなわち、特定の技術ライブラリからの回路素子のみを含む)。中間レベル設計はIC領域の回路記述でもある。しかし、この記述は特定の技術ライブラリには結びついていない(すなわち、その回路素子のすべてまたは一部がいかなる技術ライブラリの部分でもない)。それどころか、この回路記述は以降のステップで特定の目標ライブラリにマッピングできる何らかの中間形式をとる。言い換えれば、中間レベル出力は特定の目標ライブラリに結びつかず任意の複雑な論理関数を演算する回路素子を含む。
回路網は、複数のIC、IC全体、またはICの部分の回路記述を指す。回路網は技術レベルの設計または中間レベルの設計である。技術レベルの設計である回路網は結合回路網である(すなわち、その回路素子が特定の技術ライブラリに「結合」している)。他方、中間レベルの設計である回路網は非結合回路網である(すなわち、その回路素子が特定の技術ライブラリに「結合」していない)。
回路網内の回路素子は回路網内のノードとも呼ばれる。回路網の各組合せノード(すなわち、各組合せ論理回路素子)は各々が組合せ論理ノードの局所関数と呼ばれる組合せ論理関数の集合を実行する。回路網が特定の技術ライブラリに結びついていない時には、回路網の回路素子は、通常、物理特性(サイズ、タイミング挙動など)に関連せず、組合せ論理ノードの局所関数は任意の複雑な論理関数でよい。
II.トップ・レベル・アーキテクチャおよびフロー
図1は、本発明のいくつかの実施形態の論理シンセサイザ100のソフトウェア・アーキテクチャを示す。シンセサイザ100は特定の技術ライブラリに結びついている、または結びついていない回路網上で動作する。このシンセサイザは、回路網設計135を入力にとり、1つまたは複数の目的に関してこの設計を最適化する。
特に、このシンセサイザは同じ入力の集合を受け入れる修正された結合または非結合回路網を生成し、シンセサイザに供給される元の回路網と同じ出力の集合を生成する。しかし、修正回路網は設計を最適化するために使用される1つまたは複数の目的に関しては優れている。例えば、修正回路網はノードおよび/または中間入力の数が少なく、または物理特性(サイズ、タイミングなど)の点で優れている。
いくつかの実施形態においては、ユーザはシンセサイザが最適化する目的を定義することができる。また、いくつかの実施形態においては、シンセサイザ100は受け取った1つまたは複数の目的のための組合せ論理回路網設計を1つまたは複数の制約に関して最適化する。これらの目的と同様、制約は設計のサイズと深さに関連することができる。
図1は、本発明のいくつかの実施形態の論理シンセサイザ100のソフトウェア・アーキテクチャを示す。シンセサイザ100は特定の技術ライブラリに結びついている、または結びついていない回路網上で動作する。このシンセサイザは、回路網設計135を入力にとり、1つまたは複数の目的に関してこの設計を最適化する。
特に、このシンセサイザは同じ入力の集合を受け入れる修正された結合または非結合回路網を生成し、シンセサイザに供給される元の回路網と同じ出力の集合を生成する。しかし、修正回路網は設計を最適化するために使用される1つまたは複数の目的に関しては優れている。例えば、修正回路網はノードおよび/または中間入力の数が少なく、または物理特性(サイズ、タイミングなど)の点で優れている。
いくつかの実施形態においては、ユーザはシンセサイザが最適化する目的を定義することができる。また、いくつかの実施形態においては、シンセサイザ100は受け取った1つまたは複数の目的のための組合せ論理回路網設計を1つまたは複数の制約に関して最適化する。これらの目的と同様、制約は設計のサイズと深さに関連することができる。
以下の実施形態においては、シンセサイザは、組合せ論理回路網設計を入力として受け取る。以下のいくつかの例で、組合せ論理回路網設計はブール回路網設計である。いくつかの実施形態においては、当業者であれば、組合せ論理設計は3つ以上の離散的状態を有することができる入力を受け取り、および/または出力を生成する多値回路素子を含むことができるということを理解することができるだろう。
また、他の実施形態では、シンセサイザ100は別の形式の出発設計を受け取る。例えば、シンセサイザ100は出発設計の論理表現を受け取ることができる(例えば、Verilog,VHDL、HDL、BLIFFなどの論理形式の出発設計を受け取ることができる)。これらの実施形態のいくつかでは、シンセサイザは周知の技術を用いて、受け取った論理表現を次に最適化する回路網に変換する。
図1に示すように、シンセサイザ100は、回路網データ記憶域105、グローパル・オプティマイザ110、および1つまたは複数のコスティング・エンジン130を含む。回路網データ記憶域105は特定の目標ライブラリに結びついている、または結びついていない多数の(例えば、数百万の)組合せ論理部分回路網を記憶、管理する。
いくつかの実施形態においては、データ記憶域105内に記憶された部分回路網は先に事前計算されている。これらの実施形態のいくつかでは、データ・ゼネレータ115はこれらの回路網を自動的に事前集計する。また、以下の実施形態では、このゼネレータは最適化の際に使用されない。回路網データ記憶域105は設計内の部分回路網の代替形態の照会をサポートする。以下の実施形態では、回路網データ記憶域はリレーショナル・データベースとして構成される。しかし、他の実施形態では、データ記憶域105のために、異なるデータベース(オブジェクト指向データベースなど)または他のデータ記憶構造体(データ・ファイルなど)を使用することができる。
グローバル・オプティマイザ110は、(1)置き換えのために設計135から部分回路網候補を選択し、(2)データ記憶域105に照会して、選択した部分回路網候補の1つまたは複数の代替部分回路網を識別し、(3)代替部分回路網を分析し、(4)分析に基づいて設計135内の選択した部分回路網候補を識別した代替部分回路網に置き換えるか否かを決定することでシンセサイザの動作を制御する。
また、他の実施形態では、シンセサイザ100は別の形式の出発設計を受け取る。例えば、シンセサイザ100は出発設計の論理表現を受け取ることができる(例えば、Verilog,VHDL、HDL、BLIFFなどの論理形式の出発設計を受け取ることができる)。これらの実施形態のいくつかでは、シンセサイザは周知の技術を用いて、受け取った論理表現を次に最適化する回路網に変換する。
図1に示すように、シンセサイザ100は、回路網データ記憶域105、グローパル・オプティマイザ110、および1つまたは複数のコスティング・エンジン130を含む。回路網データ記憶域105は特定の目標ライブラリに結びついている、または結びついていない多数の(例えば、数百万の)組合せ論理部分回路網を記憶、管理する。
いくつかの実施形態においては、データ記憶域105内に記憶された部分回路網は先に事前計算されている。これらの実施形態のいくつかでは、データ・ゼネレータ115はこれらの回路網を自動的に事前集計する。また、以下の実施形態では、このゼネレータは最適化の際に使用されない。回路網データ記憶域105は設計内の部分回路網の代替形態の照会をサポートする。以下の実施形態では、回路網データ記憶域はリレーショナル・データベースとして構成される。しかし、他の実施形態では、データ記憶域105のために、異なるデータベース(オブジェクト指向データベースなど)または他のデータ記憶構造体(データ・ファイルなど)を使用することができる。
グローバル・オプティマイザ110は、(1)置き換えのために設計135から部分回路網候補を選択し、(2)データ記憶域105に照会して、選択した部分回路網候補の1つまたは複数の代替部分回路網を識別し、(3)代替部分回路網を分析し、(4)分析に基づいて設計135内の選択した部分回路網候補を識別した代替部分回路網に置き換えるか否かを決定することでシンセサイザの動作を制御する。
いくつかの実施形態においては、オプティマイザ110は1つまたは複数の停止条件に達するまで上記4つの動作を繰り返し実行する。さらに、オプティマイザは1つまたは複数のコスティング・エンジン130を用いてオプティマイザがデータ記憶域から取り出した代替部分回路網を分析するためのコストを計算する。オプティマイザ110はそのようなコストを用いて1つまたは複数の目的および/または制約に関して代替部分回路網および/または設計全体を評価することができる。
図1はコスティング・エンジン130の3つの例、すなわち、タイミング・エンジン120、面積エンジン125および電力エンジン140を示す。タイミング・エンジン120はオプティマイザがより高速のチップの設計を生成できるようにするオプティマイザのタイミング・コストを計算する。特に、このエンジンを使用する場合、オプティマイザは考慮している代替部分回路網についてタイミング・エンジンに通知し、タイミング・エンジンはこれに対して、代替部分回路網が特定の部分回路網、受け取った回路網、および/または回路網を含むより大きい設計のタイミング挙動にどの程度影響するかという情報をオプティマイザに供給する。例えば、いくつかの実施形態においては、タイミング・エンジンは、代替部分回路網が選択された場合に、ある出力での予想時間差を計算する。いくつかの実施形態においては、タイミング・エンジンはある種の技術に適当なユーザ定義のタイミング・モデルを使用する。
面積エンジン125はオプティマイザが設計の面積を減らすための面積推定値を計算して返送する。特に、面積エンジン125を使用する時には、オプティマイザは考慮している代替部分回路網についてこのエンジンに通知する。次に、面積エンジンはこれに対して、このことが特定の部分回路網、受け取った回路網、および/または回路網を含むより大きい設計の面積にどの程度影響するかという情報をオプティマイザに供給する。
電力エンジン140は代替部分回路網を選択した時の消費電力の変化を推定する。ICの消費電力はICを設計する際の最も重要な要因の1つであることが多い。タイミング・エンジン、面積エンジン、および電力エンジンは当技術分野で周知の任意の技術に基づいて実施できる。オプティマイザが他の目的および/または制約を考慮する必要がある場合には他のコスティング・エンジンも使用することができる。
図1はコスティング・エンジン130の3つの例、すなわち、タイミング・エンジン120、面積エンジン125および電力エンジン140を示す。タイミング・エンジン120はオプティマイザがより高速のチップの設計を生成できるようにするオプティマイザのタイミング・コストを計算する。特に、このエンジンを使用する場合、オプティマイザは考慮している代替部分回路網についてタイミング・エンジンに通知し、タイミング・エンジンはこれに対して、代替部分回路網が特定の部分回路網、受け取った回路網、および/または回路網を含むより大きい設計のタイミング挙動にどの程度影響するかという情報をオプティマイザに供給する。例えば、いくつかの実施形態においては、タイミング・エンジンは、代替部分回路網が選択された場合に、ある出力での予想時間差を計算する。いくつかの実施形態においては、タイミング・エンジンはある種の技術に適当なユーザ定義のタイミング・モデルを使用する。
面積エンジン125はオプティマイザが設計の面積を減らすための面積推定値を計算して返送する。特に、面積エンジン125を使用する時には、オプティマイザは考慮している代替部分回路網についてこのエンジンに通知する。次に、面積エンジンはこれに対して、このことが特定の部分回路網、受け取った回路網、および/または回路網を含むより大きい設計の面積にどの程度影響するかという情報をオプティマイザに供給する。
電力エンジン140は代替部分回路網を選択した時の消費電力の変化を推定する。ICの消費電力はICを設計する際の最も重要な要因の1つであることが多い。タイミング・エンジン、面積エンジン、および電力エンジンは当技術分野で周知の任意の技術に基づいて実施できる。オプティマイザが他の目的および/または制約を考慮する必要がある場合には他のコスティング・エンジンも使用することができる。
図2は、本発明のいくつかの実施形態で図1のシンセサイザ100の全体のフローを概念的に示すプロセス200である。いくつかの実施形態においては、オプティマイザ110がこの全体のフローを管理する。シンセサイザ100は特定の技術ライブラリに結びついている、または結びついていない回路網135のためにこのプロセスを実行する。図3は回路網135の部分300の例を示す。この図に示すように、回路網はいくつかのブール回路素子305〜335(ノードとも呼ばれる)を有し、各回路素子は特定の関数(局所関数とも呼ばれる)を実行する。
以下の実施形態においては、受け取られた回路網135は回路網の回路素子ごとに1つのノードを有するリンクされたグラフ・データ構造体で表される。各ノードは組合せまたは順序論理ノードである。いくつかの実施形態においては、各ノードは組合せ論理ノードであるか否かを指定するフラグを含む。その組合せ論理ノードごとに、受け取られた回路網はまた、局所関数の集合を指定する。この実施形態においては、縮小次元二分決定グラフ(ROBDD)は組合せ論理ノードの各局所関数を表す。
ROBDDはノードおよびエッジを含むグラフ・データ構造体であり、ここでノードは入力または出力変数を表し、エッジは真または偽ブール結果を表す。いくつかの実施形態においては、ROBDDは組合せ論理ノードの各出力関数を表すのに使用される。したがって、組合せ論理ノードはノードがいくつかの出力ビットを有する時にはそれに関連するいくつかのROBDDを有する。例えば、3つの入力加算器はその2つの出力用の各々に1つずつ、計2つのROBDDを有する。当業者であれば、他の実施形態においては、他のタイプのBDD(MDDなど)または他の関数表現(真理値表表現など)を使用することができることを理解することができるだろう。
以下の実施形態においては、受け取られた回路網135は回路網の回路素子ごとに1つのノードを有するリンクされたグラフ・データ構造体で表される。各ノードは組合せまたは順序論理ノードである。いくつかの実施形態においては、各ノードは組合せ論理ノードであるか否かを指定するフラグを含む。その組合せ論理ノードごとに、受け取られた回路網はまた、局所関数の集合を指定する。この実施形態においては、縮小次元二分決定グラフ(ROBDD)は組合せ論理ノードの各局所関数を表す。
ROBDDはノードおよびエッジを含むグラフ・データ構造体であり、ここでノードは入力または出力変数を表し、エッジは真または偽ブール結果を表す。いくつかの実施形態においては、ROBDDは組合せ論理ノードの各出力関数を表すのに使用される。したがって、組合せ論理ノードはノードがいくつかの出力ビットを有する時にはそれに関連するいくつかのROBDDを有する。例えば、3つの入力加算器はその2つの出力用の各々に1つずつ、計2つのROBDDを有する。当業者であれば、他の実施形態においては、他のタイプのBDD(MDDなど)または他の関数表現(真理値表表現など)を使用することができることを理解することができるだろう。
図2に示すように、プロセス200は最初受け取った回路網を横断して任意の多出力組合せ論理ノード(3入力加算器など)を識別する、すなわち、2つまたはそれ以上の局所関数を実行する任意の組合せ論理ノードを識別する。このプロセスでそのようなノードが見つかる場合、このノードを単一出力組合せ論理ノードの集合に置き換える。
プロセス200は当技術分野で周知の任意の技法を用いてこの置き換えを実行する。例えば、プロセス200は多出力組合せ論理ノードをいくつかの単一出力組合せ論理ノードに置き換えることができ、ここで、各単一出力組合せ論理ノードは1つの局所関数を実行する。多出力ノードが実行する特定の出力関数ごとに、プロセスは最初、特定の出力関数を実行するそのデータ記憶域105内に記憶された(1つまたは複数のノードの)部分回路網を識別しようとする。データ記憶域が部分回路網を記憶しているか否かを識別するプロセスを図5〜17を参照しながら以下に説明する。プロセス200が多出力ノードの特定の出力関数の事前集計された部分回路網を識別できない場合、このプロセスはこの関数をより簡単な関数に分解し、次に、より簡単な関数を実行するデータ記憶域内に記憶された部分回路網を識別する。このプロセスは、Giovanni De Micheli、Synthesis and Optimization of Digital Circuits、McGraw−Hill、1994に記載のShannon展開またはT.C.Wesselkamperの、「Some classical mathematical results related to the problems of the firmware/hardware interface」,Proceedings of the eighth annual workshop on Microprogramming,Chicago,1975(ACM Digital Libraryで入手可能)に記載のReed−Muller展開などの任意の周知の分解プロセスを使用することができる。プロセス200が多出力ノードの各出力関数の部分回路網を識別すると、プロセスは多出力ノードを識別された部分回路網の集合に置き換える。特に、受け取った回路網内では、プロセスは多出力ノードを識別された部分回路網の集合のノードを表すいくつかの代替ノードに置き換える。各代替ノードについて、プロセスはそのROBDDによってノードの局所関数を指定する。
各多出力ノードを単一出力ノードの集合に置き換えた後で、いくつかの実施形態のプロセスは単一出力ノードの集合を関連付ける(例えば、それらをリンクし、リスト内での関連付けを識別し、または他のいくつかの関連付け技法を使用する)。次に、置き換え用の部分回路網候補を選択する間にこの関連付けを用いて(以下の210で)、多出力ノードを表すノード集合の全体を識別し選択することができる。この選択によって多出力ノードのノード集合の全体を単独で、または他の組合せ論理ノードと共に最適化することができる。多出力ノードのノード集合の全体の集合的な最適化はデータ記憶域が多出力ノードの所望の形態を記憶している時には特に有益である。
プロセス200は当技術分野で周知の任意の技法を用いてこの置き換えを実行する。例えば、プロセス200は多出力組合せ論理ノードをいくつかの単一出力組合せ論理ノードに置き換えることができ、ここで、各単一出力組合せ論理ノードは1つの局所関数を実行する。多出力ノードが実行する特定の出力関数ごとに、プロセスは最初、特定の出力関数を実行するそのデータ記憶域105内に記憶された(1つまたは複数のノードの)部分回路網を識別しようとする。データ記憶域が部分回路網を記憶しているか否かを識別するプロセスを図5〜17を参照しながら以下に説明する。プロセス200が多出力ノードの特定の出力関数の事前集計された部分回路網を識別できない場合、このプロセスはこの関数をより簡単な関数に分解し、次に、より簡単な関数を実行するデータ記憶域内に記憶された部分回路網を識別する。このプロセスは、Giovanni De Micheli、Synthesis and Optimization of Digital Circuits、McGraw−Hill、1994に記載のShannon展開またはT.C.Wesselkamperの、「Some classical mathematical results related to the problems of the firmware/hardware interface」,Proceedings of the eighth annual workshop on Microprogramming,Chicago,1975(ACM Digital Libraryで入手可能)に記載のReed−Muller展開などの任意の周知の分解プロセスを使用することができる。プロセス200が多出力ノードの各出力関数の部分回路網を識別すると、プロセスは多出力ノードを識別された部分回路網の集合に置き換える。特に、受け取った回路網内では、プロセスは多出力ノードを識別された部分回路網の集合のノードを表すいくつかの代替ノードに置き換える。各代替ノードについて、プロセスはそのROBDDによってノードの局所関数を指定する。
各多出力ノードを単一出力ノードの集合に置き換えた後で、いくつかの実施形態のプロセスは単一出力ノードの集合を関連付ける(例えば、それらをリンクし、リスト内での関連付けを識別し、または他のいくつかの関連付け技法を使用する)。次に、置き換え用の部分回路網候補を選択する間にこの関連付けを用いて(以下の210で)、多出力ノードを表すノード集合の全体を識別し選択することができる。この選択によって多出力ノードのノード集合の全体を単独で、または他の組合せ論理ノードと共に最適化することができる。多出力ノードのノード集合の全体の集合的な最適化はデータ記憶域が多出力ノードの所望の形態を記憶している時には特に有益である。
当業者であれば、プロセス200は、多出力ノードを単一出力ノードの集合に分解するが、他の実施形態も多出力ノードを異なる方法で扱うことができることを理解することができるだろう。例えば、いくつかの実施形態では最適化のためにそのようなノードを選択しない。また、分解なしにそれらを扱う実施形態もある。例えば、プロセス200は、215で識別される部分回路網候補の組合せ論理関数にのみ基づいて(220で)代替部分回路網を見つけようとする。したがって、他の実施形態では、部分回路網が実現する組合せ論理関数が演算できる限り、多出力ノードを含む任意の種類の回路網表現を使用することができる。
205の後で、プロセス200は回路網135内の組合せ論理部分回路網Sを(210で)選択する。選択された部分回路網Sは代替用の部分回路網候補である。この選択された部分回路網は組合せ論理回路網でもある。すなわち、そのノードの各々が組合せ論理ノードということである。
いくつかの実施形態においては、プロセス200はランダム成長プロセスによって部分回路網候補Sを(210で)選択する。多数のそのようなランダム成長プロセスが当技術分野で周知である。いくつかのそのようなプロセスが回路網内の組合せ論理ノードをランダムに選択し、次いで第1の選択された組合せ論理ノードまたはその後選択した組合せ論理ノードに接続されている他の組合せ論理ノードをランダムに選択する。この手順をノードがある種の部分回路網の複雑さに達するまで実行する(例えば、部分回路網への入力変数の総数が一定の範囲に収まるまで)。回路網内の順序論理ノードと遭遇する部分回路網候補の成長の任意の場所で、成長は終了する(すなわち、その場所が部分回路網候補の入力または出力になる)。特定の組合せ論理ノードで成長が終了すると、所望の複雑さのレベルに達するまで指定された部分回路網候補の他のノードで成長を続けることができる。
場合によっては、210で識別される部分回路網は複数の出力を有する(すなわち、識別された部分回路網が複数の関数を実行する)。いくつかの実施形態においては、ランダム成長プロセスによって、選択された部分回路網Sは部分回路網のすべての入力に依存する少なくとも1つの出力を確実に有することができる。これらの実施形態においては、以下にさらに説明するように、そのような判定基準を用いてデータベース索引付けを容易にする。
図4は、図3に部分的に示す回路網から選択した組合せ論理部分回路網400の一例を示す。図4に示す部分回路網400は、4つの入力X0〜X3、3つの回路素子305〜315、および3つの出力Y0〜Y2を有する。3つの回路素子はANDゲート305、NANDゲート310およびORゲート315である。選択された部分回路網の3つの出力によって表される3つの関数の組合せ論理表現は以下の通りである。
205の後で、プロセス200は回路網135内の組合せ論理部分回路網Sを(210で)選択する。選択された部分回路網Sは代替用の部分回路網候補である。この選択された部分回路網は組合せ論理回路網でもある。すなわち、そのノードの各々が組合せ論理ノードということである。
いくつかの実施形態においては、プロセス200はランダム成長プロセスによって部分回路網候補Sを(210で)選択する。多数のそのようなランダム成長プロセスが当技術分野で周知である。いくつかのそのようなプロセスが回路網内の組合せ論理ノードをランダムに選択し、次いで第1の選択された組合せ論理ノードまたはその後選択した組合せ論理ノードに接続されている他の組合せ論理ノードをランダムに選択する。この手順をノードがある種の部分回路網の複雑さに達するまで実行する(例えば、部分回路網への入力変数の総数が一定の範囲に収まるまで)。回路網内の順序論理ノードと遭遇する部分回路網候補の成長の任意の場所で、成長は終了する(すなわち、その場所が部分回路網候補の入力または出力になる)。特定の組合せ論理ノードで成長が終了すると、所望の複雑さのレベルに達するまで指定された部分回路網候補の他のノードで成長を続けることができる。
場合によっては、210で識別される部分回路網は複数の出力を有する(すなわち、識別された部分回路網が複数の関数を実行する)。いくつかの実施形態においては、ランダム成長プロセスによって、選択された部分回路網Sは部分回路網のすべての入力に依存する少なくとも1つの出力を確実に有することができる。これらの実施形態においては、以下にさらに説明するように、そのような判定基準を用いてデータベース索引付けを容易にする。
図4は、図3に部分的に示す回路網から選択した組合せ論理部分回路網400の一例を示す。図4に示す部分回路網400は、4つの入力X0〜X3、3つの回路素子305〜315、および3つの出力Y0〜Y2を有する。3つの回路素子はANDゲート305、NANDゲート310およびORゲート315である。選択された部分回路網の3つの出力によって表される3つの関数の組合せ論理表現は以下の通りである。
部分回路網400で、出力Y2は部分回路網のすべての入力X0〜X3に依存する。
210の後で、プロセス200は、選択された部分回路網候補Sによって実現される組合せ論理関数Fの集合を(215で)識別する。選択された部分回路網Sが1つの出力しか有さない時には、識別された集合Fは1つの論理関数F0しか含まない。他方、選択された部分回路網Sがいくつかの出力Y0..YMを有する時には、識別された集合Fはいくつかのの論理関数F0..FMを含む。
出力関数Fの集合は2つの異なるタイプの回路素子から構成できる。第1のタイプは210で選択された部分回路網候補S内の他のどの回路素子の出力も受け取らない回路素子である。言い換えれば、第1のタイプの回路素子のすべての入力は選択された部分回路網候補Sへの入力である。第2のタイプは選択された部分回路網候補S内の少なくとも1つの他の回路素子の出力を受け取る回路素子である。第2のタイプの回路素子の入力の一部またはすべては選択された部分回路網候補S内の他の回路素子から得られる。
第1のタイプの回路素子から得られる部分回路網候補の出力関数は第1のタイプの回路素子の局所関数に過ぎない。例えば、図4に示す例では、部分回路網の出力Y0およびY1は第1のタイプの回路素子305および315から得られる。上記の式(1)および(2)に示すように、これらの出力はANDゲート305およびORゲート315の局所関数に過ぎない。
他方、第2のタイプの回路素子の出力で供給される関数を導き出さなければならない。そのような関数は第2のタイプの回路素子の局所関数と第2のタイプの回路素子がその1つまたは複数の出力を受け取る1つまたは複数の回路素子から導き出される。例えば、図4に示す例では、部分回路網の出力Y2は第2のタイプの素子310から得られる。式(3)に示すように、この出力はNANDゲート310の局所関数と、ANDゲート305およびORゲート315の局所関数から導き出される。
210の後で、プロセス200は、選択された部分回路網候補Sによって実現される組合せ論理関数Fの集合を(215で)識別する。選択された部分回路網Sが1つの出力しか有さない時には、識別された集合Fは1つの論理関数F0しか含まない。他方、選択された部分回路網Sがいくつかの出力Y0..YMを有する時には、識別された集合Fはいくつかのの論理関数F0..FMを含む。
出力関数Fの集合は2つの異なるタイプの回路素子から構成できる。第1のタイプは210で選択された部分回路網候補S内の他のどの回路素子の出力も受け取らない回路素子である。言い換えれば、第1のタイプの回路素子のすべての入力は選択された部分回路網候補Sへの入力である。第2のタイプは選択された部分回路網候補S内の少なくとも1つの他の回路素子の出力を受け取る回路素子である。第2のタイプの回路素子の入力の一部またはすべては選択された部分回路網候補S内の他の回路素子から得られる。
第1のタイプの回路素子から得られる部分回路網候補の出力関数は第1のタイプの回路素子の局所関数に過ぎない。例えば、図4に示す例では、部分回路網の出力Y0およびY1は第1のタイプの回路素子305および315から得られる。上記の式(1)および(2)に示すように、これらの出力はANDゲート305およびORゲート315の局所関数に過ぎない。
他方、第2のタイプの回路素子の出力で供給される関数を導き出さなければならない。そのような関数は第2のタイプの回路素子の局所関数と第2のタイプの回路素子がその1つまたは複数の出力を受け取る1つまたは複数の回路素子から導き出される。例えば、図4に示す例では、部分回路網の出力Y2は第2のタイプの素子310から得られる。式(3)に示すように、この出力はNANDゲート310の局所関数と、ANDゲート305およびORゲート315の局所関数から導き出される。
上記のように、各出力関数は以下の実施形態のROBDDによって表される。これらの実施形態のいくつかでは、プロセス200はBuDDy(登録商標)ソフトウェア・パッケージを用いて210で選択された部分回路網候補Sによって実現される組合せ論理関数Fの集合内の各関数のROBDD表現を識別する。
特に、プロセス200は選択された部分回路網候補のグラフ・データ構造体を横断して組合せ論理部分回路網内の各ノードを検証する。プロセス200は第1のタイプのノード(すなわち、他のいかなるノードの出力も受け取らないノード)から開始する。これらのノードの各々について、このプロセスはBuDDyパッケージに受け取った部分回路網内のノードの局所関数(ROBDD形式の)と入力を与える。次に、BuDDyパッケージは、組合せ論理部分回路網内の入力の表現を説明するために変更された後で基本的にその局所関数であるノードの出力関数を識別する。
すべての第1のタイプのノードについて識別した後で、プロセスは、出力をこのノードに供給するノードの集合のROBDDを識別した後で各々の第2のタイプのノードを確実に選択できるように、第2のタイプのノード(すなわち、他の少なくとも1つのノードの出力を受け取るノード)に移行する。各々の選択された第2のタイプのノードについて、プロセス200はBuDDyパッケージにノードの局所関数(ROBDD形式の)、部分回路網内のノードの入力、およびその出力をこのノードに供給するノードの集合のROBDDを供給する。次に、BuDDyパッケージは受け取った情報に基づいてノードの出力関数(ROBDD形式の)を識別する。
特に、プロセス200は選択された部分回路網候補のグラフ・データ構造体を横断して組合せ論理部分回路網内の各ノードを検証する。プロセス200は第1のタイプのノード(すなわち、他のいかなるノードの出力も受け取らないノード)から開始する。これらのノードの各々について、このプロセスはBuDDyパッケージに受け取った部分回路網内のノードの局所関数(ROBDD形式の)と入力を与える。次に、BuDDyパッケージは、組合せ論理部分回路網内の入力の表現を説明するために変更された後で基本的にその局所関数であるノードの出力関数を識別する。
すべての第1のタイプのノードについて識別した後で、プロセスは、出力をこのノードに供給するノードの集合のROBDDを識別した後で各々の第2のタイプのノードを確実に選択できるように、第2のタイプのノード(すなわち、他の少なくとも1つのノードの出力を受け取るノード)に移行する。各々の選択された第2のタイプのノードについて、プロセス200はBuDDyパッケージにノードの局所関数(ROBDD形式の)、部分回路網内のノードの入力、およびその出力をこのノードに供給するノードの集合のROBDDを供給する。次に、BuDDyパッケージは受け取った情報に基づいてノードの出力関数(ROBDD形式の)を識別する。
BuDDyパッケージに関する情報はJorn Lind−Nielsen、Computer Systems Section at the Department of Information Technology、Technical University of Denmark、またはhttp://www.itu.12/research/buddy/から、またはbuddy@itu.12にeメールを送ると入手できる。
当業者であれば、他の実施形態においては、実現された組合せ論理関数の集合を異なる方法で識別することができることを理解することができるだろう。例えば、いくつかの実施形態においては、コロラド大学提供のCUDDパッケージなどの他のソフトウェア・パッケージを使用することができる。しかし、組合せ論理関数にROBDD表現を使用できない実施形態もある。いくつかの実施形態においては、真理値表表現または他の表現を使用することができる。さらに他のBDD変形表現を使用することができる実施形態もある。
215の後で、プロセス200は、(220で)回路網データ記憶域105に照会して、215で識別された組合せ論理関数の集合を実施する1つまたは複数の代替部分回路網を記憶しているか否かを決定する。回路網のデータ記憶域は、識別された組合せ論理関数の集合を、1つまたは複数の代替部分回路網がデータ記憶域に記憶された際の基準になったパラメータに変換する。したがって、回路網のデータ記憶域はこのパラメータを用いてデータ記憶域内の1つまたは複数の代替部分回路網を識別しようとする。
当業者であれば、他の実施形態においては、実現された組合せ論理関数の集合を異なる方法で識別することができることを理解することができるだろう。例えば、いくつかの実施形態においては、コロラド大学提供のCUDDパッケージなどの他のソフトウェア・パッケージを使用することができる。しかし、組合せ論理関数にROBDD表現を使用できない実施形態もある。いくつかの実施形態においては、真理値表表現または他の表現を使用することができる。さらに他のBDD変形表現を使用することができる実施形態もある。
215の後で、プロセス200は、(220で)回路網データ記憶域105に照会して、215で識別された組合せ論理関数の集合を実施する1つまたは複数の代替部分回路網を記憶しているか否かを決定する。回路網のデータ記憶域は、識別された組合せ論理関数の集合を、1つまたは複数の代替部分回路網がデータ記憶域に記憶された際の基準になったパラメータに変換する。したがって、回路網のデータ記憶域はこのパラメータを用いてデータ記憶域内の1つまたは複数の代替部分回路網を識別しようとする。
以下の実施形態では、データ記憶域105はデータベースであり、回路網データベースによって生成されるパラメータは事前集計された部分回路網を記憶するデータベース・テーブルへの整数インデックスの集合である。回路網データベースは、これらのインデックスを用いて、生成されたインデックスの集合に従ってデータベース内に記憶されている任意の代替部分回路網Cを取り出す。220の照会への応答の回路網データベースの動作について図5〜図17を参照しながら以下にさらに説明する。当業者であれば、他の実施形態においては、異なる記憶構造体(例えば、データ・ファイル)および/または異なる記憶パラメータ(例えば、文字列インデックス)を使用することができることを理解することができるだろう。
回路網データベース105が215で識別された組合せ論理関数の集合を実施する代替部分回路網をまったく記憶していないとこのプロセスが(220で)判定すると、プロセスは240に移行する。これについて以下に説明する。逆に、プロセスがそのような1つまたは複数の代替部分回路網を識別すると、プロセスは(225で)1つまたは複数のコスティング・エンジン130を用いて、210で選択された部分回路網候補と220で識別された各々の代替部分回路網のコストを計算する。
コスティング・エンジンはシンセサイザ100が特定の技術に結びついている設計を最適化しているときに実際の物理コストを推定することができる。例えば、面積エンジン125は、部分回路網候補または代替部分回路網の総面積、回路素子の数などを推定することができる。タイミング・エンジン120は、部分回路網のタイミング挙動、遅延などを推定することができる。電力エンジン140は、部分回路網の消費電力を推定することができる。
回路網データベース105が215で識別された組合せ論理関数の集合を実施する代替部分回路網をまったく記憶していないとこのプロセスが(220で)判定すると、プロセスは240に移行する。これについて以下に説明する。逆に、プロセスがそのような1つまたは複数の代替部分回路網を識別すると、プロセスは(225で)1つまたは複数のコスティング・エンジン130を用いて、210で選択された部分回路網候補と220で識別された各々の代替部分回路網のコストを計算する。
コスティング・エンジンはシンセサイザ100が特定の技術に結びついている設計を最適化しているときに実際の物理コストを推定することができる。例えば、面積エンジン125は、部分回路網候補または代替部分回路網の総面積、回路素子の数などを推定することができる。タイミング・エンジン120は、部分回路網のタイミング挙動、遅延などを推定することができる。電力エンジン140は、部分回路網の消費電力を推定することができる。
他方、シンセサイザが非結合設計を対象にしている時には、オプティマイザ110は、部分回路網候補または代替部分回路網のより抽象的なコストを計算する1つまたは複数のコスティング・エンジンを使用する。例えば、面積エンジン125は、非結合部分回路網の「サイズ」を、その最終面積のある推定値、最低レベルおよび中間レベル入力、部分回路網の回路素子が実行する関数内の変数の数、または他の抽象的な定量によって測定することができる。別のコスティング・エンジンは部分回路網の「深さ」をその部分回路網の段数プラス各回路素子の内部深さに関する推定値として推定することができる。また、オプティマイザはそのような抽象的なコスティング・エンジンを結合設計に使用することができる。
いくつかの実施形態においては、オプティマイザはコスティング・エンジンの1つのみを使用して(例えば、タイミング・エンジン129または面積エンジン120のみを使用して)、各々の部分回路網候補または代替部分回路網の1種類のコストのみを計算する(例えば、タイミング・コストまたは面積コストのみを計算する)。他の実施形態では、オプティマイザはいくつかのコスティング・エンジンを使用して(例えば、タイミング・エンジンと面積エンジンの両方を使用して)、問題の各々の部分回路網の数種類のコストを計算する。これらの実施形態のいくつかでは、各部分回路網について生成されたコストは、部分回路網の単一のコストに重み付けしたまたは重み付けしない方法で組み合わせられる。他の実施形態ではこの限りではない。
計算されたコストに基づいて、プロセス200は、次に(230で)識別された代替部分回路網が受け入れられるか否かを決定する。この決定はオプティマイザ110が実行する最適化のタイプによって異なる。例えば、ある種の最適化のタイプ(ローカル最適化など)は、210で識別された元の部分回路網より悪いコストを受け入れない。他の最適化技法(シミュレーテッド・アニーリングなど)は、計算されたコストがより悪い代替部分回路網を受け入れるが、プロセス200の反復回数が増加すると共に受け入れるようになるコストのペナルティを減らす(すなわち、不利益な置き換えの回数を減らす)。
何らかの識別された代替部分回路網が受け入れられるか否かの(230での)決定は、目的関数の最適化にのみ基づく場合もあり、または一定の制約内での目的関数の最適化に基づく場合もある。さらに、目的関数は1種類の計算されたコストにのみ関連するか、または数種類の計算されたコストの(重み付けしたまたは重み付けしていない)組合せに関連する。同様に、制約がある場合、制約は1種類の計算されたコストにのみ関連するか、または数種類の計算されたコストに関連する。目的関数の例は、共に225で計算できる面積コスティング関数およびタイミング・コスティング関数を含む。目的関数の別の例は、面積コストとタイミング・コストの重み付け組合せを生成するコスティング関数である。そのような関数は225で計算でき、または225で計算されたコストに基づいて230で計算できる。制約の例は、最大面積、時間、深さ制約、および/または最大消費電力を含むことができる。
プロセス200が230で受け入れ可能な代替部分回路網を見つけられない場合、240に移行する。この処理を以下に説明する。他方、プロセスが230で受け入れ可能な1つまたは複数の代替部分回路網を見つけた場合、210で識別された部分回路網を受け入れ可能な部分回路網の1つに(235で)置き換える。2つ以上の代替部分回路網が受け入れ可能な場合、プロセス200は受け入れ可能な部分回路網の1つをランダムに選択する。当業者であれば、他の実施形態においては、コスティングに関して最善の部分回路網を選択でき、またはk個の最善の部分回路網(ここで、kはユーザ定義パラメータ)から1つをランダムに選択できることを理解することができるだろう。235の後で、プロセスは240に移行する。
240で、プロセスは停止判定基準に達したか否かを決定する。達していない場合、210に戻って別の部分回路網候補Sを識別し、この部分回路網について以降の動作を繰り返す。達している場合、プロセス200は終了する。
いくつかの実施形態においては、オプティマイザはコスティング・エンジンの1つのみを使用して(例えば、タイミング・エンジン129または面積エンジン120のみを使用して)、各々の部分回路網候補または代替部分回路網の1種類のコストのみを計算する(例えば、タイミング・コストまたは面積コストのみを計算する)。他の実施形態では、オプティマイザはいくつかのコスティング・エンジンを使用して(例えば、タイミング・エンジンと面積エンジンの両方を使用して)、問題の各々の部分回路網の数種類のコストを計算する。これらの実施形態のいくつかでは、各部分回路網について生成されたコストは、部分回路網の単一のコストに重み付けしたまたは重み付けしない方法で組み合わせられる。他の実施形態ではこの限りではない。
計算されたコストに基づいて、プロセス200は、次に(230で)識別された代替部分回路網が受け入れられるか否かを決定する。この決定はオプティマイザ110が実行する最適化のタイプによって異なる。例えば、ある種の最適化のタイプ(ローカル最適化など)は、210で識別された元の部分回路網より悪いコストを受け入れない。他の最適化技法(シミュレーテッド・アニーリングなど)は、計算されたコストがより悪い代替部分回路網を受け入れるが、プロセス200の反復回数が増加すると共に受け入れるようになるコストのペナルティを減らす(すなわち、不利益な置き換えの回数を減らす)。
何らかの識別された代替部分回路網が受け入れられるか否かの(230での)決定は、目的関数の最適化にのみ基づく場合もあり、または一定の制約内での目的関数の最適化に基づく場合もある。さらに、目的関数は1種類の計算されたコストにのみ関連するか、または数種類の計算されたコストの(重み付けしたまたは重み付けしていない)組合せに関連する。同様に、制約がある場合、制約は1種類の計算されたコストにのみ関連するか、または数種類の計算されたコストに関連する。目的関数の例は、共に225で計算できる面積コスティング関数およびタイミング・コスティング関数を含む。目的関数の別の例は、面積コストとタイミング・コストの重み付け組合せを生成するコスティング関数である。そのような関数は225で計算でき、または225で計算されたコストに基づいて230で計算できる。制約の例は、最大面積、時間、深さ制約、および/または最大消費電力を含むことができる。
プロセス200が230で受け入れ可能な代替部分回路網を見つけられない場合、240に移行する。この処理を以下に説明する。他方、プロセスが230で受け入れ可能な1つまたは複数の代替部分回路網を見つけた場合、210で識別された部分回路網を受け入れ可能な部分回路網の1つに(235で)置き換える。2つ以上の代替部分回路網が受け入れ可能な場合、プロセス200は受け入れ可能な部分回路網の1つをランダムに選択する。当業者であれば、他の実施形態においては、コスティングに関して最善の部分回路網を選択でき、またはk個の最善の部分回路網(ここで、kはユーザ定義パラメータ)から1つをランダムに選択できることを理解することができるだろう。235の後で、プロセスは240に移行する。
240で、プロセスは停止判定基準に達したか否かを決定する。達していない場合、210に戻って別の部分回路網候補Sを識別し、この部分回路網について以降の動作を繰り返す。達している場合、プロセス200は終了する。
本発明の異なる実施形態では、オプティマイザは異なる判定基準を使用する。例えば、この判定基準はよりよい代替部分回路網を識別することなくプロセス200によって実行される反復回数に関連していてもよい。あるいは、単に総反復回数に関連していてもよい。240の停止判定基準は、オプティマイザ110が実行する最適化のタイプによって異なる。最適化の1つのタイプはシミュレーテッド・アニーリングである。これは、Nahar他の、「Simulated Annealing And Combinational Optimization」、Proceeding of the 23 Design Automation Conference、1986などの多数の出版物に記載されている。シミュレーテッド・アニーリングのバージョンを使用する時の最適化プロセス200の擬似コードは次の通りである。
・S:S_0(S_0は初期解)
・T:T_0(T_0は初期温度)
・Inner_Loop_Count:=Outer_Loop_Count:=0
・Inner_Loop_Max:=i_0(内部ループの最大反復回数)
・Outer_Loop_Max:=i_max(外部ループの最大反復回数)
・Repeat
・Repeat
・Inner_Loop_CountおよびOuter_Loop_Countを1だけインクリメントする;
・置き換えのための部分回路網候補を識別する;//図2の210を参照;
・関数Fの集合を識別する;//図2の215を参照
・置き換える候補の呼び出し照会マネジャー;//図2の220を参照;
・置き換えが返送された場合、
・各置き換えをコスティングする//図2の225を参照;
・少なくとも1つの置き換えが受け入れ可能な場合、受け入れ可能な置き換えの1つをNewSとしてランダムに選択する//図2の230を参照;
・If(h(NewS)≦h(CanS))or(Random<exp((h(CanS)−h(NewS))/T)),//図2の230を参照
・Then replace CanS with NewS//図2の235を参照;
・Until (Inner_Loop_Count=Inner_Loop_Max)or(Outer_Loop_Count=Outer_Loop_Max)
・T:=alpha*T;Inner_Loop_Max=beta*Inner_Loop_Max;Reset Inner_Loop_Count
・Until Outer_Loop_Count=Outer_Loop_Max//図2の240を参照;
・S:S_0(S_0は初期解)
・T:T_0(T_0は初期温度)
・Inner_Loop_Count:=Outer_Loop_Count:=0
・Inner_Loop_Max:=i_0(内部ループの最大反復回数)
・Outer_Loop_Max:=i_max(外部ループの最大反復回数)
・Repeat
・Repeat
・Inner_Loop_CountおよびOuter_Loop_Countを1だけインクリメントする;
・置き換えのための部分回路網候補を識別する;//図2の210を参照;
・関数Fの集合を識別する;//図2の215を参照
・置き換える候補の呼び出し照会マネジャー;//図2の220を参照;
・置き換えが返送された場合、
・各置き換えをコスティングする//図2の225を参照;
・少なくとも1つの置き換えが受け入れ可能な場合、受け入れ可能な置き換えの1つをNewSとしてランダムに選択する//図2の230を参照;
・If(h(NewS)≦h(CanS))or(Random<exp((h(CanS)−h(NewS))/T)),//図2の230を参照
・Then replace CanS with NewS//図2の235を参照;
・Until (Inner_Loop_Count=Inner_Loop_Max)or(Outer_Loop_Count=Outer_Loop_Max)
・T:=alpha*T;Inner_Loop_Max=beta*Inner_Loop_Max;Reset Inner_Loop_Count
・Until Outer_Loop_Count=Outer_Loop_Max//図2の240を参照;
この擬似コードで、T_0、i_0、i_maxアルファ、ベータはシミュレーテッド・アニーリングのパラメータである。これらのパラメータは、ユーザが指定してもよく、オプティマイザが設定してもよい。いくつかの実施形態では、アルファは0.98で、ベータは1.1である。アニーリング・パラメータの選択は十分に研究されている。これらのパラメータの指定方法は、M.A.Saleh Elmohamd他の、「A Comparison of Annealing Techniques for Academic Course Scheduling」、2nd international conferenceで発行、PATAT97で開示されている。また、例えば、Surendra Nahar他の、「Simulated Annealing and Combinational Optimization」、University of Minnesota、23 Design Automation Conference, PP.287−299を参照されたい。また、シミュレーテッド・アニーリングのためのパラメータを決定するためのいくつかのソフトウェア・パッケージが利用できる。そのようなパッケージの1つがLester Ingber著のASAである(www.ingber.com)。
評価関数h()はタイミング・エンジンなどのコスティング・エンジンの1つによって実行される。Randomは内部戻りループの各パス内で生成される区間[0,1)内のランダムな値である。また、上記の例では、停止判定基準は、Outer_Loop_Countによって記録される総反復回数である。
いくつかの実施形態では、プロセス200が終了した後で、回路網がまだそのレベルに達していない場合、グローバル・オプティマイザが、最適化された回路網を技術レベル記述にマッピングする。言い換えれば、最適化された回路網が特定の技術ライブラリに結びついていない場合、いくつかの実施形態のグローバル・オプティマイザ110は、変換を実行するための標準技法を用いて回路網を技術レベル回路網に変換する。これらの実施形態のいくつかでは、グローバル・オプティマイザはプロセス200を繰り返すことでこの技術マッピングを実行する。ただし、今回は目標技術ライブラリに結び付いているデータベースを使用する(すなわち、目標技術ライブラリから得た回路素子のみから構成される部分回路網のみを記憶するデータベースを使用する)。そのような技術マッピングについては以下の第V章で説明する。
評価関数h()はタイミング・エンジンなどのコスティング・エンジンの1つによって実行される。Randomは内部戻りループの各パス内で生成される区間[0,1)内のランダムな値である。また、上記の例では、停止判定基準は、Outer_Loop_Countによって記録される総反復回数である。
いくつかの実施形態では、プロセス200が終了した後で、回路網がまだそのレベルに達していない場合、グローバル・オプティマイザが、最適化された回路網を技術レベル記述にマッピングする。言い換えれば、最適化された回路網が特定の技術ライブラリに結びついていない場合、いくつかの実施形態のグローバル・オプティマイザ110は、変換を実行するための標準技法を用いて回路網を技術レベル回路網に変換する。これらの実施形態のいくつかでは、グローバル・オプティマイザはプロセス200を繰り返すことでこの技術マッピングを実行する。ただし、今回は目標技術ライブラリに結び付いているデータベースを使用する(すなわち、目標技術ライブラリから得た回路素子のみから構成される部分回路網のみを記憶するデータベースを使用する)。そのような技術マッピングについては以下の第V章で説明する。
以下、第III章で220の検索照会に応答した回路網データベース105の動作を説明する。次に、第IV章で、部分回路網候補のオフライン生成のいくつかのプロセスとデータベース105へのこれらの候補の記憶について説明する。これらのプロセスは、データ・ゼネレータ115と回路網データベース105によって実行される。
III.回路網データベース
回路網データベース105は多数の(例えば、数百万の)部分回路網を記憶し、記憶された部分回路網の照会をサポートするように設計されている。以下の実施形態では、このデータベースは以下の特徴を有する。第1に、回路網データベース105は各部分回路網を完全に記憶し、さらにその部分回路網が実行する論理関数に関するすべての情報を記憶する。第二に、以下の実施形態では、各々の記憶された部分回路網は、それぞれがグローバル・オプティマイザによって独立して分析することができる(例えば、独立して検証、置き換えができる)1つまたは複数の回路素子を含む。言い換えれば、各部分回路網の回路素子は、1つのエンティティとして扱う必要はなく、別々の素子として扱うことができる。別の実施形態では、記憶された部分回路網は合成オプティマイザが1つのエンティティとして分析する必要がある破壊可能なブロックの一部であるいくつかの回路素子を含むことができる。
第三に、記憶された部分回路網はすべての既存の回路網を所与のサイズまで開発するためにマシン生成できる。例えば、いくつかの実施形態では、記憶された部分回路網は所与の複雑さまで(例えば、2入力回路素子7個の複雑さまで)の回路網で実現することができる任意の論理関数の任意の実施を含むことができる。
第四に、回路網データベースは、多くの部分回路網を効率的に記憶できる部分回路網用の新しい符号化方法を使用する。第五に、このデータベースは、メモリとCPU処理時間を効率的に使用する索引付け方法を使用する。この索引付け方法は、多値論理関数照合の問題を整数の1次および2次インデクスの集合に基づくリレーショナル・データベース・システムに変換する。こうして、回路網データベースは標準のデータベース・システムの任意の方法を用いて高速検索を可能にする。第五に、データベースはディスク上または物理メモリ内に常駐でき、あるいは部分的に両方のメディア上に常駐できる(例えば、ファイルイン/ファイルアウト・スワッピング機構を用いて)。
III.回路網データベース
回路網データベース105は多数の(例えば、数百万の)部分回路網を記憶し、記憶された部分回路網の照会をサポートするように設計されている。以下の実施形態では、このデータベースは以下の特徴を有する。第1に、回路網データベース105は各部分回路網を完全に記憶し、さらにその部分回路網が実行する論理関数に関するすべての情報を記憶する。第二に、以下の実施形態では、各々の記憶された部分回路網は、それぞれがグローバル・オプティマイザによって独立して分析することができる(例えば、独立して検証、置き換えができる)1つまたは複数の回路素子を含む。言い換えれば、各部分回路網の回路素子は、1つのエンティティとして扱う必要はなく、別々の素子として扱うことができる。別の実施形態では、記憶された部分回路網は合成オプティマイザが1つのエンティティとして分析する必要がある破壊可能なブロックの一部であるいくつかの回路素子を含むことができる。
第三に、記憶された部分回路網はすべての既存の回路網を所与のサイズまで開発するためにマシン生成できる。例えば、いくつかの実施形態では、記憶された部分回路網は所与の複雑さまで(例えば、2入力回路素子7個の複雑さまで)の回路網で実現することができる任意の論理関数の任意の実施を含むことができる。
第四に、回路網データベースは、多くの部分回路網を効率的に記憶できる部分回路網用の新しい符号化方法を使用する。第五に、このデータベースは、メモリとCPU処理時間を効率的に使用する索引付け方法を使用する。この索引付け方法は、多値論理関数照合の問題を整数の1次および2次インデクスの集合に基づくリレーショナル・データベース・システムに変換する。こうして、回路網データベースは標準のデータベース・システムの任意の方法を用いて高速検索を可能にする。第五に、データベースはディスク上または物理メモリ内に常駐でき、あるいは部分的に両方のメディア上に常駐できる(例えば、ファイルイン/ファイルアウト・スワッピング機構を用いて)。
図5は、いくつかの実施形態での回路網データベース105のブロック図である。この図に示すように、データベースは照会マネジャー505、回路網エンコーダ510、インデクサ515、テーブル・マネジャー520、およびデータベース・テーブル525を含む。
A.照会マネジャー
グローバル・オプティマイザ110から、照会マネジャー505は、組合せ論理関数の集合Fを実行する部分回路網の照会を受け取る。受け取った組合せ論理関数の集合は1つの関数F_1またはいくつかの関数F_1,...,F_Mを含む。以下の実施形態では、受け取った集合内の各組合せ論理関数はROBDD形式である。しかし、当業者であれば、他の形式(真理値表、記号形式、他のタイプのBDDなど)も受け取った組合せ論理関数を表すために使用できることを理解することができるだろう。
受け取った照会に応答して、照会マネジャー505は、回路網エンコーダ510、インデクサ515、およびテーブル・マネジャー520と対話してデータベース・テーブル525に記憶されその照会に一致する部分回路網の集合を識別しようとする。言い換えれば、照会マネジャーは、受け取った関数の集合内のすべての関数を計算(実現)する事前集計された部分回路網を識別しようとする。
A.照会マネジャー
グローバル・オプティマイザ110から、照会マネジャー505は、組合せ論理関数の集合Fを実行する部分回路網の照会を受け取る。受け取った組合せ論理関数の集合は1つの関数F_1またはいくつかの関数F_1,...,F_Mを含む。以下の実施形態では、受け取った集合内の各組合せ論理関数はROBDD形式である。しかし、当業者であれば、他の形式(真理値表、記号形式、他のタイプのBDDなど)も受け取った組合せ論理関数を表すために使用できることを理解することができるだろう。
受け取った照会に応答して、照会マネジャー505は、回路網エンコーダ510、インデクサ515、およびテーブル・マネジャー520と対話してデータベース・テーブル525に記憶されその照会に一致する部分回路網の集合を識別しようとする。言い換えれば、照会マネジャーは、受け取った関数の集合内のすべての関数を計算(実現)する事前集計された部分回路網を識別しようとする。
図6は、照会マネジャーが組合せ論理関数の集合Fの受け取った照会に応答して実行するプロセス600を示す。図6に示すように、照会マネジャーは最初、入力関数の受け取った集合をインデクサ515に(605で)渡す。このインデクサは各関数を整数インデクスに翻訳してデータベース・テーブル525内に記憶する。
言い換えれば、インデクサ515は1つまたは複数の関数Fの集合から1つまたは複数のインデクスIを生成する。以下の実施形態では、インデクサは、単一関数照会F_1を単一インデクスI_1に変換して回路網データベース内に記憶する。この単一インデクスは照会の関数を実現する1つまたは複数の部分回路網の集合を識別する。多関数照会の場合、このインデクサは、1つまたは複数の関数をピボット関数として選択し、このピボット関数に基づいて入力変数の順序を指定し、このピボット関数のインデクスを生成する。照会内に2つ以上のピボット関数がある場合、インデクサはピボット関数からランダムに選択する。また、ピボット関数について指定できるいくつかの入力変数の順序(以下の入力変数構成とも呼ばれる)がある場合、インデクサは実行可能な入力変数構成からランダムに選択する。ピボット関数の指定された入力変数順序に基づいて、インデクサは照会の非ピボット関数の各々のインデクスを生成する。インデクサ515について図7〜図9を参照しながら以下にさらに説明する。
言い換えれば、インデクサ515は1つまたは複数の関数Fの集合から1つまたは複数のインデクスIを生成する。以下の実施形態では、インデクサは、単一関数照会F_1を単一インデクスI_1に変換して回路網データベース内に記憶する。この単一インデクスは照会の関数を実現する1つまたは複数の部分回路網の集合を識別する。多関数照会の場合、このインデクサは、1つまたは複数の関数をピボット関数として選択し、このピボット関数に基づいて入力変数の順序を指定し、このピボット関数のインデクスを生成する。照会内に2つ以上のピボット関数がある場合、インデクサはピボット関数からランダムに選択する。また、ピボット関数について指定できるいくつかの入力変数の順序(以下の入力変数構成とも呼ばれる)がある場合、インデクサは実行可能な入力変数構成からランダムに選択する。ピボット関数の指定された入力変数順序に基づいて、インデクサは照会の非ピボット関数の各々のインデクスを生成する。インデクサ515について図7〜図9を参照しながら以下にさらに説明する。
インデクサがインデクスIの集合を(605で)返すと、照会マネジャー505はこの集合をテーブル・マネジャー520に(610で)渡す。テーブル・マネジャー520はインデクスの集合に基づいて分類された事前集計された部分回路網を記憶するデータベース・テーブル525と対話する。以下の実施形態では、データベース・テーブルは、リレーショナル・データベース方法を用いてすべての部分回路網とそれに関連するインデクスを共に記憶する。いくつかの実施形態においては、データベース・テーブルはまた、記憶された部分回路網ごとに、部分回路網の実際のまたは推定サイズまたは速度などの追加データを記憶する。さらに、部分回路網はこれらのテーブル内に符号化された形式で記憶されている。
受け取ったインデクスIの集合に基づいて、テーブル・マネジャー520は、データベース・テーブル525から事前集計された代替部分回路網の集合を取り出そうとする。テーブル・マネジャーがデータベース・テーブルから代替部分回路網を成功裏に取り出すと、テーブル・マネジャーはまた、代替部分回路網ごとにデータベース内に記憶されている追加のパラメータ(推定または実際のサイズまたは速度など)を取り出すことができる。グローバル・オプティマイザはそのようなパラメータを用いて、選択された部分回路網候補をデータベースから取り出された代替部分回路網に置き換えるか否かを決定する。データベース・テーブル520とテーブル・マネジャー515の動作について図15〜図17を参照しながら以下にさらに説明する。
610の後で、照会マネジャーはテーブル・マネジャーが610で受け取ったインデクスの集合について代替部分回路網を返したか否かを(615で)決定する。返していない場合、プロセスは655に移行する(以下に説明する)。返している場合、照会マネジャーは610でテーブル・マネジャーが取り出した1つの代替部分回路網を(620で)選択する。
テーブル・マネジャーが取り出した代替部分回路網は符号化された形式である。したがって、照会マネジャーは回路網エンコーダ510に620で選択した代替部分回路網を復号するように(625で)指示する。回路網エンコーダはこの部分回路網を(1)部分回路網の回路素子ごとに1つのノードと、部分回路網の回路素子間の接続ごとに1つのエッジを有するリンクされたグラフ・データ構造体と、(2)グラフ構造のノードごとの局所関数とに復号する。また、各局所関数は、いくつかの実施形態においてはROBDDで表される。いくつかの実施形態で使用される回路網符号化および復号化について第III.D章でさらに詳しく説明する。
受け取ったインデクスIの集合に基づいて、テーブル・マネジャー520は、データベース・テーブル525から事前集計された代替部分回路網の集合を取り出そうとする。テーブル・マネジャーがデータベース・テーブルから代替部分回路網を成功裏に取り出すと、テーブル・マネジャーはまた、代替部分回路網ごとにデータベース内に記憶されている追加のパラメータ(推定または実際のサイズまたは速度など)を取り出すことができる。グローバル・オプティマイザはそのようなパラメータを用いて、選択された部分回路網候補をデータベースから取り出された代替部分回路網に置き換えるか否かを決定する。データベース・テーブル520とテーブル・マネジャー515の動作について図15〜図17を参照しながら以下にさらに説明する。
610の後で、照会マネジャーはテーブル・マネジャーが610で受け取ったインデクスの集合について代替部分回路網を返したか否かを(615で)決定する。返していない場合、プロセスは655に移行する(以下に説明する)。返している場合、照会マネジャーは610でテーブル・マネジャーが取り出した1つの代替部分回路網を(620で)選択する。
テーブル・マネジャーが取り出した代替部分回路網は符号化された形式である。したがって、照会マネジャーは回路網エンコーダ510に620で選択した代替部分回路網を復号するように(625で)指示する。回路網エンコーダはこの部分回路網を(1)部分回路網の回路素子ごとに1つのノードと、部分回路網の回路素子間の接続ごとに1つのエッジを有するリンクされたグラフ・データ構造体と、(2)グラフ構造のノードごとの局所関数とに復号する。また、各局所関数は、いくつかの実施形態においてはROBDDで表される。いくつかの実施形態で使用される回路網符号化および復号化について第III.D章でさらに詳しく説明する。
625で代替部分回路網を復号化した後で、照会マネジャーは、620で選択した代替部分回路網が210で選択した部分回路網候補と一致するか否かを(630で)決定する。以下の実施形態では、代替部分回路網の特定の入力変数構成について代替部分回路網が部分回路網候補のすべての出力関数(すなわち、部分回路網候補について215で識別された関数Fの集合内のすべての関数)を実行する場合に限って、代替部分回路網は部分回路網候補と一致する。照会マネジャーのこの決定はインデクサ515の動作の理解を必要とする。したがって、インデクサの動作を第III.B.1〜3節で説明した後で第III.B.4節でこの決定について説明する。また、第III.B.4節で、照会マネジャーが、代替部分回路網が部分回路網候補のすべての出力関数を実行するか否かを検査しなければならない理由を説明する。
照会マネジャーが、620で選択した代替部分回路網が210で選択した部分回路網候補と一致しないと(630で)決定した場合、照会マネジャーは640に移行する(以下にさらに説明する)。ただし、選択した代替部分回路網が、選択した部分回路網候補に一致する場合、照会マネジャーは一致した代替部分回路網の集合に一致した代替部分回路網を(635で)追加する。635から、照会マネジャーは640に移行する。
640で、照会マネジャーは、610でテーブル・マネジャーが取り出したすべての部分回路網を検証したか否かを決定する。検証していない場合、照会マネジャーは、620に戻ってまだ検証していない別の取り出した部分回路網を選択し、この部分回路網について上記の以降の処理を繰り返す。
照会マネジャーが、テーブル・マネジャーが取り出したすべての代替部分回路網を検証したと(640で)決定した時には、照会マネジャーは取り出した代替部分回路網の少なくとも1つが、選択した部分回路網候補に一致したか否かを(645で)決定する(すなわち、一致する代替部分回路網の集合が少なくとも1つの代替部分回路網を含むか否かを決定する)。
照会マネジャーが、620で選択した代替部分回路網が210で選択した部分回路網候補と一致しないと(630で)決定した場合、照会マネジャーは640に移行する(以下にさらに説明する)。ただし、選択した代替部分回路網が、選択した部分回路網候補に一致する場合、照会マネジャーは一致した代替部分回路網の集合に一致した代替部分回路網を(635で)追加する。635から、照会マネジャーは640に移行する。
640で、照会マネジャーは、610でテーブル・マネジャーが取り出したすべての部分回路網を検証したか否かを決定する。検証していない場合、照会マネジャーは、620に戻ってまだ検証していない別の取り出した部分回路網を選択し、この部分回路網について上記の以降の処理を繰り返す。
照会マネジャーが、テーブル・マネジャーが取り出したすべての代替部分回路網を検証したと(640で)決定した時には、照会マネジャーは取り出した代替部分回路網の少なくとも1つが、選択した部分回路網候補に一致したか否かを(645で)決定する(すなわち、一致する代替部分回路網の集合が少なくとも1つの代替部分回路網を含むか否かを決定する)。
含む場合、照会マネジャーは、グローバル・オプティマイザに返す一致する代替部分回路網の集合を(650で)返して終了する。いくつかの実施形態では、照会マネジャーは、グローバル・オプティマイザに返す部分回路網の最大数を指定するパラメータ(例えば、ユーザ定義パラメータ)をグローバル・オプティマイザから受け取る。これらの実施形態では、照会マネジャーは、(650で)これらのパラメータを用いてオプティマイザに返そうとする部分回路網を一致する部分回路網の集合から選択する。あるいは、他の実施形態では、照会マネジャーは、(1)返す1つまたは複数の一致する部分回路網をランダムに選択でき、(2)すべての一致する部分回路網を選択でき、または(3)指定された数のノードを超えるノードを有さないすべての一致する部分回路網候を選択できる。
他方、照会マネジャーが、取り出された代替部分回路網が、選択された部分回路網候補に一致しないと(645で)決定した場合、照会マネジャーは655へ移行する。上記のように、照会マネジャーはまた、テーブル・マネジャーが610で部分回路網を全く取り出すことができないと、615から655に移行する。615または645から、照会マネジャーが210で選択した部分回路網候補に対して、一致する事前集計された部分回路網を識別できないと、照会マネジャーは655で終了する。
この失敗は、照会マネジャーがいかなる取り出された代替部分回路網も選択された部分回路網候補の出力関数の集合を実行できると確認できないためである。あるいは、この失敗はインデクサによる入力変数構成の選択が原因である。上記のように、インデクサが複数のインデクスを生成しなければならない時には(すなわち、部分回路網候補がいくつかの出力関数を実行する時には)、インデクサはある入力変数構成をインデクスの基礎として選択する。この選択について第III.B章でさらに説明する。インデクサの選択がデータベース内の部分回路網の事前集計時に選択された入力変数構成に一致しない場合、ランタイム最適化動作時にインデクサが生成したインデクスの集合は、一致する代替部分回路網を返さないことがある(すなわち、いかなる代替部分回路網も返さないか、2つの照合判定基準を満たさない代替部分回路網を返さないことがある)。
したがって、照会マネジャーは、655、660、および665を実行して一致の失敗がインデクサによる入力変数構成の選択による可能性を低減する。特に、655で、照会マネジャーは、照会が多関数照会であるか否かを決定する。多関数照会でない場合、一致発見の失敗は入力変数構成の選択によるものではない。したがって、プロセスは選択した部分回路網候補に対して、一致する部分回路網を見つけることができなかった(すなわち、部分回路網候補と同じ関数を実行する実現可能な事前集計された代替部分回路網を見つけることができなかった)旨をオプティマイザ110に(670で)通知し、この処理を終了する。
他方、照会マネジャーが、取り出された代替部分回路網が、選択された部分回路網候補に一致しないと(645で)決定した場合、照会マネジャーは655へ移行する。上記のように、照会マネジャーはまた、テーブル・マネジャーが610で部分回路網を全く取り出すことができないと、615から655に移行する。615または645から、照会マネジャーが210で選択した部分回路網候補に対して、一致する事前集計された部分回路網を識別できないと、照会マネジャーは655で終了する。
この失敗は、照会マネジャーがいかなる取り出された代替部分回路網も選択された部分回路網候補の出力関数の集合を実行できると確認できないためである。あるいは、この失敗はインデクサによる入力変数構成の選択が原因である。上記のように、インデクサが複数のインデクスを生成しなければならない時には(すなわち、部分回路網候補がいくつかの出力関数を実行する時には)、インデクサはある入力変数構成をインデクスの基礎として選択する。この選択について第III.B章でさらに説明する。インデクサの選択がデータベース内の部分回路網の事前集計時に選択された入力変数構成に一致しない場合、ランタイム最適化動作時にインデクサが生成したインデクスの集合は、一致する代替部分回路網を返さないことがある(すなわち、いかなる代替部分回路網も返さないか、2つの照合判定基準を満たさない代替部分回路網を返さないことがある)。
したがって、照会マネジャーは、655、660、および665を実行して一致の失敗がインデクサによる入力変数構成の選択による可能性を低減する。特に、655で、照会マネジャーは、照会が多関数照会であるか否かを決定する。多関数照会でない場合、一致発見の失敗は入力変数構成の選択によるものではない。したがって、プロセスは選択した部分回路網候補に対して、一致する部分回路網を見つけることができなかった(すなわち、部分回路網候補と同じ関数を実行する実現可能な事前集計された代替部分回路網を見つけることができなかった)旨をオプティマイザ110に(670で)通知し、この処理を終了する。
他方、関数が多関数照会であるとプロセスが(655で)決定した場合、照会マネジャーはインデクサが、605でインデクサの集合を返した時に2つ以上の入力変数構成の存在を指定したか否かを(660で)決定する。インデクサがこれを指定しなかった場合、一致する部分回路網の識別の失敗はインデクサによる入力変数構成の選択が原因ではない。したがって、照会マネジャーは、660から670に移行し、選択した部分回路網候補に対して、一致する部分回路網を見つけることができなかった旨をオプティマイザ110に通知する。ここで照会マネジャーは処理を終了する。
あるいは、インデクサが2つ以上の入力変数構成を(605で)指定した時には、照会マネジャーは、660から665に移行する。665で、照会マネジャーは、一致する部分回路網に帰結するインデクスの集合をインデクサから得る処理を十分な回数試行したか否かを決定する。いくつかの実施形態では、照会マネジャーは、関数Tを用いてインデクサからインデクスの集合を入手する試行回数を指定する。この関数は、605でインデクサが指定した入力変数構成の数Nに依存する整数を返す。なお、605で、インデクサは異なるピボット関数について毎回異なる数Nを返すことができることに留意されたい。
Nを受け取った時に関数TがNに等しい場合(すなわち、T(N)=Nの場合)、インデクサが毎回入力変数構成をランダムに選択するとして、照会マネジャーが毎回可能な入力順序を試行する予想回数は1回である。このプロセスを迅速化するために、いくつかの実施形態では、
T(N)=min[10,(N/定数)]
と定義し、ここで、定数は時には5〜10の範囲の数に設定される。別の実施形態では、(1)照会マネジャーおよびインデクサが事前集計時に使用した構成に一致する入力構成を見つける尤度「p」(0<p≦1)を指定し、次に、(2)T(N)=N*pと定義する。
あるいは、インデクサが2つ以上の入力変数構成を(605で)指定した時には、照会マネジャーは、660から665に移行する。665で、照会マネジャーは、一致する部分回路網に帰結するインデクスの集合をインデクサから得る処理を十分な回数試行したか否かを決定する。いくつかの実施形態では、照会マネジャーは、関数Tを用いてインデクサからインデクスの集合を入手する試行回数を指定する。この関数は、605でインデクサが指定した入力変数構成の数Nに依存する整数を返す。なお、605で、インデクサは異なるピボット関数について毎回異なる数Nを返すことができることに留意されたい。
Nを受け取った時に関数TがNに等しい場合(すなわち、T(N)=Nの場合)、インデクサが毎回入力変数構成をランダムに選択するとして、照会マネジャーが毎回可能な入力順序を試行する予想回数は1回である。このプロセスを迅速化するために、いくつかの実施形態では、
T(N)=min[10,(N/定数)]
と定義し、ここで、定数は時には5〜10の範囲の数に設定される。別の実施形態では、(1)照会マネジャーおよびインデクサが事前集計時に使用した構成に一致する入力構成を見つける尤度「p」(0<p≦1)を指定し、次に、(2)T(N)=N*pと定義する。
さらに別の実施形態では、照会マネジャーとインデクサが、事前集計時に使用する、特定の部分回路網を記憶する入力変数構成を見つけるために可能な入力変数構成を決定論的に検索する。しかし、そのような手法はより時間がかかる。この消費時間は入力変数構成のいずれにも一致する部分回路網がデータベース内に存在しない時に問題になる。また、このことは、入力構成の数が比較的大きい時(例えば、n−way ANDのような完全に対称なピボット関数など)に特に問題になる。
照会マネジャーが、インデクサに関数Tが指定した回数を超えてインデクスの集合を生成するよう要求していないと(665で)決定した場合、照会マネジャーは605に戻って再びインデクサにインデクスの集合の生成を指示する。上記のように、また以下にさらに説明するように、インデクサは実行可能なピボット関数とこのピボット関数の実行可能な入力変数構成をランダムに選択することでインデクスの集合を生成する。したがって、次に生成されるインデクスの集合によって、選択した部分回路網候補に一致する代替部分回路網の集合を識別することができる。
照会マネジャーが、一致する代替部分回路網を十分な回数だけ識別しようとして失敗したと665で決定すると、照会マネジャーは、選択した部分回路網候補に一致する部分回路網候補を見つけることができなかった(すなわち、部分回路網候補と同じ関数の集合を実行する実現可能な事前集計された代替部分回路網を見つけることができなかった)旨を(670で)オプティマイザ110に通知し、処理を終了する。
照会マネジャーが、インデクサに関数Tが指定した回数を超えてインデクスの集合を生成するよう要求していないと(665で)決定した場合、照会マネジャーは605に戻って再びインデクサにインデクスの集合の生成を指示する。上記のように、また以下にさらに説明するように、インデクサは実行可能なピボット関数とこのピボット関数の実行可能な入力変数構成をランダムに選択することでインデクスの集合を生成する。したがって、次に生成されるインデクスの集合によって、選択した部分回路網候補に一致する代替部分回路網の集合を識別することができる。
照会マネジャーが、一致する代替部分回路網を十分な回数だけ識別しようとして失敗したと665で決定すると、照会マネジャーは、選択した部分回路網候補に一致する部分回路網候補を見つけることができなかった(すなわち、部分回路網候補と同じ関数の集合を実行する実現可能な事前集計された代替部分回路網を見つけることができなかった)旨を(670で)オプティマイザ110に通知し、処理を終了する。
B.インデクサ
1つまたは複数の論理関数を実現する部分回路網を検索するには、これらの部分回路網を記憶するための効率的な検索付け方法を有する必要がある。この方法は特定の照会に一致するすべての部分回路網を完全に、または高い確率で返すことができなければならない。
インデクサ515はそのような索引付け方法を容易にする。特に、インデクサは、組合せ論理関数をデータベース・インデクスにマッピングする。リレーショナル・データベースについては、インデクスという用語は、記憶、分類および比較が可能な基本データ型(例えば、整数または文字列)を指す。以下の実施形態では、各々のインデクスは整数である。
1つまたは複数の論理関数を実現する部分回路網を検索するには、これらの部分回路網を記憶するための効率的な検索付け方法を有する必要がある。この方法は特定の照会に一致するすべての部分回路網を完全に、または高い確率で返すことができなければならない。
インデクサ515はそのような索引付け方法を容易にする。特に、インデクサは、組合せ論理関数をデータベース・インデクスにマッピングする。リレーショナル・データベースについては、インデクスという用語は、記憶、分類および比較が可能な基本データ型(例えば、整数または文字列)を指す。以下の実施形態では、各々のインデクスは整数である。
以下の実施形態は、単一出力または多出力部分回路網(すなわち、1つの関数または複数の関数を実現する部分回路網)を識別できる直接索引付け方法を使用する。インデクサ515が照会マネジャーから単一関数または多関数照会を受け取るたびに、このインデクサは受け取った照会内の各関数を整数インデクスに変換してデータベース・テーブル525内に記憶する。次に、生成されたインデクスの集合を用いて、生成された集合内の各インデクスに関連する(すなわち、関連する)すべてのエントリ(すべての部分回路網)を回路網データベース内で検索することができる。
図7は、いくつかの実施形態でのインデクサ515の構成要素を示す。この図に示すように、このインデクサはトランスレータ705、入力順序識別子710、ハッシャー715、およびインデクス・マネジャー720を含む。このインデクサは、部分回路網の事前集計の際または回路網のランタイム最適化の際に使用することができる。それぞれの場合に、インデクサは、受け取った関数の集合のインデクスの集合を生成する。生成されたインデクスの集合を用いて、事前集計時に生成された部分回路網を記憶することができ、最適化の際に事前集計された部分回路網を取り出すことができる。
マネジャー720は、インデクサの動作フローを指示する。このマネジャーは照会マネジャー505、トランスレータ705、入力順序識別子710、およびハッシャー715と対話する。マネジャー720は、トランスレータ705を用いて各関数のROBDD表現を中間整数表現に変換する。以下の実施形態では、この中間表現は以下にさらに説明する真理値表である。マネジャー720は、入力順序識別子710を用いて210で選択した部分回路網候補の入力変数の1つまたは複数の順序を指定する。次に、マネジャー720は、ハッシャー715を用いて各関数のインデクスを表すビット数を減らす。
図7は、いくつかの実施形態でのインデクサ515の構成要素を示す。この図に示すように、このインデクサはトランスレータ705、入力順序識別子710、ハッシャー715、およびインデクス・マネジャー720を含む。このインデクサは、部分回路網の事前集計の際または回路網のランタイム最適化の際に使用することができる。それぞれの場合に、インデクサは、受け取った関数の集合のインデクスの集合を生成する。生成されたインデクスの集合を用いて、事前集計時に生成された部分回路網を記憶することができ、最適化の際に事前集計された部分回路網を取り出すことができる。
マネジャー720は、インデクサの動作フローを指示する。このマネジャーは照会マネジャー505、トランスレータ705、入力順序識別子710、およびハッシャー715と対話する。マネジャー720は、トランスレータ705を用いて各関数のROBDD表現を中間整数表現に変換する。以下の実施形態では、この中間表現は以下にさらに説明する真理値表である。マネジャー720は、入力順序識別子710を用いて210で選択した部分回路網候補の入力変数の1つまたは複数の順序を指定する。次に、マネジャー720は、ハッシャー715を用いて各関数のインデクスを表すビット数を減らす。
図8および図9は、いくつかの実施形態でインデクス・マネジャー720が実行する2つのプロセスを概念図である。このマネジャーは、図8のプロセス800を用いて単一関数照会の関数のインデクスを識別する。このマネジャーは、図9のプロセス900を用いて多関数照会の複数のインデクスを生成する。特に、以下にさらに説明するように、多関数照会のプロセス900は、(1)照会関数の1つをピボット関数として識別し、(2)プロセス800を用いて、指定されたピボット関数のインデクスを識別し、入力変数構成を識別し、次に、(3)識別した入力変数構成に基づいて照会の各非ピボット関数のインデクスを識別する。
1.単一関数照会のインデクスまたは多関数照会のピボット・インデクスの計算
上記のように、インデクス・マネジャー720は、図8のプロセス800を実行して単一関数照会のインデクスを識別する。また、このマネジャーは、このプロセスを図9のプロセス900の一部として実行して、多関数照会のピボット・インデクスを識別する。プロセス800が呼び出される時はいつでも、関数と演算パラメータが供給される。演算パラメータは、プロセス800が入力変数構成をランダムにまたは決定論的にのいずれの方法で選択するかを指定する。演算パラメータは、最適化の際にランダムな演算を指定するが、事前集計時には決定論的演算を指定する。
図8に示すように、プロセス800は最初、トランスレータ705にそれが動作する土台となる関数の真理値表表現を生成するようにトランスレータ705に(805で)指示する。上記のように、照会マネジャーはインデクサにROBDD形式の関数を供給する。しかし、他の実施形態では、照会マネジャーは別の形式の関数を提供することもできる。
真理値表表現は、各ビットが入力値の1つの集合の関数の出力に対応する2進ビット列である。以下の表1は、2つの関数の真理値表の例を示す。第1の関数Gは、2入力AND関数である。以下の表に示すように、この関数の真理値表は0001である。入力値の集合ごとに1つの出力ビットがあるので、この真理値表は4ビット長である。第2の関数Hは、第2の入力が反転した2入力ANDである。以下の表1に示すように、この関数Hの真理値表は0100である。
1.単一関数照会のインデクスまたは多関数照会のピボット・インデクスの計算
上記のように、インデクス・マネジャー720は、図8のプロセス800を実行して単一関数照会のインデクスを識別する。また、このマネジャーは、このプロセスを図9のプロセス900の一部として実行して、多関数照会のピボット・インデクスを識別する。プロセス800が呼び出される時はいつでも、関数と演算パラメータが供給される。演算パラメータは、プロセス800が入力変数構成をランダムにまたは決定論的にのいずれの方法で選択するかを指定する。演算パラメータは、最適化の際にランダムな演算を指定するが、事前集計時には決定論的演算を指定する。
図8に示すように、プロセス800は最初、トランスレータ705にそれが動作する土台となる関数の真理値表表現を生成するようにトランスレータ705に(805で)指示する。上記のように、照会マネジャーはインデクサにROBDD形式の関数を供給する。しかし、他の実施形態では、照会マネジャーは別の形式の関数を提供することもできる。
真理値表表現は、各ビットが入力値の1つの集合の関数の出力に対応する2進ビット列である。以下の表1は、2つの関数の真理値表の例を示す。第1の関数Gは、2入力AND関数である。以下の表に示すように、この関数の真理値表は0001である。入力値の集合ごとに1つの出力ビットがあるので、この真理値表は4ビット長である。第2の関数Hは、第2の入力が反転した2入力ANDである。以下の表1に示すように、この関数Hの真理値表は0100である。
入力1と入力2の順序が反転した場合、関数Gの真理値表は同じであるが、関数Hの場合には、0010に変化する。以下にさらに説明するように、関数Hの真理値表の変化は関数の真理値表表現が入力信号の順序に依存するという事実を反映している。
関数の真理値表を(805で)生成した後で、プロセス800は、入力順序識別子710に関数Fの真理値表の正準表現を識別するように(810で)指示する。正準表現は特定のアルゴリズムが常に選択する可能な表現の集合から選択した固定の一意的表現である。以下の実施形態では、この正準表現は、入力変数順序のすべての変形例の真理値表の集合から得たFの最小の真理値表である。例えば、上記の関数Hは、入力が2つで、これら2つの入力順序を入れ替えることができるので、2つの入力変数構成を有する。これら2つの入力変数構成の真理値表は、0100と0010である。真理値表の最下位ビットを右端のビットにとると、関数Hの正準真理値表表現は、0010になる。
いくつかの実施形態では、入力順序識別子は、ブランチアンドバウンド法に、805で識別した真理値表表現を初期開始点に用いてすべての入力変数構成を検証することなく関数の真理値表の空間を検索させることによって、関数Fの正準真理値表表現を識別する。そのようなブランチアンドバウンド法は、1998年6月15〜19日付けのUwe HinsbergerおよびReiner Kollaの、「Boolean matching for large Libraries」、DAC98に記載されている。
810で、入力順序識別子はまた、1つまたは複数の変数構成の集合を指定する。この集合の各入力変数構成は、810で識別される正準表現になる。言い換えれば、真理値表表現は、入力変数構成の指定された集合内の各構成について同一である。
当業者であれば、他の実施形態においては、正準化を実行するために供給される関数を真理値表表現に変換しないということを理解することができるだろう。これらの実施形態は供給される関数のBDD表現について直接810で正準化を実行する。Proc.ICCAD 1992年、Jerry BurchおよびDavid Longの「Efficient Boolean Function Matching」は、半正準BDD表現の獲得方法を記載している。プロセス800は、真理値表表現の正準演算を適用する。これはこの手法が、高速マシン実行ビット単位演算を用いて効率的に実施できるので、特に入力数が少ない関数について高速であることが理由である。
正準真理値表表現およびこの表現に導く入力変数構成の集合を識別した後で、プロセス800は受け取る演算パラメータに基づいて、識別された入力変数構成の集合を決定論的にまたはランダムに(815で)選択する。部分回路網候補のインデクスのランタイム生成時に、演算パラメータはプロセス800に入力変数構成をランダムに選択するよう指示する。
関数の真理値表を(805で)生成した後で、プロセス800は、入力順序識別子710に関数Fの真理値表の正準表現を識別するように(810で)指示する。正準表現は特定のアルゴリズムが常に選択する可能な表現の集合から選択した固定の一意的表現である。以下の実施形態では、この正準表現は、入力変数順序のすべての変形例の真理値表の集合から得たFの最小の真理値表である。例えば、上記の関数Hは、入力が2つで、これら2つの入力順序を入れ替えることができるので、2つの入力変数構成を有する。これら2つの入力変数構成の真理値表は、0100と0010である。真理値表の最下位ビットを右端のビットにとると、関数Hの正準真理値表表現は、0010になる。
いくつかの実施形態では、入力順序識別子は、ブランチアンドバウンド法に、805で識別した真理値表表現を初期開始点に用いてすべての入力変数構成を検証することなく関数の真理値表の空間を検索させることによって、関数Fの正準真理値表表現を識別する。そのようなブランチアンドバウンド法は、1998年6月15〜19日付けのUwe HinsbergerおよびReiner Kollaの、「Boolean matching for large Libraries」、DAC98に記載されている。
810で、入力順序識別子はまた、1つまたは複数の変数構成の集合を指定する。この集合の各入力変数構成は、810で識別される正準表現になる。言い換えれば、真理値表表現は、入力変数構成の指定された集合内の各構成について同一である。
当業者であれば、他の実施形態においては、正準化を実行するために供給される関数を真理値表表現に変換しないということを理解することができるだろう。これらの実施形態は供給される関数のBDD表現について直接810で正準化を実行する。Proc.ICCAD 1992年、Jerry BurchおよびDavid Longの「Efficient Boolean Function Matching」は、半正準BDD表現の獲得方法を記載している。プロセス800は、真理値表表現の正準演算を適用する。これはこの手法が、高速マシン実行ビット単位演算を用いて効率的に実施できるので、特に入力数が少ない関数について高速であることが理由である。
正準真理値表表現およびこの表現に導く入力変数構成の集合を識別した後で、プロセス800は受け取る演算パラメータに基づいて、識別された入力変数構成の集合を決定論的にまたはランダムに(815で)選択する。部分回路網候補のインデクスのランタイム生成時に、演算パラメータはプロセス800に入力変数構成をランダムに選択するよう指示する。
しかし、事前集計時には、演算パラメータはプロセス800に入力順序を決定論的に選択するよう指示する。入力順序識別子は、常に特定の順序で入力変数構成の集合を(810で)返す。プロセス800が事前集計時に決定論的に動作する時には、プロセス800は、常に入力構成の返された集合内の同じ入力構成を入力構成として選択する。例えば、いくつかの実施形態では、このプロセスは、常に返された集合内の第1の入力構成を指定された構成として選択する。事前集計時のインデクサ515の動作については後ほど第IV章でさらに説明する。
815で入力変数構成を選択した後、プロセス800はハッシャー715に関数Fの結果的な正準真理値表表現を回路網データベースへのインデクスにマッピングするよう(820で)指示する。真理値表表現は多くの場合に長いビット列になるのでデータベースへの優れたインデクスとは言えない。したがって、ハッシャーが真理値表表現を真理値表表現より短いハッシュされたインデクス値にマッピングする。第III.B.3章は本発明のいくつかの実施形態で使用するハッシャーについて説明する。820の後で、プロセス800は820で識別したハッシュ値を(825で)返して終了する。
815で入力変数構成を選択した後、プロセス800はハッシャー715に関数Fの結果的な正準真理値表表現を回路網データベースへのインデクスにマッピングするよう(820で)指示する。真理値表表現は多くの場合に長いビット列になるのでデータベースへの優れたインデクスとは言えない。したがって、ハッシャーが真理値表表現を真理値表表現より短いハッシュされたインデクス値にマッピングする。第III.B.3章は本発明のいくつかの実施形態で使用するハッシャーについて説明する。820の後で、プロセス800は820で識別したハッシュ値を(825で)返して終了する。
2.多関数照会のインデクスの計算
図9は、多関数照会のインデクスを識別するプロセス900の概念図である。インデクス・マネジャー720は多関数照会を受け取るといつでもこのプロセスに指示する。図9に示すように、インデクス・マネジャー720は、最初、照会内の関数の1つをピボット関数として(905で)選択する。照会が複数のピボット関数を有する時には(210で選択した部分回路網候補が複数のピボット関数を有する時には)、インデクス・マネジャー720は照会内のピボット関数の1つをランダムに選択する。以下の説明で、分かり易くするために、選択されたピボット関数は第1の関数F_1として指定される。
インデクス・マネジャー720はピボット関数を用いて部分回路網への入力変数の順序を識別する。したがって、以下の実施形態は、すべての入力変数に依存する関数をピボット関数として選択する。これは、そのような関数を用いてすべての入力変数に順序を課すことができるからである。
上記のように、プロセス200の(210での)部分回路網候補の選択によって、確実に、この部分回路網候補がすべての入力変数に依存する少なくとも1つの関数を有することになる。また、以下の実施形態では、事前集計プロセスでは少なくとも1つの1つのピボット関数を有する多関数部分回路網のみを事前集計するので、部分回路網の事前集計はピボット関数のそのような選択にふさわしい。
図9は、多関数照会のインデクスを識別するプロセス900の概念図である。インデクス・マネジャー720は多関数照会を受け取るといつでもこのプロセスに指示する。図9に示すように、インデクス・マネジャー720は、最初、照会内の関数の1つをピボット関数として(905で)選択する。照会が複数のピボット関数を有する時には(210で選択した部分回路網候補が複数のピボット関数を有する時には)、インデクス・マネジャー720は照会内のピボット関数の1つをランダムに選択する。以下の説明で、分かり易くするために、選択されたピボット関数は第1の関数F_1として指定される。
インデクス・マネジャー720はピボット関数を用いて部分回路網への入力変数の順序を識別する。したがって、以下の実施形態は、すべての入力変数に依存する関数をピボット関数として選択する。これは、そのような関数を用いてすべての入力変数に順序を課すことができるからである。
上記のように、プロセス200の(210での)部分回路網候補の選択によって、確実に、この部分回路網候補がすべての入力変数に依存する少なくとも1つの関数を有することになる。また、以下の実施形態では、事前集計プロセスでは少なくとも1つの1つのピボット関数を有する多関数部分回路網のみを事前集計するので、部分回路網の事前集計はピボット関数のそのような選択にふさわしい。
他の実施形態においては、210での部分回路網候補の選択および/または部分回路網の事前集計は少なくとも1つのピボット関数(すなわち、すべての入力変数に依存する出力関数)の存在を保証する必要はない。例えば、プロセス900は、代替部分回路網の検索を終了することによって、すべての入力変数に依存する出力関数を有さない部分回路網候補を扱うことができる。他の方法としては、プロセス900は、大半の数の入力に依存する関数を(905で)選択し、次に他の部分回路網入力の位置を指定する特定の方法を用いることによって、ピボット関数を有さない多関数照会を扱うことができる。例えば、選択した部分回路網候補が5つの入力を有し、その最善の出力関数が4つの入力にしか依存しない場合、プロセス900は最善の出力関数を選択し、第5の入力を左端の入力として位置付けることができる。したがって、ピボット関数の存在は重要ではなく、オプティマイザのヒット率を改善するために以下の実施形態で使用される。
905の後で、プロセス900は選択されたピボット関数F_1のインデクスI_1を(910で)計算する。インデクス・マネジャーは図8のプロセス800を用いてこのインデクス値I_1を計算する。上記のように、810の正準化手順は、関数F_1プラス入力順序の正準真理値表表現を返す。返された入力変数順序は照会内の残りの非ピボット関数のインデクスを生成するために使用される。
特に、特定の非ピボット関数ごとに、インデクス・マネジャーは(915で)トランスレータ705を用いて、910で返された入力変数順序に基づいて非ピボット関数の真理値表表現を生成する。また915で、インデクス・マネジャーはハッシャー715を用いて関数の生成された真理値表表現から各々の非ピボット関数のインデクスを生成する。次に、920で、インデクス・マネジャー720は生成されたインデクスの集合を照会マネジャー505に返す。
つまり、インデクサが使用する索引付け方法は本発明のいくつかの実施形態では以下のようになる。インデクサは単一関数照会を回路網データベースへの単一のインデクスに変換し、この単一のインデクスが照会の関数を実現する1つまたは複数の部分回路網を識別する。多関数照会の場合、このインデクサは関数の1つをピボット関数として選択し、このピボット関数に基づいて入力変数順序を指定し、このピボット関数のインデクスを生成し、次いで指定した順序に基づいて、照会の非ピボット関数の各々のインデクスを生成する。
905の後で、プロセス900は選択されたピボット関数F_1のインデクスI_1を(910で)計算する。インデクス・マネジャーは図8のプロセス800を用いてこのインデクス値I_1を計算する。上記のように、810の正準化手順は、関数F_1プラス入力順序の正準真理値表表現を返す。返された入力変数順序は照会内の残りの非ピボット関数のインデクスを生成するために使用される。
特に、特定の非ピボット関数ごとに、インデクス・マネジャーは(915で)トランスレータ705を用いて、910で返された入力変数順序に基づいて非ピボット関数の真理値表表現を生成する。また915で、インデクス・マネジャーはハッシャー715を用いて関数の生成された真理値表表現から各々の非ピボット関数のインデクスを生成する。次に、920で、インデクス・マネジャー720は生成されたインデクスの集合を照会マネジャー505に返す。
つまり、インデクサが使用する索引付け方法は本発明のいくつかの実施形態では以下のようになる。インデクサは単一関数照会を回路網データベースへの単一のインデクスに変換し、この単一のインデクスが照会の関数を実現する1つまたは複数の部分回路網を識別する。多関数照会の場合、このインデクサは関数の1つをピボット関数として選択し、このピボット関数に基づいて入力変数順序を指定し、このピボット関数のインデクスを生成し、次いで指定した順序に基づいて、照会の非ピボット関数の各々のインデクスを生成する。
以下に説明するように、事前集計プロセスは各々の特定の組合せ論理関数をただ1つのピボット・インデクスに対応させる。ピボット・インデクスは特定の関数がある種の照会のピボットとしての働きをする時にはいつでも使用される。各関数のピボット・インデクス(1次インデクスとも呼ばれる)は、事前集計時に、事前集計時にはこのインデクス生成プロセスが815でのランダムな選択とは逆に入力変数構成の1つを決定論的に選択するという点を除きプロセス800と同様のプロセスを用いて生成するインデクスである。さらに、事前集計時は、各組合せ論理関数はいくつかの2次インデクスに対応する。関数Fの2次インデクスは、ある集合{G,...,F,...}(異なる関数Gがピボット関数になり、入力順序を決定する)について照会がなされるケースを数える(識別する)ために使用される。
3.ハッシャー
いくつかの実施形態では、ハッシャー715は、Zbigniew J.Czech他の、「An Optimal Algorithm for Generating Minimal Perfect Hashing Functions」、Information Processing Letters、43(5);257〜264、1992年10月(「Czech文書」)に記載されたハッシュ関数を使用する。このハッシュ関数は「最小」ハッシュ関数と呼ばれる。Czech文書は、このハッシュ関数の生成方法を詳しく説明している。
本明細書について言えば、最小ハッシュ関数は部分回路網の事前集計時に生成される。特に、事前集計時には、データ・ゼネレータは多数の部分回路網を生成する。各部分回路網について、データ・ゼネレータはインデクサに部分回路網の各ピボット関数の正準真理値表表現を計算させる。部分回路網が2つ以上の関数を実行する時には、さらにインデクサは正準真理値表表現に基づいて入力変数構成を指定し、部分回路網の各非ピボット関数の真理値表表現を生成する。計算された真理値表表現に基づいて、データ・ゼネレータはハッシュ関数クリエータ(図示せず)を用いて事前計算された真理値表表現を一意的なインデクス値に関連付け、この関連を実現するハッシュ関数を生成する。定義された(静的)ハッシュ・テーブルからの最小ハッシュ関数の作成については、Czech文書に詳しく説明されている。最適化の際に、ハッシャーは生成されたハッシュ関数を用いてハッシャーがインデクス・マネジャー720から受け取る各真理値表のインデクスを生成する。
この最小ハッシュ関数は、ハッシュ関数に入力される真理値表のサイズに依存する直線時間でハッシュ関数の単一の評価を実行する際に少量のメモリしか使用しないという利点を有する。ただし、この関数はいかなる真理値表表現についても値を常に返すという特性があるという矛盾点がある。事前計算されたテーブルの1つに等しい真理値表の場合、ハッシュ関数はその一意的なインデクス値を常に返す。他のどのような入力についても、この関数はある整数を返すが、返された値が有効な入力の有効な値か、または無効な入力の任意の出力なのかを検査するのは困難である。したがって、このハッシュ関数のために、照会マネジャーは取り出された代替部分回路網が選択された部分回路網候補の出力関数の集合を実行するか否かを630で決定しなければならない。
いくつかの実施形態では、ハッシャー715は、Zbigniew J.Czech他の、「An Optimal Algorithm for Generating Minimal Perfect Hashing Functions」、Information Processing Letters、43(5);257〜264、1992年10月(「Czech文書」)に記載されたハッシュ関数を使用する。このハッシュ関数は「最小」ハッシュ関数と呼ばれる。Czech文書は、このハッシュ関数の生成方法を詳しく説明している。
本明細書について言えば、最小ハッシュ関数は部分回路網の事前集計時に生成される。特に、事前集計時には、データ・ゼネレータは多数の部分回路網を生成する。各部分回路網について、データ・ゼネレータはインデクサに部分回路網の各ピボット関数の正準真理値表表現を計算させる。部分回路網が2つ以上の関数を実行する時には、さらにインデクサは正準真理値表表現に基づいて入力変数構成を指定し、部分回路網の各非ピボット関数の真理値表表現を生成する。計算された真理値表表現に基づいて、データ・ゼネレータはハッシュ関数クリエータ(図示せず)を用いて事前計算された真理値表表現を一意的なインデクス値に関連付け、この関連を実現するハッシュ関数を生成する。定義された(静的)ハッシュ・テーブルからの最小ハッシュ関数の作成については、Czech文書に詳しく説明されている。最適化の際に、ハッシャーは生成されたハッシュ関数を用いてハッシャーがインデクス・マネジャー720から受け取る各真理値表のインデクスを生成する。
この最小ハッシュ関数は、ハッシュ関数に入力される真理値表のサイズに依存する直線時間でハッシュ関数の単一の評価を実行する際に少量のメモリしか使用しないという利点を有する。ただし、この関数はいかなる真理値表表現についても値を常に返すという特性があるという矛盾点がある。事前計算されたテーブルの1つに等しい真理値表の場合、ハッシュ関数はその一意的なインデクス値を常に返す。他のどのような入力についても、この関数はある整数を返すが、返された値が有効な入力の有効な値か、または無効な入力の任意の出力なのかを検査するのは困難である。したがって、このハッシュ関数のために、照会マネジャーは取り出された代替部分回路網が選択された部分回路網候補の出力関数の集合を実行するか否かを630で決定しなければならない。
他の実施形態は、他のハッシュ手法を使用することができる。例えば、いくつかの実施形態では、Cormen、Leiserson,RivestおよびSteinの「Introduction to algorithms」第2版、MIT Press,2001、第11章に記載されたより従来のハッシュ技法を使用することができる。従来のハッシュ手法は有効なキーの(すなわち、有効な真理値表表現の)値しか指定しない。例えば、いくつかの従来のハッシャーは、「特定のキーのハッシュ・テーブルに記憶されている値を取り出す」照会と、「ハッシュ・テーブルに特定のキーのための要素が何か記憶されているか」の照会とをサポートする。他の従来のハッシャーは、キーのための要素が何も記憶されていない時には、「あるキーのためにハッシュ・テーブルに記憶されている値を取り出す」というどのような照会タイプについてもある専用のNULL値を返す。
従来のハッシャーには特定の真理値表についてハッシュされた値がないということを検出できるという利点がある。したがって、場合によっては、インデクサは関連するハッシュされた値を有さない関数のインデクスを返さず、代わりに、特定の関数の関連するインデクスがないことを照会マネジャーに通知する。このために、照会マネジャーはデータベースから関連しない部分回路網を取り出さず、したがって、630で一致する決定を実行する必要がない。他方、従来のハッシュ手法ではハッシュ・テーブル内にすべての有効なキーを記憶する必要がある。このため、すべての長い真理値表表現を記憶しなければならず、大量のメモリが必要になる。
従来のハッシャーには特定の真理値表についてハッシュされた値がないということを検出できるという利点がある。したがって、場合によっては、インデクサは関連するハッシュされた値を有さない関数のインデクスを返さず、代わりに、特定の関数の関連するインデクスがないことを照会マネジャーに通知する。このために、照会マネジャーはデータベースから関連しない部分回路網を取り出さず、したがって、630で一致する決定を実行する必要がない。他方、従来のハッシュ手法ではハッシュ・テーブル内にすべての有効なキーを記憶する必要がある。このため、すべての長い真理値表表現を記憶しなければならず、大量のメモリが必要になる。
4.照会マネジャーによる入力変数の訂正
上記のように、照会マネジャーは取り出された代替部分回路網が210で選択した部分回路網候補に一致するか否かを(630で)決定する。代替部分回路網が代替部分回路網の特定の入力変数構成の部分回路網候補のすべての出力関数(すなわち、部分回路網候補の215で識別された関数Fの集合内のすべての関数)を実行する場合に限って、代替部分回路網は部分回路網候補に一致する。
図10〜図13は、そのような一致決定の例を示す。図10は回路網1000の部分回路網候補1005を示す。部分回路網候補は2つのANDゲート1010および1015と、NANDゲート1020を含む。部分回路網候補は入力x_0、x_1およびx_2を図10に示す順序で受け取る。出力関数がBDDパッケージ(上記のBuDDYなど)によって指定されている時には、入力変数はBDDパッケージによって提供される整数インデクスに過ぎないので通常の順序を有する。
図1に示す例では、部分回路網候補1005は1つの出力関数Fのみを有する。この出力関数に基づいて、インデクサはインデクスを生成し、テーブル・マネジャーは代替部分回路網を取り出す。図11は復号化されたそのような代替部分回路網の概略回路図を示す。(この概略図は例示としてのものである。代替部分回路網が625で復号化されると、部分回路網はグラフとグラフ内の各ノードの局所関数で表される。)
上記のように、照会マネジャーは取り出された代替部分回路網が210で選択した部分回路網候補に一致するか否かを(630で)決定する。代替部分回路網が代替部分回路網の特定の入力変数構成の部分回路網候補のすべての出力関数(すなわち、部分回路網候補の215で識別された関数Fの集合内のすべての関数)を実行する場合に限って、代替部分回路網は部分回路網候補に一致する。
図10〜図13は、そのような一致決定の例を示す。図10は回路網1000の部分回路網候補1005を示す。部分回路網候補は2つのANDゲート1010および1015と、NANDゲート1020を含む。部分回路網候補は入力x_0、x_1およびx_2を図10に示す順序で受け取る。出力関数がBDDパッケージ(上記のBuDDYなど)によって指定されている時には、入力変数はBDDパッケージによって提供される整数インデクスに過ぎないので通常の順序を有する。
図1に示す例では、部分回路網候補1005は1つの出力関数Fのみを有する。この出力関数に基づいて、インデクサはインデクスを生成し、テーブル・マネジャーは代替部分回路網を取り出す。図11は復号化されたそのような代替部分回路網の概略回路図を示す。(この概略図は例示としてのものである。代替部分回路網が625で復号化されると、部分回路網はグラフとグラフ内の各ノードの局所関数で表される。)
図11に示すように、代替部分回路網1105は2つのゲートと3つの入力I_0、I_1およびI_2を有する。一方のゲートは反転入力を有する2入力ANDゲート1110である。他方のゲートは2入力ANDゲート1115である。入力は一般的な順序を有する。特に、代替部分回路網は復号化されると、リンクされたノード・リストからなるグラフである。代替部分回路網がn個の入力を有する場合、復号化された回路網構造は各入力に「ダミー」入力ノード1120を有する。これらの回路網入力の1つが供給される内部ノードは、回路網入力からそのノード入力の1つへの有向アークを有する。ダミー・ノードはアレイに記憶されるのでアレイ・インデクスのみによる一般の順序だけを有する。
630での照合処理は、代替部分回路網1105の出力関数の集合が210で選択した部分回路網候補の出力関数を含むように、この代替部分回路網の入力構成を識別しようとする。言い換えれば、照合処理は「ダミー」ノードのアレイの再順序付けと各ダミー・ノードの入力と代替部分回路網が部分回路網候補1005の出力関数の集合の1つを実行できるようにする入力変数(x_0〜x_2)の1つとの相関関係を識別しようとする。
図11に示すように、その入力構成のために、代替部分回路網1105の出力関数は部分回路網候補1005の出力関数Fとは異なる真理値表を有する。ただし、図12は部分回路網候補の出力関数Fと同じ出力関数を生成する(すなわち、同じ出力真理値表を有する)代替部分回路網1105の入力構成を示す。図13は図12に示す構成を回路網1000に挿入する方法を示す。
630での照合処理は、代替部分回路網1105の出力関数の集合が210で選択した部分回路網候補の出力関数を含むように、この代替部分回路網の入力構成を識別しようとする。言い換えれば、照合処理は「ダミー」ノードのアレイの再順序付けと各ダミー・ノードの入力と代替部分回路網が部分回路網候補1005の出力関数の集合の1つを実行できるようにする入力変数(x_0〜x_2)の1つとの相関関係を識別しようとする。
図11に示すように、その入力構成のために、代替部分回路網1105の出力関数は部分回路網候補1005の出力関数Fとは異なる真理値表を有する。ただし、図12は部分回路網候補の出力関数Fと同じ出力関数を生成する(すなわち、同じ出力真理値表を有する)代替部分回路網1105の入力構成を示す。図13は図12に示す構成を回路網1000に挿入する方法を示す。
図14は、照会マネジャー505が代替部分回路網が210で選択した部分回路網候補に一致するか否かを630で決定するプロセスを示す。この図に示すように、プロセス1400は最初、代替部分回路網のすべてのピボット関数を(1405で)識別する。言い換えれば、プロセス1400は代替部分回路網の関数の集合G{G_0,...,G_n}(ここで各関数は625での部分回路網の復号化後の入力順序に関して計算される)内のすべてのピボット関数を識別する。
次に、このプロセスは識別したピボット関数の1つを(1410で)選択する。選択したピボット関数について、照会マネジャーはインデクサにインデクスの集合を決定論的に計算させる(すなわち、同じピボット関数と同じ非ピボット関数の集合について常に同じインデクスの集合を生成するインデクス生成処理を実行する)。
この決定論的処理を実行するために、プロセス1400は最初、ピボット関数の正準真理値表表現を生む実現可能な入力構成Pを(1415で)決定論的に識別する。そのような構成を識別するために、インデクス・マネジャー720は、(1)トランスレータ705にピボット関数の真理値表表現を生成させ、(2)入力順序識別子にピボット関数の最小値真理値表表現を生む入力構成の集合を識別させる。入力順序識別子は常に特定の順序で入力変数構成の集合を返す。インデクス・マネジャーは、1415で識別した入力構成Pと同じ入力構成の返された集合内の入力構成を常に選択する。例えば、いくつかの実施形態では、インデクス・マネジャーは常に返された集合内の第1の入力構成を指定された構成Pとして選択する。
ランタイム最適化中のインデクサの決定論的動作は以下にさらに説明するように、データベース生成時の決定論的動作と連携する。また、入力構成照合時のこの決定論的動作は、210で選択した代替部分回路網の関数の集合のインデクスの集合を生成する際のプロセス800の上記のランダム化された動作とは異なる。そのランダム化された動作で、プロセス800は特定の関数の実現可能な入力構成の集合から入力変数構成を(815で)ランダムに選択する。
次に、このプロセスは識別したピボット関数の1つを(1410で)選択する。選択したピボット関数について、照会マネジャーはインデクサにインデクスの集合を決定論的に計算させる(すなわち、同じピボット関数と同じ非ピボット関数の集合について常に同じインデクスの集合を生成するインデクス生成処理を実行する)。
この決定論的処理を実行するために、プロセス1400は最初、ピボット関数の正準真理値表表現を生む実現可能な入力構成Pを(1415で)決定論的に識別する。そのような構成を識別するために、インデクス・マネジャー720は、(1)トランスレータ705にピボット関数の真理値表表現を生成させ、(2)入力順序識別子にピボット関数の最小値真理値表表現を生む入力構成の集合を識別させる。入力順序識別子は常に特定の順序で入力変数構成の集合を返す。インデクス・マネジャーは、1415で識別した入力構成Pと同じ入力構成の返された集合内の入力構成を常に選択する。例えば、いくつかの実施形態では、インデクス・マネジャーは常に返された集合内の第1の入力構成を指定された構成Pとして選択する。
ランタイム最適化中のインデクサの決定論的動作は以下にさらに説明するように、データベース生成時の決定論的動作と連携する。また、入力構成照合時のこの決定論的動作は、210で選択した代替部分回路網の関数の集合のインデクスの集合を生成する際のプロセス800の上記のランダム化された動作とは異なる。そのランダム化された動作で、プロセス800は特定の関数の実現可能な入力構成の集合から入力変数構成を(815で)ランダムに選択する。
入力変数構成Pを(1415で)決定論的に識別した後で、プロセス1400は605で使用した構成に基づいて識別された入力構成を(1420で)再調整して、210で選択した部分回路網候補のインデクスの集合を生成する。例えば、部分回路網候補の出力関数の集合が初期構成Rを有し、インデクサが特定の関数の正準表現を生成する入力構成R’を(815で)選択したと仮定する。R’を得るために動作QをR上で実行しなければならない場合、プロセス1400は動作Qの逆数を1415で識別した入力構成Pに適用する(すなわち、Q−1(P)を適用する)ことで新しい構成を(1420で)獲得する。
次に、プロセス1400は1420で識別された入力順序に基づいて、代替部分回路網によって実行された関数Hの集合を(1425で)識別する。いくつかの実施形態では、このプロセスはそのROBDDで各関数を(1425で)指定する。また、いくつかの実施形態では、出力関数の識別された集合は代替部分回路網の各ノードの出力を含む。特定ノードが代替回路網グラフ内の他のどのノードの出力も受け取らない時には、特定ノードの出力での出力関数は特定ノードの局所関数である。他の方法としては、特定ノードが代替部分回路網内の他の1つまたは複数のノードの出力を受け取る時には、特定ノードの出力での出力関数は特定ノードの局所関数とその出力を特定ノードが受け取る各ノードの局所関数から引き出すことができる。
1425の後で、プロセスは1425で識別された関数Hの集合が215で代替部分回路網の識別された関数Fの集合を含むか否かを(1430で)決定する。含む場合、代替部分回路網は1425で指定された入力構成の部分回路網候補に一致する。したがって、プロセス1400は(1435で)一致とこの一致を生む入力構成を指定し、終了する。
他方、1425で識別された関数Hの集合が部分回路網候補の関数Fの集合を含まないとプロセスが(1430で)決定すると、プロセスは代替部分回路網の(1405で)識別されたすべてのピボット関数を検証したか否か(1440で)を決定する。検証していない場合、プロセスは1410に戻って別のピボット関数を選択し、この関数について以降の処理を繰り返す。検証している場合、プロセス1400は代替部分回路網が部分回路網候補に一致しないと(1445で)指定し、終了する。
次に、プロセス1400は1420で識別された入力順序に基づいて、代替部分回路網によって実行された関数Hの集合を(1425で)識別する。いくつかの実施形態では、このプロセスはそのROBDDで各関数を(1425で)指定する。また、いくつかの実施形態では、出力関数の識別された集合は代替部分回路網の各ノードの出力を含む。特定ノードが代替回路網グラフ内の他のどのノードの出力も受け取らない時には、特定ノードの出力での出力関数は特定ノードの局所関数である。他の方法としては、特定ノードが代替部分回路網内の他の1つまたは複数のノードの出力を受け取る時には、特定ノードの出力での出力関数は特定ノードの局所関数とその出力を特定ノードが受け取る各ノードの局所関数から引き出すことができる。
1425の後で、プロセスは1425で識別された関数Hの集合が215で代替部分回路網の識別された関数Fの集合を含むか否かを(1430で)決定する。含む場合、代替部分回路網は1425で指定された入力構成の部分回路網候補に一致する。したがって、プロセス1400は(1435で)一致とこの一致を生む入力構成を指定し、終了する。
他方、1425で識別された関数Hの集合が部分回路網候補の関数Fの集合を含まないとプロセスが(1430で)決定すると、プロセスは代替部分回路網の(1405で)識別されたすべてのピボット関数を検証したか否か(1440で)を決定する。検証していない場合、プロセスは1410に戻って別のピボット関数を選択し、この関数について以降の処理を繰り返す。検証している場合、プロセス1400は代替部分回路網が部分回路網候補に一致しないと(1445で)指定し、終了する。
C.データベース・テーブルおよびテーブル・マネジャー
インデクサ515が照会マネジャーにインデクスの集合を返すと、照会マネジャーはテーブル・マネジャー520に、返されたインデクスの集合に関連するすべての部分回路網を取り出すように指示する。これに応答して、テーブル・マネジャーはデータベース525を検索して部分回路網の集合を返す。この集合は、データベース525が、受け取ったインデクスの集合に関連する部分回路網を1つも記憶していないときには空である。識別された部分回路網の集合が空でない場合、この集合内の部分回路網は符号化形式で、テーブル・マネジャーはこれらの部分回路網をこの形式で照会マネジャーに返す。
1.データベース・テーブル
以下の実施形態では、データベース525はリレーショナル・データベースで、テーブル・マネジャー520はこのデータベースの照会エンジンである。図15および図16は、データベース525が使用するデータベースのスキーマの概念図である。当業者であれば、これらの図は単に本発明のいくつかの実施形態のデータベース設計を概念的に示すもので、他の実施形態においては、他のデータベース設計を使用することができることを理解することができるだろう。
インデクサ515が照会マネジャーにインデクスの集合を返すと、照会マネジャーはテーブル・マネジャー520に、返されたインデクスの集合に関連するすべての部分回路網を取り出すように指示する。これに応答して、テーブル・マネジャーはデータベース525を検索して部分回路網の集合を返す。この集合は、データベース525が、受け取ったインデクスの集合に関連する部分回路網を1つも記憶していないときには空である。識別された部分回路網の集合が空でない場合、この集合内の部分回路網は符号化形式で、テーブル・マネジャーはこれらの部分回路網をこの形式で照会マネジャーに返す。
1.データベース・テーブル
以下の実施形態では、データベース525はリレーショナル・データベースで、テーブル・マネジャー520はこのデータベースの照会エンジンである。図15および図16は、データベース525が使用するデータベースのスキーマの概念図である。当業者であれば、これらの図は単に本発明のいくつかの実施形態のデータベース設計を概念的に示すもので、他の実施形態においては、他のデータベース設計を使用することができることを理解することができるだろう。
図15および図16は、5つのデータベース・テーブルを示す。これらのテーブルは(1)図15に示すピボット・テーブル1500と2次テーブル1505と、(2)図16に示す部分回路網テーブル1510、グラフ・テーブル1515、および関数テーブル1520とを含む。
図15に示すように、ピボット・テーブル1505はピボット・インデクス1525ごとに1つの行を含み、2次テーブルはピボット・インデクス1525ごとに1つまたは複数の行の集合を含む。さらに、ピボット・テーブル内の各々の特定のピボット・テーブルの行は、特定のピボット・テーブルの行のピボット・インデクスの2次テーブル1505内の最初の行1530と最後の行1535とを指定する。事前集計時に、同じピボット・インデクスに関連する2次テーブル1505内のすべての行は特定の順序で隣り合って配置される(例えば、各2次テーブルの行内に記憶された2次インデクスの昇順で分類される)。したがって、特定のピボット・テーブルの行は、すべての行を明示的に列挙するのではなく2次テーブル内の行の間隔のみを記述する必要がある(すなわち、最初と最後の2次テーブルの行のみを識別する必要がある)。
2次テーブル1505の行は可変長を有する。したがって、各行は行の長さを指定するフィールド1540を含む。さらに、2次テーブル1505の各行は特定のピボット・インデクスに対応する特定の2次インデクスを指定するフィールド1545を有する。2次テーブルの行は、以下にさらに説明するように、その2次インデクス・フィールド内にヌル値を記憶することができる。
また、2次テーブル1505は事前集計された部分回路網とピボットおよび2次インデクスの関係を表現する。特に、各々の特定の2次テーブルの行は特定の2次テーブルの行が記憶するピボットと2次インデクスのペアごとに1つまたは複数の回路網インデクスの集合を指定するフィールドの集合1550を有する。単一の行内の回路網インデクスの集合は事前集計時に特定の順序で(例えば、回路網インデクスの昇順で)分類される。回路網インデクスの各集合は1つまたは複数のインデクスを含むことができる。
照会マネジャーから受け取ったデータベース・インデクスIの集合のピボット・インデクスの行の範囲を指定した後で、テーブル・マネジャーは受け取ったデータベース・インデクスの集合内の各2次インデクスの識別された範囲内の2次テーブル行を識別しようとする。テーブル・マネジャーが成功すると、すべての識別された2次テーブル行内に記憶された各回路網インデクスはテーブル・マネジャーが照会マネジャーに返すべき潜在的に一致する部分回路網を指定する。
2次テーブル行内に記憶された各回路網インデクスは、図16に示すように、回路網テーブル1510内の行を指定する。回路網テーブル1510内の各行は、特定の部分回路網に対応する。以下に説明する実施形態においては、各部分回路網は、(1)1つまたは複数のノードを有するグラフと、(2)グラフの各ノードの局所関数を含む関数の集合とによって指定される。したがって、回路網テーブル内の各行はグラフ−テーブル・インデクス1555と関数−テーブル・インデクス1560とを指定する。
図15に示すように、ピボット・テーブル1505はピボット・インデクス1525ごとに1つの行を含み、2次テーブルはピボット・インデクス1525ごとに1つまたは複数の行の集合を含む。さらに、ピボット・テーブル内の各々の特定のピボット・テーブルの行は、特定のピボット・テーブルの行のピボット・インデクスの2次テーブル1505内の最初の行1530と最後の行1535とを指定する。事前集計時に、同じピボット・インデクスに関連する2次テーブル1505内のすべての行は特定の順序で隣り合って配置される(例えば、各2次テーブルの行内に記憶された2次インデクスの昇順で分類される)。したがって、特定のピボット・テーブルの行は、すべての行を明示的に列挙するのではなく2次テーブル内の行の間隔のみを記述する必要がある(すなわち、最初と最後の2次テーブルの行のみを識別する必要がある)。
2次テーブル1505の行は可変長を有する。したがって、各行は行の長さを指定するフィールド1540を含む。さらに、2次テーブル1505の各行は特定のピボット・インデクスに対応する特定の2次インデクスを指定するフィールド1545を有する。2次テーブルの行は、以下にさらに説明するように、その2次インデクス・フィールド内にヌル値を記憶することができる。
また、2次テーブル1505は事前集計された部分回路網とピボットおよび2次インデクスの関係を表現する。特に、各々の特定の2次テーブルの行は特定の2次テーブルの行が記憶するピボットと2次インデクスのペアごとに1つまたは複数の回路網インデクスの集合を指定するフィールドの集合1550を有する。単一の行内の回路網インデクスの集合は事前集計時に特定の順序で(例えば、回路網インデクスの昇順で)分類される。回路網インデクスの各集合は1つまたは複数のインデクスを含むことができる。
照会マネジャーから受け取ったデータベース・インデクスIの集合のピボット・インデクスの行の範囲を指定した後で、テーブル・マネジャーは受け取ったデータベース・インデクスの集合内の各2次インデクスの識別された範囲内の2次テーブル行を識別しようとする。テーブル・マネジャーが成功すると、すべての識別された2次テーブル行内に記憶された各回路網インデクスはテーブル・マネジャーが照会マネジャーに返すべき潜在的に一致する部分回路網を指定する。
2次テーブル行内に記憶された各回路網インデクスは、図16に示すように、回路網テーブル1510内の行を指定する。回路網テーブル1510内の各行は、特定の部分回路網に対応する。以下に説明する実施形態においては、各部分回路網は、(1)1つまたは複数のノードを有するグラフと、(2)グラフの各ノードの局所関数を含む関数の集合とによって指定される。したがって、回路網テーブル内の各行はグラフ−テーブル・インデクス1555と関数−テーブル・インデクス1560とを指定する。
グラフ−テーブル・インデクス1555は、回路網テーブル行の回路網インデクスに対応する部分回路の符号化されたグラフ1565を記憶するグラフ−テーブル行を識別する。第III.D章で以下にさらに説明するように、各々の符号化されたグラフ1565は符号化された形式で、(1)部分回路網の1つまたは複数のノードと、(2)これらのノードの接続とを指定する。また、図16は、自行に記憶されているグラフの追加の属性を記憶するフィールドの集合1570を含むグラフ・テーブル1515内の各グラフ−テーブル行を示す。そのような属性の例はグラフによって表現される部分回路網の実際のまたは推定のサイズまたは速度を含む。通常、そのような属性はグラフ構造から引き出すことができるが、オプティマイザの動作を高速化するためにデータベース内に記憶することができる。
関数テーブル1520はグラフ・ノードの局所関数1575を記憶する。いくつかの実施形態では、関数は関数テーブル内にROBDD形式で記憶される。関数テーブルは、このテーブルと回路網テーブル151内に記憶されている関数テーブル・インデクス1560によって索引付けされている。より詳細には、回路網テーブル行内の各関数−テーブル・インデクス1515は回路網テーブル行のグラフ−テーブル・インデクスによってグラフ・テーブル1515内に索引付けされたグラフ1565の特定のノードに対応する。回路網テーブル行はノードの順序に対応する特定の方法でその関数−テーブル・インデクスを記憶する。例えば、多関数の集合の場合、第1の関数インデクスは第1のノードの関数に対応し、第2の関数インデクスは第2のノードの関数に対応し、以下同様である。対応するグラフ・ノードについて、関数−テーブル・インデクスは関数テーブル内の関数1575を指定する。
関数テーブル1520はグラフ・ノードの局所関数1575を記憶する。いくつかの実施形態では、関数は関数テーブル内にROBDD形式で記憶される。関数テーブルは、このテーブルと回路網テーブル151内に記憶されている関数テーブル・インデクス1560によって索引付けされている。より詳細には、回路網テーブル行内の各関数−テーブル・インデクス1515は回路網テーブル行のグラフ−テーブル・インデクスによってグラフ・テーブル1515内に索引付けされたグラフ1565の特定のノードに対応する。回路網テーブル行はノードの順序に対応する特定の方法でその関数−テーブル・インデクスを記憶する。例えば、多関数の集合の場合、第1の関数インデクスは第1のノードの関数に対応し、第2の関数インデクスは第2のノードの関数に対応し、以下同様である。対応するグラフ・ノードについて、関数−テーブル・インデクスは関数テーブル内の関数1575を指定する。
図16は1つの関数テーブルしか示していないが、他の実施形態では複数の関数テーブルを使用する。例えば、いくつかの実施形態では、2入力関数のすべてに1つの関数テーブル、3入力関数のすべてに1つの関数テーブル、4入力関数のすべてに1つの関数テーブル、5以上の入力関数のすべてに1つの関数テーブルを提供することができる。これらの実施形態のいくつかでは、特定のノードの特定の関数インデクスについて、テーブル・マネジャーが特定のノードの入力数を識別し、次に特定の関数インデクスを用いて、関数テーブル内の識別された入力数の関数を識別する。
上記のスキーマによって一致する回路網の検索が可能になる。言い換えれば、どのテーブルも完全に走査する必要はない。逆に、このスキーマによってピボット行への直接のアクセスと、2次行の2進検索と、2次行の交点の計算のためのリニア・スキャンと、関数テーブル、グラフ・テーブルおよび回路網テーブル内に記憶されている関数、グラフ、および回路網への直接のアクセスとが可能になる。
2.テーブル・マネジャー
1つまたは複数のインデクスI_1,...,I_nを含むデータベース・インデクスIの集合が与えられると、テーブル・マネジャーは、各部分回路網SNWのグラフと関数の集合を返さなければならない。ここで、(1)各部分回路網SNWは受け取った集合のピボット・インデクスに関連し、(2)部分回路網SNWおよびピボット・インデクスは受け取った集合内のすべての2次インデクスに関連する。言い換えれば、テーブル・マネジャーはピボット・インデクスと受け取ったデータベース・インデクスの集合のすべての2次インデクスに関連するすべての部分回路網を返さなければならない。
このタスクはオラクル社(Oracle Corp.)またはインフォミクス社(Informix,Inc.)によって提供されるような任意のリレーショナル・データベース管理システムによってサポートされる標準の関数である。したがって、テーブル・マネジャーは任意の商用の、または非商用の入手可能なリレーショナル・データベース・システムによって直接実現できる。
上記のスキーマによって一致する回路網の検索が可能になる。言い換えれば、どのテーブルも完全に走査する必要はない。逆に、このスキーマによってピボット行への直接のアクセスと、2次行の2進検索と、2次行の交点の計算のためのリニア・スキャンと、関数テーブル、グラフ・テーブルおよび回路網テーブル内に記憶されている関数、グラフ、および回路網への直接のアクセスとが可能になる。
2.テーブル・マネジャー
1つまたは複数のインデクスI_1,...,I_nを含むデータベース・インデクスIの集合が与えられると、テーブル・マネジャーは、各部分回路網SNWのグラフと関数の集合を返さなければならない。ここで、(1)各部分回路網SNWは受け取った集合のピボット・インデクスに関連し、(2)部分回路網SNWおよびピボット・インデクスは受け取った集合内のすべての2次インデクスに関連する。言い換えれば、テーブル・マネジャーはピボット・インデクスと受け取ったデータベース・インデクスの集合のすべての2次インデクスに関連するすべての部分回路網を返さなければならない。
このタスクはオラクル社(Oracle Corp.)またはインフォミクス社(Informix,Inc.)によって提供されるような任意のリレーショナル・データベース管理システムによってサポートされる標準の関数である。したがって、テーブル・マネジャーは任意の商用の、または非商用の入手可能なリレーショナル・データベース・システムによって直接実現できる。
図17は、テーブル・マネジャー520がいくつかの実施形態で使用してデータベース525から事前集計された部分回路網(すなわち、事前集計された符号化グラフおよび関数)を取り出すプロセス1700の概念図である。テーブル・マネジャーは、1つまたは複数のインデクスを含むデータベース・インデクスIの集合を受け取るたびにこのプロセスを実行する。
図17に示すように、テーブル・マネジャーは、ピボット・テーブルが、受け取ったデータベース・インデクスの集合のピボット・インデクスの行を有するか否かを最初に(1705で)決定する。有さない場合、テーブル・マネジャーは一致する部分回路網がない(すなわち、データベースは照会のすべてのインデクスに関連する部分回路網を記憶していない)ということを照会マネジャーに(1710で)通知する。
有する場合、プロセスは受け取ったデータベース・インデクスの集合のピボット・インデクスのためのピボット・テーブル1500内の行に(1715で)アクセスする。受け取ったデータベース−インデクスの集合が1つのインデクスしか含んでいない時には、この集合のピボット・インデクスはその唯一のインデクスである。他方、多インデクス集合のピボット・インデクスはプロセス900が905および910で指定したインデクスである。
テーブル・マネジャーは、2次テーブル1505の行の範囲を識別するためにこの集合のピボット・インデクスのピボット・テーブル行に(1715で)アクセスする。この行の範囲は受け取ったデータベース−インデクスの集合のピボット・インデクスに関連するすべての2次インデクスを指定する。テーブル・マネジャーは、その行番号がこの行の「Pivot_Index」に等しくなるようにピボット・テーブルは記憶されているので、ピボット・テーブル1500を一定時間で検索することができる。
1720で、テーブル・マネジャーは受け取ったデータベース−インデクスの集合の2次インデクスを選択する。次に、テーブル・マネジャーは識別された範囲内の行が選択された2次インデクスに一致する2次インデクスを有するか否かを(1725で)決定する。有さない場合、テーブル・マネジャーは一致する部分回路網がないことを照会マネジャーに(1710で)通知し、終了する。
図17に示すように、テーブル・マネジャーは、ピボット・テーブルが、受け取ったデータベース・インデクスの集合のピボット・インデクスの行を有するか否かを最初に(1705で)決定する。有さない場合、テーブル・マネジャーは一致する部分回路網がない(すなわち、データベースは照会のすべてのインデクスに関連する部分回路網を記憶していない)ということを照会マネジャーに(1710で)通知する。
有する場合、プロセスは受け取ったデータベース・インデクスの集合のピボット・インデクスのためのピボット・テーブル1500内の行に(1715で)アクセスする。受け取ったデータベース−インデクスの集合が1つのインデクスしか含んでいない時には、この集合のピボット・インデクスはその唯一のインデクスである。他方、多インデクス集合のピボット・インデクスはプロセス900が905および910で指定したインデクスである。
テーブル・マネジャーは、2次テーブル1505の行の範囲を識別するためにこの集合のピボット・インデクスのピボット・テーブル行に(1715で)アクセスする。この行の範囲は受け取ったデータベース−インデクスの集合のピボット・インデクスに関連するすべての2次インデクスを指定する。テーブル・マネジャーは、その行番号がこの行の「Pivot_Index」に等しくなるようにピボット・テーブルは記憶されているので、ピボット・テーブル1500を一定時間で検索することができる。
1720で、テーブル・マネジャーは受け取ったデータベース−インデクスの集合の2次インデクスを選択する。次に、テーブル・マネジャーは識別された範囲内の行が選択された2次インデクスに一致する2次インデクスを有するか否かを(1725で)決定する。有さない場合、テーブル・マネジャーは一致する部分回路網がないことを照会マネジャーに(1710で)通知し、終了する。
他方、プロセスが、選択された2次インデクスに一致する2次インデクスを有する行を識別した範囲内で(1725で)識別した場合、選択された行から回路網インデクスの集合を(1730で)取り出す。2次テーブル内の行は2次インデクスによって分類されるので、テーブル・マネジャーによるこのテーブルの検索は2進検索として効率的に実行される。また、受け取ったデータベース−インデクスの集合が1つのインデクスしか含んでいない場合、2次テーブル行が受け取った集合のピボット・インデクスと2次インデクスのヌルとを指定している場合、2次テーブル行は受け取ったデータベース−インデクスの集合に一致する。
次に、1735で、プロセスは受け取ったデータベース−インデクスの集合内のすべての2次インデクスを検索したか否かを決定する。検索していない場合、プロセスは1720に戻ってこの集合内の別の2次インデクスを選択する。検索している場合、プロセスは受け取ったデータベース・インデクスの集合が2つ以上の2次インデクスを含むか否かを(1740で)決定する。含まない場合、プロセスは1755に移行する。この処理について以下に説明する。
ただし、受け取ったデータベース・インデクスの集合が2つ以上の2次インデクスを含む場合、プロセスは1730で受け取ったすべての回路網インデクスの集合を(1745で)相互比較して、1730で取り出されたすべての回路網インデクスの集合内にある各回路網インデクスを識別する。回路網インデクスは特定の順序で分類されるので、テーブル・マネジャーはこの相互比較を直線時間で(すなわち、回路網インデクスの数と共に直線的に拡大縮小する時間量で)実行する。
次に、1735で、プロセスは受け取ったデータベース−インデクスの集合内のすべての2次インデクスを検索したか否かを決定する。検索していない場合、プロセスは1720に戻ってこの集合内の別の2次インデクスを選択する。検索している場合、プロセスは受け取ったデータベース・インデクスの集合が2つ以上の2次インデクスを含むか否かを(1740で)決定する。含まない場合、プロセスは1755に移行する。この処理について以下に説明する。
ただし、受け取ったデータベース・インデクスの集合が2つ以上の2次インデクスを含む場合、プロセスは1730で受け取ったすべての回路網インデクスの集合を(1745で)相互比較して、1730で取り出されたすべての回路網インデクスの集合内にある各回路網インデクスを識別する。回路網インデクスは特定の順序で分類されるので、テーブル・マネジャーはこの相互比較を直線時間で(すなわち、回路網インデクスの数と共に直線的に拡大縮小する時間量で)実行する。
次に、プロセスはこの相互比較の結果として集合が空であることがわかったか否かを(1750で)決定する。そうである場合、テーブル・マネジャーは一致する部分回路網がないことを照会マネジャーに(1710で)通知し、終了する。そうでない場合、プロセスは1755に移行する。プロセスが1730で取り出されたすべての回路網インデクスの集合内にあると識別する各回路網インデクスについて、プロセスは回路網テーブルからグラフ−テーブル・インデクスおよび関数−テーブル・インデクスを(1755で)識別する。上記のように、各回路網インデクスは、グラフ−テーブル・インデクスと関数−テーブル・インデクスの集合とを指定する。1755で、プロセスは、(1)各々の識別されたグラフ−インデクスを用いてグラフ・テーブルから符号化されたグラフを取り出し、(2)識別されたグラフ−インデクスに関連する関数インデクスの集合を用いて、取り出されたグラフのノードの関数の集合を取り出す。次に、テーブル・マネジャーは受け取ったグラフおよび関数の集合を(1760で)照会マネジャーに返す。
D.部分回路網符号化および復号化
テーブル・マネジャーがグラフおよび関数の集合を照会マネジャーに返すと、照会マネジャーは、テーブル・マネジャーが部分回路網を返したか否かを(615で)決定する。返した場合、照会マネジャーは返された部分回路網の1つを(620で)選択し、回路網エンコーダ510に選択された部分回路網を復号化するように(625で)指示する。
データベース内に多数の部分回路網を記憶するために、いくつかの実施形態では部分回路網のコンパクトな符号化を使用する。以下の実施形態では、3つの符号化レベルを有する符号化方法を使用する。
D.部分回路網符号化および復号化
テーブル・マネジャーがグラフおよび関数の集合を照会マネジャーに返すと、照会マネジャーは、テーブル・マネジャーが部分回路網を返したか否かを(615で)決定する。返した場合、照会マネジャーは返された部分回路網の1つを(620で)選択し、回路網エンコーダ510に選択された部分回路網を復号化するように(625で)指示する。
データベース内に多数の部分回路網を記憶するために、いくつかの実施形態では部分回路網のコンパクトな符号化を使用する。以下の実施形態では、3つの符号化レベルを有する符号化方法を使用する。
1.グラフおよび関数テーブル
符号化の第1のレベル(図16を参照しながらすでに述べた)は、(1)1つまたは複数のノードを有するグラフと、(2)グラフの各ノードの1つの局所関数を含む関数の集合とによって各部分回路網を指定する。部分回路網を指定するこの方法は異なる部分回路網間の類似点を活用する。
特に、各部分回路網はその構造と1つまたは複数のノードによって実行される関数の集合とによって記述できる。異なる部分回路網は類似した構造を有することがあり、または類似の関数を実行するノードを有することもある。その結果、符号化方法は、(1)構造および関数の属性を別々に記憶し、(2)各部分回路網を記憶された構造および関数特性によって記述する。
以下の実施形態では、各部分回路網の構造が有向アーク・グラフによって記述される。そのようなグラフのノードは部分回路網の回路素子を表現し、有向エッジは部分回路網の回路素子間の接続に対応する。
データベースのオフライン計算のため、データベース内の回路網構造として描かれるすべてのグラフは事前に周知である。さらに、これらのグラフの多くが同形である、すなわち、それらはノードのある種の番号付けに関して同一である。実際、個別の非同形グラフの数はデータベース内の部分回路網の総数と比べて極めて小さい。
したがって、いくつかの実施形態では、図16に示すグラフ・テーブル1515は一定のサイズまですべての非同形グラフを記憶する。以下の第IV章では、一定のサイズまですべてのより小さい非同形グラフのテーブルを生成する技法について説明する。各々の生成されたグラフ構造はエントリとしてグラフ・テーブル1515内に記憶される。いくつかの実施形態では、このテーブル内のエントリは0からnまで順次番号付け(索引付け)される。
符号化の第1のレベル(図16を参照しながらすでに述べた)は、(1)1つまたは複数のノードを有するグラフと、(2)グラフの各ノードの1つの局所関数を含む関数の集合とによって各部分回路網を指定する。部分回路網を指定するこの方法は異なる部分回路網間の類似点を活用する。
特に、各部分回路網はその構造と1つまたは複数のノードによって実行される関数の集合とによって記述できる。異なる部分回路網は類似した構造を有することがあり、または類似の関数を実行するノードを有することもある。その結果、符号化方法は、(1)構造および関数の属性を別々に記憶し、(2)各部分回路網を記憶された構造および関数特性によって記述する。
以下の実施形態では、各部分回路網の構造が有向アーク・グラフによって記述される。そのようなグラフのノードは部分回路網の回路素子を表現し、有向エッジは部分回路網の回路素子間の接続に対応する。
データベースのオフライン計算のため、データベース内の回路網構造として描かれるすべてのグラフは事前に周知である。さらに、これらのグラフの多くが同形である、すなわち、それらはノードのある種の番号付けに関して同一である。実際、個別の非同形グラフの数はデータベース内の部分回路網の総数と比べて極めて小さい。
したがって、いくつかの実施形態では、図16に示すグラフ・テーブル1515は一定のサイズまですべての非同形グラフを記憶する。以下の第IV章では、一定のサイズまですべてのより小さい非同形グラフのテーブルを生成する技法について説明する。各々の生成されたグラフ構造はエントリとしてグラフ・テーブル1515内に記憶される。いくつかの実施形態では、このテーブル内のエントリは0からnまで順次番号付け(索引付け)される。
また、いくつかの実施形態では、関数テーブル1520は任意の事前計算された部分回路網内に存在しうるすべての局所関数を記憶する。すべての可能な局所関数は事前に知られており、その番号は小さい傾向があるので、そのようなテーブルは事前集計プロセス中に容易に生成できる。
特定の技術ライブラリに結びついているデータベースの場合、局所関数は特定の技術ライブラリから取り出される(すなわち、局所関数はライブラリ内の単一の回路素子によって計算できるすべての論理関数に対応する)。いくつかの技術ライブラリは単一ブロックで実施できる256より少ない異なる論理関数を含む。したがって、そのようなライブラリの場合、テーブル1520へのインデクス1560は単一バイトとして実施できる。上記のように、いくつかの関数テーブルを用いてさらに低減を達成し、同じ入力数を備えた組合せ論理関数を別々に記憶することができる。
特定の技術ライブラリに結びついているデータベースの場合、関数テーブルは1つまたは複数の技術ライブラリの局所関数および/またはいかなる特定の技術ライブラリにもない追加の抽象関数を含むことができる。関数テーブルに追加の関数を加えると、データベースのサイズが大きくなる(すなわち、データベース内で指定される部分回路網の数が増える)。ただし、いくつかの関数テーブルを用いてその入力数に応じて関数を記憶することで効率化を実現することができる。
特定の技術ライブラリに結びついているデータベースの場合、局所関数は特定の技術ライブラリから取り出される(すなわち、局所関数はライブラリ内の単一の回路素子によって計算できるすべての論理関数に対応する)。いくつかの技術ライブラリは単一ブロックで実施できる256より少ない異なる論理関数を含む。したがって、そのようなライブラリの場合、テーブル1520へのインデクス1560は単一バイトとして実施できる。上記のように、いくつかの関数テーブルを用いてさらに低減を達成し、同じ入力数を備えた組合せ論理関数を別々に記憶することができる。
特定の技術ライブラリに結びついているデータベースの場合、関数テーブルは1つまたは複数の技術ライブラリの局所関数および/またはいかなる特定の技術ライブラリにもない追加の抽象関数を含むことができる。関数テーブルに追加の関数を加えると、データベースのサイズが大きくなる(すなわち、データベース内で指定される部分回路網の数が増える)。ただし、いくつかの関数テーブルを用いてその入力数に応じて関数を記憶することで効率化を実現することができる。
2.各グラフの符号化
符号化の第2のレベルはグラフ構造の符号化に関係する。グラフの数が比較的小さい(例えば、10000〜50000)場合、グラフ構造の任意の適度に希薄な圧縮符号化を使用することができる。いくつかの実施形態では以下のスキーマを使用する。
Graph_Encoding={Node_1_Encoding}...{Node_N_Encoding}
ここで、
Node_J_Encoding={Node_Identifier}{Edge_1_Encoding}...{Edge_M_Encoding}
ここで、
Edge_I_Encoding={Edge_Identifier}{Node_X_Index}
言い換えれば、このスキーマは、各々の符号化されたグラフを1つまたは複数の符号化されたノードとして(すなわち、1つまたは複数のNode_J_Encodingとして)定義する。各々の符号化されたノードは識別子(Node_Identifier)および1つまたは複数の符号化されたエッジ(すなわち、1つまたは複数のEdge_I_Encoding)として定義される。Node_Identifierは、符号化されたノードの記述の開始を指定する。また、ノードの各々の符号化されたエッジはノードへの着信エッジを指定する。
各々の符号化されたエッジは、識別子(Edge_Identifier)とノード・インデクス(Node_X_Index)で定義される。Edge_Identifierは、符号化されたエッジの記述の開始を指定する。一方、ノード・インデクスは、エッジが属していたグラフ・ノードを識別する。当業者であれば、他の実施形態においては、着信エッジの代わりにノードの発信エッジを指定するスキーマを使用できることを理解することができるだろう。グラフは有向グラフであるので、各々の符号化されたノードについて着信エッジまたは発信エッジのみを定義する必要がある。
上記のスキーマのより具体的なバージョンでは、0,...,n−1までのノードの一定の番号付けに従って各グラフをノード単位で記憶する。このスキーマは各グラフをビット列として符号化する。このビット列では、このスキーマは単一の「1」ビットをグラフ内の各ノードの共通ノード識別子(Node_Identifier)として使用し、単一の「0」ビットを各ノードの各エッジの共通エッジ識別子(Edge_Identifier)として使用する。また、各エッジのノード・インデクスはエッジの開始ノードに割り当てられた番号に対応する整数である。
符号化の第2のレベルはグラフ構造の符号化に関係する。グラフの数が比較的小さい(例えば、10000〜50000)場合、グラフ構造の任意の適度に希薄な圧縮符号化を使用することができる。いくつかの実施形態では以下のスキーマを使用する。
Graph_Encoding={Node_1_Encoding}...{Node_N_Encoding}
ここで、
Node_J_Encoding={Node_Identifier}{Edge_1_Encoding}...{Edge_M_Encoding}
ここで、
Edge_I_Encoding={Edge_Identifier}{Node_X_Index}
言い換えれば、このスキーマは、各々の符号化されたグラフを1つまたは複数の符号化されたノードとして(すなわち、1つまたは複数のNode_J_Encodingとして)定義する。各々の符号化されたノードは識別子(Node_Identifier)および1つまたは複数の符号化されたエッジ(すなわち、1つまたは複数のEdge_I_Encoding)として定義される。Node_Identifierは、符号化されたノードの記述の開始を指定する。また、ノードの各々の符号化されたエッジはノードへの着信エッジを指定する。
各々の符号化されたエッジは、識別子(Edge_Identifier)とノード・インデクス(Node_X_Index)で定義される。Edge_Identifierは、符号化されたエッジの記述の開始を指定する。一方、ノード・インデクスは、エッジが属していたグラフ・ノードを識別する。当業者であれば、他の実施形態においては、着信エッジの代わりにノードの発信エッジを指定するスキーマを使用できることを理解することができるだろう。グラフは有向グラフであるので、各々の符号化されたノードについて着信エッジまたは発信エッジのみを定義する必要がある。
上記のスキーマのより具体的なバージョンでは、0,...,n−1までのノードの一定の番号付けに従って各グラフをノード単位で記憶する。このスキーマは各グラフをビット列として符号化する。このビット列では、このスキーマは単一の「1」ビットをグラフ内の各ノードの共通ノード識別子(Node_Identifier)として使用し、単一の「0」ビットを各ノードの各エッジの共通エッジ識別子(Edge_Identifier)として使用する。また、各エッジのノード・インデクスはエッジの開始ノードに割り当てられた番号に対応する整数である。
いくつかの実施形態では、データベース内の16個より少ないノード/回路網を備えた部分回路網のみを記憶する。この実施形態では、エッジの開始ノードのインデクスを4ビットで符号化することが可能である。したがって、このスキーマが使用するビットの最大数は以下の式で提供される。
ビットの最大数=#ノード+#エッジ*(1+4)
以下の考察に基づいてさらなる低減が達成される。いくつかの実施形態では、組合せ論理部分回路網が非周期的であること、すなわち、任意のノード「i」のみがノード「j」(但し、「j」<「i」)からの着信エッジを有するようにノードの一定の順序付けを必要とする。言い換えれば、これはある種のノードの入力がこのノードの出力に依存してはならないということを意味する。ノードのそのような順序付けの計算は直線時間のみを必要とする。そのような順序付けから、ノード「i」に進入するエッジの開始ノードは、0,...,i−1の範囲内にあることになる。したがって、各開始ノードのノード・インデクスは、(1)ノード0,...,2では1ビットで、(2)ノード3,...,4では2ビットで、(3)ノード5,...,8では3ビットで、(4)ノード9,...,15では4ビットで符号化できる。最大8ノードを備えたグラフでは、この結果、少なくとも1ビット/エッジのさらなる低減が可能である。
ビットの最大数=#ノード+#エッジ*(1+4)
以下の考察に基づいてさらなる低減が達成される。いくつかの実施形態では、組合せ論理部分回路網が非周期的であること、すなわち、任意のノード「i」のみがノード「j」(但し、「j」<「i」)からの着信エッジを有するようにノードの一定の順序付けを必要とする。言い換えれば、これはある種のノードの入力がこのノードの出力に依存してはならないということを意味する。ノードのそのような順序付けの計算は直線時間のみを必要とする。そのような順序付けから、ノード「i」に進入するエッジの開始ノードは、0,...,i−1の範囲内にあることになる。したがって、各開始ノードのノード・インデクスは、(1)ノード0,...,2では1ビットで、(2)ノード3,...,4では2ビットで、(3)ノード5,...,8では3ビットで、(4)ノード9,...,15では4ビットで符号化できる。最大8ノードを備えたグラフでは、この結果、少なくとも1ビット/エッジのさらなる低減が可能である。
図18〜図20は上記のグラフ符号化方法の一例を示す。図18は部分回路網のグラフを示す。このグラフは3つのノードと7つのエッジを含む。また、このグラフでは、3つのノードはノード1、2、および3として定義される。ノード0は部分回路網への入力の発生源であるノードの「抽象的な」集合を定義する。図19および図20は図18のグラフを符号化された形で表すビット列を示す。
このグラフ符号化は部分回路網の高圧縮構造記述を生む。例えば、すべての回路網は最大8つのノードと平均12個のエッジを有する場合、グラフ符号化の平均サイズは56ビットに制限される。(すなわち、8+12×4)。数百万の回路網を備えたデータベースの場合、経験的に65536個より少ない異なるグラフが必要であり、したがって、テーブル1515の全サイズは3670016ビットに制限され(すなわち、56ビット*65536個のグラフ)、これは約450キロバイトに相当する。
当業者であれば、他の実施形態においては、別の符号化方法を使用できることを理解することができるだろう。例えば、いくつかの実施形態では、ハフマン符号化または算術符号化を使用して各グラフの構造を符号化することができる。
このグラフ符号化は部分回路網の高圧縮構造記述を生む。例えば、すべての回路網は最大8つのノードと平均12個のエッジを有する場合、グラフ符号化の平均サイズは56ビットに制限される。(すなわち、8+12×4)。数百万の回路網を備えたデータベースの場合、経験的に65536個より少ない異なるグラフが必要であり、したがって、テーブル1515の全サイズは3670016ビットに制限され(すなわち、56ビット*65536個のグラフ)、これは約450キロバイトに相当する。
当業者であれば、他の実施形態においては、別の符号化方法を使用できることを理解することができるだろう。例えば、いくつかの実施形態では、ハフマン符号化または算術符号化を使用して各グラフの構造を符号化することができる。
IV.データ・ゼネレータ
図21は本発明のいくつかの実施形態でデータ・ゼネレータ115によって実行されるいくつかの演算を概念的に表すプロセス2100を示す。この図に示すように、データ・ゼネレータは(2105で)多数の部分回路網を指定する。これらの部分回路網は多素子部分回路網および/または多出力部分回路網を含むことができる。各々の指定された部分回路網について、データ・ゼネレータは部分回路網を記憶するパラメータを(2110で)定義する。各部分回路網の定義されたパラメータに基づいて、データ・ゼネレータは部分回路網を記憶構造体105内に記憶する。
上記のように、いくつかの実施形態ではデータベースを記憶構造体として使用し、このデータベースへのインデクスを部分回路網を記憶するパラメータとして使用する。当業者であれば、他の実施形態においては、異なる記憶構造体(例えば、データ・ファイル)および/または異なる記憶パラメータを使用できるということを理解することができるだろう。
図21は本発明のいくつかの実施形態でデータ・ゼネレータ115によって実行されるいくつかの演算を概念的に表すプロセス2100を示す。この図に示すように、データ・ゼネレータは(2105で)多数の部分回路網を指定する。これらの部分回路網は多素子部分回路網および/または多出力部分回路網を含むことができる。各々の指定された部分回路網について、データ・ゼネレータは部分回路網を記憶するパラメータを(2110で)定義する。各部分回路網の定義されたパラメータに基づいて、データ・ゼネレータは部分回路網を記憶構造体105内に記憶する。
上記のように、いくつかの実施形態ではデータベースを記憶構造体として使用し、このデータベースへのインデクスを部分回路網を記憶するパラメータとして使用する。当業者であれば、他の実施形態においては、異なる記憶構造体(例えば、データ・ファイル)および/または異なる記憶パラメータを使用できるということを理解することができるだろう。
図22は、データ・ゼネレータ115がいくつかの実施形態で実行してデータ・テーブル525を構成し組織する、より具体的なプロセス2200を示す。開始前に、このプロセスは(1)局所関数(すなわち、組合せ論理部分回路網内のノードの関数としての)の役割を果たすことができる組合せ論理関数(ブール関数)の集合と、(2)構築する部分回路網のノードおよびエッジの最大数を指定する情報とを受け取る。組合せ論理関数の集合は、プロセス2200によって、1つまたは複数の関数テーブル1520内で受け取ることができ、または1つまたは複数の関数テーブル1520内で組織することができる。また、以下の実施形態では、各々の受け取られた関数はそのROBDDで表現される。
組合せ論理関数の受け取られた集合は、組合せ論理ライブラリと呼ばれる。いくつかの実施形態では、このライブラリは通常、特定の技術に使用されるすべての回路素子を含む既存の技術ライブラリから引き出される。この場合、組合せ論理ライブラリはこの技術ライブラリ内の単一の回路素子によって計算できるすべての組合せ論理関数を含む。さらに、組合せ論理ライブラリは対応する回路素子の物理態様に関する追加情報(例えば、回路素子の推定サイズ、推定消費電力、タイミング特性など)を含む。そのような追加情報をさまざまな回路網フィルタで用いて、特定の特性を備えた回路網のみを含むデータベースを構築することができる。
組合せ論理関数の受け取られた集合は、組合せ論理ライブラリと呼ばれる。いくつかの実施形態では、このライブラリは通常、特定の技術に使用されるすべての回路素子を含む既存の技術ライブラリから引き出される。この場合、組合せ論理ライブラリはこの技術ライブラリ内の単一の回路素子によって計算できるすべての組合せ論理関数を含む。さらに、組合せ論理ライブラリは対応する回路素子の物理態様に関する追加情報(例えば、回路素子の推定サイズ、推定消費電力、タイミング特性など)を含む。そのような追加情報をさまざまな回路網フィルタで用いて、特定の特性を備えた回路網のみを含むデータベースを構築することができる。
他の実施形態では、組合せ論理ライブラリは必ずしも1つの特定の技術ライブラリから発生したわけではない関数を含む。例えば、特定の技術ライブラリに結びついていないデータベースでは、組合せ論理ライブラリは1つまたは複数の技術ライブラリから得た局所関数および/またはいかなる特定の技術ライブラリから得られたわけではない追加の抽象関数を含むことができる。人為的に定義された関数は人為的に定義された物理特性を有する人為的に定義された回路素子に対応する。任意の局所関数を含む組合せ論理ライブラリを使用して、特定の技術的特性のいかなる集合も含まないデータベースを構築することができる。しかし、いくつかの実施形態では、ゼネレータが、全部とは言わないまでも、ほとんどの組合せ論理関数を生成できるように、関数の集合が完全であることを必要とする。他方、この要件を課さない実施形態もある。
図22に示すように、プロセス2200は最初にノードおよびエッジの所与の最大数まで多数の有向グラフを(2202で)生成する。いくつかの実施形態では、プロセス2200は最大8つのノードと最大16個のエッジを備えたグラフを生成する。これはグラフ数がノードおよびエッジの数と共に指数的に増加するためである。下記の擬似コードはいくつかの実施形態でそのような有向グラフを生成する様子を示す。
・node_number=1,...,max_node_numberの場合、
・edge_number=1,...,max_edge_numberの場合、
・node_numberのノードとedge_numberのエッジを有し、すべての入力変数に依存するトップ・ノードを有するすべてのグラフを構築し、
・構築されたグラフごとに、グラフがいかなる以前に記憶されたグラフとも同形でなく、グラフが非周期性の場合、グラフを符号化し、符号化されたグラフをリストに保存し、
・保存したグラフのリストからグラフ・テーブル1515を構築する。
上記の擬似コードに示すように、いくつかの実施形態では、プロセス2200は最初にノードとエッジのすべての組合せを列挙することで2202を実行する。ノードとエッジの組合せごとに、プロセスは組合せのノードとエッジの数を有し、少なくとも1つのピボット・ノードを有する各グラフを構築する。図23に示すように、ピボット・ノードはその幾何学的ファンイン・コーンにすべての入力変数を受け取らせるノードである。
・node_number=1,...,max_node_numberの場合、
・edge_number=1,...,max_edge_numberの場合、
・node_numberのノードとedge_numberのエッジを有し、すべての入力変数に依存するトップ・ノードを有するすべてのグラフを構築し、
・構築されたグラフごとに、グラフがいかなる以前に記憶されたグラフとも同形でなく、グラフが非周期性の場合、グラフを符号化し、符号化されたグラフをリストに保存し、
・保存したグラフのリストからグラフ・テーブル1515を構築する。
上記の擬似コードに示すように、いくつかの実施形態では、プロセス2200は最初にノードとエッジのすべての組合せを列挙することで2202を実行する。ノードとエッジの組合せごとに、プロセスは組合せのノードとエッジの数を有し、少なくとも1つのピボット・ノードを有する各グラフを構築する。図23に示すように、ピボット・ノードはその幾何学的ファンイン・コーンにすべての入力変数を受け取らせるノードである。
多数の周知の技法を用いて、所与の数のノードおよびエッジについてすべてのグラフを構築することができる。いくつかの実施形態は最初に所与の数のノードおよびエッジについてすべての無向グラフを構築する。すべての無向グラフを構築するためのソフトウェア・パッケージが利用できる。そのようなパッケージの1つが、Brendan D. Mckay(bdm@cs.anu.edu.au)、Computer Science Department、Australian National Universityの「geng」プログラム・パッケージである。このパッケージは、
http://cs.anu.edu.au/~bdm/nauty/gtools10beta11.tar.gz
からダウンロードすることができる。
すべての無向グラフを生成した後で、これらの実施形態は各グラフのすべてのエッジにすべての可能な方向割り当てを試行することによってすべての有向グラフを生成する。ノードとエッジの各々の組合せについてすべての有向グラフを構築した後で、プロセスは組合せのすべての周期グラフを廃棄し、グラフが以前に記憶されたグラフと同形でない限り、グラフ・テーブル内の各々の残りのグラフを記憶する。
周期の有無の確認と同形グラフの識別は当技術分野で一般に周知である。例えば、MIT Press 2001年、Cormen、Leiserson、RivestおよびSteinの、「Introduction to Algorithms」Second Edition,Chapter 22(Elementary Graph Algorithms)は、グラフをトラバースすることによるグラフの周期の有無を確認する方法を開示する。さらに、同形グラフを識別するソフトウェア・パッケージが利用できる。そのようなパッケージの1つが、Brendan D. Mckay(bdm@cs.anu.edu.au)、Computer Science Department、Australian National Universityの「nauty」パッケージである。このパッケージは、
http://cs.anu.edu.au/people/bdm/nauty
からダウンロードすることができる。
プロセス2200がグラフ・テーブル内に記憶するグラフごとに、プロセスはグラフ−テーブル・インデクスを割り当て、記憶する。グラフはそのグラフ−テーブル・インデクスによって指定された特定の順序でグラフ・テーブル・インデクス内に記憶される(例えば、インデクスの昇順に分類される)。
2202の後で、プロセス2200はグラフ・テーブルからグラフの1つを(2204で)選択する。次に、選択したグラフから引き出すことができるすべての組合せ論理部分回路網を(2206で)構築する。このプロセスはグラフのノードの集合に一意的な関数の集合を割り当てることで選択されたグラフの各々の部分回路網を構築する。ノードがその関数に適している限り、組合せ論理ライブラリの任意の関数をグラフの任意のノードに割り当てることができる。このノードの着信エッジの数が関数が依存する変数の数に等しい場合、ノードは適している。いくつかの実施形態では、2206で指定された各部分回路網はそのグラフとこのグラフのノードの局所関数の集合とによって一時的に表現される。
http://cs.anu.edu.au/~bdm/nauty/gtools10beta11.tar.gz
からダウンロードすることができる。
すべての無向グラフを生成した後で、これらの実施形態は各グラフのすべてのエッジにすべての可能な方向割り当てを試行することによってすべての有向グラフを生成する。ノードとエッジの各々の組合せについてすべての有向グラフを構築した後で、プロセスは組合せのすべての周期グラフを廃棄し、グラフが以前に記憶されたグラフと同形でない限り、グラフ・テーブル内の各々の残りのグラフを記憶する。
周期の有無の確認と同形グラフの識別は当技術分野で一般に周知である。例えば、MIT Press 2001年、Cormen、Leiserson、RivestおよびSteinの、「Introduction to Algorithms」Second Edition,Chapter 22(Elementary Graph Algorithms)は、グラフをトラバースすることによるグラフの周期の有無を確認する方法を開示する。さらに、同形グラフを識別するソフトウェア・パッケージが利用できる。そのようなパッケージの1つが、Brendan D. Mckay(bdm@cs.anu.edu.au)、Computer Science Department、Australian National Universityの「nauty」パッケージである。このパッケージは、
http://cs.anu.edu.au/people/bdm/nauty
からダウンロードすることができる。
プロセス2200がグラフ・テーブル内に記憶するグラフごとに、プロセスはグラフ−テーブル・インデクスを割り当て、記憶する。グラフはそのグラフ−テーブル・インデクスによって指定された特定の順序でグラフ・テーブル・インデクス内に記憶される(例えば、インデクスの昇順に分類される)。
2202の後で、プロセス2200はグラフ・テーブルからグラフの1つを(2204で)選択する。次に、選択したグラフから引き出すことができるすべての組合せ論理部分回路網を(2206で)構築する。このプロセスはグラフのノードの集合に一意的な関数の集合を割り当てることで選択されたグラフの各々の部分回路網を構築する。ノードがその関数に適している限り、組合せ論理ライブラリの任意の関数をグラフの任意のノードに割り当てることができる。このノードの着信エッジの数が関数が依存する変数の数に等しい場合、ノードは適している。いくつかの実施形態では、2206で指定された各部分回路網はそのグラフとこのグラフのノードの局所関数の集合とによって一時的に表現される。
プロセスは次に2206で識別した部分回路網を(2208で)選択する。次に、プロセスは選択された部分回路網が実現するすべての出力関数を(2210で)計算する(すなわち、部分回路網の各出力の関数を識別する)。いくつかの実施形態においては、プロセスは部分回路網の各ノードの出力を部分回路網の出力として定義する。また、特定ノードの出力での出力関数は、特定ノードがグラフ内の他のどのノードの出力も受け取らない時には、特定ノードの局所関数である。他の方法としては、特定ノードがグラフ内の他の1つまたは複数のノードの出力を受け取る時には、特定ノードの出力での出力関数は特定ノードの局所関数とその出力を特定ノードが受け取る各ノードの局所関数から引き出すことができる。
いくつかの実施形態では、2210で指定された各部分回路網はその出力関数の集合によってだけ表される。これは、この段階で部分回路網がハッシュ関数を生成するためにだけ構築されるからである。また、この段階で、各出力関数はそのROBDDで表される。また、2210で、プロセスはピボット関数としての働きをする部分回路網の任意の出力関数を識別する。上記のように、部分回路網のピボット関数はその部分回路網へのすべての入力に依存する関数である。
次に、プロセスは選択した部分回路網に(2212で)フィルタリング規則を適用し、選択した部分回路網がこれらの規則のいずれかにあてはまる場合には選択した部分回路網を廃棄する(すなわち、フィルタリングする)。別の実施形態では、プロセスは別の規則の集合を用いて部分回路網をフィルタリングする。例えば、いくつかの実施形態においては、プロセス2200は、(1)部分回路網が重複する出力関数を有する場合、(2)部分回路網がその部分回路網の入力の1つと同一の出力関数を有する場合、または(3)部分回路網がピボット出力関数を有さない場合、プロセス2200は部分回路網を廃棄する。各々の生成されたグラフがピボット・ノードを有していても、部分回路網によって実施される特定の関数の結果として入力変数の一部が脱落することがあるため、最終的な部分回路網はピボット関数を有していないことがある。
いくつかの実施形態では、2210で指定された各部分回路網はその出力関数の集合によってだけ表される。これは、この段階で部分回路網がハッシュ関数を生成するためにだけ構築されるからである。また、この段階で、各出力関数はそのROBDDで表される。また、2210で、プロセスはピボット関数としての働きをする部分回路網の任意の出力関数を識別する。上記のように、部分回路網のピボット関数はその部分回路網へのすべての入力に依存する関数である。
次に、プロセスは選択した部分回路網に(2212で)フィルタリング規則を適用し、選択した部分回路網がこれらの規則のいずれかにあてはまる場合には選択した部分回路網を廃棄する(すなわち、フィルタリングする)。別の実施形態では、プロセスは別の規則の集合を用いて部分回路網をフィルタリングする。例えば、いくつかの実施形態においては、プロセス2200は、(1)部分回路網が重複する出力関数を有する場合、(2)部分回路網がその部分回路網の入力の1つと同一の出力関数を有する場合、または(3)部分回路網がピボット出力関数を有さない場合、プロセス2200は部分回路網を廃棄する。各々の生成されたグラフがピボット・ノードを有していても、部分回路網によって実施される特定の関数の結果として入力変数の一部が脱落することがあるため、最終的な部分回路網はピボット関数を有していないことがある。
また、部分回路網がノードの幾何学的ファンイン・コーンに供給されるすべての入力に依存はしない出力を備えた少なくとも1つのノードを有する時には、プロセスは部分回路網を廃棄する。例えば、図24は、第2および第3のノード2410および2415の出力を受け取る第1のノード2405を含む3ノードの部分回路網を示す。ここで、第2のノードは第1および第2の入力信号を受け取り、第3のノードは第3および第4の入力信号を受け取る。上記のフィルタリング規則によれば、そのような部分回路網では、各ノードの出力はその入力に依存しなければならず、第1のノードの出力は第1〜第4の入力に依存しなければならない。
次にプロセスは2206で生成されたすべての部分回路網を検証したか否かを(2214で)決定する。検証していない場合、プロセスは2208に戻ってまだ検証していない部分回路網を選択する。検証している場合、プロセスは2202で生成されたすべてのグラフを検証したか否かを(2216で)決定する。グラフをすべて検証してはいない場合、プロセスは2204に移行してまだ検証していないグラフを選択する。
プロセスがすべてのグラフを検証している場合、プロセスは2216から2218に移行する。プロセスが2218に達するまでに、プロセスは多数の部分回路網を識別して保持している。各々の保持された部分回路網は、ピボット関数の働きが可能な1つまたは複数の関数を含む出力関数の集合によって指定される。各部分回路網の関数の集合はピボット関数の働きが不可能な1つまたは複数の関数を含むこともできる。
次にプロセスは2206で生成されたすべての部分回路網を検証したか否かを(2214で)決定する。検証していない場合、プロセスは2208に戻ってまだ検証していない部分回路網を選択する。検証している場合、プロセスは2202で生成されたすべてのグラフを検証したか否かを(2216で)決定する。グラフをすべて検証してはいない場合、プロセスは2204に移行してまだ検証していないグラフを選択する。
プロセスがすべてのグラフを検証している場合、プロセスは2216から2218に移行する。プロセスが2218に達するまでに、プロセスは多数の部分回路網を識別して保持している。各々の保持された部分回路網は、ピボット関数の働きが可能な1つまたは複数の関数を含む出力関数の集合によって指定される。各部分回路網の関数の集合はピボット関数の働きが不可能な1つまたは複数の関数を含むこともできる。
次に、プロセスは(2218〜2226で)部分回路網の生成された出力関数の集合を用いてハッシュ関数を生成する。特に、2218で、プロセスは2212で廃棄されなかった(すなわち、2216の後で残っている)(1つの部分回路網を表す)出力関数の1つの集合を選択する。
この選択された集合から、プロセスは、(2220で)1つまたは複数の関数の集合を定義する。ここで各々の定義された集合は1つのピボット関数と潜在的に1つまたは複数の非ピボット関数を有する(集合は1つの関数しか有さない場合には非ピボット関数を有さない)。2220で、プロセスは2218で選択した集合内の潜在的なピボット関数の数と同じ数の関数の集合を定義する。例えば、2218で選択した集合は5つの関数(F1、F2、F3、F4、およびF5)を有することがあり、そのうち第2および第3の関数(F2およびF3)のみがピボット関数の働きをすることができる。そのような集合から、プロセスは(2220で)2つの関数の集合を定義する。すなわち、第2の関数を備えた一方の集合をピボット関数として、残りの集合を非ピボット関数として定義し、第3の関数を備えた他方の集合をピボット関数として、また残りの集合を非ピボット関数として定義する。
2220で識別された関数の各々について、プロセス2200はインデクサにピボット関数から識別される入力変数順序に基づいて集合内の各関数の真理値表表現を生成するように指示する。上記のように、いくつかの実施形態はピボット関数の正準真理値表表現を生む入力順序を選択する。いくつかの実施形態においては、正準真理値表は最小値真理値表である。
データベース生成時にいくつかの入力変数順序がピボット関数の正準真理値表表現を生む時には、インデクサのプロセス800は入力順序を決定論的に選択する。特に、上記のように、インデクサの入力順序識別子は常に(810で)特定の順序で入力変数構成の集合を返す。インデクサが事前集計時に決定論的に動作する時には、インデクス・マネジャーは常に(815で)返された入力構成の集合の同じ入力構成を指定された入力構成として選択する。例えば、いくつかの実施形態においては、インデクス・マネジャーは、常に、返された集合内の最初の入力構成を指定された構成として選択する。
この選択された集合から、プロセスは、(2220で)1つまたは複数の関数の集合を定義する。ここで各々の定義された集合は1つのピボット関数と潜在的に1つまたは複数の非ピボット関数を有する(集合は1つの関数しか有さない場合には非ピボット関数を有さない)。2220で、プロセスは2218で選択した集合内の潜在的なピボット関数の数と同じ数の関数の集合を定義する。例えば、2218で選択した集合は5つの関数(F1、F2、F3、F4、およびF5)を有することがあり、そのうち第2および第3の関数(F2およびF3)のみがピボット関数の働きをすることができる。そのような集合から、プロセスは(2220で)2つの関数の集合を定義する。すなわち、第2の関数を備えた一方の集合をピボット関数として、残りの集合を非ピボット関数として定義し、第3の関数を備えた他方の集合をピボット関数として、また残りの集合を非ピボット関数として定義する。
2220で識別された関数の各々について、プロセス2200はインデクサにピボット関数から識別される入力変数順序に基づいて集合内の各関数の真理値表表現を生成するように指示する。上記のように、いくつかの実施形態はピボット関数の正準真理値表表現を生む入力順序を選択する。いくつかの実施形態においては、正準真理値表は最小値真理値表である。
データベース生成時にいくつかの入力変数順序がピボット関数の正準真理値表表現を生む時には、インデクサのプロセス800は入力順序を決定論的に選択する。特に、上記のように、インデクサの入力順序識別子は常に(810で)特定の順序で入力変数構成の集合を返す。インデクサが事前集計時に決定論的に動作する時には、インデクス・マネジャーは常に(815で)返された入力構成の集合の同じ入力構成を指定された入力構成として選択する。例えば、いくつかの実施形態においては、インデクス・マネジャーは、常に、返された集合内の最初の入力構成を指定された構成として選択する。
次に、プロセスは2212で保持されたすべての部分回路網を検証したか否か(すなわち、2216の後に残ったすべての関数の集合を検証したか否か)を(2222で)決定する。検証していない場合、プロセスは2218に戻り、2212で廃棄されなかった(別の部分回路網を表す)別の出力関数の集合を選択する。
検証している場合、プロセスは2220で定義された各集合内の各々の特定の関数の真理値表を特定のインデクス値に関連付けることによって(2224で)ハッシュ・テーブルを生成する。次に、プロセスは生成されたハッシュ・テーブルに基づいてハッシュ関数を(2226で)計算する。ハッシュ・テーブルおよび関数を生成するそのような方法の1つが、先に引用したCzech文書に記載されている。
2226の後で、プロセスは基本的にすべての処理2204〜2216を再び実行する。特に、2228で、プロセスは2202で生成されたグラフ・テーブルからグラフの1つを選択する。プロセスは、次に、選択したグラフから引き出すことができるすべての組合せ論理部分回路網を(2230で)構築する。プロセスは各部分回路網を2206で前述したのと同じ方法で構築する。
次に、プロセスは2230で識別した部分回路網を(2232で)選択する。次に、プロセスは、(2234で)選択された部分回路網が実現するすべての出力関数を計算し(すなわち、部分回路網の各出力の関数を識別し)、ピボット関数としての働きが可能な部分回路網の各出力関数を識別する。プロセスの2234の処理は2210での処理と同様であるが、2234ではプロセスは識別された出力関数だけでなくそのグラフによって各部分回路網を指定する点が異なる。この段階で、各出力関数はそのROBDDで表される。
次に、プロセスは選択した部分回路網に(2236で)フィルタリング規則を適用し、選択した部分回路網がこれらの規則のいずれかを満足する場合には選択した部分回路網を廃棄する(すなわち、フィルタリングする)。プロセスは、2212で適用したのと同じフィルタリング規則を2236で適用する。プロセスは、次に2230で生成されたすべての部分回路網を検証したか否かを(2238で)決定する。検証していない場合、プロセスは2232に戻ってまだ検証していない部分回路網を選択する。検証している場合、2236でプロセスが保持した各部分回路網について、プロセスは(2240で)1つまたは複数の出力関数の集合を定義する。ここで各々の集合は1つのピボット関数と潜在的に1つまたは複数の非ピボット関数を有する。2220と同様に、プロセスは特定の部分回路網について2234で指定した関数集合内の潜在的なピボット関数の数と同じ数の各々の特定の部分回路網の関数の集合を2240で定義する。
特定の部分回路網について2240で指定した各関数の集合について、プロセスは、また、(2240で)特定の部分回路網のインデクスの集合を生成する。各インデクスの集合は1つのピボット関数と潜在的に1つまたは複数の2次インデクスを含む。集合は1つの関数しか有さない関数の集合について生成された場合には2次インデクスを含まない。
2240で、プロセスはインデクサにピボット関数の正準真理値表表現から決定論的に選択される入力変数順序に基づいて集合内の各関数の真理値表表現を生成するように指示する。2240での入力変数順序の決定論的な選択は2220での入力順序の決定論的な選択と同一である。特に、インデクサの入力順序識別子は常に(810で)特定の順序で入力変数構成の集合を返し、事前集計時にインデクス・マネジャーは常に(815で)入力構成と同じ入力構成の返された集合内の同じ入力構成を選択する。各関数の真理値表表現を生成した後で、プロセスは2226で生成されたハッシュ関数を用いて(2240で)インデクスを生成する。
検証している場合、プロセスは2220で定義された各集合内の各々の特定の関数の真理値表を特定のインデクス値に関連付けることによって(2224で)ハッシュ・テーブルを生成する。次に、プロセスは生成されたハッシュ・テーブルに基づいてハッシュ関数を(2226で)計算する。ハッシュ・テーブルおよび関数を生成するそのような方法の1つが、先に引用したCzech文書に記載されている。
2226の後で、プロセスは基本的にすべての処理2204〜2216を再び実行する。特に、2228で、プロセスは2202で生成されたグラフ・テーブルからグラフの1つを選択する。プロセスは、次に、選択したグラフから引き出すことができるすべての組合せ論理部分回路網を(2230で)構築する。プロセスは各部分回路網を2206で前述したのと同じ方法で構築する。
次に、プロセスは2230で識別した部分回路網を(2232で)選択する。次に、プロセスは、(2234で)選択された部分回路網が実現するすべての出力関数を計算し(すなわち、部分回路網の各出力の関数を識別し)、ピボット関数としての働きが可能な部分回路網の各出力関数を識別する。プロセスの2234の処理は2210での処理と同様であるが、2234ではプロセスは識別された出力関数だけでなくそのグラフによって各部分回路網を指定する点が異なる。この段階で、各出力関数はそのROBDDで表される。
次に、プロセスは選択した部分回路網に(2236で)フィルタリング規則を適用し、選択した部分回路網がこれらの規則のいずれかを満足する場合には選択した部分回路網を廃棄する(すなわち、フィルタリングする)。プロセスは、2212で適用したのと同じフィルタリング規則を2236で適用する。プロセスは、次に2230で生成されたすべての部分回路網を検証したか否かを(2238で)決定する。検証していない場合、プロセスは2232に戻ってまだ検証していない部分回路網を選択する。検証している場合、2236でプロセスが保持した各部分回路網について、プロセスは(2240で)1つまたは複数の出力関数の集合を定義する。ここで各々の集合は1つのピボット関数と潜在的に1つまたは複数の非ピボット関数を有する。2220と同様に、プロセスは特定の部分回路網について2234で指定した関数集合内の潜在的なピボット関数の数と同じ数の各々の特定の部分回路網の関数の集合を2240で定義する。
特定の部分回路網について2240で指定した各関数の集合について、プロセスは、また、(2240で)特定の部分回路網のインデクスの集合を生成する。各インデクスの集合は1つのピボット関数と潜在的に1つまたは複数の2次インデクスを含む。集合は1つの関数しか有さない関数の集合について生成された場合には2次インデクスを含まない。
2240で、プロセスはインデクサにピボット関数の正準真理値表表現から決定論的に選択される入力変数順序に基づいて集合内の各関数の真理値表表現を生成するように指示する。2240での入力変数順序の決定論的な選択は2220での入力順序の決定論的な選択と同一である。特に、インデクサの入力順序識別子は常に(810で)特定の順序で入力変数構成の集合を返し、事前集計時にインデクス・マネジャーは常に(815で)入力構成と同じ入力構成の返された集合内の同じ入力構成を選択する。各関数の真理値表表現を生成した後で、プロセスは2226で生成されたハッシュ関数を用いて(2240で)インデクスを生成する。
2240で、プロセスはまた回路網テーブル・インデクスを2236で保持された各部分回路網に割り当てる。保持された部分回路網ごとに、プロセスはリスト内に、(グラフ・テーブル内にそのグラフを指定する)部分回路網のグラフ・テーブル・インデクスと、(各々が関数テーブル内の局所関数を指定する)1つまたは複数の関数テーブル・インデクスと、(2240で定義された)1つまたは複数の関数インデクスの集合と、生成された回路網テーブル・インデクスとを(2244で)記憶する。
2240の後で、プロセスは2202で生成されたすべてのグラフを検証したか否かを(2242で)決定する。すべてのグラフを検証はしていない場合、プロセスは2228に移行してまだ検証していないグラフを選択する。検証している場合、同じ回路網またはほぼ同じ回路網の複数の定義を(2244で)廃棄する。これは、(1)同じグラフ・テーブル・インデクスと、(2)(2240で定義された)同じ関数インデクスの集合とを有する生成された部分回路網の各々のグループから1つ以外すべてを削除することで達成される。そのような重複した回路網は、例えば、グラフ構造の対称性のために生成される。回路網テーブル・インデクスと関数インデクスのリストに基づいて、プロセスは(2246で)データベース・テーブル525を完成する。特に、プロセスは初めに回路網テーブル1510を、次に2次インデクス・テーブル1505を、さらにピボット・インデクス・テーブル1500を作成する。上記のように、回路網テーブルは記憶されている回路網インデクスによって指定された順序で分類される。2次テーブルは記憶されている1次および2次インデクスによって指定された順序で分類される。1次テーブル1500は記憶されている1次インデクスによって指定された順序で分類される。2246の実行後にプロセスは終了する。
プロセス2200は指定されたサイズまで多数の組合せ論理部分回路網を生成する。これは専門家の知識から引き出される小さい可能性の集合からの回路網の変換になじむ以前の手法とは根本的に異なる。この新しい手法によって、最適化プロセスはデータベースへの簡単で直接のルックアップを用いて多数の代替部分回路網を識別することができる。これとは対照的に、ハンドコード変換(プログラム・コードとして直接実施されるか、または論理合成システムへのパラメータ化が可能な入力規則として使用される)は可能な態様のごく小さい部分集合しか利用できない。さらに、上記の自動データベース手法によって、マシン生成回路網にさらに専門家の知識を組み入れることができる。言い換えれば、この手法は任意の回路素子を備えたデータベースに部分回路網を追加する能力を提供する。
2240の後で、プロセスは2202で生成されたすべてのグラフを検証したか否かを(2242で)決定する。すべてのグラフを検証はしていない場合、プロセスは2228に移行してまだ検証していないグラフを選択する。検証している場合、同じ回路網またはほぼ同じ回路網の複数の定義を(2244で)廃棄する。これは、(1)同じグラフ・テーブル・インデクスと、(2)(2240で定義された)同じ関数インデクスの集合とを有する生成された部分回路網の各々のグループから1つ以外すべてを削除することで達成される。そのような重複した回路網は、例えば、グラフ構造の対称性のために生成される。回路網テーブル・インデクスと関数インデクスのリストに基づいて、プロセスは(2246で)データベース・テーブル525を完成する。特に、プロセスは初めに回路網テーブル1510を、次に2次インデクス・テーブル1505を、さらにピボット・インデクス・テーブル1500を作成する。上記のように、回路網テーブルは記憶されている回路網インデクスによって指定された順序で分類される。2次テーブルは記憶されている1次および2次インデクスによって指定された順序で分類される。1次テーブル1500は記憶されている1次インデクスによって指定された順序で分類される。2246の実行後にプロセスは終了する。
プロセス2200は指定されたサイズまで多数の組合せ論理部分回路網を生成する。これは専門家の知識から引き出される小さい可能性の集合からの回路網の変換になじむ以前の手法とは根本的に異なる。この新しい手法によって、最適化プロセスはデータベースへの簡単で直接のルックアップを用いて多数の代替部分回路網を識別することができる。これとは対照的に、ハンドコード変換(プログラム・コードとして直接実施されるか、または論理合成システムへのパラメータ化が可能な入力規則として使用される)は可能な態様のごく小さい部分集合しか利用できない。さらに、上記の自動データベース手法によって、マシン生成回路網にさらに専門家の知識を組み入れることができる。言い換えれば、この手法は任意の回路素子を備えたデータベースに部分回路網を追加する能力を提供する。
V.技術マッピング
また、上記のデータ記憶方式の合成を用いて、技術マッピングを実行することができる。いくつかの現在の論理合成システムは以下の3種類の演算を実行する。第一に、これらのシステムは任意の局所関数を実行する回路素子を含む非結合回路網の論理最適化を実行する。第二に、最適化された回路網を簡単な局所関数(2方向NANDなど)から構成される部分最適回路網にマッピングする。第三に、部分最適回路網を特定の技術ライブラリに結びついている結合回路網にマッピングする。高性能の論理最適化技法は非結合回路素子上で最もその能力を発揮するため、これらのシステムはこの手法に従う。技術マッピング演算はいつでも部分回路網を簡単な局所関数(2方向NANDなど)から構成される回路網にマッピングするわけではない。この演算は技術ライブラリへのマッピングをより簡単にするだけである。
他の同様の技術マッピング・システムもある。例えば、いくつかのシステムは以下の3種類の演算を実行する。第一に、任意の局所関数を実行する回路素子を含む非結合回路網を簡単な局所関数(2方向NANDなど)からなる別の回路網にマッピングする。第二に、マッピングされた回路網について論理最適化を実行する。第三に、これらのシステムは最適化された回路網を特定の技術ライブラリに結合されている回路網にマッピングする。
現在の技術マッピング技法の下では、最終的な回路網の製造可能性を確保するために追加のマッピングする演算を実行して目標ライブラリにマッピングしなければならない。これらのマッピング演算は物理的な態様の詳細(タイミングおよびゲートのサイズなど)を考慮しなければならない。これらのマッピング演算は普通、最適化演算に使用するアルゴリズムとは異なるアルゴリズムに基づく。したがって、最適化と技術マッピング演算との間のアルゴリズムの差から部分最適結果を得るリスクがある。
技術マッピング演算の1つのタイプはツリー・マッピングである。典型的なツリー・マッピング演算は、(1)小さい部分回路網を選択し、(2)各々の選択された部分回路網内で、1つまたは複数の素子を備えたマイクロツリーまたはマイクロリーフDAGを識別し、(3)各マイクロツリーまたはマイクロリーフDAGを技術ライブラリ内の1つのゲートにマッピングする再帰型動的プログラミング技法を使用する。他のツリー・マッピング演算は、回路網から直接マイクロツリーを識別し、次に、各マイクロツリーを技術ライブラリ内の1つのゲートにマッピングする。
ツリーは、N個のノードとN−1個のエッジを含む。マイクロツリーは少数のノードを備えたツリーである。DAGは有向非周期グラフである。DAGは任意のノード数のエッジを有することができる。マイクロリーフDAGは、リーフ・ノードが、2つ以上の他のノードに接続する出力を有することができる点を除いてマイクロツリーと同様である。
ツリー・マッピング演算は、マイクロツリーまたはマイクロリーフDAGのルート・ノード(トップレベル・ノード)の出力である唯一の出力を有するマイクロツリーまたはマイクロリーフDAG部分回路網を選択する。これらの演算は、ツリーの外部に出力を有する(すなわち、ツリー外部のノードへのファンアウトを有する)低レベル・ノード(すなわち、非ルート・ノード)を有するグラフ構造を全く選択しない。言い換えれば、典型的なツリー・マッピング演算で選択される各グラフはファンインの集合(すなわち、1つまたは複数の入力)と、唯一のファンアウト(すなわち、唯一の出力)とを有する。
また、上記のデータ記憶方式の合成を用いて、技術マッピングを実行することができる。いくつかの現在の論理合成システムは以下の3種類の演算を実行する。第一に、これらのシステムは任意の局所関数を実行する回路素子を含む非結合回路網の論理最適化を実行する。第二に、最適化された回路網を簡単な局所関数(2方向NANDなど)から構成される部分最適回路網にマッピングする。第三に、部分最適回路網を特定の技術ライブラリに結びついている結合回路網にマッピングする。高性能の論理最適化技法は非結合回路素子上で最もその能力を発揮するため、これらのシステムはこの手法に従う。技術マッピング演算はいつでも部分回路網を簡単な局所関数(2方向NANDなど)から構成される回路網にマッピングするわけではない。この演算は技術ライブラリへのマッピングをより簡単にするだけである。
他の同様の技術マッピング・システムもある。例えば、いくつかのシステムは以下の3種類の演算を実行する。第一に、任意の局所関数を実行する回路素子を含む非結合回路網を簡単な局所関数(2方向NANDなど)からなる別の回路網にマッピングする。第二に、マッピングされた回路網について論理最適化を実行する。第三に、これらのシステムは最適化された回路網を特定の技術ライブラリに結合されている回路網にマッピングする。
現在の技術マッピング技法の下では、最終的な回路網の製造可能性を確保するために追加のマッピングする演算を実行して目標ライブラリにマッピングしなければならない。これらのマッピング演算は物理的な態様の詳細(タイミングおよびゲートのサイズなど)を考慮しなければならない。これらのマッピング演算は普通、最適化演算に使用するアルゴリズムとは異なるアルゴリズムに基づく。したがって、最適化と技術マッピング演算との間のアルゴリズムの差から部分最適結果を得るリスクがある。
技術マッピング演算の1つのタイプはツリー・マッピングである。典型的なツリー・マッピング演算は、(1)小さい部分回路網を選択し、(2)各々の選択された部分回路網内で、1つまたは複数の素子を備えたマイクロツリーまたはマイクロリーフDAGを識別し、(3)各マイクロツリーまたはマイクロリーフDAGを技術ライブラリ内の1つのゲートにマッピングする再帰型動的プログラミング技法を使用する。他のツリー・マッピング演算は、回路網から直接マイクロツリーを識別し、次に、各マイクロツリーを技術ライブラリ内の1つのゲートにマッピングする。
ツリーは、N個のノードとN−1個のエッジを含む。マイクロツリーは少数のノードを備えたツリーである。DAGは有向非周期グラフである。DAGは任意のノード数のエッジを有することができる。マイクロリーフDAGは、リーフ・ノードが、2つ以上の他のノードに接続する出力を有することができる点を除いてマイクロツリーと同様である。
ツリー・マッピング演算は、マイクロツリーまたはマイクロリーフDAGのルート・ノード(トップレベル・ノード)の出力である唯一の出力を有するマイクロツリーまたはマイクロリーフDAG部分回路網を選択する。これらの演算は、ツリーの外部に出力を有する(すなわち、ツリー外部のノードへのファンアウトを有する)低レベル・ノード(すなわち、非ルート・ノード)を有するグラフ構造を全く選択しない。言い換えれば、典型的なツリー・マッピング演算で選択される各グラフはファンインの集合(すなわち、1つまたは複数の入力)と、唯一のファンアウト(すなわち、唯一の出力)とを有する。
別の以前の技術マッピング演算は構造的マッピングである。構造的マッパーは通常、インバータと単一の他のタイプのゲート(2入力NANDまたはNORなど)を用いて、最適化された回路網を部分最適回路網に再マッピングする。この手法の場合、ノードの局所関数は、全面的にノードの入力数によって決定される(例えば、1入力ノードはインバータであり、他のすべてのノードはNANDなどの選択された基本関数である)。したがって、任意の回路網によって実現される組合せ論理関数は全面的にそのグラフ構造によってのみ定義される。
また、構造的マッパーは、通常、最適化された回路網を再マッピングするためのインバータおよび同じタイプのゲートを用いて、技術ライブラリ内の各要素をグラフ構造内に再マッピングする。技術ライブラリの各部材があるグラフとして表されると、構造的マッピング・プロセスは部分最適回路網をサブパートに分割する。各サブパートについて、構造的マッピング・プロセスは、(1)サブパートのグラフ構造に対応する目標ライブラリ内の単一の要素を表し、(2)特定の費用関数(面積、タイミング、電力)に従ってほぼ可能であるグラフ構造を識別しようとする。分割プロセスは高水準プログラミング言語を低水準機械語に翻訳するコンパイラ内で使用される技法と類似の文字列照合技法を用いて実行されることが多い。
構造的マッピングは、ライブラリのマッピング・タスクを解決する一般的な枠組みを定義するが、いくつかの実用上の欠点も有する。効率的なアルゴリズムは、ツリー構造のみについて周知である。より一般的なグラフ構造は簡単なツリー構造に発見的に分解しなければならない。この分解によって、構造的マッピングの品質はこの人為的分解の悪影響を受ける。
また、構造的マッパーは、通常、最適化された回路網を再マッピングするためのインバータおよび同じタイプのゲートを用いて、技術ライブラリ内の各要素をグラフ構造内に再マッピングする。技術ライブラリの各部材があるグラフとして表されると、構造的マッピング・プロセスは部分最適回路網をサブパートに分割する。各サブパートについて、構造的マッピング・プロセスは、(1)サブパートのグラフ構造に対応する目標ライブラリ内の単一の要素を表し、(2)特定の費用関数(面積、タイミング、電力)に従ってほぼ可能であるグラフ構造を識別しようとする。分割プロセスは高水準プログラミング言語を低水準機械語に翻訳するコンパイラ内で使用される技法と類似の文字列照合技法を用いて実行されることが多い。
構造的マッピングは、ライブラリのマッピング・タスクを解決する一般的な枠組みを定義するが、いくつかの実用上の欠点も有する。効率的なアルゴリズムは、ツリー構造のみについて周知である。より一般的なグラフ構造は簡単なツリー構造に発見的に分解しなければならない。この分解によって、構造的マッピングの品質はこの人為的分解の悪影響を受ける。
本発明のデータ記憶方式の最適化は、これらの欠陥とは無縁である。この最適化が特定の技術にマッピングする部分回路網候補はツリー構造を有する必要がなく、それどころか、より一般的な有向非周期グラフ(「DAG」)構造を有することができる。これらの構造が有することができるエッジ数に制限はない。また、各部分回路網候補は複数の出力ノードを有することができる。したがって、内部ノードが部分回路網の外部のファンアウトを有することができるため、部分回路網候補はより大きくなることができる。さらに、データ記憶方式の最適化はその関数に基づいて多数の事前集計された部分回路網を開発することができる。この最適化方法は、簡単なゲートへの非効率的なマッピングを必要としない。また、出力関数のこの部分回路網の集合に基づいて単一演算で多素子代替部分回路網を取り出すことができる。さらに、特定の局所関数の集合について、指定された複雑さのレベルまですべての部分回路網を事前集計することができる。
図25は、本発明のデータ記憶方式の最適化を用いた技術マッピングを実行するプロセス2500を示す。このプロセスは、(1)特定の技術ライブラリ向けに設計されていない回路網と、(2)特定の技術ライブラリに結合されている事前集計された部分回路網を含むデータベース(または他の記憶構造体)とを受け取るたびに開始する。データベースは、第IV章ですでに述べた手法に基づいて事前集計することができる。プロセス2500が回路網とデータベースを受け取ると、その回路網を特定の技術ライブラリ用に最適化する。
図25は、本発明のデータ記憶方式の最適化を用いた技術マッピングを実行するプロセス2500を示す。このプロセスは、(1)特定の技術ライブラリ向けに設計されていない回路網と、(2)特定の技術ライブラリに結合されている事前集計された部分回路網を含むデータベース(または他の記憶構造体)とを受け取るたびに開始する。データベースは、第IV章ですでに述べた手法に基づいて事前集計することができる。プロセス2500が回路網とデータベースを受け取ると、その回路網を特定の技術ライブラリ用に最適化する。
図25に示すように、プロセスは最初、受け取ったデータベースを用いて(2505で)受け取った回路網のプロセス200を実行する。プロセス200は、受け取った回路網のより多くの部品が目標ライブラリに結びつくように(各代替部分回路網は目標ライブラリに結びついているので)受け取った回路網を絶えず変更する。いくつかの実施形態においては、プロセス200を技術マッピングのためのプロセス2500の一部として使用する時には、プロセス200を多少異なった形で使用することができる。照会マネジャーが、選択された部分回路網候補について、技術に結びついている部分回路網を記憶するデータ記憶域から得た少なくとも1つの代替部分回路網を返すと、これらの実施形態は常に代替部分回路網の1つが受け入れ可能であると(230で)判断し、それにより、常に、選択された部分回路網候補を返された代替部分回路網に(235で)置き換える。しかし、他の実施形態では、選択された部分回路網候補を取り出された代替部分回路網の1つに置き換えるか否かを(230で)評価することができ、場合によっては、部分回路網候補を代替部分回路網に置き換えないこともある。また、照会マネジャーが部分回路網候補の2つ以上の代替部分回路網を返す時には、上記のように、プロセス200が代替部分回路網の1つをランダムに選択するかまたは最善のコスト(225で計算される)を有する代替部分回路網を選択する。
プロセス200がその停止判定基準に達すると(例えば、最大反復数を実行するかまたはアニーラなどの最適化アルゴリズムの停止判定基準に達すると)、プロセス2500は2510に移行する。2510で、プロセス2500は、2505後に存在する回路網を横断して潜在的に目標ライブラリに結びついていないこの回路網内の任意のノード(すなわち、任意の回路素子)を識別する。いくつかの実施形態は、ノードが2505で実行される置き換えステップで回路網に追加されなかった場合には、ノードを潜在的に非結合とみなす。潜在的に目標ライブラリのゲートに結合されていない任意のノードNについて、プロセス2500は、Nを1ノードの部分回路網候補として扱い、その結果、ノードNの関数を実現するデータベース内のすべての一致する部分回路網を発見する。次に、プロセス2500は、ノードNをこのノードの最善の代替部分回路網に置き換える。プロセス2500は、回路網が技術ライブラリに結びついていない任意の回路素子を含むことが確実になるまでこの回路網の検索を続ける。
データベース内で非結合ノードの代替部分回路網を見つける処理はノードの局所関数が複雑すぎない限り常に可能である。大半のケースで、この判定基準は容易に満足される。しかし、回路網が任意に複雑なノード関数を有するケースでは、プロセス2500は他の方法(例えば、上記のShannon展開によるブール関数の分解など)を用いてまず管理不可能なノードを簡単化し、次いでその簡単化を目標ライブラリにマッピングする必要がある。言い換えれば、プロセス2500は複雑なノード関数をより小さい関数の集合に分解し、次により小さい関数の集合を実行する代替部分回路網の集合を識別する必要がある。
プロセス200がその停止判定基準に達すると(例えば、最大反復数を実行するかまたはアニーラなどの最適化アルゴリズムの停止判定基準に達すると)、プロセス2500は2510に移行する。2510で、プロセス2500は、2505後に存在する回路網を横断して潜在的に目標ライブラリに結びついていないこの回路網内の任意のノード(すなわち、任意の回路素子)を識別する。いくつかの実施形態は、ノードが2505で実行される置き換えステップで回路網に追加されなかった場合には、ノードを潜在的に非結合とみなす。潜在的に目標ライブラリのゲートに結合されていない任意のノードNについて、プロセス2500は、Nを1ノードの部分回路網候補として扱い、その結果、ノードNの関数を実現するデータベース内のすべての一致する部分回路網を発見する。次に、プロセス2500は、ノードNをこのノードの最善の代替部分回路網に置き換える。プロセス2500は、回路網が技術ライブラリに結びついていない任意の回路素子を含むことが確実になるまでこの回路網の検索を続ける。
データベース内で非結合ノードの代替部分回路網を見つける処理はノードの局所関数が複雑すぎない限り常に可能である。大半のケースで、この判定基準は容易に満足される。しかし、回路網が任意に複雑なノード関数を有するケースでは、プロセス2500は他の方法(例えば、上記のShannon展開によるブール関数の分解など)を用いてまず管理不可能なノードを簡単化し、次いでその簡単化を目標ライブラリにマッピングする必要がある。言い換えれば、プロセス2500は複雑なノード関数をより小さい関数の集合に分解し、次により小さい関数の集合を実行する代替部分回路網の集合を識別する必要がある。
2510の後で、プロセス2515は(2505で)受け取ったデータベースを用いて2510後に残った回路網に対してプロセス200を再度実行する。次に、プロセス200は目標ライブラリ用にこの回路網を再び最適化する。この最適化は2510での強制置き換えの結果の部分最適回路網を修正するクリーンアップ処理と考えることができる。
プロセス2500の技術マッピング演算は多くの場合に有利である。この処理は特定の目標ライブラリへのいかなる目標ライブラリにも結びついていない回路網の優れたマッピング方法を提供する。また、この処理は1つの結合目標ライブラリから別の結合目標ライブラリへの回路網の優れたマッピング方法を提供する。これは1つの技術(例えば、0.13ミクロン技術)から別の技術(例えば、0.1ミクロン技術)へのマッピングの際にきわめて有利である。
プロセス2500の技術マッピング演算は多くの場合に有利である。この処理は特定の目標ライブラリへのいかなる目標ライブラリにも結びついていない回路網の優れたマッピング方法を提供する。また、この処理は1つの結合目標ライブラリから別の結合目標ライブラリへの回路網の優れたマッピング方法を提供する。これは1つの技術(例えば、0.13ミクロン技術)から別の技術(例えば、0.1ミクロン技術)へのマッピングの際にきわめて有利である。
VI.NPN等価関係
図10〜図13を参照して前述したように、いくつかの実施形態はいくつかの部分回路網のうちの1つの部分回路網の入力の集合の順序を置き換えることで同一にできる2つの部分回路網を等価として扱う。この第1の等価関係を用いて、これらの実施形態は、データ記憶域に記憶された等価部分回路網の数を減らすことができる。
これらの実施形態のうちいくつかは、2つの別の等価関係を確立して記憶された等価部分回路網の数を減らす。第一に、これらの実施形態は入力の任意の部分集合(すなわち、入力の1つ、いくつか、またはすべて)を反転することで同一にできる2つの部分回路網を等価として扱う。第二に、これらの実施形態は、出力の任意の部分集合(すなわち、出力の1つ、いくつか、またはすべて)を反転することで同一にできる2つの部分回路網を等価として扱う。したがって、これらの実施形態では、以下の変換のうちの1つまたは複数の組合せによって同一にできる時は常に1つの部分回路網は等価として扱われる。(1)入力の特定の部分集合を反転する、(2)入力の集合の順序を置き換える、(3)出力の特定の部分集合を反転する。2つの部分回路網は同じ出力関数を実行し同じグラフを有する時には同一である。
NPN等価関係という用語は上記の3つすべての等価関係を指す。この用語で、最初の「N」は入力の部分集合の反転を指し、「P」は入力集合の順序の置き換えを指し、2番目の「N」は出力集合の部分集合の反転を指す。
両方のNの等価関係は信号の反転にはコストがかからない(すなわち、設計内のどの信号もコスト(面積、タイミングなど)がかからない追加のインバータによって反転できる)という前提に基づいている。この前提にはいくつかの理由がある。第一に、初期最適化の際には、この段階では回路記述の最終的な特性がごく大まかにしか推論できないので、反転の問題を無視して回路記述の一般的な再構築に的を絞ったほうがよい。第二に、技術によっては省略時解釈で出力信号に両方の極性を与えている(各出力ピン「A」について言えば、相補信号を提供するピン「A_BAR」を有する)。第三に、反転にコストをかけないことで、より複雑な部分回路網を同じ量のメモリ内に記憶できるようになり、事前集計された部分回路網の記憶ははるかに高性能になる。この結果、より複雑な部分回路網の置き換えが可能になるので最適化が増強される。
上記の実施形態はP等価関係(すなわち、入力集合の順序置き換え)に関するものである。2つのN等価関係を説明するためには(すなわち、入力および/または出力の反転による等価関係を説明するには)、以下の演算を修正しなければならない。
図10〜図13を参照して前述したように、いくつかの実施形態はいくつかの部分回路網のうちの1つの部分回路網の入力の集合の順序を置き換えることで同一にできる2つの部分回路網を等価として扱う。この第1の等価関係を用いて、これらの実施形態は、データ記憶域に記憶された等価部分回路網の数を減らすことができる。
これらの実施形態のうちいくつかは、2つの別の等価関係を確立して記憶された等価部分回路網の数を減らす。第一に、これらの実施形態は入力の任意の部分集合(すなわち、入力の1つ、いくつか、またはすべて)を反転することで同一にできる2つの部分回路網を等価として扱う。第二に、これらの実施形態は、出力の任意の部分集合(すなわち、出力の1つ、いくつか、またはすべて)を反転することで同一にできる2つの部分回路網を等価として扱う。したがって、これらの実施形態では、以下の変換のうちの1つまたは複数の組合せによって同一にできる時は常に1つの部分回路網は等価として扱われる。(1)入力の特定の部分集合を反転する、(2)入力の集合の順序を置き換える、(3)出力の特定の部分集合を反転する。2つの部分回路網は同じ出力関数を実行し同じグラフを有する時には同一である。
NPN等価関係という用語は上記の3つすべての等価関係を指す。この用語で、最初の「N」は入力の部分集合の反転を指し、「P」は入力集合の順序の置き換えを指し、2番目の「N」は出力集合の部分集合の反転を指す。
両方のNの等価関係は信号の反転にはコストがかからない(すなわち、設計内のどの信号もコスト(面積、タイミングなど)がかからない追加のインバータによって反転できる)という前提に基づいている。この前提にはいくつかの理由がある。第一に、初期最適化の際には、この段階では回路記述の最終的な特性がごく大まかにしか推論できないので、反転の問題を無視して回路記述の一般的な再構築に的を絞ったほうがよい。第二に、技術によっては省略時解釈で出力信号に両方の極性を与えている(各出力ピン「A」について言えば、相補信号を提供するピン「A_BAR」を有する)。第三に、反転にコストをかけないことで、より複雑な部分回路網を同じ量のメモリ内に記憶できるようになり、事前集計された部分回路網の記憶ははるかに高性能になる。この結果、より複雑な部分回路網の置き換えが可能になるので最適化が増強される。
上記の実施形態はP等価関係(すなわち、入力集合の順序置き換え)に関するものである。2つのN等価関係を説明するためには(すなわち、入力および/または出力の反転による等価関係を説明するには)、以下の演算を修正しなければならない。
プロセス800(810および815で)
NPN等価関係を説明するには、図8のプロセス800の正準化演算810を修正する必要がある。組合せ論理関数の真理値表表現では、正準化は、DAC98、1998年6月15〜19日、Uwe HinsbergerおよびReiner Kollaの、「Boolean Matching for Large Libraries」に開示された技法に基づいてNPN対応にすることができる。この技法は、同様の分岐および結合アルゴリズムをPケースとして使用する。他の組合せ論理関数表現のN対応正準化は、Proc. ICCAD 1992年、Jerry R.BurchおよびDavid E.Longの、「Efficient Boolean Function Matching」などの他の参照文献に開示されている。
組合せ論理関数F_1およびF_2のNPN正準化の結果として、(1)1つまたは複数の入力段階の置き換え、(2)入力の順序の置き換え、(3)1つまたは複数の出力段階の置き換えの3つの処理の組合せによってF_1およびF_2が等しくできる時には常に、同じ表現が得られる。関数Fの真理値表表現の場合、関数FのNPN正準化のプロセスは(810で)1つまたは複数の変換集合を識別する。各々の識別された変換集合は何らかの入力置き換え、入力順序の置き換え、出力の置き換え(この順に)からなり、ピボット関数の正準真理値表表現が生成される。特に、各々の識別されたNPN変換Tの集合は、(1)入力変数構成P、(2)置き換える入力変数の部分集合Z、および(3)関数全体を補完するか否かを示すブール変数Oを指定する。
810で、プロセス800は、(810で)関数FのNPN正準表現を識別する。この正準表現は、関数Fが、810で識別された集合の1つが指定した変換を説明した後で(すなわち、集合の入力変数反転Zを説明し、次いで集合の入力変数構成Pを説明し、さらに集合の出力変数反転Oを説明した後で)生成する真理値表である。
815で入力変数構成のみを選択する代わりに、NPNモード実行時のプロセス800は、(815で)NPN変換集合を選択する。この変換集合は、810で識別された変換集合の1つである。最適化の際には、プロセス800は、この集合をランダムに選択して照会のインデクスを生成する。他方、事前集計の際には、プロセス800は、このNPN変換を決定論的に選択する。
NPN等価関係を説明するには、図8のプロセス800の正準化演算810を修正する必要がある。組合せ論理関数の真理値表表現では、正準化は、DAC98、1998年6月15〜19日、Uwe HinsbergerおよびReiner Kollaの、「Boolean Matching for Large Libraries」に開示された技法に基づいてNPN対応にすることができる。この技法は、同様の分岐および結合アルゴリズムをPケースとして使用する。他の組合せ論理関数表現のN対応正準化は、Proc. ICCAD 1992年、Jerry R.BurchおよびDavid E.Longの、「Efficient Boolean Function Matching」などの他の参照文献に開示されている。
組合せ論理関数F_1およびF_2のNPN正準化の結果として、(1)1つまたは複数の入力段階の置き換え、(2)入力の順序の置き換え、(3)1つまたは複数の出力段階の置き換えの3つの処理の組合せによってF_1およびF_2が等しくできる時には常に、同じ表現が得られる。関数Fの真理値表表現の場合、関数FのNPN正準化のプロセスは(810で)1つまたは複数の変換集合を識別する。各々の識別された変換集合は何らかの入力置き換え、入力順序の置き換え、出力の置き換え(この順に)からなり、ピボット関数の正準真理値表表現が生成される。特に、各々の識別されたNPN変換Tの集合は、(1)入力変数構成P、(2)置き換える入力変数の部分集合Z、および(3)関数全体を補完するか否かを示すブール変数Oを指定する。
810で、プロセス800は、(810で)関数FのNPN正準表現を識別する。この正準表現は、関数Fが、810で識別された集合の1つが指定した変換を説明した後で(すなわち、集合の入力変数反転Zを説明し、次いで集合の入力変数構成Pを説明し、さらに集合の出力変数反転Oを説明した後で)生成する真理値表である。
815で入力変数構成のみを選択する代わりに、NPNモード実行時のプロセス800は、(815で)NPN変換集合を選択する。この変換集合は、810で識別された変換集合の1つである。最適化の際には、プロセス800は、この集合をランダムに選択して照会のインデクスを生成する。他方、事前集計の際には、プロセス800は、このNPN変換を決定論的に選択する。
プロセス900(910および915で)
NPNモードでは、図9のプロセス900は、815で選択されたNPN変換集合を(910で)受け取る。図9のプロセス900は、815で選択されたNPN変換集合内のNおよびP変換をまず多関数照会の非ピボット関数に適用する。特に、プロセス900は、集合の入力変数反転Zを非ピボット関数に適用する。次に、プロセス900は、集合の入力変数反転Zを適用した後で集合の入力変数構成Pを適用する。次に、プロセス900は、非ピボット関数の得られた真理値表(「非反転真理値表」)を取り出し、これを反転して反転真理値表を得る。このプロセスは、次に2進文字列として反転および非反転真理値表として検証し、非反転真理値表と反転真理値表のうち小さいほうを選択する。プロセスは、次に、選択された真理値表に基づいてハッシュ値を計算する。
プロセス1400(1415〜35で)
NPNモードでは、プロセス1400は、返された変換のリスト内で指定された最初の変換を選択することで決定論的にNPN変換集合T(Z,P,O)を決定する。1420で、プロセスは、605で使用される(すなわち、X−1(T)を使用する)変換X=(W,V,Y)の逆関数を適用する。1425で、プロセスは、1420で識別された順序変更および入力段階置き換えに基づいて関数を計算する。
1430で、プロセスは、一方が他方の相補関数であれば2つの関数は同等であるとさらに仮定することで、計算された集合が部分回路網候補の出力関数の集合を含むか否かを検査する。これは代替部分回路網の個別の出力関数の反転がコストをかけずにさらに実行できるためである。1435で一致を指定する場合、基礎の入力および出力段階の置き換えを実現するすべての必要なインバータ(すなわち、単にその入力関数の相補を実行する単一の入力を備えた追加ノード)が代替部分回路網に追加される。
NPNモードでは、図9のプロセス900は、815で選択されたNPN変換集合を(910で)受け取る。図9のプロセス900は、815で選択されたNPN変換集合内のNおよびP変換をまず多関数照会の非ピボット関数に適用する。特に、プロセス900は、集合の入力変数反転Zを非ピボット関数に適用する。次に、プロセス900は、集合の入力変数反転Zを適用した後で集合の入力変数構成Pを適用する。次に、プロセス900は、非ピボット関数の得られた真理値表(「非反転真理値表」)を取り出し、これを反転して反転真理値表を得る。このプロセスは、次に2進文字列として反転および非反転真理値表として検証し、非反転真理値表と反転真理値表のうち小さいほうを選択する。プロセスは、次に、選択された真理値表に基づいてハッシュ値を計算する。
プロセス1400(1415〜35で)
NPNモードでは、プロセス1400は、返された変換のリスト内で指定された最初の変換を選択することで決定論的にNPN変換集合T(Z,P,O)を決定する。1420で、プロセスは、605で使用される(すなわち、X−1(T)を使用する)変換X=(W,V,Y)の逆関数を適用する。1425で、プロセスは、1420で識別された順序変更および入力段階置き換えに基づいて関数を計算する。
1430で、プロセスは、一方が他方の相補関数であれば2つの関数は同等であるとさらに仮定することで、計算された集合が部分回路網候補の出力関数の集合を含むか否かを検査する。これは代替部分回路網の個別の出力関数の反転がコストをかけずにさらに実行できるためである。1435で一致を指定する場合、基礎の入力および出力段階の置き換えを実現するすべての必要なインバータ(すなわち、単にその入力関数の相補を実行する単一の入力を備えた追加ノード)が代替部分回路網に追加される。
プロセス2200(2220および2240で)
2220または2240で、プロセス22はピボット関数に基づいてNPN変換(Z,P,O)を識別する。2220または2240で、プロセス2200は、識別された変換に従ってピボット関数の真理値表を生成する。また、2220または2240で集合の各々の非ピボット関数の真理値表も生成する。非ピボット関数の真理値表を生成するために、プロセス2200は非ピボット関数に集合の入力変数反転Zを適用する。次に、プロセス2200は、集合の入力変数反転Zを適用した後で集合の入力変数構成Pを適用する。次に、プロセス2200は非ピボット関数の得られた真理値表(「非反転真理値表」)を取り出し、これを反転して反転真理値表を得る。このプロセスは、次に、2進文字列として反転および非反転真理値表を検証し、非反転真理値表と反転真理値表のうち小さいほうを選択する。
2220または2240で、プロセス22はピボット関数に基づいてNPN変換(Z,P,O)を識別する。2220または2240で、プロセス2200は、識別された変換に従ってピボット関数の真理値表を生成する。また、2220または2240で集合の各々の非ピボット関数の真理値表も生成する。非ピボット関数の真理値表を生成するために、プロセス2200は非ピボット関数に集合の入力変数反転Zを適用する。次に、プロセス2200は、集合の入力変数反転Zを適用した後で集合の入力変数構成Pを適用する。次に、プロセス2200は非ピボット関数の得られた真理値表(「非反転真理値表」)を取り出し、これを反転して反転真理値表を得る。このプロセスは、次に、2進文字列として反転および非反転真理値表を検証し、非反転真理値表と反転真理値表のうち小さいほうを選択する。
以下にさらに説明するように、いくつかの実施形態は技術マッピングを備えたNPN等価関係を使用しない。したがって、図25のプロセス2500は修正されない。
NPN等価関係を使用することでP等価関係と比較して事前計算された部分回路網間のさらに多くの等価関係が確立される。したがって、NPN等価関係を使用すると、2242で多数の部分回路網とインデクス集合が削除される。その結果、データ記憶域内の部分回路網の数が大幅に削減され、より多くの複雑な部分回路網を備えたデータ記憶域の作成が容易になる。
データ記憶域のサイズは明示的なインバータを含む部分回路網を考慮しないことで削減できる。インバータが部分回路網の他のノードの入力を駆動する場合、ノードそれに自体が入力信号を補完する(コストをかけずに)と仮定することができる。インバータが部分回路網の出力Oを駆動する場合、これはOでの関数が補完されるという点を除いて同じ関数を生成する部分回路網と論理的に等価と考えられる。Pのみの等価関係またはNPN等価関係のいずれかについてバッファを考慮しない(出力で入力信号を提示する単一入力/単一出力ノードを考慮する)実施形態は、事前集計時に1つの入力しか有さない任意のノードを備えたグラフを考慮しない。その結果、データ記憶域内の部分回路網の数が大幅に削減され、より多くの複雑な部分回路網を備えたデータ記憶域の作成が容易になる。
NPN等価関係の説明は、通常、非結合組合せ論理回路網について実行する最適化である。結合組合せ論理回路網の最適化または非結合組合せ論理回路網の結合組合せ論理回路網へのマッピングを行うには、通常、目標ライブラリのゲートの物理特性(コスティングの面での)を完全に理解していることが必要である。反転は、通常、そのような詳細な物理特性に関してコスト・フリーではない。したがって、技術マッピング時にはいずれのN等価関係も使用されない。技術マッピング時にはP等価関係のみが考慮される。
当業者であれば、他の実施形態もNP等価関係またはPN等価関係を説明できる(すなわち、入力または出力反転のみがコスト・フリーと考えることができる)ということを理解することができるだろう。こうした場合、正準化はNPまたはPN正準化のみである。技術ライブラリによっては出力ピンは信号の両方の極性に対応するので、PNケースは結合組合せ論理回路網の場合でも興味深い。
NPN等価関係を使用することでP等価関係と比較して事前計算された部分回路網間のさらに多くの等価関係が確立される。したがって、NPN等価関係を使用すると、2242で多数の部分回路網とインデクス集合が削除される。その結果、データ記憶域内の部分回路網の数が大幅に削減され、より多くの複雑な部分回路網を備えたデータ記憶域の作成が容易になる。
データ記憶域のサイズは明示的なインバータを含む部分回路網を考慮しないことで削減できる。インバータが部分回路網の他のノードの入力を駆動する場合、ノードそれに自体が入力信号を補完する(コストをかけずに)と仮定することができる。インバータが部分回路網の出力Oを駆動する場合、これはOでの関数が補完されるという点を除いて同じ関数を生成する部分回路網と論理的に等価と考えられる。Pのみの等価関係またはNPN等価関係のいずれかについてバッファを考慮しない(出力で入力信号を提示する単一入力/単一出力ノードを考慮する)実施形態は、事前集計時に1つの入力しか有さない任意のノードを備えたグラフを考慮しない。その結果、データ記憶域内の部分回路網の数が大幅に削減され、より多くの複雑な部分回路網を備えたデータ記憶域の作成が容易になる。
NPN等価関係の説明は、通常、非結合組合せ論理回路網について実行する最適化である。結合組合せ論理回路網の最適化または非結合組合せ論理回路網の結合組合せ論理回路網へのマッピングを行うには、通常、目標ライブラリのゲートの物理特性(コスティングの面での)を完全に理解していることが必要である。反転は、通常、そのような詳細な物理特性に関してコスト・フリーではない。したがって、技術マッピング時にはいずれのN等価関係も使用されない。技術マッピング時にはP等価関係のみが考慮される。
当業者であれば、他の実施形態もNP等価関係またはPN等価関係を説明できる(すなわち、入力または出力反転のみがコスト・フリーと考えることができる)ということを理解することができるだろう。こうした場合、正準化はNPまたはPN正準化のみである。技術ライブラリによっては出力ピンは信号の両方の極性に対応するので、PNケースは結合組合せ論理回路網の場合でも興味深い。
VII.コンピュータ・システム
図26は、本発明の一実施形態を実現するコンピュータ・システムを示す。コンピュータ・システム2600は、バス2605、プロセッサ2610、システム・メモリ2615、読み出し専用メモリ2620、固定記憶装置2625、入力装置2630、および出力装置2635を含む。
バス2605は、コンピュータ・システム2600の多数の内部装置を通信可能に接続するすべてのシステム、周辺装置、およびチップセット・バスをまとめて表す。例えば、バス2605は、プロセッサ2610を読み出し専用メモリ2620、システム・メモリ2615、および固定記憶装置2625と通信可能に接続する。
これらのさまざまなメモリ装置から、プロセッサ2610は、本発明の各プロセスを実行するために実行命令と処理データを取り出す。読み出し専用メモリ(ROM)2620はプロセッサ2610およびコンピュータ・システムの他のモジュールが必要とする静的データおよび命令を記憶する。これに対して、固定記憶装置2625は読み取り/書き込みメモリ装置である。この装置は、コンピュータ・システム2600の電源が切られても命令とデータを記憶する不揮発性メモリである。本発明のいくつかの実施形態においては、固定記憶装置2625として大容量記憶装置(磁気または光ディスクおよびこれに対応するディスク・ドライブ)を使用する。また、固定記憶装置として取り外し可能記憶装置(フロッピー・ディスクまたはzip(登録商標)ディスク、およびこれに対応するディスク・ドライブ)を使用する実施形態もある。
固定記憶装置2625と同様に、システム・メモリ2615は読み取り/書き込みメモリ装置である。しかし、記憶装置2625とは異なり、システム・メモリは、ランダム・アクセス・メモリなどの揮発性読み取り/書き込みメモリである。システム・メモリは、プロセッサが実行時に必要とする命令およびデータの一部を記憶する。いくつかの実施形態においては、本発明の各プロセスは、システム・メモリ2615、固定記憶装置2625、および/または読み出し専用メモリ2620に記憶される。
図26は、本発明の一実施形態を実現するコンピュータ・システムを示す。コンピュータ・システム2600は、バス2605、プロセッサ2610、システム・メモリ2615、読み出し専用メモリ2620、固定記憶装置2625、入力装置2630、および出力装置2635を含む。
バス2605は、コンピュータ・システム2600の多数の内部装置を通信可能に接続するすべてのシステム、周辺装置、およびチップセット・バスをまとめて表す。例えば、バス2605は、プロセッサ2610を読み出し専用メモリ2620、システム・メモリ2615、および固定記憶装置2625と通信可能に接続する。
これらのさまざまなメモリ装置から、プロセッサ2610は、本発明の各プロセスを実行するために実行命令と処理データを取り出す。読み出し専用メモリ(ROM)2620はプロセッサ2610およびコンピュータ・システムの他のモジュールが必要とする静的データおよび命令を記憶する。これに対して、固定記憶装置2625は読み取り/書き込みメモリ装置である。この装置は、コンピュータ・システム2600の電源が切られても命令とデータを記憶する不揮発性メモリである。本発明のいくつかの実施形態においては、固定記憶装置2625として大容量記憶装置(磁気または光ディスクおよびこれに対応するディスク・ドライブ)を使用する。また、固定記憶装置として取り外し可能記憶装置(フロッピー・ディスクまたはzip(登録商標)ディスク、およびこれに対応するディスク・ドライブ)を使用する実施形態もある。
固定記憶装置2625と同様に、システム・メモリ2615は読み取り/書き込みメモリ装置である。しかし、記憶装置2625とは異なり、システム・メモリは、ランダム・アクセス・メモリなどの揮発性読み取り/書き込みメモリである。システム・メモリは、プロセッサが実行時に必要とする命令およびデータの一部を記憶する。いくつかの実施形態においては、本発明の各プロセスは、システム・メモリ2615、固定記憶装置2625、および/または読み出し専用メモリ2620に記憶される。
バス2605は、また、入力および出力装置2630および2635を接続する。ユーザは、入力装置を用いて情報を送受信し、コンピュータ・システムへのコマンドを選択する。入力装置2630は、英数字キーボードおよびカーソル制御装置を含む。出力装置2635は、コンピュータ・システムによって生成される画像を表示する。例えば、これらの装置はIC設計のレイアウトを表示する。出力装置は、プリンタや陰極線管(CRT)または液晶表示装置(LCD)などの表示装置を含む。
最後に、図26に示すように、バス2605はまたコンピュータ2600を回路網アダプタ(図示せず)を介してネットワーク2665に結合する。このようにして、コンピュータは、コンピュータ・ネットワーク(ローカル・エリア・ネットワーク(LAN)、ワイド・エリア・ネットワーク(WAN)、またはイントラネット)またはネットワークのネットワーク(インターネットなど)の一部になることができる。コンピュータ・システム2600の任意の、またはすべての構成要素を本発明と併用することができる。しかし、当業者であれば、本発明と併用して他の任意の構成も使用できることを理解することができるだろう。
以上、多数の具体例を参照しながら本発明について説明してきたが、当業者であれば、本発明の精神を逸脱することなく、他の特定の形式で本発明を具体化できることを理解することができるだろう。例えば、いくつかの実施形態においては、上記の記憶方法とは異なる形で部分回路網を記憶することができる。また、いくつかの実施形態においては、マシンで生成されたものではないデータベースおよびデータ記憶装置を使用することができる。さらに、いくつかの実施形態においては、上記の方法とは異なる符号化および索引付け方法を使用することができる。したがって、当業者であれば、本発明は上記例示としての詳細な説明によっては限定されず、添付の特許請求の範囲によって定義されることを理解することができるだろう。
135 設計
115 データ・ゼネレータ
110 グローバル・オプティマイザ
105 回路網データ記憶域
130 コスティング・エンジン
120 タイミング・エンジン
125 面積エンジン
140 電力エンジン
115 データ・ゼネレータ
110 グローバル・オプティマイザ
105 回路網データ記憶域
130 コスティング・エンジン
120 タイミング・エンジン
125 面積エンジン
140 電力エンジン
Claims (83)
- 部分回路網を事前集計する方法であって、
a)複数の回路素子を有する部分回路網を生成するステップであって、前記部分回路網がある関数を実行するステップと、
b)前記関数に基づいてパラメータを生成するステップと、
c)前記生成されたパラメータに基づいて記憶構造体内に前記部分回路網を記憶するステップとを含む方法。 - 前記パラメータを生成するステップの前に前記部分回路網によって実行される前記関数を識別するステップをさらに含む請求項1に記載の方法。
- 前記パラメータが前記記憶構造体内に前記部分回路網を記憶するためのインデクスである請求項1に記載の方法。
- 前記インデクスが数字インデクスである請求項3に記載の方法。
- 前記パラメータが前記記憶構造体内に前記部分回路網を記憶するインデクスの集合である請求項1に記載の方法。
- 前記部分回路網が前記関数の集合を実行し、前記パラメータを生成するステップが、前記関数の集合に基づいて前記パラメータを生成するステップを含む請求項1に記載の方法。
- 前記パラメータが前記関数の集合内への各関数のインデクスを含むインデクスの集合である請求項6に記載の方法。
- 前記インデクスが数字インデクスである請求項7に記載の方法。
- 前記部分回路網を指定するステップが、
a)回路素子ごとに1つのノードを有するグラフを定義するステップと、
b)各ノードの局所関数を指定するステップと、
c)前記局所関数から前記関数を識別するステップと
を含む請求項1に記載の方法。 - シンセサイザが各回路素子を独立して分析することができる請求項1に記載の方法。
- 前記パラメータを生成するステップが、前記関数の記号表現に基づいて前記パラメータを生成するステップを含む請求項1に記載の方法。
- 前記記号表現がBDD表現である請求項11に記載の方法。
- 前記記号表現が真理値表表現である請求項11に記載の方法。
- 前記記号表現がブール式である請求項11に記載の方法。
- 部分回路網を事前集計する方法であって、
a)特定のしきい値の複雑度まで複数の部分回路網を指定するステップであって、各部分回路網が少なくとも1つの回路素子を有し、前記複数の部分回路網が2つ以上の回路素子を有し、各部分回路網が少なくとも1つの出力関数を実行してその出力関数の結果を出力するステップと、
b)各部分回路網について、前記部分回路網の出力関数に基づいてパラメータを生成するステップと、
c)前記部分回路網について前記生成されたパラメータに基づいて記憶構造体内に各部分回路網を記憶するステップとを含む方法。 - 前記特定のしきい値の複雑度が前記部分回路網の少なくとも1つの構造的属性に関連する請求項15に記載の方法。
- 各部分回路網が入力の集合を受け付け、前記構造的属性が各部分回路網の入力の集合内の入力数に関連する請求項16に記載の方法。
- 前記構造的属性が各部分回路網の回路素子の数に関連する請求項16に記載の方法。
- 前記構造的属性が各部分回路網の前記回路素子間の相互接続の数に関連する請求項16に記載の方法。
- 前記部分回路網の前記パラメータを生成するステップの前に各部分回路網によって実行される前記出力関数を識別するステップをさらに含む請求項15に記載の方法。
- 各部分回路網が関数の集合を実行し、各部分回路網のパラメータを生成するステップが、前記部分回路網によって実行される前記関数の集合に基づいてパラメータを生成するステップを含む請求項15に記載の方法。
- 各部分回路網の前記パラメータが前記部分回路網の前記関数の集合内の各関数のインデクスを含むインデクスの集合である請求項21に記載の方法。
- 前記インデクスが数字インデクスである請求項22に記載の方法。
- 前記部分回路網を指定するステップが、
a)特定のしきい値の複雑度まで複数のグラフを定義するステップであって、各グラフがノードの集合を有するステップと、
b)各グラフの局所関数の異なる集合を指定するステップであって、各々の特定のグラフの各々の局所関数の集合が前記特定のグラフの各ノードの1つの局所関数を含み、各々の特定のグラフの各々の局所関数の集合が異なる部分回路網を指定するステップと、
c)前記部分回路網を指定するために用いる前記局所関数の集合から各々の特定の指定された部分回路網の出力関数の集合を識別するステップとを含む請求項15に記載の方法。 - 各部分回路網を記憶するステップが、
各々の特定の部分回路網について、前記特定の部分回路網を指定する前記グラフと前記局所関数の集合とを前記記憶構造体内に記憶するステップを含む請求項14に記載の方法。 - 部分回路網を事前集計する方法であって、
a)少なくとも2つの関数の集合を実行する部分回路網を指定するステップと、
b)前記関数の集合に基づいてパラメータを生成するステップと、
c)前記生成されたパラメータに基づいて前記記憶構造体内に前記部分回路網を記憶するステップとを含む方法。 - 前記関数の集合が1つの関数のみを含む請求項26に記載の方法。
- 前記関数の集合が複数の関数を含む請求項26に記載の方法。
- 前記パラメータを生成するステップの前に前記部分回路網によって実行される前記関数を識別するステップをさらに含む請求項28に記載の方法。
- 前記パラメータが前記記憶構造体内に前記部分回路網を記憶するインデクスの集合であり、前記インデクスの集合が前記部分回路網によって実行される各関数のインデクスを含む請求項28に記載の方法。
- 前記記憶構造体がリレーショナル・データベースであり、前記インデクスの集合が前記リレーショナル・データベースへのインデクスである請求項30に記載の方法。
- 前記部分回路網が入力変数の集合を有し、前記パラメータを生成するステップが、
a)前記関数の1つをピボット関数として識別するステップと、
b)前記ピボット関数を用いて前記入力変数構成を指定するステップと、
c)前記指定された入力変数構成に基づいて、各関数のインデクスを指定するステップとを含む請求項30に記載の方法。 - 前記ピボット関数を用いて入力変数構成を指定するステップが、
a)前記ピボット関数の正準表現を識別するステップと、
b)前記指定された入力変数構成として前記ピボット関数の前記正準表現を生む入力変数構成を選択するステップとを含む請求項32に記載の方法。 - a)前記ピボット関数の真理値表表現を生成するステップをさらに含み、
b)正準表現を識別するステップが、前記ピボット関数の真理値表表現の正準表現を識別するステップを含む請求項34に記載の方法。 - 前記指定された入力変数構成を用いて前記部分回路網の各非ピボット関数の真理値表表現を指定するステップをさらに含む請求項35に記載の方法。
- 前記正準表現を圧縮して前記ピボット関数の圧縮表現を得るステップをさらに含む請求項34に記載の方法。
- 前記選択された入力変数構成に基づいて各非ピボット関数の圧縮表現を指定するステップをさらに含む請求項34に記載の方法。
- 前記部分回路網を指定するステップが、
a)ノードの集合と、前記ノードの集合の複数の出力とを有するグラフを定義するステップと、
b)前記ノードの集合内の各ノードの局所関数を指定するステップと、
c)前記局所関数から前記関数を識別するステップとを含む請求項26に記載の方法。 - 部分回路網を事前集計する方法であって、
a)特定のしきい値の複雑度まで複数の部分回路網を指定するステップであって、各部分回路網が少なくとも1つの出力関数を実行し、前記複数の部分回路網が2つ以上の出力関数を実行し、各部分回路網が各出力関数の結果を出力するステップと、
b)各部分回路網について、前記部分回路網によって実行される前記出力関数の集合に基づいてパラメータを生成するステップと、
c)前記部分回路網について前記生成されたパラメータに基づいて記憶構造体内に各部分回路網を記憶するステップとを含む方法。 - 部分回路網を事前集計する方法であって、
a)複数のグラフを定義するステップであって、各グラフがノードの集合を有するステップと、
b)各グラフの局所関数の異なる集合を指定するステップであって、各々の特定のグラフの各々の局所関数の集合が前記特定のグラフの各ノードの1つの局所関数を含み、各グラフと前記グラフについて指定された局所関数の集合の1つとの組合せが部分回路網を指定するステップと、
c)前記部分回路網を指定するために用いる前記局所関数の集合から各々の特定の指定された部分回路網の出力関数の集合を識別するステップと、
d)前記グラフと局所関数とを記憶するステップと、
e)各部分回路網の前記識別された出力関数の集合に基づいて各部分回路網のパラメータを生成するステップと、
f)前記記憶構造体内に前記生成されたパラメータを記憶するステップと、
g)各部分回路網の前記記憶されたパラメータを前記部分回路網の前記グラフと局所関数の集合に対応させるステップとを含む方法。 - 設計の回路記述を生成する方法であって、
a)前記設計から、複数の回路素子を含む部分回路網候補を選択するステップと、
b)前記選択された部分回路網候補によって実行される出力関数の集合に基づいてパラメータを生成するステップと、
c)前記パラメータを用いて複数の代替部分回路網を記憶する記憶構造体から代替部分回路網を取り出すステップと、
d)前記設計内で前記選択された部分回路網候補を前記代替部分回路網に置き換えるステップとを含む方法。 - 前記部分回路網によって実行される出力関数の集合を識別するステップをさらに含む請求項42に記載の方法。
- 前記出力関数の集合が1つの出力関数のみを含む請求項43に記載の方法。
- 前記出力関数の集合が複数の出力関数を含む請求項43に記載の方法。
- 前記部分回路網の各回路素子が1つの出力を有し、各回路素子の出力が前記選択された部分回路網候補によって実行される1つの出力関数の結果を提供する、請求項43に記載の方法。
- 前記部分回路網の各回路素子が1つの出力を有し、前記選択された部分回路網候補によって実行される各出力関数が前記部分回路網から論理出力される1つの回路素子出力でのみ提供される請求項43に記載の方法。
- 前記部分回路網の特定の回路素子が2つ以上の出力を有し、前記特定の回路素子の各出力が前記選択された部分回路網候補によって実行される1つの出力関数の結果を提供する請求項43に記載の方法。
- 前記選択された部分回路網候補の各回路素子の局所関数を受け取るステップと、
前記受け取った局所関数から各出力関数を識別するステップとをさらに含む請求項42に記載の方法。 - 各局所関数または出力関数が二分決定グラフ(「BDD」)で表され、前記部分回路網が少なくとも第1および第2の回路素子を有し、前記第1の回路素子が第1の局所関数を実行し、前記第2の回路素子が第2の局所関数を実行し、第1の出力関数のBDDが前記第1の局所関数のBDDから引き出され、第2の出力関数のBDDが少なくとも前記第1および第2の局所関数のBDDから引き出される請求項49に記載の方法。
- 前記設計を受け取るステップであって、前記設計が組合せ論理回路網であるステップと、
追加の部分回路網候補を選択するステップと、
前記選択された追加の部分回路網の少なくともいくつかを前記記憶構造体から取り出された部分回路網候補に置き換えるステップとをさらに含み、
前記部分回路網候補の置き換えが前記組合せ論理回路網の設計を最適化する請求項42に記載の方法。 - 前記設計の論理表現を受け取るステップと、
前記設計の前記論理表現を回路レベルの表現に変換するステップとをさらに含み、
前記部分回路網候補を選択するステップが、前記回路レベルの表現から前記部分回路網候補を選択するステップを含む請求項42に記載の方法。 - 前記パラメータが前記記憶構造体内に前記部分回路網を記憶するインデクスである請求項42に記載の方法。
- 前記インデクスが数字インデクスである、請求項53に記載の方法。
- 前記パラメータが前記記憶構造体内に前記部分回路網を記憶するインデクスの集合である請求項42に記載の方法。
- 前記インデクスの集合が前記出力関数の集合内に各関数のインデクスを含む請求項53に記載の方法。
- 前記インデクスが数字インデクスである請求項56に記載の方法
- a)前記部分回路網候補を前記代替部分回路網に置き換えるステップの前に、前記選択された部分回路網候補を前記代替部分回路網に置き換えるか否かを評価するステップをさらに含み、
前記置き換えステップが前記評価に基づく請求項42に記載の方法。 - 前記評価ステップが費用関数を計算するステップを含む請求項58に記載の方法。
- 追加の部分回路網候補を選択するステップと、
各部分回路網候補について、
各々の選択された部分回路網候補の少なくとも1つの代替部分回路網を識別するステップと、
各々の識別された置き換えを評価するステップと、
前記評価に基づいて、前記部分回路網候補を前記部分回路網候補について識別された前記代替部分回路網に置き換えるか否かを決定するステップとをさらに含む請求項58に記載の方法。 - 前記代替部分回路網を取り出すステップがいくつかの代替部分回路網を取り出すステップを含み、前記方法が、
各々の取り出された部分回路網を評価して実現可能な代替候補を識別するステップをさらに含み、
前記部分回路網候補と置き換える前記代替部分回路網が前記実現可能な代替候補の1つである請求項58に記載の方法。 - 設計の回路記述を生成するコンピュータ・プログラムを記憶するコンピュータ可読媒体であって、前記プログラムが、
a)前記設計から部分回路網候補を選択する第1の命令の集合と、
b)前記部分回路網によって実行される出力関数の集合を識別する第2の命令の集合と、
c)前記識別された出力関数の集合に基づいて、代替部分回路網を記憶する記憶構造体から代替部分回路網を取り出す第3の命令の集合と、
d)前記設計内で前記選択された部分回路網候補を前記代替部分回路網に置き換える第4の命令の集合とを備えるコンピュータ可読媒体。 - 設計の回路記述を生成するための方法であって、
a)前記設計から、出力関数の集合を実行する部分回路網候補を選択するステップであって、前記部分回路網候補が回路素子の集合を含むステップと、
b)前記出力関数の集合に基づいてパラメータを生成するステップと、
c)前記パラメータを用いて複数の代替部分回路網を記憶する記憶構造体から代替部分回路網を取り出すステップと、
d)前記設計内で前記選択された部分回路網候補を前記代替部分回路網に置き換えるステップとを含む方法。 - 前記出力関数の集合が1つの出力関数のみを含む請求項63に記載の方法。
- 前記出力関数の集合が複数の出力関数を含む請求項63に記載の方法。
- 前記部分回路網によって実行される出力関数を識別するステップをさらに含む請求項65に記載の方法。
- 前記回路素子の集合が1つの回路素子のみを含む請求項65に記載の方法。
- 前記回路素子の集合が少なくとも2つの回路素子を含む請求項66に記載の方法。
- 前記部分回路網の各回路素子が1つの出力を有し、各回路素子の出力が前記選択された部分回路網候補によって実行される1つの出力関数の結果を提供する請求項65に記載の方法。
- 前記部分回路網の各回路素子が1つの出力を有し、前記選択された部分回路網候補によって実行される各出力関数が前記部分回路網から論理出力される1つの回路素子出力でのみ提供される請求項65に記載の方法。
- 前記選択された部分回路網候補の各回路素子の局所関数を受け取るステップと、
前記受け取った局所関数から各出力関数を識別するステップとをさらに含む請求項65に記載の方法。 - 各局所関数または出力関数が二分決定グラフ(「BDD」)で表され、前記部分回路網が少なくとも第1および第2の回路素子を有し、前記第1の回路素子が第1の局所関数を実行し、前記第2の回路素子が第2の局所関数を実行し、第1の出力関数のBDDが前記第1の局所関数のBDDから引き出され、第2の出力関数のBDDが少なくとも前記第1および第2の局所関数のBDDから引き出される請求項71に記載の方法。
- 前記設計を受け取るステップであって、前記設計が組合せ論理回路網であるステップと、
追加の部分回路網候補を選択するステップと、
前記選択された追加の部分回路網のいくつかを前記記憶構造体から取り出された部分回路網候補に置き換えるステップとをさらに含み、
前記部分回路網候補の置き換えが前記組合せ論理回路網の設計を最適化する請求項65に記載の方法。 - 前記設計の論理表現を受け取るステップと、
前記設計の前記論理表現を回路レベルの表現に変換するステップとをさらに含み、
前記部分回路網候補を選択するステップが、前記回路レベルの表現から前記部分回路網候補を選択するステップを含む請求項65に記載の方法。 - 前記パラメータが前記記憶構造体内に前記部分回路網を記憶するインデクスの集合であり、前記インデクスの集合が前記部分回路網によって実行される各出力関数のインデクスを含む請求項65に記載の方法。
- 前記パラメータを使用するステップが、
a)前記インデクスの集合内の各インデクスに関連する前記記憶構造体内に記憶された各代替部分回路網を識別するステップと、
b)各々の識別された代替部分回路網を取り出すステップとを含む請求項75に記載の方法。 - 前記記憶構造体がリレーショナル・データベースであり、前記インデクスの集合が前記リレーショナル・データベースへのインデクスである請求項76に記載の方法。
- 前記代替部分回路網が入力変数の集合を有し、前記パラメータを生成するステップが、
a)前記出力関数の1つをピボット関数として識別するステップと、
b)前記ピボット関数を用いて前記入力変数構成を指定するステップと、
c)前記指定された入力変数構成に基づいて、各関数のインデクスを指定するステップとを含む請求項75に記載の方法。 - 前記ピボット関数を用いて入力変数構成を指定するステップが、
a)前記ピボット関数の正準表現を識別するステップと、
b)前記指定された入力変数構成として前記ピボット関数の前記正準表現を生む入力変数構成を選択するステップとを含む請求項78に記載の方法。 - a)前記ピボット関数の真理値表表現を生成するステップをさらに含み、
b)正準表現を識別するステップが前記ピボット関数の真理値表表現の正準表現を識別するステップを含む請求項79に記載の方法。 - 前記正準表現を圧縮して前記ピボット関数の圧縮表現を得るステップをさらに含む請求項79に記載の方法。
- 前記選択された入力変数構成に基づいて各非ピボット関数の圧縮表現を指定するステップをさらに含む請求項79に記載の方法。
- 前記ピボット関数のインデクスが1次インデクスであり、各非ピボット関数のインデクスが2次インデクスであり、前記パラメータを使用するステップが、
a)前記1次インデクスと前記2次インデクスの1つによって形成される各々の特定のインデクス・ペアについて、前記特定のインデクス・ペアに関連する前記記憶構造体内に記憶された各代替部分回路網を識別するステップと、
b)前記識別された代替部分回路網のいずれかが前記すべてのインデクス・ペアに関連するか否かを決定するステップと、
c)前記すべてのインデクス・ペアに関連する任意の識別された代替部分回路網を取り出すステップとを含む請求項78に記載の方法。 - a)前記部分回路網候補を前記代替部分回路網に置き換えるステップの前に、前記選択された部分回路網候補を前記代替部分回路網に置き換えるか否かを評価するステップをさらに含み、
前記置き換えステップが前記評価に基づく請求項65に記載の方法。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/062,044 US6857117B2 (en) | 2002-01-31 | 2002-01-31 | Method and apparatus for producing a circuit description of a design |
US10/062,017 US7398503B2 (en) | 2002-01-31 | 2002-01-31 | Method and apparatus for pre-tabulating sub-networks |
US10/062,014 US7100143B2 (en) | 2002-01-31 | 2002-01-31 | Method and apparatus for pre-tabulating sub-networks |
US10/061,459 US6954910B2 (en) | 2002-01-31 | 2002-01-31 | Method and apparatus for producing a circuit description of a design |
PCT/US2003/002984 WO2003077630A2 (en) | 2002-01-31 | 2003-01-31 | Method and apparatus for synthesis |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005520243A true JP2005520243A (ja) | 2005-07-07 |
Family
ID=28046692
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003575692A Pending JP2005520243A (ja) | 2002-01-31 | 2003-01-31 | 合成方法および装置 |
Country Status (5)
Country | Link |
---|---|
US (6) | US7398503B2 (ja) |
EP (1) | EP1470506A4 (ja) |
JP (1) | JP2005520243A (ja) |
AU (1) | AU2003216145A1 (ja) |
WO (1) | WO2003077630A2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020184130A1 (ja) * | 2019-03-13 | 2020-09-17 | オムロン株式会社 | グラフ表示装置、グラフ表示方法、及びグラフ表示プログラム |
Families Citing this family (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030041268A1 (en) * | 2000-10-18 | 2003-02-27 | Noriaki Hashimoto | Method and system for preventing unauthorized access to the internet |
US7398503B2 (en) * | 2002-01-31 | 2008-07-08 | Cadence Design Systems, Inc | Method and apparatus for pre-tabulating sub-networks |
US6684615B1 (en) * | 2002-07-19 | 2004-02-03 | Lastec, Inc. | Hinge system for articulating mower decks |
US6877150B1 (en) * | 2002-12-04 | 2005-04-05 | Xilinx, Inc. | Method of transforming software language constructs to functional hardware equivalents |
US7188331B2 (en) * | 2003-06-30 | 2007-03-06 | Hewlett-Packard Development Company, L.P. | Firmware development within a framework from different design centers depositing component(s) with related contextual and genealogy information in an accessible repository |
US7448030B2 (en) * | 2004-03-18 | 2008-11-04 | Intel Corporation | Optimized ordering of firmware modules in pre-boot environment |
US7509618B1 (en) * | 2004-05-12 | 2009-03-24 | Altera Corporation | Method and apparatus for facilitating an adaptive electronic design automation tool |
US20060026538A1 (en) * | 2004-07-27 | 2006-02-02 | Shah Gauray R | Relational database storage and retrieval of circuit element classifications |
US7373289B2 (en) * | 2004-11-19 | 2008-05-13 | Cadence Design Systems, Inc | Electrical isomorphism |
US8004316B2 (en) * | 2005-02-16 | 2011-08-23 | Technion Research & Development Foundation Ltd. | Logic circuit and method of logic circuit design |
US7818793B2 (en) * | 2005-03-23 | 2010-10-19 | The Board Of Regents, University Of Texas System | System and method of firewall design utilizing decision diagrams |
US7454738B2 (en) * | 2005-06-10 | 2008-11-18 | Purdue Research Foundation | Synthesis approach for active leakage power reduction using dynamic supply gating |
US7346862B2 (en) * | 2005-08-19 | 2008-03-18 | Synopsys, Inc. | Method and apparatus for optimizing a logic network in a digital circuit |
US8726232B1 (en) * | 2005-12-02 | 2014-05-13 | The Math Works, Inc. | Identification of patterns in modeling environments |
US7360181B2 (en) * | 2006-05-10 | 2008-04-15 | International Business Machines Corporation | Enhanced structural redundancy detection |
US8429108B2 (en) * | 2006-05-11 | 2013-04-23 | Geistiges Eigentum, Inc. | Fast computation of compact poset isomorphism certificates using position weights |
US20070283306A1 (en) * | 2006-05-30 | 2007-12-06 | Matthias Koefferlein | Layout cells, layout cell arrangement, method of generating a layout cell, method of generating a layout cell arrangement, computer program products |
US8516418B2 (en) * | 2006-06-30 | 2013-08-20 | Oracle America, Inc. | Application of a relational database in integrated circuit design |
US7600211B1 (en) * | 2006-09-25 | 2009-10-06 | Cadence Design Systems, Inc. | Toggle equivalence preserving logic synthesis |
US8295176B2 (en) * | 2006-10-31 | 2012-10-23 | Verizon Patent And Licensing Inc. | Priority call routing |
US7971175B2 (en) * | 2007-06-27 | 2011-06-28 | Cadence Design Systems, Inc. | Method and system for implementing cached parameterized cells |
DE102007056522A1 (de) | 2007-11-22 | 2009-06-04 | Geistiges Eigentum, Inc., St. Paul | Schnelle Berechnung von kompakten Poset-Isomorphie-Zertifikaten |
US7949987B1 (en) | 2008-02-08 | 2011-05-24 | Cadence Design Systems, Inc. | Method and system for implementing abstract layout structures with parameterized cells |
US8364656B2 (en) * | 2008-10-31 | 2013-01-29 | Cadence Design Systems, Inc. | Method and system for implementing multiuser cached parameterized cells |
JP5433086B2 (ja) * | 2010-05-25 | 2014-03-05 | ノースイースタン ユニバーシティ テクノロジー トランスファー センター | 集積回路配置用の最適化ベース焼きなまし法 |
US8972930B2 (en) * | 2010-06-04 | 2015-03-03 | Microsoft Corporation | Generating text manipulation programs using input-output examples |
US9613115B2 (en) | 2010-07-12 | 2017-04-04 | Microsoft Technology Licensing, Llc | Generating programs based on input-output examples using converter modules |
US9348927B2 (en) * | 2012-05-07 | 2016-05-24 | Smart Security Systems Llc | Systems and methods for detecting, identifying and categorizing intermediate nodes |
US10778659B2 (en) | 2012-05-24 | 2020-09-15 | Smart Security Systems Llc | System and method for protecting communications |
US9325676B2 (en) | 2012-05-24 | 2016-04-26 | Ip Ghoster, Inc. | Systems and methods for protecting communications between nodes |
US9552335B2 (en) | 2012-06-04 | 2017-01-24 | Microsoft Technology Licensing, Llc | Expedited techniques for generating string manipulation programs |
US9262501B2 (en) | 2012-12-13 | 2016-02-16 | Vinayak Borkar | Method, apparatus, and computer-readable medium for optimized data subsetting |
WO2014108737A1 (en) * | 2013-01-08 | 2014-07-17 | Freescale Semiconductor, Inc. | Method and apparatus for performing logic synthesis |
US9087168B2 (en) * | 2013-06-19 | 2015-07-21 | International Business Machines Corporation | Optimizing operating range of an electronic circuit |
EP3100405A4 (en) | 2014-01-29 | 2017-08-30 | Smart Security Systems LLC | Systems and methods for protecting communications |
US11256710B2 (en) | 2016-10-20 | 2022-02-22 | Microsoft Technology Licensing, Llc | String transformation sub-program suggestion |
US11620304B2 (en) | 2016-10-20 | 2023-04-04 | Microsoft Technology Licensing, Llc | Example management for string transformation |
US10846298B2 (en) | 2016-10-28 | 2020-11-24 | Microsoft Technology Licensing, Llc | Record profiling for dataset sampling |
US20180144279A1 (en) * | 2016-11-22 | 2018-05-24 | Sap Se | Network separator for transportation resource planning |
US10721260B1 (en) * | 2017-03-22 | 2020-07-21 | Amazon Technologies, Inc. | Distributed execution of a network vulnerability scan |
US10671353B2 (en) | 2018-01-31 | 2020-06-02 | Microsoft Technology Licensing, Llc | Programming-by-example using disjunctive programs |
US11194930B2 (en) | 2018-04-27 | 2021-12-07 | Datatrendz, Llc | Unobtrusive systems and methods for collecting, processing and securing information transmitted over a network |
US11907634B2 (en) | 2021-09-01 | 2024-02-20 | International Business Machines Corporation | Automating addition of power supply rails, fences, and level translators to a modular circuit design |
US12050852B2 (en) | 2021-09-07 | 2024-07-30 | International Business Machines Corporation | Signal pre-routing in an integrated circuit design |
US11663381B2 (en) | 2021-09-07 | 2023-05-30 | International Business Machines Corporation | Clock mapping in an integrated circuit design |
Family Cites Families (110)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US13113A (en) * | 1855-06-19 | Joint fob stovepipes | ||
JPH065541B2 (ja) * | 1983-12-30 | 1994-01-19 | 株式会社日立製作所 | 論理回路の自動設計方法 |
US4703435A (en) | 1984-07-16 | 1987-10-27 | International Business Machines Corporation | Logic Synthesizer |
US5610828A (en) * | 1986-04-14 | 1997-03-11 | National Instruments Corporation | Graphical system for modelling a process and associated method |
US5153936A (en) * | 1988-06-27 | 1992-10-06 | International Business Machines Corporation | Dual density digital image system |
US5003487A (en) | 1988-06-28 | 1991-03-26 | International Business Machines Corporation | Method and apparatus for performing timing correction transformations on a technology-independent logic model during logic synthesis |
US5598344A (en) | 1990-04-06 | 1997-01-28 | Lsi Logic Corporation | Method and system for creating, validating, and scaling structural description of electronic device |
US5201046A (en) * | 1990-06-22 | 1993-04-06 | Xidak, Inc. | Relational database management system and method for storing, retrieving and modifying directed graph data structures |
JPH04127275A (ja) | 1990-09-19 | 1992-04-28 | Fujitsu Ltd | Lsi論理回路自動合成における組合せ回路のテクノロジーマッピング方式 |
US5574441A (en) * | 1990-12-19 | 1996-11-12 | Cubic Automatic Revenue Collection Group | Mass transit inductive data communication system |
US5488727A (en) | 1991-09-30 | 1996-01-30 | International Business Machines Corporation | Methods to support multimethod function overloading with compile-time type checking |
JP2760682B2 (ja) * | 1991-09-30 | 1998-06-04 | 株式会社東芝 | ハードウェアの設計支援システム |
US5686791A (en) * | 1992-03-16 | 1997-11-11 | Microelectronics And Computer Technology Corp. | Amorphic diamond film flat field emission cathode |
US5521835A (en) * | 1992-03-27 | 1996-05-28 | Xilinx, Inc. | Method for programming an FPLD using a library-based technology mapping algorithm |
US5787010A (en) | 1992-04-02 | 1998-07-28 | Schaefer; Thomas J. | Enhanced dynamic programming method for technology mapping of combinational logic circuits |
US5365125A (en) * | 1992-07-23 | 1994-11-15 | Xilinx, Inc. | Logic cell for field programmable gate array having optional internal feedback and optional cascade |
JP3175322B2 (ja) * | 1992-08-20 | 2001-06-11 | 株式会社日立製作所 | 論理自動生成方法 |
EP0584828B1 (en) | 1992-08-26 | 2001-11-07 | Matsushita Electric Industrial Co., Ltd. | LSI automated design system and method |
US5493504A (en) * | 1992-10-28 | 1996-02-20 | Nippon Telegraph And Telephone Corporation | System and method for processing logic function and fault diagnosis using binary tree representation |
US6272529B1 (en) * | 1993-01-26 | 2001-08-07 | Logic Controls, Inc. | Point-of-sale system and distributed computer network for same |
US5357153A (en) * | 1993-01-28 | 1994-10-18 | Xilinx, Inc. | Macrocell with product-term cascade and improved flip flop utilization |
US5519630A (en) | 1993-03-22 | 1996-05-21 | Matsushita Electric Industrial Co., Ltd. | LSI automated design system |
US5956257A (en) * | 1993-03-31 | 1999-09-21 | Vlsi Technology, Inc. | Automated optimization of hierarchical netlists |
US5349250A (en) * | 1993-09-02 | 1994-09-20 | Xilinx, Inc. | Logic structure and circuit for fast carry |
US5440720A (en) * | 1993-09-20 | 1995-08-08 | Cadence Design Systems, Inc. | Architecture and method for data reduction in a system for analyzing geometric databases |
US5518630A (en) * | 1994-03-22 | 1996-05-21 | Betz Laboratories, Inc. | Method for controlling scale formation and deposition |
JP2972540B2 (ja) | 1994-03-24 | 1999-11-08 | 松下電器産業株式会社 | Lsi自動設計システム及びlsi自動設計方法 |
US5526276A (en) * | 1994-04-21 | 1996-06-11 | Quicklogic Corporation | Select set-based technology mapping method and apparatus |
US5696694A (en) | 1994-06-03 | 1997-12-09 | Synopsys, Inc. | Method and apparatus for estimating internal power consumption of an electronic circuit represented as netlist |
US5537330A (en) | 1994-06-10 | 1996-07-16 | International Business Machines Corporation | Method for mapping in logic synthesis by logic classification |
US5752000A (en) | 1994-08-02 | 1998-05-12 | Cadence Design Systems, Inc. | System and method for simulating discrete functions using ordered decision arrays |
US5649165A (en) * | 1995-01-31 | 1997-07-15 | Fujitsu Limited | Topology-based computer-aided design system for digital circuits and method thereof |
US5537341A (en) * | 1995-02-10 | 1996-07-16 | Jonathan Rose | Complementary architecture for field-programmable gate arrays |
JP3033675B2 (ja) * | 1995-05-15 | 2000-04-17 | 日本電気株式会社 | 順序回路最適化装置 |
JPH08335475A (ja) * | 1995-06-08 | 1996-12-17 | Yazaki Corp | 防水ゴム栓 |
US5784313A (en) * | 1995-08-18 | 1998-07-21 | Xilinx, Inc. | Programmable logic device including configuration data or user data memory slices |
US5867396A (en) * | 1995-08-31 | 1999-02-02 | Xilinx, Inc. | Method and apparatus for making incremental changes to an integrated circuit design |
US5910898A (en) * | 1995-12-14 | 1999-06-08 | Viewlogic Systems, Inc. | Circuit design methods and tools |
DE59510586D1 (de) | 1995-12-21 | 2003-04-17 | Siemens Ag | Verfahren zum Bilden von Leitweginformation in einem ATM-Kommunikationsnetz |
US5903466A (en) | 1995-12-29 | 1999-05-11 | Synopsys, Inc. | Constraint driven insertion of scan logic for implementing design for test within an integrated circuit design |
JPH09305633A (ja) * | 1996-05-21 | 1997-11-28 | Mitsubishi Electric Corp | 論理回路最適化方法 |
US6182247B1 (en) | 1996-10-28 | 2001-01-30 | Altera Corporation | Embedded logic analyzer for a programmable logic device |
JPH10294097A (ja) * | 1997-02-24 | 1998-11-04 | Mitsubishi Electric Corp | 薄型電池 |
US5889411A (en) * | 1997-02-26 | 1999-03-30 | Xilinx, Inc. | FPGA having logic element carry chains capable of generating wide XOR functions |
US6672776B1 (en) | 1997-03-14 | 2004-01-06 | Cadence Design Systems | Delay estimation for restructuring |
US6023566A (en) * | 1997-04-14 | 2000-02-08 | Cadence Design Systems | Cluster matching for circuit implementation |
US5991524A (en) | 1997-04-14 | 1999-11-23 | Cadence Design Systems | Cluster determination for circuit implementation |
US6086626A (en) * | 1997-05-16 | 2000-07-11 | Fijutsu Limited | Method for verification of combinational circuits using a filtering oriented approach |
US6038386A (en) * | 1997-08-21 | 2000-03-14 | Xilinx, Inc. | Method for controlling power and slew in a programmable logic device |
US6035107A (en) | 1997-08-28 | 2000-03-07 | International Bunsiness Machines Corporation | Method for performing functional comparison of combinational circuits |
JPH1173285A (ja) * | 1997-08-29 | 1999-03-16 | Casio Electron Mfg Co Ltd | ビデオデータ転送装置 |
US6009251A (en) * | 1997-09-30 | 1999-12-28 | Synopsys, Inc. | Method and system for layout verification of an integrated circuit design with reusable subdesigns |
US6080204A (en) | 1997-10-27 | 2000-06-27 | Altera Corporation | Method and apparatus for contemporaneously compiling an electronic circuit design by contemporaneously bipartitioning the electronic circuit design using parallel processing |
JPH11185224A (ja) * | 1997-12-24 | 1999-07-09 | Tdk Corp | 薄膜磁気ヘッドの製造方法 |
US6389586B1 (en) | 1998-01-05 | 2002-05-14 | Synplicity, Inc. | Method and apparatus for invalid state detection |
US6421818B1 (en) | 1998-02-20 | 2002-07-16 | Lsi Logic Corporation | Efficient top-down characterization method |
US6140839A (en) * | 1998-05-13 | 2000-10-31 | Kaviani; Alireza S. | Computational field programmable architecture |
JP3949286B2 (ja) | 1998-08-06 | 2007-07-25 | 富士通株式会社 | テクノロジマッピング方法及び記憶媒体 |
US6397170B1 (en) | 1998-08-18 | 2002-05-28 | International Business Machines Corporation | Simulation based power optimization |
US6356863B1 (en) * | 1998-09-08 | 2002-03-12 | Metaphorics Llc | Virtual network file server |
US6594808B1 (en) * | 1998-11-06 | 2003-07-15 | Intel Corporation | Structural regularity extraction and floorplanning in datapath circuits using vectors |
US6148433A (en) * | 1998-11-06 | 2000-11-14 | Intel Corporation | Systematic approach for regularity extraction |
US6519609B1 (en) | 1998-12-04 | 2003-02-11 | Cadence Design Systems, Inc. | Method and system for matching boolean signatures |
US6321184B1 (en) * | 1998-12-10 | 2001-11-20 | International Business Machines Corporation | Reduction of arbitrary L1-L2 circuits for enhanced verification |
US6336208B1 (en) | 1999-02-04 | 2002-01-01 | Xilinx, Inc. | Delay optimized mapping for programmable gate arrays with multiple sized lookup tables |
US6334205B1 (en) * | 1999-02-22 | 2001-12-25 | International Business Machines Corporation | Wavefront technology mapping |
US6603332B2 (en) | 1999-02-25 | 2003-08-05 | Xilinx, Inc. | Configurable logic block for PLD with logic gate for combining output with another configurable logic block |
US6150838A (en) * | 1999-02-25 | 2000-11-21 | Xilinx, Inc. | FPGA configurable logic block with multi-purpose logic/memory circuit |
US6301696B1 (en) * | 1999-03-30 | 2001-10-09 | Actel Corporation | Final design method of a programmable logic device that is based on an initial design that consists of a partial underlying physical template |
US6311317B1 (en) | 1999-03-31 | 2001-10-30 | Synopsys, Inc. | Pre-synthesis test point insertion |
US6131078A (en) * | 1999-05-06 | 2000-10-10 | Plaisted; David A. | Method for design verification of hardware and non-hardware systems |
US6298472B1 (en) * | 1999-05-07 | 2001-10-02 | Chameleon Systems, Inc. | Behavioral silicon construct architecture and mapping |
US6519754B1 (en) | 1999-05-17 | 2003-02-11 | Synplicity, Inc. | Methods and apparatuses for designing integrated circuits |
US6470486B1 (en) | 1999-05-26 | 2002-10-22 | Get2Chip | Method for delay-optimizing technology mapping of digital logic |
US6782511B1 (en) * | 1999-05-26 | 2004-08-24 | Cadence Design Systems, Inc. | Behavioral-synthesis electronic design automation tool business-to-business application service provider |
US6378112B1 (en) * | 1999-06-14 | 2002-04-23 | Motorola, Inc. | Verification of design blocks and method of equivalence checking of multiple design views |
US6470478B1 (en) * | 1999-06-29 | 2002-10-22 | International Business Machines Corporation | Method and system for counting events within a simulation model |
US6662323B1 (en) * | 1999-07-07 | 2003-12-09 | Nec Corporation | Fast error diagnosis for combinational verification |
US6419754B1 (en) * | 1999-08-18 | 2002-07-16 | Chartered Semiconductor Manufacturting Ltd. | Endpoint detection and novel chemicals in copper stripping |
US6453447B1 (en) | 1999-08-19 | 2002-09-17 | Aeroflex Utmc Microelectronic Systems Inc. | Method for fabricating integrated circuits |
US6496972B1 (en) * | 1999-09-13 | 2002-12-17 | Synopsys, Inc. | Method and system for circuit design top level and block optimization |
DE19954377C2 (de) | 1999-11-12 | 2003-04-17 | Airbus Gmbh | Datenübertragungssystem für Luftfahrzeuge |
US6543036B1 (en) | 1999-11-30 | 2003-04-01 | Synopsys, Inc. | Non-linear, gain-based modeling of circuit delay for an electronic design automation system |
US6539536B1 (en) | 2000-02-02 | 2003-03-25 | Synopsys, Inc. | Electronic design automation system and methods utilizing groups of multiple cells having loop-back connections for modeling port electrical characteristics |
US6904397B1 (en) * | 2000-02-22 | 2005-06-07 | Xilinx, Inc. | System and method for assisting in the development and integration of reusable circuit designs |
US6473884B1 (en) | 2000-03-14 | 2002-10-29 | International Business Machines Corporation | Method and system for equivalence-checking combinatorial circuits using interative binary-decision-diagram sweeping and structural satisfiability analysis |
US6614257B2 (en) * | 2000-05-12 | 2003-09-02 | Bae Systems Information And Electronics Systems Integration, Inc. | Logic architecture for single event upset immunity |
US6539037B1 (en) * | 2000-08-01 | 2003-03-25 | Komatsu Ltd. | Laser apparatus |
US20020178432A1 (en) | 2000-08-17 | 2002-11-28 | Hyungwon Kim | Method and system for synthesizing a circuit representation into a new circuit representation having greater unateness |
US6587990B1 (en) * | 2000-10-01 | 2003-07-01 | Lsi Logic Corporation | Method and apparatus for formula area and delay minimization |
US6546539B1 (en) | 2000-12-14 | 2003-04-08 | Lsi Logic Corporation | Netlist resynthesis program using structure co-factoring |
US20020157063A1 (en) | 2000-12-28 | 2002-10-24 | Besson Thierry D. | Implicit mapping of technology independent network to library cells |
US6687883B2 (en) * | 2000-12-28 | 2004-02-03 | International Business Machines Corporation | System and method for inserting leakage reduction control in logic circuits |
US6546541B1 (en) | 2001-02-20 | 2003-04-08 | Lsi Logic Corporation | Placement-based integrated circuit re-synthesis tool using estimated maximum interconnect capacitances |
US6574779B2 (en) * | 2001-04-12 | 2003-06-03 | International Business Machines Corporation | Hierarchical layout method for integrated circuits |
US20020199156A1 (en) * | 2001-05-23 | 2002-12-26 | Fuel Tech, Inc. | Hardware-adaptable data visualization tool for use in complex data analysis and engineering design |
JP4078435B2 (ja) * | 2001-06-06 | 2008-04-23 | 株式会社ルネサステクノロジ | 論理集積回路及び論理集積回路設計方法及び論理集積回路のハードウェア動作記述を生成するハードウェア記述生成方法 |
US6523156B2 (en) | 2001-06-08 | 2003-02-18 | Library Technologies, Inc. | Apparatus and methods for wire load independent logic synthesis and timing closure with constant replacement delay cell libraries |
US6618835B1 (en) | 2001-09-07 | 2003-09-09 | Synplicity, Inc. | Transforming a circuit having loop structure and tri-state element using replication |
US7082582B1 (en) * | 2001-12-06 | 2006-07-25 | Synplicity, Inc. | Reducing clock skew in clock gating circuits |
US6721926B2 (en) | 2002-01-25 | 2004-04-13 | Intel Corporation | Method and apparatus for improving digital circuit design |
US6990650B2 (en) * | 2002-01-31 | 2006-01-24 | Cadence Design Systems, Inc. | Method and apparatus for performing technology mapping |
US7024639B2 (en) * | 2002-01-31 | 2006-04-04 | Cadence Design Systems, Inc. | Method and apparatus for specifying encoded sub-networks |
US20030217026A1 (en) * | 2002-01-31 | 2003-11-20 | Steven Teig | Structure for storing a plurality os sub-networks |
US6854098B2 (en) * | 2002-01-31 | 2005-02-08 | Cadence Design Systems, Inc. | Method and apparatus for performing technology mapping |
US7383524B2 (en) * | 2002-01-31 | 2008-06-03 | Cadence Design Systems, Inc | Structure for storing a plurality of sub-networks |
US7398503B2 (en) * | 2002-01-31 | 2008-07-08 | Cadence Design Systems, Inc | Method and apparatus for pre-tabulating sub-networks |
US7076760B2 (en) * | 2002-01-31 | 2006-07-11 | Cadence Design Systems, Inc. | Method and apparatus for specifying encoded sub-networks |
US6854097B2 (en) * | 2002-01-31 | 2005-02-08 | Cadence Design Systems, Inc. | Method and apparatus for performing technology mapping |
US6848086B2 (en) * | 2002-01-31 | 2005-01-25 | Cadence Design Systems, Inc. | Method and apparatus for performing technology mapping |
-
2002
- 2002-01-31 US US10/062,017 patent/US7398503B2/en not_active Expired - Fee Related
- 2002-01-31 US US10/062,014 patent/US7100143B2/en not_active Expired - Fee Related
- 2002-01-31 US US10/061,459 patent/US6954910B2/en not_active Expired - Fee Related
- 2002-01-31 US US10/062,044 patent/US6857117B2/en not_active Expired - Lifetime
-
2003
- 2003-01-31 JP JP2003575692A patent/JP2005520243A/ja active Pending
- 2003-01-31 US US10/503,352 patent/US7543251B2/en not_active Expired - Fee Related
- 2003-01-31 EP EP03744591A patent/EP1470506A4/en not_active Withdrawn
- 2003-01-31 WO PCT/US2003/002984 patent/WO2003077630A2/en active Application Filing
- 2003-01-31 AU AU2003216145A patent/AU2003216145A1/en not_active Abandoned
-
2008
- 2008-10-25 US US12/258,403 patent/US8151227B2/en not_active Expired - Fee Related
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020184130A1 (ja) * | 2019-03-13 | 2020-09-17 | オムロン株式会社 | グラフ表示装置、グラフ表示方法、及びグラフ表示プログラム |
US11803170B2 (en) | 2019-03-13 | 2023-10-31 | Omron Corporation | Graph display device, graph display method, and recording medium |
Also Published As
Publication number | Publication date |
---|---|
US20030154280A1 (en) | 2003-08-14 |
US20030217350A1 (en) | 2003-11-20 |
US7398503B2 (en) | 2008-07-08 |
US20090106710A1 (en) | 2009-04-23 |
US7543251B2 (en) | 2009-06-02 |
WO2003077630A3 (en) | 2004-03-25 |
US20040163070A1 (en) | 2004-08-19 |
AU2003216145A8 (en) | 2003-09-29 |
US20050165595A1 (en) | 2005-07-28 |
EP1470506A2 (en) | 2004-10-27 |
WO2003077630A2 (en) | 2003-09-25 |
US20030154448A1 (en) | 2003-08-14 |
EP1470506A4 (en) | 2008-04-02 |
US6954910B2 (en) | 2005-10-11 |
AU2003216145A1 (en) | 2003-09-29 |
US7100143B2 (en) | 2006-08-29 |
US8151227B2 (en) | 2012-04-03 |
US6857117B2 (en) | 2005-02-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2005520243A (ja) | 合成方法および装置 | |
US7076760B2 (en) | Method and apparatus for specifying encoded sub-networks | |
Clarke et al. | Bounded model checking using satisfiability solving | |
JP4000567B2 (ja) | 効率的な有界モデル検査方法 | |
US7596770B1 (en) | Temporal decomposition for design and verification | |
US20030009731A1 (en) | Digital circuit layout techniques | |
Testa et al. | Logic synthesis for established and emerging computing | |
US6360352B2 (en) | Digital circuit layout techniques | |
Mishchenko et al. | A new enhanced constructive decomposition and mapping algorithm | |
US6990650B2 (en) | Method and apparatus for performing technology mapping | |
Riener et al. | Boolean rewriting strikes back: Reconvergence-driven windowing meets resynthesis | |
Boroumand et al. | Learning boolean circuits from examples for approximate logic synthesis | |
US20030217026A1 (en) | Structure for storing a plurality os sub-networks | |
US6854097B2 (en) | Method and apparatus for performing technology mapping | |
US6848086B2 (en) | Method and apparatus for performing technology mapping | |
US7383524B2 (en) | Structure for storing a plurality of sub-networks | |
US7024639B2 (en) | Method and apparatus for specifying encoded sub-networks | |
US6854098B2 (en) | Method and apparatus for performing technology mapping | |
Zhu et al. | A Database Dependent Framework for K-Input Maximum Fanout-Free Window Rewriting | |
Cong et al. | A Theory on Partially-Dependent Functional Decomposition with Application in LUT-based FPGA | |
Barrachina Hernandez | AIG transformations to improve LUT mapping for FPGAs | |
Neutzling | Thereshold logic technology mapping for emerging nanotechnologies | |
Komaragiri | Application of decision diagrams for information storage and retrieval | |
Hong | BDD minimization using don't cares for formal verification and logic synthesis | |
Lucas | Technology Mapping for Circuit Optimization Using Content-Addressable Memory |