(57)【要約】【課題】遅延変動に対する回路の誤動作の確率を低減することができる半導体装置およびその設計方法を提供する。【解決手段】クロック信号に対する遅延時間の調整により、工程１０２でクロック信号を基準にして同期する素子間におけるパスのタイミングエラー量を極小化することによって、タイミングエラー削除工程１０３を容易化し、その工程１０３でのタイミングエラー削除の後、工程１０４で、最小スラック値を極大化するとともに、最小スラック値を満たしながら、タイミングマージンであるスラック値の和を極大化する。【選択図】　　図１
2004145768.tif 000002
【特許請求の範囲】
【請求項１】
半導体素子を含む複数の素子からなり、クロック信号を動作タイミングの基準にして動作する半導体装置の設計方法であって、前記クロック信号のタイミングにそれぞれ同期する前記素子間でパスを形成し、そのパスでの前記クロック信号に対する遅延時間の最小の余裕度である最小スラック値を極大化するように、前記クロック信号の前記素子への到着時間を決定するクロック信号到着時間決定工程を有することを特徴とする半導体装置の設計方法。
【請求項２】
クロック信号到着時間決定工程は、その処理により極大化した前記最小スラック値を維持しながら、スラック値の和を極大化することを特徴とする請求項１に記載の半導体装置の設計方法。
【請求項３】
クロック信号到着時間決定工程は、パスの最小スラック値が、その制約として外部から与えた最小スラック値を満たした状態としながら、前記スラック値の和を極大化することを特徴とする請求項１に記載の半導体装置の設計方法。
【請求項４】
請求項１または請求項２または請求項３に記載の半導体装置の設計方法であって、各請求項に記載のクロック信号到着時間決定工程として、それらの処理の前に、クロック信号に同期する全素子間のパス毎の負のスラック値であるタイミングエラー値の和を極小化することを特徴とする半導体装置の設計方法。
【請求項５】
請求項４に記載の半導体装置の設計方法であって、クロック信号到着時間決定工程は、タイミングエラー値の和として、それらの２乗和を極小化することを特徴とする半導体装置の設計方法。
【請求項６】
請求項４に記載の半導体装置の設計方法であって、クロック信号に同期する全素子間のパス毎の最大遅延パスおよび最小遅延パスを算出する工程を有し、クロック信号到着時間決定工程で用いる各タイミングエラー値は、前記最大遅延パスおよび最小遅延パスを基にして算出することを特徴とする半導体装置の設計方法。
【請求項７】
請求項１または請求項２または請求項３に記載の半導体装置の設計方法であって、クロック信号到着時間決定工程は、前記スラック値の和を、前記同期素子間パスにタイミングエラーが発生しない範囲で前記クロック信号の素子への到着時間を変化させることにより、算出することを特徴とする半導体装置の設計方法。
【請求項８】
請求項４に記載のクロック信号到着時間決定工程により、クロック信号到着時間を決定し、その後、請求項１〜３のいずれかに記載のクロック信号到着時間決定工程により、クロック信号到着時間を決定することを特徴とする半導体装置の設計方法。
【請求項９】
請求項４に記載のクロック信号到着時間決定工程により、クロック信号到着時間決定し、その後、タイミングエラーを削除するためのタイミングエラー削除工程を実行し、その後、請求項１〜３のいずれかに記載のクロック信号到着時間決定工程により、クロック信号到着時間を決定することを特徴とする半導体装置の設計方法。
【請求項１０】
請求項４に記載のクロック信号到着時間決定工程の処理実行前に、その処理実行での前記クロック信号到着時間の調整によりタイミングエラーが削除可能か否かを判定し、その判定結果により、前記クロック信号到着時間決定工程を実行するかどうかを判断する工程を有することを特徴とする半導体装置の設計方法。
【請求項１１】
請求項１〜１０のいずれかに記載の半導体装置の設計方法であって、クロック信号に同期する全素子間のパス毎のスラック値は、前記パスの信号送信側と信号受信側の各素子に入力されるクロック信号の分岐点から、前記各素子への前記クロック信号の到着時間に応じた遅延変動量を、前記パス毎のスラック値から減じて算出することを特徴とする半導体装置の設計方法。
【請求項１２】
請求項１〜１１のいずれかに記載の半導体装置の設計方法であって、クロック信号に同期する全素子間のパス毎のスラック値を前記パスの遅延時間により分類する工程と、その分類工程により得られた分類毎に、それらを代表する前記パス毎のスラック値を算出する工程とを有することを特徴とする半導体装置の設計方法。
【請求項１３】
半導体素子を含む複数の素子により形成される素子群からなり、クロック信号を動作タイミングの基準にして動作する半導体装置の設計方法であって、前記クロック信号のタイミングにそれぞれ同期する前記素子群間で、前記クロック信号に対するクロック経路の遅延時間を、一律に、増加または減少させる工程を有することを特徴とする半導体装置の設計方法。
【請求項１４】
請求項１３に記載の半導体装置の設計方法であって、クロック経路中に含まれる等しい駆動能力の素子の能力を、一律に、増加または減少させる工程を有し、その工程での前記等しい駆動能力の素子の能力の増加または減少により、前記クロック経路の遅延時間を一律に増加または減少させる工程での処理を実行することを特徴とする半導体装置の設計方法。
【請求項１５】
請求項１４に記載の半導体装置の設計方法であって、複数のクロック経路に含まれる等しい駆動能力の素子の入力端子側にそれぞれ接続する素子の駆動能力を等しくするとともに、前記等しい駆動能力の素子の出力端子側にそれぞれ接続する素子の駆動能力を等しくし、かつ、前記等しい駆動能力の素子の入力側にそれぞれ接続する配線長を等しくするとともに、前記等しい駆動能力の素子の出力側にそれぞれ接続する配線長を等しくすることを特徴とする半導体装置の設計方法。
【請求項１６】
請求項１３〜請求項１５のいずれかに記載の半導体装置の設計方法により製造された半導体装置であって、複数のクロック経路に含まれる等しい駆動能力の素子の配置領域の近傍に、前記駆動能力を変更した場合に、その変更により必要となる駆動素子が配置可能な領域を設けたことを特徴とする半導体装置。
【請求項１７】
請求項１〜１５のいずれかに記載の半導体装置の設計方法により製造された半導体装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、クロック信号の遅延時間調整により遅延変動を考慮して回路設計される半導体装置及びその設計方法に関するものである。
【０００２】
【従来の技術】
従来から、半導体集積回路（ＬＳＩ：以下、単に回路と称する）を設計する場合は、多くの半導体集積回路において、その入出力動作のタイミング調整を容易に行うために、回路方式として回路の信号転送等の各種動作をクロック信号のタイミングに同期させて行うクロック同期方式が採用されている。
【０００３】
このようなクロック同期方式に対応するように回路設計する同期設計方式では、クロック信号により同期する素子間のパスの最大遅延値および最小遅延値が、信号受信側の同期素子へ入力される所定のクロック信号よりも、それぞれ、早くあるいは遅く到着するように、信号に対して遅延調整するような回路設計を行うことによって、回路全体の動作保証が可能となる。この目標を満たせない場合はタイミングエラーとなるため、これらタイミングエラーの削除工程が実施されていた。
【０００４】
従来のタイミングエラー削除の方法としては、
（従来方法１）：論理回路中の素子の駆動能力の変更、または、追加削除
（従来方法２）：準同期式クロック遅延調整（例えば、特許文献１を参照）
等が提案されていた。
【０００５】
また、近年では、プロセスの微細化が進み、クロストーク、ＩＲ−Ｄｒｏｐ、チップ内変動等の物理現象が顕著になってきた結果、回路内の全ての遅延変動をシミュレートして設計することが難しくなってきている。
【０００６】
そこで、従来のタイミングエラー削除工程に加え、回路中に想定外の遅延変動が発生した場合でも、できるだけ回路が動作するように、全素子間パスの最小スラック値（スラック値：回路制約に対する遅延時間の余裕度）を増加させる工程も必要とされてきた。
【０００７】
従来のスラック最小値を増加させる方法としては、上記の（従来方法１）、（従来方法２）を用い、全素子間のパスにおけるセットアップ（Ｓｅｔｕｐ）側およびホールド（Ｈｏｌｄ）側のスラック値の最小値を増加させる方法が処理実行されていた。
【０００８】
【特許文献１】
特願２０００−２１３８０５（特開２００１−３３８９８５号公報）
【０００９】
【発明が解決しようとする課題】
しかしながら上記のような従来の半導体装置の設計方法において、例えば（従来方法１）では、タイミングエラー削除、スラック最小値の増加方法として、既に様々な手法が提案、および、実施されており技術的に限界にきていた。そのため、さらなるタイミングエラー削減、スラック値増加が必要になった際に、これを実現することが難しいという問題点（問題点１）を有していた。
【００１０】
また、（従来方法２）では、クロック遅延調整により動作周波数の最大化を実現することができるが、目標動作周波数を実現することができない場合の対策が存在しないという問題点（問題点２）を有していた。
【００１１】
また、半導体装置のプロセスとして、トランジスタのゲート幅を０．２５［μｍ］で設計するようになった以前のプロセスでは、遅延変動が微小であり、ほぼ無視できる状態であったため、全素子間のパスで最小のスラック値のパス（クリティカルパス）のみに着目し、スラック値を増加させることが重要であった。しかし、前述したプロセス微細化による物理現象の顕著化により、従来問題とならなかったクリティカルパス以外の部分でのタイミングエラーによる回路誤動作が発生するという問題点（問題点３）を有していた。
【００１２】
この例を図８を用いて説明する。図８において、１０００〜１００３は同期素子、１０１０、１０１１は同期素子間パス、１０２０は回路全体である。ここで、回路のクロック周期は１０［ｎｓ］、同期素子間パス１０１０の最大遅延値は９［ｎｓ］、同期素子間パス１０１１の最大遅延値は８［ｎｓ］とする。
【００１３】
前述したクロストーク、ＩＲ−Ｄｒｏｐ、チップ内変動等による遅延変動は遅延値の３０％以上にも及ぶ場合がある。そこで、このような回路において、同期素子間パス１０１０で５％の遅延値増加、同期素子間パス１０１１で３０％の遅延値増加が発生した場合を考えると、これらのパスの遅延値はそれぞれ、９．４５［ｎｓ］、１０．４［ｎｓ］となり、同期素子間パス１０１１部分が正しく回路動作しないことになる。
【００１４】
このような、従来は問題とならなかったクリティカルパス以外のパスに対して発生するタイミングエラーも、極力削減できる手法が望まれていたが、有効な方法がなかった。
【００１５】
また、製造プロセスの微細化に伴い、クロック信号の伝播遅延時間に対する遅延変動差が存在するという問題点（問題点４）を有していた。
この対策としては、同期素子間パスのタイミングエラー値（またはスラック値）を算出する際に、信号送信側と信号受信側の各素子に入力されるクロック信号の分岐点からの信号到着時間に対し、変動を考慮する方法が用いられている。
【００１６】
この例を図９を用いて説明する。図９において、１１００〜１１０２は同期素子、１１１０はクロック信号発生回路、１１２０、１１２１はクロック信号分岐点、１１３０は同期素子間パス、１１４０は駆動素子である。
【００１７】
この図９では、同期素子１１００に到着するクロック信号と、１１０１に到着するクロック信号との分岐部は、分岐点１１２０である。そのため、同期素子間パス１１３０のタイミングエラー値を算出する場合には、分岐点１１２０から同期素子１１００までのクロック遅延の変動と、分岐点１１２０から同期素子１１０１までのクロック遅延の変動を考慮しなければならない。クロック遅延の変動量は、クロック遅延時間に応じて変化するため、クロック遅延時間が小さければ変動量を小さくすることができる。
【００１８】
しかし、クロック遅延時間を削減するために、クロック経路中の駆動素子の駆動能力を高くすると、クロック回路の消費電力が増加するという問題があるため、消費電力の増加を抑え、クロック遅延時間を調整する方法が望まれていたが、有効な手法が存在しなかった。
【００１９】
また、上記の問題点１〜４は、特に、信号送信側の同期素子と信号受信側の同期素子とで、それらに入力されるクロック信号の伝播経路が大きく異なる場合に、それらの同期素子間のパスで顕著に発生する。このようなパスとして、例えば、階層設計においては、パスの経路が回路中の広い範囲に分布し遅延変動の影響が大きく、またクロック信号の分岐点からの遅延時間が大きくなる異なるブロック間のパスが挙げられる。
【００２０】
本発明は、上記従来の問題点を解決するもので、遅延変動に対する回路の誤動作の確率を低減することができるとともに、クロック遅延時間の増加による遅延変動量を削減して、クロック回路の消費電力の過剰な増大を抑えることができる半導体装置およびその設計方法を提供する。
【００２１】
【課題を解決するための手段】
上記の課題を解決するために、本発明の請求項１に記載の半導体装置の設計方法は、半導体素子を含む複数の素子からなり、クロック信号を動作タイミングの基準にして動作する半導体装置の設計方法であって、前記クロック信号のタイミングにそれぞれ同期する前記素子間でパスを形成し、そのパスでの前記クロック信号に対する遅延時間の最小の余裕度である最小スラック値を極大化するように、前記クロック信号の前記素子への到着時間を決定するクロック信号到着時間決定工程を有する方法としたことを特徴とする。
【００２２】
この方法により、論理回路中素子の駆動能力の変更または追加削除を処理実行せずに、タイミングエラー削減やスラック値増加を実現することができる。
また、本発明の請求項２に記載の半導体装置の設計方法は、請求項１に記載の半導体装置の設計方法であって、クロック信号到着時間決定工程は、その処理により極大化した前記最小スラック値を維持しながら、スラック値の和を極大化する方法としたことを特徴とする。
【００２３】
また、本発明の請求項３に記載の半導体装置の設計方法は、請求項１に記載の半導体装置の設計方法であって、クロック信号到着時間決定工程は、パスの最小スラック値が、その制約として外部から与えた最小スラック値を満たした状態としながら、前記スラック値の和を極大化する方法としたことを特徴とする。
【００２４】
これらの方法により、クリティカルパス以外の部分で発生した遅延変動に対する回路誤動作の確率を削減することができる。
また、本発明の請求項４に記載の半導体装置の設計方法は、請求項１または請求項２または請求項３に記載の半導体装置の設計方法であって、各請求項に記載のクロック信号到着時間決定工程として、それらの処理の前に、クロック信号に同期する全素子間のパス毎の負のスラック値であるタイミングエラー値の和を極小化する方法としたことを特徴とする。
【００２５】
また、本発明の請求項５に記載の半導体装置の設計方法は、請求項４に記載の半導体装置の設計方法であって、クロック信号到着時間決定工程は、タイミングエラー値の和として、それらの２乗和を極小化する方法としたことを特徴とする。
【００２６】
これらの方法により、タイミングエラー削除工程を容易化することができる。
また、本発明の請求項６に記載の半導体装置の設計方法は、請求項４に記載の半導体装置の設計方法であって、クロック信号に同期する全素子間のパス毎の最大遅延パスおよび最小遅延パスを算出する工程を有し、クロック信号到着時間決定工程で用いる各タイミングエラー値は、前記最大遅延パスおよび最小遅延パスを基にして算出する方法としたことを特徴とする。
【００２７】
また、本発明の請求項７に記載の半導体装置の設計方法は、請求項１または請求項２または請求項３に記載の半導体装置の設計方法であって、クロック信号到着時間決定工程は、前記スラック値の和を、前記同期素子間パスにタイミングエラーが発生しない範囲で前記クロック信号の素子への到着時間を変化させることにより、算出する方法としたことを特徴とする。
【００２８】
また、本発明の請求項８に記載の半導体装置の設計方法は、請求項４に記載のクロック信号到着時間決定工程により、クロック信号到着時間を決定し、その後、請求項１〜３のいずれかに記載のクロック信号到着時間決定工程により、クロック信号到着時間を決定する方法としたことを特徴とする。
【００２９】
また、本発明の請求項９に記載の半導体装置の設計方法は、請求項４に記載のクロック信号到着時間決定工程により、クロック信号到着時間決定し、その後、タイミングエラーを削除するためのタイミングエラー削除工程を実行し、その後、請求項１〜３のいずれかに記載のクロック信号到着時間決定工程により、クロック信号到着時間を決定する方法としたことを特徴とする。
【００３０】
この方法により、タイミングエラー削除工程の容易化と、回路内に遅延変動が発生した場合における回路動作の可能性を向上することができる。
また、本発明の請求項１０に記載の半導体装置の設計方法は、請求項４に記載のクロック信号到着時間決定工程の処理実行前に、その処理実行での前記クロック信号到着時間の調整によりタイミングエラーが削除可能か否かを判定し、その判定結果により、前記クロック信号到着時間決定工程を実行するかどうかを判断する工程を有する方法としたことを特徴とする。
【００３１】
この方法により、請求項４または請求項５に記載の半導体装置の設計方法でのクロック信号到着時間決定工程に要する設計期間を短縮することができる。
また、本発明の請求項１１に記載の半導体装置の設計方法は、請求項１〜１０のいずれかに記載の半導体装置の設計方法であって、クロック信号に同期する全素子間のパス毎のスラック値は、前記パスの信号送信側と信号受信側の各素子に入力されるクロック信号の分岐点から、前記各素子への前記クロック信号の到着時間に応じた遅延変動量を、前記パス毎のスラック値から減じて算出する方法としたことを特徴とする。
【００３２】
この方法により、クロック経路に応じた遅延変動を考慮した半導体装置を設計することができる。
また、本発明の請求項１２に記載の半導体装置の設計方法は、請求項１〜１１のいずれかに記載の半導体装置の設計方法であって、クロック信号に同期する全素子間のパス毎のスラック値を前記パスの遅延時間により分類する工程と、その分類工程により得られた分類毎に、それらを代表する前記パス毎のスラック値を算出する工程とを有する方法としたことを特徴とする。
【００３３】
この方法により、スラック値を計算するパス数を削減することができ、クロック信号到着時間算出の処理時間を短縮することができる。
また、本発明の請求項１３に記載の半導体装置の設計方法は、半導体素子を含む複数の素子により形成される素子群からなり、クロック信号を動作タイミングの基準にして動作する半導体装置の設計方法であって、前記クロック信号のタイミングにそれぞれ同期する前記素子群間で、前記クロック信号に対するクロック経路の遅延時間を、一律に、増加または減少させる工程を有する方法としたことを特徴とする。
【００３４】
また、本発明の請求項１４に記載の半導体装置の設計方法は、請求項１３に記載の半導体装置の設計方法であって、クロック経路中に含まれる等しい駆動能力の素子の能力を、一律に、増加または減少させる工程を有し、その工程での前記等しい駆動能力の素子の能力の増加または減少により、前記クロック経路の遅延時間を一律に増加または減少させる工程での処理を実行する方法としたことを特徴とする。
【００３５】
また、本発明の請求項１５に記載の半導体装置の設計方法は、請求項１４に記載の半導体装置の設計方法であって、複数のクロック経路に含まれる等しい駆動能力の素子の入力端子側にそれぞれ接続する素子の駆動能力を等しくするとともに、前記等しい駆動能力の素子の出力端子側にそれぞれ接続する素子の駆動能力を等しくし、かつ、前記等しい駆動能力の素子の入力側にそれぞれ接続する配線長を等しくするとともに、前記等しい駆動能力の素子の出力側にそれぞれ接続する配線長を等しくする方法としたことを特徴とする。
【００３６】
これらの方法により、クロック遅延時間の増加による遅延変動量を削減することができるとともに、クロック回路の消費電力の過剰な増大を十分抑えることができる。
【００３７】
また、本発明の請求項１６に記載の半導体装置は、請求項１３〜請求項１５のいずれかに記載の半導体装置の設計方法により製造された半導体装置であって、複数のクロック経路に含まれる等しい駆動能力の素子の配置領域の近傍に、前記駆動能力を変更した場合に、その変更により必要となる駆動素子が配置可能な領域を設けた構成としたことを特徴とする。
【００３８】
この構成により、容易にクロック経路の遅延時間を一律に増加することができる。
また、本発明の請求項１７に記載の半導体装置は、請求項１〜１５のいずれかに記載の半導体装置の設計方法により製造されたことを特徴とする。
【００３９】
この構成により、クロック信号に対する遅延時間の調整により、クロック信号を基準にして同期する素子間におけるパスのタイミングエラー量を極小化することによって、タイミングエラー削除工程を容易化し、その工程でのタイミングエラー削除の後、最小スラック値を極大化するとともに、最小スラック値を満たしながら、スラック値の和を極大化することができる。
【００４０】
【発明の実施の形態】
以下、本発明の実施の形態を示す半導体装置及びその設計方法について、図面を参照しながら具体的に説明する。
（実施の形態１（基本形））
本発明の実施の形態１の半導体装置及びその設計方法を説明する。
【００４１】
図１は本実施の形態１の半導体装置の設計方法の手順を示すフロー図である。図１において、１０１はタイミングエラー削除可能判定工程、１０２はタイミングエラー量極小化工程、１０３はタイミングエラー削除工程、１０４はタイミングマージン極大化工程である。
【００４２】
図２は本実施の形態１の半導体装置の設計方法による回路のレイアウト図である。図２において、２０１〜２１３は同期素子、２２０〜２２２はクロック遅延調整素子、２３０〜２３４は同期素子間パス、２４０は駆動素子、２５０はクロック信号発生回路、２６０、２６１は駆動素子２４０群により構成されたクロックツリー部である。
【００４３】
クロック遅延調整素子２２０〜２２２は、複数のセルの組み合わせを変化させることで、有限の範囲で任意の遅延時間を容易に実現できる素子である。同期素子間パス２３０〜２３４は、クロック信号のタイミングにそれぞれ同期する素子間で形成したパスであり、それら同期素子間パス２３０〜２３４の矢印は信号の伝播方向を示し、（ＭＡＸ値、ＭＩＮ値）はそれぞれ、
ＭＡＸ値：同期素子間パス２３０〜２３４の各最大遅延時間
ＭＩＮ値：同期素子間パス２３０〜２３４の各最小遅延時間
を示す。
【００４４】
クロックツリー部２６０、２６１は、説明を簡単化するため、それぞれクロック遅延調整素子２２０、２２１から各クロックツリー部の末端に接続する同期素子までのクロック遅延時間差（スキュー）は０［ｎｓ］とする。また、同じクロック遅延調整素子により駆動されている同期素子間パスは図示していない（例えば、同期素子２０２から同期素子２０５へのパスは示していない）。
【００４５】
図２の回路において、クロック信号発生回路２５０からのクロック信号が各同期素子２０１〜２１３に到着する時間が等しくなるように、クロック遅延調整素子２２０、２２１、２２２を調整した時の遅延値を、基準の遅延値として０［ｎｓ］と表現する。
【００４６】
例えば、クロック遅延調整素子２２０、２２１、２２２の遅延値が、それぞれ、０［ｎｓ］、１［ｎｓ］、２［ｎｓ］と表された場合、２２０に接続する同期素子２０１〜２０８には、ある基準時間でクロック信号が到着したとすると、２２１に接続する同期素子２０９〜２１２には、上記基準時間よりも１［ｎｓ］遅れて到着し、２２２に接続する同期素子２１３には、上記基準時間よりも２［ｎｓ］遅れて到着することを示す。
【００４７】
説明を容易化するため、図３に、図２に示した同期素子間パス２３０〜２３４と、クロック遅延調整素子２２０、２２１、２２２により駆動される同期素子２０１〜２１３として、同期素子群３０１、３０２、３０３とを示す。図３より、クロック遅延調整素子の値より、パスのスラック値（回路制約に対する遅延時間の余裕度）を算出できる。尚、スラック値がマイナスの値となった場合は、特別にタイミングエラー値と称する。
【００４８】
パスのスラック値は下記（式１）および（式２）により算出できる。
Ｓｅｔｕｐスラック値
＝クロック周期
−（ＭＡＸ値
＋送信側同期素子へのクロック信号伝播時間
−受信側同期素子へのクロック信号伝播時間）・・・（式１）
Ｈｏｌｄスラック値
＝ＭＩＮ値
＋送信側同期素子へのクロック信号伝播時間
−受信側同期素子へのクロック信号伝播時間・・・（式２）
例えば、回路のクロック周期が１０［ｎｓ］で、クロック遅延調整素子２２０、２２１、２２２がそれぞれ０［ｎｓ］、１［ｎｓ］、２［ｎｓ］の場合、パス２３０のＳｅｔｕｐ、Ｈｏｌｄのスラック量は、
Ｓｅｔｕｐスラック値
＝１０−（１４＋０−１）＝−３（タイミングエラー）
Ｈｏｌｄスラック値＝２＋０−１＝１
と算出できる。
【００４９】
以下に、図１、図３を用いて本実施の形態１を説明する。
１０１工程では、クロック遅延調整素子２２０、２２１、２２２の調整のみで、タイミングエラーを削除（エラー無し）できるか判定する。これは、同期素子群３０１、３０２、３０３をノード、同期素子間パス２３０〜２３４を有効枝、同期素子間パスの最大遅延値（ＭＡＸ値）を有効枝方向の重み、同期素子間パスの最小遅延値（ＭＩＮ値）を有効枝の逆方向の重みとし、グラフ解析手法の一つであるｂｅｌｌｍａｎｆｏｒｄ法を用いることで、タイミングエラー削除となる解が存在するか否かを判定することができる（枝とノードの数の多項式オーダーで算出可能）。
【００５０】
解が存在する場合（エラー無し）、クロック遅延調整素子の調整によりタイミングエラーを無くすことが可能であるため１０４工程へ進み、解が存在しない場合（エラー有り）は、１０２工程へ進む。
【００５１】
図３に示す本実施の形態では、解が存在しないため１０２工程へ進む。
以下、１０２工程（タイミングエラー量極小化工程）について説明する。
１０２工程では、タイミングエラー削除を容易化するため、下記に示すＣＯＳＴ１を極小化するクロック遅延調整素子の遅延値を算出する。
ＣＯＳＴ１
＝Σ全同期素子間パス［｛ＷＮＳ（同期素子間パス）｝＾２］
ここで、ＷＮＳ（同期素子間パス）は、パスがタイミングエラーでなければ０、タイミングエラーであればそのスラック値（負の値）を「返す関数」とする。この値の２乗和をＣＯＳＴ１とする。すなわち、ＣＯＳＴ１を極小化することにより、タイミングエラー値が大きな部分が優先的に削減された結果となる。
【００５２】
ＣＯＳＴ１の極小化の実現方法としては、既存の組み合わせ最適化手法を用いることにより容易に実現できる（例えば、ＳｉｍｕｌａｔｅｄＡｎｅａｌｉｎｇ法（以下、ＳＡ法と称する）等）。
【００５３】
図３に示す実施の形態では、従来から用いられていたゼロスキュー設計を実施した場合を、初期状態（クロック遅延調整素子２２０、２２１、２２２に、それぞれ０［ｎｓ］を割り当てた場合）とする。この時、同期素子間パス２３０で４［ｎｓ］、２３１で１［ｎｓ］のＳｅｔｕｐエラーとなり、ＣＯＳＴ１は、
ＣＯＳＴ１＝４＾２＋１＾２＝１７
となる。
【００５４】
本実施の形態におけるクロック遅延調整素子の変更によると、ＣＯＳＴ１＝２となる解を算出することができる（クロック遅延調整素子２２０、２２１、２２２に、それぞれ０［ｎｓ］、３［ｎｓ］、０［ｎｓ］を割り当てる）。この割り当てにすることで、タイミングエラーを同期素子間パス２３０の１［ｎｓ］のＳｅｔｕｐエラー、１［ｎｓ］のＨｏｌｄエラーに削減でき、１０３工程（タイミングエラー削除工程）を容易化することができる。
【００５５】
１０２工程（タイミングエラー量極小化工程）終了後、１０３工程（タイミングエラー削除工程）を実行する。１０３工程では、論理回路中のバッファ挿入、駆動素子の能力変更等により、タイミングエラーを削除する。尚、１０３工程に関しては、一般的な解決方法が広く知られているため、ここでの説明は省略する。
【００５６】
次に、１０４工程（タイミングマージン極大化工程）を図４に示す回路と図５のフロー図を用いて説明する。
図４において、４２０、４２１、４２２、４２３、４２４はクロック遅延調整素子、４０１、４０２、４０３、４０４、４０５は同期素子群、４３０〜４３２は同期素子間パスである。
【００５７】
また、１０４工程の詳細を図５に示す。図５において、５０１は最小スラック値極大化工程、５０２はスラック値和極大化工程である。なお、説明を容易化するため、クロック遅延調整素子４２１、４２３のみ調整可能とする（クロック遅延調整素子４２０、４２４は０［ｎｓ］に固定とする）。
【００５８】
５０１工程（最小スラック値極大化工程）では、タイミングエラーが発生しない範囲で、最小スラック値を極大化するためのクロック遅延調整素子の遅延値を算出する。この処理は、
ＣＯＳＴ２＝ＷＳ（全同期素子間パスの集合）
ただし、
ＷＳ（全同期素子間パスの集合）：パス集合の最小スラック値を返す関数
を極大化する処理であり、クロック信号到着時間の組み合わせ最適化問題として扱うことができる（ＳＡ法等により解を算出できる）。
【００５９】
５０２工程では、タイミングエラーが発生しない、かつ、５０１工程で算出した最小スラック値が減少しない範囲で、
ＣＯＳＴ３＝Σ全同期素子間パス｛Ｓｌａｃｋ（同期素子間パス）｝
ただし、
Ｓｌａｃｋ（同期素子間パス）：パスのスラック値を返す関数
を極大化する。これも、クロック遅延調整素子の遅延値の組み合わせ最適化問題として扱うことができる（ＳＡ法等により解を算出できる）。
【００６０】
次に、図４の回路に対応する実施の形態を説明する。
５０１工程によれば、最小スラック値を極大化するクロック遅延調整素子値の解として、クロック遅延調整素子４２１に１．５［ｎｓ］、クロック遅延調整素子４２３に０［ｎｓ］を算出することができ、その時の最小スラック値は１．５［ｎｓ］である（上記クロック遅延調整素子の組み合わせは、最小スラック値を極大化する解の一つ）。
【００６１】
この段階での各同期素子間パスのスラック値は、
同期素子間パス４３０：１．５［ｎｓ］
同期素子間パス４３１：１．５［ｎｓ］
同期素子間パス４３２：３［ｎｓ］
であり、スラック値和は、６［ｎｓ］（１．５＋１．５＋３［ｎｓ］）である。
【００６２】
次に５０２工程に進む。５０１工程で算出された最小スラック値１．５［ｎｓ］を満たし、スラック値の和が極大となるクロック遅延調整素子値は、
クロック遅延調整素子値４２１：１．５［ｎｓ］
クロック遅延調整素子値４２３：０．５［ｎｓ］
を割り当てた場合となる。
【００６３】
この段階での各同期素子間パスのスラック値は、
同期素子間パス４３０：１．５［ｎｓ］
同期素子間パス４３１：１．５［ｎｓ］
同期素子間パス４３２：３．５［ｎｓ］
であり、スラック値和は、６．５［ｎｓ］（１．５＋１．５＋３．５［ｎｓ］）となり、５０１工程実行後よりも、スラック値和を０．５［ｎｓ］だけ増加することができた。
【００６４】
このように、本実施の形態によれば、最小スラック値を極大化しながら、スラック値和を極大化することができる。結果として、回路全体としては１．５［ｎｓ］の変動が発生しても動作が保証でき、かつ、同期素子間パス４３２に３．５［ｎｓ］までの遅延変動が発生した場合でも、動作を保証することができる強固な回路を製造することができる。
【００６５】
なお、本実施の形態の５０２工程においては、５０１工程で算出された最小スラック値を満たすようにスラック値和を極大化したが、最小スラック値を制約として外部より与え、５０２工程において、前記制約として与えられた最小スラック値を満たしながらスラック値を極大化しても良い。
【００６６】
また、本実施の形態においては、ＣＯＳＴ１、ＣＯＳＴ２、ＣＯＳＴ３の算出方法として、ＳＡ法によるの組み合わせ最適化手法を用いた。このような手法では、解を算出するためにはパスのスラックを繰り返し算出しなければならない。しかし、図１に示した本実施の形態による設計方法では、１０１工程による判定を実行することで、タイミングエラーが発生しない場合は、１０２工程の実行が必要なくなり、設計期間短縮が可能となる。
（実施の形態１（他の方法１））
上記の実施の形態１に示した方法に加え、クロック分岐後の遅延時間を考慮した他の方法１を、以下に説明する。
【００６７】
図２の回路において、遅延シミュレーションにより、クロック遅延調整素子２２０、２２１、２２２が０［ｎｓ］のとき、クロック信号発生回路２５０から分岐点２７０までの遅延時間を１［ｎｓ］、分岐点２７０から同期素子２０１〜２０８までの遅延時間を１０［ｎｓ］、分岐点２７０から分岐点２７１までの遅延時間を２［ｎｓ］、分岐点２７１から同期素子２１３までの遅延時間を１０［ｎｓ］、分岐点２７１から同期素子２０９〜２１２までの遅延時間を９［ｎｓ］であると、それぞれ見積もられた例を示す。また、クロック遅延値に対する遅延変動量は±５％と見積るとする。
【００６８】
同期素子間パスのスラック見積もりは、遅延変動によりスラックが減少する値として計算でき、下記（式３）および（式４）のようになる。
Ｓｅｔｕｐスラック値（クロック分岐後の遅延変動を考慮）
＝クロック周期
−（ＭＡＸ値
＋送信側同期素子へのクロック信号伝播時間
−受信側同期素子へのクロック信号伝播時間）
＋クロック分岐点から送信側同期素子までのクロック信号伝播時間
＊クロック遅延変動量
−クロック分岐点から受信側同期素子までのクロック信号伝播時間
＊クロック遅延変動量・・・（式３）
Ｈｏｌｄスラック値（クロック分岐後の遅延変動を考慮）
＝ＭＩＮ値
＋開始側同期素子へのクロック信号伝播時間
−受信側同期素子へのクロック信号伝播時間
−クロック分岐点から送信側同期素子までのクロック信号伝播時間
＊クロック遅延変動量
＋クロック分岐点から受信側同期素子までのクロック信号伝播時間
＊クロック遅延変動量・・・（式４）
クロック分岐点から受信側同期素子までのクロック信号伝播時間は、例えば、同期素子間パス２３３の場合、クロック信号が、送信側同期素子２０９と受信側同期素子２１３とに分岐する部分は分岐部２７１であり、
クロック分岐点から送信側同期素子までのクロック信号伝播時間
＝分岐点２７１から同期素子２０９までのクロック信号伝播時間（クロック遅延調整素子２２１の値を含む）
クロック分岐点から受信側同期素子までのクロック信号伝播時間
＝分岐点２７１から同期素子２１３までのクロック信号伝播時間（クロック遅延調整素子２２２の値を含む）
として表すことができ、（式３）および（式４）を用いて、Ｓｅｔｕｐスラック値およびＨｏｌｄスラック値を、それぞれ計算することができる。
【００６９】
同期素子間パス２３３のＳｅｔｕｐ、Ｈｏｌｄスラック値は、以下のように計算できる。
Ｓｅｔｕｐスラック値
＝１０−（７＋１２−１３）＋９＊（−０．０５）−１０＊０．０５
＝３．０５［ｎｓ］
Ｈｏｌｄスラック値
＝２＋１２−１３−９＊０．０５＋１０＊（−０．０５）
＝０．０５［ｎｓ］
以上のように、上記の（式３）および（式４）を、実施の形態１（基本形）で説明した工程１０１、１０２、１０４、５０１、５０２、５０４の各工程に用いることで、クロック遅延変動を考慮したクロック遅延調整方法が実現でき、クロック経路の伝播遅延時間の増加による遅延変動も考慮したクロック遅延調整が実現できる。
（実施の形態１（他の方法２））
なお、上記の実施の形態１では、ＣＯＳＴ１、ＣＯＳＴ２、ＣＯＳＴ３を算出方法として、ＳＡ法等を用いる方法を示した。ＳＡ法では、クロック遅延調整素子を変化させ、そのときのＣＯＳＴ１、ＣＯＳＴ２、ＣＯＳＴ３を算出する処理を繰り返すことで解を算出する。そのため、同期素子間パスの数が増加した場合、一回のコスト（ＣＯＳＴ１、ＣＯＳＴ２、ＣＯＳＴ３）を算出するための計算量が同期素子間パス数に比例して増加し、処理時間が非常に長くなる（クロック遅延調整素子数と同期素子間パスの指数関数オーダーの計算量）。一般的な回路においては、同期素子間パス数は１万パス以上存在する場合があり、処理時間の増加が問題になる。
【００７０】
そこで、本実施の形態１の他の方法２では、下記に示すデータ構造を用いる。このような他の方法２を以下に説明する。
図６は本実施の形態１の半導体装置の設計方法における他の方法２による同期素子間パスの分類の説明図であり、本実施の形態におけるデータ構造の説明図である。図６において、６０１、６０２は同期素子群、６２０、６２１はクロック遅延調整素子、６３０は同期素子間パス群、６４０は同期素子間パス群６３０の最大遅延値である。
【００７１】
同期素子間パス群６３０には１００００本のパスが存在し、クロック遅延調整素子６２０、６２１がそれぞれ０［ｎｓ］、２［ｎｓ］、クロック周期１０［ｎｓ］である例を用いて説明する。なお、説明を簡単化するため、Ｓｅｔｕｐ側のスラック値もＨｏｌｄ側のスラック値も同様の処理で実現できるので、最大遅延パスであるＳｅｔｕｐ側のスラック値のみに関し説明する。
【００７２】
本実施の形態によるデータ構造は、同期素子間パスを、遅延値を指標としたグループに分類することを特徴とする。各グループの代表値に対してスラック値を求め、そのスラック値を判定し、判定結果によりグループ内の同期素子間パスの各クラック値を求める処理を実行する。
【００７３】
図６において、同期素子間パス群６３０のパスを、最大遅延値を基に、以下のグループに分類する。なお、代表値は各グループの最大値とする。
０＜ｘ≦２［ｎｓ］　代表値：２［ｎｓ］　グループ１
２＜ｘ≦４［ｎｓ］　代表値：４［ｎｓ］　グループ２
４＜ｘ≦６［ｎｓ］　代表値：６［ｎｓ］　グループ３
６＜ｘ≦８［ｎｓ］　代表値：８［ｎｓ］　グループ４
８＜ｘ≦１０［ｎｓ］　代表値：１０［ｎｓ］　グループ５
１０＜ｘ≦１２［ｎｓ］　代表値：１２［ｎｓ］　グループ６
１２＜ｘ≦１４［ｎｓ］　代表値：１４［ｎｓ］　グループ７
同期素子間パス群６３０のタイミングエラー和（Ｓｅｔｕｐ側のみ）を算出する例では、まず各グループの代表値に対してタイミングエラー値を算出する。その結果を下記に示すと、グループ７の代表値でタイミングエラーが発生することが分かる。
グループ１：１０−（２＋０−２）＝１０
グループ２：１０−（４＋０−２）＝８
グループ３：１０−（６＋０−２）＝６
グループ４：１０−（８＋０−２）＝４
グループ５：１０−（１０＋０−２）＝２
グループ６：１０−（１２＋０−２）＝０
グループ７：１０−（１４＋０−２）＝−２（タイミングエラー）
そこで、グループ７に属する同期素子間パス（１２．２、１３．８）に対し、それぞれタイミングエラー値を算出する。
１０−｛１２．２＋０−２｝＝−０．２
１０−｛１３．８＋０−２｝＝−１．８
すなわち、タイミングエラー値和（Ｓｅｔｕｐ側のみ）は、（（−０．２）＋（−１．８））−＝−２．０となる。計算回数は、グループの代表値の計算回数（７回）とグループ７に属する同期素子間パスのタイミングエラー値の計算回数（２回）の計９回となる。
【００７４】
一方、全てのパスに対して上記計算をした場合、パス数が１００００であるため、１００００回の計算が必要となり、本実施の形態の手法のデータ構造を用いることで、計算回数を大幅に削減できることが分かる。
【００７５】
なお、本実施の形態では、グループ化によるデータ構造を用いたが、グループ化することは本発明の本質ではなく、遅延値を指標として分類したデータ構造を用いることが本質である。これは、クロック遅延調整により複数の同期素子間パスのスラック値（タイミングエラー値）が一律に増減することを利用している。
（実施の形態２）
本発明の実施の形態２の半導体装置及びその設計方法を説明する。
【００７６】
図７は本実施の形態２の半導体装置の設計方法による回路のレイアウト図である。図７において、７００〜７０２は同期素子群、７４０は駆動素子、７５０、７６０、７７０は駆動素子（Ａ）、７５１、７６１、７７１は駆動素子（Ｂ）、７５２、７６２、７７２は駆動素子（Ｃ）、７５３、７６３、７７３は長さＡの配線、７５４、７６４、７７４は長さＢの配線、７８０はクロック信号発生回路である。
【００７７】
駆動素子（Ａ）、（Ｂ）、（Ｃ）は、それぞれ同じ形状（駆動能力）の駆動素子を示す。駆動素子（Ｂ）７５１、７６１、７７１は、駆動能力が最大、または最小以外であり、それぞれの配置領域近傍には、駆動素子（Ｂ）７５１、７６１、７７１を他の能力に変更した場合でも配置できる領域がある。
【００７８】
上記の実施の形態１の他の方法１で示したように、同期素子群７００〜７０２間のパスのスラック値は、クロック信号線の分岐点からそれぞれの同期素子群に到着するまでの遅延時間に応じて減少する（クロック伝播遅延時間が増加すると、遅延変動量も増加するため）。
【００７９】
そこで、同期素子群７００〜７０２間のパスにおいて、クロック遅延時間の増加によるタイミングエラー、または、スラック値不足が発生した場合、駆動素子（Ｂ）７５１、７６１、７７１を、一律に駆動能力が高い素子に変更する。駆動能力が増加することで、クロック遅延値を削減でき、遅延変動量を削減できる。
【００８０】
駆動素子（Ｂ）７５１、７６１、７７１の各入力端子には、それぞれ駆動素子（Ａ）７５０、７６０、７７０から長さＡの配線７５３、７６３、７７３が接続され、駆動素子（Ｂ）７５１、７６１、７７１の各出力端子には、それぞれ長さＢの配線７５４、７６４、７７４と駆動素子（Ｃ）７５２、７６２、７７２が同等に接続されており、駆動素子（Ｂ）７５１、７６１、７７１を一律に変更した場合、同期素子群７００〜７０２に到着するクロック信号の時間差が等しく増減し、クロック遅延時間による遅延変動以外は影響がない。
【００８１】
また、同期素子群７００〜７０２の間の同期素子間パス群のスラック値が過剰に存在する場合、必要なスラック値を維持する範囲で、駆動素子（Ｂ）７５１、７６１、７７１に対して、その駆動能力を一律に削減する。このように駆動能力を削減することで、回路の消費電力を削減することができる。
【００８２】
【発明の効果】
以上のように本発明によれば、従来のように、論理回路に対する修正のみにより、タイミングエラーを削除したり、全素子間のパスの最小スラック値を増加させるのではなく、クロック信号に対する遅延時間の調整により、クロック信号を基準にして同期する素子間におけるパスのタイミングエラー量を極小化することによって、タイミングエラー削除工程を容易化し、その工程でのタイミングエラー削除の後、最小スラック値を極大化するとともに、最小スラック値を満たしながら、スラック値の和を極大化することができ、遅延変動に対する回路の誤動作の確率を低減することができる。
【００８３】
また、各クロック経路中に含まれる前記等しい駆動能力の素子の数を、一律に増加または減少させ、クロック経路の遅延時間を、一律に増加または減少させることができ、クロック遅延時間の増加による遅延変動量を削減して、クロック回路の消費電力の過剰な増大を抑えることができる。
【図面の簡単な説明】
【図１】本発明の実施の形態１の半導体装置の設計方法の手順を示すフロー図
【図２】同実施の形態１の半導体装置の設計方法による回路のレイアウト図
【図３】同実施の形態１の半導体装置の設計方法による同期素子群、遅延調整素子、同期素子間パスを示すレイアウト図
【図４】同実施の形態１の半導体装置の設計方法により最小スラック目標を満たしスラック和を最大化する工程の説明図
【図５】同実施の形態１の半導体装置の設計方法によるタイミングマージン極大化工程の手順を示すフロー図
【図６】同実施の形態１の半導体装置の設計方法における他の方法２による同期素子間パスの分類の説明図
【図７】本発明の実施の形態２の半導体装置の設計方法による回路のレイアウト図
【図８】従来の半導体装置の設計方法による回路例１のレイアウト図
【図９】従来の半導体装置の設計方法による回路例２のレイアウト図
【符号の説明】
１０１　　タイミングエラー削除可能判定工程
１０２　　タイミングエラー量極小化工程
１０３　　タイミングエラー削除工程
１０４　　タイミングマージン極大化工程
２０１〜２１３　　同期素子
２２０〜２２２　　クロック遅延調整素子
２３０〜２３４　　同期素子間パス
２４０　　駆動素子
２５０　　クロック信号発生回路
２６０、２６１　　（駆動素子群により構成された）クロックツリー部
２７０、２７１　　クロック信号分岐点
３０１、３０２、３０３　　同期素子群
４２０〜４２４　　クロック遅延調整素子
４０１〜４０５　　同期素子群
４３０〜４３２　　同期素子間パス
５０１　　最小スラック値極大化工程
５０２　　スラック値和極大化工程
６０１、６０２　　同期素子群
６２０、６２１　　クロック遅延調整素子
６３０　　同期素子間パス群
６４０　　（同期素子間パス群６３０の）最大遅延値
７００〜７０２　　同期素子群
７４０　　駆動素子
７５０、７６０、７７０　　駆動素子Ａ
７５１、７６１、７７１　　駆動素子Ｂ
７５２、７６２、７７２　　駆動素子Ｃ
７５３、７６３、７７３　　長さＡの配線
７５４、７６４、７７４　　長さＢの配線
７８０　　クロック信号発生回路
１０００〜１００３　　同期素子
１０１０、１０１１　　同期素子間パス
１０２０　　回路全体
１１００〜１１０２　　同期素子
１１１０　　クロック信号発生回路
１１２０、１１２１　　クロック信号分岐点
１１３０　　同期素子間パス
１１４０　　駆動素子
【図１】
2004145768.tif 000003
【図２】
2004145768.tif 000004
【図３】
2004145768.tif 000005
【図４】
2004145768.tif 000006
【図５】
2004145768.tif 000007
【図６】
2004145768.tif 000008
【図７】
2004145768.tif 000009
【図８】
2004145768.tif 000010
【図９】
2004145768.tif 000011