"各しきい値分布に対して、3ビットのデータが割り当てられ、第1のビットが第1ページのデータを表現し、第2のビットが第2ページのデータを表現し、第3のビットが第3ページのデータを表現する3ビット/セルのメモリセルを有する不揮発性半導体メモリを制御するメモリコントローラであって、前記不揮発性半導体メモリの第1のメモリ領域に、第1ページ、第2ページ、第3ページの3ページ分のデータを書き込む場合に、前記第1のメモリ領域の各メモリセルに書き込まれるデータの第1のビット及び第2のビットから、隣接するしきい値分布への移動によりエラーとなるビットを抽出して仮想ページを生成する制御部と、前記仮想ページに対する第1の誤り訂正符号を生成する符号化部と、前記3ページ分のデータと前記第1の誤り訂正符号とを前記不揮発性半導体メモリへ書き込むインターフェイス部とを備えることを特徴とするメモリコントローラ。各しきい値分布に対して、3ビットのデータが割り当てられ、第1のビットが第1ページのデータを表現し、第2のビットが第2ページのデータを表現し、第3のビットが第3ページのデータを表現する3ビット/セルのメモリセルを有する不揮発性半導体メモリを制御するメモリコントローラであって、前記しきい値分布ごとの前記3ビットのデータの割り付けがグレイコードであり、前記グレイコードの第1ページ、第2ページの境界数が2であり、第3ページの境界数が3であり、前記メモリの第1のメモリ領域に、第1ページ、第2ページ、第3ページの3ページ分のデータを書き込む場合に、前記第3ページの値を参照し、前記第3ページが1である場合には、第1ページのビットを抽出し、前記第3ページが0である場合には、第2ページのビットを抽出して仮想ページを生成する制御部と、前記仮想ページに対する第1の誤り訂正符号を生成する符号化部と、前記3ページ分のデータと前記第1の誤り訂正符号とを前記不揮発性半導体メモリへ書き込むインターフェイス部とを備えることを特徴とするメモリコントローラ。前記不揮発性半導体メモリから読み出されたデータと誤り訂正符号とに基づいて誤り訂正処理を行う誤り訂正処理部をさらに備え、前記インターフェイス部は、前記不揮発性半導体メモリから前記3ページ分のデータと前記第1の誤り訂正符号とを読み出し、前記制御部は、前記読み出された3ページ分のデータから前記仮想ページを生成し、前記誤り訂正処理部は、前記第1の誤り訂正符号に基づいて、前記仮想ページに対する誤り訂正処理を実行することを特徴とする請求項1又は2に記載のメモリコントローラ。前記符号化部は、前記第3ページに対する第2の誤り訂正符号を生成し、前記インターフェイス部は、前記第1の誤り訂正符号と前記第2の誤り訂正符号を、前記第1乃至3ページの冗長データとして分散して前記不揮発性半導体メモリに書き込むことを特徴とする請求項1乃至3に記載のメモリコントローラ。前記不揮発性半導体メモリから読み出したデータに対して誤り訂正処理を行う誤り訂正処理部、をさらに備え、前記制御部は、さらに、前記2以上のページの書き込みデータのうち前記仮想ページデータを除いたデータに対する誤り訂正符号を前記仮想ページ符号より訂正能力の低い少ビット誤り訂正符号として生成するよう前記符号化部へ指示し、前記少ビット誤り訂正符号を前記2以上のページの書き込みデータとともに前記不揮発性半導体メモリへ格納するよう前記インターフェイス部へ指示し、前記不揮発性半導体メモリからの読み出し時に、読み出した前記2以上のページの書き込みデータから前記仮想ページデータ以外を選択し、選択したデータと前記少ビット誤り訂正符号とに基づいて誤り訂正処理を行うよう前記誤り訂正処理部へ指示し、当該誤り訂正処理後のデータに基づいてページごとの書き込みデータを復元する、ことを特徴とする請求項1乃至4のいずれか1項に記載のメモリコントローラ。前記不揮発性半導体メモリから読み出したデータに対して誤り訂正処理を行う誤り訂正処理部、をさらに備え、前記制御部は、さらに、前記2以上のページの書き込みデータに対するページごとの誤り訂正符号を前記仮想ページ符号より訂正能力の低いページ誤り訂正符号として生成するよう前記符号化部へ指示し、前記ページ誤り訂正符号を前記2以上のページの書き込みデータとともに前記不揮発性半導体メモリへ格納するよう前記インターフェイス部へ指示し、前記ページごとの書き込みデータの復元の後に、復元後の書き込みデータとページ誤り訂正符号とに基づいて誤り訂正処理を行うよう前記誤り訂正処理部へ指示する、ことを特徴とする請求項1乃至4のいずれか1項に記載のメモリコントローラ。各しきい値分布に対して、3ビットのデータが割り当てられ、第1のビットが第1ページのデータを表現し、第2のビットが第2ページのデータを表現し、第3のビットが第3ページのデータを表現する3ビット/セルのメモリセルを有する不揮発性半導体メモリと、前記不揮発性半導体メモリの第1のメモリ領域に、第1ページ、第2ページ、第3ページの3ページ分のデータを書き込む場合に、前記第1のメモリ領域の各メモリセルに書き込まれるデータの第1のビット及び第2のビットから、隣接するしきい値分布への移動によりエラーとなるビットを抽出して仮想ページを生成する制御部と、前記仮想ページに対する第1の誤り訂正符号を生成する符号化部と、前記3ページ分のデータと前記第1の誤り訂正符号とを前記メモリへ書き込むインターフェイス部とを備えることを特徴とする半導体記憶システム。各しきい値分布に対して、3ビットのデータが割り当てられ、第1のビットが第1ページのデータを表現し、第2のビットが第2ページのデータを表現し、第3のビットが第3ページのデータを表現する3ビット/セルのメモリセルを有する不揮発性半導体メモリを制御するメモリ制御方法であって、前記不揮発性半導体メモリの第1のメモリ領域に、第1ページ、第2ページ、第3ページの3ページ分のデータを書き込む場合に、前記第1のメモリ領域の各メモリセルに書き込まれるデータの第1のビット及び第2のビットから、隣接するしきい値分布への移動によりエラーとなるビットを抽出して仮想ページを生成する制御ステップと、前記仮想ページに対する第1の誤り訂正符号を生成する符号化ステップと、前記3ページ分のデータと前記第1の誤り訂正符号とを前記メモリへ書き込みステップと、を含むことを特徴とするメモリ制御方法。NAND型フラッシュメモリの微細化超多値化に伴いエラーが発生する確率が上がると、エラー訂正後のデータ正当性を維持するために必要となるパリティデータ量が増大する。これはパリティデータを保存するためのメモリサイズ量が増大することを意味しており、コスト上昇を引き起こし問題となる。または、コスト上昇を抑えるためにパリティデータ量を増やさずエラー訂正能力を据え置いた場合は、貯蔵したデータのエラーを訂正しきれずに、エラー残存確率が増大してしまう。本願発明の一態様によれば、各しきい値分布に対して、3ビットのデータが割り当てられ、第1のビットが第1ページのデータを表現し、第2のビットが第2ページのデータを表現し、第3のビットが第3ページのデータを表現する3ビット/セルのメモリセルを有する不揮発性半導体メモリを制御するメモリコントローラであって、不揮発性半導体メモリの第1のメモリ領域に、第1ページ、第2ページ、第3ページの3ページ分のデータを書き込む場合に、第1のメモリ領域の各メモリセルに書き込まれるデータの第1のビット及び第2のビットから、隣接するしきい値分布への移動によりエラーとなるビットを抽出して仮想ページを生成する制御部と、仮想ページに対する第1の誤り訂正符号を生成する符号化部と、3ページ分のデータと第1の誤り訂正符号とを不揮発性半導体メモリへ書き込むインターフェイス部とを備える。以下に添付図面を参照して、実施形態にかかるメモリコントローラ、半導体記憶システムおよびメモリ制御方法を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。第1の実施の形態図1は、第1の実施の形態にかかる半導体記憶システムの構成例を示すブロック図である。本実施の形態の半導体記憶システムは、メモリコントローラ1とNANDフラッシュメモリ不揮発性半導体メモリ2で構成される。NANDフラッシュメモリ2は、不揮発性メモリであり、メモリコントローラ1からの制御により書き込み読み出し消去などの動作を行う。メモリコントローラ1は、ランダムアクセスメモリRAM11、プロセッサ12、ホストインターフェイス13、ECCErrorCheckingandCorrection回路14、メモリインターフェイスインタフェース部15およびデータバス16を備える。ホストインターフェイス13は、ホストとのデータ交換に必要なプロトコルを備える。ホストの例としては、パーソナルコンピュータやCPUCentralProcessingUnitコア等があげられる。メモリインターフェイス15は、NANDフラッシュメモリ2とのデータ交換に必要なプロトコルを備え、NANDフラッシュメモリ2との間でコマンド、アドレス、制御信号およびデータの送受信を行う。プロセッサ12は、半導体記憶システムの各構成要素を統括的に制御する制御部であり、CPUコア、ROMReadOnlyMemory、DMADirectMemoryAccessコントローラなどで構成される。プロセッサ12は、ホストからホストインターフェイス13およびデータバス16経由で命令を受けた場合に、その命令に従った制御を行う。例えば、プロセッサ12は、ホストからの命令に従って、NANDフラッシュメモリ2へのデータの書き込みやNANDフラッシュメモリ2からのデータの読み出しなどを、メモリインターフェイス15へ指示する。また、プロセッサ12は、ECC回路14へ誤り訂正符号化処理または復号化処理の実施を指示する。ECC回路14は、プロセッサ12からの指示に従って、NANDフラッシュメモリ2へ書き込むデータに対する誤り訂正符号化処理を行うとともにNANDフラッシュメモリ2に格納されたデータのエラーの検出や訂正処理を行う。RAM11は、プロセッサ12のワーキングメモリとして使用される。なお図1の構成例には示されていないが、メモリコントローラ15にはホストとのインターフェイスのためのコードデータを格納するROMなどをさらに含むことがある。このように、図1の構成例は一例であり本実施の形態の半導体記憶システムは図1の構成例に限定されず、一般的な構成の変形が行われていてもよい。NANDフラッシュメモリ2は、1つのメモリセルに3bit以上のデータを格納する。本実施の形態では、1つのメモリセルに3bitのデータを格納する例を説明する。図2は、NANDフラッシュメモリ2のメモリセルにデータを格納する際のメモリセルのしきい値とデータの割付の一例を示す図である。1つのメモリセルに3bitのデータを格納するため、7つの境界閾値である境界1~7を用いて8種類のしきい値分布を定義している。NANDフラッシュメモリ2は、ページPage単位で読み出し書き込み動作を行う。一般に、多値セルでは、1つのメモリセルに格納される各bitには異なるページが割当られる。ここでは、3bitに対応するページアドレスをそれぞれUUpper、MMiddle、LLowerとする。図2の上側の図は、メモリセルごとに格納される各ページのデータの値の組み合わせとメモリセルのしきい値の対応の一例を示している。図2の下側の図は、メモリセルのしきい値を横軸にとり、セル数を縦軸にとった場合のセル数の分布しきい値分布の例を示している。図2に示したデータの割付は、隣接するしきい値分布に割り当てるデータは1bitの違いとなるいわゆるグレイコードとしているが、その理由は後述する。図2に示すように、U,M,Lのページごとにみると、ページUでは、データの値が1から0または0から1となる境界が2箇所図2の境界3と境界7存在する。ページMでは、境界が2箇所図2の境界1と境界5存在し、ページLでは、境界が3箇所図2の境界2、境界4および境界6存在する。以下では、このような各ページへの境界数の割当を、U、M、Lの順に境界数分割数を示して、2-2-3分割と呼ぶこととする。各ページへの境界数の割当は、これに限定されず、他の例については後述する。次に、本実施の形態のNANDフラッシュメモリ2の書き込みおよび読み出しの全体動作について説明する。まず、プロセッサ12は、ホストからデータの書き込みを指示されると、ECC回路14にデータの誤り訂正符号化の実施を指示する。ホストから送信される書き込み対象のデータは、RAM11に一時的に格納される。ECC回路14は、RAM11に格納されたデータに基づいて誤り訂正符号化処理を実施し、誤り訂正符号を生成する。そして、プロセッサ12は、メモリインターフェイス15に対してデータおよび当該データに対して生成された誤り訂正符号以下、本実施の形態ではパリティとよぶをNANDフラッシュメモリ2へ書き込みよう指示する。この際、メモリインターフェイス15へデータおよび誤り訂正符号の書き込みアドレスを指示し、メモリインターフェイス15は、指示されたアドレスへデータおよびパリティを書き込む。プロセッサ12は、論理アドレスと、NANDフラッシュメモリ2の物理アドレスと、の対応を保持しており、メモリインターフェイス15に対しては書き込みアドレスとして物理アドレスを指定する。なお、ここでは、書き込み時に論理アドレスと物理アドレスを直接変換する例について説明したが、これに限らず、多段階でアドレスを変換するホスト装置の論理アドレスから半導体記憶システムの論理アドレスへ一旦変換した後に、物理アドレスへ変換する等の方式としてもよい。また、プロセッサ12は、ホストからデータの読み出しを指示されると、当該データのNANDフラッシュメモリ2からの読み出しをメモリインターフェイス15へ指示する。ホストからは論理アドレスにより読み出し対象のデータが指定されるため、プロセッサ12は、保持している論理アドレスとNANDフラッシュメモリ2の物理アドレスとの対応に基づいて対応する物理アドレスをメモリインターフェイス15へ指示する。この際、プロセッサ12は、読み出しデータに対応するパリティも読みだす。プロセッサ12は、読みだしたデータとパリティに基づく誤り訂正復号化処理の実施をECC回路14へ指示する。ECC回路14は、指示に基づいて誤り訂正復号化処理を実施する。プロセッサ12は、誤り訂正復号化処理後のデータをホストインターフェイス13経由でホストへ送信する。図3は、ECC回路14の構成例を示す図である。図3に示したECC回路14は、BCH方式を採用するECC回路である。このECC回路14では、ParityGenerator符号化部141はNANDフラッシュメモリ2へのデータの書き込み時に、データバス16経由で入力される所定のサイズの書き込みデータに基づいて誤り訂正符号化処理によりパリティを生成する。なお、所定のサイズは任意な数値を設定可能であるが、例えば、セクターサイズである。セクターサイズは、例えば、512バイト4096bitである。ParityGenerator14は、生成したパリティをデータバスへ返信する。SyndromeGenerator142,KeyEquationSolver143,ChienSearch144,ErrorCorrection145の各ユニットは、NANDフラッシュメモリ2からのデータのからの読み出し動作時に使用される誤り訂正処理部を構成し、読み出したデータのエラー有無の検出とエラー訂正データの出力を行う。読み出したデータは、データバス16からSyndromeGenerator142へ入力される。SyndromeGenerator142は、入力されたデータに基づいてSyndromeを形成して、これをKeyEquationSolver143へ入力する。KeyEquationSolver143は、Syndromeを用いて誤り位置多項式を導出しエラーのビット数を判定する。KeyEquationSolver143は、エラービット数が1より大きい場合は誤り位置多項式をChienSearch144へ入力する。ChienSearch144は、入力された誤り位置多項式に基づいてエラーのビットの場所を特定する。ErrorCorrection145は、エラーのビットの場所に応じてビットデータを反転することによりエラーを訂正する。なお、図3の構成は一例であり、本実施の形態は、ECC回路14の構成は図3の例に限定されない。また、誤り訂正方式は、BCH、リードソロモン符号、LDPCLowDensityParityCheckなど様々なものが実用化されており、誤り訂正方式もBCHに限らずどのような方式を用いてもよい。ここで、NANDフラッシュメモリに格納されたデータのエラーについて説明する。NANDフラッシュメモリに格納されたデータにエラーが発生する要因は様々なものがあるが、代表的な要因として、電荷リーク、ソフトプログラム、オーバープログラムがある。図4は、電荷リークによるエラー発生の様子を示す図である。NANDフラッシュメモリのメモリセルは、しきい値電圧分布によってONセルとOFFセルに区分される。ONセルはデータ1を格納した状態で、OFFセルはデータ0を格納した状態である。電荷リークによるエラーは、書き込みがされてOFFセルとなったセルが、ONセルとして読み出されるエラーである。電荷リークは、メモリセルのフローティングゲートや酸化膜にトラップされた電子が酸化膜を通してメモリセルのチャネルに漏れることである。NANDフラッシュメモリでは、読み出し動作時には、選択ワードライン図4では、WL31を選択ワードラインとするには選択読み出し電圧Vcgrが印加され、非選択ワードラインWL0~WL30およびWL32~WL63には非選択読み出し電圧Vreadが印加される。ここでVreadは、非選択ワードラインに連結されているメモリセルをONさせるのに充分高い電圧である。選択ワードラインに連結されたメモリセルに電荷リークが発生すると、メモリセルのしきい値電圧は低くなり、OFFセルのしきい値分布がONセルの方に移動する。図4の分布31は、電荷リークが発生していない場合のONセルのしきい値分布を示し、分布32は、電荷リークが発生していない場合のOFFセルのしきい値分布を示している。電荷リークが発生すると、OFFセルのしきい値分布は、点線の分布33に示したように下降する。このように電荷リークにより下降したしきい値がVcgrより低くなると、本来はOFFセルであるメモリセルが読み出し時にONセルとして読み出され、エラーとなる。図5は、ソフトプログラムによるエラー発生の様子を示す図である。ソフトプログラムとは、読み出しの動作時に非選択読み出し電圧が印加されることにより、チャネルからフローティングゲートに電子がわずかに流入することである。ソフトプログラムによるエラーは、書き込みがされておらずONセルであったメモリセルがOFFセルとして読み出されるエラーである。図5の分布31は、ソフトプログラムが発生していない場合のONセルのしきい値分布を示し、分布32は、ソフトプログラムが発生していない場合のOFFセルのしきい値分布を示している。選択ワードラインWL31に連結されたメモリセルにソフトプログラムが発生すると、メモリセルのしきい値電圧は分布34に示すように上昇し、ONセルのしきい値分布がOFFセルの方に移動する。しきい値がVcgrより高くなると、ONセルであるのに、本来はONセルであるメモリセルが読み出し時にOFFセルとして読み出され、エラーとなる。図6は、オーバープログラムによるエラー発生の様子を示す図である。オーバープログラムとは、書き込み時に相対的に書き込み速度が速いメモリセルが書き込み後に上限電圧より高いしきい値電圧になることである。分布31は、オーバープログラムが発生していない場合のONセルのしきい値分布を示し、分布32は、オーバープログラムが発生していない場合のOFFセルのしきい値分布を示している。分布35は、オーバープログラムにより上限電圧を超えたメモリセルのしきい値分布を示している。この上限電圧はVreadより低い必要があるが、書き込み動作時はしきい値が上限電圧を超えたかどうかのチェックはしないのが通例である。オーバープログラムによるエラーは、書き込みがされておらずONセルであったメモリセルがOFFセルとして読み出されるエラーである。読み出し動作時、選択ワードラインWL31にVcgrが印加され読み出し対象のメモリセルが正しくONしたとしても、同じセルストリング上の非選択ワードラインWL0~WL30およびWL32~WL63に連接されたメモリセルにオーバープログラムが発生すると、このセルストリングのチャネル抵抗は増加する。チャネル抵抗が増加すれば、ONセルである選択メモリセルがあたかもOFFしたように読み出され、エラーとなる。以上に説明した3つのエラー代表要因のうち、電荷リークとソフトプログラムはしきい値分布が移動することにより生じる。多値メモリセルの場合は、しきい値分布が隣接するしきい値分布として誤って読み出されることになる。図2で例示したようなグレイコードによるデータ割付をしておけば、これらの要因でのエラーの量はメモリセル内の1bitにとどめることができる。例えば、図2の例では、境界1と境界2の間の分布Aが、境界1以下の分布Erとして読み出されるか、または境界2と境界3の間の分布Bとして読み出されるかのいずれかとなる。分布Erとして読み出された場合はページMにおいて1bitのエラーが生じ、分布Bとして読み出された場合はページLにおいて1bitのエラーが生じることになる。一方、上述のオーバープログラムによれば、しきい値分布は最上位電圧の分布に移動したように読み出されるため、2bitのエラーも発生しうる。またメモリセルが物理的に破損しているような不良セルは、一般的にはメモリチップの製造テスト工程で除外されたり冗長メモリセルに置き換え処理がなされたりするが、その後の使用過程でも疲労などにより破損しうる。このような不良セルの読み出し動作時のエラー挙動は予測が難しく、全3bitがエラーとなることもある。しかしながら、適切な製造テスト工程を経た後はエラーの要因の大多数が電荷リークとソフトプログラムによる隣へのしきい値分布移動であるということが一般的に観測されている。本実施の形態および後続の実施の形態では、この事実に基づいて、エラー訂正の対象を隣へのしきい値分布移動に限定する、または隣へのしきい値分布移動をエラー訂正の主対象とすることでエラー訂正能力を下げずにコストを下げる。または、コストを上げずにエラー訂正能力を向上させる。以下、主にエラー訂正能力を下げずにコストを下げる例を説明するが、同様の手法でコストを上げずにエラー訂正能力を向上させる効果を得ることができることは自明である。図7は、本実施の形態のエラー訂正対象とするデータの選び方の一例を示す図である。図7では、図2で示したデータ割付を前提としている。エラー要因が隣のしきい値分布への移動であるとすると、両隣の隣接しきい値分布でデータが変化しないデータはエラーが発生しない。図7では、ページUおよびMのうち、破線で囲まれた以外のデータは、しきい値分布が隣へ移動してもデータが変化しない。例えば、左から2番目のデータ1,0,1=ページUのデータ,ページMのデータ,ページLのデータは、隣のしきい値分布に移動すると1,1,1または1,0,0となるが、ページUのデータはいずれに移動した場合も1のままで変化しない。なお、ページLでは、実際には、図2で示した分布Erと分布Gの場合に、実際には隣のしきい値分布へ移動してもデータは変化しないが、ここでは、手順を簡易にするためにページLはすべてのデータでデータエラーが発生するものと扱う。本実施の形態では、ページUおよびMについては、隣のしきい値分布への移動によりデータの値が変化する破線で囲まれたデータのみをエラー訂正対象パリティ付与対象とする。ページLについては、全てのデータをエラー訂正対象とする。ここでは、ページUおよびMのデータのうち、エラー訂正対象抜き出した仮想ページUM’を一時的に生成し、仮想ページUM’のデータに対してパリティを付与する。図7の下側の図は、仮想ページUM’の抽出方法を示している。図7の上側の図と比較するとわかるように、ページUにおいて破線で囲まれているデータに対応するしきい値分布ではページMのデータは破線で囲まれていない。同様に、ページMにおいて破線で囲まれているデータに対応するしきい値分布ではページUのデータは破線で囲まれていない。従って、仮想ページUM’として、各しきい値分布に対してページUとページMのいずれか一方のデータを抽出すればよい。次に、仮想ページUM’の生成方法について述べる。ここでは、ページLのデータの値に基づいて仮想ページUM’を生成する方法を述べる。なお、仮想ページUM’の生成方法はこれに限定されない。例えば、しきい値分布ごとにページUのデータを抽出するかページMのデータを抽出するかの対応を保持しておき、ページU,M,Lの3ビットのデータの値に基づいて対応するしきい値分布を識別して保持している対応に基づいてデータを抽出して、仮想ページUM’の生成する方法等としてもよい。仮想ページUM’のデータをUM’[i]iはページ内のデータの番号を示す整数とする。このとき、ページLのデータの値に基づいて仮想ページUM’を生成する規則を、以下の式1に示す。UM’[i]=U[i]ifL[i]=0M[i]otherwise...1そして、生成した仮想ページUM’の所定のサイズのデータに基づいてパリティを生成し、NANDフラッシュメモリ2への書き込み動作時には書き込みデータとともにパリティを書き込む。ページLについては従来と同様に所定のサイズのデータに基づいてパリティを生成する。従って、本実施の形態では、ページLおよびUM’の2ページ分のデータに対してパリティを付与する。従来のページL,M,Nの3ページ分のデータに対してパリティを付与する方法に比べ、本実施の形態ではパリティ付与対象のデータを削減できる。図8は、仮想ページUM’の生成とパリティ生成手順の一例を示す図である。図8の左上図は、ホストから送信されたデータをプロセッサ12が各ページに割り付けた状態を示している。データ41,42,43は、各々1つのメモリセルに格納される3ビットのデータである。データ51,52,53は、それぞれデータ41,42,43に基づいて生成された仮想ページUM’のデータである。前述の式1に従って、UM’[i]を抽出すると、図8の右上図のようになる。ここでは、例として、データ41,42,43を示す番号iを1,2,3とする。データ41は、ページLのデータが0であるから式1に従って、UM’[1]=U[1]=1となる。データ43は、ページLのデータが1であるから式1に従って、UM’[3]=M[3]=1となる。そして、仮想ページUM’のデータとページLのデータとに基づいてパリティが生成され、図8の左下図に示すように、ページU、MおよびLのデータとパリティが書き込まれる。このようなパリティの付加の方法をとることにより、パリティデータサイズを減らすことが可能になる。以下、数値の一例を挙げて説明する。1ページのユーザデータ量を4096bitとし、このうち40bitを訂正可能な能力のECC回路14を用いるとする。4096bitを40bit訂正可能にするためのパリティデータ量は、BCH方式による最小データ量として520bitである40bit×13:13=1214096=212。従って、各ページにパリティを付加する従来例では、各ページに520bitのパリティデータ量を必要とする。このため、1ページサイズデータとパリティの合計サイズは4616bitとなる。本実施の形態では、ページLに対しては、従来と同等の40bi訂正可能としなければ同等の不良確率にすることは出来ないため、520bitのパリティデータ量とする。仮想ページUM’に対しては、ページLと同等の不良確率にするには4/3倍の訂正能力とする。4/3倍の理由は以下による。仮想ページUM’では、ページUでしきい値分布の移動によりエラーとなる場合とページMでしきい値分布の移動によりエラーとなる場合との両方を含む。従って、仮想ページUM’のエラー確率は、ページU、Mの両ページの合計となる。図2に示すように、ページUは隣の分布へ移動してデータエラーとなる箇所が2箇所境界3、境界7、ページMも隣の分布へ移動してデータエラーとなる箇所が2箇所境界1、境界5であり、合計すると4箇所である。これに対して、ページLは3箇所境界2、境界4、境界6であるため、仮想ページUM’のエラー発生確率は、比率としてはページLの4/3倍となる。従って、ページUM’に対するパリティデータ量は694bitとなる。図9は、本実施の形態のNANDフラッシュメモリ2へのデータおよびパリティの格納位置の一例を示す図である。図9では、NANDフラッシュメモリ2の1つのワードラインを共有する3つのページアドレスのメモリセルへのデータ格納位置を示している。前述した誤り訂正符号化の対象とする所定のデータサイズを4096bitとした例を示しているが、誤り訂正符号化の対象とする所定のデータサイズはこれに限定されない。本実施の形態では、パリティは2ページ分のサイズのデータ量に対して生成されているため、パリティデータを3ページアドレスにまたがるパリティ格納エリアに分散して格納する。図9では、仮想ページUM’UM’パリティのパリティとページLのパリティLパリティを両方とも3分して3ページに振り分けているが、これに限らずどのような分散のさせ方でもよい。また、パリティのデータ量は、ページLが520bit、仮想ページUM’を694bitとしているが、パリティのデータ量はこれらに限定されない。なお、前述したページL、仮想ページUM’のパリティデータ量は3で割り切れないため、整数に切り上げている。図9の例では、1ページのパリティデータ量は4096bitであり、1ページサイズ1ページ分のデータとパリティのデータ量は4502bitとなり、ページごとに520bitのパリティを付加する場合の1ページサイズ4616bitよりデータ量を削減することができる。ここでは、パリティのデータ量を削減する例を示したが、従来例と同等の各ページ520bitずつ計1560bitのパリティデータ量を確保したとすれば、誤り訂正能力を上げることが可能となる。この場合は不良確率を向上させるメリットとなることはいうまでもない。NANDフラッシュメモリ2からの読み出し動作時には、書き込みデータページU、M、Lのデータと対応するパリティとが同時に読み出される。ただし、本実施の形態では、パリティは仮想ページUM’とページLの2ページ分のデータに対するものである。ページLはそのまま誤り訂正処理を行えばよいが、ページUおよびMについては、書き込み時と同様に仮想ページUM’を作成する。そして、仮想ページUM’に対して誤り訂正処理を行った後、再度、ページU、Mに復元する。なお、前述の式1に示したようにページLのデータを用いて仮想ページUM’を生成するためには、Lのデータが正しいことが前提となる。従って、手順としては、まずページLの誤り訂正処理を行い、次に仮想ページUM’の生成を行い、その上で仮想ページUM’の誤り訂正処理を行う。ここで、仮想ページUM’のデータからページUおよびMのデータを復元する規則は以下の式2の通りである。なお、復元後のページUのデータをUA[i]、復元後のページMのデータをMA[i]とする。書き込み時の逆方向となる。エラー訂正対象外のデータは仮想ページUM’から復元するのではなくNANDフラッシュメモリ2から読み出したデータ式2の左辺のU[i]、M[i]そのままとなる。UA[i]=UM’[i]ifL[i]=0U[i]otherwiseMA[A]=UM’[i]ifL[i]=1M[i]otherwise...2また、本実施の形態のさらなるメリットとして、従来全3ページを独立にエラー訂正動作していたところを、ページU、Mの2ページ分をひとまとまりとしてエラー訂正するということによるエラー訂正確率向上という効果が期待できる。これは、ページUまたはページMの片方のページのエラー発生確率が低い場合、結果として、もう片方のページのエラー訂正に訂正能力を振り分けることができるためである。図10は、本実施の形態のNANDフラッシュメモリ2への書き込み手順の一例を示すフローチャートである。まず、メモリコントローラ1のプロセッサ12は、同一ワードラインへ書き込むページU、M、Lの3ページのデータに基づいて仮想ページUM’のデータUM’の一時データを生成し、RAM11へ格納するステップS1。プロセッサ12は、ECC回路14に対してページLに対するパリティの生成を指示するステップS2。この指示により、ECC回路14は、RAM11に格納されているページLのデータに対してパリティを生成する。次に、プロセッサ12は、UM’の一時データに基づいてパリティを生成するようECC回路14へ指示するステップS3。この指示により、ECC回路14は、RAM11に格納されているUM’の一時データに対してパリティを生成する。プロセッサ12は、ページUM’、ページLのパリティを3ページのパリティ格納アドレスに振り分け、ページU、M、Lのデータと振り分けたパリティとを結合したデータをRAM11上に生成するステップS4。その後、プロセッサ12は、メモリインターフェイス15に対して、ページU、M、Lの3ページ分のデータパリティを含むの書き込みを指示するステップS5。図11は、本実施の形態のNANDフラッシュメモリ2からの読み出し手順の一例を示すフローチャートである。まず、メモリコントローラ1のプロセッサ12は、メモリインターフェイス15に対して、読み出し対象のページデータのNANDメモリ2からの読み出しを指示するステップS11。この際、読み出し対象データが格納された選択ワードラインに格納されたU、M、Lの3ページ分のデータおよびパリティを全て読み出す。ただし、ページLのみを読み出す場合は、3ページ分のデータを読み出す必要はなく、従来と同様にページLのページデータLパリティを含むを読み出して従来と同様に誤り訂正を行えばよい。次に、プロセッサ12は、ページLのページデータおよびパリティをECC回路14に送信し、ページLのデータに対するエラー検出を指示するステップS12。ECC回路14は、指示に基づいてページLのデータのエラー検出を行う。プロセッサ12は、ECC回路14からエラー検出結果を取得し、エラーが存在するか否かを判定するステップS13。エラーが存在したらステップS13Yes、ECC回路14に対して、ページLのデータのエラー訂正を指示するステップS14。ECC回路14は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。プロセッサ12は、ページU、M、Lのデータに基づいて、UM’の一時データを生成しステップS15、UM’の一時データと読み出したUM’のパリティをECC回路14に入力してエラー検出の実施を指示するステップS16。ECC回路14は、指示に基づいてUM’の一時データのエラー検出を行う。プロセッサ12は、UM’の一時データのエラー検出結果をECC回路14から取得し、エラーが存在するか否かを判定するステップS17。エラーが存在したらステップS17Yes、ECC回路14に対して、UM’の一時データのエラー訂正を指示するステップS18。ECC回路14は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。次に、プロセッサ12は、エラー訂正後エラーのないビットは読み出しデータのままのUM’の一時データおよびページLのデータに基づいてページU、M、Lの3ページ分のデータを復元するステップS19。なお、ページについては、エラー訂正後のページLがそのまま復元後のページLのデータである。ステップS13で、ページLのデータにエラーが存在しなければステップS13No、ステップS14は実施せずに、ステップS15へ進む。また、ステップS17で、UM’の一時データにエラーが存在しなければステップS17No、ステップS18は実施せずに、ステップS19へ進む。このように、本実施の形態では、2つのページのデータのうち、エラーの発生確率が高いデータを抽出して仮想的な1ページ分のデータを生成し、この仮想的な1ページ分のデータに対してパリティを生成するようにした。このため、各ページについてそれぞれパリティを付加する場合に比べ、エラー訂正符号パリティを効率的に使用することが可能になり、パリティデータ量を増やさずエラー訂正能力を向上させることができる。またエラー訂正能力を向上させないのであれば、パリティデータ量を減らすことが出来るのでパリティデータを格納するNANDフラッシュメモリ2のメモリセル量やECC回路14の規模を減らすことができコストを削減することができる。なお、本実施の形態では、図2に示したに示した2-2-3分割のデータ割付の例について、境界数が3であるLのデータの値によって式1に従って仮想ページのデータを生成した。これに限らず、3ページへのデータ境界数の配分が2、2、3個であれば,どのようなデータ割り付けであっても適用可能である。例えば、U、M、Lの順に3-2-2分割であってもよい。この理由は、グレイコードでは、境界数2個の2ページと境界数3個の1ページの境界位置割り付けは一意に決まり、本手法は境界位置のみに依存しデータが1であるか0であるかは問わない。従って、この一意に決まっている境界位置割付のうち、境界数を3とするページをU、M、Lのどのページとするか、だけの差である。従って、境界数3個のページのデータにより境界数2個の2ページのデータに対する一時データを生成すればよい。例えば、3-2-2分割の場合には、境界数が3であるページUの値に基づいて、ページMおよびLに基づいて仮想的な1ページ分のデータを生成することができる。第2の実施の形態次に、第2の実施の形態の半導体記憶システムについて説明する。本実施の形態の半導体記憶システムの構成は、第1の実施の形態と同様である。以下、第1の実施の形態と異なる部分を説明する。第1の実施の形態では、隣接するしきい値分布への移動によるエラーだけを訂正しているが、実際には隣接しないしきい値分布への移動2レベル以上の移動等大幅な誤りがわずかな確率ながら発生する。本実施の形態では、第1の実施の形態の利点を有しつつ、隣接するしきい値分布への移動以外の誤りでも訂正可能にする手法を説明する。図12は、本実施の形態に本実施の形態のエラー訂正対象とするデータの選び方の一例を示す図である。図12では、図2に示すデータ割付を前提としている。第1の実施の形態との相違点は、エラー訂正対象から除外していたデータによって仮想ページを生成し、この仮想ページのデータにパリティを付加する点である。本実施の形態では、第1の実施の形態の仮想ページUM’と同一の方法で仮想ページU’を生成する。加えて、本実施の形態では、ページUおよびMのデータのうち仮想ページU’に含まれないデータを用いて仮想ページM’を生成する。すなわち、図12の破線で示したデータで仮想ページU’を構成し、それ以外の一点鎖線で示したデータで仮想ページM’を構成する。仮想ページM’は1つのメモリセル内で隣のしきい値分布への移動よりも大幅な誤りが発生した場合にエラーとなるデータで構成されるため、仮想ページM’のデータにエラーが発生する確率は仮想ページUのデータに比べてはるかに少ない。このため、仮想ページM’に対するエラー訂正能力は高くなくてよく、パリティデータ量は少量でよい。仮想ページU’、仮想ページM’にそれぞれ対応する一時データU’[i]、M’[i]を生成する規則を以下の式3に示す。U’[i]=U[i]ifL[i]=0M[i]otherwiseM’[i]=U[i]ifL[i]=1M[i]otherwise...3NANDフラッシュメモリ2への書き込み動作時には、上記の式3に従って一時データを生成し、仮想ページU’、仮想ページM’、ページLの3ページ分のデータに対してパリティを付与する。図13は、仮想ページU’、M’の生成とパリティ生成手順の一例を示す図である。図13の左上図は、ホストから送信されたデータをプロセッサ12が各ページに割り付けた状態を示している。データ41,42,43は、各々1つのメモリセルに格納される3ビットのデータである。データ54,55,56は、それぞれデータ41,42,43に基づいて生成された仮想ページU’、M’のデータである。前述の式3に従って、U’[i]、M’[i]を抽出すると、図8の右上図のようになる。ここでは、例として、データ41,42,43を示す番号iを1,2,3とする。データ41は、ページLのデータが0であるから式3に従って、U’[1]=U[1]=1、M’[1]=M[1]=1となる。データ43は、ページLのデータが1であるから式3に従って、U’[3]=M[3]=1、M’[1]=U[1]=0となる。そして、仮想ページU’、M’のデータとページLのデータとに基づいてパリティが生成され、図13の左下図に示すように、ページU、MおよびLのデータとパリティが書き込まれる。NANDフラッシュメモリ2からの読み出し動作時には、ページLは第1の実施の形態と同様にはそのままパリティを用いて誤り訂正すればよい。ページUとページMについては、仮想ページU’、仮想ページM’の生成仮想ページU’、仮想ページM’に対応する一時データの生成を行い、ページごとにパリティを用いて誤り訂正を行う。その後、ページU、ページMのデータを復元する。また、仮想ページU’、仮想ページM’に対応する一時データを作成するためにはページLのデータが正しいことが前提となっているため、手順としては、ページLの訂正を行った後に仮想ページU’、仮想ページM’の生成を行う。そして、その上で仮想ページU’、仮想ページM’の誤り訂正を行い、ページU、ページLの復元となる。仮想ページU’、仮想ページM’の一時データからページU、Mのデータを復元する規則を以下の式4に示す。U[i]=U’[i]ifL[i]=0M’[i]otherwiseM[i]=U’[i]ifL[i]=1M’[i]otherwise...4次に、データ量の数値例を挙げる。第1の実施の形態の数値例と同様に、1ページのユーザデータ量を4096bitとし、このうち40bitを訂正可能な能力のBCH方式によるECC回路14を用いるとすると、パリティデータ量は520bitである。本実施の形態では、ページLに対して40bit訂正可能とするためには第1の実施の形態と同様にパリティデータ量は520bitとなる。仮想ページU’に対しては、ページUとMのそれぞれを40bit訂正可能とするためには第1の実施の形態の仮想ページUM’と同様に694bitとなる。2レベル以上誤るエラーについては4つのメモリセルまで訂正可能であるようにすると、仮想ページM’に対するパリティデータ量は104bitである2ページ×4bit×13;13=121;4096=212。図14は、本実施の形態のNANDフラッシュメモリ2へのデータおよびパリティの格納位置の一例を示す図である。図14では、NANDフラッシュメモリ2の1つのワードラインを共有する3つのページアドレスのメモリセルへのデータ格納位置を示している。前述した誤り訂正符号化の対象とする所定のデータサイズを4096bitとした例を示しているが、誤り訂正符号化の対象とする所定のデータサイズはこれに限定されない。本実施の形態では、パリティデータは3ページ分のサイズのデータ量に対して生成されているが、ページM’のデータに対するパリティM’パリティはデータサイズがU’パリティおよびLパリティと比較すると小さい。そのためここでは、U’パリティとLパリティを3ページアドレスにまたがるパリティ格納エリアに分散して格納し、M’パリティは1つのページアドレスに格納している。各パリティの各ページのパリティ格納エリアへの配分はどのような分散のさせ方でも発明の効果は同じである。なお、前述したパリティデータ量は3で割り切れないため、整数に切り上げている。この例では、1ページのパリティデータ量は440bitであり、1ページサイズは4536bitとなる。このように、本実施の形態では、第1の実施の形態よりはエラー訂正能力を向上させた分増加してするものの、従来の4616bitよりはデータ量を削減している。図15は、本実施の形態のNANDフラッシュメモリ2への書き込み手順の一例を示すフローチャートである。まず、メモリコントローラ1のプロセッサ12は、同一ワードラインへ書き込むページU、M、Lの3ページのデータに基づいて仮想ページU’、M’のデータ仮想ページU’、M’の一時データを生成し、RAM11へ格納するステップS21。プロセッサ12は、ECC回路14に対してページLに対するパリティの生成を指示するステップS22。この指示により、ECC回路14は、RAM11に格納されているページLのデータに対してパリティを生成する。次に、プロセッサ12は、仮想ページU’の一時データに基づいてパリティを生成するようECC回路14へ指示するステップS23。この指示により、ECC回路14は、RAM11に格納されているU’の一時データに対してパリティを生成する。次に、プロセッサ12は、仮想ページM’の一時データに基づいてパリティを生成するようECC回路14へ指示するステップS24。この指示により、ECC回路14は、RAM11に格納されているM’の一時データに対してパリティを生成する。なお、ステップS23とステップS24の順序は逆でもよい。プロセッサ12は、仮想ページU’、M’およびページLのパリティを3ページのパリティ格納アドレスに振り分け、ページU、M、Lのデータと振り分けたパリティとを結合したデータをRAM11上に生成するステップS25。その後、プロセッサ12は、メモリインターフェイス15に対して、ページU、M、Lの3ページ分のデータパリティを含むの書き込みを指示するステップS26。図16は、本実施の形態のNANDフラッシュメモリ2からの読み出し手順の一例を示すフローチャートである。まず、メモリコントローラ1のプロセッサ12は、メモリインターフェイス15に対して、読み出し対象のページデータのNANDメモリ2からの読み出しを指示するステップS31。この際、読み出し対象データが格納された選択ワードラインに格納されたU、M、Lの3ページ分のデータおよびパリティを全て読み出す。次に、プロセッサ12は、ページLのページデータおよびパリティをECC回路14に送信し、ページLのデータに対するエラー検出を指示するステップS32。ECC回路14は、指示に基づいてページLのデータのエラー検出を行う。プロセッサ12は、ECC回路14からエラー検出結果を取得し、エラーが存在するか否かを判定するステップS33。エラーが存在したらステップS33Yes、ECC回路14に対して、ページLのデータのエラー訂正を指示するステップS34。ECC回路14は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。プロセッサ12は、ページU、M、Lのデータに基づいて、U’、M’の一時データを生成しステップS35、U’の一時データと読み出したU’パリティとをECC回路14に入力してエラー検出の実施を指示するステップS36。ECC回路14は、指示に基づいてU’の一時データのエラー検出を行う。プロセッサ12は、U’の一時データのエラー検出結果をECC回路14から取得し、エラーが存在するか否かを判定するステップS37。エラーが存在したらステップS37Yes、ECC回路14に対して、U’の一時データのエラー訂正を指示するステップS38。ECC回路14は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。次に、M’の一時データと読み出したM’パリティとをECC回路14に入力してエラー検出の実施を指示するステップS39。ECC回路14は、指示に基づいてM’の一時データのエラー検出を行う。プロセッサ12は、M’の一時データのエラー検出結果をECC回路14から取得し、エラーが存在するか否かを判定するステップS40。エラーが存在したらステップS40Yes、ECC回路14に対して、M’の一時データのエラー訂正を指示するステップS41。ECC回路14は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。次に、プロセッサ12は、エラー訂正後エラーのないビットは読み出しデータのままのU’、M’の一時データおよびページLのデータに基づいてページU、M、Lの3ページ分のデータを復元するステップS42。ステップS33で、ページLのデータにエラーが存在しなければステップS33No、ステップS34は実施せずに、ステップS35へ進む。また、ステップS37で、U’の一時データにエラーが存在しなければステップS37No、ステップS38は実施せずに、ステップS39へ進む。また、ステップS40で、M’の一時データにエラーが存在しなければステップS40No、ステップS41は実施せずに、ステップS42へ進む。本実施の形態では、第1の実施の形態と同様にページUおよびMのうちエラー発生確率の多いデータで仮想ページU’を生成してこの仮想ページに対するパリティを生成する。さらに、本実施の形態では、ページUおよびMのうち仮想ページU’を構成しないデータで別の仮想ページM’を構成して、仮想ページM’に対して、仮想ページU’より誤り訂正能力の低いパリティを生成するようにした。このため、第1の実施の形態と同様の効果が得られるとともに、メモリしきい値が2つ隣まで移動してしまったり、オーバープログラムなどによるメモリセルのしきい値が大きく移動してしまったり、するようなメモリセル内の2ビット以上のエラーでも訂正可能になる。第3の実施の形態次に、第3の実施の形態の半導体記憶システムについて説明する。本実施の形態の半導体記憶システムの構成は、第1の実施の形態と同様である。以下、第1の実施の形態と異なる部分を説明する。図17は、本実施の形態に本実施の形態のエラー訂正対象とするデータの選び方の一例を示す図である。図17では、図2に示すデータ割付を前提としている。仮想ページUM’の生成方法と、仮想ページUM’に対するパリティの生成方法は第1の実施の形態と同様である。第1の実施の形態との相違点は、ページU、Mのデータに対しても、ページごとにそれぞれパリティを付加することである。第2の実施の形態で述べたように、隣接しないしきい値分布への移動2レベル以上の移動等大幅な誤りがわずかな確率ながら発生する。本実施の形態では、第1の実施の形態の利点を有しつつ、隣接するしきい値分布への移動以外の誤りでも訂正可能にするために、ページU、Mのデータに対してもパリティを付加する。ただし、隣接するしきい値分布に対応するエラーの訂正は、ページUM’のパリティを用いて実施できるため、ページU、Mに対するパリティは、エラー訂正能力はそれほど高くなくてよくパリティデータ量は少量でよい。NANDフラッシュメモリ2からの読み出し動作時には、まず、第1の実施の形態と同様にページLの誤り訂正を行い、次に仮想ページUM’の生成を行い、その上でページUM’の誤り訂正を行ってページU、Mを復元する。その後、ページU、Mについての誤り訂正を行う。次に、データ量の数値例を挙げる。第1の実施の形態の数値例と同様に、1ページのユーザデータ量を4096bitとし、このうち40bitを訂正可能な能力のBCH方式によるECC回路14を用いるとすると、パリティデータ量は520bitである。本実施の形態では、ページLに対して40bit訂正可能とするためには、第1の実施の形態と同様にページLのパリティデータ量は520bitである。ページU、Mのそれぞれを40bit訂正可能とするためには第1の実施の形態と同様に、ページUM’のパリティデータ量は694bitとなる。さらに、ページU、Mについて2レベル以上誤るセルの数を4セルまで訂正可能であるようにするには、ページU、Mに対するパリティデータ量はそれぞれ52bitである4bit×13;13=121;4096=212。図18は、本実施の形態のNANDフラッシュメモリ2へのデータおよびパリティの格納位置の一例を示す図である。図18では、NANDフラッシュメモリ2の1つのワードラインを共有する3つのページアドレスのメモリセルへのデータ格納位置を示している。前述した誤り訂正符号化の対象とする所定のデータサイズを4096bitとした例を示しているが、誤り訂正符号化の対象とする所定のデータサイズはこれに限定されない。本実施の形態では、パリティデータは4ページ分のサイズのデータ量に対して生成されているが、ページUのデータに対するパリティUパリティ、およびページMのデータに対するパリティMパリティは、データサイズがUM’パリティおよびLパリティと比較すると小さい。ここでは、UM’パリティ、Lパリティ、UパリティおよびMパリティのすべてのパリティをすべて3ページアドレスにまたがるパリティ格納エリアに分散して格納している。各パリティの各ページのパリティ格納エリアへの配分はどのような分散のさせ方でも発明の効果は同じである。前述したパリティデータ量は3で割り切れないため、整数に切り上げている。この例では、1ページのパリティデータ量は442bitであり、1ページサイズは4538bitとなる。この例では、ページサイズは、エラー訂正能力を向上させた分、第1の実施の形態よりは増加しているが、従来の4616bitよりはデータ量を削減している。図19は、本実施の形態のNANDフラッシュメモリ2への書き込み手順の一例を示すフローチャートである。まず、メモリコントローラ1のプロセッサ12は、同一ワードラインへ書き込むページU、M、Lのうち、ページUのデータに対するパリティの生成を指示するステップS51。ECC回路14は、指示に基づいてページUのデータに対してパリティを生成する。次に、プロセッサ12は、ページMのデータに対するパリティの生成を指示するステップS52。ECC回路14は、指示に基づいてページMのデータに対してパリティを生成する。次に、プロセッサ12は、ページU、M、Lの3ページのデータに基づいて仮想ページUM’のデータ仮想ページUM’の一時データを生成し、RAM11へ格納するステップS53。そして、プロセッサ12は、ECC回路14に対してページLに対するパリティの生成を指示するステップS54。この指示により、ECC回路14は、RAM11に格納されているページLのデータに対してパリティを生成する。さらに、プロセッサ12は、ECC回路14に対して仮想ページUM’に対するパリティの生成を指示するステップS55。この指示により、ECC回路14は、RAM11に格納されている仮想ページUM’のデータに対してパリティを生成する。そして、プロセッサ12は、仮想ページUM’、ページU、M、Lのパリティを3ページのパリティ格納アドレスに振り分け、ページU、M、Lのデータと振り分けたパリティとを結合したデータをRAM11上に生成するステップS56。その後、プロセッサ12は、メモリインターフェイス15に対して、ページU、M、Lの3ページ分のデータパリティを含むの書き込みを指示するステップS57。図20は、本実施の形態のNANDフラッシュメモリ2からの読み出し手順の一例を示すフローチャートである。まず、メモリコントローラ1のプロセッサ12は、メモリインターフェイス15に対して、読み出し対象のページデータのNANDメモリ2からの読み出しを指示するステップS61。この際、読み出し対象データが格納された選択ワードラインに格納されたU、M、Lの3ページ分のデータおよびパリティを全て読み出す。次に、プロセッサ12は、ページLのページデータおよびパリティをECC回路14に送信し、ページLのデータに対するエラー検出を指示するステップS62。ECC回路14は、指示に基づいてページLのデータのエラー検出を行う。プロセッサ12は、ECC回路14からエラー検出結果を取得し、エラーが存在するか否かを判定するステップS63。エラーが存在したらステップS63Yes、ECC回路14に対して、ページLのデータのエラー訂正を指示するステップS64。ECC回路14は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。プロセッサ12は、ページU、M、Lのデータに基づいて、UM’の一時データを生成しステップS65、生成したUM’の一時データと読み出したUM’パリティとをECC回路14に入力してエラー検出の実施を指示するステップS66。ECC回路14は、指示に基づいてUM’の一時データのエラー検出を行う。プロセッサ12は、UM’の一時データのエラー検出結果をECC回路14から取得し、エラーが存在するか否かを判定するステップS67。エラーが存在したらステップS67Yes、ECC回路14に対して、UM’の一時データのエラー訂正を指示するステップS68。ECC回路14は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。次に、エラー訂正後のページLのデータ、エラー訂正後のUM’のデータを用いて、ページUのデータおよびページMのデータを復元するステップS69。ここで復元されるページUおよびページMのデータは、UM’パリティによる誤り訂正がなされたデータすなわち隣接するしきい値分布への移動の誤りが訂正されたデータである。プロセッサ12は、復元後のページUのデータと読み出したUパリティとをECC回路14に入力してエラー検出の実施を指示するステップS70。ECC回路14は、復元後のページUのエラー検出を行う。プロセッサ12は、復元後のページUのエラー検出結果をECC回路14から取得し、エラーが存在するか否かを判定するステップS71。エラーが存在したらステップS71Yes、ECC回路14に対して、復元後のページUのエラー訂正の実施を指示するステップS72。ECC回路14は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。次に、プロセッサ12は、復元後のページMのデータと読み出したUパリティとをECC回路14に入力してエラー検出の実施を指示するステップS73。プロセッサ12は、復元後のページMのエラー検出結果をECC回路14から取得し、エラーが存在するか否かを判定するステップS73。エラーが存在したらステップS74Yes、ECC回路14に対して、復元後のページMのエラー訂正の実施を指示するステップS75。ECC回路14は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。ステップS63で、ページLのデータにエラーが存在しなければステップS63No、ステップS64は実施せずに、ステップS65へ進む。また、ステップS67で、UM’の一時データにエラーが存在しなければステップS67No、ステップS68は実施せずに、ステップS69へ進む。また、ステップS71で、復元後のページUにエラーが存在しなければステップS71No、ステップS72は実施せずに、ステップS73へ進む。また、ステップS74で、復元後のページMにエラーが存在しなければステップS74No、ステップS75は実施しない。本実施の形態では、第1の実施の形態と同様に第1の実施の形態と同様にページUおよびMのうちエラー発生確率の多いデータで仮想ページUM’を生成してこの仮想ページに対するパリティを生成する。さらに、本実施の形態では、ページU、Mについても仮想ページUM’より誤り訂正能力の低いパリティを生成するようにした。このため、第1の実施の形態と同様の効果が得られるとともに、メモリしきい値が2つ隣まで移動してしまったり、オーバープログラムなどによるメモリセルのしきい値が大きく移動してしまったり、するようなメモリセル内の2ビット以上のエラーでも訂正可能になる。また、本実施の形態では、第2の実施の形態よりパリティデータ量は増える。しかしながら、第2の実施の形態では一時データを2ページ分生成する必要があったところが本実施例では1ページ分でよいので、一時データを保持するためのワーキングメモリを小さくすることが可能である。第4の実施の形態図21は、第4の実施の形態におけるNANDフラッシュメモリ2のメモリセルにデータを格納する際のメモリセルのしきい値とデータの割付の一例を示す図である。本実施の形態の半導体記憶システムの構成は、第1の実施の形態と同様である。以下、第1の実施の形態と異なる部分を説明する。本実施の形態では、1つのメモリセルに4bitを格納する例について説明する。4bitを格納するために、16種類のしきい値分布を定義し、図21に示すように各々のしきい値分布にデータを割り当てている。本実施の形態でも、隣接するしきい値分布に割り当てるデータは1bitの差となるグレイコードとしている。1つのメモリセルに格納される4bitにそれぞれ対応するページアドレスを、それぞれTTop、HHigher、UUpper、LLowerとする。図21では、両側の隣接するしきい値分布への移動でデータが変化しない位置を破線で囲っている。図22は、本実施の形態に本実施の形態のエラー訂正対象とするデータの選び方の一例を示す図である。前述したように、エラー要因が隣へのしきい値分布移動であるとすると、両隣の隣接しきい値分布でデータが変化しないデータはエラーが発生しない。1つのメモリセルに3bitのデータを格納する場合3bit/セルの場合は、第1の実施の形態の図7で示したように、エラーが発生しない分布位置図7の例では、ページU、Mの破線以外の位置がページ間での分布位置重なりを持たない。さらに、3bit/セルの場合は、第1の実施の形態で説明したように、残りの1つのページ図7の例では、ページLのデータ値によって、対応するしきい値分布において、どちらのページが、エラーが発生しやすいかを判別することが可能であった。しかし、図21に示すように、1つのメモリセルに4bitのデータを格納する場合には、エラーが発生しない分布位置を2つのページ間で重なりなく、またぬけなく抽出することはできない場合がある。4ページのうちの2つのページページA、Bとするに着目した場合に、ページAにおいてエラーが発生しない位置であるしきい値分布がページBにおいてはエラーが発生する位置であり、かつページBにおいてエラーが発生しない位置であるしきい値分布がページAにおいてはエラーが発生する位置である場合には、第1の実施の形態と同様にページA、Bからエラーが発生する位置のデータを抽出することができる。しかし、図21のように、エラーが発生しない分布位置を2つのページ間で重なる場合は、2ページのデータからエラーが発生するデータだけを抽出した仮想ページを生成することができない。したがって、本実施の形態では、隣へのしきい値分布移動によりエラーが生じるデータだけを含む仮想ページを生成できないため、2つ以上の境界を超えてしきい値分布が移動するエラーが生じるデータも含んだ仮想ページを生成する。ただし、後者のデータ2つ以上の境界を超えてしきい値分布が移動するエラーが生じるデータは、少なくなるよう仮想ページを生成する。図22の例では、ページH、Uのデータによりこの仮想ページを構成し、この仮想ページをページU’としている。また、ページH、UのうちページU’を構成しないデータにより別の仮想ページを構成し、この別の仮想ページを仮想ページH’としている。仮想ページH’は、2つ以上の境界を超えてしきい値分布が移動するエラーが生じるデータが大多数だが、隣へのしきい値分布移動によるエラーが生じるデータを少量含む。そして仮想ページH’、U’の両方についてパリティを付加する。エラー訂正能力は、仮想ページU’を高く、仮想ページH’は低くてよい。ページT、Lについては、それぞれページごとにパリティを付加する。仮想ページH’、U’を構成する一時データを、それぞれH’[i],U’[i]とすると、H’[i],U’[i]を生成する規則は以下の式5で表すことができる。H’[i]=H[i]ifL[i]=1U[i]otherwiseU’[i]=H[i]ifL[i]=0U[i]otherwise...5図22の例では、仮想ページH’を構成する位置を破線で囲み、仮想ページU’を構成する位置を一点鎖線で囲んでいる。図21からわかるように、一番左のしきい値分布Erは、ページU、Hもいずれも隣へのしきい値分布移動によりエラーが生じるデータでない。しかし、図22の上側の図をみるとわかるように、ページUのしきい値分布Erに対応するデータは仮想ページU’に割当られる。このように、仮想ページU’は、隣へのしきい値分布移動によりエラーが生じるデータを多く含むものの、しきい値分布移動によりエラーが生じるデータでないものも含んでいる。なお、ここでは、L[i]の値に基づいて仮想ページH’、U’を生成するようにしたが、仮想ページH’と仮想ページU’のうち、仮想ページU’が仮想ページH’より、隣へのしきい値分布移動によりエラーが生じるデータを多く含むような仮想ページの生成方法であれば、上記の式5で示した生成方法に限定されない。例えば、上記のしきい値分布Erに対応するデータは、図22の例と逆に、仮想ページU’にページHのデータを割り当て、仮想ページH’にページUのデータを割り当ててもよい。この場合には、ページLの値に基づいて仮想ページU’、H’を生成することができないため、ページT、H、U、Lの各データの値との仮想ページU’、H’との対応表等を用いて仮想ページU’、H’を生成する。NANDフラッシュメモリ2への書き込み動作時には、式5の規則に従って2ページ分の一時データを生成する。そして、それ以外の2ページと合わせた4ページ分のデータに対してパリティを付与する。なお、式5では、ページH、Uのデータを用いて仮想ページH’、U’を生成する例を示したが、他の2ページを用いて、同様に仮想ページを生成してもよい。図23は、本実施の形態の仮想ページH’、U’の生成手順の一例を示す図である。図23の左側の図は、元になるページT、H、U、Lのデータ例を示し、右側の図は、生成された仮想ページH’、U’のデータ例を示している。データ61、62、63、64は、各々1つのメモリセルに格納される4ビットのデータである。データ71、72、73、74は、それぞれデータ61、62、63、64に基づいて生成された仮想ページH’、U’のデータである。NANDフラッシュメモリ2からの読み出し動作時には、ページT、Lはそのまま誤り訂正すればよい。ページH、Uについては、H’[i],U’[i]という一時データを作成し、作成した一時データ仮想ページに対して誤り訂正を行った後に、ページH、Uに復元する。またH’[i],U’[i]という一時データを作成するためには、ページLのデータが正しいことが前提となっているため、手順としては、まずページLの訂正を行い、次にH’[i],U’[i]の生成を行い、その上でH’[i],U’[i]の訂正を行い、ページH、Uの復元となる。一時データH’[i],U’[i]から、ページH、LのデータH[i],U[i]を復元する規則は書き込み時の逆方向となり以下の式6に示す通りである。H[i]=H’[i]ifL[i]=1U[i]otherwiseU[i]=H’[i]ifL[i]=0U[i]otherwise...6以上のようなパリティの付加の方法をとることにより、4bit/セルの場合でも他のパリティデータ量を減らすことが可能になる。図24は、本実施の形態のNANDフラッシュメモリ2へのデータおよびパリティの格納位置の一例を示す図である。この例では、Tパリティ、H’パリティ、U’パリティ、Lパリティを、それぞれ4ページアドレスにまたがるパリティ格納エリアに分散して格納する。ここでは、Tパリティ、H’パリティ、U’パリティ、Lパリティをそれぞれ4等分して分散させているが、Tパリティ、H’パリティ、U’パリティ、Lパリティの各パリティ格納エリアへの分散させ方はこれに限らず、どのような分散のさせ方でも発明の効果は同じである。H’パリティは、他のパリティに比べパリティデータ量を減らすことができる。図25は、本実施の形態のNANDフラッシュメモリ2への書き込み手順の一例を示すフローチャートである。まず、メモリコントローラ1のプロセッサ12は、同一ワードラインへ書き込むページH、U、Lの3ページのデータに基づいて仮想ページH’、U’の一時データを生成し、RAM11へ格納するステップS81。なお、NANDフラッシュメモリ2へ書き込むのはページT、H、U、Lの4ページであるが、式5に示すように、仮想ページH’、U’の生成にページTは用いない。プロセッサ12は、ECC回路14に対してページTに対するパリティの生成を指示するステップS82。この指示により、ECC回路14は、RAM11に格納されているページTのデータに対してパリティを生成する。プロセッサ12は、ECC回路14に対してページLに対するパリティの生成を指示するステップS83。この指示により、ECC回路14は、RAM11に格納されているページLのデータに対してパリティを生成する。次に、プロセッサ12は、仮想ページH’の一時データに基づいてパリティを生成するようECC回路14へ指示するステップS84。この指示により、ECC回路14は、RAM11に格納されているH’の一時データに対してパリティを生成する。次に、プロセッサ12は、仮想ページU’の一時データに基づいてパリティを生成するようECC回路14へ指示するステップS85。この指示により、ECC回路14は、RAM11に格納されているU’の一時データに対してパリティを生成する。プロセッサ12は、仮想ページH’、U’およびページT、Lのパリティを4ページのパリティ格納アドレスに振り分け、ページT、H、U、Lのデータと振り分けたパリティとを結合したデータをRAM11上に生成するステップS86。その後、プロセッサ12は、メモリインターフェイス15に対して、ページT、H、U、Lの4ページ分のデータパリティを含むの書き込みを指示するステップS87。図26は、本実施の形態のNANDフラッシュメモリ2からの読み出し手順の一例を示すフローチャートである。まず、メモリコントローラ1のプロセッサ12は、メモリインターフェイス15に対して、読み出し対象のページデータのNANDメモリ2からの読み出しを指示するステップS91。なお、読み出し対象データが格納された選択ワードラインに格納されたT、H、U、Lの4ページ分のデータおよびパリティを全て読み出すとする。ただし、ページT、Lのみを読み出す場合は、従来と同様にページT、LのページデータLパリティ、Tパリティを含むをそれぞれ読み出して従来と同様にそれぞれ誤り訂正を行えばよい。また、ページHのみ、またはページUのみ、またはページHおよびUを読み出す場合には、ページH、U、Lの3ページを読み出す。次に、プロセッサ12は、ページTのページデータおよびパリティをECC回路14に送信し、ページTのデータに対するエラー検出を指示するステップS92。ECC回路14は、指示に基づいてページTのデータのエラー検出を行う。プロセッサ12は、ECC回路14からエラー検出結果を取得し、エラーが存在するか否かを判定するステップS93。エラーが存在したらステップS93Yes、ECC回路14に対して、ページTのデータのエラー訂正を指示するステップS94。ECC回路14は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。次に、プロセッサ12は、ページLのページデータおよびパリティをECC回路14に送信し、ページLのデータに対するエラー検出を指示するステップS95。ECC回路14は、指示に基づいてページLのデータのエラー検出を行う。プロセッサ12は、ECC回路14からエラー検出結果を取得し、エラーが存在するか否かを判定するステップS96。エラーが存在したらステップS96Yes、ECC回路14に対して、ページLのデータのエラー訂正を指示するステップS97。ECC回路14は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。プロセッサ12は、ページH、U、Lのデータに基づいて、H’、U’の一時データを生成しステップS98、H’の一時データと読み出したH’パリティとをECC回路14に入力してエラー検出の実施を指示するステップS99。ECC回路14は、指示に基づいてH’の一時データのエラー検出を行う。プロセッサ12は、H’の一時データのエラー検出結果をECC回路14から取得し、エラーが存在するか否かを判定するステップS100。エラーが存在したらステップS100Yes、ECC回路14に対して、H’の一時データのエラー訂正を指示するステップS101。ECC回路14は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。次に、U’の一時データと読み出したU’パリティとをECC回路14に入力してエラー検出の実施を指示するステップS102。ECC回路14は、指示に基づいてU’の一時データのエラー検出を行う。プロセッサ12は、U’の一時データのエラー検出結果をECC回路14から取得し、エラーが存在するか否かを判定するステップS103。エラーが存在したらステップS103Yes、ECC回路14に対して、U’の一時データのエラー訂正を指示するステップS104。ECC回路14は、指示に基づいてエラービットのすべてについてデータ反転してエラー訂正を行う。次に、プロセッサ12は、エラー訂正後エラーのないビットは読み出しデータのままのH’、U’の一時データおよびページL、Tのデータに基づいて、ページT、H、U、Lの4ページ分のデータを復元するステップS105。ただし、ページT、Lは、復元処理は必要ないため、エラー訂正後のデータそのままが復元データとなる。ステップS93で、ページTのデータにエラーが存在しなければステップS93No、ステップS94は実施せずに、ステップS95へ進む。また、ステップS96で、Lの一時データにエラーが存在しなければステップS96No、ステップS97は実施せずに、ステップS98へ進む。また、ステップS100で、H’の一時データにエラーが存在しなければステップS100No、ステップS101は実施せずに、ステップS102へ進む。また、ステップS103で、U’の一時データにエラーが存在しなければステップS103No、ステップS104は実施せずに、ステップS105へ進む。このように、本実施の形態では、1つのメモリセルに4bitのデータを格納する場合に、2ページ分のデータから、エラー発生確率の高い仮想ページとエラー発生確率の低い仮想ページとを生成し、それぞれの仮想ページにパリティを付加するようにした。このため、エラー発生確率の低い仮想ページのパリティデータ量を少なくすることができ、パリティ格納領域を効率的に使用することができる。このため、パリティデータ量を増やさずエラー訂正能力を向上させることができる。なお、第1の実施の形態~第4の実施の形態では、2ページ分のデータからエラー発生確率の多い仮想ページを生成するようにしたが、3ページ以上のデータから、エラー発生確率の多い仮想ページを生成するようにしてもよい。この場合、第1の実施の形態のようにエラー発生確率の多い仮想ページだけにパリティを付加してもよいし、第2の実施の形態のようにさらに元のページに低い訂正能力のパリティを付加してもよい。また、エラー発生確率の低い1以上の仮想ページも生成して、エラー発生確率の低い仮想ページに低い訂正能力のパリティを付加してもよい。第5の実施の形態以上の実施の形態では、メモリコントローラ1がECC回路14を備える半導体記憶システムの例を示したが、ECC回路を内蔵するNANDフラッシュメモリも存在する。図27は、ECC回路を内蔵しないNANDフラッシュメモリの一例を示す図である。図27に示すように、このNANDフラッシュメモリは、NANDMemoryCellArray21と、SenseAmpAmplifier22と、PageBuffer23と、RowDecoder24と、VoltageSupply25と、Controller26と、NANDIOInputOutputInterface27と、を備える。上述の第1の実施の形態~第4の実施の形態では、このようにECC回路を備えないNANDフラッシュメモリを用いることを前提としている。なお、図27は、一般的な構成の一例を示すものであり、図27の構成に限定されない。各部の動作は、従来と同様であり、詳細な説明は省略する。図28は、ECC回路を内蔵するNANDフラッシュメモリの一例を示す図である。図28の例では、図25の構成例にECC回路28およびRAM29を追加している。なお、図28は、一般的な構成の一例を示すものであり、ECC回路28を備えていれば図28の構成に限定されない。図28に例示したNANDフラッシュメモリを用いる場合は、上述のNANDコントローラのECC回路14の動作をNANDフラッシュメモリ内のECC回路28が実施する。第1の実施の形態~第4の実施の形態で述べた仮想ページの生成等に関するプロセッサ12の動作は、このNANDフラッシュメモリに接続するメモリコントローラが内蔵するプロセッサが行うようにしてもよいし、NANDフラッシュメモリ内のController26が行うようにしてもよい。このように、第1の実施の形態~第4の実施の形態は、様々な構成の半導体記憶システムに適用可能であり、半導体記憶システムに制約はない。本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。"