JP3741318B2 - 誤り検出および訂正方法および装置 - Google Patents

誤り検出および訂正方法および装置 Download PDF

Info

Publication number
JP3741318B2
JP3741318B2 JP50145597A JP50145597A JP3741318B2 JP 3741318 B2 JP3741318 B2 JP 3741318B2 JP 50145597 A JP50145597 A JP 50145597A JP 50145597 A JP50145597 A JP 50145597A JP 3741318 B2 JP3741318 B2 JP 3741318B2
Authority
JP
Japan
Prior art keywords
test code
code
bit
equivalent
shifted
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP50145597A
Other languages
English (en)
Other versions
JP2001504251A (ja
Inventor
サクセナ,ニーマル
デビット チャン,チー−ウェイ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JP2001504251A publication Critical patent/JP2001504251A/ja
Application granted granted Critical
Publication of JP3741318B2 publication Critical patent/JP3741318B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Pure & Applied Mathematics (AREA)
  • Algebra (AREA)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • Detection And Correction Of Errors (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Error Detection And Correction (AREA)

Description

関連出願
本出願は、1993年6月16日に提出された米国特許出願第08/078,012号の一部継続出願である。
発明の分野
本発明は、一般的にはメモリコヒーレンステーブル、特にキャッシュメモリコヒーレンステーブル内で発生する一時的な(transient)誤りを検出し訂正するための方法および装置に関する。
発明の背景
標準的な高性能コンピュータシステムは、中央処理ユニット(CPU)、主メモリ、キャッシュメモリ、およびメモリ自体の間およびメモリとCPUとの間のデータフローを管理するためのメモリ管理ユニット(MMU)を含んでなる。このようなシステムにおいては、仮想および物理アドレスを用いて、2段(two-tiered)アドレッシング法が一般に実施される。仮想アドレスは、プログラムを実行する際にCPUが生成しそして使用するアドレスに対応し、物理アドレスは、主メモリ内の実際の記憶位置を見付け出すことのできるアドレスに対応する。MMUの機能の1つは、CPUが物理的記憶位置にアクセスできるようにするための仮想アドレスを物理アドレスに変換することにある。
MMUのもう1つの機能は、主メモリ内のデータとキャッシュメモリ内のそのデータのコピーとの間の一貫性を維持することにある。この目的のために、MMUは、主メモリ内の対応する物理的位置に、キャッシュメモリ内の各エントリをマッピングするためのキャッシュ物理アドレステーブル(CPAT:Cache Physical Address Table)を維持する。キャッシュテーブル内の各々のエントリについて、そのキャッシュエントリに対応するデータがどこに見付け出せるかについての、主メモリ内の物理アドレスを有するCPAT内の対応するエントリが、存在する。この物理アドレスは、データの一貫性を維持するために必要なメモリ間のリンクとして機能する。厳密に言うと、データの一貫性を維持するために一般に利用される1つの方策は「コピーバック(copy back)」方策である。この方策によると、キャッシュ内でデータエントリが修正されたときに、ある点において修正されたエントリを主メモリ内にコピーバックすることが必要となる。データを主メモリにコピーバックするためには、修正されたデータが正しい位置にコピーされるように、適当な物理アドレスが与えられなければならない。修正されたキャッシュエントリに対応するCPAT内のエントリは、この物理アドレスを与える。かくして、CPATはデータコヒーレンスを維持する上できわめて重要な役割を果す。
このようなコンピュータシステムは、CPAT内に格納されたデータが正確である場合にはうまく機能するが、CPAT内の物理アドレスのいくつかがCPAT内に発生した一時的誤りに起因して変更された場合には、システムの無欠性が損なわれる可能性がある。例えば、キャッシュ内の修正されたエントリを主メモリにコピーバックする必要があるのに、対応するCPATエントリが破損され、そのためCPATエントリが誤った物理アドレスを含むことになったと仮定してみよう。誤りが検出および訂正されなかった場合には、修正されたデータは誤った位置にコピーバックされることになり、こうしてシステム内に2つの誤りがひき起こされる。まず第1に、このとき、修正されたデータが書き込まれるべきであった記憶位置は、古いデータを含んでいることになる。第2に、修正されたデータが現実に書き込まれている位置は、このとき正しくないデータを含むことになる。これらの誤りはシステムの無欠性を著しく損なう可能性がある。コンピュータシステムの信頼性を最適化するためには、メモリコヒーレンステーブル内に発生し得る一時的誤りを検出し訂正するための手段が必要とされる。
発明の要約
本発明は、コヒーレンステーブル内の誤りを検出し訂正するために、誤り訂正コードを使用する方法および装置を提供する。本発明の装置は、好ましくは、誤りコード発生器、誤り検出器および誤り訂正部を含んでなる。アドレスセットがコヒーレンステーブルのブロックライン(block line)にロードされる毎に、コード発生器はアドレスを受信し、そのアドレスを用いて対応する誤り訂正コードを生成する。好ましくは、生成された誤りコードは、3つの誤りビットを検出し、アドレス内の2つの誤りビットを訂正するのに使用できる、ハミング距離が6のハミング誤り訂正コードである。ひとたび誤りコードが生成されると、該誤りコードは対応するアドレスと共にコヒーレンステーブル内に格納される。
情報がテーブルから読み取られたとき、アドレスおよびその対応する誤りコードの双方は、誤り検出器に出力される。検出器は、出力されたアドレスが何らかの誤りを含むか否かを見極めるため、出力されたアドレスおよび誤りコードを処理する。好ましくは、誤り検出器は、シンドロームコード(syndrome code)を生成すべく出力されたアドレスおよび誤りコードを用いることによって、およびそのシンドロームコードが非ゼロ(non-zero)値を有するか否かを判定することによって、上記の見極めを達成する。シンドロームコードが非ゼロである場合、検出器は、出力されたアドレスが1または複数の誤りを含むことを示すために、誤り信号を生成する。
誤り信号が誤り検出器によって生成された場合、誤り信号は、誤り訂正部の動作を起動する。なお、好ましい実施例においてこの訂正部はコンピュータコードを用いて実現される。この訂正部は、出力されたアドレスおよびそれらに対応する誤りコードを読取ることによって、誤り信号に応答する。その後、訂正部は、修正済みアドレスセットを生成すべく、出力されたアドレスの中の選択されたビットを修正する。修正済みアドレスは、それが何らかの誤りを含んでいるか否かを判定すべく誤りコードを用いて、処理される。誤りが含まれている場合には、出力アドレスは再び修正され、新たに修正されたアドレスは、それが何らかの誤りを含んでいるか否かを判定すべく、誤りコードを用いて再び処理される。アドレスおよび誤りコードを修正し処理するこの手順は、誤りを全く含まない修正済みの正しいアドレスセットが見付け出されるまで続く。この正しいアドレスセットは、テーブル内に一時的誤りが全く無かったとした場合に出力アドレスがあるべき姿である。訂正部はこの正しいアドレスセットを取り出し、これらをコヒーレンステーブルの適当なブロックライン内に書き戻す。かくして破損したアドレスは検出され訂正される。
【図面の簡単な説明】
図1は、本発明による誤りコード発生器30、誤り検出器32および誤り訂正部34を含むコンピュータシステムのブロックダイヤグラムである。
図2は、誤り訂正コードビットECC0の1つを生成するのに使用される多層XORゲート回路の部分回路図である。
図3は、シンドロームコードビットSYN0の1つを生成するのに使用される多層XORゲート回路の部分回路図である。
図4は、シンドロームコードビットの全てがゼロであるか否かを判定するのに使用される判定回路の回路図である。
図5は、本発明の誤り訂正部34についての概括的流れ図である。
図6は、図5に示されたステップ66および68についての詳細な流れ図である。
図7a〜7cは、図5のステップ72および74についての詳細な流れ図である。
図8a〜8cは、本発明の誤り訂正部34を実現するのに利用できるコンピュータプログラムのCプログラミング言語で書かれた原始コードを提供する。
好ましい実施例の詳細な説明
ここで開示されている情報に加えて、1993年6月16日に出願された米国特許出願第08/078,012号の中に含まれている資料は全て、本書に参考として含まれる。
図1を参照すると、本発明を実現するシステム10が示されており、このシステム10には、中央処理ユニット(CPU)12、不揮発性メモリ13、キャッシュメモリ14、メモリ管理部(MMU)16、および主メモリ18が含まれている。システム10の中で、CPU12(Mountain View,CaliforniaのSun Microsystems社が製造するSPARC V9マイクロプロセッサであってよい)は、主メモリ18内に格納されたプログラム命令20にアクセスしこれを実行することによって作動する。これらの命令20を実行する過程において、CPU12は、CPU12が使用し理解する複数の「仮想アドレス」を生成する。しかしながら、これらの仮想アドレスは、主メモリ18の中にある「物理アドレス」との直接的相関関係を全く有していない。したがって、CPU12によって使用される仮想アドレスおよび主メモリ18により使用される物理アドレスを含む2段のアドレッシング法が生み出される。物理アドレスに対し仮想アドレスをマッピングし、これによりCPU12が主メモリ18内で物理的位置をアクセスできるようにするために、仮想から物理へのアドレス変換の完全なセットを含む変換データ構造(TDS:Translation Data Structure)セット22が、主メモリ18の中に維持される。TDS22は、MMU16によって用いられ、CPU12が必要とするアドレス変換をCPU12に提供する。CPU12は、ひとたびMMU16からアドレス変換を受け取ると、変換されたアドレスを用いて主メモリ18内の物理的位置にアクセスする。
プログラムを実行するにあたり、CPU12は、データを検索し修正するためメモリを多数回アクセスすることが必要である。CPU12は、データが必要となる毎に主メモリ18をアクセスできるが、そのための履行は比較的緩慢である。システムの性能を改善するため、最近アクセスされたばかりのデータのいくつかを格納するため、CPU12と主メモリ18との間にはキャッシュメモリ14が置かれる。このデータをCPU12が再び必要とする場合、主メモリ18からではなく、より高速なキャッシュメモリ14からこれを検索することができる。キャッシュメモリ14の好ましい1つの特徴は、そのエントリが「仮想的にタグ付けされる」こと、すなわちキャッシュメモリ14内に格納されたデータエントリが好ましくは物理アドレスではなく仮想アドレスによってタグ付けされることにある。こうすることによってアドレス変換プロセスをバイパスすることが可能となる。一例を挙げると、CPU12は、メモリをアクセスすることを要求する場合、特定の仮想アドレスを出力する。キャッシュメモリ14内のエントリが仮想アドレスを用いてタグ付けされる場合、そしてキャッシュ14の中に特定の仮想アドレスが現在格納されている場合、所望のデータは、仮想アドレスを物理アドレスに変換する必要なくキャッシュ14から検索される。かくして、キャッシュエントリを仮想的にタグ付けすると変換時間が節約され、ひいてはシステムの効率が改善されることになる。
前述のとおり、MMU16の機能の1つは、主メモリ18の中のTDS22をアクセスし参照することにより、CPU12のためにアドレスを変換することにある。変換プロセスを加速するためには、MMU16は、最近要求されたばかりのアドレス変換を保持するため、キャッシュメモリとして作用するテーブルルックアサイドバッファ(TLB:Table Lookaside Buffer)24を保持する。要求された変換がTLB24内に格納されている場合には、その変換はTLB24からの直接検索となり、このためにより低速の主メモリをアクセスする必要性が軽減される。
MMU16のもう1つの機能は、主メモリ18とキャッシュ14との間にデータの一貫性を保つことにある。この目的のために、MMU16は、各々1つの物理アドレスを格納する複数のエントリ27を含むキャッシュ物理アドレステーブル(CPAT)26を保持する。キャッシュ14の中のエントリが仮想アドレスを用いてタグ付けされる、ということを思い出されたい。このことはすなわち、キャッシュエントリがもはや、同一データを見付け出すことのできる、主メモリ18内の物理アドレスへのリンクを全くもたない、ということを意味する。CPAT26は、キャッシュエントリの各々を見付け出すことのできる主メモリ内の物理アドレスをそのエントリ内に格納することによって、上記のリンクを与える。好ましくは、CPAT26内のエントリ27の数は、キャッシュ14内のキャッシュエントリの数と同じであり、これにより各エントリ間に一対一の対応がとれる。
この点を詳述すると、図1のシステムにおいて、キャッシュメモリ14は、各々4つのキャッシュラインエントリを含むM個のブロックライン(またはセット)を有するものとして示されている。1つのキャッシュエントリは、仮想アドレスタグとそれに付随するデータセットからなる。かくして、キャッシュ14内では、VA1tag0およびData10が1つのキャッシュエントリを構成し、VA4tag0およびData40がもう1つのキャッシュエントリを構成する。これらのエントリのラベル付けに関しては、VAおよびDataに続く数の表示はキャッシュエントリの順序づけを特定し、一方添字で、書かれた数の表示はブロックラインの番号を特定する。かくして、VA4tag0は、ブロックライン0内の4番目のキャッシュエントリについての仮想アドレスタグである。キャッシュ14はこの要領でセットアップされることから、CPAT26も好ましくは同様にして構成される。すなわち、CPAT26は好ましくは、各ブロックラインが4つのエントリ27をもつ状態でM個のブロックラインを含んでなる。エントリ27の各々は、対応するキャッシュエントリ内のデータを見付け出すことのできる、主メモリ内の物理アドレスを含む。したがって、CPAT26内のPA10は好ましくは、キャッシュエントリVA1tag0,Data10内のデータを見付け出すことのできる、主メモリ内の物理アドレスを含み、PA40は、キャッシュエントリVA4tag0,Data40内のデータを見付け出すことのできる、主メモリ内の物理アドレスを含む、といったことになる。この要領で、キャッシュ14内の各エントリは、主メモリ内のその対応する物理アドレスに直接リンクされる。
データの一貫性(またはコヒーレンス)を確保すべくいかにCPAT26を用いるかを例示するため、CPU12が、仮想アドレスXでデータをアクセスすることを要求しているという仮定を行う。さらにまた、このデータが現在キャッシュ14内に格納されていないということも仮定する。その結果、仮想アドレスXは、さらなる処理のためMMU16へと転送される。MMU16は仮想アドレスXを受け取り、それをTLB24を用いて物理アドレスに変換する。図1に示されているように、TLB24のエントリライン9は、仮想アドレス(VA)Xとそれに対応する物理アドレス(PA)変換Yを含む。このエントリは、仮想アドレスXを物理アドレスYに変換するのに用いられる。その後、中に格納されたデータZを検索するため、主メモリ内の位置Yをアクセスするのに物理アドレスYが用いられる。データZが主メモリ18から検索された後、CPAT26およびキャッシュ14内の適切なエントリに、該当する情報がロードされる。具体的に言うと、物理アドレスYがCPAT26のエントリPA10内にロードされ、仮想アドレスXがキャッシュ14のVA1tag0内にロードされ、キャッシュ14のData10にはデータZがロードされる。
ここで、CPU12がZからZ’へと、キャッシュ14のData10内のデータを修正するということを仮定しよう。こうすることにより、主メモリ18内のデータZとキャッシュ14内のデータZ’とは、ここで一貫性のないものとなる。CPU12は、それがキャッシュエントリを修正し従って結果としてのデータの非一貫性をひき起こしたことを認識しているため、CPAT26のブロックライン0の中の汚染(dirty)ビットDB0を「1」に、キャッシュ14のブロックライン0内の汚染ビットDB0を「1」にセットする。これらの汚染ビットのセッティングに応えて、MMU制御部28はデータ(DATA)10のデータZ’を取り出し、2つのメモリ14および18を一貫性あるものにするため主メモリ18の中の適切な位置にこのデータを書き戻す。この書き戻し(write-back)操作のために用いられる物理アドレスは、CPAT26のPA10の中に格納されたアドレス、すなわち物理アドレスYである。この例から、CPAT26がデータコヒーレンスを維持する上できわめて重要な役割を果していることは明白である。というのも、CPAT26無しでは、MMU制御部28には、どの物理アドレスに対し修正済みデータZ’を書き込むべきかがわかっていなかったからである。CPAT26内に格納された情報は、データコヒーレンシーのために非常に重要であることから、システムの無欠性を保たなければならない場合には、CPAT26内に発生する全てのデータ破損を検出し訂正する必要がある。
この目的のために、システム10はさらにCPAT26内の誤りを検出し訂正するための装置を含んでなり、この装置には、誤りコード発生器30、誤り検出器32および不揮発性メモリ13内に設けられた誤り訂正部34が含まれている。各構成部分について以下で個別に説明する。
データが主メモリ18からアクセスされ、キャッシュメモリ14内にロードされたときに、そのデータに付随する物理アドレスはCPAT26の中にロードされる。CPAT26には一度に1本のブロックラインがロードされることからそしてCPAT26の各々のブロックラインが4つの物理アドレスを含んでいることから、情報がCPAT内にロードされる毎に4つのアドレスがロードされる。CPAT26内へのアドレスのローディングは、従来設計の構成部分であるMMU制御部28によって制御される。例えば、Motorola MC88200 MMUチップ(Illinois州のSchaumburgのMotorola,Inc.製)内には、類似のMMU制御部が内蔵されている。したがって、MMU制御部28については、ここでは詳述しない。
新しいアドレスがCPAT26にロードされる毎に、誤りコード発生器30はアドレスを受け取り、そのアドレスを用いて誤り訂正コード(ECC:Error Correction Code)を生成する。好ましくは、誤りコードは、アドレス内の誤りを検出し訂正するため後でアドレスと共に処理され得るアドレスを唯一代表するものである。好ましい実施例においては、発生器30により生成された誤り訂正コードは、ハミング誤り訂正コードである。ハミングコーディング理論は既知のものであり、本明細書に参考として組み入れられている、S.LinおよびD.J.Castelloによる「誤り制御コーディング:基礎と応用」、Prentice-Hall,1983,p51〜124の中で記述されている。好ましくは、ハミングコードは、以下の多項式を用いて生成される:
Figure 0003741318
この多項式を用いて生成された誤り訂正コードは、6というハミング距離を有する。このようなハミング距離を有するECCを使用して、CPAT26アドレス内で最高3つの誤りビットを検出し最高2つの誤りビットを訂正することができる。好ましい実施例においては、CPAT26の中に格納されている各々の物理アドレスは21のビットを含む。各々のブロックラインは4つのアドレスを含むことから、各々のブロックラインは84のアドレスビットを有することとなる。ハミングコード理論の下で、このビット数について6というハミング距離をもつ誤り訂正コードを生成するためには、15ビットのECCを使用することが必要となる。アドレスビットをA0−A83を記すと、以下の論理式を用いて誤り訂正コードECCの15ビットECC0−ECC14が生成される:
Figure 0003741318
Figure 0003741318
Figure 0003741318
Figure 0003741318
なお式中、^はXORを指す。
上述の等式を再検討すると、各誤りコードビットは、単に複数のアドレスビットを一緒にXORすることによって生成されるということがわかる。かくして各コードビットを生成するためには、単に適当な数の入力をもつXORゲートを使用することが可能である。例えば、コードビットECC0は、38入力のXORゲートを用いて生成することができる。しかしながら、このような多数の入力をもつXORゲートはあまりにも複雑でコストが高くつくことから、このような実現は実践不可能である。その代わり、各エラーコードビットは好ましくは、層状になったXORゲート構造を用いて生成される。
一例としては、誤りコードビットECC0は好ましくは、図2に示された層状化XOR回路40を用いて生成される。以上に示したECC0のための論理式から、ECC0を生成するのに38のアドレスビットを一緒にXORしなければならないことがわかっている。これらの入力すべてを収容するため、回路40の最下位レベルに、19の2入力XORゲート42Aが具備されている。図2に示されているとおり、38のアドレスビットの各々が、XORゲート42A群の1つに対し入力される。最下位層内の各ゲート42Aは、その2つの入力ビットについてXORをとり、1つの出力を与える。次の層内のXORゲート42B群の各々は、これらの出力のうちの2つを取り、それらを一緒にXORして第2層出力を与える。次の層内のXORゲート42C群の各々は第2層出力のうちの2つを取り、それらを一緒にXORして第3層出力を与える。このプロセスは、最上位層に到達するまで続く。2−入力ゲートが使用されることから、連続層の各々は、先行する層の半分の数のゲートを有する。ゲートの数は、最上位層において、1つのゲート42Zだけになるまで、連続層の一層毎に減少する。このゲート42Zの出力は、誤りコードビットECC0である。かくして、ECC0が生成される。その他の誤りコードビットECC1−ECC14用の等式は、ECC0についてのものときわめて類似していることから、回路40に類似した回路を、残りの誤り訂正コードビットを生成するのに使用することが可能である。かくして、コード発生器30は15の多層XORゲート回路を含んでなり、その各回路は誤り訂正コードECCの15ビットのうちの1つを生成する。ECCが生成された後、そのECCは、コードを生成するのに用いられるアドレスと共にCPAT26のブロックライン内にロードされる。かくして、CPAT26の各ブロックラインは、4つの物理アドレスおよびこれらのアドレスとに付随する1つのECCを含んでなる。
CPAT26の中に格納された情報をアクセスし使用するときが来たとき、CPAT26のブロックラインが誤り検出器32に出力される。具体的に言うと、検出器32は、CPAT26から4つの物理アドレスと対応するECCを受け取り、アドレスが何らかの誤りを含んでいるか否かを判定するためこれらのアドレスおよびECCを処理する。換言すると、検出器32は、出力されたアドレスおよびECCに基づいて、出力されたアドレスがECCを生成するのに当初使用されたアドレスと同じであるか否かを判定する。同じでない場合には、アドレスは、CPAT26内に格納されていた間に破損されたという結論を下すことができる。好ましくは、検出器32は、2段階プロセスを用いることによりこの誤り判定を行う。まず第1に、検出器32は、15ビットシンドロームコード(syndrome code)SYN0−SYN14を生成すべく、出力されたアドレスおよびECCを使用する。その後、検出器32は、シンドロームコードSYNが非ゼロ(non-zero)値を有するか否かを判定する。シンドロームコードが非ゼロである場合、出力されたアドレスは誤りを含む。
出力されたアドレスをA0−A83と記して、15のシンドロームコードビットSYN0−SYN14は、以下の論理式を用いて生成される。
Figure 0003741318
Figure 0003741318
Figure 0003741318
Figure 0003741318
なおここで、^はXORを意味する。
これらの等式とECCコードビットを生成するための等式とを比較すると、等式が実質的に同じであるという興味深い点が明らかになる。例えば、SYN0用の等式は、SYN0が付加的入力としてECC0を必要とするという点を除いて、ECC0用の等式と同一である。その他の入力は全て同じである。同様にして、SYN1についての等式は、付加的入力としてSYN1がECC1を必要とするという点を除いて、ECC1についての等式と同一である。その他のシンドロームビットの全てについて同じことが言える。これがもつ実践的な意味は、誤り検出器32がシンドロームビットを生成すべくコード発生器30内の回路を再使用できるということにある。必要な唯一の修正は、1つのXORゲートの付加である。例として、シンドロームビットSYN0を生成するための回路が図3に示されている。図3の回路50と図2の回路40との間の唯一の差異は、入力の1つとしてECC0をもつXORゲート52が付加されることにある。その他の全ての構成部分は同一である。かくして、ECC0を生成するために用いられる回路を、シンドロームビットSYN0を生成するために再使用することができる。コード発生器30のその他の回路を再使用し、1つの付加的なXORゲートを含むべく回路を修正することにより、同様の要領でその他のシンドロームビットSYN1−SYN14を生成することができる。かくして、誤り検出器32は、好ましくは、各々15のシンドロームビットSYN1−SYN14の1つを生成する、回路50に類似した15の回路を含んでなる。コード発生器30および誤り検出器32の両方の中に同一の回路部品を使用した結果として、本発明を実現するのに必要とされるハードウェアについて大幅な節約を図ることができる。
シンドロームコードビットSYN0−SYN14が生成された後、全てのシンドロームビットがゼロであるか否かを判定する必要がある。これは、図4に示されたもののような判定回路にシンドロームビットを送ることによって実施できる。その決定回路は好ましくは、入力として15のシンドロームビットSYN0−SYN14を受け取る15の入力のORゲート54の形をとる。シンドロームビットSYN0−SYN14の全てがゼロである場合、ORゲート54の出力56はゼロとなり、かくして、これは、いかなる誤りも起こらなかったということを表す。いずれかのシンドロームビットが1である場合、ORゲート54は、アドレスが誤りを含むことを表すため1を出力することになる。かくして、ORゲート54の出力56は、出力されたアドレスが何らかの誤りを含むとき、誤り信号を出力すべく、誤り検出器32の出力として機能する。
ここで再び図1を参照すると、誤り検出器32がその出力56に誤り信号を生成した場合、この誤り信号は誤り訂正部34の動作を起動する。好ましい実施例においては、誤り訂正部34は、不揮発性メモリ13の中に格納されるアセンブリレベル命令コードにより実現されるが、その他のタイプのコンピュータコードを用いて訂正部34を実現することもでき、また主メモリ18といったような他のメモリにそれを設けることもできるという点に留意すべきである。訂正部34は、ハードウェア部品を用いても実現できるが、このような実現はかなり複雑でコストのかかるものとなる。特に本明細書に記述されたものでの実現は、それが本発明の装置の複雑性を大幅に減少させるという理由で選択されたものである。
図5を参照すると、訂正部34のための全体的な流れ図が提供されている、訂正部34がCPU12によって実行される場合、これは、訂正部34を呼出させたCPAT26内のエントリをCPU12がまず読取り受け取るようにする(60)。上述のとおり、このエントリは、アドレス(この例では84ビット)を含む第1の部分、および誤りコード(この例では15ビット)を含む第2の部分を含む。簡略化のために、CPATエントリを以下では「データ」と呼び、アドレスを「データ部分」、誤りコードを誤りコード部分と呼ぶことにする。本発明によると、CPATエントリをData〔X−1:0〕と記すことができる。なおここでX(この例では99である)はエントリ内のビット数である。
データがひとたび受信されると、そのデータのためのシンドロームコードが導出される(62)。シンドロームコードは、2つの方法のうちの1つから導出できる。まず第1に、誤り検出器32は、誤りについてデータを検査する上でシンドロームコードをすでに生成していることから、CPU12は誤り検出器32からシンドロームコードを受理することができる。代替的には、CPU12は、誤り訂正部34の制御下でシンドロームコードを生成することができる。いずれの方法を使用してもよい。シンドロームコードがひとたび導出されると(62)、CPU12は、データ内に実際に誤りが存在することを確認するため、シンドロームコードを検査する(64)。ステップ64は、好ましくは、シンドロームコードが非ゼロ値を有するか否かを判定することによって実行される。もしコードがゼロであると、データが全く誤りを含んでおらず、誤り検出器32が偽りの警報を生成したという結論を下すことができる。このような場合、CPU12は、誤り訂正ルーチン34を退出できる(65)。しかしながら、シンドロームコードが非ゼロである場合、データがまさに誤りを含んでいるという結論を下すことができる。その結果、CPU12はステップ66まで進み、誤りを訂正しようと試みる。
CPU12は好ましくは、単一ビット誤りについてまず検査することにより(66)、誤り訂正プロセスを開始する。単一ビット誤りが検出されると、CPU12は単一ビット誤りを訂正し(68)、訂正ルーチン34より退出する(70)。一方、単一ビット誤りが全く検出されない場合、CPU12は、2重ビット誤りについて検査するためステップ72まで進む。2重ビット誤りが検出されたならば、CPU12は2重ビット誤りを訂正し(74)、その後、訂正ルーチン34から退出する(76)。しかしながら、2重ビット誤りが全く検出されない場合、それはすなわち、データが訂正不能誤りを含んでいることを意味する。このような場合には、CPU12は、訂正不能誤りが発生したという表示(誤りメッセージまたは誤り信号等)を与える(78)。その後、CPU12は、誤り訂正ルーチン34から退出する(80)。
以上では、誤り訂正部34について一般的に記述してきた。訂正部34についてさらに詳しく記述するためにここで、それぞれ、図5のステップ66および68についてのより詳しい流れ図および図5のステップ72および74についてのより詳しい流れ図を示す図6および図7a〜図7cを参照することにする。
まず第1に図6を参照すると、本発明の単一ビット誤り検出/訂正方法のための詳細な流れ図が示されている。CPU12によって実行されるこの方法は、好ましくは、選択されたパラメータの初期化で始まる(90)。まず第1に、テストコード(test code)が1という値にセットされる。好ましくは、このテストコードは多重ビット変数(multiple bit variable)である。同様に、カウンタnは0にセットされる。さらに、フラグ変数(flag variable)が0にセットされる。以下でさらに記述するとおり、このフラグは、訂正可能な誤りが検出されたか否かを表す。上述の変数がひとたびセットされたならば、CPU12はステップ92に進み、カウンタnがXの値より小さいか否かを判定する。好ましくは、値Xは、誤りコードを含めた、データ内のビットの数に等しい(この例では99ビット)。nがXより小さい場合、それはすなわち、ステップ92〜104を含むループが予め定められた回数だけ実行され、それ以上実行されるべきでないことを意味する。このような場合、CPU12はループから退出し、ステップ106へ進む。ステップ106およびそれ以降のステップについては後の節で記述する。
一方、カウンタnがXより小さい場合、CPU12はステップ94へ進み、ステップ62で導出されたシンドロームコード(図5)がテストコードの現行値に等しいか否かを判定する。等しい場合、それはすなわち、単一ビットの訂正可能な誤りがデータ内に発見されたことを意味し、その場合、CPU12は、訂正可能な誤りが発見されたことを示すべくフラグ変数を1にセットし、ステップ106へ進む。
しかしながら、シンドロームコードが現行のテストコードの値に等しくない場合、CPU12は、現行のテストコードの最上位ビット(MSB)が1であるか否かを判定するステップ98まで進む。1である場合には、CPU12はステップ100へ進んで、テストコードの各ビットを1位置だけ左にシフトさせる。その後、CPU12はシフトされたテストコードおよび多項式マスキング値(ポリマスク)についてXOR動作を実行する。このポリマスク(polymask)は、好ましくは、データ内に含まれた誤りコードを生成するために用いられるものと同じ生成多項式から導出される。この例では、生成多項式は、この開示の8ページ、20行目に示されているものである。ポリマスク値は、好ましくは、(1)最高位成分(X15)を除去すること、(2)変数Xに値2を代入することそして(3)全ての成分を加算することによって導出される。示されている生成多項式について、ポリマスク値は20269である。テストコードがひとたびシフトされポリマスクでXORがとられたならば、CPU12は任意に、選択されたマスキング値でANDとすることができる。この付加的ステップは単にテストコードのフィールドを四捨五入するのに役立ち、要求される場合にはスキップすることもできる。CPU12がひとたびステップ100内に示された全ての関数を実行し、かくして更新済みテストコードを導出したならば、CPU12は現行のテストコードを、更新済みテストコードに等しくセットする。
ステップ98に戻ると、現行のテストコードのMSBが1に等しくないとCPU12が判定した場合、CPU12はステップ102に分岐してその中に示された関数を実行する。すなわち、CPU12は、テストコード内の各ビットを1位置だけ左へシフトさせ、次に(任意には)シフト済みテストコードを、選択されたマスキング値とANDをとって更新済みテストコードを導出する。それがひとたび行われた時点で、CPU12は現行のテストコードを更新済みテストコードに等しくなるようセットする。
ステップ100または102のいずれが実行されるかとは無関係に、CPU12により実現される次のステップは、カウンタnを1だけ増分させることである(104)。それがひとたび行われた時点で、CPU12はステップ92までループバックして上述のステップを繰り返す。このプロセスは、ステップ92〜104を、選択された回数だけ実行し終わるまで、または単一の訂正可能なビットが発見されるまで続く。
ループ92〜104からいかに退出するかとは無関係に、ステップ106がループからの退出時に実行される。ステップ106では、CPU12は、フラグ変数が1にセットされたか否かを判定する。フラグが1にセットされなかった場合、それはすなわち、単一ビットの訂正可能な誤りが発見されなかったことを意味する。そのような場合、CPU12は、ステップ72(図5)へ進み(108)、2重ビットの訂正可能な誤りについて検査する。しかしながら、フラグ変数が1にセットされかくして単一ビットの訂正可能な誤りが発見されたことが表示された場合、CPU12は、データ内の誤ったビットの位置を決定するように進む(110)。この決定は、好ましくは、カウンタnの現行値を用いることによって行われる。ループ92〜104からの退出の時に、カウンタnは現行値を含むことになる。誤ったビットのデータ内の位置を決定すべく、カウンタの値nは、値1と共に、データ内のビット数Xから減算される。誤ったビットの位置がひとたび確認されたならば、CPU12はこの誤ったビットを、好ましくはそれをその補数に等しくセットすることによって訂正する(112)。ひとたびこれが行われると、CPAT26内に全く誤りが存在しなかった場合にデータがあるべきであった姿を表す訂正済みデータのセットが導出される。CPU12は、好ましくは、訂正済みデータのこのセットをCPAT26に出力し(114)、そのセットをCPAT26の適当なエントリ内に書込み(116)、その中に現在格納されている古い誤ったデータセットと置き換える。これがひとたび行われると、CPU12はステップ70(図5)へ進んで誤り訂正部34から退出する(118)。誤りは発見され訂正されたことになる。
ここで、データが複数の誤ったビットを含んでいると仮定する。このような場合、CPU12は、図7a〜7cに示されたステップを実行して2重ビット誤りの位置を見付け訂正するように試みる。CPU12は、選択された変数を初期化することによって(130)、プロセスを開始する。より具体的に言うと、CPU12は、第1の多重ビットテストコード(TEST1)を1の値にセットし、第1のカウンタnを0にセットし、フラグ変数を0にセットする。その後、CPU12は、第1のカウンタnの値がX−1よりも小さいか否かを決定すること(132)によって第1のループの中に入り、ここにXは再びデータ内のビット数となる。nがX−1よりも小さくない場合、これはすなわち、ステップ132が既に予め定められた回数実行されたことを意味し、この場合、CPU12はループから退出し、図7cのステップ180へ進む。図7cについては、後の節でより詳細に説明する。
一方、nがX−1よりも小さい場合、CPU12は、ステップ134へ進み、第1のテストコード、TEST1のMSBが1であるか否かを判定する。1である場合、CPU12はステップ136へ分岐する。そうでない場合、CPU12はステップ138へと分岐する。ステップ136では、CPU12は、3つの主要な機能を実行する。まず第1に、CPU12は、第1のテストコード、TEST1中のビットの各々を1位置だけ左へシフトさせる。第2に、CPU12は、上述のポリマスク値でシフト済みの第1のテストコードをXORして、更新済みテストコードを導出する。CPU12はさらにマスキング値でANDオペレーションを実行してテストコードを四捨五入することも、随意に、できる。第3に、CPU12は、第2のテストコード、TEST2、を、前述の最初の2つの機能の結集として誘導された更新済みテストコードに等しくなるようセットする。ステップ136は、第2のテストコード、TEST2、の値を更新するよう作用する。
ステップ138は、同様に第2のテストコード、TEST2、の値を更新する。しかしながら、CPU12はステップ138においてXORを全く実行しない。むしろ、CPU12は第1のテストコード、TEST1、の中のビットの各々を1位置だけ左へシフトするだけである。CPU12は、マスキング値でANDをさらに実行して、テストコードを四捨五入することも、随意に、できる。ひとたびこれが行われると、CPU12は第2のテストコード、TEST2、を、シフト済みのテストコードに等しくなるようにセットする。
どのステップ(136または138)が実行されるかとは無関係に、CPU12は、第1のカウンタの現行値nに1を加えたものに等しい値に、第2のカウンタpをセットするよう、ステップ140へ進む。ステップ140において第2のカウンタpがひとたびセットされたならば、CPU12はステップ150(図7b)へ進んで第2のかつ入れ子型のループに入る。この第2のループにおいて、CPU12は、第2のカウンタpの現行値がX(すなわちデータ内のビットの数)よりも小さいか否かを判定すること(150)から開始する。小さくない場合、それはすなわち、第2のループがすでに予め定められた回数だけ実行されたことを意味する。このような場合、CPU12はループを退出してステップ164まで進む。しかしながら、pがXよりも小さい場合、CPU12はステップ152へ行き、ステップ62で誘導されたシンドロームコード(syndrome code)(図5)が、第2のテストコード、TEST2、と第1のテストコードTEST1とのXORの結果に等しいか否かを判定する。シンドロームコードが、TEST2でXORされたTEST1に等しい場合、それはすなわち、データ内に2重ビットの訂正可能な誤りが発見されたことを意味する。このような場合、CPU12は、フラグ変数の値を1にセットし(154)、2重ビットの訂正可能な誤りが発見されたことを表示し、図7cのステップ180へ進む。
一方、ステップ152における答えがNOであった場合、そのときCPU12はステップ156へ進んで第2のテストコード、TEST2、のMSBが1であるか否かを判定する。YESである場合、CPU12はステップ158を実行する。そうでない場合、CPU12はステップ160を実行する。ステップ158では、CPU12は3つの主要な機能を実行する。まず第1に、CPU12は第2のテストコード、TEST2、の中のビットの各々を左へ1位置だけシフトする。第2に、CPU12は、更新済みテストコードを誘導するために、上述のポリマスク値とシフト済みの第2のテストコードとをXORする。CPU12は、テストコードを四捨五入するためマスキング値とのANDをさらに実行することも、随意に、できる。第3に、CPU12は、第2のテストコード、TEST2、を誘導されたばかりの更新済みテストコードに等しくなるようセットする。ステップ158は、第2のテストコード、TEST2、の値を更新するように作用する。
ステップ160も、ステップ158と同様に、第2のテストコードTEST2の値を更新する。しかしながらステップ160では、CPU12はいかなるXORも実行しない。その代わりに、CPUは第2のテストコードTEST2内の各ビットを左へ1位置だけシフトさせるだけである。CPUはさらに、テストコードを四捨五入するためマスキング値とANDを実行することも、随意に、できる。それがひとたび行われると、CPU12は第2のテストコード、TEST2、をシフト済みテストコードと等しくなるようにセットする。
ステップ158または160のいずれが実行されるかとは無関係に、CPU12はその後第2のカウンタpを1だけ増分する(162)。その後、CPU12はステップ150までループバックして、上述のプロセスを繰り返す。CPU12は好ましくは、ループが予め定められた回数だけ実行されてしまうまで、または、シンドロームコードが、第2のテストコードと第1のテストコードとのXORに等しいと判定されるまで(ステップ152)、ループ150〜162を繰り返す。
CPU12がステップ150の結果、ループ150〜162を退出したならば、そのときCPU12は、第1のテストコード、TEST1、のMSBが1であるか否かを判定すべく、ステップ164へ進む。もし1である場合には、CPU12はステップ166を実行する。そうでなければ、CPU12はステップ168を実行する。ステップ166では、CPU12は3つの主要な機能を実行する。まず第1に、CPU12は、第1のテストコード、TEST1、内のビットの各々を左へ1位置だけシフトする。第2にCPU12は、更新済みテストコードを導出すべく、上述のポリマスク値と、シフト済みの第1のテストコードとをXORする。CPU12はさらにマスキング値とANDを実行してテストコードを四捨五入することも、随意に、できる。第3に、CPU12は第1のテストコード、TEST1、を、上述の最初の2つの機能の結果として誘導された更新済みテストコードに等しくなるようにセットする。ステップ166は、第1のテストコード、TEST1の値を更新するよう作用する。
ステップ168は同様にして、第1のテストコード、TEST1、の値を更新する。しかしながらCPU12は、ステップ168ではいかなるXORも実行しない。むしろ、CPU12は、第1のテストコード、TEST1内のビットの各々を左へ1位置だけシフトさせるだけである。CPU12はさらにマスキング値でANDを実行して、テストコードを四捨五入することも、随意に、できる。それがひとたび行われると、CPU12は、第1のテストコード、TEST1、をシフトされたテストコードに等しくなるようにセットする。
ステップ166または168のいずれが実行されるかに拘わらず、CPU12はその後第1のカウンタnを1だけ増分(170)。その後、CPU12は、図7aのステップ132までループバックして第1のループを繰り返す。好ましくは、CPU12は、ループが予め定められた回数だけ実行されてしまうまで、またはシンドロームコードが、第2のテストコードTEST2と第1のテストコードTEST1とのXORに等しいと判定されるまで、第1のループを繰り返す。
第1および第2のループから退出した時、CPU12は図7cのステップ180に進む。ステップ180では、CPU12は、フラグ(FLAG)変数が1にセットされたか否かを判定する。セットされていない場合、それは2重ビットの訂正可能な誤りが発見されなかったことを意味する。このような場合、CPU12は図5のステップ78へ進み(182)、データ内の誤りが訂正され得ないという表示を提供する。一方、フラグ変数が1にセットされ、かくして2重ビット訂正可能な誤りが発見されたことが表示された場合には、CPU12はステップ184へ進んで、誤ったビットの位置を決定する。CPU12が第1および第2のループを退出した時、第1および第2のカウンタnおよびpは現行の値を含むことになる。これらの現行値は、誤ったビットの位置を決定するのに用いられる。より具体的に言うと、第1の位置(LOCATION1)は、値Xから、1と共に第1のカウンタnの現行値n、を減算することによって導出される。第2の位置(LOCATION2)は、値Xから、1と共に第2のカウンタの現行値p、を減算することによって確かめられる。かくしてデータ内の誤ったビットの位置が決定される。
誤ったビットの位置がひとたびわかると、CPU12は、図7cのステップ186に示されたとおり、好ましくは誤ったビットをその補数に等しくセットすることによって、このビットを訂正する(186)。誤ったビットがひとたび訂正されると、CPAT26内に全く誤りが無かった場合のデータのあるべき姿を表す1セットの訂正済みデータが誘導される。CPU12は、CPAT26に対してこの訂正済みデータのセットを出力し(188)、それをCPATの適当なエントリに書込んで(190)、現在その中に含まれている破損したエントリと置き換える。かくして、誤ったデータは検出され訂正される。その後、CPU12は誤り訂正部34から退出して(192)、通常のオペレーションに戻る。
付加的な開示として、図8a〜図8cには誤り訂正部34のための原始コードセットが示されている。原始コードは、例えばCPUとしてSPARC V9マイクロプロセッサをもつシステム内で使用するためのC言語の形で書き込まれる。混同を避けるため、原始コードにおいては、(1)シンドロームコードに可変的「チェック」が割当てられること、(2)第1のテストコードに可変的「シンドローム」が割当てられ、(3)第2のテストコードに可変的「シンドローム1」が割当てられることに留意されたい。

Claims (8)

  1. データを表す第1の部分と、誤りコードを表す第2の部分とを有するデータセットについて、前記データセット内の誤りを訂正するためのコンピュータにより実行される方法において、
    (a)データセットの第1および第2の部分に基づいてシンドロームコードを生成する段階、
    (b)多重ビットテストコードを1という値にセットする段階、
    (c)前記シンドロームコードが前記テストコード等価であるか否かを判定する段階、
    (d)前記シンドロームコードが前記テストコードと等価であるという判定に応答して、
    i.誤ったビットがあるデータセット内の位置を決定する段階、
    ii.データセット内の誤りを訂正するため前記位置で前記誤ったビットを補完する段階、および
    iii.前記誤ったビットが訂正された状態のデータセットを表す訂正済みデータセットを出力する段階、
    (e)前記シンドロームコードが前記テストコードと等価でないという判定に応答して、前記テストコードの最上位ビットが1であるか否かを判定する段階、
    (f)前記テストコードの最上位ビットが1であるという判定に応答して、
    i.前記テストコード内の各ビットを1位置だけ左へシフトさせてシフト済みテストコードを導出する段階、
    ii.多項式マスキング値と前記シフト済みテストコードとをXORして更新済みテストコードを導出する段階、および
    iii.前記テストコードを前記更新済みテストコードと等価になるようにセットする段階、
    (g)前記テストコードの最上位ビットが1でないという判定に応答して、
    i.前記テストコード内の各ビットを左へ1位置だけシフトさせてシフト済みテストコードを導出する段階、および
    ii.前記テストコードを前記シフト済みテストコードと等価になるようセットする段階、
    (h)記段階(c)〜(g)を、選択した数だけ、または前記シンドロームコードが前記テストコードと等価であると判定されるまで、繰り返し実行する段階、
    を含んでなる方法。
  2. 前記データセットの第2の部分が、生成多項式を用いて生成され、前記多項式マスキング値が前記生成多項式から導出される請求項1に記載の方法。
  3. データを表す第1の部分と誤りコードを表す第2の部分とをもつデータセットについて、このデータセット内の誤りを訂正するための、コンピュータにより実行される方法において、
    (a)データセットの第1および第2の部分に基づいて生成されたシンドロームコードを受け取る段階、
    (b)多重ビットテストコードを1という値にセットする段階、
    (c)前記シンドロームコードが前記テストコードと等価であるか否かを判定する段階、
    (d)前記シンドロームコードが前記テストコードと等価であるという判定に応答して、
    i.誤ったビットがあるデータセット内の位置を判定する段階、
    ii.データセット内の誤りを訂正するため前記位置で前記誤ったビットを補完する段階、および
    iii.前記誤ったビットが訂正された状態のデータセットを表す訂正済みデータセットを出力する段階、
    (e)前記シンドロームコードが前記テストコードと等価でないという判定に応答して、前記テストコードの最上位ビットが1であるか否かを判定する段階、
    (f)前記テストコードの最上位ビットが1であるという判定に応答して、
    i.前記テストコード内の各ビットを1位置だけ左へシフトさせてシフト済みテストコードを導出する段階、
    ii.多項式マスキング値と前記シフト済みテストコードとをXORして更新済みテストコードを導出する段階、および
    iii.前記テストコードを前記更新済みテストコードと等価になるようにセットする段階、
    (g)前記テストコードの最上位ビットが1でないという判定に応答して、
    i.前記テストコード内の各ビットを左へ1位置だけシフトさせてシフト済みテストコードを導出する段階、および
    ii.前記テストコードを前記シフト済みテストコードと等価になるようセットする段階、
    (h)記段階(c)〜(g)を、選択した数だけ、または前記シンドロームコードが前記テストコードと等価であると判定されるまで、繰り返し実行する段階、
    を含んでなる方法。
  4. 前記データセットの第2の部分が生成多項式を用いて生成され、前記多項式マスキング値が前記生成多項式から導出される請求項3に記載の方法。
  5. データを表す第1の部分と誤りコードを表す第2の部分とをもつデータセットについて、前記データセット内の2重ビット誤りを訂正するための、コンピュータにより実行される方法において、
    (a)データセットの第1および第2の部分に基づいてシンドロームコードを生成する段階、
    (b)第1のカウンタを0という値にセットする段階、
    (c)第1の多重ビットテストコードを1という値にセットする段階、
    (d)前記第1のテストコードの最上位ビットが1であるか否かを判定する段階、
    (e)前記第1のテストコードの最上位ビットが1であるという判定に応答して、
    i.前記第1のテストコード内の各ビットを1位置だけ左へシフトさせてシフト済みの第1のテストコードを導出する段階、
    ii.多項式マスキング値と前記シフト済みの第1のテストコードとをXORして、更新済みの第1のテストコードを導出する段階、および
    iii.第2のテストコードを前記更新済みの第1のテストコードと等価になるようにセットする段階、
    (f)前記第1のテストコードの最上位ビットが1でないという判定に応答して、
    i.前記第1のテストコード内の各ビットを左へ1位置だけシフトさせて、シフト済みの第1のテストコードを導出する段階、および
    ii.前記第2のテストコードを前記シフト済みの第1のテストコードと等価になるようセットする段階、
    (g)第2のカウンタを前記第1のカウンタの値に1を加えた値に等しくセットする段階、
    (h)前記シンドロームコードが、前記第2のテストコードと前記第1のテストコードとのXORと等価であるか否かを判定する段階、
    (i)前記第2のテストコードと前記第1のテストコードとXORと、前記シンドロームコードとが等価であるという判定に応答して、
    i.誤ったビットがあるデータセット内の2つの位置を判定する段階、
    ii.データセット内の誤りを訂正するため前記位置で前記誤ったビットを補完する段階、および
    iii.前記誤ったビットが訂正された状態のデータセットを表す訂正済みデータセットを出力する段階、
    (j)前記シンドロームコードが、前記第1のテストコードと前記第2のテストコードとのXOR等価でないという判定に応答して、前記第2のテストコードの最上位ビットが1であるか否かを判定する段階、
    (k)前記第2のテストコードの最上位ビットが1であるという判定に応答して、
    i.前記第2のテストコード内の各ビットを1位置だけ左へシフトさせて、シフト済みの第2のテストコードを導出する段階、
    ii.多項式マスキング値と前記シフト済みの第2のテストコードとをXORして、更新済みの第2のテストコードを導出する段階、および
    iii.前記第2のテストコードを前記更新済みの第2のテストコードと等価になるようにセットする段階、
    (l)前記第2のテストコードの最上位ビットが1でないという判定に応答して、
    i.前記第2のテストコード内の各ビットを左へ1位置だけシフトさせて、シフト済みの第2のテストコードを導出する段階、および
    ii.前記第2のテストコードを前記シフト済みの第2のテストコードと等価になるようセットする段階、
    (m)前記第2のカウンタを増分する段階、
    (n)前記第2のカウンタが予め定められた値に達するまでかまたは、前記シンドロームコードが、前記第1のテストコードと前記第2のテストコードとのXORと等価であると判定されるまで、上記段階(h)〜(m)を繰り返し実行する段階、
    (o)前記第1のテストコードの最上位ビットが1であるか否かを判定する段階、
    (p)前記第1のテストコードの最上位ビットが1であるという判定に応答して、
    i.前記第1のテストコード内の各ビットを1位置だけ左へシフトさせて、シフト済みの第1のテストコードを導出する段階、
    ii.前記多項式マスキング値と前記シフト済みの第1のテストコードとをXORして、更新済みの第1のテストコードを導出する段階、および
    iii.前記第1のテストコードを前記更新済みの第1のテストコードと等価になるようにセットする段階、
    (q)前記第1のテストコードの最上位ビットが1でないという判定に応答して、
    i.前記第1のテストコード内の各ビットを左へ1位置だけシフトさせて、シフト済みの第1のテストコードを導出する段階、および
    ii.前記第1のテストコードを前記シフト済みの第1のテストコードと等価になるようセットする段階、
    (r)前記第1のカウンタを増分する段階、および
    (s)前記第1のカウンタが第2の予め定められた値に達するまでかまたは、前記シンドロームコードが、前記第1のテストコードと前記第2のテストコードとのXORと等価であると判定されるまで、上記段階(d)〜(r)を繰り返し実行する段階、
    を含んでなる方法。
  6. 前記データセットの第2の部分が生成多項式を用いて生成され、前記多項式マスキング値が前記生成多項式から導出される請求項5に記載の方法。
  7. データを表す第1の部分と誤りコードを表す第2の部分をもつデータセットについて、前記データセット内の2重ビット誤りを訂正するための、コンピュータにより実行される方法において、
    (a)データセットの第1および第2の部分に基づいて生成されたシンドロームコードを受け取る段階、
    (b)第1のカウンタを0の値にセットする段階、
    (c)第1の多重ビットテストコードを1という値にセットする段階、
    (d)前記第1のテストコードの最上位ビットが1であるか否かを判定する段階、
    (e)前記第1のテストコードの最上位ビットが1であるという判定に応答して、
    i.前記第1のテストコード内の各ビットを1位置だけ左へシフトさせて、シフト済みの第1のテストコードを導出する段階、
    ii.多項式マスキング値と前記シフト済みの第1のテストコードとをXORして、更新済みの第1のテストコードを導出する段階、および
    iii.第2のテストコードを前記更新済みの第1のテストコードと等価になるようにセットする段階、
    (f)前記第1のテストコードの最上位ビットが1でないという判定に応答して、
    i.前記第1のテストコード内の各ビットを左へ1位置だけシフトさせて、シフト済みの第1のテストコードを導出する段階、および
    ii.前記第2のテストコードを前記シフト済みの第1のテストコードと等価になるようセットする段階、
    (g)第2のカウンタを、前記第1のカウンタの値に1を加えた値に等しくセットする段階、
    (h)前記シンドロームコードが、前記第1のテストコードと前記第2のテストコードとのXORと等価であるか否かを判定する段階、
    (i)前記シンドロームコードが、前記第1のテストコードと前記第2のテストコードとのXORと等価であるという判定に応答して、
    i.誤ったビットがあるデータセット内の2つの位置を判定する段階、
    ii.データセット内の誤りを訂正するため前記位置で前記誤ったビットを補完する段階、および
    iii.前記誤ったビットが訂正された状態のデータセットを表す訂正済みデータセットを出力する段階、
    (j)前記シンドロームコードが、前記第1のテストコードと前記第2のテストコードとのXORと等価でないという判定に応答して、前記第2のテストコードの最上位ビットが1であるか否かを判定する段階、
    (k)前記第2のテストコードの最上位ビットが1であるという判定に応答して、
    i.前記第2のテストコード内の各ビットを1位置だけ左へシフトさせて、シフト済みの第2のテストコードを導出する段階、
    ii.前記多項式マスキング値と前記シフト済みの第2のテストコードとをXORして、更新済みの第2のテストコードを導出する段階、および
    iii.前記第2のテストコードを前記更新済みの第2のテストコードと等価になるようにセットする段階、
    (l)前記第2のテストコードの最上位ビットが1でないという判定に応答して、
    i.前記第2のテストコード内の各ビットを左へ1位置だけシフトさせて、シフト済みの第2のテストコードを導出する段階、および
    ii.前記第2のテストコードを前記シフト済みの第2のテストコードと等価になるようセットする段階、
    (m)前記第2のカウンタを増分する段階、
    (n)前記第2のカウンタが予め定められた値に達するまでかまたは、前記シンドロームコードが、前記第1のテストコードと前記第2のテストコードとのXORと等価であると判定されるまで、上記段階(h)〜(m)を繰り返し実行する段階、
    (o)前記第1のテストコードの最上位ビットが1であるか否かを判定する段階、
    (p)前記第1のテストコードの最上位ビットが1であるという判定に応答して、
    i.前記第1のテストコード内の各ビットを1位置だけ左へシフトさせて、シフト済みの第1のテストコードを導出する段階、
    ii.前記多項式マスキング値と前記シフト済みの第1のテストコードとをXORして、更新済みの第1のテストコードを導出する段階、および
    iii.前記第1のテストコードを前記更新済みの第1のテストコードと等価になるようにセットする段階、
    (q)前記第1のテストコードの最上位ビットが1でないという判定に応答して、
    i.前記第1のテストコード内の各ビットを左へ1位置だけシフトさせて、シフト済みの第1のテストコードを導出する段階、および
    ii.前記第1のテストコードを前記シフト済みの第1のテストコードと等価になるようセットする段階、
    (r)前記第1のカウンタを増分する段階、および
    (s)前記第1のカウンタが第2の予め定められた値に達するまでかまたは、前記シンドロームコードが、前記第1のテストコードと前記第2のテストコードとのXORと等価であると判定されるまで、上記段階(d)〜(r)を繰り返し実行する段階、
    を含んでなる方法。
  8. 前記データセットの第2の部分が生成多項式を用いて生成され、前記多項式マスキング値が前記生成多項式から導出される請求項7に記載の方法。
JP50145597A 1995-06-05 1996-06-05 誤り検出および訂正方法および装置 Expired - Fee Related JP3741318B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/465,367 1995-06-05
US08/465,367 US5533035A (en) 1993-06-16 1995-06-05 Error detection and correction method and apparatus
PCT/US1996/009041 WO1996039661A1 (en) 1995-06-05 1996-06-05 Error detection and correction method and apparatus

Publications (2)

Publication Number Publication Date
JP2001504251A JP2001504251A (ja) 2001-03-27
JP3741318B2 true JP3741318B2 (ja) 2006-02-01

Family

ID=23847530

Family Applications (1)

Application Number Title Priority Date Filing Date
JP50145597A Expired - Fee Related JP3741318B2 (ja) 1995-06-05 1996-06-05 誤り検出および訂正方法および装置

Country Status (5)

Country Link
US (1) US5533035A (ja)
EP (1) EP0834125B1 (ja)
JP (1) JP3741318B2 (ja)
DE (1) DE69619372T2 (ja)
WO (1) WO1996039661A1 (ja)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0993225A (ja) * 1995-09-27 1997-04-04 Kokusai Electric Co Ltd データ受信装置
US6119248A (en) * 1998-01-26 2000-09-12 Dell Usa L.P. Operating system notification of correctable error in computer information
US7509550B2 (en) * 2003-02-13 2009-03-24 Janusz Rajski Fault diagnosis of compressed test responses
ATE532133T1 (de) * 2003-02-13 2011-11-15 Mentor Graphics Corp Komprimieren von testantworten unter verwendung eines kompaktors
EP1460542B1 (en) * 2003-03-19 2018-10-31 Micron Technology, INC. Integrated memory system comprising at least a non-volatile memory and an automatic error corrector
JP2007064762A (ja) * 2005-08-30 2007-03-15 Matsushita Electric Ind Co Ltd 半導体装置、テストモード制御回路
US20080052598A1 (en) * 2006-08-09 2008-02-28 Aksamit Slavek P Memory multi-bit error correction and hot replace without mirroring
US7730346B2 (en) * 2007-04-30 2010-06-01 Globalfoundries Inc. Parallel instruction processing and operand integrity verification
TW200906072A (en) * 2007-07-24 2009-02-01 Princeton Technology Corp Error-correcting method used in decoding of data transmitting
JP5202130B2 (ja) 2008-06-24 2013-06-05 株式会社東芝 キャッシュメモリ、コンピュータシステム、及びメモリアクセス方法
ATE539403T1 (de) * 2008-06-24 2012-01-15 Sandisk Il Ltd Verfahren und vorrichtung zur fehlerkorrektur nach der löschanzahl eines festkörperspeichers
US8732350B2 (en) * 2008-12-19 2014-05-20 Nvidia Corporation Method and system for improving direct memory access offload
US9208108B2 (en) * 2008-12-19 2015-12-08 Nvidia Corporation Method and system for improved flash controller commands selection
US8694750B2 (en) * 2008-12-19 2014-04-08 Nvidia Corporation Method and system for data structure management
US8683293B2 (en) * 2009-12-16 2014-03-25 Nvidia Corporation Method and system for fast two bit error correction
US20110161553A1 (en) * 2009-12-30 2011-06-30 Nvidia Corporation Memory device wear-leveling techniques
US9594675B2 (en) * 2009-12-31 2017-03-14 Nvidia Corporation Virtualization of chip enables
US9465728B2 (en) 2010-11-03 2016-10-11 Nvidia Corporation Memory controller adaptable to multiple memory devices
US8533557B2 (en) 2011-01-28 2013-09-10 Infineon Technologies Ag Device and method for error correction and protection against data corruption
US9218289B2 (en) * 2012-08-06 2015-12-22 Qualcomm Incorporated Multi-core compute cache coherency with a release consistency memory ordering model
US8954832B1 (en) * 2012-09-05 2015-02-10 L-3 Communications Corp. Asymmetric distance coding
US9658920B1 (en) 2013-06-21 2017-05-23 Altera Corporation Method for reconfiguring an erroneous memory frame in an integrated circuit
DE102015112554B4 (de) * 2015-07-30 2017-10-26 Hochschule Nordhausen Verfahren und Vorrichtung zum Erzeugen einer Codebitsequenz sowie zum Erkennen von Bitfehlern

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3685014A (en) * 1970-10-09 1972-08-15 Ibm Automatic double error detection and correction device
US3656107A (en) * 1970-10-23 1972-04-11 Ibm Automatic double error detection and correction apparatus
US3714629A (en) * 1971-06-01 1973-01-30 Ibm Double error correcting method and system
US4139148A (en) * 1977-08-25 1979-02-13 Sperry Rand Corporation Double bit error correction using single bit error correction, double bit error detection logic and syndrome bit memory
US4163147A (en) * 1978-01-20 1979-07-31 Sperry Rand Corporation Double bit error correction using double bit complementing
US4637021A (en) * 1983-09-28 1987-01-13 Pioneer Electronic Corporation Multiple pass error correction
US5051999A (en) * 1989-03-13 1991-09-24 Motorola, Inc. Programmable error correcting apparatus within a paging receiver

Also Published As

Publication number Publication date
DE69619372T2 (de) 2002-07-11
EP0834125B1 (en) 2002-02-20
DE69619372D1 (de) 2002-03-28
US5533035A (en) 1996-07-02
JP2001504251A (ja) 2001-03-27
EP0834125A1 (en) 1998-04-08
WO1996039661A1 (en) 1996-12-12

Similar Documents

Publication Publication Date Title
JP3741318B2 (ja) 誤り検出および訂正方法および装置
US7376877B2 (en) Combined tag and data ECC for enhanced soft error recovery from cache tag errors
US7100097B2 (en) Detection of bit errors in maskable content addressable memories
EP0030612A2 (en) Method of correcting double errors in a data storage apparatus and data storage apparatus
US6408417B1 (en) Method and apparatus for correcting soft errors in digital data
JP2830308B2 (ja) 情報処理装置
JP2007041932A (ja) キャッシュメモリ装置、半導体集積回路およびキャッシュ制御方法
US11409608B2 (en) Providing host-based error detection capabilities in a remote execution device
KR100972807B1 (ko) 에러 정정 코드 생성 방법 및 메모리 관리 장치
JP3116827B2 (ja) キャッシュメモリ制御装置
US6681299B1 (en) Cache-tag control method in information processing apparatus having cache, with error checking mechanism in cache tag, and information processing apparatus using this control method
US6510506B2 (en) Error detection in cache tag array using valid vector
US4244049A (en) Method and apparatus for enhancing I/O transfers in a named data processing system
US11010241B2 (en) Translation protection in a data processing apparatus
JP2004054936A (ja) 内容照合メモリにおけるビットエラーの検出方法および装置
JPH05165719A (ja) メモリアクセス処理装置
US9921906B2 (en) Performing a repair operation in arrays
US7774658B2 (en) Method and apparatus to search for errors in a translation look-aside buffer
JPH0773115A (ja) コンピュータシステムのメモリテスト方法
JPH01194046A (ja) メモリアクセス方式
Chang et al. Concurrent error detection/correction in the HAL MMU chip
JPH0756816A (ja) メモリの制御装置
US20070271485A1 (en) Method and Device for Error Detection for a Cache Memory and Corresponding Cache Memory
JPS58222495A (ja) 記憶装置
JPS5837638B2 (ja) キオクソウチ

Legal Events

Date Code Title Description
TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20051004

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20051104

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081118

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091118

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101118

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101118

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111118

Year of fee payment: 6

LAPS Cancellation because of no payment of annual fees