(57)【特許請求の範囲】
【請求項１】
検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所における受信側の１クロックサイクルの間に、送信側の各回路素子から出力された信号の変化を検出する検出工程と、
前記１クロックサイクル後の前記受信側の動作クロックの立ち上がりを契機に、前記検出工程によって信号の変化が検出された時刻の中のいずれか１つの時刻に前記検出工程によって変化が検出された信号をランダムな論理値に置き換えて前記受信側の各回路素子へ入力し、前記いずれか１つの時刻に前記検出工程によって変化が検出されなかった信号を前記受信側の各回路素子へ入力する入力工程と、
前記入力工程による入力に応じた前記受信側の各回路素子の動作結果を出力する出力工程と、
をコンピュータに実行させることを特徴とする検証支援プログラム。
【請求項２】
前記検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所の指定を受け付ける受付工程を前記コンピュータに実行させ、
前記検出工程では、
前記受付工程によって受け付けられた非同期箇所における前記受信側の１クロックサイクルの間に、前記非同期箇所の前記送信側の各回路素子から出力された信号の変化を検出し、
前記入力工程では、
前記１クロックサイクル後の前記受信側の動作クロックの立ち上がりを契機に、前記いずれか１つの時刻に前記検出工程によって変化が検出された信号を前記ランダムな論理値に置き換えて前記受信側の各回路素子へ入力し、前記いずれか１つの時刻に前記検出工程によって変化が検出されなかった信号を前記受信側の各回路素子へ入力することを特徴とする請求項１に記載の検証支援プログラム。
【請求項３】
前記検証対象回路の設計情報に基づいて、前記検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所を抽出する抽出工程を前記コンピュータに実行させ、
前記検出工程では、
前記抽出工程によって抽出された非同期箇所における前記受信側の１クロックサイクルの間に、前記非同期箇所の前記送信側の各回路素子から出力された信号の変化を検出し、
前記入力工程では、
前記１クロックサイクル後の前記受信側の動作クロックの立ち上がりを契機に、前記いずれか１つの時刻に前記検出工程によって変化が検出された信号を、前記ランダムな論理値に置き換えて前記受信側の各回路素子へ入力し、前記いずれか１つの時刻に前記検出工程によって変化が検出されなかった信号を前記受信側の各回路素子へ入力することを特徴とする請求項１または２に記載の検証支援プログラム。
【請求項４】
前記非同期箇所の中から、送信側の各回路素子の指定と、受信側の各回路素子の指定とを受け付ける指定工程を前記コンピュータに実行させ、
前記検出工程では、
前記非同期箇所における前記受信側の１クロックサイクルの間に、前記指定工程によって指定された前記送信側の各回路素子から出力された信号の変化を検出し、
前記入力工程では、
前記１クロックサイクル後の前記受信側の動作クロックの立ち上がりを契機に、前記いずれか１つの時刻に前記検出工程によって変化が検出された信号を前記ランダムな論理値に置き換えて前記指定工程によって指定された前記受信側の各回路素子へ入力し、前記いずれか１つの時刻に前記検出工程によって変化が検出されなかった信号は前記指定工程によって指定された前記受信側の各回路素子へ入力し、
前記出力工程では、
前記指定工程によって指定された受信側の各回路素子の動作を出力することを特徴とする請求項１〜３のいずれか一つに記載の検証支援プログラム。
【請求項５】
前段から出力された信号の変化を検出する第１の素子、前記第１の素子によって信号の変化が検出された時刻に前記前段から出力された信号の値を保持する第２の素子、および、後段の動作クロックの立ち上がりを契機に前記第１の素子によって前記信号の変化が検出された時刻の中のいずれか１つの時刻に前記第２の素子に保持された値を前記後段に入力するとともに前記第１の素子によって変化が検出された値をランダムな論理値に置き換えて前記後段に入力する第３の素子の設計情報を記憶する記憶装置にアクセス可能なコンピュータに、
検証対象回路の設計情報に基づいて、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所を抽出する抽出工程と、
前記抽出工程によって抽出された非同期箇所における送信側の各回路素子と、受信側の各回路素子とを特定する特定工程と、
前記第１の素子の前段に前記特定工程によって特定された前記送信側の各回路素子を設定して、前記第１の素子によって前記送信側の各回路素子から出力された信号の変化を検出させ、前記第３の素子の後段に前記特定工程によって特定された前記受信側の各回路素子を設定して、前記第１の素子によって前記信号の変化が検出されたいずれか１つの時刻に前記第２の素子に保持された値および前記ランダムな値を、前記第３の素子から前記受信側の各回路素子に入力させるシミュレーションモデルを生成する生成工程と、
を実行させることを特徴とする検証支援プログラム。
【請求項６】
前記生成工程によって生成されたシミュレーションモデルを利用して、前記非同期箇所のシミュレーションを実行する実行工程と、
前記実行工程による前記シミュレーションの実行結果を出力する出力工程と、
を前記コンピュータに実行させることを特徴とする請求項５に記載の検証支援プログラム。
【請求項７】
検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所における受信側の１クロックサイクルの間に、送信側の各回路素子から出力された信号の変化を検出する検出手段と、
前記１クロックサイクル後の前記受信側の動作クロックの立ち上がりを契機に、前記検出手段によって信号の変化が検出された時刻の中のいずれか１つの時刻に前記検出手段によって変化が検出された信号をランダムな論理値に置き換えて前記受信側の各回路素子へ入力し、前記いずれか１つの時刻に前記検出手段によって変化が検出されなかった信号を前記受信側の各回路素子へ入力する入力手段と、
前記入力手段による入力に応じた前記受信側の各回路素子の動作結果を出力する出力手段と、
を備えることを特徴とする検証支援装置。
【請求項８】
検出手段と入力手段と出力手段とを備えたコンピュータが、
前記検出手段において、検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所における受信側の１クロックサイクルの間に、送信側の各回路素子から出力された信号の変化を検出する検出工程と、
前記入力手段において、前記１クロックサイクル後の前記受信側の動作クロックの立ち上がりを契機に、前記検出工程によって信号の変化が検出された時刻の中のいずれか１つの時刻に前記検出工程によって変化が検出された信号をランダムな論理値に置き換えて前記受信側の各回路素子へ入力し、前記いずれか１つの時刻に前記検出工程によって変化が検出されなかった信号を前記受信側の各回路素子へ入力する入力工程と、
前記出力手段において、前記入力工程による入力に応じた前記受信側の各回路素子の動作結果を出力する出力工程と、
を実行することを特徴とする検証支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、検証対象回路の論理検証を支援する検証支援プログラム、検証支援装置および検証支援方法に関する。
【背景技術】
【０００２】
従来より、独立したクロックソースを持つ回路ブロック間の信号の受け渡しが発生するクロックドメイン・クロッシング（Ｃｌｏｃｋ  Ｄｏｍａｉｎ  Ｃｒｏｓｓｉｎｇ：以下「ＣＤＣ」と呼ぶ）を含む場合、クロックドメインの違いを考慮した検証が必要になる。すなわち、クロックサイクルの異なる回路間で受け渡された信号によって受信側の回路ブロックが正常に動作するのかを検証しなければならない。
【０００３】
特に、近年では、回路の高集積化により、１つの検証対象回路内に、数千のＣＤＣを含む論理設計も珍しくない。ＣＤＣによって、非同期となる箇所では、受信側の回路ブロックにおけるセットアップタイム違反や、ホールドタイム違反などによるメタステーブル状態の発生が避けられない。したがって、あらかじめ、メタステーブル状態が発生しても誤動作を起こさないかを検証する必要がある。
【０００４】
そこで、ＣＤＣ間での信号の受け渡しの仕組みに関する検証を行う手段として、異なるクロックドメインから受信した信号のランダム性を論理シミュレーションの中で模擬する「ＣＤＣシミュレーション」に関する技術が開示されている。たとえば、ＣＤＣの送信側の各回路素子から出力された出力信号を検出すると、任意の値のジッタを所定時間、発生させて受信側の回路素子へ入力する検証支援装置が開示されている（たとえば、下記特許文献１〜３参照。）。ジッタの入力によって、ＣＤＣ間の信号の受け渡しによるメタステーブル状態の発生が擬似的に再現される。すなわち、メタステーブル状態が発生した場合にＣＤＣの受信側の回路素子が正しく動作するかを検証することができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００９−１８７１１９号公報
【特許文献２】特開２００９−１８７３４４号公報
【特許文献３】特開２００９−９３６３５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来技術の場合、ＣＤＣの送信側の動作クロックの周期が、受信側の動作クロックの周期よりも短い場合に検証漏れが起こりやすいという問題があった。たとえば、受信側の動作クロックの１サイクルの間に、送信側の動作クロックが複数サイクル実行され、複数の出力信号が出力されることがある。上述のような場合、受信側の動作クロックが立ち上がる直前に送信側の回路素子から出力された出力信号に基づいたジッタのみが受信側の各回路素子へ入力されることになる。
【０００７】
すなわち、受信側の動作クロックの立ち上がりの直前に送信側から出力された出力信号以外の信号の変化は受信側の回路素子に反映されない。結果として、メタステーブル状態の発生例の検証内容に漏れが生じてしまい、検証効率が低くなってしまうという問題がある。
【０００８】
また、上述のように、送信側の回路素子から出力される出力信号のうち、様々なタイミングで出力された出力信号がそれぞれ受信側の回路素子の動作にどのような影響を与えるかを検証するには、各タイミングで出力された出力信号の影響が反映されるまでＣＤＣシミュレーションを繰り返す必要がある。このため、多くのシミュレーション回数が必要となり、論理検証にかかる作業負担および作業時間が増大化し、ひいては設計期間の長期化を招くという問題がある。
【０００９】
１つの側面では、本発明は検証漏れの少ない効率的な検証の実現を支援する検証支援プログラム、検証支援装置および検証支援方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
１つの案では、本検証支援プログラム、検証支援装置および検証支援方法は、検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所における受信側の１クロックサイクルの間に、送信側の各回路素子から出力された信号の変化を検出し、前記１クロックサイクル後の前記受信側の動作クロックの立ち上がりを契機に、信号の変化が検出された時刻の中のいずれか１つの時刻に変化が検出された信号をランダムな論理値に置き換えて前記受信側の各回路素子へ入力し、前記いずれか１つの時刻に変化が検出されなかった信号を前記受信側の各回路素子へ入力し、入力に応じた前記受信側の各回路素子の動作結果を出力する。
【発明の効果】
【００１１】
本検証支援プログラム、検証支援装置および検証支援方法によれば、検証漏れの少ない効率的な検証の実現を支援することができるという効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】本実施の形態にかかる検証支援処理の一例を示す説明図である。
【図２】ＣＤＣ信号とメタステーブル状態との関係を示す説明図である。
【図３】従来の論理シミュレーションの一例を示す説明図である。
【図４】従来のＣＤＣシミュレーションの一例を示す説明図である。
【図５】ＣＤＣジッタの発生例を示すタイミングチャートである。
【図６】一定時間Ｔｊが短い場合の動作例を示すタイミングチャートである。
【図７】一定時間Ｔｊが長い場合の動作例を示すタイミングチャートである。
【図８】本実施の形態にかかる検証支援処理を利用した場合の信号伝播例を示すタイミングチャートである。
【図９】検証支援装置のハードウェア構成を示すブロック図である。
【図１０−１】検証支援装置の機能的構成（その１）を示すブロック図である。
【図１０−２】検証支援装置の機能的構成（その２）を示すブロック図である。
【図１１−１】検証支援装置による検証支援処理の手順（その１）を示すフローチャートである。
【図１１−２】検証支援装置による検証支援処理の手順（その２）を示すフローチャートである。
【図１２】従来のシミュレーションモデルの構成例（その１）を示す回路図である。
【図１３】従来のシミュレーションモデルの構成例（その２）を示す回路図である。
【図１４】本実施例にかかるシミュレーションモデル１の構成を示す回路図である。
【図１５】本実施例にかかるシミュレーションモデル２の構成を示す回路図である。
【図１６】ジッタディテクタの出力処理の手順を示すフローチャートである。
【図１７】ジッタエンコーダの出力処理の手順を示すフローチャートである。
【図１８】ジッタデコーダの出力処理の手順を示すフローチャートである。
【図１９】ジッタサンプラの入力値に応じたイベント発生処理の手順を示すフローチャートである。
【図２０】ジッタサンプラの受信クロックに応じたイベント発生処理の手順を示すフローチャートである。
【図２１】シミュレーションモデル１の動作例を示すタイミングチャートである。
【図２２】シミュレーションモデル２の動作例を示すタイミングチャートである。
【発明を実施するための形態】
【００１３】
以下に添付図面を参照して、この発明にかかる検証支援プログラム、検証支援装置および検証支援方法の好適な実施の形態を詳細に説明する。
【００１４】
図１は、本実施の形態にかかる検証支援処理の一例を示す説明図である。本実施の形態では、クロックドメイン・クロッシングを含む論理設計に対する検証品質および検証効率の向上を図る手法の一例について説明する。上述したように、ＣＤＣ（クロックドメイン・クロッシング）とは、異なる動作クロックが設定されたクロックドメイン間でデータ信号が受け渡されることによって、動作クロックの乗り換えが起こることである。なお、以下の説明では、ＣＤＣの起こる箇所を非同期箇所という。
【００１５】
また、本実施の形態にかかる検証支援処理は、たとえば、図１に例示した検証支援装置１００を利用してＣＤＣの信号の受け渡しで回路素子が正常に動作するかを検証する。具体的には、検証支援装置１００は、論理シミュレータ１１０によるＣＤＣシミュレーションによってメタステーブル状態の検証を行うことができる。
【００１６】
論理シミュレータ１１０では、検証対象回路の回路情報１０１を受け付けると、ソフトウェアによって検証対象回路を構成する。論理シミュレータ１１０によって構成された検証対象回路にはテストパターンが入力され、入力に応じた動作結果１０２が出力される。利用者は、論理設計通りの動作結果１０２を得られたか否かに基づいて、検証対象回路のバグの有無を検証する。
【００１７】
検証支援装置１００の場合、ＣＤＣに相当する回路ブロック間の動作クロックが同期していない非同期箇所については、メタステーブル状態が発生しても正しく動作できるかを検証する必要がある。したがって、検証支援装置１００は、ＣＤＣの検証に特化したＣＤＣ検証支援機能を備えている。
【００１８】
たとえば、図１の場合、検証対象回路に含まれている回路ブロック１〜４のうち、回路ブロック２と回路ブロック３との間は動作クロックが異なるため、非同期箇所となる。したがって、検証支援装置１００は、動作クロックが共通の同期箇所については、論理シミュレータ１１０によって通常のシミュレーションを実行し、非同期箇所についてはＣＤＣ検証支援機能を利用してメタステーブル状態の検証を行う。
【００１９】
（ＣＤＣ信号とメタステーブル状態との関係）
図２は、ＣＤＣ信号とメタステーブル状態との関係を示す説明図である。非同期箇所でデータを転送する場合、受信側のクロックドメインでは入力信号が非同期信号となるため、様々な問題が発生する可能性がある。また、非同期箇所におけるデータ信号の受け渡しが正常に行われなければ、その非同期箇所よりも後段の処理に障害が発生してしまう場合がある。
【００２０】
したがって、論理設計の段階において、非同期箇所の動作を検証してデータ信号の受け渡しが正常に行われているかどうかを確認することが望ましい。なぜなら、できる限り早い段階で非同期箇所に潜む問題を把握し、適切な回路修正を行うことが設計期間の短縮化につながるからである。
【００２１】
そこで、図２を用いて、非同期箇所におけるＣＤＣ信号とメタステーブル状態との関係について説明する。ＣＤＣ信号とは、動作クロックが異なる回路ブロック間で転送される信号を意味する。図２のように前段の回路ブロック２１０は、ＦＦ１を備え、後段の回路ブロック２２０はＦＦ２と、ＦＦ３とを備えている。そして、回路ブロック２１０と回路ブロック２２０とは、周期の異なるクロックドメインによって動作する。したがって、図２の場合では、回路ブロック２１０のＦＦ１から回路ブロック２２０のＦＦ２へ入力される信号がＣＤＣ信号となる。
【００２２】
一般的に、ＦＦなどデジタル信号を扱う回路には、セットアップタイムやホールドタイムなどの制約が設けられている。セットアップタイムとは、入力された信号を確実に取り込むため、入力信号の状態を継続する必要のある時間である。また、ホールドタイムとは、出力した信号を確実に出力先の回路素子へ伝播させるために、出力信号の状態を継続する時間である。
【００２３】
ところが、ＣＤＣ信号の場合、図２のように、クロックサイクルの違いによって、セットアップタイム違反や、ホールドタイム違反が起こってしまうことが多い。セットアップタイム違反や、ホールドタイム違反が起こると、ＣＤＣ信号の伝播が不確実になり、図２のＦＦ２の出力信号Ｓ２のように、信号の値が不安定なメタステーブル状態が発生してしまう。
【００２４】
しかしながら、ＣＤＣの構成上、セットアップタイム違反や、ホールドタイム違反は避けられない。そこで、ＣＤＣを含む回路の場合、メタステーブル状態が発生しても誤動作が起こらないかを検証しておく必要がある。また、検証によって誤動作が発生する箇所を見つけた場合には、設計を変更して、誤動作を回避することができる。
【００２５】
図３は、従来の論理シミュレーションの一例を示す説明図である。また、図４は、従来のＣＤＣシミュレーションの一例を示す説明図である。従来の論理シミュレーションの場合、図３に例示したシミュレーションモデル３００のように、回路構成をそのままソフトウェア的に構成している。シミュレーションモデル３００の各回路素子の動作内容は、タイミングチャート３１０のように、メタステーブル状態が発生することなく、誤動作の有無を検証することができない。
【００２６】
一方、図４のようにＣＤＣシミュレーションの場合、ＣＤＣによるメタステーブル状態の発生を再現するために、シミュレーションモデル４００のように、実際の回路素子（図４の場合はＦＦ２）に換わって、メタステーブル状態の発生を再現するＣＤＣモデルを含んだ構成になっている。ＣＤＣモデルは、タイミングチャート４１０に示したように、上段のＦＦ１からの入力信号Ｓ１に応じて、１サイクル分のランダムな論理値（ＣＤＣジッタ）を出力して、メタステーブル状態を再現する。
【００２７】
図５は、ＣＤＣジッタの発生例を示すタイミングチャートである。たとえば、シミュレーションモデル５００のような回路について検証したい。シミュレーションモデル５００は、送信側のＦＦ５０１と、受信側のＦＦ５０２とのクロックドメインが異なっている。したがって、送信側のＦＦ５０１の出力信号Ｄの変化を観測して、受信側のＦＦ５０２からの出力信号ＱとしてＣＤＣジッタを発生させる。
【００２８】
なお、実際にＣＤＣジッタを発生させるためには、図４に例示したように、受信側のＦＦ５０２に換わって、ＣＤＣモデルを用意する必要がある。しかしながら、図５のでは、検証対象回路の構成が明確になるように、便宜上、ＣＤＣモデルに置き換える前の検証対処回路の構成を示している。具体的には、図５のタイミングチャートに示しているように、送信側のＦＦ５０１の出力信号Ｄの変化を観測してから、一定時間Ｔｊ以内に受信側のクロックイベントが発生した場合に受信側のＦＦ５０２の出力信号ＱにＣＤＣジッタを発生させる。クロックイベントの発生とは、受信側のＦＦ５０２の動作クロックの立ち上がりに起因した受信側のＦＦ５０２の動作が開始された状態を意味する。
【００２９】
上述したように、従来のＣＤＣモデルでは、送信側のＦＦから出力される信号の変化の後、一定時間Ｔｊ以内に、受信側のＦＦにクロックイベントが発生するか否かが、ＣＤＣジッタ生成のトリガとなっている。すなわち、適切なタイミングでＣＤＣジッタを発生させるには、一定時間Ｔｊの設定が重要になる。ところが、送信側のクロックドメインと受信側のクロックドメインとの動作クロックの違いによっては、適切にＣＤＣジッタを発生させるような一定時間Ｔｊの設定が困難な場合があった。
【００３０】
図６は、一定時間Ｔｊが短い場合の動作例を示すタイミングチャートである。図６のように、受信側の動作クロックの周期Ｔｒと比較して一定時間Ｔｊを小さく設定すると、ＣＤＣジッタの発生確率が低下してしまう。すなわち、受信側の動作クロックの周期Ｔｒが比較的長いため、一定時間Ｔｊの間に、受信側の動作クロックの立ち上がりが起こらない可能性が高い。
【００３１】
すなわち、ＣＤＣジッタの発生確率が低下してしまう。実際には送信側のＦＦ５０１からの出力信号Ｄに変化が生じており、受信側のＦＦ５０２からの出力がメタステーブル状態を起こす可能性があるにもかかわらず、動作内容を検証できない。結果として、検証効率の低下を招いてしまう。
【００３２】
図７は、一定時間Ｔｊが長い場合の動作例を示すタイミングチャートである。一定時間Ｔｊの設定は、受信側の動作クロックの周期だけでなく、送信側の動作クロックの周期も、考慮しなければならない。図７のように、送信側の動作クロックの周期Ｔｓより一定時間Ｔｊを大きく設定すると、実際には起こりえないビットパターンが起こってしまう。
【００３３】
具体的には、図７のように、一定時間Ｔｊが、送信側の動作クロックより大きい長さに設定されると、複数の動作クロックのタイミングで出力された信号の変化を１つの動作クロックのタイミングで出力された信号として誤って判断されてしまう可能性がある。
【００３４】
図７のシミュレーションモデル７００のように、送信側の回路素子としてＦＦ７０１，７０３を備え、受信側の回路素子としてＦＦ７０２，７０４を備えるような、複数の回路素子が用意されている回路の場合には、動作に制約が設けられていることが多い。図７のシミュレーションモデル７００であれば、たとえば、受信側のＦＦ７０２，７０４それぞれから同時に出力されないような制約が設けられている。したがって、実際の回路の動作では、（ＱＡ，ＱＢ）＝（１，１）というパターンは起こりえない。
【００３５】
ところが、シミュレーションモデル７００の場合、一定時間Ｔｊが、送信側の動作クロック（ＣＬＫ１）と比較して長く設定されている。結果として、開始タイミングの異なる複数の一定時間Ｔｊに重なりが生じ、その間に受信側のクロックイベントが発生してしまうことがあった。図７のタイミングチャートでは、一定時間Ｔｊが長く設定されており、送信側のＦＦ７０１からの出力信号ＤＡの変化と、ＦＦ７０３からの出力信号ＤＢの変化とがそれぞれ受信側のＦＦ７０２，７０４におけるＣＤＣジッタの出力を起こしてしまっている。上述したように、（ＱＡ，ＱＢ）＝（１，１）というパターンは起こりえないが、ＱＡとＱＢとが同時に出力状態となってしまい、各回路素子の動作を適切に検証できない。
【００３６】
また、（ＱＡ，ＱＢ）＝（１，１）というパターンが起こらないように、受信側の動作クロックの立ち上がりの直前に検出した信号のみを対象としてＣＤＣジッタを発生させるように設定してもよいが、複数の出力信号のうち、一部の出力信号のみが検証されることになってしまう。たとえば、図７の場合であれば、送信側のＦＦ７０３からの出力信号ＤＢによって発生するメタステーブル状態のみが検証されることになってしまう、結果として、検証内容に偏りが生まれ、検証漏れを起こしてしまう。
【００３７】
以上説明したように、ＣＤＣモデルを挿入する場合、一定時間Ｔｊ＜受信側の動作クロックの周期Ｔｒとなると、検証効率が低下し、送信側の動作クロックの周期Ｔｓ＜一定時間Ｔｊのとき誤動作が発生してしまう。したがって、送信側の動作クロックの周期Ｔｓが受信側の動作クロックの周期Ｔｒよりも短いＣＤＣの場合、上述の問題を解消できるような一定時間Ｔｊの設定が存在しない。結果として、Ｔｓ＜ＴｒのようなＣＤＣについては、ＣＤＣモデルを利用しても網羅的な検証が行えないという問題があった。
【００３８】
そこで、本実施の形態にかかる検証支援処理では、受信クロックの立ち上がり時刻を仮想的にずらすことで、他のタイミングの送信信号変化が受信値に影響するケースも効率良くテストできるようにする。具体的には、ＣＤＣの送信側の回路素子と受信側の回路素子のうち、互いに関連のある複数の送信信号をグループ化しておく。そして、グループ単位で送信側の各回路素子から出力される出力信号の変化を観測し、観測された信号変化時刻の中のいずれか一つを仮想的にずらされた受信クロックの立ち上がり時刻として設定する。どの信号変化時刻を選択するかはランダムに決定するため、偏りのない効率的な検証が可能になる。
【００３９】
図１の説明に戻り、検証支援装置１００が上述した検証を行う場合について説明する。図１では、上述したように、回路ブロック２（クロックドメインＡ）から回路ブロック３（クロックドメインＢ）への信号の伝播がＣＤＣに相当する。従来のＣＤＣシミュレーションでは、回路ブロック２と回路ブロック３との間にＣＤＣモデルを挿入してメタステーブル状態を発生させていた。
【００４０】
しかしながら、検証支援装置１００では、回路ブロック２からの出力信号に応じて、回路ブロック３に対してメタステーブル状態を起こすＣＤＣ検証支援機能が設けられている。ＣＤＣ検証支援機能では、まず、クロックドメインＢのクロックサイクル毎に、回路ブロック２からの出力信号変化を観測する。１回以上の出力信号変化があった場合にはその変化時刻のいずれか一つをランダムに選択し、その時の出力信号値をサンプリングする（ステップＳ１１１）。
【００４１】
次に、ＣＤＣ検証支援機能は、ステップＳ１１１のサンプリング結果からその時刻に値変化のあった信号（回路ブロック２からの出力信号）の値をランダムな論理値に置換した後、クロックドメインＢの動作クロックの立ち上がりに合わせて、回路ブロック３へ入力する（ステップＳ１１２）。すなわち、ステップＳ１１２では、回路ブロック２から出力された出力信号の中でサンプリング時刻に値変化があったものをランダムな論理値に置き換えて入力することによって、回路ブロック３にＤＣＤジッタを発生させることができる。
【００４２】
従来のＣＤＣシミュレーションであれば、送信側の回路素子からの出力信号が変化した後、一定時間Ｔｊの間に受信側のクロックイベントが起こったときだけ、ＣＤＣジッタを発生させていた。しかしながら、本実施の形態にかかる検証支援装置１００の場合には、送信側の回路素子からの出力信号を受信側の動作クロックの１クロックサイクルの間、観測する。そして、観測によって得られた出力信号変化時刻の中のいずれか一つをサンプリング時刻として、受信側の回路素子へ入力することによって、一定時間Ｔｊに関係なく広範囲の出力信号変化に対応するＣＤＣジッタを発生させる。
【００４３】
図８は、本実施の形態にかかる検証支援処理を利用した場合の信号伝播例を示すタイミングチャートである。図８のタイミングチャートは、シミュレーションモデル７００のような構成の場合、受信側の動作クロックＣＬＫ２の１クロックサイクルの間に、ＤＡの変化とＤＢの変化の２つの出力信号変化が観測されている。したがって、そのいずれか一方の信号変化の影響を選択して、後段の回路素子へ伝播する。
【００４４】
たとえば、選択例８１０の場合、ＣＬＫ１のサイクル２にＤＡから出力された出力信号を利用して、受信側の回路素子へ入力している。ＤＡに対応する受信側のＦＦ出力ＱＡに、ランダムな論理値が入力される。また、選択例８２０の場合、ＣＬＫ１のサイクル３にＤＢから出力された出力信号を利用して、受信側の回路素子へ入力している。ＤＢに対応する受信側のＦＦ出力ＱＢに、ランダムな論理値が入力される。
【００４５】
図８のように、選択例８１０の場合も、選択例８２０の場合も、信号変化時刻の一方だけを採用しているため、（ＱＡ，ＱＢ）＝（１，１）となる制約違反を回避することができる。また、受信側のクロックサイクルの周期の間、ＣＤＣ信号を観測し続けるため、ＣＤＣ信号の変化の検出漏れを抑えることができる。以上説明したように、本実施の形態にかかる検証支援装置１００を利用することによって、ＣＤＣを含む論理設計であっても、検証漏れの少ない効率的な検証の実現を支援することができる。
【００４６】
以下に、上述したような本実施の形態にかかる検証支援処理を実現する、検証支援装置１００の具体的な構成例や処理内容について、詳しく説明する。
【００４７】
（検証支援装置のハードウェア構成）
図９は、検証支援装置のハードウェア構成を示すブロック図である。図９において、検証支援装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）９０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）９０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９０３と、磁気ディスクドライブ９０４と、磁気ディスク９０５と、光ディスクドライブ９０６と、光ディスク９０７と、ディスプレイ９０８と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）９０９と、キーボード９１０と、マウス９１１と、スキャナ９１２と、プリンタ９１３と、を備えている。また、各構成部はバス９００によってそれぞれ接続されている。
【００４８】
ここで、ＣＰＵ９０１は、検証支援装置１００の全体の制御を司る。ＲＯＭ９０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ９０３は、ＣＰＵ９０１のワークエリアとして使用される。磁気ディスクドライブ９０４は、ＣＰＵ９０１の制御にしたがって磁気ディスク９０５に対するデータのリード／ライトを制御する。磁気ディスク９０５は、磁気ディスクドライブ９０４の制御で書き込まれたデータを記憶する。
【００４９】
光ディスクドライブ９０６は、ＣＰＵ９０１の制御にしたがって光ディスク９０７に対するデータのリード／ライトを制御する。光ディスク９０７は、光ディスクドライブ９０６の制御で書き込まれたデータを記憶したり、光ディスク９０７に記憶されたデータをコンピュータに読み取らせたりする。
【００５０】
ディスプレイ９０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ９０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００５１】
インターフェース（以下、「Ｉ／Ｆ」と略する。）９０９は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク９１４に接続され、このネットワーク９１４を介して他の装置に接続される。そして、Ｉ／Ｆ９０９は、ネットワーク９１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ９０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００５２】
キーボード９１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス９１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００５３】
スキャナ９１２は、画像を光学的に読み取り、検証支援装置１００内に検証対象回路に関連する画像データや、検証処理に関連する画像データを取り込む。なお、スキャナ９１２は、ＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅａｄｅｒ）機能を持たせてもよい。また、プリンタ９１３は、画像データや文書データを印刷する。プリンタ９１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００５４】
（検証支援装置の機能的構成）
図１０−１は、検証支援装置の機能的構成（その１）を示すブロック図である。検証支援装置１００は、受付部１００１と、検出部１００２と、入力部１００３と、出力部１００４と、抽出部１００５と、指定部１００６と、非同期箇所のＣＤＣシミュレーションを行う論理シミュレータ１１０と、を含む構成である。
【００５５】
上述の制御部となる機能（受付部１００１〜指定部１００６）は、具体的には、たとえば、図９に示したＲＯＭ９０２、ＲＡＭ９０３、磁気ディスク９０５、光ディスク９０７などの記憶装置に記憶されたプログラムをＣＰＵ９０１に実行させることにより、または、Ｉ／Ｆ９０９により、その機能を実現する。また、論理シミュレータ１１０は、回路情報１０１に記載された回路の構成に基づいて、検証対象回路をソフトウェア上で実現し各回路素子の動作内容をシミュレートすることができる。
【００５６】
受付部１００１は、検証対象となる非同期箇所（ＣＤＣ発生箇所）の指定を受け付ける機能を有する。具体的には、受付部１００１は、検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所の指定を受け付ける。非同期箇所とは、検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する箇所を意味する。非同期箇所は、利用者もしくは上位プログラムからの指定情報１０００を受け付けることによって指定される。なお、受け付けた非同期箇所は、ＲＡＭ９０３、磁気ディスク９０５、光ディスク９０７などの記憶領域に記憶される。
【００５７】
検出部１００２は、論理シミュレータ１１０によって実行された検証対象回路（シミュレーションモデル）の動作を観測し、所定期間ごとに、送信側の回路素子からの出力信号の変化を検出する機能を有する。具体的には、検出部１００２は、受付部１００１によって受け付けた非同期箇所における受信側の１クロックサイクルの間に、論理シミュレータ１１０の送信側の各回路素子から出力された信号がどの時刻で変化したかを検出する。
【００５８】
なお、検出結果は、ＲＡＭ９０３、磁気ディスク９０５、光ディスク９０７などの記憶領域に記憶される。なお、検出部１００２による検出結果は、後述する入力部１００３によって受信側の回路素子へのサンプリング値の入力に利用された後は、リセットされ、次の１クロックサイクルを対象とした出力信号の検出処理に移行する。
【００５９】
入力部１００３は、検出部１００２による検出結果に基づいて、論理シミュレータ１１０の受信側の各回路素子へサンプリング値を入力する機能を有する。具体的には、入力部１００３は、検出部１００２による検出対象となった１クロックサイクルが経過した後の受信側の動作クロックの立ち上がりを契機に入力処理を行う。
【００６０】
入力処理の際に、入力部１００３は、検出部１００２によって１クロックサイクルの間に出力信号の変化が検出された時刻の中のいずれか１つの時刻をサンプリング時刻とし、サンプリング時刻に、出力信号の値をランダムな論理値に置換した後に、受信側の各回路素子へ入力する。
【００６１】
すなわち、送信側の回路素子として素子１，２がある場合、検出部１００２では、素子１からの出力信号の変化と素子２からの出力信号の変化とがそれぞれ検出される。そして、入力部１００３は、検出部１００２が出力信号の変化を検出した時刻の中のいずれか１つの時刻を選択して、選択結果に応じて出力信号の値をそのまま、もしくは、ランダムな論理値に変換して後段の各回路素子（ここでは、受信側の各回路素子）へ入力する。
【００６２】
たとえば、入力部１００３によって、素子１からの出力信号の変化が検出された時刻Ｔを選択した場合、当然のことながら時刻Ｔにおける素子１からの出力信号は変化している。したがって、入力部１００３は、素子１からの出力信号をランダムな論理値に置き換えて対応する受信側の各回路素子へ入力する。また、時刻Ｔにおける素子２からの出力信号は変化していない。したがって、入力部１００３は、素子２からの出力信号の値をそのまま対応する受信側の各回路素子へ入力する。
【００６３】
ここで、受信側の１クロックサイクル中に検出部１００２によって検出された信号変化を全て記録した後にサンプリングを実行しても良いが、信号変化を観測する毎に確率的に再サンプリングを実行してサンプリング値を更新しても良い。このとき、Ｎ回目の信号変化では１／Ｎの確率で再サンプリングを実行するように構成すれば偏りのないサンプリング結果が得られる。
【００６４】
また、入力部１００３は、メタステーブル状態の発生時間に相当する所定時間の間、ランダムな論理値を継続して出力することもできる。なお、入力内容は、ＲＡＭ９０３、磁気ディスク９０５、光ディスク９０７などの記憶領域に記憶される。
【００６５】
出力部１００４は、受信側の回路素子の動作結果１０２を出力する機能を有する。論理シミュレータ１１０は、入力部１００３からのランダムな論理値の入力によって、非同期箇所の受信側の各回路素子にメタステーブル状態が発生した場合と同等の振る舞いが起こっている。
【００６６】
したがって、出力部１００４は、メタステーブル状態が発生した場合の受信側の回路素子の動作結果１０２を出力していることになる。出力形式としては、たとえば、ディスプレイ９０８への表示、プリンタ９１３への印刷出力、Ｉ／Ｆ９０９による外部装置への送信がある。また、ＲＡＭ９０３、磁気ディスク９０５、光ディスク９０７などの記憶領域に記憶することとしてもよい。
【００６７】
検証支援装置１００の利用者は、出力部１００４から出力された動作結果１０２が設計内容に準拠しているかを判断することによって、メタステーブル状態が発生しても非同期箇所の受信側の回路素子が正しく動作しているか検証することができる。検証によって、受信側の回路素子が正しく動作していることがわかった場合には、そのまま後段の製造工程に移行することができる。
【００６８】
一方、受信側の回路素子が正しく動作していないとわかった場合には、設計内容を見直して、正しく動作する確認がとれるまで、検証を繰り返せばよい。上述のように、検証対象回路の非同期箇所の動作を漏れなく検証することによって、後段の製造工程によって誤動作が起こり、手戻りするような事態を回避することができる。
【００６９】
また、検証支援装置１００は、後述する抽出部１００５および指定部１００６を備えることによって、検証箇所の絞り込みを可能にすることができる。したがって、利用者にとって、より利用し易い検証支援装置１００を実現することができる。
【００７０】
抽出部１００５は、検証対象回路の中から非同期箇所を抽出する機能を有する。具体的には、抽出部１００５は、検証対象回路の回路情報１０１に記述された回路設計に基づいて、検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所を抽出する。抽出部１００５によって、非同期箇所が抽出された場合、検出部１００２は、抽出部１００５によって抽出された非同期箇所の送信側の各回路素子を対象に、出力信号を検出する。なお、抽出結果は、ＲＡＭ９０３、磁気ディスク９０５、光ディスク９０７などの記憶領域に記憶される。
【００７１】
上述のように、抽出部１００５によって非同期箇所を自動的に抽出する機能を備えることによって、検証支援装置１００の利用者の検証の習熟度にかかわらず、ＣＤＣの発生する箇所を効率的に検証することができる。
【００７２】
指定部１００６は、非同期箇所の中から、送信側の回路素子の指定と、受信側の回路素子の指定とを受け付ける機能を有する。指定部１００６によって指定を受け付けた場合、検出部１００２は、送信側の回路素子の内、指定された回路素子から出力される出力信号の変化を検出する。また、入力部１００３も、指定された回路素子へ信号値を入力する。回路素子は、利用者や上位システムからの指定情報１０００を受け付けることによって指定される。
【００７３】
上述のように、指定部１００６によって回路素子を指定することによって、検証支援装置１００は、指定された素子に限定して動作結果１０２を得ることができる。なお、回路素子の指定対象となる非同期箇所は、受付部１００１によって受け付けた非同期箇所であってもよいし、抽出部１００５によって抽出された非同期箇所であってもよい。なお、指定結果は、ＲＡＭ９０３、磁気ディスク９０５、光ディスク９０７などの記憶領域に記憶される。
【００７４】
図１０−１に例示した検証支援装置１００の場合、検出部１００２によって非同期箇所の送信側の回路素子からの出力信号の変化を検出した検出結果の中から、ランダムに１つを選択する。そして、入力部１００３によって、選択された検出結果の値をランダムな論理値に置換して対応する受信側の回路素子へ入力することによって、メタステーブル状態に受信側の回路素子が正常に動作するかを検証することができる。
【００７５】
図１０−２は、検証支援装置の機能的構成（その２）を示すブロック図である。図１０−２に示した検証支援装置１００は、本実施の形態にかかる検証支援処理を実現するための他の機能部の構成例を示している。図１０−２に示した検証支援装置１００の場合、検出部１００２および入力部１００３に替わってシミュレーションモデル生成部１０１０を備えた構成になっている。すなわち、シミュレーションモデル生成部１０１０は、検出部１００２および入力部１００３に相当の機能を実現する回路のシミュレーションモデルを生成する機能を有している。
【００７６】
シミュレーションモデル生成部１０１０では、図１０−１にて説明した検出部１００２と入力部１００３との機能を実現する素子を検証対象回路の非同期箇所に挿入したシミュレーションモデルを生成する。具体的には、あらかじめ各種メモリなどの記憶装置に記憶された第１〜３の素子の設計情報を読み出して、非同期箇所の送信側の各回路素子と受信側の各回路素子との間に設定することによってシミュレーションモデルが生成される。
【００７７】
第１の素子は、前段から出力された信号の変化を検出する機能を有した素子である。また、第２の素子は、第１の素子によって信号の変化が検出された時刻に前段から出力された信号の値を保持する機能を有した素子である。そして、第３の素子は、後段の動作クロックの立ち上がりを契機に第１の素子によって信号の変化が検出された時刻の中のいずれか１つの時刻に第２の素子に保持された値を後段に入力する機能を有した素子である。また第３の素子は、第１の素子によって変化が検出された値をランダムな論理値に置き換えて後段に入力する機能も有している。
【００７８】
したがって、シミュレーションモデル生成部１０１０では、抽出部１００５によって、検証対象回路の非同期箇所が抽出されると、まず、特定機能によって、非同期箇所における送信側の各回路素子と、受信側の各回路素子とを特定する。その後、シミュレーションモデル生成部１０１０は、第１の素子の前段に送信側の各回路素子を設定して、第１の素子による送信側の各回路素子からの出力信号の変化の検出を実現する。
【００７９】
また、シミュレーションモデル生成部１０１０は、第３の素子の後段に受信側の各回路素子を設定して第３の素子による入力を実現する。具体的には、第１の素子によって信号の変化が検出されたいずれか１つの時刻に第２の素子に保持された値およびランダムな値を、第３の素子から受信側の各回路素子に入力させる。上述のようにいずれか１つの時刻として選択された時刻に変化した出力信号についてはランダムな論理値、変化していない出力信号についてはそのままの値が入力される。
【００８０】
上述した第１〜３の素子としては、公知の回路素子を利用してもよいし、利用者があらたに設計した回路素子を利用してもよい。後述する実施例１，２では、第１の素子としてジッタサンプラ、第２の素子としてＦＦ、第３の素子としてＦＦに保持した値とランダム値とのいずれかを入力するセレクタが利用されている。
【００８１】
また、シミュレーションモデル生成部１０１０は、従来のＣＤＣモデル生成ツールによって生成されたシミュレーションモデルに、上述したジッタサンプラ、ＦＦなど（後述する実施例１，２の場合、セレクタはＣＤＣモデル生成ツールによって作成される）の回路素子を追加することによって本実施の形態にかかるシミュレーションモデルを生成することができる。ＣＤＣモデル生成ツールは、回路情報１０１に記載された素子同士の接続やクロックドメインの設定に基づいて、ＣＤＣモデルを作成することができる。
【００８２】
また、ジッタサンプラは、検出部１００２相当の処理を実行する回路素子である。そして、ＦＦには、送信側の回路素子からの出力信号の変化についての検出結果が格納される。検出された出力信号の変化は、ジッタサンプラからの指示に応じて、セレクタから上述のように１／Ｎの確率でランダムな論理値として、受信側の回路素子に入力される。ランダムな論理値が入力されることによって、メタステーブル状態に受信側の回路素子が正常に動作するかを検証することができる。
【００８３】
一例としては、従来のＣＤＣモデル生成ツールでは、非同期箇所に、ジッタディテクタと、出力信号に換えてランダムな論理値を生成する入力素子を追加するＣＤＣモデル（たとえば、後述する図１２に例示したＣＤＣモデル）や、非同期箇所に、ジッタエンコーダとジッタデコーダと上述の入力素子とを追加するＣＤＣモデル（たとえば、図１３に例示したＣＤＣモデル）がある。
【００８４】
そして、シミュレーションモデル生成部１０１０は、通常、送信側のすべての回路素子と、受信側のすべての回路素子に上述したようなジッタサンプラ、ＦＦを追加したＣＤＣモデルを生成する。なお、後述する図１４は、非同期箇所に、ジッタディテクタと、入力素子とを追加したＣＤＣモデルに、ジッタサンプラおよびＦＦを追加したシミュレーションモデルの生成例である。また、後述する図１５は、非同期箇所に、ジッタエンコーダと、ジッタデコーダと、入力素子とを追加したＣＤＣモデルにジッタサンプラおよびＦＦを追加したシミュレーションモデルの生成例である。
【００８５】
また、シミュレーションモデル生成部１０１０によって生成されたシミュレーションモデルは、論理シミュレータ１１０によって実行される。すなわち、論理シミュレータ１１０は、シミュレーションモデルの実行部として機能する。論理シミュレータ１１０では、生成されたシミュレーションモデルを実行することによって非同期箇所の動作を再現することができる。また、出力部１００４は、シミュレーションモデル生成部１０１０に接続された場合には、シミュレーションモデルの実行結果を出力する。したがって、論理シミュレータ１１０は、指定された非同期箇所のＣＤＣシミュレーションを実行することができる。
【００８６】
（検証支援処理の手順）
図１１−１は、検証支援装置による検証支援処理の手順（その１）を示すフローチャートである。図１１−１の各処理を実行することによって、メタステーブル状態が発生した場合の受信側の各回路素子の動作をランダムに検証することができる。
【００８７】
図１１−１において、検証支援装置１００は、まず、受付部１００１によって、非同期箇所の指定を受け付けたか否かを判断する（ステップＳ１１１１）。ステップＳ１１１１において、非同期箇所の指定を受け付けた場合（ステップＳ１１１１：Ｙｅｓ）、非同期箇所の動作を検証するためのステップＳ１１１３の処理に移行する。一方、ステップＳ１１１１によって、非同期箇所の指定を受け付けていないと判断された場合（ステップＳ１１１１：Ｎｏ）、検証支援装置１００は、抽出部１００５によって、検証対象回路の中から非同期箇所を抽出する（ステップＳ１１１２）。
【００８８】
上述のように、ステップＳ１１１１もしくはステップＳ１１１２によって非同期箇所が特定されると、次に、検証支援装置１００は、検出部１００２によって、送信信号グループに属する信号の変化を検出する（ステップＳ１１１３）。送信信号グループに属する信号とは、送信側の回路素子からの出力信号を意味する。したがって、検出部１００２は、ステップＳ１１１３によって、出力信号の変化を検出する。
【００８９】
その後、検証支援装置１００は、受信側の動作クロックが立ち上がったか否かを判断する（ステップＳ１１１４）。なお、検証支援装置１００は、受信側の動作クロックが立ち上がるまでステップＳ１１１３の処理に戻り、待機状態となる（ステップＳ１１１４：Ｎｏのループ）。そして、検証支援装置１００は、受信側の動作クロックが立ち上がったと判断すると（ステップＳ１１１４：Ｙｅｓ）、検出部１００２によって、１回以上の変化が検出されたか否かを判断する（ステップＳ１１１５）。
【００９０】
そして、検証支援装置１００は、検出部１００２によって、１回以上の変化が検出された場合（ステップＳ１１１５：Ｙｅｓ）、変化時刻のいずれか一つを選択し（ステップＳ１１１６）、ランダム値もしくは出力信号の値を対応する受信側の回路素子に入力する（ステップＳ１１１７）。ステップＳ１１１７において、ランダム値とは上述したランダムな論理値を意味し、メタステーブル状態の発生を再現することができる。また、受信側の回路素子にランダム値と出力信号の値のいずれを入力するかは、検出部１００２による検出結果によって異なる。
【００９１】
具体的に説明すると、入力部１００３は、ステップＳ１１１６によって選択された選択時刻で出力信号の変化が検出されていれば、ランダム値を対応する受信側の回路素子へ入力する。一方、入力部１００３は、ステップＳ１１１６によって選択された選択時刻に出力信号の変化が検出されていない場合には、出力信号の値をそのまま受信側の回路素子へ入力する。たとえば送信側の回路素子として素子１，２からの出力信号の変化を検出する場合、素子１からの出力信号の変化を検出した時刻が選択された場合、素子２からの出力信号は変化していない。
【００９２】
したがって、ステップＳ１１１６では、素子１からの出力信号が検出された時刻が選択された場合には、素子１からの出力信号をランダムな論理値に置き換えて、対応する受信側の回路素子へ入力する。一方、素子２からの出力信号は、そのままの値を対応する受信側の回路素子へ入力する。
【００９３】
なお、検証支援装置１００は、ステップＳ１１１５において、１回以上の変化が検出されなかった場合（ステップＳ１１１５：Ｎｏ）、受信側の回路素子へなんらかの値を入力する必要はない。したがって検証支援装置１００は、ステップＳ１１１５の処理が終了した後、そのままステップＳ１１１９の処理へ移行する。
【００９４】
ステップＳ１１１７によってランダムな論理値が入力されることによって、受信側の各回路素子にメタステーブル状態と同等の状況を起こすことができる。なお、検証支援装置１００の出力部１００４は、ステップＳ１１１７の入力によって起こった受信側の各回路素子の動作結果１０２を論理シミュレータ１１０から出力する。したがって、メタステーブル状態が発生した場合の動作結果１０２を利用して、論理設計の検証が可能になる。
【００９５】
ステップＳ１１１７の処理の後、検証支援装置１００は、検出部１００２の検出結果を一旦リセットし（ステップＳ１１１８）、上位システムや利用者からの終了指示を受けたか否かを判断する（ステップＳ１１１９）。ステップＳ１１１９において、終了指示を受けていないと判断された場合（ステップＳ１１１９：Ｎｏ）、検証支援装置１００は、ステップＳ１１１３の処理に戻り、引き続き、非同期箇所にてメタステーブル状態が発生した場合の受信側の回路素子についての検証を行う。
【００９６】
その後、ステップＳ１１０９において、終了指示を受けたと判断された場合（ステップＳ１１１９：Ｙｅｓ）、検証支援装置１００は、一連の処理を終了する。利用者は、一連の処理によって検証支援装置１００から出力された動作結果１０２を参照して、非同期箇所が正しく動作するかを検証することができる。
【００９７】
図１１−２は、検証支援装置による検証支援処理の手順（その２）を示すフローチャートである。図１１−２に示した各処理を実行することによって、論理シミュレータ１１０に、指定した非同期箇所（指定情報１０００によって指定された非同期箇所）についてのＣＤＣシミュレーションを実行させることができる。
【００９８】
図１１−２において、検証支援装置１００は、まず、受付部１００１によって、非同期箇所の指定を受け付けたか否かを判断する（ステップＳ１１２１）。ステップＳ１１２１において、非同期箇所の指定を受け付けた場合（ステップＳ１１２１：Ｙｅｓ）、非同期箇所の動作を検証するためのステップＳ１１２３の処理に移行する。一方、ステップＳ１１２１によって、非同期箇所の指定を受け付けていないと判断された場合（ステップＳ１１２１：Ｎｏ）、検証支援装置１００は、抽出部１００５によって、検証対象回路の中から非同期箇所を抽出する（ステップＳ１１２２）。
【００９９】
次に、検証支援装置１００は、シミュレーションモデル生成部１０１０によってＣＤＣシミュレーションモデルを生成する（ステップＳ１１２３）。その後、検証支援装置１００は、論理シミュレータ１１０によって生成されたＣＤＣシミュレーションモデルを利用して、非同期箇所についてのＣＤＣシミュレーションを実行して（ステップＳ１１２４）、一連の処理を終了する。
【０１００】
以上説明したように、図１０−２にて説明した検証支援装置１００は、ＣＤＣシミュレーションモデルを生成して論理シミュレータ１１０によって実行させることによってＣＤＣシミュレーションの動作結果１０２を得ることができる。以下の説明では、シミュレーションモデル生成部１０１０を備えた検証支援装置１００を利用した場合の具体的なシミュレーションモデルの構成例を説明する。
【０１０１】
（シミュレーションモデルの構成例）
次に、図１０−２のシミュレーションモデル生成部１０１０によって生成したシミュレーションモデルの具体的な構成例を挙げて、検証支援装置１００によるメタステーブル状態の検証支援例について説明する。まず、比較のために、従来のシミュレーションモデルの構成例を挙げる。そして、これらのシミュレーションモデルに図１０−２，１１−２によって説明した処理を実行させる機能を追加した、本実施例にかかるシミュレーションモデルを例示して、その動作について説明する。
【０１０２】
図１２、図１３は、従来のシミュレーションモデルの構成例を示す回路図である。図１２に例示したシミュレーションモデルは、ＣＬＫ１で動作する送信側の回路素子としてＦＦ１２０１，１２０２が備えられている。また、ＣＬＫ２で動作する受信側の回路素子としてＦＦ１２１１，１２１２およびＦＦ１２２１，１２２２とが備えられている。
【０１０３】
また受信側の回路素子には、送信側の回路素子の出力信号を検出するジッタディテクタが備えられている。受信側の回路素子は、ＦＦ１２１１，１２１２およびジッタディテクタによってＣＤＣモデルを構成している。ジッタディテクタによって送信側の回路素子から出力信号が検出されるとＦＦ１２１１，１２１２によってメタステーブル状態が発生され、ＣＤＣの検証に利用される。なお、図１２のＦＦ１２２１，１２２２およびジッタディテクタによって構成されたＣＤＣモデルも同様に動作して、ＣＤＣの検証を支援する。
【０１０４】
また、図１３に例示したシミュレーションモデルは、ＣＬＫ１で動作する送信側の回路素子としてＦＦ１３０１，１３０２が備えられている。また、ＣＬＫ２で動作する受信側の回路素子としてＦＦ１３１１およびＦＦ１３２１が備えられている。また受信側の回路素子には、ジッタエンコーダと、ジッタデコーダとが備えられている。
【０１０５】
受信側の回路素子は、ＦＦ１３１１、ジッタエンコーダおよびジッタデコーダによってＣＤＣモデルを構成している。ジッタエンコーダによって送信側の回路素子からの出力信号の変化が観測されると、ＦＦ１３１１は、ジッタデコーダによってメタステーブル状態に相当するランダムな論理値が出力され、ＣＤＣの検証に利用される。なお、図１３のジッタエンコーダ、ＦＦ１３２１およびジッタデコーダによって構成されたＣＤＣモデルも同様に動作して、ＣＤＣの検証を支援する。
【０１０６】
ところが、図１２，１３のいずれのシミュレーションモデルの場合も、一定時間Ｔｊの設定と、ＣＬＫ１，ＣＬＫ２の周期によっては、検証効率が低下したり、誤動作を起こしたりする可能性があった。そこで、以下には、図１２，１３に例示した非同期箇所を検証支援装置１００によって検証する場合の構成について説明する。
【０１０７】
＜シミュレーションモデル１＞
図１４は、本実施例にかかるシミュレーションモデル１の構成を示す回路図である。回路モデル１４００によって構成されるシミュレーションモデル１は、ＦＦ１４０１，１４０２が図１２の送信側のＦＦに相当し、ＦＦ１４０４，１４０６およびＦＦ１４０８，１４１０が、図１２の受信側のＦＦに相当する。
【０１０８】
そして、シミュレーションモデル１では、送信側の回路素子からの出力信号の変化を検出するために、ＦＦ１４０１，１４０２の後段には、ジッタディテクタ１４１１，１４１２が接続されている。また、シミュレーションモデル１では、出力信号の変化または受信側の動作クロックの立ち上がりを契機にＳＡＭＰＬＥイベントを発生させるジッタサンプラ１４２０が備えられている。さらに、シミュレーションモデル１では、ＳＡＭＰＬＥイベント発生時の信号値を一時的に保持するＦＦ１４０３，１４０５，１４０７，１４０９が備えられている。ジッタディテクタ１４１１，１４１２、ジッタサンプラ１４２０、およびＦＦ１４０３，１４０５，１４０７，１４０９は、図１０−１にて説明した検出部１００２として機能する。
【０１０９】
＜シミュレーションモデル２＞
図１５は、本実施例にかかるシミュレーションモデル２の構成を示す回路図である。回路モデル１５００によって構成されるシミュレーションモデル２は、ＦＦ１５０１，１５０２が図１３の送信側のＦＦに相当し、ＦＦ１５０４およびＦＦ１５０６が、図１３の受信側のＦＦに相当する。
【０１１０】
そして、シミュレーションモデル２では、送信側の回路素子のＦＦ１５０１，１５０２からの出力信号の変化を後段のＦＦに報知するために、ジッタエンコーダ１５１１，１５１２が接続されている。また、シミュレーションモデル２では、出力信号の変化または受信側の動作クロックの立ち上がりを契機にＳＡＭＰＬＥイベントを発生させるジッタサンプラ１５３０が備えられている。
【０１１１】
さらに、シミュレーションモデル２では、ＳＡＭＰＬＥイベント発生時の信号値を一時的に保持するＦＦ１５０３，１５０５が備えられている。ジッタエンコーダ１５１１，１５１２、ジッタサンプラ１５３０、およびＦＦ１５０３，１５０５は、図１０−１にて説明した検出部１００２として機能する。
【０１１２】
また、シミュレーションモデル２では、ジッタデコーダ１５２１，１５２２によって、受信側のＦＦ１５０４，１５０６から出力された出力信号をランダムな論理値に換えて、後段の回路素子へ入力する。なお、ジッタデコーダ１５２１，１５２２は、図１０−１にて説明した入力部１００３として機能する。
【０１１３】
次に、図１４，１５の各回路モデル１４００，１５００内に備えられたジッタディテクタ、ジッタエンコーダ、ジッタデコーダおよびジッタサンプラの出力動作について詳しく説明する。
【０１１４】
＜ジッタディテクタの出力処理＞
図１６は、ジッタディテクタの出力処理の手順を示すフローチャートである。ジッタディテクタは、送信側の回路素子からの出力信号の変化を検出すると、所定時間（具体的にはＴｊ）の間、出力信号の変化を報知する報知信号を出力する機能を有する。
【０１１５】
図１６のフローチャートは、ＣＤＣシミュレーションの実行によって、ジッタディテクタの動作が開始された後、送信側の回路素子の出力信号の変化に応じた報知信号の出力処理を継続するための手順を示している。なお、図１４のジッタディテクタ１４１１，１４１２は、それぞれ同じ動作を行うため、以下、図１６では、符号を付けずに共通の「ジッタディテクタ」として説明する。
【０１１６】
図１６において、ジッタディテクタは、まず、０を出力する（ステップＳ１６０１）。続いて、ジッタディテクタは、送信側のＦＦ（たとえば、図１４のＦＦ１４０１，１４０２）からの入力値の変化を観測したか否かを判断する（ステップＳ１６０２）。ジッタディテクタは、ステップＳ１６０１において、入力値の変化を観測するまで待機状態となる（ステップＳ１６０２：Ｎｏのループ）。
【０１１７】
ステップＳ１６０２において、入力値の変化が観測されると（ステップＳ１６０２：Ｙｅｓ）、ジッタディテクタは、後段に接続されたＦＦに入力値の変化を報知する報知信号として、１を出力する（ステップＳ１６０３）。その後、ジッタディテクタは、タイマを０にリセットし（ステップＳ１６０４）、送信側のＦＦからの入力値の変化を観測したか否かを判断する（ステップＳ１６０５）。なお、タイマは、常に計時を行っている。したがって、ステップＳ１６０４の処理によって、リセットが完了すると、タイマでは、即座に０からあらたな計時が開始される。
【０１１８】
ステップＳ１６０５において、入力値の変化を観測した場合（ステップＳ１６０５：Ｙｅｓ）、ジッタディテクタは、ステップＳ１６０４の処理に戻り、タイマを０にリセットする。なお、ジッタディテクタは、入力値の変化を観測したため、報知信号として、１を出力し続けている。
【０１１９】
一方、ステップＳ１６０５において、入力値の変化が観測されなかった場合（ステップＳ１６０５：Ｎｏ）、ジッタディテクタは、タイマの計時によって時間Ｔｊが経過したか否かを判断する（ステップＳ１６０６）。ステップＳ１６０６において、時間Ｔｊが経過していない場合（ステップＳ１６０６：Ｎｏ）、ジッタディテクタは、ステップＳ１６０５の処理に戻って、再び、入力値の変化が観測されたか否かを判断する。
【０１２０】
ステップＳ１６０６において、時間Ｔｊが経過した場合には（ステップＳ１６０６：Ｙｅｓ）、ジッタディテクタによる入力値の変化の報知が終了したことになる。したがって、ジッタディテクタは、ステップＳ１６０１の処理に戻り、入力値の変化を観測していない状態を報知するため、０を出力する。以上説明した処理は、検証処理中であれば継続して行われる。また、検証処理が終了した場合や、途中で中断したい場合には、検証支援装置１００の利用者や上位プログラムから終了指示が行われ、ジッタディテクタは、一連の処理を終了する。
【０１２１】
＜ジッタエンコーダの出力処理＞
図１７は、ジッタエンコーダの出力処理の手順を示すフローチャートである。ジッタエンコーダは、送信側のＦＦから入力値に変化があった場合に、入力値をＸ値（ランダムな論理値）に換えて出力することによって、意図的にメタステーブル状態を発生させる。Ｘ値を受信側のＦＦへ転送することによって、受信側のＦＦがメタステーブル状態に正常に動作するか否かを検証することができる。なお、図１５のジッタエンコーダ１５１１，１５１２はそれぞれ同じ動作を行うため、以下、図１７では、符号を付けずに共通の「ジッタエンコーダ」として説明する。
【０１２２】
図１７において、ジッタエンコーダは、まず、送信側のＦＦ（たとえば、図１５のＦＦ１５０１，１５０２）からの入力値をそのまま出力する（ステップＳ１７０１）。なお、送信側のＦＦの入力値は０もしくは１の２値である。その後、ジッタエンコーダは、入力値の変化を観測したか否かを判断する（ステップＳ１７０２）。
【０１２３】
ステップＳ１７０２において、ジッタエンコーダは、入力値の変化を観測するまで待機状態となる（ステップＳ１７０２：Ｎｏのループ）。そして、ジッタエンコーダは、ステップＳ１７０２において、入力値の変化を観測すると（ステップＳ１７０２：Ｙｅｓ）、入力値に換わって、Ｘ値を出力する（ステップＳ１７０３）。
【０１２４】
その後、ジッタエンコーダは、タイマを０にリセットし（ステップＳ１７０４）、送信側のＦＦからの入力値の変化を観測したか否かを判断する（ステップＳ１７０５）。なお、タイマは、常に計時を行っている。したがって、ステップＳ１７０４の処理によって、リセットが完了すると、タイマでは、即座に０からあらたな計時が開始される。
【０１２５】
ステップＳ１７０５において、入力値の変化を観測した場合（ステップＳ１７０５：Ｙｅｓ）、ジッタエンコーダは、ステップＳ１７０４の処理に戻り、タイマを０にリセットする。なお、ジッタエンコーダは、入力値の変化を観測したため、引き続き、メタステーブル状態を再現するためのＸ値を出力し続けている。
【０１２６】
一方、ステップＳ１７０５において、入力値の変化が観測されなかった場合（ステップＳ１７０５：Ｎｏ）、ジッタエンコーダは、タイマの計時によって時間Ｔｊが経過した、または、受信クロックイベントを観測したか否かを判断する（ステップＳ１７０６）。なお、受信クロックイベントとは、受信側のＦＦ（たとえば、図１５のＦＦ１５０４，１５０６）のいずれかでクロックの立ち上がりに応じて、何らかの処理が実行されたことを意味する。
【０１２７】
ステップＳ１７０６の処理は、Ｘ値の出力を継続するか終了するかを判断するために実行される。したがって、ステップＳ１７０６における、「時間Ｔｊが経過した」、「受信クロックイベントを観測した」は、いずれも、Ｘ値の出力の終了トリガとなる条件である。したがって、上述した２つの条件のうち、いずれか一方でも満たしていれば、Ｘ値の出力を終了するように動作させる必要がある。
【０１２８】
ステップＳ１７０６において、時間Ｔｊが経過しておらず、かつ、受信クロックイベントが観測されていない場合（ステップＳ１７０６：Ｎｏ）、ジッタエンコーダは、ステップＳ１７０５の処理に戻って、再び、入力値の変化が観測されたか否かを判断する。
【０１２９】
ステップＳ１７０６において、時間Ｔｊが経過した、もしくは、受信クロックイベントを観測した場合（ステップＳ１７０６：Ｙｅｓ）、ジッタエンコーダによる入力値の変化の報知が終了したことになる。したがって、ジッタエンコーダは、ステップＳ１７０１の処理に戻り、入力値の変化を観測していない状態を報知するため、０を出力する。以上説明した処理は、検証処理中であれば継続して行われる。また、検証処理が終了した場合や、途中で中断したい場合には、検証支援装置１００の利用者や上位プログラムから終了指示が行われ、ジッタエンコーダは、一連の処理を終了する。
【０１３０】
＜ジッタデコーダの出力処理＞
図１８は、ジッタデコーダの出力処理の手順を示すフローチャートである。ジッタデコーダは、上段のＦＦから入力された信号に応じて、入力値をそのまま、もしくは、ランダムな論理値を出力する機能を有する。
【０１３１】
図１８において、ジッタデコーダは、図１５のシミュレーションモデル２において、出力側のＦＦの動作に応じて、ＣＤＣシミュレーションが実現した後段の回路素子へ入力値を、そのまま、もしくは、ランダムな論理値（Ｘ値）を入力するまでの手順を示している。なお、図１５のジッタデコーダ１５２１，１５２２は、それぞれ同じ動作を行うため、以下、図１８では、符号を付けずに共通の「ジッタデコーダ」として説明する。
【０１３２】
ジッタデコーダは、前段のＦＦからの入力値の受信を契機に動作を開始する。まず、ジッタデコーダは、入力値がＸか否かを判断する（ステップＳ１８０１）。ステップＳ１８０１において、入力値がＸであった場合（ステップＳ１８０１：Ｙｅｓ）、ジッタデコーダは、メタステーブル状態を発生させるため、０または１をランダムに出力する（ステップＳ１８０２）。
【０１３３】
一方、ステップＳ１８０１において、入力値がＸではなかった場合（ステップＳ１８０１：Ｎｏ）、ジッタデコーダは、入力値をそのまま出力する（ステップＳ１８０３）。なお、ステップＳ１８０３では、入力値として０または１が得られるため、出力される信号は０または１になる。なお、ステップＳ１８０２，１８０３によって出力された信号は、後段のＦＦに入力される。
【０１３４】
その後、ジッタデコーダは、ステップＳ１８０２もしくはステップＳ１８０３による信号の出力を観測したか否かを判断する（ステップＳ１８０４）。ステップＳ１８０４では、出力が観測されるまで待機状態となり（ステップＳ１８０４：Ｎｏのループ）、出力が観測されると（ステップＳ１８０４：Ｙｅｓ）、ジッタデコーダは、上段のＦＦからの入力値の変化を観測したか否かを判断する（ステップＳ１８０５）。
【０１３５】
ジッタデコーダは、ステップＳ１８０５において、入力値の変化を観測するまで待機状態となる（ステップＳ１８０５：Ｎｏのループ）。そして、入力値の変化を観測すると（ステップＳ１８０５：Ｙｅｓ）、ジッタデコーダは、ステップＳ１８０１の処理に戻り、次のクロックサイクルに基づいた処理に移行する。以上説明した処理は、検証処理中であれば継続して行われる。また、検証処理が終了した場合や、途中で中断したい場合には、検証支援装置１００の利用者や上位プログラムから終了指示が行われ、ジッタデコーダは、一連の処理を終了する。
【０１３６】
＜ジッタサンプラの出力処理＞
ジッタサンプラでは、出力処理として、入力値に応じたイベント発生処理と、受信クロックに応じたイベント発生処理とが並列して実行される。ジッタサンプラは送信側のＦＦから出力された出力信号の変化に応じてサンプルイベントを発生させると同時に、受信側のクロックイベントの発生に応じてサンプルイベントを発生する。すなわち、送信側の動作と受信側の動作との双方に連動して、サンプルイベントを発生させる。なお、図１４，１５のジッタサンプラ１４２０，１５３０は、それぞれ同じ動作を行うため、以下、図１９，２０では、符号を付けずに共通の「ジッタサンプラ」として説明する。
【０１３７】
図１９は、ジッタサンプラの入力値に応じたイベント発生処理の手順を示すフローチャートである。図１９の各処理を実行することによって、ジッタサンプラは、入力値の変化を契機にＳＡＭＰＬＥイベントを発生させることができる。
【０１３８】
図１９において、ジッタサンプラは、まず、上段のＦＦ、すなわち、送信側のＦＦからの入力値の変化を観測したか否かを判断する（ステップＳ１９０１）。ステップＳ１９０１において、ジッタサンプラは、入力値の変化を観測するまで待機状態となる（ステップＳ１９０１：Ｎｏのループ）。
【０１３９】
その後、入力値の変化を観測すると（ステップＳ１９０１：Ｙｅｓ）、ジッタサンプラは、変数ＮをＮ＋１にインクリメントする（ステップＳ１９０２）。変数Ｎは、送信側のＦＦからの入力値の総数を意味する。なお、Ｎは、受信側のクロックイベント発生の度にリセットされるため、受信側の動作クロックの１クロックサイクルの間の入力値の総数となる。
【０１４０】
その後、ジッタサンプラは、１／Ｎの確率でＳＡＭＰＬＥイベントを発生する（ステップＳ１９０３）。ＳＡＭＰＬＥイベントとは、現在のＣＤＣ信号値およびＣＤＣ信号値の変化状況の保存を指示するためのイベントである。その後、ジッタサンプラは、ステップＳ１９０１の処理に戻り、再度、ＳＡＭＰＬＥイベントを発生させる。ステップＳ１９０３のように、１／Ｎの確率でＳＡＭＰＬＥイベントが発生されるため、１クロックサイクルの間に送信側のＦＦから入力された入力値の中のいずれか一つに起因してＳＡＭＰＬＥイベントが発生するための処理に移行する。最終的には１クロックサイクル内の最後（次の受信クロックイベント発生の直前）のＳＡＭＰＬＥイベントが意味を持つことになる。ステップＳ１９０３では１／Ｎの確率でＳＡＭＰＬＥイベントを発生させているため、何度目の入力値変化に対しても、１クロックサイクル内の最後のＳＡＭＰＬＥイベントが発生する確率は同じになる。
【０１４１】
図２０は、ジッタサンプラの受信クロックに応じたイベント発生処理の手順を示すフローチャートである。図１９の各処理を実行することによって、ジッタサンプラは、受信側のＦＦにおける受信クロックイベントの発生を契機にＳＡＭＰＬＥイベントを発生させることができる。これは、受信クロックサイクル毎の初期化処理を目的としている。
【０１４２】
図２０において、ジッタサンプラは、まず、変数Ｎを０にリセットする（ステップＳ２００１）。その後、ジッタサンプラは、受信側のＦＦにおいて、受信クロックイベントが発生したか否かを判断する（ステップＳ２００２）。ステップＳ２００２において、ジッタサンプラは、受信クロックイベントが発生するまで待機状態となる（ステップＳ２００２：Ｎｏのループ）。
【０１４３】
そして、受信クロックイベントの発生が観測されると（ステップＳ２００２：Ｙｅｓ）、ジッタサンプラは、ＳＡＭＰＬＥイベントを発生する（ステップＳ２００３）。ＳＡＭＰＬＥイベントとは、上述したように、後段のＦＦへランダムな論理値を入力してメタステーブル状態を発生させるイベントである。その後、ジッタサンプラは、ステップＳ２００１の処理に戻り、再度、ＳＡＭＰＬＥイベントを発生させるための処理を開始する。
【０１４４】
以上説明したように、ジッタサンプラは、送信側のＦＦから入力されたあらたな入力値が観測されるタイミング、もしくは、受信側のＦＦにおける受信クロックイベントの発生を契機にＳＡＭＰＬＥイベントが発生する。受信側の１クロックサイクルの間に複数の入力値の変化が観測された場合には、その全ての変化タイミングの中から同じ確率で最終的なＳＡＭＰＬＥイベントが発生するため、検証内容の偏りを防ぐことができる。
【０１４５】
なお、以上説明した処理は、検証処理中であれば継続して行われる。また、検証処理が終了した場合や、途中で中断したい場合には、検証支援装置１００の利用者や上位プログラムから終了指示が行われ、ジッタサンプラは、一連の処理を終了する。
【０１４６】
＜各モデルを動作させた場合のタイミングチャート＞
図２１は、シミュレーションモデル１の動作例を示すタイミングチャートであり、図２２は、シミュレーションモデル２の動作例を示すタイミングチャートである。次に、図２１，２２を用いて、シミュレーションモデル１，２を実行させた場合の各回路素子の動作例について説明する。
【０１４７】
図２１のように、シミュレーションモデル１において、送信側のＦＦ１４０１からの出力信号ＤＡに変化が起こった場合（Ｔ１）、ジッタディテクタ１４１１によって出力信号ＤＡの変化が検出される。ジッタディテクタ１４１１では、出力信号ＤＡの変化を検出すると、後段のＦＦに報知するための報知信号ＪＡを一定時間Ｔｊの間出力する。また、出力信号ＤＡの変化を観測したジッタサンプラ１４２０は、（１／１の確率で）ＳＡＭＰＬＥイベントを発生させる。
【０１４８】
また、送信側のＦＦ１４０１からの出力信号ＤＢに変化が起こった場合（Ｔ２）、ジッタディテクタ１４１２によって出力信号ＤＢの変化が検出される。ジッタディテクタ１４１２では、出力信号ＤＢの変化を検出すると、後段のＦＦに報知するための報知信号ＪＢを一定時間Ｔｊの間出力する。また、ジッタサンプラ１４２０は、出力信号ＤＢの変化を観測したが、１／２の抽選の結果、ＳＡＭＰＬＥイベントを発生させなかった。
【０１４９】
また、ジッタサンプラ１４２０は、受信側のＦＦにおける受信クロックイベントの発生に基づいて、ＳＡＭＰＬＥイベントを発生させている。具体的には、ＣＬＫ２のサイクル１の立ち上がりのタイミング（Ｔ３）、サイクル２の立ち上がりのタイミング（Ｔ４）、および、サイクル３の立ち上がりのタイミング（Ｔ５）にそれぞれＳＡＭＰＬＥイベントを発生させている。
【０１５０】
一方、図２２は、シミュレーションモデル２における各回路素子の動作を表している。送信側のＦＦ１５０１からの出力信号ＤＡに変化が起こった場合（Ｔ６）、ジッタエンコーダ１５１１は、入力値の変化を観測して、一定時間Ｔｊの間、ランダムな論理値（Ｘ値）を出力する。ジッタサンプラ１５３０は、出力信号ＤＡの変化を観測すると、（１／１の確率で）ＳＡＭＰＬＥイベントを発生させる。
【０１５１】
出力信号ＤＡの変化に起因したＳＡＭＰＬＥイベントの発生によって、ＦＦ１５０３は、ランダムな論理値（Ｘ値）を出力する。
【０１５２】
また、送信側のＦＦ１５０２からの出力信号ＤＢに変化が起こった場合（Ｔ７）、ジッタエンコーダ１５１２は、入力値の変化を観測して、一定時間Ｔｊの間、ランダムな論理値（Ｘ値）を出力する。ジッタサンプラ１５３０は、出力信号ＤＢの変化を観測するが、１／２の抽選の結果、ＳＡＭＰＬＥイベントを発生させなかった。
【０１５３】
また、ジッタサンプラ１５３０は、受信側のＦＦにおける受信クロックイベントの発生に基づいて、ＳＡＭＰＬＥイベントを発生させている。具体的には、ＣＬＫ２のサイクル１の立ち上がりのタイミング（Ｔ８）、サイクル２の立ち上がりのタイミング（Ｔ９）、および、サイクル３の立ち上がりのタイミング（Ｔ１０）にそれぞれＳＡＭＰＬＥイベントを発生させている。
【０１５４】
したがって、ＣＤＣを含む検証対象回路であっても、各回路ブロックの周波数の設定にかかわらず、送信側の回路素子からの出力信号と、受信側の回路素子の受信クロックイベントに基づいて、メタステーブル状態の回路素子の振る舞いを検証することができる。
【０１５５】
以上説明したように、検証支援プログラム、検証支援装置および検証支援方法によれば、ＣＤＣの送信側の素子の出力値のうち、受信側の１クロックの間に検出された何れか１つのタイミングで発生した信号変化の影響を選択して、受信側のクロックに合わせて出力する。したがって、漏れなくメタステーブル状態が再現されるため効率的にメタステーブル状態に対して回路が正しく動作するかを検証できる。
【０１５６】
また、上記技術では、さらに、検証対象回路の中のＣＤＣが発生する非同期箇所の指定を受け付ける機能を備えてもよい。また、上記技術では、さらに、回路設計の記述内容に基づいて、非同期箇所を自動抽出する機能を備えてもよい。上述のような各機能を備えることによって、非同期箇所の絞り込みが容易になり、習熟度の低い利用者であっても、効率的に検証を行うことができる。
【０１５７】
また、上記技術は、さらに、非同期箇所の中から、検証対象となる送信側の回路素子と受信側の回路素子とを個別に指定する機能を備えてもよい。上述の機能を備えた場合、メタステーブル状態は、指定された回路素子のみを対象として発生させられる。したがって、指定箇所に絞った高精度な検証を実現することができる。
【０１５８】
なお、本実施の形態で説明した検証支援方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。本検証支援プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本検証支援プログラムは、インターネットなどのネットワークを介して配布してもよい。
【０１５９】
また、本実施の形態で説明した検証支援装置１００は、スタンダードセルやストラクチャードＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの特定用途向けＩＣ（以下、単に「ＡＳＩＣ」と称す。）やＦＰＧＡなどのＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）によっても実現することができる。具体的には、たとえば、上述した検証支援装置１００の機能（受付部１００１〜指定部１００６）をＨＤＬ記述によって機能定義し、そのＨＤＬ記述を論理合成してＡＳＩＣやＰＬＤに与えることにより、検証支援装置１００を製造することができる。
【符号の説明】
【０１６０】
１００  検証支援装置
１１０  論理シミュレータ
１００１  受付部
１００２  検出部
１００３  入力部
１００４  出力部
１００５  抽出部
１００６  指定部
１０１０  シミュレーションモデル生成部
【図１】
0005445358.tif 000002
【図２】
0005445358.tif 000003
【図３】
0005445358.tif 000004
【図４】
0005445358.tif 000005
【図５】
0005445358.tif 000006
【図６】
0005445358.tif 000007
【図７】
0005445358.tif 000008
【図８】
0005445358.tif 000009
【図９】
0005445358.tif 000010
【図１０−１】
0005445358.tif 000011
【図１０−２】
0005445358.tif 000012
【図１１−１】
0005445358.tif 000013
【図１１−２】
0005445358.tif 000014
【図１２】
0005445358.tif 000015
【図１３】
0005445358.tif 000016
【図１４】
0005445358.tif 000017
【図１５】
0005445358.tif 000018
【図１６】
0005445358.tif 000019
【図１７】
0005445358.tif 000020
【図１８】
0005445358.tif 000021
【図１９】
0005445358.tif 000022
【図２０】
0005445358.tif 000023
【図２１】
0005445358.tif 000024
【図２２】
0005445358.tif 000025