(57)【特許請求の範囲】
【請求項１】
メモリ（２、１１）に書き込まれてから読み出されるデータについて、Ｎ（Ｎは２以上の自然数）ビット以上の誤り検出及び（Ｎ−１）ビット以下の誤り訂正を行うＥＣＣ（Error Check and Correct）回路（３）と、
前記メモリより読み出され、前記ＥＣＣ回路により誤り訂正されたデータが格納される第１データバッファ（５）と、
前記メモリより読み出されたデータが直接格納される第２データバッファ（６）と、
前記第１及び第２データバッファにそれぞれ格納されたデータ値を比較する比較器（７）と、
この比較器の比較結果で双方のデータ値が１ビット以上（Ｎ−１）ビット以下異なり、且つ前記ＥＣＣ回路が誤り訂正を行うと、前記第１データバッファに格納されたデータ値を有効とし、
（１）前記比較器の比較結果で双方のデータ値が１ビット以上（Ｎ−１）ビット以下異なり、且つ前記ＥＣＣ回路が誤り訂正を行わないか、若しくは前記双方のデータ値が１ビット以上（Ｎ−１）ビット以下異ならないが前記ＥＣＣ回路が誤り訂正を行った場合と、（２）前記比較器の比較結果で双方のデータ値がＮビット以上異なる場合と、（３）前記ＥＣＣ回路が、誤り検出可能であるが誤り訂正不能であるビット数の誤りを検出した場合に、前記第１データバッファに格納されたデータ値を無効として、異常信号を出力するＥＣＣ監視回路（８，９）と
を備えることを特徴とするメモリ診断回路。
【請求項２】
前記ＥＣＣ回路は、前記第１データバッファに格納されたデータに誤りが無く、前記データについて誤り検出及び訂正を行うための誤り検出用データに１ビット以上（Ｎ−１）ビット以下の誤りがありその訂正を行った際には、前記誤り訂正の実行を前記ＥＣＣ監視回路に対してマスクするように構成されていることを特徴とする請求項１記載のメモリ診断回路。
【請求項３】
検出及び訂正対象データと、前記データについて誤り検出及び訂正を行うための誤り検出用データとの組み合わせが１ビット以上（Ｎ−１）ビット以下の誤りとなるように設定された第１チェックデータと、
前記組み合わせがＮビット以上の誤りとなるように設定された第２チェックデータとが予め記憶されているチェックデータ記憶領域（１２）を備え、
前記ＥＣＣ監視回路（８，９，１０）は、起動時に、ＣＰＵが前記チェックデータ記憶領域より前記第１及び第２チェックデータを読み出して、前記ＥＣＣ回路が所期通りに動作するか否かを確認するチェックシーケンスを実行する際に、機能が無効化されることを特徴とする請求項１又は２記載のメモリ診断回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリに書き込まれてから読み出されるデータについて、誤り検出及び誤り訂正処理を行うＥＣＣ回路を備えてなるメモリ診断回路に関する。
【背景技術】
【０００２】
例えばＤＲＡＭなどのメモリを使用する場合に、データの信頼性を向上させるためＥＣＣ（Error Check and Correct）回路を設けることが行われる。ＥＣＣ回路は、メモリから読み出したデータについて誤りを検出したり訂正する機能がある。しかし、ＥＣＣ回路自体に故障が発生する可能性も考慮すると、その対策が必要となる。例えば、特許文献１では、メモリ及びエラー検出回路を全て２重化し、２つのエラー検出回路の検出結果を比較することで、何れのメモリ側のデータを使用するかを選択して信頼性の向上を図ったマイクロコンピュータが開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００４−５６２７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１のように、全てを２重化する構成は冗長であり、システムのサイズが大型化してコストアップすることが避けられない。
本発明は上記事情に鑑みてなされたものであり、その目的は、より簡単な構成でＥＣＣ回路の故障を検出できるメモリ診断回路を提供することにある。
【課題を解決するための手段】
【０００５】
請求項１記載のメモリ診断回路によれば、ＥＣＣ回路は、メモリに書き込まれてから読み出されるデータについて、ｎビット以上の誤り検出及び（ｎ−１）ビット以下の誤り訂正を行う。第１データバッファには、メモリより読み出されてＥＣＣ回路により誤り訂正されたデータが（結果として誤り訂正されなかったデータも）格納され、第２データバッファには、メモリより読み出されたデータが直接格納される。そして、比較器は、第１及び第２データバッファにそれぞれ格納されたデータ値を比較する。
【０００６】
ＥＣＣ監視回路は、比較器の比較結果で双方のデータ値が（ｎ−１）ビット以下で異なり、且つＥＣＣ回路が誤り訂正を行えば、ＥＣＣ回路の動作は正常であるから第１データバッファに格納されたデータ値を有効とする。一方、以下の（１）〜（３）の場合は、ＥＣＣ回路の動作等に異常があるため、第１データバッファに格納されたデータ値を無効として異常信号を出力する。
【０００７】
（１）（ａ）比較器の比較結果で双方のデータ値が（ｎ−１）ビット以下で異なり、且つＥＣＣ回路が誤り訂正を行わない。この場合は、ＥＣＣ回路が誤り訂正を行うべきであるにも関わらず、訂正処理が行われなかったため異常と判断される。（ｂ）また、双方のデータ値が（ｎ−１）ビット以下異ならないがＥＣＣ回路が誤り訂正を行った。この場合は、ＥＣＣ回路が誤り訂正を行った結果として、双方のデータ値が一致したことになるので、異常と判断される。
【０００８】
（３）ＥＣＣ回路が誤り検出可能であるが誤り訂正不能であるビット数の誤りを検出する。この場合は当然に第１データバッファに格納されたデータは無効である。
このように、２つのデータバッファに格納されたデータ値を比較器により比較することで、ＥＣＣ回路の異常の有無を簡単に判別できる。
【０００９】
請求項２記載のメモリ診断回路によれば、ＥＣＣ回路は、第１データバッファに格納されたデータに誤りが無く、前記データについて誤り検出及び訂正を行うための誤り検出用データに（Ｎ−１）ビット以下の誤りがありその訂正を行った際には、前記誤り訂正の実行を前記ＥＣＣ監視回路に対してマスクする。すなわち、上記のケースでは、第１データバッファに格納されたデータは有効であるから、誤り訂正の実行をＥＣＣ監視回路に認識させずに、データを無効にすることを回避できる。
【図面の簡単な説明】
【００１０】
【図１】第１実施形態であり、メモリ診断回路の構成を示す機能ブロック図
【図２】第２実施形態を示すメモリ診断回路の構成を示す機能ブロック図であり、ＣＰＵが第２チェックデータを読み出した場合の各信号の状態を示す図
【図３】ＣＰＵが第１チェックデータを読み出した場合の各信号の状態を示す図
【図４】ＣＰＵが、ＥＣＣビットに誤りがある第１チェックデータを読み出した場合の各信号の状態を示す図
【発明を実施するための形態】
【００１１】
（第１実施形態）
図１に示すように、本実施形態のメモリ診断回路１は、メモリ２と図示しないＣＰＵとの間に配置されている。メモリ２は、例えばＤＲＡＭ，ＳＲＡＭ，ＥＥＰＲＯＭ，フラッシュＲＯＭなどである。メモリ診断回路１は、ＥＣＣ回路３を備えている。ＥＣＣ回路３は、ＣＰＵがメモリ２にライトアクセスを行うと、その書込みデータに基づいて複数のＥＣＣビット（誤り検出用データ）を生成して、書き込みデータと共にメモリ２に書き込む。また、ＥＣＣ回路３は、ＣＰＵがメモリ２にリードアクセスを行うと、メモリ２からデータと共にＥＣＣビットを読み出して、読み出しデータ及びＥＣＣビットについて所定の論理演算を行い、Ｎ（≧２）ビット以上の誤り検出（エラー）と、（Ｎ−１）ビット以下の誤り訂正とを行う。尚、以下では、Ｎ＝２として説明する。
【００１２】
エラー／訂正結果出力部４（ＥＣＣ回路）は、ＣＰＵがリードアクセスを行った際に読み出されたＥＣＣビットの値から、１ビットの誤り訂正、２ビット以上の誤り検出が行われたかを示す信号を出力する。また、ＣＰＵがメモリ２にリードアクセスを行うと、メモリ２から読み出されたデータ（検出及び訂正対象データ）は、上記のようにＥＣＣ回路３を介して読み出され、第１データバッファ５（ＢＵＦ１）に格納される。ＥＣＣ回路３が１ビットの誤りを検出した場合は、誤り訂正が行われたデータが第１データバッファ５に格納される。そしてＣＰＵは、一旦第１データバッファ５に格納されたデータを読み出す。
【００１３】
また、リードアクセスの際にメモリ２から読み出されたデータは同時に、ＥＣＣ回路３を介すことなく、第２データバッファ６（ＢＵＦ１）に直接格納されるようになっている。比較器（マグニチュードコンパレータ）７には、第１、第２データバッファ５、６に格納されたデータがそれぞれ入力されている。比較器７は、２つの入力データを比較して、１ビットの誤りがあれば、ハイレベルの信号をＥＸＯＲゲート８（ＥＣＣ監視回路）の一方の入力端子に出力する。また比較器７は、２ビット以上の誤りがあれば、ハイレベルの信号（エラー）を３入力ＯＲゲート９（ＥＣＣ監視回路）の入力端子の１つに出力する。
【００１４】
エラー／訂正結果出力部４は、ＥＣＣ回路３が１ビットの誤り訂正を行うと、ハイレベルの信号をＥＸＯＲゲート８の他方の入力端子に出力する。またエラー／訂正結果出力部４は、ＥＣＣ回路３が２ビット以上の誤り検出を行うと、ハイレベルの信号をＯＲゲート９の入力端子の他の１つに出力する。そして、ＯＲゲート９の入力端子の他の１つは、ＥＸＯＲゲート８の出力端子に接続されている。
【００１５】
ＯＲゲート９の出力端子は、ＡＮＤゲート１０の入力端子の一方に接続されている。ＡＮＤゲート１０の入力端子の他方には、ＣＰＵが図示しないレジスタに書き込みを行うことでＡＮＤゲート１０からの信号出力を制御する信号が与えられる。前記制御信号は、ＣＰＵ、メモリ診断回路１及びメモリ２を含むマイクロコンピュータが通常動作する際には、ハイレベル（Ｈ）に設定される。制御信号をローレベル（Ｌ）に設定するケース（機能チェック時）については、第２実施形態で述べる。ＡＮＤゲート１０の出力信号がハイレベルになると、ＥＣＣ回路３に異常があることを示す異常検出信号となるので、例えばマイクロコンピュータをリセットする信号（ＲＥＳＥＴ）としたり、上位の制御装置に対して異常検出を報知するための信号とする。
【００１６】
次に、本実施形態の作用について説明する。ＣＰＵがメモリ２にリードアクセスを行うと、読み出されたデータは前述のように、ＥＣＣ回路３による誤り訂正処理を経て第１データバッファ５に格納されると共に、第２データバッファ６に格納される。そして、比較器７が、各データバッファ５、６に格納されたデータを比較する。メモリ２から読み出したデータに誤りが無ければ、比較器７及びエラー／訂正結果出力部４が出力する各信号は何れもローレベルを示すので、ＡＮＤゲート１０の出力信号もローレベルのままである。尚、以下の「正常」、「異常」は、ＥＣＣ回路３の動作に関する評価である。
【００１７】
（Ａ）＜正常時：１ビット誤りを訂正＞
ＥＣＣ回路３が、メモリ２から読み出したデータに１ビットの誤りがあることを検出するとその誤りが訂正され、訂正されたデータが第１データバッファ５に格納される。その結果、第２データバッファ６に格納されたデータとは１ビットの相違が生じるので、比較器７は、ＥＸＯＲゲート８にハイレベルの信号を出力する。また、ＥＣＣ回路３が訂正処理を行ったので、エラー／訂正結果出力部４も、ＥＸＯＲゲート８にハイレベルの信号を出力する。したがって、ＥＸＯＲゲート８の出力信号はローレベルになる。
尚、ＣＰＵが実行するリードアクセスのタイミングに応じて、正常動作時のＥＸＯＲゲート８の出力信号をマスクする期間が必要であれば、そのためのロジックを、ＥＸＯＲゲート８とＯＲゲート９との間に適宜追加すれば良い。
【００１８】
（Ｂ）＜異常時：訂正なしで１ビットの相違発生＞
一方、データバッファ５、６に格納されたデータに１ビットの相違があり、比較器７がＥＸＯＲゲート８にハイレベルの信号を出力しているが、ＥＣＣ回路３が訂正処理を行っていなければエラー／訂正結果出力部４はローレベルの信号を出力する。したがって、ＥＸＯＲゲート８の出力信号はハイレベルになり、ＯＲゲート９を介してＡＮＤゲート１０の出力信号がハイレベルになり、故障が検出される。
【００１９】
この場合、第２データバッファ６に格納されたデータの値が、ＥＣＣ回路３がメモリ２から読み出したデータの値と相違している可能性が高いが、ＥＣＣ回路３が故障している可能性もある。これにより、ＣＰＵが正しさの保障がない第１データバッファ５のデータを読み出して使用することは回避される。
【００２０】
（Ｃ）＜異常時：訂正ありで１ビットの相違なし＞
（Ｂ）のケースとは逆に、比較器７がＥＸＯＲゲート８にローレベルの信号を出力しているがＥＣＣ回路３が訂正処理を行うと、やはりＥＸＯＲゲート８の出力信号がハイレベルになるので、ＡＮＤゲート１０の出力信号がハイレベルになり、故障が検出される。この場合は、データバッファ５、６に格納されたデータに１ビットの相違があったが、ＥＣＣ回路３が訂正処理を行った結果、双方のデータが一致したことが想定される。
【００２１】
また、ＥＣＣ回路３は、ＣＰＵの読み出しデータに誤りが無く、対応するＥＣＣビットに１ビット誤りが発生した場合にも同様に誤り訂正を行うため、ケース（Ｃ）と同様の状態になる。しかしこの場合、第１データバッファ５に格納されたデータは有効とする必要がある。１ビット誤りが発生したのが、読み出しデータ、ＥＣＣビットの何れであるかは、ＥＣＣビットを参照すれば判別可能である。
【００２２】
例えばＥＣＣビットから３ビットのステータスビットを生成し、それらを以下のように定義して、エラー／訂正結果出力部４に与える。
第１ビット：２ビット以上の誤り→「エラー」出力
第２ビット：１ビットのデータ誤り→「訂正」出力
第３ビット：１ビットのＥＣＣビット誤り→「訂正」出力せず
エラー／訂正結果出力部４は、上記のステータスビットを参照してエラー／訂正の何れを出力するか決定する。（Ｃ）のケースでは第３ビットが立つので、ＥＸＯＲゲート８に出力する信号をローレベルのままとする。
【００２３】
（Ｄ）＜正常時：２ビット以上の誤りを検出＞
ＥＣＣ回路３が、メモリ２から読み出したデータに２ビットの誤りがあることを検出すると、エラー／訂正結果出力部４は、ＯＲゲート９にハイレベルの信号（エラー）を出力する。したがって、ＡＮＤゲート１０の出力信号がハイレベルになり、故障が検出される。この場合も、ＣＰＵが第１データバッファ５のデータを読み出して使用することは回避される。
【００２４】
（Ｅ）＜異常時：双方のデータに２ビット以上の相違＞
データバッファ５、６に格納されたデータに２ビットの相違があると、比較器７はＯＲゲート９にハイレベルの信号を出力する。したがって、ＡＮＤゲート１０の出力信号がハイレベルになり、故障が検出される。この場合も、（Ｂ）のケースと同様に、第２データバッファ６に格納されたデータの値と、ＥＣＣ回路３がメモリ２から読み出したデータの値とが相違しているか、ＥＣＣ回路３が故障している可能性がある。
【００２５】
以上のように本実施形態によれば、メモリ診断回路１において、ＥＣＣ回路３は、メモリ２に書き込まれてから読み出されるデータについて、２ビット以上の誤り検出及び１ビットの誤り訂正を行う。第１データバッファ５には、メモリ２より読み出されてＥＣＣ回路３により誤り訂正されたデータが格納され、第２データバッファ６には、メモリ２より読み出されたデータが直接格納される。そして、比較器７は、第１及び第２データバッファ５及び６にそれぞれ格納されたデータ値を比較する。
【００２６】
ＥＸＯＲゲート８及びＯＲゲート９で構成されるＥＣＣ監視回路は、比較器７の比較結果で双方のデータ値が１ビット異なり、且つＥＣＣ回路３が誤り訂正を行えば、第１データバッファ５に格納されたデータ値を有効とし、上述した異常時のケース（Ｂ）（Ｃ）（Ｅ）及び正常時のケース（Ｄ）については、第１データバッファ５に格納されたデータ値を無効とする。したがって、ＥＣＣ回路３の異常の有無を簡単に判別できる。
【００２７】
また、エラー／訂正結果出力部４は、第１データバッファ５に格納されたデータに誤りが無く、前記データに対応するＥＣＣビットに１ビットの誤りがありその訂正を行った際には、ＥＸＯＲゲート８に「訂正」信号を出力せずにマスクする。したがって、第１データバッファ５に格納された誤りが無いデータを、無効にすることを回避できる。加えて、そのための外部ロジック構成が簡単になる。
【００２８】
ここで、エラー／訂正結果出力部４が前述のステータスビットをレジスタ等に格納して保持しておき、診断後に、上位の制御装置等が保持されているステータスビットを読み出すことで、「エラー」，「訂正」の何れが発生したかの判別が可能となる。また、誤りビット数が幾つで「エラー」又は「訂正」が発生したかの判別も可能となる。
【００２９】
したがって、例えば「Ｎ」の値が比較的大きい場合に、外部の制御装置等が、ＥＣＣ回路３が誤り訂正を実施した結果として正常に動作している状態を、「エラー」が発生する以前に認識できる。これにより、「故障」に至る前の正常動作の段階での誤りの発生をアラームとして、例えばメモリ２の交換などの処置を事前に実施できる。
更に、ステータスビットから誤りビット数を比較することで、不良解析を容易に行うことができる。加えて、エラー／訂正結果出力部４が、ＥＣＣ回路３が訂正したビット位置についても保持しておくことで、より詳細な不良解析を行うことが可能になる。
【００３０】
（第２実施形態）
以下、第１実施形態と同一部分については同一符号を付して説明を省略し、異なる部分について説明する。図２に示すように、第２実施形態では、メモリ２に替わるメモリ１１にチェックデータ記憶領域１２が設けられている。チェックデータ記憶領域１２には、予め第１、第２チェックデータが格納されている。これらの第１、第２チェックデータは、メモリ診断回路１を含むシステムが起動された際に、ＥＣＣ回路３の機能が正常か否かを確認するためのチェックシーケンスを実行する際に使用される。
【００３１】
第１チェックデータは、読み出しデータとＥＣＣビットとが１ビット誤りを示す組み合わせに設定されているもので、第２チェックデータは、双方が２ビット以上の誤りを示す組み合わせに設定されている。またこの場合、ＣＰＵはＡＮＤゲート１０（ＥＣＣ監視回路）の入力端子の一方をローレベルにして、リセット信号が出力されることを阻止する。
【００３２】
図２に示すように、ＣＰＵが第２チェックデータを読み出すと、第１、第２データバッファ５，６に格納されたデータは一致するが、ＥＣＣ回路３が正常であれば、エラー／訂正結果出力部４は「エラー」を出力する。したがって、ＯＲゲート９の出力信号はハイレベルになる。
【００３３】
図３に示すように、ＣＰＵが第１チェックデータを読み出すと、ＥＣＣ回路３が正常であれば１ビット誤りを検出して訂正するので、エラー／訂正結果出力部４は「訂正」を出力する。また、比較器７は１ビットの相違を検出する。したがって、ＯＲゲート９の出力信号はローレベルになる。
【００３４】
また、図４に示すように、ＣＰＵがＥＣＣビットに１ビット誤りがあるように設定された第１チェックデータを読み出すと、ＥＣＣ回路３が正常であればその１ビット誤りを訂正するので、第１、第２データバッファ５，６に格納されたデータは一致する。この場合、第１実施形態で説明したように、エラー／訂正結果出力部４は「訂正」を出力せずにマスクする。したがって、図３に示すケースと同様に、ＯＲゲート９の出力信号はローレベルになる。
これらのように、各ケースについて各信号の出力状態を確認すれば、ＥＣＣ回路３の機能が正常か否かを確認できる。
【００３５】
以上のように第２実施形態によれば、メモリ１１に、第１及び第２チェックデータが予め記憶されているチェックデータ記憶領域１２を備え、起動時に、ＣＰＵがチェックデータ記憶領域１２より第１及び第２チェックデータを読み出して、ＥＣＣ回路３が所期通りに動作するか否かを確認するチェックシーケンスを実行する際に、ＡＮＤゲート１０の入力端子の一方にローレベル信号を与えてメモリ診断回路１の機能を無効化する。したがって、外部にリセット信号を出力することなく、ＥＣＣ回路３の機能が正常か否かを確認できる。
【００３６】
本発明は上記した、又は図面に記載した実施形態にのみ限定されるものではなく、以下のような変形又は拡張が可能である。
ＥＣＣビットのみに１ビット誤りが発生するケースを無視して問題なければ、（Ｃ）で異常として扱っても良い。
エラー／訂正結果出力部４の機能を、ＥＣＣ回路３に内蔵しても良い。
Ｎを「３」以上としても良い。
ＡＮＤゲート１０の出力信号をリセット信号とせず、例えばＣＰＵに割り込みを発生させて、以降の処理をＣＰＵに任せても良い（例えば、前記割り込みが複数回発生すると、リセットを発行する等）。
【符号の説明】
【００３７】
図面中、１はメモリ診断回路、２はメモリ、３はＥＣＣ回路、４はエラー／訂正結果出力部（ＥＣＣ回路）、５は第１データバッファ、６は第２データバッファ、７は比較器、８はＥＸＯＲゲート（ＥＣＣ監視回路）、９はＯＲゲート（ＥＣＣ監視回路）、１０はＡＮＤゲート（ＥＣＣ監視回路）を示す。
【図１】
0006332134.tif 000002
【図２】
0006332134.tif 000003
【図３】
0006332134.tif 000004
【図４】
0006332134.tif 000005