| 【発明の名称】 |
集積回路を試験するデバイスの構成要素の許容差を試験する装置 |
| 【発明者】 |
【氏名】ウィリアム・アール・ローレンス
【氏名】ディビッド・エイチ・アームストロング
|
| 【要約】 |
【課題】高精度で試験装置の構成要素のタイミングを試験することができる。
【解決手段】集積回路を試験するデバイスは試験ヘッドに配置された複数の試験コネクタを持ち、各試験コネクタは試験チャネルの電気信号を運ぶ導体を持ち、各試験チャネルは少なくとも1つのドライバとレシーバを含む回路基板に対応しており、第1と第2の試験コネクタ導体間に低インピーダンスの電気的な接続を確立して第1の回路基板の第1のドライバが低インピーダンスの経路を介して第2の回路基板の第1のレシーバに接続されるようにする短絡手段と、第1のドライバを制御して予め定められた時に電気信号を出力するコントローラと、第1のレシーバで受け取られた信号を検出する評価手段と、第1のドライバが電気信号を出力した時間から評価手段が信号を検出する時間までの信号の遅延時間を測るタイミング手段とを備え、前記デバイスの構成要素の許容差を試験する。 |
【特許請求の範囲】
【請求項1】試験ヘッドに配置された複数の試験コネクタを持ち、それぞれの試験コネクタが試験チャネルの電気信号を運ぶ導体を持ち、それぞれの試験チャネルが少なくとも1つのドライバおよび少なくとも1つのレシーバを備える回路基板に対応している集積回路を試験するデバイスの構成要素の許容差を試験する装置であって、第1および第2の試験コネクタの導体間に低インピーダンスの電気的な接続を確立し、第1の回路基板の第1のドライバが、低インピーダンスの経路を介して第2の回路基板の第1のレシーバに接続されるようにする短絡手段と、前記第1のドライバを制御して、予め定められた時に電気信号を出力するよう構成されるコントローラと、前記第1のレシーバで受け取られた前記信号を検出するよう設計される評価手段と、前記第1のドライバが電気信号を出力した時から、前記評価手段が受け取られた信号を検出する時までの信号の遅延時間を測るよう構成されるタイミング手段と、を備える集積回路を試験するデバイスの構成要素の許容差を試験する装置。
|
【発明の詳細な説明】【0001】 【発明の属する技術分野】本発明は、自動試験機を試験するためのシステム、より具体的には、デジタル試験デバイスの信号の電圧レベルの精度を試験するための方法および装置に関する。 【0002】 【従来の技術】様々な自動試験装置(ATE)が、電子回路、デバイスおよび他の半導体や電子製品を試験するのに長く知られている。一般に、自動試験装置は、2つのおおまかな種類、すなわちアナログ試験器(テスター)およびデジタル試験器に分類される。名前が意味するように、一般にアナログ試験器は、アナログ回路デバイスを試験するために設計され、デジタル試験器は、デジタル回路デバイスを試験するために設計される。デジタル試験器は、既知であるように、一般に試験デバイスを備える。試験デバイスは、プログラム可能なように制御される試験信号を生成するいくつかの内部回路カードまたはチャネルを持ち、DUT(Device Under Test)を試験して評価する。とくにATEは、プラグラム可能なように制御され、様々な方法で様々なデバイスを試験するのに適合または構成される。これは、出力信号をプログラムすることにより達成され、DUT上のあるピンまたは信号線に、ある信号(または信号の遷移)を注入する。この点について、デジタル試験器は、一般に試験ヘッドを含み、これにより電気信号が試験器に入力され、また試験器から電気信号が出力される。試験ヘッドはいくつかのコネクタを備え、それぞれのコネクタはチャネルを規定し、チャネルは、ケーブルまたは別の手段を介して、試験されるデバイスに接続されることができる。デジタル試験器内の電子回路は、試験ヘッドを介してDUTに信号を入力することができ、またはDUTから信号を出力することができる。 【0003】非常に単純な例として、とりわけ2つの入力ANDゲートを備えるウェーハを試験するよう構成されるデジタル試験器を考えてみる。ANDゲートの入力に対応する2つの信号線に論理1を適用し、出力に対応する信号線の信号を受け取って、それが確実に論理1になるよう、デジタル試験器を構成することができる。ANDゲートの出力が、応答して論理1から論理0へ遷移するのを検証するため、ANDゲートの入力に対応する2つの信号線のそれぞれに論理0の信号を交互に適用するよう、試験器を構成することができる。このような試験は、ANDゲートの機能演算を検証するけれども、追加の試験を実行して、タイミングおよびANDゲートの他の側面を検証しなければならない。 【0004】例えば、ANDゲートへの2つの入力信号が論理1および論理0であり、また出力が論理0とする。第2の入力が論理0から論理1に遷移するとき(それにより2つの入力は論理1となる)、ANDゲートの出力は論理0から論理1へと遷移する。さらに、出力は、規定された時間(この時間は、製造者の仕様により規定される)内にこの遷移を作らなければならない。したがって、デジタル試験器は、入力信号の遷移から出力信号の対応する遷移までの間の時間を感知して測定することにより、このような機能がプログラムされた試験を可能にするよう設計される。上記の所与の例は非常に単純な例であり、単に例示の目的のためだけに提示されることは理解されるであろう。また当該技術分野の当業者は、デジタル試験器が非常に精密であり、非常に精密で複雑な試験ルーチンを実行することができることを理解するであろう。 【0005】デジタル試験器も含めてATEの非常に重要な側面は、試験装置が、非常に正確な許容差を維持しているということである。そうでなければ、DUTの測定値が、DUT内のエラーまたは矛盾を反映しているかどうか、あるいはエラーまたは矛盾が、構成要素またはATE構成要素における他の許容差のばらつきから生じているのかどうか、明らかでない。この点について、一般に自動試験装置の製造者は、自動試験装置に一組の内蔵試験(built-in-test,BIT)ルーチンを備える。しかし、以下に詳しく記述するように、これらの製造者により提供されるBITルーチンは、高速な構成要素および大量製造の設備の今日の市場では、一般に不十分なことがわかっている。 【0006】試験器の精密な操作を検証する別の方法を、手動で、正確な外付けの試験装置を使用することで達成することができる。例えば、電圧計を電圧レベルを試験するのに使用することができ、オシロスコープをタイミング側面を評価するのに使用することができる。しかし、ATEの外付けの試験は非常に時間がかかり、したがって逆に生産量に影響を与えることが認められる。特に、近年注意すべき特定の問題は、タイミング精度を自己診断するデジタル試験器の能力に関する。実際、今日の電子デバイス(しばしば、何百メガヘルツの周波数領域のクロック速度で動作するよう構成される)は、一般に何百ピコ秒のオーダーの許容差内に維持されなければならない。この結果、デジタル試験器は、装置と共に提供される製造者の試験手順を介しては、必要な精度を維持することができないことを証明してきた。 【0007】この点に関する試験デバイスの一般的な失敗の結果、回路設計者は固有の試験器について試験を設計するのに精通してきた。すなわち、回路設計者は試験パラメータを持つ試験を設計して、所与の自動試験デバイスの試験要件に試験が合格するようにすることができ、一方で他の試験器のこれら同じ試験に落ちるようにすることができる。多様な自動試験装置のある特性の追跡を続けるチャートが生成されてきた。回路設計者は、所与の試験器の試験に合格する試験パラメータを設計するため、これらのチャート内に含まれる情報を使用してきた。しかし、このアプローチは、大量の製造環境を介する材料の流れだけでなく、設計される製品の全体の生産に逆に影響を及ぼして嫌悪されることが明らかである。 【0008】 【発明が解決しようとする課題】したがって、高精度でデジタル試験器の性能を検証することにより、自動試験装置(とくにデジタル試験器)の精度を改善するシステムを開発する必要性がある。 【0009】 【課題を解決するための手段】本発明の目的、利点および新しい特徴は、ある程度は以下に続く記述で説明されて以下の考察について当該技術分野の当業者に明らかになり、または本発明の実行で習得することができる。本発明の目的および利点を、特に特許請求の範囲で指摘される概念およびその組合せの手段により理解して取得することができる。 【0010】利点および新しい特徴を達成するため、本発明は、一般に集積回路を試験するデバイスの構成要素の許容差を試験するシステムおよび方法のためのものである。デバイスは、試験ヘッドに配置された複数の試験コネクタを持ち、それぞれの試験コネクタは、試験チャネルの電気信号を運ぶ導体を持つ。ここでそれぞれの試験チャネルは、少なくとも1つのドライバおよび少なくとも1つのレシーバを備える回路基板に対応する。本発明の幅広い概念および教示によると、装置および方法は、第1の基板のドライバから第2の基板のレシーバへ相互接続することにより(逆の場合も同じ)、ドライバおよびレシーバの構成要素を比較するよう動作する。試験器の製造者により提供される内蔵の試験手順は、通常1つのピンのドライバおよびレシーバを較正(calibration)するので、ケーブルおよびリレーを使用して、システムにおける1つのピンからすべての他のピンまでを1度に1つずつひっかける。したがって、本発明により提供されるクロスチェック(cross-check)は、非常に改善されたシステムおよび方法を提供し、試験器の構成要素の動作の精度を検証する。 【0011】本発明のある側面によると、装置が提供され、集積回路を試験するデバイスの構成要素の許容差を試験する。一般に試験デバイスは、試験ヘッドに配置された複数の試験コネクタにより特徴づけられる。それぞれの試験コネクタは、試験チャネルの電気信号を運ぶ。さらに、それぞれの試験チャネルは、一般に少なくとも1つのドライバおよび少なくとも1つのレシーバを備える回路基板に対応する。この一般的な型の試験器では、システムが提供され、ある1つのピンから異なる基板上の第2の1つのピンの間に低インピーダンスの電気的な接続を確立する特化されたDUT基板(または他の短絡する手段)を備える。すべての電気的な接続は、実質的に同じ電気的な長さをもつ。この低インピーダンスの経路を介して、第1の回路基板の第1のドライバが、第2の基板上の第1のレシーバに直接的に接続される(すなわち、短絡される)。コントローラは、予め定められた時に電気信号を出力する第1のドライバを制御するよう構成される。この信号は、第1のエッジで生成されるのが好ましい。既知であるように、ドライバ信号をいくつかのエッジのいずれかで生成することができる。HP83000試験器(本発明の概念および教示を取り入れることができる多くのうちの1つである)では、1つの試験器サイクル内に6つのエッジがある。好ましい実施形態は、さらに評価手段を含み、第1のレシーバで受け取られた信号を検出するよう設計される。また、タイミング手段を含み、これは信号遅延の時間を計るよう構成される。とくにタイミング手段は、ドライバからレシーバまで信号を伝搬するのに必要な時間の長さを判断するよう構成される。 【0012】上記挙げた基本要素と一貫して、本発明の好ましい実施形態は、試験器ハードウェアの試験の多様なタイミングパラメータを特別に構成することができる。例えば、ドライバ信号の立ち上がり時間を試験して、確実に立ち上がり時間が仕様の限度内におさまるようシステムを構成することができる。また、特化されたDUT基板を試験ヘッドから取り除いて、それぞれのコネクタピンがオープン回路として配置されるようにすることもできる。この無負荷の状態は、伝送線において最大のインピーダンスの不整合を生じさせ、ドライバに戻る信号の反射を最大にする。レシーバ(ドライバに対する対の一方のレシーバ)は、この反射を感知するよう構成されることができ、TDR試験(時間領域反射率計)でドライバおよびコネクタピンの間の信号のタイミング(したがってケーブルの長さ)を判断する。 【0013】本発明の他の側面によると、方法が提供され、上記述べた一般的な構成のように、試験装置の構成要素のタイミングの分散(variance)を測定する。本発明のこの側面によると、方法は第1および第2の信号ピンの導体間に電気的な接続を確立するステップを含み、第1の回路基板の第1のドライバが、低インピーダンスの経路を介して第2の回路基板の第1のレシーバに電気的に接続されるようにする。その後、この方法は、第1のドライバの出力を制御して、予め定められた時に電気信号のエッジを駆動し、第1のレシーバで受け取られた信号を検出する。最後に、この方法は、第1のレシーバで受け取られた信号が、第1のドライバから出力された予め定められた信号レベルの予め定められた時間内におさまっているかどうか判断する。 【0014】本発明のより明確な側面によると、好ましい実施形態は、プログラムコードを含むコンピュータの読み出し可能な記憶媒体上に提供され、自動試験装置の自己診断の動作を制御することができる。コンピュータの読み出し可能な記憶媒体(集積回路、磁気ディスク、CD ROM等)は、(1)第1の回路基板の第1のドライバの出力を制御して予め定められた値に電気信号を駆動するプログラムコードを含む第1のコードセグメント、(2)第2の回路基板に配置された第1のレシーバ(第1のドライバで出力された信号を受け取るよう構成される)で、信号が受け取られた時間を評価するプログラムコードを含む第2のコードセグメント(3)信号のタイミング(ドライバからレシーバへ、DUT基板を介して伝わる信号の時間の長さ)が、予め定められた信号の予め定められた許容差内におさまっており、第1のドライバおよび第1のレシーバのドライバエラーおよびレシーバエラーの理由となるかを検証するプログラムコードを含む第3のコードセグメント、を含む。 【0015】また本発明の他の実施形態によると、自動試験装置内の構成要素の許容差を試験する方法が提供され、オープンで無負荷の構成で第1の試験コネクタを配置するステップを含み、特性線路インピーダンスから最大のインピーダンスの不整合を取得して、最大の信号反射を取得する。第1のドライバは、予め定められた時に出力信号を駆動するよう制御される。その後、この方法は第1のレシーバ(第1のレシーバは、同じ基板上に第1のドライバとして配置される)で、反射された信号を感知する。最後に、方法は第1のレシーバで受け取られた信号が第1のドライバから出力された信号の予め定められた時間内に受け取られたかを検証する。 【0016】 【発明の実施の形態】本発明の多様な側面をまとめたので、図面に示されるように本発明の説明を詳細に行う。本発明をこれらの図面とともに説明するが、ここに開示される実施形態に限定されるものではない。目的とするところは、特許請求の範囲で規定される本発明の精神および範囲内に含まれるすべての代替、改良および均等に及ぶことである。 【0017】図1に、「基板型(board-type)」ATEシステム(試験器)100のブロック図を示す。本発明の好ましい実施形態は、ウェーハ試験器のためのものであるが、概念および教示はそれほど狭く限られない。したがって、図1は単に本発明の概念および教示を適用することができる従来技術のプラットホームを示すためだけに示される。ATEシステム100は、試験ジェネレータ102および試験コントローラ104を備える。試験ジェネレータ102は、試験されるべき基板上のそれぞれのデバイスについて、回路の中に組み込む方式の(in-circuit、以下「インサーキット」という)試験を生成する。一般的な試験計画106は、試験中の監視制御を提供する。これは、試験を順番付ける、結果の記録を取る、基板/取り付けのインターフェースを制御する、試験の電源を制御する、およびユーザインターフェースを提供することを含む。個々のインサーキットの試験および試験計画106の組合せは、試験の仕様を形づくる。 【0018】デバイスモデル・ライブラリ108、物理データベース110および電気データベース112は、試験ジェネレータ102に必要なデータを提供することができ、インサーキットの試験を生成する。電気データベース112は、DUT基板116上のデバイスのリスト、それぞれのデバイスの電気的記述および電気的な相互接続の情報を含むことができる。物理データベース110は、基板の配列の記述(topological description)を含むことができ、試験コントローラはこれを使用してDUT116の位置を特定することができる。物理データベース110および電気データベース112は、CAD/CAM(Computer Aided Design/Computer Aided Manufacturing)システムにより、通常は基板の設計の間に生成される。 【0019】デバイスモデル・ライブラリ108は、一般に使用されるデジタル集積回路チップ(IC)について、複数の予め生成された包括的なモデルを含む。本質的に、それぞれのモデルは、基板の試験仕様に挿入されるべき(すなわち、編集されるべき)試験ルーチンである。それぞれのデバイスモデルは、固有のデバイスについて、ピン配列の情報(すなわち、どのピンが入力、出力、双方向、または使用されないのか)、試験プログラム、デバイスのそれぞれの出力を予め調節する方法(以下に記述する)、および試験パターンのレートと必要な信号レベルを含むデバイス固有の情報を提供することができる。 【0020】試験コントローラ104は、試験ジェネレータ102で生成されたインサーキット試験を実行する。ドライバ・モジュール114は、試験信号をDUT116に印加するのに使用され、センサ(レシーバ)・モジュール118は、DUT116の試験信号に対する応答を受け取るのに使用される。ドライバ・モジュール114およびセンサ・モジュール118の組合せは、試験器チャネルとして知られる。HP83000試験器は、ATEシステムの例であり、ヒューレット・パッカード社から入手できる。 【0021】図2は、試験器100が動作することができる環境を示す。アプリケーションプログラムを走らすホストコンピュータ202を、試験ハードウェア208に接続することができる。ある実施形態では、ホストコンピュータ202を、ローカルエリアネットワーク(LAN)204を介して試験ハードウェア208に接続することができる。試験ハードウェア208は、通常試験ヘッド205を備え、試験ヘッド205は、DUT116へのインタフェース入出力を提供する。試験ハードウェア208は、アナログのドライバおよびレシーバのようなアナログデバイスを備えることができ、これらのデバイスは、DUT116についてアナログ試験を実行するのに使用される。ホストコンピュータ202のアプリケーションプログラムは、インタープリタと通信することができ、インタープリタは、リモートの試験ヘッド205に特定の機能を行うよう命令するダイナミックリンクライブラリ(DLL)コールを実行する。試験ハードウェア208は、ホストコンピュータ202から命令を受け取ることができる。これらの命令は、DUT116上で走る多様な試験を制御することができる。 【0022】図3は、より詳細な試験ハードウェア208を図示する。ある実施形態では、16個のインストルメント・ポート302(それぞれが高ライン(high line)303および低ライン(low line)305を備える)は、インストルメントMUX304への入力である(ここで、インストルメント(instrument)とは、システムの動きを理解する目的で、システムが実行している間に測定データを集めるプロセスに使用するものをいう)。インストルメントMUX304は、4本のインストルメント・バス306に信号を出力する。組み込み形(embedded)コンピュータ206は、制御線314を介して、どのインストルメント信号がインストルメント・バス306に置かれるべきかについてインストルメントMUX304に命令する。その後、インストルメント・バス306は、チャネルMUX308を介して複数のチャネルに多重化される。 【0023】組み込み形コンピュータ206は、どの信号がチャネルMUX308から出力されるかを、制御線316を介して制御する。チャネルMUX308の出力は、DUTの高ライン311およびDUTの低ライン310を備える。これら高ラインおよび低ラインは、インストルメント308により生成される。高ラインおよび低ラインは、試験中は試験チャネル312への入力として使用され、試験チャネル312は図4に詳細に示される。特定の回路基板(すなわちDUT)を試験するとき、組み込み形コンピュータ206により使用されるチャネルの数は、一般に回路基板上の試験されるべきノード数に等しい。 【0024】一般に、多くの試験器に共通の構造および環境を記述してきた。図4は、HP83000試験器の回路基板400におけるある構成要素のブロック図であり、設計された本発明の好ましい実施形態の好ましいプラットフォームである。示されるように、回路基板400は、複数のドライバ402およびレシーバ404を備える。既知であるように、ドライバ402は、試験コネクタのピンに信号を出力するよう構成される。HP83000では、16個のドライバおよび16個のレシーバが、1つの基板/チャネル上にある。しかし、1つのPMU406が基板400上に提供される。既知であるように、PMU406は、信号を定量化または測定するよう構成される。動作中、PMU406は、ドライバ402およびレシーバ404の較正を提供する。 【0025】またいくつかリレーが図に示されており、動的な基板構成を一緒に提供する。とくにリレー408は、試験コネクタとの導通から、ドライバ402およびレシーバ404を選択的に接続したり切り離したりする。他のリレー410は、基板400上の試験コネクタと他の経路(たとえばPMUと)との選択的な接続を確立する。本発明の一部がリレーの制御信号を制御して、適切な方法で基板400を動的に構成するようにし、本発明の診断機能を実行することは理解されよう。さらに、それぞれのリレーのうちの1つだけを図に示すが、複数のリレーが存在できることが理解される。例えば、リレー408が16個の対のドライバ402/レシーバ404のそれぞれについて存在する。 【0026】通常の動作では、試験コネクタは、ケーブルまたは別の手段を介して、DUT(試験中のデバイス)に接続される。このように、ドライバ402で生成された信号は、最終的にはDUT基板上の構成要素の入力を駆動する。同様に、DUT基板上の構成要素からの出力信号は、試験コネクタを介してレシーバ404に届けられる。制御可能なようにドライバ402の出力レベルを変え、レシーバ404の入力レベルを監視することにより、DUTの機能動作を試験することができる。またDUTの機能動作を検証するのに加え、試験器は、DUT上の構成要素が、規定された許容差の値または範囲に従って動作しているか検証することができる。しかし前述したように、試験器の構成要素が、失敗したりまたは規定された許容差からはずれる場合には、この種の試験は間違いや不正確な結果を生成する。 【0027】前に説明したように、タイミング精度を測定する既知の方法があり、これはオシロスコープやタイミング・ジェネレータのような外付けの測定装置を使用して、精度データを集める。この方法は、比較的高い精度を達成する一方、ユーザがいくつかの異なる測定のセットについてそれぞれのチャネルを手動で調べることを必要とする。大量の生産環境では、この外付け測定装置の方法は、受け入れられることができない。 【0028】したがって、本発明は、ある試験器の構成要素が許容差からはずれているかを試験して判断するため提供される。本発明によると、試験器はそれ自身の精度を測定するのに使用され、はるかに単純なDUT基板およびごくわずかなユーザの対話処理を要求して、データを得る。理解されるように、この方法は、製造環境への影響を最小にしつつ十分な測定精度を提供するので、非常に良い選択である。 【0029】簡単に図5を参照すると、特別に構成されたDUT基板500が、本発明の好ましい実施形態で実行される自己診断と関連して使用される。とくに、この特化したDUT基板500は、試験コネクタ502および504からのピンを一緒に短絡する。前述したように、試験器は試験ヘッド205を備え、これを介して試験器とのすべての電気的な接続が確立される。試験ヘッド205は、試験コネクタ502および504のような複数のコネクタを含む。チャネル01から16が、これらの試験コネクタ502および504のそれぞれに示される。チャネル01は、回路基板400上の第1のドライバ402/レシーバ404の対に対応する。好ましい実施形態における特別に構成されたDUT基板500は、隣接する試験コネクタ502および504の間のチャネル線を一緒に短絡する導電性の経路(たとえば図5の506)を備える。このように、第1の回路カード400(例えば、試験コネクタ502に対応するカード)のドライバは、第2の回路カード(例えば、試験コネクタ504に対応するカード)のレシーバに接続されることができる。好ましい実施形態が、それぞれの回路基板400上のリレー制御信号を制御して適切な信号の経路を生じさせ、この接続を確立するようにするのは当然である。好ましい実施形態では、DUT基板500上のすべての導電性の経路(例えば、506)が、同じ長さである。 【0030】本発明の固有の概念および教示によると、好ましい実施形態のタイミングの計測学制御ツールは、エッジ配置エラーを測定する。エッジ配置エラーは、意図されるドライバまたは比較器のエッジ位置と、試験器のサイクル内の実際の位置との間の差である。理解されるように、エッジ配置エラーは、タイミング遅延エラー、タイミングのジッター(jitter)および遷移時間の変動から構成される。 【0031】既知であって前述したように、エッジ配置の精度を検証する伝統的な方法は、より正確なツールを使用してそれぞれのエッジ位置を測定し、それをシステムにおける標準的なエッジと比較することである。例えば、これは、オシロスコープまたは少なくとも10:1の精度のアドバンテージを持つ他のツールのような外付けのデバイスを使用して実行することができる。ピンの数が少ない場合には、この方法を受け入れることができるであろう。しかし、多数のピンを複数のエッジで試験するとき(特に大量な環境では)、より効率的な方法が望ましい。 【0032】一般に、測定される必要がある多数のエッジのために、また本発明の側面を実行するには必要ないけれども、試験器および試験器の構成要素の精度を判断するのに確率および統計を使用することができる。下記のように、短絡基板およびオープン回路の両方の試験を使用して、自動的に大量の測定値を集めるのにロバストな(robust)分析ルーチンを使用することができる。 【0033】短絡基板は、図5に関連して述べるようにDUT基板500を使用する。システムに置かれると、図6に示されるような構成となる。ここでとくに記述しないけれども、回路基板の多様なリレーが制御され、図6に示される位置に動く。この構成では、ドライバ402が「高」に駆動し、レシーバ404bが伝搬遅延機能試験を行う。この試験によると、レシーバ404bが駆動されたパルスの位置を見つけるとき、システムがその到着の時間を記録する。HP83000のある実現では、この試験が36回繰り返され、これは6個のドライブエッジおよび6個のレシーバエッジのすべての組合せとなる。(1つの試験サイクルあたり6個のエッジがある)。 【0034】短絡基板500上の導電性のパターン(trace、線)の長さは、比較/差の伝搬遅延を測定することができるよう、すべてのピンの対について実質的に同じ長さであるのが好ましい。試験器が完全であるならば、すべてのピンの対について記録された値は同じになる。試験が1つの方向で完了した後、ピンは機能を交換し、全プロセスが繰り返される。すなわち、ドライバ402bがレシーバ402aを駆動するよう構成される。試験が完了した時、ドライブデータおよびレシーブデータの両方が、すべてのピンについて集められている。 【0035】本発明の好ましい実施形態で行われる他の試験は、時間領域反射率計(TDR)測定と呼ばれる。上記述べた試験と異なり、この試験は、試験ヘッド上の短絡基板500を用いずに行われる。この結果、それぞれのピンは、エッジ1で1つを開放(開路、オープン)に向けて駆動する。すなわち、いかなる接続も、よっていかなる負荷も、試験ヘッドのピンには関連しないので、信号の100%が反射されて、ドライバ402/レシーバ404の対(図4)に戻る。反射された信号がレシーバ404に戻るのにかかる時間が、サイクルの他の5つのタイミングエッジを使用して測定される。TDR測定は数回繰り返され、立ち上がり時間と、それぞれのピンのエッジ1のエラーオフセットを加えたケーブルの長さの両方を見つける。 【0036】図7は、TDR試験測定の設定(回路および波形の両方)を示す。示されるように、ドライバ402は導線702に沿って信号を駆動する。ドライブ信号がケーブル702に置かれると、レシーバ404で観察されるように、この信号は704から706へ進む(ステップする)。ドライブ信号は、(HP83000の6エッジの)エッジ1においてケーブル702上に置かれるのが好ましい。ドライブ信号がケーブル702の無負荷の終端(すなわちピン)に達すると、それは反射して戻され、したがって振幅708が2倍になる(駆動されたパルスに付加されるので)。2つの信号のステップ(段)の間の距離すなわち時間は、距離すなわち導線702の長さに正比例する。 【0037】行われる2つの測定試験を簡単に記述したので、測定の理論について述べる。とくに、確率および統計が、いくつかの仮定を想定することにより、試験器の繰り返し精度(repeatability)および精度(accuracy)を監視するのに使用される。この仮定は、以下の通りである。 1.タイミングエラーは、ゼロ周辺に対称的に分散されるエラーであるので、平均測定値は、実際の、すなわち正確な値に非常に近い。 2.システムの平均値を取って、それを、そのシステムに許容可能なエラーを加えた(または減じた)ピンの値と比較することにより、ピンが製造者の仕様内におさまっているかどうか判断することができる。 3.すべてのシステムの平均、上位、下位の測定された時間を一緒に比較することにより、試験のプラットホームの繰り返し精度を判断することができる。 4.ピンのいかなる対も、反対方向に完全に仕様からはずれているわけではないので、それらのオフセットエラーの合計はゼロに近くなる。結果として、仕様限度の2倍より多く仕様からはずれた6エッジすべてをピンが持つ場合には、その対の他方のピンの6エッジは、反対方向に同じ量だけはずれている。許容可能なエラーを2倍にして(測定で使用される2つのピンのために)、上記の仮定を使用することにより、対のピンの精度を追跡して監視することができる。それぞれのピンのエラーを見つけるためのある方法を、以下に記述する。 【0038】データが集められると、試験器の繰り返し精度および精度を判断するようそれらを処理することが必要である。3つの前述した測定から、4つの異なるパラメータを計算することができる。パラメータは、立ち上がり時間、TDR、ドライブエラーおよびレシーバ404のエラーであり、これらのそれぞれについて以下に説明する。 【0039】立ち上がり時間測定立ち上がり時間測定がTDRで取得されるので、波形はステップ(段、図7に示されるように)を持つ。このステップは、立ち上がり時間の機能でなく、反射されたエッジの機能である。ステップの問題を考慮に入れて、立ち上がり時間は2回(1回目は10〜40%において、2回目は60〜90%において)測定される。それぞれのピンについて記録された数は、ボルト/ナノ秒で表わしたこれら2つの数の平均である。 【0040】TDR測定TDR試験は、ドライバ402から線の終端まで、そして戻ってレシーバ404まで(図7を参照)の伝送線の遅れすなわち長さを測定する。TDR測定が、短絡基板500または他の負荷を用いずに実行されるので、ドライバ402は信号を開放(開路、オープン)に向けて駆動し、ドライブ信号の100%がポーゴー(pogo)ピン(すなわちコネクタにおけるピン)の先端で反射される。TDR試験で記録される時間(Tdr)は、【0041】 【数1】 Tdr = 実際の伝送時間 − 較正オフセット 式(1)【0042】である。ピンまたはエッジの較正オフセットが正確な場合には、記録される値(Tdr)はゼロのはずである。しかし、これはめったにないケースである。以下の式が、式(1)にとってかわることができる。 【0043】 【数2】 Tdr = △D − △C 式(2)【0044】ここで、Tdr=測定時間、△D=ドライバのエッジのエラー、△C=レシーバのエッジのエラー、である。所与のピンおよびエッジのドライバエラーおよびレシーバエラーが、等しい大きさであると仮定すると、【0045】 【数3】 |△D| = |△C| 式(3)が成立する。上記の式(2)に基づいて、△Dおよび△Cを解くことができる。 【0046】 【数4】 △D = Tdr/2 △C = −Tdr/2 式(4)【0047】エッジ1で駆動して、他の5つのエッジで受け取る場合には、2倍の伝送エラーまたは4倍のエッジ1のドライブエラーを見つけることができる。5つのレシーバエッジの平均を取ることにより、ジッターにより生じたエラーのほとんどが、測定から平均される。 【0048】短絡基板測定短絡基板測定は、システム全般の考察を与えるにすぎない。これは、不正確なドライバ402が、信号を不正確なレシーバ404に駆動するからである。それ自身でこの試験を見るのは、任意の1つのピンについて+/−2倍の試験器の精度を与えることができるにすぎない。したがって、短絡基板の試験は、通常重要な問題を識別する。しかし、一組のピンの複数測定で、短絡基板のデータが処理され、エッジ1に対する2〜6のエッジのエラーを見つけることができる。これは、それぞれのドライバ402およびレシーバ404について別個に行われる。短絡基板試験で測定された時間(t)の以下の式で始まる。 【0049】 【数5】 t = d − c 式(5)ここで、d = D + △D 式(6)c = C + △C 式(7)【0050】また、t=短絡基板を使用して測定された値、D=正確なドライブ時間、△D=ドライブエラー、C=正確なレシーバ時間、△C=レシーバエラー、である。△Dおよび△Cは、一緒に加えられたすべてのピンについて平均値ゼロを持ち、σdおよびσcの分散(variance)を持つ。また試験器から得られたデータは、△Dおよび△Cが普通はゼロ周辺に分布することを示す。 【0051】 【数6】 t = d−c = D+△D−(C+△C)=D−C+△D−△C 式(8)十分較正されたシステムにおいて予想される値は、t=D−Cである。システムの分散は、【0052】 【数7】 分散(t) = 分散{(D−C)+(△D−△C)} 式(9) = σd2+σc2−2Cov(△D−△C) 式(10)【0053】エッジエラーがすべて独立であるので、共分散(covariance)は、ゼロに等しい。よって、2Cov(△D−△C)=0である。 【0054】ピンの対について、lをドライバエッジの番号、mをレシーバエッジの番号と定義することにより、式(8)、式(10)は、それぞれ以下のようになる。 【0055】 【数8】 tlm = dl−cm = Dl+△Dl−(Cm+△Cm) 式(11) σ2Σtlm = σd2l + σc2m 式(12)式(8)を使用して以下を得る。 【0056】 【数9】 t11−t12=D1+△D1−(C1+△C1)−[D1+△D1−(C2+△C2)] t11−t13=D1+△D1−(C1+△C1)−[D1+△D1−(C3+△C3)] ・ ・t16−t16=D1+△D1−(C1+△C1)−[D1+△D1−(C6+△C6)] またはt11−tlm=D1+△D1−(C1+△C1)−[D1+△D1−(Cm+△Cm)] 式(13)【0057】これらの式が、HP83000の6エッジについてのものである。DおよびCは、両方ともこれらの式の定数である。ドライブエッジのエラーおよびレシーバエッジのエラーについて個別に解くことにより、以下の式が得られる。 【0058】 【数10】 t12−t11=△C2−△C1 t21−t11=△D1−△D2 t13−t11=△C3−△C1 および t31−t11=△D1−△D3 ・ ・ ・ ・ t16−t11=△C6−△C1 t61−t11=△D1−△D6【0059】ここで、10個の式および12個の未知数がある。この10個の式から、以下の2つの式が、得られる。 【0060】 【数11】 t1m−t11=△Cm−△C1 式(14) およびtn1−t11=△D1−△Dn 式(15) 【0061】この時、2〜6のエッジのエラー量を、エッジ1に対して見つけることができる。すべてのピンのエッジ1を互いに参照する方法が必要である。TDR測定から式(4)を使用してエッジ1を見つけ、それを式(14)および(15)に代入することにより、以下が得られる。 【0062】 【数12】 △Cm=t1m−t11−Tdr/2 式(16) および△Dn=t11−tn1+Tdr/2 式(17) 【0063】これらの式は、レシーバの測定からのジッターを考慮しない。しかし、短絡基板のそれぞれのエッジの6個の測定値、およびTDR試験のエッジ1の5個の測定値を平均することにより、ジッターにより生じたほとんどすべてのエラーが取り除かれる。 【0064】式(16)および(17)を使用することにより、ドライバエラーおよびレシーバエラーを、それぞれのエッジについて別個に見つけることができる。これらの式を用いることで、製造者の仕様を2倍にする必然性が、必要でなくなる。この試験は、ピン毎およびエッジ毎について製造者の仕様に、試験器の能力を確実に整合させる。 【0065】標準方程式上記の測定方法および仮定を使用することにより、試験器を多くの異なる方法(これら方法のすべてが問題の追跡に役立ち、試験器のエッジ配置の精度を制御する)で監視することができる。5種類すべての得られたデータについて、4つのデータポイントが計算され、統計データベースで追跡することができる。これらの4つのデータポイントを図示することにより、それぞれのシステムを追跡し、互いに比較することができる。任意の図表の領域で、あるシステムが他のシステムと異なる場合には、それはこれらの図の1つに現れる。得られた測定または計算のそれぞれのセットについて、4種類の図示される統計は、「平均」、「標準偏差」、「最小値」および「最大値」である。 【0066】装置の仕様とともに、それぞれの測定について限界を設定するのに統計図表を使用することができる。試験プログラムが実行されるたびに、結果はこれらの限界と照合される。データポイントがこれらの限界の外側で見つかる場合には、試験は失敗し、メッセージがディスプレイに送られる。さらに、試験の種類、ピン番号およびエラー量をカバーする情報をファイルに送り、試験器の較正または修正に使用することができる。 【0067】また、それぞれのピンの平均オフセット値の記録を取ることにより、TDR、立ち上がり時間および短絡基板測定を、HP83000の障害探索を行う際に使用することができる。これは、それぞれのピンについてドライバ402およびレシーバ404のオフセットエラーを平均することにより行われる。データは、それぞれのシステムのローカルファイルに記録を取ることができる。それぞれのピンの最後の6エントリを、以下の統計の評価のため調べることができる。1.20ピコ秒より大きい標準偏差2.平均+/−ピンの標準偏差により形成された範囲外の最後のデータポイント3.20ピコ秒より大きいもののプラスまたはマイナスの傾向これらの条件のいずれかが合う場合には、その情報がユーザに報告される。 【0068】図8を簡単に参照すると、これは、ドライバの動作を検証する方法に含まれる主要なステップの操作フローチャートを示す。とくに、立ち上がりで、この方法は初期化ルーチン702を実行する。初期化ルーチン702は、変数の初期化および様々な初期構成作業を実行することを含み、これらは試験器から試験器へ、また実行から実行へと必然的に変化するので、ここで述べる必要はない。初期化の後、方法は多様な試験器チャネルを判断して構成し、多様な試験を行うことができる。その後、試験器は、立ち上がり時間の試験(ステップ806)、TDR試験(ステップ808)および短絡基板の試験(ステップ810)を含む多様な試験を行う。 【0069】好ましい実施形態では、この試験の結果を示すグラフィック出力を生成するようルーチンを与えることができる(ステップ811)。そのようなグラフィック出力は、図9に示されるものに類似することができる。この点について、グラフの垂直寸法はTDR試験の標準偏差に対応することができ、水平寸法はデータ、時間または試験番号を表すことができる。図示されたグラフにおいて、水平ライン902および904は、許される許容差または偏差の範囲を表す。したがって、グラフの領域906が失敗した状態、すなわちいずれにしてもドライバが規定された許容差内で実行しなかった試験を表す。 【0070】最後に、ステップ812で、方法は結果を評価し、ドライバ402およびレシーバ404が許容差内であるかどうか判断する。 【0071】上記の記述は、図示および記述の目的のために提示された。これは、開示された精密な形に本発明を限定するものではない。明らかな修正または様々な形態が、上記の教示を考慮して可能である。説明した実施の形態は、本発明の原理および実際的な応用分野の最高の例示を示し、またそれにより当該技術分野の当業者が様々な形態または様々な改良と共に本発明を利用するよう、選ばれて提供された。すべてのこのような改良および様々な形態は、特許請求の範囲が、公平かつ合法的に与えられる権利に従って解読されるとき、特許請求の範囲により決定される本発明の範囲内におさまる。 【0072】本発明の多様な側面を記述してきたので、本発明の好ましい実施形態の一部を実行するのに使用する命令コードを以下に提供する。 【0073】 【表1】 static char rcsid[] = RCSSTR;#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>#include<time.h>#include<unistd.h>float SPEC1D[1025][7][7], SPEC1R[1025][7][7], SPEC2D[1025][7][7], SPEC2R[1025][7][7], TDRD[1025][7], TDRR[1025][7], RISETIME[1025];char *in_data, tester[20];int maxpin=0, date, tim; FILE *in_file;void read_data();void rise_times();void TDR_times();void STATS();void tester_name();void PRlNT_FILES();void PRlNT_SQCS();main(argc,argv) int argc; char **argv;{ in_data=argv[1]; if(argc==2) { in_file=fopen(in_data,"r"); read_data(); fclose(in_file); tester_name(); rise_times(); TDR_times(); PRINT_SQCS(); PRlNT_FILES(); } else{ printf("no data\nThe file pointer is %s\n",in_file); }}/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/void read_data(){char line[3024], testname[20];int Dch, Rch, Dedge, Redge, frame, bd, pin, tmp, Dpin, Rpin; float value; while(!feof(in_file)) { fgets(line,256,in_file); sscanf(line,"%d%d%s%d%d%d%d%f", &date,&tim,testname,&Dch,&Dedge,&Rch,&Redge,&value); Dpin=Dch; Rpin=Rch; frame=Dch/10000; bd=(Dch/100)-(frame*100); pin=Dch-((bd*100)+(frame*10000)); tmp=pin+((bd-1)*16)+((frame-1)*512); Dch=tmp; frame=Rch/10000; bd=(Rch/100)-(frame*100); pin=Rch-((bd*100)+(frame*10000)); tmp=pin+((bd-1)*16)+((frame-1)*512); Rch=tmp; /* printf("\t\t%s%d%d%d%d%f\n", testname,Dch,Dedge,Rch,Redge,value);*/ if(strncmp("SPEC1",testname,5)==0) { SPEC1D[Dch][Dedge][Redge]=value; SPEC1R[Rch][Dedge][Redge]=value; } if(strncmp("SPEC2",testname,5)==0) { SPEC2D[Dch][0][0]=Dpin; SPEC2R[Rch][0][0]=Rpin; SPEC2D[Dch][Dedge][Redge]=value; SPEC2R[Rch][Redge][Dedge]=value; /* printf("PlN%.0f,%d\t%d\t%d\t%.2f\n",SPEC2D[Dch][0][0],Dch,Dedge,Redge,value);*/ } }}/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/void tester_name(){char *line;strcpy(tester,in_data);if((line=strrchr(tester,'/'))!=NULL) {/* printf("the tester is %s and the line is %s\n",tester,line);*/ strcpy(tester,&line[1]); } tester[1]=NULL;/* printf("the tester is %s\n",tester);*/}/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/void rise_times(){ int i=1, j, k, tmpval, num;for(i=1;i<=1024;i++) { if SPEC1D[i][1][1]!=0) { RISETIME[i]=0; for(j=1;j<=6;j++) { for(k=1;k<=6;k++) { RISETIME[i]=RISETIME[i]+SPEC2D[i]][j][k]-SPEC1D[i][j][k]; } } RISETIME[i]=RISETIME[i]/36000; RISETIME[i]=1/RISETIME[i]; maxpin=maxpin+1; } }}/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/void TDR_times(){ int i=1, j, k;for(i=1;i<=1024;i++) { for(j=0;j<=6;j++) { TDRD[i][j]=0; TDRR[i][j]=0; } }for(i=1;i<=1024;i++) { if(SPECID[i][1][1]!=0) { for(j=2;j<=6;j++) { for(k==l;k<=6;k++) { TDRD[i][j]=TDRD[i][j]+SPEC2D[i][j][k]-SPEC2D[i][1][k]; TDRR[i][j]=TDRR[i][j]+SPEC2R[i][1][k]-SPEC2R[i][j][k]; } TDRD[i][j]=TDRD[i][j]/6; TDRR[i][j]=TDRR[i][j]/6; /* printf("\t\t %d%d%.2f%.2f\n",i,j,TDRD[i][j],TDRR[i][j]);*/ } } }}/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/void PRlNT_SQCS(){ char outfile[20]; float tdrd, tdrr, shortt; int i, j, k; FILE *fp1; strcpy(outfile,"SQCS_FILE_NEW"); fp1=fopen(outfile,"w"); fprintf(fp1,"richl@fc.hp.com\nobservation\n"); fprintf(fp1,"date time obs_desc_id key valid f330 pinnum riseval tdrdrive tdrreceive shortval\n"); fprintf(fp1,"free_format\n");for(i=1;i<=1024;i++) { if(SPEC1D[i][1][1]!=0) { tdrr=0; tdrd=0; shortt=0; for(j=2;j<=6;j++) { tdrr=tdrr+TDRR[i][j]; tdrd=tdrd+TDRD[i][j]; } tdrr=tdrr/5; tdrd=tdrd/5; for(j=1;j<=6;j++) { for(k=1;k<=6;k++) { shortt=shortt+SPEC2D[i][j][k]; shortt=shortt+SPEC2R[i][j][k]; } } shortt=shortt/72; fprintf(fp1,"%08d %06d f330.timing sqcs t%s%.0f%.2f%.2f%.2f%.2f\n",date,tim,tester,SPEC2D[i][0][0],RISETIME[i],tdrd,tdrr,shortt); } } fprintf(fp1,"END\n"); fclose(fp1);}/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/void PRlNT_FILES(){ int i, j, k, F_OK, PinNum, shortCount=0; float avgd, avgr, pinavg, shortAvg=0; char *local_path; FILE *tdrr_file, *tdrd_file, *rise_file, *short_file, *pin_timing; local_path="/users/tech/local/Pin.timing";/* local_path="Pin.timing"; */ tdrr_file=fopen("/tmp/TDRR.timing","w"); tdrd_file=fopen("/tmp/TDRD.timing","w"); rise_file=fopen("/tmp/RISE.timing","w"); short_file=fopen("/tmp/SHORT.timing","w");if(access(local_path,F_OK)!=0) { pin_timing=fopen(local_path,"w"); fprintf(pin_timing,"File/Date\t"); for(j=1;j<=1024;j++) { if(TDRR[j][2]!=0 || TDRRD[j][3]!=0 || TDRRD[j][4]!=0 || TDRRD[j][5]!=0 || TDRRD[j][6]!=0) { PinNum=(j/16)+1; if((j-(PinNum-1)*16)==0)PinNum=10000+((PinNum-1)*100)+16; else PinNum=10000+(PinNum*100)+(j-((PinNum-1)*16)); fprintf(pin_timing,"%d\t",PinNum); } } fprintf(pin_timing,"\n"); fclose(pin_timing); } pin_timing=fopen(local_path,"a"); fprintf(pin_timing,"%08d",date); for(i=1;i<=1024;i++) { if(SPEC2D[i][1][1]!=0) { for(k=1;k<=6;k+h) { avgd=avgr=0; for(j=1;j<=6;j++) { avgd=avgd+SPEC2D[i][k][j]; avgr=avgr+SPEC2R[i][k][j]; } avgd=avgd/6; avgr=avgr/6; shortAvg=shortAvg+((avgd+avgr)/2); shortCount++; } } } shortAvg=shortAvg/shortCount; for(i=1;i<=1024;i++) { if(TDRR[i][2]!=0 || TDRR[i][3]!=0 || TDRR[i][4]!=0 || TDRR[i][5]!=0 || TDRR[i][6]!=0) { pinavg=0; for(j=2;j<=6;j++) { fprintf(tdrr_file,"%.0f\te%d\t%.1f\n",SPEC2D[i][0][0],j,TDRR[i][j]); fprintf(tdrd_file,"%.0f\te%d\t%.1f\n",SPEC2D[i][0][0],j.TDRD[i][j]); pinavg=TDRR[i][j]+TDRD[i][j]; } pinavg=pinavg/10; fprintf(pin_timing,"\t%3.2f",pinavg); } if(RISETIME[i]!=0) { fprintf(rise_file,"%.0f\t%.3f\n",SPEC2D[i][0][0],RISETIME[i]); } if(SPEC2D[i][1][1]!=0) { for(k=1;k<=6;k++) { avgd=avgr=0; for(j=1;j<=6;j++) { avgd=avgd+SPEC2D[i][k][j]; avgr=avgr+SPEC2R[i][k][j]; } avgd=avgd/6; avgr=avgr/6; fprintf(short_file,"%.0f\tDe%d\t%.1f\n",SPEC2D[i][0][0],k,(avgd-shortAvg)); fprintf(short file,"%.0f\tRe%d\t%.1f\n",SPEC2D[i][0][0],k,(avgr-shortAvg)); } } } fprintf(pin_timing,"\n"); fclose(tdrr_file); fclose(tdrd_file); fclose(pin_timing); fclose(short_file); fclose(rise_file);}以下のプログラムは、別のプログラムで作られた4個のファイルにおいて規定値からはずれている値についてチェックする。規定値は、以下に示すように、$tdr_specN, $tdr_specP,$nrz_specN, $nrz_specP, $rise_specN, および $rise_specPとして設定される。 ########################## MAIN MAlN ############################## 以下は、一時的なディレクトリに格納された3個のデータファイルにおいて# 規定値からはずれた測定値についてチェックするのに使用される値である。 # これらのファイルは、未処理データファイルが処理される時に作られる。 $tdr_specN=-100; #SQSCのTDR時間のLCLから引き出されたTDR測定の低規定値$tdr_specP=100; #SQSCのTDR時間のUCLから引き出されたTDR測定の高規定値$nrz_specN=-300; #SQSCのシステム時間のLCLから引き出された短絡基板測定の低規定値$nrz_specP=300; #SQSCのシステム時間のUCLから引き出された短絡基板測定の高規定値$rise_specN=1.00; #SQSのLCLから引き出された立ち上がり時間(ホ゛ルト/ナノ秒)測定の低規定値$rise_specP=2.50; #SQSCのUCLから引き出された立ち上がり時間(ホ゛ルト/ナノ秒)測定の高規定値# answer2 が "go" に設定され、whileループを開始する$answer2="go"; # ユーザからの入力# このwhileループは、プログラムの開始でメニューを設定し、ユーザが "exit, EXIT,quit, QUIT, q, または Q" をタイプするまで走り続ける chdir"/users/tech/tools" || die "Can't cd to /users/tech/tools:$!\n"; while($answer2!〜/exit|EXIT|quit|QUIT|q|Q/) {# if文は、異なるサブルーチンをコールする。 # DPSチェックを走らす if(($answer2=〜/1/) || ($len==1)) { print("\n\n\n\tMake sure the >>>> DPS Check <<<< board is loaded on test head: before you go on. Hit RETURN to continue.q to quit\n\n"); $answer=<STDIN>; if($answer=〜/q/) { die "Stopping program now"; } print("\tRunning DPS test\n"); system("/users/tech/tools/dpscheck_f330"); }# レベルチェックを走らす if(($answer2=〜/2/) || ($len==1)) { print("\n\n\n\tMake sure the >>>> spec_chk <<<< board is loaded on test head: before you go on. Hit RETURN to continue or q to quit.\n\n"); $answer=<STDIN>; if($answer=〜/q/) { die "Stopping program now"; } print("\tRunning levels drive test\n"); system("/users/tech/tools/lev_chk"); }# spec_checkの第1パートを走らせ、ピンをロードする if(($answer2=〜/3/) || ($answer2=〜/a/) || ($len==1)) { &pincount; }# spec_checkの第2パート、scheckを走らす。このプログラムは、試験器からデータを集める if(($answer2 =〜/3/) || ($answer2 =〜/b/) || ($len==1)) {# 時間を見つける require "ctime.pl"; require "syscall.ph"; @time=split(" ",&ctime(time)); $time[5]=$time[5]-1900; $name='hostname';# システム名を見つける @tester=split(" ",$name); $new=("new"); $outfile="$tester[6]_$time[1]_$time[2]_$time[5]\n"; $outfile_new="$tester[6]_$time[1]_$time[2]_$time[5]_$new\n"; &scheck; }# spec_checkの第3パート, edge_timeを走らす。第2パートからのデータを処理する if(($answer2=〜/3/ || ($answer2=〜/c/) || ($len==1)) { &stats; }# spec_checkの第4パート, checking_specsを走らす。規定値は、プログラムの頭で設定される { &checking_specs; }# データをSQCSに送る if(($answer2=〜/3/) || ($len==1)) { &sqcs_send; }# ピンタイミングのローカルファイルでpinparse を走らす if(($answer2 =〜/3/) || ($answer2=〜/e/) || ($len==1)) { &tracker; } &question2; $len=length($answer2); } print("\n\tNow exiting!!!!!!\n\n");################## END MAlN ################################################################################################# QUESTION2 SUB ######################################################################################### このサブルーチンは、画面に以下の質問を印刷する。whileループに# "answer2" を戻す。 sub question2{ print("\n\n\n Please enter list (all on one line) of test you would like to run, \n\n\tor HIT RBTURN for all:\n"); print(" Run DPS Check : 1 Run Levels Check : 2 Spec_chk : 3 Engineering> Load Pins :a Spec_check (gather data off tester) :b Process data from raw file :c Check data for OUT OF SPEC limits :d Run pin tracking of this system : e Type exit, quit or q to quit Enter number(s) and then hit RETURN. "); $answer2=<STDIN>;}####################################################### ############### PINCOUNT SUB ########################## ####################################################### # サブルーチンはモデルファイルを読み、並列および走査ピンの数をカウント# する。その後、情報を "filegen"に渡す。 "filegen" は、走らせるシステム# についてピン、タイミング、レベル、ベクトルおよびピンの属性ファイル作る# プログラムである。ファイルが作られた後、システムコマンドでそれらを所定# の位置に移すことができるsub pincount { open(model,"/hp83000/pws/data/model"); $p=0; $s=0; $bay1=0; $bay2=0;#モデルファイルを読み、並列および走査ピンの数をカウントする while(<model>) { @model=split(",",$_); if(($model[0]=〜"F330T") && ($model[0]!〜 "#")) { if($model[1]<20100) { $k=int(($model[1]-10000)/100); $l=$model[1]-(10000+($k*100)); $m=int(($model[2]-10000)/100); $n=$model[2]-(10000+($m*100)); if($k>31) { $s=$s+($m-$k)*16+($n+1-$l); } if($k<32) { $p=$p+($m-$k)*16+($n+1-$l); $bay1=$bay1+($m-$k)*16+($n+1-$l); } } if($model[1]>19100) { $k=int(($model[1]-20000)/100); $l=$model[1]-(20000+($k*100)); $m=int(($model[2]-20000)/100); $n=$model[2]-(20000+($m*100)); if($k<33) { $p=$p+($m-$k)*16+($n+1-$l); $bay2=$bay2+($m-Sk)*16+($n+1-$l); } } } } print("filegen $p $s\n"); if($bay2>0) {# print("filegen.new $bay1 $s $bay2\n"); system("filegen.new $bay1 $s $bay2\n"); } if($bay2==0) {# print("filegen.new $bay1 $s\n"); system("filegen.new $bay1 $s\n"); } close(model); system("cp/users/tech/tools/pins/fedisk2/spec_chk/configuration/."); system("cp/users/tech/tools/lev/fedisk2/spec_chk/levels/."); system("cp/users/tech/tools/timA/fedisk2/spec_chk/timing/."); system("cp/users/tech/tools/tim1/fedisk2/spec_chk/timing/."); system("cp /users/tech/tools/vec/fedisk2/spec_chk/vectors/.");}################################################################### ################### SCHECK SUB #################################### ################################################################### # "scheck"を走らす。これは、ファームウェアコマンドを使用するCのプログラ# ムであり、それぞれの試験器から3つの重要なデータ、立ち上がり時間、TD# R時間、あるピンから別のピンへの短絡基板を介した伝送時間を、すべてのピ# ンについて集める。 sub scheck { print("Now calling spec_new $outfile_new\n"); system("spec_new $outfile_new"); # 新しい試験を走らす # この試験は 十分速いので、scheckを置き換えることができる。 # 適した spec_chk bd ですべての試験を行う }################################################################## ################ STATS SUB ######################################################################################################### # edge_timeを走らす。プログラムは、未処理データファイルを得て、# 立ち上がり時間、TDR測定値および短絡基板時間を見つける。また、# ドライバおよびレシーバのオフセットを見つける。それぞれのピンについて# このデータが見つけられた後、標準偏差、平均、最大および最小を見つける。 # 5個のファイルにデータを印刷する。そのうちの3個のファイルは、in/tmp# であり、それらは立ち上がり時間、TDR測定値および1つのピンあたりの全# 体のタイミングである。1つのファイルはSQCSファイルであり、最後の1ファ# イルは1つのピンあたりの平均オフセットである。この最後のファイルは、# それぞれのシステムにローカルに格納される。 sub stats { if(($answer2!〜/b/) && ($answer2=〜/c/) { print("\n\t Please enter raw files name (please grve rel.path):\n\n "); $outfile=<STDIN>; } chop($outfile); print("Now running statistics on the $outfile"); system("spec_parses $outfile_new"); system("compress $outfile_new"); system("mv $outfile\*/users/tech/tools/data/.");}################################################################### ###################### CHECKING SPECS SUB ######################### ################################################################### # プログラムのこのパートは、in/tmpに格納された3個のファイルを読み、この# プログラムの先頭にリストされた仕様に反する各ピンをチェックする。仕様か# らはずれたピンが見つかった場合には、エラー量と一緒にピンの番号が# /tmp/Bad_pinsに格納され、メッセージが画面に印刷される。 sub checking_specs { open(TDRD,"/tmp/TDRD.timing"); # scheckからのTDR測定値 $bad_pins=0; $No_run=0; open(Badpins,">/tmp/Bad_Pins"); while(<TDRD>) { $No_run=1; @tdr=split(" ",$_); if($tdr[2]<$tdr_specN) { $out=$tdr[2]-$tdr_specN; $bad_pins=1; print Badpins "TDR DRIVE edge on PIN $tdr[0] out by $0ut picosec.\n"; } if($tdr[2]>$tdr_specP) { $0ut=$tdr[2]-$tdr_specP; $bad_pins=1; print Badpins "TDR DRIVB edge on PlN $tdr[0] out by $0ut picosec.\n"; } } print Badpins "\n\n"; close(TDRD); open(TDRR,"/tmp/TDRR.timing"); # scheckからのTDR測定値 while (<TDRR>) { $No_run=1; @tdr=split(" ",$_);# print "$tdr[2]\n"; if($tdr[2]<$tdr_specN) { $out=$tdr[2]-$tdr_specN; $bad_pins=1; print Badpins "TDR RECEIVER edge on PlN $tdr[0] out by $outpicosec.\n"; } if($tdr[2]>$tdr_specP) { $out=$tdr[2]-$tdr_specP; $bad_pins=1; print Badpins "TDR RBCElVER edge on PlN $tdr[0] out by $outpicosec.\n"; } } print Badpins "\n\n"; close(TDRR); open(NRZ,"/tmp/SHORT.timing"); # scheck からの短絡基板の測定値 while(<NRZ>) { $No_run=1; @nrz=split(" ",$_);# print"$nrz[O]->$nrz[2]\n"; if($nrz[2]<$nrz_specN) { $out=$nrz[2]-$nrz_specN; $bad_pins=1; print Badpins "SHORTED PlN $nrz[0] out by $out picosec.\n"; } if($nrz[2]>$nrz_specP) { $out=$nrz[2]-$nrz_specP; $bad_pins=1; print Badpins "SHORTED PlN $nrz[0] out by $out picosec.\n"; } } print Badpins "\n\n"; close(NRZ); open(RISE,"/tmp/RISE.timing"); # scheck からの立ち上がり時間測定値 while(<RISE>) { $No_run=1; @rise=split(" ",$_);# print "$rise[0] $rise[1]\n"; if($rise[1]<$rise_specN) { $out=$rise[1]-$rise_specN; $bad_pins=1; printf Badpins "RISE PlN $rise[0] out by %.3f volts/nsec.\n",$out; } if(($rise[1]>$rise_specP) && ($rise[1]<1000)) { $out=$rise[1]-$rise_specP; $bad_pins=1; printf Badpins "RISE PlN $rise[0] out by %.3f volts/nsec.\n",$out; } } print Badpins "\n"; close(RISE); select(STDOUT); close(Badpins); if($No_run==0) { print("\n\nERROR--ERROR--ERROR--ERROR--ERROR--ERROR--ERROR\n\n"); print("*************** TEST DID NOT RUN ****************\n\n") print("***** MAKB SURB HPSmarTest IS RUNNlNG ********\n") print("ERROR--ERROR--EREtOR--ERROR--ERROR--ERROR--ERROR\n\n"); } if(($bad_pins==0) && ($No_run==1)) { print("\n***********************************************\n"); print("********** NO PINS OUT OF SPEC ******************\n"); print("*************************************************\n\n"); } if($bad_pins==1) { print("\n***********************************************\n\n"); print("**** PINS OUT OF SPEC PINS OUT OF SPEC ***********\n\n"); print("A list of failed pins are located in:\n"); print("\t\t/tmp/Bad_Pins\n"); print("**************************************************\n\n"); } print("\n");}################################################################## ##################### SQCS_SEND SUB ############################## ################################################################## # 最初にSQCSファイルを探し、それをチェックしてその中に有効なデータを持つ# か確認する。有効なデータを持つ場合には、異なるプログラムが呼ばれ、ファ# イルをSQCSデータベースに送り、ファイルをローカルのSQCSディレクトリに移# す。 sub sqcs_send { $error=system("/users/tech/tools/sqcs_copy_spec/users/tech/tools/SQCS_FILE_NEW"); print("Data sent to SQCS\n");}################################################################## ####################### TRACKER SUB ############################## ################################################################## # それぞれのピンについて平均のエッジ時間オフセットを持つローカルファイル# を読む異なるperlプログラムを呼ぶ。ピンのうちのいずれか1つが、以下に# 該当する場合には、メッセージが画面に印刷される。 # a)最後のデータポイントが、標準偏差に平均を加えた値の+/-3倍からはず# れている。 # b)ピンの標準偏差が、12ピコ秒(この値は、データを集める時に変更する# ことができる)より大きい。 # c)ピンの最後の6ポイントが傾向を設定する。 sub tracker{ print("\n\tNow running per pin tracking analysis."); system("pinparse"); print("\n\tPlease hit any key:"); $answer3=<STDIN>;}【0074】本発明は例として次の実施態様を含む。 (1)試験ヘッドに配置された複数の試験コネクタを持ち、それぞれの試験コネクタが試験チャネルの電気信号を運ぶ導体(506)を持ち、それぞれの試験チャネルが少なくとも1つのドライバ(402)および少なくとも1つのレシーバ(404)を備える回路基板に対応している集積回路を試験するデバイス(100)の構成要素の許容差を試験する装置であって、第1および第2の試験コネクタの導体間に低インピーダンスの電気的な接続を確立し、第1の回路基板の第1のドライバ(402a)が、低インピーダンスの経路を介して第2の回路基板の第1のレシーバ(404b)に接続されるようにする短絡手段(500)と、前記第1のドライバを制御して、予め定められた時に電気信号を出力するよう構成されるコントローラ(206)と、前記第1のレシーバで受け取られた前記信号を検出するよう設計される評価手段(206、812)と、前記第1のドライバが電気信号を出力した時から前記評価手段が受け取られた信号を検出する時までの信号の遅延時間を測るよう構成されるタイミング手段(206、810)と、を備える装置。 【0075】(2)前記短絡手段が、第1の試験コネクタのピンから第2の試験コネクタのピンの間に直接的な導電性の経路を確立する金属層を含むプリント回路基板を備える上記(1)に記載の装置。 (3)前記評価手段および前記タイミング手段が、処理ユニットの動作を制御するプログラムコードを介して認識される上記(1)に記載の装置。 (4)前記処理ユニットが、マイクロプロセッサ、マイクロコントローラ、組み込み形コントローラ、特定用途向け集積回路(ASIC)、および処理と制御機能を実行するよう特別に設計された専用ハードウェアのグループから選択されるデバイスである上記(3)に記載の装置。 【0076】(5)前記コントローラが、複数のエッジのうちの1つに一致して電気信号を出力するよう構成され、該複数のエッジが、前記装置のマスタークロックのサイクルの周期内に周期的に配置される上記(1)に記載の装置。 (6)前記タイミング手段が、試験器のサイクル内において、DUT基板および試験器の間のインターフェースに信号が到着した時の時間を測定するよう構成される上記(1)に記載の装置。 (7)上記(1)に記載の装置において、タイミング試験結果の統計的分析を実行する手段を備え、該タイミング試験の結果が、タイミング試験を複数回実行することで生成されるようにする上記(1)に記載の装置。 【0077】(8)試験ヘッドに配置された複数の試験コネクタを持つ集積回路を試験する試験デバイスにおいて、それぞれの試験コネクタが試験チャネルの電気信号を運ぶ導体を持ち、それぞれの試験チャネルが少なくとも1つのドライバおよび少なくとも1つのレシーバを備える回路基板に対応し、第1および第2の試験コネクタの導体間に電気的な接続を確立し、第1の回路基板の第1のドライバが、低インピーダンスの経路を介して第2の回路基板の第1のレシーバに電気的に接続されるようにするステップと、前記第1のドライバの出力を制御して、予め定められた時に電気信号のエッジを駆動するステップと、前記第1のレシーバで受け取られた前記信号を検出するステップと、前記第1のレシーバで受け取られた信号が、前記第1のドライバからの予め定められた信号レベルの出力の予め定められた時間内におさまっているかを判断するステップと、を含む構成要素のタイミングの分散を診断する方法。 【0078】(9)第1および第2の試験コネクタの導体間に電気的な接続を確立し、第2の回路基板の第2のドライバが、低インピーダンスの経路を介して第1の回路基板上の第2のレシーバに電気的に接続されるようにするステップと、前記第2のドライバの出力を制御して、予め定められた時に電気信号を駆動するステップと、前記第2のレシーバで受け取られた前記信号を検出するステップと、前記第2のレシーバで受け取られた信号が、前記第2のドライバからの予め定められた信号出力の予め定められた時間内におさまっているかを判断するステップと、を含む上記(8)に記載の方法。 【0079】(10)前記電気接続を確立するステップが、第1および第2の試験コネクタの導体間に電気的な接続を確立して、第1の回路基板の複数のドライバが、低インピーダンスの経路を介して第2の回路基板の複数のレシーバに電気的に接続されるようにし、該複数のドライバのそれぞれが、規定された許容差内におさまっていることが知られている上記(8)に記載の方法。 【0080】 【発明の効果】本発明によれば、高い精度で試験器および試験器の構成要素のタイミング精度を試験することができるようになる。
|
| 【出願人】 |
【識別番号】398038580 【氏名又は名称】ヒューレット・パッカード・カンパニー 【氏名又は名称原語表記】HEWLETT−PACKARD COMPANY
|
| 【出願日】 |
平成10年(1998)11月16日 |
| 【代理人】 |
【弁理士】 【氏名又は名称】岡田 次生
|
| 【公開番号】 |
特開平11−271406 |
| 【公開日】 |
平成11年(1999)10月8日 |
| 【出願番号】 |
特願平10−324878 |
|