(57)【要約】【課題】メタステーブル状態における非同期回路の機能検証回数を減らし、非同期回路の機能検証時間を短縮する。【解決手段】本発明による回路検証装置１０は、送信側の順序回路ＦＦ１に入力される第１クロック信号ＣＬＫ１に同期して入力データＤｉの変化を検出する入力データ検出部２５２と、入力データＤｉの変化に応じて、第１クロック信号ＣＬＫ１の一周期より長い期間、メタステーブル状態を示す情報Ｄｍを受信側の順序回路ＦＦ２に出力させる処理を行う論理回路演算部２５１と、入力データＤｉの変化に応じて、変化後の入力データを記録する記憶装置１３とを具備する。【選択図】図６Ａ
2009093635.tif 000002
【特許請求の範囲】
【請求項１】
第１クロック信号に同期して、入力データに基づく第１データを出力する第１順序回路と、前記第１クロック信号より長い周期の第２クロック信号に同期して、前記第１データに基づく第２データを出力する第２順序回路とを備える論理回路の動作を、コンピュータが検証する回路検証方法であって、
（Ａ）前記第１クロック信号に同期して前記入力データの変化を検出するステップと、
（Ｂ）前記入力データの変化に応じて、前記第１クロック信号の一周期より長い期間、メタステーブル状態を示す情報を前記第１データとして出力させる処理を行うステップと、
（Ｃ）前記入力データの変化に応じて、変化後の入力データを記憶装置に記録するステップと、
（Ｄ）前記メタステーブル状態を示す情報の出力停止後、前記記憶装置に記録された入力データを前記第１データとして出力させる処理を行うステップと、
を具備する回路検証方法。
【請求項２】
請求項１に記載の回路検証方法において、
（Ｅ）前記メタステーブル状態を示す情報を出力中に、前記入力データの変化を検出した場合、前記期間の終了を待たずに前記メタステーブル状態を示す情報の出力を停止させる処理を行うステップと
を更に具備する回路検証方法。
【請求項３】
請求項１又は２に記載の回路検証方法において、
前記（Ｂ）ステップは、
（ｂ１）前記第２クロック信号の周期より短い時間を、前記期間として前記記憶装置に設定するステップと、
（ｂ２）前記期間が経過すると前記メタステーブル状態を示す情報の出力を停止させる処理を行うステップと、
を備える回路検証方法。
【請求項４】
請求項３に記載の回路検証方法において、
前記（ｂ１）ステップは、
前記入力データの変化に応じて、前記第１順序回路をメタステーブル状態として前記記憶装置に設定するとともに、前記メタステーブル状態の終了時刻を前記記憶装置に設定するステップと、前記メタステーブル状態として設定されている間、前記メタステーブル状態を示す情報を前記第１データとして出力させる処理を行うステップと、
を備え、
前記（ｂ２）ステップは、前記メタステーブル状態の終了時刻に到達すると、前記メタステーブル状態の設定を解除するステップとを備える回路検証方法。
【請求項５】
請求項４に記載の回路検証方法において、
前記（Ｅ）ステップは、前記メタステーブル状態に設定されている間に、前記入力データの変化を検出した場合、前記メタステーブル状態の設定を解除するステップを更に備える回路検証方法。
【請求項６】
請求項１から５いずれか１項に記載の回路検証方法において、
定期的に前記第２データを前記記憶装置に記憶するステップを更に具備する回路検証方法。
【請求項７】
請求項１から６いずれか１項に記載の回路検証方法をコンピュータに実行させるための回路検証プログラム。
【請求項８】
第１クロック信号に同期して、入力データに基づく第１データを出力する第１順序回路と、前記第１クロック信号より長い周期の第２クロック信号に同期して、前記第１データに基づく第２データを出力する第２順序回路とを備える論理回路の動作を検証する回路検証装置であって、
前記第１クロック信号に同期して前記入力データの変化を検出する入力データ検出部と、
前記入力データの変化に応じて、前記第１クロック信号の一周期より長い期間、メタステーブル状態を示す情報を前記第１データとして出力させる処理を行う論理回路演算部と、
前記入力データの変化に応じて、変化後の入力データを記録する記憶装置と、を具備し、
前記論理回路演算部は、前記メタステーブル状態を示す情報の出力停止後、前記記憶装置に記録された入力データを前記第１データとして出力させる処理を行う回路検証装置。
【請求項９】
請求項８に記載の回路検証装置において、
前記論理回路演算部は、前記メタステーブル状態を示す情報を出力中に、前記入力データの変化を検出した場合、前記メタステーブル状態を示す情報の出力を停止する処理を行う回路検証装置。
【請求項１０】
請求項８又は９に記載の回路検証装置において、
前記論理回路演算部は、
前記第２クロック信号の周期より短い期間を、前記期間として前記記憶装置に設定し、前記期間が経過すると前記メタステーブル状態を示す情報の出力を停止する処理を行う回路検証装置。
【請求項１１】
請求項１０に記載の回路検証装置において、
前記論理回路演算部は、前記入力データの変化に応じて、前記メタステーブル状態として前記記憶装置に設定するとともに、前記メタステーブル状態の終了時刻を前記記憶装置に設定し、前記メタステーブル状態として設定されている間、前記メタステーブル状態を示す情報を前記第１データとして出力させる処理を行い、前記メタステーブル状態の終了時刻に到達すると、前記メタステーブル状態の設定を解除する回路検証装置。
【請求項１２】
請求項１１に記載の回路検証装置において、
前記論理回路演算部は、前記メタステーブル状態に設定されている間に、前記入力データの変化を検出した場合、前記メタステーブル状態の設定を解除する回路検証装置。
【請求項１３】
請求項８から１２いずれか１項に記載の回路検証装置において、
前記検出部は、定期的に前記第２データを前記記憶装置に記憶する回路検証装置。
【請求項１４】
請求項１又は２に記載の回路検証方法において、
（Ｆ）前記入力データの変化を検出した時刻における前記論理回路の動作を示すシミュレーションの状態を前記記憶装置に保存するステップを更に具備する回路検証方法。
【請求項１５】
請求項１４に記載の回路検証方法において、
（Ｇ）前記記憶装置に保存されたシミュレーションの状態を復元する判定時刻を前記記憶装置に設定するステップと、
前記復元判定時刻に到達すると前記保存されたシミュレーション状態を復元し、前記メタステーブル状態を示す情報の出力を停止するステップと、を更に具備する回路検証方法。
【請求項１６】
請求項１５に記載の回路検証方法において、
前記（Ｇ）ステップは、前記入力データの変化を検出した時刻から前記復元判定時刻までの期間が、前記第２クロック信号の周期より長くなるように、前記復元判定時刻を設定するステップを備える回路検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、回路検証方法、回路検証プログラム、及び回路検証装置に関し、特に非同期式順序回路を含む半導体集積回路の動作を検証する回路検証方法、回路検証プログラム、及び回路検証装置に関する。
【背景技術】
【０００２】
非同期式順序回路における順序回路間でデータ伝送が行われる場合、受信側の順序回路からの出力の発振状態が後段に接続された順序回路や組み合せ回路に伝搬することがある。この場合、受信側の順序回路から出力されるデータの論理は定まらなくなる。このような状態は、メタステーブル状態と呼ばれ、非同期式順序回路を備える論理回路の異常動作の原因となっている。このため、論理回路設計では、ＨＤＬ（Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）レベルにおける機能シミュレーションにおいて、メタステーブルを考慮した動作検証が行われている。
【０００３】
このような機能シミュレーションは、複数の順序回路のそれぞれに入力されるクロック信号の周期や位相を変更した様々な条件下で実施される。通常、受信側順序回路で発生するメタステーブル状態を送信側の順序回路で発生することで、メタステーブルを考慮した機能シミュレーションが行われる。これにより、検証対象となる論理回路の不正な動作の発生確率を高め、実際の回路と同等な動作を再現し、異常動作を検出することができる。
【０００４】
図１、図２Ａ、及び図５を参照して、非同期順序回路の動作を検証するシミュレーションの詳細を説明する。以下では、図５に示す非同期順序回路に対する機能検証を一例に従来技術による検証動作を説明する。
【０００５】
受信側の順序回路ＦＦ２は、入力されるクロック信号ＣＬＫ２のアクティブエッジ（例えば立ち上がりエッジ）において、送信側の順序回路ＦＦ１からの出力信号Ｑ１（イネーブル信号ＥＮ１）をラッチする。イネーブル信号ＥＮ１が正常な信号である場合、すなわち送信側の順序回路ＦＦ１に入力されるイネーブル信号ＥＮ１のパルス幅が、クロック信号ＣＬＫ２の一周期より長い場合、受信側の順序回路ＦＦ２は、出力信号Ｑ１（イネーブル信号ＥＮ１）をラッチする。このとき、順序回路ＦＦ２はイネーブル信号ＥＮ２を出力し、非同期順序回路は正常であると判定される。
【０００６】
一方、イネーブル信号ＥＮ１のパルス幅が、順序回路ＦＦ２に入力されるクロック信号ＣＬＫ２の一周期より短い場合、すなわち不正なイネーブル信号ＥＮ１が入力されると、順序回路ＦＦ２は、イネーブル信号ＥＮ１をラッチして次段の組み合せ回路ＣＣ２に伝搬することができない。
【０００７】
図１（ａ）を参照して、イネーブル信号ＥＮ１が不正な値である場合、クロックＣＬ２の立ち上がりエッジ時（時刻Ｔ２、Ｔ８、…）におけるイネーブル信号ＥＮ１（順序回路ＦＦ１の出力信号Ｑ１）の信号レベルは、常に“０”となる。この場合、順序回路ＦＦ２から出力されるイネーブル信号ＥＮ２は常に“０”となる。このように、設計対象の非同期順序回路は、不正なイネーブル信号ＥＮ１が次段の組み合せ回路に伝達しないため、正常な回路として検出される。
【０００８】
しかし、不正なイネーブル信号ＥＮ１が入力した場合でも、クロック信号ＣＬＫ１やクロック信号ＣＬＫ２のそれぞれの周期や位相差によって、受信側の順序回路ＦＦ２がイネーブル信号ＥＮ１をラッチする場合がある。例えば図１（ｂ）に示すように、出力信号Ｑ１の信号レベルが“１”のとき、クロック信号ＣＬＫ２がアクティブな状態になる場合（時刻Ｔ８）、検証対象の非同期順序回路は、不正なイネーブル信号ＥＮ１をイネーブル信号ＥＮ２として次段の組み合せ回路に伝搬してしまう。この場合、非同期順序回路は、不正な回路であるにもかかわらず、正常な回路と判定されてしまう。通常、このような検証不良を回避するため、クロック信号ＣＬＫ１とクロック信号ＣＬＫ２との位相差やそれぞれのクロック周期を変更させた多くの条件下で検証が行われる。そして、これらの検証結果が統計的に処理されることで検証不良の発生は抑制される。しかし、クロック信号ＣＬＫ１とクロック信号ＣＬＫ２との周期の長さの差が大きい場合、不正なイネーブル信号ＥＮ１が順序回路ＦＦ２にラッチされ得る期間（図１（ｂ）時刻Ｔ３〜Ｔ９）は長くなってしまう。この場合、検証不良となる確率は高くなり、不良であるはずの回路が正常と判定されることも少なくない。
【０００９】
上述のような検証不良が発生する確率を少なくする技術が、特開２００１−２２９２１１号公報に記載されている（特許文献１参照）。特許文献１に記載の検証方法では、非同期の論理回路の動作を検証する際、論理回路のクロック信号がアクティブな状態であり、且つ論理回路への入力データが、事前に保持された値と異なるか否かによって、出力データがメタステーブル状態かどうかを定義している。特許文献１に記載の方法では、メタステーブル状態と定義されている所定の期間、メタステーブル状態を示す所定の値が、論理回路から出力される。
【００１０】
図２Ａは、特許文献１に記載の検証方法においてシミュレーションされた非同期順序回路の動作を示すタイミングチャートである。図２Ａ及び図５を参照して、送信側の順序回路ＦＦ１は、アクティブエッジ（例えば立ち上がりエッジ）においてイネーブル信号ＥＮ１の信号レベルの変化を検出すると（時刻Ｔ３）、クロック信号ＣＬＫ１の一周期の間（時刻Ｔ３から時刻Ｔ５までの間）メタステーブル状態を示す所定の値（“１”又は“０”）を出力信号Ｑ１として出力する。この際、順序回路ＦＦ１のアクティブエッジの時刻Ｔ３から、クロックＣＬ２のアクティブエッジまでの時間ＴａがクロックＣＬＫ１の一周期よりも短時間である場合、順序回路ＦＦ２は、メタステーブル状態を示す値をラッチする。例えば図２Ａに示すように、時刻Ｔ３から時刻Ｔ５の間の時刻Ｔ４においてクロックＣＬＫ２のアクティブエッジがあるため、受信側の順序回路ＦＦ２は、時刻Ｔ４から時刻Ｔ１０の間（クロック信号ＣＬＫ２の一周期の間）メタステーブル状態を示す値をイネーブル信号ＥＮ２として出力する。
【００１１】
メタステーブル状態が順序回路ＦＦ２に伝搬（ラッチ）されると、検証装置は検証対象回路を不正な回路として判定することができる。このように、特許文献１に記載の方法によれば、不正なイネーブル信号ＥＮ１の入力があった場合、クロック信号ＣＬＫ１の一周期の間メタステーブル状態を示す値を出力することで、受信側の順序回路ＦＦ２が不正なイネーブルＥＮ１を伝搬（ラッチ）する確率を減少させることができる。本例の場合、特許文献１の方法によれば、不正なイネーブル信号ＥＮ１が入力される期間（時刻Ｔ３〜Ｔ９）のうち、時刻Ｔ３〜Ｔ５の間にクロックＣＬＫ２がアクティブになっても、メタステーブル状態を示す値を伝搬（ラッチ）することができる。これにより、受信側順序回路ＦＦ２以降に接続された順序回路や組み合せ回路におけるメタステーブル状態での非同期検証が可能となる。
【特許文献１】特開２００１−２２９２１１号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
特許文献１に記載の検証方法において、非同期回路がメタステーブル状態であると定義付けられる時間は、送信側の順序回路ＦＦ１に入力されるクロック信号ＣＬＫ１によって決められている。特許文献１では、クロック信号ＣＬＫ１のアクティブエッジ（例えば、立ち上がりエッジ）に応じてメタステーブル状態と通常状態との切換が行われる。このため、メタステーブル状態を示す情報の出力時間は、送信側の順序回路へのクロック信号の一周期より短い期間となる。
【００１３】
例えば、クロック信号ＣＬＫ２の周期が、クロック信号ＣＬＫ１の周期に近い場合、クロック信号ＣＬＫ１のアクティブエッジから、クロック信号ＣＬＫ２のアクティブエッジまでの時間Ｔａは、クロック信号ＣＬＫ１の一周期より短くなる確率が高まる。すなわち、不正なイネーブル信号ＥＮ１が順序回路ＦＦ２にラッチされ得る期間内に、クロック信号ＣＬＫ２がアクティブとなる確率は低くなり、上述のような検証不良は起こりにくくなる。
【００１４】
しかし、クロック信号ＣＬＫ２の周期がクロック信号ＣＬＫ１の周期より長く、その差が大きい場合、図２Ｂに示すように時間Ｔａがクロック信号ＣＬＫ１の一周期より長くなる可能性は増大する。このような場合、不正なイネーブル信号ＥＮ１が順序回路ＦＦ２にラッチされ、イネーブル信号ＥＮ２として伝搬する確率が高まってしまう。このため、特許文献１に記載の方法では、クロック信号ＣＬＫ２の周期がクロック信号ＣＬＫ１の周期より長く、その差が大きい場合、クロック信号ＣＬＫ２の位相を変更しても、受信側順序回路ＦＦ２の後段に接続された回路においてメタステーブル状態での非同期検証ができない場合がある。
【００１５】
従って、特許文献１の方法においても、非同期論理回路に対する機能シミュレーションを、クロック信号ＣＬＫ１、ＣＬＫ２の位相や周期を変更した多くの条件下で実行しなければならない。このため、機能シミュレーションに必要な非同期回路の記述が煩雑になり、機能シミュレーション時間が長大化してしまう。
【課題を解決するための手段】
【００１６】
以下に、［発明を実施するための最良の形態］で使用される番号・符号を括弧付きで用いて、［課題を解決するための手段］を説明する。この番号・符号は、［特許請求の範囲］の記載と［発明を実施するための最良の形態］の記載との対応関係を明らかにするために付加されたものであるが、［特許請求の範囲］に記載されている発明の技術的範囲の解釈に用いてはならない。
【００１７】
本発明による回路検証方法は、第１クロック信号（ＣＬＫ１）に同期して、入力データ（Ｄｉｎ）に基づく第１データ（Ｑ１）を出力する第１順序回路（ＦＦ１）と、第１クロック信号（ＣＬＫ１）より長い周期の第２クロック信号（ＣＬＫ２）に同期して、第１データ（Ｑ１）に基づく第２データ（Ｑ２）を出力する第２順序回路（ＦＦ２）とを備える論理回路の動作を、コンピュータが検証する回路検証方法である。本発明による回路検証方法は、（Ａ）第１クロック信号（ＣＬＫ１）に同期して入力データ（Ｄｉｎ）の変化を検出するステップと、（Ｂ）入力データ（Ｄｉｎ）の変化に応じて、第１クロック信号（ＣＬＫ１）の一周期より長い期間、メタステーブル状態を示す情報（Ｄｍ）を第１データ（Ｑ１）として出力させる処理を行うステップと、（Ｃ）入力データ（Ｄｉｎ）の変化に応じて、変化後の入力データ（Ｄｉｎ）を記憶装置（１３）に記録するステップと、（Ｄ）メタステーブル状態を示す情報（Ｄｍ）の出力停止後、記憶装置（１３）に記録された入力データ（Ｄｉｎ）を第１データ（Ｑ１）として出力させる処理を行うステップとを具備する。
【００１８】
本発明による回路検証方法は、（Ｅ）メタステーブル状態を示す情報（Ｄｍ）を出力中に、入力データ（Ｄｉｎ）の変化を検出した場合、前記期間の終了を待たずにメタステーブル状態を示す情報（Ｄｍ）の出力を停止させる処理を行うステップを更に具備することが好ましい。
【００１９】
又、本発明による回路検証方法において、（Ｂ）ステップは、（ｂ１）第２クロック信号（ＣＬＫ２）の周期より短い時間を、第１順序回路（ＦＦ１）からメタステーブル状態を示す情報（Ｄｍ）を出力させる期間として記憶装置（１３）に設定するステップと、（ｂ２）該期間を経過するとメタステーブル状態を示す情報（Ｄｍ）の出力を停止させる処理を行うステップとを備えることが好ましい。
【００２０】
（ｂ１）ステップは、入力データ（Ｄｉｎ）の変化に応じて、第１順序回路（ＦＦ１）をメタステーブル状態として記憶装置（１３）に設定するとともに、メタステーブル状態の終了時刻（Ｔｅ）を記憶装置（１３）に設定するステップと、メタステーブル状態として設定されている間、メタステーブル状態を示す情報（Ｄｍ）を第１データ（Ｑ１）として出力させる処理を行うステップとを備えることが好ましい。この際、（ｂ２）ステップは、メタステーブル状態の終了時刻（Ｔｅ）に到達すると、メタステーブル状態の設定を解除するステップを備えることが好ましい。又、上述の回路検証方法は、コンピュータ（回路検証装置（１０））によって実行される回路検証プログラム（２５）によって実現されることが好ましい。
【発明の効果】
【００２１】
本発明による回路検証方法、回路検証プログラム、及び回路検証装置によれば、メタステーブル状態における非同期回路の機能検証回数を減らし、非同期回路の機能検証時間を短縮することができる。
【００２２】
又、実際の非同期回路に近い動作をコンピュータによってシミュレーションすることができる。
【発明を実施するための最良の形態】
【００２３】
以下、添付図面を参照して、本発明による回路検証装置１０の実施の形態を説明する。
本実施の形態では、図５に示す非同期回路に対し、言語レベルによる機能シミュレーションを実行する回路検証装置１０について説明する。
【００２４】
（構成）
図３及び図４を参照して、本発明による回路検証装置１０の構成を説明する。図３は、回路検証装置１０の構成図である。図３を参照して、本発明による回路検証装置１０は、バス１６を介して相互に接続されるＣＰＵ１１と、ＲＡＭ１２と、記憶装置１３と、入力装置１４と、出力装置１５とを具備する。記憶装置１３はハードディスクやメモリ等の記憶装置である。又、入力装置１４は、キーボードやマウス等のユーザによって操作されることで、各種データをＣＰＵ１１や記憶装置１３に出力する。出力装置１５は、モニタやプリンタに例示され、ＣＰＵ１１から出力される回路解析の結果をユーザが視認できる形式で出力する。
【００２５】
ＣＰＵ１１は、入力装置１４からの入力に応答して、記憶装置１３内の回路検証プログラム２５を実行し、回路検証処理を行う。この際、記憶装置１３からの各種データやプログラムはＲＡＭ１２に一時格納され、ＣＰＵ１１は、ＲＡＭ１２内のデータを用いて各種処理を実行する。
【００２６】
記憶装置１３は、検証対象回路２１、クロック条件２２、入力データ記憶部２３、出力履歴データベース（Ｄ／Ｂ）２４、回路検証プログラム２５、メタテーブル状態設定部２６、終了時刻設定部２７、実行結果データベース（Ｄ／Ｂ）２８を格納している。
【００２７】
検証対象回路２１は、ＨＤＬで記述される。例えば、検証対象回路２１は、システム設計において動作記述（Ｂｅｈａｖｉｏｒａｌ  Ｄｅｓｃｒｉｐｔｉｏｎ）から合成されたＲｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ（ＲＴＬ）記述によって表現される。本実施の形態における検証対象回路２１は、図５に示す非同期回路（順序回路ＦＦ１、ＦＦ２）及び順序回路間の組み合せ回路ＣＣ２を含む検証対象回路を表現したＲＴＬ記述である。クロック条件２２は、検証対象の非同期回路に入力されるクロック信号ＣＬＫ１、ＣＬＫ２の周期や位相を決める条件情報である。クロック条件２２は、記憶装置１３に予め記録されていても、入力装置１４から入力された値が用いられてもどちらでも良い。
【００２８】
入力データ記憶部２３は、検証対象の非同期回路の送信側順序回路ＦＦ１に入力されるイネーブル信号ＥＮ１の値（信号レベル）が記録される領域である。入力データ記憶部２３には、所定の時刻毎のイネーブル信号ＥＮ１が記録される。ここで、記憶領域を小さくするため、入力データ記憶部２３は、最新の値に更新されることが好ましい。
【００２９】
出力履歴Ｄ／Ｂ２４には、検証対象の非同期回路の受信側順序回路ＦＦ２から出力される出力信号Ｑ２（イネーブル信号ＥＮ２）の値が定期的又は不定期的に記録される。出力履歴Ｄ／Ｂ２４には、検証に用いられたクロック条件２１と、検証対象回路に入力されたイネーブル信号ＥＮ１の値、及びその信号幅と、出力信号Ｑ２の値及び信号幅が対応付けられて記録されることが好ましい。
【００３０】
回路検証プログラム２５は、ＣＰＵ１１によって実行され、システム設計後の検証対象回路２１の機能検証及びタイミング修正を実行する。回路検証プログラム２５は、ＣＰＵ１１によって実行されることで、図４に示す論理回路演算部２５１、検出部２５２、出力結果解析部２５３の各機能を実現する。
【００３１】
論理回路演算部２５１は、言語レベルシミュレータであり、検証対象の非同期回路を構成する検証対象回路２１や、クロック条件２２に基づいて、非同期回路におけるデータの転送動作をシミュレーションする。図５を参照して、本実施の形態における論理回路演算部２５１は、非同期回路を構成する送信側の順序回路ＦＦ１、受信側の順序回路ＦＦ２の動作をシミュレーションする。又、順序回路ＦＦ２の後段に接続された他の順序回路を含む組み合せ回路ＣＣ２の動作もシミュレーションする。
【００３２】
詳細には、論理回路演算部２５１は、非同期回路に対しイネーブル信号ＥＮ１及びクロック信号ＣＬＫ１を入力し、順序回路ＦＦ１の挙動を演算して順序回路ＦＦ１から出力信号Ｑ１を出力させる。又、論理回路演算部２５１は、出力信号Ｑ１及びクロック信号ＣＬＫ２に基づき順序回路ＦＦ２の挙動を演算し、出力信号Ｑ２をイネーブル信号ＥＮ２として次段の組み合せ回路ＣＣ２に出力させる。ここで、論理回路演算部２５１は、不正なイネーブル信号ＥＮ１が入力された場合の非同期回路の動作を検証する際、順序回路ＦＦ１が不正動作を起こすように設定する。本実施の形態による論理回路演算部２５１は、メタステーブル状態設定部２６にフラグ（Ｔｒｕｅ）を設定することで検証対象回路における受信側順序回路ＦＦ２がメタステーブル状態であることを設定する。あるいは、論理回路演算部２５１は、メタステーブル状態であることを示す情報をメタステーブル状態設定部２６に格納することで順序回路ＦＦ２がメタステーブル状態であることを設定しても良い。
【００３３】
論理回路演算部２５１は、メタステーブル状態に設定されている場合、メタステーブル状態を示す値（“１”又は“０”、以下、メタステーブル状態値Ｄｍと称す）が出力信号Ｑ１として順序回路ＦＦ１から出力されるように演算する。又、論理回路演算部２５１は、メタステーブル値Ｄｍが出力されている間に順序回路ＦＦ２がアクティブになった場合、順序回路ＦＦ２がメタステーブル値Ｄｍをラッチして後段の組み合せ回路ＣＣ２に伝搬するように演算する。尚、メタステーブル状態値Ｄｍは、送信側順序回路ＦＦ１の出力値と同じ値、異なる値、あるいは固定の値のいずれでも良い。
【００３４】
又、論理回路演算部２５１は、メタステーブル状態値を出力する期間（メタステーブル状態に設定される期間）を終了時刻設定部２７に設定する。ここで、メタステーブル状態値を出力する期間は、クロック信号ＣＬＫ２の一周期より短い時間である。又、メタステーブル状態値を出力する期間は、クロックＣＬＫ１のアクティブエッジからクロックＣＬＫ２のアクティブエッジまでの時間Ｔａよりも長い期間に設定されることが好ましい。メタステーブル状態値を出力する期間は、固定的に設定されても、検証時に用いられるクロック条件２１毎に変更されてもどちらでも良い。又、メタステーブル状態値を出力する期間は、順序回路のＳｅｔｕｐ時間やＨｏｌｄ時間を考慮して設定されても良い。
【００３５】
更に、本実施の形態における論理回路演算部２５１は、メタステーブル状態値を出力させないで、設計回路の期待値を検証する通常検証モードと、メタステーブル状態値を出力させたときの設計回路の機能を検証する新検証モードとを両方有することが好ましい。通常検証モードにおいて論理回路演算部２５１は、システム設計フェーズにおいて作成された検証対象回路２１に対し、通常の論理シミュレーションを行う。これにより論理回路演算部２５１は、検証対象回路における検証箇所の動作（例えば入力信号や出力信号の信号レベルや遅延量）をシミュレーションし、検証対象回路２１における動作の期待値を出力することができる。一方、新検証モードでは、後述するフローを実行することでメタステーブル状態を検証対象となる組み合せ回路ＣＣ２に伝搬し、検証箇所の動作がシミュレーションされる。論理回路演算部２５１は、通常検証モードと新検証モードの検証結果（例えば、検証箇所の信号レベルや遅延量）をそれぞれ実行結果Ａ、実行結果Ｂとして実行結果Ｄ／Ｂ２８に記録する。
【００３６】
検出部２５２は、シミュレーションにおいて非同期回路に入力されるイネーブル信号ＥＮ１や、順序回路ＦＦ１、ＦＦ２からの出力信号Ｑ１、Ｑ２を検出し、入力データ記憶部２３や出力履歴Ｄ／Ｂ２４に記録する。検出部２５２は、時刻Ｔｎ毎の出力信号Ｑ１、Ｑ２を記録することが好ましい。
【００３７】
出力結果解析部２５３は、出力履歴Ｄ／Ｂ２４を参照して、同じクロック条件２１で複数回行われた検証の結果（出力信号Ｑ２の信号レベル）に基づき、検証対象の非同期回路が正常か不良かを判定する。詳細には、出力結果解析部２５３は、検証結果である複数の出力信号Ｑ２（イネーブル信号ＥＮ２）の信号レベルの統計処理を行い、信号レベルが一定にならない信号をメタステーブル値として認識し、非同期回路が正常であるかを判定する。
【００３８】
又、出力結果解析部２５３は、組み合せ回路ＣＣ２において指定された検証箇所における通常モードでの検証結果（実行結果Ａ）と、新検証モードにおける検証結果（実行結果Ｂ）とを比較して組み合せ回路ＣＣ２を含む検証対象回路が正常か不良かどうかを判定する。
【００３９】
実行結果Ｄ／Ｂ２８は、回路検証プログラム２５によって実行された検証結果を記録する。ここで、実行結果Ｄ／Ｂ２８には、通常モードにおける検証結果（実行結果Ａ）と、新検証モードにおける検証結果（実行結果Ｂ）とが検証対象回路（検証箇所）に対応付けられて記録されることが好ましい。
【００４０】
（新検証モードにおける非同期回路検証動作（第１の実施の形態））
図６Ａ、図６Ｂ、図７Ａ、及び図７Ｂを参照して、本発明による回路検証装置１０の新検証モードにおける非同期回路の検証動作（第１の実施の形態）の詳細を説明する。図６Ａ及び図６Ｂは、本発明の回路検証装置１０によって検証される非同期回路における送信側順序回路ＦＦ１の出力値Ｑ１を決定する動作を示すフロー図である。第１の実施の形態における回路検証装置１０は、クロックエッジのみで信号値を評価するサイクルベースシミュレータとして動作する。図６Ａ及び図６Ｂに示すステップＳ１〜Ｓ１５までの一連の処理は、送信側順序回路ＦＦ１に入力されるクロックＣＬＫ１の周期を超えない任意の時間毎（時刻Ｔ１〜Ｔ２の間、時刻Ｔ２〜Ｔ３の間、・・・、Ｔｎ〜Ｔｎ＋１、ただしｎは自然数）に処理されるものとする。
【００４１】
時刻Ｔｎにおいて論理回路演算部２５１は、メタステーブル状態設定部２６を参照し、メタステーブル状態に設定されているかを確認する（ステップＳ１、Ｓ２）。ここで、メタステーブル状態設定部２６に設定されたフラグがＴｒｕｅである場合、論理回路演算部２５１は、終了時刻設定部２７を参照し、メタステーブル状態の終了時刻Ｔｅに到達しているかを確認する（ステップＳ３）。ステップＳ２においてメタステーブル状態設定部２６に設定されたフラグがＦａｌｓｅである場合、又はメタステーブル状態の終了時刻Ｔｅに至らずメタステーブル状態が継続中である場合（ステップＳ３Ｎｏ）、検出部２５２は、アクティブエッジ（例えば立ち上がりエッジ）を検出するまでクロック信号ＣＬＫ１を監視する（ステップＳ４Ｎｏ）。
【００４２】
検出部２５２は、クロック信号ＣＬＫ１のアクティブエッジを検出すると（ステップＳ４Ｙｅｓ）、その時点における入力データＤｉｎ（イネーブル信号ＥＮ１の信号レベル）を抽出し、入力データ記憶部２３に記録された入力データ（変数ｄ）と比較する（ステップＳ５）。検出部２５２が入力データＤｉｎの変化を検出しない場合、すなわち入力データＤｉｎが変数ｄと同じ場合、ステップＳ１に移行する（ステップＳ５Ｎｏ）。尚、本実施の形態における変数ｄの初期値は“０”が設定されているものとする。
【００４３】
検出部２５２が入力データＤｉｎの変化を検出した場合、すなわち、入力データＤｉｎが入力データ記憶部２３に記録された変数ｄと異なる値を示す場合（ステップＳ５Ｙｅｓ）、論理回路演算部２５１は、メタステーブル状態設定部２６に設定されたフラグがＴｒｕｅかＦａｌｓｅかを確認する（ステップＳ６）。ここで、メタステーブル状態設定部２６に設定されたフラグがＦａｌｓｅである場合、論理回路演算部２５１は、メタステーブル状態設定部２６のフラグをＴｒｕｅに設定し、非同期回路をメタステーブル状態にする（ステップＳ７）。ステップＳ４からステップＳ７の処理によって、メタステーブル状態でない非同期回路は、入力データＤｉｎの変化に応じてメタステーブル状態に設定される。
【００４４】
メタステーブル状態フラグがＴｒｕｅに設定されると、検出部２５２は、ステップＳ５において抽出した入力データＤｉｎを変数ｄとして入力データ記憶部２３に記録する（ステップＳ８）。これにより、前回記録された入力データから変化した入力データｄを入力データＤｉｎとして保持することができる。又、論理回路演算部２５１は、メタステーブル状態の終了時刻Ｔｅを設定する（ステップＳ９）。これにより、設計対象の非同期回路がメタステーブル状態となる期間が設定される。すなわち、メタステーブル状態となる期間は、ステップＳ７においてフラグが設定された時刻からステップＳ９において設定された終了時刻Ｔｅまでの期間となる。ここで、メタステーブル状態の終了時刻Ｔｅは、メタステーブル状態となる期間が、受信側順序回路ＦＦ２に入力されるクロック信号ＣＬＫ２の一周期より短い期間となるように設定される。尚、メタステーブル状態となる期間は、入力信号をラッチするときのクロック信号ＣＬＫ１のアクティブエッジからクロック信号ＣＬＫ２のアクティブエッジまでの時間Ｔａより長くなるように設定されることが好ましい。又、メタステーブル状態となる期間は、クロック信号ＣＬＫ１の一周期以上の期間であることが好ましい。更に、順序回路のＳｅｔｕｐ時間やＨｏｌｄ時間を加味した値を終了時刻Ｔｅとして設定してもよい。
【００４５】
ステップＳ７においてメタステーブル状態を示すフラグが設定されると、論理回路演算部２５１は、メタステーブル状態値Ｄｍ（“１”又は“０”のうち任意の値）を発生し、その値を送信側の順序回路ＦＦ１から出力信号Ｑ１として出力させる（ステップＳ１０、Ｓ１１）。これにより、メタステーブル状態として設定された非同期回路の順序回路ＦＦ１は、不正なイネーブル信号ＥＮ１に応じた出力信号Ｑ１として、論理が定まらないメタステーブル状態値Ｄｍを出力する。論理回路演算部２５１は、ステップＳ１１の後、ステップＳ１に移行して、次の時刻Ｔｎ＋１になるまで待機する。
【００４６】
ステップＳ６からステップＳ１１は、非同期回路がメタステーブル状態に設定されていない間に、入力データＤｉｎ（イネーブル信号ＥＮ１の信号レベル）が変化したときの処理である。これらの処理によって検証対象の非同期回路はメタステーブル状態に設定され、順序回路ＦＦ１から出力信号Ｑ１として論理が不定のイネーブル状態値Ｄｍが出力される。この際、イネーブル状態の期間も設定される。
【００４７】
一方、ステップＳ６において論理回路演算部２５１は、メタステーブル状態設定部２６に設定されたフラグがＴｒｕｅであることを確認すると（ステップＳ６Ｔｒｕｅ）、メタステーブル状態設定部２６に設定したフラグをＦａｌｓｅに変更する（ステップＳ１２）。これにより、非同期回路に設定されたメタステーブル状態が解除される。続いて、論理回路演算部２５１は、順序回路ＦＦ１が入力データＤｉｎをラッチし、出力信号Ｑ１として出力するように動作させる（ステップＳ１３）。ステップＳ１３の後、ステップＳ１に移行して、次の時刻Ｔｎ＋１になるまで待機する。ステップＳ１２、Ｓ１３の処理によって、メタステーブル状態中における入力データＤｉｎの変化に応じてメタステーブル状態は解除され、順序回路ＦＦ１によって入力データＤｉｎがラッチされるようにシミュレーションすることができる。
【００４８】
メタステーブル状態に設定されている期間中、時刻がＴｎから次の時刻Ｔｎ＋１になると（ステップＳ１Ｙｅｓ、Ｓ２Ｔｒｕｅ）、論理回路演算部２５１は、終了時刻設定部２７に設定された終了時刻Ｔｅを確認する（ステップＳ３）。このとき、終了時刻Ｔｅを経過している場合、論理回路演算部２５１は、メタステーブル状態設定部２６に設定したフラグをＦａｌｓｅに設定する（ステップＳ１４）。これにより、非同期回路のメタステーブル状態は解除される。続いて、論理回路演算部２５１は、入力データ記憶部２３に記録されている変数ｄを順序回路ＦＦ１の出力信号Ｑ１として出力させる（ステップＳ１５）。ステップＳ１４、Ｓ１５の処理によって、入力データＤｉｎの変化の有無に関係なく、終了時刻Ｔｅに応じてメタステーブル状態が解除され、メタステーブル状態となる前の状態に戻される。ステップＳ１５の処理を終了すると、図６Ａ及び図６Ｂに示すフローから離脱する。
【００４９】
又、論理回路演算部２５１は、順序回路ＦＦ１からの出力信号Ｑ１に応じた順序回路ＦＦ２の動作をシミュレーションする。論理回路演算部２５１は、順序回路ＦＦ２に入力されるクロック信号ＣＬＫがアクティブな時、順序回路ＦＦ２が出力信号Ｑ１をラッチするように動作させる。順序回路ＦＦ２の動作に関するシミュレーションは、従来と同じであるので詳細な説明は省略する。
【００５０】
更に、検出部２５２は、検証対象の非同期回路の受信側順序回路ＦＦ２から出力される出力信号Ｑ２（イネーブル信号ＥＮ２）の値を出力履歴Ｄ／Ｂ２７に記録する。この際、出力信号Ｑ２は、検証で用いられたクロック条件２１や入力データＤｉｎ（イネーブル信号ＥＮ１）の入力履歴と対応付けられて記録されることが好ましい。非同期回路の検証は、同一のクロック条件２１下で複数回行われる。出力結果解析部２５３は、その結果（出力信号Ｑ２の信号レベル）を統計処理することで、順序回路ＦＦ２の後段へのメタステーブル状態値Ｄｍの伝搬の有無、すなわち非同期回路が正常であるかどうかを確認する。
【００５１】
（シミュレーションにおける非同期回路の動作（第１の実施の形態））
図７Ａ、及び図７Ｂは、本発明による回路検証装置１０によって検証された非同期回路の動作を示すタイミングチャートである。図７Ａ、及び図７Ｂを参照して、本発明によるシミュレーションにおける非同期回路の動作（第１の実施の形態）の詳細を説明する。
【００５２】
図７Ａは、クロック条件２１としてクロック周期ＣＬＫ２の周期（６時刻）がクロック周期ＣＬＫ１（２時刻）の３倍であり、それぞれのアクティブエッジ（立ち上がりエッジ）の位相差が１時刻分であるように設定された非同期回路のタイミングチャートである。図６Ａ、図６Ｂ、及び図７Ａを参照して、時刻Ｔ３においてパルス幅が５時刻のイネーブル信号ＥＮ１が入力された非同期回路の動作（シミュレーション結果）について説明する。
【００５３】
１．順序回路ＦＦ１の動作
時刻Ｔ１〜Ｔ２：初期値として、メタステーブル状態設定部２６には、Ｆａｌｓｅを示すフラグが設定される。この期間、入力データＤｉｎ（イネーブル信号ＥＮ１の信号レベル）に変化がないため、ステップＳ１、Ｓ２、Ｓ４、Ｓ５の処理を繰り返す。又、順序回路ＦＦ１は、初期値として入力される入力データＤｉｎの値“０”をラッチし、出力信号Ｑ１として出力する。
時刻Ｔ３：クロック信号ＣＬＫ１がアクティブとなり、順序回路ＦＦ１への入力データＤｉの変化が検出される（ステップＳ１〜Ｓ５Ｙｅｓ）。これにより、メタステーブル状態設定部２６のフラグはＦａｌｓｅからＴｒｕｅに変更される（ステップＳ６、Ｓ７）。次に入力データＤｉｎ＝“１”が変数ｄとして保持される（ステップＳ８）。又、メタステーブル状態の終了時刻Ｔｅが時刻Ｔ７に設定される（ステップＳ９）。更に、順序回路ＦＦ１はメタステーブル状態値Ｄｍ（“１”又は“０“）をラッチし出力信号Ｑ１として出力する（ステップＳ１０、Ｓ１１）。
時刻Ｔ４：クロック信号ＣＬＫ１のアクティブエッジを検出しないため順序回路ＦＦ１は、現状のまま、メタステーブル状態値Ｄｍを出力する（ステップＳ１〜Ｓ４Ｎｏ）。
時刻Ｔ５：クロック信号ＣＬＫ１がアクティブとなるが、順序回路ＦＦ１への入力データＤｉが変化しないため、順序回路ＦＦ１は、現状のまま、メタステーブル状態値Ｄｍを出力する（ステップＳ１〜Ｓ５Ｎｏ）。
時刻Ｔ６：クロック信号ＣＬＫ１のアクティブエッジを検出しないため順序回路ＦＦ１は、現状のまま、メタステーブル状態値Ｄｍを出力する（ステップＳ１〜Ｓ４Ｎｏ）。
時刻Ｔ７：終了時刻Ｔｅに到達し（ステップＳ１〜Ｓ３Ｙｅｓ）、メタステーブル状態設定部２６のフラグがＦａｌｓｅに変更される（ステップＳ１４）。又、時刻Ｔ３において保持していた変数ｄ＝“１”を出力信号Ｑ１として出力する（ステップＳ１５）。
時刻Ｔ８：クロック信号ＣＬＫ１のアクティブエッジを検出しないため順序回路ＦＦ１は、現状のまま、変数ｄ＝“１”を出力信号Ｑ１として出力する。
時刻Ｔ９：クロック信号ＣＬＫ１がアクティブとなり、順序回路ＦＦ１は、イネーブル信号ＥＮ１の値“０”を出力信号Ｑ１として出力する。
尚、論理回路演算部２５１は、終了時刻Ｔｅに達していなくても、受信側順序回路ＦＦ２のクロック信号ＣＬＫ２がアクティブとなった場合、終了時刻Ｔｅに到達したと判断しても構わない。
【００５４】
２．順序回路ＦＦ２の動作
時刻Ｔ１〜Ｔ３：この期間、出力データＱ１の信号レベルに変化がないため、順序回路ＦＦ２は、初期値として出力される出力信号Ｑ１の信号レベル“０”をラッチし、出力信号Ｑ２として出力する。
時刻Ｔ４：クロック信号ＣＬＫ２のアクティブエッジに応じて、順序回路ＦＦ２は、出力信号Ｑ１（メタステーブル値Ｄｍ）をラッチし、出力信号Ｑ１（イネーブル信号ＥＮ２）として後段の組み合せ回路ＣＣ２に対しメタステーブル値Ｄｍを出力する。
時刻Ｔ５〜Ｔ９：クロック信号ＣＬＫ２のアクティブエッジを検出しないため順序回路ＦＦ２は、現状のまま、メタステーブル状態値Ｄｍを出力する。
時刻Ｔ１０：クロック信号ＣＬＫ２がアクティブとなり、出力信号Ｑ１の値“０”をラッチして出力信号Ｑ２（イネーブル信号ＥＮ２）として組み合せ回路ＣＣ２に出力する。
【００５５】
以上のように、本発明による回路検証方法によれば、送信側順序回路ＦＦ１で発生したメタステーブル状態を受信側順序回路ＦＦ２の後段に接続された組み合せ回路ＣＣ２に伝搬させることができる。順序回路ＦＦ１と順序回路ＦＦ２がそれぞれに対する入力信号をラッチするときのアクティブクロックの時間差（時間Ｔａ）がクロックＣＬＫ１の一周期より大きい場合でも、順序回路ＦＦ２は、メタステーブル状態値Ｄｍを組み合せ回路ＣＣ２に伝搬することができる。尚、ステップＳ６、Ｓ１２、Ｓ１３の処理は省略しても構わない。
【００５６】
例えば、図７Ｂに示すように、アクティブクロックの時間差（時間Ｔａ）がクロック信号ＣＬＫの周期の１．５倍以上である場合でも、順序回路ＦＦ２は、メタステーブル状態値Ｄｍを組み合せ回路ＣＣ２に伝搬することができる。
【００５７】
クロック周期ＣＬＫ２の周期が、クロック信号ＣＬＫ１の周期より長く、その差が大きい場合、時間Ｔａが大きくなる可能性が高くなる。このため、従来技術では、メタステーブル状態を受信側の順序回路ＦＦ２に接続された後段の組み合せ回路に伝搬する可能性が低くなり、クロック条件を変更して数多くの検証を行う必要があった。しかし、本発明による検証方法によれば、順序回路ＦＦ１からメタステーブル状態を出力する時間を従来よりも長く設定できるため、組み合せ回路ＣＣ２にメタステーブルを伝搬する可能性が格段に向上する。又、本発明では、メタステーブル状態の期間をクロック信号ＣＬＫ２の一周期より短く設定する。更に、メタステーブル状態中に送信側順序回路ＦＦ１への入力データＤｉｎが変化した場合は、メタステーブル状態を終了し、出力信号Ｑ１の値を変化後の値に設定する。このため、順序回路ＦＦ２対し、メタステーブル状態が伝播されるとともに、イネーブル信号が正しく転送される。従って、本発明による検証方法では、少ない回数で非同期回路の検証を行うことができる。又、機能シミュレーションに必要な非同期回路の記述を単純化することができ、機能シミュレーション時間を短縮化することができる。
【００５８】
（新検証モードにおける非同期回路検証動作（第２の実施の形態））
第２の実施の形態における回路検証装置１０の構成は、第１の実施の形態と同様であるので説明は省略する。
【００５９】
図７Ａ、図７Ｂ、図８、及び図９を参照して、本発明による回路検証装置１０の新検証モードにおける非同期回路の検証動作（第２の実施の形態）の詳細を説明する。図８及び図９は、本発明の回路検証装置１０によって検証される非同期回路における送信側順序回路ＦＦ１の出力値Ｑ１を決定する動作を示すフロー図である。第２の実施の形態における回路検証装置１０は、イベントが発生する度に信号値を評価するイベントドリブンシミュレータとして動作する。図８に示すフローを実行するためのイベントは、送信側順序回路ＦＦ１へのクロック信号ＣＬＫのアクティブエッジ（例えば立ち上がりエッジ）の検出と定義する。
【００６０】
検出部２５２は、アクティブエッジを検出するまでクロック信号ＣＬＫ１を監視する（ステップＳ２１）。クロック信号ＣＬＫ１のアクティブエッジが検出されるとイベントが発生し、論理回路演算部２５１はメタステーブル状態設定部２６を参照し、メタステーブル状態に設定されているかを確認する（ステップＳ２１Ｙｅｓ、Ｓ２２）。ここで、メタステーブル状態設定部２６に設定されたフラグがＦａｌｓｅである場合、ステップＳ２１に戻り次のイベント発生まで待機する。
【００６１】
一方、メタステーブル状態設定部２６に設定されたフラグがＴｒｕｅである場合、検出部２５２は、その時点における入力データＤｉｎ（イネーブル信号ＥＮ１の信号レベル）を抽出し、入力データ記憶部２３に記録された入力データ（変数ｄ）と比較する（ステップＳ２３）。検出部２５２が入力データＤｉｎの変化を検出しない場合、すなわち入力データＤｉｎが変数ｄと同じ場合、ステップＳ２１に移行する（ステップＳ２３Ｎｏ）。尚、本実施の形態における変数ｄの初期値は“０”が設定されているものとする。
【００６２】
検出部２５２が入力データＤｉｎの変化を検出した場合、すなわち、入力データＤｉｎが入力データ記憶部２３に記録された変数ｄと異なる値を示す場合（ステップＳ２３Ｙｅｓ）、論理回路演算部２５１は、メタステーブル状態設定部２６に設定されたフラグがＴｒｕｅかＦａｌｓｅかを確認する（ステップＳ２４）。ここで、メタステーブル状態設定部２６に設定されたフラグがＦａｌｓｅである場合、論理回路演算部２５１は、メタステーブル状態設定部２６のフラグをＴｒｕｅに設定し、非同期回路をメタステーブル状態にする（ステップＳ２５）。ステップＳ２３からステップＳ２５の処理によって、メタステーブル状態でない非同期回路は、入力データＤｉｎの変化に応じてメタステーブル状態に設定される。
【００６３】
メタステーブル状態フラグがＴｒｕｅに設定されると、検出部２５２は、ステップＳ５において抽出した入力データＤｉｎを変数ｄとして入力データ記憶部２３に記録する（ステップＳ２６）。これにより、前回記録された入力データから変化した入力データｄを入力データＤｉｎとして保持することができる。又、論理回路演算部２５１は、メタステーブル状態の終了イベントを設定する（ステップＳ２７）。これにより、設計対象の非同期回路がメタステーブル状態となる期間が設定される。ここで設定さえた終了イベントが発生すると、非同期回路のメタステーブル状態が終了する。このため、メタステーブル状態となる期間は、終了イベントの発生時刻（終了時刻Ｔｅ）によって設定される。終了イベントの発生時刻は，第１の実施の形態における終了時刻Ｔｅと同様な条件で設定される。
【００６４】
ステップＳ２５においてメタステーブル状態を示すフラグが設定されると、論理回路演算部２５１は、メタステーブル状態値Ｄｍ（“１”又は“０”のうち任意の値）を発生し、その値を送信側の順序回路ＦＦ１から出力信号Ｑ１として出力させる（ステップＳ２８、Ｓ２９）。これにより、メタステーブル状態として設定された非同期回路の順序回路ＦＦ１は、不正なイネーブル信号ＥＮ１に応じた出力信号Ｑ１として、論理が定まらないメタステーブル状態値Ｄｍを出力する。論理回路演算部２５１は、ステップＳ２９の後、ステップＳ２１に移行して、次のアクティブエッジが検出されるまで待機する。
【００６５】
ステップＳ２４からステップＳ２９は、非同期回路がメタステーブル状態に設定されていない間に、入力データＤｉｎ（イネーブル信号ＥＮ１の信号レベル）が変化したときの処理である。これらの処理によって検証対象の非同期回路はメタステーブル状態に設定され、順序回路ＦＦ１から出力信号Ｑ１として論理が不定のイネーブル状態値Ｄｍが出力される。この際、イネーブル状態の期間も設定される。
【００６６】
一方、ステップＳ２４において、論理回路演算部２５１は、メタステーブル状態設定部２６に設定されたフラグがＴｒｕｅであることを確認すると（ステップＳ２４Ｔｒｕｅ）、メタステーブル状態設定部２６に設定したフラグをＦａｌｓｅに変更する（ステップＳ３０）。これにより、非同期回路に設定されたメタステーブル状態が解除される。続いて、論理回路演算部２５１は、順序回路ＦＦ１において入力データＤｉｎがラッチされ、出力信号Ｑ１として出力させる（ステップＳ３１）。ステップＳ３１の後、ステップＳ２１に移行して、次の時刻Ｔｎ＋１になるまで待機する。ステップＳ３０、Ｓ３１の処理によって、メタステーブル状態中における入力データＤｉｎの変化に応じてメタステーブル状態は解除され、順序回路ＦＦ１によって入力データＤｉｎがラッチされるようにシミュレーションすることができる。
【００６７】
次に、ステップＳ２７において設定された終了イベントが発生した場合、図９に示すステップＳ３２の処理に移行する。終了イベントが発生すると論理回路演算部２５１は、メタステーブル状態設定部２６に設定したフラグをＦａｌｓｅに設定する（ステップＳ３２）。これにより、非同期回路のメタステーブル状態は解除される。続いて、論理回路演算部２５１は、入力データ記憶部２３に記録されている変数ｄを順序回路ＦＦ１の出力信号Ｑ１として出力させる（ステップＳ３３）。ステップＳ１４の処理によって、入力データＤｉｎの変化の有無に関係なく、終了時刻Ｔｅに応じてメタステーブル状態が解除される。又、ステップＳ１５の処理によって、クロック信号ＣＬＫ１がアクティブとならなくても、順序回路ＦＦ１に入力データＤｉｎをラッチさせることができる。ステップＳ３３の処理を終了すると、図８及び図９に示すフローから離脱する。
【００６８】
又、論理回路演算部２５１は、第１の実施の形態と同様に順序回路ＦＦ１からの出力信号Ｑ１に応じた順序回路ＦＦ２の動作をシミュレーションする。更に、検出部２５２は、第１の実施の形態と同様に検証対象の非同期回路の受信側順序回路ＦＦ２から出力される出力信号Ｑ２（イネーブル信号ＥＮ２）の値を出力履歴Ｄ／Ｂ２７に記録する。
【００６９】
（シミュレーションにおける非同期回路の動作（第２の実施の形態））
図８、図９、及び図７Ａを参照して、時刻Ｔ３においてパルス幅が５時刻のイネーブル信号ＥＮ１が入力された非同期回路の動作（シミュレーション結果）について説明する。
【００７０】
１．順序回路ＦＦ１の動作
クロック信号ＣＬＫ１のアクティブエッジは時刻Ｔ１、Ｔ３、Ｔ５、Ｔ７、Ｔ９、…で検出されるため、これらの時刻でイベントが発生する。
時刻Ｔ１：初期値として、メタステーブル状態設定部２６には、Ｆａｌｓｅを示すフラグが設定されているため次のアクティブエッジの検出まで待機する（ステップＳ２１、Ｓ２２Ｆａｌｓｅ）。又、順序回路ＦＦ１は、初期値として入力される入力データＤｉｎの値“０”をラッチし、出力信号Ｑ１として出力する。
時刻Ｔ３：順序回路ＦＦ１への入力データＤｉの変化が検出される（ステップＳ２１〜Ｓ２３Ｙｅｓ）。これにより、メタステーブル状態設定部２６のフラグはＦａｌｓｅからＴｒｕｅに変更される（ステップＳ２４、Ｓ２５）。次に入力データＤｉｎ＝“１”が変数ｄとして保持される（ステップＳ２６）。又、メタステーブル状態の終了イベントが設定される。この際、イベント発生時刻（終了時刻Ｔｅ）が時刻Ｔ７に設定される（ステップＳ２７）。更に、順序回路ＦＦ１はメタステーブル状態値Ｄｍ（“１”又は“０“）をラッチし出力信号Ｑ１として出力する（ステップＳ２８、Ｓ２９）。
時刻Ｔ５：順序回路ＦＦ１への入力データＤｉが変化しないため、順序回路ＦＦ１は、現状のまま、メタステーブル状態値Ｄｍを出力する（ステップＳ２１〜Ｓ２３Ｎｏ）。
時刻Ｔ７：イベント発生時刻（終了時刻Ｔｅ）に到達すると、メタステーブル状態の終了イベントが発生する。これにより、メタステーブル状態設定部２６のフラグがｆａｌｓｅに変更される（ステップＳ３２）。又、時刻Ｔ３において保持していた変数ｄ＝“１”を出力信号Ｑ１として出力する（ステップＳ３３）。
時刻Ｔ９：順序回路ＦＦ１は、イネーブル信号ＥＮ１の値“０”を出力信号Ｑ１として出力する。
尚、論理回路演算部２５１は、終了イベント発生前に受信側順序回路ＦＦ２のクロック信号ＣＬＫ２がアクティブとなった場合、論理回路演算部２５１は、終了時刻Ｔｅに到達したと判断しても構わない。又、ステップＳ２４、Ｓ３０、Ｓ３１の処理は省略しても構わない。
【００７１】
第２の実施の形態における順序回路ＦＦ２の動作は、第１の実施の形態における動作と同様なので説明は省略する。
【００７２】
（検証動作）
次に、図１０を参照して、本発明による非同期回路の機能検証の動作の全体を説明する。本発明による回路検証装置１０は、先ず通常検証モードにおいて図５に示す検証対象回路の機能検証を行う（ステップＳ１０１）。この際、組み合せ回路ＣＣ２において予定した検証箇所の検証結果（信号レベルや遅延時間等）が実行結果Ａとして実行結果Ｄ／Ｂ２８に記録される。次に、回路検証装置１０は、新検証モードにおいて図５に示す検証対象回路の機能検証を行う（ステップＳ１０２）。この際、回路検証装置１０は、ステップＳ１０１と同じ検証箇所の検証結果を実行結果Ｂとして実行結果Ｄ／Ｂ２８に記録する。ステップＳ１０２では、順序回路ＦＦ１で発生したイネーブル状態が、組み合せ回路ＣＣ１に出力されたときの検証結果を得ることができる。出力結果解析部２５３は、実行結果Ａと実行結果Ｂとを比較して一致しない場合（ステップＳ１０３Ｎｏ）、検証対象回路２１を修正する（ステップＳ１０４）。論理回路演算部２５１は、修正された検証対象回路２１に対し再度ステップＳ１０１からＳ１０３の処理を実行する。回路検証装置１０は、実行結果Ａと実行結果Ｂとが一致するまで、２つのモードによる検証と比較を繰り返し、一致すると、検証処理を終了する（ステップＳ１０３Ｙｅｓ）。これにより、通常の機能検証結果と、メタスティビリティ状態における機能検証結果とに差が生じないことを確認できる。
【００７３】
以上のように本発明による回路検証装置、回路検証方法によれば、非同期回路において送受信クロックの周期の差が大きい場合でもメタステーブル状態を受信側順序回路に伝播できる。これにより、送受信クロックのアクティブエッジの位相差が送信側のクロックの一周期を超える場合でも回路検証が実施できる。又、メタステーブル状態を模擬した非同期回路の機能検証において、送信側順序回路のメタステーブル状態が受信側順序回路に効率良く伝搬するため、従来技術で発生した検証不良の回数は減少する。このため、非同期回路に対する機能検証回数を少なくすることができ、検証時間を短縮することができる。更に、順序回路間のメタステーブル状態の伝搬をより確実に実行できるため、実際の非同期回路に近い動作をシミュレーションすることができる。
【００７４】
（新検証モードにおける非同期回路検証（第３の実施の形態））
図１１は、本発明による回路検証装置の第３の実施の形態における構成を示す図である。第３の実施の形態における回路検証装置１０は、図３に示す回路検証装置に対し判定時刻設定部２９及びシミュレーション状態保存部３０を更に含む構成である。判定時刻設定部２９には、シミュレーション状態を復元するかを判定する時刻（以下、復元判定時刻Ｔｒｅｓｔａｒｔと称す）が設定される。シミュレーション状態保存部３０は、入力データＤｉｎの変化を検出すると、その時刻における論理回路演算部２５１の演算状態がシミュレーション状態として記録される。詳細には、順序回路の入出力データやクロック信号等の信号レベル、順序回路ＦＦ１、ＦＦ２や、イネーブル信号ＥＮ１を出力する組み合せ回路の状態を示す情報がシミュレーション状態として記録される。又、イネーブル状態の期間もシミュレーション状態保存部３０に記録される。
【００７５】
又、第３の実施の形態における回路検証装置１０は、シミュレーション状態を復元するか否かを決定する復元判定部と、シミュレーション状態保存部３０に記録されたシミュレーション状態を復元する復元部を更に備える（図示なし）。復元判定部と復元部は、ＣＰＵ１１によって実行されるプログラムによって実現されることが好ましい。以下の実施の形態では、論理回路演算部２５１が復元判定部と復元部の機能を有しているものとして説明する。
【００７６】
図１３Ａ、図１３Ｂ、及び図６Ｂを参照して、本発明による回路検証装置１０の新検証モードにおける非同期回路の検証動作（第３の実施の形態）の詳細を説明する。図１３Ａ、図１３Ｂ、及び図６Ｂは、本発明の回路検証装置１０によって検証される非同期回路における送信側順序回路ＦＦ１の出力値（出力信号Ｑ１の信号レベル）を決定する動作を示すフロー図である。第３の実施の形態における回路検証装置１０は、クロックエッジのみで信号値を評価するサイクルベースシミュレータとして動作する。図１３Ａ、図１３Ｂ、及び図６Ｂに示すステップＳ１〜Ｓ１５までの一連の処理は、送信側順序回路ＦＦ１に入力されるクロックＣＬＫ１の周期を超えない任意の時間毎（時刻Ｔ１〜Ｔ２の間、時刻Ｔ２〜Ｔ３の間、・・・、Ｔｎ〜Ｔｎ＋１、ただしｎは自然数）に処理されるものとする。
【００７７】
時刻Ｔｎにおいて論理回路演算部２５１は、判定時刻設定部２９を参照し、復元判定時刻Ｔｒｅｓｔａｒｔに到達しているかを確認する（ステップＳ１、Ｓ２０１）。復元判定時刻Ｔｒｅｓｔａｒｔに到達している場合は、復元判定が行われる（ステップＳ２０５）。ステップＳ２０５における復元判定処理では、判定時刻における送信側順序回路ＦＦ１の出力信号Ｑ１の値が、入力データ記憶部２３で保持している値ｄと等しく、且つ、現在時刻における受信側順序回路ＦＦ２の出力信号Ｑ２の値がメタステーブル状態値Ｄｍと等しい場合、Ｔｒｕｅとなる。ステップＳ２０５における復元判定の結果がＦａｌｓｅの場合は、メタステーブル状態フラグを確認するステップＳ２以降の処理が行われる。一方、ステップＳ２０５における復元判定の結果がＴｒｕｅの場合、メタステーブル状態設定部２６の値はＦａｌｓｅに変更される（ステップＳ２０６）。その後、論理回路演算部２５１は、シミュレーション状態保存部３０に保存したシミュレーション状態を復元する（ステップＳ２０７）。これにより順序回路ＦＦ１、ＦＦ２、その他の組み合わせ回路が保持している値、シミュレーション時刻、変数ｄが復元され、回路検証装置１０は、保存した時刻のシミュレーション状態を再現する。シミュレーション状態を復元するステップＳ２０７の処理後、論理回路演算部２５１は、シミュレーション保存部３０に保存された変数ｄの値を、順序回路ＦＦ１から出力信号Ｑ１として出力させる（ステップＳ２０８）。ステップＳ２０８の処理後、論理回路演算部２５１は、終了時刻Ｔｅを現在時刻より前の時刻に設定する（ステップＳ２０９）。これにより、終了時刻Ｔｅを再設定するまでメタステーブル状態終了時刻に到達しない。論理回路演算部２５１は、ステップＳ２０９の後、ステップＳ１に移行して、次の時刻Ｔｎ＋１になるまで待機する。
【００７８】
論理回路演算部２５１は、シミュレーション状態を復元するかを判定する時刻Ｔｒｅｓｔａｒｔに到達していない場合（ステップＳ２０１Ｎｏ）、メタステーブル状態設定部２６を参照し、メタステーブル状態に設定されているかを確認する（ステップＳ２）。ここで、メタステーブル状態設定部２６に設定されたフラグがＴｒｕｅである場合、論理回路演算部２５１は、終了時刻設定部２７を参照し、メタステーブル状態の終了時刻Ｔｅに到達しているかを確認する（ステップＳ３）。ステップＳ２においてメタステーブル状態設定部２６に設定されたフラグがＦａｌｓｅである場合、又はメタステーブル状態の終了時刻Ｔｅに至らずメタステーブル状態が継続中である場合（ステップＳ３Ｎｏ）、検出部２５２は、アクティブエッジ（例えば立ち上がりエッジ）を検出するまでクロック信号ＣＬＫ１を監視する（ステップＳ４Ｎｏ）。
【００７９】
検出部２５２は、クロック信号ＣＬＫ１のアクティブエッジを検出すると（ステップＳ４Ｙｅｓ）、その時点における入力データＤｉｎ（イネーブル信号ＥＮ１の信号レベル）を抽出し、入力データ記憶部２３に記録された入力データ（変数ｄ）と比較する（ステップＳ５）。検出部２５２が入力データＤｉｎの変化を検出しない場合、すなわち入力データＤｉｎが変数ｄと同じ場合、ステップＳ１に移行する（ステップＳ５Ｎｏ）。尚、本実施の形態における変数ｄの初期値は“０”が設定されているものとする。
【００８０】
検出部２５２が入力データＤｉｎの変化を検出した場合、すなわち、入力データＤｉｎが入力データ記憶部２３に記録された変数ｄと異なる値を示す場合（ステップＳ５Ｙｅｓ）、論理回路演算部２５１は、メタステーブル状態設定部２６に設定されたフラグがＴｒｕｅかＦａｌｓｅかを確認する（ステップＳ６）。ここで、メタステーブル状態設定部２６に設定されたフラグがＦａｌｓｅである場合、論理回路演算部２５１は、メタステーブル状態設定部２６のフラグをＴｒｕｅに設定し、非同期回路をメタステーブル状態にする（ステップＳ７）。ステップＳ４からステップＳ７の処理によって、メタステーブル状態でない非同期回路は、入力データＤｉｎの変化に応じてメタステーブル状態に設定される。
【００８１】
メタステーブル状態フラグがＴｒｕｅに設定されると、検出部２５２は、ステップＳ７において抽出した入力データＤｉｎを変数ｄとして入力データ記憶部２３に記録する（ステップＳ８）。これにより、前回記録された入力データから変化した入力データｄを入力データＤｉｎとして保持することができる。
【００８２】
又、論理回路演算部２５１は、シミュレーション状態をシミュレーション状態保存部３０に保存する（ステップＳ２０２）。このとき、変数ｄの値も同じ時刻に対応付けて保存される。又、論理回路演算部２５１は、復元判定時刻Ｔｒｅｓｔａｒｔを設定する（ステップＳ２０３）。ここで、復元判定時刻Ｔｒｅｓｔａｒｔは、現在時刻から復元判定時刻Ｔｒｅｓｔａｒｔ間での期間がクロック信号ＣＬＫ２の周期より長くなるように設定される事が望ましい。更に、順序回路のＳｅｔｕｐ時間やＨｏｌｄ時間を加味した値を復元判定時刻Ｔｒｅｓｔａｒｔとして設定してもよい。
【００８３】
又、論理回路演算部２５１は、メタステーブル状態の終了時刻Ｔｅを設定する（ステップＳ９）。これにより、設計対象の非同期回路がメタステーブル状態となる期間が設定される。すなわち、メタステーブル状態となる期間は、ステップＳ７においてフラグが設定された時刻からステップＳ９において設定された終了時刻Ｔｅまでの期間となる。ここで、メタステーブル状態の終了時刻Ｔｅは、メタステーブル状態となる期間が、受信側順序回路ＦＦ２に入力されるクロック信号ＣＬＫ２の一周期より短い期間となるように設定される。尚、メタステーブル状態となる期間は、入力信号をラッチするときのクロック信号ＣＬＫ１のアクティブエッジからクロック信号ＣＬＫ２のアクティブエッジまでの時間Ｔａより長くなるように設定されることが好ましい。又、メタステーブル状態となる期間は、クロック信号ＣＬＫ１の一周期以上の期間であることが好ましい。更に、順序回路のＳｅｔｕｐ時間やＨｏｌｄ時間を加味した値を終了時刻Ｔｅとして設定してもよい。
【００８４】
ステップＳ７においてメタステーブル状態を示すフラグが設定されると、論理回路演算部２５１は、メタステーブル状態値Ｄｍ（“１”又は“０”のうち任意の値）を発生し、その値を送信側の順序回路ＦＦ１から出力信号Ｑ１として出力させる（ステップＳ１０、Ｓ１１）。これにより、メタステーブル状態として設定された非同期回路の順序回路ＦＦ１は、不正なイネーブル信号ＥＮ１に応じた出力信号Ｑ１として、論理が定まらないメタステーブル状態値Ｄｍを出力する。論理回路演算部２５１は、ステップＳ１１の後、ステップＳ１に移行して、次の時刻Ｔｎ＋１になるまで待機する。
【００８５】
ステップＳ６からステップＳ１１は、非同期回路がメタステーブル状態に設定されていない間に、入力データＤｉｎ（イネーブル信号ＥＮ１の信号レベル）が変化したときの処理である。これらの処理によって検証対象の非同期回路はメタステーブル状態に設定され、順序回路ＦＦ１から出力信号Ｑ１として論理が不定のイネーブル状態値Ｄｍが出力される。この際、イネーブル状態の期間とシミュレーション状態がシミュレーション状態保存部３０に保存され、復元判定時刻Ｔｒｅｓｔａｒｔも設定される（ステップＳ２０２、Ｓ２０３）。
【００８６】
一方、ステップＳ６において論理回路演算部２５１は、メタステーブル状態設定部２６に設定されたフラグがＴｒｕｅであることを確認すると（ステップＳ６Ｔｒｕｅ）、メタステーブル状態設定部２６に設定したフラグをＦａｌｓｅに変更する（ステップＳ１２）。これにより、非同期回路に設定されたメタステーブル状態が解除される。続いて、論理回路演算部２５１は、順序回路ＦＦ１において入力データＤｉｎがラッチされ、出力信号Ｑ１として出力させる（ステップＳ１３）。ステップＳ１３の後、ステップＳ１に移行して、次の時刻Ｔｎ＋１になるまで待機する。ステップＳ１２、Ｓ１３の処理によって、メタステーブル状態中における入力データＤｉｎの変化に応じてメタステーブル状態は解除され、順序回路ＦＦ１によって入力データＤｉｎがラッチされるようにシミュレーションすることができる。
【００８７】
メタステーブル状態に設定されている期間中、時刻がＴｎから次の時刻Ｔｎ＋１になると（ステップＳ１Ｙｅｓ、Ｓ２Ｔｒｕｅ）、論理回路演算部２５１は、終了時刻設定部２７に設定された終了時刻Ｔｅを確認する（ステップＳ３）。このとき、終了時刻Ｔｅを経過している場合、論理回路演算部２５１は、メタステーブル状態設定部２６に設定したフラグをＦａｌｓｅに設定する（ステップＳ１４）。これにより、非同期回路のメタステーブル状態は解除される。続いて、論理回路演算部２５１は、入力データ記憶部２３に記録されている変数ｄを順序回路ＦＦ１の出力信号Ｑ１として出力させる（ステップＳ１５）。ステップＳ１４、Ｓ１５の処理によって、入力データＤｉｎの変化の有無に関係なく、終了時刻Ｔｅに応じてメタステーブル状態が解除され、メタステーブル状態となる前の状態に戻される。ステップＳ１５の処理を終了すると、図１３Ａ、図１３Ｂ、及び図６Ｂに示すフローから離脱する。
【００８８】
又、論理回路演算部２５１は、順序回路ＦＦ１からの出力信号Ｑ１に応じた順序回路ＦＦ２の動作をシミュレーションする。論理回路演算部２５１は、順序回路ＦＦ２に入力されるクロック信号ＣＬＫがアクティブな時、順序回路ＦＦ２が出力信号Ｑ１をラッチするように動作させる。順序回路ＦＦ２の動作に関するシミュレーションは、従来と同じであるので詳細な説明は省略する。
【００８９】
更に、検出部２５２は、検証対象の非同期回路の受信側順序回路ＦＦ２から出力される出力信号Ｑ２（イネーブル信号ＥＮ２）の値を出力履歴Ｄ／Ｂ２７に記録する。この際、出力信号Ｑ２は、検証で用いられたクロック条件２１や入力データＤｉｎ（イネーブル信号ＥＮ１）の入力履歴と対応付けられて記録されることが好ましい。非同期回路の検証は、同一のクロック条件２１下で複数回行われる。出力結果解析部２５３は、その結果（出力信号Ｑ２の信号レベル）を統計処理することで、順序回路ＦＦ２の後段へのメタステーブル状態値Ｄｍの伝搬の有無、すなわち非同期回路が正常であるかどうかを確認する。
【００９０】
（シミュレーションにおける非同期回路の動作（第３の実施の形態））
図１２Ａ、図１２Ｂ、図１４Ａ、及び図１４Ｂは、本発明による回路検証装置１０によって検証された非同期回路の動作を示すタイミングチャートである。図１２Ａ、図１２Ｂ、図１４Ａ、及び図１４Ｂを参照して、本発明によるシミュレーションにおける非同期回路の動作（第３の実施の形態）の詳細を説明する。
【００９１】
図１２Ａは、クロック条件２１としてクロック周期ＣＬＫ２の周期（６時刻）がクロック周期ＣＬＫ１（２時刻）の３倍であり、それぞれのアクティブエッジ（立ち上がりエッジ）の位相差が１時刻分であるように設定された非同期回路のタイミングチャートである。図１３Ａ、図１３Ｂ、図６Ｂ、及び図１２Ａを参照して、時刻Ｔ３においてパルス幅が５時刻のイネーブル信号ＥＮ１が入力された非同期回路の動作（シミュレーション結果）について説明する。
【００９２】
１．順序回路ＦＦ１の動作
時刻Ｔ１〜Ｔ２：初期値として、メタステーブル状態設定部２６には、Ｆａｌｓｅを示すフラグが設定される。この期間、入力データＤｉｎ（イネーブル信号ＥＮ１の信号レベル）に変化がないため、ステップＳ１、Ｓ２、Ｓ４、Ｓ５の処理を繰り返す。又、順序回路ＦＦ１は、初期値として入力される入力データＤｉｎの値“０”をラッチし、出力信号Ｑ１として出力する。
時刻Ｔ３：クロック信号ＣＬＫ１がアクティブとなり、順序回路ＦＦ１への入力データＤｉｎの変化が検出される（ステップＳ１〜Ｓ５Ｙｅｓ）。これにより、メタステーブル状態設定部２６のフラグはＦａｌｓｅからＴｒｕｅに変更される（ステップＳ６、Ｓ７）。次に入力データＤｉｎ＝“１”が変数ｄとして保持される（ステップＳ８）。又、シミュレーション状態と、変数ｄの値がシミュレーション状態保存部３０に保存される。ここでは、入力データＤｉｎ（“１”）＝変数ｄ、出力信号Ｑ１（“０”）、出力信号Ｑ２（“０”）、クロック信号ＣＬ１（“１”）、クロック信号ＣＬ２（“０”）が時刻Ｔ３に対応付けられてシミュレーション状態保存部３０に記録される。更に、復元判定時刻Ｔｒｅｓｔａｒｔとして時刻Ｔ９が判定時刻設定部２９に設定される（ステップＳ２０２、Ｓ２０３）。更に、メタステーブル状態の終了時刻Ｔｅが時刻Ｔ７に設定される（ステップＳ９）。更に、順序回路ＦＦ１はメタステーブル状態値Ｄｍ（“１”又は“０“）をラッチし出力信号Ｑ１として出力する（ステップＳ１０、Ｓ１１）。
時刻Ｔ４：クロック信号ＣＬＫ１のアクティブエッジを検出しないため順序回路ＦＦ１は、現状のまま、メタステーブル状態値Ｄｍを出力する（ステップＳ１〜Ｓ４Ｎｏ）。
時刻Ｔ５：クロック信号ＣＬＫ１がアクティブとなるが、順序回路ＦＦ１への入力データＤｉが変化しないため、順序回路ＦＦ１は、現状のまま、メタステーブル状態値Ｄｍを出力する（ステップＳ１〜Ｓ５Ｎｏ）。
時刻Ｔ６：クロック信号ＣＬＫ１のアクティブエッジを検出しないため順序回路ＦＦ１は、現状のまま、メタステーブル状態値Ｄｍを出力する（ステップＳ１〜Ｓ４Ｎｏ）。
時刻Ｔ７：終了時刻Ｔｅに到達し（ステップＳ１〜Ｓ３Ｙｅｓ）、メタステーブル状態設定部２６のフラグがＦａｌｓｅに変更される（ステップＳ１４）。又、時刻Ｔ４において保持していた変数ｄ＝“１”を出力信号Ｑ１として出力する（ステップＳ１５）。
時刻Ｔ８：クロック信号ＣＬＫ１のアクティブエッジを検出しないため順序回路ＦＦ１は、現状のまま、イネーブル信号ＥＮの値“１”をラッチして出力信号Ｑ１として出力する。
時刻Ｔ９：復元判定時刻Ｔｒｅｓｔａｒｔに到達し、復元判定処理が行なわれる（ステップＳ２０１Ｙｅｓ、Ｓ２０５）。ここでは、時刻Ｔ９における出力信号Ｑ１の値“０”と、時刻Ｔ３においてシミュレーション状態保存部３０に記録された変数ｄ“１”とが比較される。出力信号Ｑ１の値と変数ｄは等しくないため、ステップＳ２の処理に移る（ステップＳ２０５Ｆａｌｓｅ）。クロック信号ＣＬＫ１がアクティブとなり、順序回路ＦＦ１は、イネーブル信号ＥＮ１の値“０”を出力信号Ｑ１として出力する。尚、論理回路演算部２５１は、終了時刻Ｔｅに達していなくても、受信側順序回路ＦＦ２のクロック信号ＣＬＫ２がアクティブとなった場合、終了時刻Ｔｅに到達したと判断しても構わない。
【００９３】
２．順序回路ＦＦ２の動作
時刻Ｔ１〜Ｔ３：この期間、出力データＱ１の信号レベルに変化がないため、順序回路ＦＦ２は、初期値として出力される出力信号Ｑ１の信号レベル“０”をラッチし、出力信号Ｑ２として出力する。
時刻Ｔ４：クロック信号ＣＬＫ２のアクティブエッジに応じて、順序回路ＦＦ２は、出力信号Ｑ１（メタステーブル値Ｄｍ）をラッチし、出力信号Ｑ１（イネーブル信号ＥＮ２）として後段の組み合せ回路ＣＣ２に対しメタステーブル値Ｄｍを出力する。
時刻Ｔ５〜Ｔ９：クロック信号ＣＬＫ２のアクティブエッジを検出しないため順序回路ＦＦ２は、現状のまま、メタステーブル状態値Ｄｍを出力する。
時刻Ｔ１０：クロック信号ＣＬＫ２がアクティブとなり、出力信号Ｑ１の値“０”をラッチして出力信号Ｑ２（イネーブル信号ＥＮ２）として組み合せ回路ＣＣ２に出力する。
【００９４】
図１４Ａは、クロック条件２１としてクロック周期ＣＬＫ２の周期（６時刻）がクロック周期ＣＬＫ１（２時刻）の３倍であり、それぞれのアクティブエッジ（立ち上がりエッジ）の位相差が３時刻分であるように設定された非同期回路のタイミングチャートである。又、図１４Ｂは、シミュレーション状態が復元された時刻以降の非同期回路のタイミングチャートである。図１３Ａ、図１３Ｂ、図６Ｂ、図１４Ａ、及び図１４Ｂを参照して、時刻Ｔ３においてパルス幅が８時刻のイネーブル信号ＥＮ１が入力された非同期回路の動作（シミュレーション結果）について説明する。
【００９５】
１．順序回路ＦＦ１の動作
時刻Ｔ１〜Ｔ２：初期値として、メタステーブル状態設定部２６には、Ｆａｌｓｅを示すフラグが設定され、判定時刻設定部２９には時刻Ｔ９が設定される。時刻Ｔ１〜Ｔ２期間内に、入力データＤｉｎ（イネーブル信号ＥＮ１の信号レベル）に変化がないため、ステップＳ１、Ｓ２、Ｓ４、Ｓ５の処理を繰り返す。又、順序回路ＦＦ１は、初期値として入力される入力データＤｉｎの値“０”をラッチし、出力信号Ｑ１として出力する。
時刻Ｔ３：クロック信号ＣＬＫ１がアクティブとなり、順序回路ＦＦ１への入力データＤｉの変化が検出される（ステップＳ１〜Ｓ５Ｙｅｓ）。これにより、メタステーブル状態設定部２６のフラグはＦａｌｓｅからＴｒｕｅに変更される（ステップＳ６、Ｓ７）。次に入力データＤｉｎ＝“１”が変数ｄとして保持される（ステップＳ８）。又、シミュレーション状態と、変数ｄの値が、シミュレーション状態保存部３０に保存される。ここでは、入力データＤｉｎ（“１”）＝変数ｄ、出力信号Ｑ１（“０”）、出力信号Ｑ２（“０”）、クロック信号ＣＬ１（“１”）、クロック信号ＣＬ２（“０”）が時刻Ｔ３に対応付けられてシミュレーション状態保存部３０に記録される。更に、復元判定時刻Ｔｒｅｓｔａｒｔとして時刻Ｔ９が判定時刻設定部２９に設定される（ステップＳ２０２、Ｓ２０３）。更に、メタステーブル状態の終了時刻Ｔｅが時刻Ｔ７に設定される（ステップＳ９）。更に、順序回路ＦＦ１はメタステーブル状態値Ｄｍ（“１”又は“０“）をラッチし出力信号Ｑ１として出力する（ステップＳ１０、Ｓ１１）。
時刻Ｔ４：クロック信号ＣＬＫ１のアクティブエッジを検出しないため順序回路ＦＦ１は、現状のまま、メタステーブル状態値Ｄｍを出力する（ステップＳ１〜Ｓ４Ｎｏ）。
時刻Ｔ５：クロック信号ＣＬＫ１がアクティブとなるが、順序回路ＦＦ１への入力データＤｉが変化しないため、順序回路ＦＦ１は、現状のまま、メタステーブル状態値Ｄｍを出力する（ステップＳ１〜Ｓ５Ｎｏ）。
時刻Ｔ６：クロック信号ＣＬＫ１のアクティブエッジを検出しないため順序回路ＦＦ１は、現状のまま、メタステーブル状態値Ｄｍを出力する（ステップＳ１〜Ｓ４Ｎｏ）。
時刻Ｔ７：クロック信号ＣＬＫ１のアクティブエッジを検出しないため順序回路ＦＦ１は、現状のまま、メタステーブル状態値Ｄｍを出力する（ステップＳ１〜Ｓ４Ｎｏ）。
時刻Ｔ８：クロック信号ＣＬＫ１のアクティブエッジを検出しないため順序回路ＦＦ１は、現状のまま、メタステーブル状態値Ｄｍを出力する（ステップＳ１〜Ｓ４Ｎｏ）。
時刻Ｔ９：復元判定時刻Ｔｒｅｓｔａｒｔに到達し、復元判定処理が行なわれる（ステップＳ２０１Ｙｅｓ、Ｓ２０５）。ここでは、時刻Ｔ９における出力信号Ｑ１の値“１”と、時刻Ｔ３においてシミュレーション状態保存部３０に記録された変数ｄ“１”とが比較される。出力信号Ｑ１が変数ｄと等しく、時刻Ｔ９における出力信号Ｑ２がメタステーブル状態Ｄｍであるため（ステップＳ２０５Ｔｒｕｅ）、メタステーブル状態設定部２６のフラグがＦａｌｓｅに変更される（ステップＳ２０６）。又、シミュレーション状態保存部３０に保存したシミュレーション状態に復元され、変数ｄの値も時刻Ｔ３における値に復元される（ステップＳ２０７）。このとき時刻も復元される。時刻の復元により時刻は時刻Ｔ３（図１４Ａ）に対応する時刻Ｔ３ｂ（図１４Ｂ）となる。
【００９６】
復元処理後は、復元後の時刻Ｔ３ｂ以降のシミュレーションが行なわれる。
時刻Ｔ３ｂ：シミュレーション状態が復元されると、復元された変数ｄの値が、順序回路ＦＦ１から出力信号Ｑ１として出力される（ステップＳ２０８）。又、終了時刻Ｔｅが現在時刻より前の時刻に設定される（ステップＳ２０９）。ここでは、現在設定されている時刻Ｔ９（時刻Ｔ９ｂ）から前の時刻Ｔ７（時刻Ｔ７ｂ）に設定される。
時刻Ｔ４ｂ：クロック信号ＣＬＫ１のアクティブエッジを検出しないため順序回路ＦＦ１は、現状のまま、変数ｄの値を出力する（ステップＳ１〜Ｓ４Ｎｏ）。
時刻Ｔ５ｂ：クロック信号ＣＬＫ１がアクティブとなるが、順序回路ＦＦ１への入力データＤｉが変化しないため、順序回路ＦＦ１は、現状のまま、変数ｄの値を出力する（ステップＳ１〜Ｓ５Ｎｏ）。
時刻Ｔ６ｂ：クロック信号ＣＬＫ１のアクティブエッジを検出しないため順序回路ＦＦ１は、現状のまま、変数ｄの値を出力する（ステップＳ１〜Ｓ４Ｎｏ）。
時刻Ｔ７ｂ：クロック信号ＣＬＫ１がアクティブとなるが、順序回路ＦＦ１への入力データＤｉが変化しないため、順序回路ＦＦ１は、現状のまま、変数ｄの値を出力する（ステップＳ１〜Ｓ５Ｎｏ）。
時刻Ｔ８ｂ：クロック信号ＣＬＫ１のアクティブエッジを検出しないため順序回路ＦＦ１は、現状のまま、変数ｄの値を出力する（ステップＳ１〜Ｓ４Ｎｏ）。
時刻Ｔ９ｂ：クロック信号ＣＬＫ１がアクティブとなるが、順序回路ＦＦ１への入力データＤｉが変化しないため、順序回路ＦＦ１は、現状のまま、変数ｄの値を出力する（ステップＳ１〜Ｓ５Ｎｏ）。
時刻Ｔ１０ｂ：クロック信号ＣＬＫ１のアクティブエッジを検出しないため順序回路ＦＦ１は、現状のまま、変数ｄの値を出力する（ステップＳ１〜Ｓ４Ｎｏ）。
時刻Ｔ１１ｂ：クロック信号ＣＬＫ１がアクティブとなり、順序回路ＦＦ１は、イネーブル信号ＥＮ１の値“０”を出力信号Ｑ１として出力する。
尚、論理回路演算部２５１は、終了時刻Ｔｅに達していなくても、受信側順序回路ＦＦ２のクロック信号ＣＬＫ２がアクティブとなった場合、終了時刻Ｔｅに到達したと判断しても構わない。
【００９７】
２．順序回路ＦＦ２の動作
時刻Ｔ１〜Ｔ５：この期間、出力データＱ１の信号レベルに変化がないため、順序回路ＦＦ２は、初期値として出力される出力信号Ｑ１の信号レベル“０”をラッチし、出力信号Ｑ２として出力する。
時刻Ｔ６：クロック信号ＣＬＫ２のアクティブエッジに応じて、順序回路ＦＦ２は、出力信号Ｑ１（メタステーブル値Ｄｍ）をラッチし、出力信号Ｑ１（イネーブル信号ＥＮ２）として後段の組み合せ回路ＣＣ２に対しメタステーブル値Ｄｍを出力する。
時刻Ｔ７〜Ｔ８：クロック信号ＣＬＫ２のアクティブエッジを検出しないため順序回路ＦＦ２は、現状のまま、メタステーブル状態値Ｄｍを出力する。
時刻Ｔ９：シミュレーション状態保存部３０に保存したシミュレーション状態の復元が実行され、時刻も復元される。時刻の復元により、図１４Ｂに示す時刻Ｔ３ｂとなる。
【００９８】
以下、復元後の時刻Ｔ３ｂ以降のシミュレーションが行なわれる。
Ｔ３ｂ〜Ｔ５ｂ：クロック信号ＣＬＫ２のアクティブエッジを検出しないため順序回路ＦＦ２は、現状のまま、ラッチした値“０”を出力する。
時刻Ｔ６ｂ：クロック信号ＣＬＫ２のアクティブエッジに応じて、順序回路ＦＦ２は、出力信号Ｑ１＝変数ｄをラッチし、出力信号Ｑ１（イネーブル信号ＥＮ２）として後段の組み合せ回路ＣＣ２に対しラッチした値を出力する。
時刻Ｔ７ｂ〜Ｔ１１ｂ：クロック信号ＣＬＫ２のアクティブエッジを検出しないため順序回路ＦＦ２は、現状のまま、変数ｄの値を出力する。
時刻Ｔ１３ｂ：クロック信号ＣＬＫ２がアクティブとなり、出力信号Ｑ１の値“０”をラッチして出力信号Ｑ２（イネーブル信号ＥＮ２）として組み合せ回路ＣＣ２に出力する。
【００９９】
以上のように、本発明による回路検証方法によれば、送信側順序回路ＦＦ１で発生したメタステーブル状態を受信側順序回路ＦＦ２の後段に接続された組み合せ回路ＣＣ２に伝搬させることができる。順序回路ＦＦ１と順序回路ＦＦ２がそれぞれに対する入力信号をラッチするときのアクティブクロックの時間差（時間Ｔａ）がクロックＣＬＫ１の一周期より大きい場合でも、シミュレーション状態を復元し順序回路ＦＦ２は、復元された変数ｄを組み合せ回路ＣＣ２に伝搬することができる。尚、ステップＳ６、Ｓ１２、Ｓ１３の処理は省略しても構わない。
【０１００】
例えば、図１２Ｂに示すように、アクティブクロックの時間差（時間Ｔａ）がクロック信号ＣＬＫの周期の１．５倍以上である場合でも、順序回路ＦＦ２は、シミュレーションの復元し、復元された変数ｄを組み合せ回路ＣＣ２に伝搬することができる。
【０１０１】
クロック信号ＣＬＫ２の周期が、クロック信号ＣＬＫ１の周期より長く、その差が大きい場合、時間Ｔａが大きくなる可能性が高くなる。このため、従来技術では、メタステーブル状態を受信側の順序回路ＦＦ２に接続された後段の組み合せ回路に伝搬する可能性が低くなり、クロック条件を変更して数多くの検証を行う必要があった。しかし、本発明による検証方法によれば、順序回路ＦＦ１からメタステーブル状態を出力する時間を長く設定できるため、組み合せ回路ＣＣ２にメタステーブルを伝搬する可能性が格段に向上される。このため、本発明による検証方法では、少ない回数で非同期回路の検証を行うことができる。又、機能シミュレーションに必要な非同期回路の記述を単純化することができ、機能シミュレーション時間を短縮化することができる。
【０１０２】
又、本実施の形態では、正常な入力データＤｉｎが順序回路ＦＦ２に伝達されるはずの期間にメタステーブル状態Ｄｍが伝達され、エラー有りと誤判定されることを防止することができる。例えば図１４Ａに示すように、クロック信号ＣＬＫ２の周期が、クロック信号ＣＬＫ１の周期より長く、イネーブル信号ＥＮ１の期間が、クロック信号ＣＬＫ２の一周期よりも長い場合において、イネーブル信号ＥＮ１の期間中にクロック信号ＣＬＫ２のアクティブエッジが、１回のみ現れるような信号状態である場合、回路に問題がなくてもメタステーブル状態Ｄｍが伝達され、エラーと判定されることがある。しかし、本実施の形態における論理回路演算部２５１は、図１４Ｂに示すように、シミュレーション状態を復元し、順序回路ＦＦ２に対し、正常な入力データＤｉｎ（シミュレーション状態保存時に保持された変数ｄ）を伝達し、メタステーブル状態Ｄｍを伝達しないように制御することができる。これにより上述した誤判定を防止することができる。
【０１０３】
（新検証モードにおける非同期回路検証動作（第４の実施の形態））
第４の実施の形態における回路検証装置１０の構成は、第３の実施の形態と同様であるので説明は省略する。
【０１０４】
図１５、図９、図１６及び図１４Ａ、図１４Ｂを参照して、本発明による回路検証装置１０の新検証モードにおける非同期回路の検証動作（第４の実施の形態）の詳細を説明する。図１５、図９、及び図１６は、本発明の回路検証装置１０によって検証される非同期回路における送信側順序回路ＦＦ１の出力値Ｑ１を決定する動作を示すフロー図である。第４の実施の形態における回路検証装置１０は、イベントが発生する度に信号値を評価するイベントドリブンシミュレータとして動作する。図１５に示すフローを実行するためのイベントは、送信側順序回路ＦＦ１へのクロック信号ＣＬＫのアクティブエッジ（例えば立ち上がりエッジ）の検出と定義する。
【０１０５】
検出部２５２は、アクティブエッジを検出するまでクロック信号ＣＬＫ１を監視する（ステップＳ２１）。クロック信号ＣＬＫ１のアクティブエッジが検出されるとイベントが発生し、論理回路演算部２５１はメタステーブル状態設定部２６を参照し、メタステーブル状態に設定されているかを確認する（ステップＳ２１Ｙｅｓ、Ｓ２２）。ここで、メタステーブル状態設定部２６に設定されたフラグがＦａｌｓｅである場合、ステップＳ２１に戻り次のイベント発生まで待機する。
【０１０６】
一方、メタステーブル状態設定部２６に設定されたフラグがＴｒｕｅである場合、検出部２５２は、その時点における入力データＤｉｎ（イネーブル信号ＥＮ１の信号レベル）を抽出し、入力データ記憶部２３に記録された入力データ（変数ｄ）と比較する（ステップＳ２３）。検出部２５２が入力データＤｉｎの変化を検出しない場合、すなわち入力データＤｉｎが変数ｄと同じ場合、ステップＳ２１に移行する（ステップＳ２３Ｎｏ）。尚、本実施の形態における変数ｄの初期値は“０”が設定されているものとする。
【０１０７】
検出部２５２が入力データＤｉｎの変化を検出した場合、すなわち、入力データＤｉｎが入力データ記憶部２３に記録された変数ｄと異なる値を示す場合（ステップＳ２３Ｙｅｓ）、論理回路演算部２５１は、メタステーブル状態設定部２６に設定されたフラグがＴｒｕｅかＦａｌｓｅかを確認する（ステップＳ２４）。ここで、メタステーブル状態設定部２６に設定されたフラグがＦａｌｓｅである場合、論理回路演算部２５１は、メタステーブル状態設定部２６のフラグをＴｒｕｅに設定し、非同期回路をメタステーブル状態にする（ステップＳ２５）。ステップＳ２３からステップＳ２５の処理によって、メタステーブル状態でない非同期回路は、入力データＤｉｎの変化に応じてメタステーブル状態に設定される。
【０１０８】
メタステーブル状態フラグがＴｒｕｅに設定されると、検出部２５２は、ステップＳ５において抽出した入力データＤｉｎを変数ｄとして入力データ記憶部２３に記録する（ステップＳ２６）。これにより、前回記録された入力データから変化した入力データｄを入力データＤｉｎとして保持することができる。
【０１０９】
又、論理回路演算部２５１は、シミュレーション状態および変数ｄの値をシミュレーション状態保存部３０に保存する（ステップＳ２５１）。又、論理回路演算部２５１は、復元判定イベントを設定する（ステップＳ２５２）。ここで、復元判定イベントの発生時刻Ｔｒｅｓｔａｒｔは、現在時刻よりクロック信号ＣＬＫ２の周期より長い時間に設定される事が望ましい。更に、順序回路のＳｅｔｕｐ時間やＨｏｌｄ時間を加味した値を復元判定時刻Ｔｒｅｓｔａｒｔとして設定してもよい。
【０１１０】
又、論理回路演算部２５１は、メタステーブル状態の終了イベントを設定する（ステップＳ２７）。これにより、設計対象の非同期回路がメタステーブル状態となる期間が設定される。ここで設定さえた終了イベントが発生すると、非同期回路のメタステーブル状態が終了する。このため、メタステーブル状態となる期間は、終了イベントの発生時刻（終了時刻Ｔｅ）によって設定される。終了イベントの発生時刻は，第１の実施の形態における終了時刻Ｔｅと同様な条件で設定される。
【０１１１】
ステップＳ２５においてメタステーブル状態を示すフラグが設定されると、論理回路演算部２５１は、メタステーブル状態値Ｄｍ（“１”又は“０”のうち任意の値）を発生し、その値を送信側の順序回路ＦＦ１から出力信号Ｑ１として出力させる（ステップＳ２８、Ｓ２９）。これにより、メタステーブル状態として設定された非同期回路の順序回路ＦＦ１は、不正なイネーブル信号ＥＮ１に応じた出力信号Ｑ１として、論理が定まらないメタステーブル状態値Ｄｍを出力する。論理回路演算部２５１は、ステップＳ２９の後、ステップＳ２１に移行して、次のアクティブエッジが検出されるまで待機する。
【０１１２】
ステップＳ２４からステップＳ２９は、非同期回路がメタステーブル状態に設定されていない間に、入力データＤｉｎ（イネーブル信号ＥＮ１の信号レベル）が変化したときの処理である。これらの処理によって検証対象の非同期回路はメタステーブル状態に設定され、順序回路ＦＦ１から出力信号Ｑ１として論理が不定のイネーブル状態値Ｄｍが出力される。この際、イネーブル状態の期間も設定される。
【０１１３】
一方、ステップＳ２４において、論理回路演算部２５１は、メタステーブル状態設定部２６に設定されたフラグがＴｒｕｅであることを確認すると（ステップＳ２４Ｔｒｕｅ）、メタステーブル状態設定部２６に設定したフラグをＦａｌｓｅに変更する（ステップＳ３０）。これにより、非同期回路に設定されたメタステーブル状態が解除される。続いて、論理回路演算部２５１は、順序回路ＦＦ１において入力データＤｉｎがラッチされ、出力信号Ｑ１として出力させる（ステップＳ３１）。ステップＳ３１の後、ステップＳ２１に移行して、次の時刻Ｔｎ＋１になるまで待機する。ステップＳ３０、Ｓ３１の処理によって、メタステーブル状態中における入力データＤｉｎの変化に応じてメタステーブル状態は解除され、順序回路ＦＦ１によって入力データＤｉｎがラッチされるようにシミュレーションすることができる。
【０１１４】
次に、ステップＳ２５２において設定された復元判定イベントが発生した場合、図１６に示すステップＳ２６１の復元判定処理に移行する。復元判定イベントが発生すると、論理回路演算部２５１は、復元判定を行う（ステップＳ２６１）。ステップＳ２６１における復元判定処理では、判定時刻における送信側順序回路ＦＦ１の出力信号Ｑ１の値が、入力データ記憶部２３で保持した値ｄと等しく、且つ、現在時刻における受信側順序回路ＦＦ２の出力信号Ｑ２の値が、ステーブル状態値Ｄｍと等しい場合、Ｔｒｕｅとなる（ステップＳ２６１Ｙｅｓ）。ステップＳ２６１における復元判定の結果がＦａｌｓｅの場合は、図１５、図９、図１６に示すフローから離脱する（ステップＳ２６１Ｎｏ）。
【０１１５】
復元判定Ｓ２６１の判定結果がＴｒｕｅの場合、メタステーブル状態設定部２６の値をＦａｌｓｅに変更する（ステップＳ２６２）。その後、シミュレーション状態保存部３０に保存したシミュレーション状態を復元する（ステップＳ２６３）。これにより順序回路ＦＦ１、ＦＦ２、その他の組み合わせ回路が保持している値、シミュレーション時刻、変数ｄが復元され、回路検証装置１０は、保存した時刻のシミュレーション状態を再現する。
【０１１６】
シミュレーション状態を復元するステップＳ２６３の処理後、論理回路演算部２５１は、シミュレーション保存部３０に保存された変数ｄの値を、順序回路ＦＦ１から出力信号Ｑ１として出力させる（ステップＳ２６４）。ステップＳ２０８の処理後、論理回路演算部２５１は、メタステーブル終了時刻Ｔｅに設定されているメタステーブル状態の終了イベントを消去する（ステップＳ２６５）。これにより、メタステーブル状態の終了イベントを再設定するまでメタステーブル状態の終了イベントは発生しない。ステップＳ２６５の処理を終了すると、図１５、図９、図１６に示すフローから離脱する。
【０１１７】
次に、ステップＳ２７において設定された終了イベントが発生した場合、図９に示すステップＳ３２の処理に移行する。終了イベントが発生すると論理回路演算部２５１は、メタステーブル状態設定部２６に設定したフラグをＦａｌｓｅに設定する（ステップＳ３２）。これにより、非同期回路のメタステーブル状態は解除される。続いて、論理回路演算部２５１は、入力データ記憶部２３に記録されている変数ｄを順序回路ＦＦ１の出力信号Ｑ１として出力させる（ステップＳ３３）。ステップＳ１４の処理によって、入力データＤｉｎの変化の有無に関係なく、終了時刻Ｔｅに応じてメタステーブル状態が解除される。又、ステップＳ１５の処理によって、クロック信号ＣＬＫ１がアクティブとならなくても、順序回路ＦＦ１に入力データＤｉｎをラッチさせることができる。ステップＳ３３の処理を終了すると、図１５、図９及び図１６に示すフローから離脱する。
【０１１８】
又、論理回路演算部２５１は、第１の実施の形態と同様に順序回路ＦＦ１からの出力信号Ｑ１に応じた順序回路ＦＦ２の動作をシミュレーションする。更に、検出部２５２は、第１の実施の形態と同様に検証対象の非同期回路の受信側順序回路ＦＦ２から出力される出力信号Ｑ２（イネーブル信号ＥＮ２）の値を出力履歴Ｄ／Ｂ２７に記録する。
【０１１９】
（シミュレーションにおける非同期回路の動作（第４の実施の形態））
図１５、図９、図１６及び図１２Ａを参照して、時刻Ｔ３においてパルス幅が５時刻のイネーブル信号ＥＮ１が入力された非同期回路の動作（シミュレーション結果）について説明する。
【０１２０】
１．順序回路ＦＦ１の動作
クロック信号ＣＬＫ１のアクティブエッジは時刻Ｔ１、Ｔ３、Ｔ５、Ｔ７、Ｔ９、…で検出されるため、これらの時刻でイベントが発生する。
時刻Ｔ１：初期値として、メタステーブル状態設定部２６には、Ｆａｌｓｅを示すフラグが設定されているため次のアクティブエッジの検出まで待機する（ステップＳ２１、Ｓ２２Ｆａｌｓｅ）。又、順序回路ＦＦ１は、初期値として入力される入力データＤｉｎの値“０”をラッチし、出力信号Ｑ１として出力する。
時刻Ｔ３：順序回路ＦＦ１への入力データＤｉの変化が検出される（ステップＳ２１〜Ｓ２３Ｙｅｓ）。これにより、メタステーブル状態設定部２６のフラグはＦａｌｓｅからＴｒｕｅに変更される（ステップＳ２４、Ｓ２５）。次に入力データＤｉｎ＝“１”が変数ｄとして保持される（ステップＳ２６）。又、シミュレーション状態と変数ｄの値がシミュレーション状態保存部３０に保存される。ここでは、入力データＤｉｎ（“１”）＝変数ｄ、出力信号Ｑ１（“０”）、出力信号Ｑ２（“０”）、クロック信号ＣＬ１（“１”）、クロック信号ＣＬ２（“０”）が時刻Ｔ３に対応付けられてシミュレーション状態保存部３０に記録される。更に、復元判定時刻Ｔｒｅｓｔａｒｔとして時刻Ｔ９が判定時刻設定部２９に設定される（ステップＳ２５１、Ｓ２５２）。更に、メタステーブル状態の終了イベントが設定される（ステップＳ２７）。この際、イベント発生時刻（終了時刻Ｔｅ）が時刻Ｔ７に設定される。更に、順序回路ＦＦ１はメタステーブル状態値Ｄｍ（“１”又は“０“）をラッチし出力信号Ｑ１として出力する（ステップＳ２８、Ｓ２９）。
時刻Ｔ５：順序回路ＦＦ１への入力データＤｉが変化しないため、順序回路ＦＦ１は、現状のまま、メタステーブル状態値Ｄｍを出力する（ステップＳ２１〜Ｓ２３Ｎｏ）。
時刻Ｔ７：イベント発生時刻（終了時刻Ｔｅ）に到達すると、メタステーブル状態の終了イベントが発生する。これにより、メタステーブル状態設定部２６のフラグがｆａｌｓｅに変更される（ステップＳ３２）。又、時刻Ｔ３において保持していた変数ｄ＝“１”を出力信号Ｑ１として出力する（ステップＳ３３）。
時刻Ｔ９：復元判定時刻Ｔｒｅｓｔａｒｔに到達し、復元判定イベントが発生して復元判定処理が行なわれる（ステップＳ２６１）。ここでは、時刻Ｔ９における出力信号Ｑ１の値“０”と、時刻Ｔ３においてシミュレーション状態保存部３０に記録された変数ｄ“１”とが比較される。出力信号Ｑ１の値と変数ｄは等しくないので、何もしないでフローから離脱する。
時刻Ｔ１２：順序回路ＦＦ１は、イネーブル信号ＥＮ１の値“０”を出力信号Ｑ１として出力する。
尚、論理回路演算部２５１は、終了イベント発生前に受信側順序回路ＦＦ２のクロック信号ＣＬＫ２がアクティブとなった場合、終了時刻Ｔｅに到達したと判断しても構わない。又、ステップＳ２４、Ｓ３０、Ｓ３１の処理は省略しても構わない。
【０１２１】
２．順序回路ＦＦ２の動作
第４の実施の形態における順序回路ＦＦ２の動作は、第３の実施の形態における動作と同様なので説明は省略する。
【０１２２】
図１４Ａは、クロック条件２１としてクロック周期ＣＬＫ２の周期（６時刻）がクロック周期ＣＬＫ１（２時刻）の３倍であり、それぞれのアクティブエッジ（立ち上がりエッジ）の位相差が３時刻分であるように設定された非同期回路のタイミングチャートである。又、図１４Ｂは、シミュレーション状態が復元された時刻以降の非同期回路のタイミングチャートである。図１５、図９、図１６、図１４Ａ、及び図１４Ｂを参照して、時刻Ｔ３においてパルス幅が８時刻のイネーブル信号ＥＮ１が入力された非同期回路の動作（シミュレーション結果）について説明する。
【０１２３】
１．順序回路ＦＦ１の動作
クロック信号ＣＬＫ１のアクティブエッジは時刻Ｔ１、Ｔ３、Ｔ５、Ｔ７、Ｔ９、…で検出されるため、これらの時刻でイベントが発生する。
時刻Ｔ１：初期値として、メタステーブル状態設定部２６には、Ｆａｌｓｅを示すフラグが設定されているため次のアクティブエッジの検出まで待機する（ステップＳ２１、Ｓ２２Ｆａｌｓｅ）。又、順序回路ＦＦ１は、初期値として入力される入力データＤｉｎの値“０”をラッチし、出力信号Ｑ１として出力する。
時刻Ｔ３：順序回路ＦＦ１への入力データＤｉの変化が検出される（ステップＳ２１〜Ｓ２３Ｙｅｓ）。これにより、メタステーブル状態設定部２６のフラグはＦａｌｓｅからＴｒｕｅに変更される（ステップＳ２４、Ｓ２５）。次に入力データＤｉｎ＝“１”が変数ｄとして保持される（ステップＳ２６）。又、シミュレーション状態と変数ｄの値がシミュレーション状態保存部３０に保存される（ステップＳ２５１）。ここでは、入力データＤｉｎ（“１”）＝変数ｄ、出力信号Ｑ１（“０”）、出力信号Ｑ２（“０”）、クロック信号ＣＬ１（“１”）、クロック信号ＣＬ２（“０”）が時刻Ｔ３に対応付けられてシミュレーション状態保存部３０に記録される。又、復元判定イベントが設定される。このとき、イベント発生時刻Ｔｒｅｓｔａｒｔとして時刻Ｔ９が設定される（ステップＳ２５２）。又、メタステーブル状態の終了イベントが設定される。この際、イベント発生時刻（終了時刻Ｔｅ）が時刻Ｔ７に設定される（ステップＳ２７）。更に、順序回路ＦＦ１はメタステーブル状態値Ｄｍ（“１”又は“０“）をラッチし出力信号Ｑ１として出力する（ステップＳ２８、Ｓ２９）。
時刻Ｔ５：順序回路ＦＦ１への入力データＤｉが変化しないため、順序回路ＦＦ１は、現状のまま、メタステーブル状態値Ｄｍを出力する（ステップＳ２１〜Ｓ２３Ｎｏ）。
時刻Ｔ７：順序回路ＦＦ１への入力データＤｉが変化しないため、順序回路ＦＦ１は、現状のまま、メタステーブル状態値Ｄｍを出力する（ステップＳ２１〜Ｓ２３Ｎｏ）。
時刻Ｔ９：イベント発生時刻Ｔｒｅｓｔａｒｔに到達すると、復元判定イベントが発生する。これにより復元判定処理が実行される（ステップＳ２６１）。ここでは、時刻Ｔ９における出力信号Ｑ１の値“１”と、時刻Ｔ３においてシミュレーション状態保存部３０に記録された変数ｄ“１”とが比較される。出力信号Ｑ１が変数ｄと等しく、時刻Ｔ９における出力信号Ｑ２がＤｍであるため（ステップＳ２６１Ｙｅｓ）、メタステーブル状態設定部２６のフラグがＦａｌｓｅに変更される（ステップＳ２６２）。又、シミュレーション状態保存部３０に保存したシミュレーション状態が復元され、変数ｄの値も復元される（ステップＳ２６３）。このとき時刻も復元される。時刻の復元により時刻は時刻Ｔ３（図１４Ａ）に対応する時刻Ｔ３ｂ（図１４Ｂ）となる。
【０１２４】
復元処理後は、復元後の時刻Ｔ３ｂ以降のシミュレーションが行なわれる。
時刻Ｔ３ｂ：シミュレーション状態は復元されると、復元された変数ｄの値が、順序回路ＦＦ１から出力信号Ｑ１として出力される（ステップＳ２６４）。又、メタステーブル終了時刻Ｔｅに設定されているメタステーブル状態の終了イベントが消去される（ステップＳ２６５）。
時刻Ｔ５ｂ：順序回路ＦＦ１への入力データＤｉが変化しないため、順序回路ＦＦ１は、現状のまま、変数ｄの値を出力する（ステップＳ２１〜Ｓ２３Ｎｏ）。
時刻Ｔ７ｂ：順序回路ＦＦ１への入力データＤｉが変化しないため、順序回路ＦＦ１は、現状のまま、変数ｄの値を出力する（ステップＳ２１〜Ｓ２３Ｎｏ）。
時刻Ｔ９ｂ：順序回路ＦＦ１への入力データＤｉが変化しないため、順序回路ＦＦ１は、現状のまま、変数ｄの値を出力する（ステップＳ２１〜Ｓ２３Ｎｏ）。
時刻Ｔ１１ｂ：順序回路ＦＦ１は、イネーブル信号ＥＮ１の値“０”を出力信号Ｑ１として出力する。
尚、論理回路演算部２５１は、終了イベント発生前に受信側順序回路ＦＦ２のクロック信号ＣＬＫ２がアクティブとなった場合、論理回路演算部２５１は、終了時刻Ｔｅに到達したと判断しても構わない。又、ステップＳ２４、Ｓ３０、Ｓ３１の処理は省略しても構わない。
【０１２５】
第４の実施の形態における順序回路ＦＦ２の動作は、第３の実施の形態における動作と同様なので説明は省略する。
【０１２６】
（検証動作）
次に、図１０を参照して、本発明による非同期回路の機能検証の動作の全体を説明する。本発明による回路検証装置１０は、先ず通常検証モードにおいて図５に示す検証対象回路の機能検証を行う（ステップＳ１０１）。この際、組み合せ回路ＣＣ２において予定した検証箇所の検証結果（信号レベルや遅延時間等）が実行結果Ａとして実行結果Ｄ／Ｂ２８に記録される。次に、回路検証装置１０は、新検証モードにおいて図５に示す検証対象回路の機能検証を行う（ステップＳ１０２）。この際、回路検証装置１０は、ステップＳ１０１と同じ検証箇所の検証結果を実行結果Ｂとして実行結果Ｄ／Ｂ２８に記録する。ステップＳ１０２では、順序回路ＦＦ１で発生したイネーブル状態が、組み合せ回路ＣＣ１に出力されたときの検証結果を得ることができる。出力結果解析部２５３は、実行結果Ａと実行結果Ｂとを比較して一致しない場合（ステップＳ１０３Ｎｏ）、検証対象回路２１を修正する（ステップＳ１０４）。論理回路演算部２５１は、修正された検証対象回路２１に対し再度ステップＳ１０１からＳ１０３の処理を実行する。回路検証装置１０は、実行結果Ａと実行結果Ｂとが一致するまで、２つのモードによる検証と比較を繰り返し、一致すると、検証処理を終了する（ステップＳ１０３Ｙｅｓ）。これにより、通常の機能検証結果と、メタスティビリティ状態における機能検証結果とに差が生じないことを確認できる。
【０１２７】
以上のように本発明による回路検証装置、回路検証方法によれば、非同期回路において送受信クロックの周期の差が大きい場合でもメタステーブル状態を受信側順序回路に伝播できる。これにより、送受信クロックのアクティブエッジの位相差が送信側のクロックの一周期を超える場合でも回路検証が実施できる。又、メタステーブル状態を模擬した非同期回路の機能検証において、送信側順序回路のメタステーブル状態が受信側順序回路に効率良く伝搬するため、従来技術で発生した検証不良の回数は減少する。このため、非同期回路に対する機能検証回数を少なくすることができ、検証時間を短縮することができる。更に、順序回路間のメタステーブル状態の伝搬をより確実に実行できるため、実際の非同期回路に近い動作をシミュレーションすることができる。
【０１２８】
以上、本発明の実施の形態を詳述してきたが、具体的な構成は上記実施の形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。
【図面の簡単な説明】
【０１２９】
【図１】図１は、従来技術によるシミュレーションにおける検証対象回路の動作を示すタイミングチャートである。
【図２Ａ】図２Ａは、従来技術によるシミュレーションにおける検証対象回路の動作を示すタイミングチャートである。
【図２Ｂ】図２Ｂは、従来技術によるシミュレーションにおいて生じる新たな課題を説明するタイミングチャートである。
【図３】図３は、本発明による第１及び第２の実施の形態における回路検証装置の構成を示す構成図である。
【図４】図４は、本発明による回路検証プログラムの構成を示す機能ブロック図である。
【図５】図５は、本発明に係る検証対象回路の構成を示すブロック図である。
【図６Ａ】図６Ａは、本発明による第１の実施の形態における回路検証装置の動作を示すフロー図である。
【図６Ｂ】図６Ｂは、本発明による第１及び第３の実施の形態における回路検証装置において、メタステーブル状態終了時刻となった際の動作を示すフロー図である。
【図７Ａ】図７Ａは、本発明による回路検証装置によってシミュレーションされた検証対象回路の動作を示すタイミングチャートである。
【図７Ｂ】図７Ｂは、本発明による回路検証装置によってシミュレーションされた検証対象回路の動作を示すタイミングチャートである。
【図８】図８は、本発明による第２の実施の形態における回路検証装置の動作を示すフロー図である。
【図９】図９は、本発明による第２の実施の形態における回路検証装置の動作を示すフロー図である。
【図１０】図１０は、本発明による回路検証方法を示すフロー図である。
【図１１】図１１は、本発明による第３及び第４の実施の形態における回路検証装置の構成を示す構成図である。
【図１２Ａ】図１２Ａは、本発明による回路検証装置によってシミュレーションされた検証対象回路の動作を示すタイミングチャートである。
【図１２Ｂ】図１２Ｂは、本発明による回路検証装置によってシミュレーションされた検証対象回路の動作を示すタイミングチャートである。
【図１３Ａ】図１３Ａは、本発明による第３の実施の形態における回路検証装置の動作を示すフロー図である。
【図１３Ｂ】図１３Ｂは、本発明による第３の実施の形態における回路検証装置の動作を示すフロー図である。
【図１４Ａ】図１４Ａは、本発明による回路検証装置によってシミュレーションされた検証対象回路の動作を示すタイミングチャートである。
【図１４Ｂ】図１４Ｂは、本発明による回路検証装置によってシミュレーションされた検証対象回路の動作を示すタイミングチャートである。
【図１５】図１５は、本発明による第４の実施の形態における回路検証装置の動作を示すフロー図である。
【図１６】図１６は、本発明による第４の実施の形態における回路検証装置の動作を示すフロー図である。
【符号の説明】
【０１３０】
１０：回路検証装置
１１：ＣＰＵ
１２：ＲＡＭ
１３：記憶装置
１４：入力装置
１５：出力装置
２１：検証対象回路
２２：クロック条件
２３：入力データ記憶部
２４：出力履歴データベース
２５：回路検証プログラム
２６：メタステーブル情報設定部
２７：終了時刻設定部
２８：実行結果データベース
２９：判定時刻設定部
３０：シミュレーション状態保存部
２５１：論理回路演算部
２５２：検出部
２５３：実行結果解析部
ＦＦ１、ＦＦ２：順序回路
Ｄｉｎ：入力データ
Ｔｅ：終了時刻
ＥＮ１、ＥＮ２：イネーブル信号
ＣＬＫ１、ＣＬＫ２：クロック信号
Ｑ１、Ｑ２：出力信号
【図１】
2009093635.tif 000003
【図２Ａ】
2009093635.tif 000004
【図２Ｂ】
2009093635.tif 000005
【図３】
2009093635.tif 000006
【図４】
2009093635.tif 000007
【図５】
2009093635.tif 000008
【図６Ａ】
2009093635.tif 000009
【図６Ｂ】
2009093635.tif 000010
【図７Ａ】
2009093635.tif 000011
【図７Ｂ】
2009093635.tif 000012
【図８】
2009093635.tif 000013
【図９】
2009093635.tif 000014
【図１０】
2009093635.tif 000015
【図１１】
2009093635.tif 000016
【図１２Ａ】
2009093635.tif 000017
【図１２Ｂ】
2009093635.tif 000018
【図１３Ａ】
2009093635.tif 000019
【図１３Ｂ】
2009093635.tif 000020
【図１４Ａ】
2009093635.tif 000021
【図１４Ｂ】
2009093635.tif 000022
【図１５】
2009093635.tif 000023
【図１６】
2009093635.tif 000024