(57)【特許請求の範囲】
【請求項１】
コンピュータ支援設計を行うコンピュータが主入力及び主出力の集合を有する回路設計の二分決定グラフ（ＢＤＤ）を構築するために使用される上記回路設計の変数順序を決定する方法において、上記コンピュータは、
上記回路設計を複数の部分に分割し、
変数順序の集合を用いて上記部分毎に二分決定グラフを構築し、
上記部分毎に上記変数順序の有効性を決定し、
上記部分毎の変数順序から上記回路設計全体の二分決定グラフを構築する段階を有する方法。
【請求項２】
上記変数順序の有効性は上記変数順序を用いて構築された上記二分決定グラフのサイズに依存して決定される請求項１記載の方法。
【請求項３】
上記回路設計を複数の部分に分割する段階は、主入力変数の部分集合に値を割り当てた場合に上記回路設計の主出力に影響を与えないゲートを上記回路設計から削除することにより、上記部分毎の二分決定グラフを縮小する段階を有する、請求項１記載の方法。
【請求項４】
上記二分決定グラフは、変数順序の集合を選択し、上記変数順序の集合を用いて抽象関数の集合を適用することにより構築される、請求項１記載の方法。
【請求項５】
コンピュータ支援設計を行うコンピュータが主入力と少なくとも一つの主出力と内部節点とを有する回路設計を表現する関数の決定グラフを構築するための初期変数順序を決定する方法において、
前記コンピュータは、抽象関数を決定し、複数の内部節点に対する決定グラフを構築し、上記複数の内部節点に対する抽象決定グラフを得るため、上記複数の内部節点に対する上記決定グラフに上記抽象関数を適用し、動的変数再順序付けを用いて、部分的に上記複数の内部節点に対する上記抽象決定グラフに基づく少なくとも一つの主出力に対する抽象決定グラフを構築する段階を有する方法。
【請求項６】
上記少なくとも一つの主出力に対する上記抽象決定グラフは最終的な変数順序を有し、上記少なくとも一つの主出力に対する決定グラフを構築するため初期変数順序として上記最終的な変数順序を選択する段階を更に有する請求項５記載の方法。
【請求項７】
上記複数の内部節点は上記回路設計の上記内部節点のカットセットにより構成される請求項５記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、超大規模集積回路の設計、テスト及び検証に係わり、特に、順序付二分決定グラフの変数順序を決定するシステム及び方法に関する。
【０００２】
【従来の技術】
二分決定グラフ（ＢＤＤ）は、ＣＡＤに関連した問題を解法するため使用される。上記問題の中には、合成問題、ディジタルシステム検証、プロトコル検証、及び、回路の正当性の概括的な検証が含まれる。例えば、図１には、第１のＯＲゲート１１、第２のＯＲゲート１３及びＡＮＤゲート１５を含む回路が示されている。第１のＯＲゲート１１は入力Ｎ１及びＮ２を有する。第２のＯＲゲート１３は入力Ｎ２及びＮ３を有し、入力Ｎ２は二つのＯＲゲートの間で共用される。ＡＮＤゲート１５は出力Ｎ６を有する。このとき、ＡＮＤゲート１５の出力Ｎ６は、ブール関数
Ｎ６＝（Ｎ１  ＯＲ  Ｎ２）  ＡＮＤ  （Ｎ２  ＯＲ  Ｎ３）
によって表現される。
【０００３】
この回路の二分決定グラフＢＤＤは図２に示されている。ＢＤＤは、頂点とも称される節点と、分枝とにより構成される。更なる分枝が延びていない節点は終端節点又は端点と称される。この二分決定グラフは、各入力がＢＤＤの一つのレベルだけに出現するように制限されているので、順序付二分決定グラフ（ＯＢＤＤ）である。この二分決定グラフは、図３に示されるように既約順序付二分決定グラフ（ＲＯＢＤＤ）に既約させてもよい。順序付二分決定グラフを既約する規則は従来技術において公知である。既約順序付二分決定グラフは、ユニーク、すなわち、標準形である点が重要である。従って、二つの順序付二分決定グラフが同一の既約順序付二分決定グラフに既約されるとき、これらの順序付二分決定グラフによって表現された回路は等価である。
【０００４】
殆どのアプリケーションでは、既約順序付二分決定グラフは、参考のため引用したR. E. Bryantによる論文”Graph-Based Algorithms For Boolean Function Manipulation”, IEEE Trans. Computer C-35(8), 667-691, August 1986に記載されたApply 手続のある種の変形を用いて構成される。Apply 手続を用いると、ゲートｇに対する既約順序付二分決定グラフはゲートｇの入力の既約順序付二分決定グラフの記号操作によって合成される。所定の回路に対し、回路のゲートは、所望の出力ゲートの既約順序付二分決定グラフが構成されるまで、深さ優先（縦型）で処理される。
【０００５】
ＶＬＳＩのＣＡＤ並びに他のコンピュータ科学の分野における多数の問題は、ブール関数を用いて定式化することができる。従って、既約順序付二分決定グラフは等価性検査を行うため有効である。しかし、コンピュータ支援解法及び等価性検査を行う際の中心的課題は、等価性検査が効率的に行えるように簡潔なブール関数の表現法を見つけることである。既約順序付二分決定グラフは効率的に操作することが可能であり、上記の如く標準形である。殆どの実際的な関数の場合に、既約順序付二分決定グラフは、サイズ（メモリ空間）及び計算時間の両方の点で経済的である。そのため、既約順序付二分決定グラフは種々のＣＡＤ問題を解決するための選択候補のブール表現法として頻繁に使用される。
【０００６】
しかし、既約順序付二分決定グラフは常に経済的であるとは限らない。実際的な関心のある大半の場合に、ブール関数によって記述された回路又はシステムを表現する既約順序付二分決定グラフは、回路又はシステムへの主入力（ＰＩ）の数に指数関数的な関係のある空間を必要とする。このため、等価性の解法はＮＰ困難問題になる。メモリ或いは計算時間の両方の面に関して大きい空間が要求されるため、既約順序付二分決定グラフを用いて解法することができる問題の複雑さに制約が課される。
【０００７】
二分決定グラフのサイズは、とくに、変数が推定される順序に依存する。例えば、ブール関数
ａ1 ・ｂ1 ＋ａ2 ・ｂ2 ＋ａ3 ・ｂ3 
は、変数順序ａ1 ，ｂ1 ，ａ2 ，ｂ2 ，ａ3 ，ｂ3 を使用する８節点二分決定グラフによって表現され得る。しかし、ａ1 ，ｂ1 ，ａ2 ，ｂ2 ，ａ3 ，ｂ3 の変数順序を使用することにより、１６節点を有する二分決定グラフが得られる。優れた変数順序を決定することは重要な問題である。実際上、ｎ！通りの異なる入力変数順序を有するｎ変数の関数の最適変数順序を決定することは、ＮＰ困難問題である。
【０００８】
優れた変数順序を決定するための解決法は、静的アプローチと動的アプローチの二つのグループに分類される。静的アプローチの場合、変数順序は決定され、二分決定グラフを構築する処理を通じて使用される。動的アプローチの場合、変数順序は二分決定グラフを構築する間に変化する。
静的アプローチの場合には頻繁に、変数順序が変数の位相的な近似を決定するため深さ優先探索又は幅優先探索を用いて決定される。換言すれば、変数は、回路の構造的記述内で最も自然に分類されたように見える形式で選択される。しかし、静的アプローチは殆どの場合に成功しない。静的な順序付けアプローチが成功しない一つの理由は、適切な関数の解析が行われないことである。
【０００９】
動的アプローチは、二分決定グラフが一般的に主入力からはじめて主出力まで節点毎に拡張されて構築されることを利用する。換言すれば、中間二分決定グラフは、最終的に主出力に対する二分決定グラフが構築されるまで、回路の各節点に対し構築される。動的アプローチの場合、変数順序は、ある種の費用関数（結果として得られる二分決定グラフのサイズを表す場合が多い）が最小化されるように、中間節点で入れ替えられる。動的アプローチの一例はシフトに基づくシフトベース式アプローチである。シフトベース式動的順序付けスキームにおいて、変数は順序付けリスト内の各位置に連続的に移動（シフト）される。変数は、次に、変数順序付けの位置が割り当てられ、これにより、最小のグラフサイズが得られる。この処理はグラフ内の各変数に対し繰り返される。
【００１０】
しかし、動的変数順序付けアプローチは失敗する場合が多い。一つの問題は、このシフトアプローチが結果的に変数順序付けを生じさせることであり、この結果的に生じた変数順序付けは、動的再順序付けの機構に起因して、実現可能な変数順序付けを小さいサイズの二分決定グラフが得られない変数順序に拘束する。たとえば、シフトベース式動的再順序付けスキームにおいて、変数を変数順序の一方向に関する変数のシフトは、このシフトによって二分決定グラフのサイズが徐々に増大する場合に停止される。このようなスキームの場合、変数、或いは、変数の集合は、本質的に、変数順序内の位置の帯の範囲内に制約される。その理由は、この帯の直ぐ外側の位置が二分決定グラフのサイズを増大させるためである。しかし、変数の非常に大きいシフトを行うことより、ある種の点で、二分決定グラフは、位置の帯の範囲内に制約された変数を用いて実現可能な二分決定グラフよりも著しく小さい二分決定グラフが得られる。かくして、関数及び使用される初期変数順序に依存して、その関数に対する二分決定グラフのサイズは、この関数に対し小さいサイズの二分決定グラフを構築することができるとしても、サイズのローカルミニマムを表現するサイズに抑え込まれ、このサイズは非常に大きいため二分決定グラフを効率的に構築し得ない。その上、シフト式アプローチによって、最終的な小さいサイズの二分決定グラフが得られるとしても、このシフト式アプローチは変数再順序付けを行うためには過剰な量の時間を要する。
【００１１】
また、動的再順序付け技術は全てのアプリケーションで利用できるわけではない。例えば、ＧＢＤＤ、ＩＢＤＤ及びＸＢＤＤのようなある種の代替的な二分決定グラフ表現は、変数順序が二分決定グラフの構築中に変化しないことを必要とする。さらに、ある種のテスト生成アプリケーション及びＳＡＴ解法器は、探索を開始するため使用される入力変数の順序を決定することを重視する。したがって、動的再順序付けパッケージのため良好な静的変数順序を決定する必要性、並びに、良好な初期変数順序を決定する必要性がある。
【００１２】
【発明が解決しようとする課題】
本発明は、回路設計を表現しブール空間を形成するブール関数用の二分決定グラフを構築するため変数順序を決定する方法の提供を目的とする。
また、本発明は、回路設計のブール空間を定義するブール関数を表現する二分決定グラフを構築する方法の提供を目的とする。
【００１３】
【課題を解決するための手段】
本発明の変数順序を決定する方法は、ブール関数を表現するブール空間のサンプルを形成し、複数のテスト変数順序を用いて上記サンプルに対しテスト二分決定グラフを構築し、上記テスト二分決定グラフのサイズに関する情報を用いて二分決定グラフを構築するための変数順序を決定する。
【００１４】
一実施例において、ブール空間のサンプルは部分割当てを用いて形成される。他の実施例において、ブール空間のサンプルは抽象二分決定グラフを用いて形成される。他の実施例において、ブール空間のサンプルは分解された二分決定グラフを用いて作成される。他の実施例において、関数のサンプルは回路のより小さい部分を用いて作成される。
【００１５】
ブール部分空間を形成する際に、パラメータはサンプルの形成に影響を与えるため使用される。これらのパラメータには、抽象のため使用される主入力変数の集合に関係するパラメータが含まれ、一実施例において、主入力変数の集合は回路設計の一部分をシミュレーションすることにより決定される。他の実施例において推定されるパラメータは、二分決定グラフが閾値レベルを下回るとき、或いは、二分決定グラフの動作が所与のコンピュータ資源の量を超えるとき、ランダムに判定される分解点の集合である。
【００１６】
また、上記本発明による二分決定グラフを構築する方法の一実施例は、ブール空間の複数の部分空間を検査することにより回路設計を前処理し、上記ブール部分空間の検査に基づいて変数順序を決定し、初期変数順序の中の上記変数順序を用いて上記ブール関数を表現する二分決定グラフを構築する。
【００１７】
【発明の実施の形態】
以下、本発明の殆どの付随的な特徴は、以下の詳細な説明を参照し、添付図面と共に斟酌することにより、容易に認められると同時により明瞭に理解される。添付図面を通じて、同じ参照記号が付された部品は同じ部品を示す。
I.  概要説明
本発明は、回路又は関数の二分決定グラフを構築するため使用される変数順序を決定するためサンプリング技術を使用する。本発明による処理は、回路又は関数を表現するブール空間のサンプルを取得し、ブール空間のこれらのサンプルに対し良好な変数順序を決定する。ブール空間のサンプルの代わりに、別のアプローチは回路の一部分を使用し、良好な変数順序を決定するためそれらの一部分を解析する。換言すれば、この処理は、多種の変数順序を用いて関数の一部分に対する二分決定グラフを構築し、得られたグラフサイズ又は二分決定グラフと関連した他のパラメータに基づいて、関数又は回路の全体に対する二分決定グラフを構築するため最良の変数順序を選択する。多種の変数順序を用いて、回路又は関数を表現するブール空間の多種の異なる部分に対し、二分決定グラフを構築することにより、良好な変数順序に関する情報が容易かつ直ちに得られる。この処理によって選択された最良の変数順序は、回路全体に対する二分決定グラフを構築するため、静的変数順序、若しくは、動的変数順序処理における初期変数順序として使用される。
【００１８】
回路又は関数を表現するブール空間は、１個以上の多種のサンプリング技術を用いてサンプリングされる。サンプリング技術は検査用のブール空間の一部分を選択する。一実施例において、サンプリングは部分割当てを用いてブール空間の窓を作成することにより行われる。部分割当ては、回路への主入力の一部を割り当てられた値に制限する。主入力の一部への値の割当ては回路を簡単化し、値が割り当てられた主入力に依存する主出力に対し二分決定グラフを簡単化する。
【００１９】
抽象二分決定グラフは、他の実施例において、回路又は関数を表現するブール空間の窓を設けるため使用される。抽象二分決定グラフの場合、一定の変数に関係した節点は、抽象関数に基づいて等価クラスに分類される。抽象二分決定グラフは、等価クラス全体の代表として等価クラスから１個の節点を選択することにより形成される。
【００２０】
他の実施例において、分解二分決定グラフはサンプリング窓を得るため使用される。分解二分決定グラフは、関数又は回路の内部ゲートに疑似変数を導入することにより形成される。この場合、内部ゲートは分解点を形成する。分解点は、回路又は関数に対する疑似主入力として使用される。
本発明の処理は４段階に分割することができる。これらの段階には、推定段階、候補順序段階、テスト段階及び進展段階が含まれる。
【００２１】
本発明によるこの処理のフローチャートは図４に示されている。図４に示される如く、ステップ３０において推定段階の一部として、この処理は、サンプルとして使用されるべきブール部分空間に関係したパラメータを決定する。一般的に、推定段階において、この処理は、候補変数順序を形成するため初期に作成されるべき分割がどの分割であるか、並びに、その分割の個数を決定する。
【００２２】
候補順序段階を表現するステップ５０において、この処理は、推定段階中に決定されたブール部分空間の動的再順序付けを使用し、一般的には深さ優先探索によって生成された初期変数順序を使用して二分決定グラフを作成、構築する。各部分空間毎に、この処理は、少なくとも一つの二分決定グラフを構築する。異なる候補変数順序が、異なる部分空間を表現する二分決定グラフ並びに動的再順序付けの影響に起因して構築された二分決定グラフ毎に作成される。
【００２３】
ステップ７０において、この処理は、テスト段階の一部として、無効な変数順序を退ける。これは、候補順序選択段階で獲得された変数順序、又は、変数順序の部分集合を用いて種々の部分空間に対する二分決定グラフを構築することにより実現される。新しいサンプルに対する二分決定グラフを構築する際に無効な変数順序は除去される。
【００２４】
ステップ９０における進展段階の一部として、この処理は、先行する段階で与えられた変数順序を改良する。これは、変数順序を別のサンプルに適用し、これらのサンプルに対する二分決定グラフを構築しながら変数順序を動的に再順序付けることにより実現される。進展段階の結果に基づいて、最良の変数順序を表現するサンプリング推定順序が選択される。サンプリング推定順序は、動的再順序付けが存在する場合に、若しくは、静的順序として、最終的な二分決定グラフを構築するための初期順序として使用される。
【００２５】
II. 抽象二分決定グラフを使用する方法
抽象二分決定グラフは、関数のためのブール空間の窓（ウィンドウ）若しくは分割を表現する二分決定グラフである。そのため、抽象二分決定グラフは回路設計若しくは関数のブール部分空間を形成するため使用される。抽象二分決定グラフは、同一抽象値を備えた節点が併合される二分決定グラフである。抽象二分決定グラフ、並びに、抽象二分決定グラフの構成法は、参考のため引用されたS. Jha他による文献：Equicalence Checking Using Abstract BDDs, Proceedings of IEEE International Conference on Computer Design: VLSI in Computers & Processors (1997)に記載されている。抽象値は、抽象関数を用いて判定される。抽象関数は、ｎがブール変数の個数を表し、Ｄが任意のドメインを表すとき、
ｈ：｛０，１｝n →Ｄ
のように定義される。したがって、二分決定グラフにおいて、所与の変数の全ての発生にユニークなレベルが割り当てられるとき、ユニークなレベル上の節点は、一定の抽象関数によって生成された値に関して複数の等価クラスに分類される。各等価クラスから代表節点が節点の等価クラス全体を表す節点として選択され、この代表節点より下位の二分決定グラフは、節点の等価クラス全体に対する代表グラフとして使用される。一実施例において、グラフのトラバース（横断）中に等価クラス内で最初に到達した節点は代表節点として選択される。整合性のため、抽象が異なるレベルに適用された場合に部分木構造が保存される。同時に、整合性は、異なるレベルで抽象を行う複雑さが抽象関数のドメインのサイズに関する多項式で表されることを保証する。
【００２６】
例えば、ブール関数
【００２７】
【数１】
0004334061.tif 000002
【００２８】
の二分決定グラフが図５に示されている。図５に示された二分決定グラフは、分枝により接続されたルート、節点及び終端を含む。同図において論理０の分枝は破線で示されている。論理１の分枝は実線で示されている。図５の二分決定グラフはルートＲ１１を有する。ルートＲ１１は節点Ｎ１１に接続された論理０分枝と、節点Ｎ１２に接続された論理１分枝とを有する。節点Ｎ１１は、終端Ｔ１１に接続された論理０分枝と、節点Ｎ１３に接続された論理１分枝とを有する。節点Ｎ１２は、節点Ｎ１４に接続された論理０分枝と、終端Ｔ１２に接続された論理１分枝とを有する。節点Ｎ１３は、終端Ｔ１１に接続された論理０分枝と、終端Ｔ１２に接続された論理１分枝とを有する。節点Ｎ１４は、終端Ｔ１１に接続された論理１分枝と、終端Ｔ１２に接続された論理０分枝とを有する。
【００２９】
図６は、図５に示された二分決定グラフを均一化した後の二分決定グラフを示す図である。均一化は、均一化される変数レベルの直上のレベルからの各分枝がそのレベル上の節点に達するように、均一化される変数レベルに対し十分な節点を挿入することにより二分決定グラフを変更する。したがって、ルート、節点、終端、破線で示された論理０分枝、及び、実線で示された論理１分枝を有する図６の二分決定グラフは、ルートＲ２１を含む。ルートＲ２１は、節点Ｎ２１に接続された論理０分枝と、節点Ｎ２３に接続された論理１分枝とを有する。節点Ｎ２１は、節点Ｎ２５に接続された論理０分枝と、節点Ｎ２７に接続された論理１分枝とを有する。節点Ｎ２３は、節点Ｎ２９に接続された論理０分枝と、節点Ｎ３１に接続された論理１分枝とを有する。節点Ｎ２５、Ｎ２７、Ｎ２９及びＮ３１は、終端Ｔ２１及びＴ２３に繋がる。節点Ｎ２５は、終端Ｔ２１に接続された論理０及び論理１の両方の分枝を有し、節点Ｎ３１は、終端Ｔ２３に接続された論理０及び論理１の両方の分枝を有する。節点Ｎ２７は、終端Ｔ２１に接続された論理０分枝と、終端Ｔ２３に接続された論理１分枝とを有する。逆に、節点Ｎ２９は、終端Ｔ２３に接続された論理０分枝と、終端Ｔ２１に接続された論理１分枝とを有する。
【００３０】
図７に示された二分決定グラフは、対称性のある抽象関数ｈ＝ａ＋ｂを用いて図６の二分決定グラフを抽象化した後の二分決定グラフである。ａｂ＝０１及びａｂ＝１０は、同一の抽象値を有するので、ａｂ＝０１及びａｂ＝１０の部分木の中の一方の部分木は捨てられる。したがって、図７において、ルートＲ５１は、節点Ｎ５１に接続された論理０分枝及び節点Ｎ５３に接続された論理１分枝を有する。節点Ｎ５１は、節点Ｎ５５に接続された論理０分枝及び節点Ｎ５７に接続された論理１分枝を有する。節点Ｎ５３は、節点Ｎ５７に接続された論理０分枝及び節点Ｎ６１に接続された論理１分枝を有する。節点Ｎ５５は、終端Ｔ５１に接続された論理０及び論理１の両方の分枝を含み、同時に、節点Ｎ６１は、終端Ｔ５３に接続された論理０及び論理１の両方の分枝を含む。節点Ｎ５１及び節点Ｎ５３に接続された節点Ｎ５７は、終端Ｔ５１に接続された論理０分枝及び終端Ｔ５３に接続された論理１分枝を有する。節点Ｎ５９は、節点Ｎ５５、Ｎ５７及びＮ６１と同じレベルにあるが、この二分決定グラフ内の何れの節点にも接続されてない。節点Ｎ５９は、終端Ｔ５３に接続された論理０分枝及び終端Ｔ５１に接続された論理１分枝を有する。
【００３１】
図８は、図７の抽象二分決定グラフを既約した後の二分決定グラフを示す図である。既約は、節点を同型部分木と併合し、冗長節点を除去する処理である。したがって、図７において、ルートＲ７１は、節点Ｎ７１に接続された論理０分枝と、節点Ｎ７３に接続された論理１分枝とを有する。節点Ｎ７１は、終端Ｔ７１に接続された論理０分枝と、節点Ｎ７５に接続された論理１分枝とを有する。節点Ｎ７３は、節点Ｎ７５に接続された論理１分枝と、終端Ｔ７３に接続された論理１分枝とを有する。節点Ｎ７１及び節点Ｎ７３の両方の節点に接続された節点Ｎ７５は、終端Ｔ７１に接続された論理０分枝と、終端Ｔ７３に接続された論理１分枝とを有する。
【００３２】
抽象二分決定グラフは窓サンプリング法を実現する方法を提供する。制御変数の集合が与えられた場合、抽象二分決定グラフは一定の抽象関数に従って構築される。制御変数は、回路の主入力から内部ゲートまでの最小深さを考慮して、回路を深さ優先順にトラバースすることにより決定される。かくして、抽象関数は、回路設計内の各節点毎に二分決定グラフの構築中に適用される。しかし、抽象関数は、回路のカットセットを形成する節点のような選択された節点だけに適用される。次に、抽象二分決定グラフは、一実施例では動的再順序付け共に通常の二分決定グラフ演算を用いて主出力に伝搬される。通常、抽象二分決定グラフは、元の二分決定グラフよりもかなり小さい。抽象二分決定グラフの機能性（充足集合）は、与えられた関数（または、その充足集合）の部分集合を獲得する。かくして、抽象二分決定グラフ上の良好な順序は、元の関数に対する二分決定グラフを構築するため有用である可能性が高い。
【００３３】
A.  推定段階について
図９は、抽象化の原理を用いて形成された部分空間に対する推定段階サブプロセスのフローチャートである。推定段階サブプロセスは抽象変数及び抽象関数を決定する。ステップ１５１において、このサブプロセスは、深さ優先探索（ＤＦＳ）を行う。深さ優先探索、並びに、深さ優先探索を実施する方法は、周知技術である。深さ優先探索により、主入力、すなわち、変数の順序付きリストが得られる。
【００３４】
別の形の深さ優先探索を使用してもよい。例えば、他の実施例において、主入力変数の順序付きリストは、プライオリティ深さ優先探索を用いて生成される。深さ優先探索の場合、回路又は関数は、主出力から主入力へトラバースされる。トラバース中に多重入力を備えたゲートが存在した場合、１個の入力が解析を行うことなくさらにトラバースを続ける最初の配線として選択される。プライオリティ深さ優先探索は、ゲートへの多数の入力に優先順位を付ける。プライオリティ深さ優先探索の場合、主入力に最も近いゲートへの入力がトラバースのため選択される。主入力若しくは主出力からの距離は、均一化された回路を用いて決定され、回路若しくは関数の均一化手法は周知技術である。回路設計の主入力から主出力までのパスを均一化することにより、上記の距離は、主入力に最も近い当該入力から主入力までのゲートを計数して決めることができる。
【００３５】
ステップ１５３において、この推定段階サブプロセスは、リスト中の最初のｋこの変数に割り当てられた値を用いて回路をシミュレーションする。このようなシミュレーションを実行できる回路シミュレータは、普及し、周知技術である。回路シミュレーションは、抽象化プロセスで使用されるべき変数の個数に関する情報を与える。ステップ１５３の回路シミュレーション中に、サブプロセスは、特に、回路内に存続するゲートの数を注意することにより、ｋ個の変数に値を割り当てることが回路に与える影響を観察する。ここで、回路内に存続するゲートは、値をｋ個の変数に割り当てても出力値が完全には決定されないゲートである。
【００３６】
ステップ１５５において、このサブプロセスは、回路内に存続するゲートの個数が部分空間選択のための適当な基準を与えるかどうかを決定する。図９に示されたサブプロセスにおいて、値ｋの初期選択は、変数の大部分に値が割り当てられるような値である。したがって、回路には非常に少数のゲートしか存続しないと考えられる。ｋの値が徐々に減少し、値が割り当てられる変数が減少すると共に、回路内に存続するゲートの個数は増加する。図９に示された実施例の場合、部分空間選択のため適切な基準を与えるゲートの個数は、ｋの値が減少して存続するゲートの個数が劇的に増加したときに、存続しているゲートの個数である。しかし、別の基準を使用してもよく、例えば、予め定められたゲートの個数、予め定められたゲートの割合、或いは、ｋの値への変更が回路内に存続するゲートの個数に著しい変化を生じさせないときなどの基準が用いられる。或いは、ｋが零を含む小さい数に初期設定され、漸増させる別の方法でもよい。この別の方法の場合、最終的なｋの値は回路のゲート数が著しい減少傾向を示す際のｋの値である。部分空間のサイズ、すなわち、適切なゲート数は、本発明の処理を実行する際に使用されるメモリサイズ、処理速度及び処理能力のような物理パラメータに依存する。
【００３７】
サブプロセスによって、存続するゲート数が適当ではないことが判定された場合、この処理はステップ１５７においてｋの値を変更する。回路内に存続するゲート数が非常に少ない場合、このサブプロセスはｋの値を減少させ、回路内に存続するゲート数が非常に多数である場合、この処理はｋの値を増加させる。この処理によって、ステップ１５５において存続するゲートの個数が適当であると判定された場合、このサブプロセスはステップ１５９において抽象関数を選択する。
【００３８】
直観的に、抽象関数は多数の種々の部分空間によって構成されるべきである。同時に、これらの部分空間は元の回路の性質を反映すべきである。表Ｉには、５個の潜在的な抽象関数が与えられている。表Ｉにおいて、Ｐ及びＰi は素数であり、ｎ、ｑ、ｐ及びｋは整数であり、Ｘi はブール変数である。当業者は、リストに掲載されていない多数の既知の抽象関数を使用することができる。
【００３９】
【表１】
0004334061.tif 000003
【００４０】
B.  候補順序選択段階について
候補順序選択段階において、ｍ個の異なる抽象関数が先頭のｋ個の変数に適用され、抽象二分決定グラフが動的再順序付けをオン状態にして構築される。この処理は、候補変数順序としてのｍ通りの変数順序を生成する。一実施例において、約２〜３個のサンプルが取り上げられ、上記の変数順序を拒絶、改良するため次の段階で使用される。
【００４１】
図１０は候補順序段階のサブプロセスのフローチャートである。ステップ５１において、このサブプロセスは、推定段階中に識別された抽象関数の中の１個を選択する。ステップ５５において、サブプロセスは、上述の如く、抽象関数が適用される制御変数として選択された最初のｋ個の変数を用いて、選択された抽象関数に対する抽象二分決定グラフを構築する。抽象二分決定グラフの構築は、深さ優先探索によって得られた変数順序を用いて始められ、動的再順序付けを使用して行われる。各抽象二分決定グラフは回路設計を表現する関数の窓又は部分空間を表現する。したがって、動的再順序付けの効果に起因して、各抽象二分決定グラフは、一般的に異なる最終的な変数順序を有し、最終的な変数順序は所与の抽象二分決定グラフを構築する際に使用された最後の変数順序である。各抽象二分決定グラフに対する最終的な変数順序は候補変数順序である。ステップ５９において、このサブプロセスは、より多くの抽象関数を検査する必要があるかどうかを決定する。検査されるべき抽象関数が未だ残っている場合、サブプロセスはステップ５１に戻り、抽象関数を選択する。さもなければ、このサブプロセスは終了し、呼出元に戻る。
【００４２】
C.  テスト法
候補順序段階の最後に、この処理はｍ通りの変数順序を決める。この処理は、ｘ＜ｍである場合に、不充分な変数順序を除去することによりテスト段階で、ｍ通りの編集順序の集合をｘ通りの変数順序に制限する。これは、付加的な部分空間を構築するため候補変数順序を使用し、得られた二分決定グラフのサイズと、一実施例においては、二分決定グラフを構築するため必要な時間とを検査することにより実現される。
【００４３】
回路フィルタスキームについて
この処理の一実施例のテスト段階において、この処理は、回路フィルタスキームを用いてｍ通りの変数順序の集合から無効な変数順序を削除する。回路フィルタスキームを用いることにより、処理はｍ個の変数順序の中から１個の変数順序を選択し、動的再順序付けをオフした状態で回路設計若しくはブール空間内のターゲット節点まで二分決定グラフを構築する。ターゲット節点は回路設計内の何れの節点でも構わない。ターゲット節点に対する二分決定グラフは、回路設計若しくは関数のブール部分空間を表現する。したがって、他のブール部分空間の形成方法を利用しても構わない。一実施例において、ターゲット節点は、回路の真ん中のような閾値レベルまでの主入力の間の節点である。他の実施例において、ターゲット節点は、ある閾値レベルにおいて、節点に接続する主入力の数が最も多い節点を見つけることにより選択される。この処理は、回路フィルタスキームを用いて二分決定グラフを構築するので、二分決定グラフが非常に大きくなり始めた場合に、このときの変数順序が無効な変数順序であると判定し、ｍ通りの変数順序の集合からその変数順序を削除する。この処理は、ｍ通りの変数順序の中の一つずつに対し、動的再順序付けをオフにした状態で回路設計若しくはブール空間内でターゲット節点まで二分決定グラフを構築することにより継続する。その結果として、無効な変数順序はｍ通りの変数順序の集合から削除され、ｘ通りの変数順序が生成される。
【００４４】
図１１には、回路フィルタスキームのサブプロセスのフローチャートが示されている。このサブプロセスは、ステップ７１において変数順序を選択する。また、ステップ７３において、このサブプロセスはターゲット節点を選択する。ターゲット節点は、閾値レベルまでの主入力の間の領域の回路内の節点である。詳述すると、図１１の処理中、ターゲット節点は最大個数の入力を有する領域内の節点であり、閾値レベルは回路の中間になるように選択される。ターゲット節点がサブプロセスによって識別された後、ステップ７７において、ターゲット節点用の二分決定グラフが構築される。この二分決定グラフは、ターゲット節点までの開始点として主入力を用いることにより構築される。二分決定グラフが構築できない場合、ステップ７１においてこのサブプロセスによって選択された変数順序は無視される。構築された二分決定グラフが非常に大きい場合、ステップ７１においてサブプロセスによって選択された変数順序は無視される。何れの条件も成立せず、かつ、ステップ７９において、このサブプロセスが未だ多数の変数順序が存在すると判定した場合、サブプロセスはステップ７１に戻る。全ての変数順序がこのサブプロセスによって検査された場合、サブプロセスは呼出元に復帰し、回路フィルタスキームが終了する。
【００４５】
回路フィルタスキームは、回路の部分空間を形成し、回路設計のサンプルを形成する回路サンプリング技術であるとみなされる。回路の調査が限定された他の回路サンプリングの方法を実施してもよい。例えば、回路内の一定数のレベルに関して、或いは、単に再順序付けの呼出がある所定のレベルを超えるまで回路の主出力に対する二分決定グラフを構築することは、回路ベース式サンプリングの別の例である。他のサンプリング法と同様に、回路ベース式サンプリング法は、他の全ての段階で使用され、又は、他の全ての段階を使用する。
【００４６】
図１２には、テスト段階の一般化された処理が示されている。図１２のサブプロセスは、多数の部分空間用の二分決定グラフを構築するため各変数順序候補を使用する。大きいサイズの二分決定グラフが得られる変数順序候補は、無効な変数順序として削除される。したがって、ステップ２７１において、このサブプロセスは候補変数順序を選択する。ステップ２７３において、サブプロセスは多数の部分空間用の二分決定グラフを構築するため初期変数順序として候補変数順序を使用する。一実施例において、二分決定グラフの構築は動的再順序付けを行うことなく実施される。ステップ２７５において、サブプロセスは選択された候補変数順序を用いて構築された二分決定グラフを調査し、候補変数順序を用いることにより大きいサイズの二分決定グラフが得られる場合に、候補変数順序リストからこの候補変数順序を削除する。ステップ２７７において、このサブプロセスは、候補変数順序が未だ残っているかどうかを判定し、候補変数順序が存在する場合に、ステップ２７１に戻る。候補変数順序が残っていない場合、サブプロセスは呼出元に復帰する。
【００４７】
実際上、サンプリングの簡単なバージョンでは、部分空間若しくは選択された部分空間の集合に対する最小サイズの二分決定グラフが得られるランダムに割り当てられた変数順序を用いてテスト段階だけを行えばよい。妥当な時間内に二分決定グラフを構築することができる回路の場合でも、このようなサンプリング技術によれば多数の有利な点が得られる。
【００４８】
例えば、（ある種の合成アプリケーションのような）多数のアプリケーションにおいて、ある種の関数Ｆの二分決定グラフを構築するための時間Ｔ＿ｂｄｄは、合成を完了するための総実行時間Ｔ＿ｔｏｔａｌの中の非常に僅かな部分である。
しかし、総実行時間Ｔ＿ｔｏｔａｌは、二分決定グラフＦのサイズに決定的に依存する。かくして、Ｆに対し良好な変数順序を決定する際にかなりの時間が使用されるとしても（すなわち、Ｔ＿ｂｄｄは倍率１０で増加するとしても）、総実行時間Ｔ＿ｔｏｔａｌは著しく減少するので、変数順序を決定する価値がある。
【００４９】
さらに、ある種のアプリケーションの場合、有効な変数順序は、如何なる時にも存在する二分決定グラフの全部の共用表現である二分決定グラフのマネージャに必要とされる。
再順序付けが所与の二分決定グラフマネージャでトリガーされたとき、新しいマネージャの順序はサンプリングプロセスの間に計算され得る。このような場合に、サンプリングされた空間（関数）は、例えば、抽象二分決定グラフ若しくは部分割当てを使用してマネージャに関して直接計算される。
【００５０】
また、二分決定グラフマネージャの当該部分（サンプル部分空間）は多数の方法で選択され得る。例えば、部分割当てｘ１＝０，ｘ２＝１，Ｘ３＝０が行われる場合を考える。この割当ては、その割当てによって得られる二分決定グラフがルート変数から発生した多数のパスによって共用された多数の節点を有する場合に、他の割当てよりも好ましいと考えられる。例えば、３個の変数を用いることにより、８通りのパスがルート変数から得られる。５通りのパスが存在する場合、ｘ１＝０，ｘ２＝１，ｘ３＝０の部分グラフに多数のノードが生じる。したがって、この部分空間は、他の部分割当てによって生成された部分空間よりもサンプリングのために適当な部分空間であることがわかる。
【００５１】
テストスキームについて
テスト段階の処理の他の実施例において、この処理は、テストスキームを用いることにより、ｍ通りの変数順序の集合から無効な変数順序を削除する。テストスキームを使用することにより、この処理はｍ通りの変数順序の中から一つの変数順序を選択し、動的再順序付けをオンにした状態で、新しいブール部分空間の集合に対し二分決定グラフを構築する。新しいブール部分空間の集合は、抽象関数を用いて抽象化を実行することにより決定されるが、他の部分空間形成方法を使用しても構わない。この処理は、新しいブール部分空間の集合に対し、ｍ通りの変数順序の中の１個ずつの変数順序を用いて二分決定グラフを構築することにより続けられる。最小サイズの二分決定グラフを生成した変数順序は、この処理によって最良の変数順序であると判定される。
【００５２】
平均化スキームについて
テスト段階における処理の他の実施例において、この処理は、平均化スキームを使用してｍ通りの変数順序から好ましくない変数順序を削除する。平均化スキームを用いることにより、この処理は、最終的な変数順序を生成するためｍ通りの変数順序を併合する。ｍ通りの変数順序の併合は、平均化関数を用いる処理によって行われる。
【００５３】
平均化関数の一実施例は、ブール部分空間の集合に対し、重大な若しくは大きい二分決定グラフを生成する変数順序を、同じブール部分空間の集合に対し小さい二分決定グラフを生成する変数順序に関係付ける関数である。本質的に、より多数のブール部分空間及び変数順序が使用、比較されると共に、より厳密な平均化関数を作成することができる。
【００５４】
変数ｉｄの有限集合Ｉに関して、Ｉ上の順序は有限集合Ｉの要素の系列になるように定義され、何れの要素も２回以上現れることがない。ｉ∈ｕなるＩ上の順序ｕに関して、ｉがｕ内に現れるとき、ｉ∈ｕに対し、ｐｏｓ（ｉ，ｕ）はｕ内におけるｉの位置（インデックス）である。
あるｔと、０≦ｒ＜ｔなる全てのｒに対し、順序ｕr 及び正整数値の荷重ｗr が与えられ、ｉ∈Ｉなる各ｉに対し、ｉ∈ｕr なるｒが存在する。また、Ｉの各要素のランクは、以下の通り定義される。尚、各和において、ｒはｉ∈ｕr である値の範囲を変化する。
【００５５】
【数２】
0004334061.tif 000004
【００５６】
入力の平均順序はランクの増加順にＩ内のインデックスとして定義される。
この定義は、荷重ｗr の種々の選択を用いて多数の平均化関数を定義するため使用される。
候補順序を組み合わせるには多数の選択肢が存在する。例えば、各変数順序は、共通部分文字列が各変数順序に存在する文字列とみなすことが可能である。或いは、平均順序は、文字列として決定され、種々の候補文字列内で共通「部分文字列」が検出される。また、数通りの平均順序は異なる（有効）順序を用いて計算され得る。
【００５７】
また、多数の候補順序の集合、或いは、候補順序の部分集合は、他の技術を用いて組み合わせてもよい。このような技術の中の一つは、遺伝的アルゴリズムベースの技術であり、変数順序の集団が与えられ、異なる順序がより良好な順序を得るため組み合わされる。シミュレーティッド・アニーリング式最適化手法は、変数順序を改良するため適用され得る。例えば、部分二分決定グラフは、候補順序を用いて構築することが可能であり、アニーリング処理はより良好な変数順序を決定するため実行される。部分的二分決定グラフ式シミュレーティッド・アニーリングは周知技術であり、参考のため引用されたMercer他による文献、Functional Approaches to Generating Ordering for Efficient Symbolic Representations, 29th ACM/IEEE Design Automation Conference, pp.614-619 (1992)に記載されている。
【００５８】
変数順序の集合は、参考のため引用されたFujii 他による文献、Interleaving Based Variable Ordering Methods For Ordered Binary Decision Diagrams, Proceedings of International Conference on Computer Aided Design, pp.38-41, 1993 に記載されているように変数順序の集合を合成する変数インターリーブ法、及び、変数追加法のような他の類似技術を用いて合成することができる。変数順序の集合を合成する別の同様な手法は、参考のため引用されたBei 他による文献、A New Heuristic Algorithm for OBDD Variable Ordering, 98 ASIC on Proceedings, pp.354-357, 1998に記載されているような適応選択的変数順序付け技術である。
【００５９】
D.  進展段階について
進展段階において、テスト段階の処理によって発生された変数順序の集合から最良の順序を決定する。変数順序の更なる改良は、例えば、抽象関数又は他の方法を使用することにより形成された独立して選択されたブール部分空間内の回路のブール関数に対する二分決定グラフを構築すると共に、再順序付けパッケージへの初期順序として変数順序を使用することにより実行される。ブール部分空間は、抽象二分決定グラフを用いて抽象化を実行することにより選択される。進展段階の最終的な結果は、最終的な二分決定グラフが構築される最終的な変数順序である。
【００６０】
図１３には、抽象化を使用する進展段階のサブプロセスのフローチャートが示されている。変数順序は、ステップ９１においてこのサブプロセスにより選択される。ステップ９５において、サブプロセスは抽象二分決定グラフを構築する。ステップ９５で構築された二分決定グラフは、二分決定グラフのサイズが非常に大きいかどうかを判定するためサブプロセスによって検査され、サイズが非常に大きい場合には、変数順序は、小さい二分決定グラフを作成するためサブプロセスによって再順序付けされる。再順序付け後に、二分決定グラフが構築できないか、或いは、そのサイズが依然として大きい場合に、この変数順序は廃棄される。変数順序が廃棄されない場合に、サブプロセスはステップ９７において未だ残っている変数順序について検査する。未だ変数順序が存在する場合に、このサブプロセスはステップ９１及び９５を繰り返し実行する。一部の実施例の場合、この処理は、部分空間を形成する種々の方法、若しくは、単に異なる部分空間を用いて実行される。
【００６１】
E.  構築段階について
回路のための二分決定グラフの構築は、進展段階によって生成された最終的な変数順序を使用する処理によって実行される。静的又は動的順序付け処理は、この回路のための最終的な最適二分決定グラフを作成するため初期順序としての最終的な変数順序と共に使用され得る。
【００６２】
III.  分解二分決定グラフを使用する方法
分解二分決定グラフは、一部の内部節点が分解点によって置換された二分決定グラフである。最終的な二分決定グラフは、主入力及び分解点変数の両方による表現である。分解二分決定グラフは、１９９７年１１月５日に出願された米国特許出願第０８／９６４，９０４号明細書に記載され、この米国特許出願明細書は参考のため引用される。回路の分解二分決定グラフ表現は、新しい変数を、分解点と称される内部ゲートに導入し、主入力及び分解点変数の両方を出力に対する二分決定グラフを構築することにより獲得される。Ｇd （Ψ，Ｘ）が原関数の分解二分決定グラフ表現であり、Ψ＝｛ψ1 ，ψ2 ，．．．，ψk ｝が関数の分解集合であると仮定する。
【００６３】
ψi ∈Ψなる各分解点に対し、主入力に関するψi 並びに、（場合によっては）ｊ＜ｉのときに他のψj ∈Ψの機能性を表現する順序付二分決定グラフ
【００６４】

【外１】
0004334061.tif 000005
【００６５】
が存在する。また、
【００６６】
【数３】
0004334061.tif 000006
【００６７】
がΨ内の分解点の順序付二分決定グラフを含む配列を表現する場合を想定する。変数ψi は、合成演算：
【００６８】
【数４】
0004334061.tif 000007
【００６９】
を用いてＧd 内の関数
【００７０】
【外２】
0004334061.tif 000008
【００７１】
によって置換してもよい。
別の値が分解集合Ψに割り当てられたとき、別の窓が獲得される。決定論的若しくはランダムに生成されたこれらの割当てに基づいて、原関数は以下のリストに記載された手続きを用いて作成される。
【００７２】
【数５】
0004334061.tif 000009
【００７３】
A.  推定
推定段階は、分解点及び分解点値割当てを決定する。分解点は幾つかの方法で決定される。一実施例において、分解点はランダムに追加され、或いは、ブール演算がメモリ若しくは時間の制約を超えた二分決定グラフを生じさせると考えられるときに追加される。この分解点を説明するため、ある種のブール演算
【００７４】
【外３】
0004334061.tif 000010
【００７５】
に関して、
【００７６】
【数６】
0004334061.tif 000011
【００７７】
を推定する場合を考える。ｓｉｚｅ（）が引数関数の二分決定グラフサイズを表す場合に、
ｓｉｚｅ（ｆ）＞Ｃ×［ｓｉｚｅ（ｇ）＋ｓｉｚｅ（ｈ）］
かつ
ｓｉｚｅ（ｇ）＞ｓｉｚｅ（ｈ）
であるならば、新しい変数ψi がｇに導入される。Ｃはユーザによって定義されるか、或いは、自動的に設定され得る定数である。さらに、個別の順序付二分決定グラフが所定の閾値をこえるとき、分解点が追加される。かくして、分解点は、
ｓｉｚｅ（ｆ）＞閾値限界
である場合に導入される。
【００７８】
しかし、最終的な変数順序は分解点変数に関して表現されない。したがって、ブール部分空間は値を分解点変数に割り当てることにより簡単化される。しかし、分解点によって表現されたノードに割り当てられる幾つかの値は、可制御性ドントケア集合に含まれ、このドントケア集合は、所定の回路で生成されないか、若しくは、所定の回路の動作とは無関係な値割当ての集合である。したがって、シミュレーション値が分解点への値割当てを決めるため使用される。
【００７９】
図１４には、分解ベース式部分空間サンプリングスキーム内で分解点を決定する推定段階のサブプロセスのフローチャートが示される。図１４に示されたサブプロセスは分解点を決定する。ステップ１７１において、サブプロセスは回路内の分解点のランダム数を選択する。ステップ１７３において、サブプロセスは、回路設計用の二分決定グラフの構築を開始し、主入力から始めて、ゲート毎に二分決定グラフを構築する。二分決定グラフを構築するため使用される初期変数順序は、幅優先探索、深さ優先探索、又は、深さ優先探索のある種の変形を行うことにより獲得される。ステップ１７５において、このサブプロセスは、二分決定グラフが「爆発中」であるかどうか、すなわち、構築されるべき最終的な二分決定グラフが時間又はメモリの何れかに関してかなり大きいことを示すレートで成長しているかどうかを判定するため、構築中の二分決定グラフを調べる。サブプロセスにおいて、二分決定グラフが爆発中であると判定された場合に、ステップ１７７でこのサブプロセスは分解点を挿入し、ステップ１８５においてこのサブプロセスは、挿入された分解点を用いて二分決定グラフの構築を継続する。ステップ１７５において、二分決定グラフが爆発中ではないと判定された場合に、サブプロセスはステップ１７９において二分決定グラフサイズを調査する。ステップ１７９において、二分決定グラフが極めて大きいとサブプロセスにより判定された場合、サブプロセスはステップ１７７において分解点を挿入し、ステップ１８５で二分決定グラフの構築を継続する。このサブプロセスのステップ１７９において、二分決定グラフサイズがあまり大きくないと判定された場合、サブプロセスはランダム分解点が挿入されるべきかどうかを判定する。このサブプロセスにおいて、ランダム分解点が挿入されるべきであると判定された場合、ステップ１７７で分解点が挿入され、ステップ１８５において二分決定グラフが構築され続ける。しかし、ランダム分解点が挿入されるべきではないと判定された場合、サブプロセスはステップ１８５において二分決定グラフを構築し続ける。
【００８０】
他の実施例において、推定処理は動的である。動的推定処理において、少数の分解点だけが窓内で選択される。この関数は窓内で合成される。合成中に、二分決定グラフが爆発するとき、二分決定グラフは、合成され続けるべき一つの関数にブール値を割り当てることにより、若しくは、所与の関数内の一部の主入力変数にブール値を割り当てることにより、分割される。或いは、閾値を設定することが可能であり、二分決定グラフは二分決定グラフサイズが閾値を下回るまで分割される。同様に、選択された分解点の個数が窓を非常に小さくさせるとき（すなわち、サンプリングされた二分決定グラフのサイズが非常に小さい場合）、この処理は所与の窓内で選択された分解点の個数を減少させる。
【００８１】
図１５は、分解ベース式部分空間サンプリングスキームにおける分解点値割当てを決定する推定段階のサブプロセスのフローチャートである。ステップ１９１において、この処理はテストベクトルを用いて回路設計をシミュレートする。テストベクトルは、図１４のサブプロセスと共に使用するため特別に設計されるか、或いは、テストベクトルの組から選択される。ステップ１９３において、サブプロセスは分解点で使用するための値を決定する。これは、ステップ１９１におけるサブプロセスによって実行される回路設計シミュレーション結果を検査することにより実行される。各テストベクトルは回路設計の全ての分解点に対し割当ての集合を与える。したがって、実際の回路動作中に生じ得ない分解点値割当ての集合は形成されない。分解点に対応した回路設計の節点で値を検査することにより、回路設計に基づいて回路の動作中に生じない値の割当てを回避することが可能である。このサブプロセスのステップ１９５において、シミュレーションのための更なるテストベクトルが残されているかどうかが判定される。更なるテストベクトルがシミュレーションのため残されている場合、この処理はステップ１９１に戻り、更なる割当て値が得られる。更なるテストベクトルが残っていない場合、サブプロセスは復帰する。
【００８２】
B.  候補順序選択段階について
図１６には、分解部分空間スキームにおける候補順序選択段階のサブプロセスのフローチャートが示されている。ステップ２１３において、推定段階中に発生された分解点値割当ての集合の中の一つが選択される。実際に分解点に値を割り当てることにより、分解点への関数は、その分解点に対するシャノン展開式の論理１又は論理０の何れかの部分になるように変更される。ステップ２１３からの分解点割当て並びに分解点を決定する際に推定段階で使用された変数順序を使用することにより、ステップ２１５において、上記のリストに記載されて手続きを動的再順序付けと共に用いて二分決定グラフが構築される。抽象ベース部分空間と同様に、異なる分解点値を用いて形成された部分空間に対し二分決定グラフを構築する際に使用された最終的な変数順序は、異なる部分空間の動的変数順序の異なる影響に起因して、一般的に異なる。したがって、各最終的な変数順序は、候補ベクトル順序を形成する。このサブプロセスのステップ２１９において、未だ利用可能な分解点割当てがあるかどうかが判定される。未だ分解点割当てが残っていると判定された場合、サブプロセスはステップ２１３に進み、分解点に対する別の値割当ての組を選択する。分解点割当てがこれ以上存在しないと判定された場合、このサブプロセスは呼出側に復帰（リターン）する。
【００８３】
C.  テスト段階について
分解二分決定グラフを使用するテスト段階において、この処理は、候補選択段階から生成された変数順序を使用し、無効であると思われる変数順序を棄却する。サイズの縮小された二分決定グラフがある変数順序を用いて構築された場合に、その変数順序は有効である。大きいサイズの二分決定グラフがその変数順序を用いて構築された場合、その変数順序は無効である。
【００８４】
分解二分決定グラフを使用するテスト段階において、候補順序選択段階の処理によって生成された変数順序が使用され、新しい二分決定グラフを構築するため回路設計内で異なる分解点が選択される。この処理によって、異なる分解点を用いる候補順序選択段階の処理によって生成された各変数順序に対し、新しい二分決定グラフが構築され続ける。テスト段階中にこの処理によって生成された二分決定グラフのサイズは、使用される変数順序の有効性又は無効性を決定する。
D.  進展段階について
進展段階では、テスト段階で分解二分決定グラフを使用して生成された変数順序の組から最終若しくは最良の順序が判定される。変数順序の改良は、回路内の他の選択されたブール部分空間のため動的再順序付けを使用して二分決定グラフを構築するため初期順序としてその変数順序を使用することにより実行される。他のブール部分空間は、回路内で他の分解点を選択することにより選ばれる。しかし、他の方法論と同様に、他の部分空間は他の方法を用いて形成され得る。詳述すると、種々の段階で部分空間を選択する方法は、ある程度、他の段階で使用される方法と独立している。最終的に、異なるブール部分空間に対し最小の二分決定グラフを生成する変数順序が選択され、最終的な変数順序とされる。
【００８５】
E.  構築段階について
回路に対する二分決定グラフの最終的な構築は、分解二分決定グラフを使用する進展段階によって生成された最終的な変数順序を用いて実行される。静的若しくは動的再順序付けは、回路全体に対し最終的な最適二分決定グラフを生成するため最終的な変数順序と共に再使用され得る。
【００８６】
F.  回路サンプリングについて
回路サンプリングにおいて、ブール部分空間は、回路設計又はブール関数を作成するゲート又は節点の部分集合を選択することにより形成される。
IV. 部分割当てを使用する方法論について
部分割当ては回路を部分空間に分割する処理である。主入力の部分集合を選択し、選択された主入力に値を割り当てることにより、主出力からの送出量に影響を与えるゲートの数が制限される。
【００８７】
部分割当ては、主入力変数の部分集合のブール割当てである。主入力変数の一部にブール値が割り当てられたとき、主入力に依存した関数によって表現されるブール空間の一部は、サイズが縮小される。したがって、関数の部分空間は部分割当てを用いて作成される。
詳述すると、｜Ｊ｜＝ｋである場合に、変数Ｊの集合に関する割当て関数は、Ｊの各要素に１個ずつのｋ個の文字の連結である。かくして、割当て関数Ａは、対応した文字がＡにおいて正若しくは負の何れであるかに依存して真又は偽（０又は１）をＪの各要素に割り当てる関数である。関数Ａは、
Ｊ⊆Ｉ
に対しＪに関する割当てである場合に、集合Ｉに関する部分割当て関数である。かくして、所定の主入力変数の集合に対し、主入力変数Ｊの集合は選択され、値が割り当てられる。換言すると、Ｊ上のランダムに異なるｔ個の割当て関数の集合Ａが選択される。かくして、関数
Ｓ＝｛ｆa ｜ａ∈Ａ｝
の集合に対し、Ｓにおける各関数はｆのサンプルである。
【００８８】
A.  推定段階について
部分割当てを用いて形成された部分空間のサイズ及び個数は、値が割り当てられた変数の個数と、それらの値に割り当てられた値の組合せとに依存する。したがって、分割ベース式部分空間スキームに対する推定段階中に、上記２項目が決定される。
【００８９】
図１７は、部分割当てを使用する推定段階のサブプロセスのフローチャートである。ステップ１３１において、このサブプロセスは、深さ優先探索技術を用いて主入力、すなわち、変数を順序付ける。深さ優先探索並びに深さ優先探索を実行する方法は周知技術である。他の実施例において、プライオリティ深さ優先探索が使用され、当業者は他の方法を使用してもよいことを認めるであろう。ステップ１３５において、値がｋ個の多数の変数に割り当てられる。ステップ１３７において、サブプロセスは多数の二分決定グラフを作成し、ｋ個の変数に値が割り当てられ、少なくとも値の一部は異なる二分決定グラフに対し相違する。ステップ１３９において、ステップ１３７において作成された二分決定グラフの平均サイズが妥当であるかどうかが判定される。二分決定グラフのサイズの妥当性は、一方で、上記処理を実行するコンピュータシステムのコンピュータアーキテクチャ制約条件と、この処理を実行するため要する時間とに依存する。作成された二分決定グラフが非常に大きい場合に、サブプロセスのステップ１４１において値がより多くの変数に割り当てられ（すなわち、変数の数が増加し）、この差ププロセスによってステップ１３７及びステップ１３９が繰り返される。作成された二分決定グラフが非常に小さい場合に、このサブプロセスのステップ１４５において、値がより少ない変数に割り当てられ（すなわち、変数の数が減少し）、ステップ１３７及びステップ１３９が繰り返される。二分決定グラフのサイズが妥当である場合、サブプロセスのステップ１４３において、多数の割当て集合がｋ個の変数に対し準備される。変数割当て集合は回路毎にテストベクトルから取り出される。他の実施例の場合に、変数割当て集合はランダムに作成される場合がある。ステップ１４７において、ステップ１４３の値割当ての集合毎に１個ずつの多数の二分決定グラフが構築される。ステップ１４９において、サブプロセスは割当てを更に変更し、呼出側に復帰する。一実施例では、ステップ１４９において、同量の制御性割当て及び非制御性割当てが行われるように割当てが変更される。制御性割当てとは、ＡＮＤゲートに入力に零を割り当て、ＯＲゲートの入力に１を割り当てるようなゲートを削除させる割当てである。非制御性割当てとは、制御性割当てと反対の効果を有する割当てである。他の実施例において、割当ては非制御性割当ての個数を最大限にするよう選択されるが、制御性割当てと非制御性割当ての比率はどのような比率でも構わない。また、ステップ１４９において、サイズが零の二分決定グラフを作成する割当て若しくは割当ての集合の使用を回避することによって割当てが変更される。
【００９０】
B.  候補順序選択段階について
部分空間を決定するため並列的な割当てを用いるスキームのための候補選択段階は、他のスキームのための候補選択段階と類似している。換言すれば、各部分割当て集合によって定義された部分空間に対する二分決定グラフを動的再順序付けを用いて構築することにより、異なる候補変数順序が部分空間毎に獲得される。深さ優先探索によって生成されたリスト内の最初のｋ個の変数は値が割り当てられるが、最初のｋ個の変数は動的再順序付け処理の一部ではない。したがって、各候補変数順序は、全ての部分空間が最初のｋ個の変数に対する値割当てを含む場合に、同じ最初のｋ個の変数を有する。
【００９１】
図１８には、並列的な割当てを用いる候補順序選択段階のサブプロセスのフローチャートが示されている。ステップ２３３において、部分割当ての集合が選択され、すなわち、変数の一部に割り当てるための値の集合が選択される。ステップ２３３で得られた部分的割当てを使用することにより、ステップ２３５において二分決定グラフが構築される。ステップ２３９において、利用可能な部分割当てが未だ残っているかどうかが判定される。未だ利用可能な部分割当てが残っていると判定された場合、サブプロセスはステップ２３３に進み、別の部分割当て集合が選択される。利用可能な部分割当てが残っていないと判定された場合、サブプロセスは復帰する。
【００９２】
C.  テスト段階について
候補順序段階の最後に、ｍ通りの変数順序が決定される。テスト段階における処理は、ｍ通りの変数順序の中から無効な変数順序を削除することにより、ｍ通りの変数順序の集合をｘ通りの変数順序に制限する。
テストスキームについて
テスト段階における処理は、候補順序段階の処理によって生成された順序とは異なる順序を使用し、無垢な変数順序を捨てる。この変数順序によって小さいサイズの二分決定グラフが生成される場合、この変数順序は有効であると考えられる。この変数順序によって大きいサイズの二分決定グラフが生成される場合、この変数順序は無効である。
【００９３】
部分割当てを使用するテスト段階において、変数順序に異なる値が割り当てられ、次に、二分決定グラフが構築される。二分決定グラフのサイズを検査することにより、変数順序が有効であるか無効であるかが判定される。他の実施例において、異なる変数順序に値が割り当てられ、二分決定グラフが構築される。二分決定グラフのサイズを再度検査することにより、変数順序の有効性若しくは無香性が判定される。
【００９４】
D.  進展段階について
部分割当てを使用する進展段階における処理は、テスト段階内の処理によって生成された変数順序の集合から最良の順序を決定する。
この処理によって、新しいブール部分空間の集合に対し、ｍ通りの変数順序の中の一つの変数順序を用いて動的再順序付けをオンにした状態で二分決定グラフが構築される。新しいブール部分空間の集合は、値をブール空間の多数の主入力に割り当てることにより決定される。その結果として、小さい二分決定グラフの集合は繰り返し構築される。この処理は、ｍ通りの変数順序の中の各変数順序についてブール部分空間の集合に対し二分決定グラフを構築することにより続けられる。最小サイズの二分決定グラフを生成する変数順序は、この処理によって最良の変数順序であると判定される。
【００９５】
この処理は、深さ優先探索順序から最良変数順序までの最初の数通りの変数を含む。すなわち、割当て関数ａに対し、
ａ∧ｆa に対する二分決定グラフが構築され、再順序付けされる。変更された最良の変数順序を使用することにより、この処理は、動的再順序付けをオンにした状態でブール部分空間の第２の集合に対する二分決定グラフを構築する。だい２のブール部分空間の集合は、値をブール空間の少数の主入力に割り当てることによって決定される。その結果として、最小サイズの二分決定グラフを生成する変数順序は、この処理によって、回路全体の最終的な二分決定グラフを構築するための最終的な変数順序であると決定される。
【００９６】
B.  構築段階について
回路に対する二分決定グラフの最終的な構築は、部分割当てを用いて進展段階で生成された最終的な変数順序を用いて実行される。静的若しくは動的順序付け処理は、回路に対する最終的な最適二分決定グラフを作成するため最終的な変数順序と共に使用される得る。
【００９７】
【発明の効果】
IV. 結論
本発明によれば、関数若しくは回路設計を表現するブール空間の部分空間をサンプリングすることにより二分決定グラフを構築するため変数順序を形成するシステム及び方法が実現される。上記の説明では、ある特定の実施例に関して本発明が記載されているが、多数の付加的な変形及び変更をなし得ることは当業者にとって明らかである。したがって、本発明は上記の実施例の説明以外の形で実施することが可能である。本発明の上記の実施例は、本発明の例示であって、本発明を制限するものではなく、本発明の範囲は、上記の実施例の説明ではなく、特許請求の範囲に記載された事項並びにその均等物によって示されることに注意する必要がある。
【図面の簡単な説明】
【図１】ディジタル論理回路のトポロジーを説明する論理設計図である。
【図２】図１に示された回路の機能性を表現する二分決定グラフである。
【図３】図２に示された二分決定グラフの既約二分決定グラフである。
【図４】本発明の処理のフローチャートである。
【図５】論理関数の二分決定グラフである。
【図６】図５に示された論理関数の均一化された二分決定グラフである。
【図７】対称性のある抽象関数を用いて図５の論理関数から得られた抽象二分決定グラフである。
【図８】図５の論理関数の既約抽象二分決定グラフである。
【図９】抽象部分空間を用いる推定段階サブプロセスのフローチャートである。
【図１０】抽象部分空間を用いる候補順序選択段階サブプロセスのフローチャートである。
【図１１】回路フィルタサブプロセスのフローチャートである。
【図１２】テスト段階サブプロセスのフローチャートである。
【図１３】進展段階サブプロセスのフローチャートである。
【図１４】分解点部分空間を用いる推定段階サブプロセスのフローチャートである。
【図１５】分解点値割当てを決定するサブプロセスのフローチャートである。
【図１６】候補順序選択段階サブプロセスのフローチャートである。
【図１７】部分割当てを用いる推定段階サブプロセスのフローチャートである。
【図１８】並列的な割当てを用いる候補順序選択段階のサブプロセスのフローチャートである。
【図１】
0004334061.tif 000012
【図２】
0004334061.tif 000013
【図３】
0004334061.tif 000014
【図４】
0004334061.tif 000015
【図５】
0004334061.tif 000016
【図６】
0004334061.tif 000017
【図７】
0004334061.tif 000018
【図８】
0004334061.tif 000019
【図９】
0004334061.tif 000020
【図１０】
0004334061.tif 000021
【図１１】
0004334061.tif 000022
【図１２】
0004334061.tif 000023
【図１３】
0004334061.tif 000024
【図１４】
0004334061.tif 000025
【図１５】
0004334061.tif 000026
【図１６】
0004334061.tif 000027
【図１７】
0004334061.tif 000028
【図１８】
0004334061.tif 000029