(57)【要約】【課題】本発明の課題は、ホールドエラーを回避するために挿入されるバッファへの配線長を予め考慮することによって、ディレイ値が付き過ぎるためのセットアップエラーの誘発を防止するホールドエラー対策方法を提供すことを目的とする。【解決手段】本発明の課題は、半導体集積回路設計におけるホールドエラー対策方法であって、コンピュータに、半導体集積回路を構成するセルの配置情報に基づいて、ホールドエラーを回避するように対策バッファを配置する配置手順と、前記配置手順によって配置された前記対策バッファに係る配線長に基づいて、前記対策バッファの挿入前後の増加ディレイ値を取得する増加ディレイ値取得手順とを実行させるホールドエラー対策方法により達成される。【選択図】図１
2008052659.tif 000002
【特許請求の範囲】
【請求項１】
半導体集積回路設計におけるホールドエラー対策方法であって、コンピュータに、
半導体集積回路を構成するセルの配置情報に基づいて、ホールドエラーを回避するように対策バッファを配置する配置手順と、
前記配置手順によって配置された前記対策バッファに係る配線長に基づいて、前記対策バッファの挿入前後の増加ディレイ値を取得する増加ディレイ値取得手順とを実行させることを特徴とするホールドエラー対策方法。
【請求項２】
前記増加ディレイ値取得手順は、
前記配置手順による配置結果に基づいて前記対策バッファに係る配線長を算出する配線長算出手順と、
前記配線長と前記対策バッファとに係るディレイ値から該対策バッファの挿入前のディレイ値を減算することによって増加ディレイ値を算出する増加ディレイ値算出手順とを有することを特徴とする請求項１記載のホールドエラー対策方法。
【請求項３】
前記配線長算出手順は、マンハッタン長で前記配線長を算出することを特徴とする請求項１又は２記載のホールドエラー対策方法。
【請求項４】
前記コンピュータに、
ネットリスト上で前記対策バッファをホールドエラー発生端子の直前に挿入する挿入手順を実行させ、
前記配置手順は、前記ネットリスト上で前記ホールドエラー発生端子に近い方の対策バッファから配置し、その配置位置は、ホールドエラーが発生したセルに一番近い空き領域とすることを特徴とする請求項１乃至３のいずれか一項記載のホールドエラー対策方法。
【請求項５】
半導体集積回路設計におけるコンピュータ実行可能なホールドエラー対策プログラムであって、該コンピュータに、
半導体集積回路を構成するセルの配置情報に基づいて、ホールドエラーを回避するように対策バッファを配置する配置手順と、
前記配置手順によって配置された前記対策バッファに係る配線長に基づいて、前記対策バッファの挿入前後の増加ディレイ値を取得する増加ディレイ値取得手順とを実行させることを特徴とするホールドエラー対策プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ホールドエラーを回避するために挿入されるバッファへの配線長を予め考慮することによって、ディレイ値が付き過ぎるためのセットアップエラーの誘発を防止するホールドエラー対策方法及びホールドエラー対策プログラムに関する。
【背景技術】
【０００２】
従来の半導体集積回路設計方法において、ホールドエラーが発生した場合、ネットリスト上でホールドエラー発生端子の直前に、ホールドエラーのスラック値より大きいディレイ値を持つ１つ又は最小の組み合わせとなるバッファをホールドエラーに対する対策バッファとして挿入することが行われている。
【０００３】
この対策バッファにより新たにセットアップエラーが発生する場合には、よりディレイ値の小さい種類のバッファに変更することがなされている。このように、ホールドエラーが発生した箇所毎に、対策バッファを挿入し、新たなセットアップエラーが発生しないようにバッファの種類を調整することによって、ホールドエラーの対策を行っている。
【特許文献１】特許第３２６２０９９号公報
【特許文献２】特開平９−２３２４３６号公報
【特許文献３】特開２００１−１３５７２５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記従来の半導体集積回路設計方法では、上述したようなホールドエラーの対策処理にて、実際のセルの配置及び配線を考慮した処理となっていないため、実際にセルを配置及び配線してみると、ホールドエラー発生端子から大きく離れた位置に配置される場合があり、対策バッファによる増加ディレイ値が予測より大きくなることがあった。
【０００５】
その結果、新たなセットアップエラーが発生しないと判断したパスで、実際にはセットアップエラーが発生して、新たにセットアップエラー対策を行わなければならず、開発工数が伸びてしまうといった問題があった。
【０００６】
よって、本発明の目的は、ホールドエラーを回避するために挿入されるバッファへの配線長を予め考慮することによって、ディレイ値が付き過ぎるためのセットアップエラーの誘発を防止する半導体集積回路設計におけるホールドエラー対策方法及びホールドエラー対策プログラムを提供することである。
【課題を解決するための手段】
【０００７】
上記課題を解決するため、本発明は、半導体集積回路設計におけるホールドエラー対策方法であって、コンピュータに、半導体集積回路を構成するセルの配置情報に基づいて、ホールドエラーを回避するように対策バッファを配置する配置手順と、前記配置手順によって配置された前記対策バッファに係る配線長に基づいて、前記対策バッファの挿入前後の増加ディレイ値を取得する増加ディレイ値取得手順とを実行させるように構成される。
【０００８】
このようなホールドエラー対策方法において、対策バッファの配置位置に基づく配線長を考慮して対策バッファの挿入前後の増加ディレイ値が取得されるため、対策バッファの挿入によるセットアップエラーの検証をより正確に行うことができる。
【０００９】
上記課題を解決するための手段として、本発明は、上記ホールドエラー対策方法での処理をコンピュータに実行させるコンピュータ実行可能なプログラム、該処理を行う半導体集積回路設計装置とすることもできる。
【発明の効果】
【００１０】
本願発明は、ホールドエラーのスラック値より大きいディレイ値を持つバッファをホールドエラー発生端子の直前に挿入することによる増加ディレイの見積もり精度を高め、ディレイのつけ過ぎによるセットアップエラーの誘発を防止することができる。
【発明を実施するための最良の形態】
【００１１】
以下、本発明の実施の形態を図面に基づいて説明する。
【００１２】
図１は、本発明の一実施例に係るＬＳＩ設計装置の構成例を示す図である。図１において、ＬＳＩ設計装置１００は、制御部１１と、入力ユニット１２と、表示ユニット１３と、第一記憶部１４と、第二記憶部１５と、プログラム記憶部１６とを有し、ＣＡＤ（Computer Aided Design）システムとして動作する。第一記憶部１４、第二記憶部１５、プログラム記憶部１６は、夫々個別の記憶装置であっても良いし、一つの記憶装置であってもよい。
【００１３】
制御部１１は、ＣＰＵ（Central Processing Unit）と、ＲＡＭ及びＲＯＭなどのメモリとを備え、ＬＳＩ設計装置１００全体を制御する。入力ユニット１２は、キーボード及びマウスなどを有し、ユーザによる情報入力及び操作を可能とする。表示ユニット１３は、ユーザへの情報を表示制御する。
【００１４】
第一記憶部１４は、レイアウトデータを記憶する記憶部であり、接続情報を管理するためのネットリスト１４１と、セル毎の遅延を管理するためのＤｅｌａｙ情報１４２と、ホールドエラーの発生情報を管理するためのＨｏｌｄエラー情報１４３と、セットアップスラックの情報を管理するためのＳｅｔｕｐ  Ｓｌａｃｋ情報１４４と、バッファ毎のディレイ値などの特性を管理するためのバッファ情報１４５と、配線の長さ単位当たりのディレイ値を管理するための配線長によるＤｅｌａｙ情報１４６と、配置情報１４７とを記憶している。
【００１５】
第二記憶部１５は、本発明に係るホールドエラー対策処理後に出力される情報を記憶する記憶部であり、ホールドエラー対策処理後に出力された出力ネットリスト１５１と出力配置情報１５２とを記憶する。
【００１６】
プログラム記憶部１６は、対策バッファ決定プログラム１６１と、ネットリスト変更プログラム１６２と、セル配置プログラム１６３と、配線長算出プログラム１６４と、Ｄｅｌａｙ値算出プログラム１６５と、Ｓｅｔｕｐエラー誘発チェックプログラム１６６と、ネットリスト出力プログラム１６７と、配置情報出力プログラム１６８などの種々のプログラムを記憶している。これらプログラム１６１から１６８は、制御部１１によって実行されることによって、対策バッファ決定手段、ネットリスト変更手段、セル配置手段、配線長算出手段、Ｄｅｌａｙ値算出手段、Ｓｅｔｕｐエラー誘発チェック手段、ネットリスト出力手段、配置情報出力手段などとして機能し、ホールドエラー対策処理を実現する。
【００１７】
対策バッファ決定プログラム１６１は、バッファ情報１４４を参照して、ホールドエラー発生端子の直前に挿入するための、ホールドエラーのスラック値より大きいディレイ値を持つバッファの組み合わせ（対策バッファと言う）を決定するためのプログラムである。
【００１８】
ネットリスト変更プログラム１６２は、対策バッファの挿入によるネットリストの変更をするためのプログラムである。
【００１９】
セル配置プログラム１６３は、対策バッファの配置位置を決定して配置するためのプログラムである。配線長算出プログラム１６４は、対策バッファ前後の配線長を算出するためのプログラムである。Ｄｅｌａｙ値算出プログラム１６５は、配線長によるＤｅｌａｙ情報１４６を参照することによって算出した配線長に基づくディレイ値を算出するためのプログラムである。
【００２０】
Ｓｅｔｕｐエラー誘発チェックプログラム１６６は、対策バッファの挿入による新たなセットアップエラーが発生しないか否かをチェックするためのプログラムである。ネットリスト出力プログラム１６７は、ホールドエラー対策処理後のネットリストを出力ネットリスト１５１へと出力するためのプログラムである。配置情報出力プログラム１６８は、ホールドエラー対策処理後の配置情報を出力配置情報１５２へと出力する。
【００２１】
これらプログラム１６１から１６８は、ＣＤ−ＲＯＭ等の記憶媒体又はプラグアンドプレイなどによって接続可能な外部記憶装置からインストーラによってプログラム記憶部１６へロードしてもよい。また、ＬＳＩ設計装置１００がネットワークに接続可能な通信装置を備えている場合、ネットワークを介してダウンロードしてもよい。
【００２２】
先ず、本発明に係るホールドエラー対策処理の概要について、従来処理と比較しつつ、図２に示すようなフリップフロップＦＦ＿Ａ１、ＦＦ＿Ａ２及びＦＦ＿Ｂと、論理回路２及びＡＮＤ＿１とによる簡単な回路構成を例にして説明する。
【００２３】
図２に示す回路構成において、ＮＥＴ＿１は、第一記憶部１４のネットリスト１４１で示される論理回路ＡＮＤ＿１とフリップフロップＦＦ＿Ｂとの接続情報である。
【００２４】
本発明に係るホールドエラー対策処理、従来処理ともに、
（１）静的タイミング解析（ＳＴＡ：Static Timing Analysis）を行う。この回路構成例において、ホールドエラーが１個発生したとする。
【００２５】
（２）続けて、この回路構成に関するネットリスト情報をネットリスト１４１から読み込み、
（３）Ｄｅｌａｙ情報１４２を読み込み、
（４）Ｈｏｌｄエラー情報１４３を読み込み、
（５）Ｓｅｔｕｐ  Ｓｌａｃｋ情報１４４を読み込み、
（６）そして、バッファ情報１４５を読み込む。
【００２６】
従来処理では、このままホールドエラーのスラック値の取得（９）へと進むのだが、本発明に係るホールドエラー対策処理では、更に、
（７）配線長によるＤｅｌａｙ情報１４６を読み込み、
（８）配置情報１４７を読み込んでおく。
【００２７】
その後、（９）ホールドエラーのスラック値を取得する。図２に示す回路構成において、ホールドエラーの発生端子がフリップフロップＦＦ＿Ｂの端子Ｄであり、スラック値が−８００ｐｓであるとする。このホールドエラーのスラック値は、タイミングエラー情報から取得される。
【００２８】
（１０）対策バッファを決定する。１個以上のバッファをシリアルに組み合わせて、ホールドエラーのスラック値より大きいディレイ値を持ち、かつ、組み合わせたバッファ数が最小となるようにバッファの組み合わせた対策バッファを決定する。例えば、図３に示すように、スラック値が−８００ｐｓの場合、ディレイ値が５００ｐｓのバッファＢＵＦ＿１及びディレイ値が４００ｐｓのバッファＢＵＦ＿２の組み合わせによる対策バッファが決定される。
【００２９】
（１１）対策バッファを挿入する。決定した対策バッファをネットリスト上でホールドエラー発生端子の直前に挿入する。図２に示す回路構成例において、図３に示す対策バッファは、図４に示すように、ネットリスト上で論理回路ＡＮＤ＿１とフリップフロップＦＦ＿Ｂとの間に挿入される。
【００３０】
ここで、配線長を考慮しない従来処理について考察する。従来処理では、この時点で、対策バッファの挿入により新たに発生したＮＥＴ＿２及びＮＥＴ＿３のディレイ値をゼロとして対策バッファの挿入による増加ディレイ値を算出していた。
【００３１】
つまり、対策バッファ挿入前のディレイ値として、Ｄｅｌａｙ情報１４２からＮＥＴ＿１のディレイ値「８０ｐｓ」を取得する。
【００３２】
対策バッファ挿入前のディレイ値は、
【００３３】
【表１】
2008052659.tif 000003
となる。
【００３４】
次に、対策バッファ挿入後のディレイ値として、この対策バッファ挿入前のディレイ値「８０ｐｓ」に加えて、Ｄｅｌａｙ情報１４２からＮＥＴ＿１のディレイ値「８０ｐｓ」を取得し、バッファ情報１４５からバッファＢＵＦ＿１のディレイ値「５００ｐｓ」とバッファＢＵＦ＿２のディレイ値「４００ｐｓ」とを取得して、増加ディレイ値を算出する。
【００３５】
従って、対策バッファ挿入後のＮＥＴ＿１からＮＥＴ＿３までのディレイ値は、
【００３６】
【表２】
2008052659.tif 000004
の合計を算出することによって、９８０ｐｓとなる。この対策バッファ挿入後のディレイ値から対策バッファ挿入前のＮＥＴ＿１のディレイ値を減算して（９８０ｐｓ−８０ｐｓ）、対策バッファ挿入後の増加ディレイ値を９００ｐｓとしていた。
【００３７】
続けて、Ｓｅｔｕｐ  Ｓｌａｃｋ情報１４４から対策バッファの挿入により新たなセットアップエラーが発生しないか否かをチェックすると、
【００３８】
【表３】
2008052659.tif 000005
といった結果を得ることになる。
【００３９】
従って、従来処理では、バッファＢＵＦ＿１及びＢＵＦ＿２による対策バッファとしたままネットリストを出力し、Ｐｌａｃｅｒなどにネットリストを入力し、図５に示すようにＥＣＯ（engineering change order）配置を行い、配線、容量抽出、遅延計算を行い、静的タイミング解析（ＳＴＡ）を再度実行していた。
【００４０】
その結果、従来処理では、ホールドエラーは消えたが、ＦＦ＿Ａ２の端子ＱからＦＦ＿Ｂの端子Ｄにおいて、セットアップエラー（この場合、スラック値−１０ｐｓ）が発生することがあった。原因は、対策バッファとしてのバッファＢＵＦ＿１とＢＵＦ＿２の配置位置が影響して、対策バッファの挿入による増加ディレイ値が算出した値「９００ｐｓ」よりも大きい値「９５０ｐｓ」となり、ＦＦ＿Ａ２の端子ＱからＦＦ＿Ｂの端子Ｄのセットアップスラック値「９１０ｐｓ」を超えてしまったためである。
【００４１】
一方、本発明に係るホールドエラー対策処理では、図３に示す対策バッファを、図４に示すように、ネットリスト上で論理回路ＡＮＤ＿１とフリップフロップＦＦ＿Ｂとの間に挿入した直後には対策バッファ挿入後のディレイ値を計算しない。
【００４２】
（１２）対策バッファの配置位置を決定する。本発明に係るホールドエラー対策処理では、配置情報１４７に基づいて予め対策バッファの配置位置を決定して配置する。ネットリスト上で、対策バッファのうちホールドエラー発生端子に近い方の対策バッファから配置する。配置位置は、ホールドエラー発生セル（フリップフロップＦＦ＿Ｂ）に一番近い空き領域とする。
【００４３】
図５（Ａ）には、対策バッファの配置前の状態が示され、空き領域３ｐ及び３ｑに対策バッファとしてのバッファＢＵＦ＿１及びＢＵＦ＿２が配置された状態が図５（Ｂ）に示される。
【００４４】
そして、（１３）配置結果に基づいて対策バッファ前後の配線長をマンハッタン長で算出する。図６には、図５（Ｂ）に示す対策バッファの配置後にマンハッタン長で算出した場合の例が示される。図６に示すように、論理回路ＡＮＤ＿１からバッファＢＵＦ＿１までのＮＥＴ＿１における配線長が４０ｕｍであり、バッファＢＵＦ＿１からバッファＢＵＦ＿２までのＮＥＴ＿２における配線長が５０ｕｍであり、バッファＢＵＦ＿２からフリップフロップＦＦ＿ＢまでのＮＥＴ＿３における配線長が４０ｕｍである。
【００４５】
本発明に係るホールドエラー対策処理では、ここで、算出した配線長から対策バッファの挿入による増加ディレイ値を算出する。
【００４６】
（１４）対策バッファ挿入による増加ディレイを計算する。まず、対策バッファ挿入前のディレイ値として、Ｄｅｌａｙ情報１４２からＮＥＴ＿１のディレイ値「８０ｐｓ」を取得する。
【００４７】
対策バッファ挿入前のディレイ値は、
【００４８】
【表４】
2008052659.tif 000006
となる。
【００４９】
次に、対策バッファ挿入後のディレイ値を取得する。バッファ情報１４５からバッファＢＵＦ＿１のディレイ値「５００ｐｓ」とバッファＢＵＦ＿２のディレイ値「４００ｐｓ」とを取得する。
【００５０】
更に、算出した配線長と配線長によるＤｅｌａｙ情報１４６とに基づいて、ＮＥＴ＿１の配線長「４０ｕｍ」によるディレイ値「４０ｐｓ」と、ＮＥＴ＿２の配線長「５０ｕｍ」によるディレイ値「５０ｐｓ」と、ＮＥＴ＿３の配線長「４０ｕｍ」によるディレイ値「４０ｐｓ」とを取得する。
【００５１】
従って、対策バッファ挿入後のＮＥＴ＿１からＮＥＴ＿３までのディレイ値は、
【００５２】
【表５】
2008052659.tif 000007
の合計を算出することによって、１０３０ｐｓとなる。この対策バッファ挿入後のディレイ値から対策バッファ挿入前のＮＥＴ＿１のディレイ値を減算して（１０３０ｐｓ−８０ｐｓ）、対策バッファ挿入後の増加ディレイ値は、９５０ｐｓとなる。
【００５３】
（１５）Ｓｅｔｕｐ  Ｓｌａｃｋ情報１４４から対策バッファ挿入により新たにセットアップエラーが発生しないか否かをチェックする。
【００５４】
【表６】
2008052659.tif 000008
といった結果を取得する。従って、本発明に係るホールドエラー対策処理では、ＥＣＯ配置などによる実配置を実施する以前に、対策バッファの変更が必要であることを判断することができる。
【００５５】
（１６）対策バッファの挿入により新たなセットアップエラーが発生したので、対策バッファをよりディレイ値の小さい種類のバッファに変更する。バッファ情報１４５を参照することによって、例えば、対策バッファのうちディレイ値「４００ｐｓ」のバッファＢＵＦ＿２をディレイ値「３００ｐｓ」のバッファＢＵＦ＿３へと変更し、図７に示すように、バッファＢＵＦ＿２の配置位置にバッファＢＵＦ＿３を配置する。
【００５６】
（１７）再度、配置情報１４７に基づいて予め対策バッファの配置位置を決定して配置する。上記（１２）と同様に、対策バッファのうちホールドエラー発生端子に近い方の対策バッファから配置し、ホールドエラー発生セル（フリップフロップＦＦ＿Ｂ）に一番近い空き領域に（図８（Ａ）参照）、バッファＢＵＦ＿２から変更されたバッファＢＵＦ＿３が配置される（図８（Ｂ）参照）。
【００５７】
そして、（１８）再度、配置結果に基づいて対策バッファ前後の配線長をマンハッタン長で算出する。図９には、図８（Ｂ）に示す対策バッファの配置後にマンハッタン長で算出した場合の例が示される。図９に示すように、論理回路ＡＮＤ＿１からバッファＢＵＦ＿１までのＮＥＴ＿１における配線長が４０ｕｍであり、バッファＢＵＦ＿１からバッファＢＵＦ＿２までのＮＥＴ＿２における配線長が５０ｕｍであり、バッファＢＵＦ＿２からフリップフロップＦＦ＿ＢまでのＮＥＴ＿３における配線長が４０ｕｍである。そして、算出した配線長から対策バッファの挿入による増加ディレイ値を算出する。
【００５８】
（１９）対策バッファ挿入による増加ディレイを計算する。まず、前回同様に、対策バッファ挿入前のディレイ値として、Ｄｅｌａｙ情報１４２からＮＥＴ＿１のディレイ値「８０ｐｓ」を取得する。
【００５９】
対策バッファ挿入前のディレイ値は、
【００６０】
【表７】
2008052659.tif 000009
となる。
【００６１】
次に、対策バッファ挿入後のディレイ値を取得する。バッファ情報１４５からバッファＢＵＦ＿１のディレイ値「５００ｐｓ」とバッファＢＵＦ＿３のディレイ値「３００ｐｓ」とを取得する。
【００６２】
更に、算出した配線長と配線長によるＤｅｌａｙ情報１４６とに基づいて、ＮＥＴ＿１の配線長「４０ｕｍ」によるディレイ値「４０ｐｓ」と、ＮＥＴ＿２の配線長「５０ｕｍ」によるディレイ値「５０ｐｓ」と、ＮＥＴ＿３の配線長「４０ｕｍ」によるディレイ値「４０ｐｓ」とを取得する。
【００６３】
従って、対策バッファ挿入後のＮＥＴ＿１からＮＥＴ＿３までのディレイ値は、
【００６４】
【表８】
2008052659.tif 000010
の合計を算出することによって、９３０ｐｓとなる。この対策バッファ挿入後のディレイ値から対策バッファ挿入前のＮＥＴ＿１のディレイ値を減算して（９３０ｐｓ−８０ｐｓ）、対策バッファ挿入後の増加ディレイ値は、８５０ｐｓとなる。
【００６５】
（２０）Ｓｅｔｕｐ  Ｓｌａｃｋ情報１４４から対策バッファ挿入により新たにセットアップエラーが発生しないか否かをチェックする。
【００６６】
【表９】
2008052659.tif 000011
といった結果となる。対策バッファを変更することによる新たなセットアップエラーが発生しないことを、事前に確認できる。
【００６７】
（２１）ネットリスト、配置情報などを出力する。本発明に係るホールドエラー対策処理では、対策バッファによる新たなセットアップエラーが発生しないことを確認した後、ネットリスト、配置情報などを出力ネットリスト１５１、出力配置情報１５２などへと出力する。
【００６８】
上述したようなホールドエラー対策処理を行うことによって、その後に実行される配線、容量抽出、遅延計算、ＳＴＡの実施の結果、上記（１）にて検出されたホールドエラーが解消され、また、新たなセットアップエラーの発生もなくＬＳＩ設計を効率的に行うことができる。
【００６９】
次に、本発明に係るホールドエラー対策処理について図１０、図１１及び図１２で説明する。図１０は、本発明に係るホールドエラー対策処理を説明するためのフローチャート図である。
【００７０】
図１０において、制御部１１は、ネットリスト１４１を読み込み（ステップＳ１）、Ｄｅｌａｙ情報１４２を読み込み（ステップＳ２）、Ｈｏｌｄエラー情報１４３を読み込み（ステップＳ３）、Ｓｅｔｕｐ  Ｓｌａｃｋ情報１４４を読み込み（ステップＳ４）、バッファ情報１４５を読み込み（ステップＳ５）、配線長によるＤｅｌａｙ情報１４６を読み込み（ステップＳ６）、そして配置情報１４７を読み込む（ステップＳ７）。
【００７１】
ｎ番目（ｎ＝１、２、・・・、Ｎ）のホールドエラーについて処理を開始し（ステップＳ８）、ホールドエラーのスラック値をタイミングエラー情報から取得する（ステップＳ９）。
【００７２】
１個以上のバッファをシリアルに組み合わせ、ホールドエラーのスラック値より大きいディレイ値を持ち、なおかつ組み合わせたバッファ数が最小となるバッファの組み合わせによる対策バッファをバッファ情報１４５に基づいて決定する（ステップＳ１０）。ステップ１０での処理は、対策バッファ決定プログラム１６１によって行われる。
【００７３】
ネットリスト上で対策バッファをホールドエラー発生端子の直前に挿入する（ステップＳ１１）。対策バッファの挿入によってネットリストが変更される。ステップＳ１１での処理は、ネットリスト変更プログラム１６２によって行われる。
【００７４】
そして、配置情報１４７に基づいて対策バッファの配置位置を決定し、配置する（ステップＳ１２）。ステップＳ１２での処理は、セル配置プログラム１６３によって行われる。
【００７５】
ステップＳ１２での配置結果に基づいて対策バッファ前後の配線長を算出する（ステップＳ１３）。ステップＳ１３での処理は、配線長算出プログラム１６４によって行われる。図１１で詳述される。
【００７６】
ステップＳ１３で算出された配線長から、対策バッファの挿入による増加ディレイ値を算出する（ステップＳ１４）。ステップＳ１４での処理は、Ｄｅｌａｙ値計算プログラム１６５によって行われる。図１２で詳述される。
【００７７】
次に、Ｓｅｔｕｐ  Ｓｌａｃｋ情報１４４から、対策バッファの挿入により新たにセットアップエラーが発生しないか否かをチェックする（ステップＳ１５）。ステップＳ１５での処理は、Ｓｅｔｕｐエラー誘発チェックプログラム１６６によって行われる。
【００７８】
ステップＳ１５のチェック結果に基づいて、新たにセットアップエラーが発生するか否かを判断する（ステップＳ１６）。新たにセットアップエラーが発生する場合、対策バッファをよりディレイ値の小さい種類のバッファに変更し（ステップＳ１６−２）、ステップＳ１２へと進む。ステップＳ１６−２での処理は、対策バッファ決定プログラム１６１によって行われる。
【００７９】
一方、新たにセットアップエラーが発生しないと判断した場合、全てのホールドエラーを対策したか否かを判断する（ステップＳ１７）。全てのホールドエラーを対策していない場合、ステップＳ８へと進む。
【００８０】
一方、全てのホールドエラーを対策した場合、現在のネットリストを出力ネットリスト１５１へと出力する（ステップＳ１８）。ステップＳ１８での処理は、ネットリスト出力プログラム１６７によって行われる。
【００８１】
更に、現在の配置情報を出力配置情報１５２へと出力する（ステップＳ１９）。ステップＳ１９での処理は、配置情報出力プログラム１６８によって行われる。その後、配線処理などを行う。
【００８２】
このように、挿入バッファの配置位置に基づいて配線長を算出し、その配線長に基づいて遅延計算を正確に行うことにより、ディレイを付けすぎてセットアップエラーを誘発することを防止するようにホールドエラー対策を行うことができる。
【００８３】
図１１は、図１０のステップＳ１３での処理を説明するためのフローチャート図である。図１１において、配線の始点と終点の座標を配置情報１４７から獲得し、それぞれ（ｘ１、ｙ１）及び（ｘ２、ｙ２）とする（ステップＳ１３２）。マンハッタン長による配線長を算出する（ステップＳ１３４）。
【００８４】
配線長  ＝  ｜ｘ２−ｘ１｜  ＋  ｜ｙ２−ｙ１｜
図１２は、図１０のステップＳ１４での処理を説明するためのフローチャート図である。図１２において、対策バッファ挿入前の対策バッファの挿入箇所となるネット部のディレイ値をＤｅｌａｙ情報１４２から取得するし、これをＴ０とする（ステップＳ１４２）。
【００８５】
対策バッファ挿入後の対策バッファ挿入部のディレイ値を算出する（ステップＳ１４４）。ネット部のディレイ値は、ステップＳ１３で算出した配線長を基に配線長によるＤｅｌａｙ情報１４２から獲得する。バッファ部のディレイ値はバッファ情報から獲得する。ネット部とバッファ部のディレイ値を合算することで対策バッファ挿入部のディレイ値が獲得できる。これをＴ１とする。
【００８６】
対策バッファ挿入による増加ディレイ値を算出する（ステップＳ１４６）。
【００８７】
増加ディレイ値  ＝  Ｔ１  −  Ｔ０
上述より、本発明によれば、ホールドエラーのスラック値より大きいディレイ値を持つバッファをホールドエラー発生端子の直前に挿入することによる増加ディレイの見積もり精度を高め、ディレイのつけ過ぎによるセットアップエラーの誘発を防止することができる。
【００８８】
以上の説明に関し、更に以下の項を開示する。
（付記１）
半導体集積回路設計におけるホールドエラー対策方法であって、コンピュータに、
半導体集積回路を構成するセルの配置情報に基づいて、ホールドエラーを回避するように対策バッファを配置する配置手順と、
前記配置手順によって配置された前記対策バッファに係る配線長に基づいて、前記対策バッファの挿入前後の増加ディレイ値を取得する増加ディレイ値取得手順とを実行させることを特徴とするホールドエラー対策方法。
（付記２）
前記増加ディレイ値取得手順は、
前記配置手順による配置結果に基づいて前記対策バッファに係る配線長を算出する配線長算出手順と、
前記配線長と前記対策バッファとに係るディレイ値から該対策バッファの挿入前のディレイ値を減算することによって増加ディレイ値を算出する増加ディレイ値算出手順とを有することを特徴とする付記１記載のホールドエラー対策方法。
（付記３）
前記配線長算出手順は、マンハッタン長で前記配線長を算出することを特徴とする付記１又は２記載のホールドエラー対策方法。
（付記４）
前記コンピュータに、
ネットリスト上で前記対策バッファをホールドエラー発生端子の直前に挿入する挿入手順を実行させ、
前記配置手順は、前記ネットリスト上で前記ホールドエラー発生端子に近い方の対策バッファから配置し、その配置位置は、ホールドエラーが発生したセルに一番近い空き領域とすることを特徴とする付記１乃至３のいずれか一項記載のホールドエラー対策方法。
（付記５）
前記コンピュータに、
前記増加ディレイ値によりセットアップエラーが発生するか否かを判断する判断手順と、
前記判断手順によってセットアップエラーが発生すると判断した場合、前記対策バッファのディレイ値より小さいディレイ値となるバッファに変更する対策バッファ変更手順とを実行させることを特徴とする付記１乃至４のいずれか一項記載のホールドエラー対策方法。
（付記６）
前記コンピュータに、
１以上のバッファをシリアルに組み合わせ、ホールドエラーのスラック値より大きいディレイ値を持ち、かつ、組み合わせたバッファ数が最小となるバッファの組み合わせを前記対策バッファとして決定する対策バッファ決定手順を実行させることを特徴とする付記１乃至５のいずれか一項記載のホールドエラー対策方法。
（付記７）
半導体集積回路設計におけるコンピュータ実行可能なホールドエラー対策プログラムであって、該コンピュータに、
半導体集積回路を構成するセルの配置情報に基づいて、ホールドエラーを回避するように対策バッファを配置する配置手順と、
前記配置手順によって配置された前記対策バッファに係る配線長に基づいて、前記対策バッファの挿入前後の増加ディレイ値を取得する増加ディレイ値取得手順とを実行させることを特徴とするホールドエラー対策プログラム。
（付記８）
ホールドエラー対策を備えた半導体集積回路設計装置であって、
半導体集積回路を構成するセルの配置情報に基づいて、ホールドエラーを回避するように対策バッファを配置する配置手段と、
前記配置手段によって配置された前記対策バッファに係る配線長に基づいて、前記対策バッファの挿入前後の増加ディレイ値を取得する増加ディレイ値取得手段とを備えたことを特徴とする半導体集積回路設計装置。
【００８９】
本発明は、具体的に開示された実施例に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
【図面の簡単な説明】
【００９０】
【図１】本発明の一実施例に係るＬＳＩ設計装置の構成例を示す図である。
【図２】ホールドエラー対策処理の概要を説明するための回路構成例を示す図である。
【図３】対策バッファの決定例を示す図である。
【図４】対策バッファの挿入例を示す図である。
【図５】対策バッファの配置位置の決定例を示す図である。
【図６】配線長の算出例を示す図である。
【図７】対策バッファの変更例を示す図である。
【図８】対策バッファ変更後の配置位置の決定例を示す図である。
【図９】対策バッファ変更後の配線長の算出例を示す図である。
【図１０】本発明に係るホールドエラー対策処理を説明するためのフローチャート図である。
【図１１】図１０のステップＳ１３での処理を説明するためのフローチャート図である。
【図１２】図１０のステップＳ１４での処理を説明するためのフローチャート図である。
【符号の説明】
【００９１】
１１          制御部
１２          入力ユニット
１３          表示ユニット
１４          第一記憶部
１４１        ネットリスト
１４２        Ｄｅｌａｙ情報
１４３        Ｈｏｌｄエラー情報
１４４        Ｓｅｔｕｐ  Ｓｌａｃｋ情報
１４５        バッファ情報
１４６        配線長によるＤｅｌａｙ情報
１４７        配線情報
１５          第二記憶部
１５１        出力ネットリスト
１５２        出力配線情報
１６          プログラム記憶部
１６１        対策バッファ決定プログラム
１６２        ネットリスト変更プログラム
１６３        セル配置プログラム
１６４        配線長算出プログラム
１６５        Ｄｅｌａｙ値算出プログラム
１６６        Ｓｅｔｕｐエラー誘発チェックプログラム
１６７        ネットリスト出力プログラム
１６８        配置情報出力プログラム
【図１】
2008052659.tif 000012
【図２】
2008052659.tif 000013
【図３】
2008052659.tif 000014
【図４】
2008052659.tif 000015
【図５】
2008052659.tif 000016
【図６】
2008052659.tif 000017
【図７】
2008052659.tif 000018
【図８】
2008052659.tif 000019
【図９】
2008052659.tif 000020
【図１０】
2008052659.tif 000021
【図１１】
2008052659.tif 000022
【図１２】
2008052659.tif 000023