特許第6606039号(P6606039)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6606039
(24)【登録日】2019年10月25日
(45)【発行日】2019年11月13日
(54)【発明の名称】メモリシステムおよび制御方法
(51)【国際特許分類】
   G06F 11/10 20060101AFI20191031BHJP
   G06F 12/04 20060101ALI20191031BHJP
   G11C 11/56 20060101ALI20191031BHJP
   G11C 16/04 20060101ALI20191031BHJP
   G11C 16/06 20060101ALI20191031BHJP
   G11C 16/10 20060101ALI20191031BHJP
【FI】
   G06F11/10 672
   G06F12/04 530
   G11C11/56 200
   G11C11/56 210
   G11C16/04 170
   G11C16/06
   G11C16/10 130
【請求項の数】12
【全頁数】39
(21)【出願番号】特願2016-176835(P2016-176835)
(22)【出願日】2016年9月9日
(65)【公開番号】特開2018-41403(P2018-41403A)
(43)【公開日】2018年3月15日
【審査請求日】2018年10月5日
(73)【特許権者】
【識別番号】318010018
【氏名又は名称】東芝メモリ株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】特許業務法人スズエ国際特許事務所
(72)【発明者】
【氏名】菅野 伸一
【審査官】 漆原 孝治
(56)【参考文献】
【文献】 特表2011−527159(JP,A)
【文献】 特表2011−508358(JP,A)
【文献】 米国特許出願公開第2015/0067436(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/10
G06F 12/04
G11C 11/56
G11C 16/04
G11C 16/06
G11C 16/10
(57)【特許請求の範囲】
【請求項1】
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、少なくとも下位ページデータと上位ページデータとを含む複数のページのデータを、前記不揮発性メモリの同一物理ページに割り当てられる少なくとも下位ページと上位ページとを含む複数のページ場所に書き込むコントローラとを具備し、前記コントローラは、
1ページ分のサイズを有する第1ライトデータを圧縮し、
前記圧縮された第1ライトデータに含まれる“1”のビットの数が、前記圧縮された第1ライトデータに含まれる“0”のビットの数よりも多い場合、全て“1”のビット列を含むパディングデータで前記圧縮された第1ライトデータをパディングし、前記“0”のビットの数が前記“1”のビットの数よりも多い場合、全て“0”のビット列を含むパディングデータで前記圧縮された第1ライトデータをパディングし、
前記圧縮およびパディングされた第1ライトデータのための第1誤り訂正符号を生成し、
前記圧縮およびパディングされた第1ライトデータと前記第1誤り訂正符号とを含むデータ系列に“0”のビットまたは“1”のビットのどちらが多く含まれるかを判定し、
前記判定の結果と、前記圧縮およびパディングされた第1ライトデータが書き込まれる対象のページ場所とに基づいて、前記圧縮およびパディングされた第1ライトデータと前記第1誤り訂正符号との組、または前記圧縮およびパディングされた第1ライトデータの各ビットが反転された第2ライトデータと前記第1誤り訂正符号の各ビットが反転された第2誤り訂正符号との組のいずれかを前記対象のページ場所に書き込み、
前記不揮発性メモリ内の読み出し対象のページ場所からデータおよび誤り訂正符号を読み出し、前記読み出されたデータと前記読み出された誤り訂正符号とを使用して、前記読み出されたデータの誤り訂正のための誤り訂正復号処理を実行し、
前記誤り訂正復号処理で復号失敗が起きた場合、前記読み出されたデータの各ビットが反転された反転データと前記読み出された誤り訂正符号の各ビットが反転された反転誤り訂正符号とを使用して前記誤り訂正復号処理を再実行するように構成されている、メモリシステム。
【請求項2】
前記コントローラは、予め決められた複数のパディング用の位置の間で前記パディングデータの位置をローテーションさせるように構成されている請求項1記載のメモリシステム。
【請求項3】
前記不揮発性メモリは、メモリセル当たりに2ビットのデータを格納可能に構成され、
前記下位ページデータおよび前記上位ページデータを含む、つのページのデータが、前記同一物理ページに割り当てられた、前記下位ページおよび前記上位ページを含む2つのページ場所に書き込まれる請求項1記載のメモリシステム。
【請求項4】
前記不揮発性メモリは、メモリセル当たりに3ビットのデータを格納可能に構成され、
前記下位ページデータ、中位ページデータ、および前記上位ページデータを含む、つのページのデータが、前記同一物理ページに割り当てられた、前記下位ページ、中位ページおよび前記上位ページを含む3つのページ場所に書き込まれる請求項1記載のメモリシステム。
【請求項5】
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、少なくとも下位ページデータと上位ページデータとを含む複数のページのデータを、前記不揮発性メモリの同一物理ページに割り当てられる少なくとも下位ページと上位ページとを含む複数のページ場所に書き込むコントローラとを具備し、前記コントローラは、
1ページ分のサイズを有する第1ライトデータを圧縮し、
前記圧縮された第1ライトデータに含まれる“1”のビットの数が、前記圧縮された第1ライトデータに含まれる“0”のビットの数よりも多い場合、全て“1”のビット列を含むパディングデータで前記圧縮された第1ライトデータをパディングし、前記“0”のビットの数が前記“1”のビットの数よりも多い場合、全て“0”のビット列を含むパディングデータで前記圧縮された第1ライトデータをパディングし、
前記圧縮およびパディングされた第1ライトデータのための第1誤り訂正符号を生成し、
前記圧縮およびパディングされた第1ライトデータに“0”のビットまたは“1”のビットのどちらが多く含まれるかを判定し、
前記判定の結果と、前記圧縮およびパディングされた第1ライトデータが書き込まれる対象のページ場所とに基づいて、前記圧縮およびパディングされた第1ライトデータと前記第1誤り訂正符号との組、または前記圧縮およびパディングされた第1ライトデータの各ビットが反転された第2ライトデータと前記第1誤り訂正符号との組のいずれかを前記対象のページ場所に書き込み、
前記不揮発性メモリ内の読み出し対象のページ場所からデータおよび誤り訂正符号を読み出し、前記読み出されたデータと前記読み出された誤り訂正符号とを使用して、前記読み出されたデータの誤り訂正のための誤り訂正復号処理を実行し、
前記誤り訂正復号処理で復号失敗が起きた場合、前記読み出されたデータの各ビットが反転された反転データと前記読み出された誤り訂正符号とを使用して前記誤り訂正復号処理を再実行するように構成されている、メモリシステム。
【請求項6】
前記コントローラは、予め決められた複数のパディング用の位置の間で前記パディングデータの位置をローテーションさせるように構成されている請求項記載のメモリシステム。
【請求項7】
前記不揮発性メモリは、メモリセル当たりに2ビットのデータを格納可能に構成され、
前記下位ページデータおよび前記上位ページデータを含む、つのページのデータが、前記同一物理ページに割り当てられた、前記下位ページおよび前記上位ページを含む2つのページ場所に書き込まれる請求項記載のメモリシステム。
【請求項8】
前記不揮発性メモリは、メモリセル当たりに3ビットのデータを格納可能に構成され、
前記下位ページデータ、中位ページデータ、および前記上位ページデータを含む、つのページのデータが、前記同一物理ページに割り当てられた、前記下位ページ、中位ページおよび前記上位ページを含む3つのページ場所に書き込まれる請求項記載のメモリシステム。
【請求項9】
少なくとも下位ページデータと上位ページデータとを含む複数のページのデータを、不揮発性メモリの同一物理ページに割り当てられる少なくとも下位ページと上位ページとを含む複数のページ場所に書き込む制御方法であって、
1ページ分のサイズを有する第1ライトデータを圧縮することと、
前記圧縮された第1ライトデータに含まれる“1”のビットの数が、前記圧縮された第1ライトデータに含まれる“0”のビットの数よりも多い場合、全て“1”のビット列を含むパディングデータで前記圧縮された第1ライトデータをパディングし、前記“0”のビットの数が前記“1”のビットの数よりも多い場合、全て“0”のビット列を含むパディングデータで前記圧縮された第1ライトデータをパディングすることと、
前記圧縮およびパディングされた第1ライトデータのための第1誤り訂正符号を生成することと、
前記圧縮およびパディングされた第1ライトデータと前記第1誤り訂正符号とを含むデータ系列に“0”のビットまたは“1”のビットのどちらが多く含まれるかを判定することと、
前記判定の結果と、前記圧縮およびパディングされた第1ライトデータが書き込まれる対象のページ場所とに基づいて、前記圧縮およびパディングされた第1ライトデータと前記第1誤り訂正符号との組、または前記圧縮およびパディングされた第1ライトデータの各ビットが反転された第2ライトデータと前記第1誤り訂正符号の各ビットが反転された第2誤り訂正符号との組のいずれかを前記対象のページ場所に書き込むことと、
前記不揮発性メモリ内の読み出し対象のページ場所からデータおよび誤り訂正符号を読み出し、前記読み出されたデータと前記読み出された誤り訂正符号とを使用して、前記読み出されたデータの誤り訂正のための誤り訂正復号処理を実行することと、
前記誤り訂正復号処理で復号失敗が起きた場合、前記読み出されたデータの各ビットが反転された反転データと前記読み出された誤り訂正符号の各ビットが反転された反転誤り訂正符号とを使用して前記誤り訂正復号処理を再実行することとを具備する制御方法。
【請求項10】
記パディングデータの位置が複数の異なるパディング用の位置の間でローテーションされるように前記パディングデータの位置を調整することをさらに具備する請求項記載の制御方法。
【請求項11】
少なくとも下位ページデータと上位ページデータとを含む複数のページのデータを、不揮発性メモリの同一物理ページに割り当てられる少なくとも下位ページと上位ページとを含む複数のページ場所に書き込む制御方法であって、
1ページ分のサイズを有する第1ライトデータを圧縮することと、
前記圧縮された第1ライトデータに含まれる“1”のビットの数が、前記圧縮された第1ライトデータに含まれる“0”のビットの数よりも多い場合、全て“1”のビット列を含むパディングデータで前記圧縮された第1ライトデータをパディングし、前記“0”のビットの数が前記“1”のビットの数よりも多い場合、全て“0”のビット列を含むパディングデータで前記圧縮された第1ライトデータをパディングすることと、
前記圧縮およびパディングされた第1ライトデータのための第1誤り訂正符号を生成することと、
前記圧縮およびパディングされた第1ライトデータに“0”のビットまたは“1”のビットのどちらが多く含まれるかを判定することと、
前記判定の結果と、前記圧縮およびパディングされた第1ライトデータが書き込まれる対象のページ場所とに基づいて、前記圧縮およびパディングされた第1ライトデータと前記第1誤り訂正符号との組、または前記圧縮およびパディングされた第1ライトデータの各ビットが反転された第2ライトデータと前記第1誤り訂正符号との組のいずれかを前記対象のページ場所に書き込むことと、
前記不揮発性メモリ内の読み出し対象のページ場所からデータおよび誤り訂正符号を読み出し、前記読み出されたデータと前記読み出された誤り訂正符号とを使用して、前記読み出されたデータの誤り訂正のための誤り訂正復号処理を実行することと、
前記誤り訂正復号処理で復号失敗が起きた場合、前記読み出されたデータの各ビットが反転された反転データと前記読み出された誤り訂正符号とを使用して前記誤り訂正復号処理を再実行することとを具備する制御方法。
【請求項12】
記パディングデータの位置が複数の異なるパディング用の位置の間でローテーションされるように前記パディングデータの位置を調整することをさらに具備する請求項11記載の制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
【0003】
このようなメモリシステムの一つとして、NANDフラッシュ技術ベースのソリッドステートドライブ(SSD)が知られている。SSDは、その低電力消費、高性能という特徴により、様々なコンピューティングデバイスのメインストレージとして使用されている。最近では、メモリセルの摩耗を少なくするためのデータパターンを使用して、書き込むべきデータを符号化する符号化技術も開発されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特許第4358299号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかし、一般に、このような符号化技術を適用したケースにおいては、符号化されたデータを構成する複数のデータ部それぞれに対してその符号化の内容を示す情報を付帯情報として付加することが必要とされる。この付帯情報の量が増加されるほど、不揮発性メモリの各ページに書き込むことが可能なユーザデータの量が減少される。
【0006】
本発明が解決しようとする課題は、符号化のための付帯情報を低減することができるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【0007】
実施形態によれば、メモリシステムは、不揮発性メモリと、前記不揮発性メモリに電気的に接続され、少なくとも下位ページデータと上位ページデータとを含む複数のページのデータを、前記不揮発性メモリの同一物理ページに割り当てられる少なくとも下位ページと上位ページとを含む複数のページ場所に書き込むコントローラとを具備する。前記コントローラは、1ページ分のサイズを有する第1ライトデータを圧縮し、前記圧縮された第1ライトデータに含まれる“1”のビットの数が、前記圧縮された第1ライトデータに含まれる“0”のビットの数よりも多い場合、全て“1”のビット列を含むパディングデータで前記圧縮された第1ライトデータをパディングし、前記“0”のビットの数が前記“1”のビットの数よりも多い場合、全て“0”のビット列を含むパディングデータで前記圧縮された第1ライトデータをパディングする。前記コントローラは、前記圧縮およびパディングされた第1ライトデータのための第1誤り訂正符号を生成する。前記コントローラは、前記圧縮およびパディングされた第1ライトデータと前記第1誤り訂正符号とを含むデータ系列に“0”のビットまたは“1”のビットのどちらが多く含まれるかを判定する。前記コントローラは、前記判定の結果と、前記圧縮およびパディングされた第1ライトデータが書き込まれる対象のページ場所とに基づいて、前記圧縮およびパディングされた第1ライトデータと前記第1誤り訂正符号との組、または前記圧縮およびパディングされた第1ライトデータの各ビットが反転された第2ライトデータと前記第1誤り訂正符号の各ビットが反転された第2誤り訂正符号との組のいずれかを前記対象のページ場所に書き込む。前記コントローラは、前記不揮発性メモリ内の読み出し対象のページ場所からデータおよび誤り訂正符号を読み出し、前記読み出されたデータと前記読み出された誤り訂正符号とを使用して、前記読み出されたデータの誤り訂正のための誤り訂正復号処理を実行する。前記コントローラは、前記誤り訂正復号処理で復号失敗が起きた場合、前記読み出されたデータの各ビットが反転された反転データと前記読み出された誤り訂正符号の各ビットが反転された反転誤り訂正符号とを使用して前記誤り訂正復号処理を再実行する。
【図面の簡単な説明】
【0008】
図1】実施形態に係るメモリシステムの構成例を示すブロック図。
図2】同実施形態のメモリシステムに設けられる不揮発性メモリ内のメモリセルアレイの構成例を示す図。
図3】各メモリセルが2ビットデータを格納する、マルチレベルセル(MLC)フラッシュメモリ内のメモリセルアレイの閾値電圧分布を示す図。
図4】各メモリセルが3ビットデータを格納する、トリプルレベルセル(TLC)フラッシュメモリ内のメモリセルアレイの閾値電圧分布を示す図。
図5】MLCフラッシュメモリの4つの閾値電圧分布に対する下位ページビットの“1”/“0”の割り当てと、この4つの閾値電圧分布に対する上位ページビットの“1”/“0”の割り当てと、TLC−フラッシュメモリの8つの閾値電圧分布に対する下位ページビットの“1”/“0”の割り当てと、この8つの閾値電圧分布に対する中位ページビットの“1”/“0”の割り当てと、この8つの閾値電圧分布に対する上位ページビットの“1”/“0”の割り当てとを示す図。
図6】同実施形態のメモリシステムに設けられるエンコーダの構成例を示すブロック図。
図7】MLCフラッシュメモリの下位ページに書き込まれるべきライトデータとこのライトデータのためのECCとを符号化する動作を示す図。
図8】MLCフラッシュメモリの上位ページに書き込まれるべきライトデータとこのライトデータのためのECCとを符号化する動作を示す図。
図9】MLCフラッシュメモリの下位ページに書き込まれるべきライトデータを符号化し、符号化されたライトデータをオリジナルのライトデータのためのECCと一緒に書き込む動作を示す図。
図10】MLCフラッシュメモリの上位ページに書き込まれるべきライトデータを符号化し、符号化されたライトデータをオリジナルのライトデータのためのECCと一緒に書き込む動作を示す図。
図11】同実施形態のメモリシステムに設けられるデコーダの構成例を示すブロック図。
図12】MLCフラッシュメモリにおいて、エンデュランスコードエンコーディングの適用前における閾値電圧分布“Er”および閾値電圧分布“C”それぞれの出現確率と、エンデュランスコード今コーディングの適用後における閾値電圧分布“Er”および閾値電圧分布“C”それぞれの出現確率とを示す図。
図13】TLCフラッシュメモリにおいて、エンデュランスコードエンコーディングの適用前における閾値電圧分布“Er”および閾値電圧分布“G”それぞれの出現確率と、エンデュランスコードエンコーディングの適用後における閾値電圧分布“Er”および閾値電圧分布“G”それぞれの出現確率とを示す図。
図14】同実施形態のメモリシステムに設けられるエンコーダの別の構成例を示すブロック図。
図15】同実施形態のメモリシステムによって実行されるパディングおよび回転の動作を示す図。
図16】同実施形態のメモリシステムによって実行される別のパディングおよび回転の動作を示す図。
図17図14のエンコーダに適用される符号化動作を示す図。
図18図14のエンコーダに適用される別の符号化動作を示す図。
図19図14のエンコーダによって生成される符号化データのフォーマットの例を示す図。
図20図14のエンコーダによって生成される符号化データのフォーマットの別の例を示す図。
図21図14のエンコーダに適用されるさらに別の符号化動作を示す図。
図22】同実施形態のメモリシステムによって実行されるライト動作の手順を示すフローチャート。
図23】同実施形態のメモリシステムによって実行されるリード動作の手順を示すフローチャート。
図24】同実施形態のメモリシステムによって実行されるライト動作の別の手順を示すフローチャート。
図25】同実施形態のメモリシステムによって実行されるリード動作の別の手順を示すフローチャート。
図26】同実施形態のメモリシステムによって実行されるライト動作のさらに別の手順を示すフローチャート。
図27】同実施形態のメモリシステムによって実行されるライト動作のさらに別の手順を示すフローチャート。
図28】同実施形態のメモリシステムによって実行されるリード動作のさらに別の手順を示すフローチャート。
図29】同実施形態のメモリシステムによって実行されるライト動作のさらに別の手順を示すフローチャート。
図30】ホストの構成例を示すブロック図。
図31】同実施形態のメモリシステムとホストとを含むコンピュータの構成例を示す図。
【発明を実施するための形態】
【0009】
以下、図面を参照して、実施形態を説明する。
まず、図1を参照して、一実施形態に係るメモリシステムを含む情報処理システム1の構成を説明する。
【0010】
このメモリシステムは、不揮発性メモリにデータをライトし、不揮発性メモリからデータをリードするように構成された半導体ストレージデバイスである。このメモリシステムは、例えば、NANDフラッシュ技術ベースのソリッドステートドライブ(SSD)3として実現されている。
【0011】
情報処理システム1は、ホスト(ホストデバイス)2と、SSD3とを含む。ホスト2は、サーバ、パーソナルコンピュータのような情報処理装置である。
【0012】
SSD3は、ホスト2として機能する情報処理装置のメインストレージとして使用され得る。SSD3は、この情報処理装置に内蔵されてもよいし、この情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
【0013】
ホスト2とSSD3とを相互接続するためのインタフェースとしては、SCSI、Serial Attached SCSI(SAS)、ATA、Serial ATA(SATA)、PCI Express(PCIe)、Ethernet(登録商標),Fibre channel等を使用し得る。
【0014】
SSD3は、コントローラ4および不揮発性メモリ(NANDフラッシュメモリ)5を備える。SSD3は、DRAM6も備えていてもよい。NANDフラッシュメモリ5は、限定されないが、複数のNANDフラッシュメモリチップを含んでいてもよい。NANDフラッシュメモリ5は、メモリセル当たりに2ビット以上のデータを格納可能に構成されている。例えば、NANDフラッシュメモリ5は、マルチレベルセル(MLC)フラッシュメモリであってもよいし、トリプルレベルセル(TLC)フラッシュメモリであってもよい。
【0015】
NANDフラッシュメモリ5は、メモリセルアレイを含む。このメモリセルアレイは、多数のNANDブロック(ブロック)B0〜Bm−1を含む。ブロックB0〜Bm−1は、消去単位として機能する。ブロックは「物理ブロック」または「消去ブロック」と称されることもある。
【0016】
ブロックB0〜Bm−1は多数のページ(物理ページ)を含む。つまり、ブロックB0〜Bm−1の各々は、ページP0〜Pn−1を含む。NANDフラッシュメモリ5においては、データのリードおよびデータのライトはページ単位で実行される。データの消去はブロック単位で実行される。
【0017】
コントローラ4は、Toggle、ONFIのようなNANDインタフェース13を介して、不揮発性メモリであるNANDフラッシュメモリ5に電気的に接続されている。コントローラ4は、NANDフラッシュメモリ5のデータ管理とNANDフラッシュメモリ5のブロック管理とを実行するように構成されたフラッシュトランスレーション層(FTL)として機能し得る。
【0018】
データ管理には、(1)論理ブロックアドレス(LBA)と物理アドレスとの間の対応関係を示すマッピング情報の管理、(2)ページ単位のリード/ライトとブロック単位の消去動作とを隠蔽するための処理、等が含まれる。LBAと物理アドレスとの間のマッピングの管理は、論理物理アドレス変換テーブルとして機能するルックアップテーブル(LUT)32を用いて実行される。ルックアップテーブル(LUT)32は、所定の管理サイズ単位で、LBAと物理アドレスとの間のマッピングを管理する。ホスト2からのライトコマンドの多くは、4Kバイトのデータの書き込みを要求する。したがって、ルックアップテーブル(LUT)32は、例えば4Kバイト単位で、LBAと物理アドレスとの間のマッピングを管理してもよい。あるLBAに対応する物理アドレスは、このLBAのデータがライトされたNANDフラッシュメモリ5内の物理記憶位置を示す。物理アドレスは、物理ブロックアドレスと物理ページアドレスとを含む。物理ページアドレスは全てのページに割り当てられており、また物理ブロックアドレスは全てのブロックに割り当てられている。
【0019】
ページへのデータ書き込みは、1消去サイクル当たり1回のみ可能である。このため、コントローラ4は、同じLBAへのライト(上書き)を、NANDフラッシュメモリ5上の異なるページにマッピングする。つまり、コントローラ4は、ホスト2から受信されるライトコマンドによって指定されるデータ(ライトデータ)を、このデータのLBAとは無関係に、書き込み先ブロックとして現在割り当てられているブロック内の次の利用可能ページにライトする。そして、コントローラ4は、ルックアップテーブル(LUT)32を更新して、このLBAを、このデータが実際にライトされたこのページの物理アドレスに関連付ける。書き込み先ブロックに利用可能ページが無くなると、新たなブロックが書き込み先ブロックとして割り当てられる。
【0020】
ブロック管理には、不良ブロックの管理と、ウェアレベリングと、ガベージコレクション等が含まれる。
【0021】
ホスト2は、リードコマンドおよびライトコマンドをSSD3に送出する。リードコマンドは、SSD3に対してデータのリードを要求するコマンドである。リードコマンドは、リードすべきデータのLBA(開始LBA)と、リードすべきデータの転送長とを含む。ライトコマンドは、SSD3に対してデータのライトを要求するコマンドである。ライトコマンドは、ライトデータ(つまり書き込むべきデータ)のLBA(開始LBA)と、ライトデータの転送長とを含む。
【0022】
次に、コントローラ4の構成について説明する。
【0023】
コントローラ4は、ホストインタフェース11、CPU12、NANDインタフェース13、DRAMインタフェース14、誤り訂正符号(ECC)エンコーダ/デコーダ15等を含む。これらCPU12、NANDインタフェース13、DRAMインタフェース14、ECCエンコーダ/デコーダ15は、バス10を介して相互接続される。
【0024】
ホストインタフェース11は、ホスト2から様々なコマンド(ライトコマンド、リードコマンド、イレーズコマンド、アンマップ(UNMAP)コマンド、等)を受信する。
【0025】
CPU12は、ホストインタフェース11、NANDインタフェース13、DRAMインタフェース14、ECCエンコーダ/デコーダ15を制御するように構成されたプロセッサである。CPU12は、上述のFTLの処理に加え、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行する。
【0026】
例えば、コントローラ4がホスト2からライトコマンドを受信した時、CPU12の制御の下、コントローラ4は、ライトコマンドによって指定されるライトデータをNANDフラッシュメモリ5に書き込む以下のライト動作を実行する。
【0027】
コントローラ4は、ライトデータを現在の書き込み先ブロックの物理記憶位置(利用可能ページ)に書き込み、そしてルックアップテーブル(LUT)32を更新して、ライトコマンドに含まれるLBA(開始LBA)にこの物理記憶位置の物理アドレスをマッピングする。
【0028】
これらFTL処理およびコマンド処理は、CPU12によって実行されるファームウェアによって制御されてもよい。このファームウェアは、CPU12を、ライト動作制御部21、リード動作制御部22、およびエンデュランスコードエンコーダ/デコーダ23として機能させる。
【0029】
ライト動作制御部21は、ホスト2から受信されるライトデータをライトバッファ(WB)31に格納する。そして、ライト動作制御部21は、ライトバッファ(WB)31内のデータをページ単位でNANDフラッシュメモリ5に書き込む。この場合、ライト動作制御部21は、NANDインタフェース13と共同して、データの複数ページをNANDフラッシュメモリ5の同一物理ページに割り当てられた複数のページ場所に書き込み、これによってメモリセル当たりに2ビット以上のデータを書き込む。物理ページとは、同一ワード線に接続されたメモリセル群を意味する。
【0030】
データの複数ページは、少なくとも下位ページデータおよび上位ページデータを含む。1つの物理ページに割り当てられる複数のページ場所は、少なくとも下位ページおよび上位ページを含む。
【0031】
あるいは、データの複数ページは、下位ページデータと、一つ以上の中位ページデータと、上位ページデータとを含んでもよく、複数のページ場所もまた、下位ページと、一つ以上の中位ページと、上位ページとを含んでもよい。
【0032】
NANDフラッシュメモリ5がメモリセル当たりに2ビットのデータを格納可能なマルチレベルセル(MLC)フラッシュメモリとして実現されている場合においては、一つの物理ページ(同一ワード線に接続されたメモリセル群)には2つのページ場所、つまり下位ページおよび上位ページが割り当てられる。一つの物理ページを構成するメモリセル群の各々に2ビットのデータを書き込む(プログラム)ために、データの2つのページ、つまり下位ページデータおよび上位ページデータが、この物理ページの下位ページおよび上位ページに書き込まれる。
【0033】
NANDフラッシュメモリ5がメモリセル当たりに3ビットのデータを格納可能なトリプルレベルセル(TLC)フラッシュメモリとして実現されている場合においては、一つの物理ページ(同一ワード線に接続されたメモリセル群)には3つのページ場所、つまり下位ページ、中位ページおよび上位ページが割り当てられる。一つの物理ページを構成するメモリセル群の各々に3ビットのデータを書き込む(プログラム)ために、データの3つのページ、つまり下位ページデータ、中位ページおよび上位ページデータが、この物理ページの下位ページ、中位ページおよび上位ページに書き込まれる。
【0034】
一つの物理ページ(同一ワード線に接続されたメモリセル群)に割り当てられるページ場所の数は4以上であってもよい。この場合、下位ページと、2つ以上の中位ページと、上位ページとが一つの物理ページに割り当てられる。
【0035】
リード動作制御部22は、NANDインタフェース13と共同して、ホスト2からのリード要求によって指定されたNANDフラッシュメモリ5内のページ(ページ場所)からデータを読み出す。
【0036】
エンデュランスコードエンコーダ/デコーダ23は、NANDフラッシュメモリ5の耐久性(エンデュランス)およびデータの信頼性を改善するための符号化/復号処理を実行する。符号化処理(エンデュランスコードエンコーディング)においては、書き込むべきページデータ、つまり1ページ分のサイズを有するライトデータは、メモリセルの摩耗を少なくし且つビットエラーレートを低減可能なコード(エンデュランスコードとも称される)を使用して符号化される。
【0037】
本実施形態では、符号化データに含まれる付帯情報(冗長情報)の量をできるだけ減らすことができ且つ十分に速い書き込み速度が得られるように改善された符号化処理が実行される。
【0038】
すなわち、データライト動作においては、まず、1ページ分のサイズを有するライトデータ(MLCにおいては、下位ページデータまたは上位ページデータ、TLCにおいては、下位ページデータ、中位ページデータ、または上位ページデータ)のための誤り訂正符号(ECC)がECCエンコーダ/デコーダ15によって生成される。そして、ライトデータ(書き込むべきページデータ)とECCとを含むデータ系列に“0”のビットまたは“1”のビットのどちらが多く含まれるかがエンデュランスコードエンコーダ/デコーダ23によって判定される。この判定結果と、ライトデータが書き込まれるべき対象のページ場所とに基づいて、符号化データ(ライトデータとECCとの組、またはライトデータの各ビットが反転された反転ライトデータとECCの各ビットが反転された反転ECCとの組)がエンデュランスコードエンコーダ/デコーダ23によって生成され、この符号化データが対象のページ場所に書き込まれる。例えば、MLCにおいて、もしライトデータが下位ページに書き込まれるべき下位ページデータである場合においては、符号化データに含まれる“1”のビットの数が増えるようにライトデータが符号化され、これによって符号化データ(ライトデータとECCとの組、またはライトデータの各ビットが反転された反転ライトデータとECCの各ビットが反転された反転ECCとの組)が生成されてもよい。一方、ライトデータが上位ページに書き込まれるべき上位ページデータである場合においては、符号化データに含まれる“0”のビットの数が増えるように、ライトデータが符号化され、符号化データ(ライトデータとECCとの組、またはライトデータの各ビットが反転された反転ライトデータとECCの各ビットが反転された反転ECCとの組)が生成されてもよい。
【0039】
データリード動作においては、読み出し対象のページ場所からデータおよびECCが読み出される。そして、読み出されたデータと読み出されたECCとを使用して、読み出されたデータの誤り訂正のための誤り訂正復号処理(ECCデコード処理)がECCエンコーダ/デコーダ15によって実行される。
【0040】
もしECCデコード処理で復号失敗が起きたならば、エンデュランスコードエンコーダ/デコーダ23は、この読み出されたデータおよびECCがオリジナルライトデータの反転データおよびオリジナルECCの反転ECCであると解釈する。なぜなら、反転データおよび反転ECCが書き込まれているにもかかわらず、読み出されたECCそのものと読み出されたデータそのものとを使用してECCデコード処理が実行されたならば、ECCデコード処理を正しく実行できないので、ECCの誤り訂正能力を超える数のエラーがECCデコード処理によって検出され、これによって復号失敗(「復号エラー」とも云う)が起きるからである。ECCデコード処理で復号失敗が起きたならば、エンデュランスコードエンコーダ/デコーダ23は、読み出されたデータの各ビットが反転された反転データと読み出されたECCの各ビットが反転された反転誤り訂正符号とを生成し、そして反転データと反転誤り訂正符号とを使用してECCデコード処理が再実行されるようにECCエンコーダ/デコーダ15を制御する。
【0041】
このように、本実施形態では、1ページ分のサイズを有するライトデータ(ページデータ)とこのライトデータのためのECCとを含むデータ系列に“0”のビットまたは“1”のビットのどちらが多く含まれるかが判定される。そして、この判定結果と、ライトデータが書き込まれるべき対象ページ場所とに基づいて、ライトデータとECCとの組、またはライトデータの各ビットが反転された反転データとECCの各ビットが反転された反転ECCとの組のいずれかが対象のページ場所に書き込まれる。したがって、ライトデータとECCの双方を、メモリセルの摩耗を少なくし且つビットエラーレートを低減可能なコードを使用して符号化できる。そして、NANDフラッシュメモリ5から読み出された符号化データが反転されるべきであるか否かが、ECCデコード処理の結果を使用して判定される。したがって、本実施形態では、ライトデータおよびECCを含むデータ系列の反転/非反転を示す独立したビット(付帯情報)を符号化データに付加する必要は無い。
【0042】
一般に、ページに書き込まれるECCのサイズは、このページに書き込まれるライトデータのサイズよりも遙かに小さい。このため、ライトデータとECCの双方を反転/非反転することによって符号化データを生成する代わりに、ライトデータのみを反転/非反転することによって符号化データを生成し、この符号化データを、オリジナルのライトデータのためECCと一緒に対象のページ場所に書き込んでもよい。
【0043】
この場合、データライト動作においては、まず、1ページ分のサイズを有するライトデータのためのECCがECCエンコーダ/デコーダ15によって生成される。そして、ライトデータに“0”のビットまたは“1”のビットのどちらが多く含まれるかがエンデュランスコードエンコーダ/デコーダ23によって判定される。この判定結果と、ライトデータが書き込まれるべき対象のページ場所とに基づいて、符号化データ(ライトデータ、またはライトデータの各ビットが反転された反転ライトデータ)がエンデュランスコードエンコーダ/デコーダ23によって生成され、この符号化データと、オリジナルのライトデータのためのECCとが、対象のページ場所に書き込まれる。
【0044】
データリード動作においては、読み出し対象のページ場所からデータおよびECCが読み出される。そして、読み出されたデータと読み出されたECCとを使用して、読み出されたデータの誤り訂正のための誤り訂正復号処理(ECCデコード処理)がECCエンコーダ/デコーダ15によって実行される。
【0045】
もしECCデコード処理で復号失敗が起きたならば、エンデュランスコードエンコーダ/デコーダ23は、この読み出されたデータがオリジナルライトデータの反転データであると解釈する。なぜなら、反転データが書き込まれているにもかかわらず、読み出されたECCそのものと読み出されたデータそのものとを使用してECCデコード処理が実行されたならば、ECCデコード処理を正しく実行できないので、ECCの誤り訂正能力を超える数のエラーがECCデコード処理によって検出され、これによって復号失敗(「復号エラー」とも云う)が起きるからである。そして、エンデュランスコードエンコーダ/デコーダ23は、読み出されたデータの各ビットが反転された反転データと読み出されたECCとを使用して、ECCデコード処理を再実行する。これにより、読み出されたデータに対するECCデコード処理を正しく実行することができ、ECCデコード処理によって復号されたデータをホスト2に返すことができる。
【0046】
次に、コントローラ4内の他のコンポーネントについて説明する。
【0047】
NANDインタフェース13は、CPU12の制御の下、NANDフラッシュメモリ5を制御するように構成されたNANDコントローラである。上述のECCエンコーダ/デコーダ15はNANDインタフェース13に内蔵されていてもよい。
【0048】
DRAMインタフェース14は、CPU12の制御の下、DRAM6を制御するように構成されたDRAMコントローラである。
【0049】
DRAM6の記憶領域の一部は、NANDフラッシュメモリ5にライトすべきデータを一時的に格納するためのライトバッファ(WB)31として利用されてもよい。また、DRAM6の記憶領域は、上述のルックアップテーブル(LUT)32の格納のために用いられてもよい。
【0050】
次に、ホスト2の構成について説明する。
【0051】
ホスト2は、様々なプログラムを実行する情報処理装置である。情報処理装置によって実行されるプログラムには、アプリケーションソフトウェアレイヤ41、オペレーティングシステム(OS)42、ファイルシステム43が含まれる。
【0052】
一般に知られているように、オペレーティングシステム(OS)42は、ホスト2を管理し、ホスト2内のハードウェアを制御し、アプリケーションがハードウェアおよびSSD3を使用することを可能にするための制御を実行するように構成されたソフトウェアである。ファイルシステム43は、ファイルの操作(作成、保存、更新、削除等)のための制御を行うために使用される。
【0053】
様々なアプリケーションソフトウェアスレッドがアプリケーションソフトウェアレイヤ41上で走る。アプリケーションソフトウェアスレッドの例としては、クライアントソフトウェア、データベースソフトウェア、仮想マシン等がある。
【0054】
アプリケーションソフトウェアレイヤ41がリード要求またはライト要求のようなリクエストをSSD3に送出することが必要な時、アプリケーションソフトウェアレイヤ41は、OS42にそのリクエストを送出する。OS42はそのリクエストをファイルシステム43に送出する。ファイルシステム43は、そのリクエストを、コマンド(リードコマンド、ライトコマンド等)にトランスレートする。ファイルシステム43は、コマンドを、SSD3に送出する。SSD3からのレスポンスが受信された際、ファイルシステム43は、そのレスポンスをOS42に送出する。OS42は、そのレスポンスをアプリケーションソフトウェアレイヤ41に送出する。
【0055】
図2は、NANDフラッシュメモリ5内のメモリセルアレイの構成例を示す。
【0056】
メモリセルアレイは、複数の物理ブロック36を含む。各物理ブロック36は、複数のNANDストリングを含む。各NANDストリングは、メモリストリング34と、メモリストリング34の両端に接続された選択ゲートS1およびS2とを含む。メモリストリング34は、直列接続された複数のメモリセル33を含む。
【0057】
各メモリセル33はメモリセルトランジスタから構成される。メモリセルトランジスタは、半導体基板上に形成された積層ゲート構造(stacked gate structure)を備えたMOSFET(Metal Oxide Semiconductor Field Effect Transistor)から構成される。積層ゲート構造は、浮遊ゲート電極、及び制御ゲート電極を含んでいる。メモリセルトランジスタの閾値電圧は、浮遊ゲート電極に蓄積される電荷の量に応じて変化される。ある特定値のデータが格納されたメモリセルトランジスタは、この特定値のデータに対応する閾値電圧を有する。
【0058】
選択ゲートS1はビット線BL31に接続され、選択ゲートS2はソース線SRCに接続される。同じ行に配置されたメモリセル群33の制御ゲートは、同じワード線WLに共通に接続される。選択ゲート群S1のゲートは選択線SGDに共通に接続され、選択ゲート群S2のゲートは選択線SGSに共通に接続される。
【0059】
メモリセルアレイは、一つ又は複数のプレーン37を含む。プレーン37は、複数の物理ブロック36を含む。これら物理ブロック36の各々は、複数のNANDストリングを含む。データは物理ブロック36の単位で消去される。
【0060】
一つのワード線WLに接続された複数のメモリセル33は、一つの物理ページ35を形成する。データのライトおよびリードは、物理ページ35の単位で実行される。メモリセル当たりに2ビットのデータを格納するMLCフラッシュメモリにおいては、一つの物理ページ35は2つのページ(下位ページ、上位ページ)に相当し、これら2つのページ(下位ページ、上位ページ)にそれぞれページアドレスが割り当てられる。メモリセル当たりに3ビットのデータを格納するTLCフラッシュメモリにおいては、物理ページ35は3つのページ(下位ページ、中位ページ、上位ページ)に相当し、これら3つのページ(下位ページ、中位ページ、上位ページ)にそれぞれページアドレスが割り当てられる。
【0061】
図3は、MLCフラッシュメモリ内のメモリセルアレイの閾値電圧分布を示す。
【0062】
各メモリセルは、2ビット符号(“11”、“01”、“00”、“10”)に対応する4つの閾値電圧分布(“Er”、“A”、“B”、“C”)のいずれかに設定される。閾値電圧分布“Er”は、消去状態に対応する閾値電圧分布である。閾値電圧分布“A”、“B”、“C”は、データが書き込まれた(プログラムされた)状態に対応する閾値電圧分布である。閾値電圧分布“Er”の閾値電圧レベルが最も低く、閾値電圧分布“C”の閾値電圧レベルが最も高い。
【0063】
ある物理ページへのデータライト動作においては、最初に、下位ページデータがこの物理ページの下位ページに書き込まれる。これにより、この物理ページ内の各メモリセルは、対応する下位ページビットの値に基づいて、閾値電圧分布“Er”または閾値電圧分布“B”のいずれかに、あるいは、閾値電圧分布“Er”または所定の中間閾値電圧分布のいずれかに設定される。この後、上位ページデータがこの物理ページの上位ページに書き込まれる。これにより、物理ページ内の各メモリセルは、対応する下位ページビットの値と対応する上位ページビットの値とに基づいて、閾値電圧分布“Er”、“A”、“B”、“C”のいずれかに設定される。
【0064】
データリード動作において、ある物理ページの下位ページを指定するページアドレスが入力された場合には、この下位ページに書き込まれている下位ページデータが読み出される。あるこの物理ページの上位ページを指定するページアドレスが入力された場合には、この上位ページに書き込まれている上位ページデータが読み出される。
【0065】
図4は、TLCフラッシュメモリ内のメモリセルアレイの閾値電圧分布を示す。
【0066】
各メモリセルは、3ビット符号(“111”、“101”、“001”、“000”、“100”、“110”、“010”、“011”)に対応する8つの閾値電圧分布(“Er”、“A”、“B”、“C”、“D”、“E”、“F”、“G”)のいずれかに設定される。
【0067】
ある物理ページへのデータライト動作においては、下位ページデータの書き込み、中位ページデータの書き込み、上位ページデータの書き込みが、実行される。
【0068】
データリード動作において、ある物理ページの下位ページを指定するページアドレスが入力された場合には、この下位ページに書き込まれている下位ページデータが読み出される。あるこの物理ページの中位ページを指定するページアドレスが入力された場合には、この中位ページに書き込まれている中位ページデータが読み出される。ある物理ページの上位ページを指定するページアドレスが入力された場合には、この上位ページに書き込まれている上位ページデータが読み出される。
【0069】
図5は、MLCフラッシュメモリの4つの閾値電圧分布に対する下位ページビットの“1”/“0”のマッピングと、この4つの閾値電圧分布に対する上位ページビットの“1”/“0”のマッピングと、TLCフラッシュメモリの8つの閾値電圧分布に対する下位ページビットの“1”/“0”のマッピングと、この8つの閾値電圧分布に対する中位ページビットの“1”/“0”のマッピングと、この8つの閾値電圧分布に対する上位ページビットの“1”/“0”のマッピングとを示す。
【0070】
MLCフラッシュメモリ、TLCフラッシュメモリのどちらにおいても、消去状態の閾値電圧分布“Er”にはオール“1”の符号が割り当てられる。個々のページ場所(MLCフラッシュメモリにおいては下位ページ/上位ページ、TLCフラッシュメモリにおいては下位ページ/中位ページ/上位ページ)に着目すると、“1”、“0”の各々が少なくとも2つ以上連続するように“1”/“0”が4つまたは8つの閾値電圧分布にマッピングされてもよい。
【0071】
フラッシュメモリにおいては、メモリセルに蓄えられる電荷量が多いデータ状態(高い閾値電圧レベル)は、メモリセルに蓄えられる電荷量が少ないデータ状態(低い閾値電圧レベル)よりもメモリセルを劣化させる。また、フラッシュメモリにおいては、メモリセルに蓄えられる電荷量が時間の経過に伴って減少することによって、メモリセルの閾値電圧レベルが時間の経過に伴って低下するという、データリテンション(DR)エラーが発生する場合がある。プログラムされたメモリセルの閾値電圧レベルが高い程、データリテンションエラーが発生しやすい。このため、MLCフラッシュメモリにおいては、閾値電圧分布“C”のメモリセルは、データリテンションエラーが発生しやすい。
【0072】
また、フラッシュメモリにおいては、データ読み出し動作に起因してメモリセル(特に、非選択メモリセル)の閾値電圧レベルが上昇するという、リードディスターブ(RD)エラーが発生する場合がある。閾値電圧分布“Er”のメモリセルは、リードディスターブエラーが発生しやすい。
【0073】
このため、MLCフラッシュメモリにおいて、メモリセルの摩耗を減らし且つビットエラーレートを低減するためには、両端の符号(“Er”に対応する2ビット符号、および“C”に対応する2ビット符号)の出現確率を減らし、これによって中間の符号(“B”に対応する2ビット符号、および“A”に対応する2ビット符号)の出現確率を増やすことが好ましい。
【0074】
MLCフラッシュメモリにおいては、4つの閾値電圧分布“Er”、“A”、“B”、“C”に割り当てられる下位ページビットの値は、例えば、“1”、“1”、“0”、“0”である。4つの閾値電圧分布“Er”、“A”、“B”、“C”に割り当てられる上位ページビットの値は、例えば、“1”、“0”、“0”、“1”である。
【0075】
本実施形態では、“C”に対応する2ビット符号の出現確率と“Er”に対応する2ビット符号の出現確率とを減少させるために、ライトデータが下位ページデータである場合には、“1”の数を増やすエンコーディングを使用してライトデータ(例えば、ライトデータとECCの双方、またはライトデータのみ)が符号化され、ライトデータが上位ページデータである場合には、“0”の数を増やすエンコーディングを使用してライトデータ(例えば、ライトデータとECCの双方、またはライトデータのみ)が符号化される。換言すれば、MLCフラッシュメモリにおいては、下位ページデータの“1”の数を増やし且つ上位ページデータの“0”の数を増やすためのエンコーディング規則が用いられ得る。
【0076】
TLCフラッシュメモリにおいては、8つの閾値電圧分布“Er”、“A”、“B”、“C”、“D”、“E”、“F”、“G”に割り当てられる下位ページビットの値は、例えば、“1”、“1”、“1”、“0”、“0”、“0”、“0”、“1”である。8つの閾値電圧分布“Er”、“A”、“B”、“C”、“D”、“E”、“F”、“G”に割り当てられる中位ページビットの値は、例えば、“1”、“0”、“0”、“0”、“0”、“1”、“1”、“1”である。8つの閾値電圧分布“Er”、“A”、“B”、“C”、“D”、“E”、“F”、“G”に割り当てられる上位ページビットの値は、例えば、“1”、“1”、“0”、“0”、“1”、“1”、“0”、“0”である。
【0077】
本実施形態では、“G”に対応する3ビット符号の出現確率と“Er”に対応する3ビット符号の出現確率とを減少させるために、TLCフラッシュメモリ用の2種類のエンコード方法(エンコード方法#1、エンコード方法#2)のいずれかが実行される。
【0078】
エンコード方法#1においては、ライトデータが下位ページデータである場合には、“0”の数を増やすエンコーディングを使用してライトデータ(例えば、ライトデータとECCの双方、またはライトデータのみ)が符号化され、ライトデータが中位ページデータである場合には、“0”の数を増やすエンコーディングを使用してライトデータ(例えば、ライトデータとECCの双方、またはライトデータのみ)が符号化され、ライトデータが上位ページデータである場合には、“1”の数を増やすエンコーディングを使用してライトデータ(例えば、ライトデータとECCの双方、またはライトデータのみ)が符号化される。換言すれば、TLCフラッシュメモリ用のエンコード方法#1では、下位ページデータの“0”の数を増やし、中位ページデータの“0”の数を増やし且つ上位ページデータの“1”の数を増やすためのエンコーディング規則が用いられ得る。
【0079】
エンコード方法#2は、下位ページデータの“1”の数を増やすエンコーディングが使用される点を除いて、エンコード方法#1と同様である。換言すれば、TLCフラッシュメモリ用のエンコード方法#2では、下位ページデータの“1”の数を増やし、中位ページデータの“0”の数を増やし且つ上位ページデータの“1”の数を増やすためのエンコーディング規則が用いられ得る。
【0080】
図6は、エンデュランスコードエンコーダ/デコーダ23内のエンデュランスコードエンコーダの構成例を示す。
【0081】
エンデュランスコードエンコーダは、ポピュレーション演算部23Aと反転/非反転演算部23Bとを含む。ポピュレーション演算部23Aは、1ページ分のサイズを有するライトデータとこのライトデータのためのECCとを含むデータ系列に含まれる“1”のポピュレーション(“1”のビットの数)をカウントする演算を行い、これによってこのデータ系列に“0”のビットまたは“1”のビットのどちらが多く含まれるかを判定する。あるいは、ポピュレーション演算部23Aは、このデータ系列に含まれる“0”のポピュレーション(“0”のビットの数)をカウントするように構成されていてもよい。
【0082】
反転/非反転演算部23Bは、このデータ系列(ライトデータおよびECC)の各ビットを反転または非反転することによって、ライトデータとECCとの組、またはライトデータの各ビットが反転された反転ライトデータとECCの各ビットが反転された反転ECCとの組、のいずれかを符号化データとして出力する。
【0083】
このデータ系列の反転または非反転の動作は、ポピュレーション演算部23Aの演算結果(つまり、“0”のビットまたは“1”のビットのどちらが多く含まれるかを示す判定結果)と、ライトデータが書き込まれるべき対象のページ場所(MLCフラッシュメモリにおいては下位ページ/上位ページ、TLCフラッシュメモリにおいては下位ページ/中位ページ/上位ページ)とに基づいて、制御される。
【0084】
データライト動作においては、ライトデータは、まず、ECCエンコーダ15Aに送出される。ECCエンコーダ15Aは、BCH符号、リードソロモン符号、LDPC符号のようなECCエンコーディングを使用してライトデータをエンコードし、これによってライトデータのためのECCを生成する。このECCは、ライトデータ内の誤りを検出および訂正するためのコードである。
【0085】
ECCを生成するエンコード処理においては、ライトデータは複数のデータ部に分割されても良く、これら複数のデータ部に対応する複数のECC部が生成されても良い。また、幾つかの実施形態では、ライトデータのためのECCのならず、ライトデータ内の誤りを検出するためのエラー検出コード(例えばCRC)がさらに生成されても良い。このエラー検出コードは、ECCよりも多くのエラーを検出可能なコードであってもよい。ECCエンコーダ15Aは、ライトデータとエラー検出コードとを含む情報シンボルをエンコードし、これによってこの情報シンボルのためのECCを生成しても良い。
【0086】
ECCエンコーダ15AによってライトデータのためにECCが生成された後、このライトデータとECCが、ポピュレーション演算部23Aおよび反転/非反転演算部23Bの各々に送出される。そして、ライトデータとECCとを含むデータ系列に“0”のビットまたは“1”のビットのどちらが多く含まれるかが判定される。そして、この判定結果)と、対象のページ場所とに基づいて、ライトデータとECCとを含むデータ系列の全ビットが反転または非反転され、これによって符号化データ(ライトデータとECCとの組、または反転ライトデータと反転ECCとの組)が生成される。この符号化データは、NANDフラッシュメモリ5内の対象のページ場所に書き込まれる。
【0087】
あるいは、ポピュレーション演算部23Aは、1ページ分のサイズを有するライトデータのみに含まれる“1”のポピュレーション(“1”のビットの数)をカウントする演算を行い、これによってこのライトデータに“0”のビットまたは“1”のビットのどちらが多く含まれるかを判定してもよい。また、反転/非反転演算部23Bは、ライトデータの各ビットを反転または非反転することによって、オリジナルライトデータまたは反転ライトデータのいずれかを符号化データとして出力してもよい。ライトデータの反転または非反転の動作は、ポピュレーション演算部23Aの演算結果(つまり、“0”のビットまたは“1”のビットのどちらが多く含まれるかを示す判定結果)と、ライトデータが書き込まれるべき対象のページ場所(MLCフラッシュメモリにおいては下位ページ/上位ページ、TLCフラッシュメモリにおいては下位ページ/中位ページ/上位ページ)とに基づいて、制御される。すなわち、ライトデータは、まず、ECCエンコーダ15Aに送出される。ECCエンコーダ15Aは、ライトデータをエンコードし、これによってライトデータのためのECCを生成する。ECCエンコーダ15AによってライトデータのためにECCが生成された後、このライトデータが、ポピュレーション演算部23Aおよび反転/非反転演算部23Bの各々に送出される。そして、ライトデータに“0”のビットまたは“1”のビットのどちらが多く含まれるかが判定され、この判定結果と、対象のページ場所とに基づいて、ライトデータの全ビットが反転または非反転され、これによってライトデータに対応する符号化データが生成される。この符号化データは、オリジナルのライトデータに対応するECCと一緒に、NANDフラッシュメモリ5内の対象のページ場所に書き込まれる。
【0088】
図7は、MLCフラッシュメモリの下位ページに書き込まれるべきライトデータ(下位ページデータ)とこのライトデータのためのECCとを符号化する動作を示す。
【0089】
この場合、“1”の数を増やすエンコーディングを使用して、ライトデータとECCとを含むデータ系列が符号化される。
【0090】
したがって、もし図7の上部に示すように、ライトデータとECCとを含むデータ系列に含まれる“0”のビットの数が、このデータ系列に含まれる“1”のビットの数よりも多いならば、データ系列の全ビットを反転するビット反転動作が実行される。このビット反転動作は、データ系列内の“1”のビットを“0”のビットに変換し、且つデータ系列内の“0”のビットを“1”のビットに変換する。これによって、データ系列の反転データ(反転ライトデータ、および反転ECC)が符号化データとして生成される。そして、この符号化データは、NANDフラッシュメモリ5内の対象のページ場所(ここでは、ある物理ページの下位ページ)に書き込まれる。
【0091】
一方、もし図7の下部に示すように、ライトデータとECCとを含むデータ系列に含まれる“1”のビットの数が、このデータ系列に含まれる“0”のビットの数よりも多いならば、ビット反転動作は実行されない。これによって、オリジナルのデータ系列(オリジナルのライトデータ、およびオリジナルのECC)自体が符号化データとして生成される。そして、この符号化データは、NANDフラッシュメモリ5内の対象のページ場所(ここでは、ある物理ページの下位ページ)に書き込まれる。
【0092】
図8は、MLCフラッシュメモリの上位ページに書き込まれるべきライトデータ(上位ページデータ)とこのライトデータのためのECCとを符号化する動作を示す。
【0093】
この場合、“0”の数を増やすエンコーディングを使用してライトデータとECCとを含むデータ系列がエンコードされる。
【0094】
したがって、もし図8の上部に示すように、このデータ系列に含まれる“1”のビットの数が、このデータ系列に含まれる“0”のビットの数よりも多いならば、このデータ系列の全ビットを反転するビット反転動作が実行される。これによって、データ系列の反転データ(反転ライトデータ、および反転ECC)が符号化データとして生成される。そして、この符号化データは、NANDフラッシュメモリ5内の対象のページ場所(ここでは、ある物理ページの上位ページ)に書き込まれる。
【0095】
一方、もし図8の下部に示すように、このデータ系列に含まれる“0”のビットの数が、このデータ系列に含まれる“1”のビットの数よりも多いならば、ビット反転動作は実行されず、これによってオリジナルのデータ系列自体が符号化データとして生成される。そして、この符号化データは、NANDフラッシュメモリ5内の対象のページ場所(ここでは、ある物理ページの上位ページ)に書き込まれる。
【0096】
図9は、MLCフラッシュメモリの下位ページに書き込まれるべきライトデータ(下位ページデータ)のみを符号化し、符号化されたライトデータをオリジナルのライトデータのためのECCと一緒に書き込む動作を示す。
【0097】
この場合、“1”の数を増やすエンコーディングを使用してライトデータがエンコードされる。
【0098】
したがって、もし図9の上部に示すように、ライトデータに含まれる“0”のビットの数が、ライトデータに含まれる“1”のビットの数よりも多いならば、ライトデータの全ビットを反転するビット反転動作が実行される。このビット反転動作は、ライトデータ内の“1”のビットを“0”のビットに変換し、且つライトデータ内の“0”のビットを“1”のビットに変換する。これによって、ライトデータの反転データが符号化データとして生成される。そして、この符号化データは、オリジナルのライトデータに対応するECCと一緒にNANDフラッシュメモリ5内の対象のページ場所(ここでは、ある物理ページの下位ページ)に書き込まれる。
【0099】
一方、もし図9の下部に示すように、ライトデータに含まれる“1”のビットの数が、ライトデータに含まれる“0”のビットの数よりも多いならば、ビット反転動作は実行されない。これによって、オリジナルのライトデータ自体が符号化データとして生成される。そして、この符号化データは、オリジナルのライトデータに対応するECCと一緒に、NANDフラッシュメモリ5内の対象のページ場所(ここでは、ある物理ページの下位ページ)に書き込まれる。
【0100】
図10は、MLCフラッシュメモリの上位ページに書き込まれるべきライトデータ(上位ページデータ)のみを符号化し、符号化されたライトデータをオリジナルのライトデータのためのECCと一緒に書き込む動作を示す。
【0101】
この場合、“0”の数を増やすエンコーディングを使用してライトデータがエンコードされる。
【0102】
したがって、もし図10の上部に示すように、ライトデータに含まれる“1”のビットの数が、ライトデータに含まれる“0”のビットの数よりも多いならば、ライトデータの全ビットを反転するビット反転動作が実行される。これによって、ライトデータの反転データが符号化データとして生成される。そして、この符号化データは、オリジナルのライトデータに対応するECCと一緒に、NANDフラッシュメモリ5内の対象のページ場所(ここでは、ある物理ページの上位ページ)に書き込まれる。
【0103】
一方、もし図10の下部に示すように、ライトデータに含まれる“0”のビットの数が、ライトデータに含まれる“1”のビットの数よりも多いならば、ビット反転動作は実行されず、これによってオリジナルのライトデータ自体が符号化データとして生成される。そして、この符号化データは、オリジナルのライトデータに対応するECCと一緒に、NANDフラッシュメモリ5内の対象のページ場所(ここでは、ある物理ページの上位ページ)に書き込まれる。
【0104】
図11は、エンデュランスコードエンコーダ/デコーダ23内のエンデュランスデコーダの構成例を示す。
【0105】
エンデュランスデコーダは、セレクタ23Cおよび反転演算部23Dを含む。セレクタ23Cおよび反転演算部23Dは、通常は、NANDフラッシュメモリ5から読み出されたデータおよびECCを反転せず、NANDフラッシュメモリ5から読み出されたデータおよびECCをECCデコーダ15Bに送出する。もしECCデコーダ15BのECCデコード処理で復号失敗が起きた場合には、セレクタ23Cおよび反転演算部23Dは、NANDフラッシュメモリ5から読み出されたデータおよびNANDフラッシュメモリ5から読み出されたECCの各々に対するビット反転動作を実行し、反転データおよび反転ECCをECCデコーダ15Bに送出する。
【0106】
データ読み出し動作においては、まず、読み出し対象のページからデータとECCとが読み出される。読み出されたデータおよび読み出されたECCは、セレクタ23Cの第1入力に供給される。また、読み出されたデータおよび読み出されたECCは、反転演算部23Dにも供給される。反転演算部23Dは、NANDフラッシュメモリ5から読み出されたデータおよびNANDフラッシュメモリ5から読み出されたECCの各々に対するビット反転動作を実行し、読み出されたデータの各ビットが反転された反転データ、および読み出されたECCの各ビットが反転された反転ECCを生成する。反転データおよび反転ECCは、セレクタ23Cの第2入力に供給される。
【0107】
通常は、セレクタ23Cは、第1入力を選択する。このため、読み出されたデータおよびECCがECCデコーダ15Bに送出される。ECCデコーダ15Bは、データおよびECCを使用して、このデータの誤り訂正のための誤り訂正復号処理(ECCデコード処理)を実行する。
【0108】
もし、読み出し対象のページに反転データおよび反転ECCが格納されているにもかかわらず、読み出されたデータおよびECCを使用したECCデコード処理が実行されたならば、このECCのエラー訂正能力を超える数のエラーの存在に起因してECCデコード処理で復号失敗が起きる。ECCデコーダ15Bは、復号失敗をセレクタ23Cに通知する。この通知を受信した場合、セレクタ23Cは、第2入力を選択する。この結果、反転データおよび反転ECCがECCデコーダ15Bに送出される。ECCデコーダ15Bは、反転データおよび反転ECCを使用して、上述のECCデコード処理を再実行する。
【0109】
なお、ライトデータのみを符号化し、符号化されたライトデータをオリジナルのライトデータのためのECCと一緒に書き込むケースの場合には、反転演算部23Dは、NANDフラッシュメモリ5から読み出されたデータのみを反転してもよい。
【0110】
図12は、MLCフラッシュメモリにおいて、エンデュランスコードエンコーディングの適用前における閾値電圧分布“Er”および閾値電圧分布“C”それぞれの出現確率と、エンデュランスコードエンコーディングの適用後における閾値電圧分布“Er”および閾値電圧分布“C”それぞれの出現確率とを示す。
【0111】
ここでは、ライトデータ内に含まれる“1”または“0”の一方の割合が高い場合を想定する。
【0112】
例えば、“1”のビットの数と“0”のビットと数との割合が6:4で偏っている場合においては(“1”の数:“0”の数 = 6:4)、エンデュランスコードエンコーディングの適用前(改善前)における閾値電圧分布“Er”および“C”の出現確率は、図12の右部に示すように、“0.36”、“0.24”である。一方、エンデュランスコードエンコーディングの適用後(改善後)においては、閾値電圧分布“Er”および“C”の出現確率は、図12の左部に示すように、“0.24”、“0.16”に低下される。
【0113】
図13は、TLCフラッシュメモリにおいて、エンデュランスコードエンコーディングの適用前における閾値電圧分布“Er”および“G”それぞれの出現確率と、エンデュランスコードエンコーディングの適用後における閾値電圧分布“Er”および“G”それぞれの出現確率とを示す。
【0114】
ここでは、ライトデータ内に含まれる“1”または“0”の一方の割合が高い場合を想定する。
【0115】
例えば、“1”のビットの数と“0”のビットと数との割合が6:4で偏っている場合においては(“1”の数:“0”の数 = 6:4)、エンデュランスコードエンコーディングの適用前(改善前)における閾値電圧分布“Er”および“G”の出現確率は、図13の上部に示すように、“0.216”、“0.144”である。
【0116】
エンコード方法#1の適用後(改善後)においては、閾値電圧分布“Er”および“G”の出現確率は、図13の左下部に示すように、“0.096”、“0.064”に低下される。
【0117】
エンコード方法#2の適用後(改善後)においては、閾値電圧分布“Er”および“G”の出現確率は、図13の右下部に示すように、“0.144”、“0.096”に低下される。
【0118】
図14は、エンデュランスコードエンコーダの別の構成例を示す。
【0119】
図14のエンデュランスコードエンコーダにおいては、データ圧縮処理が組み合わせられている。
【0120】
この圧縮処理は、ライトデータにおける“1”/“0”の偏りを増加させるために実行される。これにより、符号化データに含まれる“1”のビットの数の割合がより高い符号化データ、または符号化データに含まれる“0”のビットの数の割合がより高い符号化データを得ることができる。
【0121】
図14のエンデュランスコードエンコーダは、ポピュレーション演算部23Aと反転/非反転演算部23Bとに加え、ライトデータを圧縮するように構成された圧縮部71をさらに含む。このエンデュランスコードエンコーダは、パディング部72、回転部73、選択部74をさらに含んでもよい。
【0122】
1ページ分のサイズを有するライトデータ(ページデータ)60は、圧縮部71に送出される。圧縮部71は、ライトデータ60を圧縮する。この場合、圧縮部71は、ライトデータ60を可逆圧縮してもよい。通常、ライトデータ60を圧縮することによって得られる圧縮データ61(圧縮されたライトデータ)のサイズは、圧縮前のライトデータ(ページデータ)のサイズ(1ページのサイズ)よりも小さくなる。圧縮データ61は、パディング部72に送出される。
【0123】
パディング部72は、ライトデータを圧縮することによって得られる、書き込むべきページデータ内の空き領域を、全て“1”のビット列または全て“0”のビット列を含むパディングデータでパディングする処理を実行する。空き領域のサイズは、1ページのサイズから圧縮データ61のサイズを引いた残りのサイズに相当する。つまり、パディングデータ(全て“1”のビット列または全て“0”のビット列)が圧縮データ61に追加され、圧縮データ61とパディングデータとを含むデータ系列が生成される。このデータ系列は、1ページのサイズを有しており、書き込むべきページデータとして扱われる。
【0124】
パディングデータは、圧縮データ61に後続する位置に追加されてもよいし、複数のパディングデータ部に分割され且つ複数のパディング位置に分散されてもよい。パディングデータのビット列が追加(挿入)されるべきページデータ内の位置は、数学的規則(計算)に基づいて決定することができる。図14においては、パディングデータが3つのパディングデータ部に分割され、且つこれら3つのパディングデータ部が3つのパディング位置に分散された場合が例示されている。
【0125】
パディング処理においては、パディング部72は、圧縮データ61に含まれる“1”のビットの数(または“0”のビットの数)をカウントして、圧縮データ61に“0”のビットまたは“1”のビットのどちらが多く含まれるかを判定してもよい。
【0126】
圧縮データ61に含まれる“1”のビットの数が、圧縮データ61に含まれる“0”のビットの数よりも多い場合には、パディング部72は、全て“1”のビット列を使用してパディング処理を実行する。これにより、書き込むべきページデータ内の“1”/“0”の偏りを大きくすることができる。
【0127】
一方、圧縮データ61に含まれる“0”のビットの数が、圧縮データ61に含まれる“1”のビットの数よりも多い場合には、パディング部72は、全て“0”のビット列を使用してパディング処理を実行する。これにより、書き込むべきページデータ内の“1”/“0”の偏りを大きくすることができる。
【0128】
なお、圧縮データ61に含まれる“0”のビットの数と“1”のビットの数とがほぼ等しい場合には、パディング処理は、全て“1”のビット列または全て“0”のビット列のどちらを使用して実行されてもよい。
【0129】
また、圧縮データ61の“0”/“1”の偏りの状況とは無関係に、常に、全て“1”のビット列(または全て“0”のビット列)がパディングデータとして使用されてもよい。
【0130】
回転部73は、予め決められた複数のパディング用の位置の間で、パディングデータの位置をローテーションさせる。これは、圧縮データ61に起因するメモリセルの摩耗の量とパディングデータに起因するメモリセルの摩耗の量とが互い異なるからである。複数のパディング用の位置を使用してパディングデータ位置をローテーションさせることにより、摩耗を全てのメモリセル位置に均等に分散させることが可能となる。
【0131】
例えば、予め決められた3つのパディング用の位置を使用する場合においては、書き込み先ブロックへの一回目の書き込み動作においては、どのページにデータが書き込まれる場合であっても、パディングデータは、最初のパディング用の位置に設定される。この書き込み先ブロックの消去動作が実行された後にこの書き込み先ブロックへの二回目の書き込み動作が行われる場合には、どのページにデータが書き込まれる場合であっても、パディングデータは、二番目のパディング用の位置に設定される。そして、この書き込み先ブロックの消去動作が実行された後にこの書き込み先ブロックへの三回目の書き込みが行われる場合には、どのページにデータが書き込まれる場合であっても、パディングデータは、三番目のパディング用の位置に設定される。
【0132】
パディングデータをページ内の複数のパディング位置に分散させ、且つパディングデータの位置を複数のパディング用の位置の間でローテーションさせる場合においては、パディングデータは、予め決められた複数のパディング位置セットの間で、ローテーションされる。複数のパディング位置セットの各々は、複数のパディング位置を含んでいる。
【0133】
選択部74は、圧縮データ61とパディングデータとを含むデータ系列、または圧縮前のライトデータ60のいずれかを、書き込むべきページデータとして選択する。
【0134】
もし圧縮前のライトデータ60の“0”/“1”の偏りが、パディングデータが追加された圧縮データ61の“0”/“1”の偏りよりも大きいならば、選択部74は、圧縮前のライトデータ60を書き込むべきページデータとして選択してもよい。
【0135】
より詳しくは、選択部74は、ライトデータ60の“0”または“1”の偏りと、パディングデータが追加された圧縮データ61の0”または“1”の偏りを算出する。そして、選択部74は、ライトデータ60、およびパディングデータが追加された圧縮データ61から、“0”または“1”の偏りが大きい方のデータを選択する。もしライトデータ60よりも、パディングデータが追加された圧縮データ61の方が“0”または“1”の高い偏りを有するならば、パディングデータが追加された圧縮データ61が、書き込むべきページデータとして選択される。一方、もしパディングデータが追加された圧縮データ61よりも、ライトデータ60の方が“0”または“1”の高い偏りを有するならば、ライトデータ60が、書き込むべきページデータとして選択される。
【0136】
選択データは、書き込むべきページデータとして扱われる。
【0137】
この場合、選択データが、ポピュレーション演算部23Aおよび反転/非反転演算部23Bの各々に送出される。そして、選択データに“0”のビットまたは“1”のビットのどちらが多く含まれるかが判定され、この判定結果と、選択データが書き込まれるべき対象のページ場所とに基づいて、選択データの全ビットが反転または非反転され、これによって選択データに対応する符号化データが生成される。この符号化データは、ECCエンコーダ15Aによって生成されるオリジナルの選択データに対応するECCと一緒に、NANDフラッシュメモリ5内の対象のページ場所に書き込まれてもよい。
【0138】
あるいは、ECCエンコーダ15Aは、ポピュレーション演算部23Aおよび反転/非反転演算部23Bの前段に配置されていてもよい。この場合、まず、選択データのためのECCがECCエンコーダ15Aによって生成される。この選択データとこのECCとが、ポピュレーション演算部23Aおよび反転/非反転演算部23Bの各々に送出される。そして、選択データとECCとを含むデータ系列に“0”のビットまたは“1”のビットのどちらが多く含まれるかが判定される。この判定結果と、選択データが書き込まれるべき対象のページ場所とに基づいて、選択データとECCとを含むデータ系列の全ビットが反転または非反転され、これによって符号化データ(選択データとECCとの組、または反転選択データと反転ECCとの組)が生成される。そして、この符号化データは、NANDフラッシュメモリ5内の対象のページ場所に書き込まれる。
【0139】
図15は、パディングおよび回転(ローテーション)の動作を示す。
【0140】
まず、ライトデータが圧縮され、圧縮データが生成される。そして、この圧縮データの空き領域(書き込むべきページデータの空き領域)を、全て“1”のビット列または全て“0”のビット列を含むパディングデータでパディングする処理が実行される。圧縮データのサイズはオリジナルのライトデータによって異なる場合がある。このため、下位ページデータに対応する圧縮データのサイズは、上位ページデータに対応する圧縮データのサイズと異なる場合がある。図15では、下位ページデータに対応する圧縮データのサイズよりも、上位ページデータに対応する圧縮データのサイズが大きい場合が想定されている。この場合、上位ページデータに対応するパディングデータのサイズは、下位ページデータに対応するパディングデータのサイズよりも小さくなる。
【0141】
この場合、これら下位ページデータおよび上位ページデータの双方が書き込まれる物理ページは、メモリセルの摩耗の量が互いに異なる3つのエリア(エリア#1、エリア#2、エリア#3)に論理的に分割される。エリア#1においては、各メモリセルに格納される2ビット符号は、下位ページデータ内の圧縮データのある1ビットと上位ページデータ内の圧縮データ内のある1ビットとを含む。エリア#2においては、各メモリセルに格納される2ビット符号は、下位ページデータ内のパディングデータのある1ビットと上位ページデータ内の圧縮データ内のある1ビットとを含む。エリア#3においては、各メモリセルに格納される2ビット符号は、下位ページデータ内のパディングデータのある1ビットと上位ページデータ内のパディングデータ内のある1ビットとを含む。パディングデータは全て“1”のビット列または全て“0”のビット列であるので、下位ページデータ/上位ページデータ内のパディングデータの反転/非反転動作により、エリア#3内の各メモリセルを摩耗の少ないデータ状態にプログラムすることができ、これによってエリア#3内の各メモリセルの摩耗を最も小さくすることができる。つまり、エリア#3は、摩耗の少ないデータ状態の出現確率が最も高いエリアである。一方、通常、圧縮データは“1”のビットと“0”のビットとが混在されたビットパターンであるので、エリア#1内の各メモリセルの摩耗は、エリア#3内の各メモリセルおよびエリア#2内の各メモリセルの摩耗よりも大きくなる可能性がある。
【0142】
本実施形態では、パディングデータの位置は、予め決められた複数のパディング用の位置の間でローテーションされる。例えば、物理ページのサイズが8KBである場合、パディングデータが付加されたライトデータの開始位置を、ページ内の位置(例えば、0KB目、2KB目、4KB目、6KB目)の間でローテーションしてもよい。このように、複数のパディング用の位置を使用してパディングデータの位置をローテーションすることにより、エリア#3の位置を物理ページ全体に分散させることができ、これによって摩耗の量を全てのメモリセル位置に均等に分散させることが可能となる。
【0143】
図16は、パディングおよび回転(ローテーション)の別の動作を示す。
【0144】
まず、ライトデータが圧縮され、圧縮データが生成される。そして、この圧縮データの空き領域(書き込むべきページデータの空き領域)を、全て“1”のビット列または全て“0”のビット列を含むパディングデータでパディングする処理が実行される。パディングデータは複数のパディングデータ部に分割され、これらパディングデータ部が複数の位置に分散される。
【0145】
下位ページデータおよび上位ページデータのどちらにおいても、これら複数のパディングデータ部それぞれのパディング位置は、予め決められた複数のパディング用の位置セットの間でローテーションされる。したがって、エリア#3の位置を物理ページ内の全てのメモリセル位置に均等に分散させることができる。
【0146】
図17は、図14のエンデュランスコードエンコーダに適用される符号化動作を示す。
【0147】
圧縮データとパディングデータとを含むデータ系列に含まれる“1”のビットの数がカウントされ、これによってこのデータ系列に “0”のビットまたは“1”のビットのどちらが多く含まれるかが判定される。そして、この判定結果と、このデータ系列が書き込まれるべき対象のページ場所とに基づいて、このデータ系列の全ビットが反転または非反転され、これによって符号化データが生成される。この符号化データは、ECCエンコーダ15Aによって生成されるオリジナルのデータ系列(圧縮データ+パディングデータ)に対応するECCと一緒に、NANDフラッシュメモリ5内の対象のページ場所に書き込まれる。
【0148】
図18は、図14のエンデュランスコードエンコーダに適用される別の符号化動作を示す。
【0149】
まず、圧縮データとパディングデータとを含むデータ系列のためのECCが生成される。そして、圧縮データとパディングデータとECCとを含むデータ系列に含まれる“1”のビットの数がカウントされ、これによってこのデータ系列(圧縮データ+パディングデータ+ECC)に“0”のビットまたは“1”のビットのどちらが多く含まれるかが判定される。そして、この判定結果と、このデータ系列(圧縮データ+パディングデータ+ECC)が書き込まれるべき対象のページ場所とに基づいて、このデータ系列(圧縮データ+パディングデータ+ECC)の全ビットが反転または非反転され、これによって符号化データが生成される。この符号化データは、NANDフラッシュメモリ5内の対象のページ場所に書き込まれる。
【0150】
図19は、図14のエンデュランスコードエンコーダによって生成される符号化データのフォーマットの例を示す
この符号化データは、データ(圧縮データ+パディングデータ)およびECCに加え、さらに、回転情報(ローテーション情報)および圧縮フラグを符号化の内容を示す付帯情報として含んでいても良い。回転情報は、使用されたパディング用位置を示す。圧縮フラグは、データが圧縮されているか否かを示す。
【0151】
なお、回転情報(ローテーション情報)および圧縮フラグは、データ(圧縮データ+パディングデータ)およびECCが書き込まれる物理ページとは異なる、NANDフラッシュメモリ5内の記憶領域(管理情報用の予約領域)に管理情報として保存されてもよい。
【0152】
また、図20に示すように、符号化データは、回転情報(ローテーション情報)および圧縮フラグに加え、さらに、反転フラグを符号化の内容を示す付帯情報として含んでいても良い。反転フラグは、データ(圧縮データ+パディングデータ)が反転されているか否かを示す。回転情報(ローテーション情報)、圧縮フラグおよび反転フラグは、データ(圧縮データ+パディングデータ)およびECCが書き込まれる物理ページとは異なる、NANDフラッシュメモリ5内の領域に管理情報として保存されてもよい。
【0153】
符号化データが反転フラグを含む場合には、ECCは、図21に示すように、反転/非反転されたデータ(圧縮データ+パディングデータ)から生成されてもよい。
【0154】
この場合、まず、圧縮データとパディングデータとを含むデータ系列に含まれる“1”のビットの数がカウントされ、これによってこのデータ系列に“0”のビットまたは“1”のビットのどちらが多く含まれるかが判定される。そして、この判定結果と、このデータ系列が書き込まれるべき対象のページ場所とに基づいて、このデータ系列の全ビットが反転または非反転され、これによって符号化データが生成される。そしてこの符号化データのためのECCが生成され、符号化データが、この符号化データから生成されたECCと一緒に、NANDフラッシュメモリ5内の対象のページ場所に書き込まれる。
【0155】
図22のフローチャートは、NANDフラッシュメモリ5にデータを書き込むためのライト動作の手順を示す。ここでは、NANDフラッシュメモリ5がMLCフラッシュメモリである場合を想定する。
【0156】
コントローラ4は、書き込むべきライトデータをライトバッファ(WB)31から読み出し、このライトデータのためのECCを生成する(ステップS11)。コントローラ4は、ライトデータとECCとを含むデータ系列に含まれる“1”のポピュレーション(“1”のビットの数)をカウントする演算(ポピュレーション演算)を行う(ステップS12)。
【0157】
そして、コントローラ4は、このライトデータが書き込まれるべき対象ページ場所が下位ページまたは上位ページのいずれであるかを判定する(ステップS13)。この判定は、対象ページ場所のページアドレスに基づいて行われてもよい。
【0158】
対象ページ場所が下位ページであるならば、コントローラ4は、このデータ系列(ライトデータ+ECC)内の“1”の数を増やすエンコーディングを使用して、このデータ系列(ライトデータ+ECC)をエンコードする。この場合、もしこのデータ系列(ライトデータ+ECC)内の“0”のビットの数がこのデータ系列(ライトデータ+ECC)内の“1”のビットの数よりも多いならば(ステップS14のYES)、コントローラ4は、このデータ系列(ライトデータ+ECC)の全ビットを反転することによってこのデータ系列(ライトデータ+ECC)の反転データ(ライトデータの各ビットが反転された反転ライトデータとECCの各ビットが反転された反転ECCとの組)を符号化データとして出力する(ステップS15)。一方、もしこのデータ系列(ライトデータ+ECC)内の“1”のビットの数がこのデータ系列(ライトデータ+ECC)内の“0”のビットの数よりも多いならば(ステップS14のNO)、コントローラ4は、このデータ系列(ライトデータ+ECC)を反転せずに、このデータ系列(ライトデータ+ECC)自体を符号化データとして出力する。
【0159】
そして、コントローラ4は、符号化データ(反転ライトデータと反転ECCとの組、またはライトデータとECCとの組)をNANDフラッシュメモリ5内の対象ページ場所に書き込む(ステップS16)。
【0160】
対象ページ場所が上位ページであるならば、コントローラ4は、このデータ系列(ライトデータ+ECC)内の“0”の数を増やすエンコーディングを使用して、このデータ系列(ライトデータ+ECC)をエンコードする。この場合、もしこのデータ系列(ライトデータ+ECC)内の“1”のビットの数がこのデータ系列(ライトデータ+ECC)内の“0”のビットの数よりも多いならば(ステップS17のYES)、コントローラ4は、このデータ系列(ライトデータ+ECC)の全ビットを反転することによってこのデータ系列(ライトデータ+ECC)の反転データ(ライトデータの各ビットが反転された反転ライトデータとECCの各ビットが反転された反転ECCとの組)を符号化データとして出力する(ステップS18)。一方、もしこのデータ系列(ライトデータ+ECC)内の“0”のビットの数がこのデータ系列(ライトデータ+ECC)内の“1”のビットの数よりも多いならば(ステップS17のNO)、コントローラ4は、このデータ系列(ライトデータ+ECC)を反転せずに、このデータ系列(ライトデータ+ECC)自体を符号化データとして出力する。
【0161】
そして、コントローラ4は、符号化データ(反転ライトデータと反転ECCとの組、またはライトデータとECCとの組)をNANDフラッシュメモリ5内の対象ページ場所に書き込む(ステップS19)。
【0162】
図23のフローチャートは、図22のライト動作によって書き込まれたデータのためのリード動作の手順を示す。
【0163】
コントローラ4がホスト2からリードコマンド(リード要求とも云う)を受信した場合、コントローラ4は、リードコマンド内のLBAに対応する物理アドレスによって指定されるNANDフラッシュメモリ5内のページからデータ(ここでは、データおよびECC)を読み出す(ステップS21)。コントローラ4は、読み出されたデータと読み出されたECCとを使用して、読み出されたデータの誤り訂正のためのECC復号処理(ECCデコード処理)を実行する(ステップS22)。もしライトデータの反転データおよびECCの反転ECCがこのページに書き込まれていたならば、ECCデコード処理の復号失敗が起きる。
【0164】
ECCデコード処理の復号失敗が起きなかったならば(ステップS23のNO)、コントローラ4は、ECCデコード処理によって復号されたデータをホスト2に返す(ステップS24)。
【0165】
一方、ECCデコード処理の復号失敗が起きたならば(ステップS23のYES)、コントローラ4は、読み出されたデータおよび読み出されたECCを含むデータ系列の全ビットを反転して、読み出されたデータの各ビットが反転された反転データと、読み出されたECCの各ビットが反転された反転ECCとを生成する(ステップS25)。コントローラ4は、反転データと反転ECCとを使用してECCデコード処理を再実行し(ステップS26)、ECCデコード処理によって復号されたデータをホスト2に返す(ステップS27)。
【0166】
図24のフローチャートは、NANDフラッシュメモリ5にデータを書き込むためのライト動作の別の手順を示す。ここでは、NANDフラッシュメモリ5がMLCフラッシュメモリである場合を想定する。
【0167】
コントローラ4は、書き込むべきライトデータをライトバッファ(WB)31から読み出し、このライトデータのためのECCを生成する(ステップS31)。コントローラ4は、ライトデータに含まれる“1”のポピュレーション(“1”のビットの数)をカウントする演算(ポピュレーション演算)を行う(ステップS32)。
【0168】
そして、コントローラ4は、このライトデータが書き込まれるべき対象ページ場所が下位ページまたは上位ページのいずれであるかを判定する(ステップS33)。
【0169】
対象ページ場所が下位ページであるならば、コントローラ4は、ライトデータ内の“1”の数を増やすエンコーディングを使用して、ライトデータをエンコードする。この場合、もしライトデータ内の“0”のビットの数がこのライトデータ内の“1”のビットの数よりも多いならば(ステップS34のYES)、コントローラ4は、ライトデータの全ビットを反転することによって、ライトデータの各ビットが反転された反転ライトデータを符号化データとして出力する(ステップS35)。一方、もしこのライトデータ内の“1”のビットの数がこのライトデータ内の“0”のビットの数よりも多いならば(ステップS34のNO)、コントローラ4は、このライトデータを反転せずに、このライトデータ自体を符号化データとして出力する。
【0170】
そして、コントローラ4は、ステップS31で生成されたECCが付加された符号化データ、つまり反転ライトデータとステップS31で生成されたECCとの組、またはライトデータとステップS31で生成されたECCとの組のいずれかを、NANDフラッシュメモリ5内の対象ページ場所に書き込む(ステップS36)。
【0171】
対象ページ場所が上位ページであるならば、コントローラ4は、ライトデータ内の“0”の数を増やすエンコーディングを使用して、ライトデータをエンコードする。この場合、もしライトデータ内の“1”のビットの数がこのライトデータ内の“0”のビットの数よりも多いならば(ステップS37のYES)、コントローラ4は、ライトデータの全ビットを反転することによって、ライトデータの各ビットが反転された反転ライトデータを符号化データとして出力する(ステップS38)。一方、もしこのライトデータ内の“0”のビットの数がこのライトデータ内の“1”のビットの数よりも多いならば(ステップS37のNO)、コントローラ4は、このライトデータを反転せずに、このライトデータ自体を符号化データとして出力する。
【0172】
そして、コントローラ4は、ステップS31で生成されたECCが付加された符号化データ、つまり反転ライトデータとステップS31で生成されたECCとの組、またはライトデータとステップS31で生成されたECCとの組のいずれかを、NANDフラッシュメモリ5内の対象ページ場所に書き込む(ステップS39)。
【0173】
図25のフローチャートは、図24のライト動作によって書き込まれたデータのためのリード動作の手順を示す。
【0174】
コントローラ4がホスト2からリードコマンド(リード要求とも云う)を受信した場合、コントローラ4は、リードコマンド内のLBAに対応する物理アドレスによって指定されるNANDフラッシュメモリ5内のページからデータ(ここでは、データおよびECC)を読み出す(ステップS41)。コントローラ4は、読み出されたデータと読み出されたECCとを使用して、読み出されたデータの誤り訂正のためのECC復号処理(ECCデコード処理)を実行する(ステップS42)。もしライトデータの反転データがこのページに書き込まれていたならば、ECCデコード処理の復号失敗が起きる。
【0175】
ECCデコード処理の復号失敗が起きなかったならば(ステップS43のNO)、コントローラ4は、ECCデコード処理によって復号されたデータをホスト2に返す(ステップS44)。
【0176】
一方、ECCデコード処理の復号失敗が起きたならば(ステップS43のYES)、コントローラ4は、読み出されたデータの全ビットを反転して、読み出されたデータの各ビットが反転された反転データを生成する(ステップS45)。コントローラ4は、反転データと読み出されたECCとを使用してECCデコード処理を再実行し(ステップS46)、ECCデコード処理によって復号されたデータをホスト2に返す(ステップS47)。
【0177】
図26のフローチャートは、図24のライト動作と圧縮処理とが組み合わされたライト動作の手順を示す。
【0178】
ここでは、NANDフラッシュメモリ5(MLCフラッシュメモリ)にデータを書き込む場合を想定する。
【0179】
圧縮処理が組み合わされたライト動作においては、図24のステップS31〜S39の処理の前にステップS51〜S57の処理が実行されてもよい。
【0180】
すなわち、コントローラ4は、まず、ライトデータを圧縮する(ステップS51)。コントローラ4は、ステップS51で生成された圧縮データに“1”または“0”のどちらのビットが多く含まれるかを判定する(ステップS52)。
【0181】
圧縮データに含まれる“1”のビットの数の割合が高いならば、コントローラ4は、“1”のビット列を圧縮データに追加することによって、ライトデータの空き領域を“1”のビット列でパディングするための処理を行う(ステップS53)。
【0182】
圧縮データに含まれる“0”のビットの数の割合が高いならば、コントローラ4は、“0”のビット列を圧縮データに追加することによって、ライトデータの空き領域を“0”のビット列でパディングするための処理を行う(ステップS54)。
【0183】
圧縮データに含まれる“1”のビットの数の割合と“0”のビットの数の割合が同じならば、コントローラ4は、“0”のビット列または“1”のビット列のいずれかの所定ビット列を圧縮データに追加することによって、ライトデータの空き領域をこの所定ビット列“0”でパディングするための処理を行う(ステップS55)。なお、圧縮データに含まれる“1”(または“0”)の数とは無関係に、“0”のビット列または“1”のビット列のいずれかの所定ビット列でライトデータの空き領域をパディングする処理が実行されても良い。
【0184】
パディングのための処理では、コントローラ4は、圧縮データを複数のデータ部に分け、パディング用のビット列を、これら複数のデータ部に後続する複数の位置(パディング位置)に分散させてもよい。さらに、コントローラ4は、これらパディング位置を、複数のパディング位置の間で回転(ローテート)させる処理を行ってもよい(ステップS56)。
【0185】
コントローラ4は、圧縮前のライトデータ、およびパディング用のビット列が追加された圧縮データの内、“0”または“1”の偏りが大きい方のデータを処理対象データとして選択する(ステップS57)。
【0186】
続くステップS31〜S39では、コントローラ4は、選択されたデータを、ライトデータとして扱うことによって、選択されたデータの反転/非反転データを符号化データとして出力し、この符号化データを選択されたデータのためのECCと一緒に、対象のページ場所に書き込む。
【0187】
図27のフローチャートは、図22のライト動作と圧縮処理とが組み合わされたライト動作の手順を示す。
【0188】
ここでは、NANDフラッシュメモリ5(MLCフラッシュメモリ)にデータを書き込む場合を想定する。
【0189】
圧縮処理が組み合わされたライト動作においては、図22のステップS11〜S19の処理の前に、図26で説明したステップS51〜S57の処理が実行されてもよい。
【0190】
図28のフローチャートは、図26のライト動作によって書き込まれたデータのためのリード動作の手順を示す。
【0191】
コントローラ4がホスト2からリードコマンド(リード要求とも云う)を受信した場合、コントローラ4は、リードコマンド内のLBAに対応する物理アドレスによって指定されるNANDフラッシュメモリ5内のページからデータ(ここでは、データおよびECC)を読み出す(ステップS61)。コントローラ4は、読み出されたデータと読み出されたECCとを使用して、読み出されたデータの誤り訂正のためのECC復号処理(ECCデコード処理)を実行する(ステップS62)。もし圧縮データとパディングデータとを含むデータ系列の反転データがこのページに書き込まれていたならば、ECCデコード処理の復号失敗が起きる。
【0192】
ECCデコード処理の復号失敗が起きなかったならば(ステップS63のNO)、コントローラ4は、ECCデコード処理によって復号されたデータからパディングデータを除去し(ステップS64)、パディングデータが除去された残りのデータを伸張し(ステップS65)、伸張されたデータをホスト2に返す(ステップS66)。
【0193】
一方、ECCデコード処理の復号失敗が起きたならば(ステップS63のYES)、コントローラ4は、読み出されたデータ(圧縮データとパディングデータ)の全ビットを反転して、読み出されたデータの各ビットが反転された反転データを生成する(ステップS67)。コントローラ4は、反転データと読み出されたECCとを使用してECCデコード処理を再実行する(ステップS68)。そして、コントローラ4は、ECCデコード処理によって復号されたデータからパディングデータを除去し(ステップS69)、パディングデータが除去された残りのデータを伸張し(ステップS70)、伸張されたデータをホスト2に返す(ステップS71)。
【0194】
図29のフローチャートは、図27のライト動作によって書き込まれたデータのためのリード動作の手順を示す。
【0195】
コントローラ4がホスト2からリードコマンド(リード要求とも云う)を受信した場合、コントローラ4は、リードコマンド内のLBAに対応する物理アドレスによって指定されるNANDフラッシュメモリ5内のページからデータ(ここでは、データおよびECC)を読み出す(ステップS81)。コントローラ4は、読み出されたデータと読み出されたECCとを使用して、読み出されたデータの誤り訂正のためのECC復号処理(ECCデコード処理)を実行する(ステップS82)。もし圧縮データとパディングデータとを含むデータ系列の反転データ、および反転ECCが、このページに書き込まれていたならば、ECCデコード処理の復号失敗が起きる。
【0196】
ECCデコード処理の復号失敗が起きなかったならば(ステップS83のNO)、コントローラ4は、ECCデコード処理によって復号されたデータからパディングデータを除去し(ステップS84)、パディングデータが除去された残りのデータを伸張し(ステップS85)、伸張されたデータをホスト2に返す(ステップS86)。
【0197】
一方、ECCデコード処理の復号失敗が起きたならば(ステップS83のYES)、コントローラ4は、読み出されたデータ(圧縮データとパディングデータ)と読み出されたECCとを含むデータ系列の全ビットを反転して、読み出されたデータの各ビットが反転された反転データと、読み出されたECCの各ビットが反転された反転ECCとを生成する(ステップS87)。コントローラ4は、反転データと反転ECCとを使用してECCデコード処理を再実行する(ステップS88)。そして、コントローラ4は、ECCデコード処理によって復号されたデータからパディングデータを除去し(ステップS89)、パディングデータが除去された残りのデータを伸張し(ステップS90)、伸張されたデータをホスト2に返す(ステップS91)。
【0198】
図30は、ホスト2として機能する情報処理装置のハードウェア構成例を示す。
【0199】
この情報処理装置は、サーバコンピュータ、またはパーソナルコンピュータとして実現される。この情報処理装置は、プロセッサ(CPU)101、メインメモリ102、BIOS−ROM103、ネットワークコントローラ105、周辺インタフェースコントローラ106、コントローラ107、およびエンベデッドコントローラ(EC)108等を含む。
【0200】
プロセッサ101は、この情報処理装置の各コンポーネントの動作を制御するように構成されたCPUである。このプロセッサ101は、複数のSSD3のいずれか1つからメインメモリ102にロードされる様々なプログラムを実行する。メインメモリ102は、DRAMのようなランダムアクセスメモリから構成される。プロセッサ101によって実行されるプログラムは、上述のアプリケーションソフトウェアレイヤ41、OS42およびファイルシステム43を含む。
【0201】
また、プロセッサ101は、不揮発性メモリであるBIOS−ROM103に格納された基本入出力システム(BIOS)も実行する。BIOSはハードウェア制御のためのシステムプログラムである。
【0202】
ネットワークコントローラ105は、有線LANコントローラ、無線LANコントローラのような通信デバイスである。周辺インタフェースコントローラ106は、USBデバイスのような周辺デバイスとの通信を実行するように構成されている。
【0203】
コントローラ107は、複数のコネクタ107Aにそれぞれ接続されるデバイスとの通信を実行するように構成されている。本実施形態では、複数のSSD3が複数のコネクタ107Aにそれぞれ接続される。コントローラ107は、SAS expander、PCIe Switch、PCIe expander、フラッシュアレイコントローラ、またはRAIDコントローラ等である。
【0204】
EC108は、情報処理装置の電力管理を実行するように構成されたシステムコントローラとして機能する。EC108は、ユーザによる電源スイッチの操作に応じて情報処理装置をパワーオンおよびパワーオフする。EC108はワンチップマイクロコントローラのような処理回路として実現されている。EC108は、キーボード(KB)などの入力デバイスを制御するキーボードコントローラを内蔵していてもよい。
【0205】
図31は、複数のSSD3とホスト2とを含む情報処理装置の構成例を示す。
【0206】
この情報処理装置は、ラックに収容可能な薄い箱形の筐体201を備える。多数のSSD3は筐体201内に配置されても良い。この場合、各SSD3は筐体201の前面201Aに設けられたスロットに取り外し可能に挿入されてもよい。
【0207】
システムボード(マザーボード)202は筐体201内に配置される。システムボード(マザーボード)202上においては、CPU101、メモリ102、ネットワークコントローラ105、コントローラ107を含む様々な電子部品が実装されている。これら電子部品がホスト2として機能する。
【0208】
以上説明したように、本実施形態によれば、ライト動作では、1ページ分のサイズを有する第1ライトデータのための第1誤り訂正符号が生成され、第1ライトデータと第1誤り訂正符号とを含むデータ系列に“0”のビットまたは“1”のビットのどちらが多く含まれるかが判定される。そして、この判定結果と、第1ライトデータが書き込まれるべき対象のページ場所とに基づいて、第1ライトデータと第1誤り訂正符号との組、または第1ライトデータの各ビットが反転された第2ライトデータと第1誤り訂正符号の各ビットが反転された第2誤り訂正符号との組のいずれかが対象のページ場所に書き込まれる。リード動作では、読み出し対象のページ場所からデータおよび誤り訂正符号が読み出され、読み出されたデータと読み出された誤り訂正符号とを使用して、読み出されたデータの誤り訂正のための誤り訂正復号処理が実行される。誤り訂正復号処理で復号失敗が起きた場合、読み出されたデータの各ビットが反転された反転データと読み出された誤り訂正符号の各ビットが反転された反転誤り訂正符号とを使用して誤り訂正復号処理が再実行される。
【0209】
また、第1ライトデータと第1誤り訂正符号とを含むデータ系列を反転/非反転する代わりに、第1ライトデータのみを反転/非反転してもよい。この場合、ライト動作では、第1ライトデータのための第1誤り訂正符号が生成され、第1ライトデータに“0”のビットまたは“1”のビットのどちらが多く含まれるかが判定される。そして、この判定結果と、第1ライトデータが書き込まれるべき対象のページ場所とに基づいて、第1ライトデータと第1誤り訂正符号との組、または第1ライトデータの各ビットが反転された第2ライトデータと第1誤り訂正符号との組のいずれかが対象のページ場所に書き込まれる。リード動作では、読み出し対象のページ場所からデータおよび誤り訂正符号が読み出され、読み出されたデータと読み出された誤り訂正符号とを使用して、読み出されたデータの誤り訂正のための誤り訂正復号処理が実行される。誤り訂正復号処理で復号失敗が起きた場合、読み出されたデータの各ビットが反転された反転データと読み出された誤り訂正符号とを使用して、誤り訂正復号処理が再実行される。
【0210】
このように、誤り訂正復号処理の復号失敗に応答して、データ(またはデータと誤り訂正符号の双方)を反転し、誤り訂正復号処理を再実行することにより、符号化データにライトデータの反転/非反転を示す切り換えフラグのような付帯情報を挿入すること無く、メモリセルの摩耗が少なく且つビットエラーレートを低減可能な符号化データを書き込むことができる。
【0211】
また、データ圧縮とパディングデータローテーションの処理をさらに追加することにより、両端の符号(“Er”に対応する2ビット符号、および“C”に対応する2ビット符号)の出現確率をさらに減らし、中間の符号(“B”に対応する2ビット符号、および“A”に対応する2ビット符号)の出現確率をさらに増やすことができる。また、複数のパディング用の位置を使用してパディングデータ位置がローテーションされるので、摩耗を全てのメモリセル位置に均等に分散させることが可能となる。
【0212】
また、本実施形態の処理は、メモリセル当たりに2ビットのデータを格納可能なMLCフラッシュメモリ、メモリセル当たりに3ビットのデータを格納可能なTLCフラッシュメモリのみならず、メモリセル当たりに4ビット以上のデータを格納可能な他のタイプのフラッシュメモリにも適用可能である。
【0213】
また、エンデュランスコードエンコーダ/デコーダ23用の圧縮処理および伸張処理は、コントローラ4内の専用のハードウェアによって実行してもよい。また、エンデュランスコードエンコーダ/デコーダ23の全ての機能をコントローラ4内の専用のハードウェアによって実現してもよい。
【0214】
また、本実施形態では、不揮発性メモリとしてNANDメモリを例示した。しかし、本実施形態の機能は、例えば、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)、ReRAM(Resistive Random Access Memory)、又は、FeRAM(Ferroelectric Random Access Memory)のような他の様々な不揮発性メモリにも適用できる。
【0215】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0216】
2…ホスト、3…SSD、4…コントローラ、5…NANDメモリ、15…ECCエンコーダ/デコーダ、21…ライト動作制御部、22…リード動作制御部、23…エンデュランスコードエンコーダ/デコーダ。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25
図26
図27
図28
図29
図30
図31