検証支援プログラム、検証支援装置および検証支援方法
【課題】検証漏れの少ない効率的な検証の実現を支援すること。
【解決手段】検証支援装置100は、クロックドメインBのクロックサイクル毎に、回路ブロック2からの出力信号変化を観測する。1回以上の出力信号変化があった場合にはその変化時刻のいずれか一つをランダムに選択し、その時の出力信号値をサンプリングし(ステップS111)、サンプリング結果からその時刻に値変化のあった信号(回路ブロック2からの出力信号)の値をランダムな論理値に置換した後、クロックドメインBの動作クロックの立ち上がりに合わせて、回路ブロック3へ入力する(ステップS112)。すなわち、ステップS112では、回路ブロック2から出力された出力信号の中でサンプリング時刻に値変化があったものをランダムな論理値に置き換えて入力することによって、回路ブロック3にDCDジッタを発生させることができる。
【解決手段】検証支援装置100は、クロックドメインBのクロックサイクル毎に、回路ブロック2からの出力信号変化を観測する。1回以上の出力信号変化があった場合にはその変化時刻のいずれか一つをランダムに選択し、その時の出力信号値をサンプリングし(ステップS111)、サンプリング結果からその時刻に値変化のあった信号(回路ブロック2からの出力信号)の値をランダムな論理値に置換した後、クロックドメインBの動作クロックの立ち上がりに合わせて、回路ブロック3へ入力する(ステップS112)。すなわち、ステップS112では、回路ブロック2から出力された出力信号の中でサンプリング時刻に値変化があったものをランダムな論理値に置き換えて入力することによって、回路ブロック3にDCDジッタを発生させることができる。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、検証対象回路の論理検証を支援する検証支援プログラム、検証支援装置および検証支援方法に関する。
【背景技術】
【0002】
従来より、独立したクロックソースを持つ回路ブロック間の信号の受け渡しが発生するクロックドメイン・クロッシング(Clock Domain Crossing:以下「CDC」と呼ぶ)を含む場合、クロックドメインの違いを考慮した検証が必要になる。すなわち、クロックサイクルの異なる回路間で受け渡された信号によって受信側の回路ブロックが正常に動作するのかを検証しなければならない。
【0003】
特に、近年では、回路の高集積化により、1つの検証対象回路内に、数千のCDCを含む論理設計も珍しくない。CDCによって、非同期となる箇所では、受信側の回路ブロックにおけるセットアップタイム違反や、ホールドタイム違反などによるメタステーブル状態の発生が避けられない。したがって、あらかじめ、メタステーブル状態が発生しても誤動作を起こさないかを検証する必要がある。
【0004】
そこで、CDC間での信号の受け渡しの仕組みに関する検証を行う手段として、異なるクロックドメインから受信した信号のランダム性を論理シミュレーションの中で模擬する「CDCシミュレーション」に関する技術が開示されている。たとえば、CDCの送信側の各回路素子から出力された出力信号を検出すると、任意の値のジッタを所定時間、発生させて受信側の回路素子へ入力する検証支援装置が開示されている(たとえば、下記特許文献1〜3参照。)。ジッタの入力によって、CDC間の信号の受け渡しによるメタステーブル状態の発生が擬似的に再現される。すなわち、メタステーブル状態が発生した場合にCDCの受信側の回路素子が正しく動作するかを検証することができる。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2009−187119号公報
【特許文献2】特開2009−187344号公報
【特許文献3】特開2009−93635号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、上述した従来技術の場合、CDCの送信側の動作クロックの周期が、受信側の動作クロックの周期よりも短い場合に検証漏れが起こりやすいという問題があった。たとえば、受信側の動作クロックの1サイクルの間に、送信側の動作クロックが複数サイクル実行され、複数の出力信号が出力されることがある。上述のような場合、受信側の動作クロックが立ち上がる直前に送信側の回路素子から出力された出力信号に基づいたジッタのみが受信側の各回路素子へ入力されることになる。
【0007】
すなわち、受信側の動作クロックの立ち上がりの直前に送信側から出力された出力信号以外の信号の変化は受信側の回路素子に反映されない。結果として、メタステーブル状態の発生例の検証内容に漏れが生じてしまい、検証効率が低くなってしまうという問題がある。
【0008】
また、上述のように、送信側の回路素子から出力される出力信号のうち、様々なタイミングで出力された出力信号がそれぞれ受信側の回路素子の動作にどのような影響を与えるかを検証するには、各タイミングで出力された出力信号の影響が反映されるまでCDCシミュレーションを繰り返す必要がある。このため、多くのシミュレーション回数が必要となり、論理検証にかかる作業負担および作業時間が増大化し、ひいては設計期間の長期化を招くという問題がある。
【0009】
1つの側面では、本発明は検証漏れの少ない効率的な検証の実現を支援する検証支援プログラム、検証支援装置および検証支援方法を提供することを目的とする。
【課題を解決するための手段】
【0010】
1つの案では、本検証支援プログラム、検証支援装置および検証支援方法は、検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所における受信側の1クロックサイクルの間に、送信側の各回路素子から出力された信号の変化を検出し、前記1クロックサイクル後の前記受信側の動作クロックの立ち上がりを契機に、信号の変化が検出された時刻の中のいずれか1つの時刻に変化が検出された信号をランダムな論理値に置き換えて前記受信側の各回路素子へ入力し、前記いずれか1つの時刻に変化が検出されなかった信号を前記受信側の各回路素子へ入力し、入力に応じた前記受信側の各回路素子の動作結果を出力する。
【発明の効果】
【0011】
本検証支援プログラム、検証支援装置および検証支援方法によれば、検証漏れの少ない効率的な検証の実現を支援することができるという効果を奏する。
【図面の簡単な説明】
【0012】
【図1】本実施の形態にかかる検証支援処理の一例を示す説明図である。
【図2】CDC信号とメタステーブル状態との関係を示す説明図である。
【図3】従来の論理シミュレーションの一例を示す説明図である。
【図4】従来のCDCシミュレーションの一例を示す説明図である。
【図5】CDCジッタの発生例を示すタイミングチャートである。
【図6】一定時間Tjが短い場合の動作例を示すタイミングチャートである。
【図7】一定時間Tjが長い場合の動作例を示すタイミングチャートである。
【図8】本実施の形態にかかる検証支援処理を利用した場合の信号伝播例を示すタイミングチャートである。
【図9】検証支援装置のハードウェア構成を示すブロック図である。
【図10−1】検証支援装置の機能的構成(その1)を示すブロック図である。
【図10−2】検証支援装置の機能的構成(その2)を示すブロック図である。
【図11−1】検証支援装置による検証支援処理の手順(その1)を示すフローチャートである。
【図11−2】検証支援装置による検証支援処理の手順(その2)を示すフローチャートである。
【図12】従来のシミュレーションモデルの構成例(その1)を示す回路図である。
【図13】従来のシミュレーションモデルの構成例(その2)を示す回路図である。
【図14】本実施例にかかるシミュレーションモデル1の構成を示す回路図である。
【図15】本実施例にかかるシミュレーションモデル2の構成を示す回路図である。
【図16】ジッタディテクタの出力処理の手順を示すフローチャートである。
【図17】ジッタエンコーダの出力処理の手順を示すフローチャートである。
【図18】ジッタデコーダの出力処理の手順を示すフローチャートである。
【図19】ジッタサンプラの入力値に応じたイベント発生処理の手順を示すフローチャートである。
【図20】ジッタサンプラの受信クロックに応じたイベント発生処理の手順を示すフローチャートである。
【図21】シミュレーションモデル1の動作例を示すタイミングチャートである。
【図22】シミュレーションモデル2の動作例を示すタイミングチャートである。
【発明を実施するための形態】
【0013】
以下に添付図面を参照して、この発明にかかる検証支援プログラム、検証支援装置および検証支援方法の好適な実施の形態を詳細に説明する。
【0014】
図1は、本実施の形態にかかる検証支援処理の一例を示す説明図である。本実施の形態では、クロックドメイン・クロッシングを含む論理設計に対する検証品質および検証効率の向上を図る手法の一例について説明する。上述したように、CDC(クロックドメイン・クロッシング)とは、異なる動作クロックが設定されたクロックドメイン間でデータ信号が受け渡されることによって、動作クロックの乗り換えが起こることである。なお、以下の説明では、CDCの起こる箇所を非同期箇所という。
【0015】
また、本実施の形態にかかる検証支援処理は、たとえば、図1に例示した検証支援装置100を利用してCDCの信号の受け渡しで回路素子が正常に動作するかを検証する。具体的には、検証支援装置100は、論理シミュレータ110によるCDCシミュレーションによってメタステーブル状態の検証を行うことができる。
【0016】
論理シミュレータ110では、検証対象回路の回路情報101を受け付けると、ソフトウェアによって検証対象回路を構成する。論理シミュレータ110によって構成された検証対象回路にはテストパターンが入力され、入力に応じた動作結果102が出力される。利用者は、論理設計通りの動作結果102を得られたか否かに基づいて、検証対象回路のバグの有無を検証する。
【0017】
検証支援装置100の場合、CDCに相当する回路ブロック間の動作クロックが同期していない非同期箇所については、メタステーブル状態が発生しても正しく動作できるかを検証する必要がある。したがって、検証支援装置100は、CDCの検証に特化したCDC検証支援機能を備えている。
【0018】
たとえば、図1の場合、検証対象回路に含まれている回路ブロック1〜4のうち、回路ブロック2と回路ブロック3との間は動作クロックが異なるため、非同期箇所となる。したがって、検証支援装置100は、動作クロックが共通の同期箇所については、論理シミュレータ110によって通常のシミュレーションを実行し、非同期箇所についてはCDC検証支援機能を利用してメタステーブル状態の検証を行う。
【0019】
(CDC信号とメタステーブル状態との関係)
図2は、CDC信号とメタステーブル状態との関係を示す説明図である。非同期箇所でデータを転送する場合、受信側のクロックドメインでは入力信号が非同期信号となるため、様々な問題が発生する可能性がある。また、非同期箇所におけるデータ信号の受け渡しが正常に行われなければ、その非同期箇所よりも後段の処理に障害が発生してしまう場合がある。
【0020】
したがって、論理設計の段階において、非同期箇所の動作を検証してデータ信号の受け渡しが正常に行われているかどうかを確認することが望ましい。なぜなら、できる限り早い段階で非同期箇所に潜む問題を把握し、適切な回路修正を行うことが設計期間の短縮化につながるからである。
【0021】
そこで、図2を用いて、非同期箇所におけるCDC信号とメタステーブル状態との関係について説明する。CDC信号とは、動作クロックが異なる回路ブロック間で転送される信号を意味する。図2のように前段の回路ブロック210は、FF1を備え、後段の回路ブロック220はFF2と、FF3とを備えている。そして、回路ブロック210と回路ブロック220とは、周期の異なるクロックドメインによって動作する。したがって、図2の場合では、回路ブロック210のFF1から回路ブロック220のFF2へ入力される信号がCDC信号となる。
【0022】
一般的に、FFなどデジタル信号を扱う回路には、セットアップタイムやホールドタイムなどの制約が設けられている。セットアップタイムとは、入力された信号を確実に取り込むため、入力信号の状態を継続する必要のある時間である。また、ホールドタイムとは、出力した信号を確実に出力先の回路素子へ伝播させるために、出力信号の状態を継続する時間である。
【0023】
ところが、CDC信号の場合、図2のように、クロックサイクルの違いによって、セットアップタイム違反や、ホールドタイム違反が起こってしまうことが多い。セットアップタイム違反や、ホールドタイム違反が起こると、CDC信号の伝播が不確実になり、図2のFF2の出力信号S2のように、信号の値が不安定なメタステーブル状態が発生してしまう。
【0024】
しかしながら、CDCの構成上、セットアップタイム違反や、ホールドタイム違反は避けられない。そこで、CDCを含む回路の場合、メタステーブル状態が発生しても誤動作が起こらないかを検証しておく必要がある。また、検証によって誤動作が発生する箇所を見つけた場合には、設計を変更して、誤動作を回避することができる。
【0025】
図3は、従来の論理シミュレーションの一例を示す説明図である。また、図4は、従来のCDCシミュレーションの一例を示す説明図である。従来の論理シミュレーションの場合、図3に例示したシミュレーションモデル300のように、回路構成をそのままソフトウェア的に構成している。シミュレーションモデル300の各回路素子の動作内容は、タイミングチャート310のように、メタステーブル状態が発生することなく、誤動作の有無を検証することができない。
【0026】
一方、図4のようにCDCシミュレーションの場合、CDCによるメタステーブル状態の発生を再現するために、シミュレーションモデル400のように、実際の回路素子(図4の場合はFF2)に換わって、メタステーブル状態の発生を再現するCDCモデルを含んだ構成になっている。CDCモデルは、タイミングチャート410に示したように、上段のFF1からの入力信号S1に応じて、1サイクル分のランダムな論理値(CDCジッタ)を出力して、メタステーブル状態を再現する。
【0027】
図5は、CDCジッタの発生例を示すタイミングチャートである。たとえば、シミュレーションモデル500のような回路について検証したい。シミュレーションモデル500は、送信側のFF501と、受信側のFF502とのクロックドメインが異なっている。したがって、送信側のFF501の出力信号Dの変化を観測して、受信側のFF502からの出力信号QとしてCDCジッタを発生させる。
【0028】
なお、実際にCDCジッタを発生させるためには、図4に例示したように、受信側のFF502に換わって、CDCモデルを用意する必要がある。しかしながら、図5のでは、検証対象回路の構成が明確になるように、便宜上、CDCモデルに置き換える前の検証対処回路の構成を示している。具体的には、図5のタイミングチャートに示しているように、送信側のFF501の出力信号Dの変化を観測してから、一定時間Tj以内に受信側のクロックイベントが発生した場合に受信側のFF502の出力信号QにCDCジッタを発生させる。クロックイベントの発生とは、受信側のFF502の動作クロックの立ち上がりに起因した受信側のFF502の動作が開始された状態を意味する。
【0029】
上述したように、従来のCDCモデルでは、送信側のFFから出力される信号の変化の後、一定時間Tj以内に、受信側のFFにクロックイベントが発生するか否かが、CDCジッタ生成のトリガとなっている。すなわち、適切なタイミングでCDCジッタを発生させるには、一定時間Tjの設定が重要になる。ところが、送信側のクロックドメインと受信側のクロックドメインとの動作クロックの違いによっては、適切にCDCジッタを発生させるような一定時間Tjの設定が困難な場合があった。
【0030】
図6は、一定時間Tjが短い場合の動作例を示すタイミングチャートである。図6のように、受信側の動作クロックの周期Trと比較して一定時間Tjを小さく設定すると、CDCジッタの発生確率が低下してしまう。すなわち、受信側の動作クロックの周期Trが比較的長いため、一定時間Tjの間に、受信側の動作クロックの立ち上がりが起こらない可能性が高い。
【0031】
すなわち、CDCジッタの発生確率が低下してしまう。実際には送信側のFF501からの出力信号Dに変化が生じており、受信側のFF502からの出力がメタステーブル状態を起こす可能性があるにもかかわらず、動作内容を検証できない。結果として、検証効率の低下を招いてしまう。
【0032】
図7は、一定時間Tjが長い場合の動作例を示すタイミングチャートである。一定時間Tjの設定は、受信側の動作クロックの周期だけでなく、送信側の動作クロックの周期も、考慮しなければならない。図7のように、送信側の動作クロックの周期Tsより一定時間Tjを大きく設定すると、実際には起こりえないビットパターンが起こってしまう。
【0033】
具体的には、図7のように、一定時間Tjが、送信側の動作クロックより大きい長さに設定されると、複数の動作クロックのタイミングで出力された信号の変化を1つの動作クロックのタイミングで出力された信号として誤って判断されてしまう可能性がある。
【0034】
図7のシミュレーションモデル700のように、送信側の回路素子としてFF701,703を備え、受信側の回路素子としてFF702,704を備えるような、複数の回路素子が用意されている回路の場合には、動作に制約が設けられていることが多い。図7のシミュレーションモデル700であれば、たとえば、受信側のFF702,704それぞれから同時に出力されないような制約が設けられている。したがって、実際の回路の動作では、(QA,QB)=(1,1)というパターンは起こりえない。
【0035】
ところが、シミュレーションモデル700の場合、一定時間Tjが、送信側の動作クロック(CLK1)と比較して長く設定されている。結果として、開始タイミングの異なる複数の一定時間Tjに重なりが生じ、その間に受信側のクロックイベントが発生してしまうことがあった。図7のタイミングチャートでは、一定時間Tjが長く設定されており、送信側のFF701からの出力信号DAの変化と、FF703からの出力信号DBの変化とがそれぞれ受信側のFF702,704におけるCDCジッタの出力を起こしてしまっている。上述したように、(QA,QB)=(1,1)というパターンは起こりえないが、QAとQBとが同時に出力状態となってしまい、各回路素子の動作を適切に検証できない。
【0036】
また、(QA,QB)=(1,1)というパターンが起こらないように、受信側の動作クロックの立ち上がりの直前に検出した信号のみを対象としてCDCジッタを発生させるように設定してもよいが、複数の出力信号のうち、一部の出力信号のみが検証されることになってしまう。たとえば、図7の場合であれば、送信側のFF703からの出力信号DBによって発生するメタステーブル状態のみが検証されることになってしまう、結果として、検証内容に偏りが生まれ、検証漏れを起こしてしまう。
【0037】
以上説明したように、CDCモデルを挿入する場合、一定時間Tj<受信側の動作クロックの周期Trとなると、検証効率が低下し、送信側の動作クロックの周期Ts<一定時間Tjのとき誤動作が発生してしまう。したがって、送信側の動作クロックの周期Tsが受信側の動作クロックの周期Trよりも短いCDCの場合、上述の問題を解消できるような一定時間Tjの設定が存在しない。結果として、Ts<TrのようなCDCについては、CDCモデルを利用しても網羅的な検証が行えないという問題があった。
【0038】
そこで、本実施の形態にかかる検証支援処理では、受信クロックの立ち上がり時刻を仮想的にずらすことで、他のタイミングの送信信号変化が受信値に影響するケースも効率良くテストできるようにする。具体的には、CDCの送信側の回路素子と受信側の回路素子のうち、互いに関連のある複数の送信信号をグループ化しておく。そして、グループ単位で送信側の各回路素子から出力される出力信号の変化を観測し、観測された信号変化時刻の中のいずれか一つを仮想的にずらされた受信クロックの立ち上がり時刻として設定する。どの信号変化時刻を選択するかはランダムに決定するため、偏りのない効率的な検証が可能になる。
【0039】
図1の説明に戻り、検証支援装置100が上述した検証を行う場合について説明する。図1では、上述したように、回路ブロック2(クロックドメインA)から回路ブロック3(クロックドメインB)への信号の伝播がCDCに相当する。従来のCDCシミュレーションでは、回路ブロック2と回路ブロック3との間にCDCモデルを挿入してメタステーブル状態を発生させていた。
【0040】
しかしながら、検証支援装置100では、回路ブロック2からの出力信号に応じて、回路ブロック3に対してメタステーブル状態を起こすCDC検証支援機能が設けられている。CDC検証支援機能では、まず、クロックドメインBのクロックサイクル毎に、回路ブロック2からの出力信号変化を観測する。1回以上の出力信号変化があった場合にはその変化時刻のいずれか一つをランダムに選択し、その時の出力信号値をサンプリングする(ステップS111)。
【0041】
次に、CDC検証支援機能は、ステップS111のサンプリング結果からその時刻に値変化のあった信号(回路ブロック2からの出力信号)の値をランダムな論理値に置換した後、クロックドメインBの動作クロックの立ち上がりに合わせて、回路ブロック3へ入力する(ステップS112)。すなわち、ステップS112では、回路ブロック2から出力された出力信号の中でサンプリング時刻に値変化があったものをランダムな論理値に置き換えて入力することによって、回路ブロック3にDCDジッタを発生させることができる。
【0042】
従来のCDCシミュレーションであれば、送信側の回路素子からの出力信号が変化した後、一定時間Tjの間に受信側のクロックイベントが起こったときだけ、CDCジッタを発生させていた。しかしながら、本実施の形態にかかる検証支援装置100の場合には、送信側の回路素子からの出力信号を受信側の動作クロックの1クロックサイクルの間、観測する。そして、観測によって得られた出力信号変化時刻の中のいずれか一つをサンプリング時刻として、受信側の回路素子へ入力することによって、一定時間Tjに関係なく広範囲の出力信号変化に対応するCDCジッタを発生させる。
【0043】
図8は、本実施の形態にかかる検証支援処理を利用した場合の信号伝播例を示すタイミングチャートである。図8のタイミングチャートは、シミュレーションモデル700のような構成の場合、受信側の動作クロックCLK2の1クロックサイクルの間に、DAの変化とDBの変化の2つの出力信号変化が観測されている。したがって、そのいずれか一方の信号変化の影響を選択して、後段の回路素子へ伝播する。
【0044】
たとえば、選択例810の場合、CLK1のサイクル2にDAから出力された出力信号を利用して、受信側の回路素子へ入力している。DAに対応する受信側のFF出力QAに、ランダムな論理値が入力される。また、選択例820の場合、CLK1のサイクル3にDBから出力された出力信号を利用して、受信側の回路素子へ入力している。DBに対応する受信側のFF出力QBに、ランダムな論理値が入力される。
【0045】
図8のように、選択例810の場合も、選択例820の場合も、信号変化時刻の一方だけを採用しているため、(QA,QB)=(1,1)となる制約違反を回避することができる。また、受信側のクロックサイクルの周期の間、CDC信号を観測し続けるため、CDC信号の変化の検出漏れを抑えることができる。以上説明したように、本実施の形態にかかる検証支援装置100を利用することによって、CDCを含む論理設計であっても、検証漏れの少ない効率的な検証の実現を支援することができる。
【0046】
以下に、上述したような本実施の形態にかかる検証支援処理を実現する、検証支援装置100の具体的な構成例や処理内容について、詳しく説明する。
【0047】
(検証支援装置のハードウェア構成)
図9は、検証支援装置のハードウェア構成を示すブロック図である。図9において、検証支援装置100は、CPU(Central Processing Unit)901と、ROM(Read‐Only Memory)902と、RAM(Random Access Memory)903と、磁気ディスクドライブ904と、磁気ディスク905と、光ディスクドライブ906と、光ディスク907と、ディスプレイ908と、I/F(Interface)909と、キーボード910と、マウス911と、スキャナ912と、プリンタ913と、を備えている。また、各構成部はバス900によってそれぞれ接続されている。
【0048】
ここで、CPU901は、検証支援装置100の全体の制御を司る。ROM902は、ブートプログラムなどのプログラムを記憶している。RAM903は、CPU901のワークエリアとして使用される。磁気ディスクドライブ904は、CPU901の制御にしたがって磁気ディスク905に対するデータのリード/ライトを制御する。磁気ディスク905は、磁気ディスクドライブ904の制御で書き込まれたデータを記憶する。
【0049】
光ディスクドライブ906は、CPU901の制御にしたがって光ディスク907に対するデータのリード/ライトを制御する。光ディスク907は、光ディスクドライブ906の制御で書き込まれたデータを記憶したり、光ディスク907に記憶されたデータをコンピュータに読み取らせたりする。
【0050】
ディスプレイ908は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ908は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【0051】
インターフェース(以下、「I/F」と略する。)909は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク914に接続され、このネットワーク914を介して他の装置に接続される。そして、I/F909は、ネットワーク914と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F909には、たとえばモデムやLANアダプタなどを採用することができる。
【0052】
キーボード910は、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス911は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【0053】
スキャナ912は、画像を光学的に読み取り、検証支援装置100内に検証対象回路に関連する画像データや、検証処理に関連する画像データを取り込む。なお、スキャナ912は、OCR(Optical Character Reader)機能を持たせてもよい。また、プリンタ913は、画像データや文書データを印刷する。プリンタ913には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【0054】
(検証支援装置の機能的構成)
図10−1は、検証支援装置の機能的構成(その1)を示すブロック図である。検証支援装置100は、受付部1001と、検出部1002と、入力部1003と、出力部1004と、抽出部1005と、指定部1006と、非同期箇所のCDCシミュレーションを行う論理シミュレータ110と、を含む構成である。
【0055】
上述の制御部となる機能(受付部1001〜指定部1006)は、具体的には、たとえば、図9に示したROM902、RAM903、磁気ディスク905、光ディスク907などの記憶装置に記憶されたプログラムをCPU901に実行させることにより、または、I/F909により、その機能を実現する。また、論理シミュレータ110は、回路情報101に記載された回路の構成に基づいて、検証対象回路をソフトウェア上で実現し各回路素子の動作内容をシミュレートすることができる。
【0056】
受付部1001は、検証対象となる非同期箇所(CDC発生箇所)の指定を受け付ける機能を有する。具体的には、受付部1001は、検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所の指定を受け付ける。非同期箇所とは、検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する箇所を意味する。非同期箇所は、利用者もしくは上位プログラムからの指定情報1000を受け付けることによって指定される。なお、受け付けた非同期箇所は、RAM903、磁気ディスク905、光ディスク907などの記憶領域に記憶される。
【0057】
検出部1002は、論理シミュレータ110によって実行された検証対象回路(シミュレーションモデル)の動作を観測し、所定期間ごとに、送信側の回路素子からの出力信号の変化を検出する機能を有する。具体的には、検出部1002は、受付部1001によって受け付けた非同期箇所における受信側の1クロックサイクルの間に、論理シミュレータ110の送信側の各回路素子から出力された信号がどの時刻で変化したかを検出する。
【0058】
なお、検出結果は、RAM903、磁気ディスク905、光ディスク907などの記憶領域に記憶される。なお、検出部1002による検出結果は、後述する入力部1003によって受信側の回路素子へのサンプリング値の入力に利用された後は、リセットされ、次の1クロックサイクルを対象とした出力信号の検出処理に移行する。
【0059】
入力部1003は、検出部1002による検出結果に基づいて、論理シミュレータ110の受信側の各回路素子へサンプリング値を入力する機能を有する。具体的には、入力部1003は、検出部1002による検出対象となった1クロックサイクルが経過した後の受信側の動作クロックの立ち上がりを契機に入力処理を行う。
【0060】
入力処理の際に、入力部1003は、検出部1002によって1クロックサイクルの間に出力信号の変化が検出された時刻の中のいずれか1つの時刻をサンプリング時刻とし、サンプリング時刻に、出力信号の値をランダムな論理値に置換した後に、受信側の各回路素子へ入力する。
【0061】
すなわち、送信側の回路素子として素子1,2がある場合、検出部1002では、素子1からの出力信号の変化と素子2からの出力信号の変化とがそれぞれ検出される。そして、入力部1003は、検出部1002が出力信号の変化を検出した時刻の中のいずれか1つの時刻を選択して、選択結果に応じて出力信号の値をそのまま、もしくは、ランダムな論理値に変換して後段の各回路素子(ここでは、受信側の各回路素子)へ入力する。
【0062】
たとえば、入力部1003によって、素子1からの出力信号の変化が検出された時刻Tを選択した場合、当然のことながら時刻Tにおける素子1からの出力信号は変化している。したがって、入力部1003は、素子1からの出力信号をランダムな論理値に置き換えて対応する受信側の各回路素子へ入力する。また、時刻Tにおける素子2からの出力信号は変化していない。したがって、入力部1003は、素子2からの出力信号の値をそのまま対応する受信側の各回路素子へ入力する。
【0063】
ここで、受信側の1クロックサイクル中に検出部1002によって検出された信号変化を全て記録した後にサンプリングを実行しても良いが、信号変化を観測する毎に確率的に再サンプリングを実行してサンプリング値を更新しても良い。このとき、N回目の信号変化では1/Nの確率で再サンプリングを実行するように構成すれば偏りのないサンプリング結果が得られる。
【0064】
また、入力部1003は、メタステーブル状態の発生時間に相当する所定時間の間、ランダムな論理値を継続して出力することもできる。なお、入力内容は、RAM903、磁気ディスク905、光ディスク907などの記憶領域に記憶される。
【0065】
出力部1004は、受信側の回路素子の動作結果102を出力する機能を有する。論理シミュレータ110は、入力部1003からのランダムな論理値の入力によって、非同期箇所の受信側の各回路素子にメタステーブル状態が発生した場合と同等の振る舞いが起こっている。
【0066】
したがって、出力部1004は、メタステーブル状態が発生した場合の受信側の回路素子の動作結果102を出力していることになる。出力形式としては、たとえば、ディスプレイ908への表示、プリンタ913への印刷出力、I/F909による外部装置への送信がある。また、RAM903、磁気ディスク905、光ディスク907などの記憶領域に記憶することとしてもよい。
【0067】
検証支援装置100の利用者は、出力部1004から出力された動作結果102が設計内容に準拠しているかを判断することによって、メタステーブル状態が発生しても非同期箇所の受信側の回路素子が正しく動作しているか検証することができる。検証によって、受信側の回路素子が正しく動作していることがわかった場合には、そのまま後段の製造工程に移行することができる。
【0068】
一方、受信側の回路素子が正しく動作していないとわかった場合には、設計内容を見直して、正しく動作する確認がとれるまで、検証を繰り返せばよい。上述のように、検証対象回路の非同期箇所の動作を漏れなく検証することによって、後段の製造工程によって誤動作が起こり、手戻りするような事態を回避することができる。
【0069】
また、検証支援装置100は、後述する抽出部1005および指定部1006を備えることによって、検証箇所の絞り込みを可能にすることができる。したがって、利用者にとって、より利用し易い検証支援装置100を実現することができる。
【0070】
抽出部1005は、検証対象回路の中から非同期箇所を抽出する機能を有する。具体的には、抽出部1005は、検証対象回路の回路情報101に記述された回路設計に基づいて、検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所を抽出する。抽出部1005によって、非同期箇所が抽出された場合、検出部1002は、抽出部1005によって抽出された非同期箇所の送信側の各回路素子を対象に、出力信号を検出する。なお、抽出結果は、RAM903、磁気ディスク905、光ディスク907などの記憶領域に記憶される。
【0071】
上述のように、抽出部1005によって非同期箇所を自動的に抽出する機能を備えることによって、検証支援装置100の利用者の検証の習熟度にかかわらず、CDCの発生する箇所を効率的に検証することができる。
【0072】
指定部1006は、非同期箇所の中から、送信側の回路素子の指定と、受信側の回路素子の指定とを受け付ける機能を有する。指定部1006によって指定を受け付けた場合、検出部1002は、送信側の回路素子の内、指定された回路素子から出力される出力信号の変化を検出する。また、入力部1003も、指定された回路素子へ信号値を入力する。回路素子は、利用者や上位システムからの指定情報1000を受け付けることによって指定される。
【0073】
上述のように、指定部1006によって回路素子を指定することによって、検証支援装置100は、指定された素子に限定して動作結果102を得ることができる。なお、回路素子の指定対象となる非同期箇所は、受付部1001によって受け付けた非同期箇所であってもよいし、抽出部1005によって抽出された非同期箇所であってもよい。なお、指定結果は、RAM903、磁気ディスク905、光ディスク907などの記憶領域に記憶される。
【0074】
図10−1に例示した検証支援装置100の場合、検出部1002によって非同期箇所の送信側の回路素子からの出力信号の変化を検出した検出結果の中から、ランダムに1つを選択する。そして、入力部1003によって、選択された検出結果の値をランダムな論理値に置換して対応する受信側の回路素子へ入力することによって、メタステーブル状態に受信側の回路素子が正常に動作するかを検証することができる。
【0075】
図10−2は、検証支援装置の機能的構成(その2)を示すブロック図である。図10−2に示した検証支援装置100は、本実施の形態にかかる検証支援処理を実現するための他の機能部の構成例を示している。図10−2に示した検証支援装置100の場合、検出部1002および入力部1003に替わってシミュレーションモデル生成部1010を備えた構成になっている。すなわち、シミュレーションモデル生成部1010は、検出部1002および入力部1003に相当の機能を実現する回路のシミュレーションモデルを生成する機能を有している。
【0076】
シミュレーションモデル生成部1010では、図10−1にて説明した検出部1002と入力部1003との機能を実現する素子を検証対象回路の非同期箇所に挿入したシミュレーションモデルを生成する。具体的には、あらかじめ各種メモリなどの記憶装置に記憶された第1〜3の素子の設計情報を読み出して、非同期箇所の送信側の各回路素子と受信側の各回路素子との間に設定することによってシミュレーションモデルが生成される。
【0077】
第1の素子は、前段から出力された信号の変化を検出する機能を有した素子である。また、第2の素子は、第1の素子によって信号の変化が検出された時刻に前段から出力された信号の値を保持する機能を有した素子である。そして、第3の素子は、後段の動作クロックの立ち上がりを契機に第1の素子によって信号の変化が検出された時刻の中のいずれか1つの時刻に第2の素子に保持された値を後段に入力する機能を有した素子である。また第3の素子は、第1の素子によって変化が検出された値をランダムな論理値に置き換えて後段に入力する機能も有している。
【0078】
したがって、シミュレーションモデル生成部1010では、抽出部1005によって、検証対象回路の非同期箇所が抽出されると、まず、特定機能によって、非同期箇所における送信側の各回路素子と、受信側の各回路素子とを特定する。その後、シミュレーションモデル生成部1010は、第1の素子の前段に送信側の各回路素子を設定して、第1の素子による送信側の各回路素子からの出力信号の変化の検出を実現する。
【0079】
また、シミュレーションモデル生成部1010は、第3の素子の後段に受信側の各回路素子を設定して第3の素子による入力を実現する。具体的には、第1の素子によって信号の変化が検出されたいずれか1つの時刻に第2の素子に保持された値およびランダムな値を、第3の素子から受信側の各回路素子に入力させる。上述のようにいずれか1つの時刻として選択された時刻に変化した出力信号についてはランダムな論理値、変化していない出力信号についてはそのままの値が入力される。
【0080】
上述した第1〜3の素子としては、公知の回路素子を利用してもよいし、利用者があらたに設計した回路素子を利用してもよい。後述する実施例1,2では、第1の素子としてジッタサンプラ、第2の素子としてFF、第3の素子としてFFに保持した値とランダム値とのいずれかを入力するセレクタが利用されている。
【0081】
また、シミュレーションモデル生成部1010は、従来のCDCモデル生成ツールによって生成されたシミュレーションモデルに、上述したジッタサンプラ、FFなど(後述する実施例1,2の場合、セレクタはCDCモデル生成ツールによって作成される)の回路素子を追加することによって本実施の形態にかかるシミュレーションモデルを生成することができる。CDCモデル生成ツールは、回路情報101に記載された素子同士の接続やクロックドメインの設定に基づいて、CDCモデルを作成することができる。
【0082】
また、ジッタサンプラは、検出部1002相当の処理を実行する回路素子である。そして、FFには、送信側の回路素子からの出力信号の変化についての検出結果が格納される。検出された出力信号の変化は、ジッタサンプラからの指示に応じて、セレクタから上述のように1/Nの確率でランダムな論理値として、受信側の回路素子に入力される。ランダムな論理値が入力されることによって、メタステーブル状態に受信側の回路素子が正常に動作するかを検証することができる。
【0083】
一例としては、従来のCDCモデル生成ツールでは、非同期箇所に、ジッタディテクタと、出力信号に換えてランダムな論理値を生成する入力素子を追加するCDCモデル(たとえば、後述する図12に例示したCDCモデル)や、非同期箇所に、ジッタエンコーダとジッタデコーダと上述の入力素子とを追加するCDCモデル(たとえば、図13に例示したCDCモデル)がある。
【0084】
そして、シミュレーションモデル生成部1010は、通常、送信側のすべての回路素子と、受信側のすべての回路素子に上述したようなジッタサンプラ、FFを追加したCDCモデルを生成する。なお、後述する図14は、非同期箇所に、ジッタディテクタと、入力素子とを追加したCDCモデルに、ジッタサンプラおよびFFを追加したシミュレーションモデルの生成例である。また、後述する図15は、非同期箇所に、ジッタエンコーダと、ジッタデコーダと、入力素子とを追加したCDCモデルにジッタサンプラおよびFFを追加したシミュレーションモデルの生成例である。
【0085】
また、シミュレーションモデル生成部1010によって生成されたシミュレーションモデルは、論理シミュレータ110によって実行される。すなわち、論理シミュレータ110は、シミュレーションモデルの実行部として機能する。論理シミュレータ110では、生成されたシミュレーションモデルを実行することによって非同期箇所の動作を再現することができる。また、出力部1004は、シミュレーションモデル生成部1010に接続された場合には、シミュレーションモデルの実行結果を出力する。したがって、論理シミュレータ110は、指定された非同期箇所のCDCシミュレーションを実行することができる。
【0086】
(検証支援処理の手順)
図11−1は、検証支援装置による検証支援処理の手順(その1)を示すフローチャートである。図11−1の各処理を実行することによって、メタステーブル状態が発生した場合の受信側の各回路素子の動作をランダムに検証することができる。
【0087】
図11−1において、検証支援装置100は、まず、受付部1001によって、非同期箇所の指定を受け付けたか否かを判断する(ステップS1111)。ステップS1111において、非同期箇所の指定を受け付けた場合(ステップS1111:Yes)、非同期箇所の動作を検証するためのステップS1113の処理に移行する。一方、ステップS1111によって、非同期箇所の指定を受け付けていないと判断された場合(ステップS1111:No)、検証支援装置100は、抽出部1005によって、検証対象回路の中から非同期箇所を抽出する(ステップS1112)。
【0088】
上述のように、ステップS1111もしくはステップS1112によって非同期箇所が特定されると、次に、検証支援装置100は、検出部1002によって、送信信号グループに属する信号の変化を検出する(ステップS1113)。送信信号グループに属する信号とは、送信側の回路素子からの出力信号を意味する。したがって、検出部1002は、ステップS1113によって、出力信号の変化を検出する。
【0089】
その後、検証支援装置100は、受信側の動作クロックが立ち上がったか否かを判断する(ステップS1114)。なお、検証支援装置100は、受信側の動作クロックが立ち上がるまでステップS1113の処理に戻り、待機状態となる(ステップS1114:Noのループ)。そして、検証支援装置100は、受信側の動作クロックが立ち上がったと判断すると(ステップS1114:Yes)、検出部1002によって、1回以上の変化が検出されたか否かを判断する(ステップS1115)。
【0090】
そして、検証支援装置100は、検出部1002によって、1回以上の変化が検出された場合(ステップS1115:Yes)、変化時刻のいずれか一つを選択し(ステップS1116)、ランダム値もしくは出力信号の値を対応する受信側の回路素子に入力する(ステップS1117)。ステップS1117において、ランダム値とは上述したランダムな論理値を意味し、メタステーブル状態の発生を再現することができる。また、受信側の回路素子にランダム値と出力信号の値のいずれを入力するかは、検出部1002による検出結果によって異なる。
【0091】
具体的に説明すると、入力部1003は、ステップS1116によって選択された選択時刻で出力信号の変化が検出されていれば、ランダム値を対応する受信側の回路素子へ入力する。一方、入力部1003は、ステップS1116によって選択された選択時刻に出力信号の変化が検出されていない場合には、出力信号の値をそのまま受信側の回路素子へ入力する。たとえば送信側の回路素子として素子1,2からの出力信号の変化を検出する場合、素子1からの出力信号の変化を検出した時刻が選択された場合、素子2からの出力信号は変化していない。
【0092】
したがって、ステップS1116では、素子1からの出力信号が検出された時刻が選択された場合には、素子1からの出力信号をランダムな論理値に置き換えて、対応する受信側の回路素子へ入力する。一方、素子2からの出力信号は、そのままの値を対応する受信側の回路素子へ入力する。
【0093】
なお、検証支援装置100は、ステップS1115において、1回以上の変化が検出されなかった場合(ステップS1115:No)、受信側の回路素子へなんらかの値を入力する必要はない。したがって検証支援装置100は、ステップS1115の処理が終了した後、そのままステップS1119の処理へ移行する。
【0094】
ステップS1117によってランダムな論理値が入力されることによって、受信側の各回路素子にメタステーブル状態と同等の状況を起こすことができる。なお、検証支援装置100の出力部1004は、ステップS1117の入力によって起こった受信側の各回路素子の動作結果102を論理シミュレータ110から出力する。したがって、メタステーブル状態が発生した場合の動作結果102を利用して、論理設計の検証が可能になる。
【0095】
ステップS1117の処理の後、検証支援装置100は、検出部1002の検出結果を一旦リセットし(ステップS1118)、上位システムや利用者からの終了指示を受けたか否かを判断する(ステップS1119)。ステップS1119において、終了指示を受けていないと判断された場合(ステップS1119:No)、検証支援装置100は、ステップS1113の処理に戻り、引き続き、非同期箇所にてメタステーブル状態が発生した場合の受信側の回路素子についての検証を行う。
【0096】
その後、ステップS1109において、終了指示を受けたと判断された場合(ステップS1119:Yes)、検証支援装置100は、一連の処理を終了する。利用者は、一連の処理によって検証支援装置100から出力された動作結果102を参照して、非同期箇所が正しく動作するかを検証することができる。
【0097】
図11−2は、検証支援装置による検証支援処理の手順(その2)を示すフローチャートである。図11−2に示した各処理を実行することによって、論理シミュレータ110に、指定した非同期箇所(指定情報1000によって指定された非同期箇所)についてのCDCシミュレーションを実行させることができる。
【0098】
図11−2において、検証支援装置100は、まず、受付部1001によって、非同期箇所の指定を受け付けたか否かを判断する(ステップS1121)。ステップS1121において、非同期箇所の指定を受け付けた場合(ステップS1121:Yes)、非同期箇所の動作を検証するためのステップS1123の処理に移行する。一方、ステップS1121によって、非同期箇所の指定を受け付けていないと判断された場合(ステップS1121:No)、検証支援装置100は、抽出部1005によって、検証対象回路の中から非同期箇所を抽出する(ステップS1122)。
【0099】
次に、検証支援装置100は、シミュレーションモデル生成部1010によってCDCシミュレーションモデルを生成する(ステップS1123)。その後、検証支援装置100は、論理シミュレータ110によって生成されたCDCシミュレーションモデルを利用して、非同期箇所についてのCDCシミュレーションを実行して(ステップS1124)、一連の処理を終了する。
【0100】
以上説明したように、図10−2にて説明した検証支援装置100は、CDCシミュレーションモデルを生成して論理シミュレータ110によって実行させることによってCDCシミュレーションの動作結果102を得ることができる。以下の説明では、シミュレーションモデル生成部1010を備えた検証支援装置100を利用した場合の具体的なシミュレーションモデルの構成例を説明する。
【0101】
(シミュレーションモデルの構成例)
次に、図10−2のシミュレーションモデル生成部1010によって生成したシミュレーションモデルの具体的な構成例を挙げて、検証支援装置100によるメタステーブル状態の検証支援例について説明する。まず、比較のために、従来のシミュレーションモデルの構成例を挙げる。そして、これらのシミュレーションモデルに図10−2,11−2によって説明した処理を実行させる機能を追加した、本実施例にかかるシミュレーションモデルを例示して、その動作について説明する。
【0102】
図12、図13は、従来のシミュレーションモデルの構成例を示す回路図である。図12に例示したシミュレーションモデルは、CLK1で動作する送信側の回路素子としてFF1201,1202が備えられている。また、CLK2で動作する受信側の回路素子としてFF1211,1212およびFF1221,1222とが備えられている。
【0103】
また受信側の回路素子には、送信側の回路素子の出力信号を検出するジッタディテクタが備えられている。受信側の回路素子は、FF1211,1212およびジッタディテクタによってCDCモデルを構成している。ジッタディテクタによって送信側の回路素子から出力信号が検出されるとFF1211,1212によってメタステーブル状態が発生され、CDCの検証に利用される。なお、図12のFF1221,1222およびジッタディテクタによって構成されたCDCモデルも同様に動作して、CDCの検証を支援する。
【0104】
また、図13に例示したシミュレーションモデルは、CLK1で動作する送信側の回路素子としてFF1301,1302が備えられている。また、CLK2で動作する受信側の回路素子としてFF1311およびFF1321が備えられている。また受信側の回路素子には、ジッタエンコーダと、ジッタデコーダとが備えられている。
【0105】
受信側の回路素子は、FF1311、ジッタエンコーダおよびジッタデコーダによってCDCモデルを構成している。ジッタエンコーダによって送信側の回路素子からの出力信号の変化が観測されると、FF1311は、ジッタデコーダによってメタステーブル状態に相当するランダムな論理値が出力され、CDCの検証に利用される。なお、図13のジッタエンコーダ、FF1321およびジッタデコーダによって構成されたCDCモデルも同様に動作して、CDCの検証を支援する。
【0106】
ところが、図12,13のいずれのシミュレーションモデルの場合も、一定時間Tjの設定と、CLK1,CLK2の周期によっては、検証効率が低下したり、誤動作を起こしたりする可能性があった。そこで、以下には、図12,13に例示した非同期箇所を検証支援装置100によって検証する場合の構成について説明する。
【0107】
<シミュレーションモデル1>
図14は、本実施例にかかるシミュレーションモデル1の構成を示す回路図である。回路モデル1400によって構成されるシミュレーションモデル1は、FF1401,1402が図12の送信側のFFに相当し、FF1404,1406およびFF1408,1410が、図12の受信側のFFに相当する。
【0108】
そして、シミュレーションモデル1では、送信側の回路素子からの出力信号の変化を検出するために、FF1401,1402の後段には、ジッタディテクタ1411,1412が接続されている。また、シミュレーションモデル1では、出力信号の変化または受信側の動作クロックの立ち上がりを契機にSAMPLEイベントを発生させるジッタサンプラ1420が備えられている。さらに、シミュレーションモデル1では、SAMPLEイベント発生時の信号値を一時的に保持するFF1403,1405,1407,1409が備えられている。ジッタディテクタ1411,1412、ジッタサンプラ1420、およびFF1403,1405,1407,1409は、図10−1にて説明した検出部1002として機能する。
【0109】
<シミュレーションモデル2>
図15は、本実施例にかかるシミュレーションモデル2の構成を示す回路図である。回路モデル1500によって構成されるシミュレーションモデル2は、FF1501,1502が図13の送信側のFFに相当し、FF1504およびFF1506が、図13の受信側のFFに相当する。
【0110】
そして、シミュレーションモデル2では、送信側の回路素子のFF1501,1502からの出力信号の変化を後段のFFに報知するために、ジッタエンコーダ1511,1512が接続されている。また、シミュレーションモデル2では、出力信号の変化または受信側の動作クロックの立ち上がりを契機にSAMPLEイベントを発生させるジッタサンプラ1530が備えられている。
【0111】
さらに、シミュレーションモデル2では、SAMPLEイベント発生時の信号値を一時的に保持するFF1503,1505が備えられている。ジッタエンコーダ1511,1512、ジッタサンプラ1530、およびFF1503,1505は、図10−1にて説明した検出部1002として機能する。
【0112】
また、シミュレーションモデル2では、ジッタデコーダ1521,1522によって、受信側のFF1504,1506から出力された出力信号をランダムな論理値に換えて、後段の回路素子へ入力する。なお、ジッタデコーダ1521,1522は、図10−1にて説明した入力部1003として機能する。
【0113】
次に、図14,15の各回路モデル1400,1500内に備えられたジッタディテクタ、ジッタエンコーダ、ジッタデコーダおよびジッタサンプラの出力動作について詳しく説明する。
【0114】
<ジッタディテクタの出力処理>
図16は、ジッタディテクタの出力処理の手順を示すフローチャートである。ジッタディテクタは、送信側の回路素子からの出力信号の変化を検出すると、所定時間(具体的にはTj)の間、出力信号の変化を報知する報知信号を出力する機能を有する。
【0115】
図16のフローチャートは、CDCシミュレーションの実行によって、ジッタディテクタの動作が開始された後、送信側の回路素子の出力信号の変化に応じた報知信号の出力処理を継続するための手順を示している。なお、図14のジッタディテクタ1411,1412は、それぞれ同じ動作を行うため、以下、図16では、符号を付けずに共通の「ジッタディテクタ」として説明する。
【0116】
図16において、ジッタディテクタは、まず、0を出力する(ステップS1601)。続いて、ジッタディテクタは、送信側のFF(たとえば、図14のFF1401,1402)からの入力値の変化を観測したか否かを判断する(ステップS1602)。ジッタディテクタは、ステップS1601において、入力値の変化を観測するまで待機状態となる(ステップS1602:Noのループ)。
【0117】
ステップS1602において、入力値の変化が観測されると(ステップS1602:Yes)、ジッタディテクタは、後段に接続されたFFに入力値の変化を報知する報知信号として、1を出力する(ステップS1603)。その後、ジッタディテクタは、タイマを0にリセットし(ステップS1604)、送信側のFFからの入力値の変化を観測したか否かを判断する(ステップS1605)。なお、タイマは、常に計時を行っている。したがって、ステップS1604の処理によって、リセットが完了すると、タイマでは、即座に0からあらたな計時が開始される。
【0118】
ステップS1605において、入力値の変化を観測した場合(ステップS1605:Yes)、ジッタディテクタは、ステップS1604の処理に戻り、タイマを0にリセットする。なお、ジッタディテクタは、入力値の変化を観測したため、報知信号として、1を出力し続けている。
【0119】
一方、ステップS1605において、入力値の変化が観測されなかった場合(ステップS1605:No)、ジッタディテクタは、タイマの計時によって時間Tjが経過したか否かを判断する(ステップS1606)。ステップS1606において、時間Tjが経過していない場合(ステップS1606:No)、ジッタディテクタは、ステップS1605の処理に戻って、再び、入力値の変化が観測されたか否かを判断する。
【0120】
ステップS1606において、時間Tjが経過した場合には(ステップS1606:Yes)、ジッタディテクタによる入力値の変化の報知が終了したことになる。したがって、ジッタディテクタは、ステップS1601の処理に戻り、入力値の変化を観測していない状態を報知するため、0を出力する。以上説明した処理は、検証処理中であれば継続して行われる。また、検証処理が終了した場合や、途中で中断したい場合には、検証支援装置100の利用者や上位プログラムから終了指示が行われ、ジッタディテクタは、一連の処理を終了する。
【0121】
<ジッタエンコーダの出力処理>
図17は、ジッタエンコーダの出力処理の手順を示すフローチャートである。ジッタエンコーダは、送信側のFFから入力値に変化があった場合に、入力値をX値(ランダムな論理値)に換えて出力することによって、意図的にメタステーブル状態を発生させる。X値を受信側のFFへ転送することによって、受信側のFFがメタステーブル状態に正常に動作するか否かを検証することができる。なお、図15のジッタエンコーダ1511,1512はそれぞれ同じ動作を行うため、以下、図17では、符号を付けずに共通の「ジッタエンコーダ」として説明する。
【0122】
図17において、ジッタエンコーダは、まず、送信側のFF(たとえば、図15のFF1501,1502)からの入力値をそのまま出力する(ステップS1701)。なお、送信側のFFの入力値は0もしくは1の2値である。その後、ジッタエンコーダは、入力値の変化を観測したか否かを判断する(ステップS1702)。
【0123】
ステップS1702において、ジッタエンコーダは、入力値の変化を観測するまで待機状態となる(ステップS1702:Noのループ)。そして、ジッタエンコーダは、ステップS1702において、入力値の変化を観測すると(ステップS1702:Yes)、入力値に換わって、X値を出力する(ステップS1703)。
【0124】
その後、ジッタエンコーダは、タイマを0にリセットし(ステップS1704)、送信側のFFからの入力値の変化を観測したか否かを判断する(ステップS1705)。なお、タイマは、常に計時を行っている。したがって、ステップS1704の処理によって、リセットが完了すると、タイマでは、即座に0からあらたな計時が開始される。
【0125】
ステップS1705において、入力値の変化を観測した場合(ステップS1705:Yes)、ジッタエンコーダは、ステップS1704の処理に戻り、タイマを0にリセットする。なお、ジッタエンコーダは、入力値の変化を観測したため、引き続き、メタステーブル状態を再現するためのX値を出力し続けている。
【0126】
一方、ステップS1705において、入力値の変化が観測されなかった場合(ステップS1705:No)、ジッタエンコーダは、タイマの計時によって時間Tjが経過した、または、受信クロックイベントを観測したか否かを判断する(ステップS1706)。なお、受信クロックイベントとは、受信側のFF(たとえば、図15のFF1504,1506)のいずれかでクロックの立ち上がりに応じて、何らかの処理が実行されたことを意味する。
【0127】
ステップS1706の処理は、X値の出力を継続するか終了するかを判断するために実行される。したがって、ステップS1706における、「時間Tjが経過した」、「受信クロックイベントを観測した」は、いずれも、X値の出力の終了トリガとなる条件である。したがって、上述した2つの条件のうち、いずれか一方でも満たしていれば、X値の出力を終了するように動作させる必要がある。
【0128】
ステップS1706において、時間Tjが経過しておらず、かつ、受信クロックイベントが観測されていない場合(ステップS1706:No)、ジッタエンコーダは、ステップS1705の処理に戻って、再び、入力値の変化が観測されたか否かを判断する。
【0129】
ステップS1706において、時間Tjが経過した、もしくは、受信クロックイベントを観測した場合(ステップS1706:Yes)、ジッタエンコーダによる入力値の変化の報知が終了したことになる。したがって、ジッタエンコーダは、ステップS1701の処理に戻り、入力値の変化を観測していない状態を報知するため、0を出力する。以上説明した処理は、検証処理中であれば継続して行われる。また、検証処理が終了した場合や、途中で中断したい場合には、検証支援装置100の利用者や上位プログラムから終了指示が行われ、ジッタエンコーダは、一連の処理を終了する。
【0130】
<ジッタデコーダの出力処理>
図18は、ジッタデコーダの出力処理の手順を示すフローチャートである。ジッタデコーダは、上段のFFから入力された信号に応じて、入力値をそのまま、もしくは、ランダムな論理値を出力する機能を有する。
【0131】
図18において、ジッタデコーダは、図15のシミュレーションモデル2において、出力側のFFの動作に応じて、CDCシミュレーションが実現した後段の回路素子へ入力値を、そのまま、もしくは、ランダムな論理値(X値)を入力するまでの手順を示している。なお、図15のジッタデコーダ1521,1522は、それぞれ同じ動作を行うため、以下、図18では、符号を付けずに共通の「ジッタデコーダ」として説明する。
【0132】
ジッタデコーダは、前段のFFからの入力値の受信を契機に動作を開始する。まず、ジッタデコーダは、入力値がXか否かを判断する(ステップS1801)。ステップS1801において、入力値がXであった場合(ステップS1801:Yes)、ジッタデコーダは、メタステーブル状態を発生させるため、0または1をランダムに出力する(ステップS1802)。
【0133】
一方、ステップS1801において、入力値がXではなかった場合(ステップS1801:No)、ジッタデコーダは、入力値をそのまま出力する(ステップS1803)。なお、ステップS1803では、入力値として0または1が得られるため、出力される信号は0または1になる。なお、ステップS1802,1803によって出力された信号は、後段のFFに入力される。
【0134】
その後、ジッタデコーダは、ステップS1802もしくはステップS1803による信号の出力を観測したか否かを判断する(ステップS1804)。ステップS1804では、出力が観測されるまで待機状態となり(ステップS1804:Noのループ)、出力が観測されると(ステップS1804:Yes)、ジッタデコーダは、上段のFFからの入力値の変化を観測したか否かを判断する(ステップS1805)。
【0135】
ジッタデコーダは、ステップS1805において、入力値の変化を観測するまで待機状態となる(ステップS1805:Noのループ)。そして、入力値の変化を観測すると(ステップS1805:Yes)、ジッタデコーダは、ステップS1801の処理に戻り、次のクロックサイクルに基づいた処理に移行する。以上説明した処理は、検証処理中であれば継続して行われる。また、検証処理が終了した場合や、途中で中断したい場合には、検証支援装置100の利用者や上位プログラムから終了指示が行われ、ジッタデコーダは、一連の処理を終了する。
【0136】
<ジッタサンプラの出力処理>
ジッタサンプラでは、出力処理として、入力値に応じたイベント発生処理と、受信クロックに応じたイベント発生処理とが並列して実行される。ジッタサンプラは送信側のFFから出力された出力信号の変化に応じてサンプルイベントを発生させると同時に、受信側のクロックイベントの発生に応じてサンプルイベントを発生する。すなわち、送信側の動作と受信側の動作との双方に連動して、サンプルイベントを発生させる。なお、図14,15のジッタサンプラ1420,1530は、それぞれ同じ動作を行うため、以下、図19,20では、符号を付けずに共通の「ジッタサンプラ」として説明する。
【0137】
図19は、ジッタサンプラの入力値に応じたイベント発生処理の手順を示すフローチャートである。図19の各処理を実行することによって、ジッタサンプラは、入力値の変化を契機にSAMPLEイベントを発生させることができる。
【0138】
図19において、ジッタサンプラは、まず、上段のFF、すなわち、送信側のFFからの入力値の変化を観測したか否かを判断する(ステップS1901)。ステップS1901において、ジッタサンプラは、入力値の変化を観測するまで待機状態となる(ステップS1901:Noのループ)。
【0139】
その後、入力値の変化を観測すると(ステップS1901:Yes)、ジッタサンプラは、変数NをN+1にインクリメントする(ステップS1902)。変数Nは、送信側のFFからの入力値の総数を意味する。なお、Nは、受信側のクロックイベント発生の度にリセットされるため、受信側の動作クロックの1クロックサイクルの間の入力値の総数となる。
【0140】
その後、ジッタサンプラは、1/Nの確率でSAMPLEイベントを発生する(ステップS1903)。SAMPLEイベントとは、現在のCDC信号値およびCDC信号値の変化状況の保存を指示するためのイベントである。その後、ジッタサンプラは、ステップS1901の処理に戻り、再度、SAMPLEイベントを発生させる。ステップS1903のように、1/Nの確率でSAMPLEイベントが発生されるため、1クロックサイクルの間に送信側のFFから入力された入力値の中のいずれか一つに起因してSAMPLEイベントが発生するための処理に移行する。最終的には1クロックサイクル内の最後(次の受信クロックイベント発生の直前)のSAMPLEイベントが意味を持つことになる。ステップS1903では1/Nの確率でSAMPLEイベントを発生させているため、何度目の入力値変化に対しても、1クロックサイクル内の最後のSAMPLEイベントが発生する確率は同じになる。
【0141】
図20は、ジッタサンプラの受信クロックに応じたイベント発生処理の手順を示すフローチャートである。図19の各処理を実行することによって、ジッタサンプラは、受信側のFFにおける受信クロックイベントの発生を契機にSAMPLEイベントを発生させることができる。これは、受信クロックサイクル毎の初期化処理を目的としている。
【0142】
図20において、ジッタサンプラは、まず、変数Nを0にリセットする(ステップS2001)。その後、ジッタサンプラは、受信側のFFにおいて、受信クロックイベントが発生したか否かを判断する(ステップS2002)。ステップS2002において、ジッタサンプラは、受信クロックイベントが発生するまで待機状態となる(ステップS2002:Noのループ)。
【0143】
そして、受信クロックイベントの発生が観測されると(ステップS2002:Yes)、ジッタサンプラは、SAMPLEイベントを発生する(ステップS2003)。SAMPLEイベントとは、上述したように、後段のFFへランダムな論理値を入力してメタステーブル状態を発生させるイベントである。その後、ジッタサンプラは、ステップS2001の処理に戻り、再度、SAMPLEイベントを発生させるための処理を開始する。
【0144】
以上説明したように、ジッタサンプラは、送信側のFFから入力されたあらたな入力値が観測されるタイミング、もしくは、受信側のFFにおける受信クロックイベントの発生を契機にSAMPLEイベントが発生する。受信側の1クロックサイクルの間に複数の入力値の変化が観測された場合には、その全ての変化タイミングの中から同じ確率で最終的なSAMPLEイベントが発生するため、検証内容の偏りを防ぐことができる。
【0145】
なお、以上説明した処理は、検証処理中であれば継続して行われる。また、検証処理が終了した場合や、途中で中断したい場合には、検証支援装置100の利用者や上位プログラムから終了指示が行われ、ジッタサンプラは、一連の処理を終了する。
【0146】
<各モデルを動作させた場合のタイミングチャート>
図21は、シミュレーションモデル1の動作例を示すタイミングチャートであり、図22は、シミュレーションモデル2の動作例を示すタイミングチャートである。次に、図21,22を用いて、シミュレーションモデル1,2を実行させた場合の各回路素子の動作例について説明する。
【0147】
図21のように、シミュレーションモデル1において、送信側のFF1401からの出力信号DAに変化が起こった場合(T1)、ジッタディテクタ1411によって出力信号DAの変化が検出される。ジッタディテクタ1411では、出力信号DAの変化を検出すると、後段のFFに報知するための報知信号JAを一定時間Tjの間出力する。また、出力信号DAの変化を観測したジッタサンプラ1420は、(1/1の確率で)SAMPLEイベントを発生させる。
【0148】
また、送信側のFF1401からの出力信号DBに変化が起こった場合(T2)、ジッタディテクタ1412によって出力信号DBの変化が検出される。ジッタディテクタ1412では、出力信号DBの変化を検出すると、後段のFFに報知するための報知信号JBを一定時間Tjの間出力する。また、ジッタサンプラ1420は、出力信号DBの変化を観測したが、1/2の抽選の結果、SAMPLEイベントを発生させなかった。
【0149】
また、ジッタサンプラ1420は、受信側のFFにおける受信クロックイベントの発生に基づいて、SAMPLEイベントを発生させている。具体的には、CLK2のサイクル1の立ち上がりのタイミング(T3)、サイクル2の立ち上がりのタイミング(T4)、および、サイクル3の立ち上がりのタイミング(T5)にそれぞれSAMPLEイベントを発生させている。
【0150】
一方、図22は、シミュレーションモデル2における各回路素子の動作を表している。送信側のFF1501からの出力信号DAに変化が起こった場合(T6)、ジッタエンコーダ1511は、入力値の変化を観測して、一定時間Tjの間、ランダムな論理値(X値)を出力する。ジッタサンプラ1530は、出力信号DAの変化を観測すると、(1/1の確率で)SAMPLEイベントを発生させる。
【0151】
出力信号DAの変化に起因したSAMPLEイベントの発生によって、FF1503は、ランダムな論理値(X値)を出力する。
【0152】
また、送信側のFF1502からの出力信号DBに変化が起こった場合(T7)、ジッタエンコーダ1512は、入力値の変化を観測して、一定時間Tjの間、ランダムな論理値(X値)を出力する。ジッタサンプラ1530は、出力信号DBの変化を観測するが、1/2の抽選の結果、SAMPLEイベントを発生させなかった。
【0153】
また、ジッタサンプラ1530は、受信側のFFにおける受信クロックイベントの発生に基づいて、SAMPLEイベントを発生させている。具体的には、CLK2のサイクル1の立ち上がりのタイミング(T8)、サイクル2の立ち上がりのタイミング(T9)、および、サイクル3の立ち上がりのタイミング(T10)にそれぞれSAMPLEイベントを発生させている。
【0154】
したがって、CDCを含む検証対象回路であっても、各回路ブロックの周波数の設定にかかわらず、送信側の回路素子からの出力信号と、受信側の回路素子の受信クロックイベントに基づいて、メタステーブル状態の回路素子の振る舞いを検証することができる。
【0155】
以上説明したように、検証支援プログラム、検証支援装置および検証支援方法によれば、CDCの送信側の素子の出力値のうち、受信側の1クロックの間に検出された何れか1つのタイミングで発生した信号変化の影響を選択して、受信側のクロックに合わせて出力する。したがって、漏れなくメタステーブル状態が再現されるため効率的にメタステーブル状態に対して回路が正しく動作するかを検証できる。
【0156】
また、上記技術では、さらに、検証対象回路の中のCDCが発生する非同期箇所の指定を受け付ける機能を備えてもよい。また、上記技術では、さらに、回路設計の記述内容に基づいて、非同期箇所を自動抽出する機能を備えてもよい。上述のような各機能を備えることによって、非同期箇所の絞り込みが容易になり、習熟度の低い利用者であっても、効率的に検証を行うことができる。
【0157】
また、上記技術は、さらに、非同期箇所の中から、検証対象となる送信側の回路素子と受信側の回路素子とを個別に指定する機能を備えてもよい。上述の機能を備えた場合、メタステーブル状態は、指定された回路素子のみを対象として発生させられる。したがって、指定箇所に絞った高精度な検証を実現することができる。
【0158】
なお、本実施の形態で説明した検証支援方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。本検証支援プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVDなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本検証支援プログラムは、インターネットなどのネットワークを介して配布してもよい。
【0159】
また、本実施の形態で説明した検証支援装置100は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けIC(以下、単に「ASIC」と称す。)やFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。具体的には、たとえば、上述した検証支援装置100の機能(受付部1001〜指定部1006)をHDL記述によって機能定義し、そのHDL記述を論理合成してASICやPLDに与えることにより、検証支援装置100を製造することができる。
【符号の説明】
【0160】
100 検証支援装置
110 論理シミュレータ
1001 受付部
1002 検出部
1003 入力部
1004 出力部
1005 抽出部
1006 指定部
1010 シミュレーションモデル生成部
【技術分野】
【0001】
この発明は、検証対象回路の論理検証を支援する検証支援プログラム、検証支援装置および検証支援方法に関する。
【背景技術】
【0002】
従来より、独立したクロックソースを持つ回路ブロック間の信号の受け渡しが発生するクロックドメイン・クロッシング(Clock Domain Crossing:以下「CDC」と呼ぶ)を含む場合、クロックドメインの違いを考慮した検証が必要になる。すなわち、クロックサイクルの異なる回路間で受け渡された信号によって受信側の回路ブロックが正常に動作するのかを検証しなければならない。
【0003】
特に、近年では、回路の高集積化により、1つの検証対象回路内に、数千のCDCを含む論理設計も珍しくない。CDCによって、非同期となる箇所では、受信側の回路ブロックにおけるセットアップタイム違反や、ホールドタイム違反などによるメタステーブル状態の発生が避けられない。したがって、あらかじめ、メタステーブル状態が発生しても誤動作を起こさないかを検証する必要がある。
【0004】
そこで、CDC間での信号の受け渡しの仕組みに関する検証を行う手段として、異なるクロックドメインから受信した信号のランダム性を論理シミュレーションの中で模擬する「CDCシミュレーション」に関する技術が開示されている。たとえば、CDCの送信側の各回路素子から出力された出力信号を検出すると、任意の値のジッタを所定時間、発生させて受信側の回路素子へ入力する検証支援装置が開示されている(たとえば、下記特許文献1〜3参照。)。ジッタの入力によって、CDC間の信号の受け渡しによるメタステーブル状態の発生が擬似的に再現される。すなわち、メタステーブル状態が発生した場合にCDCの受信側の回路素子が正しく動作するかを検証することができる。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2009−187119号公報
【特許文献2】特開2009−187344号公報
【特許文献3】特開2009−93635号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、上述した従来技術の場合、CDCの送信側の動作クロックの周期が、受信側の動作クロックの周期よりも短い場合に検証漏れが起こりやすいという問題があった。たとえば、受信側の動作クロックの1サイクルの間に、送信側の動作クロックが複数サイクル実行され、複数の出力信号が出力されることがある。上述のような場合、受信側の動作クロックが立ち上がる直前に送信側の回路素子から出力された出力信号に基づいたジッタのみが受信側の各回路素子へ入力されることになる。
【0007】
すなわち、受信側の動作クロックの立ち上がりの直前に送信側から出力された出力信号以外の信号の変化は受信側の回路素子に反映されない。結果として、メタステーブル状態の発生例の検証内容に漏れが生じてしまい、検証効率が低くなってしまうという問題がある。
【0008】
また、上述のように、送信側の回路素子から出力される出力信号のうち、様々なタイミングで出力された出力信号がそれぞれ受信側の回路素子の動作にどのような影響を与えるかを検証するには、各タイミングで出力された出力信号の影響が反映されるまでCDCシミュレーションを繰り返す必要がある。このため、多くのシミュレーション回数が必要となり、論理検証にかかる作業負担および作業時間が増大化し、ひいては設計期間の長期化を招くという問題がある。
【0009】
1つの側面では、本発明は検証漏れの少ない効率的な検証の実現を支援する検証支援プログラム、検証支援装置および検証支援方法を提供することを目的とする。
【課題を解決するための手段】
【0010】
1つの案では、本検証支援プログラム、検証支援装置および検証支援方法は、検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所における受信側の1クロックサイクルの間に、送信側の各回路素子から出力された信号の変化を検出し、前記1クロックサイクル後の前記受信側の動作クロックの立ち上がりを契機に、信号の変化が検出された時刻の中のいずれか1つの時刻に変化が検出された信号をランダムな論理値に置き換えて前記受信側の各回路素子へ入力し、前記いずれか1つの時刻に変化が検出されなかった信号を前記受信側の各回路素子へ入力し、入力に応じた前記受信側の各回路素子の動作結果を出力する。
【発明の効果】
【0011】
本検証支援プログラム、検証支援装置および検証支援方法によれば、検証漏れの少ない効率的な検証の実現を支援することができるという効果を奏する。
【図面の簡単な説明】
【0012】
【図1】本実施の形態にかかる検証支援処理の一例を示す説明図である。
【図2】CDC信号とメタステーブル状態との関係を示す説明図である。
【図3】従来の論理シミュレーションの一例を示す説明図である。
【図4】従来のCDCシミュレーションの一例を示す説明図である。
【図5】CDCジッタの発生例を示すタイミングチャートである。
【図6】一定時間Tjが短い場合の動作例を示すタイミングチャートである。
【図7】一定時間Tjが長い場合の動作例を示すタイミングチャートである。
【図8】本実施の形態にかかる検証支援処理を利用した場合の信号伝播例を示すタイミングチャートである。
【図9】検証支援装置のハードウェア構成を示すブロック図である。
【図10−1】検証支援装置の機能的構成(その1)を示すブロック図である。
【図10−2】検証支援装置の機能的構成(その2)を示すブロック図である。
【図11−1】検証支援装置による検証支援処理の手順(その1)を示すフローチャートである。
【図11−2】検証支援装置による検証支援処理の手順(その2)を示すフローチャートである。
【図12】従来のシミュレーションモデルの構成例(その1)を示す回路図である。
【図13】従来のシミュレーションモデルの構成例(その2)を示す回路図である。
【図14】本実施例にかかるシミュレーションモデル1の構成を示す回路図である。
【図15】本実施例にかかるシミュレーションモデル2の構成を示す回路図である。
【図16】ジッタディテクタの出力処理の手順を示すフローチャートである。
【図17】ジッタエンコーダの出力処理の手順を示すフローチャートである。
【図18】ジッタデコーダの出力処理の手順を示すフローチャートである。
【図19】ジッタサンプラの入力値に応じたイベント発生処理の手順を示すフローチャートである。
【図20】ジッタサンプラの受信クロックに応じたイベント発生処理の手順を示すフローチャートである。
【図21】シミュレーションモデル1の動作例を示すタイミングチャートである。
【図22】シミュレーションモデル2の動作例を示すタイミングチャートである。
【発明を実施するための形態】
【0013】
以下に添付図面を参照して、この発明にかかる検証支援プログラム、検証支援装置および検証支援方法の好適な実施の形態を詳細に説明する。
【0014】
図1は、本実施の形態にかかる検証支援処理の一例を示す説明図である。本実施の形態では、クロックドメイン・クロッシングを含む論理設計に対する検証品質および検証効率の向上を図る手法の一例について説明する。上述したように、CDC(クロックドメイン・クロッシング)とは、異なる動作クロックが設定されたクロックドメイン間でデータ信号が受け渡されることによって、動作クロックの乗り換えが起こることである。なお、以下の説明では、CDCの起こる箇所を非同期箇所という。
【0015】
また、本実施の形態にかかる検証支援処理は、たとえば、図1に例示した検証支援装置100を利用してCDCの信号の受け渡しで回路素子が正常に動作するかを検証する。具体的には、検証支援装置100は、論理シミュレータ110によるCDCシミュレーションによってメタステーブル状態の検証を行うことができる。
【0016】
論理シミュレータ110では、検証対象回路の回路情報101を受け付けると、ソフトウェアによって検証対象回路を構成する。論理シミュレータ110によって構成された検証対象回路にはテストパターンが入力され、入力に応じた動作結果102が出力される。利用者は、論理設計通りの動作結果102を得られたか否かに基づいて、検証対象回路のバグの有無を検証する。
【0017】
検証支援装置100の場合、CDCに相当する回路ブロック間の動作クロックが同期していない非同期箇所については、メタステーブル状態が発生しても正しく動作できるかを検証する必要がある。したがって、検証支援装置100は、CDCの検証に特化したCDC検証支援機能を備えている。
【0018】
たとえば、図1の場合、検証対象回路に含まれている回路ブロック1〜4のうち、回路ブロック2と回路ブロック3との間は動作クロックが異なるため、非同期箇所となる。したがって、検証支援装置100は、動作クロックが共通の同期箇所については、論理シミュレータ110によって通常のシミュレーションを実行し、非同期箇所についてはCDC検証支援機能を利用してメタステーブル状態の検証を行う。
【0019】
(CDC信号とメタステーブル状態との関係)
図2は、CDC信号とメタステーブル状態との関係を示す説明図である。非同期箇所でデータを転送する場合、受信側のクロックドメインでは入力信号が非同期信号となるため、様々な問題が発生する可能性がある。また、非同期箇所におけるデータ信号の受け渡しが正常に行われなければ、その非同期箇所よりも後段の処理に障害が発生してしまう場合がある。
【0020】
したがって、論理設計の段階において、非同期箇所の動作を検証してデータ信号の受け渡しが正常に行われているかどうかを確認することが望ましい。なぜなら、できる限り早い段階で非同期箇所に潜む問題を把握し、適切な回路修正を行うことが設計期間の短縮化につながるからである。
【0021】
そこで、図2を用いて、非同期箇所におけるCDC信号とメタステーブル状態との関係について説明する。CDC信号とは、動作クロックが異なる回路ブロック間で転送される信号を意味する。図2のように前段の回路ブロック210は、FF1を備え、後段の回路ブロック220はFF2と、FF3とを備えている。そして、回路ブロック210と回路ブロック220とは、周期の異なるクロックドメインによって動作する。したがって、図2の場合では、回路ブロック210のFF1から回路ブロック220のFF2へ入力される信号がCDC信号となる。
【0022】
一般的に、FFなどデジタル信号を扱う回路には、セットアップタイムやホールドタイムなどの制約が設けられている。セットアップタイムとは、入力された信号を確実に取り込むため、入力信号の状態を継続する必要のある時間である。また、ホールドタイムとは、出力した信号を確実に出力先の回路素子へ伝播させるために、出力信号の状態を継続する時間である。
【0023】
ところが、CDC信号の場合、図2のように、クロックサイクルの違いによって、セットアップタイム違反や、ホールドタイム違反が起こってしまうことが多い。セットアップタイム違反や、ホールドタイム違反が起こると、CDC信号の伝播が不確実になり、図2のFF2の出力信号S2のように、信号の値が不安定なメタステーブル状態が発生してしまう。
【0024】
しかしながら、CDCの構成上、セットアップタイム違反や、ホールドタイム違反は避けられない。そこで、CDCを含む回路の場合、メタステーブル状態が発生しても誤動作が起こらないかを検証しておく必要がある。また、検証によって誤動作が発生する箇所を見つけた場合には、設計を変更して、誤動作を回避することができる。
【0025】
図3は、従来の論理シミュレーションの一例を示す説明図である。また、図4は、従来のCDCシミュレーションの一例を示す説明図である。従来の論理シミュレーションの場合、図3に例示したシミュレーションモデル300のように、回路構成をそのままソフトウェア的に構成している。シミュレーションモデル300の各回路素子の動作内容は、タイミングチャート310のように、メタステーブル状態が発生することなく、誤動作の有無を検証することができない。
【0026】
一方、図4のようにCDCシミュレーションの場合、CDCによるメタステーブル状態の発生を再現するために、シミュレーションモデル400のように、実際の回路素子(図4の場合はFF2)に換わって、メタステーブル状態の発生を再現するCDCモデルを含んだ構成になっている。CDCモデルは、タイミングチャート410に示したように、上段のFF1からの入力信号S1に応じて、1サイクル分のランダムな論理値(CDCジッタ)を出力して、メタステーブル状態を再現する。
【0027】
図5は、CDCジッタの発生例を示すタイミングチャートである。たとえば、シミュレーションモデル500のような回路について検証したい。シミュレーションモデル500は、送信側のFF501と、受信側のFF502とのクロックドメインが異なっている。したがって、送信側のFF501の出力信号Dの変化を観測して、受信側のFF502からの出力信号QとしてCDCジッタを発生させる。
【0028】
なお、実際にCDCジッタを発生させるためには、図4に例示したように、受信側のFF502に換わって、CDCモデルを用意する必要がある。しかしながら、図5のでは、検証対象回路の構成が明確になるように、便宜上、CDCモデルに置き換える前の検証対処回路の構成を示している。具体的には、図5のタイミングチャートに示しているように、送信側のFF501の出力信号Dの変化を観測してから、一定時間Tj以内に受信側のクロックイベントが発生した場合に受信側のFF502の出力信号QにCDCジッタを発生させる。クロックイベントの発生とは、受信側のFF502の動作クロックの立ち上がりに起因した受信側のFF502の動作が開始された状態を意味する。
【0029】
上述したように、従来のCDCモデルでは、送信側のFFから出力される信号の変化の後、一定時間Tj以内に、受信側のFFにクロックイベントが発生するか否かが、CDCジッタ生成のトリガとなっている。すなわち、適切なタイミングでCDCジッタを発生させるには、一定時間Tjの設定が重要になる。ところが、送信側のクロックドメインと受信側のクロックドメインとの動作クロックの違いによっては、適切にCDCジッタを発生させるような一定時間Tjの設定が困難な場合があった。
【0030】
図6は、一定時間Tjが短い場合の動作例を示すタイミングチャートである。図6のように、受信側の動作クロックの周期Trと比較して一定時間Tjを小さく設定すると、CDCジッタの発生確率が低下してしまう。すなわち、受信側の動作クロックの周期Trが比較的長いため、一定時間Tjの間に、受信側の動作クロックの立ち上がりが起こらない可能性が高い。
【0031】
すなわち、CDCジッタの発生確率が低下してしまう。実際には送信側のFF501からの出力信号Dに変化が生じており、受信側のFF502からの出力がメタステーブル状態を起こす可能性があるにもかかわらず、動作内容を検証できない。結果として、検証効率の低下を招いてしまう。
【0032】
図7は、一定時間Tjが長い場合の動作例を示すタイミングチャートである。一定時間Tjの設定は、受信側の動作クロックの周期だけでなく、送信側の動作クロックの周期も、考慮しなければならない。図7のように、送信側の動作クロックの周期Tsより一定時間Tjを大きく設定すると、実際には起こりえないビットパターンが起こってしまう。
【0033】
具体的には、図7のように、一定時間Tjが、送信側の動作クロックより大きい長さに設定されると、複数の動作クロックのタイミングで出力された信号の変化を1つの動作クロックのタイミングで出力された信号として誤って判断されてしまう可能性がある。
【0034】
図7のシミュレーションモデル700のように、送信側の回路素子としてFF701,703を備え、受信側の回路素子としてFF702,704を備えるような、複数の回路素子が用意されている回路の場合には、動作に制約が設けられていることが多い。図7のシミュレーションモデル700であれば、たとえば、受信側のFF702,704それぞれから同時に出力されないような制約が設けられている。したがって、実際の回路の動作では、(QA,QB)=(1,1)というパターンは起こりえない。
【0035】
ところが、シミュレーションモデル700の場合、一定時間Tjが、送信側の動作クロック(CLK1)と比較して長く設定されている。結果として、開始タイミングの異なる複数の一定時間Tjに重なりが生じ、その間に受信側のクロックイベントが発生してしまうことがあった。図7のタイミングチャートでは、一定時間Tjが長く設定されており、送信側のFF701からの出力信号DAの変化と、FF703からの出力信号DBの変化とがそれぞれ受信側のFF702,704におけるCDCジッタの出力を起こしてしまっている。上述したように、(QA,QB)=(1,1)というパターンは起こりえないが、QAとQBとが同時に出力状態となってしまい、各回路素子の動作を適切に検証できない。
【0036】
また、(QA,QB)=(1,1)というパターンが起こらないように、受信側の動作クロックの立ち上がりの直前に検出した信号のみを対象としてCDCジッタを発生させるように設定してもよいが、複数の出力信号のうち、一部の出力信号のみが検証されることになってしまう。たとえば、図7の場合であれば、送信側のFF703からの出力信号DBによって発生するメタステーブル状態のみが検証されることになってしまう、結果として、検証内容に偏りが生まれ、検証漏れを起こしてしまう。
【0037】
以上説明したように、CDCモデルを挿入する場合、一定時間Tj<受信側の動作クロックの周期Trとなると、検証効率が低下し、送信側の動作クロックの周期Ts<一定時間Tjのとき誤動作が発生してしまう。したがって、送信側の動作クロックの周期Tsが受信側の動作クロックの周期Trよりも短いCDCの場合、上述の問題を解消できるような一定時間Tjの設定が存在しない。結果として、Ts<TrのようなCDCについては、CDCモデルを利用しても網羅的な検証が行えないという問題があった。
【0038】
そこで、本実施の形態にかかる検証支援処理では、受信クロックの立ち上がり時刻を仮想的にずらすことで、他のタイミングの送信信号変化が受信値に影響するケースも効率良くテストできるようにする。具体的には、CDCの送信側の回路素子と受信側の回路素子のうち、互いに関連のある複数の送信信号をグループ化しておく。そして、グループ単位で送信側の各回路素子から出力される出力信号の変化を観測し、観測された信号変化時刻の中のいずれか一つを仮想的にずらされた受信クロックの立ち上がり時刻として設定する。どの信号変化時刻を選択するかはランダムに決定するため、偏りのない効率的な検証が可能になる。
【0039】
図1の説明に戻り、検証支援装置100が上述した検証を行う場合について説明する。図1では、上述したように、回路ブロック2(クロックドメインA)から回路ブロック3(クロックドメインB)への信号の伝播がCDCに相当する。従来のCDCシミュレーションでは、回路ブロック2と回路ブロック3との間にCDCモデルを挿入してメタステーブル状態を発生させていた。
【0040】
しかしながら、検証支援装置100では、回路ブロック2からの出力信号に応じて、回路ブロック3に対してメタステーブル状態を起こすCDC検証支援機能が設けられている。CDC検証支援機能では、まず、クロックドメインBのクロックサイクル毎に、回路ブロック2からの出力信号変化を観測する。1回以上の出力信号変化があった場合にはその変化時刻のいずれか一つをランダムに選択し、その時の出力信号値をサンプリングする(ステップS111)。
【0041】
次に、CDC検証支援機能は、ステップS111のサンプリング結果からその時刻に値変化のあった信号(回路ブロック2からの出力信号)の値をランダムな論理値に置換した後、クロックドメインBの動作クロックの立ち上がりに合わせて、回路ブロック3へ入力する(ステップS112)。すなわち、ステップS112では、回路ブロック2から出力された出力信号の中でサンプリング時刻に値変化があったものをランダムな論理値に置き換えて入力することによって、回路ブロック3にDCDジッタを発生させることができる。
【0042】
従来のCDCシミュレーションであれば、送信側の回路素子からの出力信号が変化した後、一定時間Tjの間に受信側のクロックイベントが起こったときだけ、CDCジッタを発生させていた。しかしながら、本実施の形態にかかる検証支援装置100の場合には、送信側の回路素子からの出力信号を受信側の動作クロックの1クロックサイクルの間、観測する。そして、観測によって得られた出力信号変化時刻の中のいずれか一つをサンプリング時刻として、受信側の回路素子へ入力することによって、一定時間Tjに関係なく広範囲の出力信号変化に対応するCDCジッタを発生させる。
【0043】
図8は、本実施の形態にかかる検証支援処理を利用した場合の信号伝播例を示すタイミングチャートである。図8のタイミングチャートは、シミュレーションモデル700のような構成の場合、受信側の動作クロックCLK2の1クロックサイクルの間に、DAの変化とDBの変化の2つの出力信号変化が観測されている。したがって、そのいずれか一方の信号変化の影響を選択して、後段の回路素子へ伝播する。
【0044】
たとえば、選択例810の場合、CLK1のサイクル2にDAから出力された出力信号を利用して、受信側の回路素子へ入力している。DAに対応する受信側のFF出力QAに、ランダムな論理値が入力される。また、選択例820の場合、CLK1のサイクル3にDBから出力された出力信号を利用して、受信側の回路素子へ入力している。DBに対応する受信側のFF出力QBに、ランダムな論理値が入力される。
【0045】
図8のように、選択例810の場合も、選択例820の場合も、信号変化時刻の一方だけを採用しているため、(QA,QB)=(1,1)となる制約違反を回避することができる。また、受信側のクロックサイクルの周期の間、CDC信号を観測し続けるため、CDC信号の変化の検出漏れを抑えることができる。以上説明したように、本実施の形態にかかる検証支援装置100を利用することによって、CDCを含む論理設計であっても、検証漏れの少ない効率的な検証の実現を支援することができる。
【0046】
以下に、上述したような本実施の形態にかかる検証支援処理を実現する、検証支援装置100の具体的な構成例や処理内容について、詳しく説明する。
【0047】
(検証支援装置のハードウェア構成)
図9は、検証支援装置のハードウェア構成を示すブロック図である。図9において、検証支援装置100は、CPU(Central Processing Unit)901と、ROM(Read‐Only Memory)902と、RAM(Random Access Memory)903と、磁気ディスクドライブ904と、磁気ディスク905と、光ディスクドライブ906と、光ディスク907と、ディスプレイ908と、I/F(Interface)909と、キーボード910と、マウス911と、スキャナ912と、プリンタ913と、を備えている。また、各構成部はバス900によってそれぞれ接続されている。
【0048】
ここで、CPU901は、検証支援装置100の全体の制御を司る。ROM902は、ブートプログラムなどのプログラムを記憶している。RAM903は、CPU901のワークエリアとして使用される。磁気ディスクドライブ904は、CPU901の制御にしたがって磁気ディスク905に対するデータのリード/ライトを制御する。磁気ディスク905は、磁気ディスクドライブ904の制御で書き込まれたデータを記憶する。
【0049】
光ディスクドライブ906は、CPU901の制御にしたがって光ディスク907に対するデータのリード/ライトを制御する。光ディスク907は、光ディスクドライブ906の制御で書き込まれたデータを記憶したり、光ディスク907に記憶されたデータをコンピュータに読み取らせたりする。
【0050】
ディスプレイ908は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ908は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【0051】
インターフェース(以下、「I/F」と略する。)909は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク914に接続され、このネットワーク914を介して他の装置に接続される。そして、I/F909は、ネットワーク914と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F909には、たとえばモデムやLANアダプタなどを採用することができる。
【0052】
キーボード910は、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス911は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【0053】
スキャナ912は、画像を光学的に読み取り、検証支援装置100内に検証対象回路に関連する画像データや、検証処理に関連する画像データを取り込む。なお、スキャナ912は、OCR(Optical Character Reader)機能を持たせてもよい。また、プリンタ913は、画像データや文書データを印刷する。プリンタ913には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【0054】
(検証支援装置の機能的構成)
図10−1は、検証支援装置の機能的構成(その1)を示すブロック図である。検証支援装置100は、受付部1001と、検出部1002と、入力部1003と、出力部1004と、抽出部1005と、指定部1006と、非同期箇所のCDCシミュレーションを行う論理シミュレータ110と、を含む構成である。
【0055】
上述の制御部となる機能(受付部1001〜指定部1006)は、具体的には、たとえば、図9に示したROM902、RAM903、磁気ディスク905、光ディスク907などの記憶装置に記憶されたプログラムをCPU901に実行させることにより、または、I/F909により、その機能を実現する。また、論理シミュレータ110は、回路情報101に記載された回路の構成に基づいて、検証対象回路をソフトウェア上で実現し各回路素子の動作内容をシミュレートすることができる。
【0056】
受付部1001は、検証対象となる非同期箇所(CDC発生箇所)の指定を受け付ける機能を有する。具体的には、受付部1001は、検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所の指定を受け付ける。非同期箇所とは、検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する箇所を意味する。非同期箇所は、利用者もしくは上位プログラムからの指定情報1000を受け付けることによって指定される。なお、受け付けた非同期箇所は、RAM903、磁気ディスク905、光ディスク907などの記憶領域に記憶される。
【0057】
検出部1002は、論理シミュレータ110によって実行された検証対象回路(シミュレーションモデル)の動作を観測し、所定期間ごとに、送信側の回路素子からの出力信号の変化を検出する機能を有する。具体的には、検出部1002は、受付部1001によって受け付けた非同期箇所における受信側の1クロックサイクルの間に、論理シミュレータ110の送信側の各回路素子から出力された信号がどの時刻で変化したかを検出する。
【0058】
なお、検出結果は、RAM903、磁気ディスク905、光ディスク907などの記憶領域に記憶される。なお、検出部1002による検出結果は、後述する入力部1003によって受信側の回路素子へのサンプリング値の入力に利用された後は、リセットされ、次の1クロックサイクルを対象とした出力信号の検出処理に移行する。
【0059】
入力部1003は、検出部1002による検出結果に基づいて、論理シミュレータ110の受信側の各回路素子へサンプリング値を入力する機能を有する。具体的には、入力部1003は、検出部1002による検出対象となった1クロックサイクルが経過した後の受信側の動作クロックの立ち上がりを契機に入力処理を行う。
【0060】
入力処理の際に、入力部1003は、検出部1002によって1クロックサイクルの間に出力信号の変化が検出された時刻の中のいずれか1つの時刻をサンプリング時刻とし、サンプリング時刻に、出力信号の値をランダムな論理値に置換した後に、受信側の各回路素子へ入力する。
【0061】
すなわち、送信側の回路素子として素子1,2がある場合、検出部1002では、素子1からの出力信号の変化と素子2からの出力信号の変化とがそれぞれ検出される。そして、入力部1003は、検出部1002が出力信号の変化を検出した時刻の中のいずれか1つの時刻を選択して、選択結果に応じて出力信号の値をそのまま、もしくは、ランダムな論理値に変換して後段の各回路素子(ここでは、受信側の各回路素子)へ入力する。
【0062】
たとえば、入力部1003によって、素子1からの出力信号の変化が検出された時刻Tを選択した場合、当然のことながら時刻Tにおける素子1からの出力信号は変化している。したがって、入力部1003は、素子1からの出力信号をランダムな論理値に置き換えて対応する受信側の各回路素子へ入力する。また、時刻Tにおける素子2からの出力信号は変化していない。したがって、入力部1003は、素子2からの出力信号の値をそのまま対応する受信側の各回路素子へ入力する。
【0063】
ここで、受信側の1クロックサイクル中に検出部1002によって検出された信号変化を全て記録した後にサンプリングを実行しても良いが、信号変化を観測する毎に確率的に再サンプリングを実行してサンプリング値を更新しても良い。このとき、N回目の信号変化では1/Nの確率で再サンプリングを実行するように構成すれば偏りのないサンプリング結果が得られる。
【0064】
また、入力部1003は、メタステーブル状態の発生時間に相当する所定時間の間、ランダムな論理値を継続して出力することもできる。なお、入力内容は、RAM903、磁気ディスク905、光ディスク907などの記憶領域に記憶される。
【0065】
出力部1004は、受信側の回路素子の動作結果102を出力する機能を有する。論理シミュレータ110は、入力部1003からのランダムな論理値の入力によって、非同期箇所の受信側の各回路素子にメタステーブル状態が発生した場合と同等の振る舞いが起こっている。
【0066】
したがって、出力部1004は、メタステーブル状態が発生した場合の受信側の回路素子の動作結果102を出力していることになる。出力形式としては、たとえば、ディスプレイ908への表示、プリンタ913への印刷出力、I/F909による外部装置への送信がある。また、RAM903、磁気ディスク905、光ディスク907などの記憶領域に記憶することとしてもよい。
【0067】
検証支援装置100の利用者は、出力部1004から出力された動作結果102が設計内容に準拠しているかを判断することによって、メタステーブル状態が発生しても非同期箇所の受信側の回路素子が正しく動作しているか検証することができる。検証によって、受信側の回路素子が正しく動作していることがわかった場合には、そのまま後段の製造工程に移行することができる。
【0068】
一方、受信側の回路素子が正しく動作していないとわかった場合には、設計内容を見直して、正しく動作する確認がとれるまで、検証を繰り返せばよい。上述のように、検証対象回路の非同期箇所の動作を漏れなく検証することによって、後段の製造工程によって誤動作が起こり、手戻りするような事態を回避することができる。
【0069】
また、検証支援装置100は、後述する抽出部1005および指定部1006を備えることによって、検証箇所の絞り込みを可能にすることができる。したがって、利用者にとって、より利用し易い検証支援装置100を実現することができる。
【0070】
抽出部1005は、検証対象回路の中から非同期箇所を抽出する機能を有する。具体的には、抽出部1005は、検証対象回路の回路情報101に記述された回路設計に基づいて、検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所を抽出する。抽出部1005によって、非同期箇所が抽出された場合、検出部1002は、抽出部1005によって抽出された非同期箇所の送信側の各回路素子を対象に、出力信号を検出する。なお、抽出結果は、RAM903、磁気ディスク905、光ディスク907などの記憶領域に記憶される。
【0071】
上述のように、抽出部1005によって非同期箇所を自動的に抽出する機能を備えることによって、検証支援装置100の利用者の検証の習熟度にかかわらず、CDCの発生する箇所を効率的に検証することができる。
【0072】
指定部1006は、非同期箇所の中から、送信側の回路素子の指定と、受信側の回路素子の指定とを受け付ける機能を有する。指定部1006によって指定を受け付けた場合、検出部1002は、送信側の回路素子の内、指定された回路素子から出力される出力信号の変化を検出する。また、入力部1003も、指定された回路素子へ信号値を入力する。回路素子は、利用者や上位システムからの指定情報1000を受け付けることによって指定される。
【0073】
上述のように、指定部1006によって回路素子を指定することによって、検証支援装置100は、指定された素子に限定して動作結果102を得ることができる。なお、回路素子の指定対象となる非同期箇所は、受付部1001によって受け付けた非同期箇所であってもよいし、抽出部1005によって抽出された非同期箇所であってもよい。なお、指定結果は、RAM903、磁気ディスク905、光ディスク907などの記憶領域に記憶される。
【0074】
図10−1に例示した検証支援装置100の場合、検出部1002によって非同期箇所の送信側の回路素子からの出力信号の変化を検出した検出結果の中から、ランダムに1つを選択する。そして、入力部1003によって、選択された検出結果の値をランダムな論理値に置換して対応する受信側の回路素子へ入力することによって、メタステーブル状態に受信側の回路素子が正常に動作するかを検証することができる。
【0075】
図10−2は、検証支援装置の機能的構成(その2)を示すブロック図である。図10−2に示した検証支援装置100は、本実施の形態にかかる検証支援処理を実現するための他の機能部の構成例を示している。図10−2に示した検証支援装置100の場合、検出部1002および入力部1003に替わってシミュレーションモデル生成部1010を備えた構成になっている。すなわち、シミュレーションモデル生成部1010は、検出部1002および入力部1003に相当の機能を実現する回路のシミュレーションモデルを生成する機能を有している。
【0076】
シミュレーションモデル生成部1010では、図10−1にて説明した検出部1002と入力部1003との機能を実現する素子を検証対象回路の非同期箇所に挿入したシミュレーションモデルを生成する。具体的には、あらかじめ各種メモリなどの記憶装置に記憶された第1〜3の素子の設計情報を読み出して、非同期箇所の送信側の各回路素子と受信側の各回路素子との間に設定することによってシミュレーションモデルが生成される。
【0077】
第1の素子は、前段から出力された信号の変化を検出する機能を有した素子である。また、第2の素子は、第1の素子によって信号の変化が検出された時刻に前段から出力された信号の値を保持する機能を有した素子である。そして、第3の素子は、後段の動作クロックの立ち上がりを契機に第1の素子によって信号の変化が検出された時刻の中のいずれか1つの時刻に第2の素子に保持された値を後段に入力する機能を有した素子である。また第3の素子は、第1の素子によって変化が検出された値をランダムな論理値に置き換えて後段に入力する機能も有している。
【0078】
したがって、シミュレーションモデル生成部1010では、抽出部1005によって、検証対象回路の非同期箇所が抽出されると、まず、特定機能によって、非同期箇所における送信側の各回路素子と、受信側の各回路素子とを特定する。その後、シミュレーションモデル生成部1010は、第1の素子の前段に送信側の各回路素子を設定して、第1の素子による送信側の各回路素子からの出力信号の変化の検出を実現する。
【0079】
また、シミュレーションモデル生成部1010は、第3の素子の後段に受信側の各回路素子を設定して第3の素子による入力を実現する。具体的には、第1の素子によって信号の変化が検出されたいずれか1つの時刻に第2の素子に保持された値およびランダムな値を、第3の素子から受信側の各回路素子に入力させる。上述のようにいずれか1つの時刻として選択された時刻に変化した出力信号についてはランダムな論理値、変化していない出力信号についてはそのままの値が入力される。
【0080】
上述した第1〜3の素子としては、公知の回路素子を利用してもよいし、利用者があらたに設計した回路素子を利用してもよい。後述する実施例1,2では、第1の素子としてジッタサンプラ、第2の素子としてFF、第3の素子としてFFに保持した値とランダム値とのいずれかを入力するセレクタが利用されている。
【0081】
また、シミュレーションモデル生成部1010は、従来のCDCモデル生成ツールによって生成されたシミュレーションモデルに、上述したジッタサンプラ、FFなど(後述する実施例1,2の場合、セレクタはCDCモデル生成ツールによって作成される)の回路素子を追加することによって本実施の形態にかかるシミュレーションモデルを生成することができる。CDCモデル生成ツールは、回路情報101に記載された素子同士の接続やクロックドメインの設定に基づいて、CDCモデルを作成することができる。
【0082】
また、ジッタサンプラは、検出部1002相当の処理を実行する回路素子である。そして、FFには、送信側の回路素子からの出力信号の変化についての検出結果が格納される。検出された出力信号の変化は、ジッタサンプラからの指示に応じて、セレクタから上述のように1/Nの確率でランダムな論理値として、受信側の回路素子に入力される。ランダムな論理値が入力されることによって、メタステーブル状態に受信側の回路素子が正常に動作するかを検証することができる。
【0083】
一例としては、従来のCDCモデル生成ツールでは、非同期箇所に、ジッタディテクタと、出力信号に換えてランダムな論理値を生成する入力素子を追加するCDCモデル(たとえば、後述する図12に例示したCDCモデル)や、非同期箇所に、ジッタエンコーダとジッタデコーダと上述の入力素子とを追加するCDCモデル(たとえば、図13に例示したCDCモデル)がある。
【0084】
そして、シミュレーションモデル生成部1010は、通常、送信側のすべての回路素子と、受信側のすべての回路素子に上述したようなジッタサンプラ、FFを追加したCDCモデルを生成する。なお、後述する図14は、非同期箇所に、ジッタディテクタと、入力素子とを追加したCDCモデルに、ジッタサンプラおよびFFを追加したシミュレーションモデルの生成例である。また、後述する図15は、非同期箇所に、ジッタエンコーダと、ジッタデコーダと、入力素子とを追加したCDCモデルにジッタサンプラおよびFFを追加したシミュレーションモデルの生成例である。
【0085】
また、シミュレーションモデル生成部1010によって生成されたシミュレーションモデルは、論理シミュレータ110によって実行される。すなわち、論理シミュレータ110は、シミュレーションモデルの実行部として機能する。論理シミュレータ110では、生成されたシミュレーションモデルを実行することによって非同期箇所の動作を再現することができる。また、出力部1004は、シミュレーションモデル生成部1010に接続された場合には、シミュレーションモデルの実行結果を出力する。したがって、論理シミュレータ110は、指定された非同期箇所のCDCシミュレーションを実行することができる。
【0086】
(検証支援処理の手順)
図11−1は、検証支援装置による検証支援処理の手順(その1)を示すフローチャートである。図11−1の各処理を実行することによって、メタステーブル状態が発生した場合の受信側の各回路素子の動作をランダムに検証することができる。
【0087】
図11−1において、検証支援装置100は、まず、受付部1001によって、非同期箇所の指定を受け付けたか否かを判断する(ステップS1111)。ステップS1111において、非同期箇所の指定を受け付けた場合(ステップS1111:Yes)、非同期箇所の動作を検証するためのステップS1113の処理に移行する。一方、ステップS1111によって、非同期箇所の指定を受け付けていないと判断された場合(ステップS1111:No)、検証支援装置100は、抽出部1005によって、検証対象回路の中から非同期箇所を抽出する(ステップS1112)。
【0088】
上述のように、ステップS1111もしくはステップS1112によって非同期箇所が特定されると、次に、検証支援装置100は、検出部1002によって、送信信号グループに属する信号の変化を検出する(ステップS1113)。送信信号グループに属する信号とは、送信側の回路素子からの出力信号を意味する。したがって、検出部1002は、ステップS1113によって、出力信号の変化を検出する。
【0089】
その後、検証支援装置100は、受信側の動作クロックが立ち上がったか否かを判断する(ステップS1114)。なお、検証支援装置100は、受信側の動作クロックが立ち上がるまでステップS1113の処理に戻り、待機状態となる(ステップS1114:Noのループ)。そして、検証支援装置100は、受信側の動作クロックが立ち上がったと判断すると(ステップS1114:Yes)、検出部1002によって、1回以上の変化が検出されたか否かを判断する(ステップS1115)。
【0090】
そして、検証支援装置100は、検出部1002によって、1回以上の変化が検出された場合(ステップS1115:Yes)、変化時刻のいずれか一つを選択し(ステップS1116)、ランダム値もしくは出力信号の値を対応する受信側の回路素子に入力する(ステップS1117)。ステップS1117において、ランダム値とは上述したランダムな論理値を意味し、メタステーブル状態の発生を再現することができる。また、受信側の回路素子にランダム値と出力信号の値のいずれを入力するかは、検出部1002による検出結果によって異なる。
【0091】
具体的に説明すると、入力部1003は、ステップS1116によって選択された選択時刻で出力信号の変化が検出されていれば、ランダム値を対応する受信側の回路素子へ入力する。一方、入力部1003は、ステップS1116によって選択された選択時刻に出力信号の変化が検出されていない場合には、出力信号の値をそのまま受信側の回路素子へ入力する。たとえば送信側の回路素子として素子1,2からの出力信号の変化を検出する場合、素子1からの出力信号の変化を検出した時刻が選択された場合、素子2からの出力信号は変化していない。
【0092】
したがって、ステップS1116では、素子1からの出力信号が検出された時刻が選択された場合には、素子1からの出力信号をランダムな論理値に置き換えて、対応する受信側の回路素子へ入力する。一方、素子2からの出力信号は、そのままの値を対応する受信側の回路素子へ入力する。
【0093】
なお、検証支援装置100は、ステップS1115において、1回以上の変化が検出されなかった場合(ステップS1115:No)、受信側の回路素子へなんらかの値を入力する必要はない。したがって検証支援装置100は、ステップS1115の処理が終了した後、そのままステップS1119の処理へ移行する。
【0094】
ステップS1117によってランダムな論理値が入力されることによって、受信側の各回路素子にメタステーブル状態と同等の状況を起こすことができる。なお、検証支援装置100の出力部1004は、ステップS1117の入力によって起こった受信側の各回路素子の動作結果102を論理シミュレータ110から出力する。したがって、メタステーブル状態が発生した場合の動作結果102を利用して、論理設計の検証が可能になる。
【0095】
ステップS1117の処理の後、検証支援装置100は、検出部1002の検出結果を一旦リセットし(ステップS1118)、上位システムや利用者からの終了指示を受けたか否かを判断する(ステップS1119)。ステップS1119において、終了指示を受けていないと判断された場合(ステップS1119:No)、検証支援装置100は、ステップS1113の処理に戻り、引き続き、非同期箇所にてメタステーブル状態が発生した場合の受信側の回路素子についての検証を行う。
【0096】
その後、ステップS1109において、終了指示を受けたと判断された場合(ステップS1119:Yes)、検証支援装置100は、一連の処理を終了する。利用者は、一連の処理によって検証支援装置100から出力された動作結果102を参照して、非同期箇所が正しく動作するかを検証することができる。
【0097】
図11−2は、検証支援装置による検証支援処理の手順(その2)を示すフローチャートである。図11−2に示した各処理を実行することによって、論理シミュレータ110に、指定した非同期箇所(指定情報1000によって指定された非同期箇所)についてのCDCシミュレーションを実行させることができる。
【0098】
図11−2において、検証支援装置100は、まず、受付部1001によって、非同期箇所の指定を受け付けたか否かを判断する(ステップS1121)。ステップS1121において、非同期箇所の指定を受け付けた場合(ステップS1121:Yes)、非同期箇所の動作を検証するためのステップS1123の処理に移行する。一方、ステップS1121によって、非同期箇所の指定を受け付けていないと判断された場合(ステップS1121:No)、検証支援装置100は、抽出部1005によって、検証対象回路の中から非同期箇所を抽出する(ステップS1122)。
【0099】
次に、検証支援装置100は、シミュレーションモデル生成部1010によってCDCシミュレーションモデルを生成する(ステップS1123)。その後、検証支援装置100は、論理シミュレータ110によって生成されたCDCシミュレーションモデルを利用して、非同期箇所についてのCDCシミュレーションを実行して(ステップS1124)、一連の処理を終了する。
【0100】
以上説明したように、図10−2にて説明した検証支援装置100は、CDCシミュレーションモデルを生成して論理シミュレータ110によって実行させることによってCDCシミュレーションの動作結果102を得ることができる。以下の説明では、シミュレーションモデル生成部1010を備えた検証支援装置100を利用した場合の具体的なシミュレーションモデルの構成例を説明する。
【0101】
(シミュレーションモデルの構成例)
次に、図10−2のシミュレーションモデル生成部1010によって生成したシミュレーションモデルの具体的な構成例を挙げて、検証支援装置100によるメタステーブル状態の検証支援例について説明する。まず、比較のために、従来のシミュレーションモデルの構成例を挙げる。そして、これらのシミュレーションモデルに図10−2,11−2によって説明した処理を実行させる機能を追加した、本実施例にかかるシミュレーションモデルを例示して、その動作について説明する。
【0102】
図12、図13は、従来のシミュレーションモデルの構成例を示す回路図である。図12に例示したシミュレーションモデルは、CLK1で動作する送信側の回路素子としてFF1201,1202が備えられている。また、CLK2で動作する受信側の回路素子としてFF1211,1212およびFF1221,1222とが備えられている。
【0103】
また受信側の回路素子には、送信側の回路素子の出力信号を検出するジッタディテクタが備えられている。受信側の回路素子は、FF1211,1212およびジッタディテクタによってCDCモデルを構成している。ジッタディテクタによって送信側の回路素子から出力信号が検出されるとFF1211,1212によってメタステーブル状態が発生され、CDCの検証に利用される。なお、図12のFF1221,1222およびジッタディテクタによって構成されたCDCモデルも同様に動作して、CDCの検証を支援する。
【0104】
また、図13に例示したシミュレーションモデルは、CLK1で動作する送信側の回路素子としてFF1301,1302が備えられている。また、CLK2で動作する受信側の回路素子としてFF1311およびFF1321が備えられている。また受信側の回路素子には、ジッタエンコーダと、ジッタデコーダとが備えられている。
【0105】
受信側の回路素子は、FF1311、ジッタエンコーダおよびジッタデコーダによってCDCモデルを構成している。ジッタエンコーダによって送信側の回路素子からの出力信号の変化が観測されると、FF1311は、ジッタデコーダによってメタステーブル状態に相当するランダムな論理値が出力され、CDCの検証に利用される。なお、図13のジッタエンコーダ、FF1321およびジッタデコーダによって構成されたCDCモデルも同様に動作して、CDCの検証を支援する。
【0106】
ところが、図12,13のいずれのシミュレーションモデルの場合も、一定時間Tjの設定と、CLK1,CLK2の周期によっては、検証効率が低下したり、誤動作を起こしたりする可能性があった。そこで、以下には、図12,13に例示した非同期箇所を検証支援装置100によって検証する場合の構成について説明する。
【0107】
<シミュレーションモデル1>
図14は、本実施例にかかるシミュレーションモデル1の構成を示す回路図である。回路モデル1400によって構成されるシミュレーションモデル1は、FF1401,1402が図12の送信側のFFに相当し、FF1404,1406およびFF1408,1410が、図12の受信側のFFに相当する。
【0108】
そして、シミュレーションモデル1では、送信側の回路素子からの出力信号の変化を検出するために、FF1401,1402の後段には、ジッタディテクタ1411,1412が接続されている。また、シミュレーションモデル1では、出力信号の変化または受信側の動作クロックの立ち上がりを契機にSAMPLEイベントを発生させるジッタサンプラ1420が備えられている。さらに、シミュレーションモデル1では、SAMPLEイベント発生時の信号値を一時的に保持するFF1403,1405,1407,1409が備えられている。ジッタディテクタ1411,1412、ジッタサンプラ1420、およびFF1403,1405,1407,1409は、図10−1にて説明した検出部1002として機能する。
【0109】
<シミュレーションモデル2>
図15は、本実施例にかかるシミュレーションモデル2の構成を示す回路図である。回路モデル1500によって構成されるシミュレーションモデル2は、FF1501,1502が図13の送信側のFFに相当し、FF1504およびFF1506が、図13の受信側のFFに相当する。
【0110】
そして、シミュレーションモデル2では、送信側の回路素子のFF1501,1502からの出力信号の変化を後段のFFに報知するために、ジッタエンコーダ1511,1512が接続されている。また、シミュレーションモデル2では、出力信号の変化または受信側の動作クロックの立ち上がりを契機にSAMPLEイベントを発生させるジッタサンプラ1530が備えられている。
【0111】
さらに、シミュレーションモデル2では、SAMPLEイベント発生時の信号値を一時的に保持するFF1503,1505が備えられている。ジッタエンコーダ1511,1512、ジッタサンプラ1530、およびFF1503,1505は、図10−1にて説明した検出部1002として機能する。
【0112】
また、シミュレーションモデル2では、ジッタデコーダ1521,1522によって、受信側のFF1504,1506から出力された出力信号をランダムな論理値に換えて、後段の回路素子へ入力する。なお、ジッタデコーダ1521,1522は、図10−1にて説明した入力部1003として機能する。
【0113】
次に、図14,15の各回路モデル1400,1500内に備えられたジッタディテクタ、ジッタエンコーダ、ジッタデコーダおよびジッタサンプラの出力動作について詳しく説明する。
【0114】
<ジッタディテクタの出力処理>
図16は、ジッタディテクタの出力処理の手順を示すフローチャートである。ジッタディテクタは、送信側の回路素子からの出力信号の変化を検出すると、所定時間(具体的にはTj)の間、出力信号の変化を報知する報知信号を出力する機能を有する。
【0115】
図16のフローチャートは、CDCシミュレーションの実行によって、ジッタディテクタの動作が開始された後、送信側の回路素子の出力信号の変化に応じた報知信号の出力処理を継続するための手順を示している。なお、図14のジッタディテクタ1411,1412は、それぞれ同じ動作を行うため、以下、図16では、符号を付けずに共通の「ジッタディテクタ」として説明する。
【0116】
図16において、ジッタディテクタは、まず、0を出力する(ステップS1601)。続いて、ジッタディテクタは、送信側のFF(たとえば、図14のFF1401,1402)からの入力値の変化を観測したか否かを判断する(ステップS1602)。ジッタディテクタは、ステップS1601において、入力値の変化を観測するまで待機状態となる(ステップS1602:Noのループ)。
【0117】
ステップS1602において、入力値の変化が観測されると(ステップS1602:Yes)、ジッタディテクタは、後段に接続されたFFに入力値の変化を報知する報知信号として、1を出力する(ステップS1603)。その後、ジッタディテクタは、タイマを0にリセットし(ステップS1604)、送信側のFFからの入力値の変化を観測したか否かを判断する(ステップS1605)。なお、タイマは、常に計時を行っている。したがって、ステップS1604の処理によって、リセットが完了すると、タイマでは、即座に0からあらたな計時が開始される。
【0118】
ステップS1605において、入力値の変化を観測した場合(ステップS1605:Yes)、ジッタディテクタは、ステップS1604の処理に戻り、タイマを0にリセットする。なお、ジッタディテクタは、入力値の変化を観測したため、報知信号として、1を出力し続けている。
【0119】
一方、ステップS1605において、入力値の変化が観測されなかった場合(ステップS1605:No)、ジッタディテクタは、タイマの計時によって時間Tjが経過したか否かを判断する(ステップS1606)。ステップS1606において、時間Tjが経過していない場合(ステップS1606:No)、ジッタディテクタは、ステップS1605の処理に戻って、再び、入力値の変化が観測されたか否かを判断する。
【0120】
ステップS1606において、時間Tjが経過した場合には(ステップS1606:Yes)、ジッタディテクタによる入力値の変化の報知が終了したことになる。したがって、ジッタディテクタは、ステップS1601の処理に戻り、入力値の変化を観測していない状態を報知するため、0を出力する。以上説明した処理は、検証処理中であれば継続して行われる。また、検証処理が終了した場合や、途中で中断したい場合には、検証支援装置100の利用者や上位プログラムから終了指示が行われ、ジッタディテクタは、一連の処理を終了する。
【0121】
<ジッタエンコーダの出力処理>
図17は、ジッタエンコーダの出力処理の手順を示すフローチャートである。ジッタエンコーダは、送信側のFFから入力値に変化があった場合に、入力値をX値(ランダムな論理値)に換えて出力することによって、意図的にメタステーブル状態を発生させる。X値を受信側のFFへ転送することによって、受信側のFFがメタステーブル状態に正常に動作するか否かを検証することができる。なお、図15のジッタエンコーダ1511,1512はそれぞれ同じ動作を行うため、以下、図17では、符号を付けずに共通の「ジッタエンコーダ」として説明する。
【0122】
図17において、ジッタエンコーダは、まず、送信側のFF(たとえば、図15のFF1501,1502)からの入力値をそのまま出力する(ステップS1701)。なお、送信側のFFの入力値は0もしくは1の2値である。その後、ジッタエンコーダは、入力値の変化を観測したか否かを判断する(ステップS1702)。
【0123】
ステップS1702において、ジッタエンコーダは、入力値の変化を観測するまで待機状態となる(ステップS1702:Noのループ)。そして、ジッタエンコーダは、ステップS1702において、入力値の変化を観測すると(ステップS1702:Yes)、入力値に換わって、X値を出力する(ステップS1703)。
【0124】
その後、ジッタエンコーダは、タイマを0にリセットし(ステップS1704)、送信側のFFからの入力値の変化を観測したか否かを判断する(ステップS1705)。なお、タイマは、常に計時を行っている。したがって、ステップS1704の処理によって、リセットが完了すると、タイマでは、即座に0からあらたな計時が開始される。
【0125】
ステップS1705において、入力値の変化を観測した場合(ステップS1705:Yes)、ジッタエンコーダは、ステップS1704の処理に戻り、タイマを0にリセットする。なお、ジッタエンコーダは、入力値の変化を観測したため、引き続き、メタステーブル状態を再現するためのX値を出力し続けている。
【0126】
一方、ステップS1705において、入力値の変化が観測されなかった場合(ステップS1705:No)、ジッタエンコーダは、タイマの計時によって時間Tjが経過した、または、受信クロックイベントを観測したか否かを判断する(ステップS1706)。なお、受信クロックイベントとは、受信側のFF(たとえば、図15のFF1504,1506)のいずれかでクロックの立ち上がりに応じて、何らかの処理が実行されたことを意味する。
【0127】
ステップS1706の処理は、X値の出力を継続するか終了するかを判断するために実行される。したがって、ステップS1706における、「時間Tjが経過した」、「受信クロックイベントを観測した」は、いずれも、X値の出力の終了トリガとなる条件である。したがって、上述した2つの条件のうち、いずれか一方でも満たしていれば、X値の出力を終了するように動作させる必要がある。
【0128】
ステップS1706において、時間Tjが経過しておらず、かつ、受信クロックイベントが観測されていない場合(ステップS1706:No)、ジッタエンコーダは、ステップS1705の処理に戻って、再び、入力値の変化が観測されたか否かを判断する。
【0129】
ステップS1706において、時間Tjが経過した、もしくは、受信クロックイベントを観測した場合(ステップS1706:Yes)、ジッタエンコーダによる入力値の変化の報知が終了したことになる。したがって、ジッタエンコーダは、ステップS1701の処理に戻り、入力値の変化を観測していない状態を報知するため、0を出力する。以上説明した処理は、検証処理中であれば継続して行われる。また、検証処理が終了した場合や、途中で中断したい場合には、検証支援装置100の利用者や上位プログラムから終了指示が行われ、ジッタエンコーダは、一連の処理を終了する。
【0130】
<ジッタデコーダの出力処理>
図18は、ジッタデコーダの出力処理の手順を示すフローチャートである。ジッタデコーダは、上段のFFから入力された信号に応じて、入力値をそのまま、もしくは、ランダムな論理値を出力する機能を有する。
【0131】
図18において、ジッタデコーダは、図15のシミュレーションモデル2において、出力側のFFの動作に応じて、CDCシミュレーションが実現した後段の回路素子へ入力値を、そのまま、もしくは、ランダムな論理値(X値)を入力するまでの手順を示している。なお、図15のジッタデコーダ1521,1522は、それぞれ同じ動作を行うため、以下、図18では、符号を付けずに共通の「ジッタデコーダ」として説明する。
【0132】
ジッタデコーダは、前段のFFからの入力値の受信を契機に動作を開始する。まず、ジッタデコーダは、入力値がXか否かを判断する(ステップS1801)。ステップS1801において、入力値がXであった場合(ステップS1801:Yes)、ジッタデコーダは、メタステーブル状態を発生させるため、0または1をランダムに出力する(ステップS1802)。
【0133】
一方、ステップS1801において、入力値がXではなかった場合(ステップS1801:No)、ジッタデコーダは、入力値をそのまま出力する(ステップS1803)。なお、ステップS1803では、入力値として0または1が得られるため、出力される信号は0または1になる。なお、ステップS1802,1803によって出力された信号は、後段のFFに入力される。
【0134】
その後、ジッタデコーダは、ステップS1802もしくはステップS1803による信号の出力を観測したか否かを判断する(ステップS1804)。ステップS1804では、出力が観測されるまで待機状態となり(ステップS1804:Noのループ)、出力が観測されると(ステップS1804:Yes)、ジッタデコーダは、上段のFFからの入力値の変化を観測したか否かを判断する(ステップS1805)。
【0135】
ジッタデコーダは、ステップS1805において、入力値の変化を観測するまで待機状態となる(ステップS1805:Noのループ)。そして、入力値の変化を観測すると(ステップS1805:Yes)、ジッタデコーダは、ステップS1801の処理に戻り、次のクロックサイクルに基づいた処理に移行する。以上説明した処理は、検証処理中であれば継続して行われる。また、検証処理が終了した場合や、途中で中断したい場合には、検証支援装置100の利用者や上位プログラムから終了指示が行われ、ジッタデコーダは、一連の処理を終了する。
【0136】
<ジッタサンプラの出力処理>
ジッタサンプラでは、出力処理として、入力値に応じたイベント発生処理と、受信クロックに応じたイベント発生処理とが並列して実行される。ジッタサンプラは送信側のFFから出力された出力信号の変化に応じてサンプルイベントを発生させると同時に、受信側のクロックイベントの発生に応じてサンプルイベントを発生する。すなわち、送信側の動作と受信側の動作との双方に連動して、サンプルイベントを発生させる。なお、図14,15のジッタサンプラ1420,1530は、それぞれ同じ動作を行うため、以下、図19,20では、符号を付けずに共通の「ジッタサンプラ」として説明する。
【0137】
図19は、ジッタサンプラの入力値に応じたイベント発生処理の手順を示すフローチャートである。図19の各処理を実行することによって、ジッタサンプラは、入力値の変化を契機にSAMPLEイベントを発生させることができる。
【0138】
図19において、ジッタサンプラは、まず、上段のFF、すなわち、送信側のFFからの入力値の変化を観測したか否かを判断する(ステップS1901)。ステップS1901において、ジッタサンプラは、入力値の変化を観測するまで待機状態となる(ステップS1901:Noのループ)。
【0139】
その後、入力値の変化を観測すると(ステップS1901:Yes)、ジッタサンプラは、変数NをN+1にインクリメントする(ステップS1902)。変数Nは、送信側のFFからの入力値の総数を意味する。なお、Nは、受信側のクロックイベント発生の度にリセットされるため、受信側の動作クロックの1クロックサイクルの間の入力値の総数となる。
【0140】
その後、ジッタサンプラは、1/Nの確率でSAMPLEイベントを発生する(ステップS1903)。SAMPLEイベントとは、現在のCDC信号値およびCDC信号値の変化状況の保存を指示するためのイベントである。その後、ジッタサンプラは、ステップS1901の処理に戻り、再度、SAMPLEイベントを発生させる。ステップS1903のように、1/Nの確率でSAMPLEイベントが発生されるため、1クロックサイクルの間に送信側のFFから入力された入力値の中のいずれか一つに起因してSAMPLEイベントが発生するための処理に移行する。最終的には1クロックサイクル内の最後(次の受信クロックイベント発生の直前)のSAMPLEイベントが意味を持つことになる。ステップS1903では1/Nの確率でSAMPLEイベントを発生させているため、何度目の入力値変化に対しても、1クロックサイクル内の最後のSAMPLEイベントが発生する確率は同じになる。
【0141】
図20は、ジッタサンプラの受信クロックに応じたイベント発生処理の手順を示すフローチャートである。図19の各処理を実行することによって、ジッタサンプラは、受信側のFFにおける受信クロックイベントの発生を契機にSAMPLEイベントを発生させることができる。これは、受信クロックサイクル毎の初期化処理を目的としている。
【0142】
図20において、ジッタサンプラは、まず、変数Nを0にリセットする(ステップS2001)。その後、ジッタサンプラは、受信側のFFにおいて、受信クロックイベントが発生したか否かを判断する(ステップS2002)。ステップS2002において、ジッタサンプラは、受信クロックイベントが発生するまで待機状態となる(ステップS2002:Noのループ)。
【0143】
そして、受信クロックイベントの発生が観測されると(ステップS2002:Yes)、ジッタサンプラは、SAMPLEイベントを発生する(ステップS2003)。SAMPLEイベントとは、上述したように、後段のFFへランダムな論理値を入力してメタステーブル状態を発生させるイベントである。その後、ジッタサンプラは、ステップS2001の処理に戻り、再度、SAMPLEイベントを発生させるための処理を開始する。
【0144】
以上説明したように、ジッタサンプラは、送信側のFFから入力されたあらたな入力値が観測されるタイミング、もしくは、受信側のFFにおける受信クロックイベントの発生を契機にSAMPLEイベントが発生する。受信側の1クロックサイクルの間に複数の入力値の変化が観測された場合には、その全ての変化タイミングの中から同じ確率で最終的なSAMPLEイベントが発生するため、検証内容の偏りを防ぐことができる。
【0145】
なお、以上説明した処理は、検証処理中であれば継続して行われる。また、検証処理が終了した場合や、途中で中断したい場合には、検証支援装置100の利用者や上位プログラムから終了指示が行われ、ジッタサンプラは、一連の処理を終了する。
【0146】
<各モデルを動作させた場合のタイミングチャート>
図21は、シミュレーションモデル1の動作例を示すタイミングチャートであり、図22は、シミュレーションモデル2の動作例を示すタイミングチャートである。次に、図21,22を用いて、シミュレーションモデル1,2を実行させた場合の各回路素子の動作例について説明する。
【0147】
図21のように、シミュレーションモデル1において、送信側のFF1401からの出力信号DAに変化が起こった場合(T1)、ジッタディテクタ1411によって出力信号DAの変化が検出される。ジッタディテクタ1411では、出力信号DAの変化を検出すると、後段のFFに報知するための報知信号JAを一定時間Tjの間出力する。また、出力信号DAの変化を観測したジッタサンプラ1420は、(1/1の確率で)SAMPLEイベントを発生させる。
【0148】
また、送信側のFF1401からの出力信号DBに変化が起こった場合(T2)、ジッタディテクタ1412によって出力信号DBの変化が検出される。ジッタディテクタ1412では、出力信号DBの変化を検出すると、後段のFFに報知するための報知信号JBを一定時間Tjの間出力する。また、ジッタサンプラ1420は、出力信号DBの変化を観測したが、1/2の抽選の結果、SAMPLEイベントを発生させなかった。
【0149】
また、ジッタサンプラ1420は、受信側のFFにおける受信クロックイベントの発生に基づいて、SAMPLEイベントを発生させている。具体的には、CLK2のサイクル1の立ち上がりのタイミング(T3)、サイクル2の立ち上がりのタイミング(T4)、および、サイクル3の立ち上がりのタイミング(T5)にそれぞれSAMPLEイベントを発生させている。
【0150】
一方、図22は、シミュレーションモデル2における各回路素子の動作を表している。送信側のFF1501からの出力信号DAに変化が起こった場合(T6)、ジッタエンコーダ1511は、入力値の変化を観測して、一定時間Tjの間、ランダムな論理値(X値)を出力する。ジッタサンプラ1530は、出力信号DAの変化を観測すると、(1/1の確率で)SAMPLEイベントを発生させる。
【0151】
出力信号DAの変化に起因したSAMPLEイベントの発生によって、FF1503は、ランダムな論理値(X値)を出力する。
【0152】
また、送信側のFF1502からの出力信号DBに変化が起こった場合(T7)、ジッタエンコーダ1512は、入力値の変化を観測して、一定時間Tjの間、ランダムな論理値(X値)を出力する。ジッタサンプラ1530は、出力信号DBの変化を観測するが、1/2の抽選の結果、SAMPLEイベントを発生させなかった。
【0153】
また、ジッタサンプラ1530は、受信側のFFにおける受信クロックイベントの発生に基づいて、SAMPLEイベントを発生させている。具体的には、CLK2のサイクル1の立ち上がりのタイミング(T8)、サイクル2の立ち上がりのタイミング(T9)、および、サイクル3の立ち上がりのタイミング(T10)にそれぞれSAMPLEイベントを発生させている。
【0154】
したがって、CDCを含む検証対象回路であっても、各回路ブロックの周波数の設定にかかわらず、送信側の回路素子からの出力信号と、受信側の回路素子の受信クロックイベントに基づいて、メタステーブル状態の回路素子の振る舞いを検証することができる。
【0155】
以上説明したように、検証支援プログラム、検証支援装置および検証支援方法によれば、CDCの送信側の素子の出力値のうち、受信側の1クロックの間に検出された何れか1つのタイミングで発生した信号変化の影響を選択して、受信側のクロックに合わせて出力する。したがって、漏れなくメタステーブル状態が再現されるため効率的にメタステーブル状態に対して回路が正しく動作するかを検証できる。
【0156】
また、上記技術では、さらに、検証対象回路の中のCDCが発生する非同期箇所の指定を受け付ける機能を備えてもよい。また、上記技術では、さらに、回路設計の記述内容に基づいて、非同期箇所を自動抽出する機能を備えてもよい。上述のような各機能を備えることによって、非同期箇所の絞り込みが容易になり、習熟度の低い利用者であっても、効率的に検証を行うことができる。
【0157】
また、上記技術は、さらに、非同期箇所の中から、検証対象となる送信側の回路素子と受信側の回路素子とを個別に指定する機能を備えてもよい。上述の機能を備えた場合、メタステーブル状態は、指定された回路素子のみを対象として発生させられる。したがって、指定箇所に絞った高精度な検証を実現することができる。
【0158】
なお、本実施の形態で説明した検証支援方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。本検証支援プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVDなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本検証支援プログラムは、インターネットなどのネットワークを介して配布してもよい。
【0159】
また、本実施の形態で説明した検証支援装置100は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けIC(以下、単に「ASIC」と称す。)やFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。具体的には、たとえば、上述した検証支援装置100の機能(受付部1001〜指定部1006)をHDL記述によって機能定義し、そのHDL記述を論理合成してASICやPLDに与えることにより、検証支援装置100を製造することができる。
【符号の説明】
【0160】
100 検証支援装置
110 論理シミュレータ
1001 受付部
1002 検出部
1003 入力部
1004 出力部
1005 抽出部
1006 指定部
1010 シミュレーションモデル生成部
【特許請求の範囲】
【請求項1】
検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所における受信側の1クロックサイクルの間に、送信側の各回路素子から出力された信号の変化を検出する検出工程と、
前記1クロックサイクル後の前記受信側の動作クロックの立ち上がりを契機に、前記検出工程によって信号の変化が検出された時刻の中のいずれか1つの時刻に前記検出工程によって変化が検出された信号をランダムな論理値に置き換えて前記受信側の各回路素子へ入力し、前記いずれか1つの時刻に前記検出工程によって変化が検出されなかった信号を前記受信側の各回路素子へ入力する入力工程と、
前記入力工程による入力に応じた前記受信側の各回路素子の動作結果を出力する出力工程と、
をコンピュータに実行させることを特徴とする検証支援プログラム。
【請求項2】
前記検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所の指定を受け付ける受付工程を前記コンピュータに実行させ、
前記検出工程では、
前記受付工程によって受け付けられた非同期箇所における前記受信側の1クロックサイクルの間に、前記非同期箇所の前記送信側の各回路素子から出力された信号の変化を検出し、
前記入力工程では、
前記1クロックサイクル後の前記受信側の動作クロックの立ち上がりを契機に、前記いずれか1つの時刻に前記検出工程によって変化が検出された信号を前記ランダムな論理値に置き換えて前記受信側の各回路素子へ入力し、前記いずれか1つの時刻に前記検出工程によって変化が検出されなかった信号を前記受信側の各回路素子へ入力することを特徴とする請求項1に記載の検証支援プログラム。
【請求項3】
前記検証対象回路の設計情報に基づいて、前記検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所を抽出する抽出工程を前記コンピュータに実行させ、
前記検出工程では、
前記抽出工程によって抽出された非同期箇所における前記受信側の1クロックサイクルの間に、前記非同期箇所の前記送信側の各回路素子から出力された信号の変化を検出し、
前記入力工程では、
前記1クロックサイクル後の前記受信側の動作クロックの立ち上がりを契機に、前記いずれか1つの時刻に前記検出工程によって変化が検出された信号を、前記ランダムな論理値に置き換えて前記受信側の各回路素子へ入力し、前記いずれか1つの時刻に前記検出工程によって変化が検出されなかった信号を前記受信側の各回路素子へ入力することを特徴とする請求項1または2に記載の検証支援プログラム。
【請求項4】
前記非同期箇所の中から、送信側の各回路素子の指定と、受信側の各回路素子の指定とを受け付ける指定工程を前記コンピュータに実行させ、
前記検出工程では、
前記非同期箇所における前記受信側の1クロックサイクルの間に、前記指定工程によって指定された前記送信側の各回路素子から出力された信号の変化を検出し、
前記入力工程では、
前記1クロックサイクル後の前記受信側の動作クロックの立ち上がりを契機に、前記いずれか1つの時刻に前記検出工程によって変化が検出された信号を前記ランダムな論理値に置き換えて前記指定工程によって指定された前記受信側の各回路素子へ入力し、前記いずれか1つの時刻に前記検出工程によって変化が検出されなかった信号は前記指定工程によって指定された前記受信側の各回路素子へ入力し、
前記出力工程では、
前記指定工程によって指定された受信側の各回路素子の動作を出力することを特徴とする請求項1〜3のいずれか一つに記載の検証支援プログラム。
【請求項5】
前段から出力された信号の変化を検出する第1の素子、前記第1の素子によって信号の変化が検出された時刻に前記前段から出力された信号の値を保持する第2の素子、および、後段の動作クロックの立ち上がりを契機に前記第1の素子によって前記信号の変化が検出された時刻の中のいずれか1つの時刻に前記第2の素子に保持された値を前記後段に入力するとともに前記第1の素子によって変化が検出された値をランダムな論理値に置き換えて前記後段に入力する第3の素子の設計情報を記憶する記憶装置にアクセス可能なコンピュータに、
検証対象回路の設計情報に基づいて、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所を抽出する抽出工程と、
前記抽出工程によって抽出された非同期箇所における送信側の各回路素子と、受信側の各回路素子とを特定する特定工程と、
前記第1の素子の前段に前記特定工程によって特定された前記送信側の各回路素子を設定して、前記第1の素子によって前記送信側の各回路素子から出力された信号の変化を検出させ、前記第3の素子の後段に前記特定工程によって特定された前記受信側の各回路素子を設定して、前記第1の素子によって前記信号の変化が検出されたいずれか1つの時刻に前記第2の素子に保持された値および前記ランダムな値を、前記第3の素子から前記受信側の各回路素子に入力させるシミュレーションモデルを生成する生成工程と、
を実行させることを特徴とする検証支援プログラム。
【請求項6】
前記生成工程によって生成されたシミュレーションモデルを利用して、前記非同期箇所のシミュレーションを実行する実行工程と、
前記実行工程による前記シミュレーションの実行結果を出力する出力工程と、
を前記コンピュータに実行させることを特徴とする請求項5に記載の検証支援プログラム。
【請求項7】
検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所における受信側の1クロックサイクルの間に、送信側の各回路素子から出力された信号の変化を検出する検出手段と、
前記1クロックサイクル後の前記受信側の動作クロックの立ち上がりを契機に、前記検出手段によって信号の変化が検出された時刻の中のいずれか1つの時刻に前記検出手段によって変化が検出された信号をランダムな論理値に置き換えて前記受信側の各回路素子へ入力し、前記いずれか1つの時刻に前記検出手段によって変化が検出されなかった信号を前記受信側の各回路素子へ入力する入力手段と、
前記入力手段による入力に応じた前記受信側の各回路素子の動作結果を出力する出力手段と、
を備えることを特徴とする検証支援装置。
【請求項8】
検出手段と入力手段と出力手段とを備えたコンピュータが、
前記検出手段において、検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所における受信側の1クロックサイクルの間に、送信側の各回路素子から出力された信号の変化を検出する検出工程と、
前記入力手段において、前記1クロックサイクル後の前記受信側の動作クロックの立ち上がりを契機に、前記検出工程によって信号の変化が検出された時刻の中のいずれか1つの時刻に前記検出工程によって変化が検出された信号をランダムな論理値に置き換えて前記受信側の各回路素子へ入力し、前記いずれか1つの時刻に前記検出工程によって変化が検出されなかった信号を前記受信側の各回路素子へ入力する入力工程と、
前記出力手段において、前記入力工程による入力に応じた前記受信側の各回路素子の動作結果を出力する出力工程と、
を実行することを特徴とする検証支援方法。
【請求項1】
検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所における受信側の1クロックサイクルの間に、送信側の各回路素子から出力された信号の変化を検出する検出工程と、
前記1クロックサイクル後の前記受信側の動作クロックの立ち上がりを契機に、前記検出工程によって信号の変化が検出された時刻の中のいずれか1つの時刻に前記検出工程によって変化が検出された信号をランダムな論理値に置き換えて前記受信側の各回路素子へ入力し、前記いずれか1つの時刻に前記検出工程によって変化が検出されなかった信号を前記受信側の各回路素子へ入力する入力工程と、
前記入力工程による入力に応じた前記受信側の各回路素子の動作結果を出力する出力工程と、
をコンピュータに実行させることを特徴とする検証支援プログラム。
【請求項2】
前記検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所の指定を受け付ける受付工程を前記コンピュータに実行させ、
前記検出工程では、
前記受付工程によって受け付けられた非同期箇所における前記受信側の1クロックサイクルの間に、前記非同期箇所の前記送信側の各回路素子から出力された信号の変化を検出し、
前記入力工程では、
前記1クロックサイクル後の前記受信側の動作クロックの立ち上がりを契機に、前記いずれか1つの時刻に前記検出工程によって変化が検出された信号を前記ランダムな論理値に置き換えて前記受信側の各回路素子へ入力し、前記いずれか1つの時刻に前記検出工程によって変化が検出されなかった信号を前記受信側の各回路素子へ入力することを特徴とする請求項1に記載の検証支援プログラム。
【請求項3】
前記検証対象回路の設計情報に基づいて、前記検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所を抽出する抽出工程を前記コンピュータに実行させ、
前記検出工程では、
前記抽出工程によって抽出された非同期箇所における前記受信側の1クロックサイクルの間に、前記非同期箇所の前記送信側の各回路素子から出力された信号の変化を検出し、
前記入力工程では、
前記1クロックサイクル後の前記受信側の動作クロックの立ち上がりを契機に、前記いずれか1つの時刻に前記検出工程によって変化が検出された信号を、前記ランダムな論理値に置き換えて前記受信側の各回路素子へ入力し、前記いずれか1つの時刻に前記検出工程によって変化が検出されなかった信号を前記受信側の各回路素子へ入力することを特徴とする請求項1または2に記載の検証支援プログラム。
【請求項4】
前記非同期箇所の中から、送信側の各回路素子の指定と、受信側の各回路素子の指定とを受け付ける指定工程を前記コンピュータに実行させ、
前記検出工程では、
前記非同期箇所における前記受信側の1クロックサイクルの間に、前記指定工程によって指定された前記送信側の各回路素子から出力された信号の変化を検出し、
前記入力工程では、
前記1クロックサイクル後の前記受信側の動作クロックの立ち上がりを契機に、前記いずれか1つの時刻に前記検出工程によって変化が検出された信号を前記ランダムな論理値に置き換えて前記指定工程によって指定された前記受信側の各回路素子へ入力し、前記いずれか1つの時刻に前記検出工程によって変化が検出されなかった信号は前記指定工程によって指定された前記受信側の各回路素子へ入力し、
前記出力工程では、
前記指定工程によって指定された受信側の各回路素子の動作を出力することを特徴とする請求項1〜3のいずれか一つに記載の検証支援プログラム。
【請求項5】
前段から出力された信号の変化を検出する第1の素子、前記第1の素子によって信号の変化が検出された時刻に前記前段から出力された信号の値を保持する第2の素子、および、後段の動作クロックの立ち上がりを契機に前記第1の素子によって前記信号の変化が検出された時刻の中のいずれか1つの時刻に前記第2の素子に保持された値を前記後段に入力するとともに前記第1の素子によって変化が検出された値をランダムな論理値に置き換えて前記後段に入力する第3の素子の設計情報を記憶する記憶装置にアクセス可能なコンピュータに、
検証対象回路の設計情報に基づいて、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所を抽出する抽出工程と、
前記抽出工程によって抽出された非同期箇所における送信側の各回路素子と、受信側の各回路素子とを特定する特定工程と、
前記第1の素子の前段に前記特定工程によって特定された前記送信側の各回路素子を設定して、前記第1の素子によって前記送信側の各回路素子から出力された信号の変化を検出させ、前記第3の素子の後段に前記特定工程によって特定された前記受信側の各回路素子を設定して、前記第1の素子によって前記信号の変化が検出されたいずれか1つの時刻に前記第2の素子に保持された値および前記ランダムな値を、前記第3の素子から前記受信側の各回路素子に入力させるシミュレーションモデルを生成する生成工程と、
を実行させることを特徴とする検証支援プログラム。
【請求項6】
前記生成工程によって生成されたシミュレーションモデルを利用して、前記非同期箇所のシミュレーションを実行する実行工程と、
前記実行工程による前記シミュレーションの実行結果を出力する出力工程と、
を前記コンピュータに実行させることを特徴とする請求項5に記載の検証支援プログラム。
【請求項7】
検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所における受信側の1クロックサイクルの間に、送信側の各回路素子から出力された信号の変化を検出する検出手段と、
前記1クロックサイクル後の前記受信側の動作クロックの立ち上がりを契機に、前記検出手段によって信号の変化が検出された時刻の中のいずれか1つの時刻に前記検出手段によって変化が検出された信号をランダムな論理値に置き換えて前記受信側の各回路素子へ入力し、前記いずれか1つの時刻に前記検出手段によって変化が検出されなかった信号を前記受信側の各回路素子へ入力する入力手段と、
前記入力手段による入力に応じた前記受信側の各回路素子の動作結果を出力する出力手段と、
を備えることを特徴とする検証支援装置。
【請求項8】
検出手段と入力手段と出力手段とを備えたコンピュータが、
前記検出手段において、検証対象回路の中から、動作クロックの異なるクロックドメイン間でデータを転送する非同期箇所における受信側の1クロックサイクルの間に、送信側の各回路素子から出力された信号の変化を検出する検出工程と、
前記入力手段において、前記1クロックサイクル後の前記受信側の動作クロックの立ち上がりを契機に、前記検出工程によって信号の変化が検出された時刻の中のいずれか1つの時刻に前記検出工程によって変化が検出された信号をランダムな論理値に置き換えて前記受信側の各回路素子へ入力し、前記いずれか1つの時刻に前記検出工程によって変化が検出されなかった信号を前記受信側の各回路素子へ入力する入力工程と、
前記出力手段において、前記入力工程による入力に応じた前記受信側の各回路素子の動作結果を出力する出力工程と、
を実行することを特徴とする検証支援方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10−1】
【図10−2】
【図11−1】
【図11−2】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10−1】
【図10−2】
【図11−1】
【図11−2】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【公開番号】特開2012−14583(P2012−14583A)
【公開日】平成24年1月19日(2012.1.19)
【国際特許分類】
【出願番号】特願2010−152257(P2010−152257)
【出願日】平成22年7月2日(2010.7.2)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成24年1月19日(2012.1.19)
【国際特許分類】
【出願日】平成22年7月2日(2010.7.2)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]