(57)【要約】本発明のいくつかの実施形態は、部分回路網を事前集計する方法を提供する。この方法は、（１）ある関数を実行する部分回路網を生成し、（２）この関数に基づいてパラメータを生成し、（３）生成されたパラメータに基づいて部分回路網を記憶構造体内に記憶する。いくつかの実施形態においては、生成された部分回路網はいくつかの回路素子を有する。また、いくつかの実施形態においては、生成された部分回路網は２つまたはそれ以上の関数の集合を実行する。いくつかの実施形態においては、各々の生成された部分回路網を符号化形式で記憶する。いくつかの実施形態は、設計の回路記述を作成する方法を提供する。この方法は、（１）設計から部分回路網候補を選択し、（２）部分回路網によって実行される出力関数を識別し、（３）識別された出力関数に基づいて、代替部分回路網を記憶する記憶構造体から代替部分回路網を識別し、（４）場合によって、選択した部分回路網候補を識別された代替部分回路網に置き換える。いくつかの実施形態においては、この方法を実行して設計を特定の技術ライブラリにマッピングする。いくつかの実施形態では、部分回路網の出力関数から取り出されたパラメータに基づいて複数の部分回路網を記憶するデータ記憶構造体が提供される。
2005520243.tif 000002
【特許請求の範囲】
【請求項１】
部分回路網を事前集計する方法であって、
ａ）複数の回路素子を有する部分回路網を生成するステップであって、前記部分回路網がある関数を実行するステップと、
ｂ）前記関数に基づいてパラメータを生成するステップと、
ｃ）前記生成されたパラメータに基づいて記憶構造体内に前記部分回路網を記憶するステップとを含む方法。
【請求項２】
前記パラメータを生成するステップの前に前記部分回路網によって実行される前記関数を識別するステップをさらに含む請求項１に記載の方法。
【請求項３】
前記パラメータが前記記憶構造体内に前記部分回路網を記憶するためのインデクスである請求項１に記載の方法。
【請求項４】
前記インデクスが数字インデクスである請求項３に記載の方法。
【請求項５】
前記パラメータが前記記憶構造体内に前記部分回路網を記憶するインデクスの集合である請求項１に記載の方法。
【請求項６】
前記部分回路網が前記関数の集合を実行し、前記パラメータを生成するステップが、前記関数の集合に基づいて前記パラメータを生成するステップを含む請求項１に記載の方法。
【請求項７】
前記パラメータが前記関数の集合内への各関数のインデクスを含むインデクスの集合である請求項６に記載の方法。
【請求項８】
前記インデクスが数字インデクスである請求項７に記載の方法。
【請求項９】
前記部分回路網を指定するステップが、
ａ）回路素子ごとに１つのノードを有するグラフを定義するステップと、
ｂ）各ノードの局所関数を指定するステップと、
ｃ）前記局所関数から前記関数を識別するステップと
を含む請求項１に記載の方法。
【請求項１０】
シンセサイザが各回路素子を独立して分析することができる請求項１に記載の方法。
【請求項１１】
前記パラメータを生成するステップが、前記関数の記号表現に基づいて前記パラメータを生成するステップを含む請求項１に記載の方法。
【請求項１２】
前記記号表現がＢＤＤ表現である請求項１１に記載の方法。
【請求項１３】
前記記号表現が真理値表表現である請求項１１に記載の方法。
【請求項１４】
前記記号表現がブール式である請求項１１に記載の方法。
【請求項１５】
部分回路網を事前集計する方法であって、
ａ）特定のしきい値の複雑度まで複数の部分回路網を指定するステップであって、各部分回路網が少なくとも１つの回路素子を有し、前記複数の部分回路網が２つ以上の回路素子を有し、各部分回路網が少なくとも１つの出力関数を実行してその出力関数の結果を出力するステップと、
ｂ）各部分回路網について、前記部分回路網の出力関数に基づいてパラメータを生成するステップと、
ｃ）前記部分回路網について前記生成されたパラメータに基づいて記憶構造体内に各部分回路網を記憶するステップとを含む方法。
【請求項１６】
前記特定のしきい値の複雑度が前記部分回路網の少なくとも１つの構造的属性に関連する請求項１５に記載の方法。
【請求項１７】
各部分回路網が入力の集合を受け付け、前記構造的属性が各部分回路網の入力の集合内の入力数に関連する請求項１６に記載の方法。
【請求項１８】
前記構造的属性が各部分回路網の回路素子の数に関連する請求項１６に記載の方法。
【請求項１９】
前記構造的属性が各部分回路網の前記回路素子間の相互接続の数に関連する請求項１６に記載の方法。
【請求項２０】
前記部分回路網の前記パラメータを生成するステップの前に各部分回路網によって実行される前記出力関数を識別するステップをさらに含む請求項１５に記載の方法。
【請求項２１】
各部分回路網が関数の集合を実行し、各部分回路網のパラメータを生成するステップが、前記部分回路網によって実行される前記関数の集合に基づいてパラメータを生成するステップを含む請求項１５に記載の方法。
【請求項２２】
各部分回路網の前記パラメータが前記部分回路網の前記関数の集合内の各関数のインデクスを含むインデクスの集合である請求項２１に記載の方法。
【請求項２３】
前記インデクスが数字インデクスである請求項２２に記載の方法。
【請求項２４】
前記部分回路網を指定するステップが、
ａ）特定のしきい値の複雑度まで複数のグラフを定義するステップであって、各グラフがノードの集合を有するステップと、
ｂ）各グラフの局所関数の異なる集合を指定するステップであって、各々の特定のグラフの各々の局所関数の集合が前記特定のグラフの各ノードの１つの局所関数を含み、各々の特定のグラフの各々の局所関数の集合が異なる部分回路網を指定するステップと、
ｃ）前記部分回路網を指定するために用いる前記局所関数の集合から各々の特定の指定された部分回路網の出力関数の集合を識別するステップとを含む請求項１５に記載の方法。
【請求項２５】
各部分回路網を記憶するステップが、
各々の特定の部分回路網について、前記特定の部分回路網を指定する前記グラフと前記局所関数の集合とを前記記憶構造体内に記憶するステップを含む請求項１４に記載の方法。
【請求項２６】
部分回路網を事前集計する方法であって、
ａ）少なくとも２つの関数の集合を実行する部分回路網を指定するステップと、
ｂ）前記関数の集合に基づいてパラメータを生成するステップと、
ｃ）前記生成されたパラメータに基づいて前記記憶構造体内に前記部分回路網を記憶するステップとを含む方法。
【請求項２７】
前記関数の集合が１つの関数のみを含む請求項２６に記載の方法。
【請求項２８】
前記関数の集合が複数の関数を含む請求項２６に記載の方法。
【請求項２９】
前記パラメータを生成するステップの前に前記部分回路網によって実行される前記関数を識別するステップをさらに含む請求項２８に記載の方法。
【請求項３０】
前記パラメータが前記記憶構造体内に前記部分回路網を記憶するインデクスの集合であり、前記インデクスの集合が前記部分回路網によって実行される各関数のインデクスを含む請求項２８に記載の方法。
【請求項３１】
前記記憶構造体がリレーショナル・データベースであり、前記インデクスの集合が前記リレーショナル・データベースへのインデクスである請求項３０に記載の方法。
【請求項３２】
前記部分回路網が入力変数の集合を有し、前記パラメータを生成するステップが、
ａ）前記関数の１つをピボット関数として識別するステップと、
ｂ）前記ピボット関数を用いて前記入力変数構成を指定するステップと、
ｃ）前記指定された入力変数構成に基づいて、各関数のインデクスを指定するステップとを含む請求項３０に記載の方法。
【請求項３４】
前記ピボット関数を用いて入力変数構成を指定するステップが、
ａ）前記ピボット関数の正準表現を識別するステップと、
ｂ）前記指定された入力変数構成として前記ピボット関数の前記正準表現を生む入力変数構成を選択するステップとを含む請求項３２に記載の方法。
【請求項３５】
ａ）前記ピボット関数の真理値表表現を生成するステップをさらに含み、
ｂ）正準表現を識別するステップが、前記ピボット関数の真理値表表現の正準表現を識別するステップを含む請求項３４に記載の方法。
【請求項３６】
前記指定された入力変数構成を用いて前記部分回路網の各非ピボット関数の真理値表表現を指定するステップをさらに含む請求項３５に記載の方法。
【請求項３７】
前記正準表現を圧縮して前記ピボット関数の圧縮表現を得るステップをさらに含む請求項３４に記載の方法。
【請求項３８】
前記選択された入力変数構成に基づいて各非ピボット関数の圧縮表現を指定するステップをさらに含む請求項３４に記載の方法。
【請求項３９】
前記部分回路網を指定するステップが、
ａ）ノードの集合と、前記ノードの集合の複数の出力とを有するグラフを定義するステップと、
ｂ）前記ノードの集合内の各ノードの局所関数を指定するステップと、
ｃ）前記局所関数から前記関数を識別するステップとを含む請求項２６に記載の方法。
【請求項４０】
部分回路網を事前集計する方法であって、
ａ）特定のしきい値の複雑度まで複数の部分回路網を指定するステップであって、各部分回路網が少なくとも１つの出力関数を実行し、前記複数の部分回路網が２つ以上の出力関数を実行し、各部分回路網が各出力関数の結果を出力するステップと、
ｂ）各部分回路網について、前記部分回路網によって実行される前記出力関数の集合に基づいてパラメータを生成するステップと、
ｃ）前記部分回路網について前記生成されたパラメータに基づいて記憶構造体内に各部分回路網を記憶するステップとを含む方法。
【請求項４１】
部分回路網を事前集計する方法であって、
ａ）複数のグラフを定義するステップであって、各グラフがノードの集合を有するステップと、
ｂ）各グラフの局所関数の異なる集合を指定するステップであって、各々の特定のグラフの各々の局所関数の集合が前記特定のグラフの各ノードの１つの局所関数を含み、各グラフと前記グラフについて指定された局所関数の集合の１つとの組合せが部分回路網を指定するステップと、
ｃ）前記部分回路網を指定するために用いる前記局所関数の集合から各々の特定の指定された部分回路網の出力関数の集合を識別するステップと、
ｄ）前記グラフと局所関数とを記憶するステップと、
ｅ）各部分回路網の前記識別された出力関数の集合に基づいて各部分回路網のパラメータを生成するステップと、
ｆ）前記記憶構造体内に前記生成されたパラメータを記憶するステップと、
ｇ）各部分回路網の前記記憶されたパラメータを前記部分回路網の前記グラフと局所関数の集合に対応させるステップとを含む方法。
【請求項４２】
設計の回路記述を生成する方法であって、
ａ）前記設計から、複数の回路素子を含む部分回路網候補を選択するステップと、
ｂ）前記選択された部分回路網候補によって実行される出力関数の集合に基づいてパラメータを生成するステップと、
ｃ）前記パラメータを用いて複数の代替部分回路網を記憶する記憶構造体から代替部分回路網を取り出すステップと、
ｄ）前記設計内で前記選択された部分回路網候補を前記代替部分回路網に置き換えるステップとを含む方法。
【請求項４３】
前記部分回路網によって実行される出力関数の集合を識別するステップをさらに含む請求項４２に記載の方法。
【請求項４４】
前記出力関数の集合が１つの出力関数のみを含む請求項４３に記載の方法。
【請求項４５】
前記出力関数の集合が複数の出力関数を含む請求項４３に記載の方法。
【請求項４６】
前記部分回路網の各回路素子が１つの出力を有し、各回路素子の出力が前記選択された部分回路網候補によって実行される１つの出力関数の結果を提供する、請求項４３に記載の方法。
【請求項４７】
前記部分回路網の各回路素子が１つの出力を有し、前記選択された部分回路網候補によって実行される各出力関数が前記部分回路網から論理出力される１つの回路素子出力でのみ提供される請求項４３に記載の方法。
【請求項４８】
前記部分回路網の特定の回路素子が２つ以上の出力を有し、前記特定の回路素子の各出力が前記選択された部分回路網候補によって実行される１つの出力関数の結果を提供する請求項４３に記載の方法。
【請求項４９】
前記選択された部分回路網候補の各回路素子の局所関数を受け取るステップと、
前記受け取った局所関数から各出力関数を識別するステップとをさらに含む請求項４２に記載の方法。
【請求項５０】
各局所関数または出力関数が二分決定グラフ（「ＢＤＤ」）で表され、前記部分回路網が少なくとも第１および第２の回路素子を有し、前記第１の回路素子が第１の局所関数を実行し、前記第２の回路素子が第２の局所関数を実行し、第１の出力関数のＢＤＤが前記第１の局所関数のＢＤＤから引き出され、第２の出力関数のＢＤＤが少なくとも前記第１および第２の局所関数のＢＤＤから引き出される請求項４９に記載の方法。
【請求項５１】
前記設計を受け取るステップであって、前記設計が組合せ論理回路網であるステップと、
追加の部分回路網候補を選択するステップと、
前記選択された追加の部分回路網の少なくともいくつかを前記記憶構造体から取り出された部分回路網候補に置き換えるステップとをさらに含み、
前記部分回路網候補の置き換えが前記組合せ論理回路網の設計を最適化する請求項４２に記載の方法。
【請求項５２】
前記設計の論理表現を受け取るステップと、
前記設計の前記論理表現を回路レベルの表現に変換するステップとをさらに含み、
前記部分回路網候補を選択するステップが、前記回路レベルの表現から前記部分回路網候補を選択するステップを含む請求項４２に記載の方法。
【請求項５３】
前記パラメータが前記記憶構造体内に前記部分回路網を記憶するインデクスである請求項４２に記載の方法。
【請求項５４】
前記インデクスが数字インデクスである、請求項５３に記載の方法。
【請求項５５】
前記パラメータが前記記憶構造体内に前記部分回路網を記憶するインデクスの集合である請求項４２に記載の方法。
【請求項５６】
前記インデクスの集合が前記出力関数の集合内に各関数のインデクスを含む請求項５３に記載の方法。
【請求項５７】
前記インデクスが数字インデクスである請求項５６に記載の方法
【請求項５８】
ａ）前記部分回路網候補を前記代替部分回路網に置き換えるステップの前に、前記選択された部分回路網候補を前記代替部分回路網に置き換えるか否かを評価するステップをさらに含み、
前記置き換えステップが前記評価に基づく請求項４２に記載の方法。
【請求項５９】
前記評価ステップが費用関数を計算するステップを含む請求項５８に記載の方法。
【請求項６０】
追加の部分回路網候補を選択するステップと、
各部分回路網候補について、
各々の選択された部分回路網候補の少なくとも１つの代替部分回路網を識別するステップと、
各々の識別された置き換えを評価するステップと、
前記評価に基づいて、前記部分回路網候補を前記部分回路網候補について識別された前記代替部分回路網に置き換えるか否かを決定するステップとをさらに含む請求項５８に記載の方法。
【請求項６１】
前記代替部分回路網を取り出すステップがいくつかの代替部分回路網を取り出すステップを含み、前記方法が、
各々の取り出された部分回路網を評価して実現可能な代替候補を識別するステップをさらに含み、
前記部分回路網候補と置き換える前記代替部分回路網が前記実現可能な代替候補の１つである請求項５８に記載の方法。
【請求項６２】
設計の回路記述を生成するコンピュータ・プログラムを記憶するコンピュータ可読媒体であって、前記プログラムが、
ａ）前記設計から部分回路網候補を選択する第１の命令の集合と、
ｂ）前記部分回路網によって実行される出力関数の集合を識別する第２の命令の集合と、
ｃ）前記識別された出力関数の集合に基づいて、代替部分回路網を記憶する記憶構造体から代替部分回路網を取り出す第３の命令の集合と、
ｄ）前記設計内で前記選択された部分回路網候補を前記代替部分回路網に置き換える第４の命令の集合とを備えるコンピュータ可読媒体。
【請求項６３】
設計の回路記述を生成するための方法であって、
ａ）前記設計から、出力関数の集合を実行する部分回路網候補を選択するステップであって、前記部分回路網候補が回路素子の集合を含むステップと、
ｂ）前記出力関数の集合に基づいてパラメータを生成するステップと、
ｃ）前記パラメータを用いて複数の代替部分回路網を記憶する記憶構造体から代替部分回路網を取り出すステップと、
ｄ）前記設計内で前記選択された部分回路網候補を前記代替部分回路網に置き換えるステップとを含む方法。
【請求項６４】
前記出力関数の集合が１つの出力関数のみを含む請求項６３に記載の方法。
【請求項６５】
前記出力関数の集合が複数の出力関数を含む請求項６３に記載の方法。
【請求項６６】
前記部分回路網によって実行される出力関数を識別するステップをさらに含む請求項６５に記載の方法。
【請求項６７】
前記回路素子の集合が１つの回路素子のみを含む請求項６５に記載の方法。
【請求項６８】
前記回路素子の集合が少なくとも２つの回路素子を含む請求項６６に記載の方法。
【請求項６９】
前記部分回路網の各回路素子が１つの出力を有し、各回路素子の出力が前記選択された部分回路網候補によって実行される１つの出力関数の結果を提供する請求項６５に記載の方法。
【請求項７０】
前記部分回路網の各回路素子が１つの出力を有し、前記選択された部分回路網候補によって実行される各出力関数が前記部分回路網から論理出力される１つの回路素子出力でのみ提供される請求項６５に記載の方法。
【請求項７１】
前記選択された部分回路網候補の各回路素子の局所関数を受け取るステップと、
前記受け取った局所関数から各出力関数を識別するステップとをさらに含む請求項６５に記載の方法。
【請求項７２】
各局所関数または出力関数が二分決定グラフ（「ＢＤＤ」）で表され、前記部分回路網が少なくとも第１および第２の回路素子を有し、前記第１の回路素子が第１の局所関数を実行し、前記第２の回路素子が第２の局所関数を実行し、第１の出力関数のＢＤＤが前記第１の局所関数のＢＤＤから引き出され、第２の出力関数のＢＤＤが少なくとも前記第１および第２の局所関数のＢＤＤから引き出される請求項７１に記載の方法。
【請求項７３】
前記設計を受け取るステップであって、前記設計が組合せ論理回路網であるステップと、
追加の部分回路網候補を選択するステップと、
前記選択された追加の部分回路網のいくつかを前記記憶構造体から取り出された部分回路網候補に置き換えるステップとをさらに含み、
前記部分回路網候補の置き換えが前記組合せ論理回路網の設計を最適化する請求項６５に記載の方法。
【請求項７４】
前記設計の論理表現を受け取るステップと、
前記設計の前記論理表現を回路レベルの表現に変換するステップとをさらに含み、
前記部分回路網候補を選択するステップが、前記回路レベルの表現から前記部分回路網候補を選択するステップを含む請求項６５に記載の方法。
【請求項７５】
前記パラメータが前記記憶構造体内に前記部分回路網を記憶するインデクスの集合であり、前記インデクスの集合が前記部分回路網によって実行される各出力関数のインデクスを含む請求項６５に記載の方法。
【請求項７６】
前記パラメータを使用するステップが、
ａ）前記インデクスの集合内の各インデクスに関連する前記記憶構造体内に記憶された各代替部分回路網を識別するステップと、
ｂ）各々の識別された代替部分回路網を取り出すステップとを含む請求項７５に記載の方法。
【請求項７７】
前記記憶構造体がリレーショナル・データベースであり、前記インデクスの集合が前記リレーショナル・データベースへのインデクスである請求項７６に記載の方法。
【請求項７８】
前記代替部分回路網が入力変数の集合を有し、前記パラメータを生成するステップが、
ａ）前記出力関数の１つをピボット関数として識別するステップと、
ｂ）前記ピボット関数を用いて前記入力変数構成を指定するステップと、
ｃ）前記指定された入力変数構成に基づいて、各関数のインデクスを指定するステップとを含む請求項７５に記載の方法。
【請求項７９】
前記ピボット関数を用いて入力変数構成を指定するステップが、
ａ）前記ピボット関数の正準表現を識別するステップと、
ｂ）前記指定された入力変数構成として前記ピボット関数の前記正準表現を生む入力変数構成を選択するステップとを含む請求項７８に記載の方法。
【請求項８０】
ａ）前記ピボット関数の真理値表表現を生成するステップをさらに含み、
ｂ）正準表現を識別するステップが前記ピボット関数の真理値表表現の正準表現を識別するステップを含む請求項７９に記載の方法。
【請求項８１】
前記正準表現を圧縮して前記ピボット関数の圧縮表現を得るステップをさらに含む請求項７９に記載の方法。
【請求項８２】
前記選択された入力変数構成に基づいて各非ピボット関数の圧縮表現を指定するステップをさらに含む請求項７９に記載の方法。
【請求項８３】
前記ピボット関数のインデクスが１次インデクスであり、各非ピボット関数のインデクスが２次インデクスであり、前記パラメータを使用するステップが、
ａ）前記１次インデクスと前記２次インデクスの１つによって形成される各々の特定のインデクス・ペアについて、前記特定のインデクス・ペアに関連する前記記憶構造体内に記憶された各代替部分回路網を識別するステップと、
ｂ）前記識別された代替部分回路網のいずれかが前記すべてのインデクス・ペアに関連するか否かを決定するステップと、
ｃ）前記すべてのインデクス・ペアに関連する任意の識別された代替部分回路網を取り出すステップとを含む請求項７８に記載の方法。
【請求項８４】
ａ）前記部分回路網候補を前記代替部分回路網に置き換えるステップの前に、前記選択された部分回路網候補を前記代替部分回路網に置き換えるか否かを評価するステップをさらに含み、
前記置き換えステップが前記評価に基づく請求項６５に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、合成方法および装置に関する。
【背景技術】
【０００２】
組合せ論理シンセサイザは、集積回路（「ＩＣ」）の特定の領域の効率的な回路記述を生成する。ＩＣ領域は、ＩＣ全体またはその一部（すなわち、ブロック）である。ＩＣまたはＩＣブロックは、通常ブール変数の集合Ｘに依存するブール組合せ論理関数の集合Ｆを実行する。ブール関数の集合Ｆは、通常いくつかの関数ｆ＿１，．．．，ｆ＿ｍを含み、ブール変数の集合Ｘは、通常いくつかの変数Ｘ＿１，．．．，Ｘ＿ｎを含む。
ＩＣ設計に関して、変数の集合ＸはＩＣ領域への入力を含む。また、ブール関数ｆ＿ｉの一部または全部の出力は、ＩＣ領域の出力の役目を果たす。さらに、各関数ｆ＿ｉは、その関数への１つまたは複数の入力について実行しなければならない論理演算を指定する。各ブール関数ｆ＿ｉ（Ｘ）の出力は真または偽である。
各関数ｆ＿ｉは最初、レジスタ転送レベル（ＲＴＬ）記述（例えば、ＶｅｒｉｌｏｇまたはＶＨＤＬ記述）、ブール式、または技術レベルのネットリストなどのさまざまな形式で与えられる。これらの記述形式は相互に交換可能で、そのような記述を別の記述に変換する周知の方法がある。
シンセサイザによって生み出される回路記述の「効率」は、通常、推定「サイズ」および「深さ」で測定される。しかし、他の判定基準も可能である。サイズおよび深さは、記述の所望の出力形式で定義される。ＩＣ設計に通常使用される２つの出力形式は、（１）技術レベル出力と（２）中間レベル出力である。
技術レベル設計は、通常、目標ライブラリと呼ばれる特定の技術ライブラリと結合した回路記述である。技術レベル設計の回路素子は、周知の物理特性（例えば、周知のタイミング挙動、消費電力、サイズなど）を備えたユニットとしてシリコンで実施される。これはそのような回路素子とその関連論理および物理的挙動が目標ライブラリ内に記述されているためである。したがって、技術レベルの出力では、「サイズ」と「深さ」という用語は、通常、回路全体の実際の物理特性を指す。例えば、「サイズ」は回路素子の数、回路素子の総面積、総消費電力などで測定できるが、「深さ」は、通常、回路の段数に関連する回路のタイミング挙動で測定できる。
【０００３】
中間レベル設計は、特定の技術ライブラリに結びついていない回路記述である。それどころか、この回路記述は、以降のステップで特定の目標ライブラリにマッピングできる何らかの中間形式をとる。中間レベル出力は、特定の目標ライブラリに結びつかず任意の複雑な論理関数を演算する回路素子を含むことができる。
中間設計素子は必ずしも直接の物理ＩＣ形態に結びついているわけではない。中間レベル設計の「サイズ」は、通常、最終面積推定値、設計の回路素子が実行する関数のすべての変数の総和、または他の何らかの抽象的な定量によって測定される。同様に、中間レベル設計の「深さ」はしばしば抽象的に定量化される。例えば、中間レベル設計の「深さ」は、回路の段数プラス各回路素子の内部の深さの推定値として測定できる。また、他のより高度な推定値も可能である。
効率的な回路設計を引き出すという問題は広範に研究されてきた。これはＩＣのサイズと速度の両方が回路設計の効率に直接依存するからである。組合せ論理最適化の問題についての現在の３つの手法は、（１）規則ベースの技法、（２）因数分解による最適化技法、および（３）２レベル最小化技法を含む。
規則ベースのシステムにおいては、入力は、通常、技術レベルの記述である。ここでシステムは、比較的小さい固定の規則の集合に従って繰り返し改善を試みる。各規則はある局所構成とこの構成を異なる回路素子の組と交換する方法を規定する。そのような規則は専門家およびプログラマによって定義され、ハンドコードされてきたが、時にはシステムのエンド・ユーザによってパラメータ化することも可能である。規則の集合はシナリオまたはスクリプトとして組み合わされる（エンド・ユーザによって、または専門家の手でテンプレートとして）。スクリプトは順次適用されるいくつかの最適化パスと各パスの際に使用すべき規則の部分集合（およびそのパラメータ）を規定する。
因数分解による最適化システムでは、入力および出力は、通常、任意のブール関数を実施する回路素子の中間レベルの記述で表される。これらのシステムは、回路の異なる部材の共通の副関数（すなわち、共通因数）を識別しようとする代数因数分解アルゴリズムを適用することで最適化を実行する。そのような副関数を複数回実現する代わりに、関数が抽出され（一度別々に実現され）、その結果がそれを必要とする複数の場所に帰還される。これらのシステムはまた、ノードのコラプシング（すなわち、複数のノードを１つにすること）などの他の方法によって設計を変更する。
２レベル最小化は、２レベル論理、例えば、積の総和で表される論理関数のための特別の最適化技法である。周知のアルゴリズムは非常に強力であり、部分的には最適ですらある。しかし、その形式では単純論理関数しか効率的に表すことができないので、２レベル最小化の適用は限られている。
また、ＰＬＡフォールディング、ＦＰＧＡのためのルックアップ・テーブル最適化などの特殊な基本チップ技術のために開発されてきたさまざまなアルゴリズムと技法がある。これらはより一般的な回路の最適化には適さない極めて特殊なアルゴリズムである。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
したがって、単純論理関数またはハンドコードされた関数に限定されない強力な論理シンセサイザが必要である。理想的には、そのようなシンセサイザは事前集計された部分回路網の豊かな集合を使用する。そのような手法では、事前集計された部分回路網を効率的に記憶し識別する索引付け方法が必要である。理想的には、そのような索引付け方法では、多素子および／または多機能部分回路網を効率よく記憶して識別することができる。
いくつかの現在の手法は技術レベル設計を簡単な回路素子の特定の技術レベル・ライブラリにマッピングするための索引付け方法を使用する。現在の手法は単一関数照会を実現するライブラリ内にすべての回路素子を発見する。各ライブラリの回路素子が一致のあるなしにかかわらず試験されるように以前のフィルタが構築された。まず簡単な計算可能ないくつかの特性を検査することで実行され（大半の可能性を迅速に除外し）、次に等価性の最終試験を実行する（論理関数の何らかの表現に基づいて）ことでこれらの試験は実行された。
【課題を解決するための手段】
【０００５】
本発明のいくつかの実施形態は、部分回路網を事前集計する方法を提供する。この方法は、（１）ある関数を実行する部分回路網を生成し、（２）この関数に基づいてパラメータを生成し、（３）生成されたパラメータに基づいて部分回路網を記憶構造体内に記憶する。いくつかの実施形態においては、生成された部分回路網はいくつかの回路素子を有する。また、いくつかの実施形態においては、生成された部分回路網は２つまたはそれ以上の関数の集合を実行する。生成されたパラメータはいくつかの実施形態では記憶構造体へのインデックスである。また、いくつかの実施形態においては、部分回路網が実行する関数の出力の記号表現に基づいてこのパラメータを生成する。関数の出力の記号表現は関数名とは異なる。記号表現の例は、二分決定グラフ、真理値表、またはブール式を含む。いくつかの実施形態では各々の生成された部分回路網のグラフ構造を符号化形式で記憶する。
本発明のいくつかの実施形態は、設計の回路記述を作成する方法を提供する。設計から、この方法は部分回路網候補を選択する。次に、この方法は部分回路網によって実行される出力関数を識別する。識別された出力関数に基づいて、この方法は代替部分回路網を記憶する記憶構造体から代替部分回路網を識別する。次に、選択した部分回路網候補を識別された代替部分回路網に置き換えるか否かを決定する。この方法が選択された部分回路網候補を置き換える決定をした場合、設計内のこの部分回路網を識別された代替部分回路網に置き換える。いくつかの実施形態においては、選択された部分回路網はいくつかの回路素子を有する。また、いくつかの実施形態においては、選択された部分回路網は２つまたはそれ以上の関数の集合を実行する。生成されたパラメータは、いくつかの実施形態では記憶構造体へのインデックスである。
【０００６】
いくつかの実施形態においては、この方法は設計を特定の技術ライブラリにマッピングする。これらの実施形態のいくつかでは、選択された部分回路網は指令された非周期グラフ構造を有することができる。また、いくつかの実施形態においては、選択された部分回路網はいくつかの出力ノードを有する。さらに、いくつかの実施形態においては、この方法を用いて、１つの技術に基づく設計を、第２の技術に基づく設計にマッピングする。
いくつかの実施形態は、回路素子の集合を有する部分回路網を符号化する方法を提供する。この方法は最初に、各グラフがノードの集合を有する複数のグラフを定義する。次に、各グラフについて、特定の各々のグラフの局所関数の各集合が特定のグラフの各ノードの１つの局所関数を含み、各グラフの局所関数の集合のうちの１つとの組合せが部分回路網を指定する局所関数の異なる集合を指定する。この方法はこのグラフと局所関数とを記憶する。各々の特定の指定された部分回路網について、この方法は特定の局所関数の集合を指定する識別子と特定の部分回路網を指定する特定のグラフを記憶する。
本発明の新規な特徴は添付の特許請求の範囲に記載する。しかし、説明のために、本発明のいくつかの実施形態を以下の図に示す。
【発明を実施するための最良の形態】
【０００７】
以下に、説明のために多数の具体例を挙げる。しかし、当業者であれば、本発明はこれらの特定の具体例を使用せずに実施できることを理解することができるだろう。他の例では、本発明を不要な具体例で分かりにくくしないために、周知の構造および装置はブロック図で示している。
Ｉ．用語
本明細書のいくつかの用語を以下に定義する。
ＩＣ領域はＩＣ全体またはＩＣの一部（またはブロック）を指す。
設計の論理記述は設計の論理表現を指す。論理記述の例はＲＴＬ記述（例えば、Ｖｅｒｉｌｏｇ、ＶＨＤＬ、ＨＤＬ、またはＢＬＩＦＦ記述）、組合せ論理表現（例えば、ブール式）などを含む。設計の回路記述は設計の回路表現を指す。回路記述の例は技術レベルの設計（結合回路網とも呼ばれる）、中間レベル設計（非結合回路網とも呼ばれる）などを含む。
ＩＣ設計はさまざまな回路素子を使用する。そのような素子は通常、入力と出力を有する。これらの回路素子は組合せおよび順序素子を含む。組合せ素子は１つまたは複数の離散値入力を受け取り、受け取った入力の値と組合せ素子が実行する１つまたは複数の論理関数に依存する１つまたは複数の離散値出力を生成する。組合せ素子の出力は素子の以前の状態に依存しない。ブール組合せ素子は組合せ素子の一例である。ブール組合せ素子では、入力と出力は２つの値のうちの１つを有することができる。各ブール組合せ素子は１つまたは複数のブール関数を計算する。ブール組合せ回路素子の例は低レベル素子（例えば、インバータ、ＮＡＮＤゲート、ＮＯＲゲート、ＡＮＤゲート、ＯＲゲート、ＸＯＲゲート）または高レベル素子（例えば、多重化装置、加算器など）を含む。
順序素子はその素子の１つまたは複数の以前の状態（例えば、その入力および／または出力の１つまたは複数の以前の値）に依存する出力を生成する素子である。いくつかの順序素子はある時点に入力で受け取る値を記憶し、後でこれらの値を解放する（クロックまたは制御信号などに応じて）。そのような素子の例は、ラッチ、レジスタ、フリップフロップ、ＲＡＭ、ＲＯＭなどである。
特定の技術ライブラリに結びついている回路素子は、周知の物理特性（例えば、周知のタイミング挙動、消費電力、サイズなど）を備えたユニットとしてシリコンで実施される。基礎の技術および設計スタイルに応じて、回路素子は標準のセル、カスタム・ブロック、ゲート・アレイまたはＦＰＧＡの基本セルなどに対応することができる。
【０００８】
技術ライブラリ（目標ライブラリとも呼ばれる）はＩＣを実施する特定の技術に使用できる標準の回路素子を含む。そのようなライブラリは、通常、その回路素子の論理および物理特性の記述を含む。回路網は、通常、電気的に接続する必要がある回路素子であるピンの集合として定義される。回路網はピンを接続する物理的配線（例えば、金属またはポリシリコン配線）の網またはピンの１つの組から別の組へ論理信号（例えば、２進信号）を伝搬する純粋に抽象的な接続として観察できる。回路網リストは回路網のリストである。
技術レベル設計はＩＣ領域の回路記述である。この記述は特定の技術ライブラリに結びついている（すなわち、特定の技術ライブラリからの回路素子のみを含む）。中間レベル設計はＩＣ領域の回路記述でもある。しかし、この記述は特定の技術ライブラリには結びついていない（すなわち、その回路素子のすべてまたは一部がいかなる技術ライブラリの部分でもない）。それどころか、この回路記述は以降のステップで特定の目標ライブラリにマッピングできる何らかの中間形式をとる。言い換えれば、中間レベル出力は特定の目標ライブラリに結びつかず任意の複雑な論理関数を演算する回路素子を含む。
回路網は、複数のＩＣ、ＩＣ全体、またはＩＣの部分の回路記述を指す。回路網は技術レベルの設計または中間レベルの設計である。技術レベルの設計である回路網は結合回路網である（すなわち、その回路素子が特定の技術ライブラリに「結合」している）。他方、中間レベルの設計である回路網は非結合回路網である（すなわち、その回路素子が特定の技術ライブラリに「結合」していない）。
回路網内の回路素子は回路網内のノードとも呼ばれる。回路網の各組合せノード（すなわち、各組合せ論理回路素子）は各々が組合せ論理ノードの局所関数と呼ばれる組合せ論理関数の集合を実行する。回路網が特定の技術ライブラリに結びついていない時には、回路網の回路素子は、通常、物理特性（サイズ、タイミング挙動など）に関連せず、組合せ論理ノードの局所関数は任意の複雑な論理関数でよい。
【０００９】
ＩＩ．トップ・レベル・アーキテクチャおよびフロー
図１は、本発明のいくつかの実施形態の論理シンセサイザ１００のソフトウェア・アーキテクチャを示す。シンセサイザ１００は特定の技術ライブラリに結びついている、または結びついていない回路網上で動作する。このシンセサイザは、回路網設計１３５を入力にとり、１つまたは複数の目的に関してこの設計を最適化する。
特に、このシンセサイザは同じ入力の集合を受け入れる修正された結合または非結合回路網を生成し、シンセサイザに供給される元の回路網と同じ出力の集合を生成する。しかし、修正回路網は設計を最適化するために使用される１つまたは複数の目的に関しては優れている。例えば、修正回路網はノードおよび／または中間入力の数が少なく、または物理特性（サイズ、タイミングなど）の点で優れている。
いくつかの実施形態においては、ユーザはシンセサイザが最適化する目的を定義することができる。また、いくつかの実施形態においては、シンセサイザ１００は受け取った１つまたは複数の目的のための組合せ論理回路網設計を１つまたは複数の制約に関して最適化する。これらの目的と同様、制約は設計のサイズと深さに関連することができる。
【００１０】
以下の実施形態においては、シンセサイザは、組合せ論理回路網設計を入力として受け取る。以下のいくつかの例で、組合せ論理回路網設計はブール回路網設計である。いくつかの実施形態においては、当業者であれば、組合せ論理設計は３つ以上の離散的状態を有することができる入力を受け取り、および／または出力を生成する多値回路素子を含むことができるということを理解することができるだろう。
また、他の実施形態では、シンセサイザ１００は別の形式の出発設計を受け取る。例えば、シンセサイザ１００は出発設計の論理表現を受け取ることができる（例えば、Ｖｅｒｉｌｏｇ，ＶＨＤＬ、ＨＤＬ、ＢＬＩＦＦなどの論理形式の出発設計を受け取ることができる）。これらの実施形態のいくつかでは、シンセサイザは周知の技術を用いて、受け取った論理表現を次に最適化する回路網に変換する。
図１に示すように、シンセサイザ１００は、回路網データ記憶域１０５、グローパル・オプティマイザ１１０、および１つまたは複数のコスティング・エンジン１３０を含む。回路網データ記憶域１０５は特定の目標ライブラリに結びついている、または結びついていない多数の（例えば、数百万の）組合せ論理部分回路網を記憶、管理する。
いくつかの実施形態においては、データ記憶域１０５内に記憶された部分回路網は先に事前計算されている。これらの実施形態のいくつかでは、データ・ゼネレータ１１５はこれらの回路網を自動的に事前集計する。また、以下の実施形態では、このゼネレータは最適化の際に使用されない。回路網データ記憶域１０５は設計内の部分回路網の代替形態の照会をサポートする。以下の実施形態では、回路網データ記憶域はリレーショナル・データベースとして構成される。しかし、他の実施形態では、データ記憶域１０５のために、異なるデータベース（オブジェクト指向データベースなど）または他のデータ記憶構造体（データ・ファイルなど）を使用することができる。
グローバル・オプティマイザ１１０は、（１）置き換えのために設計１３５から部分回路網候補を選択し、（２）データ記憶域１０５に照会して、選択した部分回路網候補の１つまたは複数の代替部分回路網を識別し、（３）代替部分回路網を分析し、（４）分析に基づいて設計１３５内の選択した部分回路網候補を識別した代替部分回路網に置き換えるか否かを決定することでシンセサイザの動作を制御する。
【００１１】
いくつかの実施形態においては、オプティマイザ１１０は１つまたは複数の停止条件に達するまで上記４つの動作を繰り返し実行する。さらに、オプティマイザは１つまたは複数のコスティング・エンジン１３０を用いてオプティマイザがデータ記憶域から取り出した代替部分回路網を分析するためのコストを計算する。オプティマイザ１１０はそのようなコストを用いて１つまたは複数の目的および／または制約に関して代替部分回路網および／または設計全体を評価することができる。
図１はコスティング・エンジン１３０の３つの例、すなわち、タイミング・エンジン１２０、面積エンジン１２５および電力エンジン１４０を示す。タイミング・エンジン１２０はオプティマイザがより高速のチップの設計を生成できるようにするオプティマイザのタイミング・コストを計算する。特に、このエンジンを使用する場合、オプティマイザは考慮している代替部分回路網についてタイミング・エンジンに通知し、タイミング・エンジンはこれに対して、代替部分回路網が特定の部分回路網、受け取った回路網、および／または回路網を含むより大きい設計のタイミング挙動にどの程度影響するかという情報をオプティマイザに供給する。例えば、いくつかの実施形態においては、タイミング・エンジンは、代替部分回路網が選択された場合に、ある出力での予想時間差を計算する。いくつかの実施形態においては、タイミング・エンジンはある種の技術に適当なユーザ定義のタイミング・モデルを使用する。
面積エンジン１２５はオプティマイザが設計の面積を減らすための面積推定値を計算して返送する。特に、面積エンジン１２５を使用する時には、オプティマイザは考慮している代替部分回路網についてこのエンジンに通知する。次に、面積エンジンはこれに対して、このことが特定の部分回路網、受け取った回路網、および／または回路網を含むより大きい設計の面積にどの程度影響するかという情報をオプティマイザに供給する。
電力エンジン１４０は代替部分回路網を選択した時の消費電力の変化を推定する。ＩＣの消費電力はＩＣを設計する際の最も重要な要因の１つであることが多い。タイミング・エンジン、面積エンジン、および電力エンジンは当技術分野で周知の任意の技術に基づいて実施できる。オプティマイザが他の目的および／または制約を考慮する必要がある場合には他のコスティング・エンジンも使用することができる。
【００１２】
図２は、本発明のいくつかの実施形態で図１のシンセサイザ１００の全体のフローを概念的に示すプロセス２００である。いくつかの実施形態においては、オプティマイザ１１０がこの全体のフローを管理する。シンセサイザ１００は特定の技術ライブラリに結びついている、または結びついていない回路網１３５のためにこのプロセスを実行する。図３は回路網１３５の部分３００の例を示す。この図に示すように、回路網はいくつかのブール回路素子３０５〜３３５（ノードとも呼ばれる）を有し、各回路素子は特定の関数（局所関数とも呼ばれる）を実行する。
以下の実施形態においては、受け取られた回路網１３５は回路網の回路素子ごとに１つのノードを有するリンクされたグラフ・データ構造体で表される。各ノードは組合せまたは順序論理ノードである。いくつかの実施形態においては、各ノードは組合せ論理ノードであるか否かを指定するフラグを含む。その組合せ論理ノードごとに、受け取られた回路網はまた、局所関数の集合を指定する。この実施形態においては、縮小次元二分決定グラフ（ＲＯＢＤＤ）は組合せ論理ノードの各局所関数を表す。
ＲＯＢＤＤはノードおよびエッジを含むグラフ・データ構造体であり、ここでノードは入力または出力変数を表し、エッジは真または偽ブール結果を表す。いくつかの実施形態においては、ＲＯＢＤＤは組合せ論理ノードの各出力関数を表すのに使用される。したがって、組合せ論理ノードはノードがいくつかの出力ビットを有する時にはそれに関連するいくつかのＲＯＢＤＤを有する。例えば、３つの入力加算器はその２つの出力用の各々に１つずつ、計２つのＲＯＢＤＤを有する。当業者であれば、他の実施形態においては、他のタイプのＢＤＤ（ＭＤＤなど）または他の関数表現（真理値表表現など）を使用することができることを理解することができるだろう。
【００１３】
図２に示すように、プロセス２００は最初受け取った回路網を横断して任意の多出力組合せ論理ノード（３入力加算器など）を識別する、すなわち、２つまたはそれ以上の局所関数を実行する任意の組合せ論理ノードを識別する。このプロセスでそのようなノードが見つかる場合、このノードを単一出力組合せ論理ノードの集合に置き換える。
プロセス２００は当技術分野で周知の任意の技法を用いてこの置き換えを実行する。例えば、プロセス２００は多出力組合せ論理ノードをいくつかの単一出力組合せ論理ノードに置き換えることができ、ここで、各単一出力組合せ論理ノードは１つの局所関数を実行する。多出力ノードが実行する特定の出力関数ごとに、プロセスは最初、特定の出力関数を実行するそのデータ記憶域１０５内に記憶された（１つまたは複数のノードの）部分回路網を識別しようとする。データ記憶域が部分回路網を記憶しているか否かを識別するプロセスを図５〜１７を参照しながら以下に説明する。プロセス２００が多出力ノードの特定の出力関数の事前集計された部分回路網を識別できない場合、このプロセスはこの関数をより簡単な関数に分解し、次に、より簡単な関数を実行するデータ記憶域内に記憶された部分回路網を識別する。このプロセスは、Ｇｉｏｖａｎｎｉ  Ｄｅ  Ｍｉｃｈｅｌｉ、Ｓｙｎｔｈｅｓｉｓ  ａｎｄ  Ｏｐｔｉｍｉｚａｔｉｏｎ  ｏｆ  Ｄｉｇｉｔａｌ  Ｃｉｒｃｕｉｔｓ、ＭｃＧｒａｗ−Ｈｉｌｌ、１９９４に記載のＳｈａｎｎｏｎ展開またはＴ．Ｃ．Ｗｅｓｓｅｌｋａｍｐｅｒの、「Ｓｏｍｅ  ｃｌａｓｓｉｃａｌ  ｍａｔｈｅｍａｔｉｃａｌ  ｒｅｓｕｌｔｓ  ｒｅｌａｔｅｄ  ｔｏ  ｔｈｅ  ｐｒｏｂｌｅｍｓ  ｏｆ  ｔｈｅ  ｆｉｒｍｗａｒｅ／ｈａｒｄｗａｒｅ  ｉｎｔｅｒｆａｃｅ」，Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ｅｉｇｈｔｈ  ａｎｎｕａｌ  ｗｏｒｋｓｈｏｐ  ｏｎ  Ｍｉｃｒｏｐｒｏｇｒａｍｍｉｎｇ，Ｃｈｉｃａｇｏ，１９７５（ＡＣＭ  Ｄｉｇｉｔａｌ  Ｌｉｂｒａｒｙで入手可能）に記載のＲｅｅｄ−Ｍｕｌｌｅｒ展開などの任意の周知の分解プロセスを使用することができる。プロセス２００が多出力ノードの各出力関数の部分回路網を識別すると、プロセスは多出力ノードを識別された部分回路網の集合に置き換える。特に、受け取った回路網内では、プロセスは多出力ノードを識別された部分回路網の集合のノードを表すいくつかの代替ノードに置き換える。各代替ノードについて、プロセスはそのＲＯＢＤＤによってノードの局所関数を指定する。
各多出力ノードを単一出力ノードの集合に置き換えた後で、いくつかの実施形態のプロセスは単一出力ノードの集合を関連付ける（例えば、それらをリンクし、リスト内での関連付けを識別し、または他のいくつかの関連付け技法を使用する）。次に、置き換え用の部分回路網候補を選択する間にこの関連付けを用いて（以下の２１０で）、多出力ノードを表すノード集合の全体を識別し選択することができる。この選択によって多出力ノードのノード集合の全体を単独で、または他の組合せ論理ノードと共に最適化することができる。多出力ノードのノード集合の全体の集合的な最適化はデータ記憶域が多出力ノードの所望の形態を記憶している時には特に有益である。
【００１４】
当業者であれば、プロセス２００は、多出力ノードを単一出力ノードの集合に分解するが、他の実施形態も多出力ノードを異なる方法で扱うことができることを理解することができるだろう。例えば、いくつかの実施形態では最適化のためにそのようなノードを選択しない。また、分解なしにそれらを扱う実施形態もある。例えば、プロセス２００は、２１５で識別される部分回路網候補の組合せ論理関数にのみ基づいて（２２０で）代替部分回路網を見つけようとする。したがって、他の実施形態では、部分回路網が実現する組合せ論理関数が演算できる限り、多出力ノードを含む任意の種類の回路網表現を使用することができる。
２０５の後で、プロセス２００は回路網１３５内の組合せ論理部分回路網Ｓを（２１０で）選択する。選択された部分回路網Sは代替用の部分回路網候補である。この選択された部分回路網は組合せ論理回路網でもある。すなわち、そのノードの各々が組合せ論理ノードということである。
いくつかの実施形態においては、プロセス２００はランダム成長プロセスによって部分回路網候補Ｓを（２１０で）選択する。多数のそのようなランダム成長プロセスが当技術分野で周知である。いくつかのそのようなプロセスが回路網内の組合せ論理ノードをランダムに選択し、次いで第１の選択された組合せ論理ノードまたはその後選択した組合せ論理ノードに接続されている他の組合せ論理ノードをランダムに選択する。この手順をノードがある種の部分回路網の複雑さに達するまで実行する（例えば、部分回路網への入力変数の総数が一定の範囲に収まるまで）。回路網内の順序論理ノードと遭遇する部分回路網候補の成長の任意の場所で、成長は終了する（すなわち、その場所が部分回路網候補の入力または出力になる）。特定の組合せ論理ノードで成長が終了すると、所望の複雑さのレベルに達するまで指定された部分回路網候補の他のノードで成長を続けることができる。
場合によっては、２１０で識別される部分回路網は複数の出力を有する（すなわち、識別された部分回路網が複数の関数を実行する）。いくつかの実施形態においては、ランダム成長プロセスによって、選択された部分回路網Ｓは部分回路網のすべての入力に依存する少なくとも１つの出力を確実に有することができる。これらの実施形態においては、以下にさらに説明するように、そのような判定基準を用いてデータベース索引付けを容易にする。
図４は、図３に部分的に示す回路網から選択した組合せ論理部分回路網４００の一例を示す。図４に示す部分回路網４００は、４つの入力Ｘ０〜Ｘ３、３つの回路素子３０５〜３１５、および３つの出力Ｙ０〜Ｙ２を有する。３つの回路素子はＡＮＤゲート３０５、ＮＡＮＤゲート３１０およびＯＲゲート３１５である。選択された部分回路網の３つの出力によって表される３つの関数の組合せ論理表現は以下の通りである。
【００１５】
【数１】
2005520243.tif 000003
【００１６】
部分回路網４００で、出力Ｙ２は部分回路網のすべての入力Ｘ０〜Ｘ３に依存する。
２１０の後で、プロセス２００は、選択された部分回路網候補Ｓによって実現される組合せ論理関数Ｆの集合を（２１５で）識別する。選択された部分回路網Ｓが１つの出力しか有さない時には、識別された集合Ｆは１つの論理関数Ｆ０しか含まない。他方、選択された部分回路網Ｓがいくつかの出力Ｙ０．．ＹＭを有する時には、識別された集合Ｆはいくつかのの論理関数Ｆ０．．ＦＭを含む。
出力関数Ｆの集合は２つの異なるタイプの回路素子から構成できる。第１のタイプは２１０で選択された部分回路網候補Ｓ内の他のどの回路素子の出力も受け取らない回路素子である。言い換えれば、第１のタイプの回路素子のすべての入力は選択された部分回路網候補Ｓへの入力である。第２のタイプは選択された部分回路網候補Ｓ内の少なくとも１つの他の回路素子の出力を受け取る回路素子である。第２のタイプの回路素子の入力の一部またはすべては選択された部分回路網候補Ｓ内の他の回路素子から得られる。
第１のタイプの回路素子から得られる部分回路網候補の出力関数は第１のタイプの回路素子の局所関数に過ぎない。例えば、図４に示す例では、部分回路網の出力Ｙ０およびＹ１は第１のタイプの回路素子３０５および３１５から得られる。上記の式（１）および（２）に示すように、これらの出力はＡＮＤゲート３０５およびＯＲゲート３１５の局所関数に過ぎない。
他方、第２のタイプの回路素子の出力で供給される関数を導き出さなければならない。そのような関数は第２のタイプの回路素子の局所関数と第２のタイプの回路素子がその１つまたは複数の出力を受け取る１つまたは複数の回路素子から導き出される。例えば、図４に示す例では、部分回路網の出力Ｙ２は第２のタイプの素子３１０から得られる。式（３）に示すように、この出力はＮＡＮＤゲート３１０の局所関数と、ＡＮＤゲート３０５およびＯＲゲート３１５の局所関数から導き出される。
【００１７】
上記のように、各出力関数は以下の実施形態のＲＯＢＤＤによって表される。これらの実施形態のいくつかでは、プロセス２００はＢｕＤＤｙ（登録商標）ソフトウェア・パッケージを用いて２１０で選択された部分回路網候補Ｓによって実現される組合せ論理関数Ｆの集合内の各関数のＲＯＢＤＤ表現を識別する。
特に、プロセス２００は選択された部分回路網候補のグラフ・データ構造体を横断して組合せ論理部分回路網内の各ノードを検証する。プロセス２００は第１のタイプのノード（すなわち、他のいかなるノードの出力も受け取らないノード）から開始する。これらのノードの各々について、このプロセスはＢｕＤＤｙパッケージに受け取った部分回路網内のノードの局所関数（ＲＯＢＤＤ形式の）と入力を与える。次に、ＢｕＤＤｙパッケージは、組合せ論理部分回路網内の入力の表現を説明するために変更された後で基本的にその局所関数であるノードの出力関数を識別する。
すべての第１のタイプのノードについて識別した後で、プロセスは、出力をこのノードに供給するノードの集合のＲＯＢＤＤを識別した後で各々の第２のタイプのノードを確実に選択できるように、第２のタイプのノード（すなわち、他の少なくとも１つのノードの出力を受け取るノード）に移行する。各々の選択された第２のタイプのノードについて、プロセス２００はＢｕＤＤｙパッケージにノードの局所関数（ＲＯＢＤＤ形式の）、部分回路網内のノードの入力、およびその出力をこのノードに供給するノードの集合のＲＯＢＤＤを供給する。次に、ＢｕＤＤｙパッケージは受け取った情報に基づいてノードの出力関数（ＲＯＢＤＤ形式の）を識別する。
【００１８】
ＢｕＤＤｙパッケージに関する情報はＪｏｒｎ  Ｌｉｎｄ−Ｎｉｅｌｓｅｎ、Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍｓ  Ｓｅｃｔｉｏｎ  ａｔ  ｔｈｅ  Ｄｅｐａｒｔｍｅｎｔ  ｏｆ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｔｅｃｈｎｏｌｏｇｙ、Ｔｅｃｈｎｉｃａｌ  Ｕｎｉｖｅｒｓｉｔｙ  ｏｆ  Ｄｅｎｍａｒｋ、またはｈｔｔｐ：／／ｗｗｗ．ｉｔｕ．１２／ｒｅｓｅａｒｃｈ／ｂｕｄｄｙ／から、またはｂｕｄｄｙ＠ｉｔｕ．１２にｅメールを送ると入手できる。
当業者であれば、他の実施形態においては、実現された組合せ論理関数の集合を異なる方法で識別することができることを理解することができるだろう。例えば、いくつかの実施形態においては、コロラド大学提供のＣＵＤＤパッケージなどの他のソフトウェア・パッケージを使用することができる。しかし、組合せ論理関数にＲＯＢＤＤ表現を使用できない実施形態もある。いくつかの実施形態においては、真理値表表現または他の表現を使用することができる。さらに他のＢＤＤ変形表現を使用することができる実施形態もある。
２１５の後で、プロセス２００は、（２２０で）回路網データ記憶域１０５に照会して、２１５で識別された組合せ論理関数の集合を実施する１つまたは複数の代替部分回路網を記憶しているか否かを決定する。回路網のデータ記憶域は、識別された組合せ論理関数の集合を、１つまたは複数の代替部分回路網がデータ記憶域に記憶された際の基準になったパラメータに変換する。したがって、回路網のデータ記憶域はこのパラメータを用いてデータ記憶域内の１つまたは複数の代替部分回路網を識別しようとする。
【００１９】
以下の実施形態では、データ記憶域１０５はデータベースであり、回路網データベースによって生成されるパラメータは事前集計された部分回路網を記憶するデータベース・テーブルへの整数インデックスの集合である。回路網データベースは、これらのインデックスを用いて、生成されたインデックスの集合に従ってデータベース内に記憶されている任意の代替部分回路網Ｃを取り出す。２２０の照会への応答の回路網データベースの動作について図５〜図１７を参照しながら以下にさらに説明する。当業者であれば、他の実施形態においては、異なる記憶構造体（例えば、データ・ファイル）および／または異なる記憶パラメータ（例えば、文字列インデックス）を使用することができることを理解することができるだろう。
回路網データベース１０５が２１５で識別された組合せ論理関数の集合を実施する代替部分回路網をまったく記憶していないとこのプロセスが（２２０で）判定すると、プロセスは２４０に移行する。これについて以下に説明する。逆に、プロセスがそのような１つまたは複数の代替部分回路網を識別すると、プロセスは（２２５で）１つまたは複数のコスティング・エンジン１３０を用いて、２１０で選択された部分回路網候補と２２０で識別された各々の代替部分回路網のコストを計算する。
コスティング・エンジンはシンセサイザ１００が特定の技術に結びついている設計を最適化しているときに実際の物理コストを推定することができる。例えば、面積エンジン１２５は、部分回路網候補または代替部分回路網の総面積、回路素子の数などを推定することができる。タイミング・エンジン１２０は、部分回路網のタイミング挙動、遅延などを推定することができる。電力エンジン１４０は、部分回路網の消費電力を推定することができる。
【００２０】
他方、シンセサイザが非結合設計を対象にしている時には、オプティマイザ１１０は、部分回路網候補または代替部分回路網のより抽象的なコストを計算する１つまたは複数のコスティング・エンジンを使用する。例えば、面積エンジン１２５は、非結合部分回路網の「サイズ」を、その最終面積のある推定値、最低レベルおよび中間レベル入力、部分回路網の回路素子が実行する関数内の変数の数、または他の抽象的な定量によって測定することができる。別のコスティング・エンジンは部分回路網の「深さ」をその部分回路網の段数プラス各回路素子の内部深さに関する推定値として推定することができる。また、オプティマイザはそのような抽象的なコスティング・エンジンを結合設計に使用することができる。
いくつかの実施形態においては、オプティマイザはコスティング・エンジンの１つのみを使用して（例えば、タイミング・エンジン１２９または面積エンジン１２０のみを使用して）、各々の部分回路網候補または代替部分回路網の１種類のコストのみを計算する（例えば、タイミング・コストまたは面積コストのみを計算する）。他の実施形態では、オプティマイザはいくつかのコスティング・エンジンを使用して（例えば、タイミング・エンジンと面積エンジンの両方を使用して）、問題の各々の部分回路網の数種類のコストを計算する。これらの実施形態のいくつかでは、各部分回路網について生成されたコストは、部分回路網の単一のコストに重み付けしたまたは重み付けしない方法で組み合わせられる。他の実施形態ではこの限りではない。
計算されたコストに基づいて、プロセス２００は、次に（２３０で）識別された代替部分回路網が受け入れられるか否かを決定する。この決定はオプティマイザ１１０が実行する最適化のタイプによって異なる。例えば、ある種の最適化のタイプ（ローカル最適化など）は、２１０で識別された元の部分回路網より悪いコストを受け入れない。他の最適化技法（シミュレーテッド・アニーリングなど）は、計算されたコストがより悪い代替部分回路網を受け入れるが、プロセス２００の反復回数が増加すると共に受け入れるようになるコストのペナルティを減らす（すなわち、不利益な置き換えの回数を減らす）。
何らかの識別された代替部分回路網が受け入れられるか否かの（２３０での）決定は、目的関数の最適化にのみ基づく場合もあり、または一定の制約内での目的関数の最適化に基づく場合もある。さらに、目的関数は１種類の計算されたコストにのみ関連するか、または数種類の計算されたコストの（重み付けしたまたは重み付けしていない）組合せに関連する。同様に、制約がある場合、制約は１種類の計算されたコストにのみ関連するか、または数種類の計算されたコストに関連する。目的関数の例は、共に２２５で計算できる面積コスティング関数およびタイミング・コスティング関数を含む。目的関数の別の例は、面積コストとタイミング・コストの重み付け組合せを生成するコスティング関数である。そのような関数は２２５で計算でき、または２２５で計算されたコストに基づいて２３０で計算できる。制約の例は、最大面積、時間、深さ制約、および／または最大消費電力を含むことができる。
プロセス２００が２３０で受け入れ可能な代替部分回路網を見つけられない場合、２４０に移行する。この処理を以下に説明する。他方、プロセスが２３０で受け入れ可能な１つまたは複数の代替部分回路網を見つけた場合、２１０で識別された部分回路網を受け入れ可能な部分回路網の１つに（２３５で）置き換える。２つ以上の代替部分回路網が受け入れ可能な場合、プロセス２００は受け入れ可能な部分回路網の１つをランダムに選択する。当業者であれば、他の実施形態においては、コスティングに関して最善の部分回路網を選択でき、またはｋ個の最善の部分回路網（ここで、ｋはユーザ定義パラメータ）から１つをランダムに選択できることを理解することができるだろう。２３５の後で、プロセスは２４０に移行する。
２４０で、プロセスは停止判定基準に達したか否かを決定する。達していない場合、２１０に戻って別の部分回路網候補Ｓを識別し、この部分回路網について以降の動作を繰り返す。達している場合、プロセス２００は終了する。
【００２１】
本発明の異なる実施形態では、オプティマイザは異なる判定基準を使用する。例えば、この判定基準はよりよい代替部分回路網を識別することなくプロセス２００によって実行される反復回数に関連していてもよい。あるいは、単に総反復回数に関連していてもよい。２４０の停止判定基準は、オプティマイザ１１０が実行する最適化のタイプによって異なる。最適化の１つのタイプはシミュレーテッド・アニーリングである。これは、Ｎａｈａｒ他の、「Ｓｉｍｕｌａｔｅｄ  Ａｎｎｅａｌｉｎｇ  Ａｎｄ  Ｃｏｍｂｉｎａｔｉｏｎａｌ  Ｏｐｔｉｍｉｚａｔｉｏｎ」、Ｐｒｏｃｅｅｄｉｎｇ  ｏｆ  ｔｈｅ  ２３  Ｄｅｓｉｇｎ  Ａｕｔｏｍａｔｉｏｎ  Ｃｏｎｆｅｒｅｎｃｅ、１９８６などの多数の出版物に記載されている。シミュレーテッド・アニーリングのバージョンを使用する時の最適化プロセス２００の擬似コードは次の通りである。
・Ｓ：Ｓ＿０（Ｓ＿０は初期解）
・Ｔ：Ｔ＿０（Ｔ＿０は初期温度）
・Ｉｎｎｅｒ＿Ｌｏｏｐ＿Ｃｏｕｎｔ：＝Ｏｕｔｅｒ＿Ｌｏｏｐ＿Ｃｏｕｎｔ：＝０
・Ｉｎｎｅｒ＿Ｌｏｏｐ＿Ｍａｘ：＝ｉ＿０（内部ループの最大反復回数）
・Ｏｕｔｅｒ＿Ｌｏｏｐ＿Ｍａｘ：＝ｉ＿ｍａｘ（外部ループの最大反復回数）
・Ｒｅｐｅａｔ
・Ｒｅｐｅａｔ
・Ｉｎｎｅｒ＿Ｌｏｏｐ＿ＣｏｕｎｔおよびＯｕｔｅｒ＿Ｌｏｏｐ＿Ｃｏｕｎｔを１だけインクリメントする；
・置き換えのための部分回路網候補を識別する；／／図２の２１０を参照；
・関数Ｆの集合を識別する；／／図２の２１５を参照
・置き換える候補の呼び出し照会マネジャー；／／図２の２２０を参照；
・置き換えが返送された場合、
・各置き換えをコスティングする／／図２の２２５を参照；
・少なくとも１つの置き換えが受け入れ可能な場合、受け入れ可能な置き換えの１つをＮｅｗＳとしてランダムに選択する／／図２の２３０を参照；
・Ｉｆ（ｈ（ＮｅｗＳ）≦ｈ（ＣａｎＳ））ｏｒ（Ｒａｎｄｏｍ＜ｅｘｐ（（ｈ（ＣａｎＳ）−ｈ（ＮｅｗＳ））／Ｔ）），／／図２の２３０を参照
・Ｔｈｅｎ  ｒｅｐｌａｃｅ  ＣａｎＳ  ｗｉｔｈ  ＮｅｗＳ／／図２の２３５を参照；
・Ｕｎｔｉｌ  （Ｉｎｎｅｒ＿Ｌｏｏｐ＿Ｃｏｕｎｔ＝Ｉｎｎｅｒ＿Ｌｏｏｐ＿Ｍａｘ）ｏｒ（Ｏｕｔｅｒ＿Ｌｏｏｐ＿Ｃｏｕｎｔ＝Ｏｕｔｅｒ＿Ｌｏｏｐ＿Ｍａｘ）
・Ｔ：＝ａｌｐｈａ＊Ｔ；Ｉｎｎｅｒ＿Ｌｏｏｐ＿Ｍａｘ＝ｂｅｔａ＊Ｉｎｎｅｒ＿Ｌｏｏｐ＿Ｍａｘ；Ｒｅｓｅｔ  Ｉｎｎｅｒ＿Ｌｏｏｐ＿Ｃｏｕｎｔ
・Ｕｎｔｉｌ  Ｏｕｔｅｒ＿Ｌｏｏｐ＿Ｃｏｕｎｔ＝Ｏｕｔｅｒ＿Ｌｏｏｐ＿Ｍａｘ／／図２の２４０を参照；
【００２２】
この擬似コードで、Ｔ＿０、ｉ＿０、ｉ＿ｍａｘアルファ、ベータはシミュレーテッド・アニーリングのパラメータである。これらのパラメータは、ユーザが指定してもよく、オプティマイザが設定してもよい。いくつかの実施形態では、アルファは０．９８で、ベータは１．１である。アニーリング・パラメータの選択は十分に研究されている。これらのパラメータの指定方法は、Ｍ．Ａ．Ｓａｌｅｈ  Ｅｌｍｏｈａｍｄ他の、「Ａ  Ｃｏｍｐａｒｉｓｏｎ  ｏｆ  Ａｎｎｅａｌｉｎｇ  Ｔｅｃｈｎｉｑｕｅｓ  ｆｏｒ  Ａｃａｄｅｍｉｃ  Ｃｏｕｒｓｅ  Ｓｃｈｅｄｕｌｉｎｇ」、２ｎｄ  ｉｎｔｅｒｎａｔｉｏｎａｌ  ｃｏｎｆｅｒｅｎｃｅで発行、ＰＡＴＡＴ９７で開示されている。また、例えば、Ｓｕｒｅｎｄｒａ  Ｎａｈａｒ他の、「Ｓｉｍｕｌａｔｅｄ  Ａｎｎｅａｌｉｎｇ  ａｎｄ  Ｃｏｍｂｉｎａｔｉｏｎａｌ  Ｏｐｔｉｍｉｚａｔｉｏｎ」、Ｕｎｉｖｅｒｓｉｔｙ  ｏｆ  Ｍｉｎｎｅｓｏｔａ、２３  Ｄｅｓｉｇｎ  Ａｕｔｏｍａｔｉｏｎ  Ｃｏｎｆｅｒｅｎｃｅ，  ＰＰ．２８７−２９９を参照されたい。また、シミュレーテッド・アニーリングのためのパラメータを決定するためのいくつかのソフトウェア・パッケージが利用できる。そのようなパッケージの１つがＬｅｓｔｅｒ  Ｉｎｇｂｅｒ著のＡＳＡである（ｗｗｗ．ｉｎｇｂｅｒ．ｃｏｍ）。
評価関数ｈ（）はタイミング・エンジンなどのコスティング・エンジンの１つによって実行される。Ｒａｎｄｏｍは内部戻りループの各パス内で生成される区間［０，１）内のランダムな値である。また、上記の例では、停止判定基準は、Ｏｕｔｅｒ＿Ｌｏｏｐ＿Ｃｏｕｎｔによって記録される総反復回数である。
いくつかの実施形態では、プロセス２００が終了した後で、回路網がまだそのレベルに達していない場合、グローバル・オプティマイザが、最適化された回路網を技術レベル記述にマッピングする。言い換えれば、最適化された回路網が特定の技術ライブラリに結びついていない場合、いくつかの実施形態のグローバル・オプティマイザ１１０は、変換を実行するための標準技法を用いて回路網を技術レベル回路網に変換する。これらの実施形態のいくつかでは、グローバル・オプティマイザはプロセス２００を繰り返すことでこの技術マッピングを実行する。ただし、今回は目標技術ライブラリに結び付いているデータベースを使用する（すなわち、目標技術ライブラリから得た回路素子のみから構成される部分回路網のみを記憶するデータベースを使用する）。そのような技術マッピングについては以下の第Ｖ章で説明する。
【００２３】
以下、第ＩＩＩ章で２２０の検索照会に応答した回路網データベース１０５の動作を説明する。次に、第ＩＶ章で、部分回路網候補のオフライン生成のいくつかのプロセスとデータベース１０５へのこれらの候補の記憶について説明する。これらのプロセスは、データ・ゼネレータ１１５と回路網データベース１０５によって実行される。
ＩＩＩ．回路網データベース
回路網データベース１０５は多数の（例えば、数百万の）部分回路網を記憶し、記憶された部分回路網の照会をサポートするように設計されている。以下の実施形態では、このデータベースは以下の特徴を有する。第１に、回路網データベース１０５は各部分回路網を完全に記憶し、さらにその部分回路網が実行する論理関数に関するすべての情報を記憶する。第二に、以下の実施形態では、各々の記憶された部分回路網は、それぞれがグローバル・オプティマイザによって独立して分析することができる（例えば、独立して検証、置き換えができる）１つまたは複数の回路素子を含む。言い換えれば、各部分回路網の回路素子は、１つのエンティティとして扱う必要はなく、別々の素子として扱うことができる。別の実施形態では、記憶された部分回路網は合成オプティマイザが１つのエンティティとして分析する必要がある破壊可能なブロックの一部であるいくつかの回路素子を含むことができる。
第三に、記憶された部分回路網はすべての既存の回路網を所与のサイズまで開発するためにマシン生成できる。例えば、いくつかの実施形態では、記憶された部分回路網は所与の複雑さまで（例えば、２入力回路素子７個の複雑さまで）の回路網で実現することができる任意の論理関数の任意の実施を含むことができる。
第四に、回路網データベースは、多くの部分回路網を効率的に記憶できる部分回路網用の新しい符号化方法を使用する。第五に、このデータベースは、メモリとＣＰＵ処理時間を効率的に使用する索引付け方法を使用する。この索引付け方法は、多値論理関数照合の問題を整数の１次および２次インデクスの集合に基づくリレーショナル・データベース・システムに変換する。こうして、回路網データベースは標準のデータベース・システムの任意の方法を用いて高速検索を可能にする。第五に、データベースはディスク上または物理メモリ内に常駐でき、あるいは部分的に両方のメディア上に常駐できる（例えば、ファイルイン／ファイルアウト・スワッピング機構を用いて）。
【００２４】
図５は、いくつかの実施形態での回路網データベース１０５のブロック図である。この図に示すように、データベースは照会マネジャー５０５、回路網エンコーダ５１０、インデクサ５１５、テーブル・マネジャー５２０、およびデータベース・テーブル５２５を含む。
Ａ．照会マネジャー
グローバル・オプティマイザ１１０から、照会マネジャー５０５は、組合せ論理関数の集合Ｆを実行する部分回路網の照会を受け取る。受け取った組合せ論理関数の集合は１つの関数Ｆ＿１またはいくつかの関数Ｆ＿１，．．．，Ｆ＿Ｍを含む。以下の実施形態では、受け取った集合内の各組合せ論理関数はＲＯＢＤＤ形式である。しかし、当業者であれば、他の形式（真理値表、記号形式、他のタイプのＢＤＤなど）も受け取った組合せ論理関数を表すために使用できることを理解することができるだろう。
受け取った照会に応答して、照会マネジャー５０５は、回路網エンコーダ５１０、インデクサ５１５、およびテーブル・マネジャー５２０と対話してデータベース・テーブル５２５に記憶されその照会に一致する部分回路網の集合を識別しようとする。言い換えれば、照会マネジャーは、受け取った関数の集合内のすべての関数を計算（実現）する事前集計された部分回路網を識別しようとする。
【００２５】
図６は、照会マネジャーが組合せ論理関数の集合Ｆの受け取った照会に応答して実行するプロセス６００を示す。図６に示すように、照会マネジャーは最初、入力関数の受け取った集合をインデクサ５１５に（６０５で）渡す。このインデクサは各関数を整数インデクスに翻訳してデータベース・テーブル５２５内に記憶する。
言い換えれば、インデクサ５１５は１つまたは複数の関数Ｆの集合から１つまたは複数のインデクスＩを生成する。以下の実施形態では、インデクサは、単一関数照会Ｆ＿１を単一インデクスＩ＿１に変換して回路網データベース内に記憶する。この単一インデクスは照会の関数を実現する１つまたは複数の部分回路網の集合を識別する。多関数照会の場合、このインデクサは、１つまたは複数の関数をピボット関数として選択し、このピボット関数に基づいて入力変数の順序を指定し、このピボット関数のインデクスを生成する。照会内に２つ以上のピボット関数がある場合、インデクサはピボット関数からランダムに選択する。また、ピボット関数について指定できるいくつかの入力変数の順序（以下の入力変数構成とも呼ばれる）がある場合、インデクサは実行可能な入力変数構成からランダムに選択する。ピボット関数の指定された入力変数順序に基づいて、インデクサは照会の非ピボット関数の各々のインデクスを生成する。インデクサ５１５について図７〜図９を参照しながら以下にさらに説明する。
【００２６】
インデクサがインデクスＩの集合を（６０５で）返すと、照会マネジャー５０５はこの集合をテーブル・マネジャー５２０に（６１０で）渡す。テーブル・マネジャー５２０はインデクスの集合に基づいて分類された事前集計された部分回路網を記憶するデータベース・テーブル５２５と対話する。以下の実施形態では、データベース・テーブルは、リレーショナル・データベース方法を用いてすべての部分回路網とそれに関連するインデクスを共に記憶する。いくつかの実施形態においては、データベース・テーブルはまた、記憶された部分回路網ごとに、部分回路網の実際のまたは推定サイズまたは速度などの追加データを記憶する。さらに、部分回路網はこれらのテーブル内に符号化された形式で記憶されている。
受け取ったインデクスＩの集合に基づいて、テーブル・マネジャー５２０は、データベース・テーブル５２５から事前集計された代替部分回路網の集合を取り出そうとする。テーブル・マネジャーがデータベース・テーブルから代替部分回路網を成功裏に取り出すと、テーブル・マネジャーはまた、代替部分回路網ごとにデータベース内に記憶されている追加のパラメータ（推定または実際のサイズまたは速度など）を取り出すことができる。グローバル・オプティマイザはそのようなパラメータを用いて、選択された部分回路網候補をデータベースから取り出された代替部分回路網に置き換えるか否かを決定する。データベース・テーブル５２０とテーブル・マネジャー５１５の動作について図１５〜図１７を参照しながら以下にさらに説明する。
６１０の後で、照会マネジャーはテーブル・マネジャーが６１０で受け取ったインデクスの集合について代替部分回路網を返したか否かを（６１５で）決定する。返していない場合、プロセスは６５５に移行する（以下に説明する）。返している場合、照会マネジャーは６１０でテーブル・マネジャーが取り出した１つの代替部分回路網を（６２０で）選択する。
テーブル・マネジャーが取り出した代替部分回路網は符号化された形式である。したがって、照会マネジャーは回路網エンコーダ５１０に６２０で選択した代替部分回路網を復号するように（６２５で）指示する。回路網エンコーダはこの部分回路網を（１）部分回路網の回路素子ごとに１つのノードと、部分回路網の回路素子間の接続ごとに１つのエッジを有するリンクされたグラフ・データ構造体と、（２）グラフ構造のノードごとの局所関数とに復号する。また、各局所関数は、いくつかの実施形態においてはＲＯＢＤＤで表される。いくつかの実施形態で使用される回路網符号化および復号化について第ＩＩＩ．Ｄ章でさらに詳しく説明する。
【００２７】
６２５で代替部分回路網を復号化した後で、照会マネジャーは、６２０で選択した代替部分回路網が２１０で選択した部分回路網候補と一致するか否かを（６３０で）決定する。以下の実施形態では、代替部分回路網の特定の入力変数構成について代替部分回路網が部分回路網候補のすべての出力関数（すなわち、部分回路網候補について２１５で識別された関数Ｆの集合内のすべての関数）を実行する場合に限って、代替部分回路網は部分回路網候補と一致する。照会マネジャーのこの決定はインデクサ５１５の動作の理解を必要とする。したがって、インデクサの動作を第ＩＩＩ．Ｂ．１〜３節で説明した後で第ＩＩＩ．Ｂ．４節でこの決定について説明する。また、第ＩＩＩ．Ｂ．４節で、照会マネジャーが、代替部分回路網が部分回路網候補のすべての出力関数を実行するか否かを検査しなければならない理由を説明する。
照会マネジャーが、６２０で選択した代替部分回路網が２１０で選択した部分回路網候補と一致しないと（６３０で）決定した場合、照会マネジャーは６４０に移行する（以下にさらに説明する）。ただし、選択した代替部分回路網が、選択した部分回路網候補に一致する場合、照会マネジャーは一致した代替部分回路網の集合に一致した代替部分回路網を（６３５で）追加する。６３５から、照会マネジャーは６４０に移行する。
６４０で、照会マネジャーは、６１０でテーブル・マネジャーが取り出したすべての部分回路網を検証したか否かを決定する。検証していない場合、照会マネジャーは、６２０に戻ってまだ検証していない別の取り出した部分回路網を選択し、この部分回路網について上記の以降の処理を繰り返す。
照会マネジャーが、テーブル・マネジャーが取り出したすべての代替部分回路網を検証したと（６４０で）決定した時には、照会マネジャーは取り出した代替部分回路網の少なくとも１つが、選択した部分回路網候補に一致したか否かを（６４５で）決定する（すなわち、一致する代替部分回路網の集合が少なくとも１つの代替部分回路網を含むか否かを決定する）。
【００２８】
含む場合、照会マネジャーは、グローバル・オプティマイザに返す一致する代替部分回路網の集合を（６５０で）返して終了する。いくつかの実施形態では、照会マネジャーは、グローバル・オプティマイザに返す部分回路網の最大数を指定するパラメータ（例えば、ユーザ定義パラメータ）をグローバル・オプティマイザから受け取る。これらの実施形態では、照会マネジャーは、（６５０で）これらのパラメータを用いてオプティマイザに返そうとする部分回路網を一致する部分回路網の集合から選択する。あるいは、他の実施形態では、照会マネジャーは、（１）返す１つまたは複数の一致する部分回路網をランダムに選択でき、（２）すべての一致する部分回路網を選択でき、または（３）指定された数のノードを超えるノードを有さないすべての一致する部分回路網候を選択できる。
他方、照会マネジャーが、取り出された代替部分回路網が、選択された部分回路網候補に一致しないと（６４５で）決定した場合、照会マネジャーは６５５へ移行する。上記のように、照会マネジャーはまた、テーブル・マネジャーが６１０で部分回路網を全く取り出すことができないと、６１５から６５５に移行する。６１５または６４５から、照会マネジャーが２１０で選択した部分回路網候補に対して、一致する事前集計された部分回路網を識別できないと、照会マネジャーは６５５で終了する。
この失敗は、照会マネジャーがいかなる取り出された代替部分回路網も選択された部分回路網候補の出力関数の集合を実行できると確認できないためである。あるいは、この失敗はインデクサによる入力変数構成の選択が原因である。上記のように、インデクサが複数のインデクスを生成しなければならない時には（すなわち、部分回路網候補がいくつかの出力関数を実行する時には）、インデクサはある入力変数構成をインデクスの基礎として選択する。この選択について第ＩＩＩ．Ｂ章でさらに説明する。インデクサの選択がデータベース内の部分回路網の事前集計時に選択された入力変数構成に一致しない場合、ランタイム最適化動作時にインデクサが生成したインデクスの集合は、一致する代替部分回路網を返さないことがある（すなわち、いかなる代替部分回路網も返さないか、２つの照合判定基準を満たさない代替部分回路網を返さないことがある）。
したがって、照会マネジャーは、６５５、６６０、および６６５を実行して一致の失敗がインデクサによる入力変数構成の選択による可能性を低減する。特に、６５５で、照会マネジャーは、照会が多関数照会であるか否かを決定する。多関数照会でない場合、一致発見の失敗は入力変数構成の選択によるものではない。したがって、プロセスは選択した部分回路網候補に対して、一致する部分回路網を見つけることができなかった（すなわち、部分回路網候補と同じ関数を実行する実現可能な事前集計された代替部分回路網を見つけることができなかった）旨をオプティマイザ１１０に（６７０で）通知し、この処理を終了する。
【００２９】
他方、関数が多関数照会であるとプロセスが（６５５で）決定した場合、照会マネジャーはインデクサが、６０５でインデクサの集合を返した時に２つ以上の入力変数構成の存在を指定したか否かを（６６０で）決定する。インデクサがこれを指定しなかった場合、一致する部分回路網の識別の失敗はインデクサによる入力変数構成の選択が原因ではない。したがって、照会マネジャーは、６６０から６７０に移行し、選択した部分回路網候補に対して、一致する部分回路網を見つけることができなかった旨をオプティマイザ１１０に通知する。ここで照会マネジャーは処理を終了する。
あるいは、インデクサが２つ以上の入力変数構成を（６０５で）指定した時には、照会マネジャーは、６６０から６６５に移行する。６６５で、照会マネジャーは、一致する部分回路網に帰結するインデクスの集合をインデクサから得る処理を十分な回数試行したか否かを決定する。いくつかの実施形態では、照会マネジャーは、関数Ｔを用いてインデクサからインデクスの集合を入手する試行回数を指定する。この関数は、６０５でインデクサが指定した入力変数構成の数Ｎに依存する整数を返す。なお、６０５で、インデクサは異なるピボット関数について毎回異なる数Ｎを返すことができることに留意されたい。
Ｎを受け取った時に関数ＴがＮに等しい場合（すなわち、Ｔ（Ｎ）＝Ｎの場合）、インデクサが毎回入力変数構成をランダムに選択するとして、照会マネジャーが毎回可能な入力順序を試行する予想回数は１回である。このプロセスを迅速化するために、いくつかの実施形態では、
Ｔ（Ｎ）＝ｍｉｎ［１０，（Ｎ／定数）］
と定義し、ここで、定数は時には５〜１０の範囲の数に設定される。別の実施形態では、（１）照会マネジャーおよびインデクサが事前集計時に使用した構成に一致する入力構成を見つける尤度「ｐ」（０＜ｐ≦１）を指定し、次に、（２）Ｔ（Ｎ）＝Ｎ＊ｐと定義する。
【００３０】
さらに別の実施形態では、照会マネジャーとインデクサが、事前集計時に使用する、特定の部分回路網を記憶する入力変数構成を見つけるために可能な入力変数構成を決定論的に検索する。しかし、そのような手法はより時間がかかる。この消費時間は入力変数構成のいずれにも一致する部分回路網がデータベース内に存在しない時に問題になる。また、このことは、入力構成の数が比較的大きい時（例えば、ｎ−ｗａｙ  ＡＮＤのような完全に対称なピボット関数など）に特に問題になる。
照会マネジャーが、インデクサに関数Ｔが指定した回数を超えてインデクスの集合を生成するよう要求していないと（６６５で）決定した場合、照会マネジャーは６０５に戻って再びインデクサにインデクスの集合の生成を指示する。上記のように、また以下にさらに説明するように、インデクサは実行可能なピボット関数とこのピボット関数の実行可能な入力変数構成をランダムに選択することでインデクスの集合を生成する。したがって、次に生成されるインデクスの集合によって、選択した部分回路網候補に一致する代替部分回路網の集合を識別することができる。
照会マネジャーが、一致する代替部分回路網を十分な回数だけ識別しようとして失敗したと６６５で決定すると、照会マネジャーは、選択した部分回路網候補に一致する部分回路網候補を見つけることができなかった（すなわち、部分回路網候補と同じ関数の集合を実行する実現可能な事前集計された代替部分回路網を見つけることができなかった）旨を（６７０で）オプティマイザ１１０に通知し、処理を終了する。
【００３１】
Ｂ．インデクサ
１つまたは複数の論理関数を実現する部分回路網を検索するには、これらの部分回路網を記憶するための効率的な検索付け方法を有する必要がある。この方法は特定の照会に一致するすべての部分回路網を完全に、または高い確率で返すことができなければならない。
インデクサ５１５はそのような索引付け方法を容易にする。特に、インデクサは、組合せ論理関数をデータベース・インデクスにマッピングする。リレーショナル・データベースについては、インデクスという用語は、記憶、分類および比較が可能な基本データ型（例えば、整数または文字列）を指す。以下の実施形態では、各々のインデクスは整数である。
【００３２】
以下の実施形態は、単一出力または多出力部分回路網（すなわち、１つの関数または複数の関数を実現する部分回路網）を識別できる直接索引付け方法を使用する。インデクサ５１５が照会マネジャーから単一関数または多関数照会を受け取るたびに、このインデクサは受け取った照会内の各関数を整数インデクスに変換してデータベース・テーブル５２５内に記憶する。次に、生成されたインデクスの集合を用いて、生成された集合内の各インデクスに関連する（すなわち、関連する）すべてのエントリ（すべての部分回路網）を回路網データベース内で検索することができる。
図７は、いくつかの実施形態でのインデクサ５１５の構成要素を示す。この図に示すように、このインデクサはトランスレータ７０５、入力順序識別子７１０、ハッシャー７１５、およびインデクス・マネジャー７２０を含む。このインデクサは、部分回路網の事前集計の際または回路網のランタイム最適化の際に使用することができる。それぞれの場合に、インデクサは、受け取った関数の集合のインデクスの集合を生成する。生成されたインデクスの集合を用いて、事前集計時に生成された部分回路網を記憶することができ、最適化の際に事前集計された部分回路網を取り出すことができる。
マネジャー７２０は、インデクサの動作フローを指示する。このマネジャーは照会マネジャー５０５、トランスレータ７０５、入力順序識別子７１０、およびハッシャー７１５と対話する。マネジャー７２０は、トランスレータ７０５を用いて各関数のＲＯＢＤＤ表現を中間整数表現に変換する。以下の実施形態では、この中間表現は以下にさらに説明する真理値表である。マネジャー７２０は、入力順序識別子７１０を用いて２１０で選択した部分回路網候補の入力変数の１つまたは複数の順序を指定する。次に、マネジャー７２０は、ハッシャー７１５を用いて各関数のインデクスを表すビット数を減らす。
【００３３】
図８および図９は、いくつかの実施形態でインデクス・マネジャー７２０が実行する２つのプロセスを概念図である。このマネジャーは、図８のプロセス８００を用いて単一関数照会の関数のインデクスを識別する。このマネジャーは、図９のプロセス９００を用いて多関数照会の複数のインデクスを生成する。特に、以下にさらに説明するように、多関数照会のプロセス９００は、（１）照会関数の１つをピボット関数として識別し、（２）プロセス８００を用いて、指定されたピボット関数のインデクスを識別し、入力変数構成を識別し、次に、（３）識別した入力変数構成に基づいて照会の各非ピボット関数のインデクスを識別する。
１．単一関数照会のインデクスまたは多関数照会のピボット・インデクスの計算
上記のように、インデクス・マネジャー７２０は、図８のプロセス８００を実行して単一関数照会のインデクスを識別する。また、このマネジャーは、このプロセスを図９のプロセス９００の一部として実行して、多関数照会のピボット・インデクスを識別する。プロセス８００が呼び出される時はいつでも、関数と演算パラメータが供給される。演算パラメータは、プロセス８００が入力変数構成をランダムにまたは決定論的にのいずれの方法で選択するかを指定する。演算パラメータは、最適化の際にランダムな演算を指定するが、事前集計時には決定論的演算を指定する。
図８に示すように、プロセス８００は最初、トランスレータ７０５にそれが動作する土台となる関数の真理値表表現を生成するようにトランスレータ７０５に（８０５で）指示する。上記のように、照会マネジャーはインデクサにＲＯＢＤＤ形式の関数を供給する。しかし、他の実施形態では、照会マネジャーは別の形式の関数を提供することもできる。
真理値表表現は、各ビットが入力値の１つの集合の関数の出力に対応する２進ビット列である。以下の表１は、２つの関数の真理値表の例を示す。第１の関数Ｇは、２入力ＡＮＤ関数である。以下の表に示すように、この関数の真理値表は０００１である。入力値の集合ごとに１つの出力ビットがあるので、この真理値表は４ビット長である。第２の関数Ｈは、第２の入力が反転した２入力ＡＮＤである。以下の表１に示すように、この関数Ｈの真理値表は０１００である。
【００３４】
【表１】
2005520243.tif 000004
【００３５】
入力１と入力２の順序が反転した場合、関数Ｇの真理値表は同じであるが、関数Ｈの場合には、００１０に変化する。以下にさらに説明するように、関数Ｈの真理値表の変化は関数の真理値表表現が入力信号の順序に依存するという事実を反映している。
関数の真理値表を（８０５で）生成した後で、プロセス８００は、入力順序識別子７１０に関数Ｆの真理値表の正準表現を識別するように（８１０で）指示する。正準表現は特定のアルゴリズムが常に選択する可能な表現の集合から選択した固定の一意的表現である。以下の実施形態では、この正準表現は、入力変数順序のすべての変形例の真理値表の集合から得たＦの最小の真理値表である。例えば、上記の関数Ｈは、入力が２つで、これら２つの入力順序を入れ替えることができるので、２つの入力変数構成を有する。これら２つの入力変数構成の真理値表は、０１００と００１０である。真理値表の最下位ビットを右端のビットにとると、関数Ｈの正準真理値表表現は、００１０になる。
いくつかの実施形態では、入力順序識別子は、ブランチアンドバウンド法に、８０５で識別した真理値表表現を初期開始点に用いてすべての入力変数構成を検証することなく関数の真理値表の空間を検索させることによって、関数Ｆの正準真理値表表現を識別する。そのようなブランチアンドバウンド法は、１９９８年６月１５〜１９日付けのＵｗｅ  ＨｉｎｓｂｅｒｇｅｒおよびＲｅｉｎｅｒ  Ｋｏｌｌａの、「Ｂｏｏｌｅａｎ  ｍａｔｃｈｉｎｇ  ｆｏｒ  ｌａｒｇｅ  Ｌｉｂｒａｒｉｅｓ」、ＤＡＣ９８に記載されている。
８１０で、入力順序識別子はまた、１つまたは複数の変数構成の集合を指定する。この集合の各入力変数構成は、８１０で識別される正準表現になる。言い換えれば、真理値表表現は、入力変数構成の指定された集合内の各構成について同一である。
当業者であれば、他の実施形態においては、正準化を実行するために供給される関数を真理値表表現に変換しないということを理解することができるだろう。これらの実施形態は供給される関数のＢＤＤ表現について直接８１０で正準化を実行する。Ｐｒｏｃ．ＩＣＣＡＤ  １９９２年、Ｊｅｒｒｙ  ＢｕｒｃｈおよびＤａｖｉｄ  Ｌｏｎｇの「Ｅｆｆｉｃｉｅｎｔ  Ｂｏｏｌｅａｎ  Ｆｕｎｃｔｉｏｎ  Ｍａｔｃｈｉｎｇ」は、半正準ＢＤＤ表現の獲得方法を記載している。プロセス８００は、真理値表表現の正準演算を適用する。これはこの手法が、高速マシン実行ビット単位演算を用いて効率的に実施できるので、特に入力数が少ない関数について高速であることが理由である。
正準真理値表表現およびこの表現に導く入力変数構成の集合を識別した後で、プロセス８００は受け取る演算パラメータに基づいて、識別された入力変数構成の集合を決定論的にまたはランダムに（８１５で）選択する。部分回路網候補のインデクスのランタイム生成時に、演算パラメータはプロセス８００に入力変数構成をランダムに選択するよう指示する。
【００３６】
しかし、事前集計時には、演算パラメータはプロセス８００に入力順序を決定論的に選択するよう指示する。入力順序識別子は、常に特定の順序で入力変数構成の集合を（８１０で）返す。プロセス８００が事前集計時に決定論的に動作する時には、プロセス８００は、常に入力構成の返された集合内の同じ入力構成を入力構成として選択する。例えば、いくつかの実施形態では、このプロセスは、常に返された集合内の第１の入力構成を指定された構成として選択する。事前集計時のインデクサ５１５の動作については後ほど第ＩＶ章でさらに説明する。
８１５で入力変数構成を選択した後、プロセス８００はハッシャー７１５に関数Ｆの結果的な正準真理値表表現を回路網データベースへのインデクスにマッピングするよう（８２０で）指示する。真理値表表現は多くの場合に長いビット列になるのでデータベースへの優れたインデクスとは言えない。したがって、ハッシャーが真理値表表現を真理値表表現より短いハッシュされたインデクス値にマッピングする。第ＩＩＩ．Ｂ．３章は本発明のいくつかの実施形態で使用するハッシャーについて説明する。８２０の後で、プロセス８００は８２０で識別したハッシュ値を（８２５で）返して終了する。
【００３７】
２．多関数照会のインデクスの計算
図９は、多関数照会のインデクスを識別するプロセス９００の概念図である。インデクス・マネジャー７２０は多関数照会を受け取るといつでもこのプロセスに指示する。図９に示すように、インデクス・マネジャー７２０は、最初、照会内の関数の１つをピボット関数として（９０５で）選択する。照会が複数のピボット関数を有する時には（２１０で選択した部分回路網候補が複数のピボット関数を有する時には）、インデクス・マネジャー７２０は照会内のピボット関数の１つをランダムに選択する。以下の説明で、分かり易くするために、選択されたピボット関数は第１の関数Ｆ＿１として指定される。
インデクス・マネジャー７２０はピボット関数を用いて部分回路網への入力変数の順序を識別する。したがって、以下の実施形態は、すべての入力変数に依存する関数をピボット関数として選択する。これは、そのような関数を用いてすべての入力変数に順序を課すことができるからである。
上記のように、プロセス２００の（２１０での）部分回路網候補の選択によって、確実に、この部分回路網候補がすべての入力変数に依存する少なくとも１つの関数を有することになる。また、以下の実施形態では、事前集計プロセスでは少なくとも１つの１つのピボット関数を有する多関数部分回路網のみを事前集計するので、部分回路網の事前集計はピボット関数のそのような選択にふさわしい。
【００３８】
他の実施形態においては、２１０での部分回路網候補の選択および／または部分回路網の事前集計は少なくとも１つのピボット関数（すなわち、すべての入力変数に依存する出力関数）の存在を保証する必要はない。例えば、プロセス９００は、代替部分回路網の検索を終了することによって、すべての入力変数に依存する出力関数を有さない部分回路網候補を扱うことができる。他の方法としては、プロセス９００は、大半の数の入力に依存する関数を（９０５で）選択し、次に他の部分回路網入力の位置を指定する特定の方法を用いることによって、ピボット関数を有さない多関数照会を扱うことができる。例えば、選択した部分回路網候補が５つの入力を有し、その最善の出力関数が４つの入力にしか依存しない場合、プロセス９００は最善の出力関数を選択し、第５の入力を左端の入力として位置付けることができる。したがって、ピボット関数の存在は重要ではなく、オプティマイザのヒット率を改善するために以下の実施形態で使用される。
９０５の後で、プロセス９００は選択されたピボット関数Ｆ＿１のインデクスＩ＿１を（９１０で）計算する。インデクス・マネジャーは図８のプロセス８００を用いてこのインデクス値Ｉ＿１を計算する。上記のように、８１０の正準化手順は、関数Ｆ＿１プラス入力順序の正準真理値表表現を返す。返された入力変数順序は照会内の残りの非ピボット関数のインデクスを生成するために使用される。
特に、特定の非ピボット関数ごとに、インデクス・マネジャーは（９１５で）トランスレータ７０５を用いて、９１０で返された入力変数順序に基づいて非ピボット関数の真理値表表現を生成する。また９１５で、インデクス・マネジャーはハッシャー７１５を用いて関数の生成された真理値表表現から各々の非ピボット関数のインデクスを生成する。次に、９２０で、インデクス・マネジャー７２０は生成されたインデクスの集合を照会マネジャー５０５に返す。
つまり、インデクサが使用する索引付け方法は本発明のいくつかの実施形態では以下のようになる。インデクサは単一関数照会を回路網データベースへの単一のインデクスに変換し、この単一のインデクスが照会の関数を実現する１つまたは複数の部分回路網を識別する。多関数照会の場合、このインデクサは関数の１つをピボット関数として選択し、このピボット関数に基づいて入力変数順序を指定し、このピボット関数のインデクスを生成し、次いで指定した順序に基づいて、照会の非ピボット関数の各々のインデクスを生成する。
【００３９】
以下に説明するように、事前集計プロセスは各々の特定の組合せ論理関数をただ１つのピボット・インデクスに対応させる。ピボット・インデクスは特定の関数がある種の照会のピボットとしての働きをする時にはいつでも使用される。各関数のピボット・インデクス（１次インデクスとも呼ばれる）は、事前集計時に、事前集計時にはこのインデクス生成プロセスが８１５でのランダムな選択とは逆に入力変数構成の１つを決定論的に選択するという点を除きプロセス８００と同様のプロセスを用いて生成するインデクスである。さらに、事前集計時は、各組合せ論理関数はいくつかの２次インデクスに対応する。関数Ｆの２次インデクスは、ある集合｛Ｇ，．．．，Ｆ，．．．｝（異なる関数Ｇがピボット関数になり、入力順序を決定する）について照会がなされるケースを数える（識別する）ために使用される。
【００４０】
３．ハッシャー
いくつかの実施形態では、ハッシャー７１５は、Ｚｂｉｇｎｉｅｗ  Ｊ．Ｃｚｅｃｈ他の、「Ａｎ  Ｏｐｔｉｍａｌ  Ａｌｇｏｒｉｔｈｍ  ｆｏｒ  Ｇｅｎｅｒａｔｉｎｇ  Ｍｉｎｉｍａｌ  Ｐｅｒｆｅｃｔ  Ｈａｓｈｉｎｇ  Ｆｕｎｃｔｉｏｎｓ」、Ｉｎｆｏｒｍａｔｉｏｎ  Ｐｒｏｃｅｓｓｉｎｇ  Ｌｅｔｔｅｒｓ、４３（５）；２５７〜２６４、１９９２年１０月（「Ｃｚｅｃｈ文書」）に記載されたハッシュ関数を使用する。このハッシュ関数は「最小」ハッシュ関数と呼ばれる。Ｃｚｅｃｈ文書は、このハッシュ関数の生成方法を詳しく説明している。
本明細書について言えば、最小ハッシュ関数は部分回路網の事前集計時に生成される。特に、事前集計時には、データ・ゼネレータは多数の部分回路網を生成する。各部分回路網について、データ・ゼネレータはインデクサに部分回路網の各ピボット関数の正準真理値表表現を計算させる。部分回路網が２つ以上の関数を実行する時には、さらにインデクサは正準真理値表表現に基づいて入力変数構成を指定し、部分回路網の各非ピボット関数の真理値表表現を生成する。計算された真理値表表現に基づいて、データ・ゼネレータはハッシュ関数クリエータ（図示せず）を用いて事前計算された真理値表表現を一意的なインデクス値に関連付け、この関連を実現するハッシュ関数を生成する。定義された（静的）ハッシュ・テーブルからの最小ハッシュ関数の作成については、Ｃｚｅｃｈ文書に詳しく説明されている。最適化の際に、ハッシャーは生成されたハッシュ関数を用いてハッシャーがインデクス・マネジャー７２０から受け取る各真理値表のインデクスを生成する。
この最小ハッシュ関数は、ハッシュ関数に入力される真理値表のサイズに依存する直線時間でハッシュ関数の単一の評価を実行する際に少量のメモリしか使用しないという利点を有する。ただし、この関数はいかなる真理値表表現についても値を常に返すという特性があるという矛盾点がある。事前計算されたテーブルの１つに等しい真理値表の場合、ハッシュ関数はその一意的なインデクス値を常に返す。他のどのような入力についても、この関数はある整数を返すが、返された値が有効な入力の有効な値か、または無効な入力の任意の出力なのかを検査するのは困難である。したがって、このハッシュ関数のために、照会マネジャーは取り出された代替部分回路網が選択された部分回路網候補の出力関数の集合を実行するか否かを６３０で決定しなければならない。
【００４１】
他の実施形態は、他のハッシュ手法を使用することができる。例えば、いくつかの実施形態では、Ｃｏｒｍｅｎ、Ｌｅｉｓｅｒｓｏｎ，ＲｉｖｅｓｔおよびＳｔｅｉｎの「Ｉｎｔｒｏｄｕｃｔｉｏｎ  ｔｏ  ａｌｇｏｒｉｔｈｍｓ」第２版、ＭＩＴ  Ｐｒｅｓｓ，２００１、第１１章に記載されたより従来のハッシュ技法を使用することができる。従来のハッシュ手法は有効なキーの（すなわち、有効な真理値表表現の）値しか指定しない。例えば、いくつかの従来のハッシャーは、「特定のキーのハッシュ・テーブルに記憶されている値を取り出す」照会と、「ハッシュ・テーブルに特定のキーのための要素が何か記憶されているか」の照会とをサポートする。他の従来のハッシャーは、キーのための要素が何も記憶されていない時には、「あるキーのためにハッシュ・テーブルに記憶されている値を取り出す」というどのような照会タイプについてもある専用のＮＵＬＬ値を返す。
従来のハッシャーには特定の真理値表についてハッシュされた値がないということを検出できるという利点がある。したがって、場合によっては、インデクサは関連するハッシュされた値を有さない関数のインデクスを返さず、代わりに、特定の関数の関連するインデクスがないことを照会マネジャーに通知する。このために、照会マネジャーはデータベースから関連しない部分回路網を取り出さず、したがって、６３０で一致する決定を実行する必要がない。他方、従来のハッシュ手法ではハッシュ・テーブル内にすべての有効なキーを記憶する必要がある。このため、すべての長い真理値表表現を記憶しなければならず、大量のメモリが必要になる。
【００４２】
４．照会マネジャーによる入力変数の訂正
上記のように、照会マネジャーは取り出された代替部分回路網が２１０で選択した部分回路網候補に一致するか否かを（６３０で）決定する。代替部分回路網が代替部分回路網の特定の入力変数構成の部分回路網候補のすべての出力関数（すなわち、部分回路網候補の２１５で識別された関数Ｆの集合内のすべての関数）を実行する場合に限って、代替部分回路網は部分回路網候補に一致する。
図１０〜図１３は、そのような一致決定の例を示す。図１０は回路網１０００の部分回路網候補１００５を示す。部分回路網候補は２つのＡＮＤゲート１０１０および１０１５と、ＮＡＮＤゲート１０２０を含む。部分回路網候補は入力ｘ＿０、ｘ＿１およびｘ＿２を図１０に示す順序で受け取る。出力関数がＢＤＤパッケージ（上記のＢｕＤＤＹなど）によって指定されている時には、入力変数はＢＤＤパッケージによって提供される整数インデクスに過ぎないので通常の順序を有する。
図１に示す例では、部分回路網候補１００５は１つの出力関数Ｆのみを有する。この出力関数に基づいて、インデクサはインデクスを生成し、テーブル・マネジャーは代替部分回路網を取り出す。図１１は復号化されたそのような代替部分回路網の概略回路図を示す。（この概略図は例示としてのものである。代替部分回路網が６２５で復号化されると、部分回路網はグラフとグラフ内の各ノードの局所関数で表される。）
【００４３】
図１１に示すように、代替部分回路網１１０５は２つのゲートと３つの入力Ｉ＿０、Ｉ＿１およびＩ＿２を有する。一方のゲートは反転入力を有する２入力ＡＮＤゲート１１１０である。他方のゲートは２入力ＡＮＤゲート１１１５である。入力は一般的な順序を有する。特に、代替部分回路網は復号化されると、リンクされたノード・リストからなるグラフである。代替部分回路網がｎ個の入力を有する場合、復号化された回路網構造は各入力に「ダミー」入力ノード１１２０を有する。これらの回路網入力の１つが供給される内部ノードは、回路網入力からそのノード入力の１つへの有向アークを有する。ダミー・ノードはアレイに記憶されるのでアレイ・インデクスのみによる一般の順序だけを有する。
６３０での照合処理は、代替部分回路網１１０５の出力関数の集合が２１０で選択した部分回路網候補の出力関数を含むように、この代替部分回路網の入力構成を識別しようとする。言い換えれば、照合処理は「ダミー」ノードのアレイの再順序付けと各ダミー・ノードの入力と代替部分回路網が部分回路網候補１００５の出力関数の集合の１つを実行できるようにする入力変数（ｘ＿０〜ｘ＿２）の１つとの相関関係を識別しようとする。
図１１に示すように、その入力構成のために、代替部分回路網１１０５の出力関数は部分回路網候補１００５の出力関数Ｆとは異なる真理値表を有する。ただし、図１２は部分回路網候補の出力関数Ｆと同じ出力関数を生成する（すなわち、同じ出力真理値表を有する）代替部分回路網１１０５の入力構成を示す。図１３は図１２に示す構成を回路網１０００に挿入する方法を示す。
【００４４】
図１４は、照会マネジャー５０５が代替部分回路網が２１０で選択した部分回路網候補に一致するか否かを６３０で決定するプロセスを示す。この図に示すように、プロセス１４００は最初、代替部分回路網のすべてのピボット関数を（１４０５で）識別する。言い換えれば、プロセス１４００は代替部分回路網の関数の集合Ｇ｛Ｇ＿０，．．．，Ｇ＿ｎ｝（ここで各関数は６２５での部分回路網の復号化後の入力順序に関して計算される）内のすべてのピボット関数を識別する。
次に、このプロセスは識別したピボット関数の１つを（１４１０で）選択する。選択したピボット関数について、照会マネジャーはインデクサにインデクスの集合を決定論的に計算させる（すなわち、同じピボット関数と同じ非ピボット関数の集合について常に同じインデクスの集合を生成するインデクス生成処理を実行する）。
この決定論的処理を実行するために、プロセス１４００は最初、ピボット関数の正準真理値表表現を生む実現可能な入力構成Ｐを（１４１５で）決定論的に識別する。そのような構成を識別するために、インデクス・マネジャー７２０は、（１）トランスレータ７０５にピボット関数の真理値表表現を生成させ、（２）入力順序識別子にピボット関数の最小値真理値表表現を生む入力構成の集合を識別させる。入力順序識別子は常に特定の順序で入力変数構成の集合を返す。インデクス・マネジャーは、１４１５で識別した入力構成Ｐと同じ入力構成の返された集合内の入力構成を常に選択する。例えば、いくつかの実施形態では、インデクス・マネジャーは常に返された集合内の第１の入力構成を指定された構成Ｐとして選択する。
ランタイム最適化中のインデクサの決定論的動作は以下にさらに説明するように、データベース生成時の決定論的動作と連携する。また、入力構成照合時のこの決定論的動作は、２１０で選択した代替部分回路網の関数の集合のインデクスの集合を生成する際のプロセス８００の上記のランダム化された動作とは異なる。そのランダム化された動作で、プロセス８００は特定の関数の実現可能な入力構成の集合から入力変数構成を（８１５で）ランダムに選択する。
【００４５】
入力変数構成Ｐを（１４１５で）決定論的に識別した後で、プロセス１４００は６０５で使用した構成に基づいて識別された入力構成を（１４２０で）再調整して、２１０で選択した部分回路網候補のインデクスの集合を生成する。例えば、部分回路網候補の出力関数の集合が初期構成Ｒを有し、インデクサが特定の関数の正準表現を生成する入力構成Ｒ’を（８１５で）選択したと仮定する。Ｒ’を得るために動作ＱをＲ上で実行しなければならない場合、プロセス１４００は動作Ｑの逆数を１４１５で識別した入力構成Ｐに適用する（すなわち、Ｑ−１（Ｐ）を適用する）ことで新しい構成を（１４２０で）獲得する。
次に、プロセス１４００は１４２０で識別された入力順序に基づいて、代替部分回路網によって実行された関数Ｈの集合を（１４２５で）識別する。いくつかの実施形態では、このプロセスはそのＲＯＢＤＤで各関数を（１４２５で）指定する。また、いくつかの実施形態では、出力関数の識別された集合は代替部分回路網の各ノードの出力を含む。特定ノードが代替回路網グラフ内の他のどのノードの出力も受け取らない時には、特定ノードの出力での出力関数は特定ノードの局所関数である。他の方法としては、特定ノードが代替部分回路網内の他の１つまたは複数のノードの出力を受け取る時には、特定ノードの出力での出力関数は特定ノードの局所関数とその出力を特定ノードが受け取る各ノードの局所関数から引き出すことができる。
１４２５の後で、プロセスは１４２５で識別された関数Ｈの集合が２１５で代替部分回路網の識別された関数Ｆの集合を含むか否かを（１４３０で）決定する。含む場合、代替部分回路網は１４２５で指定された入力構成の部分回路網候補に一致する。したがって、プロセス１４００は（１４３５で）一致とこの一致を生む入力構成を指定し、終了する。
他方、１４２５で識別された関数Ｈの集合が部分回路網候補の関数Ｆの集合を含まないとプロセスが（１４３０で）決定すると、プロセスは代替部分回路網の（１４０５で）識別されたすべてのピボット関数を検証したか否か（１４４０で）を決定する。検証していない場合、プロセスは１４１０に戻って別のピボット関数を選択し、この関数について以降の処理を繰り返す。検証している場合、プロセス１４００は代替部分回路網が部分回路網候補に一致しないと（１４４５で）指定し、終了する。
【００４６】
Ｃ．データベース・テーブルおよびテーブル・マネジャー
インデクサ５１５が照会マネジャーにインデクスの集合を返すと、照会マネジャーはテーブル・マネジャー５２０に、返されたインデクスの集合に関連するすべての部分回路網を取り出すように指示する。これに応答して、テーブル・マネジャーはデータベース５２５を検索して部分回路網の集合を返す。この集合は、データベース５２５が、受け取ったインデクスの集合に関連する部分回路網を１つも記憶していないときには空である。識別された部分回路網の集合が空でない場合、この集合内の部分回路網は符号化形式で、テーブル・マネジャーはこれらの部分回路網をこの形式で照会マネジャーに返す。
１．データベース・テーブル
以下の実施形態では、データベース５２５はリレーショナル・データベースで、テーブル・マネジャー５２０はこのデータベースの照会エンジンである。図１５および図１６は、データベース５２５が使用するデータベースのスキーマの概念図である。当業者であれば、これらの図は単に本発明のいくつかの実施形態のデータベース設計を概念的に示すもので、他の実施形態においては、他のデータベース設計を使用することができることを理解することができるだろう。
【００４７】
図１５および図１６は、５つのデータベース・テーブルを示す。これらのテーブルは（１）図１５に示すピボット・テーブル１５００と２次テーブル１５０５と、（２）図１６に示す部分回路網テーブル１５１０、グラフ・テーブル１５１５、および関数テーブル１５２０とを含む。
図１５に示すように、ピボット・テーブル１５０５はピボット・インデクス１５２５ごとに１つの行を含み、２次テーブルはピボット・インデクス１５２５ごとに１つまたは複数の行の集合を含む。さらに、ピボット・テーブル内の各々の特定のピボット・テーブルの行は、特定のピボット・テーブルの行のピボット・インデクスの２次テーブル１５０５内の最初の行１５３０と最後の行１５３５とを指定する。事前集計時に、同じピボット・インデクスに関連する２次テーブル１５０５内のすべての行は特定の順序で隣り合って配置される（例えば、各２次テーブルの行内に記憶された２次インデクスの昇順で分類される）。したがって、特定のピボット・テーブルの行は、すべての行を明示的に列挙するのではなく２次テーブル内の行の間隔のみを記述する必要がある（すなわち、最初と最後の２次テーブルの行のみを識別する必要がある）。
２次テーブル１５０５の行は可変長を有する。したがって、各行は行の長さを指定するフィールド１５４０を含む。さらに、２次テーブル１５０５の各行は特定のピボット・インデクスに対応する特定の２次インデクスを指定するフィールド１５４５を有する。２次テーブルの行は、以下にさらに説明するように、その２次インデクス・フィールド内にヌル値を記憶することができる。
また、２次テーブル１５０５は事前集計された部分回路網とピボットおよび２次インデクスの関係を表現する。特に、各々の特定の２次テーブルの行は特定の２次テーブルの行が記憶するピボットと２次インデクスのペアごとに１つまたは複数の回路網インデクスの集合を指定するフィールドの集合１５５０を有する。単一の行内の回路網インデクスの集合は事前集計時に特定の順序で（例えば、回路網インデクスの昇順で）分類される。回路網インデクスの各集合は１つまたは複数のインデクスを含むことができる。
照会マネジャーから受け取ったデータベース・インデクスＩの集合のピボット・インデクスの行の範囲を指定した後で、テーブル・マネジャーは受け取ったデータベース・インデクスの集合内の各２次インデクスの識別された範囲内の２次テーブル行を識別しようとする。テーブル・マネジャーが成功すると、すべての識別された２次テーブル行内に記憶された各回路網インデクスはテーブル・マネジャーが照会マネジャーに返すべき潜在的に一致する部分回路網を指定する。
２次テーブル行内に記憶された各回路網インデクスは、図１６に示すように、回路網テーブル１５１０内の行を指定する。回路網テーブル１５１０内の各行は、特定の部分回路網に対応する。以下に説明する実施形態においては、各部分回路網は、（１）１つまたは複数のノードを有するグラフと、（２）グラフの各ノードの局所関数を含む関数の集合とによって指定される。したがって、回路網テーブル内の各行はグラフ−テーブル・インデクス１５５５と関数−テーブル・インデクス１５６０とを指定する。
【００４８】
グラフ−テーブル・インデクス１５５５は、回路網テーブル行の回路網インデクスに対応する部分回路の符号化されたグラフ１５６５を記憶するグラフ−テーブル行を識別する。第ＩＩＩ．Ｄ章で以下にさらに説明するように、各々の符号化されたグラフ１５６５は符号化された形式で、（１）部分回路網の１つまたは複数のノードと、（２）これらのノードの接続とを指定する。また、図１６は、自行に記憶されているグラフの追加の属性を記憶するフィールドの集合１５７０を含むグラフ・テーブル１５１５内の各グラフ−テーブル行を示す。そのような属性の例はグラフによって表現される部分回路網の実際のまたは推定のサイズまたは速度を含む。通常、そのような属性はグラフ構造から引き出すことができるが、オプティマイザの動作を高速化するためにデータベース内に記憶することができる。
関数テーブル１５２０はグラフ・ノードの局所関数１５７５を記憶する。いくつかの実施形態では、関数は関数テーブル内にＲＯＢＤＤ形式で記憶される。関数テーブルは、このテーブルと回路網テーブル１５１内に記憶されている関数テーブル・インデクス１５６０によって索引付けされている。より詳細には、回路網テーブル行内の各関数−テーブル・インデクス１５１５は回路網テーブル行のグラフ−テーブル・インデクスによってグラフ・テーブル１５１５内に索引付けされたグラフ１５６５の特定のノードに対応する。回路網テーブル行はノードの順序に対応する特定の方法でその関数−テーブル・インデクスを記憶する。例えば、多関数の集合の場合、第１の関数インデクスは第１のノードの関数に対応し、第２の関数インデクスは第２のノードの関数に対応し、以下同様である。対応するグラフ・ノードについて、関数−テーブル・インデクスは関数テーブル内の関数１５７５を指定する。
【００４９】
図１６は１つの関数テーブルしか示していないが、他の実施形態では複数の関数テーブルを使用する。例えば、いくつかの実施形態では、２入力関数のすべてに１つの関数テーブル、３入力関数のすべてに１つの関数テーブル、４入力関数のすべてに１つの関数テーブル、５以上の入力関数のすべてに１つの関数テーブルを提供することができる。これらの実施形態のいくつかでは、特定のノードの特定の関数インデクスについて、テーブル・マネジャーが特定のノードの入力数を識別し、次に特定の関数インデクスを用いて、関数テーブル内の識別された入力数の関数を識別する。
上記のスキーマによって一致する回路網の検索が可能になる。言い換えれば、どのテーブルも完全に走査する必要はない。逆に、このスキーマによってピボット行への直接のアクセスと、２次行の２進検索と、２次行の交点の計算のためのリニア・スキャンと、関数テーブル、グラフ・テーブルおよび回路網テーブル内に記憶されている関数、グラフ、および回路網への直接のアクセスとが可能になる。
２．テーブル・マネジャー
１つまたは複数のインデクスＩ＿１，．．．，Ｉ＿ｎを含むデータベース・インデクスＩの集合が与えられると、テーブル・マネジャーは、各部分回路網ＳＮＷのグラフと関数の集合を返さなければならない。ここで、（１）各部分回路網ＳＮＷは受け取った集合のピボット・インデクスに関連し、（２）部分回路網ＳＮＷおよびピボット・インデクスは受け取った集合内のすべての２次インデクスに関連する。言い換えれば、テーブル・マネジャーはピボット・インデクスと受け取ったデータベース・インデクスの集合のすべての２次インデクスに関連するすべての部分回路網を返さなければならない。
このタスクはオラクル社（Ｏｒａｃｌｅ  Ｃｏｒｐ．）またはインフォミクス社（Ｉｎｆｏｒｍｉｘ，Ｉｎｃ．）によって提供されるような任意のリレーショナル・データベース管理システムによってサポートされる標準の関数である。したがって、テーブル・マネジャーは任意の商用の、または非商用の入手可能なリレーショナル・データベース・システムによって直接実現できる。
【００５０】
図１７は、テーブル・マネジャー５２０がいくつかの実施形態で使用してデータベース５２５から事前集計された部分回路網（すなわち、事前集計された符号化グラフおよび関数）を取り出すプロセス１７００の概念図である。テーブル・マネジャーは、１つまたは複数のインデクスを含むデータベース・インデクスＩの集合を受け取るたびにこのプロセスを実行する。
図１７に示すように、テーブル・マネジャーは、ピボット・テーブルが、受け取ったデータベース・インデクスの集合のピボット・インデクスの行を有するか否かを最初に（１７０５で）決定する。有さない場合、テーブル・マネジャーは一致する部分回路網がない（すなわち、データベースは照会のすべてのインデクスに関連する部分回路網を記憶していない）ということを照会マネジャーに（１７１０で）通知する。
有する場合、プロセスは受け取ったデータベース・インデクスの集合のピボット・インデクスのためのピボット・テーブル１５００内の行に（１７１５で）アクセスする。受け取ったデータベース−インデクスの集合が１つのインデクスしか含んでいない時には、この集合のピボット・インデクスはその唯一のインデクスである。他方、多インデクス集合のピボット・インデクスはプロセス９００が９０５および９１０で指定したインデクスである。
テーブル・マネジャーは、２次テーブル１５０５の行の範囲を識別するためにこの集合のピボット・インデクスのピボット・テーブル行に（１７１５で）アクセスする。この行の範囲は受け取ったデータベース−インデクスの集合のピボット・インデクスに関連するすべての２次インデクスを指定する。テーブル・マネジャーは、その行番号がこの行の「Ｐｉｖｏｔ＿Ｉｎｄｅｘ」に等しくなるようにピボット・テーブルは記憶されているので、ピボット・テーブル１５００を一定時間で検索することができる。
１７２０で、テーブル・マネジャーは受け取ったデータベース−インデクスの集合の２次インデクスを選択する。次に、テーブル・マネジャーは識別された範囲内の行が選択された２次インデクスに一致する２次インデクスを有するか否かを（１７２５で）決定する。有さない場合、テーブル・マネジャーは一致する部分回路網がないことを照会マネジャーに（１７１０で）通知し、終了する。
【００５１】
他方、プロセスが、選択された２次インデクスに一致する２次インデクスを有する行を識別した範囲内で（１７２５で）識別した場合、選択された行から回路網インデクスの集合を（１７３０で）取り出す。２次テーブル内の行は２次インデクスによって分類されるので、テーブル・マネジャーによるこのテーブルの検索は２進検索として効率的に実行される。また、受け取ったデータベース−インデクスの集合が１つのインデクスしか含んでいない場合、２次テーブル行が受け取った集合のピボット・インデクスと２次インデクスのヌルとを指定している場合、２次テーブル行は受け取ったデータベース−インデクスの集合に一致する。
次に、１７３５で、プロセスは受け取ったデータベース−インデクスの集合内のすべての２次インデクスを検索したか否かを決定する。検索していない場合、プロセスは１７２０に戻ってこの集合内の別の２次インデクスを選択する。検索している場合、プロセスは受け取ったデータベース・インデクスの集合が２つ以上の２次インデクスを含むか否かを（１７４０で）決定する。含まない場合、プロセスは１７５５に移行する。この処理について以下に説明する。
ただし、受け取ったデータベース・インデクスの集合が２つ以上の２次インデクスを含む場合、プロセスは１７３０で受け取ったすべての回路網インデクスの集合を（１７４５で）相互比較して、１７３０で取り出されたすべての回路網インデクスの集合内にある各回路網インデクスを識別する。回路網インデクスは特定の順序で分類されるので、テーブル・マネジャーはこの相互比較を直線時間で（すなわち、回路網インデクスの数と共に直線的に拡大縮小する時間量で）実行する。
【００５２】
次に、プロセスはこの相互比較の結果として集合が空であることがわかったか否かを（１７５０で）決定する。そうである場合、テーブル・マネジャーは一致する部分回路網がないことを照会マネジャーに（１７１０で）通知し、終了する。そうでない場合、プロセスは１７５５に移行する。プロセスが１７３０で取り出されたすべての回路網インデクスの集合内にあると識別する各回路網インデクスについて、プロセスは回路網テーブルからグラフ−テーブル・インデクスおよび関数−テーブル・インデクスを（１７５５で）識別する。上記のように、各回路網インデクスは、グラフ−テーブル・インデクスと関数−テーブル・インデクスの集合とを指定する。１７５５で、プロセスは、（１）各々の識別されたグラフ−インデクスを用いてグラフ・テーブルから符号化されたグラフを取り出し、（２）識別されたグラフ−インデクスに関連する関数インデクスの集合を用いて、取り出されたグラフのノードの関数の集合を取り出す。次に、テーブル・マネジャーは受け取ったグラフおよび関数の集合を（１７６０で）照会マネジャーに返す。
Ｄ．部分回路網符号化および復号化
テーブル・マネジャーがグラフおよび関数の集合を照会マネジャーに返すと、照会マネジャーは、テーブル・マネジャーが部分回路網を返したか否かを（６１５で）決定する。返した場合、照会マネジャーは返された部分回路網の１つを（６２０で）選択し、回路網エンコーダ５１０に選択された部分回路網を復号化するように（６２５で）指示する。
データベース内に多数の部分回路網を記憶するために、いくつかの実施形態では部分回路網のコンパクトな符号化を使用する。以下の実施形態では、３つの符号化レベルを有する符号化方法を使用する。
【００５３】
１．グラフおよび関数テーブル
符号化の第１のレベル（図１６を参照しながらすでに述べた）は、（１）１つまたは複数のノードを有するグラフと、（２）グラフの各ノードの１つの局所関数を含む関数の集合とによって各部分回路網を指定する。部分回路網を指定するこの方法は異なる部分回路網間の類似点を活用する。
特に、各部分回路網はその構造と１つまたは複数のノードによって実行される関数の集合とによって記述できる。異なる部分回路網は類似した構造を有することがあり、または類似の関数を実行するノードを有することもある。その結果、符号化方法は、（１）構造および関数の属性を別々に記憶し、（２）各部分回路網を記憶された構造および関数特性によって記述する。
以下の実施形態では、各部分回路網の構造が有向アーク・グラフによって記述される。そのようなグラフのノードは部分回路網の回路素子を表現し、有向エッジは部分回路網の回路素子間の接続に対応する。
データベースのオフライン計算のため、データベース内の回路網構造として描かれるすべてのグラフは事前に周知である。さらに、これらのグラフの多くが同形である、すなわち、それらはノードのある種の番号付けに関して同一である。実際、個別の非同形グラフの数はデータベース内の部分回路網の総数と比べて極めて小さい。
したがって、いくつかの実施形態では、図１６に示すグラフ・テーブル１５１５は一定のサイズまですべての非同形グラフを記憶する。以下の第ＩＶ章では、一定のサイズまですべてのより小さい非同形グラフのテーブルを生成する技法について説明する。各々の生成されたグラフ構造はエントリとしてグラフ・テーブル１５１５内に記憶される。いくつかの実施形態では、このテーブル内のエントリは０からｎまで順次番号付け（索引付け）される。
【００５４】
また、いくつかの実施形態では、関数テーブル１５２０は任意の事前計算された部分回路網内に存在しうるすべての局所関数を記憶する。すべての可能な局所関数は事前に知られており、その番号は小さい傾向があるので、そのようなテーブルは事前集計プロセス中に容易に生成できる。
特定の技術ライブラリに結びついているデータベースの場合、局所関数は特定の技術ライブラリから取り出される（すなわち、局所関数はライブラリ内の単一の回路素子によって計算できるすべての論理関数に対応する）。いくつかの技術ライブラリは単一ブロックで実施できる２５６より少ない異なる論理関数を含む。したがって、そのようなライブラリの場合、テーブル１５２０へのインデクス１５６０は単一バイトとして実施できる。上記のように、いくつかの関数テーブルを用いてさらに低減を達成し、同じ入力数を備えた組合せ論理関数を別々に記憶することができる。
特定の技術ライブラリに結びついているデータベースの場合、関数テーブルは１つまたは複数の技術ライブラリの局所関数および／またはいかなる特定の技術ライブラリにもない追加の抽象関数を含むことができる。関数テーブルに追加の関数を加えると、データベースのサイズが大きくなる（すなわち、データベース内で指定される部分回路網の数が増える）。ただし、いくつかの関数テーブルを用いてその入力数に応じて関数を記憶することで効率化を実現することができる。
【００５５】
２．各グラフの符号化
符号化の第２のレベルはグラフ構造の符号化に関係する。グラフの数が比較的小さい（例えば、１００００〜５００００）場合、グラフ構造の任意の適度に希薄な圧縮符号化を使用することができる。いくつかの実施形態では以下のスキーマを使用する。
Ｇｒａｐｈ＿Ｅｎｃｏｄｉｎｇ＝｛Ｎｏｄｅ＿１＿Ｅｎｃｏｄｉｎｇ｝．．．｛Ｎｏｄｅ＿Ｎ＿Ｅｎｃｏｄｉｎｇ｝
ここで、
Ｎｏｄｅ＿Ｊ＿Ｅｎｃｏｄｉｎｇ＝｛Ｎｏｄｅ＿Ｉｄｅｎｔｉｆｉｅｒ｝｛Ｅｄｇｅ＿１＿Ｅｎｃｏｄｉｎｇ｝．．．｛Ｅｄｇｅ＿Ｍ＿Ｅｎｃｏｄｉｎｇ｝
ここで、
Ｅｄｇｅ＿Ｉ＿Ｅｎｃｏｄｉｎｇ＝｛Ｅｄｇｅ＿Ｉｄｅｎｔｉｆｉｅｒ｝｛Ｎｏｄｅ＿Ｘ＿Ｉｎｄｅｘ｝
言い換えれば、このスキーマは、各々の符号化されたグラフを１つまたは複数の符号化されたノードとして（すなわち、１つまたは複数のＮｏｄｅ＿Ｊ＿Ｅｎｃｏｄｉｎｇとして）定義する。各々の符号化されたノードは識別子（Ｎｏｄｅ＿Ｉｄｅｎｔｉｆｉｅｒ）および１つまたは複数の符号化されたエッジ（すなわち、１つまたは複数のＥｄｇｅ＿Ｉ＿Ｅｎｃｏｄｉｎｇ）として定義される。Ｎｏｄｅ＿Ｉｄｅｎｔｉｆｉｅｒは、符号化されたノードの記述の開始を指定する。また、ノードの各々の符号化されたエッジはノードへの着信エッジを指定する。
各々の符号化されたエッジは、識別子（Ｅｄｇｅ＿Ｉｄｅｎｔｉｆｉｅｒ）とノード・インデクス（Ｎｏｄｅ＿Ｘ＿Ｉｎｄｅｘ）で定義される。Ｅｄｇｅ＿Ｉｄｅｎｔｉｆｉｅｒは、符号化されたエッジの記述の開始を指定する。一方、ノード・インデクスは、エッジが属していたグラフ・ノードを識別する。当業者であれば、他の実施形態においては、着信エッジの代わりにノードの発信エッジを指定するスキーマを使用できることを理解することができるだろう。グラフは有向グラフであるので、各々の符号化されたノードについて着信エッジまたは発信エッジのみを定義する必要がある。
上記のスキーマのより具体的なバージョンでは、０，．．．，ｎ−１までのノードの一定の番号付けに従って各グラフをノード単位で記憶する。このスキーマは各グラフをビット列として符号化する。このビット列では、このスキーマは単一の「１」ビットをグラフ内の各ノードの共通ノード識別子（Ｎｏｄｅ＿Ｉｄｅｎｔｉｆｉｅｒ）として使用し、単一の「０」ビットを各ノードの各エッジの共通エッジ識別子（Ｅｄｇｅ＿Ｉｄｅｎｔｉｆｉｅｒ）として使用する。また、各エッジのノード・インデクスはエッジの開始ノードに割り当てられた番号に対応する整数である。
【００５６】
いくつかの実施形態では、データベース内の１６個より少ないノード／回路網を備えた部分回路網のみを記憶する。この実施形態では、エッジの開始ノードのインデクスを４ビットで符号化することが可能である。したがって、このスキーマが使用するビットの最大数は以下の式で提供される。
ビットの最大数＝＃ノード＋＃エッジ＊（１＋４）
以下の考察に基づいてさらなる低減が達成される。いくつかの実施形態では、組合せ論理部分回路網が非周期的であること、すなわち、任意のノード「ｉ」のみがノード「ｊ」（但し、「ｊ」＜「ｉ」）からの着信エッジを有するようにノードの一定の順序付けを必要とする。言い換えれば、これはある種のノードの入力がこのノードの出力に依存してはならないということを意味する。ノードのそのような順序付けの計算は直線時間のみを必要とする。そのような順序付けから、ノード「ｉ」に進入するエッジの開始ノードは、０，．．．，ｉ−１の範囲内にあることになる。したがって、各開始ノードのノード・インデクスは、（１）ノード０，．．．，２では１ビットで、（２）ノード３，．．．，４では２ビットで、（３）ノード５，．．．，８では３ビットで、（４）ノード９，．．．，１５では４ビットで符号化できる。最大８ノードを備えたグラフでは、この結果、少なくとも１ビット／エッジのさらなる低減が可能である。
【００５７】
図１８〜図２０は上記のグラフ符号化方法の一例を示す。図１８は部分回路網のグラフを示す。このグラフは３つのノードと７つのエッジを含む。また、このグラフでは、３つのノードはノード１、２、および３として定義される。ノード０は部分回路網への入力の発生源であるノードの「抽象的な」集合を定義する。図１９および図２０は図１８のグラフを符号化された形で表すビット列を示す。
このグラフ符号化は部分回路網の高圧縮構造記述を生む。例えば、すべての回路網は最大８つのノードと平均１２個のエッジを有する場合、グラフ符号化の平均サイズは５６ビットに制限される。(すなわち、８＋１２×４)。数百万の回路網を備えたデータベースの場合、経験的に６５５３６個より少ない異なるグラフが必要であり、したがって、テーブル１５１５の全サイズは３６７００１６ビットに制限され（すなわち、５６ビット＊６５５３６個のグラフ）、これは約４５０キロバイトに相当する。
当業者であれば、他の実施形態においては、別の符号化方法を使用できることを理解することができるだろう。例えば、いくつかの実施形態では、ハフマン符号化または算術符号化を使用して各グラフの構造を符号化することができる。
【００５８】
ＩＶ．データ・ゼネレータ
図２１は本発明のいくつかの実施形態でデータ・ゼネレータ１１５によって実行されるいくつかの演算を概念的に表すプロセス２１００を示す。この図に示すように、データ・ゼネレータは（２１０５で）多数の部分回路網を指定する。これらの部分回路網は多素子部分回路網および／または多出力部分回路網を含むことができる。各々の指定された部分回路網について、データ・ゼネレータは部分回路網を記憶するパラメータを（２１１０で）定義する。各部分回路網の定義されたパラメータに基づいて、データ・ゼネレータは部分回路網を記憶構造体１０５内に記憶する。
上記のように、いくつかの実施形態ではデータベースを記憶構造体として使用し、このデータベースへのインデクスを部分回路網を記憶するパラメータとして使用する。当業者であれば、他の実施形態においては、異なる記憶構造体（例えば、データ・ファイル）および／または異なる記憶パラメータを使用できるということを理解することができるだろう。
【００５９】
図２２は、データ・ゼネレータ１１５がいくつかの実施形態で実行してデータ・テーブル５２５を構成し組織する、より具体的なプロセス２２００を示す。開始前に、このプロセスは（１）局所関数（すなわち、組合せ論理部分回路網内のノードの関数としての）の役割を果たすことができる組合せ論理関数（ブール関数）の集合と、（２）構築する部分回路網のノードおよびエッジの最大数を指定する情報とを受け取る。組合せ論理関数の集合は、プロセス２２００によって、１つまたは複数の関数テーブル１５２０内で受け取ることができ、または１つまたは複数の関数テーブル１５２０内で組織することができる。また、以下の実施形態では、各々の受け取られた関数はそのＲＯＢＤＤで表現される。
組合せ論理関数の受け取られた集合は、組合せ論理ライブラリと呼ばれる。いくつかの実施形態では、このライブラリは通常、特定の技術に使用されるすべての回路素子を含む既存の技術ライブラリから引き出される。この場合、組合せ論理ライブラリはこの技術ライブラリ内の単一の回路素子によって計算できるすべての組合せ論理関数を含む。さらに、組合せ論理ライブラリは対応する回路素子の物理態様に関する追加情報（例えば、回路素子の推定サイズ、推定消費電力、タイミング特性など）を含む。そのような追加情報をさまざまな回路網フィルタで用いて、特定の特性を備えた回路網のみを含むデータベースを構築することができる。
【００６０】
他の実施形態では、組合せ論理ライブラリは必ずしも１つの特定の技術ライブラリから発生したわけではない関数を含む。例えば、特定の技術ライブラリに結びついていないデータベースでは、組合せ論理ライブラリは１つまたは複数の技術ライブラリから得た局所関数および／またはいかなる特定の技術ライブラリから得られたわけではない追加の抽象関数を含むことができる。人為的に定義された関数は人為的に定義された物理特性を有する人為的に定義された回路素子に対応する。任意の局所関数を含む組合せ論理ライブラリを使用して、特定の技術的特性のいかなる集合も含まないデータベースを構築することができる。しかし、いくつかの実施形態では、ゼネレータが、全部とは言わないまでも、ほとんどの組合せ論理関数を生成できるように、関数の集合が完全であることを必要とする。他方、この要件を課さない実施形態もある。
【００６１】
図２２に示すように、プロセス２２００は最初にノードおよびエッジの所与の最大数まで多数の有向グラフを（２２０２で）生成する。いくつかの実施形態では、プロセス２２００は最大８つのノードと最大１６個のエッジを備えたグラフを生成する。これはグラフ数がノードおよびエッジの数と共に指数的に増加するためである。下記の擬似コードはいくつかの実施形態でそのような有向グラフを生成する様子を示す。
・ｎｏｄｅ＿ｎｕｍｂｅｒ＝１，．．．，ｍａｘ＿ｎｏｄｅ＿ｎｕｍｂｅｒの場合、
・ｅｄｇｅ＿ｎｕｍｂｅｒ＝１，．．．，ｍａｘ＿ｅｄｇｅ＿ｎｕｍｂｅｒの場合、
・ｎｏｄｅ＿ｎｕｍｂｅｒのノードとｅｄｇｅ＿ｎｕｍｂｅｒのエッジを有し、すべての入力変数に依存するトップ・ノードを有するすべてのグラフを構築し、
・構築されたグラフごとに、グラフがいかなる以前に記憶されたグラフとも同形でなく、グラフが非周期性の場合、グラフを符号化し、符号化されたグラフをリストに保存し、
・保存したグラフのリストからグラフ・テーブル１５１５を構築する。
上記の擬似コードに示すように、いくつかの実施形態では、プロセス２２００は最初にノードとエッジのすべての組合せを列挙することで２２０２を実行する。ノードとエッジの組合せごとに、プロセスは組合せのノードとエッジの数を有し、少なくとも１つのピボット・ノードを有する各グラフを構築する。図２３に示すように、ピボット・ノードはその幾何学的ファンイン・コーンにすべての入力変数を受け取らせるノードである。
【００６２】
多数の周知の技法を用いて、所与の数のノードおよびエッジについてすべてのグラフを構築することができる。いくつかの実施形態は最初に所与の数のノードおよびエッジについてすべての無向グラフを構築する。すべての無向グラフを構築するためのソフトウェア・パッケージが利用できる。そのようなパッケージの１つが、Ｂｒｅｎｄａｎ  Ｄ．  Ｍｃｋａｙ（ｂｄｍ＠ｃｓ．ａｎｕ．ｅｄｕ．ａｕ）、Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  Ｄｅｐａｒｔｍｅｎｔ、Ａｕｓｔｒａｌｉａｎ  Ｎａｔｉｏｎａｌ  Ｕｎｉｖｅｒｓｉｔｙの「ｇｅｎｇ」プログラム・パッケージである。このパッケージは、
http://cs.anu.edu.au/~bdm/nauty/gtools10beta11.tar.gz
からダウンロードすることができる。
すべての無向グラフを生成した後で、これらの実施形態は各グラフのすべてのエッジにすべての可能な方向割り当てを試行することによってすべての有向グラフを生成する。ノードとエッジの各々の組合せについてすべての有向グラフを構築した後で、プロセスは組合せのすべての周期グラフを廃棄し、グラフが以前に記憶されたグラフと同形でない限り、グラフ・テーブル内の各々の残りのグラフを記憶する。
周期の有無の確認と同形グラフの識別は当技術分野で一般に周知である。例えば、ＭＩＴ  Ｐｒｅｓｓ  ２００１年、Ｃｏｒｍｅｎ、Ｌｅｉｓｅｒｓｏｎ、ＲｉｖｅｓｔおよびＳｔｅｉｎの、「Ｉｎｔｒｏｄｕｃｔｉｏｎ  ｔｏ  Ａｌｇｏｒｉｔｈｍｓ」Ｓｅｃｏｎｄ  Ｅｄｉｔｉｏｎ，Ｃｈａｐｔｅｒ  ２２（Ｅｌｅｍｅｎｔａｒｙ  Ｇｒａｐｈ  Ａｌｇｏｒｉｔｈｍｓ）は、グラフをトラバースすることによるグラフの周期の有無を確認する方法を開示する。さらに、同形グラフを識別するソフトウェア・パッケージが利用できる。そのようなパッケージの１つが、Ｂｒｅｎｄａｎ  Ｄ．  Ｍｃｋａｙ（ｂｄｍ＠ｃｓ．ａｎｕ．ｅｄｕ．ａｕ）、Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  Ｄｅｐａｒｔｍｅｎｔ、Ａｕｓｔｒａｌｉａｎ  Ｎａｔｉｏｎａｌ  Ｕｎｉｖｅｒｓｉｔｙの「ｎａｕｔｙ」パッケージである。このパッケージは、
http://cs.anu.edu.au/people/bdm/nauty
からダウンロードすることができる。
プロセス２２００がグラフ・テーブル内に記憶するグラフごとに、プロセスはグラフ−テーブル・インデクスを割り当て、記憶する。グラフはそのグラフ−テーブル・インデクスによって指定された特定の順序でグラフ・テーブル・インデクス内に記憶される（例えば、インデクスの昇順に分類される）。
２２０２の後で、プロセス２２００はグラフ・テーブルからグラフの１つを（２２０４で）選択する。次に、選択したグラフから引き出すことができるすべての組合せ論理部分回路網を（２２０６で）構築する。このプロセスはグラフのノードの集合に一意的な関数の集合を割り当てることで選択されたグラフの各々の部分回路網を構築する。ノードがその関数に適している限り、組合せ論理ライブラリの任意の関数をグラフの任意のノードに割り当てることができる。このノードの着信エッジの数が関数が依存する変数の数に等しい場合、ノードは適している。いくつかの実施形態では、２２０６で指定された各部分回路網はそのグラフとこのグラフのノードの局所関数の集合とによって一時的に表現される。
【００６３】
プロセスは次に２２０６で識別した部分回路網を（２２０８で）選択する。次に、プロセスは選択された部分回路網が実現するすべての出力関数を（２２１０で）計算する（すなわち、部分回路網の各出力の関数を識別する）。いくつかの実施形態においては、プロセスは部分回路網の各ノードの出力を部分回路網の出力として定義する。また、特定ノードの出力での出力関数は、特定ノードがグラフ内の他のどのノードの出力も受け取らない時には、特定ノードの局所関数である。他の方法としては、特定ノードがグラフ内の他の１つまたは複数のノードの出力を受け取る時には、特定ノードの出力での出力関数は特定ノードの局所関数とその出力を特定ノードが受け取る各ノードの局所関数から引き出すことができる。
いくつかの実施形態では、２２１０で指定された各部分回路網はその出力関数の集合によってだけ表される。これは、この段階で部分回路網がハッシュ関数を生成するためにだけ構築されるからである。また、この段階で、各出力関数はそのＲＯＢＤＤで表される。また、２２１０で、プロセスはピボット関数としての働きをする部分回路網の任意の出力関数を識別する。上記のように、部分回路網のピボット関数はその部分回路網へのすべての入力に依存する関数である。
次に、プロセスは選択した部分回路網に（２２１２で）フィルタリング規則を適用し、選択した部分回路網がこれらの規則のいずれかにあてはまる場合には選択した部分回路網を廃棄する（すなわち、フィルタリングする）。別の実施形態では、プロセスは別の規則の集合を用いて部分回路網をフィルタリングする。例えば、いくつかの実施形態においては、プロセス２２００は、（１）部分回路網が重複する出力関数を有する場合、（２）部分回路網がその部分回路網の入力の１つと同一の出力関数を有する場合、または（３）部分回路網がピボット出力関数を有さない場合、プロセス２２００は部分回路網を廃棄する。各々の生成されたグラフがピボット・ノードを有していても、部分回路網によって実施される特定の関数の結果として入力変数の一部が脱落することがあるため、最終的な部分回路網はピボット関数を有していないことがある。
【００６４】
また、部分回路網がノードの幾何学的ファンイン・コーンに供給されるすべての入力に依存はしない出力を備えた少なくとも１つのノードを有する時には、プロセスは部分回路網を廃棄する。例えば、図２４は、第２および第３のノード２４１０および２４１５の出力を受け取る第１のノード２４０５を含む３ノードの部分回路網を示す。ここで、第２のノードは第１および第２の入力信号を受け取り、第３のノードは第３および第４の入力信号を受け取る。上記のフィルタリング規則によれば、そのような部分回路網では、各ノードの出力はその入力に依存しなければならず、第１のノードの出力は第１〜第４の入力に依存しなければならない。
次にプロセスは２２０６で生成されたすべての部分回路網を検証したか否かを（２２１４で）決定する。検証していない場合、プロセスは２２０８に戻ってまだ検証していない部分回路網を選択する。検証している場合、プロセスは２２０２で生成されたすべてのグラフを検証したか否かを（２２１６で）決定する。グラフをすべて検証してはいない場合、プロセスは２２０４に移行してまだ検証していないグラフを選択する。
プロセスがすべてのグラフを検証している場合、プロセスは２２１６から２２１８に移行する。プロセスが２２１８に達するまでに、プロセスは多数の部分回路網を識別して保持している。各々の保持された部分回路網は、ピボット関数の働きが可能な１つまたは複数の関数を含む出力関数の集合によって指定される。各部分回路網の関数の集合はピボット関数の働きが不可能な１つまたは複数の関数を含むこともできる。
【００６５】
次に、プロセスは（２２１８〜２２２６で）部分回路網の生成された出力関数の集合を用いてハッシュ関数を生成する。特に、２２１８で、プロセスは２２１２で廃棄されなかった（すなわち、２２１６の後で残っている）（１つの部分回路網を表す）出力関数の１つの集合を選択する。
この選択された集合から、プロセスは、（２２２０で）１つまたは複数の関数の集合を定義する。ここで各々の定義された集合は１つのピボット関数と潜在的に１つまたは複数の非ピボット関数を有する（集合は１つの関数しか有さない場合には非ピボット関数を有さない）。２２２０で、プロセスは２２１８で選択した集合内の潜在的なピボット関数の数と同じ数の関数の集合を定義する。例えば、２２１８で選択した集合は５つの関数（Ｆ１、Ｆ２、Ｆ３、Ｆ４、およびＦ５）を有することがあり、そのうち第２および第３の関数（Ｆ２およびＦ３）のみがピボット関数の働きをすることができる。そのような集合から、プロセスは（２２２０で）２つの関数の集合を定義する。すなわち、第２の関数を備えた一方の集合をピボット関数として、残りの集合を非ピボット関数として定義し、第３の関数を備えた他方の集合をピボット関数として、また残りの集合を非ピボット関数として定義する。
２２２０で識別された関数の各々について、プロセス２２００はインデクサにピボット関数から識別される入力変数順序に基づいて集合内の各関数の真理値表表現を生成するように指示する。上記のように、いくつかの実施形態はピボット関数の正準真理値表表現を生む入力順序を選択する。いくつかの実施形態においては、正準真理値表は最小値真理値表である。
データベース生成時にいくつかの入力変数順序がピボット関数の正準真理値表表現を生む時には、インデクサのプロセス８００は入力順序を決定論的に選択する。特に、上記のように、インデクサの入力順序識別子は常に（８１０で）特定の順序で入力変数構成の集合を返す。インデクサが事前集計時に決定論的に動作する時には、インデクス・マネジャーは常に（８１５で）返された入力構成の集合の同じ入力構成を指定された入力構成として選択する。例えば、いくつかの実施形態においては、インデクス・マネジャーは、常に、返された集合内の最初の入力構成を指定された構成として選択する。
【００６６】
次に、プロセスは２２１２で保持されたすべての部分回路網を検証したか否か（すなわち、２２１６の後に残ったすべての関数の集合を検証したか否か）を（２２２２で）決定する。検証していない場合、プロセスは２２１８に戻り、２２１２で廃棄されなかった（別の部分回路網を表す）別の出力関数の集合を選択する。
検証している場合、プロセスは２２２０で定義された各集合内の各々の特定の関数の真理値表を特定のインデクス値に関連付けることによって（２２２４で）ハッシュ・テーブルを生成する。次に、プロセスは生成されたハッシュ・テーブルに基づいてハッシュ関数を（２２２６で）計算する。ハッシュ・テーブルおよび関数を生成するそのような方法の１つが、先に引用したＣｚｅｃｈ文書に記載されている。
２２２６の後で、プロセスは基本的にすべての処理２２０４〜２２１６を再び実行する。特に、２２２８で、プロセスは２２０２で生成されたグラフ・テーブルからグラフの１つを選択する。プロセスは、次に、選択したグラフから引き出すことができるすべての組合せ論理部分回路網を（２２３０で）構築する。プロセスは各部分回路網を２２０６で前述したのと同じ方法で構築する。
次に、プロセスは２２３０で識別した部分回路網を（２２３２で）選択する。次に、プロセスは、（２２３４で）選択された部分回路網が実現するすべての出力関数を計算し（すなわち、部分回路網の各出力の関数を識別し）、ピボット関数としての働きが可能な部分回路網の各出力関数を識別する。プロセスの２２３４の処理は２２１０での処理と同様であるが、２２３４ではプロセスは識別された出力関数だけでなくそのグラフによって各部分回路網を指定する点が異なる。この段階で、各出力関数はそのＲＯＢＤＤで表される。
次に、プロセスは選択した部分回路網に（２２３６で）フィルタリング規則を適用し、選択した部分回路網がこれらの規則のいずれかを満足する場合には選択した部分回路網を廃棄する（すなわち、フィルタリングする）。プロセスは、２２１２で適用したのと同じフィルタリング規則を２２３６で適用する。プロセスは、次に２２３０で生成されたすべての部分回路網を検証したか否かを（２２３８で）決定する。検証していない場合、プロセスは２２３２に戻ってまだ検証していない部分回路網を選択する。検証している場合、２２３６でプロセスが保持した各部分回路網について、プロセスは（２２４０で）１つまたは複数の出力関数の集合を定義する。ここで各々の集合は１つのピボット関数と潜在的に１つまたは複数の非ピボット関数を有する。２２２０と同様に、プロセスは特定の部分回路網について２２３４で指定した関数集合内の潜在的なピボット関数の数と同じ数の各々の特定の部分回路網の関数の集合を２２４０で定義する。
特定の部分回路網について２２４０で指定した各関数の集合について、プロセスは、また、（２２４０で）特定の部分回路網のインデクスの集合を生成する。各インデクスの集合は１つのピボット関数と潜在的に１つまたは複数の２次インデクスを含む。集合は１つの関数しか有さない関数の集合について生成された場合には２次インデクスを含まない。
２２４０で、プロセスはインデクサにピボット関数の正準真理値表表現から決定論的に選択される入力変数順序に基づいて集合内の各関数の真理値表表現を生成するように指示する。２２４０での入力変数順序の決定論的な選択は２２２０での入力順序の決定論的な選択と同一である。特に、インデクサの入力順序識別子は常に（８１０で）特定の順序で入力変数構成の集合を返し、事前集計時にインデクス・マネジャーは常に（８１５で）入力構成と同じ入力構成の返された集合内の同じ入力構成を選択する。各関数の真理値表表現を生成した後で、プロセスは２２２６で生成されたハッシュ関数を用いて（２２４０で）インデクスを生成する。
【００６７】
２２４０で、プロセスはまた回路網テーブル・インデクスを２２３６で保持された各部分回路網に割り当てる。保持された部分回路網ごとに、プロセスはリスト内に、（グラフ・テーブル内にそのグラフを指定する）部分回路網のグラフ・テーブル・インデクスと、（各々が関数テーブル内の局所関数を指定する）１つまたは複数の関数テーブル・インデクスと、（２２４０で定義された）１つまたは複数の関数インデクスの集合と、生成された回路網テーブル・インデクスとを（２２４４で）記憶する。
２２４０の後で、プロセスは２２０２で生成されたすべてのグラフを検証したか否かを（２２４２で）決定する。すべてのグラフを検証はしていない場合、プロセスは２２２８に移行してまだ検証していないグラフを選択する。検証している場合、同じ回路網またはほぼ同じ回路網の複数の定義を（２２４４で）廃棄する。これは、（１）同じグラフ・テーブル・インデクスと、（２）（２２４０で定義された）同じ関数インデクスの集合とを有する生成された部分回路網の各々のグループから１つ以外すべてを削除することで達成される。そのような重複した回路網は、例えば、グラフ構造の対称性のために生成される。回路網テーブル・インデクスと関数インデクスのリストに基づいて、プロセスは（２２４６で）データベース・テーブル５２５を完成する。特に、プロセスは初めに回路網テーブル１５１０を、次に２次インデクス・テーブル１５０５を、さらにピボット・インデクス・テーブル１５００を作成する。上記のように、回路網テーブルは記憶されている回路網インデクスによって指定された順序で分類される。２次テーブルは記憶されている１次および２次インデクスによって指定された順序で分類される。１次テーブル１５００は記憶されている１次インデクスによって指定された順序で分類される。２２４６の実行後にプロセスは終了する。
プロセス２２００は指定されたサイズまで多数の組合せ論理部分回路網を生成する。これは専門家の知識から引き出される小さい可能性の集合からの回路網の変換になじむ以前の手法とは根本的に異なる。この新しい手法によって、最適化プロセスはデータベースへの簡単で直接のルックアップを用いて多数の代替部分回路網を識別することができる。これとは対照的に、ハンドコード変換（プログラム・コードとして直接実施されるか、または論理合成システムへのパラメータ化が可能な入力規則として使用される）は可能な態様のごく小さい部分集合しか利用できない。さらに、上記の自動データベース手法によって、マシン生成回路網にさらに専門家の知識を組み入れることができる。言い換えれば、この手法は任意の回路素子を備えたデータベースに部分回路網を追加する能力を提供する。
【００６８】
Ｖ．技術マッピング
また、上記のデータ記憶方式の合成を用いて、技術マッピングを実行することができる。いくつかの現在の論理合成システムは以下の３種類の演算を実行する。第一に、これらのシステムは任意の局所関数を実行する回路素子を含む非結合回路網の論理最適化を実行する。第二に、最適化された回路網を簡単な局所関数（２方向ＮＡＮＤなど）から構成される部分最適回路網にマッピングする。第三に、部分最適回路網を特定の技術ライブラリに結びついている結合回路網にマッピングする。高性能の論理最適化技法は非結合回路素子上で最もその能力を発揮するため、これらのシステムはこの手法に従う。技術マッピング演算はいつでも部分回路網を簡単な局所関数（２方向ＮＡＮＤなど）から構成される回路網にマッピングするわけではない。この演算は技術ライブラリへのマッピングをより簡単にするだけである。
他の同様の技術マッピング・システムもある。例えば、いくつかのシステムは以下の３種類の演算を実行する。第一に、任意の局所関数を実行する回路素子を含む非結合回路網を簡単な局所関数（２方向ＮＡＮＤなど）からなる別の回路網にマッピングする。第二に、マッピングされた回路網について論理最適化を実行する。第三に、これらのシステムは最適化された回路網を特定の技術ライブラリに結合されている回路網にマッピングする。
現在の技術マッピング技法の下では、最終的な回路網の製造可能性を確保するために追加のマッピングする演算を実行して目標ライブラリにマッピングしなければならない。これらのマッピング演算は物理的な態様の詳細（タイミングおよびゲートのサイズなど）を考慮しなければならない。これらのマッピング演算は普通、最適化演算に使用するアルゴリズムとは異なるアルゴリズムに基づく。したがって、最適化と技術マッピング演算との間のアルゴリズムの差から部分最適結果を得るリスクがある。
技術マッピング演算の１つのタイプはツリー・マッピングである。典型的なツリー・マッピング演算は、（１）小さい部分回路網を選択し、（２）各々の選択された部分回路網内で、１つまたは複数の素子を備えたマイクロツリーまたはマイクロリーフＤＡＧを識別し、（３）各マイクロツリーまたはマイクロリーフＤＡＧを技術ライブラリ内の１つのゲートにマッピングする再帰型動的プログラミング技法を使用する。他のツリー・マッピング演算は、回路網から直接マイクロツリーを識別し、次に、各マイクロツリーを技術ライブラリ内の１つのゲートにマッピングする。
ツリーは、Ｎ個のノードとＮ−１個のエッジを含む。マイクロツリーは少数のノードを備えたツリーである。ＤＡＧは有向非周期グラフである。ＤＡＧは任意のノード数のエッジを有することができる。マイクロリーフＤＡＧは、リーフ・ノードが、２つ以上の他のノードに接続する出力を有することができる点を除いてマイクロツリーと同様である。
ツリー・マッピング演算は、マイクロツリーまたはマイクロリーフＤＡＧのルート・ノード（トップレベル・ノード）の出力である唯一の出力を有するマイクロツリーまたはマイクロリーフＤＡＧ部分回路網を選択する。これらの演算は、ツリーの外部に出力を有する（すなわち、ツリー外部のノードへのファンアウトを有する）低レベル・ノード（すなわち、非ルート・ノード）を有するグラフ構造を全く選択しない。言い換えれば、典型的なツリー・マッピング演算で選択される各グラフはファンインの集合（すなわち、１つまたは複数の入力）と、唯一のファンアウト（すなわち、唯一の出力）とを有する。
【００６９】
別の以前の技術マッピング演算は構造的マッピングである。構造的マッパーは通常、インバータと単一の他のタイプのゲート（２入力ＮＡＮＤまたはＮＯＲなど）を用いて、最適化された回路網を部分最適回路網に再マッピングする。この手法の場合、ノードの局所関数は、全面的にノードの入力数によって決定される（例えば、１入力ノードはインバータであり、他のすべてのノードはＮＡＮＤなどの選択された基本関数である）。したがって、任意の回路網によって実現される組合せ論理関数は全面的にそのグラフ構造によってのみ定義される。
また、構造的マッパーは、通常、最適化された回路網を再マッピングするためのインバータおよび同じタイプのゲートを用いて、技術ライブラリ内の各要素をグラフ構造内に再マッピングする。技術ライブラリの各部材があるグラフとして表されると、構造的マッピング・プロセスは部分最適回路網をサブパートに分割する。各サブパートについて、構造的マッピング・プロセスは、（１）サブパートのグラフ構造に対応する目標ライブラリ内の単一の要素を表し、（２）特定の費用関数（面積、タイミング、電力）に従ってほぼ可能であるグラフ構造を識別しようとする。分割プロセスは高水準プログラミング言語を低水準機械語に翻訳するコンパイラ内で使用される技法と類似の文字列照合技法を用いて実行されることが多い。
構造的マッピングは、ライブラリのマッピング・タスクを解決する一般的な枠組みを定義するが、いくつかの実用上の欠点も有する。効率的なアルゴリズムは、ツリー構造のみについて周知である。より一般的なグラフ構造は簡単なツリー構造に発見的に分解しなければならない。この分解によって、構造的マッピングの品質はこの人為的分解の悪影響を受ける。
【００７０】
本発明のデータ記憶方式の最適化は、これらの欠陥とは無縁である。この最適化が特定の技術にマッピングする部分回路網候補はツリー構造を有する必要がなく、それどころか、より一般的な有向非周期グラフ（「ＤＡＧ」）構造を有することができる。これらの構造が有することができるエッジ数に制限はない。また、各部分回路網候補は複数の出力ノードを有することができる。したがって、内部ノードが部分回路網の外部のファンアウトを有することができるため、部分回路網候補はより大きくなることができる。さらに、データ記憶方式の最適化はその関数に基づいて多数の事前集計された部分回路網を開発することができる。この最適化方法は、簡単なゲートへの非効率的なマッピングを必要としない。また、出力関数のこの部分回路網の集合に基づいて単一演算で多素子代替部分回路網を取り出すことができる。さらに、特定の局所関数の集合について、指定された複雑さのレベルまですべての部分回路網を事前集計することができる。
図２５は、本発明のデータ記憶方式の最適化を用いた技術マッピングを実行するプロセス２５００を示す。このプロセスは、（１）特定の技術ライブラリ向けに設計されていない回路網と、（２）特定の技術ライブラリに結合されている事前集計された部分回路網を含むデータベース（または他の記憶構造体）とを受け取るたびに開始する。データベースは、第ＩＶ章ですでに述べた手法に基づいて事前集計することができる。プロセス２５００が回路網とデータベースを受け取ると、その回路網を特定の技術ライブラリ用に最適化する。
【００７１】
図２５に示すように、プロセスは最初、受け取ったデータベースを用いて（２５０５で）受け取った回路網のプロセス２００を実行する。プロセス２００は、受け取った回路網のより多くの部品が目標ライブラリに結びつくように（各代替部分回路網は目標ライブラリに結びついているので）受け取った回路網を絶えず変更する。いくつかの実施形態においては、プロセス２００を技術マッピングのためのプロセス２５００の一部として使用する時には、プロセス２００を多少異なった形で使用することができる。照会マネジャーが、選択された部分回路網候補について、技術に結びついている部分回路網を記憶するデータ記憶域から得た少なくとも１つの代替部分回路網を返すと、これらの実施形態は常に代替部分回路網の１つが受け入れ可能であると（２３０で）判断し、それにより、常に、選択された部分回路網候補を返された代替部分回路網に（２３５で）置き換える。しかし、他の実施形態では、選択された部分回路網候補を取り出された代替部分回路網の１つに置き換えるか否かを（２３０で）評価することができ、場合によっては、部分回路網候補を代替部分回路網に置き換えないこともある。また、照会マネジャーが部分回路網候補の２つ以上の代替部分回路網を返す時には、上記のように、プロセス２００が代替部分回路網の１つをランダムに選択するかまたは最善のコスト（２２５で計算される）を有する代替部分回路網を選択する。
プロセス２００がその停止判定基準に達すると（例えば、最大反復数を実行するかまたはアニーラなどの最適化アルゴリズムの停止判定基準に達すると）、プロセス２５００は２５１０に移行する。２５１０で、プロセス２５００は、２５０５後に存在する回路網を横断して潜在的に目標ライブラリに結びついていないこの回路網内の任意のノード（すなわち、任意の回路素子）を識別する。いくつかの実施形態は、ノードが２５０５で実行される置き換えステップで回路網に追加されなかった場合には、ノードを潜在的に非結合とみなす。潜在的に目標ライブラリのゲートに結合されていない任意のノードＮについて、プロセス２５００は、Ｎを１ノードの部分回路網候補として扱い、その結果、ノードＮの関数を実現するデータベース内のすべての一致する部分回路網を発見する。次に、プロセス２５００は、ノードＮをこのノードの最善の代替部分回路網に置き換える。プロセス２５００は、回路網が技術ライブラリに結びついていない任意の回路素子を含むことが確実になるまでこの回路網の検索を続ける。
データベース内で非結合ノードの代替部分回路網を見つける処理はノードの局所関数が複雑すぎない限り常に可能である。大半のケースで、この判定基準は容易に満足される。しかし、回路網が任意に複雑なノード関数を有するケースでは、プロセス２５００は他の方法（例えば、上記のＳｈａｎｎｏｎ展開によるブール関数の分解など）を用いてまず管理不可能なノードを簡単化し、次いでその簡単化を目標ライブラリにマッピングする必要がある。言い換えれば、プロセス２５００は複雑なノード関数をより小さい関数の集合に分解し、次により小さい関数の集合を実行する代替部分回路網の集合を識別する必要がある。
【００７２】
２５１０の後で、プロセス２５１５は（２５０５で）受け取ったデータベースを用いて２５１０後に残った回路網に対してプロセス２００を再度実行する。次に、プロセス２００は目標ライブラリ用にこの回路網を再び最適化する。この最適化は２５１０での強制置き換えの結果の部分最適回路網を修正するクリーンアップ処理と考えることができる。
プロセス２５００の技術マッピング演算は多くの場合に有利である。この処理は特定の目標ライブラリへのいかなる目標ライブラリにも結びついていない回路網の優れたマッピング方法を提供する。また、この処理は１つの結合目標ライブラリから別の結合目標ライブラリへの回路網の優れたマッピング方法を提供する。これは１つの技術（例えば、０．１３ミクロン技術）から別の技術（例えば、０．１ミクロン技術）へのマッピングの際にきわめて有利である。
【００７３】
ＶＩ．ＮＰＮ等価関係
図１０〜図１３を参照して前述したように、いくつかの実施形態はいくつかの部分回路網のうちの１つの部分回路網の入力の集合の順序を置き換えることで同一にできる２つの部分回路網を等価として扱う。この第１の等価関係を用いて、これらの実施形態は、データ記憶域に記憶された等価部分回路網の数を減らすことができる。
これらの実施形態のうちいくつかは、２つの別の等価関係を確立して記憶された等価部分回路網の数を減らす。第一に、これらの実施形態は入力の任意の部分集合（すなわち、入力の１つ、いくつか、またはすべて）を反転することで同一にできる２つの部分回路網を等価として扱う。第二に、これらの実施形態は、出力の任意の部分集合（すなわち、出力の１つ、いくつか、またはすべて）を反転することで同一にできる２つの部分回路網を等価として扱う。したがって、これらの実施形態では、以下の変換のうちの１つまたは複数の組合せによって同一にできる時は常に１つの部分回路網は等価として扱われる。（１）入力の特定の部分集合を反転する、（２）入力の集合の順序を置き換える、（３）出力の特定の部分集合を反転する。２つの部分回路網は同じ出力関数を実行し同じグラフを有する時には同一である。
ＮＰＮ等価関係という用語は上記の３つすべての等価関係を指す。この用語で、最初の「Ｎ」は入力の部分集合の反転を指し、「Ｐ」は入力集合の順序の置き換えを指し、２番目の「Ｎ」は出力集合の部分集合の反転を指す。
両方のＮの等価関係は信号の反転にはコストがかからない（すなわち、設計内のどの信号もコスト（面積、タイミングなど）がかからない追加のインバータによって反転できる）という前提に基づいている。この前提にはいくつかの理由がある。第一に、初期最適化の際には、この段階では回路記述の最終的な特性がごく大まかにしか推論できないので、反転の問題を無視して回路記述の一般的な再構築に的を絞ったほうがよい。第二に、技術によっては省略時解釈で出力信号に両方の極性を与えている（各出力ピン「Ａ」について言えば、相補信号を提供するピン「Ａ＿ＢＡＲ」を有する）。第三に、反転にコストをかけないことで、より複雑な部分回路網を同じ量のメモリ内に記憶できるようになり、事前集計された部分回路網の記憶ははるかに高性能になる。この結果、より複雑な部分回路網の置き換えが可能になるので最適化が増強される。
上記の実施形態はＰ等価関係（すなわち、入力集合の順序置き換え）に関するものである。２つのＮ等価関係を説明するためには（すなわち、入力および／または出力の反転による等価関係を説明するには）、以下の演算を修正しなければならない。
【００７４】
プロセス８００（８１０および８１５で）
ＮＰＮ等価関係を説明するには、図８のプロセス８００の正準化演算８１０を修正する必要がある。組合せ論理関数の真理値表表現では、正準化は、ＤＡＣ９８、１９９８年６月１５〜１９日、Ｕｗｅ  ＨｉｎｓｂｅｒｇｅｒおよびＲｅｉｎｅｒ  Ｋｏｌｌａの、「Ｂｏｏｌｅａｎ  Ｍａｔｃｈｉｎｇ  ｆｏｒ  Ｌａｒｇｅ  Ｌｉｂｒａｒｉｅｓ」に開示された技法に基づいてＮＰＮ対応にすることができる。この技法は、同様の分岐および結合アルゴリズムをＰケースとして使用する。他の組合せ論理関数表現のＮ対応正準化は、Ｐｒｏｃ．  ＩＣＣＡＤ  １９９２年、Ｊｅｒｒｙ  Ｒ．ＢｕｒｃｈおよびＤａｖｉｄ  Ｅ．Ｌｏｎｇの、「Ｅｆｆｉｃｉｅｎｔ  Ｂｏｏｌｅａｎ  Ｆｕｎｃｔｉｏｎ  Ｍａｔｃｈｉｎｇ」などの他の参照文献に開示されている。
組合せ論理関数Ｆ＿１およびＦ＿２のＮＰＮ正準化の結果として、（１）１つまたは複数の入力段階の置き換え、（２）入力の順序の置き換え、（３）１つまたは複数の出力段階の置き換えの３つの処理の組合せによってＦ＿１およびＦ＿２が等しくできる時には常に、同じ表現が得られる。関数Ｆの真理値表表現の場合、関数ＦのＮＰＮ正準化のプロセスは（８１０で）１つまたは複数の変換集合を識別する。各々の識別された変換集合は何らかの入力置き換え、入力順序の置き換え、出力の置き換え（この順に）からなり、ピボット関数の正準真理値表表現が生成される。特に、各々の識別されたＮＰＮ変換Ｔの集合は、（１）入力変数構成Ｐ、（２）置き換える入力変数の部分集合Ｚ、および（３）関数全体を補完するか否かを示すブール変数Ｏを指定する。
８１０で、プロセス８００は、（８１０で）関数ＦのＮＰＮ正準表現を識別する。この正準表現は、関数Ｆが、８１０で識別された集合の１つが指定した変換を説明した後で（すなわち、集合の入力変数反転Ｚを説明し、次いで集合の入力変数構成Ｐを説明し、さらに集合の出力変数反転Ｏを説明した後で）生成する真理値表である。
８１５で入力変数構成のみを選択する代わりに、ＮＰＮモード実行時のプロセス８００は、（８１５で）ＮＰＮ変換集合を選択する。この変換集合は、８１０で識別された変換集合の１つである。最適化の際には、プロセス８００は、この集合をランダムに選択して照会のインデクスを生成する。他方、事前集計の際には、プロセス８００は、このＮＰＮ変換を決定論的に選択する。
【００７５】
プロセス９００（９１０および９１５で）
ＮＰＮモードでは、図９のプロセス９００は、８１５で選択されたＮＰＮ変換集合を（９１０で）受け取る。図９のプロセス９００は、８１５で選択されたＮＰＮ変換集合内のＮおよびＰ変換をまず多関数照会の非ピボット関数に適用する。特に、プロセス９００は、集合の入力変数反転Ｚを非ピボット関数に適用する。次に、プロセス９００は、集合の入力変数反転Ｚを適用した後で集合の入力変数構成Ｐを適用する。次に、プロセス９００は、非ピボット関数の得られた真理値表（「非反転真理値表」）を取り出し、これを反転して反転真理値表を得る。このプロセスは、次に２進文字列として反転および非反転真理値表として検証し、非反転真理値表と反転真理値表のうち小さいほうを選択する。プロセスは、次に、選択された真理値表に基づいてハッシュ値を計算する。
プロセス１４００（１４１５〜３５で）
ＮＰＮモードでは、プロセス１４００は、返された変換のリスト内で指定された最初の変換を選択することで決定論的にＮＰＮ変換集合Ｔ（Ｚ，Ｐ，Ｏ）を決定する。１４２０で、プロセスは、６０５で使用される（すなわち、Ｘ−１（Ｔ）を使用する）変換Ｘ＝（Ｗ，Ｖ，Ｙ）の逆関数を適用する。１４２５で、プロセスは、１４２０で識別された順序変更および入力段階置き換えに基づいて関数を計算する。
１４３０で、プロセスは、一方が他方の相補関数であれば２つの関数は同等であるとさらに仮定することで、計算された集合が部分回路網候補の出力関数の集合を含むか否かを検査する。これは代替部分回路網の個別の出力関数の反転がコストをかけずにさらに実行できるためである。１４３５で一致を指定する場合、基礎の入力および出力段階の置き換えを実現するすべての必要なインバータ（すなわち、単にその入力関数の相補を実行する単一の入力を備えた追加ノード）が代替部分回路網に追加される。
【００７６】
プロセス２２００（２２２０および２２４０で）
２２２０または２２４０で、プロセス２２はピボット関数に基づいてＮＰＮ変換（Ｚ，Ｐ，Ｏ）を識別する。２２２０または２２４０で、プロセス２２００は、識別された変換に従ってピボット関数の真理値表を生成する。また、２２２０または２２４０で集合の各々の非ピボット関数の真理値表も生成する。非ピボット関数の真理値表を生成するために、プロセス２２００は非ピボット関数に集合の入力変数反転Ｚを適用する。次に、プロセス２２００は、集合の入力変数反転Ｚを適用した後で集合の入力変数構成Ｐを適用する。次に、プロセス２２００は非ピボット関数の得られた真理値表（「非反転真理値表」）を取り出し、これを反転して反転真理値表を得る。このプロセスは、次に、２進文字列として反転および非反転真理値表を検証し、非反転真理値表と反転真理値表のうち小さいほうを選択する。
【００７７】
以下にさらに説明するように、いくつかの実施形態は技術マッピングを備えたＮＰＮ等価関係を使用しない。したがって、図２５のプロセス２５００は修正されない。
ＮＰＮ等価関係を使用することでＰ等価関係と比較して事前計算された部分回路網間のさらに多くの等価関係が確立される。したがって、ＮＰＮ等価関係を使用すると、２２４２で多数の部分回路網とインデクス集合が削除される。その結果、データ記憶域内の部分回路網の数が大幅に削減され、より多くの複雑な部分回路網を備えたデータ記憶域の作成が容易になる。
データ記憶域のサイズは明示的なインバータを含む部分回路網を考慮しないことで削減できる。インバータが部分回路網の他のノードの入力を駆動する場合、ノードそれに自体が入力信号を補完する（コストをかけずに）と仮定することができる。インバータが部分回路網の出力Ｏを駆動する場合、これはＯでの関数が補完されるという点を除いて同じ関数を生成する部分回路網と論理的に等価と考えられる。Ｐのみの等価関係またはＮＰＮ等価関係のいずれかについてバッファを考慮しない（出力で入力信号を提示する単一入力／単一出力ノードを考慮する）実施形態は、事前集計時に１つの入力しか有さない任意のノードを備えたグラフを考慮しない。その結果、データ記憶域内の部分回路網の数が大幅に削減され、より多くの複雑な部分回路網を備えたデータ記憶域の作成が容易になる。
ＮＰＮ等価関係の説明は、通常、非結合組合せ論理回路網について実行する最適化である。結合組合せ論理回路網の最適化または非結合組合せ論理回路網の結合組合せ論理回路網へのマッピングを行うには、通常、目標ライブラリのゲートの物理特性（コスティングの面での）を完全に理解していることが必要である。反転は、通常、そのような詳細な物理特性に関してコスト・フリーではない。したがって、技術マッピング時にはいずれのＮ等価関係も使用されない。技術マッピング時にはＰ等価関係のみが考慮される。
当業者であれば、他の実施形態もＮＰ等価関係またはＰＮ等価関係を説明できる（すなわち、入力または出力反転のみがコスト・フリーと考えることができる）ということを理解することができるだろう。こうした場合、正準化はＮＰまたはＰＮ正準化のみである。技術ライブラリによっては出力ピンは信号の両方の極性に対応するので、ＰＮケースは結合組合せ論理回路網の場合でも興味深い。
【００７８】
ＶＩＩ．コンピュータ・システム
図２６は、本発明の一実施形態を実現するコンピュータ・システムを示す。コンピュータ・システム２６００は、バス２６０５、プロセッサ２６１０、システム・メモリ２６１５、読み出し専用メモリ２６２０、固定記憶装置２６２５、入力装置２６３０、および出力装置２６３５を含む。
バス２６０５は、コンピュータ・システム２６００の多数の内部装置を通信可能に接続するすべてのシステム、周辺装置、およびチップセット・バスをまとめて表す。例えば、バス２６０５は、プロセッサ２６１０を読み出し専用メモリ２６２０、システム・メモリ２６１５、および固定記憶装置２６２５と通信可能に接続する。
これらのさまざまなメモリ装置から、プロセッサ２６１０は、本発明の各プロセスを実行するために実行命令と処理データを取り出す。読み出し専用メモリ（ＲＯＭ）２６２０はプロセッサ２６１０およびコンピュータ・システムの他のモジュールが必要とする静的データおよび命令を記憶する。これに対して、固定記憶装置２６２５は読み取り／書き込みメモリ装置である。この装置は、コンピュータ・システム２６００の電源が切られても命令とデータを記憶する不揮発性メモリである。本発明のいくつかの実施形態においては、固定記憶装置２６２５として大容量記憶装置（磁気または光ディスクおよびこれに対応するディスク・ドライブ）を使用する。また、固定記憶装置として取り外し可能記憶装置（フロッピー・ディスクまたはｚｉｐ（登録商標）ディスク、およびこれに対応するディスク・ドライブ）を使用する実施形態もある。
固定記憶装置２６２５と同様に、システム・メモリ２６１５は読み取り／書き込みメモリ装置である。しかし、記憶装置２６２５とは異なり、システム・メモリは、ランダム・アクセス・メモリなどの揮発性読み取り／書き込みメモリである。システム・メモリは、プロセッサが実行時に必要とする命令およびデータの一部を記憶する。いくつかの実施形態においては、本発明の各プロセスは、システム・メモリ２６１５、固定記憶装置２６２５、および／または読み出し専用メモリ２６２０に記憶される。
【００７９】
バス２６０５は、また、入力および出力装置２６３０および２６３５を接続する。ユーザは、入力装置を用いて情報を送受信し、コンピュータ・システムへのコマンドを選択する。入力装置２６３０は、英数字キーボードおよびカーソル制御装置を含む。出力装置２６３５は、コンピュータ・システムによって生成される画像を表示する。例えば、これらの装置はＩＣ設計のレイアウトを表示する。出力装置は、プリンタや陰極線管（ＣＲＴ）または液晶表示装置（ＬＣＤ）などの表示装置を含む。
最後に、図２６に示すように、バス２６０５はまたコンピュータ２６００を回路網アダプタ（図示せず）を介してネットワーク２６６５に結合する。このようにして、コンピュータは、コンピュータ・ネットワーク（ローカル・エリア・ネットワーク（ＬＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）、またはイントラネット）またはネットワークのネットワーク（インターネットなど）の一部になることができる。コンピュータ・システム２６００の任意の、またはすべての構成要素を本発明と併用することができる。しかし、当業者であれば、本発明と併用して他の任意の構成も使用できることを理解することができるだろう。
【００８０】
以上、多数の具体例を参照しながら本発明について説明してきたが、当業者であれば、本発明の精神を逸脱することなく、他の特定の形式で本発明を具体化できることを理解することができるだろう。例えば、いくつかの実施形態においては、上記の記憶方法とは異なる形で部分回路網を記憶することができる。また、いくつかの実施形態においては、マシンで生成されたものではないデータベースおよびデータ記憶装置を使用することができる。さらに、いくつかの実施形態においては、上記の方法とは異なる符号化および索引付け方法を使用することができる。したがって、当業者であれば、本発明は上記例示としての詳細な説明によっては限定されず、添付の特許請求の範囲によって定義されることを理解することができるだろう。
【図面の簡単な説明】
【００８１】
【図１】いくつかの実施形態の論理シンセサイザのソフトウェア・アーキテクチャを示す図である。
【図２】図１のシンセサイザの全体の流れを概念的に表すプロセスを示す図である。
【図３】回路網の一例を示す図である。
【図４】図３の回路網の組合せ論理部分回路網の一例を示す図である。
【図５】図１の論理シンセサイザが使用するネットワーク・データベースのブロック図である。
【図６ａ】組合せ論理関数の集合についての受信した照会に応答するために照会マネジャーが実行するプロセスを示す図である。
【図６ｂ】組合せ論理関数の集合についての受信した照会に応答するために照会マネジャーが実行するプロセスを示す図である。
【図７】いくつかの実施形態で使用されるインデクサの構成要素を示す図である。
【図８】本発明のいくつかの実施形態で図７のインデクサのインデクサ・マネジャーが実行する２つのプロセスの概念図である。
【図９】本発明のいくつかの実施形態で図７のインデクサのインデクサ・マネジャーが実行する２つのプロセスの概念図である。
【図１０】照会マネジャーが実行する一致判定の一例を示す図である。
【図１１】照会マネジャーが実行する一致判定の一例を示す図である。
【図１２】照会マネジャーが実行する一致判定の一例を示す図である。
【図１３】照会マネジャーが実行する一致判定の一例を示す図である。
【図１４】照会マネジャーが、代替部分回路網が部分回路網候補と一致するか否かを判定するために実行するプロセスを示す図である。
【図１５】いくつかの実施形態で使用されるいくつかのデータベース・テーブルを示す図である。
【図１６】いくつかの実施形態で使用されるいくつかのデータベース・テーブルを示す図である。
【図１７ａ】いくつかの実施形態がデータベースから事前集計された部分回路網を取り出すために使用するプロセスの概念図である。
【図１７ｂ】いくつかの実施形態がデータベースから事前集計された部分回路網を取り出すために使用するプロセスの概念図である。
【図１８】本発明のいくつかの実施形態で使用されるグラフ符号化方法の一例を示す図である。
【図１９】本発明のいくつかの実施形態で使用されるグラフ符号化方法の一例を示す図である。
【図２０】本発明のいくつかの実施形態で使用されるグラフ符号化方法の一例を示す図である。
【図２１】本発明のいくつかの実施形態でデータ・ゼネレータが実行するいくつかの演算を概念的に表すプロセスを示す図である。
【図２２ａ】本発明のいくつかの実施形態でデータ・ゼネレータが実行するより詳細なプロセスを示す図である。
【図２２ｂ】本発明のいくつかの実施形態でデータ・ゼネレータが実行するより詳細なプロセスを示す図である。
【図２２ｃ】本発明のいくつかの実施形態でデータ・ゼネレータが実行するより詳細なプロセスを示す図である。
【図２３】グラフのピボット・ノードを示す図である。
【図２４】３ノードの部分回路網を示す図である。
【図２５】本発明のいくつかの実施形態の技術マッピングを実行するプロセスを示す図である。
【図２６】本発明のいくつかの実施形態と組み合わせて使用できるコンピュータ・システムを示す図である。
【符号の説明】
【００８２】
１３５  設計
１１５  データ・ゼネレータ
１１０  グローバル・オプティマイザ
１０５  回路網データ記憶域
１３０  コスティング・エンジン
１２０  タイミング・エンジン
１２５  面積エンジン
１４０  電力エンジン
【図１】
2005520243.tif 000005
【図２】
2005520243.tif 000006
【図３】
2005520243.tif 000007
【図４】
2005520243.tif 000008
【図５】
2005520243.tif 000009
【図６ａ】
2005520243.tif 000010
【図６ｂ】
2005520243.tif 000011
【図７】
2005520243.tif 000012
【図８】
2005520243.tif 000013
【図９】
2005520243.tif 000014
【図１０】
2005520243.tif 000015
【図１１】
2005520243.tif 000016
【図１２】
2005520243.tif 000017
【図１３】
2005520243.tif 000018
【図１４】
2005520243.tif 000019
【図１５】
2005520243.tif 000020
【図１６】
2005520243.tif 000021
【図１７ａ】
2005520243.tif 000022
【図１７ｂ】
2005520243.tif 000023
【図１８】
2005520243.tif 000024
【図１９】
2005520243.tif 000025
【図２０】
2005520243.tif 000026
【図２１】
2005520243.tif 000027
【図２２ａ】
2005520243.tif 000028
【図２２ｂ】
2005520243.tif 000029
【図２２ｃ】
2005520243.tif 000030
【図２３】
2005520243.tif 000031
【図２４】
2005520243.tif 000032
【図２５】
2005520243.tif 000033
【図２６】
2005520243.tif 000034
【手続補正書】
【提出日】平成16年12月20日(2004.12.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
設計（１３５、３００）の回路記述を生成する方法であって、
ａ）前記設計（１３５、３００）から、部分回路網候補（４００、１００５）を選択するステップと、
ｂ）前記部分回路網候補（４００、１００５）により実行される少なくとも三つの出力ブール関数の集合を識別するステップと、
ｃ）前記識別された少なくとも三つの出力ブール関数の集合に基づいて、代替部分回路網（１１０５）を記憶する記憶構造体（１０５）から代替部分回路網を取り出すステップと、
ｄ）前記設計（１３５、３００）内で前記選択された部分回路網候補（４００、１００５）を前記代替部分回路網（１１０５）に置き換えるステップとを含む、方法。
【請求項２】
前記選択された部分回路網候補（４００、１００５）は複数の回路素子（１０１０、１０１５、１０２０）を含む、請求項１記載の方法。
【請求項３】
前記選択された部分回路網候補（４００、１００５）の各回路素子は出力を有し、各回路素子の出力は前記選択された部分回路網候補（４００、１００５）により実行される一つの出力関数の結果を提供する、請求項２に記載の方法。
【請求項４】
前記選択された部分回路網候補（４００、１００５）の各回路素子は出力を有し、前記選択された部分回路網候補（４００、１００５）により実行される各出力関数は前記選択された部分回路網候補（４００、１００５）の外に広がる回路素子出力においてのみ提供される、請求項２に記載の方法。
【請求項５】
前記選択された部分回路網候補（４００、１００５）の各回路素子の局所関数（１５７５）を受け取るステップと、
前記受け取った局所関数から前記出力関数の集合を識別するステップとをさらに含む、請求項２に記載の方法。
【請求項６】
設計（１３５、３００）の回路記述を生成する方法であって、
前記設計（１３５、３００）から、部分回路網候補（４００、１００５）を選択するステップと、
代替部分回路網（１１０５）を記憶する記憶構造体（１０５）から代替部分回路網を識別するステップと、
前記設計（１３５、３００）内で前記選択された部分回路網候補（４００、１００５）を前記代替部分回路網（１１０５）に置き換えるステップとを含み、ここで、反復の間、第１の部分回路網候補は前記設計内で第１の代替部分回路網（１１０５）に置き換えられ、前記第１の代替部分回路網は複数の回路素子（１０１０、１０１５、１０２０）から成り、さらなる反復の間に、第２の部分回路網候補（４００、１００５）は第２の代替部分回路網（１１０５）に置き換えられ、前記第２の部分回路網候補（４００、１００５）は、第１の代替部分回路網の全てでない少なくとも一つの回路素子から成ることを特徴とする方法。
【請求項７】
前記代替部分回路網（１１０５）を識別するステップが、前記選択された部分回路網候補（４００、１００５）により実行される出力関数の集合に基づいてパラメータを生成し、前記パラメータが前記代替部分回路網（１１０５）を識別するステップを含む、請求項６記載の方法。
【請求項８】
前記記憶構造体（１０５）から前記代替部分回路網（１１０５）を取り出すために前記パラメータを使用するステップをさらに含む、請求項７記載の方法。
【請求項９】
前記出力関数の集合は、少なくとも一つの出力関数を含む、請求項７記載の方法。
【請求項１０】
設計（１３５、３００）の回路記述を生成する方法であって、
ａ）前記設計（１３５、３００）から、複数の出力関数を実行する部分回路網候補（４００、１００５）を選択するステップと、
ｂ）前記出力関数に基づいてパラメータを生成するステップで、前記パラメータは前記部分回路網候補（４００、１００５）により実行される各出力関数のインデクスを含むインデクスの集合から成り、前記パラメータを生成するステップは、前記部分回路網候補（４００、１００５）の前記出力関数の一つを第１関数として識別するステップと、前記第１関数を用いて前記部分回路網候補（４００、１００５）の各出力関数のインデクスを指定するステップと、  
ｃ）前記パラメータを用いて代替部分回路網（１１０５）を記憶する記憶構造体（１０５）から代替部分回路網を取り出すステップと、
ｄ）前記設計（１３５、３００）内で前記選択された部分回路網候補（４００、１００５）を前記代替部分回路網（１１０５）に置き換えるステップとを含む、方法。
【請求項１１】
前記第１関数の前記インデクスが１次インデクス（１５２５）であり、各非第１関数の前記インデクスが２次インデクス（１５４５）であり、前記パラメータを使用するステップが、
前記１次インデクス（１５２５）と前記２次インデクスの１つによって形成される各々の特定のインデクス・ペアについて、前記特定のインデクス・ペアに関連する前記記憶構造体（１０５）内に記憶された各代替部分回路網（１１０５）を識別するステップと、
前記識別された代替部分回路網のいずれかがすべての前記インデクス・ペアに関連するか否かを決定するステップと、
すべての前記インデクス・ペアに関連する任意の識別された代替部分回路網（１１０５）を取り出すステップとを含む、請求項１０に記載の方法。
【請求項１２】
前記部分回路網候補（４００、１００５）が入力変数の集合を有し、前記パラメータを生成するステップが、
前記第１関数を用いて前記入力変数構成を指定するステップと、
前記指定された入力変数構成に基づいて、各出力関数のインデクスを指定するステップとをさらに含む、請求項１０に記載の方法。
【請求項１３】
前記第１関数を用いて入力変数構成を指定するステップが、
前記第１関数の正準表現を識別するステップと、
前記指定された入力変数構成として前記第１関数の前記正準表現を生む入力変数構成を選択するステップとを含む、請求項１２に記載の方法。
【請求項１４】
前記第１関数の真理値表表現を生成するステップをさらに含み、
前記正準表現を識別するステップが前記第１関数の真理値表表現の正準表現を識別するステップを含む請求項１３に記載の方法。
【請求項１５】
前記正準表現を圧縮して前記第１関数の圧縮表現を得るステップをさらに含む、請求項１３に記載の方法。
【請求項１６】
前記選択された入力変数構成に基づいて各非第１関数の圧縮表現を指定するステップをさらに含む、請求項１３に記載の方法。
【請求項１７】
前記設計（１３５、３００）が、特定の技術に限られない部分回路網候補（４００、１００５）を含み、前記記憶構造体（１０５）は前記特定の技術に限られない代替部分回路網を記憶する、請求項１、６または１０に記載の方法。
【請求項１８】
前記設計（１３５、３００）が、複数の回路素子（１０１０、１０１５、１０２０）を含み、前記部分回路網候補（４００、１００５）は回路素子（１０１０、１０１５、１０２０）により形成され、前記特定の技術に限られない回路素子を識別するために前記設計（１３５、３００）を交差させるステップと、各識別された回路素子に対して前記記憶構造体（１０５）に記憶される代替部分回路網（１１０５）の識別を試みるステップと、識別された回路素子に対する代替部分回路網（１１０５）が識別される場合に、前記設計（１３５、３００）内の前記回路素子を前記識別された代替部分回路網に置き換えるステップとをさらに含む、請求項１７に記載の方法。
【請求項１９】
前記部分回路網候補（４００、１００５）を前記代替部分回路網に置き換えるステップの前に、前記選択された部分回路網候補（４００、１００５）を前記代替部分回路網（１１０５）に置き換えるか否かを評価するステップをさらに含み、
前記置き換えステップが前記評価に基づく、請求項１、６または１０に記載の方法。
【請求項２０】
前記評価ステップが少なくとも一つの費用関数を計算するステップを含む、請求項１９に記載の方法。
【請求項２１】
前記費用関数は、前記代替部分回路網（１１０５）のサイズ、タイミング、または消費電力に関係する、請求項２０に記載の方法。
【請求項２２】
前記評価ステップが、前記代替部分回路網（１１０５）の二つ以上の費用を計算するステップと、加重方式または非加重方式での二つ以上の前記費用を前記代替部分回路網（１１０５）に掛かる単一費用に組み入れるステップとを含む、請求項１９に記載の方法。
【請求項２３】
前記選択された部分回路網候補（４００、１００５）を前記代替部分回路網（１１０５）に置き換えて前記設計（１３５、３００）を最適化する請求項１９に記載の方法。
【請求項２４】
部分回路網を事前集計する方法であって、
ａ）各部分回路網が出力関数の集合を実行して、複数の部分回路網を自動的に指定するステップと、
ｂ）各部分回路網について、前記部分回路網により実行される前記出力関数の集合に基づいてパラメータを生成するステップと、
ｃ）前記部分回路網について生成された前記パラメータに基づいて記憶構造体（１０５）内に各部分回路網を記憶するステップとを含む方法。
【請求項２５】
前記部分回路網に対する前記パラメータを生成するステップの前に各部分回路網によって実行される前記出力関数の集合を識別するステップをさらに含む、請求項２４に記載の方法。
【請求項２６】
前記パラメータが、前記部分回路網により実行される各出力関数のインデクスを含むインデクスの集合である、請求項２４に記載の方法。
【請求項２７】
前記パラメータを生成するステップが、部分回路網により実行される出力関数の集合の記号表現に基づいて前記パラメータを生成するステップを含み、前記記号表現がＢＤＤ表現であり、真理値表表現であり、又はブール式表現である、請求項２４に記載の方法。
【請求項２８】
前記出力関数の集合が一つの出力関数を含む請求項２４に記載の方法。
【請求項２９】
前記出力関数の集合が二つ以上の出力関数を含む請求項２４に記載の方法。
【請求項３０】
コンピュータ可読媒体上にあるコンピュータプログラムが、コンピュータが実行する方法の全てのステップをコンピュータ上で処理するために適用されるコンピュータ・プログラム・コード・手段を含む、請求項１〜２９のいずれか一つに記載の方法。
【国際調査報告】
2005520243.tif 000035
2005520243.tif 000036