(57)【特許請求の範囲】
【請求項１】
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力をイネーブル信号として供給され前記第２のクロックを供給される第１のクロックゲーティング回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路との間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築工程と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行うとともに，前記クリティカルパスを前記クリティカルパス以外のパスよりも優先して最適化し，ネットリストを生成する論理合成工程とを有するＬＳＩ設計方法。
【請求項２】
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力を入力データ信号として供給され前記第２のクロックを供給される第２のフリップフロップ回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１，第２のフリップフロップ回路の間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築工程と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行うとともに，前記クリティカルパスを前記クリティカルパス以外のパスよりも優先して最適化し，ネットリストを生成する論理合成工程とを有するＬＳＩ設計方法。
【請求項３】
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力をイネーブル信号として供給され前記第２のクロックを供給される第１のクロックゲーティング回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路との間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築手段と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行うとともに，前記クリティカルパスを前記クリティカルパス以外のパスよりも優先して最適化し，ネットリストを生成する論理合成手段とを有するＬＳＩ設計装置。
【請求項４】
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力を入力データ信号として供給され前記第２のクロックを供給される第２のフリップフロップ回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１，第２のフリップフロップ回路の間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築手段と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行うとともに，前記クリティカルパスを前記クリティカルパス以外のパスよりも優先して最適化し，ネットリストを生成する論理合成手段とを有するＬＳＩ設計装置。
【請求項５】
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力をイネーブル信号として供給され前記第２のクロックを供給される第１のクロックゲーティング回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路との間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築手順と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行うとともに，前記クリティカルパスを前記クリティカルパス以外のパスよりも優先して最適化し，ネットリストを生成する論理合成手順とをコンピュータに実行させるＬＳＩ設計プログラム。
【請求項６】
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力を入力データ信号として供給され前記第２のクロックを供給される第２のフリップフロップ回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１，第２のフリップフロップ回路の間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築手順と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行うとともに，前記クリティカルパスを前記クリティカルパス以外のパスよりも優先して最適化し，ネットリストを生成する論理合成手順とをコンピュータに実行させるＬＳＩ設計プログラム。
【請求項７】
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力をイネーブル信号として供給され前記第２のクロックを供給される第１のクロックゲーティング回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路との間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築工程と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行いネットリストを生成し，前記第１のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第１の余裕度と，前記第１のクロックゲーティング回路から出力される第２のクロックを供給される第２のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第２の余裕度とを算出する論理合成工程と，
セルを機能別にグルーピングした複数のモジュールのうち，前記第１，第２の余裕度のうち余裕度が小さい第１または第２のフリップフロップ回路が属するモジュールに，前記クリティカルパスの両端の前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路とを加えた新モジュールを設定し，前記ネットリスト内の複数のセルのうち当該新モジュール内のセルを，当該新モジュール外のセルより優先して仮想チップ上に配置するセル配置工程とを有するＬＳＩ設計方法。
【請求項８】
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力を入力データ信号として供給され前記第２のク
ロックを供給される第２のフリップフロップ回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１，第２のフリップフロップ回路の間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築工程と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行いネットリストを生成し，前記第１のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第１の余裕度と，前記第２のクロックを供給され前記第２のフリップフロップ回路の出力を入力データ信号とする第３のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第２の余裕度とを算出する論理合成工程と，
セルを機能別にグルーピングした複数のモジュールのうち，前記第１，第２の余裕度のうち余裕度が小さい第１または第３のフリップフロップ回路が属するモジュールに，前記クリティカルパスの両端の前記第１と第２のフリップフロップ回路を加えた新モジュールを設定し，前記ネットリスト内の複数のセルのうち当該新モジュール内のセルを，当該新モジュール外のセルより優先して仮想チップ上に配置するセル配置工程とを有するＬＳＩ設計方法。
【請求項９】
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力をイネーブル信号として供給され前記第２のクロックを供給される第１のクロックゲーティング回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路との間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築手段と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行いネットリストを生成し，前記第１のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第１の余裕度と，前記第１のクロックゲーティング回路から出力される第２のクロックを供給される第２のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第２の余裕度とを算出する論理合成手段と，
セルを機能別にグルーピングした複数のモジュールのうち，前記第１，第２の余裕度のうち余裕度が小さい第１または第２のフリップフロップ回路が属するモジュールに，前記クリティカルパスの両端の前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路とを加えた新モジュールを設定し，前記ネットリスト内の複数のセルのうち当該新モジュール内のセルを，当該新モジュール外のセルより優先して仮想チップ上に配置するセル配置手段とを有するＬＳＩ設計装置。
【請求項１０】
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力を入力データ信号として供給され前記第２のクロックを供給される第２のフリップフロップ回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１，第２のフリップフロップ回路の間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築手段と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行いネットリストを生成し，前記第１のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第１の余裕度と，前記第２のクロックを供給され前記第２のフリップフロップ回路の出力を入力データ信号とする第３のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第２の余裕度とを算出する論理合成
手段と，
セルを機能別にグルーピングした複数のモジュールのうち，前記第１，第２の余裕度のうち余裕度が小さい第１または第３のフリップフロップ回路が属するモジュールに，前記クリティカルパスの両端の前記第１と第２のフリップフロップ回路を加えた新モジュールを設定し，前記ネットリスト内の複数のセルのうち当該新モジュール内のセルを，当該新モジュール外のセルより優先して仮想チップ上に配置するセル配置手段とを有するＬＳＩ設計装置。
【請求項１１】
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力をイネーブル信号として供給され前記第２のクロックを供給される第１のクロックゲーティング回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路との間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築手順と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行いネットリストを生成し，前記第１のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第１の余裕度と，前記第１のクロックゲーティング回路から出力される第２のクロックを供給される第２のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第２の余裕度とを算出する論理合成手順と，
セルを機能別にグルーピングした複数のモジュールのうち，前記第１，第２の余裕度のうち余裕度が小さい第１または第２のフリップフロップ回路が属するモジュールに，前記クリティカルパスの両端の前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路とを加えた新モジュールを設定し，前記ネットリスト内の複数のセルのうち当該新モジュール内のセルを，当該新モジュール群外のセルより優先して仮想チップ上に配置するセル配置手順とをコンピュータに実行させるＬＳＩ設計プログラム。
【請求項１２】
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力を入力データ信号として供給され前記第２のクロックを供給される第２のフリップフロップ回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１，第２のフリップフロップ回路の間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築手順と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行いネットリストを生成し，前記第１のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第１の余裕度と，前記第２のクロックを供給され前記第２のフリップフロップ回路の出力を入力データ信号とする第３のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第２の余裕度とを算出する論理合成手順と，
セルを機能別にグルーピングした複数のモジュールのうち，前記第１，第２の余裕度のうち余裕度が小さい第１または第３のフリップフロップ回路が属するモジュールに，前記クリティカルパスの両端の前記第１と第２のフリップフロップ回路を加えた新モジュールを設定し，前記ネットリスト内の複数のセルのうち当該新モジュール内のセルを，当該新モジュール外のセルより優先して仮想チップ上に配置するセル配置手順とをコンピュータに実行させるＬＳＩ設計プログラム。
【請求項１３】
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件
ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力をイネーブル信号として供給され前記第２のクロックを供給される第１のクロックゲーティング回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路との間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築工程と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行いネットリストを生成する論理合成工程と，
前記ネットリストに基づいて，仮想チップ上に前記ネットリスト内の複数のセルを配置した配置データを生成するセル配置工程と，
前記仮想チップ上にクロック源から複数の供給クロックを生成するクロックツリーを配置したクロックツリーデータを生成するクロックツリー生成工程とを有し，
前記クロックツリー生成工程は，前記クリティカルパスの終点の前記第１のクロックゲーティングのイネーブル信号と前記第２のクロックとの間の余裕度に余裕がない場合，前記クロックツリーデータをもとにして，前記クリティカルパスの始点の前記第１のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第１の余裕度と，前記クリティカルパスの終点の前記第１のクロックゲーティングの出力をクロックとする第２のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第２の余裕度とを算出し，前記クロックツリーが生成する複数の供給クロックのうち，前記第１，第２の余裕度のいずれかに余裕がある場合，前記余裕がある第１または第２のフリップフロップ回路のクロックのスキューを他のクロックよりも大きくする工程を有するＬＳＩ設計方法。
【請求項１４】
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力を入力データ信号として供給され前記第２のクロックを供給される第２のフリップフロップ回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１，第２のフリップフロップ回路の間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築工程と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行いネットリストを生成する論理合成工程と，
前記ネットリストに基づいて，仮想チップ上に前記ネットリスト内の複数のセルを配置した配置データを生成するセル配置工程と，
前記仮想チップ上にクロック源から複数の供給クロックを生成するクロックツリーを配置したクロックツリーデータを生成するクロックツリー生成工程とを有し，
前記クロックツリー生成工程は，前記クリティカルパスの終点の前記第２のフリップフロップ回路の入力信号と前記第２のクロックとの間の余裕度に余裕がない場合，前記クロックツリーデータをもとにして，前記クリティカルパスの始点の前記第１のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第１の余裕度と，前記クリティカルパスの終点の前記第２のクロックを供給され前記第２のフリップフロップ回路の出力を入力データ信号とする第３のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第２の余裕度とを算出し，前記クロックツリーが生成する複数の供給クロックのうち，前記第１，第２の余裕度のいずれかに余裕がある場合，前記余裕がある第１または第２のフリップフロップ回路のクロックのスキューを他のクロックよりも大きくする工程を有するＬＳＩ設計方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，ＬＳＩ設計方法，設計プログラムおよび設計装置に関する。
【背景技術】
【０００２】
半導体集積回路設計では，半導体集積回路が所望のクロック周波数で正常に動作できるようにするため，タイミング制約を満たして設計や最適化を行う必要があり，これまで特許文献１〜３などの設計方法が提案されてきた。
【０００３】
一般的なＬＳＩの設計フローでは，設計者は，まず設計仕様に基づきＬＳＩをＲｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ（以下，ＲＴＬと呼ぶ。）で記述し，ＲＴＬ形式ファイルと，Ｓｙｎｏｐｓｙｓ  Ｄｅｓｉｇｎ  Ｃｏｎｓｔｒａｉｎｔ（以下，ＳＤＣと呼ぶ。）フォーマットにより記述された制約条件とをもとにして論理合成を行い，ゲートレベルの論理回路データであるネットリストを生成する。次に，ネットリストをもとにしてフロアプランニングを行った後，クロック信号の配線をツリー状に配置したクロックツリーを生成する。そして，各セル間を接続する多層配線パターンを形成する。最後に，Ｓｔａｔｉｃ  Ｔｉｍｉｎｇ  Ａｎａｌｙｓｉｓ（以下，ＳＴＡと呼ぶ。）を行い，配線の長さや幅，厚さなどに基づき配線パターンの抵抗や容量を抽出して配線遅延を取得し，データ配線遅延，クロック遅延やクロックスキューに基づき，設計回路がセットアップタイムやホールドタイムなどのタイミング制約を満たしている事を確認する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００３−９９４９１号公報
【特許文献２】特開２００７−７２９９５号公報
【特許文献３】特開２００６−２６８１６５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし，ＳＴＡの結果，クロックタイミングがセットアップタイムやホールドタイムの仕様を満たさないことが判明することがある。特に，クロックゲーティング回路とそれを制御するフリップフロップ回路間や，フリップフロップ回路とそれを制御するフリップフロップ回路間でのクロックタイミングが仕様を満たさないことが多い。その場合，設計者はＲＴＬ形式ファイルの再生成や仕様変更等の対応を行っており，作業手戻りが発生している。
【０００６】
従来の設計フローでは，セル間の配線をレイアウトするまでは配線パターンによる遅延を考慮せず，クロック遅延やクロックスキューが発生しないことを前提に設計を行っているため，設計者が上記２種類の回路間のクロックタイミングを修正する必要があることをＳＴＡ前に気付くことは難しい。
【０００７】
そこで，本発明の目的は，上記課題を解決するためのＬＳＩの設計方法を提供することとする。
【課題を解決するための手段】
【０００８】
ＬＳＩの設計方法の第１の側面によれば，
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力をイネーブル信号として供給され前記第２のクロックが供給される第１のクロックゲーティング回路とにおいて，前記第１のクロックと第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路との間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築工程と，
前記ハードウェア記述ファイルと前記制約条件ファイルについて論理合成を行うとともに，前記クリティカルパスを前記クリティカルパス以外のパスよりも優先して最適化し，ネットリストを生成する論理合成工程とを有する。
【０００９】
ＬＳＩの設計方法の第２の側面によれば，
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力をイネーブル信号として供給され前記第２のクロックを供給されるクロックゲーティング回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路との間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築工程と，
前記ハードウェア記述ファイルと前記制約条件ファイルについて論理合成を行いネットリストを生成し，前記第１のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第１の余裕度と，前記第１のクロックゲーティング回路から出力される第２のクロックを供給される第２のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第２の余裕度とを算出する論理合成工程と，
セルを機能別にグルーピングした複数のモジュールのうち，前記第１，第２の余裕度のうち余裕度が小さい第１または第２のフリップフロップ回路が属するモジュールに，前記クリティカルパスの両端の前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路とを加えた新モジュールを設定し，前記ネットリスト内の複数のセルのうち当該新モジュール内のセルを，当該新モジュール外のセルより優先して仮想チップ上に配置するセル配置工程とを有する。
【発明の効果】
【００１０】
ＬＳＩの設計方法の第１，第２の側面によれば，クロックゲーティング回路とそれを制御するフリップフロップ回路間や，フリップフロップ回路とそれを制御するフリップフロップ回路間のクリティカルパスでのクロックタイミングを改善したＬＳＩ設計を行うことができる。
【図面の簡単な説明】
【００１１】
【図１】本実施の形態におけるＬＳＩ設計フローの概略を示す図である。
【図２】本実施の形態におけるクロックゲーティング回路とそのクロックゲーティング回路にイネーブル信号を供給するフリップフロップ回路とクロック波形とを示す図である。
【図３】本実施の形態におけるフリップフロップ回路とそのフリップフロップ回路の出力が供給されクロックが異なるフリップフロップ回路とクロック波形とを示す図である。
【図４】本実施の形態におけるＬＳＩ設計装置の構成を示すブロック図である。
【図５】本実施の形態におけるＬＳＩ設計装置の処理手順を示すフローチャート図である。
【図６】本実施の形態におけるデータベース構築工程の詳細フローを示す図である。
【図７】本実施の形態におけるインスタンスリストとクロックリストを示す図である。
【図８】仮配置したクロックに同期して動作するセルを示す図である。
【図９】本実施の形態におけるクロックゲーティング回路とそのクロックゲーティング回路にイネーブル信号を供給するフリップフロップ回路を示す図である。
【図１０】本実施の形態におけるフリップフロップ回路とクロックゲーティング回路を接続するパスに優先度フラグを設定したデータベースを示す図である。
【図１１】本実施の形態におけるフリップフロップ回路と，そのフリップフロップ回路とデータパスで接続されクロックが異なるフリップフロップ回路を示す図である。
【図１２】本実施の形態におけるフリップフロップ回路と，そのフリップフロップ回路とはクロックが異なるフリップフロップ回路とを接続するパスに優先度フラグを設定したデータベースを示す図である。
【図１３】本実施の形態における論理合成工程の詳細フローを示す図である。
【図１４】本実施の形態における，論理合成後のクロックゲーティング回路とそのクロックゲーティング回路にイネーブル信号を供給するフリップフロップ回路を示す図である。
【図１５】本実施の形態における，論理合成後のフリップフロップ回路と，そのフリップフロップ回路とデータパスで接続されクロックが異なるフリップフロップ回路を示す図である。
【図１６】クリティカルパスの前段と後段のインスタンスのスラック値を登録したデータベースを示す図である。
【図１７】本実施の形態におけるセル配置工程の詳細フローを示す図である。
【図１８】本実施の形態におけるクロックツリー生成工程の詳細フローを示す図である。
【発明を実施するための形態】
【００１２】
以下，図面を用いて本発明の実施の形態について説明する。
【００１３】
（本実施の形態におけるＬＳＩ設計フロー概略）
図1は，本実施の形態におけるＬＳＩ設計フローの概略を示す図である。
【００１４】
まず，ＲＴＬ設計工程（Ｓ１１）では，設計仕様に基づきＬＳＩをＲＴＬで記述したＲＴＬ形式ファイルと，ＳＤＣフォーマットにより記述された制約条件ファイルを作成する。次のデータベース（ＤＢ）構築工程（Ｓ１２）にて，ＲＴＬ形式ファイルと制約条件ファイルをもとにして，クロックを供給されるフリップフロップ回路やクロックゲーティング回路などのセルと，クロック毎の想定遅延値と，クロックに対して入力データのタイミング余裕が少ないと想定されタイミング制約を配慮すべきパス（以下，クリティカルパスと呼ぶ。）などとを抽出または算出してデータベースへ格納し，論理合成工程（Ｓ１３）でこのデータベースとＲＴＬ形式ファイルと制約条件とを用いて論理合成し，クリティカルパスについてクリティカルパス以外のパスよりも優先して最適化を行いネットリストを生成する。そして，セル配置工程（Ｓ１４）で，生成したネットリストをもとにして，クリティカルパスの始点および終点のフリップフロップ回路やクロックゲーティング回路を，始点の前段または終点の後段のフリップフロップ回路のうちタイミング余裕が少ないフリップフロップ回路とモジュール群を形成して，そのモジュール群内のセルをモジュール群外のセルよりも優先的に仮想チップ上に配置する。配置後，クロックツリー生成工程（Ｓ１５）で，同じクロックを供給されるセル間のクロックのスキューが最小になるようにクロックツリーを仮想チップ上に生成し，さらにクリティカルパス始点と終点後段のフリップフロップ回路のうち，タイミング余裕が大きいフリップフロップ回路に接続する始点または終点のフリップフロップ回路もしくはクロックゲーティング回路のクロックツリーを変更してクロックのスキューを大きくする。その後，配線工程（Ｓ１６）で各セル間を接続する多層配線パターンを形成し，ＳＴＡ工程（Ｓ１７）で，スタティック・タイミング解析を行い，設計回路がセットアップタイムやホールドタイムなどのタイミング制約を満たしている事を確認する。
【００１５】
本実施の形態のＬＳＩ設計方法は，従来のＬＳＩ設計方法と比較した場合，データベース構築工程（Ｓ１２）が追加され，論理合成工程（Ｓ１３）とセル配置工程（Ｓ１４）とクロックツリー生成工程（Ｓ１５）において改良が加えられている。その具体的な内容については，次に説明する。
【００１６】
従来のＬＳＩ設計方法では，セル間の配線をレイアウトするまでは配線パターンによる遅延を考慮せず，クロック遅延やクロックスキューが発生しないことを前提に設計を行っている。そのため，ＳＴＡの結果，主にクロックゲーティング回路とそれを制御するフリップフロップ回路間や，フリップフロップ回路とそれを制御するフリップフロップ回路間でのクロックタイミングが，セットアップタイムやホールドタイムの仕様を満たさないことが多く，その場合，設計者はＲＴＬ形式ファイルの再生成や仕様変更等の対応を行い，作業手戻りが発生していた。
【００１７】
図２は，本実施の形態におけるクロックゲーティング回路とそのクロックゲーティング回路にイネーブル信号を供給するフリップフロップ回路とクロック波形とを示す図である。図２に示す回路は，クロック発生源２０１，クロック線の分岐点２１５，クロックバッファ２０２，バッファをピラミッド状に配置したクロックツリー２０３，２０９，クロックライン２０４，クロックツリー２０３からクロックを供給されるクロックゲーティング回路２０５，クロックゲーティング回路２０５の出力線２０６，分周器２０８，クロックツリー２０９からクロックライン２１０を介して分周されたクロックを供給されるフリップフロップ回路２１１，フリップフロップ回路２１１の入力データ信号線２１２，フリップフロップ回路の出力データ信号線２１３，組合せ回路２１４，クロックゲーティング回路のイネーブル信号線２０７，を有する。クロックツリーのサイズはクロックを供給されるセルの数と位置に応じて決まり，図２ではクロックツリー２０９の方が２０３よりもツリーサイズが大きいとする。
【００１８】
クロック発生源２０１から高周波クロックＣＬＫ１が出力されており，高周波クロックＣＬＫ１はクロックツリー２０３，クロックライン２０４を介してクロックゲーティング回路２０５に供給されている。また，分岐点２１５で分かれた高周波クロックＣＬＫ１は分周器２０８により低周波クロックＣＬＫ２に分周され，低周波クロックＣＬＫ２はクロックツリー２０９，クロックライン２１０を介してフリップフロップ回路２１１に供給されている。さらにフリップフロップ回路２１１の出力信号は，出力データ信号線２１３，組合せ回路２１４，イネーブル信号線２０７を介してクロックゲーティング回路２０５のイネーブル端子ＥＮに供給されている。つまり，クロックゲーティング回路２０５は低周波クロックＣＬＫ２のタイミングで生成されるイネーブル信号ＥＮ１により高周波クロックＣＬＫ１の通過・非通過を制御する。
【００１９】
ここで例として，クロックツリー２０３内のピラミッド頂点における高周波クロックＣＬＫ１の波形をＣＬＫ１（０），クロックゲーティング回路２０５のクロック端子に供給される高周波クロックＣＬＫ１の波形をＣＬＫ１（１），クロックツリー２０９内のピラミッド頂点における低周波クロックＣＬＫ２の波形をＣＬＫ２（０），フリップフロップ回路２１１のクロック端子に供給される低周波クロックＣＬＫ２の波形をＣＬＫ２（１），データ入力端子Ｄ＿ＩＮに供給されるデータ信号をＤ＿ＩN２，出力端子Ｄ＿ＯＵＴから出力されるＤ＿ＯＵＴ２，クロックゲーティング回路２０５のイネーブル端子ＥＮに供給されるイネーブル信号をＥＮ１とすると，それぞれの波形は図２の下段に示すようになる。
【００２０】
クロックツリー２０３，２０９ではツリーのサイズに応じてクロック遅延が生じるため，ＣＬＫ１（０）とＣＬＫ１（１）ではクロック遅延Ｄ１が発生しており，ＣＬＫ２（０）とＣＬＫ２（１）ではクロック遅延Ｄ２が発生している。また，クロックツリー２０９の方が２０３よりもサイズが大きいため，Ｄ２＞Ｄ１となり，その差であるクロックのスキューＤ３が生じている。さらに，フリップフロップ回路２１１の出力信号Ｄ＿ＩＮ２と，クロックゲーティング回路２０５のイネーブル信号ＥＮ１との間には，パス遅延Ｄ４が生じている。クロックゲーティング回路２０５がイネーブル信号ＥＮ１によりクロックＣＬＫ（１）を精度良くオン・オフするためには，ＣＬＫ１（１）の立ち上がりタイミングとＥＮ１の立ち上がりタイミングの差であるＤ５が，クロックゲーティング回路２０５のセットアップタイム条件を満たす必要がある。つまり，設計を行う際には，クロックゲーティング回路２０５とフリップフロップ回路１１とのクロックのスキューＤ３と，出力データ信号線２１３，組合せ回路２１４，イネーブル信号線２０７におけるパス遅延Ｄ４を考慮する必要がある。
【００２１】
図３は，本実施の形態におけるフリップフロップ回路とそのフリップフロップ回路の出力が供給されクロックが異なるフリップフロップ回路とクロック波形とを示す図である。図３に示す回路は，クロック発生源３０１，クロック線の分岐点３１５，クロックバッファ３０２，バッファをピラミッド状に配置したクロックツリー３０３，３０９，クロックライン３０４，クロックツリー３０３からクロックを供給されるフリップフロップ回路３０５，クロックゲーティング回路３０５の入力データ信号線３０６，フリップフロップ回路３０５の出力データ信号線３０７，組合せ回路３１４，フリップフロップ回路３１１の入力データ信号線３１２，分周器３０８，クロックツリー３０９から分周されたクロックライン３１０を介してクロックを供給されるフリップフロップ回路３１１，フリップフロップ回路３１１の出力データ信号線３１３，を有する。図３ではクロックツリー３０９の方が３０３よりもツリーサイズが大きいとする。
【００２２】
クロック発生源３０１から高周波クロックＣＬＫ１が出力されており，高周波クロックＣＬＫ１はクロックツリー３０３，クロックライン３０４を介してフリップフロップ回路３０５に供給されている。また，分岐点３１５で分かれた高周波クロックＣＬＫ１は分周器３０８により低周波クロックＣＬＫ２に分周され，低周波クロックＣＬＫ２はクロックツリー３０９，クロックライン３１０を介してフリップフロップ回路３１１に供給されている。さらにフリップフロップ回路３０５の出力は，出力データ信号線３０７，組合せ回路３１４，入力データ信号線３１２を介してフリップフロップ回路３１１に供給されている。つまり，フリップフロップ回路３１１は，高周波クロックＣＬＫ１で処理されたフリップフロップ回路３０５の処理結果を，低周波クロックＣＬＫ２のタイミングで取り込んでいる。
【００２３】
ここで例として，クロックツリー３０３内のピラミッド頂点における高周波クロックＣＬＫ１の波形をＣＬＫ1（０），フリップフロップ回路３０５のクロック端子に供給される高周波クロックＣＬＫ１の波形をＣＬＫ１（１），データ入力端子Ｄ＿ＩＮに供給されるデータ信号をＤ＿ＩＮ１，出力端子Ｄ＿ＯＵＴから出力されるデータ信号をＤ＿ＯＵＴ１，クロックツリー３０９内のピラミッド頂点における低周波クロックＣＬＫ２の波形をＣＬＫ２（０），フリップフロップ回路３１１のクロック端子に供給されるクロックをＣＬＫ２（１），データ入力端子Ｄ＿ＩＮのデータ信号をＤ＿ＩＮ２，出力端子Ｄ＿ＯＵＴから出力されるデータ信号をＤ＿ＯＵＴ２とすると，それぞれの波形は図３の下段に示すようになる。
【００２４】
図３下段に示すように，ＣＬＫ１（０）とＣＬＫ１（１）の間にはクロックツリー３０３によるクロック遅延Ｄ１が生じており，ＣＬＫ２（０）とＣＬＫ２（１）の間にもクロックツリー３１１によるクロック遅延Ｄ２が生じている。また，クロックツリー３０９の方が３０３よりもツリーサイズが大きいため，Ｄ２＞Ｄ１となり，その差であるクロックのスキューＤ３が生じている。さらに，データ信号Ｄ＿ＩＮ２はＤ＿ＯＵＴ１が出力データ信号線３０７，組合せ回路３１４，入力データ信号線３１２を介して伝送してきた信号であるため，パス遅延Ｄ４が生じている。フリップフロップ回路３１１から所望の出力を得るためには，ＣＬＫ２（１）の立ち上がりタイミングとデータ信号Ｄ＿ＩＮ２の立ち上がりタイミングの差であるＤ５が，フリップフロップ回路３１１のセットアップタイム条件を満たす必要がある。つまり，設計を行う際には，フリップフロップ回路３０５と３１１とのクロックのスキューＤ３と，出力データ信号線３０７，組合せ回路３１４，入力データ信号線３１２におけるパス遅延Ｄ４を考慮する必要がある。
【００２５】
（ＬＳＩ設計装置および処理手順）
次に，図２，図３に示したクロックのスキューとパス遅延を考慮して設計を図１の設計フローのとおりに行うためのＬＳＩ設計装置について説明する。図４は，本実施の形態におけるＬＳＩ設計装置の構成を示すブロック図である。
【００２６】
図４において，ＬＳＩ設計装置は，ＬＳＩ設計装置全体の制御を行うＣＰＵ４０１と，ＣＰＵ４０１の処理時にメモリとして使用されるＲＡＭ４０２と，プログラム群としてデータベース構築ツール４０３と，論理合成ツール４０４と，配置ツール４０５と，クロックツリー生成ツール４０６と，配線ツール４０７と，ＳＴＡツール４０８と，ＬＳＩをＲＴＬで記述されたＲＴＬ形式ファイルであるＲＴＬデータ４０９とを有し，さらに，ＳＤＣフォーマットにより記述された制約条件ファイルであるＳＤＣデータ４１０と，ＲＴＬデータ４０９とＳＤＣデータ４１０にもとにしてクロックを供給されるセルやクロックごとの想定遅延値，クリティカルパスなどを格納するデータベース４１１と，論理合成工程で生成されるネットリストを格納するネットリスト４１２と，セル配置工程やクロックツリー生成工程，配線工程で生成されたデータを格納する配置データ４１３と，スタティック・タイミング解析結果を格納するＳＴＡデータ４１４と，バス４１５とを有する。各構成部はバス４１５によってそれぞれ接続されていて，各プログラムはＣＰＵ４０１により実行される。
【００２７】
図５は，本実施の形態におけるＬＳＩ設計装置の処理手順を示すフローチャート図である。図４とあわせて各手順について以下説明する。
【００２８】
データベース構築ツール４０３は，ＲＴＬ設計手順（Ｓ２１）で生成されたＲＴＬデータ４０９とＳＤＣデータ４１０を読み出し，クロックを供給されるセルやクロック周波数を抽出し，同一周波数のクロック毎のクロックツリーでの想定遅延値を算出しクリティカルパスを求めて，データベース４１１へ抽出データ，想定遅延値，クリティカルパスのデータを出力する（Ｓ２２）。
【００２９】
次に，論理合成ツール４０４は，ＲＴＬデータ４０９，ＳＤＣデータ４１０，データベース４１１を読み出して，ゲートレベルの論理回路データであるネットリストを生成し，さらにクリティカルパス以外のパスよりもクリティカルパスを優先してそのネットリストの最適化を行いネットリスト４１２へ出力する（Ｓ２３）。
【００３０】
そして，配置ツール４０５は，データベース４１１からクリティカルパスを，ネットリスト４１２からネットリストをそれぞれ読み出す。さらに，配置ツール４０５は，クリティカルパスの始点および終点のフリップフロップ回路やクロックゲーティング回路を，始点の前段または終点の後段のフリップフロップ回路のうちタイミング余裕が少ない方のフリップフロップ回路と共にモジュール群を形成する。配置ツール４０５は，それにより，そのモジュール群内のセルを，モジュール群外のセルよりも優先して近接するように仮想チップ上に配置してセル配置データを生成する（Ｓ２４）。
【００３１】
次に，クロックツリー生成ツール４０６は，データベース４１１からクリティカルパスを，配置データ４１３からセル配置データをそれぞれ読み出し，同じクロックを供給されるセル間のクロックのスキューが最小になるようにクロックツリーをセル配置データの仮想チップ上に配置してクロックツリーデータを生成する。さらに，クリティカルパスの始点と終点後段のフリップフロップ回路のうち，タイミング余裕が大きい方のフリップフロップ回路に接続する始点または終点のフリップフロップ回路もしくはクロックゲーティング回路のクロックのクロックツリーを変更して，そのクロックのスキューを他のクロックより大きくし，変更したクロックツリーデータを配置データ４１３へ出力する（Ｓ２５）。
【００３２】
配線ツール４０７は，配置データ４１３からセル配置データとクロックツリーデータとを読み出し，セル間に多層配線パターンを形成し，配置データ４１３へ出力する（Ｓ２６）。
【００３３】
最後にＳＴＡツール４０８は配置データ４１３から配線データ（セル配置データ，クロックツリーデータ，多層配線パターン）を読み出して，タイミング解析処理を行い，解析結果をＳＴＡデータ４１４へ出力する（Ｓ２７）。
【００３４】
（ＬＳＩ設計方法）
［データベース構築工程］
次に，図１に示したＬＳＩ設計処理の各工程について具体例を挙げて詳細に説明する。図６は，本実施の形態におけるデータベース構築工程の詳細フローを示す図である。図７は，本実施の形態におけるインスタンスリストとクロックリストを示す図である。
【００３５】
初めに，ＲＴＬ形式ファイルとクロックの周波数などを規定する制約条件を記載したＳＤＣファイルとをもとに，フリップフロップ回路やクロックゲーティング回路，ＲＡＭ等のクロックに同期して動作するインスタンス（セル，ＲＴＬで定義されるレジスタ）を抽出し（Ｓ１２０２），抽出したセルとクロックの一覧を図７の上段に示すようなインスタンスリストとしてデータベースへ登録する（Ｓ１２０３）。図７のインスタンスリストには，クロックＰＬＬ＿ＣＬＫを供給されるフリップフロップ回路ＡＡ/ＦＦと，クロックＣＬＫ１を供給されるクロックゲーティング回路ＢＢ/ＧＣＢと，クロックＣＬＫ２を供給されるフリップフロップ回路ＣＣＣ/ＦＦ１が登録されている。
【００３６】
次に，工程Ｓ１２０２で抽出したセルを，例えば，図８のように仮配置する（Ｓ１２０４）。図８は，仮配置したクロックに同期して動作するセルを示す図である。図８では，クロックツリーのバッファ８０１，フリップフロップ回路８０２，８０５〜８０７，８０９，８１０とクロックゲーティング回路８０４，分周器８０８，ＲＡＭ８１１とをクロックごとに仮配置している。クロック発生源８０１から各セルのクロック端子をクロックラインで接続している。フリップフロップ回路８０２はクロック発生源８０１から直接クロックＰＬＬ＿ＣＬＫを供給されている。また，フリップフロップ回路８０５〜８０７とクロックゲーティング回路８０４はクロックＣＬＫ１が供給されている。フリップフロップ回路８０９，８１０とＲＡＭ８１１は，分周器８０８を介してクロックＣＬＫ２が供給されている。
【００３７】
図６にもどり，工程Ｓ１２０４の後，Ｓ１２０４でセルの仮配置をもとにして，クロック毎にクロックラインの総配線長を求め，その総配線長より想定遅延値を見積もり，図７の下段に示すようにクロック毎（ＰＬＬ＿ＣＬＫ，ＣＬＫ１，ＣＬＫ２）のクロック周期と総配線長と想定遅延値とをまとめたクロックリストをデータベースに登録する（Ｓ１２０５）。
【００３８】
この想定遅延値は，総配線長をもとにクロックツリーのサイズを想定し，そのクロックツリーのサイズから見積もったクロック遅延値のことであり，総配線長に比例する。クロックツリーで生成されるクロックは，クロックツリーのサイズに応じて，クロック源のクロックに対しある遅延を有する。図２，３でのクロックＣＬＫ１（１）がクロックＣＬＫ１（０）に対して遅延Ｄ１を有することと同じである。本来，クロックツリーのサイズは，クロックが供給されるセルの数とその位置及びクロック配線に応じて決まるので，クロックの遅延量Ｄ１は，全てレイアウトされなければ判明しない。しかし，本実施の形態ではＲＴＬファイルとＳＤＣファイルの情報から最も蓋然性の高い遅延量として仮配置したセルへのクロックラインの総配線長に基づく見積値を使用する。この想定遅延値を用いることでタイミングエラーが生じる可能性の高いクリティカルパスを後述するように見出し，論理合成等の処理に改良を加えることが出来る。
【００３９】
次に，ＲＴＬ形式ファイルとＳＤＣファイルをもとにして，図９に示すようなクロックゲーティング回路９０３と，そのクロックゲーティング回路９０３にイネーブル信号ＥＮ１を出力するフリップフロップ回路９０１とを把握し（Ｓ１２０６），Ｓ１２０６で把握したクロックゲーティング回路９０３とフリップフロップ回路９０１のクロック周波数ＣＬＫ１，ＣＬＫ２とＣＬＫ１，ＣＬＫ２の想定遅延値とをデータベースより抽出する（Ｓ１２０７）。
【００４０】
図９は，本実施の形態におけるクロックゲーティング回路とそのクロックゲーティング回路にイネーブル信号を供給するフリップフロップ回路を示す図である。図９には，低周波クロックＣＬＫ２を供給されているフリップフロップ回路９０１と，フリップフロップ回路９０１の出力信号Ｄ＿ＯＵＴ２を供給される組合せ回路９０２と，組合せ回路９０２の出力信号をイネーブル信号ＥＮ１とし高周波クロックＣＬＫ１を供給されるクロックゲーティング回路９０３と，クロックゲーティング回路９０３がイネーブル信号ＥＮ１でゲーティングしたクロックＣＬＫ１が供給されるフリップフロップ回路９０４が示されている。
【００４１】
工程Ｓ１２０７の次に，工程Ｓ１２０７で抽出したクロックゲーティング回路９０３に入力するクロックＣＬＫ１の想定遅延値とフリップフロップ回路９０１に入力するクロックＣＬＫ２の想定遅延値の差をもとめ，クロックゲーティング回路９０３のクロックＣＬＫ１の周期と比較を行う（Ｓ１２０８）。想定遅延値差がクロックＣＬＫ１の周期を基準として比較的大きい場合は，フリップフロップ回路９０１とクロックゲーティング回路９０３を接続するパスＣＰ９０５に，クリティカルパスとして優先度フラグ「高」を設定し，データベースに保存する（Ｓ１２１０）。また，反対に想定遅延値差がクロックＣＬＫ１の周期を基準として比較的小さい場合は，フリップフロップ回路９０１とクロックゲーティング回路９０３を接続するパスＣＰ９０５に，優先度フラグ「低」を設定し，データベースに保存する（Ｓ１２１１）。
【００４２】
図１０は，本実施の形態におけるフリップフロップ回路とクロックゲーティング回路を接続するパスに優先度フラグを設定したデータベースを示す図である。図１０最下段の「ゲーティングセル」欄に，フリップフロップ回路９０１とクロックゲーティング回路９０３を接続するパスＣＰ９０５に優先度「高」を設定している。なお，図１０には図７でデータベースに登録したインスタンスリストとクロックリストも併せて記載している。
【００４３】
なお，工程Ｓ１２０８〜Ｓ１２１１は，工程Ｓ１２０６で抽出した全てのクロックゲーティング回路とフリップフロップ回路の組合せに対して行う。
【００４４】
次に，ＲＴＬ形式ファイルとＳＤＣファイルをもとにして，図１１に示すようなフリップフロップ回路１１０１と，そのフリップフロップ回路１１０１とデータパスで接続されクロックが異なるフリップフロップ回路１１０３とを把握し（Ｓ１２１２），工程Ｓ１２１２で把握した２つのフリップフロップ回路１１０１，１１０３のクロック周波数ＣＬＫ３，ＣＬＫ４とＣＬＫ３，ＣＬＫ４の想定遅延値とをデータベースより抽出する（Ｓ１２１３）。
【００４５】
図１１は，本実施の形態におけるフリップフロップ回路と，そのフリップフロップ回路とデータパスで接続されクロックが異なるフリップフロップ回路を示す図である。図１１には，高周波クロックＣＬＫ３を供給されるフリップフロップ回路１１０１と，フリップフロップ回路１１０１の出力Ｄ＿ＯＵＴ３を供給される組合せ回路１１０２と，組合せ回路１１０２が出力したデータ入力信号Ｄ＿ＩＮ４と低周波クロックＣＬＫ４とが供給されるフリップフロップ回路１１０３が示されている。
【００４６】
工程Ｓ１２１３の次に，工程Ｓ１２１３で抽出したフリップフロップ回路１１０１に入力するクロックＣＬＫ３の想定遅延値とフリップフロップ回路１１０３に入力するクロックＣＬＫ４の想定遅延値の差をもとめ，フリップフロップ回路１１０３のクロックＣＬＫ４の周期と比較を行う（Ｓ１２１４）。想定遅延値差がクロックＣＬＫ４の周期を基準として比較的大きい場合は，フリップフロップ回路１１０１とフリップフロップ回路９０３を接続するパスＣＰ１１０５に，クリティカルパスとして優先度フラグ「高」を設定し，データベースに保存する（Ｓ１２１５）。また，反対に想定遅延値差がクロックＣＬＫ４の周期を基準として比較的小さい場合は，フリップフロップ回路１１０１とフリップフロップ回路１１０３を接続するパスＣＰ１１０５に，優先度フラグ「低」を設定し，データベースに保存する（Ｓ１２１６）。
【００４７】
図１２は，本実施の形態におけるフリップフロップ回路と，そのフリップフロップ回路とはクロックが異なるフリップフロップ回路とを接続するパスに優先度フラグを設定したデータベースを示す図である。図１２最下段の「異クロック間」欄に，フリップフロップ回路１１０１とフリップフロップ回路１１０３を接続するパスＣＰ１１０５に優先度「高」を設定している。なお，図１２には図７，１０でデータベースに登録したインスタンスリスト，クロックリスト，ゲーティングセルも併せて記載している。
【００４８】
なお，工程Ｓ１２１４〜Ｓ１２１７は，工程Ｓ１２１２で抽出した全てのフリップフロップ回路の組合せに対して行う。
【００４９】
このように工程Ｓ１２０８〜Ｓ１２１１，Ｓ１２１４〜Ｓ１２１７で，想定遅延値差を基準値と比較して，クロックの入力に対してする入力データのタイミング余裕が少ないと想定されるパスに，クリティカルパスとして優先度フラグ「高」を設定したのは，論理合成工程（Ｓ１３）やクロックツリー生成工程（Ｓ１４）において，優先度フラグ「高」のパスをそれ以外のパスよりも優先してクロック遅延やクロックのスキューを考慮して最適化を行うためである。詳細内容については，論理合成工程（Ｓ１３）とセル配置工程（Ｓ１４），クロックツリー生成工程（Ｓ１５）の説明にてそれぞれ記載する。
【００５０】
以上より，工程Ｓ１２０１〜Ｓ１２１７の終了をもって，データベース構築工程が完了する（Ｓ１２１８）。
【００５１】
［論理合成工程］
続いて，論理合成工程Ｓ１３について詳細説明をする。図１３は，本実施の形態における論理合成工程の詳細フローを示す図である。
【００５２】
まず，ＲＴＬ形式ファイルをもとにＲＴＬレベルで記述された機能記述を論理合成によりゲートレベルに変換し，テクノロジマッピングにより指定したテクノロジ（製造工場のテクノロジ）に基づいたネットリストに変換する（Ｓ１３０２）。そして，各クロックツリーにおいてクロック遅延が発生していない，つまりクロック遅延値＝０という条件のもと，クロック毎にデータパスのタイミング解析を行い，その解析結果に基づいて，データパス上の組合せ回路に対して論理段数を変更してファンアウト数を削減したり，インバータの段数を減らすなどの論理変換を行う。さらに，後続工程になるほど回路エリアの縮小が難しくなるため，面積の小さいセルを選択してゲートサイズの縮小を行う（Ｓ１３０３）。論理合成工程では，ネットリストから例えば各セルのファンアウト数が判明するので，少なくともそれに基づいて出力の負荷を見積もることで，データの一定の遅延時間を知ることができる。この遅延時間にしたがって上記のタイミング解析が行われる。
【００５３】
ここで，図１４は，本実施の形態における，論理合成後のクロックゲーティング回路とそのクロックゲーティング回路にイネーブル信号を供給するフリップフロップ回路を示す図である。図１４の上段には，フリップフロップ回路１４０１と，フリップフロップ回路１４０１の出力信号を供給される組合せ回路１４０２と，組合せ回路１４０２の出力信号を入力端子に供給されるフリップフロップ回路１４０３と，パスＣＰ１４０８と，フリップフロップ回路１４０３の出力信号を供給される組合せ回路１４０４と，組合せ回路１４０４の出力信号をイネーブル信号として供給されるクロックゲーティング回路１４０５と，クロックゲーティング回路がゲーティングしたクロックＣＬＫ１が供給されるフリップフロップ回路１４０７，１４１０とが示されている。フリップフロップ回路１４０３は低周波クロックＣＬＫ２を，クロックゲーティング回路１４０５は，高周波クロックＣＬＫ１を供給されており，この２つの回路は組合せ回路１４０４を含むパスＣＰ１４０８を介して接続されている。このパスＣＰ１４０８は，データベース構築工程（Ｓ１２）の工程Ｓ１２１０にてクリティカルパスとして優先度フラグ「高」を設定されている。
【００５４】
工程Ｓ１３０３後，データベースより，クリティカルパスＣＰ１４０８の始点のフリップフロップ回路１４０３と終点のクロックゲーティング回路１４０５を把握し，それぞれのクロックＣＬＫ２，ＣＬＫ１の想定遅延値を抽出する（Ｓ１３０４）。
【００５５】
そして，工程Ｓ１３０４で抽出したクロックＣＬＫ１，ＣＬＫ２の想定遅延値の差を算出し，論理合成ツールを使用して，その求めた想定遅延値差を不確かさ（ｕｎｃｅｒｔａｉｎｔｙ）として，クロックゲーティング回路１４０５のクロック入力端子に設定する（Ｓ１３０５）。
【００５６】
なお，工程Ｓ１３０４〜Ｓ１３０５は，フリップフロップ回路１４０３，クロックゲーティング回路１４０５に該当する全てのクロックゲーティング回路とフリップフロップ回路の組合せに対して行う。
【００５７】
図１５は，本実施の形態における，論理合成後のフリップフロップ回路と，そのフリップフロップ回路とデータパスで接続されクロックが異なるフリップフロップ回路を示す図である。図１５の上段には，フリップフロップ回路１５０１と，フリップフロップ回路１５０１の出力信号を供給される組合せ回路１５０２と，組合せ回路１５０２の出力信号を入力端子に供給されるフリップフロップ回路１５０３と，フリップフロップ回路１５０３の出力信号を供給される組合せ回路１５０４を含むパスＣＰ１５０８と，組合せ回路１５０４の出力信号を入力端子に供給されるフリップフロップ回路１５０５と，フリップフロップ回路１５０５の出力信号を供給される組合せ回路１５０６と，組合せ回路１５０６の出力信号を入力端子に供給されるフリップフロップ回路１５０７と，フリップフロップ回路１５０７の出力信号を供給される組合せ回路１５１１と，組合せ回路１５１１の出力信号を入力端子に供給されるフリップフロップ回路１５１０とが示されている。フリップフロップ回路１５０１，１５０３は高周波クロックＣＬＫ３を，フリップフロップ回路１５０５，１５０７，１５１０は低周波クロックＣＬＫ４を供給されている。また，パスＣＰ１５０８は，データベース構築工程（Ｓ１２）の工程Ｓ１２１０にてクリティカルパスとして優先度フラグ「高」を設定されている。
【００５８】
工程Ｓ１３０５後，データベースより，クリティカルパス１５０８の始点のフリップフロップ回路１５０３と終点のフリップフロップ回路１５０５とを把握し，それぞれのクロックＣＬＫ３，ＣＬＫ４の想定遅延値を抽出する（Ｓ１３０６）。
【００５９】
工程Ｓ１３０６で抽出したクロックＣＬＫ３，ＣＬＫ４の想定遅延値の差を算出し，論理合成ツールを使用して，その求めた想定遅延値差を不確かさとして，フリップフロップ回路１５０５のクロック端子に設定する（Ｓ１３０７）。
【００６０】
なお，工程Ｓ１３０６〜Ｓ１３０７は，フリップフロップ回路１５０３，フリップフロップ回路１５０５に該当する全てのフリップフロップ回路の組合せに対して行う。
【００６１】
このように工程Ｓ１３０４〜Ｓ１３０７において，クリティカルパスにより接続された２つの回路（フリップフロップ回路１４０３とクロックゲーティング回路１４０５，フリップフロップ回路１５０３とフリップフロップ回路１５０５）の２つのクロックＣＬＫ３，ＣＬＫ４のスキューの規模を，クリティカルパスの終点の回路（クロックゲーティング回路１４０５，フリップフロップ回路１５０５）のクロック入力端子に設定した後，論理合成ツールを使用してクリティカルパスの論理最適化処理を行う（Ｓ１３０８）。すなわち，クロックのスキューを考慮した論理合成工程内の最適化処理を行う。この最適化処理では，クリティカルパスの遅延を減らすために例えば，多段論理において段数を変更してファンアウト数を減らしたり，３段のインバータで構成されている構造を１段のインバータに簡単化したり，冗長論理を削除するなどの処理を行う。また，すべてのフリップフロップ回路およびクロックゲーティング回路のクロック入力端子に不確かさを設定してクリティカルパスの論理最適化処理を論理合成ツールで行うと，処理が複雑になり破綻してしまい，最適化されたネットリストを出力できないことがある。そこで，本実施の形態では，クリティカルパスの終点の回路のクロック入力端子にのみ不確かさを設定する。このように，最適化すべきクリティカルパスに限って，不確かさというより厳しい条件を課して最適化処理を行うことで，論理合成ツールが，他のパスを犠牲にしてもその条件を満たすようにクリティカルパスを最適化することができる。
【００６２】
次に，論理最適化処理結果をもとにして，図１４のクリティカルパスＣＰ１４０８の前段のフリップフロップ回路のスラック値，すなわち始点のフリップフロップ回路１４０３のスラック値と，後段のフリップフロップ回路のスラック値，すなわち終点のクロックゲーティング回路１４０５でゲーティングされたクロックＣＬＫ１を供給されるフリップフロップ回路１４０７のスラック値とをそれぞれ確認する。また，同様に，図１５のクリティカルパスＣＰ１５０８の前段のフリップフロップ回路のスラック値，すなわち始点のフリップフロップ回路１５０３のスラック値と，後段のフリップフロップ回路のスラック値，すなわち終点のフリップフロップ回路１５０５の出力を入力データ信号として供給されるフリップフロップ回路１５０７のスラック値とをそれぞれ確認する（Ｓ１３０９）。ここでのスラック値の確認は，工程Ｓ１３０３で説明したのと同様である。
【００６３】
ここで，本実施の形態におけるスラック値とは，図１４，１５の下段に示すようにクロックのセットアップタイムに対する入力信号の立ち上がりタイミングの余裕時間Ｄ３１，Ｄ３４，Ｄ４１，Ｄ４４を表す。
【００６４】
図１４の下段には，フリップフロップ回路１４０３，１４０７の入力波形が示されている。フリップフロップ回路１４０３には入力信号Ｄ＿ＩＮ２とクロックＣＬＫ２が，フリップフロップ回路１４０７には入力信号Ｄ＿ＩＮ１とクロックＣＬＫ１が，図１４の波形で入力されているものとする。また，クロックＣＬＫ１，ＣＬＫ２の立ち上がり前のＤ３２，Ｄ３５の時間をセットアップタイム，立ち上がり後のＤ３３，Ｄ３６の時間をホールドタイムとする。このとき，入力信号Ｄ＿ＩＮ２，Ｄ＿ＩＮ１は，セットアップタイムよりも早いタイミングで立ち上がる必要があるが，入力信号Ｄ＿ＩＮ２，Ｄ＿ＩＮ１の立ち上がりタイミングのセットアップタイムまでの余裕値Ｄ３１，Ｄ３４をスラック値としている。
【００６５】
図１５においても図１４と同様である。図１５の下段には，フリップフロップ回路１５０３，１５０７の入力波形が示されている。フリップフロップ回路１５０３には入力信号Ｄ＿ＩＮ３とクロックＣＬＫ３が，フリップフロップ回路１５０７には入力信号Ｄ＿ＩＮ４とクロックＣＬＫ４が，図１５の波形で入力されているものとする。また，クロックＣＬＫ３，ＣＬＫ４の立ち上がり前のＤ４２，Ｄ４５の時間をセットアップタイム，立ち上がり後のＤ４３，Ｄ４６の時間をはホールドタイムとする。このとき，入力信号Ｄ＿ＩＮ３の立ち上がりタイミングのセットアップタイムまでの余裕値Ｄ４１と，入力信号Ｄ＿ＩＮ４の立ち上がりタイミングのセットアップタイムまでの余裕値Ｄ４４をスラック値としている。
【００６６】
図１３にもどり，工程Ｓ１３０９でスラック値Ｄ３１，Ｄ３４，Ｄ４１，Ｄ４４を確認し，工程Ｓ１３０８の最適化処理実施前よりもスラック値が改善されていない場合は，該当のクリティカルパスの終点のクロックゲーティング回路，またはフリップフロップ回路の不確かさの値を大きくし（Ｓ１３１０），再度，工程Ｓ１３０８の論理最適化を実施する。このように，スラック値が改善されていないクリティカルパスの終点の不確かさを大きくすることにより，前回よりも当該クリティカルパスの最適化の優先度をあげ，論理合成ツールによって他のパスを犠牲にしてでも優先的に最適化処理が行われ，スラック値がより改善される。スラック値が改善されている場合は，図１６に示すように，クリティカルパスの前段と後段のインスタンス名称とスラック値をデータベースに保存する（Ｓ１３１１）。
【００６７】
図１６は，クリティカルパスの前段と後段のインスタンスのスラック値を登録したデータベースを示す図である。図１６上段には，図１２に示したインスタンスリスト，クロックリスト，「ゲーティングセル」欄１６０１，「異クロック間」欄１６０２を記載している。図１６の下段の「前段のスラック情報」欄１６０３に，クリティカルパスの始点のインスタンスと同じクロックを供給され，その始点のインスタンスとパスを介して接続するインスタンス名称と，クロック名称と，スラック値と，クリティカルパスの始点の名称と，クリティカルパスの始点終点の組合せ分類（始点終点ともにフリップフロップ回路であれば「異クロック」，始点がフリップフロップ回路で終点がクロックゲーティング回路であれば「ゲーティング」とする。）とが記載されている。また，「後段のスラック情報」欄１６０４には，クリティカルパスの終点のインスタンスと同じクロックを供給され，その終点のインスタンスとパスを介して接続するインスタンス名称と，クロック名称と，スラック値と，クリティカルパスの終点のインスタンス名称と，クリティカルパスの始点終点の組合せ分類とが記載されている。
【００６８】
工程Ｓ１３１１終了後，工程Ｓ１３０８で論理最適化されたネットリストを出力（Ｓ１３１２）し，論理合成工程は終了する（Ｓ１３１３）。
【００６９】
このように工程Ｓ１３０４〜Ｓ１３０８でクロックのスキューを設定して最適化処理を行うことで，従来の論理合成よりもクリティカルパスのタイミングを改善したネットリストを生成することができる。また，工程Ｓ１３１１でデータベースに保存したクリティカルパスの前段のスラック値と後段のスラック値は，後述するセル配置工程（Ｓ１４）やクロックツリー生成工程（Ｓ１５）にてクリティカルパスのタイミング改善に活用することができる。
【００７０】
［セル配置工程］
次にセル配置工程Ｓ１４について詳細説明をする。図１７は，本実施の形態におけるセル配置工程の詳細フローを示す図である。従来のセル配置工程では，セルなどのインスタンスを機能毎にグルーピングした複数のモジュール毎に近接してインスタンスを仮想チップ上に配置していた。しかし，本実施の形態におけるセル配置工程では，インスタンスを機能毎にグルーピングして仮想チップ上に配置するだけでなく，さらにクリティカルパスの前段と後段のスラック値を考慮して従来と異なる新たなモジュールを設定し，そのモジュール毎に近接してインスタンスを配置する。
【００７１】
まず，論理合成工程（Ｓ１３）で生成したネットリストから，セルなどのインスタンスを機能毎にグルーピングしたモジュールとそのモジュールに含まれるインスタンスの情報を抽出し（Ｓ１４０２），データベースからクリティカルパスで接続されたフリップフロップ回路とクロックゲーティング回路の情報を抽出する（Ｓ１４０３）。そして，工程Ｓ１４０２で抽出したモジュールとインスタンスの情報をもとにして，クリティカルパスの始点のフリップフロップ回路と，終点のクロックゲーティング回路とが，同じモジュール内に含まれているか判断する（Ｓ１４０４）。
【００７２】
工程Ｓ１４０４の結果，クリティカルパスの始点のフリップフロップ回路と，終点のクロックゲーティング回路とが同じモジュールには含まれていない場合は，クリティカルパスの前段と後段のフリップフロップ回路のスラック値をデータベースより抽出し，いずれかのスラック値のみが余裕があるか判断する。つまり，図１４では，論理合成工程（Ｓ１３）で生成したフリップフロップ回路１４０３，１４０７のスラック値Ｄ３１，Ｄ３４をデータベースより抽出し，いずれかのスラック値のみが余裕があるか判断する。（Ｓ１４０５）。
【００７３】
そして，いずれかのスラック値のみが余裕がある場合は，余裕が無いスラック値のフリップフロップ回路が属するモジュールに，フリップフロップ回路１４０３とクロックゲーティング回路１４０５とを加えた新モジュールを設定する。そして，この新モジュール内のセルを新モジュール外のセルより優先して，仮想チップ上にセル間を近づけて配置する（Ｓ１４０６）。例えば，図１４において，フリップフロップ回路１４０３のスラック値Ｄ３１に余裕があるが，フリップフロップ回路１４０７のスラック値Ｄ３４には余裕が無い場合，フリップフロップ回路１４０３と組合せ回路１４０４を，クロックゲーティング回路１４０５とフリップフロップ回路１４０７，１４１０を含む，クロックＣＬＫ１で制御されるセル群に加えて，新モジュール１４０９を設定する。そして，その新モジュール１４０９外のセル（この場合フリップフロップ回路１４０１と組合せ回路１４０２）よりも新モジュール１４０９内のセルを優先して，相互に近づけて密集させて配置することで，セル配置工程でクリティカルパスＣＰ１４０８のパス遅延が拡大しないようにする。一方，フリップフロップ回路１４０３のスラック値Ｄ３１は余裕があるため，フリップフロップ回路１４０１と組合せ回路１４０２は，フリップフロップ回路１４０３のセットアップタイムに対する余裕の範囲内で，新モジュール１４０９とは離して仮想チップ上に配置しても構わない。
【００７４】
なお，工程Ｓ１４０４〜Ｓ１４０６は，工程Ｓ１４０３で把握したクロックゲーティング回路とフリップフロップ回路の全ての組合せに対して行う。
【００７５】
次に，データベースからクリティカルパスで接続された始点のフリップフロップ回路と終点のフリップフロップ回路の情報を抽出し（Ｓ１４０７），工程Ｓ１４０２で抽出したモジュールとインスタンスの情報をもとにして，クリティカルパスの始点と終点のフリップフロップ回路が同じモジュールに含まれているか判断する（Ｓ１４０８）。
【００７６】
工程Ｓ１４０８の結果，クリティカルパスの始点と終点のフリップフロップ回路が同じモジュールには含まれていない場合は，クリティカルパスの前段と後段のフリップフロップ回路のスラック値をデータベースより抽出し，いずれかのスラック値のみが余裕があるか判断する。つまり，図１５では，論理合成工程（Ｓ１３）で生成したフリップフロップ回路１５０３，１５０７のスラック値Ｄ４１，Ｄ４４をデータベースより抽出し，いずれかのスラック値のみが余裕があるか判断する（Ｓ１４０９）。
【００７７】
いずれかのスラック値のみが余裕がある場合は，余裕が無いスラック値のフリップフロップ回路が属するモジュールに，フリップフロップ回路１５０３，１５０５を加えた新モジュールを設定する。そして，この新モジュール内のセルを新モジュール外のセルより優先して，仮想チップ上にセル間を近づけて配置する（Ｓ１４１０）。例えば，図１５において，フリップフロップ回路１５０７のスラック値Ｄ４４は余裕があるが，フリップフロップ回路１５０３のスラック値Ｄ４１には余裕が無い場合，フリップフロップ回路１５０５と組合せ回路１５０４を，フリップフロップ回路１５０１，１５０３を含む，クロックＣＬＫ３で制御されるセル群に加えて，新モジュール１５０９を設定する。そして，その新モジュール１５０９外のセル（この場合組合せ回路１５０６とフリップフロップ回路１５０７）よりも新モジュール１５０９内のセルを優先して，相互に近づけて密集させて配置することで，セル配置工程でクリティカルパスＣＰ１５０８のパス遅延を拡大しないようにする。一方，フリップフロップ回路１５０７のスラック値は余裕があるため，組合せ回路１５０６とフリップフロップ回路１５０７は，フリップフロップ回路１５０７のセットアップタイムに対する余裕の範囲内で，モジュール１５０９とは離して仮想チップ上に配置しても構わない。
【００７８】
工程Ｓ１４０８〜Ｓ１４１０は，工程Ｓ１４０７で把握した２つのフリップフロップ回路の全ての組合せに対して行う。
【００７９】
工程Ｓ１４０６，１４１０を終了したら，すべての総配線長が短くなるように残りのセルを仮想チップ上に配置し（Ｓ１４１１），さらに配線混雑度が低減できるように仮想チップ上に配置する（Ｓ１４１２）。
【００８０】
そして，仮想チップに配置したセルの配置データを生成した時に配置ツールから出力されるクロック毎にクロックラインの総配線長，クリティカルパスの前段と後段のフリップフロップ回路のスラック値，さらにその総配線長より見積もった想定遅延値をデータベースへ登録する（Ｓ１４１３）。
【００８１】
最後に生成した配置データを出力（Ｓ１４１４）し，セル配置工程（Ｓ１４）を終了する（Ｓ１４１５）。
【００８２】
このようにセル配置工程Ｓ１４では，論理合成工程Ｓ１３で算出したクリティカルパスの前段と後段のフリップフロップ回路のスラック値をもとに，スラック値が余裕が無い側のフリップフロップ回路群とクリティカルパスの始点終点の回路とでモジュールを形成し，このモジュール内のセルを優先的に近づけて仮想チップ上に配置することで，クリティカルパス上のバッファを減らし遅延が拡大しないようタイミング改善を行うことができる。
【００８３】
［クロックツリー生成工程］
クロックツリー生成工程Ｓ１５について詳細説明をする。図１８は，本実施の形態におけるクロックツリー生成工程の詳細フローを示す図である。本実施の形態における論理合成工程（Ｓ１３），セル配置工程（Ｓ１４）では，クリティカルパスの終点のクロックゲーティング回路に供給されるイネーブル信号，もしくは終点のフリップフロップ回路に供給されるデータ信号のタイミングを早めることで，クリティカルパスのタイミングを改善した。一方，以下に説明するクロックツリー生成工程（Ｓ１５）では，クリティカルパスの始点のフリップフロップ回路のクロックのタイミングを早くする，または終点のクロックゲーティング回路もしくはフリップフロップ回路のクロックのタイミングを遅くすることにより，クリティカルパスのタイミングを改善する。
【００８４】
セル配置工程（Ｓ１４）で生成した配置データをもとにして，クロック発生源から各ゲートにクロックを供給するクロックツリーを生成する（Ｓ１５０２）。通常，クロックツリーが出力する複数のクロックのスキューができるだけ小さくなるように，クロックツリーが生成される。そして，クロックツリー生成時にクロックツリー生成ツールから出力されるクロック毎にクロックラインの総配線長，クリティカルパスの前段と後段のフリップフロップ回路のスラック値，さらにその総配線長より見積もった想定遅延値をデータベースへ登録する（Ｓ１５０３）。そしてセル配置工程（Ｓ１４）で生成した配置データから，図１４，１５のクリティカルパスＣＰ１４０８，１５０８の始点のフリップフロップ回路１４０３，１５０３と終点のクロックゲーティング回路１４０５，フリップフロップ回路１５０５の位置情報を抽出する（Ｓ１５０４）。
【００８５】
工程Ｓ１５０２のクロックツリー生成時にクロックツリー生成ツールから出力されるクリティカルパスＣＰ１４０８の終点のクロックゲーティング回路１４０５のスラック値に余裕があるか判断する（Ｓ１５０５）。そして，クロックゲーティング回路１４０５のスラック値に余裕がある場合，クロックツリーの変更は行わない（Ｓ１５０９）。
【００８６】
反対に，クロックゲーティング回路１４０５のスラック値に余裕が無い場合，クリティカルパスの前段と後段のフリップフロップ回路１４０３，１４０７のいずれかのスラック値に余裕があるか判断する（Ｓ１５０６）。フリップフロップ回路１４０３，１４０７のいずれかのスラック値Ｄ３１，Ｄ３４に余裕がある場合，余裕がある側のクロックのスキューを大きくする（Ｓ１５０７）。
【００８７】
例えば，図１４において，フリップフロップ回路１４０７のスラック値Ｄ３４に余裕が無く，フリップフロップ回路１４０３のスラック値Ｄ３１に余裕がある場合，フリップフロップ回路１４０３にクロックＣＬＫ２を供給するクロックラインのクロックゲートを減少したりクロックラインを短くしたりしてクロックのタイミングを早めて，フリップフロップ回路１４０３からクロックゲーティング回路１４０５にイネーブル信号が供給されるタイミングを早める。このことは，フリップフロップ回路１４０３に供給されるクロックＣＬＫ２のタイミングを，同じクロックツリーで生成される他のクロックＣＬＫ２よりも早めて，そのスキューを大きくすることを意味する。これにより，クロックゲーティング回路１４０５のスラック値の余裕が増す。反対に，フリップフロップ回路１４０３のスラック値Ｄ３１に余裕がなく，フリップフロップ回路１４０７のスラック値Ｄ３４に余裕がある場合，クロックゲーティング回路１４０５にクロックＣＬＫ１を供給するクロックラインのクロックゲートを増やしたりクロックラインを長くしたりしてクロックのタイミングを遅らせて，クロックゲーティング回路１４０５のクロックＣＬＫ１の立ち上がりタイミングを遅くする。このことは，クロックゲーティング回路１４０５に供給されるクロックＣＬＫ１のタイミングを，同じクロックツリーで生成される他のクロックＣＬＫ１よりも遅くし，そのスキューを大きくすることを意味する。これにより，クロックゲーティング回路１４０５のスラック値の余裕が増す。
【００８８】
工程Ｓ１５０６において，フリップフロップ回路１４０３，１４０７のスラック値Ｄ３１，Ｄ３４に共に余裕が無い場合は，フリップフロップ回路１４０３のさらに前段のフリップフロップ回路１４０１のスラック値と，フリップフロップ回路１４０７のさらに後段のフリップフロップ回路１４１０のスラック値のいずれかに余裕があるか判断する（Ｓ１５０８）。いずれかに余裕がある場合は，工程１５０７と同様に，余裕がある側のクロックツリーを変更してクロックスキューを大きし，そこの余裕をクリティカルパスに分配する。
【００８９】
例えば，フリップフロップ回路１４１０のスラック値に余裕が無く，フリップフロップ回路１４０１のスラック値に余裕がある場合，フリップフロップ回路１４０１のクロックＣＬＫ２を供給するクロックラインのクロックゲートを減少したりクロックラインを短くしたりしてクロックのタイミングを早めて，フリップフロップ回路１４０３からフリップフロップ回路１４０３にデータ信号が供給されるタイミングを早める。これにより，フリップフロップ回路１４０３のスラック値に余裕ができる。そして今度は，フリップフロップ回路１４０３のクロックＣＬＫ２を供給するクロックラインのクロックゲートを減少したりクロックラインを短くしたりしてクロックのタイミングを早めて，フリップフロップ回路１４０３からクロックゲーティング回路１４０５にイネーブル信号が供給されるタイミングを早める。その結果，クロックゲーティング回路１４０５のスラック値の余裕が増す。反対に，フリップフロップ回路１４０１のスラック値に余裕が無く，フリップフロップ回路１４１０のスラック値に余裕がある場合，フリップフロップ回路１４０７のクロックラインのクロックゲートを増やしたりクロックラインを長くしたりしてクロックのタイミングを遅くし，クロックゲーティング回路１４０７のクロックＣＬＫ１の立ち上がりタイミングを遅くする。これにより，フリップフロップ回路１４０７のスラック値に余裕ができる。そして今度はクロックゲーティング回路１４０５にクロックＣＬＫ１を供給するクロックラインのクロックゲートを増やしたりクロックラインを長くしたりしてクロックのタイミングを遅らせ，クロックゲーティング回路１４０５のクロックＣＬＫ１の立ち上がりタイミングを遅くする。その結果，クロックゲーティング回路１４０５のスラック値の余裕が増す。
【００９０】
工程Ｓ１５０８において，フリップフロップ回路１４０３の前段のフリップフロップ回路１４０１のスラック値と，フリップフロップ回路１４０７の後段のフリップフロップ回路１４１０のスラック値共に余裕が無い場合は，さらに前段，後段のフリップフロップ回路のスラック値を判断し，いずれかに余裕があるフリップフロップ回路の組合せが現れるまで工程Ｓ１５０８を繰り返す。
【００９１】
工程Ｓ１５０５〜Ｓ１５０９については，工程Ｓ１５０４で把握したクロックゲーティング回路とフリップフロップ回路の全ての組合せに対して行う。
【００９２】
次に，工程Ｓ１５０４で位置情報を抽出したクリティカルパスＣＰ１５０８の始点のフリップフロップ回路１５０３と終点のフリップフロップ回路１５０５に対して，工程Ｓ１５０５と同様に確認を行う。つまり，工程Ｓ１５０２のクロックツリー生成時にクロックツリー生成ツールから出力されるクリティカルパスＣＰ１５０８の終点のフリップフロップ回路１５０５のスラック値に余裕があるか判断する（Ｓ１５１０）。そして，終点のフリップフロップ回路１５０５のスラック値に余裕がある場合，クロックツリーの変更は行わない（Ｓ１５１４）。
【００９３】
反対に，フリップフロップ回路１５０５のスラック値に余裕が無い場合，クリティカルパスの前段と後段のフリップフロップ回路１５０３，１５０７のいずれかのスラック値Ｄ４１，Ｄ４４に余裕があるか判断する（Ｓ１５１１）。フリップフロップ回路１５０３，１５０７のいずれかのスラック値Ｄ４１，Ｄ４４に余裕がある場合，余裕がある側のクロックのスキューを大きくする（Ｓ１５１２）。
【００９４】
例えば，図１５において，フリップフロップ回路１５０７のスラック値Ｄ４４に余裕が無く，フリップフロップ回路１５０３のスラック値Ｄ４１に余裕がある場合，フリップフロップ回路１５０３にクロックＣＬＫ３を供給するクロックラインのクロックゲートを減らしたりクロックラインを短くしたりしてクロックのタイミングを早め，フリップフロップ回路１５０３からフリップフロップ回路１５０５にデータ信号が供給されるタイミングを早める。このことは，フリップフロップ回路１５０３のクロックＣＬＫ３のタイミングを，同じクロックツリーで生成される他のクロックＣＬＫ３より早めて，そのスキューを大きくすることを意味する。これにより，フリップフロップ回路１５０５のスラック値の余裕が増す。反対に，フリップフロップ回路１５０３のスラック値Ｄ４１に余裕が無く，フリップフロップ回路１５０７のスラック値Ｄ４４に余裕がある場合，フリップフロップ回路１５０５にクロックＣＬＫ４を供給するクロックラインのクロックゲートを増やしたりクロックラインを長くしたりして，フリップフロップ回路１５０５のクロックＣＬＫ４の立ち上がりタイミングを遅くする。このことは，フリップフロップ回路１５０５のクロックＣＬＫ４のタイミングを，同じクロックツリーで生成される他のクロックＣＬＫ４より遅くし，そのスキューを大きくすることを意味する。これにより，フリップフロップ回路１５０５のスラック値の余裕が増す。
【００９５】
工程１５１１において，フリップフロップ回路１５０３，１５０７のスラック値Ｄ４１，Ｄ４４に共に余裕が無い場合は，フリップフロップ回路１５０３のさらに前段のフリップフロップ回路１５０１と，フリップフロップ回路１５０７のさらに後段のフリップフロップ回路１５１０のスラック値のいずれかのみ余裕があるか判断する（Ｓ１５１３）。いずれかに余裕がある場合，工程１５１２と同様に，余裕がある側のクロックツリーを変更してクロックスキューを大きくし，そこの余裕をクリティカルパスに分配する。
【００９６】
例えば，フリップフロップ回路１５１０のスラック値に余裕が無く，フリップフロップ回路１５０１のスラック値に余裕がある場合，フリップフロップ回路１５０１のクロックＣＬＫ３を供給するクロックラインのクロックゲートを減少したりクロックラインを短くしたりしてクロックのタイミングを早めて，フリップフロップ回路１５０１からフリップフロップ回路１５０３にデータ信号が供給されるタイミングを早める。これにより，フリップフロップ回路１５０３のスラック値に余裕ができる。そして今度は，フリップフロップ回路１５０３のクロックＣＬＫ４を供給するクロックラインのクロックゲートを減少したりクロックラインを短くしたりしてクロックのタイミングを早めて，フリップフロップ回路１５０３からフリップフロップ回路１５０５にデータ信号が供給されるタイミングを早める。その結果，クロックゲーティング回路１５０５のスラック値の余裕が増す。反対に，フリップフロップ回路１５０１のスラック値に余裕が無く，フリップフロップ回路１５１０のスラック値に余裕がある場合，フリップフロップ回路１５０７のクロックＣＬＫ４を供給するクロックラインのクロックゲートを増やしたりクロックラインを長くしたりしてクロックのタイミングを遅くして，クロックゲーティング回路１５０７のクロックＣＬＫ４の立ち上がりタイミングを遅くする。これにより，フリップフロップ回路１５０７のスラック値に余裕ができる。そして今度は，フリップフロップ回路１５０５のクロックＣＬＫ４を供給するクロックラインのクロックゲートを増やし，フリップフロップ回路１５０５のクロックＣＬＫ４の立ち上がりタイミングを遅くしたりクロックラインを長くしたりしてクロックのタイミングを遅くする。これにより，フリップフロップ回路１５０５のスラック値の余裕が増す。
【００９７】
工程Ｓ１５１３において，フリップフロップ回路１５０３の前段のフリップフロップ回路１５０１のスラック値と，フリップフロップ回路１５０７の後段のフリップフロップ回路１５１０のスラック値に共に余裕があるもしくは無い場合は，さらに前段，後段のフリップフロップ回路のスラック値を判断し，いずれかにのみ余裕があるフリップフロップ回路の組合せが現れるまで工程Ｓ１５１３を繰り返す。
【００９８】
工程Ｓ１５１０〜Ｓ１５１４については，工程Ｓ１５０３で把握した２つのフリップフロップ回路の全ての組合せについて行う。
【００９９】
最後に，生成したクロックツリーの情報を含んだ配置データを出力し（Ｓ１５１５），クロックツリー生成工程を終了する（Ｓ１５１６）。
【０１００】
このようにクロックツリー生成工程（Ｓ１５）では，クロックツリー生成後のクリティカルパスの前段と後段のフリップフロップ回路のスラック値をもとにクロックラインのクロックゲート数やクロックラインの長さを変更してスラック値の余裕を増し，クリティカルパスのタイミング改善を行うことができる。
【０１０１】
以上のとおり，本実施の形態のＬＳＩ設計方法によると，論理合成工程（Ｓ１３）では，クロックのスキューを考慮してネットリストの論理最適化を行い，セル配置工程（Ｓ１４）では，クリティカルパスの前段と後段の回路のスラック値をもとにクリティカルパス上のバッファを減らしてタイミング改善を行い，クロックツリー生成工程（Ｓ１５）では，クリティカルパスの前段と後段の回路のスラック値をもとにクロックツリーを変更してクリティカルパスのタイミング改善を行うことができる。
【０１０２】
つまり，従来のＬＳＩ設計方法では配線工程（Ｓ１６）後に値が確定しＳＴＡ工程（Ｓ１７）で設計に取り入れていたクロックのスキューやスラック値を，本実施の形態のＬＳＩ設計方法により論理合成工程（Ｓ１３），セル配置工程（Ｓ１４），クロックツリー生成工程（Ｓ１５）に取り入れることで，クリティカルパスのタイミングを改善した精度の高い配置データを生成することができる。また，ＳＴＡ工程（Ｓ１７）で初めてクリティカルパスのクロックタイミングを修正することが無くなり，設計者は手戻りすること無く円滑に設計作業を進めることができる。
【０１０３】
以上の実施の形態をまとめると，次の付記のとおりである。
【０１０４】
（付記１）
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力をイネーブル信号として供給され前記第２のクロックを供給される第１のクロックゲーティング回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路との間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築工程と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行うとともに，前記クリティカルパスを前記クリティカルパス以外のパスよりも優先して最適化し，ネットリストを生成する論理合成工程とを有するＬＳＩ設計方法。
【０１０５】
（付記２）
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力を入力データ信号として供給され前記第２のクロックを供給される第２のフリップフロップ回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１，第２のフリップフロップ回路の間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築工程と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行うとともに，前記クリティカルパスを前記クリティカルパス以外のパスよりも優先して最適化し，ネットリストを生成する論理合成工程とを有するＬＳＩ設計方法。
【０１０６】
（付記３）
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力をイネーブル信号として供給され前記第２のクロックを供給される第１のクロックゲーティング回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路との間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築手段と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行うとともに，前記クリティカルパスを前記クリティカルパス以外のパスよりも優先して最適化し，ネットリストを生成する論理合成手段とを有するＬＳＩ設計装置。
【０１０７】
（付記４）
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力を入力データ信号として供給され前記第２のクロックを供給される第２のフリップフロップ回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１，第２のフリップフロップ回路の間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築手段と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行うとともに，前記クリティカルパスを前記クリティカルパス以外のパスよりも優先して最適化し，ネットリストを生成する論理合成手段とを有するＬＳＩ設計装置。
【０１０８】
（付記５）
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力をイネーブル信号として供給され前記第２のクロックを供給される第１のクロックゲーティング回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路との間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築手順と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行うとともに，前記クリティカルパスを前記クリティカルパス以外のパスよりも優先して最適化し，ネットリストを生成する論理合成手順とをコンピュータに実行させるＬＳＩ設計プログラム。
【０１０９】
（付記６）
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力を入力データ信号として供給され前記第２のクロックを供給される第２のフリップフロップ回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１，第２のフリップフロップ回路の間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築手順と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行うとともに，前記クリティカルパスを前記クリティカルパス以外のパスよりも優先して最適化し，ネットリストを生成する論理合成手順とをコンピュータに実行させるＬＳＩ設計プログラム。
【０１１０】
（付記７）
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力をイネーブル信号として供給され前記第２のクロックを供給されるクロックゲーティング回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路との間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築工程と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行いネットリストを生成し，前記第１のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第１の余裕度と，前記第１のクロックゲーティング回路から出力される第２のクロックを供給される第２のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第２の余裕度とを算出する論理合成工程と，
セルを機能別にグルーピングした複数のモジュールのうち，前記第１，第２の余裕度のうち余裕度が小さい第１または第２のフリップフロップ回路が属するモジュールに，前記クリティカルパスの両端の前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路とを加えた新モジュールを設定し，前記ネットリスト内の複数のセルのうち当該新モジュール内のセルを，当該新モジュール外のセルより優先して仮想チップ上に配置するセル配置工程とを有するＬＳＩ設計方法。
【０１１１】
（付記８）
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力を入力データ信号として供給され前記第２のクロックを供給される第２のフリップフロップ回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１，第２のフリップフロップ回路の間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築工程と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行いネットリストを生成し，前記第１のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第１の余裕度と，前記第２のクロックを供給され前記第２のフリップフロップ回路の出力を入力データ信号とする第３のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第２の余裕度とを算出する論理合成工程と，
セルを機能別にグルーピングした複数のモジュールのうち，前記第１，第２の余裕度のうち余裕度が小さい第１または第３のフリップフロップ回路が属するモジュールに，前記クリティカルパスの両端の前記第１と第２のフリップフロップ回路を加えた新モジュールを設定し，前記ネットリスト内の複数のセルのうち当該新モジュール内のセルを，当該新モジュール外のセルより優先して仮想チップ上に配置するセル配置工程とを有するＬＳＩ設計方法。
【０１１２】
（付記９）  
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力をイネーブル信号として供給され前記第２のクロックを供給される第１のクロックゲーティング回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路との間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築手段と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行いネットリストを生成し，前記第１のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第１の余裕度と，前記第１のクロックゲーティング回路から出力される第２のクロックを供給される第２のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第２の余裕度とを算出する論理合成手段と，
セルを機能別にグルーピングした複数のモジュールのうち，前記第１，第２の余裕度のうち余裕度が小さい第１または第２のフリップフロップ回路が属するモジュールに，前記クリティカルパスの両端の前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路とを加えた新モジュールを設定し，前記ネットリスト内の複数のセルのうち当該新モジュール内のセルを，当該新モジュール外のセルより優先して仮想チップ上に配置するセル配置手段とを有するＬＳＩ設計装置。
【０１１３】
（付記１０）
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力を入力データ信号として供給され前記第２のクロックを供給される第２のフリップフロップ回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１，第２のフリップフロップ回路の間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築手段と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行いネットリストを生成し，前記第１のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第１の余裕度と，前記第２のクロックを供給され前記第２のフリップフロップ回路の出力を入力データ信号とする第３のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第２の余裕度とを算出する論理合成手段と，
セルを機能別にグルーピングした複数のモジュールのうち，前記第１，第２の余裕度のうち余裕度が小さい第１または第３のフリップフロップ回路が属するモジュールに，前記クリティカルパスの両端の前記第１と第２のフリップフロップ回路を加えた新モジュールを設定し，前記ネットリスト内の複数のセルのうち当該新モジュール内のセルを，当該新モジュール外のセルより優先して仮想チップ上に配置するセル配置手段とを有するＬＳＩ設計装置。
【０１１４】
（付記１１）
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力をイネーブル信号として供給され前記第２のクロックを供給される第１のクロックゲーティング回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路との間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築手順と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行いネットリストを生成し，前記第１のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第１の余裕度と，前記第１のクロックゲーティング回路から出力される第２のクロックを供給される第２のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第２の余裕度とを算出する論理合成手順と，
セルを機能別にグルーピングした複数のモジュールのうち，前記第１，第２の余裕度のうち余裕度が小さい第１または第２のフリップフロップ回路が属するモジュールに，前記クリティカルパスの両端の前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路とを加えた新モジュールを設定し，前記ネットリスト内の複数のセルのうち当該新モジュール内のセルを，当該新モジュール群外のセルより優先して仮想チップ上に配置するセル配置手順とをコンピュータに実行させるＬＳＩ設計プログラム。
【０１１５】
（付記１２）
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力を入力データ信号として供給され前記第２のクロックを供給される第２のフリップフロップ回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１，第２のフリップフロップ回路の間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築手順と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行いネットリストを生成し，前記第１のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第１の余裕度と，前記第２のクロックを供給され前記第２のフリップフロップ回路の出力を入力データ信号とする第３のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第２の余裕度とを算出する論理合成手順と，
セルを機能別にグルーピングした複数のモジュールのうち，前記第１，第２の余裕度のうち余裕度が小さい第１または第３のフリップフロップ回路が属するモジュールに，前記クリティカルパスの両端の前記第１と第２のフリップフロップ回路を加えた新モジュールを設定し，前記ネットリスト内の複数のセルのうち当該新モジュール内のセルを，当該新モジュール外のセルより優先して仮想チップ上に配置するセル配置手順とをコンピュータに実行させるＬＳＩ設計プログラム。
【０１１６】
（付記１３）
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力をイネーブル信号として供給され前記第２のクロックを供給される第１のクロックゲーティング回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路との間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築工程と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行いネットリストを生成する論理合成工程と，
前記ネットリストに基づいて，仮想チップ上に前記ネットリスト内の複数のセルを配置した配置データを生成するセル配置工程と，
前記仮想チップ上にクロック源から複数の供給クロックを生成するクロックツリーを配置したクロックツリーデータを生成するクロックツリー生成工程とを有し，
前記クロックツリー生成工程は，前記クロックツリーデータをもとにして，前記第１のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第１の余裕度と，前記第１のクロックゲーティングの出力をクロックとする第２のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第２の余裕度とを算出し，前記クロックツリーが生成する複数の供給クロックのうち，前記第１，第２の余裕度のうち余裕度が大きい側の第１または第２のフリップフロップ回路のクロックのスキューを他のクロックよりも大きくする工程を有するＬＳＩ設計方法。
【０１１７】
（付記１４）
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力を入力データ信号として供給され前記第２のクロックを供給される第２のフリップフロップ回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１，第２のフリップフロップ回路の間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築工程と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行いネットリストを生成する論理合成工程と，
前記ネットリストに基づいて，仮想チップ上に前記ネットリスト内の複数のセルを配置した配置データを生成するセル配置工程と，
前記仮想チップ上にクロック源から複数の供給クロックを生成するクロックツリーを配置したクロックツリーデータを生成するクロックツリー生成工程とを有し，
前記クロックツリー生成工程は，前記クロックツリーデータをもとにして，前記第１のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第１の余裕度と，前記第２のクロックを供給され前記第２のフリップフロップ回路の出力を入力データ信号とする第３のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第２の余裕度とを算出し，前記クロックツリーが生成する複数の供給クロックのうち，前記第１，第２の余裕度のうち余裕度が大きい側の第１または第２のフリップフロップ回路のクロックのスキューを他のクロックよりも大きくする工程を有するＬＳＩ設計方法。
【０１１８】
（付記１５）
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力をイネーブル信号として供給され前記第２のクロックを供給される第１のクロックゲーティング回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路との間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築手段と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行いネットリストを生成する論理合成手段と，
前記ネットリストに基づいて，仮想チップ上に前記ネットリスト内の複数のセルを配置した配置データを生成するセル配置手段と，
前記仮想チップ上にクロック源から複数の供給クロックを生成するクロックツリーを配置したクロックツリーデータを生成するクロックツリー生成手段とを有し，
前記クロックツリー生成手段は，前記クロックツリーデータをもとにして，前記第１のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第１の余裕度と，前記第１のクロックゲーティングの出力をクロックとする第２のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第２の余裕度とを算出し，前記クロックツリーが生成する複数の供給クロックのうち，前記第１，第２の余裕度のうち余裕度が大きい側の第１または第２のフリップフロップ回路のクロックのスキューを他のクロックよりも大きくする手段を有するＬＳＩ設計装置。
【０１１９】
（付記１６）
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力を入力データ信号として供給され前記第２のクロックを供給される第２のフリップフロップ回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１，第２のフリップフロップ回路の間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築手段と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行いネットリストを生成する論理合成手段と，
前記ネットリストに基づいて，仮想チップ上に前記ネットリスト内の複数のセルを配置した配置データを生成するセル配置手段と，
前記仮想チップ上にクロック源から複数の供給クロックを生成するクロックツリーを配置したクロックツリーデータを生成するクロックツリー生成手段とを有し，
前記クロックツリー生成手段は，前記クロックツリーデータをもとにして，前記第１のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第１の余裕度と，前記第２のクロックを供給され前記第２のフリップフロップ回路の出力を入力データ信号とする第３のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第２の余裕度とを算出し，前記クロックツリーが生成する複数の供給クロックのうち，前記第１，第２の余裕度のうち余裕度が大きい側の第１または第２のフリップフロップ回路のクロックのスキューを他のクロックよりも大きくする手段を有するＬＳＩ設計装置。
【０１２０】
（付記１７）
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力をイネーブル信号として供給され前記第２のクロックを供給される第１のクロックゲーティング回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路との間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築手順と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行いネットリストを生成する論理合成手順と，
前記ネットリストに基づいて，仮想チップ上に前記ネットリスト内の複数のセルを配置した配置データを生成するセル配置手順と，
前記仮想チップ上にクロック源から複数の供給クロックを生成するクロックツリーを配置したクロックツリーデータを生成するクロックツリー生成手順とを有し，
前記クロックツリー生成手順は，前記クロックツリーデータをもとにして，前記第１のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第１の余裕度と，前記第１のクロックゲーティングの出力をクロックとする第２のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第２の余裕度とを算出し，前記クロックツリーが生成する複数の供給クロックのうち，前記第１，第２の余裕度のうち余裕度が大きい側の第１または第２のフリップフロップ回路のクロックのスキューを他のクロックよりも大きくする手順をコンピュータに実行させるＬＳＩ設計プログラム。
【０１２１】
（付記１８）
ＬＳＩの仕様を記述したハードウェア記述ファイルと，クロック情報を有する制約条件ファイルとから第１のクロックと第２のクロックのそれぞれのクロックツリーによる想定遅延値をそれぞれ生成し，前記第１のクロックを供給される第１のフリップフロップ回路と前記第１のフリップフロップ回路の出力を入力データ信号として供給され前記第２のクロックを供給される第２のフリップフロップ回路とにおいて，前記第１のクロックと前記第２のクロックの想定遅延値の差が基準値より大きい場合に前記第１，第２のフリップフロップ回路の間のパスをクリティカルパスとしてデータベースへ登録するデータベース構築手順と，
前記ハードウェア記述ファイルと前記制約条件ファイルに基づいて論理合成を行いネットリストを生成する論理合成手順と，
前記ネットリストに基づいて，仮想チップ上に前記ネットリスト内の複数のセルを配置した配置データを生成するセル配置手順と，
前記仮想チップ上にクロック源から複数の供給クロックを生成するクロックツリーを配置したクロックツリーデータを生成するクロックツリー生成手順とを有し，
前記クロックツリー生成手順は，前記クロックツリーデータをもとにして，前記第１のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第１の余裕度と，前記第２のクロックを供給され前記第２のフリップフロップ回路の出力を入力データ信号とする第３のフリップフロップ回路におけるデータ入力タイミングに対するクロックタイミングの第２の余裕度とを算出し，前記クロックツリーが生成する複数の供給クロックのうち，前記第１，第２の余裕度のうち余裕度が大きい側の第１または第２のフリップフロップ回路のクロックのスキューを他のクロックよりも大きくする手順をコンピュータに実行させるＬＳＩ設計プログラム。
【０１２２】
（付記１９）
付記１，２，７，８，１３または１４において，
前記データベース構築工程は，
ＲＴＬ形式で記述された回路設計データとタイミング制約とをもとにクロック同期対象のインスタンスを配置した仮配置データを生成する仮配置工程と，
前記仮配置データをもとにクロックツリー毎にクロック想定遅延値の算出処理を行うクロック遅延値算出工程と，
前記仮配置データと前記クロック想定遅延値をもとに，前記第１のフリップフロップ回路と，前記第１のクロックゲーティング回路との想定遅延値差を算出し，前記想定遅延値差と前記第１のクロックゲーティング回路のクロック周期とを比較して，前記第１のフリップフロップ回路と前記第１のクロックゲーティング回路との間のパスに対して優先度フラグを設定する優先度設定工程とを有するＬＳＩ設計方法。
【符号の説明】
【０１２３】
ＲＴＬ  ：  Ｒｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ
ＳＴＡ  ：  Ｓｔａｔｉｃ  Ｔｉｍｉｎｇ  Ａｎａｌｙｓｉｓ
ＰＬＬ  ：  位相ロックループ（Ｐｈａｓｅ  Ｌｏｃｋｅｄ  Ｌｏｏｐ）
ＳＤＣ  ：  Ｓｙｎｏｐｓｙｓ  Ｄｅｓｉｇｎ  Ｃｏｎｓｔｒａｉｎｔ
ＦＦ    ：  フリップフロップ回路
ＧＣＢ  ：  クロックゲーティング回路（ゲーテッドクロックバッファ）
【図１】
0005842442.tif 000002
【図２】
0005842442.tif 000003
【図３】
0005842442.tif 000004
【図４】
0005842442.tif 000005
【図５】
0005842442.tif 000006
【図６】
0005842442.tif 000007
【図７】
0005842442.tif 000008
【図８】
0005842442.tif 000009
【図９】
0005842442.tif 000010
【図１０】
0005842442.tif 000011
【図１１】
0005842442.tif 000012
【図１２】
0005842442.tif 000013
【図１３】
0005842442.tif 000014
【図１４】
0005842442.tif 000015
【図１５】
0005842442.tif 000016
【図１６】
0005842442.tif 000017
【図１７】
0005842442.tif 000018
【図１８】
0005842442.tif 000019