(57)【特許請求の範囲】
【請求項１】
順序回路およびその抽象モデルである有限状態機械のある状態集合を表す二分決定グラフから、それらの次状態全てからなる次状態集合を表す二分決定グラフを生成するための像計算を行い、順序回路の状態探索処理を行う順序回路の状態探索装置であって、
次状態関数と、二分決定グラフの初期状態を入力する入力手段と、
前記入力手段による入力もしくは現状態集合が入力されたときに、次状態の変数の位置の候補を複数あげ、それぞれの位置にしたときの二分決定グラフのサイズを計算し、そのサイズが一番小さくなる位置を、次状態の変数の位置として決定する計算手段と、
前記計算手段により決定した位置に次状態の変数を生成しながら像計算を行う事により次状態集合を求める像計算手段と、
既に到達した全ての集合である既到達集合の二分決定グラフの変数順と、次状態集合関数の二分決定グラフの変数順を前記像計算手段にて求めた次状態集合の変数順に合わせる手段と、
前記像計算手段で求めた次状態集合を既到達状態集合に加え、その結果、既到達状態集合の値が変われば、次状態集合を現状態集合の入力として前記計算手段に入力する手段と、
を有することを特徴とする順序回路の状態探索装置。
【請求項２】
順序回路およびその抽象モデルである有限状態機械のある状態集合を表す二分決定グラフから、それらの次状態全てからなる次状態集合を表す二分決定グラフを生成するための像計算を行い、順序回路の状態探索処理を行う順序回路の状態探索装置であって、
次状態関数と、二分決定グラフの初期状態を入力する入力手段と、
前記入力手段による入力もしくは現状態集合が入力されたとき、直前に導入した次状態変数の位置に隣接した位置を次状態の変数の位置として選択する計算手段と、
前記計算手段により選択した位置に次状態の変数を生成しながら像計算を行う事により次状態集合を求める像計算手段と、
既に到達した全ての集合である既到達集合の二分決定グラフの変数順と、次状態集合関数の二分決定グラフの変数順を前記像計算手段にて求めた次状態集合の変数順に合わせる手段と、
前記像計算ステップで求めた次状態集合を既到達状態集合に加え、その結果、既到達状態集合の値が変われば、次状態集合を現状態集合の入力として前記計算手段に入力する手段と、
を実行することを特徴とする順序回路の状態探索装置。
【請求項３】
前記計算手段は、像計算毎に異なる変数順を決定することを特徴とする請求項１または請求項２の何れかに記載の順序回路の状態探索装置。
【請求項４】
像計算手段は、現状態集合以外の部分を考慮しないようにすることにより次状態関数の二分決定グラフを簡単化した関数の二分決定グラフを用いて像計算を行うことを特徴とする請求項１または請求項２の何れかに記載の順序回路の状態探索装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、順序回路の合成、設計検証およびテストパタン生成等において行われる状態探索の計算を効率的に行うための状態探索方法および装置並びに状態探索プログラムを記録した記録媒体装置に関する。
【０００２】
【従来の技術】
順序回路およびその抽象モデルである有限状態機械（Finite State Machine；ＦＳＭ）の状態を探索する技術は、各種の論理設計支援技術、例えば、設計検証、論理合成、テストパタン生成などにおいて極めて重要である。近年の集積回路技術の進歩に伴い、より大規模なシステムが論理回路として実現されるようになり、大規模なＦＳＭに付する状態探索の効率化が望まれている。
ＦＳＭの状態探索は、与えられたＦＳＭの状態遷移グラフ上で初期状態から深さ優先探索や幅優先探索などの古典的なグラフ探求アルゴリズムを用いても行うことができる。しかし、例えば、フリップフロップ（以下ＦＦという）数が３０個の順序回路は、とり得る状態数が最大２30（約１０9 ）個あり、それらの状態を一つ一つ明示的に扱う古典的な方法では、現実的な時間ですべての到達可能状態の探索を行うことは不可能であった。
【０００３】
１９８９年、状態集合を論理関数で表現し、さらにその論理関数を二分決定グラフ（Binary Decision Diagram ；ＢＤＤ）により非明示的に表すことにより、ＢＤＤの処理によるＦＳＭの状態探索を行う方法が考案された（［1] O.Coudert and J.C.Madre Verification of sequential machines using boolean functional vectors.In Proc.IFIP International Workshop on Appried Formal Methods for Correct VLSI Desgin,pages 111-128,November 1989.参照）。
ＢＤＤは実用的な論理関数をコンパクトに表現できるため、この非明示的処理により扱えるＦＳＭの大きさは飛躍的に増大した。
しかし、二分決定グラフは、表現する論理関数の変数に順序づけをしておく必要があり、さらに、変数の順序づけによりグラフのサイズが大きく依存するという性質がある。
そのため、よい変数順をいかにして得るかが大きな問題となった。
【０００４】
まず、組合せ回路からその出力関数を表すＢＤＤを生成する場合に、良い変数順を回路の結線情報などから計算する方法が提案された。これらの方法により、多くの回路に付して、より小さなＢＤＤが得られるようになった。しかし、やはり計算の途中でＢＤＤが爆発することも多かった。さらに、ＦＳＭの状態探索においては、次状態関数だけでなく、各像計算で得られる次状態集合および到達した全ての状態集合など特徴の異なる論理関数をＢＤＤで表す必要があり、それら全てによい変数順をあらかじめ求めることは難しかった。
【０００５】
そこで、１９９３年、あらかじめ決めた変数順を最後まで固定にするのではなく、計算の途中でＢＤＤが爆発しかけると、その時点でのよい変数順を求め直し、変数順を変えるという動的変数順序づけ法が提案された（[2] R.Rudell.Dynamic variable ordering for ordered binary decision diagrams.In Proceedings of IEEE/ACM International Conference on CAD-93,pages42-47,November 1993. 参照）。
以降、ＢＤＤを計算する前に決める変数順序づけを静的変数順序づけと呼ぶ。提案された動的変数順序づけは、実際に変数の順序を入れ換えてみて、良い位置に変数を置くというもので、問題に依存することなく、ＢＤＤを用いるどのような応用に対しても適用することができる。
【０００６】
ＦＳＭの状態探索においても、静的変数順序づけではＢＤＤが爆発していた多くの問題に対して、動的変数順序づけを用いることによりＢＤＤのサイズを処理可能な程度に削減することができた。しかし、動的変数順序づけは、実際にＢＤＤ中で変数を移動させることにより、よい変数順を求めるため、たいへん多くの計算時間を必要とした。また、移動途中でＢＤＤが爆発してしまうこともあり、これらの点が問題とされた。さらに、動的変数順序づけではある時点で変数順の入れ換えを一度に行うため、いつの時点で入れ換えを行うかのスケジューリングが難しいという実用上の問題もあった。
【０００７】
以下二分決定グラフと二分決定グラフによる集合の表現、二分決定グラフを用いたＦＳＭの状態探索について説明する。
（１）二分決定グラフ
計算機での論理関数の表現法としては、真理値表、積和形論理式、ファクタードフォーム、二分決定グラフ（ＢＤＤ）などがある。このうちＢＤＤは、良い変数順を与えることができれば、大きな論理関数を表現することができる。
ＢＤＤは、図１８（ａ）に示すような二分決定木において場合分けする変数順を全てのパスで固定し、さらに等価な部分グラフの共有と冗長なノードの削除を行ったものである。この縮約により論理関数がコンパクトに表現できるようになるとともに、正規形となる。すなわち同一の論理関数は同一のＢＤＤとなる。
例えば、図１８（ｂ）の関数に、ｘ1 ＝１，ｘ2 ＝０，ｘ3 ＝０を代入したときの値は、図のＢＤＤの根（一番上の矢印）から１，０，０の枝を順にたどると葉１に到達するので、値が１であることがわかる。
【０００８】
ＢＤＤを用いた論理関数の演算として、通常用いられる論理和（＋）、論理積（・；ただし、論理積の・は省略する場合もある）、論理否定（上横バー、本文では必要に応じて (’) で表現する）、排他的論理和（丸の中に＋：本文中では必要に応じて (EOR)で表現する：ｘ(EOR) ｙ＝ｘ・ｙ' ＋ｘ' ・ｙ）、等価演算（≡；ｘ≡ｙ＝ｘ・ｙ＋ｘ' ・ｙ' ）を用いる。なお、以下の式ではベクトルを記号の上に（→）を付して示すが、本文中では（ベクトル）と表記する。
また、上記表現の他に、smoothing 演算を用いる。論理関数：ｆ：Ｂn →Ｂの入力変数のある部分集合がｘ（ベクトル）＝｛ｘ１，ｘ２，…，ｘk ｝であるとき、Ｆのｘ（ベクトル）に関するsmoothing （existential quantification）∃ｘ（ベクトル）を以下の（１）（２）式のように定める。
【０００９】
【数１】
0003741544.tif 000002
【００１０】
ＢＤＤはその変数順によりグラフのサイズ、すなわちノード数が大きく変化するという性質がある。
例えば関数ｆ＝ｘ1 ・ｘ2 ＋ｘ3 ・ｘ4 を表すＢＤＤについて、変数順が最適な場合と最悪な場合を示すと図１９のようになる。最適な変数順では同図（ａ）に示すようにノード数が４なのに付して、最悪な変数順では同図（ｂ）に示すようにノード数が６になっている。ただし、ここではノード数に葉のノード数は含めない。
一般に、最適変数順と最悪変数順のノード数の差は、表す関数の変数の数が大きくなるほど大きくなる。上記の関数ｆで変数が６つになった場合、すなわち、ｆ＝ｘ1 ・ｘ2 ＋ｘ3 ・ｘ4 ＋ｘ5 ・ｘ6 の場合、最適変数順、最悪変数順それぞれでのＢＤＤのサイズは６および１４となり倍以上の差となる。
【００１１】
（２）二分決定グラフによる集合の表現
ｎ変数論理関数ｆ：Ｂn →Ｂは、ｆを１にする入力ベクトルの集合、すなわち最小項の集合と見ることができる。ある２値ベクトルの集合Ｓ⊆Ｂn に対して、次の（３）式で表されるｎ変数論理関数χs を集合Ｓの特徴関数とよぶ。
【００１２】
【数２】
0003741544.tif 000003
【００１３】
したがって、ある２値ベクトルの集合Ｓに付し、Ｓの特徴関数をＢＤＤで表現すれば、ＳがＢＤＤで表現できたことになる。この表現は集合のＢＤＤによる非明示的表現とも呼ばれる。
例えば、ある２値ベクトルの集合Ｓ＝｛000,010,100,110,111 ｝に対する特徴関数は、ｉビット目に変数ｘi を割り当てるとすると、χs ＝ｘ1 ・ｘ2 ＋ｘ3'となる。すなわち、上記２値ベクトルの集合Ｓの任意のベクルトに対し、そのベクトルでの変数ｘi （ｉ＝１，２，３）の値を上記式に代入したときχs ＝１となり、このような関数χs を特徴関数という。また、この特徴関数を表現するＢＤＤは前記図１８（ｂ）に示したようになる。
【００１４】
（３）二分決定グラフを用いたＦＳＭの状態探索
ＦＳＭの状態探索とは、ある与えられた初期状態あるいは初期状態の集合から、ある入力系列により到達することのできる状態を全て探索することをいう。状態探索は、与えられたＦＳＭの状態遷移グラフ上て初期状態から可能な全ての遷移をたどっていく処理に基づいて行うことができる。
ＦＳＭが大規模な場合、これらの遷移数が膨大となるため、状態一つ一つの遷移を順に調べる方法では現実的な時間で探索を完了することが不可能である。
そこで、二分決定グラフを用いた状態探索では、多くの状態を一まとめにしてそれらの遷移を同時に調べ、その次状態の集合を求める処理に基づいて行う。この処理では、膨大な状態遷移グラフを直接作る必要はなく、各状態変数に対する次状態関数、すなわち、各人力と現状態に付してその状態変数が次状態でとるべき値を計算する論理関数を表すＢＤＤを作り、それらのＢＤＤと次状態を求めたい状態集合を表すＢＤＤどうしの演算によって次状態の集合を表すＢＤＤを求める。
【００１５】
ＢＤＤの演算は次のように行われる。例えば、２つの論理関数ｆ＝ｘ1 ｘ2 ，ｇ＝ｘ1 ＋ｘ2 がＢＤＤで表されているとき、その論理積のＢＤＤは以下のように求まる。
変数順がｘ1 ，ｘ2 のとき、ｆ，ｇを表すＢＤＤは図２０（ａ）（ｂ）に示すようになる。ここで、（ｆ・ｇ）＝ｘi'・（ｆx1' ・ｇx1' ）＋ｘi ・（ｆx1・ｇx1）が成り立つので、ｆ・ｇのＢＤＤは、同図（ｃ）に示すように、一番根に近い変数ｘ1 の０枝が指すＢＤＤがｆx1' ・ｇx1' 、１枝が指すＢＤＤがｆx1・ｇx1となる。
【００１６】
したがって、ｆx1' ・ｇx1' 、ｆx1・ｇx1のＢＤＤを作ることができれば、ｆ・ｇのＢＤＤも作ることができる。この例では、ｆx1' ＝０であるので、ｆx1' ・ｇx1' が０であることがわかり、そのＢＤＤは同図（ｄ）の通りである。また、ｇx1＝１であるので、ｆx1・ｇx1＝ｆx1＝ｘ2 となり、そのＢＤＤは同図（ｅ）の通りである。その結果、ｆ・ｇのＢＤＤは、同図（ｆ）のようになる。
ここで、ｆx1，ｇx1とも定数でない場合には、変数ｘ2 に対して、図１９（ｃ）と同様な展開を行う。これを高々変数の数だけ繰り返せば必ず定数ノードに至るので、積のＢＤＤを生成することができる。
【００１７】
以下、例により二分決定グラフを用いた状態探索を説明する。
ここで、一例として、図２１のような状態遷移表をもつＦＳＭ  Ｍについて考える。図２１において、現状態の前の”→”は初期状態を表す。この状態遷移図を持つ順序回路Ｍは図２２の通りである。図２２において、白丸はＮＯＴゲート（否定演算）を表すものとする。なお、本計算では外部出力は考慮しないため、それに関する部分は図２１、図２２においては省略している。
【００１８】
図２２に示す順序回路Ｍにおいて、現状態集合Ｓ＝｛0010,0011 ｝の次状態集合は図２１から明らかなように、｛0110,1101,1110,1111 ｝である。
状態集合Ｓがその特徴関数により表現されているとき、次状態関数ベクトルｆ（ｘ，ｙ）（ｆ，ｘ，ｙはベクトル）による状態集合Ｓ（ｙ）（ｙはベクトル）の像Ｉｍｇ（ｆ（ｘ，ｙ），Ｓ（ｙ））（ｆ，ｘ，ｙはベクトル）は以下の（４）式のように関数処理により計算できる。ただし、ｘ，ｙ（ｘ，ｙはベクトル）はそれぞれ入力変数および現状態変数であるとする。また、ＦＳＭ  Ｍの次状態関数は、（５）式〜（８）式である。
【００１９】
【数３】
0003741544.tif 000004
【００２０】
図２１、図２２に示したＦＳＭ  Ｍの状態集合Ｓの特徴関数はＳ＝ｙ1'ｙ2'ｙ3 であるので、Ｉｍｇの特徴関数は以下の（９）式のように計算できる。
【００２１】
【数４】
0003741544.tif 000005
【００２２】
現状態集合Ｓからの像計算ではＳからの遷移のみを考慮すればよいので、Ｓ以外からの遷移をドントケアとして関数ｆi を簡単化した関数ｆi ｜s をｆi の代わりに用いることもできる。
すなわち、像計算に必要な遷移のみを考慮して、像計算の間のみ一時的にフリップフロップを削除して、簡単化した関数ｆi ｜s をｆi の代わりに用いる。なお、上記Ｓ以外からの遷移をドントケアとして関数ｆi を簡単化した関数ｆi ｜s を用いる点については、本出願人が先に提案した特願平１０−６０９８２号参照を参照されたい。
【００２３】
上記の計算を行う具体的な手続き、すなわち現状態集合を表すＢＤＤ  Ｓと次状態関数ｆi （ｉ＝１，…，ｎ）を表すＢＤＤに対して像計算を行う手続きを図２３に示す。
同図において、ステップＳ１において、状態集合Ｓ〔例えば、前記（９）式においてはＳ＝ｙ1'ｙ2'ｙ3 〕をＴｏに入れる。次に、ステップＳ２において、未処理の次状態変数Ｙi を一つ選び、ステップＳ３において、Ｙｉを表すＢＤＤを生成する。
ステップＳ４において、Ｔｏ（Ｙi ≡ｆi ）を計算しＴｏに入れる。例えば、前記（９）式の場合、一回目の計算においては、ｙ1'ｙ2'ｙ3 ・（Ｙi ≡ｆi ）の計算を行う。この計算は、ｙ1'ｙ2'ｙ3 、Ｙi 、ｆi をそれぞれＢＤＤで表し、前記図２０で説明したようにＢＤＤ同士の演算により行われる。
【００２４】
次に、ステップＳ５において、まだ消去していない入力変数および現状態変数で、未処理の次状態関数のどれもが依存していない変数の集合ｖ（ｖはベクトル）を求める。すなわち、Ｔｏが依存する変数（Ｔｏの式中に現れる変数）の中でまだ選択されていない次状態関数のどれにも現れない変数の集合ｖ（ｖはベクトル）を求める。
ステップＳ６において、∃ｖ．Ｔｏ（ｖはベクトル）を求めＴｏに入れる。
次いでステップＳ７において、選ばれていないＹi が存在するか否か調べ、存在している場合にはステップＳ２に戻り上記処理を繰り返す。また、選ばれていないＹi が存在しない場合には処理を終了する。
像計算は、幅優先探索の１ステップに対応するため、初期状態からはじめて、新しく到達した状態がなくなるまで像計算を繰り返すことによりすべての到達可能状態が関数処理により求まる。
【００２５】
図２４に基本的な状態探索の手続きを示す。
同図に示すように到達可能状態計算は次のように行われる。
まず、ステップＳ１において、次状態関数のＢＤＤと初期状態を入力する。ここで、次状態関数ｆi （ｉ＝１,....,ｎ）は、図２２の例ではフリップフロップはＦ１，Ｆ２，Ｆ３，Ｆ４の状態を表し、これに対応する次状態関数はｆ1 ，ｆ2 ，ｆ3 ，ｆ4 である。また、状態遷移表は前記図２１の通りである。また、初期状態を（ｙ1 ｙ2 ｙ3 ｙ4 ）＝｛００００｝であるとする。
ステップＳ２において、Ｆｒｏｍ←｛００００｝、Ｒｅａｃｈｅｄ←｛００００｝に設定する。ここで、Ｆｒｏｍは像計算の遷移元の状態の集合、Ｒｅａｃｈｅｄは到達した状態の全ての集合を表す。
ステップＳ３において、前記図２３に示した処理手順で次状態関数ｆi （ｉ＝１,....,ｎ）によるＦｒｏｍの像Ｔｏ（１遷移で到達可能な状態の集合）を計算する。
【００２６】
ステップＳ４において、上記像ＴｏをＲｅａｃｈｅｄに加え、ステップＳ５において、Ｒｅａｃｈｅｄが不変であるかを調べる。
Ｒｅａｃｈｅｄが不変であれば、到達可能な全ての状態の集合が求まったので処理を終了する。また、Ｒｅａｃｈｅｄが一回前のＲｅａｃｈｅｄと異なる場合には、ステップＳ７において、前記像ＴｏをＦｒｏｍに入れて、ステップＳ３に戻り上記処理を繰り返す。
図２３のステップＳ２で生成する次状態変数の変数順に関しては、状態探索中どの像計算でも固定された位置に置かれる。通常、一つの現状態と対応する次状態を組にし、その現状態変数の直下に置かれることが多い。
これは、一般的に、現状態変数とそれに対応する次状態変数には何らかの依存関係があることが多いことと、図２４のステップＳ６のように像計算のあと、次状態変数の関数Ｔｏを現状態変数の関数Ｆｒｏｍに置き扱える時、次状態が現状態の直下にある方が処理が速いことによる。
【００２７】
【発明が解決しようとする課題】
前記したように、ＢＤＤは、表現する論理関数の変数に順序づけをしておく必要があり、さらに、変数の順序づけによりグラフのサイズが大きく依存するという性質がある。
従来の状態探索においては、上記したように通常、次状態変数の変数順は状態探索中どの像計算でも固定された位置に置かれることが多かった。
また、前記したように、計算の途中でＢＤＤが爆発しかけると、変数順を変えるという動的変数順序づけ法が提案されたが、動的変数順序づけは、実際にＢＤＤ中で変数を移動させることにより、よい変数順を求めるため、たいへん多くの計算時間を必要とした。また、いつの時点で入れ換えを行うかのスケジューリングが難しいという実用上の問題もあった。
【００２８】
本発明は上記した事情に鑑みなされたものであって、本発明の目的は、順序回路の状態探索において、大規模、かつ複雑な有限状態機械の状態探索に不可欠であるが多くの時間を必要としていたＢＤＤの変数順の変更によるＢＤＤの簡単化をより高速に行うとともに、従来の方法で実用上問題となっていたスケジューリングを不要とすることである。
【００２９】
【課題を解決するための手段】
本発明では、状態探索の計算において、次状態の変数が生成される時にその適切な位置を計算し、その位置に変数を生成することにより、ＢＤＤの変数順の変更を行う。
この方法により、像計算の途中でＢＤＤの変数入れ換えを行うことなく変数順の変更が行えるため、変数順の変更に伴う計算時間のオーバーヘッドが軽減される。さらに、次状態変数生成のタイミングで変数入れ換えを行うことにより、変数順変更のスケジューリングが不要となる。
【００３０】
図１は本発明のＢＤＤ簡単化方法を用いた状態探索方法の原理説明図である。図１に示すように、本発明においては次のようにして順序回路の状態探索を行う。
(i) 次状態関数のＢＤＤと初期状態を入力する（ステップＳ１）。
(ii)次状態の変数が導入されるときに、ＢＤＤ中での位置を決定し、指定位置に次状態を生成しながら像計算を行う（ステップＳ２）。
(iii) 既到達状態集合のＢＤＤと、次状態関数のＢＤＤを次状態集合の変数順に合わせる（ステップＳ３）。
(iv)次状態集合を既到達状態集合に追加する（ステップＳ４）。
(v) 既到達状態集合が不変になるまで上記(ii)〜(iv)の処理を繰り返し、既到達状態集合が不変になったら処理を終了する（ステップＳ５からステップＳ２）。
【００３１】
上記(ii)において、次状態の変数の位置は次のようにして決定することができる。
▲１▼  ｋ個の位置の候補をあげ、それぞれの位置にしたときの二分決定グラフのサイズを計算し、そのサイズが一番小さくなる位置を選択する。
▲２▼  二分決定グラフにおける次状態の変数の位置として、その一番根に近い変数に隣接したより根に近い位置、もしくは、一番葉に近い変数に隣接した、より葉に近い位置を選択する。
▲３▼  次状態の変数の位置として、直前に導入した次状態変数の位置に隣接した位置を選択する。
また、像計算を行うに際し、前記したように、現状態集合以外からの遷移をドントケアとして簡単化した関数の二分決定グラフを用いることができる。
【００３２】
図２は本発明の状態探索装置の原理説明図である。
本発明の状態探索装置は、図２に示すように、次状態関数のＢＤＤと初期状態を入力する入力手段１、指定位置に次状態を生成しながら像計算を行う手段２、次状態の位置計算手段３、既到達状態集合のＢＤＤと次状態関数のＢＤＤを次状態集合の変数順に合わせる手段４、次状態集合を既到達状態集合に加える手段５、出力手段６を備えており、上記手段２〜５による処理を既到達状態集合が不変になるまで繰り返し、到達可能状態情報を得る。
上記次状態の位置計算手段３は、上記▲１▼〜▲３▼のようにして、次状態の変数の位置を決定する。また、像計算を行うに際し、前記したように現状態集合以外からの遷移をドントケアとして簡単化した関数の二分決定グラフを用いるようにすることができる。
以上のように本発明においては、次状態の変数が生成される時にその適切な位置を計算し、その位置に変数を生成することにより、ＢＤＤの変数順の変更を行っているので、ＢＤＤの変数順の変更によるＢＤＤの簡単化をより高速に行うことができるともに、変数順の入れ換えのスケジューリングが不要となる。
【００３３】
【発明の実施の形態】
以下、図面を参照しながら、本発明の実施の形態について詳細に説明する。
図３は、本発明の実施例のＦＳＭの状態探索装置の構成図である。
図３に示す状態探索装置は、入出力装置１１、演算処理装置１２、記憶装置１３、およびこれらの各装置を接続するバス２０を備える計算機システムで構成する。
入出力装置１１は、例えばキーボードやマウスなどの入力装置とディスプレイ装置からなる計算機端末であり、次状態関数のＢＤＤや初期状態の入力や計算された到達可能状態の情報の出力などを行う。
【００３４】
演算処理装置１２は、例えばＣＰＵ（中央処理装置）であり、記憶装置１３に記憶されたデータを用いて、記憶装置１３に格納された各種のプログラムを実行し、演算などを行う。
記憶装置１３には、指定位置に次状態を生成しながら像計算を行うルーチン１４、次状態の位置を決定する次状態位置計算ルーチン１５、既到達状態集合のＢＤＤを次状態集合の変数順に合わせるルーチン１６、次状態集合を既到達集合に追加するルーチン１７が格納され、これらのルーチンを実行し、状態探索を行う。
【００３５】
次に、図４および図５を参照しながら、本発明の実施例の計算処理について、前記図２１、図２２に示したＦＳＭ  Ｍを用いて具体的に説明する。
図４は、本実施例における像計算処理のフローチャート、図５は本実施例における像計算を利用した状態探索処理のフローチャートである。
まず、図５のステップＳ１において、次の（１０）〜（１３）式に示す次状態関数のＢＤＤと初期状態を入力する。
【００３６】
【数５】
0003741544.tif 000006
【００３７】
この例では初期状態を（ｙ1 ｙ2 ｙ3 ｙ4 ）＝（００００）であるとする。また、ＢＤＤの初期変数順は＜ｘ，ｙ1 ，ｙ2 ，ｙ3 ，ｙ4 ＞であるとする。
図５のステップＳ２では、初期状態（００００）に対応する特徴関数ｙ1'ｙ2'ｙ3'ｙ4'を表すＢＤＤをＦＲＯＭ，ＲＥＡＣＨＥＤに設定する。
なお、ＦＲＯＭは現状態集合を表すＢＤＤ、ＲＥＡＣＨＥＤは今まで到達した状態すべての集合、すなわち既到達状態集合を表すＢＤＤである。
ステップＳ３からステップＳ７までのループにより到達可能状態の探索を行う。
ループの１回分は１回の像計算に対応し、新しい到達可能状態が見つからなくなるまで（ステップＳ６の判定）この操作を繰り返す。
ステップＳ３では、本発明の手法による像計算を行う。この計算は図４に従って計算される。
【００３８】
図４において、まず、ＳとしてＦＲＯＭ＝ｙ1'ｙ2'ｙ3'ｙ4'が与えられる。
図４のステップＳ３．１でＴｏ＝Ｓ＝ｙ1'ｙ2'ｙ3'ｙ4'となる。
ステップＳ３．２では、ＦＲＯＭ以外の状態からの遷移を前記したようにドントケア（値は何でもよい）として、ｆ1 を簡単化する。ドントケア値を“ * ”としたときの状態遷移図は図６となるので、ｆ｜FROM（ｆはベクトル）は以下の（１４）〜（１７）式のように簡単化できる。
【００３９】
【数６】
0003741544.tif 000007
【００４０】
図４のステップＳ３．３では未処理の次状態変数が一つ選択される。例えば、Ｙ1 が選択されたとする。
ステップＳ３．４でＹ1 のＢＤＤでの適切な位置を決定する。位置の決定法としては、従来のｙi の直下に置く( これを位置Ａとする）方法以外に、本発明では、ｆ1 ｜FROMのＢＤＤの変数の位置や直前に処理したＹi+1 の位置情報を用いてＹi の良い位置を推定する。
例えば、ここでは、「ｆ1 ｜FROMのＢＤＤの一番葉に近い変数ノードの直下の位置（これを位置Ｂとする）に置く」場合を考え、その場合のＴｏのＢＤＤが従来のｙi の直下に置く場合と比較して小さい場合には、Ｙi を位置Ｂに置く方法を提案する。
位置Ｂは、Ｙi ≡ｆi のＢＤＤが最も小さくなる位置であり、かつ依存変数の似た関数、すなわち依存関係がある可能性がある関数を近くに置くことができる。
【００４１】
例では、ｆ1 ｜FROM＝０のＢＤＤで一番葉に近い変数ノードの直下をＹ1 の位置とするが、この場合、ｆ1 ｜FROM＝０のＢＤＤは定数０のノードしかないので、他のどのノードよりも葉に近いところをＹ1 の位置とする。
再び図４に戻り、ステップＳ３．５で、その位置のノードを生成する。現時点でのＴｏ，ｆ1 ｜s 、Ｙi のＢＤＤを図７（ａ）〜（ｃ）に示す。
ステップＳ３．６の結果、Ｔｏ＝Ｙ1'ｙ1'ｙ2'ｙ3'ｙ4'となり、そのＢＤＤは図７（ｄ）のようになる。
ステップＳ３．７では、ｆ2 ｜FROM、ｆ3 ｜FROM、ｆ4 ｜FROMはｘにしか依存していないので、ｖ（ベクトル）＝（ｙ1 ，ｙ2 ，ｙ3 ，ｙ4 ）となる。
従って、ステップＳ３．８では、Ｔｏは次の（１８）式のようになる。また、結果のＢＤＤは図７（ｅ）のようになる。
【００４２】
【数７】
0003741544.tif 000008
【００４３】
一方、Ｙ1 を位置ＡにしたときのＴｏは図７（ｆ）の通りである。位置Ａのときと位置Ｂのときとで、ＢＤＤのサイズは変わらないので、Ｙ1 に対しては位置Ａが選択される。同様にＹ2 ，Ｙ3 ，Ｙ4 についても順に処理すると、それぞれにおいて、生成されるＢＤＤは図８、図９、図１０に示すようになる。
なお、この場合も、図８〜図１０に示すように、ステップＳ３．８後のＴｏは位置Ａでも位置Ｂでも同じである。
したがって、一回目の計算終了後、Ｔｏとして次の（１９）式を得る。
これで、１回目の像計算が終了し、図５のステップＳ４に移る。今の変数順は変わらないので、ステップＳ４では何もしない。ステップＳ５で、次状態集合を現状態変数のＢＤＤにしてから既状態集合に加える。すなわち、Ｒｅａｃｈｅｄは次の（２０）式のようになる。
【００４４】
【数８】
0003741544.tif 000009
【００４５】
この場合はＲｅａｃｈｅｄが変化しているので、ステップＳ７でＴｏを現状態関数にしてから、Ｆｒｏｍ＝Ｔｏ＝ｙ1'ｙ2'ｙ3 として、２回目の像計算に移る。
２回目の像計算は、１回目の像計算と同様にして、今回は状態遷移関数のドントケアが図１１のようになるため、簡単化したｆi は以下の（２１）〜（２４）式のようになる。
【００４６】
【数９】
0003741544.tif 000010
【００４７】
２回目の像計算も、１回目の像計算と同様に行う。Ｙ1 ，Ｙ2 ，Ｙ3 ，Ｙ4 が順に選ばれたときのＢＤＤの様子を図１２〜図１５に示す。
図１２（ｄ）（ｅ）に示すように、状態Ｙ1 に対しては、位置ＢのときのＴｏのＢＤＤのサイズが４であり、位置Ａのときのサイズが５なので、この場合は位置Ｂが選ばれる。また、図１３（ｄ）（ｅ）に示すように、状態Ｙ2 に対しては、位置ＢのときのＢＤＤのサイズが５であり、位置Ａのときのサイズが６なので、位置Ｂが選ばれる。状態Ｙ3 に対しても、図１４（ｄ）に示すように、位置Ａ，ＢともＢＤＤのサイズが同じなので、ここでは位置Ａを選択しておく。
状態Ｙ4 に対しても、図１５（ｄ）に示すように位置Ａ，Ｂとも同じサイズなので、ここでは位置Ａを選択しておく。
【００４８】
従って、像計算の結果、ＢＤＤの変数順は＜ｘ，Ｙ3 ，Ｙ4 ，Ｙ1 ，Ｙ2 ＞となる。像計算の前の変数順と変わっていることに注意されたい。
従来の動的変数順序づけを用いても変数順を変えることはできるが、その場合、実際に各変数について位置を上から下まで移動したＢＤＤを作っていき、一番良い位置を求める必要があった。本実施例の方法では、像計算中はこのような移動を全く行わずに変数順を変えることができる。
以上の像計算の結果、次状態集合Ｔｏは次の（２５）式のようになる。
【００４９】
【数１０】
0003741544.tif 000011
【００５０】
上記ＴｏのＢＤＤを図１６（ａ）に示す。また、比較のため、２回目の像計算の前での変数順＜Ｙ1 ，Ｙ2 ，Ｙ3 ，Ｙ4 ＞  のままにしたときのＴｏのＢＤＤを図１６（ｂ）に示す。このことから、本実施例のＢＤＤの最小化によりサイズが６から４に減っていることがわかる。
このように本発明の手法は像計算ごとにその像計算に適した異なる変数順にするためＢＤＤのサイズをコンパクトに保つことができる。一方、従来の動的変数順ではＢＤＤがある程度大きくなってから変数順の入れ扱えを一度に行うため、サイズの大きなＢＤＤの演算が必要になりさらに多くの時間を要する。
【００５１】
これで２回目の像計算が終了し、前記図５のステップＳ４に移る。
Ｒｅａｃｈｅｄとｆ（ベクトル）のＢＤＤの変数順をＴｏに合わせて＜ｘ，ｙ3 ，ｙ4 ，ｙ1 ，ｙ2 ＞としておく。
ステップＳ５で、次状態集合を現状態集合のＢＤＤにしてから既到達状態集合に加える。すなわち、Ｒｅａｃｈｅｄは次の（２６）式となる。
【００５２】
【数１１】
0003741544.tif 000012
【００５３】
以下、同様にしてＲｅａｃｈｅｄが変わらなくなるまで、本発明の像計算を繰り返し行うことにより、全ての到達可能状態をコンパクトなＢＤＤのまま計算することができる。
上記実施例では、次状態変数を位置Ａにおいた場合と位置Ｂにおいた場合のＢＤＤのサイズを比較して、サイズの小さい方の位置を選ぶ場合について説明したが、さらに複数の位置の候補を考え、それぞれの位置にしたときのＴｏのうち、一番サイズが小さくなる位置を選択するようにしてもよい。
【００５４】
また、次状態変数の位置決定法は、上記した方法の外に次のような方法を用いることができる。
▲１▼  ｆ1 ｜FROMのＢＤＤの一番根に近い変数ノードの直上の位置をＹi の位置とする。ただし、他の次状態変数がすでにその位置に置かれている場合には、その位置を要求した変数の下に置く。
この方法を採用した場合、例えば、前記図１２は、図１７に示すようになる。同図に示すように、ｆ1 ｜s の一番根に近い変数はｘであるので、その直上をＹ1 の位置とすると、図４のステップＳ３．８後のＴｏは同図（ｄ）に示すようになる。
▲２▼  前記したように、ｆ1 ｜FROMのＢＤＤの一番葉に近い変数ノードの直下の位置をＹi の位置とする。ただし、他の次状態変数がすでにその位置に置かれている場合には、その位置を要求した変数の中で一番下に置く。
▲３▼  直前に処理した次状態変数Ｙi-1 の直下におく。
【００５５】
【発明の効果】
以上説明したように、本発明においては、次状態の変数が生成される時にその適切な位置を計算し、その位置に変数を生成することによりＢＤＤの変数順の変更を行っているので、ＢＤＤの変数順の変更によるＢＤＤの簡単化をより高速に行うことができる。また、変数順の入れ換えのスケジューリングが不要となる。
【図面の簡単な説明】
【図１】本発明の状態探索方法の原理説明図である。
【図２】本発明の状態探索装置の原理説明図である。
【図３】本発明の実施例のＦＳＭの状態探索装置の構成図である。
【図４】本発明の実施例における像計算処理のフローチャートである。
【図５】本発明の実施例における像計算を利用した状態探索処理のフローチャートである。
【図６】１回目の像計算でのドントケア値を“ * ”としたときの状態遷移図である。
【図７】１回目の像計算のＹ1 に関するＢＤＤを示す図である。
【図８】１回目の像計算のＹ2 に関するＢＤＤを示す図である。
【図９】１回目の像計算のＹ3 に関するＢＤＤを示す図である。
【図１０】１回目の像計算のＹ4 に関するＢＤＤを示す図である。
【図１１】２回目の像計算でのドントケア値を“ * ”としたときの状態遷移図である。
【図１２】２回目の像計算のＹ1 に関するＢＤＤを示す図である。
【図１３】２回目の像計算のＹ2 に関するＢＤＤを示す図である。
【図１４】２回目の像計算のＹ3 に関するＢＤＤを示す図である。
【図１５】２回目の像計算のＹ4 に関するＢＤＤを示す図である。
【図１６】２回目の像計算の結果のＢＤＤを示す図である。
【図１７】ｆ1 ｜FROMの一番根に近い変数ノードの直上の位置をＹi の位置とした場合のＢＤＤを示す図である。
【図１８】２分木決定グラフ（ＢＤＤ）を説明する図である。
【図１９】変数順によるＢＤＤのサイズの変化を説明する図である。
【図２０】ＢＤＤでの論理演算を説明する図である。
【図２１】ＦＳＭ  Ｍの状態遷移表を示す図である。
【図２２】ＦＳＭ  Ｍに対応する順序回路を示す図である。
【図２３】Ｓと次状態関数ｆi を表すＢＤＤに対して像計算を行う従来の手続きを示す図である。
【図２４】従来の非明示的な状態探索の手続きを示す図である。
【符号の説明】
１    入力手段
２    像計算を行う手段
３    次状態の位置計算手段
４    変数順を合わせる手段
５    次状態集合を既到達状態集合に加える手段
６    出力手段
１１  入出力装置
１２  演算処理装置
１３  記憶装置
２０  バス
１４  像計算を行うルーチン
１５  次状態位置計算ルーチン
１６  変数順を合わせるルーチン
１７  次状態集合を既到達集合に追加するルーチン
【図１】
0003741544.tif 000013
【図２】
0003741544.tif 000014
【図３】
0003741544.tif 000015
【図４】
0003741544.tif 000016
【図５】
0003741544.tif 000017
【図６】
0003741544.tif 000018
【図７】
0003741544.tif 000019
【図８】
0003741544.tif 000020
【図９】
0003741544.tif 000021
【図１０】
0003741544.tif 000022
【図１１】
0003741544.tif 000023
【図１２】
0003741544.tif 000024
【図１３】
0003741544.tif 000025
【図１４】
0003741544.tif 000026
【図１５】
0003741544.tif 000027
【図１６】
0003741544.tif 000028
【図１７】
0003741544.tif 000029
【図１８】
0003741544.tif 000030
【図１９】
0003741544.tif 000031
【図２０】
0003741544.tif 000032
【図２１】
0003741544.tif 000033
【図２２】
0003741544.tif 000034
【図２３】
0003741544.tif 000035
【図２４】
0003741544.tif 000036