(57)【要約】【課題】クロック供給点から複数のリーフにクロック信号を供給するクロックツリーを設計するＬＳＩ設計方法において、上位をH-treeで構成し下位をCTSで構成するとき、下位のクロックツリーの配置に何ら制約を与えることなく、上位のクロックツリーの段数を最適化する。【解決手段】複数のリーフを複数のグループに分けて下位のローカルツリーを形成する。クロック供給対象の全てのリーフを含むクロック供給対象領域を均等に分割し、クロック供給点を起点としてH-treeによる上位クロックツリーを形成する。分割された領域ごとにH-treeの末端からその領域に含まれる複数のローカルツリーの始点にクロック信号を供給するときのスキューを見積もる。見積もったスキューが所定のスキュー制約を満たすまで、クロック供給対象領域をさらに細かく均等分割してH-treeの段数を増やす。【選択図】図１
2014035667.tif 000002
【特許請求の範囲】
【請求項１】
ＬＳＩチップ上のクロック供給点から複数のリーフにクロック信号を供給するクロックツリーを設計する、電子計算機上のＬＳＩ設計方法であって、
前記複数のリーフを複数のグループに分割し、分割された前記グループのそれぞれにローカルツリーを形成することにより複数のローカルツリーを生成する第１ステップと、
クロック供給対象領域を均等に分割し、前記クロック供給点を起点として、上位のクロックバッファから略等長配線を介して等負荷の下位のクロックバッファを配置するステップを繰り返し、前記分割された領域ごとに１個のクロックバッファを配置することにより上位クロックツリーを形成する第２ステップと、
前記分割された領域ごとに、前記上位クロックツリーの末端から、前記分割された領域に含まれる２個以上の前記ローカルツリーの始点のそれぞれにクロック信号を供給するための経路のスキューを計算する第３ステップと、
前記分割された領域ごとに計算した前記スキューが、所定のスキュー制約を満たすか否かを判断する第４ステップを含み、
前記分割された領域の全てにおいて前記スキュー制約が満たされるまで、前記分割された領域をさらに均等に分割し、前記さらに分割された領域ごとに１個のクロックバッファをさらに配置することにより前記上位クロックツリーの段数を増加させ、その後前記第３ステップ及び前記第４ステップを実行するループを含む、ＬＳＩ設計方法。
【請求項２】
請求項１において、
前記分割された領域ごとに、前記分割された領域に含まれる前記ローカルツリーの始点の数をカウントする第５ステップと、
前記分割された領域ごとに計算した前記ローカルツリーの始点の数が、所定のファンアウト制約を満たすか否かを判断する第６ステップをさらに含み、
前記ループは、前記分割された領域の全てにおいて前記ファンアウト制約と前記スキュー制約が満たされるまで、前記分割された領域をさらに均等に分割し、前記さらに分割された領域ごとに１個のクロックバッファをさらに配置することにより前記上位クロックツリーの段数を増加させ、その後、前記第５ステップと前記第６ステップ、及び／または、前記第３ステップと前記第４ステップを実行するループを含む、ＬＳＩ設計方法。
【請求項３】
請求項２において、
前記分割された領域に想定されるサイズごとに、ファンアウト数に対するスキューの大きさの関係を予め算出したスキューライブラリを準備しておき、
前記第３ステップは、前記スキューライブラリを用いて、前記分割された領域ごとに、前記ローカルツリーの始点の数に基づいて前記スキューを計算する、ＬＳＩ設計方法。
【請求項４】
請求項１において、
前記分割された領域に想定されるサイズごとに、ファンアウト数に対するスキューの大きさの関係を予め算出したライブラリを準備しておき、
高位記述のネットリストに対し論理合成を実行してゲートレベルネットリストを生成する第７ステップと、前記ゲートレベルネットリストに基づいたフロアプランを行なう第８ステップと、前記分割された領域ごとに、前記分割された領域に含まれる前記ローカルツリーの始点の数をカウントする第５ステップと、前記分割された領域ごとに計算した前記ローカルツリーの始点の数が、所定のファンアウト制約を満たすか否かを判断する第６ステップと、クロックツリーによる消費電力を見積もる第９ステップをさらに含み、
前記第１ステップは、前記ゲートレベルネットリストに含まれる複数のリーフを対象として前記複数のローカルツリーを形成し、
前記第５ステップは、前記分割された領域ごとに前記ローカルツリーの始点が所定の密度で分散しているものと仮定して、前記分割された領域ごとに、前記分割された領域に含まれる前記ローカルツリーの始点の数を算出し、
前記第３ステップは、前記ライブラリを用い、前記分割された領域ごとに前記ローカルツリーの始点が所定の密度で分散しているものと仮定して算出された前記ローカルツリーの始点の数に基づいて、前記スキューを計算し、
前記ループは、前記分割された領域の全てにおいて前記ファンアウト制約と前記スキュー制約が満たされるまで、前記分割された領域をさらに均等に分割し、前記さらに分割された領域ごとに１個のクロックバッファをさらに配置することにより前記上位クロックツリーの段数を増加させ、その後、前記第５ステップと前記第６ステップ、及び／又は、前記第３ステップと前記第４ステップを実行し、
前記第９ステップは、前記ループにおいて前記分割された領域の全てにおいて前記ファンアウト制約と前記スキュー制約が満たされ時点での前記上位クロックツリーの段数を算出し、前記上位クロックツリーの段数と前記ゲートレベルネットリストに含まれる前記リーフの数とに基づいて、前記クロックツリーによる消費電力を見積もる、ＬＳＩ設計方法。
【請求項５】
請求項４において、
前記第５ステップは、前記分割された領域ごとに前記ローカルツリーの始点が均等に分散しているものと仮定して、前記分割された領域ごとに、前記分割された領域に含まれる前記ローカルツリーの始点の数を算出する、ＬＳＩ設計方法。
【請求項６】
複数のリーフを含むネットリストに対して、クロック供給点から前記複数のリーフにクロック信号を供給するクロックツリーを生成可能な、ＬＳＩ設計装置であって、
前記複数のリーフを複数のグループに分割し、分割された前記グループのそれぞれにローカルツリーを形成することにより複数のローカルツリーを生成することができるローカルツリー生成部と、
クロック供給対象領域を均等に分割し、前記クロック供給点を起点として、上位クロックバッファから略等長の配線を介して等負荷の下位のクロックバッファを配置する処理を繰り返し、前記分割された領域ごとに１個のクロックバッファを配置することにより上位クロックツリーを形成することができる上位クロックツリー生成部と、
前記分割された領域ごとに、前記上位クロックツリーの末端から、前記分割された領域に含まれる２個以上の前記ローカルツリーの始点のそれぞれにクロック信号を供給するための経路のスキューを計算することができるスキュー計算部と、
前記分割された領域ごとに計算した前記スキューが、所定のスキュー制約を満たすか否かを判断することができるスキュー制約判定部を含み、
前記分割された領域の全てにおいて前記スキュー制約が満たされるまで、前記分割された領域をさらに均等に分割し、前記さらに分割された領域ごとに１個のクロックバッファをさらに配置することにより前記上位クロックツリーの段数を増加させ、その後前記スキュー計算部及び前記スキュー制約判定部の処理を実行するループ処理を実行可能に構成された、ＬＳＩ設計装置。
【請求項７】
請求項６において、
前記分割された領域ごとに、前記分割された領域に含まれる前記ローカルツリーの始点の数をカウントすることができるファンアウトカウント部と、
前記分割された領域ごとに計算した前記ローカルツリーの始点の数が、所定のファンアウト制約を満たすか否かを判断することができるファンアウト制約判定部をさらに含み、
前記ループ処理は、前記分割された領域の全てにおいて前記ファンアウト制約と前記スキュー制約が満たされるまで、前記分割された領域をさらに均等に分割し、前記さらに分割された領域ごとに１個のクロックバッファをさらに配置することにより前記上位クロックツリーの段数を増加させ、その後、前記ファンアウトカウント部と前記ファンアウト制約判定部、及び／または、前記スキュー計算部と前記スキュー制約判定部の処理を実行可能に構成された、ＬＳＩ設計装置。
【請求項８】
請求項７において、
前記分割された領域に想定されるサイズごとに、ファンアウト数に対するスキューの大きさの関係を予め算出して格納するスキューライブラリを備え、
前記スキュー計算部は、前記スキューライブラリを用いて、前記分割された領域ごとに、前記ローカルツリーの始点の数に基づいて前記スキューを計算する処理を実行可能に構成された、ＬＳＩ設計装置。
【請求項９】
請求項６において、
前記分割された領域に想定されるサイズごとに、ファンアウト数に対するスキューの大きさの関係を予め算出して格納するスキューライブラリを備え、
高位記述のネットリストに対し論理合成を実行してゲートレベルネットリストを生成することができる論理合成処理部と、前記ゲートレベルネットリストに基づいたフロアプランを行ない、前記クロック供給対象領域を規定することができるフロアプラン処理部と、前記分割された領域ごとに、前記分割された領域に含まれる前記ローカルツリーの始点の数をカウントすることができるファンアウトカウント部と、前記分割された領域ごとに計算した前記ローカルツリーの始点の数が、所定のファンアウト制約を満たすか否かを判断することができるファンアウト制約判定部と、クロックツリーによる消費電力を見積もることができるクロック見積り処理部をさらに含み、
前記ローカルツリー生成部は、前記ゲートレベルネットリストに含まれる複数のリーフを対象として前記複数のローカルツリーを形成することができ、
前記ファンアウトカウント部は、前記分割された領域ごとに前記ローカルツリーの始点が所定の密度で分散しているものと仮定して、前記分割された領域ごとに、前記分割された領域に含まれる前記ローカルツリーの始点の数を算出することができ、
前記スキュー計算部は、前記ライブラリを用い、前記分割された領域ごとに前記ローカルツリーの始点が所定の密度で分散しているものと仮定して算出された前記ローカルツリーの始点の数に基づいて、前記スキューを計算することができ、
前記ループ処理は、前記分割された領域の全てにおいて前記ファンアウト制約と前記スキュー制約が満たされるまで、前記分割された領域をさらに均等に分割し、前記さらに分割された領域ごとに１個のクロックバッファをさらに配置することにより前記上位クロックツリーの段数を増加させ、その後、前記ファンアウトカウント部と前記ファンアウト制約判定部、及び／又は、前記スキュー計算部と前記スキュー制約判定部の処理を実行することができ、
前記クロック見積り処理部は、前記ループ処理において前記分割された領域の全てにおいて前記ファンアウト制約と前記スキュー制約が満たされ時点での前記上位クロックツリーの段数を算出することができ、前記上位クロックツリーの段数と前記ゲートレベルネットリストに含まれる前記リーフの数とに基づいて、前記クロックツリーによる消費電力を見積もる処理を実行可能に構成された、ＬＳＩ設計装置。
【請求項１０】
請求項９において、
前記ファンアウトカウント部は、前記分割された領域ごとに前記ローカルツリーの始点が均等に分散しているものと仮定して、前記分割された領域ごとに、前記分割された領域に含まれる前記ローカルツリーの始点の数を算出する処理を実行可能に構成された、ＬＳＩ設計装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＬＳＩ設計においてクロック信号を分配するクロックツリーの設計方法及び設計装置に関し、特に消費電力の低いクロックツリーの設計に好適に利用できるものである。
【背景技術】
【０００２】
ＬＳＩ（Large Scale Integrated circuit）設計においてクロック信号をクロック供給点からリーフまで分配するクロックツリーを自動生成するCTS（Clock Tree Synthesis）は、クロックスキューを低減するために多数のクロックバッファを挿入する傾向にあり、ＬＳＩの消費電力を増加させる要因となっている。
【０００３】
CTSは、末端である多数のリーフを起点として、クロック供給点までクロックバッファをツリー状に配置する、ボトムアップのクロックツリー設計方法である。より詳しくは、例えば以下のとおりである。クロックツリーの末端（リーフ）であるフリップフロップなど、複数のリーフからなるグループに分け、１個のクロックバッファで駆動する。各グループを駆動するクロックバッファの複数からなるグループに分け、それぞれのグループをさらに上位レベルの１個のクロックバッファで駆動する。最上位レベルのクロックバッファがクロック供給点によって駆動することができる数になるまで、これを繰り返す。クロック供給点からリーフまでのクロック信号の伝搬遅延をレイテンシと呼び、レイテンシの差をクロックスキューと呼ぶ。クロックスキューは、０であることが理想であるが、許容される最大値がスキュー制約として与えられる。スキュー制約が満たされない場合には、クロックツリーのレイテンシの小さい方の経路に、レイテンシを増加させるためのクロックバッファを挿入して、スキューを小さくすることによりスキュー制約を満たす。
【０００４】
特許文献１に記載されるクロックツリーの形成方法は、負荷をできる限り均等にグルーピングして、ボトムアップでクロックツリーを生成するCTSである。クロックゲートに至るツリーにおけるクロックバッファは、その配置をクロックゲートの分布に基づいて決め（第００３４段落）、その段数を一律に揃え（第００１８段落）、また、クロックゲートからリーフに至るクロックバッファの段数も一律に揃える（第００２１段落）ことにより、クロックスキューを抑える。
【０００５】
特許文献２に記載されるゲーテッドクロックシンセシス方法は、指定された最大ファンアウト数に基づいて、ゲーテッドバッファのファンアウトを最適なグループ数に分割し、グループ毎にゲーテッドロジックとゲーテッドバッファを挿入することにより、クロックスキューを抑える。
【０００６】
特許文献１及び特許文献２を始めとしてCTSでは、クロックバッファのファンアウトの均等化が図られ、それによってクロックスキューを抑えるものである。しかし、リーフがLSIチップ内に均一に分布しているとは限らないため、クロックツリーを構成する配線の配線長にばらつきが生じることがある。配線長のばらつきに起因してクロックスキューが増大する。
【０００７】
これに対して、クロックバッファから次段のクロックバッファの駆動を等負荷・等長配線とする制約の下でクロックツリーを生成する、H-treeと呼ばれるクロックツリー生成方法がある。H-treeは、クロック供給点を起点としてリーフの方向に順次ツリー状にバッファを配置する、トップダウンのクロックツリー設計方法である。クロック供給点を通る直線でLSIチップを２等分して２個の領域を作り、それぞれの中心に次段の同じクロックバッファを配置する。２個の領域のそれぞれの中心は、クロック供給点からの距離が互いに等しく、クロックバッファを同じサイズとすることにより、負荷と駆動力がそれぞれ等しいクロックバッファが配置される。クロック供給点から、この初段のバッファまでの配線負荷（抵抗と容量）は等しく、また、バッファ自体の負荷（入力容量）も等しいので、原理的にクロック供給点から初段のバッファまでの信号伝搬遅延は互いに等しい。即ちクロックスキューは原理的に０になる。各領域をさらに２等分し、それぞれの中心にさらに次段の同じクロックバッファを配置する。これを繰り返すことにより、等負荷・等長配線の制約が守られ、原理的にクロックスキューは０に抑えられる。LSIチップは２等分、４等分、８等分、と、順次均等の領域に分割されていくが、リーフが均等に配置されていない場合には、リーフに接続する段階でファンアウトのばらつきが発生し、クロックスキューを生じる。
【０００８】
特許文献３は、クロック供給点を起点とする上位の段をH-treeで構成し、下位の段をCTSで構成する。CTSで生成するクロックドライバを一定の領域内にのみに収めるように配置位置を制限することにより、H-treeの末端とCTSの起点の接続を単純化している（第００２１段落他）。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００９−１５２４５１号公報
【特許文献２】特開２００１−３０６６４２号公報
【特許文献３】特開２００３−０７８０１４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
特許文献１及び特許文献２を始めとしてCTSでは、クロックスキューを減らす目的、また、負荷を均等化する目的でクロックバッファを追加するので、追加されたクロックバッファにより、LSIの消費電力が増大する。一方、仮にすべてH-treeによって末端のリーフまでクロックツリーを構成しても、かえって、LSIの消費電力が増大する。末端のリーフまでH-treeによってクロックツリーを構成すると、リーフの最も密集する領域までのクロックバッファの段数によって、H-tree全体の段数が決められてしまうため、リーフの疎な領域でH-treeを構成するクロックバッファの数が、必要以上に多く配置されるからである。
【００１１】
特許文献３に開示されるように、クロック供給点を起点とする上位の段をH-treeで構成し、下位の段をCTSで構成することにより、クロックバッファによる消費電力を減らすためにクロックツリーを最適な構成にすることができる。
【００１２】
しかし、クロック供給点を起点とする上位の段をH-treeなどの等長・等負荷によるクロックツリーで構成し、下位の段をCTSなどのリーフを複数のグループに分割して構成したクロックツリーに接続して構成するクロックツリーにおいて、上位のクロックツリーの段数を最適化する具体的な設計方法は、提案されていない。特許文献３においては、CTSで生成・配置するクロックドライバを、一定の領域内に収めるように配置位置を制限することにより、H-treeの末端とCTSの起点の接続を単純化している（第００２１段落他）。リーフは必ずしもチップ全体に均等に分散して配置されるとは限らないので、CTSで生成するクロックドライバの配置位置を制限することは好ましくない。
【００１３】
このような課題を解決するための手段を以下に説明するが、その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１４】
一実施の形態によれば、下記の通りである。
【００１５】
すなわち、クロック供給点から回路領域に配置される複数のリーフにクロック信号を供給するクロックツリーを設計するＬＳＩ設計方法であって、以下のように構成される。
【００１６】
複数のリーフを複数のグループに分割し、分割されたグループのそれぞれにローカルツリーを形成することにより複数のローカルツリーを生成する。回路領域を含むクロック供給対象領域を均等に分割し、クロック供給点を起点として等長配線を介して等負荷のクロックバッファを配置するステップを繰り返すことにより分割された領域ごとに１個のクロックバッファを配置する。分割された領域ごとに配置されたクロックバッファから、その領域に含まれる複数のローカルツリーの始点にクロック信号を供給するときのスキューを見積もる。
【００１７】
見積もったスキューが、所定のスキュー制約を満たすまで、クロック供給対象領域をさらに細かく均等分割して等長配線を介して等負荷のクロックバッファを配置し、その領域に含まれる複数のローカルツリーの始点にクロック信号を供給するときのスキューを見積もって、所定のスキュー制約を満たすか否かの判断を繰り返す。
【発明の効果】
【００１８】
前記一実施の形態によって得られる効果を簡単に説明すれば下記のとおりである。
【００１９】
すなわち、クロック供給点を起点とする上位の段を等長・等負荷によるクロックツリーで構成し、リーフを複数のグループに分割して構成した下位の段のローカルクロックツリーに接続して構成するクロックツリーにおいて、上位のクロックツリーの段数を最適化することができる。
【図面の簡単な説明】
【００２０】
【図１】図１は、実施形態１における処理を表すフローチャートである。
【図２】図２は、実施形態２における処理を表すフローチャートである。
【図３】図３は、実施形態２における処理の途中経過（クロック供給対象領域が４分割された時点）を表す説明図である。
【図４】図４は、実施形態２における処理の途中経過（クロック供給対象領域が１６分割された時点）を表す説明図である。
【図５】図５は、実施形態２における処理の途中経過（クロック供給対象領域が６４分割された時点）を表す説明図である。
【図６】図６は、実施形態３におけるスキューライブラリを使った処理の説明図である。
【図７】図７は、実施形態４における処理を表すフローチャートである。
【発明を実施するための形態】
【００２１】
１．実施の形態の概要
先ず、本願において開示される代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【００２２】
〔１〕＜H-tree + CTSの上位H-tree段数の最適化方法＞
ＬＳＩチップ上のクロック供給点（３１）から複数のリーフ（３６）にクロック信号を供給するクロックツリー（３０）を設計する、電子計算機上のＬＳＩ設計方法であって、以下の各ステップを含んで構成される。
【００２３】
前記複数のリーフを複数のグループに分割し、分割された前記グループのそれぞれにローカルツリー（３４）を形成することにより複数のローカルツリーを生成する第１ステップ（ステップ１２）。
【００２４】
クロック供給対象領域（３９）を均等に分割し（ステップ１３）、前記クロック供給点を起点として、上位のクロックバッファから略等長配線を介して等負荷の下位のクロックバッファ（３７）を配置するステップ（ステップ１４）を繰り返し、前記分割された領域（３３）ごとに１個のクロックバッファを配置することにより上位クロックツリーを形成する第２ステップ（ステップ１５）。
【００２５】
前記分割された領域ごとに、前記上位クロックツリーの末端から、前記分割された領域に含まれる２個以上の前記ローカルツリーの始点（３５）のそれぞれにクロック信号を供給するための経路のスキューを計算する第３ステップ（ステップ１８）。
【００２６】
前記分割された領域ごとに計算した前記スキューが、所定のスキュー制約を満たすか否かを判断する第４ステップ（ステップ１９）。
【００２７】
ＬＳＩ設計方法はさらに、前記分割された領域の全てにおいて前記スキュー制約が満たされるまで、前記分割された領域をさらに均等に分割し、前記さらに分割された領域ごとに１個のクロックバッファをさらに配置することにより前記上位クロックツリーの段数を増加させ、その後前記第３ステップ及び前記第４ステップを実行するループを含む。
【００２８】
これにより、クロック供給点を起点とする上位の段を等長・等負荷によるクロックツリーで構成し、リーフを複数のグループに分割して構成した下位の段のローカルクロックツリーに接続して構成するクロックツリーにおいて、上位のクロックツリーの段数を最適化することができる。
【００２９】
〔２〕＜項１＋ファンアウト制約＞
項１において、前記分割された領域ごとに、前記分割された領域に含まれる前記ローカルツリーの始点の数をカウントする第５ステップ（ステップ１６）と、前記分割された領域ごとに計算した前記ローカルツリーの始点の数が、所定のファンアウト制約を満たすか否かを判断する第６ステップ（ステップ１７）をさらに含んで構成される。
【００３０】
前記ループは、前記分割された領域の全てにおいて前記ファンアウト制約と前記スキュー制約が満たされるまで、前記分割された領域をさらに均等に分割し、前記さらに分割された領域ごとに１個のクロックバッファをさらに配置することにより前記上位クロックツリーの段数を増加させ、その後前記第５ステップと前記第６ステップ及び／又は前記第３ステップと前記第４ステップを実行する。
【００３１】
これにより、各領域においてファンアウト制約を満たすことができ、例えば信号遷移時間に関する仕様などの電気的特性ルール違反の発生を予防することができる。
【００３２】
〔３〕＜スキューライブラリ＞
項２において、前記分割された領域に想定されるサイズごとに、ファンアウト数に対するスキューの大きさの関係を予め算出したスキューライブラリ（２２）を準備しておき、前記第３ステップは、前記スキューライブラリを用いて、前記分割された領域ごとに、前記ローカルツリーの始点の数に基づいて前記スキューを計算する。
【００３３】
これにより、前記第３ステップにおけるスキューの計算を高速化することができる。
【００３４】
〔４〕＜クロックツリーによる消費電力の見積もり＞
項１において、以下のように前記クロックツリーによる消費電力を見積もる。
【００３５】
前記分割された領域に想定されるサイズごとに、ファンアウト数に対するスキューの大きさの関係を予め算出したスキューライブラリ（２２）を準備し、さらに以下の各ステップを含む。
【００３６】
高位記述のネットリストに対し論理合成を実行してゲートレベルネットリスト（２４）を生成する第７ステップ（ステップ２５）。前記ゲートレベルネットリストに基づいたフロアプランを行なう第８ステップ（ステップ２６）。前記分割された領域ごとに、前記分割された領域に含まれる前記ローカルツリーの始点の数をカウントする第５ステップ（ステップ１６）。前記分割された領域ごとに計算した前記ローカルツリーの始点の数が、所定のファンアウト制約を満たすか否かを判断する第６ステップ（ステップ１７）。クロックツリーによる消費電力を見積もる第９ステップ（ステップ２０）。
【００３７】
前記第１ステップは、前記ゲートレベルネットリストに含まれる複数のリーフを対象として前記複数のローカルツリーを形成する。
【００３８】
前記第５ステップは、前記分割された領域ごとに前記ローカルツリーの始点が所定の密度で分散しているものと仮定して、前記分割された領域ごとに、前記分割された領域に含まれる前記ローカルツリーの始点の数を算出する。
【００３９】
前記第３ステップは、前記ライブラリを用い、前記分割された領域ごとに前記ローカルツリーの始点が所定の密度で分散しているものと仮定して算出された前記ローカルツリーの始点の数に基づいて、前記スキューを計算する。
【００４０】
前記ループは、前記分割された領域の全てにおいて前記ファンアウト制約と前記スキュー制約が満たされるまで、前記分割された領域をさらに均等に分割し、前記さらに分割された領域ごとに１個のクロックバッファをさらに配置することにより前記上位クロックツリーの段数を増加させる。その後、前記第５ステップと前記第６ステップ、及び／又は、前記第３ステップと前記第４ステップを実行する。
【００４１】
前記第９ステップは、前記ループにおいて前記分割された領域の全てにおいて前記ファンアウト制約と前記スキュー制約が満たされ時点での前記上位クロックツリーの段数を算出する。前記上位クロックツリーの段数と前記ゲートレベルネットリストに含まれる前記リーフの数とに基づいて、前記クロックツリーによる消費電力を見積もる。
【００４２】
これにより、配置・配線を行う以前の段階において、クロックツリーのプロトタイプを高速に作成し、クロックツリーによる消費電力を見積もることができる。
【００４３】
〔５〕＜ローカルツリーが均等に分散していると仮定した見積もり＞
項４において、前記第５ステップは、前記分割された領域ごとに前記ローカルツリーの始点が均等に分散しているものと仮定して、前記分割された領域ごとに、前記分割された領域に含まれる前記ローカルツリーの始点の数を算出する。
【００４４】
これにより、見積もりのための計算時間を短縮することができる。
【００４５】
〔６〕＜H-tree + CTSの上位H-tree段数の最適化することができるLSI設計装置＞
複数のリーフ（３６）を含むネットリストに対して、クロック供給点（３１）から前記複数のリーフにクロック信号を供給するクロックツリー（３０）を生成可能な、ＬＳＩ設計装置であって、以下の各部を含んで構成される。
【００４６】
前記複数のリーフを複数のグループに分割し、分割された前記グループのそれぞれにローカルツリー（３４）を形成することにより複数のローカルツリーを生成することができるローカルツリー生成部（１２）。
【００４７】
クロック供給対象領域（３９）を均等に分割し（１３）、前記クロック供給点を起点として、上位クロックバッファから略等長配線を介して等負荷の下位のクロックバッファ（３７）を配置する処理を繰り返し、前記分割された領域（３３）ごとに１個のクロックバッファを配置する（１４）ことにより上位クロックツリーを形成することができる上位クロックツリー生成部（１５）。
【００４８】
前記分割された領域ごとに、前記上位クロックツリーの末端から、前記分割された領域に含まれる２個以上の前記ローカルツリーの始点（３５）のそれぞれにクロック信号を供給するための経路のスキューを計算することができるスキュー計算部（１８）。
【００４９】
前記分割された領域ごとに計算した前記スキューが、所定のスキュー制約を満たすか否かを判断することができるスキュー制約判定部（１９）。
【００５０】
ＬＳＩ設計装置はさらに、前記分割された領域の全てにおいて前記スキュー制約が満たされるまで、前記分割された領域をさらに均等に分割し、前記さらに分割された領域ごとに１個のクロックバッファをさらに配置することにより前記上位クロックツリーの段数を増加させる。その後前記スキュー計算部及び前記スキュー制約判定部の処理を実行するループ処理を実行可能に構成される。
【００５１】
これにより、クロック供給点を起点とする上位の段を等長・等負荷によるクロックツリーで構成し、リーフを複数のグループに分割して構成した下位の段のローカルクロックツリーに接続して構成するクロックツリーにおいて、上位のクロックツリーの段数を最適化されたクロックツリーを生成することが可能なLSI設計装置を提供することができる。
【００５２】
〔７〕＜項６＋ファンアウト制約＞
項６において、前記ＬＳＩ設計装置は、前記分割された領域ごとに、前記分割された領域に含まれる前記ローカルツリーの始点の数をカウントすることができるファンアウトカウント部（１６）と、前記分割された領域ごとに計算した前記ローカルツリーの始点の数が、所定のファンアウト制約を満たすか否かを判断することができるファンアウト制約判定部（１７）をさらに備える。
【００５３】
前記ループ処理は、前記分割された領域の全てにおいて前記ファンアウト制約と前記スキュー制約が満たされるまで、前記分割された領域をさらに均等に分割し、前記さらに分割された領域ごとに１個のクロックバッファをさらに配置することにより前記上位クロックツリーの段数を増加させる。その後前記ファンアウトカウント部と前記ファンアウト制約判定部及び／又は前記スキュー計算部と前記スキュー制約判定部の処理を実行可能に構成される。
【００５４】
これにより、各領域においてファンアウト制約を満たすことができ、例えば信号遷移時間に関する仕様などの電気的特性ルール違反の発生を予防することができる。
【００５５】
〔８〕＜スキューライブラリ＞
項７において、前記ＬＳＩ設計装置は、前記分割された領域に想定されるサイズごとに、ファンアウト数に対するスキューの大きさの関係を予め算出して格納するスキューライブラリ（２２）を備え、前記スキュー計算部は、前記スキューライブラリを用いて、前記分割された領域ごとに、前記ローカルツリーの始点の数に基づいて前記スキューを計算する処理を実行可能に構成される。
【００５６】
これにより、前記スキュー計算部におけるスキューの計算を高速化することができる。
【００５７】
〔９〕＜クロックツリーによる消費電力の見積もり＞
項６において、前記ＬＳＩ設計装置は、以下のように前記クロックツリーによる消費電力を見積もることができるように構成される。
【００５８】
前記分割された領域に想定されるサイズごとに、ファンアウト数に対するスキューの大きさの関係を予め算出して格納するスキューライブラリ（２２）を備え、さらに以下の各部を備える。
【００５９】
高位記述のネットリストに対し論理合成を実行してゲートレベルネットリスト（２４）を生成することができる論理合成処理部（２５）。前記ゲートレベルネットリストに基づいたフロアプランを行なうことができるフロアプラン処理部（２６）。前記分割された領域ごとに、前記分割された領域に含まれる前記ローカルツリーの始点の数をカウントすることができるファンアウトカウント部（１６）。前記分割された領域ごとに計算した前記ローカルツリーの始点の数が、所定のファンアウト制約を満たすか否かを判断することができるファンアウト制約判定部（１７）。クロックツリーによる消費電力を見積もることができるクロック見積り処理部（２０）。
【００６０】
前記ローカルツリー生成部は、前記ゲートレベルネットリストに含まれる複数のリーフを対象として前記複数のローカルツリーを形成することができる。
【００６１】
前記ファンアウトカウント部は、前記分割された領域ごとに前記ローカルツリーの始点が所定の密度で分散しているものと仮定して、前記分割された領域ごとに、前記分割された領域に含まれる前記ローカルツリーの始点の数を算出することができる。
【００６２】
前記スキュー計算部は、前記ライブラリを用い、前記分割された領域ごとに前記ローカルツリーの始点が所定の密度で分散しているものと仮定して算出された前記ローカルツリーの始点の数に基づいて、前記スキューを計算することができる。
【００６３】
前記ループ処理は、前記分割された領域の全てにおいて前記ファンアウト制約と前記スキュー制約が満たされるまで、前記上位クロックツリー生成部は、前記分割された領域をさらに均等に分割し、前記さらに分割された領域ごとに１個のクロックバッファをさらに配置することにより前記上位クロックツリーの段数を増加させる。その後前記ファンアウトカウント部及び前記ファンアウト制約判定部及び前記スキュー計算部及び前記スキュー制約判定部の処理を実行することができる。
【００６４】
前記クロック見積り処理部は、前記ループ処理において前記分割された領域の全てにおいて前記ファンアウト制約と前記スキュー制約が満たされ時点での前記上位クロックツリーの段数を算出することができ、前記上位クロックツリーの段数と前記ゲートレベルネットリストに含まれる前記リーフの数とに基づいて、前記クロックツリーによる消費電力を見積もる処理を実行可能に構成される。
【００６５】
これにより、配置・配線を行う以前の段階において、クロックツリーのプロトタイプを高速に作成し、クロックツリーによる消費電力を見積もることができるLSI設計装置を提供することができる。
【００６６】
〔１０〕＜ローカルツリーは均等に分散していると仮定した見積もり＞
項９において、前記ファンアウトカウント部は、前記分割された領域ごとに前記ローカルツリーの始点が均等に分散しているものと仮定して、前記分割された領域ごとに、前記分割された領域に含まれる前記ローカルツリーの始点の数を算出する処理を実行可能に構成される。
【００６７】
これにより、見積もりのための計算時間を短縮することができる。
【００６８】
２．実施の形態の詳細
実施の形態について更に詳述する。
【００６９】
〔実施形態１〕
図１は、実施形態１における処理を表すフローチャートである。特に制限されないが、図１のフローチャートで示されるLSI設計方法は、電子計算機を用いて実行されることができ、あるいは、図１のフローチャートで示されるLSI設計方法を実行することができるLSI設計装置を構成することができる。
【００７０】
LSIチップに形成される回路のゲートネットリストが入力される。ゲートネットリストには、主に標準セルで構成された論理回路が含まれる。さらに、メモリ、その他、アナログなどのマクロが含まれる場合もある。ゲートネットリストには、LSIチップ上のクロック供給点からクロック信号が供給される複数のリーフが含まれている。リーフはフリップフロップ、ラッチの他、クロック同期の回路、例えばメモリ、A/D変換器、D/A変換器などである。クロックをゲーティングする論理ゲートも、リーフの一種に位置づけられる場合がある。クロックゲートにおいて、ゲーティングを制御する信号とクロックとの間で、セットアップとホールドのタイミング制約が課せられる場合があるからである。
【００７１】
ゲートネットリストは、例えば論理合成ツールによって、ビヘイビアレベルやRTL（Register Transfer Level）などの高位論理で記述されたネットリストから合成されることができる。合成された時点のゲートネットリストには、クロックツリーは含まれておらず、クロック供給点から直接またはゲーティングセルを介して、全てのリーフへのクロック配線が形成されている。この時点の配線は、単にクロック供給点とリーフとを関連付けるものであって、ファンアウト制約など、電気的設計ルールなどを満足するものではない。
【００７２】
実施形態１における処理では、まず、ゲートネットリストに含まれ、同一のクロック系統に接続される全てのリーフを複数のグループに分割し、分割されたグループのそれぞれにローカルツリーを形成することにより複数のローカルツリーを生成する（ステップ１２）。ローカルツリーは、例えば、公知のCTSによって生成することができる。ローカルツリーの生成（ステップ１２）は、クロック供給点を上流と呼ぶとき、ボトムアップである。このローカルツリーの生成（ステップ１２）に当たっては、ファンアウト、スキュー、レイテンシなどの制約を与えてもよい。
【００７３】
リーフを複数のグループに分割する場合には、各グループに含まれるリーフのクロック信号に対する負荷の合計が、概ね均等となるように分割するのが好ましい。換言すれば、ローカルツリーの始点からリーフまでのクロック信号の伝搬遅延であるレイテンシが、複数のローカルツリーの間で均等となるように、分割することが好ましい。また、ローカルツリー内のリーフ間ではスキューが最小に抑えられていることが好ましい。後述の通り、上位クロックツリーでは原理的にスキューが０となるので、ローカルツリー内及び複数のローカルツリー間でのスキューが最小に抑えられていれば、全体のスキューを抑えることができるからである。
【００７４】
リーフを複数のグループに分割する場合には、また、近接して配置されるリーフが同じグループとなるように分割することが好ましい。クロック配線が長くなることを予防し、配線遅延に起因するスキューの発生を抑えることができるからである。近接して配置されるリーフを選ぶためには、ローカルツリー形成（ステップ１２）に先立って、ゲートネットリストに対するセルの配置処理ステップ（ステップ１１）を実行することができる。一方、実際に配置処理を実行しなくても、互いに近接して配置される可能性の高いリーフを選択的に同じグループに含めるようにグルーピングすることは可能である。同じクロックゲーティングを介するリーフは、互いに近接して配置される傾向があり、また、クロックゲーティングを介していないリーフは、入出力信号の関連性に基づいて、互いに近接して配置される傾向にあるリーフを選ぶことができるからである。
【００７５】
次に、上位のクロックツリーを形成する（ステップ１５）。上位のクロックツリーは、回路領域を含むクロック供給対象領域を規定し、これを均等に分割し（ステップ１３）、クロック供給点を起点として等長配線を介して等負荷のクロックバッファを配置するステップ（ステップ１４）を、上位クロックツリーが所定の初期段数に達するまで繰り返す。実際に領域分割とクロックバッファの配置を繰り返す必要はなく、均等に分割された領域ごとに１個のクロックバッファを等負荷・等長配線で配置することにより、上位クロックツリーを形成してもよい。ここで、等長、等負荷において等しいとは、厳密に等しいことを要件とするものではなく、できる限り等しくするという技術思想を表現するに過ぎない。等しくない場合には、それに応じてスキューが生じる。
【００７６】
上位のクロックツリーの形成は、例えば、公知のH-treeによるクロックツリー形成法によって実現することができる。回路領域は、必ずしも対称な形状をしているとは限らない。クロック供給対象領域は、均等に分割することを繰り返すので、正方形か長方形が望ましい。クロック供給対象領域は、回路領域を包含していれば良く、リーフが配置されることがないメモリマクロやアナログマクロの領域を含んでいてもよい。上位のクロックツリーを形成する処理（ステップ１５）は、クロック供給対象領域に一律にH-treeのクロックバッファを配置するように動作するので、このような領域にもクロックバッファを配置しようとするが、クロック供給対象のリーフがないので、クロックバッファを配置することは無駄である。H-treeの対称性を保ったまま、クロックバッファの配置を中止するような操作は、H-treeに関する公知の技術によって実現し得る。
【００７７】
分割された領域ごとに、ステップ１５で形成した上位クロックツリーの末端から、その領域に含まれる、ローカルツリーの始点、即ち、ローカルツリーを形成するクロックバッファの初段の入力端子までの、スキューを計算する（ステップ１８）。上位クロックツリーの末端からローカルツリーの始点まで実際にCTSを実行することにより、正確にスキューを算出することができる。一方、ファンアウトとローカルツリーの始点までの距離に基づいて、スキューを見積もることもできる。ここで、スキューとは、上位クロックツリーの末端から複数のローカルツリーの、それぞれの始点までのクロック信号の伝搬遅延（レイテンシ）の最大値と最小値の差である。よって、分割された領域内にあるローカルツリーの始点が、１個または０個の場合には、スキューを算出することはできない。
【００７８】
次に、分割された領域ごとに算出されたスキューが、所定のスキュー制約を満足しているか否かを判断する（ステップ１９）。全ての領域で所定のスキュー制約を満足している場合には、各領域において、上位クロックツリーの末端から複数のローカルツリーの始点までの配線を行ってフローを終了する。上位クロックツリーの末端から複数のローカルツリーの始点までの配線は、ステップ１８においてスキューを計算するときに仮定した配線方法と整合していればよく、必要に応じてCTSを使ったクロックツリーによって配線してもよい。分割された領域内にあるローカルツリーの始点が、１個または０個の場合には、ステップ１８ではスキューは算出されないが、この領域ではスキュー制約を満足しているものとして扱う。
【００７９】
少なくとも１個の領域で所定のスキュー制約を満足していない場合には、ステップ１５に戻って、分割された領域をさらに細かく均等に分割し、各領域において、上位クロックツリーの末端であった点を起点として等長配線を介して等負荷のクロックバッファを配置する。これにより、上位クロックツリーの段数を増加させる。その後、改めてステップ１８とステップ１９を実行する。このループは、分割された領域ごとに算出されたスキューが、全ての領域で所定のスキュー制約を満足するまで繰り返される。
【００８０】
これにより、クロック供給点を起点とする上位の段を等長・等負荷によるクロックツリーで構成し、リーフを複数のグループに分割して構成した下位の段のローカルクロックツリーに接続して構成するクロックツリーにおいて、上位のクロックツリーの段数を最適化することができる。上位のクロックツリーの段数は、所定のスキュー制約を満足するために必要最小限の段数に収束するからである。
【００８１】
〔実施形態２〕
図２は、実施形態２における処理を表すフローチャートである。特に制限されないが、図２のフローチャートで示されるLSI設計方法は、実施形態１と同様に、電子計算機を用いて実行されることができ、あるいは、図２のフローチャートで示されるLSI設計方法を実行することができるLSI設計装置を構成することができる。
【００８２】
ゲートネットリストに基づいて、セルの配置を行う（ステップ１１）。上述の通り、この時点のゲートネットリストにはクロックツリーがまだ形成されていないので、セルの配置は最終的なものではない。配置されたリーフを複数のグループに分割して、グループ毎にローカルツリーを形成する（ステップ１２）。リーフのグルーピングの方法や、ローカルツリーの形成（ステップ１２）は、実施形態１と同様であるので、詳細な説明は省略する。
【００８３】
次に、上位のクロックツリーを形成する（ステップ１５）。上位のクロックツリーは、回路領域を含むクロック供給対象領域を規定し、これを均等に分割し（ステップ１３）、クロック供給点を起点として等長配線を介して等負荷のクロックバッファを配置するステップ（ステップ１４）を、上位クロックツリーが所定の初期段数に達するまで繰り返す。実際に領域分割とクロックバッファの配置を繰り返す必要はなく、均等に分割された領域ごとに１個のクロックバッファを等負荷・等長配線で配置することにより、上位クロックツリーを形成してもよい。これは、例えば、公知のH-treeによるクロックツリー形成法によって実現することができる。
【００８４】
図３、図４及び図５は、実施形態２における処理の途中経過を表す説明図である。クロック供給対象領域が、４分割された時点、１６分割された時点、６４分割された時点をそれぞれ表す。図３、図４及び図５のそれぞれにおいて、（a）はレイアウトを表す模式図、（b）は分割された各領域におけるツールによる解析（後述）結果を表す図で、上段はファンアウト数、下段はスキューである。（c）はクロック供給点３１からリーフ３６に至るクロックツリーの回路を表す模式図である。
【００８５】
セルの配置（ステップ１１）を行った時点でのクロックツリーの回路（c）は図示を省略しているが、クロック供給点３１と複数のリーフ３６が直接、あるいはクロックゲートを介して接続されている。これは、リーフごとに供給されるべきクロック信号を、論理的に規定するだけのものであって、電気的特性は考慮されていない。ステップ１２により、複数のローカルツリー３４が形成され、複数のローカルツリーの始点３５が規定される。ローカルツリーの始点３５は、ローカルツリーの初段のバッファの入力端子である。初段がクロックゲートである場合、そのクロック入力端子である。
【００８６】
図３に示すように、クロック供給対象領域３９は４等分に分割され、中央にH-tree初段のクロックバッファが配置される。このクロックバッファからは、分割された４領域それぞれにある複数のローカルツリー３４へ、クロック信号が供給される。以下の各ステップにより、クロック供給が電気的特性を満足し得るか、また、上位のクロックツリー（H-tree）の段数を増やす必要があるか、が判断される。
【００８７】
ステップ１６において、分割された領域３３ごとにローカルツリーの始点３５の数をカウントする。図３において、（b）の上段に示すように、各領域のローカルツリーの始点３５の数がファンアウト数としてカウントされる。各領域のローカルツリーの始点３５の数は、その領域にクロック信号を供給するクロックバッファ１個を配置したときのファンアウト数に対応する。ステップ１７において、各領域でカウントしたローカルツリーの始点３５の数が、所定のファンアウト制約を満足するか否かを判定する。全ての領域で所定のファンアウト制約を満足すれば、ステップ１８に進むが、満足できない領域が１つでもあれば、ステップ１３に戻る。
【００８８】
ステップ１８においては、分割された領域ごとに、ステップ１５で形成した上位クロックツリーの末端から、その領域に含まれるローカルツリーの始点、即ち、ローカルツリーを形成するクロックバッファの初段の入力端子までのスキューを計算する。スキューの計算方法の詳細は、実施形態１で詳述した通りである。図３において、（b）の下段に示すように各領域のスキューの値が算出される。ステップ１９において、各領域で計算したスキューが、所定のスキュー制約を満足するか否かを判定する。全ての領域で所定のファンアウト制約を満足すれば、図２のフローを終了するが、満足できない領域が１つでもあれば、ステップ１３に戻る。
【００８９】
ステップ１３に戻ると、クロック供給対象領域３９をさらに細かく均等に分割する。さらに細かく分割された領域ごとに１個のクロックバッファをさらに配置することにより前記上位クロックツリーの段数を増加させる。図４は、その一例であり、（a）に示すようにクロック供給対象領域３９をさらに４等分して（ステップ１３）、クロックバッファ３７＿４、３７＿５、３７＿６、３７＿７を等長・等負荷で配置する（ステップ１４）。これは（c）に示す通り、上位のクロックツリーの段数を、２段増やすことに当たる。クロックバッファ３７＿１の適切なファンアウトが４以上であれば、クロックバッファ３７＿２と３７＿３の配置は、省略することもできる。
【００９０】
細かく分割された領域において、再度ローカルツリーの始点の数をカウントし（ステップ１６）、ファンアウト制約を満たすか否かの判断がなされる（ステップ１７）。ファンアウト制約が全ての領域で満たされる場合には、細かく分割された領域において、再度スキューの計算がされ（ステップ１８）、スキュー制約を満たすか否かの判断がなされる（ステップ１９）。
【００９１】
ファンアウト制約が満たされるまでは、スキューの計算（ステップ１８）は行う必要がない。一方、一旦ファンアウト制約が満たされれば、ステップ１６とステップ１７は省略してもよい。領域をさらに細かく分割する方向のみであるので、再びファンアウト制約を満たさなくなることはないからである。
【００９２】
図４において（b）は、ファンアウト数とスキューの解析結果を例示する。クロック供給対象領域３９がさらに４分割された結果、図３の場合と比較してファンアウト数は約４分の１に減っている。これがファンアウト制約を満たすときは、スキュー計算がされ、スキュー制約を満たすか否かの判断がなされる。この時点で、ファンアウトの最大値は４であり、スキューの最大値は10psである。ここで、ファンアウト制約とスキュー制約が共に満足されたと仮定すると、全体のスキューは、分割された領域ごとで、ローカルツリーにおけるスキューと上記解析したスキューとの和となる。
【００９３】
一方、この時点でも、いずれかの領域でファンアウト制約かスキュー制約が満足されないと仮定すると、例えば図５に示されるように、クロック供給対象領域３９をさらに細かく均等に分割し、上位のクロックツリーの段数を増やす。その結果、図５において（b）に例示されるように、ファンアウト数とスキューの解析結果が更新される。ファンアウト数は図４の場合と比較して約４分の１に減るので、ほとんどの領域で１または０となる。ファンアウト０または１の場合、スキューは定義されず計算もされない。
【００９４】
ファンアウト０の場合、H-treeには必要のないクロックバッファが含まれることとなるが、H-treeの対称性を損なうことなく、不必要なバッファの数を減らす公知の技術を用いて、そのようなバッファを減らすことができる。しかしながら、上位クロックツリーをH-treeで構成した場合において、段数が１段増えると構成するクロックバッファの数は約２倍になる。N段のH-treeを構成するクロックバッファの数は、２のN乗−１となるからである。クロックバッファの数の増加は、クロックツリーにおける消費電力の増加につながる。
【００９５】
ファンアウト制約とスキュー制約を与えて、上位のクロックツリーの段数を、これら制約を満足することができる必要最小限の段数とすることができる。また、各領域においてファンアウト制約を満たすことができ、例えば信号遷移時間に関する仕様などの電気的特性ルール違反の発生を予防することができる。
【００９６】
〔実施形態３〕
図６は、実施形態３におけるスキューライブラリを使った処理の説明図である。
【００９７】
ステップ１８の上位クロックツリーの末端からローカルツリーの始点までのスキューの計算は、実施形態１で詳述したように実際のクロックバッファ等を仮定して精密に計算することができるが、それに代えて、図６に示すようなスキューライブラリを使って、高速に求めることもできる。
【００９８】
スキューライブラリは、分割された領域の大きさと、その領域に含まれるローカルツリーの始点の数（ファンアウト数）に基づいて、スキューが最も大きくなる場合を想定して予め算出したスキューの値を備えて構成される。図６には、上の行ほど分割された領域の大きさが大きい場合を示し、右方向の列ごとに、ローカルツリーの始点の数（ファンアウト数）が多い場合を示す。スキューはレイテンシの差であるから、その最大値は、上位クロックツリーの末端からの距離が最も近いローカルツリーの始点までのレイテンシと、その距離が最も遠いローカルツリーの始点までのレイテンシの差によって求められる。ファンアウトが２の場合、即ち、分割された領域内にローカルツリーの始点が２個ある場合、H-treeの末端のクロックバッファを右下と仮定したとき、同じ右下に最も近いローカルツリーの始点があり、左上に最も遠いローカルツリーの始点があるときに、スキューが最大値となる。分割された領域の大きさが大きいほど、スキューの最大値は大きくなるので、図６では、50μm角のとき2ps、100μm角のとき5ps、200μm角のとき14psとなっている。分割された領域の大きさが同じときは、ローカルツリーの始点の数（ファンアウト数）が多いほど、スキューの最大値は大きくなる。ファンアウトが２の場合、H-treeの末端のクロックバッファと最も近い右下と最も遠い左上にあるときが、スキューの最大値となるが、３個目以上のローカルツリーの始点が、最も遠い左上に集中しているときに、スキューが最大値となる。近い方のレイテンシは増加しないが、遠い方、即ちレイテンシが大きい方のレイテンシは、ファンアウト数が増えるために、より大きくなるからである。図６では、領域が50μm角のとき、ファンアウト＝２のときスキュー＝2ps、ファンアウト＝3, 4, …8のとき、スキュー＝5ps, 6ps, …11psと増加する例を示している。
【００９９】
以上述べたように、一方、想定されるスキューを予め計算してスキューライブラリに格納しておけば、ステップ１８において、このスキューライブラリを参照するだけで高速にスキューを算出することができる。
【０１００】
これにより、スキューの計算（ステップ１８）を高速化することができる。
【０１０１】
ただし、スキューライブラリに格納されるスキューの値は、領域の大きさとファンアウトの大きさを仮定した場合の最大値である。したがって、スキュー制約を満たすか否かの判断（ステップ１９）に対しては厳しくなる方向で作用する。これが厳しすぎる場合には、与えるスキュー制約を緩和するか、あるいはスキューライブラリに格納するスキューの値を、より現実的なモデルに基づいて算出した値に変更すればよい。
【０１０２】
〔実施形態４〕
図７は、実施形態４における処理を表すフローチャートである。LSI設計において、配置・配線を行う以前の段階において、クロックツリーのプロトタイプを高速に作成し、クロックツリーによる消費電力と面積を見積もるLSI設計方法、及びそれを使用するLSI設計装置である。特に制限されないが、図７のフローチャートで示されるLSI設計方法は、実施形態１、２と同様に、電子計算機を用いて実行されることができ、あるいは、図７のフローチャートで示されるLSI設計方法を実行することができるLSI設計装置を構成することができる。
【０１０３】
論理合成（ステップ２５）は、ビヘイビアレベルやRTL（Register Transfer Level）などの高位論理で記述されたネットリストに基づいてゲートネットリスト２４を出力する。フロアプラン（ステップ２６）は、ゲートネットリスト２４を使って、チップのレイアウト設計のフロアプラン２３を作成する。通常のLSI設計では、その後、電源配線（ステップ２７）、セルの配置（ステップ１１）、クロックツリー形成（ステップ１０）、最適化（ステップ２８）、配線（ステップ２９）の各ステップを順次実行してLSIチップの設計を完結する。
【０１０４】
本実施形態４では、配置・配線を行う以前の段階において、クロック見積り（ステップ２０）を実行し、クロックツリーによる消費電力と面積の見積もり値２１を算出する。クロック見積り（ステップ２０）は、図１に示したフローチャートと同様、または、図２に示したフローチャートからステップ１１を省略したフローと同様のフローによって実現される。
【０１０５】
フロアプラン２３により、クロックを供給すべき回路の形状と面積が与えられる。実施形態１で説明したのと同様に、これを包含するクロック供給対象領域３９を規定する。ゲートネットリスト２４により、クロック供給対象のリーフの数を求めることができる。これを適当な数のグループに分け、ローカルツリーを形成する（ステップ１２）。クロック供給対象領域３９を均等に分割しながら（ステップ１３）、上位のクロックツリーを形成する（ステップ１５）。クロック供給対象領域３９の面積は、フロアプラン２３により具体的な数値が与えられているので、分割された領域の面積も具体的な数値が与えられる。しかし、実際のセルの配置（ステップ１１）は実行される以前の段階であるから、各領域におけるローカルツリーの始点の数をカウントするステップ１６は、ローカルツリーがクロック供給対象領域３９に均等に分散していると仮定して算出する。これに基づいて、ファンアウト制約を満たすか否かの判断を行う（ステップ１７）。実際には遍在するローカルツリーの始点の数を、均等に分散しているものと仮定しているので、ファンアウト制約を緩和する方向の誤差が発生している。ステップ１７に与えるファンアウト制約は、実際のセル配置（ステップ１１）を経た後よりも厳しい値とすることにより、この誤差を補償または緩和することができる。上位クロックツリーの末端からローカルツリーの始点までのスキューの計算（ステップ１８）も、ローカルツリーの始点がクロック供給対象領域３９に均等に分散していると仮定して実行し、スキュー制約を満たすか否かを判定する（ステップ１９）。ファンアウト制約とスキュー制約を満足するまで、上位クロックツリーの段数を増やすステップを繰り返すループにより、最適な上位クロックツリーの段数を求めることができる。ステップ１２で形成したローカルツリーを形成するクロックバッファの数と、上位クロックツリーを構成するクロックバッファの数に基づいて、クロックツリーによる消費電力と面積を求める。
【０１０６】
これにより、配置・配線を行う以前の段階において、クロックツリーのプロトタイプを高速に作成し、クロックツリーによる消費電力と面積を見積もることができる。クロックツリーによる消費電力は、LSI全体の消費電力に占める割合が極めて高いので、この消費電力が要求仕様を満たさないときには、LSI全体として消費電力の仕様を満足できない可能性が高いことが推測できる。したがって、本実施形態のクロック見積りを行うことにより、仕様を満足できない可能性がある場合に、設計の早い段階でその可能性を知り、LSIの論理設計を見直すなどの対策をいち早く取ることができる。
【０１０７】
実施形態３で説明した、スキューライブラリ２２を、クロック見積り（ステップ２０）におけるステップ１８で利用することもできる。これにより、見積もりのための計算時間を短縮することができる。
【０１０８】
一方、ローカルツリーの形成（ステップ１２）に先立って、ゲートネットリストに基づいて、少なくともリーフを含むセルの配置を仮に実行することにより、分割された領域ごとのローカルツリーの始点の数を、より正確に見積もることができるので、クロックツリーによる消費電力もより正確に見積もることができる。
【０１０９】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【０１１０】
例えば、上位のクロックツリーを所謂H-treeで構成した例について説明したが、等長配線により負荷の等しいクロックバッファをツリー状に配置して構成することにより、原理的にスキューの発生を０に抑えることができるクロックツリーであれば、同様に実施することができる。クロックツリーがHの形状である必要はない。
【０１１１】
複数のクロック系統を備えるLSIにおいて、それぞれのクロック系に対して順次または同時並行で、上記実施の形態を適用してもよい。
【０１１２】
上記の各実施形態は、他のLSI設計法と組み合わせて使用することができ、他のLSI設計装置に組み込んで構成することができる。
【符号の説明】
【０１１３】
１０  クロックツリーの形成
１１  標準セルの配置
１２  ローカルツリーの形成
１３  クロック供給対象領域の分割
１４  クロックバッファの配置（等長・等負荷）
１５  上位クロックツリーの形成
１６  ローカルツリーの始点のカウント
１７  ファンアウト制約を満たすか否かの判断
１８  スキューの計算
１９  スキュー制約を満たすか否かの判断
２０  クロックツリーによる消費電力の見積もり
２１  クロックツリーによる消費電力（見積もり値）
２２  スキューライブラリ
２３  フロアプランデータ
２４  ゲートネットリスト
２５  論理合成
２６  フロアプラン
２７  電源配線
２８  クロックツリー形成後の最適化処理
２９  配線
３０  クロックツリー
３１  ＬＳＩチップ上のクロック供給点
３２  上位クロックツリー（H-tree）
３３  分割された領域
３４  ローカルツリー
３５  ローカルツリーの始点
３６  リーフ
３７  クロックバッファ
３９  クロック供給対象領域
【図１】
2014035667.tif 000003
【図２】
2014035667.tif 000004
【図３】
2014035667.tif 000005
【図４】
2014035667.tif 000006
【図５】
2014035667.tif 000007
【図６】
2014035667.tif 000008
【図７】
2014035667.tif 000009