(57)【要約】【課題】誤り訂正をより高精度に実行可能なメモリシステムを提供する。【解決手段】実施形態のメモリシステムは、メモリコントローラと、不揮発性メモリと、を備える。メモリコントローラは、ホストから受信したユーザデータに対して誤り訂正符号化を実行して第１符号化データを生成し、予め定められた１以上のデータそれぞれに対して誤り訂正符号化を実行して得られる１以上の第２符号化データそれぞれに第１符号化データを加算することにより、第１符号化データに対して誤り抑制符号化を実行した１以上の第３符号化データを生成し、第１符号化データおよび１以上の第３符号化データのうちいずれか１つの符号化データを選択する。不揮発性メモリは、選択された符号化データを記憶する。【選択図】図１
2020135391.tif 000002
【特許請求の範囲】
【請求項１】
ホストから受信したユーザデータに対して誤り訂正符号化を実行して第１符号化データを生成し、
予め定められた１以上のデータそれぞれに対して前記誤り訂正符号化を実行して得られる１以上の第２符号化データそれぞれに前記第１符号化データを加算することにより、前記第１符号化データに対して誤り抑制符号化を実行した１以上の第３符号化データを生成し、
前記第１符号化データおよび１以上の前記第３符号化データのうちいずれか１つの符号化データを選択する、
メモリコントローラと、
選択された前記符号化データを記憶する不揮発性メモリと、
を備えるメモリシステム。
【請求項２】
前記メモリコントローラは、前記第１符号化データおよび１以上の前記第３符号化データのうち、誤り発生確率が他の符号化データより小さいと推定される１つの符号化データを選択する、
請求項１に記載のメモリシステム。
【請求項３】
前記誤り訂正符号化および前記誤り抑制符号化は、予め定められた位数の有限体で線形性を有する、
請求項１に記載のメモリシステム。
【請求項４】
前記誤り訂正符号化は、符号を構成するシンボルのうち少なくとも１つのシンボルが少なくとも第１成分符号と前記第１成分符号とは異なる第２成分符号とによって保護される多次元の誤り訂正符号を生成する符号化であり、
前記第１符号化データは、前記第１成分符号である、
請求項１に記載のメモリシステム。
【請求項５】
前記誤り訂正符号化は、第１誤り訂正符号および第２誤り訂正符号による連接符号を生成する符号化であり、
前記第１符号化データは、前記第１誤り訂正符号である、
請求項１に記載のメモリシステム。
【請求項６】
前記誤り訂正符号化の単位とするデータのサイズと、前記誤り抑制符号化の単位とするデータのサイズとが同じである、
請求項１に記載のメモリシステム。
【請求項７】
前記誤り訂正符号化の単位とするデータのサイズである第１サイズと、前記誤り抑制符号化の単位とするデータのサイズである第２サイズとが異なり、
前記メモリコントローラは、
前記第１サイズと前記第２サイズとの相違に応じた個数の複数の前記第２符号化データそれぞれに、前記第１符号化データを加算した複数の前記第３符号化データを生成する、
請求項１に記載のメモリシステム。
【請求項８】
予め定められた前記データは、前記第１符号化データを加算したときに、前記第１符号化データに含まれる各ビットの値を反転させる値を含む、
請求項１に記載のメモリシステム。
【請求項９】
予め定められた前記データは、ランダムに生成された値を含む、
請求項１に記載のメモリシステム。
【請求項１０】
前記メモリコントローラは、
前記不揮発性メモリから読み出された前記符号化データに対して誤り訂正復号を実行し、誤り訂正復号による復号結果に対して誤り抑制復号を実行する、
請求項１に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
以下の実施形態は、メモリシステムに関する。
【背景技術】
【０００２】
近年、記憶装置はますますその記憶密度の集積度を上げており、それとともに１つの記憶素子の信頼性は低下してきている。実用的な信頼性を保つため、多くの記憶装置は誤り訂正符号（ＥＣＣ：Error  Correction  Code）を採用している。記憶情報のパターンによって信頼性が変わる記憶素子の場合は、書き込む際に誤りが生じにくいパターンになるような変換をさらに実行することがある。このような変換は、誤り抑制符号（ＥＭＣ：Error  Mitigation  Code）または制約符号（Constrained  Code）と呼ばれる。誤り抑制符号は誤りの数を減らすことができるが、それだけで実用的な信頼性を確保できないため、通常は誤り訂正符号と併用して使われる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２０１７／０２６２３７９号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明の１つの実施形態は、誤り訂正をより高精度に実行可能なメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【０００５】
実施形態のメモリシステムは、メモリコントローラと、不揮発性メモリと、を備える。メモリコントローラは、ホストから受信したユーザデータに対して誤り訂正符号化を実行して第１符号化データを生成し、予め定められた１以上のデータそれぞれに対して誤り訂正符号化を実行して得られる１以上の第２符号化データそれぞれに第１符号化データを加算することにより、第１符号化データに対して誤り抑制符号化を実行した１以上の第３符号化データを生成し、第１符号化データおよび１以上の第３符号化データのうちいずれか１つの符号化データを選択する。不揮発性メモリは、選択された符号化データを記憶する。
【図面の簡単な説明】
【０００６】
【図１】図１は、第１の実施形態に係るメモリシステムの概略構成例を示すブロック図である。
【図２】図２は、第１の実施形態に係るメモリシステムによる符号化および復号の流れを説明するための図である。
【図３】図３は、第１の実施形態の誤り抑制符号化部の詳細な機能構成の一例を示すブロック図である。
【図４】図４は、第１の実施形態の符号化処理の流れの一例を示すフローチャートである。
【図５】図５は、変形例１に係る誤り抑制符号化部の詳細な機能構成の一例を示すブロック図である。
【図６】図６は、変形例２に係る誤り抑制符号化部の詳細な機能構成の一例を示すブロック図である。
【図７】図７は、第２の実施形態に係るメモリシステムの概略構成例を示すブロック図である。
【図８】図８は、第２の実施形態の符号化処理の流れを説明する図である。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、実施形態に係るメモリシステムを詳細に説明する。なお、以下の実施形態により本発明が限定されるものではない。
【０００８】
以下では、誤り訂正符号は、符号化の対象となるデータと、誤り訂正符号による冗長部（ＥＣＣパリティ）とが明確に区別できる組織符号とする。同様に誤り抑制符号は、符号化の対象となるデータと、誤り抑制符号による冗長部（ＥＭＣフラグ）とが明確に区別できる組織符号とする。
【０００９】
このような誤り抑制符号には、例えばアシンメトリック・コーディング（Asymmetric  Coding）がある。アシンメトリック・コーディングでは、データのビット系列の０と１の数に基づいて、これらのビットを反転（ビットフリップ）させた方が誤りが少なくなると判断された場合に、データのビットが反転され、かつ、ビットを反転させたことを示す情報（例えば１）がＥＭＣフラグに書き込まれる。また、ビットを反転させない方が誤りが少なくなると判断された場合、データのビットは反転されず、かつ、ビットを反転させないことを示す情報（例えば０）がＥＭＣフラグに書き込まれる。ビットの反転は、例えば、ビットごとに、値が「１」のビットとの排他的論理和を算出することにより実現される。
【００１０】
このようにＥＭＣフラグは、誤り抑制符号化で行われた処理を識別するための情報である。アシンメトリック・コーディングでは、上記のように、ビットを反転したか否かによって例えば「１」または「０」がＥＭＣフラグに設定される。なおＥＭＣフラグの設定方法はこれに限られるものではなく、適用する誤り訂正符号によって変更されうる。
【００１１】
（第１の実施形態）
まず、本実施形態に係るメモリシステムについて、図面を参照して詳細に説明する。図１は、本実施形態に係るメモリシステムの概略構成例を示すブロック図である。図１に示すように、メモリシステム１は、メモリコントローラ１０と不揮発性メモリ２０とを備える。メモリシステム１は、ホスト３０と接続可能であり、図１ではホスト３０と接続された状態が示されている。ホスト３０は、例えば、パーソナルコンピュータ、携帯端末などの電子機器であってよい。
【００１２】
不揮発性メモリ２０は、データを不揮発に記憶する不揮発性メモリであり、例えば、ＮＡＮＤ型フラッシュメモリ（以下、単にＮＡＮＤメモリという）である。以下の説明では、不揮発性メモリ２０としてＮＡＮＤメモリが用いられた場合を例示するが、不揮発性メモリ２０として３次元構造フラッシュメモリ、ＲｅＲＡＭ（Resistive  Random  Access  Memory）、ＦｅＲＡＭ（Ferroelectric  Random  Access  Memory）等のＮＡＮＤメモリ以外の記憶装置を用いることも可能である。また、不揮発性メモリ２０が半導体メモリであることは必須ではなく、半導体メモリ以外の種々の記憶媒体に対して本実施形態を適用することも可能である。
【００１３】
メモリシステム１は、いわゆるＳＳＤ（Solid  State  Drive）や、メモリコントローラ１０と不揮発性メモリ２０とが１つのパッケージとして構成されるメモリカード等、不揮発性メモリ２０を備える種々のメモリシステムであってよい。
【００１４】
メモリコントローラ１０は、ホスト３０からの書き込み要求に従って不揮発性メモリ２０への書き込みを制御する。また、ホスト３０からの読み出し要求に従って不揮発性メモリ２０からの読み出しを制御する。メモリコントローラ１０は、例えばＳｏＣ（System  On  a  Chip）として構成される半導体集積回路である。メモリコントローラ１０は、ホストＩ／Ｆ（ホストインタフェース）１５、メモリＩ／Ｆ（メモリインタフェース）１３、制御部１１、符号化部１４、復号部１６およびデータバッファ１２を備える。ホストＩ／Ｆ１５、メモリＩ／Ｆ１３、制御部１１、符号化部１４、復号部１６およびデータバッファ１２は、内部バス１９で相互に接続されている。以下で説明するメモリコントローラ１０の各構成要素の動作の一部または全部は、ＣＰＵ（Central  Processing  Unit）がファームウェアを実行することによって実現されてもよいし、ハードウェアで実現されてもよい。
【００１５】
ホストＩ／Ｆ１５は、ホスト３０との間のインタフェース規格に従った処理を実施し、ホスト３０から受信した命令、書き込み対象のユーザデータなどを内部バス１９に出力する。また、ホストＩ／Ｆ１５は、不揮発性メモリ２０から読み出されて復元されたユーザデータ、制御部１１からの応答などをホスト３０へ送信する。
【００１６】
メモリＩ／Ｆ１３は、制御部１１の指示に基づいて、不揮発性メモリ２０への書き込み処理を行う。また、メモリＩ／Ｆ１３は、制御部１１の指示に基づいて、不揮発性メモリ２０からの読み出し処理を行う。
【００１７】
データバッファ１２は、メモリコントローラ１０がホスト３０から受信したユーザデータを不揮発性メモリ２０へ記憶するまでに一時記憶する。また、データバッファ１２は、不揮発性メモリ２０から読み出したユーザデータをホスト３０へ送信するまでに一時記憶する。データバッファ１２には、例えば、ＳＲＡＭ（Static  Random  Access  Memory）やＤＲＡＭ（Dynamic  Random  Access  Memory）などの汎用メモリを用いることができる。なお、データバッファ１２は、メモリコントローラ１０に内蔵されずに、メモリコントローラ１０の外部に搭載されてもよい。
【００１８】
制御部１１は、メモリシステム１の各構成要素を統括的に制御する。制御部１１は、ホスト３０からホストＩ／Ｆ１５経由で命令を受けた場合に、その命令に従った制御を行う。例えば、制御部１１は、ホスト３０からの命令に従って、不揮発性メモリ２０へのユーザデータおよびパリティの書き込みをメモリＩ／Ｆ１３へ指示する。また、制御部１１は、ホスト３０からの命令に従って、不揮発性メモリ２０からのユーザデータおよびパリティの読み出しをメモリＩ／Ｆ１３へ指示する。
【００１９】
また、制御部１１は、ホスト３０からユーザデータの書き込み要求を受信した場合、データバッファ１２に蓄積されるユーザデータに対して、不揮発性メモリ２０上の記憶領域（メモリ領域）を決定する。すなわち、制御部１１は、ユーザデータの書き込み先を管理する。ホスト３０から受信したユーザデータの論理アドレスと該ユーザデータが記憶された不揮発性メモリ２０上の記憶領域を示す物理アドレスとの対応はアドレス変換テーブルとして記憶される。
【００２０】
また、制御部１１は、ホスト３０から読み出し要求を受信した場合、読み出し要求により指定された論理アドレスを上述のアドレス変換テーブルを用いて物理アドレスに変換し、該物理アドレスからの読み出しをメモリＩ／Ｆ１３へ指示する。
【００２１】
ＮＡＮＤメモリでは、一般に、ページと呼ばれるデータ単位で、書き込みおよび読み出しが行われ、ブロックと呼ばれるデータ単位で消去が行われる。本実施形態では、同一のワード線に接続される複数のメモリセルをメモリセルグループと呼ぶ。メモリセルがシングルレベルセル（ＳＬＣ：Single  Level  Cell）である場合は、１つのメモリセルグループが１ページに対応する。メモリセルがマルチレベルセル（ＭＬＣ：Multiple  Level  Cell）である場合は、１つのメモリセルグループが複数ページに対応する。なお、本説明において、ＭＬＣには、１つのメモリセルに３ビットを記憶するＴＬＣ（Triple  Level  Cell）や１つのメモリセルに４ビットを記憶するＱＬＣ（Quad  Level  Cell）等が含まれる。また、各メモリセルはワード線に接続するとともにビット線にも接続される。従って、各メモリセルは、ワード線を識別するアドレスとビット線を識別するアドレスとで識別することが可能である。
【００２２】
ホスト３０から送信されるユーザデータは、内部バス１９に転送されてデータバッファ１２に一旦記憶される。
【００２３】
符号化部１４は、不揮発性メモリ２０に記憶されるユーザデータを符号化して符号語を生成する。符号化部１４は、ＥＣＣ符号化部１４ａと、誤り抑制符号化部１４ｂと、を備えている。なお、符号化部１４により符号化されるデータには、ユーザデータ以外にも、メモリコントローラ１０内部で用いる制御データ等が含まれてもよい。
【００２４】
ＥＣＣ符号化部１４ａは、不揮発性メモリ２０に記憶されるユーザデータに対する誤り訂正符号化を行う。誤り抑制符号化部１４ｂは、誤り訂正符号化されたデータに対する、誤り抑制符号化を行う。
【００２５】
誤り抑制符号化は、書込み対象のデータを変換することによりメモリセルの閾値電圧に偏りを持たせる処理である。これにより、セル疲弊およびビットエラーレート（ＢＥＲ）に関して特性の悪い閾値電圧へプログラムされるセルを削減し、特性の良い閾値電圧へプログラムされるセルを増加させることができる。セル疲弊とは、セル間干渉効果、並びに、書込みおよび消去によるメモリセルの疲弊を意味する。
【００２６】
例えば、セル疲弊およびＢＥＲ特性は、閾値電圧が高いほど悪い傾向となる場合がある。このような場合、誤り抑制符号化部１４ｂは、高い閾値電圧のメモリセルの出現確率Ｐ（Ｖｔｈ）を低く、低い閾値電圧のメモリセルの出現確率Ｐ（Ｖｔｈ）を高くするように誤り抑制符号化を行う。
【００２７】
復号部１６は、不揮発性メモリ２０から読み出された受信語を復号してユーザデータを復元する。復号部１６は、ＥＣＣ復号部１６ａと、誤り抑制復号部１６ｂと、を備えている。
【００２８】
ＥＣＣ復号部１６ａは、不揮発性メモリ２０から読み出された受信語に対する誤り訂正復号を行う。誤り抑制復号部１６ｂは、誤り訂正復号されたデータに対する、誤り抑制復号を行う。
【００２９】
次に、本実施形態の不揮発性メモリ２０への書き込み処理について説明する。制御部１１は、不揮発性メモリ２０への書き込み時に、ユーザデータの符号化を符号化部１４に指示する。その際、制御部１１は、不揮発性メモリ２０における符号語の記憶場所（記憶アドレス）を決定し、決定した記憶場所もメモリＩ／Ｆ１３へ指示する。
【００３０】
符号化部１４のＥＣＣ符号化部１４ａは、制御部１１からの指示に基づいて、データバッファ１２上のユーザデータに対して誤り訂正符号化を実行する。次に、誤り抑制符号化部１４ｂは、誤り訂正符号化後のユーザデータをデータバッファ１２から読み出し、読み出したユーザデータに対して誤り抑制符号化を実行して符号語を生成する。
【００３１】
誤り訂正符号の符号化方式としては、例えば、ＢＣＨ（Bose-Chaudhuri-Hocquenghem）符号、ＲＳ（Reed-Solomon）符号のような代数的符号を用いた符号化方式、および、ＬＤＰＣ（Low-Density  Parity-Check）符号のような疎グラフに基づく符号を用いた符号化方式を採用することができる。メモリＩ／Ｆ１３は、制御部１１から指示された不揮発性メモリ２０上の記憶場所へ符号語を記憶する制御を行う。
【００３２】
次に、本実施形態の不揮発性メモリ２０からの読み出し時の処理について説明する。制御部１１は、不揮発性メモリ２０からの読み出し時に、不揮発性メモリ２０上のアドレスを指定してメモリＩ／Ｆ１３へ読み出しを指示する。また、制御部１１は、復号部１６へ復号の開始を指示する。メモリＩ／Ｆ１３は、制御部１１の指示に従って、不揮発性メモリ２０の指定されたアドレスから受信語を読み出し、読み出した受信語を復号部１６に入力する。復号部１６のＥＣＣ復号部１６ａは、この不揮発性メモリ２０から読み出された受信語に対して誤り訂正復号を実行する。その後、誤り抑制復号部１６ｂは、誤り訂正復号されたデータに対して、誤り抑制復号を実行する。
【００３３】
次に、本実施形態のメモリシステム１による符号化および復号の流れについてさらに説明する。図２は、メモリシステム１による符号化および復号の流れを説明するための図である。
【００３４】
符号化の対象となるデータ２０１は、まずＥＣＣ符号化部１４ａにより誤り訂正符号化される。誤り訂正符号化されたデータは、誤り抑制符号化部１４ｂにより誤り抑制符号化される。図２の線２１１および線２１２は、それぞれ誤り抑制符号および誤り訂正符号により保護される範囲を示している。このように、本実施形態によれば、データ２０２ａ、ＥＭＣフラグ２０２ｂ、および、ＥＣＣパリティ２０２ｃのすべてが、誤り抑制符号および誤り訂正符号の両方により保護される。不揮発性メモリ２０は、このようにして保護されたデータを記憶する。
【００３５】
復号時には、不揮発性メモリ２０から読み出された受信語が、ＥＣＣ復号部１６ａに渡される。受信語は、データ２０３ａ、ＥＭＣフラグ２０３ｂ、および、ＥＣＣパリティ２０３ｃを含む。図２内の「×」印３０３ｄは、ＥＭＣフラグ２０３ｂ内に誤りが含まれることを表している。
【００３６】
本実施形態では、受信語に対して、まずＥＣＣ復号部１６ａによる誤り訂正復号が実行される。データ２０４ａおよびＥＭＣフラグ２０４ｂは、この誤り訂正復号により復号されたデータを表す。この例では、誤り訂正復号により、ＥＭＣフラグ２０３ｂ内の誤りが訂正され、誤りを含まないＥＭＣフラグ２０４ｂが得られている。また、図２に示すように、データ２０４ａおよびＥＭＣフラグ２０４ｂは、いずれも誤り抑制符号により保護されている。
【００３７】
データ２０４ａおよびＥＭＣフラグ２０４ｂに対して、誤り抑制復号部１６ｂが、誤り抑制復号を実行する。ＥＭＣフラグ２０４ｂに含まれる誤りは訂正されているため、誤りが増幅されることはない。データ２０５ａは、誤り抑制復号により得られたデータである。
【００３８】
図２に示すような符号化および復号を実現するための機能について図３および図４を用いて説明する。図３は、本実施形態の誤り抑制符号化部１４ｂの詳細な機能構成の一例を示すブロック図である。図４は、本実施形態の符号化処理の流れの一例を示すフローチャートである。
【００３９】
ＥＣＣ符号化部１４ａは、符号化対象のデータ３０１ａに、誤り抑制符号化によりデータを変換しないことを示す値を設定したＥＭＣフラグ３０１ｂを付したデータを対象として、誤り訂正符号化を行う（ステップＳ１０１）。アシンメトリック・コーディングを用いる場合、図３に示すように、ＥＣＣ符号化部１４ａは、データを反転しないことを示す「０」が設定されたＥＭＣフラグ３０１ｂが付与されたデータ３０１ａに対して誤り訂正符号化を実行する。この結果、ＥＣＣパリティ３０１ｃが付与されたデータが、誤り訂正符号化による符号化データ（第１符号化データ）として出力される。
【００４０】
ＥＣＣ符号化部１４ａは、予め定められた位数の有限体に対して、誤り抑制符号化部１４ｂが採用する誤り抑制符号化方式と共通に線形性を有する誤り訂正符号化方式を用いる。例えばアシンメトリック・コーディングを用いる場合、ＥＣＣ符号化部１４ａは、位数が２の有限体で線形性を有するＬＤＰＣ符号による符号化方式を用いる。位数が２の有限体で線形性を有する符号化方式はＬＤＰＣ符号に限られず、例えば、ＢＣＨ符号を用いてもよい。なお、以下では、位数がｎの有限体をＧＦ（ｎ）と表記する場合がある。例えば位数が２の有限体はＧＦ（２）と表される。
【００４１】
また、以下では、誤り訂正符号化および誤り抑制符号化の単位とするデータをフレームという。誤り訂正符号化のフレームのサイズ（フレームサイズ）と、誤り抑制符号化のフレームサイズとは、同じであってもよいし、異なっていてもよい。本実施形態では、両者が同じである場合について説明する。
【００４２】
ＥＣＣ符号化部１４ａが、上記のようにして誤り訂正符号化を行ったフレーム全体（データ３０１ａ、ＥＭＣフラグ３０１ｂ、ＥＣＣパリティ３０１ｃ）は、誤り訂正保護されている。
【００４３】
ＥＣＣ符号化部１４ａが誤り訂正符号化を実行した後、誤り抑制符号化部１４ｂは、誤り訂正符号化後のフレームに対して誤り抑制符号化を実行する。誤り抑制符号化部１４ｂは、加算部３５１と、選択部３５２と、を備えている。
【００４４】
加算部３５１は、予め定められたデータに対して誤り訂正符号化を実行して得られる符号化データ（第２符号化データ）と、ステップＳ１０１で得られる誤り訂正符号化後の符号化データ（第１符号化データ）とを加算し、加算結果である符号化データ（第３符号化データ）を出力する（ステップＳ１０２）。
【００４５】
予め定められたデータは、例えば、ステップＳ１０１で得られる符号化データを加算したときに、この符号化データに含まれる各ビットの値を反転させる値（例えば全ビットが「１」のデータ、図３のデータ３１１ａ）を含むデータである。また予め定められたデータは、誤り抑制符号化によりデータを変換することを示す値、例えばビットを反転することを示す「１」が設定されたＥＭＣフラグ（図３のＥＭＣフラグ３１１ｂ）を含む。このように定められたデータに対して誤り訂正符号化を実行して得られる符号化データ（第２符号化データ）は、ＥＣＣパリティ３１１ｃをさらに含むデータである。
【００４６】
図３の例では、加算部３５１は、入力されたフレームのデータ部（データ３０１ａ）には全ビットが「１」であるデータ３１１ａを加算する。これにより、データ３０１ａのビットが反転される。また加算部３５１は、ＥＭＣフラグ３０１ｂには値が「１」であるビットが設定されたＥＭＣフラグ３１１ｂを加算する。加算部３５１は、ＥＣＣパリティ３０１ｃには、データ３１１ａとＥＭＣフラグ３１１ｂとに対する、予め算出したＥＣＣパリティ３１１ｃを加算する。加算は、例えば、ビットごとの排他的論理和である。すなわちＧＦ（２）で定義される加算演算である。
【００４７】
選択部３５２は、加算部３５１による演算で生成されたデータ（フレーム）と、元の入力フレーム（ステップＳ１０１により得られる符号化データ）とのうちいずれか１つを選択して出力する（ステップＳ１０３）。例えば選択部３５２は、各フレームの誤り発生確率を推定し、誤り発生確率がより小さい方を選択して出力する。誤り発生確率の推定方法はどのような方法であってもよいが、例えば以下のような方法を適用できる。
【００４８】
（推定方法１）
誤り発生確率が大きいビット値（例えば「１」）の個数が、誤り発生確率が小さいビット値（例えば「０」）の個数より小さいフレームを、誤り発生確率が小さいフレームとして選択する。
（推定方法２）
誤り発生確率が大きいビットパターンがより少ないフレームを、誤り発生確率が小さいフレームとして選択する。ビットパターンは、例えば、ＭＬＣに書き込む単位のビットのパターンである。例えばメモリセルがＴＬＣの場合であれば、各メモリセルに書き込むデータに相当する３ビットのパターンがビットパターンである。より具体的には、「０００」、「００１」、「０１０」。「０１１」、「１００」、「１０１」、「１１０」、および、「１１１」の８つのビットパターンが存在する。ビットパターンごとの誤り発生確率が算出できる場合は、各フレームに含まれるビットパターンの誤り発生確率の和を求め、求めた和がより小さいフレームを、誤り発生確率が小さいフレームとして選択してもよい。
【００４９】
メモリＩ／Ｆ１３は、選択された符号化データを、不揮発性メモリ２０に記憶する（ステップＳ１０４）。
【００５０】
誤り抑制符号を誤り訂正符号と併用する構成の例としては、誤り抑制符号を外符号とする方法と、誤り抑制符号を内符号とする方法とが考えられる。誤り抑制符号を外符号とする方法は、符号化時には誤り抑制符号化を行ってから誤り訂正符号化を行い、復号時には誤り訂正復号を行ってから誤り抑制復号を行う方法である。誤り抑制符号を内符号とする方法は、符号化時には誤り訂正符号化を行ってから誤り抑制符号化を行い、復号時には誤り抑制復号を行ってから誤り訂正復号を行う方法である。
【００５１】
誤り抑制符号を外符号とする場合、データはまず誤り抑制符号化される。これにより通常、データが誤り抑制される。また符号化方式によってはＥＭＣフラグも誤り抑制することが可能である。誤り抑制されたデータが、その後誤り訂正符号化される。このとき付与されるＥＣＣパリティは誤り抑制処理が実行されていないため、データおよびＥＭＣフラグに比べて誤り易いという問題がある。
【００５２】
誤り抑制符号を内符号とする場合、データ、ＥＣＣパリティおよび誤り抑制符号のすべてに誤り抑制処理が実行されるため、誤り抑制符号を外符号とする場合に比べて誤り抑制性能が高い。しかし誤り抑制符号を内符号とする場合には、ＥＭＣフラグが誤り訂正符号により保護されないという問題が生じる。例えば、誤り訂正復号より誤り抑制復号が先に実行されるが、ＥＭＣフラグに誤りが生じていた場合、誤り抑制復号の段階で誤りが増幅される。このため、後段の誤り訂正復号が失敗する可能性が高くなる。
【００５３】
これに対して本実施形態では、誤り訂正符号と誤り抑制符号とを併用する場合であっても、上記のような問題の発生を抑制し、誤り訂正をより高精度に実行可能となる。
【００５４】
すなわち、本実施形態に係るメモリシステムは、データ、ＥＭＣフラグおよびＥＣＣパリティの全フィールドを用いて誤り発生確率を推定し、より誤り発生確率の小さいフレームを選択して出力できる。言い換えると、本実施形態では、フレーム全体に誤り抑制符号の効果が及んでいる。また、出力されたフレームがビット反転されない元の入力フレーム（ステップＳ１０１により得られる符号化データ）の場合、この入力フレームは、誤り訂正保護されているため、出力されたフレームは誤り訂正保護されている。さらに、出力されたフレームがビット反転されたフレーム（ステップＳ１０２により得られる符号化データ）の場合、出力されたフレームは、ＧＦ（２）上の線形符号の符号語同士が加算されたデータであるため、やはり誤り訂正符号の符号語となっている。すなわち、いずれのフレームが選択された場合であっても、選択されたフレームは、フレーム全体が誤り訂正保護された状態である。
【００５５】
以上のように、本実施形態によれば、誤り訂正符号化と誤り抑制符号化を行って生成されるデータ系列は、その全体が誤り抑制保護され、かつ、誤り訂正保護されている。データ系列全体が誤り抑制されているため、例えば誤り抑制符号を外符号とする場合と比較して、誤り抑制符号に発生する誤りを低減することができる。また、復号時には、まず誤り訂正復号が実行され、ＥＭＣフラグを含む全体の誤りを取り除いてから誤り抑制復号が実行される。このため、例えば誤り抑制符号を内符号とする場合に発生する誤り抑制復号時の誤り増幅は、本実施形態では発生しない。
【００５６】
（変形例１）
次に、誤り訂正符号化および誤り抑制符号化のフレームサイズが相互に異なる場合について説明する。以下では、誤り訂正符号としてフレームサイズ１２７ビット、情報長１２０ビットのハミング符号を採用し、誤り抑制符号としてフレームサイズ６０ビット、情報長５９ビットのアシンメトリック・コーディングを採用した例を説明する。図５は、このような変形例１に係る誤り抑制符号化部１４ｂの詳細な機能構成の一例を示すブロック図である。図５の例では、アシンメトリック・コーディング（誤り抑制符号）の２フレームが、ハミング符号（誤り訂正符号）の１フレームに対応する。
【００５７】
まず、１１８ビットのデータ５００ａがＥＣＣ符号化部１４ａに入力される。ＥＣＣ符号化部１４ａは、１１８ビットのデータ５０１ａ（データ５００ａと同じ）に、ＥＭＣフラグのフィールド５０１ｂとして２ビット分の「０」を付与して１２０ビットのデータとする。ＥＣＣ符号化部１４ａは、この１２０ビットのデータに対して、ハミング符号による誤り訂正符号化を実行し、７ビットのパリティビット５０１ｃを付与して、１２７ビットのフレームを出力する。
【００５８】
次に誤り抑制符号化部１４ｂは、ＥＣＣ符号化部１４ａにより得られた１２７ビットのフレームに対して、予め用意された以下３つの誤り訂正符号語を加算し、元の入力フレームと合わせて４つの符号語の候補（符号語候補）を生成する。この加算演算は、ＧＦ（２）上の加算である。
【００５９】
符号語１：データ部は、１ビット目〜５９ビット目の、値が「０」であるデータ５１１−１ａと、６０ビット目〜１１８ビット目の、値が「１」であるデータ５１１−１ｂとを含む。ＥＭＣフラグ５１１−１ｃは、「０１」が設定される。このフラグは、１ビット目〜５９ビット目は反転されず、６０ビット目〜１１８ビット目は反転されることを示す。パリティビット５１１−１ｄは、データ部（データ５１１−１ａ、５１１−１ｂ）およびＥＭＣフラグ５１１−１ｃに対する、ハミング符号によるパリティビットが設定される。
【００６０】
符号語２：データ部は、１ビット目〜５９ビット目の、値が「１」であるデータ５１１−２ａと、６０ビット目〜１１８ビット目の、値が「０」であるデータ５１１−２ｂとを含む。ＥＭＣフラグ５１１−２ｃは、「１０」が設定される。このフラグは、１ビット目〜５９ビット目は反転され、６０ビット目〜１１８ビット目は反転されないことを示す。パリティビット５１１−２ｄは、データ部（データ５１１−２ａ、５１１−２ｂ）およびＥＭＣフラグ５１１−２ｃに対する、ハミング符号によるパリティビットが設定される。
【００６１】
符号語３：データ部は、１ビット目〜５９ビット目の、値が「１」であるデータ５１１−３ａと、６０ビット目〜１１８ビット目の、値が「１」であるデータ５１１−３ｂとを含む。ＥＭＣフラグ５１１−３ｃは、「１１」が設定される。このフラグは、１ビット目〜５９ビット目、および、６０ビット目〜１１８ビット目がいずれも反転されることを示す。パリティビット５１１−３ｄは、データ部（データ５１１−３ａ、５１１−３ｂ）およびＥＭＣフラグ５１１−３ｃに対する、ハミング符号によるパリティビットが設定される。
【００６２】
本変形例の誤り抑制符号化部１４ｂは、３つの加算部３５１−１、３５１−２、３５１−３を含む。加算部３５１−１、３５１−２、３５１−３は、それぞれ、入力フレーム（データ５０１ａ、ＥＭＣフラグのフィールド５０１ｂ、パリティビット５０１ｃ）に対して、上記の符号語１、２、３を加算する。
【００６３】
選択部３５２は、このようにして生成された４つの符号語候補に対しそれぞれ誤り発生確率を推定し、誤り発生確率がより小さい符号語を選択して出力する。図５に示すデータ５０２ａ、ＥＭＣフラグ５０２ｂ、および、パリティビット５０２ｃを含むデータが、このようにして選択された符号語を表す。
【００６４】
なお誤り抑制復号部１６ｂは、データ部の１ビット目〜５９ビット目、および、６０ビット目〜１１８ビット目を、それぞれＥＭＣフラグの１ビット目、および、２ビット目を参照することにより、誤り抑制復号することができる。
【００６５】
このように本変形例によれば、誤り訂正符号化のフレームサイズと誤り抑制符号化のフレームサイズとが異なる場合にも、フレーム全体に対する誤り抑制保護および誤り訂正保護を実現できる。
【００６６】
なお本変形例では、誤り訂正符号化の１フレームが、誤り抑制符号化の２フレームに対応する例を説明した。各符号化のフレームサイズの関係はこれに限られるものではない。他のフレームサイズとする場合は、各符号化のフレームサイズの相違に応じた個数の符号語候補を用いればよい。
【００６７】
（変形例２）
これまではＬＤＰＣ、ＢＣＨ、および、アシンメトリック・コーディングなどのように、ＧＦ（２）において線形性を有する符号を用いる例を説明した。適用可能な有限体はＧＦ（２）に限らず、誤り訂正符号および誤り抑制符号の両方が同じ有限体に対する線形性を有していれば、２以外の位数の有限体に対しても適用できる。
【００６８】
以下では、ＧＦ（２８）で線形性を有する、フレームサイズ２５６バイト、情報長２４０バイトのＲＳ符号を誤り訂正符号化に使用する場合の変形例について説明する。図６は、このような変形例２に係る誤り抑制符号化部１４ｂの詳細な機能構成の一例を示すブロック図である。
【００６９】
まず、２３９バイトのデータ６００ａがＥＣＣ符号化部１４ａに入力される。ＥＣＣ符号化部１４ａは、２３９バイトのデータ６０１ａ（データ６００ａと同じ）に、ＥＭＣフラグのフィールド６０１ｂとして１バイト分の「０」を付与して２４０バイトのデータとする。ＥＣＣ符号化部１４ａは、この２４０バイトのデータに対して、ＲＳ符号化を実行し、１６バイトのＲＳ符号パリティ６０１ｃを付与して、２５６バイトのフレームを出力する。
【００７０】
次に誤り抑制符号化部１４ｂは、ＥＣＣ符号化部１４ａにより得られた２５６バイトのフレームに対して、予め用意された２５５個の誤り訂正符号語の各々を加算し、元の入力フレームと合わせて２５６個の符号語候補を生成する。この加算演算は、ＧＦ（２８）上の加算である。
【００７１】
元の入力フレームを除く２５５個の誤り訂正符号語は、それぞれ、各バイトの値が１〜２５５（１６進数で０ｘ０１〜０ｘＦＦ）であり、これが２４０回繰り返され、さらにそれぞれについてＲＳ符号パリティ１６バイトが付与されたデータである。
【００７２】
例えば図６のデータ６１１−１ａは、各バイトの値が「１」である２３９バイトのデータである。ＥＭＣフラグ６１１−１ｂは、各バイトの値が「１」のＥＭＣフラグである。ＲＳ符号パリティ６１１−１ｃは、データ６１１−１ａおよびＥＭＣフラグ６１１−１ｂに対するＲＳ符号パリティが設定される。同様にして、各バイトの値が「２」であるデータ６１１−２ａおよびＥＭＣフラグ６１１−２ｂ、並びに、これらのデータ対するＲＳ符号パリティ６１１−２ｃを含む誤り訂正符号語が用意される。また、各バイトの値が「２５５」であるデータ６１１−２５５ａおよびＥＭＣフラグ６１１−２５５ｂ、並びに、これらのデータ対するＲＳ符号パリティ６１１−２５５ｃを含む誤り訂正符号語が用意される。
【００７３】
本変形例の誤り抑制符号化部１４ｂは、２５５個の加算部３５１−１〜３５１−２５５を含む。加算部３５１−１〜３５１−２５５は、それぞれ、入力フレーム（データ６０１ａ、ＥＭＣフラグのフィールド６０１ｂ、ＲＳ符号パリティ６０１ｃ）に対して、２５５個の誤り訂正符号語のうち対応する１つの誤り訂正符号語を加算する。
【００７４】
選択部３５２は、このようにして生成された２５６個の符号語候補に対しそれぞれ誤り発生確率を推定し、誤り発生確率がより小さい符号語を選択して出力する。図６に示すデータ６０２ａ、ＥＭＣフラグ６０２ｂ、および、ＲＳ符号パリティ６０２ｃを含むデータが、このようにして選択された符号語を表す。
【００７５】
このように本変形例によれば、誤り訂正符号が線形性を有する有限体に合わせた誤り抑制符号を採用することで、ＧＦ（２）で線形性を有する符号化方式のみでなく、ＲＳ符号などの様々な誤り訂正符号を使用することが可能となる。
【００７６】
（変形例３）
これまでは、誤り抑制符号としてアシンメトリック・コーディングを用いた例を説明した。適用可能な誤り抑制符号はアシンメトリック・コーディングに限られるものではなく、併用する誤り訂正符号と共通の有限体で線形性を有する限り、どのような誤り抑制符号を用いてもよい。例えば、Ｇｕｉｄｅｄ  Ｓｃｒａｍｂｌｉｎｇ方式を利用した誤り抑制符号を用いてもよい。
【００７７】
この方式では、例えば、シードを用いて生成したランダムな値（擬似乱数）をデータ部に設定し、このシードをＥＭＣフラグに設定したデータを誤り訂正符号化した誤り訂正符号語を、複数のシードを用いて複数用意する。誤り抑制符号化部１４ｂは、ＥＣＣ符号化部１４ａにより得られた誤り訂正符号化データ（入力フレーム）に対して、複数の誤り訂正符号語をそれぞれ加算する。選択部３５２は、入力フレームと合わせた複数の符号語候補から、誤り発生確率がより小さい符号語候補を選択して出力する。
【００７８】
（第２の実施形態）
誤り訂正符号は、フレームサイズが大きいほど訂正能力が高いという性質を有する。このため、フレームサイズが大きい誤り訂正符号が使われる場合がある。一方、誤り抑制符号の符号化方式には、上述のアシンメトリック・コーディング、および、Ｇｕｉｄｅｄ  Ｓｃｒａｍｂｌｉｎｇ方式のように、複数の符号語候補の誤り発生確率を推定し、誤り発生確率がより小さいと推定される符号語を選択する方式がある。
【００７９】
このような誤り抑制符号は、符号化率を所望の値に保ったまま、上記の変形例１のような構成により符号化すると符号語候補の個数が指数関数的に増大し、演算規模が大きくなる。例えば変形例１では、誤り訂正符号化のフレームサイズは、誤り抑制符号化のフレームサイズの２倍であったため、符号語候補の個数は２２＝４個であった。しかし、例えば誤り訂正符号のフレームサイズが１ｋビットであり、誤り抑制符号の符号化率が０．９９であったとすると、ＥＭＣフラグ数は１０ビットとなる。すなわち、符号語候補の個数が２１０＝１０２４個となり、加算および選択のための演算規模が増大する。
【００８０】
そこで、本実施形態では、複数の誤り訂正符号を用いた誤り訂正符号化方式を採用し、複数の誤り訂正符号のうち１つ（先に適用される誤り訂正符号）について、第１の実施形態（または変形例）の方式を適用する。これにより、誤り訂正符号化のフレームサイズが大きい場合であっても、演算規模を増大させずに、誤り訂正符号のパリティに対する誤り抑制符号化を実現できる。複数の誤り訂正符号を用いた誤り訂正符号化方式には、例えば、多次元の誤り訂正符号および連接符号が含まれる。
【００８１】
多次元の誤り訂正符号とは、誤り訂正符号の少なくとも一つ以上の構成単位であるシンボルが、複数のより小規模な成分符号によって多重に保護されているものを指す。また、１シンボルは、例えば１ビット（二元体（binary  field）の元（element））、または、二元体以外の有限体（finite  field）などのアルファベットの元で構成される。
【００８２】
２次元の誤り訂正符号の例としては、積符号がある。積符号は、符号語の構成単位である各情報ビット（シンボルであってもよい）が、行方向と列方向とのそれぞれで誤り訂正符号により保護される構造を備える。
【００８３】
連接符号は、ある誤り訂正符号（外符号、第１誤り訂正符号）で符号化したデータに対して、さらに別の誤り訂正符号（内符号、第２誤り訂正符号）で符号化を実行する方式である。
【００８４】
以下では、積符号を用いた場合を例に説明する。図７は、第２の実施形態に係るメモリシステムの概略構成例を示すブロック図である。図７に示すように、本実施形態のメモリシステム１−２は、メモリコントローラ１０−２と不揮発性メモリ２０とを備える。本実施形態では、メモリコントローラ１０−２内の符号化部１４−２（ＥＣＣ符号化部１４−２ａ、誤り抑制符号化部１４−２ｂ）、および、復号部１６−２（ＥＣＣ復号部１６−２ａ、誤り抑制復号部１６−２ｂ）の構成が、第１の実施形態と異なっている。その他の構成は、第１の実施形態と同様であるため、同一の符号を付し説明を省略する。
【００８５】
ＥＣＣ符号化部１４−２ａは、積符号により誤り訂正符号化を行う点が、第１の実施形態のＥＣＣ符号化部１４ａと異なっている。誤り抑制符号化部１４−２ｂは、行方向および列方向の誤り訂正符号化のうち、先に実行される方向（例えば行方向）の誤り訂正符号化による符号化データに対して誤り抑制符号化を行う点が、第１の実施形態の誤り抑制符号化部１４ｂと異なっている。
【００８６】
ＥＣＣ復号部１６−２ａは、積符号の誤り訂正復号を行う点が、第１の実施形態のＥＣＣ復号部１６ａと異なっている。誤り抑制復号部１６−２ｂは、誤り抑制符号化部１４−２ｂによって誤り抑制符号化された方向の符号化データについて誤り抑制復号を実行する点が、第１の実施形態の誤り抑制復号部１６ｂと異なっている。
【００８７】
図８は、誤り訂正符号にＢＣＨ積符号を採用し、誤り抑制符号にアシンメトリック・コーディングを採用した場合の符号化処理の流れを説明する図である。ＢＣＨ積符号化は、元のデータを２次元に並べ、行方向にＢＣＨ符号化を行い行パリティを付けた後、列方向にＢＣＨ符号化を行い列パリティを付ける符号化方式である。
【００８８】
例えばＥＣＣ符号化部１４−２ａは、入力されたデータ８００ａを２次元に並べ、２次元に並べられたデータ８０１ａ（データ８００ａと同じ）と、ビットを反転しないことを示す値「０」を設定したＥＭＣフラグ８０１ｂとを含むデータに対して、まず行方向のＢＣＨ符号化を実行し、行パリティ８０１ｃを算出する。
【００８９】
次に誤り抑制符号化部１４−２ｂは、誤り訂正符号化後の符号化データの各行について、上記第１の実施形態（または変形例）の誤り抑制符号化を実行する。データ８０２ａ、ＥＭＣフラグ８０２ｂ、および、行パリティ８０２ｃは、誤り抑制符号化により出力された符号化データを表す。
【００９０】
次にＥＣＣ符号化部１４−２ａは、誤り抑制符号化により出力された符号化データに対して、列方向のＢＣＨ符号化を実行する。データ８０３ａ、ＥＭＣフラグ８０３ｂ、行パリティ８０３ｃ、列パリティ８０３ｄ、ＥＭＣフラグのパリティ８０３ｅ、および、行パリティの列パリティ８０３ｆは、列方向のＢＣＨ符号化により出力された符号化データを表す。
【００９１】
このように、本実施の形態によれば、ＢＣＨ符号による行パリティに対しても誤り抑制符号による保護が得られるようになる。ＢＣＨ符号による列パリティについては誤り抑制符号による保護が得られないが、誤り訂正符号のフレームサイズが大きいため、高い信頼性を確保できる。またフレームサイズが大きい場合であっても、２次元に並べられたデータの行ごとに誤り抑制符号化が実行できる。このため、符号語候補の個数が過大となることを回避し、演算規模が増大することを抑制できる。
【００９２】
なお、先に列方向にパリティを付け、その後、行方向にパリティを付けるようにＢＣＨ積符号を構成してもよい。この場合は、先にパリティが付けられる列方向のＢＣＨ符号化が行われた後、行方向のＢＣＨ符号化の前に、誤り抑制符号化が実行されればよい。
【００９３】
また、積符号を構成する成分符号は、ＢＣＨ符号に限られるものではなく、どのような符号であってもよい。例えば、ＬＤＰＣ、および、ＲＳ符号（変形例２）などを用いてもよい。
【００９４】
また、連接符号を適用する場合は、外符号による符号化データに対して、誤り抑制符号化を実行した後、内符号による符号化を実行すればよい。外符号および内符号に用いる誤り訂正符号はどのような符号であってもよい。
【００９５】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００９６】
１、１−２  メモリシステム
１０、１０−２  メモリコントローラ
１１  制御部
１２  データバッファ
１３  メモリＩ／Ｆ
１４、１４−２  符号化部
１４ａ、１４−２ａ  ＥＣＣ符号化部
１４ｂ、１４−２ｂ  誤り抑制符号化部
１５  ホストＩ／Ｆ
１６、１６−２  復号部
１６ａ、１６−２ａ  ＥＣＣ復号部
１６ｂ、１６−２ｂ  誤り抑制復号部
１９  内部バス
２０  不揮発性メモリ
３０  ホスト
３５１  加算部
３５２  選択部
【図１】
2020135391.tif 000003
【図２】
2020135391.tif 000004
【図３】
2020135391.tif 000005
【図４】
2020135391.tif 000006
【図５】
2020135391.tif 000007
【図６】
2020135391.tif 000008
【図７】
2020135391.tif 000009
【図８】
2020135391.tif 000010