(57)【特許請求の範囲】
【請求項１】
集積回路のレイアウトをコンピュータに実行させるレイアウト方法において，
複数の動作モードに対応する複数のタイミング制約においてセットアップタイムを満足するように前記集積回路を構成するセル及び配線をレイアウトする工程と，
前記レイアウトされた集積回路に対して，前記複数のタイミング制約において存在するホールドエラーが発生しているパス（以下ホールドエラーパス）と，各ホールドエラーパスにおけるホールドエラー値であって，修正により前記複数のタイミング制約を満足するホールドエラー値とを有するホールドエラーリストを生成する工程と，
前記複数のタイミング制約におけるセットアップマージンを検出し，前記複数のタイミング制約を満足するホールドエラー値の修正によりセットアップエラーが発生する可能性のあるパス（以下セットアップエラーパス）と，各セットアップエラーパスにおけるセットアップマージンであって，前記複数のタイミング制約で共通するセットアップマージンとを有するセットアップマージンリストを生成する工程と，
前記集積回路の各パス上に，前記セットアップマージンリストのセットアップマージンを割り当てたセットアップマージンマップを生成する工程と，
前記セットアップマージンマップを参照して，前記割り当てられたセットアップマージンを満足する遅延量及び位置の範囲内で，前記ホールドエラーリストのホールドエラー値を修正する遅延バッファを挿入し当該挿入された遅延バッファをレイアウトする遅延バッファ挿入工程とを有することを特徴とするレイアウト方法。
【請求項２】
請求項１において，
前記挿入バッファ挿入工程において，前記挿入された遅延バッファの遅延量を挿入位置のセットアップマージンから減算して更新し，更に，当該更新したセットアップマージンマップを参照して，ホールドエラー値を修正する別の遅延バッファを挿入することを特徴とするレイアウト方法。
【請求項３】
請求項１において，
前記セットアップマージンリスト生成工程において，前記セットアップエラーパスの生成は，前記ホールドエラーパスの少なくとも一部を共有するパスを抽出することにより行われることを特徴とするレイアウト方法。
【請求項４】
請求項１において，
前記セットアップマージンリスト生成工程において，前記セットアップエラーパスの生成は，前記ホールドエラー値の最大値以下のセットアップマージンを有するパスを抽出することにより行われることを特徴とするレイアウト方法。
【請求項５】
請求項１において，
前記セットアップマージンリストの生成工程において，前記複数のタイミング制約に共通するセットアップマージンは，同じセットアップエラーパスにおける，前記複数のタイミング制約それぞれのセットアップマージンの中の最小値が選択されることを特徴とするレイアウト方法。
【請求項６】
請求項１において，
前記セットアップマージンは，信号の立ち上がりと立ち下がりそれぞれについて検出されることを特徴とするレイアウト方法。
【請求項７】
請求項１において，
前記遅延バッファ挿入工程において，前記セットアップマップにおけるセットアップマージンは，演算により求められたセットアップマージンよりも所定の割合小さく設定されることを特徴とするレイアウト方法。
【請求項８】
請求項１において，
前記ホールドエラーリスト生成工程において，前記複数のタイミング制約を満足するホールドエラーは，同じホールドエラーパスにおける，前記複数のタイミング制約それぞれのホールドエラー値の中の最大値が選択されることを特徴とするレイアウト方法。
【請求項９】
請求項１において，
前記ホールドエラーリストは，遅延が大きい第１の遅延特性におけるホールドエラー値を有するリストと，前記第１の遅延特性より遅延が小さい第２の遅延特性におけるホールドエラー値を有するリストとを有することを特徴とするレイアウト方法。
【請求項１０】
請求項１において，
前記ホールドエラーリストは，信号の立ち上がりと立ち下がりそれぞれについて有することを特徴とするレイアウト方法。
【請求項１１】
請求項１において，
前記ホールドエラーリストの生成工程において，信号の立ち上がりについてのホールドエラー値と信号の立ち下がりについてのホールドエラー値のうちの最大値を，前記ホールドエラー値として選択されることを特徴とするレイアウト方法。
【請求項１２】
請求項１において，
前記遅延バッファ挿入工程において，前記遅延バッファの挿入位置の選択を，複数のホールドエラーパスが重なっている位置を優先して行うことを特徴とするレイアウト方法。
【請求項１３】
請求項１において，
前記セットアップマージンマップの生成工程において，前記セットアップエラーパス上に設定した仮想ポイントの位置に，前記セットアップマージンが割り当てられることを特徴とするレイアウト方法。
【請求項１４】
請求項１において，
前記セットアップマージンマップの生成工程において，前記セットアップエラーパス上に設定した仮想ポイントの位置に，前記セットアップマージンが割り当てられることを特徴とするレイアウト方法。
【請求項１５】
請求項１において，
前記集積回路を構成するセル及び配線をレイアウトする工程では，前記複数のタイミング制約のうち少なくとも最も厳しいタイミング制約においてセットアップタイムを満足するように，集積回路を構成するセル及び配線をレイアウトすることを特徴とするレイアウト方法。
【請求項１６】
集積回路のレイアウトを行うコンピュータプログラムにおいて，
請求項１乃至１５のいずれかに記載したレイアウト方法をコンピュータに実行させるコンピュータプログラム。
【請求項１７】
コンピュータを利用して集積回路のレイアウトを実行するレイアウト装置において，
複数の動作モードに対応する複数のタイミング制約においてセットアップタイムを満足するように前記集積回路を構成するセル及び配線をレイアウトするレイアウト手段と，
前記レイアウトされた集積回路に対して，前記複数のタイミング制約において存在するホールドエラーが発生しているパス（以下ホールドエラーパス）と，各ホールドエラーパスにおけるホールドエラー値であって，修正により前記複数のタイミング制約を満足するホールドエラー値とを有するホールドエラーリストを生成するホールドエラーリスト生成手段と，
前記複数のタイミング制約におけるセットアップマージンを検出し，前記複数のタイミング制約を満足するホールドエラー値の修正によりセットアップエラーが発生する可能性のあるパス（以下セットアップエラーパス）と，各セットアップエラーパスにおけるセットアップマージンであって，前記複数のタイミング制約で共通するセットアップマージンとを有するセットアップマージンリストを生成するセットアップマージンリスト生成手段と，
前記集積回路の各パス上に，前記セットアップマージンリストのセットアップマージンを割り当てたセットアップマージンマップを生成するセットアップマージンマップ生成手段と，
前記セットアップマージンマップを参照して，前記割り当てられたセットアップマージンを満足する遅延量及び位置の範囲内で，前記ホールドエラーリストのホールドエラー値を修正する遅延バッファを挿入し当該挿入された遅延バッファをレイアウトする遅延バッファ挿入手段とを有することを特徴とするレイアウト装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は，ＬＳＩの論理回路（集積回路）のホールドタイムエラー修正方法及びその装置に関し，特に，複数の動作モードに対応した複数のタイミング・コンストレイント（制約）を全て満足させるホールドタイムエラー修正方法及びそのプログラムに関する。更に，本発明は，複数のタイミング制約でタイミングエラーが発生しないレイアウト方法及びそのプログラムを提供することにある。
【０００２】
【従来の技術】
半導体集積回路は，チップ内の論理回路が大規模化，高速化に伴い，信号のタイミングをチェックしながらレイアウトを行うことがますます困難になってきている。従来のレイアウトツールは，コンピュータ上で論理回路のレイアウトを行うプログラムであり，論理設計された論理回路の論理データから，論理回路を構成するセルやマクロをチップ上にレイアウトし，レイアウト後のネットリストを生成する。レイアウトツールは，通常，スタティック・タイミング解析（Static Timing Analysis : STA）ツールを内蔵し，信号のタイミングを考慮したレイアウトを行う。
【０００３】
信号のスタティックなタイミングには，供給されるデータがクロックのどのくらい前からセットアップされるべきかを示すセットアップタイムと，供給されるデータがクロックのどれくらい後まで保持されるべきかを示すホールドタイムとがあり，セットアップタイムとホールドタイムの両方が満たされる必要がある。
【０００４】
図１は，上記のセットアップタイムとホールドタイムを説明する図である。図１（Ａ）に示されるフリップフロップは，供給されるデータDATAを，クロックCLKの立ち上がりエッジに応答して取り込み，そのデータを出力Ｑから出力する。
このクロックCLKに応答してデータDATAを適切に取り込むためには，クロックCLKのタイミングよりセットアップタイム以上前からデータDATAが確定し，ホールドタイム後までそのデータDATAが保持されなければならない。
【０００５】
図１（Ｂ）はセットアップタイムを示す図であり，データDATAの確定時とクロックCLKの立ち上がりエッジとの間がセットアップタイムSTであり，フリップフロップの特性から決まるセットアップタイム以上であることが要求される。また，図１（Ｃ）はホールドタイムを示す図であり，クロックCLKの立ち上がりエッジとデータDATAの終了時との間がホールドタイムであり，これもフリップフロップの特性から決まるホールドタイム以上であることが要求されている。
【０００６】
セットアップタイムSTは，データDATAの確定が早ければ早いほど満足することができるが，論理回路をレイアウトした後では，データDATAのタイミングを早めることは困難である。一方，ホールドタイムHTは，データDATAの終了が遅いほど満足することができるが，論理回路をレイアウトした後でも，遅延バッファを挿入することにより，そのタイミングを遅らせることは容易にできる。
【０００７】
また，回路の遅延特性は，ＬＳＩのプロセス条件，電源電圧，動作温度に応じて異なる。例えば，プロセス条件が悪くなる方向（特性が高速になる方向）に変動し，電源電圧が低くなる方向に変動し，動作温度が高い方向に変動すると，回路の遅延は大きくなり，動作速度は遅くなる。これを，MAX（マキシマム，Maximum)側の遅延特性と呼ぶ。逆に，プロセス条件が良くなる方向（特性が速くなる方向）に変動し，電源電圧が高くなる方向に変動し，動作温度が低い方向に変動すると，回路の遅延は小さくなり，動作速度は速くなる。これを，MIN（ミニマム，Minimum）側の遅延特性と呼ぶことにする。
【０００８】
セットアップタイムの解析では，MAX側の遅延特性で解析をすれば，セットアップタイムエラーが発生しているか否かをチェックすることができるが，ホールドタイムの解析では，MIN側の遅延特性に加えて，MAX側の遅延特性での解析も必要になる。その理由は，セルが支配的な信号パスと，配線が支配的な信号パスとでは，MAX側の遅延特性でのホールドタイムとMIN側の遅延特性ホールドタイムとに逆転現象が生じることがあるからである。
【０００９】
上記のセットアップタイムが満足されない場合はセットアップタイムエラー（以下単にセットアップエラー）となり，ホールドタイムが満足されない場合はホールドタイムエラー（以下単にホールドエラー）となる。大規模化された集積回路をレイアウトする場合，これらのタイミングが満足されるように，セルやマクロをレイアウトする必要がある。
【００１０】
従来のレイアウトツールは，セットアップタイムとホールドタイムを解析して，セットアップエラーとホールドエラーが発生していないかどうかを解析するスタティック・タイミング解析ツール（STAツール）を内蔵し，タイミングを考慮したレイアウトを行う。
【００１１】
一方，集積回路は，複数の動作モードに対応して，複数のタイミング・コンストレイント（Timing Constraint : タイミング制約）を有する場合がある。タイミング制約とは，例えば，ある動作モードでは，制御クロックに２種類のクロックCLK1，CLK2（それぞれ周波数F1,F2）を使用し，別の動作モードでは，制御クロックに１種類のクロックCLK1とその反転クロック/CLK1（周波数がF3）を使用するという制約である。つまり，動作モードにより使用するクロックの種類が異なり，且つそれらの周波数も異なる場合がある。従って，集積回路のレイアウトでは，これらの複数の動作モードに対応した複数のタイミング制約の下で，上記タイミングを満足させることが要求される。
【００１２】
【発明が解決しようとする課題】
前述のとおり，従来のレイアウトツールは，スタティック・タイミング解析ツール（STAツール）を内蔵し，一種類のタイミング制約（動作モード）に対して，信号のタイミングを考慮したレイアウトを行う。レイアウト後にタイミングを早める修正は困難である。従って，レイアウトツールでは，セットアップエラーが発生しないようセルのレイアウトを行い，その後レイアウト後の集積回路に対してホールドエラーのチェックを行い，ホールドエラーが発生する信号パスに，遅延バッファを挿入してホールドエラー修正を行う。
【００１３】
しかし，このホールドエラー修正には，次の問題点がある。第１に，ホールドエラー修正のために，遅延バッファを挿入すると，レイアウトツールに入力した一種類のタイミング制約に対するホールドエラーは修正されるが，他のタイミング制約でタイミング解析を行うと，その信号パスにおいて新たなセットアップエラーが発生する可能性がある。一旦セットアップエラーが発生すると，その修正は困難であり，どこに遅延バッファを挿入すべきかの決定は容易ではない。
【００１４】
図２は，上記の課題を説明する図である。図２（Ａ）は，回路例であり，４つのフリップフロップFF1〜4と，ANDゲートANDを有する。図２（Ｂ）は，そのタイミングチャートである。フリップフロップFF3からANDゲート，フリップフロップFF2への信号パスでは，クロックCK3の立ち上がりエッジに応答して出力データQ3が出力され，フリップフロップFF2の入力データD2として供給される。また，フリップフロップFF1からフリップフロップFF2への信号パスでは，クロックCK1の立ち上がりエッジに応答して出力データQ1が出力され，フリップフロップFF2の入力データD2として供給される。Q3-D2の信号の変化と，Q1-D2の信号の変化が図示されるとおりと仮定すると，フリップフロップFF2のクロックCK2に対するセットアップタイムSTとホールドタイムHTは，図示されるとおりである。
【００１５】
レイアウト工程では，セットアップタイムSTが満足するようにレイアウトされたが，その結果，ホールドタイムHTは短すぎて，ホールドエラーが発生しているとする。その場合，ANDゲートとフリップフロップFF2との間に遅延バッファを挿入して，Q1-D2の信号を遅延させて，ホールドタイムHTを長くしホールドエラーを修正したとする。その結果，遅延バッファが挿入されたパスと重複する信号パスでの信号も遅延し，例えば，Q3-D2の信号，そのセットアップタイムSTが短くなり，セットアップエラーを招くことになる。遅延バッファがフリップフロップFF1とANDゲートとの間に挿入されると，Q1-D4の信号も影響を受けて，同様のセットアップエラーが発生する場合がある。
【００１６】
第２の問題点として，複数の動作モードに対応した複数のタイミング制約では，ホールドタイムとセットアップタイムがそれぞれ異なり，これら全ての条件を満たすようにホールドエラーを修正することは，非常に複雑である。そのため，コンピュータによるホールドエラーの自動修正を行うことができず，従来は，熟練したデザイナーによるマニュアル修正が一般的であった。
【００１７】
以上のように，タイミングエラーを修正する場合，セットアップタイム優先でレイアウトした後にホールドエラーを修正するとき，新たなセットアップエラーを発生しないで遅延バッファを挿入する方法，更に，あるタイミング制約でのホールドエラーを修正するとき，別のタイミング制約で新たなセットアップエラーを発生させないように遅延バッファを挿入する方法がなく，コンピュータによるホールドエラーの自動修正が不可能であった。
【００１８】
そこで，本発明の目的は，集積回路において，複数のタイミング制約を同時に満足するホールドタイムエラーの修正方法及びそのプログラムを提供することにある。
【００１９】
更に，本発明の目的は，集積回路において，複数のタイミング制約を同時に満足するレイアウト方法及びそのプログラムを提供することにある。
【００２０】
【課題を解決するための手段】
上記の目的を達成するために，本発明の一つの側面は，集積回路のホールドエラー修正方法において，
レイアウトされた集積回路に対して，複数のタイミング制約において存在するホールドエラーが発生しているパス（以下ホールドエラーパス）と，各ホールドエラーパスにおけるホールドエラー値であって，修正により前記複数のタイミング制約を満足するホールドエラー値とを有するホールドエラーリストを生成する工程と，
複数のタイミング制約におけるセットアップマージンを検出し，前記ホールドエラーの修正によりセットアップエラーが発生する可能性のあるパス（以下セットアップエラーパス）と，各セットアップエラーパスにおけるセットアップマージンであって，前記複数のタイミング制約で共通するセットアップマージンとを有するセットアップマージンリストを生成する工程と，
前記集積回路の各パス上に，前記セットアップマージンリストのセットアップマージンを割り当てたセットアップマージンマップを生成する工程と，
前記セットアップマージンマップを参照して，前記割り当てられたセットアップマージンを満足する遅延量及び位置の範囲内で，前記ホールドエラーリストのホールドエラー値を修正する遅延バッファを挿入する遅延バッファ挿入工程とを有することを特徴とする。
【００２１】
上記の発明によれば，複数のタイミング制約を満足するホールドエラー値，具体的には各タイミング制約でのホールドエラー値の最大値，をホールドエラーパス毎に有するホールドエラーリストと，各セットアップエラーパスにおける複数のタイミング制約を満足するセットアップマージン，具体的には各タイミング制約での同一パスにおけるセットアップマージンの最小値，を集積回路のパス上に割り当てたセットアップマージンマップとを生成する。そして，セットアップマージンマップを参照して，ホールドエラーリストのホールドエラー値を減らす又はなくす遅延バッファであって，当該セットアップマージン以下の遅延量及び位置の範囲内の遅延バッファを挿入する。セットアップマージンマップを参照することにより，新たなセットアップエラーを発生させることなく，ホールドエラーを修正する遅延バッファの挿入が可能になる。
【００２２】
より好ましい実施例では，複数の遅延バッファが挿入され，一つの遅延バッファを挿入するたびに，セットアップマージンマップ内のセットアップマージンを遅延バッファの遅延量と位置に応じて更新し，次の遅延バッファの挿入時に当該更新されたセットアップマージンマップを参照する。つまり，遅延バッファが挿入されたパス上のセットアップマージンからその遅延量を減算して，セットアップマージンマップを更新する。それにより，セットアップマージンマップ内のセットアップマージン以下の範囲で，複数の遅延バッファを順次挿入することができ，新たなセットアップエラーを発生させることなく複数の遅延バッファを挿入することができる。
【００２３】
上記の実施例では，減算すべき遅延値は，挿入した遅延バッファの低速動作の条件下での遅延量であることが望ましい。通常，セットアップマージンは，集積回路を構成するセルや配線の遅延量を低速動作の条件下での遅延量で求められるので，セットアップマージンマップの更新でも，同じ条件下の遅延量が減算される必要があるからである。
【００２４】
別の好ましい実施例では，セットアップマージンリストを生成する工程において，ホールドエラーリストから，ホールドエラー修正のための遅延バッファの挿入によりセットアップエラーが発生する可能性のあるパスを，セットアップエラーパスとして抽出し，当該セットアップエラーパスにおける前記セットアップマージンを抽出する。セットアップエラーが発生する可能性のあるパスの抽出は，例えば，ホールドエラーパスと少なくとも一部を共有するパスを抽出，若しくは，ホールドエラー値の最大値以下のセットアップマージンを有するパスを抽出する。または，上記両者を満足するパスを抽出してもよい。
【００２５】
別の好ましい実施例では，ホールドエラーリストは，集積回路の低速動作条件下のホールドエラーリストと，高速動作条件下のホールドエラーリストとを有し，遅延バッファ挿入工程で，両ホールドエラーリスト内のホールドエラー値をなくすように遅延バッファを挿入する。低速動作条件下のホールドエラーをなくしても，高速動作条件下では別のパスにホールドエラーが発生している可能性があるので，そのホールドエラーもなくすことが好ましい。
【００２６】
別の好ましい実施例では，セットアップエラーパス上にセットアップマージンを割り当てる位置を，パス上に存在するセルの位置にする。または，パス上にセルが存在しない場合は，仮想ポイントを設定して，その仮想ポイントにセットアップマージンを割り当てる。
【００２７】
上記の目的を達成するために，本発明の第２の側面では，集積回路のレイアウト方法において，
複数のタイミング制約のうち最も厳しいタイミング制約においてセットアップタイムを満足するように，集積回路を構成するセル及び配線をレイアウトする工程と，
当該レイアウトされた集積回路に対して，複数のタイミング制約において存在するホールドエラーが発生しているパス（以下ホールドエラーパス）と，各ホールドエラーパスにおけるホールドエラー値であって，修正により前記複数のタイミング制約を満足するホールドエラー値とを有するホールドエラーリストを生成する工程と，
複数のタイミング制約におけるセットアップマージンを検出し，前記ホールドエラーの修正によりセットアップエラーが発生する可能性のあるパス（以下セットアップエラーパス）と，各セットアップエラーパスにおけるセットアップマージンであって，前記複数のタイミング制約で共通するセットアップマージンとを有するセットアップマージンリストを生成する工程と，
前記集積回路の各パス上に，前記セットアップマージンリストのセットアップマージンを割り当てたセットアップマージンマップを生成する工程と，
前記セットアップマージンマップを参照して，前記割り当てられたセットアップマージンを満足する遅延量及び位置の範囲内で，前記ホールドエラーリストのホールドエラー値を修正する遅延バッファを挿入しレイアウトする遅延バッファ挿入工程とを有することを特徴とする。
【００２８】
上記のレイアウト方法によれば，前述したホールドエラー修正方法の作用に加えて，遅延バッファ挿入工程で，遅延バッファをレイアウトした状態で，セットアップマージンを満足するか否かが判断されるので，より適切にセットアップエラーの発生を回避することができる。
【００２９】
【発明の実施の形態】
以下，図面を参照して本発明の実施の形態例を説明する。しかしながら，本発明の保護範囲は，以下の実施の形態例に限定されるものではなく，特許請求の範囲に記載された発明とその均等物にまで及ぶものである。
【００３０】
［レイアウトシステムとレイアウトプロセス］
図３は，本実施の形態におけるレイアウトシステム構成図である。レイアウトシステムは，演算ユニット１０と，プログラム群１２と，ファイル群１４で構成される。プログラム群１２には，
（１）論理設計された論理回路のネットリストF10に含まれるセルや配線をレイアウトするレイアウトプログラムP10と，
（２）ネットリストF10とセルや配線の遅延特性を有する遅延ファイルF11とを参照して，所定のタイミング制約（F12）のもとにセットアップタイムとホールドタイムを抽出するスタティック・タイミング解析ツール（STAツール）P12と，
（３）レイアウトされた集積回路のホールドタイムが仕様上要求される値に満たないホールドエラーが発生しているパス（ホールドエラーパス）と，そのホールドエラー値（どれだけ不足しているかの値）とを有するホールドエラーリストF14を作成するホールドエラーリスト作成ツールP14と，（４）ホールドエラー修正によりセットアップエラーが発生する可能性のあるパス（セットアップエラーパス）のリストF16を抽出するセットアップエラーパス抽出ツールP16と，
（５）セットアップエラーパスにおけるセットアップマージン（仕様上要求されるセットアップタイムに対してどれだけ余裕があるかの値）を有するセットアップマージンリストF18を作成するツールP18と，
（６）集積回路のパス上のセルの前後に，セットアップマージンリストのセットアップマージンをセットアップマージンパス別に割り当てたセットアップマップF20を作成するツールP20と，
（７）ホールドエラーリストF14のホールドエラーを修正するために遅延バッファを，セットアップエラーが新たに発生しないように，挿入するホールドエラー修正ツールP22とを有する。
【００３１】
演算ユニット１０がこれらのプログラム群を適宜実行することにより，論理設計された論理回路をチップ上にレイアウトし，ホールドエラー修正を含む必要なタイミングエラーの修正を自動的に行う。
【００３２】
図４は，本実施の形態における第１のレイアウトプロセスのフローチャート図である。このレイアウトプロセスでは，最初に論理設計済みのネットリストF10内のセルや配線をチップ上にレイアウトするレイアウト工程S10が行われる。このレイアウト工程では，自動レイアウトアルゴリズム若しくはオペレータによるレイアウト指令に応答して，論理回路のセルや配線が，チップ上にレイアウトされ，レイアウトファイルF22が生成される。集積回路は，複数の動作モードに対応するタイミング制約を満足することが要求される。但し，レイアウト工程S10の処理を簡単化するために，この例では，複数のタイミング制約のうちセットアップタイムについて最も厳しい１つのタイミング制約TC1で，セットアップタイムのチェックとホールドタイムのチェックが行われる。
【００３３】
レイアウト工程では，バックグランドでSTAツールが動作し，セルや配線のレイアウトに対して，セットアップエラーが生じないか否かを常にチェックする。従って，あるセルや配線をレイアウトする時に，セットアップエラーが発生すれば，そのレイアウトは禁止され，別のレイアウトが促される。また，セットアップエラーのチェックは，遅延ファイルF11のMAX遅延特性の遅延値に従って行われる。MAX遅延特性の遅延値のほうが，セットアップエラーにはより厳しい条件だからである。
【００３４】
セットアップエラーをクリアしたレイアウトに対して，レイアウト工程S10では，タイミング制約TC1におけるホールドエラーがチェックされ，そのホールドエラーを修正するために，遅延バッファが挿入される。ここでは，１種類のタイミング制約TC1でのホールドエラーであるので，その修正に必要な遅延バッファの挿入は比較的簡単に行われる。その結果，タイミング制約TC1についてのみタイミングエラーのないレイアウトが完了する。従って，レイアウト工程S10のアウトプットは，レイアウトファイルF22と，遅延バッファ挿入により変更されたレイアウト後のネットリストF10Bである。
【００３５】
次に，複数のタイミング制約でのホールドエラーのチェック工程S12が行われる。各タイミング制約に対して，STAツールを実行することにより，ホールドタイムエラーが発生しているか否か，どの程度のエラー値であるかを検出することができる。好ましい実施例では，ホールドエラーのチェックでは，遅延ファイルF11のMIN遅延特性の遅延値とMAX遅延特性の遅延値の両方について行う。または，よりホールドエラーの発生頻度が高いMIN遅延特性の遅延値についてだけホールドエラーのチェックを行うことも行われる。
【００３６】
ホールドエラーが発生していなければ（S14），レイアウトプロセスは終了するが，発生していれば（S14），ホールドタイムエラー修正工程S16が行われる。このホールドタイムエラー修正工程S16が，本実施の形態の対象のホールドエラー修正方法である。詳細は後述するが，簡単に説明すると，この修正処理は，ホールドエラーが発生しているパスに，遅延バッファを挿入してホールドエラーをなくす処理である。その場合，セットアップマージンマップが作成され，それを参照してセットアップエラーが新たに発生しないように遅延バッファが挿入される。
【００３７】
ホールドエラー修正が終わると，そこで挿入された遅延バッファについて，再度レイアウト工程S10でレイアウトが行われ，レイアウト後の遅延特性に従って，ホールドエラーチェックが行われる（S12）。エラーが未だ発生している場合は，更に遅延バッファを挿入したり，遅延バッファのレイアウト位置を変更したりすることが行われる。
【００３８】
図５は，本実施の形態における第２のレイアウトプロセスのフローチャート図である。第２のレイアウトプロセスでは，第１の場合と異なり，レイアウト工程内で，複数のタイミング制約でのホールドエラーが修正され，レイアウト後の遅延特性でセットアップエラーやホールドエラーが存在しないことが確認される。
【００３９】
第２のレイアウトプロセスでは，最初に，STAツールP12がバックグランドで動作するレイアウトツールP10により，セットアップエラーが発生しないように，ネットリストF10内のセルや配線が，チップ上にレイアウトされる。このセットアップエラーのチェックは，第１のレイアウトプロセスと同様に，複数のタイミング制約のうちの最も厳しいタイミング制約TC1のもとでエラーが発生するか否かにより行われる。従って，レイアウトされた集積回路は，タイミング制約TC1のもとではセットアップエラーは生じていない。
【００４０】
次に，複数のタイミング制約TC1〜TCNに対してホールドエラーを修正する工程S16が実行される。このホールドタイムエラー修正工程S16は，第１のレイアウトプロセスと同じである。但し，この工程では，ホールドエラー修正のために挿入された遅延バッファをレイアウトした状態での遅延特性を利用して，セットアップエラーを生じない範囲で，ホールドエラー修正が行われる。従って，この工程を終了すると，レイアウトプロセスは完了することになる。
【００４１】
［ホールドエラー修正処理の概略］
次に，ホールドエラー修正工程について，その概略を説明する。図６は，本実施の形態におけるホールドエラー修正方法のフローチャート図である。図４，５に示したとおり，ホールドエラー修正工程の段階では，ネットリストF10，レイアウトファイルF22，遅延ファイルF11，タイミング制約ファイルF12とが提供される。タイミング制約ファイルF12には，集積回路の複数の動作モードに対応した複数のタイミング制約TC1〜TCNを記述したスクリプトファイルが含まれている。
【００４２】
最初に，レイアウトされた集積回路に対して，複数のタイミング制約におけるホールドエラーを検出し，ホールドエラーが発生しているホールドエラーパスと，各ホールドエラーパスにおけるホールドエラー値（どのくらいホールドタイムが足りないかを示す時間値）であって，複数のタイミング制約を満足するホールドエラー値とを有するホールドエラーリストF14を生成する（S100）。このホールドエラーリストの生成には，STAツールP12とホールドエラーリスト作成ツールP14のプログラムが実行される。そして，前述のとおり，遅延特性がMAX側（低速動作）とMIN側（高速動作）のそれぞれについて，ホールドエラーリストが別々に作成されることが望ましい。具体例については，後に詳述する。
【００４３】
各タイミング制約でSTAツールを実行させることで，ホールドエラーパスとそのホールドエラー値とが検出される。そして，同じパスに存在する複数のタイミング制約に対するホールドエラー値のうち，最も大きなエラー値が選択され合体される。このホールドエラーリストF14は，ホールドエラー修正対象リストであり，後にホールドエラー修正のために挿入される遅延バッファの遅延値と挿入位置を決定する基礎データである。最も大きなホールドエラー値がなくなれば，一つのパスにおいて全てのタイミング制約に対するホールドエラー値はなくなることになるので，複数のタイミング制約でのエラー値のうち最も大きなエラー値が選択される。
【００４４】
次に，ホールドエラー修正のために遅延バッファを挿入した場合に，セットアップエラーが発生する可能性のあるパスを，セットアップエラーパスとして抽出する（S102）。この抽出方法では，例えば，ホールドエラーパスと少なくとも一部を共有するパスが抽出される。または，ホールドエラー値のうち最大ホールドエラー値を修正するために遅延バッファを挿入した時に生成される，当該遅延バッファのMAX遅延特性での遅延量より小さいセットアップマージンしか有しないパスが全て抽出される。
【００４５】
前者の方法では，ホールドエラーパス内に遅延バッファが挿入されると，それによりセットアップタイムに影響が与えられるパスを抽出している。一方，後者の方法では，ホールドエラーをなくすためにそのエラー値の遅延量を持つ遅延バッファが挿入されると，その遅延量より小さいセットアップマージンしか有していないパスには，新たにセットアップエラーが発生する可能性があり，かかるパスが抽出される。抽出処理に応じて，又は抽出結果のデータ量に応じて，いずれかの方法が選択される。セットアップエラーパスは，MAX遅延特性とMIN遅延特性に共通に生成される。
【００４６】
更に，STAツールP12によりセットアップエラーパスにおけるセットアップマージンが，複数のタイミング制約に対して検出され，それら複数のタイミング制約を満足することができるセットアップマージンが選択され，セットアップマージンリストF18が作成される（S104）。複数のタイミング制約を満足させるためには，各タイミング制約に対して検出されるマージンのうち，最も小さいマージンを選択して，各セットアップエラーパスのマージンとすれば良い。つまり，このセットアップマージンの範囲内で遅延バッファを挿入すれば，新たにセットアップエラーが発生することはないからである。
【００４７】
そして，セットアップマージンリストF18のマージン値を，ホールドエラーパス上のセルの前後に，パス毎に区別して割り当てて，セットアップマージンマップF20が生成される（S106）。このセットアップマージンマップF20は，ホールドエラー修正のための遅延バッファを挿入するときに，新たなセットアップエラーが発生しないことを確認するために利用される。つまり，このマップを参照して，ある位置に挿入する遅延バッファの遅延量が，その挿入位置におけるマップ上のセットアップマージンを越えないようにする。マージンの範囲内であれば，新たなセットアップマージンは発生しないからである。
【００４８】
そして，最後に，ホールドエラーリスト内のエラー値をなくすために，エラー値に対応する遅延量を有する遅延バッファを，ホールドエラーパス内に挿入してホールドエラー修正を行う（S108）。その時，セットアップマージンマップF20を参照して，このマージンを越えない範囲の遅延量及び位置について，遅延バッファを挿入する。
【００４９】
遅延バッファを複数個挿入する必要がある場合は，一つの遅延バッファを挿入した後，セットアップマージンマップを更新して（S110），次の遅延バッファの遅延量と位置を選択し，再度挿入する（S108）。この処理S108，S110が，全てのホールドエラーの修正が完了するまで，つまり，ホールドエラーリストのエラー値がなくなるまで，繰り返される（S112）。
【００５０】
［具体例］
次に，具体的な回路例を示して，上記のホールドタイムエラー修正プロセスを説明する。図７，図８は，本実施の形態におけるホールドタイムエラー修正プロセスの詳細フローチャート図である。図６と同じ工程，処理には，同じ引用番号を与えている。図９は，修正プロセスの対象となる具体的な回路例を示す図である。この回路例は，図２に示した回路例と同様に，４つのフリップフロップFF1〜FF4とゲートGATEを有し，フリップフロップFF1の出力データQは，ゲートの入力A1に入力され，その出力Ｘが，セルIの後段で分岐されて，フリップフロップFF2とFF4の入力Dに供給される。また，フリップフロップFF3の出力データQは，ゲートの入力A2に入力される。従って，図９の回路は，フリップフロップFF1からフリップフロップFF2とFF4への２つの信号パスと，フリップフロップFF3からフリップフロップFF2,FF4への２つの信号パスとを有する。更に，図９の回路例では，信号パス上に，複数のセルA〜Mが配置されている。
【００５１】
［ホールドエラーリストの作成］
さて，この回路のネットリストと，レイアウトファイルとが生成された状態で，ホールドタイムエラー修正が行われる。まず，ホールドエラーリストF14が生成される。図１０は，図９の回路例に対するホールドエラーリストを示す図である。
【００５２】
図７の詳細フローチャートに示されるとおり，ホールドエラーリストF14の作成工程は，ホールドエラー解析S100Aと，ホールドエラーリストの合体工程S100Bとからなる。ホールドエラーの解析とそのエラー値の抽出は，STAツールP12が，ネットリストF10とレイアウトファイルF22と遅延ファイルF11とタイミング制約ファイルF12を参照して行う。ホールドエラーの検出は，全てのタイミング制約について，MIN側（高速動作）の遅延特性とMAX側（低速動作）の遅延特性それぞれについて行われる。従って，図７のフローチャートでは，このホールドエラー解析が，各タイミング制約のMIN遅延特性とMAX遅延特性それぞれについて，並列的に行われる。
【００５３】
図１０の例には，２つのタイミング制約TC1,TC2におけるMIN遅延特性（高速動作）についてリスト（Ａ）（Ｂ）が示されている。図１０（Ａ）は，タイミング制約TC1におけるホールドエラーリストであり，フリップフロップFF1−FF2間のホールドエラーパスでは，−25psのホールドエラーが，フリップフロップFF1−FF4間のホールドエラーパスでは，−100psのホールドエラーがそれぞれ検出されている。ここで，フリップフロップFF1−FF2間のパスは，FF1のクロックCKに応答して入力Dが取り込まれ，その出力QがゲートGATEを介してFF2の入力Dに供給されるパスである。そして，図２で示したように，フリップフロップFF2のクロックCKの立ち上がりエッジ後から入力Dが変化するまでのホールドタイムが，FF2で仕様上要求されているホールドタイムよりどの程度短いかを示す値が，ホールドエラー値である。従って，このホールドエラー値以上の遅延値を持つ遅延バッファがそのパス上に挿入されれば，このホールドエラーは修正されることになる。その場合，遅延バッファの個数は複数個でも良い。
【００５４】
同様に，図１０（Ｂ）は，タイミング制約TC2におけるホールドエラーリストであり，フリップフロップFF1−FF2間のホールドエラーパスでは，−10psのホールドエラーが，フリップフロップFF3−FF4間のホールドエラーパスでは，−100psのホールドエラーがそれぞれ検出されている。
【００５５】
次に，それぞれのタイミング制約で求めたホールドエラーリストが，各ホールドエラーパスにおける複数のタイミング制約を満たすことができるホールドエラー値を選択して合体される（S100B）。図１０（Ａ）（Ｂ）の例で説明すると，ホールドエラーパスFF1−FF2が，両方のタイミング制約TC1,2で重複している。タイミング制約TC1では−25psのエラー値が，制約TC2では−10psのエラー値がそれぞれ検出されている。いずれの制約においてもホールドエラーを修正するためには，両者の最大ホールドエラー値を選択すべきである。最大ホールドエラー値が修正されるように遅延バッファが挿入されれば，いずれのタイミング制約でも，ホールドエラーは発生しないからである。
【００５６】
このように，複数のタイミング制約でのエラー値が同一パス毎にまとめられ，最大のエラー値が選択されて合体される。合体後の全体ホールドエラーリストは，図１０（Ｃ）に示される通りである。このリストF14は，３つのホールドエラーパスとそのホールドエラー値とを有する。このホールドエラーリストF14のホールドエラー値をなくすように，各パスに遅延バッファを挿入することが行われる。
【００５７】
尚，具体例には，MIN遅延特性でのホールドエラーリストのみが示される。MAX遅延特性で求めると，ホールドタイムにとってより緩和された条件であるので，ホールドエラーの発生頻度はより低くなり，場合によっては，MIN遅延特性のホールドエラーに含まれることもある。但し，例外的に，MIN遅延特性のホールドエラー以外のパスに，MAX遅延特性のホールドエラーが発生したり，MIN遅延特性のホールドエラー以上のエラー値が発生したりする場合もある。従って，念のために，両方のホールドエラーリストを作成することが好ましい。
【００５８】
［セットアップマージンリストとマップの作成］
次に，ホールドエラー修正により遅延バッファを挿入した場合にセットアップエラーが発生する可能性のあるパス（セットアップエラーパス）が抽出される（S102）。図１０（Ｃ）に示したホールドエラーリストには，３つのホールドエラーパスしか含まれておらず，パスFF3−FF2は含まれていない。しかし，図９に示されるとおり，パスFF3−FF2は，セルＩが設けられた部分的なパスをパスFF1−FF2と共有している。或いは，パスFF3−FF2は，セルE,F,G,Hが設けられた部分パスを，パスFF3−FF4と共有している。従って，ホールドエラーパスFF1−FF2，FF3−FF4のどこかに遅延バッファが挿入されると，それらと部分的にパスを共有しているパスFF3−FF2のセットアップタイムが変更され，セットアップエラーが発生する可能性がある。
【００５９】
そこで，セットアップエラーパス抽出処理S102では，ホールドエラーパスとパスの一部分でも共有する関連パスを，セットアップエラーパスとして抽出することが行われる。これにより，後の遅延バッファ挿入時に参照すべきセットアップマージンマップのサイズを小さくすることができる。
【００６０】
次に，STAツールを実行して，各タイミング制約TC1,TC2において，各セットアップエラーパスがどれくらいのセットアップマージンを有しているかを検出する。セットアップエラーマージンは，仕様上要求されるセットアップタイムと実際のセットアップタイムとの時間差であり，このマージン値以内の遅延量であれば，遅延バッファを挿入してもセットアップエラーが発生しない。そして，セットアップエラーに対して厳しいMAX遅延特性でセットアップマージンが求められる。
【００６１】
図７のフローチャートでは，セットアップマージンリスト工程S104が，各タイミング制約のマージン検出工程S104Aと，各マージンリストを合体する工程S104Bとに分割されている。そして，セットアップマージン検出工程S104Aは，各タイミング制約毎に並列処理が可能である。
【００６２】
図１１（Ｂ）は，タイミング制約TC1におけるセットアップマージンリストである。図１１（Ａ）に示された抽出された関連パスそれぞれのマージンが含まれる。更に，図１１（Ｃ）は，タイミング制約TC2におけるセットアップマージンリストである。両リストを比較すると，パスFF1−FF2でタイミング制約TC1ではマージンが500psであるが，制約TC2では600psであり，一方，パスFF3−FF2では，制約TC1で700ps，制約TC2で400psと異なっている。
【００６３】
そこで，次のセットアップマージンリストの合体処理S104Bでは，同じパスにおいて，最小のマージンをそのパスのセットアップマージンとして，最終的なセットアップマージンリストF18を生成する。図１１（Ｄ）は，そのセットアップマージンリストである。最小のセットアップマージンとは，セットアップエラー発生の可能性の高い値を意味し，後の遅延バッファ挿入時に参照すべきセットアップマージンマップには，その厳しいほうのマージンがパス上に割り当てられる。図１１（Ｅ）は，（Ｄ）と同じセットアップマージンリストF18である。
【００６４】
次に，セットアップマージンマップが作成される（S106）。この処理では，図１１に示されたセットアップマージンリストF18の各パス上に存在する各セルに対して，パス毎に分類してセットアップマージンを割り当てることで行われる。
【００６５】
図１２は，パスFF1−FF2のセットアップマージンを割り当てた時のセットアップマージンマップを示す図である。パスFF1−FF2上の各セルとゲートに対して，セットアップマージンリストF18のマージン500psが割り当てられている。この割り当てられたマージンは，パスFF1−FF2に対するマージンであることが区別可能にされる。
【００６６】
図１３は，パスFF3−FF4のセットアップマージンを割り当てた時のセットアップマージンマップを示す図である。パスFF3−FF4上の各セルとゲートに対して，セットアップマージンリストF18のマージン300psが割り当てられている。
【００６７】
そして，図１４は，パスFF1−FF4とFF3−FF2のセットアップマージンを割り当てた時のセットアップマージンマップを示す図である。パスFF1−FF4上の各セルとゲートに対して，マージン200psが，パスFF3−FF2上の各セルとゲートに対して，マージン400psがそれぞれ割り当てられている。セットアップマージンリストF18の全てのパスのマージンが割り当てられたので，図１４が最終的なセットアップマージンマップを示す。
【００６８】
このセットアップマージンマップでは，各セルに割り当てられたマージンの中で一番小さいマージンが，そのセルの前後に挿入可能な遅延値を示す。従って，ホールドエラーをなくすために挿入する遅延バッファは，このマップを参照して，その遅延量と挿入位置を決定すれば，新たなセットアップエラーの発生を回避することができる。つまり，挿入する位置における最小マージンの範囲内の遅延量であれば，遅延バッファを挿入しても，セットアップエラーは発生しない。
【００６９】
但し，注意すべき点は，このセットアップマージンマップのマージンは，MAX遅延特性により求められたものであるので，挿入する遅延バッファのMAX遅延特性の遅延量が，マップ内の最小マージンより小さいことを確認する必要がある。そして，逆に，ホールドエラーリスト内のエラー値については，対応する側の遅延量でエラー値が解消されることを確認する必要がある。
【００７０】
［遅延バッファの挿入によるホールドエラー修正］
次に，セットアップマージンマップのマージンを満足する範囲で，遅延バッファを挿入して，ホールドエラーリスト内のホールドエラーを修正する（S108,S110,S112）。この処理は，ホールドエラー修正サブルーチンとして，図８のフローチャートに詳細が示される。
【００７１】
図８に示されるとおり，最初に，遅延バッファを挿入するに適している位置を検出するために，複数のホールドエラーパスに関連するセルを抽出する（S120）。できるだけ多くのホールドエラーパスが通過するセルの前後に，遅延バッファを挿入することで，少ない数の遅延バッファにより多くのホールドエラーパスのホールドエラーを修正することができる。ここでの回路例では，ゲートの出力ＸとセルＩの位置を，４つのホールドエラーパスが同時に通過し，それ以外のセルを，それぞれ２つのホールドエラーパスが通過している。つまり，全てのセルが，抽出工程S120で抽出される。ここで抽出されたセルの前後が，遅延バッファの挿入位置として優先的に選ばれる。
【００７２】
次に，ホールドエラー修正可能な遅延バッファの遅延量と挿入位置の候補が選択される（S122）。具体的には，MIN遅延特性（高速動作）のホールドエラーリストのエラー値をできるだけなくすことができる遅延量（MIN遅延特性（高速動作））を持つ遅延バッファが，セットアップマージンマップで許容される範囲内（但しMAX遅延特性）で，選択される。そして，その遅延バッファが仮に挿入される（S124）。
【００７３】
図１５は，パスFF1−FF4のホールドエラー−100psを修正するためにセルを挿入した時のセットアップマージンマップの図である。この例では，セルＮがセルＩとセルＬとの間に挿入されている。マージンマップには，その位置に関係する全てのパスのマージン値が記述されている。そして，マージンマップによると，セルＬのセットアップマージンは，最小で200psである。従って，MAX遅延特性（低速動作）で200ps未満の遅延バッファであれば，挿入可能であることが判断できる。そこで，MIN遅延特性（高速動作）で100psを越えて，MAX遅延特性（低速動作）で200ps未満の遅延バッファＮを挿入すれば，新たなセットアップエラーを生じることなく，パスFF1−FF4のホールドエラーを修正することができる。
【００７４】
図８の詳細なフローチャートによれば，遅延バッファを仮に挿入してから， MAX遅延特性（低速動作）のホールドエラーリストをチェックし，パスFF1−FF4のMAX遅延特性におけるホールドエラーも修正されたか否かのチェックが行われる（S128）。このチェックは，挿入したバッファのMAX遅延特性での遅延量がMAX遅延特性でのホールドエラー値を越えていれば，そのエラー修正が行われたとみなすことにより行われる。これを行うことにより，パスFF1−FF4のMAX,MIN両方のホールドエラーが同時に修正可能になる。MAX遅延特性のホールドエラーの修正を省略する場合は，工程S126,S128を省略することができる。
【００７５】
遅延バッファＮを挿入した結果，セットアップマージンマップが更新される（S130）。遅延バッファＮを挿入したことに伴い，マージンマップ内のマージンが一部減少（より厳しく）なっているからである。図１６は，そのアップデート後のセットアップマージンマップを示す図である。
【００７６】
挿入した遅延セルＮの位置からどのパスにその遅延セルが影響を与えるかをマージンマップから抽出する。マージンマップには，セルＬの位置にパスFF1−FF4とFF3−FF4のマージンが割り当てられており，これらのパスに影響を与えることが判明する。そこで，前述のとおり，セットアップマージンに影響を与えるMAX遅延特性（低速動作）での挿入遅延セルＮの遅延値を計算する。この計算は，例えば，挿入した遅延セルＮの遅延計数を基準遅延量にかけて（乗算），MAX遅延特性での遅延値を得る。ここでは，挿入遅延セルＮのMIN遅延特性（低速動作）の遅延値が100psであり，それに遅延計数1.5を乗算して，MAX遅延特性（高速動作）の遅延値150psを得る。
【００７７】
そこで，マージンマップのパスFF1−FF4とFF3−FF4のマージンから挿入セルＮの遅延値150psをそれぞれ減算すると，図１６のアップデート後のマージンマップF20が得られる。このマージンマップには，マイナスのマージンがないので，新たなセットアップマージンが発生することはないことが確認できる。また，この更新後のマージンマップF20には，挿入した遅延セルに対しても，マージンが割り当てられる。
【００７８】
図１７は，遅延セルＮを挿入したことに伴うアップデート後のセットアップマージンリストF18とホールドエラーリストF14を示す図である。図１７（Ａ）のセットアップマージンリストF18では，パスFF1−FF4とFF3−FF4のマージンがそれぞれ50ps,150psと減っている。また，図１７（Ｂ）のホールドエラーリストF14では，修正したパスFF1−FF4のホールドエラーがなくなっている。
【００７９】
以上のように，ホールドエラー修正可能な挿入セルのMAX遅延特性（低速動作）での遅延値を算出し，セットアップマージンマップを参照して，ホールドエラーパス上の各セルをスキャンし，算出した遅延値が挿入位置の最小マージンの範囲内に納まるかどうかを判断し，納まるならその位置を挿入位置と決定する。そして，その算出遅延値について，セットアップマージンマップを更新する。この処理が，全てのホールドエラーが修正されるまで繰り返される（S112）。
【００８０】
次に，パスFF3−FF4のホールドエラー−100psを修正する処理を説明する。図１８は，パスFF3−FF4のホールドエラー100psを修正するためにセルを挿入した時のセットアップマージンマップの図である。パスFF3−FF4のホールドエラー100ps（MIN遅延特性）を修正するために，パスのいずれかの位置にMIN遅延特性の遅延量が100psの遅延セルを挿入するためには，その遅延セルのMAX遅延特性の遅延量150ps（遅延計数1.5の場合）以上のセットアップマージンを有する位置を選択しなければならない。
【００８１】
図１８のマージンマップによれば，パスFF3−FF4のゲートGATEより後段の位置では，最小マージンが50psであり，挿入することができない。一方，パスFF3−FF4のゲートGATEより前段の位置であれば，最小マージンが150psであるので，挿入することができる。そこで，図１８に示されるとおり，セルＦとＧの間が挿入セルＰの挿入位置に選ばれる。
【００８２】
図１９は，上記の挿入セルＰを挿入したことに伴うアップデート後のセットアップマージンマップF20を示す図である。セルE,F,G,H,Gate(A2-X),I,J,K,L,MのマージンがパスFF3−FF4とFF3−FF2に対するものであるので，それらのパスのマージンから，上記MAX遅延特性の遅延値150psが減算されている。その結果，パスFF3−FF4のセットアップマージンは０psになり，これ以上の遅延セルを挿入することはできなくなっている。
【００８３】
図２０は，遅延セルＰを挿入したことに伴うアップデート後のセットアップマージンリストF18とホールドエラーリストF14を示す図である。ホールドエラーリストF14によれば，残るホールドエラーは，パスFF1−FF2の−25psのみとなった。
【００８４】
図２１は，パスFF1−FF2のホールドエラー−20psを修正するためにセルを挿入した時のセットアップマージンマップの図である。MIN遅延特性の遅延値20psを持つ遅延セルのMAX遅延特性の遅延値が50psとすると，パスFF1−FF2上の各セルにおいて，最小マージンが50ps以上の位置を検出する。図２１のマージンマップでは，ホールドエラーパスFF1−FF2のうちセルIの前後を除くいずれの位置であっても，最小マージンは50ps以上であるので，セルI前後以外ならどこでも挿入可能であることがわかる。図２１の例では，セルＢ，Ｃの間に，遅延セルＱが挿入される。
【００８５】
図２２は，遅延セルＱの挿入に伴い，アップデートされたセットアップマージンマップF20を示す図である。図示されるとおり，パスFF1−FF2の一部及びパスFF1-FF4の間の最小マージンは０になったが，マイナスにはなっておらず，新たなセットアップエラーは発生していない。
【００８６】
以上で，全てのホールドエラーが修正されたことになる。そして，セットアップマージンマップには，マイナスマージンが発生していないので，新たなセットアップエラーの発生は回避されている。
【００８７】
［変形例１］
上記の実施の形態では，工程S102にて，ホールドエラー修正のために遅延バッファを挿入した時に影響を受けるパス（関連セットアップエラーパス）として，ホールドエラーパスと少なくとも一部を共有するパスを抽出した。これによりセットアップマージンマップの規模を適正な大きさにすることができた。
【００８８】
一つの変形例では，上記のホールドエラーパスと少なくとも一部を共有するパスを抽出することが困難な場合は，以下の方法で関連セットアップエラーパスを抽出しても良い。即ち，ホールドエラーリストのエラー値のなかの最大ホールドエラー値を抽出し，そのエラー値の遅延バッファを挿入した時に，MAX遅延特性でどれだけの遅延量が追加されるかを求める。そして，各タイミング制約で求めたセットアップマージンのうち，上記MAX条件での遅延量以下のセットアップマージンを持つパスを，セットアップエラーパスとして抽出する。
【００８９】
従って，この抽出工程は，図７の工程S104Bの後で，工程S106の前に行われる。セットアップマージンリストF18は，全てのパスとそのマージンが含まれ，その中から，上記最大ホールドエラーに対応するMAX遅延特性の遅延値以下のパスが抽出される。これらのパスの中には，ホールドエラーパスと何ら関係のないパスも含まれるが，少なくとも，最大のホールドエラー修正のために遅延セル（又は遅延バッファ）が挿入されても，セットアップエラーが発生し得ない大きなマージンを有するパスは除外される。それにより，ある程度はマージンマップの規模を小さくすることができる。但し，遅延バッファを挿入するときの参照すべきマージンマップの規模は大きくなる可能性がある。上記の実施の形態と，処理の重さを比較して，より適切な方法が選択される。
【００９０】
［変形例２］
セットアップマージンマップのマージン値に，所定のマージンだけ減算して取り扱うようにする。前述の実施の形態では，挿入セルのMAX遅延特性での遅延値が最小マージン以下であれば，その位置での挿入を許可した。しかし，STAツールによる演算誤差を考慮して，マージンマップのマージン値を例えば２０％程度低く設定する。もしくは，挿入セルのMAX遅延特性での遅延値が最小マージン値の８０％以下の時にその位置での挿入を許可する。こうすることにより，セットアップマージンの計算にある程度の誤差があっても，確実にセットアップエラーの発生を回避することができる。
【００９１】
特に，図４に示したレイアウトプロセスにおいて，ホールドエラー修正のために遅延セルを挿入する工程S16では，挿入された遅延セルのレイアウト処理が未処理であり，レイアウトによる遅延値の増加の可能性がある。その為，遅延セルのレイアウトができなくなる可能性もある。上記のセットアップマージンにマージンを設けることにより，そのような可能性を低く抑えることができる。
【００９２】
［変形例３］
図９〜図２２の具体例では，ホールドエラーリストは，図１０に示されるMIN遅延特性でのエラーの修正を行っている。従って，セットアップエラーパスも，そのMIN遅延特性でのホールドエラーパスに関連するものだけを抽出した。そこで，ホールドエラーリストに，MAX遅延特性でのエラーも含める場合は，そのMAX側のホールドエラーパスに関連するセットアップエラーパスも抽出して，そのパスのセットアップマージンをセットアップマージンマップに追加する必要がある。従って，MAX遅延特性のホールドエラーリストが追加されても，セットアップマージンマップは１種類で良いことになる。
【００９３】
ホールドエラーリストの作成は，MAX遅延特性もMIN遅延特性も同じである。そして，挿入する遅延セル候補の選択においては，MIN遅延特性のホールドエラーを優先的に修正する。ホールドエラーはMIN遅延特性（高速動作）のほうがより多く発生するので，そちらを優先して修正することにより，同時にMAX遅延特性のホールドエラーも修正する確率が高いからである。
【００９４】
ホールドエラー修正処理では，まずMIN遅延特性のホールドエラーを修正する遅延セル候補が選択されると，同一パスにMAX遅延特性のホールドエラーパスが存在する場合は，そのホールドエラーも修正されるか否かをチェックする。このチェックでは，挿入する遅延セルのMAX遅延特性での遅延値が使用される。そして，MAX遅延特性のホールドエラー値より挿入遅延セルの遅延値が大きければ，MAX遅延特性のホールドエラーも修正されたことになる。小さければ，挿入する遅延セル候補の遅延値を大きくして再度評価する。更に，全てのMIN遅延特性のホールドエラーが修正された後，更にMAX遅延特性のホールドエラーが残っている場合は，その残ったホールドエラーの修正のための遅延セルの挿入を行う。
【００９５】
［変形例４］
ホールドエラーは，厳密に言えば，データの立ち上がり時（UP）と，立ち下がり時（DOWN）とで別々の存在する。従って，より厳密にホールドエラー修正を行うためには，UPとDOWNの両方についてホールドエラーリストを作成し，それぞれの修正を行う処理が必要になる。その場合は，挿入する遅延セルの遅延量は，UPとDOWNとに分けて処理することになる。それに伴い，セットアップマージンマップも，UPとDOWNに分けて生成し，それぞれの処理では別のマージンマップを参照する。
【００９６】
図２３は，立ち上がり時と立ち下がり時のホールドエラーを有するホールドエラーリストの例である。図１０のホールドエラーリストF14と比較すると，ホールドエラーに，UPとDOWNの二種類が含まれる。また，パスによっては，一方のホールドエラーのみが存在することもある。
【００９７】
データ信号の立ち上がりと立ち下がりのホールドエラーを検出した後，ホールドエラーリストのエラー値を，UPのエラー値とDOWNのエラー値のうち大きいエラー値を代表させることでも良い。その場合は，セットアップマージンマップも，UPとDOWNのマージンのうち小さい値を代表させて一つにする。それにより，処理を簡略化することができる。
【００９８】
［変形例５］
図８のホールドエラー修正サブルーチンの工程S120で既に説明したが，ホールドエラー修正のための遅延セルの挿入位置を，複数のホールドエラーパスが重複するパスの位置にすることにより，挿入する遅延セル数を最小化することが可能になる。図２４は，その挿入する遅延セル数を最小化する方法を示す図である。この回路例において，パスFF1−FF2とパスFF1−FF3がホールドエラー発生パスとする。この場合は，セルA,B,C,D,Eの前後に遅延セルを挿入することができれば，２つのパスのホールドエラーを同時に減らすことができる。従って，遅延セル挿入位置の選択は，これらの重複する位置のセルを優先することで，挿入する遅延セルの数をできるだけ少なくすることができる。
【００９９】
また，複数のホールドエラーパスが重複する位置に，ホールドエラー値未満であっても挿入可能な遅延量の遅延セルを挿入することによっても，同様に挿入遅延セルの数を少なくすることができる場合がある。
【０１００】
［変形例６］
上記の実施の形態では，セットアップマージンマップF20を作成するときに，各パスのセットアップマージンをパス上のセルに割り当てた。しかし，本発明はそれに限定されず，セル以外の挿入候補位置に割り当てても良い。或いは，パス上にセルが存在しない場合は，仮想のセットアップマージン設定ポイントを設定し，そこにセットアップマージンを割り当てても良い。その場合は，遅延セルの挿入候補の位置にかかる仮想の設定ポイントを追加する。いずれの場合も，データ処理を可能にするために，仮想のセル（または仮想ポイント）を設定し，その仮想セルにセットアップマージンを割り当てる。
【０１０１】
図２５は，パス上にセルが存在しない回路例を示す図である。この例では，パスFF3−A2，パスX−FF4，パスX−FF4には，セルが存在しない。この場合は，セットアップマージンを設定する仮想セル（仮想ポイント）を設定し，そこにセットアップマージンを設定する。図２６は，仮想セルを設定した後の回路図である。この例では，上記のセルが存在しないパス上に，仮想セルVA,VB,VCが設定されている。パスX−FF2とパスX−FF4には，分岐点より手前に仮想セルVAが設定されている。
【０１０２】
仮想セル設定のルールは次の通りである。（１）パスFF−FF間にセルが１つも存在しなかったら，仮想セルを挿入する。（２）パスFF−FF間で異なる経路から来た信号が論理ゲートGATEを通って収斂する場合（図２５では，ゲートGATEを通過してゲートの出力Ｘで収斂する部分），収斂した信号とその後段のフリップフロップFFとの間に何もセルが存在しない場合に，仮想セルを挿入する。この例は，図２６の仮想セルVAが該当する。（３）パスFF−FF間の分岐配線で，各配線セグメント上に何もセルが存在しない場合は，各配線セグメントに仮想セルを挿入する。この例は，図２６の仮想セルVA,VB,VCが該当する。
【０１０３】
尚，パスFF3−A2の間には，仮想セルが挿入されていないが，ゲートGATEの入力A2−出力Ｘの位置にパスFF3−A2についてのセットアップマージンを割り付けることができるので，そのパスへの仮想セルの挿入は不要である。
【０１０４】
前述の実施の形態における図９の回路例において，複数のセルA〜Mが存在しているが，それらとは別に，遅延セル挿入候補位置として仮想ポイントを設定することもできる。その場合は，各配線セグメントに仮想ポイントが設定される。つまり，パスFF1−A1，パスFF3−A2にそれぞれ仮想ポイントを設定し，更に，ゲートGATEの出力Ｘと分岐点の間に仮想ポイントを，分岐点とFF2の間，及び分岐点とFF4の間にそれぞれ仮想ポイントを設定すればよい。そして，これらの仮想ポイントにセットアップマージンを割り当てて，マージンマップを生成することができる。
【０１０５】
以上，実施の形態例をまとめると以下の付記の通りである。
【０１０６】
（付記１）集積回路のホールドエラー修正方法において，
レイアウトされた集積回路に対して，複数のタイミング制約において存在するホールドエラーが発生しているパス（以下ホールドエラーパス）と，各ホールドエラーパスにおけるホールドエラー値であって，修正により前記複数のタイミング制約を満足するホールドエラー値とを有するホールドエラーリストを生成する工程と，
複数のタイミング制約におけるセットアップマージンを検出し，前記ホールドエラーの修正によりセットアップエラーが発生する可能性のあるパス（以下セットアップエラーパス）と，各セットアップエラーパスにおけるセットアップマージンであって，前記複数のタイミング制約で共通するセットアップマージンとを有するセットアップマージンリストを生成する工程と，
前記集積回路の各パス上に，前記セットアップマージンリストのセットアップマージンを割り当てたセットアップマージンマップを生成する工程と，
前記セットアップマージンマップを参照して，前記割り当てられたセットアップマージンを満足する遅延量及び位置の範囲内で，前記ホールドエラーリストのホールドエラー値を修正する遅延バッファを挿入する遅延バッファ挿入工程とを有することを特徴とするホールドエラー修正方法。
【０１０７】
（付記２）付記１において，
前記挿入バッファ挿入工程において，前記挿入された遅延バッファの遅延量を挿入位置のセットアップマージンから減算して更新し，更に，当該更新したセットアップマージンマップを参照して，ホールドエラー値を修正する別の遅延バッファを挿入することを特徴とするホールドエラー修正方法。
【０１０８】
（付記３）付記２において，
前記セットアップマージンの更新において，前記減算される遅延バッファの遅延量は，遅延が大きい遅延特性における遅延量であることを特徴とするホールドエラー修正方法。
【０１０９】
（付記４）付記１において，
前記セットアップマージンリスト生成工程において，前記セットアップエラーパスの生成は，前記ホールドエラーパスの少なくとも一部を共有するパスを抽出することにより行われることを特徴とするホールドエラー修正方法。
【０１１０】
（付記５）付記１において，
前記セットアップマージンリスト生成工程において，前記セットアップエラーパスの生成は，前記ホールドエラー値の最大値以下のセットアップマージンを有するパスを抽出することにより行われることを特徴とするホールドエラー修正方法。
【０１１１】
（付記６）付記１において，
前記セットアップマージンリストの生成工程において，前記複数のタイミング制約に共通するセットアップマージンは，同じセットアップエラーパスにおける，前記複数のタイミング制約それぞれのセットアップマージンの中の最小値が選択されることを特徴とするホールドエラー修正方法。
【０１１２】
（付記７）付記１において，
前記セットアップマージンは，信号の立ち上がりと立ち下がりそれぞれについて検出されることを特徴とするホールドエラー修正方法。
【０１１３】
（付記８）付記７において，
前記セットアップマップにおけるセットアップマージンは，前記信号の立ち上がりと立ち下がりそれぞれのマージンの最小値が選択されることを特徴とするホールドエラー修正方法。
【０１１４】
（付記９）付記１において，
前記遅延バッファ挿入工程において，前記セットアップマップにおけるセットアップマージンは，演算により求められたセットアップマージンよりも所定の割合小さく設定されることを特徴とするホールドエラー修正方法。
【０１１５】
（付記１０）付記１において，
前記ホールドエラーリスト生成工程において，前記複数のタイミング制約を満足するホールドエラーは，同じホールドエラーパスにおける，前記複数のタイミング制約それぞれのホールドエラー値の中の最大値が選択されることを特徴とするホールドエラー修正方法。
【０１１６】
（付記１１）付記１において，
前記ホールドエラーリストは，遅延が大きい第１の遅延特性におけるホールドエラー値を有するリストと，前記第１の遅延特性より遅延が小さい第２の遅延特性におけるホールドエラー値を有するリストとを有することを特徴とするホールドエラー修正方法。
【０１１７】
（付記１２）付記１１において，
前記遅延バッファ挿入工程において，両リストのホールドエラー値を修正するように遅延バッファを挿入することを特徴とするホールドエラー修正方法。
【０１１８】
（付記１３）付記１２において，
前記遅延バッファ挿入工程において，第２の遅延特性におけるホールドエラー値を修正する遅延バッファの挿入を優先して行うことを特徴とするホールドエラー修正方法。
【０１１９】
（付記１４）付記１において，
前記ホールドエラーリストは，信号の立ち上がりと立ち下がりそれぞれについて有することを特徴とするホールドエラー修正方法。
【０１２０】
（付記１５）付記１５において，
前記セットアップマージンマップも，前記信号の立ち上がりと立ち下がりそれぞれについて有し，
前記遅延バッファ挿入工程において，前記信号の立ち上がりについてのホールドエラーを修正するときは，前記立ち上がりについてのセットアップマージンマップを参照し，前記信号の立ち下がりについてのホールドエラーを修正するときは，前記立ち下がりについてのセットアップマージンマップを参照することを特徴とするホールドエラー修正方法。
【０１２１】
（付記１６）付記１において，
前記ホールドエラーリストの生成工程において，信号の立ち上がりについてのホールドエラー値と信号の立ち下がりについてのホールドエラー値のうちの最大値を，前記ホールドエラー値として選択されることを特徴とするホールドエラー修正方法。
【０１２２】
（付記１７）付記１６において，
前記セットアップマージンマップのマージンは，信号の立ち上がりについてのマージンと信号の立ち下がりについてのマージンのうちの最小値が選択されることを特徴とするホールドエラー修正方法。
【０１２３】
（付記１８）付記１において，
前記遅延バッファ挿入工程において，前記遅延バッファの挿入位置の選択を，複数のホールドエラーパスが重なっている位置を優先して行うことを特徴とするホールドエラー修正方法。
【０１２４】
（付記１９）付記１において，
前記セットアップマージンマップの生成工程において，前記セットアップエラーパス上に存在する論理セルの位置に，前記セットアップマージンが割り当てられることを特徴とするホールドエラー修正方法。
【０１２５】
（付記２０）付記１において，
前記セットアップマージンマップの生成工程において，前記セットアップエラーパス上に設定した仮想ポイントの位置に，前記セットアップマージンが割り当てられることを特徴とするホールドエラー修正方法。
【０１２６】
（付記２１）集積回路のレイアウト方法において，
複数のタイミング制約のうち少なくとも最も厳しいタイミング制約においてセットアップタイムを満足するように，集積回路を構成するセル及び配線をレイアウトする工程と，
付記１乃至２０のいずれかに記載したホールドエラー修正工程とを有し，
前記遅延バッファ挿入工程において，前記挿入された遅延バッファがレイアウトされることを特徴とするレイアウト方法。
【０１２７】
（付記２２）集積回路のホールドエラー修正を行うコンピュータプログラムにおいて，
付記１乃至２０のいずれかに記載したホールドエラー修正工程をコンピュータに実行させるコンピュータプログラム。
【０１２８】
（付記２３）集積回路のレイアウトを行うコンピュータプログラムにおいて，複数のタイミング制約のうち少なくとも最も厳しいタイミング制約においてセットアップタイムを満足するように，集積回路を構成するセル及び配線をレイアウトする工程と，
付記１乃至２０のいずれかに記載したホールドエラー修正工程とをコンピュータに実行させ，
前記遅延バッファ挿入工程において，前記挿入された遅延バッファをレイアウトすることを特徴とするレイアウトプログラム。
【０１２９】
【発明の効果】
以上，本発明によれば，集積回路のレイアウト工程において，複数のタイミング制約を満足するホールドタイムエラーを修正することができる。
【図面の簡単な説明】
【図１】セットアップタイムとホールドタイムを説明する図である。
【図２】本発明の課題を説明する図である。
【図３】本実施の形態におけるレイアウトシステム構成図である。
【図４】本実施の形態における第１のレイアウトプロセスのフローチャート図である。
【図５】本実施の形態における第２のレイアウトプロセスのフローチャート図である。
【図６】本実施の形態におけるホールドエラー修正方法のフローチャート図である。
【図７】本実施の形態におけるホールドタイムエラー修正プロセスの詳細フローチャート図である。
【図８】本実施の形態におけるホールドタイムエラー修正プロセスの詳細フローチャート図である。
【図９】修正プロセスの対象となる具体的な回路例を示す図である。
【図１０】図９の回路例に対するホールドエラーリストを示す図である。
【図１１】図９の回路例に対するセットアップマージンリストを示す図である。
【図１２】パスFF1−FF2のセットアップマージンを割り当てた時のセットアップマージンマップを示す図である。
【図１３】パスFF3−FF4のセットアップマージンを割り当てた時のセットアップマージンマップを示す図である。
【図１４】パスFF1−FF4，FF3−FF2のセットアップマージンを割り当てた時のセットアップマージンマップを示す図である。
【図１５】パスFF1−FF4のホールドエラー−100psを修正するためにセルを挿入した時のセットアップマージンマップの図である。
【図１６】アップデート後のセットアップマージンマップを示す図である。
【図１７】遅延セルＮを挿入したことに伴うアップデート後のセットアップマージンリストF18とホールドエラーリストF14を示す図である。
【図１８】パスFF3−FF4のホールドエラー−100psを修正するためにセルを挿入した時のセットアップマージンマップの図である。
【図１９】アップデート後のセットアップマージンマップを示す図である。
【図２０】遅延セルＰを挿入したことに伴うアップデート後のセットアップマージンリストF18とホールドエラーリストF14を示す図である。
【図２１】パスFF1−FF2のホールドエラー−20psを修正するためにセルを挿入した時のセットアップマージンマップの図である。
【図２２】遅延セルＱの挿入に伴うアップデート後のセットアップマージンマップF20を示す図である。
【図２３】立ち上がり時と立ち下がり時のホールドエラーを有するホールドエラーリストの例である。
【図２４】挿入する遅延セル数を最小化する方法を示す図である。
【図２５】パス上にセルが存在しない回路例を示す図である。
【図２６】仮想セルを設定した後の回路図である。
【符号の説明】
１０      演算ユニット
１１      プログラム群
１２      ファイル群
Ｐ１０    レイアウトプログラム
Ｐ１４    ホールドエラーリスト生成ツール
Ｐ１６    セットアップエラーパス抽出ツール
Ｐ１８    セットアップマージンリスト作成ツール
Ｐ２０    セットアップマージンマップ作成ツール
Ｐ２２    ホールドエラー修正ツール
Ｆ１４    ホールドエラーリスト
Ｆ１６    セットアップエラーパスリスト
Ｆ１８    セットアップマージンリスト
Ｆ２０    セットアップマージンマップ
【図１】
0004237434.tif 000002
【図２】
0004237434.tif 000003
【図３】
0004237434.tif 000004
【図４】
0004237434.tif 000005
【図５】
0004237434.tif 000006
【図６】
0004237434.tif 000007
【図７】
0004237434.tif 000008
【図８】
0004237434.tif 000009
【図９】
0004237434.tif 000010
【図１０】
0004237434.tif 000011
【図１１】
0004237434.tif 000012
【図１２】
0004237434.tif 000013
【図１３】
0004237434.tif 000014
【図１４】
0004237434.tif 000015
【図１５】
0004237434.tif 000016
【図１６】
0004237434.tif 000017
【図１７】
0004237434.tif 000018
【図１８】
0004237434.tif 000019
【図１９】
0004237434.tif 000020
【図２０】
0004237434.tif 000021
【図２１】
0004237434.tif 000022
【図２２】
0004237434.tif 000023
【図２３】
0004237434.tif 000024
【図２４】
0004237434.tif 000025
【図２５】
0004237434.tif 000026
【図２６】
0004237434.tif 000027