JP2004185466A - 半導体集積回路のクロック分配方法および半導体集積回路 - Google Patents
半導体集積回路のクロック分配方法および半導体集積回路 Download PDFInfo
- Publication number
- JP2004185466A JP2004185466A JP2002353331A JP2002353331A JP2004185466A JP 2004185466 A JP2004185466 A JP 2004185466A JP 2002353331 A JP2002353331 A JP 2002353331A JP 2002353331 A JP2002353331 A JP 2002353331A JP 2004185466 A JP2004185466 A JP 2004185466A
- Authority
- JP
- Japan
- Prior art keywords
- clock
- flip
- flop
- phase
- buffer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Design And Manufacture Of Integrated Circuits (AREA)
Abstract
【課題】CTS実行で形成したクロックツリーから位相を調整したクロックをフリップフロップへ供給することができる半導体集積回路のクロック分配方法を提供する。
【解決手段】ステップS5で生成したタイミング情報データに基づき、ステップS6でタイミングエラー発生フリップフロップを抽出し、ステップS7でこのフリップフロップのタイミングエラーを除くためにクロックの位相を早めるようクロック位相を補正すべきフリップフロップを抽出し、ステップS8で、ステップS4で作成のクロック位相データベースに基づいてクロックツリーの途中段のクロックバッファを選出し、ステップS9でこの選出したクロックバッファが位相補正すべきフリップフロップのクロック供給元となるようにクロックバッファを変更した上で半導体集積回路へクロックを分配する。
【選択図】 図1
【解決手段】ステップS5で生成したタイミング情報データに基づき、ステップS6でタイミングエラー発生フリップフロップを抽出し、ステップS7でこのフリップフロップのタイミングエラーを除くためにクロックの位相を早めるようクロック位相を補正すべきフリップフロップを抽出し、ステップS8で、ステップS4で作成のクロック位相データベースに基づいてクロックツリーの途中段のクロックバッファを選出し、ステップS9でこの選出したクロックバッファが位相補正すべきフリップフロップのクロック供給元となるようにクロックバッファを変更した上で半導体集積回路へクロックを分配する。
【選択図】 図1
Description
【0001】
【発明の属する技術分野】
本発明は、半導体集積回路のクロック分配方法および半導体集積回路に関する。
【0002】
【従来の技術】
論理回路の設計においては、回路動作のタイミング設計を容易にするため、回路内の総てのフリップフロップを同一のクロックに同期させて信号の転送を行う同期式設計が多く採用されている。したがって、このような同期式設計の論理回路を半導体集積回路で実現する場合、半導体集積回路内の総てのフリップフロップに同一時刻でクロックが供給される必要がある。
【0003】
しかしながら、単一のクロックドライバによるクロックの供給では、クロックドライバから各フリップフロップへのクロック配線の長さの違いによって、それぞれのフリップフロップへのクロックの到達時間に差が生じる。半導体製造の微細化の進展に伴う配線幅の縮小による配線抵抗の増大により、このような配線長の違いによるクロック到達時間の差は顕著になり、半導体集積回路の配線設計において無視できなくなってきている。
【0004】
そこで、クロックドライバから各フリップフロップのクロック入力端子までのクロック到達時間がほぼ等しくなるように、バッファツリーを構成してクロック配線を行うことが一般的に行われている。この手法をクロックツリーシンセシス(Clock Tree Synthesis:CTS)と呼んでいる。
【0005】
CTSの実行により、各フリップフロップのクロックスキュー(クロックの到達時間の差すなわち位相差)は一定の範囲内に収まるようになる。
【0006】
このCTSを含む半導体集積回路のレイアウトは計算機により自動的に行われるが、概略次のような工程で進められる。▲1▼フリップフロップも含めて総ての論理セルを配置する工程、▲2▼CTSによるクロック用バッファツリーの配置およびフリップフロップへのクロック配線を行う工程、▲3▼クロック以外の配線を行う工程。
【0007】
上述のように配線工程が2工程に分かれて行われるため、各フリップフロップにおいては、クロックスキューは要求値を満足していても、フリップフロップ間の信号伝播遅延に伴うセットアップタイムまたはホールドタイムが要求値を満足しない場合が生じる。
【0008】
そこで、レイアウト工程終了後、各フリップフロップにセットアップタイムまたはホールドタイムの不足、即ちタイミングエラーが生じていないかを検証するためのタイミング検証が必要になる。
【0009】
タイミング検証の結果、いずれかのフリップフロップにタイミングエラーが生じていた場合には、これをなくすためのタイミング修正が必要になる。このタイミングを修正する方法の一つとして、タイミングエラーの発生したフリップフロップのクロックの位相を修正する方法がある(例えば特許文献1参照。)。
【0010】
この方法は、タイミングエラーの発生したフリップフロップとその前段のフリップフロップの間に意図的にクロックスキューを発生させ、そのクロックスキューを利用してタイミングエラーを解消するものである。
【0011】
一般にCTSにおいては、クロックツリーを構成する各バッファに負荷容量を均等に分配して各バッファの遅延を均等にし、これによってクロックツリーの末端のバッファに接続されるフリップフロップのクロックスキューが極力小さく(理想的には0に)なるように処理される。
【0012】
したがって、上述した意図的にクロックスキューを発生させてフリップフロップのクロックの位相を変化させようとする方法では、対象のフリップフロップの入力端子にダミーの容量を付加し、CTSで見かけ上はクロックスキューが0となるようなクロックツリーを発生させ、実際には対象のフリップフロップにクロックスキューを発生させるという方法を取っている。
【0013】
【特許文献1】
特開2001−175699号公報(第4−10頁、図1および図3)
【0014】
【発明が解決しようとする課題】
上述のクロックスキューを発生させる方法では、一度CTSを実行してクロックツリーを発生させ、各フリップフロップのタイミング検証を行ってタイミングエラー発生のフリップフロップを検出し、該当のフリップフロップのクロック入力端子にダミー容量を付加し、2回目のCTSを実行するという処理を行う。
【0015】
このとき、2回目のCTSの実行前に最初のCTSで発生させたクロックバッファとクロック配線を削除し、2回目のCTSの実行で改めてクロックバッファの配置とクロック配線を行う。
【0016】
したがって、2回目のCTS実行後のクロックバッファの配置とクロック配線は、1回目のCTSの結果とは異なったものとなる。そのため、1回目のCTSの結果ではタイミングエラーの発生しなかったフリップフロップに新たなタイミングエラーが発生する可能性がある。その場合、新たに問題の発生したフリップフロップに上述したようなダミー容量の付加を行い、さらにCTSを実行する必要が生じる。
【0017】
このように、上記の方法ではCTSの実行の度に新たなクロックバッファとクロック配線が発生されるため、その都度新たなタイミングエラーが生じる可能性があるという問題がある。また、CTS実行の度に総てのフリップフロップのタイミング検証を行う必要があり、その実行に多大な時間を要するという問題も発生する。
【0018】
そこで本発明の目的は、少ないCTSの実行回数で、クロックの位相を調整してフリップフロップのタイミングエラーを防止するクロックを供給することのできる半導体集積回路のクロック分配方法および半導体集積回路を提供することにある。
【0019】
【課題を解決するための手段】
上記目的を達成するために、本発明の半導体集積回路のクロック分配方法は、半導体集積回路を構成するフリップフロップからなる複数の論理セルを含む論理セル群を配置するセル配置工程と、複数のクロックバッファからなるクロックツリーを生成するクロックツリーシンセシス工程と、前記論理セル間の信号配線、および前記複数のフリップフロップのクロック入力端子と前記クロックツリーの末端に配置されたクロックバッファとの間のクロック配線を行う配線工程と、前記クロックツリーを構成する総てのクロックバッファの出力遅延時間を算出し、その算出値をそれぞれのクロックバッファのクロック位相として記録したクロックバッファ位相データベースを生成するクロックバッファ位相データベース生成工程と、前記複数のフリップフロップのセットアップ時間及びホールド時間を算出し、それぞれの規定値との差分を前記複数のフリップフロップごとにタイミング情報として出力するタイミング情報生成工程と、前記タイミング情報を検査し、セットアップ時間の規定値に対するエラーあるいはホールド時間の規定値に対するエラーの発生しているフリップフロップには前記タイミング情報にタイミングエラー発生情報を付加してタイミングエラー発生フリップフロップとして抽出するタイミングエラー発生フリップフロップ抽出工程と、前記タイミングエラー発生フリップフロップのタイミングエラーを除くためにクロックの位相を補正すべきフリップフロップを位相補正対象フリップフロップとして抽出する位相補正対象フリップフロップ抽出工程と、前記クロックバッファ位相データベースの情報に基づき、前記位相補正対象フリップフロップの位相を補正するのに適したクロック位相を有するクロックバッファを前記クロックツリーを構成するクロックバッファの中から選出するクロックバッファ選出工程と、前記クロックバッファ選出工程で選出したクロックバッファを前記位相補正対象フリップフロップのクロック供給バッファとするように前記位相補正対象フリップフロップのクロック供給元を変更するフリップフロップのクロック供給元変更工程とを備えることを特徴とする。
【0020】
このような本発明の半導体集積回路のクロック分配方法によれば、少ないCTSの実行回数で、タイミングエラーの発生しない位相を有するクロックをフリップフロップに供給することができる。
【0021】
また、本発明の半導体集積回路は、多段構成の複数のバッファをツリー状に配置してクロックツリーを形成し、ツリー末端のバッファおよびツリー途中段のバッファから複数のフリップフロップへそれぞれクロックを供給するクロック分配回路を有することを特徴とする。
【0022】
このような本発明の半導体集積回路によれば、フリップフロップごとにタイミングエラーの発生しない位相を有するクロックを選んで分配することができる。
【0023】
【発明の実施の形態】
以下、図面を参照しながら本発明の実施の形態を説明する。
【0024】
(実施の形態)
図1は本発明の実施の形態に係る半導体集積回路のクロック分配方法を示すフロー図であり、図2はクロックツリーおよびクロック配線を模式的に示す回路図である。
【0025】
図1の最初のステップS1において、図2に示すフリップフロップF01、F02、・・・、多段論理セル3などを含む複数の論理セル群の配置を行った後、ステップS2でCTSを実行し、ツリー状にクロックバッファ群を配置したクロックツリー2を形成する。その後、ステップS3において、フリップフロップF01、F02、・・・、多段論理セル3などの論理セル間の配線およびクロック配線を行う。このとき、クロックツリー2の末端のクロックバッファCKn1、CKn2、・・・と各フリップフロップF01、F02、・・・のクロック入力端子との間にクロック配線がなされる。
【0026】
クロックを発生させるクロック源1に接続されたクロックツリー2は、1段目バッファCK11、2段目バッファCK21、CK22、3段目バッファCK31、CK32、CK33、CK34と段を追って分岐の数を増やしながらバッファを配置し、最終n段目のバッファ群CKn1、CKn2、・・・からフリップフロップF01、F02、・・・へクロックが配線される。
【0027】
このとき、図2に模式的に示すように、フリップフロップへのクロック配線長にはバラツキが生じる。
【0028】
また、フリップフロップF01とフリップフロップF02のようにフリップフロップ間に多段論理セル3が接続される場合もあれば、フリップフロップF03とフリップフロップF04のようにフリップフロップが直接接続される場合もある。
【0029】
図1に戻って、ステップS4でクロック位相データベースが生成される。ここで、クロック位相とは、クロックツリー2を構成する各クロックバッファのクロック源1からのクロック信号の伝播遅延時間を指し、クロック位相データベースとは、クロックツリー2を構成する各クロックバッファのクロック位相を一覧表形式としたものである。
【0030】
図3(a)は、このクロック位相データベースの例を示したものである。また、図3(b)は、クロック位相の分布を模式的に図示したものである。一般的に、クロック位相はクロックツリー2内での段数が多いほど大きくなり、また各段のバッファ群はあるバラツキをもって分布する形となる。
【0031】
再び図1に戻って、ステップS5で各フリップフロップF01、F02、・・・のタイミング情報を生成する。ここでタイミング情報とは、スタティックタイミングアナリシス(Static Timing Analysis:静的タイミング解析)により得られたフリップフロップのクロック入力に対するデータ入力のセットアップ時間およびホールド時間からそれぞれの規定値を差し引いた値を指す。ここで規定値とは、フリップフロップが正常な動作をするために最小限必要な動作余裕時間のことである。
【0032】
次にステップS6で、このタイミング情報を検査し、セットアップ時間あるいはホールド時間がそれぞれの規定値に対して不足しているフリップフロップをタイミングエラー発生フリップフロップとして抽出する。
【0033】
このとき、タイミングエラー発生フリップフロップのタイミング情報には、タイミングエラーがセットアップ時間不足なのかホールド時間不足なのかを識別する違反フラグを付加する。
【0034】
次にステップS7で、前記タイミングエラーを除くためにクロックの位相補正をすべきフリップフロップを抽出する。ここで、位相補正はクロックの位相を早めることにより行うものとする。その理由は、先に図3(b)のクロック位相分布図に見たようにクロックツリー2の途中段には最終段より位相の早いクロックバッファが多数分布しており、これを利用することにより新たなバッファの追加やCTSの再実行等を行うことなくクロックの位相を変えることができるからである。
【0035】
クロックの補正を位相を早めることで行うため、ホールド時間不足のフリップフロップはそのまま位相補正対象フリップフロップとなるが、セットアップ時間不足のフリップフロップについては、このフリップフロップにデータを伝達する前段のフリップフロップが位相補正対象フリップフロップとなる。
【0036】
また、上記位相補正対象フリップフリップに対するクロックの位相補正を行うと、その影響を受けて新たにタイミングエラーの起きるフリップフロップが発生する可能性があるが、その場合、このフリップフロップを新たなタイミングエラー発生フリップフロップとして上記ステップS7の工程を新たに実行する。
【0037】
この位相補正対象フリップフロップ抽出の方法については、後で詳しく説明する。
【0038】
次にステップS8で、前記クロック位相データベースを参照して、上記位相補正に適した位相を持つクロックバッファをクロックツリー2の途中段のクロックバッファの中から選出する。
【0039】
最後にステップS9で、実際にクロックバッファの接続先を変更し、前記位相補正対象フリップフロップにステップ8で選出したクロックバッファからクロックが供給されるようにしてクロックの分配を終了する。
【0040】
ここで、クロックスキューがタイミングエラーを引き起こす典型的な例を図2の模式的回路図と図4の波形図を用いて説明する。
【0041】
図2のフリップフロップF01とフリップフロップF02の間に多段論理セル3があり、これがクリティカルパスとなっているとする。このとき、フリップフロップF01のクロックの立ち上りがクロックスキューのためフリップフロップF02のクロックの立ち上りより遅れていると、フリップフロップF01のクロックの立ち上りAから多段論理セル3を遅延時間d1で通過したフリップフロップF02の入力信号は、フリップフロップF02のクロックの立ち上りBにおいてセットアップ時間不足(se)を起こす。
【0042】
一方、図2のフリップフロップF03とフリップフロップF04は直結されており、フリップフロップF03の出力は僅かな遅れ時間d2でフリップフロップF04に伝達されているとする。このとき、フリップフロップF04のクロックの立ち上りがクロックスキューのためフリップフロップF03のクロックの立ち上りより早いと、フリップフロップF03のクロックの立ち上りCで出力された信号はいわゆる「データの突き抜け現象」を起こし、本来の動作より1クロック早いクロックDの立ち上りでフリップフロップF04にデータが取り込まれる。このとき、フリップフロップF04に見かけ上のホールド時間不足(he)が生じることがある。
【0043】
このようなタイミングエラーを除くためには、セットアップ時間不足の場合には、前段のフリップフロップ(図2の例ではF01)のクロックの位相を早めればよく、ホールド時間不足の場合には、後段のフリップフロップ(図2の例ではF04)のクロックの位相を早めればよい。
【0044】
次に、本実施の形態で用いるタイミング情報のデータ形式の例を説明する。
【0045】
図5(a)は、図6の回路例に対するタイミング情報のデータ例であり、F/F名、前段F/F名、タイミングマージン、違反フラグおよび移相量の5つのデータが表形式に記載されている。このうち、F/F名、前段F/F名、タイミングマージンの3つのデータは、「タイミング情報生成」(図1のステップS5)より生成される。また、違反フラグおよび移相量の欄は図1のステップS6およびS7の処理で使用される。
【0046】
F/F名はタイミングチェックがなされたフリップフロップの名前を示し、前段F/F名欄には、そのフリップフロップに組み合わせ回路を介して接続される前段のフリップフロップの名前が記される。したがって、図6のname5のフリップのように前段の2個のフリップフロップからの接続がある場合には、F/F名name5の前段F/F名欄には、この2個のフリップフロップの名前name3、name4が2行に亘って記載される。
【0047】
タイミングマージンは、スタティックタイミングアナリシスの結果得られた、各フリップフロップのセットアップ時間およびホールド時間のそれぞれの規定値に対する余裕(タイミングマージン)を記したものである。このタイミングマージンは前段のフリップフロップからの信号伝達経路によって異なるため、前段F/F名ごとにそのデータを記載する。
【0048】
このタイミングマージンの記載の形式は(セットアップ時間余裕、ホールド時間余裕)とするが、セットアップ時間余裕についてはセットアップ時間に余裕がある場合に負号(−)を付けて表わし、セットアップ時間が不足するときに正号(+)付けて表わすものとする。一方、ホールド時間に関しては、不足するときに負号(−)を付けて表わすものとする。
【0049】
したがって、図5(a)では、F/F名name9における(+s8,h8)は、セットアップ時間が時間s8不足していることを表わし、F/F名name5における(−s2,−h2)は、ホールド時間が時間h2不足していることを表わす。
【0050】
図5(b)は、図5(a)のタイミング情報のデータに対して、「タイミングエラー発生フリップフロップの抽出」(図1のステップS6)を行った結果を示す例である。タイミングエラーが検出されたタイミングマージンデータに対して、違反フラグ(setupあるいはhold)を違反フラグ欄に記入している。
【0051】
次に、このタイミング情報を記したデータを操作することにより、タイミングエラーを除くためにクロックの位相を早めるべきフリップフロップを抽出する方法について説明する。
【0052】
図7は、タイミングエラーを除くためにクロックの位相を早めるべきフリップフロップを抽出するために行うタイミング情報を記したデータの操作方法を示すフロー図であり、図1のステップS7の「位相補正対象フリップフロップ抽出」の具体的な方法である。
【0053】
図7のフローにおける作業は、図1のステップS6のタイミングエラー発生フリップフロップ抽出により違反フラグが付加されたタイミング情報データ4に対するデータの書き換え操作によって進められ、作業が終了すると、クロックの位相を早めるべきフリップフロップの名前と位相をどれだけ早めればよいか(移相量)のデータが記載された位相補正対象フリップフロップ抽出データ5が得られる。
【0054】
以下、図7のフローをタイミング情報データ4のデータ形式の例を図5(b)に取りながら説明する。
【0055】
図5のステップS11では、タイミング情報データ4に記載されている違反フラグがholdであるのか、setupであるのか、その種別をチェックする。その種別によって以降の作業フローが分かれる。
【0056】
違反フラグがholdの場合、ステップS12に進む。ステップS12で、holdと記載されているタイミングマージンデータの移相量欄にホールド不足時間(以下、この時間をheと表わす。)を記す。この移相量は、ホールド時間不足が発生しているフリップフロップのクロックの位相をheだけ早めることを意味する。
【0057】
次に、この移相量に合わせて該当フリップフロップのクロックの位相を早めたとすると、その位相を早めたフリップフロップにおける総ての前段F/F名フリップフロップに対するタイミングマージンが変化するので、それを反映するようタイミング情報データ4を書き換える必要がある。
【0058】
そのため、ステップS13で、移相量欄にheと記したフリップフロップのタイミングマージンデータの総ての値に移相量heを加算する。この移相量heの加算は、ホールド時間に対しては余裕がheだけ増加し、セットアップ時間に対しては余裕がheだけ減少することを意味する。
【0059】
また、フリップフロップのクロックの位相を早めると、その出力が接続される後段のフリップフロップ(これを後段F/Fと称す。)のタイミングマージンにも影響を及ぼす。すなわち、後段F/Fにおいては、セットアップ時間に対する余裕の増加とホールド時間に対する余裕の減少という影響が現れる。
【0060】
そこで、この影響をタイミングマージンデータに反映させるため、ステップS14で、タイミング情報データ4の後段F/Fのタイミングマージンデータの総ての値に−heを加算する。このとき、後段F/Fを探し出す必要があるが、その方法としては、違反フラグholdが記載されているフリップフロップの名前が前段F/F名の欄に記載されているフリップフロップをタイミング情報データ4上で探索するという方法を取ればよい。
【0061】
一方、ステップS11で違反フラグがsetupと識別された場合には、ステップS15に進む。
【0062】
ステップS15で、setupと記載されているタイミングマージンデータの移相量欄にセットアップ不足時間(以下、この時間をseと表わす。)に負号を付けて(−se)と記す。移相量は正の値が移相を早めることを意味するので、負号は位相を遅らせることを意味する。しかし、実際のタイミングエラーを除く処理としてはクロックの位相を遅らせることはしないので、仮想の処理を表わす意味で括弧を付けて記載する。
【0063】
セットアップ時間不足に対する実際のタイミングエラーを除く処理は、セットアップ時間不足を起こしているフリップフロップにデータを伝達している前段F/Fのクロックの位相を早めることで行われる。
【0064】
そこで、ステップS16で、セットアップ時間不足を起こしているフリップフロップの前段F/F名欄に名前が記載されているフリップフロップをタイミング情報データ4上で探し、そのフリップフロップの移相量欄にseと記す。
【0065】
次いで、ステップS17で、この移相量欄にseと記したフリップフロップの総てのタイミングマージンデータにseを加算する。
【0066】
また、前段F/Fの位相を早めることで、セットアップ時間不足を起こしているフリップフロップのタイミングエラーは除かれるが、そのほかにも、その出力が伝達される総てのフリップフロップのタイミングマージンに影響を及ぼす。
【0067】
そこで、この影響をタイミングマージンデータに反映させるため、ステップS18で、移相該当のフリップフロップ名が前段F/F名欄に記載されているフリップフロップ(後段F/F)をタイミング情報データ4上で探し、後段F/Fのタイミングマージンデータ総てに−seを加算する。
【0068】
上記フローの処理を行って、タイミング情報データ4のタイミングマージンデータを書き換えた結果がタイミング情報修正データ41として得られる。
【0069】
図8に、図5(b)の例に対するタイミング情報修正データ41の例を示す。以下、図8における処理の進め方を説明する。
【0070】
まず、holdフラグが記されているF/F名name5の移相量欄にh2と記す(ステップS12)。次に、移相量h2を記入したフリップフロップname5の2つのタイミングマージンデータを、従来の(−s2,−h2)、(−s3,h3)から(−s2+h2,0)、(−s3+h2,h3+h2)に書き換える(ステップS13)。次に、前段F/F名にname5が記載されているフリップフロップを探し,該当のフリップフロップname6のタイミングマージンデータを(−s5,−h5)から(−s5−h2,h5−h2)に書き換える(ステップS14)。
【0071】
一方、setupフラグが記載されているフリップフロップに対しては、F/F名name9の移相量欄に(−s8)と記す(ステップS15)。次に、セットアップ時間不足を発生させる前段F/Fであるname8のフリップフロップを探し、そのフリップフロップの移相量欄にs8と記す(ステップS16)。次に、そのF/F名name8のタイミングマージンデータを(−s7,h7)から(−s7+s8,h7+s8)に書き換える(ステップS17)。
【0072】
最後に,前段F/F名欄にname8が記載されているフリップフロップを探し、そのタイミングマージンデータに−s8を加算する。このフリップフロップには当然setupフラグが記されているフリップフロップname9が含まれるが、そのほかにフリップフロップname10が該当する。この操作により、フリップフロップname9のタイミングデータは(+s8,h8)から(0,h8−s8)に書き換わり、フリップフロップname9のタイミングデータは(−s9,h9)から(−s9−s8,h9−s8)に書き換わる(ステップS18)。
【0073】
図9の波形図は、図8のタイミング情報データ上の操作を視覚的にわかりやすく説明したものである。
【0074】
図9(a)は、フリップフロップname5で発生のホールド時間不足を除く方法を解説するものである。いま、F/Fname3のクロックに同期して出力され、F/Fname5の入力に伝達されたF/Fname5入力がF/Fname5クロックに対して時間h2のホールド時間不足を起こしているものとする。
【0075】
このホールド時間不足を除くためには、F/Fname5クロックの位相をh2だけ早めればよい。そうすると、F/Fname5入力のF/Fname5クロックに対するホールド時間がh2だけ増加し、ホールド時間不足が除かれる。
【0076】
ただし、F/Fname5クロックを早めることはF/Fname5入力のセットアップ時間に関してはそれを減少させることになる。特に複数のフリップフロップからの出力がF/Fname5も入力に伝達されているときは、それぞれの伝達経路ごとにセットアップ時間の減少を考慮する必要がある。図9(a)の例では、F/Fname4からもF/Fname5に信号が伝達されており、この伝達経路におけるF/Fname5入力のF/Fname5クロックに対するセットアップ時間が減少する。
【0077】
また、F/Fname5クロックを早めることはF/Fname5の出力が伝達される後段のフリップフロップの入力のホールド時間を減少させる。図9(a)の例では、F/Fname5の出力が伝達されるF/Fname6入力のF/Fname6クロックに対するホールド時間が減少する。
【0078】
したがって、これらのタイミングマージンの変動をタイミング情報修正データ41に反映させている。
【0079】
図9(b)は、フリップフロップname9で発生のセットアップ時間不足を除く方法を解説するものである。いま、F/Fname8のクロックに同期して出力され、F/Fname9の入力に伝達されたF/Fname9入力がF/Fname9クロックに対して時間s8のセットアップ時間不足を起こしているものとする。
【0080】
このセットアップ時間不足を除くためには、セットアップ時間不足を起こしているF/Fname9の前段のF/Fname8クロックの位相をs8だけ早めればよい。そうすると、F/Fname8の出力のF/Fname9への伝達時間がs8だけ早まり,F/Fname9入力のF/Fname9クロックに対するセットアップ時間がs8増加してセットアップ時間不足が除かれる。
【0081】
ただし、この場合もF/Fname8クロックの位相を早めることでF/Fname8入力のセットアップ時間が減少したり、F/Fname8の後段のF/Fname10入力のF/Fname10クロックに対するホールド時間が減少するという他のフリップフロップのタイミングマージンに対する影響が現れる。したがって、これらのタイミングマージンの変動もタイミング情報修正データ41に反映させている。
【0082】
図7のフローの説明に戻る。ステップS13からステップS15までの作業あるいはステップS16からステップS19までの作業が終わると、タイミング情報修正データ41が作成される。しかし、上述したようにクロックの移相によりタイミングマージンが減少するケースがあり、これが新たなタイミングエラーを発生させる可能性がある。
【0083】
そこで、図7のステップS19で、タイミング情報修正データ41に新たなタイミングエラーが発生していないかをチェックする。もし、このチェックで新たなタイミングエラーの発生が見つかった場合(Yes)、違反フラグを記入(ステップS20)して、ステップS11に戻り、以降のステップを繰り返す。
【0084】
ステップS19で新たなタイミングエラーの発生が見つからなかった場合(No)は、ステップS21に進み、移相量欄に数値の記入されたフリップフロップの抽出を行う。
【0085】
ここで、ステップS19で新たなタイミングエラーの発生が見つかった場合の処理の仕方を別の回路例、図10、図11を用いて説明する。
【0086】
図12は、図10、図11の回路に対するタイミング情報データ4の例である。ここでは、タイミングマージンデータに具体的な数値を記入している。
【0087】
図12のタイミングマージン欄をチェックすると、F/F名F001の前段F/F名F001に対するタイミングマージンのホールド時間が−0.2となっておりホールド時間が0.2不足しているため、違反フラグ欄にholdと記載されている。また、F/F名F103の前段F/F名F102に対するタイミングマージンのセットアップ時間が+0.3となっておりセットアップ時間が0.3不足しているため、違反フラグ欄にsetupと記載されている。最初に、ステップS11で違反フラグがholdかsetupかを識別し、それぞれのフラグに応じた処理を以降進めるが、その様子は図13に示す。
【0088】
図13では、違反フラグholdに対する処理として、先にholdと記入したF/F名F002の移相量欄に0.2と記入(ステップS12)し、F/F名F002の3つのタイミングマージンデータにそれぞれ0.2を加算(ステップS13)し、前段F/F名欄にF002と記されている後段F/Fを探して該当のF/F名F007およびF008のタイミングマージンデータに−0.2を加算(ステップS14)する。
【0089】
一方、違反フラグsetupに対する処理として、先にsetupと記入したF/F名F103の移相量欄に(−0.3)と記入(ステップS15)し、前段F/FのF/F名F102の移相量欄に0.3と記入(ステップS16)し、F/F名F102の2つのタイミングマージンデータにそれぞれ0.3を加算(ステップS17)し、前段F/F名欄にF102と記されている後段F/Fを探して該当のF/F名F103、107およびF108のタイミングマージンデータに−0.3を加算(ステップS18)する。
【0090】
このタイミングマージンデータを書き換えた結果であるタイミング情報修正データ41に対して、新たなタイミングエラーが発生していないかチェック(ステップS19)する。その結果、F/F名F008の前段F/F名F002のホールド時間が−0.1、F/F名F108の前段F/F名F102のホールド時間が−0.2となっていて、それぞれホールド時間不足となっていることがわかる。
【0091】
また、F/F名F002の前段F/F名F004のセットアップ時間が+0.1、F/F名F102の前段F/F名F104のセットアップ時間が+0.1となっていて、それぞれセットアップ時間不足となっていることがわかる。
【0092】
そこでステップS19のチェック結果がYesとなり、ステップS20で新たに違反フラグを書き込んだ新たなタイミング情報修正データ42を生成してステップS11に戻る。
【0093】
図14に、タイミング情報修正データ42の例を示す。この例に見るように、新たな違反フラグとして、F/F名F008の前段F/F名F002の欄とF/F名F108の前段F/F名F102の欄にhold、F/F名F002の前段F/F名F004の欄とF/F名F102の前段F/F名F104の欄にsetupがそれぞれ記入されている。
【0094】
その後ステップS11で、違反フラグがholdかsetupかが識別され、holdに対してはステップS12からステップS14までの処理が行われ、setupに対してはステップS15からステップS18までの処理が行われる。
【0095】
図15に、上記処理でタイミングマージンデータが書き換えられて行く様子を示す。以下、上述の各タイミングエラーごとにその処理の手順を示す。
【0096】
1.F/F名F008の前段F/F名F002に対するエラー(hold)
(1)F/F名F008の移相量欄に0.1と記入
(2)F/F名F008のタイミングマージンデータ総てに0.1を加算
(3)F/F名F008の後段F/FであるF/F名F009およびF010のタイミングマージンデータに−0.1を加算
2.F/F名F108の前段F/F名F102に対するエラー(hold)
(1)F/F名F108の移相量欄に0.2と記入
(2)F/F名F108のタイミングマージンデータ総てに0.2を加算
(3)F/F名F108の後段F/FであるF/F名F109およびF110のタイミングマージンデータに−0.2を加算
3.F/F名F002の前段F/F名F004に対するエラー(setup)(1)F/F名F002の移相量欄に(−0.1)と記入
(2)F/F名F002の前段F/FであるF/F名F004の移相量欄に
0.1と記入
(3)F/F名F004のタイミングマージンデータ総てに0.1を加算
(4)F/F名F004の後段F/FであるF/F名F002のタイミング
マージンデータに−0.1を加算
4.F/F名F102の前段F/F名F104に対するエラー(setup)(1)F/F名F102の移相量欄に(−0.1)と記入
(2)F/F名F102の前段F/FであるF/F名F104の移相量欄に 0.1と記入
(3)F/F名F104のタイミングマージンデータ総てに0.1を加算
(4)F/F名F104の後段F/FであるF/F名F102のタイミングマージンデータに−0.1を加算
以上のタイミングマージンの書き換えが終わると、図15に示したような新たなタイミング情報修正データ41が生成される。
【0097】
ステップS19で、このタイミング情報修正データ41に対して、新たなタイミングエラーの発生がないかを再度チェックする。今回のチェックでは、タイミングエラー発生がないため判定がNoとなり、ステップS21に進む。
【0098】
ステップS21では、タイミング情報修正データ41から移相量欄に数値に記入されているフリップフロップの名前をその移相量データとともに抜き出し、位相補正対象フリップフロップ抽出データ5として記録する。ただし、移相数量欄に括弧付きの負数が記入されているフリップフロップは、上記の抜き取りの対象からは除外する。
【0099】
図16は、図15のタイミング情報修正データ41の例から作成した位相補正対象フリップフロップ抽出データ5の例である。図16では、図15のタイミング情報修正データ41から移相量に正数が記されているフリップフロップ、F002、F004、F008、F102、F104、F108のデータを抜き出し、その中のF/F名と移相量を一組に並べて一覧データにしている。
【0100】
以上で図7のフローの作業、すなわち図1のステップS7の「位相補正対象フリップフロップ抽出」工程の作業が終了する。
【0101】
次に、図1のステップS8の「クロックバッファ選出」の具体的な方法を、図16の位相補正対象フリップフロップ抽出データ5を例にとって説明する。
【0102】
まず、位相補正対象フリップフロップ抽出データ5に記載のそれぞれのフリップフロップにクロックを供給している現状のクロックバッファの名前を回路接続情報より抽出し、位相補正対象フリップフロップ抽出データ5に書き加え、オリジナルクロックバッファの一覧を作成する。
【0103】
図17(a)にその例を示す。図17(a)のクロックバッファのオリジナル欄に記載されている名前が、それぞれのフリップフロップにクロックを供給しているクロックバッファの名前である。例えば、CknpはフリップフロップF002にクロックを供給しているクロックバッファの名前である。また、各クロックバッファはクロックツリーの最終段、例えば図2に示すクロックツリー2のn段目に配置されているバッファである。
【0104】
次に、クロック位相データベース(ステップS3で作成、例:図3(a))を参照して、オリジナルのクロックバッファとの位相差が移相量より大きく、且つ最も移相量に近いクロックバッファをクロックツリー途中段のバッファから選出し、その名前を変更後クロックバッファの一覧として記録する。
【0105】
図17(b)にその例を示す。図17(b)は、図17(a)の一覧にクロックバッファの変更後の欄を設け、ここに選出したバッファ名を記載しているものである。ここで、変更後のクロックバッファとオリジナルのクロックバッファとのクロック位相の関係を見て見ると、例えば、フリップフロップF002の場合、変更後のクロックバッファCklaの位相plaは、オリジナルのクロックバッファCKnpの位相pnpに対して移相量が0.2であるので、pla<pnp−0.2となる。
【0106】
このようにして作成した変更後クロックバッファの一覧データに基づいて、半導体集積回路の実際のレイアウト上で、位相補正対象フリップフロップのクロックの供給元をオリジナルのクロックバッファから変更後バッファ欄に記載されたクロックバッファに変更する。
【0107】
図18と図19にクロック供給元のクロックバッファを変更する前と後のクロック分配の違いを模式的に示す。図18は、クロック供給元のクロックバッファを変更する前の状態であり、CTSを実行してクロックツリーを形成し、その最終段のクロックバッファからフリップフロップへクロックを分配している様子を模式的に示している。
【0108】
図19は、クロック供給元のクロックバッファを変更した後のクロック分配の様子を模式的に示した図である。タイミングエラーを除くためクロックの位相を早める必要のあるフリップフロップへ、クロックツリーの途中段の所望の位相を有するバッファからクロックが供給されている様子を示している。
【0109】
なお、半導体集積回路のレイアウト上でクロックバッファの接続を変更するときは、従来のクロックバッファからのクロック配線を一旦削除した後、新しいクロック供給元のクロックバッファからのクロック配線を行う。このとき、新しいクロック供給元のクロックバッファとクロックの供給を受けるフリップフロップの配置位置が離れていることも考えられるが、そのようなときはフリップフロップをクロックバッファの近くに移動させた後にクロック配線を行えばよい。
【0110】
新しいクロック供給元のクロックバッファとクロックの供給を受けるフリップフロップの配置位置が近いときには、フリップフロップの位置はそのままに、新たなクロック配線を追加するだけでよい。
【0111】
ただし、レイアウト上の論理セルの配置が込んでいて、上述のフリップフロップの移動が困難なケースもあり得る。そのような事態を避けるには、「クロックバッファ選出」処理の際、クロック位相条件に適合する複数個のクロックバッファを選出候補として選び、その中から移相対象のフリップフロップとの配置関係等を考慮の上、クロック供給元として最適のクロックバッファを選択するようにすればよい。
【0112】
このように、いずれの場合も新たなバッファを追加することなく、タイミングエラーを除くことが可能である。
【0113】
以上の本発明の実施の形態では、タイミング情報データは表形式としているが、タイミング情報データの表現形式は表形式に限定されるものではなく、フリップフロップごとにそのタイミングマージンが記載されていればどのような形式で記述してもよい。
【0114】
また、上述の実施の形態の説明では、半導体集積回路が単一のクロックで動作する場合を例に取ったが、複数のクロックで動作する半導体集積回路でそれぞれのクロックにクロックツリーが生成される場合には、それぞれのクロックツリーに対して本発明のクロック分配法を適用すればよい。
【0115】
【発明の効果】
本発明の半導体集積回路のクロック分配方法によれば、CTSの実行回数を少なくして、タイミングエラーの発生しない位相を有するクロックをフリップフロップに供給することができる。そのため、半導体集積回路のレイアウト工程に要する時間を短縮することができる。
【0116】
また、本発明の半導体集積回路によれば、フリップフロップのタイミングマージンに応じて、それぞれのフリップフロップに異なる位相のクロックを分配することができる。そのため、フリップフロップにおけるタイミングエラーの発生を防止することができる。また、タイミングエラー除去のためのバッファの挿入を最小限に抑えられるため、半導体集積回路のチップ面積の増大を防ぐことができる。
【図面の簡単な説明】
【図1】本発明の実施の形態に係る半導体集積回路のクロック分配方法を示すフロー図。
【図2】クロックツリーからのクロック配線長に差のある例を示す模式的回路図。
【図3】図1のステップS4のクロック位相データベース生成処理結果とクロック位相分布の例を示す図。
【図4】クロックスキューとフリップフロップのタイミングエラーの関係を説明する波形図。
【図5】図1のステップS5のタイミング情報生成処理結果およびステップS6のタイミングエラー発生フリップフロップ抽出処理結果の例を示す図。
【図6】フリップフロップを含む回路の第1の例を示す回路図。
【図7】図1のステップS7の位相補正対象フリップフロップ抽出処理を詳細に説明するフロー図。
【図8】本発明の実施の形態におけるタイミング情報修正データの第1の例を示す図。
【図9】図7のフローと回路動作の関係を説明するための波形図。
【図10】フリップフロップを含む回路の第2の例を示す回路図。
【図11】フリップフロップを含む回路の第3の例を示す回路図。
【図12】本発明の実施の形態におけるタイミング情報データの例を示す図。
【図13】図7のフローの処理途中のタイミング情報データの第1の例を示す図。
【図14】図7のフローの処理途中のタイミング情報データの第2の例を示す図。
【図15】本発明の実施の形態におけるタイミング情報修正データの例を示す図。
【図16】図1のステップS7の位相補正対象フリップフロップ抽出処理結果の例を示す図。
【図17】図1のステップS8のクロックバッファ選出処理結果の例を示す図。
【図18】CTS実行によるクロック分配の様子を模式的に示す回路図。
【図19】本発明の実施の形態に係る半導体集積回路のクロック分配方法によるクロック分配の様子を模式的に示す回路図。
【符号の説明】
1 クロック源
2 クロックツリー
3 多段論理セル
4 タイミング情報データ
5 位相補正対象フリップフロップ抽出データ
41、42 タイミング情報修正データ
CK11、CK21、・・・、CKn3、CKn4 クロックバッファ
CKnp、CKnq、・・・、CKmc、CKme クロックバッファ
F01、F02、F03、F04 フリップフロップ
name1、name2、・・・、name9、name10 フリップフロップ
F001、F002、・・・、F109、F110 フリップフロップ
【発明の属する技術分野】
本発明は、半導体集積回路のクロック分配方法および半導体集積回路に関する。
【0002】
【従来の技術】
論理回路の設計においては、回路動作のタイミング設計を容易にするため、回路内の総てのフリップフロップを同一のクロックに同期させて信号の転送を行う同期式設計が多く採用されている。したがって、このような同期式設計の論理回路を半導体集積回路で実現する場合、半導体集積回路内の総てのフリップフロップに同一時刻でクロックが供給される必要がある。
【0003】
しかしながら、単一のクロックドライバによるクロックの供給では、クロックドライバから各フリップフロップへのクロック配線の長さの違いによって、それぞれのフリップフロップへのクロックの到達時間に差が生じる。半導体製造の微細化の進展に伴う配線幅の縮小による配線抵抗の増大により、このような配線長の違いによるクロック到達時間の差は顕著になり、半導体集積回路の配線設計において無視できなくなってきている。
【0004】
そこで、クロックドライバから各フリップフロップのクロック入力端子までのクロック到達時間がほぼ等しくなるように、バッファツリーを構成してクロック配線を行うことが一般的に行われている。この手法をクロックツリーシンセシス(Clock Tree Synthesis:CTS)と呼んでいる。
【0005】
CTSの実行により、各フリップフロップのクロックスキュー(クロックの到達時間の差すなわち位相差)は一定の範囲内に収まるようになる。
【0006】
このCTSを含む半導体集積回路のレイアウトは計算機により自動的に行われるが、概略次のような工程で進められる。▲1▼フリップフロップも含めて総ての論理セルを配置する工程、▲2▼CTSによるクロック用バッファツリーの配置およびフリップフロップへのクロック配線を行う工程、▲3▼クロック以外の配線を行う工程。
【0007】
上述のように配線工程が2工程に分かれて行われるため、各フリップフロップにおいては、クロックスキューは要求値を満足していても、フリップフロップ間の信号伝播遅延に伴うセットアップタイムまたはホールドタイムが要求値を満足しない場合が生じる。
【0008】
そこで、レイアウト工程終了後、各フリップフロップにセットアップタイムまたはホールドタイムの不足、即ちタイミングエラーが生じていないかを検証するためのタイミング検証が必要になる。
【0009】
タイミング検証の結果、いずれかのフリップフロップにタイミングエラーが生じていた場合には、これをなくすためのタイミング修正が必要になる。このタイミングを修正する方法の一つとして、タイミングエラーの発生したフリップフロップのクロックの位相を修正する方法がある(例えば特許文献1参照。)。
【0010】
この方法は、タイミングエラーの発生したフリップフロップとその前段のフリップフロップの間に意図的にクロックスキューを発生させ、そのクロックスキューを利用してタイミングエラーを解消するものである。
【0011】
一般にCTSにおいては、クロックツリーを構成する各バッファに負荷容量を均等に分配して各バッファの遅延を均等にし、これによってクロックツリーの末端のバッファに接続されるフリップフロップのクロックスキューが極力小さく(理想的には0に)なるように処理される。
【0012】
したがって、上述した意図的にクロックスキューを発生させてフリップフロップのクロックの位相を変化させようとする方法では、対象のフリップフロップの入力端子にダミーの容量を付加し、CTSで見かけ上はクロックスキューが0となるようなクロックツリーを発生させ、実際には対象のフリップフロップにクロックスキューを発生させるという方法を取っている。
【0013】
【特許文献1】
特開2001−175699号公報(第4−10頁、図1および図3)
【0014】
【発明が解決しようとする課題】
上述のクロックスキューを発生させる方法では、一度CTSを実行してクロックツリーを発生させ、各フリップフロップのタイミング検証を行ってタイミングエラー発生のフリップフロップを検出し、該当のフリップフロップのクロック入力端子にダミー容量を付加し、2回目のCTSを実行するという処理を行う。
【0015】
このとき、2回目のCTSの実行前に最初のCTSで発生させたクロックバッファとクロック配線を削除し、2回目のCTSの実行で改めてクロックバッファの配置とクロック配線を行う。
【0016】
したがって、2回目のCTS実行後のクロックバッファの配置とクロック配線は、1回目のCTSの結果とは異なったものとなる。そのため、1回目のCTSの結果ではタイミングエラーの発生しなかったフリップフロップに新たなタイミングエラーが発生する可能性がある。その場合、新たに問題の発生したフリップフロップに上述したようなダミー容量の付加を行い、さらにCTSを実行する必要が生じる。
【0017】
このように、上記の方法ではCTSの実行の度に新たなクロックバッファとクロック配線が発生されるため、その都度新たなタイミングエラーが生じる可能性があるという問題がある。また、CTS実行の度に総てのフリップフロップのタイミング検証を行う必要があり、その実行に多大な時間を要するという問題も発生する。
【0018】
そこで本発明の目的は、少ないCTSの実行回数で、クロックの位相を調整してフリップフロップのタイミングエラーを防止するクロックを供給することのできる半導体集積回路のクロック分配方法および半導体集積回路を提供することにある。
【0019】
【課題を解決するための手段】
上記目的を達成するために、本発明の半導体集積回路のクロック分配方法は、半導体集積回路を構成するフリップフロップからなる複数の論理セルを含む論理セル群を配置するセル配置工程と、複数のクロックバッファからなるクロックツリーを生成するクロックツリーシンセシス工程と、前記論理セル間の信号配線、および前記複数のフリップフロップのクロック入力端子と前記クロックツリーの末端に配置されたクロックバッファとの間のクロック配線を行う配線工程と、前記クロックツリーを構成する総てのクロックバッファの出力遅延時間を算出し、その算出値をそれぞれのクロックバッファのクロック位相として記録したクロックバッファ位相データベースを生成するクロックバッファ位相データベース生成工程と、前記複数のフリップフロップのセットアップ時間及びホールド時間を算出し、それぞれの規定値との差分を前記複数のフリップフロップごとにタイミング情報として出力するタイミング情報生成工程と、前記タイミング情報を検査し、セットアップ時間の規定値に対するエラーあるいはホールド時間の規定値に対するエラーの発生しているフリップフロップには前記タイミング情報にタイミングエラー発生情報を付加してタイミングエラー発生フリップフロップとして抽出するタイミングエラー発生フリップフロップ抽出工程と、前記タイミングエラー発生フリップフロップのタイミングエラーを除くためにクロックの位相を補正すべきフリップフロップを位相補正対象フリップフロップとして抽出する位相補正対象フリップフロップ抽出工程と、前記クロックバッファ位相データベースの情報に基づき、前記位相補正対象フリップフロップの位相を補正するのに適したクロック位相を有するクロックバッファを前記クロックツリーを構成するクロックバッファの中から選出するクロックバッファ選出工程と、前記クロックバッファ選出工程で選出したクロックバッファを前記位相補正対象フリップフロップのクロック供給バッファとするように前記位相補正対象フリップフロップのクロック供給元を変更するフリップフロップのクロック供給元変更工程とを備えることを特徴とする。
【0020】
このような本発明の半導体集積回路のクロック分配方法によれば、少ないCTSの実行回数で、タイミングエラーの発生しない位相を有するクロックをフリップフロップに供給することができる。
【0021】
また、本発明の半導体集積回路は、多段構成の複数のバッファをツリー状に配置してクロックツリーを形成し、ツリー末端のバッファおよびツリー途中段のバッファから複数のフリップフロップへそれぞれクロックを供給するクロック分配回路を有することを特徴とする。
【0022】
このような本発明の半導体集積回路によれば、フリップフロップごとにタイミングエラーの発生しない位相を有するクロックを選んで分配することができる。
【0023】
【発明の実施の形態】
以下、図面を参照しながら本発明の実施の形態を説明する。
【0024】
(実施の形態)
図1は本発明の実施の形態に係る半導体集積回路のクロック分配方法を示すフロー図であり、図2はクロックツリーおよびクロック配線を模式的に示す回路図である。
【0025】
図1の最初のステップS1において、図2に示すフリップフロップF01、F02、・・・、多段論理セル3などを含む複数の論理セル群の配置を行った後、ステップS2でCTSを実行し、ツリー状にクロックバッファ群を配置したクロックツリー2を形成する。その後、ステップS3において、フリップフロップF01、F02、・・・、多段論理セル3などの論理セル間の配線およびクロック配線を行う。このとき、クロックツリー2の末端のクロックバッファCKn1、CKn2、・・・と各フリップフロップF01、F02、・・・のクロック入力端子との間にクロック配線がなされる。
【0026】
クロックを発生させるクロック源1に接続されたクロックツリー2は、1段目バッファCK11、2段目バッファCK21、CK22、3段目バッファCK31、CK32、CK33、CK34と段を追って分岐の数を増やしながらバッファを配置し、最終n段目のバッファ群CKn1、CKn2、・・・からフリップフロップF01、F02、・・・へクロックが配線される。
【0027】
このとき、図2に模式的に示すように、フリップフロップへのクロック配線長にはバラツキが生じる。
【0028】
また、フリップフロップF01とフリップフロップF02のようにフリップフロップ間に多段論理セル3が接続される場合もあれば、フリップフロップF03とフリップフロップF04のようにフリップフロップが直接接続される場合もある。
【0029】
図1に戻って、ステップS4でクロック位相データベースが生成される。ここで、クロック位相とは、クロックツリー2を構成する各クロックバッファのクロック源1からのクロック信号の伝播遅延時間を指し、クロック位相データベースとは、クロックツリー2を構成する各クロックバッファのクロック位相を一覧表形式としたものである。
【0030】
図3(a)は、このクロック位相データベースの例を示したものである。また、図3(b)は、クロック位相の分布を模式的に図示したものである。一般的に、クロック位相はクロックツリー2内での段数が多いほど大きくなり、また各段のバッファ群はあるバラツキをもって分布する形となる。
【0031】
再び図1に戻って、ステップS5で各フリップフロップF01、F02、・・・のタイミング情報を生成する。ここでタイミング情報とは、スタティックタイミングアナリシス(Static Timing Analysis:静的タイミング解析)により得られたフリップフロップのクロック入力に対するデータ入力のセットアップ時間およびホールド時間からそれぞれの規定値を差し引いた値を指す。ここで規定値とは、フリップフロップが正常な動作をするために最小限必要な動作余裕時間のことである。
【0032】
次にステップS6で、このタイミング情報を検査し、セットアップ時間あるいはホールド時間がそれぞれの規定値に対して不足しているフリップフロップをタイミングエラー発生フリップフロップとして抽出する。
【0033】
このとき、タイミングエラー発生フリップフロップのタイミング情報には、タイミングエラーがセットアップ時間不足なのかホールド時間不足なのかを識別する違反フラグを付加する。
【0034】
次にステップS7で、前記タイミングエラーを除くためにクロックの位相補正をすべきフリップフロップを抽出する。ここで、位相補正はクロックの位相を早めることにより行うものとする。その理由は、先に図3(b)のクロック位相分布図に見たようにクロックツリー2の途中段には最終段より位相の早いクロックバッファが多数分布しており、これを利用することにより新たなバッファの追加やCTSの再実行等を行うことなくクロックの位相を変えることができるからである。
【0035】
クロックの補正を位相を早めることで行うため、ホールド時間不足のフリップフロップはそのまま位相補正対象フリップフロップとなるが、セットアップ時間不足のフリップフロップについては、このフリップフロップにデータを伝達する前段のフリップフロップが位相補正対象フリップフロップとなる。
【0036】
また、上記位相補正対象フリップフリップに対するクロックの位相補正を行うと、その影響を受けて新たにタイミングエラーの起きるフリップフロップが発生する可能性があるが、その場合、このフリップフロップを新たなタイミングエラー発生フリップフロップとして上記ステップS7の工程を新たに実行する。
【0037】
この位相補正対象フリップフロップ抽出の方法については、後で詳しく説明する。
【0038】
次にステップS8で、前記クロック位相データベースを参照して、上記位相補正に適した位相を持つクロックバッファをクロックツリー2の途中段のクロックバッファの中から選出する。
【0039】
最後にステップS9で、実際にクロックバッファの接続先を変更し、前記位相補正対象フリップフロップにステップ8で選出したクロックバッファからクロックが供給されるようにしてクロックの分配を終了する。
【0040】
ここで、クロックスキューがタイミングエラーを引き起こす典型的な例を図2の模式的回路図と図4の波形図を用いて説明する。
【0041】
図2のフリップフロップF01とフリップフロップF02の間に多段論理セル3があり、これがクリティカルパスとなっているとする。このとき、フリップフロップF01のクロックの立ち上りがクロックスキューのためフリップフロップF02のクロックの立ち上りより遅れていると、フリップフロップF01のクロックの立ち上りAから多段論理セル3を遅延時間d1で通過したフリップフロップF02の入力信号は、フリップフロップF02のクロックの立ち上りBにおいてセットアップ時間不足(se)を起こす。
【0042】
一方、図2のフリップフロップF03とフリップフロップF04は直結されており、フリップフロップF03の出力は僅かな遅れ時間d2でフリップフロップF04に伝達されているとする。このとき、フリップフロップF04のクロックの立ち上りがクロックスキューのためフリップフロップF03のクロックの立ち上りより早いと、フリップフロップF03のクロックの立ち上りCで出力された信号はいわゆる「データの突き抜け現象」を起こし、本来の動作より1クロック早いクロックDの立ち上りでフリップフロップF04にデータが取り込まれる。このとき、フリップフロップF04に見かけ上のホールド時間不足(he)が生じることがある。
【0043】
このようなタイミングエラーを除くためには、セットアップ時間不足の場合には、前段のフリップフロップ(図2の例ではF01)のクロックの位相を早めればよく、ホールド時間不足の場合には、後段のフリップフロップ(図2の例ではF04)のクロックの位相を早めればよい。
【0044】
次に、本実施の形態で用いるタイミング情報のデータ形式の例を説明する。
【0045】
図5(a)は、図6の回路例に対するタイミング情報のデータ例であり、F/F名、前段F/F名、タイミングマージン、違反フラグおよび移相量の5つのデータが表形式に記載されている。このうち、F/F名、前段F/F名、タイミングマージンの3つのデータは、「タイミング情報生成」(図1のステップS5)より生成される。また、違反フラグおよび移相量の欄は図1のステップS6およびS7の処理で使用される。
【0046】
F/F名はタイミングチェックがなされたフリップフロップの名前を示し、前段F/F名欄には、そのフリップフロップに組み合わせ回路を介して接続される前段のフリップフロップの名前が記される。したがって、図6のname5のフリップのように前段の2個のフリップフロップからの接続がある場合には、F/F名name5の前段F/F名欄には、この2個のフリップフロップの名前name3、name4が2行に亘って記載される。
【0047】
タイミングマージンは、スタティックタイミングアナリシスの結果得られた、各フリップフロップのセットアップ時間およびホールド時間のそれぞれの規定値に対する余裕(タイミングマージン)を記したものである。このタイミングマージンは前段のフリップフロップからの信号伝達経路によって異なるため、前段F/F名ごとにそのデータを記載する。
【0048】
このタイミングマージンの記載の形式は(セットアップ時間余裕、ホールド時間余裕)とするが、セットアップ時間余裕についてはセットアップ時間に余裕がある場合に負号(−)を付けて表わし、セットアップ時間が不足するときに正号(+)付けて表わすものとする。一方、ホールド時間に関しては、不足するときに負号(−)を付けて表わすものとする。
【0049】
したがって、図5(a)では、F/F名name9における(+s8,h8)は、セットアップ時間が時間s8不足していることを表わし、F/F名name5における(−s2,−h2)は、ホールド時間が時間h2不足していることを表わす。
【0050】
図5(b)は、図5(a)のタイミング情報のデータに対して、「タイミングエラー発生フリップフロップの抽出」(図1のステップS6)を行った結果を示す例である。タイミングエラーが検出されたタイミングマージンデータに対して、違反フラグ(setupあるいはhold)を違反フラグ欄に記入している。
【0051】
次に、このタイミング情報を記したデータを操作することにより、タイミングエラーを除くためにクロックの位相を早めるべきフリップフロップを抽出する方法について説明する。
【0052】
図7は、タイミングエラーを除くためにクロックの位相を早めるべきフリップフロップを抽出するために行うタイミング情報を記したデータの操作方法を示すフロー図であり、図1のステップS7の「位相補正対象フリップフロップ抽出」の具体的な方法である。
【0053】
図7のフローにおける作業は、図1のステップS6のタイミングエラー発生フリップフロップ抽出により違反フラグが付加されたタイミング情報データ4に対するデータの書き換え操作によって進められ、作業が終了すると、クロックの位相を早めるべきフリップフロップの名前と位相をどれだけ早めればよいか(移相量)のデータが記載された位相補正対象フリップフロップ抽出データ5が得られる。
【0054】
以下、図7のフローをタイミング情報データ4のデータ形式の例を図5(b)に取りながら説明する。
【0055】
図5のステップS11では、タイミング情報データ4に記載されている違反フラグがholdであるのか、setupであるのか、その種別をチェックする。その種別によって以降の作業フローが分かれる。
【0056】
違反フラグがholdの場合、ステップS12に進む。ステップS12で、holdと記載されているタイミングマージンデータの移相量欄にホールド不足時間(以下、この時間をheと表わす。)を記す。この移相量は、ホールド時間不足が発生しているフリップフロップのクロックの位相をheだけ早めることを意味する。
【0057】
次に、この移相量に合わせて該当フリップフロップのクロックの位相を早めたとすると、その位相を早めたフリップフロップにおける総ての前段F/F名フリップフロップに対するタイミングマージンが変化するので、それを反映するようタイミング情報データ4を書き換える必要がある。
【0058】
そのため、ステップS13で、移相量欄にheと記したフリップフロップのタイミングマージンデータの総ての値に移相量heを加算する。この移相量heの加算は、ホールド時間に対しては余裕がheだけ増加し、セットアップ時間に対しては余裕がheだけ減少することを意味する。
【0059】
また、フリップフロップのクロックの位相を早めると、その出力が接続される後段のフリップフロップ(これを後段F/Fと称す。)のタイミングマージンにも影響を及ぼす。すなわち、後段F/Fにおいては、セットアップ時間に対する余裕の増加とホールド時間に対する余裕の減少という影響が現れる。
【0060】
そこで、この影響をタイミングマージンデータに反映させるため、ステップS14で、タイミング情報データ4の後段F/Fのタイミングマージンデータの総ての値に−heを加算する。このとき、後段F/Fを探し出す必要があるが、その方法としては、違反フラグholdが記載されているフリップフロップの名前が前段F/F名の欄に記載されているフリップフロップをタイミング情報データ4上で探索するという方法を取ればよい。
【0061】
一方、ステップS11で違反フラグがsetupと識別された場合には、ステップS15に進む。
【0062】
ステップS15で、setupと記載されているタイミングマージンデータの移相量欄にセットアップ不足時間(以下、この時間をseと表わす。)に負号を付けて(−se)と記す。移相量は正の値が移相を早めることを意味するので、負号は位相を遅らせることを意味する。しかし、実際のタイミングエラーを除く処理としてはクロックの位相を遅らせることはしないので、仮想の処理を表わす意味で括弧を付けて記載する。
【0063】
セットアップ時間不足に対する実際のタイミングエラーを除く処理は、セットアップ時間不足を起こしているフリップフロップにデータを伝達している前段F/Fのクロックの位相を早めることで行われる。
【0064】
そこで、ステップS16で、セットアップ時間不足を起こしているフリップフロップの前段F/F名欄に名前が記載されているフリップフロップをタイミング情報データ4上で探し、そのフリップフロップの移相量欄にseと記す。
【0065】
次いで、ステップS17で、この移相量欄にseと記したフリップフロップの総てのタイミングマージンデータにseを加算する。
【0066】
また、前段F/Fの位相を早めることで、セットアップ時間不足を起こしているフリップフロップのタイミングエラーは除かれるが、そのほかにも、その出力が伝達される総てのフリップフロップのタイミングマージンに影響を及ぼす。
【0067】
そこで、この影響をタイミングマージンデータに反映させるため、ステップS18で、移相該当のフリップフロップ名が前段F/F名欄に記載されているフリップフロップ(後段F/F)をタイミング情報データ4上で探し、後段F/Fのタイミングマージンデータ総てに−seを加算する。
【0068】
上記フローの処理を行って、タイミング情報データ4のタイミングマージンデータを書き換えた結果がタイミング情報修正データ41として得られる。
【0069】
図8に、図5(b)の例に対するタイミング情報修正データ41の例を示す。以下、図8における処理の進め方を説明する。
【0070】
まず、holdフラグが記されているF/F名name5の移相量欄にh2と記す(ステップS12)。次に、移相量h2を記入したフリップフロップname5の2つのタイミングマージンデータを、従来の(−s2,−h2)、(−s3,h3)から(−s2+h2,0)、(−s3+h2,h3+h2)に書き換える(ステップS13)。次に、前段F/F名にname5が記載されているフリップフロップを探し,該当のフリップフロップname6のタイミングマージンデータを(−s5,−h5)から(−s5−h2,h5−h2)に書き換える(ステップS14)。
【0071】
一方、setupフラグが記載されているフリップフロップに対しては、F/F名name9の移相量欄に(−s8)と記す(ステップS15)。次に、セットアップ時間不足を発生させる前段F/Fであるname8のフリップフロップを探し、そのフリップフロップの移相量欄にs8と記す(ステップS16)。次に、そのF/F名name8のタイミングマージンデータを(−s7,h7)から(−s7+s8,h7+s8)に書き換える(ステップS17)。
【0072】
最後に,前段F/F名欄にname8が記載されているフリップフロップを探し、そのタイミングマージンデータに−s8を加算する。このフリップフロップには当然setupフラグが記されているフリップフロップname9が含まれるが、そのほかにフリップフロップname10が該当する。この操作により、フリップフロップname9のタイミングデータは(+s8,h8)から(0,h8−s8)に書き換わり、フリップフロップname9のタイミングデータは(−s9,h9)から(−s9−s8,h9−s8)に書き換わる(ステップS18)。
【0073】
図9の波形図は、図8のタイミング情報データ上の操作を視覚的にわかりやすく説明したものである。
【0074】
図9(a)は、フリップフロップname5で発生のホールド時間不足を除く方法を解説するものである。いま、F/Fname3のクロックに同期して出力され、F/Fname5の入力に伝達されたF/Fname5入力がF/Fname5クロックに対して時間h2のホールド時間不足を起こしているものとする。
【0075】
このホールド時間不足を除くためには、F/Fname5クロックの位相をh2だけ早めればよい。そうすると、F/Fname5入力のF/Fname5クロックに対するホールド時間がh2だけ増加し、ホールド時間不足が除かれる。
【0076】
ただし、F/Fname5クロックを早めることはF/Fname5入力のセットアップ時間に関してはそれを減少させることになる。特に複数のフリップフロップからの出力がF/Fname5も入力に伝達されているときは、それぞれの伝達経路ごとにセットアップ時間の減少を考慮する必要がある。図9(a)の例では、F/Fname4からもF/Fname5に信号が伝達されており、この伝達経路におけるF/Fname5入力のF/Fname5クロックに対するセットアップ時間が減少する。
【0077】
また、F/Fname5クロックを早めることはF/Fname5の出力が伝達される後段のフリップフロップの入力のホールド時間を減少させる。図9(a)の例では、F/Fname5の出力が伝達されるF/Fname6入力のF/Fname6クロックに対するホールド時間が減少する。
【0078】
したがって、これらのタイミングマージンの変動をタイミング情報修正データ41に反映させている。
【0079】
図9(b)は、フリップフロップname9で発生のセットアップ時間不足を除く方法を解説するものである。いま、F/Fname8のクロックに同期して出力され、F/Fname9の入力に伝達されたF/Fname9入力がF/Fname9クロックに対して時間s8のセットアップ時間不足を起こしているものとする。
【0080】
このセットアップ時間不足を除くためには、セットアップ時間不足を起こしているF/Fname9の前段のF/Fname8クロックの位相をs8だけ早めればよい。そうすると、F/Fname8の出力のF/Fname9への伝達時間がs8だけ早まり,F/Fname9入力のF/Fname9クロックに対するセットアップ時間がs8増加してセットアップ時間不足が除かれる。
【0081】
ただし、この場合もF/Fname8クロックの位相を早めることでF/Fname8入力のセットアップ時間が減少したり、F/Fname8の後段のF/Fname10入力のF/Fname10クロックに対するホールド時間が減少するという他のフリップフロップのタイミングマージンに対する影響が現れる。したがって、これらのタイミングマージンの変動もタイミング情報修正データ41に反映させている。
【0082】
図7のフローの説明に戻る。ステップS13からステップS15までの作業あるいはステップS16からステップS19までの作業が終わると、タイミング情報修正データ41が作成される。しかし、上述したようにクロックの移相によりタイミングマージンが減少するケースがあり、これが新たなタイミングエラーを発生させる可能性がある。
【0083】
そこで、図7のステップS19で、タイミング情報修正データ41に新たなタイミングエラーが発生していないかをチェックする。もし、このチェックで新たなタイミングエラーの発生が見つかった場合(Yes)、違反フラグを記入(ステップS20)して、ステップS11に戻り、以降のステップを繰り返す。
【0084】
ステップS19で新たなタイミングエラーの発生が見つからなかった場合(No)は、ステップS21に進み、移相量欄に数値の記入されたフリップフロップの抽出を行う。
【0085】
ここで、ステップS19で新たなタイミングエラーの発生が見つかった場合の処理の仕方を別の回路例、図10、図11を用いて説明する。
【0086】
図12は、図10、図11の回路に対するタイミング情報データ4の例である。ここでは、タイミングマージンデータに具体的な数値を記入している。
【0087】
図12のタイミングマージン欄をチェックすると、F/F名F001の前段F/F名F001に対するタイミングマージンのホールド時間が−0.2となっておりホールド時間が0.2不足しているため、違反フラグ欄にholdと記載されている。また、F/F名F103の前段F/F名F102に対するタイミングマージンのセットアップ時間が+0.3となっておりセットアップ時間が0.3不足しているため、違反フラグ欄にsetupと記載されている。最初に、ステップS11で違反フラグがholdかsetupかを識別し、それぞれのフラグに応じた処理を以降進めるが、その様子は図13に示す。
【0088】
図13では、違反フラグholdに対する処理として、先にholdと記入したF/F名F002の移相量欄に0.2と記入(ステップS12)し、F/F名F002の3つのタイミングマージンデータにそれぞれ0.2を加算(ステップS13)し、前段F/F名欄にF002と記されている後段F/Fを探して該当のF/F名F007およびF008のタイミングマージンデータに−0.2を加算(ステップS14)する。
【0089】
一方、違反フラグsetupに対する処理として、先にsetupと記入したF/F名F103の移相量欄に(−0.3)と記入(ステップS15)し、前段F/FのF/F名F102の移相量欄に0.3と記入(ステップS16)し、F/F名F102の2つのタイミングマージンデータにそれぞれ0.3を加算(ステップS17)し、前段F/F名欄にF102と記されている後段F/Fを探して該当のF/F名F103、107およびF108のタイミングマージンデータに−0.3を加算(ステップS18)する。
【0090】
このタイミングマージンデータを書き換えた結果であるタイミング情報修正データ41に対して、新たなタイミングエラーが発生していないかチェック(ステップS19)する。その結果、F/F名F008の前段F/F名F002のホールド時間が−0.1、F/F名F108の前段F/F名F102のホールド時間が−0.2となっていて、それぞれホールド時間不足となっていることがわかる。
【0091】
また、F/F名F002の前段F/F名F004のセットアップ時間が+0.1、F/F名F102の前段F/F名F104のセットアップ時間が+0.1となっていて、それぞれセットアップ時間不足となっていることがわかる。
【0092】
そこでステップS19のチェック結果がYesとなり、ステップS20で新たに違反フラグを書き込んだ新たなタイミング情報修正データ42を生成してステップS11に戻る。
【0093】
図14に、タイミング情報修正データ42の例を示す。この例に見るように、新たな違反フラグとして、F/F名F008の前段F/F名F002の欄とF/F名F108の前段F/F名F102の欄にhold、F/F名F002の前段F/F名F004の欄とF/F名F102の前段F/F名F104の欄にsetupがそれぞれ記入されている。
【0094】
その後ステップS11で、違反フラグがholdかsetupかが識別され、holdに対してはステップS12からステップS14までの処理が行われ、setupに対してはステップS15からステップS18までの処理が行われる。
【0095】
図15に、上記処理でタイミングマージンデータが書き換えられて行く様子を示す。以下、上述の各タイミングエラーごとにその処理の手順を示す。
【0096】
1.F/F名F008の前段F/F名F002に対するエラー(hold)
(1)F/F名F008の移相量欄に0.1と記入
(2)F/F名F008のタイミングマージンデータ総てに0.1を加算
(3)F/F名F008の後段F/FであるF/F名F009およびF010のタイミングマージンデータに−0.1を加算
2.F/F名F108の前段F/F名F102に対するエラー(hold)
(1)F/F名F108の移相量欄に0.2と記入
(2)F/F名F108のタイミングマージンデータ総てに0.2を加算
(3)F/F名F108の後段F/FであるF/F名F109およびF110のタイミングマージンデータに−0.2を加算
3.F/F名F002の前段F/F名F004に対するエラー(setup)(1)F/F名F002の移相量欄に(−0.1)と記入
(2)F/F名F002の前段F/FであるF/F名F004の移相量欄に
0.1と記入
(3)F/F名F004のタイミングマージンデータ総てに0.1を加算
(4)F/F名F004の後段F/FであるF/F名F002のタイミング
マージンデータに−0.1を加算
4.F/F名F102の前段F/F名F104に対するエラー(setup)(1)F/F名F102の移相量欄に(−0.1)と記入
(2)F/F名F102の前段F/FであるF/F名F104の移相量欄に 0.1と記入
(3)F/F名F104のタイミングマージンデータ総てに0.1を加算
(4)F/F名F104の後段F/FであるF/F名F102のタイミングマージンデータに−0.1を加算
以上のタイミングマージンの書き換えが終わると、図15に示したような新たなタイミング情報修正データ41が生成される。
【0097】
ステップS19で、このタイミング情報修正データ41に対して、新たなタイミングエラーの発生がないかを再度チェックする。今回のチェックでは、タイミングエラー発生がないため判定がNoとなり、ステップS21に進む。
【0098】
ステップS21では、タイミング情報修正データ41から移相量欄に数値に記入されているフリップフロップの名前をその移相量データとともに抜き出し、位相補正対象フリップフロップ抽出データ5として記録する。ただし、移相数量欄に括弧付きの負数が記入されているフリップフロップは、上記の抜き取りの対象からは除外する。
【0099】
図16は、図15のタイミング情報修正データ41の例から作成した位相補正対象フリップフロップ抽出データ5の例である。図16では、図15のタイミング情報修正データ41から移相量に正数が記されているフリップフロップ、F002、F004、F008、F102、F104、F108のデータを抜き出し、その中のF/F名と移相量を一組に並べて一覧データにしている。
【0100】
以上で図7のフローの作業、すなわち図1のステップS7の「位相補正対象フリップフロップ抽出」工程の作業が終了する。
【0101】
次に、図1のステップS8の「クロックバッファ選出」の具体的な方法を、図16の位相補正対象フリップフロップ抽出データ5を例にとって説明する。
【0102】
まず、位相補正対象フリップフロップ抽出データ5に記載のそれぞれのフリップフロップにクロックを供給している現状のクロックバッファの名前を回路接続情報より抽出し、位相補正対象フリップフロップ抽出データ5に書き加え、オリジナルクロックバッファの一覧を作成する。
【0103】
図17(a)にその例を示す。図17(a)のクロックバッファのオリジナル欄に記載されている名前が、それぞれのフリップフロップにクロックを供給しているクロックバッファの名前である。例えば、CknpはフリップフロップF002にクロックを供給しているクロックバッファの名前である。また、各クロックバッファはクロックツリーの最終段、例えば図2に示すクロックツリー2のn段目に配置されているバッファである。
【0104】
次に、クロック位相データベース(ステップS3で作成、例:図3(a))を参照して、オリジナルのクロックバッファとの位相差が移相量より大きく、且つ最も移相量に近いクロックバッファをクロックツリー途中段のバッファから選出し、その名前を変更後クロックバッファの一覧として記録する。
【0105】
図17(b)にその例を示す。図17(b)は、図17(a)の一覧にクロックバッファの変更後の欄を設け、ここに選出したバッファ名を記載しているものである。ここで、変更後のクロックバッファとオリジナルのクロックバッファとのクロック位相の関係を見て見ると、例えば、フリップフロップF002の場合、変更後のクロックバッファCklaの位相plaは、オリジナルのクロックバッファCKnpの位相pnpに対して移相量が0.2であるので、pla<pnp−0.2となる。
【0106】
このようにして作成した変更後クロックバッファの一覧データに基づいて、半導体集積回路の実際のレイアウト上で、位相補正対象フリップフロップのクロックの供給元をオリジナルのクロックバッファから変更後バッファ欄に記載されたクロックバッファに変更する。
【0107】
図18と図19にクロック供給元のクロックバッファを変更する前と後のクロック分配の違いを模式的に示す。図18は、クロック供給元のクロックバッファを変更する前の状態であり、CTSを実行してクロックツリーを形成し、その最終段のクロックバッファからフリップフロップへクロックを分配している様子を模式的に示している。
【0108】
図19は、クロック供給元のクロックバッファを変更した後のクロック分配の様子を模式的に示した図である。タイミングエラーを除くためクロックの位相を早める必要のあるフリップフロップへ、クロックツリーの途中段の所望の位相を有するバッファからクロックが供給されている様子を示している。
【0109】
なお、半導体集積回路のレイアウト上でクロックバッファの接続を変更するときは、従来のクロックバッファからのクロック配線を一旦削除した後、新しいクロック供給元のクロックバッファからのクロック配線を行う。このとき、新しいクロック供給元のクロックバッファとクロックの供給を受けるフリップフロップの配置位置が離れていることも考えられるが、そのようなときはフリップフロップをクロックバッファの近くに移動させた後にクロック配線を行えばよい。
【0110】
新しいクロック供給元のクロックバッファとクロックの供給を受けるフリップフロップの配置位置が近いときには、フリップフロップの位置はそのままに、新たなクロック配線を追加するだけでよい。
【0111】
ただし、レイアウト上の論理セルの配置が込んでいて、上述のフリップフロップの移動が困難なケースもあり得る。そのような事態を避けるには、「クロックバッファ選出」処理の際、クロック位相条件に適合する複数個のクロックバッファを選出候補として選び、その中から移相対象のフリップフロップとの配置関係等を考慮の上、クロック供給元として最適のクロックバッファを選択するようにすればよい。
【0112】
このように、いずれの場合も新たなバッファを追加することなく、タイミングエラーを除くことが可能である。
【0113】
以上の本発明の実施の形態では、タイミング情報データは表形式としているが、タイミング情報データの表現形式は表形式に限定されるものではなく、フリップフロップごとにそのタイミングマージンが記載されていればどのような形式で記述してもよい。
【0114】
また、上述の実施の形態の説明では、半導体集積回路が単一のクロックで動作する場合を例に取ったが、複数のクロックで動作する半導体集積回路でそれぞれのクロックにクロックツリーが生成される場合には、それぞれのクロックツリーに対して本発明のクロック分配法を適用すればよい。
【0115】
【発明の効果】
本発明の半導体集積回路のクロック分配方法によれば、CTSの実行回数を少なくして、タイミングエラーの発生しない位相を有するクロックをフリップフロップに供給することができる。そのため、半導体集積回路のレイアウト工程に要する時間を短縮することができる。
【0116】
また、本発明の半導体集積回路によれば、フリップフロップのタイミングマージンに応じて、それぞれのフリップフロップに異なる位相のクロックを分配することができる。そのため、フリップフロップにおけるタイミングエラーの発生を防止することができる。また、タイミングエラー除去のためのバッファの挿入を最小限に抑えられるため、半導体集積回路のチップ面積の増大を防ぐことができる。
【図面の簡単な説明】
【図1】本発明の実施の形態に係る半導体集積回路のクロック分配方法を示すフロー図。
【図2】クロックツリーからのクロック配線長に差のある例を示す模式的回路図。
【図3】図1のステップS4のクロック位相データベース生成処理結果とクロック位相分布の例を示す図。
【図4】クロックスキューとフリップフロップのタイミングエラーの関係を説明する波形図。
【図5】図1のステップS5のタイミング情報生成処理結果およびステップS6のタイミングエラー発生フリップフロップ抽出処理結果の例を示す図。
【図6】フリップフロップを含む回路の第1の例を示す回路図。
【図7】図1のステップS7の位相補正対象フリップフロップ抽出処理を詳細に説明するフロー図。
【図8】本発明の実施の形態におけるタイミング情報修正データの第1の例を示す図。
【図9】図7のフローと回路動作の関係を説明するための波形図。
【図10】フリップフロップを含む回路の第2の例を示す回路図。
【図11】フリップフロップを含む回路の第3の例を示す回路図。
【図12】本発明の実施の形態におけるタイミング情報データの例を示す図。
【図13】図7のフローの処理途中のタイミング情報データの第1の例を示す図。
【図14】図7のフローの処理途中のタイミング情報データの第2の例を示す図。
【図15】本発明の実施の形態におけるタイミング情報修正データの例を示す図。
【図16】図1のステップS7の位相補正対象フリップフロップ抽出処理結果の例を示す図。
【図17】図1のステップS8のクロックバッファ選出処理結果の例を示す図。
【図18】CTS実行によるクロック分配の様子を模式的に示す回路図。
【図19】本発明の実施の形態に係る半導体集積回路のクロック分配方法によるクロック分配の様子を模式的に示す回路図。
【符号の説明】
1 クロック源
2 クロックツリー
3 多段論理セル
4 タイミング情報データ
5 位相補正対象フリップフロップ抽出データ
41、42 タイミング情報修正データ
CK11、CK21、・・・、CKn3、CKn4 クロックバッファ
CKnp、CKnq、・・・、CKmc、CKme クロックバッファ
F01、F02、F03、F04 フリップフロップ
name1、name2、・・・、name9、name10 フリップフロップ
F001、F002、・・・、F109、F110 フリップフロップ
Claims (9)
- 半導体集積回路を構成するフリップフロップからなる複数の論理セルを含む論理セル群を配置するセル配置工程と、
複数のクロックバッファからなるクロックツリーを生成するクロックツリーシンセシス工程と、
前記論理セル間の信号配線、および前記複数のフリップフロップのクロック入力端子と前記クロックツリーの末端に配置されたクロックバッファとの間のクロック配線を行う配線工程と、
前記クロックツリーを構成する総てのクロックバッファの出力遅延時間を算出し、その算出値をそれぞれのクロックバッファのクロック位相として記録したクロックバッファ位相データベースを生成するクロックバッファ位相データベース生成工程と、
前記複数のフリップフロップのセットアップ時間およびホールド時間を算出し、それぞれの規定値との差分を前記複数のフリップフロップごとにタイミング情報として出力するタイミング情報生成工程と、
前記タイミング情報を検査し、セットアップ時間の規定値に対するエラーあるいはホールド時間の規定値に対するエラーの発生しているフリップフロップには前記タイミング情報にタイミングエラー発生情報を付加してタイミングエラー発生フリップフロップとして抽出するタイミングエラー発生フリップフロップ抽出工程と、
前記タイミングエラー発生フリップフロップのタイミングエラーを除くためにクロックの位相を補正すべきフリップフロップを位相補正対象フリップフロップとして抽出する位相補正対象フリップフロップ抽出工程と、
前記クロックバッファ位相データベースの情報に基づき、前記位相補正対象フリップフロップの位相を補正するためのクロックバッファを前記クロックツリーを構成するクロックバッファの中から選出するクロックバッファ選出工程と、
前記クロックバッファ選出工程で選出したクロックバッファを前記位相補正対象フリップフロップのクロック供給バッファとするように前記位相補正対象フリップフロップのクロック供給元を変更するフリップフロップのクロック供給元変更工程とを
備えることを特徴とする半導体集積回路のクロック分配方法。 - 前記タイミング情報生成工程は、前記論理セル相互の接続情報および前記論理セルの遅延時間情報に基づくスタティックタイミングアナリシスの実行を含むことを特徴とする請求項1に記載の半導体集積回路のクロック分配方法。
- 前記タイミングエラー発生フリップフロップ抽出工程における前記タイミングエラー発生情報は、タイミングエラーがセットアップ時間規定に対するエラーであるかホールド時間規定に対するエラーであるかを区別して表記することを特徴とする請求項1に記載の半導体集積回路のクロック分配方法。
- 前記位相補正対象フリップフロップ抽出工程におけるクロックの位相補正は、当初の位相より位相を早めることを特徴とする請求項1に記載の半導体集積回路のクロック分配方法。
- 前記位相補正対象フリップフロップ抽出工程は、クロックの位相補正が影響を及ぼすフリップフロップに対してはクロックの位相補正量に応じて前記タイミング情報を書き換え、この書き換えにより新たなタイミングエラーが発生した場合には、さらにクロックの位相補正および前記タイミング情報の書き換えを行うことを特徴とする請求項1に記載の半導体集積回路のクロック分配方法。
- 前記クロックバッファ選出工程で選出されたバッファは、クロックツリーの末端よりも前方段に配置されたバッファであることを特徴とする請求項1に記載の半導体集積回路のクロック分配方法。
- 多段構成の複数のバッファをツリー状に配置してクロックツリーを形成し、ツリー末端のバッファおよびツリー途中段のバッファから複数のフリップフロップへそれぞれクロックを供給するクロック分配回路を有することを特徴とする半導体集積回路。
- 前記クロックツリーは、フリップフリップの入力端子におけるクロックスキューが所定の値以下となるようツリー末端のバッファからクロックを供給するようにバッファが配置されたことを特徴とする請求項7に記載の半導体集積回路。
- 前記ツリーの途中段のバッファからクロックを供給されたフリップフロップのクロックの位相は、前記ツリー末端のバッファからクロックを供給されたフリップフロップのクロックの位相よりも早いことを特徴とする請求項7に記載の半導体集積回路。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002353331A JP2004185466A (ja) | 2002-12-05 | 2002-12-05 | 半導体集積回路のクロック分配方法および半導体集積回路 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002353331A JP2004185466A (ja) | 2002-12-05 | 2002-12-05 | 半導体集積回路のクロック分配方法および半導体集積回路 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004185466A true JP2004185466A (ja) | 2004-07-02 |
Family
ID=32754637
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002353331A Pending JP2004185466A (ja) | 2002-12-05 | 2002-12-05 | 半導体集積回路のクロック分配方法および半導体集積回路 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004185466A (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006197569A (ja) * | 2004-12-13 | 2006-07-27 | Samsung Electronics Co Ltd | ポイント拡散クロックの分配ネットワーク及びクロックの分配方法 |
JP2007027841A (ja) * | 2005-07-12 | 2007-02-01 | Nec Electronics Corp | 半導体集積回路の設計装置と方法並びにプログラム |
US7406672B2 (en) | 2005-11-07 | 2008-07-29 | Fujitsu Limited | Method and apparatus for constructing and optimizing a skew of a clock tree |
JP2009015851A (ja) * | 2007-07-03 | 2009-01-22 | Internatl Business Mach Corp <Ibm> | クロック駆動の論理回路においてタイミング・クロージャを達成するために制御ロジックのマルチソース・ネットワークを効率的に利用する方法およびシステム |
-
2002
- 2002-12-05 JP JP2002353331A patent/JP2004185466A/ja active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006197569A (ja) * | 2004-12-13 | 2006-07-27 | Samsung Electronics Co Ltd | ポイント拡散クロックの分配ネットワーク及びクロックの分配方法 |
JP2007027841A (ja) * | 2005-07-12 | 2007-02-01 | Nec Electronics Corp | 半導体集積回路の設計装置と方法並びにプログラム |
US7406672B2 (en) | 2005-11-07 | 2008-07-29 | Fujitsu Limited | Method and apparatus for constructing and optimizing a skew of a clock tree |
JP2009015851A (ja) * | 2007-07-03 | 2009-01-22 | Internatl Business Mach Corp <Ibm> | クロック駆動の論理回路においてタイミング・クロージャを達成するために制御ロジックのマルチソース・ネットワークを効率的に利用する方法およびシステム |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7571406B2 (en) | Clock tree adjustable buffer | |
JP3317948B2 (ja) | 半導体集積回路のレイアウト設計方法及び半導体集積回路 | |
CN105897261B (zh) | 时钟同步方法 | |
US8656337B2 (en) | Optimization method and device for netlist used in logic circuit design for semiconductor integrated circuit | |
US8042074B2 (en) | Circuit design device, circuit design program, and circuit design method | |
JP2002245109A (ja) | 半導体集積回路の設計方法及び設計システム | |
JP4320340B2 (ja) | 半導体集積回路の設計方法、および、半導体集積回路 | |
JP2004185466A (ja) | 半導体集積回路のクロック分配方法および半導体集積回路 | |
US20110066990A1 (en) | Information processing apparatus | |
US8595668B1 (en) | Circuits and methods for efficient clock and data delay configuration for faster timing closure | |
US20100262939A1 (en) | System and method for clock optimization to achieve timing signoff in an electronic circuit and electronic design automation tool incorporating the same | |
JP2005184262A (ja) | 半導体集積回路及びその製造方法 | |
US8060845B2 (en) | Minimizing impact of design changes for integrated circuit designs | |
JP7184689B2 (ja) | 高位合成方法、高位合成装置、及び高位合成システム | |
JP2008198003A (ja) | アレイ型プロセッサ | |
JP2002222228A (ja) | 高位合成システム及び高位合成方法 | |
JP2001175699A (ja) | 半導体集積回路のクロックツリー設計方法 | |
JP6435892B2 (ja) | 回路設計方法、回路設計ツール用セル・ライブラリのコンポーネント | |
JP2001257566A (ja) | イネーブル付きラッチ回路 | |
US20070214443A1 (en) | Circuit Verification Apparatus, Circuit Verification Method, And Signal Distribution Method For The Same | |
JP2000100957A (ja) | タイミング調整方法 | |
JP2993488B2 (ja) | 集積回路の設計方法、集積回路及び記憶媒体 | |
US20020047789A1 (en) | Method of designing semiconductor integrated circuit | |
JPH07312591A (ja) | クロック位相制御回路 | |
JP3702475B2 (ja) | 回路自動生成装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20050415 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20050606 |