JP2018041403A - メモリシステムおよび制御方法 - Google Patents

メモリシステムおよび制御方法 Download PDF

Info

Publication number
JP2018041403A
JP2018041403A JP2016176835A JP2016176835A JP2018041403A JP 2018041403 A JP2018041403 A JP 2018041403A JP 2016176835 A JP2016176835 A JP 2016176835A JP 2016176835 A JP2016176835 A JP 2016176835A JP 2018041403 A JP2018041403 A JP 2018041403A
Authority
JP
Japan
Prior art keywords
data
page
error correction
write data
write
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2016176835A
Other languages
English (en)
Other versions
JP6606039B2 (ja
Inventor
菅野 伸一
Shinichi Sugano
伸一 菅野
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kioxia Corp
Original Assignee
Toshiba Memory Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Memory Corp filed Critical Toshiba Memory Corp
Priority to JP2016176835A priority Critical patent/JP6606039B2/ja
Priority to US15/441,031 priority patent/US10529417B2/en
Publication of JP2018041403A publication Critical patent/JP2018041403A/ja
Application granted granted Critical
Publication of JP6606039B2 publication Critical patent/JP6606039B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/56Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
    • G11C11/5621Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge storage in a floating gate
    • G11C11/5628Programming or writing circuits; Data input circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/10Programming or data input circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/34Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
    • G11C16/349Arrangements for evaluating degradation, retention or wearout, e.g. by counting erase cycles
    • G11C16/3495Circuits or methods to detect or delay wearout of nonvolatile EPROM or EEPROM memory devices, e.g. by counting numbers of erase or reprogram cycles, by using multiple memory areas serially or cyclically
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1006Data managing, e.g. manipulating data before writing or reading out, data bus switches or control circuits therefor
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/56Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
    • G11C11/5621Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge storage in a floating gate
    • G11C11/5642Sensing or reading circuits; Data output circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/04Erasable programmable read-only memories electrically programmable using variable threshold transistors, e.g. FAMOS
    • G11C16/0483Erasable programmable read-only memories electrically programmable using variable threshold transistors, e.g. FAMOS comprising cells having several storage transistors connected in series
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/11Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
    • H03M13/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
    • H03M13/1515Reed-Solomon codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
    • H03M13/152Bose-Chaudhuri-Hocquenghem [BCH] codes

Abstract

【課題】符号化のための付帯情報を低減することができるメモリシステムを実現する。【解決手段】実施形態によれば、メモリシステムは、第1ライトデータのための第1誤り訂正符号を生成し、前記第1ライトデータと前記第1誤り訂正符号との組、または前記第1ライトデータの各ビットが反転された第2ライトデータと前記第1誤り訂正符号の各ビットが反転された第2誤り訂正符号との組のいずれかを、対象のページ場所に書き込む。前記メモリシステムは、読み出し対象のページ場所から読み出されたデータおよび誤り訂正符号を使用して、誤り訂正復号処理を実行する。誤り訂正復号処理で復号失敗が起きた場合、前記メモリシステムは、前記読み出されたデータの各ビットが反転された反転データと前記読み出された誤り訂正符号の各ビットが反転された反転誤り訂正符号とを使用して前記誤り訂正復号処理を再実行する。【選択図】図6

Description

本発明の実施形態は、不揮発性メモリを制御する技術に関する。
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
このようなメモリシステムの一つとして、NANDフラッシュ技術ベースのソリッドステートドライブ(SSD)が知られている。SSDは、その低電力消費、高性能という特徴により、様々なコンピューティングデバイスのメインストレージとして使用されている。最近では、メモリセルの摩耗を少なくするためのデータパターンを使用して、書き込むべきデータを符号化する符号化技術も開発されている。
特許第4358299号公報
しかし、一般に、このような符号化技術を適用したケースにおいては、符号化されたデータを構成する複数のデータ部それぞれに対してその符号化の内容を示す情報を付帯情報として付加することが必要とされる。この付帯情報の量が増加されるほど、不揮発性メモリの各ページに書き込むことが可能なユーザデータの量が減少される。
本発明が解決しようとする課題は、符号化のための付帯情報を低減することができるメモリシステムおよび制御方法を提供することである。
実施形態によれば、メモリシステムは、不揮発性メモリと、前記不揮発性メモリに電気的に接続され、少なくとも下位ページデータと上位ページデータとを含むデータの複数のページを、前記不揮発性メモリの同一物理ページに割り当てられる少なくとも下位ページと上位ページとを含む複数のページ場所に書き込むコントローラとを具備する。前記コントローラは、1ページ分のサイズを有する第1ライトデータのための第1誤り訂正符号を生成する。前記コントローラは、前記第1ライトデータと前記第1誤り訂正符号とを含むデータ系列に“0”のビットまたは“1”のビットのどちらが多く含まれるかを判定する。前記コントローラは、前記判定の結果と、前記第1ライトデータが書き込まれるべき対象のページ場所とに基づいて、前記第1ライトデータと前記第1誤り訂正符号との組、または前記第1ライトデータの各ビットが反転された第2ライトデータと前記第1誤り訂正符号の各ビットが反転された第2誤り訂正符号との組のいずれかを前記対象のページ場所に書き込む。前記コントローラは、前記不揮発性メモリ内の読み出し対象のページ場所からデータおよび誤り訂正符号を読み出し、前記読み出されたデータと前記読み出された誤り訂正符号とを使用して、前記読み出されたデータの誤り訂正のための誤り訂正復号処理を実行する。前記コントローラは、前記誤り訂正復号処理で復号失敗が起きた場合、前記読み出されたデータの各ビットが反転された反転データと前記読み出された誤り訂正符号の各ビットが反転された反転誤り訂正符号とを使用して前記誤り訂正復号処理を再実行する。
実施形態に係るメモリシステムの構成例を示すブロック図。 同実施形態のメモリシステムに設けられる不揮発性メモリ内のメモリセルアレイの構成例を示す図。 各メモリセルが2ビットデータを格納する、マルチレベルセル(MLC)フラッシュメモリ内のメモリセルアレイの閾値電圧分布を示す図。 各メモリセルが3ビットデータを格納する、トリプルレベルセル(TLC)フラッシュメモリ内のメモリセルアレイの閾値電圧分布を示す図。 MLCフラッシュメモリの4つの閾値電圧分布に対する下位ページビットの“1”/“0”の割り当てと、この4つの閾値電圧分布に対する上位ページビットの“1”/“0”の割り当てと、TLC−フラッシュメモリの8つの閾値電圧分布に対する下位ページビットの“1”/“0”の割り当てと、この8つの閾値電圧分布に対する中位ページビットの“1”/“0”の割り当てと、この8つの閾値電圧分布に対する上位ページビットの“1”/“0”の割り当てとを示す図。 同実施形態のメモリシステムに設けられるエンコーダの構成例を示すブロック図。 MLCフラッシュメモリの下位ページに書き込まれるべきライトデータとこのライトデータのためのECCとを符号化する動作を示す図。 MLCフラッシュメモリの上位ページに書き込まれるべきライトデータとこのライトデータのためのECCとを符号化する動作を示す図。 MLCフラッシュメモリの下位ページに書き込まれるべきライトデータを符号化し、符号化されたライトデータをオリジナルのライトデータのためのECCと一緒に書き込む動作を示す図。 MLCフラッシュメモリの上位ページに書き込まれるべきライトデータを符号化し、符号化されたライトデータをオリジナルのライトデータのためのECCと一緒に書き込む動作を示す図。 同実施形態のメモリシステムに設けられるデコーダの構成例を示すブロック図。 MLCフラッシュメモリにおいて、エンデュランスコードエンコーディングの適用前における閾値電圧分布“Er”および閾値電圧分布“C”それぞれの出現確率と、エンデュランスコード今コーディングの適用後における閾値電圧分布“Er”および閾値電圧分布“C”それぞれの出現確率とを示す図。 TLCフラッシュメモリにおいて、エンデュランスコードエンコーディングの適用前における閾値電圧分布“Er”および閾値電圧分布“G”それぞれの出現確率と、エンデュランスコードエンコーディングの適用後における閾値電圧分布“Er”および閾値電圧分布“G”それぞれの出現確率とを示す図。 同実施形態のメモリシステムに設けられるエンコーダの別の構成例を示すブロック図。 同実施形態のメモリシステムによって実行されるパディングおよび回転の動作を示す図。 同実施形態のメモリシステムによって実行される別のパディングおよび回転の動作を示す図。 図14のエンコーダに適用される符号化動作を示す図。 図14のエンコーダに適用される別の符号化動作を示す図。 図14のエンコーダによって生成される符号化データのフォーマットの例を示す図。 図14のエンコーダによって生成される符号化データのフォーマットの別の例を示す図。 図14のエンコーダに適用されるさらに別の符号化動作を示す図。 同実施形態のメモリシステムによって実行されるライト動作の手順を示すフローチャート。 同実施形態のメモリシステムによって実行されるリード動作の手順を示すフローチャート。 同実施形態のメモリシステムによって実行されるライト動作の別の手順を示すフローチャート。 同実施形態のメモリシステムによって実行されるリード動作の別の手順を示すフローチャート。 同実施形態のメモリシステムによって実行されるライト動作のさらに別の手順を示すフローチャート。 同実施形態のメモリシステムによって実行されるライト動作のさらに別の手順を示すフローチャート。 同実施形態のメモリシステムによって実行されるリード動作のさらに別の手順を示すフローチャート。 同実施形態のメモリシステムによって実行されるライト動作のさらに別の手順を示すフローチャート。 ホストの構成例を示すブロック図。 同実施形態のメモリシステムとホストとを含むコンピュータの構成例を示す図。
以下、図面を参照して、実施形態を説明する。
まず、図1を参照して、一実施形態に係るメモリシステムを含む情報処理システム1の構成を説明する。
このメモリシステムは、不揮発性メモリにデータをライトし、不揮発性メモリからデータをリードするように構成された半導体ストレージデバイスである。このメモリシステムは、例えば、NANDフラッシュ技術ベースのソリッドステートドライブ(SSD)3として実現されている。
情報処理システム1は、ホスト(ホストデバイス)2と、SSD3とを含む。ホスト2は、サーバ、パーソナルコンピュータのような情報処理装置である。
SSD3は、ホスト2として機能する情報処理装置のメインストレージとして使用され得る。SSD3は、この情報処理装置に内蔵されてもよいし、この情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
ホスト2とSSD3とを相互接続するためのインタフェースとしては、SCSI、Serial Attached SCSI(SAS)、ATA、Serial ATA(SATA)、PCI Express(PCIe)、Ethernet(登録商標),Fibre channel等を使用し得る。
SSD3は、コントローラ4および不揮発性メモリ(NANDフラッシュメモリ)5を備える。SSD3は、DRAM6も備えていてもよい。NANDフラッシュメモリ5は、限定されないが、複数のNANDフラッシュメモリチップを含んでいてもよい。NANDフラッシュメモリ5は、メモリセル当たりに2ビット以上のデータを格納可能に構成されている。例えば、NANDフラッシュメモリ5は、マルチレベルセル(MLC)フラッシュメモリであってもよいし、トリプルレベルセル(TLC)フラッシュメモリであってもよい。
NANDフラッシュメモリ5は、メモリセルアレイを含む。このメモリセルアレイは、多数のNANDブロック(ブロック)B0〜Bm−1を含む。ブロックB0〜Bm−1は、消去単位として機能する。ブロックは「物理ブロック」または「消去ブロック」と称されることもある。
ブロックB0〜Bm−1は多数のページ(物理ページ)を含む。つまり、ブロックB0〜Bm−1の各々は、ページP0〜Pn−1を含む。NANDフラッシュメモリ5においては、データのリードおよびデータのライトはページ単位で実行される。データの消去はブロック単位で実行される。
コントローラ4は、Toggle、ONFIのようなNANDインタフェース13を介して、不揮発性メモリであるNANDフラッシュメモリ5に電気的に接続されている。コントローラ4は、NANDフラッシュメモリ5のデータ管理とNANDフラッシュメモリ5のブロック管理とを実行するように構成されたフラッシュトランスレーション層(FTL)として機能し得る。
データ管理には、(1)論理ブロックアドレス(LBA)と物理アドレスとの間の対応関係を示すマッピング情報の管理、(2)ページ単位のリード/ライトとブロック単位の消去動作とを隠蔽するための処理、等が含まれる。LBAと物理アドレスとの間のマッピングの管理は、論理物理アドレス変換テーブルとして機能するルックアップテーブル(LUT)32を用いて実行される。ルックアップテーブル(LUT)32は、所定の管理サイズ単位で、LBAと物理アドレスとの間のマッピングを管理する。ホスト2からのライトコマンドの多くは、4Kバイトのデータの書き込みを要求する。したがって、ルックアップテーブル(LUT)32は、例えば4Kバイト単位で、LBAと物理アドレスとの間のマッピングを管理してもよい。あるLBAに対応する物理アドレスは、このLBAのデータがライトされたNANDフラッシュメモリ5内の物理記憶位置を示す。物理アドレスは、物理ブロックアドレスと物理ページアドレスとを含む。物理ページアドレスは全てのページに割り当てられており、また物理ブロックアドレスは全てのブロックに割り当てられている。
ページへのデータ書き込みは、1消去サイクル当たり1回のみ可能である。このため、コントローラ4は、同じLBAへのライト(上書き)を、NANDフラッシュメモリ5上の異なるページにマッピングする。つまり、コントローラ4は、ホスト2から受信されるライトコマンドによって指定されるデータ(ライトデータ)を、このデータのLBAとは無関係に、書き込み先ブロックとして現在割り当てられているブロック内の次の利用可能ページにライトする。そして、コントローラ4は、ルックアップテーブル(LUT)32を更新して、このLBAを、このデータが実際にライトされたこのページの物理アドレスに関連付ける。書き込み先ブロックに利用可能ページが無くなると、新たなブロックが書き込み先ブロックとして割り当てられる。
ブロック管理には、不良ブロックの管理と、ウェアレベリングと、ガベージコレクション等が含まれる。
ホスト2は、リードコマンドおよびライトコマンドをSSD3に送出する。リードコマンドは、SSD3に対してデータのリードを要求するコマンドである。リードコマンドは、リードすべきデータのLBA(開始LBA)と、リードすべきデータの転送長とを含む。ライトコマンドは、SSD3に対してデータのライトを要求するコマンドである。ライトコマンドは、ライトデータ(つまり書き込むべきデータ)のLBA(開始LBA)と、ライトデータの転送長とを含む。
次に、コントローラ4の構成について説明する。
コントローラ4は、ホストインタフェース11、CPU12、NANDインタフェース13、DRAMインタフェース14、誤り訂正符号(ECC)エンコーダ/デコーダ15等を含む。これらCPU12、NANDインタフェース13、DRAMインタフェース14、ECCエンコーダ/デコーダ15は、バス10を介して相互接続される。
ホストインタフェース11は、ホスト2から様々なコマンド(ライトコマンド、リードコマンド、イレーズコマンド、アンマップ(UNMAP)コマンド、等)を受信する。
CPU12は、ホストインタフェース11、NANDインタフェース13、DRAMインタフェース14、ECCエンコーダ/デコーダ15を制御するように構成されたプロセッサである。CPU12は、上述のFTLの処理に加え、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行する。
例えば、コントローラ4がホスト2からライトコマンドを受信した時、CPU12の制御の下、コントローラ4は、ライトコマンドによって指定されるライトデータをNANDフラッシュメモリ5に書き込む以下のライト動作を実行する。
コントローラ4は、ライトデータを現在の書き込み先ブロックの物理記憶位置(利用可能ページ)に書き込み、そしてルックアップテーブル(LUT)32を更新して、ライトコマンドに含まれるLBA(開始LBA)にこの物理記憶位置の物理アドレスをマッピングする。
これらFTL処理およびコマンド処理は、CPU12によって実行されるファームウェアによって制御されてもよい。このファームウェアは、CPU12を、ライト動作制御部21、リード動作制御部22、およびエンデュランスコードエンコーダ/デコーダ23として機能させる。
ライト動作制御部21は、ホスト2から受信されるライトデータをライトバッファ(WB)31に格納する。そして、ライト動作制御部21は、ライトバッファ(WB)31内のデータをページ単位でNANDフラッシュメモリ5に書き込む。この場合、ライト動作制御部21は、NANDインタフェース13と共同して、データの複数ページをNANDフラッシュメモリ5の同一物理ページに割り当てられた複数のページ場所に書き込み、これによってメモリセル当たりに2ビット以上のデータを書き込む。物理ページとは、同一ワード線に接続されたメモリセル群を意味する。
データの複数ページは、少なくとも下位ページデータおよび上位ページデータを含む。1つの物理ページに割り当てられる複数のページ場所は、少なくとも下位ページおよび上位ページを含む。
あるいは、データの複数ページは、下位ページデータと、一つ以上の中位ページデータと、上位ページデータとを含んでもよく、複数のページ場所もまた、下位ページと、一つ以上の中位ページと、上位ページとを含んでもよい。
NANDフラッシュメモリ5がメモリセル当たりに2ビットのデータを格納可能なマルチレベルセル(MLC)フラッシュメモリとして実現されている場合においては、一つの物理ページ(同一ワード線に接続されたメモリセル群)には2つのページ場所、つまり下位ページおよび上位ページが割り当てられる。一つの物理ページを構成するメモリセル群の各々に2ビットのデータを書き込む(プログラム)ために、データの2つのページ、つまり下位ページデータおよび上位ページデータが、この物理ページの下位ページおよび上位ページに書き込まれる。
NANDフラッシュメモリ5がメモリセル当たりに3ビットのデータを格納可能なトリプルレベルセル(TLC)フラッシュメモリとして実現されている場合においては、一つの物理ページ(同一ワード線に接続されたメモリセル群)には3つのページ場所、つまり下位ページ、中位ページおよび上位ページが割り当てられる。一つの物理ページを構成するメモリセル群の各々に3ビットのデータを書き込む(プログラム)ために、データの3つのページ、つまり下位ページデータ、中位ページおよび上位ページデータが、この物理ページの下位ページ、中位ページおよび上位ページに書き込まれる。
一つの物理ページ(同一ワード線に接続されたメモリセル群)に割り当てられるページ場所の数は4以上であってもよい。この場合、下位ページと、2つ以上の中位ページと、上位ページとが一つの物理ページに割り当てられる。
リード動作制御部22は、NANDインタフェース13と共同して、ホスト2からのリード要求によって指定されたNANDフラッシュメモリ5内のページ(ページ場所)からデータを読み出す。
エンデュランスコードエンコーダ/デコーダ23は、NANDフラッシュメモリ5の耐久性(エンデュランス)およびデータの信頼性を改善するための符号化/復号処理を実行する。符号化処理(エンデュランスコードエンコーディング)においては、書き込むべきページデータ、つまり1ページ分のサイズを有するライトデータは、メモリセルの摩耗を少なくし且つビットエラーレートを低減可能なコード(エンデュランスコードとも称される)を使用して符号化される。
本実施形態では、符号化データに含まれる付帯情報(冗長情報)の量をできるだけ減らすことができ且つ十分に速い書き込み速度が得られるように改善された符号化処理が実行される。
すなわち、データライト動作においては、まず、1ページ分のサイズを有するライトデータ(MLCにおいては、下位ページデータまたは上位ページデータ、TLCにおいては、下位ページデータ、中位ページデータ、または上位ページデータ)のための誤り訂正符号(ECC)がECCエンコーダ/デコーダ15によって生成される。そして、ライトデータ(書き込むべきページデータ)とECCとを含むデータ系列に“0”のビットまたは“1”のビットのどちらが多く含まれるかがエンデュランスコードエンコーダ/デコーダ23によって判定される。この判定結果と、ライトデータが書き込まれるべき対象のページ場所とに基づいて、符号化データ(ライトデータとECCとの組、またはライトデータの各ビットが反転された反転ライトデータとECCの各ビットが反転された反転ECCとの組)がエンデュランスコードエンコーダ/デコーダ23によって生成され、この符号化データが対象のページ場所に書き込まれる。例えば、MLCにおいて、もしライトデータが下位ページに書き込まれるべき下位ページデータである場合においては、符号化データに含まれる“1”のビットの数が増えるようにライトデータが符号化され、これによって符号化データ(ライトデータとECCとの組、またはライトデータの各ビットが反転された反転ライトデータとECCの各ビットが反転された反転ECCとの組)が生成されてもよい。一方、ライトデータが上位ページに書き込まれるべき上位ページデータである場合においては、符号化データに含まれる“0”のビットの数が増えるように、ライトデータが符号化され、符号化データ(ライトデータとECCとの組、またはライトデータの各ビットが反転された反転ライトデータとECCの各ビットが反転された反転ECCとの組)が生成されてもよい。
データリード動作においては、読み出し対象のページ場所からデータおよびECCが読み出される。そして、読み出されたデータと読み出されたECCとを使用して、読み出されたデータの誤り訂正のための誤り訂正復号処理(ECCデコード処理)がECCエンコーダ/デコーダ15によって実行される。
もしECCデコード処理で復号失敗が起きたならば、エンデュランスコードエンコーダ/デコーダ23は、この読み出されたデータおよびECCがオリジナルライトデータの反転データおよびオリジナルECCの反転ECCであると解釈する。なぜなら、反転データおよび反転ECCが書き込まれているにもかかわらず、読み出されたECCそのものと読み出されたデータそのものとを使用してECCデコード処理が実行されたならば、ECCデコード処理を正しく実行できないので、ECCの誤り訂正能力を超える数のエラーがECCデコード処理によって検出され、これによって復号失敗(「復号エラー」とも云う)が起きるからである。ECCデコード処理で復号失敗が起きたならば、エンデュランスコードエンコーダ/デコーダ23は、読み出されたデータの各ビットが反転された反転データと読み出されたECCの各ビットが反転された反転誤り訂正符号とを生成し、そして反転データと反転誤り訂正符号とを使用してECCデコード処理が再実行されるようにECCエンコーダ/デコーダ15を制御する。
このように、本実施形態では、1ページ分のサイズを有するライトデータ(ページデータ)とこのライトデータのためのECCとを含むデータ系列に“0”のビットまたは“1”のビットのどちらが多く含まれるかが判定される。そして、この判定結果と、ライトデータが書き込まれるべき対象ページ場所とに基づいて、ライトデータとECCとの組、またはライトデータの各ビットが反転された反転データとECCの各ビットが反転された反転ECCとの組のいずれかが対象のページ場所に書き込まれる。したがって、ライトデータとECCの双方を、メモリセルの摩耗を少なくし且つビットエラーレートを低減可能なコードを使用して符号化できる。そして、NANDフラッシュメモリ5から読み出された符号化データが反転されるべきであるか否かが、ECCデコード処理の結果を使用して判定される。したがって、本実施形態では、ライトデータおよびECCを含むデータ系列の反転/非反転を示す独立したビット(付帯情報)を符号化データに付加する必要は無い。
一般に、ページに書き込まれるECCのサイズは、このページに書き込まれるライトデータのサイズよりも遙かに小さい。このため、ライトデータとECCの双方を反転/非反転することによって符号化データを生成する代わりに、ライトデータのみを反転/非反転することによって符号化データを生成し、この符号化データを、オリジナルのライトデータのためECCと一緒に対象のページ場所に書き込んでもよい。
この場合、データライト動作においては、まず、1ページ分のサイズを有するライトデータのためのECCがECCエンコーダ/デコーダ15によって生成される。そして、ライトデータに“0”のビットまたは“1”のビットのどちらが多く含まれるかがエンデュランスコードエンコーダ/デコーダ23によって判定される。この判定結果と、ライトデータが書き込まれるべき対象のページ場所とに基づいて、符号化データ(ライトデータ、またはライトデータの各ビットが反転された反転ライトデータ)がエンデュランスコードエンコーダ/デコーダ23によって生成され、この符号化データと、オリジナルのライトデータのためのECCとが、対象のページ場所に書き込まれる。
データリード動作においては、読み出し対象のページ場所からデータおよびECCが読み出される。そして、読み出されたデータと読み出されたECCとを使用して、読み出されたデータの誤り訂正のための誤り訂正復号処理(ECCデコード処理)がECCエンコーダ/デコーダ15によって実行される。
もしECCデコード処理で復号失敗が起きたならば、エンデュランスコードエンコーダ/デコーダ23は、この読み出されたデータがオリジナルライトデータの反転データであると解釈する。なぜなら、反転データが書き込まれているにもかかわらず、読み出されたECCそのものと読み出されたデータそのものとを使用してECCデコード処理が実行されたならば、ECCデコード処理を正しく実行できないので、ECCの誤り訂正能力を超える数のエラーがECCデコード処理によって検出され、これによって復号失敗(「復号エラー」とも云う)が起きるからである。そして、エンデュランスコードエンコーダ/デコーダ23は、読み出されたデータの各ビットが反転された反転データと読み出されたECCとを使用して、ECCデコード処理を再実行する。これにより、読み出されたデータに対するECCデコード処理を正しく実行することができ、ECCデコード処理によって復号されたデータをホスト2に返すことができる。
次に、コントローラ4内の他のコンポーネントについて説明する。
NANDインタフェース13は、CPU12の制御の下、NANDフラッシュメモリ5を制御するように構成されたNANDコントローラである。上述のECCエンコーダ/デコーダ15はNANDインタフェース13に内蔵されていてもよい。
DRAMインタフェース14は、CPU12の制御の下、DRAM6を制御するように構成されたDRAMコントローラである。
DRAM6の記憶領域の一部は、NANDフラッシュメモリ5にライトすべきデータを一時的に格納するためのライトバッファ(WB)31として利用されてもよい。また、DRAM6の記憶領域は、上述のルックアップテーブル(LUT)32の格納のために用いられてもよい。
次に、ホスト2の構成について説明する。
ホスト2は、様々なプログラムを実行する情報処理装置である。情報処理装置によって実行されるプログラムには、アプリケーションソフトウェアレイヤ41、オペレーティングシステム(OS)42、ファイルシステム43が含まれる。
一般に知られているように、オペレーティングシステム(OS)42は、ホスト2を管理し、ホスト2内のハードウェアを制御し、アプリケーションがハードウェアおよびSSD3を使用することを可能にするための制御を実行するように構成されたソフトウェアである。ファイルシステム43は、ファイルの操作(作成、保存、更新、削除等)のための制御を行うために使用される。
様々なアプリケーションソフトウェアスレッドがアプリケーションソフトウェアレイヤ41上で走る。アプリケーションソフトウェアスレッドの例としては、クライアントソフトウェア、データベースソフトウェア、仮想マシン等がある。
アプリケーションソフトウェアレイヤ41がリード要求またはライト要求のようなリクエストをSSD3に送出することが必要な時、アプリケーションソフトウェアレイヤ41は、OS42にそのリクエストを送出する。OS42はそのリクエストをファイルシステム43に送出する。ファイルシステム43は、そのリクエストを、コマンド(リードコマンド、ライトコマンド等)にトランスレートする。ファイルシステム43は、コマンドを、SSD3に送出する。SSD3からのレスポンスが受信された際、ファイルシステム43は、そのレスポンスをOS42に送出する。OS42は、そのレスポンスをアプリケーションソフトウェアレイヤ41に送出する。
図2は、NANDフラッシュメモリ5内のメモリセルアレイの構成例を示す。
メモリセルアレイは、複数の物理ブロック36を含む。各物理ブロック36は、複数のNANDストリングを含む。各NANDストリングは、メモリストリング34と、メモリストリング34の両端に接続された選択ゲートS1およびS2とを含む。メモリストリング34は、直列接続された複数のメモリセル33を含む。
各メモリセル33はメモリセルトランジスタから構成される。メモリセルトランジスタは、半導体基板上に形成された積層ゲート構造(stacked gate structure)を備えたMOSFET(Metal Oxide Semiconductor Field Effect Transistor)から構成される。積層ゲート構造は、浮遊ゲート電極、及び制御ゲート電極を含んでいる。メモリセルトランジスタの閾値電圧は、浮遊ゲート電極に蓄積される電荷の量に応じて変化される。ある特定値のデータが格納されたメモリセルトランジスタは、この特定値のデータに対応する閾値電圧を有する。
選択ゲートS1はビット線BL31に接続され、選択ゲートS2はソース線SRCに接続される。同じ行に配置されたメモリセル群33の制御ゲートは、同じワード線WLに共通に接続される。選択ゲート群S1のゲートは選択線SGDに共通に接続され、選択ゲート群S2のゲートは選択線SGSに共通に接続される。
メモリセルアレイは、一つ又は複数のプレーン37を含む。プレーン37は、複数の物理ブロック36を含む。これら物理ブロック36の各々は、複数のNANDストリングを含む。データは物理ブロック36の単位で消去される。
一つのワード線WLに接続された複数のメモリセル33は、一つの物理ページ35を形成する。データのライトおよびリードは、物理ページ35の単位で実行される。メモリセル当たりに2ビットのデータを格納するMLCフラッシュメモリにおいては、一つの物理ページ35は2つのページ(下位ページ、上位ページ)に相当し、これら2つのページ(下位ページ、上位ページ)にそれぞれページアドレスが割り当てられる。メモリセル当たりに3ビットのデータを格納するTLCフラッシュメモリにおいては、物理ページ35は3つのページ(下位ページ、中位ページ、上位ページ)に相当し、これら3つのページ(下位ページ、中位ページ、上位ページ)にそれぞれページアドレスが割り当てられる。
図3は、MLCフラッシュメモリ内のメモリセルアレイの閾値電圧分布を示す。
各メモリセルは、2ビット符号(“11”、“01”、“00”、“10”)に対応する4つの閾値電圧分布(“Er”、“A”、“B”、“C”)のいずれかに設定される。閾値電圧分布“Er”は、消去状態に対応する閾値電圧分布である。閾値電圧分布“A”、“B”、“C”は、データが書き込まれた(プログラムされた)状態に対応する閾値電圧分布である。閾値電圧分布“Er”の閾値電圧レベルが最も低く、閾値電圧分布“C”の閾値電圧レベルが最も高い。
ある物理ページへのデータライト動作においては、最初に、下位ページデータがこの物理ページの下位ページに書き込まれる。これにより、この物理ページ内の各メモリセルは、対応する下位ページビットの値に基づいて、閾値電圧分布“Er”または閾値電圧分布“B”のいずれかに、あるいは、閾値電圧分布“Er”または所定の中間閾値電圧分布のいずれかに設定される。この後、上位ページデータがこの物理ページの上位ページに書き込まれる。これにより、物理ページ内の各メモリセルは、対応する下位ページビットの値と対応する上位ページビットの値とに基づいて、閾値電圧分布“Er”、“A”、“B”、“C”のいずれかに設定される。
データリード動作において、ある物理ページの下位ページを指定するページアドレスが入力された場合には、この下位ページに書き込まれている下位ページデータが読み出される。あるこの物理ページの上位ページを指定するページアドレスが入力された場合には、この上位ページに書き込まれている上位ページデータが読み出される。
図4は、TLCフラッシュメモリ内のメモリセルアレイの閾値電圧分布を示す。
各メモリセルは、3ビット符号(“111”、“101”、“001”、“000”、“100”、“110”、“010”、“011”)に対応する8つの閾値電圧分布(“Er”、“A”、“B”、“C”、“D”、“E”、“F”、“G”)のいずれかに設定される。
ある物理ページへのデータライト動作においては、下位ページデータの書き込み、中位ページデータの書き込み、上位ページデータの書き込みが、実行される。
データリード動作において、ある物理ページの下位ページを指定するページアドレスが入力された場合には、この下位ページに書き込まれている下位ページデータが読み出される。あるこの物理ページの中位ページを指定するページアドレスが入力された場合には、この中位ページに書き込まれている中位ページデータが読み出される。ある物理ページの上位ページを指定するページアドレスが入力された場合には、この上位ページに書き込まれている上位ページデータが読み出される。
図5は、MLCフラッシュメモリの4つの閾値電圧分布に対する下位ページビットの“1”/“0”のマッピングと、この4つの閾値電圧分布に対する上位ページビットの“1”/“0”のマッピングと、TLCフラッシュメモリの8つの閾値電圧分布に対する下位ページビットの“1”/“0”のマッピングと、この8つの閾値電圧分布に対する中位ページビットの“1”/“0”のマッピングと、この8つの閾値電圧分布に対する上位ページビットの“1”/“0”のマッピングとを示す。
MLCフラッシュメモリ、TLCフラッシュメモリのどちらにおいても、消去状態の閾値電圧分布“Er”にはオール“1”の符号が割り当てられる。個々のページ場所(MLCフラッシュメモリにおいては下位ページ/上位ページ、TLCフラッシュメモリにおいては下位ページ/中位ページ/上位ページ)に着目すると、“1”、“0”の各々が少なくとも2つ以上連続するように“1”/“0”が4つまたは8つの閾値電圧分布にマッピングされてもよい。
フラッシュメモリにおいては、メモリセルに蓄えられる電荷量が多いデータ状態(高い閾値電圧レベル)は、メモリセルに蓄えられる電荷量が少ないデータ状態(低い閾値電圧レベル)よりもメモリセルを劣化させる。また、フラッシュメモリにおいては、メモリセルに蓄えられる電荷量が時間の経過に伴って減少することによって、メモリセルの閾値電圧レベルが時間の経過に伴って低下するという、データリテンション(DR)エラーが発生する場合がある。プログラムされたメモリセルの閾値電圧レベルが高い程、データリテンションエラーが発生しやすい。このため、MLCフラッシュメモリにおいては、閾値電圧分布“C”のメモリセルは、データリテンションエラーが発生しやすい。
また、フラッシュメモリにおいては、データ読み出し動作に起因してメモリセル(特に、非選択メモリセル)の閾値電圧レベルが上昇するという、リードディスターブ(RD)エラーが発生する場合がある。閾値電圧分布“Er”のメモリセルは、リードディスターブエラーが発生しやすい。
このため、MLCフラッシュメモリにおいて、メモリセルの摩耗を減らし且つビットエラーレートを低減するためには、両端の符号(“Er”に対応する2ビット符号、および“C”に対応する2ビット符号)の出現確率を減らし、これによって中間の符号(“B”に対応する2ビット符号、および“A”に対応する2ビット符号)の出現確率を増やすことが好ましい。
MLCフラッシュメモリにおいては、4つの閾値電圧分布“Er”、“A”、“B”、“C”に割り当てられる下位ページビットの値は、例えば、“1”、“1”、“0”、“0”である。4つの閾値電圧分布“Er”、“A”、“B”、“C”に割り当てられる上位ページビットの値は、例えば、“1”、“0”、“0”、“1”である。
本実施形態では、“C”に対応する2ビット符号の出現確率と“Er”に対応する2ビット符号の出現確率とを減少させるために、ライトデータが下位ページデータである場合には、“1”の数を増やすエンコーディングを使用してライトデータ(例えば、ライトデータとECCの双方、またはライトデータのみ)が符号化され、ライトデータが上位ページデータである場合には、“0”の数を増やすエンコーディングを使用してライトデータ(例えば、ライトデータとECCの双方、またはライトデータのみ)が符号化される。換言すれば、MLCフラッシュメモリにおいては、下位ページデータの“1”の数を増やし且つ上位ページデータの“0”の数を増やすためのエンコーディング規則が用いられ得る。
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”である。
本実施形態では、“G”に対応する3ビット符号の出現確率と“Er”に対応する3ビット符号の出現確率とを減少させるために、TLCフラッシュメモリ用の2種類のエンコード方法(エンコード方法#1、エンコード方法#2)のいずれかが実行される。
エンコード方法#1においては、ライトデータが下位ページデータである場合には、“0”の数を増やすエンコーディングを使用してライトデータ(例えば、ライトデータとECCの双方、またはライトデータのみ)が符号化され、ライトデータが中位ページデータである場合には、“0”の数を増やすエンコーディングを使用してライトデータ(例えば、ライトデータとECCの双方、またはライトデータのみ)が符号化され、ライトデータが上位ページデータである場合には、“1”の数を増やすエンコーディングを使用してライトデータ(例えば、ライトデータとECCの双方、またはライトデータのみ)が符号化される。換言すれば、TLCフラッシュメモリ用のエンコード方法#1では、下位ページデータの“0”の数を増やし、中位ページデータの“0”の数を増やし且つ上位ページデータの“1”の数を増やすためのエンコーディング規則が用いられ得る。
エンコード方法#2は、下位ページデータの“1”の数を増やすエンコーディングが使用される点を除いて、エンコード方法#1と同様である。換言すれば、TLCフラッシュメモリ用のエンコード方法#2では、下位ページデータの“1”の数を増やし、中位ページデータの“0”の数を増やし且つ上位ページデータの“1”の数を増やすためのエンコーディング規則が用いられ得る。
図6は、エンデュランスコードエンコーダ/デコーダ23内のエンデュランスコードエンコーダの構成例を示す。
エンデュランスコードエンコーダは、ポピュレーション演算部23Aと反転/非反転演算部23Bとを含む。ポピュレーション演算部23Aは、1ページ分のサイズを有するライトデータとこのライトデータのためのECCとを含むデータ系列に含まれる“1”のポピュレーション(“1”のビットの数)をカウントする演算を行い、これによってこのデータ系列に“0”のビットまたは“1”のビットのどちらが多く含まれるかを判定する。あるいは、ポピュレーション演算部23Aは、このデータ系列に含まれる“0”のポピュレーション(“0”のビットの数)をカウントするように構成されていてもよい。
反転/非反転演算部23Bは、このデータ系列(ライトデータおよびECC)の各ビットを反転または非反転することによって、ライトデータとECCとの組、またはライトデータの各ビットが反転された反転ライトデータとECCの各ビットが反転された反転ECCとの組、のいずれかを符号化データとして出力する。
このデータ系列の反転または非反転の動作は、ポピュレーション演算部23Aの演算結果(つまり、“0”のビットまたは“1”のビットのどちらが多く含まれるかを示す判定結果)と、ライトデータが書き込まれるべき対象のページ場所(MLCフラッシュメモリにおいては下位ページ/上位ページ、TLCフラッシュメモリにおいては下位ページ/中位ページ/上位ページ)とに基づいて、制御される。
データライト動作においては、ライトデータは、まず、ECCエンコーダ15Aに送出される。ECCエンコーダ15Aは、BCH符号、リードソロモン符号、LDPC符号のようなECCエンコーディングを使用してライトデータをエンコードし、これによってライトデータのためのECCを生成する。このECCは、ライトデータ内の誤りを検出および訂正するためのコードである。
ECCを生成するエンコード処理においては、ライトデータは複数のデータ部に分割されても良く、これら複数のデータ部に対応する複数のECC部が生成されても良い。また、幾つかの実施形態では、ライトデータのためのECCのならず、ライトデータ内の誤りを検出するためのエラー検出コード(例えばCRC)がさらに生成されても良い。このエラー検出コードは、ECCよりも多くのエラーを検出可能なコードであってもよい。ECCエンコーダ15Aは、ライトデータとエラー検出コードとを含む情報シンボルをエンコードし、これによってこの情報シンボルのためのECCを生成しても良い。
ECCエンコーダ15AによってライトデータのためにECCが生成された後、このライトデータとECCが、ポピュレーション演算部23Aおよび反転/非反転演算部23Bの各々に送出される。そして、ライトデータとECCとを含むデータ系列に“0”のビットまたは“1”のビットのどちらが多く含まれるかが判定される。そして、この判定結果)と、対象のページ場所とに基づいて、ライトデータとECCとを含むデータ系列の全ビットが反転または非反転され、これによって符号化データ(ライトデータとECCとの組、または反転ライトデータと反転ECCとの組)が生成される。この符号化データは、NANDフラッシュメモリ5内の対象のページ場所に書き込まれる。
あるいは、ポピュレーション演算部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内の対象のページ場所に書き込まれる。
図7は、MLCフラッシュメモリの下位ページに書き込まれるべきライトデータ(下位ページデータ)とこのライトデータのためのECCとを符号化する動作を示す。
この場合、“1”の数を増やすエンコーディングを使用して、ライトデータとECCとを含むデータ系列が符号化される。
したがって、もし図7の上部に示すように、ライトデータとECCとを含むデータ系列に含まれる“0”のビットの数が、このデータ系列に含まれる“1”のビットの数よりも多いならば、データ系列の全ビットを反転するビット反転動作が実行される。このビット反転動作は、データ系列内の“1”のビットを“0”のビットに変換し、且つデータ系列内の“0”のビットを“1”のビットに変換する。これによって、データ系列の反転データ(反転ライトデータ、および反転ECC)が符号化データとして生成される。そして、この符号化データは、NANDフラッシュメモリ5内の対象のページ場所(ここでは、ある物理ページの下位ページ)に書き込まれる。
一方、もし図7の下部に示すように、ライトデータとECCとを含むデータ系列に含まれる“1”のビットの数が、このデータ系列に含まれる“0”のビットの数よりも多いならば、ビット反転動作は実行されない。これによって、オリジナルのデータ系列(オリジナルのライトデータ、およびオリジナルのECC)自体が符号化データとして生成される。そして、この符号化データは、NANDフラッシュメモリ5内の対象のページ場所(ここでは、ある物理ページの下位ページ)に書き込まれる。
図8は、MLCフラッシュメモリの上位ページに書き込まれるべきライトデータ(上位ページデータ)とこのライトデータのためのECCとを符号化する動作を示す。
この場合、“0”の数を増やすエンコーディングを使用してライトデータとECCとを含むデータ系列がエンコードされる。
したがって、もし図8の上部に示すように、このデータ系列に含まれる“1”のビットの数が、このデータ系列に含まれる“0”のビットの数よりも多いならば、このデータ系列の全ビットを反転するビット反転動作が実行される。これによって、データ系列の反転データ(反転ライトデータ、および反転ECC)が符号化データとして生成される。そして、この符号化データは、NANDフラッシュメモリ5内の対象のページ場所(ここでは、ある物理ページの上位ページ)に書き込まれる。
一方、もし図8の下部に示すように、このデータ系列に含まれる“0”のビットの数が、このデータ系列に含まれる“1”のビットの数よりも多いならば、ビット反転動作は実行されず、これによってオリジナルのデータ系列自体が符号化データとして生成される。そして、この符号化データは、NANDフラッシュメモリ5内の対象のページ場所(ここでは、ある物理ページの上位ページ)に書き込まれる。
図9は、MLCフラッシュメモリの下位ページに書き込まれるべきライトデータ(下位ページデータ)のみを符号化し、符号化されたライトデータをオリジナルのライトデータのためのECCと一緒に書き込む動作を示す。
この場合、“1”の数を増やすエンコーディングを使用してライトデータがエンコードされる。
したがって、もし図9の上部に示すように、ライトデータに含まれる“0”のビットの数が、ライトデータに含まれる“1”のビットの数よりも多いならば、ライトデータの全ビットを反転するビット反転動作が実行される。このビット反転動作は、ライトデータ内の“1”のビットを“0”のビットに変換し、且つライトデータ内の“0”のビットを“1”のビットに変換する。これによって、ライトデータの反転データが符号化データとして生成される。そして、この符号化データは、オリジナルのライトデータに対応するECCと一緒にNANDフラッシュメモリ5内の対象のページ場所(ここでは、ある物理ページの下位ページ)に書き込まれる。
一方、もし図9の下部に示すように、ライトデータに含まれる“1”のビットの数が、ライトデータに含まれる“0”のビットの数よりも多いならば、ビット反転動作は実行されない。これによって、オリジナルのライトデータ自体が符号化データとして生成される。そして、この符号化データは、オリジナルのライトデータに対応するECCと一緒に、NANDフラッシュメモリ5内の対象のページ場所(ここでは、ある物理ページの下位ページ)に書き込まれる。
図10は、MLCフラッシュメモリの上位ページに書き込まれるべきライトデータ(上位ページデータ)のみを符号化し、符号化されたライトデータをオリジナルのライトデータのためのECCと一緒に書き込む動作を示す。
この場合、“0”の数を増やすエンコーディングを使用してライトデータがエンコードされる。
したがって、もし図10の上部に示すように、ライトデータに含まれる“1”のビットの数が、ライトデータに含まれる“0”のビットの数よりも多いならば、ライトデータの全ビットを反転するビット反転動作が実行される。これによって、ライトデータの反転データが符号化データとして生成される。そして、この符号化データは、オリジナルのライトデータに対応するECCと一緒に、NANDフラッシュメモリ5内の対象のページ場所(ここでは、ある物理ページの上位ページ)に書き込まれる。
一方、もし図10の下部に示すように、ライトデータに含まれる“0”のビットの数が、ライトデータに含まれる“1”のビットの数よりも多いならば、ビット反転動作は実行されず、これによってオリジナルのライトデータ自体が符号化データとして生成される。そして、この符号化データは、オリジナルのライトデータに対応するECCと一緒に、NANDフラッシュメモリ5内の対象のページ場所(ここでは、ある物理ページの上位ページ)に書き込まれる。
図11は、エンデュランスコードエンコーダ/デコーダ23内のエンデュランスデコーダの構成例を示す。
エンデュランスデコーダは、セレクタ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に送出する。
データ読み出し動作においては、まず、読み出し対象のページからデータとECCとが読み出される。読み出されたデータおよび読み出されたECCは、セレクタ23Cの第1入力に供給される。また、読み出されたデータおよび読み出されたECCは、反転演算部23Dにも供給される。反転演算部23Dは、NANDフラッシュメモリ5から読み出されたデータおよびNANDフラッシュメモリ5から読み出されたECCの各々に対するビット反転動作を実行し、読み出されたデータの各ビットが反転された反転データ、および読み出されたECCの各ビットが反転された反転ECCを生成する。反転データおよび反転ECCは、セレクタ23Cの第2入力に供給される。
通常は、セレクタ23Cは、第1入力を選択する。このため、読み出されたデータおよびECCがECCデコーダ15Bに送出される。ECCデコーダ15Bは、データおよびECCを使用して、このデータの誤り訂正のための誤り訂正復号処理(ECCデコード処理)を実行する。
もし、読み出し対象のページに反転データおよび反転ECCが格納されているにもかかわらず、読み出されたデータおよびECCを使用したECCデコード処理が実行されたならば、このECCのエラー訂正能力を超える数のエラーの存在に起因してECCデコード処理で復号失敗が起きる。ECCデコーダ15Bは、復号失敗をセレクタ23Cに通知する。この通知を受信した場合、セレクタ23Cは、第2入力を選択する。この結果、反転データおよび反転ECCがECCデコーダ15Bに送出される。ECCデコーダ15Bは、反転データおよび反転ECCを使用して、上述のECCデコード処理を再実行する。
なお、ライトデータのみを符号化し、符号化されたライトデータをオリジナルのライトデータのためのECCと一緒に書き込むケースの場合には、反転演算部23Dは、NANDフラッシュメモリ5から読み出されたデータのみを反転してもよい。
図12は、MLCフラッシュメモリにおいて、エンデュランスコードエンコーディングの適用前における閾値電圧分布“Er”および閾値電圧分布“C”それぞれの出現確率と、エンデュランスコードエンコーディングの適用後における閾値電圧分布“Er”および閾値電圧分布“C”それぞれの出現確率とを示す。
ここでは、ライトデータ内に含まれる“1”または“0”の一方の割合が高い場合を想定する。
例えば、“1”のビットの数と“0”のビットと数との割合が6:4で偏っている場合においては(“1”の数:“0”の数 = 6:4)、エンデュランスコードエンコーディングの適用前(改善前)における閾値電圧分布“Er”および“C”の出現確率は、図12の右部に示すように、“0.36”、“0.24”である。一方、エンデュランスコードエンコーディングの適用後(改善後)においては、閾値電圧分布“Er”および“C”の出現確率は、図12の左部に示すように、“0.24”、“0.16”に低下される。
図13は、TLCフラッシュメモリにおいて、エンデュランスコードエンコーディングの適用前における閾値電圧分布“Er”および“G”それぞれの出現確率と、エンデュランスコードエンコーディングの適用後における閾値電圧分布“Er”および“G”それぞれの出現確率とを示す。
ここでは、ライトデータ内に含まれる“1”または“0”の一方の割合が高い場合を想定する。
例えば、“1”のビットの数と“0”のビットと数との割合が6:4で偏っている場合においては(“1”の数:“0”の数 = 6:4)、エンデュランスコードエンコーディングの適用前(改善前)における閾値電圧分布“Er”および“G”の出現確率は、図13の上部に示すように、“0.216”、“0.144”である。
エンコード方法#1の適用後(改善後)においては、閾値電圧分布“Er”および“G”の出現確率は、図13の左下部に示すように、“0.096”、“0.064”に低下される。
エンコード方法#2の適用後(改善後)においては、閾値電圧分布“Er”および“G”の出現確率は、図13の右下部に示すように、“0.144”、“0.096”に低下される。
図14は、エンデュランスコードエンコーダの別の構成例を示す。
図14のエンデュランスコードエンコーダにおいては、データ圧縮処理が組み合わせられている。
この圧縮処理は、ライトデータにおける“1”/“0”の偏りを増加させるために実行される。これにより、符号化データに含まれる“1”のビットの数の割合がより高い符号化データ、または符号化データに含まれる“0”のビットの数の割合がより高い符号化データを得ることができる。
図14のエンデュランスコードエンコーダは、ポピュレーション演算部23Aと反転/非反転演算部23Bとに加え、ライトデータを圧縮するように構成された圧縮部71をさらに含む。このエンデュランスコードエンコーダは、パディング部72、回転部73、選択部74をさらに含んでもよい。
1ページ分のサイズを有するライトデータ(ページデータ)60は、圧縮部71に送出される。圧縮部71は、ライトデータ60を圧縮する。この場合、圧縮部71は、ライトデータ60を可逆圧縮してもよい。通常、ライトデータ60を圧縮することによって得られる圧縮データ61(圧縮されたライトデータ)のサイズは、圧縮前のライトデータ(ページデータ)のサイズ(1ページのサイズ)よりも小さくなる。圧縮データ61は、パディング部72に送出される。
パディング部72は、ライトデータを圧縮することによって得られる、書き込むべきページデータ内の空き領域を、全て“1”のビット列または全て“0”のビット列を含むパディングデータでパディングする処理を実行する。空き領域のサイズは、1ページのサイズから圧縮データ61のサイズを引いた残りのサイズに相当する。つまり、パディングデータ(全て“1”のビット列または全て“0”のビット列)が圧縮データ61に追加され、圧縮データ61とパディングデータとを含むデータ系列が生成される。このデータ系列は、1ページのサイズを有しており、書き込むべきページデータとして扱われる。
パディングデータは、圧縮データ61に後続する位置に追加されてもよいし、複数のパディングデータ部に分割され且つ複数のパディング位置に分散されてもよい。パディングデータのビット列が追加(挿入)されるべきページデータ内の位置は、数学的規則(計算)に基づいて決定することができる。図14においては、パディングデータが3つのパディングデータ部に分割され、且つこれら3つのパディングデータ部が3つのパディング位置に分散された場合が例示されている。
パディング処理においては、パディング部72は、圧縮データ61に含まれる“1”のビットの数(または“0”のビットの数)をカウントして、圧縮データ61に“0”のビットまたは“1”のビットのどちらが多く含まれるかを判定してもよい。
圧縮データ61に含まれる“1”のビットの数が、圧縮データ61に含まれる“0”のビットの数よりも多い場合には、パディング部72は、全て“1”のビット列を使用してパディング処理を実行する。これにより、書き込むべきページデータ内の“1”/“0”の偏りをお菊することができる。
一方、圧縮データ61に含まれる“0”のビットの数が、圧縮データ61に含まれる“1”のビットの数よりも多い場合には、パディング部72は、全て“0”のビット列を使用してパディング処理を実行する。これにより、書き込むべきページデータ内の“1”/“0”の偏りをお菊することができる。
なお、圧縮データ61に含まれる“0”のビットの数と“1”のビットの数とがほぼ等しい場合には、パディング処理は、全て“1”のビット列または全て“0”のビット列のどちらを使用して実行されてもよい。
また、圧縮データ61の“0”/“1”の偏りの状況とは無関係に、常に、全て“1”のビット列(または全て“0”のビット列)がパディングデータとして使用されてもよい。
回転部73は、予め決められた複数のパディング用の位置の間で、パディングデータの位置をローテーションさせる。これは、圧縮データ61に起因するメモリセルの摩耗の量とパディングデータに起因するメモリセルの摩耗の量とが互い異なるからである。複数のパディング用の位置を使用してパディングデータ位置をローテーションさせることにより、摩耗を全てのメモリセル位置に均等に分散させることが可能となる。
例えば、予め決められた3つのパディング用の位置を使用する場合においては、書き込み先ブロックへの一回目の書き込み動作においては、どのページにデータが書き込まれる場合であっても、パディングデータは、最初のパディング用の位置に設定される。この書き込み先ブロックの消去動作が実行された後にこの書き込み先ブロックへの二回目の書き込み動作が行われる場合には、どのページにデータが書き込まれる場合であっても、パディングデータは、二番目のパディング用の位置に設定される。そして、この書き込み先ブロックの消去動作が実行された後にこの書き込み先ブロックへの三回目の書き込みが行われる場合には、どのページにデータが書き込まれる場合であっても、パディングデータは、三番目のパディング用の位置に設定される。
パディングデータをページ内の複数のパディング位置に分散させ、且つパディングデータの位置を複数のパディング用の位置の間でローテーションさせる場合においては、パディングデータは、予め決められた複数のパディング位置セットの間で、ローテーションされる。複数のパディング位置セットの各々は、複数のパディング位置を含んでいる。
選択部74は、圧縮データ61とパディングデータとを含むデータ系列、または圧縮前のライトデータ60のいずれかを、書き込むべきページデータとして選択する。
もし圧縮前のライトデータ60の“0”/“1”の偏りが、パディングデータが追加された圧縮データ61の“0”/“1”の偏りよりも大きいならば、選択部74は、圧縮前のライトデータ60を書き込むべきページデータとして選択してもよい。
より詳しくは、選択部74は、ライトデータ60の“0”または“1”の偏りと、パディングデータが追加された圧縮データ61の0”または“1”の偏りを算出する。そして、選択部74は、ライトデータ60、およびパディングデータが追加された圧縮データ61から、“0”または“1”の偏りが大きい方のデータを選択する。もしライトデータ60よりも、パディングデータが追加された圧縮データ61の方が“0”または“1”の高い偏りを有するならば、パディングデータが追加された圧縮データ61が、書き込むべきページデータとして選択される。一方、もしパディングデータが追加された圧縮データ61よりも、ライトデータ60の方が“0”または“1”の高い偏りを有するならば、ライトデータ60が、書き込むべきページデータとして選択される。
選択データは、書き込むべきページデータとして扱われる。
この場合、選択データが、ポピュレーション演算部23Aおよび反転/非反転演算部23Bの各々に送出される。そして、選択データに“0”のビットまたは“1”のビットのどちらが多く含まれるかが判定され、この判定結果と、選択データが書き込まれるべき対象のページ場所とに基づいて、選択データの全ビットが反転または非反転され、これによって選択データに対応する符号化データが生成される。この符号化データは、ECCエンコーダ15Aによって生成されるオリジナルの選択データに対応するECCと一緒に、NANDフラッシュメモリ5内の対象のページ場所に書き込まれてもよい。
あるいは、ECCエンコーダ15Aは、ポピュレーション演算部23Aおよび反転/非反転演算部23Bの前段に配置されていてもよい。この場合、まず、選択データのためのECCがECCエンコーダ15Aによって生成される。この選択データとこのECCとが、ポピュレーション演算部23Aおよび反転/非反転演算部23Bの各々に送出される。そして、選択データとECCとを含むデータ系列に“0”のビットまたは“1”のビットのどちらが多く含まれるかが判定される。この判定結果と、選択データが書き込まれるべき対象のページ場所とに基づいて、選択データとECCとを含むデータ系列の全ビットが反転または非反転され、これによって符号化データ(選択データとECCとの組、または反転選択データと反転ECCとの組)が生成される。そして、この符号化データは、NANDフラッシュメモリ5内の対象のページ場所に書き込まれる。
図15は、パディングおよび回転(ローテーション)の動作を示す。
まず、ライトデータが圧縮され、圧縮データが生成される。そして、この圧縮データの空き領域(書き込むべきページデータの空き領域)を、全て“1”のビット列または全て“0”のビット列を含むパディングデータでパディングする処理が実行される。圧縮データのサイズはオリジナルのライトデータによって異なる場合がある。このため、下位ページデータに対応する圧縮データのサイズは、上位ページデータに対応する圧縮データのサイズと異なる場合がある。図15では、下位ページデータに対応する圧縮データのサイズよりも、上位ページデータに対応する圧縮データのサイズが大きい場合が想定されている。この場合、上位ページデータに対応するパディングデータのサイズは、下位ページデータに対応するパディングデータのサイズよりも小さくなる。
この場合、これら下位ページデータおよび上位ページデータの双方が書き込まれる物理ページは、メモリセルの摩耗の量が互いに異なる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内の各メモリセルの摩耗よりも大きくなる可能性がある。
本実施形態では、パディングデータの位置は、予め決められた複数のパディング用の位置の間でローテーションされる。例えば、物理ページのサイズが8KBである場合、パディングデータが付加されたライトデータの開始位置を、ページ内の位置(例えば、0KB目、2KB目、4KB目、6KB目)の間でローテーションしてもよい。このように、複数のパディング用の位置を使用してパディングデータの位置をローテーションすることにより、エリア#3の位置を物理ページ全体に分散させることができ、これによって摩耗の量を全てのメモリセル位置に均等に分散させることが可能となる。
図16は、パディングおよび回転(ローテーション)の別の動作を示す。
まず、ライトデータが圧縮され、圧縮データが生成される。そして、この圧縮データの空き領域(書き込むべきページデータの空き領域)を、全て“1”のビット列または全て“0”のビット列を含むパディングデータでパディングする処理が実行される。パディングデータは複数のパディングデータ部に分割され、これらパディングデータ部が複数の位置に分散される。
下位ページデータおよび上位ページデータのどちらにおいても、これら複数のパディングデータ部それぞれのパディング位置は、予め決められた複数のパディング用の位置セットの間でローテーションされる。したがって、エリア#3の位置を物理ページ内の全てのメモリセル位置に均等に分散させることができる。
図17は、図14のエンデュランスコードエンコーダに適用される符号化動作を示す。
圧縮データとパディングデータとを含むデータ系列に含まれる“1”のビットの数がカウントされ、これによってこのデータ系列に “0”のビットまたは“1”のビットのどちらが多く含まれるかが判定される。そして、この判定結果と、このデータ系列が書き込まれるべき対象のページ場所とに基づいて、このデータ系列の全ビットが反転または非反転され、これによって符号化データが生成される。この符号化データは、ECCエンコーダ15Aによって生成されるオリジナルのデータ系列(圧縮データ+パディングデータ)に対応するECCと一緒に、NANDフラッシュメモリ5内の対象のページ場所に書き込まれる。
図18は、図14のエンデュランスコードエンコーダに適用される別の符号化動作を示す。
まず、圧縮データとパディングデータとを含むデータ系列のためのECCが生成される。そして、圧縮データとパディングデータとECCとを含むデータ系列に含まれる“1”のビットの数がカウントされ、これによってこのデータ系列(圧縮データ+パディングデータ+ECC)に“0”のビットまたは“1”のビットのどちらが多く含まれるかが判定される。そして、この判定結果と、このデータ系列(圧縮データ+パディングデータ+ECC)が書き込まれるべき対象のページ場所とに基づいて、このデータ系列(圧縮データ+パディングデータ+ECC)の全ビットが反転または非反転され、これによって符号化データが生成される。この符号化データは、NANDフラッシュメモリ5内の対象のページ場所に書き込まれる。
図19は、図14のエンデュランスコードエンコーダによって生成される符号化データのフォーマットの例を示す
この符号化データは、データ(圧縮データ+パディングデータ)およびECCに加え、さらに、回転情報(ローテーション情報)および圧縮フラグを符号化の内容を示す付帯情報として含んでいても良い。回転情報は、使用されたパディング用位置を示す。圧縮フラグは、データが圧縮されているか否かを示す。
なお、回転情報(ローテーション情報)および圧縮フラグは、データ(圧縮データ+パディングデータ)およびECCが書き込まれる物理ページとは異なる、NANDフラッシュメモリ5内の記憶領域(管理情報用の予約領域)に管理情報として保存されてもよい。
また、図20に示すように、符号化データは、回転情報(ローテーション情報)および圧縮フラグに加え、さらに、反転フラグを符号化の内容を示す付帯情報として含んでいても良い。反転フラグは、データ(圧縮データ+パディングデータ)が反転されているか否かを示す。回転情報(ローテーション情報)、圧縮フラグおよび反転フラグは、データ(圧縮データ+パディングデータ)およびECCが書き込まれる物理ページとは異なる、NANDフラッシュメモリ5内の領域に管理情報として保存されてもよい。
符号化データが反転フラグを含む場合には、ECCは、図21に示すように、反転/非反転されたデータ(圧縮データ+パディングデータ)から生成されてもよい。
この場合、まず、圧縮データとパディングデータとを含むデータ系列に含まれる“1”のビットの数がカウントされ、これによってこのデータ系列に“0”のビットまたは“1”のビットのどちらが多く含まれるかが判定される。そして、この判定結果と、このデータ系列が書き込まれるべき対象のページ場所とに基づいて、このデータ系列の全ビットが反転または非反転され、これによって符号化データが生成される。そしてこの符号化データのためのECCが生成され、符号化データが、この符号化データから生成されたECCと一緒に、NANDフラッシュメモリ5内の対象のページ場所に書き込まれる。
図22のフローチャートは、NANDフラッシュメモリ5にデータを書き込むためのライト動作の手順を示す。ここでは、NANDフラッシュメモリ5がMLCフラッシュメモリである場合を想定する。
コントローラ4は、書き込むべきライトデータをライトバッファ(WB)31から読み出し、このライトデータのためのECCを生成する(ステップS11)。コントローラ4は、ライトデータとECCとを含むデータ系列に含まれる“1”のポピュレーション(“1”のビットの数)をカウントする演算(ポピュレーション演算)を行う(ステップS12)。
そして、コントローラ4は、このライトデータが書き込まれるべき対象ページ場所が下位ページまたは上位ページのいずれであるかを判定する(ステップS13)。この判定は、対象ページ場所のページアドレスに基づいて行われてもよい。
対象ページ場所が下位ページであるならば、コントローラ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)自体を符号化データとして出力する。
そして、コントローラ4は、符号化データ(反転ライトデータと反転ECCとの組、またはライトデータとECCとの組)をNANDフラッシュメモリ5内の対象ページ場所に書き込む(ステップS16)。
対象ページ場所が上位ページであるならば、コントローラ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)自体を符号化データとして出力する。
そして、コントローラ4は、符号化データ(反転ライトデータと反転ECCとの組、またはライトデータとECCとの組)をNANDフラッシュメモリ5内の対象ページ場所に書き込む(ステップS19)。
図23のフローチャートは、図22のライト動作によって書き込まれたデータのためのリード動作の手順を示す。
コントローラ4がホスト2からリードコマンド(リード要求とも云う)を受信した場合、コントローラ4は、リードコマンド内のLBAに対応する物理アドレスによって指定されるNANDフラッシュメモリ5内のページからデータ(ここでは、データおよびECC)を読み出す(ステップS21)。コントローラ4は、読み出されたデータと読み出されたECCとを使用して、読み出されたデータの誤り訂正のためのECC復号処理(ECCデコード処理)を実行する(ステップS22)。もしライトデータの反転データおよびECCの反転ECCがこのページに書き込まれていたならば、ECCデコード処理の復号失敗が起きる。
ECCデコード処理の復号失敗が起きなかったならば(ステップS23のNO)、コントローラ4は、ECCデコード処理によって復号されたデータをホスト2に返す(ステップS24)。
一方、ECCデコード処理の復号失敗が起きたならば(ステップS23のYES)、コントローラ4は、読み出されたデータおよび読み出されたECCを含むデータ系列の全ビットを反転して、読み出されたデータの各ビットが反転された反転データと、読み出されたECCの各ビットが反転された反転ECCとを生成する(ステップS25)。コントローラ4は、反転データと反転ECCとを使用してECCデコード処理を再実行し(ステップS26)、ECCデコード処理によって復号されたデータをホスト2に返す(ステップS27)。
図24のフローチャートは、NANDフラッシュメモリ5にデータを書き込むためのライト動作の別の手順を示す。ここでは、NANDフラッシュメモリ5がMLCフラッシュメモリである場合を想定する。
コントローラ4は、書き込むべきライトデータをライトバッファ(WB)31から読み出し、このライトデータのためのECCを生成する(ステップS31)。コントローラ4は、ライトデータに含まれる“1”のポピュレーション(“1”のビットの数)をカウントする演算(ポピュレーション演算)を行う(ステップS32)。
そして、コントローラ4は、このライトデータが書き込まれるべき対象ページ場所が下位ページまたは上位ページのいずれであるかを判定する(ステップS33)。
対象ページ場所が下位ページであるならば、コントローラ4は、ライトデータ内の“1”の数を増やすエンコーディングを使用して、ライトデータをエンコードする。この場合、もしライトデータ内の“0”のビットの数がこのライトデータ内の“1”のビットの数よりも多いならば(ステップS34のYES)、コントローラ4は、ライトデータの全ビットを反転することによって、ライトデータの各ビットが反転された反転ライトデータを符号化データとして出力する(ステップS35)。一方、もしこのライトデータ内の“1”のビットの数がこのライトデータ内の“0”のビットの数よりも多いならば(ステップS34のNO)、コントローラ4は、このライトデータを反転せずに、このライトデータ自体を符号化データとして出力する。
そして、コントローラ4は、ステップS31で生成されたECCが付加された符号化データ、つまり反転ライトデータとステップS31で生成されたECCとの組、またはライトデータとステップS31で生成されたECCとの組のいずれかを、NANDフラッシュメモリ5内の対象ページ場所に書き込む(ステップS36)。
対象ページ場所が上位ページであるならば、コントローラ4は、ライトデータ内の“0”の数を増やすエンコーディングを使用して、ライトデータをエンコードする。この場合、もしライトデータ内の“1”のビットの数がこのライトデータ内の“0”のビットの数よりも多いならば(ステップS37のYES)、コントローラ4は、ライトデータの全ビットを反転することによって、ライトデータの各ビットが反転された反転ライトデータを符号化データとして出力する(ステップS38)。一方、もしこのライトデータ内の“0”のビットの数がこのライトデータ内の“1”のビットの数よりも多いならば(ステップS37のNO)、コントローラ4は、このライトデータを反転せずに、このライトデータ自体を符号化データとして出力する。
そして、コントローラ4は、ステップS31で生成されたECCが付加された符号化データ、つまり反転ライトデータとステップS31で生成されたECCとの組、またはライトデータとステップS31で生成されたECCとの組のいずれかを、NANDフラッシュメモリ5内の対象ページ場所に書き込む(ステップS39)。
図25のフローチャートは、図24のライト動作によって書き込まれたデータのためのリード動作の手順を示す。
コントローラ4がホスト2からリードコマンド(リード要求とも云う)を受信した場合、コントローラ4は、リードコマンド内のLBAに対応する物理アドレスによって指定されるNANDフラッシュメモリ5内のページからデータ(ここでは、データおよびECC)を読み出す(ステップS41)。コントローラ4は、読み出されたデータと読み出されたECCとを使用して、読み出されたデータの誤り訂正のためのECC復号処理(ECCデコード処理)を実行する(ステップS42)。もしライトデータの反転データがこのページに書き込まれていたならば、ECCデコード処理の復号失敗が起きる。
ECCデコード処理の復号失敗が起きなかったならば(ステップS43のNO)、コントローラ4は、ECCデコード処理によって復号されたデータをホスト2に返す(ステップS44)。
一方、ECCデコード処理の復号失敗が起きたならば(ステップS43のYES)、コントローラ4は、読み出されたデータの全ビットを反転して、読み出されたデータの各ビットが反転された反転データを生成する(ステップS45)。コントローラ4は、反転データと読み出されたECCとを使用してECCデコード処理を再実行し(ステップS46)、ECCデコード処理によって復号されたデータをホスト2に返す(ステップS47)。
図26のフローチャートは、図24のライト動作と圧縮処理とが組み合わされたライト動作の手順を示す。
ここでは、NANDフラッシュメモリ5(MLCフラッシュメモリ)にデータを書き込む場合を想定する。
圧縮処理が組み合わされたライト動作においては、図24のステップS31〜S39の処理の前にステップS51〜S57の処理が実行されてもよい。
すなわち、コントローラ4は、まず、ライトデータを圧縮する(ステップS51)。コントローラ4は、ステップS51で生成された圧縮データに“1”または“0”のどちらのビットが多く含まれるかを判定する(ステップS52)。
圧縮データに含まれる“1”のビットの数の割合が高いならば、コントローラ4は、“1”のビット列を圧縮データに追加することによって、ライトデータの空き領域を“1”のビット列でパディングするための処理を行う(ステップS53)。
圧縮データに含まれる“0”のビットの数の割合が高いならば、コントローラ4は、“0”のビット列を圧縮データに追加することによって、ライトデータの空き領域を“0”のビット列でパディングするための処理を行う(ステップS54)。
圧縮データに含まれる“1”のビットの数の割合と“0”のビットの数の割合が同じならば、コントローラ4は、“0”のビット列または“1”のビット列のいずれかの所定ビット列を圧縮データに追加することによって、ライトデータの空き領域をこの所定ビット列“0”でパディングするための処理を行う(ステップS55)。なお、圧縮データに含まれる“1”(または“0”)の数とは無関係に、“0”のビット列または“1”のビット列のいずれかの所定ビット列でライトデータの空き領域をパディングする処理が実行されても良い。
パディングのための処理では、コントローラ4は、圧縮データを複数のデータ部に分け、パディング用のビット列を、これら複数のデータ部に後続する複数の位置(パディング位置)に分散させてもよい。さらに、コントローラ4は、これらパディング位置を、複数のパディング位置の間で回転(ローテート)させる処理を行ってもよい(ステップS56)。
コントローラ4は、圧縮前のライトデータ、およびパディング用のビット列が追加された圧縮データの内、“0”または“1”の偏りが大きい方のデータを処理対象データとして選択する(ステップS57)。
続くステップS31〜S39では、コントローラ4は、選択されたデータを、ライトデータとして扱うことによって、選択されたデータの反転/非反転データを符号化データとして出力し、この符号化データを選択されたデータのためのECCと一緒に、対象のページ場所に書き込む。
図27のフローチャートは、図22のライト動作と圧縮処理とが組み合わされたライト動作の手順を示す。
ここでは、NANDフラッシュメモリ5(MLCフラッシュメモリ)にデータを書き込む場合を想定する。
圧縮処理が組み合わされたライト動作においては、図22のステップS11〜S19の処理の前に、図26で説明したステップS51〜S57の処理が実行されてもよい。
図28のフローチャートは、図26のライト動作によって書き込まれたデータのためのリード動作の手順を示す。
コントローラ4がホスト2からリードコマンド(リード要求とも云う)を受信した場合、コントローラ4は、リードコマンド内のLBAに対応する物理アドレスによって指定されるNANDフラッシュメモリ5内のページからデータ(ここでは、データおよびECC)を読み出す(ステップS61)。コントローラ4は、読み出されたデータと読み出されたECCとを使用して、読み出されたデータの誤り訂正のためのECC復号処理(ECCデコード処理)を実行する(ステップS62)。もし圧縮データとパディングデータとを含むデータ系列の反転データがこのページに書き込まれていたならば、ECCデコード処理の復号失敗が起きる。
ECCデコード処理の復号失敗が起きなかったならば(ステップS63のNO)、コントローラ4は、ECCデコード処理によって復号されたデータからパディングデータを除去し(ステップS64)、パディングデータが除去された残りのデータを伸張し(ステップS65)、伸張されたデータをホスト2に返す(ステップS66)。
一方、ECCデコード処理の復号失敗が起きたならば(ステップS63のYES)、コントローラ4は、読み出されたデータ(圧縮データとパディングデータ)の全ビットを反転して、読み出されたデータの各ビットが反転された反転データを生成する(ステップS67)。コントローラ4は、反転データと読み出されたECCとを使用してECCデコード処理を再実行する(ステップS68)。そして、コントローラ4は、ECCデコード処理によって復号されたデータからパディングデータを除去し(ステップS69)、パディングデータが除去された残りのデータを伸張し(ステップS70)、伸張されたデータをホスト2に返す(ステップS71)。
図29のフローチャートは、図27のライト動作によって書き込まれたデータのためのリード動作の手順を示す。
コントローラ4がホスト2からリードコマンド(リード要求とも云う)を受信した場合、コントローラ4は、リードコマンド内のLBAに対応する物理アドレスによって指定されるNANDフラッシュメモリ5内のページからデータ(ここでは、データおよびECC)を読み出す(ステップS81)。コントローラ4は、読み出されたデータと読み出されたECCとを使用して、読み出されたデータの誤り訂正のためのECC復号処理(ECCデコード処理)を実行する(ステップS82)。もし圧縮データとパディングデータとを含むデータ系列の反転データ、および反転ECCが、このページに書き込まれていたならば、ECCデコード処理の復号失敗が起きる。
ECCデコード処理の復号失敗が起きなかったならば(ステップS83のNO)、コントローラ4は、ECCデコード処理によって復号されたデータからパディングデータを除去し(ステップS84)、パディングデータが除去された残りのデータを伸張し(ステップS85)、伸張されたデータをホスト2に返す(ステップS86)。
一方、ECCデコード処理の復号失敗が起きたならば(ステップS83のYES)、コントローラ4は、読み出されたデータ(圧縮データとパディングデータ)と読み出されたECCとを含むデータ系列の全ビットを反転して、読み出されたデータの各ビットが反転された反転データと、読み出されたECCの各ビットが反転された反転ECCとを生成する(ステップS87)。コントローラ4は、反転データと反転ECCとを使用してECCデコード処理を再実行する(ステップS88)。そして、コントローラ4は、ECCデコード処理によって復号されたデータからパディングデータを除去し(ステップS89)、パディングデータが除去された残りのデータを伸張し(ステップS90)、伸張されたデータをホスト2に返す(ステップS91)。
図30は、ホスト2として機能する情報処理装置のハードウェア構成例を示す。
この情報処理装置は、サーバコンピュータ、またはパーソナルコンピュータとして実現される。この情報処理装置は、プロセッサ(CPU)101、メインメモリ102、BIOS−ROM103、ネットワークコントローラ105、周辺インタフェースコントローラ106、コントローラ107、およびエンベデッドコントローラ(EC)108等を含む。
プロセッサ101は、この情報処理装置の各コンポーネントの動作を制御するように構成されたCPUである。このプロセッサ101は、複数のSSD3のいずれか1つからメインメモリ102にロードされる様々なプログラムを実行する。メインメモリ102は、DRAMのようなランダムアクセスメモリから構成される。プロセッサ101によって実行されるプログラムは、上述のアプリケーションソフトウェアレイヤ41、OS42およびファイルシステム43を含む。
また、プロセッサ101は、不揮発性メモリであるBIOS−ROM103に格納された基本入出力システム(BIOS)も実行する。BIOSはハードウェア制御のためのシステムプログラムである。
ネットワークコントローラ105は、有線LANコントローラ、無線LANコントローラのような通信デバイスである。周辺インタフェースコントローラ106は、USBデバイスのような周辺デバイスとの通信を実行するように構成されている。
コントローラ107は、複数のコネクタ107Aにそれぞれ接続されるデバイスとの通信を実行するように構成されている。本実施形態では、複数のSSD3が複数のコネクタ107Aにそれぞれ接続される。コントローラ107は、SAS expander、PCIe Switch、PCIe expander、フラッシュアレイコントローラ、またはRAIDコントローラ等である。
EC108は、情報処理装置の電力管理を実行するように構成されたシステムコントローラとして機能する。EC108は、ユーザによる電源スイッチの操作に応じて情報処理装置をパワーオンおよびパワーオフする。EC108はワンチップマイクロコントローラのような処理回路として実現されている。EC108は、キーボード(KB)などの入力デバイスを制御するキーボードコントローラを内蔵していてもよい。
図31は、複数のSSD3とホスト2とを含む情報処理装置の構成例を示す。
この情報処理装置は、ラックに収容可能な薄い箱形の筐体201を備える。多数のSSD3は筐体201内に配置されても良い。この場合、各SSD3は筐体201の前面201Aに設けられたスロットに取り外し可能に挿入されてもよい。
システムボード(マザーボード)202は筐体201内に配置される。システムボード(マザーボード)202上においては、CPU101、メモリ102、ネットワークコントローラ105、コントローラ107を含む様々な電子部品が実装されている。これら電子部品がホスト2として機能する。
以上説明したように、本実施形態によれば、ライト動作では、1ページ分のサイズを有する第1ライトデータのための第1誤り訂正符号が生成され、第1ライトデータと第1誤り訂正符号とを含むデータ系列に“0”のビットまたは“1”のビットのどちらが多く含まれるかが判定される。そして、この判定結果と、第1ライトデータが書き込まれるべき対象のページ場所とに基づいて、第1ライトデータと第1誤り訂正符号との組、または第1ライトデータの各ビットが反転された第2ライトデータと第1誤り訂正符号の各ビットが反転された第2誤り訂正符号との組のいずれかが対象のページ場所に書き込まれる。リード動作では、読み出し対象のページ場所からデータおよび誤り訂正符号が読み出され、読み出されたデータと読み出された誤り訂正符号とを使用して、読み出されたデータの誤り訂正のための誤り訂正復号処理が実行される。誤り訂正復号処理で復号失敗が起きた場合、読み出されたデータの各ビットが反転された反転データと読み出された誤り訂正符号の各ビットが反転された反転誤り訂正符号とを使用して誤り訂正復号処理が再実行される。
また、第1ライトデータと第1誤り訂正符号とを含むデータ系列を反転/非反転する代わりに、第1ライトデータのみを反転/非反転してもよい。この場合、ライト動作では、第1ライトデータのための第1誤り訂正符号が生成され、第1ライトデータに“0”のビットまたは“1”のビットのどちらが多く含まれるかが判定される。そして、この判定結果と、第1ライトデータが書き込まれるべき対象のページ場所とに基づいて、第1ライトデータと第1誤り訂正符号との組、または第1ライトデータの各ビットが反転された第2ライトデータと第1誤り訂正符号との組のいずれかが対象のページ場所に書き込まれる。リード動作では、読み出し対象のページ場所からデータおよび誤り訂正符号が読み出され、読み出されたデータと読み出された誤り訂正符号とを使用して、読み出されたデータの誤り訂正のための誤り訂正復号処理が実行される。誤り訂正復号処理で復号失敗が起きた場合、読み出されたデータの各ビットが反転された反転データと読み出された誤り訂正符号とを使用して、誤り訂正復号処理が再実行される。
このように、誤り訂正復号処理の復号失敗に応答して、データ(またはデータと誤り訂正符号の双方)を反転し、誤り訂正復号処理を再実行することにより、符号化データにライトデータの反転/非反転を示す切り換えフラグのような付帯情報を挿入すること無く、メモリセルの摩耗が少なく且つビットエラーレートを低減可能な符号化データを書き込むことができる。
また、データ圧縮とパディングデータローテーションの処理をさらに追加することにより、両端の符号(“Er”に対応する2ビット符号、および“C”に対応する2ビット符号)の出現確率をさらに減らし、中間の符号(“B”に対応する2ビット符号、および“A”に対応する2ビット符号)の出現確率をさらに増やすことができる。また、複数のパディング用の位置を使用してパディングデータ位置がローテーションされるので、摩耗を全てのメモリセル位置に均等に分散させることが可能となる。
また、本実施形態の処理は、メモリセル当たりに2ビットのデータを格納可能なMLCフラッシュメモリ、メモリセル当たりに3ビットのデータを格納可能なTLCフラッシュメモリのみならず、メモリセル当たりに4ビット以上のデータを格納可能な他のタイプのフラッシュメモリにも適用可能である。
また、エンデュランスコードエンコーダ/デコーダ23用の圧縮処理および伸張処理は、コントローラ4内の専用のハードウェアによって実行してもよい。また、エンデュランスコードエンコーダ/デコーダ23の全ての機能をコントローラ4内の専用のハードウェアによって実現してもよい。
また、本実施形態では、不揮発性メモリとしてNANDメモリを例示した。しかし、本実施形態の機能は、例えば、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)、ReRAM(Resistive Random Access Memory)、又は、FeRAM(Ferroelectric Random Access Memory)のような他の様々な不揮発性メモリにも適用できる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
2…ホスト、3…SSD、4…コントローラ、5…NANDメモリ、15…ECCエンコーダ/デコーダ、21…ライト動作制御部、22…リード動作制御部、23…エンデュランスコードエンコーダ/デコーダ。

Claims (14)

  1. 不揮発性メモリと、
    前記不揮発性メモリに電気的に接続され、少なくとも下位ページデータと上位ページデータとを含むデータの複数のページを、前記不揮発性メモリの同一物理ページに割り当てられる少なくとも下位ページと上位ページとを含む複数のページ場所に書き込むコントローラとを具備し、前記コントローラは、
    1ページ分のサイズを有する第1ライトデータのための第1誤り訂正符号を生成し、
    前記第1ライトデータと前記第1誤り訂正符号とを含むデータ系列に“0”のビットまたは“1”のビットのどちらが多く含まれるかを判定し、
    前記判定の結果と、前記第1ライトデータが書き込まれるべき対象のページ場所とに基づいて、前記第1ライトデータと前記第1誤り訂正符号との組、または前記第1ライトデータの各ビットが反転された第2ライトデータと前記第1誤り訂正符号の各ビットが反転された第2誤り訂正符号との組のいずれかを前記対象のページ場所に書き込み、
    前記不揮発性メモリ内の読み出し対象のページ場所からデータおよび誤り訂正符号を読み出し、前記読み出されたデータと前記読み出された誤り訂正符号とを使用して、前記読み出されたデータの誤り訂正のための誤り訂正復号処理を実行し、
    前記誤り訂正復号処理で復号失敗が起きた場合、前記読み出されたデータの各ビットが反転された反転データと前記読み出された誤り訂正符号の各ビットが反転された反転誤り訂正符号とを使用して前記誤り訂正復号処理を再実行するように構成されている、
    メモリシステム。
  2. 前記コントローラは、
    前記第1ライトデータを圧縮し、
    前記第1ライトデータを圧縮することによって得られる、前記第1ライトデータ内の空き領域を、全て“1”のビット列または全て“0”のビット列を含むパディングデータでパディングする処理を実行し、
    予め決められた複数のパディング用の位置の間で、パディングデータの位置をローテーションさせ、
    前記圧縮された第1ライトデータと前記パディングデータとを含むデータ系列を、前記第1ライトデータとして扱うように構成されている請求項1記載のメモリシステム。
  3. 前記コントローラは、
    前記圧縮された第1ライトデータに含まれる“1”のビットの数が、前記圧縮された第1ライトデータに含まれる“0”のビットの数よりも多い場合、前記全て“1”のビット列でパディングする処理を実行し、
    前記圧縮された第1ライトデータに含まれる“0”のビットの数が、前記圧縮された第1ライトデータに含まれる“1”のビットの数よりも多い場合、前記全て“0”のビット列でパディングする処理を実行する請求項2記載のメモリシステム。
  4. 前記不揮発性メモリは、メモリセル当たりに2ビットのデータを格納可能に構成され、
    前記下位ページデータおよび前記上位ページデータを含む、データの2つのページが、前記同一物理ページに割り当てられた、前記下位ページおよび前記上位ページを含む2つのページ場所に書き込まれる請求項1記載のメモリシステム。
  5. 前記不揮発性メモリは、メモリセル当たりに3ビットのデータを格納可能に構成され、
    前記下位ページデータ、中位ページデータ、および前記上位ページデータを含む、データの3つのページが、前記同一物理ページに割り当てられた、前記下位ページ、中位ページおよび前記上位ページを含む3つのページ場所に書き込まれる請求項1記載のメモリシステム。
  6. 不揮発性メモリと、
    前記不揮発性メモリに電気的に接続され、少なくとも下位ページデータと上位ページデータとを含むデータの複数のページを、前記不揮発性メモリの同一物理ページに割り当てられる少なくとも下位ページと上位ページとを含む複数のページ場所に書き込むコントローラとを具備し、前記コントローラは、
    1ページ分のサイズを有する第1ライトデータのための第1誤り訂正符号を生成し、
    前記第1ライトデータに“0”のビットまたは“1”のビットのどちらが多く含まれるかを判定し、
    前記判定の結果と、前記第1ライトデータが書き込まれるべき対象のページ場所とに基づいて、前記第1ライトデータと前記第1誤り訂正符号との組、または前記第1ライトデータの各ビットが反転された第2ライトデータと前記第1誤り訂正符号との組のいずれかを前記対象のページ場所に書き込み、
    前記不揮発性メモリ内の読み出し対象のページ場所からデータおよび誤り訂正符号を読み出し、前記読み出されたデータと前記読み出された誤り訂正符号とを使用して、前記読み出されたデータの誤り訂正のための誤り訂正復号処理を実行し、
    前記誤り訂正復号処理で復号失敗が起きた場合、前記読み出されたデータの各ビットが反転された反転データと前記読み出された誤り訂正符号とを使用して前記誤り訂正復号処理を再実行するように構成されている、
    メモリシステム。
  7. 前記コントローラは、
    前記第1ライトデータを圧縮し、
    前記第1ライトデータを圧縮することによって得られる、前記第1ライトデータ内の空き領域を、全て“1”のビット列または全て“0”のビット列を含むパディングデータでパディングする処理を実行し、
    予め決められた複数のパディング用の位置の間で、パディングデータの位置をローテーションさせ、
    前記圧縮された第1ライトデータと前記パディングデータとを含むデータ系列を、前記第1ライトデータとして扱うように構成されている請求項6記載のメモリシステム。
  8. 前記コントローラは、
    前記圧縮された第1ライトデータに含まれる“1”のビットの数が、前記圧縮された第1ライトデータに含まれる“0”のビットの数よりも多い場合、前記全て“1”のビット列でパディングする処理を実行し、
    前記圧縮された第1ライトデータに含まれる“0”のビットの数が、前記圧縮された第1ライトデータに含まれる“1”のビットの数よりも多い場合、前記全て“0”のビット列でパディングする処理を実行する請求項7記載のメモリシステム。
  9. 前記不揮発性メモリは、メモリセル当たりに2ビットのデータを格納可能に構成され、
    前記下位ページデータおよび前記上位ページデータを含む、データの2つのページが、前記同一物理ページに割り当てられた、前記下位ページおよび前記上位ページを含む2つのページ場所に書き込まれる請求項6記載のメモリシステム。
  10. 前記不揮発性メモリは、メモリセル当たりに3ビットのデータを格納可能に構成され、
    前記下位ページデータ、中位ページデータ、および前記上位ページデータを含む、データの3つのページが、前記同一物理ページに割り当てられた、前記下位ページ、中位ページおよび前記上位ページを含む3つのページ場所に書き込まれる請求項6記載のメモリシステム。
  11. 少なくとも下位ページデータと上位ページデータとを含むデータの複数のページを、不揮発性メモリの同一物理ページに割り当てられる少なくとも下位ページと上位ページとを含む複数のページ場所に書き込む制御方法であって、
    1ページ分のサイズを有する第1ライトデータのための第1誤り訂正符号を生成することと、
    前記第1ライトデータと前記第1誤り訂正符号とを含むデータ系列に“0”のビットまたは“1”のビットのどちらが多く含まれるかを判定することと、
    前記判定の結果と、前記第1ライトデータが書き込まれるべき対象のページ場所とに基づいて、前記第1ライトデータと前記第1誤り訂正符号との組、または前記第1ライトデータの各ビットが反転された第2ライトデータと前記第1誤り訂正符号の各ビットが反転された第2誤り訂正符号との組のいずれかを前記対象のページ場所に書き込むことと、
    前記不揮発性メモリ内の読み出し対象のページ場所からデータおよび誤り訂正符号を読み出し、前記読み出されたデータと前記読み出された誤り訂正符号とを使用して、前記読み出されたデータの誤り訂正のための誤り訂正復号処理を実行することと、
    前記誤り訂正復号処理で復号失敗が起きた場合、前記読み出されたデータの各ビットが反転された反転データと前記読み出された誤り訂正符号の各ビットが反転された反転誤り訂正符号とを使用して前記誤り訂正復号処理を再実行することとを具備する制御方法。
  12. 前記第1ライトデータを圧縮することと、
    前記第1ライトデータを圧縮することによって得られる、前記第1ライトデータ内の空き領域を、全て“1”のビット列または全て“0”のビット列を含むパディングデータでパディングする処理を実行することと、
    前記パディングデータの位置が複数の異なるパディング用の位置の間でローテーションされるように前記パディングデータの位置を調整することと、
    前記圧縮された第1ライトデータと前記パディングデータとを含むデータ系列を、前記第1ライトデータとして扱うこととをさらに具備する請求項11記載の制御方法。
  13. 少なくとも下位ページデータと上位ページデータとを含むデータの複数のページを、不揮発性メモリの同一物理ページに割り当てられる少なくとも下位ページと上位ページとを含む複数のページ場所に書き込む制御方法であって、
    1ページ分のサイズを有する第1ライトデータのための第1誤り訂正符号を生成することと、
    前記第1ライトデータに“0”のビットまたは“1”のビットのどちらが多く含まれるかを判定することと、
    前記判定の結果と、前記第1ライトデータが書き込まれるべき対象のページ場所とに基づいて、前記第1ライトデータと前記第1誤り訂正符号との組、または前記第1ライトデータの各ビットが反転された第2ライトデータと前記第1誤り訂正符号との組のいずれかを前記対象のページ場所に書き込むことと、
    前記不揮発性メモリ内の読み出し対象のページ場所からデータおよび誤り訂正符号を読み出し、前記読み出されたデータと前記読み出された誤り訂正符号とを使用して、前記読み出されたデータの誤り訂正のための誤り訂正復号処理を実行することと、
    前記誤り訂正復号処理で復号失敗が起きた場合、前記読み出されたデータの各ビットが反転された反転データと前記読み出された誤り訂正符号とを使用して前記誤り訂正復号処理を再実行することとを具備する制御方法。
  14. 前記第1ライトデータを圧縮することと、
    前記第1ライトデータを圧縮することによって得られる、前記第1ライトデータ内の空き領域を、全て“1”のビット列または全て“0”のビット列を含むパディングデータでパディングする処理を実行することと、
    前記パディングデータの位置が複数の異なるパディング用の位置の間でローテーションされるように前記パディングデータの位置を調整することと、
    前記圧縮された第1ライトデータと前記パディングデータとを含むデータ系列を、前記第1ライトデータとして扱うこととをさらに具備する請求項13記載の制御方法。
JP2016176835A 2016-09-09 2016-09-09 メモリシステムおよび制御方法 Active JP6606039B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2016176835A JP6606039B2 (ja) 2016-09-09 2016-09-09 メモリシステムおよび制御方法
US15/441,031 US10529417B2 (en) 2016-09-09 2017-02-23 Storage device that inverts bits of data written into a nonvolatile memory thereof

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016176835A JP6606039B2 (ja) 2016-09-09 2016-09-09 メモリシステムおよび制御方法

Publications (2)

Publication Number Publication Date
JP2018041403A true JP2018041403A (ja) 2018-03-15
JP6606039B2 JP6606039B2 (ja) 2019-11-13

Family

ID=61560935

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016176835A Active JP6606039B2 (ja) 2016-09-09 2016-09-09 メモリシステムおよび制御方法

Country Status (2)

Country Link
US (1) US10529417B2 (ja)
JP (1) JP6606039B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019169216A (ja) * 2018-03-22 2019-10-03 東芝メモリ株式会社 メモリシステム
CN110798225A (zh) * 2019-11-06 2020-02-14 深圳大普微电子科技有限公司 一种数据纠错方法、装置、设备及可读存储介质

Families Citing this family (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102457144B1 (ko) * 2017-04-18 2022-10-20 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
US10496548B2 (en) 2018-02-07 2019-12-03 Alibaba Group Holding Limited Method and system for user-space storage I/O stack with user-space flash translation layer
JP7182373B2 (ja) * 2018-04-24 2022-12-02 ラピスセミコンダクタ株式会社 半導体集積回路、記憶装置及びエラー訂正方法
WO2019222958A1 (en) 2018-05-24 2019-11-28 Alibaba Group Holding Limited System and method for flash storage management using multiple open page stripes
US10921992B2 (en) 2018-06-25 2021-02-16 Alibaba Group Holding Limited Method and system for data placement in a hard disk drive based on access frequency for improved IOPS and utilization efficiency
US11816043B2 (en) 2018-06-25 2023-11-14 Alibaba Group Holding Limited System and method for managing resources of a storage device and quantifying the cost of I/O requests
US10996886B2 (en) 2018-08-02 2021-05-04 Alibaba Group Holding Limited Method and system for facilitating atomicity and latency assurance on variable sized I/O
US11327929B2 (en) 2018-09-17 2022-05-10 Alibaba Group Holding Limited Method and system for reduced data movement compression using in-storage computing and a customized file system
US10951232B2 (en) * 2018-11-26 2021-03-16 Micron Technology, Inc. Error correction bit flipping scheme
TWI671750B (zh) 2018-11-28 2019-09-11 華邦電子股份有限公司 記憶體的控制方法及非暫態電腦可讀媒體
KR20200071484A (ko) 2018-12-11 2020-06-19 삼성전자주식회사 불휘발성 메모리 장치 및 불휘발성 메모리 장치를 포함하는 메모리 시스템
US10977122B2 (en) 2018-12-31 2021-04-13 Alibaba Group Holding Limited System and method for facilitating differentiated error correction in high-density flash devices
US11061735B2 (en) 2019-01-02 2021-07-13 Alibaba Group Holding Limited System and method for offloading computation to storage nodes in distributed system
US11132291B2 (en) 2019-01-04 2021-09-28 Alibaba Group Holding Limited System and method of FPGA-executed flash translation layer in multiple solid state drives
US11200337B2 (en) 2019-02-11 2021-12-14 Alibaba Group Holding Limited System and method for user data isolation
US10937495B2 (en) 2019-07-02 2021-03-02 Winbond Electronics Corp. Resistive memory apparatus and method for writing data thereof
US10860223B1 (en) 2019-07-18 2020-12-08 Alibaba Group Holding Limited Method and system for enhancing a distributed storage system by decoupling computation and network tasks
US11074124B2 (en) * 2019-07-23 2021-07-27 Alibaba Group Holding Limited Method and system for enhancing throughput of big data analysis in a NAND-based read source storage
US10838811B1 (en) * 2019-08-14 2020-11-17 Silicon Motion, Inc. Non-volatile memory write method using data protection with aid of pre-calculation information rotation, and associated apparatus
US10714157B1 (en) 2019-08-27 2020-07-14 Winbond Electronics Corp. Non-volatile memory and reset method thereof
US11126561B2 (en) 2019-10-01 2021-09-21 Alibaba Group Holding Limited Method and system for organizing NAND blocks and placing data to facilitate high-throughput for random writes in a solid state drive
US11617282B2 (en) 2019-10-01 2023-03-28 Alibaba Group Holding Limited System and method for reshaping power budget of cabinet to facilitate improved deployment density of servers
US10964390B1 (en) 2019-12-10 2021-03-30 Western Digital Technologies, Inc. Skip coding for fractional bit-per-cell NAND memories
US11449455B2 (en) 2020-01-15 2022-09-20 Alibaba Group Holding Limited Method and system for facilitating a high-capacity object storage system with configuration agility and mixed deployment flexibility
KR102399197B1 (ko) 2020-01-17 2022-05-18 경희대학교 산학협력단 이상치 인지 근사적 코딩을 수행하는 전자 장치 그리고 그것의 동작 방법
US11379447B2 (en) 2020-02-06 2022-07-05 Alibaba Group Holding Limited Method and system for enhancing IOPS of a hard disk drive system based on storing metadata in host volatile memory and data in non-volatile memory using a shared controller
US11200114B2 (en) 2020-03-17 2021-12-14 Alibaba Group Holding Limited System and method for facilitating elastic error correction code in memory
US11449386B2 (en) 2020-03-20 2022-09-20 Alibaba Group Holding Limited Method and system for optimizing persistent memory on data retention, endurance, and performance for host memory
US11385833B2 (en) 2020-04-20 2022-07-12 Alibaba Group Holding Limited Method and system for facilitating a light-weight garbage collection with a reduced utilization of resources
US11301173B2 (en) 2020-04-20 2022-04-12 Alibaba Group Holding Limited Method and system for facilitating evaluation of data access frequency and allocation of storage device resources
US11281575B2 (en) 2020-05-11 2022-03-22 Alibaba Group Holding Limited Method and system for facilitating data placement and control of physical addresses with multi-queue I/O blocks
US11461262B2 (en) 2020-05-13 2022-10-04 Alibaba Group Holding Limited Method and system for facilitating a converged computation and storage node in a distributed storage system
US11494115B2 (en) 2020-05-13 2022-11-08 Alibaba Group Holding Limited System method for facilitating memory media as file storage device based on real-time hashing by performing integrity check with a cyclical redundancy check (CRC)
US11218165B2 (en) 2020-05-15 2022-01-04 Alibaba Group Holding Limited Memory-mapped two-dimensional error correction code for multi-bit error tolerance in DRAM
US11556277B2 (en) 2020-05-19 2023-01-17 Alibaba Group Holding Limited System and method for facilitating improved performance in ordering key-value storage with input/output stack simplification
US11507499B2 (en) 2020-05-19 2022-11-22 Alibaba Group Holding Limited System and method for facilitating mitigation of read/write amplification in data compression
US11263132B2 (en) 2020-06-11 2022-03-01 Alibaba Group Holding Limited Method and system for facilitating log-structure data organization
US11422931B2 (en) 2020-06-17 2022-08-23 Alibaba Group Holding Limited Method and system for facilitating a physically isolated storage unit for multi-tenancy virtualization
US11354200B2 (en) 2020-06-17 2022-06-07 Alibaba Group Holding Limited Method and system for facilitating data recovery and version rollback in a storage device
US11354233B2 (en) 2020-07-27 2022-06-07 Alibaba Group Holding Limited Method and system for facilitating fast crash recovery in a storage device
US11372774B2 (en) 2020-08-24 2022-06-28 Alibaba Group Holding Limited Method and system for a solid state drive with on-chip memory integration
US11487465B2 (en) 2020-12-11 2022-11-01 Alibaba Group Holding Limited Method and system for a local storage engine collaborating with a solid state drive controller
US11734115B2 (en) 2020-12-28 2023-08-22 Alibaba Group Holding Limited Method and system for facilitating write latency reduction in a queue depth of one scenario
US11416365B2 (en) 2020-12-30 2022-08-16 Alibaba Group Holding Limited Method and system for open NAND block detection and correction in an open-channel SSD
US11726699B2 (en) 2021-03-30 2023-08-15 Alibaba Singapore Holding Private Limited Method and system for facilitating multi-stream sequential read performance improvement with reduced read amplification
US11914887B2 (en) * 2021-04-14 2024-02-27 Macronix International Co., Ltd. Storage device and data accessing method using multi-level cell
US11461173B1 (en) 2021-04-21 2022-10-04 Alibaba Singapore Holding Private Limited Method and system for facilitating efficient data compression based on error correction code and reorganization of data placement
US11476874B1 (en) 2021-05-14 2022-10-18 Alibaba Singapore Holding Private Limited Method and system for facilitating a storage server with hybrid memory for journaling and data storage
WO2023055459A1 (en) * 2021-09-29 2023-04-06 Micron Technology, Inc. Early detection of compression status using inline metadata
KR102532038B1 (ko) * 2021-12-15 2023-05-12 삼성전자주식회사 에러 정정 코드(ecc) 디코딩 방법 및 이를 수행하는 메모리 시스템

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101292299B (zh) 2005-10-17 2013-02-06 瑞萨电子株式会社 半导体器件
KR101292574B1 (ko) * 2007-10-08 2013-08-16 삼성전자주식회사 멀티 비트 프로그래밍 장치 및 방법
KR100857252B1 (ko) 2007-12-27 2008-09-05 (주)인디링스 마모도를 비트 수준에서 평준화하는 플래시 메모리 장치 및플래시 메모리 프로그래밍 방법
US7855913B2 (en) * 2008-06-10 2010-12-21 Micron Technology, Inc. Dynamically configurable MLC state assignment
WO2010002948A1 (en) 2008-07-01 2010-01-07 Lsi Corporation Methods and apparatus for soft demapping and intercell interference mitigation in flash memories
US7729166B2 (en) * 2008-07-02 2010-06-01 Mosaid Technologies Incorporated Multiple-bit per cell (MBC) non-volatile memory apparatus and system having polarity control and method of programming same
JP4358299B2 (ja) 2009-04-24 2009-11-04 株式会社東芝 メモリコントローラ及び半導体装置
US8503238B1 (en) * 2010-07-21 2013-08-06 Sk Hynix Memory Solutions Inc. Error recovery for flash memory
US8738848B2 (en) * 2010-12-28 2014-05-27 OCZ Storage Solutions Inc. Methods, storage devices, and systems for promoting the endurance of non-volatile solid-state memory components
US8954651B2 (en) * 2011-11-14 2015-02-10 Dell Products L.P. System and method for data inversion in a storage resource
WO2014205286A1 (en) * 2013-06-19 2014-12-24 Exablox Corporation Data scrubbing in cluster-based storage systems
US20150067436A1 (en) 2013-09-03 2015-03-05 Sandisk Technologies Inc. Nonvolatile Memory System Compression
US9323607B2 (en) * 2014-04-29 2016-04-26 Seagate Technology Llc Data recovery once ECC fails to correct the data
US10089177B2 (en) * 2014-06-30 2018-10-02 Sandisk Technologies Llc Multi-stage decoder
CN104932951B (zh) * 2015-07-12 2017-09-05 符方晓 一种nand闪存出现ecc无法纠错时的数据恢复方法
US10256842B2 (en) * 2016-03-03 2019-04-09 Intel Corporation Technologies for correcting flipped bits for an error correction decode process

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019169216A (ja) * 2018-03-22 2019-10-03 東芝メモリ株式会社 メモリシステム
CN110798225A (zh) * 2019-11-06 2020-02-14 深圳大普微电子科技有限公司 一种数据纠错方法、装置、设备及可读存储介质

Also Published As

Publication number Publication date
US20180076828A1 (en) 2018-03-15
US10529417B2 (en) 2020-01-07
JP6606039B2 (ja) 2019-11-13

Similar Documents

Publication Publication Date Title
JP6606039B2 (ja) メモリシステムおよび制御方法
US11036628B2 (en) Storage system having a host directly manage physical data locations of storage device
US9768808B2 (en) Method for modifying device-specific variable error correction settings
US20160299812A1 (en) Device-Specific Variable Error Correction
US11847317B2 (en) Managing bin placement for block families of a memory device based on trigger metric valves
US20160299844A1 (en) Mapping Logical Groups of Data to Physical Locations In Memory
US10324785B2 (en) Decoder using low-density parity-check code and memory controller including the same
US11836392B2 (en) Relocating data to low latency memory
KR20220045343A (ko) 데이터 처리 시스템 내 데이터 전송에서 발생한 에러를 정정하는 장치 및 방법
CN113314179A (zh) 用于执行读取操作的存储器系统及其操作方法
KR20170012006A (ko) 메모리 컨트롤러와 이를 포함하는 메모리 시스템
KR20210121654A (ko) 메모리 시스템의 데이터 에러를 복구하는 장치 및 방법
US11662911B2 (en) Memory system and operating method thereof
KR20220077041A (ko) 메모리 시스템 내 저장된 데이터를 유지하는 장치 및 방법
US11914510B2 (en) Layer interleaving in multi-layered memory
KR20200092252A (ko) 최적의 ssd 내구성을 위한 블록 마모 레벨링의 균형화
US11705208B2 (en) Read level calibration in memory devices using embedded servo cells
US11966638B2 (en) Dynamic rain for zoned storage systems
US11720273B2 (en) Codeword error leveling for 3DXP memory devices
US11861208B2 (en) Performing data operations on grouped memory cells
US11126545B2 (en) Memory system and operating method thereof
US20210373787A1 (en) Changing of memory components to be used for a stripe based on an endurance condition
US10768821B2 (en) Memory system and method of operating the same
KR20220107733A (ko) 보호모드를 지원하는 비휘발성 메모리 장치 및 그를 포함하는 메모리 시스템
CN113126899A (zh) 完全多平面操作启用

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20170531

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20180830

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20181005

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190627

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190709

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190909

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190917

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20191017

R150 Certificate of patent or registration of utility model

Ref document number: 6606039

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350