(57)【要約】【課題】符号化のための付帯情報を低減することができるメモリシステムを実現する。【解決手段】実施形態によれば、メモリシステムは、第１ライトデータのための第１誤り訂正符号を生成し、前記第１ライトデータと前記第１誤り訂正符号との組、または前記第１ライトデータの各ビットが反転された第２ライトデータと前記第１誤り訂正符号の各ビットが反転された第２誤り訂正符号との組のいずれかを、対象のページ場所に書き込む。前記メモリシステムは、読み出し対象のページ場所から読み出されたデータおよび誤り訂正符号を使用して、誤り訂正復号処理を実行する。誤り訂正復号処理で復号失敗が起きた場合、前記メモリシステムは、前記読み出されたデータの各ビットが反転された反転データと前記読み出された誤り訂正符号の各ビットが反転された反転誤り訂正符号とを使用して前記誤り訂正復号処理を再実行する。【選択図】図６
2018041403.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、少なくとも下位ページデータと上位ページデータとを含むデータの複数のページを、前記不揮発性メモリの同一物理ページに割り当てられる少なくとも下位ページと上位ページとを含む複数のページ場所に書き込むコントローラとを具備し、前記コントローラは、
１ページ分のサイズを有する第１ライトデータのための第１誤り訂正符号を生成し、
前記第１ライトデータと前記第１誤り訂正符号とを含むデータ系列に“０”のビットまたは“１”のビットのどちらが多く含まれるかを判定し、
前記判定の結果と、前記第１ライトデータが書き込まれるべき対象のページ場所とに基づいて、前記第１ライトデータと前記第１誤り訂正符号との組、または前記第１ライトデータの各ビットが反転された第２ライトデータと前記第１誤り訂正符号の各ビットが反転された第２誤り訂正符号との組のいずれかを前記対象のページ場所に書き込み、
前記不揮発性メモリ内の読み出し対象のページ場所からデータおよび誤り訂正符号を読み出し、前記読み出されたデータと前記読み出された誤り訂正符号とを使用して、前記読み出されたデータの誤り訂正のための誤り訂正復号処理を実行し、
前記誤り訂正復号処理で復号失敗が起きた場合、前記読み出されたデータの各ビットが反転された反転データと前記読み出された誤り訂正符号の各ビットが反転された反転誤り訂正符号とを使用して前記誤り訂正復号処理を再実行するように構成されている、
メモリシステム。
【請求項２】
前記コントローラは、
前記第１ライトデータを圧縮し、
前記第１ライトデータを圧縮することによって得られる、前記第１ライトデータ内の空き領域を、全て“１”のビット列または全て“０”のビット列を含むパディングデータでパディングする処理を実行し、
予め決められた複数のパディング用の位置の間で、パディングデータの位置をローテーションさせ、
前記圧縮された第１ライトデータと前記パディングデータとを含むデータ系列を、前記第１ライトデータとして扱うように構成されている請求項１記載のメモリシステム。
【請求項３】
前記コントローラは、
前記圧縮された第１ライトデータに含まれる“１”のビットの数が、前記圧縮された第１ライトデータに含まれる“０”のビットの数よりも多い場合、前記全て“１”のビット列でパディングする処理を実行し、
前記圧縮された第１ライトデータに含まれる“０”のビットの数が、前記圧縮された第１ライトデータに含まれる“１”のビットの数よりも多い場合、前記全て“０”のビット列でパディングする処理を実行する請求項２記載のメモリシステム。
【請求項４】
前記不揮発性メモリは、メモリセル当たりに２ビットのデータを格納可能に構成され、
前記下位ページデータおよび前記上位ページデータを含む、データの２つのページが、前記同一物理ページに割り当てられた、前記下位ページおよび前記上位ページを含む２つのページ場所に書き込まれる請求項１記載のメモリシステム。
【請求項５】
前記不揮発性メモリは、メモリセル当たりに３ビットのデータを格納可能に構成され、
前記下位ページデータ、中位ページデータ、および前記上位ページデータを含む、データの３つのページが、前記同一物理ページに割り当てられた、前記下位ページ、中位ページおよび前記上位ページを含む３つのページ場所に書き込まれる請求項１記載のメモリシステム。
【請求項６】
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、少なくとも下位ページデータと上位ページデータとを含むデータの複数のページを、前記不揮発性メモリの同一物理ページに割り当てられる少なくとも下位ページと上位ページとを含む複数のページ場所に書き込むコントローラとを具備し、前記コントローラは、
１ページ分のサイズを有する第１ライトデータのための第１誤り訂正符号を生成し、
前記第１ライトデータに“０”のビットまたは“１”のビットのどちらが多く含まれるかを判定し、
前記判定の結果と、前記第１ライトデータが書き込まれるべき対象のページ場所とに基づいて、前記第１ライトデータと前記第１誤り訂正符号との組、または前記第１ライトデータの各ビットが反転された第２ライトデータと前記第１誤り訂正符号との組のいずれかを前記対象のページ場所に書き込み、
前記不揮発性メモリ内の読み出し対象のページ場所からデータおよび誤り訂正符号を読み出し、前記読み出されたデータと前記読み出された誤り訂正符号とを使用して、前記読み出されたデータの誤り訂正のための誤り訂正復号処理を実行し、
前記誤り訂正復号処理で復号失敗が起きた場合、前記読み出されたデータの各ビットが反転された反転データと前記読み出された誤り訂正符号とを使用して前記誤り訂正復号処理を再実行するように構成されている、
メモリシステム。
【請求項７】
前記コントローラは、
前記第１ライトデータを圧縮し、
前記第１ライトデータを圧縮することによって得られる、前記第１ライトデータ内の空き領域を、全て“１”のビット列または全て“０”のビット列を含むパディングデータでパディングする処理を実行し、
予め決められた複数のパディング用の位置の間で、パディングデータの位置をローテーションさせ、
前記圧縮された第１ライトデータと前記パディングデータとを含むデータ系列を、前記第１ライトデータとして扱うように構成されている請求項６記載のメモリシステム。
【請求項８】
前記コントローラは、
前記圧縮された第１ライトデータに含まれる“１”のビットの数が、前記圧縮された第１ライトデータに含まれる“０”のビットの数よりも多い場合、前記全て“１”のビット列でパディングする処理を実行し、
前記圧縮された第１ライトデータに含まれる“０”のビットの数が、前記圧縮された第１ライトデータに含まれる“１”のビットの数よりも多い場合、前記全て“０”のビット列でパディングする処理を実行する請求項７記載のメモリシステム。
【請求項９】
前記不揮発性メモリは、メモリセル当たりに２ビットのデータを格納可能に構成され、
前記下位ページデータおよび前記上位ページデータを含む、データの２つのページが、前記同一物理ページに割り当てられた、前記下位ページおよび前記上位ページを含む２つのページ場所に書き込まれる請求項６記載のメモリシステム。
【請求項１０】
前記不揮発性メモリは、メモリセル当たりに３ビットのデータを格納可能に構成され、
前記下位ページデータ、中位ページデータ、および前記上位ページデータを含む、データの３つのページが、前記同一物理ページに割り当てられた、前記下位ページ、中位ページおよび前記上位ページを含む３つのページ場所に書き込まれる請求項６記載のメモリシステム。
【請求項１１】
少なくとも下位ページデータと上位ページデータとを含むデータの複数のページを、不揮発性メモリの同一物理ページに割り当てられる少なくとも下位ページと上位ページとを含む複数のページ場所に書き込む制御方法であって、
１ページ分のサイズを有する第１ライトデータのための第１誤り訂正符号を生成することと、
前記第１ライトデータと前記第１誤り訂正符号とを含むデータ系列に“０”のビットまたは“１”のビットのどちらが多く含まれるかを判定することと、
前記判定の結果と、前記第１ライトデータが書き込まれるべき対象のページ場所とに基づいて、前記第１ライトデータと前記第１誤り訂正符号との組、または前記第１ライトデータの各ビットが反転された第２ライトデータと前記第１誤り訂正符号の各ビットが反転された第２誤り訂正符号との組のいずれかを前記対象のページ場所に書き込むことと、
前記不揮発性メモリ内の読み出し対象のページ場所からデータおよび誤り訂正符号を読み出し、前記読み出されたデータと前記読み出された誤り訂正符号とを使用して、前記読み出されたデータの誤り訂正のための誤り訂正復号処理を実行することと、
前記誤り訂正復号処理で復号失敗が起きた場合、前記読み出されたデータの各ビットが反転された反転データと前記読み出された誤り訂正符号の各ビットが反転された反転誤り訂正符号とを使用して前記誤り訂正復号処理を再実行することとを具備する制御方法。
【請求項１２】
前記第１ライトデータを圧縮することと、
前記第１ライトデータを圧縮することによって得られる、前記第１ライトデータ内の空き領域を、全て“１”のビット列または全て“０”のビット列を含むパディングデータでパディングする処理を実行することと、
前記パディングデータの位置が複数の異なるパディング用の位置の間でローテーションされるように前記パディングデータの位置を調整することと、
前記圧縮された第１ライトデータと前記パディングデータとを含むデータ系列を、前記第１ライトデータとして扱うこととをさらに具備する請求項１１記載の制御方法。
【請求項１３】
少なくとも下位ページデータと上位ページデータとを含むデータの複数のページを、不揮発性メモリの同一物理ページに割り当てられる少なくとも下位ページと上位ページとを含む複数のページ場所に書き込む制御方法であって、
１ページ分のサイズを有する第１ライトデータのための第１誤り訂正符号を生成することと、
前記第１ライトデータに“０”のビットまたは“１”のビットのどちらが多く含まれるかを判定することと、
前記判定の結果と、前記第１ライトデータが書き込まれるべき対象のページ場所とに基づいて、前記第１ライトデータと前記第１誤り訂正符号との組、または前記第１ライトデータの各ビットが反転された第２ライトデータと前記第１誤り訂正符号との組のいずれかを前記対象のページ場所に書き込むことと、
前記不揮発性メモリ内の読み出し対象のページ場所からデータおよび誤り訂正符号を読み出し、前記読み出されたデータと前記読み出された誤り訂正符号とを使用して、前記読み出されたデータの誤り訂正のための誤り訂正復号処理を実行することと、
前記誤り訂正復号処理で復号失敗が起きた場合、前記読み出されたデータの各ビットが反転された反転データと前記読み出された誤り訂正符号とを使用して前記誤り訂正復号処理を再実行することとを具備する制御方法。
【請求項１４】
前記第１ライトデータを圧縮することと、
前記第１ライトデータを圧縮することによって得られる、前記第１ライトデータ内の空き領域を、全て“１”のビット列または全て“０”のビット列を含むパディングデータでパディングする処理を実行することと、
前記パディングデータの位置が複数の異なるパディング用の位置の間でローテーションされるように前記パディングデータの位置を調整することと、
前記圧縮された第１ライトデータと前記パディングデータとを含むデータ系列を、前記第１ライトデータとして扱うこととをさらに具備する請求項１３記載の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
【０００３】
このようなメモリシステムの一つとして、ＮＡＮＤフラッシュ技術ベースのソリッドステートドライブ（ＳＳＤ）が知られている。ＳＳＤは、その低電力消費、高性能という特徴により、様々なコンピューティングデバイスのメインストレージとして使用されている。最近では、メモリセルの摩耗を少なくするためのデータパターンを使用して、書き込むべきデータを符号化する符号化技術も開発されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第４３５８２９９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、一般に、このような符号化技術を適用したケースにおいては、符号化されたデータを構成する複数のデータ部それぞれに対してその符号化の内容を示す情報を付帯情報として付加することが必要とされる。この付帯情報の量が増加されるほど、不揮発性メモリの各ページに書き込むことが可能なユーザデータの量が減少される。
【０００６】
本発明が解決しようとする課題は、符号化のための付帯情報を低減することができるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【０００７】
実施形態によれば、メモリシステムは、不揮発性メモリと、前記不揮発性メモリに電気的に接続され、少なくとも下位ページデータと上位ページデータとを含むデータの複数のページを、前記不揮発性メモリの同一物理ページに割り当てられる少なくとも下位ページと上位ページとを含む複数のページ場所に書き込むコントローラとを具備する。前記コントローラは、１ページ分のサイズを有する第１ライトデータのための第１誤り訂正符号を生成する。前記コントローラは、前記第１ライトデータと前記第１誤り訂正符号とを含むデータ系列に“０”のビットまたは“１”のビットのどちらが多く含まれるかを判定する。前記コントローラは、前記判定の結果と、前記第１ライトデータが書き込まれるべき対象のページ場所とに基づいて、前記第１ライトデータと前記第１誤り訂正符号との組、または前記第１ライトデータの各ビットが反転された第２ライトデータと前記第１誤り訂正符号の各ビットが反転された第２誤り訂正符号との組のいずれかを前記対象のページ場所に書き込む。前記コントローラは、前記不揮発性メモリ内の読み出し対象のページ場所からデータおよび誤り訂正符号を読み出し、前記読み出されたデータと前記読み出された誤り訂正符号とを使用して、前記読み出されたデータの誤り訂正のための誤り訂正復号処理を実行する。前記コントローラは、前記誤り訂正復号処理で復号失敗が起きた場合、前記読み出されたデータの各ビットが反転された反転データと前記読み出された誤り訂正符号の各ビットが反転された反転誤り訂正符号とを使用して前記誤り訂正復号処理を再実行する。
【図面の簡単な説明】
【０００８】
【図１】実施形態に係るメモリシステムの構成例を示すブロック図。
【図２】同実施形態のメモリシステムに設けられる不揮発性メモリ内のメモリセルアレイの構成例を示す図。
【図３】各メモリセルが２ビットデータを格納する、マルチレベルセル（ＭＬＣ）フラッシュメモリ内のメモリセルアレイの閾値電圧分布を示す図。
【図４】各メモリセルが３ビットデータを格納する、トリプルレベルセル（ＴＬＣ）フラッシュメモリ内のメモリセルアレイの閾値電圧分布を示す図。
【図５】ＭＬＣフラッシュメモリの４つの閾値電圧分布に対する下位ページビットの“１”／“０”の割り当てと、この４つの閾値電圧分布に対する上位ページビットの“１”／“０”の割り当てと、ＴＬＣ−フラッシュメモリの８つの閾値電圧分布に対する下位ページビットの“１”／“０”の割り当てと、この８つの閾値電圧分布に対する中位ページビットの“１”／“０”の割り当てと、この８つの閾値電圧分布に対する上位ページビットの“１”／“０”の割り当てとを示す図。
【図６】同実施形態のメモリシステムに設けられるエンコーダの構成例を示すブロック図。
【図７】ＭＬＣフラッシュメモリの下位ページに書き込まれるべきライトデータとこのライトデータのためのＥＣＣとを符号化する動作を示す図。
【図８】ＭＬＣフラッシュメモリの上位ページに書き込まれるべきライトデータとこのライトデータのためのＥＣＣとを符号化する動作を示す図。
【図９】ＭＬＣフラッシュメモリの下位ページに書き込まれるべきライトデータを符号化し、符号化されたライトデータをオリジナルのライトデータのためのＥＣＣと一緒に書き込む動作を示す図。
【図１０】ＭＬＣフラッシュメモリの上位ページに書き込まれるべきライトデータを符号化し、符号化されたライトデータをオリジナルのライトデータのためのＥＣＣと一緒に書き込む動作を示す図。
【図１１】同実施形態のメモリシステムに設けられるデコーダの構成例を示すブロック図。
【図１２】ＭＬＣフラッシュメモリにおいて、エンデュランスコードエンコーディングの適用前における閾値電圧分布“Ｅｒ”および閾値電圧分布“Ｃ”それぞれの出現確率と、エンデュランスコード今コーディングの適用後における閾値電圧分布“Ｅｒ”および閾値電圧分布“Ｃ”それぞれの出現確率とを示す図。
【図１３】ＴＬＣフラッシュメモリにおいて、エンデュランスコードエンコーディングの適用前における閾値電圧分布“Ｅｒ”および閾値電圧分布“Ｇ”それぞれの出現確率と、エンデュランスコードエンコーディングの適用後における閾値電圧分布“Ｅｒ”および閾値電圧分布“Ｇ”それぞれの出現確率とを示す図。
【図１４】同実施形態のメモリシステムに設けられるエンコーダの別の構成例を示すブロック図。
【図１５】同実施形態のメモリシステムによって実行されるパディングおよび回転の動作を示す図。
【図１６】同実施形態のメモリシステムによって実行される別のパディングおよび回転の動作を示す図。
【図１７】図１４のエンコーダに適用される符号化動作を示す図。
【図１８】図１４のエンコーダに適用される別の符号化動作を示す図。
【図１９】図１４のエンコーダによって生成される符号化データのフォーマットの例を示す図。
【図２０】図１４のエンコーダによって生成される符号化データのフォーマットの別の例を示す図。
【図２１】図１４のエンコーダに適用されるさらに別の符号化動作を示す図。
【図２２】同実施形態のメモリシステムによって実行されるライト動作の手順を示すフローチャート。
【図２３】同実施形態のメモリシステムによって実行されるリード動作の手順を示すフローチャート。
【図２４】同実施形態のメモリシステムによって実行されるライト動作の別の手順を示すフローチャート。
【図２５】同実施形態のメモリシステムによって実行されるリード動作の別の手順を示すフローチャート。
【図２６】同実施形態のメモリシステムによって実行されるライト動作のさらに別の手順を示すフローチャート。
【図２７】同実施形態のメモリシステムによって実行されるライト動作のさらに別の手順を示すフローチャート。
【図２８】同実施形態のメモリシステムによって実行されるリード動作のさらに別の手順を示すフローチャート。
【図２９】同実施形態のメモリシステムによって実行されるライト動作のさらに別の手順を示すフローチャート。
【図３０】ホストの構成例を示すブロック図。
【図３１】同実施形態のメモリシステムとホストとを含むコンピュータの構成例を示す図。
【発明を実施するための形態】
【０００９】
以下、図面を参照して、実施形態を説明する。  
まず、図１を参照して、一実施形態に係るメモリシステムを含む情報処理システム１の構成を説明する。
【００１０】
このメモリシステムは、不揮発性メモリにデータをライトし、不揮発性メモリからデータをリードするように構成された半導体ストレージデバイスである。このメモリシステムは、例えば、ＮＡＮＤフラッシュ技術ベースのソリッドステートドライブ（ＳＳＤ）３として実現されている。
【００１１】
情報処理システム１は、ホスト（ホストデバイス）２と、ＳＳＤ３とを含む。ホスト２は、サーバ、パーソナルコンピュータのような情報処理装置である。
【００１２】
ＳＳＤ３は、ホスト２として機能する情報処理装置のメインストレージとして使用され得る。ＳＳＤ３は、この情報処理装置に内蔵されてもよいし、この情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
【００１３】
ホスト２とＳＳＤ３とを相互接続するためのインタフェースとしては、ＳＣＳＩ、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）、ＡＴＡ、Ｓｅｒｉａｌ  ＡＴＡ（ＳＡＴＡ）、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）、Ｅｔｈｅｒｎｅｔ（登録商標），Ｆｉｂｒｅ  ｃｈａｎｎｅｌ等を使用し得る。
【００１４】
ＳＳＤ３は、コントローラ４および不揮発性メモリ（ＮＡＮＤフラッシュメモリ）５を備える。ＳＳＤ３は、ＤＲＡＭ６も備えていてもよい。ＮＡＮＤフラッシュメモリ５は、限定されないが、複数のＮＡＮＤフラッシュメモリチップを含んでいてもよい。ＮＡＮＤフラッシュメモリ５は、メモリセル当たりに２ビット以上のデータを格納可能に構成されている。例えば、ＮＡＮＤフラッシュメモリ５は、マルチレベルセル（ＭＬＣ）フラッシュメモリであってもよいし、トリプルレベルセル（ＴＬＣ）フラッシュメモリであってもよい。
【００１５】
ＮＡＮＤフラッシュメモリ５は、メモリセルアレイを含む。このメモリセルアレイは、多数のＮＡＮＤブロック（ブロック）Ｂ０〜Ｂｍ−１を含む。ブロックＢ０〜Ｂｍ−１は、消去単位として機能する。ブロックは「物理ブロック」または「消去ブロック」と称されることもある。
【００１６】
ブロックＢ０〜Ｂｍ−１は多数のページ（物理ページ）を含む。つまり、ブロックＢ０〜Ｂｍ−１の各々は、ページＰ０〜Ｐｎ−１を含む。ＮＡＮＤフラッシュメモリ５においては、データのリードおよびデータのライトはページ単位で実行される。データの消去はブロック単位で実行される。
【００１７】
コントローラ４は、Ｔｏｇｇｌｅ、ＯＮＦＩのようなＮＡＮＤインタフェース１３を介して、不揮発性メモリであるＮＡＮＤフラッシュメモリ５に電気的に接続されている。コントローラ４は、ＮＡＮＤフラッシュメモリ５のデータ管理とＮＡＮＤフラッシュメモリ５のブロック管理とを実行するように構成されたフラッシュトランスレーション層（ＦＴＬ）として機能し得る。
【００１８】
データ管理には、（１）論理ブロックアドレス（ＬＢＡ）と物理アドレスとの間の対応関係を示すマッピング情報の管理、（２）ページ単位のリード／ライトとブロック単位の消去動作とを隠蔽するための処理、等が含まれる。ＬＢＡと物理アドレスとの間のマッピングの管理は、論理物理アドレス変換テーブルとして機能するルックアップテーブル（ＬＵＴ）３２を用いて実行される。ルックアップテーブル（ＬＵＴ）３２は、所定の管理サイズ単位で、ＬＢＡと物理アドレスとの間のマッピングを管理する。ホスト２からのライトコマンドの多くは、４Ｋバイトのデータの書き込みを要求する。したがって、ルックアップテーブル（ＬＵＴ）３２は、例えば４Ｋバイト単位で、ＬＢＡと物理アドレスとの間のマッピングを管理してもよい。あるＬＢＡに対応する物理アドレスは、このＬＢＡのデータがライトされたＮＡＮＤフラッシュメモリ５内の物理記憶位置を示す。物理アドレスは、物理ブロックアドレスと物理ページアドレスとを含む。物理ページアドレスは全てのページに割り当てられており、また物理ブロックアドレスは全てのブロックに割り当てられている。
【００１９】
ページへのデータ書き込みは、１消去サイクル当たり１回のみ可能である。このため、コントローラ４は、同じＬＢＡへのライト（上書き）を、ＮＡＮＤフラッシュメモリ５上の異なるページにマッピングする。つまり、コントローラ４は、ホスト２から受信されるライトコマンドによって指定されるデータ（ライトデータ）を、このデータのＬＢＡとは無関係に、書き込み先ブロックとして現在割り当てられているブロック内の次の利用可能ページにライトする。そして、コントローラ４は、ルックアップテーブル（ＬＵＴ）３２を更新して、このＬＢＡを、このデータが実際にライトされたこのページの物理アドレスに関連付ける。書き込み先ブロックに利用可能ページが無くなると、新たなブロックが書き込み先ブロックとして割り当てられる。
【００２０】
ブロック管理には、不良ブロックの管理と、ウェアレベリングと、ガベージコレクション等が含まれる。
【００２１】
ホスト２は、リードコマンドおよびライトコマンドをＳＳＤ３に送出する。リードコマンドは、ＳＳＤ３に対してデータのリードを要求するコマンドである。リードコマンドは、リードすべきデータのＬＢＡ（開始ＬＢＡ）と、リードすべきデータの転送長とを含む。ライトコマンドは、ＳＳＤ３に対してデータのライトを要求するコマンドである。ライトコマンドは、ライトデータ（つまり書き込むべきデータ）のＬＢＡ（開始ＬＢＡ）と、ライトデータの転送長とを含む。
【００２２】
次に、コントローラ４の構成について説明する。
【００２３】
コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４、誤り訂正符号（ＥＣＣ）エンコーダ／デコーダ１５等を含む。これらＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４、ＥＣＣエンコーダ／デコーダ１５は、バス１０を介して相互接続される。
【００２４】
ホストインタフェース１１は、ホスト２から様々なコマンド（ライトコマンド、リードコマンド、イレーズコマンド、アンマップ（ＵＮＭＡＰ）コマンド、等）を受信する。
【００２５】
ＣＰＵ１２は、ホストインタフェース１１、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４、ＥＣＣエンコーダ／デコーダ１５を制御するように構成されたプロセッサである。ＣＰＵ１２は、上述のＦＴＬの処理に加え、ホスト２からの様々なコマンドを処理するためのコマンド処理等を実行する。
【００２６】
例えば、コントローラ４がホスト２からライトコマンドを受信した時、ＣＰＵ１２の制御の下、コントローラ４は、ライトコマンドによって指定されるライトデータをＮＡＮＤフラッシュメモリ５に書き込む以下のライト動作を実行する。
【００２７】
コントローラ４は、ライトデータを現在の書き込み先ブロックの物理記憶位置（利用可能ページ）に書き込み、そしてルックアップテーブル（ＬＵＴ）３２を更新して、ライトコマンドに含まれるＬＢＡ（開始ＬＢＡ）にこの物理記憶位置の物理アドレスをマッピングする。
【００２８】
これらＦＴＬ処理およびコマンド処理は、ＣＰＵ１２によって実行されるファームウェアによって制御されてもよい。このファームウェアは、ＣＰＵ１２を、ライト動作制御部２１、リード動作制御部２２、およびエンデュランスコードエンコーダ／デコーダ２３として機能させる。
【００２９】
ライト動作制御部２１は、ホスト２から受信されるライトデータをライトバッファ（ＷＢ）３１に格納する。そして、ライト動作制御部２１は、ライトバッファ（ＷＢ）３１内のデータをページ単位でＮＡＮＤフラッシュメモリ５に書き込む。この場合、ライト動作制御部２１は、ＮＡＮＤインタフェース１３と共同して、データの複数ページをＮＡＮＤフラッシュメモリ５の同一物理ページに割り当てられた複数のページ場所に書き込み、これによってメモリセル当たりに２ビット以上のデータを書き込む。物理ページとは、同一ワード線に接続されたメモリセル群を意味する。
【００３０】
データの複数ページは、少なくとも下位ページデータおよび上位ページデータを含む。１つの物理ページに割り当てられる複数のページ場所は、少なくとも下位ページおよび上位ページを含む。
【００３１】
あるいは、データの複数ページは、下位ページデータと、一つ以上の中位ページデータと、上位ページデータとを含んでもよく、複数のページ場所もまた、下位ページと、一つ以上の中位ページと、上位ページとを含んでもよい。
【００３２】
ＮＡＮＤフラッシュメモリ５がメモリセル当たりに２ビットのデータを格納可能なマルチレベルセル（ＭＬＣ）フラッシュメモリとして実現されている場合においては、一つの物理ページ（同一ワード線に接続されたメモリセル群）には２つのページ場所、つまり下位ページおよび上位ページが割り当てられる。一つの物理ページを構成するメモリセル群の各々に２ビットのデータを書き込む（プログラム）ために、データの２つのページ、つまり下位ページデータおよび上位ページデータが、この物理ページの下位ページおよび上位ページに書き込まれる。
【００３３】
ＮＡＮＤフラッシュメモリ５がメモリセル当たりに３ビットのデータを格納可能なトリプルレベルセル（ＴＬＣ）フラッシュメモリとして実現されている場合においては、一つの物理ページ（同一ワード線に接続されたメモリセル群）には３つのページ場所、つまり下位ページ、中位ページおよび上位ページが割り当てられる。一つの物理ページを構成するメモリセル群の各々に３ビットのデータを書き込む（プログラム）ために、データの３つのページ、つまり下位ページデータ、中位ページおよび上位ページデータが、この物理ページの下位ページ、中位ページおよび上位ページに書き込まれる。
【００３４】
一つの物理ページ（同一ワード線に接続されたメモリセル群）に割り当てられるページ場所の数は４以上であってもよい。この場合、下位ページと、２つ以上の中位ページと、上位ページとが一つの物理ページに割り当てられる。
【００３５】
リード動作制御部２２は、ＮＡＮＤインタフェース１３と共同して、ホスト２からのリード要求によって指定されたＮＡＮＤフラッシュメモリ５内のページ（ページ場所）からデータを読み出す。
【００３６】
エンデュランスコードエンコーダ／デコーダ２３は、ＮＡＮＤフラッシュメモリ５の耐久性（エンデュランス）およびデータの信頼性を改善するための符号化／復号処理を実行する。符号化処理（エンデュランスコードエンコーディング）においては、書き込むべきページデータ、つまり１ページ分のサイズを有するライトデータは、メモリセルの摩耗を少なくし且つビットエラーレートを低減可能なコード（エンデュランスコードとも称される）を使用して符号化される。
【００３７】
本実施形態では、符号化データに含まれる付帯情報（冗長情報）の量をできるだけ減らすことができ且つ十分に速い書き込み速度が得られるように改善された符号化処理が実行される。
【００３８】
すなわち、データライト動作においては、まず、１ページ分のサイズを有するライトデータ（ＭＬＣにおいては、下位ページデータまたは上位ページデータ、ＴＬＣにおいては、下位ページデータ、中位ページデータ、または上位ページデータ）のための誤り訂正符号（ＥＣＣ）がＥＣＣエンコーダ／デコーダ１５によって生成される。そして、ライトデータ（書き込むべきページデータ）とＥＣＣとを含むデータ系列に“０”のビットまたは“１”のビットのどちらが多く含まれるかがエンデュランスコードエンコーダ／デコーダ２３によって判定される。この判定結果と、ライトデータが書き込まれるべき対象のページ場所とに基づいて、符号化データ（ライトデータとＥＣＣとの組、またはライトデータの各ビットが反転された反転ライトデータとＥＣＣの各ビットが反転された反転ＥＣＣとの組）がエンデュランスコードエンコーダ／デコーダ２３によって生成され、この符号化データが対象のページ場所に書き込まれる。例えば、ＭＬＣにおいて、もしライトデータが下位ページに書き込まれるべき下位ページデータである場合においては、符号化データに含まれる“１”のビットの数が増えるようにライトデータが符号化され、これによって符号化データ（ライトデータとＥＣＣとの組、またはライトデータの各ビットが反転された反転ライトデータとＥＣＣの各ビットが反転された反転ＥＣＣとの組）が生成されてもよい。一方、ライトデータが上位ページに書き込まれるべき上位ページデータである場合においては、符号化データに含まれる“０”のビットの数が増えるように、ライトデータが符号化され、符号化データ（ライトデータとＥＣＣとの組、またはライトデータの各ビットが反転された反転ライトデータとＥＣＣの各ビットが反転された反転ＥＣＣとの組）が生成されてもよい。
【００３９】
データリード動作においては、読み出し対象のページ場所からデータおよびＥＣＣが読み出される。そして、読み出されたデータと読み出されたＥＣＣとを使用して、読み出されたデータの誤り訂正のための誤り訂正復号処理（ＥＣＣデコード処理）がＥＣＣエンコーダ／デコーダ１５によって実行される。
【００４０】
もしＥＣＣデコード処理で復号失敗が起きたならば、エンデュランスコードエンコーダ／デコーダ２３は、この読み出されたデータおよびＥＣＣがオリジナルライトデータの反転データおよびオリジナルＥＣＣの反転ＥＣＣであると解釈する。なぜなら、反転データおよび反転ＥＣＣが書き込まれているにもかかわらず、読み出されたＥＣＣそのものと読み出されたデータそのものとを使用してＥＣＣデコード処理が実行されたならば、ＥＣＣデコード処理を正しく実行できないので、ＥＣＣの誤り訂正能力を超える数のエラーがＥＣＣデコード処理によって検出され、これによって復号失敗（「復号エラー」とも云う）が起きるからである。ＥＣＣデコード処理で復号失敗が起きたならば、エンデュランスコードエンコーダ／デコーダ２３は、読み出されたデータの各ビットが反転された反転データと読み出されたＥＣＣの各ビットが反転された反転誤り訂正符号とを生成し、そして反転データと反転誤り訂正符号とを使用してＥＣＣデコード処理が再実行されるようにＥＣＣエンコーダ／デコーダ１５を制御する。
【００４１】
このように、本実施形態では、１ページ分のサイズを有するライトデータ（ページデータ）とこのライトデータのためのＥＣＣとを含むデータ系列に“０”のビットまたは“１”のビットのどちらが多く含まれるかが判定される。そして、この判定結果と、ライトデータが書き込まれるべき対象ページ場所とに基づいて、ライトデータとＥＣＣとの組、またはライトデータの各ビットが反転された反転データとＥＣＣの各ビットが反転された反転ＥＣＣとの組のいずれかが対象のページ場所に書き込まれる。したがって、ライトデータとＥＣＣの双方を、メモリセルの摩耗を少なくし且つビットエラーレートを低減可能なコードを使用して符号化できる。そして、ＮＡＮＤフラッシュメモリ５から読み出された符号化データが反転されるべきであるか否かが、ＥＣＣデコード処理の結果を使用して判定される。したがって、本実施形態では、ライトデータおよびＥＣＣを含むデータ系列の反転／非反転を示す独立したビット（付帯情報）を符号化データに付加する必要は無い。
【００４２】
一般に、ページに書き込まれるＥＣＣのサイズは、このページに書き込まれるライトデータのサイズよりも遙かに小さい。このため、ライトデータとＥＣＣの双方を反転／非反転することによって符号化データを生成する代わりに、ライトデータのみを反転／非反転することによって符号化データを生成し、この符号化データを、オリジナルのライトデータのためＥＣＣと一緒に対象のページ場所に書き込んでもよい。
【００４３】
この場合、データライト動作においては、まず、１ページ分のサイズを有するライトデータのためのＥＣＣがＥＣＣエンコーダ／デコーダ１５によって生成される。そして、ライトデータに“０”のビットまたは“１”のビットのどちらが多く含まれるかがエンデュランスコードエンコーダ／デコーダ２３によって判定される。この判定結果と、ライトデータが書き込まれるべき対象のページ場所とに基づいて、符号化データ（ライトデータ、またはライトデータの各ビットが反転された反転ライトデータ）がエンデュランスコードエンコーダ／デコーダ２３によって生成され、この符号化データと、オリジナルのライトデータのためのＥＣＣとが、対象のページ場所に書き込まれる。
【００４４】
データリード動作においては、読み出し対象のページ場所からデータおよびＥＣＣが読み出される。そして、読み出されたデータと読み出されたＥＣＣとを使用して、読み出されたデータの誤り訂正のための誤り訂正復号処理（ＥＣＣデコード処理）がＥＣＣエンコーダ／デコーダ１５によって実行される。
【００４５】
もしＥＣＣデコード処理で復号失敗が起きたならば、エンデュランスコードエンコーダ／デコーダ２３は、この読み出されたデータがオリジナルライトデータの反転データであると解釈する。なぜなら、反転データが書き込まれているにもかかわらず、読み出されたＥＣＣそのものと読み出されたデータそのものとを使用してＥＣＣデコード処理が実行されたならば、ＥＣＣデコード処理を正しく実行できないので、ＥＣＣの誤り訂正能力を超える数のエラーがＥＣＣデコード処理によって検出され、これによって復号失敗（「復号エラー」とも云う）が起きるからである。そして、エンデュランスコードエンコーダ／デコーダ２３は、読み出されたデータの各ビットが反転された反転データと読み出されたＥＣＣとを使用して、ＥＣＣデコード処理を再実行する。これにより、読み出されたデータに対するＥＣＣデコード処理を正しく実行することができ、ＥＣＣデコード処理によって復号されたデータをホスト２に返すことができる。
【００４６】
次に、コントローラ４内の他のコンポーネントについて説明する。
【００４７】
ＮＡＮＤインタフェース１３は、ＣＰＵ１２の制御の下、ＮＡＮＤフラッシュメモリ５を制御するように構成されたＮＡＮＤコントローラである。上述のＥＣＣエンコーダ／デコーダ１５はＮＡＮＤインタフェース１３に内蔵されていてもよい。
【００４８】
ＤＲＡＭインタフェース１４は、ＣＰＵ１２の制御の下、ＤＲＡＭ６を制御するように構成されたＤＲＡＭコントローラである。
【００４９】
ＤＲＡＭ６の記憶領域の一部は、ＮＡＮＤフラッシュメモリ５にライトすべきデータを一時的に格納するためのライトバッファ（ＷＢ）３１として利用されてもよい。また、ＤＲＡＭ６の記憶領域は、上述のルックアップテーブル（ＬＵＴ）３２の格納のために用いられてもよい。
【００５０】
次に、ホスト２の構成について説明する。
【００５１】
ホスト２は、様々なプログラムを実行する情報処理装置である。情報処理装置によって実行されるプログラムには、アプリケーションソフトウェアレイヤ４１、オペレーティングシステム（ＯＳ）４２、ファイルシステム４３が含まれる。
【００５２】
一般に知られているように、オペレーティングシステム（ＯＳ）４２は、ホスト２を管理し、ホスト２内のハードウェアを制御し、アプリケーションがハードウェアおよびＳＳＤ３を使用することを可能にするための制御を実行するように構成されたソフトウェアである。ファイルシステム４３は、ファイルの操作（作成、保存、更新、削除等）のための制御を行うために使用される。
【００５３】
様々なアプリケーションソフトウェアスレッドがアプリケーションソフトウェアレイヤ４１上で走る。アプリケーションソフトウェアスレッドの例としては、クライアントソフトウェア、データベースソフトウェア、仮想マシン等がある。
【００５４】
アプリケーションソフトウェアレイヤ４１がリード要求またはライト要求のようなリクエストをＳＳＤ３に送出することが必要な時、アプリケーションソフトウェアレイヤ４１は、ＯＳ４２にそのリクエストを送出する。ＯＳ４２はそのリクエストをファイルシステム４３に送出する。ファイルシステム４３は、そのリクエストを、コマンド（リードコマンド、ライトコマンド等）にトランスレートする。ファイルシステム４３は、コマンドを、ＳＳＤ３に送出する。ＳＳＤ３からのレスポンスが受信された際、ファイルシステム４３は、そのレスポンスをＯＳ４２に送出する。ＯＳ４２は、そのレスポンスをアプリケーションソフトウェアレイヤ４１に送出する。
【００５５】
図２は、ＮＡＮＤフラッシュメモリ５内のメモリセルアレイの構成例を示す。
【００５６】
メモリセルアレイは、複数の物理ブロック３６を含む。各物理ブロック３６は、複数のＮＡＮＤストリングを含む。各ＮＡＮＤストリングは、メモリストリング３４と、メモリストリング３４の両端に接続された選択ゲートＳ１およびＳ２とを含む。メモリストリング３４は、直列接続された複数のメモリセル３３を含む。
【００５７】
各メモリセル３３はメモリセルトランジスタから構成される。メモリセルトランジスタは、半導体基板上に形成された積層ゲート構造（stacked gate structure）を備えたＭＯＳＦＥＴ（Metal Oxide Semiconductor Field Effect Transistor）から構成される。積層ゲート構造は、浮遊ゲート電極、及び制御ゲート電極を含んでいる。メモリセルトランジスタの閾値電圧は、浮遊ゲート電極に蓄積される電荷の量に応じて変化される。ある特定値のデータが格納されたメモリセルトランジスタは、この特定値のデータに対応する閾値電圧を有する。
【００５８】
選択ゲートＳ１はビット線ＢＬ３１に接続され、選択ゲートＳ２はソース線ＳＲＣに接続される。同じ行に配置されたメモリセル群３３の制御ゲートは、同じワード線ＷＬに共通に接続される。選択ゲート群Ｓ１のゲートは選択線ＳＧＤに共通に接続され、選択ゲート群Ｓ２のゲートは選択線ＳＧＳに共通に接続される。
【００５９】
メモリセルアレイは、一つ又は複数のプレーン３７を含む。プレーン３７は、複数の物理ブロック３６を含む。これら物理ブロック３６の各々は、複数のＮＡＮＤストリングを含む。データは物理ブロック３６の単位で消去される。
【００６０】
一つのワード線ＷＬに接続された複数のメモリセル３３は、一つの物理ページ３５を形成する。データのライトおよびリードは、物理ページ３５の単位で実行される。メモリセル当たりに２ビットのデータを格納するＭＬＣフラッシュメモリにおいては、一つの物理ページ３５は２つのページ（下位ページ、上位ページ）に相当し、これら２つのページ（下位ページ、上位ページ）にそれぞれページアドレスが割り当てられる。メモリセル当たりに３ビットのデータを格納するＴＬＣフラッシュメモリにおいては、物理ページ３５は３つのページ（下位ページ、中位ページ、上位ページ）に相当し、これら３つのページ（下位ページ、中位ページ、上位ページ）にそれぞれページアドレスが割り当てられる。
【００６１】
図３は、ＭＬＣフラッシュメモリ内のメモリセルアレイの閾値電圧分布を示す。
【００６２】
各メモリセルは、２ビット符号（“１１”、“０１”、“００”、“１０”）に対応する４つの閾値電圧分布（“Ｅｒ”、“Ａ”、“Ｂ”、“Ｃ”）のいずれかに設定される。閾値電圧分布“Ｅｒ”は、消去状態に対応する閾値電圧分布である。閾値電圧分布“Ａ”、“Ｂ”、“Ｃ”は、データが書き込まれた（プログラムされた）状態に対応する閾値電圧分布である。閾値電圧分布“Ｅｒ”の閾値電圧レベルが最も低く、閾値電圧分布“Ｃ”の閾値電圧レベルが最も高い。
【００６３】
ある物理ページへのデータライト動作においては、最初に、下位ページデータがこの物理ページの下位ページに書き込まれる。これにより、この物理ページ内の各メモリセルは、対応する下位ページビットの値に基づいて、閾値電圧分布“Ｅｒ”または閾値電圧分布“Ｂ”のいずれかに、あるいは、閾値電圧分布“Ｅｒ”または所定の中間閾値電圧分布のいずれかに設定される。この後、上位ページデータがこの物理ページの上位ページに書き込まれる。これにより、物理ページ内の各メモリセルは、対応する下位ページビットの値と対応する上位ページビットの値とに基づいて、閾値電圧分布“Ｅｒ”、“Ａ”、“Ｂ”、“Ｃ”のいずれかに設定される。
【００６４】
データリード動作において、ある物理ページの下位ページを指定するページアドレスが入力された場合には、この下位ページに書き込まれている下位ページデータが読み出される。あるこの物理ページの上位ページを指定するページアドレスが入力された場合には、この上位ページに書き込まれている上位ページデータが読み出される。
【００６５】
図４は、ＴＬＣフラッシュメモリ内のメモリセルアレイの閾値電圧分布を示す。
【００６６】
各メモリセルは、３ビット符号（“１１１”、“１０１”、“００１”、“０００”、“１００”、“１１０”、“０１０”、“０１１”）に対応する８つの閾値電圧分布（“Ｅｒ”、“Ａ”、“Ｂ”、“Ｃ”、“Ｄ”、“Ｅ”、“Ｆ”、“Ｇ”）のいずれかに設定される。
【００６７】
ある物理ページへのデータライト動作においては、下位ページデータの書き込み、中位ページデータの書き込み、上位ページデータの書き込みが、実行される。
【００６８】
データリード動作において、ある物理ページの下位ページを指定するページアドレスが入力された場合には、この下位ページに書き込まれている下位ページデータが読み出される。あるこの物理ページの中位ページを指定するページアドレスが入力された場合には、この中位ページに書き込まれている中位ページデータが読み出される。ある物理ページの上位ページを指定するページアドレスが入力された場合には、この上位ページに書き込まれている上位ページデータが読み出される。
【００６９】
図５は、ＭＬＣフラッシュメモリの４つの閾値電圧分布に対する下位ページビットの“１”／“０”のマッピングと、この４つの閾値電圧分布に対する上位ページビットの“１”／“０”のマッピングと、ＴＬＣフラッシュメモリの８つの閾値電圧分布に対する下位ページビットの“１”／“０”のマッピングと、この８つの閾値電圧分布に対する中位ページビットの“１”／“０”のマッピングと、この８つの閾値電圧分布に対する上位ページビットの“１”／“０”のマッピングとを示す。
【００７０】
ＭＬＣフラッシュメモリ、ＴＬＣフラッシュメモリのどちらにおいても、消去状態の閾値電圧分布“Ｅｒ”にはオール“１”の符号が割り当てられる。個々のページ場所（ＭＬＣフラッシュメモリにおいては下位ページ／上位ページ、ＴＬＣフラッシュメモリにおいては下位ページ／中位ページ／上位ページ）に着目すると、“１”、“０”の各々が少なくとも２つ以上連続するように“１”／“０”が４つまたは８つの閾値電圧分布にマッピングされてもよい。
【００７１】
フラッシュメモリにおいては、メモリセルに蓄えられる電荷量が多いデータ状態（高い閾値電圧レベル）は、メモリセルに蓄えられる電荷量が少ないデータ状態（低い閾値電圧レベル）よりもメモリセルを劣化させる。また、フラッシュメモリにおいては、メモリセルに蓄えられる電荷量が時間の経過に伴って減少することによって、メモリセルの閾値電圧レベルが時間の経過に伴って低下するという、データリテンション（ＤＲ）エラーが発生する場合がある。プログラムされたメモリセルの閾値電圧レベルが高い程、データリテンションエラーが発生しやすい。このため、ＭＬＣフラッシュメモリにおいては、閾値電圧分布“Ｃ”のメモリセルは、データリテンションエラーが発生しやすい。
【００７２】
また、フラッシュメモリにおいては、データ読み出し動作に起因してメモリセル（特に、非選択メモリセル）の閾値電圧レベルが上昇するという、リードディスターブ（ＲＤ）エラーが発生する場合がある。閾値電圧分布“Ｅｒ”のメモリセルは、リードディスターブエラーが発生しやすい。
【００７３】
このため、ＭＬＣフラッシュメモリにおいて、メモリセルの摩耗を減らし且つビットエラーレートを低減するためには、両端の符号（“Ｅｒ”に対応する２ビット符号、および“Ｃ”に対応する２ビット符号）の出現確率を減らし、これによって中間の符号（“Ｂ”に対応する２ビット符号、および“Ａ”に対応する２ビット符号）の出現確率を増やすことが好ましい。
【００７４】
ＭＬＣフラッシュメモリにおいては、４つの閾値電圧分布“Ｅｒ”、“Ａ”、“Ｂ”、“Ｃ”に割り当てられる下位ページビットの値は、例えば、“１”、“１”、“０”、“０”である。４つの閾値電圧分布“Ｅｒ”、“Ａ”、“Ｂ”、“Ｃ”に割り当てられる上位ページビットの値は、例えば、“１”、“０”、“０”、“１”である。
【００７５】
本実施形態では、“Ｃ”に対応する２ビット符号の出現確率と“Ｅｒ”に対応する２ビット符号の出現確率とを減少させるために、ライトデータが下位ページデータである場合には、“１”の数を増やすエンコーディングを使用してライトデータ（例えば、ライトデータとＥＣＣの双方、またはライトデータのみ）が符号化され、ライトデータが上位ページデータである場合には、“０”の数を増やすエンコーディングを使用してライトデータ（例えば、ライトデータとＥＣＣの双方、またはライトデータのみ）が符号化される。換言すれば、ＭＬＣフラッシュメモリにおいては、下位ページデータの“１”の数を増やし且つ上位ページデータの“０”の数を増やすためのエンコーディング規則が用いられ得る。
【００７６】
ＴＬＣフラッシュメモリにおいては、８つの閾値電圧分布“Ｅｒ”、“Ａ”、“Ｂ”、“Ｃ”、“Ｄ”、“Ｅ”、“Ｆ”、“Ｇ”に割り当てられる下位ページビットの値は、例えば、“１”、“１”、“１”、“０”、“０”、“０”、“０”、“１”である。８つの閾値電圧分布“Ｅｒ”、“Ａ”、“Ｂ”、“Ｃ”、“Ｄ”、“Ｅ”、“Ｆ”、“Ｇ”に割り当てられる中位ページビットの値は、例えば、“１”、“０”、“０”、“０”、“０”、“１”、“１”、“１”である。８つの閾値電圧分布“Ｅｒ”、“Ａ”、“Ｂ”、“Ｃ”、“Ｄ”、“Ｅ”、“Ｆ”、“Ｇ”に割り当てられる上位ページビットの値は、例えば、“１”、“１”、“０”、“０”、“１”、“１”、“０”、“０”である。
【００７７】
本実施形態では、“Ｇ”に対応する３ビット符号の出現確率と“Ｅｒ”に対応する３ビット符号の出現確率とを減少させるために、ＴＬＣフラッシュメモリ用の２種類のエンコード方法（エンコード方法＃１、エンコード方法＃２）のいずれかが実行される。
【００７８】
エンコード方法＃１においては、ライトデータが下位ページデータである場合には、“０”の数を増やすエンコーディングを使用してライトデータ（例えば、ライトデータとＥＣＣの双方、またはライトデータのみ）が符号化され、ライトデータが中位ページデータである場合には、“０”の数を増やすエンコーディングを使用してライトデータ（例えば、ライトデータとＥＣＣの双方、またはライトデータのみ）が符号化され、ライトデータが上位ページデータである場合には、“１”の数を増やすエンコーディングを使用してライトデータ（例えば、ライトデータとＥＣＣの双方、またはライトデータのみ）が符号化される。換言すれば、ＴＬＣフラッシュメモリ用のエンコード方法＃１では、下位ページデータの“０”の数を増やし、中位ページデータの“０”の数を増やし且つ上位ページデータの“１”の数を増やすためのエンコーディング規則が用いられ得る。
【００７９】
エンコード方法＃２は、下位ページデータの“１”の数を増やすエンコーディングが使用される点を除いて、エンコード方法＃１と同様である。換言すれば、ＴＬＣフラッシュメモリ用のエンコード方法＃２では、下位ページデータの“１”の数を増やし、中位ページデータの“０”の数を増やし且つ上位ページデータの“１”の数を増やすためのエンコーディング規則が用いられ得る。
【００８０】
図６は、エンデュランスコードエンコーダ／デコーダ２３内のエンデュランスコードエンコーダの構成例を示す。
【００８１】
エンデュランスコードエンコーダは、ポピュレーション演算部２３Ａと反転／非反転演算部２３Ｂとを含む。ポピュレーション演算部２３Ａは、１ページ分のサイズを有するライトデータとこのライトデータのためのＥＣＣとを含むデータ系列に含まれる“１”のポピュレーション（“１”のビットの数）をカウントする演算を行い、これによってこのデータ系列に“０”のビットまたは“１”のビットのどちらが多く含まれるかを判定する。あるいは、ポピュレーション演算部２３Ａは、このデータ系列に含まれる“０”のポピュレーション（“０”のビットの数）をカウントするように構成されていてもよい。
【００８２】
反転／非反転演算部２３Ｂは、このデータ系列（ライトデータおよびＥＣＣ）の各ビットを反転または非反転することによって、ライトデータとＥＣＣとの組、またはライトデータの各ビットが反転された反転ライトデータとＥＣＣの各ビットが反転された反転ＥＣＣとの組、のいずれかを符号化データとして出力する。
【００８３】
このデータ系列の反転または非反転の動作は、ポピュレーション演算部２３Ａの演算結果（つまり、“０”のビットまたは“１”のビットのどちらが多く含まれるかを示す判定結果）と、ライトデータが書き込まれるべき対象のページ場所（ＭＬＣフラッシュメモリにおいては下位ページ／上位ページ、ＴＬＣフラッシュメモリにおいては下位ページ／中位ページ／上位ページ）とに基づいて、制御される。
【００８４】
データライト動作においては、ライトデータは、まず、ＥＣＣエンコーダ１５Ａに送出される。ＥＣＣエンコーダ１５Ａは、ＢＣＨ符号、リードソロモン符号、ＬＤＰＣ符号のようなＥＣＣエンコーディングを使用してライトデータをエンコードし、これによってライトデータのためのＥＣＣを生成する。このＥＣＣは、ライトデータ内の誤りを検出および訂正するためのコードである。
【００８５】
ＥＣＣを生成するエンコード処理においては、ライトデータは複数のデータ部に分割されても良く、これら複数のデータ部に対応する複数のＥＣＣ部が生成されても良い。また、幾つかの実施形態では、ライトデータのためのＥＣＣのならず、ライトデータ内の誤りを検出するためのエラー検出コード（例えばＣＲＣ）がさらに生成されても良い。このエラー検出コードは、ＥＣＣよりも多くのエラーを検出可能なコードであってもよい。ＥＣＣエンコーダ１５Ａは、ライトデータとエラー検出コードとを含む情報シンボルをエンコードし、これによってこの情報シンボルのためのＥＣＣを生成しても良い。
【００８６】
ＥＣＣエンコーダ１５ＡによってライトデータのためにＥＣＣが生成された後、このライトデータとＥＣＣが、ポピュレーション演算部２３Ａおよび反転／非反転演算部２３Ｂの各々に送出される。そして、ライトデータとＥＣＣとを含むデータ系列に“０”のビットまたは“１”のビットのどちらが多く含まれるかが判定される。そして、この判定結果）と、対象のページ場所とに基づいて、ライトデータとＥＣＣとを含むデータ系列の全ビットが反転または非反転され、これによって符号化データ（ライトデータとＥＣＣとの組、または反転ライトデータと反転ＥＣＣとの組）が生成される。この符号化データは、ＮＡＮＤフラッシュメモリ５内の対象のページ場所に書き込まれる。
【００８７】
あるいは、ポピュレーション演算部２３Ａは、１ページ分のサイズを有するライトデータのみに含まれる“１”のポピュレーション（“１”のビットの数）をカウントする演算を行い、これによってこのライトデータに“０”のビットまたは“１”のビットのどちらが多く含まれるかを判定してもよい。また、反転／非反転演算部２３Ｂは、ライトデータの各ビットを反転または非反転することによって、オリジナルライトデータまたは反転ライトデータのいずれかを符号化データとして出力してもよい。ライトデータの反転または非反転の動作は、ポピュレーション演算部２３Ａの演算結果（つまり、“０”のビットまたは“１”のビットのどちらが多く含まれるかを示す判定結果）と、ライトデータが書き込まれるべき対象のページ場所（ＭＬＣフラッシュメモリにおいては下位ページ／上位ページ、ＴＬＣフラッシュメモリにおいては下位ページ／中位ページ／上位ページ）とに基づいて、制御される。すなわち、ライトデータは、まず、ＥＣＣエンコーダ１５Ａに送出される。ＥＣＣエンコーダ１５Ａは、ライトデータをエンコードし、これによってライトデータのためのＥＣＣを生成する。ＥＣＣエンコーダ１５ＡによってライトデータのためにＥＣＣが生成された後、このライトデータが、ポピュレーション演算部２３Ａおよび反転／非反転演算部２３Ｂの各々に送出される。そして、ライトデータに“０”のビットまたは“１”のビットのどちらが多く含まれるかが判定され、この判定結果と、対象のページ場所とに基づいて、ライトデータの全ビットが反転または非反転され、これによってライトデータに対応する符号化データが生成される。この符号化データは、オリジナルのライトデータに対応するＥＣＣと一緒に、ＮＡＮＤフラッシュメモリ５内の対象のページ場所に書き込まれる。
【００８８】
図７は、ＭＬＣフラッシュメモリの下位ページに書き込まれるべきライトデータ（下位ページデータ）とこのライトデータのためのＥＣＣとを符号化する動作を示す。
【００８９】
この場合、“１”の数を増やすエンコーディングを使用して、ライトデータとＥＣＣとを含むデータ系列が符号化される。
【００９０】
したがって、もし図７の上部に示すように、ライトデータとＥＣＣとを含むデータ系列に含まれる“０”のビットの数が、このデータ系列に含まれる“１”のビットの数よりも多いならば、データ系列の全ビットを反転するビット反転動作が実行される。このビット反転動作は、データ系列内の“１”のビットを“０”のビットに変換し、且つデータ系列内の“０”のビットを“１”のビットに変換する。これによって、データ系列の反転データ（反転ライトデータ、および反転ＥＣＣ）が符号化データとして生成される。そして、この符号化データは、ＮＡＮＤフラッシュメモリ５内の対象のページ場所（ここでは、ある物理ページの下位ページ）に書き込まれる。
【００９１】
一方、もし図７の下部に示すように、ライトデータとＥＣＣとを含むデータ系列に含まれる“１”のビットの数が、このデータ系列に含まれる“０”のビットの数よりも多いならば、ビット反転動作は実行されない。これによって、オリジナルのデータ系列（オリジナルのライトデータ、およびオリジナルのＥＣＣ）自体が符号化データとして生成される。そして、この符号化データは、ＮＡＮＤフラッシュメモリ５内の対象のページ場所（ここでは、ある物理ページの下位ページ）に書き込まれる。
【００９２】
図８は、ＭＬＣフラッシュメモリの上位ページに書き込まれるべきライトデータ（上位ページデータ）とこのライトデータのためのＥＣＣとを符号化する動作を示す。
【００９３】
この場合、“０”の数を増やすエンコーディングを使用してライトデータとＥＣＣとを含むデータ系列がエンコードされる。
【００９４】
したがって、もし図８の上部に示すように、このデータ系列に含まれる“１”のビットの数が、このデータ系列に含まれる“０”のビットの数よりも多いならば、このデータ系列の全ビットを反転するビット反転動作が実行される。これによって、データ系列の反転データ（反転ライトデータ、および反転ＥＣＣ）が符号化データとして生成される。そして、この符号化データは、ＮＡＮＤフラッシュメモリ５内の対象のページ場所（ここでは、ある物理ページの上位ページ）に書き込まれる。
【００９５】
一方、もし図８の下部に示すように、このデータ系列に含まれる“０”のビットの数が、このデータ系列に含まれる“１”のビットの数よりも多いならば、ビット反転動作は実行されず、これによってオリジナルのデータ系列自体が符号化データとして生成される。そして、この符号化データは、ＮＡＮＤフラッシュメモリ５内の対象のページ場所（ここでは、ある物理ページの上位ページ）に書き込まれる。
【００９６】
図９は、ＭＬＣフラッシュメモリの下位ページに書き込まれるべきライトデータ（下位ページデータ）のみを符号化し、符号化されたライトデータをオリジナルのライトデータのためのＥＣＣと一緒に書き込む動作を示す。
【００９７】
この場合、“１”の数を増やすエンコーディングを使用してライトデータがエンコードされる。
【００９８】
したがって、もし図９の上部に示すように、ライトデータに含まれる“０”のビットの数が、ライトデータに含まれる“１”のビットの数よりも多いならば、ライトデータの全ビットを反転するビット反転動作が実行される。このビット反転動作は、ライトデータ内の“１”のビットを“０”のビットに変換し、且つライトデータ内の“０”のビットを“１”のビットに変換する。これによって、ライトデータの反転データが符号化データとして生成される。そして、この符号化データは、オリジナルのライトデータに対応するＥＣＣと一緒にＮＡＮＤフラッシュメモリ５内の対象のページ場所（ここでは、ある物理ページの下位ページ）に書き込まれる。
【００９９】
一方、もし図９の下部に示すように、ライトデータに含まれる“１”のビットの数が、ライトデータに含まれる“０”のビットの数よりも多いならば、ビット反転動作は実行されない。これによって、オリジナルのライトデータ自体が符号化データとして生成される。そして、この符号化データは、オリジナルのライトデータに対応するＥＣＣと一緒に、ＮＡＮＤフラッシュメモリ５内の対象のページ場所（ここでは、ある物理ページの下位ページ）に書き込まれる。
【０１００】
図１０は、ＭＬＣフラッシュメモリの上位ページに書き込まれるべきライトデータ（上位ページデータ）のみを符号化し、符号化されたライトデータをオリジナルのライトデータのためのＥＣＣと一緒に書き込む動作を示す。
【０１０１】
この場合、“０”の数を増やすエンコーディングを使用してライトデータがエンコードされる。
【０１０２】
したがって、もし図１０の上部に示すように、ライトデータに含まれる“１”のビットの数が、ライトデータに含まれる“０”のビットの数よりも多いならば、ライトデータの全ビットを反転するビット反転動作が実行される。これによって、ライトデータの反転データが符号化データとして生成される。そして、この符号化データは、オリジナルのライトデータに対応するＥＣＣと一緒に、ＮＡＮＤフラッシュメモリ５内の対象のページ場所（ここでは、ある物理ページの上位ページ）に書き込まれる。
【０１０３】
一方、もし図１０の下部に示すように、ライトデータに含まれる“０”のビットの数が、ライトデータに含まれる“１”のビットの数よりも多いならば、ビット反転動作は実行されず、これによってオリジナルのライトデータ自体が符号化データとして生成される。そして、この符号化データは、オリジナルのライトデータに対応するＥＣＣと一緒に、ＮＡＮＤフラッシュメモリ５内の対象のページ場所（ここでは、ある物理ページの上位ページ）に書き込まれる。
【０１０４】
図１１は、エンデュランスコードエンコーダ／デコーダ２３内のエンデュランスデコーダの構成例を示す。
【０１０５】
エンデュランスデコーダは、セレクタ２３Ｃおよび反転演算部２３Ｄを含む。セレクタ２３Ｃおよび反転演算部２３Ｄは、通常は、ＮＡＮＤフラッシュメモリ５から読み出されたデータおよびＥＣＣを反転せず、ＮＡＮＤフラッシュメモリ５から読み出されたデータおよびＥＣＣをＥＣＣデコーダ１５Ｂに送出する。もしＥＣＣデコーダ１５ＢのＥＣＣデコード処理で復号失敗が起きた場合には、セレクタ２３Ｃおよび反転演算部２３Ｄは、ＮＡＮＤフラッシュメモリ５から読み出されたデータおよびＮＡＮＤフラッシュメモリ５から読み出されたＥＣＣの各々に対するビット反転動作を実行し、反転データおよび反転ＥＣＣをＥＣＣデコーダ１５Ｂに送出する。
【０１０６】
データ読み出し動作においては、まず、読み出し対象のページからデータとＥＣＣとが読み出される。読み出されたデータおよび読み出されたＥＣＣは、セレクタ２３Ｃの第１入力に供給される。また、読み出されたデータおよび読み出されたＥＣＣは、反転演算部２３Ｄにも供給される。反転演算部２３Ｄは、ＮＡＮＤフラッシュメモリ５から読み出されたデータおよびＮＡＮＤフラッシュメモリ５から読み出されたＥＣＣの各々に対するビット反転動作を実行し、読み出されたデータの各ビットが反転された反転データ、および読み出されたＥＣＣの各ビットが反転された反転ＥＣＣを生成する。反転データおよび反転ＥＣＣは、セレクタ２３Ｃの第２入力に供給される。
【０１０７】
通常は、セレクタ２３Ｃは、第１入力を選択する。このため、読み出されたデータおよびＥＣＣがＥＣＣデコーダ１５Ｂに送出される。ＥＣＣデコーダ１５Ｂは、データおよびＥＣＣを使用して、このデータの誤り訂正のための誤り訂正復号処理（ＥＣＣデコード処理）を実行する。
【０１０８】
もし、読み出し対象のページに反転データおよび反転ＥＣＣが格納されているにもかかわらず、読み出されたデータおよびＥＣＣを使用したＥＣＣデコード処理が実行されたならば、このＥＣＣのエラー訂正能力を超える数のエラーの存在に起因してＥＣＣデコード処理で復号失敗が起きる。ＥＣＣデコーダ１５Ｂは、復号失敗をセレクタ２３Ｃに通知する。この通知を受信した場合、セレクタ２３Ｃは、第２入力を選択する。この結果、反転データおよび反転ＥＣＣがＥＣＣデコーダ１５Ｂに送出される。ＥＣＣデコーダ１５Ｂは、反転データおよび反転ＥＣＣを使用して、上述のＥＣＣデコード処理を再実行する。
【０１０９】
なお、ライトデータのみを符号化し、符号化されたライトデータをオリジナルのライトデータのためのＥＣＣと一緒に書き込むケースの場合には、反転演算部２３Ｄは、ＮＡＮＤフラッシュメモリ５から読み出されたデータのみを反転してもよい。
【０１１０】
図１２は、ＭＬＣフラッシュメモリにおいて、エンデュランスコードエンコーディングの適用前における閾値電圧分布“Ｅｒ”および閾値電圧分布“Ｃ”それぞれの出現確率と、エンデュランスコードエンコーディングの適用後における閾値電圧分布“Ｅｒ”および閾値電圧分布“Ｃ”それぞれの出現確率とを示す。
【０１１１】
ここでは、ライトデータ内に含まれる“１”または“０”の一方の割合が高い場合を想定する。
【０１１２】
例えば、“１”のビットの数と“０”のビットと数との割合が６：４で偏っている場合においては（“１”の数：“０”の数  ＝  ６：４）、エンデュランスコードエンコーディングの適用前（改善前）における閾値電圧分布“Ｅｒ”および“Ｃ”の出現確率は、図１２の右部に示すように、“０．３６”、“０．２４”である。一方、エンデュランスコードエンコーディングの適用後（改善後）においては、閾値電圧分布“Ｅｒ”および“Ｃ”の出現確率は、図１２の左部に示すように、“０．２４”、“０．１６”に低下される。
【０１１３】
図１３は、ＴＬＣフラッシュメモリにおいて、エンデュランスコードエンコーディングの適用前における閾値電圧分布“Ｅｒ”および“Ｇ”それぞれの出現確率と、エンデュランスコードエンコーディングの適用後における閾値電圧分布“Ｅｒ”および“Ｇ”それぞれの出現確率とを示す。
【０１１４】
ここでは、ライトデータ内に含まれる“１”または“０”の一方の割合が高い場合を想定する。
【０１１５】
例えば、“１”のビットの数と“０”のビットと数との割合が６：４で偏っている場合においては（“１”の数：“０”の数  ＝  ６：４）、エンデュランスコードエンコーディングの適用前（改善前）における閾値電圧分布“Ｅｒ”および“Ｇ”の出現確率は、図１３の上部に示すように、“０．２１６”、“０．１４４”である。
【０１１６】
エンコード方法＃１の適用後（改善後）においては、閾値電圧分布“Ｅｒ”および“Ｇ”の出現確率は、図１３の左下部に示すように、“０．０９６”、“０．０６４”に低下される。
【０１１７】
エンコード方法＃２の適用後（改善後）においては、閾値電圧分布“Ｅｒ”および“Ｇ”の出現確率は、図１３の右下部に示すように、“０．１４４”、“０．０９６”に低下される。
【０１１８】
図１４は、エンデュランスコードエンコーダの別の構成例を示す。
【０１１９】
図１４のエンデュランスコードエンコーダにおいては、データ圧縮処理が組み合わせられている。
【０１２０】
この圧縮処理は、ライトデータにおける“１”／“０”の偏りを増加させるために実行される。これにより、符号化データに含まれる“１”のビットの数の割合がより高い符号化データ、または符号化データに含まれる“０”のビットの数の割合がより高い符号化データを得ることができる。
【０１２１】
図１４のエンデュランスコードエンコーダは、ポピュレーション演算部２３Ａと反転／非反転演算部２３Ｂとに加え、ライトデータを圧縮するように構成された圧縮部７１をさらに含む。このエンデュランスコードエンコーダは、パディング部７２、回転部７３、選択部７４をさらに含んでもよい。
【０１２２】
１ページ分のサイズを有するライトデータ（ページデータ）６０は、圧縮部７１に送出される。圧縮部７１は、ライトデータ６０を圧縮する。この場合、圧縮部７１は、ライトデータ６０を可逆圧縮してもよい。通常、ライトデータ６０を圧縮することによって得られる圧縮データ６１（圧縮されたライトデータ）のサイズは、圧縮前のライトデータ（ページデータ）のサイズ（１ページのサイズ）よりも小さくなる。圧縮データ６１は、パディング部７２に送出される。
【０１２３】
パディング部７２は、ライトデータを圧縮することによって得られる、書き込むべきページデータ内の空き領域を、全て“１”のビット列または全て“０”のビット列を含むパディングデータでパディングする処理を実行する。空き領域のサイズは、１ページのサイズから圧縮データ６１のサイズを引いた残りのサイズに相当する。つまり、パディングデータ（全て“１”のビット列または全て“０”のビット列）が圧縮データ６１に追加され、圧縮データ６１とパディングデータとを含むデータ系列が生成される。このデータ系列は、１ページのサイズを有しており、書き込むべきページデータとして扱われる。
【０１２４】
パディングデータは、圧縮データ６１に後続する位置に追加されてもよいし、複数のパディングデータ部に分割され且つ複数のパディング位置に分散されてもよい。パディングデータのビット列が追加（挿入）されるべきページデータ内の位置は、数学的規則（計算）に基づいて決定することができる。図１４においては、パディングデータが３つのパディングデータ部に分割され、且つこれら３つのパディングデータ部が３つのパディング位置に分散された場合が例示されている。
【０１２５】
パディング処理においては、パディング部７２は、圧縮データ６１に含まれる“１”のビットの数（または“０”のビットの数）をカウントして、圧縮データ６１に“０”のビットまたは“１”のビットのどちらが多く含まれるかを判定してもよい。
【０１２６】
圧縮データ６１に含まれる“１”のビットの数が、圧縮データ６１に含まれる“０”のビットの数よりも多い場合には、パディング部７２は、全て“１”のビット列を使用してパディング処理を実行する。これにより、書き込むべきページデータ内の“１”／“０”の偏りをお菊することができる。
【０１２７】
一方、圧縮データ６１に含まれる“０”のビットの数が、圧縮データ６１に含まれる“１”のビットの数よりも多い場合には、パディング部７２は、全て“０”のビット列を使用してパディング処理を実行する。これにより、書き込むべきページデータ内の“１”／“０”の偏りをお菊することができる。
【０１２８】
なお、圧縮データ６１に含まれる“０”のビットの数と“１”のビットの数とがほぼ等しい場合には、パディング処理は、全て“１”のビット列または全て“０”のビット列のどちらを使用して実行されてもよい。
【０１２９】
また、圧縮データ６１の“０”／“１”の偏りの状況とは無関係に、常に、全て“１”のビット列（または全て“０”のビット列）がパディングデータとして使用されてもよい。
【０１３０】
回転部７３は、予め決められた複数のパディング用の位置の間で、パディングデータの位置をローテーションさせる。これは、圧縮データ６１に起因するメモリセルの摩耗の量とパディングデータに起因するメモリセルの摩耗の量とが互い異なるからである。複数のパディング用の位置を使用してパディングデータ位置をローテーションさせることにより、摩耗を全てのメモリセル位置に均等に分散させることが可能となる。
【０１３１】
例えば、予め決められた３つのパディング用の位置を使用する場合においては、書き込み先ブロックへの一回目の書き込み動作においては、どのページにデータが書き込まれる場合であっても、パディングデータは、最初のパディング用の位置に設定される。この書き込み先ブロックの消去動作が実行された後にこの書き込み先ブロックへの二回目の書き込み動作が行われる場合には、どのページにデータが書き込まれる場合であっても、パディングデータは、二番目のパディング用の位置に設定される。そして、この書き込み先ブロックの消去動作が実行された後にこの書き込み先ブロックへの三回目の書き込みが行われる場合には、どのページにデータが書き込まれる場合であっても、パディングデータは、三番目のパディング用の位置に設定される。
【０１３２】
パディングデータをページ内の複数のパディング位置に分散させ、且つパディングデータの位置を複数のパディング用の位置の間でローテーションさせる場合においては、パディングデータは、予め決められた複数のパディング位置セットの間で、ローテーションされる。複数のパディング位置セットの各々は、複数のパディング位置を含んでいる。
【０１３３】
選択部７４は、圧縮データ６１とパディングデータとを含むデータ系列、または圧縮前のライトデータ６０のいずれかを、書き込むべきページデータとして選択する。
【０１３４】
もし圧縮前のライトデータ６０の“０”／“１”の偏りが、パディングデータが追加された圧縮データ６１の“０”／“１”の偏りよりも大きいならば、選択部７４は、圧縮前のライトデータ６０を書き込むべきページデータとして選択してもよい。
【０１３５】
より詳しくは、選択部７４は、ライトデータ６０の“０”または“１”の偏りと、パディングデータが追加された圧縮データ６１の０”または“１”の偏りを算出する。そして、選択部７４は、ライトデータ６０、およびパディングデータが追加された圧縮データ６１から、“０”または“１”の偏りが大きい方のデータを選択する。もしライトデータ６０よりも、パディングデータが追加された圧縮データ６１の方が“０”または“１”の高い偏りを有するならば、パディングデータが追加された圧縮データ６１が、書き込むべきページデータとして選択される。一方、もしパディングデータが追加された圧縮データ６１よりも、ライトデータ６０の方が“０”または“１”の高い偏りを有するならば、ライトデータ６０が、書き込むべきページデータとして選択される。
【０１３６】
選択データは、書き込むべきページデータとして扱われる。
【０１３７】
この場合、選択データが、ポピュレーション演算部２３Ａおよび反転／非反転演算部２３Ｂの各々に送出される。そして、選択データに“０”のビットまたは“１”のビットのどちらが多く含まれるかが判定され、この判定結果と、選択データが書き込まれるべき対象のページ場所とに基づいて、選択データの全ビットが反転または非反転され、これによって選択データに対応する符号化データが生成される。この符号化データは、ＥＣＣエンコーダ１５Ａによって生成されるオリジナルの選択データに対応するＥＣＣと一緒に、ＮＡＮＤフラッシュメモリ５内の対象のページ場所に書き込まれてもよい。
【０１３８】
あるいは、ＥＣＣエンコーダ１５Ａは、ポピュレーション演算部２３Ａおよび反転／非反転演算部２３Ｂの前段に配置されていてもよい。この場合、まず、選択データのためのＥＣＣがＥＣＣエンコーダ１５Ａによって生成される。この選択データとこのＥＣＣとが、ポピュレーション演算部２３Ａおよび反転／非反転演算部２３Ｂの各々に送出される。そして、選択データとＥＣＣとを含むデータ系列に“０”のビットまたは“１”のビットのどちらが多く含まれるかが判定される。この判定結果と、選択データが書き込まれるべき対象のページ場所とに基づいて、選択データとＥＣＣとを含むデータ系列の全ビットが反転または非反転され、これによって符号化データ（選択データとＥＣＣとの組、または反転選択データと反転ＥＣＣとの組）が生成される。そして、この符号化データは、ＮＡＮＤフラッシュメモリ５内の対象のページ場所に書き込まれる。
【０１３９】
図１５は、パディングおよび回転（ローテーション）の動作を示す。
【０１４０】
まず、ライトデータが圧縮され、圧縮データが生成される。そして、この圧縮データの空き領域（書き込むべきページデータの空き領域）を、全て“１”のビット列または全て“０”のビット列を含むパディングデータでパディングする処理が実行される。圧縮データのサイズはオリジナルのライトデータによって異なる場合がある。このため、下位ページデータに対応する圧縮データのサイズは、上位ページデータに対応する圧縮データのサイズと異なる場合がある。図１５では、下位ページデータに対応する圧縮データのサイズよりも、上位ページデータに対応する圧縮データのサイズが大きい場合が想定されている。この場合、上位ページデータに対応するパディングデータのサイズは、下位ページデータに対応するパディングデータのサイズよりも小さくなる。
【０１４１】
この場合、これら下位ページデータおよび上位ページデータの双方が書き込まれる物理ページは、メモリセルの摩耗の量が互いに異なる３つのエリア（エリア＃１、エリア＃２、エリア＃３）に論理的に分割される。エリア＃１においては、各メモリセルに格納される２ビット符号は、下位ページデータ内の圧縮データのある１ビットと上位ページデータ内の圧縮データ内のある１ビットとを含む。エリア＃２においては、各メモリセルに格納される２ビット符号は、下位ページデータ内のパディングデータのある１ビットと上位ページデータ内の圧縮データ内のある１ビットとを含む。エリア＃３においては、各メモリセルに格納される２ビット符号は、下位ページデータ内のパディングデータのある１ビットと上位ページデータ内のパディングデータ内のある１ビットとを含む。パディングデータは全て“１”のビット列または全て“０”のビット列であるので、下位ページデータ／上位ページデータ内のパディングデータの反転／非反転動作により、エリア＃３内の各メモリセルを摩耗の少ないデータ状態にプログラムすることができ、これによってエリア＃３内の各メモリセルの摩耗を最も小さくすることができる。つまり、エリア＃３は、摩耗の少ないデータ状態の出現確率が最も高いエリアである。一方、通常、圧縮データは“１”のビットと“０”のビットとが混在されたビットパターンであるので、エリア＃１内の各メモリセルの摩耗は、エリア＃３内の各メモリセルおよびエリア＃２内の各メモリセルの摩耗よりも大きくなる可能性がある。
【０１４２】
本実施形態では、パディングデータの位置は、予め決められた複数のパディング用の位置の間でローテーションされる。例えば、物理ページのサイズが８ＫＢである場合、パディングデータが付加されたライトデータの開始位置を、ページ内の位置（例えば、０ＫＢ目、２ＫＢ目、４ＫＢ目、６ＫＢ目）の間でローテーションしてもよい。このように、複数のパディング用の位置を使用してパディングデータの位置をローテーションすることにより、エリア＃３の位置を物理ページ全体に分散させることができ、これによって摩耗の量を全てのメモリセル位置に均等に分散させることが可能となる。
【０１４３】
図１６は、パディングおよび回転（ローテーション）の別の動作を示す。
【０１４４】
まず、ライトデータが圧縮され、圧縮データが生成される。そして、この圧縮データの空き領域（書き込むべきページデータの空き領域）を、全て“１”のビット列または全て“０”のビット列を含むパディングデータでパディングする処理が実行される。パディングデータは複数のパディングデータ部に分割され、これらパディングデータ部が複数の位置に分散される。
【０１４５】
下位ページデータおよび上位ページデータのどちらにおいても、これら複数のパディングデータ部それぞれのパディング位置は、予め決められた複数のパディング用の位置セットの間でローテーションされる。したがって、エリア＃３の位置を物理ページ内の全てのメモリセル位置に均等に分散させることができる。
【０１４６】
図１７は、図１４のエンデュランスコードエンコーダに適用される符号化動作を示す。
【０１４７】
圧縮データとパディングデータとを含むデータ系列に含まれる“１”のビットの数がカウントされ、これによってこのデータ系列に “０”のビットまたは“１”のビットのどちらが多く含まれるかが判定される。そして、この判定結果と、このデータ系列が書き込まれるべき対象のページ場所とに基づいて、このデータ系列の全ビットが反転または非反転され、これによって符号化データが生成される。この符号化データは、ＥＣＣエンコーダ１５Ａによって生成されるオリジナルのデータ系列（圧縮データ＋パディングデータ）に対応するＥＣＣと一緒に、ＮＡＮＤフラッシュメモリ５内の対象のページ場所に書き込まれる。
【０１４８】
図１８は、図１４のエンデュランスコードエンコーダに適用される別の符号化動作を示す。
【０１４９】
まず、圧縮データとパディングデータとを含むデータ系列のためのＥＣＣが生成される。そして、圧縮データとパディングデータとＥＣＣとを含むデータ系列に含まれる“１”のビットの数がカウントされ、これによってこのデータ系列（圧縮データ＋パディングデータ＋ＥＣＣ）に“０”のビットまたは“１”のビットのどちらが多く含まれるかが判定される。そして、この判定結果と、このデータ系列（圧縮データ＋パディングデータ＋ＥＣＣ）が書き込まれるべき対象のページ場所とに基づいて、このデータ系列（圧縮データ＋パディングデータ＋ＥＣＣ）の全ビットが反転または非反転され、これによって符号化データが生成される。この符号化データは、ＮＡＮＤフラッシュメモリ５内の対象のページ場所に書き込まれる。
【０１５０】
図１９は、図１４のエンデュランスコードエンコーダによって生成される符号化データのフォーマットの例を示す
この符号化データは、データ（圧縮データ＋パディングデータ）およびＥＣＣに加え、さらに、回転情報（ローテーション情報）および圧縮フラグを符号化の内容を示す付帯情報として含んでいても良い。回転情報は、使用されたパディング用位置を示す。圧縮フラグは、データが圧縮されているか否かを示す。
【０１５１】
なお、回転情報（ローテーション情報）および圧縮フラグは、データ（圧縮データ＋パディングデータ）およびＥＣＣが書き込まれる物理ページとは異なる、ＮＡＮＤフラッシュメモリ５内の記憶領域（管理情報用の予約領域）に管理情報として保存されてもよい。
【０１５２】
また、図２０に示すように、符号化データは、回転情報（ローテーション情報）および圧縮フラグに加え、さらに、反転フラグを符号化の内容を示す付帯情報として含んでいても良い。反転フラグは、データ（圧縮データ＋パディングデータ）が反転されているか否かを示す。回転情報（ローテーション情報）、圧縮フラグおよび反転フラグは、データ（圧縮データ＋パディングデータ）およびＥＣＣが書き込まれる物理ページとは異なる、ＮＡＮＤフラッシュメモリ５内の領域に管理情報として保存されてもよい。
【０１５３】
符号化データが反転フラグを含む場合には、ＥＣＣは、図２１に示すように、反転／非反転されたデータ（圧縮データ＋パディングデータ）から生成されてもよい。
【０１５４】
この場合、まず、圧縮データとパディングデータとを含むデータ系列に含まれる“１”のビットの数がカウントされ、これによってこのデータ系列に“０”のビットまたは“１”のビットのどちらが多く含まれるかが判定される。そして、この判定結果と、このデータ系列が書き込まれるべき対象のページ場所とに基づいて、このデータ系列の全ビットが反転または非反転され、これによって符号化データが生成される。そしてこの符号化データのためのＥＣＣが生成され、符号化データが、この符号化データから生成されたＥＣＣと一緒に、ＮＡＮＤフラッシュメモリ５内の対象のページ場所に書き込まれる。
【０１５５】
図２２のフローチャートは、ＮＡＮＤフラッシュメモリ５にデータを書き込むためのライト動作の手順を示す。ここでは、ＮＡＮＤフラッシュメモリ５がＭＬＣフラッシュメモリである場合を想定する。
【０１５６】
コントローラ４は、書き込むべきライトデータをライトバッファ（ＷＢ）３１から読み出し、このライトデータのためのＥＣＣを生成する（ステップＳ１１）。コントローラ４は、ライトデータとＥＣＣとを含むデータ系列に含まれる“１”のポピュレーション（“１”のビットの数）をカウントする演算（ポピュレーション演算）を行う（ステップＳ１２）。
【０１５７】
そして、コントローラ４は、このライトデータが書き込まれるべき対象ページ場所が下位ページまたは上位ページのいずれであるかを判定する（ステップＳ１３）。この判定は、対象ページ場所のページアドレスに基づいて行われてもよい。
【０１５８】
対象ページ場所が下位ページであるならば、コントローラ４は、このデータ系列（ライトデータ＋ＥＣＣ）内の“１”の数を増やすエンコーディングを使用して、このデータ系列（ライトデータ＋ＥＣＣ）をエンコードする。この場合、もしこのデータ系列（ライトデータ＋ＥＣＣ）内の“０”のビットの数がこのデータ系列（ライトデータ＋ＥＣＣ）内の“１”のビットの数よりも多いならば（ステップＳ１４のＹＥＳ）、コントローラ４は、このデータ系列（ライトデータ＋ＥＣＣ）の全ビットを反転することによってこのデータ系列（ライトデータ＋ＥＣＣ）の反転データ（ライトデータの各ビットが反転された反転ライトデータとＥＣＣの各ビットが反転された反転ＥＣＣとの組）を符号化データとして出力する（ステップＳ１５）。一方、もしこのデータ系列（ライトデータ＋ＥＣＣ）内の“１”のビットの数がこのデータ系列（ライトデータ＋ＥＣＣ）内の“０”のビットの数よりも多いならば（ステップＳ１４のＮＯ）、コントローラ４は、このデータ系列（ライトデータ＋ＥＣＣ）を反転せずに、このデータ系列（ライトデータ＋ＥＣＣ）自体を符号化データとして出力する。
【０１５９】
そして、コントローラ４は、符号化データ（反転ライトデータと反転ＥＣＣとの組、またはライトデータとＥＣＣとの組）をＮＡＮＤフラッシュメモリ５内の対象ページ場所に書き込む（ステップＳ１６）。
【０１６０】
対象ページ場所が上位ページであるならば、コントローラ４は、このデータ系列（ライトデータ＋ＥＣＣ）内の“０”の数を増やすエンコーディングを使用して、このデータ系列（ライトデータ＋ＥＣＣ）をエンコードする。この場合、もしこのデータ系列（ライトデータ＋ＥＣＣ）内の“１”のビットの数がこのデータ系列（ライトデータ＋ＥＣＣ）内の“０”のビットの数よりも多いならば（ステップＳ１７のＹＥＳ）、コントローラ４は、このデータ系列（ライトデータ＋ＥＣＣ）の全ビットを反転することによってこのデータ系列（ライトデータ＋ＥＣＣ）の反転データ（ライトデータの各ビットが反転された反転ライトデータとＥＣＣの各ビットが反転された反転ＥＣＣとの組）を符号化データとして出力する（ステップＳ１８）。一方、もしこのデータ系列（ライトデータ＋ＥＣＣ）内の“０”のビットの数がこのデータ系列（ライトデータ＋ＥＣＣ）内の“１”のビットの数よりも多いならば（ステップＳ１７のＮＯ）、コントローラ４は、このデータ系列（ライトデータ＋ＥＣＣ）を反転せずに、このデータ系列（ライトデータ＋ＥＣＣ）自体を符号化データとして出力する。
【０１６１】
そして、コントローラ４は、符号化データ（反転ライトデータと反転ＥＣＣとの組、またはライトデータとＥＣＣとの組）をＮＡＮＤフラッシュメモリ５内の対象ページ場所に書き込む（ステップＳ１９）。
【０１６２】
図２３のフローチャートは、図２２のライト動作によって書き込まれたデータのためのリード動作の手順を示す。
【０１６３】
コントローラ４がホスト２からリードコマンド（リード要求とも云う）を受信した場合、コントローラ４は、リードコマンド内のＬＢＡに対応する物理アドレスによって指定されるＮＡＮＤフラッシュメモリ５内のページからデータ（ここでは、データおよびＥＣＣ）を読み出す（ステップＳ２１）。コントローラ４は、読み出されたデータと読み出されたＥＣＣとを使用して、読み出されたデータの誤り訂正のためのＥＣＣ復号処理（ＥＣＣデコード処理）を実行する（ステップＳ２２）。もしライトデータの反転データおよびＥＣＣの反転ＥＣＣがこのページに書き込まれていたならば、ＥＣＣデコード処理の復号失敗が起きる。
【０１６４】
ＥＣＣデコード処理の復号失敗が起きなかったならば（ステップＳ２３のＮＯ）、コントローラ４は、ＥＣＣデコード処理によって復号されたデータをホスト２に返す（ステップＳ２４）。
【０１６５】
一方、ＥＣＣデコード処理の復号失敗が起きたならば（ステップＳ２３のＹＥＳ）、コントローラ４は、読み出されたデータおよび読み出されたＥＣＣを含むデータ系列の全ビットを反転して、読み出されたデータの各ビットが反転された反転データと、読み出されたＥＣＣの各ビットが反転された反転ＥＣＣとを生成する（ステップＳ２５）。コントローラ４は、反転データと反転ＥＣＣとを使用してＥＣＣデコード処理を再実行し（ステップＳ２６）、ＥＣＣデコード処理によって復号されたデータをホスト２に返す（ステップＳ２７）。
【０１６６】
図２４のフローチャートは、ＮＡＮＤフラッシュメモリ５にデータを書き込むためのライト動作の別の手順を示す。ここでは、ＮＡＮＤフラッシュメモリ５がＭＬＣフラッシュメモリである場合を想定する。
【０１６７】
コントローラ４は、書き込むべきライトデータをライトバッファ（ＷＢ）３１から読み出し、このライトデータのためのＥＣＣを生成する（ステップＳ３１）。コントローラ４は、ライトデータに含まれる“１”のポピュレーション（“１”のビットの数）をカウントする演算（ポピュレーション演算）を行う（ステップＳ３２）。
【０１６８】
そして、コントローラ４は、このライトデータが書き込まれるべき対象ページ場所が下位ページまたは上位ページのいずれであるかを判定する（ステップＳ３３）。
【０１６９】
対象ページ場所が下位ページであるならば、コントローラ４は、ライトデータ内の“１”の数を増やすエンコーディングを使用して、ライトデータをエンコードする。この場合、もしライトデータ内の“０”のビットの数がこのライトデータ内の“１”のビットの数よりも多いならば（ステップＳ３４のＹＥＳ）、コントローラ４は、ライトデータの全ビットを反転することによって、ライトデータの各ビットが反転された反転ライトデータを符号化データとして出力する（ステップＳ３５）。一方、もしこのライトデータ内の“１”のビットの数がこのライトデータ内の“０”のビットの数よりも多いならば（ステップＳ３４のＮＯ）、コントローラ４は、このライトデータを反転せずに、このライトデータ自体を符号化データとして出力する。
【０１７０】
そして、コントローラ４は、ステップＳ３１で生成されたＥＣＣが付加された符号化データ、つまり反転ライトデータとステップＳ３１で生成されたＥＣＣとの組、またはライトデータとステップＳ３１で生成されたＥＣＣとの組のいずれかを、ＮＡＮＤフラッシュメモリ５内の対象ページ場所に書き込む（ステップＳ３６）。
【０１７１】
対象ページ場所が上位ページであるならば、コントローラ４は、ライトデータ内の“０”の数を増やすエンコーディングを使用して、ライトデータをエンコードする。この場合、もしライトデータ内の“１”のビットの数がこのライトデータ内の“０”のビットの数よりも多いならば（ステップＳ３７のＹＥＳ）、コントローラ４は、ライトデータの全ビットを反転することによって、ライトデータの各ビットが反転された反転ライトデータを符号化データとして出力する（ステップＳ３８）。一方、もしこのライトデータ内の“０”のビットの数がこのライトデータ内の“１”のビットの数よりも多いならば（ステップＳ３７のＮＯ）、コントローラ４は、このライトデータを反転せずに、このライトデータ自体を符号化データとして出力する。
【０１７２】
そして、コントローラ４は、ステップＳ３１で生成されたＥＣＣが付加された符号化データ、つまり反転ライトデータとステップＳ３１で生成されたＥＣＣとの組、またはライトデータとステップＳ３１で生成されたＥＣＣとの組のいずれかを、ＮＡＮＤフラッシュメモリ５内の対象ページ場所に書き込む（ステップＳ３９）。
【０１７３】
図２５のフローチャートは、図２４のライト動作によって書き込まれたデータのためのリード動作の手順を示す。
【０１７４】
コントローラ４がホスト２からリードコマンド（リード要求とも云う）を受信した場合、コントローラ４は、リードコマンド内のＬＢＡに対応する物理アドレスによって指定されるＮＡＮＤフラッシュメモリ５内のページからデータ（ここでは、データおよびＥＣＣ）を読み出す（ステップＳ４１）。コントローラ４は、読み出されたデータと読み出されたＥＣＣとを使用して、読み出されたデータの誤り訂正のためのＥＣＣ復号処理（ＥＣＣデコード処理）を実行する（ステップＳ４２）。もしライトデータの反転データがこのページに書き込まれていたならば、ＥＣＣデコード処理の復号失敗が起きる。
【０１７５】
ＥＣＣデコード処理の復号失敗が起きなかったならば（ステップＳ４３のＮＯ）、コントローラ４は、ＥＣＣデコード処理によって復号されたデータをホスト２に返す（ステップＳ４４）。
【０１７６】
一方、ＥＣＣデコード処理の復号失敗が起きたならば（ステップＳ４３のＹＥＳ）、コントローラ４は、読み出されたデータの全ビットを反転して、読み出されたデータの各ビットが反転された反転データを生成する（ステップＳ４５）。コントローラ４は、反転データと読み出されたＥＣＣとを使用してＥＣＣデコード処理を再実行し（ステップＳ４６）、ＥＣＣデコード処理によって復号されたデータをホスト２に返す（ステップＳ４７）。
【０１７７】
図２６のフローチャートは、図２４のライト動作と圧縮処理とが組み合わされたライト動作の手順を示す。
【０１７８】
ここでは、ＮＡＮＤフラッシュメモリ５（ＭＬＣフラッシュメモリ）にデータを書き込む場合を想定する。
【０１７９】
圧縮処理が組み合わされたライト動作においては、図２４のステップＳ３１〜Ｓ３９の処理の前にステップＳ５１〜Ｓ５７の処理が実行されてもよい。
【０１８０】
すなわち、コントローラ４は、まず、ライトデータを圧縮する（ステップＳ５１）。コントローラ４は、ステップＳ５１で生成された圧縮データに“１”または“０”のどちらのビットが多く含まれるかを判定する（ステップＳ５２）。
【０１８１】
圧縮データに含まれる“１”のビットの数の割合が高いならば、コントローラ４は、“１”のビット列を圧縮データに追加することによって、ライトデータの空き領域を“１”のビット列でパディングするための処理を行う（ステップＳ５３）。
【０１８２】
圧縮データに含まれる“０”のビットの数の割合が高いならば、コントローラ４は、“０”のビット列を圧縮データに追加することによって、ライトデータの空き領域を“０”のビット列でパディングするための処理を行う（ステップＳ５４）。
【０１８３】
圧縮データに含まれる“１”のビットの数の割合と“０”のビットの数の割合が同じならば、コントローラ４は、“０”のビット列または“１”のビット列のいずれかの所定ビット列を圧縮データに追加することによって、ライトデータの空き領域をこの所定ビット列“０”でパディングするための処理を行う（ステップＳ５５）。なお、圧縮データに含まれる“１”（または“０”）の数とは無関係に、“０”のビット列または“１”のビット列のいずれかの所定ビット列でライトデータの空き領域をパディングする処理が実行されても良い。
【０１８４】
パディングのための処理では、コントローラ４は、圧縮データを複数のデータ部に分け、パディング用のビット列を、これら複数のデータ部に後続する複数の位置（パディング位置）に分散させてもよい。さらに、コントローラ４は、これらパディング位置を、複数のパディング位置の間で回転（ローテート）させる処理を行ってもよい（ステップＳ５６）。
【０１８５】
コントローラ４は、圧縮前のライトデータ、およびパディング用のビット列が追加された圧縮データの内、“０”または“１”の偏りが大きい方のデータを処理対象データとして選択する（ステップＳ５７）。
【０１８６】
続くステップＳ３１〜Ｓ３９では、コントローラ４は、選択されたデータを、ライトデータとして扱うことによって、選択されたデータの反転／非反転データを符号化データとして出力し、この符号化データを選択されたデータのためのＥＣＣと一緒に、対象のページ場所に書き込む。
【０１８７】
図２７のフローチャートは、図２２のライト動作と圧縮処理とが組み合わされたライト動作の手順を示す。
【０１８８】
ここでは、ＮＡＮＤフラッシュメモリ５（ＭＬＣフラッシュメモリ）にデータを書き込む場合を想定する。
【０１８９】
圧縮処理が組み合わされたライト動作においては、図２２のステップＳ１１〜Ｓ１９の処理の前に、図２６で説明したステップＳ５１〜Ｓ５７の処理が実行されてもよい。
【０１９０】
図２８のフローチャートは、図２６のライト動作によって書き込まれたデータのためのリード動作の手順を示す。
【０１９１】
コントローラ４がホスト２からリードコマンド（リード要求とも云う）を受信した場合、コントローラ４は、リードコマンド内のＬＢＡに対応する物理アドレスによって指定されるＮＡＮＤフラッシュメモリ５内のページからデータ（ここでは、データおよびＥＣＣ）を読み出す（ステップＳ６１）。コントローラ４は、読み出されたデータと読み出されたＥＣＣとを使用して、読み出されたデータの誤り訂正のためのＥＣＣ復号処理（ＥＣＣデコード処理）を実行する（ステップＳ６２）。もし圧縮データとパディングデータとを含むデータ系列の反転データがこのページに書き込まれていたならば、ＥＣＣデコード処理の復号失敗が起きる。
【０１９２】
ＥＣＣデコード処理の復号失敗が起きなかったならば（ステップＳ６３のＮＯ）、コントローラ４は、ＥＣＣデコード処理によって復号されたデータからパディングデータを除去し（ステップＳ６４）、パディングデータが除去された残りのデータを伸張し（ステップＳ６５）、伸張されたデータをホスト２に返す（ステップＳ６６）。
【０１９３】
一方、ＥＣＣデコード処理の復号失敗が起きたならば（ステップＳ６３のＹＥＳ）、コントローラ４は、読み出されたデータ（圧縮データとパディングデータ）の全ビットを反転して、読み出されたデータの各ビットが反転された反転データを生成する（ステップＳ６７）。コントローラ４は、反転データと読み出されたＥＣＣとを使用してＥＣＣデコード処理を再実行する（ステップＳ６８）。そして、コントローラ４は、ＥＣＣデコード処理によって復号されたデータからパディングデータを除去し（ステップＳ６９）、パディングデータが除去された残りのデータを伸張し（ステップＳ７０）、伸張されたデータをホスト２に返す（ステップＳ７１）。
【０１９４】
図２９のフローチャートは、図２７のライト動作によって書き込まれたデータのためのリード動作の手順を示す。
【０１９５】
コントローラ４がホスト２からリードコマンド（リード要求とも云う）を受信した場合、コントローラ４は、リードコマンド内のＬＢＡに対応する物理アドレスによって指定されるＮＡＮＤフラッシュメモリ５内のページからデータ（ここでは、データおよびＥＣＣ）を読み出す（ステップＳ８１）。コントローラ４は、読み出されたデータと読み出されたＥＣＣとを使用して、読み出されたデータの誤り訂正のためのＥＣＣ復号処理（ＥＣＣデコード処理）を実行する（ステップＳ８２）。もし圧縮データとパディングデータとを含むデータ系列の反転データ、および反転ＥＣＣが、このページに書き込まれていたならば、ＥＣＣデコード処理の復号失敗が起きる。
【０１９６】
ＥＣＣデコード処理の復号失敗が起きなかったならば（ステップＳ８３のＮＯ）、コントローラ４は、ＥＣＣデコード処理によって復号されたデータからパディングデータを除去し（ステップＳ８４）、パディングデータが除去された残りのデータを伸張し（ステップＳ８５）、伸張されたデータをホスト２に返す（ステップＳ８６）。
【０１９７】
一方、ＥＣＣデコード処理の復号失敗が起きたならば（ステップＳ８３のＹＥＳ）、コントローラ４は、読み出されたデータ（圧縮データとパディングデータ）と読み出されたＥＣＣとを含むデータ系列の全ビットを反転して、読み出されたデータの各ビットが反転された反転データと、読み出されたＥＣＣの各ビットが反転された反転ＥＣＣとを生成する（ステップＳ８７）。コントローラ４は、反転データと反転ＥＣＣとを使用してＥＣＣデコード処理を再実行する（ステップＳ８８）。そして、コントローラ４は、ＥＣＣデコード処理によって復号されたデータからパディングデータを除去し（ステップＳ８９）、パディングデータが除去された残りのデータを伸張し（ステップＳ９０）、伸張されたデータをホスト２に返す（ステップＳ９１）。
【０１９８】
図３０は、ホスト２として機能する情報処理装置のハードウェア構成例を示す。
【０１９９】
この情報処理装置は、サーバコンピュータ、またはパーソナルコンピュータとして実現される。この情報処理装置は、プロセッサ（ＣＰＵ）１０１、メインメモリ１０２、ＢＩＯＳ−ＲＯＭ１０３、ネットワークコントローラ１０５、周辺インタフェースコントローラ１０６、コントローラ１０７、およびエンベデッドコントローラ（ＥＣ）１０８等を含む。
【０２００】
プロセッサ１０１は、この情報処理装置の各コンポーネントの動作を制御するように構成されたＣＰＵである。このプロセッサ１０１は、複数のＳＳＤ３のいずれか１つからメインメモリ１０２にロードされる様々なプログラムを実行する。メインメモリ１０２は、ＤＲＡＭのようなランダムアクセスメモリから構成される。プロセッサ１０１によって実行されるプログラムは、上述のアプリケーションソフトウェアレイヤ４１、ＯＳ４２およびファイルシステム４３を含む。
【０２０１】
また、プロセッサ１０１は、不揮発性メモリであるＢＩＯＳ−ＲＯＭ１０３に格納された基本入出力システム（ＢＩＯＳ）も実行する。ＢＩＯＳはハードウェア制御のためのシステムプログラムである。
【０２０２】
ネットワークコントローラ１０５は、有線ＬＡＮコントローラ、無線ＬＡＮコントローラのような通信デバイスである。周辺インタフェースコントローラ１０６は、ＵＳＢデバイスのような周辺デバイスとの通信を実行するように構成されている。
【０２０３】
コントローラ１０７は、複数のコネクタ１０７Ａにそれぞれ接続されるデバイスとの通信を実行するように構成されている。本実施形態では、複数のＳＳＤ３が複数のコネクタ１０７Ａにそれぞれ接続される。コントローラ１０７は、ＳＡＳ  ｅｘｐａｎｄｅｒ、ＰＣＩｅ  Ｓｗｉｔｃｈ、ＰＣＩｅ  ｅｘｐａｎｄｅｒ、フラッシュアレイコントローラ、またはＲＡＩＤコントローラ等である。
【０２０４】
ＥＣ１０８は、情報処理装置の電力管理を実行するように構成されたシステムコントローラとして機能する。ＥＣ１０８は、ユーザによる電源スイッチの操作に応じて情報処理装置をパワーオンおよびパワーオフする。ＥＣ１０８はワンチップマイクロコントローラのような処理回路として実現されている。ＥＣ１０８は、キーボード（ＫＢ）などの入力デバイスを制御するキーボードコントローラを内蔵していてもよい。
【０２０５】
図３１は、複数のＳＳＤ３とホスト２とを含む情報処理装置の構成例を示す。
【０２０６】
この情報処理装置は、ラックに収容可能な薄い箱形の筐体２０１を備える。多数のＳＳＤ３は筐体２０１内に配置されても良い。この場合、各ＳＳＤ３は筐体２０１の前面２０１Ａに設けられたスロットに取り外し可能に挿入されてもよい。
【０２０７】
システムボード（マザーボード）２０２は筐体２０１内に配置される。システムボード（マザーボード）２０２上においては、ＣＰＵ１０１、メモリ１０２、ネットワークコントローラ１０５、コントローラ１０７を含む様々な電子部品が実装されている。これら電子部品がホスト２として機能する。
【０２０８】
以上説明したように、本実施形態によれば、ライト動作では、１ページ分のサイズを有する第１ライトデータのための第１誤り訂正符号が生成され、第１ライトデータと第１誤り訂正符号とを含むデータ系列に“０”のビットまたは“１”のビットのどちらが多く含まれるかが判定される。そして、この判定結果と、第１ライトデータが書き込まれるべき対象のページ場所とに基づいて、第１ライトデータと第１誤り訂正符号との組、または第１ライトデータの各ビットが反転された第２ライトデータと第１誤り訂正符号の各ビットが反転された第２誤り訂正符号との組のいずれかが対象のページ場所に書き込まれる。リード動作では、読み出し対象のページ場所からデータおよび誤り訂正符号が読み出され、読み出されたデータと読み出された誤り訂正符号とを使用して、読み出されたデータの誤り訂正のための誤り訂正復号処理が実行される。誤り訂正復号処理で復号失敗が起きた場合、読み出されたデータの各ビットが反転された反転データと読み出された誤り訂正符号の各ビットが反転された反転誤り訂正符号とを使用して誤り訂正復号処理が再実行される。
【０２０９】
また、第１ライトデータと第１誤り訂正符号とを含むデータ系列を反転／非反転する代わりに、第１ライトデータのみを反転／非反転してもよい。この場合、ライト動作では、第１ライトデータのための第１誤り訂正符号が生成され、第１ライトデータに“０”のビットまたは“１”のビットのどちらが多く含まれるかが判定される。そして、この判定結果と、第１ライトデータが書き込まれるべき対象のページ場所とに基づいて、第１ライトデータと第１誤り訂正符号との組、または第１ライトデータの各ビットが反転された第２ライトデータと第１誤り訂正符号との組のいずれかが対象のページ場所に書き込まれる。リード動作では、読み出し対象のページ場所からデータおよび誤り訂正符号が読み出され、読み出されたデータと読み出された誤り訂正符号とを使用して、読み出されたデータの誤り訂正のための誤り訂正復号処理が実行される。誤り訂正復号処理で復号失敗が起きた場合、読み出されたデータの各ビットが反転された反転データと読み出された誤り訂正符号とを使用して、誤り訂正復号処理が再実行される。
【０２１０】
このように、誤り訂正復号処理の復号失敗に応答して、データ（またはデータと誤り訂正符号の双方）を反転し、誤り訂正復号処理を再実行することにより、符号化データにライトデータの反転／非反転を示す切り換えフラグのような付帯情報を挿入すること無く、メモリセルの摩耗が少なく且つビットエラーレートを低減可能な符号化データを書き込むことができる。
【０２１１】
また、データ圧縮とパディングデータローテーションの処理をさらに追加することにより、両端の符号（“Ｅｒ”に対応する２ビット符号、および“Ｃ”に対応する２ビット符号）の出現確率をさらに減らし、中間の符号（“Ｂ”に対応する２ビット符号、および“Ａ”に対応する２ビット符号）の出現確率をさらに増やすことができる。また、複数のパディング用の位置を使用してパディングデータ位置がローテーションされるので、摩耗を全てのメモリセル位置に均等に分散させることが可能となる。
【０２１２】
また、本実施形態の処理は、メモリセル当たりに２ビットのデータを格納可能なＭＬＣフラッシュメモリ、メモリセル当たりに３ビットのデータを格納可能なＴＬＣフラッシュメモリのみならず、メモリセル当たりに４ビット以上のデータを格納可能な他のタイプのフラッシュメモリにも適用可能である。
【０２１３】
また、エンデュランスコードエンコーダ／デコーダ２３用の圧縮処理および伸張処理は、コントローラ４内の専用のハードウェアによって実行してもよい。また、エンデュランスコードエンコーダ／デコーダ２３の全ての機能をコントローラ４内の専用のハードウェアによって実現してもよい。
【０２１４】
また、本実施形態では、不揮発性メモリとしてＮＡＮＤメモリを例示した。しかし、本実施形態の機能は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような他の様々な不揮発性メモリにも適用できる。
【０２１５】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２１６】
２…ホスト、３…ＳＳＤ、４…コントローラ、５…ＮＡＮＤメモリ、１５…ＥＣＣエンコーダ／デコーダ、２１…ライト動作制御部、２２…リード動作制御部、２３…エンデュランスコードエンコーダ／デコーダ。
【図１】
2018041403.tif 000003
【図２】
2018041403.tif 000004
【図３】
2018041403.tif 000005
【図４】
2018041403.tif 000006
【図５】
2018041403.tif 000007
【図６】
2018041403.tif 000008
【図７】
2018041403.tif 000009
【図８】
2018041403.tif 000010
【図９】
2018041403.tif 000011
【図１０】
2018041403.tif 000012
【図１１】
2018041403.tif 000013
【図１２】
2018041403.tif 000014
【図１３】
2018041403.tif 000015
【図１４】
2018041403.tif 000016
【図１５】
2018041403.tif 000017
【図１６】
2018041403.tif 000018
【図１７】
2018041403.tif 000019
【図１８】
2018041403.tif 000020
【図１９】
2018041403.tif 000021
【図２０】
2018041403.tif 000022
【図２１】
2018041403.tif 000023
【図２２】
2018041403.tif 000024
【図２３】
2018041403.tif 000025
【図２４】
2018041403.tif 000026
【図２５】
2018041403.tif 000027
【図２６】
2018041403.tif 000028
【図２７】
2018041403.tif 000029
【図２８】
2018041403.tif 000030
【図２９】
2018041403.tif 000031
【図３０】
2018041403.tif 000032
【図３１】
2018041403.tif 000033