(57)【要約】【課題】スイッチング時におけるセルによる消費電力を削減することができる半導体集積回路のレイアウト装置及びクロックゲーティング方法を提供すること。【解決手段】本発明にかかるレイアウト装置５１は、イネーブル信号生成処理部５５と、クロックゲーティング回路追加処理部５６とを備えている。イネーブル信号生成処理部５５は、第１の分岐点よりも後段に位置する第１のクロックゲーティング回路に入力される第１の制御信号と、第１の分岐点よりも後段に位置する同期回路の位置とに基づいて、第２のクロックゲーティング回路に入力する第２の制御信号を生成する。クロックゲーティング回路追加処理部５６は、第２の制御信号と、第２のクロックゲーティング回路よりも後段に位置する回路素子数と、に基づいて、第２のクロックゲーティング回路を配置する。【選択図】図１
2011107769.tif 000002
【特許請求の範囲】
【請求項１】
クロックツリー構造を有する論理回路において、複数の第１のクロックゲーティング回路が共通に接続された第１の分岐点の前段に第２のクロックゲーティング回路を挿入するか否かを決定するレイアウト装置であって、
前記複数の前記第１のクロックゲーティング回路に入力される複数の第１の制御信号と、前記第１の分岐点よりも後段に位置する同期回路の位置とに基づいて、前記第２のクロックゲーティング回路に入力する第２の制御信号を生成する制御信号生成手段と、
前記第２の制御信号と、前記第２のクロックゲーティング回路よりも後段に位置する回路素子数と、に基づいて、前記第２のクロックゲーティング回路を挿入するか否かを判定するクロックゲーティング回路追加手段と、
を備えるレイアウト装置。
【請求項２】
前記制御信号生成手段は、前記第１の分岐点よりも後段に位置する全ての前記第１のクロックゲーティング回路に入力される前記第１の制御信号の論理和と、前記第１の分岐点よりも後段に位置する前記同期回路の位置とに基づいて、前記第２のクロックゲーティング回路に入力する前記第２の制御信号を生成する請求項１に記載のレイアウト装置。
【請求項３】
前記制御信号生成手段は、前記第１の分岐点と前記第１の分岐点よりも後段に位置する前記同期回路とが、前記第１のクロックゲーティング回路を介さずに接続されている場合には、クロック信号を常に通過させる前記第２の制御信号を生成する請求項１または２に記載のレイアウト装置。
【請求項４】
前記クロックゲーティング回路追加手段は、前記第２のクロックゲーティング回路が前記第２の制御信号に応じて前記クロック信号を遮断する場合、かつ、前記回路素子数が所定の数を超えた場合に、前記第２のクロックゲーティング回路を挿入する請求項１〜３のいずれか一項に記載のレイアウト装置。
【請求項５】
前記クロックゲーティング回路追加手段は、前記第２の制御信号が前記第２のクロックゲーティング回路に入力される前記クロック信号を常に通過させる制御信号である場合には、前記第２のクロックゲーティング回路を配置しない請求項１〜４のいずれか一項に記載のレイアウト装置。
【請求項６】
前記クロックゲーティング回路追加手段は、前記第２の制御信号と、前記第１の分岐点の後段に位置する回路素子数に加えて、前記第１の分岐点よりも前段の回路素子の位置に基づいて、前記第２のクロックゲーティング回路を配置し、
前記第２のクロックゲーティング回路が前記クロック信号を遮断する場合、かつ、前記回路素子数が所定の数を超えた場合であって、
前記第１の分岐点と前記第１の分岐点から前段側に辿って最初に到達する第２の分岐点との間に第３のクロックゲーティング回路が配置されている場合は、前記第３のクロックゲーティング回路と前記第２のクロックゲーティング回路との間に回路素子を介さずに、当該第３のクロックゲーティング回路の後段に、前記第２のクロックゲーティング回路を配置し、
前記第１の分岐点と前記第２の分岐点との間に前記第３のクロックゲーティング回路が配置されていない場合は、前記第２の分岐点と前記第２のクロックゲーティング回路との間に前記回路素子を介さずに、前記第２の分岐点の後段に前記第２のクロックゲーティング回路を配置する請求項１〜３のいずれか一項に記載のレイアウト装置。
【請求項７】
前記クロックゲーティング回路追加手段は、前記第２の制御信号と、前記第２のクロックゲーティング回路の後段に位置する回路素子数に加えて、前記第１の分岐点よりも前段に位置する回路素子の位置に基づいて、前記第２のクロックゲーティング回路を配置し、
前記第２のクロックゲーティング回路が前記クロック信号を遮断する場合、かつ、前記回路素子数が所定の数を超えた場合であって、
前記第１の分岐点と前記第１の分岐点から前段側に辿って最初に到達する第２の分岐点との間に第３のクロックゲーティング回路が配置されており、かつ、当該第３のクロックゲーティング回路と前記第１の分岐点との間にバッファが配置されている場合、または、
前記第１の分岐点と前記第２の分岐点との間に前記第３のクロックゲーティング回路が配置されておらず、かつ、前記第１の分岐点と前記第２の分岐点との間にバッファが配置されている場合には、前記バッファに替えて当該バッファと同じ内部遅延を有する前記第２のクロックゲーティング回路を配置する請求項１〜３のいずれか一項に記載のレイアウト装置。
【請求項８】
前記クロックゲーティング回路追加手段が配置した前記第２のクロックゲーティング回路により生じるクロック信号の遅延を調整する遅延調整手段をさらに備える請求項１〜６のいずれか一項に記載のレイアウト装置。
【請求項９】
前記ツリー構造が有する全ての分岐点に対して、前記クロックゲーティング回路追加手段が、前記論理回路の後段から前段に向かって、前記第２のクロックゲーティング回路が配置可能か否かを判定するように、判定順序を決定する判定順序決定手段をさらに備える請求項１〜８のいずれか一項に記載のレイアウト装置。
【請求項１０】
前記クロックツリー構造を有する前記論理回路のレイアウトデータを読み込むレイアウトデータ入力手段をさらに備える請求項１〜９のいずれか一項に記載のレイアウト装置。
【請求項１１】
クロックツリー構造を有する論理回路において、複数の第１のクロックゲーティング回路が共通に接続された第１の分岐点に供給されるクロック信号の通過または遮断を制御するか否かを決定するクロックゲーティング方法であって、
前記複数の前記第１のクロックゲーティング回路に入力される複数の第１の制御信号と、前記第１の分岐点よりも後段に位置する同期回路の位置とに基づいて、前記クロック信号の通過または遮断を制御に用いられる第２の制御信号を生成し、
前記第２の制御信号と、前記クロック信号の通過または遮断を制御される回路素子数とに基づいて、前記第１の分岐点に供給される前記クロック信号の通過または遮断を制御するか否かを決定するクロックゲーティング方法。
【請求項１２】
前記第２の制御信号の生成は、前記第１の分岐点よりも後段に位置する全ての前記第１のクロックゲーティング回路に入力される前記第１の制御信号の論理和と、前記第１の分岐点よりも後段に位置する前記同期回路の位置とに基づいて、前記第２の制御信号を生成する請求項１１に記載のクロックゲーティング方法。
【請求項１３】
前記第２の制御信号の生成は、前記第１の分岐点と前記第１の分岐点よりも後段に位置する前記同期回路とが、前記第１のクロックゲーティング回路を介さずに接続されている場合には、前記クロック信号を常に通過させる前記第２の制御信号を生成する請求項１１または１２に記載のクロックゲーティング方法。
【請求項１４】
前記クロック信号の通過または遮断の制御は、前記クロックゲーティング回路追加手段は、前記第２のクロックゲーティング回路が前記第２の制御信号に応じて前記クロック信号を遮断する場合、かつ、前記回路素子数が所定の数を超えた場合に、前記クロック信号の通過または遮断を制御する請求項１１〜１３のいずれか一項に記載のクロックゲーティング方法。
【請求項１５】
前記クロック信号の通過または遮断の制御は、前記第２の制御信号が前記クロック信号を常に通過させる制御信号である場合には、前記クロック信号の通過または遮断を制御しない請求項１１〜１４のいずれか一項に記載のクロックゲーティング方法。
【請求項１６】
前記クロック信号の通過または遮断の制御は、前記第２の制御信号と、前記第１の分岐点の後段に位置する前記回路素子数に加えて、前記第１の分岐点よりも前段の回路素子の位置に基づいて、前記クロック信号の通過または遮断を制御し、
前記第２の制御信号に応じて前記クロック信号を遮断する場合、かつ、前記回路素子数が所定の数を超えた場合であって、
前記第１の分岐点と前記第１の分岐点から前段側に辿って最初に到達する第２の分岐点との間に第３のクロックゲーティング回路が配置されている場合は、前記第３のクロックゲーティング回路の出力直後の前記クロック信号の通過または遮断を制御し、
前記第１の分岐点と前記第２の分岐点との間に前記第３のクロックゲーティング回路が配置されていない場合は、前記第２の分岐点の直後の前記クロック信号の通過または遮断を制御する請求項１１〜１３に記載のクロックゲーティング方法。
【請求項１７】
前記クロック信号の通過または遮断の制御は、前記第２の制御信号と、前記第１の分岐点の後段に位置する前記回路素子数とに加えて、前記第１の分岐点よりも前段の回路素子の位置に基づいて、前記クロック信号の通過または遮断を制御し、
前記第２の制御信号に応じて前記クロック信号を遮断する場合、かつ、前記回路素子数が所定の数を超えた場合であって、
前記第１の分岐点と前記第１の分岐点から前段側に辿って最初に到達する第２の分岐点との間に第３のクロックゲーティング回路が配置されており、かつ、当該第３のクロックゲーティング回路と前記第１の分岐点との間に前記回路素子が配置されている場合、または、
前記第１の分岐点と前記第２の分岐点との間に前記第３のクロックゲーティング回路が配置されておらず、かつ、前記第１の分岐点と前記第２の分岐点との間に前記回路素子が配置されている場合には、前記回路素子を取り除き、当該回路素子に供給されていた前記クロック信号を、当該回路素子が有する内部遅延と同じ遅延時間をかけて通過または遮断を制御する請求項１１〜１３のいずれか一項に記載のクロックゲーティング方法。
【請求項１８】
前記クロックゲーティング方法は、さらに前記クロック信号の通過または遮断の制御により生じる前記クロック信号の遅延を調整する請求項１１〜１６のいずれか一項に記載のクロックゲーティング方法。
【請求項１９】
前記クロックゲーティング方法は、さらに前記ツリー構造が有する全ての分岐点に対して、前記論理回路の後段から前段に向かって、前記クロック信号の通過または遮断の制御が可能か否かを判定するように、判定順序を生成する請求項１１〜１８に記載のクロックゲーティング方法。
【請求項２０】
前記クロックゲーティング方法は、さらに前記クロックゲーティング回路を含む前記ツリー構造を有する論理回路のレイアウトデータを読み込む請求項１１〜１９に記載のクロックゲーティング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は半導体集積回路のレイアウト装置及びクロックゲーティング方法に関し、特にクロックゲーティング回路を有する半導体集積回路のレイアウト装置及びクロックゲーティング方法に関する。
【背景技術】
【０００２】
論理回路設計分野において、クロックライン以外の他のロジック部や同期回路における消費電力が問題とされてきた。さらに、半導体プロセスの微細化により論理回路の高集積化および高速化が進んでおり、論理回路での消費電力がますます大きくなってきた。
【０００３】
そのため、近年、クロックゲーティング回路（以降、ＩＣＧと呼ぶ）を用いることで、論理回路ブロックにおけるパワーマネージメントがなされてきたが、論理回路の規模増大と高速化によってそれらＩＣＧがスタンバイ状態時における、クロックのルートからＩＣＧまでの、クロックツリーを構成するセルによる消費電力が無視できなくなってきた。
【０００４】
図２０は、特許文献１に記載された自動配置配線工程を実施するレイアウト装置の構成例を示す機能ブロック図である。図１９において、レイアウト装置１は、デザインルール、ライブラリ、ＲＴＬ／ネットリスト、タイミング制約等の情報を読み込む情報読込部２と、読み込んだ情報に基づいてフロアプランを実施するフロアプラン実施部３と、回路部分の配置、クロックツリー構築（ＣＴＳ：Clock Tree Synthesis）、配置の最適化を行う配置・ＣＴＳ・最適化部４と、ＤＦＴ（Design For Testability）のために挿入されるＬＯＣＫＵＰセルの削除もしくは挿入を行うＬＯＣＫＵＰセル削除／挿入部５と、タイミングの最適化を行うタイミング最適化部６と、信号配線を行う信号配線部７とを備えている。
【０００５】
また、配置・ＣＴＳ・最適化部４は、クロックラインの認識を行うクロックライン認識部４１と、クロックラインに挿入されたＩＣＧの認識を行うクロックゲーティング回路認識部４２と、ＩＣＧをいったん削除するクロックゲーティング回路削除部４３と、ＩＣＧ以外の回路部分の配置・最適化を行う他回路配置・最適化部４４と、ＩＣＧをまとめ、あるいは分割するクロックゲーティング回路まとめ／分割部４５と、いったん削除したＩＣＧを配置してクロックツリー構築を行うクロックゲーティング回路配置／ＣＴＳ実施部４６とを備えている。
【０００６】
図１８は自動配置配線の処理例を示すフローチャートである。図１８において、まず、デザインルール、ライブラリ、ＲＴＬもしくはネットリスト、タイミング制約を読み込む（ステップＳ４０１、Ｓ４０２）。次に、フロアプランを実施し、Ｉ／Ｏ（Input/Output）位置、チップサイズ、ハードマクロの配置位置を決定する（ステップＳ４０３）。次に、作成する回路内のクロックラインを認識する（ステップＳ４０４）。ここで、クロックラインは、既に読み込んだタイミング制約を元に認識してもよいし、同期回路（フリップフロップ、ラッチ等） のクロックラインよりトレースして認識してもよい。
【０００７】
次に、認識したクロックラインにＩＣＧに相当する組み合わせ回路が存在しているかどうかをチェックする（ステップＳ４０５）。ここで、組み合わせ回路がＩＣＧであるか否かの判断は、その回路の後段にクロック信号が無条件に伝わるか、イネーブル信号等によって停止されるかによって判断する。なお、ＩＣＧのようなマクロ化されたセルにあっては、セル名から判断することもできる。
【０００８】
そして、ＩＣＧが存在せず、直接に同期回路のクロック入力へのみクロックが到達している場合には、配置・ＣＴＳ ・最適化を実施する（ステップＳ４０６）。クロックラインにＩＣＧが存在している場合、そのＩＣＧを初期配置対象から除外する（ステップＳ４０７）。これは、クロックラインに挿入されたＩＣＧは、通常のレイアウト時にはタイミング制約の効かない箇所であり、タイミング制約が効かないセルに関してはそのセルの接続情報を元にセル配置が実行されてしまい、同期回路に引き寄せられてしまってクロックラインの消費電力を最適に考慮したレイアウトとならない場合があるからである。
【０００９】
次に、クロックラインのＩＣＧ以外のセルを配置する（ステップＳ４０８）。クロックラインのＩＣＧを初期配置させないことにより、本来タイミング調整が必要なセルに対して最適な配置結果を得ることが可能となる。なお、このステージでクロックツリー構築を行う前のオプティマイズ（最適化）も実行する。
【００１０】
次に、クロックラインのＩＣＧのまとめもしくは分割を行う（ステップＳ４０９）。すなわち、同期回路の配置を認識し、クロックスキューが調整可能であれば、複数のＩＣＧを一つにまとめる。なお、まとめることができるＩＣＧは、同じクロックに基づくものであり、同一条件でクロック供給・停止がされることが前提となる。ＩＣＧをまとめることで、消費電力および配置エリアを削減することができる。また、同期回路の配置を認識し、クロックスキューが調整不可能であれば、一つのＩＣＧを複数に分割する。いずれの場合も、レイアウト時において同期回路の配置後であってクロックツリー構築前に、同期回路の配置を考慮してＩＣＧをまとめる、または分割する点がポイントである。
【００１１】
すなわち、レイアウト前のネットリストにてＩＣＧをまとめることは既存技術にも存在するが、同期回路の配置が考慮できないため、クロック調整に手間取ることが考えられる。しかし、このようにクロックツリー構築前にまとめることでそのような問題がなくなる。また、ＩＣＧを配置してしまった後にまとめたり分割したりする場合、一旦配置してしまっているため調整は難しいが、このようにＩＣＧを配置する前に行うものであるため、そのような問題がない。
【００１２】
次に、クロックラインのＩＣＧの配置およびクロックツリー構築を、低消費電力化を考慮した上でクロックスキューを調整しつつ実施する（ステップＳ４１０）。
【００１３】
図１９はクロックツリーを構築した状態の配置の例を示す図である。クロックのルートのバッファ１１０に近い位置にＩＣＧ１１７、１１８を配置し、既に最適位置に配置したフリップフロップ１１１〜１１６との間にクロックツリーのバッファ１１９〜１２４を配置する。ＩＣＧをクロックルートに近い初段に配置してやることにより、その手前にクロックツリーを構築する必要はなくなり、クロックツリーを構成するセルによる消費電力を削減することができる。
【００１４】
次に、図１８に戻り、ＬＯＣＫＵＰセルの処理を行う（ステップＳ４１１〜Ｓ４１４）。ＬＯＣＫＵＰセルは前述したようにＤＦＴのために挿入されるものであり、異なるクロックラインに存在するフリップフロップ等の同期回路のスキャンチェーンの間に、スキュー調整のために挿入されるものである。
【００１５】
図１８においては、異なるクロックラインにおけるクロックスキューが十分であるか否かチェックし（ステップＳ４１１）、十分である場合には、続いてＬＯＣＫＵＰセルが挿入されているか否かチェックし（ステップＳ４１２）、挿入されている場合にはそのＬＯＣＫＵＰセルを削除する（ステップＳ４１３）。また、異なるクロックラインにおけるクロックスキューが十分でない場合は、ＬＯＣＫＵＰセルの挿入を行う（ステップＳ４１４）。
【００１６】
このように、自動配置配線時にクロックツリーを実施した後、ＬＯＣＫＵＰセルについて最適な処理が行われる。次に、クロックツリー構築後のタイミング最適化を実施し（ステップＳ４１５）、信号配線を実施し（ステップＳ４１６）、レイアウト完了となる。
【００１７】
一方、特許文献２には、クロックゲート論理と論理階層の組換えを行い、クロックゲーティング回路を配置することで、クロックゲーティング回路及びバッファの個数を削減する技術が開示されている。また、特許文献３には、複数のゲーテッドクロックが存在するときに、そのクロック同士をＯＲしたクロックを供給する技術が開示されており、特許文献４には、階層的にゲーテッドクロックを設けた回路が開示されている。
【先行技術文献】
【特許文献】
【００１８】
【特許文献１】特開２００７−７２９９５号公報
【特許文献２】特開２００７−１６４５９０号公報
【特許文献３】特開２００６−１５５５３３号公報
【特許文献４】特開２００７−３００２９０号公報
【発明の概要】
【発明が解決しようとする課題】
【００１９】
特許文献１に記載の技術では、図１８のステップＳ４１０にて、ＩＣＧをクロックルートに近い初段に配置する。しかし、複数のＩＣＧが存在した場合、クロックのルートのバッファからＩＣＧまでの配線容量が増大し、ＩＣＧの数だけクロックが接続される入力端子の容量が増えるため、クロックのルートのバッファのスイッチング電力が大きくなる。さらに、クロックの電力制御を細かくするほどＩＣＧの数が増大するため、単一のクロックのルートのバッファでは駆動しきれない負荷となった場合には、クロックのルートからＩＣＧまでの間の負荷を適切に分割するためのセルが挿入され、さらに電力消費の増大を招くという問題があった。
【００２０】
また、特許文献２に記載の技術では、同一のイネーブル信号により制御される論理階層に対しては効果があるが、異なるイネーブル信号により制御される論理階層に対しては効果が発揮できないという問題点があった。
【課題を解決するための手段】
【００２１】
本発明にかかるレイアウト装置は、クロックツリー構造を有する論理回路において、複数の第１のクロックゲーティング回路が共通に接続された第１の分岐点の前段に第２のクロックゲーティング回路を挿入するか否かを決定するレイアウト装置であって、前記複数の前記第１のクロックゲーティング回路に入力される複数の第１の制御信号と、前記第１の分岐点よりも後段に位置する同期回路の位置とに基づいて、前記第２のクロックゲーティング回路に入力する第２の制御信号を生成する制御信号生成手段と、前記第２の制御信号と、前記第２のクロックゲーティング回路よりも後段に位置する回路素子数と、に基づいて、前記第２のクロックゲーティング回路を挿入するか否かを判定するクロックゲーティング回路追加手段と、を備えるものである。このような構成によって、スイッチング時において、動作の必要がないセルにはクロック信号が供給されないため、消費電力の削減を図った半導体集積回路のレイアウトを行うことができる。
【００２２】
本発明にかかるクロックゲーティング方法は、クロックツリー構造を有する論理回路において、複数の第１のクロックゲーティング回路が共通に接続された第１の分岐点に供給されるクロック信号の通過または遮断を制御するか否かを決定するクロックゲーティング方法であって、前記複数の前記第１のクロックゲーティング回路に入力される複数の第１の制御信号と、前記第１の分岐点よりも後段に位置する同期回路の位置とに基づいて、前記クロック信号の通過または遮断を制御に用いられる第２の制御信号を生成し、前記第２の制御信号と、前記クロック信号の通過または遮断を制御される回路素子数とに基づいて、前記第１の分岐点に供給される前記クロック信号の通過または遮断を制御するか否かを決定するものである。これにより、消費電力を削減するクロックゲーティングを行うことができる。
【発明の効果】
【００２３】
本発明により、スイッチング時におけるセルによる消費電力を削減することができる半導体集積回路のレイアウト装置及びクロックゲーティング方法を提供することができる。
【図面の簡単な説明】
【００２４】
【図１】実施の形態１にかかるレイアウト装置のブロック図である。
【図２】実施の形態１にかかるレイアウト装置の動作を示すフローチャートである。
【図３】実施の形態１にかかるブランチ順序生成処理のフローチャートである。
【図４】実施の形態１にかかるイネーブル信号生成処理のフローチャートである。
【図５】実施の形態１にかかるイネーブル信号生成処理の説明のための図である。
【図６】実施の形態１にかかるイネーブル信号生成処理の説明のための図である。
【図７】実施の形態１にかかるイネーブル信号生成処理の説明のための図である。
【図８】実施の形態１にかかるクロックゲーティング回路追加処理のフローチャートである。
【図９】実施の形態１にかかるクロックゲーティング回路追加処理の説明のための図である。
【図１０】実施の形態１にかかるクロックゲーティング回路追加処理の説明のための図である。
【図１１】実施の形態１にかかるクロックゲーティング回路追加処理の説明のための図である。
【図１２】実施の形態１にかかるクロックゲーティング回路追加処理の説明のための図である。
【図１３】実施の形態１にかかるクロックツリーを示す回路図である。
【図１４】関連する回路にかかるバッファ及び既存のＩＣＧの出力波形を示すタイミングチャートである。
【図１５】実施の形態１にかかるバッファ及び既存のＩＣＧの出力波形を示すタイミングチャートである。
【図１６】実施の形態２にかかるクロックゲーティング回路追加処理のフローチャートである。
【図１７】実施の形態３にかかるクロックゲーティング回路追加処理のフローチャートである。
【図１８】関連するレイアウト装置の制御フローチャートである。
【図１９】関連するクロックツリーを示す回路図である。
【図２０】関連するレイアウト装置のブロック図である。
【発明を実施するための形態】
【００２５】
実施の形態１
以下、図面を参照して本発明の実施の形態について説明する。図１に示したレイアウト装置５１は、図２０に示したレイアウト装置の構成に加えて、さらにレイアウトデータ入力部５３、ブランチ順序生成処理部５４、信号生成・回路追加処理部５８、レイアウトデータ出力部５７を備えている。また、信号生成・回路追加処理部５８は、イネーブル信号生成処理部５５とクロックゲーティング回路追加処理部５６を有している。なお、図２０と同じ構成については同様の動作をするので、説明を省略する。
【００２６】
レイアウトデータ入力部５３は、ゲーテッドクロックツリーを含んだレイアウトデータを読み込む。ブランチ順序生成処理部５４でクロックツリーの分岐点（以降、ブランチと呼ぶ）をボトムアップに辿る順序を生成する。
【００２７】
信号生成・回路追加処理部５８は、ブランチ順序生成処理部５４で生成されたブランチ順序に基づいて、それぞれのブランチに対して追加するＩＣＧのイネーブル信号の生成およびＩＣＧの追加を行う。追加するＩＣＧのイネーブル信号生成をイネーブル信号生成処理部５５（制御信号生成手段）にて行い、ＩＣＧの追加をクロックゲーティング回路追加処理部５６にて行う。レイアウトデータ出力部５７は、ＩＣＧ追加後のレイアウトデータを出力する。
【００２８】
つまり、本発明は、既に設計された半導体集積回路のレイアウトデータについて、さらに消費電力を削減できるように新たなクロックゲーティング回路を追加するものである。そのため、図１に示した情報読込部２のデザインルール、ライブラリ、ＲＴＬ／ネットリスト、タイミング制約等の情報を読み込みから信号配線部７の信号配線までの処理を再度行うことなく、当該半導体集積回路の消費電力の削減を図ることができる。
【００２９】
続いて、図２を用いて、実施の形態１にかかるレイアウト装置の動作例について説明する。まず、動作が開始するとレイアウトデータ入力部５３は、ブランチ順序を格納するため空のスタックｓｔ１を準備する（ステップＳ３００）。なお、レイアウトデータ入力以前の動作は、図１８の説明と同様なので説明を省略する。
【００３０】
次に、レイアウト装置５１が、信号配線部から得たゲーテッドクロックツリーを含んだレイアウトデータを、レイアウトデータ入力部５３から入力する（ステップＳ３０１）。
【００３１】
すると、ブランチ順序生成処理部５４（判定順序決定手段）は、クロックツリーの末端に存在するフリップフロップやラッチなどのクロックを使用する同期回路（以降、リーフと呼ぶ）の側からクロックのルート側に向かってブランチを辿り、クロックゲーティング回路追加処理部５６がＩＣＧを追加していくために、ブランチ順序生成処理を行う（ステップＳ３０２）。前記ブランチ順序生成処理により、ブランチを辿る順序（以降、ブランチデータと呼ぶ）を構成し、当該順序をスタックｓｔ１に格納する。
【００３２】
ブランチデータがスタックｓｔ１に格納されると、信号生成・回路追加処理部５８は、スタックｓｔ１に格納された前記ブランチデータが空になるまでループ処理を行う（ステップＳ３０３〜ステップＳ３０７）。
【００３３】
ループの先頭においてスタックｓｔ１が空かを判断し、スタックｓｔ１が空の場合はループを終了する（ステップＳ３０３、Ｓ３０７）。
【００３４】
スタックｓｔ１が空でない場合は、スタックｓｔ１から先頭の１つのブランチを取り出し（以降、ｐｏｐと呼ぶ）、前記取り出したデータ（以降、処理対象ブランチと呼ぶ）を、変数ｂｒａｎｃｈに格納する（ステップＳ３０４）。
【００３５】
次に、信号生成・回路追加処理部５８のイネーブル信号生成処理部５５において、変数ｂｒａｎｃｈに対しイネーブル信号生成処理を行う（ステップＳ３０５）。そして、信号生成・回路追加処理部５８のクロックゲーティング回路追加処理部５６において、クロックゲーティング回路追加処理を行う（ステップＳ３０６）。前記ループ処理が終了したら、信号生成・回路追加処理部５８のレイアウトデータ出力部５７において、レイアウトデータを出力（ステップＳ３０８）し、処理を終了する。
【００３６】
続いて、図３を用いて、ブランチ順序生成処理部５４の動作（ステップＳ３０２）について詳細に説明する。まず、ブランチ順序生成処理部５４が、スタックｓｔ１とは別に空のスタックｓｔ０を準備する（ステップＳ５００）。スタックｓｔ０には一時的にブランチが格納される。
【００３７】
次に、クロックのルートに位置するブランチをスタックｓｔ０、ｓｔ１の両方の先頭に格納（以降、ｐｕｓｈと呼ぶ）する（ステップＳ５０１）。そして、スタックｓｔ０が空かどうかの判定を行い（ステップＳ５０２）、空であれば処理を終了する。
【００３８】
一方、スタックｓｔ０が空でない場合、スタックｓｔ０に対してｐｏｐを行い、変数ｔｅｍｐ＿ｂｒに一つのブランチを取り出す（ステップＳ５０３）。次に、変数ｔｅｍｐ＿ｂｒのリーフ側の隣のブランチ（以降、子ブランチと呼ぶ）を全て配列ｃｈｉｌｄｒｅｎに格納する（ステップＳ５０４）。そして、配列ｃｈｉｌｄｒｅｎが空かどうかの判定を行い（ステップＳ５０５）、空であればスタックｓｔ０が空かどうかの判定（ステップＳ５０２）に戻る。
【００３９】
一方、配列ｃｈｉｌｄｒｅｎが空でなければ、スタックｓｔ０、ｓｔ１の両方に配列ｃｈｉｌｄｒｅｎに含まれる全ての子ブランチをｐｕｓｈする（ステップＳ５０６）。以上の処理により、スタックｓｔ１には辿る順番にブランチが格納される。
【００４０】
続いて、イネーブル信号生成処理部５５の動作（ステップＳ３０５）について説明する。イネーブル信号生成処理部５５は、処理対象ブランチ（第１の分岐点に対応）よりもリーフ側（ツリー構造の後段側）に既に配置された複数のＩＣＧ（第１のクロックゲーティング回路）にそれぞれ入力される複数のイネーブル信号（第１の制御信号）と、処理対象ブランチよりもリーフ側に配置された同期回路の位置とに基づいて、新たに挿入するＩＣＧ（第２のクロックゲーティング回路）に入力するイネーブル信号（第２の制御信号）を生成する。
【００４１】
図４を用いて、イネーブル信号生成処理部５５の動作（ステップＳ３０５）について詳細に説明する。まず、イネーブル信号生成処理部５５において、レイアウト装置５１がステップＳ３０４によってブランチデータから得た処理対象ブランチを、変数ｂｒａｎｃｈに格納し、それを信号生成・回路追加処理部５８が受け取る。そして、イネーブル信号生成処理部５５が変数ｂｒａｎｃｈを信号生成・回路追加処理部５８から受け取ることによって、処理対象ブランチを格納した変数ｂｒａｎｃｈを用意する（ステップＳ６００）。
【００４２】
イネーブル信号生成処理部５５は、変数ｂｒａｎｃｈの全ての子ブランチおよび変数ｂｒａｎｃｈに接続するリーフに対して、ループ（ステップＳ６０１〜ステップＳ６１０）内の処理を行う。
【００４３】
ここでは、変数ｂｒａｎｃｈの全ての子ブランチ及び変数ｂｒａｎｃｈに接続するリーフに一時的な固有の変数ｔｅｍｐ，  変数ｔｅｍｐ＿ｃｌを用意する。変数ｔｅｍｐは、新たに追加するＩＣＧのイネーブル信号を生成するために使われる。ｔｅｍｐ＿ｃｌは、新たにＩＣＧが追加された場合にクロックゲーティングされるセルの個数を算出するために使われる。ループ内の処理では、変数ｂｒａｎｃｈから子ブランチもしくはリーフまでの間にＩＣＧがあるかどうかを判定する（ステップＳ６０２）。
【００４４】
ＩＣＧがある場合、ＩＣＧのイネーブル信号ＣＥＮを変数ｔｅｍｐに格納する（ステップＳ６０６）。変数ｂｒａｎｃｈからそのＩＣＧまでの間にあるバッファ、インバータなどのセル数＋１を変数ｔｅｍｐ＿ｃｌに格納する（ステップＳ６０９）。ここで"＋１"は、ＩＣＧの分である。
【００４５】
一方、ＩＣＧがなかった場合、現在処理している対象が子ブランチなのかリーフなのかを判定する（ステップＳ６０３）。リーフであった場合、リーフ固有の変数ｔｅｍｐに"１"を格納する（ステップＳ６０５）。また、イネーブル信号生成処理部５５は、（変数ｂｒａｎｃｈからそのリーフまでの間にあるセル数）＋１を変数ｔｅｍｐ＿ｃｌに格納する（ステップＳ６０８）。ここで、変数ｂｒａｎｃｈにＩＣＧを介さずにリーフが接続している場合、新たなＩＣＧの追加により接続しているリーフをクロックゲーティングすることになり、当該ＩＣＧは常にクロック信号を通過させるため有効ではない。変数ｔｅｍｐに"１"を格納しているのは、後のクロックゲーティング回路追加処理で新たなＩＣＧを追加するかどうかを判定できるようにするためである。
【００４６】
現在処理している対象が子ブランチであった場合、変数ｔｅｍｐに子ブランチが持つクロックゲーティングイネーブル論理が格納されている変数ＳＩＧの内容が格納される（ステップＳ６０４）。ブランチデータは、クロックツリーをボトムアップに辿るブランチの順序であるため、リーフに近いブランチからイネーブル信号生成処理（ステップＳ３０５）が実行される。ステップＳ６０４は、変数ｂｒａｎｃｈの子ブランチに対してのみ行われる処理であり、変数ｂｒａｎｃｈの子ブランチは既にイネーブル信号生成処理（ステップＳ３０５）が行われたものであるため、ステップＳ６０４の実行においては変数ｂｒａｎｃｈの子ブランチが持つ変数ＳＩＧに、必ずクロックゲーティングイネーブル論理が格納されている。
【００４７】
ここで、変数ＣＥＬは、子ブランチにＩＣＧが設けられることによりクロックゲーティングされるセルの個数が格納される変数であり、（子ブランチが持つ変数ＣＥＬ）＋（変数ｂｒａｎｃｈから子ブランチまでのセル数）が、変数ｔｅｍｐ＿ｃｌに格納される（ステップＳ６０７）。変数ＣＥＬも変数ＳＩＧ同様に、変数ｂｒａｎｃｈの子ブランチの変数ＣＥＬには、必ずセル個数が保持されている。
【００４８】
イネーブル信号生成処理部５５は、変数ｂｒａｎｃｈに格納されている処理対象ブランチが持つ変数ＳＩＧに、変数ｂｒａｎｃｈの全ての子ブランチおよび変数ｂｒａｎｃｈに接続するリーフが持つ変数ｔｅｍｐのＯＲを取ったものを格納する（ステップＳ６１１）。
【００４９】
すなわち、イネーブル信号生成処理部５５は、処理対象ブランチよりもリーフ側に位置する全てのＩＣＧに入力されるイネーブル信号の論理和と、リーフの位置（つまり、変数ｂｒａｎｃｈとリーフが接続されているか否か）とに基づいて、新たに挿入されるＩＣＧに入力するイネーブル信号を生成する。
【００５０】
イネーブル信号生成処理部５５は、変数ｂｒａｎｃｈに格納されている処理対象ブランチが持つ変数ＣＥＬに、変数ｂｒａｎｃｈの全ての子ブランチおよび変数ｂｒａｎｃｈに接続するリーフが持つ変数ｔｅｍｐ＿ｃｌの総和を格納する（ステップＳ６１２）。
【００５１】
イネーブル信号生成処理部５５は、変数ｂｒａｎｃｈに格納されている処理対象ブランチに変数ＳＩＧおよび変数ＣＥＬを保存して処理を終了する（ステップＳ６１３）。
【００５２】
このとき、変数ｂｒａｎｃｈに格納されている処理対象ブランチに保存している変数ＳＩＧは、新たに追加されるＩＣＧのイネーブル信号となり、変数ＣＥＬは新たに追加されるＩＣＧによりゲーティングされる。つまり、クロック信号の通過または遮断の制御が行われる（変数ｂｒａｎｃｈよりもリーフ側の）セル数を表している。
【００５３】
ここで、図４に示したフローチャートのループ（ステップＳ６０１〜ステップＳ６１０）内のそれぞれの処理について、回路例を用いて説明する。図５は、変数ｂｒａｎｃｈに格納されている処理対象ブランチと子ブランチの間にＩＣＧがある場合のクロックツリーの一部を示す回路図であり、変数ｂｒａｎｃｈから子ブランチもしくはリーフまでの間にＩＣＧがある場合（ステップＳ６０２の"Ｙｅｓ"）の例を示す図である。
【００５４】
図５に示した回路図は、処理対象ブランチ２０１と子ブランチ２０５の間にＩＣＧ２０３が存在している回路になっており、子ブランチに固有の一時的な変数ｔｅｍｐにはＩＣＧ２０３のイネーブル信号ＣＥＮが格納され、子ブランチに固有の一時的な変数ｔｅｍｐ＿ｃｌには処理対象ブランチ２０１とＩＣＧ２０３の間にあるバッファの個数が格納され、図５ではバッファ２０２のみが存在するため、１＋１＝２が格納される。
【００５５】
次に、変数ｂｒａｎｃｈに格納されている処理対象ブランチとリーフの間にブランチおよびＩＣＧがない場合のクロックツリーの一部を示す回路図であり、変数ｂｒａｎｃｈから他のブランチを経由せずにリーフに接続している場合（ステップＳ６０３の"Ｙｅｓ"）の例を図６に示す。
【００５６】
図６に示した回路図は、処理対象ブランチ２０６とリーフ２０８の間にＩＣＧ存在していない回路であり、リーフに固有の一時的な変数ｔｅｍｐには"１"が格納され、リーフに固有の一時的な変数ｔｅｍｐ＿ｃｌには処理対象ブランチ２０６とリーフ２０８の間にあるバッファの個数が格納され、図６ではバッファ２０７のみであるため、１＋１＝２が格納される。
【００５７】
さらに、図７は、変数ｂｒａｎｃｈに格納されている処理対象ブランチと子ブランチの間にＩＣＧが無い場合のクロックツリーの一部を示す回路図であり、変数ｂｒａｎｃｈが子ブランチに接続している場合（ステップＳ６０３の"Ｎｏ"）の例を示す図である。
【００５８】
図７に示した回路図は、処理対象ブランチ２０９と子ブランチ２１２の間にＩＣＧが存在していない回路であり、子ブランチに固有の一時的な変数ｔｅｍｐには、子ブランチ２１２が持つ変数ＳＩＧの内容が格納され、子ブランチに固有の一時的な変数ｔｅｍｐ＿ｃｌには子ブランチ２１２が持つ変数ＣＥＬの値＋処理対象ブランチ２０９から子ブランチ２１２までのセル数であるバッファ２１０とバッファ２１１が格納され、２が格納される。
【００５９】
続いて、クロックゲーティング回路追加処理部５６の動作（ステップＳ３０６）について説明する。クロックゲーティング回路追加処理部５６は、イネーブル信号生成処理部５５が生成したイネーブル信号と、新たに挿入されるＩＣＧの後段に位置するセル数（つまり、新たに挿入されるＩＣＧによってクロック信号の通過または遮断を制御されるセル数）と、に基づいて、処理対象ブランチのルート側（ツリー構造の前段側）に新たなＩＣＧ挿入するか否かを判定する。図８は、クロックゲーティング回路追加処理（ステップＳ３０６）の詳細なフローチャートであり、クロックゲーティング回路が追加可能かどうかを判定し、可能な場合に適切な位置に追加挿入するための詳細な処理である。
【００６０】
まず、クロックゲーティング回路追加処理部５６が、イネーブル信号生成処理部５５より変数ｂｒａｎｃｈを受け取ることによって、処理対象ブランチを格納した変数ｂｒａｎｃｈを用意し、変数ｂｒａｎｃｈに格納されている処理対象ブランチ固有の変数ＣＥＬおよび変数ＳＩＧと合わせて、変数ＴＨを準備する（ステップＳ７００）。変数ＴＨは予め設定しておく閾値であり、新たなＩＣＧを追加するか否かを判断するときに、新たなＩＣＧ追加によりクロックゲーティングされるセルの総数との比較を行う。クロックゲーティングされるセルの総数が、変数ＴＨの値を超えた場合にのみ、新たなＩＣＧが追加される。
【００６１】
次に、変数ＳＩＧが"１"か否かを判定する（ステップＳ７０１）。つまり、ステップＳ７０１においては、新たに挿入されるＩＣＧがイネーブル信号に応じてクロック信号を遮断するか否かを判定する。変数ＳＩＧが"１"の場合は、新たなＩＣＧを追加するとリーフをクロックゲーティングすることになり、ＩＣＧ追加したとしても常にクロックを通すことになるため、ＩＣＧの追加が不可能と判断し、ＩＣＧを追加することなく、処理を終了する。
【００６２】
一方、変数ＳＩＧが"１"でない場合（新たに挿入されるＩＣＧが入力されたクロック信号を遮断する場合）には、変数ｂｒａｎｃｈからルート側に辿り、最初に到達するブランチ（以降、親ブランチと呼ぶ）もしくはクロックのルートもしくはＩＣＧに到達するまでセル数をカウントした値と変数ＣＥＬの値を加算したものを、新たなＩＣＧを追加した場合にクロックゲーティングされるセルの総数を表している変数ｗｈｏｌｅ＿ｃｌに格納する（ステップＳ７０２）。
【００６３】
そして、変数ｗｈｏｌｅ＿ｃｌが閾値である変数ＴＨ以下の場合には、ＩＣＧを追加するに値するほどの、新たにクロックゲーティングされるセル数がないと判断し、ＩＣＧの追加は行わず終了する（ステップＳ７０３）。
【００６４】
ステップＳ７０３においてＩＣＧの追加を行うと判断した場合には、変数ｂｒａｎｃｈから親ブランチ（第２の分岐点）もしくはクロックのルートまでの間に、既にＩＣＧ（第３のクロックゲーティング回路）が存在しているかどうかを判定する（ステップＳ７０４）。既にＩＣＧが存在している場合には、ＩＣＧのリーフ側に新たなＩＣＧを挿入し（ステップＳ７０６）、追加したＩＣＧのイネーブル入力の変数ＣＥＮに変数ＳＩＧが表す信号を接続する（ステップＳ７０７）。
【００６５】
一方、ステップＳ７０４において変数ｂｒａｎｃｈから親ブランチもしくはクロックのルートまでの間にＩＣＧが存在していない場合、親ブランチのリーフ側に、新たなＩＣＧを挿入する（ステップＳ７０５）。そして、追加したＩＣＧのイネーブル入力の変数ＣＥＮに変数ＳＩＧが表す信号を接続する（ステップＳ７０７）。
【００６６】
ここで、クロックゲーティング回路追加処理部５６の動作において、親ブランチと処理対象ブランチとの間にＩＣＧがある場合とない場合における動作について回路例を示して説明する。図９および図１０は、親ブランチと変数ｂｒａｎｃｈに格納されている処理対象ブランチの間にＩＣＧがある場合のクロックツリーの一部示す回路図であり、親ブランチと変数ｂｒａｎｃｈの間にＩＣＧがある場合（ステップＳ７０４の"Ｙｅｓ"）の例を示す図である。
【００６７】
図９は、新たなＩＣＧが追加される前のクロックツリーの一部を表しており、処理対象ブランチ３０３と親ブランチ３００の間にステップＳ７０４で発見した既存のＩＣＧ３０１が存在する。したがって、クロックゲーティング回路追加処理部５６は、ＩＣＧの出力直後に新たなＩＣＧを挿入する（ステップＳ７０６）。
【００６８】
図１０は、新たなＩＣＧ追加後を表している。上述した動作の通り、ＩＣＧ３１１は既存のＩＣＧ３０１のリーフ側にバッファを介さず追加され、ＩＣＧ３０８とＩＣＧ３０９の出力がＯＲ回路３１０経由でイネーブル信号として接続されている。
【００６９】
図１１および図１２は、親ブランチと変数ｂｒａｎｃｈに格納されている処理対象ブランチの間にＩＣＧがない場合のクロックツリーの一部を示す回路図であり、親ブランチと変数ｂｒａｎｃｈの間にＩＣＧがない場合（ステップＳ７０４の"Ｎｏ"）の例を示す図である。
【００７０】
図１１は、新たなＩＣＧが追加される前のクロックツリーの一部を表しており、処理対象ブランチ４０２と親ブランチ４００にはＩＣＧが存在していない。したがって、クロックゲーティング回路追加処理部５６は、親ブランチ手前（変数ｂｒａｎｃｈ側）に新たなＩＣＧを挿入する（ステップＳ７０５）。
【００７１】
図１２は、新たなＩＣＧ追加後を表している。上述した通り、追加したＩＣＧ４１１は親ブランチ４００の直後にバッファを介さず追加され、ＩＣＧ４０８とＩＣＧ４０９のイネーブル信号の出力がＯＲ回路４１０経由でイネーブル入力信号として接続されている。
【００７２】
図１１において、バッファ４０１はクロックゲーティングされていないため、バッファ出力４０７の波形は図１２のバッファ出力４０７に示すとおり常にクロックＣＬＫが供給される。上記のように、ステップＳ７０４〜７０６を備えることにより、親ブランチから処理対象ブランチまでのセルに対してクロックを遮断できるため、消費電力削減を図ることができ、かつ論理回路の動作には影響を及ぼさない。
【００７３】
一方、図１２では、ＯＲ回路４１０によりＩＣＧ４０８とＩＣＧ４０９のイネーブル入力ＣＥＮ＿ａおよびＣＥＮ＿ｂのＯＲをとっているため、ＯＲ回路４１０の出力であるイネーブル入力４１３の波形は図１５のイネーブル入力４１３のようになる。このため、ＩＣＧ４１１はＩＣＧ４０８とＩＣＧ４０９の両方がクロックゲーティング期間であるときに限りクロックゲーティングが行われる。追加されたＩＣＧの出力４１２は図１５の追加されたＩＣＧの出力４１２のようになり、ＩＣＧ４０８とＩＣＧ４０９の両方がクロックゲーティング期間である開始時刻から時刻Ｔ０までと、時刻Ｔ１からＴ２、時刻Ｔ３からＴ４、時刻Ｔ５から終了時刻までの間には信号の立ち上がりが存在しない。追加されたＩＣＧ４１１の出力４１２はバッファ４０１の入力であるため、バッファ出力４０７の波形は追加されたＩＣＧの出力４１２と同じになる（図１５バッファ出力４０７参照）。
【００７４】
以上のように、本発明実施前（図１１参照）である図１４のバッファ出力４０７の波形と、本発明実施後である図１５のバッファ出力４０７の波形を比べると、開始時刻から時刻Ｔ０までと、時刻Ｔ１からＴ２、時刻Ｔ３からＴ４、時刻Ｔ５から終了時刻までの間で、図１５の出力４０７の信号の立ち上がりがなくなっている。その結果、スイッチング電力を抑えることができる。
【００７５】
また、図１３に本発明を適用した回路例を示す。図１９に示した回路に対して本発明を実施することにより、図１３に示すゲーテッドクロックツリーを含んだレイアウトデータが得られる。論理回路ブロックのパワーマネージメントを行う既存のＩＣＧ１２７およびＩＣＧ１２８のイネーブル入力ＡおよびＢが、追加されたＯＲ回路１２６に入力されており、その出力が追加されたＩＣＧ１２９のイネーブル入力となる。このような回路となるため、ＩＣＧ１２７およびＩＣＧ１２８の両方がクロックゲーティング中、つまりクロック信号を遮断して論理回路ブロックをスタンバイ状態にしているときには、追加されたＩＣＧ１２９の出力は変化せず、この期間におけるクロックのルートのバッファ１１０、ＩＣＧ１２７およびＩＣＧ１２８によるスイッチング電力を抑えることができる。
【００７６】
さらに、本発明にかかるレイアウト装置によれば、リーフを直接クロックゲーティングする位置には新たなＩＣＧは挿入されないため、新たなＩＣＧは、ＩＣＧ１２９のように、複数の異なるＩＣＧに送られる複数の異なるイネーブル信号によって制御される。したがって、新たに挿入されたＩＣＧ１２９がクロック信号を通過させる場合であっても、そのリーフ側に位置するＩＣＧ１２７とＩＣＧ１２８は異なるイネーブル信号ＡとＢにより別々に制御されるため、より詳細にクロック制御でき、スイッチング電力を抑えることができる。
【００７７】
以下では、本発明によりクロックゲーティング期間中のクロックラインの消費電力が削減できる理由を定量的に示す。図１２のバッファ４０１、４０３、４０４それぞれが、クロック入力の立ち上がりによって消費するエネルギーをｐ＿ｂｕｆ［Ｊ］とする。また、ＩＣＧ４１１、４０５、４０６、４０８、４０９それぞれが、クロックの立ち上がりによって消費するエネルギーをｐ＿ｇｃ［Ｊ］とする。さらに、ＩＣＧ４０５、４０８のイネーブル入力ＣＥＮ＿ａが"０"である確率をＰ（ＣＥＮ＿ａ）、ＩＣＧ４０６、４０９のイネーブル入力ＣＥＮ＿ｂが"０"である確率をＰ（ＣＥＮ＿ｂ）とする。
【００７８】
このとき、新たに追加されたＩＣＧ４１１のイネーブル入力４１３が"０"である確率は、
Ｐ（ＣＥＮ＿ａ）×Ｐ（ＣＥＮ＿ｂ）      （１）
となる。
【００７９】
一方、クロック周波数をｆ［Ｈｚ］とすると、新たなＩＣＧ追加により低減できたスイッチング電力をＰｓｗ[Ｗ]と表すと、
Ｐｓｗ＝（ａ×ｐ＿ｂｕｆ＋ｂ×ｐ＿ｇｃ）×ｆ×Ｐ（ＣＥＮ＿ａ）×Ｐ（ＣＥＮ＿ｂ）−ｐ＿ｇｃ×ｆ      （２）
となる。
【００８０】
例えば、変数ａ＝３（クロックゲーティングされるバッファ数）、変数ｂ＝２（クロックゲーティングされるＩＣＧ数）、１ＭＨｚにおけるバッファのスイッチング電力：０．２［μＷ］、１ＭＨｚにおけるＩＣＧのスイッチング電力：０．１［μＷ］、クロック周波数：４００［ＭＨｚ］、Ｐ（ＣＥＮ＿ａ）＝７０［％］、Ｐ（ＣＥＮ＿ｂ）＝６０［％］とすると、クロック入力の一回の立ち上がりにより消費するエネルギーは、バッファのスイッチング電力÷１ＭＨｚであるため、
ｐ＿ｂｕｆ  ＝  ０．２［ｐＪ］      （３）
ｐ＿ｇｃ  ＝  ０．１［ｐＪ］      （４）
であるので、式（１）より、Ｐｓｗ  ＝  ９４．４［μＷ］の電力が削減できる。
【００８１】
実施の形態２
本発明にかかる実施の形態２について説明する。実施の形態２にかかるレイアウト装置は、構成は実施の形態１と同様であるが、クロックゲーティング回路追加処理部５６の動作が異なる。
【００８２】
図１６に本実施の形態にかかるクロックゲーティング回路追加処理部５６の動作のフローチャートを示す。図１６に示したフローチャートは、実施の形態１において説明した図８のフローチャートにおけるステップＳ７０５とステップＳ７０６を、ステップＳ８００とステップＳ８０１に置き換え、新たにステップＳ８０２を追加し、その他のステップに関しては実施の形態１と同じ処理である。
【００８３】
実施の形態１では新たなＩＣＧを挿入していたが（図８のステップＳ７０５およびステップＳ７０６参照）、実施の形態２では挿入するのではなく、ステップＳ７０４で"Ｙｅｓ"と判定された場合、クロックライン上の変数ｂｒａｎｃｈからＩＣＧまでの区間において既存のバッファを探索し、バッファの有無を判定する（ステップＳ８０１）。
【００８４】
既存のバッファが発見された場合は、そのバッファを同じ内部遅延値を持った新たなＩＣＧに置き換える（ステップＳ８０２）。そして、追加したＩＣＧのイネーブル入力に変数ＳＩＧに格納されているクロックゲーティングイネーブル論理を入力として接続する（ステップＳ７０７）。なお、ステップＳ８０２にてバッファがない場合には、フローを終了する。
【００８５】
一方、ステップＳ７０４で"Ｎｏ"と判定された場合、クロックライン上の変数ｂｒａｎｃｈから親ブランチまでの区間において既存のバッファを探索し、バッファの有無を判定する（ステップＳ８００）。
【００８６】
既存のバッファが発見された場合、そのバッファを同じ内部遅延値を持った新たなＩＣＧに置き換える（ステップＳ８０２）。つまり、バッファが有する遅延値と同じ遅延時間をかけてクロック信号の通過または遮断の制御を行う。そして、追加したＩＣＧのイネーブル入力に変数ＳＩＧに格納されているクロックゲーティングイネーブル論理を入力として接続する（ステップＳ７０７）。なお、ステップＳ８０２にてバッファがない場合には、フローを終了する。また、ステップＳ７００〜７０４までの処理は、図８の説明と同様であるため説明を省略する。
【００８７】
このような構成により、クロック遅延値に影響を与えることなくクロックライン上にＩＣＧを設けることができるので、論理回路ブロックがスタンバイ状態となったときの、クロックのルートから論理回路ブロックのＩＣＧまでの、クロックツリーを構成するセルによるスイッチング電力を抑えることができる。
【００８８】
実施の形態３
本発明にかかる実施の形態３について説明する。実施の形態３にかかるレイアウト装置は、実施の形態１の構成に加えて、さらに遅延調整部を備える。
【００８９】
図１７に本実施の形態にかかるクロックゲーティング回路追加処理部５６の動作のフローを示す。図１７に示したフローチャートは、図８に示したフローチャートの処理に加えて、さらに遅延値調整ステップ（ステップＳ９００）を備えている。
【００９０】
遅延調整部の処理は、追加したＩＣＧのイネーブル入力に変数ＳＩＧに格納されているクロックゲーティングイネーブル論理を入力として接続する（ステップＳ７０７）処理の後に行われる。追加したＩＣＧをルートとする部分クロックツリーの遅延値は増加するので、遅延調整部は、増加した分のクロック遅延値を調整するために、クロックゲーティング回路追加処理部５６はバッファを適量除去し、追加したＩＣＧを挿入後の遅延値を調整する（ステップＳ９００）。
【００９１】
本実施の形態によって、クロック遅延値に影響を与えることなくクロックライン上にＩＣＧを設けることができ、クロックライン上のバッファ数を減らすことができる。
【００９２】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
【符号の説明】
【００９３】
１ レイアウト装置
２ 情報読込部
３ フロアプラン実施部
４ 配置・ＣＴＳ・最適化部
５ ＬＯＣＫＵＰセル削除／挿入部
６ タイミング最適化部
７ 信号配線部
４１ クロックライン認識部
４２ クロックゲーティング回路認識部
４３ クロックゲーティング回路削除部
４４ 他回路配置・最適化部
４５ クロックゲーティング回路まとめ／分割部
４６ クロックゲーティング回路配置／ＣＴＳ実施部
５１ レイアウト装置
５３ レイアウトデータ入力部
５４ ブランチ順序生成処理部
５５ イネーブル信号生成処理部
５６ クロックゲーティング回路追加処理部
５７ レイアウトデータ出力部
５８ 信号生成・回路追加処理部
１１０ クロックのルートのバッファ
１１１〜１１６   フリップフロップ
１１７ 、１１８ ＩＣＧ
１１９〜１２４ バッファ
１２６ 追加されたＯＲ回路
１２７ ＩＣＧ
１２８ ＩＣＧ
１２９ 追加されたＩＣＧ
２０１ 処理対象ブランチ
２０２ バッファ
２０３ ＩＣＧ
２０４ バッファ
２０５ 子ブランチ
２０６ 処理対象ブランチ
２０７ バッファ
２０８ リーフ
２０９ 処理対象ブランチ
２１０ バッファ
２１１ バッファ
２１２ 子ブランチ
３００ 親ブランチ
３０１ ＩＣＧ
３０２ バッファ
３０３ 処理対象ブランチ
３０４ バッファ
３０５ バッファ
３０６ ＩＣＧ
３０７ ＩＣＧ
３０８ ＩＣＧ
３０９ ＩＣＧ
３１０ 追加されたＯＲ回路
３１１ 追加されたＩＣＧ
４００ 親ブランチ
４０１ バッファ
４０２ 処理対象ブランチ
４０３ バッファ
４０４ バッファ
４０５ ＩＣＧ
４０６ ＩＣＧ
４０７ バッファの出力
４０８ ＩＣＧ
４０９ ＩＣＧ
４１０ 追加されたＯＲ回路
４１１ 追加されたＩＣＧ
４１２ 追加されたＩＣＧの出力
４１３ 追加されたＩＣＧのイネーブル入力信号
【図１】
2011107769.tif 000003
【図２】
2011107769.tif 000004
【図３】
2011107769.tif 000005
【図４】
2011107769.tif 000006
【図５】
2011107769.tif 000007
【図６】
2011107769.tif 000008
【図７】
2011107769.tif 000009
【図８】
2011107769.tif 000010
【図９】
2011107769.tif 000011
【図１０】
2011107769.tif 000012
【図１１】
2011107769.tif 000013
【図１２】
2011107769.tif 000014
【図１３】
2011107769.tif 000015
【図１４】
2011107769.tif 000016
【図１５】
2011107769.tif 000017
【図１６】
2011107769.tif 000018
【図１７】
2011107769.tif 000019
【図１８】
2011107769.tif 000020
【図１９】
2011107769.tif 000021
【図２０】
2011107769.tif 000022