スキャンチェーンの生成方法、スキャンチェーンの生成プログラムおよび集積回路
【課題】集積回路の試験に関し、一つの回路を分割した複数の領域間の試験を行えるようにスキャンチェーンを生成すること。
【解決手段】集積回路の試験時に、複数のフリップフロップを含むスキャンシフトを動作させたときの消費電力が許容値を超える場合、スキャンチェーンに含まれる複数のフリップフロップを複数のグループに分割する。分割の際には、集積回路が実際に動作するときの信号の伝達経路に基づいて、複数のフリップフロップのうちの一部のフリップフロップが複数のグループに含まれる。複数のグループに含まれるフリップフロップは、複数のグループのそれぞれに生成されるスキャンチェーンに接続される。
【解決手段】集積回路の試験時に、複数のフリップフロップを含むスキャンシフトを動作させたときの消費電力が許容値を超える場合、スキャンチェーンに含まれる複数のフリップフロップを複数のグループに分割する。分割の際には、集積回路が実際に動作するときの信号の伝達経路に基づいて、複数のフリップフロップのうちの一部のフリップフロップが複数のグループに含まれる。複数のグループに含まれるフリップフロップは、複数のグループのそれぞれに生成されるスキャンチェーンに接続される。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、スキャンチェーンの生成方法、スキャンチェーンの生成プログラムおよび集積回路に関する。
【背景技術】
【0002】
従来、スキャンチェーンを用いた集積回路の試験方法が知られている。スキャンチェーンを用いて集積回路の試験を行う際、同時に動作するスキャンフリップフロップの数が多いと、試験時の消費電力が試験装置の許容値を超えることがある。消費電力が許容値を超えると、試験を行うことができない。一方、スキャンチェーンを分割する方法が知られている。例えば、論理回路をブロックに分割し、各ブロックごとにスキャンチェーンを形成する方法が知られている(例えば、特許文献1参照。)。また、試験対象回路内の第1スキャンチェーン、および非試験対象回路内の第2スキャンチェーンの両方に試験データを与える工程と、第1スキャンチェーンにクロックを入力し、一方第2スキャンチェーンにクロックを入力しない工程とを含む方法が知られている(例えば、特許文献2参照。)。また、1本のスキャンチェーンを構成するフリップフロップ回路を、フリップフロップの数が実質的に均等になるように分割して複数のスキャンチェーンを形成する方法が知られている(例えば、特許文献3参照。)。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開平10−2938号公報
【特許文献2】特開2006−58152号公報
【特許文献3】特開2006−163688号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、従来の方法では、単一のクロックドメインの領域をモジュールなどの複数の領域に分割し、分割された領域ごとにスキャンチェーンを形成した場合、分割された各領域は、本来互いに相手の動作に依存して動作するにも関わらず、集積回路の試験時は分割された領域間の試験を行うことができないという問題点がある。
【0005】
一つの回路を分割した複数の領域間の試験を行えるようにスキャンチェーンを生成することができるスキャンチェーンの生成方法、スキャンチェーンの生成プログラムおよび集積回路を提供することを目的とする。
【課題を解決するための手段】
【0006】
このスキャンチェーンの生成方法およびスキャンチェーンの生成プログラムは、集積回路の試験時に、複数のフリップフロップを含むスキャンチェーンを動作させたときの消費電力が許容値を超える場合、スキャンチェーンに含まれる複数のフリップフロップを複数のグループに分割する。分割する際、集積回路が実際に動作するときの信号の伝達経路に基づいて、複数のフリップフロップのうちの一部のフリップフロップが複数のグループに含まれるようにする。複数のグループに含まれるフリップフロップは、複数のグループのそれぞれに生成されるスキャンチェーンに接続される。
【0007】
また、集積回路は、データ端子、複数のスキャンイン端子、複数のスキャンモード端子、セレクタおよびフリップフロップを備える。データ端子には、通常動作時にデータが入力される。スキャンイン端子には、試験時に試験データが入力される。スキャンモード端子には、選択信号が入力される。セレクタは、スキャンモード端子に入力される選択信号に基づいて、データ端子に入力されるデータ、または複数のスキャンイン端子に入力される試験データのうちのいずれか一つの試験データを選択する。フリップフロップには、セレクタの出力データが入力される。
【発明の効果】
【0008】
このスキャンチェーンの生成方法、スキャンチェーンの生成プログラムおよび集積回路によれば、一つの回路を分割した複数の領域間の試験を行えるようにスキャンチェーンを生成することができるという効果を奏する。
【図面の簡単な説明】
【0009】
【図1】実施例にかかる試験装置のハードウェア構成を示すブロック図である。
【図2】実施例にかかる試験装置の機能的な構成を示すブロック図である。
【図3】実施例にかかるスキャンチェーンの生成方法を示すフローチャートである。
【図4】実施例にかかる試験装置の入力部の構成を示すブロック図である。
【図5】実施例にかかる試験装置の仮生成部の構成を示すブロック図である。
【図6】実施例にかかる試験装置の解析部の構成を示すブロック図である。
【図7】実施例にかかる試験装置の分割部の構成を示すブロック図である。
【図8】実施例にかかる試験装置の生成部の構成を示すブロック図である。
【図9】実施例にかかる分割の仕方の第1の例を説明する回路図である。
【図10】実施例にかかる分割の仕方の第1の例においてロジックコーンの一例を示す回路図である。
【図11】実施例にかかる分割の仕方の第1の例における2分割の候補の一例を示す図表である。
【図12】実施例にかかる分割の仕方の第1の例における2分割の結果の一例を示す回路図である。
【図13】実施例にかかる分割の仕方の第1の例における3分割の候補の一例を示す図表である。
【図14】実施例にかかる分割の仕方の第1の例における3分割の結果の一例を示す回路図である。
【図15】実施例にかかる分割の仕方の第2の例においてロジックコーンの一例を示す回路図である。
【図16】実施例にかかる分割の仕方の第2の例における2分割の候補の一例を示す図表である。
【図17】実施例にかかる分割の仕方の第2の例における2分割の結果の一例を示す回路図である。
【図18】実施例にかかる分割の仕方の第3の例における2分割の結果の一例を示す回路図である。
【図19】実施例にかかる分割の仕方の第3の例におけるN分割の一例を示す回路図である。
【図20】実施例にかかる分割の仕方の第1の例によりインデックスを付した一例を示す回路図である。
【図21】実施例にかかる分割の仕方の第1の例によりインデックスを付した一例を示す回路図である。
【図22】図20および図21に示す回路に対する2分割の候補の一例を示す図表である。
【図23】図20および図21に示す回路に対する2分割の候補の一例を示す図表である。
【図24】図20および図21に示す回路におけるスキャンチェーンの一例を示す回路図である。
【図25】実施例にかかるスキャンフリップフロップの構成の第1の例を示す回路図である。
【図26】実施例にかかるスキャンフリップフロップの構成の第2の例を示す回路図である。
【図27】実施例にかかるスキャンチェーンの生成方法を示すフローチャートである。
【図28】実施例にかかる分割の手順の第1の例を示すフローチャートである。
【図29】実施例にかかる分割の手順の第2の例を示すフローチャートである。
【図30】集積回路の設計処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【0010】
以下に添付図面を参照して、このスキャンチェーンの生成方法、スキャンチェーンの生成プログラムおよび集積回路の好適な実施の形態を詳細に説明する。
【0011】
(実施例1)
実施例1では、集積回路の試験時に、複数のフリップフロップを含むスキャンチェーンを動作させたときの消費電力が許容値を超える場合、スキャンチェーンに含まれる複数のフリップフロップが複数のグループに分割される。分割の際には、集積回路が実際に動作するときの信号の伝達経路に基づいて、複数のフリップフロップのうちの一部のフリップフロップが複数のグループに含まれる。複数のグループに含まれるフリップフロップは、複数のグループのそれぞれに生成されるスキャンチェーンに接続される。
【0012】
・試験装置のハードウェア構成
図1は、実施例にかかる試験装置のハードウェア構成を示すブロック図である。図1に示すように、試験装置は、例えばパーソナルコンピュータやワークステーションなどのコンピュータ装置によって、予め作成されたプログラムが実行されることにより実現される。コンピュータ装置は、例えばCentral Processing Unit(CPU、中央処理装置)1、Random Access Memory(RAM、ランダムアクセスメモリ)2、Hard Disk Drive(HDD、ハードディスク装置)3、グラフィック処理部4、入力インタフェース(入力I/F)5および通信インタフェース(通信I/F)6を備えている。Central Processing Unit(CPU、中央処理装置)1、Random Access Memory(RAM、ランダムアクセスメモリ)2、Hard Disk Drive(HDD、ハードディスク装置)3、グラフィック処理部4、入力インタフェース(入力I/F)5および通信インタフェース(通信I/F)6は、バス7を介して相互に接続されている。
【0013】
CPU1は、コンピュータ装置の全体に対する制御を司る。RAM2は、CPU1に実行させるプログラムの少なくとも一部や、このプログラムによる処理に必要な各種データを一時的に記憶する。HDD3には、Operating System(OS、オペレーティングシステム)やアプリケーションプログラム、および各種データが格納される。グラフィック処理部4には、モニタ8が接続されている。グラフィック処理部4は、CPU1からの命令に従って、モニタ8の画面に画像を表示させる。入力I/F5には、例えばキーボード9やマウス10などの入力デバイスが接続されている。入力I/F5は、入力デバイスからの信号を、バス7を介してCPU1に送信する。通信I/F6は、図示しない通信ケーブルなどを介して外部機器と接続され、その外部機器との間でデータの送受信を行う。
【0014】
・試験装置の機能的構成
図2は、実施例にかかる試験装置の機能的な構成を示すブロック図である。図2に示すように、試験装置は、例えば入力部11、仮生成部12、解析部13、分割部14および生成部15を備えている。入力部11は、集積回路の回路データを入力する。仮生成部12は、回路データに基づいて複数のフリップフロップを含む仮のスキャンチェーンを生成する。解析部13は、仮のスキャンチェーンを動作させたときの消費電力が許容値を超えるか否かを解析する。分割部14は、仮のスキャンチェーンを動作させたときの消費電力が許容値を超える場合に、集積回路が実際に動作するときの信号の伝達経路に基づいて、仮のスキャンチェーンに含まれる複数のフリップフロップを複数のグループに分割する。分割部14は、仮のスキャンチェーンに含まれる複数のフリップフロップのうちの一部のフリップフロップを、複数のグループに含める。分割部14での分割処理により生成されたフリップフロップの複数のグループについては、グループごとに仮生成部12において仮のスキャンチェーンが生成される。生成された仮のスキャンチェーンについては、解析部13において仮のスキャンチェーンを動作させたときの消費電力が解析される。生成部15は、複数のグループに含まれるフリップフロップを、複数のグループのそれぞれに生成されるスキャンチェーンに接続して、グループごとにスキャンチェーンを生成する。入力部11、仮生成部12、解析部13、分割部14および生成部15は、例えば図1に示すコンピュータ装置のHDD3またはRAM2に記憶されたプログラムをCPU1に実行させることにより実現される。
【0015】
・スキャンチェーンの生成方法
図3は、実施例にかかるスキャンチェーンの生成方法を示すフローチャートである。図3に示すように、スキャンチェーンを生成する処理が開始されると、まず、集積回路の回路データが入力される(ステップS1)。次いで、回路データに基づいて複数のフリップフロップを含む仮のスキャンチェーンが生成される(ステップS2)。次いで、仮のスキャンチェーンを動作させたときの消費電力が許容値を超えるか否かを解析する(ステップS3)。仮のスキャンチェーンを動作させたときの消費電力が許容値を超える場合(ステップS3:Yes)、集積回路が実際に動作するときの信号の伝達経路に基づいて、仮のスキャンチェーンに含まれる複数のフリップフロップが複数のグループに分割される。その際、仮のスキャンチェーンに含まれる複数のフリップフロップのうちの一部のフリップフロップは、複数のグループに含まれる(ステップS4)。次いで、ステップS2に戻り、ステップS4で生成された各グループに対して仮のスキャンチェーンが生成される(ステップS2)。そして、ステップS3で仮のスキャンチェーンを動作させたときの消費電力が許容値を超えないようになるまで、ステップS2〜ステップS4が繰り返される。ステップS3で仮のスキャンチェーンを動作させたときの消費電力が許容値を超えない場合、グループごとにスキャンチェーンが生成される。そして、複数のグループに含まれるフリップフロップは、複数のグループのそれぞれに生成されるスキャンチェーンに接続される(ステップS5)。ステップS5でスキャンチェーンが生成されたら、スキャンチェーンを生成する一連の処理が終了する。
【0016】
実施例1によれば、集積回路が実際に動作するときの信号の伝達経路に基づいて、複数のフリップフロップが、複数のフリップフロップのうちの一部のフリップフロップが複数のグループに含まれるように、分割されるので、各グループは、他のグループから受ける影響や他のグループへ及ぼす影響を考慮して動作することになる。従って、分割された各グループの試験を行うことによって、分割されたグループ間の試験も行うことができるので、分割されたグループ間の試験を行えるようにスキャンチェーンを生成することができる。
【0017】
(実施例2)
実施例2には、実施例1の試験装置の各部の具体例および実施例1のスキャンチェーンの生成方法の具体例を示す。試験装置のハードウェア構成および機能的構成は、実施例1と同様である。すなわち、実施例2にかかる試験装置は、図2に示すように、入力部11、仮生成部12、解析部13、分割部14および生成部15を備えている。
【0018】
・入力部の構成
図4は、実施例にかかる試験装置の入力部の構成を示すブロック図である。図4に示すように、入力部11は、クロックドメイン解析部21を備えている。クロックドメイン解析部21は、回路データとクロック情報に基づいて、回路内のレジスタ(フリップフロップ)と関連するクロックをマッピングする。回路データは、例えばHardware Description Language(HDL、ハードウェア記述言語)で記述されたデータ、またはSimulation Program with Integrated Circuit Emphasis(SPICE、スパイス)で記述されたデータなどの設計データである。クロック情報は、クロックが接続される端子に関する情報である。クロックドメイン解析部21は、解析結果を仮生成部12に渡す。
【0019】
・仮生成部の構成
図5は、実施例にかかる試験装置の仮生成部の構成を示すブロック図である。図5に示すように、仮生成部12は、生成部31および仮スキャンチェーン生成部32を備えている。生成部31は、クロックドメイン解析部21の解析結果に基づいて、回路内のフリップフロップを、同じクロックでマッピングされたフリップフロップごとにまとめた仮のグループを生成する。つまり、各仮のグループには、全スキャンフリップフロップのうち、同一のクロックで動作するスキャンフリップフロップが含まれる。各仮のグループにおいて、それぞれの仮のグループに含まれるスキャンフリップフロップをシリアルに接続することによって、後述する仮のスキャンチェーンが生成される。各仮のグループには、それぞれの仮のスキャンチェーンの間に存在する回路が含まれる。また、各仮のグループには、入力端子からそれぞれの仮のグループに含まれるスキャンフリップフロップまでの間に存在する回路が含まれる。また、各仮のグループには、それぞれの仮のグループに含まれるスキャンフリップフロップから出力端子までの間に存在する回路が含まれる。仮スキャンチェーン生成部32は、各仮のグループに対して仮のスキャンチェーンを生成する。仮スキャンチェーン生成部32は、分割部14で生成された複数のグループをそれぞれ仮のグループとし、該仮のグループに対して仮のスキャンチェーンを生成する。仮のグループの情報および仮のスキャンチェーンの情報は、解析部13に渡される。
【0020】
・解析部の構成
図6は、実施例にかかる試験装置の解析部の構成を示すブロック図である。図6に示すように、解析部13は、テストパターン生成部41、電力解析部42および判定部43を備えている。テストパターン生成部41は、仮スキャンチェーン生成部32から渡された情報に基づいて、各仮のグループに対して電力解析用のテストパターンを生成する。電力解析部42は、仮のグループごとに電力解析用のテストパターンを用いて仮のグループを動作させたときの消費電力を解析する。例えば、電力解析部42は、HDLシミュレータやSPICEシミュレータなどのソフトウェア、またはハードウェアエミュレータを用いて、入力端子にテストパターンを入力し、シミュレーションによる解析を行ってもよい。あるいは、電力解析部42は、回路構造をソフトウェアで解析して、静的に消費電力を算出してもよい。回路構造をソフトウェアで解析する場合には、テストパターンが不要であるので、テストパターン生成部41はなくてもよい。判定部43は、仮のグループごとに消費電力の解析結果と電力許容値を比較し、消費電力が電力許容値を超えているか否かを判定する。電力許容値は、例えば集積回路の設計者により外部から入力されて設定される。例えば、電力許容値は、試験装置の定格許容電力などに基づいて設定される。消費電力が電力許容値を超えている場合、判定部43は、仮のグループの情報および仮のスキャンチェーンの情報を分割部14に渡す。消費電力が電力許容値を超えていない場合、判定部43は、仮のグループの情報および仮のスキャンチェーンの情報を生成部15に渡す。
【0021】
・分割部の構成
図7は、実施例にかかる試験装置の分割部の構成を示すブロック図である。図7に示すように、分割部14は、1以上の分割処理部51,52,53および選択部54を備えている。なお、図7においてはA、BおよびCの3個の分割処理部が示されているが、分割処理部の数は1個、2個または4個以上でもよい。各分割処理部51,52,53は、それぞれの分割の仕方で、生成部31で生成された仮のグループを分割する。各分割処理部において仮のグループをどのように分割するか、ということについては、後述する。選択部54は、分割処理部51,52,53から得られた複数の分割結果の中から、分割により新たに生成されたグループの数(すなわち、分割数)が例えば一番少ないものを選択する。選択部54は、分割処理部51,52,53から得られた複数の分割結果の中に、分割数が一番少ないものが複数あるときには、その中から、仮のグループの分割により新たに生成された複数のグループに重複して含まれるスキャンフリップフロップの数が一番少ないものを選択する。選択部54は、選択した結果を仮生成部12に渡す。
【0022】
・生成部の構成
図8は、実施例にかかる試験装置の生成部の構成を示すブロック図である。図8に示すように、生成部15は、重複処理部61および生成部62を備えている。重複処理部61は、複数のグループに重複して含まれるスキャンフリップフロップを、複数のスキャンチェーンに切り替えによって接続可能な構成のスキャンフリップフロップに変更する。複数のスキャンチェーンに接続可能なスキャンフリップフロップの構成については、後述する。生成部62は、解析部13から渡された情報に基づいて、仮のグループに対して、スキャンチェーンを生成する。生成部62は、スキャンクロックやスキャンモード信号など、スキャンチェーンの生成以外の必要な処理を行う。
【0023】
・仮のグループの分割の仕方<1>
図9は、実施例にかかる分割の仕方の第1の例を説明する回路図である。一例として、図9に示す回路71を例にして、分割の仕方の第1の例を説明する。図9に示す回路71は、例えば単一のクロックドメインの領域である。図9に示す回路71において、各フリップフロップは、同じクロックで動作するスキャンフリップフロップである。A、B、CおよびDは、入力端子である。W、X、YおよびZは、出力端子である。分割の仕方の第1の例は、ロジックコーンを考慮して出力端子から入力端子までバックトレースを行うことによって、仮のグループを分割する。ロジックコーンは、図9に示す回路71が実際に動作するときの前段のスキャンフリップフロップと後段のスキャンフリップフロップとの間の信号の入出力関係を表している。ロジックコーンは、スキャンフリップフロップ間の、例えばアンド回路やオア回路などの組み合わせ回路を省略して表している。
【0024】
図10は、実施例にかかる分割の仕方の第1の例においてロジックコーンの一例を示す回路図である。図10に示すように、バックトレースを行う場合、ロジックコーン72は、後段のスキャンフリップフロップの入力端子から、該入力端子に入力される信号を出力する前段のスキャンフリップフロップの出力端子へ向かって広がる三角形状で示される。図10においては、一例として、後段のスキャンフリップフロップ73とその直前の段のスキャンフリップフロップ74,75との間のロジックコーンに72の符号を付す。分割処理部は、W、X、YおよびZの各出力端子からA、B、CおよびDの各入力端子までバックトレースを行って、各ロジックコーンの入力となるスキャンフリップフロップと入力端子を検出する。分割処理部は、検出したスキャンフリップフロップと入力端子にインデックスとして例えばW、X、YまたはZの出力端子名を付ける。例えば、図10に示す回路71では、出力端子Wのロジックコーンの入力であるスキャンフリップフロップ73にインデックスとしてWが付けられる。同様に、出力端子Xのロジックコーンの入力であるスキャンフリップフロップ76にインデックスとしてXが付けられる。スキャンフリップフロップ74は、スキャンフリップフロップ73(インデックス:W)のロジックコーン72と、スキャンフリップフロップ76(インデックス:X)のロジックコーン77との入力になっている。従って、スキャンフリップフロップ74には、インデックスとしてWとXが付けられる。説明を省略するが、他のスキャンフリップフロップおよび入力端子にも同様にインデックスが付けられる。分割処理部は、故障検出観測用のスキャンフリップフロップ78からスキャンフリップフロップまたは入力端子までバックトレースを行い、検出したスキャンフリップフロップや入力端子と同じインデックスを故障検出観測用のスキャンフリップフロップ78に付ける。図10において、各スキャンフリップフロップの中にインデックスが示されており、各入力端子の上にインデックスが示されている。
【0025】
図11は、実施例にかかる分割の仕方の第1の例における2分割の候補の一例を示す図表である。図11に示す例は、図9に示す回路71を2分割にする例である。図11に示す図表81のように、2分割の場合、7個のグループ分けのケースがある。分割処理部は、各ケースにおいて、それぞれのグループに含まれるスキャンフリップフロップの数を数え、数が最大のグループのスキャンフリップフロップの数を求める。例えば、図11に示す図表81のケース1の場合、グループ#1のスキャンフリップフロップの数は5個であり、グループ#2のスキャンフリップフロップの数は12個であるので、ケース1のスキャンフリップフロップ数として12が選択される。ケース2、ケース3、ケース4、ケース5、ケース6およびケース7については、それぞれスキャンフリップフロップ数として12、10、12、11、11および11が選択される。分割処理部は、全てのケースについて数が最大のグループのスキャンフリップフロップの数を求めたら、その中からスキャンフリップフロップの数が最小のものを選択する。図11に示す図表81の例では、スキャンフリップフロップの数が10であるケース3が選択される。スキャンフリップフロップの数が最小となるケースが複数ある場合には、スキャンフリップフロップの延べ数が最小のケースが選択される。スキャンフリップフロップの延べ数は、グループ#1のスキャンフリップフロップの数とグループ#2のスキャンフリップフロップの数との和である。図11に示す図表81の例では、図9に示す回路71は、WまたはXのインデックスが付けられた10個のスキャンフリップフロップのグループ#1と、YまたはZのインデックスが付けられた10個のスキャンフリップフロップのグループ#2と、に分割される。
【0026】
図12は、実施例にかかる分割の仕方の第1の例における2分割の結果の一例を示す回路図である。図12において、破線で囲む領域は、グループ#1の領域82であり、一点鎖線で囲む領域は、グループ#2の領域83である。太い実線は、グループ#1の領域82におけるスキャンチェーン84であり、太い点線は、グループ#2の領域83におけるスキャンチェーン85である。図9に示す回路71には13個のスキャンフリップフロップが含まれているので、図12に示すように、グループ#1およびグループ#2のいずれも、3個のスキャンフリップフロップが削減された状態で試験を行うことができる。
【0027】
図13は、実施例にかかる分割の仕方の第1の例における3分割の候補の一例を示す図表である。図13に示す例は、図9に示す回路71を3分割にする例である。図13に示す図表91のように、3分割の場合、6個のグループ分けのケースがある。2分割の場合と同様にして、分割のケースが選択される。すなわち、各ケースにおいてスキャンフリップフロップの数が最大のグループのうち、最小のスキャンフリップフロップの数は10である。最小のスキャンフリップフロップの数が10であるケースは、ケース1、ケース2、ケース4およびケース5である。これら4個のケースのうち、スキャンフリップフロップの延べ数の最小値は22である。従って、分割処理部は、ケース2を選択する。
【0028】
図14は、実施例にかかる分割の仕方の第1の例における3分割の結果の一例を示す回路図である。図14において、破線で囲む領域は、グループ#1の領域92であり、一点鎖線で囲む領域は、グループ#2の領域93であり、二点鎖線で囲む領域は、グループ#3の領域94である。太い実線は、グループ#1の領域92におけるスキャンチェーン95であり、太い点線は、グループ#2の領域93におけるスキャンチェーン96であり、太い一点鎖線は、グループ#3の領域94におけるスキャンチェーン97である。図14に示すように、グループ#1では、8個のスキャンフリップフロップが削減された状態、グループ#2では、3個のスキャンフリップフロップが削減された状態、グループ#3では、6個のスキャンフリップフロップが削減された状態で、それぞれ試験を行うことができる。なお、4以上の領域に分割する場合も同様である。分割の仕方の第1の例は、例えば分割処理部A51において行われる処理である。
【0029】
・仮のグループの分割の仕方<2>
一例として、図9に示す回路71を例にして、第2の分割の仕方を説明する。第2の分割の仕方は、ロジックコーンを考慮して入力端子から出力端子までフォワードトレースを行うことによって、仮のグループを分割する。
【0030】
図15は、実施例にかかる分割の仕方の第2の例においてロジックコーンの一例を示す回路図である。図15に示すように、フォワードトレースを行う場合、ロジックコーン79は、前段のスキャンフリップフロップの出力端子から、該出力端子から出力された信号が入力する後段のスキャンフリップフロップの入力端子へ向かって広がる三角形状で示される。図15においては、一例として、前段のスキャンフリップフロップ74とその直後の段のスキャンフリップフロップ73,76との間のロジックコーンに79の符号を付す。分割処理部は、A、B、CおよびDの各入力端子からW、X、YおよびZの各出力端子までフォワードトレースを行って、各ロジックコーンの出力となるスキャンフリップフロップと出力端子を検出する。分割処理部は、検出したスキャンフリップフロップと出力端子にインデックスとして例えばA、B、CまたはDの入力端子名を付ける。図15においては、各スキャンフリップフロップの中にインデックスが示されており、各出力端子の上にインデックスが示されている。
【0031】
図16は、実施例にかかる分割の仕方の第2の例における2分割の候補の一例を示す図表である。図16に示す例は、図9に示す回路71を2分割にする例である。図16に示す図表101のように、2分割の場合、7個のグループ分けのケースがある。7個のケースの中から一つを選択する仕方は、上述したバックトレースを行って仮のグループを分割する場合と同様である。図16に示す図表101の例では、ケース3が選択される。従って、図9に示す回路71は、AまたはBのインデックスが付けられた9個のスキャンフリップフロップのグループ#1と、CまたはDのインデックスが付けられた8個のスキャンフリップフロップのグループ#2と、に分割される。
【0032】
図17は、実施例にかかる分割の仕方の第2の例における2分割の結果の一例を示す回路図である。図17において、破線で囲む領域は、グループ#1の領域102であり、一点鎖線で囲む領域は、グループ#2の領域103である。太い実線は、グループ#1の領域102におけるスキャンチェーン104であり、太い点線は、グループ#2の領域103におけるスキャンチェーン105である。図17に示すように、グループ#1では、4個のスキャンフリップフロップが削減された状態、グループ#2では、5個のスキャンフリップフロップが削減された状態で、それぞれ試験を行うことができる。なお、3以上の領域に分割する場合も同様である。分割の仕方の第2の例は、例えば分割処理部B52において行われる処理である。
【0033】
・仮のグループの分割の仕方<3>
一例として、図18に示す回路111を例にして、第3の分割の仕方を説明する。第3の分割の仕方は、特定ステージのスキャンチェーンが前後のグループで重複するように、仮のグループを分割する。
【0034】
図18は、実施例にかかる分割の仕方の第3の例における2分割の結果の一例を示す回路図である。図18に示す回路111において、A、B、C、D、E、F、GおよびHは、入力端子である。XおよびYは、出力端子である。図18に示すように、分割処理部は、各出力端子から各入力端子までバックトレースを行って、各スキャンフリップフロップおよび各入力端子に各出力端子名のインデックス段数として、各出力端子から各入力端子へ向かって遡った段数を付ける。例えば、図18に示す回路111では、出力端子Xに接続された回路部112に接続されたスキャンフリップフロップ113は、出力端子Xから1段遡るので、Xのインデックス段数として1を有する。スキャンフリップフロップ113(Xのインデックス段数:1)に接続された回路部114に接続されたスキャンフリップフロップ115は、出力端子Xからさらに1段遡るので、Xのインデックス段数として2を有する。このように、出力端子から入力端子へ向かって1段遡るたびに、当該出力端子名のインデックス段数が1ずつ増える。出力端子Yについても同様である。図18においては、各スキャンフリップフロップの中にインデックス段数が示されており、各出力端子および各入力端子の上にインデックス段数が示されている。各出力端子では、インデックス段数は0である。インデックス段数の表記において、上段は出力端子Xのインデックス段数であり、下段は出力端子Yのインデックス段数である。複数の経路で遡って同一のスキャンフリップフロップに到達する場合、同一のスキャンフリップフロップが同じ出力端子名のインデックス段数として複数の値を有することになる。その場合には、分割処理部は、同じ出力端子名の複数のインデックス段数の中から最大のインデックス段数を選択する。例えば、図18に示す回路111では、入力端子Aに接続された回路部116に接続されたスキャンフリップフロップ117は、出力端子Xから遡るとわかるように、Xのインデックス段数として4と5と6を有する。この場合、Xのインデックス段数として6が選択される。なお、分割処理部は、各入力端子から各出力端子までフォワードトレースを行い、各スキャンフリップフロップおよび各出力端子に各入力端子名のインデックス段数を付してもよい。
【0035】
分割処理部は、回路全体に各出力端子名のインデックス段数が付されると、その中から最大のインデックス段数を選択する。例えば、図18に示す回路111では、最大のインデックス段数は、A、BまたはDの入力端子におけるXのインデックス段数の7かYのインデックス段数の7である。従って、分割処理部は、例えばXのインデックス段数の7を選択する(Yのインデックス段数の7を選択してもよい)。Nを2以上の整数とするとき、仮のグループをN個に分割するには、入力端子を含めて最大段数が(2N+1)段以上であるのが好ましい。分割処理部は、Xの最大のインデックス段数Xmaxの[int(Xmax/N)+1]を求める。ここで、intは、小数点以下を切り捨てることを意味する。最大のインデックス段数としてYのインデックス段数Ymaxが選択される場合には、Xmaxに代えてYmaxとなる。図18に示す回路111では、Xmaxが7であるので、[int(7/2)+1=4]となる。従って、分割処理部は、Xのインデックス段数が4であるスキャンフリップフロップまたは入力端子を全て選択する。また、Xのインデックス段数が4であるスキャンフリップフロップは、Yのインデックス段数として4を有するので、分割処理部は、Yのインデックス段数が4であるスキャンフリップフロップまたは入力端子を全て選択する。便宜上、Xのインデックス段数として4を有するスキャンフリップフロップとYのインデックス段数として4を有するスキャンフリップフロップとをグループ#2のインデックスのスキャンフリップフロップと称する。Xのインデックス段数として4を有する入力端子とYのインデックス段数として4を有する入力端子とをグループ#2のインデックスの入力端子と称する。図18に示す回路111において、グループ#2のインデックスのスキャンフリップフロップに118〜122の符号を付し、グループ#2のインデックスの入力端子に123の符号を付す。
【0036】
また、分割処理部は、[int(Xmax/N)]を求める。図18に示す回路111では、[int(7/2)=3]となる。従って、分割処理部は、Xのインデックス段数が3であるスキャンフリップフロップ、入力端子または出力端子を全て選択する。また、Xのインデックス段数が3であるスキャンフリップフロップは、Yのインデックス段数として3を有するので、分割処理部は、Yのインデックス段数が3であるスキャンフリップフロップ、入力端子または出力端子を全て選択する。便宜上、Xのインデックス段数として3を有するスキャンフリップフロップとYのインデックス段数として3を有するスキャンフリップフロップとをグループ#1のインデックスのスキャンフリップフロップと称する。Xのインデックス段数として3を有する入力端子とYのインデックス段数として3を有する入力端子とをグループ#1のインデックスの入力端子と称する。Xのインデックス段数として3を有する出力端子とYのインデックス段数として3を有する出力端子とをグループ#1のインデックスの出力端子と称する。図18に示す回路111において、グループ#1のインデックスのスキャンフリップフロップに124〜127の符号を付す。図18に示す回路111には、グループ#1のインデックスの入力端子およびグループ#1のインデックスの出力端子は、ない。
【0037】
分割処理部は、グループ#1のインデックスのスキャンフリップフロップ124〜127、グループ#1のインデックスの入力端子(図示例では、ない)またはグループ#1のインデックスの出力端子(図示例では、ない)から回路111の入力端子までバックトレースを行ってぶつかる全てのものをグループ#1とする。図18において、破線で囲む領域は、グループ#1の領域128である。分割処理部は、回路111の出力端子からグループ#2のインデックスのスキャンフリップフロップ118〜122またはグループ#2のインデックスの入力端子123までバックトレースを行ってぶつかる全てのものと、グループ#2のインデックスのスキャンフリップフロップ118〜122またはグループ#2のインデックスの入力端子123から回路111の出力端子までフォワードトレースを行ってぶつかる出力端子と、をグループ#2とする。図18において、一点鎖線で囲む領域は、グループ#2の領域129である。分割数を2からNに拡張した場合も同様である。
【0038】
図19は、実施例にかかる分割の仕方の第3の例におけるN分割の一例を示す回路図である。仮のグループをN分割する場合、分割処理部は、バックトレースによって回路全体に各出力端子名(フォワードトレースの場合は、各入力端子名)のインデックス段数を付す。分割処理部は、最大のインデックス段数(例えば、Xmaxとする)の[int(Xmax/N)×(N−1)+1]、[int(Xmax/N)×(N−1)]、[int(Xmax/N)×(N−2)+1]、[int(Xmax/N)×(N−2)]、[int(Xmax/N)×(N−3)+1]、[int(Xmax/N)×(N−3)]、・・・、[int(Xmax/N)+1および[int(Xmax/N)]を求める。
【0039】
図19に示すように、分割処理部は、出力端子131から[int(Xmax/N)]のスキャンフリップフロップ132までバックトレースしてぶつかる回路部133a,133bまたは入力端子134と、[int(Xmax/N)]のスキャンフリップフロップ132からフォワードトレースしてぶつかる回路部133b,133aまたは出力端子135と、を一つのグループとする。分割処理部は、[int(Xmax/N)+1]のスキャンフリップフロップ136から[int(Xmax/N)×2]のスキャンフリップフロップ137までバックトレースしてぶつかる回路部133b,138a,138bまたは入力端子134,139,140と、[int(Xmax/N)×2]のスキャンフリップフロップ137から[int(Xmax/N)+1]のスキャンフリップフロップ136までフォワードトレースしてぶつかる回路部138b,138a,133bまたは出力端子141,142,135と、を一つのグループとする。間のグループについては省略するが、分割処理部は、[int(Xmax/N)×(N−2)+1]のスキャンフリップフロップ143から[int(Xmax/N)×(N−1)]のスキャンフリップフロップ144までバックトレースしてぶつかる回路部145a,145b,145cまたは入力端子146,147,148と、[int(Xmax/N)×(N−1)]のスキャンフリップフロップ144から[int(Xmax/N)×(N−2)+1]のスキャンフリップフロップ143までフォワードトレースしてぶつかる回路部145c,145b,145aまたは出力端子149,150,151と、を一つのグループとする。分割処理部は、[int(Xmax/N)×(N−1)+1]のスキャンフリップフロップ152から入力端子153までバックトレースしてぶつかる回路部145c,154または入力端子148と、入力端子153から[int(Xmax/N)×(N−1)+1]のスキャンフリップフロップ152までフォワードトレースしてぶつかる回路部154,145cまたは出力端子155,149と、を一つのグループとする。分割の仕方の第3の例は、例えば分割処理部C53において行われる処理である。
【0040】
上述した<1>〜<3>の各分割の仕方は、フィードバックを有する回路に対しても同様に適用できる。一例として、図20および図21に示す回路に対して上述した分割の仕方<1>を適用した場合について説明する。
【0041】
図20および図21は、実施例にかかる分割の仕方の第1の例によりインデックスを付した一例を示す回路図である。図20に示す回路161と図21に示す回路162は、図中の(1)〜(3)で接続されている。インデックスの表記において、「Z3:0」は、Z0、Z1、Z2およびZ3の出力端子のいずれかに関係することを表している。また、「[3:0]」という表記は、独立して4本の配線があることを表している。
【0042】
図22および図23は、図20および図21に示す回路に対する2分割の候補の一例を示す図表である。図22および図23に示す図表163,164のように、2分割の場合、31個のグループ分けのケースがある。この中から、分割処理部は、仮のグループの分割の仕方<1>に従ってケース13を選択する。
【0043】
図24は、図20および図21に示す回路におけるスキャンチェーンの一例を示す回路図である。図24において、太い実線は、グループ#1の領域におけるスキャンチェーン165であり、太い点線は、グループ#2の領域におけるスキャンチェーン166である。図20および図21に示す回路161,162には36個のスキャンフリップフロップが含まれているので、図24に示すように、グループ#1およびグループ#2のいずれも、9個のスキャンフリップフロップが削減された状態で試験を行うことができる。
【0044】
・複数のスキャンチェーンに接続可能なスキャンフリップフロップの構成<1>
図25は、実施例にかかるスキャンフリップフロップの構成の第1の例を示す回路図である。図25に示すように、集積回路であるスキャンフリップフロップ171は、第1のアンド回路172、第2のアンド回路173、・・・、第Nのアンド回路174、オア回路175、ノア回路176、セレクタ177およびフリップフロップ178を備えている。第1のアンド回路172は、第1のスキャンイン端子ScanIn1に入力される試験データと第1のスキャンモード端子ScanMode1に入力される選択信号とのアンド論理を出力する。第2のアンド回路173は、第2のスキャンイン端子ScanIn2に入力される試験データと第2のスキャンモード端子ScanMode2に入力される選択信号とのアンド論理を出力する。第Nのアンド回路174は、第Nのスキャンイン端子ScanInNに入力される試験データと第Nのスキャンモード端子ScanModeNに入力される選択信号とのアンド論理を出力する。オア回路175は、第1のアンド回路172、第2のアンド回路173および第Nのアンド回路174の各出力のオア論理を出力する。ノア回路176は、第1のスキャンモード端子ScanMode1、第2のスキャンモード端子ScanMode2および第Nのスキャンモード端子ScanModeNにそれぞれ入力される選択信号のノア論理を出力する。セレクタ177は、ノア回路176の出力に基づいて、データ端子Dataに通常動作時に入力されるデータまたはオア回路175の出力を選択して出力する。フリップフロップ178には、セレクタ177の出力が入力する。全てのスキャンモード端子に0が入力すると、ノア回路176の出力が1となるので、セレクタ177は、データ端子Dataに入力されるデータをフリップフロップ178へ出力する。いずれか一つのスキャンモード端子の入力が1であり、その他のスキャンモード端子の入力がすべて0である場合、ノア回路176の出力が0となる。従って、セレクタ177は、入力が1であるスキャンモード端子に対応するスキャンイン端子の入力データをフリップフロップ178へ出力する。スキャンフリップフロップ171は、モジュール化されていてもよい。
【0045】
・複数のスキャンチェーンに接続可能なスキャンフリップフロップの構成<2>
図26は、実施例にかかるスキャンフリップフロップの構成の第2の例を示す回路図である。図26に示すように、集積回路であるスキャンフリップフロップ181は、第1のセレクタ182、第2のセレクタ183、・・・、第Nのセレクタ184およびフリップフロップ185を備えている。第1のセレクタ182は、第1のスキャンモード端子ScanMode1に入力される選択信号に基づいて、データ端子Dataに通常動作時に入力されるデータまたは第1のスキャンイン端子ScanIn1に入力される試験データを選択して出力する。第2のセレクタ183は、第2のスキャンモード端子ScanMode2に入力される選択信号に基づいて、第1のセレクタ182の出力または第2のスキャンイン端子ScanIn2に入力される試験データを選択して出力する。第Nのセレクタ184は、第Nのスキャンモード端子ScanModeNに入力される選択信号に基づいて、図示省略する第(N−1)のセレクタの出力または第Nのスキャンイン端子ScanInNに入力される試験データを選択して出力する。フリップフロップ185には、第Nのセレクタ184の出力が入力する。各スキャンモード端子に入力される選択信号の組み合わせによって、各セレクタ182,183,184が切り替わる。最終的に、第Nのセレクタ184は、データ端子Dataへの入力データ、第1のスキャンイン端子ScanIn1への入力データ、第2のスキャンイン端子ScanIn2への入力データまたは第Nのスキャンイン端子ScanInNへの入力データをフリップフロップ185へ出力する。スキャンフリップフロップ181は、モジュール化されていてもよい。
【0046】
・スキャンチェーンの生成方法
図27は、実施例にかかるスキャンチェーンの生成方法を示すフローチャートである。図27に示すように、スキャンチェーンを生成する処理が開始されると、まず、集積回路の回路データとクロック情報が入力される(ステップS11)。次いで、回路データとクロック情報に基づいてクロックドメインが解析され、回路内の各フリップフロップにクロックがマッピングされる(ステップS12)。次いで、クロックドメインの解析結果に基づいて、同じクロックで動作するフリップフロップごとに仮のグループが生成される(ステップS13)。次いで、仮のグループごとに仮のスキャンチェーンが生成される(ステップS14)。次いで、各仮のグループに対して電力解析用のテストパターンが生成される(ステップS15)。次いで、仮のグループごとに電力解析用のテストパターンを用いて仮のグループを動作させたときの消費電力が解析される(ステップS16)。次いで、仮のグループごとに仮のグループを動作させたときの消費電力が電力許容値を超えるか否かを判定する(ステップS17)。仮のグループを動作させたときの消費電力が電力許容値を超える場合(ステップS17:Yes)、上述した仮のグループの分割の仕方の<1>、<2>または<3>などの種々の分割の仕方に従って、仮のグループに含まれる複数のフリップフロップが複数のグループに分割される(ステップS18)。<1>、<2>または<3>などの種々の分割の仕方のそれぞれに対して、例えば後述するような2通りの手順が行われる。種々の分割の仕方が実行されると、複数の分割結果が得られる。複数の分割結果の中から、分割により新たに生成されたグループの数(分割数)が例えば一番少ないものが選択される。複数の分割結果の中に、分割数が一番少ないものが複数あるときには、その中から、仮のグループの分割により新たに生成された複数のグループに重複して含まれるスキャンフリップフロップの数が一番少ないものが選択される(ステップS19)。次いで、複数のグループに重複して含まれるスキャンフリップフロップが、複数のスキャンチェーンに切り替えによって接続可能な構成のスキャンフリップフロップに変更される(ステップS20)。次いで、ステップS14に戻り、グループごとに仮のスキャンチェーンが生成される(ステップS14)。そして、ステップS17で消費電力が電力許容値を超えないようになるまで、ステップS14〜ステップS20が繰り返される。ステップS17で消費電力が電力許容値を超えないようになったら(ステップS17:No)、そのときのグループを最終的なグループとし、その最終的なグループに対してスキャンチェーンが生成される(ステップS21)。ステップS21でスキャンチェーンが生成されたら、スキャンチェーンを生成する一連の処理が終了する。
【0047】
・分割の手順<1>
図28は、実施例にかかる分割の手順の第1の例を示すフローチャートである。第1の例は、全てのグループの消費電力が電力許容値を超えないようになるまで分割数を増やしながら回路全体を分割し直す方法である。図28に示すように、仮のグループを分割する処理が開始されると、まず、例えば前記ステップS16の解析によって得られた仮のグループの消費電力が電力許容値の何倍であるか、ということに基づいて、仮のグループの分割数Nが決められる。例えば、仮のグループの消費電力が電力許容値の2倍を超え、かつ3倍未満であれば、分割数Nは3である。仮のグループの消費電力が電力許容値の3倍を超え、かつ4倍未満であれば、分割数Nは4である。このように、電力許容値に対する仮のグループの消費電力の倍率の小数点以下を切り上げた整数倍が分割数となる。分割数Nが決まると、仮のグループに対してN分割が実施される(ステップS31)。次いで、分割されてできた各グループに対して、前記ステップS14〜ステップS16と同様にして消費電力が解析される(ステップS32)。次いで、各グループの消費電力が電力許容値を超えるか否かが判定される(ステップS33)。一つ以上のグループの消費電力が電力許容値を超える場合(ステップS33:Yes)、分割数Nが1大きい値にされて(ステップS34)、ステップS31からの処理が繰り返される。ステップS33で、消費電力が電力許容値を超えるグループがなくなると(ステップS33:No)、分割の手順の一連の処理が終了する。
【0048】
・分割の手順<2>
図29は、実施例にかかる分割の手順の第2の例を示すフローチャートである。第2の例は、消費電力が電力許容値を超えないグループについてはそのままとし、消費電力が電力許容値を超えるグループを分割する方法である。図29に示すように、仮のグループを分割する処理が開始されると、まず、上述した分割の手順<1>のステップS31〜ステップS33と同様に、仮のグループの分割数Nが決められ、仮のグループに対してN分割が実施される(ステップS41)。分割数Nの決め方は、分割の手順<1>の場合と同様である。次いで、消費電力が解析される(ステップS42)。次いで、各グループの消費電力が電力許容値を超えるか否かが判定される(ステップS43)。ステップS43で、消費電力が電力許容値を超えるグループがない場合(ステップS43:No)、分割の手順の一連の処理が終了する。消費電力が電力許容値を超えるグループがある場合(ステップS43:Yes)、消費電力が電力許容値を超えるグループに対してM分割が実施される(ステップS44)。分割数Mの決め方は、分割の手順<1>における分割数Nの決め方と同様である。次いで、分割の手順<1>のステップS32〜ステップS33と同様に、M分割されてできた各グループの消費電力が解析される(ステップS45)。次いで、各グループの消費電力が電力許容値を超えるか否かが判定される(ステップS46)。ステップS46で、消費電力が電力許容値を超えるグループがない場合(ステップS46:No)、分割の手順の一連の処理が終了する。消費電力が電力許容値を超えるグループがある場合(ステップS46:Yes)、ステップS44〜ステップS46の処理が繰り返される。
【0049】
・集積回路の設計手順
図30は、集積回路の設計処理手順の一例を示すフローチャートである。図30に示すように、まず、RTL(Register Transfer Level)で記述されたデータが入力される(ステップS51)。RTLデータには、Register−To−Registerのデータの流れと、その間の論理が記述されている。RTLデータには、実際の回路を構成するゲートやフリップフロップなどの物理的な実体がない。次いで、論理合成処理が行われる(ステップS52)。論理合成処理を実施することによって、RTLの記述が、物理的な対象を有するゲートレベルのネットリストにマッピングされ、ネットリストが生成される(ステップS53)。次いで、テスト容易化設計(Design For Test)が行われる(ステップS54)。テスト容易化設計では、例えば図27〜図29に示す手順に従ってスキャンチェーンが生成される。次いで、レイアウト処理や配置配線処理が実施される(ステップS55)。
【0050】
実施例2によれば、集積回路が実際に動作するときのロジックコーンを考慮して、複数のフリップフロップが、複数のフリップフロップのうちの一部のフリップフロップが複数のグループに含まれるように、分割される。あるいは、複数のフリップフロップが、前後のグループで一部重なるように分割される。このように分割されることによって、各グループは、他のグループから受ける影響や他のグループへ及ぼす影響を考慮して動作することになる。従って、実施例1と同様に、分割されたグループ間の試験を行えるようにスキャンチェーンを生成することができる。また、従来、ブロックを分割する際に行っていたスキャンクロックの変更が不要となる。また、スキャンフリップフロップが複数のスキャンイン端子と複数のスキャンモード端子を有するので、スキャンモード端子への選択信号を制御することによって、複数のグループに重複して含まれるスキャンフリップフロップを複数のスキャンチェーンに切り替えて接続することができる。
【0051】
なお、上述したスキャンチェーンの生成方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な伝送媒体であってもよい。
【0052】
また、上述した試験装置は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けIC(ASIC)やFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。具体的には、例えば、上述した試験装置の入力部11、仮生成部12、解析部13、分割部14および生成部15をHDL記述によって機能定義し、そのHDL記述を論理合成してASICやPLDに与えることにより、試験装置を製造することができる。
【0053】
上述した実施例1、2に関し、さらに以下の付記を開示する。
【0054】
(付記1)集積回路の回路データを入力する入力ステップと、該回路データに基づいて複数のフリップフロップを含む仮のスキャンチェーンを生成する仮生成ステップと、該仮のスキャンチェーンを動作させたときの消費電力が許容値を超えるか否かを解析する解析ステップと、該仮のスキャンチェーンを動作させたときの消費電力が許容値を超える場合に、該集積回路が実際に動作するときの信号の伝達経路に基づいて、該仮のスキャンチェーンに含まれる複数のフリップフロップを、該複数のフリップフロップのうちの一部のフリップフロップが複数のグループに含まれるように、複数のグループに分割する分割ステップと、該複数のグループに含まれるフリップフロップを該複数のグループのそれぞれに生成されるスキャンチェーンに接続して該グループごとにスキャンチェーンを生成する生成ステップと、を含むことを特徴とするスキャンチェーンの生成方法。
【0055】
(付記2)前記分割ステップでは、前記集積回路が実際に動作するときに前記集積回路の各出力端子から出力される信号を該出力端子から前記集積回路の入力端子まで遡って辿るときに該信号が経由する前記フリップフロップをまとめて一つの単位とし、該単位を該出力端子ごとに求め、複数の該単位を組み合わせて前記複数のグループを生成することを特徴とする付記1に記載のスキャンチェーンの生成方法。
【0056】
(付記3)前記分割ステップでは、前記集積回路が実際に動作するときに前記集積回路の各入力端子から入力される信号を該入力端子から前記集積回路の出力端子まで辿るときに該信号が経由する前記フリップフロップをまとめて一つの単位とし、該単位を該出力端子ごとに求め、複数の該単位を組み合わせて前記複数のグループを生成することを特徴とする付記1に記載のスキャンチェーンの生成方法。
【0057】
(付記4)前記分割ステップでは、前記集積回路が実際に動作するときに前記集積回路の各出力端子から出力される信号を該出力端子から前記集積回路の入力端子まで遡って辿るときに該信号が経由する前記フリップフロップの個数を数え、該個数の最大値jが4以上であるときに3以上[j−1]以下の値kに対して、該個数がk個までのグループと、該個数が[k−1]個以上のグループと、を生成することを特徴とする付記1に記載のスキャンチェーンの生成方法。
【0058】
(付記5)コンピュータを、メモリから集積回路の回路データを読み出して演算処理部に入力する入力部、該演算処理部で該回路データを演算処理して複数のフリップフロップを含む仮のスキャンチェーンを生成する仮生成部、該演算処理部で該回路データを演算処理して該仮のスキャンチェーンを動作させたときの消費電力が許容値を超えるか否かを解析する解析部、該仮のスキャンチェーンを動作させたときの消費電力が許容値を超える場合に、該演算処理部で該回路データを演算処理して、前記集積回路が実際に動作するときの信号の伝達経路に基づいて、該仮のスキャンチェーンに含まれる複数のフリップフロップを、該複数のフリップフロップのうちの一部のフリップフロップが複数のグループに含まれるように、複数のグループに分割する分割部、該演算処理部で該回路データを演算処理して該複数のグループに含まれるフリップフロップを該複数のグループのそれぞれに生成されるスキャンチェーンに接続して該グループごとにスキャンチェーンを生成する生成部、として機能させることを特徴とするスキャンチェーンの生成プログラム。
【0059】
(付記6)前記分割部は、前記集積回路が実際に動作するときに前記集積回路の各出力端子から出力される信号を該出力端子から前記集積回路の入力端子まで遡って辿るときに該信号が経由する前記フリップフロップをまとめて一つの単位とし、該単位を該出力端子ごとに求め、複数の該単位を組み合わせて前記複数のグループを生成することを特徴とする付記5に記載のスキャンチェーンの生成プログラム。
【0060】
(付記7)前記分割部は、前記集積回路が実際に動作するときに前記集積回路の各入力端子から入力される信号を該入力端子から前記集積回路の出力端子まで辿るときに該信号が経由する前記フリップフロップをまとめて一つの単位とし、該単位を該出力端子ごとに求め、複数の該単位を組み合わせて前記複数のグループを生成することを特徴とする付記5に記載のスキャンチェーンの生成プログラム。
【0061】
(付記8)前記分割部は、前記集積回路が実際に動作するときに前記集積回路の各出力端子から出力される信号を該出力端子から前記集積回路の入力端子まで遡って辿るときに該信号が経由する前記フリップフロップの個数を数え、該個数の最大値jが4以上であるときに3以上[j−1]以下の値kに対して、該個数がk個までのグループと、該個数が[k−1]個以上のグループと、を生成することを特徴とする付記5に記載のスキャンチェーンの生成プログラム。
【0062】
(付記9)集積回路の回路データを入力する入力部と、前記回路データに基づいて複数のフリップフロップを含む仮のスキャンチェーンを生成する仮生成部と、該仮のスキャンチェーンを動作させたときの消費電力が許容値を超えるか否かを解析する解析部と、該仮のスキャンチェーンを動作させたときの消費電力が許容値を超える場合に、前記集積回路が実際に動作するときの信号の伝達経路に基づいて、該仮のスキャンチェーンに含まれる複数のフリップフロップを、該複数のフリップフロップのうちの一部のフリップフロップが複数のグループに含まれるように、複数のグループに分割する分割部と、該複数のグループに含まれるフリップフロップを該複数のグループのそれぞれに生成されるスキャンチェーンに接続して該グループごとにスキャンチェーンを生成する生成部と、を備えることを特徴とする集積回路の試験装置。
【0063】
(付記10)前記分割部は、前記集積回路が実際に動作するときに前記集積回路の各出力端子から出力される信号を該出力端子から前記集積回路の入力端子まで遡って辿るときに該信号が経由する前記フリップフロップをまとめて一つの単位とし、該単位を該出力端子ごとに求め、複数の該単位を組み合わせて前記複数のグループを生成することを特徴とする付記9に記載の集積回路の試験装置。
【0064】
(付記11)前記分割部は、前記集積回路が実際に動作するときに前記集積回路の各入力端子から入力される信号を該入力端子から前記集積回路の出力端子まで辿るときに該信号が経由する前記フリップフロップをまとめて一つの単位とし、該単位を該出力端子ごとに求め、複数の該単位を組み合わせて前記複数のグループを生成することを特徴とする付記9に記載の集積回路の試験装置。
【0065】
(付記12)前記分割部は、前記集積回路が実際に動作するときに前記集積回路の各出力端子から出力される信号を該出力端子から前記集積回路の入力端子まで遡って辿るときに該信号が経由する前記フリップフロップの個数を数え、該個数の最大値jが4以上であるときに3以上[j−1]以下の値kに対して、該個数がk個までのグループと、該個数が[k−1]個以上のグループと、を生成することを特徴とする付記9に記載の集積回路の試験装置。
【0066】
(付記13)通常動作時にデータが入力されるデータ端子と、試験時に試験データが入力される複数のスキャンイン端子と、選択信号が入力される複数のスキャンモード端子と、該スキャンモード端子に入力される選択信号に基づいて、該データ端子に入力されるデータ、または該複数のスキャンイン端子に入力される試験データのうちのいずれか一つの試験データを選択するセレクタと、該セレクタの出力データが入力されるフリップフロップと、を備えることを特徴とする集積回路。
【0067】
(付記14)前記データ端子、前記複数のスキャンイン端子、前記複数のスキャンモード端子、前記セレクタおよび前記フリップフロップを備えたモジュールであることを特徴とする付記13に記載の集積回路。
【符号の説明】
【0068】
11 入力部
12 仮生成部
13 解析部
14 分割部
15 生成部
【技術分野】
【0001】
この発明は、スキャンチェーンの生成方法、スキャンチェーンの生成プログラムおよび集積回路に関する。
【背景技術】
【0002】
従来、スキャンチェーンを用いた集積回路の試験方法が知られている。スキャンチェーンを用いて集積回路の試験を行う際、同時に動作するスキャンフリップフロップの数が多いと、試験時の消費電力が試験装置の許容値を超えることがある。消費電力が許容値を超えると、試験を行うことができない。一方、スキャンチェーンを分割する方法が知られている。例えば、論理回路をブロックに分割し、各ブロックごとにスキャンチェーンを形成する方法が知られている(例えば、特許文献1参照。)。また、試験対象回路内の第1スキャンチェーン、および非試験対象回路内の第2スキャンチェーンの両方に試験データを与える工程と、第1スキャンチェーンにクロックを入力し、一方第2スキャンチェーンにクロックを入力しない工程とを含む方法が知られている(例えば、特許文献2参照。)。また、1本のスキャンチェーンを構成するフリップフロップ回路を、フリップフロップの数が実質的に均等になるように分割して複数のスキャンチェーンを形成する方法が知られている(例えば、特許文献3参照。)。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開平10−2938号公報
【特許文献2】特開2006−58152号公報
【特許文献3】特開2006−163688号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、従来の方法では、単一のクロックドメインの領域をモジュールなどの複数の領域に分割し、分割された領域ごとにスキャンチェーンを形成した場合、分割された各領域は、本来互いに相手の動作に依存して動作するにも関わらず、集積回路の試験時は分割された領域間の試験を行うことができないという問題点がある。
【0005】
一つの回路を分割した複数の領域間の試験を行えるようにスキャンチェーンを生成することができるスキャンチェーンの生成方法、スキャンチェーンの生成プログラムおよび集積回路を提供することを目的とする。
【課題を解決するための手段】
【0006】
このスキャンチェーンの生成方法およびスキャンチェーンの生成プログラムは、集積回路の試験時に、複数のフリップフロップを含むスキャンチェーンを動作させたときの消費電力が許容値を超える場合、スキャンチェーンに含まれる複数のフリップフロップを複数のグループに分割する。分割する際、集積回路が実際に動作するときの信号の伝達経路に基づいて、複数のフリップフロップのうちの一部のフリップフロップが複数のグループに含まれるようにする。複数のグループに含まれるフリップフロップは、複数のグループのそれぞれに生成されるスキャンチェーンに接続される。
【0007】
また、集積回路は、データ端子、複数のスキャンイン端子、複数のスキャンモード端子、セレクタおよびフリップフロップを備える。データ端子には、通常動作時にデータが入力される。スキャンイン端子には、試験時に試験データが入力される。スキャンモード端子には、選択信号が入力される。セレクタは、スキャンモード端子に入力される選択信号に基づいて、データ端子に入力されるデータ、または複数のスキャンイン端子に入力される試験データのうちのいずれか一つの試験データを選択する。フリップフロップには、セレクタの出力データが入力される。
【発明の効果】
【0008】
このスキャンチェーンの生成方法、スキャンチェーンの生成プログラムおよび集積回路によれば、一つの回路を分割した複数の領域間の試験を行えるようにスキャンチェーンを生成することができるという効果を奏する。
【図面の簡単な説明】
【0009】
【図1】実施例にかかる試験装置のハードウェア構成を示すブロック図である。
【図2】実施例にかかる試験装置の機能的な構成を示すブロック図である。
【図3】実施例にかかるスキャンチェーンの生成方法を示すフローチャートである。
【図4】実施例にかかる試験装置の入力部の構成を示すブロック図である。
【図5】実施例にかかる試験装置の仮生成部の構成を示すブロック図である。
【図6】実施例にかかる試験装置の解析部の構成を示すブロック図である。
【図7】実施例にかかる試験装置の分割部の構成を示すブロック図である。
【図8】実施例にかかる試験装置の生成部の構成を示すブロック図である。
【図9】実施例にかかる分割の仕方の第1の例を説明する回路図である。
【図10】実施例にかかる分割の仕方の第1の例においてロジックコーンの一例を示す回路図である。
【図11】実施例にかかる分割の仕方の第1の例における2分割の候補の一例を示す図表である。
【図12】実施例にかかる分割の仕方の第1の例における2分割の結果の一例を示す回路図である。
【図13】実施例にかかる分割の仕方の第1の例における3分割の候補の一例を示す図表である。
【図14】実施例にかかる分割の仕方の第1の例における3分割の結果の一例を示す回路図である。
【図15】実施例にかかる分割の仕方の第2の例においてロジックコーンの一例を示す回路図である。
【図16】実施例にかかる分割の仕方の第2の例における2分割の候補の一例を示す図表である。
【図17】実施例にかかる分割の仕方の第2の例における2分割の結果の一例を示す回路図である。
【図18】実施例にかかる分割の仕方の第3の例における2分割の結果の一例を示す回路図である。
【図19】実施例にかかる分割の仕方の第3の例におけるN分割の一例を示す回路図である。
【図20】実施例にかかる分割の仕方の第1の例によりインデックスを付した一例を示す回路図である。
【図21】実施例にかかる分割の仕方の第1の例によりインデックスを付した一例を示す回路図である。
【図22】図20および図21に示す回路に対する2分割の候補の一例を示す図表である。
【図23】図20および図21に示す回路に対する2分割の候補の一例を示す図表である。
【図24】図20および図21に示す回路におけるスキャンチェーンの一例を示す回路図である。
【図25】実施例にかかるスキャンフリップフロップの構成の第1の例を示す回路図である。
【図26】実施例にかかるスキャンフリップフロップの構成の第2の例を示す回路図である。
【図27】実施例にかかるスキャンチェーンの生成方法を示すフローチャートである。
【図28】実施例にかかる分割の手順の第1の例を示すフローチャートである。
【図29】実施例にかかる分割の手順の第2の例を示すフローチャートである。
【図30】集積回路の設計処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【0010】
以下に添付図面を参照して、このスキャンチェーンの生成方法、スキャンチェーンの生成プログラムおよび集積回路の好適な実施の形態を詳細に説明する。
【0011】
(実施例1)
実施例1では、集積回路の試験時に、複数のフリップフロップを含むスキャンチェーンを動作させたときの消費電力が許容値を超える場合、スキャンチェーンに含まれる複数のフリップフロップが複数のグループに分割される。分割の際には、集積回路が実際に動作するときの信号の伝達経路に基づいて、複数のフリップフロップのうちの一部のフリップフロップが複数のグループに含まれる。複数のグループに含まれるフリップフロップは、複数のグループのそれぞれに生成されるスキャンチェーンに接続される。
【0012】
・試験装置のハードウェア構成
図1は、実施例にかかる試験装置のハードウェア構成を示すブロック図である。図1に示すように、試験装置は、例えばパーソナルコンピュータやワークステーションなどのコンピュータ装置によって、予め作成されたプログラムが実行されることにより実現される。コンピュータ装置は、例えばCentral Processing Unit(CPU、中央処理装置)1、Random Access Memory(RAM、ランダムアクセスメモリ)2、Hard Disk Drive(HDD、ハードディスク装置)3、グラフィック処理部4、入力インタフェース(入力I/F)5および通信インタフェース(通信I/F)6を備えている。Central Processing Unit(CPU、中央処理装置)1、Random Access Memory(RAM、ランダムアクセスメモリ)2、Hard Disk Drive(HDD、ハードディスク装置)3、グラフィック処理部4、入力インタフェース(入力I/F)5および通信インタフェース(通信I/F)6は、バス7を介して相互に接続されている。
【0013】
CPU1は、コンピュータ装置の全体に対する制御を司る。RAM2は、CPU1に実行させるプログラムの少なくとも一部や、このプログラムによる処理に必要な各種データを一時的に記憶する。HDD3には、Operating System(OS、オペレーティングシステム)やアプリケーションプログラム、および各種データが格納される。グラフィック処理部4には、モニタ8が接続されている。グラフィック処理部4は、CPU1からの命令に従って、モニタ8の画面に画像を表示させる。入力I/F5には、例えばキーボード9やマウス10などの入力デバイスが接続されている。入力I/F5は、入力デバイスからの信号を、バス7を介してCPU1に送信する。通信I/F6は、図示しない通信ケーブルなどを介して外部機器と接続され、その外部機器との間でデータの送受信を行う。
【0014】
・試験装置の機能的構成
図2は、実施例にかかる試験装置の機能的な構成を示すブロック図である。図2に示すように、試験装置は、例えば入力部11、仮生成部12、解析部13、分割部14および生成部15を備えている。入力部11は、集積回路の回路データを入力する。仮生成部12は、回路データに基づいて複数のフリップフロップを含む仮のスキャンチェーンを生成する。解析部13は、仮のスキャンチェーンを動作させたときの消費電力が許容値を超えるか否かを解析する。分割部14は、仮のスキャンチェーンを動作させたときの消費電力が許容値を超える場合に、集積回路が実際に動作するときの信号の伝達経路に基づいて、仮のスキャンチェーンに含まれる複数のフリップフロップを複数のグループに分割する。分割部14は、仮のスキャンチェーンに含まれる複数のフリップフロップのうちの一部のフリップフロップを、複数のグループに含める。分割部14での分割処理により生成されたフリップフロップの複数のグループについては、グループごとに仮生成部12において仮のスキャンチェーンが生成される。生成された仮のスキャンチェーンについては、解析部13において仮のスキャンチェーンを動作させたときの消費電力が解析される。生成部15は、複数のグループに含まれるフリップフロップを、複数のグループのそれぞれに生成されるスキャンチェーンに接続して、グループごとにスキャンチェーンを生成する。入力部11、仮生成部12、解析部13、分割部14および生成部15は、例えば図1に示すコンピュータ装置のHDD3またはRAM2に記憶されたプログラムをCPU1に実行させることにより実現される。
【0015】
・スキャンチェーンの生成方法
図3は、実施例にかかるスキャンチェーンの生成方法を示すフローチャートである。図3に示すように、スキャンチェーンを生成する処理が開始されると、まず、集積回路の回路データが入力される(ステップS1)。次いで、回路データに基づいて複数のフリップフロップを含む仮のスキャンチェーンが生成される(ステップS2)。次いで、仮のスキャンチェーンを動作させたときの消費電力が許容値を超えるか否かを解析する(ステップS3)。仮のスキャンチェーンを動作させたときの消費電力が許容値を超える場合(ステップS3:Yes)、集積回路が実際に動作するときの信号の伝達経路に基づいて、仮のスキャンチェーンに含まれる複数のフリップフロップが複数のグループに分割される。その際、仮のスキャンチェーンに含まれる複数のフリップフロップのうちの一部のフリップフロップは、複数のグループに含まれる(ステップS4)。次いで、ステップS2に戻り、ステップS4で生成された各グループに対して仮のスキャンチェーンが生成される(ステップS2)。そして、ステップS3で仮のスキャンチェーンを動作させたときの消費電力が許容値を超えないようになるまで、ステップS2〜ステップS4が繰り返される。ステップS3で仮のスキャンチェーンを動作させたときの消費電力が許容値を超えない場合、グループごとにスキャンチェーンが生成される。そして、複数のグループに含まれるフリップフロップは、複数のグループのそれぞれに生成されるスキャンチェーンに接続される(ステップS5)。ステップS5でスキャンチェーンが生成されたら、スキャンチェーンを生成する一連の処理が終了する。
【0016】
実施例1によれば、集積回路が実際に動作するときの信号の伝達経路に基づいて、複数のフリップフロップが、複数のフリップフロップのうちの一部のフリップフロップが複数のグループに含まれるように、分割されるので、各グループは、他のグループから受ける影響や他のグループへ及ぼす影響を考慮して動作することになる。従って、分割された各グループの試験を行うことによって、分割されたグループ間の試験も行うことができるので、分割されたグループ間の試験を行えるようにスキャンチェーンを生成することができる。
【0017】
(実施例2)
実施例2には、実施例1の試験装置の各部の具体例および実施例1のスキャンチェーンの生成方法の具体例を示す。試験装置のハードウェア構成および機能的構成は、実施例1と同様である。すなわち、実施例2にかかる試験装置は、図2に示すように、入力部11、仮生成部12、解析部13、分割部14および生成部15を備えている。
【0018】
・入力部の構成
図4は、実施例にかかる試験装置の入力部の構成を示すブロック図である。図4に示すように、入力部11は、クロックドメイン解析部21を備えている。クロックドメイン解析部21は、回路データとクロック情報に基づいて、回路内のレジスタ(フリップフロップ)と関連するクロックをマッピングする。回路データは、例えばHardware Description Language(HDL、ハードウェア記述言語)で記述されたデータ、またはSimulation Program with Integrated Circuit Emphasis(SPICE、スパイス)で記述されたデータなどの設計データである。クロック情報は、クロックが接続される端子に関する情報である。クロックドメイン解析部21は、解析結果を仮生成部12に渡す。
【0019】
・仮生成部の構成
図5は、実施例にかかる試験装置の仮生成部の構成を示すブロック図である。図5に示すように、仮生成部12は、生成部31および仮スキャンチェーン生成部32を備えている。生成部31は、クロックドメイン解析部21の解析結果に基づいて、回路内のフリップフロップを、同じクロックでマッピングされたフリップフロップごとにまとめた仮のグループを生成する。つまり、各仮のグループには、全スキャンフリップフロップのうち、同一のクロックで動作するスキャンフリップフロップが含まれる。各仮のグループにおいて、それぞれの仮のグループに含まれるスキャンフリップフロップをシリアルに接続することによって、後述する仮のスキャンチェーンが生成される。各仮のグループには、それぞれの仮のスキャンチェーンの間に存在する回路が含まれる。また、各仮のグループには、入力端子からそれぞれの仮のグループに含まれるスキャンフリップフロップまでの間に存在する回路が含まれる。また、各仮のグループには、それぞれの仮のグループに含まれるスキャンフリップフロップから出力端子までの間に存在する回路が含まれる。仮スキャンチェーン生成部32は、各仮のグループに対して仮のスキャンチェーンを生成する。仮スキャンチェーン生成部32は、分割部14で生成された複数のグループをそれぞれ仮のグループとし、該仮のグループに対して仮のスキャンチェーンを生成する。仮のグループの情報および仮のスキャンチェーンの情報は、解析部13に渡される。
【0020】
・解析部の構成
図6は、実施例にかかる試験装置の解析部の構成を示すブロック図である。図6に示すように、解析部13は、テストパターン生成部41、電力解析部42および判定部43を備えている。テストパターン生成部41は、仮スキャンチェーン生成部32から渡された情報に基づいて、各仮のグループに対して電力解析用のテストパターンを生成する。電力解析部42は、仮のグループごとに電力解析用のテストパターンを用いて仮のグループを動作させたときの消費電力を解析する。例えば、電力解析部42は、HDLシミュレータやSPICEシミュレータなどのソフトウェア、またはハードウェアエミュレータを用いて、入力端子にテストパターンを入力し、シミュレーションによる解析を行ってもよい。あるいは、電力解析部42は、回路構造をソフトウェアで解析して、静的に消費電力を算出してもよい。回路構造をソフトウェアで解析する場合には、テストパターンが不要であるので、テストパターン生成部41はなくてもよい。判定部43は、仮のグループごとに消費電力の解析結果と電力許容値を比較し、消費電力が電力許容値を超えているか否かを判定する。電力許容値は、例えば集積回路の設計者により外部から入力されて設定される。例えば、電力許容値は、試験装置の定格許容電力などに基づいて設定される。消費電力が電力許容値を超えている場合、判定部43は、仮のグループの情報および仮のスキャンチェーンの情報を分割部14に渡す。消費電力が電力許容値を超えていない場合、判定部43は、仮のグループの情報および仮のスキャンチェーンの情報を生成部15に渡す。
【0021】
・分割部の構成
図7は、実施例にかかる試験装置の分割部の構成を示すブロック図である。図7に示すように、分割部14は、1以上の分割処理部51,52,53および選択部54を備えている。なお、図7においてはA、BおよびCの3個の分割処理部が示されているが、分割処理部の数は1個、2個または4個以上でもよい。各分割処理部51,52,53は、それぞれの分割の仕方で、生成部31で生成された仮のグループを分割する。各分割処理部において仮のグループをどのように分割するか、ということについては、後述する。選択部54は、分割処理部51,52,53から得られた複数の分割結果の中から、分割により新たに生成されたグループの数(すなわち、分割数)が例えば一番少ないものを選択する。選択部54は、分割処理部51,52,53から得られた複数の分割結果の中に、分割数が一番少ないものが複数あるときには、その中から、仮のグループの分割により新たに生成された複数のグループに重複して含まれるスキャンフリップフロップの数が一番少ないものを選択する。選択部54は、選択した結果を仮生成部12に渡す。
【0022】
・生成部の構成
図8は、実施例にかかる試験装置の生成部の構成を示すブロック図である。図8に示すように、生成部15は、重複処理部61および生成部62を備えている。重複処理部61は、複数のグループに重複して含まれるスキャンフリップフロップを、複数のスキャンチェーンに切り替えによって接続可能な構成のスキャンフリップフロップに変更する。複数のスキャンチェーンに接続可能なスキャンフリップフロップの構成については、後述する。生成部62は、解析部13から渡された情報に基づいて、仮のグループに対して、スキャンチェーンを生成する。生成部62は、スキャンクロックやスキャンモード信号など、スキャンチェーンの生成以外の必要な処理を行う。
【0023】
・仮のグループの分割の仕方<1>
図9は、実施例にかかる分割の仕方の第1の例を説明する回路図である。一例として、図9に示す回路71を例にして、分割の仕方の第1の例を説明する。図9に示す回路71は、例えば単一のクロックドメインの領域である。図9に示す回路71において、各フリップフロップは、同じクロックで動作するスキャンフリップフロップである。A、B、CおよびDは、入力端子である。W、X、YおよびZは、出力端子である。分割の仕方の第1の例は、ロジックコーンを考慮して出力端子から入力端子までバックトレースを行うことによって、仮のグループを分割する。ロジックコーンは、図9に示す回路71が実際に動作するときの前段のスキャンフリップフロップと後段のスキャンフリップフロップとの間の信号の入出力関係を表している。ロジックコーンは、スキャンフリップフロップ間の、例えばアンド回路やオア回路などの組み合わせ回路を省略して表している。
【0024】
図10は、実施例にかかる分割の仕方の第1の例においてロジックコーンの一例を示す回路図である。図10に示すように、バックトレースを行う場合、ロジックコーン72は、後段のスキャンフリップフロップの入力端子から、該入力端子に入力される信号を出力する前段のスキャンフリップフロップの出力端子へ向かって広がる三角形状で示される。図10においては、一例として、後段のスキャンフリップフロップ73とその直前の段のスキャンフリップフロップ74,75との間のロジックコーンに72の符号を付す。分割処理部は、W、X、YおよびZの各出力端子からA、B、CおよびDの各入力端子までバックトレースを行って、各ロジックコーンの入力となるスキャンフリップフロップと入力端子を検出する。分割処理部は、検出したスキャンフリップフロップと入力端子にインデックスとして例えばW、X、YまたはZの出力端子名を付ける。例えば、図10に示す回路71では、出力端子Wのロジックコーンの入力であるスキャンフリップフロップ73にインデックスとしてWが付けられる。同様に、出力端子Xのロジックコーンの入力であるスキャンフリップフロップ76にインデックスとしてXが付けられる。スキャンフリップフロップ74は、スキャンフリップフロップ73(インデックス:W)のロジックコーン72と、スキャンフリップフロップ76(インデックス:X)のロジックコーン77との入力になっている。従って、スキャンフリップフロップ74には、インデックスとしてWとXが付けられる。説明を省略するが、他のスキャンフリップフロップおよび入力端子にも同様にインデックスが付けられる。分割処理部は、故障検出観測用のスキャンフリップフロップ78からスキャンフリップフロップまたは入力端子までバックトレースを行い、検出したスキャンフリップフロップや入力端子と同じインデックスを故障検出観測用のスキャンフリップフロップ78に付ける。図10において、各スキャンフリップフロップの中にインデックスが示されており、各入力端子の上にインデックスが示されている。
【0025】
図11は、実施例にかかる分割の仕方の第1の例における2分割の候補の一例を示す図表である。図11に示す例は、図9に示す回路71を2分割にする例である。図11に示す図表81のように、2分割の場合、7個のグループ分けのケースがある。分割処理部は、各ケースにおいて、それぞれのグループに含まれるスキャンフリップフロップの数を数え、数が最大のグループのスキャンフリップフロップの数を求める。例えば、図11に示す図表81のケース1の場合、グループ#1のスキャンフリップフロップの数は5個であり、グループ#2のスキャンフリップフロップの数は12個であるので、ケース1のスキャンフリップフロップ数として12が選択される。ケース2、ケース3、ケース4、ケース5、ケース6およびケース7については、それぞれスキャンフリップフロップ数として12、10、12、11、11および11が選択される。分割処理部は、全てのケースについて数が最大のグループのスキャンフリップフロップの数を求めたら、その中からスキャンフリップフロップの数が最小のものを選択する。図11に示す図表81の例では、スキャンフリップフロップの数が10であるケース3が選択される。スキャンフリップフロップの数が最小となるケースが複数ある場合には、スキャンフリップフロップの延べ数が最小のケースが選択される。スキャンフリップフロップの延べ数は、グループ#1のスキャンフリップフロップの数とグループ#2のスキャンフリップフロップの数との和である。図11に示す図表81の例では、図9に示す回路71は、WまたはXのインデックスが付けられた10個のスキャンフリップフロップのグループ#1と、YまたはZのインデックスが付けられた10個のスキャンフリップフロップのグループ#2と、に分割される。
【0026】
図12は、実施例にかかる分割の仕方の第1の例における2分割の結果の一例を示す回路図である。図12において、破線で囲む領域は、グループ#1の領域82であり、一点鎖線で囲む領域は、グループ#2の領域83である。太い実線は、グループ#1の領域82におけるスキャンチェーン84であり、太い点線は、グループ#2の領域83におけるスキャンチェーン85である。図9に示す回路71には13個のスキャンフリップフロップが含まれているので、図12に示すように、グループ#1およびグループ#2のいずれも、3個のスキャンフリップフロップが削減された状態で試験を行うことができる。
【0027】
図13は、実施例にかかる分割の仕方の第1の例における3分割の候補の一例を示す図表である。図13に示す例は、図9に示す回路71を3分割にする例である。図13に示す図表91のように、3分割の場合、6個のグループ分けのケースがある。2分割の場合と同様にして、分割のケースが選択される。すなわち、各ケースにおいてスキャンフリップフロップの数が最大のグループのうち、最小のスキャンフリップフロップの数は10である。最小のスキャンフリップフロップの数が10であるケースは、ケース1、ケース2、ケース4およびケース5である。これら4個のケースのうち、スキャンフリップフロップの延べ数の最小値は22である。従って、分割処理部は、ケース2を選択する。
【0028】
図14は、実施例にかかる分割の仕方の第1の例における3分割の結果の一例を示す回路図である。図14において、破線で囲む領域は、グループ#1の領域92であり、一点鎖線で囲む領域は、グループ#2の領域93であり、二点鎖線で囲む領域は、グループ#3の領域94である。太い実線は、グループ#1の領域92におけるスキャンチェーン95であり、太い点線は、グループ#2の領域93におけるスキャンチェーン96であり、太い一点鎖線は、グループ#3の領域94におけるスキャンチェーン97である。図14に示すように、グループ#1では、8個のスキャンフリップフロップが削減された状態、グループ#2では、3個のスキャンフリップフロップが削減された状態、グループ#3では、6個のスキャンフリップフロップが削減された状態で、それぞれ試験を行うことができる。なお、4以上の領域に分割する場合も同様である。分割の仕方の第1の例は、例えば分割処理部A51において行われる処理である。
【0029】
・仮のグループの分割の仕方<2>
一例として、図9に示す回路71を例にして、第2の分割の仕方を説明する。第2の分割の仕方は、ロジックコーンを考慮して入力端子から出力端子までフォワードトレースを行うことによって、仮のグループを分割する。
【0030】
図15は、実施例にかかる分割の仕方の第2の例においてロジックコーンの一例を示す回路図である。図15に示すように、フォワードトレースを行う場合、ロジックコーン79は、前段のスキャンフリップフロップの出力端子から、該出力端子から出力された信号が入力する後段のスキャンフリップフロップの入力端子へ向かって広がる三角形状で示される。図15においては、一例として、前段のスキャンフリップフロップ74とその直後の段のスキャンフリップフロップ73,76との間のロジックコーンに79の符号を付す。分割処理部は、A、B、CおよびDの各入力端子からW、X、YおよびZの各出力端子までフォワードトレースを行って、各ロジックコーンの出力となるスキャンフリップフロップと出力端子を検出する。分割処理部は、検出したスキャンフリップフロップと出力端子にインデックスとして例えばA、B、CまたはDの入力端子名を付ける。図15においては、各スキャンフリップフロップの中にインデックスが示されており、各出力端子の上にインデックスが示されている。
【0031】
図16は、実施例にかかる分割の仕方の第2の例における2分割の候補の一例を示す図表である。図16に示す例は、図9に示す回路71を2分割にする例である。図16に示す図表101のように、2分割の場合、7個のグループ分けのケースがある。7個のケースの中から一つを選択する仕方は、上述したバックトレースを行って仮のグループを分割する場合と同様である。図16に示す図表101の例では、ケース3が選択される。従って、図9に示す回路71は、AまたはBのインデックスが付けられた9個のスキャンフリップフロップのグループ#1と、CまたはDのインデックスが付けられた8個のスキャンフリップフロップのグループ#2と、に分割される。
【0032】
図17は、実施例にかかる分割の仕方の第2の例における2分割の結果の一例を示す回路図である。図17において、破線で囲む領域は、グループ#1の領域102であり、一点鎖線で囲む領域は、グループ#2の領域103である。太い実線は、グループ#1の領域102におけるスキャンチェーン104であり、太い点線は、グループ#2の領域103におけるスキャンチェーン105である。図17に示すように、グループ#1では、4個のスキャンフリップフロップが削減された状態、グループ#2では、5個のスキャンフリップフロップが削減された状態で、それぞれ試験を行うことができる。なお、3以上の領域に分割する場合も同様である。分割の仕方の第2の例は、例えば分割処理部B52において行われる処理である。
【0033】
・仮のグループの分割の仕方<3>
一例として、図18に示す回路111を例にして、第3の分割の仕方を説明する。第3の分割の仕方は、特定ステージのスキャンチェーンが前後のグループで重複するように、仮のグループを分割する。
【0034】
図18は、実施例にかかる分割の仕方の第3の例における2分割の結果の一例を示す回路図である。図18に示す回路111において、A、B、C、D、E、F、GおよびHは、入力端子である。XおよびYは、出力端子である。図18に示すように、分割処理部は、各出力端子から各入力端子までバックトレースを行って、各スキャンフリップフロップおよび各入力端子に各出力端子名のインデックス段数として、各出力端子から各入力端子へ向かって遡った段数を付ける。例えば、図18に示す回路111では、出力端子Xに接続された回路部112に接続されたスキャンフリップフロップ113は、出力端子Xから1段遡るので、Xのインデックス段数として1を有する。スキャンフリップフロップ113(Xのインデックス段数:1)に接続された回路部114に接続されたスキャンフリップフロップ115は、出力端子Xからさらに1段遡るので、Xのインデックス段数として2を有する。このように、出力端子から入力端子へ向かって1段遡るたびに、当該出力端子名のインデックス段数が1ずつ増える。出力端子Yについても同様である。図18においては、各スキャンフリップフロップの中にインデックス段数が示されており、各出力端子および各入力端子の上にインデックス段数が示されている。各出力端子では、インデックス段数は0である。インデックス段数の表記において、上段は出力端子Xのインデックス段数であり、下段は出力端子Yのインデックス段数である。複数の経路で遡って同一のスキャンフリップフロップに到達する場合、同一のスキャンフリップフロップが同じ出力端子名のインデックス段数として複数の値を有することになる。その場合には、分割処理部は、同じ出力端子名の複数のインデックス段数の中から最大のインデックス段数を選択する。例えば、図18に示す回路111では、入力端子Aに接続された回路部116に接続されたスキャンフリップフロップ117は、出力端子Xから遡るとわかるように、Xのインデックス段数として4と5と6を有する。この場合、Xのインデックス段数として6が選択される。なお、分割処理部は、各入力端子から各出力端子までフォワードトレースを行い、各スキャンフリップフロップおよび各出力端子に各入力端子名のインデックス段数を付してもよい。
【0035】
分割処理部は、回路全体に各出力端子名のインデックス段数が付されると、その中から最大のインデックス段数を選択する。例えば、図18に示す回路111では、最大のインデックス段数は、A、BまたはDの入力端子におけるXのインデックス段数の7かYのインデックス段数の7である。従って、分割処理部は、例えばXのインデックス段数の7を選択する(Yのインデックス段数の7を選択してもよい)。Nを2以上の整数とするとき、仮のグループをN個に分割するには、入力端子を含めて最大段数が(2N+1)段以上であるのが好ましい。分割処理部は、Xの最大のインデックス段数Xmaxの[int(Xmax/N)+1]を求める。ここで、intは、小数点以下を切り捨てることを意味する。最大のインデックス段数としてYのインデックス段数Ymaxが選択される場合には、Xmaxに代えてYmaxとなる。図18に示す回路111では、Xmaxが7であるので、[int(7/2)+1=4]となる。従って、分割処理部は、Xのインデックス段数が4であるスキャンフリップフロップまたは入力端子を全て選択する。また、Xのインデックス段数が4であるスキャンフリップフロップは、Yのインデックス段数として4を有するので、分割処理部は、Yのインデックス段数が4であるスキャンフリップフロップまたは入力端子を全て選択する。便宜上、Xのインデックス段数として4を有するスキャンフリップフロップとYのインデックス段数として4を有するスキャンフリップフロップとをグループ#2のインデックスのスキャンフリップフロップと称する。Xのインデックス段数として4を有する入力端子とYのインデックス段数として4を有する入力端子とをグループ#2のインデックスの入力端子と称する。図18に示す回路111において、グループ#2のインデックスのスキャンフリップフロップに118〜122の符号を付し、グループ#2のインデックスの入力端子に123の符号を付す。
【0036】
また、分割処理部は、[int(Xmax/N)]を求める。図18に示す回路111では、[int(7/2)=3]となる。従って、分割処理部は、Xのインデックス段数が3であるスキャンフリップフロップ、入力端子または出力端子を全て選択する。また、Xのインデックス段数が3であるスキャンフリップフロップは、Yのインデックス段数として3を有するので、分割処理部は、Yのインデックス段数が3であるスキャンフリップフロップ、入力端子または出力端子を全て選択する。便宜上、Xのインデックス段数として3を有するスキャンフリップフロップとYのインデックス段数として3を有するスキャンフリップフロップとをグループ#1のインデックスのスキャンフリップフロップと称する。Xのインデックス段数として3を有する入力端子とYのインデックス段数として3を有する入力端子とをグループ#1のインデックスの入力端子と称する。Xのインデックス段数として3を有する出力端子とYのインデックス段数として3を有する出力端子とをグループ#1のインデックスの出力端子と称する。図18に示す回路111において、グループ#1のインデックスのスキャンフリップフロップに124〜127の符号を付す。図18に示す回路111には、グループ#1のインデックスの入力端子およびグループ#1のインデックスの出力端子は、ない。
【0037】
分割処理部は、グループ#1のインデックスのスキャンフリップフロップ124〜127、グループ#1のインデックスの入力端子(図示例では、ない)またはグループ#1のインデックスの出力端子(図示例では、ない)から回路111の入力端子までバックトレースを行ってぶつかる全てのものをグループ#1とする。図18において、破線で囲む領域は、グループ#1の領域128である。分割処理部は、回路111の出力端子からグループ#2のインデックスのスキャンフリップフロップ118〜122またはグループ#2のインデックスの入力端子123までバックトレースを行ってぶつかる全てのものと、グループ#2のインデックスのスキャンフリップフロップ118〜122またはグループ#2のインデックスの入力端子123から回路111の出力端子までフォワードトレースを行ってぶつかる出力端子と、をグループ#2とする。図18において、一点鎖線で囲む領域は、グループ#2の領域129である。分割数を2からNに拡張した場合も同様である。
【0038】
図19は、実施例にかかる分割の仕方の第3の例におけるN分割の一例を示す回路図である。仮のグループをN分割する場合、分割処理部は、バックトレースによって回路全体に各出力端子名(フォワードトレースの場合は、各入力端子名)のインデックス段数を付す。分割処理部は、最大のインデックス段数(例えば、Xmaxとする)の[int(Xmax/N)×(N−1)+1]、[int(Xmax/N)×(N−1)]、[int(Xmax/N)×(N−2)+1]、[int(Xmax/N)×(N−2)]、[int(Xmax/N)×(N−3)+1]、[int(Xmax/N)×(N−3)]、・・・、[int(Xmax/N)+1および[int(Xmax/N)]を求める。
【0039】
図19に示すように、分割処理部は、出力端子131から[int(Xmax/N)]のスキャンフリップフロップ132までバックトレースしてぶつかる回路部133a,133bまたは入力端子134と、[int(Xmax/N)]のスキャンフリップフロップ132からフォワードトレースしてぶつかる回路部133b,133aまたは出力端子135と、を一つのグループとする。分割処理部は、[int(Xmax/N)+1]のスキャンフリップフロップ136から[int(Xmax/N)×2]のスキャンフリップフロップ137までバックトレースしてぶつかる回路部133b,138a,138bまたは入力端子134,139,140と、[int(Xmax/N)×2]のスキャンフリップフロップ137から[int(Xmax/N)+1]のスキャンフリップフロップ136までフォワードトレースしてぶつかる回路部138b,138a,133bまたは出力端子141,142,135と、を一つのグループとする。間のグループについては省略するが、分割処理部は、[int(Xmax/N)×(N−2)+1]のスキャンフリップフロップ143から[int(Xmax/N)×(N−1)]のスキャンフリップフロップ144までバックトレースしてぶつかる回路部145a,145b,145cまたは入力端子146,147,148と、[int(Xmax/N)×(N−1)]のスキャンフリップフロップ144から[int(Xmax/N)×(N−2)+1]のスキャンフリップフロップ143までフォワードトレースしてぶつかる回路部145c,145b,145aまたは出力端子149,150,151と、を一つのグループとする。分割処理部は、[int(Xmax/N)×(N−1)+1]のスキャンフリップフロップ152から入力端子153までバックトレースしてぶつかる回路部145c,154または入力端子148と、入力端子153から[int(Xmax/N)×(N−1)+1]のスキャンフリップフロップ152までフォワードトレースしてぶつかる回路部154,145cまたは出力端子155,149と、を一つのグループとする。分割の仕方の第3の例は、例えば分割処理部C53において行われる処理である。
【0040】
上述した<1>〜<3>の各分割の仕方は、フィードバックを有する回路に対しても同様に適用できる。一例として、図20および図21に示す回路に対して上述した分割の仕方<1>を適用した場合について説明する。
【0041】
図20および図21は、実施例にかかる分割の仕方の第1の例によりインデックスを付した一例を示す回路図である。図20に示す回路161と図21に示す回路162は、図中の(1)〜(3)で接続されている。インデックスの表記において、「Z3:0」は、Z0、Z1、Z2およびZ3の出力端子のいずれかに関係することを表している。また、「[3:0]」という表記は、独立して4本の配線があることを表している。
【0042】
図22および図23は、図20および図21に示す回路に対する2分割の候補の一例を示す図表である。図22および図23に示す図表163,164のように、2分割の場合、31個のグループ分けのケースがある。この中から、分割処理部は、仮のグループの分割の仕方<1>に従ってケース13を選択する。
【0043】
図24は、図20および図21に示す回路におけるスキャンチェーンの一例を示す回路図である。図24において、太い実線は、グループ#1の領域におけるスキャンチェーン165であり、太い点線は、グループ#2の領域におけるスキャンチェーン166である。図20および図21に示す回路161,162には36個のスキャンフリップフロップが含まれているので、図24に示すように、グループ#1およびグループ#2のいずれも、9個のスキャンフリップフロップが削減された状態で試験を行うことができる。
【0044】
・複数のスキャンチェーンに接続可能なスキャンフリップフロップの構成<1>
図25は、実施例にかかるスキャンフリップフロップの構成の第1の例を示す回路図である。図25に示すように、集積回路であるスキャンフリップフロップ171は、第1のアンド回路172、第2のアンド回路173、・・・、第Nのアンド回路174、オア回路175、ノア回路176、セレクタ177およびフリップフロップ178を備えている。第1のアンド回路172は、第1のスキャンイン端子ScanIn1に入力される試験データと第1のスキャンモード端子ScanMode1に入力される選択信号とのアンド論理を出力する。第2のアンド回路173は、第2のスキャンイン端子ScanIn2に入力される試験データと第2のスキャンモード端子ScanMode2に入力される選択信号とのアンド論理を出力する。第Nのアンド回路174は、第Nのスキャンイン端子ScanInNに入力される試験データと第Nのスキャンモード端子ScanModeNに入力される選択信号とのアンド論理を出力する。オア回路175は、第1のアンド回路172、第2のアンド回路173および第Nのアンド回路174の各出力のオア論理を出力する。ノア回路176は、第1のスキャンモード端子ScanMode1、第2のスキャンモード端子ScanMode2および第Nのスキャンモード端子ScanModeNにそれぞれ入力される選択信号のノア論理を出力する。セレクタ177は、ノア回路176の出力に基づいて、データ端子Dataに通常動作時に入力されるデータまたはオア回路175の出力を選択して出力する。フリップフロップ178には、セレクタ177の出力が入力する。全てのスキャンモード端子に0が入力すると、ノア回路176の出力が1となるので、セレクタ177は、データ端子Dataに入力されるデータをフリップフロップ178へ出力する。いずれか一つのスキャンモード端子の入力が1であり、その他のスキャンモード端子の入力がすべて0である場合、ノア回路176の出力が0となる。従って、セレクタ177は、入力が1であるスキャンモード端子に対応するスキャンイン端子の入力データをフリップフロップ178へ出力する。スキャンフリップフロップ171は、モジュール化されていてもよい。
【0045】
・複数のスキャンチェーンに接続可能なスキャンフリップフロップの構成<2>
図26は、実施例にかかるスキャンフリップフロップの構成の第2の例を示す回路図である。図26に示すように、集積回路であるスキャンフリップフロップ181は、第1のセレクタ182、第2のセレクタ183、・・・、第Nのセレクタ184およびフリップフロップ185を備えている。第1のセレクタ182は、第1のスキャンモード端子ScanMode1に入力される選択信号に基づいて、データ端子Dataに通常動作時に入力されるデータまたは第1のスキャンイン端子ScanIn1に入力される試験データを選択して出力する。第2のセレクタ183は、第2のスキャンモード端子ScanMode2に入力される選択信号に基づいて、第1のセレクタ182の出力または第2のスキャンイン端子ScanIn2に入力される試験データを選択して出力する。第Nのセレクタ184は、第Nのスキャンモード端子ScanModeNに入力される選択信号に基づいて、図示省略する第(N−1)のセレクタの出力または第Nのスキャンイン端子ScanInNに入力される試験データを選択して出力する。フリップフロップ185には、第Nのセレクタ184の出力が入力する。各スキャンモード端子に入力される選択信号の組み合わせによって、各セレクタ182,183,184が切り替わる。最終的に、第Nのセレクタ184は、データ端子Dataへの入力データ、第1のスキャンイン端子ScanIn1への入力データ、第2のスキャンイン端子ScanIn2への入力データまたは第Nのスキャンイン端子ScanInNへの入力データをフリップフロップ185へ出力する。スキャンフリップフロップ181は、モジュール化されていてもよい。
【0046】
・スキャンチェーンの生成方法
図27は、実施例にかかるスキャンチェーンの生成方法を示すフローチャートである。図27に示すように、スキャンチェーンを生成する処理が開始されると、まず、集積回路の回路データとクロック情報が入力される(ステップS11)。次いで、回路データとクロック情報に基づいてクロックドメインが解析され、回路内の各フリップフロップにクロックがマッピングされる(ステップS12)。次いで、クロックドメインの解析結果に基づいて、同じクロックで動作するフリップフロップごとに仮のグループが生成される(ステップS13)。次いで、仮のグループごとに仮のスキャンチェーンが生成される(ステップS14)。次いで、各仮のグループに対して電力解析用のテストパターンが生成される(ステップS15)。次いで、仮のグループごとに電力解析用のテストパターンを用いて仮のグループを動作させたときの消費電力が解析される(ステップS16)。次いで、仮のグループごとに仮のグループを動作させたときの消費電力が電力許容値を超えるか否かを判定する(ステップS17)。仮のグループを動作させたときの消費電力が電力許容値を超える場合(ステップS17:Yes)、上述した仮のグループの分割の仕方の<1>、<2>または<3>などの種々の分割の仕方に従って、仮のグループに含まれる複数のフリップフロップが複数のグループに分割される(ステップS18)。<1>、<2>または<3>などの種々の分割の仕方のそれぞれに対して、例えば後述するような2通りの手順が行われる。種々の分割の仕方が実行されると、複数の分割結果が得られる。複数の分割結果の中から、分割により新たに生成されたグループの数(分割数)が例えば一番少ないものが選択される。複数の分割結果の中に、分割数が一番少ないものが複数あるときには、その中から、仮のグループの分割により新たに生成された複数のグループに重複して含まれるスキャンフリップフロップの数が一番少ないものが選択される(ステップS19)。次いで、複数のグループに重複して含まれるスキャンフリップフロップが、複数のスキャンチェーンに切り替えによって接続可能な構成のスキャンフリップフロップに変更される(ステップS20)。次いで、ステップS14に戻り、グループごとに仮のスキャンチェーンが生成される(ステップS14)。そして、ステップS17で消費電力が電力許容値を超えないようになるまで、ステップS14〜ステップS20が繰り返される。ステップS17で消費電力が電力許容値を超えないようになったら(ステップS17:No)、そのときのグループを最終的なグループとし、その最終的なグループに対してスキャンチェーンが生成される(ステップS21)。ステップS21でスキャンチェーンが生成されたら、スキャンチェーンを生成する一連の処理が終了する。
【0047】
・分割の手順<1>
図28は、実施例にかかる分割の手順の第1の例を示すフローチャートである。第1の例は、全てのグループの消費電力が電力許容値を超えないようになるまで分割数を増やしながら回路全体を分割し直す方法である。図28に示すように、仮のグループを分割する処理が開始されると、まず、例えば前記ステップS16の解析によって得られた仮のグループの消費電力が電力許容値の何倍であるか、ということに基づいて、仮のグループの分割数Nが決められる。例えば、仮のグループの消費電力が電力許容値の2倍を超え、かつ3倍未満であれば、分割数Nは3である。仮のグループの消費電力が電力許容値の3倍を超え、かつ4倍未満であれば、分割数Nは4である。このように、電力許容値に対する仮のグループの消費電力の倍率の小数点以下を切り上げた整数倍が分割数となる。分割数Nが決まると、仮のグループに対してN分割が実施される(ステップS31)。次いで、分割されてできた各グループに対して、前記ステップS14〜ステップS16と同様にして消費電力が解析される(ステップS32)。次いで、各グループの消費電力が電力許容値を超えるか否かが判定される(ステップS33)。一つ以上のグループの消費電力が電力許容値を超える場合(ステップS33:Yes)、分割数Nが1大きい値にされて(ステップS34)、ステップS31からの処理が繰り返される。ステップS33で、消費電力が電力許容値を超えるグループがなくなると(ステップS33:No)、分割の手順の一連の処理が終了する。
【0048】
・分割の手順<2>
図29は、実施例にかかる分割の手順の第2の例を示すフローチャートである。第2の例は、消費電力が電力許容値を超えないグループについてはそのままとし、消費電力が電力許容値を超えるグループを分割する方法である。図29に示すように、仮のグループを分割する処理が開始されると、まず、上述した分割の手順<1>のステップS31〜ステップS33と同様に、仮のグループの分割数Nが決められ、仮のグループに対してN分割が実施される(ステップS41)。分割数Nの決め方は、分割の手順<1>の場合と同様である。次いで、消費電力が解析される(ステップS42)。次いで、各グループの消費電力が電力許容値を超えるか否かが判定される(ステップS43)。ステップS43で、消費電力が電力許容値を超えるグループがない場合(ステップS43:No)、分割の手順の一連の処理が終了する。消費電力が電力許容値を超えるグループがある場合(ステップS43:Yes)、消費電力が電力許容値を超えるグループに対してM分割が実施される(ステップS44)。分割数Mの決め方は、分割の手順<1>における分割数Nの決め方と同様である。次いで、分割の手順<1>のステップS32〜ステップS33と同様に、M分割されてできた各グループの消費電力が解析される(ステップS45)。次いで、各グループの消費電力が電力許容値を超えるか否かが判定される(ステップS46)。ステップS46で、消費電力が電力許容値を超えるグループがない場合(ステップS46:No)、分割の手順の一連の処理が終了する。消費電力が電力許容値を超えるグループがある場合(ステップS46:Yes)、ステップS44〜ステップS46の処理が繰り返される。
【0049】
・集積回路の設計手順
図30は、集積回路の設計処理手順の一例を示すフローチャートである。図30に示すように、まず、RTL(Register Transfer Level)で記述されたデータが入力される(ステップS51)。RTLデータには、Register−To−Registerのデータの流れと、その間の論理が記述されている。RTLデータには、実際の回路を構成するゲートやフリップフロップなどの物理的な実体がない。次いで、論理合成処理が行われる(ステップS52)。論理合成処理を実施することによって、RTLの記述が、物理的な対象を有するゲートレベルのネットリストにマッピングされ、ネットリストが生成される(ステップS53)。次いで、テスト容易化設計(Design For Test)が行われる(ステップS54)。テスト容易化設計では、例えば図27〜図29に示す手順に従ってスキャンチェーンが生成される。次いで、レイアウト処理や配置配線処理が実施される(ステップS55)。
【0050】
実施例2によれば、集積回路が実際に動作するときのロジックコーンを考慮して、複数のフリップフロップが、複数のフリップフロップのうちの一部のフリップフロップが複数のグループに含まれるように、分割される。あるいは、複数のフリップフロップが、前後のグループで一部重なるように分割される。このように分割されることによって、各グループは、他のグループから受ける影響や他のグループへ及ぼす影響を考慮して動作することになる。従って、実施例1と同様に、分割されたグループ間の試験を行えるようにスキャンチェーンを生成することができる。また、従来、ブロックを分割する際に行っていたスキャンクロックの変更が不要となる。また、スキャンフリップフロップが複数のスキャンイン端子と複数のスキャンモード端子を有するので、スキャンモード端子への選択信号を制御することによって、複数のグループに重複して含まれるスキャンフリップフロップを複数のスキャンチェーンに切り替えて接続することができる。
【0051】
なお、上述したスキャンチェーンの生成方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な伝送媒体であってもよい。
【0052】
また、上述した試験装置は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けIC(ASIC)やFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。具体的には、例えば、上述した試験装置の入力部11、仮生成部12、解析部13、分割部14および生成部15をHDL記述によって機能定義し、そのHDL記述を論理合成してASICやPLDに与えることにより、試験装置を製造することができる。
【0053】
上述した実施例1、2に関し、さらに以下の付記を開示する。
【0054】
(付記1)集積回路の回路データを入力する入力ステップと、該回路データに基づいて複数のフリップフロップを含む仮のスキャンチェーンを生成する仮生成ステップと、該仮のスキャンチェーンを動作させたときの消費電力が許容値を超えるか否かを解析する解析ステップと、該仮のスキャンチェーンを動作させたときの消費電力が許容値を超える場合に、該集積回路が実際に動作するときの信号の伝達経路に基づいて、該仮のスキャンチェーンに含まれる複数のフリップフロップを、該複数のフリップフロップのうちの一部のフリップフロップが複数のグループに含まれるように、複数のグループに分割する分割ステップと、該複数のグループに含まれるフリップフロップを該複数のグループのそれぞれに生成されるスキャンチェーンに接続して該グループごとにスキャンチェーンを生成する生成ステップと、を含むことを特徴とするスキャンチェーンの生成方法。
【0055】
(付記2)前記分割ステップでは、前記集積回路が実際に動作するときに前記集積回路の各出力端子から出力される信号を該出力端子から前記集積回路の入力端子まで遡って辿るときに該信号が経由する前記フリップフロップをまとめて一つの単位とし、該単位を該出力端子ごとに求め、複数の該単位を組み合わせて前記複数のグループを生成することを特徴とする付記1に記載のスキャンチェーンの生成方法。
【0056】
(付記3)前記分割ステップでは、前記集積回路が実際に動作するときに前記集積回路の各入力端子から入力される信号を該入力端子から前記集積回路の出力端子まで辿るときに該信号が経由する前記フリップフロップをまとめて一つの単位とし、該単位を該出力端子ごとに求め、複数の該単位を組み合わせて前記複数のグループを生成することを特徴とする付記1に記載のスキャンチェーンの生成方法。
【0057】
(付記4)前記分割ステップでは、前記集積回路が実際に動作するときに前記集積回路の各出力端子から出力される信号を該出力端子から前記集積回路の入力端子まで遡って辿るときに該信号が経由する前記フリップフロップの個数を数え、該個数の最大値jが4以上であるときに3以上[j−1]以下の値kに対して、該個数がk個までのグループと、該個数が[k−1]個以上のグループと、を生成することを特徴とする付記1に記載のスキャンチェーンの生成方法。
【0058】
(付記5)コンピュータを、メモリから集積回路の回路データを読み出して演算処理部に入力する入力部、該演算処理部で該回路データを演算処理して複数のフリップフロップを含む仮のスキャンチェーンを生成する仮生成部、該演算処理部で該回路データを演算処理して該仮のスキャンチェーンを動作させたときの消費電力が許容値を超えるか否かを解析する解析部、該仮のスキャンチェーンを動作させたときの消費電力が許容値を超える場合に、該演算処理部で該回路データを演算処理して、前記集積回路が実際に動作するときの信号の伝達経路に基づいて、該仮のスキャンチェーンに含まれる複数のフリップフロップを、該複数のフリップフロップのうちの一部のフリップフロップが複数のグループに含まれるように、複数のグループに分割する分割部、該演算処理部で該回路データを演算処理して該複数のグループに含まれるフリップフロップを該複数のグループのそれぞれに生成されるスキャンチェーンに接続して該グループごとにスキャンチェーンを生成する生成部、として機能させることを特徴とするスキャンチェーンの生成プログラム。
【0059】
(付記6)前記分割部は、前記集積回路が実際に動作するときに前記集積回路の各出力端子から出力される信号を該出力端子から前記集積回路の入力端子まで遡って辿るときに該信号が経由する前記フリップフロップをまとめて一つの単位とし、該単位を該出力端子ごとに求め、複数の該単位を組み合わせて前記複数のグループを生成することを特徴とする付記5に記載のスキャンチェーンの生成プログラム。
【0060】
(付記7)前記分割部は、前記集積回路が実際に動作するときに前記集積回路の各入力端子から入力される信号を該入力端子から前記集積回路の出力端子まで辿るときに該信号が経由する前記フリップフロップをまとめて一つの単位とし、該単位を該出力端子ごとに求め、複数の該単位を組み合わせて前記複数のグループを生成することを特徴とする付記5に記載のスキャンチェーンの生成プログラム。
【0061】
(付記8)前記分割部は、前記集積回路が実際に動作するときに前記集積回路の各出力端子から出力される信号を該出力端子から前記集積回路の入力端子まで遡って辿るときに該信号が経由する前記フリップフロップの個数を数え、該個数の最大値jが4以上であるときに3以上[j−1]以下の値kに対して、該個数がk個までのグループと、該個数が[k−1]個以上のグループと、を生成することを特徴とする付記5に記載のスキャンチェーンの生成プログラム。
【0062】
(付記9)集積回路の回路データを入力する入力部と、前記回路データに基づいて複数のフリップフロップを含む仮のスキャンチェーンを生成する仮生成部と、該仮のスキャンチェーンを動作させたときの消費電力が許容値を超えるか否かを解析する解析部と、該仮のスキャンチェーンを動作させたときの消費電力が許容値を超える場合に、前記集積回路が実際に動作するときの信号の伝達経路に基づいて、該仮のスキャンチェーンに含まれる複数のフリップフロップを、該複数のフリップフロップのうちの一部のフリップフロップが複数のグループに含まれるように、複数のグループに分割する分割部と、該複数のグループに含まれるフリップフロップを該複数のグループのそれぞれに生成されるスキャンチェーンに接続して該グループごとにスキャンチェーンを生成する生成部と、を備えることを特徴とする集積回路の試験装置。
【0063】
(付記10)前記分割部は、前記集積回路が実際に動作するときに前記集積回路の各出力端子から出力される信号を該出力端子から前記集積回路の入力端子まで遡って辿るときに該信号が経由する前記フリップフロップをまとめて一つの単位とし、該単位を該出力端子ごとに求め、複数の該単位を組み合わせて前記複数のグループを生成することを特徴とする付記9に記載の集積回路の試験装置。
【0064】
(付記11)前記分割部は、前記集積回路が実際に動作するときに前記集積回路の各入力端子から入力される信号を該入力端子から前記集積回路の出力端子まで辿るときに該信号が経由する前記フリップフロップをまとめて一つの単位とし、該単位を該出力端子ごとに求め、複数の該単位を組み合わせて前記複数のグループを生成することを特徴とする付記9に記載の集積回路の試験装置。
【0065】
(付記12)前記分割部は、前記集積回路が実際に動作するときに前記集積回路の各出力端子から出力される信号を該出力端子から前記集積回路の入力端子まで遡って辿るときに該信号が経由する前記フリップフロップの個数を数え、該個数の最大値jが4以上であるときに3以上[j−1]以下の値kに対して、該個数がk個までのグループと、該個数が[k−1]個以上のグループと、を生成することを特徴とする付記9に記載の集積回路の試験装置。
【0066】
(付記13)通常動作時にデータが入力されるデータ端子と、試験時に試験データが入力される複数のスキャンイン端子と、選択信号が入力される複数のスキャンモード端子と、該スキャンモード端子に入力される選択信号に基づいて、該データ端子に入力されるデータ、または該複数のスキャンイン端子に入力される試験データのうちのいずれか一つの試験データを選択するセレクタと、該セレクタの出力データが入力されるフリップフロップと、を備えることを特徴とする集積回路。
【0067】
(付記14)前記データ端子、前記複数のスキャンイン端子、前記複数のスキャンモード端子、前記セレクタおよび前記フリップフロップを備えたモジュールであることを特徴とする付記13に記載の集積回路。
【符号の説明】
【0068】
11 入力部
12 仮生成部
13 解析部
14 分割部
15 生成部
【特許請求の範囲】
【請求項1】
集積回路の回路データを入力する入力ステップと、
該回路データに基づいて複数のフリップフロップを含む仮のスキャンチェーンを生成する仮生成ステップと、
該仮のスキャンチェーンを動作させたときの消費電力が許容値を超えるか否かを解析する解析ステップと、
該仮のスキャンチェーンを動作させたときの消費電力が許容値を超える場合に、該集積回路が実際に動作するときの信号の伝達経路に基づいて、該仮のスキャンチェーンに含まれる複数のフリップフロップを、該複数のフリップフロップのうちの一部のフリップフロップが複数のグループに含まれるように、複数のグループに分割する分割ステップと、
該複数のグループに含まれるフリップフロップを該複数のグループのそれぞれに生成されるスキャンチェーンに接続して該グループごとにスキャンチェーンを生成する生成ステップと、
を含むことを特徴とするスキャンチェーンの生成方法。
【請求項2】
前記分割ステップでは、前記集積回路が実際に動作するときに前記集積回路の各出力端子から出力される信号を該出力端子から前記集積回路の入力端子まで遡って辿るときに該信号が経由する前記フリップフロップをまとめて一つの単位とし、該単位を該出力端子ごとに求め、複数の該単位を組み合わせて前記複数のグループを生成することを特徴とする請求項1に記載のスキャンチェーンの生成方法。
【請求項3】
前記分割ステップでは、前記集積回路が実際に動作するときに前記集積回路の各入力端子から入力される信号を該入力端子から前記集積回路の出力端子まで辿るときに該信号が経由する前記フリップフロップをまとめて一つの単位とし、該単位を該出力端子ごとに求め、複数の該単位を組み合わせて前記複数のグループを生成することを特徴とする請求項1に記載のスキャンチェーンの生成方法。
【請求項4】
コンピュータを、
メモリから集積回路の回路データを読み出して演算処理部に入力する入力部、
該演算処理部で該回路データを演算処理して複数のフリップフロップを含む仮のスキャンチェーンを生成する仮生成部、
該演算処理部で該回路データを演算処理して該仮のスキャンチェーンを動作させたときの消費電力が許容値を超えるか否かを解析する解析部、
該仮のスキャンチェーンを動作させたときの消費電力が許容値を超える場合に、該演算処理部で該回路データを演算処理して、前記集積回路が実際に動作するときの信号の伝達経路に基づいて、該仮のスキャンチェーンに含まれる複数のフリップフロップを、該複数のフリップフロップのうちの一部のフリップフロップが複数のグループに含まれるように、複数のグループに分割する分割部、
該演算処理部で該回路データを演算処理して該複数のグループに含まれるフリップフロップを該複数のグループのそれぞれに生成されるスキャンチェーンに接続して該グループごとにスキャンチェーンを生成する生成部、
として機能させることを特徴とするスキャンチェーンの生成プログラム。
【請求項5】
通常動作時にデータが入力されるデータ端子と、
試験時に試験データが入力される複数のスキャンイン端子と、
選択信号が入力される複数のスキャンモード端子と、
該スキャンモード端子に入力される選択信号に基づいて、該データ端子に入力されるデータ、または該複数のスキャンイン端子に入力される試験データのうちのいずれか一つの試験データを選択するセレクタと、
該セレクタの出力データが入力されるフリップフロップと、
を備えることを特徴とする集積回路。
【請求項1】
集積回路の回路データを入力する入力ステップと、
該回路データに基づいて複数のフリップフロップを含む仮のスキャンチェーンを生成する仮生成ステップと、
該仮のスキャンチェーンを動作させたときの消費電力が許容値を超えるか否かを解析する解析ステップと、
該仮のスキャンチェーンを動作させたときの消費電力が許容値を超える場合に、該集積回路が実際に動作するときの信号の伝達経路に基づいて、該仮のスキャンチェーンに含まれる複数のフリップフロップを、該複数のフリップフロップのうちの一部のフリップフロップが複数のグループに含まれるように、複数のグループに分割する分割ステップと、
該複数のグループに含まれるフリップフロップを該複数のグループのそれぞれに生成されるスキャンチェーンに接続して該グループごとにスキャンチェーンを生成する生成ステップと、
を含むことを特徴とするスキャンチェーンの生成方法。
【請求項2】
前記分割ステップでは、前記集積回路が実際に動作するときに前記集積回路の各出力端子から出力される信号を該出力端子から前記集積回路の入力端子まで遡って辿るときに該信号が経由する前記フリップフロップをまとめて一つの単位とし、該単位を該出力端子ごとに求め、複数の該単位を組み合わせて前記複数のグループを生成することを特徴とする請求項1に記載のスキャンチェーンの生成方法。
【請求項3】
前記分割ステップでは、前記集積回路が実際に動作するときに前記集積回路の各入力端子から入力される信号を該入力端子から前記集積回路の出力端子まで辿るときに該信号が経由する前記フリップフロップをまとめて一つの単位とし、該単位を該出力端子ごとに求め、複数の該単位を組み合わせて前記複数のグループを生成することを特徴とする請求項1に記載のスキャンチェーンの生成方法。
【請求項4】
コンピュータを、
メモリから集積回路の回路データを読み出して演算処理部に入力する入力部、
該演算処理部で該回路データを演算処理して複数のフリップフロップを含む仮のスキャンチェーンを生成する仮生成部、
該演算処理部で該回路データを演算処理して該仮のスキャンチェーンを動作させたときの消費電力が許容値を超えるか否かを解析する解析部、
該仮のスキャンチェーンを動作させたときの消費電力が許容値を超える場合に、該演算処理部で該回路データを演算処理して、前記集積回路が実際に動作するときの信号の伝達経路に基づいて、該仮のスキャンチェーンに含まれる複数のフリップフロップを、該複数のフリップフロップのうちの一部のフリップフロップが複数のグループに含まれるように、複数のグループに分割する分割部、
該演算処理部で該回路データを演算処理して該複数のグループに含まれるフリップフロップを該複数のグループのそれぞれに生成されるスキャンチェーンに接続して該グループごとにスキャンチェーンを生成する生成部、
として機能させることを特徴とするスキャンチェーンの生成プログラム。
【請求項5】
通常動作時にデータが入力されるデータ端子と、
試験時に試験データが入力される複数のスキャンイン端子と、
選択信号が入力される複数のスキャンモード端子と、
該スキャンモード端子に入力される選択信号に基づいて、該データ端子に入力されるデータ、または該複数のスキャンイン端子に入力される試験データのうちのいずれか一つの試験データを選択するセレクタと、
該セレクタの出力データが入力されるフリップフロップと、
を備えることを特徴とする集積回路。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【公開番号】特開2011−13159(P2011−13159A)
【公開日】平成23年1月20日(2011.1.20)
【国際特許分類】
【出願番号】特願2009−159208(P2009−159208)
【出願日】平成21年7月3日(2009.7.3)
【出願人】(308014341)富士通セミコンダクター株式会社 (2,507)
【Fターム(参考)】
【公開日】平成23年1月20日(2011.1.20)
【国際特許分類】
【出願日】平成21年7月3日(2009.7.3)
【出願人】(308014341)富士通セミコンダクター株式会社 (2,507)
【Fターム(参考)】
[ Back to top ]