(57)【要約】【課題】大規模な回路でホールドタイムエラーが発生している場合であっても、セットアップタイムエラーを生じさせずにホールドタイムエラーを収束することが比較的容易にできるホールドタイムエラー収束方法、装置、及びコンピュータプログラムを提供する。【解決手段】ホールドタイムエラーが発生しているエラーパスに含まれる第一、第二のエラーパスについて、第一のエラーパスと始点を共有し、第二のエラーパスと終点を共有する共有パスが存在する場合は、第一、第二のエラーパスをグループ化し、グループ化されたエラーパスを単位に、セットアップタイムエラーが生じないように遅延素子を挿入する。グループ外のノードについては、考慮せずともホールドタイムエラーが収束でき、また、遅延素子の挿入によって、グループ外のパスにセットアップタイムエラーを生じさせる恐れもない。【選択図】図１
2010073136.tif 000002
【特許請求の範囲】
【請求項１】
対象とする回路について、ホールドタイムエラーが発生しているエラーパスをリストアップするステップと、
前記エラーパスに含まれる第一、第二のエラーパスについて、前記第一のエラーパスと始点を共有し、前記第二のエラーパスと終点を共有する共有パスが存在する場合は、前記第一、第二のエラーパスをグループ化するステップと、
前記グループ化されたエラーパスを単位にセットアップタイムエラーを生じさせないように遅延素子を挿入し、前記ホールドタイムエラーを収束させるステップと、
を含むことを特徴とするホールドタイムエラーの収束方法。
【請求項２】
前記エラーパスの各ノード毎にセットアップ余裕値を求めるステップと、
前記グループ化したエラーパスについて、前記共有パスと前記第一のエラーパスとで共有するノードと、前記共有パスと前記第二のエラーパスとで共有するノードとをグループ内相互影響ノードとして求めるステップと、
をさらに含み、
前記ホールドタイムエラーを収束させるステップは、当該遅延素子の含まれるエラーパスの各ノードのセットアップ余裕値と、前記遅延素子を前記グループ内相互影響ノードに挿入した場合にはグループ内相互影響ノードのセットアップ余裕値と、を前記挿入した遅延素子の遅延値によって、一律に更新し、前記遅延素子の挿入と前記セットアップ余裕値の更新とをホールドタイムエラーが収束するまで繰り返すステップであることを特徴とする請求項１記載のホールドタイムエラーの収束方法。
【請求項３】
前記ホールドタイムエラーを収束させるステップは、
ホールドタイムエラーが発生しているパスのうち、優先的に収束させるエラーパスを決定するステップと、
前記優先的に収束させるエラーパスのホールドタイムエラーを収束させるステップと、
前記優先的に収束させるエラーパスと同一グループの他のエラーパスのホールドタイムエラーを収束させるステップと、
前記グループ以外のエラーパスのホールドタイムエラーを収束させるステップと、
を含むことを特徴とする請求項１または２記載のホールドタイムエラーの収束方法。
【請求項４】
前記他のエラーパスのホールドタイムエラーを収束させるステップは、すでに収束させたエラーパスを除く当該他のエラーパスとグループ化されているエラーパスを単位にホールドタイムエラーを収束させることを特徴とする請求項３記載のホールドタイムエラーの収束方法。
【請求項５】
前記請求項２記載のホールドタイムエラーの収束方法が、複数の遅延ライブラリを用いて行ったタイミング解析によっていずれかの遅延ライブラリでホールドタイムエラーが発生した場合に、いずれの遅延ライブラリにおいても、セットアップタイムエラーが生じないようにホールドタイムエラーを収束させる方法であって、
前記エラーパスをリストアップするステップが、前記複数の遅延ライブラリのうち、いずれかの遅延ライブラリでホールドタイムエラーが発生しているエラーパスをリストアップするステップであって、
前記セットアップ余裕値を求めるステップが、前記複数の遅延ライブラリについてそれぞれセットアップ余裕値を求めるステップであって、
前記ホールドタイムエラーを収束させるステップが、前記グループ化されたエラーパスを単位にいずれの遅延ライブラリを用いてもセットアップタイムエラーを生じさせないように各遅延ライブラリに対して共通に遅延素子を挿入して、前記ホールドタイムエラーを収束させるステップであって、各遅延ライブラリ毎に、当該遅延素子の含まれるエラーパスの各ノードのセットアップ余裕値と、前記遅延素子を前記グループ内相互影響ノードに挿入した場合にはグループ内相互影響ノードのセットアップ余裕値と、を前記挿入した遅延素子の遅延値によって、一律に更新し、前記遅延素子の挿入と前記セットアップ余裕値の更新とをホールドタイムエラーが収束するまで繰り返すステップであることを特徴とするホールドタイムエラーの収束方法。
【請求項６】
前記複数の遅延ライブラリは、半導体集積回路の設計に用いる回路素子の遅延時間をモデル化したライブラリであって、それぞれ使用条件、製造工程のうち少なくとも一つが異なる場合の前記回路素子の遅延時間をモデル化した遅延ライブラリであることを特徴とする請求項５記載のホールドタイムエラーの収束方法。
【請求項７】
ホールドタイムエラーが発生したエラーパスと、そのホールドタイム違反値と、を記憶するホールドタイムエラー記憶部と、
前記エラーパスの各ノードについてセットアップ余裕値を記憶するセットアップ余裕値記憶部と、
前記エラーパスに含まれる第一、第二のエラーパスについて、前記第一のエラーパスと始点を共有し、前記第二のエラーパスと終点を共有する共有パスが存在する場合は、前記第一、第二のエラーパスをグループ化情報として記憶するグループ情報記憶部と、
前記共有パスと前記第一のエラーパスとで共有するノードと、前記共有パスと前記第二のエラーパスとで共有するノードと、をグループ内相互影響ノードとして記憶するグループ内相互影響ノード記憶部と、
前記各ノードのセットアップ余裕値の範囲内でホールドタイムエラーを収束させるように遅延素子を挿入する遅延素子挿入部と、
前記遅延素子の挿入に伴って、遅延素子を挿入したエラーパスに含まれる各ノードのセットアップ余裕値を前記遅延素子の遅延値によって一律に更新すると共に、前記遅延素子を挿入する箇所が前記グループ内相互影響ノードであったならば、当該グループ内相互影響ノードに含まれる当該エラーパス以外のノードのセットアップ余裕値を前記遅延素子の遅延値によって一律に更新するセットアップ余裕値更新部と、
を有することを特徴とするホールドタイムエラー収束装置。
【請求項８】
収束対象とする回路のネットリストを記憶するネットリスト記憶部と、
前記ネットリスト記憶部から前記ネットリストを、前記ホールドタイムエラー記憶部から前記エラーパスを入力し、前記グループ化情報と、前記グループ内相互影響ノードを求め、前記グループ化情報を前記グループ情報記憶部へ、前記グループ内相互影響ノードを前記グループ内相互影響ノード記憶部へ出力するグループ情報解析部をさらに備えたことを特徴とする請求項７記載のホールドタイムエラー収束装置。
【請求項９】
前記ホールドタイムエラー収束装置が、複数の遅延ライブラリを用いて行ったタイミング解析によっていずれかの遅延ライブラリでホールドタイムエラーが発生した場合に、いずれの遅延ライブラリにおいても、セットアップタイムエラーが生じないようにホールドタイムエラーを収束させるホールドタイムエラー収束装置であって、
前記セットアップ余裕値記憶部が、前記複数の遅延ライブラリについてそれぞれセットアップ余裕値を記憶し、
前記遅延素子挿入部が、前記いずれの遅延ライブラリを用いても前記各ノードのセットアップ余裕値の範囲内でホールドタイムエラーを収束させるように各遅延ライブラリに対して共通に遅延素子を挿入し、
前記セットアップ余裕値更新部が、前記各遅延ライブラリについて、前記遅延素子の挿入に伴って遅延素子を挿入したエラーパスに含まれる各ノードのセットアップ余裕値を前記遅延素子の遅延値によって一律に更新すると共に、前記遅延素子を挿入する箇所が前記グループ内相互影響ノードであったならば、当該グループ内相互影響ノードに含まれる当該エラーパス以外のノードのセットアップ余裕値を前記遅延素子の遅延値によって一律に更新することを特徴とする請求項７又は８記載のホールドタイムエラー収束装置。
【請求項１０】
コンピュータに請求項１乃至６いずれか１項記載のホールドタイムエラーの収束方法を実行させるためのプログラム。
【請求項１１】
コンピュータを請求項７乃至９いずれか１項記載のホールドタイムエラー収束装置として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ホールドタイムエラーの収束方法、装置、プログラムに関する。特に、クロックに同期して動作する論理回路において、ホールドタイムエラーが発生した場合に、セットアップタイムエラーを生じさせずにホールドタイムエラーを収束させる方法、装置、コンピュータプログラムに関する。
【背景技術】
【０００２】
従来のホールドタイムエラーの収束方法が特許文献１に記載されている。図１９は、この特許文献１に記載されているホールドタイムエラー収束方法の原理を説明する図である。図１９は、特許文献１の図１と実質的に同一の図面である。
【０００３】
この方法は、図１９（Ｂ）に記載されているようなクロックに同期して動作する順序回路と組み合わせ回路によって構成され、前段の順序回路の出力（ＦＦ１Ｑ、ＦＦ３Ｑ）と次段の順序回路の入力（ＦＦ２Ｄ、ＦＦ４Ｄ）との間に組み合わせ回路（ＬＯＧＩＣ、ＡＮＤ）が配置された典型的なクロックに同期して動作する論理回路を対象としている。
【０００４】
この特許文献１によれば、図１９（Ａ）のステップＳ１０１により、各パスについて、ホールドタイム違反値と、ホールドタイム違反が生じているかいないかに係わらずすべてのパスについてセットアップ余裕値を求める（図１９（Ｃ）参照。Ｔｈはホールドタイム違反値、Ｔｓはセットアップ余裕値）。
【０００５】
次に、違反対策が可能であれば（ステップＳ１０６）、ほぼ全ての素子の入出力端子について、最小セットアップ余裕値を求める。最小セットアップ余裕値とは、その入出力端子を通過するパス毎にセットアップ余裕値が存在するが、その中で最も余裕のないセットアップ余裕値が最小セットアップ余裕値である（Ｓ１０２、図１９（Ｄ）参照。Ｔｓｍが最小セットアップ余裕値、Ｅｐはホールド違反パス数、ＦＦＰＡＴＨは端子を通過するパス）。
【０００６】
上記図１９（Ｃ）（Ｄ）のデータに基づいて、ホールドタイムエラーを収束させるために遅延素子を挿入する箇所を決定し（Ｓ１０３）、遅延素子を挿入する（Ｓ１０４）。遅延素子の挿入によって、図１９（Ｃ）、（Ｄ）のデータは変動するので、このデータを更新する（Ｓ１０５）。この一連の動作を違反対策が可能である限り続けると記載されている。
【特許文献１】特開２００４−３８３８３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
特許文献１によれば、ある程度の回路規模までならば、セットアップタイムエラーを生じさせずにホールドタイムエラーを収束することは可能であると考えられる。
【０００８】
しかし、対象となる回路規模が大きくなると、特許文献１に開示された方法では、合理的な時間内にホールドタイムエラーを収束させることは困難である。
【０００９】
すなわち、遅延素子を一つ挿入する毎に、ホールドタイムエラーが生じてないパスも含めて各パスのホールドタイム違反値とセットアップ余裕値を求め、各素子の入出力端子毎の最小セットアップ余裕値を求めなければならない。ある程度の回路規模を超えるこの処理には最先端のＥＷＳ装置を使用して処理をしたとしても合理的な時間内に、ホールドタイムエラーを収束させることは困難である。
【課題を解決するための手段】
【００１０】
本発明の１つの側面に係るホールドタイムエラーの収束方法は、対象とする回路について、ホールドタイムエラーが発生しているエラーパスをリストアップするステップと、前記エラーパスに含まれる第一、第二のエラーパスについて前記第一のエラーパスと始点を共有し前記第二のエラーパスと終点を共有する共有パスが存在する場合は前記第一、第二のエラーパスをグループ化するステップと、前記グループ化されたエラーパスを単位にセットアップタイムエラーを生じさせないように遅延素子を挿入し前記ホールドタイムエラーを収束させるステップと、を含むことを特徴とする。
【００１１】
また、本発明の他の側面に係るホールドタイムエラー収束装置は、ホールドタイムエラーが発生したエラーパスとそのホールドタイム違反値とを記憶するホールドタイムエラー記憶部と、前記エラーパスの各ノードについてセットアップ余裕値を記憶するセットアップ余裕値記憶部と、前記エラーパスに含まれる第一、第二のエラーパスについて前記第一のエラーパスと始点を共有し前記第二のエラーパスと終点を共有する共有パスが存在する場合は前記第一、第二のエラーパスをグループ化情報として記憶するグループ情報記憶部と、前記共有パスと前記第一のエラーパスとで共有するノードと前記共有パスと前記第二のエラーパスとで共有するノードとをグループ内相互影響ノードとして記憶するグループ内相互影響ノード記憶部と、前記各ノードのセットアップ余裕値の範囲内でホールドタイムエラーを収束させるように遅延素子を挿入する遅延素子挿入部と、前記遅延素子の挿入に伴って遅延素子を挿入したエラーパスに含まれる各ノードのセットアップ余裕値を前記遅延素子の遅延値によって一律に更新すると共に前記遅延素子を挿入する箇所が前記グループ内相互影響ノードであったならば当該グループ内相互影響ノードに含まれる当該エラーパス以外のノードのセットアップ余裕値を前記遅延素子の遅延値によって一律に更新するセットアップ余裕値更新部と、を有することを特徴とする。
【００１２】
さらに、本発明の他の側面に係るプログラムは、コンピュータに上記ホールドタイムエラーの収束方法を実行させるためのプログラムである。
【００１３】
また、本発明の他の側面に係るプログラムは、コンピュータを上記ホールドタイムエラー収束装置として機能させるためのプログラムである。
【発明の効果】
【００１４】
本発明によれば、回路が大規模であっても、比較的容易にホールドタイムエラーが収束できる。すなわち、ホールドタイムエラーが発生しているエラーパスに含まれる第一、第二のエラーパスについて、第一のエラーパスと始点を共有し、第二のエラーパスと終点を共有する共有パスが存在する場合は、第一、第二のエラーパスをグループ化し、グループ化されたエラーパスを単位にホールドタイムエラーを収束させるようにしたので、グループ以外のパスやノードを考慮することなく、ホールドタイムエラーを収束させることができる。
【発明を実施するための最良の形態】
【００１５】
本発明の実施形態について、必要に応じて図面を参照して説明する。なお、実施形態の説明において引用する図面及び図面の符号は実施形態の一例として示すものであり、それにより本発明による実施形態のバリエーションを制限するものではない。
【００１６】
本発明の一実施形態によるホールドタイムエラーの収束方法は、図１、図１６に示すように、対象とする回路（例えば、図４や図８の回路）について、ホールドタイムエラーが発生しているエラーパスをリストアップするステップ（Ｓ２）と、エラーパスに含まれる第一、第二のエラーパスについて第一のエラーパス（例えば、図８のＦＦ３→Ａ１→ＦＦ５）と始点（ＦＦ３）を共有し第二のエラーパス（ＦＦ１→Ａ３→Ａ２→ＦＦ４）と終点（ＦＦ4）を共有する共有パス（ＦＦ３→Ａ１→Ａ２→ＦＦ４）が存在する場合は第一、第二のエラーパスをグループ化するステップ（Ｓ４）と、グループ化されたエラーパスを単位にセットアップタイムエラーを生じさせないように遅延素子（図６や図１１のＤｅｌａｙ素子）を挿入し（Ｓ８、Ｓ２８）、ホールドタイムエラーを収束させるステップ（Ｓ１０、Ｓ３０のＹｅｓ）と、を含む。
【００１７】
本発明者の着眼によれば、ホールドタイムエラーを収束するために遅延素子を挿入するのは、ホールドタイムエラーが発生しているパスに限られ、それ以外の箇所に遅延素子を挿入することはない。また、エラーパスにおける各ノードのセットアップ余裕値の範囲内で遅延素子を挿入する限り、エラーパスに遅延素子を挿入しても、エラーパス以外でセットアップタイムエラーを発生させることはない。ただし、遅延素子を挿入しようとするエラーパスと他のエラーパスとの間で一方のエラーパスと始点を共有し、他方のエラーパスと終点を共有するパスが存在する場合に、遅延素子を挿入するとその共有パスを介して、相互のセットアップ余裕値に影響を与えることがある。上記認識に基づいて、ホールドタイムエラーが発生したエラーパスの中で、共有パスを有するエラーパスについて、グループ化してホールドタイムエラーを収束させれば、当該エラーパス以外のパスやノードについて考慮しなくとも、ホールドタイムエラーを収束させることができ、また、セットアップタイムエラーを発生させることもない。なお、共有パス自身は、エラーパスでなくとも、第一、第二のエラーパスと始点、終点を共有するパスが存在する限り、第一のエラーパスと第二のエラーパスとをグループ化する。
【００１８】
なお、本発明において、「エラーパス」とは、「ホールドタイムエラーが発生しているパス」のことである。記載が冗長になるのを避けるため、本明細書においては、「ホールドタイムエラーが発生しているパス」のことを単に「エラーパス」と呼ぶ。
【００１９】
また、本発明の一実施形態によるホールドタイムエラーの収束方法は、図１、図１６に示すように、エラーパスの各ノード（順序回路または組み合わせ回路の入出力端子）毎にセットアップ余裕値を求めるステップと、グループ化したエラーパス（たとえば、図８の「ＦＦ３→Ａ１→ＦＦ５」と「ＦＦ１→Ａ３→Ａ２→ＦＦ４」）について、共有パス（「ＦＦ３→Ａ１→Ａ２→ＦＦ４」）と第一のエラーパス（「ＦＦ３→Ａ１→ＦＦ５」）とで共有するノード（ＦＦ３／Ｑ、Ａ１／Ｂ、Ａ１/Ｙ）と、共有パス（「ＦＦ３→Ａ１→Ａ２→ＦＦ４」）と第二のエラーパス（「ＦＦ１→Ａ３→Ａ２→ＦＦ４」）とで共有するノード（Ａ２／Ｙ、ＦＦ４／ＤＡＴＡ）とをグループ内相互影響ノード（ＦＦ３／Ｑ、Ａ１／Ｂ、Ａ１/Ｙ、Ａ２／Ｙ、ＦＦ４／ＤＡＴＡ）として求めるステップ（Ｓ５）と、をさらに含み、ホールドタイムエラーを収束させるステップは、当該遅延素子（例えば、図９のＦＦ３のＱ出力に設けた遅延素子）の含まれるエラーパスの各ノードのセットアップ余裕値と、遅延素子をグループ内相互影響ノードに挿入した場合にはグループ内相互影響ノードのセットアップ余裕値と、を挿入した遅延素子の遅延値によって、一律に更新し、遅延素子の挿入とセットアップ余裕値の更新とをホールドタイムエラーが収束するまで繰り返すステップであってもよい。
【００２０】
すなわち、本発明によれば、セットアップ余裕値を求めるのは、エラーパスに含まれるノードについて、求めれば十分である。エラーパスに含まれないノードについては、セットアップ余裕値は求める必要がない。遅延素子を挿入する可能性があるのは、エラーパスに含まれるノードに限られるからである。当該ノードのセットアップ余裕値の範囲内で遅延素子を挿入する限りにおいて、他のノードのセットアップ余裕値を考慮せずともその遅延素子の挿入によってセットアップタイムエラーを生じることはない。
【００２１】
また、遅延素子を挿入した場合に、セットアップ余裕値を更新する必要があるのは、原則として、当該遅延素子を挿入したエラーパスにおける各ノードのみである。ただし、遅延素子を挿入したノードがグループ内相互影響ノードである場合には、クループ内の他のエラーパスの相互影響ノードのセットアップ余裕値を更新する必要がある。
【００２２】
他のノードについても、遅延素子を挿入したことにより、セットアップ余裕値が影響を受ける場合はある。しかし、影響を受ける他のノードは、いずれもエラーパスのノードではないので、上述したように、遅延素子を挿入する予定がなく、セットアップ余裕値はそもそも求める必要がない。
【００２３】
さらに、セットアップ余裕値を更新する場合に、挿入した遅延素子の遅延量によって一律に更新することにより簡略化している。本来ならば、そのエラーパスのノードが複数のパスの経路になっており、最小のセットアップ余裕値を決めているパスは遅延素子を挿入したエラーパスではない場合には、挿入した遅延素子の遅延量によって一律に更新するとオーバーマージンになる場合がある。しかし、この実施の形態では、一律に更新することにより、計算を簡略化している。一律に更新することは、オーバーマージンになる可能性はあるが、セットアップ余裕値を厳しく見積もる方向であるので、セットアップタイムエラーを生じる恐れはない。
【００２４】
また、本発明の一実施形態のホールドタイムエラー収束方法は、図１に記載のように、ホールドタイムエラーを収束させるステップが、ホールドタイムエラーが発生しているパスのうち、優先的に収束させるエラーパスを決定するステップ（Ｓ６）と、優先的に収束させるエラーパスのホールドタイムエラーを収束させるステップと、優先的に収束させるエラーパスと同一グループの他のエラーパスのホールドタイムエラーを収束させるステップと、そのグループ以外のエラーパスのホールドタイムエラーを収束させるステップと、
を含むものであってもよい。
【００２５】
すなわち、上記実施形態によれば、優先的に収束させるエラーパスを決定したら、そのエラーパスのホールドタイムエラーが収束するまで、そのエラーパスを優先的に収束させる。上記の手順を取ることにより、収束可能なエラーは必ず収束させることができる。
【００２６】
一方、特許文献１によれば、遅延素子を挿入する毎に、ホールド違反値が最大のパスを求め、そのホールド違反値が最大のパスに対してホールドタイムエラーを収束させることが記載されている（特許文献段落番号００５２、００６０等）。このような手順では、ホールド違反値が最大のパスは、遅延素子を挿入する毎に、違うパスが選ばれる可能性がある。最終的に全てのホールドタイムエラーが解消できる場合には、問題ないが、最終的に解消できないホールドタイムエラーが残る場合には、遅延素子を挿入したにも係わらず収束していないエラーパスが数多く残る恐れがある。
【００２７】
全てのホールドタイムエラーが収束できず、エラーパスが残る場合には、後の回路変更等の対策を容易にするため、解消できないホールドタイムエラー箇所をできるだけ少なくしておく必要がある。その観点からは、本実施形態のように優先的に収束させるエラーパスを決定したら、そのエラーパスのホールドタイムエラーが収束するまで、そのエラーパスを優先的に収束させることが望ましい。
【００２８】
また、本発明の一実施形態のホールドタイムエラー収束方法は、図１６に記載のように、上記ホールドタイムエラーの収束方法が、複数の遅延ライブラリ（図１７の２６）を用いて行ったタイミング解析によっていずれかの遅延ライブラリでホールドタイムエラーが発生した場合に、いずれの遅延ライブラリにおいても、セットアップタイムエラーが生じないようにホールドタイムエラーを収束させる方法であって、エラーパスをリストアップするステップが、複数の遅延ライブラリのうち、いずれかの遅延ライブラリでホールドタイムエラーが発生しているエラーパスをリストアップするステップ（Ｓ２２）であって、セットアップ余裕値を求めるステップが、複数の遅延ライブラリについてそれぞれセットアップ余裕値を求めるステップ（Ｓ２３）であって、ホールドタイムエラーを収束させるステップが、グループ化されたエラーパスを単位にいずれの遅延ライブラリを用いてもセットアップタイムエラーを生じさせないように各遅延ライブラリに対して共通に遅延素子を挿入して、ホールドタイムエラーを収束させるステップ（Ｓ２８）であって、各遅延ライブラリ毎に、当該遅延素子の含まれるエラーパスの各ノードのセットアップ余裕値と、遅延素子をグループ内相互影響ノードに挿入した場合にはグループ内相互影響ノードのセットアップ余裕値と、を挿入した遅延素子の遅延値によって、一律に更新し、遅延素子の挿入とセットアップ余裕値の更新とをホールドタイムエラーが収束するまで繰り返すステップであってもよい。
【００２９】
上記方法によれば、複数の遅延ライブラリを用いてタイミング解析によっていずれかの遅延ライブラリを用いたタイミング解析によってホールドタイムエラーが発生した場合、いずれの遅延ライブラリを用いてもセットアップタイムエラーを生じさせずに上記ホールドタイムエラーが収束できる。
【００３０】
また、本発明の一実施形態のホールドタイムエラー収束装置は、図２、図１７に示すように、ホールドタイムエラーが発生したエラーパス（図４の「ＦＦ１→Ａ１→Ａ２→Ａ３→ＦＦ２」や図８の「ＦＦ３→Ａ１→ＦＦ５」と「ＦＦ１→Ａ３→Ａ２→ＦＦ４」）とそのホールドタイム違反値とを記憶するホールドタイムエラー記憶部（８、２８、図１２（ａ））と、エラーパスの各ノードについてセットアップ余裕値を記憶するセットアップ余裕値記憶部（９、２９、図３、図７）と、エラーパスに含まれる第一、第二のエラーパスについて第一のエラーパスと始点を共有し第二のエラーパスと終点を共有する共有パスが存在する場合は第一、第二のエラーパスをグループ化情報として記憶するグループ情報記憶部（１０、図１２（ｂ））と、共有パスと第一のエラーパスとで共有するノードと共有パスと第二のエラーパスとで共有するノードとをグループ内相互影響ノードとして記憶するグループ内相互影響ノード記憶部（１１、図１２（ｃ））と、各ノードのセットアップ余裕値の範囲内でホールドタイムエラーを収束させるように遅延素子を挿入する遅延素子挿入部（３、２３）と、遅延素子の挿入に伴って遅延素子を挿入したエラーパスに含まれる各ノードのセットアップ余裕値を遅延素子の遅延値によって一律に更新すると共に遅延素子を挿入する箇所が前記グループ内相互影響ノードであったならば、当該グループ内相互影響ノードに含まれる当該エラーパス以外のノードのセットアップ余裕値を遅延素子の遅延値によって一律に更新するセットアップ余裕値更新部（４、２４）と、を有する。
【００３１】
さらに、本発明の一実施形態のホールドタイムエラー収束装置は、図２、図１７に示すように、収束対象とする回路のネットリストを記憶するネットリスト記憶部５と、ネットリスト記憶部からネットリストを、ホールドタイムエラー記憶部（８、２８）からエラーパスを入力し、前記グループ化情報と、前記グループ内相互影響ノードを求め、前記グループ化情報をグループ情報記憶部１０へ、グループ内相互影響ノードをグループ内相互影響ノード記憶部１１へ出力するグループ情報解析部２をさらに備えたものであってもよい。
【００３２】
以下、実施例に即し、図面を参照して詳しく説明する。
【実施例１】
【００３３】
図２は、実施例１のホールドタイムエラー収束装置の構成を示すブロック図である。図２のブロック図において、静的タイミング解析部１は、解析対象とする回路のネットリスト５とネットリスト５に含まれる各回路素子の遅延値を示す遅延ライブラリ６と、ネットリスト５に含まれる各パスがセットアップエラーやホールドタイムエラーになるか否かを判定するタイミング制約条件７を入力し、ホールドタイムエラーが発生したパスがあった場合には、そのホールドタイムエラーが発生したパスをエラーパスとしてエラーパスリスト８に出力すると共に、そのエラーパスに存在する各ノードの最小セットアップ余裕値をセットアップ余裕値９として出力する。
【００３４】
グループ情報解析部２は、ネットリスト５とエラーパスリスト８を入力し、エラーパスリストのエラーパスの中に後で詳しく説明する共有パスが存在するか否かを調べ、共有パスが存在していた場合は、共有パスが存在するエラーパス同士をグループ化する情報をグループ情報１０として出力する。また、グループ情報解析部２は、上記共有パスを持つエラーパスについて相互影響ノードを相互影響ノード１１として出力する。
【００３５】
遅延素子挿入部３は、基本的な処理としては、エラーパスリスト８とセットアップ余裕値９とを入力し、エラーパスについて各ノードのセットアップ余裕値９を満たす範囲内で遅延素子を挿入し、セットアップタイムエラーが生じないように遅延素子を挿入し、ホールドタイムエラーの収束を図る。この遅延素子挿入部３は、グループ情報１０と相互影響ノード１１を参照し、ホールドタイムエラーを収束させようとするエラーパスが他のエラーパスとグループ化されている場合には、グループ化された他のエラーパスの相互影響ノードのセットアップ余裕値も考慮し、グループ化されたほかのエラーパスにセットアップタイムエラーを生じさせないように考慮して遅延素子の挿入を行う。
【００３６】
遅延素子挿入部３が遅延素子の挿入を行った場合には、セットアップ余裕値更新部４は、遅延素子を挿入したことにより当該エラーパスの各ノード及び、グループ化されている場合には、当該エラーパス以外のグループ内の相互影響ノードを挿入した当該遅延素子の遅延量により一律に更新を行う。このセットアップ余裕値更新部４は、挿入した遅延素子入ネットリスト１２を作成し、ネットリスト５を更新すると共に、遅延素子挿入部３で挿入した遅延素子を追加遅延素子リスト１３として出力すると共に、遅延素子挿入部３による遅延素子の挿入によっては、ホールドタイムエラーが収束できなかったエラーパスが存在する場合には、収束不能パスリスト１４として出力する。
【００３７】
次に実施例１によるホールドタイムエラー収束方法の処理手順について、図１のフローチャートを用いて説明する。実施例１の収束方法を説明するため、図４の回路例１を用いて説明する。図４の回路において、太線で示す「ＦＦ１→Ａ１→Ａ２→Ａ３→ＦＦ２」のパスで０．２３２ｎｓのホールドタイムエラーが発生しているとする。また、この回路において、他のパスではホールドタイムエラーが発生していないものとする。
【００３８】
まず、図１のステップＳ１で対象とする図４の回路について静的なタイミング解析を行う。このタイミング解析によって、「ＦＦ１→Ａ１→Ａ２→Ａ３→ＦＦ２」に０．２３２ｎｓのホールドタイムエラーが発生していることがわかる。このホールドタイムエラーが生じているパスをステップＳ２でリストアップしエラーパスリスト８として出力する。
【００３９】
また、エラーパスに含まれている各ノードのセットアップ余裕値をステップＳ３でリストアップする。図４の回路におけるエラーパスの各ノードにおけるセットアップ余裕値を図３に示す。図３において、「Point」列は、図４における各ノードの名称であり、「Setup Margin」列に、各ノードのセットアップ余裕値を示す。また、「Path」列には、ホールドタイムエラーの値も示している。なお、エラーパスにおける各ノードは通常、複数のパスの経路となっており、それぞれの経路によってセットアップ余裕値は違うはずである。しかし、図３では、各ノードのセットアップ余裕値のうち、最もマージンが少ないものをセットアップ余裕値とする。例えば、図４の回路のアンドゲートＡ３のＹ出力には、ＦＦ１→ＦＦ２のパス以外にも、ＦＦ１→ＦＦＢ、ＦＦＡ→ＦＦ２、ＦＦＡ→ＦＦＢのパスの経路になっており、それぞれのパスによってセットアップ余裕値（遅延素子を挿入してもセットアップタイムエラーを生じさせない余裕値）は異なるはずであるが、このうち、最小のセットアップ余裕値である０．２０をＡ３／Ｙのセットアップ余裕値とする。どのパスが最小のセットアップ余裕値を決めているかの情報はこの実施例では必要としない。なお、この実施例でセットアップ余裕値が必要なのは、エラーパスに含まれる各ノードのセットアップ余裕値があれば、十分であり、エラーパスに含まれないノードのセットアップ余裕値は必要ない。
【００４０】
図４の回路では、エラーパスが一つしかないので、図１ステップＳ４のエラーパスのグループ化、ステップＳ５の相互影響ノードのリストアップは省略できる。また、ステップＳ６の優先的に収束させるエラーパスの決定も省略できる。
【００４１】
ステップＳ７では、遅延素子の挿入によって、セットアップタイムエラーを生じさせることなく、ホールドタイムエラーを解消することが可能であるか否かを判定する。ホールドタイムエラーの値が当該エラーパスに含まれる各ノードのセットアップ余裕値の合計を超えている場合には、そのエラーパスは遅延素子を挿入することによっては、収束不能であるので、ステップＳ１２で、収束不能パスリスト１４に登録する。収束不能パスリスト１４に登録した収束不能パスについては、後で必要に応じて、回路の見直しや仕様の見直しを行う。
【００４２】
次にステップＳ８では、図３のセットアップ余裕値の範囲内で各ノードに遅延素子の挿入を行う。この遅延素子の挿入は、特許文献１に記載されているように、セットアップ余裕値が最も大きいノードに遅延素子を挿入してもよい。この例では、図５に示すようにＦＦ２のＤ入力のノードに０．２ｎｓの遅延素子を挿入している。
【００４３】
次に、遅延素子の挿入によって各ノードのセットアップ余裕値も変わるので、ステップＳ９により、セットアップ余裕値を更新する。ステップＳ９では、エラーパスにおける全てのノードのセットアップ余裕値から一律に挿入した遅延素子の遅延量０．２ｎｓを減算している。そうすると、ＦＦ２のＤ入力のセットアップ余裕値は＋０．２から０になる。ここで、アンドゲートＡ２のＢ入力のセットアップ余裕値は＋０．１から−０．１とマイナスになってしまうが特に問題はない。すなわち、遅延素子を挿入したＦＦ２のＤ入力のセットアップ余裕値の範囲内で遅延素子を挿入したのなら、本来的にセットアップタイムエラーは生じないはずである。本来ならば、アンドゲートＡ２のＢ入力はマイナスには、ならないはずであるが、計算を簡略化するために、エラーパスにおけるすべてのノードのセットアップ余裕値を一律に減算しているので、見かけ上のセットアップ余裕値がマイナスになっている。セットアップ余裕値がマイナスになる場合は、セットアップ余裕値をゼロにしてもよい。要は、セットアップ余裕値がマイナスやゼロとなった場合には、そのセットアップ余裕値がマイナスやゼロとなったノードには、遅延素子を挿入する余地がないことがわかればよい。
【００４４】
次に、ステップＳ１０により、ホールドタイムエラーが解消したか否か判定する。図５では、０．２ｎｓの遅延素子を挿入することにより、ホールドタイムエラーは−０．２３２ｎｓから−０．０３２ｎｓに減少しているが、まだゼロになっていない。したがって、ステップＳ７に戻って処理を継続する。２度目のステップＳ８では、更新されたセットアップ余裕値を満足するようにさらに遅延素子の挿入を行う。ここでは、図６に示すようにアンドゲートＡ１のＢ入力に０．１ｎｓの遅延素子を挿入することにより、ホールドタイムエラー値は−０．０３２ｎｓから＋０．０６８ｎｓになっており、ホールドタイムエラーが収束したことが確認できる。このステップＳ６からステップＳ１０の処理を複数のホールドタイムエラーが生じている場合は、すべてのホールドタイムエラーについて、その収束を試みて、全てのエラーパスについて試みる。最終的に、元のネットリストに追加した遅延素子リストと回収不能パスリストを出力すると処理は終わる（ステップＳ１３）。
【００４５】
上記の処理では、遅延素子の挿入に当たって、エラーパス以外のパスのセットアップ余裕値やエラーパス以外のパスに含まれるノード以外のノードのセットアップ余裕値の考慮やセットアップ余裕値の更新を行っていないので、ホールドタイムエラーの収束が高速にできる。また、セットアップ余裕値の更新をエラーパスに含まれる各ノードに対して一律に行っているので、ホールドタイムエラーの収束が高速に行える。
【００４６】
次に、本発明の実施例１において、上記回路例１より少し複雑な回路例２について、ホールドタイムエラーの収束を行う方法について説明する。図８は、回路例２の回路図である。図８の回路について、ステップＳ１でタイミング解析を行った結果、ＦＦ1→ＦＦ４のパス（以下、エラーパス１とする）で−０．３ｎｓのホールドタイムエラーが、ＦＦ３→ＦＦ５のパス（以下、エラーパス３とする）で−０．２ｎｓのホールドタイムエラーが生じているものとする。このホールドタイムエラーの発生に対して、エラーパスリスト８として図１２（ａ）のようにホールドタイムエラーが生じたパスの経路とホールドタイムエラーの違反値を出力してもよい。また、セットアップ余裕値は、図７（ａ）、（ｂ）のようにエラーパス１、３の各ノードについて出力される。なお、図１２（ａ）のホールドタイムエラーが生じたパスの経路とホールドタイムエラーの違反値のリストは、図７（ａ）、（ｂ）に示すセットアップ余裕値の情報に全て含まれるので、図１２（ａ）の情報の出力は必須ではない。
【００４７】
次に、ステップＳ４で、エラーパスのグループ化を行う。グループ化は、エラーパスのうち、一のエラーパスと始点を共有し、他のエラーパスと終点を共有するパスが存在する場合、それらのエラーパスをグループ化する。ここで、図８において、ホールドタイムエラーとはなっていないが、エラーパス３と始点（ＦＦ３）を共有し、エラーパス１と終点（ＦＦ４）を共有するパス（ＦＦ３→Ａ１→Ａ２→ＦＦ４）が存在するので、エラーパス１はエラーパス３とグループ化する。グループ化した情報は、図１２（ｂ）のようなグループ情報１０として出力する。なお、エラーパス３（ＥＰ３）が図８には、図示しないエラーパス５（ＥＰ５）と始点、終点を共有するパスがあるが、エラーパス１はエラーパス５と始点、終点を共有するパスを持たない場合は、エラーパス５はエラーパス３とはグループ化するが、エラーパス１とはグループ化しない場合がある。図１２（ｂ）はそのような場合を示している。
【００４８】
次に、ステップＳ５では、共有するパス（ＦＦ３→Ａ１→Ａ２→ＦＦ４）とエラーパス３で共有するノード（ＦＦ３／Ｑ、Ａ１／Ｂ、Ａ１/Ｙ）、共有するパスとエラーパス１で共有するノード（Ａ２／Ｙ、ＦＦ４／ＤＡＴＡ）とをグループ内相互影響ノードＳ５としてリストアップする。このリストアップした相互影響ノードを図１２（ｃ）に示す。この相互影響ノードは、一方のエラーパスに含まれる相互影響ノードに遅延素子を挿入するとグループ化されている他のエラーパスに含まれる相互影響ノードのセットアップ余裕値が影響を受ける可能性があるノードである。なお、一旦、相互影響ノードが抽出できれば、共有パスの途中のノード等の情報は必要ない。
【００４９】
次にステップＳ６で、優先的に収束させるパスを決定する。ここでは、エラーパス３が優先的に収束させるパスと決定されたとする。次のステップＳ７では、エラーパス３のホールドタイムエラーの値−０．２ｎｓはエラーパス３のセットアップ余裕値の合計を超えていないので、対策可能と判断され、ステップＳ８へ進む。ステップＳ８では、図９に示すようにアンドゲートＡ１のＢ入力に０．２ｎｓの遅延素子が挿入されたとする。すると、エラーパス３のホールドタイムエラーは収束する。次のステップＳ９で、セットアップ余裕値の更新を行う。ここで注意が必要なのは、図１２（ｃ）を参照すると、遅延素子を挿入したアンドゲートＡ１のＢ入力は、エラーパス３の相互影響ノードに含まれることである。したがって、セットアップ余裕値の更新では、エラーパス３の各ノードだけでなく、図１２（ｃ）を参照してエラーパス３と同一グループであるエラーパス１の相互影響ノードのセットアップ余裕値も挿入した遅延素子の遅延量を一律にセットアップ余裕値から減算し、セットアップ余裕値を更新する。
【００５０】
次に、エラーパス３のセットアップエラーは収束したが、同一グループであるエラーパス１のホールドタイムエラーは収束していないので、ステップＳ６に戻り、エラーパス３と同一グループに属するエラーパス１を優先的に収束させるパスとして決定する。次に、図１０に示すように、ステップＳ８では、アンドゲートＡ２のＡ入力に０．１ｎｓの遅延素子を挿入している。さらに、それだけではホールドタイムエラーは収束しないので、再度ループを回ったステップＳ８で、図１１に示すように、アンドゲートＡ３のＢ入力に０．２ｎｓの遅延素子を挿入し、最終的にエラーパス１のホールドタイムエラーについてもセットアップタイムエラーを生じさせることなく、収束した。
【００５１】
すなわち、エラーパスのうち、一のエラーパスと始点を共有し、他のエラーパスと終点を共有するパスが存在する場合、それらのエラーパスをグループ化しているので、セットアップ余裕値の更新をそのグループ内に限って行えば十分であり、最小限の範囲でセットアップ余裕値の更新を行うことができるので、高速にホールドタイムエラーの収束を行うことができる。
【００５２】
（比較例）
次に、上記の回路例２について、グループ化と相互影響ノードを考慮しないで、遅延素子を挿入する例を比較例として説明する。
【００５３】
図１３は、実施例１の図９と同様に、アンドゲートＡ１のＢ入力に０．２ｎｓの遅延素子を挿入してエラーパス３のホールドタイムエラーを収束させた後、エラーパス１のホールドタイムエラーを収束させようとしている。しかし、この比較例では、エラーパス１とエラーパス３との間には、エラーパス３と始点（ＦＦ３Ｑ）を共有し、エラーパス１と終点（ＦＦ４Ｄ）を共有する共有パス（ＦＦ３→Ａ１→Ａ２→ＦＦ４）が存在していることを無視して、エラーパス３、エラーパス１でそれぞれ単独でホールドタイムエラーを収束させようとしている。すなわち、エラーパス３のホールドタイムエラーを収束させるため、アンドゲートＡ１のＢ入力に０．２ｎｓの遅延素子を挿入しているが、この遅延素子の挿入が、共有パスを介して、エラーパス１のセットアップ余裕値に影響を与えることが考慮させていない。すなわち、実施例１のように、アンドゲートＡ１のＢ入力に０．２ｎｓの遅延素子を挿入しても、エラーパス１の各ノードのセットアップ余裕値には反映されていない。従って、ＦＦ４のＤ入力には、０．２ｎｓのセットアップ余裕値が残っていると判断され、ＦＦ４のＤ入力に、さらに、０．２ｎｓの遅延素子が挿入されてしまっている。さらに、図１４では、アンドゲートＡ３のＢ入力に０．１ｎｓの遅延素子を挿入して、あたかもホールドタイムエラーが収束されたように見える。
【００５４】
しかし、図１５に示すようにエラーパス３のアンドゲートＡ１のＹ出力からエラーパス１のアンドゲートＡ２に接続される共有パスが考慮されていないため、共有パスを介してセットアップタイムエラーを生じてしまう恐れがある。すなわち、セットアップエラーを生じさせないでホールドタイムエラーを解消させるためには、そのエラーパスと始点、又は終点を共有し、他のエラーパスと終点又は始点を共有する共有パスが存在するか否か調べ、共有パスが存在した場合には、図１２（ｂ）に示すように、共有パスを有する他のエラーパスとグループ化して、そのグループ化情報を記憶しておき、そのグループ化情報に従って、ホールドタイムエラーを収束させることが必要である。なお、共有パス自体が、エラーパスであるか否かに限らず、他のエラーパスとの共有パスが存在する他のエラーパスとグループ化する必要があることに留意すべきである。また、共有パスを介して遅延素子の挿入がセットアップ余裕値に影響を与えうるノードについて、相互影響ノードとして図１２（ｃ）のような情報を記憶しておき、セットアップ余裕値を更新する際には、遅延素子を挿入したノードが相互影響ノードであった場合に、グループ化した他のエラーパスに含まれる相互影響ノードについても、セットアップ余裕値を更新する必要がある。
【実施例２】
【００５５】
次に、複数の遅延ライブラリを用いる実施例について説明する。たとえば、半導体集積回路の設計において、ホールドタイムエラーの収束を行おうとした場合、複数の遅延ライブラリを用いる必要がある場合がある。具体的には、電圧条件や、温度条件の異なる遅延ライブラリを用いてどの遅延ライブラリを用いてもホールドタイムエラーを収束させる必要がある。前もってどの電圧条件や温度条件が最も収束が厳しいかわかっていて、その最も厳しい電圧条件や温度条件の遅延ライブラリを用いて収束すれば、他の温度条件や温度条件でも問題なく収束するのであれば、問題ない。しかし、ホールドタイムやセットアップタイムは、様々な要素が複雑に絡み合って決まるので、現実には、どの条件が最も厳しいか予想をすることは困難である。この場合、電圧条件や温度条件の異なる複数の遅延ライブラリを用いて、いずれの遅延ライブラリを用いてもホールドタイムエラーが収束するように、遅延素子を挿入しなければならない。実施例２はこのような場合の複数の遅延ライブラリを用いるホールドタイムエラーの収束方法、収束装置の実施例である。
【００５６】
図１７は実施例２のホールドタイムエラー収束装置の構成を示すブロック図である。特に、実施例１と構成が異なる部分について説明し、実施例1とほぼ同一である部分については、実施例１の図２と同一の符号を付し、説明は省略する。
【００５７】
図２では、遅延ライブラリ６はひとつであったのに対して、図１７では、電圧条件や温度条件など異なる複数の遅延ライブラリ２６を用いる。また、条件によってタイミング制約条件が異なる場合は、タイミング制約条件２７も条件ごとに用意する。静的タイミング解析部１では、それぞれの遅延ライブラリ２６を用いてタイミング解析を行う。エラーパスリスト２８には、いずれかの遅延ライブラリ２６を用いたタイミング解析によってホールドタイムエラーが生じた場合に、その条件とエラーパスについて記録する。セットアッツプ余裕値２９は、いずれかの条件でホールドタイムエラーを生じた場合、そのいずれかの条件でホールドタイムエラーを発生させたエラーパスの各ノードについて、すべての条件の組み合わせでセットアップ余裕値を求める。遅延素子挿入部２３は、いずれの条件においてもセットアップエラーを生じさせず、すべての条件でホールドタイムエラーが収束できるように遅延素子を挿入する。なお、いずれの遅延ライブラリを用いる場合にも、挿入する遅延素子は同一の遅延素子を同一の箇所に挿入することになるが、遅延値そのものは、各遅延ライブラリによって異なる。また、セットアップ余裕値更新部２４は、各遅延ライブラリについてセットアップ余裕値を更新する。また、収束不能パスリスト３４には、どの遅延ライブラリで収束不能であったについても出力する。
【００５８】
次に、具体的な事例を用いて実施例２の処理フローについて、さらに詳しく説明する。図１８は、パス１〜パス７の７つのパスが存在する回路について、条件１〜３にそれぞれ対応する遅延ライブラリ１〜３を用いて行ったタイミング解析結果を示す図である。また、図１６は、実施例２のホールドタイムエラー収束方法を示すフローチャートである。図１８の例について図１６のフローチャートに沿って説明すると、まず、ステップＳ２１では、それぞれ図１８の条件１〜３に対応する遅延ライブラリ１〜３を用いて３回タイミング解析を行う。図１８において、「○」はその条件（遅延ライブラリ）、パスでは、ホールドタイムエラーが生じなかったことを示し、「×」は、その条件、パスでホールドタイムエラーが生じたことを示す。
【００５９】
次に、図１６のステップＳ２２では、いずれかの遅延ライブラリでホールドタイムエラーが発生した場合には、そのエラーパスをエラーパスリスト２８として出力する。図１８の例では、条件１ではパス１が、条件２ではパス３が、条件３ではパス３とパス５が、それぞれ、ホールドタイムエラーになっている。いずれかの条件（遅延ライブラリ）でエラーになったパスはエラーパスリストにリストアップする。たとえば、パス３とパス５は条件１（遅延ライブラリ１）では、ホールドタイムエラーになっていないが、条件２または条件３でホールドタイムエラーが発生しているので、エラーパスリストにリストアップする。
【００６０】
次に、ステップＳ２３では、ステップＳ２２でエラーパスとしてリストアップされたパス１、パス３、パス５の３つのエラーパスについて、それぞれ遅延ライブラリ１〜３を用いて、各エラーパスに含まれるセットアップ余裕値を求める。すなわち、条件１（遅延ライブラリ１）では、パス３、パス５はホールドタイムエラーが生じていないが、条件３、条件５で生じたホールドタイムエラーを収束させるため、パス３、パス５に遅延素子を挿入した場合、条件１でセットアップタイムエラーが生じる恐れがあるので、パス３、パス５のセットアップ余裕値を条件１においても求める。すなわち、いずれかの遅延ライブラリにおいてエラーパスとなったパスは全ての条件でのセットアップ余裕値を求める。ステップＳ４〜Ｓ６は、実施例１と基本的に同一である。ステップＳ４でグループ化の対象となるのは、条件１〜３のいずれかでエラーパスとなったパスである。
【００６１】
ステップＳ２７では、全ての遅延ライブラリの条件でホールドタイムエラーを収束できるか検討する。いずれかの条件でホールドタイムエラーが収束できない場合は、収束不能であると判断する。また、ステップＳ３２では、どの遅延ライブラリの条件で収束不能になったのかの情報も収束不能パスリストに含める。
【００６２】
ステップＳ２８では、いずれの遅延ライブラリにおいてもセットアップタイムエラーが生じないように各遅延ライブラリ共通に遅延素子を挿入する。たとえば、パス１のノードに遅延素子を挿入しようとする場合、条件１のセットアップ余裕値が０．４ｎｓで、遅延素子１個分の遅延値が０．２ｎｓであった場合、条件１だけ考えれば、遅延素子が２個挿入可能である、しかし、条件２において、同一箇所のセットアップ余裕値が０．７ｎｓで、同一の遅延素子の条件２での遅延素子１個分の遅延値が０．４ｎｓであった場合、条件２では、遅延素子を２個挿入するとセットアップタイムエラーが生じてしまう。
【００６３】
従って、この場合、条件１についても遅延素子を２個挿入することはできず、挿入できたとしても高々１個である。すなわち、ステップＳ２８では、すべての遅延ライブラリでセットアップ余裕値を満たす範囲で最大限の遅延素子を挿入する。なお、条件２では、パス１でホールドタイムエラーが生じていない場合であっても、条件１で生じているホールドタイムエラーを収束させるためには、パス１に遅延素子を挿入する必要がある。条件１〜３で回路は共通であるので、条件２、条件３においても、セットアップタイムエラーが生じないように遅延素子を挿入する必要がある。
【００６４】
ステップＳ２９では、各遅延ライブラリについてそれぞれセットアップ余裕値を更新する。挿入する遅延素子は各遅延ライブラリで共通であっても、遅延値は通常各遅延ライブラリ毎に異なる。ステップＳ３０では、すべての遅延ライブラリについてホールドタイムエラーが収束できたか否かを判定する。一つの遅延ライブラリでも収束していない場合は、すべてのライブラリについて収束するか、いずれかのライブラリについて対策ができないことが判明するまでステップＳ２７に戻って処理を継続する。ステップＳ３３では、収束不能パスリストに収束不能であった遅延ライブラリの条件についても出力する。
【００６５】
なお、遅延ライブラリは、電圧条件や温度条件ごとに遅延ライブラリを設けるものとして説明したが、電圧や温度のような回路の使用条件だけではなく、半導体集積回路の生産工場の製造工程による遅延値の違いを遅延ライブラリとして設けてもよい。
【実施例３】
【００６６】
次に、コンピュータプログラムによって、エンジニアワーキングステーションやパーソナルコンピュータ等のコンピュータに実施例１や実施例２のホールドタイムエラー収束方法の各ステップを実行させ、また、コンピュータに実施例１や実施例２のホールドタイムエラー収束装置として機能させる実施例３について説明する。
【００６７】
実施例１の図２や実施例２の図１７において、コンピュータプログラムによって、コンピュータの演算処理部を静的タイミング解析部１、グループ情報解析部２、遅延素子挿入部３、２３、セットアップ余裕値更新部４、２４として機能させることができる。また、コンピュータプログラムによって、コンピュータの主記憶装置や補助記憶装置の少なくとも一部をネットリスト５、遅延ライブラリ６、２６、タイミング制約条件７、２７、エラーパスリスト８、２８、セットアップ余裕値９、２９、グループ情報１０、相互影響ノード１１、遅延素子入ネットリスト１２、追加遅延素子リスト１３、収束不能パスリスト１４、３４の記憶部として機能させることができる。また、プログラムにより、コンピュータに図１や図１６のホールドタイムエラー収束方法を実施させることもできる。
【００６８】
また、プログラムは、コンピュータに、ＣＤやＤＶＤ等の光記憶媒体、ハードディスク等の磁気記憶媒体、フラッシュメモリ等の半導体記憶装置等の記憶媒体やインターネット等を介してインストールすることが可能である。
【００６９】
なお、上述した各実施例において、どのエラーパスから優先的に収束させるか、また、複数の遅延素子を挿入可能な箇所のうち、どこへ遅延素子を挿入するかについては、詳しく説明していない。この手順については、例えば特許文献１に記載されているような既知の方法を選択することができる。たとえば、優先的に収束させるエラーパスはホールド違反値の大きなパスから選択することもできるし、単独に処理ができるグループ化されていないエラーパスから処理することもできる。ただし、優先的に収束させるパスを決めたならば、そのエラーパスが収束するか、収束不能であることが判明するまでそのパスを優先的に収束させる。
【００７０】
また、遅延素子の挿入は、遅延素子を挿入したことによる影響がグループ化した他のエラーパスに影響が及ぶ相互影響ノードを避けて行ってもよい。相互影響ノードを避けて遅延素子を挿入する限り、遅延素子を挿入しても他のエラーパスに影響が及ぶことはない。
【００７１】
なお、図２、図１７において、エラーパスリスト（８、２８）と、セットアップ余裕値（９、２９）とを別なファイルにしているが、セットアップ余裕値（９、２９：具体的には、例えば、図７）には、エラーパスリスト（８、２８：例えば、図１２（ａ））の情報が全て含まれるので、セットアップ余裕値ファイル（９、２９）にエラーパスリストファイル（８、２８）の機能を兼ねさせてもよい。この場合は、図２、図１７のエラーパスリスト（８、２８）は、セットアップ余裕値（９、２９）と等しくなる。図１７では、グループ情報解析部２は、複数の遅延ライブラリに対する複数のセットアップ余裕値ファイル２９からグループ情報１０、相互影響ノード１１を解析する。
【００７２】
以上、本発明を実施例に即して説明したが、本発明は上記実施例の構成にのみ制限されるものでなく、本発明の範囲内で当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【図面の簡単な説明】
【００７３】
【図１】本発明の一実施例によるホールドタイムエラーの収束方法のフローチャートである。
【図２】本発明の一実施例によるホールドタイムエラー収束装置の構成を示すブロック図である。
【図３】本発明の一実施例によるセットアップ余裕値データの一例である。
【図４】本発明の一実施例の対象となる回路例１の回路図である。
【図５】本発明の一実施例により処理途中の回路例１の回路図である。
【図６】本発明の一実施例によりホールドタイムエラーが収束された後の回路例１の回路図である。
【図７】本発明の一実施例によるセットアップ余裕値データの別な例である。
【図８】本発明の一実施例の対象となる回路例２の回路図である。
【図９】本発明の一実施例により遅延素子を一つ挿入した後の回路例２の回路図である。
【図１０】本発明の一実施例により二つの遅延素子を挿入した後の回路例２の回路図である。
【図１１】本発明の一実施例によりホールドタイムエラーが収束された後の回路例２の回路図である。
【図１２】本発明の一実施例によるエラーパスリスト、グループ情報、相互影響ノードのデータの一例を示す図である。
【図１３】本発明の比較例により２つ遅延素子を挿入した後の回路例２の回路図である。
【図１４】本発明の比較例により３つ遅延素子を挿入した後の回路例２の回路図である。
【図１５】本発明の比較例により回路例２にセットアップタイムエラーを生じさせてしまったことを示す回路図である。
【図１６】本発明の別な実施例によるホールドタイムエラーの収束方法のフローチャートである。
【図１７】本発明の別な実施例によるホールドタイムエラー収束装置の構成を示すブロック図である。
【図１８】本発明の別な実施例によるタイミング解析結果を示す図である。
【図１９】特許文献１に記載の従来のホールドタイムエラー収束方法の原理を説明する図面である。
【符号の説明】
【００７４】
１：静的タイミング解析部
２：グループ情報解析部
３、２３：遅延素子挿入部
４、２４：セットアップ余裕値更新部
５：ネットリスト
６、２６：遅延ライブラリ
７、２７：タイミング制約条件
８、２８：エラーパスリスト
９、２９：セットアップ余裕値
１０：グループ情報
１１：相互影響ノード
１２：遅延素子入ネットリスト
１３：追加遅延素子リスト
１４、３４：収束不能パスリスト
【図１】
2010073136.tif 000003
【図２】
2010073136.tif 000004
【図３】
2010073136.tif 000005
【図４】
2010073136.tif 000006
【図５】
2010073136.tif 000007
【図６】
2010073136.tif 000008
【図７】
2010073136.tif 000009
【図８】
2010073136.tif 000010
【図９】
2010073136.tif 000011
【図１０】
2010073136.tif 000012
【図１１】
2010073136.tif 000013
【図１２】
2010073136.tif 000014
【図１３】
2010073136.tif 000015
【図１４】
2010073136.tif 000016
【図１５】
2010073136.tif 000017
【図１６】
2010073136.tif 000018
【図１７】
2010073136.tif 000019
【図１８】
2010073136.tif 000020
【図１９】
2010073136.tif 000021