(57)【要約】【課題】マルチスレッドに関する知識を有しなくとも試験時間を短縮し得る試験プログラムを作成することができるとともに、その試験プログラムの作成及びデバッグに要する時間を短縮することができる半導体試験装置を提供する。【解決手段】半導体試験装置１は、ＤＵＴ５０ａ，５０ｂの試験をして得られたデータを解析する解析装置３０を備える。この解析装置３０は、ユーザによって作成されたテストプログラムＴＰに記述された所定の処理をマルチスレッド化するマルチスレッド化ライブラリＭＬを備えており、データメモリ２１に記憶されたデータを処理する場合に、マルチスレッド化ライブラリＭＬを用いてＣＰＵ２３ａ，２３ｂの数に応じたスレッドを生成し、これらのスレッドの処理をＣＰＵ２３ａ，２３ｂでそれぞれ並行して実行する。【選択図】図１
2010014423.tif 000002
【特許請求の範囲】
【請求項１】
半導体デバイスを試験して得られるデータを、ユーザによって作成された試験プログラムに従って解析する解析装置を備える半導体試験装置において、
前記解析装置は、前記試験プログラムの内容に従って前記データに対する解析処理を実行する複数の解析処理手段と、
前記試験プログラムに記述された前記解析処理に関する所定の処理を、前記解析処理手段の数に応じた複数の処理単位で前記解析処理手段の各々に並行して実行させる実行手段と
を備えることを特徴とする半導体試験装置。
【請求項２】
前記実行手段は、前記半導体デバイス毎に得られるデータの解析処理の各々を、前記複数の処理単位として前記解析処理手段の各々に並行して実行させることを特徴とする請求項１記載の半導体試験装置。
【請求項３】
前記実行手段は、前記半導体デバイスの数が前記解析処理手段の数よりも多い場合には、前記解析処理手段の数を単位として、順次異なる前記半導体デバイスに関するデータの解析処理を実行させることを特徴とする請求項２記載の半導体試験装置。
【請求項４】
前記実行手段は、前記試験プログラムに記述された前記所定の処理に係る前記複数の処理単位を複数のスレッドとして生成することを特徴とする請求項１から請求項３の何れか一項に記載の半導体試験装置。
【請求項５】
前記実行手段は、前記試験プログラムに動的に関連付けられるライブラリとして実装されることを特徴とする請求項４記載の半導体試験装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体デバイスの試験を行う半導体試験装置に関する。
【背景技術】
【０００２】
半導体試験装置は、半導体デバイス（以下、ＤＵＴ（Device Under Test）という）に対して試験パターンを印加し、ＤＵＴの出力信号と予め定められた期待値（閾値）とを比較してＤＵＴの良、不良を試験する。近年においては、試験に要するコストを含めた半導体デバイスの製造コストの低減が要求されており、このためにＤＵＴの試験を短時間で効率的に行う必要がある。
【０００３】
しかしながら、近年においては、ＤＵＴの多機能化等によって試験に要する時間が長くなる傾向がある。例えば、ＬＣＤ（Liquid Crystal Display：液晶表示ディスプレイ）は高精細化に伴って階調数が増加しているため、ＬＣＤの駆動ドライバに試験パターンを印加してＤＵＴからの出力信号を得るのに要する時間のみならず、ＤＵＴからの出力信号が所定の範囲に収まっているか否かを解析（判定）するのに要する時間も長くなる。具体的には、現在の階調数は６４階調（６ビット）又は２５６階調（８ビット）が主流であるが、階調数が１０２４階調（１０ビット）又は４０９６階調（１２ビット）に増やされると、解析処理に必要な時間は数倍〜十数倍程度長くなる。
【０００４】
ここで、上記の解析処理を１つのＣＰＵ（中央処理装置）で行っていたのでは解析処理に要する時間の大幅な短縮を望むことができない。これは、ＣＰＵの動作周波数の向上（クロックアップ）が限界にきており、これ以上の動作周波数の向上は困難だからである。そこで、複数のＣＰＵ又は複数のコアを有するＣＰＵを用いて解析処理を各々のＣＰＵ（又は各々のコア）で並行して行うことで、解析処理に要する時間の短縮が図られている。しかしながら、単純にＣＰＵやコアの数を増加しただけでは時間短縮を図ることはできず、ユーザが上記の解析処理を複数のＣＰＵの各々に実行させるための試験プログラムを自ら作成する必要がある。
【０００５】
図５は解析処理を１つのＣＰＵで行う場合に用いられる従来の試験プログラムの簡単な例を示す図であり、図６は解析処理を２つのＣＰＵで行う場合に用いられる従来の試験プログラムの簡単な例を示す図である。尚、図５，図６に示す試験プログラムは共に、ユーザによって作成されるものであり、２つのＤＵＴ（ＤＵＴ１，ＤＵＴ２）を試験した得られたデータ（サンプリングデータ）から各々のＤＵＴに係るデータをそれぞれ取り出し、そのデータが予め設定された閾値（lower_limit，upper_limit）の範囲内に収まってるか否かを判定するサブルーチンに係るものである。尚、図５，図６中の行番号は説明の便宜のために付したものであり、実際の試験プログラムの行番号を示すものではない。
【０００６】
まず、図５に示す試験プログラムは、第１〜第５行目に関数csub()が記述され、第６〜第９行目に関数dut1_culc()が記述され、第１０〜第１３行目に関数dut2_culc()が記述されている。上記関数csub()は、上記のサブルーチンで行われる処理の概要が定義された関数であり、第２行目に記述された関数Y_GetRawData()の処理、第３行目に記述された関数dut1_culc()の処理、第４行目に記述された関数dut2_culc()の処理が順に行われることが定義されている。ここで、第２行目に記述された関数Y_GetRawData()は、ＤＵＴ（ＤＵＴ１，ＤＵＴ２）を試験して得られたデータを、引数で指定される変数（transdata）に格納する関数である。
【０００７】
第３行目に記述された関数dut1_calc()の具体的内容は第６〜第９行目で定義されており、第４行目に記述された関数dut2_calc()の具体的内容は第１０〜第１３行目で定義されている。関数dut1_calc()では、第７行目に記述された関数ary_index()の処理、及び第８行目に記述された関数ary_mcmp()の処理が順に行われ、関数ary_mcmp()の結果が変数resultに格納されることが定義されている。ここで、上記の関数ary_index()は、第１引数で指定される変数（transdata）から、第２引数で指定される対象（index_dut1）係るデータのみを取り出して第３引数で指定される変数（pos_data1）に格納する処理を行う関数である。また、上記の関数ary_mcmp()は、第１引数で指定される変数（pos_data1）に格納されたデータが、第２，第３引数で指定される閾値（lower_limit，upper_limit）の範囲内に収まってるか否かを判定する関数である。
【０００８】
関数dut2_calc()では、関数dut1_calc()と同様に、関数ary_index()の処理（第１１行）及び関数ary_mcmp()の処理（第１２行）が順に行われ、関数ary_mcmp()の結果が変数resultに格納されることが定義されている。但し、関数dut2_calc()においては、関数ary_index()の第３引数及び関数ary_mcmp()の第１引数に変数（pos_data2）が指定され、関数ary_index()の第２引数に対象（index_dut2）が指定されている点が関数dut1_calc()とは相違する。
【０００９】
図５に示す試験プログラムが実行されると、まず第２行目に記述された処理にてＤＵＴ（ＤＵＴ１，ＤＵＴ２）を試験して得られたデータが変数transdataに格納される。次に、第３行目に記述された処理にて変数transdataからＤＵＴ１に係るデータが取り出され、その取り出されたデータが予め設定された閾値（lower_limit，upper_limit）の範囲内に収まってるか否かが判定され、その判定結果が変数resultに格納される。以上の処理が終了すると、第４行目に記述された処理にて変数transdataにからＤＵＴ２に係るデータが取り出され、その取り出されたデータが予め設定された閾値（lower_limit，upper_limit）の範囲内に収まってるか否かが判定され、その判定結果が変数resultに格納される。このように、図５に示す試験プログラムでは、ＤＵＴ１に係るデータの判定とＤＵＴ２に係るデータの判定とが順次実行される。
【００１０】
図６に示す試験プログラムには、関数csub()、関数dut1_culc()、及び関数dut2_culc()が、第１〜第７行目、第８〜第１１行目、第１２〜第１５行目にそれぞれ記述されている。ここで、関数dut1_culc()及び関数dut2_culc()は図５，図６間で同じであるが、関数csub()の内容は図５，図６間で異なる。つまり、図６に示す試験プログラムでは、解析処理を２つのＣＰＵで並行して実行させるために、第３行目〜第６行目にマルチスレッドを実現させる記述がなされている。
【００１１】
図６に示す試験プログラムでは、第３行目において第３引数で指定された関数（dut1_culc()）を実行するためのスレッドを生成する関数pthread_create()が記述されており、また第４行目において第３引数で指定された関数（dut2_culc()）を実行するためのスレッドを生成する関数pthread_create()が記述されている。第５，第６行目には、それぞれ第３，４行目に記述された処理にて生成されたスレッドが終了するまで待機させる関数pthread_join()が記述されている。
【００１２】
図６に示す試験プログラムが実行されると、まず第２行目に記述された処理にてＤＵＴ（ＤＵＴ１，ＤＵＴ２）を試験して得られたデータが変数transdataに格納される。次に、第３，第４行目に記述された処理にて関数dut1_culc()及び関数dut2_culc()を実行するためのスレッドが順次生成される。これにより、関数dut1_culc()で定義された処理と、関数dut2_culc()で定義された処理とが、それぞれ異なるＣＰＵで並列して実行され、データの解析処理に要する時間を約半分にすることができる。
【００１３】
尚、従来の半導体試験装置の詳細については、例えば以下の特許文献１，２を参照されたい。
【特許文献１】特開平１０−３３２７７７号公報
【特許文献２】特開２００２−２０７０６７号公報
【発明の開示】
【発明が解決しようとする課題】
【００１４】
ところで、上述したマルチスレッドを実現する試験プログラムを作成することにより、半導体デバイスの試験に要する時間を短縮することはできる。しかしながら、試験プログラムは基本的にユーザによって作成されるものであるため、ユーザがマルチスレッドを実現するためのプログラミング知識を有していなければ、試験時間を短縮し得る試験プログラム自体を作成することができないという問題があった。
【００１５】
また、図５，図６では、理解を容易にするために簡略化した試験プログラムを図示しているが、マルチスレッドを実現する実際の試験プログラムは非常に複雑なものになるため、従来よりも試験プログラムの作成に時間を要するという問題があった。更に、試験プログラムの複雑化によってデバッグ時の確認事項が増大するとともに、マルチスレッドによって複数のスレッドが並行して実行される状況においては、デバッグに長時間を要するという問題があった。
【００１６】
本発明は上記事情に鑑みてなされたものであり、マルチスレッドに関する知識を有しなくとも試験時間を短縮し得る試験プログラムを作成することができるとともに、その試験プログラムの作成及びデバッグに要する時間を短縮することができる半導体試験装置を提供することを目的とする。
【課題を解決するための手段】
【００１７】
上記課題を解決するために、本発明の半導体試験装置は、半導体デバイス（５０ａ、５０ｂ）を試験して得られるデータを、ユーザによって作成された試験プログラム（ＴＰ）に従って解析する解析装置（３０）を備える半導体試験装置（１）において、前記解析装置は、前記試験プログラムの内容に従って前記データに対する解析処理を実行する複数の解析処理手段（２３ａ、２３ｂ）と、前記試験プログラムに記述された前記解析処理に関する所定の処理を、前記解析処理手段の数に応じた複数の処理単位で前記解析処理手段の各々に並行して実行させる実行手段（ＭＬ）とを備えることを特徴としている。
この発明によると、試験プログラムに記述された解析処理に関する所定の処理が実行されるときには、その所定の処理が解析処理手段の数に応じた複数の処理単位で解析処理手段の各々で並行して実行される。
また、本発明の半導体試験装置は、前記実行手段が、前記半導体デバイス毎に得られるデータの解析処理の各々を、前記複数の処理単位として前記解析処理手段の各々に並行して実行させることを特徴としている。
また、本発明の半導体試験装置は、前記実行手段が、前記半導体デバイスの数が前記解析処理手段の数よりも多い場合には、前記解析処理手段の数を単位として、順次異なる前記半導体デバイスに関するデータの解析処理を実行させることを特徴としている。
また、本発明の半導体試験装置は、前記実行手段が、前記試験プログラムに記述された前記所定の処理に係る前記複数の処理単位を複数のスレッドとして生成することを特徴としている。
また、本発明の半導体試験装置は、前記実行手段が、前記試験プログラムに動的に関連付けられるライブラリとして実装されることを特徴としている。
【発明の効果】
【００１８】
本発明によれば、試験プログラムに記述された解析処理に関する所定の処理を実行する場合に、その所定の処理を解析処理手段の数に応じた複数の処理単位で解析処理手段の各々で並行して実行しているため、ユーザが試験プログラムでマルチスレッドを実現する記述をする必要はない。これにより、ユーザがマルチスレッドに関する知識を有しなくとも試験時間を短縮し得る試験プログラムを作成することができるとともに、その試験プログラムの作成及びデバッグに要する時間を短縮することができるという効果がある。
【発明を実施するための最良の形態】
【００１９】
以下、図面を参照して本発明の一実施形態による半導体試験装置について詳細に説明する。図１は、本発明の一実施形態による半導体試験装置の要部構成を示すブロック図である。図１に示す通り、本実施形態の半導体試験装置１は、テストヘッド１０と試験装置本体２０とを備えており、テストヘッド１０上に載置されるＤＵＴ５０ａ，５０ｂに試験信号を印加し、これらＤＵＴ５０ａ，５０ｂから出力される信号と所定の期待値（閾値）とを比較してパス／フェイルを求めることによりＤＵＴ５０ａ，５０ｂの良、不良を試験する。
【００２０】
尚、本実施形態では、ＤＵＴ５０ａ，５０ｂが多数のピンを備えており、階調を指定する階調信号が入力されると、その階調に応じた電圧（アナログ信号）を所定のピンから出力するＬＣＤの駆動ドライバであるものとする。このため、半導体試験装置１は、ＤＵＴ５０ａ，５０ｂに階調信号を印加して得られるアナログ信号を用いて試験を行う試験装置（ＬＣＤドライバテスタ）である。尚、図１においては、図面を簡略化するために、ＤＵＴ５０ａ，５０ｂに対して階調信号の印加を行う構成については図示を省略している。この半導体試験装置１は、２つのＤＵＴ５０ａ，５０ｂの試験を並行して実行可能であるとする。
【００２１】
テストヘッド１０は、ＤＵＴ５０ａ，５０ｂの各々から出力されるアナログ信号をディジタル信号に変換するＡ／Ｄ変換器１１ａ，１１ｂを備える。つまり、ＤＵＴ５０ａ，５０ｂからのアナログ信号がテストヘッド１０に入力されると、これらＡ／Ｄ変換器１１ａ，１１ｂによってそれぞれ順次サンプリングされる。尚、図１においては図示を省略しているが、テストヘッド１０上には、パフォーマンスボード、コンタクトリング、プローブカード等が設けられており、これらを介してＤＵＴ５０ａ，５０ｂとＡ／Ｄ変換器１１ａ，１１ｂとがそれぞれ電気的に接続される。
【００２２】
試験装置本体２０は、ユーザによって作成されたテストプログラムＴＰに従って、ＤＵＴ５０ａ，５０ｂのを試験してテストヘッド２０から得られるデータ（サンプリングデータ）を解析する解析装置３０を備える。この解析装置３０は、データメモリ２１、チップセット２２、ＣＰＵ２３ａ，２３ｂ（解析処理手段）、メモリ２４、及びハードディスク２５を備えており、テストヘッド２０から得られるデータをデータメモリ２１に一時的に記憶した後に、必要なデータを順次読み出して解析処理を行う。
【００２３】
データメモリ２１は、テストヘッド２０から得られるデータを一時的に記憶するメモリであり、例えば安価で大容量のＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）等を用いることができる。図１に示す例では、テストヘッド１０からＤＵＴ５０ａの試験により得られたデータとＤＵＴ５０ｂの試験により得られたデータとが得られるが、各々のデータはデータメモリ２１の異なる領域（アドレス）に分けて記憶される。尚、データの十分な書き込み速度及び読み出し速度が得られるのであれば、上記のＳＤＲＡＭ等の半導体メモリ以外にハードディスクをデータメモリ２１として用いることも可能である。
【００２４】
チップセット２２は、テストヘッド１０、データメモリ２１、ＣＰＵ２３ａ，２３ｂ、メモリ２４、及びハードディスク２５の間で行われるデータの送受信を制御する。尚、チップセット２２は、複数のチップからなるものであっても良い。例えば、主としてデータメモリ２１、ＣＰＵ２３ａ，２３ｂ、及びメモリ２４等の比較的高速なデバイスに関するデータの送受信を制御する第１チップと、主としてテストヘッド１０及びハードディスク２５等の比較的低速なデバイスに関するデータの送受信を制御する第２チップとからなるチップセットであっても良い。
【００２５】
ＣＰＵ２３ａ，２３ｂは、ハードディスク２０に格納されたテストプログラムＴＰ（試験プログラム）の内容に従ってデータメモリ２１に格納されたデータの解析処理を行う。具体的には、チップセット２２を制御してデータメモリ２１に記憶されたデータを読み出し、そのデータがテストプログラムＴＰで規定される閾値で定められる範囲内に収まってるか否かを判定する。ここで、解析装置３０には、マルチスレッド処理が可能なオペレーティング・システム（ＯＳ）が実装されており、ＣＰＵ２３ａ，２３ｂが複数の処理を並列して実行することが可能な環境が整備されている。
【００２６】
メモリ２４は、ＣＰＵ２３ａ，２３ｂで共用されるメモリであり、オペレーティングシステムで用いられる各種変数の値や、テストプログラムＴＰで用いられる各種変数の値等を一時的に記憶する。このメモリ２４としては、データメモリ２１と同様に、ＳＤＲＡＭ等を用いることができる。尚、図１では、便宜的にデータメモリ２１とメモリ２４とを分けているが、これらは１つにまとめられていても良い。
【００２７】
ハードディスク２５は、ユーザによって作成されたテストプログラムＴＰと、テストプログラムＴＰに記述された解析処理に関する所定の処理を自動的にマルチスレッド化するマルチスレッド化ライブラリＭＬ（実行手段）を格納する。尚、図１では図示を省略しているが、ハードディスク２５には、前述したオペレーティングシステムを実現するプログラムや、テストプログラムＴＰを実行するプログラム等の各種プログラムも格納される。
【００２８】
ここで、上記のテストプログラムＴＰ及びマルチスレッド化ライブラリＭＬについて説明する。図２は本実施形態の半導体試験装置で用いられるテストプログラムの簡単な例を示す図であり、図３はマルチスレッド化ライブラリＭＬの内容の簡単な例を示す図である。図２に示すテストプログラムＴＰはユーザによって作成されるものであるが、図３に示すマルチスレッド化ライブラリＭＬは半導体試験装置１の製造メーカによって作成されてユーザに提供されるものである。
【００２９】
尚、図２，図３中の行番号は説明の便宜のために付したものであり、実際のテストプログラムＴＰ及びマルチスレッド化ライブラリＭＬの行番号を示すものではない。また、図３においては、理解を容易にするために、マルチスレッド化ライブラリＭＬのソースプログラムを図示しているが、実際にはコンパイルされたものがハードディスク２５に格納されている。
【００３０】
まず、図２に示すテストプログラムＴＰには、第１〜第５行目に関数csub()のみが記述されている。この関数csub()は、解析装置３０で行われる解析処理の概要が定義された関数であり、第２行目に記述された関数Y_GetRawData()の処理、及び第３行目に記述された関数ary_index()の処理が順に行われ、最後に第４行目において関数ary_mcmp()の結果が変数resultに格納されることが定義されている。ここで、第２行目に記述された関数Y_GetRawData()は、ＤＵＴ５０ａ，５０ｂを試験して得られたデータを、引数で指定される変数（transdata）に格納する関数である。
【００３１】
上記の関数ary_index()は、第１引数で指定される変数（transdata）から、第２引数で指定される対象（index_dut）係るデータのみを取り出して第３引数で指定される変数（pos_data）に格納する処理を行う関数である。また、上記の関数ary_mcmp()は、第１引数で指定される変数（pos_data）に格納されたデータが、第２，第３引数で指定される閾値（lower_limit，upper_limit）の範囲内に収まってるか否かを判定する関数である。
【００３２】
ここで、図２を参照すると、上記の関数ary_index()の第２，第３引数、及び上記の関数ary_mcmp()の第１引数では、ＤＵＴ５０ａ，５０ｂの別は指定されていないことが分かる。つまり、ユーザは、ＤＵＴ５０ａ，５０ｂのように複数のＤＵＴの試験が行われた場合であっても、ＤＵＴの各々を区別することなくテストプログラムＴＰを記述することが可能である。このため、テストプログラムＴＰを簡素化することができ、これによってテストプログラムＴＰが複雑化するのを防止することができる。尚、図２には図示していないが、テストプログラムＴＰの所定の位置（例えば、先頭位置）には、ＤＵＴの数を特定する記述（図１に示す例では２つのＤＵＴ５０ａ，５０ｂがあることを示す「２」なる記述）がなされている。
【００３３】
次に、マルチスレッド化ライブラリＭＬについて説明する。マルチスレッド化ライブラリＭＬは、テストプログラムＴＰの実行時にテストプログラムＴＰに動的に関連付けられる。図３に示す通り、マルチスレッド化ライブラリＭＬには、図２に示すテストプログラムＴＰに記述されている関数ary_index()で行われる処理の具体的な内容が第１〜第７行で定義されている。この関数ary_index()の第２行目には、関数ary_index()の３つの引数を所定の記憶領域に一時的に保存（ストア）する関数store()が記述されている。この関数store()は、関数ary_index()の３つの引数を、第８〜第１１行目に記述された関数ary_index1()又は第１２〜第１５行目に記述された関数ary_index2()に渡すために、関数ary_index()の最初の部分（第２行）に記述される。
【００３４】
また、関数ary_index()の第３行目には、第３引数で指定された関数（ary_index_dut1()）を実行するためのスレッドを生成する関数pthread_create()が記述されており、また第４行目は、第３引数で指定された関数（ary_index_dut2()）を実行するためのスレッドを生成する関数pthread_create()が記述されている。第５，第６行目には、それぞれ第３，４行目に記述された処理にて生成されたスレッドが終了するまで待機させる関数pthread_join()が記述されている。
【００３５】
ここで、図３においては、関数ary_index()が実行されると第３，第４行目において２つのスレッドが生成される例を示しているが、これは２つのＣＰＵ２３ａ，２３ｂが設けられているからである。つまり、関数ary_index()では、解析装置３０に設けられたＣＰＵの数だけのスレッドが生成される。これは、関数ary_index()で生成された複数のスレッドをＣＰＵの各々で並行して実行させることにより、解析処理に要する時間を短縮するためである。
【００３６】
また、図３では、第３行目に記述された関数pthread_create()の第３引数では、ＤＵＴ５０ａ，５０ｂのうちの一方のＤＵＴ（例えば、ＤＵＴ５０ａ）の解析処理に関する関数（ary_index_dut1()）が指定されており、第４行目に記述された関数pthread_create()の第３引数では、他方のＤＵＴ（例えば、ＤＵＴ５０ｂ）の解析処理に関する関数（ary_index_dut2()）が指定されている。これは、データメモリ２１に格納されるデータは、２つのＤＵＴ５０ａ，５０ｂを試験して得られたものであり、ＤＵＴ５０ａの試験で得られたデータの解析処理と、ＤＵＴ５０ｂの試験で得られたデータの解析処理とを、別々のスレッドで並行して実行させるためである。
【００３７】
尚、図３においては、理解を容易にするために、２つのＤＵＴ５０ａ，５０ｂの試験結果を２つのＣＰＵ２３ａ，２３ｂで並行して解析する最も簡単なマルチスレッド化ライブラリＭＬの例を図示している。実際には、試験されたＤＵＴの数が解析装置３０が備えるＣＰＵの数とは異なる場合が殆どである。このため、実際のマルチスレッド化ライブラリＭＬの関数ary_index()では、解析装置３０に設けられたＣＰＵの数分のスレッドを生成し、複数のＤＵＴのデータをＣＰＵの数分づつ順次解析処理させる記述がなされている。尚、前述した通り、ＤＵＴの数はテストプログラムＴＰの所定の位置（例えば、先頭位置）で定義されている。
【００３８】
マルチスレッド化ライブラリＭＬの第８〜第１１行目には、第３行目に記述された関数pthread_create()の第３引数で指定された関数ary_index_dut1()で行われる処理の具体的な内容が記述されている。また、第１２〜第１５行目には、第４行目に記述された関数pthread_create()の第３引数で指定された関数ary_index_dut2()で行われる処理の具体的な内容が記述されている。これらの関数では、関数ary_index()の第２行目に記述された関数store()で所定の記憶領域に位置的に保存（ストア）された引数を関数restore()で回復（リストア）し、その後に、ＤＵＴ５０ａ又はＤＵＴ５０ｂのデータが所定の閾値の範囲内に収まってるか否かの判定処理等の処理が行われる。尚、これらの関数ary_index_dut1()及び関数ary_index_dut2()の詳細については説明を省略する。
【００３９】
また、図３においては図示を省略しているが、図２に示すテストプログラムＴＰの第４行目に記述された関数ary_mcmp()の実体もマルチスレッド化ライブラリＭＬ内で定義されている。この関数ary_mcmp()も、関数ary_index()と同様に、引数を保存（ストア）する関数store()、解析装置３０が備えるＣＰＵの数分のスレッドを生成する関数pthread_create()、関数pthread_join()等が記述されている。
【００４０】
次に、上記構成における半導体試験装置１の動作について説明する。まず、試験装置本体２０からテストヘッド１０に対して各種制御信号が出力されてＤＵＴ５０ａ，５０ｂの試験を行うために必要な各種初期設定が行われる。この初期設定が完了すると、テストヘッド１０からの階調信号がＤＵＴ５０ａ，５０ｂの各々に印加され、ＤＵＴ５０ａ，５０ｂの試験が開始される。階調信号が印加されると、ＤＵＴ５０ａ，５０ｂの所定のピンからはその階調に応じた電圧（アナログ信号）が出力される。この信号はテストヘッド１０のＡ／Ｄ変換器１１ａ，１１ｂにそれぞれ入力されてサンプリングされる。サンプリングされたデータは試験装置本体２０が備える解析装置３０に入力され、チップセット２２を介してデータメモリ２１に順次記憶される。
【００４１】
ＤＵＴ５０ａ，５０ｂに対する階調信号の印加が終了し、印加した階調信号に応じてＤＵＴ５０ａ，５０ｂから得られるデータの全てがデータメモリ２１に格納されると、図２に示すテストプログラムＴＰに記述されたサブルーチンとしての関数csub()が実行される。これにより、データメモリ２１に記憶されたデータの解析処理が開始される。ここで、かかる解析処理が開始されるにあたり、ハードディスク２５からマルチスレッド化ライブラリＭＬが読み出され、テストプログラムＴＰと動的に関連付けられる。
【００４２】
テストプログラムＴＰに記述された関数csub()が実行されると、まず第２行目に記述された処理にてＤＵＴ（ＤＵＴ５０ａ，ＤＵＴ５０ｂ）を試験してデータメモリ２１に記憶されているデータが変数transdataに格納される。具体的には、データメモリ２１から必要なデータが読み出され、そのデータが変数transdataのために設けられたメモリ２４の所定の記憶領域に記憶される。次に、第３行目に記述された関数ary_index()が実行される。
【００４３】
図４は、マルチスレッド化ライブラリＭＬで定義された関数ary_index()で行われる処理の概要を示すフローチャートである。処理が開示されると、まず図３に示すマルチスレッド化ライブラリＭＬの第２行目に記述された関数store()が実行され、テストプログラムＴＰで指定された３つの引数（transdata，index_dut，pos_data）がメモリ２４の所定の領域に保存（ストア）される（ステップＳ１１）。
【００４４】
次いで、図３に示すマルチスレッド化ライブラリＭＬの第３，４行目に記述された関数pthread_create()が順に実行され、ＤＵＴ５０ａの試験で得られたデータの解析処理を行う関数ary_index_dut1()を実行するためのスレッドと、ＤＵＴ５０ｂの試験で得られたデータの解析処理を行う関数ary_index_dut2()を実行するためのスレッドとが生成され、各々のスレッドが並行して実行される。尚、本実施形態では、オペレーティングシステムの制御によって、関数ary_index_dut1()を実行するためのスレッドがＣＰＵ２３ａで実行され、関数ary_index_dut2()を実行するためのスレッドがＣＰＵ２３ｂで実行されるとする。
【００４５】
各々のスレッドが実行されると、まずマルチスレッド化ライブラリＭＬ中の関数ary_index()内に記述された関数store()でメモリ２４に保存（ストア）された引数を関数restore()で回復（リストア）する処理が各スレッドで個別に行われる（ステップＳ２１，Ｓ３１）。リストアが終了すると、各々のスレッドでＤＵＴ５０ａ，５０ｂを試験して得られたデータに対する所定の演算処理が並行して行われる（ステップＳ２２，Ｓ３２）。そして、並行して実行されるスレッドの何れか一方のスレッドの演算処理が何れか他方のスレッドの処理よりも早く終了した場合には、何れか他方のスレッドの演算処理が終了するまで待つ処理（待ち処理）が行われる（ステップＳ１２）。
【００４６】
以上の待ち処理が終了すると、図２に示すテストプログラムＴＰに記述された関数csub()内の第４行目に記述された関数ary_mcmp()が実行され、その結果が変数resultに格納される。この関数ary_mcmp()を実行する場合にも、解析装置３０が備えるＣＰＵの数分のスレッドが生成され、関数ary_mcmp()の引数がリストアされた後に、ＤＵＴ５０ａ，５０ｂのデータが所定の閾値の範囲内に収まってるか否かの判定処理が各々のスレッドで並行して行われる。尚、試験されたＤＵＴの数が「２」以上である場合（解析装置３０が備えるＣＰＵの数よりも多い場合）には、以上の処理がＤＵＴの数とＣＰＵの数に応じた回数だけ繰り返される。
【００４７】
このように、本実施形態では、テストプログラムＴＰに記述された解析処理に関する所定の処理（例えば、図２に示す関数csub()）について、マルチスレッド化ライブラリＭＬを用いて解析装置３０が備えるＣＰＵの数に応じたスレッドを生成し、各々のスレッドを異なるＣＰＵで並行して実行させている。このため、ユーザがテストプログラムＴＰにマルチスレッドを実現する記述をしなくとも、自動的にマルチスレッド処理が実行される。これにより、ユーザがマルチスレッドに関する知識を有しなくとも試験時間を短縮し得るテストプログラムＴＰを作成することができる。また、図２に示す通り、ユーザによって作成されるテストプログラムＴＰにはマルチスレッドに関する記述が全くない。このためテストプログラムの作成及びデバッグに要する時間を短縮することができる。
【００４８】
以上、本発明の一実施形態による半導体試験装置について説明したが、本発明は上記実施形態に制限されることなく、本発明の範囲内で自由に変更が可能である。例えば、上記実施形態では、マルチスレッド処理が可能なオペレーティング・システムが実装されており、スレッド単位で処理が行われる例について説明した。しかしながら、以上説明したマルチスレッド処理と同様の処理をハードウェアによって実現することも可能である。また、上記実施形態では、解析装置３０が複数のＣＰＵを備える場合を例に挙げたが、複数のコアを有する１つのＣＰＵを備える場合にも本発明を適用することができる。
【００４９】
また、上記実施形態では、半導体試験装置１がＬＣＤの駆動ドライバの試験を行うドライバテスタである場合について説明した。しかしながら、本発明は半導体メモリの試験を試験を行うメモリテスタや半導体論理回路を試験するロジックテスタと呼ばれる半導体試験装置にも適用可能である。
【図面の簡単な説明】
【００５０】
【図１】本発明の一実施形態による半導体試験装置の要部構成を示すブロック図である。
【図２】本実施形態の半導体試験装置で用いられるテストプログラムの簡単な例を示す図である。
【図３】マルチスレッド化ライブラリＭＬの内容の簡単な例を示す図である。
【図４】マルチスレッド化ライブラリＭＬで定義された関数ary_index()で行われる処理の概要を示すフローチャートである。
【図５】解析処理を１つのＣＰＵで行う場合に用いられる従来の試験プログラムの簡単な例を示す図である。
【図６】解析処理を２つのＣＰＵで行う場合に用いられる従来の試験プログラムの簡単な例を示す図である。
【符号の説明】
【００５１】
１                半導体試験装置
３０              解析装置
２３ａ，２３ｂ    ＣＰＵ
５０ａ，５０ｂ    ＤＵＴ
ＭＬ              マルチスレッド化ライブラリ
ＴＰ              テストプログラム
【図１】
2010014423.tif 000003
【図２】
2010014423.tif 000004
【図３】
2010014423.tif 000005
【図４】
2010014423.tif 000006
【図５】
2010014423.tif 000007
【図６】
2010014423.tif 000008