(57)【特許請求の範囲】
【請求項１】
ＬＳＩの設計検証を行うＬＳＩ設計検証システムにおいて、
少なくとも入力変数を記憶する記憶手段と、
ＲＴＬ言語にて記述されたＬＳＩ設計内容の検討に際して、前記記憶手段に記憶された入力変数を用いて、前記ＲＴＬ言語上のある指定された文または文節を活性化させるための入力パターンを探索する探索手段を備えて成り、
前記探索手段は、前記ＲＴＬ言語上のある指定された文または文節を含むパスを確定する後方検索機能と、前記入力変数を記号化して保有し、この記号を用いたシミュレーションによって前記確定されたパスを活性化する記号シミュレーション機能と、前記確定されたパスを活性化する入力記号パターンから数値化された入力パターンを生成する入力パターン生成機能とを備えることを特徴とするＬＳＩ設計検証システム。
【請求項２】
請求項１に記載のＬＳＩ設計検証システムにおいて、
前記探索手段は、前記記号シミュレーションの結果によって活性化がカバーされた領域とされなかった領域に対応するＲＴＬ言語上の領域を調べ、カバーされなかった領域を活性化が必要な領域として指定するカバレッジ機能を備えることを特徴とするＬＳＩ設計検証システム。
【請求項３】
請求項１又は２に記載のＬＳＩ設計検証システムにおいて、
更に、前記ＲＴＬ言語で記述された文をデータ構造で表現するデータ構造作成手段を備えたことを特徴とするＬＳＩ設計検証システム。
【請求項４】
請求項３に記載のＬＳＩ設計検証システムにおいて、
前記データ構造作成手段は、文を文節に分解しその因果関係をデータ構造で表す文節データ構造作成機能と、この文節データ構造作成機能にて文節に分解された前記ＲＴＬ言語で記述された文を対応する順序回路に変改して順序回路データベースとして表す順序回路データベース作成機能を有することを特徴とするＬＳＩ設計検証システム。
【請求項５】
請求項４に記載のＬＳＩ設計検証システムにおいて、
前記順序回路データベース作成機能は、前記順序回路を、等価回路接続グラフ表示または制御データフローグラフ表示またはシステム依存グラフ表示またはそれらの組み合わせで表す機能を備えることを特徴とするＬＳＩ設計検証システム。
【請求項６】
請求項１乃至５のいずれか１項に記載のＬＳＩ設計検証システムにおいて、
データを入力する入力手段を有し、
前記入力手段から入力される入力データを判読して外部からの指示を判定する指示判定手段を有することを特徴とするＬＳＩ設計検証システム。
【請求項７】
請求項６に記載のＬＳＩ設計検証システムにおいて、
前記指示判定手段は、前記入力データから活性化させたい文あるいは文節または活性化させたい文あるいは文節を含むパスの指定を判定する活性化判断機能を有することを特徴とするＬＳＩ設計検証システム。
【請求項８】
請求項６に記載のＬＳＩ設計検証システムにおいて、
前記指示判定手段は、前記入力データをレジスタ変数として設定するレジスタ変数設定機能を有し、前記記号シミュレーション機能は前記設定されたレジスタ変数を用いて記号シミュレーションを行うことを特徴とするＬＳＩ設計検証システム。
【請求項９】
請求項１に記載のＬＳＩ設計検証システムにおいて、
前記記憶手段に記憶される内容には、演算処理部で実行されることによって前記記憶手段を除く手段を構成するプログラム群と、前記演算処理部に入力手段から入力される入力データと入力変数、前記ＲＴＬ言語にて記述された設計内容、前記演算処理部から入出力される中間データおよび出力される入力パターンが含まれることを特徴とするＬＳＩ設計検証システム。
【請求項１０】
ＬＳＩの設計の検証を行うＬＳＩ設計検証方法において、
設計内容を示すＲＴＬ言語を読み込んで順序回路データベースを作成するデータベース作成工程と、
入力された入力データから活性化したい文または文節の指定を判断する活性化判断工程と、
入力された入力データから前記活性化判断工程で判定された活性化したい文または文節を含むパスを確定するパス活性化確定工程と、
必要に応じて入力された入力データからレジスタ変数の初期値を設定するレジスタ変数設定工程と、
前記パス活性化確定工程で確定したパスに記号シミュレーションを実行して前記確定したパスの活性化を行う活性化実施工程と、
前記活性化実施工程で前記確定したパスに活性化させた入力パターンを数値化して出力する入力パターン出力工程とを備えたことを特徴とするＬＳＩ設計検証方法。
【請求項１１】
請求項１０に記載のＬＳＩ設計検証方法において、
前記活性化実施工程の後で、シミュレーションを実行して活性化がカバーされなかった領域に対応するＲＴＬ言語上の領域を活性化が必要な領域として指定し前記活性化判断工程に送るカバレッジ工程を更に備えることを特徴とするＬＳＩ設計検証方法。
【請求項１２】
コンピュータに、
記憶手段から設計内容を示すＲＴＬ言語を読み込んで順序回路データベースを作成するデータベース作成機能と、入力された入力データから活性化したい文または文節の指定を判断する活性化判断機能と、入力された入力データから前記活性化判断機能で判定された活性化したい文または文節を含むパスを確定するパス活性化確定機能と、必要に応じて入力された入力データからレジスタ変数の初期値を設定するレジスタ変数設定機能と、前記パス活性化確定機能で確定したパスに記号シミュレーションを実行して前記確定したパスの活性化を行う活性化実施機能と、前記活性化実施機能で前記確定したパスに活性化させた入力パターンを数値化して出力する入力パターン出力機能とを実行させることを特徴とするＬＳＩ設計検証プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＬＳＩ（Large Scale Integrated Circuit）設計検証システム、ＬＳＩの設計検証方法およびそのプログラムに関し、特にＲＴＬ（Resistor Transfer Level：レジスタ・トランスファ・レベル）言語ソースコードデバッグを主眼としたＬＳＩ設計検証システム、ＬＳＩの設計検証方法およびそのプログラムに関する。
【背景技術】
【０００２】
従来、ＬＳＩのハードウエア部分を設計する際には、設計すべき仕様を決定し、もってこれをハードウエア化している。例えば、画像の圧縮伸張処理であるＪＰＥＧやＭＰＥＧやＨ．２６４においては、仕様を管理する団体からアルゴリズムが提供されている。管理団体から提供されるアルゴリズムは、通常Ｃプログラムにて記述されたソフトウエアである。即ち、仕様はソフトウエアにて記述され規定されている。これはリファレンスのＣプログラムと称されることが多く、仕様を規定している所からゴールデンＣなどと称されることもある。
【０００３】
ここで設計者は、リファレンスのＣアルゴリズムを管理団体から入手し、通常はＣアルゴリズムを充分理解した上で、これらＣアルゴリズムをハードウエア記述言語であるＲＴＬ言語（例えば、ＶｅｒｉｌｏｇあるいはＶＨＤＬ）にて別途記述してハードウエア設計を行っている。ここでＣアルゴリズムは逐次順序処理されるソフトウエア記述であり、ＲＴＬ言語は並列処理されるハードウエア記述である。従って、両者は同じ機能を述べているのにしても記述される内容は異なる。従って、両者の一致検証が大きな課題となる。
【０００４】
それには、まずレファレンスＣプログラムにアプリケーションデータを入力させて出力データを作成する。この入力データをＲＴＬ言語記述された設計に入力し、ＲＴＬ言語シミュレーションを行い出力データを作成してリファレンスのＣが作成した出力データと一致するか検証を行っている。このような作業は、リファレンスのＣによるテストベンチの作成作業と、作成されたテストベンチによるＲＴＬ言語の検証作業と称される。この手法は、ＲＴＬ言語が正しくコーディングされているかどうかを確認する意味で非常に重要な手法である。しかしながら、Ｃから作成したテストベンチだけでは、ＲＴＬ言語シミュレーションによってＲＴＬ言語ソースコードの活性化を最大限には図れない課題がある。
【０００５】
即ち、ＲＴＬ言語上には励起されていない未活性なソースコード領域が残ってしまう為である。これは主として、ＲＴＬ言語ではＣには存在しない並列動作に関する記述が加えられる為に生ずる領域である。現状では、このような未活性なソースコードに対して設計者が自分でＲＴＬ言語を活性化する入力パターンを考えるか、乱数発生を利用してＲＴＬ言語シミュレーションを行い確立的に活性化させる手法が採られているが、膨大な時間がかかり設計検証期間の増加原因となっている。
【０００６】
従来の方法を改善する手法として、特許文献１では、乱数発生を改良し重み付き乱数発生を設計者が制御しながら適用する方法を述べている。大規模ＬＳＩの検証性を高める上で汎用性のある優れた手法を提案しているが、あくまでも乱数発生の範囲内であり、大幅に活性化効率またはソースコードデバッグ効率を改善させるものではない。
【０００７】
非特許文献１は、本発明の発明者の一人が共同出筆した論文であるが、ＲＴＬ言語のテストデータを生成するという観点から、等価回路としてセレクタ形式の等価回路モデルＡＤＤ（Ａｓｓｉｇｎｍｅｎｔ  Ｄｅｃｉｓｉｏｎ  Ｄｉａｇｒａｍ：アサインメント・ディシジョン・ダイアグラム）を使用する手法を述べている。
【０００８】
この手法は、従来の論理合成を考慮したデータ構造を採用しており、ＲＴＬ言語と論理合成した結果であるネットリストとの比較を採る上では優れた等価回路モデルであるが、内部等価回路に相当するモデルは設計者が分かるものではなく、設計者との会話型を必要とするようなシステムには不十分なデータ構造であると言える。設計者がコーディングしたＲＴＬ言語の特定な文を活性化させる為には、会話型の要素が必要となり、設計者がコーディングしたＲＴＬ言語ソースコード上でのやり取りを前提としたシステムの構築が望まれる。
【０００９】
【特許文献１】米国特許出願公開第２００５／００６０１３２号明細書
【非特許文献１】"Automatic test pattern generation for functional RTL circuits using assignment decision diagrams" Proceedings of the 37th conference on Design Automation, June 2000
【発明の開示】
【発明が解決しようとする課題】
【００１０】
本発明が解決しようとする課題は、（１）リファレンスのＣを用いて作成したテストベンチを用いてＲＴＬ言語シミュレーションを行ったあとに残るＲＴＬ言語の未活性ソースコード領域について、乱数発生による従来手法ではなく、ＲＴＬ言語そのもののプログラム論理構造を理解して自動的に活性化する入力パターンを生成する自動設計検証システムを構築する事である。この際、ＲＴＬ言語ソースコードに関しては設計者と会話型でインターフェイスを採る事が可能なシステムとしておく事が必要となる。
【００１１】
この目的に沿って、ＲＴＬ言語上の各文を文節（ノードとも称される）に分解し木構造にて表現する抽象構文木（Ａｂｓｔｒａｃｔ  Ｓｙｎｔａｘ  Ｔｒｅｅ：ＡＳＴ）を導入する。ＡＳＴは、ＲＴＬ言語の動作内容そのものを表現するものではなく、文を分解して表現するものである。ＲＴＬ言語の動作内容表現には、「等価回路接続グラフ」や「制御データフローグラフ（Ｃｏｎｔｒｏｌ  Ｄａｔａ  Ｆｌｏｗ  Ｇｒａｐｈ：以下ＣＤＦＧ）」や「システム依存グラフ（Ｓｙｓｔｅｍ  Ｄｅｐｅｎｄｅｎｃｅ  Ｇｒａｐｈ：以下ＳＤＧ）」が表現形式として用いられる。これら内容表現をＡＳＴを介してＲＴＬ言語ソースコードに変換表現して設計者と会話するものである。
【００１２】
本発明の主旨はソースコードデバッグであり、従って設計者がコーディングしたソースコードの形式にて会話処理を進めることが重要となってくる。この結果、設計者とのインターフェイスを保ったまま、本発明が解決を図る課題である指定されたソースコードの活性化という探索機能が実現する。
【００１３】
ここでＳＤＧの場合にはＣ／Ｃ＋＋といった逐次処理言語の内部表現形式として発達してきた経緯があり、逐次処理言語であるＣ／Ｃ＋＋と並列記述言語であるＲＴＬ言語とでは本質的な違いがある。それはクロックの概念であり、これは並列動作であるＲＴＬ言語には存在するが逐次処理のみが保証されるＣ／Ｃ＋＋には存在しない。
【００１４】
その為に、入力または入力変数としてクロックを指定し、この結果クロックが影響を及ぼす文についてレジスタ間の並列動作であることが認識できるので、ＳＤＧ上においてクロック系の文またはノードについて専用の処理を可能とする。一方、等価回路接続グラフはハードウエアのモデル表現形式として発展してきたのでＲＴＬ言語の内容を表現する上で特に問題はない。またＣＤＦＧも組合回路部分に適用され、レジスタ回路部分は等価回路として独立に認識される構造を採用するのが一般的であるからハードウエアのモデル表現形式として特に問題はない。広義に言えば、ＣＤＦＧは等価回路接続グラフの一形式であるとも言える。
【００１５】
（２）このようにして設計者との会話を前提とした活性化のためのデータ形式が確定した上で第２の課題は、対象とする回路規模の削減である。これは活性化したいソースコード部分のみを含む部分回路を抽出し、その部分回路のみを対象とすることにより処理規模の削減を図る処理を施す事である。
【００１６】
この課題を解決するためにパスの概念を導入する。パスとは、入力変数から中間に存在する実行文を経てターゲットとする活性化させたい文に至るＲＴＬ言語記述全体の部分集合で、ＬＳＩとしての部分回路に相当する。このようなパスは自動抽出する事も可能であるが、設計者が介在してパスを確定させる手法も有効である。設計者が介在する際には前述したＡＳＴが効果を発揮する。
【００１７】
（３）パスを確定させた上でターゲットとなる文またはノードを活性化させる入力パターンを生成させる第３の課題には、記号シミュレーションにて対応する。記号シミュレーションは以前から存在する手法であるが、広く実用化された事はない。それは、０／１にて値を確定させた通常のシミュレーションで実用上は充分であるからである。
しかしながら、本課題であるパスの活性化を図る入力パターン生成は、レジスタを介した順序回路におけるパターン探索であり、入力変数を記号化させて保有しシミュレーションを実施する手法が課題を解決する。別の言い方をすれば、順序回路における探索を必要とする状況が今まで強く求められていなかった、と言うことも出来る。
【００１８】
以上、まとめれば、文をノードに分解して保有するＡＳＴ形式を介した、即ち設計者と対話しやすい、データベース構造を実現し、パスの抽出により対象とする回路削減を実現し、記号シミュレーションにより活性化させたいターゲット文の入力パターン生成を実現することにより課題の解決を図るものである。この結果、活性化させたい文を活性化させるシミュレーション入力パターンが短時間で生成されるので、ソースコードデバッグの大幅な期間短縮を図れる効果がある。即ち、新規なソースコードデバッグ手法の提案により課題の解決を図るものである。
尚、活性化とは、「ある文または文節において、その文または文節における入力変数が変化することにより、文または文節の信号値が初期状態から脱却すること」である。また、「一旦初期状態から脱却した文または文節において、再度その文または文節の入力変数が変化することにより、異なる状態へ遷移すること」も活性化と称する。
【課題を解決するための手段】
【００１９】
上記課題を解決するため、本発明のＬＳＩ設計検証システムは、記憶手段と、入出力手段とを備えＬＳＩの設計検証を行うＬＳＩ設計検証システムにおいて、ＲＴＬ言語にて記述された設計内容の検討に際して、前記記憶手段に記憶される入力変数として記号または数値を用いて順次変化させて、ＲＴＬ言語上のある指定された文または文節を活性化させるための入力パターンを探索する探索手段を備えることを特徴とする。
【００２０】
また、前記ＲＴＬ言語で記述された文をデータ構造で表現するデータ構造作成手段を備えたことを特徴とする。
さらに、入力手段から入力される入力データを判読して外部からの指示を判定する指示判定手段を有することを特徴とする。
前記探索手段、データ構造作成手段、指示判定手段は、演算処理部によって構成することができる。
【００２１】
また、上記課題を解決するため、本発明のＬＳＩ設計検証方法は、ＬＳＩの設計の検証を行うＬＳＩ設計検証方法において、設計内容を示すＲＴＬ言語を読み込んで順序回路データベースを作成するデータベース作成工程と、入力された入力データから活性化したい文または文節の指定を判断する活性化判断工程と、入力された入力データから前記活性化判断工程で判定された活性化したい文または文節を含むパスを確定するパス活性化確定工程と、必要に応じて入力された入力データからレジスタ変数の初期値を設定するレジスタ変数設定工程と、前記パス活性化確定工程で確定したパスに記号シミュレーションを実行して前記確定したパスの活性化を行う活性化実施工程と、前記活性化実施工程で前記確定したパスに活性化させた入力パターンを数値化して出力する入力パターン出力工程とを備えたことを特徴とする。
【００２２】
また、上記課題を解決するため、本発明のＬＳＩ設計検証プログラムは、コンピュータに、設計内容を示すＲＴＬ言語を読み込んで順序回路データベースを作成するデータベース作成機能と、入力された入力データから活性化したい文または文節の指定を判断する活性化判断機能と、入力された入力データから前記活性化判断機能で判定された活性化したい文または文節を含むパスを確定するパス活性化確定機能と、必要に応じて入力された入力データからレジスタ変数の初期値を設定するレジスタ変数設定機能と、前記パス活性化確定機能で確定したパスに記号シミュレーションを実行して前記確定したパスの活性化を行う活性化実施機能と、前記活性化実施機能で前記確定したパスに活性化させた入力パターンを数値化して出力する入力パターン出力機能とを実現させることを特徴とする。
【００２３】
また、本発明によれば、ＬＳＩの設計検証を行うＬＳＩ設計検証システムにおいて、少なくとも入力変数を記憶する記憶手段と、ＲＴＬ言語にて記述されたＬＳＩ設計内容の検討に際して、前記記憶手段に記憶された入力変数を用いて、前記ＲＴＬ言語上のある指定された文または文節を活性化させるための入力パターンを探索する探索手段を備えることを特徴とするＬＳＩ設計検証システムが提供される。
探索手段は、ＲＴＬ言語にて記述されたＬＳＩ設計内容の検討に際して、前記記憶手段に記憶された入力変数を用いて、前記ＲＴＬ言語上のある指定された文または文節を活性化させるための入力パターンを探索する。
【００２４】
ここで、前記探索手段は、前記ＲＴＬ言語上のある指定された文または文節を含むパスを確定する後方検索機能を備えるように構成してもよい。
また、前記探索手段は、前記入力変数を記号化して保有し、この記号を用いたシミュレーションによって前記確定されたパスを活性化する記号シミュレーション機能を備えるように構成してもよい。
また、前記探索手段は、前記確定されたパスを活性化する入力記号パターンから数値化された入力パターンを生成する入力パターン生成機能を備えるように構成してもよい。
【００２５】
また、前記探索手段は、前記記号シミュレーションの結果によって活性化がカバーされた領域とされなかった領域に対応するＲＴＬ言語上の領域を調べ、カバーされなかった領域を活性化が必要な領域として指定するカバレッジ機能を備えるように構成してもよい。
また、更に、前記ＲＴＬ言語で記述された文をデータ構造で表現するデータ構造作成手段を備えるように構成してもよい。
【００２６】
また、前記データ構造作成手段は、文を文節に分解しその因果関係をデータ構造で表す文節データ構造作成機能と、この文節データ構造作成機能にて文節に分解された前記ＲＴＬ言語で記述された文を対応する順序回路に変改して順序回路データベースとして表す順序回路データベース作成機能を有するように構成してもよい。
また、前記順序回路データベース作成機能は、前記順序回路を、等価回路接続グラフ表示または制御データフローグラフ表示またはシステム依存グラフ表示またはそれらの組み合わせで表す機能を備えるように構成してもよい。
【００２７】
また、データを入力する入力手段を有し、前記入力手段から入力される入力データを判読して外部からの指示を判定する指示判定手段を有するように構成してもよい。
また、前記指示判定手段は、前記入力データから活性化させたい文あるいは文節または活性化させたい文あるいは文節を含むパスの指定を判定する活性化判断機能を有するように構成してもよい。
【００２８】
また、前記指示判定手段は、前記入力データをレジスタ変数として設定するレジスタ変数設定機能を有し、前記記号シミュレーション機能は前記設定されたレジスタ変数を用いて記号シミュレーションを行うように構成してもよい。
また、前記記憶手段に記憶される内容には、演算処理部で実行されることによって前記記憶手段を除く各手段を構成するプログラム群と、前記演算処理部に入力手段から入力される入力データと入力変数、前記ＲＴＬ言語にて記述された設計内容、前記演算処理部から入出力される中間データおよび出力される入力パターンが含まれるように構成してもよい。
【００２９】
また、本発明によれば、ＬＳＩの設計の検証を行うＬＳＩ設計検証方法において、設計内容を示すＲＴＬ言語を読み込んで順序回路データベースを作成するデータベース作成工程と、入力された入力データから活性化したい文または文節の指定を判断する活性化判断工程と、入力された入力データから前記活性化判断工程で判定された活性化したい文または文節を含むパスを確定するパス活性化確定工程と、必要に応じて入力された入力データからレジスタ変数の初期値を設定するレジスタ変数設定工程と、前記パス活性化確定工程で確定したパスに記号シミュレーションを実行して前記確定したパスの活性化を行う活性化実施工程と、前記活性化実施工程で前記確定したパスに活性化させた入力パターンを数値化して出力する入力パターン出力工程とを備えたことを特徴とするＬＳＩ設計検証方法が提供される。
ここで、前記活性化実施工程の後で、シミュレーションを実行して活性化がカバーされなかった領域に対応するＲＴＬ言語上の領域を活性化が必要な領域として指定し前記活性化判断工程に送るカバレッジ工程を更に備えるように構成してもよい。
【００３０】
また、本発明によれば、コンピュータに、記憶手段から設計内容を示すＲＴＬ言語を読み込んで順序回路データベースを作成するデータベース作成機能と、入力された入力データから活性化したい文または文節の指定を判断する活性化判断機能と、入力された入力データから前記活性化判断機能で判定された活性化したい文または文節を含むパスを確定するパス活性化確定機能と、必要に応じて入力された入力データからレジスタ変数の初期値を設定するレジスタ変数設定機能と、前記パス活性化確定機能で確定したパスに記号シミュレーションを実行して前記確定したパスの活性化を行う活性化実施機能と、前記活性化実施機能で前記確定したパスに活性化させた入力パターンを数値化して出力する入力パターン出力機能とを実行させることを特徴とするＬＳＩ設計検証プログラムが提供される。
【００３１】
コンピュータは、ＬＳＩ設計検証プログラムを実行することにより、記憶手段から設計内容を示すＲＴＬ言語を読み込んで順序回路データベースを作成するデータベース作成機能と、入力された入力データから活性化したい文または文節の指定を判断する活性化判断機能と、入力された入力データから前記活性化判断機能で判定された活性化したい文または文節を含むパスを確定するパス活性化確定機能と、必要に応じて入力された入力データからレジスタ変数の初期値を設定するレジスタ変数設定機能と、前記パス活性化確定機能で確定したパスに記号シミュレーションを実行して前記確定したパスの活性化を行う活性化実施機能と、前記活性化実施機能で前記確定したパスに活性化させた入力パターンを数値化して出力する入力パターン出力機能とを実行する。
【発明の効果】
【００３２】
本発明に係るＬＳＩ設計検証システム、ＬＳＩ設計検証方法によれば、設計者との対話を容易に実現することができ、ＲＴＬ言語上の活性化すべき文やパスを指定して確定させ、パス上で記号シミュレーションを実現することができる。これによって、設計検証期間を大幅に短縮できるソースコードデバック手法が得られる。
また、本発明に係るＬＳＩ設計検証用のプログラムによれば、コンピュータを用いて、前記ＬＳＩ検証システム、ＬＳＩ設計検証方法を実現することが可能になる。
【発明を実施するための最良の形態】
【００３３】
以下、本発明を図面に沿って詳細に説明する。
図１は、本発明のＬＳＩ設計検証システムの一実施形態の機能ブロック図である。
本システム１０は、演算処理部１１と記憶手段１２と表示装置１３、マウス装置１４およびキーボード装置１５などからなる入出力手段を含んで構成されている。
本実施の形態は、記憶手段１２を装着した演算処理部（プロセッサ）１１上で走行するプログラム群から構成される。
尚、表示装置１３は出力手段を構成し、又、表示手段１３、マウス装置１４及びキーボード装置１５は入力手段を構成している。
【００３４】
主要なプログラムとしては、（１）ＲＴＬ言語よりソースコード対応型順序回路データベース作成プログラム、（２）活性化させたい文の指定プログラム、（３）指定された文を含むパスの指定プログラム、（４）必要に応じてレジスタの数値設定プログラム、（５）指定された文を含むパスの活性化プログラム、（６）確定した入力パターンの出力プログラムである。
尚、活性化とは前述したように、「ある文または文節において、その文または文節における入力変数が変化することにより、文または文節の信号値が初期状態から脱却すること」である。また、「一旦初期状態から脱却した文または文節において、再度その文または文節の入力変数が変化することにより、異なる状態へ遷移すること」も活性化と称する。
【００３５】
また加えて、本実施の形態ではこれら主要なプログラムを走行させ設計者とのインターフェイスを採るために、表示装置１３と、キーボード装置１５と、マウス装置１４と、記憶手段１２となるファイル装置の各装置が構成要件として追加される。ここで、キーボード装置１５やマウス装置１４と連動した表示装置１３は、ＲＴＬ言語ソースコード上におけるターゲット文の指定やパスの指定やレジスタ数値の指定において極めて重要な設計者とのインターフェイス装置となる。
【００３６】
演算処理部１１は、ＲＴＬ言語にて記述された設計内容から指定された文や文節を含むパスを活性化させる入力パターンを探索する探索手段１１１と、探索手段１１１での探索に役立てるために、ＲＴＬ言語にて記述された設計内容を読み込んでソースコードと対応可能なデータ構造で表現するデータ構造作成手段１１２と、入力手段から入力される入力データを判読して外部からの指示を解読して、操作者との対話を実現し、活性化させたい文や文節、および文や文節を含むパスを確定させる指示判定手段１１３および入出力手段を制御する制御手段１１４から構成されている。
【００３７】
探索手段１１１には、ＲＴＬ言語にて記述された設計内容から指定された文や文節を含むパスを確定する後方探索機能１１１ａと、活性入力変数を記号化して保有して、この記号を用いたシミュレーションによって確定されたパスを活性化する記号シミュレーション機能１１１ｂと、記号シミュレーションによって得られた結果である入力記号パターンを数値化されたパターンに変換する入力パターン生成機能１１１ｃと、記号シミュレーションの結果によって活性化がカバーされなかった領域を活性化が必要な領域として指定するカバレッジ機能１１１ｄが含まれる。
【００３８】
データ構造作成手段１１２には、文を文節に分解しその因果関係をデータ構造で表す文節データ構造作成機能１１２ａと、この文節データ構造作成機能にて文節に分解された前記ＲＴＬ言語で記述された文を対応する順序回路に変改して順序回路データベースとして表す順序回路データベース作成機能１１２ｂとが含まれる。順序回路データベース作成機能１１２ｂは、順序回路を、等価回路接続グラフ表示またはＣＤＦＧ表示またはＳＤＧ表示などの表現形式またはそれらの組み合わせで表す機能を備えている。
【００３９】
指示判定手段１１３には、前記入力データから活性化させたい文あるいは文節または活性化させたい文あるいは文節を含むパスの指定を判断する活性化判断機能１１３ａを備え、また、入力データを解読してレジスタ変数として設定するレジスタ変数設定機能１１３ｂを備えている。設定されたレジスタ変数は記号シミュレーション手段で用いられて、探索を効率化させる。
【００４０】
記憶手段１２には、演算処理部１１のコンピュータで用いられるプログラム群１２１、設計内容を表すＲＴＬ言語のソースコード１２２、入力手段から入力される入力データや入力変数の設定値１２３、演算処理部１１での処理中に発生する中間データ１２４、および最終的に求められて出力される探索結果としての入力パターンである出力データ１２５などが記憶される。
【００４１】
このうち、プログラム群１２１としては、設計内容を示すＲＴＬ言語のソースコードを読み込んで順序回路データベースを作成する機能を実現するデータベース作成プログラム、入力された入力データから活性化したい文または文節の指定を判断する機能を実現する活性化判断プログラム、入力された入力データから活性化判断機能で判定された活性化したい文または文節を含むパスを確定する機能を実現するパス活性化確定プログラム、必要に応じて入力された入力データからレジスタ変数の初期値を設定する機能を実現するレジスタ変数設定プログラム、パス活性化確定プログラムによって確定したパスに記号シミュレーションを実行して確定したパスの活性化を行う機能を実現する活性化実施プログラムおよび活性化実施プログラムで確定したパスを活性化させる入力パターンを数値化して出力する機能を実現する入力パターン出力プログラムが含まれる。
以下、実際の処理の説明に沿ってこれらの構成の機能を詳細に説明して行く。
【００４２】
図２は、ＲＴＬ言語ソースコードの記述例を示す。
ここではＲＴＬ言語としてＶｅｒｉｌｏｇを用いて説明する。入力変数としては、ａ，ｂの他にｃｌｋ（クロック）がある。ａ，ｂは各々１６ビットデータであるが、ａが負である場合にはａを反転させてからａとｂを加算し、加算結果を１６ビットレジスタｓｕｍに格納する動作を記述している。従って、データａはデータのみならず反転するか否かの制御にも関係している。
【００４３】
クロックはａｌｗａｙｓ文を経由してレジスタを動作させている。従って、並列動作であるクロックによるレジスタ動作は容易に識別できる訳で、ＲＴＬ言語が並列動作記述言語と言われる所以である。本例はＲＴＬ言語のなかでもＶｅｒｉｌｏｇと称される言語形式である。
【００４４】
図３は、図２をデータ構造作成手段１１２の文節データ構造作成機能１１２ａによって書き換えた抽象構文木（Ａｂｓｔｒａｃｔ  Ｓｙｎｔａｘ  Ｔｒｅｅ：ＡＳＴ）の一例である。ここで各文は文節（ノード）に分解して保有される。例えば、’ｉｎｔ＝−ａ’なる文は’＝’と’ｉｎｔ’と’−ａ’なるノードに分解されて保持される。ＡＳＴは、構文を解釈するものであり、内容はその次の処理で確定する。従って、ＡＳＴでは文の意味は解釈されず、それはその後の処理となる。別の言い方をすれば、ＲＴＬ言語に限らず文があれば、その文のＡＳＴが存在すると言える。
【００４５】
図４は、図２に示したＲＴＬ言語記述のブロックダイヤグラム（図４ａ）とそれに対応する抽象構文木ＡＳＴ（図４ｂ）とを対照して示したものである。
このようにＲＴＬ言語はハードウエア記述言語である所から、ブロックダイヤグラムにて表示解釈される事が多い。ここでは等価回路接続グラフの形式にてブロックダイヤグラムが表示されており、図３に示したＡＳＴが示されている。このように本実施の形態における等価回路接続グラフを用いれば、ＡＳＴを介して設計者とソースコードにて会話することが容易である。
【００４６】
図５は、図４における極性判定回路の等価回路接続グラフ（図５ａ）と制御データフローグラフ（ＣＤＦＧ）（図５ｂ）の一例を示している。データの流れを制御する部分をセレクタ等価回路で表現するか、小さなプログラムで表現するか程度の違いであり、ＲＴＬ言語の内部表現上において本質的な差はない。従って、どちらの内部表現もＡＳＴを介して設計者との会話が容易に可能である。
【００４７】
図６は、通常示される一般的なＲＴＬ言語記述のハードウエア的解釈である順序回路モデルを示したものである。このような順序回路はデータ構造作成手段１１２の順序回路データベース作成機能１１２ｂによって作成される。ＲＴＬ言語における記述は、レジスタ間の操作を記述している事になる。正確に述べれば、外部入力及びレジスタ出力と外部出力とレジスタ入力間のデータ操作の集合が組合せ回路として記述されている事になる。ここでデータ操作とは、各種の代入や演算を示す。
【００４８】
ここで、図２に記載したＲＴＬ言語記述は、信号が伝達する順番に従って入出力とレジスタ間の組み合わせ回路としてモデル化される。即ち、ＲＴＬ言語は信号の伝達順番などは無視して記載できる言語であるが、動作モデル上は信号伝播を意識して順序だてて並べる必要がある。信号の伝達順番は、ｗｉｒｅ文の名称やレジスタの名称や入出力の名称から決定される。等価回路接続グラフであれ制御データフロー接続グラフであれ、図６に示す順序回路モデルに当てはめられる。
【００４９】
図７は、図６に対し、図２に示すＲＴＬ言語を、データ構造作成手段１１２の順序回路データベース作成機能１１２ｂによってＳＤＧ表現で表示したものである。ＳＤＧそのものは、Ｃ／Ｃ＋＋といったプログラミング言語の解析用に開発されてきた経緯があり、プログラムとしての構造を維持したデータ構造となっている。
【００５０】
ここでは、実行文の階層関係を管理する制御依存エッジ（Ｃｏｎｔｒｏｌ  Ｄｅｐｅｎｄｅｎｃｅ  Ｅｄｇｅ）と、宣言された変数がどこで使用されているかを示す宣言依存エッジ（Ｄｅｃｌａｒａｔｉｏｎ  Ｄｅｐｅｎｄｅｎｃｅ  Ｅｄｇｅ）と、実行されたデータがどこで使用されているかを示すデータ依存エッジ（Ｄａｔａ  Ｄｅｐｅｎｄｅｎｃｅ  Ｅｄｇｅ）の３種類の依存関係が示される。図７では、宣言依存エッジを実線で、宣言依存エッジを点線で、データ依存エッジを太線で示している。
【００５１】
定義すれば、制御依存エッジとは、文の階層関係を示すポインタである。宣言依存エッジとは、宣言された変数がどこで使用されているかを示すポインタである。データ依存エッジとは、あるノードの変数が直前のどこで決定され、直後のどこで参照されているかを示すポインタである。
【００５２】
入力変数としてのｃｌｋ（クロック）は特別な変数であり、通常逐次処理言語のＳＤＧには存在せず、ＲＴＬ言語の表現方法としてＳＤＧを採用した際に出現する所の並列動作を制御する宣言依存エッジを形成する。本クロック宣言依存エッジとそれに従属するａｌｗａｙｓ文とｒｅｇ宣言された変数により、クロック並列動作が解釈される。
【００５３】
本実施の形態におけるＳＤＧの形式は、ＡＳＴを介してオリジナルなＲＴＬ言語ソースコードに対応しているので、ＲＴＬ言語ソースコードに復元して設計者とインターフェイスを採る事が容易である。このように、ＳＤＧ構造はＲＴＬ言語をプログラミング言語として捉えているので、設計者とのインターフェイスに適したデータ構造であると言える。ＲＴＬ言語の記述ではａｓｓｉｇｎ文やａｌｗａｙｓ文は信号伝達の順番を意識しないで記述可能であるが、ＳＤＧにおいても文は実行順番に順序だてられなければならない。
【００５４】
図８は、データ構造作成手段１１２の順序回路データベース作成機能１１２ｂによって、ＳＤＧ形式にて順序回路モデルを表現したものである。この結果、図８は並列化された明確なデータ構造モデルであると言える。即ち、組み合わせ回路記述としてのａｓｓｉｇｎ文から展開された実行文またはノードノードの集合と、クロックにより制御されるａｌｗａｙｓ文から展開された実行文またはノードノードの集合と、入力変数ノードの集合と、クロック入力変数ノードの集合と、出力変数ノードの集合と、レジスタ変数ノードの集合から構成される。ここでａｌｗａｙｓ文にはレジスタ操作のみならず組み合わせ回路も含まれる可能性がある。
【００５５】
図９は、抽象構文木ＡＳＴを介して設計者が２種類のデータベースと会話する様子を示している。このような会話は、指示判定手段１１３が表示手段１３、マウス手段１４、キーボード手段１５などの入力手段から入力される入力データを解読することによって実現される。
【００５６】
本実施の形態においては、ＲＴＬ言語記述文がＡＳＴを介してＳＤＧまたはＣＤＦＧまたは等価回路接続グラフによる内部表現に連結され、これら内部表現は組合回路とレジスタとから構成される順序回路をモデル化しており、結果として設計者は本順序回路モデルとＲＴＬソースコードとの対応が容易にできる形態に構成されて処理が進められる状況を示している。
【００５７】
図１０は、本実施の形態を適用するアプリケーションの構造を示している。本実施の形態は、リファレンスのＣが存在するアプリケーションに極めて有効である。このようなアプリケーションには、画像の圧縮伸張、オーディオの圧縮伸張、無線のエラー訂正、セキュリティ（暗号と複合）等が挙げられる。これらのアプリケーションでは、リファレンスのＣを使ってテストベンチを作成する。例えば、原画像データをリファレンスのＣに入力して圧縮した画像データを作成する、といった具合である。
【００５８】
次にリファレンスのＣに相当する機能をハードウエア化する。即ちＲＴＬ言語で設計する。現在、この作業はほとんどマニュアルである。動作合成（Ｂｅｈａｖｉｏｒ  Ｓｙｎｔｈｅｓｉｓ）と称される自動化ツールの開発も進んではいるが、まだユーザに受け入れられるほどには汎用性と最適化が進んでいない現状である。従って、本実施の形態のアプリケーション領域では、自動化よりも検証が重要となってきている。
【００５９】
さて、マニュアルでコーディングされたＲＴＬ言語に対して、リファレンスのＣにて作成したテストベンチを適用する。ＲＴＬ言語シミュレータの結果は、リファレンスのＣの結果と比較照合して一致不一致を判別し、不一致があった場合にはＲＴＬ言語を修正する。このようにして、何種類ものアプリケーションデータを流しても、ＲＴＬ言語ソースコードはすべて活性化される訳ではない。
【００６０】
この原因は、ＲＴＬ言語では並列動作をするための制御論理が必要となり、このような並列動作制御論理はＣでは必要ないからである。もちろん、リファレンスのＣで作成したテストベンチが完備されていなかった、という事もありうる。いずれにせよ、このような場合通常は、設計者は自分で活性化させるためのＲＴＬ言語入力パターンを考えるか、もしくは乱数発生を利用してＲＴＬ言語入力パターンを生成させている。設計者が考えるにせよ、乱数発生を利用するにせよ、極めて効率の悪い作業であり、設計検証時間長期化の大きな原因となっている。
【００６１】
図１１は、本実施の形態を実施する際の適用方法を示している。本実施の形態では、まずＲＴＬ言語ソースコード上で活性化が必要な領域を知る事が必要である。これには、図１の探索手段１１１に含まれるカバレッジ機能１１１ａを使う。
カバレッジには二種類ある。まず、ＲＴＬ言語シミュレーションを行った結果、動作したソースコード部分をマークして（カバーされたという意味）どこがカバーされたかを示すコードカバレッジ機能であり、通常の市販ＲＴＬ言語シミュレータにはオプションで装着されている。
【００６２】
もうひとつのカバレッジは機能カバレッジと称されるものであり、別途、特性記述言語（プロパティ記述言語：Ｐｒｏｐｅｒｔｙ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  Ｌａｎｇｕａｇｅ）にて記述された機能がＲＴＬシミュレーションでカバーされたかどうかを判定するものである。この場合にも、機能カバレッジにてカバーされなかった領域に対応するＲＴＬ言語上の要活性化領域が決定されることになる。
【００６３】
図１１に示すように、本実施の形態ではＲＴＬ言語シミュレーション結果に対するカバレッジ測定結果から、ＡＰＩまたはファイル・インターフェイスにて、要活性領域を本実施の形態にインターフェイスする。その後、要活性領域について、これを活性化させる入力パターンを自動探索し生成させる事が本実施の形態の目的である。生成された入力パターンは、再びＲＴＬ言語シミュレータに戻されてシミュレーションを行いカバレッジ測定を更新する事になる。これにはファイル・インターフェイスが適している。
【００６４】
ここで、要活性化領域とは活性化が必要な文の集合である。これが存在するという事はソースコードデバッグが、コードカバレッジまたは機能カバレッジにおいて、まだ終了していない事を意味している。例えば、本来「＊」（乗算）と記述しなければならない所を「＋」（加算）とコーディングしてしまっているといった可能性もある。このようなバグを検出修正するにはソースコードを動作させる必要があり、デバッグ上最も基本的なソースコードデバッグを実施する必要がある。本実施の形態は、一般的な入力パターンではデバッグしきれないようなソースコードに関して、新規なソースコードデバッグ手法を提案していると言える。
【００６５】
図１２は、本実施の形態の処理手順を示している。
（１）まず、ステップＳ１０１で、ＲＴＬ言語を読み込んでノードの集合であるＡＳＴを経由してソースコードと対応が可能な順序回路データベースを作成する（請求項１３に示すデータベース作成工程に相当する。以下同様な内容を工程の表示のみで表す）。これは図１のデータ構造作成手段１１２に含まれる順序回路データベース作成機能１１２ｂによって実現される。この際には、ａｓｓｉｇｎ文やａｌｗａｙｓ文から展開された各文は実行順番が一意に確定する順番構造を持って作成される。ここで内部データ表現は、ＳＤＧ、ＣＤＦ、または等価回路接続グラフ、またはその組み合わせのいずれでも構わない。
【００６６】
（２）次に、ステップＳ１０２で、会話型でＲＴＬ言語ソースコードを表示して活性化させたい文を設計者が指定する（活性化判断工程）。活性化させたい文は複数集合として指定される場合もある。このような指定は、図１に示した指定判定手段１１３によって、設計者が入力手段に所定の入力データを設定し、活性化判断機能１１３ａが判断することで実行される。
この会話型の指定のほか、後述するステップＳ１０７で、カバレッジ機能１１１ｄによっても活性化が必要な部分を判定して自動的に指定を実行させることも可能である。
【００６７】
（３）次に、ステップＳ１０３で、ターゲット文を含むパスを確定させる。ここでは、探索手段１１１の後方探索機能１１１ａによって、ターゲット文からの後方探索によりパスを確定させる事が出来る（活性化確定工程）。加えて、指定判断手段１１３の活性化判断機能１１３ａを用いて、設計者が会話型で指定しながらパスを確定させる方式もオプションとして備える。その理由は、入力変数からターゲットに至るパスは複数存在する場合が一般的であり、設計者にとってどのパスを活性化させたいのかが設計検証上重要となる場合が多いからである。
【００６８】
会話型でソースコードを指定する場合にはＡＳＴが威力を発揮する。パスが設定される事により、対象とする回路規模を大幅に削減させる事が可能となる。ここでは、複数のターゲット文を指定することによりパスを指定する事も可能である。即ち、あるターゲット文を活性化させた上で、その結果をメモリや外部出力にまで伝播させたいような場合においては特定なターゲットを中間で含んだパスの指定が必要だからである。
【００６９】
本システムは、指定されたパスを活性化させる入力パターンを探索し自動生成する。尚、本実施の形態では活性化させたい文を設計者が指定する使用方法を基本としているが、機能的には、要活性な文すべてを自動で指定する事も可能である。この機能を用いれば、図１０や図１２で示した事前のシミュレーションをかける事なく、いきなりすべてのＲＴＬ言語の実行文を活性化対象とする事も可能である。
【００７０】
（４）本実施の形態では、後述する記号シミュレーションを図１に示した探索手段１１によって実行させて入力パターンを探索するが、記号シミュレーションは大量のメモリサイズを必要とする場合があり、また生成された入力パターンが時間軸において膨大なクロック数を要求する場合もあり、どちらの場合にも備えてレジスタ変数の値を強制的に設定（初期値として数値設定する）して記号シミュレーションを実行する機能も備えている。
【００７１】
このような場合には、ステップＳ１０４で、図１の指示判定手段１１３のレジスタ変数設定機能１１３ｂを用い、会話型でレジスタの値を設計者が設定する（レジスタ変数設定工程）。本機能により膨大なメモリや膨大なシミュレーション時間を必要とする入力パターンの生成を防げる。また、このようにして指定されたレジスタの値に関しては、別途外部入力から活性化可能であるかどうかを本システムを使って確認する必要がある。それは独立した活性化問題として処理される事になる。
【００７２】
（５）次に、ステップＳ１０５で、指定されたターゲットを含む指定されたパスを、記号シミュレーションを実行してパスの活性化を行う（活性化実施工程）。
この後、ステップＳ１０６で、カバレッジ機能を実行するかどうかを判断し、実行する場合はステップＳ１０７でカバーされなかった領域を判定する。ついで、ステップＳ１０８で、このカバレッジ機能や会話型の判定によって活性化されていない文やパスが残っているかどうかを判断する。活性化されていない文やパスがある場合には、ステップＳ１０２に戻って以降の作業を繰り返す。
【００７３】
活性化されていない文やパスがパス全域に渡って記号シミュレーションが実行され、活性化されていないところがなければ、即ち記号がパス上の全文に行き渡れば終了であり、少なくともターゲットを含むパスを活性化させる入力パターン記号とクロック数が確定した事になる。
【００７４】
（６）最後に、ステップＳ１０６で、確定した入力パターン記号を探索手段１１１の入力パターン生成機能１１１ｃによって数値化して出力すれば終了となる（入力パターン出力工程）。
こうして出力されるシミュレーション入力パターンも、通常はＲＴＬ言語にて言語形式が規定されているので、含めてＲＴＬ言語と称する事が多い。
【００７５】
なお、以上に上げた各工程は、記憶手段１２に記憶されるプログラム群１２１によって、演算処理部１１のプロセッサを駆動して実行することができる。それぞれの工程に対応するプログラムは、請求項１５に示したデータベース作成プログラム、活性化判断プログラム、パス活性化確定プログラム、レジスタ変数設定プログラム、活性化実施プログラムおよび入力パターン出力プログラムである。
【００７６】
図１３は、活性化したい文（ターゲット）とパスのシステム依存グラフ（ＳＤＧ）を用いた表現を示す図である。見易くするために図１３では制御依存エッジは示さず、宣言依存エッジは部分を示し、データ依存エッジのみを示している。
パスとは、入力変数とレジスタ変数からターゲットまでのデータ伝播のルートである。ここでは、入力変数群とレジスタ変数群から中間実行文またはノード１、３を経てターゲットに到達し、中間実行文またはノード４を経て結果を出力変数群に伝播させるルートを示している。そうしたターゲットを活性化させた後に結果を出力変数にまで伝播させる場合である。もちろん、ターゲットを活性化させた結果、レジスタやメモリに結果が格納されればそれで検証上は充分である場合も多い。
【００７７】
いずれにせよ、本実施の形態では活性化された際のシミュレーション結果は設計者が確認することが重要なので、ターゲット活性化の際にはデバッグ上検証しやすい状態にまで結果を導いてやることも重要である。また、通常ターゲット文までのパスやターゲット文を通過した後の伝播ルートを含めて複数のパスが存在する場合も多い。
【００７８】
デバッグ上の検証目的においては複数存在するパスのうち特定のパスを活性化させたい場合が多く、検証システムとしてはターゲット文の指定のみならずパスの指定においても設計者とシステムの対話が必要である場合が多い。本データベースにおけるノード構造を保持したＡＳＴは、設計者との対話が容易となる特徴があり、指示判定手段１１３を用いて会話を実現することができる。
【００７９】
図１４は、ターゲット文を含むパスを確定させる後方探索機能１１１ａで実行される後方探索プログラムの自動化処理部分のフローチャートである。ここではパスの確定には後方探索を用いている。即ち、ターゲット文からレジスタ変数を経て入力変数に至るルートを後方探索により確定させる訳である。
【００８０】
まず、ステップＳ２０１でターゲット文の指定を行う。そうして、ステップＳ２０２でデータ依存エッジを後方探索する。ステップＳ２０３で、後方探索中に条件分岐に関する文が出現した場合には、ステップＳ２０４でターゲット文への伝達パスが活性化される条件を確定させ登録する。この条件文の活性化条件をどのように活性化させるかは、後に述べる記号シミュレーションを用いて行い、ここではターゲット文へのパス活性化条件のみを確定させておくのである。
【００８１】
つづいて、ステップＳ２０５でもはや後方探索する対象物がなくなったかどうかを判定し、なくなった場合は、ステップＳ２１０に進んで後方探索を終了する。後方探索が入力変数に到達すれば基本的には後方探索は終了するが、後方探索する対象物があり、レジスタ変数や入力変数に遭遇した場合には、その変数を基点として後方探索を続行する必要がある。したがって、ステップＳ２０６でレジスタ変数や入力変数に遭遇したかどうかを調べる。遭遇しなかった場合は、ステップＳ２０９に進み、出現した文を登録して、ステップＳ２０２に戻り、後方検索を続行する。
【００８２】
レジスタ変数や入力変数に遭遇した場合は、ステップＳ２０７でその変数が新規なものかどうかを調べる。新規なものである場合はステップＳ２０９に進む。
ここで、既に後方探索にて出現しているレジスタ変数に遭遇した場合には、ステップＳ２０８に進み、パスとしては新規なものかどうかを調べ、パスとして新規な場合はステップＳ２０９に進む。パスとして新規でない場合は、通常は設計者との対話により後方探索を続行するか否かを決定する。それは、例えばカウンタに遭遇したような場合、カウンタを進めるパスを繰り返すような探索となる可能性があるからである。
【００８３】
まとめれば、新規なレジスタ変数に遭遇した場合は後方探索は続行させなければならないが、既に出現しているレジスタ変数に遭遇した場合においては続行は設計者による決定に委ねることになる。このようにして入力変数にまで到達したならば後方探索は終了であり、その結果、影響を及ぼす入力変数とレジスタ変数と中間の条件文またはノードにおけるターゲットまでの活性化条件が決定していることになる。
【００８４】
図１５は、パスを確定させる際の条件分岐における処理をＲＴＬ言語ソースコードとＳＤＧを例とした相互の関係を示す図である。パスを確定させる上で、条件分岐のルートを確定させる事は極めて重要である。本実施の形態では、入力変数からターゲット文に至るＳＤＧにおける各依存関係を示すポインタを利用し、後方探索機能１１１ａと記号シミュレーション機能１１１ｂとを組み合わせて探索する事によりパスを探索する。
【００８５】
ここで、記号シミュレーションは前方探索である。後方探索は組み合わせ回路部分において、容易に条件分岐における条件を確定させる事が出来る特徴がある。しかし、対象とする回路は順序回路なのでレジスタの状態に依存するから安易に条件を確定させる事はできない。
【００８６】
例えば、図１５の例では’ｉｎｔ＝−ａ’から’ｉｆ（ａ＜０）’のルートを活性化させるので、条件である’ａ＜０’が容易に確定されるが、もしａがレジスタの値に依存する場合は’（ａ＜０）’とするまでクロックサイクルを進めなければならない。従って、後方探索により’（ａ＜０）’である組み合わせ回路上の必要条件が確定するが、あるクロックサイクルにおいてその条件を確定させなければならないので、前方探索に相当する記号シミュレーションが必要となってくる。即ち、後方探索と前方探索を組み合わせる事により分岐条件の条件をクロックサイクルも含めて確定させる事になる。
【００８７】
しかも加えて、例えば図１５には示されていないより複雑な順序回路を考える。それは、あるクロックサイクルで’（ａ＜０）’として一旦’’（ａ＞０）’としてから再度’（ａ＜０）’としなければ所望のパスが活性化できない、といった場合である。
このような複雑な順序回路性に基づく条件分岐の条件の確定や、探索途上において複数のルートが存在するような場合は、パスの確定においてもメモリと処理時間の爆発を招きかねない。
【００８８】
これを防ぐために、設計者がデバッグしたいパスを有効に指定する機能が必要となる。このパスを指定する際に極めて重要な事項が、条件分岐の条件を指定する事である。指示判定手段１１３の活性化判断機能１１３ａがこの役割を果たしている。これにより、複雑な順序回路条件における条件分岐や、複数存在するルートそのものを単一に確定させる事ができるからである（条件分岐にて複数のパスが発生する）。ここで述べた処理はＣＤＦＧや等価回路接続グラフにおいても可能である。
【００８９】
図１６は、パスの確定による回路削減の例を示す図で、中間信号変数（ｗｉｒｅ文）を除く入力変数とレジスタ変数の集合態を初期値とする場合の説明図である。レジスタ変数群がある場合、シミュレーションを開始する際のレジスタ値（変数ａ、変数ｂ、変数ｐ、変数ｑ、変数ｓ、変数ｔ）を設定する。ここでは、パスが確定した結果、対象となる回路規模が削減された事をＳＤＧ表現を例に採って示している。
【００９０】
パスに出現しなかった入力変数とレジスタ変数は対象回路から外れる。この結果、パスに無関係な実行文またはノードとそのノードや中間信号変数（ｗｉｒｅ文）も対象から外れる。このようにしてターゲットを活性化させるための準備が整った事になる。後述する記号シミュレーションは膨大なメモリを使用するので、パスを確定させる事による対象回路の削減処理は本実施の形態において極めて重要な処理過程となる。
図１７は、パスと中間ノードの関係を示す図である。ここでは、入力変数やレジスタ変数からターゲット文に至るパスと、その中間に出現する条件文を示している。パスが確定した暁には、中間に出現する条件分岐のパス活性化条件は確定している事になる。
【００９１】
図１８は、条件分岐モデルとＡＳＴ構造と条件文の関係を示す図である。ここでは、等価回路接続グラフとＳＤＧにおける条件分岐モデルとＡＳＴを介した設計者との会話構造を示している。会話は指示判定手段１１３を用いて実行される。ＡＳＴを介してソースコードレベルにて設計者は会話可能となる。このことはＣＤＦＧでも同様である。条件分岐を外部から決定する際に、設計者がオリジナルに記述した内容をもってインターフェイスする必要がある事の例である。
【００９２】
図１９は、後方探索機能１１１ａを用いた後方探索によりパスを指定する際のモジュール・ソース・ウィンドウとモジュール階層化ウィンドウのウィンドウ画面イメージを示す図である。ウィンドウとして、ＲＴＬ言語各モジュールの階層構造を表示するモジュール階層化ウィンドウとモジュールのソースコードを表示するモジュール・ソース・ウィンドウの少なくとも２種類がある。この例では、ＴｏｐというモジュールがＡとＢというふたつのモジュールをインスタンスさせる構造を示している。
このようなモジュール間の親子関係はモジュール階層化ウィンドウにて表示される。この例ではグラフィカルなイメージにて表示しているが、親子関係なので左から右に親から子を示すダイアログボックスのイメージにて表示することも可能である。
【００９３】
モジュール・ソース・ウィンドウは、モジュール内部のソースコードを示す。ここではパスを決定するためのソースコード表示なので、指定されたターゲット・ノードに至るデータ依存エッジと、最終段のデータ依存エッジが示す宣言依存エッジと、最終段のデータ依存エッジが示す制御依存エッジの、少なくとも３種類の後方探索ポインタがソースコード・ウィンドウ上でハイライトされて表示される。階層化されている場合には、階層化ウィンドウを介して別のモジュールに後方探索を続行させてパスを確定させる必要がある。
【００９４】
図２０は、従来の論理合成によるハードウエア化の流れと、本実施の形態におけるＲＴＬ言語ソースコードのデバッグの流れとの違いを示した図である。従来、ハードウエア化の流れでは、冗長を取り除くなどの最適化を施して回路を変形させる処理を行うので設計者にとっては対話不能な形式に変換されておりかつＡＳＴの保持という概念が薄かった。本実施の形態では、パスの指定や条件分岐の条件指定などにおいて設計者と対話しながら探索条件する場合にはソースコードとの会話が要求される。ＡＳＴを介した順序回路データベース構造は、会話型の機能と探索に適した構造であると言える。
【００９５】
図２１は、ＲＴＬ言語ソースコードとＳＤＧを例に採ったデータ構造と記号シミュレーションの実行結果を示す図である。図２における記述例で、’（ａ＜０）’の条件分岐における記号シミュレーション結果である。初期設定にて入力変数’ａ’に記号’Ａ’を設定した状態からのシミュレーションである。記号シミュレーションでは、入力変数であるクロックにクロック信号が付加される事によりシミュレーションが進む。図２１の例は組み合わせ回路部分なので１クロック内ですべて実行される事になる。記号シミュレーションでは実行時に結果を表示しながら処理を続行させる事が可能であり、設計者はパスの活性化状態を会話型で知る事ができる。記号シミュレーションの実行結果は、ＡＳＴを介しているが故にソースコードの形でシミュレーション結果の記号を表示可能となる。
【００９６】
図２２は、前方探索記号シミュレーションのプログラム・フローチャートである。記号シミュレーション機能１１１ｂによる記号シミュレーションは前方探索である。
ステップＳ３０１で、入力変数とレジスタ変数に初期化記号値を設定して前方へ信号を伝達させる。即ち前方探索により信号値を確定させて行く訳であるが、記号シミュレーションなので論理式で信号値を持つ形式に近い。従って、データ量は膨大となる。ここで、必要な探索空間のみに絞るパスの概念が必要とされるのである。
【００９７】
ステップＳ３０２で、クロックを進め、ステップＳ３０３で、指定されたターゲット文が活性化されたかどうかを判定する。活性化された場合は、ステップＳ３０７に進んで終了する。活性化されていない場合は、ステップＳ３０４に進んで、記号をデータ依存エッジまたは等価回路接続に沿って更に前方伝播させる。途中のステップＳ３０５で、条件文に遭遇したかどうかを判断し、遭遇した場合は、ステップＳ３０６に進んで、記号シミュレーションの記号を設定された条件（記号）に合わせ、再びステップＳ３０２に戻って、クロックを進める。条件文に遭遇しなかった場合はそのまま、ステップＳ３０２に戻って、クロックを進める。
【００９８】
本実施の形態では、ＡＳＴを利用して設計者との会話型システムを構築しつつ、パス確定の際には順序回路構造の後方探索のためのポインタ構造を利用し、記号シミュレーションの際には順序回路構造に前方探索のためのポインタ構造を利用する事になる。記号シミュレーションの終了条件は、ターゲット文が活性化されたか、である。しかしながら、通常のシミュレーションのように、シミュレーション時間を指定させる事ももちろん可能である。
【００９９】
ところで、記号シミュレーションが終了すると、その結果得られた入力記号パターンを、最終的に数値化された入力パターンに変換する作業が必要になる。この作業は探索手段１１１の入力パターン生成機能１１１ｃによって実行される。入力パターン生成機能１１１ｃは、活性化されたパスの入力記号パターンから少なくとも0または１を含む入力パターンを生成する。
【０１００】
図２３は、本実施の形態の出力形態を示す図である。ターゲットが活性化され記号シミュレーションが終了した結果、確定する入力パターンの概要（図２３ａ）と、ＲＴＬ言語にて記述された入力信号変化記述（図２３ｂ）と、相当する外部変数信号のブロックダイヤグラム例（図２３ｃ）とを示す。順序回路であるので、クロックとデータに関しての入力パターンとなる。
【０１０１】
ここで、例えば内部に３２ビットカウンタがあり、このカウンタをフルにしないと活性化されないようなターゲットが指定された場合には約４億回のクロックを送らなければ活性化できない事になる。このような場合には、指示判定手段１１３のレジスタ変数設定機能１１３ｂによって、レジスタ変数の値をあらかじめ設定しておき、記号シミュレーションを実行する事も可能である。このようにして、無策に膨大なクロック数を含む入力パターンの生成を防ぐ事ができる。
【０１０２】
また、図１２の説明で述べたように、後方探索する際には同一のパスに遭遇している事がシステムには分かるので、指示判定手段１１３を用いた設計者との対話により無駄な処理を防ぐ機構が構築されている。このような手段は、乱数発生手段により活性化を図ろうとしていた従来の手段とは比べ物にならないほどの効果がある。
【０１０３】
図２４は、レジスタの中間状態を初期値とする場合の開始方法の説明図である。レジスタ変数群がある場合、シミュレーションを開始する際のレジスタ値（変数ａ、変数ｂ、変数ｐ、変数ｑ）を、指示判定手段１１３のレジスタ変数設定機能１１３ｂによって設定する。これにより記号シミュレーションを中間状態から開始することができる。図では、レジスタ変数に意味のある値を確定させておいてから記号シミュレーションを実行させる際のＳＤＧを例に取ったデータ伝播構造を示す。即ち、中間状態を初期状態として記号シミュレーションを開始するものである。
【０１０４】
図２５では、指示判定手段１１３のレジスタ変数設定機能１１３ｂによって、レジスタ変数として意味ある初期値を設定するＲＴＬ言語記述例（この場合はＶｅｒｉｌｏｇ）を示している。このようなレジスタへの数値の設定はＲＴＬ言語を用いて容易にできるものであり、本実施の形態でもそのような機能を利用して、余計な処理時間を浪費する事なしに設計検証の効率化を図っている。
【０１０５】
図では１６ビットレジスタｓｕｍの初期値設定宣言をあらわしている。＃０は遅延０であり、シミュレーション開始時に設定されることを示している。ＦＦＦＦは１６ビットで全ビットが’１’となっていることを示している。
レジスタ変数に値を設定することにより、記号シミュレーションのデータ量を削減したり、ターゲットを活性化させるまでのサイクル数を削減することができる。
【０１０６】
本実施の形態での記号シミュレーションでは、会話型でレジスタ変数の数値設定や記号シミュレーションそのものを行うことが可能であり、設定した数値が妥当なものであるかどうかをその場で確認することができる。
ここでの初期値設定文は、Ｖｅｒｉｌｏｇの文法であり、文中ではシミュレーション入力パターンの一部とみなされる。
【０１０７】
以上に述べたように、本実施の形態では、ＲＴＬ言語の内部データ構造をＳＤＧやＣＤＦＧや等価回路接続グラフを用いて表現し、ソースコードはＡＳＴを用いて復元可能な構造としたデータベースを採用することにより、設計者との対話を容易にしつつ後方探索と前方探索が可能なデータ構造を確立している。
【０１０８】
この結果、ＲＴＬ言語における文を設計者が指定する事で、これら文を活性化させるパスの確定と記号シミュレーションを実現している。本実施の形態によりコードカバレッジや機能カバレッジにてカバーされなかった要活性領域における文を容易に活性化できることになる。これは、従来は設計者が入力パターンを考えるか、乱数発生により活性化を図ろうとしていた手段に比べ、設計検証期間の短縮を大いに図った新規なソースコードデバッグ手法であると言える。
【０１０９】
また、本実施の形態は、リファレンスのＣを前提としない一般的なＲＴＬ言語設計においても、ソースコードデバッグに有効な新規なシミュレーション入力パターン生成方法を提案している。即ち、一般的なＲＴＬ言語設計においても、まず設計者が基本的なシミュレーション入力パターンを考えデバッグした後、コードカバレッジや機能カバレッジを採り、本実施の形態による手法により要活性領域について自動的に入力パターンを生成させてデバッグ期間の短縮が図れる。シミュレーションした結果は、従来通り設計者が正誤を判断しなければならない。しかしながら、入力パターンを設計者が作成しなければならない手間がなくなる効果は、期間短縮に寄与する。
【産業上の利用可能性】
【０１１０】
各種のＬＳＩ設計検証システム、ＬＳＩの設計検証方法およびそのプログラムに利用可能である。
【図面の簡単な説明】
【０１１１】
【図１】本発明に係るＬＳＩ設計検証システムの一実施形体形態の機能ブロック図である。
【図２】ＲＴＬ言語ソースコードの記述例を示す。
【図３】図２に示すＲＴＬ言語ソースコードをＡＳＴによって書き換えた記述例を示す説明図である。
【図４】図２の記述に相当する回路のブロックダイヤグラムと対応するＡＳＴ表示である。
【図５】図２の記述の極性判定回路の等価回路接続グラフおよび制御データフローグラフによる表記である。
【図６】順序回路モデルのＲＴＬ言語のハードウエア的解釈である順序回路モデルを示す図である。
【図７】図２のＲＴＬ言語記述例のＳＤＧ構造による表現である。
【図８】図２のＲＴＬ言語記述例のＳＤＧによる順序回路も出る表現である。
【図９】順序回路モデルとＲＴＬソースコードとの対応が容易に可能となる形態にて処理が進められる状況を示す説明図である。
【図１０】本発明が有効なアプリケーションの構造を示す説明図である。
【図１１】本発明を実施する場合の適用の方法を示す説明図である。
【図１２】本発明を実施する場合の処理手順を示すフローチャートである。
【図１３】活性化したい文とパスのシステム依存グラフによる表現の例を示す説明図である。
【図１４】ターゲット文を含むパスを確定させる後方探索プログラムのフローチャートである。
【図１５】条件分岐でパスを確定させる場合のＲＴＬ言語ソースコードとＳＤＧの関係を示す説明図である。
【図１６】パスが確定した結果、対象となる回路規模が削減された事をＳＤＧ表現を例にとって示している説明図である。
【図１７】入力変数からターゲット文に至るパスと中間条件文節の関係を示す説明図である。
【図１８】条件分岐モデルとＡＳＴ構造を介した会話構造を示す説明図である。
【図１９】パスを指定する際のウィンドウ画面イメージを示す説明図である。
【図２０】論理合成によるハードウエア化の流れと本発明のデバックの流れの相違を示す説明図である。
【図２１】データ構造と記号シミュレーションの実行結果を示す説明図である。
【図２２】記号シミュレーションにおけるフローチャートを示す説明図である。
【図２３】記号シミュレーションが終了して得られる入力パターンとＲＴＬ言語での入力信号の記述と相当するブロックダイヤグラムの例である。
【図２４】レジスタ変数に値を確定させてから記号シミュレーションを実行する場合のデータの伝播構造を示す説明図である。
【図２５】レジスタ変数を設定するＲＴＬ言語記述例の例である。
【符号の説明】
【０１１２】
１０  ＬＳＩ設計検証システム
１１  演算処理部
１２  記憶手段
１３  表示装置
１４  マウス装置
１５  キーボード装置
１１１  探索手段
１１２  データ構造作成手段
１１３  指示判定手段
１１４  制御手段
１２１  プログラム群
１２２  ＲＴＬ言語ソースコード
１２３  入力データ・入力変数
１２４  中間データ
１２５  出力データ
【図１】
0005001190.tif 000002
【図２】
0005001190.tif 000003
【図３】
0005001190.tif 000004
【図４】
0005001190.tif 000005
【図５】
0005001190.tif 000006
【図６】
0005001190.tif 000007
【図７】
0005001190.tif 000008
【図８】
0005001190.tif 000009
【図９】
0005001190.tif 000010
【図１０】
0005001190.tif 000011
【図１１】
0005001190.tif 000012
【図１２】
0005001190.tif 000013
【図１３】
0005001190.tif 000014
【図１４】
0005001190.tif 000015
【図１５】
0005001190.tif 000016
【図１６】
0005001190.tif 000017
【図１７】
0005001190.tif 000018
【図１８】
0005001190.tif 000019
【図１９】
0005001190.tif 000020
【図２０】
0005001190.tif 000021
【図２１】
0005001190.tif 000022
【図２２】
0005001190.tif 000023
【図２３】
0005001190.tif 000024
【図２４】
0005001190.tif 000025
【図２５】
0005001190.tif 000026