(57)【要約】【課題】従来のプログラムに比べて動作時間を短縮可能とする半導体試験用プログラムの前処理方法および当該前処理方法を実行するコンパイラを備える半導体試験装置を提供する。【解決手段】構造化されたソースプログラムＰＧを１関数単位に展開して、関数展開後のソースプログラムＰＧ１を作成する（Ｓ１）。次に、関数展開後のソースプログラムＰＧ１から、重複して実行される命令を削除する最適化処理を行い（Ｓ２）、最適化後のソースプログラムＰＧ２を作成する。その後、当該最適化後のソースプログラムＰＧ２についてコンパイルを行い（Ｓ３）、最適化後のオブジェクトプログラムＰＧ３を得る。【選択図】図３
2008139131.tif 000002
【特許請求の範囲】
【請求項１】
構造化された半導体試験用プログラムのオブジェクトプログラムへのコンパイルに先だって実行される前処理方法であって、
(ａ)前記半導体試験用プログラムを１関数単位に展開して関数展開後のソースプログラムを作成するステップと、
(ｂ)前記関数展開後のソースプログラムに、重複して実行される命令を削除する最適化処理を施して最適化後のソースプログラムを作成するステップと、を備える半導体試験用プログラムの前処理方法。
【請求項２】
前記ステップ(ａ)は、
(ａ−１)前記半導体試験用プログラムのテスト工程を規定する工程関数の中に書かれているプログラムを調べ、展開対象となるテスト内容を規定するテスト関数が含まれているか否かを確認するステップと、
(ａ−２)前記テスト関数の中に書かれているプログラムを調べ、展開対象となるテスト条件を規定するテスト条件関数が含まれているか否かを確認するステップと、
(ａ−３)前記テスト条件関数内のテスト条件を出力するステップと、を有し、
前記ステップ(ａ−１)において、前記現在調べている行に、前記テスト関数を発見できない場合は、当該行を出力し、一方、前記テスト関数を発見した場合は、前記ステップ(ａ−２)に進み、
前記ステップ(ａ−２)において、前記現在調べている行に、前記テスト条件関数を発見できない場合は、当該行を出力し、一方、前記テスト条件関数を発見した場合は、前記ステップ(ａ−３)に進み、
前記半導体試験用プログラムの、全ての前記工程関数中の全ての行について、前記ステップ(ａ−１)〜(ａ−３)の処理を実施する、請求項１記載の半導体試験用プログラムの前処理方法。
【請求項３】
前記ステップ(ｂ)は、
(ｂ−１)前記関数展開後のソースプログラムを調べ、現在調べている行の記述位置が、被試験デバイスに電源電圧を供給する電源のオン命令からオフ命令の間にあるか否かを確認するステップと、
(ｂ−２)現在調べている行が、重複をチェックすべき対象となっている重複チェック対象命令を含んでいるか否かについて判定を行うステップと、
(ｂ−３)前記ステップ(ｂ−２)の後に実行され、現在調べている重複チェック対象命令と同一の命令について、直前に設定された設定内容との比較を行い、命令が重複しているか否かについての判定を行うステップと、を有し、
前記ステップ(ｂ−１)において、前記現在調べている行の記述位置が、前記オン命令から前記オフ命令の間にあると判定された場合は、当該行を出力し、一方、前記オン命令から前記オフ命令の間にないと判定された場合は、前記ステップ(ｂ−２)に進み、
前記ステップ(ｂ−２)において、前記現在調べている行が、前記重複チェック対象命令を含んでいないと判定された場合は、当該行を出力し、一方、前記重複チェック対象命令を含んでいると判定された場合は、前記ステップ(ｂ−３)に進み、
前記ステップ(ｂ−３)において、前記現在調べている重複チェック対象命令の設定内容が重複していないと判定された場合は、当該行を出力し、一方、前記現在調べている重複チェック対象命令の設定内容が重複していると判定された場合は、前記現在調べている重複チェック対象命令を含む行を出力しないことで、重複して実行される命令を削除し、
前記関数展開後のソースプログラムの、全ての前記工程関数中の全ての行について、前記ステップ(ｂ−１)〜(ｂ−３)の処理を実施する、請求項１記載の半導体試験用プログラムの前処理方法。
【請求項４】
(ｂ−４)前記ステップ(ｂ−３)の後に、設定内容が重複していると判定された重複チェック対象命令に対して、削除禁止条件を満たしているか否かの判定を行うステップをさらに備え、
前記ステップ(ｂ−４)において、前記削除禁止条件を満たしていないと判定された場合は、前記重複チェック対象命令を含む行を出力し、前記削除禁止条件を満たしていないと判定された場合は、前記重複チェック対象命令を含む行を出力しないことを特徴とする、請求項３記載の半導体試験用プログラムの前処理方法。
【請求項５】
前記ステップ(ｂ−１)〜(ｂ−４)を経て出力対象とされた前記関数展開後のソースプログラムの行を一時的に記憶するステップと、
前記関数展開後のソースプログラムの工程関数が変わるごとに、前記記憶された前記関数展開後のソースプログラムの行を削除するステップとをさらに備える、請求項４記載の半導体試験用プログラムの前処理方法。
【請求項６】
被試験デバイスに対する試験のためのハードウエアを有した半導体試験部と、
前記半導体試験部による試験動作を規定する半導体試験用プログラムをオブジェクトプログラムにコンパイルするコンパイラとを備え、
前記コンパイラは、
前記半導体試験用プログラムを１関数単位に展開して関数展開後のソースプログラムを作成する関数展開機能と、
前記関数展開後のソースプログラムに、重複して実行される命令を削除する最適化処理を施して最適化後のソースプログラムを作成する機能と、を備える半導体試験装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体試験用プログラムの前処理方法および半導体試験装置に関し、特に、半導体試験用プログラムの実行時間を短縮した前処理方法および当該前処理方法を実行するコンパイラを備える半導体試験装置に関する。
【背景技術】
【０００２】
半導体試験装置の一例として、特許文献１の半導体試験装置では、フラグに設定された制御条件に基づいて半導体試験用テストプログラムの分岐制御を行うことが開示されているが、半導体試験用プログラムに限らず、プログラムの構造は、一般的に、メンテナンス性を重視して複数の関数で構成され、構造化されていることが多い。
【０００３】
また、命令の実行回数は少ないほうが良いが、構造化されたプログラムでは、異なる処理において同じ関数を使用する場合でも、処理ごとに関数を実行するように構成されるため、動作時間が長くなってしまう可能性がある。
【０００４】
従来は、動作時間をできる限り短縮するために、プログラムエンジニアによってプログラムの微調整（プログラム構造見直し、関数、条件分岐等の追加）を行っていた。
【０００５】
【特許文献１】特開平2003-294814号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上述したように、従来は、動作時間の短縮のためにプログラムの微調整が必要であったが、半導体試験用プログラムは膨大であり、調整には多大な労力を必要としていた。
【０００７】
本発明は上記のような問題点を解消するためになされたもので、従来のプログラムに比べて動作時間を短縮可能とする半導体試験用プログラムの前処理方法および当該前処理方法を実行するコンパイラを備える半導体試験装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明に係る１の実施の形態においては、以下の方法が提示されている。すなわち、構造化されたソースプログラムを１関数単位に展開して、関数展開後のソースプログラムを作成する。次に、関数展開後のソースプログラムから、重複して実行される命令を削除する最適化処理を行い、最適化後のソースプログラムを作成する。その後、当該最適化後のソースプログラムについてコンパイルを行い、最適化後のオブジェクトプログラムを得る。
【発明の効果】
【０００９】
上記実施の形態によれば、１関数単位に展開したソースプログラムを作成することで、重複命令の削除が可能となり、重複した命令を削減して最適化されたソースプログラムを得ることができ、従来のプログラムに比べて動作時間を短縮することが可能となり、高価な半導体試験装置への投資を抑制する効果に繋がる。
【発明を実施するための最良の形態】
【００１０】
＜実施の形態＞
システムＬＳＩ等の半導体装置においては、工程、回路領域によって必要とする電源電圧、タイミング、ピン条件、リレー条件等のテスト条件が異なり、半導体試験においては、何れの回路領域の試験を行うかによって、電源電圧、タイミング、ピン条件、リレー条件等のテスト条件を変更する。
【００１１】
以下、本発明に係る実施の形態においては、被試験デバイス（ＤＵＴと呼称）に供給する電源電圧の組み合わせが異なるテストを例に採って説明する。
【００１２】
図１は、実施の形態に係る半導体試験用プログラムの前処理方法を説明するための、半導体試験装置１００の電圧供給部とＤＵＴ２００との接続関係を模式的に示す図である。
【００１３】
図１に示すように、半導体試験装置１００の電圧供給部は、電源ＰＳ１、ＰＳ２およびＰＳ３の３つの可変電圧電源（プログラマブル電源）を備え、電源ＰＳ１〜ＰＳ３は、それぞれ、リレースイッチＳＷ１、ＳＷ２およびＳＷ３が介挿された経路を介して、ＤＵＴ２００に電源電圧を供給する構成となっている。なお、図１では、電源ＰＳ１〜ＰＳ３が、それぞれ電圧３．３Ｖ、３．０Ｖおよび１．５Ｖを出力するように設定されているが、リレースイッチＳＷ３がオフ状態となっているので、電源ＰＳ３は電圧を供給しない設定となっている。
【００１４】
＜プログラムの動作フロー＞
次に、図２を用いて半導体試験装置１００で実行される半導体試験用プログラムのテスト実行時の動作フローを説明する。
【００１５】
図２に示すように、半導体試験用プログラムは構造化されており、メイン関数と呼称されるテスト工程を選択するプログラムＰ１、工程関数と呼称されるテスト工程を規定するプログラムＰ１１およびＰ１２、テスト関数と呼称されるテスト内容を規定するプログラムＰ２１、Ｐ２２およびＰ２３、テスト条件関数と呼称されるテスト条件を規定するプログラムＰ３１、Ｐ３２およびＰ３３を有して構成されている。
【００１６】
工程関数は、主に試験対象の工程（ウエハ状態でのテスト、パッケージング後のテスト）や、温度条件（室温、高温、低温）ごとに用意される関数であり、工程関数内から、工程ごとに、それぞれ異なるテスト関数を呼出すことになる。
【００１７】
テスト関数は、実行するテスト内容に合わせ、テスト条件、テスト命令を記述した関数であり、テスト関数内から、テスト内容ごとに、それぞれ異なるテスト条件関数を呼出すことになる。
【００１８】
テスト条件関数は、テスト条件を記述した関数であり、電圧、タイミング、ピン接続条件、リレー条件等を記述している。
【００１９】
図２において、プログラムＰ１は、実施するテスト工程として、工程１あるいは工程２を選択して実行するプログラムを例示している。ここで、工程１や工程２などのテスト工程は、何れを選択するかによってフローが異なることとなるので、センススイッチと呼称する場合もある。なお、センススイッチは、上述した２つに限定されるものではなく、半導体試験用プログラム内に１０以上存在する。
【００２０】
プログラムＰ１１は、工程１で実行されるテストの種類として、テスト１およびテスト２を規定し、テスト１の次にテスト２を行うことを規定している。また、プログラムＰ１２は、工程２で実行されるテストの種類として、テスト１、テスト２およびテスト３を規定し、テスト１、テスト３、テスト２の順でテストを行うことを規定している。
【００２１】
プログラムＰ２１は、テスト１で実行されるテスト内容を規定し、この例では電圧設定とテスト実行だけを示しており、電圧設定Ａとして実施するテストを規定している。また、プログラムＰ２２は、テスト２で実行されるテスト内容を規定し、この例では電圧設定とテスト実行だけを示しており、電圧設定Ｂとして実施するテストを規定している。また、プログラムＰ２３は、テスト３で実行されるテスト内容を規定し、この例では電圧設定とテスト実行だけを示しており、電圧設定Ｃとして実施するテストを規定している。
【００２２】
プログラムＰ３１は、テスト条件として電圧設定Ａの具体的な設定条件を規定しており、この例では、電源１、２および３を使用し、それぞれからの供給電圧を、３．３Ｖ、２．５Ｖおよび１．５Ｖに設定することを規定している。なお、電源１〜３は、図１に示した電源ＰＳ１〜ＰＳ３に対応している。また、プログラムＰ３２は、テスト条件として電圧設定Ｂの具体的な設定条件を規定しており、この例では、電源１および２を使用し、それぞれからの供給電圧を、３．３Ｖ、および３．０Ｖに設定することを規定している。なお、電源１、２は、図１に示した電源ＰＳ１、ＰＳ２に対応するが、供給電圧は変更されている。また、プログラムＰ３３は、テスト条件として電圧設定Ｃの具体的な設定条件を規定しており、この例では、電源１、２および３を使用し、それぞれからの供給電圧を、５．０Ｖ、３．０Ｖおよび１．５に設定することを規定している。なお、電源１〜３は、図１に示した電源ＰＳ１〜ＰＳ３に対応するが、供給電圧は変更されている。
【００２３】
テスト実行時の動作フローの一例としては、図２中に(1)〜(15)を付記して示される矢印に沿ったフローによってプログラムが動作する。
【００２４】
すなわち、プログラムＰ１において工程１を選択すると、プログラムＰ１１が実行（矢印(1)）されることになるが、プログラムＰ１１の実行に際しては、まずテスト１としてプログラムＰ２１を実行する（矢印(2)）ことになる。そして、プログラムＰ２１の実行に際しては、まず、プログラムＰ３１を実行（矢印(3)）して、電圧設定Ａに従って供給電圧を設定する（矢印(4)）ことになる。供給電圧の設定が終了すると、プログラムＰ２１に従って（矢印(5)）、テスト１で実行される他の設定を行い、テスト１を実行する（矢印(6)）。テスト１の実行が終了すると、プログラムＰ１１に従って（矢印(7)）、次にテスト２を実行する。
【００２５】
テスト２としてプログラムＰ２２を実行する（矢印(8)）が、プログラムＰ２２の実行に際しては、まず、プログラムＰ３２を実行（矢印(9)）して、電圧設定Ｂに従って供給電圧を設定する（矢印(10)）ことになる。供給電圧の設定が終了すると、プログラムＰ２２に従って（矢印(11)）、テスト２で実行される他の設定を行い、テスト２を実行する（矢印(12)）。テスト２の実行が終了すると、プログラムＰ１１に戻り（矢印(13)）、他に実行するテストがなければプログラムＰ１１が終了する。プログラムＰ１１が終了するとプログラムＰ１に戻り（矢印(14)）、他に実行する工程がなければプログラムＰ１が終了する（矢印(15））。
【００２６】
なお、プログラムＰ１において工程２を選択した場合も、上記と同様の要領でフローが進行するが、工程２ではテスト３が加わるので、フローが若干複雑になる。
【００２７】
＜前処理方法の処理フロー＞
以上説明したように、半導体試験用プログラムは構造化されており、例えば、プログラムＰ３１における電圧設定Ａと、プログラムＰ３２における電圧設定Ｂとでは、電源１の設定電圧は３．３Ｖで同一であるが、個々のプログラムに従って個別に設定するので、同じ命令を重複して実行することになって、効率的な動作が望めない。
【００２８】
そこで、半導体試験用プログラムのコンパイルに先だって、構造化された半導体試験用プログラムを１関数単位に展開したソースプログラムを作成し、重複して実行される命令を削除することで、動作時間を短縮するという技術思想に到達した。
【００２９】
図３には、上記技術思想に基づいて開発された本発明に係る半導体試験用プログラムの前処理方法の処理フローを示す。
【００３０】
図３に示されるように、まず、ステップＳ１において、構造化されたソースプログラムＰＧを１関数単位に展開して、関数展開後のソースプログラムＰＧ１を作成する。
【００３１】
次に、ステップＳ２において、関数展開後のソースプログラムＰＧ１から、重複して実行される命令を削除する最適化処理を行い、最適化後のソースプログラムＰＧ２を作成する。
【００３２】
その後、当該最適化後のソースプログラムＰＧ２についてコンパイルを行い（ステップＳ３）、最適化後のオブジェクトプログラムＰＧ３を得る。
【００３３】
以上説明したように、ステップＳ１において、１関数単位に展開したソースプログラムを作成することで、ステップＳ２における重複命令の削除が可能となり、重複した命令を削減して最適化されたソースプログラムを得ることができる。
【００３４】
＜プログラムの関数展開＞
次に、図４を用いて、半導体試験用プログラムを１関数単位に展開した構成について説明する。
【００３５】
図４においては、展開前のソースプログラムＰＧと、関数展開後のソースプログラムＰＧ１とを模式的に示しており、展開前のソースプログラムＰＧを構成する各プログラムが、関数展開後のソースプログラムＰＧ１においてどのように対応するかを模式的に示している。なお、展開前のソースプログラムＰＧにおけるプログラムＰ１、Ｐ１１、Ｐ１２、Ｐ２１〜Ｐ２３、Ｐ３１〜Ｐ３３については図２を用いて説明したものと同じである。
【００３６】
図４に示すように、展開前のソースプログラムＰＧを１関数単位に展開することで、重複している命令の検索が容易となり、また、重複している命令の削除が容易となる。
【００３７】
ソースプログラムＰＧ１においては、例えば、工程関数として工程１が１行１関数で展開され、その次に、テスト関数としてテスト１が１行１関数で展開され、その次に、テスト条件関数として電圧設定Ａが１行１関数で展開され、続いて、電圧設定Ａで設定される電源１〜３の設定電圧が示されている。そして、電圧設定の終了後には、テスト実行が示され、テスト終了後は、テスト２が実行されることが示されている。
【００３８】
なお、工程２についても同様に展開され、またメイン関数についても、工程１が選択された場合には工程１を実行する命令が１行１関数で展開され、工程２が選択された場合には工程２を実行する命令が１行１関数で展開されている。
【００３９】
図４から判るように、テスト１の電圧設定Ａと、テスト２の電圧設定Ｂとは、電源１の設定電圧が３．３Ｖで同一となっているので、テスト１で電源１の設定電圧を３．３Ｖに設定するする命令を出した後は、テスト２においては電源１に電圧設定の命令を出す必要はなく、命令を削除することが可能である。すなわち、図１に示した電源ＰＳ１〜ＰＳ３は、一度、電圧設定の命令を受けると、命令の変更を受けるか、パワーオフをしない限り同じ電圧出力を維持するように構成されている。従って、命令を削除しても、電源１は同じ電圧を維持し、テスト２においても、電源１として使用することができる。
【００４０】
このように、ソースプログラムを１関数単位に展開することで、同一命令での直前の設定と同じ設定については、命令を削除することができ、動作時間を短縮することが可能となる。
【００４１】
なお、テスト１における電源２の設定電圧は２．５Ｖであり、テスト２における電源２の設定電圧は３．０Ｖであるので、電源２については、テスト２に際して電圧設定の命令が変更されるので、重複命令とはなっておらず削除はされない。また、テスト１における電源３の設定電圧は１．５Ｖであるが、テスト２においては電源３に対する電圧設定の命令は存在しない。このような場合は、図１に示したリレースイッチＳＷ３をオフ状態としており、電源ＰＳ３は使用しない電源となり、電圧設定の命令を与える必要もない。
【００４２】
＜関数展開の処理フロー＞
次に、図５に示すフローチャートを用いて、半導体試験用プログラムを１関数単位に展開するための処理フローについて説明する。これは、図３に示したステップＳ１の処理を具体的に説明するものである。
【００４３】
まず、ステップＳ１０において、関数に展開する対象フローの抽出、すなわち関数展開の対象となるテスト工程の抽出を行う。これは、例えば、図２を用いて説明した矢印(1)〜(15)で示される工程１のフローや、工程２のフローを、展開前のソースプログラムＰＧ（図３）から抽出する処理である。
【００４４】
次に、抽出した対象フローに対して、まず工程関数を展開する工程関数のプログラムループを開始し（ステップＳ１１）、工程関数の中に書かれているプログラムを１行ずつ調べ、当該１行に展開対象となるテスト関数が含まれているか否かの確認を行う（ステップＳ１２）。
【００４５】
そして、現在調べている行に、展開対象となるテスト関数を発見できない場合は、当該１行をそのまま出力する（ステップＳ１３）。そして、ステップＳ１４において、全ての工程関数中のプログラムの全行についての確認が終わっているか否かについて確認を行い、未確認の行がある場合は、調査対象を工程関数中の次の行に移す。一方、全ての工程関数中のプログラムの全行についての確認が終わっている場合は、工程関数のプログラムループを終了する。そして、ステップＳ４０において、メイン関数の関数を出力して一連のフローを終了する。
【００４６】
なお、ステップＳ１２において、現在調べている行に、展開対象となるテスト関数を発見した場合は、当該テスト関数を展開するテスト関数のプログラムループを開始する（ステップＳ２１）。
【００４７】
テスト関数のプログラムループを開始すると、テスト関数の中に書かれているプログラムを１行ずつ調べ、当該１行に展開対象となるテスト条件関数が含まれているか否かの確認を行う（ステップＳ２２）。
【００４８】
そして、現在調べている行に、展開対象となるテスト条件関数を発見できない場合は、当該１行をそのまま出力する（ステップＳ２３）。そして、ステップＳ２４において、テスト関数中のプログラムの全ての行についての確認が終わっているか否かについて判断を行い、未確認の行がある場合は、調査対象をテスト関数中の次の行に移して、ステップＳ２２の処理を繰り返す。一方、テスト関数中のプログラムの全ての行についての確認が終わっている場合は、テスト関数のプログラムループを終了して（ステップＳ２４）ステップＳ１４に進み、ステップＳ１４において、全ての工程関数中のプログラムの全行についての確認が終わっている場合は、工程関数のプログラムループも終了し、ステップＳ４０においてメイン関数の関数を出力して一連のフローを終了する。
【００４９】
一方、ステップＳ２２において、現在調べている行に、展開対象となるテスト条件関数を発見した場合は、当該テスト条件関数内のテスト条件を出力するテスト条件関数のプログラムループを開始する（ステップＳ３１）。
【００５０】
テスト条件関数のプログラムループでは、テスト条件関数の中に書かれているテスト条件をそのまま出力し（ステップＳ３２）、ステップＳ２４に進む。
【００５１】
ステップＳ２４において、テスト関数中のプログラムの全ての行についての確認が終わっている場合は、テスト関数のプログラムループを終了してステップＳ１４に進み、ステップＳ１４において、全ての工程関数中のプログラムの全行についての確認が終わっている場合は、工程関数のプログラムループも終了し、ステップＳ４０においてメイン関数の関数を出力して一連のフローを終了する。
【００５２】
以上説明した処理フローを経ることで、半導体試験用プログラムを１関数単位に展開することができる。
【００５３】
＜最適化の処理フロー＞
次に、図６に示すフローチャートを用いて、関数展開後のソースプログラムを最適化するための処理フローについて説明する。これは、図３に示したステップＳ２の処理を具体的に説明するものである。
【００５４】
まず、ステップＳ５１において、重複する命令の存在を確認するための前処理として、改行されてプログラムの複数行に渡って記載されている命令については、１行にまとめる処理を行う。また、異なる行に記載されてはいるが、互いに関連している命令についても、１行にまとめる処理を行う。
【００５５】
次に、ステップＳ５２において、関数展開後のソースプログラムについて、１行単位で重複する命令の存在を確認する展開後プログラム行ループ処理を開始する。
【００５６】
展開後プログラム行ループ処理を開始すると、まず、ステップＳ５３において、現在調べている行が、次の工程関数を記載した行であるか否かを検出し、次の工程関数ではない場合にはステップＳ５４に進む。一方、次の工程関数を記載した行であることを検出した場合には、後に説明するステップＳ６０で記憶した関数展開後のソースプログラムの各行を削除し（ステップＳ７０）、ステップＳ５４に進む。
【００５７】
すなわち、テスト工程が変わり、工程関数が変わった場合に前のテスト工程での命令の設定内容を記憶していると、以後の処理に誤りが生じるが、上記ステップＳ５３およびＳ７０の処理を経て、ステップＳ６０で記憶した内容を削除することで、プログラムに不具合が生じることが防止される。
【００５８】
なお、ステップＳ６０で記憶するプログラムの行は、１つの工程関数に含まれる全ての行となる。
【００５９】
ステップＳ５４では、現在調べている行の記述位置が、電源をオンする命令からオフする命令の間にあるか否かを確認し、両命令の間にある場合には、ステップＳ５９に進んで、現在調べている行をそのまま出力することになる。なお、そのまま出力された行は、ステップＳ６０において所定の記憶部にも記憶される。
【００６０】
すなわち、命令には、先に説明したような電源電圧の設定命令だけでなく、例えば、テスト信号のタイミングを設定するような命令もあるが、これらの命令は、電源をオフした状態で設定され、電源をオンしている間に電源電圧の設定を変更することはない。従って、ステップＳ５４の判定を行うことで、電源をオフした状態で設定される命令のみが選択されることになり、テスト実行などのその他の命令についてはステップＳ５５以下の処理を経ることなく出力されることとなる。
【００６１】
なお、ステップＳ５４において、現在調べている行の記述位置が、電源をオンする命令からオフする命令の間にはないと判定された場合はステップＳ５５に進み、現在調べている行が、重複をチェックすべき対象となっている命令（重複チェック対象命令）を含んだ行であるか否かについて判定を行う。そして、重複チェック対象命令を含んでいる場合はステップＳ５６に進み、そうでない場合はステップＳ５９に進んで、現在調べている行をそのまま出力する。
【００６２】
ステップＳ５６では、現在調べている重複チェック対象命令と同一の命令について、直前に設定された設定内容との比較を行い、同じ設定内容か否か、すなわち重複しているか否かについての判定を行う。そして、重複していると判定された場合はステップＳ５７に進み、そうでない場合はステップＳ５９に進んで、現在調べている命令行をそのまま出力する。
【００６３】
なお、ステップＳ５６での処理においては、直前に設定された設定内容を、上述した所定の記憶部から読み出して比較することになる。
【００６４】
ステップＳ５６での処理を、図４に示した関数展開後のソースプログラムの工程１に適用する場合について説明する。工程１の電圧設定Ａの各設定命令については、工程関数が変わった直後、すなわち工程１に変わった直後の設定命令であるので、比較対象となる同一の設定命令は存在せず、ステップＳ５６では電源１〜３の何れの電圧設定命令も重複していないと判定され、これらの設定命令行は、順番にそのまま出力される（ステップＳ５９）とともに、上述した所定の記憶部に記憶される（ステップＳ６０）。
【００６５】
さらに行ループが進み、工程１の電圧設定Ｂの各設定命令を処理する段階では、電圧設定Ｂの電源１の電圧設定命令については、上述した所定の記憶部から、電圧設定Ａの電源１の電圧設定命令を読み出して比較し、同じ設定電圧３．３Ｖであるので、同一の設定命令について、直前に設定された設定内容と重複していると判定される（ステップＳ５６）。
【００６６】
一方、電圧設定Ｂの電源２の電圧設定命令については、電圧設定Ａの電源２の電圧設定命令とは設定電圧が異なるので、設定内容は重複していないと判定され、ステップＳ５９に進んでそのまま出力される。
【００６７】
ステップＳ５７では、ステップＳ５６で、直前に設定された設定内容と重複すると判定された命令に対して、削除禁止条件を満たしているか否かの判定を行う。
【００６８】
例えば、条件によって使用するか、使用しないかが決まる命令が、直前に設定された命令として存在する場合、当該直前に設定された命令の次の命令については、削除してはいけない命令ということになる。これが、削除禁止条件の一例である。
【００６９】
この具体例を図７を用いて説明する。
図７においては、電源１、２および３に対する電圧設定命令が、何れも４．０Ｖとなっている設定の後に、ｉｆ文によって、電源１、２および３に対する電圧設定命令が、何れも３．３Ｖとなっている設定が挿入されている。そして、このｉｆ文の後に、電源１および２に対する電圧設定命令が、何れも３．３Ｖとなっている設定が存在する。この、電源１および２に対する電圧設定命令は削除禁止とされている。
【００７０】
すなわち、上記ｉｆ文はフラグ（flag）によって使用、不使用が決まり、例えば、flagが真（true）の場合は、ｉｆ文内の電圧設定命令が使用されることとなるので、この場合は、これの後の電源１および２に対する電圧設定命令は、直前に設定された設定命令に重複するものとなるが、これらは削除禁止となっているので、削除されることはない。
【００７１】
なお、flagが偽（false）の場合は、ｉｆ文内の電圧設定命令は使用されないので、ｉｆ文の後の電源１および２に対する電圧設定命令にとっては、ｉｆ文の前の、電源１、２および３に対する電圧設定命令が直前に設定された設定命令に該当することになる。
【００７２】
このように、ｉｆ文等で使用するか、使用しないかが決まる設定命令が、直前に設定された設定命令として存在する場合は、当該ｉｆ文の後の設定命令については削除禁止とすることで、ｉｆ文の条件設定がどのようなものであっても、不具合が生じることが防止される。
【００７３】
なお、削除禁止条件を含まない半導体試験用プログラムにしか本発明を適用しない場合には、ステップＳ５７は設けずとも良く、ステップ５６において、直前に設定された設定内容と重複すると判定された命令については全て出力しないという構成を採れば良い。
【００７４】
ここで、図６のステップＳ５７の説明に戻る。ステップＳ５７において、直前に設定された設定内容と重複すると判定された命令が、削除禁止条件を満たしていないと判定された場合は、ステップＳ５８に進んで、当該命令の行については出力しないという措置を採る。これにより、例えば、図４に示した関数展開後のソースプログラムにおいて、電圧設定Ｂの電源１の電圧設定命令については出力されず、重複して実行される命令が削除されたこととなって、最適化処理が行われたこととなる。
【００７５】
一方、ステップＳ５７において、直前に設定された設定内容と重複すると判定された命令が、削除禁止条件を満たしていると判定された場合は、ステップＳ５９に進んで、現在調べている命令行をそのまま出力する。
【００７６】
なお、ステップＳ６０の後は、ステップＳ６１において、対象フロー中のプログラムの全ての行について最適化処理を終わっているか否かの確認を行い、未処理の行がある場合は、次の行に対する最適化処理を施す。一方、対象フロー中のプログラムの全ての行についての最適化処理が終わっている場合は、展開後プログラム行ループ処理を終了する。
【００７７】
以上説明した処理フローを経ることで、関数展開後のソースプログラムを最適化することができ、当該最適化されたソースプログラムをコンパイルすることで、最適化後のオブジェクトプログラムを得ることができる。
【００７８】
なお、以上説明した、本発明に係る半導体試験用プログラムの前処理方法は、コンピュータシステムを利用して実現することができ、半導体試験装置に入力する前の半導体試験用プログラムに対して予め適用しておき、最適化されたソースプログラムを半導体試験装置に入力するという手法を採ることができる。
【００７９】
すなわち、半導体試験用プログラムの前処理方法のプログラムを、コンピュータ上で実行し、実行結果を磁気記録媒体や光ディスク等の記録媒体に記録して、それを半導体試験装置に入力する、あるいは信号の形態で通信路上を伝搬させ、他のコンピュータから通信回線を経由して半導体試験装置に入力するということが可能である。
【００８０】
このように、半導体試験用プログラムの前処理方法をコンピュータプログラムにより実行することで、本発明に係る半導体試験用プログラムの前処理方法を汎用的に利用することができる。
【００８１】
＜半導体試験装置のシステム構成＞
以上説明したように、本発明に係る半導体試験用プログラムの前処理方法は、半導体試験装置に入力する前の半導体試験用プログラムに対して予め適用することもできるが、半導体試験装置内のコンパイラに、上記前処理方法を適用して最適化されたソースプログラムを作成する機能を持たせるようにしても良い。
【００８２】
図８は、本発明に係る半導体試験用プログラムの前処理方法を実施する機能を有した半導体試験装置２００の構成を示すブロック図である。
【００８３】
図８に示すように半導体試験装置２００は、ハードウエア部（半導体試験部）１０とソフトウエア部２０とを備え、ハードウエア部１０には、例えば、図１に示した電圧供給部等を有し、ソフトウエア部２０にはＣＰＵ（Central Processing Unit）や記憶部を有し、ＣＰＵによって、オペレーティングシステム（ＯＳ）２１、ユーティリティ２２やコンパイラ２３が実現される。
【００８４】
このコンパイラ２３には、本発明に係る半導体試験用プログラムの前処理方法を実行する機能として、関数展開機能２３１および最適化機能２３２を備えており、関数展開機能２３１により、図５を用いて説明した関数展開の処理フローが実行され、最適化機能２３２により、図６を用いて説明した最適化の処理フローが実行される。
【００８５】
＜効果＞
実施の形態に係る半導体試験用プログラムの前処理方法においては、半導体試験用プログラムのコンパイルに先だって、構造化された半導体試験用プログラムを１関数単位に展開して関数展開後のソースプログラムを作成し、当該関数展開後のソースプログラムに、重複して実行される命令を削除する最適化処理を施して最適化後のソースプログラムを得て、それをオブジェクトプログラムにコンパイルしている。実行される命令が削減されることで、半導体試験用プログラムの実行時間を短縮することができる。この効果は、計算処理能力が遅いシステムにおいて特に有効であり、発明者達の試算によれば、１テスト工程あたり０．３秒の時間短縮効果が得られている。
【００８６】
また、上述した最適化処理はソフトウエアにより自動的に実行されるので、従来のように、プログラムエンジニアによる多大な労力が不要となる。従って、現場のオペレータが取り扱うことが可能となり、個々の半導体試験装置に本発明に係る半導体試験用プログラムの前処理方法を実行するコンパイラを導入することで、半導体テストの現場において、所望の半導体試験用プログラムを最適化することが可能となって、生産性を向上させることができる。
【図面の簡単な説明】
【００８７】
【図１】本発明に係る実施の形態の半導体試験用プログラムの前処理方法を説明する図である。
【図２】本発明に係る実施の形態の半導体試験用プログラムのテスト実行時の動作フローを説明する図である。
【図３】本発明に係る実施の形態の半導体試験用プログラムの前処理方法の処理フローを示す図である。
【図４】半導体試験用プログラムを１関数単位に展開した構成を示す図である。
【図５】半導体試験用プログラムを１関数単位に展開するための処理フローを示すフローチャートである。
【図６】関数展開後のソースプログラムを最適化するための処理フローを示すフローチャートである。
【図７】削除禁止条件の一例を説明する図である。
【図８】本発明に係る実施の形態の半導体試験装置の構成を示すブロック図である。
【符号の説明】
【００８８】
１００  半導体試験装置、２００  ＤＵＴ、ＰＳ１〜ＰＳ３  電源、ＳＷ１〜ＳＷ３  リレースイッチ。
【図１】
2008139131.tif 000003
【図２】
2008139131.tif 000004
【図３】
2008139131.tif 000005
【図４】
2008139131.tif 000006
【図５】
2008139131.tif 000007
【図６】
2008139131.tif 000008
【図７】
2008139131.tif 000009
【図８】
2008139131.tif 000010