(57)【要約】【課題】クロック信号に同期して動作する同期回路において、簡単な構成の回路で、ノイズの発生やＩＲドロップ、ピーク消費電流の増大などを大幅に低減することができる半導体集積回路およびその設計方法を提供する。【解決手段】本発明の半導体集積回路は、複数の組み合わせ回路間に挿入された複数のフリップフロップと、複数のフリップフロップにクロック信号を分配するクロックツリーとを有し、クロック信号により同期動作する。複数のフリップフロップは、クロックツリーからクロック信号が正相で分配され、この正相のクロック信号の立ち上がりエッジに同期して動作する複数の正エッジフリップフロップと、クロックツリーからクロック信号が逆相で分配され、この逆相のクロック信号の立ち下がりエッジに同期して動作する複数の負エッジフリップフロップとを含む。【選択図】図１
2007110403.tif 000002
【特許請求の範囲】
【請求項１】
複数の組み合わせ回路間に挿入された複数のフリップフロップと、該複数のフリップフロップにクロック信号を分配するクロックツリーとを有し、該クロック信号により同期動作する半導体集積回路であって、
前記複数のフリップフロップが、前記クロックツリーから前記クロック信号が正相で分配され、該クロック信号の立ち上がりエッジに同期して動作する複数の正エッジフリップフロップと、前記クロックツリーから前記クロック信号が逆相で分配され、該クロック信号の立ち下がりエッジに同期して動作する複数の負エッジフリップフロップとを含むことを特徴とする半導体集積回路。
【請求項２】
前記半導体集積回路が複数の回路ブロックを含み、該複数の回路ブロックのそれぞれが、前記正エッジフリップフロップと負エッジフリップフロップとの両方を含むことを特徴とする請求項１記載の半導体集積回路。
【請求項３】
前記クロックツリーは、クロック源に非反転バッファを介して接続され、前記複数の正エッジフリップフロップに前記クロック信号を供給する第１の枝と、同一のクロック源に反転バッファを介して接続され、前記複数の負エッジフリップフロップに前記クロック信号を供給する第２の枝とを含むことを特徴とする請求項１記載の半導体集積回路。
【請求項４】
複数の組み合わせ回路間に挿入された複数のフリップフロップと、該複数のフリップフロップにクロック信号を分配するクロックツリーとを有し、該クロック信号により同期動作する半導体集積回路の設計方法であって、
前記複数のフリップフロップとして、前記クロックツリーから前記クロック信号が正相で分配され、該クロック信号の立ち上がりエッジに同期して動作する正エッジフリップフロップと、前記クロックツリーから前記クロック信号が逆相で分配され、該クロック信号の立ち下がりエッジに同期して動作する負エッジフリップフロップとを混在させることを特徴とする半導体集積回路の設計方法。
【請求項５】
論理仕様決定後、ＲＴＬデータ生成の際に、前記正エッジフリップフロップと負エッジフリップフロップとを混在させて生成することを特徴とする請求項４記載の半導体集積回路の設計方法。
【請求項６】
論理合成において、前記複数のフリップフロップとして正エッジフリップフロップのみを配置し、
その後、前記正エッジフリップフロップの一部を負エッジフリップフロップに置き換えることを特徴とする請求項４記載の半導体集積回路の設計方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クロック信号に同期して動作する同期回路を搭載する半導体集積回路およびその設計方法に関するものである。
【背景技術】
【０００２】
例えば、図３に示す同期回路を搭載する半導体集積回路２０では、外部から入力されるデータＤＡＴＡ＿ＩＮが、同じく外部から入力されるクロック信号ＣＬＯＣＫの立ち上がりに同期して前段のフリップフロップ２４ａに保持され、その出力信号が組み合わせ回路２６で処理される。また、組み合わせ回路２６の出力信号は、同じクロック信号の次の立ち上がりに同期して後段のフリップフロップ２４ｂに保持され、その出力信号ＤＡＴＡ＿ＯＵＴが外部に出力される。
【０００３】
図３に示す同期回路は、説明を簡単にするために簡略化したものであるが、現在では、半導体集積回路２０のチップ上に数百万以上のトランジスタを集積することが可能であるため、図３に示すようなフリップフロップと組み合わせ回路とが、交互に、多数、接続された、大規模の同期回路が多数搭載される場合がある。
【０００４】
この場合、図４の半導体集積回路３０に示すように、多数のフリップフロップにクロック信号を分配するクロックツリー３４が構成される。このクロックツリー３４は、非反転バッファ（ないしは、インバータ（反転バッファ）を２つ直列に接続したもの）をツリー状に順次接続していくことによって構成される。そして、クロックツリー３４の最終段の各々の非反転バッファから出力されるクロック信号に同期して、各々のフリップフロップ（ＦＦ）３２にデータが保持される。
【０００５】
ここで、例えば図３に示す同期回路において、前段のフリップフロップ２４ａに入力されるクロック信号Ａが立ち上がるタイミングよりも、後段のフリップフロップ２４ｂに入力されるクロック信号Ｂが立ち上がるタイミングの方が、組み合わせ回路２６における遅延時間以上に遅くなると、後段のフリップフロップ２４ｂには、１クロック前の組み合わせ回路２６の出力信号が保持されることになり、データがスルーする（突き抜ける）状態となる。
【０００６】
これを防止するために、上記クロックツリー３４では、各々のフリップフロップ３２に供給されるクロック信号のドライブ能力やスキューが全て同じになるように、クロックツリー３４を構成する非反転バッファの段数や配置位置などが調整される。このため、図４に示すクロックツリー３４では、全ての非反転バッファがほぼ同時に、同じ方向（ハイレベルからローレベル、もしくはローレベルからハイレベル）にスイッチングする。
【０００７】
半導体集積回路３０の動作が開始されると、クロック信号は停止しないので、上記の動作が１００％の動作率でずっと続く。このため、回路規模が増大するにつれて、その影響によるノイズやＩＲドロップ、消費電力の増大などの問題が無視できなくなる。
【０００８】
これに対し、従来は、例えばＳＳＣＧ（スプレッド・スペクトラム・クロック・ジェネレーション）の技術や特許文献１，２に開示の技術などを使用することによって、各々のフリップフロップに供給されるクロック信号のタイミングをずらすことにより、ノイズを低減することが提案されている。また、上記クロックツリーの設計方法としては、例えば特許文献３の技術などが知られている。
【０００９】
【特許文献１】特開２０００−２９５６２号公報
【特許文献２】特開２０００−９１８８７号公報
【特許文献３】特開２００１−１７５６９９号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
本発明の目的は、前記従来技術に基づく問題点を解消し、クロック信号に同期して動作する同期回路において、簡単な構成の回路で、ノイズの発生やＩＲドロップ、消費電力の増大などを大幅に低減することができる半導体集積回路およびその設計方法を提供することにある。
【課題を解決するための手段】
【００１１】
上記目的を達成するために、本発明は、複数の組み合わせ回路間に挿入された複数のフリップフロップと、該複数のフリップフロップにクロック信号を分配するクロックツリーとを有し、該クロック信号により同期動作する半導体集積回路であって、
前記複数のフリップフロップが、前記クロックツリーから前記クロック信号が正相で分配され、該クロック信号の立ち上がりエッジに同期して動作する複数の正エッジフリップフロップと、前記クロックツリーから前記クロック信号が逆相で分配され、該クロック信号の立ち下がりエッジに同期して動作する複数の負エッジフリップフロップとを含むことを特徴とする半導体集積回路を提供するものである。
【００１２】
ここで、前記半導体集積回路が複数の回路ブロックを含み、該複数の回路ブロックのそれぞれが、前記正エッジフリップフロップと負エッジフリップフロップとの両方を含むことが好ましい。
【００１３】
また、前記クロックツリーは、クロック源に非反転バッファを介して接続され、前記複数の正エッジフリップフロップに前記クロック信号を供給する第１の枝と、同一のクロック源に反転バッファを介して接続され、前記複数の負エッジフリップフロップに前記クロック信号を供給する第２の枝とを含むことが好ましい。
【００１４】
また、本発明は、複数の組み合わせ回路間に挿入された複数のフリップフロップと、該複数のフリップフロップにクロック信号を分配するクロックツリーとを有し、該クロック信号により同期動作する半導体集積回路の設計方法であって、
前記複数のフリップフロップとして、前記クロックツリーから前記クロック信号が正相で分配され、該クロック信号の立ち上がりエッジに同期して動作する正エッジフリップフロップと、前記クロックツリーから前記クロック信号が逆相で分配され、該クロック信号の立ち下がりエッジに同期して動作する負エッジフリップフロップとを混在させることを特徴とする半導体集積回路の設計方法を提供する。
【００１５】
ここで、論理仕様決定後、ＲＴＬデータ生成の際に、前記正エッジフリップフロップと負エッジフリップフロップとを混在させて生成することが好ましい。
【００１６】
また、論理合成において、前記複数のフリップフロップとして正エッジフリップフロップのみを配置し、
その後、前記正エッジフリップフロップの一部を負エッジフリップフロップに置き換えることが好ましい。
【発明の効果】
【００１７】
本発明によれば、クロックツリーによって生成される正相のクロック信号と逆相のクロック信号とが同じタイミングで逆方向にスイッチングする。このため、正相のクロック信号を生成するための全てのバッファと逆相のクロック信号を生成するための全てのバッファとが同時にスイッチングする時のピーク電流を低減することができ、ノイズの発生やＩＲドロップを大幅に低減することができ、消費電力を削減することができる。
【００１８】
また、本発明の半導体集積回路は、逆相のクロック信号を生成するために、非反転バッファの一部を反転バッファに変更し、かつ、正エッジフリップフロップの一部を負エッジフリップフロップに変更するだけという簡単な構成で実現できるという利点もある。
【発明を実施するための最良の形態】
【００１９】
以下に、添付の図面に示す好適実施形態に基づいて、本発明の半導体集積回路およびその設計方法を詳細に説明する。
【００２０】
図１は、本発明の半導体集積回路の構成を表す一実施形態の回路図である。同図に示す半導体集積回路１０は、図４に示す従来の半導体集積回路３０との対比が容易となるように、従来の半導体集積回路３０に対して本発明を適用したものである。すなわち、本実施形態の半導体集積回路１０は、図１に示すように、８個のフリップフロップ（ＦＦ）１２と、クロックツリー１４とを備えている。
【００２１】
フリップフロップ１２は、クロックツリー１４から供給されるクロック信号に同期して動作するもので、複数の組み合わせ回路（図示省略）間に挿入される。ここで、複数の組み合わせ回路間とは、例えば内部回路内の組み合わせ回路同士の間はもちろん、ＩＯ（入出力）領域内の入力バッファと内部回路内の組み合わせ回路間、内部回路内の組み合わせ回路とＩＯ領域内の出力バッファ間なども含まれるものとする。
【００２２】
８個のフリップフロップ１２のうち、図１中上側４個のフリップフロップは、クロックツリー１４からクロック信号が正相で分配され、この正相のクロック信号の立ち上がりエッジに同期して動作する正エッジフリップフロップ１２ａである。これに対し、下側４個のフリップフロップは、クロックツリー１４からクロック信号が逆相で分配され、この逆相のクロック信号の立ち下がりエッジに同期して動作する負エッジフリップフロップ１２ｂである。
【００２３】
正エッジフリップフロップ１２ａは、正相のクロック信号の立ち上がりエッジに同期して動作し、そのデータ入力端子（図示省略）に入力される入力データを保持するとともに、そのデータ出力端子（図示省略）から出力する。これとは逆に、負エッジフリップフロップ１２ｂは、逆相のクロック信号の立ち下がりエッジに同期して動作し、そのデータ入力端子に入力されるデータを保持するとともに、そのデータ出力端子（図示省略）から出力する。
【００２４】
次に、クロックツリー１４は、４個の正エッジフリップフロップ１２ａに正相のクロック信号を分配し、４個の負エッジフリップフロップ１２ｂに逆相のクロック信号を分配するものである。クロックツリー１４は、クロック源に非反転バッファを介して接続され、４個の正エッジフリップフロップ１２ａに正相のクロック信号を供給する第１の枝１４ａと、同一のクロック源に反転バッファを介して接続され、４個の負エッジフリップフロップ１２ｂに逆相のクロック信号を供給する第２の枝１４ｂとを備えている。
【００２５】
ここで、第１の枝１４ａは、７個の非反転バッファによって構成されている。初段の非反転バッファの入力は、ルートバッファ１６を介してクロック源に接続され、その出力は、２段目の２つの非反転バッファの入力に各々接続されている。また、２段目の２つの非反転バッファの出力は、それぞれ３段目の２つの非反転バッファの入力に接続され、３段目の４個の非反転バッファの出力が、それぞれ４個の正エッジフリップフロップ１２ａのクロック入力端子に接続されている。
【００２６】
一方、第２の枝１４ｂは、１つの反転バッファと、６個の非反転バッファとによって構成されている。初段の反転バッファの入力は、同じくルートバッファ１６を介してクロック源に接続され、その出力は、２段目の２つの非反転バッファの入力に各々接続されている。また、２段目の２つの非反転バッファの出力は、それぞれ３段目の２つの非反転バッファの入力に接続され、３段目の非反転バッファの出力が、それぞれ４個の負エッジフリップフロップ１２ｂの反転クロック入力端子に接続されている。
【００２７】
なお、半導体集積回路１０では、フリップフロップ１２とクロックツリー１４以外にも、メモリ回路や組み合わせ回路等を含む、各種の回路を搭載することが可能である。また、フリップフロップ１２の個数も限定されない。クロックツリー１４の段数は、クロック信号が分配されるフリップフロップ１２の個数に応じて数段〜数十段になる場合もあるので、その段数や、どのようにクロック信号を分配するかは適宜決定すれば良い。
【００２８】
次に、半導体集積回路１０の動作を説明する。
【００２９】
クロックツリー１４の第１の枝１４ａ側では、ルートバッファ１６を介してクロック源から供給されるクロック信号が各々の非反転バッファによって４つの正相のクロック信号に分配され、ほぼ同じ立ち上がりタイミングの４つの正相のクロック信号が、４個の正エッジフリップフロップ１２ａのそれぞれのクロック入力端子に供給される。４個の正エッジフリップフロップ１２ａは、正相のクロック信号の立ち上がりエッジのタイミングでデータを保持する。
【００３０】
一方、第２の枝１４ｂ側では、同じくルートバッファ１６を介してクロック源から供給されるクロック信号が初段の反転バッファによって反転され、さらに２段目および３段目の非反転バッファによって４つの逆相のクロック信号に分配されて、ほぼ同じ立ち下がりタイミングの４つの逆相のクロック信号が、４個の負エッジフリップフロップ１２ｂのそれぞれのクロック入力端子に供給される。４個の負エッジフリップフロップ１２ｂは、逆相のクロック信号の立ち下がりエッジのタイミングでデータを保持する。
【００３１】
なお、正相のクロック信号の立ち上がりエッジのタイミングと逆相のクロック信号の立ち下がりエッジのタイミングはほぼ同じである。その結果、全てのフリップフロップ１２は、同じタイミングでデータを保持する。すなわち、本実施形態の半導体集積回路１０は、図４に示す従来の半導体集積回路３０と同様に動作する。
【００３２】
また、本実施形態の半導体集積回路１０では、クロックツリー１４の第１の枝１４ａを構成する全ての非反転バッファがほぼ同時に、同じ方向（すなわち、ハイレベルからローレベル、もしくはローレベルからハイレベル）にスイッチングする。これに対し、第２の枝１４ｂを構成する全ての非反転バッファはほぼ同時に、第１の枝１４ａの非反転バッファとは逆の方向にスイッチングする。
【００３３】
上記のように、本実施形態の半導体集積回路１０では、第１の枝１４ａを構成する全ての非反転バッファと、第２の枝１４ｂを構成する全ての非反転バッファとが逆方向にスイッチングする。このため、第１の枝１４ａと第２の枝１４ｂとの間で、全てのバッファが同時にスイッチングする時に電源およびグランドのそれぞれに流れるピーク電流を低減することができる。これによって、ノイズの発生やＩＲドロップを大幅に低減することができ、ピーク時消費電流を大幅に削減することができる。
【００３４】
なお、正エッジフリップフロップ１２ａと負エッジフリップフロップ１２ｂを同数にした場合に最も高い効果を得ることができるのは当然である。しかし、これに限定されず、両者を混在させることによって、その混在の割合に応じて、クロックツリー１４における全てのバッファが同時にスイッチングする時のピーク電流を低減することができるので、効果の違いはあっても、ノイズの発生やＩＲドロップを確実に低減することができる。
【００３５】
また、半導体集積回路１０は、逆相のクロック信号を生成するために、非反転バッファの一部を反転バッファに変更し、かつ、正エッジフリップフロップ１２ａの一部を負エッジフリップフロップ１２ｂに変更するだけという簡単な構成で実現できるので、回路設計時の負担も少ないという利点もある。
【００３６】
また、半導体集積回路１０が複数の回路ブロックを含む場合、複数の回路ブロックのそれぞれが、正エッジフリップフロップ１２ａと負エッジフリップフロップ１２ｂとの両方を含むのが好ましい。しかし、ある特定の回路ブロックの中だけに、正エッジフリップフロップ１２ａと負エッジフリップフロップ１２ｂの両方を含めるようにしても良いし、ある回路ブロックには正エッジフリップフロップ１２ａだけを含め、別の回路ブロックには負エッジフリップフロップ１２ｂだけを含めるように構成しても良い。
【００３７】
また、図２に示すように、例えば同じ回路ブロック内であれば、クロックツリー１４によって生成される正相のクロック信号の配線と逆相のクロック信号の配線とを並走させる方が好ましい。このように、正相のクロック信号の配線と逆相のクロック信号の配線とを並走させることによって、例えば特開平８−２３６７０４号公報等にも開示されているように、信号配線を流れる電流によって発生する磁界を相殺することができ、クロストークノイズの発生を低減させることができる。
【００３８】
次に、本発明の半導体集積回路の設計方法について説明する。
【００３９】
本発明の半導体集積回路の設計方法は、同期回路を有する半導体集積回路の設計方法であって、同期回路が有する複数のフリップフロップとして、クロックツリーからクロック信号が正相で分配され、この正相のクロック信号の立ち上がりエッジに同期して動作する正エッジフリップフロップと、クロックツリーからクロック信号が逆相で分配され、この逆相のクロック信号の立ち下がりエッジに同期して動作する負エッジフリップフロップとを混在させることを特徴とするものである。
【００４０】
この場合、上記のように、両者を混在させるための具体的な手法として、例えば下記（１）〜（３）の手法を挙げることが出来る。
【００４１】
（１）論理仕様決定後、ＲＴＬ（レジスタ・トランスファ・レベル：Register Transfer Level）データ生成の際に、正エッジフリップフロップ１２ａと負エッジフリップフロップ１２ｂとを混在させて生成する。
【００４２】
例えば、下記example 1の記述のＲＴＬデータに基づいて論理合成をすると、図４に示す従来の半導体集積回路３０のように、８個全てのフリップフロップが、クロック信号の立ち上がりエッジでデータを保持する回路が合成される。
【００４３】
(Example 1)
module example1 (RESET_N, CLOCK, DATA_IN, DATA_OUT);
input  RESET_N, CLOCK;
input  [7:0]DATA_IN;
output [7:0]DATA_OUT;
reg    [7:0]DATA_OUT;
always @ (negedge RESET_N or posedge CLOCK)
if (!RESET_N)
DATA_OUT <= 8'h00;
else
DATA_OUT <= DATA_IN;
endmodule
【００４４】
これに対し、下記example 2のように記述を変更したＲＴＬデータに基づいて論理合成をすると、図１に示す本実施形態の半導体集積回路１０のように、８個のフリップフロップのうち、４個のフリップフロップ［３：０］が、クロック信号の立ち上がりエッジでデータを保持し、残りの４個のフリップフロップ［７：４］が、クロック信号の立ち下がりエッジでデータを保持する回路を合成することができる。
【００４５】
(Example 2)
module example2 (RESET_N, CLOCK, DATA_IN, DATA_OUT);
input  RESET_N, CLOCK;
input  [7:0]DATA_IN;
output [7:0]DATA_OUT;
reg    [7:0]DATA_OUT;
assign CLOCK_N = ~CLOCK;
always @ (negedge RESET_N or posedge CLOCK)
if (!RESET_N)
DATA_OUT[3:0] <= 8'h00;
else
DATA_OUT[3:0] <= DATA_IN[3:0];
always @ (negedge RESET_N or negedge CLOCK_N)
if (!RESET_N)
DATA_OUT[7:4] <= 8'h00;
else
DATA_OUT[7:4] <= DATA_IN[7:4];
endmodule
【００４６】
（２）論理合成において、複数のフリップフロップとして正エッジフリップフロップのみを配置し、その後、正エッジフリップフロップの一部を負エッジフリップフロップに置き換える。
【００４７】
上記（１）のexample 1の記述のＲＴＬデータを用いて論理合成された回路は、例えば下記example 3の記述のように、８個の正エッジフリップフロップＤＦＦＰ［７：０］のみが配置された記述の回路構成となる。
【００４８】
(Example 3)
module example3 (RESET_N, CLOCK, DATA_IN, DATA_OUT);
input  [7:0]DATA_IN;
output [7:0]DATA_OUT;
input  RESET_N, CLOCK;
DFFP DATA_OUT_reg_7A (.Q(DATA_OUT[7]), .CK(CLOCK), .D(DATA_IN[7]), .RB(RESET_N));
DFFP DATA_OUT_reg_6A (.Q(DATA_OUT[6]), .CK(CLOCK), .D(DATA_IN[6]), .RB(RESET_N));
DFFP DATA_OUT_reg_5A (.Q(DATA_OUT[5]), .CK(CLOCK), .D(DATA_IN[5]), .RB(RESET_N));
DFFP DATA_OUT_reg_4A (.Q(DATA_OUT[4]), .CK(CLOCK), .D(DATA_IN[4]), .RB(RESET_N));
DFFP DATA_OUT_reg_3A (.Q(DATA_OUT[3]), .CK(CLOCK), .D(DATA_IN[3]), .RB(RESET_N));
DFFP DATA_OUT_reg_2A (.Q(DATA_OUT[2]), .CK(CLOCK), .D(DATA_IN[2]), .RB(RESET_N));
DFFP DATA_OUT_reg_1A (.Q(DATA_OUT[1]), .CK(CLOCK), .D(DATA_IN[1]), .RB(RESET_N));
DFFP DATA_OUT_reg_0A (.Q(DATA_OUT[0]), .CK(CLOCK), .D(DATA_IN[0]), .RB(RESET_N));
endmodule
【００４９】
これに対し、下記example 4のように記述を書き換えると、図１に示す本実施形態の半導体集積回路１０のように、８個のフリップフロップのうち、４個のフリップフロップＤＦＦＰ［３：０］が、クロック信号の立ち上がりエッジでデータを保持し、残りの４個のフリップフロップＤＦＦＮ［７：４］が、クロック信号の立ち下がりエッジでデータを保持する回路を合成することができる。
【００５０】
(Example 4)
module example4 (RESET_N, CLOCK, DATA_IN, DATA_OUT);
input  [7:0]DATA_IN;
output [7:0]DATA_OUT;
input  RESET_N, CLOCK;
INV X3X (.Z(CLOCK_N), .A(CLOCK));
DFFN DATA_OUT_reg_7A (.Q(DATA_OUT[7]), .CK(CLOCK_N), .D(DATA_IN[7]), .RB(RESET_N));
DFFN DATA_OUT_reg_6A (.Q(DATA_OUT[6]), .CK(CLOCK_N), .D(DATA_IN[6]), .RB(RESET_N));
DFFN DATA_OUT_reg_5A (.Q(DATA_OUT[5]), .CK(CLOCK_N), .D(DATA_IN[5]), .RB(RESET_N));
DFFN DATA_OUT_reg_4A (.Q(DATA_OUT[4]), .CK(CLOCK_N), .D(DATA_IN[4]), .RB(RESET_N));
DFFP DATA_OUT_reg_3A (.Q(DATA_OUT[3]), .CK(CLOCK), .D(DATA_IN[3]), .RB(RESET_N));
DFFP DATA_OUT_reg_2A (.Q(DATA_OUT[2]), .CK(CLOCK), .D(DATA_IN[2]), .RB(RESET_N));
DFFP DATA_OUT_reg_1A (.Q(DATA_OUT[1]), .CK(CLOCK), .D(DATA_IN[1]), .RB(RESET_N));
DFFP DATA_OUT_reg_0A (.Q(DATA_OUT[0]), .CK(CLOCK), .D(DATA_IN[0]), .RB(RESET_N));
endmodule
【００５１】
なお、上記example 3, example 4の記述において、それぞれＤＦＦＰは正エッジフリップフロップ、ＤＦＦＮは負エッジフリップフロップ、ＩＮＶはインバータのセル名を表す。（２）の手法は、（１）の手法と比べて、正エッジフリップフロップを必要数だけ１つずつ負エッジフリップフロップに書き換える必要があるので、その分だけ設計の手間が増えるが、例えばソフトウェアで変換プログラムを作成して一括変換させることも可能である。
【００５２】
また、上記（１）および（２）のexample 1〜example 4の記述では、クロックツリーは構成されない。図１に示すクロックツリー１４に相当する部分の記述は存在していない。クロックツリーは、前述のように、半導体集積回路１０に搭載されるトランジスタ数が数百万以上になる場合もあるため、通常、次に述べるクロックツリー合成ツールを利用して生成されるのが一般的である。
【００５３】
（３）スキャンパス挿入ツール（Scan Insertion Tool）もしくはクロックツリー合成ツール（ＣＴＳ：Clock Tree Synthesis Tool）のアルゴリズムを変えて、正エッジフリップフロップと負エッジフリップフロップとを混在させる。
【００５４】
前述の通り、クロックツリーは、クロックツリー合成ツールを使用して自動生成するのが一般的である。また、スキャンパステストを行う場合、スキャンパス挿入ツールを使用して、フリップフロップをスキャンテスト用のスキャンフリップフロップに自動置換するのが一般的である。これらのクロックツリー合成ツールやスキャンパス挿入ツールは、一般的にＥＤＡ（Electronic Design Automation）ツールと呼ばれている。
【００５５】
従来のＥＤＡツールでは、クロック信号の極性が変更されることはなかったが、例えばクロックツリー合成ツールでクロックツリーを合成する時に、図１に示すようなクロックツリー１４を合成し、なおかつ８個のフリップフロップ１２のうち、４個のフリップフロップを負エッジフリップフロップ１２ｂに変更するようにツールのアルゴリズムを変更することで図１に示す半導体集積回路１０を実現できる。
【００５６】
また、例えばスキャンパス挿入ツールを使用してフリップフロップをスキャンフリップフロップに置換する時に、８個のフリップフロップ１２のうち、４個のフリップフロップを正エッジのスキャンフリップフロップに置換し、残りの４個のフリップフロップを負エッジのスキャンフリップフロップに置換するようにツールのアルゴリズムを変更することで、フリップフロップ１２の一部を負エッジのスキャンフリップフロップに変更できる。
【００５７】
なお、本発明の半導体集積回路の設計方法は、上記（１）〜（３）の具体例に限定されず、正エッジフリップフロップと負エッジフリップフロップとを混在させることができるどのような具体的な手法を用いても良い。
【００５８】
本発明は、基本的に以上のようなものである。
以上、本発明の半導体集積回路およびその設計方法について詳細に説明したが、本発明は上記実施形態に限定されず、本発明の主旨を逸脱しない範囲において、種々の改良や変更をしてもよいのはもちろんである。
【図面の簡単な説明】
【００５９】
【図１】本発明の半導体集積回路の構成を表す一実施形態の回路図である。
【図２】正相のクロック信号の配線と逆相のクロック信号の配線とを並走させた状態を表す回路図である。
【図３】組み合わせ回路を有する半導体集積回路の構成を表す概念図である。
【図４】従来の半導体集積回路の構成を表す一例の回路図である。
【符号の説明】
【００６０】
１０，２０，３０  半導体集積回路
１２，２４ａ，２４ｂ，３２  フリップフロップ
１４，３４  クロックツリー
１２ａ  正エッジフリップフロップ
１２ｂ  負エッジフリップフロップ
１４ａ  第１の枝
１４ｂ  第２の枝
１６  ルートバッファ
２６  組み合わせ回路
【図１】
2007110403.tif 000003
【図２】
2007110403.tif 000004
【図３】
2007110403.tif 000005
【図４】
2007110403.tif 000006