(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-12-03
(45)【発行日】2024-12-11
(54)【発明の名称】記憶装置及び記憶装置の制御方法
(51)【国際特許分類】
G06F 11/10 20060101AFI20241204BHJP
H03M 13/29 20060101ALI20241204BHJP
【FI】
G06F11/10 648
H03M13/29
(21)【出願番号】P 2021088729
(22)【出願日】2021-05-26
【審査請求日】2024-02-08
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】三木 淳司
【審査官】三坂 敏夫
(56)【参考文献】
【文献】特開2020-042326(JP,A)
【文献】特開2011-180911(JP,A)
【文献】特開2016-134167(JP,A)
【文献】米国特許出願公開第2007/0050695(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/08-11/10
H03M 13/29
(57)【特許請求の範囲】
【請求項1】
メモリと、
前記メモリへのデータの書き込み時に、複数の種類の誤り訂正符号の相関関係に基づいて、前記データから、前記複数の種類の誤り訂正符号のそれぞれの間で共通の第1の検査符号を生成し、前記第1の検査符号を前記データに付加して前記メモリに書き込み、前記メモリからの前記データの読み出し時に、前記第1の検査符号を前記複数の種類の誤り訂正符号の何れかに基づく第2の検査符号に変換し、前記第2の検査符号を用いて誤り訂正を行うメモリ制御部と、
を有する記憶装置。
【請求項2】
前記メモリ制御部は、前記第1の検査符号を、前記複数の種類の誤り訂正符号のうちの第1の誤り訂正符号に基づく前記第2の検査符号を用いた誤り訂正により、誤りが解消しない場合、前記第1の検査符号を、前記複数の種類の誤り訂正符号のうちの第2の誤り訂正符号に基づく第3の検査符号に変換し、前記第3の検査符号を用いて誤り訂正を行う、
請求項1に記載の記憶装置。
【請求項3】
前記第2の検査符号から、前記第3の検査符号の全体を変換できる場合、前記第1の検査符号は、前記第2の検査符号である、請求項2に記載の記憶装置。
【請求項4】
前記第2の検査符号から、前記第3の検査符号の一部が変換できる場合、前記第1の検査符号は、前記第2の検査符号に前記一部以外の前記第3の検査符号を連結することで生成される、請求項2に記載の記憶装置。
【請求項5】
前記第1の誤り訂正符号または前記第2の誤り訂正符号は、ブロック訂正符号、リードソロモン符号、またはBCH符号である、請求項2乃至4の何れか一項に記載の記憶装置。
【請求項6】
メモリ制御部が、
メモリへのデータの書き込み時に、複数の種類の誤り訂正符号の相関関係に基づいて、前記データから、前記複数の種類の誤り訂正符号のそれぞれの間で共通の第1の検査符号を生成し、
前記第1の検査符号を前記データに付加して前記メモリに書き込み、
前記メモリからの前記データの読み出し時に、前記第1の検査符号を前記複数の種類の誤り訂正符号の何れかに基づく第2の検査符号に変換し、前記第2の検査符号を用いて誤り訂正を行う、
記憶装置の制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、記憶装置及び記憶装置の制御方法に関する。
【背景技術】
【0002】
近年、コンピュータの高性能化のため、高集積化及び大規模化が進み、一方で部品に対しては高信頼性化が重要となっている。メモリにおいては外部からの中性子線やα線、内部素子の劣化などによってメモリ内部に記憶したデータが不正なものに変化してしまう現象が発生しうる。そこで、誤り訂正符号(Error-Correcting Code)(以下ECCと呼ぶ)を用いて、メモリからのデータ読み出し時に誤り情報を訂正することが行われる(たとえば、特許文献1~3参照)。誤り訂正は、検査符号(検査ビットまたは検査バイトと呼ぶ場合もある)という誤り検知用情報を生成しその検査符号をデータに付加してメモリに記憶し、読み出し時にその検査符号を用いて訂正箇所を示す情報を生成し、訂正を実行する、という流れで行われる。
【先行技術文献】
【特許文献】
【0003】
【文献】特表2016-530655号公報
【文献】特開2014-140111号公報
【文献】特開2013-143118号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
ECCの訂正能力には限界があり、障害傾向とECCの保護範囲が合致していなければ効果を発揮できない場合がある。しかしメモリの障害傾向が事前にわからないため最適なECC設計ができない。そこで複数の種類のECCの検査符号をデータに付加し、運用時の障害発生傾向にあわせて使用する検査符号を切り替えればよいが、検査符号数が多くなり、データ長に対する検査符号長の割合が大きくなってしまうためデータの符号化効率が落ちてしまう。
【0005】
1つの側面では、本発明は、比較的少ない検査符号数で、複数の種類のECCに対応した誤り訂正が可能な記憶装置及び記憶装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【0006】
1つの実施態様では、メモリと、前記メモリへのデータの書き込み時に、複数の種類の誤り訂正符号の相関関係に基づいて、前記データから、前記複数の種類の誤り訂正符号のそれぞれの間で共通の第1の検査符号を生成し、前記第1の検査符号を前記データに付加して前記メモリに書き込み、前記メモリからの前記データの読み出し時に、前記第1の検査符号を前記複数の種類の誤り訂正符号の何れかに基づく第2の検査符号に変換し、前記第2の検査符号を用いて誤り訂正を行うメモリ制御部と、を有する記憶装置が提供される。
【0007】
また、1つの実施態様では、記憶装置の制御方法が提供される。
【発明の効果】
【0008】
1つの側面では、本発明は、比較的少ない検査符号数で、複数の種類のECCに対応した誤り訂正が可能である。
【図面の簡単な説明】
【0009】
【
図1】第1の実施の形態の記憶装置及び記憶装置の制御方法の一例を示す図である。
【
図2】第2の実施の形態の記憶装置の一例を示す図である。
【
図3】比較例の記憶装置の制御方法による書き込み処理の流れを示すフローチャートである。
【
図4】比較例の記憶装置の制御方法による読み出し処理の流れを示すフローチャートである。
【
図5】比較例の記憶装置の制御方法のECCによる誤り訂正の複数のケースを説明する図である。
【
図6】第2の実施の形態の記憶装置の制御方法による書き込み処理の流れを示すフローチャートである。
【
図7】第2の実施の形態の記憶装置の制御方法による読み出し処理の流れを示すフローチャートである。
【
図8】3つの訂正論理間で共通のPCBを用いる例を示す図である(その1)。
【
図9】3つの訂正論理間で共通のPCBを用いる例を示す図である(その2)。
【
図11】PCBの生成処理の一例の流れを示すフローチャートである。
【
図12】2種類のブロック訂正符号における検査行列の一例を示す図である。
【
図13】2種類のブロック訂正符号における検査符号の算出例を示す図である。
【
図14】2種類のブロック訂正符号における検査符号間の相関の例を示す図である。
【
図15】2種類のブロック訂正符号における検査符号の算出例を示す図である。
【
図16】2種類のブロック訂正符号における検査符号間の相関の例を示す図である。
【
図17】リードソロモン符号と1ビット訂正符号を組み合わせた場合の検査行列の例と検査バイトの算出例を示す図である。
【
図18】リードソロモン符号の検査行列の例と検査バイトの算出例を示す図である。
【
図19】リードソロモン符号を含む2種類の訂正符号における検査符号間の相関の例を示す図である。
【発明を実施するための形態】
【0010】
以下、発明を実施するための形態を、図面を参照しつつ説明する。
(第1の実施の形態)
図1は第1の実施の形態の記憶装置及び記憶装置の制御方法の一例を示す図である。
【0011】
第1の実施の形態の記憶装置10は、メモリ11とメモリ制御部12を有する。
メモリ11として、各種の不揮発性メモリまたは各種の揮発性メモリが用いられる。不揮発性メモリには、たとえば、フラッシュメモリ、MRAM(Magneto-resistive Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)などがあり、揮発性メモリには、たとえば、DRAM(Dynamic Random Access Memory)などがある。
【0012】
メモリ制御部12は、メモリ11へのデータの書き込みや、メモリ11からのデータの読み出しを制御するコントローラである。メモリ制御部12は、CPU(Central Processing Unit)やDSP(Digital Signal Processor)などのプロセッサに含まれるメモリアクセスコントローラであってもよい。メモリ制御部12は、書き込み時と読み出し時にそれぞれ以下のような処理を行う。
【0013】
メモリ制御部12は、メモリ11へのデータの書き込み時に、複数の種類のECCの相関関係に基づいて、データから、複数の種類のECCのそれぞれの間で共通の検査符号を生成する。複数の種類のECCとして、たとえば、ブロックサイズが異なる複数の種類のブロック訂正符号、リードソロモン符号、BCH符号などを用いることができる。
【0014】
たとえば、第1の種類のECCの検査符号から、第2の種類のECCの検査符号を全て変換可能な相関関係にある場合、第1の種類のECCの検査符号を共通の検査符号とすることができる。また、第1の種類のECCの検査符号から、第2の種類のECCの検査符号の一部を変換可能な相関関係にある場合、第1の種類のECCの検査符号と、変換できない第2の種類のECCの検査符号とを連結した共通の検査符号を用いることができる。以下、共通の検査符号を、PCB(Pseudo Check Bit)と呼ぶ場合もある。なお、より具体的なPCBの生成例については、後述の第2の実施の形態において説明する。
【0015】
メモリ制御部12は、PCBをデータに付加してメモリ11に書き込む。
一方、メモリ制御部12は、メモリ11からのデータの読み出し時に、PCBを複数の種類の誤り訂正符号の何れかに基づく検査符号に変換し、その検査符号を用いて誤り訂正を行う。
【0016】
メモリ制御部12は、PCBの生成時の変換式などに基づいて、PCBを検査符号に変換する。たとえば、PCBが第1の種類のECCの検査符号である場合で、第1の種類のECCの検査符号から第2の種類のECCの検査符号への変換式が得られている場合、その変換式を用いて、PCBが第2の種類のECCの検査符号へ変換される。
【0017】
誤り箇所は、後述する検査行列と、読み出したデータ及び変換で得られた検査符号による列ベクトルとの行列積によって計算されるシンドロームと呼ばれる情報によって求められる。
【0018】
図1には、メモリ制御部12の処理例(記憶装置10の制御方法)の一例が示されている。
書き込み処理において、メモリ制御部12は、複数の種類のECCを選定し、受信したデータからPCBを生成し、データに付加し、メモリ11に書き込む。読み出し処理において、異常なデータ(誤りを含むデータ)とPCBが読み出された場合、メモリ制御部12は、PCBを、たとえば、第1の種類のECCの検査符号に変換する。そして、メモリ制御部12は、その検査符号を用いて誤りを検出し、検出した誤りを訂正する。
【0019】
しかし、第1の種類のECCの検査符号では、誤りが訂正できない場合、メモリ制御部12は、PCBを、第2の種類のECCの検査符号に変換する。そして、メモリ制御部12は、その検査符号を用いて誤りを検出し、検出した誤りを訂正する。
図1の例では、第2の種類のECCの検査符号を用いた場合には、誤りが訂正され、正常なデータが得られている。
【0020】
上記のような、記憶装置10によれば、複数の種類のECCの相関関係に基づいた共通の検査符号(PCB)がデータに付加されて書き込まれ、読み出し時にPCBが複数の種類のECCの何れかの検査符号に変換される。これにより、複数の種類のECCの検査符号をそのまま連結した形式でデータに付加しなくても、複数の種類のECCに対応した誤り訂正が可能である。つまり、比較的少ない検査符号数で、複数の種類のECCに対応した誤り訂正が可能となる。
【0021】
(第2の実施の形態)
次に、第2の実施の形態の記憶装置及びその制御方法について説明する。
図2は、第2の実施の形態の記憶装置の一例を示す図である。
【0022】
第2の実施の形態の記憶装置20は、メモリ21とCPU22を有する。
メモリ21として、たとえば、前述のような各種の不揮発性メモリまたは各種の揮発性メモリが用いられる。
【0023】
CPU22は、2次キャッシュ22a、メモリアクセスコントローラ22bを有する。CPU22のその他の構成要素については図示が省略されている。
2次キャッシュ22aには、メモリ21に書き込むデータやメモリ21から読み出されたデータが一時的に格納される。
【0024】
メモリアクセスコントローラ22bは、メモリ21へのデータの書き込みや、メモリ21からのデータの読み出しを制御するとともに、PCBを生成する機能や、誤り検出及び誤り訂正を行う機能などを有する。
【0025】
メモリアクセスコントローラ22bは検査符号生成部22b1、誤り訂正部22b2を有する。
検査符号生成部22b1は、メモリ21へのデータの書き込み時に、複数の種類のECCの相関関係に基づいて、データから、複数の種類のECCのそれぞれの間で共通の検査符号である前述のPCBを生成する。PCBはデータに付加されて、メモリ21に書き込まれる。
【0026】
誤り訂正部22b2は、メモリ21からのデータの読み出し時に、そのデータに付加されたPCBを、複数の種類のECCの何れかに基づく検査符号に変換し、その検査符号を用いて誤り訂正を行う。
【0027】
図2の例では、誤り訂正部22b2は、訂正部22b2a,22b2b,22b2cを有している。
訂正部22b2aは、PCBを、第1の種類のECCに基づく検査符号に変換し、その検査符号を用いて誤り訂正を行う。訂正部22b2bは、訂正部22b2aにおいて、誤り訂正が行えない場合、PCBを第2の種類のECCに基づく検査符号に変換し、その検査符号を用いて誤り訂正を行う。訂正部22b2cは、訂正部22b2a,22b2bにおいて、誤り訂正が行えない場合、PCBを第3の種類のECCに基づく検査符号に変換し、その検査符号を用いて誤り訂正を行う。
【0028】
なお、適応可能なECCの種類は、3種類に限らず、2種類、または4種類以上であってもよい。
次に、第2の実施の形態の記憶装置20の制御方法及び効果を説明する前に、比較例の記憶装置の制御方法を説明する。
【0029】
(比較例)
以下に示す比較例の記憶装置の制御方法は、データに付加する検査符号数を抑えるため、データには1種類のECCに基づく検査符号を付加し、誤り訂正ができない場合には、異なる種類のECCに基づく検査符号に切り替えて再書き込みする方法である。つまり、誤り訂正ができない場合には、異なる種類の誤り訂正論理で生成された検査符号をデータに付加して再書き込みが行われる。
【0030】
図3は、比較例の記憶装置の制御方法による書き込み処理の流れを示すフローチャートである。
また、
図4は、比較例の記憶装置の制御方法による読み出し処理の流れを示すフローチャートである。
【0031】
また、
図5は、比較例の記憶装置の制御方法のECCによる誤り訂正の複数のケースを説明する図である。
図3のように、メモリ書き込み処理では、比較例の記憶装置は、たとえば、メモリ書き込み命令の受信などにより、メモリ書き込みが開始されたか否かを判定し(ステップS10)、メモリ書き込みが開始されたと判定するまでステップS10の処理を繰り返す。
【0032】
メモリ書き込みが開始されたと判定した場合、比較例の記憶装置はデータを受信し(ステップS11)、1種類のECCに基づく検査符号を生成する(ステップS12)。そして、比較例の記憶装置は、データにその検査符号を付加してメモリに書き込み(ステップS13)、メモリ書き込み処理を終了する。
【0033】
図4のように、メモリ読み出し処理では、比較例の記憶装置は、たとえば、メモリ読み出し命令の受信などにより、メモリ読み出しが開始されたか否かを判定し(ステップS20)、メモリ読み出しが開始されたと判定するまでステップS20の処理を繰り返す。
【0034】
メモリ読み出しが開始されたと判定した場合、比較例の記憶装置はメモリからデータとデータに付加された検査符号を読み出す(ステップS21)。そして、比較例の記憶装置は、検査符号から、シンドロームというデータの訂正場所を示す情報を生成し(ステップS22)、生成したシンドロームに基づいて誤り訂正を行う(ステップS23)。
【0035】
図5のC1では、データが誤り訂正によって正常に訂正できたケースが示されている。
図5の“CB生成論理1”は、第1の種類のECCに基づいて検査符号“CB1”を生成することを示している。
図5のようにメモリに記憶されている間にデータに異常が生じた場合(誤りが発生した場合)、シンドローム生成処理である“シンドローム生成1”により、“CB1”に基づいてシンドローム“Syn1”が生成される。そして、“Syn1”に基づいて“訂正論理”が適用され、誤り訂正が行われる。
【0036】
誤り訂正が、1種類のECCにしか対応していない場合、C2のケースのように誤りが訂正できなかった場合、システム停止に陥る。
そこで、C3のケースのように、第1の種類のECCに基づいた誤り訂正では誤りが訂正できない場合、比較例の記憶装置は、再書き込み要求を行う。
【0037】
図5の例では、再度受信したデータから、“CB生成論理2”により、第2の種類のECCに基づいて検査符号“CB2”が生成され、読み出し時には、“シンドローム生成2”により、“CB2”に基づいて“Syn2”が生成される。そして、“Syn2”に基づいて“訂正論理”が適用され、誤り訂正が行われる。
図5の例では、第2の種類のECCに基づいた誤り訂正でも誤りが訂正できず、比較例の記憶装置は、再書き込み要求を行っている。再度受信したデータから、“CB生成論理3”により、第3の種類のECCに基づいて検査符号“CB3”が生成され、読み出し時には、“シンドローム生成3”により、“CB3”に基づいて“Syn3”が生成される。そして、“Syn3”に基づいて“訂正論理”が適用され、誤り訂正が行われる。
図5の例では、第3の種類のECCに基づいた誤り訂正により誤りが訂正され、正常なデータが得られている。
【0038】
図5のC3のような処理を行うため、
図4のように比較例の記憶装置は、ステップS23の処理後、誤りが解消せず、他に適用可能な訂正論理(他の種類のECCによる訂正を意味する)があるか否かを判定する(ステップS24)。
【0039】
比較例の記憶装置は、誤りが解消したと判定した場合、または、誤りが解消せず、他に適用可能な訂正論理がないと判定した場合、読み出し処理を終了する。比較例の記憶装置は、誤りが解消せず他に適用可能な訂正論理があると判定した場合、再書き込み要求を行い、
図3のステップS10からの処理を繰り返す。その場合、ステップS12の処理では、別の訂正論理に基づいた検査符号が生成される。
【0040】
上記のような比較例の記憶装置の制御方法では、十分な訂正能力をもつ訂正論理を選定しそれらを切り替える場合、
図5のように、メモリへのデータ再書き込みが必要となってしまい、システム性能へ悪影響を与える可能性がある。
【0041】
(第2の実施の形態の記憶装置の制御方法)
図6は、第2の実施の形態の記憶装置の制御方法による書き込み処理の流れを示すフローチャートである。
【0042】
メモリ書き込み処理では、記憶装置20のメモリアクセスコントローラ22bは、たとえば、メモリ書き込み命令の受信などにより、メモリ書き込みが開始されたか否かを判定し(ステップS30)。メモリアクセスコントローラ22bは、メモリ書き込みが開始されたと判定するまでステップS30の処理を繰り返す。
【0043】
メモリ書き込みが開始されたと判定した場合、メモリアクセスコントローラ22bの検査符号生成部22b1は、書き込むデータを、2次キャッシュ22aから受信し(ステップS31)、受信したデータからPCBを生成する(ステップS32)。PCBの生成処理の例については後述する。
【0044】
メモリアクセスコントローラ22bは、データにPCBを付加してメモリ21に書き込み(ステップS33)、メモリ書き込み処理を終了する。
図7は、第2の実施の形態の記憶装置の制御方法による読み出し処理の流れを示すフローチャートである。
【0045】
メモリ読み出し処理では、メモリアクセスコントローラ22bは、たとえば、メモリ読み出し命令の受信などにより、メモリ読み出しが開始されたか否かを判定し(ステップS40)、メモリ読み出しが開始されたと判定するまでステップS40の処理を繰り返す。
【0046】
メモリ読み出しが開始されたと判定した場合、メモリアクセスコントローラ22bはメモリ21からデータとデータに付加されたPCBを読み出す(ステップS41)。そしてメモリアクセスコントローラ22bの誤り訂正部22b2は、PCBから複数の種類のECC(複数の誤り訂正論理)の何れかに基づく検査符号へ変換する(ステップS42)。そして、誤り訂正部22b2は、検査符号を用いてシンドロームを生成し(ステップS43)、生成したシンドロームに基づいて誤り訂正を行う(ステップS44)。
【0047】
誤り訂正部22b2は、誤りが解消せず、他に適用可能な訂正論理があるか否かを判定する(ステップS45)。
誤り訂正部22b2は、誤りが解消したと判定した場合、または、誤りが解消せず、他に適用可能な訂正論理がないと判定した場合、読み出し処理を終了する。誤り訂正部22b2は、誤りが解消せず他に適用可能な訂正論理があると判定した場合、ステップS42からの処理を繰り返す。その場合、ステップS42の処理では、PCBが別の訂正論理に基づいた検査符号に変換される。
【0048】
図8及び
図9は、3つの訂正論理間で共通のPCBを用いる例を示す図である。
図8のように、検査符号生成部22b1は3種類の“CB生成論理1”~“CB生成論理3”により生成した検査符号である“CB1”~“CB3”を、“変換論理1”~“変換論理3”による変換で、共通のPCBに変換する。PCBはデータに付加されてメモリ21に記憶される。
【0049】
そして、読み出し時には、誤り訂正部22b2が、共通のPCBを、“逆変換論理1”~“逆変換論理3”の何れかによって、“CB1”~“CB3”の何れかに変換し、“シンドローム生成1”~“シンドローム生成3”により、“Syn1”~“Syn3”を生成する。
【0050】
なお、“CB生成論理1”~“CB生成論理3”と“変換論理1”~“変換論理3”は、一体とみなして、
図9のように、“PCB生成論理”として表すことができる。また、“逆変換論理1”~“逆変換論理3”と“シンドローム生成1”~“シンドローム生成3”をそれぞれ一体とみなして、
図9のように、“変換シンドローム生成1”~“変換シンドローム生成3”として表すことができる。
【0051】
図10は、訂正論理の切り替え例を示す図である。
書き込み処理において、検査符号生成部22b1は、“PCB生成論理”により、データから、たとえば、3つの訂正論理の間で共通のPCBを生成する。PCBはデータに付加されてメモリ21に記憶される。
【0052】
図10のようにメモリに記憶されている間にデータに異常が生じた場合(誤りが発生した場合)、誤り訂正部22b2の訂正部22b2aは、“変換シンドローム生成1”により、PCBを“CB1”に変換する。さらに訂正部22b2aは、“変換シンドローム生成1”により、後述する検査行列と、読み出したデータ及び“CB1”による列ベクトルとの行列積によって“Syn1”を生成する。そして、訂正部22b2aは、“Syn1”に基づいて“訂正論理”により誤り訂正(第1の種類のECCによる誤り訂正)を行う。
【0053】
図10の例のように、第1の種類のECCによる誤り訂正では誤りが訂正できない場合、誤り訂正部22b2は、シンドローム生成論理を切り替え、訂正部22b2bは、“変換シンドローム生成2”により、PCBを“CB2”に変換する。さらに訂正部22b2bは、“変換シンドローム生成2”により、後述する検査行列と、読み出したデータ及び“CB2”による列ベクトルとの行列積によって“Syn2”を生成する。そして、訂正部22b2bは、“Syn2”に基づいて“訂正論理”により誤り訂正(第2の種類のECCによる誤り訂正)を行う。
【0054】
図10の例のように、第2の種類のECCによる誤り訂正でも誤りが訂正できない場合、誤り訂正部22b2は、シンドローム生成論理を切り替え、訂正部22b2cは、“変換シンドローム生成3”により、PCBを“CB3”に変換する。さらに訂正部22b2cは、“変換シンドローム生成3”により、後述する検査行列と、読み出したデータ及び“CB3”による列ベクトルとの行列積によって“Syn3”を生成する。そして、訂正部22b2cは、“Syn3”に基づいて“訂正論理”により誤り訂正(第3の種類のECCによる誤り訂正)を行う。
図10の例では、第3の種類のECCに基づいた誤り訂正により誤りが訂正され、正常なデータが得られている。
【0055】
上記のような第2の実施の形態の記憶装置20によれば、複数の種類のECCの相関関係に基づいた共通の検査符号(PCB)がデータに付加されて書き込まれ、読み出し時にPCBが複数の種類のECCの何れかの検査符号に変換される。これにより、複数の種類のECCの検査符号をそのまま連結した形式でデータに付加しなくても、複数の種類のECCに対応した誤り訂正が可能である。つまり、比較的少ない検査符号数で、複数の種類のECCに対応した誤り訂正が可能となる。
【0056】
また、上記の比較例のように、使用するECCの種類(訂正論理)を切り替える場合に、
図10に示したように再書き込みが不要になる。
(PCBの生成例)
以下、PCBの生成例を説明する。
【0057】
図11は、PCBの生成処理の一例の流れを示すフローチャートである。
検査符号生成部22b1は、複数の種類のECCを選定する(ステップS50)。複数の種類のECCとして、たとえば、ブロックサイズが異なる複数の種類のブロック訂正符号、リードソロモン符号、BCH符号などがある。
【0058】
そして検査符号生成部22b1は、複数の種類のECCに基づく検査符号間が相関をもつように、生成行列を作成する(ステップS51)。生成行列の例については後述する。
検査符号生成部22b1は、異なる検査符号間の相関部分を共通符号Aに変換し(ステップS52)、異なる検査符号間の非相関部分BをAに連結し、PCBを生成する(ステップS53)。
【0059】
(2種類のブロック訂正符号への適用例(その1))
まず、簡単のため、12ビットのデータ(data0~data11)に対して、2種類のブロック訂正符号を適用する例を示す。
【0060】
2種類のブロック訂正符号のうち、一方のブロック訂正符号の訂正論理(第1の訂正論理)は、12ビットデータを4ビット×3ブロックに分割し、それぞれのブロック内において1ビットの誤りを訂正する、というものである。他方のブロック訂正符号の訂正論理(第2の訂正論理)は、12ビットデータを6ビット×2ブロックに分割し、それぞれのブロック内において1ビットの誤りを訂正する、というものである。
【0061】
図12は、2種類のブロック訂正符号における検査行列の一例を示す図である。
H1は、第1の訂正論理を用いる場合の検査行列の例であり、H2は、第2の訂正論理を用いる場合の検査行列の例である。H1、H2は、1列目から12列目までの行列(A1、A2)に、13列目から24列までの12行×12列の単位行列(I)を連結した行列となっている。
【0062】
検査符号を生成するための生成行列は、A1、A2の転置行列を、13列目から24列目とし、1列目から12列目までをIとしたものである。ただし、検査符号は、A1、A2を用いて
図13のように表すこともできる。このため、A1、A2を生成行列(またはその一部)ということもできる。
【0063】
図13は、2種類のブロック訂正符号における検査符号の算出例を示す図である。
cb
a0~cb
a11はA1を用いて得られる検査符号であり、cb
b0~cb
b11はA2を用いて得られる検査符号である。
【0064】
図14は、2種類のブロック訂正符号における検査符号間の相関の例を示す図である。
cb
a0~cb
a11の列ベクトルをcb
aと表記し、data0~data11の列ベクトルをdataと表記すると、cb
aは、cb
a=A1・dataという式によって求められる。
【0065】
A1は正方行列であるため、逆行列A1-1が求められる。cbb0~cbb11の列ベクトルをcbbと表記すると、cbbは、cbaに対して、cbb=A2・A1-1・A1・data=A2・A1-1・cba、という関係で表すことができ、cbaからcbbに変換することができる。
【0066】
このため、検査符号生成部22b1は、cbaだけをPCBとしてデータに付加してメモリ21に書き込むことで、読み出し時には、誤り訂正部22b2は、上記の式により、cbaからcbbに変換可能となる。
【0067】
たとえば、data5とdata6が誤りであった場合、
図12のH1では、同一のブロック内に2ビットの誤りをもつことになり訂正不可となる。その場合、誤り訂正部22b2は、cb
aからcb
bに変換して、
図12のH2に基づく誤り訂正を行うことで、1つのブロック内に1つの誤りをもつ状態となり、訂正可能となる。
【0068】
このように、データにcbaを付加してメモリ21に書き込むことで、2種類の訂正論理により保護可能となる。
また、cba(cba0~cba11)だけをデータに付加すればよいため、cba0~cba11とcbb0~cbb11を連結してデータに付加するよりも検査符号数(検査ビット数)を少なくできる。このため、データの符号化効率が悪化することを抑制できる。
【0069】
(2種類のブロック訂正符号への適用例(その2))
次に、24ビットのデータ(data0~data23)に対して、2種類のブロック訂正符号を適用する例を示す。
【0070】
2種類のブロック訂正符号のうち、一方のブロック訂正符号による訂正論理(第3の訂正論理)は、24ビットデータを8ビット×3ブロックに分割し、それぞれのブロック内において1ビットの誤りを訂正する、というものである。他方のブロック訂正符号による訂正論理(第4の訂正論理)は、24ビットデータを12ビット×2ブロックに分割し、それぞれのブロック内において1ビットの誤りを訂正する、というものである。
【0071】
図15は、2種類のブロック訂正符号における検査符号の算出例を示す図である。
A3は、第3の訂正論理を用いる場合の検査行列から単位行列部分を除いた行列であり、A4は、第4の訂正論理を用いる場合の検査行列から単位行列部分を除いた行列である。
【0072】
検査符号は、A3、A4を用いて
図15のように表すことができる。
cb
A0~cb
A11はA3を用いて得られる検査符号であり、cb
B0~cb
B11はA4を用いて得られる検査符号である。
【0073】
1つ目の適用例とは異なり、A3、A4は正方行列ではないため、逆行列を用いた変換はできない。そこで、検査符号生成部22b1は、cbA(cbA0~cbA11の列ベクトル)とcbB(cbB0~cbB11の列ベクトル)の間の相関部分と非相関部分とを連結したPCBを生成する。
【0074】
図15において、A3とA4の類似部分から、cb
Aとcb
Bは、以下のような関係をもつ。
図15のように、cb
B0はcb
A0とcb
A4の排他的論理和で表され、cb
B1はcb
A1とcb
A5の排他的論理和で表され、cb
B2はcb
A2とcb
A4の排他的論理和で表され、cb
B3はcb
A3とcb
A5の排他的論理和で表される。また、cb
B6はcb
A6とcb
A8の排他的論理和で表され、cb
B7はcb
A7とcb
A9の排他的論理和で表され、cb
B8はcb
A6とcb
A10の排他的論理和で表され、cb
B9はcb
A7とcb
A11の排他的論理和で表される。
【0075】
図16は、2種類のブロック訂正符号における検査符号間の相関の例を示す図である。
上記のようにcb
B0~cb
B11のうち、上記の8ビットはcb
Aから求めることができる。そのため、cb
Aを相関部分、cb
B0~cb
B11のうち上記の8ビット以外(cb
B4、cb
B5、cb
B10、cb
B11)を非相関部分として、これらを連結したPCBが生成される。
【0076】
非相関部分は、4ビットだけであるため、cbA0~cbA11とcbB0~cbB11を連結してデータに付加するよりも検査符号数(検査ビット数)を少なくできる。このため、データの符号化効率が悪化することを抑制できる。
【0077】
検査符号生成部22b1は、
図16のようなPCBをデータに付加してメモリ21に書き込む。読み出し時には、誤り訂正部22b2は、cb
bのうち、cb
B4、cb
B5、cb
B10、cb
B11以外を上記の式により、cb
Aから求めることができる。
【0078】
このように、データに
図16に示すようなPCBを付加してメモリ21に書き込むことで、2種類の訂正論理により保護可能となる。
(リードソロモン符号への適用例)
次に、組み合わせる2種類のECCとして、リードソロモン符号と1ビット訂正符号を適用する場合について説明する。
【0079】
図17は、リードソロモン符号と1ビット訂正符号を組み合わせた場合の検査行列の例と検査バイトの算出例を示す図である。
図17には、3行8列の検査行列の例が示されている。αは、F
256(256個の元をもつ集合)の原始元である。すなわち、256個の元を、α
xで生成できる。この検査行列と、8バイトのデータ(data0~data7)の行列積により、3バイトの検査バイト(CB
A0~CB
A2)が得られる。
【0080】
CB
A1は偶数位置バイトに対する1ビット訂正符号の検査符号となっており、CB
A2は奇数位置バイトに対する1ビット訂正符号の検査符号となっている。
図18は、リードソロモン符号の検査行列の例と検査バイトの算出例を示す図である。
【0081】
図18には、2行8列のリードソロモン符号の検査行列の例が示されている。この検査行列と、8バイトのデータ(data0~data7)の行列積により、2バイトの検査バイト(CB
B0~CB
B1)が得られる。
【0082】
ここで、CB
B0~CB
B1はCB
A0~CB
A2を用いて表すことができる。すなわち、
図18のように、CB
B0=CB
A0であり、CB
B1はCB
A1とCB
A2の排他的論理和で表すことができる。
【0083】
図19は、リードソロモン符号を含む2種類の訂正符号における検査符号間の相関の例を示す図である。
上記のようにCB
B0~CB
B1はCB
A0~CB
A2から求めることができるため、検査符号生成部22b1は、
図18のようなCB
A0~CB
A2からなるPCBをデータに付加してメモリ21に書き込む。
【0084】
なお、
図19には、偶数位置バイトに対する1ビット訂正符号の検査符号(cb
x)がCB
A1であること、及び、奇数位置バイトに対する1ビット訂正符号の検査符号(cb
y)がCB
A2であることが示されている。
【0085】
このように、データに
図19に示すようなPCBを付加してメモリ21に書き込むことで、1ビット訂正符号とリードソロモン符号の2種類のECCで保護可能となる。
また、CB
A0~CB
A2だけをデータに付加すればよいため、CB
A0~CB
A2とCB
B0~CB
B1を連結してデータに付加するよりも検査符号数(検査ビット数)を少なくできる。このため、データの符号化効率が悪化することを抑制できる。
【0086】
以上、実施の形態に基づき、本発明の記憶装置及び記憶装置の制御方法の一観点について説明してきたが、これらは一例にすぎず、上記の記載に限定されるものではない。
たとえば、複数種類のECCの組み合せとして、BCH符号とリードソロモン符号との組み合せを用いてもよい。
【符号の説明】
【0087】
10 記憶装置
11 メモリ
12 メモリ制御部