(57)【要約】  プログラマブル・メモリ・ビルト・イン・セルフ・テスト（ＭＢＩＳＴ）の方法、装置、及びシステムを開示する。開示された技術の例示的実施形態は、例えば、製造時テストにおいて、集積回路上に配置された１つ又は複数のメモリをテストするために用いられることが可能である。【特許請求の範囲】
【請求項１】
少なくとも１つのメモリを備える集積回路であって、前記メモリをテストすべく、前記メモリの少なくとも１つのメモリ・テスト・アルゴリズムのためのテスト・データを適用するために、前記メモリは、セルと、前記集積回路の製造後に命令をプログラムすることによってプログラム可能なメモリ・ビルト・イン・セルフ・テスト（ＭＢＩＳＴ）回路とを備え、前記少なくとも１つのメモリ・テスト・アルゴリズムは、前記ＭＢＩＳＴ回路をプログラムすることによって決定され、前記ＭＢＩＳＴ回路は、
プログラミング命令を受け取ることに適合された命令メモリと、
プログラミング命令を受け取り、デコードすることに適合された命令デコーダと、
前記デコードされたプログラミング命令に応答して、前記少なくとも１つのテスト・アルゴリズムを実行するためにテスト・データを適用されるべき、前記メモリのセルのアドレス指定を決定するアドレス・ジェネレータであって、前記デコードされたプログラミング命令に応答して、少なくとも１つの入れ子ループを有する少なくとも１つのメモリ・テスト・アルゴリズムが実行されるように前記メモリのセルをアドレス指定するアドレス・ジェネレータと、
前記デコードされたプログラミング命令に従って、前記メモリの、前記アドレス指定されたセルにテスト・データを適用することと、前記適用されたテスト・データに対する、前記アドレス指定されたセルからの期待応答の出力を提供することとに適合されたデータ・ジェネレータであって、前記メモリは、前記適用されたテスト・データに応答して、前記アドレス指定されたセルから出力されたテスト結果を提示する、データ・ジェネレータと、
前記適用されたテスト・データに対する、前記メモリの１つ又は複数のセルからの期待応答と、前記適用されたテスト・データに対する、そのような１つ又は複数のセルについての対応するテスト結果とを比較するよう動作可能な出力アナライザと、を備える、集積回路。
【請求項２】
請求項１に記載の集積回路であって、前記アルゴリズムは、複数のステップを含み、ステップ内に少なくとも２つの入れ子ループがあり、前記ステップ内で前記入れ子ループに対して実行されるメモリ操作は、前記メモリの動作可能動作速度で実行される、集積回路。
【請求項３】
請求項１に記載の集積回路であって、前記プログラミング命令は、アルゴリズム命令ワードと構成命令ワードとを含み、前記構成命令ワードは、前記メモリのセルのベース・アドレスを変更する形式に関する命令を含む、集積回路。
【請求項４】
請求項１に記載の集積回路であって、前記プログラミング命令は、アルゴリズム命令ワードと構成命令ワードとを含み、前記アルゴリズムは、複数のステップからなり、現在のアルゴリズム・ステップ内の全ての操作に対してアドレス指定スキームが同じままであることによって、前記デコーダは、前記現在のアルゴリズム・ステップの操作が実行されている間に、次のアルゴリズム・ステップのための前記アドレス・スキームを構成命令ワードから決定するよう動作可能である、集積回路。
【請求項５】
請求項１に記載の集積回路であって、前記メモリは、アレイの形に配列されたセルを備え、各セルは、前記アレイ内のセルの行及び列に対応するアドレスを有し、前記アドレス・ジェネレータは、ベース・アドレス・ジェネレータ部分を含み、前記ベース・アドレス・ジェネレータ部分は、セルのベース行アドレス及びベース列アドレスを並行して決定するよう動作可能であり、且つ、最終ベース・アドレスを示すよう動作可能であり、前記アドレス・ジェネレータは、更に、ローカル・アドレス・ジェネレータ部分を含み、前記ローカル・アドレス・ジェネレータ部分は、セルのローカル行アドレス及びローカル列アドレスを並行して決定するよう動作可能であり、且つ、最終ローカル・アドレスを示すよう動作可能である、集積回路。
【請求項６】
請求項５に記載の集積回路であって、前記ローカル・アドレス・ジェネレータ部分は、第１の行及び第１の列のアドレス以外の、前記メモリ内の選択された行及び選択された列にあるセルから開始するよう、選択的に動作可能である、集積回路。
【請求項７】
請求項５に記載の集積回路であって、前記ローカル・アドレス・ジェネレータ部分は、前記メモリの基準セル・ロケーションから開始するよう、選択的に動作可能である、集積回路。
【請求項８】
請求項１に記載の集積回路であって、前記デコーダは、少なくとも１つの命令バッファを備え、前記少なくとも１つの命令バッファは、アルゴリズム命令デコーダ部分と、少なくとも１つのアドレス構成バッファ及びアドレス構成デコーダとに結合された部分を受け取る、集積回路。
【請求項９】
請求項１に記載の集積回路であって、前記プログラミング命令は、アルゴリズム命令ワードと構成命令ワードとを含み、１つ又は複数の構成命令ワードが、前記構成ワードのサブセットであるアドレス構成命令部分を含み、前記命令デコーダは、アルゴリズム命令ワード及びアドレス構成命令部分をバッファリング及びデコードするよう動作可能なステップ・コントローラ部分を含み、前記デコーダは、更に、前記構成ワードの、アドレス構成命令部分以外の部分をデコードするよう動作可能な構成ワード・デコーダ部分を含む、集積回路。
【請求項１０】
請求項９に記載の集積回路であって、前記ステップ・コントローラは、ＯＰレベル・バッファ部分と、命令バッファ部分と、初期設定インデックス・バッファ部分と、最終初期設定バッファ部分と、ジャンプ・アドレス・インデックス・バッファ部分と、最終ループ・バッファ部分とを含む、集積回路。
【請求項１１】
請求項１に記載の集積回路であって、前記アドレス・ジェネレータは、デコードされたプログラミング命令に応答して、少なくとも複数の入れ子ループを有する少なくとも１つのテスト・アルゴリズムを実行するテスト・データが前記メモリに適用されるように、セルのアドレスを指定する、集積回路。
【請求項１２】
請求項１に記載の集積回路であって、前記アドレス・ジェネレータは、デコードされたプログラミング命令に応答して、Ｇａｌｌｏｐｉｎｇ、Ｗａｌｋｉｎｇ  ０／１、及びアドレス・デコーダＰＭＯＳ開放故障の各テスト・アルゴリズムからなるグループのテスト・アルゴリズムのうちの１つ又は複数を実行するテスト・データが前記メモリに適用されるように、セルのアドレスを指定する、集積回路。
【請求項１３】
請求項１２に記載の集積回路であって、前記アドレス・ジェネレータは、デコードされたプログラミング命令に応答して、Ｍａｒｃｈ１、Ｍａｒｃｈ２、Ｍａｒｃｈ３、列Ｍａｒｃｈ、一意、Ｃｈｅｃｋｅｒｂｏａｒｄ、Ｓｌｉｄｉｎｇ  ｄｉａｇｏｎａｌ、Ｂｕｔｔｅｒｆｌｙ、ポート相互作用、ポート隔離、書き込みイネーブル故障検出、メモリ制御信号テスト、ＲＯＭ１、及びＲＯＭ２の各アルゴリズムからなるグループの追加テスト・アルゴリズムのうちの任意の１つ又は複数を実行するテスト・データが前記メモリに適用されるように、セルのアドレスを指定する、集積回路。
【請求項１４】
請求項１に記載の集積回路であって、前記アドレス・ジェネレータは、入れ子ループのアルゴリズム・ステップに関連付けられた操作の間にデータが適用されるべき、各セルの実アドレスを生成するよう動作可能な、イントラ反復アドレス・ジェネレータと、前記入れ子ループに関連付けられた操作の実行の後に到達されるべきループに対応する、次のループ・アドレス値を生成するよう動作可能な、インター反復アドレス・ジェネレータとを備える、集積回路。
【請求項１５】
請求項１４に記載の集積回路であって、前記メモリは、各セルが行アドレス及び列アドレスを有するセルのアレイを備え、前記イントラ反復アドレス・ジェネレータは、各セルの行アドレスと、各セルの列アドレスとを、並行して決定し、前記インター反復アドレス・ジェネレータは、前記次のループ・アドレス値の行アドレスと、前記次のループ・アドレス値の列アドレスとを、並行して決定する、集積回路。
【請求項１６】
セルのアレイを備える少なくとも１つのメモリを備える集積回路であって、各セルは、行アドレス及び列アドレスを有し、前記集積回路は、更に、前記少なくとも１つのメモリに結合された、少なくとも１つのメモリ・ビルト・イン・セルフ・テスト（ＭＢＩＳＴ）回路を備え、前記ＭＢＩＳＴ回路は、
プログラミング命令をデコードするように適合されたデコーダを備え、前記プログラミング命令は、構成命令ワードとアルゴリズム命令ワードとを含み、前記デコーダは、アルゴリズム命令ワードと構成命令ワードとを区別することと、前記アルゴリズム命令ワードと前記構成命令ワードとを別々にデコードすることとに適合され、前記構成命令ワードは、少なくとも１つのテスト・アルゴリズムを指定するアルゴリズム指定部分を含み、前記テスト・アルゴリズムは、前記テスト・アルゴリズムに従って前記メモリをテストするために適用されるべきテスト・ステップを含み、前記アルゴリズム命令ワードは、テスト・ステップ中に実行されるべきメモリ操作を指定するメモリ・アクセス操作部分を含む、集積回路。
【請求項１７】
請求項１６に記載の集積回路であって、前記ＭＢＩＳＴ回路は、前記デコーダと、
前記デコーダと結合され、前記プログラミング命令を受け取るように適合された命令メモリと、
前記デコーダに結合され、前記プログラミング命令に応答し、テスト・アルゴリズムの実行時にテスト・データを適用されるべき、前記メモリのセルのアドレス指定を決定するように構成された、アドレス・ジェネレータと、
前記デコードされたプログラミング命令に従って、前記アドレス指定されたセルに前記テスト・データを適用することと、前記適用されたテスト・データに対する、前記アドレス指定されたセルからの期待応答の出力を提供することとに適合されたデータ・ジェネレータであって、前記メモリは、前記適用されたテスト・データに応答して、前記アドレス指定されたセルから出力されたテスト結果を提示する、データ・ジェネレータと、
適用されたテスト・データに対する、セルからの、少なくとも選択された期待応答と、前記対応するセルから出力されたテスト結果とを比較して、前記少なくとも１つのメモリに関するテスト結果を提供するよう動作可能な出力アナライザと、を備える、集積回路。
【請求項１８】
請求項１７に記載の集積回路であって、前記第１及び第２のバッファ部分のそれぞれは、ベース・ループ・バッファ部分及びローカル・ループ・バッファ部分を含む、集積回路。
【請求項１９】
請求項１８に記載の集積回路であって、前記ベース・ループ・バッファ部分は、ベース・ループの間に、メモリの少なくとも選択されたベース・アドレスに対して実行されるベース・アドレス操作のシーケンスを記憶し、前記ローカル・バッファは、ローカル・ループの間に、前記ベース・アドレス以外の、少なくとも選択されたローカル・アドレスに対して実行されるローカル・アドレス操作のシーケンスを記憶し、前記ＭＢＩＳＴ回路は、ローカル・アドレス操作の前記シーケンスが開始されたベース・アドレスを記憶し、前記ローカル・アドレス操作の完了後にその次のベース・アドレス操作から操作を再開するよう動作可能である、集積回路。
【請求項２０】
請求項１６に記載の集積回路であって、前記構成命令は、メモリ回路テスト操作である
（ａ）前記ＭＢＩＳＴ回路によってテストされる複数のメモリに対し、任意の１つ又は複数のテスト・アルゴリズムを、順次連続的に適用することと、
（ｂ）前記ＭＢＩＳＴ回路によってテストされる複数のメモリに対し、任意の１つ又は複数のテスト・アルゴリズムを、順次インタリーブ的に適用することと、
（ｃ）テストのために前記ＭＢＩＳＴ回路に割り当てられた複数のメモリから、１つ又は複数のメモリを選択することと、のうちの１つ又は複数が実行されるようにテスト・アルゴリズムを実行するために、前記ＭＢＩＳＴ回路の実行時に前記ＭＢＩＳＴ回路をプログラムする命令を含む、集積回路。
【請求項２１】
請求項１６に記載の集積回路であって、前記構成命令は、
（ａ）テストのために、少なくとも１つのメモリからなるメモリ・バンクを選択する操作と、
（ｂ）テストのために、少なくとも１つのメモリからなるページを選択する操作と、
（ｃ）テストのために、少なくとも１つのメモリからなるポートを選択する操作と、
（ｄ）テストされるメモリのメモリ・アドレス範囲の一部を選択する操作と、
（ｅ）診断モニタリングが実行されるべきかどうかを選択する操作と、
（ｆ）１つ又は複数の特定のアルゴリズムに対して診断モニタリングが実行されるべきかどうかを選択する操作と、のうちの任意の１つ又は複数を実行するために、前記ＭＢＩＳＴ回路の実行時に前記ＭＢＩＳＴ回路をプログラムする命令を含む、集積回路。
【請求項２２】
請求項１６に記載の集積回路であって、前記構成命令は、テスト時にデータ・ワードの指定された部分を使用するために、前記ＭＢＩＳＴ回路の実行時に前記ＭＢＩＳＴ回路をプログラムする命令を含む、集積回路。
【請求項２３】
請求項１６に記載の集積回路であって、前記デコーダは、アルゴリズム命令をデコードするアルゴリズム・デコーダ部分と、構成命令をデコードする構成デコーダ部分とを含む、集積回路。
【請求項２４】
請求項２３に記載の集積回路であって、前記アルゴリズム・デコーダ部分及び構成デコーダ部分は、並行して動作して、アルゴリズム命令のデコードと、構成命令のデコードとを、それぞれが並行して行う、集積回路。
【請求項２５】
請求項２４に記載の集積回路であって、前記アルゴリズム・デコーダ部分は、アルゴリズム命令を第１の速度でデコードするよう動作可能であり、前記構成デコーダ部分は、前記構成命令の少なくとも一部を第２の速度でデコードするよう動作可能であり、前記第２の速度は、前記第１の速度より遅い、集積回路。
【請求項２６】
請求項２５に記載の集積回路であって、前記第１の速度は、少なくとも、前記メモリの動作可能動作速度である、集積回路。
【請求項２７】
請求項２４に記載の集積回路であって、前記アルゴリズム・デコーダ部分は、少なくとも第１及び第２のバッファ部分を含み、前記第１及び第２のバッファ部分は、前記第１のバッファ部分が、以前に受け取ったアルゴリズム命令ワードをアルゴリズム・デコーダに供給している間に、前記第２のバッファ部分がアルゴリズム命令ワードを受け取り、前記第２のバッファ部分が、以前に受け取ったアルゴリズム命令ワードをアルゴリズム・デコーダに供給している間に、前記第１のバッファ部分がアルゴリズム命令ワードを受け取るように、並行して動作する、集積回路。
【請求項２８】
請求項２７に記載の集積回路であって、前記第１及び第２のバッファ部分のそれぞれは、ベース・ループ・バッファ部分及びローカル・ループ・バッファ部分を含む、集積回路。
【請求項２９】
請求項２８に記載の集積回路であって、前記ベース・ループ・バッファ部分は、ベース・ループの間に、メモリの少なくとも選択されたベース・アドレスに対して実行されるベース・アドレス操作のシーケンスを記憶し、前記ローカル・バッファは、ローカル・ループの間に、前記ベース・アドレス以外の、少なくとも選択されたローカル・アドレスに対して実行されるローカル・アドレス操作のシーケンスを記憶し、前記ＭＢＩＳＴ回路は、ローカル・アドレス操作の前記シーケンスが開始されたベース・アドレスを記憶し、前記ローカル・アドレス操作の完了後にその次のベース・アドレス操作から操作を再開するよう動作可能である、集積回路。
【請求項３０】
請求項２９に記載の集積回路であって、前記構成命令ワードは、前記ベース・アドレスを変更する形式に関する命令を含む、集積回路。
【請求項３１】
請求項３０に記載の集積回路であって、ステップ内の全ての操作に対して前記アドレス指定スキームが同じままであることによって、前記デコーダは、現在のアルゴリズム・ステップの操作が実行されている間に、次のアルゴリズム・ステップのための前記アドレス・スキームを構成ワードから決定するよう動作可能である、集積回路。
【請求項３２】
請求項１７に記載の集積回路であって、前記メモリは、アレイの形に配列されたセルを備え、各セルは、前記アレイ内のセルの行及び列に対応するアドレスを有し、前記アドレス・ジェネレータは、ベース・アドレス・ジェネレータ部分を含み、前記ベース・アドレス・ジェネレータ部分は、セルのベース行アドレス及びベース列アドレスを並行して決定するよう動作可能であり、且つ、最終ベース・アドレスを示すよう動作可能であり、前記アドレス・ジェネレータは、更に、ローカル・アドレス・ジェネレータ部分を含み、前記ローカル・アドレス・ジェネレータ部分は、セルのローカル行アドレス及びローカル列アドレスを並行して決定するよう動作可能であり、且つ、最終ローカル・アドレスを示すよう動作可能である、集積回路。
【請求項３３】
請求項３２に記載の集積回路であって、前記ローカル・アドレス・ジェネレータ部分は、第１の行及び第１の列のアドレス以外の、前記メモリ内の選択された行及び選択された列にあるセルから開始するよう、選択的に動作可能である、集積回路。
【請求項３４】
請求項３２に記載の集積回路であって、前記ローカル・アドレス・ジェネレータ部分は、前記メモリの基準セル・ロケーションから開始するよう、選択的に動作可能である、集積回路。
【請求項３５】
請求項１６に記載の集積回路であって、前記デコーダは、少なくとも１つの命令バッファを備え、前記少なくとも１つの命令バッファは、アルゴリズム命令デコーダ部分と、少なくとも１つのアドレス構成バッファ及びアドレス構成デコーダとに結合された部分を受け取る、集積回路。
【請求項３６】
テストされるべき少なくとも１つのメモリと、メモリ・ビルト・イン・テスト（ＭＢＩＳＴ）回路とを備える集積回路であって、前記ＭＢＩＳＴ回路は、自動テスト装置（ＡＴＥ）から受け取った命令に応答して、少なくとも１つのテスト・アルゴリズムを、前記少なくとも１つのメモリに適用するように構成され、前記ＭＢＩＳＴ回路は、
前記ＡＴＥから命令を受け取るように適合された命令メモリと、
前記命令をデコードし、構成命令とアルゴリズム命令とを分離するよう動作可能な命令デコーダと、
前記デコードされた命令に応答して、前記デコードされた命令から決定されたアドレス指定スキームに従って、前記テストされるメモリのセルをアドレス指定するアドレス・ジェネレータであって、前記アドレス指定スキームは、前記アドレス指定されたセルにテスト・データが適用されると、前記少なくとも１つのメモリをテストするために前記少なくとも１つのテスト・アルゴリズムが実行されるように、前記メモリのセルをアドレス指定する、アドレス・ジェネレータと、
前記デコードされた命令から決定されたように、前記少なくとも１つのテスト・アルゴリズムが前記メモリに対して実行されるように、アドレス指定されたメモリ・セルにテスト・データを適用するデータ・ジェネレータであって、前記メモリは、前記データ・ジェネレータからデータを受け取った、少なくとも選択されたセルからのテスト応答出力を提示する、データ・ジェネレータと、
テスト結果を提供すべく、期待応答データと、前記選択されたセルから出力された実際のテスト応答とを比較するよう動作可能な出力応答アナライザと、
前記テスト結果によって故障が示された場合に診断データを記録する診断モニタと、を備える集積回路。
【請求項３７】
請求項３６に記載の集積回路であって、前記命令メモリは、前記ＡＴＥから命令を受け取るように適合されたシフト・レジスタを備え、前記シフト・レジスタは、受け取った命令を、先入れ先出し（ＦＩＦＯ）バッファが満杯になるまで、ＦＩＦＯバッファにパラレルにロードし、満杯になったら、受け取った命令のロードを一時停止し、前記ＦＩＦＯバッファからの命令は、命令バッファに転送され、前記ＦＩＦＯバッファが空になった後に、前記ＡＴＥが、前記シフト・レジスタに命令を供給するよう合図され、前記ＦＩＦＯバッファが、満杯になるまで、前記シフト・レジスタによってリロードされ、この操作は、ＭＢＩＳＴテストの間、繰り返される、集積回路。
【請求項３８】
請求項３６に記載の集積回路であって、前記命令メモリから命令を受け取るように、前記命令メモリに結合された命令バッファを備える集積回路であって、現在のテスト・アルゴリズムの実行中に故障が検出された場合に、前記診断モニタが、前記故障に関する診断データを記録し、前記ＭＢＩＳＴ回路が、前記現在のステップの実行を一時停止し、前記診断データが、前記ＡＴＥにスキャン・アウトされ、前記診断データがスキャン・アウトされた後に、前記ＭＢＩＳＴ回路が、（ａ）前記命令バッファにある前記現在のアルゴリズム・ステップを、前記現在のアルゴリズム・ステップの先頭から再実行し、（ｂ）前記メモリを、前記現在のステップの現在の状態が開始される前に存在した状態に再初期設定する、集積回路。
【請求項３９】
請求項３６に記載の集積回路であって、前記診断モニタは、故障が検出された時点で診断データをロードされる単一レジスタを備え、前記診断データは、前記ＡＴＥにスキャン・アウトされる、集積回路。
【請求項４０】
請求項３６に記載の集積回路であって、前記テスト・アルゴリズムのテスト・ステップ内のメモリ操作の間に、前記メモリの動作の少なくとも定格動作速度又は動作可能動作速度で、テストされる前記メモリにデータが適用され、前記診断モニタは、前記メモリの少なくとも定格動作速度又は動作可能動作速度でメモリ操作が実行されているときに、診断データを記録するよう動作可能である、集積回路。
【請求項４１】
請求項３６に記載の集積回路であって、前記診断モニタは、ＢＩＳＴクロック・ドメインで動作する第１の有限状態機械と、診断クロック・ドメインで動作する第２の有限状態機械と、を備える、集積回路。
【請求項４２】
集積回路に含まれる少なくとも１つのメモリをテストする方法であって、
前記集積回路のメモリ・テスト部分の命令メモリに配信される構成命令及びアルゴリズム命令をデコードするステップと、
前記メモリに適用されるべきテスト・ステップを含む少なくとも１つのテスト・アルゴリズムを、前記デコードされた命令から決定するステップと、
前記少なくとも１つのテスト・アルゴリズムに従って、前記メモリ内の少なくとも選択されたセルをテストするために、テスト・データを適用されるべき前記セルをアドレス指定するステップと、と含み、前記選択されたセルをアドレス指定する操作は、テスト・ステップ内の、少なくとも特定のメモリ・アクセス操作の間に、前記メモリの動作可能動作速度でセルがアドレス指定されるように達成され、
前記アドレス指定されたセルにテスト・データを適用するステップと、
テスト・データが適用された、少なくとも選択されたセルから読み出された出力結果を解析して、前記テスト結果が、前記適用されたテスト・データに対する応答としての、前記選択されたセルからの期待テスト結果と一致するかどうかを判定するステップと、を含む方法。
【請求項４３】
請求項４２に記載の方法であって、前記アドレス指定操作は、前記テスト・アルゴリズムのうちの１つの、少なくとも１つの外側ループの中に入れ子にされた、前記テスト・アルゴリズムのうちの１つの、少なくとも１つの内側ループのセルをアドレス指定するステップを含み、前記アドレス指定動作は、入れ子ループ・アルゴリズムを含む少なくとも１つのテスト・アルゴリズムが実装されるように、前記内側ループのセルと前記外側ループのセルとの間の遷移をアドレス指定するステップを含む、方法。
【請求項４４】
請求項４３に記載の方法であって、前記アドレス指定操作は、複数の入れ子ループのセルをアドレス指定するステップを含み、前記アドレス指定動作は、複数の入れ子ループを含む少なくとも１つのテスト・アルゴリズムが実装されるように、異なるループのセル間の遷移をアドレス指定するステップを含む、方法。
【請求項４５】
請求項４４に記載の方法であって、前記アドレス指定操作は、少なくともループ内のメモリ・アクセス操作の間に、前記メモリの前記動作可能動作速度でセルをアドレス指定するステップを含む、方法。
【請求項４６】
請求項４５に記載の方法であって、動作可能動作速度テストによって明らかになった、選択されたエラーに関して、診断データを記録する操作を含む、方法。
【請求項４７】
請求項４２に記載の方法であって、複数のテスト・アルゴリズムを実装するために、構成命令及びアルゴリズム命令を前記集積回路に配信する操作を含む、方法。
【請求項４８】
請求項４２に記載の方法であって、前記デコード操作は、アルゴリズム命令をデコードするステップと、構成命令をデコードするステップを、並行して行うことを含む、方法。
【請求項４９】
請求項４８に記載の方法であって、前記デコード操作に加えて、少なくとも１つの第２のバッファが後続のテスト・ステップのメモリ操作を受け取っている間に、少なくとも１つの第１のバッファに格納された１つのテスト・ステップのメモリ操作を実行し、前記第１のバッファが次の後続のテスト・ステップのメモリ操作を受け取っている間に、前記第２のバッファに格納された前記後続のテスト・ステップの操作を実行する操作を含む、方法。
【請求項５０】
請求項４９に記載の方法であって、前記少なくとも１つの第１のバッファは、テスト・ステップに従って全てのベース・アドレスに対して実行される操作のシーケンスを格納する、少なくとも１つの第１のベース・ループ・バッファを備え、前記少なくとも１つの第２のバッファは、テスト・アルゴリズム・ステップに従って全てのベース・アドレスに対して実行される操作のシーケンスを格納する、少なくとも１つの第２のベース・ループ・バッファを備え、前記少なくとも１つの第１のバッファは、更に、前記第１のベース・ループ・バッファの操作に関連付けられたベース・アドレスと異なるローカル・アドレスに対して実行される操作のシーケンスを格納する第１のローカル・ループ・バッファを備え、前記少なくとも１つの第２のバッファは、更に、前記第２のベース・ループ・バッファの操作に関連付けられたベース・アドレスと異なるローカル・アドレスに対して実行される操作のシーケンスを格納する第２のローカル・ループ・バッファを備える、方法。
【請求項５１】
請求項５０に記載の方法であって、前記ローカル・アドレスは、前記ベース・アドレスに関連付けられた操作に関する、前記ベース・アドレス以外の、前記メモリ・セルの全てのアドレスを含む、方法。
【請求項５２】
請求項５０に記載の方法であって、前記ローカル・アドレスは、前記ベース・アドレスに関連付けられた操作に関する、前記ベース・アドレス以外の、前記メモリ・セルのアドレスの、全てより少ないサブセットを含む、方法。
【請求項５３】
請求項５０に記載の方法であって、前記ベース・ループ・バッファ内の現在のベース・アドレスに関連付けられたローカル・アドレス・バッファに格納された動作のシーケンスが実行された後に、前記現在のベース・アドレスから、前記ベース・ループ・バッファ内の次のベース・アドレスに達する操作を含む、方法。
【請求項５４】
請求項５０に記載の方法であって、前記メモリ内の少なくとも選択されたセルをアドレス指定する操作は、前記選択されたセルのそれぞれについて、行アドレス及び列アドレスを、並行して決定するステップを含む、方法。
【請求項５５】
請求項５０に記載の方法であって、前記アドレス指定操作は、選択されたセルのグループの第１のセルから、前記選択されたセルのグループの最後のセルまでのアドレスを指定するステップを含む、方法。
【請求項５６】
請求項５０に記載の方法であって、前記アドレス指定操作は、基準セルから始まる、前記メモリの全てのセルをアドレス指定するステップを含む、方法。
【請求項５７】
請求項５６に記載の方法であって、前記基準セルは、前記メモリのセルのアレイの第１の行アドレス及び第１の列アドレスにある、方法。
【請求項５８】
装置であって、
構成命令ワード及びアルゴリズム命令ワードを受け取る手段と、
構成命令ワード及びアルゴリズム命令ワードをデコードする手段と、
前記デコードされたプログラミング命令に応答して、メモリ・セルに対する少なくとも１つのテスト・アルゴリズムの実行を達成するために、前記メモリ・セルをアドレス指定する手段と、
前記デコードされたプログラミング命令に従って、前記アドレス指定されたセルにデータを適用し、前記適用されたデータに対する、アドレス・セルからの期待応答の出力を提供する手段と、
前記メモリのセルからの少なくとも選択された期待応答と、適用されたデータに対する応答としての、アドレス・セルからのテスト・データ出力とを解析して、前記メモリについてのテスト結果を提供する手段と、
前記テスト結果から診断データを収集する手段とを、備える装置。
【請求項５９】
ＭＢＩＳＴ回路を提供する方法であって、
ユーザが、集積回路の１つ又は複数のメモリをテストするために、ＭＢＩＳＴ回路によって実行されることをユーザが望む１つ又は複数のメモリ・テスト・アルゴリズムを適用するために必要な入れ子ループの数を、指定することと、
前記ユーザによって指定された数の入れ子ループを有するメモリ・テスト・アルゴリズムを実行することが可能であるように構成されたＭＢＩＳＴ回路を合成するステップとを、含む方法。
【請求項６０】
請求項５９に記載の方法であって、前記ユーザによって指定された入れ子ループが少なくとも２レベルある、方法。
【請求項６１】
ＭＢＩＳＴ回路を提供する方法であって、
ユーザが、複数のカテゴリのメモリ・テスト・アルゴリズムの中から、少なくとも１つのカテゴリのアルゴリズムを指定することと、
前記ユーザによって指定された前記少なくとも１つのカテゴリのアルゴリズムからなるメモリ・テスト・アルゴリズムを実行することが可能であるように構成されたＭＢＩＳＴ回路を合成するステップとを、含む方法。
【請求項６２】
請求項６１に記載の方法であって、前記ユーザ指定された少なくとも１つのカテゴリのアルゴリズムは、複数の入れ子ループを含む少なくとも１つのアルゴリズムを含む、方法。
【請求項６３】
ＭＢＩＳＴコントローラを提供する方法であって、
実行されることをユーザが望むメモリ・テスト・アルゴリズムをＭＢＩＳＴ回路が実行するために必要なアドレス・ジェネレータの数を、ユーザが指定することと、
実行されることを前記ユーザが望む前記メモリ・テスト・アルゴリズムを実行するために、前記ユーザによって指定された数のアドレス・ジェネレータを有するように構成されたＭＢＩＳＴ回路を合成するステップと、含む方法。
【請求項６４】
集積回路であって、
前記集積回路の少なくとも１つのメモリに、１つ又は複数のメモリ・テスト・アルゴリズムを適用することに用いられるＭＢＩＳＴ回路を備え、前記ＭＢＩＳＴ回路は、
少なくとも１つの入れ子ループを含むメモリ・テスト・アルゴリズムを実行するために、ＡＴＥからの命令によってプログラムされることが可能な、第１のプログラマブルＭＢＩＳＴ回路部分を含む、集積回路。
【請求項６５】
請求項６４に記載の集積回路であって、前記ＭＢＩＳＴ回路は、前記第１のプログラマブルＭＢＩＳＴ回路部分に加えて、有限状態機械のハード・コードされた命令によって決定される少なくとも１つのメモリ・テスト・アルゴリズムを実行する前記ハード・コードされた命令を含む、集積回路。
【請求項６６】
請求項６４に記載の集積回路であって、前記第１のプログラマブルＭＢＩＳＴ回路部分は、複数のループを含むアルゴリズム・ステップ内で、前記アルゴリズム・ステップを含むアルゴリズムによってテストされるメモリの動作可能動作速度でメモリ操作を実行するために、ＡＴＥからの命令によってプログラムされることが可能である、集積回路。
【請求項６７】
少なくとも１つのメモリを備える集積回路であって、前記メモリをテストすべく、前記メモリの少なくとも１つのメモリ・テスト・アルゴリズムのためのテスト・データを適用するために、前記メモリは、セルと、前記集積回路の製造後に命令をプログラムすることによってプログラム可能なメモリ・ビルト・イン・セルフ・テスト（ＭＢＩＳＴ）回路とを備え、前記少なくとも１つのメモリ・テスト・アルゴリズムは、前記ＭＢＩＳＴ回路をプログラムすることによって決定され、前記ＭＢＩＳＴ回路は、
プログラミング命令を受け取ることに適合された命令メモリと、
プログラミング命令を受け取り、デコードすることに適合された命令デコーダと、
前記デコードされたプログラミング命令に応答して、前記少なくとも１つのテスト・アルゴリズムを実行するためにテスト・データを適用されるべき、前記メモリのセルのアドレス指定を決定するアドレス・ジェネレータであって、前記デコードされたプログラミング命令に応答して、少なくとも１つの入れ子ループを有する少なくとも１つのメモリ・テスト・アルゴリズムが実行されるように前記メモリのセルをアドレス指定するアドレス・ジェネレータと、
前記デコードされたプログラミング命令に従って、前記メモリの、前記アドレス指定されたセルにテスト・データを適用することと、前記適用されたテスト・データに対する、前記アドレス指定されたセルからの期待応答の出力を提供することとに適合されたデータ・ジェネレータであって、前記メモリは、前記適用されたテスト・データに応答して、前記アドレス指定されたセルから出力されたテスト結果を提示する、データ・ジェネレータと、
前記適用されたテスト・データに対する、前記メモリの１つ又は複数のセルからの期待応答と、前記適用されたテスト・データに対する、そのような１つ又は複数のセルについての対応するテスト結果とを比較するよう動作可能な出力アナライザと、を備え、
前記プログラミング命令は、アルゴリズム命令ワード及び構成命令ワードを含み、前記アルゴリズムは、複数のステップからなり、アルゴリズム・ステップの現在のループ内の全ての操作に対してアドレス指定スキームが同じままである、集積回路。
【請求項６８】
メモリ・ビルト・イン・セルフ・テスト（ＭＢＩＳＴ）回路を備える集積回路であって、前記ＭＢＩＳＴ回路は、ＭＢＩＳＴ回路要素である、
（ａ）少なくとも１つのインター反復アドレス・ジェネレータ及び少なくとも１つのイントラ反復アドレス・ジェネレータと、
（ｂ）ＭＢＩＳＴテストに用いられる場合に、アルゴリズム・ステップ内でのマルチレベル入れ子ループの実行を可能にする、少なくとも１つのステップ・コントローラと、
（ｃ）ＭＢＩＳＴテストに用いられる場合に、命令を前記命令レジスタから先入れ先出し（ＦＩＦＯ）バッファにパラレルにロードすることを可能にする、前記ＦＩＦＯバッファに結合されたレジスタを備える命令メモリと、
（ｄ）ＭＢＩＳＴテストに用いられる場合に、故障が検出されたステップに対応する現在のアルゴリズム・ステップからテストをリスタートすることを可能にする、診断モニタと、のうちの１つ又は複数を、前記集積回路を収容するチップに含む、集積回路。
【請求項６９】
請求項１に記載の集積回路であって、前記プログラミング命令は、アルゴリズム命令ワード及び構成命令ワードを含み、前記アルゴリズムは、複数のステップからなり、アルゴリズム・ステップの現在のアルゴリズム・ループ内の全ての操作に対してアドレス指定スキームが同じままであり、前記アドレス指定スキームは、アルゴリズム・ステップのループ間で調整可能である、集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、２００４年１１月１８日に出願された米国特許仮出願第６０／６２９３９５号、並びに２００５年１１月４日に出願された米国特許仮出願第６０／７３３４９３号の利益を主張するものである。これらの仮出願の全開示が、以下の出願の開示の一部と見なされ、参照により本明細書に組み込まれている。
【０００２】
本明細書において開示された技術は、チップ上のシステムに埋め込まれたメモリのようなメモリのビルト・イン・セルフ・テスト（ＭＢＩＳＴ）に関する。より具体的には、本技術の一態様は、ビルト・イン・セルフ・テスト・コントローラと、それに関連する、テストされるメモリに適用されるアルゴリズムの選択及び変更を可能にするプログラマブルな方法とに関する。本コントローラは、チップ製造現場又は他の遠隔場所において製造されたチップのテストを実施するために、チップ製造現場におけるプログラミングが可能であるよう、フィールド・プログラマブルであることが望ましい。
【背景技術】
【０００３】
製造されるメモリの密度は、急激に上昇しており、そのペースはランダム・ロジックに比べて速い。更に、チップにおける埋め込みメモリの割合が増えており、システム・オン・チップの主要な部分を占めている。チップ上のメモリが占める加工寸法はより小さくなり、その面積は増えていることから、欠陥を潜在的に有する可能性のあるクリティカルなチップ領域が膨大になっている。ダイレクトメモリアクセス（ＤＭＡ）をテストに用いる従来の方法は、シリコン面積、ルーティングの複雑さ、及びテスト実施時間の点でコストがかかる。ＢＩＳＴ（ビルト・イン・セルフ・テスト）は、魅力的な選択肢になりつつあり、故障検出率の高さなどの利点がある。従来は、メモリのタイプと、それらに適用されるべきテストが指定されて、メモリをグループ分けし、それぞれ特定のコントローラに割り当ててきた。例えば、２００個程度のメモリを有するＳＯＣ（システム・オン・チップ）の場合は、通常は、２５〜３０個のコントローラに対してグループ分けされて割り当てられ、各コントローラは、４〜１０個のメモリのテストの管理を担当する。これらのコントローラは、製造テスト時に、あらかじめ指定されたシーケンスで、厳密な、事前準備されたアルゴリズムを実行することが可能であるように設計される。そのようなコントローラは非プログラマブル（即ち、ハードワイヤード）なので、アルゴリズム及びそれらが対象とする故障モデルは、固定されていて、チップが製造された後は変更不可能である。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
本開示が対象とするのは、本開示の任意の場所で開示される新規且つ非自明な態様のうちの１つ又は複数を、それぞれ単独並びにそれらの様々な結合及び小結合の形で有する、新規且つ無類の方法、プログラムされたコンピュータ、及びプログラマブル媒体（例えば、電子ファイル又はディスク）と、ＢＩＳＴ回路とである。本明細書において特許請求される発明が、特許請求の文言で記載された内容以外に、固有の特徴を有すること、又は何らかの固有の利点を提供することは必須ではない。
【０００５】
現在のシステム・オン・チップ（ＳＯＣ）の設計は、ますますメモリが支配的になるため、ＳＯＣの設計の歩留まりは、埋め込みメモリの歩留まりに大きく依存する。メモリ内の欠陥を検出するために、多くの故障モデル及びテスト・アルゴリズムが開発されている。メモリの信頼性を高めるために、更に多くの故障モデル及びテスト・アルゴリズムが開発されつつある。チップが製造された後に、埋め込みメモリの信頼性を保証するための新しいアルゴリズムが開発される場合がある。そのような、後から開発されたアルゴリズムを用いて製造済みチップをテストしようとすると、プログラマブルＭＢＩＳＴコントローラがない場合には、チップが製造された後にそのような新しいアルゴリズムをロード及び適用しなければならない。フィールド・プログラマブル・メモリＢＩＳＴは、現場におけるテスト・アルゴリズムの変更を非常に柔軟に行えるようにする。
【０００６】
本明細書に記載のプログラマブル・メモリＢＩＳＴコントローラの特定の実施形態は、線形アルゴリズムをサポートするだけでなく、他の幾つかの非線形アルゴリズムもサポートする。この設計は、面積オーバヘッドと故障検出率との間の望ましいトレードオフが達成されるようにサポートされるアルゴリズムの選択を可能にする。
【０００７】
本明細書において開示される様々な例示的実施形態は、多数の新規且つ非自明な特徴及び方法を示す。特定の例示的実施形態は、以下の態様のうちの１つ又は複数を有する。
一部の例示的実施形態によれば、１つ又は複数の入れ子ループを有するメモリ・テスト・アルゴリズムをサポートするために、プログラマブルＭＢＩＳＴ回路が提供される。
【０００８】
特定の実施形態の望ましい一態様は、ステップ内と同様にステップ内の入れ子ループ間でも、メモリの定格動作速度又は動作可能動作速度でのメモリのテストを達成可能にすることである。特定の実施形態では、プログラマブルＭＢＩＳＴ回路は、入れ子ループに対応しているかどうかに関係なく、動作可能動作速度でのメモリのテストを、アルゴリズムのステップ内と同様にアルゴリズムのステップ間でも想定している。入れ子になっていない例示的実施形態では、１つのステップが１つ又は複数のループを有することが可能である。これを動作可能動作速度のメモリ・テストにおいて可能にするために、特定の例示的実施形態に従ってループ境界を処理する備えが用意される。
【０００９】
特定の例示的ＭＢＩＳＴ回路の実施形態の望ましいアーキテクチャでは、命令メモリが、（例えば、ＡＴＥからの）命令群をスキャン・インされる単一レジスタを有し、命令群がレジスタから先入れ先出しバッファにパラレルにロードされ、先入れ先出しバッファには、バッファが空になった後に実行される命令群が連続的にロードされる。
【００１０】
特定の例示的ＭＢＩＳＴ回路の実施形態の望ましいアーキテクチャでは、現在のアルゴリズム・ステップにある故障に対応する診断データが記録及びスキャンされることが可能であり、故障診断データがスキャン・アウトされた後に、現在のアルゴリズム・ステップにおいてＭＢＩＳＴ回路がリスタートされる。この目的のための一アーキテクチャでは、単一レジスタが用いられることが可能である。
【課題を解決するための手段】
【００１１】
（発明の概要）
特定の実施形態によれば、ＭＢＩＳＴコントローラは、（例えば、ＭＢＩＳＴ回路テストの実行時に）メモリ・テストをスケジュールするようにプログラム可能である。例えば、テストのために、単一のプログラマブルＭＢＩＳＴ回路に、複数のメモリを割り当てたり、組み合わせたりすることが可能である。命令は、ＭＢＩＳＴ回路の動作時に、次のメモリ回路テスト操作のうちの１つ又は複数が実行されるように、テスト・アルゴリズムを実行するようＭＢＩＳＴ回路をプログラムする。（ａ）ＭＢＩＳＴ回路によってテストされる複数のメモリに対し、任意の１つ又は複数のテスト・アルゴリズムを、順次連続的に適用する。（ｂ）ＭＩＳＴ回路によってテストされる複数のメモリに対し、任意の１つ又は複数のテスト・アルゴリズムを、順次インタリーブ的に適用する。並びに（ｃ）テストのためにＭＢＩＳＴ回路に割り当てられた複数のメモリから、１つ又は複数のメモリを選択する。
【００１２】
例示的実施形態によれば、ＭＢＩＳＴ回路の動作時に、次の操作のうちの任意の１つ又は複数を実行するようにＭＢＩＳＴ回路をプログラムする命令（例えば、構成命令）も、提供されることが可能である。（ａ）テストのために、少なくとも１つのメモリからなるメモリ・バンクを選択する。（ｂ）テストのために、少なくとも１つのメモリからなるページを選択する。（ｃ）テストのために、少なくとも１つのメモリからなるポートを選択する。（ｄ）テストされるメモリのメモリ・アドレス範囲の一部を選択する。（ｅ）診断モニタリングが実行されるべきかどうかを選択する。並びに（ｆ）１つ又は複数の特定のアルゴリズムに対して診断モニタリングが実行されるべきかどうかを選択する。特定の例示的実施形態には、他の代替プログラマブル操作（例えば、データ及びバックグラウンドのプログラマブルな選択や、メモリ・セルのプログラマブルなアドレス指定）を提供する命令も実装される。そのような目的又はその一部のために、構成ワードが用いられることが可能である。
【００１３】
特定の例示的実施形態のより具体的な態様によれば、集積回路が、少なくとも１つのメモリを備え、このメモリをテストすべく、このメモリの少なくとも１つのメモリ・テスト・アルゴリズムのためのテスト・データを適用するために、このメモリは、セルと、集積回路の製造後に命令をプログラムすることによってプログラム可能なメモリ・ビルト・イン・セルフ・テスト（ＭＢＩＳＴ）回路とを備え、この少なくとも１つのメモリ・テスト・アルゴリズムは、ＭＢＩＳＴ回路をプログラムすることによって決定される。そのような実施形態のＭＢＩＳＴ回路は、プログラミング命令を受け取ることに適合された命令メモリと、プログラミング命令を受け取り、デコードすることに適合された命令デコーダと、デコードされたプログラミング命令に応答して、少なくとも１つのテスト・アルゴリズムを実行するためにテスト・データを適用されるべき、メモリのセルのアドレス指定を決定するアドレス・ジェネレータであって、デコードされたプログラミング命令に応答して、少なくとも１つの入れ子ループを有する少なくとも１つのメモリ・テスト・アルゴリズムが実行されるようにメモリのセルをアドレス指定するアドレス・ジェネレータと、デコードされたプログラミング命令に従って、メモリの、アドレス指定されたセルにテスト・データを適用することと、適用されたテスト・データに対する、アドレス指定されたセルからの期待応答の出力を提供することとに適合されたデータ・ジェネレータであって、メモリは、適用されたテスト・データに応答して、アドレス指定されたセルから出力されたテスト結果を提示する、データ・ジェネレータと、適用されたテスト・データに対する、メモリの１つ又は複数のセルからの期待応答と、適用されたテスト・データに対する、そのような１つ又は複数のセルについての対応するテスト結果とを比較するよう動作可能な出力アナライザとを備える。
【００１４】
特定の実施形態のより具体的な態様によれば、集積回路が、セルのアレイを備える、少なくとも１つのメモリを備え、各セルが、行アドレスと列アドレスとを備え、集積回路が更に、その少なくとも１つのメモリと結合された、少なくとも１つのメモリ・ビルト・イン・セルフ・テスト（ＭＢＩＳＴ）回路を備える。そのような実施形態におけるＭＢＩＳＴ回路は、プログラミング命令をデコードするように適合されたデコーダを備え、プログラミング命令は、構成命令ワードとアルゴリズム命令ワードとを含み、デコーダは、アルゴリズム命令ワードと構成命令ワードとを区別することと、アルゴリズム命令ワードと構成命令ワードとを別々にデコードすることとに適合され、構成命令ワードは、少なくとも１つのテスト・アルゴリズムを指定するアルゴリズム指定部分を含み、テスト・アルゴリズムは、テスト・アルゴリズムに従ってメモリをテストするために適用されるべきテスト・ステップを含み、アルゴリズム命令ワードは、テスト・ステップ中に実行されるべきメモリ操作を指定するメモリ・アクセス操作部分を含む。
【００１５】
特定の更なる実施形態のより具体的な態様によれば、集積回路が、テストされるべき少なくとも１つのメモリと、メモリ・ビルト・イン・テスト（ＭＢＩＳＴ）回路とを備え、ＭＢＩＳＴ回路は、自動テスト装置（ＡＴＥ）から受け取った命令に応答して、少なくとも１つのテスト・アルゴリズムを、少なくとも１つのメモリに適用するように構成される。そのような実施形態では、ＭＢＩＳＴ回路は、ＡＴＥから命令を受け取るように適合された命令メモリと、前記命令をデコードし、構成命令とアルゴリズム命令とを分離するよう動作可能な命令デコーダと、デコードされた命令に応答して、デコードされた命令から決定されたアドレス指定スキームに従って、テストされるメモリのセルをアドレス指定するアドレス・ジェネレータであって、アドレス指定スキームは、アドレス指定されたセルにテスト・データが適用されると、少なくとも１つのメモリをテストするために前記少なくとも１つのテスト・アルゴリズムが実行されるように、メモリのセルをアドレス指定する、アドレス・ジェネレータと、デコードされた命令から決定されたように、前記少なくとも１つのテスト・アルゴリズムがメモリに対して実行されるように、アドレス指定されたメモリ・セルにテスト・データを適用するデータ・ジェネレータであって、メモリは、データ・ジェネレータからデータを受け取った、少なくとも選択されたセルからのテスト応答出力を提示する、データ・ジェネレータと、テスト結果を提供すべく、期待応答データと、選択されたセルから出力された実際のテスト応答とを比較するよう動作可能な出力応答アナライザと、テスト結果によって故障が示された場合に診断データを記録する診断モニタを更に備える集積回路とを備える。
【００１６】
プログラマブルＭＢＩＳＴ回路の例示的実施形態のプログラミングに関連する方法の実施形態も、本明細書において開示されている。
特定の実施形態の更なる態様によれば、ユーザが、合成されたプログラマブルＭＢＩＳＴ回路をカスタマイズ（即ち、インクリメンタル又はモジュール的に仕様を指定）することによって、合成されたＭＢＩＳＴ回路が、ユーザの望むアルゴリズムを実行できるようにすることを、可能にする柔軟性が提供される。例えば、ユーザは、集積回路の１つ又は複数のメモリをテストするために、ＭＢＩＳＴ回路によって実行されることをユーザが望む１つ又は複数のメモリ・テスト・アルゴリズムを適用するために必要な入れ子ループの数を、指定することが可能である。合成されたＭＢＩＳＴ回路は、ユーザによって指定された数の入れ子ループを有するメモリ・テスト・アルゴリズムを実行することが可能であるように構成される。別の例として、ユーザは、集積回路の１つ又は複数のメモリをテストするために、複数のカテゴリのアルゴリズムの中から、ＭＢＩＳＴ回路によって実行されることをユーザが望む少なくとも１つのカテゴリのメモリ・テスト・アルゴリズムを指定することが可能である。合成されたＭＢＩＳＴ回路は、ユーザによって指定された少なくとも１つのカテゴリのアルゴリズムの中からメモリ・テスト・アルゴリズムを実行することが可能であるように構成される。更に別の例として、ユーザは、実行されることをユーザが望むメモリ・テスト・アルゴリズムをＭＢＩＳＴ回路が実行するために必要なアドレス・ジェネレータの数を指定することが可能である。合成されたＭＢＩＳＴ回路は、実行されることをユーザが望むメモリ・テスト・アルゴリズムを実行するために、ユーザによって指定された数のアドレス・ジェネレータを有するように構成される。
【００１７】
特定の例示的実施形態から得られる柔軟性の別の例として、集積回路の少なくとも１つのメモリに対してメモリ・テスト・アルゴリズムを実行するために、実行時にプログラムされることが可能なプログラマブルＭＢＩＳＴコントローラが提供される。プログラマブルＭＢＩＳＴコントローラをプログラムする命令は、ＡＴＥから（或いは、あまり好ましくないがＲＯＭ又はＲＡＭから）供給されることが可能である。プログラマブルＭＢＩＳＴコントローラは、（例えば、有限状態機械内でエンコードされた命令を用いる）ハード・エンコードされたＭＢＩＳＴ回路のように、１つ又は複数のテスト・アルゴリズムを用いて集積回路をテストする他のＭＢＩＳＴ回路とともに構成されることが可能である。例えば、ハード・エンコードされたアルゴリズムは、集積回路のメモリの製造時テストに用いられることが可能である。プログラマブルＭＢＩＳＴ回路の方は、その後、例えば、返品された製品の中にある欠陥回路のトラブルシューティングを行う場合に、以前には確認されていなかった欠陥の原因を探すことを支援するために、追加メモリ・テスト・アルゴリズムを集積回路に適用すべく、実行時にプログラムされることが可能である。
【００１８】
更に、例示的実施形態によるプログラマブルＭＢＩＳＴコントローラは、製造された集積回路に含まれていたＭＢＩＳＴ回路のアーキテクチャによってサポートされる、新しく開発されたテスト・アルゴリズムを適用するために、あとからプログラムされることが可能である。
【００１９】
例示的実施形態の別の態様によれば、固有の構成を有する、残りのＭＢＩＳＴ回路要素は、集積回路を収容するチップに存続している。残りのＭＢＩＳＴ回路要素とは、プログラマブルＭＢＩＳＴ回路の、メモリ・テストに用いられてきた回路要素、又は今後のメモリ・テストに用いられることが可能な回路要素、又はその両方を意味する。従って、集積回路は、残りのＭＢＩＳＴ回路要素のうちの１つ又は複数と、他の残りの要素とともに、メモリ・ビルト・イン・セルフ・テスト（ＭＢＩＳＴ）回路を、集積回路を収容するチップに含むことが可能であり、その残りのＭＢＩＳＴ回路要素とは、（ａ）少なくとも１つのインター反復アドレス・ジェネレータ及び少なくとも１つのイントラ反復アドレス・ジェネレータと、（ｂ）ＭＢＩＳＴテストに用いられる場合に、アルゴリズム・ステップ内でのマルチレベル入れ子ループの実行を可能にする、少なくとも１つのステップ・コントローラと、（ｃ）ＭＢＩＳＴテストに用いられる場合に、命令を命令レジスタから先入れ先出し（ＦＩＦＯ）バッファにパラレルにロードすることを可能にする、ＦＩＦＯバッファに結合されたレジスタを備える命令メモリと、（ｄ）ＭＢＩＳＴテストに用いられる場合に、故障が検出されたステップに対応する現在のアルゴリズム・ステップからテストをリスタートすることを可能にする、診断モニタとである。
【００２０】
他の機能については、以下で説明される例示的実施形態から明らかになるであろう。
【発明を実施するための最良の形態】
【００２１】
１．０  概要
プログラマブルＭＢＩＳＴは、メモリのテストに用いられる、ビルトイン・カスタム・プロセッサを有するコントローラをチップ上に備える。プログラマブル・コントローラが、特定のクラスのアルゴリズムとその変形形態とを適用する機能を提供し、適用されるべきアルゴリズムを変更することを可能にする。プログラマブルＭＢＩＳＴコントローラの（全ての実施形態ではない）特定の望ましい実施形態の主たる利点は、以下のように要約されることが可能である。
・実行時にテスト・アルゴリズムを修正することを可能にする。これは、単にテスト・プログラムを修正することによって行われることが可能である。
・技術の急激な変化により、製造工程において発現しうるあらゆるタイプの欠陥を予測することは困難な場合が多い。製造工程の立ち上げ時期には、適用されたテストをすり抜ける欠陥を特定し、それらの欠陥をターゲットとするように既存のアルゴリズムを修正したり、新しいアルゴリズムを導入したりし、それらを捕捉するためにテスト・プログラムを実行時に変更することが可能である。
・多くの場合、チップとその修正版は、異なる技術で製造されるのに十分な長さの設計寿命を有する。チップが最初に設計されたときの特定の技術に対して有効であることが実証されていた特定のテスト群が、チップがより新しい技術に移行したときには不十分になる場合がある。そのような状況下では、その新しい技術に関連する欠陥を検出するために、追加のアルゴリズムが適用されることが必要になる場合がある。新しいアルゴリズムは、プログラマブル・メモリＢＩＳＴコントローラ内でエンコードされ、テスト中のメモリに適用されることが可能である。
・プログラマブル・コントローラは更に、ある設計の異なる修正版、或いは異なる設計にまたがって再利用されることが可能である。これにより、ＢＩＳＴコントローラの検証時間が短縮される。
【００２２】
プログラマブルＭＢＩＳＴコントローラは、設計全体にわたり、メモリの全てのグループに対して、カスタム・プロセッサ又はコントローラが複数回複製されなければならないので、追加オーバヘッドを利用する。現在の設計において何百ものメモリ（或いはそれ以上のメモリ）が埋め込まれる可能性を考えると、通常は多数のコントローラが必要であり、従って、これら全てのコントローラの分の面積オーバヘッドが大量になりやすい。しかしながら、プログラマブルＭＢＩＳＴコントローラによってテストされるべきメモリを選択的に選択することによって、必要な柔軟性を有しながら面積オーバヘッドを最適化することが可能である。
【００２３】
本明細書では、まず、サポートされることが可能な（例えば、プログラミングによりコントローラがサポートすることが可能な）選択された例示的アルゴリズムの概要を提示する。あらかじめ選択されたアルゴリズムとプログラマブルなアルゴリズムとの組合せもサポートされることが可能である。これらのアルゴリズムの幾つかは、Ｍｅｎｔｏｒ  Ｇｒａｐｈｉｃｓ  ＣｏｒｐｏｒａｔｉｏｎからリリースされているＭＢＩＳＴＡｒｃｈｉｔｅｃｔ（登録商標）製品によって既にサポートされている。例示的な命令セット及びハードウェア・アーキテクチャについても記載する。
【００２４】
本出願及び本特許請求項で使用される単数形「ａ」と、「ａｎ」と、「ｔｈｅ」とは、文脈において特に断らない限り、複数形を含む。更に、単語「ｉｎｃｌｕｄｅｓ」（含む）は「ｃｏｍｐｒｉｓｅｓ」（含む）を意味する。更に、単語「ｃｏｕｐｌｅｄ」（結合された）は、電気的又は電磁的に接続又はリンクされていることを意味し、結合されているアイテム間に中間的な要素が存在することを排除しない。
【００２５】
この後のセクション２では、プログラマブルＭＢＩＳＴコントローラの望ましい特徴について概略的に説明し、これは、サポートされるアルゴリズムの例示的セットを列挙することを含む。セクション３では、アーキテクチャの例示的な第１の実施形態について説明し、ここでは、例示的命令セットの細部を明らかにするとともに、様々な例示的ハードウェア・ブロックについても説明する。セクション４では、セクション３で説明された命令セットを用いる例示的アルゴリズムの擬似コードの例を幾つか示す。セクション５では、プログラマブルＭＢＩＳＴコントローラの代替実施形態について説明する。セクション６及び７では、選択された実施形態によってサポートされる特定アルゴリズムの例示的擬似コードについて説明する。セクション８では、更に別の実施形態を開示する。セクション９では、ＡＴＥとの例示的相互作用及び診断例について説明する。セクション１０では、例示的プログラマブルＭＢＩＳＴコントローラの作成について説明する。セクション１１では、Ｍａｒｃｈ専用ＭＢＩＳＴコントローラの実施形態を開示する。
２．０  概略説明
フィールド・プログラマブルＭＢＩＳＴコントローラの選択された実施形態のアーキテクチャは、実行時にテスト・プログラムを指定できることに加えて、以下の条件を満たすように構成されることが望ましい。
１．ＭＢＩＳＴＡｒｃｈｉｔｅｃｔ（登録商標）製品によって現在サポートされている全てのアルゴリズムをサポートする。
２．より高い品質要件を満たすために、幾つかの先進的アルゴリズム（その例については後述する）をサポートする。
３．様々なデータ・バックグラウンドと、アドレス順序付けと、他の、記載されたアルゴリズムの実行に必要なアドレス指定スキームとに対応する。
４．少なくとも特定の望ましいアルゴリズムにおいて、そのアルゴリズムが実動作速度で（ａｔ−ｓｐｅｅｄ）（例えば、テストされるメモリの設計動作速度において）適用可能であるように、速度要件を満たす。
５．扱いやすい面積オーバヘッドを有する。
６．新しいクラスのアルゴリズムをサポートするための、将来の拡張が容易である。
【００２６】
次のセクションでは、望ましい形態のフィールド・プログラマブルＭＢＩＳＴコントローラがサポートするアルゴリズムの幾つかの例示的グループについて説明する。他のアルゴリズムもサポートされることが可能である。更に、アルゴリズムのより小さなサブセットをサポートするよう選択することが可能である。
２．１  アルゴリズムのサポート
プログラマブルＭＢＩＳＴコントローラによってサポートされることが望ましい様々なアルゴリズムを、このセクションに列挙されるカテゴリにおおまかに分類することが可能である。これらのアルゴリズムの目標は、機能的故障の低減であり、これは、故障モデルが、メモリの機能性に基づくだけではなく、それらの電気的或いは幾何学的レベルの特性も考慮することを意味する。具体的には、これらのアルゴリズムは、単一のセルが関与する故障（縮退故障及び遷移故障）、又はペアのセルが関与する故障（結合故障）を対象とする。本開示のフィールド・プログラマブルＢＩＳＴコントローラは、望ましくは、そのようなアルゴリズムをサポートするだけでなく、メモリのテスト品質を向上させることを目標とする、追加クラスのアルゴリズムもサポートすることが望ましい。
２．１．１  Ｍａｒｃｈベース・アルゴリズム
Ｍａｒｃｈテストは、Ｍａｒｃｈ要素の有限シーケンスからなる。Ｍａｒｃｈ要素は、全てのメモリ・アドレスを任意の順序でトラバースすることによってメモリ内の全てのセルに適用される操作の有限シーケンスである。メモリ・セルにアクセスする順序は、全てのＭａｒｃｈ要素に対して同一であってよく、幾つかのＭａｒｃｈ要素については、反転された逆の順序であってもよい。変形形態として、Ｍａｒｃｈ要素においては、操作は、アドレスが現在のセルから一定の距離にあるメモリ・セルにアクセスすることが可能である。
【００２７】
一部の形態におけるプログラマブル・コントローラは、以下の標準的なアルゴリズムと、現在の業界で用いられているか、今後開発される、他のＭａｒｃｈアルゴリズムとをサポートすることが望ましい。
・Ｍａｒｃｈ  Ｃ＋（Ｍａｒｃｈ  ２とも呼ばれる）
・Ｍａｒｃｈ  Ｃ
・Ｍａｒｃｈ  Ｃ−（Ｍａｒｃｈ  １とも呼ばれる）
・Ｍａｒｃｈ  ３
・Ｃｏｌｕｍｎ  Ｍａｒｃｈ
・ユニーク・データ
・行ストライプ／列ストライプ
上記のアルゴリズム・セットは、主として、メモリ内の以下のタイプの故障、即ち、縮退故障（ｓｔｕｃｋ−ａｔ  ｆａｕｌｔｓ）（ＳＡＦ）、遷移故障（ｔｒａｎｓｉｔｉｏｎ  ｆａｕｌｔｓ）（ＴＦ）、結合故障（ｃｏｕｐｌｉｎｇ  ｆａｕｌｔｓ）（ＣＦ）、逆結合故障（ｉｎｖｅｒｓｉｏｎ  ｃｏｕｐｌｉｎｇ  ｆａｕｌｔｓ）（ＣＦｉｎ）、冪等結合故障（ｉｄｅｍｐｏｔｅｎｔ  ｃｏｕｐｌｉｎｇ  ｆａｕｌｔｓ）（ＣＦｉｄ）、開放固着故障（ｓｔｕｃｋ−ｏｐｅｎ  ｆａｕｌｔｓ）（ＳＯＦ）、及び特定アドレス・デコーダ故障（ｃｅｒｔａｉｎ  ａｄｄｒｅｓｓ  ｄｅｃｏｄｅｒ  ｆａｕｌｔｓ）（ＡＤ）を対象とする。Ｍａｒｃｈアルゴリズムの趣旨はシンプルである。即ち、全てのメモリ・セルは状態０及び状態１になることが可能でなければならないので、ＴＦ及びＣＦを検出するために、全てのセルに立ち上がり遷移と立ち下がり遷移とを行わせるというものである。
【００２８】
Ｍａｒｃｈアルゴリズム・クラスでは、アドレス指定は、かなり直接的である。即ち、コントローラは、メモリの全てのアドレスを昇順又は降順に通る行進（ｍａｒｃｈ）を行う。通常、アドレスをインクリメント又はデクリメントする刻み幅は１であるが、他の刻み幅を用いることも可能である。個々のテスト・ステップでは、同一アドレス・ロケーションにおいて様々な操作が実行される。通常、これは、単一のアドレス・ジェネレータだけを用いて達成可能である。上述のテストを適用する際には、様々なデータ・バックグラウンドを用いることが可能である。
【００２９】
上に列挙した標準的なＭａｒｃｈアルゴリズムを望ましくサポートすることに加えて、ユーザは、単一メモリ・アクセス操作（単一の読み出しアクティビティ又は書き込みアクティビティ）、又はこれらの読み出し及び書き込み操作を用いて形成されることが可能な、より複雑な操作シーケンスを用いて、独自クラスのＭａｒｃｈアルゴリズムを望ましく定義することが可能である。ユーザ定義アルゴリズム（Ｕｓｅｒ  Ｄｅｆｉｎｅｄ  Ａｌｇｏｒｉｔｈｍｓ）（ＵＤＡ）は、カスタム・アルゴリズムを定義することに関して、ある程度の柔軟性を有するが、周知のＵＤＡアプローチは、かなりシンプルなアドレス指定スキームに従うＭａｒｃｈアルゴリズムのみに制限されている。
【００３０】
Ｍａｒｃｈアルゴリズムの変形形態は、一般に、以下のことに基づく。
・ステップ内の操作（「ｒ」又は「ｗ」を意味する）は、ユーザによって、それぞれの工程に適した任意のシーケンスに変更されることが可能である。
・あるアルゴリズムに対応する操作の総数は、ユーザが選択するものに応じて変わることも可能である。
・１つの変形形態は、アドレス「ｎ」にアクセスするステップにある。即ち、操作の１つが、アドレス「ｎ−１」又は「ｎ＋１」にアクセスすることが可能である。これらの変形形態は、本明細書で開示される例示的フィールド・プログラマブルＢＩＳＴコントローラの特定の実施形態によってサポートされることが望ましい。
２．１．２  他の例示的テスト
これらのクラスのテストは、リフレッシュ／センス増幅器のリカバリ失敗のような非機能的故障の検出に役立つ。これらは、Ｍａｒｃｈアルゴリズムより複雑であり、テスト適用時間は長くかかるが、より良好な故障検出率を実現する。以下では、本明細書で開示されるフィールド・プログラマブルＭＢＩＳＴコントローラを用いて（例えば、プログラミングにより）選択的に実装されることが可能であることが望ましい、幾つかの例示的な従来型テスト・アルゴリズムについて説明する。
２．１．２．１  Ｃｈｅｃｋｅｒｂｏａｒｄ（チェッカーボード）アルゴリズム
Ｃｈｅｃｋｅｒｂｏａｒｄアルゴリズムは、一意アドレス・アルゴリズムのクラスであり、Ｍａｒｃｈアルゴリズムの変形形態である行ストライプ・アルゴリズム及び列ストライプ・アルゴリズムである。これら全てのアルゴリズムにおいて、アドレス指定スキームは、Ｍａｒｃｈクラスのアルゴリズムと同じであるが、書き込まれるデータがアドレス依存である。本開示のフィールド・プログラマブルＢＩＳＴコントローラは、そのようなＣｈｅｃｋｅｒｂｏａｒｄアルゴリズムを全てサポートすることが望ましい。
【００３１】
例示的なＣｈｅｃｋｅｒｂｏａｒｄアルゴリズムでは、メモリ・セルは、チェッカーボード・パターンを形成する２つのグループｃ＿１及びｃ＿２に分けられる。これら２つのグループには、常に反対の値が書き込まれる。チェッカーボード・パターンは、アドレス・デコーダが正常に動作しているという前提の下で、隣接する２つのセルの間の短絡を検出する。１を有する各セルは、０を有するセルに囲まれ、０を有する各セルは、１を有するセルに囲まれるので、チェッカーボード・テストは更に、セル間の漏れ電流を最大化することが可能であり、それによって、高い漏れ電流をもたらす欠陥を検出することが可能である。このアルゴリズムの複雑度は、Ｏ（ｎ）である（ｎはメモリ内のワード数）。例示的なＣｈｅｃｋｅｒｂｏａｒｄアルゴリズムは、次のように記述されることが可能である。
ｃ＿１の全てのセルに１を書き込み（Ｗ１）、ｃ＿２の全てのセルに０を書き込む（Ｗ０）。
全てのワードを読み出す。
ｃ＿１の全てのセルに０を書き込み（Ｗ０）、ｃ＿２の全てのセルに１を書き込む（Ｗ１）。
全てのワードを読み出す。
２．１．２．２  Ｇａｌｌｏｐｉｎｇ（ギャロップ）／Ｗａｌｋｉｎｇ（ウォーキング）アルゴリズム
ＧＡＬＰＡＴ  （ＧＡＬｌｏｐｐｉｎｇ  ＰＡＴｔｅｒｎ）及びＷａｌｋｉｎｇ  １／０の例示的アルゴリズムは、性質が非常によく似ている。これらのケースの何れにおいても、メモリは、ベース・セルと残りのセル（ローカルにアドレス指定されたセルとも呼ばれる）との２つのカテゴリに分けられる。ベース・セルを除くメモリ全体が０（又は１）で埋められ、ベース・セルは反対の値（例えば、１（又は０））を有する。テスト時には、ベース・セルがメモリ内をウォーキングする。ベース・セル内の値が変更されると、他の全てのメモリ・セルが読み出されて、それらがベース・セルへの書き込み操作の影響を受けていないかどうかが検証され、その、ベース・セル以外のセルの読み出し操作の後にベース・セルが読み出される。ＧＡＬＰＡＴアルゴリズムとＷａｌｋｉｎｇ  ０／１アルゴリズムとの違いは、ベース・セルが読み出される方法にある。Ｗａｌｋｉｎｇ  ０／１の場合は、各ステップの後に、全てのセルが読み出され、ベース・セルはその最後に読み出される。一方、ＧＡＬＰＡＴアルゴリズムでは、ベース・セル以外の全てのセルが読み出されている間に、各セルが読み出された後にベース・セルも読み出される。これらのアルゴリズムの変形形態として、ローカル・セルが、ベース・セルと同じ行又は同じ列にあるセルだけであることが可能なケースや、ギャロップ／ウォーキング・ステップに別途読み出し又は書き込み操作を追加することが可能なケース（例えば、ギャロップ・ステップ（Ｗ０，（Ｒ１，Ｒ０），Ｗ１）が（Ｗ０，Ｒ０，（Ｒ１，Ｒ０），Ｗ１）に修正されることも可能であるケース）がある。
【００３２】
Ｇａｌｌｏｐｉｎｇ／Ｗａｌｋｉｎｇ  ０及び１アルゴリズムは、２つのループを有し、第１のループは、メモリの全てのアドレスを通る行進を行うベース・ループである。第２のループは、所与のベース・アドレスに固有の順序でアドレス空間をループ・スルーする内側ループ（ローカル・ループとも呼ばれる）である。これらは、Ｍａｒｃｈアルゴリズムより複雑なアルゴリズムであり、テスト適用時間もより長く必要である。
【００３３】
これらのアルゴリズムは、全てのＡＦ、全てのＳＡＦ、全てのＴＦ、並びに一部の結合故障を検出する。更に、ＡＦ及びＣＦは、正確に見つけられることが可能である。これは、結合セルの書き込みが行われた直後に（別の書き込み操作が行われる前に）結合セルの読み出しが行われるからである。同じことが、アドレス・デコーダ故障の場合にも当てはまる。ＧＡＬＰＡＴアルゴリズム及びＷａｌｋｉｎｇ  ０／１アルゴリズムの両方の複雑度は、Ｏ（ｎ２）である。
【００３４】
例示的なＧＡＬＰＡＴアルゴリズム及びＷａｌｋｉｎｇ  ０／１アルゴリズムは、以下のように記述される。
ＧＡＬＰＡＴアルゴリズム
【００３５】
【数１】
2008521159.tif 000002
【００３６】
Ｗａｌｋｉｎｇ  ０／１アルゴリズム
【００３７】
【数２】
2008521159.tif 000003
【００３８】
既に述べたように、前述の例示的なＧＡＬＰＡＴ及びＷａｌｋｉｎｇ  ０／１の間の唯一の違いは、メモリの各読み出し操作の後にベース・セルがアクセスされる方法にある。これにより、アルゴリズムの複雑度が低減されるばかりでなく、テスト適用時間も短縮される。
２．１．２．３  Ｓｌｉｄｉｎｇ  ｄｉａｇｏｎａｌ（斜めスライド）
ＧＡＬＰＡＴアルゴリズム及びＷａｌｋｉｎｇ  ０／１アルゴリズムの複雑度が非常に高いので、Ｓｌｉｄｉｎｇ  ｄｉａｇｏｎａｌは、それらに対する、より短い代替である。このケースの例では、斜め線上にあるセル（以下、斜めセル）が、単一のベース・セルの代わりに、パラレルにアクセスされる。斜めセルがアドレス指定されるため、行デコーダ及び列デコーダの両方が同時にテストされる。例示的アルゴリズムは、メモリ全体に、全て１又は全て０を書き込むことから始まる。バックグラウンドが０であれば斜め線に１が書き込まれ、バックグラウンドが１であれば斜め線に０が書き込まれる。メモリ全体が連続して読み出され、その後に、斜め線が右にシフトされる。このプロセスは、全てのセルが斜め線の一部になるまで繰り返される。Ｓｌｉｄｉｎｇ  ｄｉａｇｏｎａｌアルゴリズムは、全てのＳＡＦ及びＴＦを検出する。更に、このアルゴリズムは、ほとんどのＡＦと、一部のＣＦとを検出する。全てのＣＦが検出されるわけではないのは、全ての斜めセルが連続して書き込まれる結果、一部の結合故障が別の一部の結合故障によってマスクされるためである。
【００３９】
例示的なＳｌｉｄｉｎｇ  ｄｉａｇｏｎａｌアルゴリズムは、次のように表される。
【００４０】
【数３】
2008521159.tif 000004
【００４１】
Ｓｌｉｄｉｎｇ  ｄｉａｇｏｎａｌアルゴリズムの複雑度は、Ｏ（ｎ．ｎ１／２）のオーダーである（ｎはメモリ内のワード数）。しかしながら、テストの例示的形態を正しく適用するためには、それぞれ及び全てのメモリ・ワードの正確なロケーションが既知でなければならない。
２．１．２．４  Ｂｕｔｔｅｒｆｌｙ（バタフライ）
Ｂｕｔｔｅｒｆｌｙは、テストの適用の複雑度を低減する、ＧＡＬＰＡＴテストの変形形態である。ＧＡＬＰＡＴアルゴリズムと同様に、メモリは、例えば、１を有するベース・セルを除き、バックグラウンド０で埋められる。テスト適用時には、ベース・セルがメモリ内を実際にウォーキングする。読み出し時には、ベース・セルに直接隣接する（即ち、ベース・セルからの距離が１である）（東、西、北、及び南側の）４個のセルだけが読み出される。実装に応じて、距離が２、４、８、及び１６である他の近接セルがその次に読み出されることが可能である。より一般的には、このアルゴリズムのローカル・セルは、ベース・セルから４つの方向（東、西、南、及び北）に距離２ｎを有する。即ち、ローカル・セルのアドレスは、（ベース行／列アドレス±２ｎ）である（ただし、ｎは０からＮ−１であり、Ｎは行アドレス又は列アドレスのビット数である）。ここで、メモリは正方形であると仮定する。必要に応じて別途読み出し又は書き込み操作を追加することが可能である。
【００４２】
Ｂｕｔｔｅｒｆｌｙアルゴリズムは、全てのセルに０及び１の両方が書き込まれることから、全てのＳＡＦを検出し、一部のアドレス・デコーダ故障も同様に検出される。例示的なＢｕｔｔｅｒｆｌｙアルゴリズムは、次のように記述されることが可能である。
【００４３】
【数４】
2008521159.tif 000005
【００４４】
Ｂｕｔｔｅｒｆｌｙアルゴリズムの複雑度は、Ｏ（ｎ．ｌｏｇ２（ｎ））で表されることが可能である（ｎは、テストされるべきメモリ・ワードの数）。
Ｂｕｔｔｅｒｆｌｙ及び斜めスライドは、２レベルのルーピングを有し、実動作速度テスト用に２つのアドレス・ジェネレータを必要とする場合がある。
【００４５】
２レベルのルーピングを有し、第２のアドレスが第１のアドレスとの間に何らかの算術的又は論理的関係を有することが可能であるように２つ以上のアドレス・ジェネレータを必要とする、アルゴリズムの変形形態は、更に、本明細書で開示されるフィールド・プログラマブルＢＩＳＴコントローラの特定の実施形態のアーキテクチャによってサポートされることが望ましい。これらのアドレスは、インデックス・レジスタにおいて指定される任意のインクリメントを用いることも可能である。
２．１．３  その他のメモリ・テスト・アルゴリズム
以下の例示的テストは、これまでに説明したアルゴリズムでは検出されない故障の一部をカバーする。以下のアルゴリズムが対象とする故障は、アドレス・デコーダにおいて、メモリ・セルにおいて、書き込みイネーブル信号において、或いはその他の箇所において発現する。これらの故障を対象として、様々なアルゴリズムと、その更新されたバージョンとが提案されている。以下のサブセクションでは、そのような故障を対象とする幾つかのアルゴリズムについて説明する。
２．１．３．１  アドレス・デコーダＰＭＯＳ開放故障
これらの故障は、通常は、ＣＭＯＳ技術を用いて作られたアドレス・デコーダにおいて発生し、主に、接触不良によるものか、製造工程に原因がある。ＣＭＯＳ技術では、開放欠陥のサブセットだけが縮退挙動を引き起こし、Ｍａｒｃｈテストにより検出されることが可能である。しかしながら、他のそのような欠陥は、デコーダの組合せ回路を順序回路のように動作させるため、従来のＭａｒｃｈテストでは検出できない。これらの故障は、回路の遅延動作を変化させることもあり、従って、全ての故障を検出するためには、テストを最高速度で行わなければならない。
【００４６】
このクラスのアルゴリズムは、概して、メモリ・アレイ内の故障を対象とせず、主に、アドレス・デコーダのＰＭＯＳ部分の開放固着故障のための２つのパターン・テストを生成するために用いられる。このケースでは、アルゴリズムは、２レベルの入れ子ルーピングを有する。しかしながら、ローカル・アドレスは、固有の方法でベース・アドレスに関連付けられる。ローカル・アドレスは、ベース・アドレスと２ｎとの排他的論理和によって生成されることが可能である（ただし、ｎは０からＮ−１であり、Ｎはアドレスのビット数である）。
【００４７】
図１は、２入力ＮＡＮＤゲート１０の典型的実装を示し、ゲート１０は、２つのプルアップ・トランジスタ１２、１４、即ち、ｐ１及びｐ２（ＰＭＯＳ）と、２つのプルダウン・トランジスタ１６、１８、即ち、ｎ１及びｎ２（ＮＭＯＳ）とからなる。
【００４８】
上述のＮＡＮＤゲートの機能性は、簡単には、次のように説明されることが可能である。入力が両方とも１（ａ＝ｂ＝１）であれば、ＮＡＮＤゲートの出力ｚは０であり、入力の何れか一方が０に設定されると、出力はＶｄｄに変わる。ＮＭＯＳトランジスタに開放固着欠陥がある場合、それはメモリ・セル内の縮退故障として発現し、その欠陥はＭａｒｃｈテストによって検出されるはずである。しかしながら、ＰＭＯＳトランジスタに作用する残りの故障は、ＮＡＮＤゲートに順序動作を行わせ、それらの検出にはペアのパターンが必要である。そのような、ＰＭＯＳトランジスタ内の開放固着欠陥を検出することが望ましい。ＰＭＯＳトランジスタの一方（ｐ２）に開放固着故障があるとすると、ＮＡＮＤゲートの動作は、次の表１に示すように変化する。
【００４９】
【表１】
2008521159.tif 000006
【００５０】
２入力アドレス線を有する例示的アドレス・デコーダの回路図を図２に示す。
【００５１】
【表２】
2008521159.tif 000007
【００５２】
図２のアドレス・デコーダ３０は、何れか１つのメモリ・ロケーションに書き込みが行われるように、入力アドレス値に応じて、そのセレクタ線の何れか１つを選択することになっている。第１のセレクタ線（ＷＬ０）を制御するＮＡＮＤゲート３２に開放ＰＭＯＳトランジスタがあると仮定する。このケースでの故障アドレス・デコーダの動作が、上の表２に示されている。アドレス線（ａ，ｂ）の値が「００」であれば、第１のメモリ・ロケーションにデータが書き込まれる。しかしながら、アドレスが「０１」に変更されると、データは第１及び第２の両方のメモリ・ロケーションに書き込まれる。故障がない環境であれば、アドレス・ビットが「０１」のときには、セレクタ線ＷＬ１だけが選択されているはずである。しかしながら、第１のＮＡＮＤゲートの開放固着故障のために、セレクタ線ＷＬ０は、古い値を保持し、選択された状態になる。言い換えると、アドレス「００」の内容と異なる、増感された値がアドレス「０１」に書き込まれた場合に、アドレス・ロケーション「００」を後から読み出すことにより、故障が検出されることが可能である。
【００５３】
以下の例示的アルゴリズムは、アドレス・デコーダ線におけるほとんどのＰＭＯＳ開放欠陥を検出することが可能である。
【００５４】
【数５】
2008521159.tif 000008
【００５５】
このアルゴリズムの複雑度は、以下のように決定されることが可能である。内側ループが（Ｎ−１）回実行され（Ｎ＝ｌｏｇ２ｎ、ｎはメモリ・ワードの数）、このループは、１つの読み出し操作と１つの書き込み操作とを有する。外側ループは、各メモリ・ワードに対して一度にｎ回実行される。従って、このアルゴリズムの全体的な複雑度は、Ｏ（ｎ．ｌｏｇ２ｎ）のオーダーである。
【００５６】
５つのグループのアルゴリズム（Ｍａｒｃｈ、Ｇａｌｌｏｐｉｎｇ／Ｗａｌｋｉｎｇ、Ｂｕｔｔｅｒｆｌｙ、Ｓｌｉｄｉｎｇ  Ｄｉａｇｏｎａｌ、及びＰＭＯＳ開放故障）  は任意のデータ・バックグラウンドを使用できることに注意されたい。
２．１．３．２  ビット／バイト書き込みイネーブル故障
以下の故障モデルは、特定のメモリに対して複数の書き込みイネーブル信号があるときに発現する。従来のアルゴリズムが適用された場合、コントローラは、そのアルゴリズムの適用中に、全ての書き込みイネーブル信号がアサートされていると見なす。従って、特定の書き込みイネーブル信号が、アサートされた値で縮退していると、それらの故障が検出されないまま残る。同様に、書き込みイネーブル信号のペアの間の結合故障は、そのようなアルゴリズムでは検出されないまま残る。以下の例示的テストは、アドレス・デコーダ又は実際のメモリ・セルのテストとは独立である、書き込みイネーブル信号の故障を対象とするように設計されることが望ましい。
【００５７】
これらの書き込みイネーブル・マスク・テストは、メモリ・ワードの異なるビットに関連付けられた全ての書き込みイネーブル信号のテストを可能にすることが望ましいアルゴリズムのクラスである。これらのアルゴリズムは、望ましくはメモリ・アレイのテストに用いられず、書き込みマスク・イネーブル信号の間に縮退故障又は結合故障がないかどうかを調べるために書き込みマスク・イネーブル信号をテストすることが望ましい。
【００５８】
これらのアルゴリズムは、書き込みイネーブル・マスク信号だけでなく任意のメモリ制御信号をテストするように拡張されることが可能である。以下で説明される例示的アーキテクチャは、そのような拡張を可能にする。
【００５９】
１つのそのような例示的アルゴリズムの基本動作は、書き込みイネーブル信号の選択的アサートを仮定し、メモリ・セルが、対応する書き込みイネーブル信号がアサートされているか（又はデアサートされているか）どうかに応じて、異なる値を有するかどうかを評価する。特定のメモリ・ロケーションに対して書き込み操作を実行しているときは、書き込みイネーブル信号のサブセットだけがアサートされていることが望ましい。同じメモリ・ロケーションからデータを読み出しているときは、アルゴリズムは、イネーブル・ビットに対応するビットが更新されていて、残りのビットが更新されていないことを確認する。更に、このアルゴリズムは、アドレス・デコーダ及びメモリ・セルの検証の後の、本当の最後に適用されるのが普通であり、従って、その後に何らかのエラーが発生しても、その原因を書き込みイネーブル信号の故障であるとすることが可能である。
【００６０】
ビット書き込みイネーブル信号を前提とすると、以下で説明されるアルゴリズムの個々の実装は、個々の書き込みイネーブル信号における全ての縮退故障、並びに書き込みイネーブル信号のペアの間の全ての結合故障を対象とする。この例の書き込みイネーブル信号は、アクティブ・ローであることが前提であることに注意されたい。
ＷＥＮ＝０ｘ００、０ｘ００を最低及び最高メモリ・アドレス・ロケーションに書き込む
ＷＥＮ＝０ｘ５５、０ｘＦＦを最低及び最高メモリ・アドレス・ロケーションに書き込む
最低及び最高メモリ・アドレス・ロケーションから０ｘＡＡを読み出す
ＷＥＮ＝０ｘ００、０ｘ００を最低及び最高メモリ・アドレス・ロケーションに書き込む
ＷＥＮ＝０ｘＡＡ、０ｘＦＦを最低及び最高メモリ・アドレス・ロケーションに書き込む
最低及び最高メモリ・アドレス・ロケーションから０ｘ５５を読み出す
上記のアルゴリズムは、１２個のベクトルだけの適用を必要とする。書き込みイネーブル信号のテストがどの程度必要かに応じて、アルゴリズムの複雑度を変えることが可能である。しかしながら、アルゴリズムは、常に、単一メモリ・ワードに対応する書き込みイネーブル信号の数の線形関数であることが望ましい。
２．１．３．３  マルチポート・テスト
一部の実施形態の例示的アーキテクチャは、マルチポート・テストに関連するアルゴリズムをサポートすることが望ましい。例えば、ポート相互作用アルゴリズムがサポートされることが可能である。更に、そのアーキテクチャは、様々なポートを介するメモリの読み出し及び書き込みが同時に可能かどうかをチェックする「ポート隔離」テストをサポートすることも望ましい。１つ又は２つのアドレス・ジェネレータを必要とするアドレス指定スキームが必要な、これらのアルゴリズムの変形形態がサポートされることが可能である。
２．１．３．４  チェックサム
一部の実施形態の例示的アーキテクチャは更に、メモリ・ロケーションを読み出すことにより、ビットのチェックサムを行うことが可能であることが望ましい。これは、メモリに書き込まれるデータの予測が困難になるケースにおいて有用である。例えば、メモリへの書き込みを基本モードで行うことが必要であって、ＢＩＳＴコントローラがそのメモリの内容を読み出してチェックサムを生成することが必要である場合、これは、この例示的アーキテクチャによってサポートされる。
２．１．３．５  入れ子ループ
以下に開示される代替アーキテクチャは、個々のアルゴリズム・ステップにおいて任意の数の入れ子ループをテストするように設計される。３個以上の入れ子ループを有するアルゴリズムがある場合、代替アーキテクチャは、例えば、複数のアドレス・ジェネレータを合成したり、既存のジェネレータを流用して、別のループで用いられる別のスキームをアドレス指定したりすることが可能である。
３．０  プログラマブルＭＢＩＳＴコントローラの例示的な第１の実施形態
プログラマブル・コントローラの例示的実施形態のアーキテクチャは、２つの主要部分、即ち、命令セットとハードウェア設計とを含むことが望ましい。命令セットは、プログラマブル・コントローラが、前のセクションで説明された全てのアルゴリズムと、将来選択される可能性がある他のアルゴリズムとを実行することが可能であるように、設計されることが望ましい。一部の実施形態では、コントローラは、アルゴリズムのより小さなセット、又は１つだけのアルゴリズム・タイプをサポートするようにプログラマブルであってよい。更に、アーキテクチャは、少なくとも特定のクラスのアルゴリズムについて、カスタマイズされたアルゴリズムをサポートする柔軟性を備えることが望ましい。一部のクラスのアルゴリズムについては、柔軟性はあっても、プログラマブル・コントローラのハードウェア・オーバヘッドが、従来のハードワイヤードＭＢＩＳＴコントローラに比べて過剰にならないように、アルゴリズムの選択可能性が制限又は限定されてもよい。
【００６１】
セクション２で挙げられた全てのアルゴリズムをプログラマブルＭＢＩＳＴコントローラがサポートするための、様々な例示的アドレス指定スキーム及び様々なメモリ・ロケーションに書き込まれるデータについて、次に説明する。
【００６２】
１．アドレス指定スキーム：異なるアルゴリズムのアドレス空間は、２つのカテゴリ、即ち、ベース・アドレスとローカル・アドレスとに分けられることが可能であることが望ましい。ベース・アドレスは、個々のテストの適用時にリファレンスとして用いられ、例えば、プライマリ・アドレス・レジスタにロードされるアドレスを意味する。例えば、Ｍａｒｃｈ又はＣｈｅｃｋｅｒｂｏａｒｄパターンの場合には、何らかの操作（又は操作の組合せ）の対象のアドレスが１つだけ存在し、そのようなアドレスがベース・アドレスと呼ばれる。ＧＡＬＰＡＴ又はＷａｌｋｉｎｇ  １／０アルゴリズムの場合は、メモリ・セルが２つのグループ、即ち、ベース・セルと残りのセルとに分けられることが望ましい。ベース・メモリ・セルのアドレスは、ベース・アドレスによって参照され、ローカル・アドレスは、特定のベース・アドレスに対して、アルゴリズム・テストの適用時に対象となる全ての残りのセルを示す。ローカル・アドレスは、アルゴリズムに応じて、全ての残りのメモリ・セルをループ・スルーするか、残りのセルのサブセットだけをループ・スルーする。ベース・アドレスとローカル・アドレスとが変化する際に従うべき様式、及び特定の一例におけるそれら２つの間の関係について、以下に示す。
・プログラマブルＭＢＩＳＴコントローラの望ましい形態は、ベース・アドレスだけをインクリメント／デクリメントして、アクセスの順序を昇順又は降順で指定することが可能である（Ｍａｒｃｈ及びＣｈｅｃｋｅｒｂｏａｒｄ）。
・プログラマブルＭＢＩＳＴコントローラの望ましい形態は、ベース・アドレスについて、「行を先に／列を先に」方式でアドレス指定を実行することが可能である。これは、Ｃｏｌ＿Ｍａｒｃｈ１（Ｍａｒｃｈテスト・アルゴリズムのタイプ）又は「行を先に／列を先に」アルゴリズムのために望ましくは必要なアドレス指定スキームを示す。Ｓｌｉｄｉｎｇ  Ｄｉａｇｏｎａｌアルゴリズムの場合、ベース・アドレスは、セル・アレイ内の斜め線に沿って特定のパターンが書き込まれ、その後、メモリ全体が読み出されるように、設定されることが望ましい。
・現時点では、ほとんどのＭａｒｃｈアルゴリズムにおいて、（ｒｗｒ）Ｂのようなステップが存在すれば必ず、そのステップは、同じベース・アドレス（Ｂ）において操作が行われることを示す。しかしながら、プログラマブル・コントローラの望ましい形態は、ベース・アドレスの近隣のアドレスにおける読み出し又は書き込み操作をサポートする。例えば、（ｒＢｗＢｒＢ＋１）又は（ｒＢｗＢｒＢ−１）は、それぞれ、ベース・アドレスをインクリメント又はデクリメントした後に得られたメモリ・アドレスから第２の読み出し操作が行われることを示す。
・ユーザ又は一形態におけるコントローラは、テストが適用されるべき範囲の最大アドレスと最小アドレスとを設定できることが望ましい。これにより、テスト適用時のメモリ・アドレスの範囲を柔軟に選択することが可能になる。
・望ましい形態のプログラマブルＭＢＩＳＴコントローラは、ベース・アドレスの値に対して相対的にローカル・アドレスを設定することが可能である。これは、ベース・アドレス、又はベース・アドレスを除く残り全てのアドレス（ＧＡＬＰＡＴ及びＷａｌｋｉｎｇ  ０／１）と等しいことが可能である。
・一形態におけるプログラマブルＭＢＩＳＴコントローラは更に、ベース・アドレスから必要な全ての方向に特定のオフセット（１、２、４、・・・）でローカル・アドレスを設定できることが望ましい。これは、Ｂｕｔｔｅｒｆｌｙアルゴリズムに対応する。
・一形態におけるプログラマブルＭＢＩＳＴコントローラは更に、ベース・アドレスに対してハミング距離が１である特定のオフセットでローカル・アドレスを設定できることが望ましい（これは、アドレス・デコーダのＰＭＯＳ開放故障の検出に対応する）。
・一形態におけるプログラマブルＭＢＩＳＴコントローラは更に、「行を先に」、「列を先に」、「行のみ」、及び「列のみ」の方式の何れかにローカル・アドレス方向を変更できることが望ましい。例示的なデフォルトのアプローチは、ローカル・アドレスを「行を先に」方式に変更することである。
【００６３】
２．読み出し／書き込み：プログラマブルＭＢＩＳＴコントローラの一形態は、命令が読み出し命令か書き込み命令かを区別できることが望ましい。
３．データ／データ反転：データが特定のメモリ・アドレスに書き込まれる前に、データが反転されるべきであるとして書き込まれるかどうかを、プログラマブルＭＢＩＳＴコントローラに通知することが望ましい。これは、メモリの初期設定時にデータ・バックグラウンドかデータ・バックグラウンドの反転かを選択する際にも役立つ。
【００６４】
４．アルゴリズム内の異なるループのサポート。一般に、ほとんどのＭａｒｃｈアルゴリズム及びＣｈｅｃｋｅｒｂｏａｒｄアルゴリズムは、２つのループを有する。即ち、それらは、データ・バックグラウンドを指定するループと、全てのメモリ・ロケーションを通るループとである。これに対し、アドレス・デコーダＰＭＯＳ開放やＧＡＬＰＡＴ／Ｗａｌｋｉｎｇ  ０／１のような、一部のより複雑なアルゴリズムは、３つのループを有する。追加ループは、全てのリファレンス・ベース・アドレスに対してローカル・アドレスがどのように変更されるかの指定を可能にする。データ・バックグラウンドを意味する第１のループは、アンロールされることが可能である。しかしながら、プログラマブルＭＢＩＳＴコントローラは、ベース・アドレス及びローカル・アドレスをループ・スルーする操作をサポートすることが望ましい。
【００６５】
５．一部のアルゴリズムは、より高レベルのルーピングによる、より複雑なルーピング動作を必要とする。ＭＢＩＳＴコントローラの望ましい一形態は、例えば、並行レベルのルーピングまでの、汎用ルーピング機能をサポートする。この例における各レベルのルーピングは、アドレス・レジスタを利用する。
【００６６】
各アドレス・ルーピング・アクティビティは、一形態では、ループのアドレス・レジスタが以下の方法で修正されることを可能にする。
ａ．「列を先に」又は「行を先に」方式でのインクリメント又はデクリメント。
ｂ．単一列又は単一行に沿ってのインクリメント又はデクリメント。
ｃ．最初の斜め線に沿ってのインクリメント又はデクリメント。
【００６７】
上記の絶対アドレス操作の代替として、幾つかの相対アドレス生成スキームが用いられることが可能である。これらは、例えば、アドレス・レジスタを用いて、中間の（ｗａｌｋｉｎｇ  １）値を保持することが可能である。この値は、その後、外包入れ子レベル又はレベル０のアドレス・レジスタに適用される。この形式のアドレス計算は、一実施形態では、外側入れ子レベル（レベル０）に対してサポートされない。以下の相対的な変更子がサポートされることが望ましい。
ａ．ＸＯＲ。ｗａｌｋｉｎｇ  １と、選択されたアドレス・レジスタとの排他的論理和から、選択されたアドレス・レジスタからハミング距離１だけ離れている全てのアドレスを含むアドレス・シーケンスが生成される。
ｂ．オフセット。ｗａｌｋｉｎｇ  １は、選択されたアドレス・レジスタからのオフセットとして用いられることが可能である。
【００６８】
６．メモリ・アクセス・アドレス計算。ループは、１つ又は複数のメモリ・アクセス操作を含むことが可能である。これらの操作は、テストされているメモリに対する個別の読み出しアクセス又は書き込みアクセスを実行することが可能である。各アクセスは、その操作にどのレベルのループのアドレス・レジスタが用いられるべきかを指定できることが望ましい。一例では、外側ループ（入れ子レベル０）内の操作は、アドレス・レジスタ０を用いることだけが可能である。しかしながら、それらは、内側ループにおいては（例えば、入れ子レベル３では）、この例では、レベル０、１、２、又は３のアドレス・レジスタを用いることが可能である。
【００６９】
各メモリ・アクセス操作は、使用するアドレス・レジスタを指定できることが望ましいこととともに、一形態では、使用される前のアドレス・レジスタ値に対して行われるべき修正の限られたセットを指定することも可能である。このアプローチの例として、以下の修正がある。
ａ．未修正アドレス。
ｂ．アドレスの反転
ｃ．アドレス＋インデックス・オフセット
ｄ．アドレス−インデックス・オフセット
７．メモリ・アドレス範囲。ループは、望ましくはメモリ・アドレス範囲全体に対して動作可能であるか、先頭アドレス値及び最終アドレス値を指定することなどによって、アドレス空間のある範囲に限定されることが可能である。メモリ・テスト・アセンブリ・プロセスは、望ましくは、テスト・アルゴリズムを評価し、指定されたアドレス範囲の妥当性を検証する。例えば、開始アドレス及びアドレス操作定義に対して最終アドレスに到達することが可能であることを確認する評価である。
【００７０】
８．メモリ・アクセス・操作タイプ。選択されたメモリ・アドレスでの従来型の読み出し操作及び書き込み操作においては、プログラマブルＭＢＩＳＴコントローラは、一形態では、比較なしの読み出し操作を実行することが可能である。例えば、比較なしの読み出し操作では、ＭＩＳＲ（多入力シフト・レジスタ）圧縮が選択されていない限り、メモリから読み出した値を無視することが可能である。この場合、値はＭＩＳＲによって取り込まれる。また、メモリから読み出された値で内部データ・レジスタを更新することも可能である。
【００７１】
９．データ反転。各メモリ・アクセス操作は、一形態では、書き込まれるか読み出されるデータがベース・データ値の反転形式か非反転形式かを指定できることが望ましい。
用途がより限定されたプログラマブルＭＢＩＳＴコントローラは、前述の機能の全てを備えていなくてもよい。即ち、そのような機能の１つ又は複数のサブセットが、必要に応じてプログラマブルＭＢＩＳＴコントローラに含まれることが可能である。
３．１  命令の設計
様々な命令の機能性が、２つのカテゴリ又は命令タイプ、即ち、アルゴリズム命令と構成命令とにグループ分けされることが望ましい。アルゴリズム命令は、望ましくは、アドレス空間において実行されることが必要な操作を指定することに直接関連する命令である。アルゴリズム命令は、テスト・アルゴリズム・ステップの実行時に実行されるべきメモリ・アクセス操作に対応する。一形態では、アルゴリズム命令は、使用されるべきアドレス・レジスタ及び変更子と、データ・パターン変更子と、メモリ・アクセス操作とを選択する。一方、構成命令は、望ましくは、テスト・アルゴリズムの実行時に各種操作の制御を指定する命令である。プログラマブルＭＢＩＳＴコントローラの選択された第１の実施形態における構成命令は、望ましくは、後続の命令群のデコード方法と、アルゴリズムに必要なスキームに対応してアドレスがどのように変化するか、と、異なる操作間でデータがどのように変更されるか、とを、コントローラが知るために適用されるアルゴリズムを指定する。構成命令は更に、命令デコーダが、命令をどのようにロードされ、適切な制御信号をどのように生成するかを設定する。構成命令は、一形態では、実行されようとするテスト・アルゴリズム・ステップ全体にわたってプログラマブルＭＢＩＳＴコントローラ及び他のアクティビティの構成を修正するために、デコードされ、実行される。命令を２つの別々のセットに区別することは、命令をデコードすることと、特に有利な実施形態において命令を実動作速度でフェッチ及びデコードできるようにすることとに関連するタイミング問題に柔軟に対処することを可能にする。命令をこれら２つのカテゴリに分離することは、望ましい形態のプログラマブルＭＢＩＳＴコントローラが、構成命令を遭遇時に処理することと、アルゴリズム命令を、アルゴリズム・ステップ全体が完了するまでバッファリングすることとを可能にする。テスト・アルゴリズム・ステップ全体が遭遇されると、例示的プログラマブルＭＢＩＳＴコントローラがメモリ・アクセス操作及びループの実行を開始する。一例では、構成命令は、プログラマブルＭＢＩＳＴコントローラのループ入れ子メカニズムと相互に作用して、そのメカニズムに、ループに入らせること、又はループを終了させることが可能である。
【００７２】
提案された例示的アルゴリズム命令アーキテクチャの命令ワード・サイズは、変更可能であるが、９ビットであることが望ましい（図３、３Ａの例を参照）。提案された例示的構成命令ワード・アーキテクチャの命令ワード・サイズも、変更可能であるが、９ビットであることが望ましい（表３及び４の例を参照）。特定の例では、反転を用いることが可能であるが、全ての構成命令のビット０が０に設定され、全てのアルゴリズム命令のビット０が１に設定される。
３．１．１  アルゴリズム命令
例えば、ビット［０］は、命令がアルゴリズム命令か構成命令かを指定するものとする。更に、ビット［０］が「１」であれば、命令がアルゴリズム命令であるとする。図３の例では、例示的アルゴリズム命令ワードの定義は、次のとおりである。
・ビット［０］  −  ２つのタイプの命令（アルゴリズム命令か構成命令か）を区別する。この例では、アルゴリズム命令に対応する「１」である。
・ビット［１］  −  特定のメモリ・ロケーションに対して実行されるのが読み出し操作か書き込み操作かを指定する。読み出し操作又は書き込み操作は、メモリ・ワード全体に対して適用されることが望ましい。具体例として、このビットの値「０」は、読み出し操作を示し、このビットの値「１」は、書き込み操作を示す。
・ビット［２］  −  この例では、メモリ・ロケーションから読み出されるか、メモリ・ロケーションに書き込まれるデータが、データ・バックグラウンドかデータ・バックグラウンドの反転かを示す。この例では、このビットの値「０」は、データ・バックグラウンドに対応するデータが選択されていることを示し、値「１」は、データ・バックグラウンドの反転が選択されていることを示す。
・ビット［４：３］  −  これら２つのビットは、この例では、データの書き込み又は読み出しに用いられるアドレス指定スキームを示す。後述するように、この例では、関係するアドレスが２つあり、それらは、ベース・アドレス及びローカル・アドレスである。ほとんどのＭａｒｃｈアルゴリズムでは、ベース・アドレスだけが必要である。しかしながら、ＧＡＬＰＡＴ、Ｗａｌｋｉｎｇ  ０／１、Ｂｕｔｔｅｒｆｌｙ、Ｓｌｉｄｉｎｇ  ｄｉａｇｏｎａｌ、アドレス・デコーダＰＭＯＳ開放アルゴリズムなどの前述のアルゴリズムの幾つかにおいては、ローカル・アドレスも必要である。コントローラは、これらのビットの値に応じて、操作の対象がベース・アドレスかローカル・アドレスかを知る。サポートされることが可能な例示的アドレス指定スキームを以下に示す。
ａ）「１１」  −  Ｍｅａｎｓ（ｂａｓｅ＿ａｄｄｒ−１）を表す。言い換えると、ベース・アドレスの前のアドレス・ロケーションにおいて読み出し／書き込み操作が行われる。これは、（ＲＢ，ＷＢ，ＲＢ−１）のような特定のＭａｒｃｈアルゴリズム・ステップをサポートするために必要であることが多い。
ｂ）「１０」  −  （ｂａｓｅ＿ａｄｄｒ＋１）を意味する。上記ケースと同様に、ベース・アドレスの次のアドレス・ロケーションにおいて読み出し／書き込み操作が行われる。これは、（ＲＢ，ＷＢ，ＲＢ＋１）のような特定のＭａｒｃｈアルゴリズム・ステップをサポートするために必要である。
ｃ）「０１」  −  ｌｏｃａｌ＿ａｄｄｒを意味する。言い換えると、対応する読み出し／書き込み操作が、ローカル・アドレスにおいて行われる。
ｄ）「００」  −  ｂａｓｅ＿ａｄｄｒを意味する。言い換えると、対応する読み出し／書き込み操作が、ベース・アドレスにおいて行われる。
・ビット［８：５］  −  これら４ビットは、この例では、ループ境界を指定することに役立つ。前述のように、これまでに説明したアルゴリズムの幾つかは、２タイプのループ構造、即ち、ベース・ループ及びローカル・ループのサポートを必要とする。ベース・ループは、プライマリ・ループを意味し、この例では、全てのアルゴリズムにとってのリファレンス・ループでもある。これに対し、ローカル・ループは、特定のベース・アドレスに対するローカル・アドレス指定スキームをループ・スルーすることを可能にする。例えば、Ｍａｒｃｈアルゴリズムの場合は、ベース・ループが唯一のループであり、ローカル・ループは存在しない。これに対し、ＧＡＬＰＡＴの場合は、全てのベース・アドレスに対し、ローカル・アドレスが、ベース・アドレス・ロケーションを除くアドレス空間全体をループ・スルーする。この例では４ビットが必要なので、ワン・ホット・エンコーディングが用いられることが望ましい。例示的な個々のビット割り当ては、次のとおりである。
ビット［５］  −  ローカル・ループの開始（ＢＬＬ）。
ビット［６］  −  ローカル・ループの終了（ＥＬＬ）。
ビット［７］  −  ベース・ループの開始（ＢＢＬ）。
ビット［８］  −  ベース・ループの終了（ＥＢＬ）。
【００７３】
上記のビット割り当てを仮定すると、前述のアルゴリズムに必要な各種組合せは、次のようになる。
ａ）「００００」  −  どのループ境界でもない中間操作（ＩＯＰ）を示す。
ｂ）「０１００」  −  ベース・ループの開始（ＢＢＬ）を示す。
ｃ）「１０００」  −  ベース・ループの終了（ＥＢＬ）を示す。
ｄ）「０００１」  −  ローカル・ループの開始（ＢＬＬ）を示す。
ｅ）「００１０」  −  ローカル・ループの終了（ＥＬＬ）を示す。
ｆ）「１１００」  −  ベース・ループの開始及び終了（ＢＢＬ−ＥＢＬ）を示す。命令内のこのタイプのループ構造は、単一操作ステップを示す。
ｇ）「００１１」  −  ローカル・ループの開始及び終了（ＢＬＬ−ＥＬＬ）を示す。これも、ローカル・ループ内の単一操作ステップを示す。
ｈ）「１０１０」  −  ベース・ループ及びローカル・ループの両方の終了（ＥＬＬ−ＥＢＬ）を示す。
ｉ）「１０１１」  −  ローカル・ループの開始及び終了、並びにベース・ループの終了（ＢＬＬ−ＥＬＬ−ＥＢＬ）を示す。
【００７４】
図３Ａの代替例では、例示的アルゴリズム命令ワードの定義は、次のとおりである。
ビット［０］は、１であり、これをアルゴリズム命令として指定する。
ビット［２］及び［１］は、この命令が実行される対象である各アドレスにおいて実行されるメモリ・アクセス操作のタイプを選択する。この例でのオプションは、読み出し、値を比較しない読み出し、書き込み、又はＮＯＰ（操作なし）である。
【００７５】
ビット［３］は、現在構成されているデータ・パターン又はその反転が、命令のメモリ・アクセス操作に用いられるかどうかを決定する。
ビット［４］及び［５］は、アドレスが、テストされているメモリに適用される前に、どのように修正されるかを制御する。この例では、アドレスは、そのまま用いられるか、反転されるか、インデックス・オフセットを与えられることが可能である。インデックス・レジスタの値は、例えば、構成命令「制御／ロード／インデックス」を用いてロードされることが可能である。
【００７６】
ビット［６］及び［７］は、この命令によって用いられるべきアドレス・レジスタを選択する。この例では、アドレス・レジスタが、テスト・アルゴリズム・ステップ内のループ入れ子レベルに対応するため、現在アクティブでない現在のループ深さを超えるアドレス・レジスタを選択すると、定義されていない挙動が起こる。
【００７７】
この例では、現在のビット［８］は常に０であり、このビットを用いることによる、この例示的アルゴリズム命令ワードの拡張に使用できる状態で残されている。
他のアルゴリズム命令ワードの例については、後述する。
３．１．２  構成命令
これらの第１の実施形態では、アルゴリズムのクラスと、アドレス指定スキームと、用いられるべきデータ・バックグラウンドと、特定のプログラム制御定義とを示すために、例示的な構成命令が用いられている。構成命令の例を表３及び４に示す。代替例について以下に示す。
【００７８】
この特定の例では、構成命令に対応して、ビット［０］が「０」であるとする。構成命令は、この例では、各フィールドが前のフィールドにおける定義に応じて再使用されることが可能であるように、階層的に設計されることが望ましい。構成命令は、テスト・ステップの操作が終わるたびに変える必要がないので、より急速に発生するアルゴリズム命令と比較して、通常はデコードとデコードとの間により多くの空き時間があるため、これらの命令をデコードするのに十分な時間がある。一例示的構成命令は、ＭＳＢ（最上位ビット）から、次のようにエンコードされる。
・ビット［８］  −  現在使用されていない。今後の拡張のために組み込まれることが可能。
・ビット［７：６］  −  これらのビットは、アルゴリズム選択、プログラム制御、アドレス構成、データ構成、又は他の問題のような、様々なタイプの構成命令を選択するために用いられることが望ましい。
・ビット［５：４］  −  これら２つのビットは、様々な構成命令を更にサブカテゴリに分けるために用いられることが望ましい。例えば、アドレス構成命令は、ベース・アドレス方向と、ベース・アドレスのローディング（テストが適用されることが可能な最大及び最小アドレス値をロードする機能）と、ベース・アドレスを基準とするローカル・アドレス方向と、ローカル・アドレスのオフセット・ビットとを指定する、４つのカテゴリに更に分けられることが可能である。
・ビット［３：１］  −  これら３つのビットは、構成命令の各サブカテゴリの機能を更に定義することが望ましい。例えば、ベース・アドレス方向は、７つのグループ、即ち、インクリメントと、デクリメントと、斜めと、行のみと、列のみと、行アドレス指定と、列アドレス指定とに分類されることが可能である。
・ビット［０］  −  これは、命令が構成管理に関連する場合には、「０」に設定される。
【００７９】
例示的な構成命令の詳細と、各命令に関連付けられたオペコードとを、以下の表３及び表４に示す。各フィールドは、命令のタイプに応じて異なる意味を有することに注意されたい。例えば、ビット［７：５］が「０００」の場合、表３の例では、次の４ビット［４：１］は、プログラマブルＭＢＩＳＴコントローラがサポートするアルゴリズムの各種クラスを定義するために用いられることが可能である。
【００８０】
【表３】
2008521159.tif 000009
【００８１】
構成ワードの別の具体例を、以下の表４に示す。
【００８２】
【表４−１】
2008521159.tif 000010
【００８３】
【表４−２】
2008521159.tif 000011
【００８４】
以下では、表４の構成の詳細を説明する。この例のアプローチは、１つの好適な実施形態に過ぎないので、これらの詳細は修正可能である。
１．制御／プログラム／ＮＯＰ。この命令は、何も行わず、プログラマブルＭＢＩＳＴコントローラは変更されないままである。
【００８５】
２．制御／プログラム／一時停止。現在のアルゴリズムを一時停止し、外部で生成された再開信号がアサートされるのを待つ。この命令は、例えば、ＡＴＥの制御下でアルゴリズム実行を一時停止させる保持テストを実行するために用いられることが可能である。
【００８６】
３．制御／プログラム／停止。アルゴリズムの最後の命令。これが遭遇されると、プログラマブルＭＢＩＳＴコントローラは、アルゴリズム全体が認識及び実行されたことを知る。１つのアプローチでは、プログラマブルＭＢＩＳＴコントローラは、その後、非アクティブ状態になるが、保留中の診断出力があれば収集され続けることが可能であることが望ましい。
【００８７】
４．制御／プログラム／予約済み。予約されている命令ワード。
５．制御／プログラム／故障フラグをリセット。プログラマブルＭＢＩＳＴコントローラに、故障フラグの状態をリセットさせる。診断が非アクティブの場合、この例の故障フラグは、最初の故障の直後にアクティブ状態に固着するか、故障があるたびにアクティブになり、その後、テストの最後にアサートされて、故障が遭遇されたことを示す。この命令は、故障状態に関連付けられた記憶の下位ビットをリセットする。比較器テストが実行された場合は、故障フラグがアサートされ、その後、故障状態がリセットされる。
【００８８】
６．制御／プログラム／状態をリセット。データ・バックグラウンド、アドレス、アドレス境界、アドレス・インデックス、診断イネーブル・レジスタ、及びリスタート・イネーブル・レジスタを含む各種レジスタをリセットする。この命令の後に「ＮＯＰ」命令が、望ましくは挿入されなければならないことに注意されたい。これは、「リセット状態」の後に続く命令は実行されないためである。この命令は、例えば、テスト・プログラム内の２つのテスト・アルゴリズムの間に状態をリセットするために用いられることが可能である。
【００８９】
７．制御／プログラム／マスクをリセット。マスクを設定しない。
８．制御／プログラム／アルゴリズム開始。アルゴリズムの開始点を指定する。この命令は、テストされているメモリのアドレス境界をリセットする。
【００９０】
９．制御／ループ。この命令は、前のメモリ・アクセス操作が実行された後に、現在のアドレス・シーケンスが完了していない場合に、「ループ・オフセット」フィールドを用いて、コントローラがジャンプすべき先の操作を指定する。この命令は、アルゴリズム・ステップ内のループの終点を形成する。例示的なアルゴリズム・ルーピングについては、図３Ａとの関連で既に説明されている。
【００９１】
プログラマブルＭＢＩＳＴコントローラは、生成時には、選択されたメモリ制御信号がマスクされることを可能にするように構成されることが可能である。これらの、制御信号をマスクするアクティビティは、例えば、最大で７つのセットに編成されることが可能である。デフォルトの動作は、この例では、どのセットもアクティブにならない。以下の命令は、マスキング・セットのうちの１つがアクティブ化されることを可能にする。この例では、あるマスキング・セットがアクティブ化されると、メモリ・アクセス操作時にコントローラが行う必要がある可能性がある、どの制御信号のアサートにもかかわらず、そのセットにある全ての制御信号がマスクされ、非アクティブのままになる。制御信号のマスキングは、書き込みイネーブル・マスキングとは独立に動作することが望ましい。書き込みイネーブル信号がマスキング・セット内に配置された場合は、データ／書き込み／マスク状態に関係なく、マスキング・セットがアクティブ化されたときに書き込みイネーブル信号がマスクされる。
【００９２】
１０．制御／マスク／セット０。プログラマブルＭＢＩＳＴコントローラに、セット０に関連付けられた制御信号をマスクさせる。
１１．制御／マスク／セット１。上記の制御／マスク／セット０と同様に、プログラマブルＭＢＩＳＴコントローラに、セット１に関連付けられた制御信号をマスクさせる。
【００９３】
１２．制御／マスク／セット２。上記の制御／マスク／セット０と同様に、プログラマブルＭＢＩＳＴコントローラに、セット２に関連付けられた制御信号をマスクさせる。
１３．制御／マスク／セット３。上記の制御／マスク／セット０と同様に、プログラマブルＭＢＩＳＴコントローラに、セット３に関連付けられた制御信号をマスクさせる。
【００９４】
１４．制御／マスク／セット４。上記の制御／マスク／セット０と同様に、プログラマブルＭＢＩＳＴコントローラに、セット４に関連付けられた制御信号をマスクさせる。
１５．制御／マスク／セット５。上記の制御／マスク／セット０と同様に、プログラマブルＭＢＩＳＴコントローラに、セット５に関連付けられた制御信号をマスクさせる。
【００９５】
１６．制御／マスク／セット６。上記の制御／マスク／セット０と同様に、プログラマブルＭＢＩＳＴコントローラに、セット６に関連付けられた制御信号をマスクさせる。
１７．制御／マスク／なし。前の７個の構成命令の何れかを用いて構成された、制御信号のマスキングを全て除去する。プログラマブルＭＢＩＳＴコントローラを、どの制御信号セットもマスクされていないデフォルト状態（即ち、全てがプログラマブルＭＢＩＳＴコントローラによってアクティブに制御されている状態）に戻す。
【００９６】
１８．制御／ロード／開始アドレス。この例では、命令メモリにおいて、開始アドレス・レジスタに書き込まれる最大２７ビットのデータを形成するために読み込まれる３ワードが後に続く、複数ワードのコマンド。これらの３ワードは、ビッグ・エンディアン順序で並べられることが望ましいので、この命令の直後のワードはアドレスの最上位ワードであり、その後に中間ワードが続き、最後に最下位ワードが続く。プログラマブルＭＢＩＳＴコントローラによって実行される正規のアドレス・ループは、このアドレス値から開始される。実行される実際のアドレス・ループは、ループの開始前にアドレスの修正を引き起こす場合がある。
【００９７】
１９．制御／ロード／終了アドレス。この例では、制御／ロード／開始アドレスと同様に、３ワードのデータが後に続く、複数ワードのコマンドである。このコマンド及び付随するデータ・ワードは、プログラマブルＭＢＩＳＴコントローラの終了アドレス値レジスタに書き込まれるデータを指定する。プログラマブルＭＢＩＳＴコントローラによって実行される全ての正規のアドレス・ループは、この例では、このアドレス値に達した後に終了する。実行される実際のアドレス・ループは、このアドレスの用いられ方を修正する場合がある。
【００９８】
２０．制御／ロード／インデックス。プログラマブルＭＢＩＳＴコントローラのオフセット・インデックス・レジスタに値をロードする、制御／ロード／開始アドレスと同様の、複数ワードのコマンドである。この値は、その後、選択されたアドレスをアルゴリズム命令内でオフセットするために用いられることが可能である。
【００９９】
２１．制御／ロード／メモリ。プログラマブルＭＢＩＳＴコントローラのメモリ番号選択レジスタへのロードを行う、複数ワードのコマンドである。この例では、このワードは、プログラマブルＭＢＩＳＴコントローラが、生成時に、複数のメモリと並行アルゴリズム・アクセスとではなく、複数のメモリを順次アルゴリズム・アクセスによってサポートするように構成されている場合のみ、使用可能である。
【０１００】
２２．制御／ロード／ポート。プログラマブルＭＢＩＳＴコントローラのポート番号選択レジスタへのロードを行う、複数ワードのコマンドである。この例では、このワードは、プログラマブルＭＢＩＳＴコントローラが、生成時に、複数のメモリをサポートするように構成されている場合のみ、使用可能である。
【０１０１】
２３．制御／ロード／ブロック。プログラマブルＭＢＩＳＴコントローラのブロック番号選択レジスタへのロードを行う、複数ワードのコマンドである。この例では、このワードは、プログラマブルＭＢＩＳＴコントローラが、生成時に、ブロック選択をサポートするように構成されている場合のみ、使用可能である。
【０１０２】
２４．制御／ロード／ページ。プログラマブルＭＢＩＳＴコントローラのページ番号選択レジスタへのロードを行う、複数ワードのコマンドである。この例では、このワードは、プログラマブルＭＢＩＳＴコントローラが、生成時に、ページ選択をサポートするように構成されている場合のみ、使用可能である。
【０１０３】
２５．制御／ロード／スライス。プログラマブルＭＢＩＳＴコントローラのスライス選択レジスタへのロードを行う、複数ワードのコマンドである。この例では、このワードは、プログラマブルＭＢＩＳＴコントローラが、生成時に、スライス選択をサポートするように構成されている場合のみ、使用可能である。
【０１０４】
２６．データ／バックグラウンド。現在のデータ値を、例示的プログラマブルＭＢＩＳＴコントローラに収容された、最大１６個の、ハード・エンコードされたデータ・バックグラウンド値のうちの１つに設定する。これらのバックグラウンド値は、この例では、プログラマブルＭＢＩＳＴコントローラの生成プロセス時に指定される。
【０１０５】
２７．データ／パターン／塗りつぶし。現在のデータ値を、全てが１の塗りつぶしパターンであるように設定する。
２８．データ／パターン／チェッカーボード。現在のデータ値を、チェッカーボードであるように設定する。これは、アドレス値とメモリ・モデル・トポロジ情報とを用いた、トポロジ・ドリブンのチェッカーボードである。
【０１０６】
２９．データ／パターン／行ストライプ。現在のデータ値を、行全体にわたるストライプであるように設定する。
３０．データ／パターン／列ストライプ。現在のデータ値を、列全体にわたるストライプであるように設定する。
【０１０７】
３１．データ／パターン／一意。現在のデータ値を、メモリ内の一定範囲で繰り返しがない、一意アドレスのデータであるように設定する。
３２．データ／書き込みマスク／書き込みマスクを選択。プログラマブルＭＢＩＳＴコントローラからメモリに送られた書き込みイネーブル信号をマスクするために用いられるべく、ハード・コードされた書き込みイネーブル・マスク値の１つを選択する、複数ワードのコマンド。これらのマスク値は、プログラマブルＭＢＩＳＴコントローラの生成時に指定されることが望ましい。書き込みイネーブル・マスキングは、この例では、制御／マスク構成命令によってアクティブ化される制御信号マスク・セットとは独立に動作する。
【０１０８】
３３．データ／書き込みマスク／書き込みマスクを設定。ユーザが任意の書き込みマスクを指定することを可能にする、複数ワードのコマンド。
テスト・アルゴリズム・ステップ内では、アドレス／ループ構成命令の１つによってループが暗に示される。このループの実際の動作は、先行する、どのアドレス／関係命令によっても修正されることが可能である。アドレス・ループの詳細については、図３Ａの上述の説明を参照されたい。この例における、以下のアドレス／ループ命令は、ループ・アドレスと他の任意のプライマリ・アドレスとの間に何も関係がないデフォルト・ケース（アドレス／関係／なし）だけが対象であり、他の何らかの関係を指定することによって、アドレス・ループ動作が修正される。これについては後で詳述する。
【０１０９】
３４．アドレス／ループ／行。ループ・アドレス・レジスタが、開始アドレス・レジスタ値で初期設定される。ループの各ステップは、まず、アドレスを行方向に動かして変更し、各行の最後まで到達したら、列方向に１ポジション移動して、行頭に戻る。終了アドレス・レジスタ値に達したら、ループが終了する。
【０１１０】
３５．アドレス／ループ／列。ループ・アドレス・レジスタが、開始アドレス・レジスタ値で初期設定される。ループの各ステップは、まず、アドレスを列方向に動かして変更し、各列の最後まで到達したら、行方向に１ポジション移動して、列頭に戻る。アドレス・レジスタが終了アドレス・レジスタ値に達したら、ループが終了する。
【０１１１】
３６．アドレス／ループ／行のみ。ループ・アドレス・レジスタが、開始アドレス・レジスタ値で初期設定される。ループの各ステップは、アドレスを行方向にのみ動かして変更し、列値は静止したままである。前述の列のみのアドレス指定と同様に、行が終了アドレス・レジスタの行値に達したら、ループが終了する。
【０１１２】
３７．アドレス／ループ／列のみ。ループ・アドレス・レジスタが、開始アドレス・レジスタ値で初期設定される。ループの各ステップは、アドレスを列方向にのみ動かして変更し、行値は静止したままである。この例では、列が終了アドレス・レジスタの列値に達したら、ループが終了する。
【０１１３】
３８．アドレス／ループ／斜め。この例では、ループ・アドレス・レジスタが、開始アドレス・レジスタ値で初期設定される。ループの各ステップは、アドレスを最初の斜め方向にのみ動かして変更する。行及び列の両方が、同じ方向に一緒に動く。アドレスが終了アドレス・レジスタのアドレス値に達すると、ループが終了する。このループ・タイプの場合は、開始アドレスからの斜めインクリメントのシーケンスによって終了アドレスに達することが必ず可能であるよう、注意しなければならない。終了アドレスに達しない場合、ループは終了しない。
【０１１４】
この後の４つの構成命令は、この例においてアドレス・ループがどのように実行されるかを変更する。このテスト・アルゴリズム・ステップの命令ストリームにおいて、これらのアドレス／関係命令は、その次のアドレス／ループ命令の動作を修正する。この例では、関係が指定された場合、それは、例示的命令のビット３（最も外側のループ・アドレス・レジスタか、直接の外包ループ・アドレス・レジスタか）によって指定される、現在のループ・アドレス・レジスタとプライマリ・レジスタとの間の関係である。
【０１１５】
３９．アドレス／関係／なし。このアドレス・ループがどの外包ループとも関係を有しないという、デフォルトのアドレス・ループ動作を復元する。
４０．アドレス／関係／オフセット。ループ・アドレス・レジスタのアクティブ部分は、実際のアドレスを形成するために、選択されたプライマリ・アドレス・レジスタのその部分からのオフセットとして用いられる。方向がインクリメントであれば、そのオフセットが加算され、そうでない場合は減算される。ループは、ループ・アドレス・レジスタのアクティブ部分をインクリメントするのではなく、ＬＳＢ（最下位ビット）からＭＳＢ（最上位ビット）まで１を移動させる。
【０１１６】
４１．アドレス／関係／ＸＯＲ。ループ・アドレス・レジスタのアクティブ部分は、実際のアドレスを形成するために、選択されたプライマリ・アドレス・レジスタとの排他的論理和をとられる。ループは、ループ・アドレス・レジスタのアクティブ部分をインクリメントするのではなく、ＬＳＢからＭＳＢまで１を移動させる。
【０１１７】
４２．アドレス／関係／同じなら反転。ループは正規の動作を行うが、ループ・アドレス・レジスタの値がプライマリ・アドレス・レジスタの値と同じ場合には、書き込み又は読み出しされるデータが反転される。
【０１１８】
４３．アドレス／関係／斜めなら反転。ループは正規の動作を行うが、ループ・アドレス・レジスタがプライマリ・アドレスに対して斜めにある場合には、書き込み又は読み出しされるデータが反転される（主としてＳｌｉｄｉｎｇ  ｄｉａｇｏｎａｌアルゴリズムに用いられる）。
【０１１９】
４４．その他／診断／イネーブル。プログラマブルＭＢＩＳＴコントローラ内で診断アクティビティをイネーブルにする。この命令がいったん遭遇されると、読み出し操作が比較ミスに遭遇したときに、プログラマブルＭＢＩＳＴコントローラが、診断故障情報のスキャン・アウトを開始する。
【０１２０】
４５．その他／診断／ディスエーブル。ＭＢＩＳＴコントローラの診断モードがディスエーブルになる。保留中の診断データがあれば、それがプログラマブルＭＢＩＳＴコントローラによって出力され続けることが可能であることが望ましい。
【０１２１】
４６．その他／診断／リスタート。複数の故障によって診断モニタがプログラマブルＭＢＩＳＴコントローラを一時停止させた場合に、現在のテスト・アルゴリズム・ステップのこの時点から、プログラマブルＭＢＩＳＴコントローラにリスタートを実行させる。アルゴリズムが実動作速度で実行されている場合は、診断モニタによってトリガされた一時停止により、実行パイプラインのフラッシュが起こるため、テスト・アルゴリズムが次の幾つかのメモリ・アクセス操作を無視する事態が起こる可能性がある。これにより、故障が見逃されるおそれがある。リスタート動作は、アルゴリズムをリスタートさせ、最大で故障の直前の時点まで戻す。
【０１２２】
４７．その他／診断／リスタートしない。診断中のリスタート動作をディスエーブルにする。
４８．その他／インタリーブ／イネーブル。インタリーブされたアルゴリズム・ステップの実行のサポートをイネーブルにする（順次的な、インタリーブされたメモリ・テストの場合）。
【０１２３】
４９．その他／インタリーブ／ディスエーブル。インタリーブされたアルゴリズム・ステップの実行のサポートをディスエーブルにする（順次的な、連続的なメモリ・テストの場合）。
【０１２４】
５０．その他／ポート・テスト／イネーブル。ポート・テストをイネーブルにする。
５１．その他／ポート・テスト／ディスエーブル。ポート・テストをディスエーブルにする。
【０１２５】
５２．その他／次／メモリ。プログラマブルＭＢＩＳＴコントローラのメモリ番号選択レジスタを、次のメモリの値に進める。
５３．その他／次／ポート。プログラマブルＭＢＩＳＴコントローラのポート番号選択レジスタを、次のポートの値に進める。
【０１２６】
５４．その他／次／ブロック。プログラマブルＭＢＩＳＴコントローラのブロック番号選択レジスタを、次のブロックの値に進める。
５５．その他／次／ページ。プログラマブルＭＢＩＳＴコントローラのページ番号選択レジスタを、次のページの値に進める。
【０１２７】
５６．その他／次／スライス。プログラマブルＭＢＩＳＴコントローラのスライス番号選択レジスタを、次のスライスの値に進める。
これらの構成命令は、性質として、即時の命令であることが望ましい。これらは、命令メモリから読み出された時点で評価される。これに対し、アルゴリズム命令は、完全なアルゴリズム・ステップが遭遇されるまでバッファリングされることが望ましい。従って、実動作速度で評価されることが望ましいアルゴリズム命令と異なり、構成命令は、実動作速度で評価されることが可能である必要がない。代表的な使用パターンは、アルゴリズム命令のシーケンスが実行される環境をセット・アップするために、アルゴリズム・ステップが幾つかの構成命令を必要とする場合である。
【０１２８】
プログラマブルＭＢＩＳＴコントローラの基本形態の具体例は、次のクラスのアルゴリズム、即ち、Ｍａｒｃｈ（Ｃｈｅｃｋｅｒｂｏａｒｄアルゴリズムを含む）、アドレス・デコーダＰＭＯＳ開放、書き込みイネーブル、Ｗａｌｋｉｎｇ、Ｇａｌｌｏｐｉｎｇ、Ｓｌｉｄｉｎｇ  ｄｉａｇｏｎａｌ、及びＢｕｔｔｅｒｆｌｙをサポートするように構成されることが可能である。更に、ポート相互作用、一意アドレス指定、その他のような、何らかのマルチポート・メモリ用アルゴリズムもサポートされることが可能である。
【０１２９】
ローカル・アドレス構成命令については、プログラマブルＭＢＩＳＴコントローラは、一例では、ベース・アドレスに対してオフセットするスキームを少なくとも２つサポートすることが望ましい。望ましい形態の第１のスキームは、次の式に従ってローカル・アドレスを生成する。
ｌｏｃａｌ＿ａｄｄｒｅｓｓ＝ｂａｓｅ＿ａｄｄｒｅｓｓ  ＸＯＲ  （１＜＜ｉ）、ただし、０≦ｉ＜ｎ（アドレス・バス・サイズ）
第２のスキームでは、ローカル・アドレスが、ベース・アドレスを２ｎずつインクリメント又はデクリメントすることによって生成されることが望ましい。第１のスキームは、アドレス・デコーダ開放故障を検出するアルゴリズムをサポートする。第２のスキームは、Ｂｕｔｔｅｒｆｌｙアルゴリズムをサポートする。
【０１３０】
同様に、データ構成命令は、一例では、データ・バックグラウンドを更新するスキームを２つ含むことが望ましい。第１のスキームは、可能な（ｌｏｇ２ｗ＋１）個のバックグラウンドから次のバックグラウンドを選択する（ｗはメモリ・ワード・サイズ）。第２のスキームの一部として、データ・バックグラウンドは、１ビットだけシフトとされ、２ｗ−１から始まる。
【０１３１】
前述の命令（図３及び表３のアルゴリズム命令及び構成命令）は更に、それらの長さに関して、即ち、単一ワード命令と複数ワード命令とに分類されることが可能である。この例では、最大アドレス及び最小アドレスをロードすることに対応して、２つの複数ワード命令（「最大アドレスをロード」及び「最小アドレスをロード」）だけがあることが望ましい。このアプローチは、ユーザがアルゴリズムを適用する範囲を指定することを可能にする。どの時点においても、最大アドレス又は最小アドレスの一方だけを指定することが可能である。ロード命令ワードは、常にアドレス・ロケーションが後に続くことが望ましく、従って、このケースでは、他の何らかのアルゴリズム又は構成命令と混同されることがない。
【０１３２】
前述の例示的プログラマブルＭＢＩＳＴコントローラ・アーキテクチャは、拡張可能であるが、アルゴリズム・ステップ当たり最大４レベルの入れ子ループと、全部で８つのメモリ・アクセス操作とが、これらのアルゴリズム・ステップ・ループにおいて適用されることを可能にする。シンプルなＭａｒｃｈアルゴリズムは、アドレス空間と最大３つのメモリ操作ＲＷＲとに対して単一ループのみを用いる。より複雑なアルゴリズムは、ループ入れ子と、ステップ操作のフル・セットとを利用することが可能である。
【０１３３】
例えば、次のシンプルなｍａｒｃｈ２アルゴリズムを考える。
【０１３４】
【数６】
2008521159.tif 000012
【０１３５】
これは、以下の命令シーケンスを用いて表されることが可能である。
【０１３６】
【数７】
2008521159.tif 000013
【０１３７】
３．２．１  入れ子ループ
前述の例は、単一ループのみを示している。次に、入れ子ループを必要とするアルゴリズムを考える。例えば、ＧＡＬＰＡＴアルゴリズムである。
【０１３８】
【数８】
2008521159.tif 000014
【０１３９】
このアルゴリズムでは、メモリが初期設定された後、ベース・セルがメモリ上を動かされ、各ベース・セル・アドレスにおいて反転パターンが書き込まれ、その後、メモリ全体が再度読み出されて、（反転パターンが期待される）ベース・セル・アドレス以外の全てのアドレスにおいてそのパターンが探される。メモリ全体の妥当性が確認された後、そのパターンがベース・アドレスに再書き込みされ、アルゴリズムがベース・セル・アドレスを動かす。従って、この例示的テスト・アルゴリズムは、２レベルのループを用いるだけでなく、内側ループと外側ループとが同じ値の場合にはデータ・パターンが反転される、内側ループと外側ループとの間の関係も用いる。このアルゴリズムは、以下の、外側ループが明示的に展開される命令シーケンスを用いて表されることが可能である。
【０１４０】
【数９】
2008521159.tif 000015
【０１４１】
この例では、内側ループにおいて、ループ・アドレスとプライマリ・アドレスとが同じ場合に反転データが使用されるようにするために、アドレス構成命令が用いられているのがわかる。また、そのループは、全てのアドレスが使用されるまで、メモリ・アクセス操作１を繰り返す。
３．２．２  より複雑なループ関係
次に、アドレス・デコーダのＰＭＯＳ開放を検出するアルゴリズムのような、より複雑なアルゴリズムを考える。これは、この例では２レベルのループを用い、内側ループと外側ループとの間の複雑な関係を用いて、ハミング距離１の範囲にある全てのアドレスにアクセスする。
【０１４２】
【数１０】
2008521159.tif 000016
【０１４３】
このアルゴリズムは、外側ループの内側でローカル・ループを使用することを示す。内側ループは、外側ループ・アドレス・レジスタの値を用い、外側ループ内のアドレスからハミング距離１にあるアドレスに対してループする。ループ制御構成コマンドは、内側ループの最後のアドレスに達するまで、各ループ・アドレスにおける書き込み及び読み出しの操作を、ループに実行させる。外側ループは、列インクリメント順序で全てのアドレスをトラバースする。
４．第１の実施形態の例示的ハードウェア設計
例示的プログラマブル・メモリＢＩＳＴコントローラの第１の実施形態の基本的なハードウェアを、図４に示す。この実施形態は、前述の図３の形式のアルゴリズム命令ワードと、前述の表３の形式の構成ワードとの使用に、特に適用可能である。この基本実施形態では省略されている他のブロックもあり、それらは、追加機能（診断、ＲＯＭ  ＢＩＳＴ用ＭＩＳＲ、ビルトイン自己修復解析、その他）を包含する場合には含まれることが可能であることを理解されたい。本質的には、これらの省略されたブロックの機能性は不変のままであって、コントローラを本明細書に記載のプログラマブルＭＢＩＳＴコントローラに変更しても影響はない。プログラマブルＭＢＩＳＴコントローラ・ジェネレータの基本アーキテクチャは拡張されるので、これらの他のブロック及び機能の幾つかが追加されることが可能である。
【０１４４】
これらの第１の実施形態による例示的プログラマブル・メモリＢＩＳＴコントローラ１００の全体アーキテクチャを、図４に示す。テストされるメモリ（ｍｅｍｏｒｙ  ｕｎｄｅｒ  ｔｅｓｔ、ＭＵＴ）は、図４では、１０１で示されている。以下のサブセクションでは、この例示的コントローラの各ブロックについて説明する。各構成要素は離散的である必要はなく、必要に応じて他の構成要素と結合されることが可能であることを理解されたい。また、他のハードウェア実装を用いることも可能である。
４．１  命令メモリ
プログラマブルＭＢＩＳＴコントローラ１００の一例示的形態では、９ビットの命令ワードを記憶するためにレジスタが用いられる。これらの命令は、アルゴリズム・ステップ、並びにデータ及びアドレスの各種構成を記述するために用いられる。更に、これらの命令は、制御信号の指定も行う。アルゴリズムの命令の数によっては、アルゴリズム全体がチップに格納されてから実行されることが可能である。別のシナリオでは、アルゴリズムに対応する命令群が、ＡＴＥ（自動テスト装置）（Ａｕｔｏｍａｔｉｃ  Ｔｅｓｔ  Ｅｑｕｉｐｍｅｎｔ）に待機することが可能である。そのようなケースでは、最初の命令群（例えば、第１のペアの命令）が実行されているときに、次の命令群（例えば、第２のペアの命令）がＡＴＥからチップにアップロードされることが可能である。これは、チップの必要メモリが少なくてよいこととともに、アルゴリズムが、望ましくは、メモリの動作速度で実行されることを可能にする。命令メモリ１０２は、ユーザの要求に応じて、チップとＡＴＥとの間に分散されることが可能である。この例のＭＢＩＳＴコントローラ・ハードウェアの残りの部分は、テストされるメモリ（例えば、ＭＵＴ  １０１）回路を含む集積回路チップに含まれる。命令をチップにロードするために、ＪＴＡＧコントローラが利用可能である。
４．２  命令デコーダ
プログラマブル・コントローラ１００は、メモリの動作速度で実行可能であることが望ましい。非常に高い速度での実行が可能であるアーキテクチャを推進するために、命令デコーダ１０８の望ましい一形態は、３つのサブデコーダ、即ち、プリデコーダ１１０と、アルゴリズム命令デコーダ１１２と、構成命令デコーダ１１４と（図５）を含むか、これらで構成される。
・例示的プリデコーダ１１０は、命令がアルゴリズム命令か構成命令かを判別する。これは、この例では、命令ワードのＬＳＢ（最下位ビット）に基づく。更に、プリデコーダは、望ましくは、命令メモリにある命令群のループ境界をデコードすることにより、ベース・ループの単一アルゴリズム・ステップを、入れ子ローカル・ループ１２２に関連する全ての操作とともに、ベース・ループ・バッファ１２０にロードすることを支援する。
・アルゴリズム命令デコーダは、命令が、テストされるメモリに対して実際に実行される必要がある操作に関連するとして分類された場合（例えば、アルゴリズム命令として分類された場合）のみ、アクティブ化される。
・構成命令デコーダは、命令が、後続のアルゴリズム・ステップに関する構成を定義することに関連付けられているとして分類された場合（例えば、構成構築として分類された場合）のみ、アクティブ化される。
【０１４５】
例示的アルゴリズム及び構成命令の詳細は、既に説明されている。アルゴリズム命令は、アルゴリズム・ステップごとに変更されるが、構成命令は、アルゴリズム・ステップが終わるごとに変更されてもされなくてもよいことに注意されたい。言い換えると、構成命令のデコードは、場合によっては、時間に対してさほどクリティカルでなくてもよく、複数のクロック・サイクルにわたってデコードされてもよい。デコーダを、独立したサブモジュールに分割することは、アルゴリズム命令のデコードと構成命令のデコードとを並行して行うことを可能にする。図５は、命令デコーダの例示的形態のブロックレベルのモジュールを示す。
【０１４６】
図５の実施形態では、ステップ・コントローラ１３０（図４）は、命令デコーダにマージされることが可能である。図５に示されるように（この構成に限定されないが）、ベース・ループ命令及びローカル・ループ命令のペアを記憶するために、２つのバッファ・ペア（ｂｕｆ０及びｂｕｆ１）が導入されている。この例では、各バッファは、ベース・ループ・バッファ１２０とローカル・ループ・バッファ１２２とを有する。テスト・パターンのテスト・ステップは、２つのバッファ・ペアに交互にロードされることが望ましい。ベース・ループは、この例では、全てのベース・アドレスに対して実行される操作のシーケンスを示し、ローカル・ループは、全てのローカル・アドレスに対して実行される操作のシーケンスである。例えば、ほとんどのＭａｒｃｈアルゴリズムは、ローカル・ループを必要としない。これに対し、（ｗ，（ｒ，ｒ），ｗ）で表されるＧＡＬＰＡＴステップの場合は、ベース・ループ内の書き込み操作のペアの間に、２つの読み出し操作を有するローカル・ループがある。前述のセクション２で挙げられたアルゴリズムの場合（前述のセクション２．１．３．５における一部のケースを除く）、ローカル・ループは、常にベース・ループ内の入れ子であることが望ましい。ローカル・アドレスは、それらのアルゴリズムに記述された特定のスキームに従って、各ベース・アドレスについて導出される。
【０１４７】
バッファ１２０、１２２のサイズは、様々であってよいが、面積オーバヘッドを最小にするために４ビットと仮定される。アルゴリズムのステップを実行する場合、ＭＢＩＳＴコントローラは、読み出し操作を行うか書き込み操作を行うか、と、特定のメモリ・ロケーションにデータを書き込むか、データの反転を書き込むか、と、読み出し操作又は書き込み操作を実行する場所（即ち、ベース・アドレス・ロケーション、ローカル・アドレス・ロケーション、或いは、前又は次のベース・アドレス・ロケーションであるロケーション（例えば、ｂａｓｅ＋１又はｂａｓｅ−１））を指定するアドレス指定スキームと、を知る必要がある。前述のように、上記の必要情報は、アルゴリズム命令のわずか４ビットにエンコードされることが可能である。ループ境界を示す残りの４ビットは、どのセットの命令がベース・ループ・バッファ又はローカル・ループ・バッファにロードされなければならないかに関する情報を提供するために、プリデコーダ１１０によってデコードされることが望ましい。１つのステップにおける操作の数は、かなり限られていて、一般に、ベース・ループ・バッファ１２０用の８ワードと、ローカル・ループ・バッファ１２２用の４ワードとは、プログラマブル・コントローラの例示的な基本形態によってサポートされるアルゴリズムを実行するのに十分である。ワード・サイズを４ビットとすると、全部で９６個のレジスタが必要である。更に、バッファの数及びバッファ・サイズはかなり小さいので、これらの命令のデコード時間は、命令メモリから命令を読み出す時間に比べて非常に短い。
【０１４８】
ある操作から別の操作への迅速な切り替えを可能にするために、図５の例では、２つのバッファ・ペアのセットが用いられることが望ましい。これにより、１つのステップは、前のステップが終了した後、ただちに実行されることが可能である。一方のバッファ・ペアにある命令が実行されているときに、次のアルゴリズム命令が、他方のバッファ・ペアにロードされることが可能である。ベース・ループ操作及びローカル・ループ操作の両方を有するアルゴリズムの、操作の例示的なシーケンスは、次のとおりである。
・各ベース・アドレスに対して、ベース・ループ命令が、ベース・ループ・バッファから読み出され、実行される。
・入れ子ローカル・ループがある場合、ローカル・ループ操作は、ローカル・ループ・バッファに待機する。ただちに、制御がローカル・バッファにシフトされ、ローカル・ループ操作が実行される。
・ローカル・ループ操作が完了した後、制御がベース・ループ・プログラム・カウンタに戻される。ベース・ループに後続の操作がある場合は、それが実行される。後続の操作がない場合は、ベース・ループに関する次のステップが待機しているｂｕｆ１に、制御が切り替えられる。その後、マルチプレクサ１３６がｂｕｆ１を選択し、ｂｕｆ１に対応する操作がデコードされ、実行される。
・２つの後続のベース・ループ・ステップのために一方のバッファと他方のバッファとを切り替えることによって、同じプロセスが繰り返される。操作が一方のバッファ・ペアから実行されているときに、他方のバッファ・ペアは、次のベース・ステップを、入れ子ローカル・ループ・ステップとともに、命令メモリからロードされることが可能である。
【０１４９】
命令デコーダの上述の設計は更に、メイン命令メモリ用プログラム・カウンタ（ＰＣ）１５０（図４）を非常にシンプルにする。これは、プログラム・カウンタが、逆方向にジャンプする必要がなく、常に順方向に進んでいるからである。しかしながら、プログラム・カウンタは、別のデータ・バックグラウンドが使用されたときには逆方向にジャンプしてもよい。前述の例示的設計は、診断を考慮していないこと、並びに、実動作速度診断のための「リスタート」操作のような操作をサポートするように強化されることが可能であることに注意されたい。各バッファ（ｂｕｆ０及びｂｕｆ１）は、専用のバッファ・プログラム・カウンタを有することが望ましい。バッファ・プログラム・カウンタは、望ましくは、バッファの先頭から開始し、次のロケーションまで進み、ループの最後の命令が実行されたら最初のロケーションに戻る。命令群がローカル・ループ・バッファにもロードされた場合は、待ちポインタを用いて、ローカル・ループ・バッファ内の命令の完了後に実行が再開される場所を示すために、ベース・ループ操作のロケーションを記憶することが可能である。
【０１５０】
プログラム・カウンタ（ＰＣ）は、この例では、次の状況下で１ずつインクリメントされる。即ち、命令群がバッファにロードされている状況か、バッファ内の命令が実際には実行されていない間に、構成命令がデコードされている状況か、バッファにあるアルゴリズム命令が並行して実行されている間に、アドレス更新スキームを示すフィールドがデコードされている状況である。現時点の、この例示的設計においては、ＰＣが別のロケーションにジャンプしなければならない状況は、複数のデータ・バックグラウンドを用いてアルゴリズムが実行されなければならない場合だけである。プログラム・カウンタは、データ・バックグラウンドを更新する命令が遭遇された場合に、データ・バックグラウンドの反復の開始点に戻ることが望ましい。データ・バックグラウンドの反復の開始点のＰＣの値を記憶するために、専用のレジスタを設けてもよい。このアプローチは、同じアルゴリズムを複数のデータ・バックグラウンドで実行しようとする場合の命令メモリ・サイズを減らすために有利である。
４．２．１  アドレス方向のデコード
ベース・アドレスが変化する方向は、構成命令内にエンコードされていることが望ましい。メモリがアドレス指定されるスキームは、望ましくは、１つのステップにおいては全ての操作について同じままであり、ステップ間にのみ変更される。従って、後続ステップのアドレス指定スキームは、現在のステップがまだ実行中である間に、プリデコーダによって決定されることが可能である。このことは、アドレス指定スキームをデコードする時間をより長くとることを可能にし、このアプローチでは、クリティカルなタイミング・パスの一部にならない。状態機械を用いて、各種ステップ間でのアドレス指定スキームの変更を制御することが可能である。
４．２．２  最終アドレスの計算
アルゴリズム命令デコーダ１１２は、マルチプレクサ１３６を介して、２つのバッファを切り替える。この切り替えは、この例では、ベース・ループ操作及びローカル・ループ操作の両方についての最終アドレスの計算に依存する。一般的には、最終アドレスは、最大メモリ・アドレスであるが、テストされるメモリについて任意のアドレス範囲をユーザが指定できることが望ましいので、ユーザ指定であってもよい。コントローラが実動作速度で実行されている間は、（大きな面積オーバヘッドをこうむることなく）１クロック・サイクル以内に、現在のアドレスと、意図された最大アドレスとを比較して決定を下すことは、ほとんど不可能である。ＢＩＳＴ動作のスロー・ダウンを避けるために、アルゴリズム命令デコーダと、最終アドレスを示す信号を発生させるロジックとの間に、２つ（以上）のパイプライン段が挿入されることが望ましい。本質的に、最終アドレスかどうかを判別する処理は、最終アドレスに対する操作の実行の前に、２つのサイクルを開始する。このことは、最終アドレスが実際に必要になる前に比較器動作（最終アドレス検出動作）を完了させるのに十分な時間を与える。
【０１５１】
２つのパイプライン段を仮定すると、入れ子ループがないＭａｒｃｈアルゴリズムの場合には、最終アドレスに達したかどうかを示す信号は、最終アドレスにおいてアルゴリズム・ステップが実行される前の１クロック・サイクルの間、アサートされたままである。これは、アドレスがインクリメントされている場合でも、デクリメントされている場合でも起こる。しかしながら、入れ子ローカル・ループを有する、より複雑なアルゴリズムでは、最終アドレスを示す信号が同様に計算されることが不可能な場合もある。これは、ベース・アドレス・ステップの中に、何百ものクロック・サイクルを要するローカル・アドレス操作が多数含まれる可能性があるためである。そのような場合、ベース・アドレスは早めに計算されるが、最終ベース・アドレスに関係する信号が実際にアサートされるのは、最終ローカル・アドレスに対してである。しかしながら、何れの場合においても、最終ベース・アドレス及び最終ローカル・アドレスを示す信号のアサートは、複数のクロック・サイクルにわたって行われることが可能であり、それによって、コントローラに対するあらゆるタイミング制約を少なくすることが可能である。
４．３  アドレス・ジェネレータ
アドレス・ジェネレータ１５５（図４）の例示的な一形態は、２つの部分、即ち、（ベース・アドレス・ジェネレータとも呼ばれる）ベース・ループ１６０（図６）用アドレス・ジェネレータと、（ローカル・アドレス・ジェネレータとも呼ばれる）ローカル・ループ２００（図７）用アドレス・ジェネレータとを含むことが望ましい。最終アドレス・インジケータ（図６の最終ベース・アドレス・インジケータ１８０と図７の最終ローカル・アドレス・インジケータ１８２）も含まれることが可能である。この例では、ベース・アドレス及びローカル・アドレスの両方が、２つの部分、即ち、行アドレスと列アドレスとに分けられていることが望ましい。このアプローチは、行アドレスと列アドレスとを独立に操作することを可能にする。
【０１５２】
ベース・アドレス・ジェネレータ（例えば、図６の１６０を参照）は、ベース行アドレス及びベース列アドレスの発生を制御することが望ましい。ベース行アドレスは、この例では、アドレス指定スキームが設定されたとき、又は最終アドレスに達したときに、（ブロック１６２で）その初期値に設定される。図示された形態のベース行アドレス・レジスタ（ブロック１７０）は、アドレス方向又はアドレス指定スキームが変更されたときに、ベース・ループの最後で変更されるのが普通である。従って、ベース行アドレスは、例えば、アドレス指定スキームが行アドレス指定（例えば、高速ｘアドレス指定）、行のみアドレス指定、斜めアドレス指定などである場合、或いは、列アドレス・レジスタが、キャリーが発生して行アドレスのインクリメントが必要になるように変更された場合に、１ずつインクリメントされるか、デクリメントされる（ブロック１６４を参照）。ベース列アドレス（ブロック１７２を参照）は、この例では、初期値から始まり（ブロック１６６）、アドレス指定スキームが列アドレス指定（例えば、高速ｙアドレス指定）、列のみアドレス指定、斜めアドレス指定などである場合、或いは、行アドレス・レジスタが、キャリーが発生して列アドレスのインクリメントが必要になるように変更された場合に、１ずつインクリメントされるか、デクリメントされる（ブロック１６８を参照）。図６は、例示的なベース・アドレス・ジェネレータのブロック図である。マルチプレクサ１６５が、ブロック１６２、１６４をブロック１７０に結合し、マルチプレクサ１６９が、ブロック１６６、１６８をブロック１７２に結合する。
【０１５３】
ローカル・アドレス・ジェネレータ２００（図７）は、ベース・アドレス・ジェネレータ１６０によってサポートされているアドレス指定スキームに加えて、複雑なアドレス指定スキームをサポートすることが望ましい。ローカル・アドレス・ジェネレータは更に、ベース・アドレスを基準とするアドレス生成スキームをサポートすることが望ましい。図示された形態のローカル・アドレス・ジェネレータは更に、２つの部分、即ち、ローカル行アドレス２１０と、ローカル・ベース又は列アドレス２２０とに細分されることが望ましい。例示的なローカル・アドレス・ジェネレータの様々なアドレス指定スキームを以下に示す。
・ベース・アドレスと等しいローカル・アドレスを設定する（ブロック２２１、２２３）。
・ベース・アドレスと２ｎとの排他的論理和をとることによってアドレスを生成する（ｎはアドレスのビット数）（ブロック２２９、２３１）。
・２ｎにベース・アドレスを加算するか、２ｎからベース・アドレスを減算することによってローカル・アドレスを生成する（ブロック２３３、２３５）。
【０１５４】
値２ｎは、１に初期設定されたローカル・アドレス・レジスタを左シフトする（ブロック２２５、２２７）ことによって生成されることが可能である。アドレス・ジェネレータは更に、最大アドレスにいつ達したかを示す機能を含むことが可能である。最大アドレスは、例えば、メモリのサイズに固有であってもよく、ユーザによって指定されてもよい。最終ベース・アドレス信号インジケータは、最終ベース・アドレスに達したことを示すために、例えば、次の条件下でアサートされることが可能である。
【０１５５】
代替として、必ずしも先頭からではなく、特定のローカル行アドレス及びローカル列アドレスから開始するために、ブロック２１１、２１３の開始ローカル行及び開始ローカル列が用いられる。これらは、例えば、それぞれブロック２１５、２１７でインクリメントされることが可能である。
・最終ベース行アドレスに達している。行のみアドレス指定スキーム及び斜めアドレス指定スキームの場合。
・最終ベース列アドレスに達している。列のみアドレス指定の場合。
・最終行アドレス及び最終列アドレスの両方に達している。行アドレス指定又は列アドレス指定の場合。
【０１５６】
図７は、例示的なローカル・アドレス・ジェネレータのブロック図である。
ローカル・アドレスの場合、最終アドレス信号インジケータは、例えば、ローカル・アドレスがベース・アドレス指定スキームに依存しない場合のみ、上述の場合と同じ状況下でアサートされることが可能である。これに対し、ローカル・アドレス指定スキームがベース・アドレスに依存する場合は、コントローラによってテストされる全てのメモリが同じサイズであれば、ＭＳＢ（最上位ビット）を用いて、最終ローカル・アドレスを示すことが可能である。同じサイズでない場合は、別個の比較スキームを用いて、最終アドレスに達しているかどうかを判別することが可能である。最終アドレス・インジケータ（最終ローカル・インジケータ）１８２は、この例では、最終ベース・アドレス信号と最終ローカル・アドレス信号とを生成することが可能である。最終ベース・アドレス信号は、次の条件のうちの１つが満たされた場合にアサートされることが望ましい。（１）行のみアドレス指定又は斜めアドレス指定の場合に、最終ベース行アドレスに達している。（２）列のみアドレス指定の場合に、最終ベース列アドレスに達している。又は（３）行アドレス指定又は列アドレス指定の場合に、最終ベース行アドレス及び最終ベース列アドレスの両方に達している。最終ローカル・アドレス信号については、ローカル・アドレスがベース・アドレスと独立に生成されるのであれば、条件は、最終ベース・アドレス信号の場合と同じである。しかしながら、ローカル・アドレスが、ベース・アドレスと２ｎとの排他的論理和、或いはベース・アドレスと２ｎとの加算又は減算によって生成されるのであれば、最上位ビット（ＭＳＢ）が最終ローカル・アドレスを示す。
４．４  データ・ジェネレータ
図示された形態のデータ・ジェネレータ３００（図４）は、２つの主要機能を有する。第１のタスクは、現在のクロック・サイクルの間に特定のメモリ・ロケーションに書き込まれるべき正しいデータを生成することである。第２のタスクは、読み出し操作時にそのメモリ・ロケーションから読み出されたデータと比較されるべき適正な期待データを生成することに関連付けられる。読み出し及び書き込みの操作がパイプライン化されることが望ましい例では、適正な期待データを生成することがより複雑になる。プログラマブルＭＢＩＳＴコントローラは、生成された期待データと、実際にあらかじめ（例えば、数クロック・サイクル前に）メモリに書き込まれたデータとが突き合わせされる（対応する）ことを保証することが望ましい。
【０１５７】
データ・ジェネレータはまた、様々な更新スキームに従って、データ・バックグラウンドを更新することが望ましい。一意データ、チェッカーボード、行ストライプ、及び列ストライプのデータ・バックグラウンドの場合、データ・バックグラウンドは、アドレスの関数である。一意データ・バックグラウンドは、アドレスをデータ・バックグラウンドとして使用する。インタリーブ・メモリ及びマルチプレクスされたワード指向メモリの場合、チェッカーボード、行ストライプ、及び列ストライプのデータ・バックグラウンドは、以下の式で表されることが可能である。
【０１５８】
【数１１】
2008521159.tif 000017
【０１５９】
ここで、ｒｏｗ［０］及びｃｏｌｕｍｎ［０］は、行アドレス及び列アドレスのＬＳＢであり、Ｄは、命令によって指定される０又は１であり、ＥＸＮＯＲは、排他的ＮＯＲの演算である。
【０１６０】
プログラマブル・コントローラの望ましい第１の実施形態によってサポートされる、様々なタイプの例示的なデータ生成スキームを以下に挙げる。全てのケースにおいて、データ・バックグラウンド及びデータ・バックグラウンドの反転の両方がサポートされることが望ましい。
【０１６１】
１．Ｍａｒｃｈアルゴリズムの場合は、塗りつぶしの「０」及び「１」のデータ・バックグラウンドのほかに、ユーザが、全部で（ｌｏｇ２ｗ＋１）個の異なるバックグラウンドの中から、使用可能な任意のバックグラウンドを指定することが可能である（ｗはデータ・ワードの幅）。
【０１６２】
２．Ｃｈｅｃｋｅｒｂｏａｒｄアルゴリズムの場合は、データ・バックグラウンド「０１．．．０１」及びその反転が使用される。更に、メモリ・ロケーションに書き込まれるデータは、そのアドレスに依存する。
【０１６３】
３．行ストライプ及び列ストライプ・アルゴリズムの場合は、メモリの偶数アドレス及び奇数アドレスに基づいてデータが生成される。行ストライプ・アルゴリズムでは、例えば、１回の実行で、偶数行に「１１．．．１１」が書き込まれ、奇数行に「００．．００」が書き込まれる。第２の実行では、データ・バックグラウンドが反転される。同様に、列ストライプ・アルゴリズムでは、交互の列がそれぞれ全て１及び全て０を有するようにデータが書き込まれる。
【０１６４】
４．一意データ・アルゴリズムの場合は、対応するメモリ・アドレスが、全てのメモリ・ロケーションの一意データとして用いられることが可能である。
データ・バックグラウンドは、例えば、２つのスキームに基づいて更新されることが可能であることが望ましい。第１に、ユーザは、（ｌｏｇ２ｗ＋１）個のありうるデータ・バックグラウンドから、使用可能な任意のデータを選択することが可能である。第２に、セクション２で挙げられたアルゴリズムの幾つかについては、データ・バックグラウンドが、２ｗ−１に設定されている現在のバックグラウンドを１ビットだけシフトすることによって変更されることが可能である（ｗはデータ・ワードの幅）。プログラマブル・コントローラは、両方のスキームを、アルゴリズムに基づいてサポートすることが望ましい。
【０１６５】
制御信号、アドレス、及びデータが、異なるクロック・サイクルにおいて生成されている場合に、レイテンシ調節器４００（図４）を用いて、それらを同期された状態にすることが可能である。調節器４００は更に、データのレイテンシを調節して、メモリ入力データとメモリ出力データとを同期させることが望ましい。
４．５  制御ジェネレータ
制御ジェネレータ５００（図４）は、この例に示された一形態では、アルゴリズムの実行を管理する、必要な全ての制御信号を生成する役割を有する。この機能は、命令自体の中にワン・ホット・エンコードされていることが望ましいので、制御ジェネレータの構成は、シンプル且つ直接的である。図示された例の制御信号は、命令デコーダから直接到来し、プログラマブルＭＢＩＳＴコントローラ内の各ブロックにルーティングされる。
４．６  出力応答アナライザ
図示された一形態の出力応答アナライザ４５０は、メモリから読み出されたデータと、プログラマブルＭＢＩＳＴコントローラから生成された期待データとを比較する。このアナライザは、２つの値を比較する比較器を備えることが可能である。メモリの幅が非常に大きい場合は、比較器のロジックの深さが大きくなり、従って、実動作速度のＢＩＳＴ操作を望ましくは可能にするためにパイプライン段が挿入されることが可能である。代替として、出力応答アナライザは、メモリ応答を圧縮する圧縮器であってよい。圧縮器のアプローチは、特にＲＯＭのテストに適用可能である。出力アナライザは、テストされたメモリがテストにパスしたか失敗したか、或いは、メモリ内の特定のセルがテストにパスしたか失敗したかを示す出力４５２のような、任意の好適な出力を提供することが可能である。代替として、この後に説明されるように、結果が、診断モニタ９００に渡され、解析されて、出力９０２で診断データが生成されることが可能である。
５．０．ハードウェア設計の例示的な代替形態
この実施形態の基本的なハードウェアは、図４にも示されている。しかしながら、この実施形態は、代替設計のステップ・コントローラのような、代替構成要素形態を利用する。この代替実施形態のハードウェア設計は、図３Ａに示された形態のアルゴリズム命令ワードに特に適用可能である。
５．１  命令メモリ
命令メモリ１０２は、別の形態では、プログラマブルＭＢＩＳＴコントローラと、ＭＢＩＳＴコントローラによって実行される命令シーケンスのソースとの間に、ＦＩＦＯバッファを形成する。これは、一般に、約８個の９ビット・ワードのレジスタ・ファイルから形成されることが可能である。このブロックの中の制御ロジックは、命令メモリが満杯でない場合に、外部ソースが、更なる命令群を命令メモリにスキャン・ロードすることを可能にする。従って、ＭＢＩＳＴコントローラが命令群の処理を開始して、それらが命令メモリから除去されれば、更なる命令群が命令メモリにロードされることが可能である。
【０１６６】
外部テスト命令ソースは、ＭＢＩＳＴコントローラのクロック・ドメインより何倍も低速なクロック・ドメインを使用することが可能である。例えば、ＩＥＥＥ  １１４９．１  ＴＡＰ  ＴＣＫ又は外部ＡＴＥクロックが、命令のロードに用いられることが可能である。命令メモリ・ブロックは、そのような例における２つのクロック・ドメインの間に同期ロジックを含むことが望ましい。ほとんどのＢＩＳＴアルゴリズム・ステップは、ある範囲のアドレスにわたって動作し、多数の高速クロック・ドメイン・サイクルを費やすので、ＢＩＳＴコントローラが現在のセットを実行しているときに、並行して次の命令シーケンスをメモリにロードするのには十分な余裕がある。
【０１６７】
命令メモリのサイズは、増減が可能である。サイズが変更されると、ＭＢＩＳＴコントローラと命令ソースとの間のリンケージの量も変化する。アルゴリズムが命令メモリ内に完全にはめ込まれている場合は、ワード数が少ないので、低速の外部ソースが新たな命令群を使用可能にするのをＭＢＩＳＴコントローラが待つ時間が長くなる可能性がある。命令メモリのワード数の８という値が、性能とレジスタ・サイズとの間の良好な妥協点になると考えられている。
５．２  命令デコーダ
命令デコーダ１０８（図４）の代替形態は、次の２つの部分から構成される。
・命令がアルゴリズム命令か構成命令かを決定する部分。
・構成命令をデコードする部分。
【０１６８】
第１の決定は、単純に命令ワードのビット０を検査することによって行われることが可能である。ビット０がセットされていれば、命令は構成命令である。これは、既にセクション４．２で述べたようなプリデコーダを用いて行われることが可能である。
【０１６９】
構成命令のデコードは、この例では、具体的な構成命令を決定するために構成命令ワードの最上位ビットを検査することによって行われる。ほとんどの構成命令に対して、プログラマブルＭＢＩＳＴコントローラの状態は即座に更新される。アドレス構成命令は、この例では、以下で説明されるように、別の処理をされることが望ましい。例えば、アドレス構成命令は、部分的にデコードされてステップ・コントローラに渡されることが可能であり、ステップ・コントローラでは、現時点で実行の準備ができている、テスト・アルゴリズム・ステップの命令ループのために、他の情報とともにバッファリングされる。ステップ・コントローラについては、次のセクションで詳述する。
５．３  ステップ・コントローラ
ステップ・コントローラ１３０は、様々であってよいが、一具体例では、１ステップのプリデコードされたアルゴリズム命令群と、そのステップにおけるループのためのアドレス構成と、テスト・ステップの実行の制御とを記憶することが可能である。
【０１７０】
図８に示されたステップ・コントローラは、４つのサブブロック、即ち、命令バッファ及びバッファ制御５００と、アドレス構成バッファ５０２と、アルゴリズム命令デコーダ５−４と、アドレス構成デコーダ５０６とを備える。例示的ステップ・コントローラの図を図８に示し、これについて、以下のサブセクションで説明する。
５．３．１  命令バッファ及びバッファ制御
プログラマブルＭＢＩＳＴコントローラに関連付けられたメモリに対して多数のメモリ・テスト・アルゴリズムを実行するメモリ・テスト・プログラムを考えることができる。それらのテスト・アルゴリズムは、プログラマブルＭＢＩＳＴコントローラが、生成時（例えば、フィールド・プログラミング時）に、並行メモリ・テストのために構成されている場合には、全てのメモリに同時に適用されることが可能である。代替として、それらのアルゴリズムは、プログラマブルＭＢＩＳＴコントローラが、生成時に、順次メモリ・テストのために構成されている場合には、各メモリに順番に適用されることが可能である。後者の場合は、プログラマブルＭＢＩＳＴコントローラにより、異なるアルゴリズムが各メモリに適用されることが可能である。これにより、メモリの個々の要件と、任意のダイ位置に固有の変形形態とに対してカスタマイズされる厳密なテストが可能になる。
【０１７１】
各メモリ・テスト・アルゴリズムは、一連のメモリ・アクセス操作からなる。これらは、選択されたメモリ・アドレスにわたる幾つかのループにグループ分けされる。これらのループは、シンプルなＭａｒｃｈライクなアルゴリズムの一連のアドレスを通る単一パスのようにシンプルであってもよく、全体的により複雑なもの（例えば、ＧＡＬＰＡＴアルゴリズムや開放ＰＭＯＳアドレス・デコーダ・テストに必要なルーピング）であってもよい。この実施形態のプログラマブルＭＢＩＳＴコントローラは、拡張可能であるが、最も外側のループの中で最大８個のメモリ・アクセス操作をサポートする。これらの命令は、幾つかの内側ループに編成されることが可能である。これらは、拡張可能であるが、この例では、最大で４レベルのループがいつでも同時にアクティブであることが可能である。メモリ・アクセス操作の数と、ループ入れ子の深さとは、プログラマブルＭＢＩＳＴコントローラの生成時に、構成可能であるように拡張されることが可能である。
【０１７２】
前述のように、ループは、最初の「アドレス／ループ」構成命令及び終了させる「制御／ループ」構成命令の内側に含まれる一連のメモリ・アクセス操作によって定義されることが可能である。この、ループ構成命令のペアの内側にある全てのメモリ・アクセス操作が、ループの本体の中にあることが望ましい。
【０１７３】
ループ入れ子は、ループの本体の中でループ構成命令の更なるペアが遭遇された場合に発生する。この入れ子ループに含まれるメモリ・アクセス操作は、より高い入れ子レベルにあると見なされる。
【０１７４】
例えば、単純なループは、次のようになる。
【０１７５】
【数１２】
2008521159.tif 000018
【０１７６】
「アドレス／ループ」構成命令及び対応する「制御／ループ」構成命令は、この例では、書き込まれるべき情報をアドレス構成バッファに入れる。メモリ・アクセス操作は、命令バッファに入れられる。
【０１７７】
以降のサブセクションでは、次の入れ子ループの実行について考える。
【０１７８】
【数１３】
2008521159.tif 000019
【０１７９】
これは、以下のテスト・アルゴリズム命令を用いて書かれることが可能である（この例のテストでは、アルゴリズム・ステップは、命令バッファ及びアドレス構成バッファの内部動作のデモをする伝達手段として動作する以外には、有用なことをしない）。
【０１８０】
【数１４】
2008521159.tif 000020
【０１８１】
このテスト・アルゴリズム・ステップには、６つの操作（ＯＰ０、ＯＰ１、・・・、ＯＰ５）がある。このアルゴリズム・ステップは、この例では、全部で５つのループからなる。５つの操作の全てが、第１のループを形成する。操作ＯＰ１、ＯＰ２、及びＯＰ３が、第２のループを形成する。操作ＯＰ１が、第３のループを形成する。操作ＯＰ２及びＯＰ３が、第４のループを形成する。操作ＯＰ４及びＯＰ５が、第５のループを形成する。
【０１８２】
第１のループが、他の全てのループを入れ子にする。第２のループが、第３及び第４のループを入れ子にする。３レベルの入れ子ループが同時発生する。第３及び第４のループは、第２のループと第１のループとの内側で入れ子になっている。
５．３．１．１  命令のロード
メモリ・テスト・ステップ命令の実行は、ループに基づく。第１の完全なループが遭遇されると、ただちに、そのループ内のメモリ・アクセス操作の実行と、そのループ自体とがトリガされる。このようにして、ループの実行が実動作速度で行われるが、ループ間では、更なる命令群が命令バッファから転送され、デコードされるために、遅延がある可能性がある。
【０１８３】
アドレス／ループ構成命令がデコードされると、デコードされた情報が、アドレス構成バッファ５０２（図８）に入れられる。この情報は、この例では、アドレスが、ループ全体に対してどのように操作及び生成されるかを決定する。そのループのための第１のメモリ・アクセス操作は、命令バッファ５００に入れられ、ループが実行可能になるためにはアドレス構成バッファ内の情報に従ってアドレス・レジスタがセット・アップされることが必要であるとしてマーキングされる。後続のメモリ・アクセス操作が、命令バッファに追加される。制御／ループ構成命令が遭遇されると、命令バッファ内の最後の命令が、（ループ内の最初の命令に戻る）ループ反復ジャンプ・アドレスとともに、ループを終了させるとしてマーキングされる。
【０１８４】
この例では、テスト・アルゴリズム・ステップのメモリ・アクセス操作ＯＰ１は、第２及び第３のループの両方における最初の操作である。このため、操作ＯＰＩの実行の前に両方のループが初期設定されることが必要である。この情報は、命令バッファ内に、操作と並んで格納される。
【０１８５】
ＯＰレベル・バッファ５１０（図９）は、操作が中に含まれるループの最高レベルを格納する。命令バッファ５１４は、アルゴリズムのメモリ・アクセス操作そのものを格納する。初期設定インデックス・バッファ５２０は、対応する操作で始まるループの番号を格納する。初期設定が不要であることを示す場合は、全て１である値（このケースでは十進数の７）が用いられる。最終初期設定バッファ５２２は、対応するループが、初期設定されるべき最後のループかどうかの情報を格納する。
【０１８６】
この例では、操作ＯＰ０は、第１のループ（ループ・レベル０）にあり、初期設定される必要がある。操作ＯＰ１は、第２及び第３のループ（ループ・レベル１及び２）の先頭であり、ループ・レベル１及びループ・レベル２の両方が初期設定される必要がある。操作ＯＰ３については、初期設定は不要である。
【０１８７】
ジャンプ・アドレス・インデックス・バッファ５４０（図１０）内の値は、操作が１つ又は複数のループの最後かどうかを示す。ここでも、全て１である値（このケースでは十進数の７）が、このメモリ・アクセス操作の後にジャンプが不要であることを示す。他の値は、ジャンプ・アドレス・バッファからジャンプ情報をフェッチするためのアドレスを示す。ジャンプ・アドレス・バッファ５４２は、現在のループの次の反復時のジャンプ先となるインデックスを命令バッファに格納する。最終ループ・バッファ５４４内の対応する値は、ループが、その操作のために実行されるべき最後のループかどうかを示す。
【０１８８】
この例では、操作ＯＰ０は、ループの最後ではない。しかしながら、操作ＯＰ１は、ループの最後であり、そのループの次の反復は、操作ＯＰ１（命令バッファの要素１）から始まり、最終ループ・バッファは、操作ＯＰ１が１つのループだけの最後の操作であることを示す。
【０１８９】
操作ＯＰ３についての情報は、もう少し複雑である。この操作は、ループの最後であり、次の反復は、命令バッファの要素２（操作ＯＰ２）から始まる。最終ループ・バッファは、この操作が別のループも終了させ、現在のアドレス反復が完了したときにテーブル内の次のエントリが使用されることを示す。これにより、命令バッファの要素１（操作ＯＰ１）にある操作にジャンプすることによって、外包ループの次の反復が実行される。これは、ＯＰ３の後に実行されたループ反復を終了させる。
５．３．１．２  ループに入る
命令バッファから操作が読み出されると、現在の操作から始まる１つ又は複数のループについて、初期設定が必要かどうかがチェックされる。ループに入ることとそのループの最初の操作を実行することとの前に実行される必要がある、デコードされたアドレス構成命令群が、その最初の操作に関連付けられる。操作は複数のループの開始操作であることが可能なので、操作に関して初期設定されることが必要なループが複数あってもよい。前述のテスト・アルゴリズム・ステップの例では、メモリ・アクセス操作ＯＰ１は、第２及び第３のループの両方における開始操作である。従って、これらのループは、初期設定される。このことはまた、ループの各入れ子レベルに対して少なくとも１つのアドレス・レジスタを設けることが望ましいことを示している。
【０１９０】
必要な全ての入れ子ループが、それぞれ、適切に初期設定されたアドレス・レジスタを有するようにするために、以下の例示的手順が用いられる。
・最初に、全てのレジスタが、初期設定されていないとしてマーキングされる。
・初期設定インデックス・バッファが、初期設定される必要がある開始ループ番号を示す。
・初期設定されていない各アドレス・レジスタが、アドレス構成バッファにある情報を用いて初期設定される。
・ループが反復される。
・ループが完了すると、アドレス・レジスタは、初期設定されていないとしてマーキングされる。
【０１９１】
１つの操作が複数のアドレス・ループの開始操作になることが可能なので、ループ初期設定の処理をスロー・ダウンさせないように、ループが初期設定されているかどうかを素早く判別する方法を備えることが望ましい。前述の例では、操作ＯＰ１は、第２及び第３のループ（入れ子ループ・レベル１及び２）の両方の開始操作である。第２のループの実行時に、第２又は第３のループが初期設定されているかどうかを判別するために余分なサイクルを費やさないことが望ましい。実行レベル・レジスタを用いて、現在実行されているループ・レベルを示すことが可能である。実行レベルが、ＯＰレベル・バッファに収容されている、操作のＯＰレベル値と同じであれば、ループの初期設定は不要であり、このことは既知である。これに対し、実行レベルがＯＰレベルより低い場合、この例では、ループが実行される前に、初期設定されていないループ・アドレス・レジスタに対して初期設定が実行される。この初期設定が完了すると、この例では、実行レベルがループのＯＰレベルに調節される。
【０１９２】
前述の例の場合は、操作ＯＰ１が最初に読み出されると、実行レベルは０であり、これに対して、操作ＯＰ１のＯＰレベルはレベル２である。従って、ループの初期設定が必要である。第２及び第３のループ（入れ子ループ・レベル１及び２）が初期設定されると、実行レベルが２に設定される。この場合、第３のループは、実行レベルがループの完了前の操作ＯＰ１のＯＰレベル・バッファと等しいので、初期設定なしで連続的に実行されることが可能である。
【０１９３】
ループ内のメモリ・アクセス操作が実行されているときに、その操作に関して、ジャンプ・アドレス・インデックス・バッファ５４２（図１０）が読み出される。この値は、この操作がループ内の最後の操作であるかどうか、並びに、最後の操作であれば、ループの次の反復のためにどのような操作が続くべきかを決定するために用いられる。ループ内の最後の操作により、アドレス・レジスタが、次のアドレス値に更新される。
５．３．１．３  ループから出る
ループが終了すると、この例では、実行レベルが１だけ戻り、ループのアドレス・レジスタが、初期設定されていないとしてマーキングされる。同じ操作に対して複数のループを終了させることが可能なので、この例では、プログラマブルＭＢＩＳＴコントローラが、ジャンプ・アドレス・バッファ及び最終ループ・バッファの中の値を通って、設定されている最終ループ・バッファ値に遭遇するまで、各ループを次の反復に進めようとするか、そのループを終了させようとする。
５．３．２  アドレス構成バッファ
アドレス構成バッファ５０２（図８）は、テスト・アルゴリズム・ステップに必要な全てのループについて、アドレス・ループに関係する、部分的にデコードされた情報を追跡する。構成命令バッファと同様に、アドレス構成バッファ内の情報は、テスト・アルゴリズム・ステップ内のアドレス・ループ構成命令群が遭遇されたときに構築される。アドレス構成バッファ５０２の全内容は、一実施形態では、最も外側のアドレス・ループの最後が処理された後にのみ、使用可能である。
【０１９４】
このブロック５０２の一例示的形態には、次の２つの別個のバッファがある。
１．アドレス・バッファ。これは、各アドレス・ループに対応する、部分的にデコードされたアドレス・スキームを収容する。
２．関係バッファ。これは、各アドレス・ループに対応する、部分的にデコードされたアドレス関係値を収容する。
【０１９５】
これらの値のフィル・デコードは、様々であってよいが、望ましくは、対応するループが初期設定されているときか、ループ反復が行われて、アドレス・レジスタ値が次の値に進められているときのみ、行われる。
５．３．３  アルゴリズム命令デコーダ
アルゴリズム命令デコーダ５０４は、図８による一実施形態では、現在実行されている、命令バッファ５００からのメモリ・アクセス操作命令を完全にデコードする。このデコード情報は、制御ジェネレータによって実行されているメモリ・アクセス操作に対応するメモリ制御信号アクティベーションの生成をトリガするために用いられる。
５．３．４  アドレス構成デコーダ
アドレス構成デコーダ５０６は、図８による一実施形態では、アドレス構成バッファ５０２に格納されているアドレス構成命令を完全にデコードする。この情報は、アドレス・ジェネレータによって使用される。
５．４  アドレス・ジェネレータ
図１１に示された、例示的形態のアドレス・レジスタ６６０は、（この例では３に等しい、入れ子ループの最大数に対応する）３レベルの６０２、６０４、６０６を有し、更に、次の２つの主要機能を有する。
１．インター反復アドレス生成。アドレス反復ループによって使用される現在及び次のアドレス値の生成（ブロック６１０）。これは、この例では、ループのアドレス構成命令群によって決定される。これを制御するために、アドレス構成バッファ５０２（図８）にある、部分的にデコードされたアドレス／ループ構成命令値及びアドレス／関係構成命令値の両方が用いられる。
２．イントラ反復アドレス生成。アドレス反復ループ（ブロック６２０）内の各メモリ・アクセス操作に関して、メモリに適用される実際のアドレスの生成（ブロック６３０）。メモリ・アクセス操作のアドレス・レベル・フィールド及びアドレス操作フィールドは、この例では、操作に用いられるメモリ・アドレスを構築するために用いられる。このアドレスは、オプションで、ビット極性を与えられることも可能である。
【０１９６】
実際のメモリ・アドレスは、メモリ・アクセス操作について指定されるアドレス・レベル、並びにアドレス・ループについて指定される関係に応じて、図１２に示されるような、他のアドレス・ループのアドレス・レジスタ値に依存することが可能である。この図１２の図によって例示されるような一具体例では、ループ・レベル０のアドレス・レジスタ値が、ループ・レベル０の全ての操作によって直接使用されることが可能であり、他の全てのループ・レベルのメモリ・アクセス操作によって使用されるアドレス値に寄与することが可能である。ループ・レベル１のアドレス値は、ループ・レベル１又はループ・レベル２のメモリ・アクセス操作によってのみ使用されることが可能である。
【０１９７】
ループ又はアルゴリズム・ステップの全範囲にわたる操作のためのアドレス生成ハードウェア７００（図１１のインター反復ブロック６１０）の実施形態の詳細図を、図１３に示す。以下のように、ハードウェア動作を高速化するために用いられる、オプションではあるが望ましい幾つかの方法があることに注意されたい。（１）実行中のループのアドレスを別のアドレス・レジスタにコピーし、それが更新されたアドレスを元のアドレス・レジスタに書き戻すことが可能である。（２）キャリーを事前計算してハードウェアを高速化することが可能である。（３）基準アドレスを登録することが可能である。（４）アドレス生成を制御する制御信号を登録することが可能である。
【０１９８】
イントラ反復アドレス生成の機能は、図３Ａのアルゴリズム命令のビット［４：３］によって決定される。これは、現在のアドレス、現在のアドレス±１インデックス、又は現在のアドレスの反転であることが可能である。一例では、テスト・プログラムにおいて、アドレス・インデックスがロードされる。インデックスのデフォルト値は、例えば、「１」に設定される。例示的イントラ反復アドレス・ジェネレータ７５０（図１１のブロック６２０）の高レベル図を、図１４に示す。レベルｎは、アルゴリズム命令で指定されることが可能である。
５．５  データ・ジェネレータ
データ・ジェネレータ３００（図４）は、一実施形態では、次の機能を実行する。
・現在のクロック・サイクルにおいて現在のメモリ・ロケーションに書き込まれるべきデータ値を生成する。
・現在のメモリ・ロケーションから読み出されたデータが使用可能になったときに比較されるべき適正な期待データを生成する。
【０１９９】
読み出し及び書き込みの操作はパイプライン化されることが可能なので、適正な期待データを生成することは、より複雑になる。ＭＢＩＳＴコントローラは、生成された期待データと、１クロック・サイクル以上（例えば、数クロック・サイクル）早くメモリに実際に書き込まれたデータとが突き合わせされることを保証する。これは、一例では、メモリ読み出し値が使用可能になったときに、比較に備えて待機している比較器パイプラインにデータ・パターン番号及び反転状態を送り出すことにより、行われる。比較器は、これらの値をデコードして、実際の期待値を決定する。
【０２００】
サポートされている、様々なタイプのデータ生成スキームを、以下に列挙する。全てのケースにおいて、データ・バックグラウンド及びデータ・バックグラウンドの反転の両方がサポートされる。プログラマブルＭＢＩＳＴコントローラは、他のデータ生成スキームもサポートするように拡張されることが可能である。
【０２０１】
１．Ｍａｒｃｈアルゴリズムの場合は、塗りつぶしの「０」及び「１」のデータ・バックグラウンドのほかに、ユーザは、全部で（ｌｏｇ２ｗ＋１）個の異なるバックグラウンドの中から、使用可能な任意のバックグラウンドを指定することが可能である（ｗはデータ・ワードの幅）。
【０２０２】
例えば、データ・サイズが８ビットであるメモリは、以下の４個のエンコードされたデータ・バックグラウンドを有することが可能である（更に、それらのデータ・バックグラウンドの反転も使用可能になる）。
０  ００００００００
１  ０１０１０１０１
２  ００１１００１１
３  ００００１１１１
２．Ｃｈｅｃｋｅｒｂｏａｒｄアルゴリズムの場合は、トポロジカル・データ・バックグラウンド「０１．．．０１」及びその反転が必要とされる。実際のデータ値は、アドレスに依存する。
【０２０３】
３．行ストライプ及び列ストライプ・アルゴリズムの場合は、メモリの偶数アドレス及び奇数アドレスに基づいてデータが生成される。行ストライプ・アルゴリズムでは、例えば、１回の実行で、偶数行に「１１．．．１１」が書き込まれ、奇数行に「００．．００」が書き込まれる。第２の実行では、データ・バックグラウンドが反転される。同様に、列ストライプ・アルゴリズムでは、交互の列がそれぞれ全て１及び全て０を有するようにデータが書き込まれる。
【０２０４】
４．一意データ・アルゴリズムの場合は、対応するメモリ・アドレスが、全てのメモリ・ロケーションの一意データとして用いられる。
５．６  制御ジェネレータ
制御ジェネレータ５００（図４）の役割は、この実施形態では、現在のメモリ・アクセス操作に必要な全ての制御信号を生成することである。これは、最高速度の同期メモリの場合には、部分的にデコードされたメモリ・アクセス操作の命令値によって直接駆動される、シンプルなメモリ制御信号アサーションである。非同期メモリのような、他の場合は、状態カウンタを用いて、カウンタ状態に基づいて制御信号をアクティベーションすることが可能である。
【０２０５】
制御信号のマスキングも、このブロックの中で実行されることが可能である。
５．７  出力応答アナライザ
出力応答アナライザ４５０は、この実施形態では、メモリから読み出されたデータと、コントローラから生成された期待データとを比較する。望ましい一形態では、出力アナライザは、その２つの値を比較する比較器を備える。メモリの幅が非常に大きい場合は、比較器のロジックの深さが大きくなり、従って、実動作速度のＭＢＩＳＴ操作を保証するためにパイプライン段が挿入されることが可能である。
【０２０６】
比較パスにおけるデータ幅を減らすために、データ・スライスを用いることも可能である。これが行われた場合は、適用範囲が完全になるように、各スライスに対して同じアルゴリズム・セットが繰り返されることが望ましい。一アプローチでは、データ・スライス・アルゴリズムの実行時に、全ての書き込み操作が、メモリ・データ・ワードの全幅に対して動作し、出力応答解析だけがスライスされる。
６．０  選択されたアルゴリズムの例示的擬似コード
図３及び表３において前述されたような、提案されたプログラマブルＭＢＩＳＴコントローラの命令について、プログラマブルＭＢＩＳＴコントローラが（例えば、フィールド・プログラミングにより）サポートできる、幾つかの例示的アルゴリズムの擬似コードを、以下に示す。
【０２０７】
【数１５−１】
2008521159.tif 000021
【０２０８】
【数１５−２】
2008521159.tif 000022
【０２０９】
【数１５−３】
2008521159.tif 000023
【０２１０】
【数１５−４】
2008521159.tif 000024
【０２１１】
７．０  選択されたアルゴリズムの追加の例示的擬似コード
図３Ａ及び表４において前述されたような、提案されたプログラマブルＭＢＩＳＴコントローラの命令についての、プログラマブルＭＢＩＳＴコントローラが（例えば、フィールド・プログラミングにより）サポートできる、例示的アルゴリズムの擬似コードは、自明であろう。例えば、ｍａｒｃｈ１、ｍａｒｃｈ２、ｍａｒｃｈ３、ｃｏｌ＿ｍａｒｃｈ１、ｕｎｉｑｕｅ、ｃｈｅｃｋｅｒｂｏａｒｄ、Ｒｏｍ１、Ｒｏｍ２、ｇａｌｌｏｐｉｎｇ、アドレス・デコーダＰＭＯＳ開放、及び既に説明されたものを含む他のアルゴリズムは、このアーキテクチャを用いて実装されることが可能である。サポートされることが可能な、チェッカーボード・タイプのアルゴリズムの一具体例は、保持ＣＢアルゴリズムであって、これは、以下に示すような擬似コードで表される。
【０２１２】
【数１６】
2008521159.tif 000025
【０２１３】
８．０  プログラマブルＭＢＩＳＴコントローラの代替実施形態
以下の代替実施形態では、図３、表３、及びセクション４に関連して前述された基本又は第１の実施形態［以下、「基本実施形態」と呼ぶ］と比較して、より柔軟なアドレス・スキームと、より多くのレベルのループとが可能になる。更に、ループ制御が、基本実施形態より柔軟になる。柔軟性は、図３Ａ、表４、及びセクション５に関連して前述された実施形態によっても示されている。
【０２１４】
前述の基本実施形態では、２レベルの入れ子ループ（ベース・ループ及びローカル・ループ）が可能であり、ベース・ループにはローカル・ループが１つだけ含まれることが可能である。このアプローチは、Ｍａｒｃｈアルゴリズム、Ｇａｌｌｏｐｉｎｇ／Ｗａｌｋｉｎｇアルゴリズム、アドレス・デコーダＰＭＯＳ開放故障用テストなど、多くのアルゴリズムに対応する。ＢｕｔｔｅｒｆｌｙアルゴリズムやＳｌｉｄｉｎｇ  ｄｉａｇｏｎａｌアルゴリズムのような、マルチローカル・ループを有するアルゴリズムの場合は、マルチローカル・ループを実装するためにマルチ・サイクル命令が用いられる。例えば、Ｂｕｔｔｅｒｆｌｙ読み出しやＳｌｉｄｉｎｇ  Ｄｉａｇｏｎａｌ読み出しのような命令は全て、複雑な読み出し操作を実行するために用いられることが可能である。
【０２１５】
この代替設計の実施形態では、それらのマルチ・サイクル命令は、柔軟性を高めることと、全てのアルゴリズムがシンプルな読み出し操作及び書き込み操作で構成されることを可能にすることとのために、除去されることが望ましい。この代替アプローチによれば、３レベル以上のループを有し、入れ子になっている全てのループが異なるアドレス・スキームを有することが可能であるアルゴリズムを、プログラマブルＭＢＩＳＴコントローラがサポートすることが可能になる。以下では、異なるループにあるアドレスを参照することを可能にする、望ましいアプローチを開示する。
【０２１６】
これまでと同様に、命令は、２つのタイプ、即ち、構成命令とアルゴリズム命令とに分けられることが望ましい。構成命令は、テストがどのように実行されるかを定義し、アルゴリズム命令は、操作がどのように実行されるかを定義する。これらの代替実施形態と、既に説明された基本実施形態との違いは、主に、ループ操作にある。そこで、以下の説明は、ループ操作に焦点を当てる。また、以下では、これらの実施形態において異なる、他の選択された構成要素についても、簡単な比較を行う。
【０２１７】
複雑なマルチループ・フィールド・プログラマブルＭＢＩＳＴコントローラをサポートする命令の例示的な定義を、以下の表５及び６に示す。より具体的には、表５は、例示的アルゴリズム命令ワードの更に別の代替形態を示し、表６は、例示的構成命令の別の代替形態を示す。
【０２１８】
【表５】
2008521159.tif 000026
【０２１９】
【表６】
2008521159.tif 000027
【０２２０】
表５及び６から明らかなように、これらの代替実施形態の例示的構成命令セット及びアルゴリズム命令セットは、基本実施形態並びに図３Ａ及び表４の実施形態に関連して前述された命令構成と非常によく似ている。
【０２２１】
これらの代替実施形態と、既に説明された基本実施形態との間の、構成命令セットの主な違いは、アドレス構成にある。表５及び６の代替実施形態では、ベース・ループ及びローカル・ループを構成する代わりに、テスト・ステップ内の全てのループが構成されることが望ましい。アドレス構成には２つのタイプがある。アドレス方向とアドレス関係とである。アドレス方向命令は、この例では、アドレス変更の順序を指定し、アドレス関係命令は、この例では、異なるレベルのアドレス間の関係を指定する。表４の例には、どのような２レベルのアドレスが関係を有するかを示す、ＬＥＶＥＬという１ビットがあり、「０」は、レベル０アドレスを示し、「１」は、現在のループを直接入れ子にするループのアドレスを示す。
【０２２２】
この例では、更に３つの追加命令、即ち、ループ制御と、最終ループ定義と、ループ初期設定とがある。３つとも、マルチワード命令である。
例示的ループ制御命令は、ジャンプ・アドレスと各ループのレベルとを指定する構成をロードする。ループ制御命令に続くワードは、一具体例では、次の形式を有する。
【０２２３】
【表７】
2008521159.tif 000028
【０２２４】
この例では、最上位の３ビットは、操作番号を指定し、次の３ビットは、現在の操作のジャンプ・アドレスを指定し、次の２ビットは、最終操作が現在の操作であるループのレベルを示し、最終ビット（「最終ワード」）は、そのワードが、その構成命令の最後の構成ワードかどうかを示す。
【０２２５】
最終ループ定義命令は、この例では、２ワード命令である。最終ループ定義構成命令に続くワードは、ループが、操作に関連付けられた最終ループかどうかを指定する（１つのループにつき１ビット）。
【０２２６】
ループ初期設定命令は、この例では、初期設定が必要なループを指定する。ループ初期設定命令に続くワードは、一具体例では、次の形式を有する。
【０２２７】
【表８】
2008521159.tif 000029
【０２２８】
この例では、最上位の２ビットは、使用されず、次の３ビットは、操作番号を指定し、次の３ビットは、現在の操作で始まる、初期設定を必要とするループを指定し、最終ビット（「最終ワード」）は、そのワードがループ初期設定命令の最終ワードであることを示す。
【０２２９】
これら表５及び６の代替実施形態の例示的アルゴリズム命令では、ビット８及びビット７が、ループがある最大ループ・レベルを指定し、これは構成変更に用いられ、ビット６及びビット５が、命令内の操作が実行される対象のアドレスのレベルを指定し、ビット４及び３が、操作が実行される対象の実際のアドレスを指定し、これは、ビット６及びビット５で指定されるレベルのアドレスであるか、そのアドレス±インデックスであることが可能であり、最下位の３ビットは、既に説明されたアルゴリズム命令と同じ意味を有する。
【０２３０】
これらの、表５及び６のアルゴリズム命令及び構成命令の代替形態は、例として与えられ、変形可能である。
８．０．１  ループ操作
命令バッファは、望ましくは埋め込まれ、テスト・ステップをホールドすることが可能である。テスト・ステップは、複数のループを収容することが可能である。従って、ループの境界と、ループの始めと終わりとを定義するアプローチが提供される。ループの適正な初期設定及び実行も達成される。
【０２３１】
設計概念については、以下のような具体例を参照すると、理解できる。
次のように書くことができるテスト・ステップ（図１５）が与えられるとする。
（ＯＰ０，（（ＯＰ１），（ＯＰ２，ＯＰ３）），（ＯＰ４，ＯＰ５））
これは、セクション５．３．１で前述されたものと同じ例であるが、このアプローチでは、以下に説明するように、（ループ）の番号の付け方が異なる。
【０２３２】
このステップには、６つの操作（ＯＰ０、ＯＰ１・・・ＯＰ５）がある。この例では、ブラケットの各ペアがループを形成する。この場合のテスト・ステップは、５つのループからなる。ループ０及びループ１は、ループ２内の入れ子であり、ループ２及びループ３は更に、ループ４内の入れ子である。明らかに、この例のステップには３つのレベルがある。ループ０及びループ１は、レベル２にあり、ループ２及びループ３は、レベル１にあり、ループ４は、レベル０にある。
【０２３３】
この例では、テスト・ステップの構成は、構成バッファにロードされ、アルゴリズム命令は、命令バッファ８００（図１６）にロードされる。テスト・ステップが実行される場合、構成バッファ８１０内の構成は、ループがどのように反復されるか、並びに、ループのどのアドレス・スキームが使用されるべきかを定義する。
【０２３４】
この例では、各ループについて、次の構成がある。（１）開始操作及び終了操作、（２）ループのレベル、（３）ループのアドレス・スキームである。
８．１  ループに入る
命令バッファ８００から読み出し操作が読み出されると、現在の操作から始まる１つ又は複数のループについて、初期設定が必要かどうかを調べる第１のチェックが実行される。ループに入る前に実行される必要がある構成は、この第１の操作に関連付けられる。操作は複数のループの開始操作であることが可能なので、操作に関して実行されるべきループ構成が複数あってもよい。例えば、図１５のＯＰ１は、ループ０及びループ２の両方の開始操作である。従って、ループ０及びループ２の両方の構成が実行されなければならない。これはまた、このアプローチにおいて、各レベルに少なくとも１つのアドレス・レジスタがあることが望ましい理由でもある。
【０２３５】
初期設定を実行するかどうかを決定する例示的メカニズムは、次のとおりである。即ち、全てのレベルのアドレスが、初期設定を要するとしてマーキングされる。次に、現在の操作に関連付けられた構成を用いて、対応するレベルの初期設定されていないアドレスが初期設定され、それらのアドレスが、初期設定されたとしてマーキングされる。その後、それらのアドレスについてループが完了したら、それらのアドレスが、初期設定されていないとしてマーキングされる。
【０２３６】
１つの操作が複数のループの開始操作になることが可能なので、ループのテスト（望ましくは、実動作速度のテスト）をスロー・ダウンさせないために、ループが初期設定されているかどうかを素早く判別することが望ましい。例えば、この例のＯＰ１は、ループ０及びループ２の両方の開始動作である。ループ０の実行時に、複数のループ（ループ０及びループ２）が初期設定されているかどうかの判別に特別にテスト・サイクルを費やすことは望ましくないであろう。１つの操作で始まる全てのループが初期設定されているかどうかを調べるための１つのアプローチは、並列ハードウェアを使用することである。テスト・ステップがバッファにロードされるまでは、１つの操作から始まるループの数は不明なので、このアプローチは、操作ごとに多くのロジックを必要とする可能性があり、かなりの量のハードウェア要件につながる可能性がある。より望ましいアプローチは、いわゆる実行レベル・レジスタを用いて、実行されているアドレスのレベルを示すことである。実行レベルが、現在の操作に関連付けられた最高レベル（ＯＰレベルと呼ばれることが可能である）と同じであれば、ループの初期設定は不要であることになる。これに対し、実行レベルがＯＰレベルより低い場合は、ループが実行される前に、ループの初期設定が必要であることになる。
【０２３７】
実行レベルは、初期設定が完了した後に、その操作に関連付けられたＯＰレベルに設定されることが望ましい。実行レベルは、ループ実行が完了した後に１だけ低くなる。実行レベルを減らすための初期設定は、ループ実行の前に行われる。
【０２３８】
上述の例では、ＯＰ１が最初に読み出されたときには、実行レベルは０であり、ＯＰ１に関連付けられた最高レベルはレベル２である。従って、初期設定が必要である。ループ０及びループ２が初期設定された後、実行レベルが２に設定され、これによって、ループ０が初期設定なしで連続的に実行されることが可能になる。これは、ループが完了するまで、実行レベルが常にＯＰ１のＯＰレベルと等しいからである。
【０２３９】
ループが実行されているときは、読み出された各命令に対し、ジャンプが必要かどうかのチェックが行われることが望ましい。構成バッファは、ジャンプ操作のジャンプ先である命令バッファ・アドレスを格納する。ループがその最終アドレスにまだ達していない場合、ジャンプ・アドレスは、命令バッファ内の命令をフェッチするための次のアドレスとして動作する。
８．２  ループから出る
この例では、ループから出ることは、構成を変更することも伴う。図１５の例では、ループ１の完了後に、処理がループ２に戻る。この場合は、ループ２のためのアドレスが更新されなければならないので、構成は、ループ２について設定される。
８．３  バッファ・アドレス制御
各ループの最終操作に対しては、関連付けられたジャンプ・アドレスが与えられる。ジャンプ・アドレスは、現在のループが完了していない場合にジャンプすべき先のアドレスを指定する。この具体例では更に、ループが、その最終操作が現在の操作である最終ループかどうかを示すフラグが、各ループにアタッチされる。
【０２４０】
図１７は、上述の例の図を示す。
８．４  アドレス・スキーム構成
１つのテスト・ステップは、複数のループを有することが可能であり、各ループは、異なるアドレス・スキームを有することが可能である。従って、この例の各ループは、その構成をプログラマブルＭＢＩＳＴコントローラに格納することが望ましい。望ましいアドレス・スキームは、この例では、２つの部分、即ち、アドレス方向とアドレス関係とからなる。アドレス方向は、アドレスがどのように変更されるか（例えば、列アドレス指定、行アドレス指定、その他）を指定する。アドレス関係は、アドレスが別のアドレスとどのように関連付けられるかを指定する（例えば、特定レベルのアドレスは、より低いレベルの別のアドレスの関数であることが可能である（図１２を参照））。例えば、ループ０（レベル２）内のアドレスは、ループ４（レベル０）内のアドレスの関数であることが可能である。しかしながら、この例では、ループのアドレスは、より高いレベルのループを入れ子にしない、より低いレベルのループの中のアドレスの関数にならないことが望ましい。例えば、ループ１内のアドレスは、ループ３内のアドレスの関数にならない。この場合、アドレスがレベルＬ−１のループにあれば、アドレスの関係の最大数は、Ｌ−１である。多くの現実的又は実用的なアルゴリズムでは、このループ関係は、より一層簡略化される。例えば、場合によっては、レベル０のループと、現在のループを直接の入れ子にするループとにのみ、アドレスが関連付けられることがある。このような場合は、ループ関係が２つだけであり、命令設計は簡略化される。
【０２４１】
アドレス・スキームの総数が１６であり、ステップ内のループの総数が８である場合、全てのアドレス命令を記録するのに必要なレジスタの数は、１２８である。オーバヘッド要件を減らすために、アドレス構成命令は、プリデコードされる必要はない。このプリデコードは、４８個のレジスタを使用するであろう。この場合、アドレス構成命令は、必要な場合（例えば、ループに入り、ループから出る場合（図１８を参照）のみデコードされる。
８．５  構成変更制御
８．５．１  初期設定
ループに入る場合は、一般に初期設定が必要である。図１９は、ループの開始操作に初期設定構成インデックスをアタッチすることを伴うアプローチを示す。例えば、ＯＰ２に達した場合である。
８．５．２  ループから出る
ステップ内のループは、それぞれの最終操作によって順序付けられることが望ましく、構成は、同じ順序で構成バッファに格納されることが望ましい（例えば、図２０の構成バッファ８８０を参照）。このアプローチでは、ループから出たときに、次の構成が、必ず、構成バッファ内の次の構成である。例えば、ループ０が完了すると、処理は、自動的にループ２に移動する。
８．６  追加サイクル
上述の説明から明らかであるように、これらの、後の方の代替実施形態の図示されたアプローチでは、ループに入るときとループから出るときとに、追加のテスト・サイクルが必要である。つまり、ループが別のループを入れ子にしない場合は、最高速度のテストが実現されるが、ループが別のループを入れ子にする場合には、これらの、後の方の代替実施形態のループ間で、最高速度より若干遅い速度のテストが実現される。
８．７  アドレス・ジェネレータ
どのレベルのアドレスも、より高いレベルのループで用いられる可能性があるので、ループの各レベルに対して、少なくとも１つのアドレス・レジスタが用いられることが望ましい。（例えば、図１８の８５０のように）各レベルに対して１つのアドレス・レジスタが用いられることが望ましいが、減算や加算のような演算のためのアドレス・ロジックは、異なるレベルのアドレス・レジスタ間で共用されることが可能である。レベルの数が増えるにつれ、ロジックの共用は、速度低下をもたらす。そのため、各レベルに対して少なくとも１つのアドレス・ジェネレータを有することが、非常に望ましい場合がある。
８．８  他の部分
命令デコーダ、制御信号ジェネレータ、データ・ジェネレータ、レイテンシ調節器、及び出力応答アナライザのメカニズムは、既に説明された基本実施形態と同様であってよく、従って、本明細書のこの部分では、詳細には説明しない。
９．０  ＡＴＥとの相互作用
一例示的実施形態によれば、命令は、複数のブロックに分けられることが望ましい。各ブロックは、１つのタイプの命令（構成命令又はアルゴリズム命令）だけを含むことが望ましい。
【０２４２】
構成命令のブロックは、アルゴリズム命令が間にない、連続する構成命令のシーケンスを含むことが望ましい。アルゴリズム命令のブロックは、（アルゴリズムの最初のブロックでない場合は）構成ブロックに進むことが望ましく、別のブロックは、（アルゴリズムの最後のブロックでない場合は）構成ブロックに続くことが望ましい。
【０２４３】
アルゴリズム命令のブロックは、通常、１つのテスト・ステップを含む。しかしながら、例えば、現在のステップに続くステップが操作を１つしか有しない場合、そのステップは、ブロックを形成するために現在のステップと結合されることが可能である。
【０２４４】
命令は、命令メモリが満杯でない限り、まず命令メモリにロードされることが望ましい。
命令メモリ内の命令は、その後、デコードされ、分類されてから、構成デコーダによってデコードされるか、命令バッファにロードされる。１つのブロックが処理されると、ロード要求がＡＴＥに送られることが望ましい。ＡＴＥは、まだロードされていない命令が残っていれば、追加データを命令メモリにロードする。
【０２４５】
その一方で、命令バッファに命令があれば、テスト・ステップが実行されることが望ましい。結果として、命令をロードする時間は、実質的に隠される。ＡＴＥの命令ロードによる干渉を避けるために、ＡＴＥによってロードが実行されているときは、命令メモリから読み出された命令が、ＮＯＰに設定される。
【０２４６】
望ましい形態のフィールド・プログラマブルＭＢＩＳＴコントローラのロード要求は、ブロック・ベースであること（例えば、１つのブロックが処理された後に、ＭＢＩＳＴコントローラによってロード要求が発行されること）が望ましいことに注意されたい。ＡＴＥから命令メモリへのロードでは、ブロック全体を命令メモリにロードする必要はない。
【０２４７】
ＡＴＥが命令メモリにロードできる命令の数は、例えば、プログラマブルＭＢＩＳＴコントローラによって処理されたばかりの命令の数によって決定されることが可能である。この数を決定することには、次のような、２つの例示的バージョンがある。
（１）これらの数は、ＡＴＥにロードされるファイル（ｂｌｏｃｋ＿ｂｏｕｎｄ）に格納される。このバージョンでは、命令メモリ全体がシフト・レジスタ８９０を含み、命令はメモリにシフト・インされる（図２１）。或いは、
（２）この数は、ブロックが読み出されたときに、プログラム・カウンタ（ＰＣ）から直接進めされる。その後、プログラマブルＭＢＩＳＴコントローラは、命令メモリが再度満杯になるまで、ＡＴＥからのロードを要求する。このバージョンでは、９ビットのシフト・レジスタが１つしかない。１つの命令がまずシフト・レジスタにシフト・インされ、その後、その命令は、命令メモリ内にクロッキングされる（図２２の８９６を参照）。
【０２４８】
以下の状況の場合を除き、命令のロード時間は、テスト・ステップ内に隠される（テスト・ステップに必要な時間より短いか等しい時間で実施される）。
（１）命令が最初に命令メモリにロードされる場合。
（２）シンプルな方向構成命令以外の構成ブロックが、２つのアルゴリズム・ブロックの間に位置する場合。
（３）ブロックをロードする時間が長すぎて、１つのテスト・ステップを終了するのに必要な時間より長い時間がロードに必要な場合。
【０２４９】
第３のカテゴリを生み出す状況の一例は、次のとおりである。
ＢＩＳＴクロック周期がＰｂであり、ＡＴＥクロック周期がＰａであり、アドレス範囲がＲであり、命令のワード・サイズが９ビットであるとする。この状況が最も起こりやすいのは、実行されるステップが操作を１つしか含まない場合である。命令メモリにロードされることが可能な命令の数をＮとすれば、Ｎは次式を満たさなければならない。
Ｎ＊９＊Ｐａ＜Ｐｂ＊Ｒ
例えば、Ｎ＜（Ｐｂ／Ｐａ）＊Ｒ／９
この例は、異なる２つのクロックの間の同期時間を考慮していない。比Ｐｂ／Ｐａは、常に１以下である。この比が小さいほど、テストに必要な時間を超えるロードに必要な追加時間を用いずに命令メモリにロードされることが可能な命令の数が少なくなる。即ち、ＡＴＥとＢＩＳＴとの間の速度の隔たりが大きすぎる場合は、命令のロードの完了を可能にするために、テストを一時停止しなければならない可能性がある。
【０２５０】
プログラマブルＭＢＩＳＴコントローラ用外部インターフェースを用いて、ＭＢＩＳＴコントローラの、ＡＴＥとのハンド・シェイク・プロトコルを決定することが可能である。具体的には、相互作用スキームの複雑さは、ＭＢＩＳＴコントローラ内の命令メモリのサイズに依存する。このセクションでは、命令メモリのサイズに制限があると仮定して、アルゴリズムの一部が任意の時点でメモリ内に常駐することと、ＭＢＩＳＴコントローラが、命令バッファにロードされた命令のサブセットを用いて操作を開始することとを可能にする汎用インターフェースについて説明する。
【０２５１】
この実施形態では、ＢＩＳＴセッションを開始するために、ＡＴＥからＭＢＩＳＴコントローラに「ｍｂｉｓｔ＿ｓｔａｒｔ（ＭＢＩＳＴ＿開始）」信号が配信される。同様に、この例では、ＭＢＩＳＴコントローラに対して「ｓｔｏｐ（停止）」信号をアサートして、アルゴリズムの終わりを通知するために、命令セット内の「停止」命令が利用される。更に、この具体例では、ＭＢＩＳＴコントローラは、以下の３つの状況において、ＡＴＥと相互作用を行う。
１．ＡＴＥが、命令を命令メモリにロードする必要がある。
２．ＭＢＩＳＴコントローラがＡＴＥに診断データを送っている。
３．保持テストが進行中であり、ＭＢＩＳＴコントローラが再開信号を待っている。
９．１  テスト・アルゴリズムのロード
９．１．１  自走メモリ・ロード・クロック
この実施形態でのＡＴＥの役割は、ＭＢＩＳＴコントローラの命令メモリに命令をロードすることである。命令メモリは、任意のサイズであってよく、所与のアルゴリズムの面積オーバヘッドとテスト適用時間との間で最適になるように選択されることが可能である。この例では、命令を命令メモリにロードするために、ＡＴＥによって用いられることが可能な信号が３つあり、それらは、ｌｏａｄ＿ｃｌｏｃｋ（ロード・クロック）、ｌｏａｄ＿ｅｎａｂｌｅ（ロード・イネーブル）、及びｌｏａｄ＿ｄａｔａ（ロード・データ）である（図２３）。ｌｏａｄ＿ｃｌｏｃｋ信号は、ＭＢＩＳＴコントローラ内の診断クロックによって共用されることが可能であり、ｌｏａｄ＿ｄａｔａ信号は、この例では、実際の命令データをコントローラに与える、単一ビットのシリアル入力である。ｌｏａｄ＿ｒｅｑｕｅｓｔ（ロード要求）信号は、ＭＢＩＳＴコントローラによって使用され、ＡＴＥが命令のロードを開始できるようになったことを、ＡＴＥに通知する。
【０２５２】
この例では、命令メモリのサイズがアプリオリに知られているので、ＡＴＥは、最初に命令メモリを満杯にする。ＭＢＩＳＴコントローラは、命令メモリ内の命令のデコードを開始し、アルゴリズム命令を内部命令バッファにロードする。この手順は、ループ境界が遭遇されるまで、或いは、命令メモリ内の全ての命令のフェッチが完了するまで、続行される。この例では、ＭＢＩＳＴコントローラは、以下の２つの状況において、ｌｏａｄ＿ｒｅｑｕｅｓｔ信号をアサートすることによって、追加命令をＡＴＥに要求する。
ａ）「ループ・オフセット」命令の後に非ループ・オフセット命令が見つかった。
ｂ）命令メモリ内の全ての命令のフェッチが完了している。
【０２５３】
この例のロード手順の波形を、図２４に示す。ｂｌｏｃｋ＿ｒｅａｄ＿ｄｏｎｅ（ブロック読み出し完了）がアサートされ、ｌｏａｄ＿ｃｌｏｃｋによって同期されると、ｌｏａｄ＿ｒｅｑｕｅｓｔ信号がアサートされる。ｌｏａｄ＿ｅｎａｂｌｅは、命令をロードするために、ＡＴＥによってアサートされる。ＭＢＩＳＴコントローラは、ＡＴＥからのロードを検知すると、ｂｌｏｃｋ＿ｒｅａｄ＿ｄｏｎｅ信号をデアサートする。命令メモリが満杯になると、ｌｏａｄ＿ｒｅｑｕｅｓｔ信号がデアサートされ、ＡＴＥが、ｌｏａｄ＿ｅｎａｂｌｅも同様にデアサートする。この波形例では、ｌｏａｄ＿ｒｅｑｕｅｓｔとｌｏａｄ＿ｅｎａｂｌｅとが同時にアサートされているが、ＡＴＥがｌｏａｄ＿ｒｅｑｕｅｓｔ信号を検出するのに時間がかかるため、ｌｏａｄ＿ｅｎａｂｌｅは、ずっと後にアサートされてもよい。
９．１．２  オン・デマンドのメモリ・ロード・クロック
この例では、命令を命令メモリにロードするために、ＡＴＥによって用いられる信号が２つあり、それらは、ｌｏａｄ＿ｃｌｏｃｋ及びｌｏａｄ＿ｄａｔａである（図２５）。ｌｏａｄ＿ｄａｔａ信号及びｌｏａｄ＿ｒｅｑｕｅｓｔ信号は、例えば、前述と同様であってよい。
【０２５４】
ｌｏａｄ＿ｒｅｑｕｅｓｔ信号は、この例では、命令メモリが空の場合のみアサートされる。ＡＴＥが命令メモリを満杯にし始めるのは、ｌｏａｄ＿ｒｅｑｕｅｓｔ信号がアクティブなときだけである。ＡＴＥが命令をロードしているのをコントローラが検知すると、ｌｏａｄ＿ｒｅｑｕｅｓｔ信号がデアサートされる。
【０２５５】
ＡＴＥは、この例では、実際の命令データをコントローラに送る前に、同期シーケンス「０１」を送り、これによって、ＭＢＩＳＴコントローラが、命令データがシフト・インされることを確認できる。
【０２５６】
ＡＴＥは、ＭＢＩＳＴコントローラに送られるｌｏａｄ＿ｃｌｏｃｋのクロック・サイクル数を制御することが望ましく、これは、少なくとも、命令メモリ内のビット数に３を加えたものでなければならず、そのうち、２サイクルは、同期シーケンス用であり、１サイクルは、命令ワード全体が一時シフト・レジスタにシフト・インされた後にデータを一時シフト・レジスタから命令メモリに動かすために用いられる。ＭＢＩＳＴコントローラは、この例では、より多くのクロック・サイクルが送られても、それらが同期シーケンス（「０１」）でない限り、正常に動作する。
【０２５７】
図２５のインターフェースのためのプロトコルの場合の波形を、図２６に示す。
９．２  診断モニタ
一実施形態では、必須ではないが、診断データを取り込み、故障データをＡＴＥにシフト・アウトするために、診断モニタが用いられることが望ましい。一形態では、診断モニタは、一方がＢＩＳＴクロック・ドメインで動作し、もう一方が診断クロック・ドメインで動作する、２つの有限状態機械（ＦＳＭ）を備えることが望ましく、それらだけで構成されることが更に望ましい。以下では、この２つのＦＳＭについて説明する（図２７及び２８を参照）。
９．２．１．ｃｏｎｔ＿ｓｔａｔｅ（ＢＩＳＴクロック・ドメインＦＳＭ）
ＣＯＮＴ＿ＩＤＬＥ（制御＿アイドル）状態のｃｏｎｔ＿ｓｔａｔｅ（制御状態）  ＦＳＭによって故障が見つかると、このＦＳＭは、ＣＯＮＴ＿ＳＣＡＮ（制御＿スキャン）状態に移り、ｄｉａｇ＿ｓｔａｔｅ（診断状態）  ＦＳＭに向けてｓｔａｒｔ＿ｄｉａｇ（診断開始）信号を発行する。診断データがシフト・アウトされると、同期しているｄｉａｇ＿ｄｏｎｅ（診断完了）信号がｄｉａｇ＿ｓｔａｔｅ  ＦＳＭから送られる。この信号により、ｃｏｎｔ＿ｓｔａｔｅ  ＦＳＭは、ＣＯＮＴ＿ＳＣＡＮ状態からＣＯＮＴ＿ＳＹＮ（制御＿同期）状態に動く。同期した信号ｄｉａｇ＿ｄｏｎｅがローになり、リスタート信号（ｉｎｔ＿ｒｅｓｔａｒｔ）がアサートされると、ＣＯＮＴ＿ＳＹＮ状態がＣＯＮＴ＿ＩＤＬＥ状態に戻る。これは、ｓｔａｒｔ＿ｄｉａｇがローになり、ｄｉａｇ＿ｓｔａｔｅ  ＦＳＭによってイベントが確認されているが、同時に、第２の故障が検出されたことを示す。しかしながら、ＣＯＮＴ＿ＳＹＮ状態においてリスタート信号がアサートされない場合、ｃｏｎｔ＿ｓｔａｔｅは、ＣＯＮＴ＿ＲＥＣ（制御＿記録）状態に入る。この場合、状態機械は、リカバリ・サイクルが指定の数になるまで待機する。このＦＳＭがＣＯＮＴ＿ＲＥＣ状態にあるときに故障が検出された場合、ＦＳＭは、再度ＣＯＮＴ＿ＳＣＡＮに入って、ＣＯＮＴ＿ＲＥＣ状態において検出された最初の故障をシフト・アウトするか、ＣＯＮＴ＿ＩＤＬＥ状態に戻る。
【０２５８】
リカバリ・サイクルは、プログラマブルＭＢＩＳＴコントローラの生成時に、ユーザによって制御されることが可能である。これらのサイクルは、ＡＴＥにとって、ｆａｉｌ＿ｆｌａｇ（故障フラグ）が適正にサンプリングされることが可能であるよう十分に長くなければならない。
【０２５９】
ＭＢＩＳＴコントローラＦＳＭがＣＯＮＴ＿ＳＣＡＮ状態又はＣＯＮＴ＿ＳＹＮ状態にあって、新たな故障がＭＢＩＳＴコントローラによって検出された場合、或いは、ＭＢＩＳＴコントローラＦＳＭがＣＯＮＴ＿ＲＥＣ状態にあって、複数の故障が検出された場合には、リスタート信号がアサートされる。これは、リスタート手順を導き、それによって、セクション９．２．２で後述されるセーフ・ポイントからアルゴリズムの実行が開始される。
９．２．２．ｄｉａｇ＿ｓｔａｔｅ（診断クロック・ドメインＦＳＭ）
ＤＩＡＧ＿ＩＤＬＥ（診断＿アイドル）状態にあるＦＳＭによって、同期したｓｔａｒｔ＿ｄｉａｇが確認されると、ｄｉａｇ＿ｓｔａｔｅ（診断＿状態）  ＦＳＭは、ＤＩＡＧ＿ＳＨＩＦＴ（診断＿シフト）状態に移り、この状態において、診断データがＡＴＥにシフト・アウトされる。全てのデータがシフト・アウトされると、ｄｉａｇ＿ｓｔａｔｅ  ＦＳＭは、ＤＩＡＧ＿ＳＹＮ（診断＿同期）状態にシフトし、この状態において、このＦＳＭは、ｓｔａｒｔ＿ｄｉａｇ信号がローになるのを待つ。同時に、ｄｉａｇ＿ｄｏｎｅ信号がｃｏｎｔ＿ｓｔａｔｅ  ＦＳＭに送られる。診断ＦＳＭは、同期したｓｔａｒｔ＿ｄｉａｇがローになるのを確認すると、ＤＩＡＧ＿ＩＤＬＥ状態に移り、新しいｓｔａｒｔ＿ｄｉａｇ信号を待つ。
【０２６０】
これらの例示的な２つのＦＳＭの状態遷移図を、図２７及び２８に示す。
内部診断−データ・シフト・クロックは、この例では、図２９を参照することによってわかるように、診断データの取り込み及びシフト・アウトの両方を行うために、ＭＢＩＳＴクロック及び診断クロックから生成されることが望ましいことに注意されたい。
【０２６１】
図２９に示すように、この例では、２つの信号ｅｎａｂｌｅ＿ｄｉａｇｃｌｋ（診断クロック・イネーブル）及びｅｎａｂｌｅ＿ｂｉｓｔｃｌｋ（ＢＩＳＴクロック・イネーブル）が、診断レジスタに入力されるクロックを選択するために生成される。図２９の、オプションの２つのＡＮＤゲートは、２つのクロックが切り替えられる際に起こりうるグリッチを避けるために用いられる。これらのＡＮＤゲートがオプションであるのは、起こりうるグリッチがロジック動作の正しさに影響を及ぼさないためである。診断クロック信号は、同期したｓｔａｒｔ＿ｄｉａｇ信号が診断クロック・ドメインＦＳＭによって確認されたときにイネーブルになり、ｄｉａｇ＿ｄｏｎｅ信号がアサートされたときにディスエーブルになる。ＭＢＩＳＴクロックは、ｓｔａｒｔ＿ｄｉａｇ信号がアサートされたときにディスエーブルになり、同期したｄｉａｇ＿ｄｏｎｅ信号がハイからローになったときにイネーブルになる。
【０２６２】
診断モニタの幾つかの信号を、図３０に示す。
図３０に斜体で示された信号は、診断クロック・ドメインにある。図３０の他の信号（非斜体）は、ＢＩＳＴクロック・ドメインにある。
９．３  診断データのスキャン・アウト
９．３．１  テスト・プログラムの先頭からのリスタート
一例示的実施形態では、ＡＴＥとＭＢＩＳＴコントローラとの間の診断インターフェースの一部として、４つの信号が用いられ、それらは、ＡＴＥからの自走ｄｉａｇ＿ｃｌｏｃｋと、ｄｉａｇ＿ｄｏｕｔ信号と、ｒｅｓｔａｒｔ（リスタート）信号と、コントローラからのｆａｉｌ＿ｆｌａｇ信号とである（図３１を参照）。図３１のＦＰ−ＭＢＩＳＴは、フィールド・プログラマブルＭＢＩＳＴを意味する。
【０２６３】
データの不一致が見つかると、ｓｔａｒｔ＿ｄｉａｇ信号がハイになり、ｆａｉｌ＿ｆｌａｇ信号がアサートされる。ｆａｉｌ＿ｆｌａｇは、この例では、ｓｔａｒｔ＿ｄｉａｇが０に戻ったときにデアサートされる。
【０２６４】
この例では、診断データは、ＡＴＥにシリアルにスキャン・アウトされる。いったん同期され、診断クロック・ドメインＦＳＭによってｓｔａｒｔ＿ｄｉａｇ信号が確認されると、パディング・ビット又は同期ビットの「１」が最初にＡＴＥに送られる。この実施形態では、実際の診断データは、同期ビットに追従する。診断が終了すると、この例では、ＡＴＥに送出される診断データは、常に「０」になる。これは、クロックが常に動作しているためである。
【０２６５】
最初の故障のスキャン・アウトの途中で新たな故障が検出された場合は、診断モニタ９００からＭＢＩＳＴコントローラに「ｒｅｓｔａｒｔ（ＩＮＴ）」信号が送られる。ＭＢＩＳＴコントローラは、現在の状態をリスタート・ポイントとして保存し、ｒｅｓｔａｒｔ（ＥＸＴ）信号をＡＴＥに送る。ｒｅｓｔａｒｔ（ＥＸＴ）信号は、ロード・クロック（低速クロック）の完全な１サイクルに対してアサートされる。このスキームは、テスト・プログラムの先頭からの信号リロード命令にＡＴＥが応答できることが前提である。現在の診断データ９０２が、いったんＡＴＥに完全にシフト・アウトされると、ＭＢＩＳＴコントローラは、この例では、テスト・プログラムの実行を再度開始する。ＭＢＩＳＴコントローラは、既にＡＴＥにシフト・アウトされている故障を全てスキップしてから、最後にシフト・アウトされたエラーに達する。
【０２６６】
この実施形態の場合の例示的波形を、図３２に示す。
９．３．２  テスト・ステップの先頭からのリスタート（デフォルト動作）
この実施形態の例では、ＡＴＥとＭＢＩＳＴコントローラとの間の診断目的に用いられる信号が３つあり、それらは、ＡＴＥからＭＢＩＳＴコントローラへのｄｉａｇ＿ｃｌｏｃｋと、ＭＢＩＳＴコントローラからＡＴＥへのｄｉａｇ＿ｄｏｕｔ信号及びｆａｉｌ＿ｆｌａｇとである（図３３を参照）。
【０２６７】
この実施形態では、診断データは、ｄｉａｇ＿ｄｏｕｔピンからＡＴＥにシリアルにスキャン・アウトされる。ｓｔａｒｔ＿ｄｉａｇ信号の同期したバージョンが診断クロックＦＳＭにおいていったん確認されると、（前のケースと同様の）パディング・ビット「１」が、最初にＡＴＥに送られる。このビットの後に、実際の診断データが、ＡＴＥにシリアルに送られる。診断が終了すると、この例では、ＡＴＥに送出される診断データは、新たな診断データが用意されるまで、常に「０」になる。あまり望ましくないが、ＡＴＥからのデータのパラレル配信も可能である。
【０２６８】
最初の故障データのスキャン・アウトの途中で新たな故障が検出された場合は、診断モニタからＭＢＩＳＴコントローラに「ｒｅｓｔａｒｔ」（ＩＮＴ）信号が送られる。ＭＢＩＳＴコントローラは、現在の状態をリスタート・ポイントとして保存する。現在の診断データが、いったんＡＴＥに完全にシフト・アウトされると、ＭＢＩＳＴコントローラは、現在のテスト・ステップの先頭からのリスタート操作を実行する。
【０２６９】
このアプローチでは、リスタート手順は、通常、２つのステップ、即ち、メモリの再初期設定と、現在のテスト・ステップの先頭からのリスタートとを含む。再初期設定ステップは、現在のテスト・ステップが実行される前に、メモリ内の値を回復する。例えば、テスト・ステップ（ｒ０，ｗ１，ｒ１）で連続した２つの故障が検出された場合は、メモリを「０」に再初期設定してからテスト・ステップを再度実行することが可能である。再初期設定ステップは、この例では、現在のテスト・ステップと同じデータ・パターン及びアドレス指定スキームを用いて、テストされるメモリの全体を初期設定する。しかしながら、現在のテスト・ステップに書き込み操作が含まれない場合は、初期設定ステップをスキップすることが望ましい。例えば、テスト・ステップが（ｒ０）であって、リスタートが必要な場合は、テスト・ステップが再実行されるが、再初期設定ステップはスキップされる。この実施形態では、ＭＢＩＳＴコントローラは、テスト・ステップに書き込み操作が含まれるかどうかを自動的に検知する。
【０２７０】
診断クロックは、自走クロックであっても、ＡＴＥからコントローラにオン・デマンドで送られるクロックであってもよい。後者の場合、この例では、ＡＴＥは、ｆａｉｌ＿ｆｌａｇ信号がアサートされたときに、ｄｉａｇ＿ｃｌｏｃｋをコントローラに送る。ＡＴＥは、ｆａｉｌ＿ｆｌａｇがいったんデアサートされると、ｄｉａｇ＿ｃｌｏｃｋをディスエーブルにする。
【０２７１】
図３２は、このアプローチの場合の例示的波形を示している。この例では、リスタート操作をサポートしても、ＡＴＥに対するインターフェースは変わらない。
９．３．３  診断データのフォーマット
診断データの例示的フォーマットは、次のように表すことができる。
【０２７２】
【数１７】
2008521159.tif 000030
【０２７３】
このフォーマット例では、ＰＣは、故障を検出するテスト・ステップの最初の命令の命令番号に対応する。変数「ｂｕｆ＿ｃｏｕｎｔ」は、テスト・ステップ内の操作番号を表す。アドレス［０：ＮＵＭ＿ＬＥＶＥＬ−１］の値は、アドレス０、アドレス１、・・・、アドレスＮＵＭ＿ＬＥＶＥＬ−１に対応し、ＮＵＭ＿ＬＥＶＥＬは、アドレスのレベルの数を意味する。ｆａｉｌ＿ｍａｐデータは、期待データと、メモリ出力からの実際のデータとのＸＯＲに対応する。全てのレベルのアドレスが使用されているわけではない場合は、使用されていないアドレスが０に設定される。報告されたアドレスは、イントラ反復アドレス計算の前のアドレスに対応することに注意されたい。
【０２７４】
例えば、次のテスト・プログラムを考える。
【０２７５】
【数１８】
2008521159.tif 000031
【０２７６】
データのビット数を８、アドレスのビット数を４とし、２レベルのアドレスが実装されているとする。更に、この例では、命令バッファ内の可能な命令の数は８（従って、ｂｕｆ＿ｃｏｕｎｔは３ビット）であり、テスト・プログラム内でサポートされる命令の最大数は２５６（従って、ＰＣは８ビット）である。
【０２７７】
命令８がアドレス１２で故障を検出した場合、ｆａｉｌ＿ｍａｐは、８’ｂ００００００１０であり、ＰＣは、５に等しく（命令５が、故障を検出するテスト・ステップの最初の命令であるため）、ｂｕｆ＿ｃｏｕｎｔは、２に等しく（テスト・ステップの操作２が故障を検出したため）、アドレス０は、１２に等しく（そのアドレスで故障が検出されたため）、アドレス１は、０に等しい（テスト・ステップが１つのレベルだけを有し、アドレス１が使用されないため）。
【０２７８】
従って、スキャン・アウトされるデータは、次のとおりである。
［１，  ０００００１１１，  １１００，  ００００，  ００００００１０］
このアプローチでは、ＡＴＥは、実際の診断データの前にパディング・ビット「１」を受け取る。
【０２７９】
後述するように（セクション１０を参照）、Ｍａｒｃｈ専用バージョンのＭＢＩＳＴコントローラの場合は、アドレス・レジスタが１つだけ使用され、シフト・アウトされることが望ましい。このＭａｒｃｈ専用バージョンのＭＢＩＳＴコントローラでは、シフト・アウトされたデータは、次のとおりである。
［１，  ０００００１１１，  １１００，  ００００００１０］
９．３．４  診断クロック及びメモリ・ロード・クロックの共用
命令メモリのロード・クロック及び診断クロックは、同じ入力ピン「ｓｈｉｆｔ＿ｃｌｋ（シフト・クロック）」を共用することが可能である。これらのクロックが自走でない場合、「ｓｈｉｆｔ＿ｃｌｋ」は、要求に応じて（ｌｏａｄ＿ｒｅｑｕｅｓｔがあった場合、ｆａｉｌ＿ｆｌａｇがアサートされた場合、又はその両方）コントローラに送られることが可能である。
９．３．５  保持テスト・インターフェース
保持テストの場合、一例では、ＭＢＩＳＴコントローラとＡＴＥとの間で伝達される２つの信号を伴うハンド・シェイク・メカニズムが使用されることが可能である。ＰＡＵＳＥ（一時停止）命令は、この例では、保持テストのために用いられる。内部的には、命令がデコードされるとただちに、保持テストの開始を通知するｐａｕｓｅ（一時停止）信号が、ＭＢＩＳＴコントローラとＡＴＥとに発行される。ＭＢＩＳＴコントローラは、応答として、「ホールド」状態に移り、ＡＴＥは、この例では、ＭＢＩＳＴセッションを再開するためにはｒｅｓｕｍｅ（再開）信号がＭＢＩＳＴコントローラに送られる必要があることを認識する。ｒｅｓｕｍｅ信号がＡＴＥによってアサートされると、ＭＢＩＳＴセッションの再開が、ＭＢＩＳＴコントローラに通知される。
【０２８０】
例示的なｐａｕｓｅインターフェース信号及びｒｅｓｕｍｅインターフェース信号の波形を、図３４に示す。ｐａｕｓｅ信号は、ｒｅｓｕｍｅ信号がアサートされたことがコントローラによって確認されると、デアサートされる。ｒｅｓｕｍｅ信号は、ｐａｕｓｅ信号がデアサートされると、デアサートされる。この例では、ｒｅｓｕｍｅ信号が次のｐａｕｓｅの前にデアサートされさえすれば、ｐａｕｓｅがデアサートされる時刻とｒｅｓｕｍｅがデアサートされる時刻との間に厳密なタイミング関係は不要である。
１０．０  コントローラの生成
新しいプログラマブルＭＢＩＳＴコントローラは、好適なＥＤＡツールによって生成（プログラム）されることが可能である。そのようなツールの一例が、ＭＢＩＳＴ  Ａｒｃｈｉｔｅｃｔである。プログラマブルＭＢＩＳＴコントローラは、そのようなツールの既存メモリＭＢＩＳＴ挿入フローにおいて直接使用されることが望ましい。
【０２８１】
プログラマブルＭＢＩＳＴコントローラが生成されると、基本テスト・ベンチとテスト・ベクトルのセットとが生成されることが可能である。これらは、ＭＢＩＳＴコントローラの正常な機能性を示すために実行されることが可能である。テスト・ベンチ及びテスト・ベクトルは、ＭＢＩＳＴコントローラに関連付けられたメモリに対して特定のメモリ・テスト・アルゴリズムを実行させないように、設計されることが可能である。
【０２８２】
ＭＢＩＳＴコントローラＨＤＬを完全に書くこと、並びに他の従来型ファイルと同様に、ＭＢＩＳＴコントローラの新しいビューが、このＥＤＡツールによって生成されることが可能である。この新しいツールは、ＭＢＩＳＴコントローラの、生成時の構成状態の永続的なバージョンを収容することが可能である。
【０２８３】
ＭＢＩＳＴコントローラの永続的な状態がロードされることが可能であり、メモリ・テスト・プログラムは、テキスト表現から、ＭＢＩＳＴコントローラへの適用が可能なテスト・ベンチ及びテスト・ベクトル・セットに変換されることが可能である。この処理の間、メモリ・テスト・プログラムのセマンティック・エラーがチェックされることが可能である。
１１．Ｍａｒｃｈ専用コントローラ
本明細書で開示される技術は、前述のような、より完全にプログラマブルなＭＢＩＳＴコントローラではなく、指定された１つ又は複数のアルゴリズムをサポートするＭＢＩＳＴコントローラを提供するように適合されることが、容易に可能である。一例として、例えばエンド・ユーザの要望に応じて、信号タイプのアルゴリズムをサポートするように、アーキテクチャを修正及び簡略化することが可能である。このアプローチの有利な例を、Ｍａｒｃｈ専用コントローラに関して、以下で説明する。Ｍａｒｃｈ専用コントローラは、Ｍａｒｃｈタイプのアルゴリズムだけをサポートする。このタイプの専用コントローラは、既に説明されたフィールド・プログラマブルＭＢＩＳＴコントローラのアーキテクチャの、Ｍａｒｃｈアルゴリズムの過度に単純化された性質による簡略化を考慮している。
１１．１  命令セット
アルゴリズム命令の場合、この例では、ビット［７：６］は使用されない。３つのイントラループ・アドレス操作方法（アドレス、アドレス＋インデックス、及びアドレス−インデックス）が使用される。この例では、データは、データ・バックグラウンドであってもデータ・バックグラウンドの反転であってもよい。メモリ操作は、読み出し操作であっても、比較なしの読み出し操作であっても、書き込み操作であってもよい。
【０２８４】
例示的アルゴリズム命令を、表７に示す。
【０２８５】
【表９】
2008521159.tif 000032
【０２８６】
構成命令の場合、この例では、アドレス指定スキームは、行アドレス指定と列アドレス指定の２つしかない。Ｍａｒｃｈアルゴリズムにはアドレス指定のレベルが１つしかないので、アドレス関係はない。このＭＢＩＳＴコントローラの例示的構成命令を、表８に示す（Ｍａｒｃｈアルゴリズムのサポートだけのために実装される命令は、太字で強調されている）。Ｍａｒｃｈアルゴリズムのテスト・ステップは、ステップ内の全ての操作が完了した後、必ず最初の操作にジャンプして戻るので、命令「ループ・オフセット」は、常にオフセット「０」を有することに注意されたい。
【０２８７】
命令の詳細な説明については、前述の図３Ａ及び表４の説明を参照されたい。
【０２８８】
【表１０−１】
2008521159.tif 000033
【０２８９】
【表１０−２】
2008521159.tif 000034
【０２９０】
１１．２  ハードウェア設計
アーキテクチャの最高レベル図は、図４と同じであってよい。
そのロジック・ブロックは、以下のように説明される。
１１．２．１  命令メモリ
Ｍａｒｃｈ専用ＭＢＩＳＴコントローラの一形態では、命令メモリは、プログラマブルＭＢＩＳＴコントローラと、ＭＢＩＳＴコントローラによって実行される命令シーケンスのソースとの間のバッファである。命令メモリは、（例えば、８ビット・ワードの）レジスタ・ファイルから形成される。命令メモリのサイズは、増減が可能である。
１１．２．２  命令デコーダ
例示的Ｍａｒｃｈ専用ＭＢＩＳＴコントローラの命令デコーダには、次の２つの論理機能がある。
・命令がアルゴリズム命令か構成命令かを決定する。
・構成命令をデコードする。
【０２９１】
第１の決定は、先述のように、単純に命令ワードのビット０を検査することによって行われることが可能である。ビット０が「０」に設定されていれば、命令は構成命令であり、そうでなければ、アルゴリズム命令である。
【０２９２】
全ての構成命令のデコードは、この例では、命令ワードの最上位ビットを検査して具体的な構成命令を特定することによって行われることが可能である。ほとんどの構成命令に対して、ＭＢＩＳＴコントローラの状態は即座に更新される。アドレス構成命令は、別の方法で処理されることが望ましい。そのような命令は、部分的にデコードされ、その後、ステップ・コントローラに渡されて、更にデコードされることが可能である。
１１．２．３  ステップ・コントローラ
このＭａｒｃｈ専用ＭＢＩＳＴコントローラの例のステップ・コントローラは、一形態では、１ステップ分のプリデコードされたアルゴリズム命令と、ステップのためのアドレス構成とを記憶し、テスト・ステップの実行を制御する。ステップ・コントローラは、４つのサブブロック、即ち、命令バッファ及びバッファ制御と、アドレス構成バッファと、アドレス構成デコーダと、アルゴリズム命令デコーダとを備えるか、これらで構成される。ステップ・コントローラの例示的形態の詳細図は、既に図８で示されている。
【０２９３】
命令バッファ及びバッファ制御ブロック５００は、この例では、テスト・ステップの実行のための命令バッファ及び制御ロジックを含む。アドレス構成バッファ５０２は、行アドレス指定又は列アドレス指定のアドレス構成を格納する。アドレス構成デコーダ５０６は、アドレス構成バッファから読み出された構成をデコードし、アルゴリズム命令デコーダ５０４は、命令バッファから読み出されたアルゴリズム命令をデコードする。
【０２９４】
命令バッファのワード・サイズは、この例では５であり、テスト・ステップのアルゴリズム命令のビット［５：１］を格納する。命令バッファ内のワード数は、様々であってよい。例示的なデフォルトの数は、８である。アドレス構成バッファは、例えば、４ビット・レジスタであることが可能である。
【０２９５】
例示的命令バッファ９１０とアドレス構成バッファ９１２とを、図３５に示す。
１１．２．４  アドレス・ジェネレータ
Ｍａｒｃｈ専用データ・ジェネレータの一形態は、２つの部分、即ち、この例ではインター反復アドレス生成部分と、イントラ反復アドレス生成部分とを備えるか、これらで構成される。インター反復アドレス生成部分は、構成命令によって定義されるアドレス指定スキーム（行アドレス指定又は列アドレス指定）に従って、アドレスを更新する。イントラ反復アドレス生成部分は、ビット［５：４］と、インター反復アドレス生成部分によって生成されるアドレスとに基づいて、アドレスを生成する。イントラ反復アドレスは、インター反復アドレスであってもよく、インター反復アドレス±インデックスであってもよい（インデックスは、このバージョンでは、例えば１に設定されることが可能である）。
１１．３  データ・ジェネレータ
このＭａｒｃｈ専用ＭＢＩＳＴコントローラの好適なデータ・ジェネレータは、現在のメモリ操作の現在のメモリ・ロケーションに書き込まれるか、そこから読み出されるデータ値を生成する。
【０２９６】
この例でサポートされる、例示的データ生成スキームのタイプを、以下に列挙する。全てのケースにおいて、データ・バックグラウンド及びデータ・バックグラウンドの反転の両方がサポートされる。構成命令を用いることによって、異なるデータが設定されることが可能である。
【０２９７】
Ｍａｒｃｈアルゴリズムの場合は、塗りつぶしの「０」及び「１」のデータ・バックグラウンドのほかに、ユーザが、全部で（ｌｏｇ２ｗ＋１）個の異なるバックグラウンドの中から、使用可能な任意のバックグラウンドを指定することが可能である（ｗはデータ・ワードの幅）。
【０２９８】
例えば、データ・サイズが８ビットであるメモリは、以下の４個のエンコードされたデータ・バックグラウンドを有する（更に、それらのデータ・バックグラウンドの反転も使用可能になる）。
０  ００００００００
１  ０１０１０１０１
２  ００１１００１１
３  ００００１１１１
比較として、Ｃｈｅｃｋｅｒｂｏａｒｄアルゴリズムの場合は、トポロジカル・データ・バックグラウンド「０１．．．０１」及びその反転が必要とされる。実際のデータ値は、アドレスに依存する。行ストライプ及び列ストライプ・アルゴリズムの場合は、メモリの偶数アドレス及び奇数アドレスに基づいてデータが生成されることが可能である。行ストライプ・アルゴリズムでは、例えば、１回の実行で、偶数行に「１１．．．１１」が書き込まれ、奇数行に「００．００」が書き込まれる。第２の実行では、データ・バックグラウンドが反転される。同様に、列ストライプ・アルゴリズムでは、交互の列がそれぞれ全て１及び全て０を有するようにデータが書き込まれることが可能である。一意データ・アルゴリズムの場合は、対応するメモリ・アドレスが、全てのメモリ・ロケーションの一意データとして用いられる。
１１．４  制御ジェネレータ
このＭａｒｃｈ専用の例の制御ジェネレータの役割は、現在のメモリ・アクセス操作に必要な全ての制御信号を生成することである。これは、最高速度の同期メモリの場合には、命令メモリに格納されたアルゴリズム命令によって直接駆動される、シンプルなメモリ制御信号アサーションであることが可能である。非同期メモリのような、他の場合は、一例では、状態カウンタと、カウンタ状態に基づく制御信号のアクティベーションとが用いられることが可能である。
１１．５  出力応答アナライザ
出力応答アナライザは、メモリから読み出されたデータと、ＭＢＩＳＴコントローラから生成された期待データとを比較する。このアナライザは、一形態では、２つの値を比較する比較器を備えるか、それで構成されることが可能である。メモリの幅が非常に大きい場合は、比較器のロジックの深さが大きくなり、従って、実動作速度のＢＩＳＴ操作を保証するためにパイプライン段が挿入されることが可能である。
【０２９９】
出力応答アナライザは更に、リスタートが必要な場合には、リスタート・ポイントを記憶することが可能である。リスタート・ポイントは、第１の故障の情報がＡＴＥにシフト・アウトされる前に第２の故障が検出されたときの、コントローラの状態である。この情報は、テスト・ステップの操作番号と、メモリ・アドレスとを含むことが可能である。一アプローチでは、アナライザは、コントローラがリスタートを実行していて、リスタート・ポイントに達していない場合には、メモリ出力を比較しない。
１１．６  診断モニタ
好適な診断モニタの例については、先述のセクション９．２を参照されたい。セクション９．１．２のアプローチは、テスト・プログラムのロードと、診断データのスキャン・アウトの両方のために実装されることが可能である。
１２．０  プログラマブルＭＢＩＳＴコントローラの内部の例示的なブロック図及びインターフェース
本明細書のこのセクションでは、モジュール間の例示的インターフェースについて説明する。それらのモジュールは、図４の機能ブロック図から多少変更されている。
【０３００】
図３６は、例示的な最高レベルのインターフェース１０００を示す。この例では、破線で示されたボックスはオプションである。接続モジュール１０１０は、この例では、テストされるメモリ（ＭＵＴ）がＢＩＳＴ対応である場合のオプションである。図３６のモジュールＦＰ−ＭＢＩＳＴの例については、既に詳細に説明されている。この例示的インターフェースの他のオプション・モジュールについては、後述する。
【０３０１】
接続モジュール１０１０は、ＦＰ−ＭＢＩＳＴ（プログラマブルＭＢＩＳＴコントローラ）からテストされるメモリ（ＭＵＴ）への入力インターフェースである。モジュール１０１０は、システム入力及びテスト入力を選択することによってＭＵＴへの入力を生成するＭＵＸを備える。接続モジュールは、ＭＵＴがＢＩＳＴ対応である場合（例えば、ＭＵＴが埋め込みＭＵＸを有する場合）には、省略されるのが一般的である。バイパス・ロジック・モジュール１０２０は、メモリ入力が、特定のロジック（例えば、ＸＯＲツリー及び／又はラッチ）を通ってＭＵＴをバイパスすることを可能にするように設計される。出力ＭＵＸモジュール１０３０は、メモリ出力と、バイパス・ロジックからの信号とを選択する。
【０３０２】
入力及び／又は出力パイプライン・モジュール１０４０、１０５０は、例えば、メモリ入力及び／又はメモリ出力に挿入されたパイプライン・レジスタである。
自動テスト・パターン生成のための幾つかの制御ロジックが、メモリ制御信号入力に更に追加されることが可能である。
【０３０３】
例示的プログラマブルＭＢＩＳＴコントローラ内のモジュール及び内部インターフェースを、図３７に示す。幾つかの信号は、簡潔さのために、ベクトルの形にまとめられている。他の信号は、簡潔さのために省略されている。
【０３０４】
図３７を参照すると、ｍｂｉｓｔ＿ｓｔａｒｔ信号がＢＩＳＴテストを開始し、この信号は、全てのモジュールに伝達される。
命令メモリ・モジュール１０２（図４及び３７）（ＩｎｓｔｒＭｅｍ）は、ＡＴＥからの命令ロードを制御し、命令のブロックを格納する。モジュール１０２は、ｌｏａｄ＿ｒｅｑｕｅｓｔ信号をＡＴＥに送って、命令のロードをＡＴＥに要求する。ｌｏａｄ＿ｄａｔａがＡＴＥから入力される。これは、この例では、命令で構成されるシリアル・データ・ストリームであることが可能である。ロードには、ｓｈｉｆｔ＿ｃｌｋ信号が用いられる。
【０３０５】
プログラム・カウンタ・ジェネレータ１５０（ＰＣＧｅｎ）が、ＩｎｓｔｒＭｅｍ  １０２に対してＰＣを生成する。ＰＣＧｅｎモジュール１５０は更に、ｒｅａｄ＿ｉｎｓｔｒｕｃｔｉｏｎ（命令読み出し）信号、ｉｎｓｔｒｕｃｔｉｏｎ＿ａｖａｉｌａｂｌｅ（使用可能命令）信号、及びｂｌｏｃｋ＿ｒｅａｄ＿ｄｏｎｅ信号を送って、命令メモリ１０２からの命令読み出しを制御する。モジュール１５０は、ｒｕｎ  ｓｔｅｐ（ステップを実行）信号又はｒｅｓｅｔ  ｓｔｅｐ（ステップをリセット）信号を生成して、テスト・ステップを開始したり、新たなテスト・ステップのためにレジスタをリセットしたりする。
【０３０６】
命令デコーダ１０８（ＩｎｓｔｒＤｅｃ）は、ＩｎｓｔｒＭｅｍ  １０２から読み出された命令をデコードし、これらの命令には、データ・ジェネレータ（ＤａｔａＧＥＮ）３００に供給されるｄａｔａ  ｐａｔｔｅｒｎｓ（データ・パターン）／Ｍａｓｋ（マスク）信号と、ステップ・コントローラ１３０のためのステップ制御ロード信号（ｌｏａｄ  ｉｎｓｔｒｕｃｔｉｏｎ（命令をロード）、ｌｏａｄ  ｃｏｎｆｉｇ（構成をロード）、ｌｏａｄ  ｏｆｆｓｅｔ（オフセットをロード））と、アドレス・ジェネレータ（ＡｄｄｒＧｅｎ）１５５のためのアドレス生成ロード信号（ｌｏａｄ  ｉｎｄｅｘ（インデックスをロード）、ｌｏａｄ  ｓｔａｒｔ／ｅｎｄ（開始／終了をロード））と、診断モニタ（Ｄｉａｇ）９００のためのｄｉａｇ＿ｅｎａｂｌｅ（診断イネーブル）／ｒｅｓｔａｒｔ＿ｅｎａｂｌｅ（リスタート・イネーブル）とが含まれる。モジュール１０８は更に、保持テストの開始とＢＩＳＴの終了とを通知する命令からｐａｕｓｅ／ｓｔｏｐ信号を生成する。ＡＴＥから入力されたｒｅｓｕｍｅ信号は、ｐａｕｓｅをデアサートする。
【０３０７】
ステップ・コントローラ１３０は、テスト・ステップの実行を制御する。モジュール１３０は、ｃｕｒｒｅｎｔ  ｌｏｏｐ／ｓｔｅｐ＿ｄｏｎｅ（現在のループ／ステップ完了）信号をＰＣＧｅｎ  １５０に送り、初期設定信号（ｉｎｉｔｉａｌｉｚｅ）をＡｄｄｒＧｅｎ  １５５に送って、ＡｄｄｒＧｅｎ内部のアドレス・レジスタを初期設定し、アドレス生成のためにアドレス指定スキームをＡｄｄｒＧｅｎに送り、信号ｕｐｄａｔｅ（更新）をＡｄｄｒＧｅｎに送って、アドレス更新が必要であることを伝え、データ生成のために信号Ｉｎｖ（反転）（データ極性）信号をＤａｔａＧＥＮに送る。
【０３０８】
データ・ジェネレータ３００（ＤａｔａＧＥＮ）は、ＩｎｓｔｒＤｅｃからの情報（ｄａｔａ  ｐａｔｔｅｒｎｓ／Ｍａｓｋ）、ステップ・コントローラからの情報（Ｉｎｖ）、及びＡｄｄｒＧｅｎからのアドレスに従って、データ及び書き込みマスク信号を生成する。
【０３０９】
レイテンシ調節器４００（ＬａｔｅｎｃｙＡＤＪ）は、生成された信号（Ｄａｔａ（データ）、ｖａｌｉｄ（有効）、Ｒ／Ｗ（読み出し／書き込み）、Ａｄｄｒ（アドレス））の間のレイテンシを、異なるモジュールから調節する。モジュール４００は、ＭＵＴへのテスト入力（例えば、ＴＤａｔａ（テスト・データ）、ＴＡｄｄｒ（テスト・アドレス）、ＴＣＥＮ、及びＴＷＥＮ（テスト書き込みイネーブル））を生成する。
【０３１０】
アドレス・ジェネレータ１５５（ＡｄｄｒＧｅｎ）は、ＭＵＴへのアドレスを生成する。モジュール１５５は、行われたループが完了しているかどうかをチェックし、完了していれば、ｌｏｏｐ＿ｄｏｎｅをアサートする。このモジュールは更に、アドレスが範囲外かどうかを、信号ｉｇｎｏｒｅ（無視）を用いて示す。
【０３１１】
出力応答アナライザ４５０（ＯＲＡ）は、期待データとメモリ出力とを比較し、内部故障信号（ｆａｉｌｕｒｅ）を生成して、ＭＵＴがテストにパスしたか失敗したかを示す。アナライザ４５０は、入力情報（ａｄｄｒｅｓｓ、ｐｃ、ｂｕｆ＿ｃｏｕｎｔ）からモニタ信号を生成する。モジュール４５８は更に、リスタート・ポイントを記憶し、リスタートがリスタート・ポイントに達しているかどうかを示す。
【０３１２】
診断モニタ（Ｄｉａｇ）９００は、ＯＲＡ  ４５０からのモニタ信号を取り込み、診断データをシリアルにシフト・アウトする（ｄｉａｇ＿ｄａｔａ）。モジュール９００は、ＡＴＥへの故障フラグ信号（ｆａｉｌ＿ｆｌａｇ）を生成する。モジュール９００は更に、ＯＲＡ  ４５０への内部リスタート信号を生成する。出力ｄｉａｇ＿ｉｄｌｅは、Ｄｉａｇ  ９００がデータを全くシフトしていないかどうかを示す。
【０３１３】
上述の各構成要素は、図３７に示されている信号より多い信号又は少ない信号と相互作用を行うために変更されたり、配置変更されたり、結合されたり、設計されたりすることが可能である。
【０３１４】
図３６及び３７の各インターフェースは、必要に応じて（例えば、ＭＢＩＳＴコントローラのアーキテクチャの変更に対応するために）修正されることが可能である。
１３．０  選択された機能の概要
フィールド・プログラマブル・メモリＢＩＳＴコントローラの図示された基本実施形態及び代替実施形態の例示的機能は、おおまかには、以下のカテゴリに分類される。
【０３１５】
１３．１．メモリＢＩＳＴアルゴリズムは、２つのタイプに分類されることが可能である。第１のタイプは、メモリ・アドレス空間に対して線形複雑度を有するタイプであり、第２のタイプは、メモリ・アドレス空間に対して非線形複雑度を有するタイプである。第１の（基本）実施形態は、文字どおりに、広い範囲の線形アルゴリズム（標準的なＭａｒｃｈテスト、Ｃｈｅｃｋｅｒｂｏａｒｄテスト、一意データ・テスト、ビット／バイト書き込みイネーブル・テスト、その他）をサポートする。更に、第１の実施形態は、Ｇａｌｌｏｐｉｎｇ  ０／１、Ｗａｌｋｉｎｇ  ０／１、アドレス・デコーダＰＭＯＳ開放故障、Ｂｕｔｔｅｒｆｌｙ、Ｓｌｉｄｉｎｇ  Ｄｉａｇｏｎａｌなどや、それらの可能な変形形態のような、非線形アルゴリズムもサポートする。より複雑な入れ子ループを有するアルゴリズムに対応する代替実施形態は、基本実施形態によってサポートされるアルゴリズムに加えて、より広いカテゴリのアルゴリズムをサポートすることが可能である。代替実施形態は、全ての周知のアルゴリズムをサポートすると考えられている。
【０３１６】
１３．２．かなり大きなアルゴリズムのセットをサポートするようプログラマブルであることに加えて、基本実施形態の機能の１つは、サポートされるアルゴリズムの、動作速度（即ち、最高速度）での実行をサポートすることである。言い換えると、提案されたアーキテクチャは、ユーザが、フィールド・プログラマブルＢＩＳＴコントローラを、メモリの定格動作速度で動作させることを可能にする。これは、ＢＩＳＴが読み出し／書き込み操作を１クロック・サイクルで実行できるように、メモリ読み出し及びメモリ書き込みの操作をパイプライン化することを含むことが望ましい。一部の代替実施形態は、ループを全く含まないループを有するアルゴリズムの最高速度での実行を可能にする。他の実施形態は、より複雑な相互作用ループを有するアルゴリズムの、実動作速度又は最高速度での実行を拡張する。基本実施形態及び代替実施形態は、必要に応じて、全体的又は部分的に結合されることが望ましい。
【０３１７】
１３．３．基本実施形態の設計は、本質的に、適正なモジュール方式であることが可能である。モジュール性は、アルゴリズムの様々なグループによって必要とされる機能性に基づく。従って、ユーザは、コントローラがサポートすることがユーザにとって望ましいアルゴリズム・グループを選択することが可能であり、それに応じてアーキテクチャが合成される。このことは、プログラマブルなハードウェアの複雑度を選択して、プログラマビリティとハードウェア・オーバヘッドとの間のよりよい最適化を達成する、柔軟性を与える。ループ内ループに対応する代替実施形態の設計は、アルゴリズム・グループに基づかない。その代わりに、そのような代替実施形態は、アドレス・スキームに基づく。異なるアドレス・スキームを選択することは、異なるアルゴリズムを可能にする。このことは、ユーザが、幾つかのループ／操作をサポートするアドレス・スキームを選択して、プログラミングの柔軟性とハードウェアとの間のトレードオフを実現することが可能であるという柔軟性を与える。
【０３１８】
１３．４．基本実施形態及び代替実施形態の両方が、２つのセット、即ち、アルゴリズム命令と構成命令とからなる命令セットを使用することが望ましい。アルゴリズム命令は、アルゴリズム・ステップに関係する操作を直接制御する命令であるように選択されることが望ましい。特定のアドレスにおける全ての操作の間のあらゆるサイクルにおいて変更が発生する可能性があることから、アルゴリズム命令は、実動作速度でデコードされることが望ましい。構成命令は、データ・バックグラウンド、アドレス指定スキーム、及び他の制御信号を制御する命令であって、あらゆるアルゴリズム・ステップにおいて変更されうる（変更されないことが多い）命令であるように、選択されることが望ましい。提案されたアルゴリズムに対応する命令セットは、非常に汎用性があり、望ましくは、サポートされるメモリＢＩＳＴアルゴリズムのフレームワーク内で汎用アルゴリズム・ステップを定義することを可能にする。上記の考え方は、基本実施形態及び代替実施形態の両方に当てはまる。
【０３１９】
１３．５．基本実施形態の命令デコーダは、変形可能であるが、図示された一形態では、３つの命令デコーダで構成されることが望ましい。第１の命令デコーダは、命令がアルゴリズム命令か構成命令かを最初にデコードするプリデコーダであることが望ましい。第２の命令デコーダは、アルゴリズム命令をデコードすることが望ましい。通常、この第２のデコーダは、少なくとも実動作速度（メモリの動作速度）で動作しなければならない。第３の命令デコーダは、構成命令をデコードすることが望ましい。構成命令は、より複雑であってよく、デコードに複数サイクルの時間がかかってもよい。ループ内ループ・アルゴリズムを複数サポートする代替実施形態は、第４の追加デコーダ、即ち、各ループについてアドレス構成をデコードするループ構成デコーダを備えることが可能であるか、代替アーキテクチャを用いることが可能であることが望ましい。他のデコーダ・アーキテクチャについても具体的に説明する。
【０３２０】
１３．６．実動作速度ＢＩＳＴの場合、アルゴリズム命令は、実動作速度（少なくとも、テストされるメモリの定格動作速度）でデコードされなければならない。基本実施形態では、同じことを達成するために、少なくとも２組の命令バッファを用いて命令がロードされる。これらの実施形態では、アルゴリズム内の主ループは、ベース・ループと呼ばれる。ＢＩＳＴ操作は、第１のベース・ループ命令を、ベース・ループ・バッファとも呼ばれる第１のバッファにロードすることにより始まる。第１のバッファにある命令が実行されている間に、アルゴリズムの第２のベース・ループ内の全ての命令が、第２のバッファにロードされる。ベース・ループ・バッファのサイズは、ベース・ループ内の命令の数に応じて様々であってよい。代替実施形態は、変形可能ではあるが、アルゴリズム命令バッファを１つだけ備えることが可能である。
【０３２１】
１３．７．基本実施形態では、アルゴリズム内の全てのベース・ループ操作について、ベース・ループ操作の中に１つ又は複数のローカル・ループ操作があることが可能である。これらのローカル・ループは、順次実行（順々に実行されること）が必要であってもよく、入れ子構造を有してもよい。複数のローカル・ループを有するアルゴリズムを実動作速度で実行することを可能にするために、全てのベース・バッファに対して、１つ又は複数のローカル・ループ・バッファが使用されることが望ましい。ベース・ループの全ての操作をベース・ループ・バッファにロードする際に、ローカル・ループ・バッファに対応する命令が、ローカル・ループ・バッファにロードされる。これらのバッファに対するアドレス指定スキームを制御するために、複数の小さなプログラム・カウンタが使用されることが望ましい。これらの実施形態は、ベース・ループ・バッファ及びローカル・ループ・バッファの数を増やすために、容易に拡張されることが可能である。ローカル・ループ・バッファのサイズは、様々であってよい。代替実施形態は、十分なハードウェアが与えられていれば、任意の数のループをサポートする。
【０３２２】
１３．８．基本実施形態では、アルゴリズム内に複数のループがある場合、命令セットの一形態は、ＪＵＭＰ命令を有する。しかしながら、命令がコンパイルされた後は、命令メモリ内のジャンプ先を示す絶対アドレスが、記憶されていることが望ましい。これにより、ＢＩＳＴ時に次にアドレスを計算する時間が最少化されて、ＪＵＭＰ命令のデコードに通常伴う追加遅延がなくなる。代替実施形態では、ループがロードされる方法を指定するために、構成命令が内部バッファにロードされることが望ましい。
【０３２３】
１３．９．基本実施形態の１つの具体的な例示的実装では、２つのアドレス・ジェネレータが使用される。一方のアドレス・ジェネレータは、ベース・ループ用であり、他方は、ローカル・ループ用である。しかしながら、このアプローチは、制限的ではない。基本実施形態は、ユーザから要求された場合などには、３つ以上のアドレス・ジェネレータを有することが可能である。更に、プログラマブルＭＢＩＳＴコントローラがアルゴリズムにおいて柔軟なアドレス・インクリメントをサポートできるように、全てのアドレス・ジェネレータに対応するインデックス・レジスタが統合されることが可能である。これは、ユーザが、アレイの様々なセクションをジャンプしてまわり、そのアドレス空間内でアルゴリズムを適用することを望む場合に有用である。アドレス・ジェネレータは、本明細書で言及されているような、開示されたアルゴリズムをサポートすることに特化された、特定タイプのアドレスを生成することが可能である。これらのアドレス・ジェネレータは、専用の実装である。しかしながら、このアーキテクチャは、柔軟なアドレス・ジェネレータ（例えば、論理演算だけでなく算術演算もサポートするアドレス・ジェネレータ）を可能にする。特定の代替実施形態では、複数のアドレス・ジェネレータの使用も可能であるが、望ましい一形態では、操作ロジックが共用されるアドレス・ジェネレータが１つだけ使用される。
【０３２４】
１３．１０．基本実施形態及び代替実施形態では、データ・ジェネレータが、任意のタイプのＭａｒｃｈアルゴリズム並びに他のより複雑なアルゴリズムに好適なデータを生成することが望ましい。しかしながら、データ・ジェネレータはまた、非常に柔軟なアーキテクチャを有し、ユーザにとって望ましい、（算術演算及び論理演算を伴う）任意のタイプのデータ・バックグラウンドを生成することが可能である。更に、データ・ジェネレータの数は、１つに制限されず、例えばユーザの要求に応じて、例えば、任意の数に増やすことが可能である。また、ＭＢＩＳＴコントローラを、１つ又は複数のアルゴリズム・タイプ（例えば、Ｍａｒｃｈ専用アルゴリズム）の専用にして、プログラマブルでないことと引き換えに、全体アーキテクチャを簡略化することが可能である。
【０３２５】
１３．１１．基本実施形態及び代替実施形態では、アドレス指定スキームは、幾つかのフィールド（例えば、ブロック、ページ、行、及び列）に細分されることが可能であることが望ましい。この場合、メモリのアドレスは、幾つかの構成要素（例えば、メモリ・ブロック番号、メモリ・ページ、Ｘアドレス、Ｙアドレス）に細分されることが可能であることが望ましい。ユーザは、これらのパラメータのうちの幾つかを実行時に選択する柔軟性を与えられることが望ましい。
【０３２６】
１３．１２．望ましい一アプローチにおいて、基本実施形態及び代替実施形態では、命令メモリは、アルゴリズム全体を一度に記憶する必要がない。言い換えると、コントローラとテスト装置（ＡＴＥ）との間のハンド・シェイク・スキームを用いて、命令メモリがＡＴＥからの新しい命令で埋められると同時に、他の幾つかの命令がプログラマブルＭＢＩＳＴコントローラによって実行されることが、可能であるようにできる。結果として、命令メモリのサイズは、ＭＢＩＳＴコントローラの全体面積オーバヘッドを減らすように最適化されることが可能である。
【０３２７】
１３．１３．基本実施形態では、ローカル・アドレスは、ベース・アドレスの関数であることが可能である。ベース・アドレスとローカル・アドレスとの間の関係は、存在することもしないこともある。代替実施形態では、１つのアドレスが別の、より高レベルのアドレスの関数であることが可能であるように、異なるレベルのアドレス同士が関連付けられることが望ましい。従って、例えば、現在のアドレスは、レベル０アドレスの関数であることや、すぐ上のレベルのアドレスの関数であることが可能である。十分なハードウェアが与えられていれば、現在のアドレスは、他の任意のレベルのアドレスの関数であることが可能である。代替実施形態では、アドレス・スキームは、特定のアルゴリズムに、直接には関連付けられていないことが望ましい。代替実施形態では、テスト・アルゴリズムを実装する場合、命令内でテスト・アルゴリズムを明示的に指定することは、可能ではあるが、必要ではない。その代わりに、特定の代替実施形態では、適切なアドレス・スキームの設定に基づいて、異なるテスト・アルゴリズムが生成されることが可能であることが望ましい。また、代替実施形態では、各ループが異なるアドレス・スキームを有することが可能であるように、ループごとに異なる構成がサポートされることが可能であることが望ましい。
【０３２８】
１３．１４．フィールド・プログラマブルＭＢＩＳＴコントローラ及びテスト・システムの実施形態の１つの目標は、フィールド・プログラミングの高い柔軟性と低面積オーバヘッドとを有する最高速度ＧＨｚメモリＢＩＳＴを提供することである。この高い柔軟性は、データ・バックグラウンド及びアドレス・スキームをプログラムできることだけでなく、線形及び非線形の両方のテスト・アルゴリズムをプログラムできることも意味することが望ましい。
【０３２９】
１３．１５．例示的フィールド・プログラマブル・メモリＢＩＳＴ（ＦＰ−ＭＢＩＳＴ）の設計は、２つの部分、即ち、命令設計とハードウェア設計とからなる。命令には２つのタイプがあり、それらは、構成命令及びアルゴリズム命令である。ハードウェアは、命令メモリと、命令デコーダと、プログラム・カウンタ・ジェネレータと、制御信号ジェネレータと、アドレス・ジェネレータと、データ・ジェネレータと、レイテンシ調節器と、出力応答アナライザとを備えるか、これらで構成されることが可能である。
【０３３０】
１３．１６．本明細書には、以下の定義が適用される。
ループ：テストされるメモリの、あらかじめ定義された全てのアドレスに対して、繰り返し実行される、一連の操作である。ループを表すために、「（）」が用いられる。例えば、Ｍａｒｃｈ要素は、ループを表す（ＲＷＲ）として書かれることが可能である。
ベース・ループ：他のどのループにも埋め込まれないループ
ローカル・ループ：ベース・ループに埋め込まれたループ
ベース・セル：ベース・ループの反復のたびに更新されるアドレスを有するメモリ・セル
ローカル・セル：ローカル・ループの反復のたびに更新されるアドレスを有するメモリ・セル
テスト・ステップ：ローカル・ループを含んでも含まなくてもよいベース・ループ
１４．０  その他の例
以下、２つの例を示す。
【０３３１】
Ｇａｌｌｏｐｉｎｇアルゴリズムは、次のように書かれることが可能である。
Ｕ（Ｗｂ０），Ｕ（Ｗｂ１，（Ｒｌ０，Ｒｂ１），Ｗｂ０），Ｕ（Ｗｂ１），Ｕ（Ｗｂ０，（Ｒｌ１，Ｒｂ０），Ｗｂ１）
この例示的アルゴリズムには、４つのテスト・ステップがある。「Ｕ」は、アドレスが大きくなる方向を意味する。（ＷｂＯ）は、ベース・セルに「０」が書き込まれるベース・ループを表す。添え字「ｂ」は、ベース・セルを意味する。（Ｗｂ１，（Ｒｌ０，Ｒｂ１），Ｗｂ０）は、ローカル・ループ（Ｒｌ０，Ｒｂ１）が入れ子になったベース・ループを意味する。Ｒｌ０は、ローカル・セルに「０」を書き込むことを表し、添え字「ｌ」は、ローカル・セルを意味する。ローカル・ループがベース・セルに対して操作を実行できるのは明らかであるが、ベース・ループ操作（ローカル・ループ内にない操作）は、ローカル・セルに対して実行されることができない。
【０３３２】
Ｍａｒｃｈ  ２アルゴリズムは、次のように書かれることが可能である。
Ｕ（ＷＯ），Ｕ（Ｒ０Ｗ１Ｒ１），Ｕ（Ｒ１Ｗ０Ｒ０），Ｄ（Ｒ０Ｗ１Ｒ１），Ｄ（Ｒ１Ｗ０Ｒ０），Ｄ（Ｒ０）
Ｍａｒｃｈアルゴリズムには入れ子ループがないので、全てのメモリ・セルがベース・セルである。この例では、添え字「ｂ」が省略されている。以下の説明では、便宜上、アドレス方向の「Ｕ」又は「Ｄ」、及びデータ・バックグラウンドの「０」又は「１」が省略されている場合がある。
【０３３３】
一実施形態では、命令のワード・サイズが９ビットである。この実施形態での最下位ビット（ＬＳＢ）は、命令の２つのタイプ（構成命令又はアルゴリズム命令）を区別するために用いられる。ＬＳＢ＝１は、アルゴリズム命令を意味し、ＬＳＢ＝０は、構成命令を意味する。
【０３３４】
基本実施形態の別の例示的アルゴリズム命令の各ビットの意味を、次の表９に示し、更に以下で説明する。
【０３３５】
【表１１】
2008521159.tif 000035
【０３３６】
ビット［８：５］は、操作が、テスト・ステップの最初にあるか最後にあるかを指定する。テスト・ステップは、ベース・ループ又はローカル・ループの開始点及び終了点を定義するために用いられる。
【０３３７】
アルゴリズム命令のビット［４：１］は、メモリ・セル又はメモリ・ワードに対して実行される操作を指定する。
ビット［４：３］は、アクセスされるべきメモリ・セル／ワードを表す。メモリ・セル／ワードは、ベース・ループ内のベース・セル／ワード、ローカル・ループ内のローカル・セル／ワード、又はベース・セル／ワードに近接するセル／ワードであることが可能である。
【０３３８】
ビット［２］は、メモリ・セル／ワードに書き込まれるべきデータ又はデータの反転、或いはメモリ・セル／ワードから読み出されるべきデータ又はデータの反転を表す。
ビット［１］は、メモリ・セル／ワードに対して実行される操作を指定する。ビット指向メモリは、ワード指向メモリの、ワード・サイズが１である特殊なケースなので、以下の説明は、ワード指向メモリに基づいて行う。
【０３３９】
Ｓｌｉｄｉｎｇ  ｄｉａｇｏｎａｌテスト及びＢｕｔｔｅｒｆｌｙテストの場合のアドレス生成は、少々異なる。Ｓｌｉｄｉｎｇ  ｄｉａｇｏｎａｌテストの場合は、ベース・アドレス・レジスタ及びローカル・アドレス・レジスタのほかに、斜めアドレス・レジスタと呼ばれることがある追加アドレス・レジスタが用いられる。斜めアドレスは、ベース・アドレスから始まる行アドレス及び列アドレスの両方を加減する。
【０３４０】
Ｓｌｉｄｉｎｇ  ｄｉａｇｏｎａｌアルゴリズムには、専用の、２つの例示的な特殊アルゴリズム命令がある。アルゴリズム命令のビット［４：３］が「０１」に等しい場合は、「ｓｌｉｄｉｎｇ  ｒｅａｄ／ｗｒｉｔｅ  ａｌｌ（全てをスライド読み出し／書き込み）」操作が実行される。［４：３］＝「１１」の場合は、「ｓｌｉｄｉｎｇ  ｒｅａｄ／ｗｒｉｔｅ  ｄｉａｇｏｎａｌ（斜めをスライド読み出し／書き込み）」操作が実行される。これらの命令は、両方ともマルチ・サイクル操作である。「ｓｌｉｄｉｎｇ  ｒｅａｄ／ｗｒｉｔｅ  ａｌｌ」操作は、メモリ内の全てのセルの読み出し／書き込みを行い、「ｓｌｉｄｉｎｇ  ｒｅａｄ／ｗｒｉｔｅ  ｄｉａｇｏｎａｌ」操作は、メモリ内の斜めのセルの読み出し／書き込みを行う。
【０３４１】
Ｂｕｔｔｅｒｆｌｙテストの場合も、「ｂｕｔｔｅｒｆｌｙ  ｒｅａｄ／ｗｒｉｔｅ（バタフライ読み出し／書き込み）」という、例示的な特殊命令がある。アルゴリズム命令のビット［４：３］が「０１」に等しい場合は、「ｂｕｔｔｅｒｆｌｙ  ｒｅａｄ／ｗｒｉｔｅ（バタフライ読み出し／書き込み）」操作が実行される。これも、マルチ・サイクル命令である。この操作は、ベース・セルから４つの方向にあるセルの読み出し又は書き込みを行う。上記の３つのマルチ・サイクル命令は、実際に第２のループ操作を実行するが、これらは、第１の実施形態では、便宜上、ベース・ループ・バッファにロードされることが望ましい。
【０３４２】
第１の実施形態の場合の構成命令は、例えば、使用されるべきテスト・アルゴリズムと、アドレスの変更方法と、使用及び変更されるべきデータ・バックグラウンドと、更に幾つかのプログラム制御命令とを定義する。構成命令は、各命令フィールドが並行してデコードされることが可能であるように、階層的に設計されることが望ましい。一例のビット［７：６］は、構成命令のカテゴリ（アルゴリズムの選択操作、制御操作、特殊操作、アドレスの構成、又はデータの構成）を指定する。各カテゴリは、更にサブカテゴリに細分されることが可能である。例えば、アドレス構成命令は、４つのサブカテゴリ（ベース方向の構成、ベース・アドレスのロード、ローカル方向の構成、及びローカル・オフセット）に分けられることが可能である。ビット［５：４］は、この例では、この４つのサブカテゴリを区別するために用いられる。次の３ビット［３：１］は更に、各命令の機能を定義する。ビット［８］は、この例では使用されず、将来の拡張用である。
【０３４３】
（基本実施形態のための）例示的構成命令の別の実施形態を、次の表１０に示す。
【０３４４】
【表１２】
2008521159.tif 000036
【０３４５】
命令は、更に２つのタイプ（単一ワード命令及びマルチワード命令）に分類されることが可能である。この例では、マルチワード命令が２つあり、それらは、テストされるメモリのアドレスの境界を指定する「最大アドレスをロード」及び「最小アドレスをロード」である。この例では、最大アドレス及び最小アドレスの何れか一方だけを指定することが可能である。ロード命令ワードの後にアドレスが続く。この例のアドレスは、構成命令又はアルゴリズム命令と混同されてはならない。
【０３４６】
Ｍａｒｃｈアルゴリズムの場合、Ｍａｒｃｈ方向は、２つのＭａｒｃｈ要素（ステップ）の間で変更される。方向構成命令によって２つのステップの間に余分なサイクルが追加されないようにするために、方向構成命令もプリデコードされることが望ましい。２つのステップの間の方向命令は、前のステップの実行時にデコードされることが可能なので、このデコードは、複数のサイクルで行われることが可能であり、従って、これによってシステムの速度がスロー・ダウンしない。方向の変更を制御するために、状態機械を用いることが可能である。
【０３４７】
最終アドレス、最終ベース・アドレス、及び最終ローカル・アドレスのインジケータは、２つのバッファ・ペアに格納されているステップをピンポンする（交互に切り替える）ために用いられることが可能である。アドレス生成及び最終アドレス信号生成はクリティカル・パスにあるので、実動作速度の操作を可能にするために、パイプラインが用いられることが望ましい。例えば、アルゴリズム命令デコーダと最終アドレス信号生成との間に、２つのパイプライン段が挿入されることが可能である。この場合は、２つのバッファを素早くピンポンするために、最終アドレスが、実際の最終アドレスより２サイクル早く示されなければならない。
【０３４８】
Ｍａｒｃｈアルゴリズム、即ち、入れ子ループがないアルゴリズムの場合、最終アドレス信号は、最終アドレス＋ｋ（Ｍａｒｃｈ方向が減少の場合）又は最終アドレス−ｋ（Ｍａｒｃｈ方向が増加の場合）に達したときに、（ｋ＋ｌ）＊（ｎ−１）サイクル遅い時刻に、１サイクルだけアサートされることが可能である。この例では、ｋは、アルゴリズム命令デコーダと最終アドレス・インジケータとの間の段数であり（ここでは、ｋは２）、ｎは、実行中のステップの操作数である。
【０３４９】
入れ子ループを有するアルゴリズム（ＧａｌｌｏｐｉｎｇアルゴリズムやＷａｌｋｉｎｇアルゴリズムなど）の場合、最終ローカル・アドレス信号は、上記と同じ方法で生成されることが可能である。しかしながら、最終ベース・アドレス信号は、同じ方法では生成できず、これは、ベース・ループ内の操作間に、多くのサイクルのローカル・ループが挿入されるためである。その代わり、最終ベース・アドレス信号は、最終ローカル・アドレスに基づいてアサートされることが可能である。例えば、最終ベース・アドレス信号は、実際の最終ベース・アドレスに達したときに最終ローカル・アドレス信号をｍサイクル遅延させることによって生成されることが可能である（ｍは、現在のベース・ループの中のローカル・ループに続く操作の数である）。
【０３５０】
（ｋ＋１）＊（ｎ−１）及びｍは、両方とも、ステップごとにハードウェアを用いて計算されることが可能である。この計算は、複数のサイクルで行われてもよい。
一例示的プログラマブルＭＢＩＳＴコントローラの設計には、Ｍａｒｃｈアルゴリズム、Ｇａｌｌｏｐｉｎｇ／Ｗａｌｋｉｎｇアルゴリズム、Ｂｕｔｔｅｒｆｌｙテスト、Ｓｌｉｄｉｎｇ  ｄｉａｇｏｎａｌテスト、及びアドレスＰＭＯＳ開放故障のテストの全てが含まれる。しかしながら、例えばハードウェアの制限やテスト時間の制限などにより、これらのテストの全てが、いつも使用されたり、使用されることを許可されたりするわけではない。そのため、様々なタイプのアルゴリズムからアルゴリズムが選択されて含まれるようにプログラムされることが可能なプログラマブル・コントローラを提供することが望ましい。プログラマブルＭＢＩＳＴコントローラの実施形態の一基本形態に組み込まれることが可能な、これらの例示的テスト・アルゴリズムは、５つのグループ（Ｍａｒｃｈ、Ｇａｌｌｏｐｉｎｇ／Ｗａｌｋｉｎｇ、Ｂｕｔｔｅｒｆｌｙ、Ｓｌｉｄｉｎｇ  ｄｉａｇｏｎａｌ、及びアドレスＰＭＯＳ開放故障用テスト）に分けることができる。Ｍａｒｃｈアルゴリズムは、基本的であり、例えば、プログラマブルＭＢＩＳＴの基本形態に必ず含まれることが可能である。他のグループについては、一部又は全てがプログラマブルＭＢＩＳＴに含まれてもよく、全く含まれなくてもよい。従って、この例によれば、（例えば、フィールドにおいて）どのアルゴリズム及びアルゴリズムの組合せがコントローラに組み込まれるかに応じて、最大１６個の異なるバージョンの基本プログラマブルＭＢＩＳＴが可能である。
【０３５１】
選択されたグループのアルゴリズムは、面積オーバヘッドを減らすために、可能な限り、ロジックを共用しなければならない。それらのグループのデータ・パスは、２つの部分、即ち、他のグループと共用されることが可能なデータ・パスと、そうでないデータ・パスとに分けられることが可能である。この例では、Ｍａｒｃｈアルゴリズム用のロジックは、全てのグループによって共用される。
【０３５２】
命令の設計は、命令デコーダの変更が最小限になるように、実質的には前述のままであってよい。しかしながら、命令デコーダは、使用されない特定のテスト・アルゴリズムに関する一部の命令をデコードしないことによって、簡略化されることが可能である。
【０３５３】
２つのバッファ・ペアは、この例では、命令メモリと組み合わせられることが可能である。２つのベース・ループ・バッファは、この例では、全てのアルゴリズムによって使用されることが可能であり、ローカル・ループ・バッファは、この例では、Ｇａｌｌｏｐｉｎｇ／Ｗａｌｋｉｎｇアルゴリズム及びアドレスＰＭＯＳ開放故障用テストによってのみ使用される。
【０３５４】
同様に、ローカル・ループ・バッファＰＣ（ＬＰＣ）は、この例では、Ｇａｌｌｏｐｉｎｇ／Ｗａｌｋｉｎｇアルゴリズム及びアドレスＰＭＯＳ開放故障用テストによってのみ必要とされる。それらは、他のグループのためには含まれる必要がない。
【０３５５】
制御信号ジェネレータ及びレイテンシ調節器は、同一であってよく、全てのグループに対して用いられることが可能である。データ・ジェネレータは、Ｓｌｉｄｉｎｇ  ｄｉａｇｏｎａｌテストの場合を除き、全てのグループについて同一であることが望ましい。Ｓｌｉｄｉｎｇ  ｄｉａｇｏｎａｌテストの場合は、斜めメモリ・セルに対してデータ・バックグラウンドが反転されることが望ましい。出力応答アナライザは、Ｇａｌｌｏｐｉｎｇ／Ｓｌｉｄｉｎｇアルゴリズムを除く全てのグループに対して同じである。Ｇａｌｌｏｐｉｎｇ／Ｗａｌｋｉｎｇアルゴリズムの場合は、ベース・アドレスがローカル・アドレスと等しいときには、メモリ出力が評価される必要がない。
【０３５６】
これらのグループは、制御信号ジェネレータ、レイテンシ調節器、データ・ジェネレータ、及び出力応答アナライザのほとんど全てのロジックを共用するが、わずかな違いがある。
【０３５７】
これらのグループ間の主な違いは、アドレス・ジェネレータにある。アドレス・ジェネレータのデータ・パスは、図４０Ａ及び４０Ｂによってシンプルに表すことができる。
ローカル・アドレスは、この例では、非線形アルゴリズムによってのみ使用される。ローカル・アドレス・ジェネレータでは、ローカル・オフセットは、この例では、Ｂｕｔｔｅｒｆｌｙテスト及びアドレス開放テストで使用されるだけである。更に、Ｂｕｔｔｅｒｆｌｙ専用のローカル・アドレス・ロジックと、アドレス開放テスト専用のローカル・アドレス・ロジックとがある。Ｓｌｉｄｉｎｇ  ｄｉａｇｏｎａｌアドレスは、Ｓｌｉｄｉｎｇ  ｄｉａｇｏｎａｌアルゴリズム・テストでのみ使用される。そのような構成要素は、対応するアルゴリズム・グループが含まれる場合のみ追加される。
【０３５８】
診断のために、診断データがＡＴＥにスキャン・アウトされることが可能である。ＡＴＥは、故障を検出するために用いられるテスト・ステップ及びテスト操作を識別できなければならない。そのためには、ＡＴＥは、テストに失敗するメモリ・アドレスを知る必要がある。ＡＴＥは更に、期待メモリ出力と実際のメモリ出力との比較結果が必要である。
【０３５９】
前の診断データがまだ完全にはスキャン・アウトされていないうちに第２の故障が検出されると、問題が発生する可能性がある。この問題に対処する例示的方法を３つ示す。（１）前の診断データを保持し、新たに検出された故障を無視する。（２）ＢＩＳＴコントローラを一時停止及び再開する。（３）第２の故障があった時点でテスト・アルゴリズムをリスタートする。第１の方法は、幾つかの故障を報告し損なう可能性があり、第２の方法は、幾つかの、時間に関連した故障を検出し損なう可能性がある。第３の方法の利点は、テスト品質を損なわないことである。
【０３６０】
しかしながら、第３のアプローチは、前の故障を完了する前に第２の故障を検出すると、テスト・アルゴリズムをリスタートさせるので、他の２つの方法と比較して診断時間が長くなる可能性がある。リスタート・ポイントは、アルゴリズムの先頭でなくてもよい。しかしながら、リスタート・ポイントは、故障の初期設定ポイントでなければならない。従って、アルゴリズムのリスタート・ポイントを指定することに特化された命令が、含まれることが可能である。
【０３６１】
これらの診断アプローチも、用いられることが可能である。
診断のための例示的拡張命令を、次の表１１に列挙する。
【０３６２】
【表１３】
2008521159.tif 000037
【０３６３】
幾つかの例示的実施形態を参照しながら本発明の原理を図示及び説明してきたが、これらの実施形態及び概念は、本発明の範囲内にありながら、配置及び細部を変更されることが可能であることは、当業者にとっては自明であろう。そのような全ての変更を特許請求するものとする。
【図面の簡単な説明】
【０３６４】
【図１】２入力ＮＡＮＤゲートの概略図である。
【図２】２本のアドレス線に対するアドレス・デコーダの部分を示す図である。
【図３】図３は、例示的アルゴリズム命令ワードの定義である。
【図３Ａ】図３Ａは、代替の例示的アルゴリズム命令ワードの定義である。
【図４】例示的プログラマブルＭＢＩＳＴコントローラのハードウェア設計の概略ブロック図である。
【図５】例示的命令デコーダの概略ブロック図である。
【図６】例示的ベース・アドレス・ジェネレータの概略ブロック図である。
【図７】例示的ローカル・アドレス・ジェネレータの概略ブロック図である。
【図８】例示的ステップ・コントローラの概略ブロック図である。
【図９】例示的なテスト・ステップ用バッファを示す図である。
【図１０】例示的なテスト・ステップ用バッファを示す図である。
【図１１】アドレス・ジェネレータの例示的形態の概略ブロック図である。
【図１２】例示的アドレス関係の概略図である。
【図１３】例示的インター反復アドレス・ジェネレータの概略ブロック図である。
【図１４】例示的イントラ反復アドレス・ジェネレータの概略ブロック図である。
【図１５】テスト・ステップ例を示す図である。
【図１６】例示的命令バッファ及び制御バッファのブロック図である。
【図１７】例示的バッファ・アドレス制御のブロック図である。
【図１８】例示的アドレス構成デコーダのブロック図である。
【図１９】例示的初期設定構成を示す図である。
【図２０】例示的構成バッファを示す図である。
【図２１】ＡＴＥから命令メモリにロードされることが可能な命令の数を決定する例示的アプローチを示す図である。
【図２２】ＡＴＥから命令メモリにロードされることが可能な命令の数を決定する例示的アプローチを示す図である。
【図２３】ＡＴＥとプログラマブルＭＢＩＳＴコントローラとの間の例示的インターフェースの概略ブロック図である。
【図２４】図２３のＡＴＥとプログラマブルＭＢＩＳＴコントローラとの間のインターフェースのための例示的ハンド・シェイク・プロトコルを示す図である。
【図２５】ＡＴＥとプログラマブルＭＢＩＳＴコントローラとの間の、代替の例示的インターフェースの概略ブロック図である。
【図２６】図２５のＡＴＥとプログラマブルＭＢＩＳＴコントローラとの間のインターフェースのための例示的ハンド・シェイク・プロトコルを示す図である。
【図２７】ＭＢＩＳＴクロック・ドメイン有限状態機械（ＦＳＭ）のための、例示的ＦＳＭの状態図である。
【図２８】診断クロック・ドメイン有限状態機械（ＦＳＭ）のための、例示的ＦＳＭの状態図である。
【図２９】診断データのシフト・アウトに用いられる例示的回路の概略図である。
【図３０】診断モニタの一実施形態の例示的信号波形を示す図である。
【図３１】ＡＴＥとプログラマブルＭＢＩＳＴコントローラとの間の例示的診断インターフェースの概略ブロック図である。
【図３２】リスタートを有する例示的診断インターフェースの選択された波形を示す図である。
【図３３】ＡＴＥとＭＢＩＳＴコントローラとの間のインターフェースの例示的代替形態の概略ブロック図である。
【図３４】保持テストの例示的な一時停止信号及び再開信号の波形を示す図である。
【図３５】Ｍａｒｃｈ専用ＭＢＩＳＴコントローラの一形態のための例示的な命令バッファ及びアドレス構成バッファを示す図である。
【図３６】プログラマブルＭＢＩＳＴコントローラの一形態のための例示的な最高レベル・インターフェースを示す図である。
【図３７】プログラマブルＭＢＩＳＴコントローラの一実施形態のための例示的な内部インターフェースを示す図である。
【図３８Ａ】例示的アドレス・ジェネレータのデータ・パスを示す図である。
【図３８Ｂ】例示的アドレス・ジェネレータのデータ・パスを示す図である。
【図１】
2008521159.tif 000038
【図２】
2008521159.tif 000039
【図３】
2008521159.tif 000040
【図３Ａ】
2008521159.tif 000041
【図４】
2008521159.tif 000042
【図５】
2008521159.tif 000043
【図６】
2008521159.tif 000044
【図７】
2008521159.tif 000045
【図８】
2008521159.tif 000046
【図９】
2008521159.tif 000047
【図１０】
2008521159.tif 000048
【図１１】
2008521159.tif 000049
【図１２】
2008521159.tif 000050
【図１３】
2008521159.tif 000051
【図１４】
2008521159.tif 000052
【図１５】
2008521159.tif 000053
【図１６】
2008521159.tif 000054
【図１７】
2008521159.tif 000055
【図１８】
2008521159.tif 000056
【図１９】
2008521159.tif 000057
【図２０】
2008521159.tif 000058
【図２１】
2008521159.tif 000059
【図２２】
2008521159.tif 000060
【図２３】
2008521159.tif 000061
【図２４】
2008521159.tif 000062
【図２５】
2008521159.tif 000063
【図２６】
2008521159.tif 000064
【図２７】
2008521159.tif 000065
【図２８】
2008521159.tif 000066
【図２９】
2008521159.tif 000067
【図３０】
2008521159.tif 000068
【図３１】
2008521159.tif 000069
【図３２】
2008521159.tif 000070
【図３３】
2008521159.tif 000071
【図３４】
2008521159.tif 000072
【図３５】
2008521159.tif 000073
【図３６】
2008521159.tif 000074
【図３７】
2008521159.tif 000075
【図３８Ａ】
2008521159.tif 000076
【図３８Ｂ】
2008521159.tif 000077
【国際調査報告】
2008521159.tif 000078
2008521159.tif 000079
2008521159.tif 000080
2008521159.tif 000081