(57)【要約】【課題】複雑化したタイミング制約を満足するシステムＬＳＩの設計を、容易かつ効率的におこない、システムＬＳＩ設計の簡素化・設計期間の短縮化を図ること。【解決手段】クロックツリー生成装置２００は、取得部２０１により、クロックツリー３００のネットリスト、同期グループ情報、およびＦＦなどの回路素子の配置情報を取得し、同期グループＡまたはＢ内に、クロックパス途中に存在するピンがあるか否かを判定する。当該ピンが存在しない場合、従来と同様なクロック合成をおこなう。クロックゲート３０３の入力ピン３０４がクロックパス途中に存在するピンに該当するため、指定部２０２によりクロックゲート３０３の入力ピン３０４が指定されると、クロックツリー３００を分割する。具体的には、この入力ピン３０４が指定されたクロックゲート３０３をサブルートとし、クロックゲート３０３に直結している回路素子群３１１を終端とする第１のサブツリー３２１を、クロックツリー３００から分割する。【選択図】        図３
2006134215.tif 000002
【特許請求の範囲】
【請求項１】
クロックソースから末端の回路素子群までのクロックツリーに関するネットリストと、前記クロックツリーのクロックが同期する同期グループに関する情報とを取得する取得手段と、
前記取得手段によって取得されたネットリストおよび同期グループに関する情報に基づいて、前記クロックツリーの途中のパスに存在する回路素子のピンの指定を受け付ける指定手段と、
前記指定手段によって指定された回路素子のピンに基づいて、前記クロックツリーを複数のサブツリーに分割する分割手段と、
前記分割手段によって分割された複数のサブツリーの遅延調整をおこなうサブツリー遅延調整手段と、
前記サブツリー遅延調整手段によっておこなわれた遅延調整の結果を用いて、前記クロックツリーの遅延調整をおこなうクロックツリー遅延調整手段と、
を備えることを特徴とするクロックツリー生成装置。
【請求項２】
前記分割手段は、
前記クロックツリーから、前記指定手段によってピンが指定された回路素子をサブルートとし、前記末端の回路素子群のうち一部の回路素子を終端とする第１のサブツリーを分割するとともに、前記クロックツリーのうち前記第１のサブツリーを除いた残余のツリーから、前記指定手段によってピンが指定された回路素子を終端とする第２のサブツリーと、前記末端の回路素子群のうち前記一部の回路素子以外の他の回路素子を終端とする第３のサブツリーと、を分割することを特徴とする請求項１に記載のクロックツリー生成装置。
【請求項３】
クロックソースから末端の回路素子群までのクロックツリーに関するネットリストと、前記クロックツリーのクロックが同期する同期グループに関する情報とを取得する取得工程と、
前記取得工程によって取得されたネットリストおよび同期グループに関する情報に基づいて、前記クロックツリーの途中のパスに存在する回路素子のピンを指定する指定工程と、
前記指定工程によって指定された回路素子のピンに基づいて、前記クロックツリーを複数のサブツリーに分割する分割工程と、
前記分割工程によって分割された複数のサブツリーの遅延調整をおこなうサブツリー遅延調整工程と、
前記サブツリー遅延調整工程によっておこなわれた遅延調整の結果を用いて、前記クロックツリーの遅延調整をおこなうクロックツリー遅延調整工程と、
を含んだことを特徴とするクロックツリー生成方法。
【請求項４】
クロックソースから末端の回路素子群までのクロックツリーに関するネットリストと、前記クロックツリーのクロックが同期する同期グループに関する情報とを取得させる取得工程と、
前記取得工程によって取得されたネットリストおよび同期グループに関する情報に基づいて、前記クロックツリーの途中のパスに存在する回路素子のピンを指定させる指定工程と、
前記指定工程によって指定された回路素子のピンに基づいて、前記クロックツリーを複数のサブツリーに分割させる分割工程と、
前記分割工程によって分割された複数のサブツリーの遅延調整をおこなわせるサブツリー遅延調整工程と、
前記サブツリー遅延調整工程によっておこなわれた遅延調整の結果を用いて、前記クロックツリーの遅延調整をおこなわせるクロックツリー遅延調整工程と、
をコンピュータに実行させることを特徴とするクロックツリー生成プログラム。
【請求項５】
請求項４に記載のクロックツリー生成プログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、クロックツリーを生成するクロックツリー生成装置、クロックツリー生成方法、クロックツリー生成プログラムおよび記録媒体に関する。
【背景技術】
【０００２】
タイミング設計とは、システムＬＳＩの回路遅延を見積もり、最適化をおこなって遅延がシステムＬＳＩの正常動作に必要な範囲内にあることを確認する工程のことである。タイミング設計は、製造したシステムＬＳＩが正しく動作することを保証するために必要不可欠であると同時に、作業量が多く、システムＬＳＩ設計工数の中でも大きな割合を占めているため非常に重要である。システムＬＳＩ設計期間の短縮のためには、まず、タイミング設計工数の削減を図る必要がある。
【０００３】
近年のシステムＬＳＩ設計では、低消費電力化、モジュール再利用などの理由により、複雑なタイミング設計上の制約が要求されることが多い。例えば、速く動く必要がない部分は分周して低いクロック周波数を使用したり、クロックゲートを入れて不要なクロックの供給を停止したりすることによって低消費電力化を図ることが一般的に行われている。また、一つのシステムＬＳＩを複数の機器に使うため、タイミング条件が異なる複数の動作モードを用意することもある。このため、システムＬＳＩ設計のタイミング制約は複雑になることが多い。
【０００４】
システムＬＳＩがターゲット周波数で動作するためには、セットアップ制約とホールド制約の２種類のタイミング制約を満たす必要がある。一般的に、送り側のＦＦ（フリップフロップ）から出た信号が、受け側のＦＦに到達するタイミングは、現クロックの後、つぎのクロックの前になければならない。信号の到達が現在のクロックよりも後に届くことを保証するのがホールド制約、つぎのクロックよりも前に届くことを保証するのがセットアップ制約であり、それぞれ信号の伝播時間の最小限、最大限の値を定める。
【０００５】
そして、従来の一般的な設計フローでは、全ＦＦが同一時刻にクロックを受けるものと仮定してＦＦ間のタイミング制約を導き出し、タイミング最適化配置を行った後、スキュー（ＦＦ間のクロック到達時刻の差）を最小化するようにクロックツリーを構築していた。図１１は、従来の一般的な設計フローによって構築されたクロックツリーを示す説明図である。
【０００６】
図１１において、クロック制御回路を制御するＦＦ１と、サブツリーＳＴ１の末端のＦＦと、サブツリーＳＴ２の末端のＦＦは、クロックソースからのクロックによって同期するＦＦである。また、サブツリーＳＴ１のルートにあるＦＦ２は、分周クロック生成用のＦＦ（分周ＦＦ）やクロックゲートである。そして、最後に正確なクロック到達時刻を求めた後、前述の制約に違反するエラーが残っている部分を遅延最適化することによって対処してきた。なお、このような従来の一般的な設計フローによって構築されたクロックツリーのほか、クロックツリーに関する技術は下記特許文献に開示されている。
【０００７】
【特許文献１】特開２００１−１４０５８号公報
【特許文献２】特開２００１−２２８１６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、システムＬＳＩは、モジュールの再利用に伴うクロックソースの数の増加やクロック間の乗り換え、低消費電力化のためのクロックゲートの挿入、分周ＦＦの使用などにより、クロックが複雑化している。したがって、タイミング制約、具体的には、図１１に示したＦＦ１とＦＦ２との間のパスのタイミング制約が厳しくなってシステムＬＳＩ設計が困難になり、設計期間の長期化を招くという問題があった。
【０００９】
例としてクロックゲートについて説明する。クロックゲートとは、低消費電力化のため、動作する必要がないと分かっているモジュールへ到達するクロックの伝播を止めるための素子である。クロックゲートにクロックが到達する時刻は、クロックゲートから最終段のＦＦに到達するのにかかる遅延の分だけ、通常のクロックよりも速いことになる。
【００１０】
図１２は、クロックゲートを利用したタイミング制約を示す説明図である。図１２のようにクロックサイクル５［ns］のＬＳＩで、クロックゲートから最終段のＦＦまでクロックが到達するのに１［ns］かかるとすれば、クロックゲートを制御するためのenable信号は、送り側ＦＦから最大でも４［ns］以内に到達しなければならない。それ以上時間がかかると、止めなければいけないクロックが通過してしまう。
【００１１】
すなわち、クロックゲートを制御するenable信号を終点とするパスがある場合、タイミング制約は、クロックゲートから最終段のＦＦまでクロック信号が伝播するのに要する時間によって決まる。このようなパスを多く持っているＬＳＩでは、配置後にスキューを最小化するクロック合成では不十分であり、システムＬＳＩ設計の困難かつ長期化を招くという問題となった。同様の問題は、クロックゲートだけでなく、分周クロック生成用の回路でも発生していた。
【００１２】
一方、クロックソース内のＦＦは、分周ＦＦやクロックゲートが、クロックを受けるタイミングと同期してクロックを受ける方が好ましい。しかしながら、上述した従来技術では、クロックソースが末端のＦＦと同期しているために設計者が手作業でクロックツリーを分割し、何回もクロックツリー生成プログラムを走らせる必要がある。したがって、従来のように配置後にスキューを最小化するクロック合成では、設計作業に手間がかかってクロックツリー構築が難しくなり、設計期間の長期化を招くという問題があった。
【００１３】
この発明は、上述した従来技術による問題点を解消するため、複雑化したタイミング制約を満足するシステムＬＳＩの設計を、容易かつ効率的におこなうことによって、システムＬＳＩ設計の簡素化および設計期間の短縮化を図ることができるクロックツリー生成装置、クロックツリー生成方法、およびクロックツリー生成プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１４】
上述した課題を解決し、目的を達成するため、この発明にかかるクロックツリー生成装置、クロックツリー生成方法、およびクロックツリー生成プログラムは、クロックソースから末端の回路素子群までのクロックツリーに関するネットリストと、前記クロックツリーのクロックが同期する同期グループに関する情報とを取得し、取得されたネットリストおよび同期グループに関する情報に基づいて、前記クロックツリーの途中のパスに存在する回路素子のピンの指定を受け付け、指定された回路素子のピンに基づいて、前記クロックツリーを複数のサブツリーに分割し、分割された複数のサブツリーの遅延調整をおこない、遅延調整の結果を用いて、前記クロックツリーの遅延調整をおこなうことを特徴とする。
【００１５】
また、前記クロックツリーから、前記ピンが指定された回路素子をサブルートとし、前記末端の回路素子群のうち一部の回路素子を終端とする第１のサブツリーを分割するとともに、前記クロックツリーのうち前記第１のサブツリーを除いた残余のツリーから、前記ピンが指定された回路素子を終端とする第２のサブツリーと、前記末端の回路素子群のうち前記一部の回路素子以外の他の回路素子を終端とする第３のサブツリーと、を分割することとしてもよい。
【００１６】
さらに、前記同期グループが、前記第１のサブツリーの終端の回路素子と、前記第３のサブツリーの終端の回路素子を含む場合、前記クロックツリーの遅延調整をおこなうこととしてもよい。
【００１７】
これらに発明によれば、クロックツリーにクロック制御回路が含まれている場合であっても、スキューを最小化したクロックツリーをあらたに生成することができる。また、クロックパス途中のピンを基準にしてクロックツリーを分割することにより、従来手作業によっておこなっていたサブツリーの分割を自動化でき、作業効率の大幅な向上を図ることができる。
【発明の効果】
【００１８】
本発明にかかるクロックツリー生成装置、クロックツリー生成方法、およびクロックツリー生成プログラムによれば、複雑化したタイミング制約を満足するシステムＬＳＩの設計を、容易かつ効率的におこなうことによって、システムＬＳＩ設計の簡素化および設計期間の短縮化を図ることができるという効果を奏する。
【発明を実施するための最良の形態】
【００１９】
以下に添付図面を参照して、この発明にかかるクロックツリー生成装置、クロックツリー生成方法、およびクロックツリー生成プログラムの好適な実施の形態を詳細に説明する。
【００２０】
（クロックツリー生成装置のハードウェア構成）
まず、この発明の実施の形態にかかるクロックツリー生成装置のハードウェア構成について説明する。図１は、この発明の実施の形態にかかるクロックツリー生成装置のハードウェア構成を示すブロック図である。
【００２１】
図１において、クロックツリー生成装置は、ＣＰＵ１０１と、ＲＯＭ１０２と、ＲＡＭ１０３と、ＨＤＤ（ハードディスクドライブ）１０４と、ＨＤ（ハードディスク）１０５と、ＦＤＤ（フレキシブルディスクドライブ）１０６と、着脱可能な記録媒体の一例としてのＦＤ（フレキシブルディスク）１０７と、ディスプレイ１０８と、Ｉ／Ｆ（インターフェース）１０９と、キーボード１１０と、マウス１１１と、スキャナ１１２と、プリンタ１１３と、を備えている。また、各構成部はバス１００によってそれぞれ接続されている。
【００２２】
ここで、ＣＰＵ１０１は、クロックツリー生成装置の全体の制御を司る。ＲＯＭ１０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ１０３は、ＣＰＵ１０１のワークエリアとして使用される。ＨＤＤ１０４は、ＣＰＵ１０１の制御にしたがってＨＤ１０５に対するデータのリード／ライトを制御する。ＨＤ１０５は、ＨＤＤ１０４の制御で書き込まれたデータを記憶する。
【００２３】
ＦＤＤ１０６は、ＣＰＵ１０１の制御にしたがってＦＤ１０７に対するデータのリード／ライトを制御する。ＦＤ１０７は、ＦＤＤ１０６の制御で書き込まれたデータを記憶したり、ＦＤ１０７に記憶されたデータをクロックツリー生成装置に読み取らせたりする。
【００２４】
また、着脱可能な記録媒体として、ＦＤ１０７のほか、ＣＤ−ＲＯＭ（ＣＤ−Ｒ、ＣＤ−ＲＷ）、ＭＯ、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）、メモリーカードなどであってもよい。ディスプレイ１０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ１０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００２５】
Ｉ／Ｆ１０９は、通信回線を通じてインターネットなどのネットワーク１１４に接続され、このネットワーク１１４を介して他の装置に接続される。そして、Ｉ／Ｆ１０９は、ネットワーク１１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ１０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２６】
キーボード１１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス１１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００２７】
スキャナ１１２は、画像を光学的に読み取り、クロックツリー生成装置内に画像データを取り込む。なお、スキャナ１１２は、ＯＣＲ機能を持たせてもよい。また、プリンタ１１３は、画像データや文書データを印刷する。プリンタ１１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００２８】
（クロックツリー生成装置の機能的構成）
つぎに、この発明の実施の形態にかかるクロックツリー生成装置２００の機能的構成について説明する。図２は、この発明の実施の形態にかかるクロックツリー生成装置２００の機能的構成を示すブロック図である。クロックツリー生成装置２００は、取得部２０１と、指定部２０２と、分割部２０３と、サブツリー遅延調整部２０４と、クロックツリー遅延調整部２０５と、から構成される。
【００２９】
取得部２０１は、クロックソースから末端の回路素子群までのクロックツリーに関するネットリストと、クロックツリーのクロックが同期する同期グループに関する情報（同期グループ情報）と、回路素子の配置情報とを取得する。ここで、クロックツリーおよび同期グループについて説明する。図３は、この発明の実施の形態にかかるクロックツリーおよび同期グループを示す説明図である。
【００３０】
図３において、クロックツリー３００は、クロックを生成するクロックソース３０１をルートとし、複数のＦＦなどの末端の回路素子群３１０（３１１、３１２）にまでクロックを伝搬する。また、クロックソース３０１から回路素子群３１１までのクロックパスの途中には、クロック制御回路３０２とクロックゲート（分周クロック生成用ＦＦでもよい）３０３が接続されている。クロック制御回路３０２は、クロックソース３０１からのクロックに応じてクロックゲート３０３を制御する。一方、回路素子群３１２は、クロックソース３０１から直接接続されている。
【００３１】
なお、回路素子群３１１と回路素子群３１２は、クロックソース３０１から同一時刻にクロックを受ける回路素子の集合である。このような回路素子の集合を同期グループと呼ぶ。したがって、回路素子群３１１と回路素子群３１２は、同期グループＡに属することとなる。同様に、クロック制御回路３０２とクロックゲート３０３も、クロックソース３０１から同一時刻にクロックを受ける回路素子の集合であるため、同期グループＢに属することとなる。
【００３２】
また、クロックツリー３００に関するネットリストとは、クロックツリー３００を構成するクロックソース３０１、回路素子群３１０を構成するＦＦ、クロック制御回路３０２、クロックゲート（または分周クロック生成用ＦＦ）３０３などの回路素子や、回路素子間の接続情報であり、初期状態では、バッファは存在しないものとする。したがって、図３に示したクロックツリー３００にもバッファは存在せず、ＦＦのクロックピンやクロックゲート３０３の入力ピン３０４が、クロックソース３０１に直結している。
【００３３】
また、同期グループ情報とは、同期グループに属する回路素子のピン名、たとえば、回路素子がＦＦであればクロックピン名、回路素子がクロックゲート３０３であれば入力ピン名である。また、回路素子の配置情報とは、チップ上における回路素子の座標位置である。なお、一般的に、クロックツリーには、テストモードと通常動作モードを切り替えるためのセレクタなど、様々な回路素子が入っているが、図３では説明を簡単にするため、クロックツリーの途中には、クロックゲート（または分周クロック生成用ＦＦ）３０３以外の論理は存在しないものとしている。
【００３４】
また、上述したネットリスト、同期グループ情報、配置情報は、図示しない外部装置からの受信、ユーザの操作入力、図示しないデータベースやライブラリからの抽出によって取得することができる。なお、この取得部２０１は、具体的には、たとえば、図１に示した入力Ｉ／Ｆ１０９によって、または、図１に示したＲＯＭ１０２、ＲＡＭ１０３、ＨＤ１０５、ＦＤ１０７等に記録されたプログラムを、ＣＰＵ１０１が実行することによってその機能を実現する。
【００３５】
指定部２０２は、取得部２０１によって取得されたネットリストに基づいて、クロックツリー３００の途中のクロックパスに存在する回路素子の指定を受け付ける。具体的には、図３に示したクロックツリー３００の途中のクロックパスに存在するクロックゲート３０３の入力ピン３０４の指定を受け付ける。
【００３６】
入力ピン３０４の指定は、図１に示したキーボード１１０またはマウス１１１などの入力デバイスを操作することによっておこなうことができる。より具体的には、同期グループ内に、クロックツリー３００の途中のクロックパスに存在するクロックゲート３０３がある場合に、その入力ピン３０４を指定することができる。この指定部２０２は、具体的には、たとえば、図１に示した入力Ｉ／Ｆ１０９によって、または、図１に示したＲＯＭ１０２、ＲＡＭ１０３、ＨＤ１０５、ＦＤ１０７等に記録されたプログラムを、ＣＰＵ１０１が実行することによってその機能を実現する。
【００３７】
また、分割部２０３は、指定部２０２によって指定された回路素子のピンに基づいて、クロックツリーを複数のサブツリーに分割する。具体的には、図３において、クロックツリー３００から、指定部２０２によって指定されたクロックゲート３０３の入力ピン３０４をサブルートとし、末端の回路素子群３１０のうち一部の回路素子群３１１を終端とする第１のサブツリー３２１を分割する。
【００３８】
また、分割部２０３は、クロックツリー３００のうち第１のサブツリー３２１を除いた残余のツリーから、指定部２０２によってピンが指定された回路素子を終端とする第２のサブツリーと、クロックツリー末端の回路素子群のうち一部の回路素子以外の他の回路素子を終端とする第３のサブツリーと、を分割する。具体的には、分割部２０３は、残余のツリーに、異なる同期グループが混在している場合に分割処理を実行する。
【００３９】
図４は、分割部２０３によって分割されたサブツリーを示す説明図である。図４において、たとえば、残余のツリー（クロックツリー３００から第１のサブツリー３２１を除いたツリー）に、同期グループＢの回路素子（クロック制御回路３０２、クロックゲート３０３）と、同期グループＡの回路素子（回路素子群３１２）が存在しているため、同期グループごとに分割して第２のサブツリー３２２および第３のサブツリー３２３を生成する。
【００４０】
より具体的には、同期グループＢの回路素子（クロック制御回路３０２、クロックゲート３０３）に関しては、クロックソース３０１の下にあらたにバッファ３０５を挿入し、この挿入されたバッファ３０５をサブルートとし、このバッファ３０５に直結するクロックゲート３０３の入力ピン３０４を終端とする第２のサブツリー３２２を生成する。
【００４１】
また、同期グループＡに関しては、クロックソース３０１の下にあらたにバッファ３０６を挿入し、この挿入されたバッファ３０６をサブルートとし、このバッファ３０６に直結する回路素子群３１２を終端とする第３のサブツリー３２３を生成する。この分割部２０３は、具体的には、たとえば、図１に示したＲＯＭ１０２、ＲＡＭ１０３、ＨＤ１０５、ＦＤ１０７等に記録されたプログラムを、ＣＰＵ１０１が実行することによってその機能を実現する。
【００４２】
また、サブツリー遅延調整部２０４は、分割部２０３によって分割されたサブツリー３２１〜３２３の遅延調整をおこなう。具体的には、サブツリー３２１〜３２３ごとに遅延調整をおこなう。図５は、サブツリー３２１〜３２３の遅延調整を示す概略図である。図５において、チップ５００上には、各サブツリー３２１〜３２３の末端の回路素子のクロックピンｐを配置する（（ａ）初期状態）。回路素子のクロックピンｐの配置位置は、取得部２０１によって取得された配置位置情報、すなわち、チップ５００上の座標位置で設定することができる。
【００４３】
つぎに、一定以上近くにあるクロックピンｐをまとめてクラスタ５０１〜５０４を作成する（（ｂ）クラスタリング）。そして、各クラスタ５０１〜５０４の中心にバッファ５１１〜５１４を配置する（（ｃ）バッファ配置）。そして、遅延調整をおこなう（（ｄ）遅延調整）。バッファ５１１〜５１４の数が２以上であれば、（ａ）初期状態に戻り、バッファをクラスタリングする（（ｂ）クラスタリング）。バッファの数が１、すなわち、クラスタが１個の場合、処理を終了する。
【００４４】
また、（ｄ）遅延調整において、クラスタ５０１〜５０４中央に置いた各バッファ５１１〜５１４に対して、当該バッファ５１１〜５１４がドライブしている入力ピンをサブツリー遅延調整処理対象ピン、当該バッファ５１１〜５１４の出力ピンをサブルートとして、サブツリー遅延調整処理を実行する。
【００４５】
このサブツリー遅延調整処理については、後述するクロックツリー遅延調整処理と同じ処理であるため後述する。このサブツリー遅延調整処理により、サブツリーのサブルートとなるバッファと、終端となる回路素子との間に適宜バッファが挿入されることになり、サブツリー内においてスキューを最小化することができる。
【００４６】
また、クロックパスの途中のピンが同期グループに指定されている場合は、その点で分割されているので、処理対象のサブツリーから見ると、末端のピンになっている。したがって、第２のサブツリー３２２についてもこの方式を適用することができる。このサブツリー遅延調整部２０４は、具体的には、たとえば、図１に示したＲＯＭ１０２、ＲＡＭ１０３、ＨＤ１０５、ＦＤ１０７等に記録されたプログラムを、ＣＰＵ１０１が実行することによってその機能を実現する。
【００４７】
また、クロックツリー遅延調整部２０５は、サブツリー遅延調整部２０４によっておこなわれた遅延調整の結果を用いて、クロックツリー３００の遅延調整をおこなう。具体的には、同期グループが２つ以上のサブツリーにまたがっている場合、サブルートを通るパスの遅延を調整してスキューを最小化する。すなわち、クロックソース３０１から各サブツリーのサブルートまでの遅延時間と、サブツリーのサブルートから末端の各ＦＦまでの遅延時間を計算して合計する。これにより、各サブツリーに対し、クロックソース３０１から末端の各ＦＦまでの遅延時間の最大値と最小値を算出することができる。
【００４８】
そして、クロックソース３０１から末端の各ＦＦまでの遅延の最大値が最も大きいサブツリーに対しては、ルートを通るパスの遅延を速くする。一方、クロックソース３０１から末端の各ＦＦまでの遅延時間の最小値が最も小さいサブツリーに対しては、ルートを通るパスの遅延を遅くする。これにより、クロック信号の到達時間（伝搬時間ともいう）の最大値と最小値の差（＝スキュー）が小さくなる。
【００４９】
スキューが十分小さくなるか、遅延調整ができなくなるまでこの処理を繰り返す。このクロックツリー遅延調整部２０５は、具体的には、たとえば、図１に示したＲＯＭ１０２、ＲＡＭ１０３、ＨＤ１０５、ＦＤ１０７等に記録されたプログラムを、ＣＰＵ１０１が実行することによってその機能を実現する。
【００５０】
（クロックツリー生成処理手順）
つぎに、この発明の実施の形態にかかるクロックツリー生成処理手順について説明する。図６は、この発明の実施の形態にかかるクロックツリー生成処理手順を示すフローチャートである。まず、取得部２０１により、クロックツリーのネットリスト、同期グループ情報、およびＦＦなどの回路素子の配置情報を取得する（ステップＳ６０１）。
【００５１】
つぎに、同期グループＡまたはＢ内に、クロックパス途中に存在するピンがあるか否かを判定する（ステップＳ６０２）。当該ピンが存在しない場合（ステップＳ６０２：Ｎｏ）、従来と同様なクロック合成をおこなって（ステップＳ６０３）、処理を終了する。
【００５２】
一方、図３においては、クロックゲート３０３の入力ピン３０４がクロックパス途中に存在するピンに該当する。このように、当該ピンが存在する場合（ステップＳ６０２：Ｙｅｓ）、クロックゲート３０３の入力ピン３０４が指定されると（ステップＳ６０４：Ｙｅｓ）、クロックツリー３００を分割する（ステップＳ６０５）。具体的には、この入力ピン３０４が指定されたクロックゲート３０３をサブルートとし、クロックゲート３０３に直結している回路素子群３１１を終端とする第１のサブツリー３２１を、クロックツリー３００から分割する。
【００５３】
また、残余のツリーに、異なる同期グループＡ、Ｂが混在している場合、当該残余のツリーから、指定部２０２によってピン（入力３０４）が指定された回路素子（クロックゲート３０３）を終端とする第２のサブツリー３２２と、クロックツリー３００の末端の回路素子群３１０のうち一部の回路素子群３１１以外の他の回路素子３１２を終端とする第３のサブツリー３２３と、を分割する。
【００５４】
つぎに、サブツリー遅延調整処理を実行する（ステップＳ６０６）。具体的には、図５に示したクラスタ５０１〜５０４の中央に置いた各バッファ５１１〜５１４に対して、そのバッファ５１１〜５１４がドライブしている入力ピンを遅延調整処理対象ピン、バッファ５１１〜５１４の出力ピンをサブルートとして、サブツリー遅延調整処理をおこなう。
【００５５】
より具体的には、遅延調整処理対象ピンリスト内の各ピンに対し、時刻０に出発したクロック信号が、サブツリーの末端の各ピンに到達する時刻を算出し、時刻の最大値と最小値を記憶する。実際は、末端のピンまでのクロック信号の到達時間の最大値および最小値の計算は、毎回算出しなおす必要はなく、ピンごとに時刻の最大値および最小値を記憶することによって効率的な計算が可能である。
【００５６】
そして、遅延調整処理ルートから各遅延調整処理対象ピンにクロック信号が到達するまでの時間を算出し、時刻の最大値および最小値に加え、時刻の最大値で遅延調整処理対象ピンをソートする。このあと、各ピンｐに対し時刻の最大値が小さい順に以下の処理をおこなう。
【００５７】
ピンｐの直前にバッファを挿入したと仮定して、クロック信号がバッファを通過するのにかかる時間ｔを、下記式（１）により算出する。
｜（全ピンの時刻の最大値の中の最大値）−（（ｐの時刻の最大値)＋ｔ）｜
＜｜（全ピンの時刻の最大値の中の最大値）−（ｐの時刻の最大値）｜・・・（１）
【００５８】
上記式（１）を満たす場合、すなわち、バッファを入れるとスキューが小さくなる場合、ピンｐの直前にバッファを挿入する。このあと、遅延調整処理対象ピンリストの記述内容を各クラスタの中央に置いたバッファの入力ピンで置換える。
【００５９】
このサブツリー遅延調整処理のあと、クロックツリー遅延調整処理をおこなう（ステップＳ６０７）。クロックソース３０１をチップの中心に置き、クロックソース３０１を時刻０に信号が出発したと仮定して、クロックツリー３００内の各ピンにクロック信号が到達する時刻を算出する。
【００６０】
すなわち、図３に示したように、複数のサブツリー３２１、３２３にまたがった同期グループＡが存在した場合、その同期グループＡに属するサブツリー３２１、３２３のルートピンのリストを遅延調整処理対象ピンリスト、クロックツリー３００全体のソースを遅延調整処理対象ルートとして、クロックツリー遅延調整処理を実行する。図７は、クロックツリー遅延調整処理の処理開始状態を示す説明図である。図７において、サブツリー７０１〜７０４のサブルート７１１〜７１４の入力ピン７２１〜７２４が、遅延調整処理対象ピンとされている。また、各サブツリー７０１〜７０４は、上述したサブツリー遅延調整処理によって調整済みのサブツリーである。
【００６１】
そして、遅延調整処理対象ピン（入力ピン７２１〜７２４）に対し、時刻０に出発したクロック信号が、クロックツリー３００の末端の回路素子の各ピンに到達する時刻を算出し、算出時刻の最大値と最小値を記憶する。なお、実際には、末端の回路素子のピンまでのクロック到達時刻の最大値および最小値の算出は、毎回算出しなおす必要はなく、ピンごとに時刻の最大値および最小値を記憶することによって効率的に算出処理をおこなうことができる。
【００６２】
さらに、遅延調整処理ルートから各遅延調整処理対象ピンにクロック信号が到達するまでの時刻を算出して、算出された遅延時刻の最大値および最小値に加算し、その最大値で遅延調整処理対象ピンをソートする。このあと、各ピンｐに対し時刻の最大値が小さい順に以下の処理をおこなう。図８は、クロックツリー遅延調整処理において遅延時刻を算出した状態を示す説明図である。
【００６３】
図８では、一例として、処理ルート８０１における遅延時刻の最大値は４［ｎｓ］で最小値は３．５［ｎｓ］、処理ルート８０２における遅延時刻の最大値は４．５［ｎｓ］で最小値は３．８［ｎｓ］となっている。そして、ピンｐの直前にバッファを挿入したと仮定して、バッファをクロック信号が通過するのにかかる時間ｔを下記式（２）により算出する。
｜（全ピンの時刻の最大値の中の最大値）−（（ｐの時刻の最大値）＋ｔ）｜
＜｜（全ピンの時刻の最大値の中の最大値）−（ｐの時刻の最大値）｜・・・（２）
【００６４】
図９は、クロックツリー遅延調整処理においてバッファを挿入した状態を示す説明図である。上記式（２）を満たす場合、すなわち、バッファを入れるとスキューが小さくなる場合、図９に示すように、ピンｐの直前にバッファ９００を挿入する。このように、上述したクロックツリー遅延調整処理（ステップＳ６０７）を実行することにより、クロックツリー生成結果（挿入したバッファの接続関係およびレイアウト位置）を出力することができる。
【００６５】
図１０は、クロックツリー生成結果を論理的に示した説明図である。図１０において、あらたに生成されたクロックツリー１０００は、図４に示したクロックツリー３００のサブツリー３２１、３２３に、それぞれバッファ１００１、１００２、１００３が挿入されたツリーである。このバッファ１００１〜１００３の挿入により、スキューが最小化されている。
【００６６】
以上説明したように、クロックツリー生成装置、クロックツリー生成方法、およびクロックツリー生成プログラムによれば、クロックツリー３００にクロック制御回路３０２が含まれている場合であっても、スキューを最小化したクロックツリー１０００を生成することができる。また、分割部２０３による分割処理により、従来手作業によっておこなっていたサブツリーの分割を自動化でき、作業効率の大幅な向上を図ることができる。
【００６７】
なお、本実施の形態で説明したクロックツリー生成方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な伝送媒体であってもよい。
【００６８】
（付記１）クロックソースから末端の回路素子群までのクロックツリーに関するネットリストと、前記クロックツリーのクロックが同期する同期グループに関する情報とを取得する取得手段と、
前記取得手段によって取得されたネットリストおよび同期グループに関する情報に基づいて、前記クロックツリーの途中のパスに存在する回路素子のピンの指定を受け付ける指定手段と、
前記指定手段によって指定された回路素子のピンに基づいて、前記クロックツリーを複数のサブツリーに分割する分割手段と、
前記分割手段によって分割された複数のサブツリーの遅延調整をおこなうサブツリー遅延調整手段と、
前記サブツリー遅延調整手段によっておこなわれた遅延調整の結果を用いて、前記クロックツリーの遅延調整をおこなうクロックツリー遅延調整手段と、
を備えることを特徴とするクロックツリー生成装置。
【００６９】
（付記２）前記分割手段は、
前記クロックツリーから、前記指定手段によってピンが指定された回路素子をサブルートとし、前記末端の回路素子群のうち一部の回路素子を終端とする第１のサブツリーを分割するとともに、前記クロックツリーのうち前記第１のサブツリーを除いた残余のツリーから、前記指定手段によってピンが指定された回路素子を終端とする第２のサブツリーと、前記末端の回路素子群のうち前記一部の回路素子以外の他の回路素子を終端とする第３のサブツリーと、を分割することを特徴とする付記１に記載のクロックツリー生成装置。
【００７０】
（付記３）前記クロックツリー遅延調整手段は、
前記同期グループが、前記第１のサブツリーの終端の回路素子と、前記第３のサブツリーの終端の回路素子を含む場合、前記クロックツリーの遅延調整をおこなうことを特徴とする付記１または２に記載のクロックツリー生成装置。
【００７１】
（付記４）クロックソースから末端の回路素子群までのクロックツリーに関するネットリストと、前記クロックツリーのクロックが同期する同期グループに関する情報とを取得する取得工程と、
前記取得工程によって取得されたネットリストおよび同期グループに関する情報に基づいて、前記クロックツリーの途中のパスに存在する回路素子のピンを指定する指定工程と、
前記指定工程によって指定された回路素子のピンに基づいて、前記クロックツリーを複数のサブツリーに分割する分割工程と、
前記分割工程によって分割された複数のサブツリーの遅延調整をおこなうサブツリー遅延調整工程と、
前記サブツリー遅延調整工程によっておこなわれた遅延調整の結果を用いて、前記クロックツリーの遅延調整をおこなうクロックツリー遅延調整工程と、
を含んだことを特徴とするクロックツリー生成方法。
【００７２】
（付記５）前記分割工程は、
前記クロックツリーから、前記指定工程によってピンが指定された回路素子をサブルートとし、前記末端の回路素子群のうち一部の回路素子を終端とする第１のサブツリーを分割するとともに、前記クロックツリーのうち前記第１のサブツリーを除いた残余のツリーから、前記指定工程によってピンが指定された回路素子を終端とする第２のサブツリーと、前記末端の回路素子群のうち前記一部の回路素子以外の他の回路素子を終端とする第３のサブツリーと、を分割することを特徴とする付記４に記載のクロックツリー生成方法。
【００７３】
（付記６）前記クロックツリー遅延調整工程は、
前記同期グループが、前記第１のサブツリーの終端の回路素子と、前記第３のサブツリーの終端の回路素子を含む場合、前記クロックツリーの遅延調整をおこなうことを特徴とする付記４または５に記載のクロックツリー生成方法。
【００７４】
（付記７）クロックソースから末端の回路素子群までのクロックツリーに関するネットリストと、前記クロックツリーのクロックが同期する同期グループに関する情報とを取得させる取得工程と、
前記取得工程によって取得されたネットリストおよび同期グループに関する情報に基づいて、前記クロックツリーの途中のパスに存在する回路素子のピンを指定させる指定工程と、
前記指定工程によって指定された回路素子のピンに基づいて、前記クロックツリーを複数のサブツリーに分割させる分割工程と、
前記分割工程によって分割された複数のサブツリーの遅延調整をおこなわせるサブツリー遅延調整工程と、
前記サブツリー遅延調整工程によっておこなわれた遅延調整の結果を用いて、前記クロックツリーの遅延調整をおこなわせるクロックツリー遅延調整工程と、
をコンピュータに実行させることを特徴とするクロックツリー生成プログラム。
【００７５】
（付記８）前記分割工程は、
前記クロックツリーから、前記指定工程によってピンが指定された回路素子をサブルートとし、前記末端の回路素子群のうち一部の回路素子を終端とする第１のサブツリーを分割させるとともに、前記クロックツリーのうち前記第１のサブツリーを除いた残余のツリーから、前記指定工程によってピンが指定された回路素子を終端とする第２のサブツリーと、前記末端の回路素子群のうち前記一部の回路素子以外の他の回路素子を終端とする第３のサブツリーと、を分割させることを特徴とする付記７に記載のクロックツリー生成プログラム。
【００７６】
（付記９）前記クロックツリー遅延調整工程は、
前記同期グループが、前記第１のサブツリーの終端の回路素子と、前記第３のサブツリーの終端の回路素子を含む場合、前記クロックツリーの遅延調整をおこなわせることを特徴とする付記７または８に記載のクロックツリー生成プログラム。
【００７７】
（付記１０）付記７〜９のいずれか一つに記載のクロックツリー生成プログラムを記録したコンピュータ読み取り可能な記録媒体。
【産業上の利用可能性】
【００７８】
以上のように、本発明にかかるクロックツリー生成装置、クロックツリー生成方法、およびクロックツリー生成プログラムは、システムＬＳＩ設計で使用するＣＡＤツールとして利用することができる。
【図面の簡単な説明】
【００７９】
【図１】この発明の実施の形態にかかるクロックツリー生成装置のハードウェア構成を示すブロック図である。
【図２】この発明の実施の形態にかかるクロックツリー生成装置の機能的構成を示すブロック図である。
【図３】この発明の実施の形態にかかるクロックツリーおよび同期グループを示す説明図である。
【図４】分割部によって分割されたサブツリーを示す説明図である。
【図５】サブツリーの遅延調整を示す概略図である。
【図６】この発明の実施の形態にかかるクロックツリー生成処理手順を示すフローチャートである。
【図７】クロックツリー遅延調整処理の処理開始状態を示す説明図である。
【図８】クロックツリー遅延調整処理において遅延時刻を算出した状態を示す説明図である。
【図９】クロックツリー遅延調整処理においてバッファを挿入した状態を示す説明図である。
【図１０】クロックツリー生成結果を論理的に示した説明図である。
【図１１】従来の一般的な設計フローによって構築されたクロックツリーを示す説明図である。
【図１２】クロックゲートを利用したタイミング制約を示す説明図である。
【符号の説明】
【００８０】
２００  クロックツリー生成装置
２０１  取得部
２０２  指定部
２０３  分割部
２０４  サブツリー遅延調整部
２０５  クロックツリー遅延調整部
３００  クロックツリー
３０１  クロックソース
３０２  クロック制御回路
３０３  クロックゲート
３０４  入力ピン
３０５、３０６  バッファ
３１２  回路素子群
３２１  第１のサブツリー
３２２  第２のサブツリー
３２３  第３のサブツリー
【図１】
2006134215.tif 000003
【図２】
2006134215.tif 000004
【図３】
2006134215.tif 000005
【図４】
2006134215.tif 000006
【図５】
2006134215.tif 000007
【図６】
2006134215.tif 000008
【図７】
2006134215.tif 000009
【図８】
2006134215.tif 000010
【図９】
2006134215.tif 000011
【図１０】
2006134215.tif 000012
【図１１】
2006134215.tif 000013
【図１２】
2006134215.tif 000014