(57)【特許請求の範囲】
【請求項１】
コンピュータを、
検証対象回路の中から、第１のクロックで動作する回路素子群を有する第１のクロックドメインと、前記第１のクロックとは異なる第２のクロックで動作する回路素子群を有する第２のクロックドメインと、前記第１のクロックドメインから組合せ回路を介して前記第２のクロックドメインへの信号転送を行う、前記組合せ回路を有するパスとを含む非同期箇所を抽出する抽出手段、
前記抽出手段によって抽出された非同期箇所に含まれる前記第１のクロックドメイン内の送信回路素子と、前記送信回路素子から出力される信号の値を一定期間継続して不定値に置き換える、前記第１のクロックで動作する第１の回路素子群と、前記第１の回路素子群から出力された前記不定値の信号を前記パスを介して受信し、前記第２のクロックに同期させた不定値の信号を出力する前記第２のクロックドメイン内の受信回路素子と、前記受信回路素子から出力される不定値の信号を受信する都度、当該信号の値を１または０に不規則に置き換える、前記第２のクロックで動作する第２の回路素子群と、からなる回路モデルを生成する生成手段、
前記生成手段によって生成された回路モデルを出力する出力手段、
として機能させることを特徴とする検証支援プログラム。
【請求項２】
前記生成手段は、
前記送信回路素子と、前記第１のクロックの立ち上がり時刻を基準として、前記送信回路素子から出力される信号の値を一定期間継続して不定値に置き換える第１の回路素子群と、前記受信回路素子と、前記第２の回路素子群と、からなる回路モデルを生成することを特徴とする請求項１に記載の検証支援プログラム。
【請求項３】
前記生成手段は、
前記送信回路素子と、前記送信回路素子から出力される信号の値を、前記第１のクロックの立ち上がり時刻から前記第２のクロックの立ち上がり時刻までの期間継続して不定値に置き換える第１の回路素子群と、前記受信回路素子と、前記第２の回路素子群と、からなる回路モデルを生成することを特徴とする請求項１に記載の検証支援プログラム。
【請求項４】
前記抽出手段は、
前記検証対象回路の中から、第１のクロックで動作する回路素子群を有する第１のクロックドメインと、前記第１のクロックとは異なる第２のクロックで動作する回路素子群を有する第２のクロックドメインと、前記第１のクロックおよび前記第２のクロックとは異なる第３のクロックで動作する回路素子群を有する第３のクロックドメインと、前記第１のクロックドメインから前記第２のクロックドメインおよび前記第３のクロックドメインへの信号転送を行うパスとを含む非同期箇所を抽出し、
前記生成手段は、
前記抽出手段によって抽出された非同期箇所に含まれる前記第１のクロックドメイン内の送信回路素子と、前記第１のクロックの立ち上がり時刻のあと前記第２のクロックおよび前記第３のクロックのうちのいずれかのクロックが最初に立ち上がる時刻を基準として、前記送信回路素子から出力される信号の値を一定期間継続して不定値に置き換える第１の回路素子群と、前記第１の回路素子群から出力された前記不定値の信号を前記パスを介して受信し、前記第２のクロックに同期させた不定値の信号を出力する前記第２のクロックドメイン内の受信回路素子と、当該受信回路素子から出力される不定値の信号を受信する都度、当該信号の値を１または０に不規則に置き換える、前記第２のクロックで動作する第２の回路素子群と、前記第１の回路素子群から出力された前記不定値の信号を前記パスを介して受信し、前記第３のクロックに同期させた不定値の信号を出力する前記第３のクロックドメイン内の受信回路素子と、当該受信回路素子から出力される不定値の信号を受信する都度、当該信号の値を１または０に不規則に置き換える、前記第３のクロックで動作する第３の回路素子群と、からなる回路モデルを生成することを特徴とする請求項１に記載の検証支援プログラム。
【請求項５】
前記生成手段は、
前記送信回路素子と、前記第２のクロックまたは前記第３のクロックが立ち上がる時刻のうち前記第２のクロックおよび前記第３のクロックが同時に立ち上がる時刻を除く時刻を基準として、前記送信回路素子から出力される信号の値を一定期間継続して不定値に置き換える第１の回路素子群と、前記第１の回路素子群から出力された前記不定値の信号を前記パスを介して受信し、前記第２のクロックに同期させた不定値の信号を出力する前記第２のクロックドメイン内の受信回路素子と、当該受信回路素子から出力される不定値の信号を受信する都度、当該信号の値を１または０に不規則に置き換える、前記第２のクロックで動作する第２の回路素子群と、前記第１の回路素子群から出力された前記不定値の信号を前記パスを介して受信し、前記第３のクロックに同期させた不定値の信号を出力する前記第３のクロックドメイン内の受信回路素子と、当該受信回路素子から出力される不定値の信号を受信する都度、当該信号の値を１または０に不規則に置き換える、前記第３のクロックで動作する第３の回路素子群と、からなる回路モデルを生成することを特徴とする請求項４に記載の検証支援プログラム。
【請求項６】
前記生成手段は、
前記送信回路素子と、前記第１のクロックドメインから前記第２のクロックドメインに辿り着くまでの第１のパスについて、前記送信回路素子から出力される信号の値を一定期間継続して不定値に置き換える、前記第１のクロックで動作する第１の回路素子群と、前記第１のクロックドメインから前記第３のクロックドメインに辿り着くまでの第２のパスについて、前記送信回路素子から出力される信号の値を一定期間継続して不定値に置き換える、前記第１のクロックで動作する第２の回路素子群と、前記第１の回路素子群から出力された前記不定値の信号を前記第１のパスを介して受信し、前記第２のクロックに同期させた不定値の信号を出力する前記第２のクロックドメイン内の受信回路素子と、当該受信回路素子から出力される不定値の信号を受信する都度、当該信号の値を１または０に不規則に置き換える、前記第２のクロックで動作する第３の回路素子群と、前記第１の回路素子群から出力された前記不定値の信号を前記第２のパスを介して受信し、前記第３のクロックに同期させた不定値の信号を出力する前記第３のクロックドメイン内の受信回路素子と、当該受信回路素子から出力される不定値の信号を受信する都度、当該信号の値を１または０に不規則に置き換える、前記第３のクロックで動作する第４の回路素子群と、からなる回路モデルを生成することを特徴とする請求項４に記載の検証支援プログラム。
【請求項７】
前記第１の回路素子群は、前記送信回路素子が受信する信号の値と前記送信回路素子が出力する信号の値とが不一致の場合に、前記送信回路素子から出力される信号の値を一定期間継続して不定値に置き換えることを特徴とする請求項１〜５のいずれか一つに記載の検証支援プログラム。
【請求項８】
検証対象回路の中から、第１のクロックで動作する回路素子群を有する第１のクロックドメインと、前記第１のクロックとは異なる第２のクロックで動作する回路素子群を有する第２のクロックドメインと、前記第１のクロックドメインから組合せ回路を介して前記第２のクロックドメインへの信号転送を行う、前記組合せ回路を有するパスとを含む非同期箇所を抽出する抽出手段と、
前記抽出手段によって抽出された非同期箇所に含まれる前記第１のクロックドメイン内の送信回路素子と、前記送信回路素子から出力される信号の値を一定期間継続して不定値に置き換える、前記第１のクロックで動作する第１の回路素子群と、前記第１の回路素子群から出力された前記不定値の信号を前記パスを介して受信し、前記第２のクロックに同期させた不定値の信号を出力する前記第２のクロックドメイン内の受信回路素子と、前記受信回路素子から出力される不定値の信号を受信する都度、当該信号の値を１または０に不規則に置き換える、前記第２のクロックで動作する第２の回路素子群と、からなる回路モデルを生成する生成手段と、
前記生成手段によって生成された回路モデルを出力する出力手段と、
を備えることを特徴とする検証支援装置。
【請求項９】
コンピュータが、
検証対象回路の中から、第１のクロックで動作する回路素子群を有する第１のクロックドメインと、前記第１のクロックとは異なる第２のクロックで動作する回路素子群を有する第２のクロックドメインと、前記第１のクロックドメインから組合せ回路を介して前記第２のクロックドメインへの信号転送を行う、前記組合せ回路を有するパスとを含む非同期箇所を抽出する抽出工程と、
前記抽出工程によって抽出された非同期箇所に含まれる前記第１のクロックドメイン内の送信回路素子と、前記送信回路素子から出力される信号の値を一定期間継続して不定値に置き換える、前記第１のクロックで動作する第１の回路素子群と、前記第１の回路素子群から出力された前記不定値の信号を前記パスを介して受信し、前記第２のクロックに同期させた不定値の信号を出力する前記第２のクロックドメイン内の受信回路素子と、前記受信回路素子から出力される不定値の信号を受信する都度、当該信号の値を１または０に不規則に置き換える、前記第２のクロックで動作する第２の回路素子群と、からなる回路モデルを生成する生成工程と、
前記生成工程によって生成された回路モデルを出力する出力工程と、
を実行することを特徴とする検証支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、複数のクロックドメインを有する検証対象回路の論理検証を支援する検証支援プログラム、検証支援装置、および検証支援方法に関する。
【背景技術】
【０００２】
一般に、クロックドメイン・クロッシングを含む論理設計では、異なるクロックソースで動作するクロックドメイン間で、データの受け渡しが正常におこなわれているか否かを検証する必要がある。このため、クロックの乗り換えが起こる非同期箇所を含んだ回路の動作検証をおこなうための技術が開示されている。
【０００３】
例えば、下記特許文献１には、ＲＴＬ記述からすべての非同期箇所を抽出した非同期リストを生成し、制御タスク挿入部により、クロック・遅延制御部を制御するコントロールカードを生成するとともにＲＴＬ記述に制御タスクを挿入する。制御タスクが挿入されたＲＴＬについてのシミュレータによる論理シミュレーション段階においては、シミュレータにクロック・遅延制御部を連携させ、ＲＴＬの制御タスクに対し変調クロックや遅延信号を挿入する。これにより、論理合成前のＲＴＬ記述の論理シミュレーション段階で各種遅延状態を作り出し、非同期回路の動作検証をおこなう手法が記載されている。
【０００４】
また、下記特許文献２，３および非特許文献１，２には、非同期箇所において、送信側のフリップフロップから出力される信号の値が変化したときに、受信側のフリップフロップが取り込む信号の値をランダムに変化させる動作モデルをＲＴＬ記述に挿入する手法が記載されている。
【０００５】
【特許文献１】特開２００５−２８４４２６号公報
【特許文献２】特開２００３−２３３６３８号公報
【特許文献３】特開２００１−２２９２１１号公報
【非特許文献１】Ｔ．Ｌｙ，Ｎ．Ｈａｎｄ，ａｎｄ  Ｃ．Ｋ．Ｋｗｏｋ，“ＦＯＲＭＡＬＬＹ  ＶＥＲＩＦＹＩＮＧ  ＣＬＯＣＫ  ＤＯＭＡＩＮ  ＣＲＯＳＳＩＮＧ  ＪＩＴＴＥＲ  ＵＳＩＮＧ  ＡＳＳＥＲＴＩＯＮ−ＢＡＳＥＤ  ＶＥＲＩＦＩＣＡＴＩＯＮ”ｉｎ  Ｐｒｏｃ．Ｄｅｓｉｇｎ  ａｎｄ  Ｖｅｒｉｆｉｃａｔｉｏｎ  Ｃｏｎｆｅｒｅｎｃｅ  ａｎｄ  Ｅｘｈｉｂｉｔｉｏｎ，２００４．、ｐ１−５
【非特許文献２】Ｍ．Ｌｉｔｔｅｒｉｃｋ，“Ｐｒａｇｍａｔｉｃ  Ｓｉｍｕｌａｔｉｏｎ−Ｂａｓｅｄ  Ｖｅｒｉｆｉｃａｔｉｏｎ  ｏｆ  Ｃｌｏｃｋ  Ｄｏｍａｉｎ  Ｃｒｏｓｓｉｎｇ  Ｓｉｇｎａｌｓ  ａｎｄ  Ｊｉｔｔｅｒ  Ｕｓｉｎｇ  ＳｙｓｔｅｍＶｅｒｉｌｏｇ  Ａｓｓｅｒｔｉｏｎｓ，”ｉｎ  Ｐｒｏｃ．Ｄｅｓｉｇｎ  ａｎｄ  Ｖｅｒｉｆｉｃａｔｉｏｎ  Ｃｏｎｆｅｒｅｎｃｅ  ａｎｄ  Ｅｘｈｉｂｉｔｉｏｎ，２００６．、ｐ１−６
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上述した特許文献１に記載の従来技術は、非同期箇所において、送信側のフリップフロップから出力される信号にクロック変調や信号遅延を発生させるものである。ところが、送信側のフリップフロップから出力される信号のタイミング変化の影響が、受信側のフリップフロップから出力される信号に影響を与えるかどうかということとは直接リンクしていない。
【０００７】
したがって、送信側のフリップフロップから出力される信号のクロック変調と信号遅延の組み合わせを変化させて、受信側のフリップフロップから出力される信号にタイミング変化の影響が反映されるまで論理シミュレーションを繰り返す必要がある。このため、多くのシミュレーション回数が必要となり、論理検証にかかる作業負担および作業時間が増大化し、ひいては設計期間の長期化を招くという問題がある。
【０００８】
また、上述した特許文献２，３および非特許文献１，２に記載の従来技術では、非同期箇所のパス上に組合せ回路が存在する場合に、その組合せ回路で発生するグリッジの影響を適切にモデル化することができないという問題がある。このため、検証漏れによる設計作業の手戻りが発生し、設計期間の長期化を招くという問題がある。
【０００９】
この発明は、上述した従来技術による問題点を解消するため、クロックドメイン・クロッシングを含む論理設計に対する検証品質および検証効率を向上させ、設計期間の短縮化を図る検証支援プログラム、検証支援装置、および検証支援方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するため、この検証支援プログラム、検証支援装置、および検証支援方法は、検証対象回路の中から、クロックの異なるクロックドメイン間でデータ転送する非同期箇所を抽出し、抽出された非同期箇所と、当該非同期箇所内の送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第１の回路素子群と、前記非同期箇所内の受信側の回路素子から出力される不定値のデータ信号を受信する都度、当該データ信号の値を１または０に不規則に置き換える第２の回路素子群と、からなる回路モデルを生成し、生成された回路モデルを出力することを要件とする。
【００１１】
この検証支援プログラム、検証支援装置、および検証支援方法によれば、検証対象回路内の非同期箇所の出力値が不規則に変化する回路モデルを提供することができる。
【００１２】
また、この検証支援プログラム、検証支援装置、および検証支援方法において、前記非同期箇所と、前記非同期箇所の送信クロックの立ち上がり時刻を基準として、前記送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第１の回路素子群と、前記第２の回路素子群と、からなる回路モデルを生成することとしてもよい。
【００１３】
この検証支援プログラム、検証支援装置、および検証支援方法によれば、データ信号の値を不定値に置き換える開始時刻を、送信クロックの立ち上がりタイミングに合わせて制御することができる。
【００１４】
また、この検証支援プログラム、検証支援装置、および検証支援方法において、前記非同期箇所と、前記送信側の回路素子から出力されるデータ信号の値を、前記非同期箇所の送信クロックの立ち上がり時刻から前記非同期箇所の受信クロックの立ち上がり時刻までの一定期間継続して不定値に置き換える第１の回路素子群と、前記第２の回路素子群と、からなる回路モデルを生成することとしてもよい。
【００１５】
この検証支援プログラム、検証支援装置、および検証支援方法によれば、データ信号の値を不定値に置き換える期間を、送信クロックおよび受信クロックの立ち上がりタイミングに合わせて制御することができる。
【００１６】
また、この検証支援プログラム、検証支援装置、および検証支援方法において、抽出された非同期箇所内に受信側のクロックドメインが複数存在するか否かを判定し、複数存在すると判定された場合、前記非同期箇所と、前記非同期箇所内の送信クロックの立ち上がり時刻のあと最初に前記非同期箇所内の受信クロックが立ち上がる時刻を基準として、前記送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第１の回路素子群と、前記第２の回路素子群と、からなる回路モデルを生成することとしてもよい。
【００１７】
この検証支援プログラム、検証支援装置、および検証支援方法によれば、データ信号の値を不定値に置き換える開始時刻を、受信クロックの立ち上がりタイミングに合わせて制御することができる。
【００１８】
また、この検証支援プログラム、検証支援装置、および検証支援方法において、受信側のクロックドメインが複数存在すると判定された場合、前記非同期箇所と、当該非同期箇所内の受信クロックが立ち上がる時刻のうち複数の受信クロックが同時に立ち上がる時刻を除く時刻を基準として、前記送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第１の回路素子群と、前記第２の回路素子群と、からなる回路モデルを生成することとしてもよい。
【００１９】
この検証支援プログラム、検証支援装置、および検証支援方法によれば、受信側の複数の回路素子が同時に不定値のデータ信号を取り込むことを防ぐことができる。
【００２０】
また、この検証支援プログラム、検証支援装置、および検証支援方法において、受信側のクロックドメインが複数存在すると判定された場合、前記非同期箇所と、前記非同期箇所内の非同期パスごとに前記送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第１の回路素子群と、前記第２の回路素子群と、からなる回路モデルを生成することとしてもよい。
【００２１】
この検証支援プログラム、検証支援装置、および検証支援方法によれば、非同期箇所の出力値のランダム性を低下させることなく、受信側の複数の回路素子が同時に不定値のデータ信号を取り込むことを防ぐことができる。
【００２２】
また、この検証支援プログラム、検証支援装置、および検証支援方法において、前記検証対象回路の回路情報と、生成された回路モデルとを用いて、前記検証対象回路の論理シミュレーションを実行し、実行された論理シミュレーションのシミュレーション結果を出力することとしてもよい。
【００２３】
この検証支援プログラム、検証支援装置、および検証支援方法によれば、非同期箇所の出力値が非決定的となるときの検証対象回路の動作を検証することができる。
【発明の効果】
【００２４】
この検証支援プログラム、検証支援装置、および検証支援方法によれば、クロックドメイン・クロッシングを含む論理設計に対する検証品質および検証効率を向上させ、設計期間の短縮化を図ることができるという効果を奏する。
【発明を実施するための最良の形態】
【００２５】
以下に添付図面を参照して、この検証支援プログラム、検証支援装置、および検証支援方法の好適な実施の形態を詳細に説明する。
【００２６】
本実施の形態では、クロックドメイン・クロッシングを含む論理設計に対する検証品質および検証効率の向上を図る手法を提案する。クロックドメイン・クロッシングとは、異なるクロックで動作するクロックドメイン間でデータ信号が受け渡されてクロックの乗り換えが起こることである。ここでは、クロックドメイン・クロッシングの起こる箇所を非同期箇所という。
【００２７】
この非同期箇所でデータ転送する場合、受信側のクロックドメインでは入力信号が非同期信号となるため、様々な問題が発生する可能性がある。また、非同期箇所におけるデータ信号の受け渡しが正常におこなわれなければ、その非同期箇所よりも後段の処理に障害が発生してしまう場合がある。
【００２８】
このため、論理設計の段階において、非同期箇所の動作を検証してデータ信号の受け渡しが正常におこなわれているかどうかを確認することが望ましい。なぜなら、できる限り早い段階で非同期箇所に潜む問題を把握し、適切な回路修正をおこなうことが設計期間の短縮化につながるからである。
【００２９】
ここで、非同期箇所で発生する問題を具体的に説明する。図１は、検証対象回路の一例を示す回路図（その１）である。なお、図面では、検証対象回路の一部を抜粋して表示している。図１において、検証対象回路１００は、フリップフロップ（以下、「ＦＦ」と表記する）１０１と、ＦＦ１０２と、ＦＦ１０３と、ＦＦ１０４と、から構成されている。
【００３０】
クロックドメインＣＤ１は、クロックｃｌｋ１で動作する同期箇所である。クロックドメインＣＤ２は、クロックｃｌｋ２で動作する同期箇所である。ここでは、クロックドメインＣＤ１，ＣＤ２間でデータ信号Ａ１，Ｂ１の受け渡しがおこなわれる。
【００３１】
このとき、データ信号Ａ１，Ｂ１は、同じタイミングでＦＦ１０１，ＦＦ１０２から出力される。ところが、受信側のＦＦ１０３，ＦＦ１０４では、データ信号Ａ１，Ｂ１を受信するタイミングにズレが生じてしまう。なぜなら、各ＦＦ間の遅延差は、物理設計、製造誤差、動作環境などの要因で変化するからである。また、クロックｃｌｋ１とクロックｃｌｋ２とは互いに独立したクロックソースを持つため、信号変化がＳｅｔｕｐ  ｔｉｍｅ違反／Ｈｏｌｄ  ｔｉｍｅ違反を起こすことは避けられない。
【００３２】
図２は、信号の波形を示す波形図（その１）である。図２において、検証対象回路１００内の各信号の波形が示されている。図２に示すように、ＦＦ１０３，ＦＦ１０４（図１参照）がデータ信号Ａ１，Ｂ１を受信するタイミングにズレが生じることで、データ信号Ａ２，Ｂ２の値が変化するタイミングに１サイクルのズレが生じている。
【００３３】
このようなタイミングのズレが生じてしまうと、受信側のＦＦ１０３，ＦＦ１０４で適切な値のデータ信号Ａ２，Ｂ２を出力することができず（出力値が非決定的）、ＦＦ１０３，ＦＦ１０４より後段に機能障害を引き起こしてしまう場合があるという問題がある。
【００３４】
さらに、データ信号Ａ１，Ｂ１の値の変化と受信側のクロックｃｌｋ２の立ち上がりのタイミングが非常に近い場合には、データ信号Ａ２，Ｂ２の値が不安定となる、いわゆるメタステーブル状態となる問題がある。例えば、データ信号Ｂ２の値が「１」になったり「０」になったりする予測不能なランダム性が発生してしまう。
【００３５】
さらに、クロックドメインＣＤ１，ＣＤ２間に組合せ回路が存在する場合には、その組合せ回路で発生するグリッジを受信側のＦＦ１０３，ＦＦ１０４が拾ってしまうことで、後段に機能障害を引き起こしてしまう場合があるという問題がある。グリッジとは、瞬間的（１サイクル未満）に発生する予期しないエラー（パルス）である。
【００３６】
なお、新規設計においては非同期箇所のパス上に組合せ回路を挿入する設計を排除することで、グリッジの発生を防ぐことも考えられるが、実際には性能向上などの観点からこのような設計がおこなわれることが少なくない。さらに、第三者が設計した回路（例えば、ＩＰ：Ｉｎｔｅｌｌｅｃｔｕａｌ  Ｐｒｏｐｅｒｔｙなど）を検証しなければならない場合もある。
【００３７】
これらの問題は、受信側のＦＦ１０３，ＦＦ１０４から出力されるデータ信号Ａ２，Ｂ２の値が非決定的となることにより発生する。そこで、非同期箇所から不定値のデータ信号が出力される機構を意図的に作り出し、後段の回路において、その問題を論理として吸収し誤動作を解消するようになっているかどうかを検証するための手法を提案する。
【００３８】
（本実施の形態の概要）
つぎに、本実施の形態の概要について説明する。本実施の形態では、値が定まっていない不定値Ｘを利用して、上述したタイミングのズレ、メタステーブル状態およびグリッジの影響を検証対象回路内の非同期箇所で意図的に発生させる回路モデルを提供する。
【００３９】
ここで、本実施の形態にかかる回路モデルについて説明する。図３は、検証対象回路の一例を示す回路図（その２）である。なお、図面では、検証対象回路の一部を抜粋して表示している。図３において、検証対象回路３００は、ＦＦ３０１，ＦＦ３０２，ＦＦ３０３と、ＡＮＤゲート３０４と、から構成されている。
【００４０】
クロックドメインＣＤ３は、クロックｃｌｋ１で動作する同期箇所である。クロックドメインＣＤ４は、クロックｃｌｋ２で動作する同期箇所である。また、ａ１，ｂ１，ｃ１，ｄ１，ｅ１，ｆ２はデータ信号名を示している。ここでは、クロックドメインＣＤ３，ＣＤ４間でクロックｃｌｋ１，ｃｌｋ２の乗り換えがおこなわれる。
【００４１】
このため、ＦＦ３０３がメタステーブル状態となる、または、ＦＦ３０３がＡＮＤゲート３０４（組合せ回路）で発生するグリッジを拾ってしまうことにより、クロックドメインＣＤ４（ＦＦ３０３）から出力されるデータ信号ｆ２の値が不規則に変化するときの動作検証をおこなう必要がある。
【００４２】
そこで、ＦＦ３０３から出力されるデータ信号ｆ２の値が不規則に０または１となる回路モデルを生成する。具体的には、送信側のクロックドメインＣＤ３からの出力信号を一定期間継続して不定値Ｘに置き換える機能と、受信側のクロックドメインＣＤ４から不定値Ｘの出力信号を受信する都度、その値を０または１に不規則に置き換える機能と、を備えた回路モデルを生成する。
【００４３】
図４は、回路モデルの一例を示す回路図（その１）である。図４において、回路モデル４００は、ＦＦ３０１，ＦＦ３０２から出力されるデータ信号ｃ１，ｄ１を一定期間継続して不定値Ｘに置き換える機能部４１０と、ＦＦ３０３から不定値Ｘのデータ信号ｆ２を受信する都度、その値を０または１に不規則に置き換える機能部４２０と、を備えた回路である。
【００４４】
ここで、回路モデル４００内の各信号の波形について具体的に説明する。図５は、信号の波形を示す波形図（その２）である。図５において、図４に示した回路モデル４００内の各信号の波形が示されている。これによれば、クロックｃｌｋ１の立ち上がりに合わせて、ＦＦ３０１，ＦＦ３０２から一定期間継続して不定値Ｘのデータ信号ｃ１，ｄ１が出力されている。
【００４５】
このため、ＡＮＤゲート３０４から一定期間継続して不定値Ｘのデータ信号ｅ１が出力される。さらに、不定値Ｘが出力されている期間中にクロックｃｌｋ２が立ち上がると、ＦＦ３０３から不定値Ｘのデータ信号ｆ２が出力されることとなる。そして、図４に示した機能部４２０によりＦＦ３０３から不定値Ｘのデータ信号ｆ２を受信する都度、その値を不規則に０または１に置き換える。
【００４６】
これにより、データ信号ｆ２の値が不規則に０または１に変化することとなり、メタステーブル状態やグリッジの影響によるランダム性を再現することができる。また、この回路モデル４００を用いて検証対象回路３００の論理検証をおこなうことにより、クロックドメイン・クロッシングによる影響を検証することができる。
【００４７】
（検証支援装置のハードウェア構成）
つぎに、本実施の形態にかかる検証支援装置のハードウェア構成について説明する。図６は、検証支援装置のハードウェア構成を示す説明図である。図６において、検証支援装置６００は、コンピュータ本体６１０と、入力装置６２０と、出力装置６３０と、から構成されており、不図示のルータやモデムを介してＬＡＮ，ＷＡＮやインターネットなどのネットワーク６４０に接続可能である。
【００４８】
コンピュータ本体６１０は、ＣＰＵ，メモリ，インターフェースを有する。ＣＰＵは、検証支援装置６００の全体の制御を司る。メモリは、ＲＯＭ，ＲＡＭ，ＨＤ，光ディスク６１１，フラッシュメモリから構成される。メモリはＣＰＵのワークエリアとして使用される。
【００４９】
また、メモリには各種プログラムが格納されており、ＣＰＵからの命令に応じてロードされる。ＨＤおよび光ディスク６１１はディスクドライブによりデータのリード／ライトが制御される。また、光ディスク６１１およびフラッシュメモリはコンピュータ本体６１０に対し着脱自在である。インターフェースは、入力装置６２０からの入力、出力装置６３０への出力、ネットワーク６４０に対する送受信の制御をおこなう。
【００５０】
また、入力装置６２０としては、キーボード６２１、マウス６２２、スキャナ６２３などがある。キーボード６２１は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式であってもよい。マウス６２２は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。スキャナ６２３は、画像を光学的に読み取る。読み取られた画像は画像データとして取り込まれ、コンピュータ本体６１０内のメモリに格納される。なお、スキャナ６２３にＯＣＲ機能を持たせてもよい。
【００５１】
また、出力装置６３０としては、ディスプレイ６３１、スピーカ６３２、プリンタ６３３などがある。ディスプレイ６３１は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。また、スピーカ６３２は、効果音や読み上げ音などの音声を出力する。また、プリンタ６３３は、画像データや文書データを印刷する。
【００５２】
（検証支援装置の機能的構成）
つぎに、検証支援装置の機能的構成について説明する。図７は、検証支援装置の機能的構成を示すブロック図である。図７において、検証支援装置６００は、取得部７０１と、抽出部７０２と、生成部７０３と、判定部７０４と、出力部７０５と、実行部７０６と、を備えている。
【００５３】
これら各機能７０１〜７０６は、検証支援装置６００の記憶部に記憶された当該機能７０１〜７０６に関するプログラムをＣＰＵに実行させることにより、または、入出力Ｉ／Ｆにより、当該機能を実現することができる。また、各機能７０１〜７０６からの出力データは上記記憶部に保持される。また、図７中矢印で示した接続先の機能は、接続元の機能からの出力データを記憶部から読み込んで、当該機能に関するプログラムをＣＰＵに実行させるものとする。
【００５４】
まず、取得部７０１は、検証対象回路の回路情報を取得する機能を有する。回路情報とは、例えば、ＨＤＬ（Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）を用いて記述されたＲＴＬ記述や回路図などである。この回路情報は、検証支援装置６００に直接入力することとしてもよく、また、不図示の外部装置からの取得、不図示のデータベースやライブラリからの抽出によって取得することとしてもよい。
【００５５】
ここで、検証対象回路の回路情報の具体例について説明する。図８は、回路情報の一例を示す説明図（その１）である。図８において、回路情報８００は、検証対象回路３００（図３参照）の動作仕様を定義するＲＴＬ記述である。具体的には、クロックｃｌｋ１，ｃｌｋ２に応じて受け渡されるデータ信号ａ１，ｂ１，ｃ１，ｄ１，ｅ１，ｆ２の流れが定義されている。
【００５６】
抽出部７０２は、検証対象回路の中から、クロックの異なるクロックドメイン間でデータ転送する非同期箇所を抽出する機能を有する。クロックドメインとは、検証対象回路のうち同一のクロックで動作する同期箇所である。具体的には、抽出部７０２は、異なるクロックで動作する回路素子間で一方の回路素子から他方の回路素子へデータ信号が受け渡されてクロックの乗り換え（クロックドメイン・クロッシング）が起こる非同期箇所を抽出する。回路素子は、例えば、フリップフロップやラッチなどである。
【００５７】
より具体的には、例えば、検証対象回路内の全非同期箇所がリスト化された非同期リストを参照して、任意の非同期箇所を抽出する。この非同期リストは、取得部７０１によって取得された検証対象回路の回路情報を、既存の非同期抽出プログラムに入力することで自動作成することができる。
【００５８】
ここで、非同期リストの具体例について説明する。図９は、非同期リストの具体例を示す説明図（その１）である。図９において、非同期リスト９００は、検証対象回路３００に存在する非同期箇所ごとに、ＣＤＣ名、送信ＦＦ名、受信ＦＦ名に関するリスト情報を有している。
【００５９】
ＣＤＣ名は、クロックドメイン・クロッシングが起こる箇所を識別する名称である。送信ＦＦは、ＣＤＣ内で受け渡されるデータ信号の送信側のフリップフロップを識別する名称である。受信ＦＦは、ＣＤＣ内で受け渡されるデータ信号の受信側のフリップフロップを識別する名称である。
【００６０】
ここでは、ＣＤＣ１内の送信ＦＦ３０１，３０２および受信ＦＦ３０３が示されている（図３参照）。また、非同期リスト９００には、各ＦＦのクロック名、入力信号名、出力信号名が示されている。ＦＦ３０１を例に挙げると、クロックは「ＤＵＴ．ｃｌｋ１」、入力信号は「ＤＵＴ．ａ１」、出力信号は「ＤＵＴ．ｃ１」である。
【００６１】
この場合、上記抽出部７０２は、非同期リスト９００を参照して、検証対象回路３００の中から、異なるクロックｃｌｋ１，ｃｌｋ２で動作するＦＦ間（ＦＦ３０１−ＦＦ３０３およびＦＦ３０２−ＦＦ３０３）でデータ転送をおこなう非同期箇所（ＣＤＣ１）のリスト情報を抽出することとなる。
【００６２】
図７の説明に戻り、生成部７０３は、抽出部７０２によって抽出された非同期箇所と、当該非同期箇所内の送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第１の回路素子群と、非同期箇所内の受信側の回路素子から出力される不定値のデータ信号を受信する都度、当該データ信号の値を１または０に不規則に置き換える第２の回路素子群と、からなる回路モデルを生成する機能を有する。
【００６３】
回路モデルは、非同期箇所に第１および第２の回路素子群が接続された回路である。第１の回路素子群は、例えば、図４に示した回路モデル４００内の機能部４１０の機能を実現する回路素子群（部分回路）である。また、第２の回路素子群は、例えば、図４に示した回路モデル４００内の機能部４２０の機能を実現する回路素子群（部分回路）である。
【００６４】
具体的には、例えば、検証対象回路の回路情報と後述する回路モデル生成用のテンプレートとを用いて回路モデルを生成することとしてもよく、また、検証対象回路の回路図に第１および第２の回路素子群の機能を実現する論理回路を挿入することで回路モデルを生成することとしてもよい。
【００６５】
また、上記第１の回路素子群は、非同期箇所の送信クロックの立ち上がり時刻を基準として、送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える機能を有することとしてもよい。なお、期間とは、シミュレーションにおける期間を表わす変数である。
【００６６】
これにより、データ信号の値を不定値に置き換える開始時刻を、送信クロックの立ち上がりタイミングに合わせて制御することができる。また、不定値に置き換える期間は、例えば、送信クロックの立ち上がりに合わせてタイマをセットすることで制御することができる。なお、セットする期間は、例えば、図６に示した入力装置６２０をユーザが操作することで任意に設定可能である。
【００６７】
ここで、図３に示した検証対象回路３００を例に挙げて、送信クロックの立ち上がり時刻を基準として、送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える機能を有する回路モデルについて説明する。なお、図３の例では、図面に表示されている部分が非同期箇所となる。
【００６８】
図１０は、回路モデルの一例を示す回路図（その２）である。図１０において、回路モデル１０００は、クロックｃｌｋ１の立ち上がり時刻を基準として、ＦＦ３０１，ＦＦ３０２から出力されるデータ信号ｃ１，ｄ１を一定期間継続して不定値Ｘに置き換える機能を有する回路である。
【００６９】
具体的には、回路モデル１０００は、図４に示した回路モデル４００に、クロックｃｌｋ１の立ち上がりから一定期間後（タイマを設定）にパルスを発生させる機能部１０１０が追加された回路である。この場合、機能部４１０は、クロックｃｌｋ１が立ち上がってから機能部１０１０からのパルスを受信するまでの一定期間継続してデータ信号ｃ１，ｄ１を不定値Ｘに置き換えることとなる。
【００７０】
図１１は、信号の波形を示す波形図（その３）である。図１１において、図１０に示した回路モデル１０００内の各信号の波形が示されている。なお、図１１中、左側の波形図は、検証対象回路３００内の各信号のオリジナルの波形である。
【００７１】
これによれば、クロックｃｌｋ１の立ち上がりに合わせて、送信側のＦＦ３０１，３０２から出力されるデータ信号ｃ１，ｄ１の値が一定期間（ｒｓｔ１が立ち上がるまでの期間）継続して不定値Ｘに置き換えられている。そして、クロックｃｌｋ２が立ち上がったときにデータ信号ｅ１の値が不定値Ｘになっていると、データ信号ｆ２に不定値Ｘが取り込まれてランダムな値となる。
【００７２】
図７の説明に戻り、上記第１の回路素子群は、送信側の回路素子から出力されるデータ信号の値を、非同期箇所の送信クロックの立ち上がり時刻から受信クロックの立ち上がり時刻までの期間継続して不定値に置き換える機能を有することとしてもよい。
【００７３】
これにより、データ信号の値を不定値に置き換える期間を、送信クロックおよび受信クロックの立ち上がりタイミングに合わせて制御することができる。具体的には、例えば、送信クロックの立ち上がりに合わせて不定値への置き換えを開始し、つぎに受信クロックが立ち上がったときに不定値への置き換えを停止する。
【００７４】
ここで、図３に示した検証対象回路３００を例に挙げて、送信側の回路素子から出力されるデータ信号の値を、非同期箇所の送信クロックの立ち上がり時刻から受信クロックの立ち上がり時刻までの期間継続して不定値に置き換える機能を有する回路モデルについて説明する。
【００７５】
図１２は、回路モデルの一例を示す回路図（その３）である。図１２において、回路モデル１２００は、ＦＦ３０１，ＦＦ３０２から出力されるデータ信号ｃ１，ｄ１を、クロックｃｌｋ１の立ち上がり時刻からクロックｃｌｋ２の立ち上がり時刻までの期間継続して不定値Ｘに置き換える機能を有する回路である。
【００７６】
具体的には、回路モデル１２００は、図４に示した回路モデル４００に、クロックｃｌｋ２の立ち上がり直後にパルスを発生させる機能部１２１０が追加された回路である。この場合、機能部４１０は、クロックｃｌｋ１の立ち上がりからクロックｃｌｋ２の立ち上がりまでの期間継続してデータ信号ｃ１，ｄ１を不定値Ｘに置き換えることとなる。
【００７７】
図１３は、信号の波形を示す波形図（その４）である。図１３において、図１２に示した回路モデル１２００内の各信号の波形が示されている。これによれば、クロックｃｌｋ１が立ち上がってからクロックｃｌｋ２が立ち上がるまでの間、送信側のＦＦ３０１，３０２から出力されるデータ信号ｃ１，ｄ１の値が不定値Ｘに置き換えられている。このため、クロックｃｌｋ２が立ち上がったときにデータ信号ｆ２に不定値Ｘが取り込まれてランダムな値となる。
【００７８】
なお、回路モデル１０００では、例えば、クロックｃｌｋ２のクロック周期が大きい場合には、データ信号ｆ２に不定値Ｘが取り込まれないことがある。すなわち、クロックｃｌｋ２の立ち上がり前に一定期間が経過し、データ信号ｆ２に不定値Ｘが取り込まれない場合である。
【００７９】
一方、回路モデル１２００では、受信側のＦＦ３０３が不定値Ｘのデータ信号ｅ１を拾うまで、送信側のＦＦ３０１，３０２から出力されるデータ信号ｃ１，ｄ１の値を不定値Ｘに置き換えることとなるため、確実にデータ信号ｆ２に不定値Ｘが取り込まれることとなる。
【００８０】
図７の説明に戻り、上記第２の回路素子群は、受信側の回路素子から出力される不定値のデータ信号が受信された回数、当該データ信号の値が１に置き換えられた回数および当該データ信号の値が０に置き換えられた回数を計数する機能を有することとしてもよい。
【００８１】
第２の回路素子群において計数される計数結果は、例えば、後述する出力部７０５によって出力される。これにより、検証者は、例えば、不定値Ｘのデータ信号ｆ２が機能部４２０に到達した回数、該データ信号ｆ２の値が１に置き換えられた回数および該データ信号ｆ２の値が０に置き換えられた回数を把握することができる。
【００８２】
さらに、この計数結果を用いてテストベンチの有効性を評価することができる。例えば、論理検証がおこなわれた結果、非同期箇所のクロックドメイン・クロッシングによる影響が適切に検証されていない場合に、データ信号ｆ２に不定値Ｘが取り込まれていないからなのか、テストパターンが不適切なのかを評価することができる。
【００８３】
判定部７０４は、抽出部７０２によって抽出された非同期箇所内に受信側のクロックドメインが複数存在するか否かを判定する機能を有する。具体的には、例えば、非同期リストのリスト情報を用いて、非同期箇所内に受信側のクロックドメインが複数存在するか否かを判定することとしてもよい。
【００８４】
また、生成部７０３は、判定部７０４によって複数存在すると判定された場合、非同期箇所の送信クロックの立ち上がり時刻を基準として、送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第１の回路素子群を含む回路モデル（例えば、回路モデル１０００）を生成することとしてもよい。
【００８５】
一方、生成部７０３は、判定部７０４によって複数存在しないと判定された場合、送信側の回路素子から出力されるデータ信号の値を、非同期箇所の送信クロックの立ち上がり時刻から非同期箇所の受信クロックの立ち上がり時刻までの一定期間継続して不定値に置き換える第１の回路素子群を含む回路モデル（例えば、回路モデル１２００）を生成することとしてもよい。
【００８６】
なぜなら、非同期箇所内に受信側のクロックドメインが複数存在する場合、送信クロックの立ち上がり時刻から受信クロックの立ち上がり時刻までの一定期間継続して不定値に置き換えてしまうと、受信側の回路素子が不定値を複数回拾ってしまう不具合が発生してしまう可能性があるからである。
【００８７】
このため、非同期箇所内に受信側のクロックドメインが複数存在する場合には、送信側の回路素子から出力されるデータ信号の値を、送信クロックの立ち上がり時刻を基準に一定期間継続して不定値に置き換える手法を用いることが望ましい。すなわち、受信側の回路素子が不定値を複数回拾ってしまう前に不定値への置き換えを強制的に停止する。
【００８８】
また、生成部７０３は、判定部７０４によって複数存在すると判定された場合、非同期箇所と、非同期箇所内の送信クロックの立ち上がり時刻のあと最初に非同期箇所内の受信クロックが立ち上がる時刻を基準として、送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第１の回路素子群と、上記第２の回路素子群と、からなる回路モデルを生成することとしてもよい。
【００８９】
また、生成部７０３は、判定部７０４によって複数存在すると判定された場合、非同期箇所と、非同期箇所内の受信クロックが立ち上がる時刻のうち、複数の受信クロックが同時に立ち上がる時刻を除く時刻を基準として、送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第１の回路素子群と、上記第２の回路素子群と、からなる回路モデルを生成することとしてもよい。
【００９０】
これらの回路モデルは、非同期箇所内に受信側のクロックドメインが複数存在する場合に発生する問題を回避するために、受信側のクロックの立ち上がりタイミングを狙ってデータ信号の値を不定値に置き換える回路である（後述する実施例１に相当）。
【００９１】
また、生成部７０３は、判定部７０４によって複数存在すると判定された場合、非同期箇所と、非同期箇所内の非同期パスごとに送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第１の回路素子群と、第２の回路素子群と、からなる回路モデルを生成することとしてもよい。
【００９２】
この回路モデルは、非同期箇所内に受信側のクロックドメインが複数存在する場合に発生する問題を回避するために、非同期箇所内の全非同期パスを独立させて不定値のデータ信号を出力する回路である（後述する実施例２に相当）。
【００９３】
ここで、生成部７０３による生成処理の具体的処理手順について説明する。ここでは、検証対象回路３００（図３参照）内に存在する非同期箇所（ＣＤＣ１）の回路モデル４００（図４参照）を生成する場合を例に挙げて説明する。
【００９４】
生成部７０３は、非同期箇所（ＣＤＣ１）のリスト情報と、回路モデル生成用のテンプレートとを用いて、検証対象回路３００内の非同期箇所の回路モデル４００を生成する。このテンプレートは、回路モデルの機能に合わせて予め用意されており、例えば、不図示のデータベースやライブラリからの抽出によって取得することができる。
【００９５】
図１４は、テンプレートの一例を示す説明図（その１）である。図１４において、テンプレート１４００には、回路モデルの動作機能を定義するテンプレート情報が記述されている。生成部７０３は、非同期リストにリスト化されている全非同期箇所について、テンプレート１４００内の『％名前（）』を対応する値で置き換えることで、各非同期箇所の回路モデルを生成することができる。
【００９６】
ここで、『％ｆｏｒ  ｔ  ｉｎ  ％ｔｘＬｉｓｔ（）』は、非同期箇所内の送信ＦＦについて展開することを意味している。つまり、『％ｔ』は『送信ＦＦ名』を意味している。また、『％ｆｏｒ  ｒ  ｉｎ  ％ｒｘＬｉｓｔ（）』は、非同期箇所内の受信ＦＦについて展開することを意味している。つまり、『％ｒ』は『受信ＦＦ名』を意味している。
【００９７】
具体的には、まず、抽出部７０２によって抽出された非同期箇所のリスト情報の中から送信ＦＦ名を検出する。このあと、検出された送信ＦＦ名をテンプレート１４００内の『％ｔ』に挿入する。そして、『％名前（送信ＦＦ名）』に対応する値をリスト情報から特定し、『％名前（送信ＦＦ名）』を特定された値に置き換える。
【００９８】
つぎに、非同期箇所のリスト情報の中から受信ＦＦ名を検出する。このあと、検出された受信ＦＦ名をテンプレート１４００内の『％ｒ』に挿入する。そして、『％名前（受信ＦＦ名）』に対応する値をリスト情報から特定し、『％名前（受信ＦＦ名）』を特定された値に置き換える。この手順を非同期リストにリスト化された非同期箇所ごとに繰り返すことで、各非同期箇所の回路モデルを生成することができる。
【００９９】
ここで、非同期リスト９００を例に挙げると、まず、非同期リスト９００のリスト情報の中から非同期箇所（ＣＤＣ１）の送信ＦＦ名を検出する。ここでは、ＦＦ３０１，ＦＦ３０２が検出され、これら２要素について展開する。以下、ＦＦ３０１について展開する場合を例に挙げて説明する。
【０１００】
このあと、検出された送信ＦＦ名（ＦＦ３０１）を『％ｔ』に挿入する。そして、『％名前（ＦＦ３０１）』に対応する値をリスト情報から特定し、『％名前（ＦＦ３０１）』を特定された値に置き換える。具体的には、『％ｃｌｏｃｋ（ＦＦ３０１）』は、ＦＦ３０１に対するクロック名『ＤＵＴ．ｃｌｋ１』に置き換わる。
【０１０１】
また、『％ｏｕｔｐｕｔ（ＦＦ３０１）』は、ＦＦ３０１に対する出力信号名『ＤＵＴ．ｃ１』に置き換わる。また、『％ｉｎｐｕｔ（ＦＦ３０１）』は、ＦＦ３０１に対する入力信号名『ＤＵＴ．ａ１』に置き換わる。
【０１０２】
つぎに、非同期リスト９００のリスト情報の中から非同期箇所（ＣＤＣ１）の受信ＦＦ名を検出する。ここでは、ＦＦ３０３が検出される。このあと、検出された受信ＦＦ名（ＦＦ３０３）を『％ｒ』に挿入する。そして、『％名前（ＦＦ３０３）』に対応する値をリスト情報から特定し、『％名前（ＦＦ３０３）』を特定された値に置き換える。
【０１０３】
具体的には、『％ｏｕｔｐｕｔ（ＦＦ３０３）』は、ＦＦ３０３に対する出力信号名『ＤＵＴ．ｆ２』に置き換わる。このように、回路モデル生成用のテンプレート１４００に非同期箇所（ＣＤＣ１）のリスト情報を与えることで、非同期箇所（ＣＤＣ１）の回路モデル４００を生成することができる。
【０１０４】
図７の説明に戻り、出力部７０５は、生成部７０３によって生成された回路モデルを出力する機能を有する。具体的には、例えば、回路モデルの動作仕様が定義された回路モデル情報を出力する。この回路モデル情報は、例えば、検証対象回路の回路情報と同じＨＤＬによって記述されている。
【０１０５】
ここで、回路モデル情報の具体例について説明する。図１５は、回路モデル情報の具体例を示す説明図（その１）である。図１５において、回路モデル情報１５００には、図４に示した回路モデル４００の動作仕様が定義されている。
【０１０６】
実行部７０６は、検証対象回路の回路情報と、生成部７０３によって生成された回路モデルとを用いて、該検証対象回路の論理シミュレーションを実行する機能を有する。具体的には、例えば、回路情報８００と回路モデル情報１５００とをテストベンチに与えることで、検証対象回路３００内の非同期箇所におけるランダム性を考慮した論理シミュレーションを実行することができる。
【０１０７】
また、出力部７０５は、実行部７０６によって実行された論理シミュレーションのシミュレーション結果を出力する機能を有する。なお、出力部７０５による出力形式は、ディスプレイ６３１での画面表示、プリンタ６３３での印刷出力、メモリへのデータ出力（保存）、外部のコンピュータ装置への送信のいずれであってもよい。
【０１０８】
（検証支援装置６００の検証支援処理手順）
つぎに、本実施の形態にかかる検証支援装置６００の検証支援処理手順について説明する。図１６は、検証支援装置の検証支援処理手順の一例を示すフローチャートである。図１６のフローチャートにおいて、まず、取得部７０１により、検証対象回路の回路情報を取得したか否かを判断する（ステップＳ１６０１）。
【０１０９】
ここで、検証対象回路の回路情報を取得するのを待って（ステップＳ１６０１：Ｎｏ）、取得した場合（ステップＳ１６０１：Ｙｅｓ）、この回路情報を用いて検証対象回路内の全非同期箇所がリスト化された非同期リストを作成する（ステップＳ１６０２）。
【０１１０】
つぎに、抽出部７０２により、検証対象回路の非同期リストを参照して、該検証対象回路の中からクロックの異なるクロックドメイン間でデータ転送をおこなう非同期箇所を抽出する（ステップＳ１６０３）。そして、生成部７０３により、非同期箇所の動作検証をおこなうための回路モデルを生成する生成処理を実行する（ステップＳ１６０４）。
【０１１１】
このあと、検証対象回路の中から抽出していない未抽出の非同期箇所があるか否かを判断し（ステップＳ１６０５）、未抽出の非同期箇所がある場合には（ステップＳ１６０５：Ｙｅｓ）、ステップＳ１６０３に戻る。
【０１１２】
一方、未抽出の非同期箇所がない場合には（ステップＳ１６０５：Ｎｏ）、出力部７０５により、生成部７０３によって生成された回路モデルを出力して（ステップＳ１６０６）、本フローチャートによる一連の処理を終了する。
【０１１３】
また、検証対象回路内の非同期箇所ごとの回路モデルが生成された結果、実行部７０６により、ステップＳ１６０１において取得された検証対象回路の回路情報と、ステップＳ１６０４において生成された回路モデルとを用いて、検証対象回路の論理シミュレーションを実行することとしてもよい。
【０１１４】
つぎに、図１６に示したステップＳ１６０４における生成処理の具体的処理手順について説明する。図１７は、生成処理の具体的処理手順の一例を示すフローチャートである。図１７のフローチャートにおいて、まず、回路モデル生成用のテンプレートを取得する（ステップＳ１７０１）。
【０１１５】
このあと、図１６に示したステップＳ１６０３において抽出された非同期箇所のリスト情報の中から送信ＦＦ名および受信ＦＦ名を検出する（ステップＳ１７０２）。つぎに、取得されたテンプレート内の『％ｔ』および『％ｒ』に、検出された送信ＦＦ名および受信ＦＦ名をそれぞれ挿入する（ステップＳ１７０３）。
【０１１６】
そして、『％名前（送信ＦＦ名）』および『％名前（受信ＦＦ名）』に対応する値をリスト情報から特定する（ステップＳ１７０４）。最後に、『％名前（送信ＦＦ名）』および『％名前（受信ＦＦ名）』を特定された値に置き換えて（ステップＳ１７０５）、図１６に示したステップＳ１６０５に移行する。
【０１１７】
なお、回路モデル生成用のテンプレートが複数存在する場合には、すべてのテンプレートを用いて回路モデルが生成されるまでステップＳ１７０１〜ステップＳ１７０５の処理を繰り返すこととしてもよい。また、使用するテンプレートが予め設定されている場合には、ステップＳ１７０１において、複数のテンプレートの中から設定されたテンプレートを取得することとしてもよい。
【０１１８】
以上説明した、本実施の形態によれば、検証対象回路内の非同期箇所の出力値が不規則に変化する回路モデルを提供することができる。また、非同期箇所内の送信ＦＦから出力されるデータ信号の値を不定値Ｘに置き換える期間を適切に制御することで、非同期箇所における出力値のランダム性を効率よく再現することができる。
【０１１９】
さらに、回路モデルを用いて検証対象回路の論理シミュレーションを実行することにより、非同期箇所のクロックドメイン・クロッシング（タイミングのズレ、メタステーブル状態およびグリッジ）による影響を効率的かつ効果的に検証することができる。
【実施例１】
【０１２０】
つぎに、上述した実施の形態の実施例１について説明する。実施例１では、非同期箇所内に受信側のクロックドメインが複数存在する場合について説明する。なお、実施の形態１において説明した箇所と同一箇所については同一符号を付して図示および説明を省略する。
【０１２１】
受信側のクロックドメインが複数存在する場合、送信側のフリップフロップから出力されるデータ信号の値を不定値Ｘに置き換える期間が長くなりすぎると誤動作を引き起こす可能性がある。ここで、検証対象回路１８００を例に挙げて問題点を具体的に説明する。
【０１２２】
図１８は、検証対象回路の一例を示す回路図（その３）である。なお、図面では、検証対象回路の一部を抜粋して表示している。図１８において、検証対象回路１８００は、ＦＦ１８０１，ＦＦ１８０２，ＦＦ１８０３，ＦＦ１８０４と組合せ回路１８０５と、から構成されている。
【０１２３】
第１の問題として、ＦＦ１８０１から出力されるデータ信号ｔ１の値を不定値Ｘに置き換える期間が長くなりすぎると、ＦＦ１８０１と同じクロックｃｌｋ１で動作するＦＦ１８０２が、不定値Ｘを取り込んで誤動作を引き起こしてしまうという問題がある。第２の問題として、ＦＦ１８０１と異なるクロックｃｌｋ２，３で動作するＦＦ１８０３，１８０４が不定値Ｘを複数回取り込むと誤動作を引き起こしてしまうという問題がある。
【０１２４】
これら第１および第２の問題を解決するためには、まず、ＦＦ１８０１から出力されるデータ信号ｔ１の値の不定値Ｘへの置き換えを、つぎにｃｌｋ１が立ち上がる前に停止する必要がある。さらに、データ信号ｔ１の値を不定値Ｘに置き換える期間を、ｃｌｋ２，３のうち最短のクロック周期に合わせることが考えられる。
【０１２５】
ところが、第３の問題として、データ信号ｔ１の値を不定値Ｘに置き換える期間を最短のクロック周期に合わせると、誤動作を防ぐことはできるが、期間が短いために非同期箇所でのランダムな動作が起こる確率が低下してしまうという問題がある。
【０１２６】
そこで、実施例１では、第１〜第３の問題を解決するために、送信クロック（ｃｌｋ１）が立ち上がったあと、最初に受信クロック（ｃｌｋ２，ｃｌｋ３）が立ち上がるタイミングに合わせてデータ信号ｔ１の値を不定値Ｘに置き換える。これにより、ランダムな動作が起こる確率を低下させることなく誤動作を防ぐことができる。
【０１２７】
具体的には、受信クロックｃｌｋ２，ｃｌｋ３の立ち上がりがある一定期間パルスを発生させるｗｉｎｄｏｗ信号を利用して、データ信号ｔ１の値を不定値Ｘに置き換える期間を制御する。ここで、受信クロックの立ち上がりに合わせて一定期間パルスを発生させるｗｉｎｄｏｗ信号を生成する生成処理の概要について説明する。
【０１２８】
図１９は、ｗｉｎｄｏｗ信号の生成処理の概要を示す説明図である。図１９に示すように、テストベンチのクロックジェネレータ１９１０部分に回路１９２０，１９３０を挿入することで、受信クロックの立ち上がり時刻直前に一定期間パルスを発生させる機構を作る。
【０１２９】
具体的には、回路１９２０は、クロックｃｌｋに遅延を入れたクロックｎｅｗｃｌｋを供給する回路である。なお、これ以降、テストベンチでは、クロックｎｅｗｃｌｋを新しいクロックとして使用する。また、回路１９３０は、クロックｃｌｋが立ち上がってから一定期間パルスを発生させる回路である。
【０１３０】
これにより、ｗｉｎｄｏｗ信号が１の区間にクロックｎｅｗｃｌｋが立ち上がる関係を作り出すことができる。なお、回路１９３０がパルスを発生させる期間は任意に設定可能である。このとき、少なくともクロックｃｌｋとクロックｎｅｗｃｌｋとの遅延差以上となる期間に設定する必要がある。
【０１３１】
具体的には、例えば、ＨＤＬを用いて上述の機構を実現するテストベンチを作成する。より具体的には、テストベンチのクロックジェネレータに相当する記述部分に、回路１９２０および回路１９３０の機能を定義する記述を追加することで実現することができる。
【０１３２】
ここで、図１８に示した検証対象回路１８００を例に挙げて、ｗｉｎｄｏｗ信号を利用して不定値Ｘのデータ信号ｔ１を出力する場合の各信号の波形について説明する。図２０は、信号の波形を示す波形図（その５）である。
【０１３３】
これによれば、ｃｌｋ２＿ｗｉｎｄｏｗ，ｃｌｋ３＿ｗｉｎｄｏｗのパルスの発生タイミングを利用して、クロックｃｌｋ１が立ち上がったあと、最初にクロックｃｌｋ２，ｃｌｋ３が立ち上がるタイミングを狙ってデータ信号ｔ１の値を不定値Ｘに置き換えている。
【０１３４】
ここで、実施例１の回路モデルについて説明する。図２１は、回路モデルの一例を示す回路図（その４）である。図２１において、回路モデル２１００は、検証対象回路１８００の非同期箇所（図１８に表示した部分）の回路モデルである。この回路モデル２１００は、ｃｌｋ２＿ｗｉｎｄｏｗおよびｃｌｋ３＿ｗｉｎｄｏｗの値が１の期間に限定して、データ信号ｔ１の値を不定値Ｘに置き換える機能を有している。
【０１３５】
これによれば、クロックｃｌｋ１が立ち上がったあと、最初にクロックｃｌｋ２，ｃｌｋ３が立ち上がるタイミングを狙って不定値Ｘのデータ信号ｔ１を出力することができる。しかし、この回路モデル２１００は、クロックｃｌｋ２，ｃｌｋ３が同時に立ち上がると誤動作を発生させてしまう可能性があるという問題がある。
【０１３６】
具体的には、クロックｃｌｋ２，ｃｌｋ３が同時に立ち上がったときに、いずれか一方のクロック（例えば、クロックｃｌｋ２）の立ち上がりが２回目の立ち上がりであるときに、ＦＦ１８０３が不定値Ｘを複数回取り込むこととなってしまう。同一サイクルで不定値Ｘを複数回取り込んでしまうと、実際にはありえないランダム性が発生してしまう。
【０１３７】
そこで、この問題を解決するための回路モデルを図２２および図２３に示す。図２２，図２３は、回路モデルの一例を示す回路図（その５，その６）である。図２２，図２３において、回路モデル２２００，２３００は、クロックｃｌｋ２，ｃｌｋ３が同時に立ち上がったときには、不定値Ｘのデータ信号ｔ１を出力しない機能を有する回路である。
【０１３８】
具体的には、回路モデル２２００は、受信側のすべてのクロックｃｌｋ２＿ｗｉｎｄｏｗ，ｃｌｋ３＿ｗｉｎｄｏｗの値が０の期間に不定値Ｘのデータ信号ｔ１を出力する機能を有している。また、回路モデル２３００は、受信側のすべてのクロックｃｌｋ２＿ｗｉｎｄｏｗ，ｃｌｋ３＿ｗｉｎｄｏｗの値が０の期間には不定値Ｘのデータ信号ｔ１を出力しない機能を有している。
【０１３９】
回路モデル２２００，２３００によれば、クロックｃｌｋ１が立ち上がったあと、最初にクロックｃｌｋ２，ｃｌｋ３が立ち上がるタイミングを狙って不定値Ｘのデータ信号ｔ１を出力することができる。さらに、クロックｃｌｋ２，ｃｌｋ３が同時に立ち上がるときには不定値Ｘのデータ信号ｔ１が出力されないため、ＦＦ１８０３が不定値Ｘを複数回取り込むことによる誤動作を防ぐことができる。
【０１４０】
ここで、実施例１における回路モデルの生成処理の具体例について説明する。ここでは、送信クロックが立ち上がったあと、受信クロックのｗｉｎｄｏｗ信号の値が１の期間に限定して不定値Ｘのデータ信号を出力する場合（例えば、図２１に示した回路モデル２１００）を例に挙げて、生成部７０３による生成処理の具体例について説明する。
【０１４１】
まず、検証対象回路の一例について説明する。図２４は、検証対象回路の一例を示す回路図（その４）である。なお、図面では、検証対象回路の一部を抜粋して表示している。図２４において、検証対象回路２４００は、ＦＦ２４０１，ＦＦ２４０２，ＦＦ２４０３，ＦＦ２４０４とＡＮＤゲート２４０５と、から構成されている。
【０１４２】
つぎに、検証対象回路２４００の回路情報について説明する。図２５は、回路情報の一例を示す説明図（その２）である。図２５において、回路情報２５００は、検証対象回路２４００（図２４参照）の動作仕様を定義するＲＴＬ記述である。具体的には、クロックｃｌｋ１，ｃｌｋ２，ｃｌｋ３に応じて受け渡されるデータ信号ｓ１，ｓ２，ｔ１，ｔ２，ｑ、ｒ２，ｒ３の流れが定義されている。
【０１４３】
この回路情報２５００を非同期抽出プログラムに入力することで、検証対象回路２４００の非同期リストを作成する。図２６は、非同期リストの具体例を示す説明図（その２）である。図２６において、非同期リスト２６００は、検証対象回路２４００に存在する非同期箇所ごとに、ＣＤＣ名、送信ＦＦ名、受信ＦＦ名に関するリスト情報を有している。
【０１４４】
つぎに、非同期リスト２６００と回路モデル生成用のテンプレートとを用いて回路モデルを生成する。図２７は、テンプレートの一例を示す説明図（その２）である。図２７において、テンプレート２７００には、非同期箇所の回路モデルの動作機能を定義するテンプレート情報が記述されている。
【０１４５】
生成部７０３は、非同期リスト２６００を参照して、テンプレート２７００内の『％名前（）』を対応する値で置き換えることで、非同期箇所の回路モデルを生成することができる。なお、テンプレート２７００を用いて回路モデルを生成する手順は上述した実施の形態で説明した手順と同様のため詳細な説明は省略する。
【０１４６】
図２８は、回路モデル情報の具体例を示す説明図（その２）である。図２８において、回路モデル情報２８００には、非同期リスト２６００とテンプレート２７００とを用いて生成された回路モデル（回路モデル２１００に相当）の動作仕様が定義されている。
【０１４７】
なお、生成する回路モデルは任意に選択可能としてもよい。例えば、非同期箇所の出力値が不定値Ｘとなるランダム性を最大化したい場合には、受信側の複数のクロックが同時に立ち上がったとしても不定値Ｘのデータ信号を出力する回路モデル（例えば、回路モデル２１００）を選択することとしてもよい。
【０１４８】
一方、多少のランダム性の低下を許して誤動作を防ぎたい場合には、受信側の複数のクロックが同時に立ち上がったときに不定値Ｘのデータ信号を出力しない回路モデル（例えば、回路モデル２２００，２３００）を選択することとしてもよい。
【０１４９】
（実施例１における検証支援処理手順）
つぎに、実施例１における検証支援装置６００の検証支援処理手順について説明する。図２９は、実施例１における検証支援装置の検証支援処理手順の一例を示すフローチャートである。図２９のフローチャートにおいて、まず、取得部７０１により、検証対象回路の回路情報を取得したか否かを判断する（ステップＳ２９０１）。
【０１５０】
ここで、検証対象回路の回路情報を取得するのを待って（ステップＳ２９０１：Ｎｏ）、取得した場合（ステップＳ２９０１：Ｙｅｓ）、この回路情報を用いて検証対象回路内の全非同期箇所がリスト化された非同期リストを作成する（ステップＳ２９０２）。
【０１５１】
つぎに、検証対象回路内の各クロックに対応したｗｉｎｄｏｗ信号を生成する（ステップＳ２９０３）。このあと、抽出部７０２により、検証対象回路の非同期リストを参照して、該検証対象回路の中からクロックの異なるクロックドメイン間でデータ転送をおこなう非同期箇所を抽出する（ステップＳ２９０４）。
【０１５２】
そして、生成部７０３により、テンプレート２７００を用いて非同期箇所の回路モデルを生成する生成処理を実行する（ステップＳ２９０５）。このあと、検証対象回路の中から抽出していない未抽出の非同期箇所があるか否かを判断し（ステップＳ２９０６）、未抽出の非同期箇所がある場合には（ステップＳ２９０６：Ｙｅｓ）、ステップＳ２９０４に戻る。
【０１５３】
一方、未抽出の非同期箇所がない場合には（ステップＳ２９０６：Ｎｏ）、出力部７０５により、生成部７０３によって生成された回路モデルを出力して（ステップＳ２９０７）、本フローチャートによる一連の処理を終了する。なお、ステップＳ２９０５における生成処理は、上述した実施の形態の図１７のフローチャートで説明した手順と同様のため説明を省略する。
【０１５４】
実施例１によれば、データ信号の値を不定値Ｘに置き換える開始時刻を、受信クロックの立ち上がりタイミングに合わせて制御することができる。これにより、非同期箇所でのランダムな動作が起こる確率を低下させることなく、受信ＦＦが不定値Ｘのデータ信号を複数回取り込むことによる誤動作を防ぐことができる。
【０１５５】
また、データ信号の値を不定値Ｘに置き換える開始時刻を、複数の受信クロックが同時に立ち上がる時刻を除く受信クロックの立ち上がり時刻を基準とすることで、複数の受信ＦＦが同時に不定値Ｘのデータ信号を取り込むことを防ぐことができる。これにより、受信ＦＦが不定値Ｘのデータ信号を複数回取り込むことによる誤動作を確実に防ぐことができる。
【実施例２】
【０１５６】
つぎに、上述した実施の形態の実施例２について説明する。上述した実施例１では、非同期箇所の出力値が不定値Ｘとなるランダム性を最大化する、あるいは、多少のランダム性の低下を許して誤動作を防ぐなどの要求に合わせて回路モデルを生成する。実施例２では、不定値Ｘのランダム性を最大化し誤動作を防ぐ回路モデルを生成する。
【０１５７】
まず、実施例２の概要について説明する。図３０は、実施例２の概要を示す説明図である。図３０において、非同期箇所３０１０と、回路モデル３０２０とが示されている。非同期箇所３０１０は、ＦＦ３００１と、ＦＦ３００２と、ＦＦ３００３と、ＦＦ３００４と、組合せ回路３００５と、から構成されている。
【０１５８】
非同期箇所３０１０では、それぞれクロックの異なるクロックドメイン間ＣＤ５，ＣＤ７と、クロックドメイン間ＣＤ５，ＣＤ８と、クロックドメイン間ＣＤ６，ＣＤ８でデータ信号の受け渡しがおこなわれている。
【０１５９】
また、回路モデル３０２０は、非同期箇所３０１０と、非同期箇所３０１０内の非同期パスごとに送信側のＦＦ３００１，３００２から出力されるデータ信号ｔ１，ｔ２の値を一定期間継続して不定値Ｘに置き換える機能と、受信側のＦＦ３００３，３００４から出力される不定値Ｘのデータ信号ｒ２，ｒ３を受信する都度、当該データ信号ｒ２，ｒ３の値を１または０に不規則に置き換える機能と、を有する回路である。
【０１６０】
非同期パスとは、クロックの異なるＦＦ間でデータ信号の受け渡しをおこなうパスである。ここでは、クロックｃｌｋ１で動作するＦＦ３００１からクロックｃｌｋ２で動作するＦＦ３００３に辿り着くまでの非同期パスと、クロックｃｌｋ１で動作するＦＦ３００１からクロックｃｌｋ３で動作するＦＦ３００４に辿り着くまでの非同期パスと、クロックｃｌｋ２で動作するＦＦ３００２からクロックｃｌｋ３で動作するＦＦ３００４に辿り着くまでの非同期パスと、がある。
【０１６１】
このように、受信側のクロックドメイン（ＣＤ７，ＣＤ８）が複数存在する場合には、非同期箇所３０１０内の非同期パスを独立させた回路モデル３０２０を生成することで、受信側のクロックｃｌｋ２，ｃｌｋ３が同時に立ち上がることによる問題を回避することができる。つまり、受信側のクロックドメインごとに不定値Ｘのデータ信号を取り込むことができる。
【０１６２】
ここで、非同期箇所内の非同期パスを独立させた回路モデルを生成するために用いるテンプレートについて説明する。図３１は、テンプレートの一例を示す説明図（その３）である。図３１において、テンプレート３１００には、非同期箇所の回路モデルの動作機能を定義するテンプレート情報が記述されている。なお、図面では、テンプレートの一部を抜粋して表示している。
【０１６３】
ここで、『％ｆｏｒ  ｃ  ｉｎ  ％ＣＤＣＬｉｓｔ（）』は、非同期箇所内のＣＤＣについて展開することを意味している。つまり、『％ＣＤＣ』は『ＣＤＣ名』を意味している。上述した実施例１で説明した検証対象回路２４００（図２４参照）の非同期リスト２６００（図２６参照）を例に挙げると（以下同様）、ＣＤＣ１，ＣＤＣ２の２要素に展開される。
【０１６４】
また、『％ｔｘＬｉｓｔ（ＣＤＣ名）』は、ＣＤＣ名に対する送信ＦＦについて展開することを意味している。ＣＤＣ２を例に挙げると、『％ｔｘＬｉｓｔ（ＣＤＣ２）』は、ＦＦ２４０１，２４０２の２要素について展開される。
【０１６５】
また、『％ｒｘＬｉｓｔ（ＣＤＣ名）』は、ＣＤＣ名に対する受信ＦＦについて展開することを意味している（不図示）。ＣＤＣ２を例に挙げると、『％ｒｘＬｉｓｔ（ＣＤＣ２）』は、ＦＦ２４０４について展開される。
【０１６６】
また、『％ｂｙｐａｓｓＬｏｇｉｃ（ＣＤＣ名）』は、ＣＤＣ名に対する各送信ＦＦの出力信号と受信ＦＦの入力信号との間にある組合せ回路に相当する論理関数に展開される。さらに、この論理関数に現れる変数のうち対象の送信ＦＦの出力信号であるものは、『ｔｘ』のあとにＣＤＣ名と送信ＦＦ名とを連結してできた名前で置き換えられる。
【０１６７】
また、その他の変数は回路情報の信号値の参照となるように、その名前の前に階層パス指定（モジュール階層名と「.」）が追加される。例えば、『％ｂｙｐａｓｓＬｏｇｉｃ（ＣＤＣ１）』はＦＦ２４０１の出力信号ｔ１とＦＦ２４０３の入力信号ｑとの間にあるＡＮＤゲート２４０５が対象となる。
【０１６８】
具体的には、検証対象回路２４００回路情報２５００（図２５参照）をコンパイルすることで、データ信号ｑの値を決める論理関数「ｔ１＆ｔ２」が得られる。さらに、論理関数「ｔ１＆ｔ２」に現れる「ｔ１」はＣＤＣ１の送信ＦＦであるＦＦ２４０１の出力信号のため、「ｔｘＣＤＣ１ＦＦ２４０１」という名前で置き換えられる。
【０１６９】
また、「ｔ２」はＣＤＣ１とは関係の無い変数なので、回路情報の階層パス指定を追加した「ＤＵＴ．ｔ２」に置き換わる。これにより、『％ｂｙｐａｓｓＬｏｇｉｃ（ＣＤＣ１）』は『ｔｘＣＤＣ１ＦＦ２４０１＆ＤＵＴ．ｔ２』に展開される。
【０１７０】
図３２は、回路モデル情報の具体例を示す説明図（その２）である。図３２において、回路モデル情報３２００には、図２４に示した検証対象回路２４００内の非同期箇所（図２６に示した非同期リスト２６００のＣＤＣ１，ＣＤＣ２）の回路モデルの動作仕様が定義されている。なお、図面では、回路モデル情報の一部を抜粋して表示している。
【０１７１】
この回路モデル情報３２００と検証対象回路２４００の回路情報２５００（図２５参照）とを用いて論理シミュレーションを実行することで、誤動作をおこすことなく非同期箇所におけるランダム性を効率よく検証することができる。
【０１７２】
実施例２によれば、非同期箇所内の非同期パスを独立させることで、非同期箇所の出力値が不定値Ｘとなるランダム性を最大化するとともに、受信ＦＦが不定値Ｘのデータ信号を複数回取り込むことによる誤動作を防ぐ回路モデルを提供することができる。さらに、実施例１で説明したｗｉｎｄｏｗ信号が不要となるため、回路内部でクロックを生成する検証対象にも対応可能となる。
【０１７３】
以上説明したように、検証支援プログラム、検証支援装置、および検証支援方法によれば、クロックドメイン・クロッシングを含む論理設計に対する検証品質および検証効率を向上させ、設計期間の短縮化を図ることができる。
【０１７４】
なお、本実施の形態で説明した検証支援方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネットなどのネットワークを介して配布することが可能な伝送媒体であってもよい。
【０１７５】
また、本実施の形態で説明した検証支援装置６００は、スタンダードセルやストラクチャードＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの特定用途向けＩＣ（以下、単に「ＡＳＩＣ」と称す。）やＦＰＧＡなどのＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）によっても実現することができる。具体的には、たとえば、上述した検証支援装置６００の機能７０１〜７０６をＨＤＬ記述によって機能定義し、そのＨＤＬ記述を論理合成してＡＳＩＣやＰＬＤに与えることにより、検証支援装置６００を製造することができる。
【０１７６】
上述した実施の形態および実施例に関し、さらに以下の付記を開示する。
【０１７７】
（付記１）コンピュータを、
検証対象回路の中から、クロックの異なるクロックドメイン間でデータ転送する非同期箇所を抽出する抽出手段、
前記抽出手段によって抽出された非同期箇所と、当該非同期箇所内の送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第１の回路素子群と、前記非同期箇所内の受信側の回路素子から出力される不定値のデータ信号を受信する都度、当該データ信号の値を１または０に不規則に置き換える第２の回路素子群と、からなる回路モデルを生成する生成手段、
前記生成手段によって生成された回路モデルを出力する出力手段、
として機能させることを特徴とする検証支援プログラム。
【０１７８】
（付記２）前記生成手段は、
前記非同期箇所と、前記非同期箇所の送信クロックの立ち上がり時刻を基準として、前記送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第１の回路素子群と、前記第２の回路素子群と、からなる回路モデルを生成することを特徴とする付記１に記載の検証支援プログラム。
【０１７９】
（付記３）前記生成手段は、
前記非同期箇所と、前記送信側の回路素子から出力されるデータ信号の値を、前記非同期箇所の送信クロックの立ち上がり時刻から前記非同期箇所の受信クロックの立ち上がり時刻までの期間継続して不定値に置き換える第１の回路素子群と、前記第２の回路素子群と、からなる回路モデルを生成することを特徴とする付記１に記載の検証支援プログラム。
【０１８０】
（付記４）前記コンピュータを、
前記抽出手段によって抽出された非同期箇所内に受信側のクロックドメインが複数存在するか否かを判定する判定手段として機能させ、
前記生成手段は、
前記判定手段によって複数存在すると判定された場合、前記非同期箇所と、前記非同期箇所内の送信クロックの立ち上がり時刻のあと最初に前記非同期箇所内の受信クロックが立ち上がる時刻を基準として、前記送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第１の回路素子群と、前記第２の回路素子群と、からなる回路モデルを生成することを特徴とする付記１に記載の検証支援プログラム。
【０１８１】
（付記５）前記生成手段は、
前記判定手段によって複数存在すると判定された場合、前記非同期箇所と、当該非同期箇所内の受信クロックが立ち上がる時刻のうち複数の受信クロックが同時に立ち上がる時刻を除く時刻を基準として、前記送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第１の回路素子群と、前記第２の回路素子群と、からなる回路モデルを生成することを特徴とする付記４に記載の検証支援プログラム。
【０１８２】
（付記６）前記生成手段は、
前記判定手段によって複数存在すると判定された場合、前記非同期箇所と、当該非同期箇所内の非同期パスごとに前記送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第１の回路素子群と、前記第２の回路素子群と、からなる回路モデルを生成することを特徴とする付記４に記載の検証支援プログラム。
【０１８３】
（付記７）前記コンピュータを、
前記検証対象回路の回路情報と、前記生成手段によって生成された回路モデルとを用いて、前記検証対象回路の論理シミュレーションを実行する実行手段として機能させ、
前記出力手段は、
前記実行手段によって実行された論理シミュレーションのシミュレーション結果を出力することを特徴とする付記１〜６のいずれか一つに記載の検証支援プログラム。
【０１８４】
（付記８）前記生成手段は、
前記非同期箇所と、前記第１の回路素子群と、前記受信側の回路素子から出力される不定値のデータ信号が受信された回数、前記データ信号の値が１に置き換えられた回数および前記データ信号の値が０に置き換えられた回数を計数する前記第２の回路素子群と、からなる回路モデルを生成することを特徴とする付記１〜７のいずれか一つに記載の検証支援プログラム。
【０１８５】
（付記９）検証対象回路の中から、クロックの異なるクロックドメイン間でデータ転送する非同期箇所を抽出する抽出手段と、
前記抽出手段によって抽出された非同期箇所と、当該非同期箇所内の送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第１の回路素子群と、前記非同期箇所内の受信側の回路素子から出力される不定値のデータ信号を受信する都度、当該データ信号の値を１または０に不規則に置き換える第２の回路素子群と、からなる回路モデルを生成する生成手段と、
前記生成手段によって生成された回路モデルを出力する出力手段と、
を備えることを特徴とする検証支援装置。
【０１８６】
（付記１０）検証対象回路の中から、クロックの異なるクロックドメイン間でデータ転送する非同期箇所を抽出する抽出工程と、
前記抽出工程によって抽出された非同期箇所と、当該非同期箇所内の送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第１の回路素子群と、前記非同期箇所内の受信側の回路素子から出力される不定値のデータ信号を受信する都度、当該データ信号の値を１または０に不規則に置き換える第２の回路素子群と、からなる回路モデルを生成する生成工程と、
前記生成工程によって生成された回路モデルを出力する出力工程と、
を含んだことを特徴とする検証支援方法。
【図面の簡単な説明】
【０１８７】
【図１】検証対象回路の一例を示す回路図（その１）である。
【図２】信号の波形を示す波形図（その１）である。
【図３】検証対象回路の一例を示す回路図（その２）である。
【図４】回路モデルの一例を示す回路図（その１）である。
【図５】信号の波形を示す波形図（その２）である。
【図６】検証支援装置のハードウェア構成を示す説明図である。
【図７】検証支援装置の機能的構成を示すブロック図である。
【図８】回路情報の一例を示す説明図（その１）である。
【図９】非同期リストの具体例を示す説明図（その１）である。
【図１０】回路モデルの一例を示す回路図（その２）である。
【図１１】信号の波形を示す波形図（その３）である。
【図１２】回路モデルの一例を示す回路図（その３）である。
【図１３】信号の波形を示す波形図（その４）である。
【図１４】テンプレートの一例を示す説明図（その１）である。
【図１５】回路モデル情報の具体例を示す説明図（その１）である。
【図１６】検証支援装置の検証支援処理手順の一例を示すフローチャートである。
【図１７】生成処理の具体的処理手順の一例を示すフローチャートである。
【図１８】検証対象回路の一例を示す回路図（その３）である。
【図１９】ｗｉｎｄｏｗ信号の生成処理の概要を示す説明図である。
【図２０】信号の波形を示す波形図（その５）である。
【図２１】回路モデルの一例を示す回路図（その４）である。
【図２２】回路モデルの一例を示す回路図（その５）である。
【図２３】回路モデルの一例を示す回路図（その６）である。
【図２４】検証対象回路の一例を示す回路図（その４）である。
【図２５】回路情報の一例を示す説明図（その２）である。
【図２６】非同期リストの具体例を示す説明図（その２）である。
【図２７】テンプレートの一例を示す説明図（その２）である。
【図２８】回路モデル情報の具体例を示す説明図（その２）である。
【図２９】実施例１における検証支援装置の検証支援処理手順の一例を示すフローチャートである。
【図３０】実施例２の概要を示す説明図である。
【図３１】テンプレートの一例を示す説明図（その３）である。
【図３２】回路モデル情報の具体例を示す説明図（その２）である。
【符号の説明】
【０１８８】
１００，３００，１８００，２４００  検証対象回路
４００，１０００，１２００，２１００，２２００，２３００，３０２０  回路モデル
６００  検証支援装置
７０１  取得部
７０２  抽出部
７０３  生成部
７０４  判定部
７０５  出力部
７０６  実行部
８００，２５００  回路情報
９００，２６００  非同期リスト
１４００，２７００，３１００  テンプレート
１５００，２８００，３２００  回路モデル情報
３０１０  非同期箇所
【図１】
0005104356.tif 000002
【図２】
0005104356.tif 000003
【図３】
0005104356.tif 000004
【図４】
0005104356.tif 000005
【図５】
0005104356.tif 000006
【図６】
0005104356.tif 000007
【図７】
0005104356.tif 000008
【図８】
0005104356.tif 000009
【図９】
0005104356.tif 000010
【図１０】
0005104356.tif 000011
【図１１】
0005104356.tif 000012
【図１２】
0005104356.tif 000013
【図１３】
0005104356.tif 000014
【図１４】
0005104356.tif 000015
【図１５】
0005104356.tif 000016
【図１６】
0005104356.tif 000017
【図１７】
0005104356.tif 000018
【図１８】
0005104356.tif 000019
【図１９】
0005104356.tif 000020
【図２０】
0005104356.tif 000021
【図２１】
0005104356.tif 000022
【図２２】
0005104356.tif 000023
【図２３】
0005104356.tif 000024
【図２４】
0005104356.tif 000025
【図２５】
0005104356.tif 000026
【図２６】
0005104356.tif 000027
【図２７】
0005104356.tif 000028
【図２８】
0005104356.tif 000029
【図２９】
0005104356.tif 000030
【図３０】
0005104356.tif 000031
【図３１】
0005104356.tif 000032
【図３２】
0005104356.tif 000033