(57)【要約】【課題】クロックゲーティングされた前段ＦＦと後段ＦＦとの間に、クロックゲーティングされたホールドエラー補償用の挿入ＦＦを接続する場合、挿入ＦＦの挿入前後での半導体集積回路の動作結果が異なり、動作不正が発生する可能性がある。【解決手段】本発明は、クロックゲーティングされた前段ＦＦと後段ＦＦとの間に新たに、クロックゲーティングされた挿入ＦＦを接続する半導体集積回路の設計方法であって、前段ＦＦ、後段ＦＦに対応したクロックゲーティングセルのタイプに応じて、挿入ＦＦに入力するクロックゲーティングセルを決定する半導体集積回路の設計方法である。【選択図】図１
2011232787.tif 000002
【特許請求の範囲】
【請求項１】
クロック入力端子に入力されるクロック信号に応じて、入力データをラッチし、出力する第１、第２のフリップフロップを有し、前記第２のフリップフロップが、所定の論理回路を経由した前記第１のフリップフロップの出力信号を入力される半導体集積回路において、
前記第１のフリップフロップと前記第２のフリップフロップとの間に新たに、前記第１もしくは第２のフリップフロップに入力されるクロック信号の半周期ずれたクロック信号に応じて、入力データをラッチし出力する第３のフリップフロップを接続する半導体集積回路の設計方法であって、
前記半導体集積回路が、少なくとも
入力される第１のイネーブル信号が、活性化のとき基準クロックと同期した信号を出力し、非活性化のとき出力する信号が第１の値となる第１のクロックゲーティング回路と、
入力される第２のイネーブル信号が、活性化のとき基準クロックと同期した信号を出力し、非活性化のとき出力する信号が第２の値となる第２のクロックゲーティング回路と、のうちどちらか一方を有し、
前記第１のフリップフロップに入力されるクロック信号が、前記第１のクロックゲーティング回路からの信号である場合は、前記第３のフリップフロップを、前記第１のフリップフロップと前記論理回路との間に接続し、入力クロック信号を前記第１のクロックゲーティング回路からの信号とし、
もしくは、前記第２のフリップフロップに入力されるクロック信号が、前記第２のクロックゲーティング回路からの信号である場合は、前記第３のフリップフロップを、前記論理回路と前記第２のフリップフロップとの間に接続し、入力クロック信号を前記第２のクロックゲーティング回路からの信号とする
半導体集積回路の設計方法。
【請求項２】
前記第１のフリップフロップに入力されるクロック信号が、前記第２のクロックゲーティング回路からの信号であり、且つ、前記第２のフリップフロップに入力されるクロック信号が、前記第１のクロックゲーティング回路からの信号である場合は、前記第２のクロックゲーティング回路を前記第１のクロックゲーティング回路に変更、もしくは、前記第１のクロックゲーティング回路を前記第２のクロックゲーティング回路に変更する
請求項１に記載の半導体集積回路の設計方法。
【請求項３】
前記第１のクロックゲーティング回路は、
前記基準クロックの半周期ずれたクロック信号に応じて、前記第１のイネーブル信号をラッチし、出力する第４のフリップフロップと、
前記基準クロックと、前記第４のフリップフロップの出力する信号とを入力し、積演算した結果を前記第１のクロックゲーティング回路の出力信号とするＡＮＤ回路と、を有する
請求項１または請求国２に記載の半導体集積回路の設計方法。
【請求項４】
前記第２のクロックゲーティング回路は、
前記基準クロックの半周期ずれたクロック信号に応じて、前記第２のイネーブル信号の反転信号をラッチし、出力する第５のフリップフロップと、
前記基準クロックと、前記第５のフリップフロップの出力する信号とを入力し、和演算した結果を前記第２のクロックゲーティング回路の出力信号とするＯＲ回路と、を有する
請求項１または請求国２に記載の半導体集積回路の設計方法。
【請求項５】
クロック入力端子に入力されるクロック信号に応じて、入力データをラッチし、出力する第１、第２のフリップフロップを有し、前記第２のフリップフロップが、所定の論理回路を経由した前記第１のフリップフロップの出力信号を入力される半導体集積回路において、
前記第１のフリップフロップと前記第２のフリップフロップとの間に新たに、前記第１もしくは第２のフリップフロップに入力されるクロック信号の半周期ずれたクロック信号に応じて、入力データをラッチし出力する第３のフリップフロップを接続する半導体集積回路の設計装置であって、
前記半導体集積回路が、少なくとも
入力される第１のイネーブル信号が、活性化のとき基準クロックと同期した信号を出力し、非活性化のとき出力する信号が第１の値となる第１のクロックゲーティング回路と、
入力される第２のイネーブル信号が、活性化のとき基準クロックと同期した信号を出力し、非活性化のとき出力する信号が第２の値となる第２のクロックゲーティング回路と、のうちどちらか一方を有し、
前記第１のフリップフロップに入力されるクロック信号が、前記第１のクロックゲーティング回路からの信号である場合は、前記第３のフリップフロップを、前記第１のフリップフロップと前記論理回路との間に接続し、入力クロック信号を前記第１のクロックゲーティング回路からの信号とし、
もしくは、前記第２のフリップフロップに入力されるクロック信号が、前記第２のクロックゲーティング回路からの信号である場合は、前記第３のフリップフロップを、前記論理回路と前記第２のフリップフロップとの間に接続し、入力クロック信号を前記第２のクロックゲーティング回路からの信号とする
半導体集積回路の設計装置。
【請求項６】
前記第１のフリップフロップに入力されるクロック信号が、前記第２のクロックゲーティング回路からの信号であり、且つ、前記第２のフリップフロップに入力されるクロック信号が、前記第１のクロックゲーティング回路からの信号である場合は、前記第２のクロックゲーティング回路を前記第１のクロックゲーティング回路に変更、もしくは、前記第１のクロックゲーティング回路を前記第２のクロックゲーティング回路に変更する
請求項５に記載の半導体集積回路の設計装置。
【請求項７】
クロック入力端子に入力されるクロック信号に応じて、入力データをラッチし、出力する第１、第２のフリップフロップを有し、前記第２のフリップフロップが、所定の論理回路を経由した前記第１のフリップフロップの出力信号を入力される半導体集積回路において、
前記第１のフリップフロップと前記第２のフリップフロップとの間に新たに、前記第１もしくは第２のフリップフロップに入力されるクロック信号の半周期ずれたクロック信号に応じて、入力データをラッチし出力する第３のフリップフロップを接続する半導体集積回路の設計プログラムであって、
前記半導体集積回路が、少なくとも
入力される第１のイネーブル信号が、活性化のとき基準クロックと同期した信号を出力し、非活性化のとき出力する信号が第１の値となる第１のクロックゲーティング回路と、
入力される第２のイネーブル信号が、活性化のとき基準クロックと同期した信号を出力し、非活性化のとき出力する信号が第２の値となる第２のクロックゲーティング回路と、のうちどちらか一方を有し、
前記第１のフリップフロップに入力されるクロック信号が、前記第１のクロックゲーティング回路からの信号である場合は、前記第３のフリップフロップを、前記第１のフリップフロップと前記論理回路との間に接続し、入力クロック信号を前記第１のクロックゲーティング回路からの信号とし、
もしくは、前記第２のフリップフロップに入力されるクロック信号が、前記第２のクロックゲーティング回路からの信号である場合は、前記第３のフリップフロップを、前記論理回路と、前記第２のフリップフロップとの間に接続し、入力クロック信号を前記第２のクロックゲーティング回路からの信号とする
半導体集積回路の設計プログラム。
【請求項８】
前記第１のフリップフロップに入力されるクロック信号が、前記第２のクロックゲーティング回路からの信号であり、且つ、前記第２のフリップフロップに入力されるクロック信号が、前記第１のクロックゲーティング回路からの信号である場合は、前記第２のクロックゲーティング回路を前記第１のクロックゲーティング回路に変更、もしくは、前記第１のクロックゲーティング回路を前記第２のクロックゲーティング回路に変更する
請求項７に記載の半導体集積回路の設計プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路の設計装置、設計方法及びプログラムに関するものである。
【背景技術】
【０００２】
ＬＳＩ設計では、フリップフロップで機能ブロック間の同期をとることで、データの受け渡しを行っている。一方、ＬＳＩのレイアウト生成後、フリップフロップ間でホールド時間の規定を満たしているかシミュレーション等で遅延検査を行う。この検査でホールドエラーが発生した箇所に対しては、遅延を発生させる回路を設けたり、逆相のクロックで動作するフリップフロップを挿入したりして対処を行う。なお、このような技術が特許文献１や特許文献２等に開示されている。
【０００３】
例えば、図２４、図２７に、クロックゲーティングされた２つのフリップフロップを有し、そのフリップフロップ間に、ホールドエラーを回避するため新たにクロックゲーティングされたフリップフロップを挿入する半導体集積回路の設計例を示す。
【０００４】
まず、図２４にフリップフロップ挿入前の半導体集積回路１の構成を示す。図２４に示すように、半導体集積回路１は、フリップフロップＦＦ１、ＦＦ２と、クロックゲーティングセルＣＧＣ１、ＣＧＣ２とを有する。
【０００５】
フリップフロップＦＦ１は、前段回路からデータをデータ入力端子Ｄに入力する。そして、クロック入力端子に入力するゲーティングクロック信号ＧＣＬＫ１に応じて、データ入力端子Ｄに入力したデータをラッチし、データ出力端子ＱにデータＡとして出力する。
【０００６】
このデータＡは、所定の論理動作を行う論理回路１０を経て、データＢとして、フリップフロップＦＦ２のデータ入力端子Ｄに入力される。そして、フリップフロップＦＦ２は、クロック入力端子に入力するゲーティングクロック信号ＧＣＬＫ２に応じてデータＢをラッチし、データ出力端子Ｑに出力する。
【０００７】
ここで、クロックゲーティングセルＣＧＣ１、ＣＧＣ２は、それぞれフリップフロップＦＦ１１とＡＮＤ回路ＡＮＤ１１とを有する。図２５にクロックゲーティングセルＣＧＣ１の単体の構成と、その動作を説明するタイミングチャートを示す。
【０００８】
フリップフロップＦＦ１１は、データ入力端子Ｄにイネーブル信号ＥＮ１を入力する。また、クロック入力端子に基準クロックＣＬＫの逆相（半周期ずれた）クロック信号を入力する。フリップフロップＦＦ１１は、クロック入力端子に入力したクロック信号に応じて、イネーブル信号ＥＮ１をラッチし、データ出力端子Ｑから出力する。
【０００９】
ＡＮＤ回路ＡＮＤ１１は、一方の入力端子に基準クロックを入力し、他方の入力端子にフリップフロップＦＦ１１のデータ出力端子Ｑからのデータを入力する。そして、積演算し、出力端子から出力する。
【００１０】
図２５に示すように、時刻ｔ１以前は、イネーブル信号ＥＮ１がハイレベルであり、フリップフロップＦＦ１１の出力データもハイレベルとなっている。このため、ＡＮＤ回路ＡＮＤ１１の出力端子からは、他方の入力端子に入力される基準クロックと同位相のゲーティングクロック信号ＧＣＬＫ１が出力される。
【００１１】
時刻ｔ１にイネーブル信号ＥＮ１がロウレベルに立ち下がる。その後、基準クロックＣＬＫの逆相（半周期ずれた）クロック信号の立ち上がりエッジに対応し、時刻ｔ２にフリップフロップＦＦ１１の出力データもロウレベルとなる。このため、ＡＮＤ回路ＡＮＤ１１の出力は、ロウレベルに固定される。
【００１２】
時刻ｔ３にイネーブル信号ＥＮ１が再びハイレベルに立ち上がる。その後、基準クロックＣＬＫの逆相（半周期ずれた）クロック信号の立ち上がりエッジに対応し、時刻ｔ４にフリップフロップＦＦ１１の出力データもハイレベルとなる。これ以降は、時刻ｔ１以前と同様に、ＡＮＤ回路ＡＮＤ１１の出力は、基準クロックと同位相のゲーティングクロック信号ＧＣＬＫ１が出力される。
【００１３】
なお、クロックゲーティングセルＣＧＣ２についても、上記説明のうちイネーブル信号ＥＮ１がＥＮ２に、ゲーティングクロック信号ＧＣＬＫ２がＧＣＬＫ１に置き換わる以外は同様である。これ以降、クロックゲーティングセルＣＧＣ１、ＣＧＣ２と同様の構成を有するクロックゲーティングセルを「ＡＮＤ型クロックゲーティングセル」と称す。
【００１４】
図２６に、図２４の半導体集積回路１の動作を説明するタイミングチャートを示す。但し、この動作タイミングチャートでは、ホールドエラーが発生せず、半導体集積回路１が理想的な動作を行っているものとする。以下では、それを前提に説明する。
【００１５】
図２６に示すように、時刻ｔ１にゲーティングクロック信号ＧＣＬＫ１の立ち上がりに応じてフリップフロップＦＦ１は、データ入力端子Ｄに入力したデータをラッチし、データ出力端子からデータＡ１として出力する。このデータＡ１は、論理回路１０を経てフリップフロップＦＦ２にデータＢ１として入力される。
【００１６】
時刻ｔ２にイネーブル信号ＥＮ１がロウレベルに立ち下がる。このため、ゲーティングクロック信号ＧＣＬＫ１がロウレベルに固定され、フリップフロップＦＦ１からの出力データもデータＡ１で固定される。同様に、論理回路１０からフリップフロップＦＦ２に入力されるデータもデータＢ１に固定される。
【００１７】
一方、イネーブル信号ＥＮ２は、時刻ｔ５以前においてハイレベルである。よって、時刻ｔ１、ｔ３、ｔ４に、クロックゲーティングセルＣＧＣ２から基準クロックと同相のゲーティングクロック信号ＧＣＬＫ２が出力されている。このため、フリップフロップＦＦ２は、時刻ｔ３、ｔ４のゲーティングクロック信号ＧＣＬＫ２の立ち上がりに応じて、データＢ１をラッチし、出力する。
【００１８】
時刻ｔ５にイネーブル信号ＥＮ２がロウレベルに立ち下がる。このため、ゲーティングクロック信号ＧＣＬＫ２がロウレベルに固定される。よって、フリップフロップＦＦ２の出力は、時刻ｔ４でラッチしたデータＢ１で固定される。
【００１９】
時刻ｔ６にイネーブル信号ＥＮ１がハイレベルに立ち上がる。このため、クロックゲーティングセルＣＧＣ１から再び基準クロックと同相のゲーティングクロック信号ＧＣＬＫ１が出力される。そして、このゲーティングクロック信号ＧＣＬＫ１の立ち上がりエッジに応じて、時刻ｔ７、ｔ９、ｔ１０、ｔ１１・・・に、フリップフロップＦＦ１からデータＡ６、Ａ７、Ａ８、Ａ９・・・が出力される。なお、このデータＡ６、Ａ７、Ａ８、Ａ９・・・は、論理回路１０を経てフリップフロップＦＦ２にデータＢ６、Ｂ７、Ｂ８、Ｂ９・・・として入力される。
【００２０】
一方、時刻ｔ８にイネーブル信号ＥＮ２がハイレベルに立ち上がる。このため、クロックゲーティングセルＣＧＣ２から再び基準クロックと同相のゲーティングクロック信号ＧＣＬＫ２が出力される。そして、時刻ｔ９、ｔ１０、ｔ１１・・・に、それぞれゲーティングクロック信号ＧＣＬＫ２の立ち上がりエッジに応じて、フリップフロップＦＦ２が、論理回路１０からのデータＢ６、Ｂ７、Ｂ８、・・・をラッチして、出力する。
【００２１】
しかし、図２４の半導体集積回路１が上述したような理想的動作とならず、ホールドエラーが発生した場合、フリップフロップＦＦ１、ＦＦ２の間に、基準クロックＣＬＫの逆相（半周期ずれた）クロック信号に同期したフリップフロップを接続し、ホールドエラー補償を行う。
【００２２】
図２７にフリップフロップ挿入後の半導体集積回路１の構成を示す。図２７に示すように、半導体集積回路１は、フリップフロップＦＦ１、ＦＦ２、ＦＦ３と、クロックゲーティングセルＣＧＣ１、ＣＧＣ２とを有する。図２７の半導体集積回路１が図２４と異なるのは、論理回路１０とフリップフロップＦＦ２との間に、フリップフロップＦＦ３が挿入されている点である。なお、このフリップフロップＦＦ３は、ホールドエラーを回避するため、クロック入力端子にクロックゲーティングセルＣＧＣ２の出力するゲーティングクロック信号ＧＣＬＫ２の逆相の（半周期ずれた）クロック信号を入力する。
【００２３】
図２８に、図２７の半導体集積回路１の動作を説明するタイミングチャートを示す。図２７に示すように、時刻ｔ１にゲーティングクロック信号ＧＣＬＫ１の立ち上がりに応じてフリップフロップＦＦ１は、データ入力端子Ｄに入力したデータをラッチし、データ出力端子からデータＡ１として出力する。このデータＡ１は、論理回路１０を経てフリップフロップＦＦ３にデータＢ１として入力される。
【００２４】
時刻ｔ２にイネーブル信号ＥＮ１がロウレベルに立ち下がる。このため、ゲーティングクロック信号ＧＣＬＫ１がロウレベルに固定され、フリップフロップＦＦ１からの出力データもデータＡ１で固定される。同様に、フリップフロップＦＦ３に入力されるデータもデータＢ１に固定される。
【００２５】
一方、イネーブル信号ＥＮ２は、時刻ｔ７以前においてハイレベルである。よって、時刻ｔ１、ｔ４、ｔ６に立ち上がりエッジを有した、基準クロックと同相のゲーティングクロック信号ＧＣＬＫ２が出力されている。
【００２６】
ここで、上述したように、フリップフロップＦＦ３は、クロック入力端子にゲーティングクロック信号ＧＣＬＫ２の逆相の（半周期ずれた）クロック信号ＧＣＬＫ２Ｂを入力する。このため、フリップフロップＦＦ３は、時刻ｔ３、ｔ５、ｔ８のゲーティングクロック信号ＧＣＬＫ２Ｂの立ち上がりに応じて、論理回路１０からのデータＢ１をラッチし、出力する。
【００２７】
更に、フリップフロップＦＦ２が、時刻ｔ４、ｔ６のゲーティングクロック信号ＧＣＬＫ２の立ち上がりに応じて、フリップフロップＦＦ３からのデータＢ１をラッチし、出力する。
【００２８】
時刻ｔ７にイネーブル信号ＥＮ２がロウレベルに立ち下がる。このため、ゲーティングクロック信号ＧＣＬＫ２がロウレベル、ゲーティングクロック信号ＧＣＬＫ２Ｂがハイレベルに固定される。よって、フリップフロップＦＦ３の出力は、時刻ｔ８でラッチしたデータＢ１で固定される。フリップフロップＦＦ２の出力は、時刻ｔ６でラッチしたデータＢ１で固定される。
【００２９】
時刻ｔ９にイネーブル信号ＥＮ１がハイレベルに立ち上がる。このため、クロックゲーティングセルＣＧＣ１から再び基準クロックと同相のゲーティングクロック信号ＧＣＬＫ１が出力される。そして、このゲーティングクロック信号ＧＣＬＫ１の立ち上がりエッジに応じて、時刻ｔ１０、ｔ１２、ｔ１４、ｔ１６・・・に、フリップフロップＦＦ１からデータＡ６、Ａ７、Ａ８、Ａ９・・・が出力される。なお、このデータＡ６、Ａ７、Ａ８、Ａ９・・・は、論理回路１０を経てフリップフロップＦＦ３にデータＢ５、Ｂ６、Ｂ７、Ｂ８、Ｂ９・・・として入力される。
【００３０】
一方、時刻ｔ１１にイネーブル信号ＥＮ２がハイレベルに立ち上がる。このため、クロックゲーティングセルＣＧＣ２から再び基準クロックと同相のゲーティングクロック信号ＧＣＬＫ２が出力される。そして、それぞれゲーティングクロック信号ＧＣＬＫ２Ｂの立ち上がりエッジに応じて、時刻ｔ１３、ｔ１５、ｔ１７・・・に、フリップフロップＦＦ３が、論理回路１０からのデータＢ７、Ｂ８、Ｂ９・・・をラッチして、出力する。
【００３１】
更に、時刻ｔ１４、ｔ１６・・・で、それぞれゲーティングクロック信号ＧＣＬＫ２の立ち上がりエッジに応じて、フリップフロップＦＦ２が、上述したフリップフロップＦＦ３の出力するデータＢ７、Ｂ８・・・をラッチして、出力する。
【先行技術文献】
【特許文献】
【００３２】
【特許文献１】特開平９−８１４３号公報
【特許文献２】特開２００４−１８６５１５号公報
【発明の概要】
【発明が解決しようとする課題】
【００３３】
しかし、ホールドエラー回避のため、図２７のようにゲートクロックキングされたフリップフロップＦＦ３を挿入した場合、以下のような問題が発生する。まず、図２６に示すように、理想的な動作を行う図２４の半導体集積回路１では、時刻ｔ１から７個目の基準クロック立ち上がりエッジで（時刻ｔ９）で、フリップフロップＦＦ２がデータＢ６をラッチ、出力している。
【００３４】
一方、図２８に示すように、フリップフロップＦＦ３を挿入した図２７の半導体集積回路１では、時刻ｔ１から７個目の基準クロックの立ち上がりエッジで（時刻ｔ１２）、フリップフロップＦＦ２がデータＢ１をラッチ、出力している。
【００３５】
これは、フリップフロップＦＦ２の前段のフリップフロップＦＦ３がゲーティングクロック信号ＧＣＬＫ２の逆相のゲーティングクロック信号ＧＣＬＫ２Ｂの立ち上がりエッジに応じてデータをラッチ、出力するために発生する。
【００３６】
図２８に示すように、フリップフロップＦＦ３が入力したデータをラッチし、出力できるのが時刻ｔ１３である。このため、フリップフロップＦＦ３は、時刻ｔ１から７個目の基準クロック立ち上がりエッジ（時刻ｔ１２）では、論理回路１０からのデータＢ６をラッチできず、破棄してしまう。よって、フリップフロップＦＦ３を挿入した半導体集積回路１（図２７）では、フリップフロップＦＦ２の時刻ｔ１から７個目の基準クロック立ち上がりエッジにおいて出力するデータが、理想的動作を行う半導体集積回路１（図２４）のデータと異なった結果となる。よって、フリップフロップＦＦ３の挿入した半導体集積回路１（図２７）は、フリップフロップＦＦ３の挿入しない半導体集積回路１（図２４）と異なる動作結果を出力してしまい、動作不正が発生する。
【００３７】
また、このような動作不正を起こさない構成として、図２９に示すように、挿入したフリップフロップＦＦ３の入力クロック信号をゲーティングしない半導体集積回路１の構成が考えられる。
【００３８】
この場合、図３０の動作タイミングチャートに示すように、時刻ｔ２でのイネーブル信号ＥＮ２の立ち下がりに関係なく、フリップフロップＦＦ３に基準クロックの逆相クロック信号ＣＬＫＢが入力される。このクロック信号ＣＬＫＢの立ち上がりエッジに応じて、フリップフロップＦＦ３が入力データをラッチし、出力する。
【００３９】
このため、時刻ｔ２以降、フリップフロップＦＦ３は、時刻ｔ３、ｔ４、ｔ５、ｔ６、ｔ８、ｔ１０・・・で、それぞれデータＢ１、Ｂ１、Ｂ１、Ｂ６、Ｂ７、Ｂ８をラッチし、後段のフリップフロップＦＦ２へ出力する。そして、フリップフロップＦＦ２は、イネーブル信号ＥＮ２がハイレベルに立ち上がった後、時刻ｔ７、ｔ９、ｔ１１・・・で、ゲーティングクロック信号ＧＣＬＫ２の立ち上がりエッジに応じて、それぞれデータＢ６、Ｂ７、Ｂ８・・・をラッチし、出力する。
【００４０】
図３０からもわかるように、この場合、フリップフロップＦＦ３の挿入後の半導体集積回路１（図２９）と、挿入前の半導体集積回路１（図２４）とで、フリップフロップＦＦ２が出力するデータは同じとなり、動作不正が発生しない。
【００４１】
しかし、このフリップフロップＦＦ３は、クロックゲーティングされていないため、イネーブル信号に関わりなく常に動作し続けてしまう。このため、クロックゲーティングを行うことで、折角フリップフロップＦＦ１、ＦＦ２の消費電力を削減しても、フリップフロップＦＦ３の消費電力分の増加で、半導体集積回路１のトータルの消費電力低減効果が薄れてしまう問題が発生する。よって、挿入されるフリップフロップＦＦ３は、クロックゲーティングを前提として既存回路に挿入されることが期待される。
【００４２】
以上のように、ホールドエラー解消のため、前段と後段のフリップフロップの間に、クロックゲーティングされたフリップフロップを挿入する場合、フリップフロップの挿入の仕方によっては、図２８で示したような動作不正が発生する可能性がある。よって、ホールドエラー補償のためクロックゲーティングされたフリップフロップの挿入する場合に、上記のような動作不正の発生しない半導体集積装置の設計装置、設計方法が求められている。
【００４３】
なお、特許文献１の技術もホールドエラーを補償するための技術である。この従来技術では、前段フリップフロップと後段フリップフロップとの間にローラッチ回路を挿入している。このローラッチは、遅延素子として動作し、ホールドエラーを回避する。しかし、このローラッチ回路に対してホールドエラーが発生した場合、ローラッチ回路が遅延素子として動作せず、前段フリップフロップのラッチした信号が、遅延せずそのまま後段フリップフロップに入力されてしまう可能性がある。このため、ローラッチ回路そのもののホールドエラーを回避する処理が必要となる。
【００４４】
また、特許文献２の技術もホールドエラーを補償するための技術である。この従来技術では、回路のホールド補償するため、フリップフロップの後段にクロック信号の半周期の遅延を設けている。この半周期の遅延を設ける機構として、ローラッチ回路と逆相フリップフロップが記載されている。しかし、ローラッチ回路を用いた場合は、上記特許文献１と同様、ローラッチ回路そのもののホールドエラーを回避する処理が必要となる。また、逆相フリップフロップを用いた場合は、クロックゲーティングに関する記載がなく、図２８で説明した問題が発生する可能性がある。
【課題を解決するための手段】
【００４５】
本発明の一態様は、クロック入力端子に入力されるクロック信号に応じて、入力データをラッチし、出力する第１、第２のフリップフロップを有し、前記第２のフリップフロップが、所定の論理回路を経由した前記第１のフリップフロップの出力信号を入力される半導体集積回路において、前記第１のフリップフロップと前記第２のフリップフロップとの間に新たに、前記第１もしくは第２のフリップフロップに入力されるクロック信号の半周期ずれたクロック信号に応じて、入力データをラッチし出力する第３のフリップフロップを接続する半導体集積回路の設計方法であって、前記半導体集積回路が、少なくとも入力される第１のイネーブル信号が、活性化のとき基準クロックと同期した信号を出力し、非活性化のとき出力する信号が第１の値となる第１のクロックゲーティング回路と、入力される第２のイネーブル信号が、活性化のとき基準クロックと同期した信号を出力し、非活性化のとき出力する信号が第２の値となる第２のクロックゲーティング回路と、のうちどちらか一方を有し、前記第１のフリップフロップに入力されるクロック信号が、前記第１のクロックゲーティング回路からの信号である場合は、前記第３のフリップフロップを、前記第１のフリップフロップと前記論理回路との間に接続し、入力クロック信号を前記第１のクロックゲーティング回路からの信号とし、もしくは、前記第２のフリップフロップに入力されるクロック信号が、前記第２のクロックゲーティング回路からの信号である場合は、前記第３のフリップフロップを、前記論理回路と前記第２のフリップフロップとの間に接続し、入力クロック信号を前記第２のクロックゲーティング回路からの信号とする
半導体集積回路の設計方法である。
【００４６】
本発明の他の態様は、クロック入力端子に入力されるクロック信号に応じて、入力データをラッチし、出力する第１、第２のフリップフロップを有し、前記第２のフリップフロップが、所定の論理回路を経由した前記第１のフリップフロップの出力信号を入力される半導体集積回路において、前記第１のフリップフロップと前記第２のフリップフロップとの間に新たに、前記第１もしくは第２のフリップフロップに入力されるクロック信号の半周期ずれたクロック信号に応じて、入力データをラッチし出力する第３のフリップフロップを接続する半導体集積回路の設計装置であって、前記半導体集積回路が、少なくとも入力される第１のイネーブル信号が、活性化のとき基準クロックと同期した信号を出力し、非活性化のとき出力する信号が第１の値となる第１のクロックゲーティング回路と、入力される第２のイネーブル信号が、活性化のとき基準クロックと同期した信号を出力し、非活性化のとき出力する信号が第２の値となる第２のクロックゲーティング回路と、のうちどちらか一方を有し、前記第１のフリップフロップに入力されるクロック信号が、前記第１のクロックゲーティング回路からの信号である場合は、前記第３のフリップフロップを、前記第１のフリップフロップと前記論理回路との間に接続し、入力クロック信号を前記第１のクロックゲーティング回路からの信号とし、もしくは、前記第２のフリップフロップに入力されるクロック信号が、前記第２のクロックゲーティング回路からの信号である場合は、前記第３のフリップフロップを、前記論理回路と前記第２のフリップフロップとの間に接続し、入力クロック信号を前記第２のクロックゲーティング回路からの信号とする半導体集積回路の設計装置である。
【００４７】
本発明の更に他の態様は、クロック入力端子に入力されるクロック信号に応じて、入力データをラッチし、出力する第１、第２のフリップフロップを有し、前記第２のフリップフロップが、所定の論理回路を経由した前記第１のフリップフロップの出力信号を入力される半導体集積回路において、前記第１のフリップフロップと前記第２のフリップフロップとの間に新たに、前記第１もしくは第２のフリップフロップに入力されるクロック信号の半周期ずれたクロック信号に応じて、入力データをラッチし出力する第３のフリップフロップを接続する半導体集積回路の設計プログラムであって、前記半導体集積回路が、少なくとも入力される第１のイネーブル信号が、活性化のとき基準クロックと同期した信号を出力し、非活性化のとき出力する信号が第１の値となる第１のクロックゲーティング回路と、入力される第２のイネーブル信号が、活性化のとき基準クロックと同期した信号を出力し、非活性化のとき出力する信号が第２の値となる第２のクロックゲーティング回路と、のうちどちらか一方を有し、前記第１のフリップフロップに入力されるクロック信号が、前記第１のクロックゲーティング回路からの信号である場合は、前記第３のフリップフロップを、前記第１のフリップフロップと前記論理回路との間に接続し、入力クロック信号を前記第１のクロックゲーティング回路からの信号とし、もしくは、前記第２のフリップフロップに入力されるクロック信号が、前記第２のクロックゲーティング回路からの信号である場合は、前記第３のフリップフロップを、前記論理回路と、前記第２のフリップフロップとの間に接続し、入力クロック信号を前記第２のクロックゲーティング回路からの信号とする半導体集積回路の設計プログラムである。
【００４８】
本発明は、前段の第１のフリップフロップと、後段の第２のフリップフロップに対応するクロックゲーティング回路のタイプに応じて、半導体集積回路が所定の構成となるよう第３のフリップフロップを接続し、且つ、第３のフリップフロップに対応するクロックゲーティング回路を選択可能とする。
【発明の効果】
【００４９】
本発明は、ホールドエラー補償のために、前段、後段フリップフロップ間にクロックゲーティングされたフリップフロップを挿入する場合に、フリップフロップ挿入後の半導体集積回路の構成が動作不正となることを防ぐことを可能とする。
【図面の簡単な説明】
【００５０】
【図１】実施の形態１にかかる半導体集積回路の設計装置のブロック構成図である。
【図２】実施の形態１にかかる半導体集積回路の設計装置が、挿入フリップフロップを挿入する前の半導体集積回路の構成図である。
【図３】実施の形態１にかかる半導体集積回路の設計装置が、挿入フリップフロップを挿入した後の半導体集積回路の構成図である。
【図４】実施の形態１にかかる半導体集積回路の設計装置が、挿入フリップフロップを挿入した後の半導体集積回路の動作タイミングチャートである。
【図５】実施の形態１にかかる半導体集積回路の設計装置が、挿入フリップフロップを挿入する前の半導体集積回路の構成図である。
【図６】ＯＲ型クロックゲーティングセルの単体の構成とその動作を説明するための動作タイミングチャートである。
【図７】実施の形態１にかかる半導体集積回路の設計装置が、挿入フリップフロップを挿入した後の半導体集積回路の動作タイミングチャートである。
【図８】実施の形態１にかかる半導体集積回路の設計装置が、挿入フリップフロップを挿入した後の半導体集積回路の動作タイミングチャートである。
【図９】実施の形態１にかかる半導体集積回路の設計装置が、挿入フリップフロップを挿入する前の半導体集積回路の構成図である。
【図１０】実施の形態１にかかる半導体集積回路の設計装置が、挿入フリップフロップを挿入した後の半導体集積回路の動作タイミングチャートである。
【図１１】実施の形態１にかかる半導体集積回路の設計装置が、挿入フリップフロップを挿入した後の半導体集積回路の動作タイミングチャートである。
【図１２】実施の形態１にかかる半導体集積回路の設計装置が、挿入フリップフロップを挿入する前の半導体集積回路の構成図である。
【図１３】実施の形態１にかかるフリップフロップ挿入部の動作を説明するためのフローチャートである。
【図１４】実施の形態１にかかるフリップフロップ挿入部の動作を説明するためのフローチャートである。
【図１５】実施の形態１にかかる半導体集積回路の設計装置が、挿入フリップフロップを挿入する前の半導体集積回路の構成図である。
【図１６】実施の形態１にかかる半導体集積回路の設計装置が、挿入フリップフロップを挿入した後の半導体集積回路の動作タイミングチャートである。
【図１７】実施の形態１にかかるフリップフロップ挿入部が挿入フリップフロップを挿入する場合の組み合わせをまとめた表である。
【図１８】実施の形態２にかかる半導体集積回路の設計装置が、挿入フリップフロップを挿入する前の半導体集積回路の構成図である。
【図１９】実施の形態２にかかる半導体集積回路の設計装置が、挿入フリップフロップを挿入した後の半導体集積回路の構成図である。
【図２０】実施の形態２にかかるフリップフロップ挿入部の動作を説明するためのフローチャートである。
【図２１】実施の形態２にかかるフリップフロップ挿入部の動作を説明するためのフローチャートである。
【図２２】実施の形態２にかかるフリップフロップ挿入部が挿入フリップフロップを挿入する場合の組み合わせをまとめた表である。
【図２３】その他の実施の形態にかかる半導体集積回路の設計装置の構成を示すブロック図である。
【図２４】従来の半導体集積回路の設計装置が、挿入フリップフロップを挿入する前の半導体集積回路の構成図である。
【図２５】ＡＮＤ型クロックゲーティングセルの動作を説明するための動作タイミングチャートである。
【図２６】従来の半導体集積回路の設計装置が、挿入フリップフロップを挿入する前の半導体集積回路の構成図である。
【図２７】従来の半導体集積回路の設計装置が、挿入フリップフロップを挿入した後の半導体集積回路の構成図である。
【図２８】従来の半導体集積回路の設計装置が、挿入フリップフロップを挿入した後の半導体集積回路の動作タイミングチャートである。
【図２９】挿入フリップフロップに対してクロックゲーティングしていないクロック信号を入力した場合の半導体集積回路の構成図である。
【図３０】挿入フリップフロップに対してクロックゲーティングしていないクロック信号を入力した場合の動作タイミングチャートである。
【発明を実施するための形態】
【００５１】
発明の実施の形態１
【００５２】
以下、本発明を適用した具体的な実施の形態１について、図面を参照しながら詳細に説明する。この実施の形態１は、本発明を半導体集積回路の設計装置、及び、設計方法に適用したものである。
【００５３】
図１に本実施の形態１にかかる半導体集積回路の設計装置１００のブロック構成の一例を示す。図１に示すように、半導体集積回路の設計装置１００は、回路設計データベース１０１と、タイミング解析部１０２と、フリップフロップ挿入部１０４とを有する。ここで、フリップフロップ挿入部１０４が、本発明の特徴部分を構成する。
【００５４】
回路設計データベース１０１は、所定の機能を有した半導体集積回路を設計するために必要な様々な情報を有する。この情報には、例えば、半導体集積回路が備える論理素子（ＡＮＤ回路、ＯＲ回路、ＸＯＲ回路等）やフリップフロップ等の情報、前記論理素子等が有する遅延情報、フリップフロップのタイミング情報、そして、単位配線長あたりの遅延情報等がある。
【００５５】
タイミング解析部１０２は、設計した半導体集積回路に対し、ホールドエラーの発生、及び、エラータイミング等を解析する。そして、その解析結果として、半導体集積回路のどこの箇所に、どれくらいのタイミングでホールドエラーが発生しているのかの情報を有するホールドエラー情報１０３を出力する。
【００５６】
フリップフロップ挿入部１０４は、上記ホールドエラー情報１０３+に応じて、半導体集積回路の必要な箇所に、ホールドエラー補償のためのフリップフロップ（以下、挿入フリップフロップと称す）を挿入する。フリップフロップ挿入部１０４は、挿入フリップフロップを挿入する場合、前段及び後段のフリップフロップに対応するクロックゲーティングセルのタイプに応じて、最適な箇所に挿入フリップフロップを挿入する。また同時に、挿入フリップフロップのゲーティングクロックを、前段もしくは後段のフリップフロップに対応するクロックゲーティングセルが出力するゲーティングクロックから選択する。そして、挿入フリップフロップが挿入され、ホールドエラーが解消された半導体集積回路の回路構成及びその接続情報を回路接続情報１０５として出力する。なお、挿入フリップフロップは、入力するゲーティングクロックの逆相の（半周期ずれた）クロック信号で動作する。
【００５７】
また、フリップフロップ挿入部１０４は、前段及び後段のフリップフロップに対応するクロックゲーティングセルのタイプが所定の組み合わせの場合、前段及び後段のフリップフロップに対応するクロックゲーティングセルのタイプを変更する。変更後は、上述した動作により、挿入フリップフロップを挿入する。
【００５８】
以下、図面を参考に、本発明の特徴部分を構成するフリップフロップ挿入部１０４の動作を説明する。
【００５９】
図２に、フリップフロップ挿入部１０４で挿入フリップフロップが挿入されていない半導体集積回路２のブロック構成図を示す。図２に示すように、半導体集積回路２は、フリップフロップＦＦ１、ＦＦ２と、クロックゲーティングセルＣＧＣ１、ＣＧＣ２とを有する。
【００６０】
フリップフロップＦＦ１は、前段回路からデータをデータ入力端子Ｄに入力する。そして、クロック入力端子に入力するゲーティングクロック信号ＧＣＬＫ１に応じて、データ入力端子Ｄに入力したデータをラッチし、データ出力端子ＱにデータＡとして出力する。
【００６１】
このデータＡは、所定の論理動作を行う論理回路１０を経て、データＢとして、フリップフロップＦＦ２のデータ入力端子Ｄに入力される。そして、フリップフロップＦＦ２は、クロック入力端子に入力するゲーティングクロック信号ＧＣＬＫ２に応じてデータＢをラッチし、データ出力端子Ｑに出力する。
【００６２】
ここで、クロックゲーティングセルＣＧＣ１、ＣＧＣ２は、それぞれフリップフロップＦＦ１１とＡＮＤ回路ＡＮＤ１１とを有する。つまり、クロックゲーティングセルＣＧＣ１、ＣＧＣ２は、両方とも上述したＡＮＤ型クロックゲーティングセルである。
【００６３】
フリップフロップＦＦ１１は、データ入力端子Ｄにイネーブル信号ＥＮ１を入力する。また、クロック入力端子に基準クロックＣＬＫの逆相（半周期ずれた）クロック信号を入力する。フリップフロップＦＦ１１は、クロック入力端子に入力したクロック信号に応じて、イネーブル信号ＥＮ１をラッチし、データ出力端子Ｑから出力する。
【００６４】
ＡＮＤ回路ＡＮＤ１１は、一方の入力端子に基準クロックを入力し、他方の入力端子にフリップフロップＦＦ１１のデータ出力端子Ｑからのデータを入力する。そして、積演算し、出力端子から出力する。
【００６５】
なお、図２からもわかるように半導体集積回路２は、図２４の半導体集積回路１と同様の構成となっている。よって、ホールドエラーが発生しない理想的な動作を行う場合の半導体集積回路２の動作タイミングチャートは、図２６と同様でありここでの説明は省略する。
【００６６】
次に、タイミング解析部１０２で、半導体集積回路２にホールドエラーが発生すると判断され、ホールドエラー情報１０３に基づき、フリップフロップ挿入部１０４がフリップフロップＦＦ１、ＦＦ２の間に、挿入フリップフロップＦＦ３を挿入する場合を考える。図３に、フリップフロップＦＦ３が挿入された場合の半導体集積回路２のブロック構成を示す。
【００６７】
図３に示すように、フリップフロップ挿入部１０４は、挿入フリップフロップＦＦ３を、フリップフロップＦＦ１と論理回路１０との間に接続する。そして、フリップフロップ挿入部１０４は、挿入フリップフロップＦＦ３のゲーティングクロック信号をクロックゲーティングセルＣＧＣ１から供給されるよう接続した構成とする。
【００６８】
図４に、図３の半導体集積回路２の動作を説明するタイミングチャートを示す。図４に示すように、時刻ｔ１にゲーティングクロック信号ＧＣＬＫ１の立ち上がりに応じてフリップフロップＦＦ１は、データ入力端子Ｄに入力したデータをラッチし、データＡ１として出力する。時刻ｔ２にイネーブル信号ＥＮ１がロウレベルに立ち下がる。このため、ゲーティングクロック信号ＧＣＬＫ１がロウレベルに固定され、フリップフロップＦＦ１からの出力データもデータＡ１で固定される。
【００６９】
ここで、フリップフロップＦＦ３は、クロック入力端子にゲーティングクロック信号ＧＣＬＫ１の逆相の（半周期ずれた）クロック信号ＧＣＬＫ１Ｂを入力する。このため、フリップフロップＦＦ３は、時刻ｔ３のクロック信号ＧＣＬＫ１Ｂの立ち上がりエッジに応じて、フリップフロップＦＦ１からの出力データＡ１をラッチし、出力する。但し、上述したように時刻ｔ２以降、ゲーティングクロック信号ＧＣＬＫ１がロウレベルに固定されるため、時刻ｔ３以降のフリップフロップＦＦ３の出力データもデータＡ１で固定される。このデータＡ１は、論理回路１０を経てフリップフロップＦＦ２にデータＢ１として入力される。
【００７０】
一方、イネーブル信号ＥＮ２は、時刻ｔ６以前においてハイレベルである。よって、時刻ｔ１、ｔ４、ｔ５に立ち上がりエッジを有した、基準クロックと同相のゲーティングクロック信号ＧＣＬＫ２が出力されている。このため、フリップフロップＦＦ２は、時刻ｔ４、ｔ５のゲーティングクロック信号ＧＣＬＫ２の立ち上がりに応じて、論理回路１０からのデータＢ１をラッチし、出力する。
【００７１】
そして、時刻ｔ６にイネーブル信号ＥＮ２がロウレベルに立ち下がる。このため、ゲーティングクロック信号ＧＣＬＫ２がロウレベルに固定される。よって、フリップフロップＦＦ２の出力も、時刻ｔ５でラッチしたデータＢ１で固定される。
【００７２】
次に、時刻ｔ７にイネーブル信号ＥＮ１がハイレベルに立ち上がる。このため、クロックゲーティングセルＣＧＣ１から再び基準クロックと同相のゲーティングクロック信号ＧＣＬＫ１が出力される。そして、このゲーティングクロック信号ＧＣＬＫ１の立ち上がりエッジに応じて、時刻ｔ８、ｔ１１、ｔ１３、ｔ１５・・・にフリップフロップＦＦ１からデータＡ６、Ａ７、Ａ８、Ａ９・・・が出力される。
【００７３】
そして、クロック信号ＧＣＬＫ１Ｂの立ち上がりエッジに応じて、時刻ｔ１０、ｔ１２、ｔ１４、ｔ１６・・・にフリップフロップＦＦ２が、それぞれフリップフロップＦＦ３の出力データＡ６、Ａ７、Ａ８、Ａ９・・・をラッチし、論理回路１０へ出力する。このデータＡ６、Ａ７、Ａ８、Ａ９・・・は、論理回路１０を経てフリップフロップＦＦ２にデータＢ６、Ｂ７、Ｂ８、Ｂ９・・・として入力される。
【００７４】
一方、時刻ｔ９にイネーブル信号ＥＮ２がハイレベルに立ち上がる。このため、クロックゲーティングセルＣＧＣ２から再び基準クロックと同相のゲーティングクロック信号ＧＣＬＫ２が出力される。そして、時刻ｔ１１、ｔ１３、ｔ１５・・・で、それぞれゲーティングクロック信号ＧＣＬＫ２の立ち上がりエッジに応じて、フリップフロップＦＦ２が、論理回路１０からのデータＢ６、Ｂ７、Ｂ８・・・をラッチして、出力する。
【００７５】
以上のように、挿入フリップフロップＦＦ３を挿入後の図３の半導体集積回路２は、時刻ｔ１から７個目の基準クロック立ち上がりエッジで（時刻ｔ１１）で、フリップフロップＦＦ２がデータＢ６をラッチ、出力している。これは、挿入フリップフロップＦＦ３を挿入していない図２の半導体集積回路２の理想的な動作と同じ動作結果となる。
【００７６】
次に、図５に、後段のフリップフロップに対応するクロックゲーティングセルの構成が半導体集積回路２と異なる構成の半導体集積回路３のブロック構成図を示す。また、フリップフロップ挿入部１０４が、この半導体集積回路３に対して挿入フリップフロップＦＦ３を挿入した構成を図７に示す。
【００７７】
まず、図５に示すように、半導体集積回路３は、フリップフロップＦＦ１、ＦＦ２と、クロックゲーティングセルＣＧＣ１、ＣＧＣ２とを有する。図５の半導体集積回路３が図２の半導体集積回路２と異なるのは、クロックゲーティングセルＣＧＣ２の構成である。よって、特にことわらない限り、ここではクロックゲーティングセルＣＧＣ２についてのみ説明する。
【００７８】
クロックゲーティングセルＣＧＣ２は、フリップフロップＦＦ２１とＯＲ回路ＯＲ２１とを有する。図６にクロックゲーティングセルＣＧＣ２の単体の構成と、その動作を説明するタイミングチャートを示す。図６に示すように、時刻ｔ１以前は、イネーブル信号ＥＮ２がハイレベルであり、イネーブル信号ＥＮ２の反転信号ＥＮ２Ｂがロウレベルである。よって、フリップフロップＦＦ２１の出力データもロウレベルとなっている。このため、ＯＲ回路ＯＲ２１の出力端子からは、他方の入力端子に入力される基準クロックと同位相のゲーティングクロック信号ＧＣＬＫ２が出力される。
【００７９】
時刻ｔ１にイネーブル信号ＥＮ２がロウレベルに立ち下がり、反転信号ＥＮ２Ｂがハイレベルに立ち上がる。その後、基準クロックＣＬＫの逆相（半周期ずれた）クロック信号の立ち上がりエッジに対応し、時刻ｔ２にフリップフロップＦＦ２１の出力データもハイレベルとなる。このため、ＯＲ回路ＯＲ２１の出力は、ハイレベルに固定される。
【００８０】
時刻ｔ３にイネーブル信号ＥＮ２が再びハイレベルに立ち上がり、反転信号ＥＮ２Ｂがロウレベルに立ち下がる。その後、基準クロックＣＬＫの逆相（半周期ずれた）クロック信号の立ち上がりエッジに対応し、時刻ｔ４にフリップフロップＦＦ２１の出力データもロウレベルとなる。これ以降は、時刻ｔ１以前と同様に、ＯＲ回路ＯＲ２１の出力は、基準クロックと同位相のゲーティングクロック信号ＧＣＬＫ２が出力される。
【００８１】
これ以降、図５のクロックゲーティングセルＣＧＣ２と同様の構成のクロックゲーティングセルを「ＯＲ型クロックゲーティングセル」と称す。
【００８２】
なお、ホールドエラーが発生しない理想的な動作を行う場合の半導体集積回路３の動作タイミングチャートは、イネーブル信号ＥＮ２がロウレベルの場合、ゲーティングクロック信号ＧＣＬＫ２がハイレベルに固定される以外、基本的に図２６と同様である。このため、ここでの説明は省略する。
【００８３】
次に、タイミング解析部１０２で、半導体集積回路３にホールドエラーが発生すると判断され、ホールドエラー情報１０３に基づき、フリップフロップ挿入部１０４がフリップフロップＦＦ１、ＦＦ２の間に、挿入フリップフロップＦＦ３を挿入する場合を考える。
【００８４】
図７に示すように、フリップフロップ挿入部１０４によって、フリップフロップＦＦ３が挿入された後の半導体集積回路３は、フリップフロップＦＦ３が、フリップフロップＦＦ１と論理回路１０との間に接続され、ゲーティングクロックがクロックゲーティングセルＣＧＣ１から供給されるよう接続された構成となる。
【００８５】
図８に、図７の半導体集積回路３の動作タイミングチャートを示す。但し、この図８の半導体集積回路３の動作タイミングチャートも、イネーブル信号ＥＮ２がロウレベルの場合、ゲーティングクロック信号ＧＣＬＫ２がハイレベルに固定される以外、基本的に図４と同様である。このため、ここでの説明は省略する。
【００８６】
以上のように、挿入フリップフロップＦＦ３を挿入後の図７の半導体集積回路３は、時刻ｔ１から７個目の基準クロック立ち上がりエッジで（時刻ｔ１１）で、フリップフロップＦＦ２がデータＢ６をラッチ、出力している。これは、挿入フリップフロップＦＦ３を挿入していない図５の半導体集積回路３の理想的な動作と同じ動作結果となる。
【００８７】
以上、図３、図７のように、挿入フリップフロップＦＦ３の前段のフリップフロップＦＦ１に対応したクロックゲーティングセルＣＧＣ１がＡＮＤ型クロックゲーティングセルである場合、フリップフロップ挿入部１０４は、挿入フリップフロップＦＦ３を、前段フリップフロップＦＦ１と論理回路１０との間に接続する。そして、フリップフロップ挿入部１０４は、挿入フリップフロップＦＦ３のゲーティングクロック信号をクロックゲーティングセルＣＧＣ１から供給されるよう接続した構成とする。
【００８８】
このような接続構成とすることで、挿入フリップフロップＦＦ３を挿入後の半導体集積回路２、３において、動作不正が発生することを回避することができる。そして、この図３、図７に示される半導体集積回路２、３の回路構成を有した回路接続情報１０５がフリップフロップ挿入部１０４から出力される。
【００８９】
更に、図９に、フリップフロップＦＦ１、ＦＦ２に対応するクロックゲーティングセルの構成が半導体集積回路２、３と異なる場合の半導体集積回路４のブロック構成図を示す。また、フリップフロップ挿入部１０４が、この半導体集積回路４に対して挿入フリップフロップＦＦ３を挿入した構成を図１０に示す。
【００９０】
図９に示すように、半導体集積回路４は、フリップフロップＦＦ１、ＦＦ２と、クロックゲーティングセルＣＧＣ１、ＣＧＣ２とを有する。図９の半導体集積回路４は、クロックゲーティングセルＣＧＣ１、ＣＧＣ２が共にＯＲ型クロックゲーティングセルであり、その点が半導体集積回路２、３と異なる。
【００９１】
なお、ホールドエラーが発生しない理想的な動作を行う場合の半導体集積回路４の動作タイミングチャートは、イネーブル信号ＥＮ１、ＥＮ２がロウレベルの場合、それぞれゲーティングクロック信号ＧＣＬＫ１、ＧＣＬＫ２がハイレベルに固定される以外、基本的に図２６と同様である。このため、ここでの説明は省略する。
【００９２】
次に、タイミング解析部１０２で、半導体集積回路４にホールドエラーが発生すると判断され、ホールドエラー情報１０３に基づき、フリップフロップ挿入部１０４がフリップフロップＦＦ１、ＦＦ２の間に、挿入フリップフロップＦＦ３を挿入する場合を考える。
【００９３】
図１０に示すように、フリップフロップ挿入部１０４によって、フリップフロップＦＦ３が挿入された後の半導体集積回路４は、フリップフロップＦＦ３が、論理回路１０とフリップフロップＦＦ２との間に接続され、ゲーティングクロックがクロックゲーティングセルＣＧＣ２から供給されるよう接続された構成となる。
【００９４】
図１１に、図１０の半導体集積回路４の動作を説明するタイミングチャートを示す。図１１に示すように、時刻ｔ１にゲーティングクロック信号ＧＣＬＫ１の立ち上がりに応じてフリップフロップＦＦ１は、データ入力端子Ｄに入力したデータをラッチし、データＡ１として出力する。時刻ｔ２にイネーブル信号ＥＮ１がロウレベルに立ち下がる。このため、ゲーティングクロック信号ＧＣＬＫ１がハイレベルに固定され、フリップフロップＦＦ１からの出力データもデータＡ１で固定される。このデータＡ１は、論理回路１０を経てフリップフロップＦＦ２にデータＢ１として入力される。
【００９５】
一方、イネーブル信号ＥＮ２は、時刻ｔ７以前においてハイレベルである。よって、時刻ｔ１、ｔ４、ｔ６に立ち上がりエッジを有した、基準クロックと同相のゲーティングクロック信号ＧＣＬＫ２が出力されている。
【００９６】
ここで、上述したように、フリップフロップＦＦ３は、クロック入力端子にゲーティングクロック信号ＧＣＬＫ２の逆相の（半周期ずれた）クロック信号ＧＣＬＫ２Ｂを入力する。このため、フリップフロップＦＦ３は、時刻ｔ３、ｔ５のクロック信号ＧＣＬＫ２Ｂの立ち上がりエッジに応じて、論理回路１０からの出力データＢ１をラッチし、出力する。
【００９７】
更に、フリップフロップＦＦ２が、時刻ｔ４、ｔ６のゲーティングクロック信号ＧＣＬＫ２の立ち上がりに応じて、フリップフロップＦＦ３からのデータＢ１をラッチし、出力する。
【００９８】
そして、時刻ｔ７にイネーブル信号ＥＮ２がロウレベルに立ち下がる。このため、ゲーティングクロック信号ＧＣＬＫ２がハイレベル、ゲーティングクロック信号ＧＣＬＫ２Ｂがロウレベルに固定される。よって、フリップフロップＦＦ３の出力が、時刻ｔ５でラッチしたデータＢ１で固定される。同様に、フリップフロップＦＦ２の出力も、時刻ｔ６でラッチしたデータＢ１で固定される。
【００９９】
次に、時刻ｔ８にイネーブル信号ＥＮ１がハイレベルに立ち上がる。このため、クロックゲーティングセルＣＧＣ１から再び基準クロックと同相のゲーティングクロック信号ＧＣＬＫ１が出力される。そして、このゲーティングクロック信号ＧＣＬＫ１の立ち上がりエッジに応じて、時刻ｔ９、ｔ１２、ｔ１４、ｔ１６・・・にフリップフロップＦＦ１からデータＡ６、Ａ７、Ａ８、Ａ９・・・が論理回路１０へ出力される。このデータＡ６、Ａ７、Ａ８、Ａ９・・・は、論理回路１０を経てフリップフロップＦＦ２にデータＢ６、Ｂ７、Ｂ８、Ｂ９・・・として入力される。
【０１００】
一方、時刻ｔ１０にイネーブル信号ＥＮ２がハイレベルに立ち上がる。このため、クロックゲーティングセルＣＧＣ２から再び基準クロックと同相のゲーティングクロック信号ＧＣＬＫ２が出力される。そして、時刻ｔ１１、ｔ１３、ｔ１５、ｔ１７・・・で、それぞれゲーティングクロック信号ＧＣＬＫ２Ｂの立ち上がりエッジに応じて、フリップフロップＦＦ２が、論理回路１０からのデータＢ６、Ｂ７、Ｂ８、・・・をラッチして、出力する。
【０１０１】
更に、フリップフロップＦＦ２が、時刻ｔ１２、ｔ１４、ｔ１６・・・のゲーティングクロック信号ＧＣＬＫ２の立ち上がりに応じて、フリップフロップＦＦ３からのデータＢＢ６、Ｂ７、Ｂ８、・・・をラッチし、出力する。
【０１０２】
以上のように、挿入フリップフロップＦＦ３を挿入後の図１０の半導体集積回路４は、時刻ｔ１から７個目の基準クロック立ち上がりエッジで（時刻ｔ１２）で、フリップフロップＦＦ２がデータＢ６をラッチ、出力している。これは、挿入フリップフロップＦＦ３を挿入していない図９の半導体集積回路４の理想的な動作と同じ動作結果となる。
【０１０３】
よって、挿入フリップフロップＦＦ３の前段のフリップフロップＦＦ１及び後段のフリップフロップＦＦ２に対応したクロックゲーティングセルが共にＯＲ型クロックゲーティングセルである場合、フリップフロップ挿入部１０４は、フリップフロップＦＦ３を、論理回路１０と後段フリップフロップＦＦ２との間に接続し、ゲーティングクロックをクロックゲーティングセルＣＧＣ２から供給するよう接続する。このような接続構成とすることで、挿入フリップフロップＦＦ３を挿入後の半導体集積回路４において、動作不正が発生することを回避することができる。
【０１０４】
そして、この図１０に示される半導体集積回路４の回路構成を有した回路接続情報１０５がフリップフロップ挿入部１０４から出力される。
【０１０５】
次に、図１２に、フリップフロップＦＦ１、ＦＦ２に対応するクロックゲーティングセルの構成が半導体集積回路２、３、４と異なる場合の半導体集積回路５のブロック構成図を示す。
【０１０６】
図１２に示すように、半導体集積回路５は、フリップフロップＦＦ１、ＦＦ２と、クロックゲーティングセルＣＧＣ１、ＣＧＣ２とを有する。図１２の半導体集積回路５は、クロックゲーティングセルＣＧＣ１、ＣＧＣ２が、それぞれＯＲ型、ＡＮＤ型クロックゲーティングセルであり、その点が半導体集積回路２、３、４と異なる。
【０１０７】
この半導体集積回路５の場合では、タイミング解析部１０２でホールドエラーが発生すると判断されても、フリップフロップ挿入部１０４は、フリップフロップＦＦ１、ＦＦ２の間に、新たにフリップフロップＦＦ３を挿入しないと決定する。
【０１０８】
そして、クロックゲーティングセルＣＧＣ１をＡＮＤ型クロックゲーティングセルに変更、つまり図２の半導体集積回路２と同様の構成に変更し、その変更後に図３の半導体集積回路２と同様の接続でフリップフロップＦＦ３を挿入する。もしくは、クロックゲーティングセルＣＧＣ２をＯＲ型クロックゲーティングセルに変更、つまり図９の半導体集積回路４と同様の構成に変更し、その変更後に図１０の半導体集積回路４と同様の接続でフリップフロップＦＦ３を挿入する。
【０１０９】
このため、フリップフロップ挿入部１０４の上記のような動作により、半導体集積回路５は、最終的に図３もしくは図１０の構成に変更される。このため、タイミング解析部１０２において、半導体集積回路５でホールドエラーが発生したと判断された場合であっても、半導体集積回路５は、結果的に図３もしくは図１０の構成に変更され、動作不正が発生することを回避する構成の半導体集積回路となる。そして、この半導体集積回路の構成を有した回路接続情報１０５がフリップフロップ挿入部１０４から出力される。
【０１１０】
以上のようなフリップフロップ挿入部１０４による回路設計の動作を説明するフローチャートを図１３に示す。図１３に示すように、まず、フリップフロップ挿入部１０４は、ホールドエラーが発生した箇所の前段フリップフロップ（以下、フリップフロップＦＦ１と称す）及び後段フリップフロップ（以下、フリップフロップＦＦ２と称す）の入力クロック信号がゲーティングされているか否かを判定する（Ｓ１０１）。
【０１１１】
そして、フリップフロップＦＦ１及びフリップフロップＦＦ２の入力クロック信号が共にゲーティングされていない場合（Ｓ１０１ＹＥＳ）、挿入する挿入フリップフロップ（以下、フリップフロップＦＦ３と称す）の入力クロック信号もゲーティング無しとする（Ｓ１０２）。
【０１１２】
一方、ステップＳ１０１で、フリップフロップＦＦ１、ＦＦ２のうち少なくとも１つで、入力クロック信号がゲーティングされていると判定された場合（Ｓ１０１ＮＯ）、フリップフロップＦＦ１に対応するクロックゲーティングセル（以下、クロックゲーティングセルＣＧＣ１と称す）がＡＮＤ型クロックゲーティングセルであるか否かを判定する（Ｓ１０３）。
【０１１３】
そして、クロックゲーティングセルＣＧＣ１がＡＮＤ型クロックゲーティングセルであると判定された場合（Ｓ１０３ＹＥＳ）、フリップフロップＦＦ３をフリップフロップＦＦ１と論理回路１０との間に挿入し、フリップフロップＦＦ３の入力クロックをクロックゲーティングセルＣＧＣ１から供給する（Ｓ１０４）。
【０１１４】
一方、ステップＳ１０３で、クロックゲーティングセルＣＧＣ１がＡＮＤ型クロックゲーティングセルでないと判定された場合（Ｓ１０３ＮＯ）、フリップフロップＦＦ２に対応するクロックゲーティングセル（以下、クロックゲーティングセルＣＧＣ２と称す）がＯＲ型クロックゲーティングセルであるか否かを判定する（Ｓ１０５）。
【０１１５】
そして、クロックゲーティングセルＣＧＣ２がＯＲ型クロックゲーティングセルであると判定された場合（Ｓ１０５ＹＥＳ）、フリップフロップＦＦ３を論理回路１０とフリップフロップＦＦ２との間に挿入し、フリップフロップＦＦ３の入力クロックをクロックゲーティングセルＣＧＣ２から供給する（Ｓ１０６）。
【０１１６】
一方、ステップＳ１０５で、クロックゲーティングセルＣＧＣ２がＯＲ型クロックゲーティングセルでないと判定された場合（Ｓ１０５ＮＯ）、フリップフロップＦＦ１、ＦＦ２のどちらか１つで、入力クロック信号がゲーティングされているか否かを判定する（Ｓ１０７）。
【０１１７】
そして、フリップフロップＦＦ１、ＦＦ２のどちらか１つで、入力クロック信号がゲーティングされていないと判定された場合（Ｓ１０７ＹＥＳ）、入力クロック信号がゲーティングされていないフリップフロップＦＦ１と論理回路１０との間、もしくは、論理回路１０と入力クロック信号がゲーティングされていないフリップフロップＦＦ２との間にフリップフロップＦＦ３を挿入する。そして、そのフリップフロップＦＦ３の入力クロック信号もゲーティング無しとする（Ｓ１０２）。
【０１１８】
一方、ステップＳ１０７で、フリップフロップＦＦ１、ＦＦ２のどちらか１つで、入力クロック信号がゲーティングされていると判定された場合（Ｓ１０７ＮＯ）、クロックゲーティングセルＣＧＣ１がＯＲ型クロックゲーティングセルであるか否かを判定する（Ｓ１０８）。
【０１１９】
そして、クロックゲーティングセルＣＧＣ１がＯＲ型クロックゲーティングセルであると判定された場合（Ｓ１０８ＹＥＳ）、クロックゲーティングセルＣＧＣ１をＯＲ型からＡＮＤ型クロックゲーティングセルに変更する（Ｓ１０９）。そして、フリップフロップＦＦ３をフリップフロップＦＦ１と論理回路１０との間に挿入し、フリップフロップＦＦ３の入力クロックをクロックゲーティングセルＣＧＣ１から供給する（Ｓ１０４）。
【０１２０】
一方、ステップＳ１０８で、クロックゲーティングセルＣＧＣ１がＯＲ型クロックゲーティングセルでないと判定された場合（Ｓ１０８ＮＯ）、クロックゲーティングセルＣＧＣ２はＡＮＤ型であるので、これをＡＮＤ型からＯＲ型クロックゲーティングセルに変更する（Ｓ１１０）。そして、フリップフロップＦＦ３を論理回路１０とフリップフロップＦＦ２との間に挿入し、フリップフロップＦＦ３の入力クロックをクロックゲーティングセルＣＧＣ２から供給する（Ｓ１０６）。
【０１２１】
また、フリップフロップ挿入部１０４は図１４に示すフローチャートのような設計動作をしてもよい。図１４に示すように、まず、フリップフロップ挿入部１０４は、ホールドエラーが発生した箇所のフリップフロップＦＦ１及びＦＦ２の入力クロック信号がゲーティングされているか否かを判定する（Ｓ２０１）。
【０１２２】
そして、フリップフロップＦＦ１及びフリップフロップＦＦ２の入力クロック信号が共にゲーティングされていない場合（Ｓ２０１ＹＥＳ）、フリップフロップＦＦ３の入力クロック信号もゲーティング無しとする（Ｓ２０２）。
【０１２３】
一方、ステップＳ２０１で、フリップフロップＦＦ１、ＦＦ２のうち少なくとも１つで、入力クロック信号がゲーティングされていると判定された場合（Ｓ２０１ＮＯ）、フリップフロップＦＦ２に対応するクロックゲーティングセルＣＧＣ２がＯＲ型クロックゲーティングセルであるか否かを判定する（Ｓ２０３）。
【０１２４】
そして、クロックゲーティングセルＣＧＣ２がＯＲ型クロックゲーティングセルであると判定された場合（Ｓ２０３ＹＥＳ）、フリップフロップＦＦ３を論理回路１０とフリップフロップＦＦ２との間に挿入し、フリップフロップＦＦ３の入力クロックをクロックゲーティングセルＣＧＣ２から供給する（Ｓ２０４）。
【０１２５】
一方、ステップＳ２０３で、クロックゲーティングセルＣＧＣ２がＯＲ型クロックゲーティングセルでないと判定された場合（Ｓ２０３ＮＯ）、フリップフロップＦＦ１に対応するクロックゲーティングセルＣＧＣ１がＡＮＤ型クロックゲーティングセルであるか否かを判定する（Ｓ２０５）。
【０１２６】
そして、クロックゲーティングセルＣＧＣ１がＡＮＤ型クロックゲーティングセルであると判定された場合（Ｓ２０５ＹＥＳ）、フリップフロップＦＦ３をフリップフロップＦＦ１と論理回路１０との間に挿入し、フリップフロップＦＦ３の入力クロックをクロックゲーティングセルＣＧＣ１から供給する（Ｓ２０６）。
【０１２７】
一方、ステップＳ２０５で、クロックゲーティングセルＣＧＣ１がＡＮＤ型クロックゲーティングセルでないと判定された場合（Ｓ２０５ＮＯ）、フリップフロップＦＦ１、ＦＦ２のどちらか１つで、入力クロック信号がゲーティングされているか否かを判定する（Ｓ２０７）。
【０１２８】
そして、フリップフロップＦＦ１、ＦＦ２のどちらか１つで、入力クロック信号がゲーティングされていないと判定された場合（Ｓ２０７ＹＥＳ）、入力クロック信号がゲーティングされていないフリップフロップＦＦ１と論理回路１０との間、もしくは、論理回路１０と入力クロック信号がゲーティングされていないフリップフロップＦＦ２との間にフリップフロップＦＦ３を挿入する。そして、そのフリップフロップＦＦ３の入力クロック信号もゲーティング無しとする（Ｓ２０２）。
【０１２９】
一方、ステップＳ２０７で、フリップフロップＦＦ１、ＦＦ２のどちらか１つで、入力クロック信号がゲーティングされていると判定された場合（Ｓ２０７ＮＯ）、クロックゲーティングセルＣＧＣ２がＡＮＤ型クロックゲーティングセルであるか否かを判定する（Ｓ２０８）。
【０１３０】
そして、クロックゲーティングセルＣＧＣ２がＡＮＤ型クロックゲーティングセルであると判定された場合（Ｓ２０８ＹＥＳ）、クロックゲーティングセルＣＧＣ２をＡＮＤ型からＯＲ型クロックゲーティングセルに変更する（Ｓ２０９）。そして、フリップフロップＦＦ３を論理回路１０とフリップフロップＦＦ２との間に挿入し、フリップフロップＦＦ３の入力クロックをクロックゲーティングセルＣＧＣ２から供給する（Ｓ２０４）。
【０１３１】
一方、ステップＳ２０８で、クロックゲーティングセルＣＧＣ２がＡＮＤ型クロックゲーティングセルでないと判定された場合（Ｓ２０８ＮＯ）、クロックゲーティングセルＣＧＣ１はＯＲ型であるので、これをＯＲ型からＡＮＤ型クロックゲーティングセルに変更する（Ｓ２１０）。そして、フリップフロップＦＦ３をフリップフロップＦＦ１と論理回路１０との間に挿入し、フリップフロップＦＦ３の入力クロックをクロックゲーティングセルＣＧＣ１から供給する（Ｓ２０６）。
【０１３２】
この図１４のステップＳ２０４により、フリップフロップ挿入部１０４は、図５の半導体集積回路３から図１５のような構成の半導体集積回路６を生成することができる。この半導体集積回路６は、半導体集積回路３にホールドエラー補償用の挿入フリップフロップＦＦ３が挿入された構成となっている。
【０１３３】
ここで、図７の半導体集積回路３も、図５の半導体集積回路３にホールドエラー補償用の挿入フリップフロップＦＦ３を挿入した構成である。但し、上述したように、図７の半導体集積回路３は、図１３のフローチャートの動作に基づき、ステップＳ１０４により、フリップフロップＦＦ１と論理回路１０との間に接続され、ゲーティングクロックがＡＮＤ型のクロックゲーティングセルＣＧＣ１から供給されるよう接続された構成となる。しかし、図１５の半導体集積回路６は、図１４のステップＳ２０４により、挿入フリップフロップＦＦ３が、論理回路１０とフリップフロップＦＦ２との間に接続され、ゲーティングクロックがＯＲ型のクロックゲーティングセルＣＧＣ２から供給されるよう接続された構成となる。
【０１３４】
図１５に示すように、フリップフロップ挿入部１０４によって、フリップフロップＦＦ３が挿入された後の半導体集積回路６は、フリップフロップＦＦ３が、論理回路１０とフリップフロップＦＦ２との間に接続され、ゲーティングクロックがＯＲ型のクロックゲーティングセルＣＧＣ２から供給されるよう接続された構成となる。図１５の半導体集積回路６の動作タイミングチャートを図１６に示す。
【０１３５】
図１６に示すように、時刻ｔ１にゲーティングクロック信号ＧＣＬＫ１の立ち上がりに応じてフリップフロップＦＦ１は、データ入力端子Ｄに入力したデータをラッチし、データＡ１として出力する。時刻ｔ２にイネーブル信号ＥＮ１がロウレベルに立ち下がる。このため、ゲーティングクロック信号ＧＣＬＫ１がロウレベルに固定され、フリップフロップＦＦ１からの出力データもデータＡ１で固定される。このデータＡ１は、論理回路１０を経てフリップフロップＦＦ３にデータＢ１として入力される。
【０１３６】
一方、イネーブル信号ＥＮ２は、時刻ｔ７以前においてハイレベルである。よって、時刻ｔ１、ｔ４、ｔ６に立ち上がりエッジを有した、基準クロックと同相のゲーティングクロック信号ＧＣＬＫ２が出力されている。
【０１３７】
ここで、上述したように、フリップフロップＦＦ３は、クロック入力端子にゲーティングクロック信号ＧＣＬＫ２の逆相の（半周期ずれた）クロック信号ＧＣＬＫ２Ｂを入力する。このため、フリップフロップＦＦ３は、時刻ｔ３、ｔ５のクロック信号ＧＣＬＫ２Ｂの立ち上がりエッジに応じて、論理回路１０からの出力データＢ１をラッチし、出力する。
【０１３８】
更に、フリップフロップＦＦ２が、時刻ｔ４、ｔ６のゲーティングクロック信号ＧＣＬＫ２の立ち上がりに応じて、フリップフロップＦＦ３からのデータＢ１をラッチし、出力する。
【０１３９】
そして、時刻ｔ７にイネーブル信号ＥＮ２がロウレベルに立ち下がる。このため、ゲーティングクロック信号ＧＣＬＫ２がハイレベル、ゲーティングクロック信号ＧＣＬＫ２Ｂがロウレベルに固定される。よって、フリップフロップＦＦ３の出力が、時刻ｔ５でラッチしたデータＢ１で固定される。同様に、フリップフロップＦＦ２の出力も、時刻ｔ６でラッチしたデータＢ１で固定される。
【０１４０】
次に、時刻ｔ８にイネーブル信号ＥＮ１がハイレベルに立ち上がる。このため、クロックゲーティングセルＣＧＣ１から再び基準クロックと同相のゲーティングクロック信号ＧＣＬＫ１が出力される。そして、このゲーティングクロック信号ＧＣＬＫ１の立ち上がりエッジに応じて、時刻ｔ９、ｔ１２、ｔ１４、ｔ１６・・・にフリップフロップＦＦ１からデータＡ６、Ａ７、Ａ８、Ａ９・・・が論理回路１０へ出力される。このデータＡ６、Ａ７、Ａ８、Ａ９・・・は、論理回路１０を経てフリップフロップＦＦ２にデータＢ６、Ｂ７、Ｂ８、Ｂ９・・・として入力される。
【０１４１】
一方、時刻ｔ１０にイネーブル信号ＥＮ２がハイレベルに立ち上がる。このため、クロックゲーティングセルＣＧＣ２から再び基準クロックと同相のゲーティングクロック信号ＧＣＬＫ２が出力される。そして、時刻ｔ１１、ｔ１３、ｔ１５、ｔ１７・・・で、それぞれゲーティングクロック信号ＧＣＬＫ２Ｂの立ち上がりエッジに応じて、フリップフロップＦＦ２が、論理回路１０からのデータＢ６、Ｂ７、Ｂ８、Ｂ９・・・をラッチして、出力する。
【０１４２】
更に、フリップフロップＦＦ２が、時刻ｔ１２、ｔ１４、ｔ１６・・・のゲーティングクロック信号ＧＣＬＫ２の立ち上がりに応じて、フリップフロップＦＦ３からのデータＢＢ６、Ｂ７、Ｂ８、・・・をラッチし、出力する。
【０１４３】
以上のように、挿入フリップフロップＦＦ３を挿入後の図１５の半導体集積回路６は、時刻ｔ１から７個目の基準クロック立ち上がりエッジで（時刻ｔ１２）で、フリップフロップＦＦ２がデータＢ６をラッチ、出力している。これは、挿入フリップフロップＦＦ３を挿入していない図７の半導体集積回路４の理想的な動作と同じ動作結果となる。
【０１４４】
よって、挿入フリップフロップＦＦ３の前段のフリップフロップＦＦ１に対応したクロックゲーティングセルＣＧＣ１がＡＮＤ型クロックゲーティングセル、後段のフリップフロップＦＦ２に対応したクロックゲーティングセルＣＧＣ２がＯＲ型クロックゲーティングセルである場合、フリップフロップ挿入部１０４は、図１４のフローチャートに従い、フリップフロップＦＦ３を、論理回路１０と後段フリップフロップＦＦ２との間に接続し、ゲーティングクロックをクロックゲーティングセルＣＧＣ２から供給するよう接続する。このような接続構成とすることで、挿入フリップフロップＦＦ３を挿入後の半導体集積回路６において、動作不正が発生することを回避することができる。
【０１４５】
以上、本実施の形態１にかかるフリップフロップ挿入部１０４は、前段フリップフロップＦＦ１及び後段フリップフロップＦＦ２に対応するクロックゲーティングセルのタイプを判定する。そして、判定結果に応じて挿入フリップフロップＦＦ３を、自動で所定の場所に挿入し、対応するクロックゲーティングセルを選択する。
【０１４６】
図１７に、フリップフロップ挿入部１０４が、挿入フリップフロップＦＦ３を挿入する場合の場所及び入力クロック信号を供給するクロックゲーティングセルのタイプと、前段フリップフロップＦＦ１及び後段フリップフロップＦＦ２に対応するクロックゲーティングセルのタイプをまとめた表を示す。
【０１４７】
図１７に示すように、クロックゲーティングセルＣＧＣ１、ＣＧＣ２が共にＡＮＤ型クロックゲーティングセルである場合、フリップフロップ挿入部１０４は、挿入フリップフロップＦＦ３を前段フリップフロップＦＦ１と論理回路１０との間（前段フリップフロップＦＦ１の直後）に接続し、入力クロック信号をクロックゲーティングセルＣＧＣ１から供給されるよう構成する。
【０１４８】
また、クロックゲーティングセルＣＧＣ１、ＣＧＣ２が共にＯＲ型クロックゲーティングセルである場合、フリップフロップ挿入部１０４は、挿入フリップフロップＦＦ３を論理回路１０と後段フリップフロップＦＦ２との間（後段フリップフロップＦＦ２の直前）に接続し、入力クロック信号をクロックゲーティングセルＣＧＣ２から供給されるよう構成する。
【０１４９】
また、クロックゲーティングセルＣＧＣ１がＡＮＤ型クロックゲーティングセル、クロックゲーティングセルＣＧＣ２がＯＲ型クロックゲーティングセルである場合、フリップフロップ挿入部１０４は、挿入フリップフロップＦＦ３を前段フリップフロップＦＦ１と論理回路１０との間（前段フリップフロップＦＦ１の直後）に接続し、入力クロック信号がクロックゲーティングセルＣＧＣ１から供給されるよう構成する。
【０１５０】
但し、フリップフロップ挿入部１０４の動作（図１４参照）によっては、挿入フリップフロップＦＦ３を後段フリップフロップＦＦ２との間（後段フリップフロップＦＦ２の直前）に接続し、入力クロック信号がクロックゲーティングセルＣＧＣ２から供給されるよう構成する。
【０１５１】
また、クロックゲーティングセルＣＧＣ１がＯＲ型クロックゲーティングセル、クロックゲーティングセルＣＧＣ２がＡＮＤ型クロックゲーティングセルである場合、フリップフロップ挿入部１０４は、この状態では挿入フリップフロップＦＦ３を挿入せず、クロックゲーティングセルＣＧＣ１をＡＮＤ型クロックゲーティングセルに変更する。そして、変更後は、上記と同様、挿入フリップフロップＦＦ３を前段フリップフロップＦＦ１と論理回路１０との間（前段フリップフロップＦＦ１の直後）に接続し、入力クロック信号をクロックゲーティングセルＣＧＣ１から供給されるよう構成する。
【０１５２】
但し、フリップフロップ挿入部１０４の動作（図１４参照）によっては、クロックゲーティングセルＣＧＣ２をＯＲ型クロックゲーティングセルに変更する。そして、変更後は、上記と同様、挿入フリップフロップＦＦ３を論理回路１０と後段フリップフロップＦＦ２との間（後段フリップフロップＦＦ２の直前）に接続し、入力クロック信号をクロックゲーティングセルＣＧＣ２から供給されるよう構成する。
【０１５３】
ここで、従来技術では、挿入フリップフロップＦＦ３を挿入する場合、挿入フリップフロップＦＦ３に入力されるゲーティングクロック信号によっては、図２８で説明したような問題が発生する可能性があった。しかし、本実施の形態１のフリップフロップ挿入部１０４は、図１７の表にまとめた組み合わせに応じて、クロックゲーティングされた挿入フリップフロップＦＦ３を、前段フリップフロップＦＦ１と後段フリップフロップＦＦ２との間に接続することができる。この接続方法により、フリップフロップＦＦ３の挿入前の理想的な動作行う半導体集積回路と、挿入フリップフロップＦＦ３を挿入後の半導体集積回路とで、動作結果が同じなるように挿入フリップフロップＦＦ３を挿入することが可能である。
【０１５４】
以上により、本実施の形態１の半導体集積回路の設計装置１００は、ホールドエラーが発生した半導体集積回路に、クロックゲーティングされたホールドエラー補償用の挿入フリップフロップＦＦ３を挿入する場合、動作不正を起こさない正しい動作結果を得ることができる半導体集積回路の構成をミスなく確実に設計することができる。また、この場合、既存のクロックゲーティングセルを挿入フリップフロップＦＦ３に適用することができ、挿入フリップフロップＦＦ３用に新たなクロックゲーティングセルを設置する必要がなく、半導体集積回路の回路面積の増加を抑制できる。また、挿入フリップフロップＦＦ３はクロックゲーティングされているため、半導体集積回路の消費電力の増加も、挿入フリップフロップＦＦ３がクロックゲーティングされていない場合と比較し、低減化できる。
【０１５５】
発明の実施の形態２
【０１５６】
以下、本発明を適用した具体的な実施の形態２について、図面を参照しながら詳細に説明する。この実施の形態２は、実施の形態１と同様、本発明を半導体集積回路の設計方法、及び、設計装置に適用したものである。本実施の形態２の設計装置は、実施の形態１で説明した図１と同様である。本実施の形態２が、実施の形態１と異なるのは、フリップフロップ挿入部１０４が、挿入フリップフロップＦＦ３を挿入する対象とする半導体集積回路の構成である。
【０１５７】
例えば、図１８に、半導体集積回路の一例として、挿入フリップフロップＦＦ３が挿入される前の半導体集積回路７のブロック構成図を示す。
【０１５８】
図１８に示すように、半導体集積回路７は、フリップフロップＦＦ１、ＦＦ２と、クロックゲーティングセルＣＧＣ１、ＣＧＣ２とを有する。実施の形態１と異なり、フリップフロップＦＦ１、ＦＦ２が、それぞれクロックゲーティングセルＣＧＣ１、ＣＧＣ２の供給するゲーティングクロックと逆相（半周期ずれた）の入力クロックを入力している点である。
【０１５９】
なお、以下では、ゲーティングクロックの逆相（半周期ずれた）の信号を入力クロックとするフリップフロップを、ネガティブフリップフロップと称する。また、以下ではゲーティングクロックと同相の信号を入力クロックとするフリップフロップを、ポジティブフリップフロップと称する。
【０１６０】
図１８に示すように、フリップフロップＦＦ１は、前段回路からデータをデータ入力端子Ｄに入力する。そして、クロック入力端子に入力するゲーティングクロック信号ＧＣＬＫ１の逆相（半周期ずれた）の信号に応じて、データ入力端子Ｄに入力したデータをラッチし、データ出力端子ＱにデータＡとして出力する。
【０１６１】
このデータＡは、所定の論理動作を行う論理回路１０を経て、データＢとして、フリップフロップＦＦ２のデータ入力端子Ｄに入力される。そして、フリップフロップＦＦ２は、クロック入力端子に入力するゲーティングクロック信号ＧＣＬＫ２の逆相（半周期ずれた）の信号に応じて、データＢをラッチし、データ出力端子Ｑに出力する。
【０１６２】
クロックゲーティングセルＣＧＣ１、ＣＧＣ２は、それぞれＯＲ型クロックゲーティングセルである。
【０１６３】
これは、図２の半導体集積回路２のポジティブフリップフロップをネガティブに、ＡＮＤ型クロックゲーティングセルをＯＲ型クロックゲーティングセルに変更した構成となっている。
【０１６４】
この半導体集積回路７に、ホールドエラーが発生する場合は、フリップフロップ挿入部１０４が挿入フリップフロップＦＦ３を挿入する。このとき、挿入フリップフロップＦＦ３は、ホールドエラー解消のためポジティブフリップフロップとして挿入される。
【０１６５】
図１９に、挿入フリップフロップＦＦ３が挿入された後の半導体集積回路７のブロック構成図を示す。図１９に示すように、半導体集積回路７は、フリップフロップＦＦ１、ＦＦ２、ＦＦ３と、クロックゲーティングセルＣＧＣ１、ＣＧＣ２とを有する。
【０１６６】
ポジティブフリップフロップである挿入フリップフロップＦＦ３は、前段フリップフロップＦＦ１と論理回路１０との間に接続され、ゲーティングクロックがクロックゲーティングセルＣＧＣ１から供給されるよう接続された構成となる。これは、図３の半導体集積回路２のポジティブフリップフロップをネガティブに、ＡＮＤ型クロックゲーティングセルをＯＲ型クロックゲーティングセルに変更した構成となっている。
【０１６７】
この図１９の半導体集積回路７の動作結果は、図１８の半導体集積回路７の理想的な動作結果と同じとなり、動作不正が発生しない。
【０１６８】
ここで、上述したように、挿入フリップフロップＦＦ３の挿入前後の半導体集積回路７の構成は、それぞれ挿入フリップフロップＦＦ３の挿入前後の半導体集積回路２の構成において、ポジティブフリップフロップとネガティブフリップフロップを入れ替え、ＡＮＤ型クロックゲーティングセルとＯＲ型クロックゲーティングセルを入れ替えた構成となっている。
【０１６９】
更に同様に、実施の形態１で例示した、半導体集積回路３〜６の構成においても、ポジティブフリップフロップとネガティブフリップフロップ、ＡＮＤ型クロックゲーティングセルとＯＲ型クロックゲーティングセルを入れ替えた構成とすることで、挿入フリップフロップＦＦ３の挿入前後での動作不正が発生しない。
【０１７０】
よって、本実施の形態２のフリップフロップ挿入部１０４も、実施の形態１と同様、前段フリップフロップＦＦ１と後段フリップフロップＦＦ２との間に挿入フリップフロップＦＦ３を挿入する。但し、この挿入フリップフロップＦＦ３の挿入前後の半導体集積回路の構成は、実施の形態１で例示した、半導体集積回路２〜６において、ポジティブフリップフロップとネガティブフリップフロップ、ＡＮＤ型クロックゲーティングセルとＯＲ型クロックゲーティングセルを入れ替えた構成となる。そして、フリップフロップ挿入部１０４は、挿入フリップフロップＦＦ３挿入後の構成の半導体集積回路の回路接続情報１０５を出力する。
【０１７１】
以上のような実施の形態２のフリップフロップ挿入部１０４による回路設計の動作を説明するフローチャートを図２０に示す。図２０に示すように、まず、フリップフロップ挿入部１０４は、ホールドエラーが発生した箇所の前段フリップフロップＦＦ１（ネガティブフリップフロップ）及び後段フリップフロップＦＦ２（ネガティブフリップフロップ）の入力クロック信号がゲーティングされているか否かを判定する（Ｓ３０１）。
【０１７２】
そして、フリップフロップＦＦ１及びフリップフロップＦＦ２の入力クロック信号が共にゲーティングされていない場合（Ｓ３０１ＹＥＳ）、挿入する挿入フリップフロップＦＦ３（ポジティブフリップフロップ）の入力クロック信号もゲーティング無しとする（Ｓ３０２）。
【０１７３】
一方、ステップＳ３０１で、フリップフロップＦＦ１、ＦＦ２のうち少なくとも１つで、入力クロック信号がゲーティングされていると判定された場合（Ｓ３０１ＮＯ）、フリップフロップＦＦ１に対応するクロックゲーティングセルＣＧＣ１がＯＲ型クロックゲーティングセルであるか否かを判定する（Ｓ３０３）。
【０１７４】
そして、クロックゲーティングセルＣＧＣ１がＯＲ型クロックゲーティングセルであると判定された場合（Ｓ３０３ＹＥＳ）、フリップフロップＦＦ３をフリップフロップＦＦ１と論理回路１０との間に挿入し、フリップフロップＦＦ３の入力クロックをクロックゲーティングセルＣＧＣ１から供給する（Ｓ３０４）。
【０１７５】
一方、ステップＳ３０３で、クロックゲーティングセルＣＧＣ１がＯＲ型クロックゲーティングセルでないと判定された場合（Ｓ３０３ＮＯ）、フリップフロップＦＦ２に対応するクロックゲーティングセルＣＧＣ２がＡＮＤ型クロックゲーティングセルであるか否かを判定する（Ｓ３０５）。
【０１７６】
そして、クロックゲーティングセルＣＧＣ２がＡＮＤ型クロックゲーティングセルであると判定された場合（Ｓ３０５ＹＥＳ）、フリップフロップＦＦ３を論理回路１０とフリップフロップＦＦ２との間に挿入し、フリップフロップＦＦ３の入力クロックをクロックゲーティングセルＣＧＣ２から供給する（Ｓ３０６）。
【０１７７】
一方、ステップＳ３０５で、クロックゲーティングセルＣＧＣ２がＡＮＤ型クロックゲーティングセルでないと判定された場合（Ｓ３０５ＮＯ）、フリップフロップＦＦ１、ＦＦ２のどちらか１つで、入力クロック信号がゲーティングされているか否かを判定する（Ｓ３０７）。
【０１７８】
そして、フリップフロップＦＦ１、ＦＦ２のどちらか１つで、入力クロック信号がゲーティングされていないと判定された場合（Ｓ３０７ＹＥＳ）、入力クロック信号がゲーティングされていないフリップフロップＦＦ１と論理回路１０との間、もしくは、論理回路１０と入力クロック信号がゲーティングされていないフリップフロップＦＦ２との間にフリップフロップＦＦ３を挿入する。そして、そのフリップフロップＦＦ３の入力クロック信号もゲーティング無しとする（Ｓ３０２）。
【０１７９】
一方、ステップＳ３０７で、フリップフロップＦＦ１、ＦＦ２のどちらか１つで、入力クロック信号がゲーティングされていると判定された場合（Ｓ３０７ＮＯ）、クロックゲーティングセルＣＧＣ１がＡＮＤ型クロックゲーティングセルであるか否かを判定する（Ｓ３０８）。
【０１８０】
そして、クロックゲーティングセルＣＧＣ１がＡＮＤ型クロックゲーティングセルであると判定された場合（Ｓ３０８ＹＥＳ）、クロックゲーティングセルＣＧＣ１をＡＮＤ型からＯＲ型クロックゲーティングセルに変更する（Ｓ３０９）。そして、フリップフロップＦＦ３をフリップフロップＦＦ１と論理回路１０との間に挿入し、フリップフロップＦＦ３の入力クロックをクロックゲーティングセルＣＧＣ１から供給する（Ｓ３０４）。
【０１８１】
一方、ステップＳ３０８で、クロックゲーティングセルＣＧＣ１がＡＮＤ型クロックゲーティングセルでないと判定された場合（Ｓ３０８ＮＯ）、クロックゲーティングセルＣＧＣ２はＯＲ型であるので、これをＯＲ型からＡＮＤ型クロックゲーティングセルに変更する（Ｓ３１０）。そして、フリップフロップＦＦ３を論理回路１０とフリップフロップＦＦ２との間に挿入し、フリップフロップＦＦ３の入力クロックをクロックゲーティングセルＣＧＣ２から供給する（Ｓ３０６）。
【０１８２】
また、フリップフロップ挿入部１０４は図２１に示すフローチャートのような設計動作をしてもよい。図２１に示すように、まず、フリップフロップ挿入部１０４は、ホールドエラーが発生した箇所のフリップフロップＦＦ１及びＦＦ２の入力クロック信号がゲーティングされているか否かを判定する（Ｓ４０１）。
【０１８３】
そして、フリップフロップＦＦ１及びフリップフロップＦＦ２の入力クロック信号が共にゲーティングされていない場合（Ｓ４０１ＹＥＳ）、フリップフロップＦＦ３の入力クロック信号もゲーティング無しとする（Ｓ４０２）。
【０１８４】
一方、ステップＳ４０１で、フリップフロップＦＦ１、ＦＦ２のうち少なくとも１つで、入力クロック信号がゲーティングされていると判定された場合（Ｓ４０１ＮＯ）、フリップフロップＦＦ２に対応するクロックゲーティングセルＣＧＣ２がＡＮＤ型クロックゲーティングセルであるか否かを判定する（Ｓ４０３）。
【０１８５】
そして、クロックゲーティングセルＣＧＣ２がＡＮＤ型クロックゲーティングセルであると判定された場合（Ｓ４０３ＹＥＳ）、フリップフロップＦＦ３を論理回路１０とフリップフロップＦＦ２との間に挿入し、フリップフロップＦＦ３の入力クロックをクロックゲーティングセルＣＧＣ２から供給する（Ｓ４０４）。
【０１８６】
一方、ステップＳ４０３で、クロックゲーティングセルＣＧＣ２がＡＮＤ型クロックゲーティングセルでないと判定された場合（Ｓ４０３ＮＯ）、フリップフロップＦＦ１に対応するクロックゲーティングセルＣＧＣ１がＯＲ型クロックゲーティングセルであるか否かを判定する（Ｓ４０５）。
【０１８７】
そして、クロックゲーティングセルＣＧＣ１がＯＲ型クロックゲーティングセルであると判定された場合（Ｓ４０５ＹＥＳ）、フリップフロップＦＦ３をフリップフロップＦＦ１と論理回路１０との間に挿入し、フリップフロップＦＦ３の入力クロックをクロックゲーティングセルＣＧＣ１から供給する（Ｓ４０６）。
【０１８８】
一方、ステップＳ４０５で、クロックゲーティングセルＣＧＣ１がＯＲ型クロックゲーティングセルでないと判定された場合（Ｓ４０５ＮＯ）、フリップフロップＦＦ１、ＦＦ２のどちらか１つで、入力クロック信号がゲーティングされているか否かを判定する（Ｓ４０７）。
【０１８９】
そして、フリップフロップＦＦ１、ＦＦ２のどちらか１つで、入力クロック信号がゲーティングされていないと判定された場合（Ｓ４０７ＹＥＳ）、入力クロック信号がゲーティングされていないフリップフロップＦＦ１と論理回路１０との間、もしくは、論理回路１０と入力クロック信号がゲーティングされていないフリップフロップＦＦ２との間にフリップフロップＦＦ３を挿入する。そして、そのフリップフロップＦＦ３の入力クロック信号もゲーティング無しとする（Ｓ４０２）。
【０１９０】
一方、ステップＳ４０７で、フリップフロップＦＦ１、ＦＦ２のどちらか１つで、入力クロック信号がゲーティングされていると判定された場合（Ｓ４０７ＮＯ）、クロックゲーティングセルＣＧＣ２がＯＲ型クロックゲーティングセルであるか否かを判定する（Ｓ４０８）。
【０１９１】
そして、クロックゲーティングセルＣＧＣ２がＯＲ型クロックゲーティングセルであると判定された場合（Ｓ４０８ＹＥＳ）、クロックゲーティングセルＣＧＣ２をＯＲ型からＡＮＤ型クロックゲーティングセルに変更する（Ｓ４０９）。そして、フリップフロップＦＦ３を論理回路１０とフリップフロップＦＦ２との間に挿入し、フリップフロップＦＦ３の入力クロックをクロックゲーティングセルＣＧＣ２から供給する（Ｓ４０４）。
【０１９２】
一方、ステップＳ４０８で、クロックゲーティングセルＣＧＣ２がＯＲ型クロックゲーティングセルでないと判定された場合（Ｓ４０８ＮＯ）、クロックゲーティングセルＣＧＣ１はＡＮＤ型であるので、これをＡＮＤ型からＯＲ型クロックゲーティングセルに変更する（Ｓ４１０）。そして、フリップフロップＦＦ３をフリップフロップＦＦ１と論理回路１０との間に挿入し、フリップフロップＦＦ３の入力クロックをクロックゲーティングセルＣＧＣ１から供給する（Ｓ４０６）。
【０１９３】
以上、本実施の形態２にかかるフリップフロップ挿入部１０４は、ネガティブフリップフロップである前段フリップフロップＦＦ１及び後段フリップフロップＦＦ２に対応するクロックゲーティングセルのタイプを判定する。そして、判定結果に応じてポジティブフリップフロップである挿入フリップフロップＦＦ３を、自動で所定の場所に挿入し、対応するクロックゲーティングセルを選択する。
【０１９４】
図２２に、フリップフロップ挿入部１０４が、挿入フリップフロップＦＦ３を挿入する場合の場所及び入力クロック信号を供給するクロックゲーティングセルのタイプと、前段フリップフロップＦＦ１及び後段フリップフロップＦＦ２に対応するクロックゲーティングセルのタイプをまとめた表を示す。
【０１９５】
図２２に示すように、クロックゲーティングセルＣＧＣ１、ＣＧＣ２が共にＯＲ型クロックゲーティングセルである場合、フリップフロップ挿入部１０４は、挿入フリップフロップＦＦ３を前段フリップフロップＦＦ１と論理回路１０との間（前段フリップフロップＦＦ１の直後）に接続し、入力クロック信号をクロックゲーティングセルＣＧＣ１から供給されるよう構成する。
【０１９６】
また、クロックゲーティングセルＣＧＣ１、ＣＧＣ２が共にＡＮＤ型クロックゲーティングセルである場合、フリップフロップ挿入部１０４は、挿入フリップフロップＦＦ３を論理回路１０と後段フリップフロップＦＦ２との間（後段フリップフロップＦＦ２の直前）に接続し、入力クロック信号をクロックゲーティングセルＣＧＣ２から供給されるよう構成する。
【０１９７】
また、クロックゲーティングセルＣＧＣ１がＯＲ型クロックゲーティングセル、クロックゲーティングセルＣＧＣ２がＡＮＤ型クロックゲーティングセルである場合、フリップフロップ挿入部１０４は、挿入フリップフロップＦＦ３を前段フリップフロップＦＦ１と論理回路１０との間（前段フリップフロップＦＦ１の直後）に接続し、入力クロック信号がクロックゲーティングセルＣＧＣ１から供給されるよう構成する。
【０１９８】
但し、フリップフロップ挿入部１０４の動作によっては、挿入フリップフロップＦＦ３を後段フリップフロップＦＦ２との間（後段フリップフロップＦＦ２の直前）に接続し、入力クロック信号がクロックゲーティングセルＣＧＣ２から供給されるよう構成する。
【０１９９】
また、クロックゲーティングセルＣＧＣ１がＡＮＤ型クロックゲーティングセル、クロックゲーティングセルＣＧＣ２がＯＲ型クロックゲーティングセルである場合、フリップフロップ挿入部１０４は、この状態では挿入フリップフロップＦＦ３を挿入せず、クロックゲーティングセルＣＧＣ２をＯＲ型クロックゲーティングセルに変更する。そして、変更後は、上記と同様、挿入フリップフロップＦＦ３を前段フリップフロップＦＦ１と論理回路１０との間（前段フリップフロップＦＦ１の直後）に接続し、入力クロック信号をクロックゲーティングセルＣＧＣ１から供給されるよう構成する。
【０２００】
但し、フリップフロップ挿入部１０４の動作によっては、クロックゲーティングセルＣＧＣ１をＡＮＤ型クロックゲーティングセルに変更する。そして、変更後は、上記と同様、挿入フリップフロップＦＦ３を論理回路１０と後段フリップフロップＦＦ２との間（後段フリップフロップＦＦ２の直前）に接続し、入力クロック信号をクロックゲーティングセルＣＧＣ２から供給されるよう構成する。
【０２０１】
本実施の形態２のフリップフロップ挿入部１０４は、図２２の表にまとめた組み合わせに応じて、ポジティブフリップフロップであるクロックゲーティングされた挿入フリップフロップＦＦ３を、ネガティブフリップフロップである前段フリップフロップＦＦ１とネガティブフリップフロップである後段フリップフロップＦＦ２との間に接続することができる。この接続方法により、実施の形態１と同様、フリップフロップＦＦ３の挿入前の理想的な動作行う半導体集積回路と、挿入フリップフロップＦＦ３を挿入後の半導体集積回路とで、動作結果が同じなるように挿入フリップフロップＦＦ３を挿入することが可能である。
【０２０２】
以上により、本実施の形態２の半導体集積回路の設計装置１００は、ホールドエラーが発生した半導体集積回路に、クロックゲーティングされたホールドエラー補償用の挿入フリップフロップを挿入する場合、動作不正を起こさない正しい動作結果を得ることができる半導体集積回路の構成をミスなく確実に設計することができる。また、この場合も、実施の形態１と同様、既存のクロックゲーティングセルを挿入フリップフロップＦＦ３に適用することができ、挿入フリップフロップＦＦ３用に新たなクロックゲーティングセルを設置する必要がなく、半導体集積回路の回路面積の増加を抑制できる。また、挿入フリップフロップＦＦ３はクロックゲーティングされているため、半導体集積回路の消費電力の増加も、挿入フリップフロップＦＦ３がクロックゲーティングされていない場合と比較し、低減化できる。
【０２０３】
なお、本発明は上記実施の形態に限られたものでなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
【０２０４】
例えば、上述した実施の形態１、２の半導体集積回路の設計装置は、図２３に示すようなＰＣ等のコンピュータ２００で実現してもよい。以下、このようなコンピュータ２００で、半導体集積回路の設計装置を構成した例を簡単に説明する。図２３に示すようにコンピュータ２００は、ＣＰＵ２０１と、主メモリ２０２と、ＨＤＤ２０３と、ＲＯＭ２０４と、入出力装置２０５と、バス２０６とを有する。バス２０６は、ＣＰＵ２０１、主メモリ２０２、ＨＤＤ２０３、ＲＯＭ２０４、入出力装置２０５と接続され、各種情報を伝達する。
【０２０５】
上述した回路設計データベースはコンピュータ２００のＨＤＤ２０３や、ネットワーク内のデータベース２０７等に保存されている。そして、ＣＰＵ２０１は、ＨＤＤ２０３もしくはＲＯＭ２０４に格納されている本発明の半導体集積回路の設計を実現するためのプログラム（以下、処理プログラムと称す）を呼び出し、主メモリ２０２に展開する。
【０２０６】
上述したタイミング解析部１０２、フリップフロップ挿入部１０４は、この処理プログラム内でモジュール化されている。なお、このコンピュータ２００を制御するオペレーティングシステムが各モジュールプログラムを制御するようにしてもよい。
【０２０７】
例えば、タイミング解析部１０２として動作するプログラムは、ＨＤＤ２０３等が有する回路設計データベース１０１から回路接続情報、遅延情報等を読み出し、ホールドエラー情報１０３を生成する。
【０２０８】
そして、フリップフロップ挿入部１０４として動作するプログラムが、実施の形態１、２で説明した動作により、回路接続情報１０５を生成する。
【０２０９】
なお、タイミング解析部１０２、フリップフロップ挿入部１０４をプログラムではなく、専用のハードウエアで実現してもよい。
【符号の説明】
【０２１０】
１００、２００  半導体集積回路の設計装置
１０１  回路設計データベース
１０２  タイミング解析部
１０３  ホールドエラー情報
１０４  フリップフロップ挿入部
１０５  回路接続情報
ＦＦ１  前段フリップフロップ
ＦＦ２  後段フリップフロップ
ＦＦ３  挿入フリップフロップ
１０  論理回路
ＣＧＣ１、ＣＧＣ２  クロックゲーティングセル
ＦＦ１１  ＡＮＤ型クロックゲーティングセルが備えるフリップフロップ
ＦＦ２１  ＯＲ型クロックゲーティングセルが備えるフリップフロップ
ＡＮＤ１１  ＡＮＤ回路
ＯＲ２１  ＯＲ回路
【図１】
2011232787.tif 000003
【図２】
2011232787.tif 000004
【図３】
2011232787.tif 000005
【図４】
2011232787.tif 000006
【図５】
2011232787.tif 000007
【図６】
2011232787.tif 000008
【図７】
2011232787.tif 000009
【図８】
2011232787.tif 000010
【図９】
2011232787.tif 000011
【図１０】
2011232787.tif 000012
【図１１】
2011232787.tif 000013
【図１２】
2011232787.tif 000014
【図１３】
2011232787.tif 000015
【図１４】
2011232787.tif 000016
【図１５】
2011232787.tif 000017
【図１６】
2011232787.tif 000018
【図１７】
2011232787.tif 000019
【図１８】
2011232787.tif 000020
【図１９】
2011232787.tif 000021
【図２０】
2011232787.tif 000022
【図２１】
2011232787.tif 000023
【図２２】
2011232787.tif 000024
【図２３】
2011232787.tif 000025
【図２４】
2011232787.tif 000026
【図２５】
2011232787.tif 000027
【図２６】
2011232787.tif 000028
【図２７】
2011232787.tif 000029
【図２８】
2011232787.tif 000030
【図２９】
2011232787.tif 000031
【図３０】
2011232787.tif 000032