(57)【要約】【課題】メタステーブル状態をより確実に想定して、非同期順序回路を含む論理回路の機能を検証することができる回路検証装置及び回路検証方法を提供する。【解決手段】論理回路の機能を検証するコンピュータ２に、非同期順序回路２０１のクロック周期Ｔｄｉｓｔと、非同期順序回路２０１の第１段目のフリップフロップ回路ＦＦ０１のメタステーブル収束時間Ｔｍｃと、に基づいて、（１）式により、メタステーブル状態値の生成段数ｃを算出する生成段数算出部と、回路設計プログラムを解析することにより、フリップフロップ回路ＦＦ０１から第ｎ段目のフリップフロップ回路までを特定する順序回路特定部と、機能シミュレーションにおいて、第１段目から第ｎ段目のフリップフロップ回路に、それぞれ生成段数ｃから（生成段数ｃ−（ｎ−１））に等しいクロックサイクル数分、メタステーブル状態値を出力させる機能シミュレーション制御部と、を備えた。【選択図】図１
2011215852.tif 000002
【特許請求の範囲】
【請求項１】
論理回路の機能を検証する回路検証装置であって、
前記論理回路に含まれる非同期順序回路のクロック周期Ｔｄｉｓｔと、前記非同期順序回路の第１段目の順序回路のメタステーブル収束時間Ｔｍｃと、に基づいて、下記の（１）式により、メタステーブル状態値の生成段数ｃを算出する生成段数算出部と、
所定のプログラム言語で記述された、前記論理回路の回路設計プログラムを解析することにより、前記第１段目の順序回路から前記第１段目の順序回路の出力側に接続される第ｎ段目（ｎは、ｎ≧２を満たす整数）の順序回路までを特定する順序回路特定部と、
前記論理回路の機能シミュレーションにおいて、前記第１段目から第ｎ段目の順序回路に、それぞれ前記生成段数ｃから（前記生成段数ｃ−（ｎ−１））に等しいクロックサイクル数分、前記メタステーブル状態値を出力させる機能シミュレーション制御部と、
を備える回路検証装置。
ｃ＝ｉｎｔ（Ｔｍｃ／Ｔｄｉｓｔ）＋１    ・・・・・（１）
【請求項２】
前記シミュレーション制御部は、
前記順序回路特定部により特定された前記順序回路の入力信号の値が変化したか否かを判断し、前記順序回路特定部により特定された前記順序回路の入力信号の値が変化したときから、当該順序回路から前記メタステーブル状態値を出力させる請求項１に記載の回路検証装置。
【請求項３】
前記機能シミュレーション制御部は、
前記順序回路特定部により特定された前記順序回路の入力信号の値が変化したか否かを判断し、前記順序回路特定部により特定された前記順序回路の入力信号の値が変化した場合に、当該順序回路の前段の回路がメタステーブル状態か否かを判断し、前記前段の回路がメタステーブル状態である場合に、当該順序回路の入力信号の値が変化したときから、当該順序回路から前記メタステーブル状態値を出力させる請求項１又は２に記載の回路検証装置。
【請求項４】
前記第１段目の順序回路から前記第ｎ段目の順序回路のインスタンス名と、前記生成段数ｃから（前記生成段数ｃ−（ｎ−１））に等しいクロックサイクル数と、を対応付けられたＦＦテーブルを記憶部に格納するＦＦテーブル格納制御部を備える請求項１乃至３の何れか一項に記載の回路検証装置。
【請求項５】
論理回路の機能を検証する回路検証方法であって、
コンピュータが、
前記論理回路に含まれる非同期順序回路のクロック周期Ｔｄｉｓｔと、前記非同期順序回路の第１段目の順序回路のメタステーブル収束時間Ｔｍｃと、に基づいて、下記の（１）式により、メタステーブル状態値の生成段数ｃを算出する生成段数算出処理と、
所定のプログラム言語で記述された、前記論理回路の回路設計プログラムを解析することにより、前記第１段目の順序回路から前記第１段目の順序回路の出力側に接続される第ｎ段目（ｎは、ｎ≧２を満たす整数）の順序回路までを特定する順序回路特定処理と、
前記論理回路の機能シミュレーションにおいて、前記第１段目から第ｎ段目の順序回路に、それぞれ前記生成段数ｃから（前記生成段数ｃ−（ｎ−１））に等しいクロックサイクル数分、前記メタステーブル状態値を出力させる機能シミュレーション制御処理と、
を実行する回路検証方法。
ｃ＝ｉｎｔ（Ｔｍｃ／Ｔｄｉｓｔ）＋１    ・・・・・（１）
【請求項６】
前記シミュレーション制御処理において、前記コンピュータは、
前記順序回路特定処理において特定した前記順序回路の入力信号の値が変化したか否かを判断し、前記順序回路特定処理において特定した前記順序回路の入力信号の値が変化したときから、当該順序回路から前記メタステーブル状態値を出力させる請求項５に記載の回路検証方法。
【請求項７】
前記機能シミュレーション制御処理において、前記コンピュータは、
前記順序回路特定処理において特定した前記順序回路の入力信号の値が変化したか否かを判断し、前記順序回路特定処理において特定した前記順序回路の入力信号の値が変化した場合に、当該順序回路の前段の回路がメタステーブル状態か否かを判断し、前記前段の回路がメタステーブル状態である場合に、当該順序回路の入力信号の値が変化したときから、当該順序回路から前記メタステーブル状態値を出力させる請求項５又は６に記載の回路検証方法。
【請求項８】
前記コンピュータは、
前記第１段目の順序回路から前記第ｎ段目の順序回路のインスタンス名と、前記生成段数ｃから（前記生成段数ｃ−（ｎ−１））に等しいクロックサイクル数と、を対応付けられたＦＦテーブルを記憶部に格納するＦＦテーブル格納制御処理を実行する請求項５乃至７の何れか一項に記載の回路検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、回路検証装置及び回路検証方法に関し、特に、順序回路を含む非同期回路を検証する回路検証装置及び回路検証方法に関する。
【背景技術】
【０００２】
回路設計の際には、ＨＤＬ（Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）レベル、ゲートレベル、トランジスタレベル等においてシミュレーションを行うことにより、設計した回路の機能を検証する。以下、回路の機能を検証するために行われるシミュレーションを機能シミュレーションと称する。
【０００３】
回路には非同期回路が含まれることがある。また、複数のクロック信号を有する非同期順序回路では、異なるクロック信号で動作する回路間で信号転送が行われる場合がある。例えば、一のクロック信号で動作する回路から出力された発振状態が、他のクロック信号で動作する非同期順序回路や組み合せ回路に伝搬する場合がある。この場合、前段の順序回路から出力される信号の論理は定まらなくなる。このように、回路の出力信号の論理が定まらない状態をメタステーブル状態と呼ぶ。順序回路がメタステーブル状態となることは、非同期順序回路を備える論理回路の異常動作の一因となっている。
【０００４】
そのため、ＨＤＬレベルにおいて、順序回路がメタステーブル状態となることを考慮した機能シミュレーションが行われている。
例えば、特許文献１には、メタステーブル状態を示す値に代えて、記憶手段に記憶された信号を出力信号として出力させる処理を行うことにより、メタステーブル状態を考慮した機能シミュレーションを行う非同期回路の検証方法が記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第３９５３２５０号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１に記載の機能シミュレーションでは、順序回路に発生したメタステーブル状態を示す値は、クロック信号の周期を超えない任意の時間となっている。そのため、特許文献１に記載の機能シミュレーションでは、前段の順序回路で発生するメタステーブル状態を再現することはできるが、後段の順序回路で発生するメタステーブル状態を再現することができないという問題がある。
実際には、前段の順序回路がメタステーブル状態となり、当該メタステーブル状態の収束時間が１クロック以内に収まらない場合には、後段の順序回路もメタステーブル状態となるが、特許文献１に記載の機能シミュレーションでは、このような状態を再現することができない。
【課題を解決するための手段】
【０００７】
本発明の第１の態様に係る回路検証装置は、論理回路の機能を検証する装置である。前記回路検証装置は、生成段数算出部、順序回路特定部、機能シミュレーション制御部を備える。前記生成段数算出部は、前記論理回路に含まれる非同期順序回路のクロック周期Ｔｄｉｓｔと、前記非同期順序回路の第１段目の順序回路のメタステーブル収束時間Ｔｍｃと、に基づいて、下記の（１）式により、メタステーブル状態値の生成段数ｃを算出する。また、前記順序回路特定部は、所定のプログラム言語で記述された、前記論理回路の回路設計プログラムを解析することにより、前記第１段目の順序回路から前記第１段目の順序回路の出力側に接続される第ｎ段目（ｎは、ｎ≧２を満たす整数）の順序回路までを特定する。また、前記機能シミュレーション制御部は、前記論理回路の機能シミュレーションにおいて、前記第１段目から第ｎ段目の順序回路に、それぞれ前記生成段数ｃから（前記生成段数ｃ−（ｎ−１））に等しいクロックサイクル数分、前記メタステーブル状態値を出力させる。
ｃ＝ｉｎｔ（Ｔｍｃ／Ｔｄｉｓｔ）＋１    ・・・・・（１）
【０００８】
本発明の第１の態様においては、非同期順序回路において、１段目の順序回路は生成段数ｃに等しいクロックサイクルの間、・・・ｎ段目の順序回路は（生成段数ｃ−（ｎ−１））に等しいクロックサイクルの間、メタステーブル状態値を出力する。そのため、非同期順序回路において、２段目以降の順序回路において発生するメタステーブル状態についても確実にシミュレーションすることができる。そのため、メタステーブル状態をより確実に想定して、非同期順序回路を含む論理回路の機能を検証することができる。
【０００９】
本発明の第２の態様に係る回路検証方法は、論理回路の機能を検証する方法である。前記回路検証方法は、コンピュータが、生成段数算出処理と、順序回路特定処理と、機能シミュレーション制御処理と、を実行する方法である。前記生成段数算出処理において、前記コンピュータは、前記論理回路に含まれる非同期順序回路のクロック周期Ｔｄｉｓｔと、前記非同期順序回路の第１段目の順序回路のメタステーブル収束時間Ｔｍｃと、に基づいて、下記の（１）式により、メタステーブル状態値の生成段数ｃを算出する。また、前記順序回路特定処理において、前記コンピュータは、所定のプログラム言語で記述された、前記論理回路の回路設計プログラムを解析することにより、前記第１段目の順序回路から前記第１段目の順序回路の出力側に接続される第ｎ段目（ｎは、ｎ≧２を満たす整数）の順序回路までを特定する。また、前記機能シミュレーション制御処理において、前記コンピュータは、前記論理回路の機能シミュレーションにおいて、前記第１段目から第ｎ段目の順序回路に、それぞれ前記生成段数ｃから（前記生成段数ｃ−（ｎ−１））に等しいクロックサイクル数分、前記メタステーブル状態値を出力させる。
ｃ＝ｉｎｔ（Ｔｍｃ／Ｔｄｉｓｔ）＋１    ・・・・・（１）
【００１０】
本発明の第２の態様においては、非同期順序回路において、１段目の順序回路は生成段数ｃに等しいクロックサイクルの間、・・・ｎ段目の順序回路は（生成段数ｃ−（ｎ−１））に等しいクロックサイクルの間、メタステーブル状態値を出力する。そのため、非同期順序回路において、２段目以降の順序回路において発生するメタステーブル状態についても確実にシミュレーションすることができる。そのため、メタステーブル状態をより確実に想定して、非同期順序回路を含む論理回路の機能を検証することができる。
【発明の効果】
【００１１】
本発明により、メタステーブル状態をより確実に想定して、非同期順序回路を含む論理回路の機能を検証することができる。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施の形態１に係る回路検証システムの構成の一例を示すブロック図である。
【図２】本発明の実施の形態１に係るコンピュータにおける回路検証方法を説明するフローチャートである。
【図３】本発明の実施の形態１に係るＦＦテーブルを示す図である。
【図４】本発明の実施の形態１に係る回路検証方法における順序回路の特定方法を説明するフローチャートである。
【図５】本発明の実施の形態１に係る回路検証方法における機能シミュレーションを説明するフローチャートである。
【図６】本発明の実施の形態１に係る回路検証方法における機能シミュレーションを説明するフローチャートである。
【図７】非同期回路の一例を示す図である。
【図８】本発明の実施の形態１に係る回路検証方法における機能シミュレーションを説明するタイミングチャートである。
【図９】本発明の実施の形態２に係る回路検証方法における機能シミュレーションを説明するフローチャートである。
【図１０】本発明の実施の形態２に係る回路検証方法における機能シミュレーションを説明するタイミングチャートである。
【発明を実施するための形態】
【００１３】
以下に、本発明を適用可能な実施の形態を説明する。なお、本発明は、以下の実施の形態に限定されるものではない。
実施の形態１．
図１は、本発明の実施の形態１に係る回路検証システム１００の構成の一例を示すブロック図である。
図１に示すように、回路検証システム１００は、サーバ１、コンピュータ２，・・・等を備えている。サーバ１とコンピュータ２（回路検証装置），・・・とはネットワーク３を介して通信可能に接続されている。
また、サーバ１は、記録媒体１０を備えている。記録媒体１０は、シミュレーションプログラム等のＣＡＤ設計ツールを格納している。
また、記録媒体１０は、クロック周期Ｔｄｉｓｔ、メタステーブル収束時間Ｔｍｃ、変数ｃ（後述）等の定数、変数を格納している。
ここで、メタステーブル収束時間Ｔｍｃは、一のクロック信号で動作する回路から出力された信号が入力される、他のクロック信号で動作する非同期順序回路の第１段目の順序回路がメタステーブル状態となった場合に、当該第１段目の順序回路の出力が安定するまでの時間である。
また、クロック周期Ｔｄｉｓｔは、一のクロック信号で動作する回路から出力された信号が入力される、他のクロック信号で動作する非同期順序回路のクロック周期である。
また、変数ｃとは、メタステーブル状態値Ｄｍの生成段数である。また、メタステーブル状態値Ｄｍとは、メタステーブル状態となった順序回路が出力する信号の値である。
なお、メタステーブル収束時間Ｔｍｃ及びクロック周期Ｔｄｉｓｔは、経験則に基づいて決定される値である。
【００１４】
コンピュータ２は、エンジニアワークステーション等である。また、コンピュータ２は、例えば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲＯＭ（Ｒｅａｄ  Ｏｎｒｙ  Ｍｅｍｏｒｙ）等を備えている。なお、図１において、ＣＰＵ、ＲＡＭ、ＲＯＭの図示は省略されている。
ＲＯＭ（記憶部）は、コンピュータ２の各部を制御するための各種プログラム及び各種データを格納している。そして、ＣＰＵは、ＲＯＭに格納された各種プログラムを実行し、ＲＡＭに展開することにより、コンピュータ２の各部を制御する。
例えば、ＣＰＵは、ＲＯＭに格納された各種プログラムを実行することにより、ネットワーク３を介して、サーバ１の記録媒体１０に格納されているＣＡＤ設計ツールやクロック周期Ｔｄｉｓｔ、メタステーブル収束時間Ｔｍｃ、変数ｃ等の定数、変数等を取得し、ＲＯＭに格納する。また、ＲＯＭは、ＣＰＵによって生成されたＦＦテーブル４（後述）を格納する。
また、ＣＰＵは、ＲＯＭに格納されているＣＡＤ設計ツールを実行することにより、回路検証を行う。例えば、ＣＰＵは、ＲＯＭに格納されているＣＡＤ設計ツールを実行することにより、生成段数算出部、順序回路特定部、機能シミュレーション制御部、ＦＦテーブル格納制御部等として機能する。
【００１５】
なお、コンピュータ２の構成は、上記に限定されるものではない。例えば、上記各種プログラム等は、様々なタイプの非一時的なコンピュータ可読媒体（ｎｏｎ−ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）に格納されればよい。例えば、上記各種プログラムは、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  ＰＲＯＭ）、フラッシュＲＯＭ、ＲＡＭ））等に格納されていてもよい。
【００１６】
次に、本発明の実施の形態１に係るコンピュータ２における回路検証方法について、図２に示すフローチャートを参照しながら説明する。
まず、コンピュータ２は、ＲＴＬ（Ｒｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ）やネットリストレベルの記述を解析し、非同期転送に関係する順序回路を特定する（ステップＳ１）。
【００１７】
具体的には、コンピュータ２は、図３に示すＦＦテーブル４を作成し、ＲＯＭに格納する。ＦＦテーブル４は、メタステーブル状態となる順序回路のインスタンス名４１と、メタステーブル状態が継続する時間を表すクロックサイクル数Ｃｍｅｔａ４２とが関連付けられた情報である。
コンピュータ２は、メタステーブル収束時間Ｔｍｃとクロック周期Ｔｄｉｓｔとに基づいて、メタステーブル状態となる順序回路を特定する。換言すれば、コンピュータ２は、一のクロック信号で動作する回路から出力された信号が入力される、他のクロック信号で動作する非同期順序回路の第１段目の順序回路を特定する。そして、特定した順序回路のインスタンス名をＦＦテーブル４のインスタンス名４１に格納する。
また、コンピュータ２は、メタステーブル収束時間Ｔｍｃとクロック周期Ｔｄｉｓｔとに基づいて、クロックサイクル数Ｃｍｅｔａを決定し、ＦＦテーブル４のクロックサイクル数Ｃｍｅｔａ４２に格納する。
さらに、コンピュータ２は、上記で特定した第１段目の順序回路の出力側（後段側）に接続されている第ｎ段目（ｎは、ｎ≧２を満たす整数）の順序回路を新たに特定する。そして、新たに特定した第ｎ段目の順序回路のインスタンス名とクロックサイクル数Ｃｍｅｔａとを対応付けて、ＦＦテーブル４に格納する。
【００１８】
次に、コンピュータ２は、シミュレーション前処理を行う（ステップＳ２）。
具体的には、コンピュータ２は、ステップＳ１において特定した順序回路に、シミュレーションのための動作フローを割り当てる。より具体的には、ステップＳ１において特定した順序回路以外の回路に対しては、後述する図５のフローチャートで示される動作フローを割り当てる。また、ステップＳ１において特定した順序回路に対しては、図６のフローチャートで示される動作フローを割り当てる。例えば、ステップＳ１において特定した順序回路以外の回路に対しては、図５のフローチャートで示される動作フローを割り当てるフラグがＯＮとなり、ステップＳ１において特定した順序回路に対しては、図６のフローチャートで示される動作フローを割り当てるフラグがＯＮとなるように、回路毎にフロー割り当てフラグを決定する（図示省略）。
【００１９】
次に、コンピュータ２は、ステップＳ２において割り当てた動作フローに従って、各回路の機能シミュレーションを行う（ステップＳ３；機能シミュレーション制御処理）。ここで、機能シミュレーションとは、回路の機能を検証するために行われるシミュレーションである。具体的には、コンピュータ２が、ＲＴＬやネットリストで記述された回路設計プログラムを実行することにより、当該回路設計プログラムによって表される回路を仮想的に動作させて、得られる動作結果から、当該回路の機能を検証する。
【００２０】
次に、図２のステップＳ１における順序回路の特定方法について、図４に示すフローチャートを参照しながら、説明する。
まず、コンピュータ２は、メタステーブル状態値Ｄｍの生成段数ｃを、下記の（１）式を用いて計算する（ステップＳ１０１；生成段数算出処理）。
ｃ＝ｉｎｔ（Ｔｍｃ／Ｔｄｉｓｔ）＋１    ・・・・・（１）
【００２１】
次に、コンピュータ２は、メタステーブル状態となる順序回路を特定する。換言すれば、コンピュータ２は、一のクロック信号で動作する回路から出力された信号が入力される、他のクロック信号で動作する非同期順序回路の第１段目の順序回路を特定する（ステップＳ１０２；順序回路特定処理）。
【００２２】
次いで、コンピュータ２は、ステップＳ１０２において特定した第１段目の順序回路のインスタンス名と、（１）式から求めた生成段数ｃ（クロックサイクル数）とを対応付けて、ＦＦテーブル４に格納する（ステップＳ１０３；ＦＦテーブル格納制御処理）。ここで、生成段数ｃはクロックサイクル数としてＦＦテーブル４に格納される。
【００２３】
次に、コンピュータ２は、ステップＳ１０１で求めた生成段数ｃが１以下か否かを判断する（ステップＳ１０４）。
ステップＳ１０４において、生成段数ｃが１以下である場合（ステップＳ１０４；Ｙｅｓ）、本処理を終了する。
ステップＳ１０４において、生成段数ｃが１より大きい場合（ステップＳ１０４；Ｎｏ）、当該生成段数ｃからｎ−１（ｎは、ｎ≧２を満たす整数）を減ずる（ステップＳ１０５）。
【００２４】
次に、コンピュータ２は、ステップＳ１０２で特定した第１段目の順序回路の出力側（後段側）に接続されている第ｎ段目（ｎは、ｎ≧２を満たす整数）の順序回路を新たに特定する（ステップＳ１０６；順序回路特定処理）。
【００２５】
次に、コンピュータ２は、ステップＳ１０６において特定した第ｎ段目の順序回路のインスタンス名と、ステップＳ１０５において算出した生成段数（ｃ−（ｎ−１））とを対応付けて、ＦＦテーブル４に格納し（ステップＳ１０７；ＦＦテーブル格納制御処理）、ステップＳ１０４に戻る。換言すれば、コンピュータ２は、ステップＳ１０５において算出した生成段数（ｃ−（ｎ−１））を、ステップＳ１０６において特定した第ｎ段目の順序回路のクロックサイクル数として、ＦＦテーブル４に格納する。
【００２６】
次に、図２のステップＳ１の処理、すなわち図４に示す処理において特定された順序回路以外の回路に対して割り当てられた動作フローについて、図５に示すフローチャートを参照しながら説明する。換言すれば、図２のステップＳ１において特定された順序回路以外の回路に対して、図２のステップＳ３において行われる機能シミュレーションについて、図５に示すフローチャートについて説明する。ここで、図２のステップＳ１において特定された順序回路以外の回路として、フリップフロップ回路を例に挙げて説明する。
【００２７】
まず、フリップフロップ回路は、入力されたクロック信号のアクティブエッジを検出したか否か判断する（ステップＳ２０１）。
ステップＳ２０１において、フリップフロップ回路が、入力されたクロック信号のアクティブエッジを検出しなかった場合（ステップＳ２０１；Ｎｏ）、ステップＳ２０３に進む。
ステップＳ２０１において、フリップフロップ回路が、入力されたクロック信号のアクティブエッジを検出した場合（ステップＳ２０１；Ｙｅｓ）、フリップフロップ回路は、入力信号を保持する（ステップＳ２０２）。
【００２８】
次に、フリップフロップ回路は、保持している信号を出力する（ステップＳ２０３）。
【００２９】
次に、図２のステップＳ１の処理、すなわち図４に示す処理において特定された順序回路に対して割り当てられた動作フローについて、図６に示すフローチャートを参照しながら説明する。換言すれば、図２のステップＳ１において特定された順序回路に対して、図２のステップＳ３において行われる機能シミュレーションについて、図６に示すフローチャートについて説明する。
なお、図６に示す各ステップの処理は、全ての順序回路に入力されるクロック信号の周期を超えないで、所定の時間内（シミュレーションサイクル１〜２の間、・・・シミュレーションサイクルｍ〜ｍ＋１の間（ｍは、自然数））に行われるものとする。また、生成段数ｃ、各順序回路が保持する値、各種のフラグは順序回路毎に固有の値であり、コンピュータ２のＲＯＭ等のローカルなハードディスク又はメモリなどに記憶され、少なくとも機能シミュレーションの間保持されるものである。
【００３０】
まず、順序回路は、入力されたクロック信号のアクティブエッジを検出したか否か判断する（ステップＳ３０１）。
ステップＳ３０１において、順序回路が、入力されたクロック信号のアクティブエッジを検出した場合（ステップＳ３０１；Ｙｅｓ）、コンピュータ２は、ＦＦテーブル４を参照し、当該順序回路のインスタンス名に対応するクロックサイクル数（生成段数ｃ）が０より大きいか否かを判断する（ステップＳ３０２）。
【００３１】
ステップＳ３０２において、クロックサイクル数（生成段数ｃ）が０より大きかった場合（ステップＳ３０２；Ｙｅｓ）、コンピュータ２は、当該クロックサイクル数（生成段数ｃ）から１を減ずる（ステップＳ３０３）。
ステップＳ３０２において、クロックサイクル数（生成段数ｃ）が０以下である場合（ステップＳ３０２；Ｎｏ）、コンピュータ２は、順序回路に入力される信号の値に変化があるか否かを判断する（ステップＳ３０４）。
【００３２】
ステップＳ３０４において、順序回路に入力される信号の値に変化がない場合（ステップＳ３０４；Ｎｏ）、コンピュータ２は、当該クロックサイクル数（生成段数ｃ）が０であるか否かを判断することにより、当該順序回路がメタステーブル状態であるか否かを判断する（ステップＳ３０５）。
ステップＳ３０５において、当該クロックサイクル数（生成段数ｃ）が０でない場合、すなわち、当該順序回路がメタステーブル状態である場合（ステップＳ３０５；Ｎｏ）、ステップＳ３０８に進む。
ステップＳ３０５において、当該クロックサイクル数（生成段数ｃ）が０である場合、すなわち、当該順序回路がメタステーブル状態ではない場合（ステップＳ３０５；Ｙｅｓ）、ステップＳ３１２に進む。
【００３３】
ステップＳ３０４において、順序回路に入力される信号の値に変化がある場合（ステップＳ３０４；Ｙｅｓ）、コンピュータ２は、ＦＦテーブル４を参照し、当該順序回路のインスタンス名に対応するクロックサイクル数（生成段数ｃ）をメタステーブルカウンタの値として設定する（ステップＳ３０６）。なお、コンピュータ２のＣＰＵがＲＯＭに格納されているメタステーブルカウンタプログラムを実行することにより、メタステーブルカウンタとして機能する。
【００３４】
次に、順序回路は、入力される信号の値を保持する（ステップＳ３０７）。
【００３５】
次に、コンピュータ２は、当該順序回路のメタステーブル状態値Ｄｍを生成して、ＲＯＭに格納するとともに、当該順序回路は当該メタステーブル状態値Ｄｍを保持する（ステップＳ３０８）。ここで、メタステーブル状態値Ｄｍはランダムな値であり、ステップＳ３０７で保持した値とは異なる値である。
【００３６】
次に、順序回路は、ステップＳ３０８で保持したメタステーブル状態値Ｄｍを出力する（ステップＳ３０９）。
【００３７】
一方、ステップＳ３０１において、順序回路が、入力されたクロック信号のアクティブエッジを検出しなかった場合（ステップＳ３０１；Ｎｏ）、コンピュータ２は、ＦＦテーブル４を参照し、当該順序回路のインスタンス名に対応するクロックサイクル数（生成段数ｃ）が０であるか否かを判断することにより、当該順序回路がメタステーブル状態であるか否かを判断する（ステップＳ３１０）。
【００３８】
ステップＳ３１０において、クロックサイクル数（生成段数ｃ）が０である場合、すなわち、当該順序回路がメタステーブル状態ではない場合（ステップＳ３１０；Ｙｅｓ）、当該順序回路は、保持している信号を出力する（ステップＳ３１２）。
ステップＳ３１０において、クロックサイクル数（生成段数ｃ）が０でない場合、すなわち、当該順序回路がメタステーブル状態である場合（ステップＳ３１０；Ｎｏ）、コンピュータ２は、当該順序回路のメタステーブル状態値Ｄｍを生成して、ＲＯＭに格納するとともに、当該順序回路は当該メタステーブル状態値Ｄｍを保持する。次いで、順序回路は、保持したメタステーブル状態値Ｄｍを出力する（ステップＳ３１１）。
【００３９】
次に、図７に示す非同期回路２００を例に挙げて、本発明の実施の形態１に係るコンピュータ２における回路検証方法について説明する。
図７に示す非同期回路２００は、一のクロック信号ＣＬＫ１により動作するフリップフロップ回路ＦＦ０１と、他のクロック信号ＣＬＫ２により動作する非同期順序回路２０１と、組合せ回路ＣＣ２と、を備えている。
非同期順序回路２０１は、３つのフリップフロップ回路ＦＦ０２，ＦＦ０３，ＦＦ０４を備えている。そして、フリップフロップ回路ＦＦ０１のから出力された信号Ｑ０１は、フリップフロップ回路ＦＦ０２の入力端子に入力される。また、フリップフロップ回路ＦＦ０２のから出力された信号Ｑ０２は、フリップフロップ回路ＦＦ０３の入力端子に入力される。また、フリップフロップ回路ＦＦ０３のから出力された信号Ｑ０３は、フリップフロップ回路ＦＦ０４の入力端子に入力される。また、フリップフロップ回路ＦＦ０４のから出力された信号Ｑ０４は、組合せ回路ＣＣ２に入力される。また、フリップフロップ回路ＦＦ０１の入力端子には、入力信号ＤＩＮ１が入力される。
【００４０】
図８は、図７に示す非同期回路２００に対して、本発明の実施の形態１に係るコンピュータ２によって回路検証を行った場合におけるタイミングチャートである。
図８において、非同期順序回路２０１のクロック周期Ｔｄｉｓｔを１０ｎｓ、メタステーブル収束時間Ｔｍｃを６ｎｓ、フリップフロップ回路ＦＦ０１，ＦＦ０２，ＦＦ０３，ＦＦ０４のインスタンス名をそれぞれ「ＦＦ０１」，「ＦＦ０２」，「ＦＦ０３」，「ＦＦ０４」とする。初期状態において、ＦＦテーブル４には、何も登録されていないこととする。
【００４１】
まず、図４のステップＳＳ１０１において、コンピュータ２は、（１）式により、メタステーブル状態値Ｄｍの生成段数ｃを算出する。ｃ＝ｉｎｔ（６／１０）＋１＝２より、生成段数ｃの値は２となる。
【００４２】
次に、ステップＳ１０２において、コンピュータ２は、一のクロック信号で動作する回路から出力された信号が入力される、他のクロック信号で動作する非同期順序回路の第１段目の順序回路として、フリップフロップ回路ＦＦ０２を特定する。
【００４３】
次に、ステップＳ１０３において、コンピュータ２は、特定したフリップフロップ回路ＦＦ０２のインスタンス名「ＦＦ０２」と、生成段数ｃ（クロックサイクル数）の値「２」とを対応付けて、ＦＦテーブル４に格納する。
【００４４】
次に、ステップＳ１０４において、コンピュータ２は、生成段数ｃが１以上と判断し（ステップＳ１０４；Ｎｏ）、ステップＳ１０５において、コンピュータ２は、当該生成段数ｃから１を減ずる。
【００４５】
次に、ステップＳ１０６において、コンピュータ２は、ステップＳ１０２で特定したフリップフロップ回路ＦＦ０２の出力側（後段側）に接続されているフリップフロップ回路ＦＦ０３を第２段目の順序回路として新たに特定する。
【００４６】
次に、ステップＳ１０７において、コンピュータ２は、ステップＳ１０６において特定したフリップフロップ回路ＦＦ０３のインスタンス名「ＦＦ０３」と、ステップＳ１０５において算出した生成段数（ｃ−１）の値「１」とを対応付けて、ＦＦテーブル４に格納し、ステップＳ１０４に戻る。
【００４７】
次に、ステップＳ１０４において、コンピュータ２は、生成段数（ｃ−１）が１であると判断し（ステップＳ１０４；Ｙｅｓ）、本処理を終了する。
【００４８】
次に、図２のステップＳ２において、コンピュータ２は、シミュレーション前処理を行う。
具体的には、ＦＦテーブル４にインスタンス名が登録されていないフリップフロップ回路ＦＦ０１，ＦＦ０４に対しては、図５のフローチャートで示される動作フローを割り当てる。また、ＦＦテーブル４にインスタンス名が登録されているフリップフロップ回路ＦＦ０２，ＦＦ０３に対しては、図６のフローチャートで示される動作フローを割り当てる。
【００４９】
次に、図２のステップＳ３において、コンピュータ２は、ステップＳ２において割り当てた動作フローに従って、各回路の機能シミュレーションを行う。
以下、具体的に、図２のステップＳ３における機能シミュレーションについて、図８に示すタイミングチャートを参照しながら説明する。
図８の上段に記載された数字「１」〜「２６」は、シミュレーションサイクルを示す。初期状態のシミュレーションサイクル０においてクロック信号ＣＬＫ１，ＣＬＫ２の値は「０」であり、入力信号ＤＩＮの値は「０」であり、フリップフロップ回路ＦＦ０１，ＦＦ０２，ＦＦ０３，ＦＦ０４が保持している値は「０」であり、生成段数ｃの値は、「０」であるとする。また、機能シミュレーションは、フリップフロップ回路ＦＦ０４、フリップフロップ回路ＦＦ０３、フリップフロップ回路ＦＦ０２、フリップフロップ回路ＦＦ０１の順に行う。
【００５０】
＜シミュレーションサイクル０〜１について＞
（フリップフロップ回路ＦＦ０４について）
シミュレーションサイクル０〜１において、クロック信号ＣＬＫ２がアクティブエッジとなる（ステップＳ２０１；Ｙｅｓ、ステップＳ３０１；Ｙｅｓ）。
そのため、フリップフロップ回路ＦＦ０４は、図５のステップＳ２０２において、信号Ｑ０３の値「０」を保持するとともに、図５のステップＳ２０３において保持している値「０」を信号Ｑ０４として出力する。
【００５１】
（フリップフロップ回路ＦＦ０３について）
また、クロックサイクル数（生成段数ｃ）の値が「０」であるため（ステップＳ３０２；Ｎｏ）、ステップＳ３０４において、コンピュータ２は、フリップフロップ回路ＦＦ０３に入力される信号Ｑ０２の値「０」と保持している値「０」とを比較し、フリップフロップ回路ＦＦ０３に入力される信号の値に変化がないと判断する（ステップＳ３０４；Ｎｏ）。
次に、ステップＳ３０５において、コンピュータ２は、当該クロックサイクル数（生成段数ｃ）が０であるか否かを判断することにより、当該フリップフロップ回路ＦＦ０３がメタステーブル状態であるか否かを判断する。フリップフロップ回路ＦＦ０３のクロックサイクル数は「０」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０３がメタステーブル状態ではないと判断する（ステップＳ３０５；Ｙｅｓ）。
そして、図６のステップＳ３１２において、フリップフロップ回路ＦＦ０３は、保持している値「０」を信号Ｑ０３として出力するとともに、信号Ｑ０２の値「０」を保持する。
【００５２】
（フリップフロップ回路ＦＦ０２について）
また、フリップフロップ回路ＦＦ０２の場合も、フリップフロップ回路ＦＦ０３と同様に、クロックサイクル数（生成段数ｃ）の値が「０」であり（ステップＳ３０２；Ｎｏ）、フリップフロップ回路ＦＦ０２に入力される信号の値に変化がないため（ステップＳ３０４；Ｎｏ）、コンピュータ２は、フリップフロップ回路ＦＦ０２がメタステーブル状態ではないと判断する（ステップＳ３０５；Ｙｅｓ）。
そして、図６のステップＳ３１２において、フリップフロップ回路ＦＦ０２は、保持している値「０」を信号Ｑ０２として出力するとともに、信号Ｑ０１の値「０」を保持する。
【００５３】
（フリップフロップ回路ＦＦ０１について）
また、シミュレーションサイクル０〜１において、クロック信号ＣＬＫ１がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ）。
そのため、図５のステップＳ２０３において、フリップフロップ回路ＦＦ０１は、保持している値「０」を信号Ｑ０１として出力する。
【００５４】
＜シミュレーションサイクル２〜３について＞
（フリップフロップ回路ＦＦ０４について）
シミュレーションサイクル２〜３において、クロック信号ＣＬＫ２がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ、ステップＳ３０１；Ｎｏ）。
そのため、フリップフロップ回路ＦＦ０４は、図５のステップＳ２０３において保持している値「０」を信号Ｑ０４として出力する。
【００５５】
（フリップフロップ回路ＦＦ０３について）
また、クロックサイクル数（生成段数ｃ）の値が「０」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０３がメタステーブル状態ではないと判断する（ステップＳ３１０；Ｙｅｓ）。
そして、図６のステップＳ３１２において、フリップフロップ回路ＦＦ０３は、保持している値「０」を信号Ｑ０３として出力する。
【００５６】
（フリップフロップ回路ＦＦ０２について）
また、フリップフロップ回路ＦＦ０２の場合も、フリップフロップ回路ＦＦ０３と同様に、クロックサイクル数（生成段数ｃ）の値が「０」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０２がメタステーブル状態ではないと判断する（ステップＳ３１０；Ｙｅｓ）。
そして、図６のステップＳ３１２において、フリップフロップ回路ＦＦ０２は、保持している値「０」を信号Ｑ０２として出力する。
【００５７】
（フリップフロップ回路ＦＦ０１について）
また、シミュレーションサイクル２〜３において、クロック信号ＣＬＫ１がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ）。
そのため、図５のステップＳ２０３において、フリップフロップ回路ＦＦ０１は、保持している値「０」を信号Ｑ０１として出力する。
【００５８】
＜シミュレーションサイクル４について＞
（フリップフロップ回路ＦＦ０４について）
シミュレーションサイクル４において、クロック信号ＣＬＫ２がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ、ステップＳ３０１；Ｎｏ）。
そのため、フリップフロップ回路ＦＦ０４は、図５のステップＳ２０３において保持している値「０」を信号Ｑ０４として出力する。
【００５９】
（フリップフロップ回路ＦＦ０３について）
また、クロックサイクル数（生成段数ｃ）の値が「０」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０３がメタステーブル状態ではないと判断する（ステップＳ３１０；Ｙｅｓ）。
そして、図６のステップＳ３１２において、フリップフロップ回路ＦＦ０３は、保持している値「０」を信号Ｑ０３として出力する。
【００６０】
（フリップフロップ回路ＦＦ０２について）
また、フリップフロップ回路ＦＦ０２の場合も、フリップフロップ回路ＦＦ０３と同様に、クロックサイクル数（生成段数ｃ）の値が「０」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０２がメタステーブル状態ではないと判断する（ステップＳ３１０；Ｙｅｓ）。
そして、図６のステップＳ３１２において、フリップフロップ回路ＦＦ０２は、保持している値「０」を信号Ｑ０２として出力する。
【００６１】
（フリップフロップ回路ＦＦ０１について）
また、シミュレーションサイクル４において、クロック信号ＣＬＫ１がアクティブエッジとなる（ステップＳ２０１；Ｙｅｓ）。
そのため、フリップフロップ回路ＦＦ０１は、図５のステップＳ２０２において、入力信号ＤＩＮの値「７」を保持するとともに、図５のステップＳ２０３において保持している値「７」を信号Ｑ０１として出力する。
【００６２】
＜シミュレーションサイクル５について＞
（フリップフロップ回路ＦＦ０４について）
シミュレーションサイクル５において、クロック信号ＣＬＫ２がアクティブエッジとなる（ステップＳ２０１；Ｙｅｓ、ステップＳ３０１；Ｙｅｓ）。
そのため、フリップフロップ回路ＦＦ０４は、図５のステップＳ２０２において、信号Ｑ０３の値「０」を保持するとともに、図５のステップＳ２０３において保持している値「０」を信号Ｑ０４として出力する。
【００６３】
（フリップフロップ回路ＦＦ０３について）
また、クロックサイクル数（生成段数ｃ）の値が「０」であり（ステップＳ３０２；Ｎｏ）、フリップフロップ回路ＦＦ０３に入力される信号の値に変化がないため（ステップＳ３０４；Ｎｏ）、クロックサイクル数（生成段数ｃ）が０であるため、コンピュータ２は、フリップフロップ回路ＦＦ０３がメタステーブル状態ではないと判断する（ステップＳ３０５；Ｙｅｓ）。
そして、図６のステップＳ３１２において、フリップフロップ回路ＦＦ０３は、保持している値「０」を信号Ｑ０３として出力するとともに、信号Ｑ０２の値「０」を保持する。
【００６４】
（フリップフロップ回路ＦＦ０２について）
また、クロックサイクル数（生成段数ｃ）の値が「０」であるため（ステップＳ３０２；Ｎｏ）、ステップＳ３０４において、コンピュータ２は、フリップフロップ回路ＦＦ０２に入力される信号Ｑ０１の値「７」と保持している値「０」とを比較し、フリップフロップ回路ＦＦ０３に入力される信号の値に変化があると判断する（ステップＳ３０４；Ｙｅｓ）。
次に、ステップＳ３０６において、コンピュータ２は、ＦＦテーブル４のインスタンス名「ＦＦ０２」に対応するクロックサイクル数（生成段数ｃ）の値「２」を新たにメタステーブルカウンタの値として設定する。
そして、図６のステップ３０７において、フリップフロップ回路ＦＦ０２は、入力される信号Ｑ０１の値「７」を保持する。
【００６５】
次に、ステップＳ３０８において、コンピュータ２は、フリップフロップ回路ＦＦ０２のメタステーブル状態値Ｄｍを生成して、ＲＯＭに格納するとともに、フリップフロップ回路ＦＦ０２は当該メタステーブル状態値Ｄｍを保持する。ここで、メタステーブル状態値Ｄｍはランダムな値であり、ステップＳ３０７で保持した値「７」とは異なる値である。ここでは、コンピュータ２は、メタステーブル状態値Ｄｍとして「５」を生成したものとする。
次に、ステップＳ３０９において、フリップフロップ回路ＦＦ０２は、ステップＳ３０８で保持したメタステーブル状態値Ｄｍである値「５」を、信号Ｑ０２として出力する。
【００６６】
（フリップフロップ回路ＦＦ０１について）
また、シミュレーションサイクル５において、クロック信号ＣＬＫ１がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ）。
そのため、図５のステップＳ２０３において、フリップフロップ回路ＦＦ０１は、保持している値「７」を信号Ｑ０１として出力する。
【００６７】
＜シミュレーションサイクル６〜８について＞
（フリップフロップ回路ＦＦ０４について）
シミュレーションサイクル６〜８において、クロック信号ＣＬＫ２がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ、ステップＳ３０１；Ｎｏ）。
そのため、フリップフロップ回路ＦＦ０４は、図５のステップＳ２０３において保持している値「０」を信号Ｑ０４として出力する。
【００６８】
（フリップフロップ回路ＦＦ０３について）
また、クロックサイクル数（生成段数ｃ）の値が「０」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０３がメタステーブル状態ではないと判断する（ステップＳ３１０；Ｙｅｓ）。
そして、図６のステップＳ３１２において、フリップフロップ回路ＦＦ０３は、保持している値「０」を信号Ｑ０３として出力する。
【００６９】
（フリップフロップ回路ＦＦ０２について）
また、クロックサイクル数（生成段数ｃ）の値が「２」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０２がメタステーブル状態であると判断する（ステップＳ３１０；Ｎｏ）。
そして、図６のステップＳ３１１において、フリップフロップ回路ＦＦ０２は、メタステーブル状態値Ｄｍである値「５」を信号Ｑ０２として出力する。
【００７０】
（フリップフロップ回路ＦＦ０１について）
また、シミュレーションサイクル６〜８において、クロック信号ＣＬＫ１がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ）。
そのため、図５のステップＳ２０３において、フリップフロップ回路ＦＦ０１は、保持している値「７」を信号Ｑ０１として出力する。
【００７１】
＜シミュレーションサイクル９について＞
（フリップフロップ回路ＦＦ０４について）
シミュレーションサイクル９において、クロック信号ＣＬＫ２がアクティブエッジとなる（ステップＳ２０１；Ｙｅｓ、ステップＳ３０１；Ｙｅｓ）。
そのため、フリップフロップ回路ＦＦ０４は、図５のステップＳ２０２において、信号Ｑ０３の値「０」を保持するとともに、図５のステップＳ２０３において保持している値「０」を信号Ｑ０４として出力する。
【００７２】
（フリップフロップ回路ＦＦ０３について）
また、クロックサイクル数（生成段数ｃ）の値が「０」であるため（ステップＳ３０２；Ｎｏ）、ステップＳ３０４において、コンピュータ２は、フリップフロップ回路ＦＦ０３に入力される信号Ｑ０２の値「５」と保持している値「０」とを比較し、フリップフロップ回路ＦＦ０３に入力される信号の値に変化があると判断する（ステップＳ３０４；Ｙｅｓ）。
次に、ステップＳ３０６において、コンピュータ２は、ＦＦテーブル４のインスタンス名「ＦＦ０３」に対応するクロックサイクル数（生成段数（ｃ−１））の値「１」を新たにメタステーブルカウンタの値として設定する。
そして、図６のステップ３０７において、フリップフロップ回路ＦＦ０３は、入力される信号Ｑ０２の値「５」を保持する。
【００７３】
次に、ステップＳ３０８において、コンピュータ２は、フリップフロップ回路ＦＦ０３のメタステーブル状態値Ｄｍを生成して、ＲＯＭに格納するとともに、フリップフロップ回路ＦＦ０３は当該メタステーブル状態値Ｄｍを保持する。ここで、メタステーブル状態値Ｄｍはランダムな値であり、ステップＳ３０７で保持した値「５」とは異なる値である。ここでは、コンピュータ２は、メタステーブル状態値Ｄｍとして「２」を生成したものとする。
次に、ステップＳ３０９において、フリップフロップ回路ＦＦ０３は、ステップＳ３０８で保持したメタステーブル状態値Ｄｍである値「２」を、信号Ｑ０３として出力する。
【００７４】
（フリップフロップ回路ＦＦ０２について）
また、クロックサイクル数（生成段数ｃ）の値が「２」であるため（ステップＳ３０２；Ｙｅｓ）、ステップＳ３０３において、コンピュータ２は、当該クロックサイクル数から１を減ずる。これにより、クロックサイクル数の値は「１」となる。
次に、フリップフロップ回路ＦＦ０２に入力される信号Ｑ０１の値は「７」であり、フリップフロップ回路ＦＦ０２が保持している値も「７」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０２に入力される信号Ｑ０１の値に変化がないと判断する（ステップＳ３０４；Ｎｏ）。
次に、フリップフロップ回路ＦＦ０２のクロックサイクル数（生成段数ｃ）は「１」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０２がメタステーブル状態であると判断する（ステップＳ３０５；Ｎｏ）。
次に、ステップＳ３０８において、コンピュータ２は、フリップフロップ回路ＦＦ０２のメタステーブル状態値Ｄｍを生成して、ＲＯＭに格納するとともに、フリップフロップ回路ＦＦ０２は当該メタステーブル状態値Ｄｍを保持する。ここでは、コンピュータ２は、メタステーブル状態値Ｄｍとして「１」を生成したものとする。
次に、ステップＳ３０９において、フリップフロップ回路ＦＦ０２は、ステップＳ３０８で保持したメタステーブル状態値Ｄｍである値「１」を、信号Ｑ０２として出力する。
【００７５】
（フリップフロップ回路ＦＦ０１について）
また、シミュレーションサイクル９において、クロック信号ＣＬＫ１がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ）。
そのため、図５のステップＳ２０３において、フリップフロップ回路ＦＦ０１は、保持している値「７」を信号Ｑ０１として出力する。
【００７６】
＜シミュレーションサイクル１０〜１２について＞
（フリップフロップ回路ＦＦ０４について）
シミュレーションサイクル１０〜１２において、クロック信号ＣＬＫ２がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ、ステップＳ３０１；Ｎｏ）。
そのため、フリップフロップ回路ＦＦ０４は、図５のステップＳ２０３において保持している値「０」を信号Ｑ０４として出力する。
【００７７】
（フリップフロップ回路ＦＦ０３について）
また、クロックサイクル数（生成段数ｃ）の値が「１」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０３がメタステーブル状態であると判断する（ステップＳ３１０；Ｎｏ）。
そして、図６のステップＳ３１１において、フリップフロップ回路ＦＦ０３は、メタステーブル状態値Ｄｍである値「２」を信号Ｑ０３として出力する。
【００７８】
（フリップフロップ回路ＦＦ０２について）
また、クロックサイクル数（生成段数ｃ）の値が「１」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０２がメタステーブル状態であると判断する（ステップＳ３１０；Ｎｏ）。
そして、図６のステップＳ３１１において、フリップフロップ回路ＦＦ０２は、メタステーブル状態値Ｄｍである値「１」を信号Ｑ０２として出力する。
【００７９】
（フリップフロップ回路ＦＦ０１について）
また、シミュレーションサイクル１０〜１２において、クロック信号ＣＬＫ１がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ）。
そのため、図５のステップＳ２０３において、フリップフロップ回路ＦＦ０１は、保持している値「７」を信号Ｑ０１として出力する。
【００８０】
＜シミュレーションサイクル１３について＞
（フリップフロップ回路ＦＦ０４について）
シミュレーションサイクル１３において、クロック信号ＣＬＫ２がアクティブエッジとなる（ステップＳ２０１；Ｙｅｓ、ステップＳ３０１；Ｙｅｓ）。
そのため、フリップフロップ回路ＦＦ０４は、図５のステップＳ２０２において、信号Ｑ０３の値「２」を保持するとともに、図５のステップＳ２０３において保持している値「２」を信号Ｑ０４として出力する。
【００８１】
（フリップフロップ回路ＦＦ０３について）
また、クロックサイクル数（生成段数ｃ）の値が「１」であるため（ステップＳ３０２；Ｙｅｓ）、ステップＳ３０３において、コンピュータ２は、当該クロックサイクル数から１を減ずる。これにより、クロックサイクル数の値は「０」となる。
次に、フリップフロップ回路ＦＦ０３に入力される信号Ｑ０２の値は「１」であり、フリップフロップ回路ＦＦ０３が保持している値は「５」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０３に入力される信号Ｑ０２の値に変化があると判断する（ステップＳ３０４；Ｙｅｓ）。
次に、ステップＳ３０６において、コンピュータ２は、ＦＦテーブル４のインスタンス名「ＦＦ０３」に対応するクロックサイクル数（生成段数（ｃ−１））の値「１」を新たにメタステーブルカウンタの値として設定する。
そして、図６のステップ３０７において、フリップフロップ回路ＦＦ０３は、入力される信号Ｑ０２の値「１」を保持する。
【００８２】
次に、ステップＳ３０８において、コンピュータ２は、フリップフロップ回路ＦＦ０３のメタステーブル状態値Ｄｍを生成して、ＲＯＭに格納するとともに、フリップフロップ回路ＦＦ０３は当該メタステーブル状態値Ｄｍを保持する。ここでは、コンピュータ２は、メタステーブル状態値Ｄｍとして「４」を生成したものとする。
次に、ステップＳ３０９において、フリップフロップ回路ＦＦ０３は、ステップＳ３０８で保持したメタステーブル状態値Ｄｍである値「４」を、信号Ｑ０３として出力する。
【００８３】
（フリップフロップ回路ＦＦ０２について）
また、クロックサイクル数（生成段数ｃ）の値が「１」であるため（ステップＳ３０２；Ｙｅｓ）、ステップＳ３０３において、コンピュータ２は、当該クロックサイクル数から１を減ずる。これにより、クロックサイクル数の値は「０」となる。
次に、フリップフロップ回路ＦＦ０２に入力される信号Ｑ０１の値は「７」であり、フリップフロップ回路ＦＦ０２が保持している値も「７」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０２に入力される信号Ｑ０１の値に変化がないと判断する（ステップＳ３０４；Ｎｏ）。
次に、フリップフロップ回路ＦＦ０２のクロックサイクル数（生成段数ｃ）は「０」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０２がメタステーブル状態ではないと判断する（ステップＳ３０５；Ｙｅｓ）。
そして、図６のステップＳ３１２において、フリップフロップ回路ＦＦ０２は、保持している値「７」を信号Ｑ０２として出力する。
【００８４】
（フリップフロップ回路ＦＦ０１について）
また、シミュレーションサイク１３において、クロック信号ＣＬＫ１がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ）。
そのため、図５のステップＳ２０３において、フリップフロップ回路ＦＦ０１は、保持している値「７」を信号Ｑ０１として出力する。
【００８５】
＜シミュレーションサイクル１４〜１６について＞
（フリップフロップ回路ＦＦ０４について）
シミュレーションサイクル１４〜１６において、クロック信号ＣＬＫ２がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ、ステップＳ３０１；Ｎｏ）。
そのため、フリップフロップ回路ＦＦ０４は、図５のステップＳ２０３において保持している値「２」を信号Ｑ０４として出力する。
【００８６】
（フリップフロップ回路ＦＦ０３について）
また、クロックサイクル数（生成段数ｃ）の値が「１」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０３がメタステーブル状態であると判断する（ステップＳ３１０；Ｎｏ）。
そして、図６のステップＳ３１１において、フリップフロップ回路ＦＦ０３は、メタステーブル状態値Ｄｍである値「４」を信号Ｑ０３として出力する。
【００８７】
（フリップフロップ回路ＦＦ０２について）
また、クロックサイクル数（生成段数ｃ）の値が「０」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０２がメタステーブル状態ではないと判断する（ステップＳ３１０；Ｙｅｓ）。
そして、図６のステップＳ３１２において、フリップフロップ回路ＦＦ０２は、保持している値「７」を信号Ｑ０２として出力する。
【００８８】
（フリップフロップ回路ＦＦ０１について）
また、シミュレーションサイクル１０〜１２において、クロック信号ＣＬＫ１がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ）。
そのため、図５のステップＳ２０３において、フリップフロップ回路ＦＦ０１は、保持している値「７」を信号Ｑ０１として出力する。
【００８９】
＜シミュレーションサイクル１７について＞
（フリップフロップ回路ＦＦ０４について）
シミュレーションサイクル１７において、クロック信号ＣＬＫ２がアクティブエッジとなる（ステップＳ２０１；Ｙｅｓ、ステップＳ３０１；Ｙｅｓ）。
そのため、フリップフロップ回路ＦＦ０４は、図５のステップＳ２０２において、信号Ｑ０３の値「４」を保持するとともに、図５のステップＳ２０３において保持している値「４」を信号Ｑ０４として出力する。
【００９０】
（フリップフロップ回路ＦＦ０３について）
また、クロックサイクル数（生成段数ｃ）の値が「１」であるため（ステップＳ３０２；Ｙｅｓ）、ステップＳ３０３において、コンピュータ２は、当該クロックサイクル数から１を減ずる。これにより、クロックサイクル数の値は「０」となる。
次に、フリップフロップ回路ＦＦ０３に入力される信号Ｑ０２の値は「７」であり、フリップフロップ回路ＦＦ０３が保持している値は「４」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０３に入力される信号Ｑ０２の値に変化があると判断する（ステップＳ３０４；Ｙｅｓ）。
次に、ステップＳ３０６において、コンピュータ２は、ＦＦテーブル４のインスタンス名「ＦＦ０３」に対応するクロックサイクル数（生成段数（ｃ−１））の値「１」を新たにメタステーブルカウンタの値として設定する。
そして、図６のステップ３０７において、フリップフロップ回路ＦＦ０３は、入力される信号Ｑ０２の値「７」を保持する。
【００９１】
次に、ステップＳ３０８において、コンピュータ２は、フリップフロップ回路ＦＦ０３のメタステーブル状態値Ｄｍを生成して、ＲＯＭに格納するとともに、フリップフロップ回路ＦＦ０３は当該メタステーブル状態値Ｄｍを保持する。ここでは、コンピュータ２は、メタステーブル状態値Ｄｍとして「６」を生成したものとする。
次に、ステップＳ３０９において、フリップフロップ回路ＦＦ０３は、ステップＳ３０８で保持したメタステーブル状態値Ｄｍである値「６」を、信号Ｑ０３として出力する。
【００９２】
（フリップフロップ回路ＦＦ０２について）
また、クロックサイクル数（生成段数ｃ）の値が「０」であり（ステップＳ３０２；Ｎｏ）、フリップフロップ回路ＦＦ０２に入力される信号Ｑ０１の値は「７」であり、フリップフロップ回路ＦＦ０２が保持している値も「７」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０２に入力される信号Ｑ０１の値に変化がないと判断する（ステップＳ３０４；Ｎｏ）。
次に、フリップフロップ回路ＦＦ０２のクロックサイクル数（生成段数ｃ）は「０」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０２がメタステーブル状態ではないと判断する（ステップＳ３０５；Ｙｅｓ）。
そして、図６のステップＳ３１２において、フリップフロップ回路ＦＦ０２は、保持している値「７」を信号Ｑ０２として出力する。
【００９３】
（フリップフロップ回路ＦＦ０１について）
また、シミュレーションサイクル１７において、クロック信号ＣＬＫ１がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ）。
そのため、図５のステップＳ２０３において、フリップフロップ回路ＦＦ０１は、保持している値「７」を信号Ｑ０１として出力する。
【００９４】
＜シミュレーションサイクル１８について＞
（フリップフロップ回路ＦＦ０４について）
シミュレーションサイクル１８において、クロック信号ＣＬＫ２がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ、ステップＳ３０１；Ｎｏ）。
そのため、フリップフロップ回路ＦＦ０４は、図５のステップＳ２０３において保持している値「４」を信号Ｑ０４として出力する。
【００９５】
（フリップフロップ回路ＦＦ０３について）
また、クロックサイクル数（生成段数ｃ）の値が「１」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０３がメタステーブル状態であると判断する（ステップＳ３１０；Ｎｏ）。
そして、図６のステップＳ３１１において、フリップフロップ回路ＦＦ０３は、メタステーブル状態値Ｄｍである値「６」を信号Ｑ０３として出力する。
【００９６】
（フリップフロップ回路ＦＦ０２について）
また、クロックサイクル数（生成段数ｃ）の値が「０」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０２がメタステーブル状態ではないと判断する（ステップＳ３１０；Ｙｅｓ）。
そして、図６のステップＳ３１２において、フリップフロップ回路ＦＦ０２は、保持している値「７」を信号Ｑ０２として出力する。
【００９７】
（フリップフロップ回路ＦＦ０１について）
また、シミュレーションサイクル１８において、クロック信号ＣＬＫ１がアクティブエッジとなる（ステップＳ２０１；Ｙｅｓ）。
そのため、フリップフロップ回路ＦＦ０１は、図５のステップＳ２０２において、入力信号ＤＩＮの値「３」を保持するとともに、図５のステップＳ２０３において保持している値「３」を信号Ｑ０１として出力する。
【００９８】
＜シミュレーションサイクル１９〜２０について＞
（フリップフロップ回路ＦＦ０４について）
シミュレーションサイクル１９〜２０において、クロック信号ＣＬＫ２がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ、ステップＳ３０１；Ｎｏ）。
そのため、フリップフロップ回路ＦＦ０４は、図５のステップＳ２０３において保持している値「４」を信号Ｑ０４として出力する。
【００９９】
（フリップフロップ回路ＦＦ０３について）
また、クロックサイクル数（生成段数ｃ）の値が「１」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０３がメタステーブル状態であると判断する（ステップＳ３１０；Ｎｏ）。
そして、図６のステップＳ３１１において、フリップフロップ回路ＦＦ０３は、メタステーブル状態値Ｄｍである値「６」を信号Ｑ０３として出力する。
【０１００】
（フリップフロップ回路ＦＦ０２について）
また、クロックサイクル数（生成段数ｃ）の値が「０」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０２がメタステーブル状態ではないと判断する（ステップＳ３１０；Ｙｅｓ）。
そして、図６のステップＳ３１２において、フリップフロップ回路ＦＦ０２は、保持している値「７」を信号Ｑ０２として出力する。
【０１０１】
（フリップフロップ回路ＦＦ０１について）
また、シミュレーションサイクル１９〜２０において、クロック信号ＣＬＫ１がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ）。
そのため、図５のステップＳ２０３において、フリップフロップ回路ＦＦ０１は、保持している値「３」を信号Ｑ０１として出力する。
【０１０２】
＜シミュレーションサイクル２１について＞
（フリップフロップ回路ＦＦ０４について）
シミュレーションサイクル２１において、クロック信号ＣＬＫ２がアクティブエッジとなる（ステップＳ２０１；Ｙｅｓ、ステップＳ３０１；Ｙｅｓ）。
そのため、フリップフロップ回路ＦＦ０４は、図５のステップＳ２０２において、信号Ｑ０３の値「６」を保持するとともに、図５のステップＳ２０３において保持している値「６」を信号Ｑ０４として出力する。
【０１０３】
（フリップフロップ回路ＦＦ０３について）
また、クロックサイクル数（生成段数ｃ）の値が「１」であるため（ステップＳ３０２；Ｙｅｓ）、ステップＳ３０３において、コンピュータ２は、当該クロックサイクル数から１を減ずる。これにより、クロックサイクル数の値は「０」となる。
次に、フリップフロップ回路ＦＦ０３に入力される信号Ｑ０２の値は「７」であり、フリップフロップ回路ＦＦ０３が保持している値も「７」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０３に入力される信号Ｑ０２の値に変化がないと判断する（ステップＳ３０４；Ｎｏ）。
次に、フリップフロップ回路ＦＦ０３のクロックサイクル数（生成段数ｃ）は「０」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０３がメタステーブル状態ではないと判断する（ステップＳ３０５；Ｙｅｓ）。
そして、図６のステップＳ３１２において、フリップフロップ回路ＦＦ０３は、保持している値「７」を信号Ｑ０３として出力する。
【０１０４】
（フリップフロップ回路ＦＦ０２について）
また、クロックサイクル数（生成段数ｃ）の値が「０」であり（ステップＳ３０２；Ｎｏ）、フリップフロップ回路ＦＦ０２に入力される信号Ｑ０１の値は「３」であり、フリップフロップ回路ＦＦ０２が保持している値は「７」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０２に入力される信号Ｑ０１の値に変化があると判断する（ステップＳ３０４；Ｙｅｓ）。
次に、ステップＳ３０６において、コンピュータ２は、ＦＦテーブル４のインスタンス名「ＦＦ０２」に対応するクロックサイクル数（生成段数ｃ）の値「２」を新たにメタステーブルカウンタの値として設定する。
そして、図６のステップ３０７において、フリップフロップ回路ＦＦ０２は、入力される信号Ｑ０１の値「３」を保持する。
【０１０５】
次に、ステップＳ３０８において、コンピュータ２は、フリップフロップ回路ＦＦ０２のメタステーブル状態値Ｄｍを生成して、ＲＯＭに格納するとともに、フリップフロップ回路ＦＦ０２は当該メタステーブル状態値Ｄｍを保持する。ここでは、コンピュータ２は、メタステーブル状態値Ｄｍとして「６」を生成したものとする。
次に、ステップＳ３０９において、フリップフロップ回路ＦＦ０２は、ステップＳ３０８で保持したメタステーブル状態値Ｄｍである値「６」を、信号Ｑ０１として出力する。
【０１０６】
（フリップフロップ回路ＦＦ０１について）
また、シミュレーションサイクル２１において、クロック信号ＣＬＫ１がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ）。
そのため、図５のステップＳ２０３において、フリップフロップ回路ＦＦ０１は、保持している値「３」を信号Ｑ０１として出力する。
【０１０７】
＜シミュレーションサイクル２２〜２４について＞
（フリップフロップ回路ＦＦ０４について）
シミュレーションサイクル２２〜２４において、クロック信号ＣＬＫ２がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ、ステップＳ３０１；Ｎｏ）。
そのため、フリップフロップ回路ＦＦ０４は、図５のステップＳ２０３において保持している値「６」を信号Ｑ０４として出力する。
【０１０８】
（フリップフロップ回路ＦＦ０３について）
また、クロックサイクル数（生成段数ｃ）の値が「０」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０３がメタステーブル状態ではないと判断する（ステップＳ３１０；Ｙｅｓ）。
そして、図６のステップＳ３１２において、フリップフロップ回路ＦＦ０３は、保持している値「７」を信号Ｑ０３として出力する。
【０１０９】
（フリップフロップ回路ＦＦ０２について）
また、クロックサイクル数（生成段数ｃ）の値が「２」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０２がメタステーブル状態であると判断する（ステップＳ３１０；Ｎｏ）。
そして、図６のステップＳ３１１において、フリップフロップ回路ＦＦ０２は、メタステーブル状態値Ｄｍである値「６」を信号Ｑ０２として出力する。
【０１１０】
（フリップフロップ回路ＦＦ０１について）
また、シミュレーションサイクル２２〜２４において、クロック信号ＣＬＫ１がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ）。
そのため、図５のステップＳ２０３において、フリップフロップ回路ＦＦ０１は、保持している値「３」を信号Ｑ０１として出力する。
【０１１１】
＜シミュレーションサイクル２５について＞
（フリップフロップ回路ＦＦ０４について）
シミュレーションサイクル２５において、クロック信号ＣＬＫ２がアクティブエッジとなる（ステップＳ２０１；Ｙｅｓ、ステップＳ３０１；Ｙｅｓ）。
そのため、フリップフロップ回路ＦＦ０４は、図５のステップＳ２０２において、信号Ｑ０３の値「７」を保持するとともに、図５のステップＳ２０３において保持している値「７」を信号Ｑ０４として出力する。
【０１１２】
（フリップフロップ回路ＦＦ０３について）
また、クロックサイクル数（生成段数ｃ）の値が「０」であり（ステップＳ３０２；Ｎｏ）、フリップフロップ回路ＦＦ０３に入力される信号Ｑ０２の値は「１」であり、フリップフロップ回路ＦＦ０３が保持している値は「５」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０３に入力される信号Ｑ０２の値に変化があると判断する（ステップＳ３０４；Ｙｅｓ）。
次に、ステップＳ３０６において、コンピュータ２は、ＦＦテーブル４のインスタンス名「ＦＦ０３」に対応するクロックサイクル数（生成段数（ｃ−１））の値「１」を新たにメタステーブルカウンタの値として設定する。
そして、図６のステップ３０７において、フリップフロップ回路ＦＦ０３は、入力される信号Ｑ０２の値「１」を保持する。
【０１１３】
次に、ステップＳ３０８において、コンピュータ２は、フリップフロップ回路ＦＦ０３のメタステーブル状態値Ｄｍを生成して、ＲＯＭに格納するとともに、フリップフロップ回路ＦＦ０２は当該メタステーブル状態値Ｄｍを保持する。ここでは、コンピュータ２は、メタステーブル状態値Ｄｍとして「５」を生成したものとする。
次に、ステップＳ３０９において、フリップフロップ回路ＦＦ０３は、ステップＳ３０８で保持したメタステーブル状態値Ｄｍである値「５」を、信号Ｑ０３として出力する。
【０１１４】
（フリップフロップ回路ＦＦ０２について）
また、クロックサイクル数（生成段数ｃ）の値が「２」であるため（ステップＳ３０２；Ｎｏ）、ステップＳ３０３において、コンピュータ２は、当該クロックサイクル数から１を減ずる。これにより、クロックサイクル数の値は「１」となる。
次に、フリップフロップ回路ＦＦ０２に入力される信号Ｑ０１の値は「３」であり、フリップフロップ回路ＦＦ０２が保持している値は「３」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０２に入力される信号Ｑ０１の値に変化がないと判断する（ステップＳ３０４；Ｎｏ）。
次に、フリップフロップ回路ＦＦ０２のクロックサイクル数（生成段数ｃ）は「１」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０３がメタステーブル状態であると判断する（ステップＳ３０５；Ｎｏ）。
【０１１５】
次に、ステップＳ３０８において、コンピュータ２は、フリップフロップ回路ＦＦ０２のメタステーブル状態値Ｄｍを生成して、ＲＯＭに格納するとともに、フリップフロップ回路ＦＦ０２は当該メタステーブル状態値Ｄｍを保持する。ここでは、コンピュータ２は、メタステーブル状態値Ｄｍとして「１」を生成したものとする。
次に、ステップＳ３０９において、フリップフロップ回路ＦＦ０２は、ステップＳ３０８で保持したメタステーブル状態値Ｄｍである値「１」を、信号Ｑ０２として出力する。
【０１１６】
（フリップフロップ回路ＦＦ０１について）
また、シミュレーションサイクル２５において、クロック信号ＣＬＫ１がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ）。
そのため、図５のステップＳ２０３において、フリップフロップ回路ＦＦ０１は、保持している値「３」を信号Ｑ０１として出力する。
【０１１７】
＜シミュレーションサイクル２６について＞
（フリップフロップ回路ＦＦ０４について）
シミュレーションサイクル２６において、クロック信号ＣＬＫ２がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ、ステップＳ３０１；Ｎｏ）。
そのため、フリップフロップ回路ＦＦ０４は、図５のステップＳ２０３において保持している値「７」を信号Ｑ０４として出力する。
【０１１８】
（フリップフロップ回路ＦＦ０３について）
また、クロックサイクル数（生成段数ｃ）の値が「１」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０３がメタステーブル状態であると判断する（ステップＳ３１０；Ｎｏ）。
そして、図６のステップＳ３１１において、フリップフロップ回路ＦＦ０３は、メタステーブル状態値Ｄｍである値「５」を信号Ｑ０３として出力する。
【０１１９】
（フリップフロップ回路ＦＦ０２について）
また、クロックサイクル数（生成段数ｃ）の値が「１」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０２がメタステーブル状態であると判断する（ステップＳ３１０；Ｎｏ）。
そして、図６のステップＳ３１１において、フリップフロップ回路ＦＦ０２は、メタステーブル状態値Ｄｍである値「１」を信号Ｑ０２として出力する。
【０１２０】
（フリップフロップ回路ＦＦ０１について）
また、シミュレーションサイクル２２〜２４において、クロック信号ＣＬＫ１がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ）。
そのため、図５のステップＳ２０３において、フリップフロップ回路ＦＦ０１は、保持している値「３」を信号Ｑ０１として出力する。
【０１２１】
以上に説明したように、フリップフロップ回路ＦＦ０４の機能シミュレーションでは、シミュレーションサイクル１３〜１６，１７〜２０，２１〜２４の間、フリップフロップ回路ＦＦ０３が出力したメタステーブル状態を保持し、保持したメタステーブル状態値がすべて異なる値となっている。また、フリップフロップ回路ＦＦ０３の機能シミュレーションでは、シミュレーションサイクル９〜１２，１３〜１６，１７〜２０，２１〜２４の間、フリップフロップ回路ＦＦ０２が出力したメタステーブル状態を保持し、保持したメタステーブル状態値が全て異なる値となっている。
【０１２２】
具体的には、クロック信号ＣＬＫ１で動作するフリップフロップ回路ＦＦ０１から信号が入力される非同期順序回路２０１において、１段目のフリップフロップ回路ＦＦ０２については２クロックサイクルの間、２段目のフリップフロップ回路ＦＦ０３については１クロックサイクルの間、ＦＦテーブル４に格納されているクロックサイクル数（生成段数ｃ）がメタステーブルカウンタの値として設定される。これにより、フリップフロップ回路ＦＦ０２は２クロックサイクルの間、フリップフロップ回路ＦＦ０３については１クロックサイクルの間、メタステーブル状態値Ｄｍを出力する。
【０１２３】
従って、本発明の実施の形態１に係る回路検証方法によれば、一のクロック信号で動作する回路から出力された信号が入力される、他のクロック信号で動作する非同期順序回路２０１において、２段目以降のフリップフロップ回路ＦＦ０３において発生するメタステーブル状態についても確実にシミュレーションすることができる。そのため、本発明の実施の形態１に係る回路検証方法によれば、メタステーブル状態をより確実に想定して、非同期順序回路を含む論理回路の機能を検証することができる。
【０１２４】
実施の形態２．
実施の形態２に係る回路検証システムの構成は、実施の形態１に係る回路検証システム１００と略同じであるため、同一の構成については同一の符号を付すとともに、その説明を省略する。図９に、実施の形態２に係る回路検証システムにおいて、図２のステップＳ１の処理、すなわち図４に示す処理において特定された順序回路に対して割り当てられた動作フローを示す。
図９に示すフローチャートを参照しながら、図２のステップＳ１において特定された順序回路に対して、図２のステップＳ３において行われる機能シミュレーションについて説明する。なお、図９に示すように、ステップＳ４０１〜ステップＳ４０７、ステップＳ４０９〜ステップＳ４１０、ステップＳ４１１〜ステップＳ４１３の処理は、それぞれ、図６における、ステップＳ３１０〜ステップＳ３０７、ステップＳ３０８〜ステップＳ３０９、ステップＳ３１０〜ステップＳ３１１の処理と同じであるため、その説明を省略する。
【０１２５】
次に、コンピュータ２は、前段の順序回路のクロックサイクル数（生成段数ｃ）が０であるか否かを判断することにより、前段の順序回路がメタステーブル状態か否かを判断する（ステップＳ４０８）。
【０１２６】
ステップＳ４０８において、前段の順序回路のクロックサイクル数（生成段数ｃ）が０でない場合には（ステップＳ４０８；Ｎｏ）、コンピュータ２は、前段の順序回路がメタステーブル状態であると判断し、ステップＳ４０９に進む。
【０１２７】
ステップＳ４０８において、前段の順序回路のクロックサイクル数（生成段数ｃ）が０である場合には（ステップＳ４０８；Ｙｅｓ）、コンピュータ２は、前段の順序回路がメタステーブル状態ではないと判断し、順序回路は、保持している信号を出力する（ステップＳ４１３）。
【０１２８】
次に、コンピュータ２は、当該順序回路のクロックサイクル数（生成段数ｃ）を０にする（ステップＳ４１４）。
【０１２９】
以下、具体的に、図２のステップＳ３における機能シミュレーションについて、図１０に示すタイミングチャートを参照しながら説明する。
なお、シミュレーションサイクル１〜１６までは、図８に示すシミュレーションサイクル１から１６と同様の動作であるため、その説明を省略する。
【０１３０】
＜シミュレーションサイクル１７について＞
（フリップフロップ回路ＦＦ０４について）
シミュレーションサイクル１７において、クロック信号ＣＬＫ２がアクティブエッジとなる（ステップＳ２０１；Ｙｅｓ、ステップＳ４０１；Ｙｅｓ）。
そのため、フリップフロップ回路ＦＦ０４は、図５のステップＳ２０２において、信号Ｑ０３の値「４」を保持するとともに、図５のステップＳ２０３において保持している値「４」を信号Ｑ０４として出力する。
【０１３１】
（フリップフロップ回路ＦＦ０３について）
また、クロックサイクル数（生成段数ｃ）の値が「１」であるため（ステップＳ４０２；Ｙｅｓ）、ステップＳ４０３において、コンピュータ２は、当該クロックサイクル数から１を減ずる。これにより、クロックサイクル数の値は「０」となる。
次に、フリップフロップ回路ＦＦ０３に入力される信号Ｑ０２の値は「７」であり、フリップフロップ回路ＦＦ０３が保持している値は「４」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０３に入力される信号Ｑ０２の値に変化があると判断する（ステップＳ４０４；Ｙｅｓ）。
次に、ステップＳ４０６において、コンピュータ２は、ＦＦテーブル４のインスタンス名「ＦＦ０３」に対応するクロックサイクル数（生成段数（ｃ−１））の値「１」を新たにメタステーブルカウンタの値として設定する。
そして、図９のステップ４０７において、フリップフロップ回路ＦＦ０３は、入力される信号Ｑ０２の値「７」を保持する。
【０１３２】
次に、ステップＳ４０８において、コンピュータ２は、フリップフロップ回路ＦＦ０３の前段のフリップフロップ回路ＦＦ０２のクロックサイクル数（生成段数ｃ）の値が０か否かを判断し、フリップフロップ回路ＦＦ０２のクロックサイクル数は「０」であるため（ステップＳ４０８；Ｙｅｓ）、コンピュータ２は、前段のフリップフロップ回路ＦＦ０２はメタステーブル状態ではないと判断する。
【０１３３】
次に、ステップＳ４１３において、フリップフロップ回路ＦＦ０３は、保持している値「７」を信号Ｑ０３として出力する。
そして、ステップＳ４１４において、コンピュータ２は、フリップフロップ回路ＦＦ０３のクロックサイクル数を「０」とし、フリップフロップ回路ＦＦ０３のメタステーブル状態を終了する。
【０１３４】
（フリップフロップ回路ＦＦ０２について）
また、クロックサイクル数（生成段数ｃ）の値が「０」であり（ステップＳ４０２；Ｎｏ）、フリップフロップ回路ＦＦ０２に入力される信号Ｑ０１の値は「７」であり、フリップフロップ回路ＦＦ０２が保持している値も「７」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０２に入力される信号Ｑ０１の値に変化がないと判断する（ステップＳ４０４；Ｎｏ）。
次に、フリップフロップ回路ＦＦ０２のクロックサイクル数（生成段数ｃ）は「０」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０２がメタステーブル状態ではないと判断する（ステップＳ４０５；Ｙｅｓ）。
そして、図９のステップＳ４１３において、フリップフロップ回路ＦＦ０２は、保持している値「７」を信号Ｑ０２として出力する。
また、ステップＳ４１４において、コンピュータ２は、フリップフロップ回路ＦＦ０２のクロックサイクル数を「０」とする。
【０１３５】
（フリップフロップ回路ＦＦ０１について）
また、シミュレーションサイクル１７において、クロック信号ＣＬＫ１がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ）。
そのため、図５のステップＳ２０３において、フリップフロップ回路ＦＦ０１は、保持している値「７」を信号Ｑ０１として出力する。
【０１３６】
＜シミュレーションサイクル１８について＞
（フリップフロップ回路ＦＦ０４について）
シミュレーションサイクル１８において、クロック信号ＣＬＫ２がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ、ステップＳ４０１；Ｎｏ）。
そのため、フリップフロップ回路ＦＦ０４は、図５のステップＳ２０３において保持している値「４」を信号Ｑ０４として出力する。
【０１３７】
（フリップフロップ回路ＦＦ０３について）
また、クロックサイクル数（生成段数ｃ）の値が「０」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０３がメタステーブル状態ではないと判断する（ステップＳ４１１；Ｙｅｓ）。
そして、図９のステップＳ４１３において、フリップフロップ回路ＦＦ０３は、保持している値「７」を信号Ｑ０３として出力する。
また、ステップＳ４１４において、コンピュータ２は、フリップフロップ回路ＦＦ０３のクロックサイクル数を「０」とする。
【０１３８】
（フリップフロップ回路ＦＦ０２について）
また、クロックサイクル数（生成段数ｃ）の値が「０」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０２がメタステーブル状態ではないと判断する（ステップＳ４１１；Ｙｅｓ）。
そして、図９のステップＳ４１３において、フリップフロップ回路ＦＦ０２は、保持している値「７」を信号Ｑ０２として出力する。
また、ステップＳ４１４において、コンピュータ２は、フリップフロップ回路ＦＦ０２のクロックサイクル数を「０」とする。
【０１３９】
（フリップフロップ回路ＦＦ０１について）
また、シミュレーションサイクル１８において、クロック信号ＣＬＫ１がアクティブエッジとなる（ステップＳ２０１；Ｙｅｓ）。
そのため、フリップフロップ回路ＦＦ０１は、図５のステップＳ２０２において、入力信号ＤＩＮの値「３」を保持するとともに、図５のステップＳ２０３において保持している値「３」を信号Ｑ０１として出力する。
【０１４０】
＜シミュレーションサイクル１９〜２０について＞
（フリップフロップ回路ＦＦ０４について）
シミュレーションサイクル１９〜２０において、クロック信号ＣＬＫ２がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ、ステップＳ４０１；Ｎｏ）。
そのため、フリップフロップ回路ＦＦ０４は、図５のステップＳ２０３において保持している値「４」を信号Ｑ０４として出力する。
【０１４１】
（フリップフロップ回路ＦＦ０３について）
また、クロックサイクル数（生成段数ｃ）の値が「０」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０３がメタステーブル状態ではないと判断する（ステップＳ４１１；Ｙｅｓ）。
そして、図９のステップＳ４１３において、フリップフロップ回路ＦＦ０３は、保持している値「７」を信号Ｑ０３として出力する。
また、ステップＳ４１４において、コンピュータ２は、フリップフロップ回路ＦＦ０３のクロックサイクル数を「０」とする。
【０１４２】
（フリップフロップ回路ＦＦ０２について）
また、クロックサイクル数（生成段数ｃ）の値が「０」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０２がメタステーブル状態ではないと判断する（ステップＳ４１１；Ｙｅｓ）。
そして、図９のステップＳ４１３において、フリップフロップ回路ＦＦ０２は、保持している値「７」を信号Ｑ０２として出力する。
また、ステップＳ４１４において、コンピュータ２は、フリップフロップ回路ＦＦ０２のクロックサイクル数を「０」とする。
【０１４３】
（フリップフロップ回路ＦＦ０１について）
また、シミュレーションサイクル１９〜２０において、クロック信号ＣＬＫ１がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ）。
そのため、図５のステップＳ２０３において、フリップフロップ回路ＦＦ０１は、保持している値「３」を信号Ｑ０１として出力する。
【０１４４】
＜シミュレーションサイクル２１について＞
（フリップフロップ回路ＦＦ０４について）
シミュレーションサイクル２１において、クロック信号ＣＬＫ２がアクティブエッジとなる（ステップＳ２０１；Ｙｅｓ、ステップＳ４０１；Ｙｅｓ）。
そのため、フリップフロップ回路ＦＦ０４は、図５のステップＳ２０２において、信号Ｑ０３の値「７」を保持するとともに、図５のステップＳ２０３において保持している値「７」を信号Ｑ０４として出力する。
【０１４５】
（フリップフロップ回路ＦＦ０３について）
また、クロックサイクル数（生成段数ｃ）の値が「０」であり（ステップＳ４０２；Ｙｅｓ）、フリップフロップ回路ＦＦ０３に入力される信号Ｑ０２の値は「７」であり、フリップフロップ回路ＦＦ０３が保持している値も「７」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０３に入力される信号Ｑ０２の値に変化がないと判断する（ステップＳ４０４；Ｎｏ）。
次に、フリップフロップ回路ＦＦ０３のクロックサイクル数（生成段数ｃ）は「０」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０３がメタステーブル状態ではないと判断する（ステップＳ４０５；Ｙｅｓ）。
そして、図９のステップＳ４１３において、フリップフロップ回路ＦＦ０３は、保持している値「７」を信号Ｑ０３として出力する。
また、ステップＳ４１４において、コンピュータ２は、フリップフロップ回路ＦＦ０３のクロックサイクル数を「０」とする。
【０１４６】
（フリップフロップ回路ＦＦ０２について）
また、クロックサイクル数（生成段数ｃ）の値が「０」であり（ステップＳ４０２；Ｎｏ）、フリップフロップ回路ＦＦ０２に入力される信号Ｑ０１の値は「３」であり、フリップフロップ回路ＦＦ０２が保持している値は「６」であるため、コンピュータ２は、フリップフロップ回路ＦＦ０２に入力される信号Ｑ０１の値に変化があると判断する（ステップＳ４０４；Ｙｅｓ）。
次に、ステップＳ４０６において、コンピュータ２は、ＦＦテーブル４のインスタンス名「ＦＦ０２」に対応するクロックサイクル数（生成段数ｃ）の値「２」を新たにメタステーブルカウンタの値として設定する。
そして、図９のステップ４０７において、フリップフロップ回路ＦＦ０２は、入力される信号Ｑ０１の値「３」を保持する。
【０１４７】
次に、ステップＳ４０８において、コンピュータ２は、フリップフロップ回路ＦＦ０２の前段のフリップフロップ回路ＦＦ０１のクロックサイクル数（生成段数ｃ）の値が０か否かを判断し、フリップフロップ回路ＦＦ０１のクロックサイクル数は「０」であるため（ステップＳ４０８；Ｙｅｓ）、コンピュータ２は、前段のフリップフロップ回路ＦＦ０１はメタステーブル状態ではないと判断する。
【０１４８】
次に、ステップＳ４１３において、フリップフロップ回路ＦＦ０２は、保持している値「６」を信号Ｑ０２として出力する。
そして、ステップＳ４１４において、コンピュータ２は、フリップフロップ回路ＦＦ０２のクロックサイクル数を「０」とし、フリップフロップ回路ＦＦ０２のメタステーブル状態を終了する。
【０１４９】
（フリップフロップ回路ＦＦ０１について）
また、シミュレーションサイクル２１において、クロック信号ＣＬＫ１がアクティブエッジとはならない（ステップＳ２０１；Ｎｏ）。
そのため、図５のステップＳ２０３において、フリップフロップ回路ＦＦ０１は、保持している値「３」を信号Ｑ０１として出力する。
【０１５０】
なお、シミュレーションサイクル２２〜２６については、図８に示すシミュレーションサイクルと動作は略同じであるため、その説明を省略する。
【０１５１】
以上に説明したように、フリップフロップ回路ＦＦ０４の機能シミュレーションでは、シミュレーションサイクル１３〜１６，１７〜２０の間、フリップフロップ回路ＦＦ０３が出力したメタステーブル状態を保持し、保持したメタステーブル状態値がすべて異なる値となっている。また、フリップフロップ回路ＦＦ０３の機能シミュレーションでは、シミュレーションサイクル９〜１２，１３〜１６の間、フリップフロップ回路ＦＦ０２が出力したメタステーブル状態を保持し、保持したメタステーブル状態値が全て異なる値となっている。
また、フリップフロップ回路ＦＦ０３がメタステーブル状態ではない場合、シミュレーションサイクル２１において、フリップフロップ回路ＦＦ０４が保持している値は、シミュレーションサイクル２〜１５においてフリップフロップ回路ＦＦ０１に入力された信号ＤＩＮの値「７」となっている。
【０１５２】
具体的には、クロック信号ＣＬＫ１で動作するフリップフロップ回路ＦＦ０１から信号が入力される非同期順序回路２０１において、１段目のフリップフロップ回路ＦＦ０２については２クロックサイクルの間、２段目のフリップフロップ回路ＦＦ０３については１クロックサイクルの間、ＦＦテーブル４に格納されているクロックサイクル数（生成段数ｃ）がメタステーブルカウンタの値として設定される。これにより、フリップフロップ回路ＦＦ０２は２クロックサイクルの間、フリップフロップ回路ＦＦ０３については１クロックサイクルの間、メタステーブル状態値Ｄｍを出力する。
【０１５３】
従って、本発明の実施の形態２に係る回路検証方法によれば、実施の形態１に係る回路検証方法と同様の効果が得られることは勿論のこと、前段のフリップフロップ回路がメタステーブル状態であるか否かを判断し、前段のフリップフロップ回路がメタステーブル状態ではない場合に、コンピュータ２は、クロックサイクル数（生成段数ｃ）を「０」とするので、メタステーブル状態を終了させることができる。そのため、実際の論理回路におけるメタステーブル状態により近い状態をシミュレーションすることができる。
【０１５４】
なお、本発明は、以上の実施の形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内で適宜設計変更されるものとする。
例えば、非同期順序回路に含まれる順序回路はフリップフロップ回路に限られるものではない。
【符号の説明】
【０１５５】
１  サーバ
２  コンピュータ（回路検証装置）
３  ネットワーク
４  ＦＦテーブル
４１  インスタンス名
４２  クロックサイクル数
１００  回路検証システム
２０１  非同期順序回路
ＦＦ０１  フリップフロップ回路（第１段目の順序回路）
ＦＦ０２  フリップフロップ回路（第２段目の順序回路）
ＦＦ０３  フリップフロップ回路（第３段目の順序回路）
ＦＦ０４  フリップフロップ回路（第４段目の順序回路）
ＣＣ２  組合せ回路
ＣＬＫ１  クロック信号
ＣＬＫ２  クロック信号
【図１】
2011215852.tif 000003
【図２】
2011215852.tif 000004
【図３】
2011215852.tif 000005
【図４】
2011215852.tif 000006
【図５】
2011215852.tif 000007
【図６】
2011215852.tif 000008
【図７】
2011215852.tif 000009
【図８】
2011215852.tif 000010
【図９】
2011215852.tif 000011
【図１０】
2011215852.tif 000012