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