説明

回路検証装置及び回路検証方法

【課題】メタステーブル状態をより確実に想定して、非同期順序回路を含む論理回路の機能を検証することができる回路検証装置及び回路検証方法を提供する。
【解決手段】論理回路の機能を検証するコンピュータ2に、非同期順序回路201のクロック周期Tdistと、非同期順序回路201の第1段目のフリップフロップ回路FF01のメタステーブル収束時間Tmcと、に基づいて、(1)式により、メタステーブル状態値の生成段数cを算出する生成段数算出部と、回路設計プログラムを解析することにより、フリップフロップ回路FF01から第n段目のフリップフロップ回路までを特定する順序回路特定部と、機能シミュレーションにおいて、第1段目から第n段目のフリップフロップ回路に、それぞれ生成段数cから(生成段数c−(n−1))に等しいクロックサイクル数分、メタステーブル状態値を出力させる機能シミュレーション制御部と、を備えた。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、回路検証装置及び回路検証方法に関し、特に、順序回路を含む非同期回路を検証する回路検証装置及び回路検証方法に関する。
【背景技術】
【0002】
回路設計の際には、HDL(Hardware Description Language)レベル、ゲートレベル、トランジスタレベル等においてシミュレーションを行うことにより、設計した回路の機能を検証する。以下、回路の機能を検証するために行われるシミュレーションを機能シミュレーションと称する。
【0003】
回路には非同期回路が含まれることがある。また、複数のクロック信号を有する非同期順序回路では、異なるクロック信号で動作する回路間で信号転送が行われる場合がある。例えば、一のクロック信号で動作する回路から出力された発振状態が、他のクロック信号で動作する非同期順序回路や組み合せ回路に伝搬する場合がある。この場合、前段の順序回路から出力される信号の論理は定まらなくなる。このように、回路の出力信号の論理が定まらない状態をメタステーブル状態と呼ぶ。順序回路がメタステーブル状態となることは、非同期順序回路を備える論理回路の異常動作の一因となっている。
【0004】
そのため、HDLレベルにおいて、順序回路がメタステーブル状態となることを考慮した機能シミュレーションが行われている。
例えば、特許文献1には、メタステーブル状態を示す値に代えて、記憶手段に記憶された信号を出力信号として出力させる処理を行うことにより、メタステーブル状態を考慮した機能シミュレーションを行う非同期回路の検証方法が記載されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特許第3953250号
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、特許文献1に記載の機能シミュレーションでは、順序回路に発生したメタステーブル状態を示す値は、クロック信号の周期を超えない任意の時間となっている。そのため、特許文献1に記載の機能シミュレーションでは、前段の順序回路で発生するメタステーブル状態を再現することはできるが、後段の順序回路で発生するメタステーブル状態を再現することができないという問題がある。
実際には、前段の順序回路がメタステーブル状態となり、当該メタステーブル状態の収束時間が1クロック以内に収まらない場合には、後段の順序回路もメタステーブル状態となるが、特許文献1に記載の機能シミュレーションでは、このような状態を再現することができない。
【課題を解決するための手段】
【0007】
本発明の第1の態様に係る回路検証装置は、論理回路の機能を検証する装置である。前記回路検証装置は、生成段数算出部、順序回路特定部、機能シミュレーション制御部を備える。前記生成段数算出部は、前記論理回路に含まれる非同期順序回路のクロック周期Tdistと、前記非同期順序回路の第1段目の順序回路のメタステーブル収束時間Tmcと、に基づいて、下記の(1)式により、メタステーブル状態値の生成段数cを算出する。また、前記順序回路特定部は、所定のプログラム言語で記述された、前記論理回路の回路設計プログラムを解析することにより、前記第1段目の順序回路から前記第1段目の順序回路の出力側に接続される第n段目(nは、n≧2を満たす整数)の順序回路までを特定する。また、前記機能シミュレーション制御部は、前記論理回路の機能シミュレーションにおいて、前記第1段目から第n段目の順序回路に、それぞれ前記生成段数cから(前記生成段数c−(n−1))に等しいクロックサイクル数分、前記メタステーブル状態値を出力させる。
c=int(Tmc/Tdist)+1 ・・・・・(1)
【0008】
本発明の第1の態様においては、非同期順序回路において、1段目の順序回路は生成段数cに等しいクロックサイクルの間、・・・n段目の順序回路は(生成段数c−(n−1))に等しいクロックサイクルの間、メタステーブル状態値を出力する。そのため、非同期順序回路において、2段目以降の順序回路において発生するメタステーブル状態についても確実にシミュレーションすることができる。そのため、メタステーブル状態をより確実に想定して、非同期順序回路を含む論理回路の機能を検証することができる。
【0009】
本発明の第2の態様に係る回路検証方法は、論理回路の機能を検証する方法である。前記回路検証方法は、コンピュータが、生成段数算出処理と、順序回路特定処理と、機能シミュレーション制御処理と、を実行する方法である。前記生成段数算出処理において、前記コンピュータは、前記論理回路に含まれる非同期順序回路のクロック周期Tdistと、前記非同期順序回路の第1段目の順序回路のメタステーブル収束時間Tmcと、に基づいて、下記の(1)式により、メタステーブル状態値の生成段数cを算出する。また、前記順序回路特定処理において、前記コンピュータは、所定のプログラム言語で記述された、前記論理回路の回路設計プログラムを解析することにより、前記第1段目の順序回路から前記第1段目の順序回路の出力側に接続される第n段目(nは、n≧2を満たす整数)の順序回路までを特定する。また、前記機能シミュレーション制御処理において、前記コンピュータは、前記論理回路の機能シミュレーションにおいて、前記第1段目から第n段目の順序回路に、それぞれ前記生成段数cから(前記生成段数c−(n−1))に等しいクロックサイクル数分、前記メタステーブル状態値を出力させる。
c=int(Tmc/Tdist)+1 ・・・・・(1)
【0010】
本発明の第2の態様においては、非同期順序回路において、1段目の順序回路は生成段数cに等しいクロックサイクルの間、・・・n段目の順序回路は(生成段数c−(n−1))に等しいクロックサイクルの間、メタステーブル状態値を出力する。そのため、非同期順序回路において、2段目以降の順序回路において発生するメタステーブル状態についても確実にシミュレーションすることができる。そのため、メタステーブル状態をより確実に想定して、非同期順序回路を含む論理回路の機能を検証することができる。
【発明の効果】
【0011】
本発明により、メタステーブル状態をより確実に想定して、非同期順序回路を含む論理回路の機能を検証することができる。
【図面の簡単な説明】
【0012】
【図1】本発明の実施の形態1に係る回路検証システムの構成の一例を示すブロック図である。
【図2】本発明の実施の形態1に係るコンピュータにおける回路検証方法を説明するフローチャートである。
【図3】本発明の実施の形態1に係るFFテーブルを示す図である。
【図4】本発明の実施の形態1に係る回路検証方法における順序回路の特定方法を説明するフローチャートである。
【図5】本発明の実施の形態1に係る回路検証方法における機能シミュレーションを説明するフローチャートである。
【図6】本発明の実施の形態1に係る回路検証方法における機能シミュレーションを説明するフローチャートである。
【図7】非同期回路の一例を示す図である。
【図8】本発明の実施の形態1に係る回路検証方法における機能シミュレーションを説明するタイミングチャートである。
【図9】本発明の実施の形態2に係る回路検証方法における機能シミュレーションを説明するフローチャートである。
【図10】本発明の実施の形態2に係る回路検証方法における機能シミュレーションを説明するタイミングチャートである。
【発明を実施するための形態】
【0013】
以下に、本発明を適用可能な実施の形態を説明する。なお、本発明は、以下の実施の形態に限定されるものではない。
実施の形態1.
図1は、本発明の実施の形態1に係る回路検証システム100の構成の一例を示すブロック図である。
図1に示すように、回路検証システム100は、サーバ1、コンピュータ2,・・・等を備えている。サーバ1とコンピュータ2(回路検証装置),・・・とはネットワーク3を介して通信可能に接続されている。
また、サーバ1は、記録媒体10を備えている。記録媒体10は、シミュレーションプログラム等のCAD設計ツールを格納している。
また、記録媒体10は、クロック周期Tdist、メタステーブル収束時間Tmc、変数c(後述)等の定数、変数を格納している。
ここで、メタステーブル収束時間Tmcは、一のクロック信号で動作する回路から出力された信号が入力される、他のクロック信号で動作する非同期順序回路の第1段目の順序回路がメタステーブル状態となった場合に、当該第1段目の順序回路の出力が安定するまでの時間である。
また、クロック周期Tdistは、一のクロック信号で動作する回路から出力された信号が入力される、他のクロック信号で動作する非同期順序回路のクロック周期である。
また、変数cとは、メタステーブル状態値Dmの生成段数である。また、メタステーブル状態値Dmとは、メタステーブル状態となった順序回路が出力する信号の値である。
なお、メタステーブル収束時間Tmc及びクロック周期Tdistは、経験則に基づいて決定される値である。
【0014】
コンピュータ2は、エンジニアワークステーション等である。また、コンピュータ2は、例えば、CPU(Central Processing Unit)、RAM(Random Access Memory)、ROM(Read Onry Memory)等を備えている。なお、図1において、CPU、RAM、ROMの図示は省略されている。
ROM(記憶部)は、コンピュータ2の各部を制御するための各種プログラム及び各種データを格納している。そして、CPUは、ROMに格納された各種プログラムを実行し、RAMに展開することにより、コンピュータ2の各部を制御する。
例えば、CPUは、ROMに格納された各種プログラムを実行することにより、ネットワーク3を介して、サーバ1の記録媒体10に格納されているCAD設計ツールやクロック周期Tdist、メタステーブル収束時間Tmc、変数c等の定数、変数等を取得し、ROMに格納する。また、ROMは、CPUによって生成されたFFテーブル4(後述)を格納する。
また、CPUは、ROMに格納されているCAD設計ツールを実行することにより、回路検証を行う。例えば、CPUは、ROMに格納されているCAD設計ツールを実行することにより、生成段数算出部、順序回路特定部、機能シミュレーション制御部、FFテーブル格納制御部等として機能する。
【0015】
なお、コンピュータ2の構成は、上記に限定されるものではない。例えば、上記各種プログラム等は、様々なタイプの非一時的なコンピュータ可読媒体(non−transitory computer readable medium)に格納されればよい。例えば、上記各種プログラムは、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)、CD−ROM、CD−R、CD−R/W、半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM))等に格納されていてもよい。
【0016】
次に、本発明の実施の形態1に係るコンピュータ2における回路検証方法について、図2に示すフローチャートを参照しながら説明する。
まず、コンピュータ2は、RTL(Register Transfer Level)やネットリストレベルの記述を解析し、非同期転送に関係する順序回路を特定する(ステップS1)。
【0017】
具体的には、コンピュータ2は、図3に示すFFテーブル4を作成し、ROMに格納する。FFテーブル4は、メタステーブル状態となる順序回路のインスタンス名41と、メタステーブル状態が継続する時間を表すクロックサイクル数Cmeta42とが関連付けられた情報である。
コンピュータ2は、メタステーブル収束時間Tmcとクロック周期Tdistとに基づいて、メタステーブル状態となる順序回路を特定する。換言すれば、コンピュータ2は、一のクロック信号で動作する回路から出力された信号が入力される、他のクロック信号で動作する非同期順序回路の第1段目の順序回路を特定する。そして、特定した順序回路のインスタンス名をFFテーブル4のインスタンス名41に格納する。
また、コンピュータ2は、メタステーブル収束時間Tmcとクロック周期Tdistとに基づいて、クロックサイクル数Cmetaを決定し、FFテーブル4のクロックサイクル数Cmeta42に格納する。
さらに、コンピュータ2は、上記で特定した第1段目の順序回路の出力側(後段側)に接続されている第n段目(nは、n≧2を満たす整数)の順序回路を新たに特定する。そして、新たに特定した第n段目の順序回路のインスタンス名とクロックサイクル数Cmetaとを対応付けて、FFテーブル4に格納する。
【0018】
次に、コンピュータ2は、シミュレーション前処理を行う(ステップS2)。
具体的には、コンピュータ2は、ステップS1において特定した順序回路に、シミュレーションのための動作フローを割り当てる。より具体的には、ステップS1において特定した順序回路以外の回路に対しては、後述する図5のフローチャートで示される動作フローを割り当てる。また、ステップS1において特定した順序回路に対しては、図6のフローチャートで示される動作フローを割り当てる。例えば、ステップS1において特定した順序回路以外の回路に対しては、図5のフローチャートで示される動作フローを割り当てるフラグがONとなり、ステップS1において特定した順序回路に対しては、図6のフローチャートで示される動作フローを割り当てるフラグがONとなるように、回路毎にフロー割り当てフラグを決定する(図示省略)。
【0019】
次に、コンピュータ2は、ステップS2において割り当てた動作フローに従って、各回路の機能シミュレーションを行う(ステップS3;機能シミュレーション制御処理)。ここで、機能シミュレーションとは、回路の機能を検証するために行われるシミュレーションである。具体的には、コンピュータ2が、RTLやネットリストで記述された回路設計プログラムを実行することにより、当該回路設計プログラムによって表される回路を仮想的に動作させて、得られる動作結果から、当該回路の機能を検証する。
【0020】
次に、図2のステップS1における順序回路の特定方法について、図4に示すフローチャートを参照しながら、説明する。
まず、コンピュータ2は、メタステーブル状態値Dmの生成段数cを、下記の(1)式を用いて計算する(ステップS101;生成段数算出処理)。
c=int(Tmc/Tdist)+1 ・・・・・(1)
【0021】
次に、コンピュータ2は、メタステーブル状態となる順序回路を特定する。換言すれば、コンピュータ2は、一のクロック信号で動作する回路から出力された信号が入力される、他のクロック信号で動作する非同期順序回路の第1段目の順序回路を特定する(ステップS102;順序回路特定処理)。
【0022】
次いで、コンピュータ2は、ステップS102において特定した第1段目の順序回路のインスタンス名と、(1)式から求めた生成段数c(クロックサイクル数)とを対応付けて、FFテーブル4に格納する(ステップS103;FFテーブル格納制御処理)。ここで、生成段数cはクロックサイクル数としてFFテーブル4に格納される。
【0023】
次に、コンピュータ2は、ステップS101で求めた生成段数cが1以下か否かを判断する(ステップS104)。
ステップS104において、生成段数cが1以下である場合(ステップS104;Yes)、本処理を終了する。
ステップS104において、生成段数cが1より大きい場合(ステップS104;No)、当該生成段数cからn−1(nは、n≧2を満たす整数)を減ずる(ステップS105)。
【0024】
次に、コンピュータ2は、ステップS102で特定した第1段目の順序回路の出力側(後段側)に接続されている第n段目(nは、n≧2を満たす整数)の順序回路を新たに特定する(ステップS106;順序回路特定処理)。
【0025】
次に、コンピュータ2は、ステップS106において特定した第n段目の順序回路のインスタンス名と、ステップS105において算出した生成段数(c−(n−1))とを対応付けて、FFテーブル4に格納し(ステップS107;FFテーブル格納制御処理)、ステップS104に戻る。換言すれば、コンピュータ2は、ステップS105において算出した生成段数(c−(n−1))を、ステップS106において特定した第n段目の順序回路のクロックサイクル数として、FFテーブル4に格納する。
【0026】
次に、図2のステップS1の処理、すなわち図4に示す処理において特定された順序回路以外の回路に対して割り当てられた動作フローについて、図5に示すフローチャートを参照しながら説明する。換言すれば、図2のステップS1において特定された順序回路以外の回路に対して、図2のステップS3において行われる機能シミュレーションについて、図5に示すフローチャートについて説明する。ここで、図2のステップS1において特定された順序回路以外の回路として、フリップフロップ回路を例に挙げて説明する。
【0027】
まず、フリップフロップ回路は、入力されたクロック信号のアクティブエッジを検出したか否か判断する(ステップS201)。
ステップS201において、フリップフロップ回路が、入力されたクロック信号のアクティブエッジを検出しなかった場合(ステップS201;No)、ステップS203に進む。
ステップS201において、フリップフロップ回路が、入力されたクロック信号のアクティブエッジを検出した場合(ステップS201;Yes)、フリップフロップ回路は、入力信号を保持する(ステップS202)。
【0028】
次に、フリップフロップ回路は、保持している信号を出力する(ステップS203)。
【0029】
次に、図2のステップS1の処理、すなわち図4に示す処理において特定された順序回路に対して割り当てられた動作フローについて、図6に示すフローチャートを参照しながら説明する。換言すれば、図2のステップS1において特定された順序回路に対して、図2のステップS3において行われる機能シミュレーションについて、図6に示すフローチャートについて説明する。
なお、図6に示す各ステップの処理は、全ての順序回路に入力されるクロック信号の周期を超えないで、所定の時間内(シミュレーションサイクル1〜2の間、・・・シミュレーションサイクルm〜m+1の間(mは、自然数))に行われるものとする。また、生成段数c、各順序回路が保持する値、各種のフラグは順序回路毎に固有の値であり、コンピュータ2のROM等のローカルなハードディスク又はメモリなどに記憶され、少なくとも機能シミュレーションの間保持されるものである。
【0030】
まず、順序回路は、入力されたクロック信号のアクティブエッジを検出したか否か判断する(ステップS301)。
ステップS301において、順序回路が、入力されたクロック信号のアクティブエッジを検出した場合(ステップS301;Yes)、コンピュータ2は、FFテーブル4を参照し、当該順序回路のインスタンス名に対応するクロックサイクル数(生成段数c)が0より大きいか否かを判断する(ステップS302)。
【0031】
ステップS302において、クロックサイクル数(生成段数c)が0より大きかった場合(ステップS302;Yes)、コンピュータ2は、当該クロックサイクル数(生成段数c)から1を減ずる(ステップS303)。
ステップS302において、クロックサイクル数(生成段数c)が0以下である場合(ステップS302;No)、コンピュータ2は、順序回路に入力される信号の値に変化があるか否かを判断する(ステップS304)。
【0032】
ステップS304において、順序回路に入力される信号の値に変化がない場合(ステップS304;No)、コンピュータ2は、当該クロックサイクル数(生成段数c)が0であるか否かを判断することにより、当該順序回路がメタステーブル状態であるか否かを判断する(ステップS305)。
ステップS305において、当該クロックサイクル数(生成段数c)が0でない場合、すなわち、当該順序回路がメタステーブル状態である場合(ステップS305;No)、ステップS308に進む。
ステップS305において、当該クロックサイクル数(生成段数c)が0である場合、すなわち、当該順序回路がメタステーブル状態ではない場合(ステップS305;Yes)、ステップS312に進む。
【0033】
ステップS304において、順序回路に入力される信号の値に変化がある場合(ステップS304;Yes)、コンピュータ2は、FFテーブル4を参照し、当該順序回路のインスタンス名に対応するクロックサイクル数(生成段数c)をメタステーブルカウンタの値として設定する(ステップS306)。なお、コンピュータ2のCPUがROMに格納されているメタステーブルカウンタプログラムを実行することにより、メタステーブルカウンタとして機能する。
【0034】
次に、順序回路は、入力される信号の値を保持する(ステップS307)。
【0035】
次に、コンピュータ2は、当該順序回路のメタステーブル状態値Dmを生成して、ROMに格納するとともに、当該順序回路は当該メタステーブル状態値Dmを保持する(ステップS308)。ここで、メタステーブル状態値Dmはランダムな値であり、ステップS307で保持した値とは異なる値である。
【0036】
次に、順序回路は、ステップS308で保持したメタステーブル状態値Dmを出力する(ステップS309)。
【0037】
一方、ステップS301において、順序回路が、入力されたクロック信号のアクティブエッジを検出しなかった場合(ステップS301;No)、コンピュータ2は、FFテーブル4を参照し、当該順序回路のインスタンス名に対応するクロックサイクル数(生成段数c)が0であるか否かを判断することにより、当該順序回路がメタステーブル状態であるか否かを判断する(ステップS310)。
【0038】
ステップS310において、クロックサイクル数(生成段数c)が0である場合、すなわち、当該順序回路がメタステーブル状態ではない場合(ステップS310;Yes)、当該順序回路は、保持している信号を出力する(ステップS312)。
ステップS310において、クロックサイクル数(生成段数c)が0でない場合、すなわち、当該順序回路がメタステーブル状態である場合(ステップS310;No)、コンピュータ2は、当該順序回路のメタステーブル状態値Dmを生成して、ROMに格納するとともに、当該順序回路は当該メタステーブル状態値Dmを保持する。次いで、順序回路は、保持したメタステーブル状態値Dmを出力する(ステップS311)。
【0039】
次に、図7に示す非同期回路200を例に挙げて、本発明の実施の形態1に係るコンピュータ2における回路検証方法について説明する。
図7に示す非同期回路200は、一のクロック信号CLK1により動作するフリップフロップ回路FF01と、他のクロック信号CLK2により動作する非同期順序回路201と、組合せ回路CC2と、を備えている。
非同期順序回路201は、3つのフリップフロップ回路FF02,FF03,FF04を備えている。そして、フリップフロップ回路FF01のから出力された信号Q01は、フリップフロップ回路FF02の入力端子に入力される。また、フリップフロップ回路FF02のから出力された信号Q02は、フリップフロップ回路FF03の入力端子に入力される。また、フリップフロップ回路FF03のから出力された信号Q03は、フリップフロップ回路FF04の入力端子に入力される。また、フリップフロップ回路FF04のから出力された信号Q04は、組合せ回路CC2に入力される。また、フリップフロップ回路FF01の入力端子には、入力信号DIN1が入力される。
【0040】
図8は、図7に示す非同期回路200に対して、本発明の実施の形態1に係るコンピュータ2によって回路検証を行った場合におけるタイミングチャートである。
図8において、非同期順序回路201のクロック周期Tdistを10ns、メタステーブル収束時間Tmcを6ns、フリップフロップ回路FF01,FF02,FF03,FF04のインスタンス名をそれぞれ「FF01」,「FF02」,「FF03」,「FF04」とする。初期状態において、FFテーブル4には、何も登録されていないこととする。
【0041】
まず、図4のステップSS101において、コンピュータ2は、(1)式により、メタステーブル状態値Dmの生成段数cを算出する。c=int(6/10)+1=2より、生成段数cの値は2となる。
【0042】
次に、ステップS102において、コンピュータ2は、一のクロック信号で動作する回路から出力された信号が入力される、他のクロック信号で動作する非同期順序回路の第1段目の順序回路として、フリップフロップ回路FF02を特定する。
【0043】
次に、ステップS103において、コンピュータ2は、特定したフリップフロップ回路FF02のインスタンス名「FF02」と、生成段数c(クロックサイクル数)の値「2」とを対応付けて、FFテーブル4に格納する。
【0044】
次に、ステップS104において、コンピュータ2は、生成段数cが1以上と判断し(ステップS104;No)、ステップS105において、コンピュータ2は、当該生成段数cから1を減ずる。
【0045】
次に、ステップS106において、コンピュータ2は、ステップS102で特定したフリップフロップ回路FF02の出力側(後段側)に接続されているフリップフロップ回路FF03を第2段目の順序回路として新たに特定する。
【0046】
次に、ステップS107において、コンピュータ2は、ステップS106において特定したフリップフロップ回路FF03のインスタンス名「FF03」と、ステップS105において算出した生成段数(c−1)の値「1」とを対応付けて、FFテーブル4に格納し、ステップS104に戻る。
【0047】
次に、ステップS104において、コンピュータ2は、生成段数(c−1)が1であると判断し(ステップS104;Yes)、本処理を終了する。
【0048】
次に、図2のステップS2において、コンピュータ2は、シミュレーション前処理を行う。
具体的には、FFテーブル4にインスタンス名が登録されていないフリップフロップ回路FF01,FF04に対しては、図5のフローチャートで示される動作フローを割り当てる。また、FFテーブル4にインスタンス名が登録されているフリップフロップ回路FF02,FF03に対しては、図6のフローチャートで示される動作フローを割り当てる。
【0049】
次に、図2のステップS3において、コンピュータ2は、ステップS2において割り当てた動作フローに従って、各回路の機能シミュレーションを行う。
以下、具体的に、図2のステップS3における機能シミュレーションについて、図8に示すタイミングチャートを参照しながら説明する。
図8の上段に記載された数字「1」〜「26」は、シミュレーションサイクルを示す。初期状態のシミュレーションサイクル0においてクロック信号CLK1,CLK2の値は「0」であり、入力信号DINの値は「0」であり、フリップフロップ回路FF01,FF02,FF03,FF04が保持している値は「0」であり、生成段数cの値は、「0」であるとする。また、機能シミュレーションは、フリップフロップ回路FF04、フリップフロップ回路FF03、フリップフロップ回路FF02、フリップフロップ回路FF01の順に行う。
【0050】
<シミュレーションサイクル0〜1について>
(フリップフロップ回路FF04について)
シミュレーションサイクル0〜1において、クロック信号CLK2がアクティブエッジとなる(ステップS201;Yes、ステップS301;Yes)。
そのため、フリップフロップ回路FF04は、図5のステップS202において、信号Q03の値「0」を保持するとともに、図5のステップS203において保持している値「0」を信号Q04として出力する。
【0051】
(フリップフロップ回路FF03について)
また、クロックサイクル数(生成段数c)の値が「0」であるため(ステップS302;No)、ステップS304において、コンピュータ2は、フリップフロップ回路FF03に入力される信号Q02の値「0」と保持している値「0」とを比較し、フリップフロップ回路FF03に入力される信号の値に変化がないと判断する(ステップS304;No)。
次に、ステップS305において、コンピュータ2は、当該クロックサイクル数(生成段数c)が0であるか否かを判断することにより、当該フリップフロップ回路FF03がメタステーブル状態であるか否かを判断する。フリップフロップ回路FF03のクロックサイクル数は「0」であるため、コンピュータ2は、フリップフロップ回路FF03がメタステーブル状態ではないと判断する(ステップS305;Yes)。
そして、図6のステップS312において、フリップフロップ回路FF03は、保持している値「0」を信号Q03として出力するとともに、信号Q02の値「0」を保持する。
【0052】
(フリップフロップ回路FF02について)
また、フリップフロップ回路FF02の場合も、フリップフロップ回路FF03と同様に、クロックサイクル数(生成段数c)の値が「0」であり(ステップS302;No)、フリップフロップ回路FF02に入力される信号の値に変化がないため(ステップS304;No)、コンピュータ2は、フリップフロップ回路FF02がメタステーブル状態ではないと判断する(ステップS305;Yes)。
そして、図6のステップS312において、フリップフロップ回路FF02は、保持している値「0」を信号Q02として出力するとともに、信号Q01の値「0」を保持する。
【0053】
(フリップフロップ回路FF01について)
また、シミュレーションサイクル0〜1において、クロック信号CLK1がアクティブエッジとはならない(ステップS201;No)。
そのため、図5のステップS203において、フリップフロップ回路FF01は、保持している値「0」を信号Q01として出力する。
【0054】
<シミュレーションサイクル2〜3について>
(フリップフロップ回路FF04について)
シミュレーションサイクル2〜3において、クロック信号CLK2がアクティブエッジとはならない(ステップS201;No、ステップS301;No)。
そのため、フリップフロップ回路FF04は、図5のステップS203において保持している値「0」を信号Q04として出力する。
【0055】
(フリップフロップ回路FF03について)
また、クロックサイクル数(生成段数c)の値が「0」であるため、コンピュータ2は、フリップフロップ回路FF03がメタステーブル状態ではないと判断する(ステップS310;Yes)。
そして、図6のステップS312において、フリップフロップ回路FF03は、保持している値「0」を信号Q03として出力する。
【0056】
(フリップフロップ回路FF02について)
また、フリップフロップ回路FF02の場合も、フリップフロップ回路FF03と同様に、クロックサイクル数(生成段数c)の値が「0」であるため、コンピュータ2は、フリップフロップ回路FF02がメタステーブル状態ではないと判断する(ステップS310;Yes)。
そして、図6のステップS312において、フリップフロップ回路FF02は、保持している値「0」を信号Q02として出力する。
【0057】
(フリップフロップ回路FF01について)
また、シミュレーションサイクル2〜3において、クロック信号CLK1がアクティブエッジとはならない(ステップS201;No)。
そのため、図5のステップS203において、フリップフロップ回路FF01は、保持している値「0」を信号Q01として出力する。
【0058】
<シミュレーションサイクル4について>
(フリップフロップ回路FF04について)
シミュレーションサイクル4において、クロック信号CLK2がアクティブエッジとはならない(ステップS201;No、ステップS301;No)。
そのため、フリップフロップ回路FF04は、図5のステップS203において保持している値「0」を信号Q04として出力する。
【0059】
(フリップフロップ回路FF03について)
また、クロックサイクル数(生成段数c)の値が「0」であるため、コンピュータ2は、フリップフロップ回路FF03がメタステーブル状態ではないと判断する(ステップS310;Yes)。
そして、図6のステップS312において、フリップフロップ回路FF03は、保持している値「0」を信号Q03として出力する。
【0060】
(フリップフロップ回路FF02について)
また、フリップフロップ回路FF02の場合も、フリップフロップ回路FF03と同様に、クロックサイクル数(生成段数c)の値が「0」であるため、コンピュータ2は、フリップフロップ回路FF02がメタステーブル状態ではないと判断する(ステップS310;Yes)。
そして、図6のステップS312において、フリップフロップ回路FF02は、保持している値「0」を信号Q02として出力する。
【0061】
(フリップフロップ回路FF01について)
また、シミュレーションサイクル4において、クロック信号CLK1がアクティブエッジとなる(ステップS201;Yes)。
そのため、フリップフロップ回路FF01は、図5のステップS202において、入力信号DINの値「7」を保持するとともに、図5のステップS203において保持している値「7」を信号Q01として出力する。
【0062】
<シミュレーションサイクル5について>
(フリップフロップ回路FF04について)
シミュレーションサイクル5において、クロック信号CLK2がアクティブエッジとなる(ステップS201;Yes、ステップS301;Yes)。
そのため、フリップフロップ回路FF04は、図5のステップS202において、信号Q03の値「0」を保持するとともに、図5のステップS203において保持している値「0」を信号Q04として出力する。
【0063】
(フリップフロップ回路FF03について)
また、クロックサイクル数(生成段数c)の値が「0」であり(ステップS302;No)、フリップフロップ回路FF03に入力される信号の値に変化がないため(ステップS304;No)、クロックサイクル数(生成段数c)が0であるため、コンピュータ2は、フリップフロップ回路FF03がメタステーブル状態ではないと判断する(ステップS305;Yes)。
そして、図6のステップS312において、フリップフロップ回路FF03は、保持している値「0」を信号Q03として出力するとともに、信号Q02の値「0」を保持する。
【0064】
(フリップフロップ回路FF02について)
また、クロックサイクル数(生成段数c)の値が「0」であるため(ステップS302;No)、ステップS304において、コンピュータ2は、フリップフロップ回路FF02に入力される信号Q01の値「7」と保持している値「0」とを比較し、フリップフロップ回路FF03に入力される信号の値に変化があると判断する(ステップS304;Yes)。
次に、ステップS306において、コンピュータ2は、FFテーブル4のインスタンス名「FF02」に対応するクロックサイクル数(生成段数c)の値「2」を新たにメタステーブルカウンタの値として設定する。
そして、図6のステップ307において、フリップフロップ回路FF02は、入力される信号Q01の値「7」を保持する。
【0065】
次に、ステップS308において、コンピュータ2は、フリップフロップ回路FF02のメタステーブル状態値Dmを生成して、ROMに格納するとともに、フリップフロップ回路FF02は当該メタステーブル状態値Dmを保持する。ここで、メタステーブル状態値Dmはランダムな値であり、ステップS307で保持した値「7」とは異なる値である。ここでは、コンピュータ2は、メタステーブル状態値Dmとして「5」を生成したものとする。
次に、ステップS309において、フリップフロップ回路FF02は、ステップS308で保持したメタステーブル状態値Dmである値「5」を、信号Q02として出力する。
【0066】
(フリップフロップ回路FF01について)
また、シミュレーションサイクル5において、クロック信号CLK1がアクティブエッジとはならない(ステップS201;No)。
そのため、図5のステップS203において、フリップフロップ回路FF01は、保持している値「7」を信号Q01として出力する。
【0067】
<シミュレーションサイクル6〜8について>
(フリップフロップ回路FF04について)
シミュレーションサイクル6〜8において、クロック信号CLK2がアクティブエッジとはならない(ステップS201;No、ステップS301;No)。
そのため、フリップフロップ回路FF04は、図5のステップS203において保持している値「0」を信号Q04として出力する。
【0068】
(フリップフロップ回路FF03について)
また、クロックサイクル数(生成段数c)の値が「0」であるため、コンピュータ2は、フリップフロップ回路FF03がメタステーブル状態ではないと判断する(ステップS310;Yes)。
そして、図6のステップS312において、フリップフロップ回路FF03は、保持している値「0」を信号Q03として出力する。
【0069】
(フリップフロップ回路FF02について)
また、クロックサイクル数(生成段数c)の値が「2」であるため、コンピュータ2は、フリップフロップ回路FF02がメタステーブル状態であると判断する(ステップS310;No)。
そして、図6のステップS311において、フリップフロップ回路FF02は、メタステーブル状態値Dmである値「5」を信号Q02として出力する。
【0070】
(フリップフロップ回路FF01について)
また、シミュレーションサイクル6〜8において、クロック信号CLK1がアクティブエッジとはならない(ステップS201;No)。
そのため、図5のステップS203において、フリップフロップ回路FF01は、保持している値「7」を信号Q01として出力する。
【0071】
<シミュレーションサイクル9について>
(フリップフロップ回路FF04について)
シミュレーションサイクル9において、クロック信号CLK2がアクティブエッジとなる(ステップS201;Yes、ステップS301;Yes)。
そのため、フリップフロップ回路FF04は、図5のステップS202において、信号Q03の値「0」を保持するとともに、図5のステップS203において保持している値「0」を信号Q04として出力する。
【0072】
(フリップフロップ回路FF03について)
また、クロックサイクル数(生成段数c)の値が「0」であるため(ステップS302;No)、ステップS304において、コンピュータ2は、フリップフロップ回路FF03に入力される信号Q02の値「5」と保持している値「0」とを比較し、フリップフロップ回路FF03に入力される信号の値に変化があると判断する(ステップS304;Yes)。
次に、ステップS306において、コンピュータ2は、FFテーブル4のインスタンス名「FF03」に対応するクロックサイクル数(生成段数(c−1))の値「1」を新たにメタステーブルカウンタの値として設定する。
そして、図6のステップ307において、フリップフロップ回路FF03は、入力される信号Q02の値「5」を保持する。
【0073】
次に、ステップS308において、コンピュータ2は、フリップフロップ回路FF03のメタステーブル状態値Dmを生成して、ROMに格納するとともに、フリップフロップ回路FF03は当該メタステーブル状態値Dmを保持する。ここで、メタステーブル状態値Dmはランダムな値であり、ステップS307で保持した値「5」とは異なる値である。ここでは、コンピュータ2は、メタステーブル状態値Dmとして「2」を生成したものとする。
次に、ステップS309において、フリップフロップ回路FF03は、ステップS308で保持したメタステーブル状態値Dmである値「2」を、信号Q03として出力する。
【0074】
(フリップフロップ回路FF02について)
また、クロックサイクル数(生成段数c)の値が「2」であるため(ステップS302;Yes)、ステップS303において、コンピュータ2は、当該クロックサイクル数から1を減ずる。これにより、クロックサイクル数の値は「1」となる。
次に、フリップフロップ回路FF02に入力される信号Q01の値は「7」であり、フリップフロップ回路FF02が保持している値も「7」であるため、コンピュータ2は、フリップフロップ回路FF02に入力される信号Q01の値に変化がないと判断する(ステップS304;No)。
次に、フリップフロップ回路FF02のクロックサイクル数(生成段数c)は「1」であるため、コンピュータ2は、フリップフロップ回路FF02がメタステーブル状態であると判断する(ステップS305;No)。
次に、ステップS308において、コンピュータ2は、フリップフロップ回路FF02のメタステーブル状態値Dmを生成して、ROMに格納するとともに、フリップフロップ回路FF02は当該メタステーブル状態値Dmを保持する。ここでは、コンピュータ2は、メタステーブル状態値Dmとして「1」を生成したものとする。
次に、ステップS309において、フリップフロップ回路FF02は、ステップS308で保持したメタステーブル状態値Dmである値「1」を、信号Q02として出力する。
【0075】
(フリップフロップ回路FF01について)
また、シミュレーションサイクル9において、クロック信号CLK1がアクティブエッジとはならない(ステップS201;No)。
そのため、図5のステップS203において、フリップフロップ回路FF01は、保持している値「7」を信号Q01として出力する。
【0076】
<シミュレーションサイクル10〜12について>
(フリップフロップ回路FF04について)
シミュレーションサイクル10〜12において、クロック信号CLK2がアクティブエッジとはならない(ステップS201;No、ステップS301;No)。
そのため、フリップフロップ回路FF04は、図5のステップS203において保持している値「0」を信号Q04として出力する。
【0077】
(フリップフロップ回路FF03について)
また、クロックサイクル数(生成段数c)の値が「1」であるため、コンピュータ2は、フリップフロップ回路FF03がメタステーブル状態であると判断する(ステップS310;No)。
そして、図6のステップS311において、フリップフロップ回路FF03は、メタステーブル状態値Dmである値「2」を信号Q03として出力する。
【0078】
(フリップフロップ回路FF02について)
また、クロックサイクル数(生成段数c)の値が「1」であるため、コンピュータ2は、フリップフロップ回路FF02がメタステーブル状態であると判断する(ステップS310;No)。
そして、図6のステップS311において、フリップフロップ回路FF02は、メタステーブル状態値Dmである値「1」を信号Q02として出力する。
【0079】
(フリップフロップ回路FF01について)
また、シミュレーションサイクル10〜12において、クロック信号CLK1がアクティブエッジとはならない(ステップS201;No)。
そのため、図5のステップS203において、フリップフロップ回路FF01は、保持している値「7」を信号Q01として出力する。
【0080】
<シミュレーションサイクル13について>
(フリップフロップ回路FF04について)
シミュレーションサイクル13において、クロック信号CLK2がアクティブエッジとなる(ステップS201;Yes、ステップS301;Yes)。
そのため、フリップフロップ回路FF04は、図5のステップS202において、信号Q03の値「2」を保持するとともに、図5のステップS203において保持している値「2」を信号Q04として出力する。
【0081】
(フリップフロップ回路FF03について)
また、クロックサイクル数(生成段数c)の値が「1」であるため(ステップS302;Yes)、ステップS303において、コンピュータ2は、当該クロックサイクル数から1を減ずる。これにより、クロックサイクル数の値は「0」となる。
次に、フリップフロップ回路FF03に入力される信号Q02の値は「1」であり、フリップフロップ回路FF03が保持している値は「5」であるため、コンピュータ2は、フリップフロップ回路FF03に入力される信号Q02の値に変化があると判断する(ステップS304;Yes)。
次に、ステップS306において、コンピュータ2は、FFテーブル4のインスタンス名「FF03」に対応するクロックサイクル数(生成段数(c−1))の値「1」を新たにメタステーブルカウンタの値として設定する。
そして、図6のステップ307において、フリップフロップ回路FF03は、入力される信号Q02の値「1」を保持する。
【0082】
次に、ステップS308において、コンピュータ2は、フリップフロップ回路FF03のメタステーブル状態値Dmを生成して、ROMに格納するとともに、フリップフロップ回路FF03は当該メタステーブル状態値Dmを保持する。ここでは、コンピュータ2は、メタステーブル状態値Dmとして「4」を生成したものとする。
次に、ステップS309において、フリップフロップ回路FF03は、ステップS308で保持したメタステーブル状態値Dmである値「4」を、信号Q03として出力する。
【0083】
(フリップフロップ回路FF02について)
また、クロックサイクル数(生成段数c)の値が「1」であるため(ステップS302;Yes)、ステップS303において、コンピュータ2は、当該クロックサイクル数から1を減ずる。これにより、クロックサイクル数の値は「0」となる。
次に、フリップフロップ回路FF02に入力される信号Q01の値は「7」であり、フリップフロップ回路FF02が保持している値も「7」であるため、コンピュータ2は、フリップフロップ回路FF02に入力される信号Q01の値に変化がないと判断する(ステップS304;No)。
次に、フリップフロップ回路FF02のクロックサイクル数(生成段数c)は「0」であるため、コンピュータ2は、フリップフロップ回路FF02がメタステーブル状態ではないと判断する(ステップS305;Yes)。
そして、図6のステップS312において、フリップフロップ回路FF02は、保持している値「7」を信号Q02として出力する。
【0084】
(フリップフロップ回路FF01について)
また、シミュレーションサイク13において、クロック信号CLK1がアクティブエッジとはならない(ステップS201;No)。
そのため、図5のステップS203において、フリップフロップ回路FF01は、保持している値「7」を信号Q01として出力する。
【0085】
<シミュレーションサイクル14〜16について>
(フリップフロップ回路FF04について)
シミュレーションサイクル14〜16において、クロック信号CLK2がアクティブエッジとはならない(ステップS201;No、ステップS301;No)。
そのため、フリップフロップ回路FF04は、図5のステップS203において保持している値「2」を信号Q04として出力する。
【0086】
(フリップフロップ回路FF03について)
また、クロックサイクル数(生成段数c)の値が「1」であるため、コンピュータ2は、フリップフロップ回路FF03がメタステーブル状態であると判断する(ステップS310;No)。
そして、図6のステップS311において、フリップフロップ回路FF03は、メタステーブル状態値Dmである値「4」を信号Q03として出力する。
【0087】
(フリップフロップ回路FF02について)
また、クロックサイクル数(生成段数c)の値が「0」であるため、コンピュータ2は、フリップフロップ回路FF02がメタステーブル状態ではないと判断する(ステップS310;Yes)。
そして、図6のステップS312において、フリップフロップ回路FF02は、保持している値「7」を信号Q02として出力する。
【0088】
(フリップフロップ回路FF01について)
また、シミュレーションサイクル10〜12において、クロック信号CLK1がアクティブエッジとはならない(ステップS201;No)。
そのため、図5のステップS203において、フリップフロップ回路FF01は、保持している値「7」を信号Q01として出力する。
【0089】
<シミュレーションサイクル17について>
(フリップフロップ回路FF04について)
シミュレーションサイクル17において、クロック信号CLK2がアクティブエッジとなる(ステップS201;Yes、ステップS301;Yes)。
そのため、フリップフロップ回路FF04は、図5のステップS202において、信号Q03の値「4」を保持するとともに、図5のステップS203において保持している値「4」を信号Q04として出力する。
【0090】
(フリップフロップ回路FF03について)
また、クロックサイクル数(生成段数c)の値が「1」であるため(ステップS302;Yes)、ステップS303において、コンピュータ2は、当該クロックサイクル数から1を減ずる。これにより、クロックサイクル数の値は「0」となる。
次に、フリップフロップ回路FF03に入力される信号Q02の値は「7」であり、フリップフロップ回路FF03が保持している値は「4」であるため、コンピュータ2は、フリップフロップ回路FF03に入力される信号Q02の値に変化があると判断する(ステップS304;Yes)。
次に、ステップS306において、コンピュータ2は、FFテーブル4のインスタンス名「FF03」に対応するクロックサイクル数(生成段数(c−1))の値「1」を新たにメタステーブルカウンタの値として設定する。
そして、図6のステップ307において、フリップフロップ回路FF03は、入力される信号Q02の値「7」を保持する。
【0091】
次に、ステップS308において、コンピュータ2は、フリップフロップ回路FF03のメタステーブル状態値Dmを生成して、ROMに格納するとともに、フリップフロップ回路FF03は当該メタステーブル状態値Dmを保持する。ここでは、コンピュータ2は、メタステーブル状態値Dmとして「6」を生成したものとする。
次に、ステップS309において、フリップフロップ回路FF03は、ステップS308で保持したメタステーブル状態値Dmである値「6」を、信号Q03として出力する。
【0092】
(フリップフロップ回路FF02について)
また、クロックサイクル数(生成段数c)の値が「0」であり(ステップS302;No)、フリップフロップ回路FF02に入力される信号Q01の値は「7」であり、フリップフロップ回路FF02が保持している値も「7」であるため、コンピュータ2は、フリップフロップ回路FF02に入力される信号Q01の値に変化がないと判断する(ステップS304;No)。
次に、フリップフロップ回路FF02のクロックサイクル数(生成段数c)は「0」であるため、コンピュータ2は、フリップフロップ回路FF02がメタステーブル状態ではないと判断する(ステップS305;Yes)。
そして、図6のステップS312において、フリップフロップ回路FF02は、保持している値「7」を信号Q02として出力する。
【0093】
(フリップフロップ回路FF01について)
また、シミュレーションサイクル17において、クロック信号CLK1がアクティブエッジとはならない(ステップS201;No)。
そのため、図5のステップS203において、フリップフロップ回路FF01は、保持している値「7」を信号Q01として出力する。
【0094】
<シミュレーションサイクル18について>
(フリップフロップ回路FF04について)
シミュレーションサイクル18において、クロック信号CLK2がアクティブエッジとはならない(ステップS201;No、ステップS301;No)。
そのため、フリップフロップ回路FF04は、図5のステップS203において保持している値「4」を信号Q04として出力する。
【0095】
(フリップフロップ回路FF03について)
また、クロックサイクル数(生成段数c)の値が「1」であるため、コンピュータ2は、フリップフロップ回路FF03がメタステーブル状態であると判断する(ステップS310;No)。
そして、図6のステップS311において、フリップフロップ回路FF03は、メタステーブル状態値Dmである値「6」を信号Q03として出力する。
【0096】
(フリップフロップ回路FF02について)
また、クロックサイクル数(生成段数c)の値が「0」であるため、コンピュータ2は、フリップフロップ回路FF02がメタステーブル状態ではないと判断する(ステップS310;Yes)。
そして、図6のステップS312において、フリップフロップ回路FF02は、保持している値「7」を信号Q02として出力する。
【0097】
(フリップフロップ回路FF01について)
また、シミュレーションサイクル18において、クロック信号CLK1がアクティブエッジとなる(ステップS201;Yes)。
そのため、フリップフロップ回路FF01は、図5のステップS202において、入力信号DINの値「3」を保持するとともに、図5のステップS203において保持している値「3」を信号Q01として出力する。
【0098】
<シミュレーションサイクル19〜20について>
(フリップフロップ回路FF04について)
シミュレーションサイクル19〜20において、クロック信号CLK2がアクティブエッジとはならない(ステップS201;No、ステップS301;No)。
そのため、フリップフロップ回路FF04は、図5のステップS203において保持している値「4」を信号Q04として出力する。
【0099】
(フリップフロップ回路FF03について)
また、クロックサイクル数(生成段数c)の値が「1」であるため、コンピュータ2は、フリップフロップ回路FF03がメタステーブル状態であると判断する(ステップS310;No)。
そして、図6のステップS311において、フリップフロップ回路FF03は、メタステーブル状態値Dmである値「6」を信号Q03として出力する。
【0100】
(フリップフロップ回路FF02について)
また、クロックサイクル数(生成段数c)の値が「0」であるため、コンピュータ2は、フリップフロップ回路FF02がメタステーブル状態ではないと判断する(ステップS310;Yes)。
そして、図6のステップS312において、フリップフロップ回路FF02は、保持している値「7」を信号Q02として出力する。
【0101】
(フリップフロップ回路FF01について)
また、シミュレーションサイクル19〜20において、クロック信号CLK1がアクティブエッジとはならない(ステップS201;No)。
そのため、図5のステップS203において、フリップフロップ回路FF01は、保持している値「3」を信号Q01として出力する。
【0102】
<シミュレーションサイクル21について>
(フリップフロップ回路FF04について)
シミュレーションサイクル21において、クロック信号CLK2がアクティブエッジとなる(ステップS201;Yes、ステップS301;Yes)。
そのため、フリップフロップ回路FF04は、図5のステップS202において、信号Q03の値「6」を保持するとともに、図5のステップS203において保持している値「6」を信号Q04として出力する。
【0103】
(フリップフロップ回路FF03について)
また、クロックサイクル数(生成段数c)の値が「1」であるため(ステップS302;Yes)、ステップS303において、コンピュータ2は、当該クロックサイクル数から1を減ずる。これにより、クロックサイクル数の値は「0」となる。
次に、フリップフロップ回路FF03に入力される信号Q02の値は「7」であり、フリップフロップ回路FF03が保持している値も「7」であるため、コンピュータ2は、フリップフロップ回路FF03に入力される信号Q02の値に変化がないと判断する(ステップS304;No)。
次に、フリップフロップ回路FF03のクロックサイクル数(生成段数c)は「0」であるため、コンピュータ2は、フリップフロップ回路FF03がメタステーブル状態ではないと判断する(ステップS305;Yes)。
そして、図6のステップS312において、フリップフロップ回路FF03は、保持している値「7」を信号Q03として出力する。
【0104】
(フリップフロップ回路FF02について)
また、クロックサイクル数(生成段数c)の値が「0」であり(ステップS302;No)、フリップフロップ回路FF02に入力される信号Q01の値は「3」であり、フリップフロップ回路FF02が保持している値は「7」であるため、コンピュータ2は、フリップフロップ回路FF02に入力される信号Q01の値に変化があると判断する(ステップS304;Yes)。
次に、ステップS306において、コンピュータ2は、FFテーブル4のインスタンス名「FF02」に対応するクロックサイクル数(生成段数c)の値「2」を新たにメタステーブルカウンタの値として設定する。
そして、図6のステップ307において、フリップフロップ回路FF02は、入力される信号Q01の値「3」を保持する。
【0105】
次に、ステップS308において、コンピュータ2は、フリップフロップ回路FF02のメタステーブル状態値Dmを生成して、ROMに格納するとともに、フリップフロップ回路FF02は当該メタステーブル状態値Dmを保持する。ここでは、コンピュータ2は、メタステーブル状態値Dmとして「6」を生成したものとする。
次に、ステップS309において、フリップフロップ回路FF02は、ステップS308で保持したメタステーブル状態値Dmである値「6」を、信号Q01として出力する。
【0106】
(フリップフロップ回路FF01について)
また、シミュレーションサイクル21において、クロック信号CLK1がアクティブエッジとはならない(ステップS201;No)。
そのため、図5のステップS203において、フリップフロップ回路FF01は、保持している値「3」を信号Q01として出力する。
【0107】
<シミュレーションサイクル22〜24について>
(フリップフロップ回路FF04について)
シミュレーションサイクル22〜24において、クロック信号CLK2がアクティブエッジとはならない(ステップS201;No、ステップS301;No)。
そのため、フリップフロップ回路FF04は、図5のステップS203において保持している値「6」を信号Q04として出力する。
【0108】
(フリップフロップ回路FF03について)
また、クロックサイクル数(生成段数c)の値が「0」であるため、コンピュータ2は、フリップフロップ回路FF03がメタステーブル状態ではないと判断する(ステップS310;Yes)。
そして、図6のステップS312において、フリップフロップ回路FF03は、保持している値「7」を信号Q03として出力する。
【0109】
(フリップフロップ回路FF02について)
また、クロックサイクル数(生成段数c)の値が「2」であるため、コンピュータ2は、フリップフロップ回路FF02がメタステーブル状態であると判断する(ステップS310;No)。
そして、図6のステップS311において、フリップフロップ回路FF02は、メタステーブル状態値Dmである値「6」を信号Q02として出力する。
【0110】
(フリップフロップ回路FF01について)
また、シミュレーションサイクル22〜24において、クロック信号CLK1がアクティブエッジとはならない(ステップS201;No)。
そのため、図5のステップS203において、フリップフロップ回路FF01は、保持している値「3」を信号Q01として出力する。
【0111】
<シミュレーションサイクル25について>
(フリップフロップ回路FF04について)
シミュレーションサイクル25において、クロック信号CLK2がアクティブエッジとなる(ステップS201;Yes、ステップS301;Yes)。
そのため、フリップフロップ回路FF04は、図5のステップS202において、信号Q03の値「7」を保持するとともに、図5のステップS203において保持している値「7」を信号Q04として出力する。
【0112】
(フリップフロップ回路FF03について)
また、クロックサイクル数(生成段数c)の値が「0」であり(ステップS302;No)、フリップフロップ回路FF03に入力される信号Q02の値は「1」であり、フリップフロップ回路FF03が保持している値は「5」であるため、コンピュータ2は、フリップフロップ回路FF03に入力される信号Q02の値に変化があると判断する(ステップS304;Yes)。
次に、ステップS306において、コンピュータ2は、FFテーブル4のインスタンス名「FF03」に対応するクロックサイクル数(生成段数(c−1))の値「1」を新たにメタステーブルカウンタの値として設定する。
そして、図6のステップ307において、フリップフロップ回路FF03は、入力される信号Q02の値「1」を保持する。
【0113】
次に、ステップS308において、コンピュータ2は、フリップフロップ回路FF03のメタステーブル状態値Dmを生成して、ROMに格納するとともに、フリップフロップ回路FF02は当該メタステーブル状態値Dmを保持する。ここでは、コンピュータ2は、メタステーブル状態値Dmとして「5」を生成したものとする。
次に、ステップS309において、フリップフロップ回路FF03は、ステップS308で保持したメタステーブル状態値Dmである値「5」を、信号Q03として出力する。
【0114】
(フリップフロップ回路FF02について)
また、クロックサイクル数(生成段数c)の値が「2」であるため(ステップS302;No)、ステップS303において、コンピュータ2は、当該クロックサイクル数から1を減ずる。これにより、クロックサイクル数の値は「1」となる。
次に、フリップフロップ回路FF02に入力される信号Q01の値は「3」であり、フリップフロップ回路FF02が保持している値は「3」であるため、コンピュータ2は、フリップフロップ回路FF02に入力される信号Q01の値に変化がないと判断する(ステップS304;No)。
次に、フリップフロップ回路FF02のクロックサイクル数(生成段数c)は「1」であるため、コンピュータ2は、フリップフロップ回路FF03がメタステーブル状態であると判断する(ステップS305;No)。
【0115】
次に、ステップS308において、コンピュータ2は、フリップフロップ回路FF02のメタステーブル状態値Dmを生成して、ROMに格納するとともに、フリップフロップ回路FF02は当該メタステーブル状態値Dmを保持する。ここでは、コンピュータ2は、メタステーブル状態値Dmとして「1」を生成したものとする。
次に、ステップS309において、フリップフロップ回路FF02は、ステップS308で保持したメタステーブル状態値Dmである値「1」を、信号Q02として出力する。
【0116】
(フリップフロップ回路FF01について)
また、シミュレーションサイクル25において、クロック信号CLK1がアクティブエッジとはならない(ステップS201;No)。
そのため、図5のステップS203において、フリップフロップ回路FF01は、保持している値「3」を信号Q01として出力する。
【0117】
<シミュレーションサイクル26について>
(フリップフロップ回路FF04について)
シミュレーションサイクル26において、クロック信号CLK2がアクティブエッジとはならない(ステップS201;No、ステップS301;No)。
そのため、フリップフロップ回路FF04は、図5のステップS203において保持している値「7」を信号Q04として出力する。
【0118】
(フリップフロップ回路FF03について)
また、クロックサイクル数(生成段数c)の値が「1」であるため、コンピュータ2は、フリップフロップ回路FF03がメタステーブル状態であると判断する(ステップS310;No)。
そして、図6のステップS311において、フリップフロップ回路FF03は、メタステーブル状態値Dmである値「5」を信号Q03として出力する。
【0119】
(フリップフロップ回路FF02について)
また、クロックサイクル数(生成段数c)の値が「1」であるため、コンピュータ2は、フリップフロップ回路FF02がメタステーブル状態であると判断する(ステップS310;No)。
そして、図6のステップS311において、フリップフロップ回路FF02は、メタステーブル状態値Dmである値「1」を信号Q02として出力する。
【0120】
(フリップフロップ回路FF01について)
また、シミュレーションサイクル22〜24において、クロック信号CLK1がアクティブエッジとはならない(ステップS201;No)。
そのため、図5のステップS203において、フリップフロップ回路FF01は、保持している値「3」を信号Q01として出力する。
【0121】
以上に説明したように、フリップフロップ回路FF04の機能シミュレーションでは、シミュレーションサイクル13〜16,17〜20,21〜24の間、フリップフロップ回路FF03が出力したメタステーブル状態を保持し、保持したメタステーブル状態値がすべて異なる値となっている。また、フリップフロップ回路FF03の機能シミュレーションでは、シミュレーションサイクル9〜12,13〜16,17〜20,21〜24の間、フリップフロップ回路FF02が出力したメタステーブル状態を保持し、保持したメタステーブル状態値が全て異なる値となっている。
【0122】
具体的には、クロック信号CLK1で動作するフリップフロップ回路FF01から信号が入力される非同期順序回路201において、1段目のフリップフロップ回路FF02については2クロックサイクルの間、2段目のフリップフロップ回路FF03については1クロックサイクルの間、FFテーブル4に格納されているクロックサイクル数(生成段数c)がメタステーブルカウンタの値として設定される。これにより、フリップフロップ回路FF02は2クロックサイクルの間、フリップフロップ回路FF03については1クロックサイクルの間、メタステーブル状態値Dmを出力する。
【0123】
従って、本発明の実施の形態1に係る回路検証方法によれば、一のクロック信号で動作する回路から出力された信号が入力される、他のクロック信号で動作する非同期順序回路201において、2段目以降のフリップフロップ回路FF03において発生するメタステーブル状態についても確実にシミュレーションすることができる。そのため、本発明の実施の形態1に係る回路検証方法によれば、メタステーブル状態をより確実に想定して、非同期順序回路を含む論理回路の機能を検証することができる。
【0124】
実施の形態2.
実施の形態2に係る回路検証システムの構成は、実施の形態1に係る回路検証システム100と略同じであるため、同一の構成については同一の符号を付すとともに、その説明を省略する。図9に、実施の形態2に係る回路検証システムにおいて、図2のステップS1の処理、すなわち図4に示す処理において特定された順序回路に対して割り当てられた動作フローを示す。
図9に示すフローチャートを参照しながら、図2のステップS1において特定された順序回路に対して、図2のステップS3において行われる機能シミュレーションについて説明する。なお、図9に示すように、ステップS401〜ステップS407、ステップS409〜ステップS410、ステップS411〜ステップS413の処理は、それぞれ、図6における、ステップS310〜ステップS307、ステップS308〜ステップS309、ステップS310〜ステップS311の処理と同じであるため、その説明を省略する。
【0125】
次に、コンピュータ2は、前段の順序回路のクロックサイクル数(生成段数c)が0であるか否かを判断することにより、前段の順序回路がメタステーブル状態か否かを判断する(ステップS408)。
【0126】
ステップS408において、前段の順序回路のクロックサイクル数(生成段数c)が0でない場合には(ステップS408;No)、コンピュータ2は、前段の順序回路がメタステーブル状態であると判断し、ステップS409に進む。
【0127】
ステップS408において、前段の順序回路のクロックサイクル数(生成段数c)が0である場合には(ステップS408;Yes)、コンピュータ2は、前段の順序回路がメタステーブル状態ではないと判断し、順序回路は、保持している信号を出力する(ステップS413)。
【0128】
次に、コンピュータ2は、当該順序回路のクロックサイクル数(生成段数c)を0にする(ステップS414)。
【0129】
以下、具体的に、図2のステップS3における機能シミュレーションについて、図10に示すタイミングチャートを参照しながら説明する。
なお、シミュレーションサイクル1〜16までは、図8に示すシミュレーションサイクル1から16と同様の動作であるため、その説明を省略する。
【0130】
<シミュレーションサイクル17について>
(フリップフロップ回路FF04について)
シミュレーションサイクル17において、クロック信号CLK2がアクティブエッジとなる(ステップS201;Yes、ステップS401;Yes)。
そのため、フリップフロップ回路FF04は、図5のステップS202において、信号Q03の値「4」を保持するとともに、図5のステップS203において保持している値「4」を信号Q04として出力する。
【0131】
(フリップフロップ回路FF03について)
また、クロックサイクル数(生成段数c)の値が「1」であるため(ステップS402;Yes)、ステップS403において、コンピュータ2は、当該クロックサイクル数から1を減ずる。これにより、クロックサイクル数の値は「0」となる。
次に、フリップフロップ回路FF03に入力される信号Q02の値は「7」であり、フリップフロップ回路FF03が保持している値は「4」であるため、コンピュータ2は、フリップフロップ回路FF03に入力される信号Q02の値に変化があると判断する(ステップS404;Yes)。
次に、ステップS406において、コンピュータ2は、FFテーブル4のインスタンス名「FF03」に対応するクロックサイクル数(生成段数(c−1))の値「1」を新たにメタステーブルカウンタの値として設定する。
そして、図9のステップ407において、フリップフロップ回路FF03は、入力される信号Q02の値「7」を保持する。
【0132】
次に、ステップS408において、コンピュータ2は、フリップフロップ回路FF03の前段のフリップフロップ回路FF02のクロックサイクル数(生成段数c)の値が0か否かを判断し、フリップフロップ回路FF02のクロックサイクル数は「0」であるため(ステップS408;Yes)、コンピュータ2は、前段のフリップフロップ回路FF02はメタステーブル状態ではないと判断する。
【0133】
次に、ステップS413において、フリップフロップ回路FF03は、保持している値「7」を信号Q03として出力する。
そして、ステップS414において、コンピュータ2は、フリップフロップ回路FF03のクロックサイクル数を「0」とし、フリップフロップ回路FF03のメタステーブル状態を終了する。
【0134】
(フリップフロップ回路FF02について)
また、クロックサイクル数(生成段数c)の値が「0」であり(ステップS402;No)、フリップフロップ回路FF02に入力される信号Q01の値は「7」であり、フリップフロップ回路FF02が保持している値も「7」であるため、コンピュータ2は、フリップフロップ回路FF02に入力される信号Q01の値に変化がないと判断する(ステップS404;No)。
次に、フリップフロップ回路FF02のクロックサイクル数(生成段数c)は「0」であるため、コンピュータ2は、フリップフロップ回路FF02がメタステーブル状態ではないと判断する(ステップS405;Yes)。
そして、図9のステップS413において、フリップフロップ回路FF02は、保持している値「7」を信号Q02として出力する。
また、ステップS414において、コンピュータ2は、フリップフロップ回路FF02のクロックサイクル数を「0」とする。
【0135】
(フリップフロップ回路FF01について)
また、シミュレーションサイクル17において、クロック信号CLK1がアクティブエッジとはならない(ステップS201;No)。
そのため、図5のステップS203において、フリップフロップ回路FF01は、保持している値「7」を信号Q01として出力する。
【0136】
<シミュレーションサイクル18について>
(フリップフロップ回路FF04について)
シミュレーションサイクル18において、クロック信号CLK2がアクティブエッジとはならない(ステップS201;No、ステップS401;No)。
そのため、フリップフロップ回路FF04は、図5のステップS203において保持している値「4」を信号Q04として出力する。
【0137】
(フリップフロップ回路FF03について)
また、クロックサイクル数(生成段数c)の値が「0」であるため、コンピュータ2は、フリップフロップ回路FF03がメタステーブル状態ではないと判断する(ステップS411;Yes)。
そして、図9のステップS413において、フリップフロップ回路FF03は、保持している値「7」を信号Q03として出力する。
また、ステップS414において、コンピュータ2は、フリップフロップ回路FF03のクロックサイクル数を「0」とする。
【0138】
(フリップフロップ回路FF02について)
また、クロックサイクル数(生成段数c)の値が「0」であるため、コンピュータ2は、フリップフロップ回路FF02がメタステーブル状態ではないと判断する(ステップS411;Yes)。
そして、図9のステップS413において、フリップフロップ回路FF02は、保持している値「7」を信号Q02として出力する。
また、ステップS414において、コンピュータ2は、フリップフロップ回路FF02のクロックサイクル数を「0」とする。
【0139】
(フリップフロップ回路FF01について)
また、シミュレーションサイクル18において、クロック信号CLK1がアクティブエッジとなる(ステップS201;Yes)。
そのため、フリップフロップ回路FF01は、図5のステップS202において、入力信号DINの値「3」を保持するとともに、図5のステップS203において保持している値「3」を信号Q01として出力する。
【0140】
<シミュレーションサイクル19〜20について>
(フリップフロップ回路FF04について)
シミュレーションサイクル19〜20において、クロック信号CLK2がアクティブエッジとはならない(ステップS201;No、ステップS401;No)。
そのため、フリップフロップ回路FF04は、図5のステップS203において保持している値「4」を信号Q04として出力する。
【0141】
(フリップフロップ回路FF03について)
また、クロックサイクル数(生成段数c)の値が「0」であるため、コンピュータ2は、フリップフロップ回路FF03がメタステーブル状態ではないと判断する(ステップS411;Yes)。
そして、図9のステップS413において、フリップフロップ回路FF03は、保持している値「7」を信号Q03として出力する。
また、ステップS414において、コンピュータ2は、フリップフロップ回路FF03のクロックサイクル数を「0」とする。
【0142】
(フリップフロップ回路FF02について)
また、クロックサイクル数(生成段数c)の値が「0」であるため、コンピュータ2は、フリップフロップ回路FF02がメタステーブル状態ではないと判断する(ステップS411;Yes)。
そして、図9のステップS413において、フリップフロップ回路FF02は、保持している値「7」を信号Q02として出力する。
また、ステップS414において、コンピュータ2は、フリップフロップ回路FF02のクロックサイクル数を「0」とする。
【0143】
(フリップフロップ回路FF01について)
また、シミュレーションサイクル19〜20において、クロック信号CLK1がアクティブエッジとはならない(ステップS201;No)。
そのため、図5のステップS203において、フリップフロップ回路FF01は、保持している値「3」を信号Q01として出力する。
【0144】
<シミュレーションサイクル21について>
(フリップフロップ回路FF04について)
シミュレーションサイクル21において、クロック信号CLK2がアクティブエッジとなる(ステップS201;Yes、ステップS401;Yes)。
そのため、フリップフロップ回路FF04は、図5のステップS202において、信号Q03の値「7」を保持するとともに、図5のステップS203において保持している値「7」を信号Q04として出力する。
【0145】
(フリップフロップ回路FF03について)
また、クロックサイクル数(生成段数c)の値が「0」であり(ステップS402;Yes)、フリップフロップ回路FF03に入力される信号Q02の値は「7」であり、フリップフロップ回路FF03が保持している値も「7」であるため、コンピュータ2は、フリップフロップ回路FF03に入力される信号Q02の値に変化がないと判断する(ステップS404;No)。
次に、フリップフロップ回路FF03のクロックサイクル数(生成段数c)は「0」であるため、コンピュータ2は、フリップフロップ回路FF03がメタステーブル状態ではないと判断する(ステップS405;Yes)。
そして、図9のステップS413において、フリップフロップ回路FF03は、保持している値「7」を信号Q03として出力する。
また、ステップS414において、コンピュータ2は、フリップフロップ回路FF03のクロックサイクル数を「0」とする。
【0146】
(フリップフロップ回路FF02について)
また、クロックサイクル数(生成段数c)の値が「0」であり(ステップS402;No)、フリップフロップ回路FF02に入力される信号Q01の値は「3」であり、フリップフロップ回路FF02が保持している値は「6」であるため、コンピュータ2は、フリップフロップ回路FF02に入力される信号Q01の値に変化があると判断する(ステップS404;Yes)。
次に、ステップS406において、コンピュータ2は、FFテーブル4のインスタンス名「FF02」に対応するクロックサイクル数(生成段数c)の値「2」を新たにメタステーブルカウンタの値として設定する。
そして、図9のステップ407において、フリップフロップ回路FF02は、入力される信号Q01の値「3」を保持する。
【0147】
次に、ステップS408において、コンピュータ2は、フリップフロップ回路FF02の前段のフリップフロップ回路FF01のクロックサイクル数(生成段数c)の値が0か否かを判断し、フリップフロップ回路FF01のクロックサイクル数は「0」であるため(ステップS408;Yes)、コンピュータ2は、前段のフリップフロップ回路FF01はメタステーブル状態ではないと判断する。
【0148】
次に、ステップS413において、フリップフロップ回路FF02は、保持している値「6」を信号Q02として出力する。
そして、ステップS414において、コンピュータ2は、フリップフロップ回路FF02のクロックサイクル数を「0」とし、フリップフロップ回路FF02のメタステーブル状態を終了する。
【0149】
(フリップフロップ回路FF01について)
また、シミュレーションサイクル21において、クロック信号CLK1がアクティブエッジとはならない(ステップS201;No)。
そのため、図5のステップS203において、フリップフロップ回路FF01は、保持している値「3」を信号Q01として出力する。
【0150】
なお、シミュレーションサイクル22〜26については、図8に示すシミュレーションサイクルと動作は略同じであるため、その説明を省略する。
【0151】
以上に説明したように、フリップフロップ回路FF04の機能シミュレーションでは、シミュレーションサイクル13〜16,17〜20の間、フリップフロップ回路FF03が出力したメタステーブル状態を保持し、保持したメタステーブル状態値がすべて異なる値となっている。また、フリップフロップ回路FF03の機能シミュレーションでは、シミュレーションサイクル9〜12,13〜16の間、フリップフロップ回路FF02が出力したメタステーブル状態を保持し、保持したメタステーブル状態値が全て異なる値となっている。
また、フリップフロップ回路FF03がメタステーブル状態ではない場合、シミュレーションサイクル21において、フリップフロップ回路FF04が保持している値は、シミュレーションサイクル2〜15においてフリップフロップ回路FF01に入力された信号DINの値「7」となっている。
【0152】
具体的には、クロック信号CLK1で動作するフリップフロップ回路FF01から信号が入力される非同期順序回路201において、1段目のフリップフロップ回路FF02については2クロックサイクルの間、2段目のフリップフロップ回路FF03については1クロックサイクルの間、FFテーブル4に格納されているクロックサイクル数(生成段数c)がメタステーブルカウンタの値として設定される。これにより、フリップフロップ回路FF02は2クロックサイクルの間、フリップフロップ回路FF03については1クロックサイクルの間、メタステーブル状態値Dmを出力する。
【0153】
従って、本発明の実施の形態2に係る回路検証方法によれば、実施の形態1に係る回路検証方法と同様の効果が得られることは勿論のこと、前段のフリップフロップ回路がメタステーブル状態であるか否かを判断し、前段のフリップフロップ回路がメタステーブル状態ではない場合に、コンピュータ2は、クロックサイクル数(生成段数c)を「0」とするので、メタステーブル状態を終了させることができる。そのため、実際の論理回路におけるメタステーブル状態により近い状態をシミュレーションすることができる。
【0154】
なお、本発明は、以上の実施の形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内で適宜設計変更されるものとする。
例えば、非同期順序回路に含まれる順序回路はフリップフロップ回路に限られるものではない。
【符号の説明】
【0155】
1 サーバ
2 コンピュータ(回路検証装置)
3 ネットワーク
4 FFテーブル
41 インスタンス名
42 クロックサイクル数
100 回路検証システム
201 非同期順序回路
FF01 フリップフロップ回路(第1段目の順序回路)
FF02 フリップフロップ回路(第2段目の順序回路)
FF03 フリップフロップ回路(第3段目の順序回路)
FF04 フリップフロップ回路(第4段目の順序回路)
CC2 組合せ回路
CLK1 クロック信号
CLK2 クロック信号

【特許請求の範囲】
【請求項1】
論理回路の機能を検証する回路検証装置であって、
前記論理回路に含まれる非同期順序回路のクロック周期Tdistと、前記非同期順序回路の第1段目の順序回路のメタステーブル収束時間Tmcと、に基づいて、下記の(1)式により、メタステーブル状態値の生成段数cを算出する生成段数算出部と、
所定のプログラム言語で記述された、前記論理回路の回路設計プログラムを解析することにより、前記第1段目の順序回路から前記第1段目の順序回路の出力側に接続される第n段目(nは、n≧2を満たす整数)の順序回路までを特定する順序回路特定部と、
前記論理回路の機能シミュレーションにおいて、前記第1段目から第n段目の順序回路に、それぞれ前記生成段数cから(前記生成段数c−(n−1))に等しいクロックサイクル数分、前記メタステーブル状態値を出力させる機能シミュレーション制御部と、
を備える回路検証装置。
c=int(Tmc/Tdist)+1 ・・・・・(1)
【請求項2】
前記シミュレーション制御部は、
前記順序回路特定部により特定された前記順序回路の入力信号の値が変化したか否かを判断し、前記順序回路特定部により特定された前記順序回路の入力信号の値が変化したときから、当該順序回路から前記メタステーブル状態値を出力させる請求項1に記載の回路検証装置。
【請求項3】
前記機能シミュレーション制御部は、
前記順序回路特定部により特定された前記順序回路の入力信号の値が変化したか否かを判断し、前記順序回路特定部により特定された前記順序回路の入力信号の値が変化した場合に、当該順序回路の前段の回路がメタステーブル状態か否かを判断し、前記前段の回路がメタステーブル状態である場合に、当該順序回路の入力信号の値が変化したときから、当該順序回路から前記メタステーブル状態値を出力させる請求項1又は2に記載の回路検証装置。
【請求項4】
前記第1段目の順序回路から前記第n段目の順序回路のインスタンス名と、前記生成段数cから(前記生成段数c−(n−1))に等しいクロックサイクル数と、を対応付けられたFFテーブルを記憶部に格納するFFテーブル格納制御部を備える請求項1乃至3の何れか一項に記載の回路検証装置。
【請求項5】
論理回路の機能を検証する回路検証方法であって、
コンピュータが、
前記論理回路に含まれる非同期順序回路のクロック周期Tdistと、前記非同期順序回路の第1段目の順序回路のメタステーブル収束時間Tmcと、に基づいて、下記の(1)式により、メタステーブル状態値の生成段数cを算出する生成段数算出処理と、
所定のプログラム言語で記述された、前記論理回路の回路設計プログラムを解析することにより、前記第1段目の順序回路から前記第1段目の順序回路の出力側に接続される第n段目(nは、n≧2を満たす整数)の順序回路までを特定する順序回路特定処理と、
前記論理回路の機能シミュレーションにおいて、前記第1段目から第n段目の順序回路に、それぞれ前記生成段数cから(前記生成段数c−(n−1))に等しいクロックサイクル数分、前記メタステーブル状態値を出力させる機能シミュレーション制御処理と、
を実行する回路検証方法。
c=int(Tmc/Tdist)+1 ・・・・・(1)
【請求項6】
前記シミュレーション制御処理において、前記コンピュータは、
前記順序回路特定処理において特定した前記順序回路の入力信号の値が変化したか否かを判断し、前記順序回路特定処理において特定した前記順序回路の入力信号の値が変化したときから、当該順序回路から前記メタステーブル状態値を出力させる請求項5に記載の回路検証方法。
【請求項7】
前記機能シミュレーション制御処理において、前記コンピュータは、
前記順序回路特定処理において特定した前記順序回路の入力信号の値が変化したか否かを判断し、前記順序回路特定処理において特定した前記順序回路の入力信号の値が変化した場合に、当該順序回路の前段の回路がメタステーブル状態か否かを判断し、前記前段の回路がメタステーブル状態である場合に、当該順序回路の入力信号の値が変化したときから、当該順序回路から前記メタステーブル状態値を出力させる請求項5又は6に記載の回路検証方法。
【請求項8】
前記コンピュータは、
前記第1段目の順序回路から前記第n段目の順序回路のインスタンス名と、前記生成段数cから(前記生成段数c−(n−1))に等しいクロックサイクル数と、を対応付けられたFFテーブルを記憶部に格納するFFテーブル格納制御処理を実行する請求項5乃至7の何れか一項に記載の回路検証方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2011−215852(P2011−215852A)
【公開日】平成23年10月27日(2011.10.27)
【国際特許分類】
【出願番号】特願2010−83002(P2010−83002)
【出願日】平成22年3月31日(2010.3.31)
【出願人】(302062931)ルネサスエレクトロニクス株式会社 (8,021)
【Fターム(参考)】