(57)【特許請求の範囲】
【請求項１】
複数の金属配線層を有する半導体装置であって、
前記クロックは第1のクロックと、前記第1のクロックとは系統の異なる第２のクロックとを有し、
複数の最終段クロックバッファのいずれかと結線される複数個の第1のクロック幹線および複数個の第２のクロック幹線を含むクロック分配回路と、
前記第1または第２のクロック幹線のいずれか一つからクロックを受ける複数個のフリップフロップから、それぞれがなる第１および第２のフリップフロップ群とを有し、
前記第1のクロック幹線には前記第1のクロックが供給され、前記第２のクロック幹線には前記第２のクロックが供給され、
上記複数個の前記第１および前記第２のクロック幹線は第１の方向に延在し、
上記第１の方向は、上記金属配線層に形成される最下層の第１の電源幹線VDDと第２の電源幹線VSSが延在する方向に等しく、
隣接し、かつ、平面的にみて平行な２つの上記第１および前記第２の電源幹線の間の領域にセル配置可能列が定義され、
上記第１のクロック幹線から上記第１のクロックを受ける複数の第１のフリップフロップが位置するセル配置可能列の数と上記第２のクロック幹線から上記第２のクロックを受ける複数の第２のフリップフロップが位置するセル配置可能列の数が異なり、
前記最終段クロックバッファとして複数個のサブブロックが前記第１の方向と直交する方向に複数個設けられ、
一の前記第１のクロック幹線に結線された前記第１のフリップフロップ群が対応する第１の前記サブブロックに属する第１および第２のバッファをショートさせ、かつ、それを介して、前記第１のクロックを前記一の第１のクロック幹線を介して前記第１のフリップフロップ群に供給し、
前記一の前記第1のクロック幹線とは別個の前記第1のクロック幹線に結線された前記第２のフリップフロップ群が対応する第２の前記サブブロックに属する第３のバッファのみから前記第１のクロックを前記別個の前記第1のクロック幹線を介して、前記第２のフリップフロップ群に供給することを特徴とする半導体装置。
【請求項２】
請求項１において、
上記第１のクロック幹線は、上記複数の第１のフリップフロップの上記第１の方向に直交する第２の方向の分布の重心に位置し、
上記第２のクロック幹線は、上記複数の第２のフリップフロップの上記第２の方向の分布の重心に位置する半導体装置。
【請求項３】
請求項１において、
上記クロック分配回路は、初段クロックバッファから上記最終段の一つ前のクロックバッファはＨツリー構造を有する半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は半導体装置に関し、特にクロック信号の同期ずれを低減させたクロック分配回路を備えた半導体装置及びその設計方法に関する。
【背景技術】
【０００２】
クロック信号に同期して動作する順序回路を含む大規模半導体集積回路（以下、ＬＳＩという）において、クロック分配により生じるクロック信号の同期ずれ（以下、クロックスキューという）は、ＬＳＩの動作周波数を直接低下させる要因の一つである。ＬＳＩの高速化に伴い、１マシンサイクルに占めるクロックスキューの割合が大きくなってきており、ＬＳＩの高速動作を実現するためには、クロックスキューの低減が必要である。
【０００３】
クロック分配回路としてはいくつかの回路形式が知られている。図１に示すのはＨツリー型クロック分配回路である。Ｈツリーに代表される木構造型クロック分配は、各段のクロックバッファ負荷が完全に均等であれば理論上クロックスキュー０を実現することができることが知られている。しかし実際には、全クロック同期回路に対して木構造型クロックを均等設計することは困難であり、クロックバッファ駆動力ばらつきや配線寄生成分によりクロックスキューが発生する。
【０００４】
なお、発明完成後に、最終段バッファを縦列配置したフィッシュボーンクロックツリーという観点で公知例を調査した結果、特許文献１〜３が見出された。しかしながら、いずれもセル配置可能列と対応して規則的に最終段バッファが配置されている。
【０００５】
【特許文献１】特開平６−２６０５５５号公報
【特許文献２】特開平５−２５９４１４号公報
【特許文献３】特開平５−７３１６７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
全クロック同期回路に対して木構造型クロックを均等設計することは困難であるため、半導体チップを複数領域に分割し、Hツリーによるクロック分配を実施する。図１の例では、４×４の領域に分割しており、Ｈツリーは、初段クロックドライバ１０２−第２段クロックドライバ１０３−第３段クロックドライバ１０４で構成されている。この場合は第３段クロックドライバが最終段クロックドライバとなる。各最終段クロックドライバ１０４−ｉは対応する領域（サービスエリア）１０５−ｉに位置するフリップフロップにクロックを供給する。
【０００７】
ＬＳＩにおけるクロック分配の設計は一般的に自動配置配線（ＣＴＳ：クロック・ツリー・シンセシス）で行われる。ＣＴＳでは、配線長、抵抗、容量を考慮し、クロックドライバ１０４からクロック分配されるフリップフロップ２００までのクロックスキューが最小となるように配線経路をコンピュータで決定する方法である。この方式で生成されるクロックツリーをルーティッドツリーと呼ぶ。しかし、ルーティッドツリー方式によるクロック分配方式は、領域１０５にクロック分配されるフリップフロップ２００がクロックドライバの駆動力に対して過剰である場合やフリップフロップ２００が領域全面に分散している状態などでは、ＣＴＳでは領域周辺を迂回するような配線を選択するような場合がある。一方、設計段階においてクロックスキューの見積もりに用いられる仮想配線長はクロックドライバとフリップフロップとのマンハッタン長によって算出することが多く、この場合ＣＴＳで決定された実配線長が仮想配線長よりも大幅に上回る結果となり、設計不具合の原因になりうる。あるいは、クロック配線をメッシュ構造としてクロックスキューを最小化する手法もある（図２(b)）。メッシュ構造は配線物量が増加するため、消費電力が増大する。また、一般信号の配線が困難になる場合があるという問題があった。
【課題を解決するための手段】
【０００８】
本発明の代表的なものの一例を示せば以下の通りである。複数の金属配線層を有する半導体装置であって、最終段クロックバッファを構成する複数のバッファ及び複数の最終段バッファのいずれかと接続される複数のクロック幹線を含むクロック分配回路と、複数のクロック幹線のいずれか一つからクロックを受ける複数のフリップフロップとを有し、複数のクロック幹線は第１の方向に延在し、第１の方向は、金属配線層に形成される最下層の電源幹線が延在する方向に等しく、隣接する電源幹線によりセル配置可能列が定義され、複数のクロック幹線は第１のクロック幹線と第２のクロック幹線とを含み、第１のクロック幹線からクロックを受ける複数の第１のフリップフロップが位置するセル配置可能列の数と第２のクロック幹線からクロックを受ける複数の第２のフリップフロップが位置するセル配置可能列の数が異なる。
【発明の効果】
【０００９】
クロック分配回路によって供給されるクロックのクロックスキューを低減する。
【発明を実施するための最良の形態】
【００１０】
以下、本発明の実施の形態を図面を用いて詳細に説明する。図３に示すように、本発明においては、クロック分配回路の上流（クロックバッファ３０２まで）はＨツリーでクロック分配を行い、最終段クロックバッファ３０３はローカルフィッシュボーン構造によるクロック分配を行う。最終段クロックバッファ３０３−ｉは、対応する領域（サービスエリア）３０４−ｉに位置するフリップフロップＦＦにクロックを供給する。
【００１１】
以下、最終段クロックバッファ３０３の配置配線方法について説明する。図４は、図３のクロック分配回路をレイアウトする場合の最初の状態を示している。最終段の一つ前のクロックバッファ３０２までは、Hツリー構成によるクロックバッファを配置する。また、クロック配線は他の信号線からの影響を防止するために、クロック配線の両側にシールド配線を設けることが望ましい。
【００１２】
図４に示すように、初期配置では、最終段クロックバッファ３０３−ｉはそれぞれ複数のサブブロックＭ２から構成され、サブブロックＭ２は各サービスエリア３０３内に縦列に均等配置される。最終段クロックバッファ３０３−ｉとして初期配置でサブブロックＭ２を図４のように均等配置した場合、対応するサービスエリア３０４−ｉの全てにフリップフロップが敷き詰められた場合でも、供給可能な駆動能力を有するようにサブブロックＭ２を構成するクロックバッファの駆動能力を決めておく。もちろん別の基準によってサブブロックＭ２の駆動能力の基準を決めてもよい。
【００１３】
レイアウト工程において、自動配置前の段階では最終段クロックバッファを含む全クロックバッファの配置および最終段の一つ前のクロックバッファ３０２までのクロック配線は行うが、最終段の一つ前のクロックバッファ３０２と最終段クロックバッファ３０３間のクロック配線３３１〜３３４は実施しない。自動配置処理を実施して、フリップフロップの配置が決定した時点で最終段クロックバッファ３０３を構成するサブブロックＭ２の配置の確定及びサブブロックＭ２とフリップフロップ間の結線を行い、その後、サブブロックＭ２と最終段の一つ前のクロックバッファ３０２を構成するサブブロックＭ１との間の結線を行う。サブブロックＭ１とサブブロックＭ２間のクロック配線についても他の信号線からの影響を防止するために、クロック配線の両側にシールド配線を設けることが望ましい。
【００１４】
サブブロックＭ２〜フリップフロップ間配線は、ローカルフィッシュボーン構造となるように配線を行う。ここでローカルフィッシュボーン構造とは、図５に示すように、最終段クロックバッファＭ２と接続されるフリップフロップ（領域５０１に含まれるフリップフロップ）のＹ方向の分布の重心に、Ｘ方向のクロック幹線５０２を配し、クロック幹線５０２と直行する配線５０３によってクロック幹線５０２とフリップフロップとを接続を行う構造をいう。ローカルフィッシュボーン構造では、クロックバッファ駆動力とクロックバッファ−フリップフロップ間のマンハッタン距離を仮想配線長として計算される配線遅延・負荷遅延と実配線後の配線遅延・負荷遅延との誤差が最小化されるため、仮想配線長と実配線長の乖離による設計不良の発生を抑止できる。
【００１５】
自動配置が終了したサブブロックＭ２付近のサービスエリアのスタンダードセル配置を示したものが図６である。ただし、セルとしては、サブブロックＭ２とフリップフロップＦＦ１、ＦＦ２のみを示し、配置される各種のセルについては示していない。電源幹線（金属配線）ＶＤＤ１〜４／ＶＳＳ１〜３は最下層の電源幹線を示している。隣接する電源幹線ＶＤＤ（高電位側電源幹線）と電源幹線ＶＳＳ（低電位側電源幹線）にはさまれた領域がセル配置可能列ＲＯＷ１〜６である。このセル配置可能列ＲＯＷにセルが配置される。
【００１６】
初期配置において、２ＲＯＷおきに（図の例ではＲＯＷ２、ＲＯＷ４、ＲＯＷ６）サブブロックＭ２が配置されている。また、図６の例では２系統のクロックが使用されることを想定し、クロックＣＫ１で動作するフリップフロップＦＦ１とクロックＣＫ２で動作するフリップフロップＦＦ２とが混在している。このように２系統のクロックが使用される場合には、上流の（すなわちＨツリーで構成される）クロック分配回路を構成するクロックバッファはそれぞれクロックＣＫ１を駆動するクロックバッファとクロックＣＫ２を駆動するクロックバッファに分けられ、対応するクロックバッファ同士が配線されている。これに対して、この初期配置においては、サブブロックＭ２がどちらのクロックを駆動するかは定まっていない。なお、このサブブロックＭ２は、実回路としては低い駆動能力の複数のバッファ群によって構成されるものとする。以下、２つのバッファによりサブブロックＭ２が構成されているものとして説明を続ける。
【００１７】
サブブロックＭ２は、自動配置後、サブブロック繰り返し間隔（この例では２ＲＯＷ）を縦辺とする矩形内に分布するフリップフロップを必要なクロック毎に分類する。図６の例ではサブブロック６０１に対応する矩形６１１に含まれるフリップフロップを、サブブロック６０２に対応する矩形６１２に含まれるフリップフロップを、サブブロック６０３に対応する矩形６１３に含まれるフリップフロップを分類する。その様子をサービスエリア３０４−１について示したものが図７である。矩形７０１〜７０５それぞれについて、図５に示すようなローカルフィッシュボーン構造を想定した負荷容量を計算し、遅延が目標範囲内に収まるか判定する。図８がクロック分配例である。１つのバッファの駆動力では矩形内のフリップフロップに供給するための駆動能力が不足する場合、同じサブブロックに属するバッファの出力をショートさせる（８０１）。なお、初期配置で矩形内が全て同じクロックが供給されるフリップフロップが密集した場合でも十分な駆動能力が確保されるよう、バッファの駆動力を決めておくことで、サブブロックをまたがってバッファ出力をショートさせる必要はなくなる。逆に、１つのバッファでも駆動力が過剰な場合、隣接矩形を統合する（８０２）。統合矩形８０２はクロックＣＫ１に対応するフリップフロップに対して矩形７０３〜７０５を統合したものである。矩形の統合を行う場合、隣接する２つの矩形でフリップフロップの分類を行ってローカルフィッシュボーン幹線を設定し、幹線最近傍のバッファでローカルフィッシュボーン幹線を駆動した場合の遅延計算を実施する。最近傍クロックバッファでは駆動力が過剰な場合、幹線に次に近い領域内のバッファでローカルフィッシュボーン幹線を駆動した場合の遅延計算を実施する。以上の操作を全フリップフロップへのクロック分配が完了するまで繰り返す。どのクロックにも割り当てられない最終段クロックバッファは削除し、容量セルやタイミング収束工程におけるバッファ領域として利用する。
【００１８】
矩形領域７０１ではクロックＣＫ１を受けるフリップフロップが集中しているため、２つのバッファの出力をショートし（８０１）、矩形領域７０１内のフリップフロップにクロックＣＫ１を分配する。矩形領域７０２ではクロックＣＫ１を受けるフリップフロップとクロックＣＫ２を受けるフリップフロップとがほぼ均等に分布しているため、矩形領域７０２のバッファをそれぞれ一つずつクロックＣＫ１とクロックＣＫ２とに割り当てている。矩形領域７０３〜７０５は、クロックＣＫ１を受けるフリップフロップに関して、それぞれ単独の矩形領域ではクロック供給能力が過剰となるため、矩形領域の統合を実施している（８０２）。先に説明した遅延評価の結果、クロックＣＫ１には矩形領域７０３のバッファ一つが割り当てられ、クロックＣＫ２には矩形領域７０４のバッファ一つが割り当てられている。
【００１９】
なお、ローカルフィッシュボーン幹線は低抵抗であることが望ましいことから、複数の配線層のうち、比較的上の配線層を用いることが望ましい。また、各ローカルフィッシュボーン幹線は同じ配線層に配置する。容量をそろえるためである。
【００２０】
サブブロックＭ２（最終段クロックバッファに対応）とサブブロックＭ１（最終段の一つ前のクロックバッファに対応）との結線について説明する。図７、図８では図示しなかったが、初期配置の段階で、サブブロックＭ１とサブブロックＭ２間にクロック幹線は配置されているが、サブブロックＭ１出力およびサブブロックＭ２の入力は結線されていない。ここでサブブロックＭ１も、比較的低い駆動力のバッファで構成されており、その駆動力の大きさは、サービスエリア３０４−１内に配置可能なサブブロックＭ２のバッファ群が全て同一クロックに割り当てられた場合でも、サブブロックＭ１のバッファ出力をショートすることで充分な駆動力を確保できるように設定されてある。クロック分配が完了し、最終段クロックバッファへのクロック割り当てが決定した段階で必要なサブブロックＭ１の駆動力の計算を行い、サブブロックＭ１とサブブロックＭ２の間のクロック幹線に対してそれぞれの入出力を結線する。
【００２１】
図９にサブブロックＭ１−サブブロックＭ２間のクロック配線の例を示す。クロック分配処理によりサービスエリア３０４−１の最終段クロックバッファとして４つのバッファがクロックＣＫ１に、２つのバッファがクロックＣＫ２に割り当てられ、その他のクロックバッファは削除されている。最終段クロックバッファを構成するバッファ数により、サブブロックＭ１に必要な駆動力が決定される。図９の例では、クロックＣＫ１に対し２つのバッファが、クロックＣＫ２に対し１つのバッファが割り当てられる。２つのクロックＣＫ１に対応するバッファは、クロックＣＫ１に対応するクロック幹線にショート配線される。
【００２２】
なお、最終段の一つ前のクロックバッファ（すなわち、サブブロックＭ１）は初期配置時にHツリーを構成しているため、負荷容量を一定にする必要がある。そのため、サブブロックＭ１の未使用バッファは削除せず、出力オープンの状態とする。また、サブブロックＭ２の出力は、クロック分配処理決定時に利用したローカルフィッシュボーン幹線と結線する。さらにローカルフィッシュボーン幹線とフリップフロップとの配線は、自動配線ツールを用いて行うが、予め幹線が埋め込まれているため配線迂回のポテンシャルは最小化され、目的としたクロックスキューを得ることが出来る。
【００２３】
図１０は、これまで説明したクロック分配回路の設計方法を用いて得られるクロック分配回路を有する半導体装置１００１を示すものである。図１０（ａ）はクロック分配回路を示したものである。半導体装置１００１において、最終段の１つ前のクロックバッファまではＨツリー型のクロック分配回路として構成され、最終段クロックバッファはローカルフィッシュボーン型のクロック分配回路として構成される。領域１００２は、最終段クロックバッファがクロックを供給するサービスエリアである。一方、図１０（ｂ）は最下層の電源幹線（金属配線）を示したものである。図６に示したように、Ｙ方向に隣接するセルで電源幹線は共有されるが、図１０（ａ）とあわせる都合上、セルは小さく描かれている。図１０（ａ）及び図１０（ｂ）から示されるように、本発明のローカルフィッシュボーン幹線は規則的なセル配置可能列とは対応していない。例えば、バッファ１００３の接続されるクロック幹線（ローカルフィッシュボーン幹線）は、２つのセル配置可能列に配置されたフリップフロップにクロックを供給する（図１０（ｂ）の１００５を参照）。一方、バッファ１００４の接続されるクロック幹線（ローカルフィッシュボーン幹線）は、４つのセル配置可能列に配置されたフリップフロップにクロックを供給する（図１０（ｂ）の１００６を参照）。このようにクロック幹線が接続されるフリップフロップのセル配置可能列の数は一定値ではない。このことはすなわち、複数のクロック幹線において、隣接するクロック幹線の間隔のばらつきは、隣接する電源幹線の間隔のばらつきよりも大きくなることを意味している。
【００２４】
図１１に本発明の半導体装置の設計フローを示す。フロアプラン（Ｓ１００）後、クロックバッファの配置を行う（Ｓ１０１）。クロックバッファ配置がマクロセルと重なった場合、仮想配線長から等ディレイ・等スキューとなるように配置移動を行う（Ｓ１０２）。移動結果が目標性能を下回る場合は、フロアプランの再検討を行う（Ｓ１０４）。クロックバッファ配置決定後、クロックバッファ間の配線を行う（Ｓ１０５）。クロックバッファ間配線は、両側にシールド配線を設け、配線抵抗が一定となるように設計する。この段階では、最終段とその一つ前のクロックバッファ間は、幹線は配置するが結線は行わない。実配線による容量値に基づき再度クロックスキューの見積もりを行い、目標未達の場合は、再配線もしくは再配置を行う。目標達成時には、自動配置処理を行い、ＬＳＩ構成セルの全配置を決定する（Ｓ１０７）。フリップフロップ配置情報を基にクロック分配処理を行い、最終段及びその一つ前のクロックバッファ振り分けを決定する（Ｓ１０８）。このとき、不要な最終段クロックバッファに削除も実施する。最終段とその一つ前のクロックバッファ間のクロック幹線への結線処理およびローカルフィッシュボーン幹線の追加を行った後（Ｓ１０９）、自動配線処理を実施する（Ｓ１１０）。自動配線後、STAによるタイミング解析処理を行う（Ｓ１１２）。
【図面の簡単な説明】
【００２５】
【図１】Ｈツリー構造のクロック分配回路を示す図である。
【図２】図２（ａ）はルーティッドツリーによる最終段クロックバッファからのクロック分配方式を、図２（ｂ）はメッシュによる最終段クロックバッファからのクロック分配方式を示す図である。
【図３】本発明のクロック分配回路の構成を示す図である。
【図４】本発明のクロック分配回路を設計する際の初期配置を示す図である。
【図５】本発明におけるローカルフィッシュボーン幹線を示す図である。
【図６】図４に示した初期配置の状態に対応するスタンダードセル配置を示す図である。
【図７】フリップフロップ自動配置後の状態を示す図である。
【図８】図７のフリップフロップに対して最終段クロックバッファからクロック分配を行った状態を示す図である。
【図９】最終段クロックバッファと最終段の一つ前のクロックバッファとの結線状態を示す図である。
【図１０】図１０（ａ）は本発明のクロック分配回路を有する半導体装置を示す図であり、図１０（ｂ）は本発明における電源幹線の配置状態を示す図である。
【図１１】本発明の半導体装置の設計フローを示す図である。
【符号の説明】
【００２６】
ＬＳＩ…大規模集積回路、ＦＦ…フリップフロップ回路、ＳＴＡ…静的タイミング解析、３０３…最終段クロックバッファ、３０４…最終段クロックバッファ群クロック供給領域（サービスエリア）。
【図１】
0005216287.tif 000002
【図２】
0005216287.tif 000003
【図３】
0005216287.tif 000004
【図４】
0005216287.tif 000005
【図５】
0005216287.tif 000006
【図６】
0005216287.tif 000007
【図７】
0005216287.tif 000008
【図８】
0005216287.tif 000009
【図９】
0005216287.tif 000010
【図１０】
0005216287.tif 000011
【図１１】
0005216287.tif 000012