(57)【特許請求の範囲】
【請求項１】
半導体集積回路の構成要素となる１つ以上素子群を配置した後それらの間を論理接続要求に従って配線することを階層的に行なってレイアウト設計をした階層構造を持つ前記半導体集積回路のレイアウト結果に対して素子内遅延と配線遅延を算出する方法であって、
遅延計算するためにレイアウト階層を展開していく順番を決定する階層展開順序決定ステップと、
前記階層展開順序ステップで決定した順番に従って素子群を選択するブロック選択ステップと、
前記ブロック選択ステップで選択された前記素子群に対してこの階層で遅延計算するための素子群及びネットを抽出する第１の素子群/ネット抽出ステップと、
前記第１の抽出ステップで抽出された素子群/ネットの素子内遅延と配線遅延を計算する遅延計算ステップと、
前記ブロック選択ステップで選択された前記素子群に対して上位の階層と合成するための外部端子につながるネットと素子及び該素子につながる内側の素子とネットからなる素子群及びネットを抽出する第２の素子群/ネット抽出ステップと、
前記階層展開順序決定ステップで得られた階層展開の順番に従って、前記第２の素子群／ネット抽出ステップによって得られた下位階層の素子群及びネットと上位階層の素子及びネットを合成する階層展開ステップと、
遅延計算した情報の全てを合成する遅延値情報合成ステップを備えたことを特徴とする遅延値算出方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、半導体集積回路のレイアウト設計における論理的接続検証方法と、タイミング設計における遅延値算出方法に関するものである。
【０００２】
【従来の技術】
同期式回路は、動作タイミング、即ちクロック信号の立ち上がり（立ち下がり）のタイミングによって回路を動作させている。理想的なクロック分配は半導体基板（チップ）上のいずれの場所でも同時にクロック信号が得られることである。しかし、実際はクロック信号配線の引き回しや接続されている素子に応じた時間的遅れが生じるので、クロック発生素子に近い位置で得られたクロック信号と離れた位置で得られたクロック信号とは到達時間差（スキュー）が生じる。
【０００３】
スキューが大きくなると同期がとれなくなるので正常な回路動作ができなくなる。従って、クロック信号のスキュー低減は重要な課題である。
【０００４】
このスキュー低減のために、クロック木方式の設計方法がある。これの代表的なものとして、Ｈ木方式がある。（"Reduction of Clock delays in VLSI Structure," Proc. IEEE Int. Conf. on Computer Design, 1984）。
【０００５】
この方式は、結線する２つの素子（群）の配線経路が完全対称となるようＨ型に配線を行なって等しいディレイの配線を提供するものである。Ｈ型の分岐点には例えばバッファセル等の素子が挿入されるのが一般的である。これを実現する場合、論理設計時にこのクロック構造を意識してバッファセル等を論理回路上に挿入されないで、レイアウト設計時に挿入することが多い。従って、ネットリストで表現された論理接続情報とレイアウト終了後の論理接続情報は一致しなくなる。
【０００６】
近年レイアウト設計を行なうためにはレイアウトツール（自動配置配線ツール）を用いることが一般的であるが、最近のそのツールは入力したネットリストに対してレイアウト側で修正を行なった場合、修正部分を反映した修正ネットリストを出力する機能を有している。自動配置配線ツールが出力した結果は修正ネットリストを元にレイアウトを生成している筈だが、ツール自身のバグや一度設計した後若干の人手によるレイアウト修正等が入る場合があるので、再度論理的接続検証を行なうことは避けられない。
【０００７】
また、得られたレイアウト結果に対して所望のタイミングで動作するかどうかを検証することはそのチップを製造してよいかどうか判断するために最重要なことである。それを行なう工程はバックアノテーションと呼ばれる。それは、レイアウト結果から素子の位置情報と配線情報（ＲＣネットワーク：Ｒは抵抗、Ｃは容量）を抽出し、それから素子遅延と配線遅延を計算し、その結果をタイミングシミュレータ等に返してシミュレーションを行なうことである。この場合、素子遅延と配線遅延をチップ全体に対して求める必要があるので効率的な方法を行なわないと膨大な時間を要する。特に、階層設計が一般になっている今、チップ全体で一度に処理することは難しい。
【０００８】
また、最近では遅延を高精度に計算するために各素子の入力信号の傾きや動作ポイント（ドライビングポイント）を考慮した方法が採られるようになり、複雑な計算を要する場合が多い。
【０００９】
この場合、各素子の入力側の配線情報も必要になる。一方、階層展開は素子の入出力関係を意識しないで階層間にまたがるネット情報のみを上位の階層の情報と合成していくだけで展開できる。遅延計算処理と階層展開処理を両立させることができれば効率の良い遅延計算が行なえるであろう。
【００１０】
また、前述のクロック木において遅延結果をタイミングシミュレータ等に返す場合、元のネットリストと異なったレイアウト結果から抽出し遅延計算したので単純に返すことができない。何故なら、元のネットリストにない素子の情報が入っているからである。一般にタイミングシミュレータに遅延値を返す方法は、素子上の端子の２点をペア（from-to）で表現し、その間に遅延値を割り当てる方法を採る。よって、ネットリスト上で定義されていない素子をもって遅延値を返そうとしても、その素子が存在しないので遅延値は返すことができない。
【００１１】
【発明が解決しようとする課題】
以上のように、クロック木をレイアウト設計時に挿入した場合、ネットリストから得られる論理情報とレイアウト結果から得られる論理情報が異なるため、通常行なわれるネットリストとレイアウトとの接続検証が行なえなくなるといった問題が生じる。
【００１２】
また、レイアウト結果から素子の入力波形の傾きを考慮して素子内遅延や配線遅延を計算する場合、階層展開するために必要な情報と遅延計算するために必要な情報は異なるといった問題点が生じる。
【００１３】
また、上で求めた遅延結果でクロック木の遅延結果をタイミングシミュレータ等に返す場合、元のネットリストにない素子が含まれているため、単純に返すことができない問題点が生じる。
【００１５】
第１の発明は、半導体集積回路の構成要素となる１つ以上素子群（例えば、機能ブロックや論理セル）を配置した後それらの間を論理接続要求に従って配線することを階層的に行なってレイアウト設計をした階層構造を持つ前記半導体集積回路のレイアウト結果に対して素子内遅延と配線遅延を算出する方法であって、遅延計算するためにレイアウト階層を展開していく順番を決定する階層展開順序決定ステップと、前記階層展開順序ステップで決定した順番に従って素子群を選択するブロック選択ステップと、前記ブロック選択ステップで選択された前記素子群に対してこの階層で遅延計算するための素子群及びネットを抽出する第１の素子群/ネット抽出ステップと、前記第１の抽出ステップで抽出された素子群/ネットの素子内遅延と配線遅延を計算する遅延計算ステップと、前記ブロック選択ステップで選択された前記素子群に対して上位の階層と合成するための外部端子につながるネットと素子及び該素子につながる内側の素子とネットからなる素子群及びネットを抽出する第２の素子群/ネット抽出ステップと、前記階層展開順序決定ステップで得られた階層展開の順番に従って、前記第２の素子群／ネット抽出ステップによって得られた下位階層の素子群及びネットと上位階層の素子及びネットを合成する階層展開ステップと、遅延計算した情報の全てを合成する遅延値情報合成ステップを備えたことを特徴とする半導体集積回路の遅延値算出方法である。
【００１７】
【作用】
上記した構成によって、第1の発明は、下位の階層から順に上位の階層に処理していく際に、下位の階層の外部端子につながるネットと素子及び該素子につながる内側の素子とネットからなる素子群及びネットを抽出して上位の階層と合成することにより、下位の階層の遅延計算では不正確になる箇所を上位の階層の遅延計算で正確に求めることができ、さらに、遅延計算結果が得られた後、正確な遅延計算を行なったところのみを選択して合成しているので、結果として、必要最小限のデータで遅延計算をしながら階層展開が可能となるだけでなく、得られた遅延計算結果は全て正確なものとなる。
【００２０】
【実施例】
以下本発明の一実施例のレイアウト検証方法及び遅延値算出方法について、図面を参照しながら説明する。
【００２１】
（実施例１）
以下本発明の第１の実施例について図１及び図４を参照しながら説明する。図１は本発明の第１の実施例におけるレイアウト検証方法を実現するフロー図である。
【００２２】
まず、必要なデータに関して説明を行なう。
図４はある回路の一部分を示した図である。図４(a)は元のネットリストＳの論理回路を表している。回路１とバッファ２１が接続され、さらにそれは複数のフリップフロップ２２のクロック端子につながっている。また、フリップフロップ２２のデータ端子は回路２につながっている。
【００２３】
このネットリストＳからクロック木を生成したときの論理回路を図４(b)に示す。バッファ２１を根としてバッファ２３や２４を木の分岐に挿入しフリップフロップ２２を葉に配置した構造になっている。これは前述のクロック木方式の一実施例である。レイアウト結果から抽出される情報は図４(b)の状態であると考える（前述のように、この論理回路に基づいてレイアウトを行なうが、実際にそのようになると完全に保証されない）。前述のようにレイアウトツールを使った場合、修正ネットリストが出力できるのでこのクロック木を反映したネットリストの入手は可能である。ここで、そのネットリストをＳ'とする。
【００２４】
以上により、元のネットリストＳと修正ネットリストＳ'、レイアウトツールによって作成したレイアウト結果図の３つが揃ったことになる。
【００２５】
さて、第１の実施例におけるレイアウト検証方法について図１を用いて説明する。まず、ネットリストＳ-Ｓ'間相違抽出ステップ１によって、ネットリストＳとＳ'の相違点を求める。図４の場合、バッファ２１とフリップフロップ２２の間の構造が異なる。例えば、同図の太線はその一例である。
【００２６】
次に、論理チェックステップ２によって、パス毎に異なる部分同士（バッファ２１とフリップフロップ２２の間、バッファ２１とフリップフロップ２５の間等）の論理的検証を行なう。ここで、バッファ２１とフリップフロップ２２を例にとって説明する。図４(a)のバッファ２１とフリップフロップ２２は、直接配線でつながっているので論理的の変化はない。図４(b)のバッファ２１とフリップフロップ２２は、バッファが２つ挿入されているだけで論理的の変化はない。よって、両図とも論理的変化がないことがわかる。これを全パスについて検証する。
【００２７】
以上によって、全パスの論理に変更がないなら、図４の(a)の回路と(b)の回路は論理的に同一なものが証明されたので、ネットリストＳ'はネットリストＳと論理的に等価であることになる。なお、不一致が生じた場合、エラー処理ステップ４でその箇所を明示し、ネットリストＳやＳ'のチェックと修正等を行なって再度ネットリストＳ-Ｓ'間相違抽出ステップ１から実行する。
【００２８】
そして最後に、ネットリストＳ'を用いて、ネットリストＳ'による接続検証ステップ３を実行し、レイアウトの論理的接続検証が終了する。このステップ３は従来のレイアウト接続検証である。任意の方法でよい。
【００２９】
（実施例２）
以下本発明の第２の実施例について図２、図５〜８を参照しながら説明する。図２は本発明の第２の実施例における階層的に遅延算出する方法を示すフロー図である。
【００３０】
ここで、本発明を説明する前にその中で使われる遅延計算ステップ８について説明しておく。
【００３１】
図５は回路の一部分を表した図である。図中で、３０はＡＮＤ素子、３１はＡＮＤ３０のある入力側につながるバッファ、３２はＡＮＤ３０の出力側につながるバッファ、３３はバッファ３１とＡＮＤ３０間のネット、３４はＡＮＤ３０の出力側ネットである。
【００３２】
さて、ステップ８で行なう、ＡＮＤ３０の素子内遅延と、ＡＮＤ３０とバッファ３２間の配線遅延の求め方について説明する。
【００３３】
遅延時間は、入力波形の傾きによって異なることが知られている。例えば、ＡＮＤ３０の入力側ネット３３の構成によって入力波形は異なり、その影響は素子内遅延に及ぼす。そこで、遅延計算する際、ＡＮＤ３０の入力側のネットの状態を抵抗と容量でモデル化したＲＣネットワークで表し、そのネットワークから入力波形の傾きを算出し、素子内遅延はその入力波形の傾きを一パラメータとして計算する。また、配線遅延は、出力側端子からある素子の入力側端子までの配線の影響による遅延である。図５では出力側ネット３４がそれに当たるが、これは入力波形の傾きを求めるときと同様にＲＣネットワークを算出し、その結果を基に各出力側端子からある素子の入力側端子までの配線遅延を算出する。
【００３４】
以上から、ある素子の遅延値を計算する際、その素子の入出力側ネットが揃っていないと正確な計算ができないことがわかる。なお、この遅延計算方法は、例えば市販されている遅延計算ツールのマニュアル（文献：エクセレントデザイン社発行, "Peacock Reference Manual V2.0"）に記載されている。
【００３５】
次に、第２の実施例における遅延値算出方法について説明する。図６(a)は回路の一例である。図のように、２階層で、最上位階層はブロックＡであり、その中にハードブロック（例えば、メモリブロック等）のブロックＢ、ソフトブロック（例えば、スタンダードセル方式ブロック）のブロックＣ、Ｄがあり、さらにソフトブロック内に複数の素子４０（素子の左側を入力端子、右側を出力端子とする）とその間にネット（配線）が存在しているものとする。この階層構造を図６(b)に示す。
【００３６】
まず、階層展開順序決定ステップ５で階層展開の順番を決定する。展開はボトムアップに行なわれ、この図の場合、ブロックＣとＤを処理後、最後にブロックＡが展開される。ここで、ブロックＢはハードブロックなので展開する必要はない。
【００３７】
次にその順番に従って、ブロックを選択する（ブロック選択ステップ６）。
まず、ブロックＣが選択される。そのブロックＣに対して、素子群/ネット抽出１ステップ７により、遅延計算するための素子群とネットを抽出する。図７(a)では太線がそれに当たる。この素子群とネットを基に、遅延計算ステップ８を実行し、遅延計算を行なう。その結果は例えばファイルＤＦCに書き込まれる。例えばファイルの表現形式として、２つの素子端子のペア（from-to）に遅延値を割り当てるものがある。ＳＤＦフォーマット（文献：Cadence社発行, "SDF Annotator User Guide"）がその一例である。
【００３８】
次に、階層展開用データを求めるために、第２の素子群/ネット抽出ステップ９を実行する。前述の遅延計算ステップ８の説明で明らかなように、素子の入出力が完全に揃っていないと正確な遅延計算ができない。そこで、このステップ９では今遅延計算に使われた素子群/ネット（図７(a)）対して正確に計算されていないもの、即ち外部端子４１につながるネットと素子及びその素子につながるさらに内側の素子及びネットの全てを抽出する。図７(b)の実線で表した部分がそれに当たる。ここで、できたブロックをブロックＣ'とする。同様に、ブロックＤについても第１の素子群/ネット抽出ステップ７と遅延計算ステップ８を実行し、遅延計算を行ない（ファイルＤＦDの生成）、さらに、素子群/ネット抽出２ステップ９を実行して、ブロックＤ'を生成する（図７(b)参照）。
【００３９】
以上によって、ブロックＣとＤの処理が終了し、同一階層のブロックがなくなったので階層展開ステップ１０を実行する。上位階層ブロックはブロックＡである。下位階層ブロックはブロックＢ、Ｃ'、Ｄ'である。このステップ１０によって全ての素子群とネットを合成する。図８(a)はその結果である。
【００４０】
そして再び、ブロック選択ステップ６を実行してブロックＡを選択し、前述と同様に、第１の素子群/ネット抽出ステップ７と遅延計算ステップ８を実行し（ファイルＤＦAの生成）、さらに、素子群/ネット抽出２ステップ９を実行し、ブロックＡ'を生成する（以上、図８(a)参照）。ここで、ブロックＡには外部端子がないので、結局ブロックＡ'は空となることに注意。
【００４１】
以上により、全ての階層の展開が終ったので、最後に遅延計算結果を１つに合成するために遅延値情報合成ステップ１１が実行される。ここで注意しなければならないのは合成の仕方である。図８(b)はどの時点の遅延計算結果を使って合成しているかを表している。
太線は下位階層で遅延計算された結果であり（ＤＦCとＤＦD）、実線は上位階層で遅延計算された結果（ＤＦA）である。
【００４２】
遅延値の選択基準は以下のとおりである。
１）外部端子とつながるネットが出力側ネットであったとき、そのネットにつながる素子Ｅの出力側のネットの配線遅延とそれに接続する素子Ｅを除く素子の素子内遅延は下位階層側で計算された遅延結果を採用する。
【００４３】
２）外部端子とつながるネットが入力側ネットであったとき、そのネットにつながる素子Ｅの出力側のネットの配線遅延とそれに接続する素子Ｅを除く素子の素子内遅延は上位階層側で計算した遅延結果を採用する。
【００４４】
以上によって、全体の遅延計算が終了し、タイミングシミュレータ等にその値が返されてシミュレーションを行なう。
【００４５】
（実施例３）
以下本発明の第３の実施例について図３及び図９を参照しながら説明する。図３は本発明の第３の実施例におけるクロック木上の遅延値を算出する方法を示す図である。
【００４６】
図９において、(a)はクロック木生成前の論理図、(b)はクロック木生成後の論理図である。
実施例１でも述べたように、クロック木の生成はレイアウト設計時に行なわれるので、単純にレイアウト図から遅延値を算出してもシミュレータに返すことはできない。そこで本発明はそれを返すことができるようにしたものである。
【００４７】
まずレイアウト設計時、即ち図９(b)の状態のレイアウト結果に対して、遅延計算ステップ１２を用いて遅延値算出を行なう。このステップ１２は、例えば、実施例２で示したように階層レイアウトの結果から本発明の第２を実行させて遅延計算をしたものである。
元のネットリストＳはクロック木がないので追加された素子を削除した形で遅延結果を生成しなければならない（図９(a)）。
【００４８】
そこで、クロックネット内遅延値算出ステップ１３で、追加素子とそれに関わるネットによって変化した遅延値を基に遅延を算出する。図９(a)と(b)の太線は、始点からフリップフロップ５２への同一パスである。本来返さなければならない遅延値は始点からフリップフロップ５２までの遅延時間なので、ステップ１３でそのパス上で計算された遅延値の総和を計算し、その値を図９(a)における始点からフリップフロップ５２の遅延値とする。図の場合、
始点からフリップフロップ５２の遅延値  ＝
（バッファ５２の素子内遅延）＋
（バッファ５２の出力端子からバッファ５３の入力端子までの配線遅延）＋
（バッファ５３の素子内遅延）＋
（バッファ５３の出力端子からバッファ５４の入力端子までの配線遅延）＋
（バッファ５４の素子内遅延）＋
（バッファ５４の出力端子からフリップフロップ５２の入力端子までの配線遅延）
となる。
【００４９】
この計算をクロック木内の全てのパスについて実行する。得られた結果がクロック木上の遅延時間である。
【００５０】
以上により、遅延計算は単純にパス内の遅延時間の和だけなので非常に高速に計算できる。
【００５１】
【発明の効果】
以上のように、第１の発明は、階層展開に必要な最小限のデータと遅延計算に必要な最小限のデータで処理を行なっているので、メモリ使用量が少なく、正確で高速な処理が可能となる。
【図面の簡単な説明】
【図１】本発明の第１の実施例におけるレイアウト検証を示すフロー図
【図２】本発明の第２の実施例における階層的に遅延算出する方法を示すフロー図
【図３】本発明の第３の実施例におけるクロック木上の遅延値を算出する方法を示すフロー図
【図４】本発明の第１の実施例を説明するための回路の一例を示す図
【図５】遅延計算を説明するための図
【図６】本発明の第２の実施例を説明するための分解図
【図７】同実施例を説明するための分解図
【図８】同実施例を説明するための分解図
【図９】本発明の第３の実施例を説明するための回路の一例を示す図
【符号の説明】
１  ネットリストＳ-Ｓ'間相違抽出ステップ
２  論理チェックステップ
３  ネットリストＳ'による接続検証ステップ
４  エラー処理ステップ
５  階層展開順序決定ステップ
６  ブロック選択ステップ
７  素子群/ネット抽出１ステップ
８  遅延計算ステップ
９  素子群/ネット抽出２ステップ
１０  階層展開ステップ
１１  遅延値情報合成ステップ
１２  遅延計算ステップ
１３  クロックネット内遅延算出ステップ
【図１】
0003653814.tif 000002
【図２】
0003653814.tif 000003
【図３】
0003653814.tif 000004
【図４】
0003653814.tif 000005
【図５】
0003653814.tif 000006
【図６】
0003653814.tif 000007
【図７】
0003653814.tif 000008
【図８】
0003653814.tif 000009
【図９】
0003653814.tif 000010