(57)【特許請求の範囲】
【請求項１】
クロックツリーの情報と、前記クロックツリーに含まれる複数のフリップフロップを駆動する複数のクロックの情報とを取得する取得手段と、
前記取得手段によって取得された前記複数のクロックの情報に基づいて、前記複数のフリップフロップの中から、前記複数のクロックのそれぞれにより駆動されるフリップフロップの数をそれぞれ特定するフリップフロップ数特定手段と、
前記フリップフロップ数特定手段によって特定された前記複数のクロックのそれぞれにより駆動されるフリップフロップの数に基づいて、前記複数のクロックの中から、駆動するフリップフロップの数が最も少ないクロックを特定するクロック特定手段と、
前記クロック特定手段によって特定されたクロックで駆動されるフリップフロップに基づいて、前記クロックツリーを分割する分割手段と、を備えることを特徴とするクロックツリー生成装置。
【請求項２】
前記分割手段によって前記クロックツリーが分割された位置にバッファを挿入するバッファ挿入手段を更に備えることを特徴とする請求項１に記載のクロックツリー生成装置。
【請求項３】
前記分割手段は、前記クロック特定手段によって特定されたクロックで駆動されるフリップフロップにデータを出力する第１のフリップフロップと、前記クロック特定手段によって特定されたクロックで駆動されるフリップフロップからデータが入力される第２のフリップフロップとを抽出し、前記第１のフリップフロップ及び第２のフリップフロップのそれぞれに接続される第３のフリップフロップを走査し、前記走査の結果に基づいて前記クロックツリーを分割する位置を決定することを特徴とする請求項１又は２に記載のクロックツリー生成装置。
【請求項４】
クロックツリーの情報と、前記クロックツリーに含まれる複数のフリップフロップを駆動する複数のクロックの情報とを取得し、
前記複数のクロックの情報に基づいて、前記複数のフリップフロップの中から、前記複数のクロックのそれぞれにより駆動されるフリップフロップの数をそれぞれ特定し、
前記複数のクロックのそれぞれにより駆動されるフリップフロップの数に基づいて、前記複数のクロックの中から、駆動するフリップフロップの数が最も少ないクロックを特定し、
駆動するフリップフロップの数が最も少ないクロックで駆動されるフリップフロップに基づいて、前記クロックツリーを分割する
処理をコンピュータに実行させることを特徴とするクロックツリー生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クロックツリーを生成するクロックツリー生成装置及びクロックツリー生成方法に関する。
【背景技術】
【０００２】
従来から、大規模半導体集積回路内でのスキューを低減させる手法の１つとして、クロックツリーが用いられている。基本的には、クロックツリーでは、クロックバッファをツリー上に構成し、ツリー末端の負荷バランスをとることにより、スキューを低減させている。
【０００３】
例えば、クロックツリーを複数のサブツリーに分割してバッファを挿入し、分割された複数のサブツリーの遅延調整を行う技術が提案されている（特許文献１参照）。その他にも、複数のクロックドメイン間のクロックタイミングの差異を調整するクロックタイミング調整方法が提案されている（特許文献２参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−１３４２１５号公報
【特許文献２】特開２００８−１３６０３０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記したような従来のクロックツリー生成方法では、クロックパスの遅延（以下、単に「クロック遅延」とも呼ぶ。）やスキューが大きいために、タイミングエラーが発生し易かった。
【課題を解決するための手段】
【０００６】
開示の集積回路は、クロックツリーを生成する処理を行う装置である。取得手段は、クロックツリーの情報と、前記クロックツリーに含まれる複数のフリップフロップを駆動する複数のクロックの情報とを取得する。フリップフロップ数特定手段は、取得手段によって取得された複数のクロックの情報に基づいて、複数のフリップフロップの中から、複数のクロックのそれぞれにより駆動されるフリップフロップの数をそれぞれ特定する。クロック特定手段は、フリップフロップ数特定手段によって特定された複数のクロックのそれぞれにより駆動されるフリップフロップの数に基づいて、複数のクロックの中から、駆動するフリップフロップの数が最も少ないクロックを特定する。分割手段は、クロック特定手段によって特定されたクロックで駆動されるフリップフロップに基づいて、クロックツリーを分割する。
【発明の効果】
【０００７】
開示の装置によれば、クロック遅延などを容易に調整することができるため、タイミングエラーを適切に収束させることが可能となる。
【図面の簡単な説明】
【０００８】
【図１】本実施形態に係るクロックツリー生成装置を構成するコンピューのハードウェア構成例を示すブロック図である。
【図２】第１比較例に係るクロックツリーシンセシスを説明するための図を示す。
【図３】第２比較例に係るクロックツリーシンセシスを説明するための図を示す。
【図４】第２比較例に係る回路を別の表現により示した図である。
【図５】チップ内バラツキを考慮する場合の基本的手法を説明するための図を示す。
【図６】チップ内バラツキを考慮した場合の回路の動作例を示す。
【図７】チップ内バラツキへの対応策を説明するための図を示す。
【図８】本実施形態に係るクロックツリー生成方法を適用した回路例を示す。
【図９】本実施形態に係るクロックツリー生成方法を適用した他の回路例を示す。
【図１０】本実施形態に係るクロックツリー生成方法を適用した他の回路例を、別の表現により示した図である。
【図１１】本実施形態に係るクロックツリー生成処理の全体処理を示すフローチャートである。
【図１２】第１分岐点抽出処理の具体例を示す図である。
【図１３】第２分岐点抽出処理の具体例を示す図である。
【図１４】第１分岐点抽出処理を示すフローチャートである。
【図１５】第２分岐点抽出処理を示すフローチャートである。
【発明を実施するための形態】
【０００９】
以下、実施形態の一例について図面を参照しつつ説明する。
【００１０】
［クロックツリー生成装置］
まず、本実施形態に係るクロックツリー生成装置のハードウェア構成について説明する。図１は、本実施形態に係るクロックツリー生成装置を構成するコンピュータ９１０のハードウェア構成例を示すブロック図である。
【００１１】
バス９１４には、ＣＰＵ９１１と、ＲＡＭ９１２と、ＲＯＭ９１３と、可換媒体記憶装置９１５と、外部インターフェース９１６とが接続されている。
【００１２】
ＣＰＵ９１１は、データの処理及び演算を行うと共に、バス９１４を介して接続された上記の構成ユニットを制御するものである。ＲＯＭ９１３には、予めブートプログラムが記憶されており、このブートプログラムをＣＰＵ９１１が実行することにより、コンピュータ９１０が起動する。図示しないハードディスクなどにコンピュータプログラムが記憶されており、そのコンピュータプログラムがＲＡＭ９１２にコピーされ、ＣＰＵ９１１により実行される。ＣＰＵ９１１は、コンピュータプログラムを実行することにより、後述するクロックツリー生成に係る処理を行う。
【００１３】
なお、本発明における取得手段、フリップフロップ数特定手段、クロック特定手段、及び分割手段、並びにバッファ挿入手段は、ＣＰＵ９１１が、ＲＯＭ９１３などに記憶されたプログラム（クロックツリー生成プログラム）を実行することで実現される。
【００１４】
可換媒体記憶装置９１５は、ＣＤ−ＲＯＭやフロッピーディスクなどの媒体９２４を動作させる装置である。外部インターフェース９１６は、コンピュータ９１０内部と外部とを接続するインターフェースであり、ネットワークに対してコンピュータプログラム及びＲＴＬ設計データ等を入出力することができる。ディスプレイ９２０は、コンピュータ９１０からの出力表示を行い、キーボード９２１及びマウス９２２はコンピュータ９１０への情報入力に使用される。モデム９２３は、ＬＡＮや電話線などを通じてネットワークと接続する。
【００１５】
本実施形態は、コンピュータ９１０がプログラムを実行することによって実現することができる。また、プログラムをコンピュータ９１０に供給するための手段、例えばかかるプログラムを記録したＣＤ−ＲＯＭ等のコンピュータ読み取り可能な記録媒体又はかかるプログラムを伝送するインターネット等の伝送媒体も本発明の実施形態として適用することができる。また、上記のプログラムを記録したコンピュータ読み取り可能な記録媒体等のコンピュータプログラムプロダクトも本発明の実施形態として適用することができる。上記のプログラム、記録媒体、伝送媒体及びコンピュータプログラムプロダクトは、本発明の範疇に含まれる。記録媒体としては、例えばフレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、磁気テープ、不揮発性のメモリカード、ＲＯＭ等を用いることができる。
【００１６】
［比較例の問題点］
本実施形態を説明する前に、従来から行われている比較例の問題点などについて説明する。
【００１７】
図２は、第１比較例に係るクロックツリーシンセシス（以下、「ＣＴＳ（Ｃｌｏｃｋ  Ｔｒｅｅ  Ｓｙｎｔｈｅｓｙｓ）」と表記する。）を説明するための図を示す。ＣＴＳは、回路内に供給されるクロック供給ラインに発生するスキュー（クロック遅延差分を意味する。以下同様とする。）を低減させるための手法である。
【００１８】
第１比較例では、ＣＴＳ実行時は、マスターのクロックがルートとして用いられる。具体的には、図２において、バッファ１０１がクロックルートセルとなる。「クロックルートセル」とは、複数のセルを駆動するためのクロックを発生するセルに相当する。また、分周クロック生成用の分周ＦＦ１０２はスルー指定されることで、バッファと同じ扱いとなる。この場合、バッファ１０１からのクロックは、クロックツリー１０３（クロックツリー１０４も含むものとする。）を介して、複数のフリップフロップ（以下、単に「ＦＦ」とも表記する。）から構成されたＦＦ群１０５まで伝搬される。なお、ＦＦ群は実際にはＦＦ以外の構成要素も有する。本明細書では、このようなＦＦ以外の構成要素と複数のＦＦとを有する集合体を「ＦＦ群」と呼ぶこととする。
【００１９】
基本的にはＦＦはバッファよりも遅延時間が大きいため、第１比較例では、バッファ１０１からＦＦ群１０５までのパスディレイ（即ちインサーションディレイ。本明細書では、クロックルートセルからＦＦ群内のＦＦセルまでのパスディレイを「インサーションディレイ」と呼ぶ。）が増加する傾向にある。そのため、クロックパスの遅延（クロック遅延）が大きくなる。よって、第１比較例では、チップ内バラツキを考慮した際に発生するスキューにより、タイミングエラーが発生し易いと言える。また、第１比較例では、バッファ１０１からのクロックで駆動されるＦＦ数が多いため、言い換えるとクロックツリー１０３に含まれるＦＦ数が多いため、クロックツリー１０３が大きくなる傾向にある。これにより、最も遅延の大きいクロックパスに合わせてスキュー調整が行われるため、回路全体のインサーションディレイが大きくなると言える。
【００２０】
図３は、第２比較例に係るクロックツリーシンセシスを説明するための図を示す。第２比較例では、クロックツリーシンセシスのルートが分割される。具体的には、破線１１７で示すようなバッファ１１１から分周ＦＦ１１２までの接続によって、クロックツリー１１３とクロックツリー１１４とに分割される。この場合、バッファ１１１及び分周ＦＦ１１２がクロックルートセルとなり、バッファ１１１からのクロックでＦＦ群１１５が駆動され、分周ＦＦ１１２からのクロックでＦＦ群１１６が駆動される。
【００２１】
図４は、図３に示した回路を別の表現により示した図である。なお、図３と同一の符号を付した構成要素については同一の意味を有するものとして、その説明を省略する。図４において、ＦＦ１１５ａはＦＦ群１１５を構成するＦＦ（言い換えるとクロックツリー１１３に含まれるＦＦ）の１つであり、ＦＦ１１６ａ、１１６ｂはそれぞれＦＦ群１１６を構成するＦＦ（言い換えるとクロックツリー１１４に含まれるＦＦ）の１つである。また、ＦＦ１１５ａとＦＦ１１６ａとは組合回路１１９ａを介してデータの授受を行い、ＦＦ１１６ａとＦＦ１１６ｂとは組合回路１１９ｂを介してデータの授受を行う。なお、バッファ１１１はマスタークロックを生成し、バッファ１１８はクロックルートセルとなる。
【００２２】
第２比較例のようにルートを分割することで、第１比較例と比較して、ルート単位の駆動ＦＦ数が減少するため、クロックパスの遅延が減少する傾向にある。また、第２比較例に係るクロックツリー１１３、１１４は、第１比較例に係るクロックツリー１０３と比較して、駆動ＦＦ数が少ないため、インサーションディレイが小さくなる。更に、第２比較例では、分周ＦＦ１１２の遅延時間がキャンセルされる。しかしながら、第２比較例では、クロックツリー１１３とクロックツリー１１４との間のスキューが大きいため、異なるクロック間でのデータの受け渡し時に、タイミングエラーが発生し易いと言える。言い換えると、クロックツリー１１３とクロックツリー１１４との間のスキューにより、クロックタイミングの調整を行いにくいと言える。
【００２３】
次に、図５及び図６を参照して、チップ内バラツキについて具体的に説明する。
【００２４】
図５は、チップ内バラツキを考慮する場合の基本的手法を説明するための図を示す。図５に示す回路では、ＦＦ１２１とＦＦ１２２とが組合回路１２３を介してデータの授受を行い、ＦＦ１２１、１２２は、それぞれ分岐点１２４で分岐された経路１２５ａ、１２６からクロックが供給される。基本的には、チップ内バラツキを考慮する場合、分岐点１２４から先のＰＴＶ条件（Ｐｒｏｃｅｓｓ、Ｔｅｍｐｅｒａｔｕｒｅ、Ｖｏｌｔａｇｅ）を変えて、遅延が求められる。この場合、分岐点１２４を起点とする経路１２５ａ、１２５ｂ（以下、単に「経路１２５」と表記する。）と経路１２６とでは、ＰＴＶ条件が異なる。
【００２５】
ここで、回路がターゲット周波数で動作するためには、「セットアップ制約」及び「ホールド制約」の２種類のタイミング制約を満たすことが望ましい。一般的に、送り側のＦＦ１２１から出力された信号が、受け側のＦＦ１２２に到達するタイミングは、現クロックの後、つぎのクロックの前になければならない。信号の到達が現在のクロックよりも後に届くことを保証するのが「ホールド制約」であり、次のクロックよりも前に届くことを保証するのが「セットアップ制約」である。
【００２６】
基本的には、セットアップ制約についての解析を行う場合には、経路１２５については最も遅いＰＴＶ条件に設定され、経路１２６については最も早いＰＴＶ条件に設定される。これに対して、ホールド制約についての解析を行う場合には、経路１２５については最も早いＰＴＶ条件に設定され、経路１２６については最も遅いＰＴＶ条件に設定される。なお、分岐点１２４の位置がＦＦ１２１、１２２に物理的に近いほど、チップ内バラツキの影響を受けにくくなる。
【００２７】
図６は、図５に示したＦＦ１２１、１２２の動作例を示す。図６（ａ）〜（ｃ）は、それぞれ、横軸に時間を示しており、上から順に、マスタークロックの信号の立ち上がり、ＦＦ１２１のクロック端子での信号の立ち上がり、ＦＦ１２２のクロック端子での信号の立ち上がりを示している。図６（ａ）は、チップ内バラツキを考慮しない場合の動作例を示している。これより、クロックパスの遅延にチップ内バラツキ成分が混じっていないため、ＦＦ１２１、１２２のクロック端子での信号の立ち上がりエッジが揃っていることがわかる。
【００２８】
図６（ｂ）及び図６（ｃ）は、チップ内バラツキを考慮した場合の動作例を示している。具体的には、図６（ｂ）は、セットアップ制約についての解析時の動作例を示している。この場合、クロックパスの遅延にチップ内バラツキ成分が混じるため、セットアップ制約を満たすことが厳しくなる方向に、ＦＦ１２１、１２２のクロック端子での信号の立ち上がりエッジが揃わなくなる傾向にある。一方、図６（ｃ）は、ホールド制約についての解析時の動作例を示している。この場合、クロックパスの遅延にチップ内バラツキ成分が混じるため、ホールド制約を満たすことが厳しくなる方向に、ＦＦ１２１、１２２のクロック端子での信号の立ち上がりエッジが揃わなくなる傾向にある。
【００２９】
次に、図７を参照して、一般的なチップ内バラツキへの対応策について説明する。図７に示す回路は、バッファ１３１をクロックルートセルとし、分岐点１４１において分割された階層１３２、１３３を有する。階層１３２、１３３は、それぞれ、ＦＦ群１３８、１３９にクロックを伝搬するクロックツリー１３６、１３７を有する。
【００３０】
一般的には、分岐点がＦＦに近いほどチップ内バラツキの影響を受けにくくなるため、これを考慮して、階層１３２、１３３のそれぞれのクロック入力端子にバッファ１３４、１３５が挿入される。これにより、クロックの分岐点１４２、１４３が末端のＦＦ群１３８、１３９を構成するＦＦに近くになるため、チップ内バラツキに起因するタイミングエラーが発生しにくくなる。具体的には、例えば図７中の実線矢印で示すような同じ階層内での経路については、分岐点１４２、１４３がＦＦに近くなるため、このような効果が得られると言える。しかしながら、例えば図７中の破線矢印で示すような異なる階層を跨ぐ経路については、分岐点１４２、１４３がＦＦから遠いため、このような効果はほとんど得られないと言える。
【００３１】
［本実施形態に係るクロックツリー生成方法］
次に、本実施形態に係るクロックツリー生成方法について具体的に説明する。
【００３２】
本実施形態では、クロックツリー生成の対象となっている回路（具体的にはＬＳＩ。以下同様とする。）について、駆動しているＦＦ数が少ないクロック（クロック周波数を意味する。以下同様とする。）により駆動されるＦＦを抽出し、抽出されたＦＦとデータの授受を行うＦＦに基づいてクロックツリーを分割する。つまり、抽出されたＦＦにデータを出力するＦＦ（以下、適宜「始点側ＦＦ」と呼ぶ。）、及び抽出されたＦＦからデータが入力されるＦＦ（以下、適宜「終点側ＦＦ」と呼ぶ。）に基づいて、ＣＴＳのルートを分割する。具体的には、始点側ＦＦ及び終点側ＦＦのそれぞれから接続先のＦＦを走査することで、クロックツリーを分割する位置を決定する。このような本実施形態によれば、クロック遅延を調整し易くなるため、タイミングエラーを適切に収束させることが可能となる。
【００３３】
更に、本実施形態では、上記のようにクロックツリーを分割する位置にバッファを挿入する。言い換えると、バッファを挿入することで、ＣＴＳのルートを分割する。これにより、スキューを調整し易くなるため、タイミングエラーの収束性を効果的に向上させることが可能となる。
【００３４】
図８は、本実施形態に係るクロックツリー生成方法を適用した回路例を示す。図８に示す回路は、主に、５つのＦＦ１５１〜１５５及び３つの組合回路１５６ａ〜１５６ｃを有する。ＦＦ１５２はクロック１６１で駆動され、ＦＦ１５１、１５３、１５４、１５５はクロック１６２に応じたクロックで駆動される。つまり、ＦＦ１５１、１５３、１５４、１５５は、同一のクロック系のＦＦである。
【００３５】
この場合、クロック１６１は、駆動しているＦＦ数が少ないクロックに相当し、ＦＦ１５２は、駆動しているＦＦ数が少ないクロック１６１により駆動されるＦＦに相当する。なお、駆動しているＦＦ数が少ないクロック１６１としては、例えば高速クロックや、かなり低い周波数のクロックなどが挙げられる。また、ＦＦ１５１、１５３は、駆動しているＦＦ数が少ないクロックにより駆動されるＦＦ１５２とデータの授受を行っているＦＦに相当する。具体的には、ＦＦ１５１は始点側ＦＦに相当し、ＦＦ１５３は終点側ＦＦに相当する。一方、ＦＦ１５４、１５５は、駆動しているＦＦ数が少ないクロックにより駆動されるＦＦ１５２とデータの授受を行っていないＦＦに相当する。
【００３６】
このような回路に本実施形態を適用した場合、ＦＦ１５２とデータの授受を行っているＦＦ１５１、１５３の前にバッファ１５７が挿入される。つまり、ＦＦ１５１及びＦＦ１５３のクロック端子の前にバッファ１５７が個別に挿入される。この場合、バッファ１５７はクロックルートセルとなる。一方、バッファ１５７の挿入に伴って、ＦＦ１５２とデータの授受を行っていないＦＦ１５４、１５５の前にもバッファ１５８が挿入される。具体的には、バッファ１５７を挿入した位置と同様の位置に、つまりＦＦ１５４及びＦＦ１５５のクロック端子の前に、バッファ１５８が個別に挿入される。この場合、バッファ１５８はクロックルートセルとなる。このようにＦＦ１５２とデータの授受を行っていないＦＦ１５４、１５５の前にもバッファ１５８を挿入しているのは、新たにクロックルートセルとなるバッファ１５７と同じレベルのクロックルートセルを設けることが望ましいからである。
【００３７】
図９は、本実施形態に係るクロックツリー生成方法を適用した他の回路例を示す。具体的には、図４に示した回路に、本実施形態に係るクロックツリー生成方法を適用した例を示す。なお、図３及び図４と同一の符号を付した構成要素については同一の意味を有するものとして、その説明を省略する。
【００３８】
図９に示す回路では、ＦＦ１１５ａは、駆動しているＦＦ数が少ないクロックにより駆動されるＦＦに相当する。また、ＦＦ１１６ａは、駆動しているＦＦ数が少ないクロックにより駆動されるＦＦ１１５ａとデータの授受を行っているＦＦに相当する。具体的には、ＦＦ１１６ａは、終点側ＦＦに相当する。一方、ＦＦ１１６ｂは、駆動しているＦＦ数が少ないクロックにより駆動されるＦＦ１１５ａとデータの授受を行っていないＦＦに相当する。
【００３９】
このような回路に本実施形態を適用した場合、ＦＦ１１５ａとデータの授受を行っているＦＦ１１６ａの前にバッファ１７１が挿入される。一方、バッファ１７１の挿入に伴って、ＦＦ１１５ａとデータの授受を行っていないＦＦ１１６ｂの前にもバッファ１７２が挿入される（その理由は、前述した通りである。）。この場合、バッファ１７１、１７２は、それぞれクロックルートセルとなる。このようにバッファ１７１、１７２を挿入することで、前述したクロックツリー１１４（図３及び図４参照）は、クロックツリー１７４、１７５に分割される。クロックツリー１７４、１７５は、それぞれＦＦ１１６ａ、１１６ｂを含む。
【００４０】
図１０は、図９に示した回路を別の表現により示した図である。なお、図９と同一の符号を付した構成要素については同一の意味を有するものとして、その説明を省略する。図１０に示すように、バッファ１７１、１７２を挿入することで、クロックツリー１１４がクロックツリー１７４、１７５に分割される、つまりＣＴＳのルートが分割される。具体的には、前述したＦＦ群１１６が、クロックツリー１７４、１７５によってクロックがそれぞれ伝搬されるＦＦ群１１６ｘ、１１６ｙに分割される。上記したＦＦ１１６ａ、１１６ｂは、それぞれＦＦ群１１６ｘ、１１６ｙに含まれる。
【００４１】
図９及び図１０に示したようにバッファ１７１、１７２を挿入することで、例えば、ＦＦ１１５ａとデータの授受を行うＦＦ１１６ａは、同一クロック系のＦＦ１１６ｂから独立してスキュー調整を行うことができる。したがって、クロックツリー１１３のクロックルートセルであるバッファ１１８と、挿入したバッファ１７１、１７２とのスキュー調整を容易に行うことができる。言い換えると、第２比較例と比較して、クロックツリー１１３とクロックツリー１７４との間のスキューがより小さくなる。そのため、例えばＦＦ１１５ａとＦＦ１１６ａとの間のスキューに起因するタイミングエラーの収束性を効果的に向上させることが可能となる。つまり、例えばＦＦ１１５ａとＦＦ１１６ａとの間のスキューを容易に調整することができるため、この間のタイミングエラーが発生しにくくなるので、ＦＦ１１５ａとＦＦ１１６ａとの間のタイミング調整を容易に行うことが可能となる。
【００４２】
更に、図９及び図１０に示したように分周ＦＦ１１２の近傍にバッファ１７１、１７２を配置してＣＴＳのルートを分割することで、バッファ１７１、１７２からクロックツリー１７４、１７５末端のＦＦまでの遅延時間を小さくすることができる。よって、第２比較例と比較して、クロックツリー１７４、１７５に関して、インサーションディレイをより小さくすることができる。
【００４３】
［本実施形態に係るクロックツリー生成処理］
次に、本実施形態に係るクロックツリー生成処理の具体例について説明する。
【００４４】
図１１は、本実施形態に係るクロックツリー生成処理の全体処理を示すフローチャートである。このフローは、前述したコンピュータ９１０内のＣＰＵ９１１によって実行される。
【００４５】
まず、ステップＳ１０１では、ＣＰＵ９１１は、クロックツリーの生成対象となっている回路（ＬＳＩ）についてのネットリスト及びクロック定義を読み込む。ネットリストは、回路における端子間の接続情報のデータなどに相当し、少なくとも当該回路のクロックツリーに関する情報を含んでいる。クロック定義は、回路が用いている複数のクロックの情報、つまりクロックツリーを構成する複数のＦＦが用いている複数のクロックに関する情報を含んでいる。そして、処理はステップＳ１０２に進む。
【００４６】
ステップＳ１０２では、ＣＰＵ９１１は、ステップＳ１０１で取得されたネットリスト及びクロック定義に基づいて、クロックツリーの生成対象となっている回路が用いている複数のクロックごとに、それぞれのクロックで駆動されるＦＦの数を特定する。言い換えると、ＣＰＵ９１１は、回路で用いられているクロック周波数ごとにＦＦ数を調べる。具体的には、ＣＰＵ９１１は、クロックとＦＦ数との関係を対応付けると共に、ＦＦ数が少ない順にクロックをソートする。そして、処理はステップＳ１０３に進む。
【００４７】
ステップＳ１０３では、ＣＰＵ９１１は、ステップＳ１０２で特定されたＦＦ数に基づいて、回路が用いている全てのクロックの中で、駆動しているＦＦ数が少ないクロックを特定する。この場合、ＣＰＵ９１１は、少なくとも、駆動しているＦＦ数が最も少ないクロックを特定する。具体的には、ＣＰＵ９１１は、上記のようにＦＦ数が少ない順にソートされたクロックに基づいて、回路が用いている全てのクロックの中で、駆動しているＦＦ数が少ない上位のクロックを特定する。つまり、ＣＰＵ９１１は、ＦＦ数が少ないクロックを上から順に所定数（１以上の数）だけ特定する。なお、特定するクロックの数は、予め定めた定数を用いても良いし、回路が用いているクロックの数に応じた変数を用いても良い。１つの例では、ＣＰＵ９１１は、駆動しているＦＦ数が最も少ないクロック、駆動しているＦＦ数が２番目に少ないクロック、及び駆動しているＦＦ数が３番目に少ないクロックを特定する。以上のステップＳ１０３の処理が終了すると、処理はステップＳ１０４に進む。
【００４８】
ステップＳ１０４では、ＣＰＵ９１１は、ステップＳ１０３で特定されたクロックで駆動されるＦＦを抽出する。つまり、ＣＰＵ９１１は、駆動しているＦＦ数が少ないクロックにより駆動されるＦＦを抽出する。そして、処理はステップＳ１０５に進む。
【００４９】
ステップＳ１０５では、ＣＰＵ９１１は、ステップＳ１０４で抽出されたＦＦを始点とする終点側ＦＦを抽出する。つまり、ＣＰＵ９１１は、ステップＳ１０４で抽出されたＦＦからデータが入力される終点側ＦＦを抽出する。そして、処理はステップＳ１０６に進む。
【００５０】
ステップＳ１０６では、ＣＰＵ９１１は、ステップＳ１０４で抽出されたＦＦを終点とする始点側ＦＦを抽出する。つまり、ＣＰＵ９１１は、ステップＳ１０４で抽出されたＦＦにデータを出力する始点側ＦＦを抽出する。そして、処理はステップＳ１０７に進む。
【００５１】
なお、終点側ＦＦ及び始点側ＦＦを抽出する場合に、ステップＳ１０４で抽出されたＦＦと異なるクロックで駆動されていることを条件に用いても良い。具体的には、ステップＳ１０４で抽出されたＦＦとデータの授受を行うＦＦが、当該抽出されたＦＦと同一のクロックで駆動されている場合には、そのようなＦＦを終点側ＦＦ又は始点側ＦＦとして抽出しなくても良い。
【００５２】
ステップＳ１０７では、ＣＰＵ９１１は、ステップＳ１０５及びＳ１０６で抽出された終点側ＦＦ及び始点側ＦＦのそれぞれのクロック分岐点を抽出する処理（以下、「分岐点抽出処理」と呼ぶ。）を行う。そして、処理はステップＳ１０８に進む。
【００５３】
ここで、図１２乃至図１５を参照して、ステップＳ１０７における分岐点抽出処理について具体的に説明する。
【００５４】
分岐点抽出処理の概要について、簡単に説明する。分岐点抽出処理は、２段階の処理によって行われる。以下では、最初に行われる処理を「第１分岐点抽出処理」と呼び、第１分岐点抽出処理の後に行われる処理を「第２分岐点抽出処理」と呼ぶ。
【００５５】
第１分岐点抽出処理では、まず、ＣＰＵ９１１は、ステップＳ１０５及びＳ１０６で抽出された終点側ＦＦ及び始点側ＦＦのそれぞれについて、終点側ＦＦ及び始点側ＦＦのクロック端子を駆動するセル（以下、適宜「第１セル」と呼ぶ。）を抽出する。そして、ＣＰＵ９１１は、抽出された第１セルが駆動するＦＦの中に終点側ＦＦ及び始点側ＦＦ以外のＦＦが存在する場合には、第１セルを複製して、複製されたセル（以下、適宜「第２セル」と呼ぶ。）によって終点側ＦＦ及び始点側ＦＦが駆動されるように接続変更を行う。これに対して、ＣＰＵ９１１は、第１セルが駆動するＦＦの中に終点側ＦＦ及び始点側ＦＦ以外のＦＦが存在しない場合には、第１セルを複製せずに、第１セルを分岐点として抽出する。ＣＰＵ９１１は、このような第１分岐点抽出処理を、ステップＳ１０５及びＳ１０６で抽出された終点側ＦＦ及び始点側ＦＦの全てに対して実行する。
【００５６】
次に、第２分岐点抽出処理では、ＣＰＵ９１１は、第１分岐点抽出処理で複製された第２セルについて、当該第２セルを駆動するセル（以下、適宜「第３セル」と呼ぶ。）を抽出する。そして、ＣＰＵ９１１は、抽出された第３セルが駆動するセル（以下、適宜「第４セル」と呼ぶ。）を更に抽出する。次に、ＣＰＵ９１１は、第４セルの中に第１分岐点抽出処理で複製された第２セル以外のセルが存在する場合には、第３セルを複製して、複製されたセル（以下、適宜「第５セル」と呼ぶ。）によって第２セルが駆動されるように接続変更を行う。これに対して、ＣＰＵ９１１は、第４セルの中に第２セル以外のセルが存在しない場合には、第３セルを複製せずに、当該第３セルを分岐点として抽出する。ＣＰＵ９１１は、このような第２分岐点抽出処理を、第１分岐点抽出処理で複製された第２セルの全てに対して実行する。
【００５７】
なお、ＣＰＵ９１１は、抽出された第３セルがクロックルートセルであった場合には、第２分岐点抽出処理を終了する。つまり、ＣＰＵ９１１は、第２分岐点抽出処理を行っている際にクロックルートセルに到達した場合には、第２分岐点抽出処理を終了する。
【００５８】
なお、上記したセル（第１セル〜第５セルなど）としては、例えばゲーティッドクロックバッファや組合回路やセレクタやＦＦや分周ＦＦなどが挙げられる。
【００５９】
図１２は、第１分岐点抽出処理の具体例を示す図である。図１２（ａ）に示す例では、ＦＦ２０１は終点側ＦＦ又は始点側ＦＦであり、ＦＦ２０２は終点側ＦＦ及び始点側ＦＦでないＦＦである。この例では、ＦＦ２０１、２０２のそれぞれのクロック端子は、セル２０３に接続されている。よって、セル２０３は、終点側ＦＦ又は始点側ＦＦであるＦＦ２０１のクロック端子を駆動する第１セルに相当する。この場合、セル２０３が駆動するＦＦの中に終点側ＦＦ及び始点側ＦＦ以外のＦＦ２０２が存在する。そのため、図１２（ｂ）に示すように、セル２０３が複製されてセル２０３ａ（第２セル）が生成されると共に、当該セル２０３ａによってＦＦ２０１が駆動されるようにＦＦ２０１の接続変更が行われる。具体的には、ＦＦ２０１のクロック端子が、セル２０３からセル２０３ａへ接続変更される。
【００６０】
図１３は、第２分岐点抽出処理の具体例を示す図である。図１３において、図１２と同一の符号を付した構成要素については同一の意味を有するものとして、その説明を省略する。
【００６１】
図１３（ａ）に示す例では、セル２０３は第１セルであり、セル２０３ａは第１分岐点抽出処理で複製された第２セルである。この例では、セル２０３、２０３ａのそれぞれのクロック端子は、セル２０４に接続されている。よって、セル２０４は、複製された第２セルを駆動する第３セルに相当する。この場合、セル２０４が駆動するセルの中に第２セル以外のセル２０３が存在する。そのため、図１３（ｂ）に示すように、セル２０４が複製されてセル２０４ａ（第５セル）が生成されると共に、当該セル２０４ａによってセル２０３ａが駆動されるようにセル２０３ａの接続変更が行われる。具体的には、セル２０３ａのクロック端子が、セル２０４からセル２０４ａへ接続変更される。
【００６２】
一方で、図１３（ｃ）に示す例では、セル２０３、２０３ａのそれぞれのクロック端子は、クロックルートセルであるセル２０５（ＦＦ）に接続されている。この例では、抽出された第３セルがクロックルートセルである場合に相当する。そのため、クロックルートセルに到達したとして、第２分岐点抽出処理が終了される。つまり、分岐点抽出処理が終了される。
【００６３】
次に、第１分岐点抽出処理及び第２分岐点抽出処理の具体的なフローチャートについて説明する。
【００６４】
図１４は、第１分岐点抽出処理を示すフローチャートである。このフローも、ＣＰＵ９１１によって実行される。
【００６５】
まず、ステップＳ２０１では、ＣＰＵ９１１は、上記のステップＳ１０５、Ｓ１０６で抽出された終点側ＦＦ又は始点側ＦＦのクロック端子を駆動する第１セルを抽出する。そして、処理はステップＳ２０２に進む。ステップＳ２０２では、ＣＰＵ９１１は、ステップＳ２０１で抽出された第１セルが駆動するＦＦを抽出する。そして、処理はステップＳ２０３に進む。
【００６６】
ステップＳ２０３では、ＣＰＵ９１１は、第１セルが駆動するＦＦの中に終点側ＦＦ及び始点側ＦＦ以外のＦＦが存在するか否かを判定する。
【００６７】
終点側ＦＦ及び始点側ＦＦ以外のＦＦが存在する場合（ステップＳ２０３；Ｙｅｓ）、処理はステップＳ２０４に進む。ステップＳ２０４では、ＣＰＵ９１１は、第１セルを複製し、第２セルを生成する。そして、処理はステップＳ２０５に進む。ステップＳ２０５では、ＣＰＵ９１１は、複製された第２セルで終点側ＦＦ又は始点側ＦＦを駆動する。つまり、ＣＰＵ９１１は、第２セルによって終点側ＦＦ又は始点側ＦＦが駆動されるように、終点側ＦＦ又は始点側ＦＦの接続変更を行う。そして、処理はステップＳ２０６に進む。ステップＳ２０６では、ＣＰＵ９１１は、ステップＳ２０５で接続変更された終点側ＦＦ又は始点側ＦＦを処理対象から除外する。つまり、当該終点側ＦＦ又は当該始点側ＦＦに対する第１分岐点抽出処理が終了したものとして、当該終点側ＦＦ又は当該始点側ＦＦを第１分岐点抽出処理の処理対象から除外する。そして、処理はステップＳ２０８に進む。
【００６８】
一方、第１セルが駆動するＦＦの中に終点側ＦＦ及び始点側ＦＦ以外のＦＦが存在しない場合（ステップＳ２０３；Ｎｏ）、処理はステップＳ２０７に進む。ステップＳ２０７では、ＣＰＵ９１１は、第１セルを複製せずに、第１セルを分岐点として抽出する。そして、処理はステップＳ２０８に進む。
【００６９】
ステップＳ２０８では、ＣＰＵ９１１は、ステップＳ１０５及びＳ１０６で抽出された終点側ＦＦ及び始点側ＦＦの全てに対する処理が終了したか否かを判定する。終点側ＦＦ及び始点側ＦＦの全てに対する処理が終了している場合（ステップＳ２０８；Ｙｅｓ）、処理は終了する。これに対して、終点側ＦＦ及び始点側ＦＦの全てに対する処理が終了していない場合（ステップＳ２０８；Ｎｏ）、処理はステップＳ２０１に戻る。こうすることで、ＣＰＵ９１１は、終点側ＦＦ及び始点側ＦＦの全てに対する処理が終了するまで、上記したステップＳ２０１〜Ｓ２０７の処理を繰り返し行う。
【００７０】
図１５は、第２分岐点抽出処理を示すフローチャートである。このフローも、ＣＰＵ９１１によって実行される。
【００７１】
まず、ステップＳ３０１では、ＣＰＵ９１１は、第１分岐点抽出処理で複製された第２セルを駆動する第３セルを抽出する。そして、処理はステップＳ３０２に進む。ステップＳ３０２では、ＣＰＵ９１１は、クロックルートセルに到達したか否かを判定する。言い換えると、ＣＰＵ９１１は、ステップＳ３０１で抽出された第３セルがクロックルートセルであるか否かを判定する。クロックルートセルに到達した場合（ステップＳ３０２；Ｙｅｓ）、処理は終了する。これに対して、クロックルートセルに到達していない場合（ステップＳ３０２；Ｎｏ）、処理はステップＳ３０３に進む。
【００７２】
ステップＳ３０３では、ＣＰＵ９１１は、ステップＳ３０１で抽出された第３セルが駆動する第４セルを更に抽出する。そして、処理はステップＳ３０４に進む。ステップＳ３０４では、ＣＰＵ９１１は、第４セルの中に第２セル以外のセルが存在するか否かを判定する。
【００７３】
第４セルの中に第２セル以外のセルが存在する場合（ステップＳ３０４；Ｙｅｓ）、処理はステップＳ３０５に進む。ステップＳ３０５では、ＣＰＵ９１１は、第３セルを複製して第５セルを生成し、当該第５セルによって第２セルが駆動されるように当該第２セルの接続変更を行う。そして、処理はステップＳ３０７に進む。
【００７４】
一方、第４セルの中に第２セル以外のセルが存在しない場合（ステップＳ３０４；Ｎｏ）、処理はステップＳ３０６に進む。ステップＳ３０６では、ＣＰＵ９１１は、第３セルを複製せずに、当該第３セルを分岐点として抽出する。そして、処理はステップＳ３０７に進む。
【００７５】
ステップＳ３０７では、ＣＰＵ９１１は、第１分岐点抽出処理で複製された第２セルの全てに対する処理が終了したか否かを判定する。第２セルの全てに対する処理が終了している場合（ステップＳ３０７；Ｙｅｓ）、処理は終了する。これに対して、第２セルの全てに対する処理が終了していない場合（ステップＳ３０７；Ｎｏ）、処理はステップＳ３０１に戻る。こうすることで、ＣＰＵ９１１は、第２セルの全てに対する処理が終了するまで、上記したステップＳ３０１〜Ｓ３０６の処理を繰り返し行う。
【００７６】
次に、図１１に戻って、ステップＳ１０８以降の処理の説明を行う。
【００７７】
ステップＳ１０８では、ＣＰＵ９１１は、上記した分岐点抽出処理で抽出された分岐点に基づいてクロックツリーを分割する。具体的には、ＣＰＵ９１１は、分岐点にセルが存在しない場合、当該分岐点にバッファを挿入する。これと同時に、ＣＰＵ９１１は、挿入したバッファの固有名を記憶させる。一方で、ＣＰＵ９１１は、分岐点にセルが存在する場合には、当該セルをクロックルートセルとして指定すると共に、当該セルの固有名を記憶させる。そして、処理はステップＳ１０９に進む。
【００７８】
ステップＳ１０９では、ＣＰＵ９１１は、分岐点ごとにＣＴＳを実行する。そして、処理はステップＳ１１０に進む。ステップＳ１１０では、ＣＰＵ９１１は、回路全体のＣＴＳを実行する。この場合、ＣＰＵ９１１は、分岐点として抽出されたセルについてはスキュー調整の対象外として、ＣＴＳを実行する。そして、処理は終了する。
【００７９】
ここで、ステップＳ１０９及びＳ１１０の処理を、図１０に示した回路に適用した場合を例に挙げる。この場合、ＣＰＵ９１１は、クロックツリー１１３、１７４、１７５ごとにＣＴＳを実行する。例えば、ＣＰＵ９１１は、クロックツリー１１３→クロックツリー１７４→クロックツリー１７５といった順にＣＴＳを実行する。具体的には、ＣＰＵ９１１は、クロックツリー１１３、１７４、１７５のうちの１つについてＣＴＳを実行している際には、クロックツリー１１３、１７４、１７５のうちの残りの２つについてはスキュー調整の対象外とする。つまり、ＣＰＵ９１１は、クロックツリー１１３、１７４、１７５のうちの残りの２つについてはスキュー調整を行わない。但し、ＣＰＵ９１１は、例えばクロックネットの属性追加などのスキュー調整以外の処理については実行する。つまり、ＣＰＵ９１１は、クロックツリー１１３、１７４、１７５のうちの残りの２つについても、スキュー調整以外の処理は実行する。ＣＰＵ９１１は、このような処理をクロックツリー１１３、１７４、１７５ごとに実行していくことで、クロックツリー１１３、１７４、１７５の全てに対するＣＴＳを完了させる。
【００８０】
また、ＣＰＵ９１１は、セットアップエラー及びホールドエラーの状況に基づいて、クロックツリー１１３、１７４、１７５間の遅延調整を行う。ＣＰＵ９１１は、タイミングエラーが発生している場合、タイミングエラーの発生箇所から、クロックツリー１１３、１７４、１７５内のＦＦを抽出し、当該ＦＦに対してタイミングエラーの発生分に応じたバッファを挿入する。
【００８１】
［変形例］
上記では、クロックツリーを分割すると共にバッファを挿入する実施形態を示したが、この代わりに、バッファを挿入せずに、クロックツリーの分割のみを行うこととしても良い。これによっても、クロック遅延などを容易に調整することができるため、タイミングエラーを適切に収束させることが可能となる。
【符号の説明】
【００８２】
１１１、１１８、１７１、１７２  バッファ
１１２  分周ＦＦ
１１３、１７４、１７５  クロックツリー
１１５、１１６ｘ、１１６ｙ  ＦＦ群
１１５ａ、１１６ａ、１１６ｂ、１５１〜１５５  ＦＦ（フリップフロップ）
１５７、１５８  バッファ
１６１、１６２  クロック
【図１】
0005533564.tif 000002
【図２】
0005533564.tif 000003
【図３】
0005533564.tif 000004
【図４】
0005533564.tif 000005
【図５】
0005533564.tif 000006
【図６】
0005533564.tif 000007
【図７】
0005533564.tif 000008
【図８】
0005533564.tif 000009
【図９】
0005533564.tif 000010
【図１０】
0005533564.tif 000011
【図１１】
0005533564.tif 000012
【図１２】
0005533564.tif 000013
【図１３】
0005533564.tif 000014
【図１４】
0005533564.tif 000015
【図１５】
0005533564.tif 000016