(57)【特許請求の範囲】
【請求項１】
論理回路のクロック入力端子から当該論理回路を構成する各フリップフロップの入力までのクロックの信号遅延時間の取り得る範囲をスキューバウンドとし、このスキューバウンドの中のいずれを各フリップフロップの入力までのクロックの信号遅延時間として設定するかを決定するクロック遅延設定方法において、
前記スキューバウンドを計時する時間軸に設定された単位時間幅の中で、フリップフロップの存在度が０より大きい最小のフリップフロップが存在する単位時間幅をひとつ取り出す第１のステップと、
前記第１のステップの処理の後、取り出された存在度最小の単位時間幅が複数存在する場合は、隣接するふたつの単位時間幅の存在度を加えた数値を比較して最小の単位時間幅を取り出す第２のステップと、
前記第２のステップの処理後も前記存在度が等しいフリップフロップが存在する単位時間幅が残っている場合は、予めユーザが設定した回数だけ、上記第１〜第２のステップの処理を繰り返し、取り出された単位時間幅をスロットｘとする第３のステップと、
前記スロットｘに存在し得るフリップフロップの中で自由度の最も小さいフリップフロップをスロットｘに割り当てる第４のステップと、
各単位時間幅に存在する遅延時間を有するフリップフロップの存在度を更新する第５のステップとを具備し、
全てのフリップフロップの入力までのクロックの遅延時間が単位時間幅に割り付けられるまで、第１〜第５のステップの処理を繰り返すことを特徴とするクロック遅延設定方法。
【請求項２】
前記各単位時間幅に割り付けられた信号遅延時間を有するフリップフロップを単位時間幅の間で移動させる第１のステップと、
前記第１のステップの処理により、単位時間幅間で移動した信号遅延時間を有するフリップフロップの単位時間当たりの電流値の改善度合をキーとして当該フリップフロップを優先度付待ち行列に挿入する第２のステップと、
第２のステップの処理後、改善度合が最大のフリップフロップを優先度付待ち行列からひとつ取り出す第３のステップと、
取り出したフリップフロップの入力までのクロックの信号遅延時間の位置を元の単位時間幅から移動先の単位時間幅に移動し、移動元と移動先の単位時間幅を共有し得る全てのフリップフロップについての改善度合を再計算して優先度付待ち行列ＰＱに再挿入する第４のステップと、
前記第４のステップの後に第３のステップに戻って、前記第３、第４のステップの処理を前記電流値の改善度合が予め設定された一定の値より小さい場合、或いは同じフリップフロップの入力までのクロックの信号遅延時間が予め設定された一定回数以上単位時間幅の間を移動するまで繰り返すことを特徴とする請求項１に記載のクロック遅延設定方法。
【請求項３】
ルートドライバとＨツリーとの間に挿入された複数のバッファをひとつのバッファで置き換え、且つ前記ルートドライバと前記置き換えたひとつのバッファとを１本の配線で結合するステップを含むことを特徴とする請求項１〜２のいずれか１項に記載のクロック遅延設定方法。
【請求項４】
目標遅延の近いフリップフロップをフリップフロップの集合として目標遅延毎に分類する第１のステップと、
最も目標遅延の大きいフリップフロップの集合に対して、目標遅延に近付ける処理を施こす第２のステップと、
前記第２のステップの処理を施こした後に、目標遅延の近いフリップフロップをフリップフロップの集合として目標遅延毎に再分類する第３のステップと、
を具備し、
前記第２と第３のステップを全てのフリップフロップの集合が目標遅延を達成するまで繰り返し行なうことを特徴とする請求項１〜３のいずれか１項に記載のクロック遅延設定方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ユースフルスキューを利用した論理回路のクロック遅延設定方法に関する。
【０００２】
【従来の技術】
従来より、デジタル論理集積回路においては、レジスタ、フリップフロップに代表される順序回路が使用されており、位相・周期の異なる複数のクロック信号と同期をとりながら回路全体が動作するようになっている。
【０００３】
フリップフロップに供給されるクロック信号の伝搬遅延時間（以下ディレイ）は、各フリップフロップ毎で異なるのが普通であり、その位相差のことをクロックスキュー（以下スキュー）と呼んでいる。デジタル論理集積回路の設計でよく問題になるのは、このスキューが大きくなりすぎて、所望のクロック周波数で回路の同期動作をとることができなくなることである。そこで、チップ内クロックスキュー低減手法が提案されているが、順序回路に含まれる各レジスタについて、組合せ回路を経由した信号の接続関係が存在する他のレジスタとの間に０スキュー値を与えることが行なわれている。
【０００４】
しかし、近年では、順序回路に含まれる各レジスタについて、組合せ回路を経由した信号の接続関係が存在する他のレジスタとの間に０スキュー値を与えるという、所謂、ゼロ・スキューではなく、Δのスキュー値を与えるユースフルスキューを用いる手法が存在し、これにより、フリップフロップが一斉にスイッチングすることを回避して、ピーク電流を削減し、ノイズの発生を低減させると共に回路電圧の安定化を図ることができる。また、ゼロ・スキューでは、論理回路中の１個のフリップフロップでも、所定の条件を満たさないと、回路全体が旨く動作しなくなるが、ユースフルスキューを用いると、ゼロ・スキューでは所定の条件を満たさないフリップフロップを旨く動作させて、回路全体が旨く動作しなくなることを回避することができる。
【０００５】
ところで、上記のような論理回路の従来の配線処理は、図２０に示すように、セル配置処理を行い、その際に、（１）データパス部遅延計算処理、（２）クロック遅延割り当て処理、（３）クロック配線処理を行なった後、一般信号配線の概略配線処理を行なう。その後、一般信号配線の詳細配線処理を行なって、配線を終了する。
【０００６】
或いは、図２１に示すように、セル配置処理を行い、その際に、（１）データパス部遅延計算処理、（２）クロック遅延割り当て処理を行なった後、一般信号配線の概略配線処理を行なう。その後、一般信号配線の詳細配線処理を行なうが、その際、（３）クロック配線処理を行なって、配線を終了する。
【０００７】
【発明が解決しようとする課題】
上記したユースフルスキューを用いた特開平１０−３２６３０３「クロック分配方式」は、クロックツリー形成において、遅延解析を行い、フリップフロップ毎に、入力側と出力側の両方の制約時間に対する余裕を求め、クロックに遅延を挿入することによっても、この両制約が満たされるフリップフロップから、適用フリップフロップを選定し、クロックに対し遅延挿入し、他のクロック変化と差をつけ、クロックの変化の集中を回避するクロック分配方式である。
【０００８】
この方式では、以下の問題点がある。回路中のフリップフロップから一部を取り出し、それらへのクロック信号に一律に遅延を加えるか、或いは削減するかして、ピーク電流を減らすことしか考慮していないため、論理回路にタイミング制約違反がないことが前提条件であり、この手法を適用する以前の状態でタイミング制約違反が存在した場合、クロック信号の遅延を加減することで違反を削減することを全く考慮されておらず、ユースフルスキューの利用によるメリットを十分引き出していない。
【０００９】
Integrated System Design誌１９９９年４月号（http://isdmag.com）記事・“Using clock skew for optimaltiming”に掲載のUltima社Clockwiseの処理もユースフルスキューを用いる従来手法のひとつである。この手法は、レジスタ間の組合せ回路の最大遅延時間と最小遅延時間、及びクロック周期を元に、そのレジスタ間のスキュー値が取り得る範囲（Permissible rangeあるいはスキューバウンド（Skew bound））を求め、次に各レジスタ間のスキュー値を、全てのレジスタ間に関して矛盾がないように、できるだけスキューバウンドの中心に近いところを求めてそこに設定する。少なくともこの記事ではクロック周期を小さくして回路動作を早めるための具体的な手法の記述がない。また、ゼロ・スキューではないことによるピーク電流値の削減については記述があるが、あえてスキュー値をスキューバウンドの中心から離れた値に設定することで積極的にピーク電流値を削減するなどのアルゴリズムについての記述はない。
【００１０】
また、上記に限らず、従来手法では、全てのレジスタ間の組合せ回路の存在及びその信号遅延時間情報が与えられることが前提条件となっているが、大規模な回路においてはレジスタ数が数千を越えることは珍しくなく、従ってレジスタ間の組合せ回路の数も極めて多い。そのため、レジスタ間の組合せ回路の存在及びその信号遅延時間情報が膨大になって必要なメモリ量や処理時間の増大が問題となる。
【００１１】
また、上記に限らず、従来手法では、回路のセットアップタイム（setup time）制約とホールドタイム（hold time)制約を同等に遵守しているため、両制約が厳しい回路では、ユースフルスキューを用いてもセットアップタイム制約（２点間の信号遅延時間の上限の制約）違反とホールドタイム制約（２点間の信号遅延時間の下限の制約）違反が共に同じだけ残ってしまい、セットアップタイム制約違反はクロック周波数の調整により解決し、ホールドタイム制約違反はクロックスキューの調整により解決するため、２つの異なる解決方法を施さなければならず、その後の回路修正が困難になることがあった。
【００１２】
ところで、上記のようにユースフルスキューを利用した場合のクロックツリーの構築に際して、従来のツリー生成方法であるＨツリー型のクロックレイアウトでは、チップ上のＦ／Ｆの存在の分布に偏りがある場合、たとえばルートドライバ近傍に非常に少ない数のＦ／Ｆがあり、逆に遠方には多数のＦ／Ｆが存在する場合にスキューを十分に減少できないことや、ツリーの構造上、ルートドライバと各Ｆ／ＦとをＰｏｉｎｔ  ｔｏ  Ｐｏｉｎｔの最短経路で結んだ場合と比ベて迂回経路が発生するために遅延制約を満たしたレイアウトができない場合があった。また、スキューを低減する為に無駄なバッファを挿入したり迂回経路を発生させる場合があった。
【００１３】
更に、上記した論理回路の従来の配線処理では、セル配置処理をして、まだ配線されていない時に、（１）データパス部遅延計算処理、（２）クロック遅延割り当て処理を行なうため、配線によるクロックの遅延などが考慮されておらず、ユースフルスキュー名とを利用して、クロックの遅延を微妙に調整使用とするような場合には、精度が悪く、設計どおりのクロックの遅延をすることができない恐れがあった。
【００１４】
本発明は、上述の如き従来の課題を解決するためになされたもので、その目的は、ユースフルスキューを利用してクロックスキュー割り当てることにより、ノイズ削減を容易に行なうことができ、もしくはバッファ数を無駄に増やすことのなくクロックスキューを割り当てられ、もしくは設計通りのクロックスキューを精度良く設定できるクロック遅延設定方法を提供することにある。
【００１９】
【課題を解決するための手段】
課題を解決するための手段は、論理回路のクロック入力端子から当該論理回路を構成する各フリップフロップの入力までのクロックの信号遅延時間の取り得る範囲をスキューバウンドとし、このスキューバウンドの中のいずれを各フリップフロップの入力までのクロックの信号遅延時間として設定するかを決定するクロック遅延設定方法において、前記スキューバウンドを計時する時間軸に設定された単位時間幅の中で、フリップフロップの存在度が０より大きい最小のフリップフロップが存在する単位時間幅をひとつ取り出す第１のステップと、前記第１のステップの処理の後、取り出された存在度最小の単位時間幅が複数存在する場合は、隣接するふたつの単位時間幅の存在度を加えた数値を比較して最小の単位時間幅を取り出す第２のステップと、前記第２のステップの処理後も前記存在度が等しいフリップフロップが存在する単位時間幅が残っている場合は、予めユーザが設定した回数だけ、上記を第１〜第２のステップの処理を繰り返し、取り出された単位時間幅をスロットｘとする第３のステップと、前記スロットｘに存在し得るフリップフロップの中で自由度の最も小さいフリップフロップをスロットｘに割り当てる第４のステップと、各単位時間幅に存在する遅延時間を有するフリップフロップの存在度を更新する第５のステップとを具備し、全てのフリップフロップの入力までのクロックの遅延時間が単位時間幅に割り付けられるまで、第１〜第５のステップの処理を繰り返す。
【００２３】
【発明の実施の形態】
以下、本発明の実施の形態を図面に基づいて説明する。図１は、本発明のクロック分配方法の第１の実施形態の処理手順を示したフローチャートである。ここで、ＣＬＫ端子からフリップフロップＦ／Ｆｉ（単にＦ／Ｆｉと称することもある）のクロック入力端子ＣＬＫまでのクロックの遅延時間をＤｉとする（図２参照）。
【００２４】
まず、各フリップフロップＦ／Ｆｉ間の組み合わせ回路の最大、最小遅延時間を読み込む（ステップ１０１）。各フリップフロップＦ／Ｆｉの余裕度（タイミングスラックと同じ）を前後のＦ／Ｆｉとの条件から求め、求めた余裕度の真ん中の値を最適値Ｄｏｐｔｉとして求める（ステップ１０２）。次に、前記最適値Ｄｏｐｔｉと現状のＤｉとの差Ｓｉを求める（ステップ１０３）。
【００２５】
各フリップフロップＦ／Ｆｉを、Ｓｉをキーとして優先度付待ち行列（priority queue（Ｐ．Ｑ．））に挿入し（ステップ１０４）、Ｐ．Ｑ．からＳｉの絶対値が最大のフリップフロップＦ／Ｆｉをひとつ取り出す（ステップ１０５）。即ち、最適値Ｄｏｐｔｉと現状のＤｉとの差が最も大きいものから順番に調整する。取り出した最大のＳｉの絶対値が指定値以下であるかどうかを判定し（ステップ１０６）、指定値以下である場合は処理を終了する。
【００２６】
ここで、最大のＳｉの絶対値が指定値以下であるということは、全てのＦ／Ｆｉが許容範囲で余裕度のほぼ真ん中にあることを意味し、これにより、多少クロックスキューにぶれがあっても、回路全体が動作することになる。
【００２７】
しかし、ステップ１０６で指定値以下でない場合、Ｓｉ／２だけＤｉがずれるようにクロックスキューを調整した後、フリップフロップＦ／Ｆｉと組み合せ回路を通じて接続する他のフリップフロップ全てについて、Ｄｏｐｔｉを求めＳを再計算し、Ｐ．Ｑ．を更新する（ステップ１０７）。その際、クロック周波数の最大化をするかしないかを判定し（ステップ１０８）、しない場合は、ステップ１０５に戻り、ステップ１０６で取り出した最大のＳｉの絶対値が指定値以下になるまで、上記処理を繰り返す。
【００２８】
一方、ステップ１０８でクロック周波数の最大化をする場合、クロック周期をそれぞれのＦ／Ｆｉのスキューバウンド（ＣＬＫ端子からＦ／Ｆｉのクロック入力端子までのクロックの遅延時間のとり得る範囲）の最小値の半分だけ小さくして、ステップ１０５に戻る。即ち、クロック周波数を少しずつ上げて、ステップ１０６で取り出した最大のＳｉの絶対値が指定値以下になるまで、上記処理を繰り返す。これにより、フリップフロップＦ／Ｆｉひとつがユーザが指定した最小の余裕度になるまで、クロック周波数を少しずつ上げることにより、論理回路の処理速度を向上させることができる。
【００２９】
ここで、ステップ１０２のサブルーチンは図３に示す如くであり、Ｆ／Ｆｉの入力端子側のセットアップ制約、ホールド制約、及び出力端子側のセットアップ制約、ホールド制約のそれぞれのタイミングスラックＴＳｉｓ、ＴＳｉｈ、ＴＳｏｓ、ＴＳｏｈについて、Ｍｉｎ（ＴＳｉｓ，ＴＳｏｈ）とＭｉｎ（ＴＳｉｈ，ＴＳｏｓ）の差を限りなく０に近づけるようなＤｉの最適値Ｄｏｐｔｉを求める（ステップ１０３１）。求まった最適値Ｄｏｐｔｉを返り値とする（ステップ１０３２）。
【００３０】
次に、ステップ１０３１の処理で最適値Ｄｏｐｔｉを求める具体的な計算方法を詳しく説明する。ここで、フリップフロップを以降Ｆ／Ｆと称し、信号の流れの向きに沿って連続する図２に示すようなフリップフロップＦ／Ｆｉ、Ｆ／Ｆｊ、Ｆ／Ｆｋがあるものとする。（１）変数および定数の定義を述べておく。また、Ｆ／Ｆｉの信号出力端子からＦ／Ｆｊの信号入力端子へ信号が流れるものとする。
【００３１】
Ｔｃｐはクロック周期を、ＤｉはＣＬＫ端子からＦ／Ｆｉのクロック入力端子までのクロックの遅延時間を、ＤｊはＣＬＫ端子からＦ／Ｆｊのクロック入力端子までのクロックの遅延時間を、ＴｆｉはＦ／Ｆｉのクロック入力端子から信号出力端子までのクロックの遅延時間を、ＴｄｉｊはＦ／ＦｉとＦ／Ｆｊの間の組み合わせ回路の遅延時間（最大値、最小値を持つ）を、ＴｓｅｔｕｐｊはＦ／Ｆｊのセットアップタイムマージンを、ＴｈｏｌｄｊはＦ／Ｆｊのホールドタイムマージンを示している。
【００３２】
この時、セットアップタイム制約及びホールドタイム制約はそれぞれ以下のようになる。セットアップタイム制約は、
【数１】
Ｄｉ＋Ｔｆｉ＋ｍａｘ（Ｔｄｉｊ）＜Ｔｃｐ＋Ｄｊ−Ｔｓｅｔｕｐｊ
を、ホールドタイム制約は、
【数２】
Ｄｉ＋Ｔｆｉ＋ｍｉｎ（Ｔｄｉｊ）＞Ｄｊ＋Ｔｈｏｌｄｊ
を示している。
【００３３】
（２）各条件の定式化について説明する。以下のいずれの項目についても、求められた制約条件下で目的関数を実現することで、回路の歩留まりの最大化、クロック周波数最大化、あるいはノイズの削減を実現することができる。
【００３４】
例えば、信号の流れの向きに沿って連続するフリップフロップＦ／Ｆｉ、Ｆ／Ｆｊ、Ｆ／ＦｋにおいてＤｊを決定しようとする時、以下の制約を考慮する。
【００３５】
Ｆ／Ｆｊの入力側、つまりＦ／Ｆｉ→Ｆ／Ｆｊ間のセットアップ制約により評価したタイミングスラック（余裕度）を以下の通り定義する。
【００３６】
【数３】
ＴＳｉｓ＝（Ｔｃｐ＋Ｄｊ−Ｔｓｅｔｕｐｋ）−（Ｄｉ＋Ｔｆｉ＋ｍａｘ（Ｔｄｉｊ））
Ｆ／Ｆｊの入力側、つまりＦ／Ｆｉ→Ｆ／Ｆｊ間のホールド制約により評価したタイミングスラックを以下の通り定義する。
【００３７】
【数４】
ＴＳｉｈ＝（Ｄｉ＋Ｔｆｉ＋ｍｉｎ（Ｔｄｉｊ））−（Ｄｊ＋Ｔｈｏｌｄｊ）
Ｆ／Ｆｊの出力側、つまりＦ／Ｆｊ→Ｆ／Ｆｋ間のセットアップ制約により評価したタイミングスラックを以下の通り定義する。
【００３８】
【数５】
ＴＳｏｓ＝（Ｔｃｐ＋Ｄｋ−Ｔｓｅｔｕｐｋ）−（Ｄｊ＋Ｔｆｊ＋ｍａｘ（Ｔｄｊｋ））
Ｆ／Ｆｊの出力側、つまりＦ／Ｆｊ→Ｆ／Ｆｋ間のホールド制約により評価したタイミングスラックを以下の通り定義する。
【００３９】
【数６】
ＴＳｏｈ＝（Ｄｊ＋Ｔｆｊ＋ｍｉｎ（Ｔｄｊｋ））−（Ｄｋ＋Ｔｈｏｌｄｋ）
タイミングマージンを大きくするためには、上記のＴＳｉｓ、ＴＳｉｈ、ＴＳｏｓ、ＴＳｏｈを大きくしなければならないが、タイミングマージン自体はＴＳｉｓ、ＴＳｉｈ、ＴＳｏｓ、ＴＳｏｈのうち最小のもので決定される。
【００４０】
つまり、タイミングマージン最大化とは、ＴＳｉｓ、ＴＳｉｈ、ＴＳｏｓ、ＴＳｏｈのうちの最小値を最大化することに他ならない。
【００４１】
Ｄｊを求める具体的な方法は以下のようになる。ＴＳｉｓ、ＴＳｉｈ、ＴＳｏｓ、ＴＳｏｈを求める式を以下のように変形する。
【００４２】
【数７】
ＴＳｉｓ＝（Ｔｃｐ＋Ｄｊ−Ｔｓｅｔｕｐｋ）−（Ｄｉ＋Ｔｆｉ＋ｍａｘ（Ｔｄｉｊ））
＝Ｄｊ−（（Ｄｉ＋Ｔｆｉ＋ｍａｘ（Ｔｄｉｊ））−（Ｔｃｐ−Ｔｓｅｔｕｐｋ））
＝Ｄｊ−Ａ
ＴＳｏｈ＝（Ｄｊ＋Ｔｆｊ＋ｍｉｎ（Ｔｄｊｋ））−（Ｄｋ＋Ｔｈｏｌｄｋ）＝Ｄｊ−（（Ｄｋ＋Ｔｈｏｌｄｋ）−（Ｔｆｊ＋ｍｉｎ（Ｔｄｊｋ）））
＝Ｄｊ−Ｂ
ＴＳｉｈ＝（Ｄｉ＋Ｔｆｉ＋ｍｉｎ（Ｔｄｉｊ））一（Ｄｊ＋Ｔｈｏｌｄｊ）＝（（Ｄｉ＋Ｔｆｉ＋ｍｉｎ（Ｔｄｉｊ））−（Ｔｈｏｌｄｊ））−Ｄｊ
＝Ｃ−Ｄｊ
ＴＳｏｓ＝（Ｔｃｐ＋Ｄｋ−Ｔｓｅｔｕｐｋ）−（Ｄｊ＋Ｔｆｊ＋ｍａｘ（Ｔｄｊｋ））
＝（（Ｔｃｐ＋Ｄｋ−Ｔｓｅｔｕｐｋ）−（Ｔｆｊ＋ｍａｘ（Ｔｄｊｋ）））−Ｄｊ
＝Ｄ−Ｄｊ
上記より、ＴＳｉｓ、ＴＳｉｈ、ＴＳｏｓ、ＴＳｏｈの最小値は、以下のように表される。
【００４３】
【数８】
ｍｉｎ（Ｄｊ−Ａ，Ｄｊ−Ｂ，Ｃ−Ｄｊ，Ｄ−Ｄｊ）
これは、以下のように変形できる。
【００４４】
【数９】
ｍｉｎ（Ｄｊ−ｍａｘ（Ａ，Ｂ），ｍｉｎ（Ｃ，Ｄ）−Ｄｊ）
この時、
【数１０】
ｍｉｎ（Ｄｊ−ｍａｘ（Ａ，Ｂ），ｍｉｎ（Ｃ，０）−Ｄｊ）
は、Ｄｊの取り得る範囲で場合分けをして以下のように表すことができる。
【００４５】
【数１１】
Ｄｊ≦（ｍａｘ（Ａ，Ｂ）＋ｍｉｎ（Ｃ，Ｄ））／２の場合は、Ｄｊ−ｍａｘ  （Ａ，Ｂ）となる。
【００４６】
Ｄｊ≧（ｍａｘ（Ａ，Ｂ）＋ｍｉｎ（Ｃ，Ｄ））／２の場合は、ｍｉｎ（Ｃ，０）−Ｄｊとなる。
【００４７】
従って、
【数１２】
ｍｉｎ（Ｄｊ−ｍａｘ（Ａ，Ｂ），ｍｉｎ（Ｃ，Ｄ）−Ｄｊ）
を最大化するＤｊの値と、その時の最大値はＤｊの取り得る範囲で場合分けをして以下のようになる。
【００４８】
【数１３】
Ｄｊ≦（ｍａｘ（Ａ，Ｂ）＋ｍｉｎ（Ｃ，Ｄ））／２の場合は、Ｄｊ＝（ｍａｘ（Ａ，Ｂ）＋ｍｉｎ（Ｃ，Ｄ））／２で、（ｍｉｎ（Ｃ，Ｄ）−ｍａｘ（Ａ，Ｂ））／２となる。
【００４９】
Ｄｊ≧（ｍａｘ（Ａ，Ｂ）＋ｍｉｎ（Ｃ，Ｄ））／２の場合は、Ｄｊ＝（ｍａｘ（Ａ，Ｂ）＋ｍｉｎ（Ｃ，Ｄ））／２で、（ｍｉｎ（Ｃ，Ｄ）−ｍａｘ（Ａ，Ｂ））／２となる。
【００５０】
上記より、ＴＳｉｓ、ＴＳｉｈ、ＴＳｏｓ、ＴＳｏｈの最小値を最大化するＤｊの値は、
【数１４】
（ｍａｘ（Ａ，Ｂ）＋ｍｉｎ（Ｃ，Ｄ））／２
となり、この時、ＴＳｉｓ、ＴＳｉｈ、ＴＳｏｓ、ＴＳｏｈの最小値は、
【数１５】
（ｍｉｎ（Ｃ，Ｄ）−ｍａｘ（Ａ，Ｂ））／２
となる。
【００５１】
【数１６】
（ｍｉｎ（Ｃ，Ｄ）−ｍａｘ（Ａ，Ｂ））／２≧０
である場合は、Ｆ／Ｆｊの入出力双方のセットアップ及びホールド制約が満たされつつ、タイミングマージンが最大化されていることを意味する。
【００５２】
また、クロック周期の最小化では、クロック周期はホールドタイム制約とは無関係であるので、前述のセットアップタイム制約のみ考慮する。
【００５３】
セットアップタイム制約はすべてのｉ，ｊの組み合わせにおいて、
【数１７】
（Ｔｃｐ＋Ｄｊ−Ｔｓｅｔｕｐ）−（Ｄｉ＋Ｔｆｉ＋ｍａｘ（Ｔｄｉｊ））＞０
で、この時、上記の制約条件下でのＴｃｐの最小化を目的関数とする。
【００５４】
本実施形態によれば、論理回路を構成するＦ／Ｆｉの前後のフリップフロップの条件などを考慮して、Ｆ／Ｆｉの余裕度を求め、この余裕度のほぼ真ん中にＦ／ＦｉのＤｉが来るようにクロックスキューを調整してやると、製造工程のばらつきにより、Ｆ／Ｆｉの動作タイミングがずれても、前記余裕度によってこのずれを吸収して、回路として正常な動作を行なう論理回路を製造することができるため、回路の歩留まりを最大化することができる。
【００５５】
また、上記したクロックスキューを調整して、Ｆ／Ｆｉの余裕度を求め、この余裕度のほぼ真ん中にＦ／ＦｉのＤｉが来るようにした後、クロック周波数を、Ｆ／Ｆｉの余裕度が予めユーザにより設定された値になるまで上げることにより、クロック周期の最小化を図って回路の動作を速めることができる。
【００５６】
図４は、本発明のクロック分配方法の第２の実施形態の処理手順を示したフローチャートである。本例の処理手順は図１に示した第１の実施の形態とほぼ同様であるが、ユースフルスキューを求める際に、フリップフロップＦ／Ｆ間の組合せ回路の信号遅延情報を与える必要があり、組合せ回路の数が膨大で使用メモリ量や処理時間が増大してしまうことがある。
【００５７】
これを防ぐため、組合せ回路の信号遅延時間情報の数を制限しても正しいユースフルスキューを求められることができるという考えで、ステップ４０１の処理を第１の実施形態とは異なる以下のようにしている。
【００５８】
即ち、通常、信号遅延時間は最大時間と最小時間の２種類を与える必要があるが、本例では、クロック周期Ｔｃｐの（１００−ｎ）％、例えば８０％を超える最大時間の情報のみ、且つ、Ｔｃｐのｎ％、例えば２０％を下回る最小時間の情報のみを与えてユースフルスキューを計算する。
【００５９】
図５は図４に示したステップ４０２のサブルーチンである。ステップ４０１１で、Ｆ／Ｆｉの入力端子側のセットアップ制約、ホールド制約、及び出力端子側のセットアップ制約、ホールド制約のそれぞれのタイミングスラックＴＳｉｓ、ＴＳｉｈ、ＴＳｏｓ、ＴＳｏｈについて、Ｍｉｎ（ＴＳｉｓ，ＴＳｏｈ）とＭｉｎ（ＴＳｉｈ，ＴＳｏｓ）の差を限りなく０に近づけるようなＤｉの最適値Ｄｏｐｔｉを求める。即ち、各タイミングスラックはＦ／Ｆｉの入力側と出力側で等しくなるようにするＤｉを最適値Ｄｏｐｔｉとする。
【００６０】
その後、ステップ４０１２で、Ｆ／Ｆｉに着目した時、外部回路とのクロックスキューが０のフリップフロップＦ／Ｆｚが存在するかどうかを判定する。即ち、Ｆ／Ｆｚが存在する場合は、Ｆ／Ｆｉは外部の回路と繋がった状態にあり、Ｆ／Ｆｚが存在しない場合は、Ｆ／Ｆｉは内部の組み合わせ回路などに接続された状態にある。
【００６１】
Ｆ／Ｆｚが存在する場合は、Ｆ／Ｆｚまでの信号遅延をＤｚとする（ステップ４０１３）。最適値Ｄｏｐｔｉが、
【数１８】
Ｄｚ−Ｔｃｐ・ｎ／１００
以上で（ステップ４０１４）、
【数１９】
Ｄｚ＋Ｔｃｐ・ｎ／１００
以下であった場合（ステップ４０１６）、最適値Ｄｏｐｔｉは変更しない（ステップ４０１１２）。
【００６２】
最適値Ｄｏｐｔｉが、
【数２０】
Ｄｚ−Ｔｃｐ・ｎ／１００
未満の場合（ステップ４０１４）、最適値Ｄｏｐｔｉを
【数２１】
Ｄｚ−Ｔｃｐ・ｎ／１００
とし（ステップ４０１５）、最適値Ｄｏｐｔｉが、
【数２２】
Ｄｚ−Ｔｃｐ・ｎ／１００
を越える場合（ステップ４０１７）、最適値Ｄｏｐｔｉを
【数２３】
Ｄｚ＋Ｔｃｐ・ｎ／１００
とする（ステップ４０１７）。  一方、Ｆ／Ｆｚが存在しない場合、最適値Ｄｏｐｔｉが、
【数２４】
（Ｍａｘ（Ｄｎ）−Ｔｃｐ・２ｎ／１００）
以上で（ステップ４０１８）、
【数２５】
（Ｍｉｎ（Ｄｎ）＋Ｔｃｐ・２ｎ／１００）
以下で（ステップ４０１１０）であった場合（ステップ４０１６）、最適値Ｄｏｐｔｉを変更しない（ステップ４０１１２）。
【００６３】
最適値Ｄｏｐｔｉが、
【数２６】
（Ｍａｘ（Ｄｎ）−Ｔｃｐ・２ｎ／１００）
未満の場合  （ステップ４０１８）、最適値Ｄｏｐｔｉを
【数２７】
（Ｍａｘ（Ｄｎ）−Ｔｃｐ・２ｎ／１００）
とし（ステップ４０１９）、最適値Ｄｏｐｔｉが、
【数２８】
（Ｍｉｎ（Ｄｎ）＋Ｔｃｐ・２ｎ／１００）
を越える場合（ステップ４０１１０）、最適値Ｄｏｐｔｉを
【数２９】
（Ｍｉｎ（Ｄｎ）＋Ｔｃｐ・２ｎ／１００）
とする（ステップ４０１１１）。ステップ４０１１３で、それぞれのＤｏｐｔｉを返り値とする。
【００６４】
上記のように、Ｆ／Ｆｚが存在する場合は、ステップ４０１３〜４０１７の処理を行ない、Ｆ／Ｆｚに関しては回路内及び回路外に対してゼロ・スキューとし、必要に応じてＤｏｐｔｉを微調整する。Ｆ／Ｆｚが存在しない場合は、ステップ４０１８〜４０１１１の処理を行ない、クロック周期Ｔｃｐの（１００−ｎ）％とＴｃｐのｎ％の間のフリップフロップに関しては、必要に応じてユースフルスキューの最大値をＴｃｐの２ｎ％に制限してＤｏｐｔｉを微調整し、処理結果後の回路動作を保証する。
【００６５】
他のステップの処理は第１の実施形態と同様であり、同様の効果があるが、特に本実施形態では、ステップ４０２の処理に用いるメモリ量と処理時間を削減できる。従って、ユースフルスキューとして取り得る値の幅が回路設計上、予め分かっている場合には精度を損なうことなく最大限の効果を発揮する。
【００６６】
図６は、本発明のクロック分配方法の第３の実施形態の処理手順を示したフローチャートである。本例の処理手順は図１に示した第１の実施の形態とほぼ同様である。しかし、ステップ６０２にて、ユースフルスキューを求める際、セットアップタイム制約違反とホールドタイム制約違反のどちらかを優先して最適値Ｄｏｐｔｉを求めるところが第１の実施形態のそれと異なっており、セットアップタイム制約違反とホールドタイム制約違反のどちらを優先するかはユーザ指定である。その場合、各フリップフロップＦ／Ｆｉについて、セットアップタイム制約とホールドタイム制約の値からＤｉを求める時に、双方を同等に扱わずに、ユーザ指定に従って片方が違反にならないように優先してＤｉを決定する手段を持っている。
【００６７】
図７はステップ６０２の処理のサブルーチンである。ステップ６０２１で、ユーザの指定は優先する制約違反がセットアップタイム制約違反とホールドタイム制約違反のどちらであるかを判定する。セットアップタイム制約違反が優先の場合は、ステップ６０２２の処理によりセットアップ制約だけを見てＤｉの最適値Ｄｏｐｔｉを求める。その後、ステップ６０２３の処理により、ＴＳｉｓ≧０で、ＴＳｏｓ≧０の場合はステップ６０２４の処理により、
ＴＳｉｓとＴＳｏｓが負にならない範囲でＭｉｎ（ＴＳｉｓ，ＴＳｏｈ）とＭｉｎ（ＴＳｉｈ，ＴＳｏｓ）の差を限りなく０に近づけるようなＤｏｐｔｉを求める。ＴＳｉｓ，ＴＳｏｈとＴＳｉｈ，ＴＳｏｓのいずれか厳しい方の真ん中を取ってＤｏｐｔｉとする（ステップ６０２８）。
【００６８】
ホールドタイム制約違反が優先の場合は、ステップ６０２５の処理によりホールドｕｐ制約だけを見てＤｉの最適値Ｄｏｐｔｉを求める。その後、ステップ６０２６の処理により、ＴＳｉｈ≧０で、ＴＳｏｈ≧０の場合はステップ６０２７の処理により、ＴＳｉｈとＴＳｏｈが負にならない範囲でＭｉｎ（ＴＳｉｓ，ＴＳｏｈ）とＭｉｎ（ＴＳｉｈ，ＴＳｏｓ）の差を限りなく０に近づけるようなＤｏｐｔｉを求める。即ち、ＴＳｉｓ，ＴＳｏｈとＴＳｉｈ，ＴＳｏｓのいずれか厳しい方の真ん中を取ってＤｏｐｔｉとする（ステップ６０２８）。
【００６９】
ステップ６０２３又は６０２６のいずれかの処理により、非優先の方の制約を見ることができない場合は、直ちにステップ６０２８に進んで、ステップ６０２２又は６０２５で求まったＤｏｐｔｉをそのまま使用する。
【００７０】
本実施形態によれば、クロック周波数を下げることが許されない場合は、セットアップタイム制約違反を優先して削減し、ホールドタイム制約違反が残っても警告と共にそのまま処理結果を出力する。ユーザはホールドタイム制約違反が残っている場所にバッファを挿入することで、違反を除去することができる。
【００７１】
また、バッファを挿入する余地はないがクロック周波数を下げることは可能である場合は、ホールドタイム制約違反を優先して削減することができる。
【００７２】
尚、挿入可能なバッファの数、セルの面積、消費電力の増加量などをユーザが指定することで、その範囲で削減可能なホールドタイム制約違反は残し、その分、セットアップタイム制約違反を優先して削減することができる。
【００７３】
結局、セットアップタイム制約違反、又は、ホールドタイム制約違反のいずれか一方の制約違反のみを集中的に残すことにより、回路の制約違反の修正を容易に行なうことができ、回路作成の短縮化などを図ることができる。
【００７４】
図８は本発明のクロック遅延設定方法の一実施形態を示した図である。論理回路からノイズを削減するにはピーク電流を低減すればよい。このピーク電流を低減するには論理回路を構成する複数のフリップフロップが一斉にオンせず、ユースフルスキューを利用して少しずつずれてオンするようにすればよい。
【００７５】
ここで、ひとつフリップフロップＦ／Ｆｉのスキューバウンド（Skew Bound）を、｜−−−−−−−｜のように表すものとし、記号の左端に行けば行くほどＣＬＫ端子からの信号遅延が小さく、記号の右端に行けば行くほどＣＬＫ端子からの信号遅延が大きいことを意味し、横方向の長さが時間を表している。
【００７６】
例えばＦ／Ｆ０〜Ｆ／Ｆ６が存在する時、各Ｆ／ＦのスキューバウンドがＣＬＫ端子からの信号遅延値を合わせて図８に示すようになったとする。但し、全てのＦ／Ｆ０のＳｋｅｗ＝０の場合に回路は動作するものとする。よって全Ｆ／Ｆのスキューバウンドが重なる部分がある。
【００７７】
図９は図８を等しい時間で分割してスロット（Ｓｌｏｔ）と呼ばれる時間単位に分割した図である。この図９に基づいて、Ｆ／Ｆ０〜Ｆ／Ｆ６のそれぞれのフリップフロップの存在確率を計算すると、図１０の如くなる。その後、図１０のスロット毎の合計を足して、各スロットのフリップフロップの存在度を算出すると、図１１の如くなる。その際、Ｆ／Ｆの存在度に各Ｆ／Ｆに流れる電流値を元にして予め重みをつけておくことにより、ピーク電流を小さくする目的を達成する。以下の例では各Ｆ／Ｆの電流値は等しいものとする。
【００７８】
ここで制約条件と目的関数を定義する。
【００７９】
制約条件は各Ｆ／ＦのＤｉはスキューバウンドをはみ出さない。
【００８０】
【数３０】
Ｄｉｍｉｎ≦Ｄｉ≦Ｄｉｍａｘ
目的関数は各スロットのＦ／Ｆの電流値の最小化である。上記の目的関数が満足された後の各Ｆ／ＦのＤｉは、各スロットにおいて均等にずらせた値とする（スロットがＴａ〜ＴｂでＦ／Ｆ数がｎの時、
【数３１】
Ｔａ＋（Ｔｂ−Ｔａ）／（ｎ＋１）＊ｌ−Ｔａ＋（Ｔｂ−Ｔａ）／（ｎ＋１）＊ｎ）。
【００８１】
次に、各フリップフロップＦ／ＦのＤｉの初期解を決定した後、最適化処理を実行するが、まず、以下の手順で初期解を決定する。
【００８２】
１）Ｆ／Ｆの存在度が０より大きくて最小のスロットをひとつ取り出す。存在度最小のスロットが複数存在する場合は、隣接するふたつのスロットの存在度に（これは０でもよいを加えた数値を比較して最小のスロットを取り出すにれによりＤｉの分散を大きくする）。それでも存在度が等しいものが残っている場合は、あらかじめユーザが設定した回数だけ、上記処理を繰り返す。取り出されたスロットをｘとする。上記の例であると、Ｆ／Ｆ２を取り出す。
【００８３】
２）スロットｘに存在し得るＦ／Ｆの内、自由度の最も小さい（注目スロットに対する存在確率が最大）Ｆ／Ｆｙをそのスロットに割り当てる。上記の例であると、Ｆ／Ｆ２をスロットＱに割り当る。
【００８４】
３）各スロットの、Ｆ／Ｆ存在度を更新する。スロットｘの存在度は１．０となる。Ｆ／Ｆｙが存在し得た各スロットに関して、Ｆ／Ｆｙの存在確率を減じる。
【００８５】
４）全てのＦ／Ｆがスロットに割り付けられるまで、１）からの処理を繰り返す。その際、上記の例であると、次にＦ／Ｆ１が取り出される。
【００８６】
上記の手順を示したものが図１２であり、各Ｆ／ＦのＤｉの位置が図１３のように決まり、Ｆ／Ｆの動作時間が分散される。
【００８７】
その後、上記した初期解に以下に述べるような最適化処理を施して、最適化を求める。この最適化処理の概要は、Ｆ／Ｆの動作タイミングが混んでいるところから空いているところに、各Ｆ／Ｆに割り当てるスロットを変化させて、Ｆ／Ｆの動作タイミングのさらなる分散を図ることである。
【００８８】
１）各Ｆ／Ｆｉについて、Ｄｉ（７）スロット間の移動による、各スロットの単位時間あたりのＦ／Ｆｉ電流値の改善度合をキーとしてPriority Queue（優先度付待ち行列）に挿入。ただしＤｉが存在するスロットの単位時間あたりのＦ／Ｆｉの電流値が他のスロットよりも小さい場合はスロットを移動してもそれ以上改善する可能性がないので移動はされない。
【００８９】
２）改善度合が最大のＦ／ＦをＰＱからひとつ取り出す。
【００９０】
３）改善度合があらかじめ設定された一定の値より小さい場合、あるいは同じＦ／ＦのＤｉがあらかじめ設定された一定回数以上移動された場合は処理を停止。
【００９１】
４）取り出したＦ／ＦのＤｉの位置を旧スロットから新スロットに移動し、移動元スロットと移動先スロットを共有し得る全てのＦ／Ｆについての改善度合を再計算してＰＱに再挿入。
【００９２】
５）２）へ。
【００９３】
上記例では、図１３の初期解が最適解である。
【００９４】
本実施形態によれば、ユースフルスキューを利用して、論理回路中のＦ／Ｆが一斉にオンすることを回避して、オンタイミングを分散させることにより、ピーク電流を削減してノイズの発生を低減させると共に、回路の電圧を安定化させることができる。
【００９５】
図１４、図１５は本発明のクロックツリー生成方法の第１の実施形態を説明する図である。本例のクロックツリー構造は、各Ｆ／Ｆがそれぞれ目標遅延を持つクロック対象の回路に対して、リピータ無しでＨツリー構築可能な範囲のＦ／Ｆに関してはＨツリーを構築し（このＨツリーをノードとする）、ルートドライバから各ノードまではツリーの各段にリピータを挿入する構造とする。Ｈツリー構築時および、リピータ挿入時に遅延調整用のセル乃至は配線を付加することで、後工程での遅延調整可能とする。
【００９６】
１）クロックレイアウト処理する回路から未処理のクロック系統を１つ選ぶ。
【００９７】
２）クロック系統毎にルートドライバからネットをトレースし、パススルーセル毎にLogical Equivalent Net（以降ＬＥＮｅｔと称する）を抽出する。
【００９８】
ここでＬＥＮｅｔとはパススルーセル乃至はルートドライバをルートとする１段の木であり、内部にノードを含まない木である。またパススルーセルとはルートドライバから駆動されるＦ／Ｆまでの間にクロックレイアウト前に、既に挿入されたバッファやGated Clock用のイネーブラ信号供給用などのセルを指す。
【００９９】
３）ＬＥＮｅｔ毎に各Ｆ／Ｆに与えられた目標遅延の近いものをまとめたクラスタを生成する。クラスタにはそれを駆動するバッファをひとつ挿入する。そのバッファにはクラスタ内のＦ／Ｆの目標遅延（ｄ１）とクラスタ内部の遅延（ｄ２）との差（ｄ１−ｄ２）という目標遅延を設定する。
【０１００】
以後、クラスタ乃至はクラスタとバッファの組み合わせで構成される部分木を駆動するバッファや分岐点のことを部分木を代表するノードと呼ぶ。
【０１０１】
４）各ノードを目標遅延でソートし、目標遅延の大きなノードから従来型Ｈツリー構築手法でレイアウト可能な範囲でマージしていくことでレイアウトする。このマージ処理の繰り返しでルートドライバまで到達した場合は終了する。ここで、マージ処理とは複数のノードをまとめて一つのノードで駆動されるようにすることである。
【０１０２】
５）マージ可能なノードについて前ステップを繰り返し、マージ処理の繰り返しでルートドライバまで到達した場合は終了する。
【０１０３】
６）マージできるノードがなくなり、残ったノードがルートドライバでない場合は、Local Buffer Tree生成モードに移行する。まず、ルートドライバからマージされずに残っているノード（これをリーフと呼ぶ）までスター状に１対１で仮に配線する（図１４参照）。ルートドライバとリーフとを結ぶ直線状に障害物（メガセルなど）がある場合は経路探索を行い迂回経路を検索する。その他の場合は経路を仮定する。
【０１０４】
７）仮経路に従い必要なリピータバッファの位置および数を計算する。この際、目標遅延がルートドライバ側で一致してマージできるようにそれぞれの経路に挿入するバッファを調節する。まず最初にルートドライバを着目ノードとする。
【０１０５】
８）着目ノードからーつ目のバッファが畳み込み（一つにまとめる）処理が可能かを判定する。このとき畳み込まれたバッファは重心位置に置かれると仮定する。可否の判断は遅延や設計の制約を超えるか否かで判断する。
【０１０６】
９）ひとつに畳み込み処理可能な場合はバッファをまとめ、まとめられたバッファを着目ノードとして８を繰り返す（図１５参照）。
【０１０７】
ここで、畳み込み不可の場合はルートドライバからリーフまでの遅延計算を行い、遅延が目標を超えるようなリーフを選び、その経路上のバッファを畳み込み処理の対象からはずし、再度、残りバッファで畳み込み処理を行う。Bi-Section処理でバッファを二つの集合に分け、それぞれについて再帰的に上記した処理を繰り返す。再帰処理は着目ノードがLeafに到達するまで続く。
【０１０８】
１０）１）の処理に戻り、未処理のクロック系統がある間、繰り返す。
【０１０９】
本実施形態によれば、駆動されるＦ／Ｆの分布が不均一の場合でも、ルートドライバからマージされずに残っているノードまでスター状に仮りの配線をしておき、仮り配線上のバッファで畳み込み処理可能なバッファをひとつに纏めることにより、バッファ数を無駄に増やすことを無くすことができる共に、線長も短くすることができ、遅延の増大も少ない高性能のツリーを生成することができる。
【０１１０】
図１６、図１７は本発明のクロックツリー生成方法の第２の実施形態を説明する図である。本例は個々のＦ／Ｆが目標遅延を持つ場合のＨツリー部分の生成方法である。
【０１１１】
１）各Ｆ／Ｆを目標遅延でソートした後、バッファー段程度の遅延で分類する（タイムスライス毎に分割するということとする）。その後、図１６に示すようにノードの位置情報を加えて用いたｘ、ｙ（位置情報）、ｚ（タイムスライス情報）の空間に配置する。図１６では、ｚ方向は、Ｆ／Ｆの集合ａ〜ｄの目標のクロックの遅延時間で、ｘ，ｙ平面でＦ／Ｆの集合ａ〜ｄのチップ上の位置を示している。
【０１１２】
２）目標遅延の大きなタイムスライスに存在するノード同士からマージ処理をする。マージとはまとめてーつのノードで駆動されるようにすることである。マージの際には、分岐点の位置から遅延計算を行いバッファー段で駆動可能な範囲を選ぶ。またマージ可能なノードがただひとつだけタイムスライス内に残った場合には、目標遅延調整のために適宜バッファを追加することで別のタイムスライスに登録されるようにする。
【０１１３】
３）新たにできたノードには目標遅延を設定しなおし、タイムスライスに登録しなおす。
【０１１４】
４）同一タイムスライスで処理可能なだけ上記のｌ）〜３）の処理を繰り返す。処理の続行ができなくなった場合、次に大きなタイムスライスの処理に移動する。
【０１１５】
上記処理１）〜４）を図１７を用いて更に説明する。まず、Ｆ／Ｆの集合ａ、ｂはが２ｎ秒のタイムスライスにあるため、これらのＦ／Ｆの集合ａ、ｂの前段にバッファＡを挿入して、クロックの遅延時間を０．８ｎ秒改善する。これにより、Ｆ／Ｆの集合ａ、ｂは１ｎ秒のタイムスライスに登録され、Ｆ／Ｆの集合ｃと同じタイムスライスとなる。そこで、Ｆ／Ｆの集合ａ、ｂ、ｃの前段にバッファＢを挿入して、クロックの遅延時間を１．２ｎ秒改善する。これにより、Ｆ／Ｆの集合ａ、ｂ、ｃはほぼ、目標遅延だけクロックスキューが改善されて、Ｆ／Ｆの集合ｄと同一のタイムスライスに登録される。
【０１１６】
５）マージ可能なノードについて上記した１）〜４）の処理を繰り返す。
【０１１７】
本実施形態によれば、目標遅延が同様のＦ／Ｆを分類して、目標遅延毎のＦ／Ｆの集合を求め、これらＦ／Ｆの集合を該当のタイムスライスに登録した後、タイムスライス毎のＦ／Ｆの集合の遅延を目標遅延に近づくように改善し、改善されたＦ／Ｆの集合を該当するタイムスライスに再登録して、タイムスライス毎のＦ／Ｆの集合の遅延を目標遅延に近づくように改善することを繰り返すことにより、複数の目標遅延に対するクロックの遅延時間の改善を組織的に且つ効率的に行なうことができる。
【０１１８】
尚、クロックツリー生成方法の第２の実施形態によりクロックの遅延時間を改善した処理の後、クロックツリー生成方法の第１の実施形態の畳み込みを行なって、例えばユースフルスキューを利用する論理回路のクロックツリーを容易且つ効率的に構築することができる。
【０１１９】
図１８は本発明の配線処理方法の一実施形態にかかわる処理手順を示した説明図である。
【０１２０】
本例の配線処理方法はセル配置処理を行い、その際に、（１）データパス部遅延計算処理（ステップ１）、（２）クロック遅延割り当て処理、（３）クロック配線処理を行なった後、一般信号配線の概略配線処理を行なう（ステップ２）。その際、（１）データパス部遅延計算処理、（２）クロック遅延割り当て処理、（３）クロック配線処理、（４）クロック配線遅延調整処理を行なう。最後に、一般信号配線の詳細配線処理を行なって（ステップ３）、終了する。
【０１２１】
ここで、（２）クロック遅延割り当て処理について図１９を用いて説明する。
【０１２２】
クロック周波数が１００ＭＨｚで、各データパス遅延Ｔ１，Ｔ２，Ｔ３がそれぞれ次の値の場合を考える。Ｔ１＝８ｎｓ，Ｔ２＝１３ｎｓ，Ｔ３＝９ｎｓ
このような場合、図１９に示すようにシステム全体の性能は最も時間のかかるＴ２に律速される。そこで、サイクルタイム（システムの性能）を改善するために次のようにクロックスキューを調整する。即ち、ＣＬＫ２をＦ／Ｆ２に早く到着するようにし、ＣＬＫ３をＦ／Ｆ３に遅く到着するようにする。この例の場合には、ＣＬＫ２をＦ／Ｆに２ｎｓ早く到着するようにし、ＣＬＫ３をＦ／Ｆに１ｎｓ遅く到着するようにする。
【０１２３】
本実施形態によれば、一般信号配線の概略配線処理を行なってから、再度、  （１）データパス部遅延計算処理、（２）クロック遅延割り当て処理を行なうため、配線によるクロック遅延を考慮することができるため、Ｆ／Ｆの分布に偏りが存在する場合でも、性能の良い（バッファ数が少なく、遅延の増大も少ない）クロックレイアウトを生成することができる。従って、ユースフルスキューを利用して、クロックの遅延を微妙に調整する必要がある場合でも、精度の良い、設計どおりのクロックの遅延を設定することができる。
【０１２４】
尚、本発明は上記実施形態に限定されることなく、その要旨を逸脱しない範囲において、具体的な構成、機能、作用、効果において、他の種々の形態によっても実施することができる。
【０１２５】
【発明の効果】
以上詳細に説明したように、この発明によれば、ユースフルスキューを利用して最適のクロックスキューを割り当てることにより、回路の歩留まりの最大化、クロック周波数最大化を図り、更にユースフルスキューを利用してセットアップタイム制約とホールドタイム制約のいずれかを優先して集積回路を設計することで、回路中でエラーをセットアップタイム制約違反とホールドタイム制約違反のいずれか一方に限定して、回路を容易に修正できる。
【０１２６】
また、この発明によれば、ユースフルスキューを利用してクロックスキュー分散して割り当てることにより、ノイズ削減を容易に行なうことができる。  第７又は第８の発明によれば、駆動されるフリップフロップ（ＦＦ）の分布が不均一な場合や、それぞれのフリップフロップに個別の目標遅延が与えられている場合及び遅延の上限制約がある場合に、バッファ数を無駄に増やすことのなく、クロックスキューを割り当てられると共に、個別の遅延目標の制約を満たすツリーを生成することができる。
【０１２７】
さらに、この発明によれば、設計通りのクロックスキューを精度良く設定できる。
【図面の簡単な説明】
【図１】本発明のクロック分配方法の第１の実施形態の処理手順を示したフローチャートである。
【図２】論理回路中のフリップフロップの配置例を示したブロック図である。
【図３】図１に示したステップ１０２の処理のサブルーチンである。
【図４】本発明のクロック分配方法の第２の実施形態の処理手順を示したフローチャートである。
【図５】図４に示したステップ４０１のサブルーチンである。
【図６】本発明のクロック分配方法の第３の実施形態の処理手順を示したフローチャートである。
【図７】図６に示したステップ６０２の処理のサブルーチンである。
【図８】本発明のクロック遅延設定方法の一実施形態を示した図である。
【図９】図８を等しい時間で分割してスロットと呼ばれる時間単位に分割した図である。
【図１０】各スロットに存在するフリップフロップの存在確率を示した図である。
【図１１】各スロットに存在するフリップフロップの存在度の算出結果を示した表図である。
【図１２】初期解の最適化処理を実行するための手順を示した図である。
【図１３】最適化処理をした後のフリップフロップのＤｉの位置をスロットに対して示した図である。
【図１４】本発明のクロックツリー生成方法の第１の実施形態を説明する図である。
【図１５】本発明のクロックツリー生成方法の第１の実施形態を説明する図である。
【図１６】本発明のクロックツリー生成方法の第２の実施形態を説明する図である。
【図１７】本発明のクロックツリー生成方法の第２の実施形態を説明する図である。
【図１８】本発明の配線処理方法の一実施形態にかかわる処理手順を示した説明図である。
【図１９】図１８に示したクロック遅延割り当て処理を説明するブロック図である。
【図２０】  従来の論理回路の配線処理手順例を説明する図である。
【図２１】  従来の論理回路の他の配線処理手順例を説明する図である。
【符号の説明】
ＣＬＫ  クロック入力端子
Ｆ／Ｆｉ、Ｆ／Ｆｊ、Ｆ／Ｆｋ  フリップフロップ
【図１】
0004118536.tif 000002
【図２】
0004118536.tif 000003
【図３】
0004118536.tif 000004
【図４】
0004118536.tif 000005
【図５】
0004118536.tif 000006
【図６】
0004118536.tif 000007
【図７】
0004118536.tif 000008
【図８】
0004118536.tif 000009
【図９】
0004118536.tif 000010
【図１０】
0004118536.tif 000011
【図１１】
0004118536.tif 000012
【図１２】
0004118536.tif 000013
【図１３】
0004118536.tif 000014
【図１４】
0004118536.tif 000015
【図１５】
0004118536.tif 000016
【図１６】
0004118536.tif 000017
【図１７】
0004118536.tif 000018
【図１８】
0004118536.tif 000019
【図１９】
0004118536.tif 000020
【図２０】
0004118536.tif 000021
【図２１】
0004118536.tif 000022