以下に添付図面を参照して、この検証支援プログラム、検証支援装置、および検証支援方法の好適な実施の形態を詳細に説明する。
本実施の形態では、クロックドメイン・クロッシングを含む論理設計に対する検証品質および検証効率の向上を図る手法を提案する。クロックドメイン・クロッシングとは、異なるクロックで動作するクロックドメイン間でデータ信号が受け渡されてクロックの乗り換えが起こることである。ここでは、クロックドメイン・クロッシングの起こる箇所を非同期箇所という。
この非同期箇所でデータ転送する場合、受信側のクロックドメインでは入力信号が非同期信号となるため、様々な問題が発生する可能性がある。また、非同期箇所におけるデータ信号の受け渡しが正常におこなわれなければ、その非同期箇所よりも後段の処理に障害が発生してしまう場合がある。
このため、論理設計の段階において、非同期箇所の動作を検証してデータ信号の受け渡しが正常におこなわれているかどうかを確認することが望ましい。なぜなら、できる限り早い段階で非同期箇所に潜む問題を把握し、適切な回路修正をおこなうことが設計期間の短縮化につながるからである。
ここで、非同期箇所で発生する問題を具体的に説明する。図1は、検証対象回路の一例を示す回路図(その1)である。なお、図面では、検証対象回路の一部を抜粋して表示している。図1において、検証対象回路100は、フリップフロップ(以下、「FF」と表記する)101と、FF102と、FF103と、FF104と、から構成されている。
クロックドメインCD1は、クロックclk1で動作する同期箇所である。クロックドメインCD2は、クロックclk2で動作する同期箇所である。ここでは、クロックドメインCD1,CD2間でデータ信号A1,B1の受け渡しがおこなわれる。
このとき、データ信号A1,B1は、同じタイミングでFF101,FF102から出力される。ところが、受信側のFF103,FF104では、データ信号A1,B1を受信するタイミングにズレが生じてしまう。なぜなら、各FF間の遅延差は、物理設計、製造誤差、動作環境などの要因で変化するからである。また、クロックclk1とクロックclk2とは互いに独立したクロックソースを持つため、信号変化がSetup time違反/Hold time違反を起こすことは避けられない。
図2は、信号の波形を示す波形図(その1)である。図2において、検証対象回路100内の各信号の波形が示されている。図2に示すように、FF103,FF104(図1参照)がデータ信号A1,B1を受信するタイミングにズレが生じることで、データ信号A2,B2の値が変化するタイミングに1サイクルのズレが生じている。
このようなタイミングのズレが生じてしまうと、受信側のFF103,FF104で適切な値のデータ信号A2,B2を出力することができず(出力値が非決定的)、FF103,FF104より後段に機能障害を引き起こしてしまう場合があるという問題がある。
さらに、データ信号A1,B1の値の変化と受信側のクロックclk2の立ち上がりのタイミングが非常に近い場合には、データ信号A2,B2の値が不安定となる、いわゆるメタステーブル状態となる問題がある。例えば、データ信号B2の値が「1」になったり「0」になったりする予測不能なランダム性が発生してしまう。
さらに、クロックドメインCD1,CD2間に組合せ回路が存在する場合には、その組合せ回路で発生するグリッジを受信側のFF103,FF104が拾ってしまうことで、後段に機能障害を引き起こしてしまう場合があるという問題がある。グリッジとは、瞬間的(1サイクル未満)に発生する予期しないエラー(パルス)である。
なお、新規設計においては非同期箇所のパス上に組合せ回路を挿入する設計を排除することで、グリッジの発生を防ぐことも考えられるが、実際には性能向上などの観点からこのような設計がおこなわれることが少なくない。さらに、第三者が設計した回路(例えば、IP:Intellectual Propertyなど)を検証しなければならない場合もある。
これらの問題は、受信側のFF103,FF104から出力されるデータ信号A2,B2の値が非決定的となることにより発生する。そこで、非同期箇所から不定値のデータ信号が出力される機構を意図的に作り出し、後段の回路において、その問題を論理として吸収し誤動作を解消するようになっているかどうかを検証するための手法を提案する。
(本実施の形態の概要)
つぎに、本実施の形態の概要について説明する。本実施の形態では、値が定まっていない不定値Xを利用して、上述したタイミングのズレ、メタステーブル状態およびグリッジの影響を検証対象回路内の非同期箇所で意図的に発生させる回路モデルを提供する。
ここで、本実施の形態にかかる回路モデルについて説明する。図3は、検証対象回路の一例を示す回路図(その2)である。なお、図面では、検証対象回路の一部を抜粋して表示している。図3において、検証対象回路300は、FF301,FF302,FF303と、ANDゲート304と、から構成されている。
クロックドメインCD3は、クロックclk1で動作する同期箇所である。クロックドメインCD4は、クロックclk2で動作する同期箇所である。また、a1,b1,c1,d1,e1,f2はデータ信号名を示している。ここでは、クロックドメインCD3,CD4間でクロックclk1,clk2の乗り換えがおこなわれる。
このため、FF303がメタステーブル状態となる、または、FF303がANDゲート304(組合せ回路)で発生するグリッジを拾ってしまうことにより、クロックドメインCD4(FF303)から出力されるデータ信号f2の値が不規則に変化するときの動作検証をおこなう必要がある。
そこで、FF303から出力されるデータ信号f2の値が不規則に0または1となる回路モデルを生成する。具体的には、送信側のクロックドメインCD3からの出力信号を一定期間継続して不定値Xに置き換える機能と、受信側のクロックドメインCD4から不定値Xの出力信号を受信する都度、その値を0または1に不規則に置き換える機能と、を備えた回路モデルを生成する。
図4は、回路モデルの一例を示す回路図(その1)である。図4において、回路モデル400は、FF301,FF302から出力されるデータ信号c1,d1を一定期間継続して不定値Xに置き換える機能部410と、FF303から不定値Xのデータ信号f2を受信する都度、その値を0または1に不規則に置き換える機能部420と、を備えた回路である。
ここで、回路モデル400内の各信号の波形について具体的に説明する。図5は、信号の波形を示す波形図(その2)である。図5において、図4に示した回路モデル400内の各信号の波形が示されている。これによれば、クロックclk1の立ち上がりに合わせて、FF301,FF302から一定期間継続して不定値Xのデータ信号c1,d1が出力されている。
このため、ANDゲート304から一定期間継続して不定値Xのデータ信号e1が出力される。さらに、不定値Xが出力されている期間中にクロックclk2が立ち上がると、FF303から不定値Xのデータ信号f2が出力されることとなる。そして、図4に示した機能部420によりFF303から不定値Xのデータ信号f2を受信する都度、その値を不規則に0または1に置き換える。
これにより、データ信号f2の値が不規則に0または1に変化することとなり、メタステーブル状態やグリッジの影響によるランダム性を再現することができる。また、この回路モデル400を用いて検証対象回路300の論理検証をおこなうことにより、クロックドメイン・クロッシングによる影響を検証することができる。
(検証支援装置のハードウェア構成)
つぎに、本実施の形態にかかる検証支援装置のハードウェア構成について説明する。図6は、検証支援装置のハードウェア構成を示す説明図である。図6において、検証支援装置600は、コンピュータ本体610と、入力装置620と、出力装置630と、から構成されており、不図示のルータやモデムを介してLAN,WANやインターネットなどのネットワーク640に接続可能である。
コンピュータ本体610は、CPU,メモリ,インターフェースを有する。CPUは、検証支援装置600の全体の制御を司る。メモリは、ROM,RAM,HD,光ディスク611,フラッシュメモリから構成される。メモリはCPUのワークエリアとして使用される。
また、メモリには各種プログラムが格納されており、CPUからの命令に応じてロードされる。HDおよび光ディスク611はディスクドライブによりデータのリード/ライトが制御される。また、光ディスク611およびフラッシュメモリはコンピュータ本体610に対し着脱自在である。インターフェースは、入力装置620からの入力、出力装置630への出力、ネットワーク640に対する送受信の制御をおこなう。
また、入力装置620としては、キーボード621、マウス622、スキャナ623などがある。キーボード621は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式であってもよい。マウス622は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。スキャナ623は、画像を光学的に読み取る。読み取られた画像は画像データとして取り込まれ、コンピュータ本体610内のメモリに格納される。なお、スキャナ623にOCR機能を持たせてもよい。
また、出力装置630としては、ディスプレイ631、スピーカ632、プリンタ633などがある。ディスプレイ631は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。また、スピーカ632は、効果音や読み上げ音などの音声を出力する。また、プリンタ633は、画像データや文書データを印刷する。
(検証支援装置の機能的構成)
つぎに、検証支援装置の機能的構成について説明する。図7は、検証支援装置の機能的構成を示すブロック図である。図7において、検証支援装置600は、取得部701と、抽出部702と、生成部703と、判定部704と、出力部705と、実行部706と、を備えている。
これら各機能701〜706は、検証支援装置600の記憶部に記憶された当該機能701〜706に関するプログラムをCPUに実行させることにより、または、入出力I/Fにより、当該機能を実現することができる。また、各機能701〜706からの出力データは上記記憶部に保持される。また、図7中矢印で示した接続先の機能は、接続元の機能からの出力データを記憶部から読み込んで、当該機能に関するプログラムをCPUに実行させるものとする。
まず、取得部701は、検証対象回路の回路情報を取得する機能を有する。回路情報とは、例えば、HDL(Hardware Description Language)を用いて記述されたRTL記述や回路図などである。この回路情報は、検証支援装置600に直接入力することとしてもよく、また、不図示の外部装置からの取得、不図示のデータベースやライブラリからの抽出によって取得することとしてもよい。
ここで、検証対象回路の回路情報の具体例について説明する。図8は、回路情報の一例を示す説明図(その1)である。図8において、回路情報800は、検証対象回路300(図3参照)の動作仕様を定義するRTL記述である。具体的には、クロックclk1,clk2に応じて受け渡されるデータ信号a1,b1,c1,d1,e1,f2の流れが定義されている。
抽出部702は、検証対象回路の中から、クロックの異なるクロックドメイン間でデータ転送する非同期箇所を抽出する機能を有する。クロックドメインとは、検証対象回路のうち同一のクロックで動作する同期箇所である。具体的には、抽出部702は、異なるクロックで動作する回路素子間で一方の回路素子から他方の回路素子へデータ信号が受け渡されてクロックの乗り換え(クロックドメイン・クロッシング)が起こる非同期箇所を抽出する。回路素子は、例えば、フリップフロップやラッチなどである。
より具体的には、例えば、検証対象回路内の全非同期箇所がリスト化された非同期リストを参照して、任意の非同期箇所を抽出する。この非同期リストは、取得部701によって取得された検証対象回路の回路情報を、既存の非同期抽出プログラムに入力することで自動作成することができる。
ここで、非同期リストの具体例について説明する。図9は、非同期リストの具体例を示す説明図(その1)である。図9において、非同期リスト900は、検証対象回路300に存在する非同期箇所ごとに、CDC名、送信FF名、受信FF名に関するリスト情報を有している。
CDC名は、クロックドメイン・クロッシングが起こる箇所を識別する名称である。送信FFは、CDC内で受け渡されるデータ信号の送信側のフリップフロップを識別する名称である。受信FFは、CDC内で受け渡されるデータ信号の受信側のフリップフロップを識別する名称である。
ここでは、CDC1内の送信FF301,302および受信FF303が示されている(図3参照)。また、非同期リスト900には、各FFのクロック名、入力信号名、出力信号名が示されている。FF301を例に挙げると、クロックは「DUT.clk1」、入力信号は「DUT.a1」、出力信号は「DUT.c1」である。
この場合、上記抽出部702は、非同期リスト900を参照して、検証対象回路300の中から、異なるクロックclk1,clk2で動作するFF間(FF301−FF303およびFF302−FF303)でデータ転送をおこなう非同期箇所(CDC1)のリスト情報を抽出することとなる。
図7の説明に戻り、生成部703は、抽出部702によって抽出された非同期箇所と、当該非同期箇所内の送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第1の回路素子群と、非同期箇所内の受信側の回路素子から出力される不定値のデータ信号を受信する都度、当該データ信号の値を1または0に不規則に置き換える第2の回路素子群と、からなる回路モデルを生成する機能を有する。
回路モデルは、非同期箇所に第1および第2の回路素子群が接続された回路である。第1の回路素子群は、例えば、図4に示した回路モデル400内の機能部410の機能を実現する回路素子群(部分回路)である。また、第2の回路素子群は、例えば、図4に示した回路モデル400内の機能部420の機能を実現する回路素子群(部分回路)である。
具体的には、例えば、検証対象回路の回路情報と後述する回路モデル生成用のテンプレートとを用いて回路モデルを生成することとしてもよく、また、検証対象回路の回路図に第1および第2の回路素子群の機能を実現する論理回路を挿入することで回路モデルを生成することとしてもよい。
また、上記第1の回路素子群は、非同期箇所の送信クロックの立ち上がり時刻を基準として、送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える機能を有することとしてもよい。なお、期間とは、シミュレーションにおける期間を表わす変数である。
これにより、データ信号の値を不定値に置き換える開始時刻を、送信クロックの立ち上がりタイミングに合わせて制御することができる。また、不定値に置き換える期間は、例えば、送信クロックの立ち上がりに合わせてタイマをセットすることで制御することができる。なお、セットする期間は、例えば、図6に示した入力装置620をユーザが操作することで任意に設定可能である。
ここで、図3に示した検証対象回路300を例に挙げて、送信クロックの立ち上がり時刻を基準として、送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える機能を有する回路モデルについて説明する。なお、図3の例では、図面に表示されている部分が非同期箇所となる。
図10は、回路モデルの一例を示す回路図(その2)である。図10において、回路モデル1000は、クロックclk1の立ち上がり時刻を基準として、FF301,FF302から出力されるデータ信号c1,d1を一定期間継続して不定値Xに置き換える機能を有する回路である。
具体的には、回路モデル1000は、図4に示した回路モデル400に、クロックclk1の立ち上がりから一定期間後(タイマを設定)にパルスを発生させる機能部1010が追加された回路である。この場合、機能部410は、クロックclk1が立ち上がってから機能部1010からのパルスを受信するまでの一定期間継続してデータ信号c1,d1を不定値Xに置き換えることとなる。
図11は、信号の波形を示す波形図(その3)である。図11において、図10に示した回路モデル1000内の各信号の波形が示されている。なお、図11中、左側の波形図は、検証対象回路300内の各信号のオリジナルの波形である。
これによれば、クロックclk1の立ち上がりに合わせて、送信側のFF301,302から出力されるデータ信号c1,d1の値が一定期間(rst1が立ち上がるまでの期間)継続して不定値Xに置き換えられている。そして、クロックclk2が立ち上がったときにデータ信号e1の値が不定値Xになっていると、データ信号f2に不定値Xが取り込まれてランダムな値となる。
図7の説明に戻り、上記第1の回路素子群は、送信側の回路素子から出力されるデータ信号の値を、非同期箇所の送信クロックの立ち上がり時刻から受信クロックの立ち上がり時刻までの期間継続して不定値に置き換える機能を有することとしてもよい。
これにより、データ信号の値を不定値に置き換える期間を、送信クロックおよび受信クロックの立ち上がりタイミングに合わせて制御することができる。具体的には、例えば、送信クロックの立ち上がりに合わせて不定値への置き換えを開始し、つぎに受信クロックが立ち上がったときに不定値への置き換えを停止する。
ここで、図3に示した検証対象回路300を例に挙げて、送信側の回路素子から出力されるデータ信号の値を、非同期箇所の送信クロックの立ち上がり時刻から受信クロックの立ち上がり時刻までの期間継続して不定値に置き換える機能を有する回路モデルについて説明する。
図12は、回路モデルの一例を示す回路図(その3)である。図12において、回路モデル1200は、FF301,FF302から出力されるデータ信号c1,d1を、クロックclk1の立ち上がり時刻からクロックclk2の立ち上がり時刻までの期間継続して不定値Xに置き換える機能を有する回路である。
具体的には、回路モデル1200は、図4に示した回路モデル400に、クロックclk2の立ち上がり直後にパルスを発生させる機能部1210が追加された回路である。この場合、機能部410は、クロックclk1の立ち上がりからクロックclk2の立ち上がりまでの期間継続してデータ信号c1,d1を不定値Xに置き換えることとなる。
図13は、信号の波形を示す波形図(その4)である。図13において、図12に示した回路モデル1200内の各信号の波形が示されている。これによれば、クロックclk1が立ち上がってからクロックclk2が立ち上がるまでの間、送信側のFF301,302から出力されるデータ信号c1,d1の値が不定値Xに置き換えられている。このため、クロックclk2が立ち上がったときにデータ信号f2に不定値Xが取り込まれてランダムな値となる。
なお、回路モデル1000では、例えば、クロックclk2のクロック周期が大きい場合には、データ信号f2に不定値Xが取り込まれないことがある。すなわち、クロックclk2の立ち上がり前に一定期間が経過し、データ信号f2に不定値Xが取り込まれない場合である。
一方、回路モデル1200では、受信側のFF303が不定値Xのデータ信号e1を拾うまで、送信側のFF301,302から出力されるデータ信号c1,d1の値を不定値Xに置き換えることとなるため、確実にデータ信号f2に不定値Xが取り込まれることとなる。
図7の説明に戻り、上記第2の回路素子群は、受信側の回路素子から出力される不定値のデータ信号が受信された回数、当該データ信号の値が1に置き換えられた回数および当該データ信号の値が0に置き換えられた回数を計数する機能を有することとしてもよい。
第2の回路素子群において計数される計数結果は、例えば、後述する出力部705によって出力される。これにより、検証者は、例えば、不定値Xのデータ信号f2が機能部420に到達した回数、該データ信号f2の値が1に置き換えられた回数および該データ信号f2の値が0に置き換えられた回数を把握することができる。
さらに、この計数結果を用いてテストベンチの有効性を評価することができる。例えば、論理検証がおこなわれた結果、非同期箇所のクロックドメイン・クロッシングによる影響が適切に検証されていない場合に、データ信号f2に不定値Xが取り込まれていないからなのか、テストパターンが不適切なのかを評価することができる。
判定部704は、抽出部702によって抽出された非同期箇所内に受信側のクロックドメインが複数存在するか否かを判定する機能を有する。具体的には、例えば、非同期リストのリスト情報を用いて、非同期箇所内に受信側のクロックドメインが複数存在するか否かを判定することとしてもよい。
また、生成部703は、判定部704によって複数存在すると判定された場合、非同期箇所の送信クロックの立ち上がり時刻を基準として、送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第1の回路素子群を含む回路モデル(例えば、回路モデル1000)を生成することとしてもよい。
一方、生成部703は、判定部704によって複数存在しないと判定された場合、送信側の回路素子から出力されるデータ信号の値を、非同期箇所の送信クロックの立ち上がり時刻から非同期箇所の受信クロックの立ち上がり時刻までの一定期間継続して不定値に置き換える第1の回路素子群を含む回路モデル(例えば、回路モデル1200)を生成することとしてもよい。
なぜなら、非同期箇所内に受信側のクロックドメインが複数存在する場合、送信クロックの立ち上がり時刻から受信クロックの立ち上がり時刻までの一定期間継続して不定値に置き換えてしまうと、受信側の回路素子が不定値を複数回拾ってしまう不具合が発生してしまう可能性があるからである。
このため、非同期箇所内に受信側のクロックドメインが複数存在する場合には、送信側の回路素子から出力されるデータ信号の値を、送信クロックの立ち上がり時刻を基準に一定期間継続して不定値に置き換える手法を用いることが望ましい。すなわち、受信側の回路素子が不定値を複数回拾ってしまう前に不定値への置き換えを強制的に停止する。
また、生成部703は、判定部704によって複数存在すると判定された場合、非同期箇所と、非同期箇所内の送信クロックの立ち上がり時刻のあと最初に非同期箇所内の受信クロックが立ち上がる時刻を基準として、送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第1の回路素子群と、上記第2の回路素子群と、からなる回路モデルを生成することとしてもよい。
また、生成部703は、判定部704によって複数存在すると判定された場合、非同期箇所と、非同期箇所内の受信クロックが立ち上がる時刻のうち、複数の受信クロックが同時に立ち上がる時刻を除く時刻を基準として、送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第1の回路素子群と、上記第2の回路素子群と、からなる回路モデルを生成することとしてもよい。
これらの回路モデルは、非同期箇所内に受信側のクロックドメインが複数存在する場合に発生する問題を回避するために、受信側のクロックの立ち上がりタイミングを狙ってデータ信号の値を不定値に置き換える回路である(後述する実施例1に相当)。
また、生成部703は、判定部704によって複数存在すると判定された場合、非同期箇所と、非同期箇所内の非同期パスごとに送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第1の回路素子群と、第2の回路素子群と、からなる回路モデルを生成することとしてもよい。
この回路モデルは、非同期箇所内に受信側のクロックドメインが複数存在する場合に発生する問題を回避するために、非同期箇所内の全非同期パスを独立させて不定値のデータ信号を出力する回路である(後述する実施例2に相当)。
ここで、生成部703による生成処理の具体的処理手順について説明する。ここでは、検証対象回路300(図3参照)内に存在する非同期箇所(CDC1)の回路モデル400(図4参照)を生成する場合を例に挙げて説明する。
生成部703は、非同期箇所(CDC1)のリスト情報と、回路モデル生成用のテンプレートとを用いて、検証対象回路300内の非同期箇所の回路モデル400を生成する。このテンプレートは、回路モデルの機能に合わせて予め用意されており、例えば、不図示のデータベースやライブラリからの抽出によって取得することができる。
図14は、テンプレートの一例を示す説明図(その1)である。図14において、テンプレート1400には、回路モデルの動作機能を定義するテンプレート情報が記述されている。生成部703は、非同期リストにリスト化されている全非同期箇所について、テンプレート1400内の『%名前()』を対応する値で置き換えることで、各非同期箇所の回路モデルを生成することができる。
ここで、『%for t in %txList()』は、非同期箇所内の送信FFについて展開することを意味している。つまり、『%t』は『送信FF名』を意味している。また、『%for r in %rxList()』は、非同期箇所内の受信FFについて展開することを意味している。つまり、『%r』は『受信FF名』を意味している。
具体的には、まず、抽出部702によって抽出された非同期箇所のリスト情報の中から送信FF名を検出する。このあと、検出された送信FF名をテンプレート1400内の『%t』に挿入する。そして、『%名前(送信FF名)』に対応する値をリスト情報から特定し、『%名前(送信FF名)』を特定された値に置き換える。
つぎに、非同期箇所のリスト情報の中から受信FF名を検出する。このあと、検出された受信FF名をテンプレート1400内の『%r』に挿入する。そして、『%名前(受信FF名)』に対応する値をリスト情報から特定し、『%名前(受信FF名)』を特定された値に置き換える。この手順を非同期リストにリスト化された非同期箇所ごとに繰り返すことで、各非同期箇所の回路モデルを生成することができる。
ここで、非同期リスト900を例に挙げると、まず、非同期リスト900のリスト情報の中から非同期箇所(CDC1)の送信FF名を検出する。ここでは、FF301,FF302が検出され、これら2要素について展開する。以下、FF301について展開する場合を例に挙げて説明する。
このあと、検出された送信FF名(FF301)を『%t』に挿入する。そして、『%名前(FF301)』に対応する値をリスト情報から特定し、『%名前(FF301)』を特定された値に置き換える。具体的には、『%clock(FF301)』は、FF301に対するクロック名『DUT.clk1』に置き換わる。
また、『%output(FF301)』は、FF301に対する出力信号名『DUT.c1』に置き換わる。また、『%input(FF301)』は、FF301に対する入力信号名『DUT.a1』に置き換わる。
つぎに、非同期リスト900のリスト情報の中から非同期箇所(CDC1)の受信FF名を検出する。ここでは、FF303が検出される。このあと、検出された受信FF名(FF303)を『%r』に挿入する。そして、『%名前(FF303)』に対応する値をリスト情報から特定し、『%名前(FF303)』を特定された値に置き換える。
具体的には、『%output(FF303)』は、FF303に対する出力信号名『DUT.f2』に置き換わる。このように、回路モデル生成用のテンプレート1400に非同期箇所(CDC1)のリスト情報を与えることで、非同期箇所(CDC1)の回路モデル400を生成することができる。
図7の説明に戻り、出力部705は、生成部703によって生成された回路モデルを出力する機能を有する。具体的には、例えば、回路モデルの動作仕様が定義された回路モデル情報を出力する。この回路モデル情報は、例えば、検証対象回路の回路情報と同じHDLによって記述されている。
ここで、回路モデル情報の具体例について説明する。図15は、回路モデル情報の具体例を示す説明図(その1)である。図15において、回路モデル情報1500には、図4に示した回路モデル400の動作仕様が定義されている。
実行部706は、検証対象回路の回路情報と、生成部703によって生成された回路モデルとを用いて、該検証対象回路の論理シミュレーションを実行する機能を有する。具体的には、例えば、回路情報800と回路モデル情報1500とをテストベンチに与えることで、検証対象回路300内の非同期箇所におけるランダム性を考慮した論理シミュレーションを実行することができる。
また、出力部705は、実行部706によって実行された論理シミュレーションのシミュレーション結果を出力する機能を有する。なお、出力部705による出力形式は、ディスプレイ631での画面表示、プリンタ633での印刷出力、メモリへのデータ出力(保存)、外部のコンピュータ装置への送信のいずれであってもよい。
(検証支援装置600の検証支援処理手順)
つぎに、本実施の形態にかかる検証支援装置600の検証支援処理手順について説明する。図16は、検証支援装置の検証支援処理手順の一例を示すフローチャートである。図16のフローチャートにおいて、まず、取得部701により、検証対象回路の回路情報を取得したか否かを判断する(ステップS1601)。
ここで、検証対象回路の回路情報を取得するのを待って(ステップS1601:No)、取得した場合(ステップS1601:Yes)、この回路情報を用いて検証対象回路内の全非同期箇所がリスト化された非同期リストを作成する(ステップS1602)。
つぎに、抽出部702により、検証対象回路の非同期リストを参照して、該検証対象回路の中からクロックの異なるクロックドメイン間でデータ転送をおこなう非同期箇所を抽出する(ステップS1603)。そして、生成部703により、非同期箇所の動作検証をおこなうための回路モデルを生成する生成処理を実行する(ステップS1604)。
このあと、検証対象回路の中から抽出していない未抽出の非同期箇所があるか否かを判断し(ステップS1605)、未抽出の非同期箇所がある場合には(ステップS1605:Yes)、ステップS1603に戻る。
一方、未抽出の非同期箇所がない場合には(ステップS1605:No)、出力部705により、生成部703によって生成された回路モデルを出力して(ステップS1606)、本フローチャートによる一連の処理を終了する。
また、検証対象回路内の非同期箇所ごとの回路モデルが生成された結果、実行部706により、ステップS1601において取得された検証対象回路の回路情報と、ステップS1604において生成された回路モデルとを用いて、検証対象回路の論理シミュレーションを実行することとしてもよい。
つぎに、図16に示したステップS1604における生成処理の具体的処理手順について説明する。図17は、生成処理の具体的処理手順の一例を示すフローチャートである。図17のフローチャートにおいて、まず、回路モデル生成用のテンプレートを取得する(ステップS1701)。
このあと、図16に示したステップS1603において抽出された非同期箇所のリスト情報の中から送信FF名および受信FF名を検出する(ステップS1702)。つぎに、取得されたテンプレート内の『%t』および『%r』に、検出された送信FF名および受信FF名をそれぞれ挿入する(ステップS1703)。
そして、『%名前(送信FF名)』および『%名前(受信FF名)』に対応する値をリスト情報から特定する(ステップS1704)。最後に、『%名前(送信FF名)』および『%名前(受信FF名)』を特定された値に置き換えて(ステップS1705)、図16に示したステップS1605に移行する。
なお、回路モデル生成用のテンプレートが複数存在する場合には、すべてのテンプレートを用いて回路モデルが生成されるまでステップS1701〜ステップS1705の処理を繰り返すこととしてもよい。また、使用するテンプレートが予め設定されている場合には、ステップS1701において、複数のテンプレートの中から設定されたテンプレートを取得することとしてもよい。
以上説明した、本実施の形態によれば、検証対象回路内の非同期箇所の出力値が不規則に変化する回路モデルを提供することができる。また、非同期箇所内の送信FFから出力されるデータ信号の値を不定値Xに置き換える期間を適切に制御することで、非同期箇所における出力値のランダム性を効率よく再現することができる。
さらに、回路モデルを用いて検証対象回路の論理シミュレーションを実行することにより、非同期箇所のクロックドメイン・クロッシング(タイミングのズレ、メタステーブル状態およびグリッジ)による影響を効率的かつ効果的に検証することができる。
つぎに、上述した実施の形態の実施例1について説明する。実施例1では、非同期箇所内に受信側のクロックドメインが複数存在する場合について説明する。なお、実施の形態1において説明した箇所と同一箇所については同一符号を付して図示および説明を省略する。
受信側のクロックドメインが複数存在する場合、送信側のフリップフロップから出力されるデータ信号の値を不定値Xに置き換える期間が長くなりすぎると誤動作を引き起こす可能性がある。ここで、検証対象回路1800を例に挙げて問題点を具体的に説明する。
図18は、検証対象回路の一例を示す回路図(その3)である。なお、図面では、検証対象回路の一部を抜粋して表示している。図18において、検証対象回路1800は、FF1801,FF1802,FF1803,FF1804と組合せ回路1805と、から構成されている。
第1の問題として、FF1801から出力されるデータ信号t1の値を不定値Xに置き換える期間が長くなりすぎると、FF1801と同じクロックclk1で動作するFF1802が、不定値Xを取り込んで誤動作を引き起こしてしまうという問題がある。第2の問題として、FF1801と異なるクロックclk2,3で動作するFF1803,1804が不定値Xを複数回取り込むと誤動作を引き起こしてしまうという問題がある。
これら第1および第2の問題を解決するためには、まず、FF1801から出力されるデータ信号t1の値の不定値Xへの置き換えを、つぎにclk1が立ち上がる前に停止する必要がある。さらに、データ信号t1の値を不定値Xに置き換える期間を、clk2,3のうち最短のクロック周期に合わせることが考えられる。
ところが、第3の問題として、データ信号t1の値を不定値Xに置き換える期間を最短のクロック周期に合わせると、誤動作を防ぐことはできるが、期間が短いために非同期箇所でのランダムな動作が起こる確率が低下してしまうという問題がある。
そこで、実施例1では、第1〜第3の問題を解決するために、送信クロック(clk1)が立ち上がったあと、最初に受信クロック(clk2,clk3)が立ち上がるタイミングに合わせてデータ信号t1の値を不定値Xに置き換える。これにより、ランダムな動作が起こる確率を低下させることなく誤動作を防ぐことができる。
具体的には、受信クロックclk2,clk3の立ち上がりがある一定期間パルスを発生させるwindow信号を利用して、データ信号t1の値を不定値Xに置き換える期間を制御する。ここで、受信クロックの立ち上がりに合わせて一定期間パルスを発生させるwindow信号を生成する生成処理の概要について説明する。
図19は、window信号の生成処理の概要を示す説明図である。図19に示すように、テストベンチのクロックジェネレータ1910部分に回路1920,1930を挿入することで、受信クロックの立ち上がり時刻直前に一定期間パルスを発生させる機構を作る。
具体的には、回路1920は、クロックclkに遅延を入れたクロックnewclkを供給する回路である。なお、これ以降、テストベンチでは、クロックnewclkを新しいクロックとして使用する。また、回路1930は、クロックclkが立ち上がってから一定期間パルスを発生させる回路である。
これにより、window信号が1の区間にクロックnewclkが立ち上がる関係を作り出すことができる。なお、回路1930がパルスを発生させる期間は任意に設定可能である。このとき、少なくともクロックclkとクロックnewclkとの遅延差以上となる期間に設定する必要がある。
具体的には、例えば、HDLを用いて上述の機構を実現するテストベンチを作成する。より具体的には、テストベンチのクロックジェネレータに相当する記述部分に、回路1920および回路1930の機能を定義する記述を追加することで実現することができる。
ここで、図18に示した検証対象回路1800を例に挙げて、window信号を利用して不定値Xのデータ信号t1を出力する場合の各信号の波形について説明する。図20は、信号の波形を示す波形図(その5)である。
これによれば、clk2_window,clk3_windowのパルスの発生タイミングを利用して、クロックclk1が立ち上がったあと、最初にクロックclk2,clk3が立ち上がるタイミングを狙ってデータ信号t1の値を不定値Xに置き換えている。
ここで、実施例1の回路モデルについて説明する。図21は、回路モデルの一例を示す回路図(その4)である。図21において、回路モデル2100は、検証対象回路1800の非同期箇所(図18に表示した部分)の回路モデルである。この回路モデル2100は、clk2_windowおよびclk3_windowの値が1の期間に限定して、データ信号t1の値を不定値Xに置き換える機能を有している。
これによれば、クロックclk1が立ち上がったあと、最初にクロックclk2,clk3が立ち上がるタイミングを狙って不定値Xのデータ信号t1を出力することができる。しかし、この回路モデル2100は、クロックclk2,clk3が同時に立ち上がると誤動作を発生させてしまう可能性があるという問題がある。
具体的には、クロックclk2,clk3が同時に立ち上がったときに、いずれか一方のクロック(例えば、クロックclk2)の立ち上がりが2回目の立ち上がりであるときに、FF1803が不定値Xを複数回取り込むこととなってしまう。同一サイクルで不定値Xを複数回取り込んでしまうと、実際にはありえないランダム性が発生してしまう。
そこで、この問題を解決するための回路モデルを図22および図23に示す。図22,図23は、回路モデルの一例を示す回路図(その5,その6)である。図22,図23において、回路モデル2200,2300は、クロックclk2,clk3が同時に立ち上がったときには、不定値Xのデータ信号t1を出力しない機能を有する回路である。
具体的には、回路モデル2200は、受信側のすべてのクロックclk2_window,clk3_windowの値が0の期間に不定値Xのデータ信号t1を出力する機能を有している。また、回路モデル2300は、受信側のすべてのクロックclk2_window,clk3_windowの値が0の期間には不定値Xのデータ信号t1を出力しない機能を有している。
回路モデル2200,2300によれば、クロックclk1が立ち上がったあと、最初にクロックclk2,clk3が立ち上がるタイミングを狙って不定値Xのデータ信号t1を出力することができる。さらに、クロックclk2,clk3が同時に立ち上がるときには不定値Xのデータ信号t1が出力されないため、FF1803が不定値Xを複数回取り込むことによる誤動作を防ぐことができる。
ここで、実施例1における回路モデルの生成処理の具体例について説明する。ここでは、送信クロックが立ち上がったあと、受信クロックのwindow信号の値が1の期間に限定して不定値Xのデータ信号を出力する場合(例えば、図21に示した回路モデル2100)を例に挙げて、生成部703による生成処理の具体例について説明する。
まず、検証対象回路の一例について説明する。図24は、検証対象回路の一例を示す回路図(その4)である。なお、図面では、検証対象回路の一部を抜粋して表示している。図24において、検証対象回路2400は、FF2401,FF2402,FF2403,FF2404とANDゲート2405と、から構成されている。
つぎに、検証対象回路2400の回路情報について説明する。図25は、回路情報の一例を示す説明図(その2)である。図25において、回路情報2500は、検証対象回路2400(図24参照)の動作仕様を定義するRTL記述である。具体的には、クロックclk1,clk2,clk3に応じて受け渡されるデータ信号s1,s2,t1,t2,q、r2,r3の流れが定義されている。
この回路情報2500を非同期抽出プログラムに入力することで、検証対象回路2400の非同期リストを作成する。図26は、非同期リストの具体例を示す説明図(その2)である。図26において、非同期リスト2600は、検証対象回路2400に存在する非同期箇所ごとに、CDC名、送信FF名、受信FF名に関するリスト情報を有している。
つぎに、非同期リスト2600と回路モデル生成用のテンプレートとを用いて回路モデルを生成する。図27は、テンプレートの一例を示す説明図(その2)である。図27において、テンプレート2700には、非同期箇所の回路モデルの動作機能を定義するテンプレート情報が記述されている。
生成部703は、非同期リスト2600を参照して、テンプレート2700内の『%名前()』を対応する値で置き換えることで、非同期箇所の回路モデルを生成することができる。なお、テンプレート2700を用いて回路モデルを生成する手順は上述した実施の形態で説明した手順と同様のため詳細な説明は省略する。
図28は、回路モデル情報の具体例を示す説明図(その2)である。図28において、回路モデル情報2800には、非同期リスト2600とテンプレート2700とを用いて生成された回路モデル(回路モデル2100に相当)の動作仕様が定義されている。
なお、生成する回路モデルは任意に選択可能としてもよい。例えば、非同期箇所の出力値が不定値Xとなるランダム性を最大化したい場合には、受信側の複数のクロックが同時に立ち上がったとしても不定値Xのデータ信号を出力する回路モデル(例えば、回路モデル2100)を選択することとしてもよい。
一方、多少のランダム性の低下を許して誤動作を防ぎたい場合には、受信側の複数のクロックが同時に立ち上がったときに不定値Xのデータ信号を出力しない回路モデル(例えば、回路モデル2200,2300)を選択することとしてもよい。
(実施例1における検証支援処理手順)
つぎに、実施例1における検証支援装置600の検証支援処理手順について説明する。図29は、実施例1における検証支援装置の検証支援処理手順の一例を示すフローチャートである。図29のフローチャートにおいて、まず、取得部701により、検証対象回路の回路情報を取得したか否かを判断する(ステップS2901)。
ここで、検証対象回路の回路情報を取得するのを待って(ステップS2901:No)、取得した場合(ステップS2901:Yes)、この回路情報を用いて検証対象回路内の全非同期箇所がリスト化された非同期リストを作成する(ステップS2902)。
つぎに、検証対象回路内の各クロックに対応したwindow信号を生成する(ステップS2903)。このあと、抽出部702により、検証対象回路の非同期リストを参照して、該検証対象回路の中からクロックの異なるクロックドメイン間でデータ転送をおこなう非同期箇所を抽出する(ステップS2904)。
そして、生成部703により、テンプレート2700を用いて非同期箇所の回路モデルを生成する生成処理を実行する(ステップS2905)。このあと、検証対象回路の中から抽出していない未抽出の非同期箇所があるか否かを判断し(ステップS2906)、未抽出の非同期箇所がある場合には(ステップS2906:Yes)、ステップS2904に戻る。
一方、未抽出の非同期箇所がない場合には(ステップS2906:No)、出力部705により、生成部703によって生成された回路モデルを出力して(ステップS2907)、本フローチャートによる一連の処理を終了する。なお、ステップS2905における生成処理は、上述した実施の形態の図17のフローチャートで説明した手順と同様のため説明を省略する。
実施例1によれば、データ信号の値を不定値Xに置き換える開始時刻を、受信クロックの立ち上がりタイミングに合わせて制御することができる。これにより、非同期箇所でのランダムな動作が起こる確率を低下させることなく、受信FFが不定値Xのデータ信号を複数回取り込むことによる誤動作を防ぐことができる。
また、データ信号の値を不定値Xに置き換える開始時刻を、複数の受信クロックが同時に立ち上がる時刻を除く受信クロックの立ち上がり時刻を基準とすることで、複数の受信FFが同時に不定値Xのデータ信号を取り込むことを防ぐことができる。これにより、受信FFが不定値Xのデータ信号を複数回取り込むことによる誤動作を確実に防ぐことができる。
つぎに、上述した実施の形態の実施例2について説明する。上述した実施例1では、非同期箇所の出力値が不定値Xとなるランダム性を最大化する、あるいは、多少のランダム性の低下を許して誤動作を防ぐなどの要求に合わせて回路モデルを生成する。実施例2では、不定値Xのランダム性を最大化し誤動作を防ぐ回路モデルを生成する。
まず、実施例2の概要について説明する。図30は、実施例2の概要を示す説明図である。図30において、非同期箇所3010と、回路モデル3020とが示されている。非同期箇所3010は、FF3001と、FF3002と、FF3003と、FF3004と、組合せ回路3005と、から構成されている。
非同期箇所3010では、それぞれクロックの異なるクロックドメイン間CD5,CD7と、クロックドメイン間CD5,CD8と、クロックドメイン間CD6,CD8でデータ信号の受け渡しがおこなわれている。
また、回路モデル3020は、非同期箇所3010と、非同期箇所3010内の非同期パスごとに送信側のFF3001,3002から出力されるデータ信号t1,t2の値を一定期間継続して不定値Xに置き換える機能と、受信側のFF3003,3004から出力される不定値Xのデータ信号r2,r3を受信する都度、当該データ信号r2,r3の値を1または0に不規則に置き換える機能と、を有する回路である。
非同期パスとは、クロックの異なるFF間でデータ信号の受け渡しをおこなうパスである。ここでは、クロックclk1で動作するFF3001からクロックclk2で動作するFF3003に辿り着くまでの非同期パスと、クロックclk1で動作するFF3001からクロックclk3で動作するFF3004に辿り着くまでの非同期パスと、クロックclk2で動作するFF3002からクロックclk3で動作するFF3004に辿り着くまでの非同期パスと、がある。
このように、受信側のクロックドメイン(CD7,CD8)が複数存在する場合には、非同期箇所3010内の非同期パスを独立させた回路モデル3020を生成することで、受信側のクロックclk2,clk3が同時に立ち上がることによる問題を回避することができる。つまり、受信側のクロックドメインごとに不定値Xのデータ信号を取り込むことができる。
ここで、非同期箇所内の非同期パスを独立させた回路モデルを生成するために用いるテンプレートについて説明する。図31は、テンプレートの一例を示す説明図(その3)である。図31において、テンプレート3100には、非同期箇所の回路モデルの動作機能を定義するテンプレート情報が記述されている。なお、図面では、テンプレートの一部を抜粋して表示している。
ここで、『%for c in %CDCList()』は、非同期箇所内のCDCについて展開することを意味している。つまり、『%CDC』は『CDC名』を意味している。上述した実施例1で説明した検証対象回路2400(図24参照)の非同期リスト2600(図26参照)を例に挙げると(以下同様)、CDC1,CDC2の2要素に展開される。
また、『%txList(CDC名)』は、CDC名に対する送信FFについて展開することを意味している。CDC2を例に挙げると、『%txList(CDC2)』は、FF2401,2402の2要素について展開される。
また、『%rxList(CDC名)』は、CDC名に対する受信FFについて展開することを意味している(不図示)。CDC2を例に挙げると、『%rxList(CDC2)』は、FF2404について展開される。
また、『%bypassLogic(CDC名)』は、CDC名に対する各送信FFの出力信号と受信FFの入力信号との間にある組合せ回路に相当する論理関数に展開される。さらに、この論理関数に現れる変数のうち対象の送信FFの出力信号であるものは、『tx』のあとにCDC名と送信FF名とを連結してできた名前で置き換えられる。
また、その他の変数は回路情報の信号値の参照となるように、その名前の前に階層パス指定(モジュール階層名と「.」)が追加される。例えば、『%bypassLogic(CDC1)』はFF2401の出力信号t1とFF2403の入力信号qとの間にあるANDゲート2405が対象となる。
具体的には、検証対象回路2400回路情報2500(図25参照)をコンパイルすることで、データ信号qの値を決める論理関数「t1&t2」が得られる。さらに、論理関数「t1&t2」に現れる「t1」はCDC1の送信FFであるFF2401の出力信号のため、「txCDC1FF2401」という名前で置き換えられる。
また、「t2」はCDC1とは関係の無い変数なので、回路情報の階層パス指定を追加した「DUT.t2」に置き換わる。これにより、『%bypassLogic(CDC1)』は『txCDC1FF2401&DUT.t2』に展開される。
図32は、回路モデル情報の具体例を示す説明図(その2)である。図32において、回路モデル情報3200には、図24に示した検証対象回路2400内の非同期箇所(図26に示した非同期リスト2600のCDC1,CDC2)の回路モデルの動作仕様が定義されている。なお、図面では、回路モデル情報の一部を抜粋して表示している。
この回路モデル情報3200と検証対象回路2400の回路情報2500(図25参照)とを用いて論理シミュレーションを実行することで、誤動作をおこすことなく非同期箇所におけるランダム性を効率よく検証することができる。
実施例2によれば、非同期箇所内の非同期パスを独立させることで、非同期箇所の出力値が不定値Xとなるランダム性を最大化するとともに、受信FFが不定値Xのデータ信号を複数回取り込むことによる誤動作を防ぐ回路モデルを提供することができる。さらに、実施例1で説明したwindow信号が不要となるため、回路内部でクロックを生成する検証対象にも対応可能となる。
以上説明したように、検証支援プログラム、検証支援装置、および検証支援方法によれば、クロックドメイン・クロッシングを含む論理設計に対する検証品質および検証効率を向上させ、設計期間の短縮化を図ることができる。
なお、本実施の形態で説明した検証支援方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVDなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネットなどのネットワークを介して配布することが可能な伝送媒体であってもよい。
また、本実施の形態で説明した検証支援装置600は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けIC(以下、単に「ASIC」と称す。)やFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。具体的には、たとえば、上述した検証支援装置600の機能701〜706をHDL記述によって機能定義し、そのHDL記述を論理合成してASICやPLDに与えることにより、検証支援装置600を製造することができる。
上述した実施の形態および実施例に関し、さらに以下の付記を開示する。
(付記1)コンピュータを、
検証対象回路の中から、クロックの異なるクロックドメイン間でデータ転送する非同期箇所を抽出する抽出手段、
前記抽出手段によって抽出された非同期箇所と、当該非同期箇所内の送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第1の回路素子群と、前記非同期箇所内の受信側の回路素子から出力される不定値のデータ信号を受信する都度、当該データ信号の値を1または0に不規則に置き換える第2の回路素子群と、からなる回路モデルを生成する生成手段、
前記生成手段によって生成された回路モデルを出力する出力手段、
として機能させることを特徴とする検証支援プログラム。
(付記2)前記生成手段は、
前記非同期箇所と、前記非同期箇所の送信クロックの立ち上がり時刻を基準として、前記送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第1の回路素子群と、前記第2の回路素子群と、からなる回路モデルを生成することを特徴とする付記1に記載の検証支援プログラム。
(付記3)前記生成手段は、
前記非同期箇所と、前記送信側の回路素子から出力されるデータ信号の値を、前記非同期箇所の送信クロックの立ち上がり時刻から前記非同期箇所の受信クロックの立ち上がり時刻までの期間継続して不定値に置き換える第1の回路素子群と、前記第2の回路素子群と、からなる回路モデルを生成することを特徴とする付記1に記載の検証支援プログラム。
(付記4)前記コンピュータを、
前記抽出手段によって抽出された非同期箇所内に受信側のクロックドメインが複数存在するか否かを判定する判定手段として機能させ、
前記生成手段は、
前記判定手段によって複数存在すると判定された場合、前記非同期箇所と、前記非同期箇所内の送信クロックの立ち上がり時刻のあと最初に前記非同期箇所内の受信クロックが立ち上がる時刻を基準として、前記送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第1の回路素子群と、前記第2の回路素子群と、からなる回路モデルを生成することを特徴とする付記1に記載の検証支援プログラム。
(付記5)前記生成手段は、
前記判定手段によって複数存在すると判定された場合、前記非同期箇所と、当該非同期箇所内の受信クロックが立ち上がる時刻のうち複数の受信クロックが同時に立ち上がる時刻を除く時刻を基準として、前記送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第1の回路素子群と、前記第2の回路素子群と、からなる回路モデルを生成することを特徴とする付記4に記載の検証支援プログラム。
(付記6)前記生成手段は、
前記判定手段によって複数存在すると判定された場合、前記非同期箇所と、当該非同期箇所内の非同期パスごとに前記送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第1の回路素子群と、前記第2の回路素子群と、からなる回路モデルを生成することを特徴とする付記4に記載の検証支援プログラム。
(付記7)前記コンピュータを、
前記検証対象回路の回路情報と、前記生成手段によって生成された回路モデルとを用いて、前記検証対象回路の論理シミュレーションを実行する実行手段として機能させ、
前記出力手段は、
前記実行手段によって実行された論理シミュレーションのシミュレーション結果を出力することを特徴とする付記1〜6のいずれか一つに記載の検証支援プログラム。
(付記8)前記生成手段は、
前記非同期箇所と、前記第1の回路素子群と、前記受信側の回路素子から出力される不定値のデータ信号が受信された回数、前記データ信号の値が1に置き換えられた回数および前記データ信号の値が0に置き換えられた回数を計数する前記第2の回路素子群と、からなる回路モデルを生成することを特徴とする付記1〜7のいずれか一つに記載の検証支援プログラム。
(付記9)検証対象回路の中から、クロックの異なるクロックドメイン間でデータ転送する非同期箇所を抽出する抽出手段と、
前記抽出手段によって抽出された非同期箇所と、当該非同期箇所内の送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第1の回路素子群と、前記非同期箇所内の受信側の回路素子から出力される不定値のデータ信号を受信する都度、当該データ信号の値を1または0に不規則に置き換える第2の回路素子群と、からなる回路モデルを生成する生成手段と、
前記生成手段によって生成された回路モデルを出力する出力手段と、
を備えることを特徴とする検証支援装置。
(付記10)検証対象回路の中から、クロックの異なるクロックドメイン間でデータ転送する非同期箇所を抽出する抽出工程と、
前記抽出工程によって抽出された非同期箇所と、当該非同期箇所内の送信側の回路素子から出力されるデータ信号の値を一定期間継続して不定値に置き換える第1の回路素子群と、前記非同期箇所内の受信側の回路素子から出力される不定値のデータ信号を受信する都度、当該データ信号の値を1または0に不規則に置き換える第2の回路素子群と、からなる回路モデルを生成する生成工程と、
前記生成工程によって生成された回路モデルを出力する出力工程と、
を含んだことを特徴とする検証支援方法。