(57)【要約】  モジュール式試験システムをシミュレートする方法を開示する。当該方法は、コントローラを提供することであって、コントローラは、少なくとも１つのベンダモジュールとその対応する被試験デバイス（ＤＵＴ）モデルとを制御する、コントローラを提供すること、上記少なくとも１つのベンダモジュールとその対応するＤＵＴモデルとの間の標準インタフェースを確立するシミュレーションフレームワークを生成すること、シミュレーションフレームワークを構成すること、及びシミュレーションフレームワークを使用して上記モジュール式試験システムをシミュレートすることを含む。
2008519247.tif 000002
【特許請求の範囲】
【請求項１】
モジュール式試験システムをシミュレートする方法であって、
コントローラを提供することであって、該コントローラは、少なくとも１つのベンダモジュールとその対応する被試験デバイス（ＤＵＴ）モデルとを制御する、コントローラを提供すること、
前記少なくとも１つのベンダモジュールとその対応するＤＵＴモデルとの間の標準インタフェースを確立するシミュレーションフレームワークを生成すること、
前記シミュレーションフレームワークを構成すること、及び
前記シミュレーションフレームワークを使用して前記モジュール式試験システムをシミュレートすること
を含む、モジュール式試験システムをシミュレートする方法。
【請求項２】
シミュレーションフレームワークを生成することは、
前記ベンダモジュールと前記モジュール式試験システムとの間の通信を処理するベンダモジュールインタフェースを生成すること、及び
ＤＵＴモデルと前記ベンダモジュールとの間の通信を処理するＤＵＴモデルインタフェースを生成すること
を含む、請求項１に記載のモジュール式試験システムをシミュレートする方法。
【請求項３】
前記ベンダモジュールインタフェースを生成することは、
所定標準インタフェースの第１のセットに従って前記ベンダモジュールをインプリメントすること、及び
前記ベンダモジュールの挙動をモデル化する仮想関数をインプリメントすること
を含む、請求項２に記載のモジュール式試験システムをシミュレートする方法。
【請求項４】
前記ＤＵＴモデルインタフェースを生成することは、
所定標準インタフェースの第２のセットに従って前記ＤＵＴモデルをインプリメントすること、及び
前記ＤＵＴモデルの挙動をモデル化する仮想関数をインプリメントすること
を含む、請求項２に記載のモジュール式試験システムをシミュレートする方法。
【請求項５】
シミュレーションフレームワークを生成することは、
前記ベンダモジュール及び前記ＤＵＴモデルの出力チャネルにおいて動的電圧レベルを設定する共通インタフェースを提供すること
をさらに含む、請求項２に記載のモジュール式試験システムをシミュレートする方法。
【請求項６】
前記シミュレーションフレームワークを構成することは、
シミュレーション構成ファイル（ＳＣＦ）を生成すること、及び
前記モジュール式試験システムに前記シミュレーション構成ファイルをロードすること
を含む、請求項１に記載のモジュール式試験システムをシミュレートする方法。
【請求項７】
前記シミュレーション構成ファイルは、
１つ又は複数のベンダモジュールＤＬＬと、
前記モジュール式試験システムのハードウェア設定と、
シミュレーションパラメータと
を含む、請求項６に記載のモジュール式試験システムをシミュレートする方法。
【請求項８】
前記シミュレーションフレームワークを構成することは、
オフライン構成ファイルを生成すること、及び
前記モジュール式試験システムに前記オフライン構成ファイルをロードすること
を含む、請求項６に記載のモジュール式試験システムをシミュレートする方法。
【請求項９】
前記オフライン構成ファイルは、
１つ又は複数のＤＵＴモデルＤＬＬと、
前記ＤＵＴのハードウェア設定と、
オフラインシミュレーションパラメータと、
を含む、請求項８に記載のモジュール式試験システムをシミュレートする方法。
【請求項１０】
前記シミュレーションフレームワークを構成することは、
ベンダモジュールＤＬＬをロードすること、
前記オフライン構成ファイルを受け取ること、及び
前記シミュレーション構成ファイル及び前記オフライン構成ファイルに従ってシミュレーション構造を構築すること
をさらに含む、請求項８に記載のモジュール式試験システムをシミュレートする方法。
【請求項１１】
前記モジュール式試験システムをシミュレートすることは、
前記ベンダモジュールのイベントベースシミュレーションを実行すること、
前記ＤＵＴモデルの時間ベースシミュレーションを実行すること、及び
前記イベントベースシミュレーションと前記時間ベースシミュレーションとの間でシミュレーションデータを転送すること
を含む、請求項１に記載のモジュール式試験システムをシミュレートする方法。
【請求項１２】
シミュレーションデータを転送することは、ベンダモジュールと前記ＤＵＴモデルとの間の駆動競合（drive conflict:ドライブ競合）をシミュレーション中に自動的に解決することを含む、請求項１１に記載のモジュール式試験システムをシミュレートする方法。
【請求項１３】
前記モジュール式試験システムをシミュレートすることは、複数のＤＵＴモデルを並列に試験することを含む、請求項１に記載のモジュール式試験システムをシミュレートする方法。
【請求項１４】
前記モジュール式試験システムをシミュレートすることは、前記シミュレーションフレームワークを変更することなく前記モジュール式試験システムに１つ又は複数のベンダモジュールを追加することを含む、請求項１に記載のモジュール式試験システムをシミュレートする方法。
【請求項１５】
前記モジュール式試験システムをシミュレートすることは、前記シミュレーションフレームワークを変更することなく前記モジュール式試験システムから１つ又は複数のベンダモジュールを除去することを含む、請求項１に記載のモジュール式試験システムをシミュレートする方法。
【請求項１６】
前記モジュール式試験システムをシミュレートすることは、前記シミュレーションフレームワークを変更することなく前記モジュール式試験システムに１つ又は複数のＤＵＴモデルを追加することを含む、請求項１に記載のモジュール式試験システムをシミュレートする方法。
【請求項１７】
前記モジュール式試験システムをシミュレートすることは、前記シミュレーションフレームワークを変更することなく前記モジュール式試験システムから１つ又は複数のＤＵＴモデルを除去することを含む、請求項１に記載のモジュール式試験システムをシミュレートする方法。
【請求項１８】
前記モジュール式試験システムをシミュレートすることは、実行シミュレーションを停止することなく前記モジュール式試験システムに１つ又は複数のＤＵＴモデルを追加することを含む、請求項１に記載のモジュール式試験システムをシミュレートする方法。
【請求項１９】
前記モジュール式試験システムをシミュレートすることは、実行シミュレーションを停止することなく前記モジュール式試験システムから１つ又は複数のＤＵＴモデルを除去することを含む、請求項１に記載のモジュール式試験システムをシミュレートする方法。
【請求項２０】
モジュール式試験システムであって、
１つ又は複数のベンダモジュールと、
１つ又は複数の被試験デバイス（ＤＵＴ）モデルと、
前記ベンダモジュールとそれらの対応するＤＵＴモデルとを制御するコントローラと、
前記ベンダモジュールと前記ＤＵＴモデルとの間の標準インタフェースを確立するシミュレーションフレームワークと、
該シミュレーションフレームワークを構成する手段と、
該シミュレーションフレームワークを使用して当該モジュール式試験システムをシミュレートする手段と
を備えるモジュール式試験システム。
【請求項２１】
前記シミュレーションフレームワークは、
ベンダモジュールと当該モジュール式試験システムとの間の通信を処理するベンダモジュールインタフェースと、
ＤＵＴモデルと前記ベンダモジュールとの間の通信を処理するＤＵＴモデルインタフェースと
を備える、請求項２０に記載のモジュール式試験システム。
【請求項２２】
前記ベンダモジュールインタフェースは、
所定標準インタフェースの第１のセットに従ってインプリメントされるベンダモジュールと、
該ベンダモジュールの挙動をモデル化する仮想関数と
を備える、請求項２１に記載のモジュール式試験システム。
【請求項２３】
前記ＤＵＴモデルインタフェースは、
所定標準インタフェースの第２のセットに従ってインプリメントされるＤＵＴモデルと、
該ＤＵＴモデルの挙動をモデル化する仮想関数と
を備える、請求項２１に記載のモジュール式試験システム。
【請求項２４】
前記シミュレーションフレームワークは、
前記ベンダモジュール及び前記ＤＵＴモデルの出力チャネルにおいて動的電圧レベルを設定する共通インタフェース
をさらに備える、請求項２１に記載のモジュール式試験システム。
【請求項２５】
前記シミュレーションフレームワークを構成する前記手段は、
シミュレーション構成ファイル（ＳＣＦ）を生成する手段と、
該シミュレーション構成ファイルを前記モジュール式試験システムにロードする手段と
を備える、請求項２０に記載のモジュール式試験システム。
【請求項２６】
前記シミュレーション構成ファイルは、
１つ又は複数のベンダモジュールＤＬＬと、
当該モジュール式試験システムのハードウェア設定と、
シミュレーションパラメータと
を備える、請求項２５に記載のモジュール式試験システム。
【請求項２７】
前記シミュレーションフレームワークを構成する前記手段は、
オフライン構成ファイルを生成する手段と、
該オフライン構成ファイルを前記モジュール式試験システムにロードする手段と
を備える、請求項２５に記載のモジュール式試験システム。
【請求項２８】
前記オフライン構成ファイルは、
１つ又は複数のＤＵＴモデルＤＬＬと、
前記ＤＵＴのハードウェア設定と、
オフラインシミュレーションパラメータと
を含む、請求項２７に記載のモジュール式試験システム。
【請求項２９】
前記シミュレーションフレームワークを構成する前記手段は、
ベンダモジュールＤＬＬをロードする手段と、
前記オフライン構成ファイルを受け取る手段と、
前記シミュレーション構成ファイル及び前記オフライン構成ファイルに従ってシミュレーション構造を構築する手段と
をさらに含む、請求項２７に記載のモジュール式試験システム。
【請求項３０】
前記モジュール式試験システムをシミュレートする前記手段は、
前記ベンダモジュールのイベントベースシミュレーションを実行する手段と、
前記ＤＵＴモデルの時間ベースシミュレーションを実行する手段と、
前記イベントベースシミュレーションと前記時間ベースシミュレーションとの間でシミュレーションデータを転送する手段と
を含む、請求項２０に記載のモジュール式試験システム。
【請求項３１】
シミュレーションデータを転送する前記手段は、ベンダモジュールと前記ＤＵＴモデルとの間の駆動競合をシミュレーション中に自動的に解決する手段を含む、請求項３０に記載のモジュール式試験システム。
【請求項３２】
前記モジュール式試験システムをシミュレートする前記手段は、複数のＤＵＴモデルを並列に試験する手段を含む、請求項２０に記載のモジュール式試験システム。
【請求項３３】
前記モジュール式試験システムをシミュレートする前記手段は、前記シミュレーションフレームワークを変更することなく前記モジュール式試験システムに１つ又は複数のベンダモジュールを追加する手段を含む、請求項２０に記載のモジュール式試験システム。
【請求項３４】
前記モジュール式試験システムをシミュレートする前記手段は、前記シミュレーションフレームワークを変更することなく前記モジュール式試験システムから１つ又は複数のベンダモジュールを除去する手段を含む、請求項２０に記載のモジュール式試験システム。
【請求項３５】
前記モジュール式試験システムをシミュレートする前記手段は、前記シミュレーションフレームワークを変更することなく前記モジュール式試験システムに１つ又は複数のＤＵＴモデルを追加する手段を含む、請求項２０に記載のモジュール式試験システム。
【請求項３６】
前記モジュール式試験システムをシミュレートする前記手段は、前記シミュレーションフレームワークを変更することなく前記モジュール式試験システムから１つ又は複数のＤＵＴモデルを除去する手段を含む、請求項２０に記載のモジュール式試験システム。
【請求項３７】
前記モジュール式試験システムをシミュレートする前記手段は、実行シミュレーションを停止することなく前記モジュール式試験システムに１つ又は複数のＤＵＴモデルを追加する手段を含む、請求項２０に記載のモジュール式試験システム。
【請求項３８】
前記モジュール式試験システムをシミュレートする前記手段は、実行シミュレーションを停止することなく前記モジュール式試験システムから１つ又は複数のＤＵＴモデルを除去する手段を含む、請求項２０に記載のモジュール式試験システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、自動試験装置（ＡＴＥ）の分野に関する。特に、本発明は、モジュール式試験システムをシミュレートする方法及びシステムに関する。
【０００２】
本出願は、参照によりその全体が本明細書に援用される、株式会社アドバンテスト（Advantest Corporation）によって２００４年５月２２日に出願された、「Software Development in an Open Architecture Test System」と題する米国仮出願第６０／５７３，５７７号の利益を主張する。
【背景技術】
【０００３】
半導体製造における主なコストは、実行可能性及び機能性に対し集積回路を試験するテストプログラムの開発及び保守である。これを行うには、通常、実際のテスタハードウェアに対する何時間もの作業が必要である。しかしながら、既存の半導体テスタには、テストプログラミング言語の意味論を検査する以外、テストプログラムをシミュレートする能力がほとんどないかまったくない。この制限により、技術者は、実際のテスタハードウェアにおいて自身のテストプログラムをデバッグすることが余儀なくされる。しかしながら、テストプログラム開発のためにテスタハードウェアを使用することは、高価な試験装置の費用効率のよい使用ではない。それに加えて、テスタは通常、技術者のグループ間で共有されるため、テスタを使用するために割り当てられる時間は限られており、それによりテストプログラムの開発にボトルネックがもたらされ、その結果、工程において開発が逐次行われることとなる。テストプログラム開発におけるこのような制限により、集積回路の製造が遅延する場合があり、それにより製品の発売が遅れ市場機会を失う可能性がある。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
したがって、高価な試験装置を使用することなくテストプログラムの機能性を検証する方法及びシステムが必要とされている。特に、テストプログラム、ベンダモジュール及びそれらの対応する被試験デバイス（ＤＵＴ）を用いてモジュール式試験システムをシミュレートする方法及びシステムが必要とされている。
【課題を解決するための手段】
【０００５】
本発明の目的は、テストプログラム開発のためのテスタハードウェアの使用量を低減し、それにより貴重なテスタ装置の使用を最適化することである。本発明の別の目的は、テストプログラム、モジュール及びＤＵＴの問題をそれらがテスタ装置で実行される前に特定することである。本発明のさらに別の目的は、テストプログラム、モジュール及びＤＵＴの並列開発のための環境を提供し、それにより全製品開発時間を短縮することである。
【０００６】
モジュール式試験システムをシミュレートする、開示される方法は、エンドユーザが構成することができるシミュレーションフレームワークを提供する。このフレームワークを使用して、ベンダエミュレーションモジュール及びＤＵＴモデルをロードし、シミュレーションフレームワークＡＰＩを通してテストプログラムを実行するシミュレーション環境を構成する。この方法により、ベンダのソフトウェアエミュレーションをインストールしシステム構成ファイルを編集することにより、新たなベンダモジュールを既存のインストレーションに追加することができる。また、この方法により、技術者は、高価なテスタ装置の使用を最小限にして自身のワークステーションでテストプログラムを開発することができる。
【０００７】
１つの実施形態は、モジュール式試験システムをシミュレートする方法は、コントローラを提供することであって、該コントローラは、少なくとも１つのベンダモジュールとその対応するＤＵＴモデルとを制御する、コントローラを提供すること、上記少なくとも１つのベンダモジュールとその対応するＤＵＴモデルとの間の標準インタフェースを確立するシミュレーションフレームワークを生成すること、シミュレーションフレームワークを構成すること、及びシミュレーションフレームワークを使用して上記モジュール式試験システムをシミュレートすることを含む。
【０００８】
別の実施形態では、モジュール式試験システムは、１つ又は複数のベンダモジュールと、１つ又は複数のＤＵＴモデルと、上記ベンダモジュールとそれらの対応するＤＵＴモデルとを制御するコントローラと、上記ベンダモジュールと上記ＤＵＴモデルとの間の標準インタフェースを確立するシミュレーションフレームワークとを含む。本モジュール式試験システムは、該シミュレーションフレームワークを構成する手段と、該シミュレーションフレームワークを使用して当該モジュール式試験システムをシミュレートする手段とをさらに備える。
【０００９】
以下、本発明の上述した特徴及び利点とともにその追加の特徴及び利点について、以下の図面をともに考慮した場合に本発明の実施形態の詳細な説明の結果としてより明確に理解されるであろう。
【発明を実施するための最良の形態】
【００１０】
モジュール式試験システムをシミュレートする方法及びシステムを提供する。以下の説明を、当業者が本発明を作製し使用することができるように提示する。具体的な実施形態及び適用の説明は、単に例として提供する。本明細書で説明する例に対するさまざまな変更及び組合せは、当業者には容易に明らかになるであろう。また、本明細書で定義する一般原理を、本発明の精神及び範囲から逸脱することなく他の例及び適用に応用してもよい。このため、本発明は、説明され且つ示される例に限定されるように意図されておらず、本明細書で開示する原理及び特徴に一致する最も広い範囲を付与される。
【００１１】
図１Ａは、本発明の一実施形態によるオープンアーキテクチャ試験システムを示す。システムコントローラ（ＳｙｓＣ）１０２は、複数のサイトコントローラ（ＳｉｔｅＣ）１０４に結合される。システムコントローラを、関連するファイルにアクセスするためにネットワークに結合してもよい。各サイトコントローラは、モジュール接続イネーブラ１０６を通して、試験サイト１１０に位置する１つ又は複数の試験モジュール１０８に結合される。モジュール接続イネーブラ１０６は、接続されたハードウェアモジュール１０８の再構成を可能にし、また、データ転送用のバスとしての役割を果たす（パターンデータをロードする、応答データを収集する、制御を提供する等）。さらに、モジュール接続イネーブラを通して、１つのサイトのモジュールが、別のサイトのモジュールにアクセスすることができる。モジュール接続イネーブラ１０６は、異なる試験サイトが同じか又は異なるモジュール構成を有することができるようにする。言い換えれば、各試験サイトは、異なる数及び異なるタイプのモジュールを採用してもよい。あり得るハードウェアインプリメンテーションには、専用接続、スイッチ接続、バス接続、リング接続及びスター接続が含まれる。モジュール接続イネーブラ１０６を、スイッチマトリクスによって実施してもよい。たとえば、各試験サイト１１０は、ＤＵＴ１１２に関連し、ＤＵＴ１１２は、ロードボード１１４を介して対応するサイトのモジュールに接続される。別の実施形態では、単一サイトコントローラを複数のＤＵＴサイトに接続してもよい。
【００１２】
システムコントローラ１０２は、全体的なシステムマネージャとしての役割を果たす。それは、サイトコントローラアクティビティを調整し、システムレベルの並列試験戦略を管理し、さらにシステムレベルのデータロギング及びエラー処理サポートとともにハンドラ／プローブ制御を提供する。システムコントローラ１０２は、試験環境を検証しデバッグする際の試験技術者に対する主要な対話点である。それは、サイトコントローラ１０４に対するゲートウェイを提供し、マルチＤＵＴ環境におけるサイトコントローラアクティビティの同期化を管理する。それはさらに、試験シミュレーションモジュール等のユーザアプリケーション及びツールを実行する。動作設定に応じて、システムコントローラ１０２を、サイトコントローラ１０４の動作とは別のＣＰＵに配置してもよい。別法として、システムコントローラ１０２とサイトコントローラ１０４とにより共通のＣＰＵを共有してもよい。同様に、各サイトコントローラ１０４を、それ自体の専用ＣＰＵ（中央処理装置）に配置してもよく、又は同じＣＰＵ内の別々のプロセス又はスレッドとして配置してもよい。
【００１３】
サイトコントローラ１０４は、ＤＵＴを試験するためのテストプランを実行することに関与する。テストプランは、フレームワーククラスと、試験方法をカプセル化する標準テストクラス又はユーザ提供テストクラスとを使用することにより、特定の試験を生成する。さらに、テストプランは、標準インタフェースを使用してハードウェアを構成し、試験フローを定義する。
【００１４】
個々のシステムコンポーネントを、統合されたモノリシックシステムの論理コンポーネントとみなしてもよく、必ずしも分散システムの物理コンポーネントとしてみなさなくてもよいということを理解して、本発明のシステムアーキテクチャを、概念的に、図１に示す分散システムとして想定してもよい。ハードウェアレベルとソフトウェアレベルとの両方において標準インタフェースを使用することにより、プラグ・アンド・プレイモジュール又は置換可能モジュールが容易になる。テスタオペレーティングシステム（ＴＯＳ）により、ユーザは、テストプランプログラミング言語を使用してテストプランプログラムを書くことができ、且つ特定の被試験デバイス（ＤＵＴ）に特化した方法で試験システムを動作させることができる。また、それにより、ユーザは、テストプランプログラムにおいてライブラリとして一般に使用される試験システム動作のシーケンスをパッケージ化することも可能となる。これらのライブラリを、テストクラス及びテストテンプレートと呼ぶ場合がある。
【００１５】
図１Ｂは、本発明の一実施形態のシミュレーションシステムの概観を示す。シミュレーションシステムは、コントローラモデル１２１と、１つ又は複数のベンダエミュレーションモジュール１２２（なお、ベンダエミュレーションモジュールという用語は、ベンダモジュールまたはエミュレーションモジュールとも呼ぶ）と、１つ又は複数の被試験デバイス（ＤＵＴ）モデル１２４と、ロードボードモデル１２６とを含む。シミュレーション環境を組み立てるために、ユーザは、エミュレーションモジュール、ロードボードモデル及びＤＵＴモデルがシミュレーションフレームワークを介して接続される方法を記述する、システム構成ファイル及びオフライン構成ファイル（ともに後に詳細に説明する）を生成する。シミュレーション実行は、テストプログラムによってモジュールモデルにロードされるパターンに対して実行される。
【００１６】
シミュレーションフレームワークは、ロードボードモデル１０６と、１つ又は複数のテスタチャネル１２８と、１つ又は複数のＤＵＴチャネル１３０とを提供する。モジュールは、ベンダの動的リンクライブラリ（ＤＬＬ）からロードされる。各ブロックは、モジュールの単一インスタンスを表す。ＤＬＬを複数回ロードすることにより、同じモジュールタイプの複数のインスタンスを生成することができる。ＤＵＴモデル１２４が、Ｃ＋＋で書かれる場合はＤＵＴモデル１２４をＤＬＬとして提供してもよく、又はＶｅｒｉｌｏｇモードとして提供してもよい。
【００１７】
ロードボードモデル１２６は、ユーザによって構成可能である。ユーザは、テスタチャネル１２８を対応するＤＵＴチャネル１３０にマップし、各接続に関連する移送遅延を指定する。接続はすべて双方向であり、そのため、コネクタを出力ドライバ又は入力ストローブとして指定するように特別に考慮する必要はない。
【００１８】
シミュレーションフレームワーク
試験システムシミュレーションの主な部分はシミュレーションフレームワークであり、それはまたフレームワークとも呼ばれる。フレームワークは、２つの基本サービスを提供する。第一に、フレームワークにより、各ベンダモジュールを、システムバスを介して標準テスタ動作中と実質的に同じようにプログラム可能である。バスコールをシミュレートすることにより、テストプログラムは、エミュレートされたモジュールレジスタに書き込むことができ、それにより試験をセットアップする。もう一方のサービスは、試験実行のシミュレーションである。フレームワークは、エミュレートされたモジュールとＤＵＴモデルとの間の物理接続のためのモデルを提供する。フレームワークはまた、さまざまなシミュレーションコンポーネントの実行シーケンスを維持するエンジンも提供する。
【００１９】
試験システムは、シミュレーションモード（オフラインモード）にある時、テスタモジュールハードウェアと通信するために使用されるデバイスドライバを、共有メモリを通してフレームワークと通信するソフトウェアモジュールに置き換える。実際のテスタでは、モジュールとの通信は、バスとして知られるハードウェアモジュールによって容易にされる。バスは、通常、ベンダのハードウェアモジュールにおけるアドレス指定可能レジスタにバイナリパターンを送出するコマンドを使用する。このシミュレーションでは、フレームワークによって、特定のエミュレートされたモジュールを対象とするために同じコマンドが受け取られ且つ解釈される。その後、フレームワークは、レジスタアドレス及びデータをモジュールに送出することにより、モジュールがそのシミュレートされたレジスタにデータを保存することができるようにする。テストプログラムローディングは、最終的にはアドレス／データ対のこれらの基本単位に分解されるため、この単純なモデルは、テストプログラムがモジュールと行うすべての対話をサポートする。このプロセスの副産物は、較正及び診断プログラム開発もサポートするシミュレーションである。
【００２０】
オンラインモードとオフラインモードとの間のランタイムソフトウェアの相違は、システムバスデバイスドライバのみにあるため、オンライン環境におけるテストプログラムの挙動とオフライン環境におけるその対応する挙動とには高い相関性がある。このため、シミュレーションは、ユーザのテストプログラム及び基礎となるテスタオペレーティングシステム（ＴＯＳ）の挙動に関して正確である。
【００２１】
フレームワークはまた、テスタモジュールとＤＵＴとの物理接続の詳細なモデルも提供する。接続はすべて、ワイヤにおける電圧としてモデル化され、それにより基礎となる物理的特性が再現される。モジュール／ＤＵＴ対話においてデータフォーマットに関する仮定がないため、フレームワークは、エミュレーションモジュール及びＤＵＴモデルがフレームワークによって確立されるアプリケーションプログラミングインタフェース（ＡＰＩ）を使用する限り、それらの任意の組合せとともに機能する。フレームワークは、２つの電源が同じワイヤを同時に駆動する場合、電圧の自動調停を提供する。
【００２２】
テストプログラムの実行中にシミュレーションを制御するために、フレームワークは、そのＡＰＩにおいて、ベンダのモジュールがイベントを登録し且つ受け取ることができるようにするさまざまなメソッドを提供する。フレームワークは、これらのイベントを使用して、エミュレートされたモジュール及びＤＵＴモデルの実行のシーケンスを制御する。これらのイベントを管理することにより、且つモジュールがいかにイベントを処理するかに関する何らかの基本的な規則を指定することにより、モジュールエミュレーションを生成する柔軟なテンプレートを、モジュール式試験システムのユーザが利用することができるようになる。
【００２３】
図２は、モジュール式試験システムをシミュレートするシミュレーションフレームワークを示す。シミュレーションフレームワークは、シミュレーションマネージャ（SimMgr）クラス２０２と、シミュレーションチャネル（SimChannel）クラス２０４と、シミュレーションコンポーネント（SimComponent）クラス２０６と、シミュレーションイベントマネージャ（SimEventMgr）クラス２０８とを含む。SimMgrクラス２０２は、シミュレーションプロセスを管理する。SimComponent２０６は、ベンダが使用する基底クラスである。このクラス内で、いくつかの必要な挙動がインプリメントされる。メソッドの多くは仮想であり（Ｃ＋＋の場合）且つベンダインプリメンテーションを必要とする。CAnalogModuleクラス２１０は、SimComponentクラス２０６から継承し、必要なベンダ特定機能を追加するために使用される。
【００２４】
CAnalogModuleクラス２１０は、１組のSimChannel導出オブジェクト、すなわちCSimAWGオブジェクト２１２及びCsimDigitizerオブジェクト２１４を含む。これらのオブジェクトは、システムリソース（制御構造におけるIResource導出クラス）を表し、CSimAWGオブジェクトは、Ｄ／Ａチャネル（デジタルコマンドからのアナログ出力）をモデル化するアナログ波形発生器であり、CSimDigitizerオブジェクトは、対応するＡ／Ｄチャネル（アナログ信号からのデジタル入力）をモデル化する。IResource導出クラス要件は、これらのインプリメンテーションクラスに組み込まれ、これらのクラスは、波形を生成し読み出すためにシステム提供ユーティリティを使用する。SimEventMgrクラス２０８は、シミュレーションイベントオブジェクト２１６をさらに含む。シミュレーションフレームワークの各コンポーネントの詳細な説明については後述する。
【００２５】
シミュレーションフレームワークは、エミュレーションモジュール及びＤＵＴモデルの開発者に対し、１組の事前定義されたインタフェース及び設計制約を強制する。これにより、シミュレーションフレームワークの要件を満たすモデルが、シミュレーションの他のコンポーネントと互換性があることが保証される。シミュレーションフレームワークは、３つの部分、すなわちエミュレーションモジュールとＤＵＴモデルとの両方に共通のＡＰＩに対する第１の部分と、モジュールモデルに特定の第２の部分と、ＤＵＴモデルに特定の第３の部分とに分割される。１つのインプリメンテーションでは、ベンダエミュレーションモジュールは、イベントベースモデルであるようにみなされ、ＤＵＴモデルは、時間ベースモデルであるようにみなされる。他の実施形態では、エミュレーションモジュールとＤＵＴモデルとはともに、イベントベースモデルであっても時間ベースモデルであってもよい。
【００２６】
シミュレーションチャネル
図３Ａは、本発明の一実施形態によるシミュレーションチャネルオブジェクトを処理するシミュレーションフレームワークを示す。このシミュレーションフレームワークは、モジュールクラス３０２と、ＤＵＴクラス３０４と、シミュレーションチャネル（SimChannel）クラス３０６とを含む。SimChannelクラス３０６は、シミュレーション波形繰返し子（SimWaveformIter）クラス３０８を含み、モジュールクラス３０２は、シミュレーションチャネル識別子（SimChanID）クラス３１０を含む。
【００２７】
SimChannelクラス３０６は、パターン実行中にエミュレーションモジュール及びＤＵＴモデルに対し、それぞれモジュールクラス３０２及びＤＵＴクラス３０４を介してＩ／Ｏ機能を提供する。このクラスを使用するために、各モジュールチャネル又はＤＵＴピンに対し空チャネルオブジェクトが構成される。シミュレーション構成ファイル（後述する）の設定に基づき、これらのチャネルは、シミュレーションフレームワークによってロードボードの対応するチャネルに接続される。シミュレーションフレームワークは、ロードボード接続を行うために使用されるgetChannel()メソッドを通して、SimChannelオブジェクトに対する参照を取得する。
【００２８】
モジュールとＤＵＴモデルとの両方に対して共通の要素は、チャネルに対するＩ／Ｏコールである。モジュールとＤＵＴとの間のＩ／Ｏコールはすべて、特定の時刻に電圧レベルを設定することによって行われる。これは、SimChannelクラス３０６からset()メソッドによって提供される。このメソッドにより、呼出しルーチンは、SimChannelクラス３０６に接続された出力バッファにエントリを書くことにより、特定の時刻における電圧を指定することができる。
【００２９】
一実施形態では、set()メソッドは、電圧時間履歴に或る点を書く。波形の形状は、チャネルがいかに構成されるかによって決まる。図３Ｂは、本発明の一実施形態によるステップ波形、スルー波形及びアナログ波形を示す。ステップチャネルでは、電圧遷移は瞬間的であり、そのため、ｔ１とｔ２との間のいかなる読み値もｖ１という電圧を返す。スルーチャネルでは、その現状態から命令された状態への電圧遷移に有限の時間がかかる。遷移の勾配は、システム構成ファイルのスルー選択におけるスルーレート（slewRate）パラメータによって確定される。最後に、アナログチャネルでは、電圧は水平にならない。時点間の電圧は、区分線形補間を介して計算される。読み値が最終点を超えると、値は最後の２つの点から外挿される。このため、ｔ２に対するｓｅｔコールを超えて点が追加されない場合、破線は、チャネルから読み取られるであろう電圧を表す。
【００３０】
off()メソッドは、主に、電圧に対する駆動をオフにするために使用される。これは、２つのコンポーネントがチャネルの反対側に同時に書き込んでいる場合に発生する。一方の側がset()メソッドを呼び出す場合、その電圧は駆動されるものとみなされる。他方の側がoff()メソッドを呼び出す場合、その電圧は非駆動（passive）であるとみなされる。この場合、駆動電圧が優勢であり、両側の電圧が解決された後、いずれのチャネルから読み取られる電圧は、set()コマンドで入力された電圧である。両側がset()メソッドを呼び出すか又は両側がoff()メソッドを呼び出す場合、電圧履歴は平均電圧値に設定される。
【００３１】
end()メソッドコールは、チャネルが解決される用意ができており、その後、コンポーネントによってチャネルの反対側において読出しがなされる用意ができていることを、シミュレーションフレームワークに示す。チャネルにおいてend()メソッドが呼び出されない場合、チャネルの反対側のコンポーネントがチャネルから読み出すように通知されないため、そのチャネルの信号は、シミュレーションの残りを通して伝播しない可能性がある。通常、ユーザは、ある時間範囲にわたって電圧を指定するためにいくつかのsetコールを行い、その後、その時間範囲の最後に一度end()メソッドを呼び出す。
【００３２】
SimWaveformIterクラス３０８は、波形の遷移を特定する。ユーザは、SimChannelクラス３０８のgetWaveformIter()メソッドを呼び出すことにより波形繰返し子のインスタンスを取得する。このメソッドは、ユーザに対し、高電圧及び低電圧を指定するとともに開始点及び停止点を指定することを要求する。このデータを使用して、getWaveformIter()メソッドは、SimWaveformIterクラス３０８のインスタンスを返す。getWaveformIter()メソッドは、さらに、ユーザが波形のエッジ遷移のすべてを段階的に通るのを可能にする。各遷移に対し、getWaveformIter()メソッドは、遷移の時刻と、その遷移に続く波形の状態とを返す。この状態は、列挙型State_tとして指定される。この型のあり得る値は、Ｈ（高）、Ｌ（低）及びＺ（トライステート）である。
【００３３】
本発明の１つのインプリメンテーションにおいて、getWaveformIter()メソッドの一例を以下に示す。
voidfindHighs (SimChannel& sc,const Voltage& vhi, const Voltage& vlo,
const Time&t_start,const Time&t_end)
{
SimWaveformIter iter = sc.getWaveformIter();
for(; !iter.end();iter. next())
{
if(iter.getState() == SimWaveformIter::H)
{cout << "waveform goes high at" << iter.gettime().getValue()
<< endl;
}
}
}
【００３４】
SimWaveformIterクラス３０８は、以下のメソッドを含む。
・start()：繰返し子を第１の遷移に設定する。
・end()：end()メソッドは、繰返し子がエッジシーケンスの最後にあるか否かを検査する。なお、このメソッドが真を返す場合、getTime及びgetStateの結果は定義されない。
・next()：next()メソッドは、繰返し子を次の遷移に移動する。
・getTime()：getTime()メソッドは、現遷移に対する時刻を返す。
・getState()：getState()メソッドは、現エッジの状態を取得する。エッジは、エッジ時刻後の基礎となる波形の状態に適用される。
【００３５】
別の実施形態では、SimChannelクラス３０６は、指定された時刻にチャネルの電圧を読み出す能力を提供する。これは、read()メソッドを通して単一時刻引数を使用して行われる。read()によって返される値は、時刻対電圧情報を含むテーブルに格納されるデータから補間される。補間の方法は、シミュレーション構成ファイルで定義されるようなチャネル構成に基づく。チャネルがステップチャネルとして構成される場合、矩形波モデルが使用される。チャネルがスルーチャネルとして構成される場合、スルーモデルを使用して、有限時間にわたって発生する電圧遷移が補間される。チャネルがアナログチャネルである場合、電圧は、区分線形補間を使用して計算される。
【００３６】
さらに、ユーザは、チャネルのデータを管理することに関与する。これは、flush()メソッドを通して行われる。このメソッドは、クリーンアップ段階に対してチャネルを登録する。それは、flush引数によって指定される時刻の前に読出しが発生しない可能性があることを示す。flush()メソッドが呼び出されると、指定された時刻の前のすべての記録が、次のクリーンアップサイクル中にチャネルから除去される。flush()メソッドは、メモリ制限によってシミュレーションの完了が妨げられる可能性がある長いパターンに対して定期的に呼び出される。
【００３７】
さらに別の実施形態では、チャネルに書き込むために、出力電圧を指定する主なメソッドはset()メソッドであり、ユーザは、パラメータとして時刻と関連電圧とを指定する。このメソッドは、チャネルの時間履歴に対する入力を提供する。駆動がオフとされる場合、off()メソッドを使用してもよい。これは、信号がインタフェースの他方の側から駆動されている場合に、それがチャネルの電圧を決定することを示す。off()メソッドは、主に、駆動動作とストローブ動作との両方を実行する双方向チャネルに対して使用される。
【００３８】
ユーザは、チャネルに入力された値のセットが、インタフェースの他方の側に伝送される用意ができていることを示してもよい。これは、オーバロードされたend()メソッドを通して行われる。end()メソッドは、end()コールで指定された時刻を含む時刻まで、チャネルの値が読み出される用意ができていることをシミュレーションフレームワークに示す。なお、引数なしのend()メソッドは、set()コール又はoff()コールのいずれかにおける最大時間をデフォルトとしてとる。end()メソッドは、set()メソッドが有効となるために呼び出される。end()メソッドが呼び出されない場合、チャネルの他端にデータは転送されない。
【００３９】
一実施形態では、共通ＡＰＩクラスは以下のように使用される。
// create some channels in constructor
SimChannel MyStepChannel;
SimChannel MySlewChannel;
SimChannel MyAnalogChannel;
・・・
// channel registration
SimChannel* getChannel(const SimChanID& chan)
{
if (chan.getlndex() == MY_STEP_CHANNEL_INDEX)
{
return&MyStepChannel;
}
else if(chan.getIndex() == MY_SLEW_CHANNEL_INDEX)
{
return &MySlewChannel;
}
else if (chan.getIndex() == MY_ANALOG_CHANNEL_INDEX)
{
return &MyAnalogChannel;
}
・・・
}
// running a pattern
void handleEvent(const SimEvent& event, const Time& t)
{
if (event.isWriteEvent())
{
・・・
// set some output voltages on the step channel
MyStepChannel.set(t0, hi_level);
MyStepChannel.set(t2, lo_level);
MyStepChannel.end(t4);
// set some output voltages on the slew channel
MySlewChannel.set(t0, hi_level);
MySlewChannel.set(t2, lo_level);
MySlewChannel.end(t4);
//set some output voltages on the analog channel
MyAnalogChannel.set(tO,lo_level);
MyAnalogChannel.set(tl,hi_level);
MyAnalogChannel.set(t2,hi_level);
MyAnalogChannel.set(t3,lo_level);
MyAnalogChannel.set(t4,lo_level);
・・・
}
else if (event. isReadEvent ())
{
・・・
// now strobe the step channel
Voltage strobe_value = MyStepChannel.read(t5);
MyStepChannel.flush(t5); // done reading
・・・
}
・・・
}
【００４０】
なお、アナログ信号の場合、波形のすべての角を指定する必要はなく、ステップ波形及びスルー波形では、遷移のみを指定すればよい、ということに留意されたい。
【００４１】
getWaveformIter()メソッドにより、呼出し側は、ウィンドウストローブから得られる状態を返すことができる。それは、引数として、高入力電圧、低入力電圧及び時間窓をとり、電圧が交差する時刻を含むオブジェクトを返す。
【００４２】
SimChanIDクラス３１０は、チャネルインデックスをカプセル化する。試験システムには２つのセットのチャネルインデックスがあり、１つはテスタチャネル空間のためであり、他方はＤＵＴチャネル空間のためである。SimChanIDクラスは、いずれかの空間におけるインデックスを記述する２０ビットワードをカプセル化する。最上位ビットは、チャネルインデックスがテスタチャネル空間のためであるかＤＵＴチャネル空間のためであるかを示す。次のビットは、すべてのチャネルが使用されているか否かを示すフラグである。次の７ビットは、テスタモジュール又はＤＵＴそれぞれに対するポートインデックス又はＤＵＴインデックスである。最下位１２ビットは、ローカルインデックス値（４Ｋチャネル）に対して使用される。
【００４３】
SimChanIDクラス３１０は、以下のメソッドを含む。
・SimChanID()：SimChanID()メソッドは、チャネルビットがすべて設定される場合に真を返す。
・getIndex()：getIndex()メソッドは、ローカルチャネル空間におけるインデックスを返す。isTestChannelメソッド及びisDUTChannelメソッドは、インデックスがそれぞれテスタ空間のためかＤＵＴ空間のためかを示す。all()メソッドが真を返す場合、このメソッドの結果は定義されない。
・getPort()：getPort()メソッドは、所与のチャネルＩＤに対するポートを返す。ポート及びインデックスの組合せは、ロードボードの一方の側におけるすべてのチャネルを一意に識別する。
・isDUTChannel()：isDUTChannel()メソッドは、チャネルがＤＵＴチャネル空間にある場合に真を返す。
・isTesterChannel()：isTesterChannel()メソッドは、チャネルがテスタチャネル空間にある場合に真を返す。
【００４４】
シミュレーションコンポーネント
図４は、本発明の一実施形態によるシミュレーションコンポーネントを処理するシミュレーションフレームワークを示す。このシミュレーションフレームワークは、シミュレーションコンポーネント基底（SimComponentBase）クラス４０１を含む。SimComponentクラス４０２及びSimComponentSteppedクラス４０６は、SimComponentBaseクラスから導出される。ベンダエミュレーションモジュール（Module）クラス４０４は、SimComponentクラスから導出される。SimComponentクラス４０２内で仮想関数が展開されることにより、モジュールの挙動が定義される。同様に、ＤＵＴクラス４０８は、SimComponentSteppedクラス４０６から導出される。SimComponentBase４０１は、SimComponent４０２とSimComponentStepped４０６クラスとの両方によって共有されるメソッドを含む共通基底クラスである。
【００４５】
Moduleクラス４０４は、シミュレーションイベントオブジェクトを処理するためのhandleEvent()メソッドを呼び出す。handleEvent()メソッドは、registerEvent()及びSimComponentクラスのraiseEvent()によって提供されるいくつかのサービスとともに使用される。registerEvent()メソッドにより、モジュールは、シミュレーションフレームワークにイベントを登録することができる。イベントを、単一チャネル、チャネルのグループ又はモジュール全体に関連付けることができる。また、イベントを特定の時刻とともに登録することも可能であり、その場合、呼出し側は、読出しイベント又は書込みイベントとしてイベントを識別する。イベントが書込みイベントである場合、シミュレーションが登録時刻に達するとすぐに、モジュールのhandleEvent()コールバックが呼び出される。イベントが読出しイベントである場合、handleEvent()コールバックは、イベントが関連するチャネルのすべてが解決され読み出される用意ができた後にのみ呼び出される。
【００４６】
関連する時刻を有するイベント（すなわち同期イベント）に応じてhandleEvent()コールがなされる場合、モジュールは、以下のように、シミュレーションが適正に機能するためにシミュレーションフレームワークで定義されるような、ＡＰＩによって示される規則に従う必要がある。
・書込みイベントの場合、モジュールは、書込みイベントの時刻の後にしか電圧値を設定することができない。
・読出しイベントの場合、モジュールは、読出しイベントの時刻の前にしか電圧値を読み出すことができない。
【００４７】
イベントを、時刻なしに登録することも可能である（すなわち、非同期イベント）。これらのイベントは、他のモジュールによって開始されるか又はシミュレーションフレームワークによって開始される。これらのイベントは、２つの関数をサポートする。第１の関数は、割込み等、システムのいくつかの既知のイベントを処理するためのものである。第２の関数は、モジュール間通信を処理するためのものである。非同期イベントにより、１つのモジュールが別のモジュールに対し、或る１組の状態が発生したことを通知することができる。一例は、サイクルの開始時にデジタルピンモジュールに通知する同期モジュールであり、それによりデジタルピンモジュールは、現サイクルに関連するエッジを出力する。
【００４８】
ベンダのモジュールがフレームワークにロードされるために、ベンダは、エミュレーションモジュールモデルを維持するオブジェクトの生成及び破壊をサポートする、そのＤＬＬからのいくつかの事前定義された関数をエクスポートすることが好ましい。この標準化インタフェースは、各モデルをロードする詳細を隠す。
【００４９】
シミュレーションモデルは、シミュレーションフレームワークにアクセス可能となるSimComponentクラスから導出される。モデルを定義するために、ユーザは、SimComponentクラスで指定される仮想関数をインプリメントする。モジュールの仮想関数は、以下の２つのカテゴリに入る。
・導出されたクラスが提供する必要のある仮想メソッド、及び
・ユーザが再定義することができるデフォルトインプリメンテーションを有する基底関数。
これらの関数以外に、このクラスはまた、イベント管理のために導出されたクラスに対しサービスを提供する。
【００５０】
ＤＵＴモデルは、シミュレーションフレームワークのSimComponentSteppedクラス４０６から導出することによってインプリメントされる。開発者は、モジュールの挙動を定義するためにSimComponentSteppedクラス４０６において仮想関数をインプリメントする。たとえば、run()メソッドは、指定された時間窓にわたって実行するためにＤＵＴモデルを呼び出す。インタフェースが簡単であるために、モデル設計者には、ＤＵＴをいかにモデル化することができるかにおいて高い自由度が与えられる。この自由度は、Ｖｅｒｉｌｏｇモデルを実行しているサーバに接続するＣ／Ｃ＋＋モデル又はＤＬＬのための共通インタフェースによってサポートされる。ＤＵＴモデルをいかにインプリメントするかの詳細は、シミュレーションの残りの部分から隔離されており、そのためかかるモデルを交換可能に使用することができる。シミュレーションフレームワークにＤＵＴモデルを提供するために、SimComponentSteppedクラスは、以下の仮想メソッドを含む。
・run()：ユーザは、指定された時間窓を通してＤＵＴモデルを実行する。最後のrun()コールが終了した所で連続するrun()コールが開始してもよい。
・handleISVM()：このメソッドは、指定されたチャネルに対しパラメータ測定ユニット（ＰＭＵ）から測定値を返す。なお、ＰＭＵは、試験が休止状態、すなわち試験の合間にある間にチャネルにおいて静的なＤＣ測定を行うために使用されることに留意する。
・handleVSIM()：このメソッドは、指定されたチャネルに対するＰＭＵ測定値を返す。
・handleVSVM ()：このメソッドは、指定されたチャネルに対するＰＭＵ測定値を返す。
【００５１】
シミュレーションフレームワークにＤＵＴモデルをロードするため、ＤＬＬは、ＤＵＴモデルを維持するオブジェクトの生成及び破壊をサポートする事前定義された関数のセットをエクスポートする。この標準化されたインタフェースは、各モデルをロードする詳細を隠す。
【００５２】
シミュレーションイベントマネージャ
図５は、本発明の一実施形態によるシミュレーションイベントオブジェクトを処理するシミュレーションフレームワークを示す。シミュレーションフレームワークは、モジュールクラス５０２、シミュレーションイベントマネージャ（SimEventMgr）クラス５０４及びシミュレーションイベント（SimEvent）クラス５０６を含む。
【００５３】
SimEventMgrクラス５０４は、SimEventクラス５０６のインスタンスを生成する。SimEventMgrクラス５０４は、ベンダインデックスを維持するために使用される。このインデックスは、イベントのファミリを一意に識別する。通常、イベントのファミリはベンダに関連し、ベンダは関連するベンダＩＤストリングを有する。このクラスにより、ユーザは、モジュールの２つ以上のグループが別々のイベント空間でイベントを共有することができるようにイベントの別のファミリを生成することができる。
【００５４】
一実施形態では、特定のベンダインデックスに対しSimEventMgrオブジェクトを生成するために、以下のコンストラクタが使用される。
SimEventMgr(const OFCString&, SimChanID::Channel Space_t)
【００５５】
ストリング引数は、イベントファミリを指定する。チャネル空間タイプは、イベントのチャネルがテスタチャネル（SimChanID::TESTER_SPACE）であるか又はＤＵＴチャネル（SimChanID::DUT_SPACE）であるかを示す。たとえば、ユーザが「ADVANTEST」テスタモジュールに対しイベントを生成したい場合、以下のメソッドが呼び出される。
SimEventMgr emgr(_T("ADVANTEST"), SimChanID::TESTER_SPACE)
【００５６】
モジュール開発者は、モジュールが属する各ドメインに対しSimEventMgrのインスタンスを生成する。これらのオブジェクトは、モジュールが存在する時間にわたって使用される。たとえば、さまざまなドメインに対してイベントを生成するために、以下のコールのセットがなされる。
SimEventMgr m_advmgr(_T("ADVANTEST"), SimChanID::TESTER_SPACE)
SimEventMgr m_msomgr(_T("MSO_CONSORTIUM"),
SimChanID::TESTER_SPACE)
SimEventMgr m_pwrmgr(_T("POWER_GROUP"), SimChanID::TESTER_SPACE)
【００５７】
シミュレーションの過程において、これらのオブジェクトの各々は、ドメインの各々に対するイベントを生成してもよい。このように、異なるベンダによって生成されるモジュールが、それらの共有ドメインに対して一意の名称について合意することによりイベントを共有することができる。ＤＵＴモデルがイベントを登録する必要のある場合、clientmgr()メソッドが使用される。なお、２つのチャネルが異なるインデックス空間に属するため、ＤＵＴ空間とテスタ空間との間に区別があることに留意する。
SimEventMgr clientmgr("CLIENT"), SimChanID::OUT_SPACE)
【００５８】
イベントを生成するためにさまざまなメソッドが使用される。同期イベントを生成するためのメソッドには以下が含まれる。
・SimEvent makeReadEvent（SimEvent::LocalCode_t）：このメソッドは、モジュールのすべてのチャネルに対して読出しイベントを生成する。
・SimEvent makeReadEvent（SimChanID::Index_t, SimEvent::LocalCode_t）：このメソッドは、単一チャネルに対して読出しイベントを生成する。
・SimEvent makeReadDomainEvent（SimEvent::Domain_t, SimEvent::LocalCode_t）：このメソッドは、特定のドメインに対する非同期イベントを生成する。
・SimEvent makeWriteEvent（SimEventID::Index_t, SimEvent::LocalCode_t）：このメソッドは、モジュールすべてのチャネルに対する書込みイベントを生成する。
・SimEvent makeWriteDomainEvent（SimEvent::Domain_t,SimEvent::LocalCode_t）：このメソッドは、単一チャネルに対する書込みイベントを生成する。
【００５９】
チャネルインデックスをパラメータとしてとらない関数は、すべてのチャネルに対しイベントを生成する。ユーザ指定チャネルインデックス及びローカルコードをパラメータとしてとる関数は、特定のチャネルに対しSimEventsを生成する。特定のドメインに結び付けられたチャネルのグループに対し、引数としてドメインをとる関数が使用される。
【００６０】
非同期イベントを生成するメソッドには、以下が含まれる。
・makeAsyncEvent()：このメソッドは、非同期通し番号ベースイベントを生成するために使用される。
・makeDomainEvent()：このメソッドは、特定のチャネルに対し非同期ドメインベースイベントを生成するために使用される。
・makeSysEvent()：このメソッドは、システムイベントを生成するために使用される。
・isMyEvent()：このメソッドは、イベントのドメインを検査する。これは、所与のイベントがイベントマネージャと同じドメインに属する場合に真を返す。
【００６１】
一実施形態では、上記コンストラクタ例で３つのイベントマネージャを生成するモジュール開発者が、イベントがいずれのドメインに属するかを判断することを必要とする場合、以下の手法を使用してもよい。
if (m_advmgr.isMyEvent(event))
{
// an ADVANTEST event
}
else if (m_msomgr.isMyEvent)(event))
{
// an MSO event
}
else if (m_pwrmgr.isMyEvent)(event))
{
// a power event
}
【００６２】
SimEventクラス５０６は、以下のメソッドを含む。
・isChannelEvent()：このメソッドは、イベントが単一チャネルに対するものであるか否かを検査する。このメソッドは、イベントがチャネルベースイベントである場合に真を返す。
・isDomainEvent()：このメソッドは、イベントがドメインに対するものであるか否かをチェックする。このメソッドは、イベントがドメインベースイベントである場合に真を返す。
・isReadEvent()：このメソッドは、オブジェクトが読出しイベントであるか否かをチェックする。このメソッドは、イベントが読出しイベントである場合に真を返す。
・isSerialNumberEvent()：このメソッドは、イベントが特定の通し番号に対するものであるか否かをチェックする。このメソッドは、イベントが特定の通し番号に対するものである場合に真を返す。
・isSysEvent()：このメソッドは、オブジェクトがシステムイベントであるか否かを検査する。このメソッドは、イベントがシステムイベントである場合に真を返す。
・isWriteEvent()：このメソッドは、オブジェクトが書込みイベントであるか否かをチェックする。このメソッドは、イベントが書込みイベントである場合に真を返す。
・getChan()：このメソッドは、SimChanIDオブジェクトを取得する。
・getCode()：このメソッドは、ローカルユーザコードを取得する。
・getDomain()：このメソッドは、イベントのドメインインデックスを返すドメインを取得する。
・getSerialNumber()：このメソッドは、通し番号を取得する。
・getSysCode()：このメソッドは、システムイベントコードを取得する。
・numArgs()：このメソッドは、ユーザ引数の数を返す。
・popArg()：このメソッドは、待ち行列にある次のユーザ引数にアクセスする。なお、引数は、追加される順序と同じ順序で取り出されることに留意する。引数は、取り出されると、イベントから利用できなくなる。popArgをnumArgs()より多く呼び出すことにより、例外が投げられることになる。
・pushArg()：このメソッドは、ユーザ引数を追加する。
【００６３】
構成ファイル
シミュレーションフレームワークは、２つの構成ファイル、すなわちシミュレーション構成ファイル及びオフライン構成ファイルを使用する。シミュレーション構成ファイルは、シミュレーション中に利用可能なテスタモジュールを指定する。オフライン構成ファイルは、ロードされるＤＵＴモデルと、それらがテスタに接続される方法とを指定する。
【００６４】
シミュレーション構成ファイルは、関数SimTesterが最初に起動される時にロードされる。このファイルの設定は、SimTesterプロセスが生きている間に有効であり続ける。オフライン構成ファイルは、ユーザのテストプランの一部としてロードされる。ファイルの名前は、テストプログラム言語（ＴＰＬ）コマンドOfflineDefを用いて指定される。このコマンドは、ユーザのテストプログラムの任意の場所で現れることができるが、従来、他の高水準コマンドとともにtesplan.tplファイルに配置される。
【００６５】
一実施形態において、以下、サンプルシミュレーション構成ファイルを示す。以下に示すように、ファイルは階層ブロックに分割される。Globalブロックは、システム全体のパラメータを含む。EMUModuleブロックは、エミュレータモデルを含むＤＬＬを指名し、モデルがロードされるポートを指定する。EMUModuleブロックは、シミュレーションフレームワークのためのモジュールインタフェースを含む。
# T2000 System Software version of the configuration 
Version0.0.1;
Global
{
InitVoltage 0.5 V;     # Required. Initial voltage on all 
# wires.
RecoveryRate 2.5 V/nS; # Optional. For drive conflict in
# analog signals.
}
# Module Emulator.
EMUModule "module1" # Module DLL.
{
Waveform    # Optional. Resource declaration.
{
Step 1-32, 35; # Step type waveforms on channels 1 thru 32
# channel 35.
Analog 33,34;  # Analog waveform on channels 33 and 34.
}
Port 1           # Declares the GBUS Port for this module.
{
SerialNumber 1;    # Required.  Should match setting in Module
# Configuration File.
ProductRevision 1; # Required.  Should match setting in Module
# Configuration File.
Params             # To be passed to DLL.
{
test  "paraml";
key   "abc";
}
}
Port 8
{
LogicalPort 3;    # Optional.  Designate Logical Port to use in
# offline configuration file.  Default is the
# GBUS port.
SerialNumber 2;
ProductRevision 1;
Params            # To be passed to DLL.
{
test  "paraml";
key   "abc";
}
}
}
# Module Emulator
EMUModule "module2"
{
Waveform 
{
Step 1-32;
}
Port 2
{
SerialNumber 1;
ProductRevision 1;
}
}
# Module Emulator
EMUModule "dps"
{
Waveform
{
Slew 1-32 @ 2.0 V/ nS;  # The slew rate is required for all slewing
# waveforms.
}
Port 4
{
SerialNumber 1;
ProductRevision 1;
}
}
【００６６】
ユーザは、シミュレーションで使用されるＤＵＴモデルを指定し、これらのモデルがいかにテスタリソースに結合されるかを示す。一実施形態において、以下に、サンプルオフライン構成ファイルを示す。なお、PinConnectionsブロックを除き、このファイルは、シミュレーション構成ファイルと同様の構造を有する。Globalブロックは、システム全体の設定を記述する。DUTModelブロックは、ＤＵＴモデルを含むＤＬＬを記述し、ＤＵＴモデルをロードするためのポートを指定する。PinConnectionsブロックは、各ピンがいかにテスタに接続されるかを示す。
# T2000 Version of the syntax
Version 0.0.1;
Global
{
Regselect "PatTraceSel"; # Pattern Tracing - Name of OASIS Simulated
# Register Selection File.
}
DUTModel"DUT1Sim"
{
Waveform
{
Step 1-32;
}
DUT 1 
{
Params
{
param1Name  "param1Value";
param2Name  "param2Value";
}
PinConnections
{
L3.1 1 1.0nS;
L3.2 8 1.0nS;
L3.3 2 1.0nS;
L3.4 7 1.0nS;
L3.5 3 1.0nS;
L3.6 6 1.0nS;
L3.7 4 1.0nS;
L3.8 5 1.0nS;
L3.9 9 1.0nS;
L3.10 16 1.0nS;
L3.11 10 1.0nS;
L3.12 15 1.0nS;
L3.13 11 1.0nS;
L3.14 14 1.0nS;
L3.15 12 1.0nS;
L3.16 13 1.0nS;
}
}
}
DUTModel "DUT2Sim"
{  
Waveform
{
Slew 1-16 @ 2.0 V/nS;
}
DUT 2
{
Params
{
param1Name    "param1Value";
param2Name    "param2Value";
}
PinConnections
{
L2.1    1;    #no delay specified means a delay of 0
L2.2    2;
L2.3    3;
L2.4    4;
L2.12   5;
L2.13   6;
L2.14   7;
L2.15   8;
}
}
}
【００６７】
フレームワーク構成
上述したように、モジュールベンダは、自身のハードウェアモジュールのエミュレーションを提供するように要求される。この要件のために、ベンダモジュールを獲得するユーザはまた、そのコンポーネントのエミュレーションモジュールも獲得する。エミュレーションモジュールは、モジュールをシミュレーションフレームワークによってロード可能にするインタフェースを有するＤＬＬの形式でもたらされる。これは、ベンダのＤＬＬに配置された１組の事前定義されたインタフェース要件を通して指定される。エミュレーションモジュールをシミュレーションフレームワークにロードするために、シミュレーション構成ファイルは、ユーザによって提供されるか又はテストシステムによって生成される。シミュレーション構成ファイルは、ロードされる各ＤＬＬを列挙する。ＤＬＬを指名することに加えて、シミュレーション構成ファイルは、シミュレートされるテストシステムのハードウェア設定に一貫するパラメータを指定する。これには、モジュールポート番号、モジュール通し番号、チャネルの数、各チャネルにおける波形のフォーマット、及びシミュレーションを通して使用される基準電圧等が含まれる。シミュレーション構成ファイルは、シミュレーションの産物である他のパラメータを含む。これらには、チャネルをモジュールからＤＵＴピンに接続するために使用される論理基準と、モジュールがロードされる時にＤＬＬに渡される特定のパラメータとが含まれる。
【００６８】
一実施形態では、シミュレーションマネージャは、シミュレーションを構成するために以下の機能を実行する。
・シミュレーション構成ファイルによって指示されるすべてのコンポーネントをロードする
・コンポーネント及びリソースをさまざまなサイト間で分割する
・すべてのスレッドにおいてパターン実行を管理する中心オブジェクトを提供する。
【００６９】
さらに、シミュレーションマネージャは、構成ファイルを使用して以下の機能を実行する。
・すべてのコンポーネント及びインタフェースオブジェクトをインスタンス化する
・構成ファイルによって指定されるようにすべてのコンポーネントを接続する
・コンポーネントチャネルからインタフェースオブジェクトへのマッピングを提供する。
【００７０】
なお、SimMgrのインスタンスが１つしかないことを保証するために、SimMgrを生成することができるパブリックメソッドがcreate()メソッドのみであることに留意する。シミュレーション後にリソースをクリーンアップするために、matching release()メソッドが使用される。create()メソッドは、引数リストで指定されるシミュレーション構成ファイルに基づいてシミュレーションを生成する。パス引数を使用して、シミュレーション構成ファイル内で参照される他のテキストファイルに対し基底パスが指定される。これらのファイルは、基底パスに対するパスとして指定される。
【００７１】
シミュレーションフレームワークは、構成されると、テストプログラム及びターゲットＤＵＴモデルが指定されるのを待つ。テストプログラムをロードする前に、ＴＯＳは、１つ又は複数のＤＵＴモデルが指定されたことをシミュレーションフレームワークに通知する。これは、オフライン構成ファイルと呼ばれる別の構成ファイルを通して行われる。ＤＵＴモデルは、１組の事前定義されたインタフェース要件を満足するＣ／Ｃ＋＋で書かれたエンドユーザ提供ＤＬＬの形態で、又はシミュレーションからの接続を待つサーバで実行しているＶｅｒｉｌｏｇモデルとしてもたらされる。オフライン構成ファイルは、ロードする１つ又は複数のＤＵＴモデルＤＬＬを指定する。さらに、ファイルは、ＤＵＴのハードウェア設定に一貫するパラメータを指定する。これには、チャネル及び波形のフォーマットと、論理テスタチャネルのＤＵＴピンへの配線と、その配線に関連する移送遅延とが含まれる。オフライン構成ファイルはまた、シミュレーションの産物である他のパラメータも含む。これらには、ＤＵＴモデルをロードする場合にＤＬＬに渡された特定のパラメータが含まれる。Ｖｅｒｉｌｏｇ  ＤＵＴモデルにアクセスするために、フレームワークは、特別なＤＵＴモデルＤＬＬを提供する。このモデルを、特定のＶｅｒｉｌｏｇモデルを実行しているプログラムが実行している特定のサーバに接続するように構成することができる。
【００７２】
フレームワーク初期化
一実施形態では、シミュレーションフレームワークの初期化には以下の手続きが含まれる。
１．シミュレーション構成ファイルに基づいてモジュールＤＬＬをロードしモジュールエミュレーションオブジェクトをメモリにおいてインスタンス化する
２．オフライン構成ファイル（ロードされるＤＵＴモデルとそれらがモジュールに接続される方法とを記述する）がユーザによって提供されるのを待つ
３．両構成ファイルを使用して以下のようにシミュレーションを構築する
ａ．バスエミュレーションを介してシステムにプログラムされるサイト情報を使用して、モジュール及びＤＵＴをさまざまなサイトに割り当てる
ｂ．モジュールを、特定のサイトに専用のシミュレーションフレームワークにおけるロードボードモデルに接続する
ｃ．各サイトのＤＵＴモデルをロードボードモデルの対応するサイトに接続する
４．テストプランがアンロードされる場合、ステップ３で生成された構造をアンロードし別のオフライン構成ファイルを待つ。
【００７３】
フレームワークは、マルチスレッドシミュレーションを容易にするためにシミュレーションをサイト単位に分割する。サイトを並列にシミュレートすることができる。その結果、事前定義されたシミュレーションサイトに従ってシミュレーションを分割することにより、それらが互いに対してスレッドセーフとなり、性能に影響を与える可能性のあるいかなるロッキングメカニズムも不要となる。
【００７４】
構成データをロードする際、シミュレーションフレームワークは、ロードボードを介してシミュレーションフレームワークにおけるオブジェクトへのモジュールの各チャネルに対する接続を構成することにより、シミュレーションの構築を開始する。図６は、本発明の一実施形態によるエミュレーションモジュールとロードボードモデルとの間のチャネルを示す。チャネルは、エミュレーションモジュール６０２、双方向インタフェースモデル６０４及びロードボードモデル６０６を含む。エミュレーションモジュール６０２は、Ｉ／ＯポートSimChannelＡ６０３を含み、同様に、ロードボードモデルは、Ｉ／ＯポートSimChannel B６０７を含む。双方向インタフェース６０４内には、２つのバッファ、すなわち、エミュレーションモジュール６０２からロードボードモデル６０６にデータを転送するためのSimWaveform A2Bバッファ６０８と、ロードボードモデル６０６からエミュレーションモジュール６０２にデータを転送るするためのSimWaveform B2Aバッファ６１０とがある。図６に示すように、エミュレーションモジュール６０２は、SimWaveform A2Bバッファ６０８に書込みを行い、SimWaveform B2Aバッファ６１０から読出しを行う。一方、ロードボードモデル６０６は、SimWaveform B2Aバッファ６１０に書込みを行い、SimWaveform A2Bバッファ６０８から読出しを行う。
【００７５】
SimWaveform A2B及びSimWaveform B2Aバッファは各々、チャネルに関する情報を格納するテーブルを含む。特に、バッファは、任意の時点でチャネルオブジェクトから読み出される電圧を格納する。テーブルエントリの時刻の間に読み出されるチャネルの電圧値は、上記図３Ｂに記載されているいくつかの標準モデルのうちの１つを使用して補間される。特定のチャネルで使用するモデルの選択は、ユーザが構成可能である。モデルの切替えは、SimWaveformを他の波形クラスに対する基底クラスにすることによって行われる。SimWaveformは、所与の時刻の電圧を返す仮想関数read()を有する。各導出クラスは、モデル化されている波形（たとえば、SimWaveformStepは矩形波をモデル化する）に従ってread()をインプリメントする。類似する技法を使用して、ウィンドウストローブがモデル化される。
【００７６】
図６に示すように、ロードボードにＤＵＴモデル６１２が結合される。この接続は、シミュレーションフレームワークのSimWireクラスのインスタンスを使用してなされる。SimWireクラスは、双方向インタフェースオブジェクトにおけるバッファにアクセスすることができる。SimWireクラスは、ＤＵＴとモジュールとの間の駆動競合を解決する。なお、図６におけるロードボード６０６とＤＵＴモデル６１２との間の接続は、エミュレーションモジュール６０２とロードボード６０６との間の接続の鏡像である。この接続の詳細は、モジュールとロードボードとの間の接続の詳細をより明確に示すことができるように、図から省かれている。
【００７７】
シミュレーションが構成された後、テストプログラムがロードされる。これには、システムバスデバイスドライバへのコールを行うことが含まれる。オフラインモードでは、ハードウェアへのデバイスドライバアクセスは、共有メモリＩ／Ｏに向けられ、それによりサイトコントローラプロセスがシミュレーションフレームワークプロセスと通信することができる。２つのシミュレーションセットアップの異なるコンポーネントはデバイスドライバにしかないため、オンライン試験シミュレーションの挙動とオフライン試験シミュレーションの挙動とには高い相関性がある。
【００７８】
フレームワーク実行
テストプラン実行中に実行するシミュレーションには２つのタイプがある。第１のタイプは、イベントベースシミュレーションである。シミュレートされているコンポーネントは、通常、エミュレーションモジュールである。これらのコンポーネントは、シミュレーションが開始する前にそれらの挙動はテストプログラムによって指定されるため、本質的にイベントベースである。シミュレーションの他方のタイプは時間ベースシミュレーションである。シミュレートされているコンポーネントは、通常、ＤＵＴモデルである。これらのコンポーネントは、それらの状態が外部刺激及び現内部状態に基づいて順方向に伝播されるため、本質的に時間ベースである。シミュレーションフレームワークは、イベントベースシミュレーションと時間ベースシミュレーションとの間の実行及びデータ転送を調整する。
【００７９】
イベントベースシミュレーションは、登録及び処理プロセスを使用する。通常、エミュレーションモジュールであるシミュレーションコンポーネントは、各シミュレーションイベントに対して登録される必要がある。登録後、テストイベントの条件が発生すると、コンポーネントのイベントハンドラコールバックが呼び出され、それにより適当なシミュレーション手続きを実行することができる。
【００８０】
時間ベースシミュレーションは、イベントベースのコンポーネントの出力に依存する。シミュレーションフレームワークは、時間ベースのコンポーネントに供給するすべてのチャネルに対しイベントベースコンポーネントによって生成される刺激を取り込む時間窓を計算する。そして、計算された時間窓を用いて時間ベースコンポーネントが呼び出される。イベントベースコンポーネントから時間ベースコンポーネントに送出されるデータは、安定している必要がある。この安定性基準は、イベントベースコンポーネントに対し、それらの出力チャネルに書き込んでいる時に１組の所定タイミング要件を満足させることにより、実施される。
【００８１】
シミュレーションフレームワークは、エミュレーションモジュールとＤＵＴモデルとの間の駆動競合の自動解決法を提供する。駆動競合は、通常、テストプログラムにおけるタイミングエラーによってもたらされる。これらのエラーを実際のハードウェアで発生する前に特定することは、そうすることでＤＵＴと試験装置との両方に対する損害を回避することができるため非常に重要である。ロードボードモデルにおけるSimWireオブジェクトが、駆動競合を解決する。SimWireの両側のコンポーネントがそれらの入力を受け取った後、シミュレーションフレームワークは、SimWireオブジェクトを呼び出すことにより、両側からの信号を解決する。１つのチャネルのみが駆動入力を有する場合、それは、適当な移送遅延が適用されて他方のチャネルにコピーされる。SimWireオブジェクトに対する複数の側が駆動入力を受け取った場合、出力バッファの電圧はこの競合を反映するように設定される。出力バッファが設定されると、それらから読み出すように登録されたモジュールが呼び出される。その後、解決された電圧データにアクセスされる。電圧解決はSimWireオブジェクトにカプセル化されるため、このプロセスは、シミュレーションの残りの部分に対して透過的である。
【００８２】
モジュール式試験システムをシミュレートする開示された方法によって達成される複数の利益がある。第１に、テストプログラムの正確かつ詳細なシミュレーションを提供することにより、開示された方法によって技術者が、高価なテスタ装置とは対照的に彼ら自身のワークステーションでテストプログラムを開発することができる。第２に、開示された方法は、テストプログラム、エミュレーションモジュール及びＤＵＴモデルにおける問題を、それらが試験装置で実行される前に特定し、それにより各問題を早期に解決することができる。第３に、開示された方法は、テストプログラム開発サイクルの短縮、及びＤＵＴが市場へ出るのを早めることを可能にする並列開発モデルをサポートする。
【００８３】
関連技術分野の熟練者（当業者）は、依然として同じ基本の根本的なメカニズム及び方法を採用しながら、開示された実施形態の多くのあり得る変更及び組合せを使用してもよい、ということを理解するであろう。上述した記述は、説明の目的のために、特定の実施形態を参照して述べたものである。しかしながら、上記例示的な論考は、網羅的であるように、又は本発明を開示した正確な形態に限定するようにも意図されていない。上記教示に鑑みて、多くの変更及び変形が可能である。本発明の原理とその実際的な適用とを説明するように、且つ当業者が、企図された特定の使用に適するよう、本発明及びさまざまな実施形態をさまざまな変更態様で最もよく利用することができるように、実施形態を選択し述べた。
【図面の簡単な説明】
【００８４】
【図１Ａ】本発明の一実施形態によるオープンアーキテクチャ試験システムを示す図である。
【図１Ｂ】本発明の一実施形態によるシミュレーションシステムの概観を示す図である。
【図２】モジュール式試験システムをシミュレートするシミュレーションフレームワークを示す図である。
【図３Ａ】本発明の一実施形態によるシミュレーションチャネルオブジェクトを処理するシミュレーションフレームワークを示す図である。
【図３Ｂ】本発明の一実施形態によるステップ波形、スルー波形及びアナログ波形を示す図である。
【図４】本発明の一実施形態によるシミュレーションコンポーネントを処理するシミュレーションフレームワークを示す図である。
【図５】本発明の一実施形態によるシミュレーションイベントオブジェクトを処理するシミュレーションフレームワークを示す図である。
【図６】本発明の一実施形態によるエミュレーションモジュールとロードボードモデルとの間のチャネルを示す図である。
【図１Ａ】
2008519247.tif 000003
【図１Ｂ】
2008519247.tif 000004
【図２】
2008519247.tif 000005
【図３Ａ】
2008519247.tif 000006
【図３Ｂ】
2008519247.tif 000007
【図４】
2008519247.tif 000008
【図５】
2008519247.tif 000009
【図６】
2008519247.tif 000010
【国際調査報告】
2008519247.tif 000011
2008519247.tif 000012
2008519247.tif 000013