(57)【要約】【課題】タイミング違反を自動的に検出して、必要な時に必要なだけエラーの有無を監視することで、より信頼性の高い半導体集積回路を提供する。【解決手段】複数の論理ゲートを有する論理回路と、前記論理回路を流れる信号の遷移を検出して検出信号を出力する信号遷移検出回路と、前記検出信号に基づいて、イネーブル信号を出力するイネーブル信号生成回路と、を備えたことを特徴とする半導体集積回路が提供される。【選択図】図１
2009246650.tif 000002
【特許請求の範囲】
【請求項１】
複数の論理ゲートを有する論理回路と、
前記論理回路を流れる信号の遷移を検出して検出信号を出力する信号遷移検出回路と、
前記検出信号に基づいて、イネーブル信号を出力するイネーブル信号生成回路と、
を備えたことを特徴とする半導体集積回路。
【請求項２】
前記信号遷移検出回路は、前記複数の論理ゲートの少なくともいずれかと電源との間と、前記複数の論理ゲートの少なくともいずれかとグランドとの間と、の少なくともいずれかを流れる電流に基づいて前記検出信号を出力することを特徴とする請求項１記載の半導体集積回路。
【請求項３】
前記信号遷移検出回路は、前記複数の論理ゲートのうちの少なくともいずれかの接続中点と、前記論理回路の出力と、からそれぞれ分岐された信号のレベルに応じて前記検出信号を出力することを特徴とする請求項１記載の半導体集積回路。
【請求項４】
前記論理回路の出力が入力され、前記イネーブル信号に基づいて前記論理回路の出力の再読込を実行するフリップフロップをさらに備えたことを特徴とする請求項１〜３のいずれか１つに記載の半導体集積回路。
【請求項５】
前記信号遷移検出回路は、前記論理回路と前記フリップフロップとの間に直列に接続された複数のインバータを含み、
前記複数のインバータの少なくともいずれかの接続中点と、前記フリップフロップの入力と、から分岐された信号のレベルに応じて前記検出信号を出力することを特徴とする請求項４記載の半導体集積回路。
【請求項６】
前記イネーブル信号生成回路は、前記検出信号とクロックエッジとに基づいて前記イネーブル信号を出力することを特徴とする請求項１〜５のいずれか１つに記載の半導体集積回路。
【請求項７】
前記イネーブル信号生成回路は、前記検出信号が停止されると前記イネーブル信号の出力を停止することを特徴とする請求項１〜６のいずれか１つに記載の半導体集積回路。
【請求項８】
前記イネーブル信号生成回路は、前記イネーブル信号を出力すると、次のクロックまで前記検出信号の出力を禁止することを特徴とする請求項１〜７のいずれか１つに記載の半導体集積回路。
【請求項９】
前記イネーブル信号が出力されている時間に対応してクロックタイミングを遅延させるクロック生成回路をさらに備えたことを特徴とする請求項１〜８のいずれか１つに記載の半導体集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路に関し、より詳細には、タイミングエラーを検出可能な半導体集積回路に関する。
【背景技術】
【０００２】
半導体集積回路の集積度が上がり、集積回路を構成する半導体素子のサイズが小さくなるにつれて、素子の製造ばらつきが大きくなる。ばらつきが大きくなると、ある確率で動作の遅い回路ブロックが存在することになり、クロック周波数に対して回路の動作が間に合わずタイミングエラーを起こすという問題がある。これを避けるためにクロック周波数を落とせば、要求される動作速度を満たすことが困難になる。また、集積度が上がるにつれて、クロックをチップ上の複数の回路へ等しい遅延で配線することが難しくなり、電源電圧にもノイズが混入しやすくなる。その結果として、少しのばらつきでタイミングエラーを起こす回路が増え、歩留まりが低下するという問題がある。
【０００３】
従来、タイミングエラーやソフトエラーを回避する技術として、クロック信号に応じてデータを保持するフリップフロップ回路において、特許文献１に記載されているような方法が知られている。これは、パイプライン上のフリップフロップと並列に、別のラッチ回路を設け、システムクロックから少し遅れたクロックでこれを使用して、両方が保持しているデータの内容をくらべ、違う場合にエラーがあったと判断してデータの修正を行うものである。
【０００４】
しかし、こういった方法には、「少し遅れたクロック」をどの程度遅らせればよいかの決定が難しいという問題がある。短すぎればエラーを検出できず、長すぎれば、次の正しい演算データを誤りと誤認してしまう。よって、この監視時間の設定の問題から信頼性を高めることが難しかった。
【特許文献１】米国特許出願公開第２００４／０１９９８２１号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明は、タイミング違反を自動的に検出して、エラーの有無を監視することで、より信頼性の高い半導体集積回路を提供する。
【課題を解決するための手段】
【０００６】
本発明の一態様によれば、複数の論理ゲートを有する論理回路と、前記論理回路を流れる信号の遷移を検出して検出信号を出力する信号遷移検出回路と、前記検出信号に基づいて、イネーブル信号を出力するイネーブル信号生成回路と、を備えたことを特徴とする半導体集積回路が提供される。
【発明の効果】
【０００７】
本発明によれば、タイミング違反を自動的に検出して、エラーの有無を監視することで、より信頼性の高い半導体集積回路が提供される。
【発明を実施するための最良の形態】
【０００８】
本発明の実施の形態によれば、タイミング違反の予測は、クロックの到着するタイミングにおいて、対象となるフリップフロップに接続されるロジック回路が動作中であるかどうかで判断する。具体的には、ロジック回路中の対象フリップフロップに近いいくつかのロジックゲートの信号遷移、または電流を検出し、検出された場合、その時点から検出されなくなるまでの長さのパルスを発生させ、その信号をもとに監視時間を決定する。正しく動作している場合は、クロックエッジでは信号遷移は起こっておらず、電流もリーク電流のみで、アクティブ電流は流れていないので、パルス信号は発生されない。
【０００９】
以下、図面を参照しつつ、本発明の実施の形態について詳細に説明する。なお、各図において、既出の図面に表したものと同様の要素には同一の符号を付して詳細な説明は適宜省略する。
【００１０】
図１は、本発明の実施の形態に係る半導体集積回路の要部を表したブロック図である。  また、図２は、本実施形態の半導体集積回路の動作の一例を表したタイミングチャートである。  
本実施形態の半導体集積回路は、フリップフロップ１００と、組み合わせロジック回路２００と、訂正機能付きフリップフロップ３００と、信号遷移検出回路４００と、イネーブル信号生成回路５００と、を備えている。組み合わせロジック回路２００は、複数の論理回路２００−１、２００−２・・・２００−Ｎを組み合わせて、任意の論理を実現する回路である。これら論理回路２００−１、２００−２・・・２００−Ｎのそれぞれは、ひとつのトランジスタからなるものでもよく、ひとつのロジックゲートからなるものでもよく、複数のロジックゲートからなるものでもよい。
【００１１】
フリップフロップ１００の出力が組み合わせロジック回路２００に入力され、組み合わせロジック回路２００における演算の結果を含む演算出力２０が、訂正機能付きフリップフロップ３００に入力される。そして、組み合わせロジック回路２００の最終段を含む論理回路２００−Ｎに、信号遷移検出回路４００が接続されている。  
信号遷移検出回路４００は、論理回路２００−Ｎが動作しているかどうかを検出する。その検出方法としては、後に詳述するように、例えばドミノ回路を用いる方法や、論理回路２００−Ｎを流れる電流を検出する方法がある。信号遷移検出回路４００は、論理回路２００−Ｎが動作している場合、すなわち信号遷移が計測されている間は、それを示す検出信号３０をイネーブル信号生成回路５００に出力する。
【００１２】
イネーブル信号生成回路５００は、検出信号３０とクロックエッジとに基づいてイネーブル信号４０を出力する。すなわち、イネーブル信号生成回路５００は、クロック１０の立ち上がり、すなわちクロックエッジから、信号遷移検出回路４００の検出信号３０が消えるまでの時間に応じたパルス幅を有するイネーブル信号４０を生成し、訂正機能付きフリップフロップ３００のイネーブル端子（Enable）に出力する。訂正機能付きフリップフロップ３００は、イネーブル信号４０がオン（ハイレベル）になっている間、訂正機能を動作させる。
【００１３】
本実施形態においては、訂正機能付きフリップフロップ３００の入力直前の論理回路２００−Ｎの動作によって、信号遷移検出回路４００から信号遷移に応じた検出信号３０が生成される。イネーブル信号生成回路５００では、クロック１０が立ち上がったときに信号遷移検出回路４００から検出信号３０が出ている場合に、それに同期させる形でイネーブル信号４０を出力する。イネーブル信号生成回路出力５００から出力されるイネーブル信号４０に基づいて、訂正機能付きフリップフロップ３００においてエラーの修正動作が行われ、訂正機能付きフリップフロップ３００の出力５０をクロックタイミングより遅れて到着したデータに修正する。
【００１４】
なお、後に詳述するように、本実施形態においては、訂正機能付きフリップフロップ３００は必ずしも必須ではない。すなわち、イネーブル信号信号生成回路５００を設けることにより、タイミングエラーが生ずるとイネーブル信号４０が出力される。そこで、イネーブル信号４０またはこれに対応して形成される信号を外部に出力し、ユーザーにエラーが起きたことを知らせるアラームなどとしても使用できる。
【００１５】
図２に表した具体例について説明すると、以下の如くである。  
フリップフロップ１００は、クロック１０に基づいて組み合わせロジック回路２００に所定の入力信号を与える。組み合わせロジック回路２００は、その入力信号に基づいて所定の演算を実行し、演算出力２０を訂正機能付きフリップフロップ３００に出力する。この時、組み合わせロジック回路２００から出力される出力信号２０には、遅延２２が生ずることがある。
【００１６】
ここで、最終段の論理回路２００−Ｎが論理演算を開始し、演算出力２０を訂正機能付きフリップフロップ３００に出力した後に至る期間は、例えば論理回路２００−Ｎにおいて所定の動作電流が流れる。信号遷移検出回路４００は、論理回路２００−Ｎにおける電流の流れを検出することにより、論理回路２００−Ｎが動作している間だけ、ハイレベルの検出信号３０を出力する。つまり、信号遷移検出回路４００の動作する遅延時間を考慮すれば、組み合わせロジック回路２００から正しい演算出力２０が出力されるタイミングを含めてその前後の期間に、ハイレベルの検出信号３０を出力する。
【００１７】
イネーブル信号生成回路５００は、ハイレベルの検出信号３０を入力し且つクロック１０がハイレベルの間、ハイレベルのイネーブル信号４０を出力する。
【００１８】
訂正機能付きフリップフロップ３００は、ハイレベルのイネーブル信号４０を入力すると、組み合わせロジック回路２００から正しい演算出力２０が送られるのを待つ。そして、組み合わせロジック回路２００から演算出力２０が出力されると、それに基づいて出力５０を反転させる。その後、イネーブル信号４０はローレベルに反転するが、訂正機能付きフリップフロップ３００は次のクロックエッジ１０Ｓまで出力５０を維持する。そして、図２に表した具体例においては、次のクロックエッジ１０Ｓにおいて演算出力２０はハイレベルでないので、訂正機能付きフリップフロップ３００の出力５０はローレベルに遷移する。
【００１９】
以上説明したように、本実施形態によれば、組み合わせロジック回路２００の最終段を含む論理回路２００−Ｎの動作を、信号遷移検出回路４００により検出し、正しい演算出力２０が出力されるタイミングの前後の期間に、訂正機能付きフリップフロップ３００にイネーブル信号４０を送る。訂正機能付きフリップフロップ３００は、イネーブル信号４０に基づいて正しい演算出力２０を待ち、演算出力２０が来ると出力５０を反転させる。さらに、その後イネーブル信号４０がローレベルに遷移した後も、次のクロックエッジまで出力５０を維持する。  
このようにすれば、演算出力２０がクロック１０からみて遅延した場合でも、正しい演算出力２０が出力されるタイミングが分かる。そして、そのタイミングに入力した正しい演算出力２０を反映させた出力５０を得ることができる。
【００２０】
なお、本具体例において、訂正機能付きフリップフロップ３００における訂正機能を、少し遅れたクロック１０により実現する場合は、イネーブル信号４０が消える（ローレベルになる）タイミングで、少し遅れたクロック１０を立ち上げればよい。また、訂正機能付きフリップフロップ３００の訂正機能が、クロックに同期して動作する場合には、イネーブル信号生成回路５００でクロック１０を使ってイネーブル信号４０を生成しなくても、訂正機能付きフリップフロップ３００において自動的にクロックが立ち上がってからエラー修復（訂正機能）が始まることになる。従って、この場合には、イネーブル信号生成回路５００へのクロック１０の入力は省略できる。
【００２１】
また、イネーブル信号４０は、その発生自体が、タイミングエラーが起きたことを示すサインである。従って、訂正機能付きフリップフロップ３００における訂正に使用する以外にも、イネーブル信号４０またはこれに対応して形成される信号を外部に出力し、ユーザーにエラーが起きたことを知らせるアラームとしても使用できる。
【００２２】
図３は、本実施形態に係る半導体集積回路の変型例のブロック図である。  
本変型例においては、イネーブル信号４０を取り出す端子６００が設けられている。この端子６００は、半導体集積回路の内部に設けられていてもよく、またはイネーブル信号４０を外部に取り出すために設けられていてもよい。
【００２３】
例えば、プロセッサやＯＳ（Operating System）を備えたシステムであれば、端子６００から取り出されるイネーブル信号４０に応じて、割り込み処理などでエラー訂正や処理のやり直しなどを行うことも可能である。
【００２４】
なお、図２に表した具体例においては、それぞれの信号はハイ（Ｈｉｇｈ）の状態でアクティブとしており、また、訂正機能付きフリップフロップ３００は立ち上がりエッジで動作するとしているが、本発明はこの具体例には限定されない。すなわち、一部または全部が負論理動作であっても、同様の動作を実現することは可能である。なお、実際には、信号遷移検出回路４００が電流計測回路の場合、検出信号３０はアナログ信号であるが、図２においてはタイミングの説明のため便宜的に矩形波として表した。
【００２５】
図４は、組み合わせロジック回路２００、信号遷移検出回路４００、イネーブル信号生成回路５００の具体例を表す模式図である。  
すなわち、図４は、組み合わせロジック回路２００を、連続したＣＭＯＳ（Complementary Metal-Oxide-Semiconductor）インバータ２０２により形成した具体例を表す。ここで、図４に表したものは、組み合わせロジック回路２００の最終段の部分であり、組み合わせロジック回路２００は、図示しない回路部分を有していてもよい。また、図４では、組み合わせロジック回路２００を直列のインバータ２０２としているが、もちろんそれ以外の任意の回路にも本発明は適用可能である。
【００２６】
本具体例においては、組み合わせロジック回路２００の最終段を含む４段のＣＭＯＳインバータ２０２のグランド端子と、グランドと、の間に、信号遷移検出回路４００が挿入されている。信号遷移検出回路４００は、ドレインとゲートとが短絡、すなわちダイオード接続されたＮＭＯＳトランジスタ４０２である。組み合わせロジック回路２００が動作して、ＣＭＯＳインバータ２０２からグランドに電流が流れると、信号遷移検出回路４００のＮＭＯＳトランジスタ４０２のゲート電極４０３に電圧が発生する。すなわち、信号遷移検出回路４００は、電流を電圧に変換する。この電圧を、検出信号３０として出力する。
【００２７】
一方、イネーブル信号生成回路５００は、ＣＭＯＳインバータ５０２と、その出力に接続されたインバータ５０４と、ＣＭＯＳインバータ５０２とグランドとの間に接続されたトランジスタ５０６と、を有する。信号遷移検出回路４００からの検出信号３０をＣＭＯＳインバータ５０２で受け、クロック１０がハイレベルになるとトランジスタ５０６がオンになるので、インバータ５０４を介して増幅してイネーブル信号４０を出力する。すなわち、検出信号３０とクロック１０とのアンドに基づいてイネーブル信号４０を立ち上げる。
【００２８】
図５は、図４の具体例の回路の動作のシミュレーション結果を表すグラフ図である。すなわち、同図の横軸は時間（ピコ秒）を表し、縦軸は信号レベル（ボルト）を表す。  
図５には、組み合わせロジック回路２００の最終段のＣＭＯＳインバータ２０２からみて３段目のＣＭＯＳインバータ２０２の出力２１と、組み合わせロジック回路２００からの演算出力２０と、イネーブル信号４０と、を表した。３段目のＣＭＯＳインバータ２０２の出力２１から遅延して、最終段ＣＭＯＳインバータ２０２からの演算出力２０が立ち上がる。そして、これに続いて、イネーブル信号４０が立ち上がっている。従って、この場合には、イネーブル信号４０の立ち上がりと同時に訂正機能付きフリップフロップ３００は演算出力２０に基づいて出力をハイレベルに遷移する。
【００２９】
なお、図５の回路構成例においては、クロックが立ち上がった後、ＣＭＯＳインバータ５０２とインバータ５０４の遅延時間の後、イネーブル信号４０が立ち上がるが、その遅延時間内に組み合わせロジック回路２００が演算を終了し、演算出力２０が立ち上がったため、演算出力２０の後にイネーブル信号４０が得られている。一方、図２のタイミングチャートではイネーブル信号の後に演算出力２０が立ち上がるように記載している。クロック１０の立ち上がり後、イネーブル信号４０が立ち上がるタイミングは、イネーブル信号生成回路５００の遅延時間で決まるが、演算出力２０の立ち上がるタイミングは、タイミングエラーの程度によって変わってくるため、タイミングエラーが深刻な場合は、イネーブル信号４０の後に演算出力２０が立ち上がることも考えられ、図２はその場合を記載したものである。
【００３０】
ここで、本具体例においては、信号遷移検出回路４００は、組み合わせロジック回路２００の動作電流を検出する。この場合、電流の検出は、組み合わせロジック回路２００を構成する全ての論理回路（ＣＭＯＳインバータ２０２）について実行するよりも、最終段の論理回路（ＣＭＯＳインバータ２０２）からみて１つまたは数個の論理回路に対して行う。例えば、最終段からみて、組み合わせロジック回路２００の全体のロジックゲートの段数の１０パーセント程度の段数のロジックゲートに対して動作電流の検出を実行する。少なくとも、訂正機能付きフリップフロップ３００に直接接続される最終段のロジックゲートに対しては電流計測を行う。ＣＭＯＳインバータ５０２はクロック１０が立ち上がった時のみ動作するように、クロック１０をうけるＮＭＯＳトランジスタ５０６が挿入されている。
【００３１】
なお、本具体例においては、信号遷移検出回路４００による電流計測を、組み合わせロジック回路２００からグランドに流れる電流により実行しているが、同様に、電源から組み合わせロジック回路２００に流れる電流を計測することもできるし、両者を組み合わせることもできる。電源から組み合わせロジック回路２００に流れる電流を計測する場合には、ＰＭＯＳトランジスタを使うことができる。
【００３２】
また、信号遷移検出回路４００に設ける電流計測回路としては、電流が流れた時に電圧が発生するようにすれば良い。従って、図４に例示したようなダイオード接続されたトランジスタの他にも、ポリシリコンや基板などで作る抵抗素子や、ゲート電圧や基板電圧を他の電源から調整したトランジスタなども使用可能である。
【００３３】
信号遷移検出回路４００における電流計測に用いるＮＭＯＳトランジスタやＰＭＯＳトランジスタの幅は、それらが接続される、組み合わせロジック回路２００の共通化されているＮＭＯＳトランジスタやＰＭＯＳトランジスタの幅の合計値と同じか、それよりも大きくすることが望ましい。このようにすれば、組み合わせロジック回路２００の動作へのオーバーヘッドを減らすことができる。
【００３４】
また、イネーブル信号生成回路５００の入力回路としては、ＰＭＯＳトランジスタとＮＭＯＳトランジスタの相補型ＣＭＯＳインバータ５０２の他にも、組み合わせロジック回路２００からグランドへの電流を用いる場合にはＮＭＯＳトランジスタと抵抗とを用いることができ、電源から組み合わせロジック回路２００への電流を用いる場合にはＰＭＯＳトランジスタと抵抗とを用いることもできる。いずれの場合にも、信号遷移検出回路４００から出力される電圧値の変化が、イネーブル信号生成回路５００の入力回路のゲインが得られる動作可能入力電圧範囲をカバーするようにすればよい。
【００３５】
一方、イネーブル信号生成回路５００に入力するクロック１０に関しては、電源とＰＭＯＳトランジスタの間にＰＭＯＳトランジスタを挿入し、そのゲートにクロック１０の反転信号を入力してもよい。  
また、図４に表した具体例は、訂正機能付きフリップフロップ３００が立ち上がりエッジ動作である場合に対応するので、クロック信号をＮＭＯＳトランジスタに入力している。これに対して、訂正機能付きフリップフロップ３００が立ち下がりエッジ動作である場合には、クロック１０の反転信号をＮＭＯＳトランジスタに入力するか、電源とＣＭＯＳインバータ５０２との間にＰＭＯＳトランジスタを挿入し、クロック１０をそのＰＭＯＳトランジスタに入力するなどの方法がある。
【００３６】
本実施例では、次のクロックサイクルに取り込まれるべきデータは、クロック１０がハイ（Ｈｉｇｈ）の間には到着しないように、ロジック回路を設計する。もしくは、信号遷移検出回路４００において電流計測を行う対象となる組み合わせロジック回路２００のゲート数を調整する。
【００３７】
図６は、組み合わせロジック回路２００、信号遷移検出回路４００、イネーブル信号生成回路５００の第２の具体例を表す模式図である。  
本具体例においては、組み合わせロジック回路２００には複数の論理ゲート２０４が設けられている。なお、図６においては、組み合わせロジック回路２００の最終段の部分のみを表した。
【００３８】
組み合わせロジック回路２００の論理ゲート２０４の間のいくつかのノードと最終段の出力端とから、信号遷移検出回路４００に信号をそれぞれ分岐させる。分岐された信号は、それぞれ信号遷移検出回路４００に設けられたＣＭＯＳインバータ４０４に入力される。ＣＭＯＳインバータ４０４の出力は共通にＮＭＯＳトランジスタ４０６において電圧変換され、検出信号３０としてイネーブル信号生成回路５００に出力される。
【００３９】
図４に関して前述した具体例の回路では、組み合わせロジック回路２００に使われる電圧は、信号遷移検出回路４００が無い場合に比べて実効的に減少するため、組み合わせロジック回路２００の動作が若干遅くなる。これに対して、本具体例においては、組み合わせロジック回路２００の動作電流を直接測定する代わりに、組み合わせロジック回路２００中のいくつかのノードから信号を分岐させ、分岐先の回路（ＣＭＯＳインバータ４０４）を流れる電流を測定するようにしている。こうすることで、組み合わせロジック回路２００の動作速度へのオーバーヘッドを減らすことができる。
【００４０】
ここで、組み合わせロジック回路２００における信号の分岐は、全てのノードで行うよりも、最終段の論理ゲート２０４からみて１つまたは少数のノードに対して行うことが望ましい。例えは、組み合わせロジック回路２００の全ノード数の１０パーセント程度のノードに対して分岐して信号を取り出せばよい。少なくとも、演算出力２０が出力されるノードについては、信号を信号遷移検出回路４００に分岐させることが望ましい。
【００４１】
信号の分岐先の信号遷移検出回路４００は、電流が測定できれば良いので、トランジスタサイズなどは小さくてよい。そのため、分岐させることによる実行速度の低下は最小に抑えられる。図６に表した組み合わせロジック回路２００は一例であり、本具体例は任意の回路に適用できる。また、信号が分岐された信号遷移検出回路４００は、図６においては、ＣＭＯＳインバータ４０４を有するが、これも任意の回路が適用できる。それぞれのノードから分岐された信号を受ける回路はそれぞれ別である必要もなく、複合ゲートのように複数のノードがまとめられた回路を信号遷移検出回路４００に設けてもよい。また、分岐の数も４つには限らない。この具体例においても、次のクロックサイクルに取り込まれるべきデータは、クロックがハイ（Ｈｉｇｈ）の間には到着しないように、ロジック回路を設計する。もしくは分岐させるノードを調整する。
【００４２】
図７は、組み合わせロジック回路２００、信号遷移検出回路４００、イネーブル信号生成回路５００の第３の具体例を表す模式図である。  
本具体例においても、組み合わせロジック回路２００の最終段の部分には複数の論理ゲート２０４が設けられている。なお、図６に関して前述したものと同様の要素には同一の符号を付して詳細な説明は適宜省略する。
【００４３】
本実施形態においては、演算出力２０にタイミング違反が起きて訂正した後、クロック１０がハイ（Ｈｉｇｈ）の状態の間に、次の演算出力２０が訂正機能付きフリップフロップ３００に到達することもあり得る。これに対して、本具体例においては、イネーブル信号生成回路５００から出力されるイネーブル信号４０のフィードバック回路５１０、５１２、５１４、５０６を設け、一度イネーブル信号４０を発生したら、信号遷移検出回路４００の動作を無効にして、クロックがハイ（Ｈｉｇｈ）の間は次のクロックまでイネーブル信号４０を出力しないようにする。
【００４４】
すなわち、本具体例においては、イネーブル信号生成回路５００の入力にプルダウン用のＮＭＯＳトランジスタ５１６を接続し、フィードバック回路５１０、５１２、５１４、５０６からの出力をＮＭＯＳトランジスタ５１６にフィードバックする。イネーブル信号４０が出力されると、フィードバックがかかり、ＮＭＯＳトランジスタ５１６がオンになり、信号遷移検出回路４００からの検出信号３０は無効にされて、イネーブル信号生成回路５００は動作しない。
【００４５】
なお、この場合、クロック１０の立ち上り時に、次の正しい演算結果が信号遷移回路４００によって対象とされる回路に到達しない範囲であれば、信号遷移検出回路４００による電流計測のための組み合わせロジック回路２００からの信号の分岐は、組み合わせロジック回路２００の中の多くのノードから行っても良い。すなわち、フリップフロップ１００の出力直後と、それにつながる少数のロジックゲートのノードからは、正しい信号でもクロック立ち上り時には動作している可能性があるため、除外する。
【００４６】
組み合わせロジック回路２００から分岐された信号を受ける信号遷移検出回路４００の回路は、インバータには限定されない。また、イネーブル信号生成回路５００の、信号遷移検出回路４００からの検出信号３０を受けるインバータ５０２は、ＰＭＯＳトランジスタを抵抗として、検出信号３０をＮＭＯＳトランジスタで受けるものでも良い。その出力をインバータ５０４で増幅し、増幅した信号を訂正機能付きフリップフロップ３００のイネーブル信号４０とする。
【００４７】
フィードバック信号５３０は、クロック１０によってプリチャージ／評価を行うダイナミック回路であるフィードバック回路５１０、５１２、５１４、５０６を、クロックがハイ（Ｈｉｇｈ）になり、イネーブル信号生成回路が立ち下がったロー（Ｌｏｗ）の状態になった時に動作させるようにすることで行う。図７に表した具体例においては、インバータ５１０とＮＯＲ回路５１２が使われているが、同様のロジック動作であればこれに限らない。上述した条件が満たされると、フィードバック信号５３０は途中のインバータ５１４、５０６を通じてハイ（Ｈｉｇｈ）になり、クロック１０がロー（Ｌｏｗ）になるまで、信号遷移検出回路４００からの検出信号３０は無効にされる。
【００４８】
なお、図７に表した具体例においては、訂正機能付きフリップフロップ３００はクロックが立ち上がりのときに動作する立ち上がりエッジ動作のフリップフロップである場合を表した。立ち下りエッジ動作のフリップフロップにおいても、フィードバック回路５１０、５１２、５１４、５０６をクロックがロー（Ｌｏｗ）の状態で動作するようにすることで、信号遷移検出回路４００とイネーブル信号生成回路５００を実現することが可能である。また、電流計測を電源と回路の間に流れる電流で行う時には、ＮＭＯＳトランジスタ５１６をＰＭＯＳトランジスタとし、条件が満たされた時にフィードバック信号５３０がロー（Ｌｏｗ）になるようにすることで、同様に検出信号３０を無効とすることが可能である。
【００４９】
図８は、信号遷移検出回路４００の第４の具体例を表す模式図である。  
また、図９は、本具体例の回路の動作を例示するタイミングチャートである。
【００５０】
本具体例においては、信号遷移検出回路４００は、ドミノ回路を応用した回路で実現されている。すなわち、組み合わせロジック回路２００における回路中の遷移をモニタするそれぞれのノードＡ、Ｂ、Ｃから、２つのドミノ回路４１０、４２０へ信号をそれぞれ分岐させる。
【００５１】
クロック１０が立ち上がったとき、通常動作であれば、すでに組み合わせロジック回路２００における信号遷移は終わっているはずであるので、２つのドミノ回路４１０、４２０のどちらかの出力は、ハイ（Ｈｉｇｈ）となる。よって、それに接続されるＮＯＲ回路４３０の出力は、すべてＬｏｗとなり、イネーブル信号生成回路５００へはロー（Ｌｏｗ）の検出信号３０が送られる。
【００５２】
もしタイミングエラーが起き、クロック１０の立ち上り時に回路が動作したとすると、組み合わせロジック回路２００における信号の遷移により２つのドミノ回路４１０、４２０の両方ともロー（Ｌｏｗ）となり、それに接続されるＮＯＲ回路出力４３０はハイ（Ｈｉｇｈ）となる。信号遷移が検出された段階で、イネーブル信号生成回路５００へはハイ（Ｈｉｇｈ）の検出信号３０が送られる。
【００５３】
その後、組み合わせロジック回路２００において信号遷移が伝播し、最後のノードまで到達すると、ドミノ回路４１０、４２０を駆動する信号Ｄｃｋがロー（Ｌｏｗ）となり、チャージが行われる。ＮＯＲ回路４３０は全てＬｏｗとなり、イネーブル信号生成回路５００へは再びロー（Ｌｏｗ）の検出信号３０が送られる。その時、まだクロック１０がハイ（Ｈｉｇｈ）の状態であれば、再びドミノ回路４１０、４２０を駆動する信号Ｄｃｋがハイ（Ｈｉｇｈ）となり、ドミノ回路４１０、４２０が動作をするが、このとき信号遷移は終わっているため、２つのドミノ回路４１０、４２０のどちらかの出力はハイ（Ｈｉｇｈ）となり、ＮＯＲ回路４３０の出力はロー（Ｌｏｗ）のままである。
【００５４】
なお、図８に表した具体例においては、組み合わせロジック回路２００に３つのインバータ２０２が設けられているが、これは一例に過ぎない。また、この具体例においては、タイミングエラーを起こした後の信号遷移が最後まで伝播される必要がある。例えば、組み合わせロジック回路２００の回路の途中にＮＡＮＤやＮＯＲがある場合、信号によっては、入力が変化しても出力が変化しない場合がある。この場合、インバータ等に信号を分岐させ、信号が伝播する回路で信号遷移検出回路４００を動作させ、エラーである遅れた信号が訂正機能付きフリップフロップ３００に到達するタイミングを予測させることで、本具体例を適用することが可能になる。
【００５５】
また、この具体例では信号遷移のモニターは３つ（ノードＡ、Ｂ、Ｃ）であるが、もっと多くのノードをモニターしてもよい。その場合、出力のＯＲ回路４４０は１つの論理ゲートで実現してもよいが、複数の論理ゲートを多段に接続して実現する方が遅延は小さい。
【００５６】
図１０は、信号遷移検出回路４００の第５の具体例を表す模式図である。  
本具体例においては、組み合わせロジック回路２００の最終出力端と訂正機能付きフリップフロップ３００との間にインバータ４５０を挿入し、そのインバータ４５０の動作を信号遷移検出回路４００でモニタする。信号遷移検出回路４００やその出力である検出信号３０については、例えば、図６〜図９に関して前述した信号遷移検出回路４００と同様とすることができる。挿入するインバータ４５０の数は、偶数にする。このような構成にすると、組み合わせロジック回路２００の部分を変更する必要がなく、新たに回路を追加することで、信号遷移を検出することができる。
【００５７】
また、本具体例は、追加したインバータ４５０と訂正機能付きフリップフロップ３００を一体としてみたときには、入力に少し回路が追加された訂正機能付きフリップフロップ３００と考えることもできる。フリップフロップとしては、セットアップ時間がやや長くなってしまうことになるが、このようなタイミングエラーを検出する回路を予め備えた訂正機能付きフリップフロップ３００を別に設計しておけば、使用するフリップフロップを交換することで本具体例を実現することでき、ロジック回路を変更する必要がない点で有利である。
【００５８】
図１１は、訂正機能付きフリップフロップ３００の具体例を表す模式図である。  
本具体例においては、クロック１０の入力端と、通常のフリップフロップ３２２と、の間に、Ｄ入力とＱ出力の状態に応じて発振する発振回路３２４が設けられている。イネーブル信号４０によって発振回路３２４の動作を制御できる。すなわち、クロック１０が立ち上がって発振回路３２４の遅延時間程度の後に、Ｄ入力とＱ出力の値が違っていれば、クロック１０を再立ち上げして、遅れてきた演算出力２０を取り込む。イネーブル信号４０がハイ（Ｈｉｇｈ）の時に動作するが、このイネーブル信号４０の生成に、前述した信号遷移検出回路４００とイネーブル信号生成回路５００とを用いることで、必要なときにのみ発振回路３２４を動作させエラーの回復を行うことができる。こうすることにより、より確実な修正動作が可能になる。
【００５９】
図１２は、訂正機能付きフリップフロップ３００の第２の具体例を表す模式図である。
【００６０】
本具体例の訂正機能付きフリップフロップ３００は、マスターラッチ３０２とスレーブラッチ３０４とからなるＤ型フリップフロップを有する。そして、マスターラッチ３０２の入力のスリーステートインバータを、インバータ３０２Ａとトランスミッションゲート３０２Ｂとに分け、トランスミッションゲート３０２Ｂの前後にバッファ回路３０６が接続されている。
【００６１】
本具体例においても、イネーブル信号４０がハイ（Ｈｉｇｈ）になると、クロック１０より遅れてきた演算出力２０が内部に取り込まれ、エラーの修正ができる。このイネーブル信号４０の生成に、前述した信号遷移検出回路４００とイネーブル信号生成回路５００とを用いることで、必要なときにのみバッファ回路３０６を動作させエラーの回復を行うことができる。こうすることにより、より確実な修正動作が可能になる。
【００６２】
また、本具体例においては、バッファ回路３０６としてトランスミッションゲートを用いているが、同様の機能を持ち、論理が反転しないものであれば、これに限らない。これにより、バッファ回路３０６のトランジスタ数を減らすことができ、回路面積が小型になる。また、訂正機能付きフリップフロップ３００の入力端とバッファ回路３０６とが切り離されるため、訂正機能付きフリップフロップ３００の入力端に接続するロジック回路の設計においてバッファ回路３０６のことを考慮する必要がない。
【００６３】
本具体例は、より機能を多数もつフリップフロップに対しても同様のことが可能である。すなわち、本具体例では、クロック１０、入力２０、出力５０だけの、最も機能の少ないＤ型フリップフロップを例示したが、セットやリセット端子付や、より機能の多いフリップフロップも同様に用いることができる。
【００６４】
また、本具体例においては、バッファ回路３０６のトランスミッションゲートを構成するトランジスタの幅を小さくすることで、ソースドレインの容量を減らすことができる。
【００６５】
図１３は、訂正機能付きフリップフロップ３００の第３の具体例を表す模式図である。
【００６６】
本具体例の訂正機能付きフリップフロップ３００も、マスターラッチ３０２とスレーブラッチ３０４とからなるＤ型フリップフロップを有する。そして、本具体例においては、データが１ビットの場合は、正しいデータは誤ったデータの反転信号であるという原則に基づいて、エラーが起きた時は出力を反転させて修正する。そのため、この具体例を実施する場合は、タイミングエラーが起きるときは、フリップフロップ入力直前の信号が必ず反転することが保証される必要がある。すなわち、信号遷移検出回路４００が直前の回路にのみ適用されている場合や、信号遷移検出回路４００でモニタしている回路が動作した場合は、必ずフリップフロップ入力の信号が反転することが論理的に保証される場合である。
【００６７】
本具体例においては、イネーブル信号４０がグランドとＰＭＯＳトランジスタ３５０との間に接続されたＮＭＯＳトランジスタ３５２に接続され、クロック１０の反転信号ｃｎが電源とＮＭＯＳトランジスタ３５２との間に接続されたＰＭＯＳトランジスタ３５０に接続され、両トランジスタ３５０、３５２のドレインを共通にしてインバータ３５４に接続される。ただし、ＰＭＯＳトランジスタ３５０の幅はＮＭＯＳトランジスタ３５２の幅より小さくしたり、しきい値を高くしておくなど、オン（ＯＮ）時に流れる電流がＮＭＯＳトランジスタ３５２よりも小さくなるように調整しておく。クロック１０の立ち上り時にイネーブル信号４０も立ち上がった場合、両トランジスタ３５０、３５２ともオン（ＯＮ）するが、ＮＭＯＳトランジスタ３５２の方が電流を流すため、ドレイン電圧はロー（Ｌｏｗ）となる。イネーブル信号４０は、その後立ち下がるが、ＰＭＯＳトランジスタ３５０に流れる電流は少ないため、ドレインの容量を満たすのに時間がかかり、クロック１０の信号レベルがハイ（Ｈｉｇｈ）の間にドレイン電圧をハイ（Ｈｉｇｈ）にするに至らない。逆に、そのようになるよう、電流と容量を決めておく。ドレインに設けられている容量３５６は、キャパシタンスを作りこんでも良いし、トランジスタの接合容量や配線の容量などを利用してもよい。また、両トランジスタ３５０、３５２ともにオフ（ＯＦＦ）した場合は、容量の影響で直前の値が保持されるが、毎クロックごとにＰＭＯＳトランジスタ３５０はオン（ＯＮ）するため、イネーブル信号４０が立ち上がらなければ出力はハイ（Ｈｉｇｈ）となる。イネーブル信号４０が立ち上がった場合は、出力に設けられたセレクタにより、通常動作時の反転出力がフリップフロップの出力５０として選択され、誤った値を反転させることでエラー修正が行われる。
【００６８】
ところで、訂正機能付きフリップフロップ３００によって組み合わせロジック回路２００からの演算出力２０のタイミングエラーを修復すると、クロックタイミングから遅れて正しいデータが次段に送られるため、次の演算に使える時間が短くなることになる。演算の種類やデータの組み合わせによっては、それでも十分間に合うこともあり得るが、より信頼性を高くするために、エラー修復が行われた場合はクロックタイミングをずらすということが可能である。
【００６９】
図１４は、これを実現するためのクロック生成回路の具体例を表す模式図である。  
ここでは最も単純に、奇数個のインバータ７０２を用いたリング発振器をクロック生成回路とした具体例を表した。リング発振器のＮＭＯＳトランジスタとグランドの間に電源制御用トランジスタとしてＮＭＯＳトランジスタ７０４を挿入し、このＮＭＯＳトランジスタ７０４のゲートをイネーブル信号４０の反転信号に接続している。イネーブル信号４０が立ち上がっていない場合は、電源制御トランジスタ７０４は全てオン（ＯＮ）しているので、リング発振器は発振動作を行う。イネーブル信号４０が立ち上がった場合、電源制御トランジスタ７０４がオフ（ＯＦＦ）になるので、リング発振器に電源が供給されなくなり、イネーブル信号４０が立ち上がっている間、リング発振器の動作が止まる。その後、イネーブル信号４０が解除されると、再びリング発振を開始することになる。イネーブル信号４０が立ち上がっている時間は短いので、このときリング発振器の内部ノードの状態は、トランジスタや配線のキャパシタンスによって保持され、イネーブル信号４０が解除された時、再び前の状態から発振を開始することになる。すなわち、クロックタイミングをイネーブル信号４０の時間だけ遅らせることが可能になる。
【００７０】
このような動作は、インバータ７０２のＰＭＯＳトランジスタと電源電圧との間に図示しないＰＭＯＳトランジスタを挿入して、イネーブル信号４０と同相の信号を入力しても実現可能であり、この回路と図１４に表した回路とを組み合わせてもよい。また、このように電源電圧を遮断する方法は、このインバータのリング発振器の例だけでなく、もっと複雑なＶＣＯやＰＬＬを用いたクロック生成回路でも、電源を使用している限り、もちろん同様に適用できる。
【００７１】
以上説明したように、本実施形態によれば、タイミングエラーが起きた時の修正動作を、確実に行うことが可能になり、回路システムの信頼性を向上させることができる。
【００７２】
以上、具体例を参照しつつ、本発明の実施の形態について説明した。しかし、本発明は、これらの具体例に限定されるものではない。例えば、半導体集積回路を構成する各要素の具体的な構成に関しては、当業者が公知の範囲から適宜選択することにより本発明を同様に実施し、同様の効果を得ることができる限り、本発明の範囲に包含される。  
また、各具体例のいずれか２つ以上の要素を技術的に可能な範囲で組み合わせたものも、本発明の要旨を包含する限り本発明の範囲に含まれる。  
その他、本発明の実施の形態として上述した半導体集積回路を基にして、当業者が適宜設計変更して実施し得る全ての半導体集積回路も、本発明の要旨を包含する限り、本発明の範囲に属する。  
その他、本発明の思想の範疇において、当業者であれば、各種の変更例及び修正例に想到し得るものであり、それら変更例及び修正例についても本発明の範囲に属するものと了解される。
【図面の簡単な説明】
【００７３】
【図１】本発明の実施の形態に係る半導体集積回路の要部を表したブロック図である。
【図２】本発明の実施形態の半導体集積回路の動作の一例を表したタイミングチャートである。
【図３】本発明の実施の形態に係る半導体集積回路の変型例を表したブロック図である。
【図４】組み合わせロジック回路２００、信号遷移検出回路４００、イネーブル信号生成回路５００の具体例を表す模式図である。
【図５】図４の具体例の回路の動作のシミュレーション結果を表すグラフ図である。
【図６】組み合わせロジック回路２００、信号遷移検出回路４００、イネーブル信号生成回路５００の第２の具体例を表す模式図である。
【図７】組み合わせロジック回路２００、信号遷移検出回路４００、イネーブル信号生成回路５００の第３の具体例を表す模式図である。
【図８】信号遷移検出回路４００の第４の具体例を表す模式図である。
【図９】本発明の具体例の回路の動作を例示するタイミングチャートである。
【図１０】信号遷移検出回路４００の第５の具体例を表す模式図である。
【図１１】訂正機能付きフリップフロップ３００の具体例を表す模式図である。
【図１２】訂正機能付きフリップフロップ３００の第２の具体例を表す模式図である。
【図１３】訂正機能付きフリップフロップ３００の第３の具体例を表す模式図である。
【図１４】クロック生成回路の具体例を表す模式図である。
【符号の説明】
【００７４】
１０ クロック
１０Ｓ クロックエッジ
２０ 入力（出力信号）
２１ 出力
２２ 遅延
３０ 検出信号
４０ イネーブル信号
５０ 出力
１００ フリップフロップ
２００ 組み合わせロジック回路（論理回路）
２０２ インバータ
２０４ 論理ゲート
３００ 訂正機能付きフリップフロップ
３０２ マスターラッチ
３０２Ａ インバータ
３０２Ｂ トランスミッションゲート
３０４ スレーブラッチ
３０６ バッファ回路
３２２ フリップフロップ
３２４ 発振回路
３５０ トランジスタ
３５４ インバータ
３５６ 容量
４００ 信号遷移検出回路
４０２ トランジスタ
４０３ ゲート電極
４０４ インバータ
４０６ トランジスタ
４１０ ドミノ回路
４３０ ＮＯＲ回路回路
４４０ ＯＲ回路回路
４５０ インバータ
５００ イネーブル信号生成回路
５０２ インバータ
５０４ インバータ
５０６ インバータ
５１０ インバータ
５１２ ＮＯＲ回路
５１４ インバータ
５３０ フィードバック信号
６００ イネーブル信号４０の出力端子
７０２ インバータ
７０４ 電源制御トランジスタ
【図１】
2009246650.tif 000003
【図２】
2009246650.tif 000004
【図３】
2009246650.tif 000005
【図４】
2009246650.tif 000006
【図５】
2009246650.tif 000007
【図６】
2009246650.tif 000008
【図７】
2009246650.tif 000009
【図８】
2009246650.tif 000010
【図９】
2009246650.tif 000011
【図１０】
2009246650.tif 000012
【図１１】
2009246650.tif 000013
【図１２】
2009246650.tif 000014
【図１３】
2009246650.tif 000015
【図１４】
2009246650.tif 000016