以下に添付図面を参照して、本発明にかかるテストパターン生成方法、テストパターン生成プログラム、およびテストパターン生成装置の実施の形態を詳細に説明する。
図1は、本発明にかかるテストパターン生成装置による一動作例を示す説明図である。テストパターン生成装置100は、半導体集積回路の設計時におけるテストパターン生成を支援するコンピュータである。本実施の形態における対象回路、複数のブロック、分割回路などは、実際の回路ではなく、コンピュータ上における回路モデルであり、ネットリストなどの回路情報が示す回路である。
従来、テストパターン生成の対象回路に含まれる複数のブロックを分割して複数のコンピュータに割り当てて並列処理によってシミュレーションを行う場合がある。各コンピュータの負荷が均等であると、計算時間を短縮することができる。近年、I/O(Input/Output)部、RAM(Random Access Memory)などの規模がCPU(Central Processing Unit)の規模に対して大きくなっており、場合によっては同程度の規模を持つこともある。そのため、ゲート数により複数のブロックを分割する場合、例えば第1の分割回路にはI/O部のみが割り当てられ、第2の分割回路にはCPUのみが割り当てられるような、機能や構成が同じようなブロックが特定の分割回路に偏在する場合がある。そのため、分割回路間において特性が不均等になるという問題点がある。
例えば、特定の分割回路に機能や構成が同じブロックが偏在する場合、クロックドメインなどが分割回路間で異なる可能性がある。複数の分割回路を並列処理しても、分割回路に含まれるブロックのクロックドメイン等の特性が異なると動作する回路部分も異なってくるため、分割回路間でシミュレーション等の処理時間にも差がつくことなる。従って最も処理の遅い分割回路の終了待ちによる並列処理全体の効率低下が発生することになる。
そこで、本実施の形態では、テストパターン生成装置100は、規模および機能に関する特徴量の近さに基づきブロックをグループ化し、分割回路の分割数とグループのブロック数の比率に基づきグループの各ブロックを分割回路に割り当てる。これにより、分割回路間の特性の均等化を図ることができる。
まず、テストパターン生成装置100は、複数のブロック103の各々について、回路情報101に基づくブロック103のサイズに関する第1特徴量と、回路情報101に基づくブロック103の機能に関する第2特徴量と、を取得する。複数のブロック103は、テストパターン生成の対象回路102に含まれる。回路情報101は、対象回路102のゲートおよびゲート間の接続関係を示す。回路情報101は、例えば、ネットリストである。回路情報は、Verilog HDL(Hardware Description Language)やVHDLなどによって、もしくはそれら設計言語で記述された論理を特定のCADシステム用の回路データベースに展開した、ゲートレベルで記述される。
第1特徴量は、例えば、ネット数である。ゲートの数とゲートの端子の数とを合わせた数をネット数と称する。そしてゲートの入力端子を入力ネット、ゲートの出力端子を出力ネット、または単にネットと称する。第2特徴量は、例えば、所定の種類のゲートの数である。所定の種類としては、例えば、スキャンフリップフロップ数である。フリップフロップはFF(Flip Flop)とも記載する。
取得形式としては、テストパターン生成装置100は、例えば、回路情報101に基づいて、ブロック103から第1特徴量と第2特徴量を抽出することによって第1特徴量と第2特徴量を取得してもよい。また、テストパターン生成装置100は、例えば、記憶装置から第1特徴量と第2特徴量を読み出すことにより第1特徴量と第2特徴量を取得してもよいし、ネットワークを介して他の装置から第1特徴量と第2特徴量を取得してもよい。
図1の例では、対象回路102には、ブロック103−1〜8まである。ブロック103−1とブロック103−2とは例えばI/O部である。ブロック103−3とブロック103−4とブロック103−6とブロック103−7はコアである。ブロック103−5とブロック103−8はRAMである。ブロック103−1のネット数は「10000」であり、スキャンFF数は「100」である。
つぎに、テストパターン生成装置100は、取得した第1特徴量が第1所定範囲内であり、かつ取得した第2特徴量が第2所定範囲内であるブロック103が同一のグループ104となるように、複数のブロック103を複数のグループ104に分類する。第1所定範囲と第2所定範囲は、設計者やテストパターン作成者などの利用者によって予め定められる。図1の例では、グループ104−1にはブロック103−3と、ブロック103−4と、ブロック103−6と、ブロック103−7と、が分類される。グループ104−2にはブロック103−1と、ブロック103−2と、が分類される。グループ104−3には、ブロック103−5と、ブロック103−8と、が分類される。
そして、テストパターン生成装置100は、複数のグループ104の各々について、グループ104に含まれるブロック103の数と分割数との比率に基づいて、グループ104に含まれるブロック103の各々を、分割数の複数の分割回路105のいずれかに割り当てる。分割数は、複数のブロック103を分割する数である。分割数は、並列化可能なコンピュータの数などに基づき利用者によって予め定められる。
グループ104−1はブロック103の数が4であり、分割数が4である。そのため、テストパターン生成装置100は、分割回路105の各々にグループ104−1に含まれるブロック103を1つずつ割り当てる。グループ104−2はブロック103の数が2であり、分割数が4である。そのため、テストパターン生成装置100は、分割回路105−1と、分割回路105−3とにブロック103を1つずつ割り当てる。グループ104−3はブロック103の数が2であり、分割数が4である。テストパターン生成装置100は、例えばネット数に基づいて分割回路105−2と分割回路105−4とにブロック103を1つずつ割り当てる。
このように、機能や規模が近いブロック103同士をグループ化し、グループ104に含まれるブロック103の数と分割数との比率によってブロック103を割り当てる。これにより、分割回路105間の特性の均等化を図ることができる。
(テストパターン生成装置100のハードウェア構成例)
図2は、テストパターン生成装置のハードウェア構成例を示すブロック図である。図2において、テストパターン生成装置100は、CPU201と、ROM(Read Only Memory)202と、RAM203と、ディスクドライブ204と、ディスク205と、を有する。テストパターン生成装置100は、I/F(Inter/Face)206と、入力装置207と、出力装置208と、を有する。また、各部はバス200によってそれぞれ接続される。
ここで、CPU201は、テストパターン生成装置100の全体の制御を司る。ROM202は、ブートプログラムなどのプログラムを記憶する。RAM203は、CPU201のワークエリアとして使用される。ディスクドライブ204は、CPU201の制御にしたがってディスク205に対するデータのリード/ライトを制御する。ディスク205は、ディスクドライブ204の制御で書き込まれたデータを記憶する。ディスク205としては、磁気ディスク、光ディスクなどが挙げられる。
I/F206は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク209に接続され、このネットワーク209を介して他の装置に接続される。そして、I/F206は、ネットワーク209と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F206には、例えばモデムやLANアダプタなどを採用することができる。
入力装置207は、キーボード、マウス、タッチパネルなど利用者の操作により、各種データの入力を行うインターフェースである。また、入力装置207は、カメラから画像や動画を取り込むこともできる。また、入力装置207は、マイクから音声を取り込むこともできる。出力装置208は、CPU201の指示により、データを出力するインターフェースである。出力装置208には、ディスプレイやプリンタなどが挙げられる。
(テストパターン生成装置100の機能的構成例)
図3は、テストパターン生成装置の機能的構成例を示すブロック図である。テストパターン生成装置100は、取得部301と、クロックパストレース部302と、データパストレース部303と、取得部304と、分類部305と、割当部306と、故障カウント部307と、印加順序決定部308と、対象外化決定部309と、を有する。取得部301から対象外化決定部309までの制御部の処理は、例えば、図2に示すCPU201がアクセス可能なROM202、RAM203、ディスク205などの記憶装置に記憶されたプログラムにコーディングされる。そして、CPU201が記憶装置から該プログラムを読み出して、プログラムにコーディングされた処理を実行する。これにより、制御部の処理が実現される。また、制御部の処理結果は、例えば、RAM203、ROM202、ディスク205などの記憶装置に記憶される。
各制御部については、冗長ディレーゲート削除と、ブロック分割と、クロックマージと、の3つの処理に分けて説明する。従来技術では、対象回路をゲートレベルでモデル化する際に、ユニットディレー方式でのレース防止のためにマクロと呼ばれる部品レベルで冗長なディレーゲートを挿入しておく場合がある。この場合、本来はレースが存在しないパスにも余分なディレーゲートが挿入されることになり回路モデルが肥大化するという問題がある。そこで、本実施の形態では、制御部は、冗長ディレーゲート削除の処理を行う。また、従来技術では、テストパターン生成のために対象回路に含まれる複数のブロックをゲート数などの回路の規模に基づき分割すると、特定の分割回路に特定のブロックが偏在する場合がある。この場合、分割回路間の特性が不均等になるという問題点がある。そこで、本実施の形態では、制御部は、ブロック分割の処理を行う。さらに、従来技術では、複数のクロックが存在する場合でもスキャン後に印加するクロックを1発に限定する場合がある。この場合、試験されていない回路に対しては改めてスキャンとクロック印加を行う必要がありテストパターンが増加するという問題がある。そこで、本実施の形態では、制御部は、クロックマージの処理を行う。
<冗長ディレーゲート削除>
まず、冗長ディレーゲートを削除する例について説明する。従来、回路モデルをゲートモデルで作成する際に、作成方法に起因して回路モデルが大きくなる場合がある。テストパターンを生成する際には、回路モデルとしてはゲートモデルを用い、シミュレーション方式としてはユニットディレー方式を用いることがある。ゲートモデルにおいて発生したレースは解消しなければならない。
ゲートモデルにおけるレースの解消方法としては、レースが発生したデータパスにディレーゲートを挿入、送りFFのクロックパスにディレーゲートを挿入、受けFFのクロックパスのディレーゲートを削除などが挙げられる。クロックパスを修正すると他のパスへも影響があるため、データパスにディレーゲートを挿入する解消方法が実現容易である。
また、回路モデルの設計はマクロと呼ばれる部品を組み上げて行われる。従ってデータラインに使用されるマクロにディレーゲートを挿入しておき回路モデルを組み上げた際にレースが発生しないようすることが考えられる。そして特にデータパスの起点やデータパスの終点となるFFマクロの内部にディレーゲートが挿入される場合がある。
しかしながら、レースが発生しないようなデータパスにおいては余分なディレーゲートが挿入されることになる。また、特に近年の高速なプロセッサでのスキュー調整や微細化に伴うラインディレーの増加などにより実際の回路におけるディレーと、ユニットディレー方式のように単純にゲート段数で表したディレーと、の乖離が大きくなる。そのため、ゲートモデルでのレース解消のためのディレーゲート挿入による回路モデルが大きくなるという問題点がある。ユニットディレー方式であれば、回路モデルに含まれるゲートの数が多いほど、論理シミュレータによるシミュレーションに時間がかかる。
そこで、本実施の形態では、ゲート段数に基づいてレースが発生しないと判定されたFFマクロから冗長なディレーを削除する。これにより、回路モデルの肥大化の抑制を図る。
まず、取得部301は、テストパターン生成の対象回路のゲートおよびゲート間の接続関係を示す第1回路情報を取得する。第1回路情報はゲートレベルで記述されたネットリストである。第1回路情報は、例えば、回路情報341である。
つぎに、そして、クロックパストレース部302は、ブロックに含まれるFFにクロック信号を供給するクロック端子からFFまでの間にあるクロックパス上のゲートの数を特定する。データパストレース部303は、FFからフォワード方向にあるFFまでの間のデータパス上のゲート数を導出する。データパストレース部303は、導出したゲートの数と、クロックパストレース部302によって導出されたゲートの数と、の差分値を導出する。該FFは、第1回路情報が示す対象回路内のブロックに含まれるFFであって、FFマクロの一部である、該FFマクロは前記レース対策のためにマクロ内部においてデータパスとなり得るデータ入力側とデータ出力側に挿入された複数の冗長なディレーゲートを有する。データ入力側とは例えばFFが有するD端子であり、データ出力側とは例えばFFが有するQ端子である。また、データパストレース部303は、差分値に基づいてFFマクロ内部の冗長なディレーゲートを削除したFFマクロを含む対象回路のゲートおよびゲート間の接続関係を示す第2回路情報を生成する。ここでの第2回路情報は、例えば、回路情報342である。
また、データパストレース部303とは、FFから、バックワード方向にあるFFまでの間のデータパス上のゲート数を導出する。クロックパストレース部302は、ブロックに含まれるFFにクロック信号を供給するクロック端子からFFまでの間にあるクロックパス上のゲートの数を導出する。データパストレース部303は、導出したゲートの数と、クロックパストレース部302によって導出されたゲートの数と、の差分値を導出する。該FFは、第1回路情報が示す対象回路内のブロックに含まれるFFであって、FFマクロの一部である、該FFマクロは前記レース対策のためにマクロ内部においてデータパスとなり得るデータ入力側とデータ出力側との少なくともいずれかに挿入された複数の冗長なディレーゲートを有する。そして、データパストレース部303は、FFマクロ内部の冗長なディレーゲートを削除したFFマクロを含む対象回路のゲートおよびゲート間の接続関係を示す第2回路情報を生成する。ここでの第2回路情報は、例えば、回路情報342である。
クロックパストレース部302は、例えば、クロックドメインの各々について、トーナメント計算によるクロックパスごとのゲート段数の上限値とゲート段数の下限値を特定する。そして、データパストレース部303は、到達したFFマクロからデータパスのフォワードトレースを行う。または、データパストレース部303は、到達したFFマクロからデータパスのバックワードトレースを行う。ここでは、データパストレース部303は、フォワードトレースを行うような受けFFマクロ内部の入力側の冗長ゲートを削除する処理と、バックワードトレースを行うような送りFFマクロ内部の出力側の冗長ゲートを削除する処理と、を行う。
そのため、データパストレース部303は、受けFFマクロ内部の入力側の冗長ゲートを削除する処理についてのゲート段数算出部311と、送りクロックドメイン記録部312と、受けFFマクロ内部入力削除部313と、を有する。また、データパストレース部303は、バックワードトレースを行うような送りFFマクロ内部の出力側の冗長ゲートを削除する処理についてのゲート段数算出部321と、受けクロックドメイン記録部322と、送りFFマクロ内部出力削除部323と、を有する。
まず、受けFFマクロ内部の入力側の冗長ゲートを削除する処理の詳細について説明する。
図4は、受けFFマクロ内部の入力側の冗長ゲートの削除例を示す説明図である。クロックパストレース部302は、例えば、ブロックに含まれる選択されたFFマクロについて、ブロックに含まれるクロック端子からFFマクロのクロック端子までの間のクロックパス上のゲート段数の上限値とゲート段数の下限値を特定する。
例えば、FFマクロaについての上限値はcmax[CKa]であり、FFマクロaについての下限値はcmin[CKa]である。例えば、FFマクロbについての上限値はcmax[CKb]であり、FFマクロbについての下限値はcmin[CKb]である。例えば、FFマクロcについての上限値はcmax[CKc]であり、FFマクロcについての下限値はcmin[CKc]である。クロックパストレース部302によるクロックパスのトレース処理の詳細例については図7に示す。
クロックパストレース部302は、ブロックに含まれるクロック端子を始点としてブロックに含まれるFFマクロのクロック端子を終点としてゲート段数を算出する。クロックパストレース部302は、例えば、cminとcmaxとのクロックパス用にテーブルを用意する。クロックパストレース部302は、現在のゲートの出力端子を「o」として現在のゲートの入力端子を「i」とした場合に、以下のように最小値、最大値のトーナメントを行いながらcminとcmaxとを更新する。
・cmin[o]=min(cmin[i])+1
・cmax[o]=max(cmax[i])+1
また、cmax、cminのそれぞれにはクロックパスが分岐または合流するような場合に、クロックパストレース部302は、通過するゲートの段数の下限と上限の範囲を決定する。
また、クロックパストレース部302は、選択されたFFマクロについてのクロックパスのゲート段数を特定してもよいし、ブロックに含まれるクロック端子からすべてのFFマクロに到達するまで順にトレースしてもよい。
データパストレース部303は、到達したFFマクロからデータパスのフォワードトレースを行う。上述したように、データパストレース部303は、ゲート段数算出部311と、送りクロックドメイン記録部312と、受けFFマクロ内部入力削除部313と、を有する。
具体的に、ゲート段数算出部311は、例えば、データパスフォワードトレース処理を行うことによりデータパスごとのゲート段数の下限値を算出する。例えば、ゲート段数算出部311は、クロックトレースが到達したFFを起点として次段のFFの入力を終点とするフォワードトレースを行う。
ゲート段数算出部311は、データパス用に要素数のテーブルdmin[]を用意する。そして、ゲート段数算出部311は、トレース段数の初期値は各FFのクロック端子の段数cmin[CK]とする。ゲート段数算出部311は、現在のトレースのゲート出力端子を「o」とし、ゲート入力端子を「i」とした場合に、以下のように最小トーナメントを行いながらdminを更新する。
・dmin[o]=min(dmin[i])+1
このフォワードトレースでは、ゲート段数算出部311は、dminとしてパスが分岐または合流するような場合に通過ゲート段数の下限を決定する。
また、送りクロックドメイン記録部312は、対象となるFFに供給されるクロックの識別情報を記録する。送りクロックドメイン記録部312は、例えば、ドメインマーカs[FF出力のネット番号]に対象のクロック番号を記録する。ここで、ゲート段数算出部311と送りクロックドメイン記録部312との処理の詳細例については、図9に示す。
受けFFマクロ内部入力削除部313は、トレースが終了した後に、クロックパスのトレースが到達したすべてのFFのクロック端子とデータ入力端子とについてレース余裕を算出する。レース余裕は以下式(1)によって算出可能である。以下式(1)におけるDはデータ入力端子を示し、CKはクロック端子を示す。
レース余裕=dmin[D]−cmax[CK]・・・(1)
レース余裕は、データパスの中でゲート段数の下限値と、クロックパスの中でデータ段数の上限値と、の差分値である。そのため、レース余裕が正の値であれば、レースは存在しないことを示す。受けFFマクロ内部入力削除部313は、FFマクロのデータ入力端子に挿入されているディレーゲートをレース余裕以下の段数を上限として削除する。
図4の例では、削除対象ディレーゲートがFFマクロcの場合、データパスについてのゲート段数は、dmin[a]+cmin[CKa]と、dmin[b]+cmin[CKb]と、がある。dmin[a]+cmin[CKa]の方が小さいため、受けFFマクロ内部入力削除部313は、下限値として、dmin[a]+cmin[CKa]を選択する。また、クロックパスの中でデータ段数の上限値は、cmax[CKc]である。そのため、FFマクロcについてのレース余裕RMは、「cmin[CKa]+dmin[a]+dmin[c]−cmax[CKc]」によって導出される。
つぎに、バックワードトレースを行うような送りFFマクロ内部の出力側の冗長ゲートを削除する処理について説明する。
図5は、送りFFマクロ内部の出力側ディレーゲート削除例を示す説明図である。クロックパストレース部302は、例えば、ブロックに含まれる選択されたFFマクロについて、ブロックに含まれるクロック端子からFFマクロのクロック端子までの間のクロックパス上のゲート段数の上限値とゲート段数の下限値を特定する。
例えば、FFマクロaについての上限値はcmax[CKa]であり、FFマクロaについての下限値はcmin[CKa]である。例えば、FFマクロbについての上限値はcmax[CKb]であり、FFマクロbについての下限値はcmin[CKb]である。例えば、FFマクロcについての上限値はcmax[CKc]であり、FFマクロcについての下限値はcmin[CKc]である。クロックパストレース部302によるクロックパスのトレース処理の詳細例については図7に示す。
ゲート段数算出部321は、例えば、データパス用にテーブルdmin[]を用意する。ゲート段数算出部321は、クロックトレースが到達したFFのデータ入力端子を起点として前段のFFのデータ出力端子を終点とするバックワードトレースを行う。ゲート段数算出部321は、トレース段数の初期値はFFのクロック端子とデータ入力端子とする。トレースのゲート出力端子を「o」とし、ファンアウト先の入力端子を「i」とした場合に、以下のように最小トーナメントを行いながらdminを更新する。
・dmin[o]=min(dmin[i])+1
このバックワードトレースでは、ゲート段数算出部321は、dminとしてパスが分岐または合流するような場合に通過ゲート段数の下限を決定する。
また、受けクロックドメイン記録部322は、対象となるFFに供給されるクロックの識別情報を記録する。受けクロックドメイン記録部322は、例えば、ドメインマーカr[FF出力のネット番号]に対象のクロック番号を記録する。ここで、ゲート段数算出部321と受けクロックドメイン記録部322との処理の詳細例については、図10に示す。
送りFFマクロ内部出力削除部323は、トレースが終了した後に、クロックパスのトレースが到達したすべてのFFのクロック端子とデータ出力端子とについてレース余裕を算出する。レース余裕は以下式(2)によって算出可能である。以下式(2)におけるQはデータ出力端子を示し、CKはクロック端子を示す。
レース余裕=dmin[Q]−cmax[CK]・・・(2)
レース余裕は、データパスのうちでゲート段数の下限値と、クロックパスのうちでゲート段数の上限値と、の差分値である。レース余裕が正の値であれば、レースは存在しないことを示す。送りFFマクロ内部出力削除部323は、FFマクロのデータ入力端子に挿入されているディレーゲートをレース余裕以下の段数を上限として削除する。
図5の例では、削除対象ディレーゲートがFFマクロcの場合、データパスについてのゲート段数は、dmin[a]+cmin[CKa]と、dmin[b]+cmin[CKb]と、がある。dmin[a]+cmin[CKa]の方が小さいため、送りFFマクロ内部出力削除部323は、下限値として、dmin[a]+cmin[CKa]を選択する。また、クロックパスの中でデータ段数の上限値は、cmax[CKc]である。そのため、FFマクロcについてのレース余裕RMは、「cmin[CKa]+dmin[a]+dmin[c]−cmax[CKc]」によって導出される。
(テストパターン生成装置100による冗長ディレーゲート削除処理手順例)
図6は、テストパターン生成装置による冗長ディレーゲート削除処理手順例を示すフローチャートである。テストパターン生成装置100は、ドメインマーカを初期化する(ステップS601)。例えば、テストパターン生成装置100は、s[*]={nil}、r[*]={nil}とする。
つぎに、テストパターン生成装置100は、未処理のクロックドメインがあるか否かを判断する(ステップS602)。未処理のクロックドメインがあると判断された場合(ステップS602:Yes)、テストパターン生成装置100は、未処理のクロックドメインのいずれかを処理対象に選択する(ステップS603)。テストパターン生成装置100は、クロックパスをトレースする(ステップS604)。
テストパターン生成装置100は、データパスをフォワードトレースする(ステップS605)。つぎに、テストパターン生成装置100は、受けFFマクロ内部入力の削除を行う(ステップS606)。そして、テストパターン生成装置100は、データパスをバックワードトレースする(ステップS607)。つづいて、テストパターン生成装置100は、送りFFマクロ内部出力の削除を行い(ステップS608)、一連の処理を終了する。
ステップS602において、未処理のクロックドメインがないと判断された場合(ステップS602:No)、テストパターン生成装置100は、一連の処理を終了する。
図7は、図6で示したクロックパスのトレース処理(ステップS604)の詳細な説明を示すフローチャートである。まず、テストパターン生成装置100は、クロックパス段数テーブルを初期化する(ステップS701)。ステップS701では、例えば、テストパターン生成装置100は、「cmin[*]=∞」、「cmax[*]=−∞」とする。つぎに、テストパターン生成装置100は、「ネット番号=クロック端子」、「最小段数=0」、「最大段数=0」とする(ステップS702)。テストパターン生成装置100は、{ネット番号、最小段数、最大段数}をスタックにプッシュする(ステップS703)。
テストパターン生成装置100は、スタックが空であるか否かを判断する(ステップS704)。スタックが空でないと判断された場合(ステップS704:No)、テストパターン生成装置100は、{ネット番号、最小段数、最大段数}をスタックからポップする(ステップS705)。テストパターン生成装置100は、最小段数がcmin[ネット番号]であり、かつ最大段数がcmax[ネット番号]であるか否かを判断する(ステップS706)。
最小段数がcmin[ネット番号]であり、かつ最大段数がcmax[ネット番号]であると判断された場合(ステップS706:Yes)、テストパターン生成装置100は、ステップS704へ戻る。最小段数がcmin[ネット番号]でない、または最大段数がcmax[ネット番号]でないと判断された場合(ステップS706:No)、テストパターン生成装置100は、「cmin[ネット番号]=最小段数」、「cmax[ネット番号]=最大段数」とする(ステップS707)。
つぎに、テストパターン生成装置100は、ネットがFFの出力であるか否かを判断する(ステップS708)。ネットがFFの出力であると判断された場合(ステップS708:Yes)、テストパターン生成装置100は、ステップS704へ戻る。ネットがFFの出力でないと判断された場合(ステップS708:No)、テストパターン生成装置100は、ネットがゲート入力であるか否かを判断する(ステップS709)。ゲート入力とは、ゲートの入力端子である。ネットがゲート入力であるかを判断することは、入力ネットであるかを判断することである。
ネットがゲート入力であると判断された場合(ステップS709:Yes)、テストパターン生成装置100は、「ネット番号=ゲート出力」、「最小段数=最小段数+1」、「最大段数=最大段数+1」とする(ステップS710)。テストパターン生成装置100は、{ネット番号、最小段数、最大段数}をスタックにプッシュし(ステップS711)、ステップS704へ戻る。一方、ネットがゲート入力でないと判断された場合(ステップS709:No)、テストパターン生成装置100は、「最小段数=min(cmin[i])+1」、「最大段数=max(cmax[i])+1」とする(ステップS712)。ステップS712でのiはゲートのすべての入力端子である。
テストパターン生成装置100は、ゲート出力のファンアウトのうち未処理があるか否かを判断する(ステップS713)。ゲート出力のファンアウトのうち未処理があると判断された場合(ステップS713:Yes)、テストパターン生成装置100は、未処理のファンアウトから1つのファンアウトfを選択する(ステップS714)。そして、テストパターン生成装置100は、{f、最小段数、最大段数}をスタックにプッシュし(ステップS715)、ステップS713へ戻る。
ゲート出力のファンアウトのうち未処理がないと判断された場合(ステップS713:No)、テストパターン生成装置100は、ステップS704へ戻る。また、ステップS704において、スタックが空であると判断された場合(ステップS704:Yes)、テストパターン生成装置100は、一連の処理を終了する。
図8は、クロックパス上のネットのフォワードトレース例を示す説明図である。図8には、クロックパス上にあるG1,G2,G3を例に示す。例えば、図8では、ネットa→c→d→fの順でフォワードトレースされる様子を示す。まず、開始状態としてネットaがスタックにプッシュされる。
つぎに、テストパターン生成装置100は、スタックからネットaをポップすることによりネットaを処理対象ネットとする。ネットaは2入力ANDのゲートG1の入力ネットである。そのため、テストパターン生成装置100は、ゲートG1の出力のネットcをネット番号に設定してスタックにプッシュする。そして、テストパターン生成装置100は、最小段数と最大段数を1加算してスタックにプッシュする。
つぎに、テストパターン生成装置100は、スタックからネットcをポップすることによりネットcを処理対象ネットとする。ネットcは2入力ANDのゲートG1の出力ネットである。そのため、テストパターン生成装置100は、ネットcのファンアウト先であるゲートG2の入力ネットdと、ゲートG3の入力ネットgをスタックにプッシュする。また、テストパターン生成装置100は、ゲートG1のすべての入力端子a,bを参照する。そして、テストパターン生成装置100は、最小段数と最大段数を計算してスタックにプッシュする。
つぎに、テストパターン生成装置100は、スタックからネットdをポップすることにより処理対象ネットとする。テストパターン生成装置100は、ネットdについてネットaと同様の処理を行う。
つぎに、テストパターン生成装置100は、スタックからネットgをポップすることにより処理対象ネットとする。テストパターン生成装置100は、ネットgについてネットaと同様の処理を行う。このようにしてフォワードトレースが行われる。
図9は、図6で示したデータパスフォワード処理(ステップS605)の詳細な説明を示すフローチャートである。テストパターン生成装置100は、データパス段数テーブルを初期化する(ステップS901)。ステップS901では、例えば、テストパターン生成装置100は「dmin[*]=∞」とする。
テストパターン生成装置100は、クロックパスの到達したFFについて、「ネット番号=FFの出力」、「最小段数=cmin[FFのck]」、{ネット番号、最小段数}をスタックにプッシュする(ステップS902)。そして、テストパターン生成装置100は、スタックが空であるか否かを判断する(ステップS903)。スタックが空でないと判断された場合(ステップS903:No)、テストパターン生成装置100は、{ネット番号、最小段数}をスタックからポップする(ステップS904)。
テストパターン生成装置100は、ドメインマーカs[ネット番号]にクロック番号を追加する(ステップS905)。テストパターン生成装置100は、最小段数がdmin[ネット番号]であるか否かを判断する(ステップS906)。最小段数がdmin[ネット番号]であると判断された場合(ステップS906:Yes)、テストパターン生成装置100は、ステップS903へ戻る。最小段数がdmin[ネット番号]でないと判断された場合(ステップS906:No)、テストパターン生成装置100は、「dmin[ネット番号]=最小段数」とする(ステップS907)。
テストパターン生成装置100は、ネットがFFの入力であるか否かを判断する(ステップS908)。ネットがFFの入力であると判断された場合(ステップS908:Yes)、テストパターン生成装置100は、ステップS903へ戻る。ネットがFFの入力でないと判断された場合(ステップS908:No)、テストパターン生成装置100は、ネットがゲート入力であるか否かを判断する(ステップS909)。ネットがゲート入力であると判断された場合(ステップS909:Yes)、テストパターン生成装置100は、「ネット番号=ゲート出力」、「最小段数=最小段数+1」とする(ステップS910)。テストパターン生成装置100は、{ネット番号、最小段数}をスタックにプッシュし(ステップS911)、ステップS903へ戻る。
一方、ネットがゲート入力でないと判断された場合(ステップS909:No)、テストパターン生成装置100は、「最小段数=min(dmin[i])+1」とする(ステップS912)。ステップS912におけるiは、ゲートのすべての入力端子である。つぎに、テストパターン生成装置100は、ゲート出力のファンアウトのうち未処理があるか否かを判断する(ステップS913)。
ゲート出力のファンアウトのうち未処理がないと判断された場合(ステップS913:No)、テストパターン生成装置100は、ステップS903へ戻る。ゲート出力のファンアウトのうち未処理があると判断された場合(ステップS913:Yes)、テストパターン生成装置100は、未処理のファンアウトから1つのファンアウトfを選択する(ステップS914)。テストパターン生成装置100は、{f、最小段数}をスタックにプッシュし(ステップS915)、ステップS913へ戻る。
また、ステップS903において、スタックが空であると判断された場合(ステップS903:Yes)、テストパターン生成装置100は、一連の処理を終了する。
図10は、図6で示したデータパスバックワード処理(ステップS607)の詳細な説明を示すフローチャートである。テストパターン生成装置100は、データパス段数テーブルの初期化を行う(ステップS1001)。ステップS1001において、テストパターン生成装置100は、例えば、「dmin[*]=∞」とする。つぎに、テストパターン生成装置100は、クロックパスの到達したFFについて、「ネット番号=FFの入力」、「最小段数=−cmin[FFのCK]」、{ネット番号、最小段数}をスタックにプッシュする(ステップS1002)。
テストパターン生成装置100は、スタックが空であるか否かを判断する(ステップS1003)。スタックが空でないと判断された場合(ステップS1003:No)、テストパターン生成装置100は、{ネット番号、最小段数}をスタックからポップする(ステップS1004)。テストパターン生成装置100は、ドメインマーカr[ネット番号]にクロック番号を追加する(ステップS1005)。
つぎに、テストパターン生成装置100は、最小段数がdmin[ネット番号]であるか否かを判断する(ステップS1006)。最小段数がdmin[ネット番号]であると判断された場合(ステップS1006:Yes)、テストパターン生成装置100は、ステップS1003へ戻る。最小段数がdmin[ネット番号]でないと判断された場合(ステップS1006:No)、テストパターン生成装置100は、「dmin[ネット番号]=最小段数」とする(ステップS1007)。
つぎに、テストパターン生成装置100は、ネットがFFの出力であるか否かを判断する(ステップS1008)。ネットがFFの出力であると判断された場合(ステップS1008:Yes)、テストパターン生成装置100は、ステップS1003へ戻る。一方、ネットがFFの出力でないと判断された場合(ステップS1008:No)、テストパターン生成装置100は、ネットがゲート入力であるか否かを判断する(ステップS1009)。ネットがゲート入力であると判断された場合(ステップS1009:Yes)、テストパターン生成装置100は、「ネット番号=ドライバネット」、「最小段数=最小段数+1」とする(ステップS1010)。テストパターン生成装置100は、{ネット番号、最小段数}をスタックにプッシュし(ステップS1011)、ステップS1003へ戻る。
一方、ネットがゲート入力でないと判断された場合(ステップS1009:No)、テストパターン生成装置100は、「最小段数=min(dmin[f])+1」とする(ステップS1012)。ステップS1012におけるfは、ゲート出力のすべてのファンアウト先である。つぎに、テストパターン生成装置100は、ゲートの入力ネットのうち未処理のネットがあるか否かを判断する(ステップS1013)。
ゲートの入力ネットのうち未処理のネットがあると判断された場合(ステップS1013:Yes)、テストパターン生成装置100は、未処理の入力ネットから1つの入力ネットiを選択する(ステップS1014)。テストパターン生成装置100は、{i、最小段数}をスタックにプッシュし(ステップS1015)、ステップS1013へ戻る。
一方、ゲートの入力ネットのうち未処理のネットがないと判断された場合(ステップS1013:No)、テストパターン生成装置100は、ステップS1003に戻る。ステップS1003において、スタックが空であると判断された場合(ステップS1003:Yes)、テストパターン生成装置100は、一連の処理を終了する。
図11は、ドライバネットとゲートの入力例を示す説明図である。ステップS1009においてネットがゲート入力であると判断された場合に、ステップS1010において「ネット番号=ドライバネット」とする際のドライバネットとは、レシーバである入力ネットをドライブするネットであるため、前段の出力ネットである。
また、ステップS1009においてネットがゲート入力でないと判断された場合とは、すなわち、ネットがゲート出力であると判断された場合である。この場合に、ステップS1013においてゲートの入力ネットのうち未処理のネットがあるか否かを判断する際のゲートの入力ネットについて説明する。ネットcが着目するゲート出力の場合、ネットcのゲートであるG1の入力ネットであるaとbが入力ネットである。
例えば、テストパターン生成装置100は、ネットcが着目するゲート出力の場合、ネットcのファンアウト先であるネットd,gのdminを用いてネットcでの最小段数を算出する。そして、テストパターン生成装置100は、算出した最小段数dmin[c]と、ネットcのゲートであるG1の入力ネットであるaとbとを共に{a、dmin[c]}、{b,dmin[c]}のようにスタックにプッシュする。
図12は、図6で示した受けFFマクロ内部入力削除処理(ステップS606)の詳細な説明を示すフローチャートである。テストパターン生成装置100は、回路内部のFFのうち未処理のFFがあるか否かを判断する(ステップS1201)。回路内部のFFのうち未処理のFFがあると判断された場合(ステップS1201:Yes)、テストパターン生成装置100は、未処理のFFから1つのFFを処理対象として選択する(ステップS1202)。
つぎに、テストパターン生成装置100は、FFのD端子にトレースが到達したか否かを判断する(ステップS1203)。FFのD端子にトレースが到達していないと判断された場合(ステップS1203:No)、テストパターン生成装置100は、ステップS1201へ戻る。一方、FFのD端子にトレースが到達したと判断された場合(ステップS1203:Yes)、テストパターン生成装置100は、[レース余裕=dmin[D]−cmax[CK]」とする(ステップS1204)。
そして、テストパターン生成装置100は、「削除開始ネット=FFマクロのD入力」とする(ステップS1205)。テストパターン生成装置100は、「削除終了の候補ネット=削除開始ネット」とする(ステップS1206)。テストパターン生成装置100は、「削除段数=0」とする(ステップS1207)。テストパターン生成装置100は、削除終了の候補ゲートがバッファであるか否かを判断する(ステップS1208)。削除終了の候補ゲートがバッファであると判断された場合(ステップS1208:Yes)、テストパターン生成装置100は、削除候補のゲートを1段フォワードトレースし、「削除段数+=2」とする(ステップS1209)。削除段数を2加算するのは、入力分と出力分である。
そして、テストパターン生成装置100は、削除段数>レース余裕であるか否かを判断する(ステップS1210)。削除段数>レース余裕であると判断された場合(ステップS1210:Yes)、テストパターン生成装置100は、ステップS1208へ戻る。削除段数>レース余裕でないと判断された場合(ステップS1210:No)、テストパターン生成装置100は、削除終了の候補ネット=削除候補のゲート出力とし(ステップS1211)、ステップS1208へ戻る。
一方、ステップS1208において、削除終了の候補ゲートがバッファでないと判断された場合(ステップS1208:No)、テストパターン生成装置100は、ステップS1212へ移行する。テストパターン生成装置100は、削除開始ネットが削除終了の候補ネットと一致しないか否かを判断する(ステップS1212)。削除開始ネットが削除終了の候補ネットと一致しないと判断された場合(ステップS1212:Yes)、テストパターン生成装置100は、削除開始〜終了候補のディレーゲートを削除し(ステップS1213)、ステップS1201へ戻る。削除開始ネットが削除終了の候補ネットと一致すると判断された場合(ステップS1212:No)、テストパターン生成装置100は、ステップS1201へ戻る。
ステップS1201において、回路内部のFFのうち未処理のFFがないと判断された場合(ステップS1201:No)、テストパターン生成装置100は、一連の処理を終了する。
図13は、図6で示した送りFFマクロ内部出力削除処理(ステップS608)の詳細な説明を示すフローチャートである。まず、テストパターン生成装置100は、回路内部のFFのうち未処理のFFがあるか否かを判断する(ステップS1301)。回路内部のFFのうち未処理のFFがあると判断された場合(ステップS1301:Yes)、テストパターン生成装置100は、未処理のFFから1つのFFを処理対象として選択する(ステップS1302)。
テストパターン生成装置100は、FFのQ端子にトレースが到達したか否かを判断する(ステップS1303)。FFのQ端子にトレースが到達していないと判断された場合(ステップS1303:No)、テストパターン生成装置100は、ステップS1301へ戻る。FFのQ端子にトレースが到達したと判断された場合(ステップS1303:Yes)、テストパターン生成装置100は、「レース余裕=dmin[Q]−cmin[CK]」とする(ステップS1304)。テストパターン生成装置100は、削除開始ネット=FFマクロのQ出力とする(ステップS1305)。
つぎに、テストパターン生成装置100は、「削除終了の候補ネット=削除開始ネット」とする(ステップS1306)。テストパターン生成装置100は、「削除段数=0」とする(ステップS1307)。テストパターン生成装置100は、削除終了の候補ゲートがバッファであるか否かを判断する(ステップS1308)。削除終了の候補ゲートがバッファであると判断された場合(ステップS1308:Yes)、テストパターン生成装置100は、削除候補のゲートを1段バックワードトレースし、「削除段数+=2」とする(ステップS1309)。削除段数に2を加算するのは、入力分と出力分である。
つぎに、テストパターン生成装置100は、削除段数>レース余裕であるか否かを判断する(ステップS1310)。削除段数>レース余裕であると判断された場合(ステップS1310:Yes)、テストパターン生成装置100は、ステップS1308へ戻る。削除段数>レース余裕でないと判断された場合(ステップS1310:No)、テストパターン生成装置100は、「削除終了の候補ネット=削除候補のゲート入力」とし(ステップS1311)、ステップS1308へ戻る。
一方、ステップS1308において、削除終了の候補ゲートがバッファでないと判断された場合(ステップS1308:No)、テストパターン生成装置100は、削除開始ネットが削除終了の候補ネットと一致していないかを判断する(ステップS1312)。削除開始ネットが削除終了の候補ネットと一致していないと判断された場合(ステップS1312:Yes)、テストパターン生成装置100は、削除開始〜終了候補のディレーゲートを削除し(ステップS1313)、ステップS1301へ戻る。
また、削除開始ネットが削除終了の候補ネットと一致していると判断された場合(ステップS1312:No)、テストパターン生成装置100は、ステップS1301へ戻る。また、ステップS1301において、回路内部のFFのうち未処理のFFがないと判断された場合(ステップS1301:No)、テストパターン生成装置100は、一連の処理を終了する。
<ブロック分割>
つぎに、対象回路に含まれるブロックを分割する例について説明する。従来技術、複数のブロックを分割して複数のコンピュータに割り当てて並列処理によってテストパターン生成を行う場合がある。並列処理では処理時間を短縮するために各コンピュータの負荷を均等にする必要がある。近年、I/O部やRAMなどの高機能化に伴う規模の増大のため、I/O部やRAMがCPUと同程度の規模を持つこともある。そのため、ゲート数によって複数のブロックを分割する場合に、第1の分割回路にはI/O部のみが割り当てられ、第2の分割回路にはCPUのみが割り当てられるような、機能や構成が同じブロックが特定の分割回路に偏在する場合があるという問題点がある。
特定の分割回路に機能や構成が同じブロックが偏在する場合、クロックドメインなどが分割回路間で異なる可能性がある。複数の分割回路を並列処理しても、分割回路に含まれるブロックのクロックドメイン等の特性が異なると動作する回路部分も異なってくるため、分割回路間でシミュレーション等の処理時間にも差がつくことなる。従って最も処理の遅い分割回路の終了待ちによる並列処理全体の効率低下が発生することになる。
そこで、本実施の形態では、テストパターン生成装置100は、規模および機能に関する特徴量の近さに基づきブロックをグループ化し、分割数とグループのブロック数の比率に基づき各ブロックを分割回路に割り当てる。これにより、分割回路間の特性の均等化を図ることができる。
また、従来技術では分割回路の規模の見積もりを、分割回路に含むと選択したブロックの規模を足し合わせることで行うことがある。しかしながら実際の回路分割では論理的に完結させる必要があり、分割回路に含めると選択したブロック以外であっても、クロック系など制御回路や隣接するブロックからの接続は分割回路に含める必要がある。そのためブロックによっては、この接続部分が見積もりからの誤差となり、分割回路規模等の特性に偏り生じるという問題点がある。
そこで、本実施の形態では、テストパターン生成装置100は、ブロックの観測点であるスキャンFFから前段のスキャンFFまでの接続範囲をバックトレースして求めたブロック間接続のネット数の合計値が最小となるようにグループに含まれるブロックを割り当てる。これにより、分割後の回路規模の見積精度の向上を図ることができる。これにより、より分割回路間の特性の均等化を図ることができる。
まず、取得部304は、例えば、設計の対象回路内のゲートやゲート間の接続関係を示す回路情報を取得する。ここでの回路情報は、回路情報342とするが、回路情報341であってもよい。回路情報342はネットリストである。ネットリストは、例えば、ゲートレベルなどによって記述される。取得形式としては、例えば、取得部304は、ネットワーク209を介して他の装置から回路情報342を取得してもよい。または、例えば、取得部304は、RAM203、ROM202、ディスク205などの記憶装置から回路情報342を読み出すことによって回路情報342を取得してもよい。
また、取得部304は、対象回路に含まれる複数のブロックの各々について、回路情報342に基づくブロックのサイズに関する第1特徴量と、回路情報342に基づくブロックの機能に関する第2特徴量と、を取得する。第1特徴量は、例えば、ネット数である。第2特徴量は、例えば、スキャンFFの数である。
また、取得部304は、ブロックの各々について、回路情報342に基づくブロックに含まれるFFから、FFの前段にあるFFまでの間のパスに関する第3特徴量を取得する。第3特徴量は、例えば、トレースネット数である。トレースネット数とは、ブロックの観測点であるスキャンFFから前段のスキャンFFまでの接続範囲をバックトレースして求めたブロック間接続のネット数である。
具体的に、取得部304は、例えば、ブロックの各々について、階層名、ネット数、スキャンFF数、トレースネット数を示すブロック情報を取得する。ブロック情報は、例えば、以下の通りである。
・ブロック情報{ネット数、スキャンFF数、トレースネット数}
取得形式としては、例えば、取得部304は、ネットワーク209を介して他の装置から取得してもよい。または、例えば、取得部304は、RAM203、ROM202、ディスク205などの記憶装置からブロック情報を読み出すことによってブロック情報を取得してもよい。または、例えば、取得部304は、回路情報342に基づいて、ブロックの各々について、ネット数、スキャンFF数、トレースネット数を抽出してもよい。
図14は、ブロック情報の特徴抽出例を示す説明図である。対象回路1400には、複数のブロック1401−1〜30が含まれる。例えばブロック1401−1は、ネット数がNaであり、スキャンFF数がSaである。また、例えば、ブロック1401−4は、ネット数がNaであり、スキャンFF数がSaである。また、例えば、ブロック1401−6は、ネット数がNdであり、スキャンFF数がSdである。また、例えばブロック1401−7は、ネット数がNbであり、スキャンFF数がSbである。また、例えばブロック1401−27は、ネット数がNcであり、スキャンFF数がScである。また、ネット数については、Na>Nb>Nc>Ndの関係とする。スキャンFF数については、Sa≠Sb≠Sc≠Sdの関係とする。理解の容易化のために、図14の下側では、ネット数とスキャンFF数が同一のブロック1401に同一のハッチングを付してある。
分類部305は、第1特徴量が第1所定範囲内であり、第2特徴量が第2所定範囲内であるブロック1401同士を同一のグループとなるように、複数のブロック1401を、複数のブロック1401の数より少ない複数のグループに分類する。第1所定範囲と第2所定範囲は利用者によって予め定められる。分類部305は、例えば、複数のブロック1401を、ブロック情報に含まれるネット数の差が第1所定範囲内であり、かつスキャンFF数の差が第2所定範囲内であるブロック情報を同一のグループとなるように複数のブロック1401を分類する。指定範囲については、設計者やテストパターン作成者などの利用者によって予め指定される範囲である。また、分類部305は、各特徴量に差がないブロック情報を同一のグループとなるように分類してもよい。また、分類部305による詳細なグルーピングについては、図22と図23に示す。各グループを示すグループ情報は例えば以下の通りである。
・グループ情報{分類されたブロック情報,分類されたブロック情報}
図14を例に挙げると、分類部305は、ブロック1401−1とブロック1401−2とブロック1401−4とブロック1401−5とを同一のグループに分類する。他のグループについては図15に分類結果を示す。
割当部306は、複数のグループの各々について、グループに含まれるブロック1401の数と分割数との比率に基づいて、グループに含まれるブロック1401の各々を分割数の複数の分割回路1600のうちのいずれかに割り当てる。また、割当部306は、グループの各々について、グループに含まれるブロック1401の各々を比率に応じた間隔と、複数の分割回路の各々に付された異なる順序と、によってグループに含まれるブロックを割り当てる。また、比率に応じた間隔は分配間隔とも称する。割当部306は、分配間隔と順序とによって複数の分割回路に割り当てた場合における複数の分割回路の各々についての第3特徴量の合計値が最小となるように、グループに含まれるブロックを割り当てる。本実施の形態では、割り当てることを分配とも称する。上述したように、第3特徴量はトレースネット数である。割当部306は、具体的に、分配間隔決定部331と、分配先決定部332と、を有する。
分配間隔決定部331は、例えば、グループに含まれるブロック1401の数と分割数との比率に基づいて、グループに含まれるブロック1401を複数の分割回路1600を並べた場合に等間隔に分配するための分配間隔を決定する。分割数については、例えば、設計者やテストパターン作成者などの利用者によって入力装置207を介して指定される。
例えば分割数が16であり、グループに含まれるブロック1401の数が2,4,8,16のように、分割数に対してグループに含まれるブロック1401の数が端数を持たない場合について説明する。分配間隔決定部331は、分配間隔を分割数/グループに含まれるブロック1401の数とする。これにより、グループ内に含まれるブロック1401が分割回路1600に偏在することによって分割回路1600間の機能に偏りが発生することを抑制できる。分割回路1600間の機能の偏りを抑制することによって複数の分割回路1600について並列処理によってテストパターン生成を行った場合に、テストパターン生成時間の偏りを抑制でき、テストパターン生成時間の短縮を図ることができる。
また、割当部306は、例えば、分割数をグループに含まれるブロック1401の数で割った時に余りがある場合、グループに含まれるブロック1401のうちの余りの数のブロック1401を複数の分割回路1600と異なる分割回路1600に割り当てる。本実施の形態では、分割数に対してグループに含まれるブロック1401の数が端数を持つ場合には、余剰分についての分割回路1600を用意することとする。分割数に対してグループに含まれるブロック1401の数が端数を持つ場合、分配間隔決定部331は、グループに含まれるブロック1401の数から余剰分を引いた数を新たにブロック1401の数とする。分配間隔決定部331は、ブロック1401の数と分割数との最大公約数が1でない場合には、分配間隔を分割数/gに決定する。分配間隔決定部331は、ブロック1401の数と分割数との最大公約数が1である場合には、さらにブロック1401を余剰分とする処理と、最大公約数が1である場合における分配間隔を決定する処理と、を繰り返す。分配間隔決定部331による詳細な処理例は、後述する図24に示す。
図15は、分類結果と分配間隔例を示す説明図である。図15(1)には分類結果例を示し、図15(2)には分配間隔例を示す。
図15(1)に示すように、グループ1501−1は、ブロック1401−1と、ブロック1401−2と、ブロック1401−4と、ブロック1401−5とを含む。図15(1)に示すように、グループ1501−2は、ブロック1401−7〜ブロック1401−22を含む。図15(1)に示すように、グループ1501−3は、ブロック1401−23〜ブロック1401−30を含む。図15(1)に示すように、グループ1501−4は、ブロック1401−3とブロック1401−6とを含む。
図15(2)に示すように、グループ1501−1に含まれるブロック1401の数は4であり、分割数が16であるため、グループ1501−1の分配間隔は4である。図15(2)に示すように、グループ1501−2に含まれるブロック1401の数は16であり、分割数が16であるため、グループ1501−2の分配間隔は1である。
図15(2)に示すように、グループ1501−3に含まれるブロック1401の数は8であり、分割数が16であるため、グループ1501−3の分配間隔は2である。図15(2)に示すように、グループ1501−4に含まれるブロック1401の数は2であり、分割数が16であるため、グループ1501−4の分配間隔は8である。
分配先決定部332は、複数のグループ1501から未分配のグループ1501を1つ選択する。ここでは、複数の分割回路1600の各々に順序があることとする。そして、分配先決定部332は、選択したグループ1501に含まれるブロック1401を決定された分配間隔ごとに複数の分割回路1600に分配させた場合に、分割回路1600の各々の第3特徴量の合計値が最も小さくなる分配先を決定する。分配先決定部332は、分配先の決定結果を回路分割リスト345としてROM202、RAM203、ディスク205などの記憶装置に記憶する。
図16は、分配例を示す説明図である。図16(a)には、グループ1501−1に含まれるブロック1401の分配例を示す。図16(b)には、グループ1501−2に含まれるブロック1401の分配例を示す。図16(c)には、グループ1501−3に含まれるブロック1401の分配例を示す。図16(d)には、グループ1501−4に含まれるブロック1401の分配例を示す。
まず、グループ1501−1については、分配間隔が4であるため、分配先は、(1,5,9,13)、(2,6,10,14)、(3,7,11,15)、(4,8,12,16)である。なお、( )内の各数値は分割回路1600を識別する番号であり、この番号によって複数の分割回路1600は順序付けられてある。
分配先決定部332は、例えば、各分配先に分配させた場合におけるトレースネット数の合計値を算出する。トレースネット数の合計値は累積トレースネット数とも称する。グループ1501−1を選択した段階では、いずれも分配されていないため、いずれの分配先に分配しても累積トレースネット数は同じである。そのため、図16(a)に示すように、分配先決定部332は、グループ1501−1について分配先を(1,5,9,13)に決定する。
つぎに、図16(b)に示すように、分配先決定部332は、グループ1501−2の分配間隔は16であるため、グループ1501に含まれるブロック1401をすべての分割回路1600に均等に割り当てる。
グループ1501−3については、分配間隔は2であるため、分配先は(1,3,5,7,9,11,13,15)、(2,4,6,8,10,12,14,16)である。(1,5,9,13)にすでにグループ1501−1に含まれるブロック1401が分配されているため、累積トレースネット数が多くなる。そのため、図16(c)に示すように、分配先決定部332は、グループ1501−3についての分配先を(2,4,6,8,10,12,14,16)に決定する。
グループ1501−4については、分配間隔は8であるため、分配先は(1,9)、(2,10)、(3,11)、(4,12)、(5,13)、(6,14)、(7,15)、(8,16)である。累積トレースネット数が最も小さくなる分配先は(3,11)、(7,15)である。そのため、図16(d)に示すように、分配先決定部332は、グループ1501−4についての分配先を(3,11)に決定する。
つぎに、より具体的な例を用いて各処理について説明する。
図17は、ブロックのグルーピング例を示す説明図である。まず、図17(a)に示すように、取得部304は、ブロック1700の各々について、ネット数と、スキャンFF数と、トレースネット数との3つの特徴量を有するブロック情報を取得する。
つぎに、図17(b)に示すように、分類部305は、ネット数を第1キーとし、スキャンFF数を第2キーとして第1キーが第2キーより優先されるようにブロック情報を降順にソートする。これにより、特徴量の等価や類似判定の容易化を図ることができる。
そして、図17(c)に示すように、分類部305は、ソートされたブロック情報を上位から順に選択する。そして、分類部305は、ネット数が所定範囲内であり、スキャンFF数が所定範囲内であるブロック1700を同一のグループ1701に分類する。グループ1701−1はブロック1700−7〜ブロック1700−10を有する。グループ1701−2はブロック1700−1〜ブロック1700−4を有する。グループ1701−3はブロック1700−5とブロック1700−6とを有する。
図18は、分配間隔決定方法のコード例を示す説明図である。コード1800には、分割数が16の場合における分配間隔の決定処理がコーディングされてある。コード1800中に記述の「width」が分配間隔である。コード1800中に記述の「extra」が余剰数である。コード1800に示すように、分配間隔決定部331は、グループ1701に含まれるブロック1700のうち余剰分のブロック1700については余剰の分割回路に分配させるように分配間隔を決定する。分配間隔決定部331は、分配間隔を、分割数とグループ1701内のブロック1700の数との最大公約数に基づいて決定する。
図19は、分配間隔の決定例を示す説明図である。ここでは分割数が16の場合の例について説明する。図19(1)には、グループ1701に含まれるブロック1700数に応じた分配間隔と余剰数とを示す。「width」が分配間隔であり、「extra」が余剰数であり、「[数値]」が分配先である。[17]は余剰分の分割回路1900である。
図19(2)には、グループ1701内のブロック1700数に応じた分配間隔と分配例を示す。例えば、グループ1701内のブロック1700数が1であると、分配間隔が0であり、余剰数が1であるため、ブロック1700の分配先は余剰の分割回路1900−17となる。
また、例えばグループ1701内のブロック1700数が5であると、分配間隔が4であり、余剰数が1となる。そのため、ブロック1700の分配先は分割回路1900−1、分割回路1900−5、分割回路1900−9、分割回路1900−13、余剰の分割回路1900−17となる。
また、図17に示したグループ1701−1とグループ1701−2との分配間隔は4であり、グループ1701−3の分配間隔は8となる。
図20は、ブロック分配例を示す説明図である。つぎに、分配先決定部332は、ブロック1700の分配間隔に基づいてグループ1701に含まれるブロック1700を複数の分割回路1900に分配させた場合に分割回路1900に分配されたブロック1700のトレースネット数の合計値を導出する。これにより、分割回路1900間の回路規模の均等化を図ることができる。図20においてブロック1700とグループ1701との符号を省略する。
図20(a)に示すように、まだいずれのグループ1701についても分割回路1900にブロック1700を分配していないため、分割回路1900ごとの累積トレースネット数には0が設定されてある。
まず、グループ1701−1に含まれるブロック1700を複数の分割回路1900に分配させた場合、分配間隔が4であるため、分配先は(1,5,9,13)、(2,6,10,14)、(3,7,11,15)となる。いずれの分配先であっても累積トレースネット数は同じであるため、図20(b)に示すように、分配先決定部332は、グループ1701−1に含まれるブロック1700の分配先を(1,5,9,13)に決定する。
つぎに、グループ1701−2の分配間隔は4であるため、グループ1701−2についても分配先は、グループ1701−1と同様に、(1,5,9,13)、(2,6,10,14)、(3,7,11,15)となる。つぎに、図20(c)に示すように、分配先決定部332は、グループ1701−2に含まれるブロック1700を分配させた場合における累積トレースネット数を算出する。
グループ1701−2についての分配先を(1,5,9,13)とした場合の(1,5,9,13)の累積トレースネット数は、(22,637,145, 22,637,973, 22,616,152, 22,618,314)である。グループ1701−2についての分配先を(2,6,10,14)とした場合の(2,6,10,14)の累積トレースネット数は、(10,110,410, 10,110,643, 10,098,647, 10,099,870)である。グループ1701−2についての分配先を(3,7,11,15)とした場合の(3,7,11,15)の累積トレースネット数は、(10,110,410, 10,110,643, 10,098,647, 10,099,870)である。
(2,6,10,14)と(3,7,11,15)との場合に累積トレースネット数が小さくなるため、分配先決定部332は、グループ1701−2についての分配先を(2,6,10,14)に決定する。図20(c)には、グループ1701−2に含まれるブロック1700を(2,6,10,14)に分配させた場合の累積トレースネット数を示す。
グループ1701−3についても同様に、分配先決定部332は分配先を(3,11)に決定する。図20(d)にはグループ1701−3に含まれるブロック1700を(3,11)に分配させた場合の累積トレースネット数を示す。以上のように、分配先決定部332は、すべてのグループ1701に対してグループ1701に含まれるブロック1700の分配先を決定する。
(テストパターン生成装置100による回路分割リスト生成処理手順例)
図21は、テストパターン生成装置による回路分割リスト生成処理手順例を示すフローチャートである。まず、テストパターン生成装置100は、ブロック情報を取得する(ステップS2101)。つぎに、テストパターン生成装置100は、ブロック情報のソート処理を行う(ステップS2102)。そして、テストパターン生成装置100は、ブロック情報のグループ認識処理を行う(ステップS2103)。
つづいて、テストパターン生成装置100は、未処理のグループがあるか否かを判断する(ステップS2104)。未処理のグループがあると判断された場合(ステップS2104:Yes)、テストパターン生成装置100は、未処理のグループからいずれかのグループを処理対象として選択する(ステップS2105)。そして、テストパターン生成装置100は、分配間隔の決定処理を行う(ステップS2106)。つぎに、テストパターン生成装置100は、詳細位置集合の決定処理を行う(ステップS2107)。
つづいて、テストパターン生成装置100は、回路分割リストの作成処理を行い(ステップS2108)、ステップS2104へ戻る。一方、ステップS2104において、未処理のグループがないと判断された場合(ステップS2104:No)、テストパターン生成装置100は、一連の処理を終了する。
図22は、図21で示したブロック情報ソート処理(ステップS2102)の詳細な説明を示すフローチャートである。まず、テストパターン生成装置100は、ブロック情報をネット数により降順にソートする(ステップS2201)。つぎに、テストパターン生成装置100は、開始位置←ブロック情報の先頭位置とする(ステップS2202)。
そして、テストパターン生成装置100は、終了位置←開始位置とする(ステップS2203)。つぎに、テストパターン生成装置100は、直前のネット数←終了位置のネット数とする(ステップS2204)。テストパターン生成装置100は、終了位置のネット数と直前のネット数が同じであるか否かを判断する(ステップS2205)。
終了位置のネット数と直前のネット数が同じであると判断された場合(ステップS2205:Yes)、テストパターン生成装置100は、終了位置を更新し(ステップS2206)、ステップS2205へ戻る。終了位置のネット数と直前のネット数が同じでないと判断された場合(ステップS2205:No)、テストパターン生成装置100は、開始位置≦i<終了位置の範囲にあるブロック情報[i]をスキャンFF数で降順にソートする(ステップS2207)。
つぎに、テストパターン生成装置100は、未処理のブロック情報があるか否かを判断する(ステップS2208)。未処理のブロック情報があると判断された場合(ステップS2208:Yes)、テストパターン生成装置100は、開始位置←終了位置の次とし(ステップS2209)、ステップS2203へ戻る。未処理のブロック情報がないと判断された場合(ステップS2208:No)、テストパターン生成装置100は、一連の処理を終了する。
図23は、図21で示したブロック情報グループ認識処理(ステップS2103)の詳細な説明を示すフローチャートである。まず、テストパターン生成装置100は、開始位置←ブロック情報の先頭位置とする(ステップS2301)。つぎに、テストパターン生成装置100は、終了位置←開始位置とする(ステップS2302)。
そして、テストパターン生成装置100は、直前のネット数←終了位置のネット数、直前のスキャンFF数←終了位置のスキャンFF数とする(ステップS2303)。つぎに、テストパターン生成装置100は、終了位置のネット数と直前のネット数の差が第1所定範囲以内であるか否かを判断する(ステップS2304)。終了位置のネット数と直前のネット数の差が第1所定範囲以内でないと判断された場合(ステップS2304:No)、テストパターン生成装置100は、ステップS2307へ移行する。
終了位置のネット数と直前のネット数の差が第1所定範囲以内であると判断された場合(ステップS2304:Yes)、テストパターン生成装置100は、終了位置のスキャンFF数と直前のスキャンFF数の差が第2所定範囲以内であるか否かを判断する(ステップS2305)。終了位置のスキャンFF数と直前のスキャンFF数の差が第2所定範囲以内であると判断された場合(ステップS2305:Yes)、テストパターン生成装置100は、終了位置を更新し(ステップS2306)、ステップS2304へ戻る。
一方、終了位置のスキャンFF数と直前のスキャンFF数の差が第2所定範囲以内でないと判断された場合(ステップS2305:No)、テストパターン生成装置100は、開始位置≦i<終了位置の範囲にあるブロック情報[i]を一つのグループとして登録する(ステップS2307)。テストパターン生成装置100は、未処理のブロック情報があるか否かを判断する(ステップS2308)。
未処理のブロック情報があると判断された場合(ステップS2308:Yes)、テストパターン生成装置100は、開始位置←終了位置の次とし(ステップS2309)、ステップS2302へ戻る。未処理のブロック情報がないと判断された場合(ステップS2308:No)、テストパターン生成装置100は、一連の処理を終了する。
図24は、図21で示した分配間隔決定処理(ステップS2106)の詳細な説明を示すフローチャートである。まず、テストパターン生成装置100は、分配間隔=0、余剰数=0とする(ステップS2401)。つぎに、テストパターン生成装置100は、処理対象のグループが孤立グループであるか否かを判断する(ステップS2402)。ステップS2402においてテストパターン生成装置100は、具体的に、ブロック数が1であるか否かを判断することにより孤立グループであるか否かを判断する。
孤立グループであると判断された場合(ステップS2402:Yes)、テストパターン生成装置100は、余剰数=1とし(ステップS2403)、一連の処理を終了する。孤立グループでないと判断された場合(ステップS2402:No)、テストパターン生成装置100は、ブロック数に端数がなしかを判断する(ステップS2404)。ステップS2404において、テストパターン生成装置100は、具体的に、「分割数%ブロック数」が0であるか否かを判断する。
ブロック数に端数がないと判断された場合(ステップS2404:Yes)、テストパターン生成装置100は、分配間隔=分割数/ブロック数とし(ステップS2405)、一連の処理を終了する。ブロック数に端数があると判断された場合(ステップS2404:No)、テストパターン生成装置100は、「ブロック数=ブロック数−余剰数」とする(ステップS2406)。
テストパターン生成装置100は、ブロックなしか否かを判断する(ステップS2407)。ステップS2407において、テストパターン生成装置100は、ブロック数が0であるか否かを判断することによってブロックなしか否かを判断する。ブロックなしと判断された場合(ステップS2407:Yes)、テストパターン生成装置100は、一連の処理を終了する。一方、ブロックありと判断された場合(ステップS2407:No)、テストパターン生成装置100は、ブロック数と分割数の最大公約数gを算出する(ステップS2408)。
つぎに、テストパターン生成装置100は、共通の約数を持つか否かを判断する(ステップS2409)。ステップS2409において、テストパターン生成装置100は、例えば、gが1でないかを判断する。共通の約数を持たないと判断された場合(ステップS2409:No)、テストパターン生成装置100は、余剰数=余剰数+1とし(ステップS2411)、ステップS2406へ戻る。共通の約数を持つと判断された場合(ステップS2409:Yes)、テストパターン生成装置100は、分配間隔=分割数/gとし(ステップS2410)、一連の処理を終了する。
図25は、図21で示した詳細位置集合決定処理(ステップS2107)の詳細な説明を示すフローチャートである。まず、テストパターン生成装置100は、「詳細位置集合=空」とする(ステップS2501)。つぎに、テストパターン生成装置100は、分配間隔があるか否かを判断する(ステップS2502)。ステップS2502において、テストパターン生成装置100は、例えば、分配間隔が0でないかを判断する。
分配間隔がないと判断された場合(ステップS2502:No)、テストパターン生成装置100は、ステップS2511へ移行する。分配間隔があると判断された場合(ステップS2502:Yes)、テストパターン生成装置100は、繰り返し数=分割数/分配間隔、メンバー数=ブロック数/繰り返し数とする(ステップS2503)。つぎに、テストパターン生成装置100は、r=0とする(ステップS2504)。テストパターン生成装置100は、r<繰り返し数であるか否かを判断する(ステップS2505)。r<繰り返し数であると判断された場合(ステップS2505:Yes)、テストパターン生成装置100は、「n=1」とする(ステップS2506)。
つぎに、テストパターン生成装置100は、n≦メンバー数であるか否かを判断する(ステップS2507)。n≦メンバー数であると判断された場合(ステップS2507:Yes)、テストパターン生成装置100は、mを詳細位置集合に追加する(ステップS2508)。ステップS2508におけるmは「(r*分配間隔)+n」である。つぎに、テストパターン生成装置100は、「n=n+1」とし(ステップS2509)、ステップS2507へ戻る。
一方、ステップS2507において、n≦メンバー数でないと判断された場合(ステップS2507:No)、テストパターン生成装置100は、「r=r+1」とし(ステップS2510)、ステップS2505へ戻る。
一方、ステップS2505において、r<繰り返し数でないと判断された場合(ステップS2505:No)、テストパターン生成装置100は、「n=1」とする(ステップS2511)。つぎに、テストパターン生成装置100は、n≦余剰数であるか否かを判断する(ステップS2512)。n≦余剰数であると判断された場合(ステップS2512:Yes)、テストパターン生成装置100は、mを詳細位置集合に追加する(ステップS2513)。ステップS2513におけるmは「分割数+n」である。つぎに、テストパターン生成装置100は、n=n+1とし(ステップS2514)、ステップS2512へ戻る。
ステップS2512において、n≦余剰数でないと判断された場合(ステップS2512:No)、テストパターン生成装置100は、一連の処理を終了する。
図26および図27は、図21で示した回路分割リスト作成処理(ステップS2108)の詳細な説明を示すフローチャートである。まず、テストパターン生成装置100は、最小オフセット=0、最小総トレースネット数=∞とする(ステップS2601)。テストパターン生成装置100は、オフセット=0とする(ステップS2602)。
テストパターン生成装置100は、オフセット<分割数であるか否かを判断する(ステップS2603)。オフセット<分割数であると判断された場合(ステップS2603:Yes)、テストパターン生成装置100は、総トレースネット数=0とする(ステップS2604)。テストパターン生成装置100は、i=0とする(ステップS2605)。テストパターン生成装置100は、i<ブロック数であるか否かを判断する(ステップS2606)。
i<ブロック数であると判断された場合(ステップS2606:Yes)、テストパターン生成装置100は、回路位置=(オフセット+位置集合[i])%分割数とする(ステップS2607)。テストパターン生成装置100は、総トレースネット数=分割回路[回路位置]の累積トレースネット数+ブロック[i]のトレースネット数とする(ステップS2608)。つぎに、テストパターン生成装置100は、「i=i+1」とし(ステップS2609)、ステップS2606へ戻る。
ステップS2606において、i<ブロック数でないと判断された場合(ステップS2606:No)、テストパターン生成装置100は、総トレースネット数<最小総トレースネット数であるか否かを判断する(ステップS2610)。総トレースネット数<最小総トレースネット数であると判断された場合(ステップS2610:Yes)、テストパターン生成装置100は、最小総トレースネット数=総トレースネット数とする(ステップS2611)。テストパターン生成装置100は、最小オフセット=オフセットとし(ステップS2612)、ステップS2613へ移行する。
一方、ステップS2610において、総トレースネット数<最小総トレースネット数でないと判断された場合(ステップS2610:No)、テストパターン生成装置100は、オフセット=オフセット+1とし(ステップS2613)、ステップS2603へ戻る。
ステップS2603において、オフセット<分割数でないと判断された場合(ステップS2603:No)、テストパターン生成装置100は、i=0とする(ステップS2701)。テストパターン生成装置100は、i<ブロック数であるか否かを判断する(ステップS2702)。i<ブロック数であると判断された場合(ステップS2702:Yes)、テストパターン生成装置100は、回路位置=(最小オフセット+位置集合[i])%分割数とする(ステップS2703)。
テストパターン生成装置100は、分割回路[回路位置]の累積トレースネット数+=ブロック[i]のトレースネット数とする(ステップS2704)。そして、テストパターン生成装置100は、回路分割リスト[回路位置]にブロック[i]を登録する(ステップS2705)。つぎに、テストパターン生成装置100は、「i=i+1」とし(ステップS2706)、ステップS2702へ戻る。また、ステップS2702において、i<ブロック数でないと判断された場合(ステップS2702:No)、テストパターン生成装置100は、一連の処理を終了する。
<クロックマージ>
最後に、複数のクロックパルスをマージする例について説明する。近年、プロセッサには複数のクロックドメインを有する場合がある。複数のクロックドメインが存在する場合にもスキャンFFにスキャン後にATPG(Automatic Test Pattern Generator)によって印加されるクロックパルスが1パルスに制限される場合がある。例えば、スキャン後に2発クロックパルスを対象回路に印加すると、1発目のクロックパルスによりスキャンFFのステートが更新される。このため、クロックドメイン間の渡り部分で正確なテスト生成を行うためには、スキャンFFの前段も更新の対象としなければならない。
複数のクロックドメインが存在する際に、スキャニング後に1発ずつクロックパルスを対象回路に印加する場合には、試験されていない回路に対しては改めてスキャンとクロック印加を行うため、テストパターンが増加するという問題点がある。上述したように、従来、テストパターン生成の対象回路に複数のクロックドメインがあり、クロックドメイン間においてデータ転送経路が混在しない場合に、スキャンFFに対してデータ転送方向とは逆順にクロック信号を供給する技術がある。
しかしながら、データ転送方向が複数ある場合に、単発のクロックでのATPGが想定する動作と一致しないため、ATPGでは故障を検出できない場合がある。そのため、従来通り印加を行うために、テストパターンが増加するという問題点がある。
本実施の形態では、テストパターン生成装置100は、データ転送方向の各々についての故障の数を特定し、特定した故障の数の比較によってテストパターン生成時のデータ転送方向を決定する。そして、本実施の形態では、テストパターン生成装置100は、決定したデータ転送方向と逆の方向についての故障をATPGの一時的に対象外化することを示す情報を出力する。これにより、ATPGが適用可能な範囲を大きくできるため、テストパターンの削減を図ることができる。
図28は、ドメイン間の信号の受け渡し領域のATPGとクロックパルスの印加順序例を示す説明図である。ここでは、対象回路には第1クロックドメインとしてクロックドメインAと、第1クロックドメインと異なる第2クロックドメインとしてクロックドメインBとがあるとする。図28には、クロックドメインAからクロックドメインBへデータ信号を受け渡す場合について、観測用FFのデータ入力である0故障を検出する例を挙げる。
クロックの印加の順番がクロックドメインA→クロックドメインBの順であると、クロックドメインAのクロックAの印加によってFFaとFFbのスキャン値が更新される。そのため、FFaとFFbとの設定ステートが故障観測前に更新される。
一方、クロックの印加の順番がクロックドメインB→クロックドメインAの順であると、クロックドメインBのクロックBの印加によって観測用FFスキャン値が更新される。その後、クロックドメインAのクロックAの印加によってFFaとFFbのスキャン値が更新される。このように、FFaとFFbとの設定ステートが故障観測後に更新される。したがって、クロックドメインB→クロックドメインAの順であると、観測用FFへのデータ信号の0故障を検出するためのテストパターンを作成可能である。
故障カウント部307は、第1クロックドメインに属するFFから第2クロックドメインに属するFFへ信号が受け渡される場合における第1数を特定する。第1数は第1クロックドメインに属するFFから第2クロックドメインに属するFFまでの間のデータパス上の故障の数である。この故障は(A→B)故障とも称する。
また、故障カウント部307は、第2クロックドメインに属するFFから第1クロックドメインに属するFFへ信号が受け渡される場合における第2数を特定する。第2数は、第2クロックドメインに属するFFから第1クロックドメインに属するFFまでの間のデータパス上の故障の数である。この故障は(B→A)故障とも称する。
故障カウント部307は、例えば、故障の各々について、上述のドメインマーカs[故障のネット番号]にクロックドメインAが存在し、かつドメインマーカr[故障のネット番号]にクロックドメインBが存在するか否かを判断する。故障カウント部307は、例えば、いずれにも存在すると判断した場合、(A→B)故障であると判断して故障カウンタF_ABをカウントアップする。カウント終了後の故障カウンタF_ABの結果が第1数となる。
また、故障カウント部307は、例えば、故障の各々について、ドメインマーカs[故障のネット番号]にクロックドメインBが存在し、かつドメインマーカr[故障のネット番号]にクロックドメインAが存在するか否かを判断する。故障カウント部307は、例えば、いずれにも存在すると判断した場合、(B→A)故障であると判断して故障カウンタF_BAをカウントアップする。カウント終了後の故障カウンタF_BAの値が第2数となる。
印加順序決定部308は、第1数と第2数との比較に基づいて、クロックドメインAのクロックAとクロックドメインBのクロックBとの入力順を決定する。印加順序決定部308は、例えば、第1数が第2数よりも大きい場合、クロックドメインBのクロックBからクロックドメインAのクロックAの順を入力順に決定する。一方、印加順序決定部308は、例えば、第2数が第1数よりも大きい場合、クロックドメインAのクロックAからクロックドメインBのクロックBの順を入力順に決定する。第1数と第2数とが同一値である場合は、いずれの順であってもよい。また、印加順序決定部308は、入力順の決定結果をクロック印加順序情報347としてRAM203、ROM202、ディスク205などの記憶装置に記憶する。
つぎに、対象外化決定部309は、ゲートの端子の各々についての故障のうち、決定した入力順と逆の順序によって検出可能な故障を示す情報を生成する。対象外化決定部309は、例えば、クロックAからクロックBの順を入力順に決定した場合、(A→B)故障を一時的にATPGの対象外とすることを示す対象外故障識別情報346を生成する。対象外化決定部309は、例えば、クロックBからクロックAの順を入力順に決定した場合、(B→A)故障を一時的にATPGの対象外とすることを示す対象外故障識別情報346を生成する。一時的に対象外とするとは、決定された入力順によって検出可能な故障についてのATPGを作成中に対象外とすることを示す。
図29は、故障識別およびクロック印加順序例を示す説明図である。図29の例では、印加順序決定部308は、(B→A)故障の第2数が(A→B)故障の第1数よりも多いいため、クロックの印加順をクロックAからクロックBに決定する。また、対象外化決定部309は、クロックドメインAに属するFF(A)からクロックドメインBに属するFF(B)までの間にあるデータパス上のゲート群についての故障をATPGの一時対象外化とすることを示す対象外故障識別情報346を生成する。また、対象外化決定部309は、対象外故障識別情報346をRAM203、ROM202、ディスク205などの記憶装置に記憶する。
図30は、クロックマージによるパターン削減例を示す説明図である。図30(a)にクロックドメインがAとBとの2つの場合における信号の受け渡し例を示す。信号の受け渡しは(A→A)、(B→B)、(A→B)、(B→A)の4通りである。
図30(a)においては、面積が故障数であり、換言するとクロック印加数を表す。従来では、クロック印加数は、単純にクロックドメインAのクロックAとクロックドメインBのクロックBとの和となる。そのため、図30(b)に示すように、従来におけるクロック印加数は、{(A→A)の数+(B→A)の数+(B→B)の数+(A→B)の数}である。
一方、本実施の形態では、(B→A)の故障数>(A→B)の故障数であるため、クロック印加順はクロックドメインAのクロックAからクロックドメインBのクロックBの順となる。そして、マージクロック(A→B)により、故障{(A→A)+(B→A)}と故障{(B→B)}がテスト対象となる。したがって、クロック印加数は、マージクロックにおける印加数と、(A→B)における印加数との和となる。このため、クロック印加数は、max{(A→A)の数+(B→B)の数,(B→B)の数}+(A→B)の数となる。max{(A→A)の数+(B→A)の数,(B→B)の数}は、(A→A)の数+(B→A)の数と、(B→B)の数と、のうち大きい方の数である。そのため、図30(c)の例では、(B→B)の数が削減可能となる。
(テストパターン生成装置100によるクロック印加順序決定処理手順例)
図31は、テストパターン生成装置によるクロック印加順序決定処理手順例を示すフローチャートである。ここでのクロック印加順序決定処理については、テストパターンを作成する度に実行されてもよい。まず、テストパターン生成装置100は、故障カウンタを初期化する(ステップS3101)。ステップS3101において、テストパターン生成装置100は、例えば、故障カウンタF_ABを0にする。また、ステップS3101において、テストパターン生成装置100は、故障カウンタF_BAを0にする。F_ABはクロックAからクロックBへの信号の受け渡しにおける故障カウンタである。F_BAはクロックBからクロックAへの信号の受け渡しにおける故障カウンタである。
テストパターン生成装置100は、未処理の仮定故障があるか否かを判断する(ステップS3102)。未処理の仮定故障があると判断された場合(ステップS3102:Yes)、テストパターン生成装置100は、未処理の仮定故障からいずれかの仮定故障を処理対象として選択する(ステップS3103)。
テストパターン生成装置100は、仮定故障fは検出済であるか否かを判断する(ステップS3104)。仮定故障fは検出済みであると判断された場合(ステップS3104:Yes)、テストパターン生成装置100は、ステップS3102へ戻る。一方、仮定故障fは検出済みでないと判断された場合(ステップS3104:No)、テストパターン生成装置100は、ネット番号←fの仮定されるネットとする(ステップS3105)。テストパターン生成装置100は、s[ネット番号]にAが存在し、かつr[ネット番号]にBが存在するか否かを判断する(ステップS3106)。s[ネット番号]にAが存在し、かつr[ネット番号]にBが存在すると判断された場合(ステップS3106:Yes)、テストパターン生成装置100は、ステップS3108へ移行する。s[ネット番号]にAが存在しない、またはr[ネット番号]にBが存在しないと判断された場合(ステップS3106:No)、テストパターン生成装置100は、F_AB=F_AB+1とする(ステップS3107)。
つぎに、テストパターン生成装置100は、s[ネット番号]にBが存在し、かつr[ネット番号]にAが存在するか否かを判断する(ステップS3108)。s[ネット番号]にBが存在し、かつr[ネット番号]にAが存在すると判断された場合(ステップS3108:Yes)、テストパターン生成装置100は、ステップS3102へ戻る。一方、s[ネット番号]にBが存在しない、またはr[ネット番号]にAが存在しないと判断された場合(ステップS3108:No)、テストパターン生成装置100は、「F_BA=F_BA+1」とし(ステップS3109)、ステップS3102に戻る。
ステップS3102において、未処理の仮定故障がないと判断された場合(ステップS3102:No)、テストパターン生成装置100は、F_AB>F_BAであるか否かを判断する(ステップS3110)。F_AB>F_BAであると判断された場合(ステップS3110:Yes)、テストパターン生成装置100は、印加順=B→Aとする(ステップS3111)。テストパターン生成装置100は、渡りB→A故障をATPGの一時対象外化し(ステップS3112)、一連の処理を終了する。
つぎに、F_AB>F_BAでないと判断された場合(ステップS3110:No)、テストパターン生成装置100は、印加順=A→Bとする(ステップS3113)。そして、テストパターン生成装置100は、渡りA→B故障をATPGの一時対象外化し(ステップS3114)、一連の処理を終了する。
以上説明したように、テストパターン生成装置100は、規模および機能に関する各特徴量の類似度に基づきグループ化した各ブロックについて、分割数とグループのブロック数の比率に基づき各ブロックを分割回路に割り当てる。すなわち、回路内の各ブロックの規模および機能に関する各特徴量の類似度に基づくグループのブロック数と分割回路の数との比率に基づき、グループの各ブロックを分割回路に割り当てることで、分割回路の特性の均等化を図る。これにより、特徴量が近いブロックが同じ分割回路に偏在しないようにでき、分割回路間の特性の均等化を図ることができる。
また、テストパターン生成装置100は、比率に応じた間隔と複数の分割回路に付された順序とによって複数の分割回路に割り当てた場合におけるブロックの接続関係に関する第3特徴量の合計値が最小となるように、グループに含まれるブロックを割り当てる。これにより、ブロックの接続関係による分割後の分割回路間の規模のばらつきの低減を図ることができる。
また、テストパターン生成装置100は、分割数をグループに含まれるブロックの数で割った時に余りがある場合、グループに含まれるブロックのうちの余りの数のブロックを複数の分割回路と異なる分割回路に割り当てる。余剰分のブロックの数は少ない可能性が高いため、余剰分のブロックを複数の分割回路に分配せずに異なる分割回路に割り当てることにより、分割回路による並列処理時に全体の性能の向上を図ることができる。
また、第2特徴量は、ブロックに含まれるスキャンFFの数である。これにより、機能や構成が近いと推定されるブロックを同一のグループとすることができる。
また、テストパターン生成装置100は、対象のFFとフォワード方向にあるFFとの間のデータパス上のゲート段数とクロックパス上のゲート段数との差分値に基づいて、対象のFFのデータ入力に付された冗長ディレーを削除する。これにより、レーシングを回避しつつ、回路モデルの縮小化を図ることができる。
また、テストパターン生成装置100は、対象のFFとバックワード方向にあるFFとの間のデータパス上のゲート段数と、バックワード方向にあるFFのクロックパス上のゲート段数との差分値に基づいて、対象のFFのデータ出力に付された冗長ディレーを削除する。これにより、レーシングを回避しつつ、回路モデルの縮小化を図ることができる。
また、テストパターン生成装置100は、ドメイン間でデータを受け渡す場合、ある転送方向におけるドメイン間の故障の数と、反対の転送方向におけるドメイン間の故障の数と、に基づくクロックの入力順と逆順で検出可能な故障を一時的にATPGの対象外とする。これにより、入力順において検出できない故障を対象外としておくことにより、入力順による故障検出と、同一クロックドメイン間での故障検出と、を同時に行うことができ、クロックの入力回数を減らすことができる。したがって、テストパターンの数を削減することができる。
なお、本実施の形態で説明したテストパターン生成方法は、予め用意されたテストパターン生成プログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本テストパターン生成プログラムは、磁気ディスク、光ディスク、USB(Universal Serial Bus)フラッシュメモリなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、テストパターン生成プログラムは、インターネット等のネットワーク209を介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)コンピュータが、
テストパターン生成の対象回路に含まれる複数のブロックの各々について、前記対象回路のゲートおよび前記ゲート間の接続関係を示す回路情報に基づく前記ブロックのサイズに関する第1特徴量と、前記回路情報に基づく前記ブロックの機能に関する第2特徴量と、を取得し、
取得した前記第1特徴量が第1所定範囲内であり、かつ取得した前記第2特徴量が第2所定範囲内であるブロックが同一のグループとなるように、前記複数のブロックを複数のグループに分類し、
分類した前記複数のグループの各々について、前記グループに含まれるブロックの数と、前記複数のブロックを分割する分割数と、の比率に基づいて、前記グループに含まれるブロックの各々を、前記分割数の複数の分割回路のいずれかに割り当てる、
処理を実行することを特徴とするテストパターン生成方法。
(付記2)前記取得する処理では、前記ブロックの各々について、前記回路情報に基づく前記ブロックに含まれるフリップフロップから、前記フリップフロップのフォワード方向にあるフリップフロップまでの間のパスに関する第3特徴量を取得し、
前記割り当てる処理では、前記グループの各々について、前記グループに含まれるブロックの各々を前記比率に応じた間隔と、前記複数の分割回路の各々に付された異なる順序と、によって前記複数の分割回路に割り当てた場合における前記複数の分割回路の各々についての前記第3特徴量の合計値が最小となるように、前記グループに含まれるブロックを割り当てる、
ことを特徴とする付記1に記載のテストパターン生成方法。
(付記3)前記割り当てる処理では、前記分割数を前記グループに含まれるブロックの数で割った時に余りがある場合、前記グループに含まれるブロックのうちの前記余りの数のブロックを前記複数の分割回路と異なる分割回路に割り当てる、
ことを特徴とする付記1または2に記載のテストパターン生成方法。
(付記4)前記第2特徴量は、前記ブロックに含まれるスキャン用のフリップフロップの数であることを特徴とする付記1〜3のいずれか一つに記載のテストパターン生成方法。
(付記5)前記コンピュータが、
前記ブロックに含まれるフリップフロップマクロであって、フリップフロップとデータパスとなり得る前記フリップフロップのデータ入力側とデータ出力側との少なくともいずれかに挿入された複数の冗長なディレーゲートとを有するフリップフロップマクロに含まれる前記フリップフロップから、前記フリップフロップのフォワード方向にあるフリップフロップまでの間のデータパス上のゲートの数と、前記ブロックに含まれる前記フリップフロップにクロック信号を供給するクロック端子から前記フリップフロップまでの間にあるクロックパス上のゲートの数と、の差分値を導出する処理を実行し、
前記回路情報は、導出した前記差分値に基づいて前記複数の冗長なディレーゲートのいずれかを削除した前記フリップフロップマクロを含む前記対象回路のゲートおよび前記ゲート間の接続関係を示すことを特徴とする付記1〜4のいずれか一つに記載のテストパターン生成方法。
(付記6)前記コンピュータが、
前記ブロックに含まれるフリップフロップマクロであって、フリップフロップとデータパスとなり得る前記フリップフロップのデータ入力側とデータ出力側との少なくともいずれかに挿入された複数の冗長なディレーゲートとを有するフリップフロップマクロに含まれる前記フリップフロップから、前記フリップフロップのバックワード方向にあるフリップフロップまでの間のデータパス上のゲートの数と、前記ブロックに含まれる前記フリップフロップにクロック信号を供給するクロック端子から前記フリップフロップまでの間にあるクロックパス上のゲートの数と、の差分値を導出する処理を実行し、
前記回路情報は、導出した前記差分値に基づいて前記複数の冗長なディレーゲートのいずれかを削除した前記フリップフロップマクロを含む前記対象回路のゲートおよび前記ゲート間の接続関係を示すことを特徴とする付記1〜5のいずれか一つに記載のテストパターン生成方法。
(付記7)前記コンピュータが、
前記対象回路には第1クロックドメインと、前記第1クロックドメインと異なる第2クロックドメインとがある場合、前記第1クロックドメインに属するフリップフロップから前記第2クロックドメインに属するフリップフロップへ信号が受け渡される場合における前記第1クロックドメインに属するフリップフロップから前記第2クロックドメインに属するフリップフロップまでの間のデータパス上の故障の第1数と、前記第2クロックドメインに属するフリップフロップから前記第1クロックドメインに属するフリップフロップへ信号が受け渡される場合における前記第2クロックドメインに属するフリップフロップから前記第1クロックドメインに属するフリップフロップまでの間のデータパス上の故障の第2数と、を特定し、
前記第1数と前記第2数との比較に基づいて、前記第1クロックドメインの第1クロックと前記第2クロックドメインの第2クロックとの入力順を決定し、
前記ゲートの端子の各々についての故障のうち、決定した前記入力順と逆の順序によって検出可能な故障を示す情報を生成する、
処理を実行することを特徴とする付記1〜6のいずれか一つに記載のテストパターン生成方法。
(付記8)コンピュータが、
テストパターン生成の対象回路のゲートおよび前記ゲート間の接続関係を示す第1回路情報を取得し、
前記第1回路情報が示す前記対象回路内のブロックに含まれるフリップフロップマクロであって、フリップフロップと、データパスとなり得る前記フリップフロップのデータ入力側とデータ出力側との少なくともいずれかに挿入された複数の冗長なディレーゲートと、を有するフリップフロップマクロに含まれる前記フリップフロップから、前記フリップフロップのフォワード方向にあるフリップフロップまでの間のデータパス上のゲートの数と、前記ブロックに含まれる前記フリップフロップにクロック信号を供給するクロック端子から前記フリップフロップまでの間にあるクロックパス上のゲートの数と、の差分値を導出し、
前記差分値に基づいて前記複数の冗長なディレーゲートのいずれかを削除した前記フリップフロップマクロを含む前記対象回路のゲートおよび前記ゲート間の接続関係を示す第2回路情報を生成する、
処理を実行することを特徴とするテストパターン生成方法。
(付記9)コンピュータが、
テストパターン生成の対象回路のゲートおよび前記ゲート間の接続関係を示す第1回路情報を取得し、
前記第1回路情報が示す前記対象回路内のブロックに含まれるフリップフロップマクロであって、フリップフロップと、データパスとなり得る前記フリップフロップのデータ入力側とデータ出力側との少なくともいずれかに挿入された複数の冗長なディレーゲートと、を有するフリップフロップマクロに含まれる前記フリップフロップから、前記フリップフロップのバックワード方向にあるフリップフロップまでの間のデータパス上のゲートの数と、前記ブロックに含まれる前記フリップフロップにクロック信号を供給するクロック端子から前記フリップフロップまでの間にあるクロックパス上のゲートの数と、の差分値を導出し、
前記差分値に基づいて前記複数の冗長なディレーゲートのいずれかを削除した前記フリップフロップマクロを含む前記対象回路のゲートおよび前記ゲート間の接続関係を示す第2回路情報を生成する、
処理を実行することを特徴とするテストパターン生成方法。
(付記10)コンピュータが、
テストパターン生成の対象回路には第1クロックドメインと、前記第1クロックドメインと異なる第2クロックドメインとがある場合、前記対象回路に含まれるゲートの端子の各々についての故障のうち、前記第1クロックドメインに属するフリップフロップから前記第2クロックドメインに属するフリップフロップへ受け渡される信号のパス上の故障の第1数と、前記第2クロックドメインに属するフリップフロップから前記第1クロックドメインに属するフリップフロップへ受け渡される信号のパス上の故障の第2数と、を特定し、
前記第1数と前記第2数との比較に基づいて、前記第1クロックドメインの第1クロックと前記第2クロックドメインの第2クロックとの入力順を決定し、
前記ゲートの端子の各々についての故障のうち、決定した前記入力順と逆の順序によって検出可能な故障を示す情報を生成する、
処理を実行することを特徴とするテストパターン生成方法。
(付記11)コンピュータに、
テストパターン生成の対象回路に含まれる複数のブロックの各々について、前記対象回路のゲートおよび前記ゲート間の接続関係を示す回路情報に基づく前記ブロックのサイズに関する第1特徴量と、前記回路情報に基づく前記ブロックの機能に関する第2特徴量と、を取得し、
取得した前記第1特徴量が第1所定範囲内であり、かつ取得した前記第2特徴量が第2所定範囲内であるブロックが同一のグループとなるように、前記複数のブロックを複数のグループに分類し、
分類した前記複数のグループの各々について、前記グループに含まれるブロックの数と、前記複数のブロックを分割する分割数と、の比率に基づいて、前記グループに含まれるブロックの各々を、前記分割数の複数の分割回路のいずれかに割り当てる、
処理を実行させることを特徴とするテストパターン生成プログラム。
(付記12)コンピュータに、
テストパターン生成の対象回路のゲートおよび前記ゲート間の接続関係を示す第1回路情報を取得し、
前記第1回路情報が示す前記対象回路内のブロックに含まれるフリップフロップマクロであって、フリップフロップと、データパスとなり得る前記フリップフロップのデータ入力側とデータ出力側との少なくともいずれかに挿入された複数の冗長なディレーゲートと、を有するフリップフロップマクロに含まれる前記フリップフロップから、前記フリップフロップのフォワード方向にあるフリップフロップまでの間のデータパス上のゲートの数と、前記ブロックに含まれる前記フリップフロップにクロック信号を供給するクロック端子から前記フリップフロップまでの間にあるクロックパス上のゲートの数と、の差分値を導出し、
前記差分値に基づいて前記複数の冗長なディレーゲートのいずれかを削除した前記フリップフロップマクロを含む前記対象回路のゲートおよび前記ゲート間の接続関係を示す第2回路情報を生成する、
処理を実行させることを特徴とするテストパターン生成プログラム。
(付記13)コンピュータに、
テストパターン生成の対象回路のゲートおよび前記ゲート間の接続関係を示す第1回路情報を取得し、
前記第1回路情報が示す前記対象回路内のブロックに含まれるフリップフロップマクロであって、フリップフロップと、データパスとなり得る前記フリップフロップのデータ入力側とデータ出力側との少なくともいずれかに挿入された複数の冗長なディレーゲートと、を有するフリップフロップマクロに含まれる前記フリップフロップから、前記フリップフロップのバックワード方向にあるフリップフロップまでの間のデータパス上のゲートの数と、前記ブロックに含まれる前記フリップフロップにクロック信号を供給するクロック端子から前記フリップフロップまでの間にあるクロックパス上のゲートの数と、の差分値を導出し、
前記差分値に基づいて前記複数の冗長なディレーゲートのいずれかを削除した前記フリップフロップマクロを含む前記対象回路のゲートおよび前記ゲート間の接続関係を示す第2回路情報を生成する、
処理を実行させることを特徴とするテストパターン生成プログラム。
(付記14)コンピュータに、
テストパターン生成の対象回路には第1クロックドメインと、前記第1クロックドメインと異なる第2クロックドメインとがある場合、前記対象回路に含まれるゲートの端子の各々についての故障のうち、前記第1クロックドメインに属するフリップフロップから前記第2クロックドメインに属するフリップフロップへ受け渡される信号のパス上の故障の第1数と、前記第2クロックドメインに属するフリップフロップから前記第1クロックドメインに属するフリップフロップへ受け渡される信号のパス上の故障の第2数と、を特定し、
前記第1数と前記第2数との比較に基づいて、前記第1クロックドメインの第1クロックと前記第2クロックドメインの第2クロックとの入力順を決定し、
前記ゲートの端子の各々についての故障のうち、決定した前記入力順と逆の順序によって検出可能な故障を示す情報を生成する、
処理を実行させることを特徴とするテストパターン生成プログラム。
(付記15)テストパターン生成の対象回路に含まれる複数のブロックの各々について、前記対象回路のゲートおよび前記ゲート間の接続関係を示す回路情報に基づく前記ブロックのサイズに関する第1特徴量と、前記回路情報に基づく前記ブロックの機能に関する第2特徴量と、を取得し、
取得した前記第1特徴量が第1所定範囲内であり、かつ取得した前記第2特徴量が第2所定範囲内であるブロックが同一のグループとなるように、前記複数のブロックを複数のグループに分類し、
分類した前記複数のグループの各々について、前記グループに含まれるブロックの数と、前記複数のブロックを分割する分割数と、の比率に基づいて、前記グループに含まれるブロックの各々を、前記分割数の複数の分割回路のいずれかに割り当てる、
処理を実行する制御部を有することを特徴とするテストパターン生成装置。
(付記16)テストパターン生成の対象回路のゲートおよび前記ゲート間の接続関係を示す第1回路情報を取得し、
前記第1回路情報が示す前記対象回路内のブロックに含まれるフリップフロップマクロであって、フリップフロップと、データパスとなり得る前記フリップフロップのデータ入力側とデータ出力側との少なくともいずれかに挿入された複数の冗長なディレーゲートと、を有するフリップフロップマクロに含まれる前記フリップフロップから、前記フリップフロップのフォワード方向にあるフリップフロップまでの間のデータパス上のゲートの数と、前記ブロックに含まれる前記フリップフロップにクロック信号を供給するクロック端子から前記フリップフロップまでの間にあるクロックパス上のゲートの数と、の差分値を導出し、
前記差分値に基づいて前記複数の冗長なディレーゲートのいずれかを削除した前記フリップフロップマクロを含む前記対象回路のゲートおよび前記ゲート間の接続関係を示す第2回路情報を生成する、
処理を実行する制御部を有することを特徴とするテストパターン生成装置。
(付記17)テストパターン生成の対象回路のゲートおよび前記ゲート間の接続関係を示す第1回路情報を取得し、
前記第1回路情報が示す前記対象回路内のブロックに含まれるフリップフロップマクロであって、フリップフロップと、データパスとなり得る前記フリップフロップのデータ入力側とデータ出力側との少なくともいずれかに挿入された複数の冗長なディレーゲートと、を有するフリップフロップマクロに含まれる前記フリップフロップから、前記フリップフロップのバックワード方向にあるフリップフロップまでの間のデータパス上のゲートの数と、前記ブロックに含まれる前記フリップフロップにクロック信号を供給するクロック端子から前記フリップフロップまでの間にあるクロックパス上のゲートの数と、の差分値を導出し、
前記差分値に基づいて前記複数の冗長なディレーゲートのいずれかを削除した前記フリップフロップマクロを含む前記対象回路のゲートおよび前記ゲート間の接続関係を示す第2回路情報を生成する、
処理を実行する制御部を有することを特徴とするテストパターン生成装置。
(付記18)テストパターン生成の対象回路には第1クロックドメインと、前記第1クロックドメインと異なる第2クロックドメインとがある場合、前記対象回路に含まれるゲートの端子の各々についての故障のうち、前記第1クロックドメインに属するフリップフロップから前記第2クロックドメインに属するフリップフロップへ受け渡される信号のパス上の故障の第1数と、前記第2クロックドメインに属するフリップフロップから前記第1クロックドメインに属するフリップフロップへ受け渡される信号のパス上の故障の第2数と、を特定し、
前記第1数と前記第2数との比較に基づいて、前記第1クロックドメインの第1クロックと前記第2クロックドメインの第2クロックとの入力順を決定し、
前記ゲートの端子の各々についての故障のうち、決定した前記入力順と逆の順序によって検出可能な故障を示す情報を生成する、
処理を実行する制御部を有することを特徴とするテストパターン生成装置。
(付記19)テストパターン生成の対象回路に含まれる複数のブロックの各々について、前記対象回路のゲートおよび前記ゲート間の接続関係を示す回路情報に基づく前記ブロックのサイズに関する第1特徴量と、前記回路情報に基づく前記ブロックの機能に関する第2特徴量と、を取得し、
取得した前記第1特徴量が第1所定範囲内であり、かつ取得した前記第2特徴量が第2所定範囲内であるブロックが同一のグループとなるように、前記複数のブロックを複数のグループに分類し、
分類した前記複数のグループの各々について、前記グループに含まれるブロックの数と、前記複数のブロックを分割する分割数と、の比率に基づいて、前記グループに含まれるブロックの各々を、前記分割数の複数の分割回路のいずれかに割り当てる、
処理をコンピュータに実行させるテストパターン生成プログラムを記録したことを特徴とする記録媒体。
(付記20)テストパターン生成の対象回路のゲートおよび前記ゲート間の接続関係を示す第1回路情報を取得し、
前記第1回路情報が示す前記対象回路内のブロックに含まれるフリップフロップマクロであって、フリップフロップと、データパスとなり得る前記フリップフロップのデータ入力側とデータ出力側との少なくともいずれかに挿入された複数の冗長なディレーゲートと、を有するフリップフロップマクロに含まれる前記フリップフロップから、前記フリップフロップのフォワード方向にあるフリップフロップまでの間のデータパス上のゲートの数と、前記ブロックに含まれる前記フリップフロップにクロック信号を供給するクロック端子から前記フリップフロップまでの間にあるクロックパス上のゲートの数と、の差分値を導出し、
前記差分値に基づいて前記複数の冗長なディレーゲートのいずれかを削除した前記フリップフロップマクロを含む前記対象回路のゲートおよび前記ゲート間の接続関係を示す第2回路情報を生成する、
処理をコンピュータに実行させるテストパターン生成プログラムを記録したことを特徴とする記録媒体。
(付記21)テストパターン生成の対象回路のゲートおよび前記ゲート間の接続関係を示す第1回路情報を取得し、
前記第1回路情報が示す前記対象回路内のブロックに含まれるフリップフロップマクロであって、フリップフロップと、データパスとなり得る前記フリップフロップのデータ入力側とデータ出力側との少なくともいずれかに挿入された複数の冗長なディレーゲートと、を有するフリップフロップマクロに含まれる前記フリップフロップから、前記フリップフロップのバックワード方向にあるフリップフロップまでの間のデータパス上のゲートの数と、前記ブロックに含まれる前記フリップフロップにクロック信号を供給するクロック端子から前記フリップフロップまでの間にあるクロックパス上のゲートの数と、の差分値を導出し、
前記差分値に基づいて前記複数の冗長なディレーゲートのいずれかを削除した前記フリップフロップマクロを含む前記対象回路のゲートおよび前記ゲート間の接続関係を示す第2回路情報を生成する、
処理をコンピュータに実行させるテストパターン生成プログラムを記録したことを特徴とする記録媒体。
(付記22)テストパターン生成の対象回路には第1クロックドメインと、前記第1クロックドメインと異なる第2クロックドメインとがある場合、前記対象回路に含まれるゲートの端子の各々についての故障のうち、前記第1クロックドメインに属するフリップフロップから前記第2クロックドメインに属するフリップフロップへ受け渡される信号のパス上の故障の第1数と、前記第2クロックドメインに属するフリップフロップから前記第1クロックドメインに属するフリップフロップへ受け渡される信号のパス上の故障の第2数と、を特定し、
前記第1数と前記第2数との比較に基づいて、前記第1クロックドメインの第1クロックと前記第2クロックドメインの第2クロックとの入力順を決定し、
前記ゲートの端子の各々についての故障のうち、決定した前記入力順と逆の順序によって検出可能な故障を示す情報を生成する、
処理をコンピュータに実行させるテストパターン生成プログラムを記録したことを特徴とする記録媒体。