(57)【要約】      （修正有）【課題】試験装置がオープンアーキテクチャにより実現され、様々なベンダによって開発されたモジュールを混載して使用する試験装置を適切にエミュレートすることができるエミュレート装置を提供する。【解決手段】試験信号を被試験デバイスにそれぞれ供給する交換可能な複数の試験モジュールを備える試験装置をエミュレートし、被試験デバイスや試験モジュール等の実物を用いることなく試験環境を検証する。試験エミュレート装置１９０は、システム制御装置に格納された試験制御プログラム、試験プログラム及び試験データに基いて試験装置をエミュレートし、ＤＵＴのシミュレーションモデル２００を用いてＤＵＴの試験を擬似的に行う。【選択図】図２
2005285092.tif 000002
【特許請求の範囲】
【請求項１】
試験信号を被試験デバイスにそれぞれ供給する複数の試験モジュールを備える試験装置をエミュレートする試験エミュレート装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、試験エミュレート装置に関する。特に本発明は、被試験デバイスに試験信号をそれぞれ供給する、交換可能な複数の試験モジュールを備える試験装置をエミュレートし、被試験デバイスや試験モジュール等の実物を用いることなく試験環境を検証することができる試験エミュレート装置に関する。
【背景技術】
【０００２】
従来、被試験デバイスや試験装置等の実物を用いることなく試験環境を検証する手段として、特許文献１から５に示す技術が開示されている。
特許文献１は、半導体試験装置の各ハードウェアユニットの機能をエミュレートする各エミュレータユニットと、ＤＵＴの機能をエミュレートするデバイスエミュレータと、テストプログラムに基づいて、各エミュレータユニットからテストプログラムの実行に必要なデータを収集する手段と、収集したデータに基づきデバイスエミュレータに試験信号を発生し、デバイスエミュレータからの結果信号を比較して結果を格納するデバイステストエミュレータとを備えるエミュレータを開示する。
特許文献２は、ＤＵＴの内部抵抗に依存して変化する電圧値、電流値を的確にシミュレートする半導体シミュレート装置を開示する。
【０００３】
特許文献３は、半導体試験装置の動作をエミュレートするテスタエミュレート手段と、ハードウェア記述言語に基づきＤＵＴをシミュレートするハードウェア記述言語シミュレート手段と、ＤＵＴのシミュレート結果に基づいて半導体試験用プログラムのデバッグを行なうデバッグ手段とを備える半導体試験用プログラムデバッグ装置を開示する。
特許文献４は、半導体試験装置の動作をエミュレートする際に、各ピンに対応した波形データを高速に作成することができる半導体試験用プログラムデバッグ装置を開示する。
特許文献５は、アナログ出力端子を備える半導体デバイス用に作成された半導体試験用プログラムの検証を行なうことができる半導体試験用プログラムデバッグ装置を開示する。
【特許文献１】特開平１０−３２０２２９号公報
【特許文献２】特開２０００−２６７８８１号公報
【特許文献３】特開２００１−５１０２５号公報
【特許文献４】特開２００１−１３４４５７号公報
【特許文献５】特開２００２−３３３４６９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上記に示した試験装置のエミュレート装置は、主として試験装置ベンダによって独自に開発されたアーキテクチャによる試験装置を前提とする。一方、将来の試験装置においては、試験装置がオープンアーキテクチャにより実現され、様々なベンダによって開発されたモジュールを組み合わせて試験装置を構成する方式が期待されており、様々なモジュールを混載して使用する試験装置を適切にエミュレートすることができるエミュレート装置を提供することが望ましい。
【０００５】
そこで本発明は、上記の課題を解決することのできる試験エミュレート装置を提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
【課題を解決するための手段】
【０００６】
このような目的を達成するために、本発明の第１の形態によると、試験信号を被試験デバイスにそれぞれ供給する複数の試験モジュールを備える試験装置をエミュレートする試験エミュレート装置であって、異なるサイクル周期に基づく試験信号を生成する前記複数の試験モジュールをエミュレートする複数の試験モジュールエミュレート部と、前記被試験デバイスの試験を制御する制御装置をエミュレートする制御エミュレート部と、前記制御エミュレート部からの指示に基づき、前記複数の試験モジュールエミュレート部のそれぞれが、当該試験モジュールエミュレート部のサイクル時間に対応する試験信号を擬似的に生成すべき試験信号生成タイミングを生成する同期エミュレート部と、前記同期エミュレート部が生成した複数の前記試験信号生成タイミングを、時刻順に整列して順次出力するタイミング整列部と、前記タイミング整列部が出力した一の前記試験信号生成タイミングに対応する前記試験モジュールエミュレート部に、当該一の試験信号生成タイミングに対応するサイクル時間における試験信号を擬似的に生成させるスケジュール部とを備える試験エミュレート装置を提供する。
【０００７】
擬似的に生成された前記試験信号に基づいて被試験デバイスの動作をシミュレートする被試験デバイスシミュレート部を更に備えてもよい。
【０００８】
前記同期エミュレート部は、複数の前記試験モジュールエミュレート部のそれぞれが、前記試験信号生成タイミングに対応するサイクル時間における試験信号の生成において擬似的に発生する、前記制御装置に対する割込みを収集する割込み収集タイミングを更に生成し、前記タイミング整列部は、前記複数の試験信号生成タイミング及び複数の前記割込み収集タイミングを時刻順に整列して順次出力し、前記スケジュール部は、タイミング整列部が一の前記割込み収集タイミングを出力した場合に、当該割込み収集タイミングに対応する前記試験モジュールエミュレート部に、当該割込み収集タイミングの直前に当該試験モジュールエミュレート部が試験信号を生成したサイクル時間において擬似的に発生した前記割込みを前記制御エミュレート部に対して通知させてよい。
【０００９】
前記複数の試験モジュールエミュレート部のそれぞれは、前記試験信号生成タイミングに対応するサイクル時間における試験信号の生成において、当該サイクル時間中における試験信号の変化タイミングを生成し、当該試験エミュレート装置は、前記複数の試験モジュールエミュレート部により生成された複数の前記変化タイミングを取得し、前記複数の変化タイミングに基づいて、試験信号を時刻順に順次擬似的に変化させる被試験デバイス接続部を更に備えてもよい。
【００１０】
前記被試験デバイス接続部は、前記複数の試験モジュールエミュレート部から取得した複数の前記変化タイミングを前記タイミング整列部に供給し、前記タイミング整列部は、前記複数の変化タイミング、前記複数の試験信号生成タイミング及び複数の前記割込み収集タイミングを時刻順に整列して順次出力し、前記スケジュール部は、前記タイミング整列部が一の前記変化タイミングを出力した場合に、前記被試験デバイス接続部に、当該変化タイミングに試験信号を擬似的に変化させてもよい。
【００１１】
前記複数の試験モジュールエミュレート部のそれぞれは、前記試験信号生成タイミングに対応するサイクル時間における試験信号の生成において、当該サイクル時間が終了するサイクル終了タイミングを前記同期エミュレート部に通知し、前記同期エミュレート部は、前記複数の試験モジュールエミュレート部のそれぞれから通知された前記サイクル終了タイミングに基づいて、当該試験モジュールエミュレート部が次のサイクル時間に対応する試験信号を擬似的に生成すべき前記試験信号生成タイミングを生成してもよい。
【００１２】
次のサイクル時間に対応する前記試験信号生成タイミングを前記タイミング整列部が出力した場合に、前記スケジュール部は、当該試験信号生成タイミングの直前のサイクル時間における試験信号の生成において、当該試験信号生成タイミングに対応する前記試験モジュールエミュレート部が擬似的に発生した割込みを前記制御エミュレート部に対して通知させてもよい。
【００１３】
前記複数の試験モジュールエミュレート部のそれぞれは、当該試験モジュールエミュレート部に対応する試験モジュールエミュレートプログラムをコンピュータで動作させることにより実現され、前記試験モジュールエミュレートプログラムは、前記試験モジュールが前記制御装置から受信する複数のコマンドのそれぞれに対応して設けられ、当該コマンドに対応する前記試験モジュールの動作をエミュレートする複数のハードウェアエミュレート関数と、前記スケジュール部が、前記試験信号生成タイミングに対応するサイクル時間における試験信号を生成させるために用いる制御関数とを有してもよい。
【００１４】
本発明の第２の形態によると、コンピュータを、試験信号を被試験デバイスにそれぞれ供給する複数の試験モジュールを備える試験装置をエミュレートする試験エミュレート装置として機能させるプログラムを記録した記録媒体であって、前記プログラムは、前記コンピュータを、異なるサイクル周期に基づく試験信号を生成する前記複数の試験モジュールをエミュレートする複数の試験モジュールエミュレート部と、前記被試験デバイスの試験を制御する制御装置をエミュレートする制御エミュレート部と、前記制御エミュレート部からの指示に基づき、前記複数の試験モジュールエミュレート部のそれぞれが、当該試験モジュールエミュレート部のサイクル時間に対応する試験信号を擬似的に生成すべき試験信号生成タイミングを生成する同期エミュレート部と、前記同期エミュレート部が生成した複数の前記試験信号生成タイミングを、時刻順に整列して順次出力するタイミング整列部と、前記タイミング整列部が出力した一の前記試験信号生成タイミングに対応する前記試験モジュールエミュレート部に、当該一の試験信号生成タイミングに対応するサイクル時間における試験信号を擬似的に生成させるスケジュール部として機能させる記録媒体を提供する。
【００１５】
本発明の第３の形態によると、異なるサイクル周期に基づく試験信号を被試験デバイスにそれぞれ供給する複数の試験モジュールを備える試験装置をエミュレートする試験エミュレート装置において、一の前記試験モジュールをエミュレートする試験モジュールエミュレート装置であって、前記試験エミュレート装置は、前記被試験デバイスの試験を制御する制御装置をエミュレートする制御エミュレート部と、前記制御エミュレート部からの指示に基づき、前記複数の試験モジュールのそれぞれが、当該試験モジュールのサイクル時間に対応する試験信号を擬似的に生成すべき試験信号生成タイミングを生成する同期エミュレート部と、前記同期エミュレート部が生成した複数の前記試験信号生成タイミングを、時刻順に整列して順次出力するタイミング整列部と、前記タイミング整列部が出力した一の前記試験信号生成タイミングに対応する当該試験モジュールエミュレート装置に、当該一の試験信号生成タイミングに対応するサイクル時間における試験信号を擬似的に生成させることを指示するスケジュール部とを備え、当該試験モジュールエミュレート装置は、前記スケジュール部からの指示に基づき、前記一の試験信号生成タイミングに対応するサイクル時間における試験信号を擬似的に生成するパターン発生器エミュレート部を備える試験モジュールエミュレート装置を提供する。
【００１６】
前記一の試験信号生成タイミングに対応するサイクルが終了するサイクル終了タイミングを同期エミュレート部に通知し、前記同期エミュレート部に前記サイクル終了タイミングに基づき当該試験モジュールエミュレート装置が次に試験信号を擬似的に生成すべき前記試験信号生成タイミングを更に生成させる試験モジュールインターフェイスエミュレート部を更に備えてもよい。
【００１７】
本発明の第４の形態によると、異なるサイクル周期に基づく試験信号を被試験デバイスにそれぞれ供給する複数の試験モジュールを備える試験装置をエミュレートする試験エミュレート装置において、コンピュータを、一の前記試験モジュールをエミュレートする試験モジュールエミュレート装置として機能させるプログラムを記録した記録媒体であって、前記試験エミュレート装置は、前記被試験デバイスの試験を制御する制御装置をエミュレートする制御エミュレート部と、前記制御エミュレート部からの指示に基づき、前記複数の試験モジュールのそれぞれが、当該試験モジュールのサイクル時間に対応する試験信号を擬似的に生成すべき試験信号生成タイミングを生成する同期エミュレート部と、前記同期エミュレート部が生成した複数の前記試験信号生成タイミングを、時刻順に整列して順次出力するタイミング整列部と、前記タイミング整列部が出力した一の前記試験信号生成タイミングに対応する当該試験モジュールエミュレート装置に、当該一の試験信号生成タイミングに対応するサイクル時間における試験信号を擬似的に生成させることを指示するスケジュール部とを備え、前記プログラムは、前記コンピュータを、前記スケジュール部からの指示に基づき、前記一の試験信号生成タイミングに対応するサイクル時間における試験信号を擬似的に生成するパターン発生器エミュレート部として機能させる記録媒体を提供する。
【００１８】
本発明の第５の形態によると、試験信号を被試験デバイスに供給する試験モジュールを備える試験装置であって、前記被試験デバイスの試験を制御する制御装置と、サイクル周期に基づき試験信号を生成する試験モジュールと、前記試験モジュールをエミュレートする試験モジュールエミュレート部とを備え、前記制御装置は、前記被試験デバイスの実試験又は擬似試験のいずれを行うかの指示を入力し、前記被試験デバイスの実試験を行う指示を受けた場合に、前記被試験デバイスの試験を行う試験プログラムを前記試験モジュールに供給して、前記試験モジュールにより前記被試験デバイスの試験を行わせ、前記被試験デバイスの擬似試験を行う指示を受けた場合に、前記試験プログラムを前記試験モジュールエミュレート部に供給して、前記試験モジュールエミュレート部により前記被試験デバイスの試験をシミュレートさせる試験装置を提供する。
【００１９】
前記制御装置は、当該制御装置と前記試験モジュールとの間の通信処理を行う通信ソフトウェアを実行し、前記通信ソフトウェアは、前記制御装置と協働して、当該通信ソフトウェアを初期化する呼び出しに含まれる前記指示に基づいて、前記試験プログラムを前記試験モジュール及び前記試験モジュールエミュレート部のいずれに供給するかを判断してもよい。
【００２０】
本発明の第６の形態によると、試験信号を被試験デバイスに供給する複数の試験モジュールを備える試験装置をエミュレートする試験エミュレート装置であって、サイクル周期に基づく試験信号を生成する前記複数の試験モジュールをエミュレートする複数の試験モジュールエミュレート部と、前記被試験デバイスの試験を制御する制御装置をエミュレートする制御エミュレート部と、前記複数の試験モジュールエミュレート部のそれぞれが、サイクル時間に対応する試験信号を擬似的に生成すべき試験信号生成タイミングをスケジュールするスケジュール部とを備え、前記試験モジュールエミュレート部は、関数呼び出しにより前記試験信号生成タイミングの通知を受けて、当該試験信号生成タイミングに対応するサイクル時間中における試験信号の電圧の変化を、出力チャネルをエミュレートする出力チャネルオブジェクトの電圧設定メソッドを複数回呼び出すことにより出力し、当該サイクル時間に対応する試験信号の電圧の変化の出力を終えた後に、当該サイクル時間に対応する試験信号の電圧の変化の出力を終えたことを、前記出力チャネルオブジェクトの終了メソッドを呼び出すことにより通知する試験エミュレート装置を提供する。
【００２１】
前記スケジュール部は、前記複数の試験モジュールエミュレート部のそれぞれから通知された前記終了メソッドに基づいて、全ての前記試験モジュールエミュレート部が試験信号の電圧の変化の出力を終えた期間を算出し、前記期間内における前記試験信号を取得して、当該試験信号に基づいて被試験デバイスの前記期間内における動作をシミュレートする被試験デバイスシミュレート部を更に備えてもよい。
【００２２】
前記出力チャネルオブジェクトは、前記終了メソッドの呼び出しを受けた後に、当該終了メソッドにより通知された、既に試験信号の電圧の変化の出力を終えた期間内の電圧の変化を禁止してもよい。
【００２３】
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【発明の効果】
【００２４】
本発明によれば、様々なモジュールを混載して使用する試験装置を適切にエミュレートすることができる試験エミュレート装置を提供することができる。
【発明を実施するための最良の形態】
【００２５】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００２６】
図１は、本発明の実施形態に係る試験装置１０の構成を示す。試験装置１０は、試験信号を生成してＤＵＴ１００（Ｄｅｖｉｃｅ  Ｕｎｄｅｒ  Ｔｅｓｔ：被試験デバイス）に供給し、ＤＵＴ１００が試験信号に基づいて動作した結果出力する結果信号が期待値と一致するか否かに基づいてＤＵＴ１００の良否を判断する。本実施形態に係る試験装置１０は、オープンアーキテクチャにより実現され、ＤＵＴ１００に試験信号を供給する試験モジュール１７０等として、オープンアーキテクチャに基づく各種のモジュールを用いることができる。そして、試験装置１０は、ＤＵＴ１００の実試験をエミュレートする試験エミュレート装置１９０を有し、試験エミュレート装置１９０により、実試験に用いる試験モジュール１７０等の変更に対応して適切に構成を変更し、ＤＵＴ１００の実試験を適切にエミュレートするエミュレート環境を提供することができる。
【００２７】
試験装置１０は、システム制御装置１１０と、通信ネットワーク１２０と、サイト制御装置１３０ａ〜ｃと、バススイッチ１４０と、同期モジュール１５０ａ〜ｂと、同期接続モジュール１６０ａ〜ｂと、試験モジュール１７０ａ〜ｂと、ロードボード１８０と、試験エミュレート装置１９０とを備え、ＤＵＴ１００ａ〜ｂに接続される。
【００２８】
システム制御装置１１０は、試験装置１０がＤＵＴ１００ａ〜ｂの試験に用いる試験制御プログラム、試験プログラム、及び試験データ等を外部のネットワーク等を介して受信し、格納する。通信ネットワーク１２０は、システム制御装置１１０、サイト制御装置１３０ａ〜ｃ、及び試験エミュレート装置１９０を接続し、これらの間の通信を中継する。
【００２９】
サイト制御装置１３０ａ〜ｃは、本発明に係る制御装置の一例であり、ＤＵＴ１００の試験を制御する。ここで、複数のサイト制御装置１３０は、それぞれ一のＤＵＴ１００の試験を制御する。例えば、図１においては、サイト制御装置１３０ａはＤＵＴ１００ａの試験を制御し、サイト制御装置１３０ｂはＤＵＴ１００ｂの試験を制御する。これに代えて、複数のサイト制御装置１３０は、それぞれ複数のＤＵＴ１００の試験を制御してもよい。
【００３０】
より具体的には、サイト制御装置１３０は、通信ネットワーク１２０を介してシステム制御装置１１０から試験制御プログラムを取得し実行する。次に、サイト制御装置１３０は、試験制御プログラムに基づいて、当該ＤＵＴ１００の試験に用いる試験プログラム及び試験データをシステム制御装置１１０から取得し、バススイッチ１４０を介して当該ＤＵＴ１００の試験に用いる同期モジュール１５０及び１又は複数の試験モジュール１７０等のモジュールに格納する。次に、サイト制御装置１３０は、試験プログラム及び試験データに基づく試験の開始をバススイッチ１４０を介して同期モジュール１５０に指示する。そして、サイト制御装置１３０は、試験が終了したことを示す割込み等を例えば同期モジュール１５０から受信し、試験結果に基づいて次の試験を各モジュールに行なわせる。
【００３１】
バススイッチ１４０は、複数のサイト制御装置１３０のそれぞれを、当該サイト制御装置１３０が制御する同期モジュール１５０及び１又は複数の試験モジュール１７０に接続し、これらの間の通信を中継する。ここで、予め定められた一のサイト制御装置１３０は、試験装置１０の使用者や試験制御プログラム等の指示に基づいて、複数のサイト制御装置１３０のそれぞれを、当該サイト制御装置１３０がＤＵＴ１００の試験に用いる同期モジュール１５０及び１以上の試験モジュール１７０に接続させるべくバススイッチ１４０を設定してよい。例えば、図１においては、サイト制御装置１３０ａは、同期モジュール１５０ａ及び複数の試験モジュール１７０ａに接続する様に設定され、これらを用いてＤＵＴ１００ａの試験を行なう。また、サイト制御装置１３０ｂは、同期モジュール１５０ｂ及び複数の試験モジュール１７０ｂに接続する様に設定され、これらを用いてＤＵＴ１００ｂの試験を行なう。
【００３２】
ここで、サイト制御装置１３０ｂが同期モジュール１５０ｂ、同期接続モジュール１６０ｂ、及び１又は複数の試験モジュール１７０ｂを用いてＤＵＴ１００ｂを試験するための構成及び動作は、サイト制御装置１３０ａが同期モジュール１５０ａ、同期接続モジュール１６０ａ、及び１又は複数の試験モジュール１７０ａを用いてＤＵＴ１００ａを試験するための構成及び動作と略同様であるため、以下相違点を除きサイト制御装置１３０ａがＤＵＴ１００ａを試験するための構成及び動作を中心に説明する。
【００３３】
同期モジュール１５０ａは、サイト制御装置１３０ａの指示に基づいて、ＤＵＴ１００ａの試験に用いる複数の試験モジュール１７０ａが試験信号を生成すべき試験信号生成タイミングを生成する。また、同期モジュール１５０ａは、同期接続モジュール１６０ａを介して１又は複数の試験モジュール１７０ａから試験結果を受信し、試験結果の良否に対応した試験プログラムのシーケンスを１又は複数の試験モジュール１７０ａに実行させる。
【００３４】
同期接続モジュール１６０ａは、同期モジュール１５０ａが生成した試験信号生成タイミングを、当該試験信号生成タイミングに対応して動作させるべき試験モジュール１７０ａに通知し、１又は複数の試験モジュール１７０ａのそれぞれを指定したタイミングで動作させる。また、同期接続モジュール１６０ａは、１又は複数の試験モジュール１７０ａから試験結果を受信し、同期モジュール１５０ａに送信する。
【００３５】
複数の試験モジュール１７０ａは、ＤＵＴ１００ａが有する複数の端子の一部ずつにそれぞれ接続され、サイト制御装置１３０ａにより格納された試験プログラム及び試験データに基づいてＤＵＴ１００ａの試験を行なう。ＤＵＴ１００ａの試験において、試験モジュール１７０ａは、試験プログラムにより定められたシーケンスに基づいて試験データから試験信号を生成し、当該試験モジュール１７０ａに接続されたＤＵＴ１００ａの端子に試験信号を供給する。次に、試験モジュール１７０ａは、ＤＵＴ１００ａが試験信号に基づいて動作した結果出力する結果信号を取得し、期待値と比較する。そして、試験モジュール１７０ａは、結果信号と期待値との比較結果を、試験結果として同期接続モジュール１６０ａに送信する。ここで複数の試験モジュール１７０ａは、試験プログラム及び試験データに基づいて、試験信号のサイクル周期を動的に変化させるため、異なるサイクル周期に基づいて試験信号を生成する。
【００３６】
また、試験モジュール１７０ａは、試験プログラムの処理が完了した場合や、試験プログラムの実行中に異常が生じた場合等において、サイト制御装置１３０ａに対して割込みを発生する。この割込みは、バススイッチ１４０を介して当該試験モジュール１７０ａに対応するサイト制御装置１３０ａに通知され、サイト制御装置１３０ａが有するプロセッサにより割込み処理が行われる。
【００３７】
ロードボード１８０は、複数のＤＵＴ１００を載置し、複数の試験モジュール１７０を対応するＤＵＴ１００の端子に接続する。
試験エミュレート装置１９０は、システム制御装置１１０に格納された試験制御プログラム、試験プログラム、及び試験データに基づいて試験装置１０をエミュレートし、ＤＵＴ１００のシミュレーションモデルを用いてＤＵＴ１００の試験を擬似的に行なう。本実施形態において、試験エミュレート装置１９０は、一のサイト制御装置１３０と、当該サイト制御装置１３０により制御される同期モジュール１５０、同期接続モジュール１６０、及び１又は複数の試験モジュール１７０と、当該サイト制御装置１３０による試験対象となるＤＵＴ１００の動作を擬似的に行なう。試験エミュレート装置１９０を用いることにより、試験装置１０の使用者は、ＤＵＴ１００、同期モジュール１５０、同期接続モジュール１６０、及び／又は試験モジュール１７０等の実物を準備していない段階で、試験制御プログラム、試験プログラム、及び／又は試験データの検証を開始することができる。また、試験エミュレート装置１９０を複数用意することにより、複数の使用者のそれぞれがより高価な実試験環境を占有することなく、試験制御プログラム、試験プログラム、及び／又は試験データを開発することができる。
【００３８】
以上において、試験装置１０は、オープンアーキテクチャにより実現され、オープンアーキテクチャ規格を満たす各種のモジュールを使用することができる。そして、試験装置１０は、同期モジュール１５０、同期接続モジュール１６０、及び試験モジュール１７０等のモジュールを、バススイッチ１４０が有する任意の接続スロットに挿入して使用することができる。この際、試験装置１０の使用者等は、例えばサイト制御装置１３０ａを介してバススイッチ１４０の接続形態を変更し、ＤＵＴ１００の試験に用いる複数のモジュールを、当該ＤＵＴ１００の試験を制御するサイト制御装置１３０に接続させることができる。これにより、試験装置１０の使用者は、複数のＤＵＴ１００のそれぞれの端子数、端子の配置、端子の種類、又は試験の種類等に応じて適切なモジュールを選択し、試験装置１０に実装することができる。
【００３９】
なお、以上に代えて、同期接続モジュール１６０ａ及び同期接続モジュール１６０ｂは、試験装置１０に用いられる全ての試験モジュール１７０に共通して設けられた一の同期接続部により実現されてもよい。この場合において、試験装置１０の使用者等は、バススイッチ１４０の接続形態の変更と共に同期接続部と試験モジュール１７０との接続形態を変更することにより、複数のＤＵＴ１００の特性に応じて適切なモジュールを選択することができる。
【００４０】
図２は、本発明の実施形態に係る試験エミュレート装置１９０の機能構成を示す。試験エミュレート装置１９０は、サイト制御エミュレート部２３０と、バススイッチエミュレート部２４０と、同期モジュールエミュレート部２５０と、同期接続モジュールエミュレート部２６０と、１又は複数の試験モジュールエミュレート部２７０と、ＤＵＴ接続部２８０と、ＤＵＴシミュレート部２００と、スケジュール制御部２７５とを有する。以下、試験エミュレート装置１９０が、サイト制御装置１３０ａによるＤＵＴ１００ａの試験をエミュレートする場合を例に説明を行なう。
【００４１】
サイト制御エミュレート部２３０は、図１に示したサイト制御装置１３０ａをエミュレートする。すなわち、サイト制御エミュレート部２３０は、通信ネットワーク１２０を介してシステム制御装置１１０から試験制御プログラムを取得し実行する。次に、サイト制御エミュレート部２３０は、試験制御プログラムに基づいてＤＵＴ１００ａの試験に用いる試験プログラム及び試験データをシステム制御装置１１０から取得し、バススイッチエミュレート部２４０を介して同期モジュールエミュレート部２５０及び１又は複数の試験モジュールエミュレート部２７０等のモジュールエミュレート部に格納する。
【００４２】
ここで、サイト制御エミュレート部２３０は、サイト制御装置１３０ａが同期モジュール１５０ａ及び１又は複数の試験モジュール１７０ａに対して発行する、当該モジュール内の記憶領域への読出アクセス、書込アクセス等のコマンドをバススイッチエミュレート部２４０に対して擬似的に発行する。サイト制御エミュレート部２３０は、試験プログラム及び試験データの書込アクセスをバススイッチエミュレート部２４０に対して擬似的に発行することにより、バススイッチエミュレート部２４０を介して同期モジュールエミュレート部２５０及び１又は複数の試験モジュールエミュレート部２７０等に試験プログラム及び試験データを格納してよい。
【００４３】
また、サイト制御エミュレート部２３０は、同期モジュールエミュレート部２５０及び試験モジュールエミュレート部２７０が擬似的に発生する割込みをバススイッチエミュレート部２４０を介して受信し、サイト制御装置１３０ａの割込み処理を擬似的に実行する。
【００４４】
バススイッチエミュレート部２４０は、図１に示したバススイッチ１４０をエミュレートし、サイト制御エミュレート部２３０と、同期モジュールエミュレート部２５０及び１又は複数の試験モジュールエミュレート部２７０との間の通信を中継する。
【００４５】
同期モジュールエミュレート部２５０は、図１に示した同期モジュール１５０をエミュレートし、サイト制御エミュレート部２３０からの指示に基づき複数の試験モジュールエミュレート部２７０のそれぞれが、当該試験モジュールエミュレート部２７０のサイクル時間に対応する試験信号を擬似的に生成すべき試験信号生成タイミングを生成する。次に、同期モジュールエミュレート部２５０は、試験信号を生成した当該試験モジュールエミュレート部２７０からサイクル時間の終了タイミングであるサイクル終了タイミングを受信する。そして、同期モジュールエミュレート部２５０は、サイクル終了タイミングに基づき、当該試験モジュールエミュレート部２７０が次に試験信号を生成すべき試験信号生成タイミング、当該試験モジュールエミュレート部２７０から試験結果を収集する試験結果収集タイミング、当該試験モジュールエミュレート部２７０にサイクル時間の処理を終了させるサイクル終了処理タイミング、及び、当該試験モジュールエミュレート部２７０からサイト制御エミュレート部２３０に対する割込みを収集する割込み収集タイミングを生成する。ここで、試験モジュールエミュレート部２７０からサイト制御エミュレート部２３０に対する割込みとは、複数の試験モジュールエミュレート部２７０のそれぞれが、試験信号生成タイミングに対応するサイクル時間における試験信号の生成において擬似的にサイト制御装置１３０ａに対して発生する割込みである。
【００４６】
同期接続モジュールエミュレート部２６０は、図１に示した同期接続モジュール１６０をエミュレートし、同期モジュールエミュレート部２５０が擬似的に生成した試験信号生成タイミング、及び、同期モジュールエミュレート部２５０がエミュレーションのために生成した試験結果収集タイミング、サイクル終了処理タイミング、及び割込み収集タイミングをスケジュール制御部２７５に通知する。また、同期接続モジュールエミュレート部２６０は、１又は複数の試験モジュールエミュレート部２７０から試験結果を受信し、同期モジュールエミュレート部２５０に送信する。
【００４７】
試験モジュールエミュレート部２７０は、試験信号生成の指示を受けた同期モジュールエミュレート部２５０からサイクル開始の指示を受け、サイト制御エミュレート部２３０により格納された試験プログラム及び試験データに基づいて、当該試験信号生成タイミングに対応するサイクル時間における試験信号を擬似的に生成する。より具体的には、試験モジュールエミュレート部２７０は、試験信号生成タイミングに対応するサイクル時間における試験信号の生成において、当該サイクル時間中における試験信号の変化タイミングを擬似的に生成する。ここで、試験モジュールエミュレート部２７０は、試験信号の変化タイミングとして、当該試験モジュールエミュレート部２７０に対応する試験モジュール１７０の仕様により定められた数の変化タイミングを、一のサイクル時間に対応して生成してもよい。また、試験モジュールエミュレート部２７０は、ＤＵＴシミュレート部２００が試験信号に基づいて擬似的に動作した結果出力する出力信号を取得し、試験プログラム及び試験データに基づき定められた期待値と比較する。そして、試験モジュールエミュレート部２７０は、結果信号と期待値との比較結果を、試験結果として同期接続モジュールエミュレート部２６０を介して同期モジュールエミュレート部２５０に送信する。
また、試験モジュールエミュレート部２７０は、スケジュール部２７７から割込み発生の指示を受けて、割込み発生の指示を受ける前に最後に試験信号を生成したサイクル時間中において擬似的に発生した割込みを、バススイッチエミュレート部２４０を介してサイト制御エミュレート部２３０に通知する。
【００４８】
ＤＵＴ接続部２８０は、複数の試験モジュールエミュレート部２７０により生成された複数の変化タイミングを取得し、複数の変化タイミングに基づいて、試験信号を時刻順に擬似的に変化させる。
【００４９】
ＤＵＴシミュレート部２００は、例えばＶｅｒｉｌｏｇ−ＨＤＬやＶＨＤＬ等のハードウェア記述言語により記述されたＤＵＴ１００の動作を、ＤＵＴ接続部２８０から取得した試験信号に基づきシミュレートする。そして、ＤＵＴシミュレート部２００は、ＤＵＴ１００が試験信号に基づいて動作した結果出力する結果信号をシミュレーションにより生成し、ＤＵＴ接続部２８０を介して試験モジュールエミュレート部２７０に供給する。
【００５０】
スケジュール制御部２７５は、同期モジュールエミュレート部２５０、同期接続モジュールエミュレート部２６０、複数の試験モジュールエミュレート部２７０、及びＤＵＴ接続部２８０によるＤＵＴ１００の擬似的な試験において、これらの複数のモジュールエミュレート部が生成する各種のタイミングに基づいて、それぞれのモジュールエミュレート部を動作させるスケジュールを制御する。スケジュール制御部２７５は、タイミング整列部２７６と、スケジュール部２７７とを含む。
【００５１】
タイミング整列部２７６は、同期モジュールエミュレート部２５０が生成した複数の試験信号生成タイミング、複数の割込み収集タイミング、複数のサイクル終了処理タイミング、及び複数の試験結果収集タイミングと、１又は複数の試験モジュールエミュレート部２７０により生成され、ＤＵＴ接続部２８０により供給された複数の変化タイミングを、時刻順に整列して順次スケジュール部２７７に出力する。スケジュール部２７７は、タイミング整列部２７６が順次出力するそれぞれのタイミングを、当該タイミングに対応するモジュールエミュレート部やＤＵＴ接続部２８０に通知し、モジュールエミュレート部又はＤＵＴ接続部２８０に当該タイミングに対応する動作を行わせる。以下に、タイミング整列部２７６が出力したタイミングの種類に応じたスケジュール部２７７の動作を説明する。
【００５２】
（１）  タイミング整列部２７６が試験信号生成タイミングを出力した場合
スケジュール部２７７は、当該試験信号生成タイミングを同期モジュールエミュレート部２５０に通知し、当該試験信号生成タイミングに対応する試験モジュールエミュレート部２７０による試験信号の生成を同期モジュールエミュレート部２５０を介して指示する。これにより、スケジュール部２７７は、同期モジュールエミュレート部２５０を介して、当該試験信号生成タイミングに対応する試験モジュールエミュレート部２７０に、当該試験信号生成タイミングに対応するサイクル時間における試験信号を擬似的に生成させる。
【００５３】
（２）  タイミング整列部２７６が割込み収集タイミングを出力した場合
スケジュール部２７７は、当該割込み収集タイミングに対応して指定された試験モジュールエミュレート部２７０に割込みの発生を指示する。これにより、スケジュール部２７７は、当該試験モジュールエミュレート部２７０に、当該割込み収集タイミングの直前に試験信号を生成したサイクル時間において擬似的に発生した割込みを、バススイッチエミュレート部２４０を介してサイト制御エミュレート部２３０に対して通知させる。
【００５４】
（３）  タイミング整列部２７６がサイクル終了処理タイミングを出力した場合
スケジュール部２７７は、当該サイクル終了処理タイミングに対応する試験モジュールエミュレート部２７０に、サイクル終了タイミングが到達したことを通知する。
【００５５】
（４）  タイミング整列部２７６が試験結果収集タイミングを出力した場合
スケジュール部２７７は、当該試験結果収集タイミングに対応する試験モジュールエミュレート部２７０に、試験結果収集タイミングが到達したことを通知する。これを受けて、当該試験モジュールエミュレート部２７０は、当該サイクル時間における結果信号と期待値との比較結果を同期接続モジュールエミュレート部２６０を介して同期モジュールエミュレート部２５０に通知する。
【００５６】
（５）  タイミング整列部２７６が変化タイミングを出力した場合
ＤＵＴ接続部２８０は、複数の試験モジュールエミュレート部２７０から取得した複数の変化タイミングをタイミング整列部２７６に供給する。これを受けてタイミング整列部２７６は、複数の変化タイミングと、他の各種タイミングとを合わせて時刻順に整列する。
タイミング整列部２７６が変化タイミングを出力すると、スケジュール部２７７は、当該変化タイミングに試験信号を擬似的に変化させるべく、ＤＵＴ接続部２８０に変化タイミングが到達したことを通知する。これを受けて、ＤＵＴ接続部２８０は、当該変化タイミングに試験信号を擬似的に変化させる。
【００５７】
ここで、試験モジュールエミュレート部２７０は、結果信号を取得すべきタイミングである結果信号取得タイミングをスケジュール制御部２７５に通知し、他の各種タイミングと併せてタイミング整列部２７６により時刻順に整列させてもよい。この場合、スケジュール部２７７は、タイミング整列部２７６が結果信号取得タイミングを出力した場合に、ＤＵＴ接続部２８０に、当該結果信号取得タイミングにおいて、当該結果信号を取得すべき試験モジュールエミュレート部２７０に結果信号を供給させてもよい。
また、ＤＵＴ接続部２８０は、複数の試験モジュールエミュレート部２７０により生成された複数の変化タイミングを取得し、時刻順に整列することなくＤＵＴシミュレート部２００に供給してもよい。この場合、ＤＵＴシミュレート部２００は、供給された複数の変化タイミングを時刻順に整列し、整列した複数の変化タイミングに基づきＤＵＴ１００のシミュレーションを行なってよい。
【００５８】
以上に示した試験エミュレート装置１９０によれば、同期モジュールエミュレート部２５０、同期接続モジュールエミュレート部２６０、及び１又は複数の試験モジュールエミュレート部２７０を、試験装置１０の実機における同期モジュール１５０、同期接続モジュール１６０、及び１又は複数の試験モジュール１７０にそれぞれ対応して設けることにより、これらのモジュールエミュレート部を他のモジュールエミュレート部に容易と置換することができる。これにより、例えば試験装置１０の実機において一のモジュールを他のモジュールに変更した場合に、試験エミュレート装置１９０において当該一のモジュールに対応するモジュールエミュレート部を、他のモジュールに対応するモジュールエミュレート部に置換し、試験装置１０の実機と略同一の試験環境を試験エミュレート装置１９０上で提供することができる。
【００５９】
なお、以上に代えて、サイト制御エミュレート部２３０、バススイッチエミュレート部２４０、同期モジュールエミュレート部２５０、試験モジュールエミュレート部２７０、スケジュール制御部２７５、ＤＵＴ接続部２８０、及びＤＵＴシミュレート部２００は、サイト制御装置１３０等の１台のコンピュータにより実現されてもよく、複数のコンピュータによる分散システムにより実現されてもよい。
【００６０】
図３は、本発明の実施形態に係る試験エミュレート装置１９０のハードウェア構成の一例を示す。本実施形態に係る試験エミュレート装置１９０は、ＣＰＵ３００、ＲＯＭ３１０、ＲＡＭ３２０、通信インターフェイス３３０、ハードディスク・ドライブ３４０、フレキシブルディスク・ドライブ３５０、及びＣＤ−ＲＯＭドライブ３６０を備えるコンピュータ２０により実現される。
【００６１】
ＣＰＵ３００は、ＲＯＭ３１０及びＲＡＭ３２０に格納されたプログラムに基づいて動作し、各部の制御を行う。ＲＯＭ３１０は、コンピュータ２０の起動時にＣＰＵ３００が実行するブートプログラムや、コンピュータ２０のハードウェアに依存するプログラム等を格納する。ＲＡＭ３２０は、ＣＰＵ３００が実行するプログラム及びＣＰＵ３００が使用するデータ等を格納する。通信インターフェイス３３０は、通信ネットワークを介して他の装置と通信する。ハードディスク・ドライブ３４０は、コンピュータ２０が使用するプログラム及びデータを格納し、ＲＡＭ３２０を介してＣＰＵ３００に供給する。フレキシブルディスク・ドライブ３５０は、フレキシブルディスク３９０からプログラム又はデータを読み取り、ＲＡＭ３２０に提供する。ＣＤ−ＲＯＭドライブ３６０は、ＣＤ−ＲＯＭ３９５からプログラム又はデータを読み取り、ＲＡＭ３２０に提供する。
【００６２】
ＲＡＭ３２０を介してＣＰＵ３００に提供されるプログラムは、フレキシブルディスク３９０、ＣＤ−ＲＯＭ３９５、又はＩＣカード等の記録媒体に格納されて利用者によって提供される。プログラムは、記録媒体から読み出され、ＲＡＭ３２０を介してコンピュータ２０にインストールされ、コンピュータ２０において実行される。
【００６３】
コンピュータ２０にインストールされて実行され、コンピュータ２０を試験エミュレート装置１９０として機能させるプログラムモジュールは、ＤＵＴシミュレートモジュールと、サイト制御エミュレートモジュールと、バススイッチエミュレートモジュールと、同期モジュールエミュレートモジュールと、同期接続モジュールエミュレートモジュールと、試験モジュールエミュレートモジュールと、スケジュール制御モジュールと、タイミング整列モジュールと、スケジュールモジュールと、ＤＵＴ接続モジュールとを含む。これらのプログラム又はモジュールは、コンピュータ２０を、ＤＵＴシミュレート部２００、サイト制御エミュレート部２３０、バススイッチエミュレート部２４０、同期モジュールエミュレート部２５０、同期接続モジュールエミュレート部２６０、試験モジュールエミュレート部２７０、スケジュール制御部２７５、タイミング整列部２７６、スケジュール部２７７、及びＤＵＴ接続部２８０としてそれぞれ機能させる。
【００６４】
以上に示したプログラム又はモジュールは、外部の記録媒体に格納されてもよい。記録媒体としては、フレキシブルディスク３９０、ＣＤ−ＲＯＭ３９５の他に、ＤＶＤやＰＤ等の光学記録媒体、ＭＤ等の光磁気記録媒体、テープ媒体、ＩＣカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はＲＡＭ等の記憶装置を記録媒体として使用し、通信ネットワークを介して外部のネットワークからプログラムをコンピュータ２０に提供してもよい。
【００６５】
図４は、本発明の実施形態に係る試験モジュールエミュレート部２７０の機能構成を示す。図４において、試験モジュールエミュレート部２７０は、当該試験モジュールエミュレート部２７０に対応する試験モジュールエミュレートプログラム又は試験モジュールエミュレートモジュールをコンピュータ２０で動作させることにより実現される。
【００６６】
試験モジュールエミュレート部２７０は、試験モジュール１７０がサイト制御装置１３０からバススイッチ１４０を介して受信する複数のコマンドのそれぞれに対応して設けられた複数のハードウェアエミュレート関数と、試験モジュールエミュレート部２７０に各種のタイミングを通知する目的で呼び出される制御関数とを有し、バススイッチエミュレート部２４０及びスケジュール制御部２７５からこれらの関数に対する呼び出しを受けて動作する。ここで、制御関数は、スケジュール制御部２７５が、試験信号生成タイミングに対応するサイクル時間における試験信号を擬似的に生成させるため、及び、割込み収集タイミングの直前に試験モジュールエミュレート部２７０が試験信号を生成したサイクル時間において擬似的に発生した割込みをサイト制御エミュレート部２３０に対して通知させるため等に用いられる。
【００６７】
試験モジュールエミュレート部２７０は、試験モジュールＩＦエミュレート部４００（試験モジュールインターフェイスエミュレート部）と、パターン発生器エミュレート部４３０と、波形整形器エミュレート部４４０と、ピン制御エミュレート部４５０と、パラメータ測定エミュレート部４６０とを含む。
【００６８】
試験モジュールＩＦエミュレート部４００は、バススイッチエミュレート部２４０からハードウェアエミュレート関数の呼び出しを受けた場合、及びスケジュール制御部２７５から制御関数の呼び出しを受けた場合に起動され、これらの関数呼び出しに対応する試験モジュールエミュレート部２７０の動作を制御する。試験モジュールＩＦエミュレート部４００は、マシンワードＤＢ４２０と、制御関数処理部４１０とを含む。
【００６９】
マシンワードＤＢ４２０は、試験モジュール１７０に設けられた記憶領域に格納される記憶領域をエミュレートし、ハードウェアエミュレート関数の呼び出しによりサイト制御エミュレート部２３０からバススイッチエミュレート部２４０を介してコマンドを擬似的に受け取った場合に、当該コマンドに対応してマシンワードＤＢ４２０内の記憶領域をアクセスする。
【００７０】
より具体的には、本実施形態に係る試験モジュールＩＦエミュレート部４００は、読出しアクセスや書込みアクセス等の複数のコマンドに対応する試験モジュールエミュレート部２７０の動作をそれぞれエミュレートする複数のハードウェアエミュレート関数を実装する。バススイッチエミュレート部２４０を介してサイト制御エミュレート部２３０から読出しアクセスを受け取ると、試験モジュールＩＦエミュレート部４００は、当該読出しアクセスの対象となる記憶領域に対応するマシンワードＤＢ４２０内のデータをバススイッチエミュレート部２４０を介してサイト制御エミュレート部２３０に返信する。また、書込みアクセスを受け取ると、マシンワードＤＢ４２０は、当該書込みアクセスの対象となる記憶領域に対応するマシンワードＤＢ４２０内の記憶領域に、書込み対象のデータを格納する。例えば、マシンワードＤＢ４２０は、バススイッチエミュレート部２４０を介してサイト制御エミュレート部２３０から試験プログラム又は試験データの書込みアクセスを受け取ると、当該書込みアクセスに対応するマシンワードＤＢ４２０内の記憶領域にこれらの試験プログラム又は試験データを格納する。
【００７１】
制御関数処理部４１０は、スケジュール制御部２７５から制御関数の呼び出しを受けた場合に、当該制御関数に対応してパターン発生器エミュレート部４３０、波形整形器エミュレート部４４０、ピン制御エミュレート部４５０、及びパラメータ測定エミュレート部４６０を動作させ、当該制御関数の指示に対応する試験モジュール１７０の動作をエミュレートする。より具体的には、スケジュール制御部２７５が制御関数を用いて試験信号生成タイミングに対応するサイクル時間における試験信号の生成を指示すると、制御関数処理部４１０は、マシンワードＤＢ４２０に格納された試験プログラム及び試験データのうち、当該サイクル時間中に試験モジュールエミュレート部２７０が処理すべきプログラム部分及びデータ部分を読み出し、これらのプログラム部分及びデータ部分に対応する処理をパターン発生器エミュレート部４３０、波形整形器エミュレート部４４０、ピン制御エミュレート部４５０、及びパラメータ測定エミュレート部４６０に行なわせる。
【００７２】
パターン発生器エミュレート部４３０は、試験モジュール１７０が有するパターン発生器をエミュレートする。すなわち、パターン発生器エミュレート部４３０は、マシンワードＤＢ４２０に格納された試験プログラム及び試験データを、例えば関数呼び出しにより制御関数処理部４１０から受信し格納する。そして、あるサイクル時間について試験信号を生成すべきことを示す指示を、スケジュール制御部２７５から制御関数処理部４１０を介して例えば関数呼び出しにより受け取り、当該サイクル時間中に発生すべき試験信号を擬似的に生成する。
【００７３】
また、パターン発生器エミュレート部４３０は、ＤＵＴシミュレート部２００が試験信号に基づいて動作した結果擬似的に出力する結果信号をＤＵＴ接続部２８０及び波形整形器エミュレート部４４０を介して取得し、期待値との比較を行なう。
【００７４】
波形整形器エミュレート部４４０は、試験モジュール１７０が有する波形整形器をエミュレートする。すなわち、波形整形器エミュレート部４４０は、パターン発生器エミュレート部４３０から試験信号を受けて、試験信号の波形を擬似的に整形し、ＤＵＴ接続部２８０へ出力する。
【００７５】
ピン制御エミュレート部４５０は、試験モジュール１７０が有するピン制御部をエミュレートする。すなわち、ピン制御エミュレート部４５０は、試験プログラムに基づいて、波形整形器エミュレート部４４０及び／又はパラメータ測定エミュレート部４６０が試験信号を擬似的に出力する各端子に、動作電圧等のパラメータを設定する。
【００７６】
パラメータ測定エミュレート部４６０は、試験モジュール１７０が有するパラメータ測定部をエミュレートする。すなわち例えば、パラメータ測定エミュレート部４６０は、関数呼び出しにより直流試験（ＤＣパラメトリック試験）の指示を、スケジュール制御部２７５から制御関数処理部４１０を介して受け取り、直流試験において当該サイクル時間中に発生すべき試験信号を擬似的に生成する。また、パラメータ測定エミュレート部４６０は、ＤＵＴシミュレート部２００が直流試験において試験信号に基づいて動作した結果擬似的に出力する結果信号を取得する。
【００７７】
また、制御関数処理部４１０は、試験信号生成タイミングに対応するサイクル時間における試験信号を試験モジュールエミュレート部２７０が生成した場合、当該試験信号生成タイミングに対応するサイクルが終了するサイクル終了タイミングを同期モジュールエミュレート部２５０に通知する。
【００７８】
以上において、制御関数処理部４１０は、試験信号生成タイミングに対応するサイクル時間における試験信号の生成において、当該サイクルが終了するサイクル終了タイミングをスケジュール制御部２７５を介して同期モジュールエミュレート部２５０に通知してもよい。これにより、制御関数処理部４１０は、同期モジュールエミュレート部２５０に、当該サイクル終了タイミングに基づき試験モジュールエミュレート部２７０が次に試験信号を擬似的に生成すべき試験信号生成タイミングを更に生成させることができる。
【００７９】
また、制御関数処理部４１０は、スケジュール制御部２７５から割り込み発生の指示を受けた場合、例えば関数呼び出しにより割込み発生の指示をパターン発生器エミュレート部４３０、波形整形器エミュレート部４４０、及びピン制御エミュレート部４５０に送信する。割込み発生の指示を受けたパターン発生器エミュレート部４３０、波形整形器エミュレート部４４０、及びピン制御エミュレート部４５０は、試験モジュールエミュレート部２７０が試験信号を生成した各サイクル時間のうち、当該割込み収集タイミングの直前のサイクル時間において擬似的に発生した割込みを制御関数処理部４１０に通知する。制御関数処理部４１０は、割込みの通知を受けると、例えばバススイッチエミュレート部２４０が有する割込み通知用のハードウェアエミュレート関数を呼び出すことにより、バススイッチエミュレート部２４０を介してサイト制御エミュレート部２３０に割込みを通知する。
【００８０】
図５は、本発明の実施形態に係るクラス階層構造５００の一例を示す。本実施形態において、同期モジュールエミュレート部２５０、同期接続モジュールエミュレート部２６０、及び試験モジュールエミュレート部２７０等のモジュールエミュレート部を実現するモジュールエミュレートプログラムは、試験装置１０のオープンアーキテクチャを擬似的に実現するために定められたモジュールエミュレートプログラムの枠組みであるクラス関数を用いて作成される。
【００８１】
シミュレーションコンポーネントクラス５１０は、モジュールエミュレートプログラムが備えるべき複数のメソッド関数のパラメータや戻り値等の呼び出し規則を、仮想メソッド関数により定義するクラスである。シミュレーションコンポーネントクラス５１０は、複数の仮想ハードウェアエミュレート関数５１２と、複数の仮想制御関数５１４とを有する。
【００８２】
ここで、ｒｅａｄ（）は、サイト制御エミュレート部２３０が読出アクセスコマンドを擬似的に発行する場合に呼び出される、読出アクセスに対応するモジュールの動作をエミュレートするメソッド関数である。ｗｒｉｔｅ（）は、サイト制御エミュレート部２３０が書込アクセスコマンドを擬似的に発行する場合に呼び出される、書込アクセスに対応するモジュールの動作をエミュレートするメソッド関数である。ｓｅｔＢａｓｅＡｄｄｒｅｓｓ（）は、試験モジュール１７０が有する記憶領域のベースアドレスを設定する際にサイト制御装置１３０が発行するベースアドレス設定コマンドを、サイト制御エミュレート部２３０が擬似的に発行する場合に呼び出されるメソッド関数である。
【００８３】
ｒｅｇｉｓｔｅｒＥｖｅｎｔ（）は、同期モジュールエミュレート部２５０からの通知を受けた同期接続モジュールエミュレート部２６０、試験モジュールエミュレート部２７０、及びＤＵＴ接続部２８０が、割込み収集タイミング、変化タイミング、及び結果信号取得タイミング等をタイミング整列部２７６に通知し登録する場合に呼び出されるメソッド関数である。ｈａｎｄｌｅＥｖｅｎｔ（）は、試験信号生成タイミング、割込み収集タイミング、変化タイミング、及び結果信号取得タイミングに到達したとき等に、同期モジュールエミュレート部２５０、同期接続モジュールエミュレート部２６０、試験モジュールエミュレート部２７０、及びＤＵＴ接続部２８０にこれらのタイミングに対応する処理を行なわせるためにスケジュール制御部２７５により呼び出されるメソッド関数である。ｒａｉｓｅＥｖｅｎｔ（）は、同期モジュールエミュレート部２５０、同期接続モジュールエミュレート部２６０、試験モジュールエミュレート部２７０、及びＤＵＴ接続部２８０が、タイミングに関わりなく非同期に処理すべきイベントをスケジュール制御部２７５に通知する場合に呼び出されるメソッド関数である。
【００８４】
Ａ社モジュールクラス５２０及びＢ社モジュールクラス５３０は、シミュレーションコンポーネントクラス５１０から派生されたクラスであり、例えばモジュールを提供する製造業者等により提供される、当該製造業者のモジュールが共通して備える共通機能をエミュレートするモジュールエミュレートプログラムである。Ａ社モジュールクラス５２０及びＢ社モジュールクラス５３０は、それぞれ複数の実ハードウェアエミュレート関数５２２と、複数の実制御関数５２４とを有する。複数の実ハードウェアエミュレート関数５２２及び複数の実制御関数５２４のそれぞれは、複数の仮想ハードウェアエミュレート関数５１２及び複数の仮想制御関数５１４のそれぞれに対応して記述され、仮想メソッド関数に対応する実メソッド関数（非仮想メソッド関数）の処理内容を記述したモジュールエミュレートプログラムである。
【００８５】
Ａ社モジュールクラス５２０及びＢ社モジュールクラス５３０は、更に派生したクラスを有してよい。例えば、図５において、Ｂ社モジュールクラス５３０は、デジタル試験モジュールクラス５４０、電源モジュールクラス５６０、及び同期モジュールクラス５９０に更に派生される。
【００８６】
デジタル試験モジュールクラス５４０は、ＤＵＴ１００の機能試験を行なう試験モジュール１７０をエミュレートする試験モジュールエミュレートプログラムのクラスである。デジタル試験モジュールクラス５４０は、２５０ＭＨｚで動作してＤＵＴ１００の機能試験を行なう試験モジュール１７０をエミュレートする２５０ＭＨｚデジタル試験モジュールクラス５５０に更に派生される。電源モジュールクラス５６０は、ＤＵＴ１００に電源を供給するモジュールをエミュレートするモジュールエミュレートプログラムのクラスである。電源モジュールクラス５６０は、ＤＵＴ１００に高電圧電源を供給するモジュールをエミュレートする高電圧電源モジュールクラス５７０と、ＤＵＴ１００に低電圧電源を供給するモジュールをエミュレートする低電圧電源モジュールクラス５８０とに更に派生される。同期モジュールクラス５９０は、同期モジュール１５０をエミュレートするモジュールエミュレートプログラムのクラスである。
【００８７】
２５０ＭＨｚデジタル試験モジュールクラス５５０、高電圧電源モジュールクラス５７０、低電圧電源モジュールクラス５８０、及び同期モジュールクラス５９０のそれぞれは、Ｂ社モジュールクラス５３０に含まれるｈａｎｄｌｅＥｖｅｎｔ（）を置き換えて（オーバーライドして）使用される、それぞれのモジュールの独自機能をエミュレートする実メソッド関数ｈａｎｄｌｅＥｖｅｎｔ（）を含む。
【００８８】
試験エミュレート装置１９０が有する同期モジュールエミュレート部２５０、同期接続モジュールエミュレート部２６０、及び１又は複数の試験モジュールエミュレート部２７０等は、クラス階層構造５００に含まれるモジュールエミュレートプログラムのクラスのいずれかのインスタンスとして実現されてよい。
【００８９】
以上に示した通り、試験エミュレート装置１９０が有する同期モジュールエミュレート部２５０、同期接続モジュールエミュレート部２６０、及び試験モジュールエミュレート部２７０等のモジュールエミュレート部は、例えばクラス階層構造５００に含まれるいずれかのクラスに対応するモジュールエミュレートプログラムにより実現される。試験エミュレート装置１９０の使用者は、例えば試験装置１０の実機に実装されるべきモジュールの組合せに対応するクラスの組合せからモジュールエミュレートプログラムのインスタンスを生成することにより、試験装置１０の実機と略同一の試験環境を試験エミュレート装置１９０上で構築することができる。また、新たなモジュールに対応する新たなクラスを作成する場合においても、新たなクラスをいずれかのクラスの派生クラスとして作成することにより、モジュールエミュレートプログラムの作成工数を低減することができる。
【００９０】
図６は、本発明の実施形態に係る試験エミュレート装置１９０の試験信号生成処理フローを、一の試験モジュールエミュレート部２７０により試験を行なう場合について示す。
【００９１】
試験プログラム及び試験データが同期モジュールエミュレート部２５０、同期接続モジュールエミュレート部２６０、及び１又は複数の試験モジュールエミュレート部２７０に格納された状態で、サイト制御エミュレート部２３０が試験の開始を同期モジュールエミュレート部２５０に指示すると、試験エミュレート装置１９０は以下に示す手順で擬似的に試験を行なう。
【００９２】
まず、スケジュール制御部２７５（図中ＳＣＨＥＤ）中のスケジュール部２７７は、タイミング整列部２７６が試験信号生成タイミングを出力した場合に、同期モジュールエミュレート部２５０（図中ＳＹＮＣ）のｈａｎｄｌｅＥｖｅｎｔ（）関数を呼び出し、試験信号生成タイミングに至ったことを通知する（Ｓ６００）。これにより、スケジュール制御部２７５は、同期モジュールエミュレート部２５０を介して、試験信号生成タイミングに対応する試験モジュールエミュレート部２７０に、当該試験信号生成タイミングに対応するサイクル時間における試験信号を擬似的に生成させる。ここで、スケジュール制御部２７５は、対応する試験モジュールエミュレート部２７０の試験信号生成タイミングに至ったことを示すイベント識別子をｈａｎｄｌｅＥｖｅｎｔ（）関数のパラメータに含めることにより、試験信号生成タイミングを同期モジュールエミュレート部２５０に通知してもよい。
【００９３】
次に、同期モジュールエミュレート部２５０は、当該試験信号生成タイミングにおいて試験信号を擬似的に生成すべき試験モジュールエミュレート部２７０（図中ＴＭ）に対して、サイクル時間の処理を開始し試験信号を生成させる指示であるサイクル開始を通知する（Ｓ６０５）。ここで、同期モジュールエミュレート部２５０は、サイクル開始を指示するイベント識別子をｒａｉｓｅＥｖｅｎｔ（）関数のパラメータに含めてスケジュール制御部２７５を呼び出すことにより、タイミング整列部２７６が時刻順に整列したタイミングと非同期にスケジュール制御部２７５を介して試験モジュールエミュレート部２７０にサイクル開始を通知してよい。
【００９４】
次に、試験モジュールエミュレート部２７０は、サイクル開始の通知を受けて、対応するサイクル時間における試験信号を擬似的に発生する（Ｓ６１０）。すなわち、Ｓ６００においてスケジュール制御部２７５が試験信号生成タイミングに対応するサイクル時間における試験信号を擬似的に発生させるべく同期モジュールエミュレート部２５０に試験信号生成タイミングを通知し、この通知を受けた同期モジュールエミュレート部２５０がスケジュール制御部２７５を介して試験モジュールエミュレート部２７０にサイクル開始を通知することにより、試験モジュールエミュレート部２７０は、当該サイクル時間における試験信号を擬似的に発生する。ここで、試験モジュールエミュレート部２７０は、当該サイクル時間における試験信号の生成において、当該サイクル時間中における試験信号の変化タイミングを擬似的に生成する。
【００９５】
次に、ＤＵＴ接続部２８０（図中ＬＢ）は、試験モジュールエミュレート部２７０から試験信号の変化タイミングを受けて、変化タイミングをタイミング整列部２７６に通知し登録する（Ｓ６１５）。
【００９６】
次に、試験モジュールエミュレート部２７０は、当該サイクルを終了するタイミングを同期モジュールエミュレート部２５０に通知する（Ｓ６２０）。ここで、試験モジュールエミュレート部２７０は、試験プログラム及び試験データによる指定に基づき、各サイクル時間を動的に変更しつつパターン発生器エミュレート部４３０により試験信号を生成する。このため、試験モジュールエミュレート部２７０における試験モジュールＩＦエミュレート部４００内の制御関数処理部４１０は、各サイクルの終了するタイミングをパターン発生器エミュレート部４３０から取得して同期モジュールエミュレート部２５０に通知し、同期モジュールエミュレート部２５０が次の試験信号生成タイミングを正しく生成できるようにする。
【００９７】
次に、同期モジュールエミュレート部２５０は、Ｓ６２０において試験モジュールエミュレート部２７０から通知されたサイクル終了タイミングに基づいて、試験モジュールエミュレート部２７０が次のサイクル時間に対応する試験信号を擬似的に生成すべき試験信号生成タイミングを生成し、タイミング整列部２７６に通知して登録する（Ｓ６２５）。また、同期モジュールエミュレート部２５０は、試験モジュールエミュレート部２７０から試験結果を収集する試験結果収集タイミング、試験モジュールエミュレート部２７０の当該サイクル時間を終了させるサイクル終了処理タイミング、当該サイクル時間における試験信号の生成において試験モジュールエミュレート部２７０が擬似的に発生した割込みを収集する割込み収集タイミングを更に生成し、タイミング整列部２７６に通知して登録する（Ｓ６２５）。ここで、同期モジュールエミュレート部２５０は、スケジュール制御部２７５のｒｅｇｉｓｔｅｒＥｖｅｎｔ（）関数を呼び出すことにより、これらのタイミングをタイミング整列部２７６に登録してよい。
【００９８】
なお、同期モジュールエミュレート部２５０は、試験モジュールエミュレート部２７０から受信したサイクル終了タイミングと略同一のタイミングを、当該試験モジュールエミュレート部２７０における次の試験信号生成タイミング、試験結果収集タイミング、サイクル終了処理タイミング、及び割り込み収集タイミングとして生成してもよい。
【００９９】
次に、タイミング整列部２７６がＳ６１５において登録された変化タイミングを出力すると、スケジュール部２７７は、当該変化タイミングに試験信号を擬似的に変化させるべく、ＤＵＴ接続部２８０に変化タイミングが到達したことを通知する（Ｓ６３０）。
【０１００】
次に、スケジュール部２７７から変化タイミングの通知を受けると、ＤＵＴ接続部２８０は、当該変化タイミングに試験信号を擬似的に変化させることにより試験信号を生成し、ＤＵＴシミュレート部２００に供給する（Ｓ６３５）。ＤＵＴシミュレート部２００は、ＤＵＴ接続部２８０から取得した試験信号に基づきＤＵＴ１００の動作をシミュレートする。そして、ＤＵＴシミュレート部２００は、ＤＵＴ１００が試験信号に基づいて動作した結果出力する結果信号を擬似的に生成し、ＤＵＴ接続部２８０を介して試験モジュールエミュレート部２７０に供給する。試験モジュールエミュレート部２７０は、結果信号と期待値とを比較し、比較結果を得る。
【０１０１】
次に、タイミング整列部２７６がＳ６２５において登録された試験結果収集タイミングを出力すると、スケジュール部２７７は、ＤＵＴシミュレート部２００から試験モジュールエミュレート部２７０に供給された結果信号に基づく結果の良否を収集するべく、試験モジュールエミュレート部２７０に試験結果収集タイミングが到達したことを通知する（Ｓ６４０）。試験結果収集タイミングの通知を受けると、試験モジュールエミュレート部２７０は、当該サイクル時間における結果信号と期待値との比較結果を、同期接続モジュールエミュレート部２６０を介して同期モジュールエミュレート部２５０に通知する。同期モジュールエミュレート部２５０は、各試験モジュールエミュレート部２７０から収集した比較結果に基づき試験結果の良否（パス又はフェイル）を判定し、試験結果の良否を各試験モジュールエミュレート部２７０に配信することにより通知する（Ｓ６４５）。複数の試験モジュールエミュレート部２７０に供給される試験プログラム及び試験データは、この試験結果の良否に基づいて、当該サイクル時間以降に行なう試験のシーケンスを変更するように記述されていてもよい。
【０１０２】
次に、タイミング整列部２７６がＳ６２５において登録されたサイクル終了処理タイミングを出力すると、スケジュール部２７７は、試験モジュールエミュレート部２７０にサイクルを終了させるタイミングが到達したことを通知する（Ｓ６５０）。
【０１０３】
次に、タイミング整列部２７６がＳ６２５において登録された割込み収集タイミングを出力すると、スケジュール部２７７は、試験モジュールエミュレート部２７０に割込み収集タイミングが到達したことを通知する（Ｓ６５５）。割込み収集タイミングの通知を受けると、試験モジュールエミュレート部２７０は、当該割込み収集タイミングの直前に試験モジュールエミュレート部２７０が試験信号を生成したサイクル時間において擬似的に発生した割込みを、バススイッチエミュレート部２４０を介してサイト制御エミュレート部２３０に対して擬似的に通知する。
【０１０４】
試験エミュレート装置１９０は、上記のＳ６００からＳ６５５に示した処理を、試験が終了するまで繰り返す（Ｓ６６０）。
【０１０５】
なお、複数の試験モジュールエミュレート部２７０により試験を行なう場合、スケジュール制御部２７５は、これらの複数の試験モジュールエミュレート部２７０のそれぞれが動作すべきタイミングを時刻順に整列し、スケジュールする。このため、複数の試験モジュールエミュレート部２７０についてのＳ６００、Ｓ６３０、Ｓ６４０、Ｓ６５０、及びＳ６５５は、時刻順に整列された順序で実行される。
【０１０６】
図７は、本発明の実施形態に係る試験エミュレート装置１９０により擬似的に生成される試験信号の一例を示す。本図において、試験エミュレート装置１９０は、試験モジュールエミュレート部２７０として、試験モジュールＡをエミュレートする試験モジュールエミュレート部２７０ａと、試験モジュールＢをエミュレートする試験モジュールエミュレート部２７０ｂとを含む。
【０１０７】
まず、時刻ｔ１以前において、タイミング整列部２７６は、試験モジュールエミュレート部２７０ａの試験信号生成タイミングｔ１と、試験モジュールエミュレート部２７０ｂの試験信号生成タイミングｔ２とを登録しており、これらを時刻順に整列して出力する結果、まず試験信号生成タイミングｔ１を出力する。これを受けて、スケジュール部２７７は、時刻をｔ１に進めると共に、試験信号生成タイミングｔ１に至ったことを同期モジュールエミュレート部２５０に通知する。
【０１０８】
試験信号生成タイミングｔ１の通知を受けると、同期モジュールエミュレート部２５０は、同期接続モジュールエミュレート部２６０及び試験モジュールエミュレート部２７０を介して、試験信号生成タイミングｔ１に対応する試験モジュールエミュレート部２７０ａにサイクル開始を通知する。これを受けて、試験モジュールエミュレート部２７０ａは、図中サイクル１と示したサイクル時間における試験信号を擬似的に発生する。ここで、試験モジュールエミュレート部２７０ａは、当該サイクル時間中の変化タイミングｔ４において試験信号がＨレベルに変化することを、ＤＵＴ接続部２８０に通知する。これを受けて、ＤＵＴ接続部２８０は、変化タイミングｔ４をタイミング整列部２７６に登録する。
【０１０９】
次に、試験モジュールエミュレート部２７０ａは、サイクル１における試験信号の生成を終えると、サイクル１のサイクル終了タイミングｔ６を同期モジュールエミュレート部２５０に通知する。これを受けて、同期モジュールエミュレート部２５０は、サイクル終了タイミングｔ６に基づき、次の試験信号生成タイミングｔ６、試験結果収集タイミングｔ６−Δ、サイクル終了処理タイミングｔ６−Δ、及び割り込み収集タイミングｔ６−Δを生成し、タイミング整列部２７６に登録する。ここで、ｔ６−Δは、次の試験信号生成タイミングｔ６の微小時間前であることを示す。
【０１１０】
次に、タイミング整列部２７６は、登録されたタイミングを時刻順に整列し、試験信号生成タイミングｔ２を出力する。これを受けて、スケジュール部２７７は、時刻をｔ２に進めると共に、試験信号生成タイミングｔ２に至ったことを同期モジュールエミュレート部２５０に通知する。
【０１１１】
試験信号生成タイミングｔ２の通知を受けると、同期モジュールエミュレート部２５０は、試験信号生成タイミングｔ２に対応する試験モジュールエミュレート部２７０ｂに、スケジュール制御部２７５を介してサイクル開始を通知する。これを受けて、試験モジュールエミュレート部２７０ｂは、試験モジュールエミュレート部２７０ｂのサイクル１における試験信号を擬似的に発生する。この結果、試験モジュールエミュレート部２７０ｂは、試験信号の変化タイミングｔ３及びｔ５を生成し、ＤＵＴ接続部２８０はこれらの変化タイミングをタイミング整列部２７６に登録する。
【０１１２】
次に、試験モジュールエミュレート部２７０ｂは、サイクル１における試験信号の生成を終えると、サイクル１のサイクル終了タイミングｔ７を同期モジュールエミュレート部２５０に通知する。これを受けて、同期モジュールエミュレート部２５０は、サイクル終了タイミングｔ７に基づき、次の試験信号生成タイミングｔ７、試験結果収集タイミングｔ７−Δ、サイクル終了処理タイミングｔ７―Δ、及び割り込み収集タイミングｔ７−Δを生成し、タイミング整列部２７６に登録する。
【０１１３】
次に、タイミング整列部２７６は、登録されたタイミングを時刻順に整列し、変化タイミングｔ３、ｔ４、ｔ５を順次出力する。これらの変化タイミングのそれぞれを受けて、スケジュール部２７７は、変化タイミングをＤＵＴ接続部２８０に通知する。この結果、ＤＵＴ接続部２８０は、当該変化タイミングに試験信号を擬似的に変化させ、ＤＵＴシミュレート部２００に供給する。
【０１１４】
次に、タイミング整列部２７６は、試験結果収集タイミングｔ６−Δを出力する。これを受けて、スケジュール部２７７は、時刻をｔ６−Δに進めると共に、試験モジュールエミュレート部２７０ａに試験結果収集タイミングｔ６―Δを通知する。この結果、試験モジュールエミュレート部２７０ａ及び同期モジュールエミュレート部２５０の間で試験結果の収集及び配信を行なう。
【０１１５】
次に、タイミング整列部２７６は、サイクル終了処理タイミングｔ６−Δを出力する。これを受けて、スケジュール部２７７は、試験モジュールエミュレート部２７０ａにサイクル１の終了を通知する。
【０１１６】
次に、タイミング整列部２７６は、割込み収集タイミングｔ６−Δを出力する。これを受けて、スケジュール部２７７は、試験モジュールエミュレート部２７０ａに割込み収集タイミングｔ６−Δを通知する。この結果、試験モジュールエミュレート部２７０ａは、サイクル１において擬似的に発生した割込みをサイト制御エミュレート部２３０に対して通知する。
【０１１７】
次に、タイミング整列部２７６は、試験信号生成タイミングｔ６を出力する。これを受けて、スケジュール部２７７は、時刻をｔ６に進めると共に、試験信号生成タイミングｔ６に至ったことを同期モジュールエミュレート部２５０に通知する。以降試験エミュレート装置１９０は、時刻ｔ１と同様にして、変化タイミングｔ８、結果信号を取得すべきタイミングを示す結果信号取得タイミングｔ１１、次の試験信号生成タイミングｔ１２、試験結果収集タイミングｔ１２−Δ、サイクル終了処理タイミングｔ１２−Δ、及び割込み収集タイミングｔ１２の生成及びタイミング整列部２７６への登録を行なう。
【０１１８】
次に、タイミング整列部２７６は、登録されたタイミングを時刻順に整列し、試験信号生成タイミングｔ７を出力する。これを受けて、スケジュール部２７７は、時刻をｔ７に進めると共に、試験信号生成タイミングｔ７に至ったことを同期モジュールエミュレート部２５０に通知する。以降試験エミュレート装置１９０は、時刻ｔ２と同様にして、変化タイミングｔ９及びｔ１０、次の試験信号生成タイミングｔ１３、試験結果収集タイミングｔ１３−Δ、サイクル終了処理タイミングｔ１３−Δ、及び割込み収集タイミングｔ１３の生成及びタイミング整列部２７６への登録を行なう。
【０１１９】
以上に示した通り、本実施形態に係る試験エミュレート装置１９０によれば、試験信号生成タイミング、試験信号の変化タイミング、試験結果収集タイミング、結果信号取得タイミング、及び割込み収集タイミング等の各種のタイミングをスケジュール制御部２７５により時刻順に整列してスケジューリングする。このため、試験エミュレート装置１９０は、異なるサイクル周期に基づく複数の試験モジュール１７０が実装された場合における試験装置１０の動作を適切にエミュレートすることができる。
【０１２０】
なお、本実施形態において、同期接続モジュールエミュレート部２６０は、試験モジュール１７０からサイクル終了タイミングを受けた場合に、試験結果収集タイミング、サイクル終了処理タイミング、及び割込み収集タイミングをタイミング整列部２７６に登録するが、これに代えて、以下の方法を用いてもよい。
【０１２１】
図６のＳ６２５において、同期モジュールエミュレート部２５０は、サイクル終了タイミングに基づいて、試験モジュールエミュレート部２７０が次のサイクル時間に対応する試験信号を擬似的に生成すべき試験信号生成タイミングを生成し、タイミング整列部２７６に通知して登録する。一方、この時点において、同期モジュールエミュレート部２５０は、試験結果収集タイミング、サイクル終了処理タイミング、及び割り込み収集タイミングを生成せず、タイミング整列部２７６に対して登録しない。
【０１２２】
この結果、試験エミュレート装置１９０は、図６のＳ６３０及びＳ６３５の処理の後、Ｓ６４０、Ｓ６５０、及びＳ６５５を行なうことなく、Ｓ６００に処理を進める。そして、Ｓ６００において次のサイクル時間に対応する試験信号生成タイミングをタイミング整列部２７６が出力した場合に、スケジュール部２７７は、当該試験信号生成タイミングに至ったことを同期モジュールエミュレート部２５０に通知する。これを受けて、同期モジュールエミュレート部２５０は、次のサイクル時間の試験信号生成の前に、試験結果の収集、サイクル終了の通知、及び割込みの収集を、当該試験信号生成タイミングに対応する試験モジュールエミュレート部２７０に指示する。
【０１２３】
以上の処理により、スケジュール制御部２７５は、次のサイクル時間の試験信号生成の前に、Ｓ６４０、Ｓ６４５、Ｓ６５０、及びＳ６５５に示した処理を同期モジュールエミュレート部２５０、同期接続モジュールエミュレート部２６０、及び試験モジュールエミュレート部２７０等に行わせる。より具体的には、スケジュール制御部２７５は、当該試験信号生成タイミングの直前のサイクル時間における試験信号の生成において、試験モジュールエミュレート部２７０に供給された結果信号に基づく試験結果の良否を同期モジュールエミュレート部２５０及び同期接続モジュールエミュレート部２６０により収集及び配信させ、当該試験モジュールエミュレート部２７０が擬似的に発生した割込みをサイト制御エミュレート部２３０に対して通知させる。
【０１２４】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【０１２５】
例えば、以上に示した試験装置１０は、同期モジュール１５０、同期接続モジュール１６０、及び試験モジュール１７０等によるＤＵＴ１００の実試験と、同期モジュールエミュレート部２５０、同期接続モジュールエミュレート部２６０、試験モジュールエミュレート部２７０、及びＤＵＴシミュレート部２００等によるＤＵＴ１００の擬似試験とを、同一の試験制御プログラム及び／又は試験プログラムにより実行可能な試験装置１０の使用者に提供すると共に、使用者により実試験及び擬似試験を切替可能としてもよい。
【０１２６】
すなわち、サイト制御装置１３０は、ＤＵＴ１００の実試験又は擬似試験のいずれを行うかの指示を、例えば試験開始コマンドのオプション等により入力する。そして、システム制御装置１１０又はサイト制御装置１３０は、ＤＵＴ１００の実試験を行う指示を受けた場合に、ＤＵＴ１００の試験を行う試験プログラムをバススイッチ１４０を介して１又は複数の試験モジュール１７０に供給して、これらの試験モジュール１７０によりＤＵＴ１００の試験を行わせる。一方、サイト制御装置１３０は、ＤＵＴ１００の擬似試験を行う指示を受けた場合に、試験プログラムを試験エミュレート装置１９０又はサイト制御装置１３０等の上でソフトウェアにより実現される試験モジュールエミュレート部２７０に供給して、試験モジュールエミュレート部２７０等によりＤＵＴ１００の試験をシミュレートさせる。
【０１２７】
以上において、サイト制御装置１３０は、当該制御装置と試験モジュール１７０との間の通信処理を行う通信ソフトウェア（通信ライブラリ）を実行し、当該通信ソフトウェアを通じて実試験環境及び擬似試験環境をアクセス可能としてもよい。この場合、サイト制御装置１３０上で実行される試験制御プログラムは、当該通信ソフトウェアにより提供される同一のアクセス関数（ｒｅａｄ／ｗｒｉｔｅ関数等）を用いて、同期モジュール１５０、同期接続モジュール１６０、及び試験モジュール１７０等をアクセスして実試験を行い、また、同期モジュールエミュレート部２５０、同期接続モジュールエミュレート部２６０、及び試験モジュールエミュレート部２７０等をアクセスして擬似試験を行うことができる。
【０１２８】
ここで、上記の通信ソフトウェアは、サイト制御装置１３０と協働して、当該通信ソフトウェアを初期化する呼び出しに含まれる、実試験環境及び擬似試験環境を選択する指示に基づいて、試験プログラムを試験モジュール１７０等及び試験モジュールエミュレート部２７０等のいずれに供給するかを判断してもよい。このような実装の一例を、補足説明Ｃ．２．４．３に示す。
【０１２９】
また、例えば、以上に示した試験モジュールエミュレート部２７０は、次に示す構成を採ってもよい。まず、各試験モジュールエミュレート部２７０は、スケジュール制御部２７５内のスケジュール部２７７によりスケジューリングされた試験信号生成タイミングの通知を、関数呼び出しにより受ける。そして、各試験モジュールエミュレート部２７０は、当該試験信号生成タイミングに対応するサイクル時間中における試験信号の電圧の変化を、出力チャネルをエミュレートする出力チャネルオブジェクトの電圧設定メソッド（ｓｅｔメソッド）を複数回呼び出すことにより出力する。そして、試験モジュールエミュレート部２７０は、当該サイクル時間に対応する試験信号の電圧の変化の出力を終えた後に、当該サイクル時間に対応する試験信号の電圧の変化の出力を終えたことを、出力チャネルオブジェクトの終了メソッド（ｅｎｄメソッド）を呼び出すことによりスケジュール部２７７等に通知する。このような実装の一例を、補足説明Ｂ．３．３等に示す。
【０１３０】
そして、スケジュール部２７７は、複数の試験モジュールエミュレート部２７０のそれぞれから通知された終了メソッドに基づいて、全ての試験モジュールエミュレート部２７０が試験信号の電圧の変化の出力を終えた期間を算出し、この期間内におけるＤＵＴ１００の動作のシミュレーションをＤＵＴシミュレート部２００に要求する。これを受けて、ＤＵＴ接続部２８０は、この期間内における試験信号を取得して、当該試験信号に基づいて被試験デバイスのこの期間内における動作をシミュレートする。
【０１３１】
以上において、出力チャネルオブジェクトは、終了メソッドの呼び出しを受けた後に、当該終了メソッドにより通知された、既に試験信号の電圧の変化の出力を終えた期間内の電圧の変化を禁止する。これにより、既にシミュレーションを終えた期間のシミュレーション結果が不整合となるのを防ぐことができる。このような実装の一例を補足説明Ｂ．３．５等に示す。
【０１３２】
以下に、本実施形態に係る試験装置１０及び試験エミュレート装置１９０を実現するための各種の具体例・仕様例を補足説明する。
【０１３３】
（補足説明Ａ）ソフトウェアアーキテクチャの具体例
図８は、本発明の一実施形態によるソフトウェアアーキテクチャ２２００を示している。ソフトウェアアーキテクチャ２２００は、関連するハードウェアシステムの要素１１０と、１３０と、１５０、１６０及び１７０とに対応して、システムコントローラ２２００と、少なくとも一つのサイトコントローラ２２４０と、少なくとも一つのモジュール２２６０とのための要素を有している分散オペレーティングシステムを表している。モジュール２２６０に加えて、アーキテクチャ２２００は、ソフトウェアでのモジュールエミュレーションのための対応するＳＷ（ソフトウェア）モジュールエミュレーション２２８０を含んでいる。
【０１３４】
例示的な選択として、このプラットフォーム用の開発環境はマイクロソフトのウィンドウズ（登録商標）に基づいていてもよい。このアーキテクチャの使用は、プログラムおよびサポートの移植性において副次的な利点（例えばフィールドサービスエンジニアは高度な診断を行うためのテスタオペレーティングシステムを動作させるラップトップコンピュータを接続することができるであろう）を有している。しかし、大規模な計算集約型の動作（テストパターンのコンパイル等）については、関連するソフトウェアは、独立して動作して分散されたプラットフォームを横断してのジョブスケジューリングを可能にすることができる独立した構成要素とされ得る。したがって、バッチジョブに関連するソフトウェアツールは、複数のプラットフォームタイプ上で動作することができる。
【０１３５】
例示的な選択として、ANSI/ISO標準のC++をソフトウェア用のネイティブ言語とすることができる。当然のことながら、サードパーティが自身の選択した代わりの言語をシステムにまとめることを可能にする、（名目上のC++インタフェース上のレイヤを提供するための）使用可能な複数の選択肢がある。
【０１３６】
図８は、名目上のソースによる組織化（あるいはサブシステムとしての集合的な展開）にしたがって、テスタオペレーティングシステムインタフェース２２９０、ユーザコンポーネント２２９２（例えば、テスト目的のためにユーザによって供給される）、システムコンポーネント２２９４（例えば、基本的な接続性および通信のためのソフトウェアインフラとして提供される）、モジュール開発コンポーネント２２９６（例えば、モジュールディベロッパによって提供される）、および外部コンポーネント２２９８（例えばモジュールディベロッパ以外の外部ソースによって提供される）を含む要素を陰付きで示している。
【０１３７】
ソースベースの構成の観点から、テスタオペレーティングシステム（TOS）インタフェース２２９０は、システムコントローラ−サイトコントローラインタフェース２２２２、フレームワーククラス２２２４、サイトコントローラ−モジュールインタフェース２２４５、フレームワーククラス２２４６、所定のモジュールレベルインタフェース２２４７、バックプレーン通信ライブラリ２２４９、シャーシスロットIF（インタフェース）２２６２、ロードボードハードウェアIF２２６４、バックプレーンシミュレ−ションIF２２８３、ロードボードシミュレーションIF２２８５、DUTシミュレーションIF２２８７、DUTのVerilogモデル用のVerilog PLI（プログラミング言語インタフェース）２２８８、およびDUTのC/C++モデル用のC/C++言語サポート２２８９を含んでいる。
【０１３８】
ユーザコンポーネント２２９２は、ユーザテストプラン２２４２、ユーザテストクラス２２４３、ハードウェアロードボード２２６５、DUT２２６６、DUT Verilogモデル２２９３およびDUT C/C++モデル２２９１を含んでいる。
【０１３９】
システムコンポーネント２２９４は、システムツール２２２６、通信ライブラリ２２３０、テストクラス２２４４、バックプレーンドライバ２２５０、バススイッチ１４０を含むHWバックプレーン２２６１、シミュレーションフレームワーク２２８１、バックプレーンエミュレーション２２８２およびロードボードシミュレーション２２８６を含んでいる。
【０１４０】
モデル展開コンポーネント２２９６は、モジュールコマンドインプリメンテーション２２４８、モジュールハードウェア２２６３およびモジュールエミュレーション２２８４を含んでいる。
外部コンポーネント２２９８は外部ツール２２２５を含んでいる。
【０１４１】
図１に示したシステム制御装置１１０上で動作するソフトウェアであるシステムコントローラ２２２０は、サイトコントローラに対するインタフェース２２２２、フレームワーククラス２２２４、システムツール２２２６、外部ツール２２２５および通信ライブラリ２２３０を含んでいる。システムコントローラソフトウェアは、ユーザに対する相互作用の主要な点である。これは、本実施形態のサイトコントローラへのゲートウェイと、同一譲受人による米国出願第60/449,622号に述べられているマルチサイト／DUT環境におけるサイトコントローラの同期化とを提供する。ユーザアプリケーションおよびツールは、グラフィカルユーザインタフェース（GUI）ベースかそれ以外のものであり、システムコントローラ上で動作する。システムコントローラは、テストプラン、テストパターンおよびテストパラメータファイルを含むすべてのテストプラン関連の情報の収納庫としても機能する。テストパラメータファイルは、発明の一実施形態のオブジェクト指向の環境におけるテストクラス用のパラメータ化されたデータを含んでいる。
【０１４２】
サードパーティのディベロッパは、標準的なシステムツール２２２６に加えて（あるいはその代わりとして）ツールを提供することができる。システムコントローラ２２２０上の標準的なインタフェース２２２２は、ツールがテスタおよびテストオブジェクトにアクセスするために用いるインタフェースを有している。ツール（アプリケーション）２２２５、２２２６は、テストおよびテスタオブジェクトの相互的なバッチ制御を可能にする。このツールは、（例えばSECS/TSEM等の使用を通じて）自動化能力を提供するためのアプリケーションを含んでいる。
【０１４３】
システムコントローラ２２２０上にある通信ライブラリ２２３０は、ユーザアプリケーションおよびテストプログラムにトランスペアレントな形でサイトコントローラ２２４０と通信するメカニズムを提供する。
【０１４４】
インタフェース２２２２は、システムコントローラ２２２０と関連したメモリに常駐しており、システムコントローラ上で実行するフレームワークオブジェクトに対するオープンインタフェースを提供する。サイトコントローラベースのモジュールソフトウェアがパターンデータにアクセス、取得することを可能にするインタフェースが含まれる。また、アプリケーションおよびツールがテスタおよびテストオブジェクトにアクセスするために用いるインタフェース、ならびに、スクリプトエンジンを通じてテスタおよびテストコンポーネントにアクセスして操作することができる能力を提供するスクリプトインタフェースも含まれる。これにより、インタラクティブな、バッチおよびリモートアプリケーションのための共通のメカニズムがそれらの機能を行うことが可能となる。
【０１４５】
システムコントローラ２２２０に関連しているフレームワーククラス２２２４は、これらの上述したオブジェクトと相互に作用するメカニズムを提供し、これは標準的なインタフェースのリファレンスインプリメンテーションを提供する。例えば、本実施形態のサイトコントローラ２２４０は機能テストオブジェクトを提供する。システムコントローラフレームワーククラスは、この機能テストオブジェクトのリモートシステムコントローラベースの代理として、対応する機能テストプロキシを提供してもよい。したがって、標準的な機能テストインタフェースは、システムコントローラ２２２０上のツールに対して利用可能とされる。システム、モジュール開発コンポーネントおよびインタフェースコンポーネント２２９４、２２９６および２２９０はそれぞれ、システムコントローラとサイトコントローラとの間で分散されたオペレーティングシステムであると考えてもよい。フレームワーククラスは、ホストシステムコントローラに関連するオペレーティングシステムインタフェースを実質的に提供する。これらはまた、サイトコントローラに対するゲートウェイを提供するソフトウェア要素も構成し、マルチサイト／DUT環境におけるサイトコントローラの同期を提供する。したがってこのレイヤは、コミュニケーションレイヤを直接扱う必要なくサイトコントローラを操作し、それにアクセスするのに適している、発明の一実施形態におけるオブジェクトモデルを提供する。
【０１４６】
図１に示したサイト制御装置１３０上で動作するソフトウェアであるサイトコントローラ２２４０は、ユーザテストプラン２２４２、ユーザテストクラス２２４３、標準テストクラス２２４４、標準インタフェース２２４５、サイトコントローラフレームワーククラス２２４６、モジュールハイレベルコマンドインタフェース（例えば所定のモジュールレベルのインタフェース）２２４７、モジュールコマンドインプリメンテーション２２４８、バックプレーン通信ライブラリ２２４９、およびバックプレーンドライバ２２５０のホストとなる。好ましくは、テストの機能の大半をサイトコントローラ２１０４／２２４０が扱い、それによってテストサイト２１１０の独立した動作が可能である。
【０１４７】
テストプラン２２４２はユーザによって書かれる。このプランは、C++のような標準的なコンピュータ言語で直接記述されてもよいし、実行可能なテストプログラムへとコンパイル可能であるC++コードを生成するような、より高レベルのテストプログラミング言語で記述されてもよい。
【０１４８】
このテストプランは、フレームワーククラス２２４６および／または、サイトコントローラに関連する標準あるいはユーザによって供給されるテストクラス２２４４を用いて、テストオブジェクトを作り出し、標準インタフェース２２４５を用いてハードウェアを構成し、テストプランのフローを定義する。また、テストプランの実行中に必要とされる追加的なロジックも提供する。テストプランは、いくつかの基本的なサービスをサポートし、デバッグサービス（例えばブレークポイント）等のその下にあるオブジェクトのサービスに対するインタフェースと、その下にあるフレームワークおよび標準クラスへのアクセスとを提供する。
【０１４９】
サイトコントローラに関連するフレームワーククラス２２４６は、共通のテスト関連動作をインプリメントするクラスおよび方法のセットである。サイトコントローラレベルフレームワークは、例えば、電力供給およびピンエレクトロニクスの順番付け、レベルおよびタイミング条件の設定、測定値取得、テストフロー制御のためのクラスを含んでいる。フレームワークオブジェクトは、標準インタフェースをインプリメントすることを通じて動作してもよい。例えば、テスタピンフレームワーククラスのインプリメンテーションは、テストクラスがハードウェアモジュールピンと相互に作用するために用いるであろう汎用のテスタピンインタフェースをインプリメントするように統一される。
【０１５０】
あるフレームワークオブジェクトは、モジュールと通信するためにモジュールレベルインタフェース２２４７の助けを借りて動作するようにインプリメントされてもよい。サイトコントローラフレームワーククラスは、実質的に、各サイトコントローラをサポートするローカルオペレーティングシステムとして機能する。
【０１５１】
一般的に、プログラムコードの９０％以上は装置テスト用のデータであり、残りの１０％のコードがテスト方法を実現する。装置テストデータはDUT依存のデータ（例えば電力供給条件、信号電圧条件、タイミング条件等）である。テストコードは、指定された装置条件をATEハードウェア上にロードする方法からなり、またユーザが指定した目的（データロギング等）を実現するのに必要である方法からも構成される。発明の一実施形態のフレームワークは、ハードウェア依存性のテストと、ユーザがDUTテストプログラミングのタスクを行うことを可能にするテスタオブジェクトモデルとを提供する。
【０１５２】
テストコードの再利用性を高めるために、このようなコードは、装置特有のデータ（例えばピンの名前、活性化データ等）、あるいは装置テストに特有のデータ（例えばDCユニットの条件、測定ピン、ターゲットピンの数、パターンファイルの名前、パターンプログラムのアドレス）のいずれに対しても独立とされてもよい。もしテスト用のコードをこれらのタイプのデータとともにコンパイルすれば、テストコードの再利用性は低下する。したがって、発明の一実施形態によれば、いかなる装置特有のデータあるいは装置テストに特有のデータも、コード実行期間中の入力として、外部からテストコードに役立てられてもよい。
【０１５３】
発明の一実施形態においては、標準テストインタフェースのインプリメンテーションであるテストクラスは、ここではITestと記載するが、特定のタイプのテストに関してテストデータとコードとの分離（したがってコードの再利用性）を実現する。このようなテストクラスは、装置特有および／あるいは装置テスト特有のデータにおいてのみ異なるような別々のテストクラスの「テンプレート」とみなしてもよい。テストクラスはテストプランファイルにおいて指定される。各テストクラスは、典型的には、具体的なタイプの装置テストあるいは装置テスト用のセットアップをインプリメントする。例えば、発明の一実施形態は、DUTに関するすべての機能テストの基本となるクラスとして、ITestインタフェースの具体的なインプリメンテーション、例えばFunctionalTestを提供する。それは、テスト条件の設定、パターンの実行および、失敗したストローブの存在に基づくテスト状況の判定という基本的な機能を提供する。他のタイプのインプリメンテーションは、ここではACParametricTestおよびDCParametricTestとして表記されるACおよびDCテストクラスを含んでいてもよい。
【０１５４】
全てのテストタイプは、いくつかの仮想的な方法のデフォルトのインプリメンテーション（例えば、init( )、preExec( )およびpostExec( )）を提供してもよい。これらの方法は、デフォルトの動作を乗り越えてテスト特有のパラメータを設定するためのテストエンジニアのエントリポイントとなる。しかしながら、カスタムテストクラスもテストプランにおいて用いることができる。
【０１５５】
テストクラスは、そのテストの特定の場合に関するオプションを指定するために用いられるパラメータを提供することによって、ユーザがクラスの動作を構成することを可能にする。例えば、機能テストは、実行すべきパターンリストとテスト用のレベルおよびタイミング条件とを指定するために、パラメータPlistおよびTestConditionと採用してもよい。（テストプラン記述ファイルにおける異なる「テスト」ブロックの使用を通して）これらのパラメータについて異なる値を指定することにより、ユーザは機能テストの異なる例を作り出すことが可能である。図９は、どのようにして単一のテストクラスから異なるテスト例が導き出されるかを示している。テンプレートライブラリは、一般的なアルゴリズムおよびデータ構造の汎用ライブラリとして採用されてもよい。このライブラリはテスタのユーザに見えてもよく、ユーザは、例えば、ユーザ定義のテストクラスを作り出すようにテストクラスのインプリメンテーションを改変してもよい。
【０１５６】
ユーザによって展開されるテストクラスに関して、システムの一実施形態は、このようなテストクラスを、全てのテストクラスが単一のテストインタフェース、例えばITestから得られるようなフレームワークに統合することをサポートし、その結果、そのフレームワークはシステムテストクラスの標準的なセットと同じようなやり方でそれらを処理することができる。ユーザは、追加のファシリティを生かすためには自分達のテストプログラムにおいてカスタムコードを用いなければならないという理解のもとで、自分達のテストクラスに追加の機能を自由に追加することができる。
【０１５７】
図１に示したサイト制御装置１３０、同期モジュール１５０、同期接続モジュール１６０、及び試験モジュール１７０を含んで構成される各テストサイトは、一つ以上のDUT１００のテスト専用のものであり、試験モジュール１７０等のテストモジュールの構成可能な集合体を通じて機能する。各テストモジュールは特定のテストタスクを行う主体である。例えば、テストモジュールは、DUTの電源、ピンカード、アナログカード等であり得る。モジュールによるこのアプローチは、高いフレキシビリティと構成可能性を提供する。
【０１５８】
モジュールコマンドインプリメンテーションクラス２２４８は、モジュールハードウェアベンダによって提供されてもよく、ベンダによって選択されるコマンド実行方法に応じて、ハードウェアモジュールに関するモジュールレベルインタフェースをインプリメントするか、あるいは標準的なインタフェースのモジュール特有のインプリメンテーションを提供する。これらのクラスの外部インタフェースは、所定のモジュールレベルインタフェース要件およびバックプレーン通信ライブラリ要件によって規定される。またこのレイヤは、標準的なセットのテストコマンドの拡張も提供し、それにより方法（機能）およびデータ要素の追加が可能となる。
【０１５９】
バックプレーン通信ライブラリ２２４９は、バックブレーンをまたいでの標準的な通信のためのインタフェースを提供し、それによってテストサイトに接続されたモジュールとの通信に必要な機能を提供する。これにより、ベンダに特有のモジュールソフトウェアが対応するハードウェアモジュールとの通信にバックプレーンドライバ２２５０を用いることが可能である。バックプレーン通信プロトコルはパケットベースのフォーマットである。
【０１６０】
テスタピンオブジェクトは、物理的なテスタチャネルを表しており、ここではITesterPinで示されるテスタピンインタフェースから得られる。発明の一実施形態によるソフトウェア開発キット（SDK）は、TesterPinと呼ばれることもあるITesterPinのデフォルトのインプリメンテーションを提供し、これは所定のモジュールレベルインタフェースIChannelに関してインプリメントされる。ベンダは、IChannelに関して彼らのモジュールの機能をインプリメントすることができるのであればTesterPinを自由に使うことができるが、そうでなければ、彼らのモジュールとどもに動作するITesterPinのインプリメンテーションを提供しなければならない。
【０１６１】
本実施形態のテスタシステムによって提供される標準的なモジュールインタフェースは、ここではIModuleと表記するが、これは一般的には、ベンダのハードウェアモジュールを表している。ベンダによって供給される、システム用のモジュール特有のソフトウェアは、ダイナミックリンクライブラリ（DLL）のような実行可能な形態で提供されてもよい。ベンダからの各モジュールタイプ用のソフトウェアは、単一のDLLにカプセル化されていてもよい。このようなソフトウェアモジュールのそれぞれは、モジュールソフトウェア展開のためのAPIを備えている、モジュールインタフェースコマンド用のベンダに特有なインプリメンテーションを提供することを担っている。
【０１６２】
モジュールインタフェースコマンドには２つの局面がある。それらは、第一に、ユーザがシステムにおける特定のハードウェアモジュールと（間接的に）通信するためのインタフェースとして機能し、第二に、サードパーティディベロッパが彼ら自身のモジュールをサイトコントローラレベルのフレームワークに統合するために活用することができるインタフェースを提供する。したがって、フレームワークによって提供されるモジュールインタフェースコマンドは、2つのタイプに分けられる。
【０１６３】
一つ目は、最も疑う余地のないものであるが、フレームワークインタフェースを通じてユーザに対してあらわになる「コマンド」である。したがって、例えば、テスタピンインタフェース（ITesterPin）は、レベルおよびタイミングの値を取得、設定するための方法を提供し、一方で電源インタフェース（IPowerSupply）は電力を上げたり下げたりする方法を提供する。
【０１６４】
また、フレームワークは、モジュールとの通信に用いられることができる、所定のモジュールレベルインタフェースの特別なカテゴリを提供する。これらは、ベンダのモジュールとの通信のためにフレームワーククラスによって用いられるインタフェース（すなわち、フレームワークインタフェースの「標準的な」インプリメンテーション）である。
【０１６５】
しかしながら、第二の局面、モジュールレベルインタフェースの使用は、任意のものである。それをすることの利点は、ベンダは、モジュールレベルインタフェースをインプリメントすることによって彼らのハードウェアに対して送られる具体的なメッセージの内容を注視しつつ、ITesterPinおよびIPowerSupplyのようなクラスのインプリメンテーションを活用し得るということである。しかし、もしこれらのインタフェースがベンダに不適切であれば、それらはフレームワークインタフェースのそれらのカスタムインプリメンテーション（例えばITesterPin、IPowerSupply等のベンダインプリメンテーション）を提供することを選択してもよい。そうすればこれらは、それらのハードウェアに対して適切であるカスタム機能を提供するであろう。
【０１６６】
したがって、モジュールに特有なベンダソフトウェアの統合は、2つの異なった手段、すなわち、関連するフレームワーククラスおよびインタフェースのカスタムインプリメンテーション、あるいはモジュールレベルインタフェースの特別なカテゴリのカスタムインプリメンテーションを通じて実現され得る。
【０１６７】
次に、両方の方法の例示的な応用を図１０の助けを借りて説明する。図１０は、発明の一実施形態によるテスタシステムとベンダによって供給されるモジュールとの相互作用を示すユニバーサルモデリング言語（UML）クラスダイアグラムである。
【０１６８】
新しいデジタルモジュールのベンダであるサードパーティA（TPA）は、そのハードウェアモジュールと通信するためのソフトウェアモジュールを提供する。このソフトウェアモジュールは、標準的なインタフェースIModuleをインプリメントする。このモジュールオブジェクトをTPAPinModuleと呼ぶことにしよう。ベンダTPAは、そのモジュールにおいて、関連する所定のモジュールレベルインタフェース、この場合にはIChannelをインプリメントすることによって、ここではTesterPinとして表されている、ITesterPinインタフェースの標準的なシステムインプリメンテーションを利用することができる。これは、TesterPinがモジュールと通信するためにIChannelのような標準的な所定のモジュールレベルインタフェースを用いるという事実によって可能とされる。したがって、TPAPinModuleは、TesterPinオブジェクトを単に作り出してあらわにすることでピンを提供する。
【０１６９】
ここで、IChannelインタフェースは自分達のハードウェアとともにはうまく動作しないと判断する、異なるベンダであるサードパーティB（TPB）を考える。したがって、TPBは、彼ら自身のIModuleインプリメンテーション（TPBPinModule）だけではなく、ITesterPinインタフェースのインプリメンテーションTPBTesterPinも提供することが必要となる。
【０１７０】
このアプローチは、サードパーティディベロッパがどのようにして自分達のハードウェアを展開するかの選択およびソフトウェアのサポートにおいて、多大なフレキシビリティをサードパーティディベロッパに与える。彼らはIModuleインタフェースをインプリメントすることを求められながら、モジュールレベルインタフェースをインプリメントすることか、適合するとわかればTesterPinのようなオブジェクトをインプリメントすることかを選択し得る。
【０１７１】
実際に、ベンダは、ITesterPinインタフェースにおいてはサポートされていない拡張を提供するためにTesterPinをインプリメントすることを選択してもよい。フレームワークはユーザに、特定のインタフェースを取り出すためのメカニズムあるいはオブジェクトへのインプリメンテーションポインタを提供する。これは、ユーザコードがITesterPinポインタを有している場合に、フレームワークはそれが必要であるときにいわゆるTPBTesterPinオブジェクトをポイントしているかどうかを判断することができるということを意味している。（この特徴は標準的なC++ランタイムタイプ識別（RTTI）を介して提供されてもよいことに留意されたい。）言い換えると、テストプランがITesterPinインタフェースを要求するときには、インタフェースは、TesterPinクラスのベンダのテスタピンのインプリメンテーションを直接呼び出し、これがモジュールに特有の情報（例えば、特定のDUT刺激を与えるように設定されるべきレジスタのアドレス）を内蔵している。
【０１７２】
まとめると、フレームワークコードが常にITesterPinインタフェースを使用している間、ユーザは、必要なときにモジュールベンダによって提供される具体的な特徴および拡張を自由に使うことができる。言い換えると、モジュールベンダは、例えば、クラスの標準的なシステムインプリメンテーションに方法（機能）を付加することができる。ユーザに対するトレードオフは、具体的なベンダの拡張を活用することが他のベンダのモジュールに対するテストコードの有用性を低下させるということである。
【０１７３】
モジュールのレベルでは、試験装置１０は、名目上2つの動作モードを有している。動作のオンラインモードでは、バススイッチ１４０、同期モジュール１５０、同期接続モジュール１６０、試験モジュール１７０、ロードボード１８０、及びＤＵＴ１００を含んで構成されるモジュールエレメント２２６０（例えばハードウェアエレメント）が用いられ、動作のオフラインモードでは、バススイッチエミュレート部２４０、同期モジュールエミュレート部２５０、同期接続モジュールエミュレート部２６０、試験モジュールエミュレート部２７０、スケジュール制御部２７５、ＤＵＴ接続部２８０、及びＤＵＴシミュレート部２００を含んで構成されるソフトウェアにおけるモジュールエミュレーション２２８０が用いられる。
【０１７４】
動作のオンラインモードについて、モジュールエレメント２２６０は、図１に示したバススイッチ１４０を含むHW（ハードウェア）バックプレーン２２６１と、シャーシスロットIF（インタフェース）２２６２と、同期モジュール１５０、同期接続モジュール１６０、及び試験モジュール１７０等を含むモジュールハードウェア２２６３と、ロードボードハードウェアIF２２６４と、ロードボード１８０に対応するハードウェアロードボード２２６５と、図１０に示したＤＵＴ１００に対応するDUT２２６６とを有している。
【０１７５】
動作のオフラインモードについて、ソフトウェアでのモジュールエミュレーション２２８０は、図２に示したスケジュール制御部２７５を含むシミュレーションフレームワーク２２８１と、バススイッチエミュレート部２４０を含むバックプレーンエミュレーション２２８２と、バックプレーンシミュレーションIF２２８３と、同期モジュールエミュレート部２５０、同期接続モジュールエミュレート部２６０、及び試験モジュールエミュレート部２７０等を含むモジュールエミュレーション２２８４と、ロードボードシミュレーションIF２２８５と、ＤＵＴ接続部２８０を含むロードボードシミュレーション２２８６と、DUTシミュレーションIF２２８７を有している。2つのモデルをDUTシミュレーションに関して示す。Verilogを用いるモデルは、Verilog PLI（プログラミング言語インタフェース）２２８８とDUT Verilogモデル２２９３とを有している。C/C++を用いるモデルは、C/C++言語サポート２２８９とDUT C/C++モデル２２９１とを有している。シミュレーションは、PC等のいかなるコンピュータ上でも行うことができることに留意されたい。
【０１７６】
オンラインモードでは、モジュールベンダは、デジタルテスタチャネル、DUT電源、あるいはDC測定ユニットといった、テストをサポートするための物理的なハードウェアコンポーネントを提供する。モジュールは、シャーシスロットIF２２６２を通じてHWバックプレーン２２６１にインタフェース接続される。
【０１７７】
オフラインでの作業については、システムコントローラと等価なものを動かすPCベースあるいは他の環境が、付加的に、サイトコントローラレベルのフレームワークと、ソフトウェアのより低いレイヤのランタイム環境とを提供するとともにハードウェアをエミュレートするための全ての任務を引き受ける。
【０１７８】
バックプレーンエミュレーション２２８２は、物理的なバックプレーン２２６１のためのソフトウェアによる代理を提供する。これは、バックプレーンシミュレーションインタフェース２２８３を通して（ベンダが供給する）モジュールエミュレーションソフトウェア２２８４と通信する。
【０１７９】
モジュールエミュレーションソフトウェア２２８４は、好ましくはモジュールベンダによって提供され、典型的にはモジュール２２６３の特定のベンダインプリメンテーションと密接に結びついている。したがって、モジュールエミュレーションソフトウェアは、典型的には、異なるベンダによって供給されるモジュール間で詳細で異なっている。この場合、モジュールシミュレーションにより、ベンダは、ソフトウェアモデル（例えばモジュールエミュレーションソフトウェア２２８４）を通してハードウェアの機能をあらわにし、シミュレートされるロードボード２２８６に対して活性化信号を送り、DUTシミュレーションIF２２８７を介してDUTモデリングソフトウェア２２９１、２２９３に接続されている、シミュレートされるロードボード２２８６からのDUT応答信号を受け取って処理することが可能になる。モジュールの単純な機能シミュレーションを提供してモジュールファームウェアのエミュレーションを迂回することが有利であるとベンダが考える場合もある。モジュールエミュレーションソフトウェアは、シミュレートされたモジュール活性化信号に対するシミュレートされたDUTの応答を、既知の良好なDUT応答と比較する。この比較に基づいて、ソフトウェアは、そのモジュールによって実行されているテストが所望のとおりDUTをテストするという目標に適合しているかを判断し、ユーザがオンラインの実際のテスタ上のIC（実際のDUT）上でそれを用いるのに先立って、モジュールのデバッグを行うことを助ける。
【０１８０】
ロードボードシミュレーションインタフェース２２８５は、モジュールエミュレーションレイヤおよびシミュレートされるロードボード２２８６への、およびこれらからの信号のためのルートとして機能する。ロードボードシミュレーションコンポーネント２２８６は、デバイスソケットマッピングと、DUTシミュレーションIF２２８７への、およびそれからの信号伝達とをサポートする。
【０１８１】
DUTシミュレーションは、ネイティブコード（すなわちC/C++）シミュレーション２２９１、または対象のDUTモデル２２９３の機能モデルに対するVerilogプログラミング言語インタフェース（PLI）であってもよい。このモデルは、DUTシミュレーションインタフェース２２８７を通じて、シミュレートされるロードボードとインタフェース接続する。
【０１８２】
これらのレイヤの全体の制御はシミュレーションフレームワーク２２８１によって提供されることに留意されたい。シミュレーションフレームワークは、既知の活性化信号に対するシミュレートされたDUT応答を測定する。システムエミュレーションの方法は、米国出願第10/403,817号に開示されている。
【０１８３】
・通信および制御
通信および制御は、関連するソフトウェアオブジェクトの管理を通じて実現される。好ましくは、通信のメカニズムは、システムコントローラ上のオブジェクトモデルの後ろに隠れている。このオブジェクトモデルは、サイトコントローラ上に見られるクラスおよびオブジェクトに対してプロキシを提供し、それによって、アプリケーションの開発（例えばIC装置のテスト）のための便利なプログラミングモデルを提供する。これにより、アプリケーションの開発者（例えばATEシステムのユーザ）は、アプリケーションとサイト／システムコントローラとの間の通信の具体的な情報に関連する不要な詳細を避けることが可能である。
【０１８４】
図１１は、サイト制御装置１３０内のサイトコントローラソフトウェア２２４０に維持されているときのサイトコントローラオブジェクトの具体的な実施形態を示している。サイトコントローラオブジェクトは、CmdDispatcher２６０２、FunctionalTestMsgHandler２６０４およびFunctionalTest２６０６を有している。インタフェースは、IMsgHandler２６０８およびITest２６１０を有している。
【０１８５】
好ましくはサイトコントローラ２２４０は、アプリケーションがアクセスのために必要とする機能クラスの全てを含んでいる。これらのクラスは、例えば、テスト、モジュール、ピン等を含む。ユーザのテストおよびソフトウェアツールは典型的には異なるコンピュータ上に存在するので、メッセージは、システムコントローラ上のツールからサイトコントローラ上のサーバに送られる。このサーバは、コマンド発送オブジェクトに関する方法を必要とする。
【０１８６】
コマンド発送オブジェクト（CmdDispatcher）２６０２は、IMsgHandlerインタフェース２６０８をインプリメントするメッセージハンドラオブジェクトのマップを保持する。図１１は、IMsgHandlerの具体的なインプリメンテーションFunctionalTestMsgHandler２６０４を示している。DmdDispatcherオブジェクト２６０２によって受信されたメッセージは通信すべきオブジェクトの識別子を含んでいる。この識別子は、内部のマップにおいて見られ、具体的なインプリメンテーション、この場合には図示されているFunctionalTestMsgHandlerオブジェクト２６０４に帰着する。
【０１８７】
本例では、IMsgHandler２６０８は、単一の方法handleMessage()からなる。この方法は、好ましくは単一のインプリメンテーションクラスとしてインプリメントされる。図示されている場合においては、FunctionalTestMsgHandler２６０４は、入ってくるメッセージの正確な性質に応じて、６つの方法のうちの１つにメッセージを送る。入ってくるメッセージのヘッダは、メッセージハンドラがどのようにメッセージを解釈し、どこにメッセージを送るかを決定することを可能にするメッセージIDを含んでいる。
【０１８８】
システム制御装置１１０における対応する通信環境は、システムコントローラソフトウェア２２２０のツール２２２５、２２２６セクションに関連する。図１２は、システムコントローラソフトウェア２２２０においてシステム制御装置１１０上に保持されるツールオブジェクト（あるいはシステムコントローラオブジェクト）の一実施形態を、図１１に示したサイトコントローラオブジェクトと対応するように示している。ツールオブジェクトは、オブジェクトCmdDispatcher２７０２、FunctionalTestMsgHandler２７０４およびFunctionalTestProxy２７０６を含んでいる。インタフェースは、IMsgHandler２７０８、ITestClient２７１０、およびIDispatch２７１２を含んでいる。またユーティリティアプリケーション２７１４も含まれる。
【０１８９】
この例に関して、クラスCmdDispatcher２７０２、IMsgHandler２７０８、およびFunctionalTestMsgHandler２７０４は図１１に示したものと同じである。しかしながら、FunctionalTest２６０６（あるいは他のいかなるサイトコントローラクラス）のインスタンス化は用いられない。代わりに、ツールオブジェクトは、サイト制御装置１３０上の各オブジェクトと通信するためのプロキシクラスを有している。したがって例えば、ツールオブジェクトはFunctionalTest２６０６に代えてクラスFunctionalTestProxy２７０６を含んでいる。同様に、ツールオブジェクトにおけるITestClient２７１０は、サイトコントローラオブジェクトにおけるITest２６１０と同じではない。一般的に、サイト制御装置１３０上で動作するアプリケーションは、サイト制御装置１３０上に設けられているものそのもののようなインタフェースを用いない。この場合、ITest２６１０の3つの方法（すなわち、preExec()、execute()およびpostExec()）はITestClient２７１０における単一の方法（すなわちrunTest()）に置き換えられる。またITestClient２７１０は、好ましくはデュアルインタフェース、すなわち、IDispatch７１２を受け継ぐものであり、マイクロソフトコンポーネントオブジェクトモデル（COM）としてインプリメントされる。それは、そのインタフェースをインプリメントするオブジェクトへのスクリプトエンジンのアクセスを可能にするようなインタフェースを提供する。これによって、システムをマイクロソフトウィンドウズ（登録商標）プラットフォーム上で記述することが可能となる。
【０１９０】
図１１〜１２に示す実施形態の動作の一例として、（例えば、ツールセクション２２２６、２２２８のうちの一つにおいて）システム制御装置１１０上で動作するアプリケーションは、テストプラン２２４２が一つ以上のFunctionalTestオブジェクト２６０６を有しているようなサイト制御装置１３０と通信してもよい。サイト制御装置１３０上でのテストプラン２２４２の初期化中に、対応するテストプランオブジェクトはサイト制御装置１３０上にロードされ、TestPlanMessageHandlerオブジェクトを構成し、それをCmdDispatcherオブジェクト２６０２とともに登録する。これがメッセージハンドラに独自のIDを割り当てる。同様な動作は、テストプラン２２４２を構成する他のTestPlanオブジェクトでも起こる。
【０１９１】
システム制御装置１１０上の（例えばツール２２２６、２２２８における）アプリケーションは、通信ライブラリ２２３０を初期化し、通信チャネルを介してサイト制御装置１３０に接続し、TestPlanオブジェクトのためのIDを取得する。この初期化中に、プロキシオブジェクトは、それがテストをいくつ含んでいるかと、それらのタイプおよびIDとを決定する。それはタイプごとに（この場合には一つだけのタイプ）適切なDLLをロードし、それらに関するプロキシオブジェクトを構成し、それらをID値を用いて初期化する。
【０１９２】
TestProxyオブジェクトも初期化する。これをするために、それらは、それらの名前を（それらのID値を用いて）取得するための適切なメッセージを構成してサイト制御装置１３０の通信サーバに送信する。通信サーバは、メッセージをCmdDispatcher２６０２に渡す。このオブジェクトは、その内部マップにおいて宛先IDを調べて、FunctionalTestMsgHandler２６０４のhandleMessage()方法にメッセージを送る。例えばもしメッセージがテスト名取得の要求であれば、これらのオブジェクトは、それぞれのテスト名を取得し、適切なネーム列でアプリケーションのTestProxyオブジェクトに応答する。
【０１９３】
初期化が完了すると、アプリケーションは、TestPlanオブジェクトへのリモートアクセスと、それを通じて両方のTestオブジェクトへのリモートアクセスを有する。ユーザはここで、例えば、アプリケーション上の「テストプラン起動」のボタンを押す。その結果、アプリケーションはTestPlanProxyオブジェクト上のRunTestPlan()方法を呼び出す。この方法は、TestPlanオブジェクトの宛先IDでRunTestPlanメッセージを構成し、RPCプロキシ上でsendMessage()機能を呼び出す。この機能がサイトコントローラにメッセージを送信する。
【０１９４】
サイト制御装置１３０上の通信サーバは、CmdDispatcherオブジェクト２６０２上のhandleMessage()方法を呼び出し、TestPlanオブジェクトのIDをそれに渡す。CmdDispatcherオブジェクト２６０２はその内部マップでこのIDを調べて、TestPlanオブジェクト用のメッセージハンドラを見つけて、このオブジェクト上のhandleMessage()方法を呼び出し、これがTestPlanオブジェクト上のRunTestPlan()方法を呼び出す。同じようなやり方で、アプリケーションは名前とTestオブジェクトの最近の動作状況とを取得することができる。
【０１９５】
・通信ライブラリを用いる方法
通信ライブラリ２２３０を用いる例を以下に述べる。
通信ライブラリ２２３０は好ましくは静的なライブラリである。アプリケーションは、CommLibrary.hファイルを通してこの通信ライブラリを使用することができる。通信ライブラリクラスをエクスポートする必要があるアプリケーションは、上記インクルードファイルを含むことに加えて、定義されたプリプロセッサ定義COMMLIBRARY_EXPORTS、COMMLIBRARY_FORCE_LINKAGEを有していなければならない。通信ライブラリをインポートするアプリケーションは、プリプロセッサ定義を何も定義する必要はない。通信ライブラリがサーバとして用いられるときには、アプリケーションは、CcmdDispatcherの次の静的な関数を呼び出さなければならない：InitializeServer(unsigned long portNo)。
【０１９６】
このportNoは、サーバが要求を待たなければならないポート番号である。サーバに対応するコマンドディスパッチャは、静的な関数getServerCmdDispatcherをCcmdDispatcherクラス上に呼び出すことによって読み出される。
【０１９７】
通信ライブラリがクライアントとして用いられるときには、アプリケーションはCcmdDispatcherの静的な関数「InitializeClient(const OFCString serverAddress, unsigned long serverPortNo, CcmdDispatcher **pCmdDispatcher, OFCString serverId)」を呼び出さなければならない。
【０１９８】
このserverAddressおよびServerPortNoは、クライアントが接続しなければならないものである。この関数は、クライアント用のコマンドディスパッチャポインタおよびそれが接続するサーバIDを初期化する。また、後の時点で、クライアントは、静的な関数getClientCmdDispatcherを呼び出すことによってサーバIDに対応するコマンドディスパッチャを取り出すことができる。
【０１９９】
通信ライブラリがコンパイルされるときには、ファイルClientInterface.idlおよびServerInterface.idl上ではビルドは排除される。好ましい実施形態は、これらのインタフェース定義ファイルに関して既に生成されたスタブおよびプロキシファイルを適用して、プロキシおよびスタブインプリメンテーションファイルを同じライブラリにリンクする。したがって、サーバおよびクライアントは、同じアドレス空間内にインスタンス化される。インタフェース定義ファイルおよびスタブファイルにおける以下の変更は、好ましくは、通信ライブラリをサーバおよびクライアントとして同じアドレス空間内で動作させるために行われる。
【０２００】
・インタフェース定義ファイルにおける変更
以下のネームスペースの宣言は、好ましくは、インタフェース定義ファイルのそれぞれにおいて付加される。これは、プロキシインプリメンテーション機能とインタフェース機能の我々自身のインプリメンテーションとの名前の衝突を避けるためである。以下のネームスペースの宣言は、serverInterface.idlにおいて付加される。
【０２０１】
スタブインプリメンテーションファイルにおける関数は、インタフェースにおいて宣言された機能のための我々自身のインプリメンテーション関数を呼び出すように変更される。すなわち、我々は、インタフェースにおいて宣言された機能のそれぞれに対応する異なる名前の関数をもつことになる。
【０２０２】
関数呼び出しにおける競合を避けるために、インプリメンテーション関数の名前を「COMM_」列で始まる名前とすることが好ましい。そうすればスタブ関数におけるコードは、「functionName」に代えて「COMM_functionName」を呼び出すように変更される。
【０２０３】
この方法が動作するためには、存在する全ての機能クラスは、対応するメッセージハンドラオブジェクトおよびプロキシクラスも有していなければならない。全てのメッセージハンドラオブジェクトは、通信ライブラリによって提供されるIMsgHandlerクラスから得られなければならない。IMsgHandlerクラスは抽象的なクラスである。メッセージハンドラのインプリメンタの任務は、handleMessage、setObject、handleErrorの定義を提供することが好ましい。全てのメッセージタイプは、１から始まらなければならない（ゼロはhandleErrorのためにとっておく）。機能クラスは好ましくは、そのメンバが可変であるように対応するメッセージハンドラを有する。機能クラスのコンストラクタにおいて、機能クラスは、そのメッセージハンドラによって提供される関数を呼び出すことによって、メッセージハンドラとともに自身を登録させる。次にメッセージハンドラオブジェクトは、addMsgHandler関数をコマンドディスパッチャ上にパラメータとしてのメッセージハンドラとともに呼び出すことによって、コマンドディスパッチャとともに登録されなければならない。addMsgHandler関数は、メッセージハンドラおよび機能クラスにIDを割り当てる。機能クラスのデストラクタは、パラメータとしての機能クラス識別子を送ることによって、コマンドディスパッチャ上にremoveMsgHandler関数を呼び出さなければならない。またプロキシクラスも、機能クラスに関して説明されたように、同じ登録手順に従わなければならない。
【０２０４】
・システム構成とテスト
図１３は、本発明の一実施形態による名目上のテストシーケンス２８００を示している。テストシーケンス２８００は、テスト環境２８０４におけるモジュールのインストール２８１５を含んでおり、これはテスト準備２８０６とシステムテスト２８０８とを包含している。初めに新しいモジュール（ハードウェアまたはソフトウェアまたはこれらの組み合わせ）２８１０が（ベンダの品質管理に基づいているかもしれないいくつかの外部手順によって）認証２８１２される。インストール２８１５はまず、オフラインシミュレーション２８０９のためのハードウェアモジュールエミュレーションの設定、テストプログラム開発２８１４のためのモジュールリソースファイルおよびインタフェースの設定、ならびにパターンコンパイル２８１６のためのモジュール特有のパターンコンパイラの設定を含むテスト準備２８０６を必要とする。次にシステムテスト２８０８が、較正２８１７、診断２８１８および構成２８２０からの入力を用いて実行される。そして新しいモジュールに対して、（１）インタフェース制御、（２）同期、順序付けおよび再現性、（３）エラー／アラーム対応、（４）マルチサイト制御、ならびに（５）マルチインストゥルメントモジュール制御を含むシステムテスト２８０８が行われる。
【０２０５】
（補足説明Ｂ）ＤＵＴ１００のシステムソフトウェアのフレームワークの仕様例
Ｂ．１  概要
本仕様は、試験エミュレート装置１９０、又は、システム制御装置１１０及びサイト制御装置１３０の分散システムによるエミュレート環境（オフライン環境）を中心として、ＤＵＴ１００のシステムソフトウェアのユーザ及び開発者向けのフレームワークを示す。
【０２０６】
Ｂ．２  ユーザの仕様
本章は、試験装置１０のシステムソフトウェアの、ユーザ向けのフレームワークを示す。
Ｂ．２．１  SimTester
「SimTester（シミュレーションされた試験装置）」は、コンピュータ２０を図２に示した試験エミュレート装置１９０として機能させるアプリケーションプログラムである。SimTesterは、各モジュール及びDUTのDLLをロードして、システムソフトウェアからのコマンドに応答して試験装置をエミュレートする。ここで、システムソフトウェアは、シミュレートするパターンをロードし実行するランタイムソフトウェアである。
【０２０７】
SimTesterは、起動されると、シミュレーションコンフィギュレーションファイルを読み出す。この結果、試験エミュレート装置１９０を同期モジュールエミュレート部２５０、同期接続モジュールエミュレート部２６０、及び／又は試験モジュールエミュレート部２７０として機能させる全てのモジュールエミュレーションＤＬＬがロードされる。ＤＬＬがロードされると、SimTesterは、システム制御装置１１０からの接続を待つ。システム制御装置１１０は、テストプランをロードするとSimTesterに接続する。テストプランは、オフラインコンフィギュレーションファイルを含む。システム制御装置１１０がテストプランのデータを実際にロードする前に、オフラインコンフィギュレーションファイルをSimTesterに渡し、初期化を完了できるようにする。オフラインコンフィギュレーションファイルのロードに成功すれば、SimTesterはＤＵＴモデルをロードし、ＤＵＴ接続部２８０及びＤＵＴシミュレート部２００として試験モジュールエミュレート部２７０等のモジュールエミュレータに接続させる。この時点で、シミュレーションは、パターンの読み出し及び実行の準備ができたこととなる。
テストプランがアンロードされると、SimTesterはＤＵＴモデルをアンロードするシグナルを受け、新たなオフラインコンフィギュレーションファイルの受付を待つ。
【０２０８】
Ｂ．２．２  コンフィギュレーションファイル
SimTesterは、２つのコンフィギュレーションファイルを使用する。第１のファイルは、シミュレーションコンフィギュレーションファイルである。本ファイルは、シミュレーション中にどのようなモジュールが使用可能となるかを特定する。第２のファイルは、オフラインコンフィギュレーションファイルである。このファイルは、どのＤＵＴモデルがロードされ、どのように試験装置に接続されるかを特定する。
【０２０９】
Ｂ．２．２．１  シミュレーションコンフィギュレーションファイル
図１４から１５は、シミュレーションコンフィギュレーションファイルの一例である。シミュレーションコンフィギュレーションファイルは、階層的にブロック化されている。
グローバルセクション５０１０は、全体的な設定を行う。InitialVoltageパラメータは、シミュレーションスタート時における全ての配線の電圧の初期値を設定する。この値は、ドライブされていない配線の電圧レベルの指定にも用いられる。
RecoveryRateパラメータは、オプションのパラメータであり、２つのアナログ信号が対向してドライブされた場合に用いられる。より具体的には、当該パラメータは、２つのアナログ信号により配線がドライブされた場合に、一定の電圧レベルとなるまでに要する時間を決定するために用いられる、時間当たりの電圧変化量を示す。
モジュールエミュレーションセクション５０２０は、モジュールＤＬＬを指定し、当該モジュールＤＬＬの設定を行う。
【０２１０】
Waveformセクションは、各モジュールにおいて使用される波形モデルを宣言する。波形モデルは、ＤＵＴの端子に接続されるチャネル毎に、Step（ステップ波形）、Slew（スリュー波形）、及びAnalog（アナログ波形）等を指定する。
Portセクションは、試験エミュレート装置１９０を同期モジュールエミュレート部２５０、同期接続モジュールエミュレート部２６０、及び／又は試験モジュールエミュレート部２７０等として機能させるモジュールエミュレータのインスタンスを宣言する。
LogicalPortパラメータは、実機におけるあるチャネルの不良等により、当該チャネルに挿入されていたモジュールを他のチャネルに差替えた場合に、モジュールエミュレータ上で当該差替えを記述するために設けられる。
モジュールエミュレーションセクション５０２０にけるParamsセクションは、モジュールＤＬＬに渡すべきパラメータを記述する。
【０２１１】
Ｂ．２．２．２  オフラインコンフィギュレーションファイル
図１６から１７は、オフラインコンフィギュレーションファイルの一例である。
グローバルセクション５１１０は、全体的な設定を行う。RegSelectパラメータは、パターンのトレース時にトレースすべきレジスタを選択するファイルを指定する。
ＤＵＴモデルセクション５１２０は、ＤＵＴモデルとなるＤＬＬファイルの指定や、各種の設定を行う。
Waveformパラメータは、各ＤＵＴの端子ごとに、波形モデルを設定する。ＤＵＴブロックは、主にParamsブロックと、PinConnectionsブロックとを含む。
Paramsブロックは、モジュールＤＬＬに渡すべきパラメータを記述する。
PinConnectionsブロックは、試験装置のリソースとＤＵＴの端子との接続を指定する。すなわち例えば、「L3.11 10 1.0ns」は、論理ポート３の１１番目のリソースはＤＵＴの端子１０に接続され、配線遅延が１．０ｎｓであることを示す。ここで、論理ポートとは、例えばモジュールが実装されるポートであり、リソースとは、当該モジュール内に設けられたチャネル対応論理等である。
【０２１２】
Ｂ．３  開発者向けの仕様
試験装置のモジュールやＤＵＴモデルは、図５に示したモジュールエミュレートプログラムのフレームワークを用いて、例えばＣ＋＋言語のクラス関数から派生することにより作成される。この派生に伴い、基本クラス中の幾つかの仮想関数を実装する必要がある。また、このフレームワークは、試験装置のモジュールとＤＵＴモデルの間のＩ／Ｏの実現を容易化する関数を含む。そして、このフレームワークに従うことにより、得られたＤＬＬを試験エミュレート装置１９０上で他のコンポーネントに接続してエミュレーションを行うことができる。
【０２１３】
Ｂ．３．１  オフラインフレームワーククラスの構造
図１８は、図５に示したクラス階層構造をより詳細に記述したクラス階層構造５２００である。ThirdPartyModuleクラスやThirdPartyDUTクラス内の各メソッドは仮想メソッドであり、本モデルの振る舞いを定義するために実メソッドの実装を要する。SimComponent基本クラス内のcreateDomain、registerDomain、releaseDomain、getDomain、registerEvent、及びraiseEventメソッドは、試験エミュレート装置１９０をスケジュール制御部２７５等として機能させる、ＤＵＴ１００のソフトウェアシミュレーションエンジンをアクセスするサービスを提供する。
【０２１４】
図１９は、当該フレームワークにおいてインターフェイスとして用いられるチャネルオブジェクトの使用ダイアグラムを示す。試験装置のモジュール及びＤＵＴモデルは、SimChannelオブジェクトの配列を含む。SimChannelオブジェクトの各インスタンスは、当該モデルのＩ／Ｏチャネルに対応する。Ｉ／Ｏチャネルは、SimChanIDオブジェクトを用いて識別される。SimChannelクラスは、モジュールやＤＵＴモデルが、出力チャネルに出力すべき電圧のタイミングを書き込み、入力チャネルから特定のタイミングで電圧を読み出すために用いられる。入力チャネルからある時間ウィンドウの間に入力された信号のエッジをスキャンする場合、SimChannel::getWaveformIterメソッドを呼び出して、SimWavefromIterのインスタンスを得ることができる。そして、SimWaveformIterオブジェクトは、呼び出し側のルーチンに、有限の時間ウィンドウの全てのエッジについて繰返し処理を行うことを可能とさせる。
【０２１５】
図２０は、当該フレームワークにおいてインターフェイスとして用いられるイベントオブジェクトの使用ダイアグラムを示す。イベントは、当該フレームワークとサードパーティモデルとの間における通信に用いられる。イベントは、SimEventクラスによりカプセル化されている。SimEventのインスタンスは、SimEventMgrクラスにより生成される。一般的には、１つのモデルはSimEventMgrの１つのインスタンスを持つ。しかし、もし１つのモデルが他のモジュールに特別なイベントを送信する場合、複数のSimEventMgrインスタンスが必要となる。
【０２１６】
Ｂ．３．２  試験装置のモジュールの実装
本節では、単純なデジタルドライバモジュール及びデジタルストローブモジュールを例として、モジュールの実装方法を示す。
図２１は、試験装置のモジュールの一例として、単純なデジタルモジュールの基本クラスを示す。デジタルドライバモジュール及びデジタルストローブモジュールのクラスは、基本クラスの派生クラスとして生成する。
開発者は、当該基本クラスに基づいて、基本クラスのコンストラクタ、チャネルオブジェクトを返すgetChannelメソッド、モジュールのメモリアドレス空間を設定するsetBaseAddressメソッド、バススイッチ１４０のスロット番号を設定するsetBusNumberメソッド、割込みの禁止／許可を設定するlockInterrupt／unlockInterruptメソッド、及び、モジュールのメモリアドレス空間をアクセスするread／writeメソッド等を実装する。
【０２１７】
Ｂ．３．２．１  ローカルイベント
オフラインのシミュレーションは、イベントドリブンで行われる。すなわち、各モジュールはイベントを登録する。そして、イベントが発生するとイベントを登録したモジュールのhandleEventメソッドが呼び出される。
イベントは、SimEventクラスによって定義され、同期イベント及び非同期イベントに分類される。非同期イベントは、更にシステムイベント及びローカル非同期イベントに分類される。システムイベントは、例えばシステム割込み、及びパターン生成の終了等である。
【０２１８】
Ｂ．３．２．１．１  ローカル非同期イベント
ローカル非同期イベントは、モジュール間の通信に用いられる。このイベントには、時間は関連付けられない。非同期イベントの受信を要求する場合、モジュールは、オーバーロードされた、時間の引数を持たないregisterEventメソッドによりイベントを登録する。非同期イベントを発生する場合、モジュールは、raiseEventメソッドを呼び出す。非同期イベントを受信するモジュールは、オーバーロードされた、時間の引数を持たないhandleEventメソッド内においてイベント処理を行う。
【０２１９】
Ｂ．３．２．１．２  ローカル同期イベント
ローカル同期イベント（同期イベント）は、モジュールがリードイベント又はライトイベント、すなわち信号のストローブ又はドライブをスケジュールするために用いられる。同期イベントは、モジュールが特定のタイミングで通知を受けるために用いられ、モジュール間の通信には用いられない。
【０２２０】
Ｂ．３．３  単純なデジタルドライバモジュール
図２２は、単純なデジタルドライバモジュールのクラス宣言を示す。開発者は、当該クラスのコンストラクタ、ベンダ／モジュールの情報を返すgetModuleIDsメソッド、及び、ドライバモジュールを初期化するinitEventsメソッド等を実装する。
図２３は、デジタルドライバモジュールのhandleEventメソッドの一例である。デジタルドライバモジュールは、現在のサイクルにおいて、全てのチャネルにエッジを書き込む。この書き込みは、SimChannelオブジェクトの配列であるm_channelsの各要素におけるsetメソッドにより行われる。SimChannelオブジェクトは、setメソッドの他、offメソッド及びendメソッドを有する。offメソッドは、信号のドライブを中止する。endメソッドは、当該チャネルが所定の期間、すなわち例えばサイクル期間の信号の生成を終えたことをフレームワークに通知する。この通知を受けると、チャネルの反対側のコンポーネント、すなわち例えばＤＵＴ接続部２８０に対してチャネルの読み出しを指示するシグナルが通知される。この結果、生成した信号が当該コンポーネントによって読み出される。一般的には、使用者は、複数のsetメソッドにより所定の期間の電圧を特定した後、当該期間の最後にendメソッドを１回呼び出すことで、当該期間の信号を生成し伝搬させることができる。なお、setメソッド及びendメソッドの関係については、Ｂ．３．５において詳細に示す。
【０２２１】
Ｂ．３．４  単純なデジタルストローブモジュール
図２４は、単純なデジタルストローブモジュールのクラス宣言を示す。開発者は、デジタルドライバモジュールと同様にして、コンストラクタ、getModuleIDメソッド、initEventsメソッド等を実装する。ここで、デジタルストローブモジュールにおいては、ＤＵＴの出力値及び期待値の比較結果をフェイルメモリに格納するため、read及びwriteメソッドを変更する。
図２５は、デジタルストローブモジュールのhandleEventメソッドの一例である。デジタルストローブモジュールは、SimChannelのreadメソッドを用いて、特定のタイミングにおける当該チャネルの電圧を読み出す。そして、サイクル期間の処理を終えた後、SimEventMgrオブジェクトに次のサイクルの終了タイミングを通知しイベントの発生を要求すると共に、registerEventメソッドにより当該イベントを登録する。
【０２２２】
Ｂ．３．５  ＤＵＴモデルの実装
ＤＵＴモデルは、イベントドリブンでない点を除き、試験装置のモジュールと同様の手順により作成できる。したがって、ＤＵＴモデルの基本クラスSimComponentSteppedは、initEventsメソッド、handleEventメソッド、及びバスＩ／Ｏメソッドを実装可能とする。パターン実行の間におけるＤＵＴモデルの振る舞いを定義するために、関数runを実装する必要がある。
図２６は、試験装置によりドライブされた８本の配線が、試験装置に再度入力されるＤＵＴモデルのクラス定義を示す。開発者は、当該クラスに基づいて、コンストラクタ、getChannelメソッド、及びrunメソッド等を実装する。
【０２２３】
図２７は、本ＤＵＴモデルのrunメソッドの一例を示す。runメソッドは、開始時刻及び終了時刻の２つの引数を有する。これらの引数により、ＤＵＴモデルは、入力端子からの入力に基づいて内部状態を開始時刻から終了時刻まで進め、ＤＵＴの内部状態の変化の結果に基づいてデータを出力する。入力は、SimChannelオブジェクトを通して行われ、出力は、SimChannelオブジェクトに対して送られる。ここで、出力は、終了時刻の後にまとめて行われる。
runメソッドは、入力端子をスキャンし、ＤＵＴの内部状態を更新し、ＤＵＴの出力チャネルにデータを出力するステップを含む。ここで、実行の時間ウィンドウの外に出力信号のfallエッジが存在する場合においても、fallエッジを出力チャネルにsetメソッドにより書き込む必要がある。そして、endメソッドが呼び出される際には、出力信号はfallした状態でなければならない。これにより、出力信号の値が変化しないため、当該チャネルの反対側のコンポーネントは、終了時刻までのチャネルの電圧値を正しく読み出すことができる。これを保証するために、フレームワークは、最後のendメソッドの呼び出し後に、当該endメソッドより先の時刻についてのチャネルへの書き込みを禁止する。
【０２２４】
Ｂ．３．６  オフラインのＤＬＬインターフェイス
次に、当該フレームワークに基づくモジュール及びＤＵＴモデルのＤＬＬをビルドし、これらのモデルのインスタンスを生成する関数、及び、処理の終了後にクリーンアップする関数をエクスポートする。これにより、試験装置のモジュールをエミュレートするＤＬＬ及びＤＵＴをエミュレートするＤＬＬを生成することができる。
【０２２５】
（補足説明Ｃ）システムバスアクセスライブラリの仕様例
Ｃ．１  概要
図２８は、実環境６０００及びエミュレート環境６０５０におけるシステムバスアクセスライブラリ６０１４の位置付けを示します。ＤＵＴ１００の実環境６０００及び試験エミュレート装置１９０によるエミュレート環境６０５０において共通して用いられます。
【０２２６】
図２８（ａ）は、実環境６０００（オンライン環境）におけるシステムバスアクセスライブラリ６０１４の位置付けを示します。ソフトウェア６０１０は、図１に示したサイト制御装置１３０上で動作するソフトウェアです。ソフトウェア６０１０は、試験装置１０の試験を制御するプログラムからＨＬＣ（High Level Command）を受け取って解釈してハードウェア６０３０へのアクセスコマンドを生成するＨＬＣ処理部６０１２と、アクセスコマンドに基づいて通信処理を行う通信ライブラリ及び通信ライブラリの指示に基づきシステムバス（本例においてはＰＣＩバス）をアクセスするバスアクセスライブラリを含むシステムバスアクセスライブラリ６０１４と、システムバスアクセスライブラリ６０１４の指示に基づいてシステムバスを制御するＰＣＩバスドライバ６０１６とを含みます。
【０２２７】
ハードウェア６０３０は、図１に示したサイト制御装置１３０が有するバスＩＦ６０３２と、バススイッチ１４０と、同期モジュール１５０、同期接続モジュール１６０及び／又は試験モジュール１７０等とを含みます。サイト制御装置１３０のバススロットに接続されたバスＩＦ６０３２は、ＰＣＩバスドライバ６０１６により発行されたアクセスを、バススイッチ１４０を介して同期モジュール１５０及び／又は試験モジュール１７０等のモジュールへ送信し、当該アクセスの処理を行わせます。
【０２２８】
図２８（ｂ）は、エミュレート環境６０５０（オフライン環境）におけるシステムバスアクセスライブラリ６０１４の位置付けを示します。オフラインプロセス６０６０は、図１に示したサイト制御装置１３０又は試験エミュレート装置１９０上で動作するソフトウェアであり、試験エミュレート装置１９０をサイト制御エミュレート部２３０として機能させます。オフラインプロセス６０６０は、ソフトウェア６０１０においてハードウェア６０３０を制御する代わりに試験装置エミュレートプロセス６０８０を制御するように変更されたプロセスです。オフラインプロセス６０６０は、ソフトウェア６０１０と略同様のＨＬＣ処理部６０１２及びシステムバスアクセスライブラリ６０１４を用いて、ソフトウェア６０１０の使用者に対してソフトウェア６０１０と共通のユーザレベルインターフェイスを提供します。
【０２２９】
試験装置エミュレートプロセス６０８０は、試験装置１０をエミュレートするプロセスであり、バススイッチ１４０をエミュレートするシステムバスエミュレータ６０８４と、同期モジュール１５０、同期接続モジュール１６０、及び／又は試験モジュール１７０をエミュレートするモジュールエミュレータ６０８６とを含みます。システムバスエミュレータ６０８４は、試験エミュレート装置１９０をバススイッチエミュレート部２４０として機能させます。モジュールエミュレータ６０８６は、試験エミュレート装置１９０を同期モジュールエミュレート部２５０、同期接続モジュールエミュレート部２６０及び／又は試験モジュールエミュレート部２７０として機能させます。以下、明記しない限り、「モジュール」は、オンライン環境における同期モジュール１５０、同期接続モジュール１６０、及び試験モジュール１７０と、オフライン環境における同期モジュールエミュレート部２５０、同期接続モジュールエミュレート部２６０、及び試験モジュールエミュレート部２７０との総称として用います。
【０２３０】
Ｃ．２  モジュール制御汎用関数
本章では、サイト制御装置１３０上で動作し同期モジュール１５０、同期接続モジュール１６０、及び／又は試験モジュール１７０を制御するモジュールドライバで利用できる汎用的な機能を説明します。モジュールドライバ内では、当ライブラリを用いて各種モジュール内のレジスタやメモリをアクセスし、デバイス測定に必要なデータをリード／ライトします。本章で説明する主な機能は下記のとおりです。
1.  プログラムIOを用いたバスアクセス
2.  DMA機能を用いたバスアクセス
3.  インターラプトハンドリング
4.  ライブラリ／システムバスの制御
【０２３１】
Ｃ．２．１  プログラムＩＯを用いたバスアクセス
システムバスのアクセスは、バス上に接続された各モジュールのレジスタへMW(Machine Word)を直接に書き込む方式と、各モジュールへHLC(High Level Command) を転送する方式の２種類があります。何れの場合も、AddressとDataがシステムバス 上を流れます。各モジュール側でAddressによりHLCと認識された場合、各モジュール側でそのHLCに対応した処理を実行します。サイトCPU（サイト制御装置１３０）から各モジュールへのデータ書き込みは、サイトCPUに接続されている各モジュールへ同じデータが一斉に送出され、各モジュール側で該当するデータを取り込みます。
【０２３２】
システムバスや各モジュール内にはFIFOが配置されており、サイトCPUから各モジュールへデータを転送した場合、各モジュール のライト動作の終了を待たないでCPUのライト動作を終了します（posted write)。データが実際にレジスタに格納されるまでの時間は、CPUからターゲットのレジスタの間に存在するFIFOの空き状態によって影響を受けます。全てのモジュールに対してデータが確実に届いたことを保証する場合は、FIFOのフラッシュ待ち機能を利用してください。各モジュール内のレジスタのリードを用いてFIFOをフラッシュする場合は、リード対象のモジュールのFIFOのみフラッシュされたことが保証できます。
【０２３３】
オフラインのシステムバスエミュレータ６０８４にはFIFOはありません。そのためFIFOを持たないモジュールエミュレータ６０８６に対してPIOのライトを実行した場合、モジュールエミュレータ６０８６のレジスタにデータを格納したあと関数から戻ります。
また、オンライン同様にFIFOを持ったモジュールエミュレータ６０８６にデータを書き込むと、モジュールエミュレータ６０８６のFIFOにデータを格納した後、直ちにライト処理を終了します。
【０２３４】
Ｃ．２．１．１  プログラムＩＯを用いたライト
モジュールのレジスタに対してデータを書き込みます。サイトCPUは、書き込んだデータがモジュールに到達する前にライト動作を終了します(posted write)。
【０２３５】
・名前：BCL_GBI_write
・形式：int BCL_GBI_write(unsigned int address, unsigned int data);
・引数：address（マシンワードのアドレス）、data（書き込むデータ）
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０２３６】
Ｃ．２．１．２  プログラムＩＯを用いたリード
モジュールのレジスタのデータを読み出します。サイトCPUは、データが読み出されるまで待ちます。また、CPUからターゲットのレジスタの間に存在するFIFO内のデータがフラッシュされるまで対象レジスタのリードは待たされます。
【０２３７】
・名前：BCL_GBI_read
・形式：int BCL_GBI_read(unsigned int address, unsigned int *data);
・引数：address（マシンワードのアドレス）、data（データを読み込む変数へのポインタ）
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０２３８】
Ｃ．２．１．３  プログラムＩＯを用いたブロックライト
モジュール レジスタに対してまとまったデータを書き込みます。データのフォーマットはアドレスとデータをペアで指定します。システムバスはライトサイクルを指定された回数分実行します。
複数の任意アドレスに対してデータを書き込む場合は、毎回BCL_GBI_write()関数で書き込むよりも高速に実行することが可能です。これは、関数呼び出しが1回で済む点や複数回の排他処理が行われないためです。
【０２３９】
・名前：BCL_GBI_writeBlock
・形式：int BCL_GBI_writeBlock(unsigned int *address, unsigned int *data, unsigned int number);
・引数：address（アドレスが格納されている配列へのポインタ）、data（データが格納されている配列へのポインタ）、number（    書き込むデータの数）
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０２４０】
Ｃ．２．１．４  プログラムＩＯを用いたブロックリード
モジュールのレジスタのデータをまとまった単位で読み出します。レジスタのアドレスは不連続な値で指定が可能です。システムバスはリードサイクルを指定された回数分実行します。
複数の任意アドレスからデータを読み込む場合は、毎回BCL_GBI_read()関数で読み込むよりも高速に実行することが可能です。これは、関数呼び出しが1回で済む点や複数回の排他処理が行われないためです。
【０２４１】
・名前：BCL_GBI_readBlock
・形式：int BCL_GBI_readBlock(unsigned int *address, unsigned int *data, unsigned int number);
・引数：address（アドレスが格納されている配列へのポインタ）、data（データを読み込む配列へのポインタ）、number（読み込むデータの数）
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０２４２】
Ｃ．２．１．５  プログラムＩＯを用いた連続ブロックライト
モジュール の等間隔アドレスに配置されたレジスタに対してデータ列を書き込みます。指定された開始アドレスからデータ列を書き込み、データを書き込む毎にアドレスへオフセット値が加算されます。オフセット値は０から0x3ffffffまで指定することが可能です。システムバス はライトサイクルを指定された回数分実行します。
複数の固定オフセットアドレスに対してデータを書き込む場合は、BCL_GBI_writeBlock()関数で書き込むよりも高速に実行することが可能です。これは、アドレスの加算がハードウェアで行われることにより、PCIバス上を流れるパケット数が少なくなるためです。
【０２４３】
・名前：BCL_GBI_writeSeq
・形式：int BCL_GBI_writeSeq(unsigned int address, unsigned int *data, unsigned int number, unsigned int offset);
・引数： address（マシンワードのアドレス）、data（データが格納されている配列へのポインタ）、number（書き込むデータの数）、offset（データ転送毎にアドレスに加算されるオフセット値）
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０２４４】
Ｃ．２．１．６  プログラムＩＯを用いた連続ブロックリード
モジュール の等間隔アドレスに配置されたレジスタからデータ列を読み込みます。指定された開始アドレスからデータ列を読み出し、データを読み出す毎にアドレスへオフセット値が加算されます。オフセット値は０から0x3ffffffまで指定することが可能です。システムバス はリードサイクルを指定された回数分実行します。    
複数の固定オフセットアドレスからデータを読み込む場合は、BCL_GBI_readBlock()関数で読み込むよりも高速に実行することが可能です。これは、アドレスの加算がハードウェアで行われることにより、PCIバス上を流れるパケット数が少なくなるためです。
【０２４５】
・名前：BCI_GBI_readSeq
・形式：int BCL_GBI_readSeq(unsigned int address, unsigned int *data, unsigned int number,unsigned int offset);
・引数： address（マシンワードのアドレス）、data（データを読み込むための配列へのポインタ）、number（読み込むデータの数）、offset（データ転送毎にアドレスに加算されるオフセット値）
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０２４６】
Ｃ．２．２  DMA機能を用いたバスアクセス
DMAを用いたデータ転送には、以下の同期／非同期のライト／リードの４種類の関数を準備しています。また、それぞれについて、バーストDMA／シングルDMAを選択できます。
（１）同期／非同期DMA
同期DMAの場合、関数はDMAの終了を待って関数を終了します。DMAの終了を待って関数は終了しますが、転送データはシステムバスＩＦ やモジュール内のFIFOに残っている場合があります。
非同期DMAの場合、関数はDMAの終了を待たずに関数を終了します。このため、データ領域のライフサイクルをDMAが終了するまで利用者側で保証する必要があります。また、非同期DMAの転送が終了しないあいだに、さらにDMAを利用する関数が実行された場合、前のDMA転送が終了するまで関数は待たされます。
非同期DMA処理の完了を待つための識別情報として、転送ＩＤが用意されています。この転送ＩＤは、32ビットの符号なしデータで、32ビットを越える回数のDMA転送があった場合は、0に戻り再利用されます。
【０２４７】
（２）バースト／シングルDMA
バーストDMA転送は、システムバス 上をバースト専用のパケットでデータを転送します。この転送は、1個のアドレスとN個（最大64個）のデータを１組のパケットとして、指定されたデータが終了するまでパケットを繰り返し転送します。このため高速転送が可能です。
また、DMA転送時に各種モジュール側のアドレスの増加値を指定することができます。この増加値は、２組目以降のパケット転送時に、パケットの先頭アドレスの算出に利用します。すなわち、「(パケットのアドレス) = ( (指定した増加値) * （前回のパケット中のデータの個数）) + (前回のパケットの先頭アドレス)」となります。
また、バースト転送が可能なレジスタは、モジュール に依存しているため、利用可能なレジスタかどうかの確認が必要です。
【０２４８】
シングルDMA転送は、システムバス 上をプログラムIOと同様にアドレスとデータがセットで転送されます。このため、転送速度はバーストDMAより低いですが、どのレジスタに対しても転送が可能です。DMA転送時、システムバス側のアドレスの増加値を指定することができます。この増加値は、アドレスを発生するごとにアドレスに増加値が加算されます。
オフラインの場合、バースト転送を指定しても内部的にはシングル転送として扱う仕様もとり得ます。この場合、バースト転送をサポートしてないレジスタへの転送も可能です。しかし、オンラインでの利用を考慮すると、ハードウェアでバースト転送をサポートしてないレジスタに対しての利用は避けてください。また、オフラインの同期/非同期DMAはオンラインと同様です。
【０２４９】
Ｃ．２．２．1  DMA機能を用いた同期ライト
サイトCPUのメモリ上に配置したデータをDMAを用いて各モジュールへ転送します。この関数は、同期ライトでバースト/シングルの指定が可能です。
【０２５０】
・名前：BCL_GBI_writeSyncDMA
・形式：int BCL_GBI_writeSyncDMA(unsigned int address, unsigned int *data, unsigned int number, unsigned int offset, unsigned int mode);
・引数： address（マシンワードのアドレス）、data（データが格納されている配列へのポインタ）、number（書き込むデータの数）、offset（データ転送毎にアドレスに加算されるオフセット値）、mode（Burst/Single の動作モード）
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０２５１】
Ｃ．２．２．２  DMA機能を用いた同期リード
モジュール内のレジスタからDMAを用いてデータをサイトCPUのメモリ上へ読み出します。この関数は、同期リードでバースト/シングルの指定が可能です。
【０２５２】
・名前：BCL_GBI_readSyncDMA
・形式：int BCL_GBI_readSyncDMA(unsigned int address, unsigned int *data, unsigned int number, unsigned int offset, unsigned int mode);
・引数： address（マシンワードのアドレス）、data（データを読み込むための配列へのポインタ）、number（読み込むデータの数）、offset（データ転送毎にアドレスに加算されるオフセット値）、mode（Burst/Single の動作モード）
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０２５３】
Ｃ．２．２．３  DMA機能を用いた非同期ライト
サイトCPUのメモリ上に配置したデータをDMAを用いて各種モジュールへ転送します。この関数は、非同期ライトでバースト/シングルの指定が可能です。
【０２５４】
・名前：BCL_GBI_writeAsyncDMA
・形式：int BCL_GBI_writeAsyncDMA(unsigned int address, unsigned int *data, unsigned int number, unsigned int offset, unsigned int mode, int *transferID);
・引数： address（マシンワードのアドレス）、data（データが格納されている配列へのポインタ）、number（書き込むデータの数）、offset（データ転送毎にアドレスに加算されるオフセット値）、mode（Burst/Single の動作モード）、transferID（転送終了待ちIDのポインタ）
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０２５５】
Ｃ．２．２．４  DMA機能を用いた非同期リード
モジュール内のレジスタからDMAを用いてデータをサイトCPUのメモリ上へ読み出します。この関数は、非同期リードでバースト/シングルの指定が可能です。
【０２５６】
・名前：BCL_GBI_readAsyncDMA
・形式：int BCL_GBI_readAsyncDMA(unsigned int address, unsigned int *data, unsigned int number, unsigned int offset, unsigned int mode);
・引数： address（マシンワードのアドレス）、data（データを読み込むための配列へのポインタ）、number（読み込むデータの数）、offset（データ転送毎にアドレスに加算されるオフセット値）、mode（Burst/Single の動作モード）、transferID（転送終了待ちIDのポインタ）
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０２５７】
Ｃ．２．２．５  非同期DMA転送の終了待ち
DMAを用いた非同期転送の転送終了を待ちます。この関数は、DMAが終了した場合あるいは指定した時間が経過した場合、関数を終了します。時間の指定範囲は、分解能が1msの32ビット符号付きタイマを使用するため、0〜（INT_MAX/1000）となります。この範囲外の指定を行った場合は、BCL_GBI_INFINITEを指定したのと同じ扱いになります。
また、transferIDを誤った値で指定した場合は、すぐにBCL_GBI_OKを返し、この関数を終了します。
【０２５８】
・名前：BCL_GBI_waitDMA
・形式：int BCL_GBI_waitDMA(unsigined int transferID, double timeOut);
・引数：transferID（非同期モード転送時に返された転送終了待ちID）、timeOut（待ち時間。BCL_GBI_INFINITE : DMAが終了するまで待つ）
・戻り値：BCL_GBI_OK（DMAが正常終了）、BCL_GBI_ERROR（DMAがエラー）、BCL_GBI_TIMEOUT（タイムアウト）
【０２５９】
Ｃ．２．２．６  非同期DMA転送の状態
非同期DMA転送の現在の状態を通知します。誤ったtransferIDを指定した場合、DMAの終了と同じ状態を通知します。
【０２６０】
・名前：BCL_GBI_getConditionDMA
・形式：int BCL_GBI_getConditionDMA(unsigned int transferID);
・引数：transferID（非同期モード転送時に返された転送終了待ちID）
・戻り値：BCL_GBI_OK（DMAが正常終了）、BCL_GBI_ERROR（DMAがエラー）、BCL_GBI_BUSY（DMA実行中）
【０２６１】
Ｃ．２．３  インターラプトハンドリング
システムバス アクセスライブラリでは、インターラプトの基本的な操作を行うための機能を提供します。システムバス アクセスライブラリを利用して操作できるインターラプトには次の4種類があります。
1. Bus エラー割り込み(オンラインのみ)
最大で65個のインターラプトハンドラを登録することが可能です。
2. Bus タイムアウト割り込み
最大で65個のインターラプトハンドラを登録することが可能です。
3. Sync エラー割り込み(オンラインのみ)    
最大で65個のインターラプトハンドラを登録することが可能です。
4. 各種モジュール から発生する割り込み。
各バス番号で最大2個のインターラプトハンドラを登録することが可能です。
【０２６２】
上記の割り込みは、ともにインターラプト専用スレッドで実行されます。
システムバス I/F が発生する、Bus エラー, Bus タイムアウト, Sync エラーの割り込みは、インターラプト専用スレッドの内部でインターラプトをディセーブルし、その後、それぞれ登録されている対象のインターラプトハンドラを順次実行します。対象となるインターラプトハンドラの実行終了後、インターラプト専用スレッドはインターラプトの要因をクリアし、内部でインターラプトをイネーブルします。
【０２６３】
なお、インターラプトの受付はインターラプトスレッド内でのイネーブル/ディセーブルとは別に当ライブラリの関数でイネーブル/ディセーブルの制御が可能です。種モジュール で発生する割り込みは、インターラプト専用スレッドが内部でインターラプトをディセーブルし、当該モジュールに対してインターラプトのロックを実行します。その後、インターラプトを発生したバス番号に対応するインターラプトハンドラを順次実行します。対象となるインターラプトハンドラの実行終了後、インターラプト専用スレッドは当該モジュールに対してインターラプトの要因をクリアします。その後インターラプトのロックを解除し、内部でインターラプトをイネーブルします。
【０２６４】
なお、インターラプトの受付はインターラプトスレッド内でのイネーブル/ディセーブルとは別に当ライブラリの関数でイネーブル/ディセーブルの制御が可能です。インターラプトの禁止/許可は、システムバス I/F ボード上と、各種モジュール上で、それぞれ制御が可能です。
システムバス I/F ボード側での禁止/許可は、単純にモジュールからのインターラプトをイネーブル/ディセーブルしています。モジュール 側でのインターラプトのロック/アンロックは、モジュール側のインターラプトの発生元でインターラプトの発生を制御します。ロック中は、モジュール内で新たなインターラプトの発生を禁止し、さらにインターラプト関係のステータスの変化も禁止されています。アンロック後、モジュール側でのインターラプトの発生が可能となります。
【０２６５】
Ｃ．２．３．１  モジュールインターラプトハンドラの登録
モジュールからインターラプトが発生した時のインターラプトハンドラ関数を登録します。登録された関数はインターラプトが発生した場合、インターラプトハンドラ専用のスレッドで実行されます。インターラプトハンドラは、バス番号とともに登録し、インターラプトを上げた モジュールのバス番号と登録されているバス番号が等しいインターラプトハンドラを起動します。
【０２６６】
また、インターラプトハンドラに対して、登録時に設定した値を同時に戻します。インターラプトハンドラは、各バス番号ごとに2個登録することが可能です。バス番号は1から64まで指定可能です。登録に成功すると戻り値にキー番号が返されます。このキー番号を使用して登録を行うと、そのキー番号のインターラプトハンドラの再登録及び、削除が可能になります。キー番号を0にして登録を行うと、空いているキー番号にインターラプトハンドラが設定されます。空いているキー番号がない場合は、エラーとなり戻り値に-1が返されます。インターラプトハンドラの実行は、2個登録されている場合、若いキー番号から順に実行されます。
【０２６７】
インターラプトハンドラの削除は、コールバック関数のアドレスをBCL_GBI_IGNORE_MODULE_HANDLERとして登録します。インタラプトスレッドは、BCL_GBI_IGNORE_MODULE_HANDLERのインタラプトハンドラは実行しません。各バス番号ごとの2個のインターラプトハンドラが両方ともBCL_GBI_IGNORE_MODULE_HANDLERとなった場合は、そのバス番号のインターラプトハンドラは初期状態に戻ります。（アクセスライブラリ内の標準インターラプトハンドラが設定されます。）
【０２６８】
・名前：BCL_GBI_addInterruptHandler
・形式：int BCL_GBI_addInterruptHandler(unsigned int BusNo, int KeyNo, BCL_GBI_MODULE_HANDLER handler, unsigned int arg);    
・コールバック関数：void InterruptRoutine(unsigned int BusNo, unsigned int Factor, unsigned int arg);
・引数：BusNo（バス番号）、KeyNo（キー番号）、handler（コールバック関数のアドレス）、arg（インターラプトハンドラへ渡す値）、Factor（割り込み要因（各モジュールに依存））
・戻り値：インターラプトハンドラが登録されたキー番号（-1の場合、登録に失敗［不正なバス番号または、キー番号］）
【０２６９】
Ｃ．２．３．２  バスエラーインターラプトハンドラの登録
システムバスでエラーが発生した場合のエラー処理関数を登録します。システムバスでエラーが発生した場合、インターラプトスレッドは、登録されている関数を実行します。なお、システムバスでエラーが発生した場合、インターラプトスレッドでインターラプトをクリアします。インターラプトハンドラ内でのクリアは必要ありません。
Bus エラーのインターラプトハンドラは65個まで登録することが可能です。登録に成功すると戻り値にキー番号が返されます。このキー番号を使用して登録を行うと、そのキー番号のインターラプトハンドラの再登録及び、削除が可能になります。キー番号を0にして登録を行うと、空いているキー番号にインターラプトハンドラが設定されます。空いているキー番号がない場合はエラーとなり、戻り値に-1が返されます。インターラプトハンドラの削除は、コールバック関数のアドレスをBCL_GBI_IGNORE_BUSERROR_HANDLERとして登録します。
【０２７０】
インタラプトスレッドは、BCL_GBI_IGNORE_BUSERROR_HANDLERのインタラプトハンドラは実行しません。65個のインターラプトハンドラがすべてBCL_GBI_IGNORE_BUSERROR_HANDLERとなった場合は、初期状態に戻ります。（アクセスライブラリ内の標準インターラプトハンドラが設定されます。）Bus エラーはシステムバス上の通信エラーやハードウェアの故障などが原因となり発生します。
なお、オフラインではBusでエラーが発生する要因がないため、本関数で登録されたハンドラは動作することはありません。
【０２７１】
・名前：BCL_GBI_addBusErrorInterruptHandler
・形式：int BCL_GBI_addBusErrorInterruptHandler(int KeyNo, BCL_GBI_BUSERROR_HANDLER handler, unsigned int arg);
・コールバック関数：void BusErrorInterruptRoutine(unsigned int arg);
・引数：KeyNo（キー番号）、handler（コールバック関数のアドレス）、arg（インターラプトハンドラへ渡す値）
・戻り値：インターラプトハンドラが登録されたキー番号（-1の場合、登録に失敗［不正なバス番号または、キー番号］）
【０２７２】
Ｃ．２．３．３  バスタイムアウトインターラプトハンドラの登録
システムバスでタイムアウトが発生した場合のエラー処理関数を登録します。システムバスでタイムアウトが発生した場合、インターラプトスレッドは、登録されている関数を実行します。なお、システムバスでタイムアウトが発生した場合、インターラプトスレッドでインターラプトをクリアします。
インターラプトハンドラ内でのクリアは必要ありません。Bus タイムアウトのインターラプトハンドラは65個まで登録することが可能です。登録に成功すると戻り値にキー番号が返されます。このキー番号を使用して登録を行うと、そのキー番号のインターラプトハンドラの再登録及び、削除が可能になります。キー番号を0にして登録を行うと、空いているキー番号にインターラプトハンドラが設定されます。空いているキー番号がない場合はエラーとなり、戻り値に-1が返されます。インターラプトハンドラの削除は、コールバック関数のアドレスをBCL_GBI_IGNORE_TIMEOUT_HANDLERとして登録します。
【０２７３】
インタラプトスレッドは、BCL_GBI_IGNORE_TIMEOUT_HANDLERのインタラプトハンドラは実行しません。65個のインターラプトハンドラがすべてBCL_GBI_IGNORE_TIMEOUT_HANDLERとなった場合は、初期状態に戻ります。（アクセスライブラリ内の標準インターラプトハンドラが設定されます。）Bus タイムアウトはケーブル抜け状態でのリード時や受信先がいない場合のリード時に発生します。また、ハードウェアの故障などもその原因となります。
【０２７４】
・名前：BCL_GBI_addTimeoutInterruptHandler
・形式：int BCL_GBI_addTimeoutInterruptHandler(int KeyNo, BCL_GBI_TIMEOUT_HANDLER handler, unsigned int arg);
・コールバック関数：void TimeoutInterruptRoutine(unsigned int address, unsigned int Factor, unsigned int arg);
・引数：KeyNo（キー番号）、handler（コールバック関数のアドレス）、address（タイムアウトが発生したマシンワードのアドレス）、Factor（タイムアウトが発生した要因［BCL_GBI_FACTOR_MODULE：モジュールのリード、BCL_GBI_FACTOR_CONFIG：コンフィグレーションのリード、BCL_GBI_FACTOR_WRITE：すべてのライト］）、arg（インターラプトハンドラへ渡す値）
・戻り値：インターラプトハンドラが登録されたキー番号（-1の場合、登録に失敗［不正なバス番号または、キー番号］）
【０２７５】
Ｃ．２．３．４  Syncエラーインタラプトハンドラの登録
システムバスでSyncエラーが発生した場合のエラー処理関数を登録します。システムバスでSyncエラーが発生した場合、インターラプトスレッドは、登録されている関数を実行します。なお、システムバスでSyncエラーが発生した場合、インターラプトスレッドでインターラプトをクリアします。インターラプトハンドラ内でのクリアは必要ありません。
Syncエラーのインターラプトハンドラは65個まで登録することが可能です。登録に成功すると戻り値にキー番号が返されます。このキー番号を使用して登録を行うと、そのキー番号のインターラプトハンドラの再登録及び、削除が可能になります。キー番号を0にして登録を行うと、空いているキー番号にインターラプトハンドラが設定されます。空いているキー番号がない場合はエラーとなり、戻り値に-1が返されます。
【０２７６】
インターラプトハンドラの削除は、コールバック関数のアドレスをBCL_GBI_IGNORE_SYNCERROR_HANDLERとして登録します。インタラプトスレッドは、BCL_GBI_IGNORE_SYNCERROR_HANDLERのインタラプトハンドラは実行しません。65個のインターラプトハンドラがすべてBCL_GBI_IGNORE_SYNCERROR_HANDLERとなった場合は、初期状態に戻ります。（アクセスライブラリ内の標準インターラプトハンドラが設定されます。）
Syncエラーはソフトウェアの設定ミスやハードウェアの設計不良により発生します。また、ハードウェアの故障などもその原因となります。
オフラインではBusでSyncエラーが発生する要因がないため、本関数で登録されたハンドラは動作することはありません。
【０２７７】
・名前：BCL_GBI_addSyncErrorInterruptHandler
・形式：int BCL_GBI_addSyncErrorInterruptHandler(int KeyNo,  BCL_GBI_SYNCERROR_HANDLER handler, unsigned int arg);
・コールバック関数：void SyncErrorInterruptRoutine(unsigned int arg);
・引数：KeyNo（キー番号）、handler（コールバック関数のアドレス）、arg（インターラプトハンドラへ渡す値）
・戻り値：インターラプトハンドラが登録されたキー番号（-1の場合、登録に失敗［不正なバス番号または、キー番号］）
【０２７８】
Ｃ．２．４  ライブラリ／システムバスの制御
Ｃ．２．４．１  FIFOのフラッシュ待ち
サイトCPU に接続されているシステムバス と接続されている全てのモジュールのFIFOのフラッシュを待ちます。FIFOは、システムバス  I/F ボード内とモジュール内に存在します。この関数を終了した時、この関数の実行に入る直前のFIFO内に存在するデータが全てモジュールにライトされたことを意味します。この関数を実行中、CPUはPCIバスに対してリードサイクルを発行しているため、FIFOがフラッシュされるまでバスをハード的にロックしています。このためDMA転送やインターラプトの受け付けに遅延を生じる場合があります。また、この関数の実行によりタイムアウトが発生する場合があります。
オフラインの場合は、システムバスエミュレータのFIFOは存在しません。また、モジュール内のFIFOの存在はベンダ依存です。
【０２７９】
・名前：BCL_GBI_waitFlushFIFO
・形式：int BCL_GBI_waitFlushFIFO(void);
・引数：なし
・戻り値：BCL_GBI_OK（フラッシュ完了）、BCL_GBI_ERROR（エラー）
【０２８０】
Ｃ．２．４．２  モジュールのリセット
サイトCPUに接続されているモジュールにたいして、リセットを行います。この関数内では、下記の処理を実行します。
1. システムバス へバスリセットパケットの送出。
2. システムバス へインターラプトのクリア用パケットの送出。
3. システムバス へインターラプトのアンロックパケットの送出。
なお、リセットの動作やかかる時間については、各モジュールに依存します。
【０２８１】
・名前：BCL_GBI_resetModule
・形式：int BCL_GBI_resetModule(void);
・引数：なし
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０２８２】
Ｃ．２．４．３  ライブラリの初期化
システムバス アクセスライブラリの初期化を行います。システムバス アクセスライブラリを利用する場合、最初にこの初期化処理を実行する必要があります。また、この関数内では下記の処理を実行します。
1. アクセスライブラリの変数の初期化。
2. インターラプトハンドラを実行するためのスレッドを起動。
また、システムバス I/F 上のインターラプトはディセーブルの状態です。
オフラインの場合はこの関数でシステムバスエミュレータとのプロセス間通信の準備をします。システムバス エミュレータと30秒以内に接続が確立されないとタイムアウトになります。
【０２８３】
・名前：BCL_GBI_init
・形式：int BCL_GBI_init(unsigned int siteNo, int mode);
・引数：siteNo（サイト番号［1〜8］）、mode（オンライン／オフラインの指定。BCL_GBI_ONLINE：オンライン、BCL_GBI_OFFLINE：オフライン）
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（サイト番号が規定外）、BCL_GBI_TIMEOUT（オフラインにおいて30秒以内にシステムバス エミュレータと接続できない）
【０２８４】
Ｃ．２．４．４  ライブラリの開放
システムバス アクセスライブラリの使用終了の処理を行います。
【０２８５】
・名前：BCL_GBI_finish
・形式：int BCL_GBI_finish(unsigned int siteNo);
・引数：siteNo（サイト番号［1〜8］）
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（サイト番号が規定外）
【０２８６】
Ｃ．２．４．５  オンライン／オフラインの識別（BCL_GBI_isOnline）
現在動作中のシステムバス アクセスライブラリがオンラインで動作中か、オフラインで動作中か識別します。
【０２８７】
・名前：
・形式：int BCL_GBI_isOnline(void);
・引数：なし
・戻り値：BCL_GBI_ONLINE（オンライン）、BCL_GBI_OFFLINE（オフライン）
【０２８８】
Ｃ．２．４．６  GBSCとの通信可否の確認
システムバス I/FとGBSC（システム制御装置１１０）との通信が可能かどうかの確認をします。これにより、GBSCの電源が入っている事が確認できます。
【０２８９】
・形式：int BCL_GBI_getConnected(unsigned int *connect);
・引数：connect（通信可否の結果を格納する変数へのポインタ）
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０２９０】
Ｃ．２．４．７  詳細エラー情報の取得
システムバス アクセスライブラリがBCL_GBI_ERRORを返したときの詳細エラー情報を返します。
【０２９１】
・名前：BCL_GBI_getLastError
・形式：unsigned int BCL_GBI_getLastError(void);
・引数：なし
・戻り値：無符号の32ビットエラー情報を返します。
bit31  ：エラーコードの種別を特定する値
0: Windows（登録商標）のエラーコード（System  Error Codesを参照）
1: アクセスライブラリ固有のエラーコード
bit30-24：エラーが発生した関数内の場所を特定する値（内部情報）
bit23-16：エラーが発生したアクセスライブラリ関数を特定する値
bit15-0：エラーコード
bit31が0のとき: GetLastError()の下位16bit値
bit31が1のとき: アクセスライブラリの内部エラー値
【０２９２】
Ｃ．２．４．８  詳細エラー情報履歴の取得
現在までに使用されたシステムバス アクセスライブラリがBCL_GBI_ERRORを返したときの詳細エラー情報を最大で過去16回分まで返します。
【０２９３】
・形式：unsigned int BCL_GBI_getPreviousErrors(unsigned int *error, unsigned int size);
・名前：BCL_GBI_getPreviousErrors
・引数：error（エラー情報を格納する配列変数のポインタ。エラー情報のフォーマットはBCL_GBI_getLastError()と同様）、size    （エラー情報を格納する配列変数のサイズ）
・戻り値：格納されたエラー情報の数を返します。
【０２９４】
Ｃ．３  タイマ関数
本章では、システムバス I/Fボード上のタイマハードウェアを利用するための関数について説明します。システムバス I/F ボード上に実装されたハードウェアのタイマの分解能は1[us]です。
Ｃ．３．１  経過時間の読み出し
Ｃ．３．１．１  時間の読み出し
システムバス アクセスライブラリの初期化が実行されてからの経過時間を秒[s]で読み出します。
＜制約事項＞
分解能は1[us]ですが、double型に変換して読み出しているため、doubleの有効桁*1[us]以上の値が読み出された場合、1[us]の分解能が得られない場合があります。doubleの有効桁は10進の15桁で、理論上、システムバス アクセスライブラリを初期化してから約31年経過した場合、1[us]の分解能が得られなくなります。
ハードウェアのカウンタは64ビットで動作しているため、システムバス アクセスライブラリを初期化してから理論上約58万年後に０に戻ります。プログラム上、一定の間隔で読み出しを行った場合の差分(経過時間)は、CPUの負荷状態、PCIバスの負荷状態およびFIFOの状態により一定の値にならない場合があります。
【０２９５】
＜オフライン＞
オフラインでは、オフラインプロセスが動作するサイトCPUが起動してからの経過時間を秒[s]で読み出します。
【０２９６】
・名前：BCL_TMR_readTime
・形式：int BCL_TMR_readTime(double *time);
・引数：time（システムバス アクセスライブラリが初期化されてからの経過時間[s]）
・戻り値：BCL_TMR_OK（正常終了）
【０２９７】
Ｃ．３．１．２  タイマカウンタの読み出し
システムバス アクセスライブラリの初期化が実行されてからの経過時間をカウント値で読み出します。カウント値は1[us]経過するごとに1が加算されます。
＜制約事項＞
ハードウェアのカウンタは64ビットで動作しているため、システムバス アクセスライブラリを初期化してから理論上約58万年後に０に戻ります。また、プログラム上一定の間隔で読み出しを行った場合の差分(経過時間)は、CPUの負荷状態、PCIバスの負荷状態およびFIFOの状態により一定の値にならない場合があります。
オフラインでは、オフラインプロセスが動作するサイトCPUが起動してからの経過時間をカウント値で読み出します。
【０２９８】
・名前：BCL_TMR_readCount
・形式：int BCL_TMR_readCount(unsigned __int64 *count);
・引数：count（システムバスアクセスライブラリが初期化されてからのカウント値［1[us]/1カウント］）
・戻り値：BCL_TMR_OK（正常終了）
【０２９９】
Ｃ．３．２  時間待ち関連関数
Ｃ．３．２．１  時間待ち
指定された時間の経過後、関数は戻ります。待ち時間(time)に1[us]未満の値を指定した場合、直ちに関数は戻ります。CPUの負荷状況により指定された時間より経過時間が長く過ぎてから戻る場合があります。
オフラインでは、1[ms]未満は切捨てされた値で時間待ちを実行します。たとえば、待ち時間(time)に1[ms]未満の値を指定した場合、直ちに関数は戻ります。また、最大待ち時間は、4294967.296[s](約49日)です。
【０３００】
・名前：BCL_TMR_wait
・形式：int BCL_TMR_wait(double time);
・引数：time（待ち時間を秒単位[s]で指定）
・戻り値：BCL_TMR_OK（正常終了）、BCL_TMR_ERROR（待ちがキャンセルされた）
【０３０１】
Ｃ．３．２．２  時間待ち関数のキャンセル
現在実行中の全てのBCL_TMR_wait関数の実行をキャンセルします。複数のスレッドで動作している場合、すべてのBCL_TMR_wait関数について実行がキャンセルされます。
・名前：BCL_TMR_cancel
・形式：int BCL_TMR_cancel(void);
・引数：なし
・戻り値：BCL_TMR_OK（正常終了）
【０３０２】
Ｃ．４  コンフィグレーション／診断専用関数
本章ではハードウェアのコンフィグレーションおよびハードウェア診断で利用する関数を説明します。ハードウェアのコンフィグレーションおよびハードウェア診断以外で利用した場合、各種モジュールへのデータ転送やインターラプトの処理が正しく処理できなくなります。システムバス I/Fボード、Bus Switch 、各種モジュールなどハードウェア構造を熟知した上、ハードウェアのコンフィグレーションおよびハードウェア診断関数内で利用してください。
当ライブラリでは実行時にランタイムエラーとなりませんが、バスコンフィグレーション関数およびハードウェア診断関数以外で利用した場合、当ライブラリおよびシステムバス I/Fボードのディバイスドライバのインターラプトに関する動作は保障しません。
【０３０３】
Ｃ．４．１  コンフィグレーション制御（特殊関数）
本節で説明する関数は、システムバス I/F および 各種モジュール のコンフィグレーションで利用する関数です。不注意に操作すると各種モジュールへのデータの転送ができなくなりますので、ハードウェアやソフトウェアの構造を熟知した上、利用してください。
【０３０４】
Ｃ．４．１．１  バスコンフィグレーションライト
システムバス I/F および 各種モジュール のコンフィグレーションレジスタに対してデータを書き込みます。また、コンフィグレーションデータがシステムバス I/F および各種モジュールに格納された後、この関数を終了します。
【０３０５】
・名前：BCL_GBI_writeBusConfig
・形式：int BCL_GBI_writeBusConfig(unsigned int address, unsigned int config);
・引数：address（コンフィグレーションデータのアドレス）、config（書き込むコンフィグレーションデータ）
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０３０６】
Ｃ．４．１．２  バスコンフィグレーションリード
システムバス I/F および 各種モジュール のコンフィグレーションレジスタからデータを読み出します。
【０３０７】
・名前：BCL_GBI_readBusConfig
・形式：int BCL_GBI_readBusConfig(unsigned int address, unsigned int *config);
・引数：address（コンフィグレーションデータのアドレス）、config（コンフィグレーションデータを格納する変数へのポインタ）
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０３０８】
Ｃ．４．１．３  バススイッチコンフィグレーションの設定終了
オンラインでは、何も実行されません。
オフラインでは、バススイッチのコンフィグレーションライトを完了した際、当関数を実行することによりオフラインのバスの接続が切り替わります。
【０３０９】
・名前：BCL_GBI_decideBusMatrix
・形式：int BCL_GBI_decideBusMatrix (void);
・引数：なし
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０３１０】
Ｃ．４．２  インターラプト制御（特殊関数）
本節で説明する関数は、バスコンフィグレーションおよびハードウェア診断で利用する関数です。システムバス I/Fボード上のインターラプトを直接制御するため、不注意に操作するとシステムバス I/Fボードのディバイスドライバや当ライブラリがインターラプトの処理を正しく実行できなくなります。
【０３１１】
Ｃ．４．２．１  Bus I/Fボードインターラプトイネーブル 
各種インターラプト信号をシステムバス I/Fボード上でイネーブルにします。インターラプト信号には、各種モジュールからの割り込み、Busエラー、Busタイムアウト、Syncエラーの4種類があります。これらの信号は下記で定義されたビット情報として設定できます。複数のインターラプト信号を指定する場合は、論理和として設定します。この関数は、システムバス I/F上でインターラプトがイネーブルになったことを確認後、終了します。
【０３１２】
・名前：BCL_GBI_interruptEnable
・形式：int BCL_GBI_interruptEnable(unsigned int status);
・引数：status（インターラプト信号の指定。BCL_GBI_INT_MODULE：モジュールからの割り込み、BCL_GBI_INT_BUSERROR：Busエラー、BCL_GBI_INT_TIMEOUT：Busタイムアウト、BCL_GBI_INT_SYNCERROR：Syncエラー）
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０３１３】
Ｃ．４．２．２  Bus I/Fボードインターラプトディセーブル 
各種インターラプト信号をシステムバス I/Fボード上でディセーブルにします。インターラプト信号には、各種モジュールからの割り込み、Busエラー、Busタイムアウト、Syncエラーの4種類があります。これらの信号は下記で定義されたビット情報として設定できます。複数のインターラプト信号を指定する場合は、論理和として設定します。この関数は、システムバス I/F上でインターラプトがディセーブルになったことを確認後、終了します。
【０３１４】
・名前：BCL_GBI_interruptDisable
・形式：int BCL_GBI_interruptDisable(unsigned int status);
・引数：status（インターラプト信号の指定。BCL_GBI_INT_MODULE：モジュールからの割り込み、BCL_GBI_INT_BUSERROR：Busエラー、BCL_GBI_INT_TIMEOUT：Busタイムアウト、BCL_GBI_INT_SYNCERROR：Syncエラー）
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０３１５】
Ｃ．４．２．３  Bus I/Fボードインターラプトリード 
各種インターラプト信号をシステムバス I/Fボード上で読み込みます。インターラプト信号には、各種モジュールからの割り込み、Busエラー、Busタイムアウト、Syncエラーの4種類があります。これらの信号は下記で定義されたビット情報として読み込まれます。
【０３１６】
・名前：BCL_GBI_interruptRead
・形式：int BCL_GBI_interruptRead(unsigned int *status);
・引数：status（インターラプト信号を読み込む変数へのポインタ。BCL_GBI_INT_MODULE：モジュールからの割り込み、BCL_GBI_INT_BUSERROR：Busエラー、BCL_GBI_INT_TIMEOUT：Busタイムアウト、BCL_GBI_INT_SYNCERROR：Syncエラー）
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０３１７】
Ｃ．４．２．４  Bus I/Fボードインターラプトクリア
各種インターラプト信号をシステムバス I/Fボード上でクリアします。インターラプト信号には、各種モジュールからの割り込み、Busエラー、Busタイムアウト、Syncエラーの4種類があります。これらの信号は下記で定義されたビット情報として設定できます。複数のインターラプト信号を指定する場合は、論理和として設定します。
モジュールからの割り込み（BCL_GBI_INT_MODULE）のみが指定された場合は、この関数が実行される直前の各モジュールのFIFOをフラッシュしたあと、システムバス I/F上のインターラプトをクリアし、システムバス I/F上でインターラプトがクリアになったことを確認後、終了します。
【０３１８】
・名前：BCL_GBI_interruptClear
・形式：int BCL_GBI_interruptClear(unsigned int status);
・引数：status    （インターラプト信号の指定。BCL_GBI_INT_MODULE：モジュールからの割り込み、BCL_GBI_INT_BUSERROR：Busエラー、BCL_GBI_INT_TIMEOUT：Busタイムアウト、BCL_GBI_INT_SYNCERROR：Syncエラー）
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０３１９】
Ｃ．４．２．５  Syncするモジュール数の設定
サイトCPU に接続されているシステムバス と接続されている全てのモジュールの数をシステムバス  I/F ボード上に設定します。この設定を行うことにより、FIFOをSyncするモジュールの数が決定されます。
オフラインの場合は、システムバス エミュレータのFIFOは存在しません。また、モジュール内のFIFOの存在はベンダ依存です。
【０３２０】
・名前：BCL_GBI_setSyncCount
・形式：int BCL_GBI_setSyncCount(unsigned int number);
・引数：number（Syncするモジュールの数）
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０３２１】
Ｃ．４．２．６  インターラプトの設定状態のセーブ
システムバス I/Fボード上のインターラプト信号の設定状態（イネーブル／ディゼーブル）及び、モジュールからのインターラプト発生の設定状態（ロック／アンロック）をセーブします。この関数は、診断等でインターラプト操作を行う前に、現在の設定状態をセーブする目的で使用されます。セーブされた内容は、BCL_GBI_restoreInterruptCondition()関数でリストアされます。この関数が2回以上実行された場合は、以前にセーブされた設定状態は取り消され、最後にセーブした設定状態のみ有効となります。
オフラインでは無効な機能のため、本関数内では何も行いません。
【０３２２】
・名前：BCL_GBI_saveInterruptCondition
・形式：int BCL_GBI_saveInterruptCondition(void);
・引数：なし
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０３２３】
Ｃ．４．２．７  インターラプトの設定状態のリストア
BCL_GBI_saveInterruptCondition()関数によりセーブされたシステムバス I/Fボード上のインターラプト信号の設定状態（イネーブル／ディゼーブル）及び、各種モジュールからのインターラプト発生の設定状態（ロック／アンロック）をリストアします。この関数は、診断等でインターラプト操作を行った後に、操作前の設定状態に戻す目的で使用されます。BCL_GBI_saveInterruptCondition()関数によるセーブが行わずに本関数が実行された場合は、エラーを返します。この関数が2回以上実行されてもエラーとはならず、常に最後にセーブされた設定状態がリストアされます。
オフラインでは無効な機能のため、本関数内では何も行いません。
【０３２４】
・名前：BCL_GBI_restoreInterruptCondition
・形式：int BCL_GBI_restoreInterruptCondition(void);
・引数：なし
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０３２５】
Ｃ．４．２．８  モジュールインターラプト要因の読み出し
各種モジュールからインターラプトが発生した場合の要因とその要因数を読み出します。インターラプトの要因は最大256個（4バイト／要因）あります。このうち発生したインターラプトの要因数分だけ要因を返します。要因の読み出し用バッファは、最大要因数分のインターラプトが発生した場合を考慮して最大要因数（unsigned int型で256個）確保する必要があります。
オフラインでは無効な機能のため、本関数内では何も行いません。
【０３２６】
・名前：BCL_GBI_readInterruptFactor
・形式：int BCL_GBI_readInterruptFactor(unsigned int *Factor, int *number);
・引数：Factor（割り込み要因を読み込む配列へのポインタ）、number（割り込み要因数を格納するポインタ）
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０３２７】
Ｃ．５  非公開関数
非公開関数です。
Ｃ．５．１．１  非同期DMA転送のキャンセル(非公開)
実行中の非同期DMA転送をキャンセルします。同期DMAはキャンセルできません。また、誤ったtransfer IDを指定した場合、DMAのキャンセルは実行されず、正常終了のステータスが戻ります。
【０３２８】
・名前：BCL_GBI_cancelDMA
・形式：int BCL_GBI_cancelDMA(unsigned int transferID);
・引数：transferID（非同期モード転送時に返された転送終了待ちID）
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０３２９】
Ｃ．５．１．２  PCIベースアドレスの取得(非公開)
システムバス I/Fボードで使用するPCIバスのベースアドレスを取得します。この関数は、システムバス I/Fボードの診断等で使用されます。このアドレスは、取得したプロセスでのみ使用可能です。取得したアドレスがNULLであった場合は、本ライブラリの初期設定が行われていません。BCL_GBI_init関数によりライブラリの初期化を行ってから使用してください。
オフラインでは無効な機能のため、本関数内では何も行いません。
【０３３０】
・名前：BCL_GBI_exportPciBaseAddress
・形式：PULONG BCL_GBI_exportPciBaseAddress(void);
・引数：なし
・戻り値：NULL（エラー）、NULL以外（システムバス I/FのPCIベースアドレス）
【０３３１】
Ｃ．５．１．３  モジュールインターラプトロック(非公開)
モジュール からのインターラプトの発生を発生元で禁止します。インターラプトのロックを設定すると以後新規にインターラプトの発生をモジュール側で禁止します。なお、この関数は、各モジュールにロックが格納された後終了します。
【０３３２】
・名前：BCL_GBI_interruptLock
・形式：int BCL_GBI_interruptLock(void);
・引数：なし
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０３３３】
Ｃ．５．１．４  モジュールインターラプトアンロック(非公開)
モジュール からのインターラプトの発生を発生元で許可します。この関数を実行すると、ロック中に発生を待たされていたインターラプトやアンロック以後のインターラプトの発生が各種モジュール側で可能となります。
なお、この関数は、各モジュールにアンロックが格納された後終了します。
【０３３４】
・名前：BCL_GBI_interruptUnlock
・形式：int BCL_GBI_interruptUnlock(void);
・引数：なし
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０３３５】
Ｃ．５．１．５  詳細エラー情報の出力(非公開)
システムバス アクセスライブラリがBCL_GBI_ERRORを返したときの詳細エラー情報を標準出力ストリームに出力します。
【０３３６】
・名前：BCL_GBI_printLastError
・形式：void BCL_GBI_printLastError(void);
・引数：なし
・戻り値：なし
【０３３７】
Ｃ．５．１．６  詳細エラー情報履歴の出力(非公開)
現在までに使用されたシステムバスアクセスライブラリがBCL_GBI_ERRORを返したときの詳細エラー情報を最大で過去16回分まで標準出力ストリームに出力します。
【０３３８】
・名前：BCL_GBI_printPreviousErrors
・形式：void BCL_GBI_printPreviousErrors(void);
・引数：なし
・戻り値：なし
【０３３９】
Ｃ．５．１．７  デバッグ・モードの制御(非公開)
アクセスライブラリに実装したデバッグ・モードの制御を行います。
【０３４０】
・名前：BCL_GBI_verbose
・形式：void BCL_GBI_verbose(int val);
・引数：val（デバッグ・モードの指定）
・戻り値：なし
【０３４１】
Ｃ．５．１．８  レース機能のイネーブル(非公開)
システムバスアクセスライブラリのトレース機能をイネーブルにします。トレース機能をイネーブルにすると、バスアクセスや関数のトレースが有効となります。バスアクセスのトレースでは、アクセスしたアドレスとデータ及び、リード/ライトの識別が標準出力ストリームに表示されます。関数のトレースでは、実行された関数名が標準出力ストリームに表示されます。また、トレースを実行する関数は、任意の関数を登録して置き換える事も可能です。
【０３４２】
バスアクセスのトレースを行うアクセスライブラリの関数は以下の通りです。
BCL_GBI_write
BCL_GBI_read
BCL_GBI_writeBlock
BCL_GBI_readBlock
BCL_GBI_writeSeq
BCL_GBI_readSeq
BCL_GBI_writeSyncDMA
BCL_GBI_readSyncDMA
BCL_GBI_writeAsyncDMA
BCL_GBI_readAsyncDMA
BCL_GBI_writeConfig
BCL_GBI_readConfig
【０３４３】
関数のトレースを行うアクセスライブラリの関数は以下の通りです。
BCL_GBI_waitFlushFIFO
BCL_GBI_waitDMA
BCL_GBI_cancelDMA
BCL_GBI_conditionDMA
BCL_GBI_syncCount
BCL_GBI_resetModule
【０３４４】
・名前：BCL_GBI_ioTraceEnable
・形式：int BCL_GBI_ioTraceEnable(void);
・引数：なし
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０３４５】
Ｃ．５．１．９  トレース機能のディセーブル(非公開)
システムバスアクセスライブラリのトレース機能をディセーブルにします。トレース機能をディセーブルにすると、バスアクセスや関数のトレースが無効となります。
【０３４６】
・名前：BCL_GBI_ioTraceDisable
・形式：int BCL_GBI_ioTraceDisable(void);
・引数：なし
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０３４７】
Ｃ．５．１．１０  トレース機能のアドレスフィルタ指定(非公開)
バスアクセスのトレース機能に関するアドレスフィルタの指定を行います。フィルタの指定方法は、モードによって単一指定または、連続指定が可能です。指定できる組み合わせは最大で16通りの指定が可能です。トレース機能がイネーブルとなっている場合は、この組み合わせのいずれかに該当したアドレスのみトレース対象となります。
【０３４８】
・名前：BCL_GBI_ioTraceAddress
・形式：int BCL_GBI_ioTraceAddress(int mode, …);
【０３４９】
int BCL_GBI_ioTraceAddress(0);
【０３５０】
int BCL_GBI_ioTraceAddress(1, addr);
【０３５１】
int BCL_GBI_ioTraceAddress(2, start_addr, stop_addr);
・引数：mode（フィルタ・モードの指定。0: フィルタ指定の解除、1: 単一アドレス指定、2: 連続アドレス指定）、addr（単一アドレス指定時の対象アドレス）、start_addr（連続アドレス指定時の開始アドレス）、stop_addr（連続アドレス指定時の終了アドレス）
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０３５２】
Ｃ．５．１．１１  トレース機能の設定情報出力(非公開)
現在設定されているトレース機能に関する設定情報を標準出力ストリームに出力します。トレースのイネーブル／ディセーブル状態やアドレスフィルタの設定状態を確認する事が出来ます。
【０３５３】
・名前：BCL_GBI_ioTraceShow
・形式：int BCL_GBI_ioTraceShow(void);
・引数：なし
・戻り値：なし
【０３５４】
Ｃ．５．１．１２  トレース機能の簡易ヘルプ情報出力(非公開)
トレース機能に関する簡易ヘルプ情報を標準出力ストリームに出力します。
【０３５５】
・名前：BCL_GBI_ioTraceHelp
・形式：int BCL_GBI_ioTraceHelp(void);
・引数：なし
・戻り値：なし
【０３５６】
Ｃ．５．１．１３  トレース関数の登録(非公開)
トレース機能を実行するデフォルトのトレース関数を任意のトレース関数に置き換えます。トレース機能がイネーブルとなっていれば、直後のトレース対象のアクセスライブラリ関数から登録された関数が実行されます。登録できる関数は１個で、既に登録されている場合は、上書きで登録されます。デフォルトのトレース関数に戻す場合は、BCL_GBI_ioTraceResetHandler関数を実行します。
【０３５７】
トレースが行われるアクセスライブラリの関数は以下のとおりです。
BCL_GBI_write
BCL_GBI_read
BCL_GBI_writeBlock
BCL_GBI_readBlock
BCL_GBI_writeSeq
BCL_GBI_readSeq
BCL_GBI_writeSyncDMA
BCL_GBI_readSyncDMA
BCL_GBI_writeAsyncDMA
BCL_GBI_readAsyncDMA
BCL_GBI_writeConfig
BCL_GBI_readConfig
BCL_GBI_waitFlushFIFO
BCL_GBI_waitDMA
BCL_GBI_cancelDMA
BCL_GBI_conditionDMA
BCL_GBI_syncCount
BCL_GBI_resetModule
【０３５８】
・名前：BCL_GBI_ioTraceHandler
・形式：void BCL_GBI_ioTraceHandler(BCL_GBI_TRACE_HANDLER handler, void *arg);
・引数：handler（コールバック関数のアドレス）、arg（トレースハンドラへ渡す値）
・戻り値：なし
・戻り値：BCL_GBI_OK（正常終了）、BCL_GBI_ERROR（エラー）
【０３５９】
Ｃ．５．１．１４  デフォルトのトレース関数の登録(非公開)
BCL_GBI_ioTraceHandler関数により置き換えられた任意のトレース関数をデフォルトのトレース関数に戻します。
【０３６０】
・名前：BCL_GBI_ioTraceResetHandler
・形式：void BCL_GBI_ioTraceResetHandler(void);
・引数：なし
・戻り値：なし
【０３６１】
Ｃ．５．１．１５  デフォルトのトレース関数の実行(非公開)
BCL_GBI_ioTraceHandler関数により登録された任意のトレース関数からデフォルトのトレース関数を実行します。
【０３６２】
・名前：BCL_GBI_ioTraceExecuteDefaultHandler
・形式：void BCL_GBI_ioTraceExecuteDefaultHandler(int cmd, unsigned int address, unsigned int data, void *arg);
・引数：cmd（トレース対象となる関数）、address（トレース対象のアドレス）、data（トレース対象のデータ）、arg（トレースハンドラに引き渡された引数）
・戻り値：なし
【図面の簡単な説明】
【０３６３】
【図１】本発明の実施形態に係る試験装置１０の構成を示す。
【図２】本発明の実施形態に係る試験エミュレート装置１９０の機能構成を示す。
【図３】本発明の実施形態に係るコンピュータ２０のハードウェア構成の一例を示す。
【図４】本発明の実施形態に係る試験モジュールエミュレート部２７０の機能構成を示す。
【図５】本発明の実施形態に係るクラス階層構造５００の一例を示す。
【図６】本発明の実施形態に係る試験エミュレート装置１９０の試験信号生成処理フローを示す。
【図７】本発明の実施形態に係る試験エミュレート装置１９０により擬似的に生成される試験信号の一例を示す。
【図８】本発明の実施形態によるソフトウェアアーキテクチャを示している。
【図９】本発明の実施形態によるテストクラスの使用を示している。
【図１０】本発明の実施形態による、テスタシステムと異なるベンダが提供するモジュールリソースとの相互作用を示す統一モデリング言語（UML）ダイアグラムである。
【図１１】サイトコントローラによって保持されているときのユーザのテストを管理するためのサイトコントローラオブジェクトの一実施形態を示している。
【図１２】図１１に示されているサイトコントローラオブジェクトを表しているシステムコントローラ側のオブジェクトの代理の一実施形態を示している。
【図１３】本発明の実施形態によるテスト環境を示している。
【図１４】本発明の実施形態に係るシミュレーションコンフィギュレーションファイルの一例を示す第１の図である。
【図１５】本発明の実施形態に係るシミュレーションコンフィギュレーションファイルの一例を示す第２の図である。
【図１６】本発明の実施形態に係るオフラインコンフィギュレーションファイルの一例を示す第１の図である。
【図１７】本発明の実施形態に係るオフラインコンフィギュレーションファイルの一例を示す第２の図である。
【図１８】本発明の実施形態に係るクラス階層構造５２００の一例を示す。
【図１９】本発明の実施形態に係るチャネルオブジェクトの使用ダイアグラムを示す。
【図２０】本発明の実施形態に係るイベントオブジェクトの仕様ダイアグラムを示す。
【図２１】本発明の実施形態に係るデジタルモジュールの基本クラスの一例を示す。
【図２２】本発明の実施形態に係るデジタルドライバモジュールのクラス宣言の一例を示す。
【図２３】本発明の実施形態に係るデジタルドライバモジュールのhandleEventメソッドの一例を示す。
【図２４】本発明の実施形態に係るデジタルストローブモジュールのクラス宣言を示す。
【図２５】本発明の実施形態に係るデジタルストローブモジュールのhandleEventメソッドの一例を示す。
【図２６】本発明の実施形態に係るＤＵＴモデルのクラス定義の一例を示す。
【図２７】本発明の実施形態に係るＤＵＴモデルのrunメソッドの一例を示す。
【図２８】実環境６０００及びエミュレート環境６０５０におけるシステムバスアクセスライブラリ６０１４の位置付けを示す。
【符号の説明】
【０３６４】
１０  試験装置、２０  コンピュータ、１００ａ〜ｂ  ＤＵＴ、１１０  システム制御装置、１２０  通信ネットワーク、１３０ａ〜ｃ  サイト制御装置、１４０  バススイッチ、１５０ａ〜ｂ  同期モジュール、１６０ａ〜ｂ  同期接続モジュール、１７０ａ〜ｂ  試験モジュール、１８０  ロードボード、１９０  試験エミュレート装置、２００  ＤＵＴシミュレート部、２３０  サイト制御エミュレート部、２４０  バススイッチエミュレート部、２５０  同期モジュールエミュレート部、２６０  同期接続モジュールエミュレート部、２７０ａ〜ｂ  試験モジュールエミュレート部、２７５  スケジュール制御部、２７６  タイミング整列部、２７７  スケジュール部、２８０  ＤＵＴ接続部、３００  ＣＰＵ、３１０  ＲＯＭ、３２０  ＲＡＭ、３３０  通信インターフェイス、３４０  ハードディスク・ドライブ、３５０  フレキシブルディスク・ドライブ、３６０  ＣＤ−ＲＯＭドライブ、３９０  フレキシブルディスク、３９５  ＣＤ−ＲＯＭ、４００  試験モジュールＩＦエミュレート部、４１０  制御関数処理部、４２０  マシンワードＤＢ、４３０  パターン発生器エミュレート部、４４０  波形整形器エミュレート部、４５０  ピン制御エミュレート部、４６０  パラメータ測定エミュレート部、５００  クラス階層構造、５１０  シミュレーションコンポーネントクラス、５１２  仮想ハードウェアエミュレート関数、５１４  仮想制御関数、５２０  Ａ社モジュールクラス、５２２  実ハードウェアエミュレート関数、５２４  実制御関数、５３０  Ｂ社モジュールクラス、５４０  デジタル試験モジュールクラス、５５０  ２５０ＭＨｚデジタル試験モジュールクラス、５６０  電源モジュールクラス、５７０  高電圧電源モジュールクラス、５８０  低電圧電源モジュールクラス、５９０  同期モジュールクラス、２２００  ソフトウェアアーキテクチャ、２２２０  システムコントローラ、２２２２  標準インターフェイス、２２２４  フレームワーククラス、２２２５  ツール、２２２６  ツール、２２３０  SYSC-SITEC通信ライブラリ、２２４０  サイトコントローラ、２２４２  ユーザテストプラン、２２４３  ユーザテストクラス、２２４４  標準テストクラス、２２４５  標準インターフェイス、２２４６  フレームワーククラス、２２４７  モジュールレベルインターフェイス、２２４８  モジュールコマンドインプリメンテーション、２２４９  バックプレーン通信ライブラリ、２２５０  ＰＣＩバックプレーンドライバ、２２６０  モジュール、２２６１  ＨＷバックプレーン、２２６２  シャシースロットIF、２２６３  モジュールハードウェア、２２６４  ロードボードハードウェアIF、２２６５  ハードウェアロードボード、２２６６  ＤＵＴ、２２８０  ＳＷモジュールエミュレーション、２２８１  シミュレーションフレームワーク、２２８２  バックプレーンエミュレーション、２２８３  バックプレーンシミュレーションIF、２２８４  モジュールエミュレーション、２２８５  ロードボードシミュレーションIF、２２８６  ロードボードシミュレーション、２２８７  ＤＵＴシミュレーションIF、２２８８  Verilog PLI、２２８９  C/C++、２２９０  インターフェイス、２２９１  DUT C/C++モデル、２２９２  ユーザ、２２９３  DUT Verilogモ���ル、２２９４  システム、２２９６  モジュール開発、２２９８  外部、２８０４  テスト環境、２８０６  テスト準備、２８０８  システムテスト、２８０９  オフラインシミュレーション、２８１０  新しいＨＷ／ＳＷモジュール、２８１２  認証、２８１４  テストプログラム開発、２８１５  インストール、２８１６  パターンコンパイル、２８１７  較正、２８１８  診断、２８２０  構成、５０００  シミュレーションコンフィギュレーションファイル、５０１０  グローバルセクション、５０２０  モジュールエミュレーションセクション、５１００  オフラインコンフィギュレーションファイル、５１１０  グローバルセクション、５１２０  ＤＵＴモデルセクション、５２００  クラス階層構造、６０００  実環境、６０１０  ソフトウェア、６０１２  ＨＬＣ処理部、６０１４  システムバスアクセスライブラリ、６０１６  ＰＣＩバスドライバ、６０３０  ハードウェア、６０３２  バスＩＦ、６０５０  エミュレート環境、６０６０  オフラインプロセス、６０８０  試験装置エミュレートプロセス、６０８４  システムバスエミュレータ、６０８６  モジュールエミュレータ
【図１】
2005285092.tif 000003
【図２】
2005285092.tif 000004
【図３】
2005285092.tif 000005
【図４】
2005285092.tif 000006
【図５】
2005285092.tif 000007
【図６】
2005285092.tif 000008
【図７】
2005285092.tif 000009
【図８】
2005285092.tif 000010
【図９】
2005285092.tif 000011
【図１０】
2005285092.tif 000012
【図１１】
2005285092.tif 000013
【図１２】
2005285092.tif 000014
【図１３】
2005285092.tif 000015
【図１４】
2005285092.tif 000016
【図１５】
2005285092.tif 000017
【図１６】
2005285092.tif 000018
【図１７】
2005285092.tif 000019
【図１８】
2005285092.tif 000020
【図１９】
2005285092.tif 000021
【図２０】
2005285092.tif 000022
【図２１】
2005285092.tif 000023
【図２２】
2005285092.tif 000024
【図２３】
2005285092.tif 000025
【図２４】
2005285092.tif 000026
【図２５】
2005285092.tif 000027
【図２６】
2005285092.tif 000028
【図２７】
2005285092.tif 000029
【図２８】
2005285092.tif 000030