(57)【特許請求の範囲】
【請求項１】
コンピュータに、
第１のクロックドメインと、前記第１のクロックドメインから非同期で信号を受信する第２のクロックドメインと、を有する検証対象回路の回路情報に、所定入力パターンを与える第１のシミュレーションを実行し、
前記第１のシミュレーションの実行中に、前記信号を受信する前記第２のクロックドメイン内の素子の出力がランダム値である出力値を検出し、
前記ランダム値である出力値の検出時の前記第１のシミュレーションの実行状態を複製し、
複製された前記第１のシミュレーションの実行状態のうちの前記第２のクロックドメイン内の素子の出力を、検出された出力値と異なる論理値に設定し、
設定後の実行状態に基づく第２のシミュレーションを、前記第１のシミュレーションと排他的に実行する、
処理を実行させることを特徴とする検証支援プログラム。
【請求項２】
前記第２のシミュレーションの実行終了後の前記第１のシミュレーションの実行中に、前記信号を受信する前記第２のクロックドメイン内の素子の出力がランダム値である出力値を検出し、
前記ランダム値である出力値の検出時の前記第１のシミュレーションの実行状態を複製し、
複製された前記第１のシミュレーションの実行状態のうちの前記第２のクロックドメイン内の素子の出力を、検出された出力値と異なる論理値に設定し、
設定後の実行状態に基づく第３のシミュレーションを、前記第１のシミュレーションと排他的に実行し、
前記回路情報のうちの所定の素子の状態が、前記第２のシミュレーションと前記第３のシミュレーションの同一時刻で一致するか否かを判断し、
前記所定の素子の状態が同一時刻で一致すると判断された場合、前記第３のシミュレーションを終了させる、
処理を実行させることを特徴とする請求項１に記載の検証支援プログラム。
【請求項３】
第１のクロックドメインと、前記第１のクロックドメインから非同期で信号を受信する第２のクロックドメインと、を有する検証対象回路の回路情報に、所定入力パターンが与えられた第１のシミュレーションの時刻ごとの前記回路情報のうちの所定の素子の状態を含むシミュレーション結果を記憶する記憶装置にアクセス可能なコンピュータに、
前記第１のシミュレーションを実行し、
前記第１のシミュレーションの実行中に、前記信号を受信する前記第２のクロックドメイン内の素子の出力がランダム値である出力値を検出し、
前記ランダム値である出力値の検出時の前記第１のシミュレーションの実行状態を複製し、
複製された前記第１のシミュレーションの実行状態のうちの前記第２のクロックドメイン内の素子の出力を、検出された出力値と異なる論理値に設定し、
設定後の実行状態に基づく第２のシミュレーションを、前記第１のシミュレーションと排他的に実行し、
前記第２のシミュレーションの実行中において、前記所定の素子の状態が、前記記憶装置に記憶された前記シミュレーション結果と前記第２のシミュレーションの同一時刻で一致するか否かを判断し、
同一時刻で一致すると判断された場合に、前記第２のシミュレーションにおいて、前記信号を受信する前記第２のクロックドメイン内の素子の出力がランダム値である出力値を検出し、
前記第２のシミュレーションの実行状態のうちの前記第２のクロックドメイン内の素子の出力を、検出された出力値と異なる論理値に設定し、
設定後の実行状態に基づき前記第２のシミュレーションを実行する、
処理を実行させることを特徴とする検証支援プログラム。
【請求項４】
前記所定の素子の状態が、前記記憶装置に記憶された前記シミュレーション結果と前記第２のシミュレーションの同一時刻で一致すると判断されてから一定時間以内に、前記ランダム値である出力値が検出されない場合、前記第２のシミュレーションを終了させる、
処理を実行させることを特徴とする請求項３に記載の検証支援プログラム。
【請求項５】
コンピュータが、
第１のクロックドメインと、前記第１のクロックドメインから非同期で信号を受信する第２のクロックドメインと、を有する検証対象回路の回路情報に、所定入力パターンを与える第１のシミュレーションを実行し、
前記第１のシミュレーションの実行中に、前記信号を受信する前記第２のクロックドメイン内の素子の出力がランダム値である出力値を検出し、
前記ランダム値である出力値の検出時の前記第１のシミュレーションの実行状態を複製し、
複製された前記第１のシミュレーションの実行状態のうちの前記第２のクロックドメイン内の素子の出力を、検出された出力値と異なる論理値に設定し、
設定後の実行状態に基づく第２のシミュレーションを、前記第１のシミュレーションと排他的に実行する、
処理を実行することを特徴とする検証支援方法。
【請求項６】
第１のクロックドメインと、前記第１のクロックドメインから非同期で信号を受信する第２のクロックドメインと、を有する検証対象回路の回路情報に、所定入力パターンが与えられた第１のシミュレーションの時刻ごとの前記回路情報のうちの所定の素子の状態を含むシミュレーション結果を記憶する記憶装置にアクセス可能なコンピュータが、
前記第１のシミュレーションを実行し、
前記第１のシミュレーションの実行中に、前記信号を受信する前記第２のクロックドメイン内の素子の出力がランダム値である出力値を検出し、
前記ランダム値である出力値の検出時の前記第１のシミュレーションの実行状態を複製し、
複製された前記第１のシミュレーションの実行状態のうちの前記第２のクロックドメイン内の素子の出力を、検出された出力値と異なる論理値に設定し、
設定後の実行状態に基づく第２のシミュレーションを、前記第１のシミュレーションと排他的に実行し、
前記第２のシミュレーションの実行中において、前記所定の素子の状態が、前記記憶装置に記憶された前記シミュレーション結果と前記第２のシミュレーションの同一時刻で一致するか否かを判断し、
同一時刻で一致すると判断された場合に、前記第２のシミュレーションにおいて、前記信号を受信する前記第２のクロックドメイン内の素子の出力がランダム値である出力値を検出し、
前記第２のシミュレーションの実行状態のうちの前記第２のクロックドメイン内の素子の出力を、検出された出力値と異なる論理値に設定し、
設定後の実行状態に基づき前記第２のシミュレーションを実行する、
処理を実行することを特徴とする検証支援方法。
【請求項７】
第１のクロックドメインと、前記第１のクロックドメインから非同期で信号を受信する第２のクロックドメインと、を有する検証対象回路の回路情報に、所定入力パターンを与える第１のシミュレーションを実行する第１の実行手段と、
前記第１の実行手段による前記第１のシミュレーションの実行中に、前記信号を受信する前記第２のクロックドメイン内の素子の出力がランダム値である出力値を検出する検出手段と、
前記ランダム値である出力値の前記検出手段による検出時の前記第１のシミュレーションの実行状態を複製する複製手段と、
前記複製手段によって複製された前記第１のシミュレーションの実行状態のうちの前記第２のクロックドメイン内の素子の出力を、検出された出力値と異なる論理値に設定する設定手段と、
前記設定手段による設定後の実行状態に基づく第２のシミュレーションを、前記第１のシミュレーションと排他的に実行する第２の実行手段と、
を備えることを特徴とする検証支援装置。
【請求項８】
第１のクロックドメインと、前記第１のクロックドメインから非同期で信号を受信する第２のクロックドメインと、を有する検証対象回路の回路情報に、所定入力パターンが与えられた第１のシミュレーションの時刻ごとの前記回路情報のうちの所定の素子の状態を含むシミュレーション結果を記憶する記憶装置にアクセス可能な検証支援装置であって、
前記第１のシミュレーションを実行する第１の実行手段と、
前記第１の実行手段による前記第１のシミュレーションの実行中に、前記信号を受信する前記第２のクロックドメイン内の素子の出力がランダム値である出力値を検出する第１の検出手段と、
前記ランダム値である出力値の前記第１の検出手段による検出時の前記第１のシミュレーションの実行状態を複製する複製手段と、
前記複製手段により複製された前記第１のシミュレーションの実行状態のうちの前記第２のクロックドメイン内の素子の出力を、検出された出力値と異なる論理値に設定する第１の設定手段と、
前記第１の設定手段による設定後の実行状態に基づく第２のシミュレーションを、前記第１のシミュレーションと排他的に実行する第２の実行手段と、
前記第２の実行手段による前記第２のシミュレーションの実行中において、前記所定の素子の状態が、前記記憶装置に記憶された前記シミュレーション結果と前記第２のシミュレーションの同一時刻で一致するか否かを判断する判断手段と、
前記判断手段により同一時刻で一致すると判断された場合に、前記第２のシミュレーションにおいて、前記信号を受信する前記第２のクロックドメイン内の素子の出力がランダム値である出力値を検出する第２の検出手段と、
前記第２のシミュレーションの実行状態のうちの前記第２のクロックドメイン内の素子の出力を、前記第２の検出手段により検出された出力値と異なる論理値に設定する第２の設定手段と、
を備え、
前記第２の実行手段は、
前記第２の設定手段による設定後の実行状態に基づき前記第２のシミュレーションを実行することを特徴とする検証支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路の回路情報の検証を支援する検証支援プログラム、検証支援方法、および検証支援装置に関する。
【背景技術】
【０００２】
従来より、半導体集積回路では機能の複雑化や省電力化のため、１半導体集積回路内では周波数の異なる複数のクロックが用いられている。クロックソースを基準にして半導体集積回路内の回路ブロックが区分けされた場合、各区分けされた回路ブロックの集合をクロックドメインと称する。さらに、クロックドメイン間では信号の受け渡し（クロックドメイン・クロッシング（Ｃｌｏｃｋ  Ｄｏｍａｉｎ  Ｃｒｏｓｓｉｎｇ：以降「ＣＤＣ」と称する。））が行われる場合がある。
【０００３】
各ＦＦにはセットアップタイムとホールドタイムが定義されており、該セットアップタイムとホールドタイムが違反されると、メタステーブル状態が発生する。メタステーブル状態とは出力が不安定な状態であり、０か１のいずれが出力されるか不明確な状態である。ＣＤＣによって、非同期で信号が受け渡されると、セットアップタイム違反や、ホールドタイム違反などによるメタステーブル状態の発生が避けられない。
【０００４】
そして、メタステーブル状態の影響が論理値の差異として後段のＦＦや組み合わせ回路に伝播し、半導体集積回路が誤動作することがある。そのため、メタステーブル状態が発生しても半導体集積回路が誤動作しないことを検証しなければならない。しかしながら、通常のＦＦのモデルを用いた論理検証では、メタステーブル状態の影響が考慮されない。
【０００５】
そこで、ＣＤＣ間での信号の受け渡しの仕組みに関する検証を行う手段として、異なるクロックドメインから受信した信号のランダム性をシミュレーションするＣＤＣシミュレーションがある。
【０００６】
関連する先行技術としては、たとえば、非同期となる箇所を抽出して検証用ベクタを生成する技術がある。また、たとえば、メタステーブル状態となる信号を擬似的に発生させるメタステーブル発生回路をＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）に構築する技術がある。また、たとえば、シミュレーション結果と期待値とを比較し、一致しない場合にはシミュレーションを停止させる技術がある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００９−５９０２４号公報
【特許文献２】特開２００９−９３１８号公報
【特許文献３】特開２００５−１８２０９３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
通常の論理シミュレーションが行われて半導体集積回路の機能にエラーがないことが検証されてから、ＣＤＣシミュレーションが行われる。そのため、ＣＤＣシミュレーションにおいてのエラーの要因となる箇所はＣＤＣ箇所である。ＣＤＣ箇所とは、第１のクロックドメインのＦＦから第２のクロックドメインのＦＦにデータが受け渡されている箇所である。エラーの要因となる箇所からエラーの発生が判定される箇所までには、複数のＦＦや組み合わせ回路などがあるため、距離が離れており、かつ出力されるまでに時間がかかる。エラーの発生が判定される箇所とは、たとえば、検証対象回路の出力端子が挙げられる。
【０００９】
すべてのＣＤＣジッタの組み合わせを網羅するためには、２＾ＣＤＣジッタ数（＾は乗数を示す）通りのシミュレーションを実行させなければならず、シミュレーションに時間がかかる。
【００１０】
１つの側面では、本発明は、シミュレーション時間を短縮することができる検証支援プログラム、検証支援方法、および検証支援装置を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明の一の観点によれば、第１のクロックドメインと、前記第１のクロックドメインから非同期で信号を受信する第２のクロックドメインと、を有する検証対象回路の回路情報に、所定入力パターンを与える第１のシミュレーションを実行し、前記第１のシミュレーションの実行中に、前記信号を受信する前記第２のクロックドメイン内の素子の出力がランダム値である出力値を検出し、前記ランダム値である出力値の検出時の前記第１のシミュレーションの実行状態を複製し、複製された前記第１のシミュレーションの実行状態のうちの前記第２のクロックドメイン内の素子の出力を、検出された出力値と異なる論理値に設定し、設定後の実行状態に基づく第２のシミュレーションを、前記第１のシミュレーションと排他的に実行する、検証支援プログラム、検証支援方法、および検証支援装置が提供される。
【００１２】
本発明の他の観点によれば、第１のクロックドメインと、前記第１のクロックドメインから非同期で信号を受信する第２のクロックドメインと、を有する検証対象回路の回路情報に、所定入力パターンが与えられた第１のシミュレーションを実行し、前記第１のシミュレーションの実行中に、前記信号を受信する前記第２のクロックドメイン内の素子の出力が前記ランダム値である出力値を検出し、前記ランダム値である出力値の検出時の前記第１のシミュレーションの実行状態を複製し、複製された前記第１のシミュレーションの実行状態のうちの前記第２のクロックドメイン内の素子の出力を、検出された出力値と異なる論理値に設定し、設定後の実行状態に基づく第２のシミュレーションを、前記第１のシミュレーションと排他的に実行し、前記第２のシミュレーションの実行中において、前記回路情報のうちの所定の素子の状態が、前記第１のシミュレーションの時刻ごとの前記所定の素子の状態を含むシミュレーション結果を記憶する記憶装置に記憶された前記シミュレーション結果と前記第２のシミュレーションの同一時刻で一致するか否かを判断し、同一時刻で一致すると判断された場合に、前記第２のシミュレーションにおいて、前記信号を受信する前記第２のクロックドメイン内の素子の出力がランダム値である出力値を検出し、前記第２のシミュレーションの実行状態のうちの前記第２のクロックドメイン内の素子の出力を、検出された出力値と異なる論理値に設定し、設定後の実行状態に基づき前記第２のシミュレーションを実行する、検証支援プログラム、検証支援方法、および検証支援装置が提供される。
【発明の効果】
【００１３】
本検証支援プログラム、検証支援方法、および検証支援装置によれば、シミュレーション時間の短縮化を図ることができる。
【図面の簡単な説明】
【００１４】
【図１】図１は、本発明のシミュレーション例を示す説明図である。
【図２】図２は、ＣＤＣの一例を示す説明図である。
【図３】図３は、通常のＦＦのモデルが使用されたシミュレーション結果の一例を示す説明図である。
【図４】図４は、ＣＤＣモデルが使用されたシミュレーション結果の一例を示す説明図である。
【図５】図５は、ＣＤＣ検証の一連の流れを示すフローチャートである。
【図６】図６は、ＣＤＣジッタの影響伝播の観測例を示す説明図である。
【図７】図７は、検証支援装置のハードウェア構成例を示すブロック図である。
【図８】図８は、シミュレーションモデルの一例を示す説明図である。
【図９】図９は、検証対象回路モデル８２２の第２のクロックドメイン一例を示す説明図である。
【図１０】図１０は、図９で示したＣＤＣモデルの一例を示す説明図である。
【図１１】図１１は、Ｊｉｔｔｅｒ  Ｄｅｔｅｃｔｏｒの一例を示す説明図である。
【図１２】図１２は、入力パターンと期待値の一例を示す説明図である。
【図１３】図１３は、実施の形態１にかかる検証支援装置７００の機能例を示すブロック図である。
【図１４】図１４は、実施の形態１にかかるシミュレーション例を示す説明図である。
【図１５】図１５は、実施の形態１にかかる検証支援装置７００の親プロセス１３００が行う処理手順を示すフローチャートである。
【図１６】図１６は、実施の形態１にかかる検証支援装置７００の子プロセス１３２０−ｉが行う処理手順を示すフローチャートである。
【図１７】図１７は、実施の形態２によるシミュレーションの起動回数削減例を示す説明図である。
【図１８】図１８は、実施の形態２にかかる検証支援装置７００の機能例を示すブロック図である。
【図１９】図１９は、実施の形態２によるシミュレーション例を示す説明図である。
【図２０】図２０は、実施の形態２にかかる検証支援装置７００の親プロセス１８００が行う処理手順を示すフローチャート（その１）である。
【図２１】図２１は、実施の形態２にかかる検証支援装置７００の親プロセス１８００が行う処理手順を示すフローチャート（その２）である。
【図２２】実施の形態２にかかる検証支援装置７００の基本実行パターンを実行する子プロセス１８２０が行う処理手順を示すフローチャートである。
【図２３】図２３は、実施の形態２にかかる検証支援装置７００の反転パターンを実行する子プロセス１８３０−ｊが行う処理手順を示すフローチャート（その１）である。
【図２４】図２４は、実施の形態２にかかる検証支援装置７００の反転パターンを実行する子プロセス１８３０−ｊが行う処理手順を示すフローチャート（その２）である。
【図２５】図２５は、シミュレーションに要した時間の一例を示す説明図である。
【発明を実施するための形態】
【００１５】
本実施の形態では、ＣＤＣを含む論理設計に対する検証効率の向上を図る手法の一例について説明する。以下に添付図面を参照して、本発明にかかる検証支援プログラム、検証支援方法、および検証支援装置の実施の形態を詳細に説明する。
【００１６】
図１は、本発明のシミュレーション例を示す説明図である。まず、検証対象回路の回路情報や入力パターンにもよるが、ＣＤＣジッタは、何百個〜何万個発生する。上述したようにすべてのＣＤＣジッタの組み合わせを網羅するためには、２＾総ＣＤＣジッタ数通りのシミュレーションを実行させなければならず、シミュレーションに時間がかかる。図１の例のように、ＣＤＣジッタ数がＪ１〜Ｊ３の３個の場合には、Ｊ１〜Ｊ３の論理値の組み合わせが（Ｊ１，Ｊ２，Ｊ３）＝（０，０，０）〜（１，１，１）までの８種類あるため、８通りのシミュレーションを行わなければならない。
【００１７】
そこで、論理シミュレータにより回路情報に所定入力パターンを与えるシミュレーションと、該シミュレーションで発生する複数のＣＤＣジッタのうちの１個のＣＤＣジッタの論理値が異なるシミュレーションとで、重複する実行を省略する。これにより、シミュレーション時間を短縮することができる。
【００１８】
図１の例では、３個のＣＤＣジッタが発生する場合、検証支援装置が、３個のＣＤＣジッタをそれぞれ選択して順にＣＤＣジッタの影響が伝播するか否かを特定する。通常のＣＤＣシミュレーションでは、４回のシミュレーションを行わなければならない。論理シミュレータでは、同時に複数のシミュレーションを行えないため、４回分のシミュレーション時間がかかる。
【００１９】
そこで、本実施の形態では、重複するシミュレーションを行わないようにすることで、シミュレーション時間を短縮する。まず、検証支援装置が、検証対象回路の回路情報に所定入力パターンを与えるシミュレーション１０１のうちの（１）の実行中に、ＣＤＣジッタＪ１を検出する。
【００２０】
そして、検証支援装置が、ＣＤＣジッタＪ１の検出時のシミュレーション１０１の実行状態を複製する。そして、検証支援装置が、複製されたシミュレーション１０１の実行状態のうちの第２のクロックドメイン内の素子の出力を、検出された出力値と異なる論理値に設定する。つぎに、検証支援装置が、設定後の実行状態に基づくシミュレーション１０２（第２のシミュレーション）をシミュレーション１０１と排他的に実行する。論理シミュレータは複数のシミュレーションを並列実行できないため、論理シミュレータがいずれか一方のシミュレーションを実行中には他方のシミュレーションの実行は待機する。
【００２１】
つぎに、検証支援装置が、シミュレーション１０１の（３）の実行中に、ＣＤＣジッタＪ２を検出する。そして、検証支援装置が、ＣＤＣジッタＪ２の検出時のシミュレーション１０１の実行状態を複製する。そして、検証支援装置が、複製されたシミュレーション１０１の実行状態のうちの第２のクロックドメイン内の素子の出力を、検出された出力値と異なる論理値に設定する。つぎに、検証支援装置が、設定後の実行状態に基づくシミュレーション１０３（第２のシミュレーション）をシミュレーション１０１と排他的に実行する。図１の例では、シミュレーション１０３を先に行い、つづいて、シミュレーション１０１を行う。
【００２２】
最後に、検証支援装置が、シミュレーション１０１のうちの（５）の実行中に、ＣＤＣジッタＪ３を検出する。そして、検証支援装置が、ＣＤＣジッタＪ３の検出時のシミュレーション１０１の実行状態を複製する。そして、検証支援装置が、複製されたシミュレーション１０１の実行状態のうちの第２のクロックドメイン内の素子の出力を、検出された出力値と異なる論理値に設定する。つぎに、検証支援装置が、設定後の実行状態に基づくシミュレーション１０４（第２のシミュレーション）をシミュレーション１０１と排他的に実行する。図１の例では、検証支援装置が、シミュレーション１０４の実行を先に行い、つづいて、シミュレーション１０１の実行の続きを行う。
【００２３】
図１のＣＤＣシミュレーション例では、通常のＣＤＣシミュレーション（シミュレーション１１１〜１１４）例と比較して、（１）×３のシミュレーション時間と、（３）×２のシミュレーション時間と、（５）のシミュレーション時間が短縮される。
【００２４】
本実施の形態に関する詳細な説明に先立って、理解の容易化のため、ＣＤＣとＣＤＣシミュレーションについてより詳細に説明する。
【００２５】
図２は、ＣＤＣの一例を示す説明図である。図２では、第１のクロックドメイン内のＦＦ（Ｆｌｉｐ  Ｆｌｏｐ）の出力信号である信号Ｓ１が第２のクロックドメイン内のＦＦの入力信号となっている。第１のクロックドメイン内のＦＦはＣＬＫ１に同期して動作し、第２のクロックドメイン内のＦＦはＣＬＫ２に同期して動作している。第１のクロックドメイン内のＦＦから第２のクロックドメイン内のＦＦへデータが受け渡されると、第２のクロックドメイン内のＦＦのクロックのタイミングに関わらず該データが入力される。
【００２６】
各ＦＦにはセットアップタイムとホールドタイムが定義されており、セットアップタイムとホールドタイムが違反されると、メタステーブル状態が発生する。メタステーブル状態とは出力が不安定な状態であり、０か１のいずれが出力されるか不明確な状態である。第１のクロックドメイン内のＦＦの出力である信号Ｓ１がＣＬＫ２の立ち上がり付近で変化すると、タイミングチャート２００で示すように、第２のクロックドメイン内のＦＦのセットアップタイムまたはホールドタイムが違反される場合がある。この違反により、第２のクロックドメイン内のＦＦの出力である信号Ｓ２がメタステーブル状態となる場合がある。
【００２７】
メタステーブル状態の影響が論理値の差異として後段のＦＦや組み合わせ回路に伝播し、半導体集積回路が誤動作することがある。そのため、メタステーブル状態が発生しても半導体集積回路が誤動作しないことを検証しなければならない。つぎに、通常のＦＦのモデルを用いた論理シミュレーションについて説明する。
【００２８】
図３は、通常のＦＦのモデルが使用されたシミュレーション結果の一例を示す説明図である。通常のＦＦのモデルが使用されたシミュレーションでは、タイミングチャート３００で示すようにＳ１の変化がＣＬＫ２の立ち上がり付近で発生しても、ＣＬＫ２の立ち上がり時の信号Ｓ１の値が信号Ｓ２へ出力される。すなわち、セットアップタイムやホールドタイムの違反があっても、この違反による影響をシミュレーションすることができない。
【００２９】
そこで、第１のクロックドメインのＦＦから非同期で信号を受け渡される第２のクロックドメインのＦＦのモデルがメタステーブル状態の影響を模擬するモデル（以下「ＣＤＣモデル」）に変更される。つぎに、ＣＤＣモデルを用いたＣＤＣシミュレーションについて説明する。
【００３０】
図４は、ＣＤＣモデルが使用されたシミュレーション結果の一例を示す説明図である。回路情報４０１では、第１のクロックドメインからのＳ１信号を受信するＦＦがＣＤＣモデルに変更されている。タイミングチャート４０２では、Ｓ１の変化がＣＬＫ２の立ち上がり付近で発生すると、ＣＬＫ２の立ち上がり時にＳ２には０または１のランダム値が１クロックサイクル期間中に出力される。ここでは、１クロックサイクル期間中のランダムな値をＣＤＣジッタと称する。
【００３１】
図５は、ＣＤＣ検証の一連の流れを示すフローチャートである。論理シミュレータを有し、論理シミュレーションが可能なコンピュータが、検証対象回路の回路情報に所定入力パターンを与えてＣＤＣシミュレーションを実行する（ステップＳ５０１）。そして、コンピュータが、論理障害（以降、「エラー」と称する。）を検出したか否かを判断する（ステップＳ５０２）。
【００３２】
コンピュータが、エラーを検出したと判断した場合（ステップＳ５０２：Ｙｅｓ）、検証者が、手作業でデバッグし（ステップＳ５０３）、ステップＳ５０１へ戻ることで、コンピュータが、デバッグ後の回路情報を用いてＣＤＣシミュレーションを実行する。デバッグとは、具体的には、論理障害要因（以降、「エラー要因」と称する。）分析や論理修正を示している。
【００３３】
コンピュータが、エラーを検出していないと判断した場合（ステップＳ５０２：Ｎｏ）、検証者が、カバレッジ情報を用いてカバレッジ不足であるか否かを判断する（ステップＳ５０４）。検証者が、カバレッジ不足であると判断した場合（ステップＳ５０４：Ｙｅｓ）、実行条件を変更し（ステップＳ５０５）、ステップＳ５０１へ戻る。ここで、実行条件の変更とは、乱数系列の変更や、入力パターンの変更である。検証者が、カバレッジ不足でないと判断した場合（ステップＳ５０４：Ｎｏ）、ＣＤＣ検証を終了する。
【００３４】
ＣＤＣシミュレーションでは、メタステーブル状態の影響がシミュレーション結果に含まれているため、障害要因（エラー要因）の分析が難しい。そのため、まず、検証者は、ＣＤＣモデルへの変更前の通常の論理シミュレーションにより通常の機能に問題が無いことを確認する。その後、検証者は、通常の論理シミュレーションで用いたのと同じ入力パターンを用いてＣＤＣシミュレーションを行い、メタステーブル状態の影響に起因する問題が無いかを検査する。
【００３５】
ＣＤＣのカバレッジ判定基準としては、通常のＣＤＣシミュレーションの実行結果を用いてＣＤＣジッタの影響が観測点まで現れているか否かによって、カバレッジの不足を判断する。たとえば、観測点は、出力端子、検証対象回路の状態を表すＦＦの出力、ＣＤＣモデルの後段の素子の出力であってもよい。また、たとえば、観測点は、第１のクロックドメインから第２のクロックドメインへ受け渡される複数のＣＤＣ信号が合流する箇所、アサーションであってもよい。アサーションとは、検証対象の設計が満たすべき性質が定義された箇所である。
【００３６】
上述したように、すべてのＣＤＣジッタの組み合わせを網羅するためには、２＾ＣＤＣジッタ数（＾は乗数を示す）通りのシミュレーションを実行させなければならず、シミュレーションに時間がかかるという問題点がある。さらに、すべてのＣＤＣジッタの組み合わせをシミュレーションしない場合には、検証者が手作業でデバックしながら任意に選んだＣＤＣジッタの組み合わせのみをシミュレーションするため、エラー要因の分析に時間がかかるという問題点がある。
【００３７】
図６は、ＣＤＣジッタの影響伝播の観測例を示す説明図である。図６では、検証者によるエラー要因の分析を容易化するために、検証支援装置が、各ＣＤＣの影響が観測点まで伝播しているか否かを検証する例を示す。
【００３８】
図６では、検証支援装置が、あるＣＤＣジッタの出力値を、所定入力パターンでＣＤＣシミュレーションしたシミュレーション結果時のＣＤＣジッタの論理値と異なる論理値に設定する。そして、検証支援装置が、該シミュレーション結果と設定後でのシミュレーション結果とに基づき所定入力パターンにおいて各ＣＤＣジッタの影響が観測点まで伝播されているかを特定する。
【００３９】
図６では、検証支援装置が、テストベンチへ入力パターンを与えると、第２のクロックドメインのＣＤＣモデルからＣＤＣジッタＪ１，Ｊ２が発生する。ＣＤＣジッタＪ１，２の論理値の組み合わせによって、４通りの実行パターンが得られる。実行パターンの組み合わせについては、Ｐ＝（Ｊ１，Ｊ２）で示す。図６の実行パターンＰ０は、（Ｊ１，Ｊ２）＝（０，１）である。そして、検証支援装置が、実行パターンＰ０のＣＤＣジッタＪ０の論理値と異なる論理値に設定した実行パターンＰ１＝（Ｊ１，Ｊ２）＝（１，１）のシミュレーションを行う。そして、図６では、観測点のＰ０のシミュレーション結果と観測点のＰ１のシミュレーション結果とが異なるため、検証支援装置が、観測点にＣＤＣジッタＪ１の影響が伝播していると判断する。
【００４０】
そして、検証支援装置が、実行パターンＰ０のＣＤＣジッタＪ１の論理値と異なる論理値に設定した実行パターンＰ２＝（Ｊ１，Ｊ２）＝（０，０）のシミュレーションを行う。そして、図６では、観測点のＰ０のシミュレーション結果と観測点のＰ２のシミュレーション結果とが異なるため、検証支援装置が、観測点にＣＤＣジッタＪ２の影響が伝播していないと判断する。
【００４１】
したがって、ＣＤＣジッタＪ１，２の組み合わせは４通りであるが、検証支援装置が、３通りの組み合わせを検証すれば、どのＣＤＣジッタの影響が伝播したか否かを判断することができる。さらに、影響の伝播によって、検証者が、どのＣＤＣジッタの影響がエラーに関係するかを判定することができる。これにより、検証支援装置が、シミュレーション回数を減らしつつ、ＣＤＣジッタによるエラー要因の特定を容易化することができる。
【００４２】
そして、本実施の形態１，２では、図６で示すような複数のＣＤＣジッタのうちの１個のＣＤＣジッタの論理値のみが異なるシミュレーションの重複するシミュレーションを省くことで、シミュレーション時間を短縮する。つぎに、本実施の形態１，２における検証支援装置のハードウェア構成例と、実施の形態１と実施の形態２とで用いるシミュレーションモデルについて説明する。
【００４３】
（検証支援装置のハードウェア構成例）
図７は、検証支援装置のハードウェア構成例を示すブロック図である。図７において、検証支援装置７００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）７０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）７０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）７０３と、を有している。さらに、検証支援装置７００は、磁気ディスクドライブ７０４と、磁気ディスク７０５と、光ディスクドライブ７０６と、光ディスク７０７と、ディスプレイ７０８と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）７０９と、を有している。さらに、検証支援装置７００は、キーボード７１０と、マウス７１１と、スキャナ７１２と、プリンタ７１３と、を有している。また、各部はバス７１５によってそれぞれ接続されている。
【００４４】
ここで、ＣＰＵ７０１は、検証支援装置７００の全体の制御を司る。ＲＯＭ７０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ７０３は、ＣＰＵ７０１のワークエリアとして使用される。磁気ディスクドライブ７０４は、ＣＰＵ７０１の制御にしたがって磁気ディスク７０５に対するデータのリード／ライトを制御する。磁気ディスク７０５は、磁気ディスクドライブ７０４の制御で書き込まれたデータを記憶する。
【００４５】
光ディスクドライブ７０６は、ＣＰＵ７０１の制御にしたがって光ディスク７０７に対するデータのリード／ライトを制御する。光ディスク７０７は、光ディスクドライブ７０６の制御で書き込まれたデータを記憶したり、光ディスク７０７に記憶されたデータをコンピュータに読み取らせたりする。
【００４６】
ディスプレイ７０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ７０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００４７】
Ｉ／Ｆ７０９は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク７１４に接続され、このネットワーク７１４を介して他の装置に接続される。そして、Ｉ／Ｆ７０９は、ネットワーク７１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ７０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００４８】
キーボード７１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス７１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００４９】
スキャナ７１２は、画像を光学的に読み取り、検証支援装置７００内に画像データを取り込む。なお、スキャナ７１２は、ＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅａｄｅｒ）機能を持たせてもよい。また、プリンタ７１３は、画像データや文書データを印刷する。プリンタ７１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００５０】
（シミュレーションモデル）
図８は、シミュレーションモデルの一例を示す説明図である。シミュレーションモデル８００では、テストベンチ８１２とシミュレーションプロセス制御部８１１を有している。シミュレーションモデル８００は、具体的には、たとえば、Ｖｅｒｉｌｏｇ−ＨＤＬ（Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）やＳｙｓｔｅｍ−Ｖｅｒｉｌｏｇなどのハードウェア記述言語で記述されている。シミュレーションモデル８００は、ＲＡＭ７０３、磁気ディスク７０５、光ディスク７０７などの記憶装置に記憶されている。
【００５１】
まず、シミュレーションプロセス制御部８１１は、テストベンチ８１２を制御するモデルである。シミュレーションプロセス制御部８１１の詳細については、後述する。つぎに、テストベンチ８１２は、検証対象回路モデル８２２と、入力パターン発生器８２１と、エラー検出器８２３と、を有している。論理シミュレータによりテストベンチ８１２のシミュレーションの実行が開始すると、入力パターン発生器８２１が入力パターンを発生する。そして、論理シミュレータにより検証対象回路モデル８２２に入力パターンが与えられて、該入力パターンに沿って検証対象回路モデル８２２がシミュレーションされる。検証対象回路モデル８２２から検証に用いる信号がシミュレーション結果として出力される。そして、エラー検出器８２３がシミュレーション結果と期待値とを比較することにより、エラーを検出する。そして、検証対象回路モデル８２２は、検証対象回路の回路情報であり、本実施の形態で用いる詳細例は図９に示す。
【００５２】
（検証対象回路モデル８２２）
図９は、検証対象回路モデル８２２の第２のクロックドメイン一例を示す説明図である。図９で示したように検証対象回路モデル８２２は、第１のクロックドメイン９０１と第２のクロックドメイン９０２とを有している。第２のクロックドメイン９０２は、ＣＤＣモデル９２１と、ＣＤＣモデル９２２と、アップダウン回路９２３と、を有している。第１のクロックドメイン９０１のＦＦ９１１から信号ＵＰがＣＤＣモデル９２１に入力されている。第１のクロックドメイン９０１のＦＦ９１２から信号ＤＯＷＮがＣＤＣモデル９２２に入力されている。
【００５３】
たとえば、アップダウン回路９２３は、アップダウンカウンタである。より具体的には、アップダウン回路９２３では、信号ＵＰがＨｉｇｈになると信号ＡがＨｉｇｈになるため、信号Ｃの値をカウントアップし、信号ＤｏｗｎがＨｉｇｈになると信号ＢがＨｉｇｈになるため、信号Ｃの値をカウントダウンする。ここでは、信号ＵＰと信号Ｄｏｗｎが同時にＨｉｇｈにならないこととする。
【００５４】
（ＣＤＣモデル）
図１０は、図９で示したＣＤＣモデルの一例を示す説明図である。図１０のＣＤＣモデル１０００では、入力信号の変化を検出し、該変化の検出時から一定時間経過以内にクロックイベントが発生すると、該クロックイベントの期間にランダム値を出力する動作が記述されている。ＣＤＣモデル１０００では、Ｊｉｔｔｅｒ  Ｄｅｔｅｃｔｏｒ１００１と、ＦＦ１００２と、ＦＦ１００３と、選択回路１００４と、を有している。
【００５５】
Ｊｉｔｔｅｒ  Ｄｅｔｅｃｔｏｒ１００１は、入力信号の値の変化を検出し、該変化の検出時から一定時間経過するまで１を出力する。ＦＦ１００２は、Ｊｉｔｔｅｒ  Ｄｅｔｅｃｔｏｒ１００１の出力をＣＬＫ２の立ち上がりで取り込む。選択回路１００４は、ＦＦ１００２の出力信号が０であれば、ＦＦ１００３の出力信号を出力し、ＦＦ１００２の出力信号が１であれば、外部から入力された値が出力される。
【００５６】
ここでは、外部から入力された値とは、たとえば、ランダム値、０、１のいずれかが入力される。通常のＣＤＣモデルであれば、ランダム値だけであるが、本実施の形態では、シミュレーションプロセス制御部８１１またはテストベンチ８１２によってランダム値、０または１が入力される。これにより、検証支援装置７００が、図９で示したＣＤＣモデル９２１やＣＤＣモデル９２２が出力する論理値と異なる論理値を設定することができる。
【００５７】
ＣＤＣモデル１０００は、たとえば、ライブラリとしてＲＡＭ７０３、磁気ディスク７０５、光ディスク７０７などの記憶装置に記憶されている。検証対象回路モデル８２２では、該ライブラリ内に記憶された該ＣＤＣモデルを指定する。論理シミュレータが該ライブラリからＣＤＣモデルを読み出して、ＣＤＣモデルに記述された処理を実行する。つぎに、図１１を用いてＪｉｔｔｅｒ  Ｄｅｔｅｃｔｏｒ１００１の詳細例を説明する。
【００５８】
図１１は、Ｊｉｔｔｅｒ  Ｄｅｔｅｃｔｏｒの一例を示す説明図である。Ｊｉｔｔｅｒ  Ｄｅｔｅｃｔｏｒ１１００では、入力信号がＴであり、出力信号がＥである。Ｊｉｔｔｅｒ  Ｄｅｔｅｃｔｏｒ１１００では、Ｔの値が０から１または１から０に変化すると、Ｅの値はＰＥＲＩＯＤ分の時間が経過するまで１となる。
【００５９】
Ｊｉｔｔｅｒ  Ｄｅｔｅｃｔｏｒ１１００は、たとえば、ライブラリとしてＲＡＭ７０３、磁気ディスク７０５、光ディスク７０７などの記憶装置に記憶されている。ＣＤＣモデル１０００では、該ライブラリ内に記憶されたＪｉｔｔｅｒ  Ｄｅｔｅｃｔｏｒ１１００を指定する。論理シミュレータは、該ライブラリからＪｉｔｔｅｒ  Ｄｅｔｅｃｔｏｒ１１００に記述された処理を読み出して、Ｊｉｔｔｅｒ  Ｄｅｔｅｃｔｏｒ１１００に記述された処理を実行する。
【００６０】
図１２は、入力パターンと期待値の一例を示す説明図である。図１２のタイミングチャート１２００では、ＣＬＫ２の立ち上がりから次の立ち上がりの直前までを１周期として、理解の容易化のために、ＣＬＫ２の上に順に番号を付している。たとえば、１クロック目の立ち上がりは、図中矢印の箇所である。
【００６１】
まず、入力パターンにおいて、２クロック目の立ち上がりで信号ＵＰがセットアップタイムまたはホールドタイムを違反しているため、期待値において、信号ＡがＣＤＣジッタＪ１となる。つぎに、入力パターンにおいて、８クロック目の立ち上がりで信号ＵＰと信号ＤＯＷＮがセットアップタイムまたはホールドタイムを違反しているため、期待値において、信号ＡがＣＤＣジッタＪ２となり、信号ＢがＣＤＣジッタＪ３となる。
【００６２】
そして、入力パターンにおいて、１８クロック目の立ち上がりで信号ＵＰと信号ＤＯＮＷがセットアップタイムまたはホールドタイムを違反しているため、期待値において、信号ＡがＣＤＣジッタＪ４となり、信号ＢがＣＤＣジッタＪ５となる。実施の形態１では、ＣＤＣジッタＪ１〜Ｊ３を用いて説明し、実施の形態２では、ＣＤＣジッタＪ１〜Ｊ５を用いて説明する。
【００６３】
（実施の形態１）
まず、実施の形態１では、重複するシミュレーションを減らすために、基本実行パターンのシミュレーションを実行中にＣＤＣジッタを検出し、検出したＣＤＣジッタの影響が伝播するか否かを確認するシミュレーションを行う。これにより、シミュレーション時間を減少させることができる。
【００６４】
（実施の形態１にかかる検証支援装置７００の機能例を示すブロック図）
図１３は、実施の形態１にかかる検証支援装置７００の機能例を示すブロック図である。検証支援装置７００は、親プロセス１３００と、子プロセス１３２０−ｉ（ｉ＝１〜総ＣＤＣジッタ数）と、を有している。親プロセス１３００は、基準実行パターンに関する第１のシミュレーションを実行し、１以上の子プロセス１３２０−ｉを生成する。子プロセス１３２０−ｉは、複数のＣＤＣジッタのうちの１個のＣＤＣジッタの論理値が基準実行パターンでの論理値と異なる論理値となる反転実行パターンに関する第２のシミュレーションを実行する。
【００６５】
親プロセス１３００が、実行部１３０１と、検出部１３０２と、生成部１３０３と、算出部１３０４と、受信部１３０５と、判断部１３０６と、制御部１３０７と、出力部１３０８と、を有している。子プロセス１３２０−ｉが、実行部１３２１−ｉと、算出部１３２２−ｉと、送信部１３２３−ｉと、を有している。
【００６６】
親プロセス１３００の実行部１３０１から出力部１３０８の処理は、たとえば、上述したシミュレーションモデル８００のシミュレーションプロセス制御部８１１にコーディングされている。さらに、子プロセス１３２０−ｉの実行部１３２１−ｉと送信部１３２３−ｉの処理とは、たとえば、上述したシミュレーションモデル８００のシミュレーションプロセス制御部８１１にコーディングされている。ＣＰＵ７０１が、論理シミュレータを起動し、論理シミュレータにシミュレーションモデル８００を与えることで、論理シミュレータが、シミュレーションモデル８００のシミュレーションプロセス制御部８１１に記述されているコードを処理する。つぎに、各部について図１３を用いて詳細に説明する。
【００６７】
図１４は、実施の形態１にかかるシミュレーション例を示す説明図である。図１４のタイミングチャート１４００における（１）〜（５）は実行順である。図１４の例では、上述した入力パターンのうちの１７クロック目までを示すため、総ＣＤＣジッタ数は３であり、ｉは１〜３である。まず、たとえば、実行部１３０１は、入力パターンを与えるシミュレーション１４０１を実行する。たとえば、シミュレーション１４０１では、実行パターンＰ０＝（Ｊ１，Ｊ２，Ｊ３）＝（１，０，０）とする。実行パターンＰ０については、ＣＤＣジッタでランダム値を発生させてもよいし、検証者があらかじめ指定してもよい。
【００６８】
また、たとえば、算出部１３０４は、シミュレーション１４０１の実行中に所定時間ごとに所定の素子の状態と観測点の状態に関するハッシュ値を算出する。所定時間は、たとえば、シミュレーションモデル８００内で定義された実行単位であってもよい。所定の素子としては、たとえば、ＦＦが挙げられる。検証対象回路モデル８２２では、所定の素子がＣＤＣモデル９２１と、ＣＤＣモデル９２２と、アップダウン回路９２３である。ハッシュ値を用いることで、検索を高速化させることができる。ハッシュ値については、公知技術（たとえば、「Ａｎ  Ｉｍｐｒｏｖｅｄ  Ｐｒｏｔｏｃｏｌ  Ｒｅａｃｈａｂｉｌｉｔｙ  Ａｎａｌｙｓｉｓ  Ｔｅｃｈｎｉｑｕｅ，ＧＥＲＡＲＤ  Ｊ，ＨＯＬＺＭＡＮＮ，Ｂｅｌｌ  Ｌａｂｏｒａｔｏｒｉｅｓ」または「Ｒｅｌｉｅａｂｌｅ  Ｈａｓｈｉｎｇ  ｗｉｔｈｏｕｔ  Ｃｏｌｌｉｓｉｏｎ  Ｄｅｔｅｃｔｉｏｎ，Ｐｉｅｒｒｅ  Ｗｏｌｐｅｒ  ａｎｄ  Ｄｅｎｉｓ  Ｌｅｒｏｙ，Ｃｏｍｐｕｔｅｒ  Ａｉｄｅｄ  Ｖｅｒｉｆｉｃａｔｉｏｎ，Ｐｒｏｃ，Ｉｎｔ．ＷｏｒｋＳｈｏｐ，Ｅｌｏｕｎｄａ，Ｃｒｅｔｅ，Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ，Ｖｏｌ．６９７，Ｓｐｒｉｎｇｅｒ  Ｖｅｒｌａｇ，Ｊｕｎｅ，１９９３」）に基づいて算出してもよい。そして、出力部１３０８は、シミュレーション時刻と算出した所定の素子の状態に関するハッシュ値との組み合わせを実行パターンＰ１に関連付けて出力する。出力形式としては、たとえば、Ｉ／Ｆ７０９による外部装置への送信がある。また、たとえば、ＲＡＭ７０３、磁気ディスク７０５、光ディスク７０７などの記憶装置に記憶することとしてもよい。
【００６９】
つぎに、たとえば、検出部１３０２は、実行部１３０１によるシミュレーション１４０１の実行中に、ＣＤＣジッタを検出する。具体的には、検出部１３０２は、シミュレーション１４０１の実行中にランダム値が発生したか否かを判断することで、ＣＤＣジッタを検出してもよい。または、たとえば、検出部１３０２は、図１０で示したＣＤＣモデル１０００内の選択回路１００４に入力される選択信号が１であるか否かを監視することでＣＤＣジッタを検出してもよい。または、実行パターンＰ０があらかじめ検証者によって指定されている場合には、いずれのタイミングでＣＤＣジッタが発生するか親プロセス１３００が把握しているとし、検出部１３０２が、何クロック目であるかに基づいてＣＤＣジッタを検出してもよい。まずは、検出部１３０２が、２クロック目の立ち上がりでＣＤＣジッタＪ１を検出する。
【００７０】
つぎに、たとえば、生成部１３０３は、検出部１３０２により検出されたＣＤＣジッタＪ１を出力する素子の出力値が検出部１３０２で検出された論理値と異なる論理値であるシミュレーション１４０２を実行する子プロセス１３２０−１を生成する。具体的には、生成部１３０３は、複製部１３１１と設定部１３１２と起動部１３１３とを有している。
【００７１】
たとえば、複製部１３１１は、検出部１３０２による検出時のシミュレーション１４０１の実行状態を複製する。実行状態とは、具体的には、たとえば、メモリイメージである。メモリイメージは、たとえば、ＲＡＭ７０３内で確保されるシミュレーション１４０１に関する情報であり、シミュレーションモデル８００のコードや検証対象回路モデル８２２内の各信号の値である。
【００７２】
そして、たとえば、設定部１３１２は、複製部１３１１により複製されたシミュレーション１４０１の実行状態のうちの検出部１３０２で検出されたＣＤＣジッタＪ１を出力する素子の出力値を検出部１３０２による検出時の論理値と異なる論理値に設定する。これにより、シミュレーション１４０２では、実行パターンＰ１＝（Ｊ１，Ｊ２，Ｊ３）＝（０，０，０）となる。そして、たとえば、起動部１３１３は、設定部１３１２により設定後の実行状態を子プロセス１３２０−１の実行状態に指定し、子プロセス１３２０−１を起動する。
【００７３】
生成部１２０３により子プロセス１３２０−１が生成されると、子プロセス１３２０−１の実行部１３２１−１は、設定後の実行状態に基づいてシミュレーション１４０２をシミュレーション１４０１と排他的に実行する。論理シミュレータでは、同時に２つのシミュレーションを実行させることができないため、シミュレーション１４０１とシミュレーション１４０２とは排他的に実行される。図１４の例では、シミュレーション１４０２がシミュレーション１４０１のうちのＣＤＣジッタＪ１の発生以降のシミュレーションよりも先に行われている。
【００７４】
そして、たとえば、送信部１３２３−１は、所定時間ごとに所定の素子の状態および観測点の状態に関するハッシュ値を算出する。そして、たとえば、送信部１３２３−１は、所定時間ごとにシミュレーション時刻と算出したハッシュ値との組み合わせを親プロセス１３００に対して送信する。
【００７５】
そして、たとえば、受信部１３０５は、子プロセス１３２０−１からのシミュレーション時刻とハッシュ値の組み合わせを受信する。そして、たとえば、判断部１３０６は、出力部１３０８によって実行パターンＰ０に関連付けられて記憶装置に記憶された組み合わせのうち、受信部１３０５により受信された組み合わせと同一の組み合わせがあるか否かを判断する。
【００７６】
ここでは、シミュレーション１４０２がシミュレーション１４０１のＣＤＣジッタＪ１の発生以降よりも先に実行されているため、シミュレーション１４０１での所定素子の状態が不明である。そのため、たとえば、出力部１３０８は、シミュレーション時刻とハッシュ値とを組み合わせとして実行パターンＰ１に関連付けて出力する。出力形式としては、たとえば、ＲＡＭ７０３、磁気ディスク７０５、光ディスク７０７などの記憶装置に記憶される。
【００７７】
つぎに、実行部１３０１は、シミュレーション１４０２が終了することで、子プロセス１３２０−１が終了すると、シミュレーション１４０１のＣＤＣジッタＪ１の発生以降を実行する。そして、たとえば、検出部１３０２は、８クロック目の立ち上がりでＣＤＣジッタＪ２とＣＤＣジッタＪ３を検出する。
【００７８】
まず、たとえば、生成部１３０３は、検出部１３０２により検出されたＣＤＣジッタＪ２を出力する素子の出力値が検出部１３０２による検出時の論理値と異なる論理値であるシミュレーション１４０３を実行する子プロセス１３２０−２を生成する。生成部１３０３による具体的なシミュレーション１４０３を実行する子プロセス１３２０−２の生成処理は、シミュレーション１４０２を実行する子プロセス１３２０−１の生成処理と同一処理であるため、詳細な説明を省略する。これにより、シミュレーション１４０３では、実行パターンＰ２＝（Ｊ１，Ｊ２，Ｊ３）＝（１，１，０）となる。
【００７９】
そして、実行部１３２１−２は、設定後の実行状態に基づいてシミュレーション１４０３を実行する。そして、たとえば、算出部１３２２−２は、所定時間ごとに所定の素子の状態および観測点の状態に関するハッシュ値を算出する。そして、送信部１３２３−２は、シミュレーション時刻と算出部１３２２−２により算出されたハッシュ値との組み合わせを親プロセス１３００に対して送信する。
【００８０】
そして、たとえば、受信部１３０５は、子プロセス１３２０−２から、シミュレーション時刻とハッシュ値との組み合わせを受信する。そして、たとえば、判断部１３０６は、出力部１３０８によって出力された実行パターンＰ１，Ｐ２に関連付けられたシミュレーション時刻とハッシュ値の組み合わせのうち、受信部１３０５により受信された組み合わせと同一の組み合わせがあるか否かを判断する。
【００８１】
図１４では、たとえば、１６クロック目の子プロセス１３２０−２によるシミュレーション１４０３の信号Ａ，Ｂ，Ｃは、子プロセス１３２０−１によるシミュレーション１４０２の信号Ａ，Ｂ，Ｃと同一である。そのため、判断部１３０６は、受信部１３０５により受信された組み合わせと同一の組み合わせがあると判断する。
【００８２】
つぎに、制御部１３０７は、判断部１３０６により受信された組み合わせと同一の組み合わせがあると判断された場合、子プロセス１３２０−２を強制終了する。すなわち、１７クロック目以降の子プロセス１３２０−２によるシミュレーション１４０３は、子プロセス１３２０−１によるシミュレーション１４０２と同一となるため、実行させなくてもよい。そのため、制御部１３０７が子プロセス１３２０−２を強制終了することで、シミュレーション時間を短縮することができる。
【００８３】
つぎに、生成部１３０３は、ＣＤＣジッタＪ１，２に関する子プロセス１３２０−１，２の生成と同様にＣＤＣジッタＪ３に関する反転パターンのシミュレーション１４０４を実行する子プロセス１３２０−３を生成する。そして、実行部１３２１−３は、シミュレーション１４０４を実行する。これにより、シミュレーション１４０３では、実行パターンＰ３＝（Ｊ１，Ｊ２，Ｊ３）＝（１，０，１）となる。
【００８４】
また、シミュレーション１４０４の９クロック目での信号Ａ，Ｂ，Ｃの論理値がシミュレーション１４０４の９クロック目での信号Ａ，Ｂ，Ｃの論理値とそれぞれ同一となっている。そのため、シミュレーション１４０４の１０クロック目以降はシミュレーション１４０２と同一となるので、たとえば、制御部１３０７が、子プロセス１３２０−３を強制終了させる。そして、実行部１３０１は、シミュレーション１４０１のＣＤＣジッタＪ３の発生以降を実行する。
【００８５】
（実施の形態１にかかる検証支援装置７００が行う処理手順）
図１５は、実施の形態１にかかる検証支援装置７００の親プロセス１３００が行う処理手順を示すフローチャートである。まず、親プロセス１３００が、実行部１３０１により、第１のシミュレーションを開始し（ステップＳ１５０１）、第１のシミュレーションが終了したか否かを判断する（ステップＳ１５０２）。親プロセス１３００が、第１のシミュレーションが終了していないと判断した場合（ステップＳ１５０２：Ｎｏ）、第１のシミュレーションを１ステップ実行する（ステップＳ１５０３）。ここで、１ステップとは、シミュレーションモデル８００で定義された時間であり、シミュレーションを行う際の実行時間の単位となる。１ステップは、検証者が任意に設定する時間であるが、たとえば、いずれかのクロックの１サイクル分の時間や半サイクル分の時間である。
【００８６】
つぎに、親プロセス１３００が、所定の素子に関するハッシュ値を算出し（ステップＳ１５０４）、シミュレーション時刻とハッシュ値との組み合わせを基本実行パターンに関連付けて出力する（ステップＳ１５０５）。親プロセス１３００が、検出部１３０２により、ＣＤＣジッタの発生を検出したか否かを判断する（ステップＳ１５０６）。親プロセス１３００が、ＣＤＣジッタの発生を検出していないと判断した場合（ステップＳ１５０６：Ｎｏ）、ステップＳ１５０２へ戻る。
【００８７】
また、親プロセス１３００が、ＣＤＣジッタの発生を検出したと判断した場合（ステップＳ１５０６：Ｙｅｓ）、複製部１３１１により、検出時の第１のシミュレーションの実行状態を複製する（ステップＳ１５０７）。そして、親プロセス１３００が、設定部１３１２により、複製された第１のシミュレーションの実行状態のうち、検出したＣＤＣジッタを出力する素子の出力を、検出時の出力値と異なる論理値に設定する（ステップＳ１５０８）。親プロセス１３００が、起動部１３１３により、設定後の実行状態に基づく子プロセス１３２０を起動する（ステップＳ１５０９）。
【００８８】
つぎに、親プロセス１３００が、子プロセス１３２０が終了したか否かを判断する（ステップＳ１５１０）。親プロセス１３００が、子プロセス１３２０が終了したと判断した場合（ステップＳ１５１０：Ｙｅｓ）、ステップＳ１５０２へ戻る。また、親プロセス１３００が、子プロセス１３２０が終了していないと判断した場合（ステップＳ１５１０：Ｎｏ）、受信部１３０５により、子プロセス１３２０からシミュレーション時刻と所定の素子の状態に関するハッシュ値の組み合わせを受信する（ステップＳ１５１１）。
【００８９】
つぎに、親プロセス１３００が、判断部１３０６により、受信した組み合わせが新しいか否かを判断する（ステップＳ１５１２）。そして、親プロセス１３００が、組み合わせが新しいと判断した場合（ステップＳ１５１２：Ｙｅｓ）、出力部１３０８により、組み合わせを子プロセス１３２０の実行パターンに関連付けて出力し（ステップＳ１５１３）、ステップＳ１５１０へ戻る。
【００９０】
また、親プロセス１３００が、組み合わせが新しくないと判断した場合（ステップＳ１５１２：Ｎｏ）、制御部１３０７により、子プロセス１３２０を強制終了させ（ステップＳ１５１４）、ステップＳ１５０２へ戻る。
【００９１】
そして、ステップＳ１５０２において、親プロセス１３００が、第１のシミュレーションが終了したと判断した場合（ステップＳ１５０２：Ｙｅｓ）、一連の処理を終了する。
【００９２】
図１６は、実施の形態１にかかる検証支援装置７００の子プロセス１３２０−ｉが行う処理手順を示すフローチャートである。まず、子プロセス１３２０−ｉが、実行部１３２１−ｉにより、第２のシミュレーションの実行を開始し（ステップＳ１６０１）、第２のシミュレーションが終了したか否かを判断する（ステップＳ１６０２）。
【００９３】
つぎに、子プロセス１３２０−ｉが、第２のシミュレーションが終了していないと判断した場合（ステップＳ１６０２：Ｎｏ）、実行部１３２１−ｉにより、所定時間分の第２のシミュレーションを実行する（ステップＳ１６０３）。そして、子プロセス１３２０−ｉが、送信部１３２３−ｉにより、所定の素子に関するハッシュ値を算出する（ステップＳ１６０４）。そして、子プロセス１３２０−ｉが、１３２２−ｉにより、シミュレーション時刻とハッシュ値との組み合わせを親プロセス１３００に送信し（ステップＳ１６０５）、ステップＳ１６０２へ戻る。ステップＳ１６０２において、子プロセス１３２０−ｉが、第２のシミュレーションが終了したと判断した場合（ステップＳ１６０２：Ｙｅｓ）、一連の処理を終了する。
【００９４】
実施の形態１によれば、異なる実行パターンのシミュレーションのうち、重複するシミュレーションを省くことで、シミュレーション時間を短縮することができる。
【００９５】
（実施の形態２）
つぎに、実施の形態２では、基準実行パターンと、基準実行パターンと１個のＣＤＣジッタの論理値が異なる実行パターンと、が同一シミュレーション時刻で同一状態となってもシミュレーションを止めずに、他の実行パターンのシミュレーションに再利用する。これにより、実行状態の複製にかかる時間と論理値の設定にかかる時間とを併せたシミュレーションの起動にかかる時間を省略することで、シミュレーション時間を短縮することができる。
【００９６】
図１７は、実施の形態２によるシミュレーションの起動回数削減例を示す説明図である。実施の形態２の例では、実行パターンＰ１のシミュレーションが基準実行パターンＰ０のシミュレーションと一致しても、実行パターンＰ１のシミュレーションを継続し、あらたに実行パターンＰ４のシミュレーションとして再利用する。さらに、実施の形態２の例では、実行パターンＰ４のシミュレーションが基準実行パターンＰ０のシミュレーションと一致したら、あらたに実行パターンＰ６のシミュレーションとして再利用する。
【００９７】
さらに、実施の形態２の例では、実行パターンＰ２のシミュレーションが基準実行パターンＰ０のシミュレーションと一致しても、実行パターンＰ２のシミュレーションを継続し、あらたに実行パターンＰ３のシミュレーションとして再利用する。そして、実施の形態２の例では、実行パターンＰ３のシミュレーションが基準実行パターンＰ０のシミュレーションと一致したら、あらたに実行パターンＰ５のシミュレーションとして再利用する。
【００９８】
一方、実施の形態１の例では、実行パターンＰ１〜Ｐ９の各シミュレーションが基準実行パターンＰ０のシミュレーションと一致したら、実行パターンＰ１〜Ｐ９のシミュレーションを終了する。
【００９９】
たとえば、検証対象回路の素子数が大きければ、実行状態の複製処理にかかる時間も長くなる。上述したように、ＣＤＣジッタの数が何百個や何千個もある場合には、実施の形態１では何百回や何千回も複製処理を行わなければならないが、実施の形態２では、実施の形態１と比較して実行状態の複製処理の回数を削減することができる。これにより、実施の形態２では、シミュレーション時間を短縮することができる。
【０１００】
（実施の形態２にかかる検証支援装置７００の機能例を示すブロック図）
図１８は、実施の形態２にかかる検証支援装置７００の機能例を示すブロック図である。検証支援装置７００は、親プロセス１８００と、子プロセス１８２０と、子プロセス１８３０−ｊと、を有している。親プロセス１８００は、基本実行パターンに関する第１のシミュレーションを実行し、子プロセス１８２０や子プロセス１８３０−ｊを起動する。子プロセス１８２０は、基本実行パターンに関するシミュレーションを実行する。子プロセス１８３０−ｊは、反転実行パターンに関する第２のシミュレーションを実行する。
【０１０１】
検証支援装置７００の親プロセス１８００は、実行部１８０１と、検出部１８０２と、生成部１８０３と、算出部１８０４と、受信部１８０５と、判断部１８０６と、制御部１８０７と、出力部１８０８と、送信部１８０９と、を有している。検証支援装置７００の基本実行パターンに関するシミュレーションを実行する子プロセス１８２０は、実行部１８２１と、算出部１８２２と、送信部１８２３と、を有している。検証支援装置７００の反転実行パターンに関するシミュレーションを実行する子プロセス１８３０−ｊは、実行部１８３１−ｊと、算出部１８３２−ｊと、送信部１８３３−ｊと、受信部１８３４−ｊと、判断部１８３５−ｊと、を有している。さらに、子プロセス１８３０−ｊは、制御部１８３６−ｊと、検出部１８３７−ｊと、設定部１８３８−ｊと、を有している。
【０１０２】
親プロセス１８００の実行部１８０１から送信部１８０９の処理は、たとえば、上述したシミュレーションモデル８００のシミュレーションプロセス制御部８１１にコーディングされている。さらに、子プロセス１８２０の実行部１８２１から送信部１８２３の処理と、子プロセス１８３０−ｊの実行部１８３１−ｊと設定部１８３８−ｊの処理とは、たとえば、上述したシミュレーションモデル８００のシミュレーションプロセス制御部８１１にコーディングされている。ＣＰＵ７０１が、論理シミュレータを起動し、論理シミュレータにシミュレーションモデル８００を与えることで、論理シミュレータが、シミュレーションモデル８００のシミュレーションプロセス制御部８１１に記述されているコードを処理する。これにより各部の処理が実現される。つぎに、各部について図１３を用いて詳細に説明する。
【０１０３】
図１９は、実施の形態２によるシミュレーション例を示す説明図である。図１９のタイミングチャート１９００における（１）〜（７）は実行順である。図１９の例では、総ＣＤＣジッタ数は５であり、ｉは１〜５である。まず、たとえば、実行部１８０１は、基準実行パターンに関するシミュレーション１９０１を実行する。たとえば、シミュレーション１９０１では、基準実行パターンである実行パターンＰ０＝（Ｊ１，Ｊ２，Ｊ３，Ｊ４，Ｊ５）＝（１，０，０，０，０）とする。実行パターンＰ０については、ＣＤＣジッタでランダム値を発生させてもよいし、検証者があらかじめ指定してもよい。
【０１０４】
まず、実行部１８０１は、シミュレーション１９０１を実行する。つぎに、検出部１８０２は、シミュレーション１９０１の実行中に、ＣＤＣジッタを検出する。ＣＤＣジッタの検出処理については、実施の形態１で説明した検出処理と同一である。まずは、検出部１８０２が、ＣＤＣジッタＪ１を検出する。
【０１０５】
生成部１８０３は、検出部１８０２によりＣＤＣジッタＪ１が検出されると、基本実行パターンに関するシミュレーションが実行済か否かを判断する。そして、生成部１８０３は、基本実行パターンに関するシミュレーションを実行する子プロセス１８２０が実行済でないと判断した場合、基本実行パターンに関するシミュレーションを実行する子プロセス１８２０を生成する。
【０１０６】
たとえば、生成部１８０３は、複製部１８１１と起動部１８１３を有している。たとえば、複製部１８１１は、ＣＤＣジッタＪ１の検出時のシミュレーション１９０１の実行状態を複製する。そして、起動部１８１３は、複製されたシミュレーション１９０１の実行状態を子プロセス１８２０の実行状態として指定し、子プロセス１８２０を起動する。そして、子プロセスの実行部１８２１は、シミュレーション１９０２を実行する。
【０１０７】
たとえば、算出部１８２２は、所定時間ごとに所定の素子に関するハッシュ値を算出する。そして、たとえば、送信部１８２３は、シミュレーション時刻と算出部１８２２により算出されたハッシュ値との組み合わせを親プロセス１８００に送信する。
【０１０８】
たとえば、受信部１８０５は、子プロセス１８２０からのシミュレーション時刻とハッシュ値の組み合わせを受信する。たとえば、出力部１８０８は、受信部１８０５によって受信された子プロセス１８２０からの組み合わせを実行パターンＰ０と関連付けて出力する。出力形式としては、たとえば、ＲＡＭ７０３、磁気ディスク７０５、光ディスク７０７などの記憶装置に記憶される。
【０１０９】
つぎに、子プロセス１８２０が終了すると、生成部１８０３は、検出されたＣＤＣジッタＪ１を出力する素子の出力値が、検出時の論理値と異なる論理値である実行パターンＰ１に関するシミュレーション１９０３を実行する子プロセス１８３０−１を生成する。具体的には、生成部１８０３は、複製部１８１１と、設定部１８１２と、起動部１８１３と、を有している。たとえば、複製部１８１１は、ＣＤＣジッタＪ１の検出時のシミュレーション１９０１の実行状態を複製する。
【０１１０】
そして、設定部１８１２は、複製されたシミュレーション１９０１の実行状態のうちの検出されたＣＤＣジッタを出力する素子の出力を、検出時の論理値と異なる論理値に設定する。そして、起動部１８１３は、設定部１８１２による設定後の実行状態を子プロセス１８３０−１の実行状態として指定し、子プロセス１８３０−１を起動する。これにより、シミュレーション１９０３では、実行パターンＰ１＝（Ｊ１，Ｊ２，Ｊ３，Ｊ４，Ｊ５）＝（０，０，０，０，０）となる。
【０１１１】
そして、実行部１８３１−１は、シミュレーション１９０３を実行する。つぎに、算出部１８３２−１は、所定時間ごとに所定の素子に関するハッシュ値を算出する。そして、たとえば、送信部１８３３−１は、シミュレーション時刻と算出部１８２２により算出されたハッシュ値との組み合わせを親プロセス１８００に送信する。
【０１１２】
そして、受信部１８０５は、子プロセス１８３０−１からの組み合わせを受信する。そして、判断部１８０６は、すでにシミュレーション済の基本実行パターンに関連付けられたシミュレーション時刻とハッシュ値との組み合わせのうち、受信部１８０５により受信された組み合わせと同一の組み合わせがあるか否かを判断する。たとえば、子プロセス１８３０−１から送信された組み合わせのシミュレーション時刻が、１４クロック目を示すシミュレーション時刻である場合、実行パターンＰ１の状態と、実行パターンＰ０の状態とが、一致している。そのため、判断部１８０６は、同一の組み合わせがあると判断する。そして、送信部１８０９が、判断結果を子プロセス１８３０−１に送信する。
【０１１３】
つぎに、たとえば、受信部１８３４−１は、親プロセス１８００から判断結果を受信する。判断部１８３５−１は、判断結果が子プロセス１８３０−１から送信された組み合わせと同一の組み合わせが基本実行パターンに関連付けられた組み合わせであるか否かを判断する。
【０１１４】
たとえば、検出部１８３７−１が、判断部１８３５−１により判断結果が基本実行パターンに関連付けられた組み合わせである場合、シミュレーション１９０３を継続し、あらたなＣＤＣジッタを検出する。
【０１１５】
そして、たとえば、制御部１８３６−１は、検出部１８３７−１があらたなＣＤＣジッタを一定時間以内に検出しなければ、シミュレーション１９０３の実行を終了させる。具体的には、制御部１８３６−１は、判断部１８３５−１による判断後、タイムアウト時刻を設定する。そして、制御部１８３６−１は、検出部１８３７−１がタイムアウト時刻までにあらたなＣＤＣジッタを検出しなければ、実行部１８３１−１を制御することで、シミュレーション１９０３を終了させる。
【０１１６】
ここで、判断部１８３５−１による判断時のシミュレーション時刻からタイムアウト時刻までの時間は、たとえば、メモリイメージを複製するのにかかる時間程度とする。これにより、メモリイメージを複製するのにかかる時間よりも長い時間に渡って、ＣＤＣジッタが検出されない場合、親プロセス１８００のシミュレーション１９０１の実行を再開させた方が、複数のシミュレーションの合計時間が短くなる。メモリイメージを複製するのにかかる時間は検証対象回路の回路規模や入力パターンにもよるので、該時間は固定値ではない。そのため、検証者がタイムアウト時刻を定めることとしてもよい。
【０１１７】
図１９の例では、検出部１８３７−１が、１８クロック目でＣＤＣジッタＪ４を検出する。そして、検出部１８３７−１が、検出したＣＤＣジッタＪ４の論理値を反転させた反転実行パターンに関するシミュレーションが実行済か否かを判断する。図１９の例では、ＣＤＣジッタＪ４の論理値を反転させた反転実行パターンに関するシミュレーションが実行されていない。そこで、設定部１８３８−１は、シミュレーション１９０３の実行状態のうち、ＣＤＣジッタＪ４を出力する素子の出力を、検出部１８３７−１による検出時の論理値と異なる論理値に設定する。そして、実行部１８３１−１が、設定部１８３８−１による設定後の実行状態に基づいてシミュレーション１９０３を実行する。これにより、つづきのシミュレーション１９０３では、実行パターンＰ４＝（Ｊ１，Ｊ２，Ｊ３，Ｊ４，Ｊ５）＝（１，０，０，１，０）となる。
【０１１８】
また、図１９では、子プロセス１８３０−２が、実行パターンＰ２＝（Ｊ１，Ｊ２，Ｊ３，Ｊ４，Ｊ５）＝（１，１，０，０，０）と実行パターンＰ５＝（Ｊ１，Ｊ２，Ｊ３，Ｊ４，Ｊ５）＝（１，０，０，０，１）に関するシミュレーション１９０４を実行する。
【０１１９】
また、図１９の例では、子プロセス１８３０−３が、実行パターンＰ３に関してシミュレーション１９０５を実行する。たとえば、判断部１８３５−３が、受信部１８３４−３により受信された判断結果が、送信部１８３３−３により送信された組み合わせが、基本実行パターンでない他の実行パターンの組み合わせと同一であることを示すか否かを判断する。判断部１８３５−３により判断結果が、組み合わせが基本実行パターンでない他の実行パターンの組み合わせと同一であることを示すと判断された場合、制御部１８３６−３は実行部１８３１−３を制御して、シミュレーション１９０５を終了する。
【０１２０】
基本実行パターンでなく他の実行パターンに関する実行済のシミュレーションと実行中のシミュレーションとが同一のシミュレーション時刻で同一状態となれば、以降のシミュレーションも同一となる。そのため、以降のシミュレーションで発生するＣＤＣジッタも実行済のシミュレーションで検出されている可能性が高いため、実行中のシミュレーションを終了させる。これにより、シミュレーション時間を短縮させることができる。
【０１２１】
（実施の形態２にかかる検証支援装置７００が行う処理手順）
図２０および図２１は、実施の形態２にかかる検証支援装置７００の親プロセス１８００が行う処理手順を示すフローチャートである。まず、親プロセス１８００が、シミュレーションの実行を開始し（ステップＳ２００１）、シミュレーションが終了したか否かを判断する（ステップＳ２００２）。親プロセス１８００が、シミュレーションが終了していないと判断した場合（ステップＳ２００２：Ｎｏ）、シミュレーションを１ステップ実行する（ステップＳ２００３）。
【０１２２】
そして、親プロセス１８００が、ハッシュ値を算出し（ステップＳ２００４）、シミュレーション時刻とハッシュ値の組み合わせに基本実行パターンを関連付けて出力する（ステップＳ２００５）。親プロセス１８００が、ＣＤＣジッタの発生を検出したか否かを判断する（ステップＳ２００６）。親プロセス１８００が、ＣＤＣジッタの発生を検出していないと判断した場合（ステップＳ２００６：Ｎｏ）、ステップＳ２００２へ戻る。
【０１２３】
つぎに、親プロセス１８００が、ＣＤＣジッタの発生を検出したと判断した場合（ステップＳ２００６：Ｙｅｓ）、基本実行パターンを実行済か否かを判断する（ステップＳ２００７）。親プロセス１８００が、基本実行パターンを実行済でないと判断した場合（ステップＳ２００７：Ｎｏ）、シミュレーションの実行状態を複製する（ステップＳ２００８）。そして、親プロセス１８００が、複製したシミュレーションの実行状態を子プロセス１８２０の実行状態に指定して子プロセス１８２０を起動する（ステップＳ２００９）。
【０１２４】
つぎに、親プロセス１８００が、基本実行パターンを実行する子プロセス１８２０が終了したか否かを判断する（ステップＳ２０１０）。つぎに、親プロセス１８００が、基本実行パターンを実行する子プロセス１８２０が終了していないと判断した場合（ステップＳ２０１０：Ｎｏ）、子プロセス１８２０から、シミュレーション時刻とハッシュ値の組み合わせを受信する（ステップＳ２０１１）。そして、親プロセス１８００が、シミュレーション時刻とハッシュ値の組み合わせを基本実行パターンに関連付けて出力し（ステップＳ２０１２）、ステップＳ２０１０へ戻る。
【０１２５】
また、ステップＳ２００７において、親プロセス１８００が、基本実行パターンを実行済であると判断した場合（ステップＳ２００７：Ｙｅｓ）、ステップＳ２０１３へ移行する。ステップＳ２０１０において、親プロセス１８００が、基本実行パターンを実行する子プロセス１８２０が終了したと判断した場合（ステップＳ２０１０：Ｙｅｓ）、ステップＳ２０１３へ移行する。
【０１２６】
そして、親プロセス１８００が、検出したＣＤＣジッタに関する反転パターンを実行済か否かを判断する（ステップＳ２０１３）。そして、親プロセス１８００が、検出したＣＤＣジッタに関する反転パターンを実行済でないと判断した場合（ステップＳ２０１３：Ｎｏ）、シミュレーションの実行状態を複製する（ステップＳ２０１４）。
【０１２７】
つぎに、親プロセス１８００が、複製した実行状態のうちのＣＤＣジッタを出力する素子の出力を、検出時の出力値と異なる論理値に設定する（ステップＳ２０１５）。そして、親プロセス１８００が、複製したシミュレーションの実行状態を子プロセス１８３０−ｊの実行状態に指定して子プロセス１８３０−ｊを起動する（ステップＳ２０１６）。
【０１２８】
つぎに、親プロセス１８００が、子プロセス１８３０−ｊが終了したか否かを判断する（ステップＳ２０１７）。そして、親プロセス１８００が、子プロセス１８３０−ｊが終了していないと判断した場合（ステップＳ２０１７：Ｎｏ）、子プロセス１８３０−ｊから、シミュレーション時刻とハッシュ値の組み合わせを受信する（ステップＳ２０１８）。つぎに、親プロセス１８００が、受信した組み合わせが基本実行パターンに関するシミュレーション時刻とハッシュ値の組み合わせと一致したか否かを判断する（ステップＳ２０１９）。
【０１２９】
つぎに、親プロセス１８００が、基本実行パターンに関するシミュレーション時刻とハッシュ値の組み合わせと一致していないと判断した場合（ステップＳ２０１９：Ｎｏ）、ステップＳ２０２０へ移行する。親プロセス１８００が、他の実行パターンに関するシミュレーション時刻とハッシュ値の組み合わせと一致したか否かを判断する（ステップＳ２０２０）。親プロセス１８００が、他の実行パターンに関するシミュレーション時刻とハッシュ値の組み合わせと一致していないと判断した場合（ステップＳ２０２０：Ｎｏ）、受信したシミュレーション時刻とハッシュ値の組み合わせに実行パターンを関連付けて出力する（ステップＳ２０２１）。そして、親プロセス１８００が、いずれにも一致しない旨を子プロセス１８３０−ｊに送信し（ステップＳ２０２２）、ステップＳ２０１７へ移行する。
【０１３０】
ステップＳ２０１９において、親プロセス１８００が、受信した組み合わせが基本実行パターンに関するシミュレーション時刻とハッシュ値の組み合わせと一致したと判断した場合（ステップＳ２０１９：Ｙｅｓ）、ステップＳ２０２３へ移行する。そして、親プロセス１８００が、基本実行パターンと一致した旨を子プロセスに送信し（ステップＳ２０２３）、ステップＳ２０１７へ戻る。ステップＳ２０２０において、親プロセス１８００が、受信した組み合わせが他の実行パターンに関するシミュレーション時刻とハッシュ値の組み合わせと一致したと判断した場合（ステップＳ２０２０：Ｙｅｓ）、他の実行パターンと一致した旨を子プロセス１８３０−ｊに送信し（ステップＳ２０２４）、ステップＳ２０１７へ戻る。
【０１３１】
また、ステップＳ２０１３において、親プロセス１８００が、検出したＣＤＣジッタに関する反転パターンを実行済であると判断した場合（ステップＳ２０１３：Ｙｅｓ）、ステップＳ２００２へ戻る。
【０１３２】
また、ステップＳ２０１７において、親プロセス１８００が、子プロセス１８３０−ｊが終了したと判断した場合（ステップＳ２０１７：Ｙｅｓ）、ステップＳ２００２へ戻る。ステップＳ２００２において、親プロセス１８００が、シミュレーションが終了したと判断した場合（ステップＳ２００２：Ｙｅｓ）、一連の処理を終了する。
【０１３３】
図２２は、実施の形態２にかかる検証支援装置７００の基本実行パターンを実行する子プロセス１８２０が行う処理手順を示すフローチャートである。基本実行パターンを実行する子プロセス１８２０が、設定後の実行状態に基づいてシミュレーションの実行を開始し（ステップＳ２２０１）、シミュレーションが終了したか否かを判断する（ステップＳ２２０２）。
【０１３４】
子プロセス１８２０が、シミュレーションが終了していないと判断した場合（ステップＳ２２０２：Ｎｏ）、次のサンプリング時刻までのシミュレーションを実行する（ステップＳ２２０３）。子プロセス１８２０が、ハッシュ値を算出し（ステップＳ２２０４）、シミュレーション時刻と、ハッシュ値の組み合わせを親プロセス１８００に送信し（ステップＳ２２０５）、ステップＳ２２０２へ戻る。
【０１３５】
ステップＳ２２０２において、子プロセス１８２０が、シミュレーションが終了したと判断した場合（ステップＳ２２０２：Ｙｅｓ）、一連の処理を終了する。
【０１３６】
図２３および図２４は、実施の形態２にかかる検証支援装置７００の反転パターンを実行する子プロセス１８３０−ｊが行う処理手順を示すフローチャートである。まず、子プロセス１８３０−ｊが、設定後の実行状態に基づいてシミュレーションの実行を開始する（ステップＳ２３０１）。そして、子プロセス１８３０−ｊが、シミュレーションが終了したか否かを判断する（ステップＳ２３０２）。
【０１３７】
子プロセス１８３０−ｊが、シミュレーションが終了していないと判断した場合（ステップＳ２３０２：Ｎｏ）、次のサンプリング時刻までのシミュレーションを実行する（ステップＳ２３０３）。子プロセス１８３０−ｊが、ハッシュ値を算出し（ステップＳ２３０４）、シミュレーション時刻とハッシュ値の組み合わせを親プロセスに送信する（ステップＳ２３０５）。
【０１３８】
子プロセス１８３０−ｊが、判断結果を受信し（ステップＳ２３０６）、基本実行パターンに関するシミュレーション時刻とハッシュ値の組み合わせと一致したか否かを判断する（ステップＳ２３０７）。子プロセス１８３０−ｊが、基本実行パターンに関するシミュレーション時刻とハッシュ値の組み合わせと一致していないと判断した場合（ステップＳ２３０７：Ｎｏ）、ステップＳ２３０８へ移行する。子プロセス１８３０−ｊが、他の実行パターンに関するシミュレーション時刻とハッシュ値の組み合わせと一致したか否かを判断する（ステップＳ２３０８）。
【０１３９】
子プロセス１８３０−ｊが、他の実行パターンに関するシミュレーション時刻とハッシュ値の組み合わせと一致していないと判断した場合（ステップＳ２３０８：Ｎｏ）、ステップＳ２３０２に戻る。子プロセス１８３０−ｊが、他の実行パターンに関するシミュレーション時刻とハッシュ値の組み合わせと一致したと判断した場合（ステップＳ２３０８：Ｙｅｓ）、一連の処理を終了する。
【０１４０】
子プロセス１８３０−ｊが、他の実行パターンに関するシミュレーション時刻とハッシュ値の組み合わせと一致したと判断した場合（ステップＳ２３０７：Ｙｅｓ）、タイムアウト時刻を設定する（ステップＳ２３０９）。子プロセス１８３０−ｊが、シミュレーションが終了したか、またはタイムアウトであるか否かを判断する（ステップＳ２３１０）。
【０１４１】
子プロセス１８３０−ｊが、シミュレーションが終了していない、およびタイムアウトでないと判断した場合（ステップＳ２３１０：Ｎｏ）、シミュレーションを１ステップ実行する（ステップＳ２３１１）。そして、子プロセス１８３０−ｊが、ＣＤＣジッタの発生を検出したか否かを判断する（ステップＳ２３１２）。
【０１４２】
そして、子プロセス１８３０−ｊが、ＣＤＣジッタの発生を検出していないと判断した場合（ステップＳ２３１２：Ｎｏ）、ステップＳ２３１０へ戻る。そして、子プロセス１８３０−ｊが、ＣＤＣジッタの発生を検出したと判断した場合（ステップＳ２３１２：Ｙｅｓ）、検出したＣＤＣジッタに関する反転パターンを実行済か否かを判断する（ステップＳ２３１３）。つぎに、子プロセス１８３０−ｊが、検出したＣＤＣジッタに関する反転パターンを実行済であると判断した場合（ステップＳ２３１３：Ｙｅｓ）、ステップＳ２３１０へ戻る。
【０１４３】
つぎに、子プロセス１８３０−ｊが、検出したＣＤＣジッタに関する反転パターンを実行済でないと判断した場合（ステップＳ２３１３：Ｎｏ）、実行状態のうちのＣＤＣジッタを出力する素子の出力を検出時の出力値と異なる論理値に設定する（ステップＳ２３１４）。そして、子プロセス１８３０−ｊが、設定後の実行状態でシミュレーションを実行し（ステップＳ２３１５）、ステップＳ２３０２へ戻る。
【０１４４】
また、ステップＳ２３０２において、子プロセス１８３０−ｊが、シミュレーションが終了したと判断した場合（ステップＳ２３０２：Ｙｅｓ）、一連の処理を終了する。また、子プロセス１８３０−ｊが、シミュレーションが終了した、またはタイムアウトであると判断した場合（ステップＳ２３１０：Ｙｅｓ）、一連の処理を終了する。
【０１４５】
実施の形態２によれば、基本実行パターンに関するシミュレーションの状態と現在実行中のシミュレーションの状態と、が同一シミュレーション時刻で一致したとしても、実行を継続して、他の実行パターンに関するシミュレーションとして再利用する。これにより、シミュレーションの起動に関する時間を短縮することができ、シミュレーション時間を短縮することができる。
【０１４６】
図２５は、シミュレーションに要した時間の一例を示す説明図である。図２５では、ある検証対象回路の回路情報にある入力パターンを与えた場合における、図６に示すような基準実行パターンから各ＣＤＣジッタの論理値を順に変更させたすべてのシミュレーション結果を得るのに要した時間を示している。図２５の例では、ＣＤＣジッタの発生回数が、３７６１９９の場合に、従来の逐次処理でシミュレーションされた場合、シミュレーションに７００時間要し、実施の形態１の検証支援処理でシミュレーションされた場合、シミュレーションに８時間要する。そして、実施の形態２の検証支援処理でシミュレーションされた場合、シミュレーションに７分要する。検証対象回路や入力パターンにもよるが、実施の形態１や実施の形態２によるシミュレーション時間を短縮することができる。
【０１４７】
以上説明した実施の形態１によれば、検証支援装置が、第１のシミュレーションを実行中にＣＤＣジッタを検出し、検出時のＣＤＣジッタの論理値と異なる論理値での第２のシミュレーションを、第１のシミュレーションと排他的に実行する。これにより、ＣＤＣジッタの発生までの第１，２のシミュレーションで重複するシミュレーションを省け、シミュレーション時間の短縮化を図ることができる。また、シミュレーションモデルに検証支援装置の機能を加えればよく、汎用の論理シミュレータを用いてシミュレーションを行うことができる。
【０１４８】
また、検証支援装置が、第２のシミュレーションの実行終了後の第１のシミュレーションの実行中にあらたにＣＤＣジッタを検出した場合、検出時のＣＤＣジッタの論理値と異なる論理値での第３のシミュレーションを、第１のシミュレーションと排他的に実行する。そして、検証支援装置が、第３のシミュレーションの実行中に、所定の素子の状態が、第２のシミュレーションと第３のシミュレーションの同一シミュレーション時刻で一致する場合には、第３のシミュレーションを終了させる。これにより、第２のシミュレーションと第３のシミュレーションで重複する実行を省略することができ、シミュレーション時間の短縮化を図ることができる。
【０１４９】
以上説明した実施の形態２によれば、検証支援装置が、所定の素子の状態が、実行済の第１のシミュレーションと実行中の第２のシミュレーションとで、同一時刻で同一となっても、第２のシミュレーションを止めずに、他の実行パターンに再利用する。これにより、実行状態の複製にかかる時間と論理値の設定にかかる時間とのシミュレーションの起動にかかる時間を省略することで、シミュレーション時間を短縮することができる。また、シミュレーションモデルに検証支援装置の機能を加えればよく、汎用の論理シミュレータを用いてシミュレーションを行うことができる。
【０１５０】
また、所定時間以上たっても、あらたなＣＤＣジッタが検出されない場合には、第２のシミュレーションを終了させることで、第１のシミュレーションの続きを実行でき、シミュレーション時間を短縮することができる。
【０１５１】
なお、本実施の形態で説明した検証支援方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本検証支援プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本検証支援プログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０１５２】
７００  検証支援装置
１３０１，１３２１−ｉ，１８０１，１８３１−ｊ  実行部
１３０２，１８０２，１８３７−ｊ  検出部
１３１１，１８１１  複製部
１３１２，１３１２，１８３８−ｊ  設定部
１３０７，１８０７，１８３６−ｊ  制御部
【図１】
0005733109.tif 000002
【図２】
0005733109.tif 000003
【図３】
0005733109.tif 000004
【図４】
0005733109.tif 000005
【図５】
0005733109.tif 000006
【図６】
0005733109.tif 000007
【図７】
0005733109.tif 000008
【図８】
0005733109.tif 000009
【図９】
0005733109.tif 000010
【図１０】
0005733109.tif 000011
【図１１】
0005733109.tif 000012
【図１２】
0005733109.tif 000013
【図１３】
0005733109.tif 000014
【図１４】
0005733109.tif 000015
【図１５】
0005733109.tif 000016
【図１６】
0005733109.tif 000017
【図１７】
0005733109.tif 000018
【図１８】
0005733109.tif 000019
【図１９】
0005733109.tif 000020
【図２０】
0005733109.tif 000021
【図２１】
0005733109.tif 000022
【図２２】
0005733109.tif 000023
【図２３】
0005733109.tif 000024
【図２４】
0005733109.tif 000025
【図２５】
0005733109.tif 000026