JP6725375B2 - メモリシステムおよび方法 - Google Patents

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

Info

Publication number
JP6725375B2
JP6725375B2 JP2016179372A JP2016179372A JP6725375B2 JP 6725375 B2 JP6725375 B2 JP 6725375B2 JP 2016179372 A JP2016179372 A JP 2016179372A JP 2016179372 A JP2016179372 A JP 2016179372A JP 6725375 B2 JP6725375 B2 JP 6725375B2
Authority
JP
Japan
Prior art keywords
data
read
value
code rate
voltage
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.)
Active
Application number
JP2016179372A
Other languages
English (en)
Other versions
JP2018045744A (ja
Inventor
植木 克彦
克彦 植木
黒田 純夫
純夫 黒田
靖之 小沢
靖之 小沢
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
Kioxia 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 Kioxia Corp filed Critical Kioxia Corp
Priority to JP2016179372A priority Critical patent/JP6725375B2/ja
Priority to US15/449,383 priority patent/US10261857B2/en
Publication of JP2018045744A publication Critical patent/JP2018045744A/ja
Priority to US16/380,003 priority patent/US10789125B2/en
Application granted granted Critical
Publication of JP6725375B2 publication Critical patent/JP6725375B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1048Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/073Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • G06F11/0754Error or fault detection not based on redundancy by exceeding limits
    • G06F11/076Error or fault detection not based on redundancy by exceeding limits by exceeding a count or rate limit, e.g. word- or bit count limit
    • 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/26Sensing 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/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
    • 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
    • H03M13/1105Decoding
    • 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/35Unequal or adaptive error protection, e.g. by providing a different level of protection according to significance of source information or by adapting the coding according to the change of transmission channel characteristics
    • H03M13/353Adaptation to the channel
    • 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/61Aspects and characteristics of methods and arrangements for error correction or error detection, not provided for otherwise
    • H03M13/611Specific encoding aspects, e.g. encoding by means of decoding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Read Only Memory (AREA)
  • Detection And Correction Of Errors (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Description

本実施形態は、メモリシステムおよび方法に関する。
NAND型のフラッシュメモリなどの不揮発性メモリを用いたメモリシステムにおいては、プログラミング/イレースのサイクル(P/Eサイクル)を繰り返すことにより不揮発性メモリのメモリセルが物理的に疲弊する。これにより、リードエラーが発生する確率が高まる。リードエラーに対応するために、データに予めエラー訂正符号を付加して書き込みを実行し、リード時には、エラー訂正によって正しいデータに復元することが一般的に行われている。
エラー訂正符号の方式として、コードレート可変方式がある。この方式によれば、コードレートを変更することによって、エラー訂正能力を変更することが可能である。メモリシステムにコードレート可変方式が適用される場合、コードレートが減少するに従ってエラー訂正能力が強化される。しかしながら、コードレートが減少するに従って符号を除いた正味のデータを保持できる容量が減少する。
特許第5364911号公報 特表2015−524975号公報 特表2013−542533号公報 米国特許第8966347号明細書
一つの実施形態は、コードレートを効率的に制御することができるメモリシステムを提供する。
一つの実施形態によれば、メモリシステムは、複数のメモリセルを備える記憶領域を備えるメモリと、コントローラとを備える。前記メモリは、リード電圧が設定可能である。前記メモリは、前記複数のメモリセルのそれぞれのしきい値電圧と前記リード電圧との比較に基づいて前記記憶領域内のデータをリードして出力する。前記コントローラは、コードレートが可変の方式において第1コードレートで第1データを符号化し、第2データを前記記憶領域に書き込ませる。前記第2データは符号化された前記第1データである。前記コントローラは、複数回の第1リードを実行する。各第1リードは前記リード電圧の設定値を変更して前記記憶領域に対してリードする処理である。前記コントローラは、前記複数回の第1リードの結果に基づいて前記しきい値電圧の変化の度合いに対応する指標値を取得する。前記コントローラは、前記指標値が第1の判定しきい値より大きく、かつ第2の判定しきい値より小さい場合、前記記憶領域のコードレートを前記第1コードレートから第2コードレートに変更する。前記コントローラは、前記指標値が前記第2の判定しきい値よりも大きい場合、前記記憶領域の前記コードレートを前記第1コードレートから第3コードレートに変更する。前記第2の判定しきい値は前記第1の判定しきい値よりも大きい。前記第2コードレートは前記第1コードレートよりも小さい。前記第3コードレートは前記第2コードレートより小さい。前記コントローラは、前記第1の判定しきい値および前記第2の判定しきい値と、前記第2コードレートおよび前記第3コードレートと、を前記第1コードレートに基づいて取得する。
図1は、第1の実施形態のメモリシステムの構成例を示す図である。 図2は、第1の実施形態のメモリチップの構成例を説明する図である。 図3は、第1の実施形態のブロックの構成例を示す回路図である。 図4は、2ビット記憶方式が採用された場合におけるメモリセルのしきい値電圧に対する分布を示す図である。 図5は、変化後の各分布の例を説明するための図である。 図6は、第1の実施形態の電圧情報の一例を示す図である。 図7は、第1の実施形態の判定情報の一例を示す図である。 図8は、コードレート情報の一例を示す図である。 図9は、第1の実施形態のメモリシステムの動作を説明するフローチャートである。 図10は、Vthトラッキングを説明するための図である。 図11は、第2の実施形態のメモリシステムの動作の一例を説明するフローチャートである。 図12は、第3の実施形態のカウント対象のメモリセルを説明するための図である。 図13は、第3の実施形態のメモリシステムの動作を説明するフローチャートである。 図14は、第4の実施形態のメモリシステムの動作を説明するフローチャートである。 図15は、各電圧値をV_EAとV_BCとを座標成分とする平面座標にプロットしたグラフを示す図である。 図16は、メモリシステムの実装例を示す図である。
以下に添付図面を参照して、実施形態にかかるメモリシステムおよび方法を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
(第1の実施形態)
図1は、第1の実施形態のメモリシステムの構成例を示す図である。メモリシステム100は、ホスト装置200と接続される。ホスト装置200は、例えば、サーバ、パーソナルコンピュータ、またはモバイル型の情報処理装置などが該当する。メモリシステム100は、ホスト装置200の外部記憶装置として機能する。ホスト装置200は、メモリシステム100に対してアクセス要求(リード要求およびライト要求)を発行することができる。メモリシステム100とホスト装置200とを接続する通信インタフェースが準拠する規格は、特定の規格に限定されない。例えば、通信インタフェースは、ATA(Advanced Technology Attachment)規格、SAS(Serial Attached SCSI)規格、PCI(Peripheral Components Interconnect) Express規格などに準拠する。
メモリシステム100は、NAND型のフラッシュメモリ(NANDメモリ)1と、ホスト装置200とNANDメモリ1との間のデータ転送を実行するメモリコントローラ2と、を備えている。なお、メモリシステム100は、NANDメモリ1の代わりに他の種類のメモリを具備してもよい。例えば、メモリシステム100は、NANDメモリ1の代わりにNOR型のフラッシュメモリを具備してもよい。
NANDメモリ1は、複数(ここでは4つ)の、半導体メモリとしてのメモリチップ11により構成される。また、メモリコントローラ2は2個のチャネル(ch.0、ch.1)を備えている。1個または3個以上のチャネルを備えてもよい。各チャネルには夫々2つのメモリチップ11が接続されている。各チャネルは、制御信号線、I/O信号線、CE(チップイネーブル)信号線、RY/BY信号線を含んで構成される。I/O信号線は、データ、アドレス、および各種指示を伝送するための信号線である。メモリコントローラ2は、I/O信号線を介して、リード指示、プログラム指示、およびイレース指示をメモリチップ11に送信することができる。制御信号線は、WE(ライトイネーブル)信号線、RE(リードイネーブル)信号線、CLE(コマンドラッチイネーブル)信号線、ALE(アドレスラッチイネーブル)信号線、WP(ライトプロテクト)信号線等を含む。
図2は、各メモリチップ11の構成例を説明する図である。メモリチップ11は、I/O信号処理回路110、制御信号処理回路111、チップ制御回路112、コマンドレジスタ113、アドレスレジスタ114、カラムデコーダ115、データレジスタ116、センスアンプ117、メモリセルアレイ118、ロウデコーダ119、およびRY/BY生成回路120を備えている。
チップ制御回路112は、制御信号処理回路111を介して受信する各種制御信号に基づいて状態遷移する回路である。チップ制御回路112は、メモリチップ11全体の動作を制御する。RY/BY生成回路120は、チップ制御回路112による制御の下でRY/BY信号線の状態をレディー状態(RY)とビジー状態(BY)との間で遷移させる。
I/O信号処理回路110は、メモリコントローラ2との間でI/O信号を送受信するためのバッファ回路である。I/O信号処理回路110がラッチしたコマンド、アクセス先を指定するアドレス、データは、夫々、アドレスレジスタ114、コマンドレジスタ113、データレジスタ116に振り分けられて格納される。
アドレスレジスタ114に格納されたアドレスは、チップ番号、ロウアドレス、およびカラムアドレスを含んでいる。チップ番号は、各メモリチップ11を区別するための識別情報である。チップ番号はチップ制御回路112、ロウアドレスはロウデコーダ119、カラムアドレスはカラムデコーダ115に夫々読み出される。
制御信号処理回路111は、制御信号の入力を受け付ける。制御信号処理回路111は、受け付けた制御信号に基づいて、I/O信号処理回路110が受け付けたI/O信号の格納先のレジスタの振り分けを実行する。また、制御信号処理回路111は、受け付けた制御信号をチップ制御回路112に転送する。
メモリセルアレイ118は、複数のブロックを備える。ブロックは、イレースの物理的な実行単位に対応する記憶領域である。即ち、1つのブロックに格納されている全てのデータは、一括してイレースされる。
図3は、メモリセルアレイ118に含まれる1個のブロックの構成例を示す回路図である。図示するように、各ブロックは、X方向に沿って順に配列された(p+1)個のNANDストリングを備えている(p≧0)。(p+1)個のNANDストリングにそれぞれ含まれる選択トランジスタST1は、ドレインがビット線BL0〜BLpに接続され、ゲートが選択ゲート線SGDに共通接続されている。また、選択トランジスタST2は、ソースがソース線SLに共通接続され、ゲートが選択ゲート線SGSに共通接続されている。
各メモリセルトランジスタMTは、半導体基板上に形成された積層ゲート構造を備えたMOSFET(Metal Oxide Semiconductor Field Effect Transistor)から構成される。積層ゲート構造は、半導体基板上にトンネル酸化膜を介在して形成されたフローティングゲート、及びフローティングゲート上にゲート間絶縁膜を介在して形成された制御ゲート電極を含んでいる。フローティングゲートに蓄えられる電子の数に応じてしきい値電圧が変化する。メモリセルトランジスタMTは、しきい値電圧の違いに応じてデータを記憶する。即ち、メモリセルトランジスタMTは、フローティングゲートに、データに応じた量の電荷を保持する。
各NANDストリングにおいて、(q+1)個のメモリセルトランジスタMTは、選択トランジスタST1のソースと選択トランジスタST2のドレインとの間に、それぞれの電流経路が直列接続されるように配置されている。そして、最もドレイン側に位置するメモリセルトランジスタMTから順に、制御ゲート電極がワード線WL0〜WLqにそれぞれ接続されている。従って、ワード線WL0に接続されたメモリセルトランジスタMTのドレインは選択トランジスタST1のソースに接続され、ワード線WLqに接続されたメモリセルトランジスタMTのソースは選択トランジスタST2のドレインに接続されている。
ワード線WL0〜WLqは、ブロック内のNANDストリング間で、メモリセルトランジスタMTの制御ゲート電極を共通に接続している。つまり、ブロック内において同一行にあるメモリセルトランジスタMTの制御ゲート電極は、同一のワード線WLに接続される。各メモリセルトランジスタMTに1ビットの値を保持可能に構成される場合には、同一のワード線WLに接続される(p+1)個のメモリセルトランジスタMTは1ページとして取り扱われ、このページごとにデータのプログラム及びデータのリードが行われる。
各メモリセルトランジスタMTに複数ビットの値を保持可能に構成される場合がある。例えば、各メモリセルトランジスタMTがn(n≧2)ビットの値を格納可能な場合、ワード線当たりの記憶容量はnページ分のサイズに等しくなる。ここでは一例として、各メモリセルトランジスタMTが2ビットの値の記憶を行う記憶方式(以下、2ビット記憶方式)について説明する。2ビット記憶方式によれば、各ワード線に2ページ分のデータが保持される。1つのワード線によって構成される2つのページのうち、先に書き込みがなされるページをロアーページ、ロアーページの後から書き込みがなされるページをアッパーページと表記する。また、メモリセルトランジスタMTを、単にメモリセルと表記する。なお、1つのワード線によって構成される複数または全てのページに対して一括にプログラムが実行されるモードがあってもよい。
図4は、2ビット記憶方式が採用された場合におけるメモリセルのしきい値電圧に対する分布を示す図である。本図において、横軸はしきい値電圧を表し、縦軸はメモリセル数を表す。2ビット記憶方式によれば、各メモリセルは、アッパーページに属するデータ“x”とロアーページに属するデータ“y”とで定義される4値データ“xy”を保持可能である。データ“x”およびデータ“y”の値は、符号“0”または符号“1”である。各メモリセルのしきい値電圧が、分布E、分布A、分布B、および分布Cの4つのグループの何れかに属するように制御される。各分布と4値データ“xy”のデータ値との対応は、予め設定される。例えば、分布Eにはデータ値“11”が割り当てられる。分布Aにはデータ値“01”が割り当てられる。分布Bにはデータ値“00”が割り当てられる。分布Cにはデータ値“10”が割り当てられる。なお、各分布とデータ値との対応は、上記に限定されない。一例では、隣接する分布間のハミング距離が1となるように各分布に各データ値が割り当てられる。
図2に戻り、ロウデコーダ119、カラムデコーダ115、データレジスタ116、およびセンスアンプ117は、メモリセルアレイ118に対する周辺回路を構成する。周辺回路は、チップ制御回路112による制御に基づいて、メモリセルアレイ118に対するアクセス(リード、プログラミング、およびイレース)を実行する。
例えばプログラミング時には、カラムデコーダ115は、カラムアドレスに対応したビット線を選択して活性化する。センスアンプ117は、カラムデコーダ115により選択されたビット線の電位を0ボルトとする。ロウデコーダ119は、ロウアドレスに対応したワード線に、プログラミングパルスを印加する。すると、選択されたビット線および選択されたワード線との交点に位置するメモリセルのフローティングゲートに電子が注入され、その結果、フローティングゲートのしきい値電圧が上昇する。センスアンプ117は、プログラミングパルスが印加される毎に、しきい値電圧がデータレジスタ116に格納されているデータに応じた電圧に到達したか否かを確認する。センスアンプ117は、しきい値電圧がデータに応じた電圧に到達するまで、ロウデコーダ119にプログラムパルスの印加を継続させる。
リード時においては、センスアンプ117は、ビット線BLに電源電位Vccをプリチャージし、ロウデコーダ119は、選択されたワード線WLにデータ値(“11”、“01”、“00”、“10”)毎の分布を特定するための複数種類の判定電位(以下、リード電圧)を順次印加する。なお、ロウデコーダ119は、非選択のワード線WLには転送電位を印加し、非選択のワード線WLに属するメモリセルを導通状態にしておく。センスアンプ117は、プリチャージにより蓄えられた電荷がどのリード電圧が印加されたときにソース線SLに流出したかを検知することによって対象のメモリセルに記憶されているデータ値を判定する。
例えば、図4に示すように、分布Eと分布Aとの間にリード電圧V_EAが設定され、分布Aと分布Bとの間にリード電圧V_ABが設定され、分布Bと分布Cとの間にリード電圧V_BCが設定される。
リード対象がロアーページである場合においては、リード電圧V_ABが判定に用いられる。センスアンプ117は、リード電圧V_ABが印加された場合にソース線SLに電荷の流出を検知したとき、対象のメモリセルはデータ値“1”を記憶していると判定する。また、センスアンプ117は、リード電圧V_ABが印加された場合にソース線SLに電荷の流出を検知しなかったとき、対象のメモリセルはデータ値“0”を記憶していると判定する。
リード対象がアッパーページである場合においては、リード電圧V_EAおよびリード電圧V_BCが判定に用いられる。センスアンプ117は、リード電圧V_EAが印加された場合に電荷の流出を検知したとき、または、リード電圧V_EAおよびリード電圧V_BCの何れが印加された場合でも電荷の流出を検知しなかったとき、対象のメモリセルはデータ値“1”を記憶していると判定する。センスアンプ117は、リード電圧V_EAが印加された場合に電荷の流出を検知せず、かつ、リード電圧V_BCが印加された場合に電荷の流出を検知したとき、対象のメモリセルはデータ値“0”を記憶していると判定する。
イレース時においては、電位発生回路(図示せず)によってメモリセルアレイ118の基板にイレース電圧が印加される。そして、ロウデコーダ119はイレース対象のブロックの全てのワード線WLを接地電位に導通させる。すると、選択されたブロック内の各メモリセルにおいては、フローティングゲートに蓄えられていた電荷が放出される。その結果、選択されたブロック内の各メモリセルの状態は消去状態(すなわちデータ値“11”を記憶している状態)に遷移する。
センスアンプ117は、リードしたデータをデータレジスタ116に格納する。データレジスタ116に格納されたデータは、データ線を通してI/O信号処理回路110に送られ、I/O信号処理回路110からメモリコントローラ2へ転送される。
なお、各リード電圧V_EA〜V_BCの値は、メモリチップ11内に設けられた不揮発性の記憶部に記憶される。例えば、メモリチップ11は、リード電圧V_EA〜V_BCの基準値(固定値)を記憶する。各リード電圧V_EA〜V_BCの基準値としては、複数のメモリチップ11で共通の値が設定されてもよいし、メモリチップ11毎に異なる基準値が設定されてもよい。また、各リード電圧V_EA〜V_BCの基準値としては、ブロック毎またはブロックとは異なる単位毎に共通の値が設定されてもよい。基準値の設定方法は特定の方法に限定されない。メモリコントローラ2は、対象のメモリチップ11に所定のコマンドを送信することによって各リード電圧の基準値を設定してもよい。
メモリチップ11においては、フローティングゲートに保持される電荷の量が時間経過とともに変化する。また、リードまたは隣接するメモリセルへのプログラムによっても、フローティングゲートに保持される電荷の量が変化する。図5は、変化後の各分布の例を説明するための図である。本図では、簡単のために、分布Aと分布Bとのみ示している。また、分布Aと分布Bとを区別して示している。この例によれば、分布Aの裾野と分布Bの裾野とが重なり合っている。分布Aの最大値がリード電圧V_ABを超えており、かつ、分布Bの最小値がリード電圧V_ABを下回っている。分布Aに属し、かつ、しきい値電圧がV_ABよりも大きいメモリセル(即ち、領域300に含まれるメモリセル)がリードされた場合、そのメモリセルは分布Bに属するとして認識される。即ち、“01”としてプログラムされたデータ値が“00”としてリードされる。分布Bに属し、かつ、しきい値電圧がV_ABよりも小さいメモリセル(即ち、領域301に含まれるメモリセル)がリードされた場合、そのメモリセルは分布Aに属するとして認識される。即ち、“00”としてプログラムされたデータ値が“01”としてリードされる。プログラム時から変化したデータ値は、メモリコントローラ2においてリード時にエラービットとして検出される。メモリコントローラ2においては、検出されたエラービットは、後述のECC(Error Checking and Correction)回路25(図1を参照)によって訂正が試みられる。
図1に戻り、さらに、メモリコントローラ2は、リード電圧の設定値を変更してデータをリードすることができる。リード電圧の設定値を変更することによって、データリード時のエラービットの数を少なくすることができる場合がある。リード電圧の設定値を変更してリードを行うことを、以降、シフトリードと表記する。
一つの例では、メモリコントローラ2は、リードしたデータの、プログラム時から変化した値をECC回路25によって訂正することによって、プログラム時のデータを復元する。メモリコントローラ2は、ECC回路25によるエラー訂正が失敗した場合、シフトリードによって再びデータをリードする。メモリコントローラ2は、シフトリードによって得られたデータに対し、再度、ECC回路25によってエラー訂正を実行することができる。シフトリードの際のリード電圧の設定値の変更方法は、特定の方法に限定されない。例えば、エラー訂正が成功するまでシフトリードが繰り返し実行され、それぞれのシフトリードでは、後述の電圧情報221に記録された電圧値が順次設定される。
なお、エラー訂正に失敗するとは、リードされたデータからプログラム時のデータを復元できないことをいう。具体的には、エラー訂正に失敗するとは、リードされたデータに含まれるエラービットが訂正できないことをいう。エラー訂正に成功するとは、リードされたデータに含まれる全てのエラービットが訂正されることをいう。
メモリコントローラ2は、ホストインタフェースコントローラ(ホストI/Fコントローラ)21、RAM(Random Access Memory)22、NANDコントローラ(NANDC)23、CPU(Central Processing Unit)24、およびECC回路25を備えている。ホストI/Fコントローラ21、RAM22、各NANDコントローラ23、CPU24、およびECC回路25は、バスで互いに接続されている。なお、メモリコントローラ2は、ホストI/Fコントローラ21、RAM22、各NANDコントローラ23、CPU24、およびECC回路25が集積された一つのIC(回路)であってもよい。また、ホストI/Fコントローラ21、RAM22、各NANDコントローラ23、CPU24、およびECC回路25の一部は、メモリコントローラ2の外部に配設されてもよい。
RAM22は、ホスト装置200とNANDメモリ1との間のデータ転送のためのバッファとして機能する。また、RAM22は、CPU24にワークエリアを提供する。また、RAM22は、各種管理情報が格納される。第1の実施形態においては、RAM22には、管理情報として、電圧情報221、判定情報222、およびコードレート情報223が格納される。これらの情報の詳細は後述する。
なお、RAM22の種類は特定の種類に限定されない。RAM22の種類として、例えば、DRAM(Dynamic Random Access Memory)またはSRAM(Static Random Access Memory)が採用可能である。
ホストI/Fコントローラ21は、CPU24による制御の下で、ホスト装置200とメモリシステム100との間の通信インタフェースの制御およびホスト装置200とRAM22との間のデータ転送の制御を実行する。
NANDコントローラ23は、各チャネル(ch.0、ch.1)を制御する。NANDコントローラ23は、CPU24による制御の下で、NANDメモリ1とRAM22との間のデータ転送の制御を実行する。
ECC回路25は、NANDメモリ1へのプログラム対象のデータに対してエラー訂正のための符号化を行ったり、NANDメモリ1からリードされたデータに対してエラー訂正を実行したりする。
ECC回路25は、コードレート可変方式に従った符号化を行う。コードレート可変方式は、必要とされる訂正能力に応じてコードレートを変更できる方式である。コードレートとは、フレームのサイズ、に対する、符号化前のデータのサイズ、の割合である。フレームとは、エラー訂正が実行される単位をいう。コードレートが小さいほど、訂正能力が高い。訂正能力とは、所定サイズのデータ(例えば1KB)あたりの訂正が可能なエラービットの数である。採用される符号の種類は特定の種類に限定されない。例えば、BCH符号またはLDPC(low-density parity-check code)が採用可能である。
CPU24は、ファームウェアに基づき、第1処理部241および第2処理部242として機能する。ファームウェアは、例えばNANDメモリ1に予め不揮発に格納され、メモリシステム100の起動時にRAM22内のワークエリアにロードされる。CPU24は、ワークエリアにロードされたファームウェアを実行する。
第1処理部241は、コードレートの制御を実行する。なお、ここでは一例として、第1処理部241は、ブロック毎にコードレートを制御することとする。コードレートの制御は、ブロック以外の任意の単位で実行され得る。例えば、複数のブロック毎にコードレートが制御されてもよいし、ブロックよりも小さい記憶領域(例えばページ)毎にコードレートが制御されてもよい。また、同一ブロック内の複数のワードラインからなるグループ単位でコードレートが制御されてもよい。また、複数のロアーページからなるグループ単位、または、複数のアッパーページからなるグループ単位でコードレートが制御されてもよい。
一般に、メモリセルの疲弊に応じてデータの値が変化しやすくなる。一方、コードレートの減少に応じて訂正能力が高くなる。したがって、メモリセルの疲弊に応じてコードレートを減少させることによって、メモリセルに対するP/Eサイクルの上限数を増やすことができる。しかしながら、コードレートを減少させると、正味のデータを保持できる容量が少なくなるため、余裕率(over-provisioned percentage)が低下する。そこで、第1処理部241は、必要以上にコードレートを減少させないために、リード電圧の最適値に応じた、必要となる訂正能力を考慮する。
リード電圧の最適値とは、RBER(Raw Bit Error Rate)が最小となるリード電圧である。RBERは、NANDメモリ1からリードされたデータにおけるエラービットの発生率である。
具体的には、第1処理部241は、リード電圧の最適値の推定のために、リード電圧の設定値を変更しながら複数回のシフトリードを実行する。そして、第1処理部241は、複数回のシフトリードの結果に応じてコードレートを減少させる。
なお、第1処理部241は、リード電圧V_EA〜V_BCのうちの任意のリード電圧について、最適値を推定してもよい。例えば、コードレートの変更の判定に用いられるデータがアッパーページにプログラムされたデータである場合には、第1処理部241は、リード電圧V_EA、V_BCのそれぞれの最適値を推定する。コードレートの変更の判定に用いられるデータがロアーページにプログラムされたデータである場合には、第1処理部241は、リード電圧V_ABの最適値を推定する。即ち、第1処理部241は、リード電圧V_EA〜V_BCのうちの一部または全部の最適値を推定し得る。
また、リード電圧の最適値の推定値は、リード電圧の真の最適値と必ずしも一致していなくてもよい。第1の実施形態では、リード電圧V_EA〜V_BCの電圧値のセットが複数、予め用意され、第1処理部241は、複数のセットから最もRBERが小さいセットに含まれる電圧値を、リード電圧の最適値の推定値とする。以降、リード電圧の最適値の推定値を、最適電圧値と表記する。
リード電圧V_EA〜V_BCの電圧値の各セットは、電圧情報221に予め記録されている。図6は、電圧情報221の一例を示す図である。図6に示すように、電圧情報221は、テーブル形式のデータ構造を有する。電圧情報221の各レコードには、リード電圧V_EA〜V_BCの電圧値のセットが記録されている。第1処理部241は、電圧情報221から一つのレコードを選択し、選択したレコードに記録された各電圧値をリード電圧としてNANDメモリ1に設定してシフトリードを実行する。第1処理部241は、レコード毎にシフトリードを実行し、シフトリード毎にECC回路25にエラー訂正を実行させる。第1処理部241は、シフトリード毎にリードされたデータに含まれるエラービットに基づいてRBERを計測し、RBERが最小であった電圧値を、最適電圧値と見なす。
なお、RBERの代わりに、RBERと相関する値であれば、任意の値が最適電圧値の選択に使用可能である。ここでは、第1処理部241は、各シフトリードにおいて、単位サイズのデータ(例えば1フレーム)をリードし、リードされた単位サイズのデータに含まれるエラービットの数を取得する。一例では、訂正されたエラービットの数がECC回路25から出力され、ECC回路25から出力されたエラービットの数を第1処理部241が取得する。別の例では、第1処理部241は、訂正前後のデータ間でXORを演算し演算結果に含まれる「1」の数をカウントすることによって、エラービットの数を取得する。第1処理部241は、取得されたエラービットの数を、最適電圧値の選択に使用する。即ち、第1処理部241は、エラービットの数が最も少なくなるセットに含まれる電圧値を最適電圧値と見なす。
また、リード電圧の設定方法は特定の方法に限定されない。一例では、第1処理部241は、リード電圧の設定値をNANDコントローラ23に通知し、NANDコントローラ23は、通知された設定値を付加したリードコマンドをNANDメモリ1に送信する。NANDメモリ1においては、周辺回路は、リードコマンドに付加された設定値をリード電圧として使用してメモリセルアレイ118に対してリードを行い、リードしたデータをメモリコントローラ2に出力する。リード電圧の設定値は、基準値からの差分を示す値によって指定されてもよいし、電圧値によって指定されてもよい。
第1処理部241は、最適電圧値の候補となる値をNANDメモリ1に順次設定してシフトリードを行う。第1処理部241は、コードレートを変更するか否かを判定するために、最適電圧値の候補を用いたシフトリードによって得られたデータを解析する。
解析の一例として、第1の実施形態においては、第1処理部241は、最適電圧値の候補を用いたシフトリードによって得られたデータに含まれていたエラービットの数を取得する。前述のように、エラービットの数は、RBERに対応するため、第1処理部241は、RBERを測定してもよい。第1処理部241は、エラービットの数と判定しきい値との比較結果に基づいて、コードレートを変更するか否かを判定する。即ち、第1処理部241は、エラービットの数が判定しきい値を超えた場合には、コードレートを減少させる。
解析においては、第1処理部241は、NANDメモリ1の疲弊の進行に応じてコードレートを段階的に減少させるために、現在のコードレートが小さいほど、判定しきい値を大きくする。さらに、第1処理部241は、エラーの数の増加量が大きいほどコードレートの減少量を大きくするために、それぞれ異なる判定しきい値を複数設定する。第1処理部241は、エラービットの数が超えた判定しきい値が大きいほど、コードレートの減少量を大きくする。
現在のコードレートと次のコードレートと判定しきい値との関係は、判定情報222に予め記録されている。図7は、判定情報222の一例を示す図である。この例では、判定情報222は、テーブル形式のデータ構造を有する。この例において、判定情報222の行は、現在のコードレートを示しており、判定情報222の列は、次のコードレートを示している。次のコードレートとは、変更によって次に設定されるコードレートである。判定情報222のいくつかのセルには、判定しきい値が記録されている。
例えば、現在のコードレートが“0.8”である場合、判定情報222の検索によって、判定しきい値“20”および判定しきい値“40”の2つが取得される。エラービットの数が、2つの判定しきい値のうちの大きい方の判定しきい値“40”より大きい場合、判定しきい値“40”が記録されたセルが属する列の参照によって、次のコードレートとして“0.6”が取得される。即ち、コードレートが“0.8”から“0.6”に減少せしめられる。エラービットの数が、2つの判定しきい値のうちの大きい方の判定しきい値“40”より小さく、かつ、2つの判定しきい値のうちの小さい方の判定しきい値“20”より大きい場合、“20”が記録されたセルが属する列の参照によって、“0.7”が次のコードレートに決定される。即ち、コードレートが“0.8”から“0.7”に減少せしめられる。エラービットの数が、2つの判定しきい値のうちの小さい方の判定しきい値“20”より小さい場合、コードレートは変更されない。
現在のコードレートに対し、3以上の判定しきい値が取得可能に、判定情報222が構成されてもよい。エラービットの数が3以上の判定しきい値のうちの少なくとも最小の判定しきい値より大きい場合、コードレートを減少させると判定される。エラービットの数が3以上の判定しきい値のうちの最小の判定しきい値より小さい場合、コードレートを変更しないと判定される。
現在のコードレートに対し、一つの判定しきい値が取得可能に判定情報222が構成されてもよい。エラービットの数が判定しきい値より大きい場合、コードレートを減少させると判定される。エラービットの数が判定しきい値より小さい場合、コードレートを変更しないと判定される。
なお、図7の例に示されるように、現在のコードレートが所定レート以下の状態でエラービットの数が所定数以上である場合、第1処理部241は、該当のブロックの利用停止の決定を行ってもよい。利用停止の決定がなされたブロックは、バッドブロックとして見なされる。
また、判定しきい値(現在のコードレートに対して複数の判定しきい値が設定される場合には、複数の判定しきい値のうちの最小の判定しきい値)は、一例では、現在のコードレートによって得られる訂正能力にマージンを加算した値である。マージンは、例えば、データリテンションによって増加する量である。マージンは、例えば、シミュレーションまたは実験などにより、予め求められる。なお、判定しきい値の決定方法はこれに限定されない。
コードレートの設定値は、コードレート情報223に記録される。図8は、コードレート情報223の一例を示す図である。この例では、コードレート情報223は、テーブル形式のデータ構造を有する。コードレート情報223には、コードレートの設定値がブロック毎に記録されている。なお、コードレート情報223には、同一ブロック内の複数のワードラインからなるグループ単位でコードレートが記録されていてもよい。また、複数のロアーページからなるグループ単位、または、複数のアッパーページからなるグループ単位でコードレートが記録されていてもよい。各レコードは、チップ番号とブロック番号とによって特定される。ブロック番号は、例えばロウアドレスに含まれる。第1処理部241は、コードレート情報223を参照することによって、ブロック毎に、現在のコードレートを取得することができる。
第2処理部242は、NANDメモリ1へのアクセスを実行する。第2処理部242によるNANDメモリ1へのアクセスは、ホスト装置200からのアクセス要求に応じたアクセス、ガベージコレクションのためのアクセス、ウェアレベリングのためのアクセス、およびリフレッシュのためのアクセス、を含む。アクセスは、リード、プログラム、及びイレース、を含む。
第2処理部242は、NANDメモリ1にデータを送る際、コードレート情報223に設定されているコードレートに従ってデータを符号化する。具体的には、第2処理部242は、コードレート情報223を参照することによって、アクセスするチップ及びブロックのコードレートの設定値を取得する。第2処理部242は、取得した設定値をECC回路25に通知する。ECC回路25は、通知されたコードレートでデータの符号化を実行する。NANDコントローラ23は、ライトコマンドと符号化されたデータとをNANDメモリ1に送信する。
なお、ガベージコレクションとは、1つのブロックから少なくとも有効なデータを他のブロックの空き領域に転送し、その後、転送元のブロックに格納されている全てのデータを無効なデータとしてみなす、処理をいう。転送元のブロックは、ガベージコレクションの後、フリーブロックとして見なされる。各フリーブロックは、イレースが実行されることによって、何もデータを記憶していなく、かつ新たなデータをプログラム可能な状態になる。
リフレッシュとは、NANDメモリ1に格納されているデータを、いったんリードしてリードされたデータにエラー訂正を実行し、エラー訂正後のデータを再びNANDメモリ1にプログラムする処理である。リフレッシュにおいて、エラー訂正後のデータは、リードしたブロックとは異なるブロックにプログラムされ得る。
ウェアレベリングとは、ブロック毎のP/Eサイクルの数を複数のブロック間で平滑化する処理である。ウェアレベリングの1つとして、ブロック間で有効なデータを移動する処理がある。
なお、データが有効とは、そのデータが最新の状態であることをいう。ホスト装置200から同一の論理アドレスの指定とともに送られてきた複数のデータがNANDメモリ1に格納される場合において、最新の状態とは、その複数のデータのうちのホスト装置200が最後に送ったデータの状態をいう。ホスト装置200が最後に送ったデータがガベージコレクションによって複製された場合には、複製によって最後に生成されたデータの状態が最新の状態である。無効なデータとは、前記複数のデータのうちの、ホスト装置200によって最後に送られかつ最後にNANDメモリ1にプログラムされたデータを除く、データをいう。
なお、コードレートの変更は、任意のタイミングで実行され得る。一例では、ある使用中のブロックについてコードレートの変更が決定された場合、当該ブロックに対してガベージコレクションがなされた後で、かつ、当該ブロックが次に使用されるまでの間に、当該ブロックにかかるコードレートが変更される。コードレートの変更が決定された使用中のブロックは、空のページがなくなるまで、変更前のコードレートで符号化されたデータがプログラムされる。
図9は、第1の実施形態のメモリシステム100の動作を説明するフローチャートである。まず、第1処理部241は、一つのブロックを選択する(S101)。選択の基準は特定の基準に限定されない。また、選択のタイミングは、特定のタイミングに限定されない。一例では、第1処理部241は、NANDメモリ1に具備される各ブロックを順番に選択してもよい。また、第1処理部241は、所定の時間間隔でブロックを選択してもよい。S101の処理で選択されたブロックを、図9の説明において、対象ブロックと表記する。
続いて、第1処理部241は、コードレート情報223から、対象ブロックの現在のコードレートを取得する(S102)。取得された現在のコードレートは、ECC回路25に送られる。
続いて、第1処理部241は、電圧情報221の先頭のレコードを取得する(S103)。なお、ここでは、電圧情報221の先頭から順番にレコードが取得されることとしているが、取得の順番はこれに限定されない。
第1処理部241は、対象ブロックに対し、取得したレコードに記録されている電圧値をリード電圧として設定してシフトリードを実行する(S104)。S104の処理において、リードの位置は、特定の位置に限定されない。例えば第1処理部241は、予め決められたページからデータをリードする。第1処理部241は、アッパーページからデータをリードしてもよいし、ロアーページからデータをリードしてもよいし、アッパーページとロアーページとの両方からデータをリードしてもよい。第1処理部241は、対象ブロックに格納されている全データをリードしてもよい。第1処理部241は、リードの位置を所定の基準に基づいて決定してもよい。
ECC回路25は、現在のコードレートを適用して、S104によってNANDメモリ1からメモリコントローラ2に出力されたデータに対してエラー訂正を実行する(S105)。第1処理部241は、エラービットの数を取得する(S106)。エラービットの数を出力できる符号化方式(例えばBCH符号)が採用される場合には、第1処理部241は、エラービットの数をECC回路25から取得し得る。別の例では、第1処理部241は、エラー訂正の前のデータとエラー訂正の後のデータとを比較することによって、エラービットの数を取得し得る。第1処理部241は、エラービットの数を、リード電圧として使用された値と対応付けて、例えばRAM22などに記憶する。
続いて、第1処理部241は、未取得のレコードが残っているか否かを判定する(S107)。未取得のレコードが残っている場合(S107、Yes)、第1処理部241は、電圧情報221の後続のレコードを取得し(S108)、S104の処理を実行する。未取得のレコードが残っていない場合(S107、No)、第1処理部241は、シフトリード毎に記憶されたエラービットの数のうちから、エラービットの数の最小値を演算する(S109)。S109の処理によって取得された、エラービットの数の最小値は、最適電圧値を用いてシフトリードされた場合のエラービットの数に該当する。
続いて、第1処理部241は、対象ブロックのコードレートの現在値と、エラービットの数の最小値と、判定情報222とに基づいて、対象ブロックにかかる次のコードレートを決定する(S110)。
続いて、第1処理部241は、現在のコードレートと次のコードレートとが異なっているか否かを判定する(S111)。現在のコードレートと次のコードレートとが異なっている場合(S111、Yes)、第1処理部241は、対象ブロックのコードレートを次のコードレートに変更することを決定し(S112)、動作が終了する。現在のコードレートと次のコードレートとが等しい場合(S111、No)、第1処理部241は、対象ブロックのコードレートを変更しないことを決定し(S113)、動作が終了する。コードレートの変更は、第2処理部242が、対象ブロックに対してガベージコレクションを実行した後、かつ対象ブロックに使用される前に、実行される。コードレートの変更は、例えば第1処理部241がコードレート情報223の対象ブロックにかかるレコードを更新することによって、実行される。
このように、第1の実施形態によれば、メモリコントローラ2は、コードレートが可変の方式でデータを符号化し、符号化されたデータをNANDメモリ1のブロックに格納する。そして、メモリコントローラ2は、それぞれ異なる電圧値を順次、リード電圧として設定し、シフトリードを実行する(S103〜S108)。そして、メモリコントローラ2は、シフトリードの結果に応じてコードレートを減少させる(S109〜S113)。この構成により、メモリコントローラ2は、最適電圧値をリード電圧として用いた場合のエラーの発生状況を考慮してコードレートを制御することができるので、コードレートを必要以上に減少させることを抑制することが可能となる。即ち、メモリシステム100は、コードレートを効率的に制御することができる。
また、メモリコントローラ2は、それぞれ異なる電圧値を設定してシフトリードする毎に、リードされたデータに含まれるエラービットの数を取得し(S105、S106)、取得されたエラービットの数の最小値を選択し(S109)、コードレートを減少させるか否かをエラービットの数の最小値に基づいて判定する(S110〜S113)。この構成により、メモリコントローラ2は、最適電圧値をリード電圧として用いた場合のエラーの発生状況を考慮してコードレートを制御することができる。
(第2の実施形態)
リード電圧の最適値は、メモリセルの分布が極小となるしきい値電圧の付近に存在すると考えられる。第2の実施形態では、第1処理部241は、メモリセルの分布が極小となるしきい値電圧を測定し、測定された電圧値を最適電圧値とみなす。メモリセルの分布が極小となるしきい値電圧を測定する手法として、第2の実施形態では、Vthトラッキングと呼ばれる手法が採用される。Vthトラッキングによれば、メモリセルの分布が測定される。なお、メモリセルの分布が極小となるしきい値電圧の測定の手法は、Vthトラッキングだけに限定されない。
図10は、Vthトラッキングを説明するための図である。図10の上段のグラフは、メモリセルの分布の一例を示している。Vthトラッキングによれば、対応するデータ値が異なる分布間で裾野が重なる場合、複数の分布が重なる範囲のリード電圧においては、重なっている複数の分布に属するメモリセルの数の合計が得られる。即ち、図10の上段のグラフの例では、隣接する分布間で裾野が重なっている範囲のリード電圧においては、一点鎖線によって示される形状が測定によって得られる。
Vthトラッキングにおいては、リード電圧の設定値を変化させながら2値モードでシフトリードが実行され、各シフトリードによって得られたデータに含まれる“1”または“0”の数がカウントされる。2値モードとは、しきい値電圧がリード電圧よりも小さいメモリセルは、第1のデータ値を記憶していると判定し、しきい値電圧がリード電圧よりも大きいメモリセルは、第1のデータ値と異なる第2のデータ値を記憶していると判定するモードである。ここでは一例として、“1”を第1のデータ値とし、“0”を第2のデータ値とし、“1”の数がカウントされることとする。カウントされた“1”の数をリード電圧に対してプロットすると、図10の下段に示される曲線が得られる。
続いて、“1”の数の変化率が演算される。“1”の数の変化率とは、リード電圧を所定単位量だけ変化させた場合の“1”の数の変化量である。リード電圧に対して変化率をプロットすると、しきい値電圧に対するメモリセルの分布(即ち図10の上段に示される曲線)の近似が得られる。
第2の実施形態では、一例として、第1処理部241は、Vthトラッキングにおいて、リード電圧の設定値をVstepずつ増加させながらシフトリードを実行する。そして、第1処理部241は、変化率として、リード電圧をVstepだけ増加させた際の“1”の数の変化量を演算する。そして、第1処理部241は、変化量が極小となるリード電圧を、最適電圧値として決定する。図10の例では、V1、V2、およびV3が最適電圧値に該当する。
なお、第1処理部241は、Vthトラッキングにおいて、リード電圧の設定値をVstepずつ増加させながら複数回のシフトリードを実行する。リード電圧の変更範囲は、メモリセルのしきい値電圧がとりうる全範囲をカバーしていてもよいし、特定の電圧値の付近の範囲だけをカバーしていてもよい。
また、第1処理部241は、“1”の数の代わりに“0”の数をカウントするようにしてもよい。その場合には、第1処理部241は、“0”の数の変化量の絶対値を演算することによって、しきい値電圧に対するメモリセルの分布の近似を得ることができる。
図11は、第2の実施形態のメモリシステム100の動作の一例を説明するフローチャートである。ここでは説明を簡単にするために、第1処理部241は、ロアーページに格納されているデータに基づいてコードレートの制御を実行することとする。即ち、第1処理部241は、コードレートの制御の一環として、リード電圧V_ABに関する最適電圧値V_AB_OPTを演算する。
まず、第1処理部241は、一つのブロックを選択する(S201)。第1の実施形態と同様に、選択の基準は特定の基準に限定されない。また、選択のタイミングは、特定のタイミングに限定されない。S201の処理で選択されたブロックを、図11の説明においては、対象ブロックと表記する。
続いて、第1処理部241は、Vthトラッキングを開始する。具体的には、第1処理部241は、まず、対象ブロックに対し、リード電圧としてVthトラッキングにおける電圧値の変更範囲のうちの最小値を用いて、2値モードでのシフトリードを実行する(S202)。対象ブロック内のリード位置は、特定の位置に限定されない。電圧値の変更範囲は、例えば、リード電圧V_ABの付近をカバーする範囲である。
S202の処理の後、第1処理部241は、NANDメモリ1からメモリコントローラ2に出力されたデータに含まれる“1”の数をカウントする(S203)。第1処理部241は、カウント値を例えばRAM22などに記憶しておく。
続いて、第1処理部241は、リード電圧の設定値をVstepだけ増加させて、2値モードでのシフトリードを実行する(S204)。第1処理部241は、NANDメモリ1からメモリコントローラ2に出力されたデータに含まれる“1”の数をカウントする(S205)。そして、第1処理部241は、今回のシフトリードの際に得られた“1”の数から前回のシフトリードの際に得られた“1”の数を減算することによって、“1”の数の変化量を演算する(S206)。第1処理部241は、演算した変化量を、今回のシフトリードにおいてリード電圧として使用した設定値と対応づけて例えばRAM22などに記憶しておく。なお、第1処理部241は、演算した変化量を前回のシフトリードにおいてリード電圧として使用した電圧値と対応づけてもよい。
続いて、第1処理部241は、リード電圧の設定値が変更範囲の上限に至ったか否かを判定する(S207)。リード電圧の設定値が変更範囲の上限に至っていない場合(S207、No)、第1処理部241は、ステップS204の処理を実行する。
リード電圧の設定値が変更範囲の上限に至った場合(S207、Yes)、第1処理部241は、記憶している複数の変化量に基づいて、最適電圧値を決定する(S208)。一例では、第1処理部241は、記憶している複数の変化量のうちから極小値を選択し、選択した極小値に対応づけられている電圧値を、最適電圧値として決定する。
続いて、第1処理部241は、コードレート情報223から、対象ブロックの現在のコードレートを取得する(S209)。取得された現在のコードレートは、ECC回路25に送られる。そして、第1処理部241は、最適電圧値V_AB_OPTを用いてロアーページのリードを実行する(S210)。ECC回路25は、現在のコードレートを適用して、NANDメモリ1からメモリコントローラ2に出力されたデータに対してエラー訂正を実行する(S211)。第1処理部241は、エラービットの数を取得する(S212)。
続いて、第1処理部241は、対象ブロックの現在のコードレートと、エラービットの数と、判定情報222とに基づいて、対象ブロックにかかる次のコードレートを決定する(S213)。
続いて、第1処理部241は、現在のコードレートと次のコードレートとが異なっているか否かを判定する(S214)。現在のコードレートと次のコードレートとが異なっている場合(S214、Yes)、第1処理部241は、対象ブロックのコードレートを次のコードレートに変更することを決定し(S215)、動作が終了する。現在のコードレートと次のコードレートとが等しい場合(S214、No)、第1処理部241は、対象ブロックのコードレートを変更しないことを決定し(S216)、動作が終了する。
なお、以上では、第1処理部241は、ロアーページに格納されているデータに基づいてコードレートの制御を実行する例について説明した。第1処理部241は、任意のページに格納されているデータに基づいてコードレートの制御を実行し得る。
例えば、第1処理部241は、アッパーページに格納されているデータに基づいてコードレートの制御を実行する。その場合には、第1処理部241は、S202〜S208の処理を、リード電圧V_EAおよびリード電圧V_BCのそれぞれについて実行することによって、リード電圧V_EAに関する最適電圧値V_EA_OPTとリード電圧V_BCに関する最適電圧値V_BC_OPTとを演算する。そして、第1処理部241は、S210において、最適電圧値V_EA_OPTおよび最適電圧値V_BC_OPTを用いてアッパーページのリードを実行する。
別の例では、第1処理部241は、アッパーページに格納されているデータとロアーページに格納されているデータの両方に基づいてコードレートの制御を実行する。その場合には、第1処理部241は、S202〜S208の処理を、リード電圧V_EA、リード電圧V_ABおよびリード電圧V_BCのそれぞれについて実行することによって、最適電圧値V_EA_OPT、最適電圧値V_AB_OPTおよび最適電圧値V_BC_OPTを演算する。
このように、第2の実施形態によれば、メモリコントローラ2は、それぞれ異なる電圧値を順次、リード電圧として設定し、リード電圧を変更する毎にシフトリードを実行して電圧値毎にデータを取得する(S204)。そして、メモリコントローラ2は、取得されたデータに基づいて最適電圧値を推定する(S203、S205、S206、S208)。ここで、メモリセルの分布が谷を形成する電圧値が、最適電圧値に該当する。メモリコントローラ2は、最適電圧値をリード電圧として設定してリードを実行し(S210)、リードされたデータに含まれるエラービットの数を取得する(S211、S212)。そして、メモリコントローラ2は、コードレートを減少させるか否かを、取得されたエラービットの数に基づいて判定する(S213〜S216)。この構成により、メモリコントローラ2は、最適電圧値をリード電圧として用いた場合のエラーの発生状況を考慮してコードレートを制御することができる。
なお、第2の実施形態においても、第1の実施形態と同様に、現在のコードレートに対し、3以上の判定しきい値が取得可能に判定情報222が構成されてもよい。また、現在のコードレートに対し、一つの判定しきい値が取得可能に判定情報222が構成されてもよい。また、各判定しきい値は、現在のコードレートによって得られる訂正能力にマージンを加算した値であってもよい。
(第3の実施形態)
メモリセルの分布が極小となるリード電圧を使用する場合においては、分布の極小値が小さいほど、エラービットの数が少ない。また、極小値付近の分布の勾配がなだらかであるほど、分布の経時変化(ズレ)に対するエラービットの数の変化が小さい。即ち、分布に関し、極小値が小さく、かつ極小値の付近の勾配がなだらかであれば、エラービットの数およびエラービットの数の経時変化量を抑制できると考えられる。
第3の実施形態では、第1処理部241は、極小値と極小値の付近の勾配との両方に対応する量として、メモリセルの分布が極小となるリード電圧の電圧値(最適電圧値)を含む所定の範囲にしきい値電圧が含まれるメモリセルの数をカウントする。
図12は、カウント対象のメモリセルの数の分布を説明するための図である。本図は、一例として、分布Aと分布Bとを示している。また、本図の例では、分布Aと分布Bとの合計の量が極小となる電圧値(リード電圧V_ABに関する最適電圧値V_AB_OPT)を中心とする2×dVの範囲にしきい値電圧があるメモリセルの数(本図の斜線部400の面積に相当)が、カウント対象とされる。V_AB_OPTを中心とする2×dVの範囲にしきい値電圧があるメモリセルの数は、V_AB_OPT+dVおよびV_AB_OPT−dVをそれぞれリード電圧として2値モードでのシフトリードを行った場合にリードされる2つのデータに含まれる“0”または“1”の数の差を演算することによって得られる。なお、範囲の設定方法は、上記の方法だけに限定されない。以降、カウント対象のメモリセルを、対象メモリセルと表記する。
第1処理部241は、対象メモリセルの数と判定しきい値とを比較する。対象メモリセルの数が判定しきい値より大きい場合に、第1処理部241は、コードレートを減少させることを決定する。また、第1処理部241は、対象メモリセルの数が判定しきい値より小さい場合には、コードレートを変更しないことを決定する。対象メモリセルの数が判定しきい値と等しい場合はいずれかに決定する。
なお、第3の実施形態においても、第1および第2の実施形態と同様に、現在のコードレートに対して複数の判定しきい値が設定される。また、各判定しきい値は、現在のコードレートが減少するに応じて大きくなる。ここでは、判定情報222が使用されることとする。ただし、判定情報222のセルに記録される判定しきい値は、対象メモリセルの数にかかるしきい値である。
なお、第3の実施形態においても、第1および第2の実施形態と同様に、現在のコードレートに対し、3以上の判定しきい値が取得可能に判定情報222が構成されてもよい。また、現在のコードレートに対し、一つの判定しきい値が取得可能に判定情報222が構成されてもよい。また、各判定しきい値は、現在のコードレートによって得られる訂正能力にマージンを加算した値であってもよい。
また、第1処理部241は、リード電圧V_EA〜V_BCのうちの一部または全部について、対象メモリセルの数をカウントし得る。第1処理部241は、リード電圧V_EA〜V_BCのうちの複数について対象メモリセルの数をカウントし、コードレートを減少させることを、得られた各カウント値に基づく値(例えば平均値、最大値、または合計値)と判定しきい値とに基づいて決定してもよい。ここでは一例として、第1処理部241は、リード電圧V_ABについて対象メモリセルの数をカウントし、コードレートを減少させることを、カウント値に基づいて決定することとする。
また、第3の実施形態では、第1処理部241は、第2の実施形態と同様の手法(即ちVthトラッキング)によってメモリセルの分布が極小となる電圧値(即ち最適電圧値)を推定する。最適電圧値の演算方法はこれに限定されない。
また、第3の実施形態では、第1の実施形態と同様に、第1処理部241は判定情報222に基づいて次のコードレートを決定する、として説明する。ただし、判定情報222には、エラービットの数にかかる判定しきい値に代えて、対象メモリセルの数にかかる判定しきい値が予め記録される。
また、コードレートは、第1の実施形態と同様に、任意のタイミングで変更され得る。
図13は、第3の実施形態のメモリシステム100の動作を説明するフローチャートである。第1処理部241は、S301〜S308において、図11のS201〜S208と同様の処理を実行することによって、最適電圧値V_AB_OPTを推定する。
続いて、第1処理部241は、(V_AB_OPT+dV)をリード電圧として用いて2値モードでのシフトリードを実行する(S309)。なお、(V_AB_OPT+dV)は、範囲の上限値に該当する。第1処理部241は、NANDメモリ1からメモリコントローラ2に出力されたデータに含まれる“1”の数をカウントし、この値をAとする(S310)。第1処理部241は、カウント値を例えばRAM22などに記憶しておく。
続いて、第1処理部241は、(V_AB_OPT−dV)をリード電圧として用いて2値モードでのシフトリードを実行する(S311)。なお、(V_AB_OPT−dV)は、範囲の下限値に該当する。第1処理部241は、NANDメモリ1からメモリコントローラ2に出力されたデータに含まれる“1”の数をカウントし、この値をBとする(S312)。そして、第1処理部241は、カウント値Aとカウント値Bとの差分|A−B|を演算する(S313)。S313の処理によって得られる値は、対象メモリセルの数に該当する。
続いて、第1処理部241は、コードレート情報223から、対象ブロックの現在のコードレートを取得する(S314)。そして、第1処理部241は、対象ブロックの現在のコードレートと、対象メモリセルの数と、判定情報222とに基づいて、対象ブロックにかかる次のコードレートを決定する(S315)。
続いて、第1処理部241は、現在のコードレートと次のコードレートとが異なっているか否かを判定する(S316)。現在のコードレートと次のコードレートとが異なっている場合(S316、Yes)、第1処理部241は、対象ブロックのコードレートを次のコードレートに変更することを決定し(S317)、動作が終了する。現在のコードレートと次のコードレートとが等しい場合(S316、No)、第1処理部241は、対象ブロックのコードレートを変更しないことを決定し(S318)、動作が終了する。
以上では、第1処理部241は、リード電圧V_ABをコードレートの制御に使用する例を説明した。第1処理部241は、任意のリード電圧をコードレートの制御に使用してもよい。
また、リード電圧毎に異なる判定情報222が用意され、第1処理部241は、コードレートの制御に使用するリード電圧に対応する判定情報222を使用してもよい。ロアーページの場合、しきい値電圧がリード電圧V_ABをまたいで変化したビットがエラーとして検出される。これに対して、アッパーページの場合、しきい値電圧がリード電圧V_EAをまたいで変化したビットと、しきい値電圧がリード電圧V_BCをまたいで変化したビットとの両方が、エラーとして検出される。したがって、しきい値電圧の変化がRBERに与える影響は、ロアーページよりもアッパーページのほうが大きいかもしれない。このことを考慮して、例えば、リード電圧V_EA、リード電圧V_BCに対応する判定情報222には、リード電圧V_ABに対応する判定情報222に比べて、厳しい基準に基づいて判定しきい値が設定される。即ち、リード電圧V_EA、リード電圧V_BCに対応する判定情報222に記録されている各判定しきい値は、リード電圧V_ABに対応する判定情報222よりも小さい。なお、リード電圧毎の判定しきい値の大小関係はこれに限定されない。
このように、第3の実施形態によれば、メモリコントローラ2は、最適電圧値を含む範囲にしきい値電圧があるメモリセルの数をカウントし(S309〜S313)、コードレートを減少させるか否かをカウント値に基づいて判定する(S315〜S318)。この構成により、最適電圧値をリード電圧として用いた場合のエラービットの数と、分布の経時変化に応じたエラービットの増加量と、の両方を考慮してコードレートを制御することができるので、コードレートを必要以上に減少させることを抑制することが可能となる。
なお、メモリコントローラ2は、範囲の上限値をリード電圧に設定してシフトリードを実行し(S309)、範囲の下限値をリード電圧に設定してシフトリードを実行する(S311)。そして、メモリコントローラ2は、各シフトリードによって得られたデータに基づいて、範囲にしきい値電圧があるメモリセルの数をカウントする(S310、S312、S313)。対象メモリセルの数の取得方法は、これに限定されない。例えば、範囲の下限値を先に、範囲の上限値を後に、設定してもよい。
(第4の実施形態)
第1〜第3の実施形態においては、コードレートの変更の判定は、任意のタイミングで実行可能であるとして説明した。第4の実施形態では、コードレートの変更の判定の実行タイミングに条件を設定する例を説明する。前述したように、データがプログラムされてからの経過時間に応じてデータの値が変化する。ここでは、データがプログラムされてからの経過時間に関して条件が設定される。データがプログラムされてからの経過時間に関して条件を設けることによって、メモリセルの疲弊に応じたコードレートの変更をより正確に実行することが可能となる。
具体的には、第1処理部241は、データがプログラムされてから設定時間が経過した後、コードレートの変更の判定を行う。第1処理部241は、ホスト装置200から送られてきたデータがプログラムされた後、当該データを用いてコードレートの変更の判定を実行してもよい。ここでは、応答性能への支障を低減するために、第1処理部241は、フリーブロックから判定の対象のブロック(第4の実施形態の説明において、対象ブロック)を選択する。そして、第1処理部241は、対象ブロックに対し、イレースとデータのプログラミングとを実行し、その後、当該データを用いてコードレートの変更の判定を実行する。第1処理部241は、対象ブロックの選択からコードレートの変更の判定までの処理を、任意のタイミングで実行することができる。第1処理部241は、例えば、ホスト装置200からのアクセス要求を処理していない間に、対象ブロックの選択からコードレートの変更の判定までの処理を実行することができる。
また、第1処理部241は、対象ブロックを、P/Eサイクルの実行回数に応じて選択する。P/Eサイクルの実行回数は、例えばブロック毎に、イレースの回数として記録されている。第1処理部241は、イレースの回数が所定数に達したフリーブロックを、対象ブロックとして選択する。なお、例えば複数のブロック毎に一括してイレースが実行される場合など、イレースの単位がブロックではない場合、コードレートの変更の単位はブロックに限定されない。一括にイレースが実行される複数のブロックが、一括して対象ブロックとして選択されてもよい。第4の実施形態においては、第1処理部241は、それぞれのブロックを、イレース回数が1000回に達する毎に対象ブロックとして選択することとする。
図14は、第4の実施形態のメモリシステム100の動作を説明するフローチャートである。まず、第2処理部242は、ガベージコレクションを実行する(S401)。ガベージコレクションの実行のタイミングは、特定のタイミングに限定されない。ガベージコレクションによってデータ(少なくとも有効なデータ)の移動が実行される。第2処理部242は、データの移動元のブロックを、フリーブロックとして管理する。例えば、第2処理部242は、データの移動元のブロックを、フリーブロックプールに登録する。
続いて、第1処理部241は、ガベージコレクションによってフリーブロックとなったブロック(対象ブロック)を選択する(S402)。そして、第1処理部241は、対象ブロックに対するイレースの回数が1000の倍数であるか否かを判定する(S403)。対象ブロックに対するイレースの回数が1000の倍数ではない場合(S403、No)、動作が終了する。
対象ブロックに対するイレースの回数が1000の倍数である場合(S403、Yes)、第1処理部241は、対象ブロックに対してイレースを実行し(S404)、対象ブロックにデータをプログラムする(S405)。S405の処理においてプログラムされるデータは、特定のデータに限定されない。任意のデータがプログラム可能である。データは、ECC回路25によって符号化された後にプログラムされる。S404は、対象ブロックが既にイレースされていればスキップされる。
S405の処理の後、第1処理部241は、設定時間の経過を待ち(S406)、S405の処理によってデータがプログラムされたブロックについて、次のコードレートを演算する(S407)。次のコードレートの演算方法は、特定の方法に限定されない。次のコードレートの演算方法としては、例えば第1〜第3の実施形態のいずれかの方法が採用可能である。例えば、第1の実施形態が適用される場合には、第1処理部241は、図9のS102〜S110の処理を実行することによって、次のコードレートを演算する。
続いて、第1処理部241は、現在のコードレートと次のコードレートとが異なっているか否かを判定する(S408)。現在のコードレートと次のコードレートとが異なっている場合(S408、Yes)、第1処理部241は、対象ブロックのコードレートを次のコードレートに変更することを決定し(S409)、動作が終了する。現在のコードレートと次のコードレートとが等しい場合(S408、No)、第1処理部241は、対象ブロックのコードレートを変更しないことを決定し(S410)、動作が終了する。
このように、第4の実施形態によれば、メモリコントローラ2は、データをプログラム(格納)してからの経過時間が設定時間に達するに応じて、コードレートの変更の判定を開始する。これにより、データがプログラムされてからの経過時間に関して条件が設定されない場合に比べて、メモリセルの疲弊に応じたコードレートの変更をより正確に実行することが可能となる。なお、メモリコントローラ2は、データをプログラムしてからすぐ、コードレートの変更の判定を開始してもよく、その場合であっても、データがプログラムされてからの経過時間に関して条件が設定されない場合に比べて、メモリセルの疲弊に応じたコードレートの変更をより正確に実行することが可能となる。
また、メモリコントローラ2は、イレースの回数が設定回数に達した場合、コードレートの変更の判定用にデータをプログラムし、コードレートの変更の判定を開始する。これにより、コードレートの変更の判定のためにデータをプログラムする回数を低減することができるので、コードレートの変更の判定のためにP/Eサイクルが増加することを抑制することができる。
(第5の実施形態)
第1および第2の実施形態によれば、最適電圧値が推定され、推定された最適電圧値を用いてリードされたデータに含まれるエラービットの数が所定条件を満たした場合に、コードレートが減少せしめられる。第3の実施形態によれば、最適電圧値が推定され、しきい値電圧が最適電圧値を含む範囲にあるメモリセルの数が所定条件を満たした場合に、コードレートが減少せしめられる。コードレートの変更の判断の基準は、これらだけに限定されない。
例えば、第1処理部241は、電圧情報221の各レコードに記録されている値を順次リード電圧として適用しながら、複数のシフトリードを行う。そして、第1処理部241は、電圧情報221の特定のレコードに記録されている値をリード電圧として適用した場合にしかエラー訂正に成功しない場合、コードレートを減少させることを決定する。
別の例では、電圧情報221の各レコードは、各リード電圧をそれぞれ異なる座標成分とする座標空間にできるだけ均一に分散するように、各リード電圧の値が記録される。図15は、各レコードに記録された値を、V_EAとV_BCとを座標成分とする平面座標にプロットしたグラフである。ここでは説明を簡単にするために、V_ABを省略する。図15の例によれば、各ポイントが渦巻き(spiral)状に分布するように、V_EAの電圧値とV_BCの電圧値とが設定される。エラー訂正が成功するポイントは、一塊の領域内に分布する。領域500は、エラー訂正が成功するポイントを含み、かつ、エラー訂正が失敗するポイントを含まない領域である。領域500は、メモリセルの疲弊が進行するにしたがって小さくなる。このように、ポイントが略均一に分散する場合、領域500の面積は、エラー訂正が成功するレコードの数と正の相関関係を有する。即ち、メモリセルの疲弊が進行するに従って、エラー訂正が成功するポイントの数が減少する。第1処理部241は、電圧情報221の各レコードに記録されている値を順次リード電圧として適用しながら、シフトリードを行う。そして、第1処理部241は、エラー訂正が成功したレコードの数が、判定しきい値を下回った場合に、コードレートを減少させることを決定する。第1〜第3の実施形態と同様に、コードレート毎に複数の判定しきい値が設定されてもよい。また、判定しきい値は、コードレートの減少に応じて変更されてもよいし、固定されてもよい。
さらなる別の例では、第1処理部241は、レコードの数の代わりに、領域500の略中心から端までの距離を、図15の領域500の大きさに対応する量として使用する。第1処理部241は、第1の実施形態の場合と同様に、レコード毎にシフトリードを実行することで、エラービットの数が最小となるレコードを演算する。エラービットの数が最小となるレコードに記録された値は、領域500の略中心のポイントに対応する。そして、第1処理部241は、領域500の端に位置するポイントと、領域500の略中心のポイントと、の間の、座標空間上の距離を演算する。第1処理部241は、距離が判定しきい値を下回った場合に、コードレートを減少させることを決定する。第1〜第3の実施形態と同様に、コードレート毎に複数の判定しきい値が設定されてもよい。また、判定しきい値は、コードレートの減少に応じて変更されてもよいし、固定されてもよい。
領域500の端に位置するポイントは、任意の方法で特定可能である。例えば第1処理部241は、ポイントP0が示す各値をリード電圧の初期値とし、点線で接続されたポイントの順番でリード電圧を設定する。つまり、ポイントP0、ポイントP1、ポイントP2の順番で、リード電圧の各値が電圧情報221に記録されている。図15の例では、ポイントP0〜ポイントP4まではエラー訂正が失敗し、ポイントP5で初めてエラー訂正が成功する。第1処理部241は、初めてエラー訂正が成功するポイントP5を、領域500の端に位置するポイントとして特定することができる。
さらなる別の例では、第1処理部241は、基準値をリード電圧に適用して複数回(例えば2回)、シフトリードを実行する。基準値は、前述のように、例えばメモリチップ11に予め記録されている。または、第1処理部241は、必要が生じるたびに、基準値をメモリチップ11に送信してもよい。基準値を用いた複数回のシフトリードのうちの一度もエラー訂正に成功しない場合、第1処理部241は、コードレートを減少させることを決定する。
さらなる別の例では、第1処理部241は、基準値と、基準値以外のある値(例えば電圧情報221に記録されている複数の値のうちの何れかの値)と、をそれぞれリード電圧に適用して複数回、シフトリードを実行する。そして、複数回のシフトリードのうちの一度もエラー訂正に成功しない場合、第1処理部241は、コードレートを減少させることを決定する。
さらなる別の例では、第1処理部241は、電圧情報221に記録されている値を、先頭のレコードから順番に適用しながらシフトリードを実行する。例えば図15のポイントP0を初期値としてP1、P2、P3の順番で各値をリード電圧に適用する。所定段目のレコードまで適用してもエラー訂正に成功しない場合、第1処理部241は、コードレートを減少させることを決定する。
このように、コードレートの変更の判断の基準として、種々の基準が適用可能である。
(第6の実施形態)
図16は、メモリシステム100の実装例を示す図である。メモリシステム100は、例えばサーバシステム1000に実装される。サーバシステム1000は、ディスクアレイ2000とラックマウントサーバ3000とが通信インタフェース4000によって接続されている。通信インタフェース4000の規格としては任意の規格が採用可能である。ラックマウントサーバ3000は、ラックを備えており、ラックには1以上のホスト装置200がマウントされている。各ホスト装置200は、通信インタフェース4000を介してディスクアレイ2000にアクセスすることができる。
また、ディスクアレイ2000は、ラックを備えており、ラックに1以上のメモリシステム100がマウントされている。ディスクアレイ2000は、メモリシステム100の他に、1以上のハードディスクユニットがマウントされてもよい。各メモリシステム100は、各ホスト装置200からのアクセス要求を処理することができる。各メモリシステム100は、第1〜第5の実施形態の構成が採用され得る。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1 NANDメモリ、2 メモリコントローラ、11 メモリチップ、21 ホストI/Fコントローラ、22 RAM、23 NANDコントローラ、24 CPU、25 ECC回路、100 メモリシステム、110 I/O信号処理回路、111 制御信号処理回路、112 チップ制御回路、113 コマンドレジスタ、114 アドレスレジスタ、115 カラムデコーダ、116 データレジスタ、117 センスアンプ、118 メモリセルアレイ、119 ロウデコーダ、120 RY/BY生成回路、200 ホスト装置、221 電圧情報、222 判定情報、223 コードレート情報、241 第1処理部、242 第2処理部、300 領域、301 領域、400 斜線部、500 領域、1000 サーバシステム、2000 ディスクアレイ、3000 ラックマウントサーバ、4000 通信インタフェース。

Claims (16)

  1. 複数のメモリセルを備える記憶領域を備え、リード電圧が設定可能なメモリと、前記メモリは、前記複数のメモリセルのそれぞれのしきい値電圧と前記リード電圧との比較に基づいて前記記憶領域内のデータをリードして出力する、
    コントローラと、
    を備え、
    前記コントローラは、
    コードレートが可変の方式において第1コードレートで第1データを符号化し、
    第2データを前記記憶領域に書き込ませ、前記第2データは符号化された前記第1データであり、
    複数回の第1リードを実行し、各第1リードは前記リード電圧の設定値を変更して前記記憶領域に対してリードする処理であり、
    前記複数回の第1リードの結果に基づいて前記しきい値電圧の変化の度合いに対応する指標値を取得し、前記指標値が第1の判定しきい値より大きく、かつ第2の判定しきい値より小さい場合、前記記憶領域のコードレートを前記第1コードレートから第2コードレートに変更し、前記指標値が前記第2の判定しきい値よりも大きい場合、前記記憶領域の前記コードレートを前記第1コードレートから第3コードレートに変更する、前記第2の判定しきい値は前記第1の判定しきい値よりも大きい、前記第2コードレートは前記第1コードレートよりも小さい、前記第3コードレートは前記第2コードレートより小さい、
    前記第1の判定しきい値および前記第2の判定しきい値と、前記第2コードレートおよび前記第3コードレートと、を前記第1コードレートに基づいて取得する、
    メモリシステム。
  2. 前記コントローラは、
    複数の第3データそれぞれに含まれるエラービットの数を第3データ毎に取得し、前記複数の第3データのそれぞれは、対応する第1リードによって前記記憶領域から出力された前記第2データであり、
    前記複数の第3データそれぞれに含まれるエラービットの数のうちの最小値を選択し、
    前記指標値は前記最小値である、
    請求項1に記載のメモリシステム。
  3. 前記コントローラは、
    複数の第3データ、それぞれの第3データは対応する第1リードによって前記記憶領域から出力された前記第2データである、に基づいて第1電圧値を推定し、前記第1電圧値は前記リード電圧に対する前記メモリセルの分布が極小となり得る前記リード電圧の電圧値であり、
    第2リードを実行し、前記第2リードは第2電圧値を前記リード電圧に設定して前記記憶領域に対してリードする処理であり、前記第2電圧値は前記推定された第1電圧値であり、
    第4データに含まれるエラービットの数を取得し、前記第4データは前記第2リードによって前記記憶領域から出力された前記第2データであり、
    前記指標値は前記エラービットの前記数である、
    請求項1に記載のメモリシステム。
  4. 前記コントローラは、
    複数の第3データ、それぞれの第3データは対応する第1リードによって前記記憶領域から出力された前記第2データである、に基づいて第1電圧値を推定し、前記第1電圧値は前記リード電圧に対する前記メモリセルの分布が極小となり得る前記リード電圧の電圧値であり、
    第2電圧値を含む範囲にしきい値電圧が含まれるメモリセルの数をカウントし、前記第2電圧値は前記推定された第1電圧値であり、
    前記指標値は前記メモリセルの前記数である、
    請求項1に記載のメモリシステム。
  5. 前記コントローラは、
    第2リードを実行し、前記第2リードは第3電圧値を前記リード電圧に設定して前記記憶領域に対してリードする処理であり、前記第3電圧値は前記範囲の上限値であり、
    第3リードを実行し、前記第3リードは第4電圧値を前記リード電圧に設定して前記記憶領域に対してリードする処理であり、前記第4電圧値は前記範囲の下限値であり、
    第4データと第5データとの比較に基づいて前記メモリセルの前記数をカウントする、前記第4データは前記第2リードによって前記記憶領域から出力された前記第2データであり、前記第5データは前記第3リードによって前記記憶領域から出力された前記第2データである、
    請求項4に記載のメモリシステム。
  6. 前記コントローラは、
    前記指標値が前記第1の判定しきい値より小さい場合、前記コードレートを変更しない、
    請求項2から請求項5の何れか一項に記載のメモリシステム。
  7. 前記コントローラは、前記第2データを前記記憶領域に格納してからの経過時間が設定時間に達するに応じて、前記第1リードを実行する、
    請求項1から請求項6の何れか一項に記載のメモリシステム。
  8. 前記コントローラは、前記記憶領域に対するイレースの回数が設定回数に達した場合、前記第2データの書き込みを実行する、
    請求項1から請求項7の何れか一項に記載のメモリシステム。
  9. 複数のメモリセルを備える記憶領域を備え、リード電圧が設定可能なメモリを制御する方法であって、この方法は、
    前記メモリは、前記複数のメモリセルのそれぞれのしきい値電圧と前記リード電圧との比較に基づいて前記記憶領域内のデータをリードして出力するメモリであり、
    コードレートが可変の方式において第1コードレートで第1データを符号化し、
    第2データを前記記憶領域に書き込ませ、前記第2データは符号化された前記第1データである、
    複数回の第1リードを実行し、各第1リードは前記リード電圧の設定値を変更して前記記憶領域に対してリードする処理である、
    前記複数回の第1リードの結果に基づいて前記しきい値電圧の変化の度合いに対応する指標値を取得し、前記指標値が第1の判定しきい値より大きく、かつ第2の判定しきい値より小さい場合、前記記憶領域のコードレートを前記第1コードレートから第2コードレートに変更し、前記指標値が前記第2の判定しきい値よりも大きい場合、前記記憶領域の前記コードレートを前記第1コードレートから第3コードレートに変更する、前記第2の判定しきい値は前記第1の判定しきい値よりも大きい、前記第2コードレートは前記第1コードレートよりも小さい、前記第3コードレートは前記第2コードレートより小さい、
    を備え
    前記指標値を取得するは、
    前記第1の判定しきい値および前記第2の判定しきい値と、前記第2コードレートおよび前記第3コードレートと、を前記第1コードレートに基づいて取得する、
    をさらに含む
  10. 前記指標値を取得するは、
    複数の第3データそれぞれに含まれるエラービットの数を第3データ毎に取得し、前記複数の第3データのそれぞれは、対応する第1リードによって前記記憶領域から出力された前記第2データである、
    前記複数の第3データそれぞれに含まれるエラービットの数のうちの最小値を選択する、
    を含み、
    前記指標値は前記最小値である、
    請求項9に記載の方法。
  11. 前記指標値を取得するは、
    複数の第3データ、それぞれの第3データは対応する第1リードによって前記記憶領域から出力された前記第2データである、に基づいて第1電圧値を推定し、前記第1電圧値は前記リード電圧に対する前記メモリセルの分布が極小となり得る前記リード電圧の電圧値である、
    第2リードを実行し、前記第2リードは第2電圧値を前記リード電圧に設定して前記記憶領域に対してリードする処理であり、前記第2電圧値は前記推定された第1電圧値である、
    第4データに含まれるエラービットの数を取得する、前記第4データは前記第2リードによって前記記憶領域から出力された前記第2データである、
    を含み、
    前記指標値は前記エラービットの前記数である、
    請求項9に記載の方法。
  12. 前記指標値を取得するは、
    複数の第3データ、それぞれの第3データは対応する第1リードによって前記記憶領域から出力された前記第2データである、に基づいて第1電圧値を推定し、前記第1電圧値は前記リード電圧に対する前記メモリセルの分布が極小となり得る前記リード電圧の電圧値である、
    第2電圧値を含む範囲にしきい値電圧が含まれるメモリセルの数をカウントする、前記第2電圧値は前記推定された第1電圧値である、
    を含み、
    前記指標値は前記メモリセルの前記数である、
    を含む請求項9に記載の方法。
  13. 前記カウントするは、
    第2リードを実行し、前記第2リードは第3電圧値を前記リード電圧に設定して前記記憶領域に対してリードする処理であり、前記第3電圧値は前記範囲の上限値である、
    第3リードを実行し、前記第3リードは第4電圧値を前記リード電圧に設定して前記記憶領域に対してリードする処理であり、前記第4電圧値は前記範囲の下限値である、
    第4データと第5データとの比較に基づいて前記メモリセルの前記数をカウントする、前記第4データは前記第2リードによって前記記憶領域から出力された前記第2データであり、前記第5データは前記第3リードによって前記記憶領域から出力された前記第2データである、
    を含む請求項12に記載の方法。
  14. 前記指標値が前記第1の判定しきい値より小さい場合、前記コードレートを変更しない、
    をさらに含む請求項10から請求項13の何れか一項に記載の方法。
  15. 前記第2データを前記記憶領域に格納してからの経過時間が設定時間に達するに応じて、前記複数回の第1リードを実行する、または、
    前記記憶領域に対するイレースの回数が設定回数に達した場合、前記第2データの書き込みを実行する、
    をさらに含む請求項9から請求項14の何れか一項に記載の方法。
  16. 不揮発性のメモリと、
    前記メモリのリード電圧にそれぞれ異なる電圧値を設定して複数回のリードを実行し、前記複数回のリードの結果及び現在のコードレートに基づいて、前記メモリにライトされるデータのコードレートを、前記結果および前記現在のコードレートに応じた複数のコードレートの候補のうちの何れかのコードレートに変更する、コントローラと、
    を備えるメモリシステム。
JP2016179372A 2016-09-14 2016-09-14 メモリシステムおよび方法 Active JP6725375B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2016179372A JP6725375B2 (ja) 2016-09-14 2016-09-14 メモリシステムおよび方法
US15/449,383 US10261857B2 (en) 2016-09-14 2017-03-03 Memory system and method for controlling code rate for data to be stored
US16/380,003 US10789125B2 (en) 2016-09-14 2019-04-10 Memory system and method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016179372A JP6725375B2 (ja) 2016-09-14 2016-09-14 メモリシステムおよび方法

Publications (2)

Publication Number Publication Date
JP2018045744A JP2018045744A (ja) 2018-03-22
JP6725375B2 true JP6725375B2 (ja) 2020-07-15

Family

ID=61560419

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016179372A Active JP6725375B2 (ja) 2016-09-14 2016-09-14 メモリシステムおよび方法

Country Status (2)

Country Link
US (2) US10261857B2 (ja)
JP (1) JP6725375B2 (ja)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102381218B1 (ko) * 2015-09-25 2022-04-01 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법
CN107315442B (zh) * 2017-06-30 2019-04-30 上海兆芯集成电路有限公司 控制器与参考电压产生方法
KR102648618B1 (ko) * 2018-03-28 2024-03-19 에스케이하이닉스 주식회사 컨트롤러, 그것의 동작방법 및 컨트롤러를 포함하는 메모리 시스템
US10629288B2 (en) 2018-06-25 2020-04-21 Micron Technology, Inc. Adjustable voltage drop detection threshold in a memory device
SG11202102254SA (en) 2018-09-07 2021-04-29 Iridia Inc Improved systems and methods for writing and reading data stored in a polymer
JP2020113351A (ja) * 2019-01-10 2020-07-27 キオクシア株式会社 メモリチップ
JP2021047695A (ja) * 2019-09-19 2021-03-25 キオクシア株式会社 メモリシステム
US11049582B1 (en) * 2020-05-07 2021-06-29 Micron Technology, Inc. Detection of an incorrectly located read voltage
US11837302B1 (en) 2020-08-07 2023-12-05 Iridia, Inc. Systems and methods for writing and reading data stored in a polymer using nano-channels
CN112685213B (zh) * 2021-01-06 2022-04-29 长江存储科技有限责任公司 非易失性存储器及其电压校准方法
US11599300B2 (en) * 2021-04-19 2023-03-07 Micron Technology, Inc. Voltage threshold prediction-based memory management
US11989421B2 (en) * 2021-08-19 2024-05-21 Micron Technology, Inc. Adjustable data protection scheme using artificial intelligence

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4660353B2 (ja) * 2005-11-01 2011-03-30 株式会社東芝 記憶媒体再生装置
US8171380B2 (en) * 2006-10-10 2012-05-01 Marvell World Trade Ltd. Adaptive systems and methods for storing and retrieving data to and from memory cells
US8122323B2 (en) 2007-03-08 2012-02-21 Intel Corporation Method, apparatus, and system for dynamic ECC code rate adjustment
KR20100104623A (ko) * 2009-03-18 2010-09-29 삼성전자주식회사 데이터 처리 시스템 및 그것의 부호율 제어 스킴
KR101578511B1 (ko) * 2009-05-20 2015-12-18 삼성전자주식회사 리드 전압 설정 방법
US8615700B2 (en) 2009-08-18 2013-12-24 Viasat, Inc. Forward error correction with parallel error detection for flash memories
JP5349256B2 (ja) * 2009-11-06 2013-11-20 株式会社東芝 メモリシステム
US8458568B2 (en) * 2010-09-24 2013-06-04 International Business Machines Corporation Systems and methods for memory devices
JP2013542533A (ja) 2010-10-27 2013-11-21 エルエスアイ コーポレーション フラッシュメモリベースのデータ記憶のための順応ecc技術
KR101939234B1 (ko) * 2012-07-23 2019-01-16 삼성전자 주식회사 메모리 장치, 메모리 시스템 및 상기 메모리 장치의 독출 전압의 제어 방법
US8856431B2 (en) 2012-08-02 2014-10-07 Lsi Corporation Mixed granularity higher-level redundancy for non-volatile memory
US8972826B2 (en) * 2012-10-24 2015-03-03 Western Digital Technologies, Inc. Adaptive error correction codes for data storage systems
US8996961B2 (en) * 2012-12-11 2015-03-31 Seagate Technology Llc Error correction code rate management for nonvolatile memory
US9092353B1 (en) * 2013-01-29 2015-07-28 Pmc-Sierra Us, Inc. Apparatus and method based on LDPC codes for adjusting a correctable raw bit error rate limit in a memory system
US9135109B2 (en) * 2013-03-11 2015-09-15 Seagate Technology Llc Determination of optimum threshold voltage to read data values in memory cells
US9013920B2 (en) * 2013-04-03 2015-04-21 Western Digital Technologies, Inc. Systems and methods of write precompensation to extend life of a solid-state memory
US20140359202A1 (en) * 2013-05-31 2014-12-04 Western Digital Technologies, Inc. Reading voltage calculation in solid-state storage devices
US9478292B2 (en) * 2013-10-27 2016-10-25 Sandisk Technologies Llc Read operation for a non-volatile memory
US9520901B2 (en) * 2014-03-06 2016-12-13 Kabushiki Kaisha Toshiba Memory controller, memory system, and memory control method
US10198313B2 (en) * 2016-03-11 2019-02-05 Western Digital Technologies, Inc. Redundancy of error correction encoded data in a storage system
KR20180027803A (ko) * 2016-09-07 2018-03-15 에스케이하이닉스 주식회사 메모리 컨트롤러, 반도체 메모리 시스템 및 그것의 동작 방법

Also Published As

Publication number Publication date
US20190235952A1 (en) 2019-08-01
US20180076829A1 (en) 2018-03-15
US10261857B2 (en) 2019-04-16
US10789125B2 (en) 2020-09-29
JP2018045744A (ja) 2018-03-22

Similar Documents

Publication Publication Date Title
JP6725375B2 (ja) メモリシステムおよび方法
CN108573722B (zh) 操作非易失性存储器件的方法和非易失性存储器件
KR101665280B1 (ko) 메모리 디바이스에서의 에러 정정 동작들
US9508423B2 (en) Nonvolatile memory device and method of reading the same
KR101944793B1 (ko) 플래시 메모리를 포함하는 플래시 메모리 시스템 및 그것의 비정상 워드 라인 검출 방법
KR101633048B1 (ko) 메모리 시스템 및 그것의 데이터 처리 방법
US8621266B2 (en) Nonvolatile memory system and related method of performing erase refresh operation
US10347353B2 (en) Memory system
US20160335027A1 (en) Method of operating memory controller and data storage device including memory controller
US11037639B2 (en) Memory controller and method of operating the same for processing the failed read operation
CN110827907A (zh) 包括非易失性存储器器件的储存设备及其操作方法
JP2020155180A (ja) メモリ読み出し方法及びメモリシステム並びにコンピュータ・プログラム
KR20150046549A (ko) 데이터 저장 시스템 및 그것의 동작 방법
US11138070B2 (en) Memory system and method performed thereby
JP2019053806A (ja) メモリシステム、及びメモリシステムの制御方法
US20200335169A1 (en) Memory controller, memory device and memory system having improved threshold voltage distribution characteristics and related operating methods
KR102353363B1 (ko) 메모리 시스템의 동작 방법
CN113010459A (zh) 存储器系统、存储器控制器以及操作存储器系统的方法
US11532364B2 (en) Controller and operation method thereof
CN113806254B (zh) 存储器系统、存储器控制器及存储器系统的操作方法
CN111290876B (zh) 存储器系统及其操作方法
CN111883198A (zh) 存储器控制器及其操作方法
CN111798913A (zh) 存储器系统、存储器控制器及其操作方法
CN118159948A (zh) 存储器系统及非易失性存储器

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20170605

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20180905

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20181004

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190328

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190409

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190610

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20191023

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20191217

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: 20200526

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200625

R150 Certificate of patent or registration of utility model

Ref document number: 6725375

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150