(57)【要約】【課題】クロックゲーティングセルが存在する場合に、消費電力を低減することができるクロックツリーを構築可能な集積回路の設計方法等を提供する。【解決手段】クロックゲーティングセルが存在する同期回路に対して、第１の記憶素子と第２の記憶素子の間におけるクロックスキューが所与の値よりも小さく、更にスキュー調整する場所がクロックゲーティングセルの後段である場合には、同期回路に対するタイミング解析結果に基づき、クロックスキューが所与の値以上になるようにクロックスキューを変化させてもタイミングエラーが発生しないと判断した場合には、第１の記憶素子に接続されたクロックラインのクロックゲーティングセルの後段に遅延素子を挿入することにより、クロックスキューを変化させる処理を行いクロックツリーを再構築する。【選択図】図５
2010061613.tif 000002
【特許請求の範囲】
【請求項１】
同一のクロックに基づいて動作する複数の記憶素子を有し、第１の記憶素子の出力から第２の記憶素子の入力に至る信号経路上に他の記憶素子を含まない前記第１の記憶素子と前記第２の記憶素子の間におけるクロックスキューが所定の値以下となるようにクロックツリーが構築され且つクロックの伝送経路上にクロックゲーティングセルが配置されている同期回路を含む集積回路装置の設計方法であって、
所与の前記第１の記憶素子と前記第２の記憶素子の間におけるクロックスキューが所与の値よりも小さく且つクロックスキューを調整する場所が前記クロックゲーティングセルの後段である場合には、前記同期回路に対するタイミング解析結果に基づき、前記クロックスキューが所与の値以上になるように前記クロックゲーティングセルの後段において前記クロックスキューを変化させる処理を行うことにより、前記同期回路に対してクロックツリーを再構築するクロックツリー再構築ステップを含むことを特徴とする集積回路装置の設計方法。
【請求項２】
請求項１において、
前記クロックツリー再構築ステップは、
前記同期回路に対するタイミング解析結果に基づき、前記クロックスキューを変化させることによりタイミングエラーが発生すると判断した場合は、前記クロックスキューを変化させる処理を行わないことを特徴とする集積回路装置の設計方法。
【請求項３】
請求項１又は２において、
前記クロックツリー再構築ステップは、
前記クロックゲーティングセルの後段において前記第１の記憶素子に接続されたクロックラインに１又は２以上の遅延素子を挿入することにより前記クロックスキューを変化させる処理を行うことを特徴とする集積回路装置の設計方法。
【請求項４】
請求項１乃至３のいずれかにおいて、
前記クロックツリー再構築ステップは、
前記クロックゲーティングセルの後段においてセットアップタイムエラーに対するマージンが小さい信号経路上にある前記第１の記憶素子と前記第２の記憶素子の間におけるクロックスキューを優先的に変化させる処理を行うことを特徴とする集積回路装置の設計方法。
【請求項５】
請求項１乃至４のいずれかにおいて、
前記クロックツリー再構築ステップと、
前記クロックツリー再構築ステップによりクロックツリーを再構築した後の同期回路に対して、レイアウト上で実配線を行うステップと、
前記クロックツリーを再構築した後の同期回路に対して、前記レイアウト上での実配線を考慮したタイミング解析を行うステップと、
前記レイアウト上での実配線を考慮したタイミング解析結果に基づき、セットアップタイムエラーが発生する信号経路上にある前記第１の記憶素子に接続されたクロックラインから１又は２以上の遅延素子を削除することによりセットアップタイムエラーを解消するようにクロックツリーを修正するステップとを含むことを特徴とする集積回路装置の設計方法。
【請求項６】
同一のクロックに基づいて動作する複数の記憶素子を有し、第１の記憶素子の出力から第２の記憶素子の入力に至る信号経路上に他の記憶素子を含まない前記第１の記憶素子と前記第２の記憶素子の間におけるクロックスキューが所定の値以下となるようにクロックツリーが構築され且つクロックの伝送経路上にクロックゲーティングセルが配置されている同期回路に対してクロックツリーを再構築するクロックツリー構築ツールであって、
所与の前記第１の記憶素子と前記第２の記憶素子の間におけるクロックスキューが所与の値よりも小さく且つクロックスキューを調整する場所が前記クロックゲーティングセルの後段である場合には、前記同期回路に対するタイミング解析結果に基づき、前記クロックスキューが所与の値以上になるように前記クロックゲーティングセルの後段において前記クロックスキューを変化させてもタイミングエラーが発生しないと判断した場合には、前記クロックゲーティングセルの後段において前記第１の記憶素子に接続されたクロックラインに１又は２以上の遅延素子を挿入することにより、前記クロックスキューが所与の値以上になるように前記クロックゲーティングセルの後段において前記クロックスキューを変化させる処理を行い前記同期回路に対してクロックツリーを再構築するクロックツリー再構築ステップと、
前記クロックツリー再構築ステップによりクロックツリーを再構築した後の同期回路に対して、レイアウト上で実配線を行うステップと、
前記クロックツリーを再構築した後の同期回路に対して、前記レイアウト上での実配線を考慮したタイミング解析を行うステップと、
前記レイアウト上での実配線を考慮したタイミング解析結果に基づき、セットアップタイムエラーが発生する信号経路上にある前記第１の記憶素子に接続されたクロックラインから１又は２以上の遅延素子を削除することによりセットアップタイムエラーを解消するようにクロックツリーを修正するステップとを含むことを特徴とするクロックツリー構築ツール。
【請求項７】
請求項１乃至５のいずれかに記載された集積回路装置の設計方法又は請求項６に記載されたクロックツリー構築ツールを用いて設計製造されたことを特徴とする集積回路装置。
【請求項８】
請求項７に記載の集積回路装置を含むことを特徴とするマイクロコンピュータ。
【請求項９】
請求項８に記載のマイクロコンピュータと、
前記マイクロコンピュータの処理対象となるデータの入力手段と、
前記マイクロコンピュータにより処理されたデータを出力するための出力手段とを含むことを特徴とする電子機器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、集積回路装置の設計方法、クロック構築ツール、集積回路装置、マイクロコンピュータ及び電子機器に関する。
【背景技術】
【０００２】
集積回路装置内の同期回路の設計においては、各フリップフロップが同一のクロックで同期制御されることを前提として設計が行われる。ところが、同期回路に含まれるセルをレイアウト上でセル配置すると、クロックルートとなるクロックバッファと各フリップフロップのレイアウト上の相対的な位置関係等の相違によりクロックラインの配線長が異なるため、クロックルートから各フリップフロップまでのクロック信号の伝搬遅延が相違する。この伝搬遅延の差が大きいとタイミングエラーが発生し、回路が誤動作する。例えば、シフトレジスタのようにフリップフロップ間の信号の伝搬遅延が小さい回路では、後段のフリップフロップまでのクロック遅延が前段のフリップフロップまでのクロック遅延よりもかなり大きい場合、ホールドタイムエラーが発生し回路が誤動作する。また、フリップフロップ間の信号の伝搬遅延がクロック周期よりわずかに小さいような回路では、クロックスキューがなければ誤動作しないが、前段のフリップフロップまでのクロック遅延が後段のフリップフロップまでのクロック遅延よりもかなり大きい場合、セットアップタイムエラーが発生し回路が誤動作する。
【０００３】
そのため、同期回路の設計においては、ツールを使用する等してクロックルートから各フリップフロップのクロック入力までにクロックバッファ等の遅延素子を挿入することによりすべてのクロックラインの遅延を揃え、クロックスキューが小さくなるようにクロックツリーを構築することが一般的に行われている。
【０００４】
しかし、クロックスキューが小さいと、すべてのフリップフロップのクロック入力がほぼ同時に変化する。そのため、各フリップフロップ内にあるクロック入力バッファのトランジスタがスイッチングするタイミングがほぼ同時になり、各トランジスタのスイッチング時に電源からグランドに同時に貫通電流が流れる。このような同時に流れる貫通電流のために瞬時的にピーク電流が増大するため、電源電位が瞬時的に電圧降下する。この電圧降下が、トランジスタの論理閾値を下回ると回路が誤動作する可能性がある。
【０００５】
以上のような事情に鑑み、本出願人は、同期回路のクロック動作時に生じるピーク電流を低減し、電源電位の電圧降下を抑制することができるクロックツリーを構築するように制御可能な集積回路の設計方法及びクロックツリー構築ツール等を提案した（例えば、下記の特許文献１参照）。
【０００６】
【特許文献１】特開２００８−１５２５５０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ところで、クロック信号をゲーティングするクロックゲーティングセルがクロック信号の伝送経路上に存在する場合があり、このような場合に、消費電力を低減することが望まれる。
【０００８】
本発明は、以上のような問題点に鑑みてなされたものであり、クロック信号をゲーティングするクロックゲーティングセルがクロック信号の伝送経路上に存在する場合に、消費電力を低減することができるクロックツリーを構築するように制御可能な集積回路装置の設計方法、クロックツリー構築ツール、集積回路装置、マイクロコンピュータ及び電子機器を提供することを目的とする。
【課題を解決するための手段】
【０００９】
（１）本発明に係る集積回路装置の設計方法は、
同一のクロックに基づいて動作する複数の記憶素子を有し、第１の記憶素子の出力から第２の記憶素子の入力に至る信号経路上に他の記憶素子を含まない前記第１の記憶素子と前記第２の記憶素子の間におけるクロックスキューが所定の値以下となるようにクロックツリーが構築され且つクロックの伝送経路上にクロックゲーティングセルが配置されている同期回路を含む集積回路装置の設計方法であって、
所与の前記第１の記憶素子と前記第２の記憶素子の間におけるクロックスキューが所与の値よりも小さく且つクロックスキューを調整する場所が前記クロックゲーティングセルの後段である場合には、前記同期回路に対するタイミング解析結果に基づき、前記クロックスキューが所与の値以上になるように前記クロックゲーティングセルの後段において前記クロックスキューを変化させる処理を行うことにより、前記同期回路に対してクロックツリーを再構築するクロックツリー再構築ステップを含むことを特徴とする。
【００１０】
本発明に係る集積回路装置の設計方法においては、第１の記憶素子の出力から第２の記憶素子の入力に至る信号経路上に他の記憶素子を含まない第１の記憶素子と第２の記憶素子の間におけるクロックスキューに対して、クロックスキューを変化させる処理を行う。すなわち、第１の記憶素子の出力から第２の記憶素子の入力に至る信号経路が存在し、かつ、その経路上に他の記憶素子を含まないような第１の記憶素子と第２の記憶素子の間におけるクロックスキューが調整の対象となる。第１の記憶素子及び第２の記憶素子は、タイミング解析においてセットアップタイムエラーやホールドタイムエラーの解析の対象となる信号経路の始点および終点となる記憶素子に対応する。
【００１１】
第１の記憶素子と第２の記憶素子の間におけるクロックスキューは、クロックルートから第１の記憶素子のクロック入力までのクロック信号の伝搬遅延とクロックルートから第２の記憶素子のクロック入力までのクロック信号の伝搬遅延の差をいう。
【００１２】
記憶素子は、入力されるクロックに同期して動作し、１ビットの情報を記憶することができる素子であればよく、例えば、Ｄフリップフロップなどの各種のフリップフロップであってもよいし、Ｄラッチなどの各種のラッチであってもよい。
【００１３】
クロックツリーが構築されている同期回路は、少なくともレイアウト上のセル配置の情報に基づき、第１の記憶素子と第２の記憶素子の間におけるクロックスキューが所定の値以下となっており且つクロックの伝送経路上にクロックゲーティングセルが配置されていればよい。また、レイアウト上で実配線を行った後のより正確な計算に基づくクロックスキューが所定の値以下となっている場合でもよい。当該同期回路は、第１の記憶素子と第２の記憶素子の間におけるすべてのクロックスキューが所定の値以下となるようにクロックツリーが構築されていてもよいし、所定の信号経路、例えば、信号の伝搬遅延を考慮する必要のない信号経路（ダミーパス）や第１の記憶素子と第２の記憶素子の間におけるクロックスキューを考慮する必要がない（クロックスキューが大きくてもよい）信号経路等を除いた信号経路上の第１の記憶素子と第２の記憶素子の間におけるクロックスキューが所定の値以下となるようにクロックツリーが構築されていてもよい。
【００１４】
クロックツリーが構築されている同期回路に対するタイミング解析結果は、少なくともレイアウト上のセル配置の情報に基づきタイミング解析を行った結果であればよい。また、レイアウト上で実配線を行った後に実配線を考慮したより正確なタイミング解析結果であってもよい。
【００１５】
タイミングエラーには、例えば、記憶素子に対するセットアップタイムエラーやホールドタイムエラーなどがある。
【００１６】
第１の記憶素子と第２の記憶素子の間におけるクロックスキューを所与の値以上にするために、例えば、第１の記憶素子又は第２の記憶素子に接続されるクロックラインのいずれかにのみ遅延素子をクロックゲーティングセルの後段において挿入してもよいし、遅延時間の異なる遅延素子を両方のクロックラインのクロックゲーティングセルの後段において挿入してもよい。また、第１の記憶素子又は第２の記憶素子に接続されるクロックラインに遅延素子が挿入されている場合には、いずれかのクロックラインからのみ遅延素子をクロックゲーティングセルの後段において削除してもよいし、両方のクロックラインから遅延時間の異なる遅延素子をクロックゲーティングセルの後段において削除してもよい。
【００１７】
本発明によれば、クロック信号をゲーティングするクロックゲーティングセルがクロック信号の伝送経路上に存在する場合に、第１の記憶素子と第２の記憶素子の間におけるクロックスキューが所与の値以上になるようにクロックツリーがクロックゲーティングセルの後段において再構築される。その結果、クロックがゲーティングされているときに動作する素子を減らすことができるので、消費電力を低減することができる。
【００１８】
所与の値は、ピーク電流を低減するのに十分な値であればよく、計算やシミュレーションにより求めてもよい。
【００１９】
また、本発明によれば、少なくとも、第１の記憶素子と第２の記憶素子の間におけるクロックスキュー、すなわち、動作タイミングが関連する２つの記憶素子間におけるクロックスキューについては、所与の値以上になるようにクロックツリーがクロックゲーティングセルの後段において再構築される。動作タイミングが関連する２つの記憶素子は、レイアウト上の物理的に近い場所に配置される可能性が高く、これらの記憶素子は同一の電源レールから電源を供給される場合が多い。そのため、動作タイミングが関連する２つの記憶素子間のクロックスキューが所与の値以上になるようにクロックツリーをクロックゲーティングセルの後段において再構築すれば、電源電位の電圧降下を有効に低減することができる。一方、動作タイミングにおいて無関係の２つの記憶素子は、レイアウト上の物理的に近い場所に配置される可能性は低く、これらの記憶素子は異なる電源レールから電源を供給される場合が多い。そのため、動作タイミングにおいて無関係の２つの記憶素子間におけるクロックスキューについては、所与の値より小さいままクロックツリーを再構築しても、電源電位の電圧降下を有効に低減することができる。なお、可能であれば、動作タイミングにおいて無関係の２つの記憶素子間におけるクロックスキューについても、所与の値以上になるようにクロックツリーをクロックゲーティングセルの後段において構築してもよい。
【００２０】
（２）本発明に係る集積回路装置の設計方法は、
前記クロックツリー再構築ステップは、
前記同期回路に対するタイミング解析結果に基づき、前記クロックスキューを変化させることによりタイミングエラーが発生すると判断した場合は、前記クロックスキューを変化させる処理を行わないことを特徴とする。
【００２１】
本発明によれば、タイミング解析結果に基づき、タイミングエラーが発生しないと判断される場合のみ、クロックスキューを変化させる処理を行う。従って、クロックツリーが再構築された後の同期回路は、タイミングエラーがなく、かつ、ピーク電流を削減することができる。
【００２２】
（３）本発明に係る集積回路装置の設計方法は、
前記クロックツリー再構築ステップは、
前記クロックゲーティングセルの後段において前記第１の記憶素子に接続されたクロックラインに１又は２以上の遅延素子を挿入することにより前記クロックスキューを変化させる処理を行うことを特徴とする。
【００２３】
本発明によれば、第１の記憶素子に接続されたクロックラインに１又は２以上の遅延素子をクロックゲーティングセルの後段において挿入するだけなので、セットアップタイムエラーに対するマージンが大きい信号経路がほとんどであるような場合には、クロックスキューを簡単に所与の値以上にすることができ、ピーク電流を低減することができる。
【００２４】
（４）本発明に係る集積回路装置の設計方法は、
前記クロックツリー再構築ステップは、
前記クロックゲーティングセルの後段においてセットアップタイムエラーに対するマージンが小さい信号経路上にある前記第１の記憶素子と前記第２の記憶素子の間におけるクロックスキューを優先的に変化させる処理を行うことを特徴とする。
【００２５】
本発明によれば、例えば、信号経路のセットアップタイムエラーに対するマージンが大きくなるにつれて、当該信号経路上にある第１の記憶素子に接続されたクロックラインに挿入する遅延素子の数をクロックゲーティングセルの後段において多くすれば、各記憶素子に含まれるクロックバッファのトランジスタがスイッチングするタイミングを効率的に分散させることができるので、ピーク電流を低減することができる。
【００２６】
（５）本発明に係る集積回路装置の設計方法は、
前記クロックツリー再構築ステップと、
前記クロックツリー再構築ステップによりクロックツリーを再構築した後の同期回路に対して、レイアウト上で実配線を行うステップと、
前記クロックツリーを再構築した後の同期回路に対して、前記レイアウト上での実配線を考慮したタイミング解析を行うステップと、
前記レイアウト上での実配線を考慮したタイミング解析結果に基づき、セットアップタイムエラーが発生する信号経路上にある前記第１の記憶素子に接続されたクロックラインから１又は２以上の遅延素子を削除することによりセットアップタイムエラーを解消するようにクロックツリーを修正するステップとを含むことを特徴とする。
【００２７】
本発明によれば、クロックツリーを再構築する際に、遅延素子を挿入するたびに実配線を行う必要がなく、クロックツリーを再構築する処理をより短時間で行うことができる。また、クロックツリーを再構築した後の同期回路に対するレイアウト上での実配線を考慮したタイミング解析結果に基づき、遅延素子を追加することなくセットアップタイムエラーを解消するので、クロックラインの配線を大幅にやり直す必要がなく、より簡単かつ確実にセットアップタイムエラーを解消することができる。
【００２８】
なお、クロックツリーを再構築した後の同期回路に対するレイアウト上での実配線を考慮したタイミング解析結果において、ホールドタイムエラーが発生する場合は、公知の種々の手法によりホールドタイムエラーを解消することができる。例えば、ホールドタイムエラーが発生する信号経路にバッファなどを挿入して信号を遅延させることにより、クロックラインの配線を変更することなく、簡単にホールドタイムエラーを解消することができる。
【００２９】
（６）本発明に係るクロックツリー構築ツールは、
同一のクロックに基づいて動作する複数の記憶素子を有し、第１の記憶素子の出力から第２の記憶素子の入力に至る信号経路上に他の記憶素子を含まない前記第１の記憶素子と前記第２の記憶素子の間におけるクロックスキューが所定の値以下となるようにクロックツリーが構築され且つクロックの伝送経路上にクロックゲーティングセルが配置されている同期回路に対してクロックツリーを再構築するクロックツリー構築ツールであって、
所与の前記第１の記憶素子と前記第２の記憶素子の間におけるクロックスキューが所与の値よりも小さく且つクロックスキューを調整する場所が前記クロックゲーティングセルの後段である場合には、前記同期回路に対するタイミング解析結果に基づき、前記クロックスキューが所与の値以上になるように前記クロックゲーティングセルの後段において前記クロックスキューを変化させてもタイミングエラーが発生しないと判断した場合には、前記クロックゲーティングセルの後段において前記第１の記憶素子に接続されたクロックラインに１又は２以上の遅延素子を挿入することにより、前記クロックスキューが所与の値以上になるように前記クロックゲーティングセルの後段において前記クロックスキューを変化させる処理を行い前記同期回路に対してクロックツリーを再構築するクロックツリー再構築ステップと、
前記クロックツリー再構築ステップによりクロックツリーを再構築した後の同期回路に対して、レイアウト上で実配線を行うステップと、
前記クロックツリーを再構築した後の同期回路に対して、前記レイアウト上での実配線を考慮したタイミング解析を行うステップと、
前記レイアウト上での実配線を考慮したタイミング解析結果に基づき、セットアップタイムエラーが発生する信号経路上にある前記第１の記憶素子に接続されたクロックラインから１又は２以上の遅延素子を削除することによりセットアップタイムエラーを解消するようにクロックツリーを修正するステップとを含むことを特徴とする。
【００３０】
本発明に係るクロックツリー構築ツールは、例えば、信号経路のセットアップタイムエラーに対するマージンが大きくなるにつれて、当該信号経路上にある第１の記憶素子に接続されたクロックラインに挿入する遅延素子の数を大きくすれば、各記憶素子に含まれるクロックバッファのトランジスタがスイッチングするタイミングを効率的に分散させることができ、第１の記憶素子と第２の記憶素子の間におけるクロックスキューが所与の値以上になるようにクロックツリーを再構築することができる。従って、ピーク電流を低減することができ、ピーク電流が流れる時の電源電位の電圧降下を低減することができるので、回路の誤動作を防止することができる。
【００３１】
本発明に係るクロックツリー構築ツールは、遅延素子を挿入するたびに実配線を行うことはしないので、クロックツリーを再構築する処理をより短時間で行うことができる。また、クロックツリーを再構築した後の同期回路に対するレイアウト上での実配線を考慮したタイミング解析結果に基づき、遅延素子を追加ことなくセットアップタイムエラーを解消するので、クロックラインの配線を大幅にやり直す必要がなく、より簡単かつ確実にセットアップタイムエラーを解消することができる。
【００３２】
（７）本発明は、
上記のいずれかに記載された集積回路装置の設計方法又はクロックツリー構築ツールを用いて設計製造されたことを特徴とする集積回路装置である。
【００３３】
（８）本発明は、
上記に記載の集積回路装置を含むことを特徴とするマイクロコンピュータである。
【００３４】
（９）本発明は、
上記に記載のマイクロコンピュータと、
前記マイクロコンピュータの処理対象となるデータの入力手段と、
前記マイクロコンピュータにより処理されたデータを出力するための出力手段とを含むことを特徴とする電子機器である。
【発明を実施するための最良の形態】
【００３５】
以下、本発明の好適な実施形態について図面を用いて詳細に説明する。なお、以下に説明する実施の形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また以下で説明される構成の全てが本発明の必須構成要件であるとは限らない。
【００３６】
１．集積回路装置、集積回路装置の設計方法、クロックツリー構築ツール
図１は、本実施の形態のクロックツリー構築ツールの対象となる同期回路の例を説明するための図である。
【００３７】
同期回路１０は、集積回路装置（ＩＣ）に含まれる回路であり、本実施の形態のクロックツリー構築ツールの対象となる。同期回路１０は、サブブロック１００及び２００、クロックツリー３００を含んで構成される。ここで、同期回路１０に含まれる各フリップフロップはいずれもメインクロック３１２で同期制御される。すなわち、同期回路１０はメインクロック３１２（同一のクロック）に基づいて動作する同期回路である。
【００３８】
サブブロック１００は、３個のフリップフロップ１１０、１２０、１３０及び組み合わせ回路１４０、１５０を含んで構成されている。組み合わせ回路１４０の１つの入力はフリップフロップ１１０の出力に接続されており、他の１つの入力１４２はサブブロック１００の外部から供給される。組み合わせ回路１４０の出力は、フリップフロップ１２０のデータ入力に接続されている。また、組み合わせ回路１５０の１つの入力はフリップフロップ１２０の出力に接続されており、他の１つの入力はサブブロック２００に含まれるフリップフロップ２２０の出力に接続されている。組み合わせ回路１５０の出力は、フリップフロップ１３０のデータ入力に接続されている。
【００３９】
サブブロック２００は、３個のフリップフロップ２１０、２２０、２３０及び組み合わせ回路２４０、２５０を含んで構成されている。組み合わせ回路２４０の１つの入力はサブブロック１００に含まれるフリップフロップ１１０の出力に接続されており、他の１つの入力はフリップフロップ２１０の出力に接続されている。組み合わせ回路２４０の出力は、フリップフロップ２２０のデータ入力に接続されている。また、組み合わせ回路２５０の１つの入力はフリップフロップ２２０の出力に接続されており、他の１つの入力２５２はサブブロック２００の外部から供給される。組み合わせ回路２５０の出力は、フリップフロップ２３０のデータ入力に接続されている。
【００４０】
クロックツリー３００は、クロックバッファ３２０、３３０、３４０、３５０、３７０及びクロックゲーティングセル３６０を含んで構成されている。クロックバッファ３２０の入力はクロックバッファ３５０の出力に接続されており、その出力は、サブブロック１００に含まれる３個のフリップフロップ１１０、１２０、１３０の各クロック入力１１２、１２２、１３２に共通に接続されている。クロックバッファ３３０の入力はクロックバッファ３５０の出力に接続されており、その出力は、クロックバッファ３４０の入力に接続されている。クロックバッファ３４０の出力は、サブブロック２００に含まれる３個のフリップフロップ２１０、２２０、２３０の各クロック入力２１２、２２２、２３２に共通に接続されている。ここで、クロックバッファ３５０の出力から６個のフリップフロップ１１０、１２０、１３０、２１０、２２０、２３０の各クロック入力１１２、１２２、１３２、２１２、２２２、２３２までの遅延を揃え、任意の２つのフリップフロップ間におけるクロックスキューが所定の値以下（例えば、０）になるように、遅延素子として機能するクロックバッファ３２０、３３０、３４０が挿入されている。
【００４１】
クロックバッファ３５０の出力からフリップフロップ１１０、１２０、１３０の各クロック入力１１２、１２２、１３２までには、１つのクロックバッファ３２０が挿入されている。一方、クロックバッファ３５０の出力からフリップフロップ２１０、２２０、２３０の各クロック入力２１２、２２２、２３２までには、２つのクロックバッファ３３０及び３４０が挿入されている。挿入されるクロックバッファの数の相違は、レイアウト（図示せず）上の各フリップフロップの物理的な配置場所の相違のため、クロックバッファ３５０と各フリップフロップの間の距離が異なることに起因する。すなわち、クロックバッファ３５０とフリップフロップの間の距離が長い場合は、クロック配線に伴う寄生抵抗や寄生容量が大きく、クロックラインの配線遅延が大きいため、挿入するクロックバッファの数を少なくする。一方、クロックバッファ３５０とフリップフロップの間の距離が短い場合は、配線遅延が小さいため、挿入するクロックバッファの数を多くする。このようにして、任意の２つのフリップフロップ間におけるクロックスキューが所定の値以下になるようにクロックツリー３００が構成されている。例えば、クロックバッファ３２０、３３０、３４０の入力から出力までの遅延がすべて１ｎｓの場合、クロックバッファ３５０の出力からフリップフロップ１１０、１２０、１３０の各クロック入力１１２、１２２、１３２までの配線遅延がすべて１ｎｓであり、クロックバッファ３５０の出力からフリップフロップ２１０、２２０、２３０の各クロック入力２１２、２２２、２３２までの配線遅延がすべて０だとすると、クロックバッファ３５０の出力からフリップフロップ１１０、１２０、１３０、２１０、２２０、２３０の各クロック入力１１２、１２２、１３２、２１２、２２２、２３２までの遅延はすべて２ｎｓとなり、任意の２つのフリップフロップ間のクロックスキューが０になる。
【００４２】
サブブロック１００に含まれる３個のフリップフロップ１１０、１２０、１３０はレイアウト上の物理的に近い場所に配置されており、クロックバッファ３２０から３個のフリップフロップ１１０、１２０、１３０の各クロック入力１１２、１２２、１３２までの配線遅延にはほとんど差がない（これらのフリップフロップ間におけるクロックスキューは非常に小さい）ため、クロックバッファ３２０の出力とフリップフロップ１１０、１２０、１３０の各クロック入力１１２、１２２、１３２の間にはクロックバッファが挿入されていない。同様に、サブブロック２００に含まれる３個のフリップフロップ２１０、２２０、２３０はレイアウト上の物理的に近い場所に配置されているため、クロックバッファ３４０の出力とフリップフロップ２１０、２２０、２３０の各クロック入力２１２、２２２、２３２の間にはクロックバッファが挿入されていない。
【００４３】
ここで、組み合わせ回路１４０におけるフリップフロップ１１０（第１の記憶素子に相当する）の出力からフリップフロップ１２０（第２の記憶素子に相当する）のデータ入力までのパス（信号経路）ｐ１の遅延は５．５ｎｓ、組み合わせ回路１５０におけるフリップフロップ１２０（第１の記憶素子に相当する）の出力からフリップフロップ１３０（第２の記憶素子に相当する）のデータ入力までのパスｐ２の遅延は６．５ｎｓ、フリップフロップ２２０（第１の記憶素子に相当する）の出力からフリップフロップ１３０（第２の記憶素子に相当する）のデータ入力までのパスｐ３の遅延は２ｎｓ、組み合わせ回路２４０におけるフリップフロップ１１０（第１の記憶素子に相当する）の出力からフリップフロップ２２０（第２の記憶素子に相当する）のデータ入力までのパスｐ４の遅延は２．５ｎｓ、フリップフロップ２１０（第１の記憶素子に相当する）の出力からフリップフロップ２２０（第２の記憶素子に相当する）のデータ入力までのパスｐ５の遅延は６．５ｎｓ、組み合わせ回路２５０におけるフリップフロップ２２０（第１の記憶素子に相当する）の出力からフリップフロップ２３０（第２の記憶素子に相当する）のデータ入力までのパスｐ６の遅延は７．５ｎｓであるとする。さらに、メインクロック３１２のクロック周波数は１００ＭＨｚ（クロック周期は１０ｎｓ）、すべてのフリップフロップの遅延（クロックが入力されてから出力が変化するまでの時間）は１ｎｓと仮定し、すべてのフリップフロップに対するセットアップタイムは１ｎｓ以上、ホールドタイムは０ｎｓ以上必要であると仮定する。また、すべてのフリップフロップ間のクロックスキュー（以下の説明では、第２の記憶素子に相当するフリップフロップまでのクロック遅延から第１の記憶素子に相当するフリップフロップまでのクロック遅延を引き算した値と定義する）は０であると仮定する。
【００４４】
この場合、セットアップタイムエラーが起こらないためには、すべてのフリップフロップ間における組み合わせ回路のパスの遅延は、１０ｎｓ（クロック周期）＋０ｎｓ（クロックスキュー）−１ｎｓ（フリップフロップの遅延）−１ｎｓ（セットアップタイム）＝８ｎｓ以下でなければならない。上述の通り、パスｐ１〜ｐ６の遅延はそれぞれ、５．５ｎｓ、６．５ｎｓ、２ｎｓ、２．５ｎｓ、６．５ｎｓ、７．５ｎｓなので、パスｐ１〜ｐ６に関して、セットアップタイムエラーは発生していない。一方、ホールドタイムエラーが起こらないためには、すべてのフリップフロップ間における組み合わせ回路のパスの遅延は、０ｎｓ（ホールドタイム）＋０ｎｓ（クロックスキュー）−１ｎｓ（フリップフロップの遅延）＝−１ｎｓ以上でなければならない。明らかに、パスｐ１〜ｐ６に関して、ホールドタイムエラーは発生していない。
【００４５】
クロックバッファ３５０の入力はクロックゲーティングセル３６０のクロック出力に接続されており、クロックゲーティングセル３６０のクロック入力は、クロックバッファ３７０の出力に接続されており、クロックバッファ３７０の入力は、メインクロックバッファ３１０の出力に接続されている。クロックゲーティングセル３６０の制御入力には、制御信号３６２がクロックツリー３００の外部から供給される。クロックゲーティングセル３６０は、制御信号３６２が活性化（イネーブル）状態である場合には、クロックバッファ３７０の出力から供給されるクロック信号をクロックバッファ３５０の入力に供給し、制御信号３６２が非活性化（ディセーブル）状態である場合には、クロック信号をクロックバッファ３５０の入力に供給しない。すなわち、制御信号３６２が活性化（イネーブル）状態である場合には、クロックバッファ３２０、３３０、３４０、３５０、及び、サブブロック１００、２００は動作し、制御信号３６２が非活性化（ディセーブル）状態である場合には、クロックバッファ３２０、３３０、３４０、３５０、及び、サブブロック１００、２００は動作しない。従って、制御信号３６２が非活性化（ディセーブル）状態である場合には、消費電力を低減することができる。
【００４６】
図２は、図１における同期回路１０に対して従来技術（非特許文献１記載）のクロックツリー構築ツールを使用し、クロックツリーを再構築した後の同期回路の例について説明するための図である。図１と同じ構成には同じ番号を付しており説明を省略する。
【００４７】
図２における同期回路２０（クロックツリーを再構築した後の同期回路）は、クロックツリー３０２がクロックバッファ３２２、３２４、３２６、３４４、３７２を含む点においてのみ、図１における同期回路１０と異なる。クロックバッファ３２２の入力は、クロックバッファ３２０の出力に接続され、その出力は、フリップフロップ１２０のクロック入力１２２に接続されている。クロックバッファ３２４の入力は、クロックバッファ３２０の出力に接続され、その出力は、クロックバッファ３２６の入力に接続されている。クロックバッファ３２６の出力は、フリップフロップ１１０のクロック入力１１２に接続されている。クロックバッファ３４４の入力は、クロックバッファ３４０の出力に接続され、その出力は、フリップフロップ２１０のクロック入力２１２に接続されている。クロックバッファ３７２の入力は、クロックバッファ３７０の出力に接続され、その出力は、クロックゲーティングセル３６０のクロック入力に接続されている。クロックバッファ３２２、３２４、３２６、３４４、３７２は、従来技術のクロックツリー構築ツールが挿入したクロックバッファである。
【００４８】
ここで、クロックバッファ３２２、３２４、３２６、３４４、３７２の入力から出力までの遅延はすべて１ｎｓであるとする。この場合、クロックバッファ３５０の出力からフリップフロップ１１０のクロック入力１１２までの遅延は、図１の場合と比較して、クロックバッファ３２４及び３２６の遅延分（１ｎｓ＋１ｎｓ＝２ｎｓ）だけ増加している。同様に、クロックバッファ３５０の出力からフリップフロップ１２０のクロック入力１２２までの遅延はクロックバッファ３２２の遅延分（１ｎｓ）だけ増加し、クロックバッファ３５０の出力からフリップフロップ２１０のクロック入力２１２までの遅延はクロックバッファ３４４の遅延分（１ｎｓ）だけ増加している。クロックバッファ３５０の出力からフリップフロップ１３０、２２０、２３０の各クロック入力１３２、２２２、２３２までの遅延は図１の場合と変わらない。従って、パスｐ１上にあるフリップフロップ１１０と１２０の間のクロックスキューは−１ｎｓである。同様に、パスｐ２上にあるフリップフロップ１２０と１３０の間、パスｐ３上にあるフリップフロップ２２０と１３０の間、パスｐ４上にあるフリップフロップ１１０と２２０の間、パスｐ５上にあるフリップフロップ２１０と２２０の間、パスｐ６上にあるフリップフロップ２２０と２３０の間のクロックスキューはそれぞれ、−１ｎｓ、０ｎｓ、−２ｎｓ、−１ｎｓ、０である。すなわち、従来技術のクロックツリー構築ツールにより、クロックスキューに差が出るようにクロックバッファ３２２、３２４、３２６、３４４が挿入されている。
【００４９】
一方、サブブロック１００及び２００は図１とまったく同じであり、パスｐ１〜ｐ６の遅延も変わらない。パスｐ１の遅延は５．５ｎｓであり、１０ｎｓ（クロック周期）＋（−１ｎｓ）（クロックスキュー）−１ｎｓ（フリップフロップの遅延）−１ｎｓ（セットアップタイム）＝７ｎｓ以下なので、フリップフロップ１２０に対するセットアップタイムエラーは発生していない。また、フリップフロップ１２０に対するホールドタイムエラーについても、０ｎｓ（ホールドタイム）＋（−１ｎｓ）（クロックスキュー）−１ｎｓ（フリップフロップ１１０の遅延）＝−２ｎｓなので、発生していない。同様に、パスｐ２及びｐ３に関するフリップフロップ１３０に対するセットアップタイムエラー及びホールドタイムエラー、パスｐ４及びｐ５に関するフリップフロップ２２０に対するセットアップタイムエラー及びホールドタイムエラー、パスｐ６に関するフリップフロップ２３０に対するセットアップタイムエラー及びホールドタイムエラーは発生していない。すなわち、本実施の形態のクロックツリー構築ツールがクロックバッファ３２２、３２４、３２６、３４４、３７２を挿入したことにより、同期回路２０にタイミングエラーは発生していない。
【００５０】
なお、図２においては、クロックバッファ３７２がクロックゲーティングセル３６０の前段に挿入されている。従って、制御信号３６２が非活性化（ディセーブル）状態である場合であっても、クロックバッファ３７２は動作してしまうことになる。
【００５１】
図３は、図１における同期回路１０に対して本実施の形態のクロックツリー構築ツールを使用し、クロックツリーを再構築した後の同期回路の例について説明するための図である。図１と同じ構成には同じ番号を付しており説明を省略する。
【００５２】
図３における同期回路３０（クロックツリーを再構築した後の同期回路）は、クロックツリー３０４がクロックバッファ３２２、３２４、３２６、３４４、３６４を含む点においてのみ、図１における同期回路１０と異なる。クロックバッファ３２２の入力は、クロックバッファ３２０の出力に接続され、その出力は、フリップフロップ１２０のクロック入力１２２に接続されている。クロックバッファ３２４の入力は、クロックバッファ３２０の出力に接続され、その出力は、クロックバッファ３２６の入力に接続されている。クロックバッファ３２６の出力は、フリップフロップ１１０のクロック入力１１２に接続されている。クロックバッファ３４４の入力は、クロックバッファ３４０の出力に接続され、その出力は、フリップフロップ２１０のクロック入力２１２に接続されている。クロックバッファ３６４の入力は、クロックゲーティングセル３６０の出力に接続され、その出力は、クロックバッファ３５０の入力に接続されている。クロックバッファ３２２、３２４、３２６、３４４、３６４は、本実施の形態のクロックツリー構築ツールが挿入したクロックバッファである。
【００５３】
ここで、クロックバッファ３２２、３２４、３２６、３４４、３６４の入力から出力までの遅延はすべて１ｎｓであるとする。この場合、クロックバッファ３５０の出力からフリップフロップ１１０のクロック入力１１２までの遅延は、図１の場合と比較して、クロックバッファ３２４及び３２６の遅延分（１ｎｓ＋１ｎｓ＝２ｎｓ）だけ増加している。同様に、クロックバッファ３５０の出力からフリップフロップ１２０のクロック入力１２２までの遅延はクロックバッファ３２２の遅延分（１ｎｓ）だけ増加し、クロックバッファ３５０の出力からフリップフロップ２１０のクロック入力２１２までの遅延はクロックバッファ３４４の遅延分（１ｎｓ）だけ増加している。クロックバッファ３５０の出力からフリップフロップ１３０、２２０、２３０の各クロック入力１３２、２２２、２３２までの遅延は図１の場合と変わらない。従って、パスｐ１上にあるフリップフロップ１１０と１２０の間のクロックスキューは−１ｎｓである。同様に、パスｐ２上にあるフリップフロップ１２０と１３０の間、パスｐ３上にあるフリップフロップ２２０と１３０の間、パスｐ４上にあるフリップフロップ１１０と２２０の間、パスｐ５上にあるフリップフロップ２１０と２２０の間、パスｐ６上にあるフリップフロップ２２０と２３０の間のクロックスキューはそれぞれ、−１ｎｓ、０ｎｓ、−２ｎｓ、−１ｎｓ、０である。すなわち、本実施の形態のクロックツリー構築ツールにより、クロックスキューに差が出るようにクロックバッファ３２２、３２４、３２６、３４４が挿入されている。
【００５４】
一方、サブブロック１００及び２００は図１とまったく同じであり、パスｐ１〜ｐ６の遅延も変わらない。パスｐ１の遅延は５．５ｎｓであり、１０ｎｓ（クロック周期）＋（−１ｎｓ）（クロックスキュー）−１ｎｓ（フリップフロップの遅延）−１ｎｓ（セットアップタイム）＝７ｎｓ以下なので、フリップフロップ１２０に対するセットアップタイムエラーは発生していない。また、フリップフロップ１２０に対するホールドタイムエラーについても、０ｎｓ（ホールドタイム）＋（−１ｎｓ）（クロックスキュー）−１ｎｓ（フリップフロップ１１０の遅延）＝−２ｎｓなので、発生していない。同様に、パスｐ２及びｐ３に関するフリップフロップ１３０に対するセットアップタイムエラー及びホールドタイムエラー、パスｐ４及びｐ５に関するフリップフロップ２２０に対するセットアップタイムエラー及びホールドタイムエラー、パスｐ６に関するフリップフロップ２３０に対するセットアップタイムエラー及びホールドタイムエラーは発生していない。すなわち、本実施の形態のクロックツリー構築ツールがクロックバッファ３２２、３２４、３２６、３４４、３６４を挿入したことにより、同期回路３０にタイミングエラーは発生していない。
【００５５】
なお、３２においては、クロックバッファ３６４がクロックゲーティングセル３６０の後段に挿入されている。従って、制御信号３６２が非活性化（ディセーブル）状態である場合には、クロックバッファ３６４は動作しないことになる。すなわち、制御信号３６２が非活性化（ディセーブル）状態である場合の同期回路３０の消費電力は、制御信号３６２が非活性化（ディセーブル）状態である場合の同期回路２０（図２参照）の消費電力よりも少なくなる。
【００５６】
図４は、クロックバッファの出力と各フリップフロップのクロック入力に関するタイミングを説明するための図である。
【００５７】
図４（Ａ）は、図１の同期回路１０におけるタイミングを説明するための図である。時刻Ｔ０において、クロックバッファ３５０の出力が立ち上がる。クロックバッファ３５０の出力からフリップフロップ１１０、１２０、１３０の各クロック入力１１２、１２２、１３２までの遅延は、クロックバッファ３２０の入力から出力までの遅延（１ｎｓ）と配線遅延（１ｎｓ）の和に相当し、２ｎｓである。一方、クロックバッファ３５０の出力からフリップフロップ２１０、２２０、２３０の各クロック入力２１２、２２２、２３２までの遅延は、クロックバッファ３３０の入力から出力までの遅延（１ｎｓ）とクロックバッファ３４０の入力から出力までの遅延（１ｎｓ）と配線遅延（０ｎｓ）の和に相当し、２ｎｓである。従って、時刻Ｔ１において、フリップフロップ１１０、１２０、１３０、２１０、２２０、２３０の各クロック入力１１２、１２２、１３２、２１２、２２２、２３２は同時に立ち上がる。これは、図１の回路ではすべてのフリップフロップに対してクロックスキューが０になるようにクロックツリーが構築されているためである。従って、クロック入力１１２、１２２、１３２、２１２、２２２、２３２に接続されるバッファ（図示していないが、各フリップフロップの内部にある）におけるトランジスタが同時にスイッチングするために電源からグランドに大きな貫通電流が流れ、ピーク電流が大きくなるため、電源電位に大きな電圧降下が発生する。
【００５８】
図４（Ｂ）は、図３の同期回路３０におけるタイミングを説明するための図である。
【００５９】
時刻Ｔ０において、クロックバッファ３５０の出力が立ち上がる。クロックバッファ３５０の出力からフリップフロップ１１０のクロック入力１１２までの遅延は、クロックバッファ３２０の入力から出力までの遅延（１ｎｓ）とクロックバッファ３２４の入力から出力までの遅延（１ｎｓ）とクロックバッファ３２６の入力から出力までの遅延（１ｎｓ）と配線遅延（１ｎｓ）の和に相当し、４ｎｓである。クロックバッファ３５０の出力からフリップフロップ１２０のクロック入力１２２までの遅延は、クロックバッファ３２０の入力から出力までの遅延（１ｎｓ）とクロックバッファ３２２の入力から出力までの遅延（１ｎｓ）と配線遅延（１ｎｓ）の和に相当し、３ｎｓである。クロックバッファ３５０の出力からフリップフロップ１３０のクロック入力１３２までの遅延は、クロックバッファ３２０の入力から出力までの遅延（１ｎｓ）と配線遅延（１ｎｓ）の和に相当し、２ｎｓである。一方、クロックバッファ３５０の出力からフリップフロップ２１０のクロック入力２１２までの遅延は、クロックバッファ３３０の入力から出力までの遅延（１ｎｓ）とクロックバッファ３４０の入力から出力までの遅延（１ｎｓ）とクロックバッファ３４４の入力から出力までの遅延（１ｎｓ）と配線遅延（０ｎｓ）の和に相当し、３ｎｓである。クロックバッファ３５０の出力からフリップフロップ２２０、２３０の各クロック入力２２２、２３２までの遅延は、クロックバッファ３３０の入力から出力までの遅延（１ｎｓ）とクロックバッファ３４０の入力から出力までの遅延（１ｎｓ）と配線遅延（０ｎｓ）の和に相当し、２ｎｓである。従って、時刻Ｔ１において、フリップフロップ１３０、２２０、２３０の各クロック入力１３２、２２２、２３２が同時に立ち上がり、時刻Ｔ２において、フリップフロップ１２０、２１０の各クロック入力１２２、２１２が同時に立ち上がり、時刻Ｔ３において、フリップフロップ１１０のクロック入力１１２が立ち上がる。このように各フリップフロップのクロック入力の立ち上がりのタイミングが異なるのは、本実施の形態のクロックツリー構築ツールが、タイミングエラーを起こさない範囲で、クロックバッファ３５０の出力から各フリップフロップのクロック入力までの遅延にできるだけ１ｎｓ以上の差をつけるようにクロックツリーを構築したことによる。この遅延差としては、回路規模や使用するクロックバッファの特性等に基づいて貫通電流が流れるタイミングを分散させてピーク電流を低減し、電源電位の電圧降下を効果的に抑制することができるような所与の値に設定しなければならない。例えば、クロックバッファの駆動能力とクロック配線の寄生抵抗・寄生容量の関係により、クロックバッファ出力の立ち上がりが急峻である場合には貫通電流が流れる時間が短いので、この所与の値が小さくてもピーク電流を低減させることができるので、電圧降下を効果的に抑制することができる。逆に、クロックバッファ出力の立ち上がりが緩やかな場合には貫通電流が流れる時間が長いので、この所与の値が大きくなければピーク電流を低減させることができず、電圧降下を効果的に抑制することができない。
【００６０】
図５は、本実施の形態の集積回路装置の設計方法（製造方法）について説明するためのフローチャート図である。
【００６１】
まず、ゲートレベルで記述されたネットリストを読み込み、各セルの物理的な配置（セル配置）を行う（ステップＳ１０）。
【００６２】
次に、クロックのルート（例えば、クロックが入力されるバッファの出力）から各フリップフロップのクロック入力までの遅延（クロック遅延）の差、すなわちクロックスキューが所定の値以下になるように、各クロックラインにバッファ（又は偶数個のインバータ）等の遅延素子を挿入することにより、クロックツリーを構築する（ステップＳ１２）。クロックツリーの構築においては、ステップＳ１０で得られたセル配置の情報に基づいて、各クロックラインの仮想配線を行い、配線長や寄生抵抗・寄生容量が考慮される。各フリップフロップに対するホールドタイムやセットアップタイムの制約が厳しい場合などは、理想的にはクロックスキューが０になるようにクロックツリーを構築するのが望ましいが、挿入可能なバッファの種類の制約が大きい場合やクロック遅延の増加を抑える必要がある場合などは、クロックスキューは所定の値（ホールドタイムエラー及びセットアップタイムエラーを起こさない程度の値）以下になるようにすればよい。
【００６３】
次に、クロックツリーを構築した後の回路に対してタイミング解析を行い（ステップＳ１４）、セットアップタイムエラー及びホールドタイムエラーがなくなるまで、セル配置（ステップＳ１０）およびクロックツリーの構築（ステップＳ１２）を繰り返し行う（ステップＳ１６）。図１の同期回路１０は、ステップＳ１０〜Ｓ１６によりクロックツリーが構築された回路であってもよい。
【００６４】
次に、このタイミング解析結果から、すべてのパスについて、クロックルートから当該パスの終点となるフリップフロップ（第２の記憶素子に相当する）のクロック入力までの遅延とクロックルートから当該パスの始点となるフリップフロップ（第１の記憶素子に相当する）のクロック入力までの遅延の差を当該パスに対するクロックスキューとして計算する（ステップＳ１８）。例えば、図１において、パスｐ１〜ｐ６に対するクロックスキューはすべて０である。なお、信号の伝搬遅延を考慮する必要のないパス（ダミーパス）やクロックスキューを考慮する必要がない（クロックスキューが大きくてもよい）パス等がある場合は、これらのパスを除いたパスについてのみクロックスキューを計算すればよい。
【００６５】
さらに、当該パスの終点となるフリップフロップのセットアップタイムエラーに対するマージンを、当該パスに対するクロックスキューの余裕度として計算する（ステップＳ１８）。例えば、図１において、上述した通り、セットアップタイムエラーを起こさないためには各パスの遅延は８ｎｓ以下でなければならないのに対して、パスｐ１の遅延は５．５ｎｓなので、パスｐ１に対するクロックスキューの余裕度は、８ｎｓ−５．５ｎｓ＝２．５ｎｓとなる。同様の計算により、パスｐ２、ｐ３、ｐ４、ｐ５、ｐ６に対するクロックスキューの余裕度は、それぞれ、１．５ｎｓ、６ｎｓ、５．５ｎｓ、１．５ｎｓ、０．５ｎｓとなる。
【００６６】
次に、すべてのパスに対して、ステップＳ１８で計算したクロックスキューが所与の値（以下、判定値という）よりも小さいか否か判定する（ステップＳ２０）。ここで、回路が誤動作を起こすほどの電源電位の電圧降下を引き起こすピーク電流が流れないために要求される、２つのフリップフロップ間におけるクロックスキューを計算やシミュレーションにより求め、判定値として使用する。例えば、図１において、クロックスキューが１ｎｓ以上あれば電源電位の電圧降下を抑制する効果があるとすると判定値を１ｎｓとする。パスｐ１〜ｐ６に対するクロックスキューはいずれも０であるので、すべて判定値より小さい。
【００６７】
ステップＳ２０において、すべてのパスに対するクロックスキューが判定値よりも大きい場合には、実配線を行う（ステップＳ２６）。一方、ステップＳ２０において、クロックスキューが判定値よりも小さいパスがある場合には、当該パスに対するクロックスキューの余裕度がステップＳ２０における判定値と当該パスのクロックスキューの差よりも大きいか否か判定する（ステップＳ２２）。例えば、図１において、パスｐ１のクロックスキューの余裕度（２．５ｎｓ）は、判定値（１ｎｓ）とパスｐ１のクロックスキュー（０ｎｓ）の差（１ｎｓ）よりも大きい。同様に、パスｐ２、ｐ３、ｐ４、ｐ５のクロックスキューの余裕度は、判定値と各パスのクロックスキューの差よりも大きい。パスｐ６のクロックスキューの余裕度は０．５ｎｓであり、判定値（１ｎｓ）とパスｐ６のクロックスキュー（０ｎｓ）の差（１ｎｓ）よりも小さい。
【００６８】
ステップＳ２２において、すべてのパスに対するクロックスキューの余裕度がステップＳ２０における判定値とクロックスキューの差よりも小さい場合は、電源電位に多少の電圧降下を生じる可能性があるが、セットアップタイムエラーを発生させないためにクロックスキューの再構築は行わず、実配線を行う（ステップＳ２６）。一方、ステップＳ２２において、クロックスキューの余裕度がステップＳ２０における判定値とクロックスキューの差よりも大きいパスが存在する場合は、更に、クロックスキューを調整する場所がクロックゲーティングセルよりも後段であるか否かを判定する（ステップＳ２３）。そして、クロックスキューを調整する場所がクロックゲーティングセルよりも後段である場合には、クロックスキューの余裕度（すなわち、セットアップタイムエラーに対するマージン）が小さいパスから順に、クロックスキューがステップＳ２０における判定値よりも大きくなるように当該パスの始点となるフリップフロップに接続されたクロックラインに１又は２以上の遅延素子（バッファまたは偶数個のインバータなど）をクロックゲーティングセルよりも後段に挿入することにより、クロックツリーを再構築する（ステップＳ２４）。図１においては、クロックスキューの余裕度の小さいパスの順に、パスｐ６、ｐ２、ｐ５、ｐ１、ｐ４、ｐ３となる。まず、パスｐ６のクロックスキューの余裕度は０．５ｎｓであり、判定値（１ｎｓ）とパスｐ６のクロックスキュー（０ｎｓ）の差（１ｎｓ）よりも小さいため、パスｐ６の始点となるフリップフロップ２２０に接続されたクロックラインにはクロックバッファは挿入されない。次に、パスｐ２のクロックスキューの余裕度は１．５ｎｓであり、判定値（１ｎｓ）とパスｐ２のクロックスキュー（０ｎｓ）の差（１ｎｓ）よりも大きいため、パスｐ２の始点となるフリップフロップ２２０に接続されたクロックラインには、１ｎｓ以上１．５ｎｓ以下の遅延素子が挿入される。例えば、図３においては、１ｎｓの遅延素子として機能するクロックバッファ３２２が挿入されている。クロックバッファ３２２の挿入により、パスｐ１のクロックスキューは１ｎｓ減少して−１ｎｓとなり、クロックスキューの余裕度は１ｎｓ増加して３．５ｎｓとなる。次に、パスｐ５のクロックスキューの余裕度は１．５ｎｓであり、判定値（１ｎｓ）とパスｐ５のクロックスキュー（０ｎｓ）の差（１ｎｓ）よりも大きいため、パスｐ５の始点となるフリップフロップ２１０に接続されたクロックラインには、１ｎｓ以上１．５ｎｓ以下の遅延素子が挿入される。例えば、図３においては、１ｎｓの遅延素子として機能するクロックバッファ３４４が挿入されている。次に、パスｐ１のクロックスキューの余裕度は３．５ｎｓであり、判定値（１ｎｓ）とパスｐ１のクロックスキュー（−１ｎｓ）の差（２ｎｓ）よりも大きいため、パスｐ１の始点となるフリップフロップ１１０に接続されたクロックラインには、２ｎｓ以上３．５ｎｓ以下の遅延素子が挿入される。例えば、図３においては、１ｎｓの遅延素子として機能するクロックバッファ３２４及び３２６が挿入されている。ここで、２つのクロックバッファ３２４及び３２６が挿入されているのは、クロックバッファ３２２が先に挿入されたことを考慮して、パスｐ１のクロックスキューを判定値（１ｎｓ）以上にするためである。クロックバッファ３２４及び３２６の挿入により、パスｐ４のクロックスキューは２ｎｓ増加して２ｎｓとなり、クロックスキューの余裕度は２ｎｓ減少して３．５ｎｓとなる。次に、パスｐ４については、クロックバッファ３２４及び３２６の挿入により、パスｐ４のクロックスキューは２ｎｓとなり、判定値（１ｎｓ）以上であるので、パスｐ４の始点となるフリップフロップ１１０に接続されたクロックラインにはさらにクロックバッファを挿入することはしない。次に、パスｐ３のクロックスキューの余裕度は６ｎｓであり、判定値（１ｎｓ）とパスｐ３のクロックスキュー（０ｎｓ）の差（１ｎｓ）よりも大きいが、パスｐ３の始点となるフリップフロップ２２０に接続されたクロックラインに０．５ｎｓ以上の遅延素子を挿入すると、パスｐ６に関してセットアップタイムエラーが発生するため、図３においては、クロックバッファが挿入されていない。なお、同期回路３０と他の同期回路（図示せず）との間のクロックスキューを調整する等のため、クロックバッファ３６４がクロックゲーティングセル３６０とクロックバッファ３５０との間に挿入されている。
【００６９】
次に、クロックツリーを再構築した後の回路に対して実配線を行い（ステップＳ２６）、クロックツリーを再構築した後の回路に対して、実配線を考慮したタイミング解析を行い（ステップＳ２８）、タイミングエラーがあれば当該エラーがなくなるまで、ステップＳ２４で挿入したバッファ（または偶数個のインバータ）を削除することにより、クロックツリーの修正（ステップＳ３２）および実配線（ステップＳ２６）を繰り返し行う（ステップＳ３０）。タイミングエラーがなくなれば、実行フローを終了する。
【００７０】
なお、本実施の形態の集積回路装置の設計方法では、図１の同期回路１０を生成するために、ステップＳ１０〜Ｓ１６によりクロックツリーの構築を行ったが、本発明に係る集積回路装置の設計方法では、同一のクロックに基づいて動作する複数の記憶素子を有し、第１の記憶素子の出力から第２の記憶素子の入力に至る信号経路上に他の記憶素子を含まない前記第１の記憶素子と前記第２の記憶素子の間におけるクロックスキューが所定の値以下となるようにクロックツリーが構築されている同期回路に対して適用することができるため、ステップＳ１０からＳ１６は本発明に係る集積回路装置の設計方法の必須の構成要素ではない。例えば、手設計によりクロックツリーを構成した同期回路に対しても本発明に係る集積回路装置の設計方法を適用することができる。
【００７１】
２．マイクロコンピュータ
図６は、本実施の形態のマイクロコンピュータのハードウエアブロック図の一例である。
【００７２】
本マイクロコンピュータ７００は、ＣＰＵ５１０、キャッシュメモリ５２０、ＲＡＭ７１０，ＲＯＭ７２０、ＭＭＵ７３０、ＬＣＤコントローラ５３０、リセット回路５４０、プログラマブルタイマ５５０、リアルタイムクロック（ＲＴＣ）５６０、ＤＲＡＭコントローラ５７０、割り込みコントローラ５８０、通信制御装置５９０、バスコントローラ６００、Ａ／Ｄ変換器６１０、Ｄ／Ａ変換器６２０、入力ポート６３０、出力ポート６４０、Ｉ／Ｏポート６５０、クロック発生装置６６０、プリスケーラ６７０、クロック停止制御回路７４０及びそれらを接続する汎用バス６８０、専用バス７５０等、各種ピン６９０等を含む。
【００７３】
３．電子機器
図７に、本実施の形態の電子機器のブロック図の一例を示す。本電子機器８００は、マイクロコンピュータ（またはＡＳＩＣ）８１０、入力部８２０、メモリ８３０、電源生成部８４０、ＬＣＤ８５０、音出力部８６０を含む。
【００７４】
ここで、入力部８２０は、種々のデータを入力するためのものである。マイクロコンピュータ８１０は、この入力部８２０により入力されたデータに基づいて種々の処理を行うことになる。メモリ８３０は、マイクロコンピュータ８１０などの作業領域となるものである。電源生成部８４０は、電子機器８００で使用される各種電源を生成するためのものである。ＬＣＤ８５０は、電子機器が表示する各種の画像（文字、アイコン、グラフィック等）を出力するためのものである。
【００７５】
音出力部８６０は、電子機器８００が出力する各種の音（音声、ゲーム音等）を出力するためのものであり、その機能は、スピーカなどのハードウェアにより実現できる。
【００７６】
図８（Ａ）に、電子機器の１つである携帯電話９５０の外観図の例を示す。この携帯電話９５０は、入力部として機能するダイヤルボタン９５２や、電話番号や名前やアイコンなどを表示するＬＣＤ９５４や、音出力部として機能し音声を出力するスピーカ９５６を備える。
【００７７】
図８（Ｂ）に、電子機器の１つである携帯型ゲーム装置９６０の外観図の例を示す。この携帯型ゲーム装置９６０は、入力部として機能する操作ボタン９６２、十字キー９６４や、ゲーム画像を表示するＬＣＤ９６６や、音出力部として機能しゲーム音を出力するスピーカ９６８を備える。
【００７８】
図８（Ｃ）に、電子機器の１つであるパーソナルコンピュータ９７０の外観図の例を示す。このパーソナルコンピュータ９７０は、入力部として機能するキーボード９７２や、文字、数字、グラフィックなどを表示するＬＣＤ９７４、音出力部９７６を備える。
【００７９】
本実施の形態のマイクロコンピュータを図８（Ａ）〜図８（Ｃ）の電子機器に組み込むことにより、低価格で画像処理速度の速いコストパフォーマンスの高い電子機器を提供することができる。
【００８０】
なお、本実施形態を利用できる電子機器としては、図８（Ａ）、（Ｂ）、（Ｃ）に示すもの以外にも、携帯型情報端末、ページャー、電子卓上計算機、タッチパネルを備えた装置、プロジェクタ、ワードプロセッサ、ビューファインダ型又はモニタ直視型のビデオテープレコーダ、カーナビゲーション装置等のＬＣＤを使用する種々の電子機器を考えることができる。
【００８１】
なお、本発明は本実施形態に限定されず、本発明の要旨の範囲内で種々の変形実施が可能である。
【００８２】
例えば、上記実施の形態では、クロックスキューの余裕度が小さいパスの順に（セットアップタイムエラーに対するマージンの小さいパスの順に）、クロックツリーの再構築を行う場合を例にとり説明したが、これに限られない。クロックスキューの余裕度が大きいパスの順やランダムにクロックツリーの再構築を行ってもよい。また、クロックラインに遅延素子を挿入する度に、関連するパスのクロックスキューの余裕度を計算し直し、動的にクロックスキューの余裕度が小さいパスの順を変更するようにしてもよい。
【００８３】
また、上記実施の形態では、クロックスキューの余裕度が小さく、クロックスキューを所与の値（判定値）よりも大きくすることができない場合には、遅延素子を挿入しない場合を例にとり説明したが、これに限られない。クロックスキューを少しでも大きくするために、クロックスキューの余裕度を超えない範囲内で、できるだけ遅延素子を挿入するようにしてもよい。
【００８４】
本発明は、実施の形態で説明した構成と実質的に同一の構成（例えば、機能、方法及び結果が同一の構成、あるいは目的及び効果が同一の構成）を含む。また、本発明は、実施の形態で説明した構成の本質的でない部分を置き換えた構成を含む。また、本発明は、実施の形態で説明した構成と同一の作用効果を奏する構成又は同一の目的を達成することができる構成を含む。また、本発明は、実施の形態で説明した構成に公知技術を付加した構成を含む。
【図面の簡単な説明】
【００８５】
【図１】本実施の形態のクロックツリー構成ツールの対象となる同期回路の例を説明するための図。
【図２】従来技術のクロックツリー構築ツールを使用し、クロックツリーを再構築した後の同期回路の例について説明するための図。
【図３】本実施の形態のクロックツリー構築ツールを使用し、クロックツリーを再構築した後の同期回路の例について説明するための図。
【図４】図４（Ａ）は、本実施の形態のクロックツリー構成ツールの対象となる同期回路におけるメインクロックバッファの出力と各フリップフロップのクロック入力に関するタイミングを説明するための図であり、図４（Ｂ）は、本実施の形態のクロックツリー構築ツールを使用し、クロックツリーを再構築した後の同期回路におけるメインクロックバッファの出力と各フリップフロップのクロック入力に関するタイミングを説明するための図である。
【図５】本実施の形態の集積回路の設計方法（製造方法）について説明するためのフローチャート図。
【図６】本実施の形態のマイクロコンピュータのハードウエアブロック図の一例である。
【図７】マイクロコンピュータを含む電子機器のブロック図の一例を示す。
【図８】図８（Ａ）（Ｂ）（Ｃ）は、種々の電子機器の外観図の例である。
【符号の説明】
【００８６】
１０ 同期回路、２０ 同期回路、３０ 同期回路、１００ サブブロックＡ、１１０ フリップフロップ、１１２ クロック入力、１２０ フリップフロップ、１２２ クロック入力、１３０ フリップフロップ、１３２ クロック入力、１４０ 組み合わせ回路、１４２ 外部入力、１５０ 組み合わせ回路、２００ サブブロックＢ、２１０ フリップフロップ、２１２ クロック入力、２２０ フリップフロップ、２２２ クロック入力、２３０ フリップフロップ、２３２ クロック入力、２４０ 組み合わせ回路、２５０ 組み合わせ回路、２５２ 外部入力、３００ クロックツリー、３０２ クロックツリー、３０４ クロックツリー、３１０ メインクロックバッファ、３１２ メインクロック、３２０〜３４４、３５０、３６２３７０、３７２ クロックバッファ、３６０ クロックゲーティングセル、３６２ 制御信号入力、５１０ ＣＰＵ、５２０ キャッシュメモリ、５３０ ＬＣＤコントローラ、５４０ リセット回路、５５０ プログラマブルタイマ、５６０ リアルタイムクロック（ＲＴＣ）、５７０ ＤＭＡコントローラ兼バスＩ／Ｆ、５８０ 割り込みコントローラ、５９０ 通信制御回路（シリアルインターフェース）、６００ バスコントローラ、６１０ Ａ／Ｄ変換器、６２０ Ｄ／Ａ変換器、６３０ 入力ポート、６４０ 出力ポート、６５０ Ｉ／Ｏポート、６６０ クロック発生装置（ＰＬＬ）、６７０ プリスケーラ、６８０ 汎用バス、６９０ 各種ピン、７００ マイクロコンピュータ、７１０ ＲＯＭ、７２０ ＲＡＭ、７３０ ＭＭＵ、７４０ クロック停止制御回路、７５０ 専用バス、８００ 電子機器、８１０ マイクロコンピュータ（ＡＳＩＣ）、８２０ 入力部、８３０ メモリ、８４０ 電源生成部８５０ ＬＣＤ、８６０ 音出力部、９５０ 携帯電話、９５２ ダイヤルボタン、９５４ ＬＣＤ、９５６ スピーカ、９６０ 携帯型ゲーム装置、９６２ 操作ボタン、９６４ 十字キー、９６６ ＬＣＤ、９６８ スピーカ、９７０ パーソナルコンピュータ、９７２ キーボード、９７４ ＬＣＤ、９７６ 音出力部
【図１】
2010061613.tif 000003
【図２】
2010061613.tif 000004
【図３】
2010061613.tif 000005
【図４】
2010061613.tif 000006
【図５】
2010061613.tif 000007
【図６】
2010061613.tif 000008
【図７】
2010061613.tif 000009
【図８】
2010061613.tif 000010