(57)【特許請求の範囲】
【請求項１】
ハードウェア設計装置が実行する半導体集積回路のクロックツリーの形成方法であって、
コンピュータが、
前記ハードウェア設計装置の記録部に記録されている回路配置情報に基づいて、クロックツリー回路のＦＦ対のフリップフロップ間の経路に対して、クロックスキューがない状態でタイミング解析を行い、ホールドエラーが発生する基準値に対しての余裕度としてホールドスラック値を求めるホールドスラック計算処理と、
前記記録部に記録されている、前記クロックツリー回路に用いられているバッファの前記回路配置情報に基づき前記クロックツリー回路の分岐点となる前記バッファから前記ＦＦ対ごとの前記フリップフロップ各々までの経路各々に対する遅延の最小値、最大値を計算し、前記記録部に記録するバッファ遅延計算処理と、
前記経路ごとに前記ホールドスラック値と前記バッファから前記ＦＦ対ごとの前記フリップフロップまでの一方の経路の前記最大値から他方の経路の前記最小値を減算した結果を比較して、ホールドスラック値より大きいと判断された場合は前記ＦＦ対をグループ化するＦＦ対集合操作処理と、
同一の前記グループの前記ＦＦ対の前記経路各々に、前記ＦＦ対が同一の前記バッファで駆動するように前記バッファを挿入するバッファ挿入処理と、
前記バッファ挿入処理で生成した結果に対して再度ホールドスラック値の計算を行うホールドスラック再計算処理と、
前記ホールドスラック再計算処理の値に基づいて前記ＦＦ対集合操作処理から再処理をし、前記経路ごとに前記比較の結果がホールドスラック値より小さいと判断されるまで処理をする処理と、
を実行することを特徴とするクロックツリー形成方法。
【請求項２】
コンピュータに、
前記ハードウェア設計装置の記録部に記録されている回路配置情報に基づいて、クロックツリー回路のＦＦ対のフリップフロップ間の経路に対して、クロックスキューがない状態でタイミング解析を行い、ホールドエラーが発生する基準値に対しての余裕度として初期のホールドスラック値を求めさせるホールドスラック計算処理と、
前記記録部に記録されている、前記クロックツリー回路に用いられているバッファの前記回路配置情報に基づき前記クロックツリー回路の分岐点となる前記バッファから前記ＦＦ対ごとの前記フリップフロップ各々までの経路各々に対する遅延の最小値、最大値を計算させ、前記記録部に記録させるバッファ遅延計算処理と、
前記経路ごとに前記ホールドスラック値と前記バッファから前記ＦＦ対ごとの前記フリップフロップまでの一方の経路の前記最大値から他方の経路の前記最小値を減算した結果を比較して、ホールドスラック値より大きいと判断された場合は前記ＦＦ対をグループ化させるＦＦ対集合操作処理と、
同一の前記グループの前記ＦＦ対の前記経路各々に、前記ＦＦ対が同一の前記バッファで駆動するように前記バッファを挿入させるバッファ挿入処理と、
前記バッファ挿入処理で生成した結果に対して再度ホールドスラック値の計算をさせるホールドスラック再計算処理と、
再度計算したホールドスラック値に基づいて前記ＦＦ対集合操作処理から再処理をさせ、前記経路ごとの前記比較の結果がホールドスラック値より小さいと判断されるまで処理をさせる処理と、
を実行させるためのハードウェア設計における半導体集積回路のクロックツリーの形成設計プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、製造を安定的に実施するためのハードウェア設計に係わり、特にクロックツリー形成時にホールドエラーの発生を抑える技術に関する。
【背景技術】
【０００２】
近年、回路の微細化にともない製造ばらつきの影響を無視できなくなっており、製造ばらつきの影響を考慮した設計が不可欠となっている。特にクロックツリーなどの製造では、製造ばらつきによって発生するクロックスキューによりタイミングエラーが発生する場合があり、タイミング収束を難しくする要因のひとつとなっている。そのため、クロックツリー設計において製造ばらつきの影響の小さいクロックツリーを生成することは、タイミング収束にとって非常に重要である。
【０００３】
特許文献１によれば、ホールドエラー発生の削減を考慮したクロックツリー生成手法に関する技術として、回路内信号線の最適化方法が提案されている。これは、ファンアウト制約を満足するかに着目し、バッファ挿入を行うかの判断を行い。ファンアウト制約を満足していない場合に、評価値算出部によって求められた評価値算出する。この評価値に基づいて、分割部によりＦＦ（フリップフロップ）をいくつかのグループに分割し、バッファ挿入部で分割されたグループに対してバッファ挿入を行う提案がされている。
【０００４】
また、特許文献２、３などにクロックツリーの形成方法が提案されている。特許文献２にでは、素子や配線の形態により異なる製造プロセス等に関連する物理的な製造ばらつきに起因する遅延のばらつきを、クロックツリー形成の各方式ごとに定めておき、方式ごとに考慮すべきマージンを変えている。物理的なばらつきが小さい部分に対しては必要以上のマージンを考慮する必要をなくし、遅延制約の問題となる部分に対してはばらつきの少ない方式を適用することにより回路設計に必要以上の制約を課する必要がなくなるという効果が記載されている。
【０００５】
しかしながら、特許文献１の提案はファンアウト制約に基づいたバッファ挿入であり、遅延（ｄｅｌａｙ）、スキュー（ｓｋｅｗ）に対する考慮がされていない。そのため、従来技術を用いて生成されたクロックツリーは遅延、スキューが増大し、タイミングエラーが発生しやすい状況となる。また、製造ばらつきによるスキューの考慮が行なわれてなく、製造ばらつきが発生した状況でホールドエラーの発生を確実に防止することは保証できない。
【０００６】
また、製造工程において、基板上にトランジスタや配線パターンを形成してい場合に、基板上のトランジスタ、配線パターンをすべて均一に形成することは困難である。トランジスタや配線パターンごとで異なった特性になることを前提として考える必要がある。例えば、図１０に示すように、設計ツール上は同じゲートセル８１、８２を配置して設計しても、製造したゲートセル８１ａと８２ａで基板上の位置によってはゲート遅延が異なり、設計上は配線長や配線幅が同じ配線パターンであっても配線遅延が異なることがある。このため、設計段階からこのような製造ばらつきが発生してもタイミングなどの問題の起きない設計を行うことが必要となっている。
【０００７】
また、図１１に示すように３つのゲートセル９３、９４、９５が直列に接続された場合のタイミング検証をする上では、通常は図１１（ｂ）に示すように通常のパス遅延（ｔｙｐ）で計算される。しかし、製造ばらつきを考慮した場合、ひとつのパスに対して、図１１（ａ）のように早い方にばらついたケース（遅延の早いトランジスタ、配線パターンで形成されたケース：Ｍｉｎ側）と、ｃ）遅い方にばらついたケース（遅延の遅いトランジスタ、配線パターンで形成されたケース：Ｍａｘ側）を想定し、パス遅延が計算される。
【０００８】
例えば、図１１の計算結果は、ｍｉｎ側では３Ｔｍｉｎ、ｍａｘ側では３Ｔｍａｘ、通常では３Ｔｔｙｐとなる（Ｔｍｉｎ＜Ｔｔｙｐ＜Ｔｍａｘ）。
また、図１２に示す設計上のゲートセル１０１〜１０４、１０６〜１０８、ＦＦ１０５、１０９から構成される回路について、製造ばらつきを考慮してタイミングチェックを行う場合について説明する。図１２に示すセットアップ解析では送り手側のＦＦ１０５ａのクロックパス遅延はｍａｘ側、受け手側のＦＦ１０９ａのクロックパス遅延はｍｉｎ側の遅延を用い、ホールド解析では送り手側のＦＦ１０５ｂのクロックパス遅延はｍｉｎ側、受け手側のＦＦ１０９ｂのクロックパス遅延はｍａｘ側の遅延を用いて、チェックが行われる。
【０００９】
ここで、ホールド解析に着目すると、ホールド解析は解析を行うＦＦ対に対して、それらのＦＦ１０５ｂ、１０９ｂからクロックパスをさかのぼり、当該ＦＦ１０５ｂ、１０９ｂ対へ分岐する点からのクロックパス遅延を用いて解析される。このため、解析を行うＦＦ対から遠くに分岐点があると、それだけ製造ばらつき考慮の影響を受けることになり、当該ＦＦ対の間のクロックスキューは大きくなる。
【００１０】
図１３（ａ）に示すようにバッファ１１１の出力から分岐しＦＦ１１１２の入力に向かうバッファ１１２〜１１６のルートＡと、ＦＦ１１１３の入力に向かうバッファ１１７〜ＦＦ１１１１のルートＢのクロックスキューは大きくなる。ここで、クロックスキューはルートＡのクロックディレーとルートＢのクロックディレーの差を求めたものの絶対値である。
【００１１】
そして、大きなクロックスキューが発生したときは、ホールドエラーが発生しやすくなる。一方、図１３（ｂ）に示すようにＦＦ対１１１２、１１１３の近くのバッファ１１６（１１１１）に分岐点があると、製造ばらつきの影響は少なくなり、当該ＦＦ対の間のクロックスキューは小さくなる。
【００１２】
ホールドエラーが発生した場合、エラーを解消するように回路の修正が行われる。しかし、図１４（ａ）に示すようにホールドエラーが発生しているＦＦ１２１とＦＦ１２２間のパスに、図１４（ｂ）のようにディレイバッファを挿入したり、クロックツリー自体の変更が行われる。しかし、ディレイバッファを挿入することは回路面積の増大につながり、設計収束を遅らせる原因となる。また、クロックツリーの変更は他のタイミングパスに影響を及ぼし、タイミング収束、設計収束を遅らせる原因となる。
【特許文献１】特許第３３３７４１２号公報
【特許文献２】特許第２９５３３８４号公報
【特許文献３】特開２００５−４４９６号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
本発明は上記のような実情に鑑てなされたものであり、製造ばらつきの影響の小さいクロックツリーを生成する設計装置とプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１４】
本発明のひとつの態様では、ハードウェア設計装置による半導体集積回路のクロックツリーの形成方法であって、上記ハードウェア設計装置に記録されている回路配置情報に基づいて、クロックツリー回路のＦＦ対のフリップフロップ間の経路に対して、クロックスキューがない状態でタイミング解析を行い、ホールドエラーが発生する基準値に対しての余裕度としてホールドスラック値を求めるホールドスラック計算処理と、上記クロックツリー回路に用いられているバッファの上記回路配置情報に基づき上記クロックツリー回路の分岐点となる上記バッファから上記ＦＦ対ごとの上記フリップフロップ入力間の経路に対して、上記経路の遅延の最小値、最大値を計算し記憶するバッファ遅延計算処理と、上記経路ごとに上記ホールドスラック値と上記最大値から上記最小値を減算した結果を比較して、ホールドスラック値より大きいと判断された場合は上記ＦＦ対をグループ化するＦＦ対集合操作処理と、同一の上記グループの上記ＦＦ対の上記経路ごとに、上記ＦＦ対が同一の上記バッファで駆動するように上記バッファを挿入するバッファ挿入処理を行うことを特徴とする。
【００１５】
好ましくは、上記バッファ挿入処理で生成した結果に対して再度ホールドスラック値の計算を行うホールドスラック再計算処理をし、上記ホールドスラック再計算処理の値に基づいて上記ＦＦ対集合操作処理から再処理をし、上記経路ごとに上記比較の結果がホールドスラック値より小さいと判断されるまで処理してもよい。
【００１６】
本発明の他の態様では、半導体集積回路のクロックツリーの形成設計を実行するプログラムであって、上記ハードウェア設計装置に記録されている回路配置情報に基づいて、クロックツリー回路のＦＦ対のフリップフロップ間の経路に対して、クロックスキューがない状態でタイミング解析を行い、ホールドエラーが発生する基準値に対しての余裕度として初期のホールドスラック値を求めるホールドスラック計算機能と、上記クロックツリー回路に用いられているバッファの上記回路配置情報に基づき上記クロックツリー回路の分岐点となる上記バッファから上記ＦＦ対ごとの上記フリップフロップ入力間の経路に対して、上記経路の遅延の最小値、最大値を計算し記憶するバッファ遅延計算機能と、上記経路ごとに上記ホールドスラック値と上記最大値から上記最小値を減算した結果を比較して、ホールドスラック値より大きいと判断された場合は上記ＦＦ対をグループ化するＦＦ対集合操作機能と、同一の上記グループの上記ＦＦ対の上記経路ごとに、上記ＦＦ対が同一の上記バッファで駆動するように上記バッファを挿入するバッファ挿入機能と、を有するプログラムでありコンピュータが実行可能な半導体集積回路のクロックツリーの形成設計プログラムである。
【００１７】
好ましくは、上記バッファ挿入機能で生成した結果に対して再度ホールドスラック値の計算を行い、再度計算したホールドスラック値に基づいて上記ＦＦ対集合操作機能から再処理をして、上記経路ごとに上記比較の結果がホールドスラック値より小さいと判断されるまで処理することを特徴とする。
【００１８】
上記構成によりクロックツリー生成を行なうことにより、ホールドクリティカルなＦＦ対に対して、ＦＦに近いところでバッファ挿入されるようになり、製造ばらつきを考慮した場合でも影響の少ない（ホールドエラーの発生を抑えられる）クロックツリーが生成される。
【発明の効果】
【００１９】
本発明によれば、製造ばらつきによるホールドエラーの発生を抑えられるクロックツリーが生成できる。
【発明を実施するための最良の形態】
【００２０】
以下図面に基づいて、本発明の実施形態について詳細を説明する。
（実施例１）
（本発明のシステムのブロック図）
図１は本発明の半導体集積回路を実現するためのハードウェア設計装置のブロック図である。図１において、設計装置１０は、ＣＰＵ１１、ＲＯＭ１２、ＲＡＭ１３、ハードディスクドライブ（ＨＤＤ）１４、フレキシブルディスクドライブ（ＦＤＤ）１５、入力インタフェース（入力Ｉ／Ｆ）１６、通信インタフェース（通信Ｉ／Ｆ）１７、出力インタフェース（出力Ｉ／Ｆ）１９、グラフィック処理部１１０などを備えている。また、上記各構成部はバス１１１によってそれぞれ接続されている。
【００２１】
ＣＰＵ１１は、ＲＯＭ１２、ＲＡＭ１３、ＨＤＤ１４、ＦＤＤ１５に格納されているプログラムやデータに応じた処理を実行し、設計装置１０の全体の制御などをする。ＲＯＭ１２は、ＣＰＵ１１が実行する基本的なプログラム（ブートプログラムなど）やデータを記録する。ＲＡＭ１３は、ＣＰＵ１１が実行途中のプログラムやデータを記録し、ワークエリアなどとして使用される。
【００２２】
ＨＤＤ１４には、ＣＰＵ１１が実行するＯＳ（Operation System）やアプリケーションプログラムなどが記録され、ＣＰＵ１１の制御に従いハードディスクにデータのリード／ライトを実行する。ＦＤＤ１５は、ＣＰＵ１１の制御にしたがってＦＤ１５ａに対するデータのリード／ライトを制御する。ＦＤ１５ａは、ＦＤＤ１５の制御で書き込まれたデータを記憶したり、ＦＤ１５ａに記憶されたデータを設計装置１０に読み取らせたりする。また、着脱可能な記録媒体としてＦＤ１５ａのほか、コンピュータで読み取り可能な記録媒体として、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ(DigitalVersatileDisc)、ＤＶＤ−ＲＡＭ(RandomAccessMemory)、ＣＤ−ＲＯＭ(CompactDiscReadOnlyMemory)、ＣＤ−Ｒ(Recordable)／ＲＷ(ReWritable)などがある。光磁気記録媒体には、ＭＯ(Magneto-Opticaldisk)などがある。
【００２３】
入力Ｉ／Ｆ１６は、マウスやキーボードが接続され、ユーザが入力した情報を受信し、バス１１１を介してＣＰＵ１１に送信する。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウスは、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００２４】
通信Ｉ／Ｆ１７は、必要に応じ、他のコンピュータとの間のＬＡＮ接続やインターネット接続や無線接続のためのインタフェースである。通信回線を通じてインターネットなどのネットワークを介して他の装置に接続される。そして、ネットワーク１８と内部のインタフェースは、外部装置からのデータの入出力を制御する。例えば、モデムやＬＡＮアダプタなどを採用することができる。
【００２５】
出力Ｉ／Ｆ１９は、プリンタなどの出力装置１９ａを制御するために備えられている。また、グラフィック処理部１１０には、ディスプレイなどの表示装置１１０ａが接続され、グラフィック処理部１１０は、ＣＰＵ１１からの描画命令に従って表示装置１１０ａの画面上に操作情報、論理シミュレーション後のログやカバレッジの集計結果、信号波形等を表示する。例えば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。なお、グラフィック処理部１１０を介さずに、出力Ｉ／Ｆ１９から表示装置と接続してもよい。
（本発明の原理）
ハードウェア設計装置には、入力装置１６ａから入力されたＨＤＬ（Hardware Description Language：ハードウェア記述言語）や回路図レベルで入力されたソースに基づいて論理合成をし、レイアウトおよびパターンを生成する。図２は本発明の原理を示す機能ブロック図である。図２に示すクロックツリーを最適化するブロックであるクロックツリー生成部２１は、ＣＰＵ１１にＨＤＤ１４やＲＯＭ１２に記録されている。クロックツリー生成部２１は、ホールドスラック計算部２２、バッファ遅延計算部２３、ＦＦ対集合操作部２４、バッファ挿入部２５、ホールドスラック再計算部２６などから構成されている。
【００２６】
クロックツリー生成部２１では、上記ソースに基づいてＨＤＤ１４などに記録されたライブラリ（部品情報、パターン情報等の回路配置に関する情報ライブラリ）からデータを選択し、回路配置に関するデータ（回路配置情報）を生成する。このデータを入力データ２７としてホールドスラック計算部２２に入力する。
【００２７】
そして、入力データ２７のクロックツリー回路のＦＦ対に該当する部分の経路に対して、クロックスキューがない状態（ideal mode）でタイミング解析を行い、初期のホールドスラック値を求める。ホールドスラック値とはホールドエラーが発生する基準値に対してどのくらいの余裕があるかを示す値である。
【００２８】
バッファ遅延計算部２３では、クロックツリーの製造ばらつきを考慮したバッファ（ゲートセルなどの素子）の遅延値の最小値、最大値を計算し記憶する。ここでＦＦ対の分岐点となるバッファから２つのＦＦ入力までの各経路に対して、上記ライブラリに登録されている回路配置情報の部品情報などから読み出したバッファの遅延データに基づき計算をする。本例ではライブラリのバッファに関するデータの遅延の最小値、最大値を使用して計算をする。計算結果はＲＡＭ１３などに記録する。
【００２９】
ＦＦ対集合操作部２４では、処理済みのＦＦ対、未処理のＦＦ対の集合を記録する。クロックツリーを最適化する以前のデータ（未処理のＦＦ対）と最適化後のＦＦ対（処理済）を記録する。クロックツリーに用いられているバッファの回路配置情報に基づきクロックツリーの分岐点となるバッファからＦＦ対ごとのフリップフロップ入力間の経路に対して、経路の遅延の最小値、最大値を計算し記録する。そして、経路ごとにホールドスラック値と最大値から最小値を減算した結果を比較して、ホールドスラック値より大きいと判断された場合はＦＦ対をグループ化するＦＦ対集合操作部２４で処理をする。
【００３０】
バッファ挿入部２５では、ＦＦ対のホールドスラック値とバッファ遅延計算部２３において計算されたばらつきを考慮して、バッファの遅延の最小値、最大値に基づいて同一グループのＦＦ対の経路ごとに、ＦＦ対が同一のバッファで駆動するようにバッファを挿入するバッファ挿入処理を行う。
【００３１】
次にホールドスラック再計算部２６では、バッファ挿入に応じてＦＦ対の再計算を行う。同一グループのＦＦ対の経路ごとに、ＦＦ対が同一のバッファで駆動するようにバッファを挿入するバッファ挿入処理をする。その後出力データ２８を生成し回路配置に使用する。
（本実施例のフロー）
図３はクロックツリー生成手法について示したフロー図である。上記説明したように、ステップＳ２１では、クロックスキュー＝０でタイミング解析を行い、パスが存在するＦＦ対に対して図４に示すようにＦＦ間のホールドスラック値を計算する。
【００３２】
ステップＳ２２では、バッファ挿入に使用するバッファに対して、ばらつきを考慮した遅延の最小値（Ｔｍｉｎ）、最大値（Ｔｍａｘ）を計算する。
ステップＳ２３では、（該当ＦＦ対のホールドスラック値）＜（Ｔｍａｘ−Ｔｍｉｎ）であるＦＦ対は、同じバッファで駆動するようにバッファを挿入する。
【００３３】
次に、バッファ挿入において使用するバッファに対して、ばらつきが発生したケースでの遅延（Ｔｍｉｎ，Ｔｍａｘ）を計算する。このとき、例えばバッファの入力端子条件、出力端子条件に許容される最悪の条件を与えて計算すれば、最もばらついた場合のバッファ遅延（Ｔｍｉｎ，Ｔｍａｘ）が計算される。そして、最初に求めた各ＦＦ対のホールドスラック値と、ばらつきが発生したときのスキュー値（Ｔｍａｘ−Ｔｍｉｎ）を比較する。その結果が、ホールドスラック値＜スキュー値（Ｔｍａｘ−Ｔｍｉｎ）の関係になっているＦＦ対に対しては、同じバッファで駆動するようにバッファの挿入を行う。
【００３４】
これは、異なるバッファで駆動すると、ばらつきによるスキューによりホールドエラーが発生してしまうからである。
図５（ａ）に示す場合は、バッファ５１からＦＦ５４のルートにバッファ５２がある。またＦＦ５５までの間にはバッファ５３が配置されている。このような場合、上記説明したようにホールドスラック値＜（Ｔｍａｘ−Ｔｍｉｎ）の関係であると、別々のバッファ５２、５３で駆動した場合ホールドエラーが発生する。しかし図５（ｂ）のようにバッファ５６から分岐するようにすれば、同じバッファで駆動しているため、バッファばらつきの影響を受けないので、ホールドエラーが発生しない。このようにして、ホールドスラック値と遅延（Ｔｍｉｎ、Ｔｍａｘ）の関係に着目し、ＦＦ直前のバッファを挿入したあと、同様の手法で２段目のバッファを挿入する。なお、１段目で挿入したバッファのばらつきによるクロックスキューを含めてバッファ挿入を行う。この処理を繰り返し行うことにより、ホールドエラーの発生を確実に防止するようなバッファ挿入が可能となる。
【００３５】
上記構成により、製造ばらつきによるホールドエラーの発生を抑えられるクロックツリーが生成できる。
（実施例２）
実施例２（繰り返しありのケース）のフローチャートを図６に示す。
【００３６】
ステップＳ６１では、クロックスキュー＝０（ideal mode）でタイミング解析を行い、パスが存在するＦＦ対に対してホールドスラック値を計算する。図７に示すようにＦＦ１〜ＦＦ８までのホールドスラック値が算出される。例えば（ＦＦ１，ＦＦ２）＝５０ｐｓ、（ＦＦ２，ＦＦ３）＝１５０ｐｓ、（ＦＦ３，ＦＦ４）＝５０ｐｓ、（ＦＦ４，ＦＦ５）＝２５０ｐｓ、（ＦＦ５，ＦＦ６）＝５０ｐｓ、（ＦＦ６，ＦＦ７）＝１５０ｐｓ、（ＦＦ７，ＦＦ８）＝５０ｐｓである。
【００３７】
ステップＳ６２では、バッファ挿入に使用するバッファに対して、ばらつきを考慮した遅延の最小値、最大値（Ｔｍｉｎ，Ｔｍａｘ）を計算する。例えば挿入バッファの特性を、早い時の遅延（ｍｉｎ）をＴｍｉｎ＝２００ｐｓとし、遅い時の遅延（ｍａｘ）をＴｍａｘ＝３００ｐｓとして計算する。
【００３８】
ステップＳ６３では、パスが存在するＦＦ対すべてを未処理ＦＦ対集合に追加して記録する。未処理ＦＦ対集合にＦＦ対間のパスを追加する。また仮未処理対集合を空とする。
未処理ＦＦ対集合＝｛（ＦＦ１，ＦＦ２），（ＦＦ２，ＦＦ３），（ＦＦ３，ＦＦ４），（ＦＦ４，ＦＦ５），（ＦＦ５，ＦＦ６），（ＦＦ６，ＦＦ７），（ＦＦ７，ＦＦ８）｝
仮未処理ＦＦ対集合＝｛  ｝（空集合）
ステップＳ６４では、未処理ＦＦ対集合が空であるかを判断する。すべてのＦＦ対について最適化を完了している場合は、クロックツリー生成部の処理を終了する。まだ、未処理のＦＦ対がある場合はステップＳ６５に移行する。
【００３９】
ステップＳ６５では、未処理ＦＦ対集合中のすべてのＦＦ対に対して処理をしたかを確認する。処理をしている場合はステップＳ６１０に移行する。処理をしていない場合はステップＳ６６に移行する。
【００４０】
ステップＳ６６では、未処理ＦＦ対集合の各ＦＦ対のホールドスラック値が、ホールドスラック値＜（Ｔｍａｘ−Ｔｍｉｎ）の関係を満たしているかを判定する。満たしている場合はステップＳ６７に移行する。そうでない場合はステップＳ６８に移行する。
【００４１】
ステップＳ６７では、上記ＦＦ対がステップＳ６６の条件を満たしているＦＦ対からなるグループに記録し同一グループ化する。ステップＳ６８では、Ｓ６６の条件を満たさないＦＦ対は、仮未処理ＦＦ対集合に追加記録する。その後、ステップＳ６９で、上記Ｓ６６の対象であるＦＦ対を未処理ＦＦ対集合から削除する。
【００４２】
ステップＳ６１０では、実施例１で説明したように、上記同一グループに属しているＦＦ対が同一バッファで駆動されるようにバッファを挿入する。
図８（ａ）に上記ステップＳ６５〜Ｓ６１０の処理結果を示す（ＦＦ直前：ＦＦから数えて１段目のバッファの挿入）。
【００４３】
その結果、グループ１＝｛ＦＦ１，ＦＦ２｝、グループ２＝｛ＦＦ３，ＦＦ４｝、グループ３＝｛ＦＦ５,ＦＦ６｝、グループ４＝｛ＦＦ７,ＦＦ８｝の各グループに対して、バッファ（ｂｕｆ１，ｂｕｆ２，ｂｕｆ３，ｂｕｆ４）の挿入を行う。
【００４４】
また、この段階でホールドスラック値＜Ｔｍａｘ−ＴｍｉｎでないＦＦ対は仮未処理ペア集合に追加されている。
仮未処理ＦＦ対集合＝｛（ＦＦ２，ＦＦ３），（ＦＦ４，ＦＦ５），（ＦＦ６，ＦＦ７）｝
ステップＳ６１１では、上記仮未処理ＦＦ対集合に属するＦＦ対を未処理ＦＦ対集合に追加し、仮未処理ＦＦ対集合からは削除する。未処理ＦＦ対集合に仮未処理ＦＦ対集合に属するＦＦ対を追加する。
【００４５】
未処理ＦＦ対集合＝｛（ＦＦ２，ＦＦ３），（ＦＦ４，ＦＦ５），（ＦＦ６，ＦＦ７）｝
また、仮未処理対集合を空とする。仮未処理ＦＦ対集合＝｛  ｝（空集合）
ステップＳ６１２では、未処理ＦＦ対集合に属するＦＦ対のホールドスラック値を再計算する。現在のホールドスラックからクロックスキュー値（Ｔｍａｘ−Ｔｍｉｎ）を減算して新しいホールドスラック値とする。
【００４６】
そしてステップＳ６４に移行する。図８（ｂ）に示すように未処理ＦＦ対集合｛（ＦＦ２，ＦＦ３），（ＦＦ４，ＦＦ５）,（ＦＦ６，ＦＦ７）｝について、ホールドスラック値を再計算する。
【００４７】
次に、ＦＦから数えて２段目のバッファ挿入に関してステップＳ６５〜Ｓ６１０までの処理を再度行う。また、ホールドスラック値＜Ｔｍａｘ−ＴｍｉｎであるＦＦ対に相当するバッファをグループ化（グループ５＝（Ｂｕｆ１，Ｂｕｆ２）、グループ６＝（Ｂｕｆ３，Ｂｕｆ４））する。
【００４８】
各グループに対して、バッファ（ｂｕｆ５，ｂｕｆ６）挿入を行うことで、図８（ｃ）に示すようにバッファが挿入される。また、この段階でホールドスラック値＜Ｔｍａｘ−Ｔｍｉｎの条件を満たさないＦＦ対は仮未処理ＦＦ対集合に追加されている。仮未処理ＦＦ対集合＝｛（ＦＦ４，ＦＦ５）｝
さらに、ＦＦから数えて３段目のバッファ挿入に関してステップＳ６５〜Ｓ６１０までの処理をする。ホールドスラック値＜Ｔｍａｘ−ＴｍｉｎであるＦＦ対に相当するバッファをグループ化（グループ７＝｛Ｂｕｆ５，Ｂｕｆ６｝）する。
各グループに対して、バッファ（ｂｕｆ７）の挿入を行う。
【００４９】
また、この段階でホールドスラック値＜Ｔｍａｘ−ＴｍｉｎでないＦＦ対は仮未処理ペア集合に追加されているが、本例では全て処理されたので仮未処理ＦＦ対集合＝｛  ｝（空集合）となる。
【００５０】
この後、フロー図のステップＳ６４の処理に移行して終了する。このように繰り返し処理を行った結果、各ＦＦ対への分岐点が、図８（ｄ）に示すような１つのＦＦ対に対して１つの駆動バッファを挿入した構成となる。そのため、製造ばらつきによるホールドエラーの発生を抑えられたクロックツリーが生成できる（図９参照）。
【００５１】
なお、このようなハードウェア構成を有するコンピュータを１台または２台以上用いることによって、上記説明した各種処理機能が実現される。その場合システムが有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。
【００５２】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【００５３】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次受け取ったプログラムに従った処理を実行することもできる。
また、本発明は、上記実施の形態に限定されるものでなく、本発明の要旨を逸脱しない範囲内で種々の改良、変更が可能である。
【００５４】
（付記１）
ハードウェア設計装置による半導体集積回路のクロックツリーの形成方法であって、
前記ハードウェア設計装置に記録されている回路配置情報に基づいて、クロックツリー回路のＦＦ対のフリップフロップ間の経路に対して、クロックスキューがない状態でタイミング解析を行い、ホールドエラーが発生する基準値に対しての余裕度としてホールドスラック値を求めるホールドスラック計算処理と、
前記クロックツリー回路に用いられているバッファの前記回路配置情報に基づき前記クロックツリー回路の分岐点となる前記バッファから前記ＦＦ対ごとの前記フリップフロップ入力間の経路に対して、前記経路の遅延の最小値、最大値を計算し記憶するバッファ遅延計算処理と、
前記経路ごとに前記ホールドスラック値と前記最大値から前記最小値を減算した結果を比較して、ホールドスラック値より大きいと判断された場合は前記ＦＦ対をグループ化するＦＦ対集合操作処理と、
同一の前記グループの前記ＦＦ対の前記経路ごとに、前記ＦＦ対が同一の前記バッファで駆動するように前記バッファを挿入するバッファ挿入処理処理を行うことを特徴とするクロックツリー形成方法。
（付記２）
前記バッファ挿入処理で生成した結果に対して再度ホールドスラック値の計算を行うホールドスラック再計算処理をし、
前記ホールドスラック再計算処理の値に基づいて前記ＦＦ対集合操作処理から再処理をし、前記経路ごとに前記比較の結果がホールドスラック値より小さいと判断されるまで処理をすることを特徴とする付記１に記載のクロックツリー形成方法。
（付記３）
半導体集積回路のクロックツリーの形成設計を実行するプログラムであって、
前記ハードウェア設計装置に記録されている回路配置情報に基づいて、クロックツリー回路のＦＦ対のフリップフロップ間の経路に対して、クロックスキューがない状態でタイミング解析を行い、ホールドエラーが発生する基準値に対しての余裕度として初期のホールドスラック値を求めるホールドスラック計算機能と、
前記クロックツリー回路に用いられているバッファの前記回路配置情報に基づき前記クロックツリー回路の分岐点となる前記バッファから前記ＦＦ対ごとの前記フリップフロップ入力間の経路に対して、前記経路の遅延の最小値、最大値を計算し記憶するバッファ遅延計算機能と、
前記経路ごとに前記ホールドスラック値と前記最大値から前記最小値を減算した結果を比較して、ホールドスラック値より大きいと判断された場合は前記ＦＦ対をグループ化するＦＦ対集合操作機能と、
同一の前記グループの前記ＦＦ対の前記経路ごとに、前記ＦＦ対が同一の前記バッファで駆動するように前記バッファを挿入するバッファ挿入機能と、
を有するプログラムでありコンピュータが実行可能な半導体集積回路のクロックツリーの形成設計プログラム。
（付記４）
前記バッファ挿入機能で生成した結果に対して再度ホールドスラック値の計算を行い、再度計算したホールドスラック値に基づいて前記ＦＦ対集合操作機能から再処理をして、前記経路ごとに前記比較の結果がホールドスラック値より小さいと判断されるまで処理することを特徴とする付記３に記載のコンピュータが実行可能な半導体集積回路のクロックツリーの形成設計プログラム。
（付記５）
半導体集積回路のクロックツリーの形成設計を行うのためのプログラムを記録した記録媒体であって、
前記ハードウェア設計装置に記録されている回路配置情報に基づいて、クロックツリー回路のＦＦ対のフリップフロップ間の経路に対して、クロックスキューがない状態でタイミング解析を行い、ホールドエラーが発生する基準値に対しての余裕度として初期のホールドスラック値を求めるホールドスラック計算機能と、
前記クロックツリー回路に用いられているバッファの前記回路配置情報に基づき前記クロックツリー回路の分岐点となる前記バッファから前記ＦＦ対ごとの前記フリップフロップ入力間の経路に対して、前記経路の遅延の最小値、最大値を計算し記憶するバッファ遅延計算機能と、
前記経路ごとに前記ホールドスラック値と前記最大値から前記最小値を減算した結果を比較して、ホールドスラック値より大きいと判断された場合は前記ＦＦ対をグループ化するＦＦ対集合操作機能と、
同一の前記グループの前記ＦＦ対の前記経路ごとに、前記ＦＦ対が同一の前記バッファで駆動するように前記バッファを挿入するバッファ挿入機能と、
をコンピュータで実行させるための実行可能な半導体集積回路のクロックツリーの形成設計プログラムを記録したコンピュータで読み取り可態な記録媒体。
（付記６）
前記バッファ挿入機能で生成した結果に対して再度ホールドスラック値の計算を行い、再度計算したホールドスラック値に基づいて前記ＦＦ対集合操作機能から再処理をして、前記経路ごとに前記比較の結果がホールドスラック値より小さいと判断されるまで処理することを特徴とする付記５に記載のコンピュータで実行可能な半導体集積回路のクロックツリーの形成設計プログラムを記録したコンピュータで読み取り可態な記録媒体。
【図面の簡単な説明】
【００５５】
【図１】本発明を実現させるためのシステム構成を示した図である。
【図２】実施例１の機能ブロック図である。
【図３】実施例１のフローを示す図である。
【図４】ＦＦ対のホールドスラックを示す図である。
【図５】同一のバッファを使用して最適をした図である。
【図６】実施例２のフローを示す図である。
【図７】ＦＦ対間のパスのホールドスラック値を計算
【図８】実施例２のフローの説明図である。
【図９】最適化後の配置を示す図である。
【図１０】従来の設計による製造ばらつきを示す図である。
【図１１】従来のゲートセルの遅延を示した図である。
【図１２】設計上の回路に基づいて、セットアップ解析、ホールド解析を示す図である。
【図１３】製造ばらつきを考慮した設計を示した図である。
【図１４】従来のパスにバッファを挿入した時の図である。
【符号の説明】
【００５６】
１０      設計装置
１１      ＣＰＵ
１２      ＲＯＭ
１３      ＲＡＭ
１４      ハードディスクドライブ（ＨＤＤ）
１５      フレキシブルディスクドライブ（ＦＤＤ）
１５ａ      ＦＤ
１６      入力インタフェース（入力Ｉ／Ｆ）
１６ａ      入力装置
１７      通信インタフェース（通信Ｉ／Ｆ）
１８      通信回線
１９      出力インタフェース（出力Ｉ／Ｆ）
１９ａ      出力装置
１１０      グラフィック処理部
１１０ａ      表示装置
１１１      バス
２１      クロックツリー生成部
２２      ホールドスラック計算部
２３      バッファ遅延計算部
２４      ＦＦ対集合操作部
２５      バッファ挿入部
２６      ホールドスラック再計算部
２７      入力データ
２８      出力データ
５１、５２、５３、５６      バッファ
５４、５５      ＦＦ（フリップフロップ）
【図１】
0004602909.tif 000002
【図２】
0004602909.tif 000003
【図３】
0004602909.tif 000004
【図４】
0004602909.tif 000005
【図５】
0004602909.tif 000006
【図６】
0004602909.tif 000007
【図７】
0004602909.tif 000008
【図８】
0004602909.tif 000009
【図９】
0004602909.tif 000010
【図１０】
0004602909.tif 000011
【図１１】
0004602909.tif 000012
【図１２】
0004602909.tif 000013
【図１３】
0004602909.tif 000014
【図１４】
0004602909.tif 000015