以下、本技術を実施するための形態(以下、実施の形態と称する)について説明する。説明は以下の順序により行う。
1.第1の実施の形態(クロックスキューを低減するためのクロック分配回路の例)
2.第2の実施の形態(クロック信号の遅延のばらつきを適応的に低減するための主/副クロック分配回路の例)
3.第3の実施の形態(クロック分配回路駆動電圧を論理回路駆動電圧より低く制御する電圧制御の例)
4.第4の実施の形態(タイミングエラーの種類を判別して駆動電圧を制御する電圧制御の例)
<1.第1の実施の形態>
[集積回路の構成例]
図1は、第1の実施の形態における集積回路100の一構成例を示すブロック図である。この第1の実施の形態における集積回路100は、電源供給部200、クロック生成部300、クロック分配部400および同期動作回路500を備える。
電源供給部200は、クロック生成部300、クロック分配部400および同期動作回路500のそれぞれに信号線209を介して電源電圧VDDを供給するものである。
クロック生成部300は、PLL(Phase Locked Loop)などを用いて所定の周波数のクロック信号CLKを生成するものである。クロック信号CLKは、同期動作回路500に所定のタイミングを指示するための信号として生成される。クロック生成部300は、生成したクロック信号CLKをクロック分配部400に信号線309を介して出力する。
クロック分配部400は、同期動作回路500にクロック信号CLKを分配するものである。クロック分配部400は、クロック信号CLKから最小遅延クロック信号mCLKを生成する。最小遅延クロック信号mCLKの詳細については後述する。クロック分配部400は、最小遅延クロック信号mCLKを同期動作回路500に信号線409を介して出力する。同期動作回路500は、最小遅延クロック信号mCLKに同期して動作する回路である。
[クロック分配部の構成例]
図2は、第1の実施の形態におけるクロック分配部400の一構成例を示す図である。図2(a)は、クロック分配部400における複数の分配点のそれぞれまでの配線の配置例を示す図である。図2(a)に例示するように、クロック分配部400は、H木型に配線されたクロック木を備える。このクロック木における経路には必要に応じて複数のバッファが挿入されている。クロック生成部300からのクロック信号CLKがクロック木の根の部分に入力され、そのクロック信号CLKがクロック木の葉の部分に相当する分配点のそれぞれに分配される。分配点のそれぞれには、同期動作回路500などが接続される。図2(b)は、図2(a)の一点鎖線で囲まれた部分を拡大した図である。図2(b)に示すように、分配点のうち分配点P1およびP2は、OR(論理和)ゲート430の入力端子に接続されている。そして、そのORゲート430の出力端子が同期動作回路500に接続されている。同期動作回路500の構成の詳細については後述する。
ORゲート430は、入力値の論理和を生成するものである。ORゲート430は、分配点P1からのクロック信号と分配点P2からのクロック信号との論理和を同期動作回路500に出力する。ここで、クロック木において分岐した配線のそれぞれは分配点に至るまでの間に合流することがないため、クロック木の根から分配点P1までの回路と、その根から分配点P2までの回路とは互いに構成が異なるものとなる。例えば、配線長や経由するバッファの段数などが異なる。このため、分配点P1およびP2のそれぞれに分配されるクロック信号CLKの遅延時間には差(すなわち、クロックスキュー)が生じうる。分配点P1およびP2の間のユークリッド距離が近いか否かに関わらず、クロック木におけるトポロジ上の距離が大きい場合は、それらの分配点においてクロックスキューが大きくなり易い。また、電源供給部200からの供給電圧VDDが低下した場合には、クロックスキューのばらつきがさらに大きくなるおそれがある。しかし、ORゲート430は、分配点P1およびP2のそれぞれに分配されるクロック信号CLKの論理和を出力するため、それらのクロック信号CLKの立上りエッジのうち、遅延の小さい方の立上りエッジが出力されることになる。このORゲート430が出力した遅延の少ない方のクロック信号を以下では「最小遅延クロック信号mCLK」と称する。
図3は、第1の実施の形態におけるクロック分配部400および同期動作回路500の一構成例を示す回路図である。クロック分配部400は、クロック分配回路410および420とORゲート430とを備える。クロック分配回路410は、所定の段数のバッファ411を備える。クロック分配回路420は、所定の段数のバッファ421を備える。クロック分配回路410は、クロック木におけるいずれかの分配点(例えば、P1)にクロック信号CLKを分配するものである。クロック分配回路410は、分配したクロック信号のいずれかを遅延クロック信号CLK_D1として、ORゲート430の入力端子へ信号線419を介して出力する。クロック分配回路420は、クロック分配回路410が分配する分配点と異なる分配点(例えば、P2)にクロック信号CLKを分配するものである。クロック分配回路420は、分配したクロック信号のいずれかを遅延クロック信号CLK_D2として、ORゲート430の入力端子へ信号線429を介して出力する。なお、クロック分配回路410は、特許請求の範囲に記載の第1のタイミング信号分配回路の一例である。クロック分配回路420は、特許請求の範囲に記載の第2のタイミング信号分配回路の一例である。
ORゲート430は、遅延クロック信号CLK_D1およびCLK_D2の論理和を最小遅延クロック信号mCLKとして、同期動作回路500に信号線409を介して出力するものである。なお、ORゲート430は、特許請求の範囲に記載の最小遅延クロック信号出力部の一例である。
同期動作回路500は、最小遅延クロック信号mCLKに同期して動作するものである。同期動作回路500は、例えば、フリップフロップ510および520を備える。フリップフロップ510および520は、最小遅延クロック信号mCLKに同期してデータを取り込んで保持するものである。フリップフロップ510は、例えば、入力信号D0のデータを最小遅延クロック信号mCLKの立上りエッジに同期して取り込んで保持し、保持したデータをフリップフロップ520へ出力信号Q0として出力する。そして、フリップフロップ520は、出力信号Q0のデータを最小遅延クロック信号mCLKの立上りエッジに同期して取り込んで保持し、保持したデータを出力信号Q1として出力する。
図4は、第1の実施の形態におけるクロック信号の立上りに同期した同期動作回路500の動作の一例を示すタイミングチャートである。入力信号D0の値が「d2」から「d3」に更新される前のあるタイミングでクロック信号CLKに立上りエッジが生じた場合を考える。クロック信号CLKがクロック分配回路410により分配され、クロック信号CLKに対して遅延して遅延クロック信号CLK_D1に立上りエッジが生じる。また、クロック信号CLKがクロック分配回路420により分配され、遅延クロック信号CLK_D2に立上りエッジが生じる。遅延クロック信号CLK_D1の遅延は、遅延クロック信号CLK_D2より大きいものとする。ORゲート430は、これらの遅延クロック信号の論理和を最小遅延クロック信号mCLKとして出力する。遅延クロック信号のいずれかに立上りエッジが生じれば、その論理和の値は「1」となるため、遅延の最も小さい遅延クロック信号CLK_D2の立上りに応じて最小遅延クロック信号mCLKに立上りエッジが生じる。フリップフロップ510は、最小遅延クロック信号mCLKの立上りエッジに同期して「d2」の値を取り込んで出力信号Q0としてフリップフロップ520へ出力する。フリップフロップ520は、次の最小遅延クロック信号mCLKの立上りエッジに同期して「d2」の値を取り込む。
仮にORゲート430を介さずに、遅延クロック信号CLK_D1およびCLK_D2をそれぞれフリップフロップ510および520に与えると、それらの遅延クロック信号の遅延時間に差(クロックスキュー)が生じることがある。このクロックスキューが増大すると、フリップフロップ510および520間でのデータの受け渡しに支障が生じ、誤動作が生じる可能性がある。特に、駆動電圧を低下させるとクロックスキューのばらつきが増大するため、誤動作が生じる確率が高くなる。しかし、集積回路100ではORゲート430により、遅延が最小のクロック信号mCLKをフリップフロップ510および520に供給しているため、クロックスキューが小さくなる。この結果、集積回路100の誤動作の発生率が低減する。
ORゲート430を挿入したクロック木のクロックスキューのばらつき(例えば、標準偏差)の測定値は、ORゲート430を挿入しないクロック木よりも小さくなる。例えば、バッファを10段にして所定の条件下においてシミュレーションを行った場合に、ORゲート430の挿入により、標準偏差の測定値が挿入前の約0.7倍に低減するといった結果が得られている。クロック木においては、一般にバッファサイズを増加するか、バッファの段数を減らすと、クロックスキューのばらつきが低下する。クロックスキューのばらつきを0.7倍にするには、例えば、バッファサイズを2倍にするか、バッファの段数を半分にする必要がある。ORゲート430を挿入することにより、バッファサイズやバッファの段数を変更することなく、クロックスキューを低減させることができる。また、ORゲート430を挿入してもメッシュ配線のように短絡電流が生じないため、電力消費量が増大しない。
このように、第1の実施の形態によれば、クロック分配回路410がクロック信号CLKを分配点P1に分配し、クロック分配回路420がクロック信号CLKを分配点P2に分配する。そして、ORゲート430は、それらの分配点に分配されたクロック信号CLKのうち遅延が小さい方の信号を最小遅延タイミング信号mCLKとして出力する。同期動作回路500は最小遅延タイミング信号mCLKに同期して動作する。これにより、クロック分配回路410および420によって分配された、それぞれのクロック信号CLKのうち遅延の小さい方の信号が、最小遅延タイミング信号mCLKとして同期動作回路500に出力される。これにより、同期動作回路500におけるクロックスキューが低減する。また、クロック分配回路410および420からのそれぞれのクロック信号CLKの値が異なる場合であっても、メッシュ配線のように短絡電流が生じないため、電力消費量の増大が抑制される。
なお、ORゲート430は、2つの遅延クロック信号CLK_D1およびCLK_D2から最小遅延タイミング信号mCLKを生成しているが、3つ以上の遅延クロック信号から最小遅延タイミング信号mCLKを生成してもよい。
また、同期動作回路500は、2個のフリップフロップ510および520を備えているが、同期動作回路500の回路構成は、この構成に限定されない。例えば、1個または3個以上のフリップフロップを備えてもよい。
また、集積回路100は、ORゲート430を使用して最小遅延タイミング信号mCLKを生成する構成としているが、ORゲート以外の論理ゲートによって最小遅延タイミング信号mCLKを生成してもよい。例えば、同期動作回路500が立下りエッジに同期して動作する場合、集積回路100は、ORゲートに代えてANDゲートによって最小遅延タイミング信号mCLKを生成してもよい。
また、クロック分配部400は予めH木型に配線されたクロック木を備える構成としているが、例えば、クロック木を自動合成する技術であるCTS(Clock Tree Synthesis)を使用して生成したクロック木を備えてもよい。
[第1の変形例]
図5は、第1の実施の形態における第1の変形例におけるクロック分配部400および同期動作回路500の一構成例を示す回路図である。第1の変形例におけるクロック分配部400の構成は、ORゲート430に代えてNOR(否定論理和)ゲート431を備える点において、第1の実施の形態と異なる。第1の変形例における同期動作回路500の構成は、インバータ530および540をさらに備える点において、第1の実施の形態と異なる。
NORゲート431は、遅延クロック信号CLK_D1およびCLK_D2の否定論理和を最小遅延クロック信号mCLKとして同期動作回路500に出力するものである。インバータ530は、最小遅延クロック信号mCLKを反転してフリップフロップ510に出力するものである。インバータ540は、最小遅延クロック信号mCLKを反転してフリップフロップ520に出力するものである。
このように第1の変形例によれば、フリップフロップ510および520のクロック入力端子にインバータが設けられた構成において、クロックスキューを低減することができる。
[第2の変形例]
図6は、第1の実施の形態における第2の変形例におけるクロック分配部400および同期動作回路500の一構成例を示す回路図である。第2の変形例におけるクロック分配部400の構成は、ORゲート430に代えてNOR(否定論理和)ゲート431を備える点において、第1の実施の形態と異なる。この第2の変形例における同期動作回路500の構成は、インバータ530および540とメッシュ配線550をさらに備える点において、第1の実施の形態と異なる。
NORゲート431の構成は、第1の変形例と同様である。インバータ530および540は、最小遅延クロック信号mCLKを反転してメッシュ配線550に出力するものである。メッシュ配線550は、格子状に配置された複数の領域に最小遅延クロック信号mCLKを分配するものである。これらの領域にフリップフロップ510および520などが配置される。
このように第2の変形例によれば、メッシュ配線550によりフリップフロップ510および520のクロック入力端子に接続する構成においてクロックスキューを低減することができる。
[第3の変形例]
図7は、第1の実施の形態における第3の変形例におけるクロック分配部400および同期動作回路500の一構成例を示す回路図である。上述の第1の実施の形態では同期動作回路500がクロック信号の立上りエッジにより動作することを想定していたが、この第3の変形例では、同期動作回路500がクロック信号の立下りエッジにより動作することを想定する。具体的には、第3の変形例におけるクロック分配部400の構成は、ORゲート430に代えてAND(論理積)ゲート432を備える点において、第1の実施の形態と異なる。第3の変形例における同期動作回路500の構成は、フリップフロップ510および520に代えてフリップフロップ560および570を備える点において、第1の実施の形態と異なる。
ANDゲート432は、遅延クロック信号CLK_D1およびCLK_D2の論理積を最小遅延クロック信号mCLKとして同期動作回路500に出力するものである。フリップフロップ560および570は、最小遅延クロック信号mCLKの立下りエッジに同期してデータを取り込み、保持するものである。
図8は、第1の実施の形態における第3の変形例におけるクロック信号の立上りに同期した同期動作回路500の動作の一例を示すタイミングチャートである。入力信号D0の値が「d2」から「d3」に更新される前のあるタイミングでクロック信号CLKに立下りエッジが生じた場合を考える。クロック信号CLKがクロック分配回路410により分配され、クロック信号CLKに対して遅延して遅延クロック信号CLK_D1に立下りエッジが生じる。また、クロック信号CLKがクロック分配回路420により分配され、遅延クロック信号CLK_D2に立上りエッジが生じる。遅延クロック信号CLK_D1の遅延は、遅延クロック信号CLK_D2より大きいものとする。ORゲート430は、これらの遅延クロック信号の論理積を最小遅延クロック信号mCLKとして出力する。遅延クロック信号のいずれかに立下りエッジが生じれば、その論理和の値は「0」となるため、遅延の最も小さい遅延クロック信号CLK_D2の立下りに応じて最小遅延クロック信号mCLKに立下りエッジが生じる。フリップフロップ560は、最小遅延クロック信号mCLKの立下りエッジに同期して「d2」の値を取り込んで出力信号Q0としてフリップフロップ570へ出力する。フリップフロップ570は、次の最小遅延クロック信号mCLKの立下りエッジに同期して「d2」の値を取り込む。
このように第3の変形例によれば、同期動作回路500がクロック信号の立下りエッジに同期して動作する構成において、クロックスキューを低減することができる。
[第4の変形例]
図9は、第1の実施の形態における第4の変形例におけるクロック分配部400および同期動作回路500の一構成例を示す回路図である。この第4の変形例においても第3の変形例と同様に同期動作回路500が立下りエッジにより動作することを想定する。第4の変形例におけるクロック分配部400の構成は、ORゲート430に代えてNAND(否定論理積)ゲート433を備える点において、第1の実施の形態と異なる。第4の変形例における同期動作回路500の構成は、フリップフロップ510および520に代えてフリップフロップ560および570を備え、インバータ530および540をさらに備える点において、第1の実施の形態と異なる。
NANDゲート433は、遅延クロック信号CLK_D1およびCLK_D2の否定論理積を最小遅延クロック信号mCLKとして同期動作回路500に出力するものである。インバータ530は、最小遅延クロック信号mCLKを反転してフリップフロップ560に出力するものである。インバータ540は、最小遅延クロック信号mCLKを反転してフリップフロップ570に出力するものである。フリップフロップ560および570は、最小遅延クロック信号mCLKの立下りエッジに同期してデータを取り込み、保持するものである。
このように第4の変形例によれば、フリップフロップ560および570のクロック入力端子にインバータが設けられ、同期動作回路500がクロック信号の立下りエッジに同期して動作する構成において、クロックスキューを低減することができる。
[第5の変形例]
図10は、第1の実施の形態における第5の変形例におけるクロック分配部400および同期動作回路500の一構成例を示す回路図である。この第5の変形例においても第3の変形例と同様に同期動作回路500が立下りエッジにより動作することを想定する。第5の変形例におけるクロック分配部400の構成は、ORゲート430に代えてNANDゲート433を備える点において、第1の実施の形態と異なる。第5の変形例における同期動作回路500の構成は、フリップフロップ510および520に代えてフリップフロップ560および570を備える点において、第1の実施の形態と異なる。また、第5の変形例における同期動作回路500の構成は、インバータ530および540とメッシュ配線550をさらに備える点において、第1の実施の形態と異なる。
NANDゲート433の構成は、第4の変形例と同様である。インバータ530および540とメッシュ配線550との構成は、第2の変形例と同様である。フリップフロップ560および570の構成は、第4の変形例と同様である。
このように第5の変形例によれば、メッシュ配線にフリップフロップ560および570のクロック入力端子が接続され、同期動作回路500がクロック信号の立下りエッジに同期して動作する構成において、クロックスキューを低減することができる。
<2.第2の実施の形態>
[集積回路の構成例]
図11は、第2の実施の形態における集積回路100の一構成例を示すブロック図である。この第2の実施の形態における集積回路100は、電源供給部200、クロック生成部300、クロック分配部400、同期動作回路500、エラー測定部600およびクロック分配回路制御部700を備える。
電源供給部200は、クロック生成部300、クロック分配部400、同期動作回路500、エラー測定部600およびクロック分配回路制御部700のそれぞれに信号線209を介して電源電圧VDDを供給するものである。
クロック生成部300は、PLLなどを用いて所定の周波数のクロック信号CLKを生成するものである。クロック信号CLKは、同期動作回路500に所定のタイミングを指示するための信号として生成される。クロック生成部300は、生成したクロック信号CLKをクロック分配部400に信号線309を介して出力する。
クロック分配部400は、同期動作回路500にクロック信号CLKを分配するものである。クロック分配部400は、クロック信号CLKから最小遅延クロック信号mCLKを生成する。クロック分配部400は、最小遅延クロック信号mCLKを同期動作回路500に信号線409を介して出力する。同期動作回路500は、最小遅延クロック信号mCLKに同期して動作する回路である。
エラー測定部600は、同期動作回路500に生じたタイミングエラーを検出し、その検出頻度を測定するものである。タイミングエラーの検出頻度は、例えば、一定の計測周期内のエラー数を計数することにより測定される。エラー測定部600は、クロック分配回路制御部700の制御に従ってタイミングエラーの数を計数し、その計数値をクロック分配回路制御部700に信号線609を介して出力する。なお、エラー測定部600は、特許請求の範囲に記載の測定部の一例である。
クロック分配回路制御部700は、タイミングエラーの検出頻度に基づいてクロック分配部400を制御するものである。具体的には、クロック分配回路制御部700は、電源供給部200からの供給電圧VDDが所定電圧以下になったときにエラー測定部600を制御してタイミングエラー数の測定を開始させる。そして、クロック分配回路制御部700は、検出されたタイミングエラーの検出頻度に基づいてイネーブル信号En_MおよびEn_Sを生成する。イネーブル信号En_MおよびEn_Sの詳細については、後述する。クロック分配回路制御部700は、イネーブル信号En_MおよびEn_Sをクロック分配部400に信号線708および709を介して出力する。なお、クロック分配回路制御部700は、特許請求の範囲に記載のタイミング信号分配回路制御部の一例である。
[クロック分配部の構成例]
図12は、第2の実施の形態におけるクロック分配部400および同期動作回路500の一構成例を示す回路図である。第2の実施の形態のクロック分配部400は、主クロック分配回路440と、副クロック分配回路450と、ORゲート461および462とを備える。第2の実施の形態の同期動作回路500は、フリップフロップ510および520を備える。
主クロック分配回路440は、イネーブル信号En_Mに従ってクロック信号CLKを分岐させて複数のクロック信号を生成し、それらの信号を分配するものである。主クロック分配回路440において分岐されたそれぞれのクロック信号を以下では「主クロック信号」と称する。ここで、主クロック分配回路440は、複数の経路を備え、それらのうちの2つを経路M_AおよびM_Bとする。そして、経路M_Aを経由して分配された主クロック信号をCLK_M_Aとし、経路M_Bを経由して分配された主クロック信号をCLK_M_Bとする。なお、主クロック分配回路440は、特許請求の範囲に記載の主タイミング信号分配回路の一例である。
副クロック分配回路450は、イネーブル信号En_Sに従ってクロック信号CLKを分岐させて複数のクロック信号を生成し、それらの信号を分配するものである。副クロック分配回路450において分岐されたそれぞれのクロック信号を以下では「副クロック信号」と称する。ここで、主クロック分配回路440は、複数の経路を備え、それらのうちの2つを経路S_AおよびS_Bとする。そして、経路S_Aを経由して分配された副クロック信号をCLK_S_Aとし、経路S_Aを経由して分配された副クロック信号をCLK_S_Bとする。なお、副クロック分配回路450は、特許請求の範囲に記載の副タイミング信号分配回路の一例である。
ここで、主クロック分配回路440は、同期動作回路500を動作させる場合において、オン状態のイネーブル信号En_Mにより常に活性化される。一方、副クロック分配回路450は、初期状態においてオフ状態のイネーブル信号En_Sにより不活性化される。そして、副クロック分配回路450は、同期動作回路500においてタイミングエラーの検出頻度が所定値より高くなったときに活性化される。ここで、イネーブル信号En_Sは、En_S_Root、En_S_AおよびEn_S_Bを含む。そして、副クロック分配回路450おける経路S_Aは、イネーブル信号En_S_RootおよびEn_S_Aをオン状態にすることにより活性化される。一方、副クロック分配回路450おける経路S_Bは、イネーブル信号En_S_RootおよびEn_S_Bをオン状態にすることにより活性化される。
ORゲート461および462は、それぞれの入力値の論理和を生成するものである。ORゲート461は、入力端子を2つ備え、それらの入力端子に主クロック信号CLK_M_Aおよび副クロック信号CLK_S_Aが入力される。ORゲート461は、これらの信号の論理和を最小遅延クロック信号mCLK_Aとして同期動作回路500に出力する。ORゲート462は、入力端子を2つ備え、それらの入力端子に主クロック信号CLK_M_Bおよび副クロック信号CLK_S_Bが入力される。ORゲート462は、これらの信号の論理和を最小遅延クロック信号mCLK_Bとして同期動作回路500に出力する。このようにORゲート461および462は、それぞれ主タイミング信号および副タイミング信号の論理和を出力するため、それらの信号の立上りエッジのうち、遅延の小さい方の立上りエッジが出力される。言い換えれば、主タイミング信号および副タイミング信号ののうち先に分配された方の信号が出力される。
なお、ORゲート461および462のそれぞれは、特許請求の範囲に記載のタイミング信号生成部の一例である。また、ORゲート461および462における主クロック信号が入力される端子は、特許請求の範囲に記載の主入力端子の一例である。ORゲート461および462における副クロック信号が入力される端子は、特許請求の範囲に記載の副入力端子の一例である。
フリップフロップ510は、最小遅延クロック信号mCLK_Aに同期してデータを織り込んで保持するものである。フリップフロップ510に入力される入力信号D_Aと、フリップフロップ510からのラッチ出力信号L_Aとは、エラー測定部600に信号線509を介して出力される。ラッチ出力信号L_Aは、マスタスレーブ型のフリップフロップ510におけるマスタ側のラッチの出力信号である。また、エラー測定部600には最小遅延クロック信号mCLK_Aも信号線509を介して出力される。フリップフロップ520は、最小遅延クロック信号mCLK_Bに同期してデータを取り込んで保持するものである。フリップフロップ520に入力される入力信号D_Bと、フリップフロップ510からのラッチ出力信号L_Bとは、エラー測定部600に信号線509を介して出力される。ラッチ出力信号L_Bは、マスタスレーブ側のフリップフロップ520におけるマスタ側のラッチの出力信号である。また、エラー測定部600には最小遅延クロック信号mCLK_Bも信号線509を介して出力される。
図13は、第2の実施の形態におけるフリップフロップ510の一構成例を示す回路図である。フリップフロップ510は、マスタスレーブ型のラッチであり、マスタ側のラッチ511とスレーブ側のラッチ512とから構成される。なお、フリップフロップ520の構成もフリップフロップ510と同様である。
ラッチ511は、最小遅延クロック信号mCLK_Aに同期して入力信号を保持するものである。ラッチ511は、入力端子Q、出力端子Dおよびゲートイネーブル端子Gを備える。入力端子には、入力信号Q_Aが入力され、ゲートイネーブル端子Gには、最小遅延クロック信号mCLK_Aが入力され、出力端子Dは、ラッチ512の入力端子に接続されている。ラッチ511は、最小遅延クロック信号mCLK_Aがオン状態の場合には入力信号D_Aをスルー出力する。一方、最小遅延クロック信号mCLK_Aがオフ状態になった場合にはラッチ511は、立下りエッジにおける入力信号D_Aを保持して出力する。このラッチ511の出力はラッチ出力信号L_Aとしてエラー測定部600およびラッチ512に出力される。
ラッチ512は、最小遅延クロック信号mCLK_Aを反転させたクロック信号mCK2_Aに同期してラッチ出力信号L_Aを保持するものである。ラッチ512の構成は、ラッチ511と同様である。ラッチ512の出力は、フリップフロップ510の出力信号として出力される。
図14は、第2の実施の形態における主クロック分配回路440の一構成例を示す回路図である。主クロック分配回路440は、PLL441、443および445と、バッファ442、444および446とを備える。
PLL441、443および445は、入力されたクロック信号と同一の周波数のクロック信号を生成するものである。PLL441、443および445は、入力端子CKI、出力端子CKOおよびイネーブル端子ENを備える。PLL441、443および445は、例えば、オン状態のイネーブル信号が入力された場合に、生成したクロック信号を出力し、オフ状態のイネーブル信号が入力された場合にその出力を停止する。主クロック分配回路440は、クロック分配回路制御部700からEn_M_Root、En_M_AおよびEn_M_Bを含むイネーブル信号En_Mを受け取る。En_M_Root、En_M_AおよびEn_M_Bは、それぞれPLL441、443および445を制御するためのイネーブル信号である。ここで、信号線708は、信号線708−1、708−2および708−3を含み、イネーブル信号En_M_RootはPLL441に信号線708−1を介して入力される。イネーブル信号En_M_AはPLL443に信号線708−2を介して入力され、イネーブル信号En_M_BはPLL445に信号線708−3を介して入力される。
PLL441は、クロック木の根に近い位置に設置された回路であり、PLL441の入力端子CKIにクロック生成部300からのクロック信号CLKが入力される。PLL441が出力したクロック信号は、バッファ442を介して複数のクロック信号に分岐される。分岐されたクロック信号のうち、いずれか2つがPLL443および445の入力端子CKIに入力される。
PLL443が出力したクロック信号CLKは、バッファ444を介して複数のクロック信号に分岐される。分岐されたクロック信号のいずれかがORゲート461に出力される。この信号が主クロック信号CLK_M_Aとされる。PLL445が出力したクロック信号CLKは、バッファ446を介して複数のクロック信号に分岐される。分岐されたクロック信号のいずれかがORゲート462に出力される。この信号が主クロック信号CLK_M_Bとされる。PLL441の出力点から主クロック信号CLK_M_Aの出力点までの経路を経路M_Aとし、PLL441の出力点から主クロック信号CLK_M_Bの出力点までの経路を経路M_Bとする。
図15は、第2の実施の形態における副クロック分配回路450の一構成例を示す回路図である。副クロック分配回路450は、PLL451、453および455と、バッファ452、454および456とを備える。
PLL451、453および455の構成は、PLL441と同様の構成である。副クロック分配回路450は、クロック分配回路制御部700からEn_S_Root、En_S_AおよびEn_S_Bを含むイネーブル信号En_Sを受け取る。En_S_Root、En_S_AおよびEn_S_Bは、それぞれPLL451、453および455を制御するためのイネーブル信号である。ここで、信号線709は、信号線709−1、709−2および709−3を含み、イネーブル信号En_S_Rootは信号線709−1を介してPLL451に入力される。イネーブル信号En_S_AはPLL453に信号線709−2を介して入力され、イネーブル信号En_S_BはPLL455に信号線709−3を介して入力される。
PLL451は、クロック木の根に近い位置に設置された回路であり、PLL451の入力端子CKIにクロック生成部300からのクロック信号CLKが入力される。PLL451が出力したクロック信号は、バッファ452を介して複数のクロック信号に分岐される。分岐されたクロック信号のうち、いずれか2つがPLL453および455の入力端子CKIに入力される。
PLL453が出力したクロック信号CLKは、バッファ454を介して複数のクロック信号に分岐される。分岐されたクロック信号のいずれかがORゲート461に出力される。この信号が副クロック信号CLK_S_Aとされる。PLL455が出力したクロック信号CLKは、バッファ456を介して複数のクロック信号に分岐される。分岐されたクロック信号のいずれかがORゲート462に出力される。この信号が副クロック信号CLK_S_Bとされる。PLL451の出力点から副クロック信号CLK_S_Aの出力点までの経路を経路S_Aとし、PLL451の出力点から副クロック信号CLK_S_Bの出力点までの経路を経路S_Bとする。
ここで、ORゲート461に対しては、同一の段数を介して主タイミング信号および副タイミング信号が分配されることが望ましい。すなわち、経路M_Aおよび経路S_Aにおけるバッファ段数は等しいことが望ましい。バッファ段数を同じにすることにより、主タイミング信号および副タイミング信号の遅延時間の差のばらつきが小さくなり、この結果、最小遅延タイミング信号mCLKの遅延のばらつきも小さくなる。なお、主タイミング信号および副タイミング信号の遅延時間が同程度となるのであれば、経路M_Aおよび経路S_Aのそれぞれにおけるバッファ段数は、多少異なる段数であってもよい。経路M_BおよびS_Bについても同様である。
このように副クロック分配回路450の根と分岐点とにPLLを設けることにより、集積回路100は、複数の経路を選択的に不活性化ないし活性化することができる。具体的には、根の部分のPLL451が無効になると、全ての経路が不活性化される。PLL451および453が有効になると、経路S_Aが活性化され、副クロック信号CLK_S_Aが出力される。PLL451および455が有効になると、経路S_Bが活性化され、副クロック信号CLK_S_Bが出力される。
[エラー測定部の構成例]
図16は、第2の実施の形態におけるエラー測定部600の一構成例を示す回路図である。エラー測定部600は、エラー検出回路610および620と、エラー数カウンタ630および640とを備える。
エラー検出回路610は、フリップフロップ510に生じたタイミングエラーを検出するものである。エラー検出回路610は、タイミングエラーの検出結果を示すエラー検出信号ERR_Aを、エラー数カウンタ630へ出力する。エラー検出回路620は、フリップフロップ520に生じたタイミングエラーを検出するものである。エラー検出回路620は、タイミングエラーの検出結果を示すエラー検出信号ERR_Bを、エラー数カウンタ640へ出力する。エラー検出信号ERR_AおよびERR_Bには、例えば、タイミングエラーが検出されたときに「1」の値が設定され、検出されていない場合に「0」の値が設定される。
エラー数カウンタ630は、最小遅延クロック信号mCLK_Aに同期してフリップフロップ510について検出されたタイミングエラーの数を計数するものである。エラー数カウンタ630は、クロック分配回路制御部700から信号線609を介してイネーブル信号En_CNT_Aを受け取る。イネーブル信号En_CNT_Aがオン状態になったとき、エラー数カウンタ630は、計数値を初期化し、最小遅延クロック信号mCLK_Aに同期してタイミングエラーの計数を開始する。エラー数カウンタ630は、計数値ERR_CNT_Aをクロック分配回路制御部700へ信号線609を介して出力し、所定の計測周期が経過したときに計数値を初期化する。
エラー数カウンタ640は、最小遅延クロック信号mCLK_Bに同期してフリップフロップ520について検出されたタイミングエラーの数を計数するものである。エラー数カウンタ640は、クロック分配回路制御部700から信号線609を介してイネーブル信号En_CNT_Bを受け取る。イネーブル信号En_CNT_Bがオン状態になったとき、エラー数カウンタ640は、計数値を初期化し、最小遅延クロック信号mCLK_Bに同期してタイミングエラーの計数を開始する。エラー数カウンタ640は、計数値ERR_CNT_Bをクロック分配回路制御部700へ出力し、所定の計測周期が経過したときに計数値を初期化する。
図17は、第2の実施の形態における第2の実施の形態におけるエラー検出回路610および620の一構成例を示す回路図である。エラー検出回路610は、インバータ611、遅延部612、ラッチ614、XOR(排他的論理和)ゲート615およびラッチ616を備える。
インバータ611は、最小遅延クロック信号mCLK_Aを反転するものである。インバータ611は、反転した最小遅延クロック信号mCLK_Aをイネーブル信号mCK2_Aとして遅延部612およびラッチ616に出力する。
遅延部612は、奇数段のインバータ613を備え、それらのインバータ613により最小遅延クロック信号mCLK_Aを遅延させるものである。ここで、インバータ613の個数は、例えば、遅延部612における遅延時間がフリップフロップ510のホールド時間と同程度になるように定められる。遅延部612は、最小遅延クロック信号mCLK_Aを遅延した信号をイネーブル信号mCLK_EX_Aとしてラッチ614に出力する。なお、インバータ611および遅延部612は、エラー検出回路610でなく、クロック分配部400に設ける構成とすることもできる。
ラッチ614および616は、イネーブル信号に従ってデータを透過または保持するものである。ラッチ614および616は、それぞれ入力端子D、出力端子Qおよびゲートイネーブル端子Gを備える。ゲートイネーブル端子Gには、イネーブル信号が入力される。ラッチ614および616は、イネーブル信号がオン状態である場合に、入力端子Dに入力された信号を出力端子Qにスルー出力する。一方、イネーブル信号がオフ状態である場合に、ラッチ614および616は、イネーブル信号がオン状態のときに入力端子Dに入力されていた信号の値を保持して出力する。
ラッチ614の入力端子Dには、同期動作回路500からの入力信号D_Aが入力される。ラッチ614の出力端子Qは、XORゲート615の入力端子に接続される。ラッチ614のゲートイネーブル端子Gには、イネーブル信号mCK_EX_Aが入力される。
XORゲート615は、ラッチ614が出力した信号と同期動作回路500からのラッチ出力信号L_Aとの排他的論理和をラッチ616へ出力するものである。
ラッチ616の入力端子Dには、XORゲート615の出力端子が接続される。ラッチ616の出力端子Qは、エラー数カウンタ630に接続される。ラッチ616のゲートイネーブル端子Gには、イネーブル信号mCK2_Aが入力される。
エラー検出回路620は、インバータ621、遅延部622、ラッチ624、XORゲート625およびラッチ626を備える。
インバータ621は、最小遅延クロック信号mCLK_Bを反転するものである。インバータ621は、反転した最小遅延クロック信号mCLK_Bをイネーブル信号mCK2_Bとして遅延部622およびラッチ626に出力する。
遅延部622は、奇数段のインバータ623を備え、それらのインバータ623により最小遅延クロック信号mCLK_Bを遅延させるものである。遅延部622は、最小遅延クロック信号mCLK_Bを遅延した信号をイネーブル信号mCLK_EX_Bとしてラッチ624に出力する。
ラッチ624および626の構成は、ラッチ614と同様である。ラッチ624の入力端子Dには、同期動作回路500からの入力信号D_Bが入力される。ラッチ624の出力端子Qは、XORゲート625の入力端子に接続される。ラッチ624のゲートイネーブル端子Gには、イネーブル信号mCLK_EX_Bが入力される。
XORゲート625は、ラッチ624が出力した信号と同期動作回路500からのラッチ出力信号L_Bとの排他的論理和をラッチ626へ出力するものである。
ラッチ626の入力端子Dには、XORゲート625の出力端子が接続される。ラッチ626の出力端子Qは、エラー数カウンタ640に接続される。ラッチ626のゲートイネーブル端子Gには、イネーブル信号mCK2_Bが入力される。
この構成において、ラッチ出力信号L_Aは、最小遅延クロック信号mCLK_Aの立下りエッジにおける入力信号D_Aが図13におけるラッチ511により保持された値である。一方、図17におけるラッチ614は、最小遅延クロック信号mCLK_Aの立下りエッジからホールド時間、遅延したタイミングにおける入力信号D0を保持する。そして、XORゲート615は、これらの信号の値が一致しなければタイミングエラーを出力する。このため、最小遅延クロック信号mCLK_Aの立下りエッジからホールド時間が経過するまでの間に、入力信号D_Aが変化した場合(すなわち、ホールド違反エラーが発生した場合)に、エラーが検出される。
ここで、最小遅延クロック信号mCLK_Aの立下りエッジから、ラッチ511のセットアップ時間を遡った期間内に入力信号D_Aが変化した場合(すなわち、セットアップ違反エラーが発生した場合)を考える。この場合、ラッチ511に変化後の値が保持されない。この結果、セットアップ違反エラー発生時にもタイミングエラーが検出される。
つまり、最小遅延クロック信号mCLK_Aの立下りエッジを境にセットアップ時間およびホールド時間を含む期間において入力信号D_Aが変化した場合にエラー検出回路610においてタイミングエラーが検出される。エラー検出回路620においても、最小遅延クロック信号mCLK_Bの立下りエッジを境にセットアップ時間およびホールド時間を含む期間において入力信号D_Bが変化した場合にタイミングエラーが検出される。
そして、フリップフロップにタイミングを指示する主クロック信号の遅延のばらつきが大きいほど、そのフリップフロップにおいてタイミングエラーが生じ易くなる。このため、エラー測定部600は、測定周期内のエラー数(すなわち、エラーの発生頻度)を計数することにより、主クロック信号の遅延のばらつきを測定することができる。
[クロック分配回路制御部の構成例]
図18は、第2の実施の形態におけるクロック分配回路制御部700の一構成例を示すブロック図である。クロック分配回路制御部700は、主クロック分配回路制御部710および副クロック分配回路制御部720を備える。
主クロック分配回路制御部710は、主クロック分配回路440を制御するものである。主クロック分配回路制御部710は、同期動作回路500を動作させる場合にオン状態のイネーブル信号En_M_Root、En_M_AおよびEn_M_Bを生成して出力する。
副クロック分配回路制御部720は、副クロック分配回路450を制御するものである。詳細には、副クロック分配回路制御部720は、電源供給部200からの電源電圧VDDを参照し、電源電圧VDDが所定電圧より大きい場合、オフ状態のイネーブル信号En_S_Root、En_S_AおよびEn_S_Bを生成して出力する。一方、供給電圧VDDが所定電圧以下である場合を考える。この場合、副クロック分配回路制御部720は、イネーブル信号En_S_Root、En_S_AおよびEn_S_Bをオフ状態にしたままで、イネーブル信号En_CNT_AおよびEn_CNT_Bをオン状態にする。この結果、タイミングエラーの計数が開始される。
そして、副クロック分配回路制御部720は、エラー測定部600から計数値ERR_CNT_AおよびERR_CNT_Bを受け取り、それらの計数値に基づいて副クロック分配回路450を制御する。詳細には、計数値が所定値以上になっている経路に接続されたORゲート(461または462)に対して副タイミング信号を分配するように副クロック分配回路450に指示する。指示は、イネーブル信号En_S_Root、En_S_AおよびEn_S_Bのうち、必要な信号をオン状態にすることにより行われる。具体的には、計数値ERR_CNT_Aが所定値以上となったとき、副クロック分配回路制御部720は、イネーブル信号En_S_RootおよびEn_S_Aをオン状態にする。これにより、経路S_Aが活性化されてORゲート461に副クロック信号が分配される。また、計数値ERR_CNT_Bが所定値以上となったとき、副クロック分配回路制御部720は、イネーブル信号En_S_RootおよびEn_S_Bをオン状態にする。これにより、経路S_Bが活性化されてORゲート462に副クロック信号が分配される。
[クロック分配回路制御部の動作例]
図19は、第2の実施の形態におけるクロック分配回路制御部700の動作の一例を示すフローチャートである。この動作は、同期動作回路500を動作させるときに開始する。
クロック分配回路制御部700は、イネーブル信号En_Mをオン状態にして主クロック分配回路440を活性化し、イネーブル信号En_Sをオフ状態にして副クロック分配回路450を不活性化する(ステップS901)。クロック分配回路制御部700は、供給電圧VDDが所定電圧以下であるか否かを判断する(ステップS902)。
供給電圧VDDが所定電圧以下でない場合(ステップS902:No)、クロック分配回路制御部700は、ステップS901に戻る。供給電圧VDDが所定電圧以下である場合(ステップS902:Yes)、クロック分配回路制御部700は、エラー測定部600に経路M_A、M_Bのそれぞれにおけるタイミングエラーの計数を開始させる(ステップS903)。
クロック分配回路制御部700は、いずれかの計数値が所定値以上であるか否かを判断する(ステップS904)。いずれの計数値も所定値未満である場合(ステップS904:No)、クロック分配回路制御部700はステップS902に戻る。いずれかの計数値が所定値以上である場合(ステップS904:Yes)、クロック分配回路制御部700は、計数値が所定値以上の副クロック分配回路450の経路(S_AまたはS_B)を活性化する(ステップS905)。ステップS905の後、クロック分配回路制御部700は、クロック分配部400を制御するための動作を終了する。
このように第2の実施の形態によれば、主クロック分配回路440がクロック信号を複数の主タイミング信号に分岐させて分配する。一方で、副クロック分配回路450はイネーブル信号に従ってクロック信号を複数の副タイミング信号に分岐させて分配する。ORゲート461および462は、それぞれ主タイミング信号および副タイミング信号のうち先に分配された信号を最小遅延タイミング信号mCLKとして出力する。同期動作回路500は、その最小遅延タイミング信号mCLKに同期して動作する。エラー測定部600がタイミングエラーの検出頻度を測定する一方で、クロック分配回路制御部700は、タイミングエラーの検出頻度が所定値以上である場合に、イネーブル信号により副クロック分配回路450にクロック信号の分配を指示する。これにより、タイミングエラーの検出頻度が所定値以上になった場合に、副クロック分配回路450により副クロック信号が分配される。副クロック信号が分配されると、ORゲート461および462がそれぞれ先に分配された信号を出力するため、クロックスキューのばらつきが軽減される。また、副クロック分配回路450は、タイミングエラーの検出頻度が高い場合に限り活性化されるため、バッファサイズを増大する構成と比較して電力消費量の増大が抑制される。さらに、それぞれのクロック信号CLKの値が異なる場合でも、メッシュ配線のように短絡電流が生じないため、メッシュ配線と比較して電力消費量の増大が抑制される。
なお、主クロック分配回路440および副クロック分配回路450は、経路を2つ備える構成としているが、経路を1つのみとしてもよい。また、3つ以上の経路を設けてもよい。
また、集積回路100は、タイミングエラーの検出頻度を測定しているが、クロック信号の遅延のばらつきを示す値であればタイミングエラーの検出頻度以外の値を測定してもよい。例えば、集積回路100は、クロック信号の遅延のばらつき自体を測定するように構成されてもよい。
また、同期動作回路500は、経路A_Mについて1個のフリップフロップを備えるが、同期動作回路500の回路構成はこの構成に限定されない。例えば、経路A_Mについて2個以上の個数のフリップフロップを備えてもよい。経路B_Mについても同様である。
また、集積回路100は、ORゲート461および462を使用して最小遅延タイミング信号mCLKを生成する構成としているが、ORゲート以外の論理ゲートを使用して最小遅延タイミング信号mCLKを生成してもよい。例えば、同期動作回路500が立下りエッジに同期して動作する場合、集積回路100は、ORゲートに代えてANDゲートによって最小遅延タイミング信号mCLKを生成してもよい。
[第1の変形例]
図20は、第2の実施の形態における第1の変形例におけるクロック分配部400および同期動作回路500の一構成例を示す回路図である。この第1の変形例におけるクロック分配部400の構成は、ORゲート461および462に代えてNORゲート463および464を備える点において、第1の実施の形態と異なる。第1の変形例における同期動作回路500の構成は、インバータ530および540をさらに備える点において、第2の実施の形態と異なる。
NORゲート463は、主クロック信号CLK_M_Aおよび副クロック信号CLK_S_Aの否定論理和を最小遅延クロック信号mCLK_Aとしてインバータ530に出力するものである。NORゲート464は、主クロック信号CLK_M_Bおよび副クロック信号CLK_S_Bの否定論理和を最小遅延クロック信号mCLK_Bとしてインバータ540に出力するものである。インバータ530は、最小遅延クロック信号mCLK_Aを反転してフリップフロップ510に出力するものである。インバータ540は、最小遅延クロック信号mCLK_Bを反転してフリップフロップ520に出力するものである。
このように第1の変形例によれば、フリップフロップ510および520のクロック入力端子にインバータが設けられた構成において、クロックスキューのばらつきを低減することができる。
[第2の変形例]
図21は、第2の実施の形態における第2の変形例におけるクロック分配部400および同期動作回路500の一構成例を示す回路図である。この第2の変形例におけるクロック分配部400の構成は、ORゲート461および462に代えてNORゲート463および464を備える点において、第2の実施の形態と異なる。第2の変形例における同期動作回路500の構成は、インバータ530および540とメッシュ配線550をさらに備える点において、第2の実施の形態と異なる。
NORゲート463および464の構成は、第6の変形例と同様である。インバータ530および540は、最小遅延クロック信号mCLK_AおよびmCLK_Bを反転してメッシュ配線550に出力するものである。メッシュ配線550は、格子状に配置された複数の領域に最小遅延クロック信号mCLKを分配するものである。これらの領域にフリップフロップ510および520などが配置される。
このように第2の変形例によれば、メッシュ配線550によりフリップフロップ510および520のクロック入力端子に接続する構成においてクロックスキューのばらつきを低減することができる。
[第3の変形例]
図22は、第1の実施の形態における第3の変形例におけるクロック分配部400および同期動作回路500の一構成例を示す回路図である。上述の第2の実施の形態では同期動作回路500はクロック信号の立上りエッジにより動作することを想定していたが、この第3の変形例では、同期動作回路500は立下りエッジにより動作することを想定する。具体的には、第3の変形例におけるクロック分配部400の構成は、ORゲート461および462に代えてAND(論理積)ゲート465および466を備える点において、第2の実施の形態と異なる。第3の変形例における同期動作回路500の構成は、フリップフロップ510および520に代えてフリップフロップ560および570を備える点において、第2の実施の形態と異なる。
ANDゲート465は、主クロック信号CLK_M_Aおよび副クロック信号CLK_S_Aの論理積を最小遅延クロック信号mCLK_Aとしてフリップフロップ560に出力するものである。ANDゲート466は、主クロック信号CLK_M_Bおよび副クロック信号CLK_S_Bの論理積を最小遅延クロック信号mCLK_Bとしてフリップフロップ570に出力するものである。フリップフロップ560および570は、最小遅延クロック信号mCLK_AおよびmCLK_Bの立下りエッジに同期してデータを取り込み、保持するものである。
このように第3の変形例によれば、同期動作回路500がクロック信号の立下りエッジに同期して動作する構成において、クロックスキューのばらつきを低減することができる。
[第4の変形例]
図23は、第2の実施の形態における第4の変形例におけるクロック分配部400および同期動作回路500の一構成例を示す回路図である。この第4の変形例においても第3の変形例と同様に同期動作回路500が立下りエッジにより動作することを想定する。第4の変形例におけるクロック分配部400の構成は、ORゲート461および462に代えてNAND(否定論理積)ゲート467および468を備える点において、第2の実施の形態と異なる。第4の変形例における同期動作回路500の構成は、フリップフロップ510および520に代えてフリップフロップ560および570を備え、インバータ530および540をさらに備える点において、第2の実施の形態と異なる。
NANDゲート467は、主クロック信号CLK_M_Aおよび副クロック信号CLK_S_Aの否定論理積を最小遅延クロック信号mCLK_Aとしてインバータ530に出力するものである。NANDゲート468は、主クロック信号CLK_M_Bおよび副クロック信号CLK_S_Bの否定論理積を最小遅延クロック信号mCLK_Bとしてインバータ540に出力するものである。インバータ530は、最小遅延クロック信号mCLK_Aを反転してフリップフロップ560に出力するものである。インバータ540は、最小遅延クロック信号mCLK_Bを反転してフリップフロップ570に出力するものである。フリップフロップ560および570は、最小遅延クロック信号mCLK_AおよびmCLK_Bの立下りエッジに同期してデータを取り込み、保持するものである。
このように第4の変形例によれば、フリップフロップ510および520のクロック入力端子にインバータが設けられ、同期動作回路500がクロック信号の立下りエッジに同期して動作する構成において、クロックスキューのばらつきを低減することができる。
[第5の変形例]
図24は、第2の実施の形態における第5の変形例におけるクロック分配部400および同期動作回路500の一構成例を示す回路図である。この第5の変形例においても第3の変形例と同様に同期動作回路500が立下りエッジにより動作することを想定する。第5の変形例におけるクロック分配部400の構成は、ORゲート461および462に代えてNANDゲート467および468を備える点において、第2の実施の形態と異なる。第5の変形例における同期動作回路500の構成は、フリップフロップ510および520に代えてフリップフロップ560および570を備える点において、第2の実施の形態と異なる。また、第5の変形例における同期動作回路500の構成は、インバータ530および540とメッシュ配線550をさらに備える点において、第2の実施の形態と異なる。
NANDゲート467および468の構成は、第2の実施の形態における第4の変形例と同様である。インバータ530および540とメッシュ配線550との構成は、第2の実施の形態における第2の変形例と同様である。フリップフロップ560および570の構成は、第2の実施の形態における第4の変形例と同様である。
このように第5の変形例によれば、メッシュ配線にフリップフロップ510および520のクロック入力端子が接続され、同期動作回路500がクロック信号の立下りエッジに同期して動作する構成において、クロックスキューのばらつきを低減することができる。
<3.第3の実施の形態>
[集積回路の構成例]
図25は、第3の実施の形態における集積回路100の一構成例を示すブロック図である。この第3の実施の形態における集積回路100は、電源供給部200、クロック生成部300、クロック分配回路410、同期動作回路500、組合せ論理回路580およびエラー測定部600を備える。
電源供給部200は、クロック分配回路410、同期動作回路500および組合せ論理回路580に電源を供給するものである。具体的には、電源供給部200は、電源電圧VDDを降圧する。降圧された電圧は、クロック分配回路410にクロック分配回路駆動電圧vCKとして信号線207を介して供給される。また、電源供給部200は、クロック分配回路駆動電圧vCKより低い電圧を、組合せ論理回路580および同期動作回路500に論理回路駆動電圧vDPとして信号線208を介して供給する。
クロック生成部300は、PLLなどを用いて所定の周波数のクロック信号CLKを生成するものである。クロック信号CLKは、同期動作回路500およびエラー測定部600に所定のタイミングを指示するための信号として生成される。クロック生成部300は、生成したクロック信号CLKをクロック分配回路410に信号線309を介して出力する。
クロック分配回路410は、同期動作回路500を含む集積回路100内の回路のそれぞれにクロック信号CLKを分配するものである。クロック分配回路410は、クロック信号CLKを同期動作回路500に信号線409を介して分配し、エラー測定部600に信号線408を介して分配する。エラー測定部600に対しては、クロック信号CLKは、エラー数の計数のタイミングを指示するために分配される。なお、クロック分配回路410は、特許請求の範囲に記載のタイミング信号分配回路の一例である。
同期動作回路500は、クロック信号CLKに同期して動作する回路である。組合せ論理回路580は、同期動作回路500の動作結果に基づいて所定の論理演算を実行するものである。なお、組合せ論理回路580は、特許請求の範囲に記載の論理回路の一例である。
エラー測定部600は、同期動作回路500に生じたタイミングエラーを検出し、その検出頻度を測定するものである。タイミングエラーの検出頻度は、例えば、一定の計測周期内のエラー数を計数することにより測定される。エラー測定部600は、タイミングエラーの計数値ERR_CNTを電源供給部200に信号線609を介して出力する。
図26は、第3の実施の形態におけるクロック分配回路410および同期動作回路500の一構成例を示す回路図である。クロック分配回路410は、所定の段数のバッファ411を備え、それらのバッファ411を介してクロック信号CLKを同期動作回路500に分配する。同期動作回路500は、フリップフロップ510および520を備える。フリップフロップ510および520は、分配されたクロック信号CLKに同期してデータを取り込んで保持するものである。フリップフロップ510に入力される入力信号D0と、フリップフロップ510からのラッチ出力信号L0とは、エラー測定部600に信号線509を介して出力される。
また、同期動作回路500は、組合せ論理回路580において必要なデータを出力し、または組合せ論理回路580において生成されたデータを受け取る。例えば、フリップフロップ510は、保持している信号を出力信号Q0として組合せ論理回路580に出力する。また、フリップフロップ520は、組合せ論理回路580から入力信号D1を受け取って保持し、保持した信号を出力信号Q1として組合せ論理回路580に出力する。
図27は、第3の実施の形態におけるエラー測定部600の一構成例を示すブロック図である。エラー測定部600は、エラー検出回路610およびエラー数カウンタ631を備える。エラー検出回路610の構成は、第2の実施の形態におけるエラー検出回路610の構成と同様である。エラー数カウンタ631は、エラー検出回路610において所定の測定周期内に検出されたエラー数をクロック信号CLKに同期して計数するものである。エラー数カウンタ631は、計数値ERR_CNTを電源供給部200に出力する。
図28は、第3の実施の形態におけるクロック分配回路410、同期動作回路500および組合せ論理回路580の実装例を示す図である。同図における点線は、クロック信号CLKを分配するための配線である。集積回路100には、信号線207および208を含む複数の信号線が配線され、それらの信号線に回路が接続される。ただし、クロック分配回路410と、同期動作回路500および組合せ論理回路580とには、それぞれ異なる電圧が供給されるように回路が配置される。具体的には、信号線207にはクロック分配回路410が接続される。この信号線207には、フリップフロップ510および520と組合せ論理回路580内の論理ゲート581とが接続されないように回路が配置される。一方、信号線208には、フリップフロップ510および520と論理ゲート581とが接続される。この信号線208には、クロック分配回路410が接続されないように回路が配置される。このように回路を配置することにより、クロック分配回路410には信号線207を介してクロック分配回路駆動電圧vCKが供給され、同期動作回路500および組合せ論理回路580には信号線208を介して論理回路駆動電圧vDPが供給される。
[電源供給部の構成例]
図29は、第3の実施の形態における電源供給部200の一構成例を示すブロック図である。電源供給部200は、クロック分配回路駆動電圧制御部210および論理回路駆動電圧制御部220を備える。クロック分配回路駆動電圧制御部210は、電源電圧VDDを降圧してクロック分配回路410にクロック分配回路駆動電圧vCKとして供給するものである。論理回路駆動電圧制御部220は、クロック分配回路駆動電圧vCKを降圧して同期動作回路500および組合せ論理回路580に論理回路駆動電圧vDPとして供給するものである。なお、クロック分配回路駆動電圧制御部210は、特許請求の範囲に記載のタイミング信号分配回路駆動電圧制御部の一例である。
図30は、第3の実施の形態におけるクロック分配回路駆動電圧制御部210の一構成例を示すブロック図である。クロック分配回路駆動電圧制御部210は、クロック分配回路駆動電圧制御回路211、電圧制御レジスタ212および可変抵抗器214を備える。可変抵抗器214の一方の端子は電源電圧VDDを供給する電源に接続され、他方の端子は電源線207に接続される。クロック分配回路駆動電圧制御回路211は、電圧制御レジスタ212の値を更新することにより電源電圧VDDを降圧してクロック分配回路駆動電圧vCKとして供給するものである。エラーの計数値ERR_CNTが閾値Th未満である場合にクロック分配回路駆動電圧制御回路211は、クロック分配回路駆動電圧vCKを設定値Vscに降圧する。一方、エラーの計数値ERR_CNTが閾値Th以上である場合にクロック分配回路駆動電圧制御回路211は、クロック分配回路駆動電圧vCKを設定値Vecに昇圧する。なお、VecはVscより高い値に設定される。
電圧制御レジスタ212は、可変抵抗器214の抵抗率を制御するための値を保持するものである。可変抵抗器214は、電圧制御レジスタ212に保持された値の変更に応じて抵抗値が変わる抵抗である。可変抵抗器214の抵抗値の変化により、供給されるクロック分配回路駆動電圧vCKが変化する。
図31は、第3の実施の形態におけるクロック分配回路駆動電圧制御回路211の動作の一例を示す図である。エラーの計数値ERR_CNTが閾値Th未満である場合、クロック分配回路駆動電圧制御回路211は、電圧制御レジスタ212の値を参照して現在のクロック分配回路駆動電圧vCKの値を取得する。そして、クロック分配回路駆動電圧制御回路211は、そのクロック分配回路駆動電圧vCKが設定値Vscより大きいか否かを判断する。そのクロック分配回路駆動電圧vCKが設定値Vscより大きければ、クロック分配回路駆動電圧制御回路211は、クロック分配回路駆動電圧vCKを設定値Vscに降圧する。一方、エラーの計数値ERR_CNTが閾値Th以上である場合、クロック分配回路駆動電圧制御回路211は、クロック分配回路駆動電圧vCKを設定値Vecに緊急昇圧する。
図32は、第3の実施の形態における電圧制御レジスタ212および可変抵抗器214の一構成例を示す回路図である。電圧制御レジスタ212は、n(nは1以上の整数)個のフリップフロップ213を備える。可変抵抗器214は、並列に接続されたn個のpMOSトランジスタ215を備える。フリップフロップ213は、1ビットのデータを保持するものである。それぞれのフリップフロップ213が保持するデータの初期値は例えば「0」であり、データの値はクロック分配回路駆動電圧制御回路211により更新される。フリップフロップ213の出力端子と、pMOSトランジスタ215のゲート端子とは1対1に接続されている。
pMOSトランジスタ215は、ゲート端子に入力された信号の値に応じてソース−ドレイン間に電流を流すものである。pMOSトランジスタ215は、ゲート端子、ソース端子およびドレイン端子を備える。ゲート端子はフリップフロップ213の出力端子に接続され、ソース端子は電源電圧VDDを供給する電源に接続され、ドレイン端子は信号線207に接続される。pMOSトランジスタ215は、ゲート端子に入力されたフリップフロップ213の保持値が「0」の場合にオン状態となってソース端子とドレイン端子との間に電流を流し、保持値が「1」の場合にオフ状態となる。ここで、1つのpMOSトランジスタのオン状態におけるゲート端子とドレイン端子との間の抵抗をR0とする。オン状態のpMOSトランジスタ215の個数をm(mは1以上の整数)個とすると、可変抵抗器214の合成抵抗Rは、R0/mとなる。つまり、電圧制御レジスタ212において「0」の値が多いほど、オン状態のpMOSトランジスタ215の個数が多くなって合成抵抗Rが小さくなり、クロック分配回路駆動電圧vCKが高くなる。なお、可変抵抗器214は、抵抗値を制御できる構成であればよく、pMOSトランジスタ215を並列接続した構成に限定されない。
図33は、第3の実施の形態における論理回路駆動電圧制御部220の一構成例を示すブロック図である。論理回路駆動電圧制御部220は、論理回路駆動電圧制御回路221、電圧制御レジスタ222および可変抵抗器224を備える。可変抵抗器224の一方の端子は信号線207に接続され、他方の端子は信号線208に接続される。クロック分配回路駆動電圧制御回路211は、電圧制御レジスタ222の値を更新することによりクロック分配回路駆動電圧vCKを降圧して論理回路駆動電圧vDPとして供給するものである。エラーの計数値ERR_CNTが閾値Th未満である場合に論理回路駆動電圧制御回路221は、論理回路駆動電圧vDPを設定値Vsdに降圧する。一方、エラーの計数値ERR_CNTが閾値Th以上である場合に論理回路駆動電圧制御回路221は、論理回路駆動電圧vDPを設定値Vedに昇圧する。なお、VedはVsdより高い値に設定される。
図34は、第3の実施の形態における論理回路駆動電圧制御回路221の動作の一例を示す図である。エラーの計数値ERR_CNTが閾値Th未満である場合、論理回路駆動電圧制御回路221は、電圧制御レジスタ222の値を参照して現在の論理回路駆動電圧vDPの値を取得する。そして、論理回路駆動電圧制御回路221は、その論理回路駆動電圧vDPが設定値Vsdより大きいか否かを判断する。論理回路駆動電圧vDPが設定値Vsdより大きければ、論理回路駆動電圧制御回路221は、論理回路駆動電圧vDPを設定値Vsdに降圧する。一方、エラーの計数値ERR_CNTが閾値Th以上である場合、論理回路駆動電圧制御回路221は、論理回路駆動電圧vDPを設定値Vedに緊急昇圧する。
[電源供給部の動作例]
図35は、第3の実施の形態におけるクロック分配回路駆動電圧制御回路211の動作の一例を示すフローチャートである。クロック分配回路駆動電圧制御回路211は、エラーの計数値ERR_CNTが閾値Th以上であるか否かを判断する(ステップS911)。計数値ERR_CNTが閾値Th以上である場合(ステップS911:Yes)、クロック分配回路駆動電圧制御回路211は、クロック分配回路駆動電圧vCKを設定値Vecに緊急昇圧する(ステップS912)。ステップS912の後、クロック分配回路駆動電圧制御回路211は、ステップS911に戻る。
計数値ERR_CNTが閾値Th未満である場合(ステップS911:No)、クロック分配回路駆動電圧制御回路211は、クロック分配回路駆動電圧vCKが設定値Vscより大きいか否かを判断する(ステップS913)。クロック分配回路駆動電圧vCKが設定値Vscより大きい場合(ステップS913:Yes)、クロック分配回路駆動電圧制御回路211は、クロック分配回路駆動電圧vCKを設定値Vscに降圧する(ステップS914)。クロック分配回路駆動電圧vCKが設定値Vsc以下である場合(ステップS913:No)、またはステップS914の後、クロック分配回路駆動電圧制御回路211は、ステップS911に戻る。
図36は、第3の実施の形態における論理回路駆動電圧制御回路221の動作の一例を示すフローチャートである。論理回路駆動電圧制御回路221は、エラーの計数値ERR_CNTが閾値Th以上であるか否かを判断する(ステップS921)。計数値ERR_CNTが閾値Th以上である場合(ステップS921:Yes)、論理回路駆動電圧制御回路221は、論理回路駆動電圧vDPを設定値Vedに緊急昇圧する(ステップS922)。ステップS912の後、論理回路駆動電圧制御回路221は、ステップS921に戻る。
計数値ERR_CNTが閾値Th未満である場合(ステップS921:No)、論理回路駆動電圧制御回路221は、論理回路駆動電圧vDPが設定値Vsdより大きいか否かを判断する(ステップS923)。論理回路駆動電圧vDPが設定値Vsdより大きい場合
(ステップS923:Yes)、論理回路駆動電圧制御回路221は、論理回路駆動電圧vDPを設定値Vsdに降圧する(ステップS924)。論理回路駆動電圧vDPが設定値Vsd以下である場合(ステップS923:No)、またはステップS924の後、論理回路駆動電圧制御回路221は、ステップS921に戻る。
図37は、第3の実施の形態におけるクロック分配回路駆動電圧vCKおよび論理回路駆動電圧vDPの第1の設定例を示すグラフである。グラフの縦軸は、クロック分配回路駆動電圧vCKの設定値であり、横軸は論理回路駆動電圧vDPの設定値である。この第1の設定例では、論理回路駆動電圧vDPがVc(例えば、0.7V)より低い場合に、論理回路駆動電圧vDPより高い電圧がクロック分配回路駆動電圧vCKに設定される。そして、このVcより低い区間では、論理回路駆動電圧vDPとクロック分配回路駆動電圧vCKとの電圧値の差分が一定となるように設定される。Vc以上の区間においては、クロック分配回路駆動電圧vCKおよび論理回路駆動電圧vDPの電圧値は、同一に設定される。
なお、図37に例示した設定値以外の電圧を電圧供給部200に設定してもよい。例えば、図38は、クロック分配回路駆動電圧vCKおよび論理回路駆動電圧vDPの第2の設定例を示すグラフである。この第2の設定例では、論理回路駆動電圧vDPがVc1(例えば、0.7V)より低い場合に、第1の設定例と同様に、論理回路駆動電圧vDPより高い電圧がクロック分配回路駆動電圧vCKに設定される。論理回路駆動電圧vDPがVc1以上であり、かつ、Vc2(>Vc1)以下の区間においては、クロック分配回路駆動電圧vCKおよび論理回路駆動電圧vDPの電圧値は同一に設定される。そして、論理回路駆動電圧vDPがVc2より高い区間においては、論理回路駆動電圧vDPより低い電圧がクロック分配回路駆動電圧vCKに設定される。この第2の設定例によれば、電圧が十分に高い場合においても電力消費量を低減することができる。
また、例えば、図39は、クロック分配回路駆動電圧vCKおよび論理回路駆動電圧vDPの第3の設定例を示すグラフである。この第3の設定例では、論理回路駆動電圧vDPがVcより低い区間において一定の電圧値(例えば、Vc)がクロック分配回路駆動電圧vCKに設定される。この第3の設定例によれば、集積回路100は、クロック分配回路駆動電圧vCKが最低動作電圧未満とならないように制御しつつ、電力消費量を低減することができる。
このように、第3の実施の形態によれば、電源供給部200によって、低電圧領域においてはクロック分配回路駆動電圧vCKより低い論理回路駆動電圧vDPが組合せ論理回路580に供給される。これにより、同一の値の電圧をクロック分配回路410および組合せ論理回路580に供給する構成と比較して、電力消費量の低減が容易になる。前述したように電圧の低下に伴って、クロック分配回路410におけるスキューが指数関数的に増大するが、組合せ論理回路580は、クロック分配回路410と比較してスキューの影響が少ない。このため、組合せ論理回路580の最低動作電圧は、クロック分配回路410より低く設定しても構わない。したがって、クロック分配回路駆動電圧vCKより論理回路駆動電圧vDPを低くすることにより、集積回路100全体の電力消費量を容易に低減することができる。
なお、第3の実施の形態の集積回路100は、クロック分配回路410に代えて第1の実施の形態のクロック分配部400を備え、最小遅延クロック信号mCLKを同期動作回路500に分配してもよい。これにより、クロックスキューがさらに減少する。同様に、第3の実施の形態の集積回路100は、クロック分配回路410に代えて第2の実施の形態のクロック分配回路制御部700およびクロック分配部400を備え、最小遅延クロック信号mCLKを同期動作回路500に分配してもよい。
[第1の変形例]
図40は、第3の実施の形態における第1の変形例における集積回路100の一構成例を示すブロック図である。上述の第3の実施の形態において電圧供給部200は同期動作回路200に論理回路駆動電圧vDPを供給していたが、これ以外の電圧を同期動作回路200に供給してもよい。例えば、電圧供給部200は、クロック分配回路駆動電圧vCKを同期動作回路500に供給してもよい。第1の変形例の電源供給部200は、クロック分配回路駆動電圧vCKを同期動作回路500に信号線207を介して供給する点において、第3の実施の形態と異なる。
第1の変形例によれば、クロック分配回路駆動電圧vCKを同期動作回路500に供給する構成において電力消費量を低減することができる。
[第2の変形例]
図41は、第3の実施の形態における第2の変形例における電源供給部200の一構成例を示すブロック図である。上述の第3の実施の形態においては、クロック分配回路駆動電圧制御部210および論理回路駆動電圧制御部220が電源に直列に接続される構成としてたが、これらを並列に接続する構成としてもよい。第2の変形例の電源供給部200は、クロック分配回路駆動電圧制御部210および論理回路駆動電圧制御部220が電源に並列に接続されている点において第3の実施の形態と異なる。第2の変形例において、論理回路駆動電圧vDPの設定値Vsdは、クロック分配回路駆動電圧vCKの設定値Vscより小さい値に設定される。
第2の変形例によれば、クロック分配回路駆動電圧制御部210および論理回路駆動電圧制御部220が並列に接続される構成において電力消費量を低減することができる。
[第3の変形例]
図42は、第3の実施の形態における第3の変形例における集積回路100の一構成例を示すブロック図である。電源供給部200は同期動作回路500にクロック分配回路駆動電圧vCKおよび論理回路駆動電圧vDPのいずれとも異なる電圧を供給してもよい。第3の変形例の電源供給部200は、同期動作回路駆動電圧vFFを同期動作回路500に信号線206を介して供給する点において第3の実施の形態と異なる。
第3の変形例によれば、vDPおよびvCKのいずれとも異なる同期動作回路駆動電圧vFFを同期動作回路500に供給する構成において電力消費量を低減することができる。
[第4の変形例]
図43は、第3の実施の形態における第4の変形例における電源供給部200の一構成例を示すブロック図である。この第4の変形例の電源供給部200は、クロック分配回路駆動電圧制御部210のみが緊急昇圧を行う点において第3の実施の形態と異なる。第4の変形例においては、エラーの計数値ERR_CNTは、クロック分配回路駆動電圧制御部210のみに入力される。計数値ERR_CNTが閾値Th以上である場合にクロック分配回路駆動電圧制御部210は緊急昇圧を行う一方、論理回路駆動電圧制御部220は緊急昇圧を行わない。
第4の変形例によれば、論理回路駆動電圧vDPが緊急昇圧されないため、緊急昇圧時の電力消費量が低減する。
<4.第4の実施の形態>
[集積回路の構成例]
図44は、第4の実施の形態における集積回路100の一構成例を示すブロック図である。この第4の実施の形態における集積回路100は、電源供給部200、クロック生成部300、クロック分配回路410、同期動作回路500、組合せ論理回路580、エラー測定部600およびエラー補償制御部800を備える。
電源供給部200は、クロック分配回路410、同期動作回路500および組合せ論理回路580に電源を供給するものである。具体的には、電源供給部200は、所定の電圧値を有するクロック分配回路駆動電圧vCKをクロック分配回路410に信号線207を介して供給する。また、電源供給部200は、所定の電圧値を有する論理回路駆動電圧vDPを同期動作回路500および組合せ論理回路580に信号線208を介して供給する。
また、電源供給部200は、エラー補償制御部800の解析結果に応じてクロック分配回路駆動電圧vCKおよび論理回路駆動電圧vDPを制御する。解析結果は、例えば、セットアップ違反エラー、ホールド違反エラーおよびホールド違反エラーの警告を含む。電源供給部200は、セットアップ違反エラーが発生した場合にクロック分配回路駆動電圧vCKを緊急昇圧し、ホールド違反エラーが発生した場合にクロック分配回路駆動電圧vCKおよび論理回路駆動電圧vDPを緊急昇圧する。また、電源供給部200は、ホールド違反エラーが発生する前にその警告を受けた場合には、論理回路駆動電圧vDPを緊急昇圧時の電圧値より低い電圧値に昇圧する。
クロック生成部300は、PLLなどを用いて所定の周波数のクロック信号CLKを生成するものである。クロック信号CLKは、同期動作回路500およびエラー測定部600に所定のタイミングを指示するための信号として生成される。クロック生成部300は、生成したクロック信号CLKをクロック分配回路410に信号線309を介して出力する。
クロック分配回路410は、同期動作回路500を含む集積回路100内の回路のそれぞれにクロック信号CLKを分配するものである。クロック分配回路410は、クロック信号CLKを同期動作回路500に信号線409を介して分配し、エラー測定部600に信号線408を介して分配する。エラー測定部600に対しては、クロック信号CLKは、エラー数の計数のタイミングを指示するために分配される。なお、クロック分配回路410は、特許請求の範囲に記載のタイミング信号分配回路の一例である。
同期動作回路500は、クロック信号CLKに同期して動作する回路である。組合せ論理回路580は、同期動作回路500の動作結果に基づいて所定の論理演算を実行するものである。
エラー測定部600は、同期動作回路500に生じたタイミングエラーに基づいてエラーフラグERR1およびERR2を生成するものである。エラーフラグERR1およびERR2の相違や、それらの生成方法の詳細については後述する。エラー測定部600は、エラーフラグERR1およびERR2をエラー補償制御部800に信号線609を介して出力する。
エラー補償制御部800は、エラーフラグERR1およびERR2の履歴に基づいてタイミングエラーを解析するものである。エラー補償制御部800は、例えば、タイミングエラーの種類を解析する。タイミングエラーの種類としては、セットアップ違反エラー、ホールド違反エラーおよびホールド違反エラーの警告などがある。タイミングエラーの解析方法については後述する。エラー補償制御部800は、解析結果を電源供給部200に信号線809を介して出力し、電源供給部200にエラーを補償させる。
図45は、第4の実施の形態におけるエラー測定部600、同期動作回路500およびクロック分配回路410の一構成例を示す回路図である。エラー測定部600は、エラー検出回路650を備え、同期動作回路500は、フリップフロップ510を備える。クロック分配回路410は、インバータ471および474と、遅延部475および477とを備える。
インバータ471および474は、入力されたクロック信号を反転して出力するものである。インバータ471は、クロック生成部300からのクロック信号CLKを反転して反転クロック信号CKBとして同期動作回路500に信号線409を介して出力する。インバータ474は、その反転クロック信号CKBをさらに反転してクロック信号CK2として同期動作回路500に信号線409を介して出力する。また、インバータ474は、クロック信号CK2をエラー検出回路650に信号線408を介して出力する。
遅延部475および477はクロック信号を遅延させるものである。遅延部475は、奇数個のインバータ476を備える。遅延部475は、それらのインバータ476でクロック信号CK2を所定時間、遅延させて遅延クロック信号CKB_EX1としてエラー検出回路650に信号線408を介して出力する。ここで、インバータ476の個数は、例えば、遅延部475における遅延時間がフリップフロップ510のホールド時間と同程度になるように定められる。遅延部477は、偶数個のインバータ478を備える。遅延部477は、それらのインバータ478で遅延クロック信号CKB_EX1をさらに遅延させて遅延クロック信号CKB_EX2としてエラー検出回路650に信号線408を介して出力する。
フリップフロップ510は、反転クロック信号CKBに同期して1ビットのデータを保持するものである。フリップフロップ510は、ラッチ511および512を備える。
ラッチ511は、反転クロック信号CKBに同期して入力信号を保持するものである。ラッチ511は、入力端子Q、出力端子Dおよびゲートイネーブル端子Gを備える。入力端子には、入力信号D0が入力され、ゲートイネーブル端子Gには、反転クロック信号CKBが入力され、出力端子Dは、ラッチ512の入力端子に接続されている。ラッチ511は、反転クロック信号CKBがオン状態の場合には入力信号D0をラッチ出力信号L0としてエラー検出回路650およびラッチ512にスルー出力する。一方、反転クロック信号CKBがオフ状態になった場合にはラッチ511は、立下りエッジにおける入力信号D0を保持して、保持している信号をラッチ出力信号L0としてエラー検出回路650およびラッチ512に出力する。
ラッチ512、651、653、654および656の構成はラッチ511と同様である。ただし、ラッチ512は、クロック信号CK2がオフ状態になった場合にラッチ出力信号L0を保持して出力信号Q0として出力する。ラッチ651は、遅延クロック信号CKB_EX1がオフ状態になった場合に入力信号D0を保持してラッチ出力信号L1としてXORゲート652の入力端子に出力する。ラッチ653は、クロック信号CK2がオフ状態になった場合にXORゲート652からのエラー信号E1を保持してエラーフラグERR1としてエラー補償制御部800に出力する。また、ラッチ654は、遅延クロック信号CKB_EX2がオフ状態になった場合に入力信号D0を保持してラッチ出力信号L2としてXORゲート655の入力端子に出力する。ラッチ656は、クロック信号CK2がオフ状態になった場合にXORゲート655からのエラー信号E2を保持してエラーフラグERR2としてエラー補償制御部800に出力する。
XORゲート652および655は、入力信号の排他的論理和を生成するものである。XORゲート652は、ラッチ651および511からのラッチ出力信号L1およびL0の排他的論理和をエラー信号E1としてラッチ653に出力する。XORゲート655は、ラッチ654および511からのラッチ出力信号L2およびL0の排他的論理和をエラー信号E2としてラッチ653に出力する。
なお、ラッチ511は、特許請求の範囲に記載のマスタラッチの一例である。ラッチ651およびXORゲート652は、特許請求の範囲に記載の第1エラー検出部の一例である。ラッチ654およびXORゲート655は、特許請求の範囲に記載の第2エラー検出部の一例である。また、ラッチ651は、特許請求の範囲に記載の第1のラッチの一例である。XORゲート652は、特許請求の範囲に記載の第1の論理ゲートの一例である。ラッチ654は、特許請求の範囲に記載の第2のラッチの一例である。XORゲート655は、特許請求の範囲に記載の第2の論理ゲートの一例である。
図45に例示した構成において、第2の実施の形態と同様に、監視開始タイミングからセットアップ時間およびホールド時間が経過するまでの期間において入力信号D0が変化した場合にエラー信号E1が出力される。
次に、ラッチ511が反転クロック信号CKBの立下りエッジにおける入力信号D0を保持する一方、ラッチ651は、クロック信号CKN_EX1をさらに遅延させた遅延クロック信号CKB_EX2の立下りエッジにおける入力信号D0を保持する。そして、XORゲート655は、これらの信号が一致しなければタイミングエラーを検出する。
ここで、遅延クロック信号CKB_EX1の立下りエッジから遅延クロック信号CKB_EX2の立下りエッジまでの期間を以下では「エラー警告期間」と称する。前述のように、XORゲート655は、反転クロック信号CKBの立下りエッジにおける入力信号D0の値と、遅延クロック信号CKB_EX2の立下りエッジ(すなわち、エラー警告期間の終点)における入力信号D0とを比較した結果を出力する。このため、XORゲート655からは、反転クロック信号CKBの立下りエッジからホールド時間およびエラー警告期間が経過するまでの間に入力信号D0の値が変化した場合にエラー信号E2が出力される。また、監視開始タイミングから反転クロック信号CKBの立下りエッジまでの間に入力信号D0の値が変化した場合にも、ラッチ511に、変化後の値が保持されずにエラー信号E2が出力される。
つまり、監視開始タイミングからセットアップ時間、ホールド時間およびエラー警告期間が経過するまでの期間において入力信号D0が変化した場合にエラー信号E2が出力される。
ここで、反転クロック信号CKBが立下ってエラー信号E1およびE2が出力された後、反転クロック信号CKBが立ち上がると、ラッチ511のホールドが解除されて入力信号D0およびラッチ出力信号L0が同一値となってしまう。しかし、後段のラッチ653および656が反転クロック信号CKBの立上り前に、エラー信号E1およびE2の値を保持するため、反転クロック信号CKBが立ち上った後も、立下り前のエラー信号E1およびE2の値が維持される。
図46は、第4の実施の形態におけるエラー補償制御部800の一構成例を示すブロック図である。エラー補償制御部800は、エラー解析部810およびエラーフラグ前回値保持部820を備える。
エラー解析部810は、タイミングエラーERR1およびERR2の前回値および今回値に基づいてタイミングエラーを解析するものである。詳細には、エラー解析部810は、エラーフラグRRR2のみが前回に検出されてエラーフラグERR1およびERR2が今回ともに検出された場合、タイミングエラーがホールド違反エラーであると判断する。そして、エラー解析部810は、オン状態のホールド違反エラーフラグERR_HOLDを電源供給部200に出力してエラーフラグ前回値保持部820の保持値を更新する。
一方、エラーフラグERR1およびERR2が前回いずれも検出されずにエラーフラグERR1およびERR2が今回ともに検出された場合、エラー解析部810は、タイミングエラーがセットアップ違反エラーであると判断する。そして、エラー解析部810は、オン状態のセットアップ違反エラーフラグERR_SETを電源供給部200に出力してエラーフラグ前回値保持部820の保持値を更新する。
また、エラーフラグERR1およびERR2が前回いずれも検出されずにエラーフラグERR2のみが今回に検出された場合、エラー解析部810は、エラー警告期間において入力信号D0が変化したと判断する。そして、エラー解析部810は、オン状態のホールド違反警告フラグAL_HOLDを電源供給部200に出力してエラーフラグ前回値保持部820の保持値を更新する。
エラーフラグ前回値保持部820は、エラーフラグERR1およびERR2の前回値ERR_PREを保持するものである。なお、エラーフラグ前回値保持部820は、特許請求の範囲に記載の履歴保持部の一例である。
図47は、第4の実施の形態におけるエラー解析部810の動作の一例を示す図である。エラーフラグERR1およびERR2がともに「0」である場合を考える。この場合、エラー解析部810は、ホールド違反警告フラグAL_HOLD、ホールド違反エラーフラグERR_HOLDおよびセットアップ違反エラーフラグERR_SETの値を全て「0」にする。また、エラー解析部810は、エラーフラグ前回値PRE_ERRを「00」に更新する。
エラーフラグERR1が「0」でエラーフラグERR2が「1」であり、エラーフラグ前回値が「00」である場合、エラー解析部810は、ホールド違反警告フラグAL_HOLDを「1」にする。また、エラー解析部810は、ホールド違反エラーフラグERR_HOLDおよびセットアップ違反エラーフラグERR_SETの値をともに「0」にする。そして、エラー解析部810は、エラーフラグ前回値PRE_ERRを「01」に更新する。
エラーフラグERR1が「0」でエラーフラグERR2が「1」であり、エラーフラグ前回値が「01」または「11」である場合、エラー解析部810は、AL_HOLD、ERR_HOLDおよびERR_SETの値を全て「0」にする。そして、エラー解析部810は、エラーフラグ前回値PRE_ERRを「01」に更新する。
エラーフラグERR1が検出される期間はエラーフラグERR2が検出される期間に含まれるため、エラーフラグERR1のみが「1」となることはない。
エラーフラグERR1およびERR2がともに「1」であり、エラーフラグ前回値が「00」である場合、エラー解析部810はセットアップ違反エラーフラグERR_SETの値を「1」にする。また、エラー解析部810は、ホールド違反警告フラグAL_HOLDおよびホールド違反エラーフラグERR_HOLDの値をともに「0」にする。そして、エラー解析部810は、エラーフラグ前回値PRE_ERRを「11」に更新する。
エラーフラグERR1およびERR2がともに「1」であり、エラーフラグ前回値が「01」である場合、エラー解析部810はホールド違反エラーフラグERR_HOLDの値を「1」にする。また、エラー解析部810は、ホールド違反警告フラグAL_HOLDおよびセットアップ違反エラーフラグERR_SETの値をともに「0」にする。そして、エラー解析部810は、エラーフラグ前回値PRE_ERRを「11」に更新する。
図47に例示した動作においてエラーフラグの前回値が「01」で今回値「11」であった場合を考える。この場合、入力信号D0の更新タイミングが、前回はエラー警告期間内であったが、今回は、そのエラー警告期間からずれて、エラーフラグERR1が検出される期間内となった可能性が高い。前回と今回とのずれの大きさが急激に変わっていないのであれば、エラー警告期間に近い期間、つまり、反転クロック信号CKBの立下りの後の期間内に入力信号D0が更新された可能性が高い。したがって、この場合にエラー解析部810は、ホールド違反エラーと判断している。
一方、エラーフラグの前回値が「00」で今回値「11」であった場合、エラー警告期間から遠い期間、つまり、反転クロック信号CKBの立下りエッジの前の期間内に入力信号D0が更新された可能性が高い。したがって、この場合にエラー解析部810は、セットアップ違反エラーと判断している。
図48は、第3の実施の形態における電源供給部200の動作の一例を示す図である。ホールド違反警告フラグAL_HOLD、ホールド違反エラーフラグERR_HOLDおよびセットアップ違反エラーフラグERR_SETの値が全て「0」である場合を考える。この場合、電源供給部200は、クロック分配回路駆動電圧vCKを設定値Vscに制御し、論理回路駆動電圧vDPを設定値Vsdに制御する。なお、電源供給部200は、第3の実施の形態と同様に、論理回路駆動電圧vDPの設定値Vsdをクロック分配回路駆動電圧vCKの設定値Vscより低く設定してもよい。
セットアップ違反エラーフラグERR_SETのみが「1」であった場合、電源供給部200は、クロック分配回路駆動電圧vCKを設定値Vecに緊急昇圧し、論理回路駆動電圧vDPを設定値Vedに緊急昇圧する。
ホールド違反エラーフラグERR_HOLDのみが「1」であった場合、電源供給部200は、クロック分配回路駆動電圧vCKのみを設定値Vecに緊急昇圧する。
ホールド違反警告フラグAL_HOLDのみが「1」であった場合、電源供給部200は、クロック分配回路駆動電圧vCKをVecより低い設定値Vacに昇圧する。
図49は、第4の実施の形態におけるエラーフラグERR1およびERR2がともに「0」となる場合のエラー検出回路650の動作の一例を示すタイミングチャートである。この例において、入力信号D0は、監視開始タイミングからセットアップ時間、ホールド時間およびエラー警告期間が経過するまでの間、値が変化しないものとする。
クロック信号CLKの立上りに応じて反転クロック信号CKBに立下りエッジが生じると、前段のラッチ511は、その時点で「d1」の値の入力信号D0を保持してラッチ出力信号L0として出力する。
反転クロック信号CKBの立下りに応じてクロック信号CK2に立上りエッジが生じると、後段のラッチ512は、前段からのラッチ出力信号L0を出力信号Q0としてスルー出力する。
そして、反転クロック信号CKBの立下りに遅延して遅延クロック信号CKB_EX1に立下りエッジが生じると、ラッチ651は、その時点で「d1」の値の入力信号D0を保持してラッチ出力信号L1として出力する。XORゲート652は、ラッチ出力信号L0およびM1の値がともに「d1」であるから、「0」の値のエラー信号E1を出力する。ラッチ653は、エラー信号E1を保持してエラーフラグERR1として出力する。
遅延クロック信号CKB_EX1の立下りに対して、さらに遅延して遅延クロック信号CKB_EX2に立下りエッジが生じると、ラッチ654は、その時点で「d1」の値の入力信号D0を保持してラッチ出力信号L2として出力する。XORゲート655は、ラッチ出力信号L0およびL2の値がともに「d1」であるから、「0」の値のエラー信号E2を出力する。ラッチ656は、エラー信号E2を保持してエラーフラグERR2として出力する。
このように、監視開始タイミングからセットアップ時間、ホールド時間およびエラー警告期間が経過するまでの間、入力信号D0の値が変化しなかった場合、エラーフラグERR1およびERR2はともに「0」となる。
図50は、第4の実施の形態におけるエラーフラグERR2のみが「0」となる場合のエラー検出回路650の動作の一例を示すタイミングチャートである。この例において、入力信号D0は、エラー警告期間内に値が「d1」から「d2」に変化したものとする。エラー警告期間は、遅延クロック信号CKB_EX1の立下りエッジから遅延クロック信号CKB_EX2の立下りエッジまでの期間である。
クロック信号CLKの立上りに応じて反転クロック信号CKBに立下りエッジが生じると、前段のラッチ511は、その時点で「d1」の値の入力信号D0を保持してラッチ出力信号L0として出力する。
そして、反転クロック信号CKBに立下りに遅延して遅延クロック信号CKB_EX1に立下りエッジが生じると、ラッチ651は、その時点で「d1」の値の入力信号D0を保持してラッチ出力信号L1として出力する。XORゲート652は、ラッチ出力信号L0およびM1の値がともに「d1」であるから、「0」の値のエラー信号E1を出力する。ラッチ653は、エラー信号E1を保持してエラーフラグERR1として出力する。
遅延クロック信号CKB_EX1に対して、さらに遅延して遅延クロック信号CKB_EX2に立下りエッジが生じると、ラッチ654は、その時点で「d2」の値の入力信号D0を保持してラッチ出力信号L2を出力する。XORゲート655は、ラッチ出力信号L0の値が「d1」でラッチ出力信号L2の値が「d2」であるから、「1」の値のエラー信号E2を出力する。ラッチ656は、エラー信号E2を保持してエラーフラグERR2として出力する。
このように、エラー警告期間内に入力信号D0の値が変化した場合、エラーフラグERR2のみが「1」となる。
図51は、第4の実施の形態におけるエラーフラグERR1およびERR1がともに「1」となる場合のエラー検出回路650の動作の一例を示すタイミングチャートである。この例において、入力信号D0は、監視開始タイミングからセットアップ時間およびホールド期間が経過するまでの間に値が「d1」から「d2」に変化したものとする。遅延クロック信号CKB_EX1に立下りエッジが生じたときが、ホールド時間の経過したときである。
クロック信号CLKの立上りに応じて反転クロック信号CKBに立下りエッジが生じると、前段のラッチ511は、その時点で「d1」の値の入力信号D0を保持してラッチ出力信号L0として出力する。
そして、反転クロック信号CKBに立下りに遅延して遅延クロック信号CKB_EX1に立下りエッジが生じると、ラッチ651は、その時点で「d2」の値の入力信号D0を保持してラッチ出力信号L1として出力する。XORゲート652は、ラッチ出力信号L0が「d1」でラッチ出力信号L1の値が「d2」であるから、「1」の値のエラー信号E1を出力する。ラッチ653は、エラー信号E1を保持してエラーフラグERR1として出力する。
遅延クロック信号CKB_EX1に対して、さらに遅延して遅延クロック信号CKB_EX2に立下りエッジが生じると、ラッチ654は、その時点で「d2」の値の入力信号D0を保持してラッチ出力信号L2として出力する。XORゲート655は、ラッチ出力信号L0の値が「d1」でラッチ出力信号L2の値が「d2」であるから、「1」の値のエラー信号E2を出力する。ラッチ656は、エラー信号E2を保持してエラーフラグERR2として出力する。
このように、監視開始タイミングからセットアップ時間およびホールド期間が経過するまでの間に入力信号D0の値が変化した場合、エラーフラグERR1およびERR1がともに「1」となる
図52は、第4の実施の形態におけるエラー検出回路650のトラップウィンドウおよびデータの更新タイミングの一例を示す図である。ここで、トラップウィンドウは、エラー検出回路650がタイミングエラーを検出する期間のことである。
第1トラップウィンドウは、ラッチ653がエラーフラグERR1を検出する期間である。この期間は、クロック信号CLKの立上りエッジを境にセットアップ時間およびホールド時間を含む期間である。
第2トラップウィンドウは、ラッチ656がエラーフラグERR2を検出する期間である。この期間は、クロック信号CLKの立上りエッジを境にセットアップ時間およびホールド違反警告マージンを含む期間である。ホールド違反警告マージンは、ホールド時間にエラー警告期間を加えた期間である。
この第2トラップウィンドウの範囲外において入力信号D0が更新された場合、エラーフラグERR1およびERR2がともに「0」となる。エラー警告期間において入力信号D0が更新された場合、その更新タイミングは第2トラップウィンドウ内であるが第1トラップウィンドウ内に含まれない。このため、エラーフラグERR2のみが「1」となる。第1トラップウィンドウ内において入力信号D0が更新された場合、エラーフラグERR1およびERR2がともに「1」となる。
このように、第4の実施の形態によれば、入力信号D0が第1トラップウィンドウ内において変化した場合にはエラー検出回路650によりタイミングエラー(ERR1)が検出される。また、入力信号D0が第2トラップウィンドウ内において変化した場合にはエラー検出回路650によりタイミングエラー(ERR2)が検出される。そして、エラー解析部810は、これらのタイミングエラーの履歴に基づいて反転クロック信号CKBの立下りエッジの前後のいずれにおいて入力信号D0が変化したかを判断する。これにより、集積回路100は、タイミングエラーの種類を判別することができる。
なお、セットアップ違反エラーを検出した場合に集積回路100は電圧を昇圧しているが、周波数制御をさらに行ってもよい。例えば、エラー検出回路650は、セットアップ違反エラーフラグERR_SETを、電源供給部200でなくクロック生成部300に出力する。クロック生成部300は、セットアップ違反エラーフラグERR_SETが「1」である場合に「0」の場合よりもクロック信号CLKの周波数を低下させる。一方、ホールド違反エラーの検出時において、クロック生成部300は周波数を制御せず、電源供給部200が電圧を昇圧する。ホールド違反エラーの発生率は、周波数を低下させても低減しないためである。この場合、クロック生成部300は、特許請求の範囲の周波数制御部の一例である。電圧と比較して周波数は早期に変更することができるため、集積回路100は、周波数制御により迅速にエラーを補償することができる。
また、前述の周波数制御を行う場合、集積回路100は、ホールド違反エラー検出時にクロック分配回路駆動電圧vCKに加えて論理回路駆動電圧vDPを昇圧してもよい。
また、集積回路100は、クロック分配回路410に代えて第1の実施の形態のクロック分配部400を備え、最小遅延クロック信号mCLKを同期動作回路500に分配してもよい。これにより、クロックスキューがさらに減少する。同様に、集積回路100は、クロック分配回路410に代えて第2の実施の形態のクロック分配回路制御部700およびクロック分配部400を備え、最小遅延クロック信号mCLKを同期動作回路500に分配してもよい。
[第1の変形例]
図53は、第4の実施の形態における第1の変形例における集積回路100の一構成例を示すブロック図である。この第1の変形例のクロック分配回路410は、クロック信号CLKをさらにエラー補償制御部800に信号線407を介して分配する点において第4の実施の形態と異なる。エラー補償制御部800に対しては、クロック信号CLKは、エラー数を計数するタイミングを指示するために分配される。
図54は、第4の実施の形態における第1の変形例におけるエラー補償制御部800の一例を示すブロック図である。第15の変形例のエラー補償制御部800は、エラー解析部811およびエラーフラグ計数部830を備える。
エラーフラグ計数部830は、ERR01_CNTおよびERR11_CNTを算出するものである。ERR01_CNTは、所定の計測周期内においてエラーフラグERR2のみが「1」となった回数である。ERR11_CNTは、計測周期内においてエラーフラグERR1およびERR2がともに「1」となった回数である。エラーフラグ計数部830は、これらの計数値をエラー解析部811に信号線839を介して出力する。なお、エラーフラグ計数部830は、特許請求の範囲に記載の履歴保持部の一例である。
エラー解析部811は、計数値ERR01_CNTおよびERR11_CNTに基づいてエラーを解析するものである。詳細には、ERR11_CNTが閾値(例えば、「1」)未満であり、ERR01_CNTがERR11_CNTよりも大きい場合にエラー解析部811は、ホールド違反警告フラグAL_HOLDをオン状態にする。
また、ERR01_CNTが閾値以上であり、ERR01_CNTがERR11_CNTよりも大きい場合にエラー解析部811は、ホールド違反エラーフラグERR_HOLDをオン状態にする。ERR01_CNTがERR11_CNT以下である場合にエラー解析部811は、セットアップ違反エラーフラグERR_SETをオン状態にする。
図55は、第4の実施の形態における第1の変形例におけるエラーフラグ計数部830の一構成例を示すブロック図である。エラーフラグ計数部830は、ANDゲート831および832と、エラーフラグカウンタ833および834とを備える。
ANDゲート831および832は、入力値の論理積を生成するものである。ANDゲート831は、エラーフラグERR1を反転した値とエラーフラグERR2との論理積をエラーフラグカウンタ833に出力する。ANDゲート832は、エラーフラグERR1およびエラーフラグERR2の論理積をエラーフラグカウンタ834に出力する。
エラーフラグカウンタ833は、所定の計測期間内においてエラーフラグERR2の値のみが「1」となった回数を計数するものである。具体的には、エラーフラグカウンタ833は、クロック信号CLKの示すタイミング(例えば、立上りエッジ)においてANDゲート831の出力値が「1」であれば、計数値を増分する。エラーフラグカウンタ833は、計数値をERR01_CNTとしてエラー解析部811に出力する。そして、一定のクロックサイクルが経過したときに計数値を「0」に初期化する。
エラーフラグカウンタ834は、所定の計測期間内においてエラーフラグERR1およびエラーフラグERR2の値がともに「1」となった回数を計数するものである。エラーフラグカウンタ824の構成は、ANDゲート832の出力値を監視する点以外は、エラーフラグカウンタ833の構成と同様である。エラーフラグカウンタ834は、計数値をERR11_CNTとしてエラー解析部811に出力する。
図56は、第4の実施の形態における第1の変形例におけるエラー解析部811の動作の一例を示す図である。ERR01_CNT=0かつERR_CNT=0である場合を考える。この場合、エラー解析部811は、ホールド違反警告フラグAL_HOLD、ホールド違反エラーフラグERR_HOLDおよびセットアップ違反エラーフラグERR_SETの値を全て「0」にする。
ERR01_CNT>0かつERR11_CNT=0である場合にエラー解析部811は、ホールド違反警告フラグAL_HOLDの値を「1」にする。また、エラー解析部811は、ホールド違反エラーフラグERR_HOLDおよびセットアップ違反エラーフラグERR_SETの値をともに「0」にする。
ERR01_CNT>ERR11_CNTかつERR11_CNT>0である場合にエラー解析部811は、ホールド違反エラーフラグERR_HOLDの値を「1」にする。また、エラー解析部811は、ホールド違反警告フラグAL_HOLDおよびセットアップ違反エラーフラグERR_SETの値をともに「0」にする。
ERR11_CNT≧ERR01_CNTかつERR01_CNT>0である場合、または、ERR11_CNT>0かつERR01_CNT=0である場合を考える。この場合、エラー解析部811は、セットアップ違反エラーフラグERR_SETの値を「1」にする。また、エラー解析部811は、ホールド違反警告フラグAL_HOLDおよびホールド違反エラーフラグERR_HOLDの値をともに「0」にする。
なお、エラー解析部811は、ERR01_CNT≧ERR11_CNTかつERR11_CNT>0である場合にホールド違反を検出してもよい。この場合、ERR11_CNT>ERR01_CNTかつERR11_CNT>0であるときにエラー解析部811はセットアップ違反エラーを検出する。
図57は、第4の実施の形態における第1の実施の形態におけるエラー検出回路650のトラップウィンドウおよびデータの更新タイミングの一例を示す図である。分布Ds1乃至Ds4は、入力信号D0の更新タイミングの分布の一例である。
分布Ds1は、第1トラップウィンドウ内に全体が含まれないが、一部がエラー警告期間内に含まれる分布である。この分布Ds1においては、ERR01_CNT>0かつERR11_CNT=0となり、ホールド違反警告フラグAL_HOLDが「1」とされる。
分布Ds2は、ピークがエラー警告期間内に含まれ、一部が第1トラップウィンドウ内に含まれる分布である。この分布Ds2においては、ERR01_CNT>ERR11_CNTかつERR11_CNT>0となり、ホールド違反エラーフラグERR_HOLDが「1」とされる。
分布Ds3は、第1トラップウィンドウにおけるセットアップ時間内にピークが含まれる分布である。この分布Ds3においては、ERR11_CNT≧ERR01_CNTかつERR01_CNT>0となり、セットアップ違反エラーフラグERR_SETが「1」とされる。
分布Ds4は、第1トラップウィンドウおよび第2トラップウィンドウ外にピークが位置し、一部が第1トラップウィンドウに含まれる分布である。この分布Ds4においては、ERR11_CNT>0かつERR01_CNT=0となり、セットアップ違反エラーフラグERR_SETが「1」とされる。
このように第1の変形例によれば、エラー解析部811は、ERR01_CNTおよびERR11_CNTに基づいてタイミングエラーの種類を判別する。エラーフラグの統計からエラーを解析するため、エラー解析部811は、エラーフラグの前回値および今回値から解析する第4の実施の形態よりも正確にエラーを解析することができる。
[第2の変形例]
図58は、第4の実施の形態における第2の変形例のエラー検出回路650、フリップフロップ510およびクロック分配回路410の一構成例を示す回路図である。この第2の変形例のクロック分配回路410は、遅延部472および479をさらに備える点において第4の実施の形態と異なる。また、第16の変形例においてインバータ471からはクロック信号CKB_PEXがエラー検出回路650および遅延部472に出力される。
遅延部472は、クロック信号CKB_PEXを遅延させるものである。遅延部472は、偶数個のインバータ473を備え、これらのインバータ473でクロック信号CKB_PEXを遅延させてクロック信号CKBとしてフリップフロップ510およびインバータ474に出力する。ここで、インバータ473の個数は、例えば、遅延部472における遅延時間がフリップフロップ510のセットアップ時間より長くなるように定められる。この結果、クロック信号CKB_PEXにおいて、クロック信号CKBの立下りエッジから遅延部472の遅延時間を遡ったタイミングで立下りエッジが生じることになる。
遅延部479は、遅延クロック信号CKB_EX2をさらに遅延させるものである。遅延部479は、偶数個のインバータ480を備える。遅延部479は、これらのインバータ480で遅延クロック信号CKB_EX2を遅延させて遅延クロック信号CKB_EX3としてエラー検出回路650に出力する。
第2の変形例のエラー検出回路650は、ラッチ657、659、670および672とXORゲート658および671とをさらに備える点において第4の実施の形態と異なる。
ラッチ657、659、670および672の構成はラッチ511と同様である。ただし、ラッチ657は、遅延クロック信号CKB_EX3がオフ状態になった場合に入力信号D0を保持してラッチ出力信号L3として出力する。ラッチ659は、クロック信号CK2がオフ状態になった場合にXORゲート658からのエラー信号を保持してエラーフラグERR3としてエラー補償制御部800に出力する。ラッチ670は、クロック信号CKB_PEXがオフ状態になった場合に入力信号D0を保持してラッチ出力信号L4として出力する。ラッチ672は、クロック信号CK2がオフ状態になった場合にXORゲート671からのエラー信号を保持してエラーフラグERR4としてエラー補償制御部800に出力する。
XORゲート658および671は、入力信号の排他的論理和を出力するものである。XORゲート658は、ラッチ657および511からのラッチ出力信号L3およびL0の排他的論理和をエラー信号E3としてラッチ659に出力する。XORゲート671は、ラッチ651および670からのラッチ出力信号L1およびL4の排他的論理和をエラー信号E4としてラッチ672に出力する。
上述の構成により、第2トラップウィンドウの後に遅延部479の遅延時間を加えた期間内に入力信号D0が変化すると、エラー信号E3が検出される。
また、監視開始タイミングから遅延部472の遅延時間を遡ったタイミングを起点として、その起点から第1トラップウィンドウが経過するまでの期間内に力信号D0が変化すると、エラー信号E4が検出される。
図59は、第4の実施の形態における第2の変形例のエラー検出回路650におけるトラップウィンドウの一例を示す図である。第16の変形例のエラー検出回路650においては、第3トラップウィンドウおよび第4トラップウィンドウが追加される。
第3トラップウィンドウは、ラッチ659がエラーフラグERR3を検出する期間である。この期間は、第2のトラップウィンドウの後に遅延部479の遅延時間を加えた期間である。
第4トラップウィンドウは、ラッチ672がエラーフラグERR4を検出する期間である。この期間は、クロック信号CLKの立上りエッジから遅延部472の遅延時間を遡ったタイミングを起点として、その起点から第1トラップウィンドウの終点までの期間である。
これらのエラーフラグを使用してエラー補償制御部800および電源供給部200は、より正確にエラーを解析してエラー補償を行うことができる。
例えば、前回にいずれのエラーフラグも「0」であり、今回にエラーフラグERR3のみが「1」であった場合に電源供給部200は、Vacより低い設定値にクロック分配回路駆動電圧vCKを昇圧する。
また、前回にいずれのエラーフラグも「0」であり、今回にエラーフラグERR4のみが「1」であった場合にエラー補償制御部800は、セットアップ違反の警告を行う。前回にエラーフラグERR4のみが「1」であり、今回にエラーフラグの全てが「1」である場合にエラー補償制御部800は、セットアップ違反エラーを検出する。
なお、エラー検出回路650に、ラッチおよびインバータを追加してトラップウィンドウをさらに追加してもよい。また、第1トラップウィンドウに追加するトラップウィンドウは任意である。例えば、集積回路100は、第1トラップウィンドウに第4トラップウィンドウのみを追加してもよいし、第1トラップウィンドウに第2トラップウィンドウおよび第3トラップウィンドウのみを追加してもよい。
このように第2の変形例によれば、エラー検出回路650がトラップウィンドウを3つ以上備えるため、より正確なエラー解析を行うことができる。
なお、上述の第4の実施の形態の集積回路100は、クロック分配回路410に代えて第1の実施の形態のクロック分配部400を備え、最小遅延クロック信号mCLKを同期動作回路500に分配してもよい。これにより、クロックスキューがさらに減少する。同様に、第4の実施の形態の集積回路100は、クロック分配回路410に代えて第2の実施の形態のクロック分配回路制御部700およびクロック分配部400を備え、最小遅延クロック信号mCLKを同期動作回路500に分配してもよい。
なお、上述の実施の形態は本技術を具現化するための一例を示したものであり、実施の形態における事項と、特許請求の範囲における発明特定事項とはそれぞれ対応関係を有する。同様に、特許請求の範囲における発明特定事項と、これと同一名称を付した本技術の実施の形態における事項とはそれぞれ対応関係を有する。ただし、本技術は実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において実施の形態に種々の変形を施すことにより具現化することができる。
また、上述の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。この記録媒体として、例えば、CD(Compact Disc)、MD(MiniDisc)、DVD(Digital Versatile Disk)、メモリカード、ブルーレイディスク(Blu-ray Disc(登録商標))等を用いることができる。
なお、本技術は以下のような構成もとることができる。
(1)所定のタイミングを指示するタイミング信号を分配するタイミング信号分配回路と、
前記分配されたタイミング信号に同期して動作する同期動作回路と、
前記同期動作回路の動作結果に基づいて所定の論理演算を実行する論理回路と、
前記タイミング信号分配回路を駆動させるタイミング信号分配回路駆動電圧より低い電圧を前記論理回路に論理回路駆動電圧として供給する電源供給部と
を具備する集積回路。
(2)前記電源供給部は、前記論理回路駆動電圧と同一の電圧値を有する電圧をさらに前記同期動作回路に供給する
前記(1)記載の集積回路。
(3)前記電源供給部は、前記タイミング信号分配回路駆動電圧と同一の電圧値を有する電圧をさらに前記同期動作回路に供給する
前記(1)記載の集積回路。
(4)前記電源供給部は、
電源電圧を降圧して前記タイミング信号分配回路に前記タイミング信号分配回路駆動電圧として供給するタイミング信号分配回路駆動電圧制御部と、
前記供給されたタイミング信号分配回路駆動電圧を降圧して前記論理回路に前記論理回路駆動電圧として供給する論理回路駆動電圧制御部と
を備える前記(1)乃至(3)記載の集積回路。
(5)前記電源供給部は、
電源電圧を降圧して前記タイミング信号分配回路に前記タイミング信号分配回路駆動電圧として供給するタイミング信号分配回路駆動電圧制御部と、
前記電源電圧を前記タイミング信号分配回路駆動電圧より低い電圧に降圧して前記論理回路に前記論理回路駆動電圧として供給する論理回路駆動電圧制御部と
を備える前記(1)乃至(3)記載の集積回路。
(6)前記同期動作回路におけるエラーを検出するエラー検出部をさらに備え、
前記電源供給部は、前記エラーの検出頻度が所定値以上である場合には前記タイミング信号分配回路駆動電圧を昇圧する
前記(1)乃至(5)記載の集積回路。
(7)前記電源供給部は、前記エラーの検出頻度が前記所定値以上である場合には前記論理回路駆動電圧(vDP)を昇圧する
前記(6)記載の集積回路。
(8)所定のタイミングを指示するタイミング信号を分配するタイミング信号分配回路と、
前記分配されたタイミング信号に同期して動作する同期動作回路と、
前記同期動作回路の動作結果に基づいて所定の論理演算を実行する論理回路と、
前記論理回路を駆動させる論理回路駆動電圧が第1の電圧よりも低い場合には前記論理回路駆動電圧より高い電圧を前記タイミング信号分配回路にタイミング信号分配回路駆動電圧として供給する電源供給部と
を具備する集積回路。
(9)前記電源供給部は、前記第1の電圧より高い電圧である第2の電圧に対して前記論理回路駆動電圧が高い場合には前記論理回路駆動電圧より低い電圧を前記タイミング信号分配回路に前記タイミング信号分配回路駆動電圧として供給する
前記(8)記載の集積回路。
(10)前記電源供給部は、前記論理回路駆動電圧が前記第1の電圧よりも低い場合には前記論理回路駆動電圧の電圧値と前記タイミング信号分配回路駆動電圧との電圧値の差分を一定にする
前記(8)または(9)記載の集積回路。
(11)前記電源供給部は、前記論理回路駆動電圧が前記第1の電圧よりも低い場合には前記第1の電圧を前記タイミング信号分配回路に前記タイミング信号分配回路駆動電圧として供給する
前記(10)記載の集積回路。