(57)【特許請求の範囲】
【請求項１】
テスト生成用のビットワイズ制約条件を提供する方法において、
コンピュータ装置を使用して、前記ビットワイズ制約条件を表現するための言語構造を提供するステップであって、前記言語構造が少なくとも１つの制約条件パラメータおよび少なくとも１つの演算子を含み、前記制約条件パラメータが少なくとも１つの値を含む区間にさらに制約され、前記区間が区間限界を有して成るステップと、
コンピュータ装置を使用して、情報を双方向に伝搬して、前記制約条件パラメータの区間限界を少なくとも部分的に前記ビットワイズ制約条件に従って決定するステップと、
コンピュータ装置を使用して、前記制約条件パラメータの１つ以上の許容値を計算するステップと
を含む方法。
【請求項２】
コンピュータ装置を使用して、前記制約条件パラメータに対し単一のテスト値を生成するステップ
をさらに含む請求項１に記載の方法。
【請求項３】
前記区間が算術範囲として、かつビットワイズ表現として、表現可能である請求項１または２に記載の方法。
【請求項４】
前記言語構造を提供するステップが、コンピュータ装置を使用して、情報を伝搬して前記区間限界を決定するために、前記区間を前記算術範囲として、かつ前記ビットワイズ表現として、同時に表現するための計算構造を提供するステップをさらに含む請求項３に記載の方法。
【請求項５】
前記言語構造が複数の制約条件パラメータを含み、前記計算構造が前記複数の制約条件パラメータの少なくとも一部分を簡約化するために設けられ、
前記簡約化が、コンピュータ装置を使用して、第１制約条件パラメータについて新しい組の値を計算し、コンピュータ装置を使用して、前記新しい組の値を少なくとも１つの他の制約条件パラメータに伝搬することを含む
請求項４に記載の方法。
【請求項６】
前記計算構造が算術範囲およびビットワイズ表現を含む範囲リスト表現を備えており、前記複数の制約条件パラメータの少なくとも一部分の簡約化が、
コンピュータ装置を使用して、少なくとも第１制約条件パラメータについての第１範囲リスト内の第１範囲を計算するステップと、
コンピュータ装置を使用して、少なくとも第２制約条件パラメータについての第２範囲リスト内の１つまたはそれ以上の範囲を計算するステップと、
コンピュータ装置を使用して、前記第１範囲リストに前記第２範囲リストを交差させて、前記第１および第２制約条件パラメータを簡約化するステップと
によって実行される請求項５に記載の方法。
【請求項７】
前記テスト値を生成するステップが、
コンピュータ装置を使用して、各区間に対する解の個数を決定するステップと、
コンピュータ装置を使用して、重みに従って区間を無作為に選択して、選択区間を形成するステップと、
コンピュータ装置を使用して、前記選択区間内の１つの点を選択するステップと
によって実行される請求項６に記載の方法。
【請求項８】
前記ビットワイズ表現が、前記区間を複数の状態値のベクトルにより変換することによって提供され、各状態値が前記テスト値の１ビットに対応する請求項６に記載の方法。
【請求項９】
前記複数の状態値が、各々前記ビットの可能な状態に対応する４つの状態値であり、各状態値が０、１、０または１、または不正値のうちの１つである請求項８に記載の方法。
【請求項１０】
前記ビットワイズ制約条件が、ビットワイズ情報の伝搬により、演算子を特徴とする制約条件から導出される請求項３〜９のいずれかに記載の方法。
【請求項１１】
前記双方向伝搬が少なくとも部分的に、前記区間の最大値に従って１または０の値を有するビットを示すことによって実行される請求項３〜１０のいずれかに記載の方法。
【請求項１２】
前記双方向伝搬が少なくとも部分的に少なくとも１つの区間限界を修正することによって実行される請求項１０または１１に記載の方法。
【請求項１３】
前記双方向伝搬が少なくとも部分的に無効区間を除去することによって実行される請求項１０〜１２のいずれかに記載の方法。
【請求項１４】
前記制約条件パラメータに対する前記テスト値が少なくとも部分的に特定の区間を選択することによって生成される請求項２〜１３のいずれかに記載の方法。
【請求項１５】
前記特定の区間が少なくとも部分的に前記区間の重みに従って選択される請求項１４に記載の方法。
【請求項１６】
前記テスト値が前記特定の区間から選択される請求項１５に記載の方法。
【請求項１７】
テスト生成用のビットワイズ制約条件を提供する方法において、
コンピュータ装置を使用して、前記ビットワイズ制約条件を表現するための言語構造を提供するステップであって、前記言語構造が１つまたはそれ以上の制約条件パラメータおよび少なくとも１つの演算子を含み、前記制約条件パラメータが少なくとも１つの値を含む範囲リストを有して成るステップと、
コンピュータ装置を使用して、情報を双方向に伝搬して、前記制約条件パラメータの限界を決定するステップと、
コンピュータ装置を使用して、前記ビットワイズ制約条件についてテスト値を生成するステップと
を含む方法。
【請求項１８】
算術範囲リストによるテスト生成用のビットワイズ制約条件および範囲リスト制約条件を提供する方法において、前記算術範囲リストは少なくとも１つの算術値を含み、前記方法が、
コンピュータ装置を使用して、範囲リスト制約条件と並行して前記算術リストに関して前記ビットワイズ制約条件を表現するための言語構造を提供するステップであって、前記言語構造がビットワイズ制約条件および範囲リスト制約条件のための１つまたはそれ以上の制約条件パラメータおよび少なくとも１つの演算子を含んで成るステップと、
コンピュータ装置を使用して、情報を双方向に伝搬して、前記制約条件パラメータの限界を決定するステップと、
コンピュータ装置を使用して、前記ビットワイズ制約条件についてテスト値を生成するステップと
を含む方法。
【請求項１９】
算術制約条件およびビットワイズ制約条件を有する範囲リストのビットワイズ表現のための方法において、
コンピュータ装置を使用して、前記範囲リストをビットワイズリストに変換するステップと、
コンピュータ装置を使用して、範囲リストおよび前記ビットワイズリストの一方または両方を使用しながら、前記算術制約条件を前記ビットワイズリスト制約条件と共に解くステップと
を含む方法。
【請求項２０】
算術制約条件およびビットワイズ制約条件を有する範囲リストのためのテスト生成方法において、
コンピュータ装置を使用して、前記範囲リストおよび前記範囲リストのビットワイズ表現を含むための計算構造を提供するステップと、
コンピュータ装置を使用して、前記範囲リストを変換して、前記範囲リストの前記ビットワイズ表現を提供するステップと、
コンピュータ装置を使用して、前記ビットワイズ制約条件を前記ビットワイズ表現に、前記算術制約条件を前記範囲リストに適用して、前記テスト生成を実行するステップと
を含む方法。
【請求項２１】
コンピュータ装置を使用して、複数の範囲リストと複数の範囲リストの複数の前記ビットワイズ表現との合併を実行して、ビットワイズ制約条件および算術制約条件を導出するステップ
をさらに含む請求項２０に記載の方法。
【請求項２２】
算術制約条件およびビットワイズ制約条件を有する範囲リストのビットワイズ表現のための方法において、
コンピュータ装置を使用して、前記範囲リストを変換して前記範囲リストのビットワイズ表現を提供するステップと、
コンピュータ装置を使用して、前記算術制約条件および前記ビットワイズ制約条件を伝搬して、前記算術制約条件および前記ビットワイズ制約条件の両方に従って少なくとも１つの新しい範囲を決定するステップと、
コンピュータ装置を使用して、制約条件パラメータの１つ以上の許容値を計算するステップと
を含む方法。
【請求項２３】
コンピュータ装置を使用して、前記少なくとも１つの新しい範囲に従って値を生成するステップをさらに含む請求項２２に記載の方法。
【発明の詳細な説明】
【０００１】
発明の分野
本発明は、テスト生成のためにビットワイズ制約条件を提供する方法に関し、特に、Ｓｐｅｃｍａｎ（商標）関数型プログラミング環境（米国カリフォルニア州マウンテンビュー、ベリシティ・デザイン社）によって提供されるようなテスト生成コード言語が有効に動作するそのような方法に関する。
【０００２】
発明の背景
設計検証は、集積回路、基板、またはシステムレベルのアーキテクチャが、そのデバイスのアーキテクチャの仕様によって定められた要求事項を厳密に実現するかどうかを決定するプロセスである。テスト中のデバイス（ＤＵＴ）の設計検証は実際のデバイスに、またはデバイスのシミュレーションモデルに実行することができる。単に説明のためであって、いかようにも限定する意図なく、以下の議論はデバイスのシミュレーションモデルに対して実行されるテストを中心にしている。
【０００３】
様々な型のデバイスおよびデバイスアーキテクチャの設計が複雑になるにつれて、設計エラーの可能性が増大する。しかし、デバイスの設計のシミュレーションモデルも作成およびテストがより複雑になるので、設計検証もいっそう難しく、かつ時間がかかるようになっている。
【０００４】
設計検証の問題は、多種多様なデバイスおよびデバイスアーキテクチャの検証およびテストに有用である、広く汎用化可能なツールの欠如によっていっそう悪化する。典型的な背景技術の検証方法は往々にして、特定の設計を有する特定のデバイスに限定されてきたので、シミュレーションモデル用のそのような検証方法を準備しかつ実現するステップを、新しいデバイス毎に実行しなければならない。
【０００５】
デバイスのシミュレーションモデルを通して設計を検証するプロセスは、ＶｅｒｉｌｏｇおよびＶＨＤＬなどのハードウェア記述言語の可用性によって促進される。これらの言語は、ゲートまたはトランジスタより高レベルの抽象化でハードウェアを記述するように設計されている。結果として生じるデバイスのシミュレーションモデルは、回路の入力に印加される２進数の文字列であるテストベクトルの形の入力刺激を受け取ることができる。次いでシミュレーションモデルは結果を出し、それはデバイスの特定の設計に期待される結果に照らして検査される。しかし、これらの言語は一般的に実際の検証用に設計されたものではない。したがって検証エンジニアは、デバイスの設計検証を実行するために、これらのハードウェア記述言語によって記述されたモデルとインタフェースするために追加プログラミングコードを書かなければならない。
【０００６】
テスト環境の例として静的および動的テスト環境がある。静的テスト環境は、事前計算されたテストベクトルをＤＵＴのシミュレーションモデルに送り込み、かつ／またはシミュレーションモデルの動作後に結果を検討する。加えて、静的テスト環境を使用して、シミュレーションモデルから出力された結果を検討する場合には、テストが完了する後まで、テストの誤りは検出されない。その結果、誤り箇所のデバイスの内部状態は決定できず、そのような内部状態を決定するためには、シミュレーションを再び作動させる必要がある。この手順はシミュレーションサイクルを浪費し、特に長いテスト中にかなりの時間を費やすことが必要になるおそれがある。
【０００７】
より有用かつ効率的な型のテストが動的テスト環境である。この型の環境の場合、ＤＵＴのモデルのシミュレーションと同時に、かつシミュレートしたデバイスの状態フィードバックにより潜在的に制御しながら、テストベクトルを生成するための１セットのプログラミング命令が書かれる。この手順により、有向無作為生成を実行し、かつデバイスのシミュレーションモデルの状態に対してテスト自体の間に明らかになった効果に反応することが可能になる。したがって、動的テスト生成は明らかに設計検証に対し多くの利点を有する。
【０００８】
テスト環境の領域内で、静的および動的テスト環境はどちらも、束縛ベクトルまたは事前生成入力によってのみ実現できる。しかし、より強力かつより洗練された実現はテスト生成を使用して入力刺激を生成する。
【０００９】
そのようなテストジェネレータの一例が、あたかも全文がここに記載されているかのように参照によってここに組み込む１９９８年２月６日出願の米国特許出願第０９／０２０７９２号に開示されている。このテスト生成手続きは、ＶｅｒｉｌｏｇおよびＶＨＤＬのようなハードウェア記述言語と対話し、それらより上位に位置する。該テスト生成手続きは、ハードウェア指向検証特定的オブジェクト指向プログラミング言語で書かれる。この言語は様々なテストを書くために使用され、次いでそれはテストジェネレータモジュールによってデバイス検証テストを自動的に作成するために使用される。この言語により多種多様な設計環境をテストし、検証することができる。したがって開示された手続きは汎用化可能であり、しかもエンジニアがプログラムしかつデバッグするのが簡単である。
【００１０】
開示された言語は、モデルによってシミュレートされるデバイスの設計をより充分かつ効率的に記述するためのストラクトなど多数の要素を特徴とする。残念ながら、開示された言語および結果として得られるテスト生成環境は、ビットワイズ制約条件を使用する能力を含まない。
【００１１】
ビットワイズ制約条件は「ビットスライス制約条件」と呼ぶこともできる。レジスタなどのハードウェアエンティティ、およびコンピュータ命令ストリームなどの入力データのモデリングでは、変数のある部分セグメントのプロパティを表現する必要がしばしばある。一例として、望まれるプロパティがオペランドフィールドを零の値に維持することである、１６ビットの演算コードフィールドおよび１６ビットのオペランドフィールドから成る３２ビット幅のコンピュータ命令語がある。
【００１２】
上述の米国特許出願第０９／０２０７９２号は、変数の値を丸ごと、すなわち上の例では全３２ビットを考慮する算術制約条件を適用する方法を開示している。ビットワイズ制約条件は変数の任意のサブフィールドを制約し、変数にビットワイズ演算を実行する能力を追加する。ビットワイズ制約条件は、次のビット演算の少なくとも１つが用いられる算術関係と定義することができる。
［：］（スライス）
｜（ビットワイズ論理和）
＆（ビットワイズ論理積）
∧（ビットワイズ排他的論理和）
〜（ビットワイズ否定）
＜＜（左シフト）
＞＞（右シフト）
次式はそのようなビットワイズ制約条件の一例である。
keep x[2:0] == 0b101
現在利用可能なテスト生成用のコード言語は、演算子“［：］”を関数として計算するので、上の例では、非制約ｘ変数が最初に生成される。次に“ｘ［２：０］”が関数として計算され、その後、この計算された関数の値が“０ｂ１０１”と比較される。そのようなプロセスは結果的にしばしば不正確な計算となり、したがって不正確な制約条件となる。より有用な解決策は、より柔軟な生成を通してそのようなビットワイズ制約条件を正確に処理することであろう。残念ながら、そのような解決策は現在得られていない。
【００１３】
発明の概要
背景技術は、テスト生成コード言語用のビットワイズ制約条件をこれらの制約条件が正確かつ柔軟に処理されるように提供する方法を教示あるいは提案していない。
【００１４】
本発明の方法は、これらの制約条件を例えばｅコードなどのテスト生成言語で表現することを可能にする言語構造を提供することにより、ビットワイズまたはビットスライス制約条件をテスト生成プロセスの一部として提供することを可能にすることによって、背景技術のこれらの欠如を克服する。そうすれば、そのようなビットワイズ制約条件のための言語構造はより柔軟に処理されるので、テスト生成プロセスは制約条件を含む式を関数として硬直的に「解こう」としなくなる。したがって、そのような構造における制約条件の伝達は、必ずしも左から右に伝搬する必要がなく、代わりに多方向的に生成される。該言語構造は、“［：］”、“｜”、“＆”、“∧”、“〜”、“＞＞”および“＜＜”などの演算子に特に適している。
【００１５】
本発明では、テスト生成用のビットワイズ制約条件を提供する方法を提供する。該方法は、ビットワイズ制約条件を表現するための言語構造を提供するステップであって、前記言語構造が複数の制約条件パラメータおよび少なくとも１つの演算子を含み、前記制約条件パラメータが少なくとも１つの値を含む区間（ｉｎｔｅｒｖａｌ）に制約され、前記区間が区間限界（ｉｎｔｅｒｖａｌ  ｌｉｍｉｔｓ）を有して成るステップと、情報を双方向に伝搬して、前記制約条件パラメータの区間限界を決定するステップと、制約条件パラメータのテスト値を生成するステップとを含む。
【００１６】
本発明の方法は、データプロセッサによって実行される複数の命令として記述することもできるので、本発明の方法はハードウェア、ソフトウェア、ファームウェア、またはそれらの組合せとして実現することができる。本発明の場合、ソフトウェアアプリケーションは実質的にどの適切なプログラミング言語でも書くことができ、それは当該技術の通常の熟練者が容易に選択することができる。選択されるプログラミング言語は、ソフトウェアアプリケーションが実行されるコンピューティングプラットフォームと互換可能でなければならない。適切なプログラミング言語の例としてＣ、Ｃ＋＋、およびＪａｖａ（登録商標）があるが、それらに限定されない。
【００１７】
図面の簡略説明
本発明をここで、単なる例として、添付の図面に関連して説明する。
図１は、本発明に係る例示的システムを示す略ブロック図である。
【００１８】
好適な実施形態の説明
本発明の方法は、ビットワイズまたはビットスライス制約条件を例えばｅコードなどのテスト生成言語で表現することを可能にする言語構造を提供することにより、これらの制約条件をテスト生成プロセスの一部として提供することを可能にする。そうすると、そのようなビットワイズ制約条件のための言語構造はより柔軟に処理されるので、テスト生成プロセスは制約条件を含む式を関数として硬直的に「解こう」としなくなる。したがって、そのような構造における制約条件の伝搬は必ずしも左から右に進む必要がなく、代わりに多方向的に生成されることが好ましい。該言語構造は、“［：］”、“｜”、“＆”、“∧”、“〜”、“＞＞”および“＜＜”などの演算子に特に適している。
【００１９】
この言語構造は、ビット制約条件、例えば「keep ｘ[5:8]＝＝0」を表現する構文形式であり、算術制約条件およびビット制約条件を持つ単純な計算をサポートしかつ本発明に係るビット表現を持つ範囲リストである計算構造とは区別すべきであることに注意する必要がある。計算構造は、算術制約条件およびビット制約条件を同時に、または少なくとも並行して解くことを可能にすることが好ましい。
【００２０】
本発明の方法では、ビットワイズ制約条件のための計算構造を範囲リストに基づいて構成することが好ましい。各範囲リストは少なくとも１つの区間を含むが、任意選択的に複数の区間を含むことができ、その場合、非制約パラメータを表わす範囲リストは、全ての可能な値を含む１つの区間を含む。範囲リスト交差の処理中に１つまたはそれ以上の区間が無効になることがある。次いで範囲リストは、各々が１ビットの生成項目に対応する状態値のベクトルにより延長される。範囲リスト表現は可能な値を表わす算術範囲である。次いでその範囲の各算術演算値は、数を状態値のベクトルからの値に変換することによって、ビット制約条件に従ってビットにマップすることが好ましい。
【００２１】
ベクトルの各要素は４つの状態値を持つことが好ましい。状態値は対応するビットの次の４つの可能な状態を表わすことがより好ましい。
０−ビットは確実に０である。
１−ビットは確実に１である。
0004652663.tif 000002
例えば、ビット制約条件がビットを強制的に０または１にする場合には、対応する表現は、ビットを０または１に設定して行なわれる。ビットの値に制約条件が
0004652663.tif 000003
に設定される（正当な値は不可能）。計算構造自体が間隔表現およびビットワイズ表現の両方を含むことが好ましい。
【００２２】
次いで、２つの異なる型の制約条件を好ましくは同時に表現するために、この計算構造を使用することができる。第１型の制約条件は前に定義した演算子を有する制約条件を含み、それはビット制約条件である。第２型の制約条件は、「ビットワイズ」情報の伝搬を通して第１型の制約条件に関係付けられる制約条件を含む。第２型の制約条件は、範囲リストをビットワイズ値に変換することによって計算されることが好ましく、それは前述したビット制約条件に従ってベクトルの上記状態の１つを取る。これらの異なる型の制約条件は、ビットワイズ制約条件構造内で双方向に伝搬されることが好ましい。言い換えると、任意選択的に、かつ好ましくは、算術制約条件を導出することのビットワイズ制約条件に対する効果と同様に、逆の効果も評価される。
【００２３】
両型の制約条件に関係する構造の同時の導出を助けるために、両型の制約条件の組合せを使用することが好ましい。テスト生成は任意選択的にビット制約条件および算術制約条件の両方を特徴として含むことができるので、これらの２つの異なる構造の組合せは、より効率的な導出のプロセスを提供する。
【００２４】
例えば、両型の構造を同時に導出できなければ必要になる、ビット制約条件の範囲リスト表現への変換は結果的に無限の数の範囲を生じるおそれがある。同様に、算術制約条件はビットワイズ値によって効率的に表現することができないので、範囲リスト計算構造が利用可能でなかった場合、ビット制約条件だけでは両型の構造を画定するのに有効に働かない。
【００２５】
本発明の好適な実施形態では、ビットワイズ制約条件は、より好ましくは２つの異なる型の制約条件を同時にまたは少なくとも並行して処理することを通して最初に簡約化することによって生成される。簡約化のステップは、制約条件のパラメータの１つに対する新しい値を計算し、次いでビットワイズ＆を使用してパラメータの値の範囲にこの新しい値を交差させることによって実行される。例えば、２つの範囲リストと対応するビットワイズ情報があると仮定して、ビット制約条件および算術制約条件の意味／効果を依然として維持しながら、任意選択的に、かつ好ましくは、範囲リストおよびビット情報の合併を実行することができる。
【００２６】
より好ましくは、０であるべき区間内のこれらのビットは区間の最大値によって示される。
【００２７】
ビット制約条件構造による値生成のプロセス中に、区間表現の各区間の解の数が決定されることが好ましい。次いで区間はその重みに従って無作為に選択される。最後に、選択された区間内から１つの点が選択される。
【００２８】
本発明の任意選択的であるが好適な実施形態では、範囲リストに１つまたはそれ以上の不正な値がある場合、無効区間が発生することがある。そのような区間は任意選択的に、かつ好ましくは、他の制約条件の効果を検査することができるだけでなく、無効区間に対する制約条件を、好ましくは並行ビットワイズ構造のビットワイズ制約条件の導出を通して処理することが可能になる。これらの制約条件を導出する際に、無効区間の不正値は除去することによっても解消することができ、それにより無効区間の問題が排除される。区間の限界はこのプロセスを通して変更して例えば不正値を除去することができるので、そのようなプロセスは任意選択的に「区間限界の修正」と呼ぶことができる。任意選択的に無効区間を除去することもできる。
【００２９】
本発明に係るシステムおよび方法の原理および動作は、図面および随伴する説明を参照することによりいっそうよく理解することができる。
【００３０】
今、図面を参照すると、図１は、本発明に係るテスト生成のための例示的システムを示す略ブロック図である。図示したシステムは、本発明の説明に必要なテスト生成手続きの関数だけを含んでいることに注意されたい。テスト生成手続き全体のより完全な説明は、前に参照によって組み込んだ米国特許出願第０９／０２０７９２号に見ることができる。また、本発明をシミュレーションモデルの文脈で説明するが、本発明は物理的デバイスの検証にも有用であることに注意されたい。物理的デバイスおよびシミュレーションモデルのどちらも、テスト環境にあるＤＵＴ（テスト中のデバイス）と記述することができる。
【００３１】
テスト生成システム１０は、ＶｅｒｉｌｏｇまたはＶＨＤＬなどのハードウェア記述言語で書かれた、テスト中のデバイス（ＤＵＴ）のための設計１４を受け入れるシミュレータ１２を特徴とする。加えて、シミュレータ１２は実行時にテスト生成手続きを実行するためのテストエンジン１６と対話する。テストエンジン１６はシミュレータ１２に入力を提供し、次いでシミュレータ１２から結果をさらなる演算のための入力として受け取るので、シミュレータ１２とテストエンジン１６との間の対話は双方向に示されている。
【００３２】
テストエンジン１６は、実行時にＤＵＴ１４をテストするために実行時システム２１に接続されたテストジェネレータ１８を特徴とする。テストジェネレータ１８は、以下でさらに詳述するビットワイズ制約条件などの１つまたはそれ以上の制約条件２０、およびＩ／Ｏデータモデル２２を受け取り、次いでＤＵＴ１４のテストおよび検証を実行する。実行時システム２１は実行時テスト手順中に、シミュレータ１２の駆動およびサンプリングの両方を行なう。実行時システム２１はまた時間式（ｔｅｍｐｏｒａｌ  ｅｘｐｒｅｓｓｉｏｎ）も評価し、事象を送り出す。これらの事象は、対象にすべき事象の定義を実行時システム２１に供給する時間カバレージ事象定義入力２５に従って定義される。
【００３３】
テストおよび検証のプロセス中に、時間カバレージデータコレクタ２４が実行時システム２１から１つまたはそれ以上の変数の値を要求する。これらの要求は、予め定められた固定サンプリング時間および／または例えば時間言語で与えられた時間式によって定義された状態遷移の時間パターンの発生など、実行時システム２１によって送り出されたトリガ事象に従って実行される。時間カバレージデータコレクタ２４は、テストジェネレータ１８と対話し、テストジェネレータ１８のためのＡＰＩ（アプリケーションプログラミングインタフェース）を通して要求されたデータにアクセスすることができる。そのようなＡＰＩは、所望のデータを収集するために必要なソフトウェア関数呼出しを指定する。この収集されたデータは次いで、以下でさらに詳述する通り、データアナライザ２６によって分析される。
【００３４】
データアナライザ２６によって分析された後、分析されたデータは次いで、好ましくはＧＵＩ（グラフィカルユーザインタフェース、図示せず）を通してユーザに表示される。例えば、単一カバレージ項目、クロスカバレージ項目、および／または区間カバレージ項目について特定のカバレージ穴の存在を示すためにデータを表示することができる。本発明の好適な実施形態では、分析されたデータは制約条件２０によって与えられたカバレージに従ってこれらの制約条件を調整するためフィードバックとして用いられる。例えば、カバレージ穴（単数または複数）が見つかった場合、不在状態またはＤＵＴ１４の状態をテストするために、制約条件２０を調整することができる。そのようなフィードバックは自動的に実行することが好ましいが、任意選択的にユーザが手動で実行することもできる。
【００３５】
本発明の好適な実施形態では、制約条件２０、Ｉ／Ｏデータモデル２２、および時間カバレージ２５は、Ｓｐｅｃｍａｎ（商標）関数プログラミング環境（米国カリフォルニア州マウンテンビュー、ベリシティ・デザイン社）によって提供されかつ米国特許出願第０９／０２０７９２号に開示されているコード言語である、ｅコードで構成することが好ましい。ｅコードによるプログラミングの容易さおよび柔軟性のため、そのような実施形態が好ましい。以下の記述はこの好適な実施形態を中心にしているが、これは説明のためにすぎず、いかようにも制限するつもりはない。
【００３６】
ｅコード言語はハードウェア指向検証特定的オブジェクト指向プログラミング言語である。この言語のオブジェクトは「ストラクト」のインスタンスであり、それはフィールドと、フィールド内に格納されたデータに対して働きかつ他のオブジェクトと対話する１つまたはそれ以上の関数または方法とを含む。任意選択的に、制約条件はフィールドに対して働き、それによりフィールドに格納されたデータを、例えばデータの可能な値の範囲を制約することによって変更することができる。フィールドは、他のストラクトおよびスカラまたはストラクトのリストをはじめ、より複雑な構造を格納するために使用することもできる。
【００３７】
テスト生成のプロセスは、ストラクトおよびフィールドをはじめとするデータ要素に無作為の値を充填する。各要素に対して可能なデータ値は任意選択的に、有向テスト生成のための方向を提供する制約条件によって制限することができる。本発明の方法は特に、ビットワイズ制約条件を提供することを目的とする。以下の部分では、ｅコード言語によるそのような制約条件のための多数の例証的コマンド構造を説明するが、これらのコマンド構造は本発明の特に好適な実施形態を説明する目的のために提示するだけであることを理解されたい。加えて、そのようなビットワイズ制約条件を解くための例示的アルゴリズムの説明を提示する。この例は、単なる例証であり、いかようにも限定する意図はない。コマンドのより完全な説明については、前に参照によって組み込んだ米国特許出願第０９／０２０７９２号を参照されたい。
【００３８】
次の制約条件を処理する本発明の能力の例を提示する。
keep x[j:i] == y  (1)
keep x|y == z  (2)
keep x＆y == z  (3)
keep x∧y == z  (4)
keep 〜x == y  (5)
keep x << k == y  (6)
keep x >> k == y  (7)
現在、演算子“［：］”、“｜”、“＆”、“∧”、“〜”、“＜＜”および“＞＞”の各々は関数として計算することしかできない。したがって、上記の制約条件の全てにおいて、情報は左から右にだけ伝搬することができる。その結果、
keep x[2:0] == 0b101
など、一部の非常に直観的なユーザ制約条件は、背景技術で周知のテストジェネレータによって解くことができない。そのようなジェネレータのための現在周知のアルゴリズムは、最初に非制約ｘを生成し、次いでｘ［２：０］を関数として計算し、次いでこの値が０ｂ１０１と等しいか否かを検査する。当然、この戦略は全事例の８分の７で失敗する。
【００３９】
本発明は、上記の制約条件をより柔軟に処理するための戦略を提供する。本発明は、（１）から（７）までの全ての制約条件を多方向制約条件として提供することによって動作することが好ましく、それによって制約条件パラメータ間の制約条件伝搬の方式を幾つか提供することが好ましい。
【００４０】
初期仮定
問題（１）については、ｘおよびｙの前にｉおよびｊが生成されることが認められている。すなわち、ｘおよびｙからｉおよびｊへの制約条件伝搬が無い。同様に、問題（６）および（７）については、ｘおよびｙからｋへの伝搬が無い。実際問題として、これらの制限は次のような制約条件：
keep 125[j:i] == 0b101
keep 14 >> k == 7
がｉ、ｊまたはｋについて解くことができないことを意味する。
【００４１】
基本データ構造：ｂｉｔＲＬ
ビットワイズ制約条件処理のためのデータ構造は、ＲＬ（新しい範囲リスト）に基づいて構成することが好ましい。ｂｉｔＲＬと呼ばれる新しい構造は、各々が１ビットの生成項目に対応する４状態値のベクトルによりＲＬ型を延長することによって得ることが好ましい。このベクトルの値は、対応するビットの次の４つの可能な状態を表わす。
０−ビットは確実に０である。
１−ビットは確実に１である。
0004652663.tif 000004
【００４２】
この文書全体を通して、ｂｉｔＲＬについて次の表記法を使用する。
【数１】
0004652663.tif 000005
この表現の２つの構成要素はそれぞれ区間表現およびビットワイズ表現と呼ばれる。
【００４３】
次の２群の制約条件パラメータをｂｉｔＲＬで表わさなければならない。
１．制約条件（１）〜（７）のパラメータ
２．「ビットワイズ」情報を制約条件内で伝搬させることのできる制約条件によって、第１群のパラメータと接続されるパラメータ
【００４４】
アルゴリズム
簡約化
問題（２）、（３）および（５）は任意選択的に、かつ好ましくは、表１を用いて単刀直入に簡約化することができる。基本的簡約化ステップは、制約条件パラメータの１つに対し新しい値を計算し、次いでこのパラメータの範囲にこの新しい値を交差させる（ビットワイズ＆を使用して）ことにある。したがって、ビットワイズ制約条件の完全な簡約化は、この基本ステップを各制約条件パラメータに連続的に適用することにある。
【表１】
0004652663.tif 000006
【００４５】
例１  制約条件ｋｅｅｐ  ｘ｜ｙ＝＝ｚについて考察する。ビットに関する情報だけを考察する。ｘ、ｙおよびｚは全て４ビット範囲であり、次の初期値を持つと仮定する。
0004652663.tif 000007
次いで、次の通り簡約化を実行することが好ましい。
・ビット毎に、または対応するビットの各対に対して別々に、表を適用し、（ｘ
0004652663.tif 000008
・（ｚ＆ｚ´）を計算すると＜０１１１＞となる。この値をｚに代入する。結果は次の通りである。
0004652663.tif 000009
z=<0111>
0004652663.tif 000010
計算する。
・ｘにｘ´を交差させると、次の結果が生じる。
0004652663.tif 000011
z=<0111>
・最後に、ｙについて同様のステップを実行する。この例ではそれは変化しない。したがって、上の結果がこの簡約化の最終結果である。
【００４６】
問題（６）および（７）は、対応するビットワイズ表現をシフトすることによって、単刀直入に処理される。
【００４７】
ＲＬ内の制約条件伝搬
両型の制約条件を並行して解くために、情報はｂｉｔＲＬ内で双方向に伝搬することが好ましい。区間範囲の最大値は、ビットワイズ表現のどのビットが常に０でなければならないかを示す。
例２  ｘが６ビット単位であり、次の初期範囲を持つと仮定する。
【数２】
0004652663.tif 000012
区間表現の最大値は３０であり、それは０１１１１０である。したがってビットワイズ表現の最上位ビットは０でなければならない。すなわち、
【数３】
0004652663.tif 000013
となる
区間限界の修正および無効区間の除去のために、反対方向の伝搬を使用することが好ましい。
【００４８】
例３  例２で使用した範囲を使用すると、次の事実が観察される。
・ｘの範囲は偶数しか含まないので（最下位ビットが０である）、２１は不正確な限界である。
・１０のビットワイズ表現（００１０１０）は該ビットワイズ表現と一致しないので、１０はｘの範囲に含まれない。
・ビットワイズ表現に一致する最小数は４（２進数０００１００）であるので、２は不正確な限界である。
【００４９】
この例の場合、ビットワイズ表現から区間への伝搬の正しい結果は、次の通りでなければならない。
【数４】
0004652663.tif 000014
【００５０】
次の例は上記の計算をより詳細に示す。
【００５１】
例４  例３の区間［２１．．３０］の正確な下限すなわち最小値ｔを、２１≦
0004652663.tif 000015
と仮定する。
【００５２】
計算は次のように行なわれる。最初に、下限がビットワイズ表現を満たすかどうかを検査する。この例ではもう行なっている。しかし、２１＝（０１０１０１
0004652663.tif 000016
２１のビットだけを考察する。すなわち、（０１０１０１）２から下線を引いたビットを使用して、数４＝（１００）２が得られる。次のステップはこの数を増分して５＝（１０１）２を得て、得られたビットをそれぞれビットワイズ表現の
0004652663.tif 000017
【００５３】
0004652663.tif 000018
て、上限を計算する。唯一の相違は、増分の代わりに減分操作を使用することである。
【００５４】
観察される通り、各限界の評価の複雑性は、範囲のビットワイズ表現のビット数に線形的に依存する。
【００５５】
一般的に、ビットワイズ表現と区間表現との間の伝搬のプロセスは、各区間の正確な限界を計算することにある。区間［ｌ．．ｈ］について考える。下限ｌについて、最小数ｌ´は、ｌ≦ｌ´でありかつｌ´がビットワイズ表現と一致するように計算される。同様に、上限ｈについて、最大数ｈ´は、ｈ´≦ｈでありかつｈ´がビットワイズ表現と一致するように計算される。新しい区間［ｌ´．．ｈ´］が有効であるならば、すなわちｌ´≦ｈ´であるならば、それが［ｌ．．ｈ］に置き換わる。そうでなければ、区間［ｌ．．ｈ］は表現から除去される。
【００５６】
生成
本節では、ｂｉｔＲＬからの値生成の問題を取り上げる。以下の手順に従うことが好ましい。
・区間表現の各区間の解の個数を決定する。
・その重みに従って区間を無作為に選択する。
・選択された区間内で１つの点を選択する。
【００５７】
以下の例は、区間表現内の各区間の解の個数を計算する方法を解説する。
【００５８】
例５  例３の事例：
【数５】
0004652663.tif 000019
を引き継いで、区間［２２．．３０］について考える。該区間限界の２進表現はそれぞれ０１０１１０および０１１１１０である。下線を引いたビット、すなわ
0004652663.tif 000020
今、下線を引いたビットを収集すると、２つの数すなわち５＝（１０１）２および７＝（１１１）２が得られる。ｘのビットワイズ表現を満たし、かつ［２２．．３０］内にある各数を、１０１と１１１との間の範囲のビット組合せとして得ることができることは明らかである。区間［２２．．３０］内には３つの解（７−５＋１）がある。
【００５９】
同じ技法を用いて、最初の区間［４．．６］を使用すると２つの有効な解が計算される。
【００６０】
同様に、解の数を計算するために２進表現を使用することができるので、それらを点の無作為選択に使用することができる。
【００６１】
例６  例５に示した通り、生成アルゴリズムの第２ステップで区間［２．．６］を選択する確率は２／５であり、［２２．．３０］を選択する確率は３／５である（区間の解の個数による）。アルゴリズムの第２ステップで［２２．．３０］を選択すると仮定する。今、ゴールは［２２．．３０］の中でｘのビットワイズ表現を満たす数を見つけることである。この問題の各解は、５＝（１０１）２から７＝（１１１）２までの範囲の３ビットの２進数組合せとして表現することができる。したがって、区間［５．．７］からの数が無作為に選択される。選択が６＝（１１０）２であると仮定する。最終ステップは、６の３ビットを取り、
0004652663.tif 000021
ある。従って、最終結果は（０１１１００）２＝２８である。
【００６２】
追加的再順序付け
本発明によって成功裡に処理される事例の数を増加するために、任意選択的に、かつ好ましくは、「ビットスライシング」および「シフト」制約条件のための次の好適な追加的順序規則（order rule）を考慮することができる。
keep x[j:i] == y : (i,j) → (x,y), (y) ⇒ (x)
keep x << k == y : (k) → (x,y)
keep x >> k == y : (k) → (x,y)
ここで「→」および「⇒」はそれぞれ「ハード」および「ソフト」順序付けを表わす。上に示した「ハード」順序関係は全て、初期仮定によって取り扱われる。ビットスライシング制約条件における「ソフト」順序付け（ｙ）⇒（ｘ）の背後にある動機付けは、例によって説明することが好ましい。
【００６３】
例７  次の制約条件が存在すると仮定する。
keep x[3:0]in[1,2,4,8]
この制約条件は当然、ｘの４個の最下位ビットのうちの１つだけが１でなければならず、他は全て０でなければならない。この制約条件は自動的に次の２つの制約条件に変換されることが好ましい。
keep x[3:0] == t
keep t in[1,2,4,8]
ここでｔは時間変数である。この例で問題を避けるために、暗黙の「ソフト」順序付け（ｔ）⇒（ｘ）を使用して、ｔを［１，２，４，８］からの値の１つに生成することが好ましい。次いで、生成された後をｘのビットに伝搬し、制約条件は最終的に成功する。
【００６４】
幾つかの例
本節全体で以下の宣言を仮定する。
x : byte
y : unit(bits : 2)
今、以下の８つのテスト事例について個別に考慮する。
１．次の制約条件を仮定する。
keep x[4:3] == 0
この事例は、前節に示した通り、本発明によって解くことができる。
２．次の制約条件を仮定する。
keep x[4:3] == 0
keep x > 7
（１）の場合と同じである。
３．次の制約条件を仮定する。
keep soft x[4:3] == 0
keep x > 7
（１）の場合と同じである。「ソフト」制約条件の簡約化は、「ハード」制約条件の場合と全く同様に、ｘのｂｉｔＲＬに影響を及ぼす。
４．次の制約条件を仮定する。
keep x[4:3] == 0
keep soft x > 7
（３）の場合と同じである。
５．次の制約条件を仮定する。
keep x[5:4] == 0
keep x[7:6] > 0 or x[3:0] > 7
keep x > 7
この事例では、ジェネレータは最初に第１および第３制約条件を簡約化し、それによりｘに対し次の範囲が得られる。
【数６】
0004652663.tif 000022
本発明によってこの範囲から生成される値は、［０ｘ８．．０ｘＦ］内であるか、または０ｘＦより大きいかのいずれかであり、後者の場合、ｘ［７：６］のビットの幾つかは１に設定される。したがって、第２制約条件の論理和代替条件の１つが成功する。
６．次の制約条件を仮定する。
keep x[4:3] == y
keep gen (y) before (x)
keep soft y > 0
このテスト事例は、前節に示した通り、ジェネレータによって解かれる。さらに、第１制約条件によって暗黙の順序付け（ｙ）⇒（ｘ）が課せられるので、順序付け（ｙ）→（ｘ）はここでは冗長である。
７．次の制約条件を仮定する。
keep x[4:3] == y
keep gen (x) before (y)
keep soft y > 0
このテスト事例はユーザエラーのために事例の４分の１が失敗するおそれがある。ここでの問題は、ｙ（［１．．３］）の範囲に関する情報がｘのｂｉｔＲＬで捕捉できないことである。したがって、ｘがｙより前に生成されるならば、ｘ［４：３］を０に設定することができる。
８．次の制約条件を仮定する。
keep x[4:y] == 0
初期仮定によって、ｙは常にｘより前に生成される。したがってｙは［０．．３］からの値に生成され、次いで結果的に得られた制約条件をジェネレータによって成功裡に解くことができる。
【００６５】
テスト生成環境でビットワイズ制約条件を提供して課すための実際のプロセスの例を以下でさらに詳述するが、この例は説明のためだけのものであって、制限する意図はないことを理解されたい。例示的制約システムは次の通りである。
【００６６】
最初に、下に示すストラクトＳが、各々４ビットの２つのフィールドＸおよびＹを持つと仮定する。ストラクトＳはまた、ＸとＹの間の関係を強要する（１）、（２）および（３）と表記された３つの制約条件を持つと仮定する。制約条件（１）は算術であり、制約条件（２）および（３）はビットワイズ制約条件である。
【数７】
0004652663.tif 000023
フィールドＸに制約条件（１）を適用すると結果的に、下の四角の枠内に示した次の範囲リストが得られる。
【数８】
0004652663.tif 000024
【００６７】
フィールドＹに制約条件（３）を適用すると結果的に、下の四角の枠内に示した次のビット範囲が得られる（Ｔは１または０のいずれかを表わす）。
【数９】
0004652663.tif 000025
制約条件（２）はフィールドＸとフィールドＹとの間の関係を決定する。最初に制約条件（２）の適用により、フィールドＸの範囲リストがビット範囲に変換される。範囲リスト内の算術値は、最初に各算術値のビット値を決定することによってビット範囲に変換することが好ましい。ビットが範囲リストの値全体を通して変化しなければ、該ビットは０または１に設定される。該ビットが算術値全
0004652663.tif 000026
。ビットワイズ制約条件の効果は、ビットを例えば「０」に変換させる。
【数１０】
0004652663.tif 000027
【００６８】
次に、以下の簡約化ステップは結果的に、フィールドＹおよびＸのビット範囲を論理積して、下の四角の枠内に示すように、フィールドＸの新しいビット範囲を生成する。
【数１１】
0004652663.tif 000028
【００６９】
それに続く生成ステップにより、下の四角の枠内に示すように、例えばフィールドＹを６に、フィールドＸを７に設定するなど、前ステップで決定された許容範囲内の値を代入する。
【数１２】
0004652663.tif 000029
【００７０】
本発明を限定された数の実施形態に関して説明したが、本発明の多くの変化、変形、および他の適用を行なうことができることを理解されたい。
【図面の簡単な説明】
【図１】  本発明に係る例示的システムを示す略ブロック図である。
【図１】
0004652663.tif 000030