(57)【要約】【課題】充足可能性問題を効率よく判定できること。【解決手段】半導体素子の論理式の入力に基づき、前記論理式の変数に所定の値を割り当てて充足可能性問題を判定し（ステップＳ４０２，ステップＳ４０６）、判定の結果、コンフリクトが生じた場合に、前記コンフリクトした原因を解析し（ステップＳ４０５）、解析に基づき、探索ポイントをコンフリクトが生じた探索レベルに戻し探索させるバックトラック量を設定し（ステップＳ４１０）、同一の探索ポイントに対するバックトラック回数が所定の閾値を超えた場合（ステップＳ４０８）、前記同一の探索ポイントより手前の前記探索レベルにバックトラックするようバックトラック量を変更し（ステップＳ４１１）、変更後の前記バックトラック量により戻った前記探索レベルの探索ポイントから探索をおこなう（ステップＳ４１２）。【選択図】図４
2014186642.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
半導体素子の論理式の入力に基づき、前記論理式の変数に所定の値を割り当てて充足可能性問題を判定させ、
前記判定の結果、コンフリクトが生じた場合に、前記コンフリクトの原因を解析させ、
前記解析に基づき、探索ポイントをコンフリクトが生じた探索レベルに戻して探索させるバックトラック量を設定させ、
同一の探索ポイントに対するバックトラック回数が所定の閾値を超えた場合、前記同一の探索ポイントより手前の前記探索レベルにバックトラックするようバックトラック量を変更させ、
変更後の前記バックトラック量により戻った前記探索レベルの探索ポイントから探索をおこなわせる、
処理を実行させることを特徴とする論理検証プログラム。
【請求項２】
前記同一の探索ポイントに対するバックトラック回数が所定の閾値を超えた場合、前記探索レベルより一つ手前の探索レベルにバックトラックするようバックトラック量を変更させることを特徴とする請求項１に記載の論理検証プログラム。
【請求項３】
前記バックトラック量は、バックトラックにより戻った際のベースポイントを基準とするレンジを有し、バックトラック量が前記レンジから外れる度に新たなベースポイントとして設定されることを特徴とする請求項２に記載の論理検証プログラム。
【請求項４】
変更後の前記バックトラック量により戻った前記探索レベルの前記変数の値を前回の値の逆数に変更し、
前記判定をおこなわせることを特徴とする請求項１〜３のいずれか一つに記載の論理検証プログラム。
【請求項５】
バックトラック量の変更により、前記探索ポイントが初期の探索ポイントまで戻ったときには、前記変更したバックトラック量をリセットさせ、変数の探索順を変更したリスタートにより再探索をおこなわせることを特徴とする請求項１〜４のいずれか一つに記載の論理検証プログラム。
【請求項６】
前記閾値は、所定の処理周期当たりのコンフリクト回数に基づき設定されることを特徴とする請求項１〜５のいずれか一つに記載の論理検証プログラム。
【請求項７】
コンピュータを用いて論理検証を行う方法であって、
前記コンピュータが有するプロセッサが、
半導体素子の論理式の入力に基づき、前記論理式の変数に所定の値を割り当てて充足可能性問題を判定し、
前記判定の結果、コンフリクトが生じた場合に、前記コンフリクトの原因を解析し、
前記解析に基づき、探索ポイントをコンフリクトが生じた探索レベルに戻して探索するバックトラック量を設定し、
同一の探索ポイントに対するバックトラック回数が所定の閾値を超えた場合、前記同一の探索ポイントより手前の前記探索レベルにバックトラックするようバックトラック量を変更し、
変更後の前記バックトラック量により戻った前記探索レベルの探索ポイントから探索をおこなう、
処理を実行することを特徴とする論理検証方法。
【請求項８】
半導体素子の論理式の入力に基づき、前記論理式の変数に所定の値を割り当てて充足可能性問題を判定する判定部と、
前記判定の結果、コンフリクトが生じた場合に、前記コンフリクトの原因を解析する解析部と、
前記解析に基づき、探索ポイントをコンフリクトが生じた探索レベルに戻して探索させるバックトラック量を設定するバックトラック設定部とを有し、
前記判定部は、同一の探索ポイントに対するバックトラック回数が所定の閾値を超えた場合、前記同一の探索ポイントより手前の前記探索レベルにバックトラックするようバックトラック量を変更し、変更後の前記バックトラック量により戻った前記探索レベルの探索ポイントから探索をおこなうことを特徴とする論理検証装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置の論理検証プログラム、論理検証方法および論理検証装置に関する。
【背景技術】
【０００２】
ＬＳＩ等の半導体装置の論理検証には、充足可能性問題（ＳＡＴ：ＳＡＴｉｓｆｉａｂｉｌｉｔｙ  Ｐｒｏｂｌｅｍ）ツールが用いられる。この充足可能性問題は、半導体素子（ゲート）を論理式に変換したＣＮＦ（Ｃｏｎｊｕｎｃｔｉｖｅ  Ｎｏｒｍａｌ  Ｆｏｒｍ）論理式について、充足可能性問題判定ツール（ＳＡＴソルバー）を用いて充足可能であるかを判定する。
【０００３】
例えば、ＣＮＦ論理式が（ａ＋ｂ）×（ｃ＋ｄ）であるとする。＋はｏｒ，×はａｎｄ、（）は一つの区画（クローズ）である。この論理式の変数ａ，ｃ＝１，ｂ、ｄ＝０を割り当てると１（ｔｒｕｅ）となり充足可能（論理式にバグがある）となる。ＳＡＴソルバーは、論理式に変数を与え、充足可能（ＳＡＴ）にできるか調べる。一方、ＣＮＦ論理式が（ａ＋ｂ）×（ａ’＋ｂ）×（ａ＋ｂ’）×（ａ’＋ｂ’）の場合、どのような変数を割り当てても１にならない（０になる、ｆａｌｓｅ）こととなり充足不可能（ＵＮＳＡＴ、論理式にバグがない）となる。このほか、複雑なＣＮＦ論理式になると、ＳＡＴソルバーは変数の割り当てがあるかないかを処理タイムオーバ等で求めることができない場合（ｕｎｋｎｏｗｎ）も生じる。
【０００４】
このＳＡＴソルバーでは、複数の変数に値を設定して充足可能であるか調べるが、その処理中において、処理が行き止まりとなるコンフリクト（ある変数に値０を割り当てた結果、全体が０になる）が発生する場合がある。このコンフリクトに対しては、１．バックトラック、あるいは２．リスタートによる変数の探索が提案されている。
【０００５】
１．バックトラックを使った探索では、各変数（例えばａ〜ｇ）に予め定めた順序（ａ〜ｇの順）で変数値（０）を定めて探索を開始し、変数ｇでコンフリクトが発生した場合、コンフリクト・アナリシス機能により、どの変数の組み合わせがコンフリクトするかラーンドクローズ（例えばａ＋ｄ＋ｇ）を求める。そして、コンフリクティング・クローズが一つになるポイント（例えばｄ）に戻り（バックトラック）、戻ったポイントから新たに探索をおこなう。この際、ａ，ｂ，ｃは前回の探索の値（０）を用い、ｄは前回の探索とは逆の値（１）を用い、ｅ，ｆは任意の値を用いる。
【０００６】
２．リスタートによる探索では、各変数（例えばａ〜ｇ）に予め定めた順序（ａ〜ｇの順）で変数値（０）を定め、変数ｇでコンフリクトが発生した場合、コンフリクト・アナリシス機能により、ｇから逆方向に戻り（バックトラック）、戻ったポイント（例えばｄ）から新たに探索をおこなう。この後、コンフリクトが発生し、その頻度が閾値を超えたとき、変数順を変更し（例えば、ｇ〜ａ）、探索をやり直す（リスタート）。大規模な論理式の場合などにはバックトラックが頻発するため、最初からリスタートにより探索をやり直した方が早く解析できる場合がある。
【０００７】
例えば、特許文献１には、上記１．バックトラックの手法が開示されている。特許文献２には、ＢＤＤ（２分決定グラフ）とバックトラックとを組み合わせてバックトラック回数を減少させる手法が開示されている。特許文献３には、コンフリクト・ポジションを再順序付けするバックトラック手法が記載されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００１−０１４２９８号公報
【特許文献２】特開平１１−２８２９００号公報
【特許文献３】特表２００６−５１０９８６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、上記１．バックトラック、および２．リスタートのいずれの手法であっても、探索に時間がかかった。上記１．２．いずれの手法を用いた場合でも、コンフリクトが多数発生すると、解決が遅くなる。また、結果的にソリューションなし（上記ｕｎｋｎｏｗｎ）となる場合もあり、時間の無駄が生じることもある。従来は、デシジョンレベル（探索レベル）の軸と、変数の組み合わせの軸により表現されるデシジョンツリー上において、このソリューションなし（ｕｎｋｎｏｗｎ）の領域を避けることができず、充足可能性問題を効率よく判定できなかった。
【００１０】
一つの側面では、本発明は、充足可能性問題を効率よく判定できることを目的とする。
【課題を解決するための手段】
【００１１】
一つの案では、半導体素子の論理式の入力に基づき、前記論理式の変数に所定の値を割り当てて充足可能性問題を判定し、前記判定の結果、コンフリクトが生じた場合に、前記コンフリクトの原因を解析し、前記解析に基づき、探索ポイントをコンフリクトが生じた探索レベルに戻して探索するバックトラック量を設定し、同一の探索ポイントに対するバックトラック回数が所定の閾値を超えた場合、前記同一の探索ポイントより手前の前記探索レベルにバックトラックするようバックトラック量を変更し、変更後の前記バックトラック量により戻った前記探索レベルの探索ポイントから探索をおこなうことにより、論理検証する。
【発明の効果】
【００１２】
一つの実施の形態によれば、充足可能性問題を効率よく判定できる。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施の形態にかかる論理検証の手法の説明図である。
【図２】図２は、実施の形態にかかる論理検証のデシジョンツリーを示す図である。
【図３−１】図３−１は、論理検証装置のハードウェア構成の一例を示すブロック図である。
【図３−２】図３−２は、論理検証装置の機能ブロックを示す図である。
【図４】図４は、論理検証の処理手順を示すフローチャートである。
【図５−１】図５−１は、実施の形態のバックトラック手法による探索例を示す図である。（その１）
【図５−２】図５−２は、実施の形態のバックトラック手法による探索例を示す図である。（その２）
【図５−３】図５−３は、実施の形態のバックトラック手法による探索例を示す図である。（その３）
【図５−４】図５−４は、実施の形態のバックトラック手法による探索例を示す図である。（その４）
【図５−５】図５−５は、既存のバックトラック手法の探索による問題を説明する図である。
【図５−６】図５−６は、実施の形態のバックトラック手法による探索例を示す図である。（その５）
【図５−７】図５−７は、実施の形態のバックトラック手法による探索例を示す図である。（その６）
【発明を実施するための形態】
【００１４】
（実施の形態）
以下に添付図面を参照して、開示技術の好適な実施の形態を詳細に説明する。図１は、実施の形態にかかる論理検証の手法の説明図である。ＳＡＴソルバーにより、論理式に変数を与え、充足可能であるか否かを判定する例について示してある。以下、論理検証内容を順に説明する。
【００１５】
（１）論理式の複数の変数ａ〜ｇに対し、予め定めた順序で変数値を決める。図示の例では、変数ａ〜ｇの順とし、初期の探索ポイント（デシジョンレベル（探索レベル）０）から探索を開始する。
【００１６】
（２）複数の変数ａ〜ｇに値０を設定し、変数ａ〜ｇの順に探索をおこなう。そして、判定が行き止まりとなるコンフリクトが生じたとする。図示の例では変数ｇによりコンフリクトが生じている。
【００１７】
（３）ＳＡＴソルバーのコンフリクト・アナリシス（解析）機能を用いてどの変数の組み合わせがコンフリクトするかラーンドクローズを求める。図示の例では、（ａ＋ｄ＋ｇ）であるとする。
【００１８】
（４）どのクローズの組み合わせがコンフリクトしたか原因を解析し、この原因となる変数のポイントとリスタートとの間に探索ポイントを戻す。この際、実施の形態では、同じポイントにバックトラックを繰り返したとき、閾値以上の戻り回数となったとき、繰り返し戻ったポイントｄの一つ前のポイントｃにバックトラックするようにしている。
【００１９】
（５）戻ったポイントから新たに探索（再探索）する。この際の値は、図示の例ではａ，ｂ＝前回の探索で用いた値０、ｃ＝反転した値１、ｄ，ｇ＝ｃの反転により、ラーンドクローズが成立する値に変更（１または０に変更）、ｅ，ｆ＝任意の値とする。なお、コンフリクト・アナリシス機能により、バックトラックにより開始位置変数ａの一つ前のポイント（ａ−１）まで戻った場合、充足不可能（ＵＮＳＡＴ）と判定する。
【００２０】
図２は、実施の形態にかかる論理検証のデシジョンツリーを示す図である。図２は、充足可能性問題（ＳＡＴ）のデシジョンツリーを示し、横軸は変数の組み合わせ、縦軸はデシジョンレベルである。この図２を用いて図１の処理の各設定内容を説明する。変数の数をＮとしたとき、実施の形態によるバックトラック（Ｂ・Ｔ）はｙまで戻る（既存のバックトラック手法ではｘに戻る。ｘ＞ｙ）。
【００２１】
また、バックトラックレンジはＲであり、例えば、Ｒ＝５％に設定する。このＲはバックトラックで戻った際のベースポイント（ｂａｓｅ）を基準とするレンジを有し、ｘ＝ｂａｓｅ±Ｒ％となる。このｂａｓｅについて、バックトラック量がレンジＲから外れる度にベースポイント（ｂａｓｅ）Ｘは新たに設定される。初期設定のバックトラックレンジＲは、バックトラック頻度が多発する、図中網線で示すソリューションなし空間２０１のバックトラックレンジを規定する。
【００２２】
また、所定の処理周期当たりのコンフリクト回数（Ｃｏｎｆｒｉｃｔ  Ｆｒｅｑｕｅｎｃｙ）が閾値（ｔｈｒｅｓｈｏｌｄ）以上となると（Ｃｏｎｆｒｉｃｔ  Ｆｒｅｑｕｅｎｃｙ≧ｔｈｒｅｓｈｏｌｄ）ｙにバックトラックする。例えば、所定の処理周期１μｓｅｃ当たりのコンフリクト回数が１回以上となると、所定のバックトラック量ｙを有してバックトラックする。
【００２３】
このｙ＝ｂａｓｅ＋ｂａｃｋnで示される。バックトラック量を決める関数は、例えば、ｂａｃｋn＝ｂａｃｋn＋１とする（今回のバックトラック量を前回より１増やす）。このほか、等比数列としてもよい。
【００２４】
上記のバックトラックによれば、図２に示したコンフリクトが多く、バックトラック頻度が多発するソリューションなし（ｕｎｋｎｏｗｎ）空間２０１を避けてバックトラックすることができる。これにより、ソリューションありの領域の探索を継続して、充足可能性問題を短時間で早く解決できるようになる。
【００２５】
（論理検証装置のハードウェア構成）
図３−１は、論理検証装置のハードウェア構成の一例を示すブロック図である。図３−１において、論理検証装置３００は、ＣＰＵ３０１と、Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ（ＲＯＭ）３０２と、Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＲＡＭ）３０３と、を含む。また、半導体メモリやディスクドライブ等の記憶部３０４と、ディスプレイ３０８と、通信インターフェース（Ｉ／Ｆ）３０９と、キーボード３１０と、マウス３１１と、スキャナ３１２と、プリンタ３１３とを備えてもよい。これらＣＰＵ３０１〜プリンタ３１３はバス３１４によってそれぞれ接続されている。
【００２６】
ＣＰＵ３０１は、論理検証装置３００の全体の制御を司る演算処理装置である。ＲＯＭ３０２は、論理検証装置３００の検証プログラムを記憶する不揮発性メモリである。ＲＡＭ３０３は、ＣＰＵ３０１による演算処理実行時のワークエリアとして使用される揮発性メモリである。記憶部３０４には、例えば、論理検証の検証結果などが格納される。
【００２７】
通信インターフェース３０９は、ネットワーク３１５と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。具体的に、通信インターフェース３０９は、通信回線を通じてネットワーク３１５となるＬｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ（ＬＡＮ）、Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ（ＷＡＮ）、インターネットなどに接続され、ネットワーク３１５を介して他の装置に接続される。通信インターフェース３０９には、例えば、モデムやＬＡＮアダプタなどを採用することができる。
【００２８】
ディスプレイ３０８は、論理検証処理のための設定画面や検証結果について、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などをデータ表示する装置である。ディスプレイ３０８には、例えば、Ｔｈｉｎ  Ｆｉｌｍ  Ｔｒａｎｓｉｓｔｏｒ（ＴＦＴ）液晶ディスプレイ、プラズマディスプレイ、有機ＥＬディスプレイなどを採用することができる。
【００２９】
上述した図１および図２を用いて説明した論理検証の機能は、図３−１に記載のＣＰＵ３０１がＲＯＭ３０２に格納された論理検証プログラムを実行処理して得ることができる。
【００３０】
図３−２は、論理検証装置の機能ブロックを示す図である。ＣＰＵ３０１が有する機能を示している。ＣＰＵ３０１は、判定部３５１、解析部３５２、バックトラック設定部３５３、変数値設定部３５４の機能を含む。
【００３１】
判定部３５１には、論理式が入力され、ＳＡＴソルバーからなる判定部３５１によりＳＡＴ／ＵＮＳＡＴの判定が出力される。解析部３５２は、ＳＡＴソルバーのコンフリクト・アナリシス機能に相当する。判定部３５１においてコンフリクトが発生した場合、解析部３５２は、ラーンドクローズを求める。
【００３２】
バックトラック設定部３５３は、コンフリクティング・クローズが一つになるポイントとリスタートとの間に探索ポイントを戻す。この際、バックトラック設定部３５３は、同一の探索ポイント（デシジョンレベル、探索レベル）に戻るバックトラック回数が所定の閾値を超えた場合には、さらに一つ前の探索ポイント（デシジョンレベル）に戻るようバックトラック量を設定（変更）する。変数値設定部３５４は、バックトラックした変数の値について、前回の探索で用いた値を反転させる。これら設定したバックトラック量と、反転した変数の値により、再度判定部３５１による戻ったポイントからの探索を継続させる。
【００３３】
図４は、論理検証の処理手順を示すフローチャートである。図３−１の論理検証装置３００のＣＰＵ３０１が実行する各処理について説明する。図中、枠４００で示す各処理が既存の処理に対して実施の形態により新たに追加した処理に相当する。
【００３４】
はじめに、ＣＰＵ３０１は、変数の値を決定する（ステップＳ４０１）。例えば、各変数のうち一つ（例えば変数ａ）の値を１に設定する。次に、充足可能性を判定する（ステップＳ４０２）。充足可能（ＳＡＴ）であれば（ステップＳ４０２：Ｙｅｓ）、充足可能（ＳＡＴ）と出力して処理を終了する。充足可能以外であれば（ステップＳ４０２：Ｎｏ）、論理式の全クローズの上記変数（変数ａ）の値を１に設定する（プロパゲート、ステップＳ４０３）。なお、この際、変数ａ’は反転であるため、０に設定される。
【００３５】
次に、コンフリクト発生の有無を判断する（ステップＳ４０４）。例えば一つのクローズが０になると、論理式全てが０になり（ｆａｌｓｅ）、コンフリクトが発生したと判断し（ステップＳ４０４：Ｙｅｓ）、ステップＳ４０５に移行する。コンフリクトが発生しなければ（ステップＳ４０４：Ｎｏ）、ステップＳ４０１に戻る。ステップＳ４０５では、どの変数の組み合わせがコンフリクトの要因となったかを解析する（ステップＳ４０５）。
【００３６】
そして、ステップＳ４０５の解析の結果により、コンフリクトの原因となる変数の値を逆の値（例えば１→０）に変更しても充足不可能（ＵＮＳＡＴ）である場合には（ステップＳ４０６：Ｙｅｓ）、充足不可能（ＵＮＳＡＴ）と出力して処理を終了する。
【００３７】
一方、充足不可能（ＵＮＳＡＴ）と判定できない場合は（ステップＳ４０６：Ｎｏ）、バックトラックをおこなう。この際、バックトラック量を予め設定したバックトラックレンジＲ（ｘ＝ｂａｓｅ±Ｒ％）の範囲内であるか判断する（ステップＳ４０７）。バックトラック量がバックトラックレンジＲの範囲内であれば（ステップＳ４０７：Ｙｅｓ）、コンフリクト回数を閾値と比較する（ステップＳ４０８）。
【００３８】
この結果、コンフリクト回数が閾値未満（Ｃｏｎｆｒｉｃｔ  Ｆｒｅｑｕｅｎｃｙ＜ｔｈｒｅｓｈｏｌｄ）であれば（ステップＳ４０８：Ｎｏ）、既存のバックトラック手法によりデシジョンレベルＸにバックトラックする（ステップＳ４１０）。この後、ステップＳ４０１の処理に戻る。
【００３９】
ここで、実施の形態では、ステップＳ４０７において、バックトラック量がバックトラックレンジＲの範囲外になると（ステップＳ４０７：Ｎｏ）、ベースポイント（ｂａｓｅ）をこの新たなレベルＸに設定しなおす（ステップＳ４０９）。そしてステップＳ４１０に移行する。
【００４０】
ステップＳ４１０では、解析の結果、探索したコンフリクトの原因となるコンフリクティング・クローズポイントにより、バックトラック時に該当する変数のデシジョンレベルＸまで探索を戻し（ステップＳ４１０）、ステップＳ４０１の処理に戻る。
【００４１】
さらに、実施の形態では、ステップＳ４０８において、コンフリクト回数が閾値以上（Ｃｏｎｆｒｉｃｔ  Ｆｒｅｑｕｅｎｃｙ≧ｔｈｒｅｓｈｏｌｄ）となれば（ステップＳ４０８：Ｙｅｓ）、ステップＳ４１１に移行し、新たなバックトラック手法により探索をおこなう。
【００４２】
まず、バックトラック量ｙについて既存のバックトラック量ｘよりも多いｙ＝ｂａｓｅ＋ｂａｃｋnとする。例えば、上述したように、ｂａｃｋn＝ｂａｃｋn＋１とする。そして、今回のバックトラック量がデシジョンレベル０まで戻るものであるか（ｙ＝ｂａｓｅ＋ｂａｃｋn≦０）判定する（ステップＳ４１１）。今回のバックトラック量がデシジョンレベル０まで戻らない場合は（ステップＳ４１１：Ｎｏ）、このレベルｙにバックトラックする（ステップＳ４１２）。
【００４３】
次に、ベースポイント（ｂａｓｅ）をｙとし（ステップＳ４１３）、バックトラック量をｂａｃｋnだけ増加させる（ステップＳ４１４）。例えば、新たなバックトラック量を前回よりさらに一つ増やす。
【００４４】
そして、このバックトラックしたデシジョンレベルｙの変数の値を反転させる（ステップＳ４１５）。図１の例では、変数ｃを反転させる。そして、ステップＳ４０３に戻る。
【００４５】
また、ステップＳ４１１において、今回のバックトラック量がデシジョンレベル０まで戻るものである場合には（ステップＳ４１１：Ｙｅｓ）、リスタートのための設定をおこなう。このため、上記設定したバックトラック量を規定するｂａｃｋnの値をリセットする（ステップＳ４１６）。また、ステップＳ４０８において用いる閾値に余裕を持たせてもよい（例えば、所定の処理周期当たりのコンフリクト回数を当初の１μｓｅｃ当たり１回の設定を１０回に増加させる）。既存のバックトラック手法では、回数規定がないが実施の形態では、規定された回数に余裕を持たせるようにする。
【００４６】
上述した図４に示す手順に基づき、実施の形態のバックトラック手法について具体例を用いて説明する。図５−１〜図５−４、図５−６、図５−７は、実施の形態のバックトラック手法による探索例を示す図である。はじめに、図５−１に示すように、（１）論理式の複数の変数ａ〜ｇに対し、予め定めた順序で変数値を決める。図示の例では、変数ａ〜ｇの順とする。（２）そして、複数の変数ａ〜ｇに値０を設定し、変数ａ〜ｇの順に探索をおこなったところ、変数ｇによりコンフリクトが発生した。
【００４７】
次に、図５−２に示すように、（３）ＳＡＴソルバーのコンフリクト・アナリシス機能（解析部３５２）を用いてラーンドクローズを求め、コンフリクティング・クローズが一つになるポイントとリスタートとの間のポイントの変数ｅにバックトラックにより戻る。図５−２に示す例では、変数ｅはベースポイント（ｂａｓｅ）となり、デシジョンレベルは４である。
【００４８】
次に、図５−３に示すように、変数ｅの値を０→１に変更し、変数ｇ，ｆについて探索したところ、（４）再度コンフリクトが発生したとする。バックトラックにより変数ｅの一つ前の変数ｄに戻る。この場合、バックトラックレンジＲが１レベルのため、バックトラック量がバックトラックレンジＲ（ｘ＝ｂａｓｅ±Ｒ％）の範囲内となる（ステップＳ４０７：Ｙｅｓ）。また、コンフリクトの間に６００ｎｓ経過したとする。コンフリクト回数はまだ閾値未満である。
【００４９】
次に、図５−４に示すように、変数ｄの値を０→１に変更し、探索順を変数ｇ，ｅについて探索したところ、（５）またコンフリクトが発生したとする。この場合も、バックトラックレンジＲが１レベルのため、バックトラック量がバックトラックレンジＲ（ｘ＝ｂａｓｅ±Ｒ％）の範囲内となる（ステップＳ４０７：Ｙｅｓ）。また、コンフリクトの間に５００ｎｓ経過したとする。これにより、コンフリクト回数が閾値１μｓｅｃを超える（ステップＳ４０８：Ｙｅｓ）。
【００５０】
図５−５は、既存のバックトラック手法の探索による問題を説明する図である。ここで、仮に、従来のバックトラック手法を使うと、図５−５に示すように、（６）コンフリクトが多発し、バックトラックを繰り返す空間９０１（図２のソリューションなしの空間２０１相当）に陥る。
【００５１】
これに対し、実施の形態のバックトラック手法では、図５−４の後、図５−６に示すように、（７）所定のバックトラック量ｙ＝ｂａｓｅ＋ｂａｃｋnを有する。この際、閾値判定後の初めての新バックトラックであるため、ｂａｃｋn＝ｂａｃｋ1となり、１＋１＝２となる。ｂａｓｅ＝４であるため、ｙ＝４−２＝２となり、デシジョンレベル２の変数ｃまでバックトラックにより戻ることになる。
【００５２】
この後、図５−７に示すように、（８）変数ｃの値を１（ｔｒｕｅ）に変更したことで、変数ａ＝０、ｂ＝０、ｃ＝１、ｄ＝０、ｅ＝０、ｆ＝０、ｇ＝０というソリューション（充足可能：ＳＡＴ）を短時間で見つけることができるようになる。これにより、バックトラックを繰り返す空間９０１（図２のソリューションなしの空間２０１相当）の探索を回避できる。加えて、既存の探索では後回しになっていた探索エリアを先に探索するため、充足可能性判定を効率的におこなえるようになる。
【００５３】
以上説明した実施の形態によれば、コンフリクトの発生頻度が閾値を超えた場合には、複数回繰り返したポイント（デシジョンレベル）へのバックトラックよりも一つ前以上のポイントまでバックトラックするようにした。閾値は、所定の処理周期当たりのコンフリクト回数に基づき設定している。これにより、所定回数までは既存のバックトラックをおこなうが、コンフリクト回数（頻度）が多くなり、閾値を超えると、バックトラック量について、ソリューションなしの領域外まで戻るようバックトラック量を増加させる。
【００５４】
したがって、ソリューションなしの領域の探索を無駄に継続することを避けることができるようになり、充足可能性判定処理にタイムオーバ等が生じず早く、かつ効率よくおこなえるようになる。また、バックトラックしたポイントの変数の値を逆数に変えて探索をおこなうことにより、充足可能性判定をより効率的におこなえるようになる。
【００５５】
上述した実施の形態に関し、さらに以下の付記を開示する。
【００５６】
（付記１）コンピュータに、
半導体素子の論理式の入力に基づき、前記論理式の変数に所定の値を割り当てて充足可能性問題を判定させ、
前記判定の結果、コンフリクトが生じた場合に、前記コンフリクトの原因を解析させ、
前記解析に基づき、探索ポイントをコンフリクトが生じた探索レベルに戻して探索させるバックトラック量を設定させ、
同一の探索ポイントに対するバックトラック回数が所定の閾値を超えた場合、前記同一の探索ポイントより手前の前記探索レベルにバックトラックするようバックトラック量を変更させ、
変更後の前記バックトラック量により戻った前記探索レベルの探索ポイントから探索をおこなわせる、
処理を実行させることを特徴とする論理検証プログラム。
【００５７】
（付記２）前記同一の探索ポイントに対するバックトラック回数が所定の閾値を超えた場合、前記探索レベルより一つ手前の探索レベルにバックトラックするようバックトラック量を変更させることを特徴とする付記１に記載の論理検証プログラム。
【００５８】
（付記３）前記バックトラック量は、バックトラックにより戻った際のベースポイントを基準とするレンジを有し、バックトラック量が前記レンジから外れる度に新たなベースポイントとして設定されることを特徴とする付記２に記載の論理検証プログラム。
【００５９】
（付記４）変更後の前記バックトラック量により戻った前記探索レベルの前記変数の値を前回の値の逆数に変更し、
前記判定をおこなわせることを特徴とする付記１〜３のいずれか一つに記載の論理検証プログラム。
【００６０】
（付記５）バックトラック量の変更により、前記探索ポイントが初期の探索ポイントまで戻ったときには、前記変更したバックトラック量をリセットさせ、変数の探索順を変更したリスタートにより再探索をおこなわせることを特徴とする付記１〜４のいずれか一つに記載の論理検証プログラム。
【００６１】
（付記６）バックトラック量の変更により、前記探索ポイントが初期の探索ポイントまで戻ったときには、前記閾値を緩め、変数の探索順を変更したリスタートにより再探索をおこなわせることを特徴とする付記１〜４のいずれか一つに記載の論理検証プログラム。
【００６２】
（付記７）前記閾値は、所定の処理周期当たりのコンフリクト回数に基づき設定されることを特徴とする付記１〜６のいずれか一つに記載の論理検証プログラム。
【００６３】
（付記８）コンピュータを用いて論理検証を行う方法であって、
前記コンピュータが有するプロセッサが、
半導体素子の論理式の入力に基づき、前記論理式の変数に所定の値を割り当てて充足可能性問題を判定し、
前記判定の結果、コンフリクトが生じた場合に、前記コンフリクトの原因を解析し、
前記解析に基づき、探索ポイントをコンフリクトが生じた探索レベルに戻して探索するバックトラック量を設定し、
同一の探索ポイントに対するバックトラック回数が所定の閾値を超えた場合、前記同一の探索ポイントより手前の前記探索レベルにバックトラックするようバックトラック量を変更し、
変更後の前記バックトラック量により戻った前記探索レベルの探索ポイントから探索をおこなう、
処理を実行することを特徴とする論理検証方法。
【００６４】
（付記９）半導体素子の論理式の入力に基づき、前記論理式の変数に所定の値を割り当てて充足可能性問題を判定する判定部と、
前記判定の結果、コンフリクトが生じた場合に、前記コンフリクトの原因を解析する解析部と、
前記解析に基づき、探索ポイントをコンフリクトが生じた探索レベルに戻して探索させるバックトラック量を設定するバックトラック設定部とを有し、
前記判定部は、同一の探索ポイントに対するバックトラック回数が所定の閾値を超えた場合、前記同一の探索ポイントより手前の前記探索レベルにバックトラックするようバックトラック量を変更し、変更後の前記バックトラック量により戻った前記探索レベルの探索ポイントから探索をおこなうことを特徴とする論理検証装置。
【符号の説明】
【００６５】
２０１  ソリューションなし空間
３００  論理検証装置
３０１  ＣＰＵ
３０２  ＲＯＭ
３０３  ＲＡＭ
３０４  記憶部
３５１  判定部
３５２  解析部
３５３  バックトラック設定部
３５４  変数値設定部
【図１】
2014186642.tif 000003
【図２】
2014186642.tif 000004
【図３−１】
2014186642.tif 000005
【図３−２】
2014186642.tif 000006
【図４】
2014186642.tif 000007
【図５−１】
2014186642.tif 000008
【図５−２】
2014186642.tif 000009
【図５−３】
2014186642.tif 000010
【図５−４】
2014186642.tif 000011
【図５−５】
2014186642.tif 000012
【図５−６】
2014186642.tif 000013
【図５−７】
2014186642.tif 000014