(57)【特許請求の範囲】
【請求項１】
複数の論理回路と、前記論理回路からのデータに基づき誤動作判定を行う複数の判定回路とを備える半導体装置であって、
前記判定回路は、
前記論理回路からのデータをクロック信号の所定のタイミングで取り込む第１レジスタと、
前記クロック信号を遅延させる遅延手段と、
前記遅延手段を経た前記クロック信号の所定のタイミングで前記論理回路からのデータを取り込む、前記第１レジスタと論理等価な第２レジスタと、
前記第１レジスタの出力と前記第２レジスタの出力との比較を行い、エラー信号を出力する比較器と、
前記比較器の比較結果を保持させつつ、前記第２レジスタをシフトレジスタ化して前記第２レジスタで保持した前記エラー信号を次段へ伝搬させるスキャン化手段とを備える半導体装置。
【請求項２】
複数の論理回路と、前記論理回路からのデータに基づき誤動作判定を行う複数の判定回路とを備える半導体装置であって、
前記判定回路は、
イネーブル信号に基づきクロック信号の伝送を制御する第１クロック制御手段と、
前記論理回路からのデータを前記第１クロック制御手段で制御された前記クロック信号の所定のタイミングで取り込む第１レジスタと、
前記クロック信号を遅延させる遅延手段と、
前記イネーブル信号に基づき前記遅延手段を経た前記クロック信号の伝送を制御する第２クロック制御手段と、
前記第２クロック制御手段で制御された前記クロック信号の所定のタイミングで前記論理回路からのデータを取り込む、前記第１レジスタと論理等価な第２レジスタと、
前記第１レジスタの出力と前記第２レジスタの出力との比較を行い、エラー信号を出力する比較器と、
前記第２クロック制御手段に入力する前記イネーブル信号のラインに挿入し、前記遅延手段を経た前記クロック信号にグリッジが乗ることを防ぐフェールセーフ回路と、
前記第２クロック制御手段の前段に挿入し、前記イネーブル信号のイベント内容を判定する第３レジスタとを備える半導体装置。
【請求項３】
複数の論理回路と、前記論理回路からのデータに基づき誤動作判定を行う複数の判定回路とを備える半導体装置であって、
前記判定回路は、
イネーブル信号に基づきクロック信号の伝送を制御する第１クロック制御手段と、
前記論理回路からのデータを前記第１クロック制御手段で制御された前記クロック信号の所定のタイミングで取り込む第１レジスタと、
前記クロック信号を遅延させる第１遅延手段と、
前記イネーブル信号に基づき前記第１遅延手段を経た前記クロック信号の伝送を制御する第２クロック制御手段と、
前記第２クロック制御手段で制御された前記クロック信号の所定のタイミングで前記論理回路からのデータを取り込む、前記第１レジスタと論理等価な第２レジスタと、
前記第１レジスタの出力と前記第２レジスタの出力との比較を行い、エラー信号を出力する比較器とを備え、
同一の前記イネーブル信号で前記クロック信号が制御される複数の前記判定回路に対して、前記イネーブル信号のセットアップ違反を検出する検出回路をさらに備えることを特徴とする半導体装置。
【請求項４】
請求項３に記載の半導体装置であって、
前記検出回路は、
前記イネーブル信号を前記クロック信号の所定のタイミングで取り込む第３レジスタと、
前記クロック信号を遅延させる第２遅延手段と、
前記第２遅延手段を経た前記クロック信号の所定のタイミングで前記イネーブル信号を取り込む、前記第３レジスタと論理等価な第４レジスタとを備えることを特徴とする半導体装置。
【請求項５】
複数の論理回路と、前記論理回路からのデータに基づき誤動作判定を行う複数の判定回路とを備える半導体装置であって、
前記判定回路は、
前記論理回路からのデータをクロック信号の所定のタイミングで取り込む第１レジスタと、
前記クロック信号を遅延させる遅延手段と、
前記遅延手段を経た前記クロック信号の所定のタイミングで前記論理回路からのデータを取り込む、前記第１レジスタと論理等価な第２レジスタと、
前記第１レジスタの出力と前記第２レジスタの出力との比較を行い、エラー信号を出力する比較器と、
前記エラー信号に基づき第１レジスタの出力又は第２レジスタの出力のいずれかを選択し、次段の前記論理回路に伝搬する選択回路と、
前記エラー信号のグリッジをフィルタリングし、且つ前記エラー信号の立ち上がりエッジを検出して、前記クロック信号を所定の期間停止するように制御する微分回路とを備える半導体装置。
【請求項６】
請求項５に記載の半導体装置であって、
前記微分回路が前記クロック信号を制御するディテクト信号と、前記論理回路へデータの伝搬を要求する制御信号とをハンドシェイクして、前記クロック信号の停止期間中に前記データ信号のイベントが生じないように制御するフェールセーフ手段をさらに備えることを特徴とする半導体装置。
【請求項７】
請求項５又は請求項６に記載の半導体装置であって、
前記第１レジスタの後段に、メタステーブルを検出するメタスタビリティ検出回路をさらに備え、
前記メタスタビリティ検出回路の出力に基づき、前記メタステーブルの検出時に前記判定回路が常に誤動作と判定させることを特徴とする半導体装置。
【請求項８】
複数の論理回路と、前記論理回路からのデータに基づき誤動作判定を行う複数の判定回路とを備える半導体装置であって、
前記判定回路は、
前記論理回路からのデータをクロック信号の所定のタイミングで取り込む第１レジスタと、
前記クロック信号を遅延させる遅延手段と、
前記遅延手段を経た前記クロック信号の所定のタイミングで前記論理回路からのデータを取り込む、前記第１レジスタと論理等価な第２レジスタと、
前記第１レジスタの出力と前記第２レジスタの出力との比較を行い、エラー信号を出力する比較器と、
前記第１レジスタの後段に、メタステーブルを検出するメタスタビリティ検出回路とを備え、
前記メタスタビリティ検出回路の出力に基づき、前記メタステーブルの検出時に前記判定回路が常に誤動作と判定させることを特徴とする半導体装置。
【請求項９】
請求項７又は請求項８に記載の半導体装置であって、
前記メタスタビリティ検出回路は、
第１ＰＭＯＳと前記第１ＰＭＯＳより閾値の高い第２ＮＭＯＳとで構成された第１インバータと、
第３ＰＭＯＳと前記第３ＰＭＯＳより閾値の低い第４ＮＭＯＳとで構成された第２インバータと、
前記第１インバータの出力と、前記第２インバータの出力とのＸＯＲを演算する論理回路とを備えることを特徴とする半導体装置。
【請求項１０】
複数の論理回路と、前記論理回路からのデータに基づき誤動作判定を行う複数の判定回路とを備える半導体装置であって、
前記判定回路は、
前記論理回路からのデータをクロック信号の所定のタイミングで取り込む第１レジスタと、
前記クロック信号を遅延させる遅延手段と、
前記遅延手段を経た前記クロック信号の所定のタイミングで前記論理回路からのデータを取り込む、前記第１レジスタと論理等価な第２レジスタと、
前記第１レジスタの出力と前記第２レジスタの出力との比較を行い、エラー信号を出力する比較器とを備え、
前記遅延手段の遅延量が制御可能な単位で複数の前記判定回路をグルーピングし、各グループに属する前記判定回路に応じた遅延量の前記遅延手段を設けることを特徴とする半導体装置。
【請求項１１】
複数の論理回路と、前記論理回路からのデータに基づき誤動作判定を行う複数の判定回路とを備える半導体装置であって、
前記判定回路は、
前記論理回路からのデータをクロック信号の所定のタイミングで取り込む第１レジスタと、
前記クロック信号を遅延させる遅延手段と、
前記遅延手段を経た前記クロック信号の所定のタイミングで前記論理回路からのデータを取り込む、前記第１レジスタと論理等価な第２レジスタと、
前記第１レジスタの出力と前記第２レジスタの出力との比較を行い、エラー信号を出力する比較器とを備え、
前記判定回路の前段において、ホールド違反が生じるパス上にロックアップラッチ又は反転フリップ−フロップ回路を挿入することを特徴とする半導体装置。
【請求項１２】
請求項１０に記載の半導体装置であって、
前記グルーピングは、
パス毎のネガティブスラック量から最大値と最小値を算出し、
前記最大値から選択値までのグループと、前記選択値から前記最小値までのグループとに分割して、各グループにおいて前記選択値又は前記最小値までの差分の合計を求め、前記合計の和を評価関数とし、
前記評価関数が最小となる前記選択値を求め、
最小となる前記選択値に所定の重み付けした処理値を分割前の設定値と比較し、大きければ当該分割を止め、小さければ当該分割を承認して前記設定値を前記処理値に更新し、
分割した各グループに対して所定の条件まで再帰的に分割を繰り返すことで複数のグループを形成することを特徴とする半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置に係る発明であって、特に、誤動作が検知可能な半導体装置に関するものである。
【背景技術】
【０００２】
半導体装置において、種々のバラつき等の理由により、ある記憶素子を終端とするパス遅延にもバラつきが生じる。当該パス遅延についてシミュレーションでは問題なく動作するが、実機ではパス遅延におけるバラつきによりタイミング制約（セットアップ違反）を満足できず動作しない場合があった。
【０００３】
そのため、半導体装置においては、タイミング制約を動的に検知する機構を設ける場合があった。当該機構について、例えば、非特許文献１に示すＲａｚｏｒという回路（以下、Ｒａｚｏｒ回路という）が知られている。非特許文献１に示すＲａｚｏｒ回路は、クロック信号ｃｌｋの立ち上がりエッジに同期してデータを取り込むフリップ−フロップ回路と、クロック信号ｃｌｋのＨｉｇｈ期間にデータを取り込むラッチ回路とを組み合わせた回路である。そして、Ｒａｚｏｒ回路は、フリップ−フロップ回路の出力とラッチ回路の出力とを比較器で比較し、当該比較結果に基づいて通常論理であるフリップ−フロップ回路の出力かラッチ回路の出力かをセレクタ回路で切り替えていた。
【０００４】
非特許文献１に示すＲａｚｏｒ回路は、フリップ−フロップ回路がデータを取り込むタイミングに同期してラッチ回路が開き、クロック信号ｃｌｋがＨｉｇｈ期間のデータをラッチ回路が取り込む。つまり、非特許文献１に示すＲａｚｏｒ回路は、フリップ−フロップ回路とラッチ回路との時間差を利用して、クロック信号ｃｌｋの立ち上がりからクロック信号ｃｌｋのＨｉｇｈ期間までに到達するデータを誤動作（セットアップ違反）として検知している。
【０００５】
次に、特許文献１では、主同期回路と同じ構成の副同期回路を２つ設け、当該副同期回路が主同期回路の倍周期で動作する回路構成を有している。そのため、特許文献１に示す回路では、主同期回路で生じたセットアップ違反の誤動作を、副同期回路により回復させることができる。
【０００６】
次に、特許文献２では、同一クロック信号ｃｌｋにより動作している送り側フリップ−フロップ回路と受け側フリップ−フロップ回路との間に、組み合わせ論理回路をクリティカルパスとして介在させている。そして、特許文献２では、当該クリティカルパスでの遅延状態を計測して半導体装置の外部に表示させている。
【０００７】
【非特許文献１】Dan Ernest他,「Razor: Low-Power Pipeline Based on Circuit-Level Timing Speculation」,IEEE MICRO,2004,P.10-20
【特許文献１】米国特許第６９８５５４７号明細書
【特許文献２】特開２００５−２１４７３２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
非特許文献１に示す回路を半導体装置に複数設けて、どの箇所でセットアップ違反が生じているのかを特定するためには、それぞれの回路から出力されるエラー信号を取り出す必要があった。しかし、エラー信号を取り出すには複数のピンが必要となるが、半導体装置のピン数には制限があるため、従来の半導体装置では、非特許文献１に示す回路から出力されたエラー信号をＯＲツリーで束ねることが一般的であった。そのため、従来の半導体装置では、どの箇所でセットアップ違反が生じているのかを特定することができない問題があった。
【０００９】
また、非特許文献１、特許文献１や特許文献２に示す回路では、セットアップ違反を検出し、当該セットアップ違反の状態を回復したとしても、次段の回路において誤動作を誘因する場合があった。
【００１０】
さらに、半導体装置内においてセットアップ違反を検出するための条件は一定ではなく、バラつきを有している。そのため、ある１つの条件に固定するとセットアップ違反を検出できない回路が存在してしまう問題があった。
【００１１】
そこで、本発明は、実動作中の回路誤動作（セットアップ違反）を認識することができ、また回路誤動作の箇所を特定できる半導体装置を提供することを目的とする。また、本発明は、誤動作を修復する際に次段の回路において誤動作を誘因させることのない半導体装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明の１実施形態は、複数の論理回路と、論理回路からのデータに基づき誤動作判定を行う複数の判定回路とを備える半導体装置である。そして、判定回路は、第１レジスタと、遅延手段と、第２レジスタと、比較器と、スキャン化手段とを備えている。第１レジスタは、論理回路からのデータをクロック信号の所定のタイミングで取り込む。遅延手段は、クロック信号を遅延させる。第２レジスタは、第１レジスタと論理等価であり、遅延手段を経たクロック信号の所定のタイミングで論理回路からのデータを取り込む。比較器は、第１レジスタの出力と第２レジスタの出力との比較を行い、エラー信号を出力する。スキャン化手段は、比較器の比較結果を保持させつつ、第２レジスタをシフトレジスタ化して第２レジスタで保持したエラー信号を次段へ伝搬させる。
【発明の効果】
【００１３】
本発明の半導体装置によれば、比較器の比較結果を保持させつつ、第２レジスタをシフトレジスタ化して第２レジスタで保持したエラー信号を次段へ伝搬させるスキャン化手段を備えるので、回路誤動作が生じている１つ以上の箇所を特定することができる。
【発明を実施するための最良の形態】
【００１４】
（実施の形態１）
まず、本発明の半導体装置を説明する前に、非特許文献１に開示されているＲａｚｏｒ回路の構成と駆動について説明する。図１に、Ｒａｚｏｒ回路の回路図を示し、図２に、Ｒａｚｏｒ回路のタイミングチャートを示す。
【００１５】
図１に示すＲａｚｏｒ回路は、クロック信号ｃｌｋの立ち上がりエッジに同期してデータ信号を取り込むフリップ−フロップ回路１０１と、クロック信号ｃｌｋのＨｉｇｈ期間にデータ信号を取り込むラッチ回路１０２とを備えている。さらに、図１に示すＲａｚｏｒ回路は、フリップ−フロップ回路１０１の出力Ｑ１とラッチ回路１０２の出力Ｑ２とを比較する比較器１０３と、比較器１０３の結果によって論理回路であるロジックステージＬ１が出力するデータ信号Ｄ１とラッチ回路１０２が出力するデータ信号Ｑ２とを切り替えるセレクタ回路１０４とを備えている。そして、図１に示すラッチ回路１０２は、クロック信号ｃｌｋのＨｉｇｈ期間にセレクタ回路１０４が出力したデータ信号Ｓ１を取り込む。そして、図１に示すＲａｚｏｒ回路は、フリップ−フロップ回路１０１とラッチ回路１０２との時間差を利用して、クロック信号ｃｌｋの立ち上がりからクロック信号ｃｌｋのＨｉｇｈ期間までに到達するデータ信号のイベントを誤動作（セットアップ違反）として検知する。
【００１６】
但し、Ｒａｚｏｒ回路で行う誤動作検知には、以下のような問題があった。まず、図２に示す３周期分のタイミングチャートでは、２周期目のみタイミングが間に合わずセットアップ違反が発生し、他の周期（１及び３周期目）は正常にデータが到達している。この場合の２周期目では、フリップ−フロップ回路１０１が、クロック信号ｃｌｋの立ち上がりタイミング時に、”１”から”０”に変化するデータ信号のイベント到着が間に合わず、”１”を捕獲してしまう。一方、ラッチ回路１０２は、クロック信号ｃｌｋがＨｉｇｈ期間のデータ信号である”０”を捕獲することになる。そのため、Ｒａｚｏｒ回路は、意図通りエラー信号をアサートすることになる。
【００１７】
次に、図２に示す３周期目では、クロック信号ｃｌｋの立ち上がりタイミング時に、”０”から”１”に変化するデータ信号のイベントが到着しているので、本来セットアップ違反は発生しない。しかし、２周期目でアサートされたエラー信号は、３周期目においてもネゲートされない。これは３周期目のクロック信号ｃｌｋの立ち上がりタイミング時に、ロジックステージＬ１が出力するデータ信号Ｄ１を取り込む必要があるにもかかわらず、２周期目のエラー信号がネゲートされていないために、ラッチ回路１０２が出力するデータ信号Ｑ２を取り込んでいるためである。
【００１８】
その結果、エラー信号がネゲートされてロジックステージＬ１からのパスがアクティブになる時（図２の上向き矢印）、フリップ−フロップ回路１０１はラッチ回路１０２にラッチされている”０”を取り込んでしまっており、ラッチ回路１０２のみが”０”から”１”へ変化するデータ信号のイベントを取り込むことになる（図２の下向き矢印）。従って、比較器１０３では、フリップ−フロップ回路１０１が出力するデータ信号Ｑ１とラッチ回路１０２が出力するデータ信号Ｑ２とが一致せず、セットアップ違反が発生していないにもかかわらずエラー信号がアサートされてしまう。
【００１９】
そこで、図３に、上述の問題点を解決する誤動作判定回路（エラー検出フリップ−フロップ回路（ＦＦ））の回路図を示す。図３に示す回路では、ターゲットレジスタ（TargetRegister）であるレジスタＲ１に対し、クロック信号（Ｃｌｋ）のラインにバッファ１を挿入して、タイミング的に余裕（Positive Slack）を持たせた期待値レジスタ（ExpectRegister）のレジスタＲ２を備えている。そして、レジスタＲ１には、前段のロジックステージＬ１から出力されるデータ信号Ｄ１が入力される。一方、レジスタＲ１から出力するデータ信号Ｑ１は、選択回路２を介して次段のロジックステージＬ２に出力（Output信号）されると共に、比較器３にも入力される。
【００２０】
この比較器３は、レジスタＲ１が出力するデータ信号Ｑ１とレジスタＲ２が出力するデータ信号Ｑ２とを比較し、両者が不一致の場合にエラー信号（Error）を出力する。つまり、図３に示す回路では、クロックラインにバッファ１を挿入することにより、セットアップ違反条件を緩和させたレジスタＲ２を設け、レジスタＲ１とレジスタＲ２との出力を比較器３で比較することで誤動作を検出している。このため、図３に示す回路では、バッファ１を設けることにより、Ｒａｚｏｒ回路のようにセットアップ違反が発生していないにもかかわらずエラー信号がアサートされてしまう問題を回避することができる。
【００２１】
また、図３に示す回路は、上述したように、セットアップ違反の有無をエラー信号として出力する誤動作判定回路である。そのため、図３に示す回路を備える半導体装置（ＬＳＩ等）では、通常論理に使用されているフリップ−フロップ回路のうちタイミング的に厳しいものに対し、図３に示す回路と置換することになる。そして、半導体装置に図３に示す回路を複数組み込んだ場合、どの回路からエラー信号が出力されているのか特定する必要がある。
【００２２】
しかし、半導体装置のピン数には制限があるので、各回路からのエラー信号に対してそれぞれピンを割り当てることができず、ＯＲツリーで束ねてエラー信号を半導体装置の外部に出力させる（図示せず）。そのため、図３に示す回路では、半導体装置でセットアップ違反が生じていることは判定できるが、どの回路でセットアップ違反が生じているのかを特定することができない。
【００２３】
そこで、本実施の形態に係る半導体装置では、図３に示す期待値レジスタのレジスタＲ２をシフトレジスタ化してスキャンする手段（以下、スキャン化手段ともいう）をさらに備え、当該手段を用いてエラー信号を伝播させて外部へ押し出し、違反した回路を特定する。なお、当該回路構成は、電圧制御だけでなく、実動作（性能）パターンを用いたフェール箇所解析にも有効となる技術である。
【００２４】
次に、スキャン化手段を備えた回路構成を図４に具体的に示す。但し、図４に示すスキャン化手段は一例であり、本発明はこれに限定されず、同様の機能を有するスキャン化手段であれば他の回路構成でもよい。
【００２５】
図４に示す回路では、レジスタＲ１のクロック信号ＣｌｋのラインにＡＮＤ回路４が設けられている。ＡＮＤ回路４は、スキャンモード信号（ＳＭ）の反転信号とスキャンリセット信号（Ｓｒｓｔ）とが入力されるＡＮＤ回路４ａと、クロック信号ＣｌｋとＡＮＤ回路４ａの出力とが入力されるＡＮＤ回路４ｂとを備えている。また、図４に示す回路では、レジスタＲ２の前段にマルチプレクサ（ＭＵＸ）５が設けられ、当該ＭＵＸ５には前段の比較器３からの出力であるエラー信号（Error）と、ＭＵＸ６の出力と、Ｓｒｓｔ信号とが入力される。ＭＵＸ６は、通常のスキャンセルにおけるスキャンイン信号（ＳＩ）と等価なエラーイン信号（ErrIn）と、Ｓｒｓｔ信号と、前段の論理回路からのデータ信号（DATA）とが入力される。
【００２６】
図４に示す回路では、図３に示す回路の選択回路２に代えて、ＭＵＸ７を用いているが、機能については等価である。また、図４に示すその他の回路は、図３に示す回路と同じであるため、詳細な説明は省略する。
【００２７】
図４に示す回路では、レジスタＲ２の出力であるエラーアウト信号（ErrOut）が通常のスキャンセルにおけるスキャンアウト信号（ＳＯ）と等価であり、あるエラー検出ＦＦのErrOut信号が他のエラー検出ＦＦのErrIn信号に接続することでスキャンパスを形成している。
【００２８】
ＳＭ信号は、スキャンのモードを制御する信号であり、”０”のとき通常動作モードとなり、レジスタＲ２がクロック信号の立ち上がり時にデータ信号を取り込めるようにＭＵＸ６を制御する。また、ＳＭ信号が”１”のときスキャンモードになり、レジスタＲ２がクロック信号の立ち上がり時にErrIn信号の値を取り込めるようにＭＵＸ６を制御する。
【００２９】
さらに、Ｓｒｓｔ信号は、モード切替時のリセット信号であり、各モード（通常又はスキャン）時の初期状態を決定する。つまり、Ｓｒｓｔ信号が”０”のとき、レジスタＲ２がＭＵＸ５を介してエラー信号の値を取り込み、Ｓｒｓｔ信号が”１”のとき、レジスタＲ２がＭＵＸ５を介して、ＳＭ信号により選択された信号（DATA or ErrIn）の値を取り込む。上述のまとめとして、レジスタＲ２をスキャン化した場合の真理値表を表１に示す。なお、表１に示す”＊”は任意の値を示す。また、表１に示す”（R2＆!R1）｜（!R2&R1）”は、レジスタＲ２が期待値の比較結果を保持しており、当該比較結果が”０”（エラーでない）の場合はレジスタＲ１をそのまま出力し、当該比較結果が”１”（エラー）の場合はレジスタＲ１の反転を出力することを表している。
【００３０】
【表１】
0005107080.tif 000002
【００３１】
従って、レジスタＲ２をスキャン化し、表１に示すようにＳＭ信号とＳｒｓｔ信号とを制御することで、セットアップ違反時のエラー信号を伝播させ、セットアップ違反の箇所を特定することが可能となる。なお、当該回路構成は、セットアップ違反の箇所を特定するだけでなく、通常のスキャン回路のように、スキャンパスを介してレジスタＲ２への初期値設定も可能である。
【００３２】
さらに、図４に示す回路では、ＳＭ信号が”１”のスキャンモードの場合、レジスタＲ１に入力されるクロック信号ＣｌｋをＡＮＤ回路４でディスイネーブルにして、レジスタＲ１の回路動作を停めてしまう。そのため、ＳＭ信号が”１”のスキャンモード時に、クロック信号がディスイネーブルになる前の状態でレジスタＲ１の内容が保持され、再びＳＭ信号が”０”の通常動作モードになった場合に、レジスタＲ１の動作再開が可能になる。また、スキャンモード時に、レジスタＲ１の回路動作を停めてしまうので、当該期間の消費電力を削減することもできる。
【００３３】
図５に、図４で示した回路を４段並べて各回路（Ｓ１〜Ｓ４）のErrOut信号からErrIn信号へのスキャンパスを形成した回路図を示す。図５では、回路Ｓ１の前段にロジックステージＬ１、回路Ｓ２の前段にロジックステージＬ２、回路Ｓ３の前段にロジックステージＬ３、回路Ｓ４の前段にロジックステージＬ４のそれぞれが接続している。さらに、図５では、回路Ｓ１のErrIn信号としてに回路Ｓ４が出力したErrOut信号を直結することでシフトが一巡して初期状態へ戻る構成である。しかし、本発明はこれに限られず、回路Ｓ１のErrIn信号に外部端子からの任意の値にセットすることも可能である。
【００３４】
次に、図５に示す回路の動作を図６に示すタイミングチャートに基づいて説明する。まず、図６に示すタイミングチャートの１周期目では、回路Ｓ２がセットアップ違反の誤動作を検知したと仮定する。そして、ErrOut信号の値は、通常動作モードであるため、各回路Ｓ１〜Ｓ４のエラー信号ではなくレジスタＲ２の値となり、当該周期での期待値は４ビットとも”１”であると仮定する。なお、回路Ｓ２のレジスタＲ１の値は、セットアップ違反と仮定しているので、期待値と不一致であり”０”である。
【００３５】
次に、２周期目では、ＳＭ信号が”１”となりスキャンモードに切り替わる。同時にＳｒｓｔ信号も”０”にアサートされるため、各回路のエラー信号の値がレジスタＲ２に取り込まれることになる。１周期目で誤動作を発生しているのは回路Ｓ２のみと仮定したので、２周期目では回路Ｓ２のErrOut信号の値のみが”１”となり、他の回路Ｓ１，Ｓ３，Ｓ４のErrOut信号の値は全て”０”となる。なお、ＳＭ信号が”１”となったため、回路Ｓ１〜Ｓ４内の各レジスタＲ１に供給されるクロック信号が全てディスイネーブルになる。
【００３６】
次に、３周期目では、Ｓｒｓｔ信号が”１”となるため、各回路Ｓ１〜Ｓ４のErrOut信号は前段のErrOut信号を取り込むことになる。従って、回路Ｓ３のErrOut信号は、２周期目の回路Ｓ２でのErrOut信号の値を取り込み、”１”となり、他の回路Ｓ１，Ｓ２，Ｓ４のErrOut信号は全て”０”となる。ここで、回路Ｓ１のErrOut信号には、回路Ｓ４のErrOut信号の値が供給される。
【００３７】
次に、４周期目では、３周期目と同様の処理が行われ、回路Ｓ４のErrOut信号が、３周期目の回路Ｓ３でのErrOut信号の値を取り込み、”１”となり、他の回路Ｓ１，Ｓ２，Ｓ３のErrOut信号は全て”０”となる。さらに、５周期目でも、４周期目と同様の処理が行われ、回路Ｓ１のErrOut信号が、４周期目の回路Ｓ４でのErrOut信号の値を取り込み、”１”となり、他の回路Ｓ２，Ｓ３，Ｓ４のErrOut信号は全て”０”となる。６周期目でも、４周期目と同様の処理が行われ、回路Ｓ２のErrOut信号が、５周期目の回路Ｓ１でのErrOut信号の値を取り込み、”１”となり、他の回路Ｓ１，Ｓ３，Ｓ４のErrOut信号は全て”０”となる。
【００３８】
上記の処理を繰り返すことにより、図５に示す回路は、ErrOut信号の値を順次シフトし、Ｓｒｓｔ信号が”１”になってからErrOut信号の値が”１”が検出されるまでのサイクル数を計上することにより、誤動作が発生した回路を特定することができる。本実施の形態では、４周期目でErrOut信号が”１”となるため、回路Ｓ２にセットアップ違反が発生していることが分かる。なお、仮に複数箇所フェールしていたとしても同様の方法で検出可能である。
【００３９】
次に、７周期目では、ＳＭ信号を通常モード”１”に切り替え、同時にＳｒｓｔ信号を”１”にアサートすることで、特定回路Ｓ１〜Ｓ４のレジスタＲ２にスキャンモード動作開始前の値（図４に示す回路構成から自動的に判断）に復元させる。ただし、回路Ｓ１から回路Ｓ４の各レジスタＲ１の値は、ＳＭ信号＝”１”あるいはＳｒｓｔ信号”０”の間はクロック信号Ｃｌｋがネゲートされているため、回路Ｓ２のレジスタＲ１は誤動作のままの値であるため、必要であれば以下の実施の形態で述べるリカバリー方法を行い動作を再開する。
【００４０】
以上のように、本実施の形態に係る半導体回路では、レジスタＲ２をスキャン化する手段を備えることにより、セットアップ違反の誤動作が発生した回路を特定することができる。
【００４１】
なお、図４に示す回路は、同期設計部におけるタイミングクリティカルなレジスタ（クリティカルパスのエンドポイント）を対象としているため、ＳＯＣ（System On a Chip）やマイコン等の全てのデジタル設計分野で適用が可能である。また、以下に説明する実施の形態に係る回路についても同様である。
【００４２】
具体的に、本実施の形態に係る半導体装置の適用事例のブロック図を図７に示す。図７に示す半導体装置では、図４に示す誤動作判定回路及び論理回路（ロジックステージ）が適用されたデジタル回路１０と、デジタル回路１０にクロック信号Ｃｌｋを供給するクロック発生装置１１と、デジタル回路１０に電圧を供給するレギュレータ１２とを備えている。さらに、図７に示す半導体装置では、デジタル回路１０からのエラー信号に基づき、クロック発生装置１１とレギュレータ１２とを制御する制御回路１３と、デジタル回路１０が適宜参照するメモリ１４とを備えている。なお、制御回路１３は、エラーレート計算の処理も含んでいる。
【００４３】
さらに、図７に示す半導体装置では、制御回路１３へのエラー信号がアサートすることで、制御回路１３がクロック発生装置１１やレギュレータ１２を制御し、低消費電力化を実現できる。また、図７に示す半導体装置では、セットアップ違反等の誤動作発生時、スキャンモードを切り替えてエラー信号を伝搬して外部に出力することで誤動作箇所（回路）を特定することができる。また、図４に示す回路を採用した半導体装置では、誤動作箇所（回路）をリカバリーした後に、スキャンモードで停止した状態から再開することも可能である。
【００４４】
（実施の形態２）
図８に示す回路は、レジスタＲ０からロジックステージＬ１を経由してレジスタＲ１へ至るパスをクリティカルパスとし、レジスタＲ１が出力するデータ信号Ｑ１を次段論理（ロジックステージＬ２）へ伝播する。ここで、図８に示す回路では、レジスタＲ１に供給されるクロック信号Ｃ１を、外部から直接供給されるクロック信号Ｃｌｋとするのではなく、クロック制御手段として機能するＡＮＤ回路２０においてEnable信号（イネーブル信号）と論理和を取ったゲーティッドクロック信号としている。なお、クロック制御手段は、ＡＮＤ回路に限られず、同等の機能を備える回路であればよい。
【００４５】
また、図８に示す回路では、クロックラインにバッファＢ２を挿入することによりセットアップ違反条件を緩和させたレジスタＲ２を設け、レジスタＲ１との出力結果比較を比較器３で行う。さらに、図８に示す回路では、Enable信号が”０”の場合、レジスタＲ０からのデータを取り込まないように選択回路２１を使ってレジスタＲ２から出力されたデータ信号Ｑ２をフィードバックさせ、Enable信号が”１”の場合、データ信号Ｄ１を取り込む。
【００４６】
しかし、図８に示す回路では、期待値側のレジスタＲ２に入力されたクロック信号Ｃ２がゲーティッドクロック信号ではなくフリーランになっている。そのため、レジスタＲ２では、常時クロックイベントが発生し、レジスタＲ１をゲーティッドクロック信号により駆動することによる消費電力削減効果を低減している。
【００４７】
また、通常の回路動作において、クロック信号の波形がクリップされないように、優位期間（ポジティブエッジであれば”Ｈ”期間）にEnable信号を変化させない。しかし、電源電圧の低下や周囲温度の変化により、Enable信号の到達に遅れ（いわゆるEnable信号のセットアップ違反）が生じるとクロック信号がクリップされ、次段への信号伝播に影響を与え誤動作誘発の原因となる。図９に、クロック信号がクリップされる様子を模式的に示す。
【００４８】
そこで、本実施の形態に係る半導体装置では、図１０に示す回路を用いることで消費電力削減効果を改善し、Enable信号のセットアップ違反を検出可能としている。図１０に示す回路では、レジスタＲ２に入力されるクロック信号がゲーティッドクロック信号とするために、クロック制御手段としてＡＮＤ回路２２が設けられている。なお、クロック制御手段は、ＡＮＤ回路に限られず、同等の機能を備える回路であればよい。
【００４９】
このＡＮＤ回路２２には、ロックアップラッチとして機能するレジスタＲ３の出力、レジスタＲ４の出力及びバッファＢ３により遅延させたクロック信号とが入力される。また、レジスタＲ３には、Enable信号とバッファＢ３により遅延させたクロック信号とが入力される。レジスタＲ４には、Enable信号とクロック信号とが入力される。図１０に示す回路の他の構成については、図８に示す回路構成と同じであるため、同一要素に同一符号を付して詳細な説明を省略する。
【００５０】
ここで、図９に示すクリップＡのようなEnable信号のriseイベントの遅延に関しては、オリジナルのクロック信号の立ち上がり時のEnable信号が”Ｌ”であればレジスタＲ２へのクロック信号をネゲートすることで検出可能となる。つまり、クリップの判定時以降にEnable信号が”Ｈ”となりレジスタＲ１にクリップされたクロック信号が発生した場合、レジスタＲ１の内容が変化することになりレジスタＲ２との間で差異が生じてエラー信号が立つことになる。なお、レジスタＲ１の内容が変化しない場合は、後段へのデータ伝播が発生しないため、エラー信号を立たせる必要はない。
【００５１】
次に、図９に示すクリップＢのようなEnable信号のfallイベントの遅延に関しては、図１０に示すように、バッファＢ３により遅延させたクロック信号（ディレイドクロック信号）のディスイネーブル期間のみイベントを通過させるロックアップラッチのレジスタＲ３を挿入することで検出可能となる。つまり、クロック信号の立ち上がりとディレイドクロック信号の立ち上がりとの間にEnable信号がネゲートされた場合、レジスタＲ２に入力されるクロック信号がネゲートされることになる。そのため、レジスタＲ１の内容が変化したとすると、レジスタＲ２との間で差異が生じてエラー信号が立つことになる。なお、レジスタＲ１の内容が変化しない場合は、後段へのデータ伝播が発生しないため、エラー信号を立たせる必要はない。
【００５２】
図１０に示す回路では、実動作のレジスタＲ１に対してクロックラインにバッファＢ３を挿入することにより、タイミング的に余裕（Positive Slack）を持たせたレジスタＲ２を作成する。そして、レジスタＲ１及びレジスタＲ２のそれぞれにＡＮＤ回路２０，２２を介したゲーティッドクロック信号を入力する。ここで、図１０に示す回路では、グリッジ防止のため、ディレイクロック信号の”Ｈ”期間のイベントを遮断するためにフェールセーフ回路としてロックアップラッチのレジスタＲ３をＡＮＤ回路２２の前に挿入する。
【００５３】
さらに、図１０に示す回路では、Enable信号のイベント内容がriseイベントなのかfallイベントなのかを判定するために、レジスタＲ４を挿入し、その出力をＡＮＤ回路２２の入力に接続している。また、図１０に示す回路では、データ信号のセットアップ違反を検出（クロック信号Ｃ１からクロック信号Ｃ２までの間のイベント検出）するとともに、イネーブル信号のセットアップ違反も検出できる。
【００５４】
次に、図１０に示す回路の動作を、図１１に示すタイミングチャートを用いて説明する。まず、レジスタＲ１のクロックピンに入力される信号をクロック信号Ｃ１、データ入力ピンに入力される信号をデータ信号Ｄ１、データ出力ピンから出力される信号をデータ信号Ｑ１とする。また、レジスタＲ２のクロックピンに入力される信号をクロック信号Ｃ２、データ入力ピンに入力される信号をデータ信号Ｄ２、データ出力ピンから出力される信号をデータ信号Ｑ２とする。さらに、データ信号Ｑ１とデータ信号Ｑ２とを比較する比較器３からエラー信号が出力される。なお、上述したように、クロック信号Ｃ２は、バッファＢ３によりクロック信号Ｃ１に対して挿入したバッファ分だけ遅延してイベントが伝播する。
【００５５】
まず、図１１に示す１周期目では、Enable信号のriseイベントの到着が遅れたため、クロック信号Ｃ１がクリップ（ハッチングされている部分）される。そして、クロック信号Ｃ１がriseイベントのとき、Enable信号は”Ｌ”なので、図示していないがレジスタＲ４の出力R4Enblも”Ｌ”となる。従って、１周期目では、レジスタＲ２へのクロック信号Ｃ２はネゲートされるため、レジスタＲ１においてデータの内容に変化があった場合、レジスタＲ１とレジスタＲ２との結果が異なるため、エラー信号が”１”となる。つまり、図１０に示す回路は、Enable信号のセットアップ違反を検出できる。仮に、レジスタＲ１においてデータの内容に変化がない場合、エラー信号が”１”とならず、クロック信号Ｃ１のクリップを検出できないが、イベントそのものが発生しておらず後段の回路にも影響を与えないので、本現象をアサートする必要はない。
【００５６】
次に、図１１に示す２周期目では、クロック信号Ｃ１，Ｃ２のriseイベント前にEnable信号が”Ｈ”に確定しているが、レジスタＲ１へのデータイベントの到達（データ信号Ｄ１の変化）がクロック信号Ｃ１のriseイベントに間に合っていない。そのため、データ信号Ｑ１とデータ信号Ｑ２との結果が異なり、エラー信号が”Ｈ”となる。つまり、図１０に示す回路は、データ信号のセットアップ違反を検出できる。
【００５７】
次に、図１１に示す３周期目では、Enable信号のfallイベントの到着が遅れたため、クロック信号Ｃ１がクリップ（ハッチングされている部分）される。そして、クロック信号Ｃ１のriseイベントのとき、Enable信号は”Ｈ”なので、図示していないがレジスタＲ４の出力R4Enblも”Ｈ”となる。従って、３周期目では、クロック信号Ｃ２のriseイベント前にEnable信号が”Ｌ”に落ち、当該イベントがロックアップラッチであるレジスタＲ３を介してＡＮＤ回路２２に伝達されるので、結果としてレジスタＲ２へのクロック信号Ｃ２はネゲートされる。さらに、レジスタＲ１においてデータの内容に変化があった場合、レジスタＲ１とレジスタＲ２との結果が異なることになり、エラー信号が”１”となる。つまり、図１０に示す回路は、Enable信号のセットアップ違反を検出できる。仮に、レジスタＲ１においてデータの内容に変化がない場合、エラー信号が”１”にならず、クロック信号Ｃ１のクリップが検出できないが、イベントそのものが発生しておらず後段の回路にも影響を与えないので、本現象をアサートする必要はない。
【００５８】
次に、図１１に示す４周期目では、Enable信号が”Ｌ”のため、クロック信号Ｃ１及びクロック信号Ｃ２が共にネゲートされるため、図１０に示す回路の出力結果に影響を与えない。そして、図１１に示す５周期目では、２周期目と同じ動作を行うので、詳細な説明は省略する。
【００５９】
以上のように、本実施の形態に係る半導体装置は、図１０に示す回路を用いているので、消費電力削減効果を改善し、Enable信号のセットアップ違反を検出することが可能となる。
【００６０】
（実施の形態３）
実施の形態２では、データ信号のセットアップ違反とEnable信号のセットアップ違反をそれぞれ検出することができるが、データ信号及びEnable信号のセットアップ違反が同周期に生じた場合、セットアップ違反を検出できなかった。そこで、本実施の形態では、図１２に示す回路を用いることで同周期に生じるデータ信号及びEnable信号のセットアップ違反を検出可能にしている。
【００６１】
通常、Enable信号はバス（複数ビット）制御に使用されることが多いため、図１２に示す回路では、Enable信号のセットアップ違反は同一のEnable信号で制御される回路グループに対して、Enable信号のみを検知する回路を新規に追加している。つまり、図１２に示す回路では、レジスタＲ１，Ｒ２や比較器３等を備え、データ信号のセットアップ違反を検出する回路Ａ１〜Ａ３と、当該回路Ａ１〜Ａ３に対して共通に供給されるEnable信号のセットアップ違反を検出する回路Ｂとで構成されている。
【００６２】
図１２に示す回路Ａ１〜Ａ３は、図１０に示す回路のレジスタＲ３，Ｒ４を取り除いた構成である。一方、図１２に示す回路Ｂは、クロック信号とEnable信号とが入力するレジスタＲ３と、バッファ３０により遅延させたクロック信号とEnable信号とが入力するレジスタＲ４と、レジスタＲ３の出力とレジスタＲ４の出力を比較する比較器３１とを備えている。なお、回路Ｂの構成は、図１２に示す回路構成に限定されず、同等の機能を有する回路構成であればよい。
【００６３】
ここで、回路Ａ１〜Ａ３のバッファＢ３及び回路Ｂのバッファ３０の遅延量は、対象レジスタの前段ロジックにおけるスラック量に依存し、それぞれ最適な遅延量が設定される。具体的には、Enable信号からレジスタＲ１，Ｒ２，Ｒ３，Ｒ４のそれぞれへ至る経路のスラック量が、ロジックステージＬ１のスラック量に比べて大きい場合、レジスタＲ２の前段に挿入されたバッファＢ３の遅延量の方が、レジスタＲ４の前段に挿入されたバッファ３０の遅延量よりも大きくなる。
【００６４】
また、図１２に示す回路では、同一のEnable信号で制御される回路グループが３ビットであったため、回路Ａ１〜Ａ３の３つに対して回路Ｂを１つ設ける構成であるが、本発明はこれに限定されない。例えば、同一のEnable信号で制御される回路グループが５ビットであれば、回路Ａ１〜Ａ５の５つに対して回路Ｂを１つ設ける構成となる。
【００６５】
次に、図１２に示す回路の動作を、図１３に示すタイミングチャートを用いて説明する。まず、レジスタＲ１のクロックピンに入力される信号をクロック信号Ｃ１、データ入力ピンに入力される信号をデータ信号Ｄ１、データ出力ピンから出力される信号をデータ信号Ｑ１とする。また、レジスタＲ２のクロックピンに入力される信号をクロック信号Ｃ２、データ入力ピンに入力される信号をデータ信号Ｄ２、データ出力ピンから出力される信号をデータ信号Ｑ２とする。
【００６６】
また、レジスタＲ３のクロックピンに入力される信号をクロック信号Ｃ３、データ入力ピンに入力される信号をデータ信号Ｄ３、データ出力ピンから出力される信号をデータ信号Ｑ３とする。また、レジスタＲ４のクロックピンに入力される信号をクロック信号Ｃ４、データ入力ピンに入力される信号をデータ信号Ｄ４、データ出力ピンから出力される信号をデータ信号Ｑ４とする。さらに、データ信号Ｑ１とデータ信号Ｑ２とを比較する比較器３から出力されるエラー信号をError１とし、データ信号Ｑ３とデータ信号Ｑ４とを比較する比較器３１から出力されるエラー信号をError２とする。なお、上述したように、クロック信号Ｃ２は、バッファＢ３によりクロック信号Ｃ１に対して挿入したバッファ分だけ遅延してイベントを伝播し、クロック信号Ｃ４は、バッファ３０によりクロック信号Ｃ３に対して挿入したバッファ分だけ遅延してイベントを伝播する。
【００６７】
まず、図１３に示す１周期目では、Enable信号のriseイベントの到着が遅れたため、クロック信号Ｃ１がクリップ（ハッチングされている部分）される。図１２に示す回路では、データ信号とEnable信号のセットアップ違反を検出する回路を分離したため、クロック信号Ｃ１のクリップを、データ信号のエラー検出信号であるError１信号としては検出することができなくなった。しかし、図１３に示す１周期目では、Enable信号のエラー検出信号であるError２信号が”Ｈ”となり、クロック信号Ｃ１のクリップを検出している。
【００６８】
次に、図１３に示す２周期目では、データ信号のセットアップ違反が発生しているため、Error１信号として検出している。なお、２周期目では、Enable信号のエラー検出信号であるError２信号は”Ｌ”のままでアサートされない。
【００６９】
次に、図１３に示す３周期目では、Enable信号のfallイベントの到着が遅れたため、クロック信号Ｃ１がクリップ（ハッチングされている部分）される。このクロック信号Ｃ１のクリップによるEnable信号のセットアップ違反も、１周期目と同様にError２信号が”Ｈ”となることで検出可能である。
【００７０】
次に、図１３に示す４周期目では、Enable信号が”Ｌ”のため、クロック信号Ｃ１及びクロック信号Ｃ２ともネゲートされるため、図１２に示す回路の出力結果にも影響を与えない。
【００７１】
次に、図１３に示す５周期目では、データ信号とEnable信号どちらもセットアップ違反を起こしている場合である。５周期目の場合、データ信号とEnable信号とは競合関係にある。つまり、クロック信号Ｃｌｋの立ち上がりに対してデータ信号のイベント到達が遅延しているため、本来セットアップ違反となるべきであるが、クロック信号Ｃ１のクリップにより、クロック信号Ｃ１が立ち上がる時点ではデータ信号のイベント到達している。従って、データ信号Ｑ１とデータ信号Ｑ２の結果は同一となり、データ信号に対するエラー検出信号のError１信号は”Ｈ”とならず、データ信号のセットアップ違反を検出できない。しかし、図１３に示す５周期目では、Enable信号に対するエラー検出信号のError２信号は”Ｈ”となり、クロック信号Ｃ１のクリップは検出できる。なお、クロック信号Ｃ１が立ち上がる時点よりもデータ信号のイベント到達が遅延している場合は、データ信号のセットアップ違反も検出できる。
【００７２】
以上のように、本実施の形態に係る半導体装置では、図１２に示す回路を用いることで同周期にデータ信号のセットアップ違反とEnable信号のセットアップ違反とが生じても、少なくとも一方を検出することができる。
【００７３】
（実施の形態４）
図１４に示す回路では、実動作レジスタであるレジスタＲ１に対し、クロックラインに遅延手段であるバッファＢ２を挿入した分だけタイミング的に余裕（Positive Slack）を持たせたレジスタＲ２を備えている。そして、レジスタＲ１には、ロジックステージＬ１の出力であるデータ信号Ｄ１が入力される。このロジックステージＬ１の前段には、レジスタＲ０が接続されている。一方、レジスタＲ１の出力であるデータ信号Ｑ１は、比較器３に入力される。
【００７４】
この比較器３は、レジスタＲ１のデータ信号Ｑ１とレジスタＲ２の出力であるデータ信号Ｑ２とを比較し、両者が不一致の場合にエラー信号を出力する。そのため、図１４に示す回路は、クロックラインに挿入したバッファＢ２の遅延分だけレジスタＲ１のセットアップ違反を動的に検出することができる。また、図１４に示す回路では、次段のロジックステージＬ２の前段に、選択回路２が設けられている。この選択回路２は、比較器３の出力であるエラー信号が”０”の時、レジスタＲ１からのデータ信号Ｑ１をロジックステージＬ２に出力し、エラー信号が”１”の時、レジスタＲ２からのデータ信号Ｑ２をロジックステージＬ２に出力するように切り替え制御する。
【００７５】
そして、図１４に示す回路の通常パスは、レジスタＲ１に到達したデータ信号Ｄ１がクロック信号Ｃ１の立ち上がりエッジに同期して取り込まれ、選択回路２を経て次段のロジックステージＬ２へ伝播される。つまり、通常動作時のパス経路は、レジスタＲ１及び選択回路２を経由する経路である。
【００７６】
しかし、図１４に示す回路が誤動作を検知し修復動作を行った場合、データ信号Ｄ１と同時にレジスタＲ２に到達するデータ信号Ｄ２は、遅延手段であるバッファＢ２によりクロック信号Ｃ１に対して遅れたクロック信号Ｃ２に基づき、レジスタＲ２により取り込まれる。そして、レジスタＲ２に取り込まれたデータ信号Ｄ２は、データ信号Ｑ２として出力され、比較器３及び選択回路２を経由して次段のロジックステージＬ２に伝播する。従って、誤動作を検知し修復動作を行った場合、図１４に示す破線の経路が修復動作時のパス経路となり、バッファＢ２の遅延量Ｇ１と比較器３での遅延量Ｇ２との和が通常動作時のパス経路に対するタイミングオーバーヘッドとなる。そのため、次段がタイミングクリティカルであった場合、修復動作時のパス経路の遅延量Ｇ１＋Ｇ２により、次段パスの誤動作を誘発する可能性があった。
【００７７】
そこで、本実施の形態に係る半導体装置では、図１５に示す回路を用いることで次段パスの誤動作を誘発させる可能性を低減している。図１５に示す回路では、レジスタＲ０からロジックステージＬ１を経由してレジスタＲ１へ至るパスがクリティカルパスを形成しており、レジスタＲ１の出力ピンからデータ信号Ｑ１が出力され次段論理（ロジックステージＬ２、レジスタＲ３）へ伝播する。また、図１５に示す回路では、クロックラインにバッファＢ２を挿入することによりセットアップ違反条件を緩和させたレジスタＲ２を設け、レジスタＲ１の出力とレジスタＲ２の出力とを比較する比較器３を設けている。
【００７８】
さらに、図１５に示す回路では、レジスタＲ１，Ｒ２の後段に選択回路２を挿入する。そして、選択回路２は、比較器３の出力であるエラー信号が”０”の時、データ信号Ｑ１を出力し、エラー信号が”１”の時、データ信号Ｑ２を出力するように制御し、ロジックステージＬ２へのイベント伝播を切り替える。
【００７９】
また、図１５に示す回路では、レジスタＲ１，Ｒ２等を含む回路Ｃ１〜Ｃ３が複数設けられ（図１５では３つの回路）、各回路からのエラー信号がＯＲ回路４０で束ねられる。そのため、各回路Ｃ１〜Ｃ３のいずれか１つでもエラー信号がアサート（”Ｈ”）すれば、ＯＲ回路４０の出力は”Ｈ”となる。さらに、図１５に示す回路では、ＯＲ回路４０の立ち上がりイベントを微分回路４１でDetect信号（ディテクト信号）として検知し、当該Detect信号に基づいてＡＮＤ回路４２が各回路Ｃ１〜Ｃ３に供給するクロック信号Ｃｌｋをネゲートする。なお、クロック信号Ｃｌｋをネゲートするサイクルは、ダウンカウンタにより任意のサイクルに設定（通常１サイクル）しても、システム側からの制御信号によって設定してもよい。
【００８０】
ここで、微分回路４１は、レジスタＲ４、レジスタＲ５及びＡＮＤ回路４３を備えている。レジスタＲ４は、ＯＲ回路４０からの出力と、クロック信号Ｃｌｋと、システムからのPower On Reset信号とが入力される。レジスタＲ５は、レジスタＲ４の出力と、クロック信号Ｃｌｋとが入力される。ＡＮＤ回路４３は、レジスタＲ４の出力と、レジスタＲ５の反転出力とが入力され、Detect信号を出力する。
【００８１】
図１５に示す回路は、エラー信号のアサートを検知し、対象となる回路のクロック信号Ｃｌｋをディスイネーブルにして、当該クロック信号がディスイネーブルされている期間内に誤動作修復処理を行う。さらに、図１５に示す回路では、エラー信号の信号レベルを検知すると、ディスイネーブル以降のクロック信号が復帰しなくなるため、信号レベルではなくエッジを検出するために微分回路４１を設けている。また、図１５に示す回路では、エラー信号のグリッジ（クロック位相差による微小信号）を拾わないように、微分回路４１でフィルタリングを行っている。なお、図１５に示す回路では図示していないが、誤動作修復サイクルを予め設定されたサイクル数となるようにカウンタで制限するか、システムからの制御信号（Req）をＡＮＤ回路４２供給してクロック信号のディスイネーブル期間を制御する。
【００８２】
次に、図１５に示す回路の動作を、図１６に示すタイミングチャートを用いて説明する。まず、レジスタＲ１のクロックピンに入力される信号をクロック信号Ｃ１、データ入力ピンに入力される信号をデータ信号Ｄ１、データ出力ピンから出力される信号をデータ信号Ｑ１とする。また、レジスタＲ２のクロックピンに入力される信号をクロック信号Ｃ２、データ入力ピンに入力される信号をデータ信号Ｄ２、データ出力ピンから出力される信号をデータ信号Ｑ２とする。なお、上述したように、クロック信号Ｃ２は、バッファＢ２によりクロック信号Ｃ１に対して挿入バッファ分だけ遅延してイベントが伝播する。また、データ信号Ｄ１は、SignalIn信号の値をクロック信号Ｃ１の立ち上がりエッジで取り込み、ロジックステージＬ１の遅延を経てイベントが到達するものとする。同様に、データ信号Ｄ２は、SignalIn信号の値をクロック信号Ｃ２の立ち上がりエッジで取り込み、ロジックステージＬ１の遅延を経てイベントが到達するものとする。
【００８３】
まず、図１６に示す１周期目では、データ信号Ｄ１及びデータ信号Ｄ２のriseイベントのそれぞれが、クロック信号Ｃ１及びクロック信号Ｃ２のriseイベントの前に行われているため、レジスタＲ１及びレジスタＲ２は正常に論理”１”を取り込んでいる。但し、クロック信号Ｃ１とクロック信号Ｃ２との位相差によりエラー信号が”１”となり、それに伴い当該期間のOutput信号もデータ信号Ｑ２の値となる。その後、エラー信号が”０”に戻り、それに伴いOutput信号もデータ信号Ｑ１の値に切り替わり、正常に動作になる。しかし、図１５に示す微分回路４１は、半周期に満たないグリッジパルスをフィルタリングしてDetect信号をアサートしない。従って、次サイクルである２周期目でのクロック信号Ｃ１及びクロック信号Ｃ２はディスイネーブルされない。
【００８４】
次に、図１６に示す２周期目では、レジスタＲ１におけるデータ信号Ｄ１のfallイベントの到達がクロック信号Ｃ１のriseイベントに間に合わないため、データ信号Ｑ１が”０”を取り込むことができない。しかし、レジスタＲ２におけるデータ信号Ｄ２のfallイベントの到達はクロック信号Ｃ２のriseイベントに間に合うため、データ信号Ｑ２は”０”を取り込むことができる。よって、レジスタＲ１とレジスタＲ２との結果に相違が生じ、比較器３の結果（エラー信号）が”１”となる（セットアップ違反を検出）。
【００８５】
このとき、エラー信号によって選択回路２の経路がデータ信号Ｑ２をOutput信号とする経路に切り替わり、Output信号は”０”となる。ここで、クロック信号Ｃ１からクロック信号Ｃ２及びデータ信号Ｑ２からOutput信号への切り替え分のオーバーヘッドが次段のセットアップ違反を誘発することを防ぐ必要がある。そのため、図１５に示す微分回路４１は、エラー信号の立ち上がりエッジを検出し、且つ半周期以内のグリッジでないことを確認し、Detect信号にカウンタサイクル分だけ正のパルスを発生する。本実施の形態では、予め設定したカウント値が１であるとして、クロック信号Ｃ１の立ち下がりエッジから次サイクルである３周期目のクロック信号Ｃ１の立ち下がりエッジまでパルスを発生させる。
【００８６】
なお、本実施の形態では、説明を簡略化するため、Detect信号がクロック信号Ｃ１の立ち下りエッジに同期しているが、クロック信号Ｃ１よりも少し速いクロックに同期させてDetect信号を合成し、誤動作検出期間に余裕を持たせる構成でもよい。具体的に、クロック信号Ｃ１よりも少し速いクロックはクロックツリーでクロック合成するため、理論的に任意の遅延差を設けることが可能である。また、図１５に示す回路では、クロック信号Ｃ１の立ち下りエッジではなく、少し速いクロックを用いた回路構成になっている。
【００８７】
次に、図１６に示す３周期目では、前サイクル（２周期目）のSignalIn信号からのイベントをトリガしたレジスタＲ０のイベントがデータ信号Ｄ１及びデータ信号Ｄ２に到達する。しかし、クロック信号Ｃ１及びクロック信号Ｃ２のイベントがディスイネーブルされ、データ信号Ｄ１及びデータ信号Ｄ２の値をデータ信号Ｑ１及びデータ信号Ｑ２として取り込まない。つまり、Output信号でのイベントは発生しない。よって、次段のレジスタＲ３は、２周期目及び３周期目の２サイクルかけてOutput信号の値を取り込めばよく、セットアップマージンを十分確保することができる。
【００８８】
なお、当該サイクル中（３周期目）に、SignalIn信号にイベントが発生してしまうと、クロック信号Ｃ１，Ｃ２がディスイネーブルされているために、当該イベントが後段に伝播されない。しかし、ロジックステージＬ１等の論理回路へデータの伝搬を要求するシステムからの制御信号（Req信号）とDetect信号とをハンドシェークするフェールセーフ手段を採用することで上記の問題を解決できる。つまり、当該手段により、Detect信号がアサートされている間、SignalIn信号にイベントを発生させないようにし、逆にSignalIn信号へのデータ準備ができていない間、Req信号をネゲートすればよい。
【００８９】
次に、図１６に示す４周期目では、Detect信号がネゲートされ、クロック信号Ｃｌｋがディスイネーブルされていた間に保持されていたデータ信号Ｄ１及びデータ信号Ｄ２のriseイベントがクロック信号Ｃ１及びクロック信号Ｃ２のriseイベントの前に到達している。そのため、レジスタＲ１及びレジスタＲ２は、正常に論理”１”を取り込むことができる。
【００９０】
以上のように、本実施の形態に係る半導体装置は、図１５に示す回路を用いることで、修復動作時のパス経路の遅延量による次段パスの誤動作を誘発する可能性を低減している。
【００９１】
（実施の形態５）
図１５に示す回路に対して定格電圧で駆動した場合はセットアップ時間が遵守されるが、駆動電圧の降圧に伴い遅延が増大する場合はセットアップ時間が守られずに出力が不安定な状態となるメタステーブル状態が発生する。具体的に、図１７に示すタイミングチャートを用いて説明する。まず、定格電圧で駆動した場合、１周期目のクロック信号Ｃ１の立ち上がりにおいて、データ信号Ｄ１のイベントをレジスタＲ１が取り込むことになる。しかし、図１７に示すタイミングチャートでは、駆動電圧の降圧に伴いレジスタＲ１の出力であるデータ信号Ｑ１が”０”から”１”に不安定な状態（メタステーブル）に遷移している。同様に、図１７に示す２周期目のクロック信号Ｃ１の立ち上がりにおいて、駆動電圧の降圧に伴いレジスタＲ１の出力であるデータ信号Ｑ１が”１”から”０”に不安定な状態（メタステーブル）に遷移している。
【００９２】
そこで、本実施の形態に係る半導体装置では、図１８に示すようにレジスタＲ１の出力に対してメタスタビリティ検出回路５０を設ける回路を採用している。図１８に示す回路は、メタスタビリティ検出回路５０によりメタステーブル発生の有無を検出して、回路の出力が不安定な状態に遷移しないように制御している。つまり、図１８に示すメタスタビリティ検出回路５０は、出力するＭＳＤ信号と比較器３の出力とをＯＲ回路５１で処理して、メタステーブルの検出時にレジスタＲ１の出力にかかわらず、エラー信号を”Ｈ”する。そして、メタスタビリティ検出回路５０は、レジスタＲ２の出力が選択回路２で選択されるように制御している。
【００９３】
また、メタスタビリティ検出回路５０の回路図を図１９に示す。図１９に示すメタスタビリティ検出回路５０は、低閾値（Ｌｖｔ）のＰＭＯＳ（P-channel Metal-Oxide Semiconductor）５２と、高閾値（Ｈｖｔ）のＮＭＯＳ（N-channel Metal-Oxide Semiconductor）５３とのペアトランジスタを用いたインバータを備えている。さらに、図１９に示すメタスタビリティ検出回路５０は、高閾値のＰＭＯＳ５４と低閾値のＮＭＯＳ５５とのペアトランジスタを用いたインバータを備え、両インバータのＸＯＲを演算するＸＯＲ回路５６によりメタステーブルを検出している。
【００９４】
次に、図１８及び図１９に示す回路の動作を、図２０に示すタイミングチャートを用いて説明する。ここで、出力Ｉ１は、低閾値のＰＭＯＳ５２と高閾値のＮＭＯＳ５３とのインバータ出力、出力Ｉ２は、高閾値のＰＭＯＳ５４と低閾値のＮＭＯＳ５５とのインバータ出力、ＭＳＤは、出力Ｉ１と出力Ｉ２とのＸＯＲ論理の結果である。また、図１８では図示していないが、エラー信号の出力先に図１５で示したＯＲ回路４０や微分回路４１が設けられており、当該微分回路４１の出力であるDetect信号に基づきクロック信号Ｃ１，Ｃ２を制御している。
【００９５】
まず、図２０に示す１周期目では、クロック信号Ｃ１の立ち上がりと同時にデータ信号Ｄ１，Ｄ２が”０”から”１”へと遷移しているが、駆動電圧の降圧のためデータ信号Ｑ１がメタステーブル状態となっている。そして、出力Ｉ１は、出力Ｉ２と比較して、”１”から”０”への遷移出力の感度が悪いため、出力Ｉ２が出力Ｉ１に比べて速く”０”に遷移し、少し遅れて出力Ｉ１が”０”に遷移する。この出力Ｉ１と出力Ｉ２との遅延差の間におけるＭＳＤは”１”になり、メタステーブルを検出できることになる。このメタステーブルの検出結果（ＭＳＤ＝”１”）を受けてエラー信号が”１”となり、さらにDetect信号が”１”となる。
【００９６】
次に、図２０に示す２周期目では、Detect信号が”１”となっていることを受けて、クロック信号Ｃ１，Ｃ２がネゲートされ、この間に出力Ｑの結果が修復される。
【００９７】
次に、図２０に示す３周期目では、クロック信号Ｃ１の立ち上がりと同時にデータ信号Ｄ１，Ｄ２が”１”から”０”へと遷移しているが、駆動電圧の降圧のためデータ信号Ｑ１がメタステーブル状態となっている。当該周期は１周期目のケースと逆で、出力Ｉ２は出力Ｉ１と比較して、”０”から”１”への遷移出力の感度が悪いため、出力１が出力Ｉ２に比べて速く”１”に遷移し、少し遅れて出力Ｉ２が”１”に遷移する。この出力Ｉ１と出力Ｉ２との遅延差の間におけるＭＳＤは”１”になり、メタステーブルを検出できることになる。このメタステーブルの検出結果（ＭＳＤ＝”１”）を受けてエラー信号が”１”となり、さらにDetect信号が”１”となる。
【００９８】
次に、図２０に示す４周期目では、Detect信号が”１”となっていることを受けて、クロック信号Ｃ１，Ｃ２がネゲートされ、この間に出力Ｑの結果が修復される。
【００９９】
次に、図２０に示す５周期目では、クロック信号Ｃ１の立ち上がりの前にデータ信号Ｄ１，Ｄ２が”０”から”１”へと遷移しているため、データ信号Ｑ１，Ｑ２共に正常に”１”を取り込むことができる。
【０１００】
以上のように、本実施の形態に係る半導体装置では、図１８及び図１９に示す回路を採用しているので、メタステーブル発生の有無が検出でき、回路の出力Ｑが不安定な状態に遷移しないように制御できる。なお、本実施の形態に係る誤動作判定回路では、微分回路や選択回路２を備える回路構成について説明したが、本発明はこれに限られず、微分回路や選択回路２を備えない構成や、図１２等に示したEnable信号のセットアップ違反を検出する回路をさらに備える構成であってもよい。
【０１０１】
（実施の形態６）
図２１に示す回路では、実動作レジスタであるレジスタＲ１に対し、クロックラインに遅延手段であるバッファチェーンＢ２を挿入した分だけタイミング的に余裕（Positive Slack）を持たせたレジスタＲ２を備えている。そして、レジスタＲ１には、ロジックステージＬ１から出力されたデータ信号Ｄ１が入力される。このロジックステージＬ１の前段には、レジスタＲ０が接続されている。一方、レジスタＲ１から出力されたデータ信号Ｑ１は、次段のロジックステージＬ２に入力されると共に、比較器３に入力される。
【０１０２】
この比較器３は、レジスタＲ１から出力されたデータ信号Ｑ１とレジスタＲ２から出力されたデータ信号Ｑ２とを比較し、両者が不一致の場合にエラー信号を出力する。そのため、図２１に示す回路は、クロックラインに挿入したバッファチェーンＢ２の遅延分だけレジスタＲ１のセットアップ違反を動的に検出することができる。また、図２１に示す回路では、バッファチェーンＢ２の遅延量を調整するために選択回路５０が設けられている。この選択回路５０は、外部から入力される選択信号Ｓｅｌに基づいて駆動される。そして、同様の回路（エラー検出ＦＦ）に含まれるバッファチェーンＢ２の遅延量（Delay）は、複数の回路全てにおいて最適な値で均一化されている。しかし、実際には挿入される遅延量と速度マージンとの間に密接な関係があり、速度マージンの少ないパスほど挿入する遅延量を増やす必要がある。但し、過多に挿入した遅延量は回路規模や消費電力のオーバーヘッドを引き起こすとともにホールド耐性も弱くなる問題がある。逆に、過少に挿入した遅延量は動作対象レジスタ（Ｒ１）と同様に期待値レジスタ（Ｒ２）もフェールする領域が大きくなり、誤動作検知スポットが狭くなる問題がある。
【０１０３】
そこで、本実施の形態では、速度マージンによって遅延パスをグルーピングし、各グループに対して最適な遅延量を挿入する。図２２に、速度マージンに対応するスラック量とパス数との関係を示したグラフを示す。図２２に示すグラフでは、横軸に示した０から１までのスラック量に対して、例えば０．５ｎｓの遅延量を有するバッファを４段挿入し、１から２までのスラック量に対して、当該バッファを３段挿入し、２から３までのスラック量に対して、当該バッファを２段挿入し、３から４までのスラック量に対して、当該バッファを４段挿入する。これにより、本実施の形態では、動作マージンを保ちつつ面積や消費電力のオーバーヘッドを抑えることができる。
【０１０４】
具体的に説明する前に、図２３（ａ）に示す回路（エラー検出ＦＦ）を、図２３（ｂ）に示すようにシンボル化する。図２３（ｂ）の中央にあるＢの数字は、図２３（ａ）に示すレジスタＲ２のクロックラインに挿入されたバッファＢ２の段数を示している。例えば、図２３（ｂ）に示すＢ−１は、バッファが１段挿入されていることを表している。なお、図２３（ａ）に示す回路では、バッファ量が多ければ多いほど、レジスタＲ１とレジスタＲ２との間の遅延差が大きくなり、誤動作を検知するマージン（検知マージン）が大きくなるが、回路規模の増大、消費電力の増加及びホールドマージン現象が生じる問題がある。また、図２３（ａ）に示した回路は、図３に示した回路構成とほぼ同じであるため、詳細な説明は省略する。
【０１０５】
次に、図２３（ａ）に示した回路を４つ（Ｕ１，Ｕ２，Ｕ３，Ｕ４）使用した場合の回路構成を図２４に示す。なお、図２４では、図２３（ａ）の回路をシンボル化した図２３（ｂ）を用いて表している。そして、図２４に示す回路構成では、各回路（Ｕ１，Ｕ２，Ｕ３，Ｕ４）のそれぞれに、ロジック量の異なる前段（ロジックステージ）が挿入されている。そのため、各回路（Ｕ１，Ｕ２，Ｕ３，Ｕ４）の周波数に対する速度マージン（スラック）は、それぞれ０ｎｓ，０．５ｎｓ，１．０ｎｓ，１．５ｎｓとする。また、挿入するバッファ１段あたりの遅延量は、０．５ｎｓとする。なお、図２４に示す回路構成では、各回路（Ｕ１，Ｕ２，Ｕ３，Ｕ４）に挿入されるバッファを１段としている。
【０１０６】
次に、図２４に示す回路構成の動作を、図２５に示すタイミングチャートを用いて説明する。図２５に示すタイミングチャートでは、周期が進むごとに電源電圧を低下させて、各回路（Ｕ１，Ｕ２，Ｕ３，Ｕ４）のデータ端子Ｄに０．５ｎｓの遅延オーバーヘッドが生じるように仮定している。従って、４周期目では、１周期目に対して１．５ｎｓのスラックが減じられる（１．５ｎｓの遅延増加）ことになる。
【０１０７】
図２５に示す１周期目では、回路Ｕ１のセットアップ違反を検知できている（その他の回路Ｕ２，Ｕ３，Ｕ４ではセットアップ違反していない）。しかし、２周期目以降では、回路Ｕ１がセットアップ違反を起こしているにもかかわらず、クロック信号Ｃｌｋに対するクロック信号Ｃ２の位相差であるレジスタＲ２のマージンが不足しているのでセットアップ違反が検知できていない。
【０１０８】
次に、図２４に示す回路構成において、バッファ量を４段に増やした場合のタイミングチャートを図２６に示す。図２６も前述と同様に、周期が進むごとに電源電圧を低下させて、各回路（Ｕ１，Ｕ２，Ｕ３，Ｕ４）のデータ端子Ｄに０．５ｎｓの遅延オーバーヘッドが生じるように仮定している。従って、４周期目では、１周期目に対して１．５ｎｓのスラックが減じられることになる。
【０１０９】
図２６に示す１周期目では、回路Ｕ１のセットアップ違反を検知できている（その他の回路Ｕ２，Ｕ３，Ｕ４ではセットアップ違反していない）。しかし、２周期目以降では、回路Ｕ１がセットアップ違反を起こしている４周期目までセットアップ違反を検知し続けられる。
【０１１０】
一方、回路Ｕ２に関しては、２周期目で初めてセットアップ違反が検知され、その後４周期目までセットアップ違反を検知できている。回路Ｕ３に関しては、３周期目で初めてセットアップ違反が検知され、その後、４周期目までセットアップ違反を検知できている。回路Ｕ４に関しては、４周期目で初めてセットアップ違反が検知されている。
【０１１１】
従って、回路Ｕ２に関しては２周期目以降、回路Ｕ３に関しては３周期目以降、回路Ｕ４に関しては４周期目以降で、それぞれセットアップ違反を検知できればよいということである。通常の回路設計において電圧動作の下限は決まっており、それを超えるマージン量を確保する必要はない。よって、スラック量の大きいパスほど回路（Ｕ１，Ｕ２，Ｕ３，Ｕ４）に挿入する遅延量を小さくすることで、誤動作を検知するマージンを落とすことなく、面積や消費電力のオーバーヘッドを極力抑えることができる。
【０１１２】
次に、図２５や図２６に示したタイミングチャートに基づき、挿入する遅延量を最適にした回路構成を図２７に示す。図２７に示す回路構成では、スラック量が少ない回路ほど遅延量が多くなるようにバッファの段数を調整している。具体的には、図２７に示す回路構成では、回路Ｕ１のスラック量が０ｎｓと小さいので４段のバッファ（Ｂ４）を設け、スラック量が０．５ｎｓの回路Ｕ２には３段のバッファ（Ｂ３）、スラック量が１．０ｎｓの回路Ｕ３には２段のバッファ（Ｂ２）、スラック量が１．５ｎｓの回路Ｕ４には１段のバッファ（Ｂ１）をそれぞれ設けている。
【０１１３】
つまり、本実施の形態に係る半導体装置の回路構成では、回路のレイアウト後に各遅延パスのスラック量を分析し、バッファ１段分の遅延量に収まるスラック量を持つ回路（エラー検出ＦＦ）をグルーピングして束ねる。そして、本実施の形態に係る半導体装置の回路構成では、グルーピングした回路（エラー検出ＦＦ）に対して最適なバッファを挿入する。
【０１１４】
図２８に示すタイミングチャートは、図２７に示す回路構成の動作を説明している。そして、図２７に示す回路構成では、セットアップ違反のチェックが必要な箇所（破線で囲まれた箇所でデータ信号Ｄが変化しているポイント）において正しく検知されている。つまり、図２８に示すタイミングチャートは、回路Ｕ１に関しては１周期目以降、回路Ｕ２に関しては２周期目以降、回路Ｕ３に関しては３周期目以降、回路Ｕ４に関しては４周期目以降で、それぞれセットアップ違反を検知できている。
【０１１５】
（実施の形態７）
実施の形態５では、スラック量により半導体装置に含まれる誤動作判定回路（エラー検出ＦＦ）をグルーピングして、各グループの誤動作判定回路に最適な量のバッファを挿入していた。しかし、半導体装置において極端にスラック量が小さい回路は、多数のバッファを挿入する必要があり、面積や消費電力のオーバーヘッドが大きくなる点で問題があった。
【０１１６】
以下に、具体的な例を用いて説明する。図２９に示す回路では、レジスタＲ３を終点とするパスとして、レジスタＲ１からレジスタＲ３へ至るタイミングクリティカルなパスを有すると伴に、レジスタＲ２からレジスタＲ３へ至る等の他のパスも有している。そして、図２９に示すレジスタＲ３を図３で説明した誤動作判定回路（エラー検出ＦＦ）に置き換えた場合の回路構成を、図３０に示す。図３０に示す回路構成では、レジスタＲ１からレジスタＲ３−１へ至るパスがタイミングクリティカルなパスであるが、このパス以外にレジスタＲ２からレジスタＲ３−２へ至るパスも有している。
【０１１７】
しかし、レジスタＲ２からレジスタＲ３−２へ至るパスがホールド違反を引き起こすと仮定すると、このホールド違反の対策のためにレジスタＲ２からレジスタＲ３−２へ至るパスにバッファやディレイセルを挿入する必要がある。つまり、レジスタＲ３−２のクロックラインに挿入しているバッファ１の遅延量が大きい場合、図３１に示す回路構成のようにレジスタＲ２からレジスタＲ３−２へ至るパスに、バッファ１の遅延量と等価なバッファやディレイセル等の遅延手段６０を挿入する必要がある。そのため、図３１に示す回路構成では、面積的にも消費電力的にもオーバヘッドが大きくなる問題があった。
【０１１８】
そこで、本実施の形態に係る半導体装置では、ホールド違反を引き起こすパスを有する回路構成において、ホールド違反の対策として挿入するバッファやディレイセルの代わりに、ロックアップラッチや反転ＦＦを挿入する。つまり、本実施の形態では、図３２に示すように、レジスタＲ２からレジスタＲ３−２へ至るパスにロックアップラッチとして機能するレジスタＲ４を挿入する。又は、図３３に示すように、レジスタＲ２からレジスタＲ３−２へ至るパスに反転ＦＦとして機能するレジスタＲ４を挿入する。
【０１１９】
図３２に示す回路構成や図３３に示す回路構成では、多数のバッファセルやディレイセルを挿入する代わりに、ロックアップラッチや反転ＦＦとして機能するレジスタＲ４を挿入することで、クロック信号の半周期分の遅延を稼ぐことができ、且つホールド違反を解消することができる。さらに、図３２に示す回路構成や図３３に示す回路構成は、図３１に示す回路構成のように多数のバッファセルやディレイセルを挿入する必要がないので、面積的にも消費電力的にもオーバヘッドを低減できる。
【０１２０】
次に、ホールド違反を引き起こしている図３０に示す回路構成の動作を、図３４に示すタイミングチャートを用いて説明する。なお、図３０に示す回路構成において、レジスタＲ１からレジスタＲ３−１に至るパスはセットアップ違反を引き起こし、レジスタＲ１からレジスタＲ３−２に至るパスから期待値を得る。また、図３０に示す回路構成において、レジスタＲ２からレジスタＲ３−２に至るパスはホールド違反を引き起こすパスである。また、以下の動作説明では、当該動作を簡略化するために各タイミングパスの論理はいかなる状態でも正論理であると仮定する。
【０１２１】
まず、図３４に示す１周期目では、クロック信号Ｃ１の立ち上がりで、レジスタＲ１の内容が”０”から”１”に遷移している。
【０１２２】
次に、図３４に示す２周期目では、１周期目におけるレジスタＲ１のriseイベントに従ってって値が確定されることになるが、レジスタＲ３−１はセットアップ違反を引き起こしているので”１”を取り込むことができず”０”のままとなる。一方、レジスタＲ３−２は、遅延したクロック信号Ｃ２により正常に”１”を取り込むことができる。さらに、レジスタＲ１には、次の”１”から”０”へのfallイベントが発生している。
【０１２３】
次に、図３４に示す３周期目では、２周期目と同様、２周期目におけるレジスタＲ１のfallイベントに従ってって値が確定されることになるが、レジスタＲ３−１はセットアップ違反を引き起こしているので”０”を取り込むことができず、前周期での確定値”１”を取り込むことになる。一方、レジスタＲ３−２は、遅延したクロック信号Ｃ２により正常に”０”を取り込むことができる。
【０１２４】
次に、図３４に示す４周期目では、クロック信号Ｃ１の立ち上がりでレジスタＲ２の内容が”０”から”１”へと遷移している。そのため、レジスタＲ２の当該イベントは、本来、次サイクルである５周期目にレジスタＲ３−１，Ｒ３−２の遷移として反映される予定である。しかし、レジスタＲ３−２は、ホールド違反を引き起こしているため、図中の矢印が示すよう４周期目において”１”を取り込むことになる。つまり、４周期目において期待値レジスタであるレジスタＲ３−２は、誤った結果を保持することになる。
【０１２５】
次に、図３４に示す５周期目では、クロック信号Ｃ１の立ち上がりでレジスタＲ２の内容が”１”から”０”へと遷移している。そのため、レジスタＲ２の当該イベントは、本来、次サイクルである６周期目にレジスタＲ３−１，Ｒ３−２の遷移として反映される予定である。しかし、レジスタＲ３−２は、ホールド違反を引き起こしているため、４周期目と同様、図中の矢印が示すよう５周期目において”０”を取り込むことになる。
【０１２６】
次に、ホールド違反の対策のために、レジスタＲ２からレジスタＲ３−２へ至るパスにロックアップラッチ又は反転ＦＦとして機能するレジスタＲ４を挿入した図３２又は図３３に示す回路構成の動作について図３５のタイミングチャートを用いて説明する。
【０１２７】
なお、図３５に示すタイミングチャートでは、クロック信号Ｃ２がクロック信号Ｃ１に対して挿入したバッファ分だけ遅延してイベント伝播する。また、図３５に示すタイミングチャートでは、レジスタＲ１，Ｒ２，Ｒ３−１のそれぞれがクロック信号Ｃ１の立ち上がりエッジでデータ信号を取り込み、レジスタＲ３−２がクロック信号Ｃ２の立ち上がりエッジでデータ信号を取り込み、レジスタＲ４がクロック信号Ｃ１の立ち下りエッジでデータを取り込むものとする。
【０１２８】
次に、図３５に示すタイミングチャートは、１周期目から３周期目までの動作が図３４に示したタイミングチャートの動作と等価であるため詳細な説明を割愛する。
【０１２９】
次に、図３５に示す４周期目では、クロック信号Ｃ１の立ち上がりでレジスタＲ２の内容が”０”から”１”へと遷移している。レジスタＲ３−２はホールド違反を引き起こすパスであったが、図３２又は図３３に示すようにレジスタＲ２とレジスタＲ３−２との間にロックアップラッチ又は反転ＦＦが挿入されている。そのため、図３５に示す４周期目では、レジスタＲ２で生じたイベント”１”がレジスタＲ３−２に直接取り込まずに、図中の矢印が示すようにクロック信号Ｃ１の立ち下りでレジスタＲ４に一旦取り込まれた後、５周期目でレジスタＲ３−２に取り込む。
【０１３０】
次に、図３５に示す５周期目では、レジスタＲ４に取り込んだ”１”をクロック信号Ｃ１の立ち上がりでレジスタＲ３−１が取り込み、クロック信号Ｃ２の立ち上がりでレジスタＲ３−２に取り込む。また、クロック信号Ｃ１の立ち上がりでレジスタＲ２の内容が”１”から”０”に遷移しているが、４周期目と同様にレジスタＲ２で生じたイベント”０”をレジスタＲ３−２が直接取り込まずに、図中の矢印が示すようにクロック信号Ｃ１の立ち下りでレジスタＲ４に一旦取り込む。
【０１３１】
次に、図３５に示す６周期目では、レジスタＲ４に取り込んだ”０”をクロック信号Ｃ１の立ち上がりでレジスタＲ３−１が取り込み、クロック信号Ｃ２の立ち上がりでレジスタＲ３−２に取り込む。
【０１３２】
以上のように、本実施の形態に係る半導体装置では、図３２又は図３３に示す回路構成を採用することで、面積的にも消費電力的にもオーバヘッドを低減し、ホールド違反による誤動作を回避してデータを正しく転送可能にしている。
【０１３３】
（実施の形態８）
実施の形態６では、速度マージンによって遅延パスをグルーピングし、各グループに対して最適な遅延量を挿入している。具体的に、図２３の回路（エラー検出ＦＦ）に対して、個別にバッファＢ２を挿入し最適な挿入バッファ量を設定することで、回路規模や消費電力増大を抑える効果について説明した。しかし、挿入バッファ量を個々に変えるということは、エラー検出ＦＦごとに１つのクロックドメインをアサインすると言うことになり、実際に配置配線する際には、クロックスキューやレイテンシの制御がうまく働かず、所望の回路規模や消費電力が得られない場合も考えられる。
【０１３４】
そこで、本実施の形態では、上記のリスクも考慮した最適なグルーピング方法について説明する。まず、図３６に、本実施の形態で行うグルーピングのアルゴリズムのフローチャートを示す。例えば、遅延パスが２１パスあるとした場合について、図３６に示すフローチャートを説明する。この２１パスのネガティブスラック量（Negative-Slack）は、それぞれ0.048，0.048，0.045，0.045，0.036，0.035，0.033，0.027，0.024，0.022，0.021，0.019，0.017，0.015，0.015，0.008，0.007，0.006，0.005，0.001，0.001であると仮定する。なお、通常のネガティブスラック量（Negative-Slack）は負値となるが、説明を簡単にするために、全て正値として表す。
【０１３５】
図３６に示すフローチャートのステップＳ１では、最大及び最小のネガティブスラック量（Maximum-Negative-Slack(MaxNS),Minimum-Negative-Slack(MinNS：初期値は０)）、トータルネガティブスラック量（Total-Negative-Slack(TNS)）を算出する。さらに、ステップＳ１で算出したTNSを初期クライテリアとする。具体的には、MaxNS＝0.048，MinNS＝0.0，TNS＝0.478となる。
【０１３６】
次に、ステップＳ２では、MaxNSからMinNSまでの任意のネガティブスラック量をDivNS（選択値）として選択し、MaxNSからDivNSまでに属する全ての遅延パスをグループＡ、DivNSからMinNSまでに属する全ての遅延パスをグループＢに分ける。０．７Ｖでのスラックタイミングを示す図３７のように、MaxNSからMinNSまで遅延パスをDivNSを境にグループＡとグループＢとに分ける。さらに、ステップＳ２では、グループＡに属する個々の遅延パスからDivNSまでの差分の合計、及びグループＢに属する個々の遅延パスからMinNSまでの差分の合計をそれぞれ算出し、両差分の和を評価関数としてトータルネガティブスラック量（TNS）とする。
【０１３７】
次に、ステップＳ３では、DivNSをMaxNSからMinNSまでの間で順次スイープさせて、評価関数であるトータルネガティブスラック量（TNS）が最小となるDivNSを求める。具体的に、上記の例では、DivNSをMaxNS(0.048)からMinNS(0.0)までスイープさせてTNSが最小となるDivNSを決定する。なお、本例では、DivNSのスイープ精度を0.01とするので、DivNSの取りうる値は0.00，0.01，0.02，0.03，0.04の５通りとなる。取りうる各DivNS時のTNSは、DivNS＝0.00のときTNS＝0.478，DivNS＝0.01のときTNS＝0.328，DivNS＝0.02のときTNS＝0.258，DivNS＝0.03のときTNS＝0.268，DivNS＝0.04のときTNS＝0.318である。
【０１３８】
次に、ステップＳ４では、ステップＳ３で求めた最小となるDivNSに所定の重み付けを行った値と、今回の分割前のクライテリアとを比較し、大きければ処理を終了し、小さければ今回の分割処理をアクセプトして、得られた値を新たなクライテリアとして更新する。上記の例では、TNSの最小値はDivNS＝0.02のときの0.258なので、この値と初期クライテリア(0.478)を比較する。この時の重み付け関数を1.5＊TNS＋0.05とすると、重み付けを行った値は0.437となり、クライテリアを下回るため、本分割はアクセプトされ、以下のように分割される。グループＡは、0.048，0.048，0.045，0.045，0.036，0.035，0.033，0.027，0.024，0.022，0.021、グループＢは0.019，0.017，0.015，0.015，0.008，0.007，0.006，0.005，0.001，0.001となる。このとき、クライテリアは0.478から0.258に更新される。
【０１３９】
次に、ステップＳ５では、分割後の２グループに関して同様のことが再帰的に行われる。グループＡにおけるTNSの最小値はDivNS＝0.04の時の0.084で、重み付けを行った値は0.176となり、分割はアクセプトされる。このときのクライテリアは0.084に更新される。また、グループＢにおけるTNSの最小値はDivNS＝0.01の時の0.054で、重み付けを行った値は0.131となり、分割はアクセプトされる。この時のクライテリアは0.054に更新される。
【０１４０】
従って、上記分割のアクセプト後のグループは以下の通りになる。グループＡ−Ａ（ＧＡ−Ａ）は0.048，0.048，0.045，0.045、グループＡ−Ｂ（ＧＡ−Ｂ）は0.036，0.035，0.033，0.027，0.024，0.022，0.021、グループＢ−Ａ（ＧＢ−Ａ）は0.019，0.017，0.015，0.015、グループＢ−Ｂ（ＧＢ−Ｂ）は0.008，0.007，0.006，0.005，0.001，0.001となる。このとき、グループＡ−Ａ，グループＢ−Ａ，グループＢ−Ｂに関しては、DivNSの精度0.01による分割はこれ以上できないため、分割処理をストップし、グループＡ−Ｂのみ分割処理を続ける。
【０１４１】
グループＡ−ＢにおけるTNSの最小値はDivNS＝0.03の時の0.028で、重み付けを行った値は0.092となり、クライテリア0.084を上回るため分割がリジェクトされる。したがって、上記の遅延パスである２１パスに図３６に示すアルゴリズムを適用して分割した場合、上記４通り（グループＡ−Ａ，グループＡ−Ｂ，グループＢ−Ａ，グループＢ−Ｂ）にグルーピングされる。
【０１４２】
次に、図３６に示すアルゴリズムを用いて遅延パスをグルーピングした場合の効果について説明する。図３８は、上記のグループ分けを行った遅延パスを説明するための模式図である。従来手法では、２１パス全てに最大スラック0.048ｎｓのディレイを補うバッファが挿入されていた。ホールドオーバーヘッド関数を遅延量＊パス数とすると、オーバヘッド指標は0.048＊21＝1.008となる。
【０１４３】
一方、本実施の形態では、挿入遅延量は各グループのクリティカルスラックとなるため、図３８に示すようにグループＡ−Ａの挿入遅延量は0.048ｎｓのまま変わらないが、グループＡ−Ｂは0.036ｎｓ，グループＢ−Ａは0.019ｎｓ，グループＢ−Ｂは0.008ｎｓに削減される。これによりオーバーヘッド指標は、0.048＊4＋0.036＊7＋0.019＊4＋0.008＊6＝0.568となる。
【０１４４】
したがって、オーバヘッド指標は0.568／1.008＊100＝56.3％に削減されることが分かる。また、図３８では、各グループに挿入される挿入バッファの数が図示されており、従来手法及びグループＡ−Ａは５、グループＡ−Ｂは４、グループＢ−Ａは２、グループＢ−Ｂは１である。
【０１４５】
さらに、本実施の形態では、図３９に示すようにロジックを分割し、一部の処理を先行的に処理することにより、レイテンシも削減することができる。
【０１４６】
エラー検知は、適用回路中に分散されているエラー検出ＦＦのいずれか１つでもフェールすれば、その旨のアラート信号を出さねばならないため、各エラー検知信号の論理和を取らねばならない。従来手法では、２１パス全てのエラー検知を最大スラック0.048ｎｓのクロック位相差後に行うため、２１入力論理和を一気に処理しなければならなかった。この処理には、１００ｐｓ要していた。
【０１４７】
一方、本実施の形態では、挿入遅延量が各グループのクリティカルスラックとなるため、図３８に示すようにグループＡ−Ａの挿入遅延量は0.048ｎｓのまま変わらないが、グループＡ−Ｂは0.036ｎｓ，グループＢ−Ａは0.019ｎｓ，グループＢ−Ｂは0.008ｎｓになり、各タイミングでエラー検知がなされ、グループＢ−Ｂ，グループＢ−Ａ，グループＡ−Ｂの順で各論理和を先行的に処理することができる。仮にグループＡ−Ｂまでの論理和の処理がグループＡ−Ａのクロック位相差までに完了しているとすると、本実施の形態では、これらの伝搬信号とグループＡ−Ａに属する４パスの計５入力の論理和を処理するだけでよい。この処理に40ｐｓ要するとする。したがって、本実施の形態では、レイテンシも40／100＊100＝40.0%に削減されることが分かる。
【図面の簡単な説明】
【０１４８】
【図１】本発明の前提となる回路の回路図である。
【図２】本発明の前提となる回路のタイミングチャートである。
【図３】本発明の実施の形態１に係る誤動作判定回路の回路図である。
【図４】本発明の実施の形態１に係る誤動作判定回路の回路図である。
【図５】本発明の実施の形態１に係る誤動作判定回路を複数設けた場合の構成を示す回路図である。
【図６】本発明の実施の形態１に係る誤動作判定回路のタイミングチャートである。
【図７】本発明の実施の形態１に係る半導体装置のブロック図である。
【図８】本発明の実施の形態２に係る誤動作判定回路の前提となる回路図である。
【図９】クロック信号のクリップを説明するための概略図である。
【図１０】本発明の実施の形態２に係る誤動作判定回路の回路図である。
【図１１】本発明の実施の形態２に係る誤動作判定回路のタイミングチャートである。
【図１２】本発明の実施の形態３に係る誤動作判定回路の回路図である。
【図１３】本発明の実施の形態３に係る誤動作判定回路のタイミングチャートである。
【図１４】本発明の実施の形態４に係る誤動作判定回路の前提となる回路図である。
【図１５】本発明の実施の形態４に係る誤動作判定回路の回路図である。
【図１６】本発明の実施の形態４に係る誤動作判定回路のタイミングチャートである。
【図１７】メタステーブルを説明するための概略図である。
【図１８】本発明の実施の形態５に係る誤動作判定回路の回路図である。
【図１９】本発明の実施の形態５に係るメタスタビリティ検出回路の回路図である。
【図２０】本発明の実施の形態５に係る誤動作判定回路のタイミングチャートである。
【図２１】本発明の実施の形態６に係る誤動作判定回路の前提となる回路図である。
【図２２】スラック量とパス量との関係を示す図である。
【図２３】本発明の実施の形態６に係る誤動作判定回路の回路図である。
【図２４】本発明の実施の形態６に係る誤動作判定回路を複数設けた場合の構成を示す回路図である。
【図２５】本発明の実施の形態６に係る誤動作判定回路のタイミングチャートである。
【図２６】本発明の実施の形態６に係る誤動作判定回路のタイミングチャートである。
【図２７】本発明の実施の形態６に係る誤動作判定回路を複数設けた場合の別の構成を示す回路図である。
【図２８】本発明の実施の形態６に係る誤動作判定回路のタイミングチャートである。
【図２９】ホールド違反を説明するための図である。
【図３０】ホールド違反を説明するための図である。
【図３１】ホールド違反の対策を説明するための図である。
【図３２】本発明の実施の形態７に係る誤動作判定回路の回路図である。
【図３３】本発明の実施の形態７に係る誤動作判定回路の回路図である。
【図３４】ホールド違反が生じた誤動作判定回路のタイミングチャートである。
【図３５】本発明の実施の形態７に係る誤動作判定回路のタイミングチャートである。
【図３６】本発明の実施の形態８に係るアルゴリズムを説明するためのフローチャートである。
【図３７】本発明の実施の形態８に係るアルゴリズムによりグルーピングされた遅延パスを説明するための図である。
【図３８】本発明の実施の形態８に係るアルゴリズムの効果を説明するための模式図である。
【図３９】本発明の実施の形態８に係るアルゴリズムの効果を説明するための模式図である。
【符号の説明】
【０１４９】
１，３０  バッファ、２，２１，５０  選択回路、３，３１，５６  比較器、４，２０，２２，４２，４３  ＡＮＤ回路、５，６，７  ＭＵＸ、１０  デジタル回路、１１  クロック発生装置、１２  レギュレータ、１３  制御回路、１４  メモリ、４０，５１  ＯＲ回路、４１  微分回路、６０  遅延手段、５０  メタスタビリティ検出回路、５２，５４  ＰＭＯＳ、５３，５５  ＮＭＯＳ、５６  ＸＯＲ回路。
【図１】
0005107080.tif 000003
【図２】
0005107080.tif 000004
【図３】
0005107080.tif 000005
【図４】
0005107080.tif 000006
【図５】
0005107080.tif 000007
【図６】
0005107080.tif 000008
【図７】
0005107080.tif 000009
【図８】
0005107080.tif 000010
【図９】
0005107080.tif 000011
【図１０】
0005107080.tif 000012
【図１１】
0005107080.tif 000013
【図１２】
0005107080.tif 000014
【図１３】
0005107080.tif 000015
【図１４】
0005107080.tif 000016
【図１５】
0005107080.tif 000017
【図１６】
0005107080.tif 000018
【図１７】
0005107080.tif 000019
【図１８】
0005107080.tif 000020
【図１９】
0005107080.tif 000021
【図２０】
0005107080.tif 000022
【図２１】
0005107080.tif 000023
【図２２】
0005107080.tif 000024
【図２３】
0005107080.tif 000025
【図２４】
0005107080.tif 000026
【図２５】
0005107080.tif 000027
【図２６】
0005107080.tif 000028
【図２７】
0005107080.tif 000029
【図２８】
0005107080.tif 000030
【図２９】
0005107080.tif 000031
【図３０】
0005107080.tif 000032
【図３１】
0005107080.tif 000033
【図３２】
0005107080.tif 000034
【図３３】
0005107080.tif 000035
【図３４】
0005107080.tif 000036
【図３５】
0005107080.tif 000037
【図３６】
0005107080.tif 000038
【図３７】
0005107080.tif 000039
【図３８】
0005107080.tif 000040
【図３９】
0005107080.tif 000041