(57)【要約】【課題】  メモリとの接続故障の誤り訂正，検出方法が必要になってきた。【解決手段】  プロセッサと、メモリ制御装置と、メモリ装置とを備えたコントローラにおいて、アドレスに対して任意のデータをライトアクセスするとき、アドレスと任意のデータから決定される誤り検出符号ＣＲＣと、誤り検出符号ＣＲＣと任意のデータから決定される誤り訂正符合ＥＣＣを生成し、任意のデータと伴に誤り検出符号ＣＲＣと誤り訂正符号ＥＣＣをメモリ装置に書き込み、プロセッサが任意のアドレスに対してリードアクセスするとき、メモリ装置に書き込まれている誤り訂正符号ＥＣＣと、誤り検出符号ＣＲＣとデータを読み出し、読み出した誤り訂正符号ＥＣＣに基づき読み出した誤り検出符号ＣＲＣと読み出したデータの誤りを訂正し、訂正された誤り検出符号ＣＲＣと読み出したデータに誤りが有るか検出する。【選択図】図１
2010086120.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと、メモリ制御装置と、メモリ装置とを備えたコントローラにおいて、
前記プロセッサが任意のアドレスに対して任意のデータをライトアクセスするとき、前記メモリ制御装置は、該アドレスと該任意のデータから決定される誤り検出符号ＣＲＣと、該誤り検出符号ＣＲＣと前記任意のデータから決定される誤り訂正符合ＥＣＣを生成し、前記任意のデータと伴に誤り検出符号ＣＲＣと誤り訂正符号ＥＣＣを前記メモリ装置に書き込み、
前記プロセッサが任意のアドレスに対してリードアクセスするとき、前記メモリ制御装置は、前記メモリ装置に書き込まれている誤り訂正符号ＥＣＣと、誤り検出符号ＣＲＣとデータを読み出し、該読み出した誤り訂正符号ＥＣＣに基づき該読み出した誤り検出符号ＣＲＣと該読み出したデータの誤りを訂正し、訂正された誤り検出符号ＣＲＣと読み出したデータに誤りがありかどうかを検出することを特徴とするコントローラ。
【請求項２】
請求項１のコントローラにおいて、
前記誤り検出符号ＣＲＣのビット数が、前記誤り訂正符号ＥＣＣで検出可能な誤り検出ビット数より大きいことを特徴とするコントローラ。
【請求項３】
請求項１のコントローラにおいて、
前記メモリ装置は複数のグループ化された信号線で前記メモリ制御装置と接続されており、前記誤り検出符号ＣＲＣのビット数が、該グループ化された信号線数より多いことを特徴とするコントローラ。
【請求項４】
プロセッサと、メモリ制御装置と、メモリ装置とを備えて、メモリの誤りを検出するメモリ誤り検出方法において、
前記プロセッサが任意のアドレスに対して任意のデータをライトアクセスするとき、前記メモリ制御装置は、該アドレスと該任意のデータから決定される誤り検出符号ＣＲＣと、該誤り検出符号ＣＲＣと前記任意のデータから決定される誤り訂正符合ＥＣＣを生成し、前記任意のデータと伴に誤り検出符号ＣＲＣと誤り訂正符号ＥＣＣを前記メモリ装置に書き込み、
前記プロセッサが任意のアドレスに対してリードアクセスするとき、前記メモリ制御装置は、前記メモリ装置に書き込まれている誤り訂正符号ＥＣＣと、誤り検出符号ＣＲＣとデータを読み出し、該読み出した誤り訂正符号ＥＣＣに基づき該読み出した誤り検出符号ＣＲＣと該読み出したデータの誤りを検出することを特徴とするメモリ誤り検出方法。
【請求項５】
請求項４のメモリ誤り検出方法において、
前記誤り検出符号ＣＲＣのビット数が、前記誤り訂正符号ＥＣＣで検出可能な誤り検出ビット数より大きいことを特徴とするメモリ誤り検出方法。
【請求項６】
請求項４のメモリ誤り検出方法において、
前記メモリ装置は複数のグループ化された信号線で前記メモリ制御装置と接続されており、前記誤り検出符号ＣＲＣのビット数が、該グループ化された信号線数より多いことを特徴とするメモリ誤り検出方法。
【請求項７】
プロセッサと、メモリ制御装置と、メモリ装置とを備えて、メモリの誤りを訂正するメモリ誤り訂正方法において、
前記プロセッサが任意のアドレスに対して任意のデータをライトアクセスするとき、前記メモリ制御装置は、該アドレスと該任意のデータから決定される誤り検出符号ＣＲＣと、該誤り検出符号ＣＲＣと前記任意のデータから決定される誤り訂正符合ＥＣＣを生成し、前記任意のデータと伴に誤り検出符号ＣＲＣと誤り訂正符号ＥＣＣを前記メモリ装置に書き込み、
前記プロセッサが任意のアドレスに対してリードアクセスするとき、前記メモリ制御装置は、前記メモリ装置に書き込まれている誤り訂正符号ＥＣＣと、誤り検出符号ＣＲＣとデータを読み出し、該読み出した誤り訂正符号ＥＣＣに基づき該読み出した誤り検出符号ＣＲＣと該読み出したデータの誤りを訂正することを特徴とするメモリ誤り訂正方法。
【請求項８】
請求項７のメモリ誤り訂正方法において、
前記誤り検出符号ＣＲＣのビット数が、前記誤り訂正符号ＥＣＣで検出可能な誤り検出ビット数より大きいことを特徴とするメモリ誤り訂正方法。
【請求項９】
請求項７のメモリ誤り訂正方法において、
前記メモリ装置は複数のグループ化された信号線で前記メモリ制御装置と接続されており、前記誤り検出符号ＣＲＣのビット数が、該グループ化された信号線数より多いことを特徴とするメモリ誤り訂正方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、高速で大容量のメモリ素子を用いたシステムにおいて、システムの故障や停止が重大な結果を招く可能性のあるミッションクリティカルなシステムで用いるメモリの誤り訂正方法，誤り検出方法及びそれを用いたコントローラに関する。
【背景技術】
【０００２】
高速化，大容量化が進メモリ素子は、計算機システムに多く用いられ、さまざまな分野で利用されている。その中には、数秒のシステム停止が大損害につながるものや、その故障が重大な事故につながる可能性のあるいわゆるミッションクリティカルなシステムに使われる場合がある。そのようなミッションクリティカルなシステムでは、できるだけシステムを停止させないように可用性を高めることと、異常を即座に検出し、その異常を他に波及させないようにする安全性，信頼性が重要である。前者の可用性を高める方式としては、多数決を行う多重系システムや、誤り訂正符号を用い、誤りを常に訂正するシステムが知られている。後者の安全性，信頼性を高める方式としては、２重化したシステムの出力を常に照合する方式や、誤り検出符号を用いて誤りを検出し、誤ったデータの出力を抑止するシステムが知られている。
【０００３】
この中でメモリシステムの可用性と信頼性の高性能化の方法について見てみると、高可用化手法としてはＥＣＣ（Error Correction Code）が有名で、記憶データに数ビットのチェックビットを追加することで１ビットのエラー訂正と、２ビットのエラー検出を行うことができる。高信頼化手法としては、通信などの分野で大量のデータ列に対して誤りがないことを検出する方式として用いられる、誤り検出符号ＣＲＣ（Cyclic Redundancy Check）が有名である。データ列にチェックビットを追加することで、数ビットのエラーがないことを判定することが出来る。よく知られているパリティチェックもＣＲＣの一種である。
【０００４】
他に、ＲＯＭ（Read Only Memory）などの性能的にクリティカルでない用途では、同じ内容のデータをＲＯＭの別の領域、あるいは別のチップに複数格納し、内容を照合して使用するような誤り検出方法も用いられる。
【０００５】
他に、ＣＤ（Compact Disc）やハードディスクなどで用いられているブロック符号化法を用いれば、連続した複数ビットのエラーを訂正，検出することが可能である。
【０００６】
例えば、〔特許文献１〕に示されたディスクシステムに用いるキャッシュメモリでは、データの完全性（間違いが無いこと）を保証するために、ＣＲＣを付加したデータ列をＥＣＣで誤り訂正を行うメモリに格納する構成が示されている。このようにすることで高い信頼性を保ちつつ、メモリ素子の１ビット故障にも耐える可用性を高めている。
【０００７】
また、〔特許文献２〕に示されたデータ処理回路では、マトリックス状のパリティを用いた誤り訂正機能と、データ列に対するＣＲＣを用いて同様に高信頼性と高可用性を向上させる構成が示されている。
【０００８】
【特許文献１】特開２００２−２３９６６号公報
【特許文献２】特開２０００−５９２３５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
計算機システムのメモリ装置を構築する最も一般的な信頼性と可用性を向上させる方式は、誤り訂正符号ＥＣＣを用い、１ビットの誤りを訂正し、２ビットの誤りを訂正する方式である。１個のメモリセルの故障率は非常に小さく、それが２個である確率はその二乗であるから、ほとんどないと考えてよい。２個のメモリセルの故障は検出することが可能であり、３個以上はその確率は更に低いと考えられる。前述の〔特許文献１〕と〔特許文献２〕に記載されたシステムでは、さらに、データ列としての完全性（間違いがないこと）を確保するためにＣＲＣをデータ列に付加し、メモリに格納する時はＥＣＣの誤り訂正機能の付いたメモリを用いている。
【００１０】
さて、このように従来のメモリシステムにおいては高信頼，高可用性の向上が重要な課題であるが、一般的な要求として高速化も重要な課題の一つである。近年のメモリデバイスではクロックに同期したデータ転送はもちろん、クロックの立ち上がり、立ち下がりの両エッジを用いたものなど高速化が著しく進んできている。その転送時間は１ｎｓ（１０の９乗分の１秒）を下回るところまできており、アナログレベルのボードシミュレーションを行わないと正しく動作しないレベルになっている。さらに、メモリデバイスの製造プロセスの微細化に伴い与える信号電圧は１Ｖ（ボルト）程度まで下がってきており、非常に少ないマージンの中で動作しなければならなくなってきている。高信頼化手法の一つに、緩和された条件で動作させるディレーティングといったものがあるが、最近のメモリデバイスはＰＬＬ（フェーズロックループ）を用いているため、高い周波数でしか動作しないようにできており、容易には適用できなくなってきた。
【００１１】
このような高速化，低電圧化が進むメモリデバイスを前提に高信頼で、高可用性のあるシステムを構築しようとするとき、これまでメモリデバイス内部のメモリセルの故障のみを故障仮定としていただけでは不十分で、メモリとメモリを制御するメモリコントローラ間の接続信号までの故障を故障仮定する必要が出てくる。即ち、メモリデバイスの信号であるアドレス線，データ線，アドレスストローブ線，クロック線，データストローブ線，リードライト制御線の何れが一時的に、または永久的に、断線、あるいは短絡しても、即時にデータを訂正するか、誤りであることを検出することが必要となる。
【００１２】
この中で特にデータ線とデータストローブ線はクロックの立ち上がりと立ち下がりの両エッジを用いるため、他に比べ半分の動作時間で厳しいタイミングとなっている。そのデータストローブ線は数本のデータ線（通常４本か８本）ごとに用意され、データストローブグループを構築している。即ち、このデータストローブ信号がうまく伝送されなければ、例えば、一度に８ビットのデータが書き込まれなかったり、変なデータが書き込まれたりすることになる。このようなケースを含めて正しく誤りを訂正するか、検出できることが課題となってきた。そして、これを実現する回路は高速な転送性能に耐えられるだけの簡易なものでなければならない。
【００１３】
本発明はメモリに書き込むアドレスとデータが正しくメモリに格納されていない問題を解決するメモリの誤り訂正，誤り検出方法、及びそれを用いた制御装置を提供することにある。
【課題を解決するための手段】
【００１４】
上記課題を達成するために、本発明はプロセッサと、メモリ制御装置と、メモリ装置とを備えたコントローラにおいて、前記プロセッサが任意のアドレスに対して任意のデータをライトアクセスするとき、前記メモリ制御装置は、該アドレスと該任意のデータから決定される誤り検出符号ＣＲＣと、該誤り検出符号ＣＲＣと前記任意のデータから決定される誤り訂正符合ＥＣＣを生成し、前記任意のデータと伴に誤り検出符号ＣＲＣと誤り訂正符号ＥＣＣを前記メモリ装置に書き込み、前記プロセッサが任意のアドレスに対してリードアクセスするとき、前記メモリ制御装置は、前記メモリ装置に書き込まれている誤り訂正符号ＥＣＣと、誤り検出符号ＣＲＣとデータを読み出し、該読み出した誤り訂正符号ＥＣＣに基づき該読み出した誤り検出符号ＣＲＣと該読み出したデータの誤りを訂正し、訂正された誤り検出符号ＣＲＣと読み出したデータに誤りがありかどうかを検出することを特徴とするものである。
【００１５】
更に、本発明のコントローラは、前記誤り検出符号ＣＲＣのビット数が、前記誤り訂正符号ＥＣＣで検出可能な誤り検出ビット数より大きいことを特徴とするものである。
【００１６】
更に、本発明のコントローラは、前記メモリ装置は複数のグループ化された信号線で前記メモリ制御装置と接続されており、前記誤り検出符号ＣＲＣのビット数が、該グループ化された信号線数より多いことを特徴とするものである。
【００１７】
また、上記課題を達成するために、本発明はプロセッサと、メモリ制御装置と、メモリ装置とを備えて、メモリの誤りを検出するメモリ誤り検出方法において、前記プロセッサが任意のアドレスに対して任意のデータをライトアクセスするとき、前記メモリ制御装置は、該アドレスと該任意のデータから決定される誤り検出符号ＣＲＣと、該誤り検出符号ＣＲＣと前記任意のデータから決定される誤り訂正符合ＥＣＣを生成し、前記任意のデータと伴に誤り検出符号ＣＲＣと誤り訂正符号ＥＣＣを前記メモリ装置に書き込み、前記プロセッサが任意のアドレスに対してリードアクセスするとき、前記メモリ制御装置は、前記メモリ装置に書き込まれている誤り訂正符号ＥＣＣと、誤り検出符号ＣＲＣとデータを読み出し、該読み出した誤り訂正符号ＥＣＣに基づき該読み出した誤り検出符号ＣＲＣと該読み出したデータの誤りを検出することを特徴とするものである。
【００１８】
更に、本発明のメモリ誤り検出方法において、前記誤り検出符号ＣＲＣのビット数が、前記誤り訂正符号ＥＣＣで検出可能な誤り検出ビット数より大きいことを特徴とするものである。
【００１９】
更に、本発明のメモリ誤り検出方法において、前記メモリ装置は複数のグループ化された信号線で前記メモリ制御装置と接続されており、前記誤り検出符号ＣＲＣのビット数が、該グループ化された信号線数より多いことを特徴とするものである。
【００２０】
また、上記課題を達成するために、本発明はプロセッサと、メモリ制御装置と、メモリ装置とを備えて、メモリの誤りを訂正するメモリ誤り訂正方法において、前記プロセッサが任意のアドレスに対して任意のデータをライトアクセスするとき、前記メモリ制御装置は、該アドレスと該任意のデータから決定される誤り検出符号ＣＲＣと、該誤り検出符号ＣＲＣと前記任意のデータから決定される誤り訂正符合ＥＣＣを生成し、前記任意のデータと伴に誤り検出符号ＣＲＣと誤り訂正符号ＥＣＣを前記メモリ装置に書き込み、前記プロセッサが任意のアドレスに対してリードアクセスするとき、前記メモリ制御装置は、前記メモリ装置に書き込まれている誤り訂正符号ＥＣＣと、誤り検出符号ＣＲＣとデータを読み出し、該読み出した誤り訂正符号ＥＣＣに基づき該読み出した誤り検出符号ＣＲＣと該読み出したデータの誤りを訂正することを特徴とするものである。
【００２１】
更に、本発明のメモリ誤り訂正方法において、前記誤り検出符号ＣＲＣのビット数が、前記誤り訂正符号ＥＣＣで検出可能な誤り検出ビット数より大きいことを特徴とするものである。
【００２２】
更に、本発明のメモリ誤り訂正方法において、前記メモリ装置は複数のグループ化された信号線で前記メモリ制御装置と接続されており、前記誤り検出符号ＣＲＣのビット数が、該グループ化された信号線数より多いことを特徴とするものである。
【００２３】
ここで、エラーを完全に検出できるようにするためＣＲＣのビット数はデータストローブグループを構成するビット数以上にすることが望ましい。
【発明の効果】
【００２４】
本発明は、上記メモリに書き込むデータと伴に、そのアドレスとデータから生成した誤り検出符号ＣＲＣをメモリに書き込むことで、アドレス線，データ線，アドレスストローブ線，データストローブ線，リードライト制御線などの異常を、即ち前記メモリに書き込むアドレスとデータが正しくメモリに格納されていないこと、あるいは、正しく読み出せなかったことを判定できる。特に、ＣＲＣのビット数をデータストローブグループを構成するビット数以上にすることで、アドレスストローブ信号の異常を確実に検出することが可能となる。
【００２５】
更に、この書き込むデータとＣＲＣに対してＥＣＣを付加したことで１ビットのメモリセルエラー、１本のデータ線の異常を訂正することができるため、可用性を向上することが出来る。
【００２６】
また、このメモリ制御装置を、ＣＲＣ，ＥＣＣといった簡単な回路を用いて構築できるので高速なメモリデバイスを用いることが可能となる。
【発明を実施するための最良の形態】
【００２７】
本発明の実施形態を以下図面を用いて説明する。
【実施例１】
【００２８】
以下、本発明を実施するための最良の一実施形態を図１から図７を用いて説明する。
【００２９】
図１は、本発明におけるメモリシステムを用いた高信頼コントローラ６の構成を示している。高信頼コントローラ６はメモリ１，メモリコントローラ２，プロセッサ４から構成され、メモリコントローラ２とメモリ１とは信号線群３で接続している。また、メモリコントローラ２とプロセッサ４は信号線群５で接続している。
【００３０】
プロセッサ４はプロセッサ４内部にあるプログラム（記載せず）あるいは、それにより生成するメモリ１上のプログラムに従って動作する。一般には高信頼コントローラ６の外部からのセンサなどデータを入力し、プログラムに基づいて演算処理し、結果をアクチュエータなどに出力してシステムを制御する。このとき、プロセッサ４は、信号線群５を用い必要に応じてメモリコントローラ２に対してデータのライト，リードを行う。一般的なプロセッサでは、図１に示すように、クロック（ＣＬＫ），アドレス及びデータ（ＡＤ），転送開始（ＢＳ），リードライト制御（ＲＷ），レディ（ＲＤＹ），エラー（ＥＲＲ）などの信号線が用いられる。
【００３１】
メモリコントローラ２は、プロセッサ４からのメモリアクセス要求に対して実際のメモリ１にアクセスする装置であり、信号線群５のアクセス要求内容をメモリ１の信号線群３に変換する処理を行う。メモリ１は具体的にはクロック同期式のダイナミックメモリを複数個使用しており、信号線群３にはクロック（ＣＬＫ），アドレス（Ａ），ローアドレスストローブ（ＲＡＳ），カラムアドレスストローブ（ＣＡＳ），ライトリード制御（ＷＥ），データマスク（ＤＭ），データストローブ（ＤＱＳ），データ（ＤＱ）などがある。これらは、一般的なダブルデータレート式の同期式ダイナミックメモリの信号線群であるが、特に、データマスク，データストローブはデータをバイト単位に制御できるようになっている。即ち、データが４８ビットの場合、データマスクとデータストローブはそれぞれ６本の信号で構成される。
【００３２】
次にメモリ１は、一般的なダブルデータレート式の同期式ダイナミックメモリで構築できるメモリであるが、ここではＮ個のデータがアドレスＡの指定でアクセスできるように構成する。メモリ１には、ＮｅビットのＥＣＣとＮｃビットのＣＲＣ、Ｎｄビットのアクセスデータを格納する。アクセスデータは、プロセッサ４やメモリコントローラ２のアクセス単位、あるいはその倍数が望ましく、ここでは４バイト（３２ビット）を想定している。その場合、Ｎｄは３２となる。Ｎｃはアドレスとデータから生成するＣＲＣのビット数であるが、適用する誤り検出能力でそのビット数を決めることになる。ここでは、アドレスとデータを合わせて６４ビット以下に対してハミング距離が出来るだけ大きくする設定をすればよい。また、一般的に知られているように、ＮｃビットのＣＲＣを用いればＮｃビットまでのバーストエラー、即ち連続したエラーを検出する能力が保証される。ここでは、データストローブ，データマスクでデータがバーストエラーになる可能性があるため、Ｎｃを８以上とする。ＮｅはＥＣＣのビット数であり、ＥＣＣを一般的な１ビット誤り訂正、２ビット誤り検出を出来るものとすると、Ｎｅは７とすることができる（Ｎｄ＋Ｎｃは４０＋αで、エラービットを特定するシンドロームに０〜６３を指定できる６ビットと２ビットエラー検出のためにパリティ１ビットを追加）。一般に、メモリデバイスは８ビットの倍数で出来ており、メモリ１のデータ幅を８ビットの倍数にするには、Ｎｄを３２、Ｎｅを７とすると、Ｎｃは大きいほど誤り検出能力が高いので９とする。
【００３３】
図２には、メモリコントローラ２とメモリ１との接続関係をより具体的に示す。メモリ１は１６ビットのデータ幅のメモリデバイス１１，１２，１３から構成され、クロックは差動で正反２本の信号線をメモリデバイス個別に接続している。このクロックは１２５ＭＨｚ以上必要であり、現在５００ＭＨｚと年々高速化されている。このクロックに同期して与える信号が、アドレス（Ａ），ローアドレスストローブ（ＲＡＳ），カラムアドレスストローブ（ＣＡＳ），ライトリード制御信号（ＷＥ）で比較的タイミングが厳しくないため、メモリデバイスに同じ信号線で接続する。８ビット単位にメモリコントローラと１対１に接続するデータマスク（ＤＭＵ，ＤＭＬ），データストローブ（ＤＱＳＵ，ＤＱＳＬ），データ（ＤＱ）は、クロックの立ち上がり，立ち下がりを使用し周波数が２倍となるためクリティカルパスである。特にデータストローブ，データは双方向の信号でもあり、さらに厳しい信号といえる。
【００３４】
このメモリインタフェースは一般的なダブルデータレートの同期式ダイナミックメモリと同じであるが、その厳しさを説明するため図３，図４にタイムチャートを示す。
【００３５】
まず、図３はメモリへのデータライトを行うタイミングを示している。最も重要なクロックは差動信号で与える（ＣＬＫＰとＣＬＫＮ）。以下アドレスＡ，ローアドレスストローブＲＡＳ，カラムアドレスストローブＣＡＳ，ライトリード制御信号ＷＥはクロック（ＣＬＫＰ）の立ち上がりでラッチされる。時間Ｔ１でアドレスＡにローアドレスをメモリ内部にセット、時間Ｔ３でアドレスＡにカラムアドレスを内部にセット、同時にライトアクセスであることを指定している。ここで、ローアドレスストローブＲＡＳ，カラムアドレスストローブＣＡＳ，ライトリード制御信号ＷＥはローアクティブの信号であり、ローレベルで所定の動作を意味する信号となっている。メモリは時間Ｔ３で指定されたローアドレスとカラムアドレスで指定されたメモリエリアにライトアクセスが行われることが判る。そして、ライトデータ受け取った後該メモリエリアにライトデータを書き込むことになる。この時、ライトデータはデータストローブＤＱＳＬをクロックとしてデータＤＱ及び、データマスクＤＭＬで与えられる。データストローブはクロックと同じ周波数であるが位相は一致していない信号で、データ，データマスクの有効なタイミングで立ち上がり、または、立ち下がりエッジがくる信号である。通常は、データ及びデータストローブはハイインピーダンス状態になっており、時間Ｔ３でライト動作を指定した後オンバスする。データマスクはハイレベルの時、該当するデータをメモリに書き込まないようにする信号である。図３には、データを８ビット，データマスクとデータストローブをそれぞれ１本分示したが、図２に示した回路では、これらが６セット存在する。このように８ビットのデータ単位でグループ化することで、データと、データマスク，データストローブの配線遅延を最小限に抑えることができ、高速にデータ転送できるようにしている。
【００３６】
図４はリードを行う場合のタイミングである。アドレスとローアドレスストローブ，カラムアドレスストローブ，ライトリード制御信号の与え方はライト動作と同じであるが、リードしたデータの出力タイミングは少し異なっている。即ち、ライト動作の時は、データまたは、ライトマスクの中央にデータストローブの立ち上がりまたは、立ち下がりエッジがくるようにしたが、リードの場合にはメモリは、データストローブの立ち上がりまたは立ち下がりと同時にデータを出力することになっている。即ち、受け取るメモリコントローラでは、受信したデータストローブからデータが有効であるタイミングでデータを取り込む必要がある。この場合、時間Ｔ５と時間Ｔ６の中間付近（正確にはデータストローブの立ち上がりと立ち下がりの中間）でデータを内部に取り込む。クロックを４００ＭＨｚとすると、周期は２.５ｎｓ、データの有効期間は１.２５ｎｓ、データストローブとデータを取り込むタイミングの差は０.６２５ｎｓと非常に高速なタイミングをコントロールする必要がある。電気信号の伝送速度が１０cmでおよそ０.６ｎｓである。電圧は１.５ｖ程度に下がり、反射も考慮する必要がある。このように、メモリはタイミング的に非常に厳しい信号線で接続されている。これらの信号線のうち高々１本の信号線が正しく伝送できない場合のことを考える。アドレス，ローアドレスストローブ，カラムアドレスストローブ，ライトリード制御信号が正しくメモリに伝送されない場合は、指定したアドレスとは別なメモリエリアにライトしたり、リードしたりしてしまうことになる。データストローブやデータマスクが正しく伝送されない場合には、８ビット単位にライトすべきデータがマスクされたり、マスクするはずのデータがライトされたりする。データが正しく転送されない場合には、データが１ビット誤ってライトされたり、リードされたりする。
【００３７】
本発明はこれらの異常状態を訂正あるいは検出できるようにすることを目的としてなされた。先ず、１ビットの異常を検出し訂正するために誤り訂正符号ＥＣＣを付加した。更に、８ビットの連続した異常を検出するために、８次以上の生成多項式を用いた誤り検出符号ＣＲＣをアクセスするアドレスとデータに対して付加した。以下その実現方法を図５と図６を用いて説明する。
【００３８】
図５はメモリコントローラ２におけるメモリへのライトデータを生成する回路を示したものである。プロセッサ４からのメモリへのアクセス要求に基づくアドレスＡとライトデータＷＤが与えられると、メモリコントローラ２はアドレスＡはそのままメモリ１への信号として出力すると伴に、ＣＲＣ生成回路２１の入力とする。ここでは便宜上アドレスＡをそのまま出力する構成を記したが、実際にはローアドレスとカラムアドレスに分離する回路が挿入される。さて、ＣＲＣ生成回路２１では、ライトするデータＷＤと該アドレスＡから９ビットのＣＲＣを生成する。ここでは、例えば生成多項式としてＸ（９）＋Ｘ（７）＋Ｘ（５）＋Ｘ（４）＋Ｘ（２）＋Ｘ（１）＋１を用いる。ここで、Ｘ（Ｎ）はＸのＮ乗を示す。この時ハミング距離は４であり、任意の３個までのビット誤りを検出できる、さらに、９個の連続したビット誤りを検出することが出来るようになる。
【００３９】
次に、このＣＲＣとライトデータＷＤからＥＣＣ生成回路２２で誤り訂正符号ＥＣＣを生成する。今、ライトデータＷＤを３２ビット、ＣＲＣを９ビットとしているから、あわせて４１ビットのデータに対してＥＣＣを生成する。１ビットの誤り訂正能力と２ビットの誤り検出能力を持たせる場合、７ビットのＥＣＣを付加すればよい。一般に、７ビットのＥＣＣは１ビットのパリティと６ビットのシンドロームから構成されている。６ビットのシンドロームは異常の検出されたビット位置を一意に示すもので、通常異常が無い場合は０になる値である。
【００４０】
これらＣＲＣとＥＣＣとライトデータＷＤをメモリへのライトするデータ３１として出力する。
【００４１】
次に、図６にメモリ１からリードしたデータが正しいかどうかをチェックし、訂正する回路を示す。アドレスＡに対してリードしたデータ３１として入力されると、ＥＣＣチェック回路２３でデータ３１を入力としてＥＣＣをチェックし２ビットエラーのときはＥＣＣエラーを、１ビットエラーのときはシンドロームをＥＣＣ訂正回路２４に与える。ＥＣＣチェック回路２３では、データ３１からシンドロームとパリティを求め、パリティが０でシンドロームが０でない時、即ちパリティとシンドロームに矛盾があるときＥＣＣエラーをアサートする。ＥＣＣ訂正へはシンドローム６ビットをそのまま送ればよい。
【００４２】
ＥＣＣ訂正回路２４では、ＥＣＣチェック回路２３からにシンドロームの値に従ってＣＲＣとデータＤＡＴＡの所定のビットを反転させる。ＥＣＣ訂正回路２４の出力はアドレスＡと伴にＣＲＣチェック回路２５に入力し、ＣＲＣが正しいかチェックする。ＣＲＣチェック回路はアドレスＡと、ＥＣＣ訂正回路２４で訂正されたデータが前記ＣＲＣ生成回路２１で用いた生成多項式で除算し余りが０のとき、ＣＲＣが正しいと判定する回路である。プロセッサ４の指示でメモリコントローラ２がアドレスＡに対して読み出しを行うと、ＥＣＣエラー及びＣＲＣエラーが無い時データＲＤを正しいリードデータとしてプロセッサ４に送る。ＥＣＣエラーあるいはＣＲＣエラーが発生したときは、例えばメモリエラーが発生した割り込み（図１のプロセッサ４のポートＥＲＲに接続した信号）をプロセッサ４に与えメモリが異常であることを認識することができる。高信頼コントローラ６はこれによりメモリに異常が有ったことを認識できるので、何度かリトライ後ダウン信号を出力して停止するようにする。
【００４３】
ここで、ＥＣＣ生成回路２２，ＣＲＣ生成回路２１，ＥＣＣチェック回路２３，ＣＲＣチェック回路２５はそれぞれ多段の排他的論理和演算素子で構成される。それぞれ同じ回路ではないが、入力ビット数に対して排他的論理和を求めていくだけの回路であるから、３２ビットのアドレス、３２ビットのデータを最大の入力として６４ビットの入力を２入力の排他的論理和では６段で結果を得ることが出来る。１個の２入力排他的論理は０.１ｎｓ以下で演算可能であり、演算時間に余裕を持って演算結果を得ることが出来る。
【００４４】
図７は、このような高信頼コントローラを２個用いて高信頼，高可用性システムを構築した例を示している。２個の高信頼コントローラ６１と６２は同じ入力信号を受け、同じ処理を行い、高信頼用の出力制御装置７に出力データと伴にダウン信号を出力する。高信頼コントローラ６１または６２からのダウン信号は、正しく動作している時に決まった周期で０と１を反転するような信号で、一定値になる時異常であることを示す信号が一般に使用される。出力制御装置７は、２個の高信頼コントローラ６１と６２が正常動作している時は、それらのどちらかを出力する。どちらか一方の高信頼コントローラが異常になった時は、正常の高信頼コントローラの出力を選択して出力する。また、その際には故障した高信頼コントローラの交換を要求する信号を出力する。
【００４５】
以上示してきたように、本実施例に拠れば、アドレスとデータに対する誤り検出符号ＣＲＣを９ビット付加し、更に該ＣＲＣとデータに誤り訂正コードＥＣＣを７ビット付加したことにより１ビットのメモリ内セル及びメモリ間配線の異常を訂正あるいは検出することが可能になった。
【図面の簡単な説明】
【００４６】
【図１】高信頼コントローラの構成を示す図。
【図２】メモリコントローラとメモリデバイスとの接続を示す図。
【図３】メモリのライトタイミングを示す図。
【図４】メモリのリードタイミングを示す図。
【図５】メモリコントローラのライトデータ生成回路を示す図。
【図６】メモリコントローラのリードデータ誤り訂正，検出回路を示す図。
【図７】高信頼コントローラを用いた高信頼，高可用性システムを示す図。
【符号の説明】
【００４７】
１  メモリ
２  メモリコントローラ
４  プロセッサ
６  高信頼コントローラ
１１，１２，１３  メモリデバイス
２１  ＣＲＣ生成回路
２２  ＥＣＣ生成回路
２３  シンドローム算出回路
２４  ＥＣＣ訂正回路
２５  ＣＲＣチェック回路
【図１】
2010086120.tif 000003
【図２】
2010086120.tif 000004
【図３】
2010086120.tif 000005
【図４】
2010086120.tif 000006
【図５】
2010086120.tif 000007
【図６】
2010086120.tif 000008
【図７】
2010086120.tif 000009