本発明の一実施形態について図1ないし図25に基づいて説明すると以下の通りである。
図1に、本実施の形態の半導体集積回路に備えられるスキャンテストの被検査回路1の構成を示す。被検査回路1は、スキャン設計回路11、クロック制御回路12、スキャン入力端子2、スキャン出力端子3、クロック信号入力端子15、スキャンイネーブル信号入力端子16、および、スキャンシフト制御信号入力端子17を備えている。
スキャン設計回路11は、スキャンチェーン4・5・6を備えている。スキャン設計回路11は、他の回路部分も含み得るが、スキャンチェーン4・5・6の組合せを単位として半導体集積回路に任意個数備えられている。スキャンチェーン4はスキャンフリップフロップとしてのフリップフロップFF9・FF5・FF2・FF8・FF6・FF3を備えている。スキャンチェーン5はスキャンフリップフロップとしてのフリップフロップFF0・FF7・FF4を備えている。スキャンチェーン6はスキャンフリップフロップとしてのフリップフロップFF1を備えている。フリップフロップFF9・FF5・FF2・FF8・FF6・FF3はツリー状に接続されている。
スキャンチェーン(第1のスキャンチェーン)4は、以下の接続構成となっている。フリップフロップFF9の入力端子はスキャン入力端子2に接続されている。スキャン入力端子2にはスキャン入力データSCANINが入力される。スキャン入力データSCANINは、後述するスキャンデータ設定値からなる。フリップフロップFF9の出力端子は2つのシフト経路に分岐してフリップフロップFF5の入力端子およびフリップフロップFF2の入力端子に接続されている。フリップフロップFF5の出力端子はフリップフロップFF8の入力端子に接続されている。フリップフロップFF2の出力端子は2つのシフト経路に分岐してフリップフロップFF6の入力端子およびフリップフロップFF3の入力端子に接続されている。スキャンチェーン4では、フリップフロップFF9→フリップフロップFF5→フリップフロップFF8(さらには→フリップフロップFF0)の順でデータをシフトするシフトレジスタと、フリップフロップFF9→フリップフロップFF2→フリップフロップFF6(さらには→フリップフロップFF7)の順でデータをシフトするシフトレジスタと、フリップフロップFF9→フリップフロップFF2→フリップフロップFF3(さらには→フリップフロップFF4)の順でデータをシフトするシフトレジスタとが構成されている。スキャンチェーン4はこのシフト動作を、スキャンイネーブル信号入力端子16から1のスキャンイネーブル信号SCANENが入力される期間に、クロック信号CLKHに同期して行う。
スキャンチェーン6において、フリップフロップFF1の入力端子はスキャン入力端子2に接続されている。フリップフロップFF1は、データをフリップフロップFF4へシフトする。スキャンチェーン6において、フリップフロップは一般に複数個がシリアルに接続されていてよい。スキャンチェーン6はこのシフト動作を、スキャンイネーブル信号入力端子16から1のスキャンイネーブル信号SCANENが入力される期間に、クロック信号CLKVに同期して行う。
スキャンチェーン5では、各フリップフロップはチェーン上において2つの入力端子を備えており、以下の接続構成となっている。フリップフロップFF4とフリップフロップFF7とフリップフロップFF0とはシリアルに接続されている。シリアルに接続されるフリップフロップは一般に複数個でよい。フリップフロップFF4の第1の入力端子はフリップフロップFF3の出力端子に接続されており、第2の入力端子はフリップフロップFF1の出力端子に接続されている。フリップフロップFF7の第1の入力端子はフリップフロップFF6の出力端子に接続されており、第2の入力端子はフリップフロップFF4の出力端子に接続されている。フリップフロップFF0の第1の入力端子はフリップフロップFF8の出力端子に接続されており、第2の入力端子はフリップフロップFF7の出力端子に接続されている。フリップフロップFF0の出力端子はスキャン出力端子3に接続されている。スキャンチェーン5では、フリップフロップFF4→フリップフロップFF7→フリップフロップFF0の順でデータをシフトするシフトレジスタが構成されている。フリップフロップFF0の出力は、スキャン出力端子3からのスキャン出力データSCANOUTとなる。スキャン出力データSCANOUTは、後述するキャプチャデータからなる。スキャンチェーン5はこのシフト動作を、スキャンイネーブル信号入力端子16から1のスキャンイネーブル信号SCANENが入力される期間に、クロック信号CLKに同期して行う。また、スキャンチェーン5の各フリップフロップは、1のスキャンイネーブル信号SCANENが入力されるときに、スキャンシフト制御信号入力端子17から0のスキャンシフト制御信号SCANSWが入力されれば第1の入力端子から入力されるデータを出力するシフト動作を行い、スキャンシフト制御信号入力端子17から1のスキャンシフト制御信号SCANSWが入力されれば第2の入力端子から入力されるデータを出力するシフト動作を行う。
スキャンチェーン5とスキャンチェーン6とで複数個のフリップフロップがシリアルに接続された1つのスキャンチェーンが構成されており、これを第2のスキャンチェーンとする。
また、図示しないが、スキャンチェーン4・5・6の各フリップフロップの前記シフト方向と別の方向には、前述の図26の組合せ回路部分900と同様の組合せ回路部分が設けられており、各フリップフロップと接続されている。組合せ回路部分にはスキャンチェーン4・5・6の各フリップフロップからデータが供給されるとともに、この組合せ回路部分を通ったデータが、当該組合せ回路部分の反対側に隣接するフリップフロップにキャプチャされる。フリップフロップと組合せ回路部分とのデータのやり取りは、クロック信号CLK・CLKH・CLKVに同期して行われる。
クロック制御回路(クロック制御手段)12は、NAND回路21・22、インバータ23、および、AND回路24・25を備えている。NAND回路21・22およびAND回路24・25はそれぞれ2入力である。NAND回路21の一方の入力端子はスキャンイネーブル信号入力端子16に接続されており、他方の入力端子はスキャンシフト制御信号入力端子17に接続されている。NAND回路22の一方の入力端子はスキャンイネーブル信号入力端子16に接続されており、他方の入力端子はインバータ23を介してスキャンシフト制御信号入力端子17に接続されている。AND回路24の一方の入力端子はクロック信号入力端子15に接続されており、他方の入力端子はNAND回路21の出力端子に接続されている。AND回路25の一方の入力端子はクロック信号入力端子15に接続されており、他方の入力端子はNAND回路22の出力端子に接続されている。クロック信号入力端子15にはクロック信号CLKが、スキャンイネーブル信号入力端子16にはスキャンイネーブル信号SCANENが、スキャンシフト制御信号入力端子17にはスキャンシフト制御信号SCANSWがそれぞれ入力される。また、AND回路24の出力信号は前記クロック信号CLKHとなり、AND回路25の出力信号は前記クロック信号CLKVとなる。
クロック信号CLKHは、スキャンチェーン4のシフト動作を行わせるクロック信号であり、図1における横方向シフト用クロック信号である。クロック信号CLKVは、スキャンチェーン6のシフト動作を行わせるクロック信号であり、図1における縦方向シフト用クロック信号である。図2に示すように、スキャンイネーブル信号SCANEN=0のときは、クロック制御回路12によって、スキャンシフト制御信号SCANSWの値に関わらず、クロック信号CLKH=クロック信号CLKV=クロック信号CLKとなる。また、スキャンイネーブル信号SCANEN=1、スキャンシフト制御信号SCANSW=0のときは、クロック信号CLKH=クロック信号CLK、クロック信号CLKV=0となる。また、スキャンイネーブル信号SCANEN=1、スキャンシフト制御信号SCANSW=1のときは、クロック信号CLKH=0、クロック信号CLKV=クロック信号CLKとなる。なお、クロック信号CLKH=0またはCLKV=0は、クロック信号CLKH・CLKVが非アクティブ信号(ここでは常時ローレベルの状態)となることを示す。
スキャンチェーン4用のクロック信号CLKHとスキャンチェーン6用のクロック信号CLKVとを半導体集積回路(デバイス)の外部から入力するとピン数が増加するが、クロック制御回路12を備えていることによってピン数のオーバーヘッドを削減することができる。
次に、上記の構成の被検査回路1における動作を説明する。
被検査回路1における動作は、スキャン入力データSCANINのスキャンインにより各フリップフロップにスキャンデータ設定値を設定する動作と、各フリップフロップの組合せ回路部分からのキャプチャデータをスキャン出力データSCANOUTとしてスキャンアウトする動作とからなる。シフトされるスキャンデータ設定値およびキャプチャデータをまとめてスキャンデータと呼ぶ。
スキャン入力データSCANINは、スキャンイネーブル信号SCANEN=1、スキャンシフト制御信号SCANSW=0のときにクロック信号CLKHに同期してスキャン入力端子2からシフト動作により、ツリー構造のスキャンチェーン4の各フリップフロップに設定される。このとき、スキャンチェーン5もクロック信号CLKに同期して動作するが、スキャン入力データSCANINがスキャンチェーン4の長さ分だけが用意されているため、スキャンチェーン5には値は設定されない。スキャンチェーン6のフリップフロップはクロック信号CLKV=0であるので動作せず、当該フリップフロップには値は設定されない。
また、スキャン入力データSCANINは、スキャンイネーブル信号SCANEN=1、スキャンシフト制御信号SCANSW=1のときにスキャン入力端子2からシフト動作により、クロック信号CLK・CLKVに同期してそれぞれスキャンチェーン6、スキャンチェーン5の各フリップフロップに設定される。このときスキャンチェーン4のフリップフロップはクロック信号CLKH=0であるので動作しない。
また、スキャンイネーブル信号SCANEN=0のときに、回路は通常動作によって、クロック信号CLK・CLKH・CLKVに同期して、各フリップフロップに設定されたスキャン入力データSCANINを被検査回路1の前記組合せ回路部分に供給するとともに、当該組合せ回路部分を通ったデータを別の各フリップフロップでキャプチャする。
被検査回路1は、フリップフロップにキャプチャされたデータを、まず、スキャンイネーブル信号SCANEN=1、スキャンシフト制御信号SCANSW=1として、スキャンチェーン6およびスキャンチェーン5のシフト動作でスキャン出力端子3へ出力する。また、図示しないが、テストパターン入力に対して期待される出力値がテスタに格納されており、スキャン出力端子3に出力されたスキャン出力信号SCANOUTをこの期待値と比較する。その後、スキャンイネーブル信号SCANEN=1、スキャンシフト制御信号SCANSW=0として、スキャンチェーン4およびスキャンチェーン5において前述のシフト方向にデータを1つシフトさせて、フリップフロップFF3・FF6・FF8のデータをスキャンチェーン5に送る。これにより、スキャンチェーン5はスキャンチェーン4からデータをパラレルに受け取ってシリアルにシフトさせることとなる。このように、スキャンチェーン5はスキャンデータのパラレルシリアル変換を行う。このとき、次のキャプチャ動作に必要なスキャン入力データSCANINをスキャン入力端子2から同時にシフトインさせる。
そして、スキャンイネーブル信号SCANEN=1、スキャンシフト制御信号SCANSW=1として、スキャンチェーン5のデータをスキャン出力端子3へ出力し、期待値と比較する。以上のスキャンチェーン5のシフト動作とスキャンチェーン4のシフト動作とを繰り返して、フリップフロップFF9のキャプチャデータがフリップフロップFF0の位置までシフトされたときに、スキャン入力端子2に、スキャンチェーン6およびスキャンチェーン5の各フリップフロップ用のスキャン入力データSCANINを用意し、スキャンイネーブル信号SCANEN=1、スキャンシフト制御信号SCANSW=1としてスキャンチェーン6およびスキャンチェーン5にシフト動作を行わせ、キャプチャデータ出力と同時に、スキャン入力データSCANINの設定を行う。
ここで(SCANEN=1、SCANSW=1)、スキャンチェーン6およびスキャンチェーン5のフリップフロップのうち、スキャン出力端子3から遠い位置にあるフリップフロップ(ここではフリップフロップFF1、FF4、FF7、FF0の順で遠い)のキャプチャデータを観測する必要がなく、スキャン入力によるデータ設定を行う必要もなければ、途中でスキャン出力端子3へのシフト動作をやめる。このシフト動作をやめることでスキャンシフトのクロック数が大幅に削減できる。
本実施の形態では、前述した図1のスキャンチェーン4・5・6を構成するためのスキャン設計を、以下の手順で行った。
(1)従来手法でスキャン設計された、図26のようにフリップフロップがシリアルに接続される被検査回路に対して与えられたスキャン用のテストパターンを用意し、テストベクトルNoに対する各フリップフロップのスキャンデータ設定値の表と期待値の表とを用意する。その一例を図3(a)・(b)に示す。図3(a)は、各フリップフロップに対するスキャンデータ設定値が、テストベクトルNo.1〜No.5まで用意されていることを示す表である。Xはドントケアであり、1でも0でも構わない。図3(b)は、テストベクトルNo.1〜No.5に対して各フリップフロップが組合せ回路部分からキャプチャしたデータの期待値を示す表である。Xは観測不要であることを示し、HでもLでも構わない。
(2)次に、図3(a)のスキャンデータ設定値を見て、図4のようにドントケアを利用してテストパターンの始めから終わりまでが同じ値になってもよいフリップフロップの組合せ(これらのフリップフロップを両立であると称す)があるか否かを調べる。図4では、スキャンデータ設定値がテストベクトルNo.1からNo.5に向かって「10XX0」の順となるデータであれば、フリップフロップFF3・FF6・FF8の全てのスキャンデータ設定値の条件を満たすことから、フリップフロップFF3・FF6・FF8の組合せでは、テストパターンの始めから終わりまでを「10XX0」という同じ値に設定することができることが示されている。
(3)次に、上記(2)で調べた結果を用いて、図5のような両立関係を表すグラフを作成する。図5では、テストベクトルNo.1からNo.5までを等しいデータとすることのできるフリップフロップ間を互いに両立関係にあるフリップフロップであるとして線分で結んである。例えばフリップフロップFF0とフリップフロップFF3とは両立関係にある。フリップフロップFF3とFF6とFF8とは図4で説明したように両立関係にある。しかし、フリップフロップFF0とFF6とは両立関係になく、また、フリップフロップFF0とFF8とは両立関係になく、これを非両立の関係にあると呼ぶ。
(4)次に、図5の両立グラフから、図6のようにフリップフロップを両立関係にあるものどうしでグループ分けする。このとき1つのグループにできるだけ多くのフリップフロップが含まれるように選ぶ。また、どのフリップフロップとも両立関係にないフリップフロップを非両立グループとしてまとめる。図6では、両立関係の最も多いフリップフロップ数が3となるフリップフロップFF3・FF6・FF8の組合せをまず両立グループ1として選び、残りのフリップフロップの中で次に両立関係の多いフリップフロップ数が2となるフリップフロップFF2・FF5の組合せを両立グループ2として選ぶ。非両立グループはフリップフロップFF0・FF1・FF4・FF7・FF9の組合せとなる。
(5)次に、各両立グループに属するフリップフロップどうしは、同じスキャンデータ設定値になってもよいので、図7に示すようなスキャンツリー構成を作成する。両立関係にあるフリップフロップ数の少ない両立グループほどデータシフトの上流側に配置することとし、図7では両立グループ2を両立グループ1より上流側に配置している。その分、両立グループ2の出力端子のいずれかが分岐して両立グループ1の入力端子と接続されるようにする。図7ではフリップフロップFF2の出力端子はフリップフロップFF3の入力端子と1対1で接続されているが、フリップフロップFF5の出力端子は分岐してフリップフロップFF6の入力端子およびフリップフロップFF8の入力端子と接続されている。また、両立グループ2のフリップフロップFF2の入力端子とフリップフロップFF5の入力端子とを互いに接続する。これにより、同じ両立グループ内の各フリップフロップどうしは、最上流側から同じフリップフロップ数だけ離れた下流側に並列に位置することになる。以下では、離れているフリップフロップ数を距離と呼ぶ。従って、同じ両立グループ内の各フリップフロップどうしは、最上流側から同じ距離だけ離れた下流側に並列に位置している。
(6)次に、非両立グループに属するフリップフロップを図8のように上記(5)で作成したスキャンツリーの出力端子側に配置する。図8では、フリップフロップFF4・FF7・FF9・FF1・FF0の順にフリップフロップをシリアルに接続し、その下流側の3つのフリップフロップFF4・FF7・FF9の入力端子(前述の第1の入力端子に相当する)を、順にフリップフロップFF3・FF6・FF8の各出力端子と1対1に接続する。そして、フリップフロップFF2・FF5の入力端子およびフリップフロップFF0の入力端子をスキャン入力端子2に接続し、フリップフロップFF4の出力端子をスキャン出力端子3に接続する。この時点ではスキャンチェーン4はフリップフロップFF2・FF5・FF3・FF6・FF8からなり、スキャンチェーン5はフリップフロップFF4・FF7・FF9からなり、スキャンチェーン6はフリップフロップFF1・FF0からなる。
(7)次に、図9に示すように、各両立グループ内、あるいは、非両立グループ内で、フリップフロップを、図3(b)に示されているキャプチャデータ観測の必要数の大きい順にスキャン出力端子3側に近く配置されるように、並べ替える。図9では、両立グループ2においてフリップフロップFF5がフリップフロップFF2よりもスキャン出力端子3に近くなるよう、スキャンチェーン4の両立グループ1においてフリップフロップFF8・FF6・FF3の順にスキャン出力端子3に近くなるよう、非両立グループにおいてフリップフロップFF0・FF7・FF4・FF1・FF9の順にスキャン出力端子3に近くなるよう、フリップフロップを並べ替える。この時点ではスキャンチェーン4はフリップフロップFF2・FF5・FF3・FF6・FF8からなり、スキャンチェーン5はフリップフロップFF0・FF7・FF4からなり、スキャンチェーン6はフリップフロップFF1・FF9からなる。
(8)次に、非両立グループのフリップフロップの内、スキャン出力端子3から距離が遠いフリップフリップを、スキャンツリーの入力側に移動して配置する。図10ではフリップフロップFF9をフリップフロップFF5・FF2の上流側に配置し、フリップフロップFF9の入力端子をスキャン入力端子2に接続する。このようにして、図11に示すように、スキャンチェーン4の最も上流側のフリップフロップからスキャン出力端子3までの距離L1と、スキャンチェーン5・6を合せた第2のスキャンチェーンの最も上流側のフリップフロップからスキャン出力端子3までの距離L2とが均等になるように配置する。またここで、第2のスキャンチェーンは、スキャンチェーン4の末端のフリップフロップFF8・FF6・FF3の数(=3)以上の数のフリップフロップからなるようにし、スキャン出力端子3に近い方のフリップフロップがフリップフロップFF8・FF6・FF3と1対1に接続されるようにする。これにより、図1のスキャン設計回路11が構成される。
図12、図13は図10のスキャン設計回路11に対するスキャンイン、スキャンアウトの動作を表すための各端子の入出力信号のタイミング波形である。図12は図10のスキャン設計回路11に対してテストパターンの第1番目のテストベクトルNo.1をスキャン入力端子2からシフトインさせるタイミング波形例である。まず期間PI41にフリップフロップFF8・FF6・FF3のスキャンデータ設定値をスキャン入力端子2からスキャンチェーン4に入力する。次いで期間PI42にフリップフロップFF5・FF2のスキャンデータ設定値をスキャン入力端子2からスキャンチェーン4に入力するとともに、スキャンチェーン4内でデータをフリップフロップ1つ分だけシフトさせる。次いで期間PI43にフリップフロップFF9のスキャンデータ設定値をスキャン入力端子2からスキャンチェーン4に入力するとともに、スキャンチェーン4内でデータをフリップフロップ1つ分だけシフトさせる。期間PI41〜PI43には、スキャンイネーブル信号SCANEN=1、スキャンシフト制御信号SCANSW=0とし、クロック信号CLKH(=クロック信号CLK)に同期させてスキャンチェーン4内でのシフト動作を行う。これにより、期間PI43の終了時にはスキャンチェーン4内の全てのフリップフロップにスキャンデータ設定値が設定される。
次に、期間PI56に移り、スキャンイネーブル信号SCANEN=1、スキャンシフト制御信号SCANSW=1とし、クロック信号CLKV(=クロック信号CLK)およびクロック信号CLKに同期させて、フリップフロップFF0・FF7・FF4・FF1のスキャンデータ設定値を順次スキャン入力端子2からスキャンチェーン6に入力するとともに、スキャンチェーン5・6内でのシフト動作を行う。これにより、期間PI56の終了時にはスキャンチェーン4・5・6内の全てのフリップフロップにスキャンデータ設定値が設定される。次いで、スキャンイネーブル信号SCANEN=0、スキャンシフト制御信号SCANSW=0として、クロック信号CLKH(=クロック信号CLK)、クロック信号CLKV(=クロック信号CLK)、およびクロック信号CLKに同期させて、先に各フリップフロップに設定されたスキャンデータ設定値を隣接する組合せ回路部分に送出し、また、これらのフリップフロップに、他の組合せ回路部分からのデータをキャプチャする動作を行う。
しかし、図12の期間PI41・PI42・PI43、あるいは、期間PI56において、シフトインさせるデータが先頭から連続してドントケアの続くものである場合、そのドントケア値はシフトイン不要であり、それに費やすシフト回数を削減することが可能である。例えば、フリップフロップFF8・FF6・FF3・FF5・FF2がドントケアである場合には、これらのフリップフロップにはスキャンデータ設定値を設定する必要がないので、期間PI41・PI42を削除することができる。
図13は、あるテストベクトルを印加した後のキャプチャ結果の観測値をシフトアウトし、その次のテストベクトルをシフトインさせるタイミング波形例である。
まず期間PO1においてスキャンイネーブル信号SCANEN=1、スキャンシフト制御信号SCANSW=1として、スキャンチェーン5・6にキャプチャされているデータをフリップフロップFF0・FF7・FF4・FF1の順にスキャン出力端子3から出力する。
次いで期間PI41においてスキャンイネーブル信号SCANEN=1、スキャンシフト制御信号SCANSW=0として、スキャンチェーン4のフリップフロップFF8・FF6・FF3のキャプチャデータをスキャンチェーン5のフリップフロップFF0・FF7・FF4へシフトさせる。また、このとき、スキャンチェーン4のフリップフロップFF5・FF2のキャプチャデータをフリップフロップFF8・FF6・FF3にシフトさせ、フリップフロップFF9のキャプチャデータをフリップフロップFF5・FF2にシフトさせる。ただし、フリップフロップFF3・FF2にシフトされたデータは観測する必要がない。また、同時にスキャン入力端子2からフリップフロップFF9にフリップフロップFF8・FF6・FF3のスキャンデータ設定値を入力する。
次いで期間PO2においてスキャンイネーブル信号SCANEN=1、スキャンシフト制御信号SCANSW=1として、フリップフロップFF0・FF7・FF4のデータ(フリップフロップFF8・FF6・FF3のキャプチャデータ)を順にスキャン出力端子3から出力する。
次いで、期間PI42においてスキャンイネーブル信号SCANEN=1、スキャンシフト制御信号SCANSW=0として、スキャンチェーン4のフリップフロップFF8・FF6・FF3のデータ(フリップフロップFF5・FF2のキャプチャデータ)をスキャンチェーン5のフリップフロップFF0・FF7・FF4にシフトさせる。ただし、フリップフロップFF4にシフトされたデータは観測する必要がない。また、このとき、スキャンチェーン4のフリップフロップFF5・FF2のデータ(フリップフロップFF9のキャプチャデータ)をフリップフロップFF8・FF6・FF3にシフトさせ、フリップフロップFF9のデータ(フリップフロップFF8・FF6・FF3のスキャンデータ設定値)をフリップフロップFF5・FF2にシフトさせる。ただし、フリップフロップFF6・FF3にシフトされたデータは観測する必要がない。また、同時にスキャン入力端子2からフリップフロップFF9にフリップフロップFF5・FF2のスキャンデータ設定値を入力する。
次いで期間PO3においてスキャンイネーブル信号SCANEN=1、スキャンシフト制御信号SCANSW=1として、フリップフロップFF0・FF7・FF4のデータ(フリップフロップFF5・FF2のキャプチャデータ)を順にスキャン出力端子3から出力する。ただし、フリップフロップFF4のデータは観測する必要がないのでスキャンアウトしない。
次いで期間PI43においてスキャンイネーブル信号SCANEN=1、スキャンシフト制御信号SCANSW=0として、スキャンチェーン4のフリップフロップFF8・FF6・FF3のデータ(フリップフロップFF9のキャプチャデータ)をスキャンチェーン5のフリップフロップFF0・FF7・FF4にシフトさせる。ただし、フリップフロップFF7・FF4にシフトされたデータは観測する必要がない。この時点でフリップフロップFF9のキャプチャデータはスキャン出力端子3から出力されているので、観測不要なキャプチャデータがない場合、フリップフロップFF0〜FF9までの全てのキャプチャデータが観測されることとなる。また、期間PI43では、フリップフロップFF5・FF2のデータをフリップフロップFF8・FF6・FF3にシフトさせ、フリップフロップFF9のデータをフリップフロップFF5・FF2にシフトさせ、フリップフロップFF9のスキャンデータ設定値をスキャン入力端子2から入力する。これにより、スキャンチェーン4に対する次のスキャンデータ設定値が全て設定される。
そして、その後、期間PI56においてスキャンイネーブル信号SCANEN=1、スキャンシフト制御信号SCANSW=1として、スキャン入力端子2からフリップフロップFF0・FF7・FF4・FF1のスキャンデータ設定値を順次入力して設定する。これにより、スキャンチェーン4・5・6に次のテストベクトルが設定される。次いでキャプチャ動作に移行し、前述の期間PO1からの動作を繰り返していく。
上記図13の期間PI41・PI42・PI43・PI56も図12と同様の理由でシフトインのシフト回数を削減することができる。また、図13の期間PO1・PO2・PO3のそれぞれにおいて、図10のスキャンチェーン5・6のある位置のフリップフロップから、スキャン出力端子3から距離が最も大きく離れているフリップフロップまでが、連続して観測不要のデータを保持するフリップフロップであれば、その観測のためのシフトアウトのシフト回数を削減することができる。
図14と図15とは、本実施の形態におけるスキャン設計回路11のシフト回数の削減効果を表す図である。図16はテストベクトル数が多くなれば故障検出率が高くなることを示す曲線を示す。
図14は従来のスキャン設計回路に対して図3(a)のテストパターンを適用したときのスキャンテストに必要なクロック数を示している。テストベクトルNo.1〜No.5のスキャンデータ設定値の設定とテストベクトルNo.1〜No.4のテストベクトルに対するキャプチャデータの観測とで10×5クロックを使用する。また、テストベクトルNo.1〜No.5のスキャンデータ設定値に対するキャプチャ動作に5クロックを使用する。テストベクトルNo.5のスキャンデータ設定値に対するキャプチャデータの観測に9クロックを使用する。従って、合計64クロックを使用する。
図15は、図3(a)のテストパターンを適用し、図12および図13のシフト動作により、図10のスキャン設計回路11によってスキャンテストしたときに必要なクロック数を、各テストベクトルに対する期待値とともに示している。図中、丸で囲んだ数字はクロック信号CLKVのクロック数、四角で囲んだ数字はクロック信号CLKHのクロック数、三角で囲んだ数字はキャプチャ動作に使用されるクロック数を示す。ドントケアを使用することのできるところではドントケアを使用し、キャプチャデータ観測不要のところではシフトを行わない結果のクロック数となっており、全部で57クロックを使用する。
図14と図15とを比較すると図15の方が、クロック数が削減されていることが分かる。これは、設定不要なスキャンデータ設定値や観測不要なキャプチャデータを利用することによりシフト回数を削減しているためである。図14と図15とは小さな回路例であるため、大きな削減効果にはなっていないが、図16に示すようにテストパターンが後半に進む程、設定不要なスキャンデータ設定値や観測不要なキャプチャデータが多くを占めるため、クロック数の削減効果は大きい。
図17および図18は本実施の形態で使用する前記フリップフロップの構成を表している。
図17は従来のスキャンチェーンでも使用しているスキャンフリップフロップ10であり、Dフリップフロップ10aと選択回路10bとを備えている。実動作モードでのフリップフロップの入力端子Dとスキャンシフトに用いる入力端子SIとを有しており、選択回路10bはスキャンイネーブル信号SCANENが0のときに入力端子Dに入力される信号をDフリップフロップ10aのD端子に入力し、スキャンイネーブル信号SCANENが1のときに入力端子SIに入力される信号をDフリップフロップ10aのD端子に入力する。Dフリップフロップ10aはクロック信号CLKの立ち上がりタイミングで、D端子に入力される信号をQ端子から出力信号Q・SOとして出力する。出力信号Qは実動作モードで使用される信号であり、スキャンテストのときには前述のようにテスト信号として組合せ回路部分へ入力される。出力信号SOはスキャンシフトに使用される信号である。
図18は例えば図10のスキャンチェーン5などに利用されるスキャンフリップフロップ13であり、Dフリップフロップ13aと選択回路13b・13cとを備えている。実動作モードでのフリップフロップの入力端子Dと、スキャンチェーン4からのデータをパラレルシリアル変換するための入力端子SIHと、スキャンチェーン5自身のシフトのための入力端子SIVとを有している。選択回路13cは、スキャンシフト制御信号SCANSWが0のときに入力端子SIHに入力される信号を選択回路13bに入力し、入力端子SIHが1のときに入力端子SIVに入力される信号を選択回路13bに入力する。選択回路13bは、スキャンイネーブル信号SCANENが0のときに入力端子Dに入力される信号をDフリップフロップ13aのD端子に入力し、スキャンイネーブル信号SCANENが1のときに他方の入力端子に入力される選択回路13cからの信号をDフリップフロップ13aのD端子に入力する。Dフリップフロップ13aはクロック信号CLKの立ち上がりタイミングで、D端子に入力される信号をQ端子から出力信号Q・SOとして出力する。出力信号Qは実動作モードで使用される信号であり、スキャンテストのときには前述のようにテスト信号として組合せ回路部分へ入力される。出力信号SOはスキャンシフトに使用される信号である。
なお、図19に、図1の被検査回路1に入力するデータおよび各信号の生成・入力と、スキャンアウトデータの観測とを、ロジックLSIテスタ20によって行う構成を示す。
以上のように、本実施の形態によれば、ツリー状構成をなすスキャンチェーン4によってスキャンデータをシフトさせ、複数のフリップフロップがシリアルに接続されたスキャンチェーン5・6のスキャンチェーン5がこれらをパラレルで受け取るので、スキャンチェーン5・6はスキャンデータをシリアルに出力することにより、スキャン出力端子数を少なく抑えることができる。具体的には、従来のスキャン設計と同等のスキャン入出力端子数(入力端子1本、出力端子1本)でありながら、スキャンシフト数を削減することができる。1つのクロック信号でスキャンチェーン4とスキャンチェーン5および6とをシフトイン動作させると、スキャン入力端子2から同じ距離にある、すなわちスキャン入力端子2から数えて同じ位置にあるフリップフロップは同じ論理値に設定されるため、スキャンチェーン4を駆動するクロック信号CLKHとスキャンチェーン5および6を駆動するクロック信号CLK・CLKVとを独立して制御する。あるテストベクトルに対して、まずはスキャンチェーン4のみをシフト動作させスキャンデータ設定値を設定する。その後、スキャンチェーン5および6のみシフト動作させスキャンデータ設定値を設定し、所望のスキャンデータ設定値を設定することができる。図19では、スキャンシフト制御信号SCANSWとクロック制御回路12を用いて、クロック信号CLKH・CLKVを生成しスキャンチェーン4のみ・スキャンチェーン5および6のみをシフト動作させるか制御している。以上の動作をテストパターン内の全テストベクトルに対して行うことで、スキャンチェーン4がフリップフロップの両立関係を満たす構成であれば所望の全テストベクトルが設定できることが保証される。
また、ツリー状構成とシリアル接続部分との組合せにより、スキャンデータ設定値のドントケアおよび観測不要のキャプチャデータを利用してシフト数を削減することができる。シフト数が削減されるので、テストベクトル数を多くしても短時間でキャプチャデータを全て観測することができ、故障見逃しがなくなる。
以上により、シフト数およびスキャン出力端子数を抑制することができ、故障見逃しのない半導体集積回路を実現することができる。
また、スキャン設計回路11において、スキャンチェーン4は1つのスキャン入力端子2を備え、当該スキャン入力端子2からスキャンチェーン4の各シフト経路の末端のフリップフロップFF8・FF6.FF3までの距離はいずれの経路を通っても等しい。そして、スキャンチェーン5・6からなるスキャンチェーンは1つのスキャン入力端子2と1つのスキャン出力端子3とを備え、スキャンチェーン4の末端となるフリップフロップの個数(=3)以上のフリップフロップ(=4個)を備えている。
この構成によれば、スキャンチェーン4のスキャン入力端子2から同じ距離にある並列関係のフリップフロップ同士は、回路の構造上、同じ論理値に設定される。そのため、スキャンチェーン4内の全てのフリップフロップのうち、テストパターン中の全テストベクトルにおいて同じ値になっても構わないフリップフロップ、すなわち両立関係にあるフリップフロップを選択して並列位置に配置することで、全テストベクトルが設定できることを保証することができる。
また、スキャン設計回路11によれば、スキャンチェーン5・6のスキャン出力端子3側から数えてスキャンチェーン4の末端となるフリップフロップの個数分(=3)のフリップフロップは、スキャンチェーン4の末端となるフリップフロップの出力端子と1対1に接続されている。
この構成によれば、スキャンチェーン5・6がスキャンチェーン4からスキャンデータを受け取った後、最小のシフト回数でスキャン出力端子3からスキャンデータを出力することができる。
また、スキャン設計回路11によれば、スキャンチェーン4のスキャン入力端子2と、スキャンチェーン5・6からなるスキャンチェーンのスキャン入力端子2とが結線され、1つのスキャン入力端子として機能する。
この構成によれば、入力端子1本および出力端子1本を備える従来のスキャン設計と同等のスキャン入出力端子数でも、シフト数を削減することができる。
次に、図20〜22に、図10のスキャン設計回路11の変形例の構成を示す。
図20の構成は、図10のスキャン設計回路11においてスキャン入力端子2を、スキャンチェーン4とスキャンチェーン5・6とに個別に設けたものである。このような2入力1出力を持つツリー状構成のスキャン設計回路を用いることで、スキャンシフト回数の削減を行う。図20のスキャンチェーン4のようにスキャンチェーンをツリー構造にすることで、少ないシフト回数でできるだけ多くのフリップフロップにスキャンデータ設定値を設定することができる。スキャンチェーン4のスキャン入力端子2から同じ距離にある並列関係のフリップフロップ同士は、回路の構造上、同じ論理値に設定される。そのため、テスト対象回路内の全てのフリップフロップのうち、テストパターン中の全テストベクトルにおいて同じ値になっても構わないフリップフロップ(両立関係にあるフリップフロップ)を選択して並列位置に配置することで、全テストベクトルが設定できることを保証する。また、図20のような2入力をもつスキャン設計回路とすると、スキャンチェーン4とスキャンチェーン5および6とは独立してシフト動作することが可能であるため、スキャンチェーン4とスキャンチェーン5および6とで同時にスキャンデータをシフト動作させることができ、スキャンデータ設定値の設定に関するスキャンシフト回数を少なくすることが可能である。この場合、1つのテストベクトルのスキャンデータ設定値のスキャンシフト回数は、スキャンチェーン4の長さ(シフト方向に沿った距離)とスキャンチェーン5および6の長さとのうち長い方で決定される。
図21は、折畳みタイプのスキャン設計回路である。このスキャン設計回路はツリー状のスキャンチェーン41・42を備え、それら複数のスキャンチェーンの出力をもう1つのスキャンチェーン51でパラレルシリアル変換してスキャンデータを出力する。各ツリー状スキャンチェーンは互いに種類が異なり、スキャンチェーン41は、スキャン入力端子2から同じ距離に位置するフリップフロップに同じ論理値を設定しても所望の全テストベクトルを設定可能である構成、すなわち両立関係が成り立つフリップフロップによる構成である。スキャンチェーン42は、両立関係の成り立たないフリップフロップによる構成である。スキャン入力端子2はスキャンチェーン41・42のそれぞれに個別に設けられる。このような各種類のツリー状のスキャンチェーンを複数備えていてもよい。図21では、両立関係のフリップフロップのみでツリー状のスキャンチェーン41を構成し、残りの非両立関係にあるフリップフロップでもう1つのツリー状のスキャンチェーン42とスキャンチェーン51とを構成する。このとき、スキャンチェーン42の長さはスキャンチェーン41と同等にする。この構成にすることで、スキャンチェーン41の長さとスキャンチェーン42の長さとはそれぞれ短くなり、スキャンシフト数の削減に有効になる。
スキャンチェーン42は、ツリー状部分が図10や図20の場合と比べて短いためスキャンシフト回数が小さくて済むが、非両立の関係にあるフリップフロップが並列に並んでいるため、所望の全テストベクトルが設定できることは保証されない。そのため、図21の構成によるスキャンテストで検出できる故障を全て検出した後に、図20または図10または後述の図22の構成に切り替えてスキャンテストを行い補完する。まずは、図21のスキャンチェーンと同じ構成のスキャンチェーンを用いて少ないスキャンシフト数で大部分の故障の検出を行い、次にフリップフロップの両立関係を用いた図10、図20、あるいは図22のツリー状のスキャンチェーンと同じ構成のスキャンチェーンを用いて残りの故障の検出を行う。このスキャンチェーン構成をテスト途中で切り替えることにより、図10、図20、あるいは図22のスキャンチェーン構成を単独で用いるよりもシフト回数の削減効果が大きい。半導体集積回路にはこれら複数種類のスキャンチェーンを切り替え可能に設け、同じ被検査回路を異なるスキャンチェーンでテストする。
図21の複数のスキャン入力端子2・2を図10のように1つのスキャン入力端子2に結線する構成も考えられる。この場合、スキャンデータ設定値の設定に関しては、図10の場合と同様に考える。
ところで、図10のスキャン設計回路11においてスキャンチェーン4のシフト経路の分岐数が非常に多くなると、スキャンチェーン5・6からなるスキャンチェーンが非常に長大になる。そのため、図22では、各両立グループを複数(同図では2つ)のスキャンチェーンに分割する。この場合、第2のスキャンチェーンに相当するスキャンチェーンも上記分割数だけ分割し、スキャン入力端子2は1つのままとして、第1のスキャンチェーンのそれぞれのスキャンチェーンにスキャン出力端子3を設ける。図22の構成は、このように、第2のスキャンチェーンを複数備えており、第1のスキャンチェーンから出力されるスキャンデータを各第2のスキャンチェーンが分担して受け取り、それぞれスキャンアウトする。このように出力本数を複数にすることで、観測データのスキャンアウトのためのシフト数の削減を行うことができる。
次に、図23および図24に、図10のスキャン設計回路11が回路内部に複数存在するときの構成を示す。図23は、各スキャン設計回路11に供給するクロック信号CLK・CLKH・CLKVが、1つのクロック制御回路12から共通に供給されている例である。図24は、各スキャン設計回路11に供給するクロック信号CLK・CLKH・CLKVが、それぞれのスキャン設計回路11につき1つのクロック制御回路12から独立に供給されている例である。図23の方が図24に比べてクロック供給の設計やテストパターンの作成が容易であり、また、スキャンシフト制御信号SCANSWの入力端子数(スキャンシフト制御信号入力端子17の数)が節約できる。図24の場合は、それぞれのスキャン設計回路11が独立で動作するため、スキャンデータ設定値の設定不要および観測不要なキャプチャデータを利用したシフト動作の削減を、詳細に制御することができるため、更なるスキャンシフト回数の削減になる。
次に、図25に、更にスキャンシフト回数を削減する構成を示す。図25では、スキャンチェーン5の各フリップフロップのスキャンシフト制御信号SCANSWの入力端子を独立にコントロールする方法を示している。ツリー状のスキャンチェーン4の出力をスキャンチェーン5でパラレルシリアル変換する場合、ツリー状という回路の特徴を考えると、スキャンアウト動作途中で、パラレルシリアル変換する必要のあるビット幅は徐々に小さくなる。
そこで、スキャンチェーン5のスキャンチェーン4からスキャンデータをパラレルに受け取るフリップフロップのそれぞれに対して、スキャンチェーン4からスキャンデータをパラレルに受け取るシフト動作と、スキャンチェーン5におけるシリアルのシフト動作とのいずれを行うかを独立に制御してスキャンテストを実施する。
図25では、では、これらのスキャンチェーン5の各フリップフロップのスキャンシフト制御信号(図18のSCANSW)を独立に制御する。これにより、パラレルシリアル変換に利用されないスキャンチェーン6側のスキャンチェーン5のフリップフロップには、パラレルシリアル変換と同時にスキャンインデータをシフトインすることが可能となり、シフト回数が削減可能となる。図25の例では、ステートマシン(FSM)61により、スキャンチェーン5の各フリップフロップのスキャンシフト制御信号SCANSWの入力端子をコントロールしている。図20のようなスキャンチェーン4のスキャン入力端子2とスキャンチェーン6のスキャン入力端子2とが独立である回路の場合には、スキャンチェーン5の各フリップフロップのスキャンシフト制御信号SCANSWの入力端子を独立に制御する手法は、シフト回数の削減に特に有効である。
また、本実施の形態におけるスキャン回路設計方法は、スキャン用のテストパターンとして、従来のシリアルに接続されたスキャンチェーンに対して与えられるスキャン用のテストパターンと同じものを用い、図3〜図11のようにスキャン入力データSCANINが全テストベクトルを通して同じ論理値を取り得る両立関係にあるフリップフロップを、スキャン入力端子2から同じ距離に並列に配置して、複数のフリッププロップからなってシフトレジスタとして動作し、少なくとも一箇所で複数のシフト経路に分岐するツリー状構成をなすスキャンチェーン4を構成し、非両立な関係にあるフリップフロップを、シリアルに接続された複数のフリップフロップからなってシフトレジスタとして動作し、スキャンチェーン4の分岐された各シフト経路の末端のフリッププロップからのスキャンデータをパラレルに受け取るスキャンチェーン5・6のフリップフロップとして配置するスキャン回路設計方法である。
上記の構成によれば、与えられたテストパターンを適用しても故障検出率の低下がないように、テストパターンを分析して全テストベクトルのスキャンインデータを通して同じ論理値に設定することが可能な両立関係にあるフリップフロップをスキャン入力端子2から同じ距離に並列に配置して、スキャンチェーン4を構成する。また、非両立な関係にあるフリップフロップをスキャンチェーン5・6のフリップフロップとして配置して、スキャンデータをパラレルシリアル変換できるようにする。これらの配置を行うことで、故障検出率を低下させることなく、所望の全テストベクトルを設定することが可能で、スキャン出力端子3を1本に抑えることが可能になる。
また、前述の図11で説明したように、スキャンチェーン4の長さとスキャンチェーン5・6の長さとが均等になるように、非両立な関係にあるフリップフリップをスキャンチェーン4のスキャン入力端子2側とスキャンチェーン5・6とに配置した。
ほとんどのロジックLSI設計において、スキャンチェーン5・6の長さがスキャンチェーン4の長さに比べて非常に大きくなる。これは、非両立な関係にあるフリップフロップが両立関係にあるフリップフロップよりも多いためである。この構成ではスキャンチェーン5・6のスキャンデータ設定およびキャプチャデータ観測のためのシフト回数が膨大になる。それを防ぐため、非両立な関係にあるフリップフロップの幾つかをスキャンチェーン4のスキャン入力端子2側にシリアルに配置することで、スキャンチェーン4の長さとスキャンチェーン5・6の長さとを均等にする。この配置によりスキャンチェーン4とスキャンチェーン5とに同時にスキャンデータをシフトインすれば、シフト回数を削減することができる。この配置を用いると、2つのスキャン入力端子2・2から同時に独立にスキャンチェーン4とスキャンチェーン5・6とにシフトイン可能となるので特に有効である。
次に、テストパターン作成方法について説明する。
従来のスキャン設計で生成されたテストパターンを用いて図3〜図11で説明したスキャン回路設計方法で図10・図20・図21・図22のスキャンチェーンを設計したときに、スキャン入力端子2にシフトインさせるデータの順序とスキャン出力端子3からシフトアウトされるデータに対する期待値の順序とを並べ替える方法(テストパターンの各テストベクトルのビットを並べ替える方法)である。例えば図10のスキャン設計回路11の場合、各テストベクトルに対して、スキャンチェーン4の各フリップフロップに所望のスキャンデータ設計値が設定されるようにデータを並べ替える。そのスキャンデータ設定値に続き、スキャンチェーン5・6の各フリップフロップに所望のスキャンデータ設定値が設定されるようにデータを並べ替える。以上の各並べ替えにおいて、データ列が先頭から順にドントケアの連続するものである場合、それらドントケアはシフトイン不要なため、それらを削除する。以上のスキャンインデータに続き、スキャンチェーン5・6からのスキャンアウトデータと比較するための期待値を並べ替える。この並べ替えにおいてデータ列のある位置から最後の位置まで観測不要であれば、それらを削除する。次にスキャンチェーン4の並列位置関係にある最終段のフリップフロップグループの期待値を並べ替える。この並べ替えにおいてもデータ列のある位置から最後の位置まで観測不要であれば、それらを削除する。以下、同様にスキャンチェーン4の並列位置関係にあるフリップフロップグループ内にて期待値の並べ替えと観測不要データの削除とを行う。この並べ替えにおいてスキャンデータ設定値の設定不要およびキャプチャデータの観測不要によるシフト動作の削減を行うことができるため、テスト時間を削減することができる。図20・図21・図22のスキャンチェーンの場合も、スキャン入力端子数やスキャン出力端子数が異なるだけで、同様にテストパターンを作成する。
次に、他のテストパターン生成方法について説明する。
図3〜図11のスキャン回路設計方法を用いずに図10、図20、あるいは図22のスキャンチェーン(フリップフロップの両立関係を用いずにツリー状のチェーン)を設計した場合、あるいは、図21で説明したスキャンチェーン42(これも非両立な関係にあるフリップフロップによるツリー)の場合、ツリー状の並列関係のフリップフロップには同値が設定されるため、与えられたテストパターンの全テストベクトルを与えることはできない。この場合は、ツリー状のスキャンチェーンのうちある1本のスキャンチェーン経路を選択し、その経路上のフリップフロップのスキャンデータ設定値のみをテストベクトルから抽出してその経路上に設定しながら、ツリー状のスキャンチェーンの全フリップフロップにデータを設定するように、シフトインデータを並べ替える。このとき選択したスキャンチェーンのシフト経路のみ所望のスキャンデータ設定値が設定されるため、テスト結果の期待値はこの設定したスキャンデータ設定値で故障シミュレーションし、テストベクトル毎に各フリップフロップの期待値を求める。与えられたテストパターンの全テストベクトルに対して以上の処理を行い、故障シミュレーションで見つからなかった故障に対しては、従来のスキャンチェーン構成でテストを実施するか、あるいは、フリップフロップ間の両立関係を利用したツリー状のスキャンチェーン構成に切り替えてテストを実施する。これらのスキャンチェーン構成を切り替えるいずれかのテストを実施するために、与えられたテストパターンのうち故障シミュレーションでの未検出故障の検出に関与するテストベクトルを抽出し、スキャンインデータとスキャンアウトデータとをシフトイン・シフトアウトする順序に並べ替える。
次に、既存のテストパターンなしで図10、図20、図21、あるいは図22を設計した場合について説明する。
図10、図20、図21、あるいは図22のスキャンチェーン回路を設計した場合(フリップフロップの両立関係を用いずにツリー状のチェーンを設計した場合)のもう1つのテストパターン作成方法は、ツリー状の並列関係にあるフリップフロップには必ず同じ論理値が設定されるという条件を与えてATPGによりテストパターンを生成する。ATPG実施後、未検出故障に対しては従来のスキャンチェーン構成にしてATPGを実施しテストパターンを生成する。生成したテストパターンの各テストベクトルにおいては、上記で説明したようにスキャンインデータ・スキャンアウトデータをシフトイン・シフトアウトする順序に並べ替える。
以上、テストパターン作成方法において、スキャンチェーン5・6のデータを全てシフトアウトする場合と、スキャンチェーン4の出力値をスキャンチェーン5にシフトさせる場合とを切り替えるために、スキャンチェーン5の各フリップフロップがどちらのデータを取り込むのか制御するスキャンシフト制御信号SCANSWが必要になるため、テストパターンの動きに併せてこの信号も生成する。
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。