(57)【特許請求の範囲】
【請求項１】
半導体チップ上に、複数の基本論理セルからなり各基本論理セルごとに、その基本論理セルが正常か異常かを示す信号を出力可能で、かつそれぞれが正常を示す信号を出力する複数の基本論理セルで、任意の論理を構成可能な可変論理回路が搭載されてなる半導体集積回路であって、
上記可変論理回路は、相補的な信号を出力可能な２線ラインロジック回路と該２線ラインロジック回路の出力信号を比較して異常の有無を判定する判定手段とからなる基本論理セルと、これら基本論理セル間の信号線の接続を切り替え可能な複数の可変スイッチ回路とを備え、上記可変スイッチ回路による接続を切り替えることにより任意の論理を構成可能であって、上記２線ラインロジック回路から出力される信号が他の基本論理セル内の２線ラインロジック回路に供給され、上記判定手段の出力信号が、回路が正常か異常かを示す信号として各基本論理セルから出力されるように構成され、
上記可変スイッチ回路は、互いに交差する信号線間を接続遮断可能なスイッチ素子と、該スイッチ素子の状態を制御する情報を記憶する書込み読出し可能な記憶素子とからなり、上記判定手段から出力される回路が正常か異常かを示す信号が上記記憶素子に記憶されるように構成されていることを特徴とする半導体集積回路。
【請求項２】
少なくとも複数の論理セルからなり論理セルごとに回路が正常か異常かを示す信号を出力可能でかつ任意の論理を構成可能な可変論理回路と読出し書込み可能なメモリ回路とを内蔵した半導体集積回路の検査方法であって、
上記可変論理回路により自己テストを行なわせ、その結果得られた不良個所を示す情報を用いて該可変論理回路内に、正常な論理セルで所定のアルゴリズムに従って所定のテスト信号および期待値信号を発生してテスト信号を上記メモリ回路に供給し、その結果メモリ回路から得られる出力信号と期待値信号とを比較して一致しない場合に不良を示す信号を形成してチップ外部へ出力させるメモリテスト回路を構成して、上記メモリ回路を検査するようにしたことを特徴とする半導体集積回路の検査方法。
【請求項３】
上記メモリ回路は、スタティック型ランダム・アクセス・メモリであることを特徴とする請求項２に記載の半導体集積回路の検査方法。
【請求項４】
上記メモリ回路は、ダイナミック型ランダム・アクセス・メモリであることを特徴とする請求項２に記載の半導体集積回路の検査方法。
【請求項５】
少なくとも複数の論理セルからなり論理セルごとに回路が正常か異常かを示す信号を出力可能でかつ任意の論理を構成可能な可変論理回路と、読出し書込み可能なメモリ回路と、カスタム論理回路または中央処理ユニットとを内蔵した半導体集積回路の検査方法であって、
上記可変論理回路により自己テストを行なわせ、その結果得られた不良個所を示す情報を用いて該可変論理回路内に、正常な論理セルで所定のアルゴリズムに従って所定のテスト信号および期待値を発生してテスト信号を上記メモリ回路に供給しその結果メモリ回路から得られる出力信号と期待値信号とを比較して一致しない場合に不良を示す信号を形成してチップ外部へ出力させるメモリテスト回路を構築して、該メモリテスト回路により上記メモリ回路を検査し、
次に、上記可変論理回路内に、正常な論理セルで所定のアルゴリズムに従って所定のテスト信号および期待値信号を発生してテスト信号を上記カスタム論理回路または中央処理ユニットに供給しその結果カスタム論理回路または中央処理ユニットから得られる出力信号と期待値信号とを比較して一致しない場合に不良を示す信号を形成してチップ外部へ出力させるロジックテスト回路を構築し、上記メモリ回路内にテストパターンもしくはテストパターン生成プログラムを格納して、上記ロジックテスト回路を起動させて上記カスタム論理回路または中央処理ユニットを検査するようにしたことを特徴とする半導体集積回検査方法。
【請求項６】
上記メモリ回路は、スタティック型ランダム・アクセス・メモリであることを特徴とする請求項５に記載の半導体集積回路の検査方法。
【請求項７】
上記メモリ回路は、ダイナミック型ランダム・アクセス・メモリであることを特徴とする請求項５に記載の半導体集積回路の検査方法。
【請求項８】
少なくとも複数の論理セルからなり論理セルごとに回路が正常か異常かを示す信号を出力可能でかつ任意の論理を構成可能な可変論理回路と、冗長回路を備えていない第１のメモリ回路と、冗長回路を備えている第２のメモリ回路と、カスタム論理回路または中央処理ユニットとを内蔵した半導体集積回路の製造方法であって、
上記可変論理回路により自己テストを行なわせ、その結果得られた不良個所を示す情報を用いて該可変論理回路内に、正常な論理セルで所定のアルゴリズムに従って所定のテスト信号及び期待値信号を発生してテスト信号を上記第１のメモリ回路に供給しその結果第１のメモリ回路から得られる出力信号と期待値とを比較して一致しない場合に不良を示す信号を形成してチップ外部へ出力させるメモリテスト回路を構築して、該メモリテスト回路により上記第１のメモリ回路を検査し、
次に、上記可変論理回路内に、正常な論理セルで所定のアルゴリズムに従って所定のテスト信号および期待値信号を発生してテスト信号を上記カスタム論理回路または中央処理ユニットに供給しその結果カスタム論理回路または中央処理ユニットから得られる出力信号と期待値信号とを比較して一致しない場合に不良を示す信号を形成してチップ外部へ出力させるロジックテスト回路を構築するとともに上記第１のメモリ回路内にテストパターンもしくはテストパターン生成プログラムを格納して、上記ロジックテスト回路を起動させて上記カスタム論理回路または中央処理ユニットを検査し、
しかる後、上記可変論理回路内に、正常な論理セルで所定のアルゴリズムに従って所定のテスト信号及び期待値信号を発生してテスト信号を上記第２のメモリ回路に供給しその結果第２のメモリ回路から得られる出力信号と期待値信号とを比較して一致しない場合に不良を示す信号を形成してチップ外部に出力させるメモリテスト回路を構築して、上記第２メモリ回路を検査し、
その後、上記第２のメモリ回路の検査結果に基づいて上記第２のメモリ回路に付随する冗長回路を用いて第２のメモリ回路内の欠陥ビットを予備のビットと置き替えるビット救済処理を行なうようにしたことを特徴とする半導体集積回路の製造方法。
【請求項９】
上記第１のメモリ回路はスタティック型ランダム・アクセス・メモリであり、上記第２のメモリ回路は、ダイナミック型ランダム・アクセス・メモリであることを特徴とする請求項８に記載の半導体集積回路の製造方法。
【請求項１０】
上記第２のメモリ回路のビット救済処理後に、上記可変論理回路内に所望の論理を構成するようにしたことを特徴とする請求項８または９に記載の半導体集積回路の製造方法。
【請求項１１】
上記第２のメモリ回路の検査の際に欠陥ビットの位置を示す情報を上記第１のメモリ回路内に記憶するようにしたことを特徴とする請求項８、９または１０に記載の半導体集積回路の製造方法。
【発明の詳細な説明】
技術分野
本発明は、半導体集積回路（ＩＣ：Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）およびそのテスト技術並びに製造技術に関し、例えば故障を検出し故障個所を回避して論理を構成可能な論理ＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）を提供するものである。
背景技術
ロジックＩＣのテスト方式としては、テスタと呼ばれるテスト装置によりテストパターンデータを発生してＩＣへ入力し、出力されたデータ信号と期待値とを比較して検出する方式が一般的であった。しかしながら、ロジックＩＣはその論理の規模が大きくなるほどテストパターンのステップ数が長大になってしまい、テストパターンの作成およびそれを用いたテスト所要時間が非常に長くなってしまう。
そこで、テスタによるテストを容易にする方法として、ＩＣの本来の機能を構成しているフリップフロップ等の順序回路を縦続接続してシフトレジスタを構成可能に設計しておいて、テスト時に前記シフトレジスタにテストパターンをシリアルに入力（スキャンイン）して取り込ませ（セット）、所望の組合せ論理回路にシフトレジスタに取り込んだテストデータを入力し、その後前記論理回路の出力データ信号をシフトレジスタに取り込んでシフトして外部へ取り出せる（スキャンアウト）ようにしたいわゆるスキャンパス方式と呼ばれるテスト容易化設計技術が開発され実用化されている。
外部からテストパターンを入力する方式では、論理回路が順序回路を含んでいると内部の状態によって出力が異なるので、ある論理回路を検査するにはその中に含まれる順序回路の状態をまずテストパターンで設定しなければならないためテストパターンが非常に長くなってしまうが、フリップフロップをシフトレジスタ構成にしてテストパターンを入力（スキャンイン）することでテストパターンを大幅に減らすことができる。
しかしながら、上記スキャンパス方式は、それまでのテスト方式に比べるとテストパターンの量が少なくなるもののテストパターンの生成が難しく不良検出率を上げにくいとともに、テストパターンをシリアルに入力（転送）することを繰り返し行なうためテスト時間が長くなると不具合もある。また、新たに開発する論理ＬＳＩがＲＡＭ（ランダム・アクセス・メモリ）、ＲＯＭ（リード・オンリ・メモリ）のようなメモリ回路やＣＰＵ等の大型セル（マクロセルまたはＩＰコア：Ｉｎｔｅｌｌｅｃｔｕａｌ  Ｐｒｏｐｅｒｔｙ  Ｃｏｒｅ）を備える場合、それらのセルについてもテストを行なおうとすると膨大なテストパターンの作成と入力が必要とされるため、事実上テストが行なえないという問題点がある。
一方、論理集積回路内に疑似乱数発生回路のようなランダムなテストパターンを発生するパターン発生回路を内蔵させたＢＩＳＴ（Ｂｕｉｌｔ  ｉｎ  ｓｅｌｆ  ｔｅｓｔ）方式のテスト技術が提案されている。
しかしながら、ＢＩＳＴ方式のテスト回路は、発生されたテストパターンが不良を検出するのに充分なテストパターンになるか保証されていない。そのため、テスト回路のテストパターンで充分な不良検出率が得られるかどうか別途検証する必要があるという課題があった。
さらに、従来のテスト回路を搭載したＬＳＩはいずれも、そのテスト回路の自身の故障ないしは欠陥については何ら対策が施されていない。つまり、テスト回路そのものが故障した場合にはチップ本来の回路が正常であっても不良判定をしてしまうという欠点がある。そして、その対策としては、テスト回路の規模を最小にして故障や欠陥の発生を抑制するしかないが、このことはテストの充分性すなわち不良検出率の向上という目的と矛盾した結果を招いてしまう。
この発明の目的は、高機能の外部テスタを用いることなくＬＳＩ内部の回路のテストを行なうことが可能なテスト技術を提供することにある。
この発明の他の目的は、自分で故障個所を検出しかつ自己救済することができる歩留まりの高いＬＳＩを提供することにある。
この発明の他の目的は、ハードウェアのオーバーヘッドの少ない自己テスト機能を有するＬＳＩを提供することにある。
この発明の他の目的は、不良解析の容易なＬＳＩを提供することにある。
この発明のさらに他の目的は、特に中央処理ユニットのような制御回路やメモリ回路、カスタム論理回路等を１つのチップ上に備えたいわゆるシステムＬＳＩに適用して好適な製造技術を提供することにある。
この発明の前記ならびにそのほかの目的と新規な特徴については、本明細書の記述および添付図面から明らかになるであろう。
発明の開示
本願において開示される発明のうち代表的なものの概要を説明すれば、下記のとおりである。
すなわち、本発明に係る半導体集積回路は、チップ上に複数の基本論理セル（セル論理ブロック）からなり基本論理セルごとに回路が正常か異常かを示す信号を出力可能でかつ任意の論理を構成可能なＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）のような可変論理回路を搭載するようにしたものである。これにより、外部テスタを使用することなく可変論理回路（ＦＰＧＡ）内に不良個所があることおよびその位置を知ることができる。また、不良個所を回避して論理を構成することにより歩留まりを向上させるとともに、この可変論理回路（ＦＰＧＡ）を用いてテスト回路を構築して他の内部回路をテストする場合にテスト回路自身の故障による誤ったテスト結果が出力されるのを回避することができる。
回路が正常か異常かを示す信号を出力可能な基本論理セルとしては、例えば相補出力を有する２線ラインロジック（論理積ゲート回路）とその出力を比較して異常の有無を判定する判定手段（排他的論理和ゲート）とからなる回路がある。基本論理セルをこのような構成とすることで、比較的小規模な回路で、回路が正常か異常かを示す信号を出力可能でかつ任意の論理を構成可能な可変論理回路（ＦＰＧＡ）を実現することができる。
また、本発明に係る半導体集積回路のテスト方法は、少なくとも複数の基本論理セル（セル論理ブロック）からなり基本論理セルごとに回路が正常か異常かを示す信号を出力可能でかつ任意の論理を構成可能な可変論理回路（ＦＰＧＡ）と読出し書込み可能なメモリ回路とを内蔵した半導体集積回路において、まず上記可変論理回路（ＦＰＧＡ）により自己テストを行なわせ、その結果得られた不良個所を示す情報を用いて不良個所を除いた基本論理セルのみで所定のアルゴリズムに従って所定のテスト信号および期待値信号を発生してテスト信号を上記メモリ回路に供給し、その結果メモリ回路から得られる出力信号（出力データ）と上記期待値信号（期待値データ）とを比較して一致しない場合に不良を示す信号を形成してチップ外部へ出力させるメモリテスト回路を構築するようにしたものである。
かかるメモリテスト回路は、所定のアルゴリズムに従ってメモリのテストパターンを生成するＡＬＰＧ（Ａｌｇｏｒｉｔｈｍｉｃ  Ｍｅｍｏｒｙ  Ｐａｔｔｅｒｎ  Ｇｅｎｅｒａｔｏｒ）と呼ばれるテストパターン生成器として構成することができる。さらに、このＡＬＰＧは、命令コードを解読して演算器等を制御する公知のマイクロプログラム制御方式の制御部と、テストパターンを演算によって生成する演算器とにより構成する。そして、上記のようにＦＰＧＡ内に構築されたＡＬＰＧにテストパターン生成プログラムの命令コードを順次供給してテストパターンを発生させ、そのテストパターンを被テスト回路であるメモリ回路に供給して不良の有無を検査することができる。
さらに、上記テストパターン生成プログラムは、既存のテスタ言語乃至はテスト言語を用いて記述され、命令コードによって定義される上記所定のアルゴリズムに従って、テストパターン（アドレスとデータ）が生成される。上記テスタ言語は、アドレスとデータとを含むテストパターンを効率的に発生するための有効な命令言語と見なされる。上記テスタ言語は、テスタ業界で用いられているような言語とされ、たとえば、アドバンテスト社のテスタ言語と互換性のある言語が用いられる。これにより、既存のテストパターンのプログラムデータが利用できるからである。上記所定のアルゴリズムを記述する言語は、テスタ言語に限定されるものではなく、アドレスとデータとを含むテストパターンを発生することが可能な命令言語で有ればよい。
本発明に係る半導体集積回路の他のテスト方法は、半導体集積回路がメモリ回路と共にＣＰＵ（中央処理ユニット）やユーザが要求する論理機能を構成したユーザ論理回路のようなカスタム論理回路を含むような場合に、上記ＦＰＧＡに所定のアルゴリズムに従ってＣＰＵやカスタム論理回路のテスト信号および期待値信号を生成してテストを行なうテスト回路（ロジックテスタ）を構築するとともに、既に前記テストにより正常と判定されたメモリ回路を使用して、そのメモリ回路にテストパターンもしくはテストパターン生成プログラムを格納し、ＦＰＧＡに構築されたテスト回路を起動してメモリ回路からテストパターンもしくはテストパターン生成プログラムを読み出しながらＣＰＵやカスタム論理回路のテストを行なうものである。
これによって、高機能の外部テスタを用いることなくＬＳＩ内部の論理回路のテストを行なうことができる。
所定のアルゴリズムに従ってＣＰＵやカスタム論理回路のテスト信号および期待値信号を生成してテストを行なうテスト回路は、命令コードを解読して制御信号を形成するマイクロ命令方式の制御部と、該制御部から出力される制御信号に基づいてＣＰＵやカスタム論理回路のテスト信号および期待値信号を生成するとともにＣＰＵやカスタム論理回路から出力される信号と期待値信号とを比較して一致しない場合に不良を示す信号を形成する信号形成・比較手段をＦＰＧＡ内に構築することで実現される。この場合、基準クロック信号に基づいて互いに位相やデューティの異なる複数のクロック信号を形成するタイミング発生回路をＦＰＧＡ内に構築して、上記制御部からの制御信号に従って各テスト信号ごとにタイミングを設定できるようにするとよい。
このように、テスト回路は、所定のアルゴリズムに従ってＣＰＵやカスタム論理回路のテスト信号および期待値信号を生成するための制御信号を形成するマイクロプログラム制御方式の制御部と、該制御部から出力される制御信号に基づいた内部論理回路のテスト信号および期待値信号を生成するとともに内部論理回路から出力される信号と期待値信号とを比較して一致しない場合に不良を示す信号を形成する信号形成・比較手段とにより構成されるため、テストパターンをすべて内部のメモリに記憶する必要がないとともに、制御部の構成によって命令コード自身のデータ圧縮が可能となり、ＦＰＧＡ内に充分に構築することができる規模のものである。
発明を実施するための最良の形態
以下、本発明の好適な実施例を図面に基づいて説明する。
図１は、本発明を適用したシステムＬＳＩの一実施例のブロック図で、公知の半導体集積回路の製造技術により単結晶シリコンのような１個の半導体チップ１００上に構成される。
図１の符号１１０〜１８０は上記半導体チップ１００上に構成された内部回路、１９０はこれらの内部回路と外部装置との間の信号の入出力を行なうインタフェース回路、２００は上記内部回路１１０〜１８０相互間およびインタフェース回路１９０との間を接続する内部バスである。上記内部回路１１０〜１８０のうち、１１０および１２０はユーザが要求する論理機能を構成するユーザ論理回路のようなカスタム論理回路で、このうち１２０はユーザが任意に論理を構成可能なＦＰＧＡにより構成されている。このカスタム論理回路は、ユーザ論理を構成せずそのまま残しておくようにしてもよい。
また、１３０はプログラムの命令を解読して対応する処理や演算を実行するＣＰＵ（中央処理ユニット）、１４０はスタティックＲＡＭ（ランダム・アクセス・メモリ）、１５０〜１８０はダイナミックＲＡＭである。さらに、この実施例のシステムＬＳＩには、特に制限されるものでないが、内部回路のテスト時に外部のテスタ５００との間の信号の入出力を行なうため、ＩＥＥＥ１１４９．１規格で規定されているＴＡＰ（Ｔｅｓｔ  Ａｃｃｅｓｓ  Ｐｏｒｔ）２１０がインタフェース回路として設けられている。テスタ５００は、従来の論理ＬＳＩやメモリのテスタのような高機能のものでなくデータの書き込みと読み出しおよび簡単なデータ処理が行なえるものでよく、パーソナルコンピュータを用いることも可能である。
上記ＣＰＵ１３０は、狭義のＣＰＵの他に、プログラムＲＯＭ、ワーキングＲＡＭ、シリアルコミュニケーションインタフェースやタイマー回路，デジタル・アナログ変換回路などのいわゆるマイコン周辺回路を含んでマイクロプロセッサとして構成されていてもよい。
上記スタティックＲＡＭ１４０およびダイナミックＲＡＭ１５０〜１８０は、内部バス２００を介してアドレス信号が与えられたときに対応するメモリセルを選択するアドレスデコーダ等のメモリ周辺回路を含む。さらに、ダイナミックＲＡＭ１５０〜１８０は、非アクセス時間が長くなってもメモリセルの情報電荷が失われないように周期的に疑似選択するリフレッシュ制御回路を含む。また、特に制限されるものでないが、この実施例では、ダイナミックＲＡＭ１５０〜１８０には、メモリアレイ内に欠陥ビットがあった場合にその欠陥ビットを含むメモリ行もしくはメモリ列を予備のメモリ行もしくは予備のメモリ列と置きかえるいわゆる冗長回路がそれぞれ設けられている。
図２には、図１に示されている内部回路１１０〜１８０のうち、カスタム論理回路１２０を構成するＦＰＧＡの具体例を示す。
この実施例のＦＰＧＡは、マトリックス状に配置された複数個のセル論理ブロックＣＬＢと、各セル論理ブロックＣＬＢ間に設けられてセル間を接続するための配線群１２１，１２２と、外部から配線間接続の状態を変更することが可能なクロスポイントスイッチＣＳＷとにより構成されている。上記クロスポイントスイッチＣＳＷは、図３に示すように、例えば横方向の配線Ｌｘと縦方向の配線Ｌｙにそれぞれソート，ドレインが接続されたスイッチＭＯＳＦＥＴ  Ｑｓｗと、このスイッチＭＯＳＦＥＴ  Ｑｓｗのゲートに印加される制御情報を記憶する配線接続情報記憶用メモリセルＳＭＣとから構成されている。上記配線群１２１および１２２は、多層配線技術を利用してそれぞれ異なる配線層によって互いに絶縁された状態で形成するのが望ましい。図２には、各セル論理ブロック間にそれぞれ２本ずつ配線が示されているが、実際にはより多くの配線が形成される。配線の数はセル論理ブロックの数に比例して増加される。
特に制限されるものではないが、このＦＰＧＡブロックの周辺には、上記配線接続情報記憶用メモリセルＳＭＣを選択してデータを書き込むためのＸデコーダ回路やＹデコーダ回路、書込み回路等を設けるようにしてもよい。また、上記配線接続情報記憶用メモリセルＳＭＣは、スイッチＭＯＳＦＥＴ  Ｑｓｗと１対１で設ける代わりに、ＦＰＧＡブロックの周辺にＳＲＡＭメモリアレイとして設けることも可能である。
セル論理ブロックＣＬＢは、例えば図４（ａ）に示すように、ＡＮＤ論理とＮＡＮＤ論理のような相補出力を有する論理積ゲート回路（２線ラインロジック）ＬＧ１と、その相補出力を入力とする排他的論理和ゲート回路（比較手段）ＬＧ２とから構成することができる。このゲート回路ＬＧ２は、２つの入力信号が同一の論理レベルのときにロウレベルの出力信号を、また２つの入力信号の論理レベルが異なるときにハイレベルの出力信号を出力するので、論理積ゲート回路ＬＧ１に欠陥があって相補出力となるべきところが同相出力となると、ゲート回路ＬＧ２の出力はロウレベルとなりゲート回路ＬＧ１に欠陥があることを知らせる。
このゲート回路ＬＧ２の出力信号は、そのままＦＰＧＡブロックの外部へ出力させるようにしてもよいが、この実施例では、図３に示されているクロスポイントスイッチＣＳＷを構成する配線接続情報記憶用メモリセルＳＭＣのノードＮ２に入力させて記憶できるように構成されている。
従って、各セル論理ブロックＣＬＢに電源電圧を与えてそのときのゲート回路ＬＧ２の出力状態を配線接続情報記憶用メモリセルＳＭＣに記憶させてから、配線接続情報記憶用メモリセルＳＭＣの記憶情報を外部へ読み出すことにより、セル論理ブロックＣＬＢが正常に動作するか否かを知ることができる。また、各配線接続情報記憶用メモリセルＳＭＣへチップ外部から順次データを書き込んで読み出すことでメモリセルが故障しているか否かも検出することができる。さらに、配線接続情報記憶用メモリセルＳＭＣにデータを書き込んで所望のスイッチＭＯＳＦＥＴ  Ｑｓｗをオンさせて配線群１２１，１２２を使用して外部より信号を入力しチェックすることで、スイッチＭＯＳＦＥＴ  Ｑｓｗが故障しているか否かも検出することができる。
なお、ゲート回路ＬＧ２の出力状態が入力される配線接続情報記憶用メモリセルＳＭＣを構成するＭＯＳＦＥＴ  Ｑ１のゲート構造あるいはメモリセル回路を工夫することにより、ゲート回路ＬＧ２の出力がロウレベルのときは外部からのデータ入力によってＭＯＳＦＥＴ  Ｑ１が反転すなわちオフしないように構成してもよい。これによって、セル論理ブロックＣＬＢに故障があるか否かを効率良く検出することができる。
かかる機能を実現する具体的方法としては、メモリセルＳＭＣを構成するＭＯＳＦＥＴ  Ｑ１を、例えば図４（ｂ）に示すように、コントロールゲートとフローティングゲートを有する構造とし、ゲート回路ＬＧ２の出力（ロウレベル）をインバータＩＮＶで反転してＭＯＳＦＥＴ  Ｑ１のコントロールゲートＣＧに高レベルの電圧Ｖｐを印加してフローティングゲートＦＧに電荷を注入させ、外部からのデータ入力によってはメモリセルの状態が変化しないようにする方法が考えられる。
また、図４（ａ）に示すＡＮＤ論理とＮＡＮＤ論理のような相補出力を有する論理積ゲート回路ＬＧ１としては例えば図４（ｃ）のような回路が考えられる。すなわち、論理積ゲート回路ＬＧ１は、電源電圧端子Ｖｃｃと接地点との間に直列形態に接続されたＭＯＳＦＥＴ  Ｑ１１〜Ｑ１３からなる第１ＭＯＳＦＥＴ列と、直列形態のＭＯＳＦＥＴ  Ｑ２１〜Ｑ２３からなる第２ＭＯＳＦＥＴ列とからなり、Ｑ１２とＱ２１のゲートに第１の入力信号Ｘが供給されることにより、第２ＭＯＳＦＥＴ列の出力ノードＮ１２から入力信号Ｘ，Ｙの論理積出力Ｚ（＝Ｘ・Ｙ）が、また第１ＭＯＳＦＥＴ列の出力ノードＮ１１から入力信号Ｘ，Ｙの論理積出力Ｚの反転出力／Ｚ（＝／Ｘ・Ｙ）を出力するように動作する。なお、図に示されているＭＯＳＦＥＴ  Ｑ１１およびＱ２３は、それぞれゲートとドレインが結合もしくはゲートに所定の電位が印加されることにより負荷として作用する。
図５（ａ）に上記セル論理ブロックＣＬＢの他の構成例を示す。
この実施例のセル論理ブロックＣＬＢは、ＢＩＳＴ（Ｂｕｉｌｔ  ｉｎ  ｓｅｌｆ  ｔｅｓｔ）内蔵型の論理ブロックであり、２つの入力信号Ｘ，Ｙをそれぞれラッチして各々正相と逆相の信号Ｘ，／Ｘ；Ｙ，／Ｙを出力するフリップフロップＦＦ１，ＦＦ２と、これら４つの出力信号を入力信号とし論理和や論理積、排他的論理和等複数の論理動作が可能な論理ユニットＡＬＵと、この論理ユニットの出力Ｚをラッチして正相と逆相の信号Ｚ，／Ｚを出力するフリップフロップＦＦ３と、上記論理ユニットの論理動作を指定する制御情報を記憶する読出し書き込み可能なメモリＭＥＭと、テストパターンを乱数の形で発生する公知のＬＦＳＲ（Ｌｉｎｅａｒ  Ｆｅｅｄｂａｃｋ  Ｓｈｉｆｔ  Ｒｅｇｉｓｔｅｒ）と、コンパレータＣＭＰ等より構成されている。
上記論理ユニット制御情報を記憶するメモリＭＥＭは外部から制御情報を書き込めるように構成されている。上記ＬＦＳＲにはスイッチＭＯＳＦＥＴ  Ｇ１〜Ｇ７を介して入力信号Ｘ，Ｙと論理ユニット制御情報およびＦＦ３の出力信号Ｚ，／Ｚの伝送信号線と接続可能に構成されて、クロックＣＬＫに同期して動作する。
この実施例のセル論理ブロックＣＬＢを自己検査動作させる場合、上記スイッチＭＯＳＦＥＴ  Ｇ１〜Ｇ７のゲートに制御信号ＣＨＫを入力してオンさせる。すると、ＬＦＳＲによりランダムなパターンが形成されてフリップフロップＦＦ１，ＦＦ２および論理ユニットＡＬＵに供給されるとともに、発生されたパターンとフリップフロップＦＦ３の出力とが論理合成、圧縮されてシグネチャ・パターンとしてコンパレータＣＭＰに出力される。
コンパレータＣＭＰは、例えば図５（ｂ）に示されているように、期待シグネチャ・パターンが格納されたリード・オンリ・メモリＲＯＭ、イクスクルーシブＯＲゲートＥＯＲ、出力ラッチＯＬＴ、クロックＣＬＫよりラッチタイミング信号を発生するタイミング発生回路ＴＭＧ等から構成されている。ＬＦＳＲよりシグネチャ・パターンが入力されると、コンパレータＣＭＰはイクスクルーシブＯＲゲートＥＯＲによってリード・オンリ・メモリＲＯＭに格納されている期待シグネチャ・パターンとＬＦＳＲの出力パターンとを比較して一致しているとロウレベルの信号を、また一致していないとハイレベルの信号を出力する。この出力がラッチＯＬＴにラッチされて良／不良を示す信号ＥＲＲとして出力される。
なお、ＬＦＳＲの動作原理は既に公知であり、種々の文献等に記載されているので詳しい説明は省略するが、その原理に従い被検査論理回路に合った最適化が可能である。ＬＦＳＲを適用したＢＩＳＴを内蔵した一般の論理ＬＳＩでは、論理回路毎にＬＦＳＲの最適化が必要であったため設計上煩わしさがあったが、本実施例のＦＰＧＡでは同一のセル論理ブロックＣＬＢを使用しているので、その最適化は一律に行なうことができ、設計負担が軽減される。また、ＢＩＳＴを内蔵した従来のＬＳＩは、１つのＢＩＳＴがＬＳＩ内部回路全てを検査するグローバルなＢＩＳＴであっため、生成されるテストパターンではテスト充分性が保証されないが、本実施例のＢＩＳＴは各セル論理ブロックＣＬＢ内に設けられたローカルなＢＩＳＴであるため、テスト充分性も保証される。
図６は、図１に示されているＴＡＰを用いたインタフェース回路２１０の具体例を示す。
ＴＡＰは前述したように、ＩＥＥＥ１１４９．１規格で規定されているスキャンテストやＢＩＳＴ回路のためのインタフェースおよび制御回路で、入力ポートからのテストデータを出力ポートへシフトするときに使用するバイパスレジスタ２１１、回路へ特定の信号を伝える場合に使用するデータレジスタ２１２、チップ固有の製造識別番号を設定するためのデバイスＩＤレジスタ２１３、データレジスタの選択や内部のテスト方法を制御する場合に使用するインストラクションレジスタ２１４、ＴＡＰ回路全体を制御するコントローラ２１５等により構成されている。
上記データレジスタ２１２はオプション扱いのレジスタである。また、インストラクションレジスタ２１４に設定される命令には、４つの必須命令と３つのオプション命令が用意されている。コントローラ２１５には、専用の３つの外部端子から、テストモードを指定するためのテストモードセレクト信号ＴＭＳ、テストクロックＴＣＫ、リセット信号ＴＲＳＴが入力されており、これらの信号に基づいて上記レジスタ２１１〜２１４やセレクタ回路２１６〜２１８に対する制御信号を形成する。
また、ＴＡＰにはテストデータＴＤＩの入力端子とテスト結果データＴＤＯの出力端子が設けられており、入力されたテストデータＴＤＩは上記セレクタ回路２１６を介して各レジスタ２１１〜２１４または内部のスキャンパスＩｓｃａｎ，Ｂｓｃａｎへ供給される。また、レジスタ２１１〜２１４の内容および内部回路からのスキャンアウトデータは、セレクタ回路２１７、２１８を介してチップ外部へ出力される。さらに、ＴＡＰには、データレジスタ２１２とインストラクションレジスタ２１４の内容に従って内部のＢＩＳＴ回路に対する信号が形成されて供給されると共に、ＢＩＳＴ回路から出力されたテスト結果を示す信号がセレクタ回路２１７、２１８を介してチップ外部へ出力可能に構成されている。
図１の実施例のシステムＬＳＩでは、後に詳細に説明されるようにカスタム論理回路（ＦＰＧＡ）１２０やＣＰＵ１３０上に構築される自己テスト回路をＢＩＳＴ回路とみなして、上記ＴＡＰの有するＢＩＳＴ回路用の信号入出力機能を利用して、カスタム論理回路（ＦＰＧＡ）１２０やＣＰＵ１３０に対する自己テストのための設定信号やデータを入力したり、テスト結果およびＦＰＧＡ１２０内のメモリセルやＳＲＡＭ１４０に記憶されているデータを出力したりするように構成されている。ＴＡＰの有するスキャンテストのための機能は、図１の実施例のシステムＬＳＩでは使用されない。
なお、図６において、“Ｉｓｃａｎ”は内部論理回路を構成するフリップフロップをチェーン状に結合したシフトレジスタをテストデータのスキャンパスとして使用して、内部論理回路の診断を行なうためのテストパスを意味する。また、“Ｂｓｃａｎ”は信号入出力部（図１のインタフェース回路１９０）内に設けられているフリップフロップをチェーン状に結合したシフトレジスタをスキャンパスとして使用して、他の半導体集積回路との間の接続状態の診断（バウンダリスキャンテスト）を行なうためのテストパスを意味する。
次に、図１に示されているシステムＬＳＩに本発明に係るテスト方法を適用した場合のテスト手順の一例を、図７〜図１１を用いて説明する。図７には、ＬＳＩ全体のテスト手順の概略が、また図８〜図１１にはＬＳＩを構成する各ブロックのテスト手順の具体例が示されている。
本発明に係るテスト方法に従うと、図７に示されているように、先ずＦＰＧＡ１２０が前述したセル論理ブロックの機能を利用して検査され、不良の有無が判定されて不良があるときは不良個所の回避が行なわれる（ステップＳ１〜Ｓ３）。次に、ＦＰＧＡ１２０内の上記不良個所を除いた部分にＳＲＡＭ１４０をテストするためのテスト回路（ＡＬＰＧ）が構築され、ＳＲＡＭ１４０のテストが実行される（ステップＳ４，Ｓ５）。
ＳＲＡＭ１４０に不良個所が発見されなかった場合には、ＦＰＧＡ１２０内の上記不良個所を除いた部分にカスタム論理回路１１０およびＣＰＵ１３０をテストするためのテスト回路（ロジックテスタ）が構築され、カスタム論理回路１１０およびＣＰＵ１３０のテストが実行される（ステップＳ６〜Ｓ８）。このとき、既に検査が終了しているＳＲＡＭを利用してテストパターンもしくはテストパターン生成プログラムが格納される。
不良が発見されなかった場合には、ＦＰＧＡ１２０内の上記不良個所を除いた部分にＤＲＡＭ１５０〜１８０をテストするためのテスト回路（ＡＬＰＧ）が構築され、ＤＲＡＭ１５０〜１８０のテストが順次実行される（ステップＳ９，Ｓ１０）。そして、不良個所が発見された場合には、それがＳＲＡＭ１４０あるいは外部の記憶装置に記憶されてから、ＤＲＡＭ１５０〜１８０に設けられている冗長回路を利用して不良ビットを救済するための救済プログラムがＣＰＵ１３０に読み込まれ、ＣＰＵ１３０によってそのプログラムが実行されてビット救済が行なわれる（ステップＳ１１，Ｓ１２）。
その後、ＦＰＧＡ１２０内の上記不良個所を除いた部分にユーザ論理等のカスタム論理の一部が構成されて、システムＬＳＩとして完成される（ステップＳ１３）。このステップＳ１３では、先ずＴＡＰ２１０をＦＰＧＡ１２０内の接続情報記憶用メモリセルＳＭＣのアクセスモードに設定してから、ステップＳ１で得られている不良個所を示す情報を利用してその不良個所を回避するようにユーザ論理を構成するデータをＦＰＧＡ１２０内の正常なクロスポイントスイッチのメモリセルＳＭＣに書き込むことによって所望の論理を構成する。
図８には、図７のフローチャートのステップＳ１〜Ｓ３におけるカスタム論理回路（ＦＰＧＡ）１２０の自己検証のより詳しい手順が示されている。
本実施例のデバイス（システムＬＳＩ）に電源電圧が投入されると、ＦＰＧＡ１２０を構成するセル論理ブロックＣＬＢの論理ゲート回路ＬＧ１，ＬＧ２が能動化され、欠陥がある場合には論理ゲート回路ＬＧ１の出力がロウレベルになってその出力状態が接続情報記憶用メモリセルＳＭＣに記憶される（ステップＳ１１１）。
次に、テスタ５００を用いてテスト用インタフェース回路としてのＴＡＰ２１０にテストモードセレクト信号ＴＭＳやインストラクションレジスタ２１４に設定するコードを入力して、ＴＡＰ２１０を、ＦＰＧＡ１２０内の接続情報記憶用メモリセルＳＭＣのアクセスモードに設定する（ステップＳ１１２）。続いて、メモリセルＳＭＣに対して正常を示すデータ（上記セル論理ブロックＣＬＢの自己検証による欠陥状態を示す論理レベルと逆の論理レベル）を書き込む（ステップＳ１１３）。次に、上記メモリセルＳＭＣのデータの読み出しを行なう（ステップＳ１１４）。
そして、読み出されたデータと書込みデータとを比較することでいずれのセル論理ブロックＣＬＢに欠陥があるか判定する（ステップＳ１１５）。また、例えば上記書込みデータと逆のデータを書き込んで読み出すことによってメモリセルＳＭＣ自身に欠陥のあるクロスポイントスイッチＣＳＷも検出することができる。
次に、テスタ５００において、上記判定結果に基づいて正常なクロスポイントスイッチＣＳＷおよびセル論理ブロックＣＬＢのマップを作成する（ステップＳ１１６）。作成したマップすなわちクロスポイントスイッチＣＳＷおよびセル論理ブロックＣＬＢの正常／異常を示す情報は、テスタ５００内の記憶装置等に格納しておく。それから、ＦＰＧＡ１２０上に構築するＳＲＡＭテスタ（ＡＬＰＧ）のＨＤＬ記述をデータベース等から読み出してテスタ５００で論理合成等を行ない、上記マップに基づいて欠陥のあるクロスポイントスイッチＣＳＷおよびセル論理ブロックＣＬＢを回避してＡＬＰＧ（Ａｌｇｏｒｉｔｈｍｉｃ  Ｍｅｍｏｒｙ  Ｐａｔｔｅｒｎ  Ｇｅｎｅｒａｔｏｒ）を構築するデータを生成する（ステップＳ１１７）。そして、生成したデータをテスタ５００内の記憶装置等に格納する（ステップＳ１１８）。このデータは、正常なクロスポイントスイッチＣＳＷのスイッチＭＯＳＦＥＴ  Ｑｓｗを、構成したい論理に応じて選択的にオンさせるデータである。
図９には、図７のフローチャートのステップＳ４〜Ｓ５におけるＳＲＡＭ部１４０の検査のより詳細な手順が示されている。
ＳＲＡＭ部１４０の検査では、先ずテスタ５００からＴＡＰ２１０に制御信号を供給してＦＰＧＡ１２０内のクロスポイントスイッチ制御情報を記憶するためのメモリセルＳＭＣを選択状態にする（ステップＳ１２１）。それから、選択状態のメモリセルＳＭＣに上記ステップＳ１１８で記憶装置に記憶されたＡＬＰＧを構築するデータを転送する（ステップＳ１２２）。これによって、ＦＰＧＡ１２０内にＳＲＡＭを検査するためのテストパターンを発生可能なＡＬＰＧを含むテスト回路が構築される。ＦＰＧＡ１２０内に構築されるＡＬＰＧの構造およびＡＬＰＧを構築する具体的な方法については、後に詳しく説明する。
次に、ＡＬＰＧを動作させてテストパターンを発生させるためのプログラムをテスタ５００によりＴＡＰ２１０を介してＦＰＧＡ１２０内のメモリ回路に書き込む（ステップＳ１２３）。このメモリ回路は、ステップＳ１２２でのＡＬＰＧの構築の際に、ＦＰＧＡ１２０を構成するセル論理ブロックＣＬＢとクロスポイントスイッチＣＳＷとによって構成されている。
続いて、テスタ５００からＴＡＰ２１０に制御信号を供給してＳＲＡＭ部１４０を選択状態にする（ステップＳ１２４）。そして、上記ＦＰＧＡ１２０内のＡＬＰＧに起動をかけ、ステップＳ１２３で書き込んだテストパターン生成プログラムを実行させてテストパターンを発生させ、発生されたテストパターンをバス２００等を介して選択状態のＳＲＡＭ部１４０に供給してテストを行ない、そのテスト結果をＴＡＰ２１０を介して外部（テスタ５００）へ出力する（ステップＳ１２５，Ｓ１２６）。
すると、テスタ５００は出力されたテスト結果からＳＲＡＭ部１４０内に不良があるか否かを判定し良品と不良品を選別する（ステップＳ１２７）。なお、ＦＰＧＡ１２０内に構築されたＡＬＰＧにより形成された書込みデータを期待値として外部へ出力させるとともに、ＳＲＡＭから読み出されたデータも外部へ出力させることで、外部のテスタで期待値と読み出しデータとを比較して不良の有無の判定を行なうように構成することも可能である。また、テストパターン生成プログラムをＦＰＧＡ内に構成したメモリ回路に記憶される代わりに、外部からＴＡＰを介して順次テストパターン生成プログラムを構成する命令コードを入力させるようにしてもよい。
図１０には、図７のフローチャートのステップＳ６〜Ｓ８におけるロジック部すなわちカスタム論理部１１０およびＣＰＵ部１３０の検査のより詳細な手順が示されている。
論理部１１０および１３０の検査では、先ずテスタ５００において、ＦＰＧＡ１２０内にロジックテスタを構築するためのデータを作成する（ステップＳ１３１）。このとき、図８のＦＰＧＡ自己検証フローのステップＳ１１６で生成された正常なセル論理ブロックＣＬＢとクロスポイントスイッチＣＳＷのマップを用いて故障のある回路を回避してロジックテスタを構築するようなデータが作成される。
次に、テスタ５００からＴＡＰ２１０に制御信号を供給してＦＰＧＡ１２０内のクロスポイントスイッチ制御情報を記憶するメモリセルＳＭＣを選択状態にする（ステップＳ１３２）。それから、選択状態のメモリセルＳＭＣに上記ステップＳ１３１で記憶装置に記憶されたロジックテスタを構築するデータを転送する（ステップＳ１３３）。これによって、ＦＰＧＡ１２０内に論理部を検査するためのテストパターンを発生可能なテスト回路が構築される。このとき、ＦＰＧＡ内にプログラムメモリを構成し構成されたメモリにロジックテスタを動作させるためのプログラムも転送しておくようにしてもよい。ＦＰＧＡ１２０内に構築されるロジックテスタの構造およびロジックテスタを構築する具体的な手順については、後に詳しく説明する。
次に、テスタ５００からＴＡＰ２１０に制御信号を供給して、図９のフローの検査が終了したＳＲＡＭ部１４０を選択する（ステップＳ１３４）。そして、予めテスタ５００内に用意されているカスタム論理部１１０を検査するためのテストパターンを発生するプログラムをテスタ５００によりＴＡＰ２１０を介してＳＲＡＭ１４０内に書き込む（ステップＳ１３５）。ＳＲＡＭのテストパターンを生成するプログラムのように、ＦＰＧＡ内のメモリ回路に格納せずに検査が終了したＳＲＭＡ内に格納するのは、一般にメモリのテストパターンよりも論理回路のテストパターンの方が長くより大きなメモリ領域を必要とするためである。
続いて、上記ＦＰＧＡ１２０内のロジックテスタに起動をかけ、ステップＳ１３５でＳＲＡＭ１４０に書き込んだテストパターン生成プログラムを読み出してテストパターンを生成しながらカスタム論理部１１０に供給する（ステップＳ１３６）。そして、カスタム論理部１１０からの出力信号を期待値と比較してテスト結果をＴＡＰ２１０を介して外部（テスタ５００）へ出力する（ステップＳ１３７）。
すると、テスタ５００は出力されたテスト結果からカスタム論理部１４０内に不良があるか否かを判定し良品と不良品を選別する（ステップＳ１３８）。
次に、予めテスタ５００内に用意されているＣＰＵ１３０を検査するためのテストパターン生成プログラムをＳＲＡＭ１４０へ転送する（ステップＳ１３９）。続いて、上記ＦＰＧＡ１２０内のロジックテスタに起動をかけ、ステップＳ１３５でＳＲＡＭ１４０に書き込んだテストパターン生成プログラムを読み出してテストパターンを生成しながらＣＰＵ１３０に供給する（ステップＳ１４０）。そして、ＣＰＵ１３０からの出力信号を期待値と比較してテスト結果をＴＡＰ２１０を介して外部（テスタ５００）へ出力する（ステップＳ１４１）。
すると、テスタ５００は出力されたテスト結果からＣＰＵ１３０内に不良があるか否かを判定し良品と不良品を選別する（ステップＳ１４２）。
図１１には、図７のフローチャートのステップＳ９〜Ｓ１２におけるＤＲＡＭ部１５０〜１８０の検査のより詳細な手順が示されている。
ＤＲＡＭ部１５０〜１８０の検査では、先ずテスタ５００において、ＦＰＧＡ１２０内にＤＲＡＭを検査するためのテストパターンを発生可能なＡＬＰＧ（Ａｌｇｏｒｉｔｈｍｉｃ  Ｍｅｍｏｒｙ  Ｐａｔｔｅｒｎ  Ｇｅｎｅｒａｔｏｒ）を構築するためのデータを作成する（ステップＳ１５１）。このとき、図８のＦＰＧＡ自己検証フローのステップＳ１１６で生成された正常なセル論理ブロックＣＬＢとクロスポイントスイッチＣＳＷのマップを用いて故障のある回路を回避してＡＬＰＧを構築するようなデータが作成される。なお、ＤＲＡＭを検査するＡＬＰＧはＳＲＡＭを検査するＡＬＰＧとほぼ同様であり、リフレッシュ動作の正常／異常を判定する処理が追加されている点が異なる。
次に、テスタ５００からＴＡＰ２１０に制御信号を供給してＦＰＧＡ１２０内のクロスポイントスイッチ制御情報を記憶するメモリセルＳＭＣを選択状態にする（ステップＳ１５２）。それから、選択状態のメモリセルＳＭＣに上記ステップＳ１５１で作成されたＡＬＰＧを構築するデータを転送する（ステップＳ１５３）。これによって、ＦＰＧＡ１２０内にＤＲＡＭを検査するためのＡＬＰＧを含むテスト回路が構築される。ＦＰＧＡ１２０内に構築されるＡＬＰＧの構造およびＡＬＰＧを構築する具体的な方法は、後に詳しく説明されるＳＲＡＭを検査するためのＡＬＰＧとほぼ同様である。
次に、ＡＬＰＧを動作させてテストパターンを発生させるためのプログラムをテスタ５００によりＴＡＰ２１０を介してＦＰＧＡ１２０内のメモリ回路に書き込む（ステップＳ１５４）。このメモリ回路は、ステップＳ１５３でのＡＬＰＧの構築の際に、ＦＰＧＡ１２０を構成するセル論理ブロックＣＬＢとクロスポイントスイッチＣＳＷとによって構成されている。なお、テストパターン生成プログラムは、ＳＲＡＭ１４０内に記憶してもよいし、ＤＲＡＭ検査の際に外部から順次命令コードをＦＰＧＡ内のＡＬＰＧに入力するようにしてもよい。
続いて、テスタ５００からＴＡＰ２１０に制御信号を供給してＳＲＡＭ部１４０を選択状態にして（ステップＳ１５５）、ＳＲＡＭ内に後述のＤＲＡＭテスト（ステップＳ１５９）で検出される欠陥ビットの位置を記憶するためのフェールメモリを構成する（ステップＳ１５６）。次に、テスタ５００からＴＡＰ２１０に制御信号を供給してＣＰＵ部１３０を選択状態にして（ステップＳ１５７）、ＤＲＡＭの欠陥ビットを救済するための救済プログラムをＣＰＵ１３０内のメモリに転送する（ステップＳ１５８）。この救済プログラムはＳＲＡＭ１４０内に入れておくようにしてもよい。
この救済プログラムは、所定の置換アルゴリズムに従って、上記ＤＲＡＭ１５０に付随して設けけられている冗長回路内のアドレス変換回路に置換アドレスを設定し、欠陥ビットを含むメモリ行またはメモリ列を予備行または予備列に置きかえるものである。テスト結果に基づいて、最も適切な予備メモリ行または予備メモリ列を選択して、欠陥ビットと置き換える冗長置換アルゴリズムそれ自身は公知であり、それを使用することで、本実施例のために新規な置換アルゴリズムを必要としない。
それから、テスタ５００によりＴＡＰ２１０に制御信号を供給してＤＲＡＭ１５０を選択状態にしてから上記ＦＰＧＡ１２０内のＡＬＰＧに起動をかけ、ステップＳ１５４で書き込んだテストパターン生成プログラムを実行させてテストパターンを発生させ、発生されたテストパターンを選択状態のＤＲＡＭ部１５０に供給してテストを行ない、その結果すなわち欠陥ビットの位置をＳＲＡＭ１４０に構成されたフェールメモリに記憶させる（ステップＳ１５９）。なお、ステップＳ１５９でのＤＲＡＭテストでは、ＳＲＡＭテストと同様のリード／ライトテストの他に、正常なリフレッシュ動作が行なわれるか否かのテストも行なわれる。
次に、ＣＰＵ１３０に起動をかけて救済プログラムを実行させ、上記フェールメモリ（ＳＲＡＭ１４０）に記憶された欠陥ビットの情報に基づいて欠陥ビットを含むメモリ行またはメモリ列を予備行または予備列に置きかえるビット救済処理を行なう（ステップＳ１６０）。その後、正常に救済が行なわれたか否かのテストが救済プログラムの一連の動作として行なわれる（ステップＳ１６１）。そして、そのテスト結果がチップ外部のテスタ５００に出力される。
すると、テスタ５００は出力されたテスト結果からＤＲＡＭ部１５０内に不良があるか否かを判定し良品と不良品を選別する（ステップＳ１６２）。ＤＲＡＭ部１５０のテストおよびビット救済が終了すると、再びステップＳ１５９へ戻って他のＤＲＡＭ部１６０、１７０および１８０についても同様にしてテストおよびビット救済とテスト結果の判定が行なわれる。
次に、前記ＳＲＡＭ１４０の検査の際にＦＰＧＡ１２０内に構築されるＡＬＰＧの詳細について説明する。ＡＬＰＧは、例えば図１２に示されているように、所定のテストパターン生成アルゴリズムに従って記述された複数のマイクロ命令群からなるマイクロプログラムが格納される命令メモリ４１１と、該命令メモリ４１１から読み出されるべきマイクロ命令の命令アドレスを指定するプログラムカウンタ４１２と、上記命令メモリ４１１から読み出されたマイクロ命令内の命令コードを解読してメモリ回路部に対する制御信号やプログラムカウンタ４１２等テスト回路内の内部回路に対する制御信号を形成するシーケンス制御回路４１３と、命令メモリ４１１より読み出されたマイクロ命令に従ってテストアドレスを生成するアドレス演算回路４１４と、読み出されたマイクロ命令に従ってテストデータおよび期待値データを生成するテストデータ生成回路４１５と、上記テストアドレスによってＳＲＡＭ部１４０から読み出されたデータと上記テストデータ生成回路４１５により生成された期待値データとを比較し、正常な書込みがなされた否か判定する比較判定回路４１６等により構成されている。
上記比較判定回路４１６における判定結果は、データの一致／不一致を示す判定信号ＦとしてＴＡＰ２１０を介してチップの外部へ出力されるように構成されている。テストパターン生成アルゴリズム自体は公知であり、それらを適用することで、特に本実施例のために新規なアルゴリズムを必要としない。
上記命令メモリ４１１に格納される複数のマイクロ命令は、既存のテスタ言語乃至はテスト言語を用いて記述することができる。上記複数の命令によって定義される上記所定のアルゴリズムに従って、テストパターン（アドレスとデータ）が生成される。上記テスタ言語は、アドレスとデータとを含むテストパターンを効率的に発生するための有効な命令言語と見なされる。上記テスタ言語は、テスタ業界で用いられているような言語とされ、例えば、アドバンテスト社のテスタ言語と互換性のある言語が用いられる。既存のテストパターンのプログラムデータが利用できるからである。上記所定のアルゴリズムを記述する言語は、テスタ言語に限定されるものではなく、アドレスとデータとを含むテストパターンを発生することが可能な命令言語で有ればよい。
上記命令メモリ４１１がＳＲＡＭメモリセルによって構成される場合には、テストの実施に先立って、上記命令メモリにプログラムをロードする必要がある。ＦＰＧＡ１２０が不揮発性メモリを含む場合には、この不揮発性メモリの一部のアドレス領域に上記プログラムを格納しておき、ＳＲＡＭテストモードへの移行に応答して、上記プログラムを格納するアドレス領域から上記命令メモリ４１１へ上記プログラムをロードするのがよい。命令メモリ４１１を設ける代わりに連続した命令コードを外部のテスタから順次ＦＰＧＡ１２０内に構築されているＡＬＰＧのシーケンス制御部４１４に入力してＳＲＭＡのテストパターンを発生させるように構成してもよい。
なお、本実施例が適用される図１のシステムＬＳＩのようにメモリの他にＣＰＵ１３０やカスタム論理回路１１０を備えている場合には、図１３に示すように、メモリ回路１４０（１５０〜１８０）とＣＰＵ１３０及びカスタム論理回路１１０と、テスト回路が構築されるＦＰＧＡ１２０との間に専用バス２２０および切替えスイッチＳＷ１〜ＳＷｎからなる信号切替え回路２３０を設けた可変バス構成としてもよい。
上記信号切替え回路２３０内の切替えスイッチＳＷ１〜ＳＷｎを制御する信号ＣＳは、メモリ回路のテストの際には、ＡＬＰＧにおいて命令によって発生させ、それをスイッチＳＷ１〜ＳＷｎへ与えるようにしてもよい。また、外部から供給されるテストモード指定信号に基づいて切替え制御信号ＣＳを形成するように構成してもよい。
また、上記切替えスイッチＳＷ１〜ＳＷｎは、メモリ回路１４０とＣＰＵ１３０及びカスタム論理回路１１０との間、またはメモリ回路１４０とＡＬＰＧが構築されたＦＰＧＡ１２０との間の接続切り替えのみならず、ＣＰＵ１３０及びカスタム論理回路１１０とＦＰＧＡ１２０との間を接続できるように構成するのがよい。
図１４には、上記命令メモリ４１１に格納されるマイクロ命令の命令フォーマットの構成例が示されている。前述のように、このマイクロ命令のフォーマットは、テスタ言語に基づいている。
この実施例のマイクロ命令は、ジャンプ命令で使用する命令の飛び先番地を示すＰＣアドレスが格納されるアドレスフィールドＭＦａと、シーケンス制御コードが格納されるオペコードフィールドＭＦｂと、命令の繰り返し数などが格納されるオペランドフィールドＭＦｃと、アドレスやデータの出力およびリード／ライトを指示する制御コードが格納される制御フィールドＭＦｄと、アドレス演算命令コードが格納されるアドレス演算コードフィールドＭＦｅと、データ生成命令コードが格納されるデータ生成コードフィールドＭＦｆ等からなる。アドレスフィールドＭＦａは、次に実行されるべき命令のアドレスを規定するフィールドと見なされる。
この実施例に使用されるテスタ言語としてのマイクロ命令の特徴は、１つの命令でテスト用のアドレス演算とデータ演算とを指定して２つの演算を並列に実行する点にある。
図１５には、シーケンス制御回路４１３の構成例が示されている。この実施例のシーケンス制御回路４１３は、オペコードフィールドＭＦｂの制御コードを解読して制御信号を形成するデコーダなどからなる命令解読制御部４３０と、プログラムカウンタ４１２の値を「＋１」するためのインクリメンタ４３１と、上記インクリメンタ４３１またはアドレスフィールドＭＦａ内の飛び先番地のいずれかを選択してプログラムカウンタ４１２へ供給するマルチプレクサ４３２と、オペランドフィールドＭＦｃ内の繰り返し数を保持する複数のインデックスレジスタ４３３と、該インデックスレジスタ４３３の値を「−１」するためのデクリメンタ４３４と、「−１」された値を保持する複数のプレーンあるいはウェイから構成されるワーキングレジスタ４３５と、後述のｊｘｄ命令（表１参照）で用いるデータ反転の有無を示すフラグ４３６と、ｊｉｎｄｅｘ命令で用いるオペランドのプログラムカウンタ４１２への転送の有無を示す複数のフラグ４３７と、レジスタ４３３，４３５の値を選択的に上記デクリメンタ４３４に供給する複数のマルチプレクサ４３８と、デクリメンタ４３４の値をワーキングレジスタ４３５のいずれかのプレーンに分配するデマルチプレクサ４３９から構成される。
表１には、上記マイクロ命令内のオペコードフィールドＭＦｂに定義乃至記述格納されるところの上記シーケンス制御に用いられるオペコードの種類とその内容が示されている。
【表１】
0004147005.tif 000002
表１において、「ｎｏｐ」で示される命令は、プログラムカウンタ４１２の値をインクリメンタ４３１で「＋１」してプログラムカウンタ４１２へ戻すことを指示するノーオペレーション命令つまりプログラムカウンタの更新以外に何の操作を行なわずに次の命令に移ることを指令する命令である。
また、「ｊｉｎｄｅｘ１」〜「ｊｉｎｄｅｘ４」は、ジャンプによる命令のループを回すために用意された命令である。メモリのパターンテストにおいては、ジャンプ命令を用いて同じ命令を何回も繰り返して実行することで命令数、すなわち、プログラム長を減らすことができる場合（例えば、アドレスを最終番地までインクリメントすることで、全メモリセルに「１」を書き込んで読み出すような場合）がある。このループ（ジャンプ）の回数を設定できるようにするために、本実施例では、インデックスレジスタ４３３を設けている。しかも、複数種類の判定方式を実行できるようにするため、ジャンプ命令とインデックスレジスタ４３３およびワーキングレジスタ４３５をそれぞれ４つずつ設けている。
各ジャンプ命令は同じ制御内容であるので、以下「ｊｉｎｄｅｘ１」による制御動作を説明し、他のジャンプ命令「ｊｉｎｄｅｘ２」〜「ｊｉｎｄｅｘ４」の説明は省略される。オペコードフィールドＭＦｂからｊｉｎｄｅｘ１命令が読み出されると、それが最初のｊｉｎｄｅｘ１命令であるか判定されて、その判定結果がフラグ４３７に反映される。具体的には、最初のｊｉｎｄｅｘ１のときはフラグｊｆ１＝０とされ、２回目以降はｊｆ１＝１とされる。
フラグｊｆ１＝０のときにｊｉｎｄｅｘ１命令が読み出されると、そのマイクロ命令のアドレスフィールドＭＦａ内のジャンプ先アドレスとしてのＰＣアドレスがプログラムカウンタ４１２へ設定されるように、マルチプレクサ４３２が制御される。それによって、マイクロ命令の実行シーケンスはその番地にジャンプされるとともに、フラグｊｆ１は「１」にセットされる。これと同時に、オペランドフィールドＭＦｃ内で定義されるループ回数がインデックスレジスタ４３３のｉｄｘに読み込まれる。
フラグｊｆ１＝１のときにｊｉｎｄｅｘ１命令が読み出されると、そのマイクロ命令のアドレスフィールドＭＦａ内のＰＣアドレスがプログラムカウンタ４１２へ設定される。そして、インデックスレジスタ４３３のｉｄｘ１内のループ回数がマルチプレクサ４３８を介してデクリメンタ４３４に供給されデクリメント「−１」される。デクリメントされた値は、デマルチプレクサ４３９を介してワーキングレジスタ４３５のｉｄｘｗ１に格納される。そして、ワーキングレジスタ４３５のｉｄｘｗ１が「０」になると、マイクロ命令のアドレスフィールドＭＦａ内のＰＣアドレスをプログラムカウンタ４１２へ設定しないで代わりに、プログラムカウンタ４１２のアドレスをインクリメンタ４３１で「＋１」してプログラムカウンタ４１２へ戻すようにマルチプレクサ４３２が制御される。
従って、マイクロ命令のオペコードフィルードＭＦｂにｊｉｎｄｅｘ命令が定義乃至記述され、そのアドレスフィールドＭＦａ内に当該マイクロ命令のジャンプ先アドレスとしてのＰＣアドレスが定義乃至記述されていると、オペランドフィールドＭＦｃ内で指定されたループ回数だけ同一のｊｉｎｄｅｘ命令が繰り返し実行され、最後にプログラムカウンタ４１２がインクリメントされて、次のマイクロ命令へ進んでループから抜け出すような制御が行なわれる。
また、表１内の「ｊｘｄ」命令は、フラグ４３６内のｄｆｌｇを参照し、そのｄｆｌｇフラグの値によってプログラムカウンタの値を操作する命令とされる。「ｊｘｄ」命令は、フラグ４３６内のｄｆｌｇフラグが「０」のような第１の値のときは、オペランドをプログラムカウンタへ転送し、プログラムをオペランドの示す飛び先番地の命令へジャンプさせ、かつ、ｄｆｌｇフラグを「１」のような第２の値にセットする。一方、「ｊｘｄ」命令は、ｄｆｌｇフラグが「１」のような第２の値のときは、プログラムカウンタの値をインクリメントし、プログラムカウンタへ戻し、かつ、ｄｆｌｇフラグを「０」のような第１の値にリセットする。
「ｊｍｐ」命令は、オペランドをプログラムカウンタへ転送して、プログラムをオペランドの示す飛び先番地の命令へジャンプさせることを指令する命令である。
「ｓｔｏｐ」命令は、シーケンス制御を終了させる事を指示する停止命令である。
図１６には、上記アドレス演算回路４１４の構成例が示されている。
この実施例のアドレス演算回路４１４は、大きく分けてＸアドレスの生成を行なうＸアドレス演算部４４１と、Ｙアドレスの生成を行なうＹアドレス演算部４４２とにより構成されている。Ｘアドレス演算部４４１とＹアドレス演算部４４２は、ほぼ同一の構成であるので、以下、Ｘアドレス演算部４４１の構成を説明し、Ｙアドレス演算部４４２の構成の説明を省略する。また、必要に応じて不可的なＺアドレス演算部を設けることにより、部分的なパターンの生成（パーシャルパターン）を行なわせるようにできる。
Ｘアドレス演算部４４１は、Ｘアドレスの初期値を格納する初期値レジスタＸｈｏｌｄと、「０」を保持するゼロ設定手段４４３と、Ｘアドレスの初期値または「０」のいずれかを選択するマルチプレクサＭＵＸ１と、選択された初期値または「０」を保持するベースレジスタＸｂａｓｅと、レジスタＸｂａｓｅの値を加算する第１の演算器ＡＬＵ１と、演算器ＡＬＵ１の演算結果または「０」または帰還値のいずれかを選択する第２のマルチプレクサＭＵＸ２と、選択された値を保持するカレントレジスタＸｃｕｒｒｅｎｔと、レジスタＸｃｕｒｒｅｎｔの値を加算もしくは減算する第２の演算器ＡＬＵ２と、この第２演算器ＡＬＵ２または上記第１演算器ＡＬＵ１の出力のいずれかを選択する第３のマルチプレクサＭＵＸ３と、選択された出力を反転可能なインバータＩＮＶとから構成されている。
このインバータＩＮＶは、メモリのパターンテストにおいて、アドレス信号の切り換えノイズによる誤動作を試験する場合があり、その際にアドレス信号の反転信号を出力する必要があるため設けられる。このインバータＩＮＶを使用することで、上記試験におけるアドレス信号の反転信号を容易に形成することができる。
特に制限されないが、この実施例では、上記Ｘアドレス演算部４４１の演算器ＡＬＵ１，ＡＬＵ２で生成されたＸアドレスをＹアドレス側へ、また、Ｙアドレス演算部４４２で生成されたＹアドレスをＸアドレス側へ出力できるように、それぞれの第３マルチプレクサＭＵＸ３が構成されている。
これにより、複数の種類のメモリ、例えば、アドレスマルチプレックス方式のメモリおよびアドレスノンマルチプレックス方式のメモリのいずれのテスト回路としても使用できるように構成されている。つまり、命令メモリ４１１に格納されるマイクロ命令を書き換えるだけで、すべてのメモリに対してそれに必要なテストパターンの発生乃至検査を行なうことができる。
なお、上記Ｘアドレス演算部４４１とＹアドレス演算部４４２の異なる点は、Ｘアドレス演算部４４１の第１演算器ＡＬＵ１がオーバーフローしたときにＹアドレス演算部４４２の第１演算器ＡＬＵ１に対してはボロー信号ＢＲが供給されるようにされている点である。
表２には、上記マイクロ命令内の演算コードフィールドＭＦｅに記述乃至定義格納されるところの上記Ｙアドレス演算部４４２の第１演算器ＡＬＵ１でのＹアドレス演算（ベース演算）に用いられる演算コードの種類とその内容が示されている。
【表２】
0004147005.tif 000003
表２において、Ｙｂａｓｅ←０は、ベースレジスタＹｂａｓｅの値を「０」にすることを指令する命令である。Ｙｂａｓｅ←Ｙｈｏｌｄは、初期値レジスタＹｈｏｌｄの内容をベースレジスタＹｂａｓｅに入れることを指令する命令である。Ｙｂａｓｅ←Ｙｂａｓｅ＋１は、ベースレジスタＹｂａｓｅの値をインクリメント（＋１）してレジスタＹｂａｓｅに戻すことを指令する命令である。Ｙｂａｓｅ←Ｙｂａｓｅ＋１（ＢＲ）は、ベースレジスタＸｂａｓｅの値が最大値でなければＹｂａｓｅの値をそのままにし、かつ、Ｘｂａｓｅの値が最大値であればＹｂａｓｅの値をインクリメントしてレジスタＹｂａｓｅに戻すことを指令する命令である。このとき、第１演算器ＡＬＵ１から第２演算器ＡＬＵ２へボロー信号ＢＲが供給される。
表３には、上記Ｘアドレス演算部４４１の第１演算器ＡＬＵ１でのアドレス演算に用いられる演算コードの種類とその内容が示されている。
表４には、上記Ｙアドレス演算部４４２の第２演算器ＡＬＵ２でのＹアドレス演算（カレント演算）に用いられる演算コードの種類とその内容が示されている。
表５には、上記Ｘアドレス演算部４４１の第２演算器ＡＬＵ２でのアドレス演算に用いられる演算コードの種類とその内容が示されている。
表４において、左側の欄はテスタ言語を用いて記述されたＡＬＰＧ記述で、右側の欄はそれに対応した機能動作レベル記述である。この記述をハードウェア記述言語（ＨＤＬ記述）のルールに従い記述して機能を表現できる。
【表３】
0004147005.tif 000004
【表４】
0004147005.tif 000005
【表５】
0004147005.tif 000006
図１７には上記テストデータ生成回路４１５の構成例が示されている。
この実施例のテストデータ生成回路４１５は、ライトデータまたは期待値の初期値を格納する初期値レジスタＴｐｈｏｌｄと、当該初期値レジスタＴｐｈｏｌｄの値を反転可能なインバータＩＮＶＥＲＴ１と、出力すべきテストデータまたは期待値の基準データを保持するベースデータレジスタＴｐと、ビットシフト機能を有する演算器ＡＬＵと、演算器ＡＬＵの出力を反転可能なインバータＩＮＶＥＲＴ２とから構成されている。なお、上記実施例では、ビット幅を１８ビットとしているが、必要に応じてテストデータ回路を拡大して、所望のビット幅に構成できる。
表６には、上記マイクロ命令内のデータ生成コードフィールドＭＦｆに定義乃至は記述されるところの上記テストデータ生成回路４１５での動作制御に用いられる制御コードの種類とその内容が示されている。表６において、表３〜表５の命令と同一規則で表されている命令は、ほぼ同様の命令である。
Ｔｐ←Ｔｐ＊２は、レジスタＴｐと演算器ＡＬＵを制御してレジスタＴｐ内の１８ビットのデータを演算器ＡＬＵで処理してビット列をＭＳＢ側もしくはＬＳＢ側へ１ビットシフトさせてレジスタＴｐに戻す命令である。この命令によって、メモリ部が１ワードあるいは１バイトのような単位でデータのリード・ライトが行なわれるタイプのメモリであっても、メモリセルに対して１ビットずつデータ「１」を書き込むためのテストデータを比較的容易に生成することができる。
【表６】
0004147005.tif 000007
表７には、メモリの試験方法の１つであるところのマーチング試験に関するマイクロ命令のリストの一例が示される。
マーチング試験は、次のように行われる。メモリアレイ１内のメモリセルの全ビットにおいて、その中の１ビットが順番に選択される。選択されたメモリセルには、「０」のデータが書き込まれる。その後、書き込まれた「０」のデータの読み出しが行なわれる。続いて、全ビットにおいて、その中の１ビットが順番に選択される。選択されたメモリセルには「１」のデータが書き込まれる。その後、書き込まれた「１」のデータが読み出されて、それぞれ期待値と比較して欠陥の有無が判定される。
一例として、Ｘアドレスが４ビット、Ｙアドレスが４ビットで、２５６ビットの記憶容量を有するメモリアレイを想定したマーチング試験が説明される。
【表７】
0004147005.tif 000008
表７において、記号ＷおよびＲは、制御フィールドＭＦｄに記述乃至定義されるところのメモリに対するリード／ライトを指示する制御コードである。この制御コードは、Ｗに対応したビットとＲに対応したビット、つまり、２ビットで表すようにされている。「ＰＣアドレス」の欄に記載されている数字は、飛び先番地を示すもので、当該マイクロ命令実行後にＰＣの欄に記述されている番号のマイクロ命令に移行してループもしくはジャンプすることを意味している。また、「制御命令等」の欄に記載されている記号Ｘ←Ｘｂａｓｅ，Ｙ←Ｙｂａｓｅは、それぞれベースレジスタＸｂａｓｅ，Ｙｂａｓｅの値をＸアドレス，Ｙアドレスとして出力することを意味している。
図１８および図１９には、前記マイクロプログラム制御方式の制御部と演算部とからなるテスト回路（ＡＬＰＧ）によりＳＲＡＭ１４０のマーチング試験を行なう場合の表７のマイクロ命令リストに従った処理フローの一例を示す。このうち図１８はマイクロ命令内のオペコードとオペランドとによるシーケンス制御のフローを示す。また、図１９は、図１８に示されるシーケンス制御のフローと並行して実行されるところのアドレス演算コードとデータ生成コードによるテストアドレスおよびテストデータ（ライトデータ、期待値データ）の生成フローを示す。これらの処理は、前述の表１〜表６に記述されている命令コードを用いてシーケンス制御回路４１３およびアドレス演算回路４１４、データ生成回路４１５を動作させることにより実行することができる。
以下、図１８と図１９の各ステップを対応させながら、マーチング試験の手順を説明する。
外部からプログラムカウンタ４１２にスタートアドレスとして、表７のリストに示される最初の命令の番地がセットされると、図１８および図１９のフローが開始される。先ず、命令メモリ４１１から表７の最初のマイクロ命令が読み出されると、オペコードは「ｎｏｐ」であるため、シーケンス制御回路４１３は何もせずただプログラムカウンタ４１２を１つだけ進める（ステップＳ２０１）。一方、アドレス演算回路４１４およびデータ生成回路４１５は、初期値レジスタＸｈｏｌｄ，Ｙｈｏｌｄ，Ｔｈｏｌｄに入っている初期値「０」をベースレジスタＸｂａｓｅ，Ｙｂａｓｅ，Ｔｐにそれぞれ設定する（ステップＳ２２１）。
次に、上記ステップＳ２０１でプログラムカウンタ４１２がインクリメントされているため、表７の２番目のマイクロ命令が読み出される。第２のマイクロ命令のオペコードは「ｊｉｎｄｅｘ１」であるため、シーケンス制御回路４１３ではオペランドの繰り返し回数がインデックスレジスタｉｄｘ１にセットされる（ステップＳ２０２）。
インデックスレジスタｉｄｘ１の最初の設定値はメモリアレイ１の容量（バイト数もしくはワード数）に対応される。一方、アドレス演算回路４１４では、演算コードＸ←Ｘｂａｓｅ，Ｙ←ＹｂａｓｅによってベースレジスタＸｂａｓｅ，Ｙｂａｓｅの値をＸアドレス，Ｙアドレスとしてそれぞれ出力する。データ生成回路４１５からはレジスタＴｐの値「０」が出力される。そして、このとき、制御信号Ｗ（書き込み）が出力される。これによって、メモリアレイ１ではアドレス演算回路４１４から出力されたＸ，Ｙアドレスに対応したメモリセルが選択されてデータ「０」が書き込まれる（ステップＳ２２２）。
シーケンス制御回路４１３はオペコード「ｊｉｎｄｅｘ１」によってインデックスレジスタｉｄｘ１の値をデクリメントしてワーキングレジスタｉｄｘｗに入れ、それが「０」になるまで同一命令を繰り返す（ステップＳ２０３，Ｓ２０４）。
また、アドレス演算回路４１４では演算コードＸｂａｓｅ←Ｘｂａｓｅ＋１によってベースレジスタＸｂａｓｅの値すなわちＸアドレスをインクリメントし、Ｙｂａｓｅ←Ｙｂａｓｅ＋１（ＢＲ）によってベースレジスタＸｂａｓｅが最大値になるとＹアドレスをインクリメントする。上記インデックスレジスタｉｄｘ１の最初の設定値はメモリアレイ１の容量と同じであるので、上記動作の繰り返しによって、メモリアレイ１内のすべてのメモリセルに順番にデータ「０」が書き込まれる（ステップＳ２２３，Ｓ２２４）。
ワーキングレジスタｉｄｘｗの値が「０」になると、シーケンス制御回路４１３はプログラムカウンタ４１２の値をインクリメントして、表７の３番目のマイクロ命令を読み出す。そのオペコードは「ｎｏｐ」であるため、シーケンス制御回路４１３は何もせずプログラムカウンタ４１２を１つだけ進める（ステップＳ２０５）。
一方、アドレス演算回路４１４は、３番目のマイクロ命令の演算コードに従って、Ｘ，ＹアドレスをインクリメントしてからベースレジスタＸｂａｓｅ，Ｙｂａｓｅに入っている値をＸアドレス，Ｙアドレスとしてそれぞれ出力する。このときベースレジスタＸｂａｓｅ，Ｙｂａｓｅの値は「０」に戻っている。データ生成回路４１５はこのとき「０」を出力する。また、制御フィールドＭＦｄの制御コードに従って、制御信号Ｒ（読み出し）が出力される。これによって、当該アドレスのデータが読み出され、期待値データ「０」と比較される（ステップＳ２２５，Ｓ２２６）。
次に、上記ステップＳ２０５でプログラムカウンタ４１２がインクリメントされているため、表７の４番目のマイクロ命令が読み出される。第４のマイクロ命令のオペコードは「ｊｉｎｄｅｘ１」であるため、シーケンス制御回路４１３ではオペランドの繰り返し回数がインデックスレジスタｉｄｘ１にセットされる（ステップＳ２０６）。インデックスレジスタｉｄｘ１の最初の設定値はメモリアレイ１の容量（バイト数もしくはワード数）に対応される。ただし、第４命令のｊｉｎｄｅｘ１命令コードは第２命令のｊｉｎｄｅｘ１命令コードと異なるＰＣアドレス（飛び先番地）を有するため、実行後に第３の命令（オペコードが「ｎｏｐ」）に戻る。
一方、アドレス演算回路４１４では、演算コードＸ←Ｘｂａｓｅ，Ｙ←ＹｂａｓｅによってベースレジスタＸｂａｓｅ，Ｙｂａｓｅの値をＸアドレス，Ｙアドレスとしてそれぞれ出力する。また、データ生成コードＤｉｎｖｅｒｔによって、データ生成回路４１５からはレジスタＴｐの値「０」を反転したデータ「１」が出力される。そして、このとき、制御信号Ｗ（書き込み）が出力される。これによって、メモリアレイ１では出力されたＸ，Ｙアドレスのメモリセルにデータ「１」が書き込まれる（ステップＳ２２７）。
シーケンス制御回路４１３はオペコード「ｊｉｎｄｅｘ１」によってインデックスレジスタｉｄｘ１の値をデクリメントしてワーキングレジスタｉｄｘｗに入れ、それが「０」になるまで「ｎｏｐ」命令に戻って繰り返す（ステップＳ２０７，Ｓ２０８）。また、アドレス演算回路４１４では演算コードＸｂａｓｅ←Ｘｂａｓｅ＋１によってベースレジスタＸｂａｓｅの値すなわちＸアドレスをインクリメントし、Ｙｂａｓｅ←Ｙｂａｓｅ＋１（ＢＸ）によってベースレジスタＸｂａｓｅが最大値になるとＹアドレスをインクリメントする。上記インデックスレジスタｉｄｘ１の最初の設定値はメモリアレイ１の容量と同じであるので、上記手順によって、メモリアレイ１内のすべてのメモリセルに対して順番に読み出しが行なわれ期待値と比較されてから当該アドレスに「１」が書き込まれる動作を繰り返す（ステップＳ２２７，Ｓ２２８）。
次に、表７の５番目のマイクロ命令が読み出される。第５のマイクロ命令のオペコードは「ｊｉｎｄｅｘ１」であるため、シーケンス制御回路４１３ではオペランドの繰り返し回数がインデックスレジスタｉｄｘ１にセットされる（ステップＳ２０９）。インデックスレジスタｉｄｘ１の最初の設定値はメモリアレイ１の容量（バイト数もしくはワード数）に対応される。この第５のｊｉｎｄｅｘ１命令コードは第２のｊｉｎｄｅｘ１命令コードと同じＰＣアドレスを有し、同一命令を繰り返す命令とされる。一方、アドレス演算回路４１４では、演算コードＸ←Ｘｂａｓｅ，Ｙ←ＹｂａｓｅによってベースレジスタＸｂａｓｅ，Ｙｂａｓｅの値をＸアドレス，Ｙアドレスとしてそれぞれ出力する。また、データ生成コードＤｉｎｖｅｒｔによって、データ生成回路４１５からはレジスタＴｐの値「０」を反転したデータ「１」が出力される。そして、このとき、制御信号Ｒ（書き込み）が出力される。これによって、メモリアレイ１では出力されたＸ，Ｙアドレスによって指定されたメモリセルからデータの読み出しが行われる（ステップＳ２２９）。
シーケンス制御回路４１３はオペコード「ｊｉｎｄｅｘ１」によってインデックスレジスタｉｄｘ１の値をデクリメントしてワーキングレジスタｉｄｘｗに入れ、それが「０」になるまで「ｊｉｎｄｅｘ１」命令を繰り返す（ステップＳ２１０，Ｓ１１）。また、アドレス演算回路４１４では演算コードＸｂａｓｅ←Ｘｂａｓｅ＋１によってベースレジスタＸｂａｓｅの値すなわちＸアドレスをインクリメントし、Ｙｂａｓｅ←Ｙｂａｓｅ＋１（ＢＲ）によってベースレジスタＸｂａｓｅが最大値になるとＹアドレスをインクリメントする。上記インデックスレジスタｉｄｘ１の最初の設定値はメモリアレイ１の容量と同じであるので、上記動作の繰り返しによって、メモリアレイ１内のすべてのメモリセルが順番に読み出しが行なわれて期待値「１」と比較される（ステップＳ２３０，Ｓ２３１）。
次に、表７の６番目のマイクロ命令が読み出される。第６のマイクロ命令のオペコードは「ｊｘｄ」であるため、シーケンス制御回路４１３ではアドレスフィールドＭＦｃ内のＰＣアドレスの示す飛び先番地へジャンプする。この実施例では、表７の第２の命令「ｊｉｎｄｅｘ１」へ戻るようにされている。そして、再びｊｉｎｄｅｘ１命令が読み出されたときにフラグｄｆｌｇが「１」にセットされる。これにより、２巡目のシーケン処理においては、図１８のステップＳ２１２で「ＹＥＳ」と判定して、マーチング試験を終了する。
一方、２巡目のマイクロ命令リストの実行に際しては、図１９のステップＳ２２２〜Ｓ２３１において、データ生成回路４１４によりライトデータと期待値データを「１」として全ビットへ連続して書き込みを行なってから、書き込んだデータを１ビットずつ読み出してそこへ反転データ「０」を書き込み、その後、全ビットの連続した読み出しが行なわれるようにされている。図１９のフローでは、ステップＳ２３２で、ステップＳ２２２〜Ｓ２３１による上記のような１巡目とは逆のデータの書き込み読み出しが終了したか否かの判定（裏データ終了判定）が行なわれるようにされている。なお、上記裏データによる検査を行なうための裏データ生成は図１７のＴｈｏｌｄのＩＮＶＥＲＴとｄｆｌｇでコントロールして生成するようにされている。
上述したように、図１８および図１９のフローに従った制御は、表１〜表６に記述されている命令コードを用いて命令メモリ４１１内のマイクロ命令を次の表７の命令リストのように記述することで、僅か６つのマイクロ命令によりマーチング試験を実行することができる。
さらに、前記実施例のテスト回路（ＡＬＰＧ）においては、表１〜表６に記述されている命令コードを用いることにより上記マーチング試験の他に、すべてのメモリセルに「０」または「１」が書き込めるか検査するオール「０」判定試験またはオール「１」判定試験や、あるビットに「１」を書き込んでそれによって他のビットが誤書込みされていないかすべてのビットについて検査するいわゆるＮ２乗パターン試験（もしくはギャロッピング試験）等も実行することができる。
表８に、Ｎ２乗パターン試験のためのマイクロ命令リストを示す。なお、ｉｘｄは、初期値レジスタＴｐｈｏｌｄの下にあるフラグｄｆｌｇでコントロールされるインバータＩＮＶＥＲＴをコントロールして裏テストパターンを生成する命令である。フラグｄｆｌｇが０のときは初期値レジスタＴｐｈｏｌｄの値をそのままレジスタＴｐに格納し、フラグｄｆｌｇが１のときはその逆のパターンがレジスタＴｐに設定される。
【表８】
0004147005.tif 000009
上記実施例においては、プログラムカウンタ４１２に最初に設定する値を、表７や表８に示される最初のマイクロ命令の命令番地に変更することで、マーチング試験やＮ２乗パターン試験を開始させることができる。
次に、前記カスタム論理部１１０およびＣＰＵ１３０の検査の際にＦＰＧＡ１２０内に構築されるロジックテスタの詳細について説明する。
ロジックテスタは、メモリのテストパターンを生成する図１２に示されているＡＬＰＧと類似の構成を有し、例えば図２０に示されているように、所定のテストパターン生成アルゴリズムに従って記述された複数のマイクロ命令群からなるマイクロプログラムが格納された命令メモリ４１１と、該命令メモリ４１１から読み出すべきマイクロ命令を指定するプログラムカウンタ４１２、命令メモリ４１１から読み出されたマイクロ命令内の命令コードを解読して上記プログラムカウンタ４１２など制御部４００内の回路に対する制御信号を形成する命令解読制御回路４３０、基準クロックφ０に基づいてタイミング制御信号を形成するタイミング発生部４２０、マイクロ命令内のタイミング設定ビットＭＦｄ（ＴＳビット）に基づいてタイミング発生部４２０に対する制御データを出力するデータレジスタセット４１７、マイクロ命令内のタイミング設定ビットＭＦｄ（ＴＳビット）をデコードしてデータレジスタセット４１７から制御データを読み出すデコーダ４１８などを備えている。
また、テスト対象となる論理回路の内、その機能が特定されている回路（例えば、ＡＬＵ：Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃ  Ｕｎｉｔ）の場合には、すでに適切なテストパターン形成方式が確立されている場合が多いので、そのテストパターンの資産を利用することで、効率の良いテストパターンの生成が可能である。また、組合せ論理回路に関しては、故障仮定法および一つの回路には故障は一つであるという単一故障という考えに基づくＤアルゴリズムと呼ばれる効率の良いテストパターンの生成方法が知られている。この手法を利用することによって、テストパターン生成のためのマイクロプログラムを短くすることができ、命令メモリ４１１の容量の増大を実現可能な程度まで抑えることができる。
この実施例では、特に制限されないが、デコーダ４１８でデコードされるタイミング設定ビットＴＳは２ビットで構成され、データレジスタセット４１７には７個の制御データが格納されている。これらの制御データのうち一つはテスト・サイクルを規定するデータ“ＲＡＴＥ”、残りの６個の制御データは、テスタ専用バスの各信号線ごとにハイレベルもしくはロウレベルの信号の出力タイミングを与える２種類の制御データ“ＡＣＬＫ１”，“ＡＣＬＫ２”と、パルス信号の立上がりタイミングを与える２種類の制御データ“ＢＣＬＫ１”，“ＢＣＬＫ２”と、パルス信号の立下がりタイミングおよび期待値との比較出力タイミングを与える２種類の制御データ“ＣＣＬＫ１”，“ＣＣＬＫ２”である。
これらの各制御データが、タイミング発生部４２０に供給されると、制御データＲＡＴＥに関しては予め規定されたタイミングの信号ＲＡＴＥがプログラムカウンタ４１２に供給されて命令メモリ４１１からのマイクロ命令コードの取り込みが行なうわれる。また制御データとして“ＡＣＬＫ１”〜“ＣＣＬＫ２”がタイミング発生部４２０に供給されると、タイミングクロックＡＣＬＫ１〜ＣＣＬＫ２の中からその制御コードに対応するクロックが信号形成・比較部３００に出力される。各クロックの使用のための接続や選択は必要に応じて適宜実施される。
さらに、ロジックテスタには、上記プログラムカウンタ４１２の値を「＋１」にインクリメントするためのインクリメンタ４２１や、上記インクリメンタ４２１またはアドレスフィールドＭＦａ内の飛び先番地のいずれかを選択してプログラムカウンタ４１２へ供給するマルチプレクサ４２２、オペランドフィールドＭＦｃ内の繰り返し数を保持するインデックスレジスタ４２３、該インデックスレジスタ４２３の値を「−１」するためのデクリメンタ４２４、「−１」にディクリメントされた値を保持するワーキングレジスタ４２５、所定の命令で用いられるオペランドのプログラムカウンタ４１２への転送の有無を示すフラグ４２７、レジスタ４２３，４２５の値を選択的に上記デクリメンタ４２４に供給するマルチプレクサ４２８、デクリメンタ４２４の値をワーキングレジスタ４２５のいずれかのプレーンに分配するデマルチプレクサ４２９などが設けられている。
このロジックテスタでは、マイクロ命令コードに命令の繰り返し数を格納するオペランドフィールドＭＦｃを設けるとともに、その繰り返し数を保持するインデックスレジスタ４２３を設けているので、同一テスト信号を繰り返し生成するような場合に、必要なマイクロ命令数を減らしマイクロプログラムを短くすることができる。また、この実施例では、インデックスレジスタ４２３やワーキングレジスタ４２５、フラグ４２７が複数プレーン（図では４個）設けられていることにより、あるループ処理内におけるサブループ処理、さらにそのサブループ処理内におけるサブループ処理といったことを容易に実行することができ、マイクロプログラムを短くすることができる。
図２１には、上記信号形成・比較部３００の実施例が示されている。なお、図２１の回路は、テスタ専用バス２２０を構成する信号線のうちの１本に対応するドライバ／コンパレータ回路のみが代表的に示されているが、実際にはテスタ専用バス２２０を構成する信号線の数だけ図２１に示す回路が設けられる。
図２１に示すように、この実施例のドライバ／コンパレータ回路は、テスタ専用バスへ出力する信号を形成するドライバ回路（信号形成回路）３４０と、テスタ専用バス上の信号と期待値信号とを比較して一致／不一致を比較するコンパレータ回路（比較回路）３５０と、ドライバ回路３４０とコンパレータ回路３５０とを切り替える切替え回路３６０とから構成される。切替え回路３６０は、ドライバ回路３４０と入出力ノードＮｉｏとの間に設けられた伝送ゲートＴＧ１と、入出力ノードＮｉｏとコンパレータ回路５０と間に設けられた伝送ゲートＴＧ２とから構成され、上記制御部４００から供給される入出力制御ビットＩ／Ｏに応じていずれか一方が開かれ他方は遮断状態とされる。
ドライバ回路３４０は、タイミング発生部４２０から供給されるタイミングクロックＡＣＬＫｉによって入出力制御ビットＴＰを取り込んで保持するエッジトリガ型フリップフロップ３４１と、タイミング発生部４２０から供給されるタイミングクロックＢＣＬＫｉとＣＣＬＫｉとの論理和をとるＯＲゲート３４２と、このＯＲゲート３４２の出力と上記エッジトリガ型フリップフロップ３４１の出力を入力信号とするＪ／Ｋフリップフロップ３４３と、このＪ／Ｋフリップフロップ３４３の出力と制御部４００から供給される入出力制御ビットＣＯＮＴとを入力信号とするＡＮＤゲート３４４と、上記エッジトリガ型フリップフロップ３４１の出力と制御部４００から供給される入出力制御ビットＣＯＮＴとを入力信号とするＡＮＤゲート３４５と、これらのＡＮＤゲート３４４，３４５の出力によってテスタ専用バスを駆動するドライバ３４６とから構成されている。
一方、コンパレータ回路３５０は、タイミング発生部４２０から供給されるタイミングクロックＣＣＬＫｉと制御部４００から供給される入出力制御ビットＣＯＮＴとを入力信号とするＡＮＤゲート３５１と、上記Ｄ型フリップフロップ３４１の出力（期待値）と伝送ゲートＴＧ２を介して供給されるテスタ専用バス上の信号とを入力信号とするエクスクルーシブＯＲゲート３５２と、このエクスクルーシブＯＲゲート３５２と上記ＡＮＤゲート３５１との出力を入力信号とするＡＮＤゲート３５３と、このＡＮＤゲート３５３の出力をラッチするフリップフロップ３５４とから構成されており、すべてのコンパレータ回路３５０の出力の回路の論理和をとった信号がトータル・フェイル信号ＴＦＬとして出力される。上記入出力制御ビットＩ／Ｏ、ＴＰ、ＣＯＮＴは、上記制御信号に相当する。
図２０に示されているように、本実施例のテスト回路におけるマイクロ命令は、ジャンプ命令で使用する命令の飛び先番地を示すＰＣアドレスが格納されるアドレスフィールドＭＦａと、シーケンス制御コードが格納されるオペコードフィールドＭＦｂと、命令の繰り返し数などが格納されるオペランドフィールドＭＦｃと、上記データレジスタセット１４からタイミング発生部４２０に対する制御信号を読み出すためのタイミング設定ビットＴＳが格納されるタイミング設定フィールドＭＦｄと、上記信号形成・比較部３００の入出力制御ビットが格納される入出力制御フィールドＭＦｅとからなる。
上記タイミング設定フィールドＭＦｄに格納されるタイミング設定ビットＴＳは、前述したようにこの実施例では２ビットであるが、３ビット以上設けてもよい。また、上記入出力制御フィールドＭＦｅに格納される入出力制御ビットは、テスタ専用バス２２０のｎ本の信号線に対応して、ドライバ・ビットＴＰとＩ／Ｏビットとコントロール・ビットＣＯＮＴの３ビットを１セットとし、ｎセットだけ設けられている。これらのビットのうち、Ｉ／Ｏビットは入力か出力かを指定する制御ビットで“１”のときは伝送ゲートＴＧ１を開きかつＴＧ２を遮断してドライバの出力信号をテスタ専用バス２２０の対応する信号線上へ出力し、“０”のときは伝送ゲートＴＧ１を遮断しかつＴＧ２を開いてテスタ専用バス２２０の対応する信号線上の信号を比較用のゲート３５２へ入力させる。ドライバ・ビットＴＰおよびコントロール・ビットＣＯＮＴは、その組合せに応じてハイ出力またはロウ出力か、正パルスもしくは負パルスの出力か、入力無効状態か、出力ハイインピーダンス状態かを指定する。
表９には、上記入出力制御ビットＴＰ，Ｉ／Ｏ，ＣＯＮＴと信号形成・比較部３００の動作状態との関係が示されている。
【表９】
0004147005.tif 000010
表９に示されているように、入出力制御ビットＴＰ，Ｉ／Ｏ，ＣＯＮＴが「１１１」のときはドライバ回路３４０がハイレベルの信号を出力し、「０１１」のときはドライバ回路３４０がロウレベルの信号を出力し、「１１０」のときはドライバ回路３４０が正のパルス信号を出力し、「１１０」のときはドライバ回路３４０が負のパルス信号を出力するように制御が行なわれる。また、入出力制御ビットＴＰ，Ｉ／Ｏ，ＣＯＮＴが「１０１」のときはコンパレータ回路３５０がハイレベルの入力信号を期待し、「００１」のときはコンパレータ回路３５０がロウレベルの入力信号を期待し、「１００」のときは入力信号を無効とするように制御が行なわれる。
なお、この実施例の信号形成・比較部３００では、制御ビットＴＰ，Ｉ／Ｏ，ＣＯＮＴが「０００」となる状態は何ら意味を持たないように構成されている。ただし、制御ビットＴＰ，Ｉ／Ｏ，ＣＯＮＴが「０００」のときは、例えば伝送ゲートＴＧ１を閉じてＴＧ２を開き、かつエクスクルーシブＯＲゲート３５２を上記ハイレベルとロウレベルの間にある２つのレベルで動作するシュミット回路としてその２つのレベル間にテスタ専用バス２２０に接続された入出力ノードＮｉｏの電位が存在する状態（ハイインピーダンス状態）を比較できるように信号形成・比較部３００を構成しておくことも可能である。
図２２には上記実施例におけるタイミング発生部４２０より供給されるタイミングクロックＡＣＬＫ１〜ＣＣＬＫ２と信号形成・比較部３００からテスタ専用バス２２０上に出力される信号の一例が示されている。図２２において、（ａ）は外部から供給される基準クロックφ０を、（ｂ）〜（ｇ）はタイミングクロックＡＣＬＫ１〜ＣＣＬＫ２の波形を、（ｈ）は表９の出力テスト信号として「１」が指定されかつクロックとしてＡＣＬＫ１が選択された端子の出力信号の波形を示す。また、（ｉ）は表９の出力テスト信号として「０」が指定されかつクロックとしてＡＣＬＫ２が選択された端子の出力信号の波形を示す。また、（ｊ）は表９の出力テスト信号として「Ｐ」が指定されかつクロックとしてＢＣＬＫ１，ＣＣＬＫ１が選択された端子の出力信号の波形を示す。さらに、（ｋ）は表９の出力テスト信号として「Ｎ」が指定されかつクロックとしてＢＣＬＫ２，ＣＣＬＫ２が選択された端子の出力信号の波形を示す。
図２２から分かるように、入出力制御ビットＴＰ，Ｉ／Ｏ，ＣＯＮＴが「１１１」に設定されクロックＡＣＬＫ１が指定された端子からはクロックＡＣＬＫ１に従い図２２（ｈ）のようなハイレベルの信号が出力され、ＴＰ，Ｉ／Ｏ，ＣＯＮＴが「０１１」に設定されクロックＡＣＬＫ２が指定された端子からはクロックＡＣＬＫ２に従い図２２（ｉ）のようなロウレベルの信号が出力され、ＴＰ，Ｉ／Ｏ，ＣＯＮＴが「１１０」に設定されクロックＡＣＬＫ１，ＢＣＬＫ１，ＣＣＬＫ１が指定された端子からはクロックＡＣＬＫ１でセットされたデータに従いＢＣＬＫ１，ＣＣＬＫ１をエッジとする図２２（ｊ）のような正パルスが出力され、ＴＰ，Ｉ／Ｏ，ＣＯＮＴが「０１０」に設定されクロックＡＣＬＫ２，ＢＣＬＫ２，ＣＣＬＫ２が指定された端子からはクロックＡＣＬＫ２でセットされたデータに従いＢＣＬＫ２，ＣＣＬＫ２をエッジとする図２２（ｋ）のような負パルスが出力される。
また、図示しないが、入出力制御ビットＴＰ，Ｉ／Ｏ，ＣＯＮＴが「１０１」に設定されクロックＣＣＬＫ１が指定された端子では期待値をハイレベルとして図２２（ｆ）のクロックＣＣＬＫ１をストローブ信号として比較が行なわれ、ＴＰ，Ｉ／Ｏ，ＣＯＮＴが「００１」に設定されクロックＣＣＬＫ２が指定された端子では期待値をロウレベルとし図２２（ｇ）のクロックＣＣＬＫ２をストローブ信号として比較が行なわれる。なお、クロックの選択は上記に限定されず任意の組合せとすることができる。
以上説明したように上記実施例においては、半導体チップ上に複数の基本論理セル（セル論理ブロック）からなり基本論理セルごとに回路が正常か異常かを示す信号を出力可能でかつ任意の論理を構成可能なＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）のような可変論理回路を搭載するようにしたものである。これにより、外部テスタを使用することなく可変論理回路（ＦＰＧＡ）内に不良個所があることおよびその位置を知ることができる。また、不良個所を回避して論理を構成することにより歩留まりを向上させるとともに、この可変論理回路（ＦＰＧＡ）を用いてテスト回路を構築して他の内部回路をテストする場合にテスト回路自身の故障による誤ったテスト結果が出力されるのを回避することができるという効果がある。
また、本発明に係る半導体集積回路のテスト方法は、回路が正常か異常かを示す信号を出力可能でかつ任意の論理を構成可能な可変論理回路（ＦＰＧＡ）と読出し書込み可能なメモリ回路とを内蔵した半導体集積回路において、まず上記可変論理回路（ＦＰＧＡ）により自己テストを行なわせ、その結果得られた不良個所を示す情報を用いて不良個所を除いた基本論理セルのみで所定のアルゴリズムに従ってメモリ回路を検査するメモリテスト回路を構築して上記メモリ回路を検査するようにした。これによって、高機能の外部テスタを用いることなくＬＳＩ内部のメモリ回路のテストを行なうことができるという効果がある。
さらに、本発明に係る半導体集積回路の他のテスト方法は、半導体集積回路がメモリ回路と共にＣＰＵ（中央処理ユニット）やユーザが要求する論理機能を構成したユーザ論理回路のようなカスタム論理回路を含むような場合に、上記ＦＰＧＡに所定のアルゴリズムに従ってＣＰＵやカスタム論理回路のテスト信号および期待値信号を生成してテストを行なうテスト回路（ロジックテスタ）を構築するとともに、既に前記テストにより正常と判定されたメモリ回路を使用して、そのメモリ回路にテストパターンもしくはテストパターン生成プログラムを格納し、ＦＰＧＡに構築されたテスト回路を起動してＣＰＵやカスタム論理回路のテストを行なうようにした。これによって、高機能の外部テスタを用いることなくＬＳＩ内部のＣＰＵや論理回路のテストを行なうことができるという効果がある。
さらに、本発明に係る半導体集積回路の製造方法は、まず上記可変論理回路により自己テストを行なわせ、その結果得られた不良個所を示す情報を用いて該可変論理回路内に、不良個所を除いた基本論理セルのみで所定のアルゴリズムに従って第１のメモリ回路を検査するメモリテスト回路を構築して、上記第１のメモリ回路を検査し、
次に、上記可変論理回路内に、不良個所を除いた基本論理セルのみで所定のアルゴリズムに従ってカスタム論理回路または中央処理ユニットを検査するロジックテスト回路を構築するとともに上記第１のメモリ回路内にテストパターンもしくはテストパターン生成プログラムを格納して、上記カスタム論理回路または中央処理ユニットを検査し、
しかる後、上記可変論理回路内に、不良個所を除いた基本論理セルのみで所定のアルゴリズムに従って第２のメモリ回路を検査するメモリテスト回路を構築して、上記第２のメモリ回路を検査し、
その後、上記第２のメモリ回路の検査結果に基づいて上記第２のメモリ回路に付随する冗長回路を用いて第２のメモリ回路内の欠陥ビットを予備のビットと置き替えるビット救済処理を行なうようにしたので、メモリ回路のビット救済を自動的に行なうことができ、半導体集積回路の歩留まりおよび生産性を向上させることができるという効果がある。
また、本発明に係る半導体集積回路の製造方法は、上記第２のメモリ回路のビット救済処理後に、上記可変論理回路内に所望の論理を構成するようにしたので、テスト終了後にＬＳＩチップ内には無駄な回路が残らないので、テスト回路をＬＳＩ内部に設けることに伴うハードウェアのオーバーヘッドを減らすことができるという効果がある。
さらに、本発明に係る半導体集積回路の製造方法は、上記第２のメモリ回路の検査の際に欠陥ビットの位置を示す情報を上記第１のメモリ回路内に記憶するようにしたので、上記第１のメモリ回路内に記憶されている情報を読み出すことにより不良解析を容易に行なうことができるという効果がある。
以上本発明者によってなされた発明を実施例に基づき具体的に説明したが、本発明は上記実施例に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。例えば上記実施例においては、セル論理ブロックＣＬＢ内の回路が正常か否か検出して出力する排他的論理和ゲート回路ＬＧ２の出力状態をクロスポイントスイッチ回路ＣＳＷ内のメモリセルＳＭＣに記憶させるようにしているが、ＬＳＩチップの外部へ出力させるように構成してもよい。
また、上記実施例においては、ＤＲＡＭ１５０〜１８０のテストの際に欠陥ビットの位置を記憶するフェールメモリをＳＲＡＭ１４０内に構成するようにしているが、外部のテスタ内にフェールメモリを設けるようにしてもよい。さらに、上記実施例ではテスト用のインタフェース回路としてＩＥＥＥで規定されているＴＡＰを利用しているが、それに限定されるものでなく、本実施例に適した専用のインタフェース回路を別途設計して設けるようにしても良い。
産業上の利用可能性
以上の説明では主として本発明者によってなされた発明をその背景となった利用分野であるＣＰＵとＳＲＡＭ、ＤＲＡＭおよびカスタム論理回路を備えたシステムＬＳＩにおける自己検証方法を例にとって説明したが、この発明はそれに限定されず、ＣＰＵとＳＲＡＭおよびカスタム論理回路を備えた論理ＬＳＩ、ＣＰＵとＤＲＡＭおよびカスタム論理回路を備えた論理ＬＳＩ、ＣＰＵとカスタム論理回路を備えた論理ＬＳＩ、ＳＲＡＭとＤＲＡＭおよびカスタム論理回路を備えた論理ＬＳＩさらには上記のようなディジタル回路の他にアナログ回路が搭載された半導体集積回路にも利用することができる。
【図面の簡単な説明】
図１は、本発明を適用した論理ＬＳＩの一実施例の全体構成を示すブロック図である。
図２は、本発明を適用した論理ＬＳＩ内に設けられる可変論理回路（ＦＰＧＡ）の一実施例を示す回路構成図である。
図３は、ＦＰＧＡを構成するクロスポイントスイッチの具体例を示すブロック図である。
図４は、ＦＰＧＡを構成するセル論理ブロックの具体例を示す論理回路図および概念図である。
図５は、ＦＰＧＡを構成するセル論理ブロックの他の例を示す論理回路図である。
図６は、本発明を適用した論理ＬＳＩ内に設けられるテスト用インタフェース回路の一構成例を示すブロック図である。
図７は、本発明を適用した論理ＬＳＩにおける内部回路の検査手順の一例を示すフローチャート図である。
図８は、図７のフローチャートのステップＳ１〜Ｓ３におけるＦＰＧＡ部の検査手順の具体的内容を示すフローチャートである。
図９は、図７のフローチャートのステップＳ４〜Ｓ５におけるＳＲＡＭ部の検査手順の具体的内容を示すフローチャートである。
図１０は、図７のフローチャートのステップＳ６〜Ｓ８におけるカスタム論理回路およびＣＰＵ部の検査手順の具体的内容を示すフローチャートである。
図１１は、図７のフローチャートのステップＳ９〜Ｓ１２におけるＤＲＡＭ部の検査手順の具体的内容を示すフローチャートである。
図１２は、ＦＰＧＡ内に構築されるＡＬＰＧの構成を示すブロック図である。
図１３は、ＡＬＰＧを使用してメモリ回路をテストする際のバスの構成例を示すブロック図である。
図１４は、ＡＬＰＧの命令メモリに格納されるマイクロ命令の命令フォーマットの構成例を示す説明図である。
図１５は、ＡＬＰＧのシーケンス制御部の構成例を示すブロック図である。
図１６は、ＡＬＰＧのアドレス演算部の構成例を示すブロック図である。
図１７は、ＡＬＰＧのテストデータ生成演算部の構成例を示すブロック図である。
図１８は、ＡＬＰＧによりメモリ回路の検査を行なう場合のマイクロ命令のオペコードおよびオペランドを用いたシーケンス制御手順の一例を示すフローチャートである。
図１９は、ＡＬＰＧによりメモリ回路の検査を行なう場合のマイクロ命令の演算コードおよびデータ生成コードを用いたテストアドレスおよびデータの生成、出力手順の一例を示すフローチャートである。
図２０は、ＦＰＧＡ内に構築されるロジックテスタの構成例を示すブロック図である。
図２１は、ロジックテスタ内の信号形成・比較手段の具体例を示す論理回路図である。
図２２は、ロジックテスタにより形成されるテスト用信号波形の一例を示す波形図である。
【図１】
0004147005.tif 000011
【図２】
0004147005.tif 000012
【図３】
0004147005.tif 000013
【図４】
0004147005.tif 000014
【図５】
0004147005.tif 000015
【図６】
0004147005.tif 000016
【図７】
0004147005.tif 000017
【図８】
0004147005.tif 000018
【図９】
0004147005.tif 000019
【図１０】
0004147005.tif 000020
【図１１】
0004147005.tif 000021
【図１２】
0004147005.tif 000022
【図１３】
0004147005.tif 000023
【図１４】
0004147005.tif 000024
【図１５】
0004147005.tif 000025
【図１６】
0004147005.tif 000026
【図１７】
0004147005.tif 000027
【図１８】
0004147005.tif 000028
【図１９】
0004147005.tif 000029
【図２０】
0004147005.tif 000030
【図２１】
0004147005.tif 000031
【図２２】
0004147005.tif 000032