(57)【要約】【課題】パリティデータデータの増大を抑えることができるメモリコントローラを得ること。【解決手段】各しきい値分布に対して、３ビットのデータが割り当てられ、第１のビットが第１ページのデータを表現し、第２のビットが第２ページのデータを表現し、第３のビットが第３ページのデータを表現する３ビット／セルのメモリセルを有する不揮発性半導体メモリを制御するメモリコントローラであって、不揮発性半導体メモリの第１のメモリ領域に、第１〜第３の３ページ分のデータを書き込む場合に、第１のメモリ領域の各メモリセルに書き込まれるデータの第１のビット及び第２のビットから、隣接するしきい値分布への移動によりエラーとなるビットを抽出して仮想ページを生成する制御部と、仮想ページに対する第１の誤り訂正符号を生成する符号化部と、３ページ分のデータと第１の誤り訂正符号とを不揮発性半導体メモリへ書き込むインターフェイス部とを備える。【選択図】図７
2013089082.tif 000002
【特許請求の範囲】
【請求項１】
各しきい値分布に対して、３ビットのデータが割り当てられ、第１のビットが第１ページのデータを表現し、第２のビットが第２ページのデータを表現し、第３のビットが第３ページのデータを表現する３ビット／セルのメモリセルを有する不揮発性半導体メモリを制御するメモリコントローラであって、
前記不揮発性半導体メモリの第１のメモリ領域に、第１ページ、第２ページ、第３ページの３ページ分のデータを書き込む場合に、前記第１のメモリ領域の各メモリセルに書き込まれるデータの第１のビット及び第２のビットから、隣接するしきい値分布への移動によりエラーとなるビットを抽出して仮想ページを生成する制御部と、
前記仮想ページに対する第１の誤り訂正符号を生成する符号化部と、
前記３ページ分のデータと前記第１の誤り訂正符号とを前記不揮発性半導体メモリへ書き込むインターフェイス部と
を備えることを特徴とするメモリコントローラ。
【請求項２】
各しきい値分布に対して、３ビットのデータが割り当てられ、第１のビットが第１ページのデータを表現し、第２のビットが第２ページのデータを表現し、第３のビットが第３ページのデータを表現する３ビット／セルのメモリセルを有する不揮発性半導体メモリを制御するメモリコントローラであって、
前記しきい値分布ごとの前記３ビットのデータの割り付けがグレイ・コードであり、前記グレイ・コードの第１ページ、第２ページの境界数が２であり、第３ページの境界数が３であり、
前記メモリの第１のメモリ領域に、第１ページ、第２ページ、第３ページの３ページ分のデータを書き込む場合に、前記第３ページの値を参照し、前記第３ページが１である場合には、第１ページのビットを抽出し、前記第３ページが０である場合には、第２ページのビットを抽出して仮想ページを生成する制御部と、
前記仮想ページに対する第１の誤り訂正符号を生成する符号化部と、
前記３ページ分のデータと前記第１の誤り訂正符号とを前記不揮発性半導体メモリへ書き込むインターフェイス部と
を備えることを特徴とするメモリコントローラ。
【請求項３】
前記不揮発性半導体メモリから読み出されたデータと誤り訂正符号とに基づいて誤り訂正処理を行う誤り訂正処理部をさらに備え、
前記インターフェイス部は、前記不揮発性半導体メモリから前記３ページ分のデータと前記第１の誤り訂正符号とを読み出し、
前記制御部は、前記読み出された３ページ分のデータから前記仮想ページを生成し、前記誤り訂正処理部は、前記第１の誤り訂正符号に基づいて、前記仮想ページに対する誤り訂正処理を実行することを特徴とする請求項１又は２に記載のメモリコントローラ。
【請求項４】
前記符号化部は、前記第３ページに対する第２の誤り訂正符号を生成し、前記インターフェイス部は、前記第１の誤り訂正符号と前記第２の誤り訂正符号を、前記第１乃至３ページの冗長データとして分散して前記不揮発性半導体メモリに書き込むことを特徴とする請求項１乃至３に記載のメモリコントローラ。
【請求項５】
前記不揮発性半導体メモリから読み出したデータに対して誤り訂正処理を行う誤り訂正処理部、をさらに備え、
前記制御部は、さらに、前記２以上のページの書き込みデータのうち前記仮想ページデータを除いたデータに対する誤り訂正符号を前記仮想ページ符号より訂正能力の低い少ビット誤り訂正符号として生成するよう前記符号化部へ指示し、前記少ビット誤り訂正符号を前記２以上のページの書き込みデータとともに前記不揮発性半導体メモリへ格納するよう前記インターフェイス部へ指示し、前記不揮発性半導体メモリからの読み出し時に、読み出した前記２以上のページの書き込みデータから前記仮想ページデータ以外を選択し、選択したデータと前記少ビット誤り訂正符号とに基づいて誤り訂正処理を行うよう前記誤り訂正処理部へ指示し、当該誤り訂正処理後のデータに基づいてページごとの書き込みデータを復元する、ことを特徴とする請求項１乃至４のいずれか１項に記載のメモリコントローラ。
【請求項６】
前記不揮発性半導体メモリから読み出したデータに対して誤り訂正処理を行う誤り訂正処理部、をさらに備え、
前記制御部は、さらに、前記２以上のページの書き込みデータに対するページごとの誤り訂正符号を前記仮想ページ符号より訂正能力の低いページ誤り訂正符号として生成するよう前記符号化部へ指示し、前記ページ誤り訂正符号を前記２以上のページの書き込みデータとともに前記不揮発性半導体メモリへ格納するよう前記インターフェイス部へ指示し、前記ページごとの書き込みデータの復元の後に、復元後の書き込みデータとページ誤り訂正符号とに基づいて誤り訂正処理を行うよう前記誤り訂正処理部へ指示する、ことを特徴とする請求項１乃至４のいずれか１項に記載のメモリコントローラ。
【請求項７】
各しきい値分布に対して、３ビットのデータが割り当てられ、第１のビットが第１ページのデータを表現し、第２のビットが第２ページのデータを表現し、第３のビットが第３ページのデータを表現する３ビット／セルのメモリセルを有する不揮発性半導体メモリと、
前記不揮発性半導体メモリの第１のメモリ領域に、第１ページ、第２ページ、第３ページの３ページ分のデータを書き込む場合に、前記第１のメモリ領域の各メモリセルに書き込まれるデータの第１のビット及び第２のビットから、隣接するしきい値分布への移動によりエラーとなるビットを抽出して仮想ページを生成する制御部と、
前記仮想ページに対する第１の誤り訂正符号を生成する符号化部と、
前記３ページ分のデータと前記第１の誤り訂正符号とを前記メモリへ書き込むインターフェイス部と
を備えることを特徴とする半導体記憶システム。
【請求項８】
各しきい値分布に対して、３ビットのデータが割り当てられ、第１のビットが第１ページのデータを表現し、第２のビットが第２ページのデータを表現し、第３のビットが第３ページのデータを表現する３ビット／セルのメモリセルを有する不揮発性半導体メモリを制御するメモリ制御方法であって、
前記不揮発性半導体メモリの第１のメモリ領域に、第１ページ、第２ページ、第３ページの３ページ分のデータを書き込む場合に、前記第１のメモリ領域の各メモリセルに書き込まれるデータの第１のビット及び第２のビットから、隣接するしきい値分布への移動によりエラーとなるビットを抽出して仮想ページを生成する制御ステップと、
前記仮想ページに対する第１の誤り訂正符号を生成する符号化ステップと、
前記３ページ分のデータと前記第１の誤り訂正符号とを前記メモリへ書き込みステップと、
を含むことを特徴とするメモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、メモリコントローラ、半導体記憶システムおよびメモリ制御方法に関する。
【背景技術】
【０００２】
ＮＡＮＤ型フラッシュメモリでは、一般的に、記憶するデータに対するエラー訂正が行われる。近年のＮＡＮＤ型フラッシュメモリの微細化・超多値化とともに貯蔵したデータにエラーが発生する確率が上がっている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特表２００９−５１２０５５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ＮＡＮＤ型フラッシュメモリの微細化・超多値化に伴いエラーが発生する確率が上がると、エラー訂正後のデータ正当性を維持するために必要となるパリティデータ量が増大する。これはパリティデータを保存するためのメモリサイズ量が増大することを意味しており、コスト上昇を引き起こし問題となる。または、コスト上昇を抑えるためにパリティデータ量を増やさずエラー訂正能力を据え置いた場合は、貯蔵したデータのエラーを訂正しきれずに、エラー残存確率が増大してしまう。
【課題を解決するための手段】
【０００５】
本願発明の一態様によれば、各しきい値分布に対して、３ビットのデータが割り当てられ、第１のビットが第１ページのデータを表現し、第２のビットが第２ページのデータを表現し、第３のビットが第３ページのデータを表現する３ビット／セルのメモリセルを有する不揮発性半導体メモリを制御するメモリコントローラであって、不揮発性半導体メモリの第１のメモリ領域に、第１ページ、第２ページ、第３ページの３ページ分のデータを書き込む場合に、第１のメモリ領域の各メモリセルに書き込まれるデータの第１のビット及び第２のビットから、隣接するしきい値分布への移動によりエラーとなるビットを抽出して仮想ページを生成する制御部と、仮想ページに対する第１の誤り訂正符号を生成する符号化部と、３ページ分のデータと第１の誤り訂正符号とを不揮発性半導体メモリへ書き込むインターフェイス部とを備える。
【図面の簡単な説明】
【０００６】
【図１】図１は、第１の実施の形態にかかる半導体記憶システムの構成例を示すブロック図である。
【図２】図２は、第１の実施の形態のメモリセルのしきい値とデータの割付の一例を示す図である。
【図３】図３は、ＥＣＣ回路の構成例を示す図である。
【図４】図４は、電荷リークによるエラー発生の様子を示す図である。
【図５】図５は、ソフトプログラムによるエラー発生の様子を示す図である。
【図６】図６は、オーバープログラムによるエラー発生の様子を示す図である。
【図７】図７は、第１の実施の形態のエラー訂正対象とするデータの選び方の一例を示す図である。
【図８】図８は、仮想ページＵＭ’の生成とパリティ生成手順の一例を示す図である。
【図９】図９は、第１の実施の形態のＮＡＮＤフラッシュメモリへのデータおよびパリティの格納位置の一例を示す図である。
【図１０】図１０は、第１の実施の形態のＮＡＮＤフラッシュメモリへの書き込み手順の一例を示すフローチャートである。
【図１１】図１１は、第１の実施の形態のＮＡＮＤフラッシュメモリからの読み出し手順の一例を示すフローチャートである。
【図１２】図１２は、第２の実施の形態に本実施の形態のエラー訂正対象とするデータの選び方の一例を示す図である。
【図１３】図１３は、仮想ページＵ’、Ｍ’の生成とパリティ生成手順の一例を示す図である。
【図１４】図１４は、第２の実施の形態のＮＡＮＤフラッシュメモリへのデータおよびパリティの格納位置の一例を示す図である。
【図１５】図１５は、第２の実施の形態のＮＡＮＤフラッシュメモリへの書き込み手順の一例を示すフローチャートである。
【図１６】図１６は、第２の実施の形態のＮＡＮＤフラッシュメモリからの読み出し手順の一例を示すフローチャートである。
【図１７】図１７は、第３の実施の形態に本実施の形態のエラー訂正対象とするデータの選び方の一例を示す図である。
【図１８】図１８は、第３の実施の形態のＮＡＮＤフラッシュメモリへのデータおよびパリティの格納位置の一例を示す図である。
【図１９】図１９は、第３の実施の形態のＮＡＮＤフラッシュメモリへの書き込み手順の一例を示すフローチャートである。
【図２０】図２０は、第３の実施の形態のＮＡＮＤフラッシュメモリからの読み出し手順の一例を示すフローチャートである。
【図２１】図２１は、第４の実施の形態のメモリセルのしきい値とデータの割付の一例を示す図である。
【図２２】図２２は、第４の実施の形態に本実施の形態のエラー訂正対象とするデータの選び方の一例を示す図である。
【図２３】図２３は、仮想ページＨ’、Ｕ’の生成手順の一例を示す図である。
【図２４】図２４は、第４の実施の形態のＮＡＮＤフラッシュメモリへのデータおよびパリティの格納位置の一例を示す図である。
【図２５】図２５は、第４の実施の形態のＮＡＮＤフラッシュメモリへの書き込み手順の一例を示すフローチャートである。
【図２６】図２６は、第４の実施の形態のＮＡＮＤフラッシュメモリからの読み出し手順の一例を示すフローチャートである。
【図２７】図２７は、ＥＣＣ回路を内蔵しないＮＡＮＤフラッシュメモリの一例を示す図である。
【図２８】図２８は、ＥＣＣ回路を内蔵するＮＡＮＤフラッシュメモリの一例を示す図である。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、実施形態にかかるメモリコントローラ、半導体記憶システムおよびメモリ制御方法を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【０００８】
（第１の実施の形態）
図１は、第１の実施の形態にかかる半導体記憶システムの構成例を示すブロック図である。本実施の形態の半導体記憶システムは、メモリコントローラ１とＮＡＮＤフラッシュメモリ（不揮発性半導体メモリ）２で構成される。ＮＡＮＤフラッシュメモリ２は、不揮発性メモリであり、メモリコントローラ１からの制御により書き込み・読み出し・消去などの動作を行う。
【０００９】
メモリコントローラ１は、ランダムアクセスメモリ（ＲＡＭ）１１、プロセッサ１２、ホストインターフェイス１３、ＥＣＣ（Error  Checking  and  Correction）回路１４、メモリインターフェイス（インタフェース部）１５およびデータバス１６を備える。
【００１０】
ホストインターフェイス１３は、ホストとのデータ交換に必要なプロトコルを備える。ホストの例としては、パーソナルコンピュータやＣＰＵ（Central  Processing  Unit）コア等があげられる。メモリインターフェイス１５は、ＮＡＮＤフラッシュメモリ２とのデータ交換に必要なプロトコルを備え、ＮＡＮＤフラッシュメモリ２との間でコマンド、アドレス、制御信号およびデータの送受信を行う。
【００１１】
プロセッサ１２は、半導体記憶システムの各構成要素を統括的に制御する制御部であり、ＣＰＵコア、ＲＯＭ（Read  Only  Memory）、ＤＭＡ（Direct  Memory  Access）コントローラなどで構成される。プロセッサ１２は、ホストからホストインターフェイス１３およびデータバス１６経由で命令を受けた場合に、その命令に従った制御を行う。例えば、プロセッサ１２は、ホストからの命令に従って、ＮＡＮＤフラッシュメモリ２へのデータの書き込みやＮＡＮＤフラッシュメモリ２からのデータの読み出しなどを、メモリインターフェイス１５へ指示する。また、プロセッサ１２は、ＥＣＣ回路１４へ誤り訂正符号化処理または復号化処理の実施を指示する。
【００１２】
ＥＣＣ回路１４は、プロセッサ１２からの指示に従って、ＮＡＮＤフラッシュメモリ２へ書き込むデータに対する誤り訂正符号化処理を行うとともにＮＡＮＤフラッシュメモリ２に格納されたデータのエラーの検出や訂正処理を行う。ＲＡＭ１１は、プロセッサ１２のワーキングメモリとして使用される。なお図１の構成例には示されていないが、メモリコントローラ１５にはホストとのインターフェイスのためのコードデータを格納するＲＯＭなどをさらに含むことがある。このように、図１の構成例は一例であり本実施の形態の半導体記憶システムは図１の構成例に限定されず、一般的な構成の変形が行われていてもよい。
【００１３】
ＮＡＮＤフラッシュメモリ２は、１つのメモリセルに３ｂｉｔ以上のデータを格納する。本実施の形態では、１つのメモリセルに３ｂｉｔのデータを格納する例を説明する。図２は、ＮＡＮＤフラッシュメモリ２のメモリセルにデータを格納する際のメモリセルのしきい値とデータの割付の一例を示す図である。１つのメモリセルに３ｂｉｔのデータを格納するため、７つの境界閾値である境界＃１〜＃７を用いて８種類のしきい値分布を定義している。ＮＡＮＤフラッシュメモリ２は、ページ（Ｐａｇｅ）単位で読み出し・書き込み動作を行う。一般に、多値セルでは、１つのメモリセルに格納される各ｂｉｔには異なるページが割当られる。ここでは、３ｂｉｔに対応するページアドレスをそれぞれＵ（Upper）、Ｍ（Middle）、Ｌ（Lower）とする。
【００１４】
図２の上側の図は、メモリセルごとに格納される各ページのデータの値の組み合わせとメモリセルのしきい値の対応の一例を示している。図２の下側の図は、メモリセルのしきい値を横軸にとり、セル数を縦軸にとった場合のセル数の分布（しきい値分布）の例を示している。図２に示したデータの割付は、隣接するしきい値分布に割り当てるデータは１ｂｉｔの違いとなるいわゆるグレイ・コードとしているが、その理由は後述する。
【００１５】
図２に示すように、Ｕ，Ｍ，Ｌのページごとにみると、ページＵでは、データの値が１から０または０から１となる境界が２箇所（図２の境界＃３と境界＃７）存在する。ページＭでは、境界が２箇所（図２の境界＃１と境界＃５）存在し、ページＬでは、境界が３箇所（図２の境界＃２、境界＃４および境界＃６）存在する。以下では、このような各ページへの境界数の割当を、Ｕ、Ｍ、Ｌの順に境界数（分割数）を示して、２−２−３分割と呼ぶこととする。各ページへの境界数の割当は、これに限定されず、他の例については後述する。
【００１６】
次に、本実施の形態のＮＡＮＤフラッシュメモリ２の書き込みおよび読み出しの全体動作について説明する。まず、プロセッサ１２は、ホストからデータの書き込みを指示されると、ＥＣＣ回路１４にデータの誤り訂正符号化の実施を指示する。ホストから送信される書き込み対象のデータは、ＲＡＭ１１に一時的に格納される。ＥＣＣ回路１４は、ＲＡＭ１１に格納されたデータに基づいて誤り訂正符号化処理を実施し、誤り訂正符号を生成する。
【００１７】
そして、プロセッサ１２は、メモリインターフェイス１５に対してデータおよび当該データに対して生成された誤り訂正符号（以下、本実施の形態ではパリティとよぶ）をＮＡＮＤフラッシュメモリ２へ書き込みよう指示する。この際、メモリインターフェイス１５へデータおよび誤り訂正符号の書き込みアドレスを指示し、メモリインターフェイス１５は、指示されたアドレスへデータおよびパリティを書き込む。プロセッサ１２は、論理アドレスと、ＮＡＮＤフラッシュメモリ２の物理アドレスと、の対応を保持しており、メモリインターフェイス１５に対しては書き込みアドレスとして物理アドレスを指定する。なお、ここでは、書き込み時に論理アドレスと物理アドレスを直接変換する例について説明したが、これに限らず、多段階でアドレスを変換する（ホスト装置の論理アドレスから半導体記憶システムの論理アドレスへ一旦変換した後に、物理アドレスへ変換する等）の方式としてもよい。
【００１８】
また、プロセッサ１２は、ホストからデータの読み出しを指示されると、当該データのＮＡＮＤフラッシュメモリ２からの読み出しをメモリインターフェイス１５へ指示する。ホストからは論理アドレスにより読み出し対象のデータが指定されるため、プロセッサ１２は、保持している論理アドレスとＮＡＮＤフラッシュメモリ２の物理アドレスとの対応に基づいて対応する物理アドレスをメモリインターフェイス１５へ指示する。この際、プロセッサ１２は、読み出しデータに対応するパリティも読みだす。プロセッサ１２は、読みだしたデータとパリティに基づく誤り訂正復号化処理の実施をＥＣＣ回路１４へ指示する。ＥＣＣ回路１４は、指示に基づいて誤り訂正復号化処理を実施する。プロセッサ１２は、誤り訂正復号化処理後のデータをホストインターフェイス１３経由でホストへ送信する。
【００１９】
図３は、ＥＣＣ回路１４の構成例を示す図である。図３に示したＥＣＣ回路１４は、ＢＣＨ方式を採用するＥＣＣ回路である。このＥＣＣ回路１４では、Parity  Generator（符号化部）１４１はＮＡＮＤフラッシュメモリ２へのデータの書き込み時に、データバス１６経由で入力される所定のサイズの書き込みデータに基づいて誤り訂正符号化処理によりパリティを生成する。なお、所定のサイズは任意な数値を設定可能であるが、例えば、セクターサイズである。セクターサイズは、例えば、５１２バイト（４０９６ｂｉｔ）である。Parity  Generator１４は、生成したパリティをデータバスへ返信する。
【００２０】
Syndrome  Generator１４２，Key  Equation  Solver１４３，Chien  Search１４４，Error  Correction１４５の各ユニットは、ＮＡＮＤフラッシュメモリ２からのデータのからの読み出し動作時に使用される誤り訂正処理部を構成し、読み出したデータのエラー有無の検出とエラー訂正データの出力を行う。読み出したデータは、データバス１６からSyndrome  Generator１４２へ入力される。Syndrome  Generator１４２は、入力されたデータに基づいてSyndromeを形成して、これをKey  Equation  Solver１４３へ入力する。Key  Equation  Solver１４３は、Syndromeを用いて誤り位置多項式を導出しエラーのビット数を判定する。Key  Equation  Solver１４３は、エラービット数が１より大きい場合は誤り位置多項式をChien  Search１４４へ入力する。Chien  Search１４４は、入力された誤り位置多項式に基づいてエラーのビットの場所を特定する。Error  Correction１４５は、エラーのビットの場所に応じてビットデータを反転することによりエラーを訂正する。
【００２１】
なお、図３の構成は一例であり、本実施の形態は、ＥＣＣ回路１４の構成は図３の例に限定されない。また、誤り訂正方式は、ＢＣＨ、リード・ソロモン符号、ＬＤＰＣ（Low  Density  Parity  Check）など様々なものが実用化されており、誤り訂正方式もＢＣＨに限らずどのような方式を用いてもよい。
【００２２】
ここで、ＮＡＮＤフラッシュメモリに格納されたデータのエラーについて説明する。ＮＡＮＤフラッシュメモリに格納されたデータにエラーが発生する要因は様々なものがあるが、代表的な要因として、電荷リーク、ソフトプログラム、オーバープログラムがある。
【００２３】
図４は、電荷リークによるエラー発生の様子を示す図である。ＮＡＮＤフラッシュメモリのメモリセルは、しきい値電圧分布によってＯＮセルとＯＦＦセルに区分される。ＯＮセルはデータ“１”を格納した状態で、ＯＦＦセルはデータ“０”を格納した状態である。電荷リークによるエラーは、書き込みがされてＯＦＦセルとなったセルが、ＯＮセルとして読み出されるエラーである。
【００２４】
電荷リークは、メモリセルのフローティングゲートや酸化膜にトラップされた電子が酸化膜を通してメモリセルのチャネルに漏れることである。ＮＡＮＤフラッシュメモリでは、読み出し動作時には、選択ワードライン（図４では、ＷＬ３１を選択ワードラインとする）には選択読み出し電圧Ｖｃｇｒが印加され、非選択ワードライン（ＷＬ０〜ＷＬ３０およびＷＬ３２〜ＷＬ６３）には非選択読み出し電圧Ｖｒｅａｄが印加される。ここでＶｒｅａｄは、非選択ワードラインに連結されているメモリセルをＯＮさせるのに充分高い電圧である。選択ワードラインに連結されたメモリセルに電荷リークが発生すると、メモリセルのしきい値電圧は低くなり、ＯＦＦセルのしきい値分布がＯＮセルの方に移動する。
【００２５】
図４の分布３１は、電荷リークが発生していない場合のＯＮセルのしきい値分布を示し、分布３２は、電荷リークが発生していない場合のＯＦＦセルのしきい値分布を示している。電荷リークが発生すると、ＯＦＦセルのしきい値分布は、点線の分布３３に示したように下降する。このように電荷リークにより下降したしきい値がＶｃｇｒより低くなると、本来はＯＦＦセルであるメモリセルが読み出し時にＯＮセルとして読み出され、エラーとなる。
【００２６】
図５は、ソフトプログラムによるエラー発生の様子を示す図である。ソフトプログラムとは、読み出しの動作時に非選択読み出し電圧が印加されることにより、チャネルからフローティングゲートに電子がわずかに流入することである。ソフトプログラムによるエラーは、書き込みがされておらずＯＮセルであったメモリセルがＯＦＦセルとして読み出されるエラーである。
【００２７】
図５の分布３１は、ソフトプログラムが発生していない場合のＯＮセルのしきい値分布を示し、分布３２は、ソフトプログラムが発生していない場合のＯＦＦセルのしきい値分布を示している。選択ワードライン（ＷＬ３１）に連結されたメモリセルにソフトプログラムが発生すると、メモリセルのしきい値電圧は分布３４に示すように上昇し、ＯＮセルのしきい値分布がＯＦＦセルの方に移動する。しきい値がＶｃｇｒより高くなると、ＯＮセルであるのに、本来はＯＮセルであるメモリセルが読み出し時にＯＦＦセルとして読み出され、エラーとなる。
【００２８】
図６は、オーバープログラムによるエラー発生の様子を示す図である。オーバープログラムとは、書き込み時に相対的に書き込み速度が速いメモリセルが書き込み後に上限電圧より高いしきい値電圧になることである。分布３１は、オーバープログラムが発生していない場合のＯＮセルのしきい値分布を示し、分布３２は、オーバープログラムが発生していない場合のＯＦＦセルのしきい値分布を示している。分布３５は、オーバープログラムにより上限電圧を超えたメモリセルのしきい値分布を示している。この上限電圧はＶｒｅａｄより低い必要があるが、書き込み動作時はしきい値が上限電圧を超えたかどうかのチェックはしないのが通例である。
【００２９】
オーバープログラムによるエラーは、書き込みがされておらずＯＮセルであったメモリセルがＯＦＦセルとして読み出されるエラーである。読み出し動作時、選択ワードライン（ＷＬ３１）にＶｃｇｒが印加され読み出し対象のメモリセルが正しくＯＮしたとしても、同じセルストリング上の非選択ワードライン（ＷＬ０〜ＷＬ３０およびＷＬ３２〜ＷＬ６３）に連接されたメモリセルにオーバープログラムが発生すると、このセルストリングのチャネル抵抗は増加する。チャネル抵抗が増加すれば、ＯＮセルである選択メモリセルがあたかもＯＦＦしたように読み出され、エラーとなる。
【００３０】
以上に説明した３つのエラー代表要因のうち、電荷リークとソフトプログラムはしきい値分布が移動することにより生じる。多値メモリセルの場合は、しきい値分布が隣接するしきい値分布として誤って読み出されることになる。図２で例示したようなグレイ・コードによるデータ割付をしておけば、これらの要因でのエラーの量はメモリセル内の１ｂｉｔにとどめることができる。例えば、図２の例では、境界＃１と境界＃２の間の分布Ａが、境界＃１以下の分布Ｅｒとして読み出されるか、または境界＃２と境界＃３の間の分布Ｂとして読み出されるかのいずれかとなる。分布Ｅｒとして読み出された場合はページＭにおいて１ｂｉｔのエラーが生じ、分布Ｂとして読み出された場合はページＬにおいて１ｂｉｔのエラーが生じることになる。
【００３１】
一方、上述のオーバープログラムによれば、しきい値分布は最上位電圧の分布に移動したように読み出されるため、２ｂｉｔのエラーも発生しうる。またメモリセルが物理的に破損しているような不良セルは、一般的にはメモリチップの製造テスト工程で除外されたり冗長メモリセルに置き換え処理がなされたりするが、その後の使用過程でも疲労などにより破損しうる。このような不良セルの読み出し動作時のエラー挙動は予測が難しく、全３ｂｉｔがエラーとなることもある。
【００３２】
しかしながら、適切な製造テスト工程を経た後はエラーの要因の大多数が電荷リークとソフトプログラムによる隣へのしきい値分布移動であるということが一般的に観測されている。本実施の形態および後続の実施の形態では、この事実に基づいて、エラー訂正の対象を隣へのしきい値分布移動に限定する、または隣へのしきい値分布移動をエラー訂正の主対象とすることでエラー訂正能力を下げずにコストを下げる。または、コストを上げずにエラー訂正能力を向上させる。以下、主にエラー訂正能力を下げずにコストを下げる例を説明するが、同様の手法でコストを上げずにエラー訂正能力を向上させる効果を得ることができることは自明である。
【００３３】
図７は、本実施の形態のエラー訂正対象とするデータの選び方の一例を示す図である。図７では、図２で示したデータ割付を前提としている。エラー要因が隣のしきい値分布への移動であるとすると、両隣の隣接しきい値分布でデータが変化しないデータはエラーが発生しない。図７では、ページＵおよびＭのうち、破線で囲まれた以外のデータは、しきい値分布が隣へ移動してもデータが変化しない。例えば、左から２番目のデータ“１，０，１”（＝“ページＵのデータ，ページＭのデータ，ページＬのデータ”）は、隣のしきい値分布に移動すると“１，１，１”または“１，０，０”となるが、ページＵのデータはいずれに移動した場合も“１”のままで変化しない。
【００３４】
なお、ページＬでは、実際には、図２で示した分布Ｅｒと分布Ｇの場合に、実際には隣のしきい値分布へ移動してもデータは変化しないが、ここでは、手順を簡易にするためにページＬはすべてのデータでデータエラーが発生するものと扱う。
【００３５】
本実施の形態では、ページＵおよびＭについては、隣のしきい値分布への移動によりデータの値が変化する破線で囲まれたデータのみをエラー訂正対象（パリティ付与対象）とする。ページＬについては、全てのデータをエラー訂正対象とする。ここでは、ページＵおよびＭのデータのうち、エラー訂正対象抜き出した仮想ページＵＭ’を一時的に生成し、仮想ページＵＭ’のデータに対してパリティを付与する。
【００３６】
図７の下側の図は、仮想ページＵＭ’の抽出方法を示している。図７の上側の図と比較するとわかるように、ページＵにおいて破線で囲まれているデータに対応するしきい値分布ではページＭのデータは破線で囲まれていない。同様に、ページＭにおいて破線で囲まれているデータに対応するしきい値分布ではページＵのデータは破線で囲まれていない。従って、仮想ページＵＭ’として、各しきい値分布に対してページＵとページＭのいずれか一方のデータを抽出すればよい。
【００３７】
次に、仮想ページＵＭ’の生成方法について述べる。ここでは、ページＬのデータの値に基づいて仮想ページＵＭ’を生成する方法を述べる。なお、仮想ページＵＭ’の生成方法はこれに限定されない。例えば、しきい値分布ごとにページＵのデータを抽出するかページＭのデータを抽出するかの対応を保持しておき、ページＵ，Ｍ，Ｌの３ビットのデータの値に基づいて対応するしきい値分布を識別して保持している対応に基づいてデータを抽出して、仮想ページＵＭ’の生成する方法等としてもよい。
【００３８】
仮想ページＵＭ’のデータをＵＭ’［ｉ］（ｉはページ内のデータの番号を示す整数）とする。このとき、ページＬのデータの値に基づいて仮想ページＵＭ’を生成する規則を、以下の式（１）に示す。
ＵＭ’［ｉ］  ＝  Ｕ［ｉ］  （if  Ｌ［ｉ］  ＝  ０）
Ｍ［ｉ］  （otherwise）                      …（１）
【００３９】
そして、生成した仮想ページＵＭ’の所定のサイズのデータに基づいてパリティを生成し、ＮＡＮＤフラッシュメモリ２への書き込み動作時には書き込みデータとともにパリティを書き込む。ページＬについては従来と同様に所定のサイズのデータに基づいてパリティを生成する。従って、本実施の形態では、ページＬおよびＵＭ’の２ページ分のデータに対してパリティを付与する。従来のページＬ，Ｍ，Ｎの３ページ分のデータに対してパリティを付与する方法に比べ、本実施の形態ではパリティ付与対象のデータを削減できる。
【００４０】
図８は、仮想ページＵＭ’の生成とパリティ生成手順の一例を示す図である。図８の左上図は、ホストから送信されたデータをプロセッサ１２が各ページに割り付けた状態を示している。データ４１，４２，４３は、各々１つのメモリセルに格納される３ビットのデータである。データ５１，５２，５３は、それぞれデータ４１，４２，４３に基づいて生成された仮想ページＵＭ’のデータである。前述の式（１）に従って、ＵＭ’［ｉ］を抽出すると、図８の右上図のようになる。ここでは、例として、データ４１，４２，４３を示す番号（ｉ）を１，２，３とする。データ４１は、ページＬのデータが“０”であるから式（１）に従って、ＵＭ’［１］＝Ｕ［１］＝１となる。データ４３は、ページＬのデータが“１”であるから式（１）に従って、ＵＭ’［３］＝Ｍ［３］＝１となる。
【００４１】
そして、仮想ページＵＭ’のデータとページＬのデータとに基づいてパリティが生成され、図８の左下図に示すように、ページＵ、ＭおよびＬのデータとパリティが書き込まれる。
【００４２】
このようなパリティの付加の方法をとることにより、パリティデータサイズを減らすことが可能になる。以下、数値の一例を挙げて説明する。１ページのユーザデータ量を４０９６ｂｉｔとし、このうち４０ｂｉｔを訂正可能な能力のＥＣＣ回路１４を用いるとする。４０９６ｂｉｔを４０ｂｉｔ訂正可能にするためのパリティデータ量は、ＢＣＨ方式による最小データ量として５２０ｂｉｔである（４０ｂｉｔ×１３：１３＝１２＋１;４０９６＝２12）。
【００４３】
従って、各ページにパリティを付加する従来例では、各ページに５２０ｂｉｔのパリティデータ量を必要とする。このため、１ページサイズ（データとパリティの合計サイズ）は４６１６ｂｉｔとなる。本実施の形態では、ページＬに対しては、従来と同等の４０ｂｉ訂正可能としなければ同等の不良確率にすることは出来ないため、５２０ｂｉｔのパリティデータ量とする。
【００４４】
仮想ページＵＭ’に対しては、ページＬと同等の不良確率にするには４／３倍の訂正能力とする。４／３倍の理由は以下による。仮想ページＵＭ’では、ページＵでしきい値分布の移動によりエラーとなる場合とページＭでしきい値分布の移動によりエラーとなる場合との両方を含む。従って、仮想ページＵＭ’のエラー確率は、ページＵ、Ｍの両ページの合計となる。図２に示すように、ページＵは隣の分布へ移動してデータエラーとなる箇所が２箇所（境界＃３、境界＃７）、ページＭも隣の分布へ移動してデータエラーとなる箇所が２箇所（境界＃１、境界＃５）であり、合計すると４箇所である。これに対して、ページＬは３箇所（境界＃２、境界＃４、境界＃６）であるため、仮想ページＵＭ’のエラー発生確率は、比率としてはページＬの４／３倍となる。従って、ページＵＭ’に対するパリティデータ量は６９４ｂｉｔとなる。
【００４５】
図９は、本実施の形態のＮＡＮＤフラッシュメモリ２へのデータおよびパリティの格納位置の一例を示す図である。図９では、ＮＡＮＤフラッシュメモリ２の１つのワードラインを共有する３つのページアドレスのメモリセルへのデータ格納位置を示している。前述した誤り訂正符号化の対象とする所定のデータサイズを４０９６ｂｉｔとした例を示しているが、誤り訂正符号化の対象とする所定のデータサイズはこれに限定されない。
【００４６】
本実施の形態では、パリティは２ページ分のサイズのデータ量に対して生成されているため、パリティデータを３ページアドレスにまたがるパリティ格納エリアに分散して格納する。図９では、仮想ページＵＭ’（ＵＭ’パリティ）のパリティとページＬのパリティ（Ｌパリティ）を両方とも３分して３ページに振り分けているが、これに限らずどのような分散のさせ方でもよい。また、パリティのデータ量は、ページＬが５２０ｂｉｔ、仮想ページＵＭ’を６９４ｂｉｔとしているが、パリティのデータ量はこれらに限定されない。
【００４７】
なお、前述したページＬ、仮想ページＵＭ’のパリティデータ量は３で割り切れないため、整数に切り上げている。図９の例では、１ページのパリティデータ量は４０９６ｂｉｔであり、１ページサイズ（１ページ分のデータとパリティのデータ量）は４５０２ｂｉｔとなり、ページごとに５２０ｂｉｔのパリティを付加する場合の１ページサイズ４６１６ｂｉｔよりデータ量を削減することができる。ここでは、パリティのデータ量を削減する例を示したが、従来例と同等の各ページ５２０ｂｉｔずつ計１５６０ｂｉｔのパリティデータ量を確保したとすれば、誤り訂正能力を上げることが可能となる。この場合は不良確率を向上させるメリットとなることはいうまでもない。
【００４８】
ＮＡＮＤフラッシュメモリ２からの読み出し動作時には、書き込みデータ（ページＵ、Ｍ、Ｌのデータ）と対応するパリティとが同時に読み出される。ただし、本実施の形態では、パリティは仮想ページＵＭ’とページＬの２ページ分のデータに対するものである。ページＬはそのまま誤り訂正処理を行えばよいが、ページＵおよびＭについては、書き込み時と同様に仮想ページＵＭ’を作成する。そして、仮想ページＵＭ’に対して誤り訂正処理を行った後、再度、ページＵ、Ｍに復元する。
【００４９】
なお、前述の式（１）に示したようにページＬのデータを用いて仮想ページＵＭ’を生成するためには、Ｌのデータが正しいことが前提となる。従って、手順としては、まずページＬの誤り訂正処理を行い、次に仮想ページＵＭ’の生成を行い、その上で仮想ページＵＭ’の誤り訂正処理を行う。
【００５０】
ここで、仮想ページＵＭ’のデータからページＵおよびＭのデータを復元する規則は以下の式（２）の通りである。なお、復元後のページＵのデータをＵＡ［ｉ］、復元後のページＭのデータをＭＡ［ｉ］とする。書き込み時の逆方向となる。エラー訂正対象外のデータは仮想ページＵＭ’から復元するのではなくＮＡＮＤフラッシュメモリ２から読み出したデータ（式（２）の左辺のＵ［ｉ］、Ｍ［ｉ］）そのままとなる。
ＵＡ［ｉ］  ＝  ＵＭ’［ｉ］  （if  Ｌ［ｉ］  ＝  ０）
Ｕ［ｉ］  （otherwise）
ＭＡ［Ａ］  ＝  ＵＭ’［ｉ］  （if  Ｌ［ｉ］  ＝  １）
Ｍ［ｉ］  （otherwise）                      …（２）
【００５１】
また、本実施の形態のさらなるメリットとして、従来全３ページを独立にエラー訂正動作していたところを、ページＵ、Ｍの２ページ分をひとまとまりとしてエラー訂正するということによるエラー訂正確率向上という効果が期待できる。これは、ページＵまたはページＭの片方のページのエラー発生確率が低い場合、結果として、もう片方のページのエラー訂正に訂正能力を振り分けることができるためである。
【００５２】
図１０は、本実施の形態のＮＡＮＤフラッシュメモリ２への書き込み手順の一例を示すフローチャートである。まず、メモリコントローラ１のプロセッサ１２は、同一ワードラインへ書き込むページＵ、Ｍ、Ｌの３ページのデータに基づいて仮想ページＵＭ’のデータ（ＵＭ’の一時データ）を生成し、ＲＡＭ１１へ格納する（ステップＳ１）。プロセッサ１２は、ＥＣＣ回路１４に対してページＬに対するパリティの生成を指示する（ステップＳ２）。この指示により、ＥＣＣ回路１４は、ＲＡＭ１１に格納されているページＬのデータに対してパリティを生成する。
【００５３】
次に、プロセッサ１２は、ＵＭ’の一時データに基づいてパリティを生成するようＥＣＣ回路１４へ指示する（ステップＳ３）。この指示により、ＥＣＣ回路１４は、ＲＡＭ１１に格納されているＵＭ’の一時データに対してパリティを生成する。
【００５４】
プロセッサ１２は、ページＵＭ’、ページＬのパリティを３ページのパリティ格納アドレスに振り分け、ページＵ、Ｍ、Ｌのデータと振り分けたパリティとを結合したデータをＲＡＭ１１上に生成する（ステップＳ４）。その後、プロセッサ１２は、メモリインターフェイス１５に対して、ページＵ、Ｍ、Ｌの３ページ分のデータ（パリティを含む）の書き込みを指示する（ステップＳ５）。
【００５５】
図１１は、本実施の形態のＮＡＮＤフラッシュメモリ２からの読み出し手順の一例を示すフローチャートである。まず、メモリコントローラ１のプロセッサ１２は、メモリインターフェイス１５に対して、読み出し対象のページデータのＮＡＮＤメモリ２からの読み出しを指示する（ステップＳ１１）。この際、読み出し対象データが格納された選択ワードラインに格納されたＵ、Ｍ、Ｌの３ページ分のデータおよびパリティを全て読み出す。ただし、ページＬのみを読み出す場合は、３ページ分のデータを読み出す必要はなく、従来と同様にページＬのページデータ（Ｌパリティを含む）を読み出して従来と同様に誤り訂正を行えばよい。
【００５６】
次に、プロセッサ１２は、ページＬのページデータおよびパリティをＥＣＣ回路１４に送信し、ページＬのデータに対するエラー検出を指示する（ステップＳ１２）。ＥＣＣ回路１４は、指示に基づいてページＬのデータのエラー検出を行う。
【００５７】
プロセッサ１２は、ＥＣＣ回路１４からエラー検出結果を取得し、エラーが存在するか否かを判定する（ステップＳ１３）。エラーが存在したら（ステップＳ１３  Ｙｅｓ）、ＥＣＣ回路１４に対して、ページＬのデータのエラー訂正を指示する（ステップＳ１４）。ＥＣＣ回路１４は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。
【００５８】
プロセッサ１２は、ページＵ、Ｍ、Ｌのデータに基づいて、ＵＭ’の一時データを生成し（ステップＳ１５）、ＵＭ’の一時データと読み出したＵＭ’のパリティをＥＣＣ回路１４に入力してエラー検出の実施を指示する（ステップＳ１６）。ＥＣＣ回路１４は、指示に基づいてＵＭ’の一時データのエラー検出を行う。
【００５９】
プロセッサ１２は、ＵＭ’の一時データのエラー検出結果をＥＣＣ回路１４から取得し、エラーが存在するか否かを判定する（ステップＳ１７）。エラーが存在したら（ステップＳ１７  Ｙｅｓ）、ＥＣＣ回路１４に対して、ＵＭ’の一時データのエラー訂正を指示する（ステップＳ１８）。ＥＣＣ回路１４は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。
【００６０】
次に、プロセッサ１２は、エラー訂正後（エラーのないビットは読み出しデータのまま）のＵＭ’の一時データおよびページＬのデータに基づいてページＵ、Ｍ、Ｌの３ページ分のデータを復元する（ステップＳ１９）。なお、ページについては、エラー訂正後のページＬがそのまま復元後のページＬのデータである。
【００６１】
ステップＳ１３で、ページＬのデータにエラーが存在しなければ（ステップＳ１３  Ｎｏ）、ステップＳ１４は実施せずに、ステップＳ１５へ進む。また、ステップＳ１７で、ＵＭ’の一時データにエラーが存在しなければ（ステップＳ１７  Ｎｏ）、ステップＳ１８は実施せずに、ステップＳ１９へ進む。
【００６２】
このように、本実施の形態では、２つのページのデータのうち、エラーの発生確率が高いデータを抽出して仮想的な１ページ分のデータを生成し、この仮想的な１ページ分のデータに対してパリティを生成するようにした。このため、各ページについてそれぞれパリティを付加する場合に比べ、エラー訂正符号（パリティ）を効率的に使用することが可能になり、パリティデータ量を増やさずエラー訂正能力を向上させることができる。またエラー訂正能力を向上させないのであれば、パリティデータ量を減らすことが出来るのでパリティデータを格納するＮＡＮＤフラッシュメモリ２のメモリセル量やＥＣＣ回路１４の規模を減らすことができコストを削減することができる。
【００６３】
なお、本実施の形態では、図２に示したに示した２−２−３分割のデータ割付の例について、境界数が３であるＬのデータの値によって式（１）に従って仮想ページのデータを生成した。これに限らず、３ページへのデータ境界数の配分が２、２、３個であれば，どのようなデータ割り付けであっても適用可能である。例えば、Ｕ、Ｍ、Ｌの順に３−２−２分割であってもよい。
【００６４】
この理由は、グレイ・コードでは、境界数２個の２ページと境界数３個の１ページの境界位置割り付けは一意に決まり、本手法は境界位置のみに依存しデータが“１”であるか“０”であるかは問わない。従って、この一意に決まっている境界位置割付のうち、境界数を３とするページをＵ、Ｍ、Ｌのどのページとするか、だけの差である。従って、境界数３個のページのデータにより境界数２個の２ページのデータに対する一時データを生成すればよい。例えば、３−２−２分割の場合には、境界数が３であるページＵの値に基づいて、ページＭおよびＬに基づいて仮想的な１ページ分のデータを生成することができる。
【００６５】
（第２の実施の形態）
次に、第２の実施の形態の半導体記憶システムについて説明する。本実施の形態の半導体記憶システムの構成は、第１の実施の形態と同様である。以下、第１の実施の形態と異なる部分を説明する。
【００６６】
第１の実施の形態では、隣接するしきい値分布への移動によるエラーだけを訂正しているが、実際には隣接しないしきい値分布への移動（２レベル以上の移動）等大幅な誤りがわずかな確率ながら発生する。本実施の形態では、第１の実施の形態の利点を有しつつ、隣接するしきい値分布への移動以外の誤りでも訂正可能にする手法を説明する。
【００６７】
図１２は、本実施の形態に本実施の形態のエラー訂正対象とするデータの選び方の一例を示す図である。図１２では、図２に示すデータ割付を前提としている。第１の実施の形態との相違点は、エラー訂正対象から除外していたデータによって仮想ページを生成し、この仮想ページのデータにパリティを付加する点である。本実施の形態では、第１の実施の形態の仮想ページＵＭ’と同一の方法で仮想ページＵ’を生成する。加えて、本実施の形態では、ページＵおよびＭのデータのうち仮想ページＵ’に含まれないデータを用いて仮想ページＭ’を生成する。
【００６８】
すなわち、図１２の破線で示したデータで仮想ページＵ’を構成し、それ以外の一点鎖線で示したデータで仮想ページＭ’を構成する。仮想ページＭ’は１つのメモリセル内で隣のしきい値分布への移動よりも大幅な誤りが発生した場合にエラーとなるデータで構成されるため、仮想ページＭ’のデータにエラーが発生する確率は仮想ページＵのデータに比べてはるかに少ない。このため、仮想ページＭ’に対するエラー訂正能力は高くなくてよく、パリティデータ量は少量でよい。
【００６９】
仮想ページＵ’、仮想ページＭ’にそれぞれ対応する一時データＵ’［ｉ］、Ｍ’［ｉ］を生成する規則を以下の式（３）に示す。
Ｕ’［ｉ］  ＝  Ｕ［ｉ］  （if  Ｌ［ｉ］  ＝  ０）
Ｍ［ｉ］  （otherwise）
Ｍ’［ｉ］  ＝  Ｕ［ｉ］  （if  Ｌ［ｉ］  ＝  １）
Ｍ［ｉ］  （otherwise）                  …（３）
【００７０】
ＮＡＮＤフラッシュメモリ２への書き込み動作時には、上記の式（３）に従って一時データを生成し、仮想ページＵ’、仮想ページＭ’、ページＬの３ページ分のデータに対してパリティを付与する。
【００７１】
図１３は、仮想ページＵ’、Ｍ’の生成とパリティ生成手順の一例を示す図である。図１３の左上図は、ホストから送信されたデータをプロセッサ１２が各ページに割り付けた状態を示している。データ４１，４２，４３は、各々１つのメモリセルに格納される３ビットのデータである。データ５４，５５，５６は、それぞれデータ４１，４２，４３に基づいて生成された仮想ページＵ’、Ｍ’のデータである。前述の式（３）に従って、Ｕ’［ｉ］、Ｍ’［ｉ］を抽出すると、図８の右上図のようになる。ここでは、例として、データ４１，４２，４３を示す番号（ｉ）を１，２，３とする。データ４１は、ページＬのデータが“０”であるから式（３）に従って、Ｕ’［１］＝Ｕ［１］＝１、Ｍ’［１］＝Ｍ［１］＝１となる。データ４３は、ページＬのデータが“１”であるから式（３）に従って、Ｕ’［３］＝Ｍ［３］＝１、Ｍ’［１］＝Ｕ［１］＝０となる。
【００７２】
そして、仮想ページＵ’、Ｍ’のデータとページＬのデータとに基づいてパリティが生成され、図１３の左下図に示すように、ページＵ、ＭおよびＬのデータとパリティが書き込まれる。
【００７３】
ＮＡＮＤフラッシュメモリ２からの読み出し動作時には、ページＬは第１の実施の形態と同様にはそのままパリティを用いて誤り訂正すればよい。ページＵとページＭについては、仮想ページＵ’、仮想ページＭ’の生成（仮想ページＵ’、仮想ページＭ’に対応する一時データの生成）を行い、ページごとにパリティを用いて誤り訂正を行う。その後、ページＵ、ページＭのデータを復元する。また、仮想ページＵ’、仮想ページＭ’に対応する一時データを作成するためにはページＬのデータが正しいことが前提となっているため、手順としては、ページＬの訂正を行った後に仮想ページＵ’、仮想ページＭ’の生成を行う。そして、その上で仮想ページＵ’、仮想ページＭ’の誤り訂正を行い、ページＵ、ページＬの復元となる。
【００７４】
仮想ページＵ’、仮想ページＭ’の一時データからページＵ、Ｍのデータを復元する規則を以下の式（４）に示す。
Ｕ［ｉ］  ＝  Ｕ’［ｉ］  （if  Ｌ［ｉ］  ＝  ０）
Ｍ’［ｉ］  （otherwise）
Ｍ［ｉ］  ＝  Ｕ’［ｉ］  （if  Ｌ［ｉ］  ＝  １）
Ｍ’［ｉ］  （otherwise）                  …（４）
【００７５】
次に、データ量の数値例を挙げる。第１の実施の形態の数値例と同様に、１ページのユーザデータ量を４０９６ｂｉｔとし、このうち４０ｂｉｔを訂正可能な能力のＢＣＨ方式によるＥＣＣ回路１４を用いるとすると、パリティデータ量は５２０ｂｉｔである。
【００７６】
本実施の形態では、ページＬに対して４０ｂｉｔ訂正可能とするためには第１の実施の形態と同様にパリティデータ量は５２０ｂｉｔとなる。仮想ページＵ’に対しては、ページＵとＭのそれぞれを４０ｂｉｔ訂正可能とするためには第１の実施の形態の仮想ページＵＭ’と同様に６９４ｂｉｔとなる。２レベル以上誤るエラーについては４つのメモリセルまで訂正可能であるようにすると、仮想ページＭ’に対するパリティデータ量は１０４ｂｉｔである（２ページ×４ｂｉｔ×１３；１３＝１２＋１；４０９６＝２12）。
【００７７】
図１４は、本実施の形態のＮＡＮＤフラッシュメモリ２へのデータおよびパリティの格納位置の一例を示す図である。図１４では、ＮＡＮＤフラッシュメモリ２の１つのワードラインを共有する３つのページアドレスのメモリセルへのデータ格納位置を示している。前述した誤り訂正符号化の対象とする所定のデータサイズを４０９６ｂｉｔとした例を示しているが、誤り訂正符号化の対象とする所定のデータサイズはこれに限定されない。
【００７８】
本実施の形態では、パリティデータは３ページ分のサイズのデータ量に対して生成されているが、ページＭ’のデータに対するパリティ（Ｍ’パリティ）はデータサイズがＵ’パリティおよびＬパリティと比較すると小さい。そのためここでは、Ｕ’パリティとＬパリティを３ページアドレスにまたがるパリティ格納エリアに分散して格納し、Ｍ’パリティは１つのページアドレスに格納している。各パリティの各ページのパリティ格納エリアへの配分はどのような分散のさせ方でも発明の効果は同じである。
【００７９】
なお、前述したパリティデータ量は３で割り切れないため、整数に切り上げている。この例では、１ページのパリティデータ量は４４０ｂｉｔであり、１ページサイズは４５３６ｂｉｔとなる。このように、本実施の形態では、第１の実施の形態よりはエラー訂正能力を向上させた分増加してするものの、従来の４６１６ｂｉｔよりはデータ量を削減している。
【００８０】
図１５は、本実施の形態のＮＡＮＤフラッシュメモリ２への書き込み手順の一例を示すフローチャートである。まず、メモリコントローラ１のプロセッサ１２は、同一ワードラインへ書き込むページＵ、Ｍ、Ｌの３ページのデータに基づいて仮想ページＵ’、Ｍ’のデータ（仮想ページＵ’、Ｍ’の一時データ）を生成し、ＲＡＭ１１へ格納する（ステップＳ２１）。プロセッサ１２は、ＥＣＣ回路１４に対してページＬに対するパリティの生成を指示する（ステップＳ２２）。この指示により、ＥＣＣ回路１４は、ＲＡＭ１１に格納されているページＬのデータに対してパリティを生成する。
【００８１】
次に、プロセッサ１２は、仮想ページＵ’の一時データに基づいてパリティを生成するようＥＣＣ回路１４へ指示する（ステップＳ２３）。この指示により、ＥＣＣ回路１４は、ＲＡＭ１１に格納されているＵ’の一時データに対してパリティを生成する。
【００８２】
次に、プロセッサ１２は、仮想ページＭ’の一時データに基づいてパリティを生成するようＥＣＣ回路１４へ指示する（ステップＳ２４）。この指示により、ＥＣＣ回路１４は、ＲＡＭ１１に格納されているＭ’の一時データに対してパリティを生成する。なお、ステップＳ２３とステップＳ２４の順序は逆でもよい。
【００８３】
プロセッサ１２は、仮想ページＵ’、Ｍ’およびページＬのパリティを３ページのパリティ格納アドレスに振り分け、ページＵ、Ｍ、Ｌのデータと振り分けたパリティとを結合したデータをＲＡＭ１１上に生成する（ステップＳ２５）。その後、プロセッサ１２は、メモリインターフェイス１５に対して、ページＵ、Ｍ、Ｌの３ページ分のデータ（パリティを含む）の書き込みを指示する（ステップＳ２６）。
【００８４】
図１６は、本実施の形態のＮＡＮＤフラッシュメモリ２からの読み出し手順の一例を示すフローチャートである。まず、メモリコントローラ１のプロセッサ１２は、メモリインターフェイス１５に対して、読み出し対象のページデータのＮＡＮＤメモリ２からの読み出しを指示する（ステップＳ３１）。この際、読み出し対象データが格納された選択ワードラインに格納されたＵ、Ｍ、Ｌの３ページ分のデータおよびパリティを全て読み出す。
【００８５】
次に、プロセッサ１２は、ページＬのページデータおよびパリティをＥＣＣ回路１４に送信し、ページＬのデータに対するエラー検出を指示する（ステップＳ３２）。ＥＣＣ回路１４は、指示に基づいてページＬのデータのエラー検出を行う。
【００８６】
プロセッサ１２は、ＥＣＣ回路１４からエラー検出結果を取得し、エラーが存在するか否かを判定する（ステップＳ３３）。エラーが存在したら（ステップＳ３３  Ｙｅｓ）、ＥＣＣ回路１４に対して、ページＬのデータのエラー訂正を指示する（ステップＳ３４）。ＥＣＣ回路１４は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。
【００８７】
プロセッサ１２は、ページＵ、Ｍ、Ｌのデータに基づいて、Ｕ’、Ｍ’の一時データを生成し（ステップＳ３５）、Ｕ’の一時データと読み出したＵ’パリティとをＥＣＣ回路１４に入力してエラー検出の実施を指示する（ステップＳ３６）。ＥＣＣ回路１４は、指示に基づいてＵ’の一時データのエラー検出を行う。
【００８８】
プロセッサ１２は、Ｕ’の一時データのエラー検出結果をＥＣＣ回路１４から取得し、エラーが存在するか否かを判定する（ステップＳ３７）。エラーが存在したら（ステップＳ３７  Ｙｅｓ）、ＥＣＣ回路１４に対して、Ｕ’の一時データのエラー訂正を指示する（ステップＳ３８）。ＥＣＣ回路１４は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。
【００８９】
次に、Ｍ’の一時データと読み出したＭ’パリティとをＥＣＣ回路１４に入力してエラー検出の実施を指示する（ステップＳ３９）。ＥＣＣ回路１４は、指示に基づいてＭ’の一時データのエラー検出を行う。
【００９０】
プロセッサ１２は、Ｍ’の一時データのエラー検出結果をＥＣＣ回路１４から取得し、エラーが存在するか否かを判定する（ステップＳ４０）。エラーが存在したら（ステップＳ４０  Ｙｅｓ）、ＥＣＣ回路１４に対して、Ｍ’の一時データのエラー訂正を指示する（ステップＳ４１）。ＥＣＣ回路１４は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。
【００９１】
次に、プロセッサ１２は、エラー訂正後（エラーのないビットは読み出しデータのまま）のＵ’、Ｍ’の一時データおよびページＬのデータに基づいてページＵ、Ｍ、Ｌの３ページ分のデータを復元する（ステップＳ４２）。
【００９２】
ステップＳ３３で、ページＬのデータにエラーが存在しなければ（ステップＳ３３  Ｎｏ）、ステップＳ３４は実施せずに、ステップＳ３５へ進む。また、ステップＳ３７で、Ｕ’の一時データにエラーが存在しなければ（ステップＳ３７  Ｎｏ）、ステップＳ３８は実施せずに、ステップＳ３９へ進む。また、ステップＳ４０で、Ｍ’の一時データにエラーが存在しなければ（ステップＳ４０  Ｎｏ）、ステップＳ４１は実施せずに、ステップＳ４２へ進む。
【００９３】
本実施の形態では、第１の実施の形態と同様にページＵおよびＭのうちエラー発生確率の多いデータで仮想ページＵ’を生成してこの仮想ページに対するパリティを生成する。さらに、本実施の形態では、ページＵおよびＭのうち仮想ページＵ’を構成しないデータで別の仮想ページＭ’を構成して、仮想ページＭ’に対して、仮想ページＵ’より誤り訂正能力の低いパリティを生成するようにした。このため、第１の実施の形態と同様の効果が得られるとともに、メモリしきい値が２つ隣まで移動してしまったり、オーバープログラムなどによるメモリセルのしきい値が大きく移動してしまったり、するようなメモリセル内の２ビット以上のエラーでも訂正可能になる。
【００９４】
（第３の実施の形態）
次に、第３の実施の形態の半導体記憶システムについて説明する。本実施の形態の半導体記憶システムの構成は、第１の実施の形態と同様である。以下、第１の実施の形態と異なる部分を説明する。
【００９５】
図１７は、本実施の形態に本実施の形態のエラー訂正対象とするデータの選び方の一例を示す図である。図１７では、図２に示すデータ割付を前提としている。仮想ページＵＭ’の生成方法と、仮想ページＵＭ’に対するパリティの生成方法は第１の実施の形態と同様である。第１の実施の形態との相違点は、ページＵ、Ｍのデータに対しても、ページごとにそれぞれパリティを付加することである。
【００９６】
第２の実施の形態で述べたように、隣接しないしきい値分布への移動（２レベル以上の移動）等大幅な誤りがわずかな確率ながら発生する。本実施の形態では、第１の実施の形態の利点を有しつつ、隣接するしきい値分布への移動以外の誤りでも訂正可能にするために、ページＵ、Ｍのデータに対してもパリティを付加する。ただし、隣接するしきい値分布に対応するエラーの訂正は、ページＵＭ’のパリティを用いて実施できるため、ページＵ、Ｍに対するパリティは、エラー訂正能力はそれほど高くなくてよくパリティデータ量は少量でよい。
【００９７】
ＮＡＮＤフラッシュメモリ２からの読み出し動作時には、まず、第１の実施の形態と同様にページＬの誤り訂正を行い、次に仮想ページＵＭ’の生成を行い、その上でページＵＭ’の誤り訂正を行ってページＵ、Ｍを復元する。その後、ページＵ、Ｍについての誤り訂正を行う。
【００９８】
次に、データ量の数値例を挙げる。第１の実施の形態の数値例と同様に、１ページのユーザデータ量を４０９６ｂｉｔとし、このうち４０ｂｉｔを訂正可能な能力のＢＣＨ方式によるＥＣＣ回路１４を用いるとすると、パリティデータ量は５２０ｂｉｔである。
【００９９】
本実施の形態では、ページＬに対して４０ｂｉｔ訂正可能とするためには、第１の実施の形態と同様にページＬのパリティデータ量は５２０ｂｉｔである。ページＵ、Ｍのそれぞれを４０ｂｉｔ訂正可能とするためには第１の実施の形態と同様に、ページＵＭ’のパリティデータ量は６９４ｂｉｔとなる。さらに、ページＵ、Ｍについて２レベル以上誤るセルの数を４セルまで訂正可能であるようにするには、ページＵ、Ｍに対するパリティデータ量はそれぞれ５２ｂｉｔである（４ｂｉｔ×１３；１３＝１２＋１；４０９６＝２12）。
【０１００】
図１８は、本実施の形態のＮＡＮＤフラッシュメモリ２へのデータおよびパリティの格納位置の一例を示す図である。図１８では、ＮＡＮＤフラッシュメモリ２の１つのワードラインを共有する３つのページアドレスのメモリセルへのデータ格納位置を示している。前述した誤り訂正符号化の対象とする所定のデータサイズを４０９６ｂｉｔとした例を示しているが、誤り訂正符号化の対象とする所定のデータサイズはこれに限定されない。
【０１０１】
本実施の形態では、パリティデータは４ページ分のサイズのデータ量に対して生成されているが、ページＵのデータに対するパリティ（Ｕパリティ）、およびページＭのデータに対するパリティ（Ｍパリティ）は、データサイズがＵＭ’パリティおよびＬパリティと比較すると小さい。ここでは、ＵＭ’パリティ、Ｌパリティ、ＵパリティおよびＭパリティのすべてのパリティをすべて３ページアドレスにまたがるパリティ格納エリアに分散して格納している。各パリティの各ページのパリティ格納エリアへの配分はどのような分散のさせ方でも発明の効果は同じである。
【０１０２】
前述したパリティデータ量は３で割り切れないため、整数に切り上げている。この例では、１ページのパリティデータ量は４４２ｂｉｔであり、１ページサイズは４５３８ｂｉｔとなる。この例では、ページサイズは、エラー訂正能力を向上させた分、第１の実施の形態よりは増加しているが、従来の４６１６ｂｉｔよりはデータ量を削減している。
【０１０３】
図１９は、本実施の形態のＮＡＮＤフラッシュメモリ２への書き込み手順の一例を示すフローチャートである。まず、メモリコントローラ１のプロセッサ１２は、同一ワードラインへ書き込むページＵ、Ｍ、Ｌのうち、ページＵのデータに対するパリティの生成を指示する（ステップＳ５１）。ＥＣＣ回路１４は、指示に基づいてページＵのデータに対してパリティを生成する。
【０１０４】
次に、プロセッサ１２は、ページＭのデータに対するパリティの生成を指示する（ステップＳ５２）。ＥＣＣ回路１４は、指示に基づいてページＭのデータに対してパリティを生成する。
【０１０５】
次に、プロセッサ１２は、ページＵ、Ｍ、Ｌの３ページのデータに基づいて仮想ページＵＭ’のデータ（仮想ページＵＭ’の一時データ）を生成し、ＲＡＭ１１へ格納する（ステップＳ５３）。そして、プロセッサ１２は、ＥＣＣ回路１４に対してページＬに対するパリティの生成を指示する（ステップＳ５４）。この指示により、ＥＣＣ回路１４は、ＲＡＭ１１に格納されているページＬのデータに対してパリティを生成する。さらに、プロセッサ１２は、ＥＣＣ回路１４に対して仮想ページＵＭ’に対するパリティの生成を指示する（ステップＳ５５）。この指示により、ＥＣＣ回路１４は、ＲＡＭ１１に格納されている仮想ページＵＭ’のデータに対してパリティを生成する。
【０１０６】
そして、プロセッサ１２は、仮想ページＵＭ’、ページＵ、Ｍ、Ｌのパリティを３ページのパリティ格納アドレスに振り分け、ページＵ、Ｍ、Ｌのデータと振り分けたパリティとを結合したデータをＲＡＭ１１上に生成する（ステップＳ５６）。その後、プロセッサ１２は、メモリインターフェイス１５に対して、ページＵ、Ｍ、Ｌの３ページ分のデータ（パリティを含む）の書き込みを指示する（ステップＳ５７）。
【０１０７】
図２０は、本実施の形態のＮＡＮＤフラッシュメモリ２からの読み出し手順の一例を示すフローチャートである。まず、メモリコントローラ１のプロセッサ１２は、メモリインターフェイス１５に対して、読み出し対象のページデータのＮＡＮＤメモリ２からの読み出しを指示する（ステップＳ６１）。この際、読み出し対象データが格納された選択ワードラインに格納されたＵ、Ｍ、Ｌの３ページ分のデータおよびパリティを全て読み出す。
【０１０８】
次に、プロセッサ１２は、ページＬのページデータおよびパリティをＥＣＣ回路１４に送信し、ページＬのデータに対するエラー検出を指示する（ステップＳ６２）。ＥＣＣ回路１４は、指示に基づいてページＬのデータのエラー検出を行う。
【０１０９】
プロセッサ１２は、ＥＣＣ回路１４からエラー検出結果を取得し、エラーが存在するか否かを判定する（ステップＳ６３）。エラーが存在したら（ステップＳ６３  Ｙｅｓ）、ＥＣＣ回路１４に対して、ページＬのデータのエラー訂正を指示する（ステップＳ６４）。ＥＣＣ回路１４は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。
【０１１０】
プロセッサ１２は、ページＵ、Ｍ、Ｌのデータに基づいて、ＵＭ’の一時データを生成し（ステップＳ６５）、生成したＵＭ’の一時データと読み出したＵＭ’パリティとをＥＣＣ回路１４に入力してエラー検出の実施を指示する（ステップＳ６６）。ＥＣＣ回路１４は、指示に基づいてＵＭ’の一時データのエラー検出を行う。
【０１１１】
プロセッサ１２は、ＵＭ’の一時データのエラー検出結果をＥＣＣ回路１４から取得し、エラーが存在するか否かを判定する（ステップＳ６７）。エラーが存在したら（ステップＳ６７  Ｙｅｓ）、ＥＣＣ回路１４に対して、ＵＭ’の一時データのエラー訂正を指示する（ステップＳ６８）。ＥＣＣ回路１４は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。
【０１１２】
次に、エラー訂正後のページＬのデータ、エラー訂正後のＵＭ’のデータを用いて、ページＵのデータおよびページＭのデータを復元する（ステップＳ６９）。ここで復元されるページＵおよびページＭのデータは、ＵＭ’パリティによる誤り訂正がなされたデータ（すなわち隣接するしきい値分布への移動の誤りが訂正されたデータ）である。
【０１１３】
プロセッサ１２は、復元後のページＵのデータと読み出したＵパリティとをＥＣＣ回路１４に入力してエラー検出の実施を指示する（ステップＳ７０）。ＥＣＣ回路１４は、復元後のページＵのエラー検出を行う。
【０１１４】
プロセッサ１２は、復元後のページＵのエラー検出結果をＥＣＣ回路１４から取得し、エラーが存在するか否かを判定する（ステップＳ７１）。エラーが存在したら（ステップＳ７１  Ｙｅｓ）、ＥＣＣ回路１４に対して、復元後のページＵのエラー訂正の実施を指示する（ステップＳ７２）。ＥＣＣ回路１４は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。
【０１１５】
次に、プロセッサ１２は、復元後のページＭのデータと読み出したＵパリティとをＥＣＣ回路１４に入力してエラー検出の実施を指示する（ステップＳ７３）。プロセッサ１２は、復元後のページＭのエラー検出結果をＥＣＣ回路１４から取得し、エラーが存在するか否かを判定する（ステップＳ７３）。エラーが存在したら（ステップＳ７４  Ｙｅｓ）、ＥＣＣ回路１４に対して、復元後のページＭのエラー訂正の実施を指示する（ステップＳ７５）。ＥＣＣ回路１４は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。
【０１１６】
ステップＳ６３で、ページＬのデータにエラーが存在しなければ（ステップＳ６３  Ｎｏ）、ステップＳ６４は実施せずに、ステップＳ６５へ進む。また、ステップＳ６７で、ＵＭ’の一時データにエラーが存在しなければ（ステップＳ６７  Ｎｏ）、ステップＳ６８は実施せずに、ステップＳ６９へ進む。また、ステップＳ７１で、復元後のページＵにエラーが存在しなければ（ステップＳ７１  Ｎｏ）、ステップＳ７２は実施せずに、ステップＳ７３へ進む。また、ステップＳ７４で、復元後のページＭにエラーが存在しなければ（ステップＳ７４  Ｎｏ）、ステップＳ７５は実施しない。
【０１１７】
本実施の形態では、第１の実施の形態と同様に第１の実施の形態と同様にページＵおよびＭのうちエラー発生確率の多いデータで仮想ページＵＭ’を生成してこの仮想ページに対するパリティを生成する。さらに、本実施の形態では、ページＵ、Ｍについても仮想ページＵＭ’より誤り訂正能力の低いパリティを生成するようにした。このため、第１の実施の形態と同様の効果が得られるとともに、メモリしきい値が２つ隣まで移動してしまったり、オーバープログラムなどによるメモリセルのしきい値が大きく移動してしまったり、するようなメモリセル内の２ビット以上のエラーでも訂正可能になる。
【０１１８】
また、本実施の形態では、第２の実施の形態よりパリティデータ量は増える。しかしながら、第２の実施の形態では一時データを２ページ分生成する必要があったところが本実施例では１ページ分でよいので、一時データを保持するためのワーキングメモリを小さくすることが可能である。
【０１１９】
（第４の実施の形態）
図２１は、第４の実施の形態におけるＮＡＮＤフラッシュメモリ２のメモリセルにデータを格納する際のメモリセルのしきい値とデータの割付の一例を示す図である。本実施の形態の半導体記憶システムの構成は、第１の実施の形態と同様である。以下、第１の実施の形態と異なる部分を説明する。
【０１２０】
本実施の形態では、１つのメモリセルに４ｂｉｔを格納する例について説明する。４ｂｉｔを格納するために、１６種類のしきい値分布を定義し、図２１に示すように各々のしきい値分布にデータを割り当てている。本実施の形態でも、隣接するしきい値分布に割り当てるデータは１ｂｉｔの差となるグレイ・コードとしている。１つのメモリセルに格納される４ｂｉｔにそれぞれ対応するページアドレスを、それぞれＴ（Top）、Ｈ（Higher）、Ｕ（Upper）、Ｌ（Lower）とする。図２１では、両側の隣接するしきい値分布への移動でデータが変化しない位置を破線で囲っている。
【０１２１】
図２２は、本実施の形態に本実施の形態のエラー訂正対象とするデータの選び方の一例を示す図である。前述したように、エラー要因が隣へのしきい値分布移動であるとすると、両隣の隣接しきい値分布でデータが変化しないデータはエラーが発生しない。１つのメモリセルに３ｂｉｔのデータを格納する場合（３ｂｉｔ／セルの場合）は、第１の実施の形態の図７で示したように、エラーが発生しない分布位置（図７の例では、ページＵ、Ｍの破線以外の位置）がページ間での分布位置重なりを持たない。さらに、３ｂｉｔ／セルの場合は、第１の実施の形態で説明したように、残りの１つのページ（図７の例では、ページＬ）のデータ値によって、対応するしきい値分布において、どちらのページが、エラーが発生しやすいかを判別することが可能であった。
【０１２２】
しかし、図２１に示すように、１つのメモリセルに４ｂｉｔのデータを格納する場合には、エラーが発生しない分布位置を２つのページ間で重なりなく、またぬけなく抽出することはできない場合がある。４ページのうちの２つのページ（ページＡ、Ｂとする）に着目した場合に、ページＡにおいてエラーが発生しない位置であるしきい値分布がページＢにおいてはエラーが発生する位置であり、かつページＢにおいてエラーが発生しない位置であるしきい値分布がページＡにおいてはエラーが発生する位置である場合には、第１の実施の形態と同様にページＡ、Ｂからエラーが発生する位置のデータを抽出することができる。しかし、図２１のように、エラーが発生しない分布位置を２つのページ間で重なる場合は、２ページのデータからエラーが発生するデータだけを抽出した仮想ページを生成することができない。
【０１２３】
したがって、本実施の形態では、隣へのしきい値分布移動によりエラーが生じるデータだけを含む仮想ページを生成できないため、２つ以上の境界を超えてしきい値分布が移動するエラーが生じるデータも含んだ仮想ページを生成する。ただし、後者のデータ（２つ以上の境界を超えてしきい値分布が移動するエラーが生じるデータ）は、少なくなるよう仮想ページを生成する。図２２の例では、ページＨ、Ｕのデータによりこの仮想ページを構成し、この仮想ページをページＵ’としている。また、ページＨ、ＵのうちページＵ’を構成しないデータにより別の仮想ページを構成し、この別の仮想ページを仮想ページＨ’としている。仮想ページＨ’は、２つ以上の境界を超えてしきい値分布が移動するエラーが生じるデータが大多数だが、隣へのしきい値分布移動によるエラーが生じるデータを少量含む。そして仮想ページＨ’、Ｕ’の両方についてパリティを付加する。エラー訂正能力は、仮想ページＵ’を高く、仮想ページＨ’は低くてよい。ページＴ、Ｌについては、それぞれページごとにパリティを付加する。
【０１２４】
仮想ページＨ’、Ｕ’を構成する一時データを、それぞれＨ’［ｉ］，Ｕ’［ｉ］とすると、Ｈ’［ｉ］，Ｕ’［ｉ］を生成する規則は以下の式（５）で表すことができる。
Ｈ’［ｉ］  ＝  Ｈ［ｉ］  （if  Ｌ［ｉ］  ＝  １）
Ｕ［ｉ］  （otherwise）
Ｕ’［ｉ］  ＝  Ｈ［ｉ］  （if  Ｌ［ｉ］  ＝  ０）
Ｕ［ｉ］  （otherwise）                  …（５）
【０１２５】
図２２の例では、仮想ページＨ’を構成する位置を破線で囲み、仮想ページＵ’を構成する位置を一点鎖線で囲んでいる。図２１からわかるように、一番左のしきい値分布Ｅｒは、ページＵ、Ｈもいずれも隣へのしきい値分布移動によりエラーが生じるデータでない。しかし、図２２の上側の図をみるとわかるように、ページＵのしきい値分布Ｅｒに対応するデータは仮想ページＵ’に割当られる。このように、仮想ページＵ’は、隣へのしきい値分布移動によりエラーが生じるデータを多く含むものの、しきい値分布移動によりエラーが生じるデータでないものも含んでいる。
【０１２６】
なお、ここでは、Ｌ［ｉ］の値に基づいて仮想ページＨ’、Ｕ’を生成するようにしたが、仮想ページＨ’と仮想ページＵ’のうち、仮想ページＵ’が仮想ページＨ’より、隣へのしきい値分布移動によりエラーが生じるデータを多く含むような仮想ページの生成方法であれば、上記の式（５）で示した生成方法に限定されない。例えば、上記のしきい値分布Ｅｒに対応するデータは、図２２の例と逆に、仮想ページＵ’にページＨのデータを割り当て、仮想ページＨ’にページＵのデータを割り当ててもよい。この場合には、ページＬの値に基づいて仮想ページＵ’、Ｈ’を生成することができないため、ページＴ、Ｈ、Ｕ、Ｌの各データの値との仮想ページＵ’、Ｈ’との対応表等を用いて仮想ページＵ’、Ｈ’を生成する。
【０１２７】
ＮＡＮＤフラッシュメモリ２への書き込み動作時には、式（５）の規則に従って２ページ分の一時データを生成する。そして、それ以外の２ページと合わせた４ページ分のデータに対してパリティを付与する。なお、式（５）では、ページＨ、Ｕのデータを用いて仮想ページＨ’、Ｕ’を生成する例を示したが、他の２ページを用いて、同様に仮想ページを生成してもよい。
【０１２８】
図２３は、本実施の形態の仮想ページＨ’、Ｕ’の生成手順の一例を示す図である。図２３の左側の図は、元になるページＴ、Ｈ、Ｕ、Ｌのデータ例を示し、右側の図は、生成された仮想ページＨ’、Ｕ’のデータ例を示している。データ６１、６２、６３、６４は、各々１つのメモリセルに格納される４ビットのデータである。データ７１、７２、７３、７４は、それぞれデータ６１、６２、６３、６４に基づいて生成された仮想ページＨ’、Ｕ’のデータである。
【０１２９】
ＮＡＮＤフラッシュメモリ２からの読み出し動作時には、ページＴ、Ｌはそのまま誤り訂正すればよい。ページＨ、Ｕについては、Ｈ’［ｉ］，Ｕ’［ｉ］という一時データを作成し、作成した一時データ（仮想ページ）に対して誤り訂正を行った後に、ページＨ、Ｕに復元する。またＨ’［ｉ］，Ｕ’［ｉ］という一時データを作成するためには、ページＬのデータが正しいことが前提となっているため、手順としては、まずページＬの訂正を行い、次にＨ’［ｉ］，Ｕ’［ｉ］の生成を行い、その上でＨ’［ｉ］，Ｕ’［ｉ］の訂正を行い、ページＨ、Ｕの復元となる。
【０１３０】
一時データＨ’［ｉ］，Ｕ’［ｉ］から、ページＨ、Ｌのデータ（Ｈ［ｉ］，Ｕ［ｉ］）を復元する規則は書き込み時の逆方向となり以下の式（６）に示す通りである。
Ｈ［ｉ］  ＝  Ｈ’［ｉ］  （if  Ｌ［ｉ］  ＝  １）
Ｕ［ｉ］    （otherwise）
Ｕ［ｉ］  ＝  Ｈ’［ｉ］  （if  Ｌ［ｉ］  ＝  ０）
Ｕ［ｉ］    （otherwise）                    …（６）
【０１３１】
以上のようなパリティの付加の方法をとることにより、４ｂｉｔ／セルの場合でも他のパリティデータ量を減らすことが可能になる。
【０１３２】
図２４は、本実施の形態のＮＡＮＤフラッシュメモリ２へのデータおよびパリティの格納位置の一例を示す図である。この例では、Ｔパリティ、Ｈ’パリティ、Ｕ’パリティ、Ｌパリティを、それぞれ４ページアドレスにまたがるパリティ格納エリアに分散して格納する。ここでは、Ｔパリティ、Ｈ’パリティ、Ｕ’パリティ、Ｌパリティをそれぞれ４等分して分散させているが、Ｔパリティ、Ｈ’パリティ、Ｕ’パリティ、Ｌパリティの各パリティ格納エリアへの分散させ方はこれに限らず、どのような分散のさせ方でも発明の効果は同じである。Ｈ’パリティは、他のパリティに比べパリティデータ量を減らすことができる。
【０１３３】
図２５は、本実施の形態のＮＡＮＤフラッシュメモリ２への書き込み手順の一例を示すフローチャートである。まず、メモリコントローラ１のプロセッサ１２は、同一ワードラインへ書き込むページＨ、Ｕ、Ｌの３ページのデータに基づいて仮想ページＨ’、Ｕ’の一時データを生成し、ＲＡＭ１１へ格納する（ステップＳ８１）。なお、ＮＡＮＤフラッシュメモリ２へ書き込むのはページＴ、Ｈ、Ｕ、Ｌの４ページであるが、式（５）に示すように、仮想ページＨ’、Ｕ’の生成にページＴは用いない。
【０１３４】
プロセッサ１２は、ＥＣＣ回路１４に対してページＴに対するパリティの生成を指示する（ステップＳ８２）。この指示により、ＥＣＣ回路１４は、ＲＡＭ１１に格納されているページＴのデータに対してパリティを生成する。プロセッサ１２は、ＥＣＣ回路１４に対してページＬに対するパリティの生成を指示する（ステップＳ８３）。この指示により、ＥＣＣ回路１４は、ＲＡＭ１１に格納されているページＬのデータに対してパリティを生成する。
【０１３５】
次に、プロセッサ１２は、仮想ページＨ’の一時データに基づいてパリティを生成するようＥＣＣ回路１４へ指示する（ステップＳ８４）。この指示により、ＥＣＣ回路１４は、ＲＡＭ１１に格納されているＨ’の一時データに対してパリティを生成する。
【０１３６】
次に、プロセッサ１２は、仮想ページＵ’の一時データに基づいてパリティを生成するようＥＣＣ回路１４へ指示する（ステップＳ８５）。この指示により、ＥＣＣ回路１４は、ＲＡＭ１１に格納されているＵ’の一時データに対してパリティを生成する。
【０１３７】
プロセッサ１２は、仮想ページＨ’、Ｕ’およびページＴ、Ｌのパリティを４ページのパリティ格納アドレスに振り分け、ページＴ、Ｈ、Ｕ、Ｌのデータと振り分けたパリティとを結合したデータをＲＡＭ１１上に生成する（ステップＳ８６）。その後、プロセッサ１２は、メモリインターフェイス１５に対して、ページＴ、Ｈ、Ｕ、Ｌの４ページ分のデータ（パリティを含む）の書き込みを指示する（ステップＳ８７）。
【０１３８】
図２６は、本実施の形態のＮＡＮＤフラッシュメモリ２からの読み出し手順の一例を示すフローチャートである。まず、メモリコントローラ１のプロセッサ１２は、メモリインターフェイス１５に対して、読み出し対象のページデータのＮＡＮＤメモリ２からの読み出しを指示する（ステップＳ９１）。なお、読み出し対象データが格納された選択ワードラインに格納されたＴ、Ｈ、Ｕ、Ｌの４ページ分のデータおよびパリティを全て読み出すとする。ただし、ページＴ、Ｌのみを読み出す場合は、従来と同様にページＴ、Ｌのページデータ（Ｌパリティ、Ｔパリティを含む）をそれぞれ読み出して従来と同様にそれぞれ誤り訂正を行えばよい。また、ページＨのみ、またはページＵのみ、またはページＨおよびＵを読み出す場合には、ページＨ、Ｕ、Ｌの３ページを読み出す。
【０１３９】
次に、プロセッサ１２は、ページＴのページデータおよびパリティをＥＣＣ回路１４に送信し、ページＴのデータに対するエラー検出を指示する（ステップＳ９２）。ＥＣＣ回路１４は、指示に基づいてページＴのデータのエラー検出を行う。
【０１４０】
プロセッサ１２は、ＥＣＣ回路１４からエラー検出結果を取得し、エラーが存在するか否かを判定する（ステップＳ９３）。エラーが存在したら（ステップＳ９３  Ｙｅｓ）、ＥＣＣ回路１４に対して、ページＴのデータのエラー訂正を指示する（ステップＳ９４）。ＥＣＣ回路１４は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。
【０１４１】
次に、プロセッサ１２は、ページＬのページデータおよびパリティをＥＣＣ回路１４に送信し、ページＬのデータに対するエラー検出を指示する（ステップＳ９５）。ＥＣＣ回路１４は、指示に基づいてページＬのデータのエラー検出を行う。
【０１４２】
プロセッサ１２は、ＥＣＣ回路１４からエラー検出結果を取得し、エラーが存在するか否かを判定する（ステップＳ９６）。エラーが存在したら（ステップＳ９６  Ｙｅｓ）、ＥＣＣ回路１４に対して、ページＬのデータのエラー訂正を指示する（ステップＳ９７）。ＥＣＣ回路１４は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。
【０１４３】
プロセッサ１２は、ページＨ、Ｕ、Ｌのデータに基づいて、Ｈ’、Ｕ’の一時データを生成し（ステップＳ９８）、Ｈ’の一時データと読み出したＨ’パリティとをＥＣＣ回路１４に入力してエラー検出の実施を指示する（ステップＳ９９）。ＥＣＣ回路１４は、指示に基づいてＨ’の一時データのエラー検出を行う。
【０１４４】
プロセッサ１２は、Ｈ’の一時データのエラー検出結果をＥＣＣ回路１４から取得し、エラーが存在するか否かを判定する（ステップＳ１００）。エラーが存在したら（ステップＳ１００  Ｙｅｓ）、ＥＣＣ回路１４に対して、Ｈ’の一時データのエラー訂正を指示する（ステップＳ１０１）。ＥＣＣ回路１４は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。
【０１４５】
次に、Ｕ’の一時データと読み出したＵ’パリティとをＥＣＣ回路１４に入力してエラー検出の実施を指示する（ステップＳ１０２）。ＥＣＣ回路１４は、指示に基づいてＵ’の一時データのエラー検出を行う。
【０１４６】
プロセッサ１２は、Ｕ’の一時データのエラー検出結果をＥＣＣ回路１４から取得し、エラーが存在するか否かを判定する（ステップＳ１０３）。エラーが存在したら（ステップＳ１０３  Ｙｅｓ）、ＥＣＣ回路１４に対して、Ｕ’の一時データのエラー訂正を指示する（ステップＳ１０４）。ＥＣＣ回路１４は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。
【０１４７】
次に、プロセッサ１２は、エラー訂正後（エラーのないビットは読み出しデータのまま）のＨ’、Ｕ’の一時データおよびページＬ、Ｔのデータに基づいて、ページＴ、Ｈ、Ｕ、Ｌの４ページ分のデータを復元する（ステップＳ１０５）。ただし、ページＴ、Ｌは、復元処理は必要ないため、エラー訂正後のデータそのままが復元データとなる。
【０１４８】
ステップＳ９３で、ページＴのデータにエラーが存在しなければ（ステップＳ９３  Ｎｏ）、ステップＳ９４は実施せずに、ステップＳ９５へ進む。また、ステップＳ９６で、Ｌの一時データにエラーが存在しなければ（ステップＳ９６  Ｎｏ）、ステップＳ９７は実施せずに、ステップＳ９８へ進む。また、ステップＳ１００で、Ｈ’の一時データにエラーが存在しなければ（ステップＳ１００  Ｎｏ）、ステップＳ１０１は実施せずに、ステップＳ１０２へ進む。また、ステップＳ１０３で、Ｕ’の一時データにエラーが存在しなければ（ステップＳ１０３  Ｎｏ）、ステップＳ１０４は実施せずに、ステップＳ１０５へ進む。
【０１４９】
このように、本実施の形態では、１つのメモリセルに４ｂｉｔのデータを格納する場合に、２ページ分のデータから、エラー発生確率の高い仮想ページとエラー発生確率の低い仮想ページとを生成し、それぞれの仮想ページにパリティを付加するようにした。このため、エラー発生確率の低い仮想ページのパリティデータ量を少なくすることができ、パリティ格納領域を効率的に使用することができる。このため、パリティデータ量を増やさずエラー訂正能力を向上させることができる。
【０１５０】
なお、第１の実施の形態〜第４の実施の形態では、２ページ分のデータからエラー発生確率の多い仮想ページを生成するようにしたが、３ページ以上のデータから、エラー発生確率の多い仮想ページを生成するようにしてもよい。この場合、第１の実施の形態のようにエラー発生確率の多い仮想ページだけにパリティを付加してもよいし、第２の実施の形態のようにさらに元のページに低い訂正能力のパリティを付加してもよい。また、エラー発生確率の低い１以上の仮想ページも生成して、エラー発生確率の低い仮想ページに低い訂正能力のパリティを付加してもよい。
【０１５１】
（第５の実施の形態）
以上の実施の形態では、メモリコントローラ１がＥＣＣ回路１４を備える半導体記憶システムの例を示したが、ＥＣＣ回路を内蔵するＮＡＮＤフラッシュメモリも存在する。
【０１５２】
図２７は、ＥＣＣ回路を内蔵しないＮＡＮＤフラッシュメモリの一例を示す図である。図２７に示すように、このＮＡＮＤフラッシュメモリは、ＮＡＮＤ  Memory  Cell  Array２１と、Sense  Amp.（Amplifier）２２と、Page  Buffer２３と、Row  Decoder２４と、Voltage  Supply２５と、Controller２６と、ＮＡＮＤ  I/O（Input/Output）  Interface２７と、を備える。上述の第１の実施の形態〜第４の実施の形態では、このようにＥＣＣ回路を備えないＮＡＮＤフラッシュメモリを用いることを前提としている。なお、図２７は、一般的な構成の一例を示すものであり、図２７の構成に限定されない。各部の動作は、従来と同様であり、詳細な説明は省略する。
【０１５３】
図２８は、ＥＣＣ回路を内蔵するＮＡＮＤフラッシュメモリの一例を示す図である。図２８の例では、図２５の構成例にＥＣＣ回路２８およびＲＡＭ２９を追加している。なお、図２８は、一般的な構成の一例を示すものであり、ＥＣＣ回路２８を備えていれば図２８の構成に限定されない。
【０１５４】
図２８に例示したＮＡＮＤフラッシュメモリを用いる場合は、上述のＮＡＮＤコントローラのＥＣＣ回路１４の動作をＮＡＮＤフラッシュメモリ内のＥＣＣ回路２８が実施する。第１の実施の形態〜第４の実施の形態で述べた仮想ページの生成等に関するプロセッサ１２の動作は、このＮＡＮＤフラッシュメモリに接続するメモリコントローラが内蔵するプロセッサが行うようにしてもよいし、ＮＡＮＤフラッシュメモリ内のController２６が行うようにしてもよい。
【０１５５】
このように、第１の実施の形態〜第４の実施の形態は、様々な構成の半導体記憶システムに適用可能であり、半導体記憶システムに制約はない。
【０１５６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１５７】
１  メモリコントローラ、２  ＮＡＮＤフラッシュメモリ、１２  プロセッサ、１４  ＥＣＣ回路、１５  メモリインターフェイス。
【図１】
2013089082.tif 000003
【図２】
2013089082.tif 000004
【図３】
2013089082.tif 000005
【図４】
2013089082.tif 000006
【図５】
2013089082.tif 000007
【図６】
2013089082.tif 000008
【図７】
2013089082.tif 000009
【図８】
2013089082.tif 000010
【図９】
2013089082.tif 000011
【図１０】
2013089082.tif 000012
【図１１】
2013089082.tif 000013
【図１２】
2013089082.tif 000014
【図１３】
2013089082.tif 000015
【図１４】
2013089082.tif 000016
【図１５】
2013089082.tif 000017
【図１６】
2013089082.tif 000018
【図１７】
2013089082.tif 000019
【図１８】
2013089082.tif 000020
【図１９】
2013089082.tif 000021
【図２０】
2013089082.tif 000022
【図２１】
2013089082.tif 000023
【図２２】
2013089082.tif 000024
【図２３】
2013089082.tif 000025
【図２４】
2013089082.tif 000026
【図２５】
2013089082.tif 000027
【図２６】
2013089082.tif 000028
【図２７】
2013089082.tif 000029
【図２８】
2013089082.tif 000030