(57)【要約】【課題】タイミング違反の修正の問題を解消する。【解決手段】設計装置１０は、クロックツリーを生成するクロックツリー生成部１２１と、クロックツリー生成部１２１により生成されたクロックツリーに対応する回路データについて、セットアップタイミングを考慮せずにホールド違反を修正するように、遅延素子を論理的に挿入する論理修正部１２２と、論理修正部１２２の処理結果に基づいて、半導体集積回路のレイアウトを修正するレイアウト修正部１２３と、レイアウト修正部１２３により修正された半導体集積回路のレイアウトを出力する出力部１２４と、を備える。【選択図】図２
2011164684.tif 000002
【特許請求の範囲】
【請求項１】
クロックツリーを生成するクロックツリー生成部と、
前記クロックツリー生成部により生成されたクロックツリーに対応する回路データについて、セットアップタイミングを考慮せずにホールド違反を修正するように、遅延素子を論理的に挿入する論理修正部と、
前記論理修正部の処理結果に基づいて、半導体集積回路のレイアウトを修正するレイアウト修正部と、
前記レイアウト修正部により修正された半導体集積回路のレイアウトを出力する出力部と、
を備えることを特徴とする設計装置。
【請求項２】
前記論理修正部は、前記遅延素子を論理的に挿入した後に、セットアップ違反を修正する、請求項１記載の設計装置。
【請求項３】
前記論理修正部は、前記セットアップ違反を修正できない場合に、前記論理的に挿入した遅延素子を削除する、請求項２記載の設計装置。
【請求項４】
前記論理修正部は、セットアップ違反に対する前記セットアップタイミングの潜在的余裕度を解析し、その解析結果に基づいて前記遅延素子を論理的に挿入する、請求項１記載の設計装置。
【請求項５】
前記論理修正部は、前記潜在的余裕度が所定の許容範囲に含まれる場合に、前記遅延素子を論理的に挿入する、請求項４記載の設計装置。
【請求項６】
前記論理修正部は、
第１モードにおいて、前記遅延素子を論理的に挿入した後に、セットアップ違反を修正し、
第２モードにおいて、前記セットアップ違反に対する前記セットアップタイミングの潜在的余裕度を解析し、その解析結果に基づいて前記遅延素子を論理的に挿入する、請求項１記載の設計装置。
【請求項７】
前記論理修正部は、
前記第1モードにおいて、前記セットアップ違反を修正できない場合に、前記論理的に挿入した遅延素子を削除し、
前記第２モードにおいて、前記潜在的余裕度が所定の許容範囲に含まれる場合に、前記遅延素子を論理的に挿入する、請求項６記載の設計装置。
【請求項８】
前記論理修正部は、所定のコマンドを受け付け、前記コマンドが処理速度を優先することを示す場合には、前記第１モードを実行し、前記コマンドが処理結果を優先することを示す場合には、前記第２モードを実行する、請求項６又は７記載の設計装置。
【請求項９】
前記論理修正部は、前記コマンドが処理速度及び処理結果を優先することを示す場合には、前記第１モードを実行した後に前記第２モードを実行する、請求項８記載の設計装置。
【請求項１０】
前記クロックツリー生成部は、前記クロックツリーのセットアップ違反に対する前記セットアップタイミングのセットアップ余裕度を変更する請求項１乃至９の何れか一項記載の設計装置。
【請求項１１】
前記レイアウト修正部は、前記論理修正部の処理結果に基づいて前記半導体集積回路の空き領域情報を検索し、前記空き領域情報に基づいて前記半導体集積回路のレイアウトを修正する、請求項１乃至１０の何れか一項記載の設計装置。
【請求項１２】
前記空き領域情報は、空き領域の座標及び幅を含み、
前記レイアウト修正部は、前記空き領域の座標及び幅に基づいて、前記半導体集積回路に追加すべき遅延素子の種類及びサイズを選択する請求項１１記載の設計装置。
【請求項１３】
クロックツリーを生成し、
前記生成されたクロックツリーに対応する回路データについて、セットアップタイミングを考慮せずにホールド違反を修正するように、遅延素子を論理的に挿入し、
前記遅延素子の論理的な挿入の結果に基づいて、半導体集積回路のレイアウトを修正し、
前記修正された半導体集積回路のレイアウトを出力する、
ことを特徴とする設計方法。
【請求項１４】
クロックツリーを生成し、
前記生成されたクロックツリーに対応する回路データについて、セットアップタイミングを考慮せずにホールド違反を修正するように、遅延素子を論理的に挿入し、
前記遅延素子の論理的な挿入の結果に基づいて、半導体集積回路のレイアウトを修正し、
前記修正された半導体集積回路のレイアウトを出力する、
処理をコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、設計装置、設計方法、及び設計プログラムに関し、より詳しくは、半導体集積回路の設計に用いられる設計装置、設計方法、及び設計プログラムに関する。
【背景技術】
【０００２】
一般的な半導体集積回路の設計では、ＣＴＳ（Clock Tree Synthesis）によりクロックツリーが生成され、次いでクロックツリーにおけるタイミング違反が修正され、次いでタイミング違反の修正結果を反映するように半導体集積回路のレイアウトが修正される。タイミング違反とは、セットアップ違反及びホールド違反である。
【０００３】
従来の半導体集積回路の設計（特許文献１を参照）では、タイミング違反の修正において、セットアップ違反が発生しないようにホールド違反が修正される。換言すると、従来の半導体集積回路の設計では、セットアップタイミングを考慮してホールド違反が修正される。
【０００４】
しかしながら、セットアップタイミングを考慮すると、ホールド違反を修正するための遅延素子の挿入位置が制限されるので、挿入される遅延素子の数が増加するという問題がある。例えば、複数のホールド違反の共有パスに遅延素子を挿入すると、１つの遅延素子により複数のホールド違反が修正されるが、セットアップ違反が発生し易くなる。従って、セットアップ違反が発生しないようにホールド違反を修正するためには、非共有パスに遅延素子を挿入する必要がある。その結果、挿入される遅延素子の数が増加する。
【０００５】
また、セットアップタイミングを考慮すると、ホールド違反を修正するために必要な数の遅延素子を挿入できないという問題がある。その結果、ホールド違反が修正されないまま残ってしまう。
【０００６】
一方、従来の半導体集積回路の設計では、半導体集積回路のレイアウトの修正において、ホールド違反を修正するための遅延素子の挿入位置と論理セルの入力ピンとの距離が離れる傾向にある。
【０００７】
しかしながら、遅延素子の挿入位置と論理セルの入力ピンとの距離が離れると、論理セルの入力ピンと遅延素子との間の配線長が長くなるという問題がある。
【０００８】
すなわち、従来の半導体集積回路の設計では、セットアップタイミングを考慮してホールド違反を修正するので、タイミング違反の修正に様々な問題が発生する。それらの問題は、設計時間の長期化及び半導体集積回路の大規模化の原因となる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００９−３７６３５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
本発明の目的は、タイミング違反の修正の問題を解消するための設計装置、設計方法、及び設計プログラムを提供することである。
【課題を解決するための手段】
【００１１】
本発明の第１態様によれば、
クロックツリーを生成するクロックツリー生成部と、
前記クロックツリー生成部により生成されたクロックツリーに対応する回路データについて、セットアップタイミングを考慮せずにホールド違反を修正するように、遅延素子を論理的に挿入する論理修正部と、
前記論理修正部の処理結果に基づいて、半導体集積回路のレイアウトを修正するレイアウト修正部と、
前記レイアウト修正部により修正された半導体集積回路のレイアウトを出力する出力部と、
を備えることを特徴とする設計装置
が提供される。
【００１２】
本発明の第２態様によれば、
クロックツリーを生成し、
前記生成されたクロックツリーに対応する回路データについて、セットアップタイミングを考慮せずにホールド違反を修正するように、遅延素子を論理的に挿入し、
前記遅延素子の論理的な挿入の結果に基づいて、半導体集積回路のレイアウトを修正し、
前記修正された半導体集積回路のレイアウトを出力する、
ことを特徴とする設計方法
が提供される。
【００１３】
本発明の第３態様によれば、
クロックツリーを生成し、
前記生成されたクロックツリーに対応する回路データについて、セットアップタイミングを考慮せずにホールド違反を修正するように、遅延素子を論理的に挿入し、
前記遅延素子の論理的な挿入の結果に基づいて、半導体集積回路のレイアウトを修正し、
前記修正された半導体集積回路のレイアウトを出力する、
処理をコンピュータに実行させることを特徴とするプログラム
が提供される。
【発明の効果】
【００１４】
本発明によれば、タイミング違反の修正の問題を解消することができる。
【図面の簡単な説明】
【００１５】
【図１】本発明の実施形態に係る設計装置１０の構成を示すブロック図である。
【図２】本発明の実施形態に係る設計方法をコンピュータに実行させるための機能を示す概略図である。
【図３】本発明の実施形態に係る半導体集積回路の設計の手順を示すフローチャートである。
【図４】図３のクロックツリー生成処理（Ｓ３０１）の手順を示すフローチャートである。
【図５】図４のクロックツリー生成ステップ（Ｓ４０１）において生成されるクロックツリーの概略図である。
【図６】図４のセットアップ余裕度算出ステップ（Ｓ４０３）の手順を示すフローチャートである。
【図７】図４のクロック修正ステップ（Ｓ４０５）において修正されるクロックツリーの概略図である。
【図８】図４のクロック修正ステップ（Ｓ４０５）において修正されるパス毎のセットアップ余裕度を示す表である。
【図９】図３の論理修正処理（Ｓ３０２）の第１例の手順を示すフローチャートである。
【図１０】図３の論理修正処理（Ｓ３０２）の第２例の手順を示すフローチャートである。
【図１１】図３のレイアウト修正処理（Ｓ３０３）の手順を示すフローチャートである。
【図１２】半導体集積回路のレイアウトを示す概略図である。
【図１３】図１１の遅延素子追加ステップ（Ｓ１１０６）の結果に対応する半導体集積回路のレイアウトを示す概略図である。
【発明を実施するための形態】
【００１６】
以下、本発明の実施形態について、図面を参照して詳細に説明する。
【００１７】
本発明の実施形態に係る設計装置の構成について説明する。図１は、本発明の実施形態に係る設計装置１０の構成を示すブロック図である。図２は、本発明の実施形態に係る設計方法をコンピュータに実行させるための機能を示す概略図である。
【００１８】
図１に示すように、設計装置１０は、プロセッサ１２と、メモリ１４と、入力装置１６と、出力装置１８と、を備える。プロセッサ１２には、メモリ１４と、入力装置１６と、出力装置１８と、ネットワークインタフェース１９と、が接続される。メモリ１４には、本発明の実施形態に係る設計方法をコンピュータに実行させるための設計プログラムが格納される。メモリ１４は不揮発性半導体記憶装置等のコンピュータ読み取り可能な記憶媒体である。ネットワークインタフェース１９には、サーバ等のネットワーク端末（図示せず）が接続される。例えば、入力装置１６はキーボードであり、出力装置１８は液晶ディスプレイである。
【００１９】
図１のプロセッサ１２は、メモリ１４に格納された設計プログラムを起動することにより、本発明の実施形態に係る設計方法をコンピュータに実行させるための機能を実現する。具体的には、図２に示すように、クロックツリー生成部１２１と、論理修正部１２２と、レイアウト修正部１２３と、出力部１２４と、が実現される。
【００２０】
図２のクロックツリー生成部１２１は、ＣＴＳによりクロックツリーを生成するように構成される。
【００２１】
図２の論理修正部１２２は、クロックツリー生成部１２１により生成されたクロックツリーに対応する回路データについて、セットアップタイミングを考慮せずにホールド違反を修正するように、遅延素子を論理的に挿入するように構成される。
【００２２】
図２のレイアウト修正部１２３は、論理修正部１２２の処理結果に基づいて、半導体集積回路のレイアウトを修正するように構成される。具体的には、レイアウト修正部１２３は、遅延素子が論理的に挿入されたことに伴う論理セルの配置及び論理セル間の配線を修正する。
【００２３】
図２の出力部１２４は、レイアウト修正部１２３により修正された半導体集積回路のレイアウトを出力する構成される。
【００２４】
本発明の実施形態に係る設計方法について説明する。図３は、本発明の実施形態に係る半導体集積回路の設計の手順を示すフローチャートである。
【００２５】
図３の設計は、半導体集積回路のタイミング違反を修正するために実行される。
【００２６】
＜図３：クロックツリー生成処理（Ｓ３０１）＞  クロックツリー生成部１２１が、ＣＴＳによりクロックツリーを生成する。クロックツリー生成処理（Ｓ３０１）の詳細については後述する。
【００２７】
＜図３：論理修正処理（Ｓ３０２）＞  論理修正部１２２が、セットアップタイミングを考慮せずにホールド違反を修正するように、クロックツリー生成処理（Ｓ３０１）において生成されたクロックツリーに対応する回路データに遅延素子を論理的に挿入する。論理修正処理（Ｓ３０２）の詳細については後述する。
【００２８】
＜図３：レイアウト修正処理（Ｓ３０３）＞  レイアウト修正部１２３が、論理修正処理（Ｓ３０２）の処理結果に基づいて、半導体集積回路のレイアウトを修正する。レイアウト修正処理（Ｓ３０３）の詳細については後述する。
【００２９】
＜図３：出力処理（Ｓ３０４）＞  出力部１２４が、レイアウト修正処理（Ｓ３０３）において修正された半導体集積回路のレイアウトを出力する。出力処理（Ｓ３０４）の後に、本発明の実施形態に係る設計は終了する。
【００３０】
クロックツリー生成処理（Ｓ３０１）の一例について説明する。図４は、図３のクロックツリー生成処理（Ｓ３０１）の手順を示すフローチャートである。図５は、図４のクロックツリー生成ステップ（Ｓ４０１）において生成されるクロックツリーの概略図である。
【００３１】
＜図４：クロックツリー生成ステップ（Ｓ４０１）＞  クロックツリー生成部１２１が、ＣＴＳによりクロックツリーを生成し、ゼロ・スキュー法又はユーズフル・スキュー法を用いてクロックを最適化する。それにより、図５のクロックツリーが生成される。クロックツリーは、フリップフロップやバッファ等の論理セルと、論理セル間のノードと、ノードを経由して論理セル間を接続するパスと、を含む。図５では、フリップフロップＦＦ１１〜ＦＦ１３，ＦＦ２１，ＦＦ２２，ＦＦ３１〜ＦＦ３３と、ノードＡ〜Ｈと、パスＰＡ，ＰＢＣ，ＰＤ，ＰＥＣ，ＰＥＨ，ＰＦ，ＰＧＨと、が示されている。
【００３２】
＜図４：タイミング解析ステップ（Ｓ４０２）＞  クロックツリー生成部１２１が、クロックツリー生成ステップ（Ｓ４０１）において生成されたクロックツリーに対応する回路データについて、全てのフリップフロップ間のセットアップタイミング、セットアップ違反量、及びクロック遅延を解析する。
【００３３】
＜図４：セットアップ余裕度算出ステップ（Ｓ４０３）＞  クロックツリー生成部１２１が、タイミング解析ステップ（Ｓ４０２）の結果に基づいて、セットアップ違反に対するセットアップタイミングの余裕度（以下、「セットアップ余裕度」という）を算出する。
【００３４】
セットアップ余裕度算出ステップ（Ｓ４０３）について説明する。図６は、図４のセットアップ余裕度算出ステップ（Ｓ４０３）の手順を示すフローチャートである。
【００３５】
＜図６：平均セットアップタイミング算出ステップ（Ｓ６０１）＞  クロックツリー生成部１２１は、図４のクロックツリー生成ステップ（Ｓ４０１）において生成されたクロックツリーに対応する回路データについて、基準セットアップタイミング（例えば、図５のフリップフロップＦＦ１１とフリップフロップＦＦ１２との間のセットアップタイミング）と、基準セットアップタイミングの後段のセットアップタイミング（例えば、図５のフリップフロップＦＦ１２とフリップフロップＦＦ１３との間のセットアップタイミング）と、の平均値を算出する。初期の基準セットアップタイミングは、先頭のフリップフロップ（例えば、図５のフリップフロップＦＦ１１，ＦＦ２１，ＦＦ３１）を含むフリップフロップ間のセットアップタイミングである。
【００３６】
＜図６：Ｓ６０２＞  クロックツリー生成部１２１が、平均セットアップタイミング算出ステップ（Ｓ６０１）において算出された平均値の大きさを判定する（Ｓ６０２）。平均値が０以上である場合（すなわち、セットアップタイミングに余裕がある場合）には（Ｓ６０２−ＮＯ）、セットアップ余裕度算出ステップ（Ｓ６０３）に進む。平均値が負である場合（すなわち、セットアップタイミングに余裕がない場合）には（Ｓ６０２−ＮＯ）、基準セットアップタイミング変更ステップ（Ｓ６１１）に進む。
【００３７】
＜図６：セットアップ余裕度算出ステップ（Ｓ６０３）＞  クロックツリー生成部１２１が、図４のタイミング解析ステップ（Ｓ４０２）において解析されたセットアップタイミングと、平均セットアップタイミング算出ステップ（Ｓ６０１）において算出された平均値と、の差を算出する。この差が、セットアップ余裕度である。すなわち、セットアップ余裕度は、セットアップタイミングを遅らせることができる程度を示す。換言すると、セットアップ余裕度の分だけセットアップタイミングを遅らせることによってホールド違反を修正することが許容される。セットアップ余裕度算出ステップ（Ｓ６０３）の後に、図４のセットアップ余裕度算出ステップ（Ｓ４０３）が終了する。
【００３８】
＜図６：基準セットアップタイミング変更ステップ（Ｓ６１１）＞  クロックツリー生成部１２１が、基準セットアップタイミングを変更する。それにより、平均セットアップ余裕度算出ステップ（Ｓ６０１）の基準セットアップタイミングの後段のセットアップタイミングが新しい基準セットアップタイミングになる。基準セットアップタイミング変更ステップ（Ｓ６１１）の後に、平均セットアップタイミング算出ステップ（Ｓ６０１）に戻る。
【００３９】
図５は、パスＰＡのセットアップ余裕度が０．２［ｎｓ］であり、パスＰＢＣのセットアップ余裕度が０．２［ｎｓ］であり、パスＰＤのセットアップ余裕度が０．５［ｎｓ］であり、パスＰＥＣのセットアップ余裕度が０．１［ｎｓ］であり、パスＰＥＨのセットアップ余裕度が０．８［ｎｓ］であり、パスＰＦのセットアップ余裕度が１．０［ｎｓ］であり、パスＰＧＨのセットアップ余裕度が０．１［ｎｓ］であり、パスＰＥＨに０．５［ｎｓ］のホールド違反が発生するケースを図示している。
【００４０】
＜図４：修正プラン生成ステップ（Ｓ４０４）＞  クロックツリー生成部１２１が、クロックを修正するための修正プランを生成する。具体的には、クロックツリー生成部１２１が、タイミング解析ステップ（Ｓ４０２）において解析されたクロック遅延に、図６のセットアップ余裕度算出ステップ（Ｓ６０３）において算出されたセットアップ余裕度を加算する。次いで、クロックツリー生成部１２１が、クロック遅延とセットアップ余裕度との和に基づいて、クロックを修正するための修正プランを生成する。具体的には、クロックツリー生成部１２１は、セットアップ余裕度が負である部分については、クロックを早めるために、クロック遅延とセットアップ余裕度の和を目標値として設定し、その目標値を満たすようにクロックツリーを生成し直す。一方、セットアップ余裕度が０以上である部分については、クロックツリー生成部１２１は、セットアップ余裕度に相当する遅延素子を論理的に挿入する。それにより、図５に示すように、フリップフロップＦＦ２２のセットアップタイミングを０．３［ｎｓ］遅らせ、フリップフロップＦＦ３２のセットアップタイミングを０．５［ｎｓ］早めるような修正プランが生成される。
【００４１】
＜図４：クロック修正ステップ（Ｓ４０５）＞  クロックツリー生成部１２１が、修正プラン生成ステップ（Ｓ４０４）において生成された修正プランに基づいて、論理セルのクロックを修正する。クロック修正ステップ（Ｓ４０５）の後に、図３のクロックツリー生成処理（Ｓ３０１）が終了する。
【００４２】
クロック修正ステップ（Ｓ４０５）について説明する。図７は、図４のクロック修正ステップ（Ｓ４０５）において修正されるクロックツリーの概略図である。図８は、図４のクロック修正ステップ（Ｓ４０５）において修正されるパス毎のセットアップ余裕度を示す表である。
【００４３】
図７に示すように、クロック修正ステップ（Ｓ４０５）では、クロックツリーにおけるフリップフロップＦＦ２２及びフリップフロップＦＦ３２の位置を変更する。その結果、図７及び図８に示すように、パスＰＤのセットアップ余裕度が０．５［ｎｓ］から０．２［ｎｓ］になり、パスＰＥＨのセットアップ余裕度が０．８［ｎｓ］から０．５［ｎｓ］になり、パスＰＦのセットアップ余裕度が１［ｎｓ］から０．５［ｎｓ］になり、パスＰＧＨのセットアップ余裕度は０．１［ｎｓ］から０．６［ｎｓ］になる。また、図７に示すように、パスＰＥＨに０．２［ｎｓ］のホールド違反が発生する。
【００４４】
上記のとおり、図３のクロックツリー生成処理（Ｓ３０１）では、クロックツリー生成部１２１は、クロックツリーのセットアップ余裕度を変更する。換言すると、クロックツリー生成部１２１は、修正プランにおいて示された論理セルのクロックツリー上の位置を変更することにより、セットアップ余裕度の最大値と最小値との差を低減する。すなわち、クロックツリー生成部１２１は、クロックツリーにおける全てのパスのセットアップ余裕度を均一化する。その結果、パスＰＤ，ＰＥＨ，ＰＦのような大きいセットアップ余裕度を有するパスのセットアップ余裕度が減少し、パスＰＧＨのような小さいセットアップ余裕度を有するパスのセットアップ余裕度が増加する。それにより、ホールド違反の修正が容易になる。
【００４５】
論理修正処理（Ｓ３０２）の第１例について説明する。図９は、図３の論理修正処理（Ｓ３０２）の第１例の手順を示すフローチャートである。
【００４６】
＜図９：第１ホールド違反修正ステップ（Ｓ９０１）＞  論理修正部１２２が、図３のクロックツリー生成ステップ（Ｓ３０２）において生成されたクロックツリーに対応する回路データについて、ホールド違反を修正する。具体的には、論理修正部１２２が、ホールド違反を含む違反パスを抽出し、複数の違反パスに共通する共通ノードを特定し、ホールド違反量に相当する遅延素子を共通ノードに挿入する。それにより、ホールド違反が解消される。このとき、挿入された遅延素子に起因して、セットアップ違反が発生する可能性があるが、論理修正部１２２は、セットアップ違反が発生したとしても、ホールド違反を解消するために、遅延素子を挿入する。すなわち、第１ホールド違反修正ステップ（Ｓ９０１）では、セットアップ違反を考慮せずに、ホールド違反が修正される。
【００４７】
＜図９：Ｓ９０２＞  論理修正部１２２が、第１ホールド違反修正ステップ（Ｓ９０１）の結果に基づいて、セットアップタイミングと所定のセットアップ制約とを比較することにより、セットアップ違反の有無を判定する（Ｓ９０２）。セットアップ違反がある場合には（Ｓ９０２−ＹＥＳ）、セットアップ最適化ステップ（Ｓ９０３）に進む。セットアップ違反がない場合には（Ｓ９０２−ＮＯ）、図３の論理修正処理（Ｓ３０２）が終了する。
【００４８】
＜図９：セットアップ最適化ステップ（Ｓ９０３）＞  論理修正部１２２が、セットアップ違反量が最も大きい違反パスを特定し、セットアップ違反がなくなるまで違反パスのセットアップ違反を最適化する。具体的には、論理修正部１２２は、論理セルのサイズの増加、論理セルの挿入又は削除、及び論理セルの配置変更等を行うことにより、セットアップ違反を最適化する。
【００４９】
＜図９：Ｓ９０４＞  論理修正部１２２が、セットアップ最適化ステップ（Ｓ９０３）の結果に基づいて、セットアップタイミングと所定のセットアップ制約とを比較することにより、セットアップ違反の有無を判定する（Ｓ９０４）。セットアップ違反がある場合には（Ｓ９０４−ＹＥＳ）、遅延素子削除ステップ（Ｓ９０５）に進む。セットアップ違反がない場合には（Ｓ９０４−ＮＯ）、図３の論理修正処理（Ｓ３０２）が終了する。
【００５０】
＜図９：遅延素子削除ステップ（Ｓ９０５）＞  論理修正部１２２が、第１ホールド違反修正ステップ（Ｓ９０１）において挿入された遅延素子のうち、違反パス上に残っている遅延素子を、セットアップ違反がなくなるまで削除する。すなわち、遅延素子削除ステップ（Ｓ９０５）の後は、回路データは、図３のクロックツリー生成処理（Ｓ３０１）において生成されたクロックツリーに対応している。
【００５１】
＜図９：Ｓ９０６＞  論理修正部１２２が、遅延素子削除ステップ（Ｓ９０５）の結果に基づいて、ホールドタイミングと所定のホールド制約とを比較することにより、ホールド違反の有無を判定する（Ｓ９０６）。ホールド違反がある場合には（Ｓ９０６−ＹＥＳ）、第２ホールド違反修正ステップ（Ｓ９０７）に進む。ホールド違反がない場合には（Ｓ９０６−ＮＯ）、図３の論理修正処理（Ｓ３０２）が終了する。
【００５２】
＜図９：第２ホールド違反修正ステップ（Ｓ９０７）＞  論理修正部１２２が、図３のクロックツリー生成処理（Ｓ３０１）において生成されたクロックツリーに対応する回路データのホールド違反を修正する。具体的には、論理修正部１２２が、ホールド違反を含む違反パスを抽出し、複数の違反パスに共通する共通ノードを特定し、図４のセットアップ余裕度算出ステップ（Ｓ４０３）と同様に共通ノードのセットアップ余裕度を算出し、ホールド違反量とセットアップ余裕度のうち小さい方の値に相当する遅延素子を共通ノードに挿入する。第２ホールド違反修正ステップ（Ｓ９０７）は、全ての共通ノードについて適用される。それにより、セットアップ違反を考慮してホールド違反が修正される。
【００５３】
第２ホールド違反修正ステップ（Ｓ９０７）の後に、図３の論理修正処理（Ｓ３０２）が終了する。
【００５４】
上記のとおり、図３の論理修正処理（Ｓ３０２）の第１例では、論理修正部１２２は、遅延素子を論理的に挿入した後に、セットアップ違反を修正する。また、論理修正部１２２は、セットアップ違反を修正できない場合に、論理的に挿入した遅延素子を削除する。換言すると、論理修正部１２２はセットアップ違反を考慮しないでホールド違反を修正し、セットアップ違反が残っていない場合には論理修正処理（Ｓ３０２）が終了する。それにより、ホールド違反を修正するための所要時間を短縮することができる。
【００５５】
論理修正処理（Ｓ３０２）の第２例について説明する。図１０は、図３の論理修正処理（Ｓ３０２）の第２例の手順を示すフローチャートである。
【００５６】
＜図１０：ホールドタイミング解析ステップ（Ｓ１００１）＞  論理修正部１２２が、図４のクロックツリー生成ステップ（Ｓ４０１）において生成されたクロックツリーに対応する回路データについて、全てのフリップフロップ間のホールドタイミングを解析する。
【００５７】
＜図１０：Ｓ１００２＞  論理修正部１２２が、ホールドタイミング解析ステップ（Ｓ１００１）によって解析されたホールドタイミングと所定のホールド制約とを比較することにより、ホールド違反の有無を判定する（Ｓ１００２）。ホールド違反がある場合には（Ｓ１００２−ＹＥＳ）、探索ステップ（Ｓ１００３）に進む。ホールド違反がない場合には（Ｓ１００２−ＮＯ）、Ｓ１０２１に進む。
【００５８】
＜図１０：探索ステップ（Ｓ１００３）＞  論理修正部１２２が、ホールド違反を含む違反パスについて、遅延素子を挿入できる位置を探索する。
【００５９】
＜図１０：セットアップタイミング解析ステップ（Ｓ１００４）＞  論理修正部１２２が、探索ステップ（Ｓ１００３）の結果に基づいて遅延素子が挿入された場合のセットアップタイミングを解析する。
【００６０】
＜図１０：Ｓ１００５＞  論理修正部１２２が、セットアップ解析ステップ（Ｓ１００４）において解析されたセットアップタイミングと所定のセットアップ制約とを比較することにより、探索ステップ（Ｓ１００３）の結果に基づいて遅延素子が挿入された場合にセットアップ違反が発生するか否かを判定する（Ｓ１００５）。セットアップ違反が発生する場合には（Ｓ１００５−ＹＥＳ）、潜在的余裕度解析ステップ（Ｓ１００６）に進む。セットアップ違反が発生しない場合には（Ｓ１００５−ＮＯ）、第２ホールド違反修正ステップ（Ｓ１０１１）に進む。
【００６１】
＜図１０：潜在的余裕度解析ステップ（Ｓ１００６）＞  論理修正部１２２が、セットアップ違反に対するセットアップタイミングの潜在的余裕度を解析する。潜在的余裕度は、遅延素子を挿入することに起因するセットアップ違反量の許容範囲を示す。
【００６２】
潜在的余裕度解析ステップ（Ｓ１００６）の第１例について説明する。潜在的余裕度解析ステップ（Ｓ１００６）の第１例では、論理修正部１２２は、仮の遅延素子を違反パス上に挿入し、図９のセットアップ最適化ステップ（Ｓ９０３）と同様の処理を行い、ホールド違反を改善できるかどうかを試す。潜在的余裕度解析ステップ（Ｓ１００６）の第１例では、ホールド違反の修正精度を改善することができる。
【００６３】
潜在的余裕度解析ステップ（Ｓ１００６）の第２例について説明する。潜在的余裕度解析ステップ（Ｓ１００６）の第２例では、論理修正部１２２は、過去の設計におけるデータから論理セルあたりの遅延値Ｘを仮定し、仮の遅延素子が挿入される違反パス（以下、「対象セットアップパス」という）上の論理セルの数と遅延値Ｘとを乗算し、仮の遅延素子が挿入される前の違反パスの遅延値Ｘ０と乗算結果との差を算出する。算出された差が潜在的余裕度である。潜在的余裕度解析ステップ（Ｓ１００６）の第２例では、所要時間を短縮することができる。
【００６４】
潜在的余裕度解析ステップ（Ｓ１００６）の第３例について説明する。潜在的余裕度解析ステップ（Ｓ１００６）の第３例では、論理修正部１２２は、仮の遅延素子が挿入される前の半導体集積回路から各マクロセルの遅延値の平均値ＸＡＶＥを算出し、対象セットアップパス上の各論理セルの遅延値の目標値（所定の値）ＸＴと平均値ＸＡＶＥとを合算し、仮の遅延素子が挿入される前の遅延パスの遅延値Ｘ０と合算結果との差を算出する。算出された差が潜在的余裕度である。それにより、ホールド違反の修正精度及び所要時間の両方を改善することができる。
【００６５】
＜図１０：Ｓ１００７＞  論理修正部１２２が、潜在的余裕度解析ステップ（Ｓ１００６）において解析された潜在的余裕度とセットアップ違反との大小関係を判定する（Ｓ１００７）。潜在的余裕度がセットアップ違反より大きい場合には（Ｓ１００７−ＹＥＳ）、第３ホールド違反修正ステップ（Ｓ１００８）に進む。潜在的余裕度がセットアップ違反以下である場合には（Ｓ１００７−ＮＯ）、探索ステップ（Ｓ１００３）に戻る。
【００６６】
＜図１０：第３ホールド違反修正ステップ（Ｓ１００８）＞  論理修正部１２２が、探索ステップ（Ｓ１００３）において探索された位置に遅延素子を挿入する。すなわち、潜在的余裕度を考慮して遅延素子が挿入される。それにより、セットアップ違反を発生させることなく、ホールド違反が解消される。第３ホールド違反修正ステップ（Ｓ１００８）の後は、ホールドタイミング解析ステップ（Ｓ１００１）に戻る。
【００６７】
＜図１０：第２ホールド違反修正ステップ（Ｓ１０１１）＞  論理修正部１２２が、図９の第２ホールド違反修正ステップ（Ｓ９０７）と同様の処理を行う。すなわち、セットアップ違反を考慮してホールド違反が修正される。第２ホールド違反修正ステップ（Ｓ１０１１）の後は、ホールドタイミング解析ステップ（Ｓ１００１）に戻る。
【００６８】
＜図１０：Ｓ１０２１＞  論理修正部１２２が、第３ホールド違反修正ステップ（Ｓ１００８）が完了したか否かを判定する（Ｓ１０２１）。第３ホールド違反修正ステップ（Ｓ１００８）が完了している場合には（Ｓ１０２１−ＹＥＳ）、セットアップ最適化ステップ（Ｓ１０２２）に進む。第３ホールド違反修正ステップ（Ｓ１００８）が完了していない場合には（Ｓ１０２１−ＮＯ）、図３の論理修正処理（Ｓ３０２）が終了する。すなわち、潜在的余裕度を考慮して遅延素子が挿入されている場合にはセットアップ最適化ステップ（Ｓ１０２２）が行われる。
【００６９】
＜図１０：セットアップ最適化ステップ（Ｓ１０２２）＞  論理修正部１２２が、図９のセットアップ最適化ステップ（Ｓ９０３）と同様の処理を行う。セットアップ最適化ステップ（Ｓ１０２２）の後に、図３の論理修正処理（Ｓ３０２）が終了する。
【００７０】
上記のとおり、図３の論理修正処理（Ｓ３０２）の第２例では、論理修正部１２２は、セットアップ違反に対するセットアップタイミングの潜在的余裕度を解析し、その解析結果に基づいて遅延素子を論理的に挿入する。また、論理修正部１２２は、潜在的余裕度が所定の許容範囲に含まれる場合に、遅延素子を論理的に挿入する。換言すると、論理修正部１２２は、セットアップタイミングの潜在的余裕度がある場合には、セットアップ違反が発生したとしても潜在的余裕度を考慮してホールド違反を修正する。それにより、ホールド違反の修正精度及び論理修正処理（Ｓ３０２）の所要時間の両方を改善することができる。
【００７１】
レイアウト修正処理（Ｓ３０３）の一例について説明する。図１１は、図３のレイアウト修正処理（Ｓ３０３）の手順を示すフローチャートである。
【００７２】
＜図１１：タイミング解析ステップ（Ｓ１１０１）＞  レイアウト修正部１２３が、図３の論理修正処理（Ｓ３０２）の後の回路データについて、全てのフリップフロップ間のセットアップタイミング、ホールドタイミング、ホールド違反量、及びクロック遅延を解析する。
【００７３】
＜図１１：Ｓ１１０２）＞  レイアウト修正部１２３が、タイミング解析ステップ（Ｓ１１０１）において解析されたホールドタイミングと所定のホールド制約とを比較することにより、ホールド違反の有無を判定する（Ｓ１１０２）。ホールド違反がある場合には（Ｓ１１０２−ＹＥＳ）、タイミング改善情報取得ステップ（Ｓ１１０３）に進む。ホールド違反がない場合には（Ｓ１１０２−ＮＯ）、図３のレイアウト修正処理（Ｓ３０３）が終了する。
【００７４】
＜図１１：タイミング改善情報取得ステップ（Ｓ１１０３）＞  レイアウト修正部１２３が、ホールド違反を有するネットの位置情報（座標）と、ホールド違反を有するネットに接続された論理セルの位置情報（座標）と、を含むタイミング改善情報を取得する。それにより、セットアップ違反を考慮してホールド違反を解消するのに必要な情報が得られる。図１２は、半導体集積回路のレイアウトを示す概略図である。例えば、図１２において、論理セルＡと論理セルＢとを接続するネットＡＢがホールド違反を有するとすると、タイミング改善情報取得ステップ（Ｓ１１０３）において、ネットＡＢの位置情報と、論理セルＡの位置情報と、論理セルＢの位置情報と、が取得される。
【００７５】
＜図１１：空き領域検索ステップ（Ｓ１１０４）＞  レイアウト修正部１２３が、タイミング改善情報取得ステップ（Ｓ１１０３）において取得された論理セルの位置情報に基づいて、その論理セルの近傍の空き領域を検索する。また、レイアウト修正部１２３は、検索された空き領域の座標及び幅を取得する。それにより、遅延素子を挿入可能な空き領域及び空き領域情報が検索される。例えば、図１２では、空き領域Ｓ１〜Ｓ５の座標及び幅が取得される。例えば、空き領域Ｓ１の幅は１０［μｍ］であり、空き領域Ｓ２の幅は５［μｍ］であり、空き領域Ｓ３の幅は３［μｍ］であり、空き領域Ｓ４の幅は３［μｍ］であり、空き領域Ｓ５の幅は５［μｍ］である。論理セルＢの近傍には空き領域Ｓ２〜Ｓ５があり、論理セルＢから離れた場所には空き領域Ｓ１がある。
【００７６】
＜図１１：遅延素子選択ステップ（Ｓ１１０５）＞  レイアウト修正部１２３が、空き領域検索ステップ（Ｓ１１０４）において検索された空き領域に配置可能な複数の遅延素子を特定し、特定された複数の遅延素子の中から必要な遅延量を有する遅延素子の組み合わせを選択する。具体的には、メモリ１４には、複数の遅延素子のプロパティ（遅延素子の幅及び改善されるタイミング値）が格納されている。レイアウト修正部１２３は、そのプロパティ、空き領域の大きさ、及びホールド違反量に基づいて、セットアップ違反を考慮してホールド違反を解消するのに挿入可能な遅延素子の種類及びサイズを選択する。そのような遅延素子が複数ある場合には、所定の優先順位に基づいて遅延素子が選択される（例えば、タイミグ改善の効果が最も大きい遅延素子が選択される）。
【００７７】
＜図１１：遅延素子追加ステップ（Ｓ１１０６）＞  レイアウト修正部１２３が、遅延素子選択ステップ（Ｓ１１０５）において選択された遅延素子と、その遅延素子とホールド違反を有するネットに接続された論理セルとを接続する新しいネットと、を回路データに追加する。遅延素子追加ステップ（Ｓ１１０６）の後は、タイミング解析ステップ（Ｓ１１０１）に戻る。すなわち、タイミング改善情報取得ステップ（Ｓ１１０３）〜遅延素子追加ステップ（Ｓ１１０６）は、ホールド違反がなくなるまで繰り返される。図３の出力処理（Ｓ３０４）では、ホールド違反のない回路データが、半導体集積回路のレイアウトとして出力される。図１３は、図１１の遅延素子追加ステップ（Ｓ１１０６）の結果に対応する半導体集積回路のレイアウトを示す概略図である。例えば、図１３に示すように、遅延素子選択ステップ（Ｓ１１０５）において、３［μｍ］の幅を有する遅延素子Ｃと、５［μｍ］の幅を有する遅延素子Ｄと、が選択された場合には、遅延素子追加ステップ（Ｓ１１０６）において、遅延素子Ｄが空き領域Ｓ２に追加され、遅延素子Ｃが空き領域Ｓ３に追加され、論理セルＡと遅延素子Ｄとを接続するネットＡＤが追加される。
【００７８】
上記のとおり、レイアウト修正部１２３は、論理修正部１２２の処理結果に基づいて半導体集積回路の空き領域情報を検索し、空き領域の座標及び幅を含む空き領域情報に基づいて、半導体集積回路に追加すべき遅延素子の種類及びサイズを選択し、選択された遅延素子を用いて半導体集積回路のレイアウトを修正する。その結果、ホールド違反を有するネットに接続された論理セルの近傍に遅延素子が配置される。それにより、配線長を短縮することができる。
【００７９】
なお、本発明の実施形態では、論理修正処理（Ｓ３０２）の第１例は、論理修正処理（Ｓ３０２）の第２例と組み合わせることができる。具体的には、設計装置１０は、論理修正処理（Ｓ３０２）の第１例を実行するための第１モードと、論理修正処理（Ｓ３０２）の第２例を実行するための第２モードと、を備える。そして、論理修正部１２２は、ユーザから受け付けるコマンドが処理速度を優先することを示す場合には第１モードを実行し、コマンドが処理結果を優先することを示す場合には、第２モードを実行する。また、論理修正部１２２は、第１モードを実行した後に、第２モードを実行しても良い。それにより、様々なユーザの要求に応じた設計方法を実現することができる。
【００８０】
本発明の実施形態によれば、タイミング違反の修正の様々な問題を解消することができる。特に、タイミング違反を解消するために必要な遅延素子の数を低減することができる。また、ホールド違反を修正するために必要な数の遅延素子を挿入できないという問題を解決することができる。具体的には、図３のクロックツリー生成処理（Ｓ３０１）により、ホールド違反の修正が容易になる。また、図３の論理修正処理（Ｓ３０２）により、ホールド違反を修正するための所要時間を短縮することができる。また、図３の論理修正処理（Ｓ３０２）により、ホールド違反の修正精度及び修正時間の両方を改善することができる。また、図３のレイアウト修正処理（Ｓ３０３）により、配線長を短縮するを向上させることができる。
【００８１】
本発明の実施形態に係る設計装置１０の少なくとも一部は、ハードウェアで構成しても良いし、ソフトウェアで構成しても良い。ソフトウェアで構成する場合には、設計装置１０の少なくとも一部の機能を実現するプログラムをフレキシブルディスクやＣＤ−ＲＯＭ等の記録媒体に収納し、コンピュータに読み込ませて実行させても良い。記録媒体は、磁気ディスクや光ディスク等の着脱可能なものに限定されず、ハードディスク装置やメモリなどの固定型の記録媒体でも良い。
【００８２】
また、本発明の実施形態に係る設計装置１０の少なくとも一部の機能を実現するプログラムを、インターネット等の通信回線（無線通信も含む）を介して頒布しても良い。さらに、同プログラムを暗号化したり、変調をかけたり、圧縮した状態で、インターネット等の有線回線や無線回線を介して、あるいは記録媒体に収納して頒布しても良い。
【００８３】
なお、本発明は、上述した実施形態に限定されるものではなく、その要旨を逸脱しない範囲で構成要素を変形して具体化される。また、上述した実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明が形成可能である。例えば、上述した実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【符号の説明】
【００８４】
１０  設計装置
１２  プロセッサ
１２１  クロックツリー生成部
１２２  論理修正部
１２３  レイアウト修正部
１２４  出力部
１４  メモリ
１６  入力装置
１８  出力装置
１９  ネットワークインタフェース
【図１】
2011164684.tif 000003
【図２】
2011164684.tif 000004
【図３】
2011164684.tif 000005
【図４】
2011164684.tif 000006
【図５】
2011164684.tif 000007
【図６】
2011164684.tif 000008
【図７】
2011164684.tif 000009
【図８】
2011164684.tif 000010
【図９】
2011164684.tif 000011
【図１０】
2011164684.tif 000012
【図１１】
2011164684.tif 000013
【図１２】
2011164684.tif 000014
【図１３】
2011164684.tif 000015