(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024024383
(43)【公開日】2024-02-22
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
G11C 16/26 20060101AFI20240215BHJP
G11C 16/04 20060101ALI20240215BHJP
G06F 12/02 20060101ALI20240215BHJP
G06F 12/00 20060101ALI20240215BHJP
G06F 11/10 20060101ALI20240215BHJP
【FI】
G11C16/26 100
G11C16/04 170
G06F12/02 510A
G06F12/00 597U
G06F11/10 662
【審査請求】未請求
【請求項の数】14
【出願形態】OL
(21)【出願番号】P 2022127176
(22)【出願日】2022-08-09
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】山城 遼
(72)【発明者】
【氏名】白川 政信
(72)【発明者】
【氏名】武田 奈穂美
(72)【発明者】
【氏名】中川 貴史
(72)【発明者】
【氏名】柳川 新悟
【テーマコード(参考)】
5B160
5B225
【Fターム(参考)】
5B160AA12
5B225BA01
5B225BA19
5B225CA14
5B225CA28
5B225DA03
5B225DA10
5B225DE08
5B225EA05
5B225FA01
(57)【要約】
【課題】リードレイテンシの悪化を低減したメモリシステムを提供すること。
【解決手段】メモリシステムは、複数の第1記憶領域を備える不揮発性の第1メモリを備える。複数の第1記憶領域のうちの第2記憶領域に対して第1リード動作を実行し、第1リード動作の際にエラー訂正が失敗した場合、コントローラは、第2記憶領域についてエラービットの発生数を抑制する判定電圧の値である第1測定値を取得する。コントローラは、判定電圧の複数の第1候補値のうちのひとつの第1候補値を第1測定値に基づいて第2候補値で更新する。コントローラは、複数の第1記憶領域のうちの第3記憶領域に対する第2リード動作においてエラー訂正が失敗した場合、複数の第1候補値のうちのそれぞれ異なる第1候補値を判定電圧として用いて1回以上のリード動作を第3記憶領域に対して実行する。
【選択図】
図16
【特許請求の範囲】
【請求項1】
複数の第1記憶領域を備え、前記複数の第1記憶領域のそれぞれがワード線と前記ワード線に接続される複数のメモリセルとを備える、不揮発性の第1メモリと、
それぞれはインデックスで区別される複数の第1候補値が格納されるように構成された第2メモリと、
前記複数のメモリセルのしきい値電圧に対応する判定電圧を使用して前記複数のメモリセルからデータを取得するリード動作を前記複数の第1記憶領域のうちの第2記憶領域に対して実行する第1リード動作と、前記第1リード動作によって取得した前記データに対するエラー訂正と、を実行し、
前記第1リード動作によって取得した前記データに対する前記エラー訂正が失敗した場合、前記判定電圧の値を異ならせて前記複数のメモリセルのオン/オフを複数回、判定して、エラービットの発生数を抑制する前記判定電圧の値である第1測定値を判定結果の群に基づいて取得する、測定動作を前記第2記憶領域について実行し、
前記複数の第1候補値のうちの第1値のインデックスに対応する第1候補値を前記第1測定値に基づいて更新し、
前記リード動作を前記複数の第1記憶領域のうちの第3記憶領域に対して実行する第2リード動作と、前記第2リード動作によって取得したデータに対するエラー訂正と、を実行し、
前記第2リード動作によって取得した前記データに対する前記エラー訂正が失敗した場合、前記複数の第1候補値のうちのそれぞれ異なる第1候補値を判定電圧として用いて1回以上の前記リード動作を前記第3記憶領域に対して実行する1回以上の第3リード動作を実行する、
ように構成されたコントローラと、
を備えるメモリシステム。
【請求項2】
前記コントローラは、
前記第1リード動作と、前記測定動作と、をそれぞれ異なるタイミングで複数回、実行し、
複数回の前記測定動作によって取得した前記第1測定値の群に基づいて第1計算値を計算し、
前記第1値のインデックスに対応する前記第1候補値を前記第1計算値で更新する、
請求項1に記載のメモリシステム。
【請求項3】
FIFO構造を備えた第3メモリをさらに備え、
前記コントローラは、
複数回の前記測定動作のそれぞれによって取得した前記第1測定値を前記第3メモリに格納し、
前記第3メモリに格納された前記第1測定値の前記群に基づいて前記第1計算値を計算する、
請求項2に記載のメモリシステム。
【請求項4】
前記コントローラは、ホスト機器からリード要求を受信し、前記リード要求に応じて前記第1リード動作を実行する、
請求項1に記載のメモリシステム。
【請求項5】
前記コントローラは、
ホスト機器からリード要求を受信し、
前記第1リード動作を前記リード要求とは関係なくそれぞれ異なるタイミングに複数回、実行する、
請求項1に記載のメモリシステム。
【請求項6】
前記複数の第1候補値は、前記第1値のインデックスに対応する前記第1候補値と、前記第1値と異なる第2値のインデックスに対応する第1候補値とを含み、前記第2値のインデックスに対応する前記第1候補値は更新不可であり、
前記コントローラは、前記1回以上の第3リード動作において、前記第2値のインデックスに対応する前記第1候補値よりも前記第1値のインデックスに対応する前記第1候補値を優先して選択する、
請求項1に記載のメモリシステム。
【請求項7】
前記コントローラは、前記第2記憶領域に対するライト動作の完了後に前記第1値のインデックスに対応する前記第1候補値を初回に更新する場合、前記複数の第1候補値のうちの前記第1値と異なる第3値のインデックスに対応する第1候補値を前記第1測定値に基づいて更新する、
請求項1に記載のメモリシステム。
【請求項8】
前記コントローラは、前記第1測定値の取得後、
温度または前記第1測定値が第1条件を満たす場合、前記第1値のインデックスに対応する前記第1測定値の更新を実行し、
前記温度または前記第1測定値が前記第1条件を満たさない場合、前記第1値のインデックスに対応する前記第1測定値の更新を実行しない、
請求項1に記載のメモリシステム。
【請求項9】
前記複数の第1記憶領域は、複数の記憶領域群に分割され、
前記第2メモリは、前記複数の第1候補値を記憶領域群毎に格納されるように構成される、
請求項1に記載のメモリシステム。
【請求項10】
前記コントローラは、
前記第1リード動作において、
前記複数の第1候補値のうちのひとつである第2候補値を前記判定電圧として用いた前記リード動作を前記第2記憶領域に対して実行する第4リード動作と、前記第4リード動作によって取得したデータに対するエラー訂正と、を実行し、
前記第4リード動作によって取得した前記データに対する前記エラー訂正が失敗した場合、前記複数の第1候補値のうちのそれぞれ異なる第1候補値を判定電圧として用いた1回以上の前記リード動作を前記第2記憶領域に対して実行する1回以上の第5リード動作を実行し、前記1回以上の第5リード動作のそれぞれにおいて、第5リード動作によって取得したデータに対するエラー訂正を実行し、
前記1回以上の第5リード動作のうちの何れかによって取得したデータに対するエラー訂正が成功した場合、前記第1値のインデックスに対応する前記第1候補値を前記複数の第1候補値のうちの前記エラー訂正が成功したときに使用した第1候補値である第3候補値に基づいて前記第1値のインデックスに対応する前記第1候補値を更新する、
ように構成された請求項1に記載のメモリシステム。
【請求項11】
前記コントローラは、
前記第1リード動作によって取得した前記データに対する前記エラー訂正が成功した場合、前記エラー訂正の前の前記データと前記エラー訂正の後の前記データとの比較に基づいてエラービットの発生数を抑制する前記判定電圧の値である第2計算値を計算し、
前記複数の第1候補値のうちの前記第1値のインデックスに対応する前記第1候補値を前記第2計算値に基づいて更新する、
ように構成された請求項1に記載のメモリシステム。
【請求項12】
前記コントローラは、前記第1計算値の計算において、前記第3メモリに格納された前記第1測定値の前記群の平均値を計算する、
ように構成された請求項3に記載のメモリシステム。
【請求項13】
前記コントローラは、
前記第1リード動作と、前記測定動作と、をそれぞれ異なるタイミングで複数回、実行し、
複数回の前記測定動作によって取得した前記第1測定値のヒストグラムに基づいて第1計算値を計算し、
前記第1値のインデックスに対応する前記第1候補値を前記第1計算値で更新する、
ように構成された請求項1に記載のメモリシステム。
【請求項14】
複数の第1記憶領域を備え、前記複数の第1記憶領域のそれぞれがワード線と前記ワード線に接続される複数のメモリセルとを備える、不揮発性の第1メモリと、
それぞれはインデックスで区別される複数の第1候補値が格納されるように構成された第2メモリと、
判定電圧の値を異ならせて前記複数のメモリセルのオン/オフを複数回、判定して、エラービットの発生数を抑制する前記判定電圧の値である第1測定値を判定結果の群に基づいて取得する、測定動作を前記複数の第1記憶領域のうちの第2記憶領域について実行し、
前記複数の第1候補値のうちの第1値のインデックスに対応する第1候補値を前記第1測定値に基づいて更新し、
前記複数のメモリセルのしきい値電圧に対応する判定電圧を使用して前記複数のメモリセルからデータを取得するリード動作を前記複数の第1記憶領域のうちの第3記憶領域に対して実行する第1リード動作と、前記第1リード動作によって取得したデータに対するエラー訂正と、を実行し、
前記第1リード動作によって取得した前記データに対する前記エラー訂正が失敗した場合、前記複数の第1候補値のうちのそれぞれ異なる第1候補値を判定電圧として用いて1回以上の前記リード動作を前記第3記憶領域に対して実行する1回以上の第2リード動作を実行する、
ように構成されたコントローラと、
を備えるメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本実施形態は、メモリシステムに関する。
【背景技術】
【0002】
従来、メモリセルトランジスタを有するメモリシステムが広く知られている。そのようなメモリシステムにおいては、リード動作においては、メモリセルトランジスタのしきい値電圧と判定電圧との比較に基づいて、そのメモリセルトランジスタに保持されるデータが判定される。
【0003】
メモリセルトランジスタのしきい値電圧は、種々の要因によって変化し得る。そのため、メモリシステムは、判定電圧の値の変更が可能に構成され、リード動作においてデータの誤判定が発生した場合には判定電圧の値を変更してリード動作をリトライすることができる。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
一つの実施形態は、リードレイテンシの悪化を低減したメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【0006】
一つの実施形態によれば、メモリシステムは、不揮発性の第1メモリと、第2メモリと、コントローラと、を備える。第1メモリは、複数の第1記憶領域を備え、複数の第1記憶領域のそれぞれはワード線とワード線に接続される複数のメモリセルとを備える。第2メモリは、それぞれはインデックスで区別される複数の第1候補値が格納される。コントローラは、複数の第1記憶領域のうちの第2記憶領域に対してリード動作を実行する第1リード動作と、第1リード動作によって取得したデータに対するエラー訂正と、を実行する。リード動作は、複数のメモリセルのしきい値電圧に対応する判定電圧を使用して複数のメモリセルからデータを取得する動作である。コントローラは、第1リード動作によって取得したデータに対するエラー訂正が失敗した場合、測定動作を第2記憶領域について実行する。測定動作は、判定電圧の値を異ならせて複数のメモリセルのオン/オフを複数回、判定して、判定結果の群に基づいてエラービットの発生数を抑制する判定電圧の値である第1測定値を取得する動作である。コントローラは、複数の第1候補値のうちの第1値のインデックスに対応する第1候補値を第1測定値に基づいて第2候補値で更新する。コントローラは、リード動作を複数の第1記憶領域のうちの第3記憶領域に対して実行する第2リード動作と、第2リード動作によって取得したデータに対するエラー訂正と、を実行する。コントローラは、第2リード動作によって取得したデータに対するエラー訂正が失敗した場合、複数の第1候補値のうちのそれぞれ異なる第1候補値を判定電圧として用いて1回以上のリード動作を第3記憶領域に対して実行する1回以上の第3リード動作を実行する。
【図面の簡単な説明】
【0007】
【
図1】実施形態のメモリシステムの構成例を示す図。
【
図4】実施形態のメモリセルが取り得るしきい値電圧の一例を示す図。
【
図5】実施形態のメモリセルが取り得るしきい値電圧の別の一例を示す図。
【
図6】実施形態のシフトインデックステーブルのデータ構造の一例を示す図。
【
図7】実施形態のシフトインデックステーブルのエントリID1,ID2に記録されるシフトパターンの取得方法の一例を示す図。
【
図8】実施形態のRAMに保持される各種データを説明する図。
【
図9】実施形態の管理テーブルのデータ構成例を示す図。
【
図10】実施形態の第1のシフトパターン測定動作を説明するための図。
【
図11】実施形態の第2のシフトパターン測定動作においてヒストグラムを取得する動作を説明するための図。
【
図12】実施形態の第2のシフトパターン測定動作において使用される推定関数の構成の一例を説明ための図。
【
図13】実施形態のコントローラによるひとつのブロックに対する典型的な動作例を示すフローチャート。
【
図14】実施形態のパトロールリードの動作の一例を示すフローチャート。
【
図15】実施形態の管理IDおよびシフトインデックステーブルに基づくリード動作の一例を示すフローチャート。
【
図16】実施形態のホストリードの動作の一例を示すフローチャート。
【
図17】実施形態の変形例1のシフトパターン計算動作を説明するための図。
【
図18】実施形態の変形例1のシフトパターン計算動作を説明するための図。
【発明を実施するための形態】
【0008】
以下に添付図面を参照して、実施形態にかかるメモリシステムを詳細に説明する。なお、この実施形態により本発明が限定されるものではない。
【0009】
(実施形態)
図1は、実施形態のメモリシステムの構成例を示す図である。
図1に示されるように、メモリシステム1は、ホスト機器300と接続可能である。ホスト機器300は、例えば、サーバ、パーソナルコンピュータ、またはモバイル型の情報処理装置などが該当する。メモリシステム1は、ホスト機器300の外部記憶装置として機能する。ホスト機器300は、メモリシステム1に対して要求を発行することができる。要求は、リード要求およびライト要求を含む。
【0010】
メモリシステム1は、NAND型フラッシュメモリ100として、1以上のメモリチップCP、および1つのコントローラ200を備える。ここでは、メモリシステム1は、1以上のメモリチップCPとして、メモリチップCP0、CP1、CP2、CP3を備える。なお、メモリシステム1に具備されるメモリチップCPの数は、4に限定されない。
【0011】
各メモリチップCPは、複数のメモリセルトランジスタを備え、データを不揮発に記憶することができる。メモリチップCPは、NANDバス400によってコントローラ200と接続されている。なお、各メモリチップCPは第1メモリの一例である。
【0012】
コントローラ200は、ホストインターフェイス回路(HOST I/F)201、RAM(Random Access Memory)202、CPU(Central Processing Unit)203、バッファメモリ(Buffer Memory)204、NANDインターフェイス回路(NAND I/F)205、およびECC回路(Error Correction Code circuit:ECC)206を備える。コントローラ200は、例えばSoC(System-On-a-Chip)として構成され得る。コントローラ200は、複数のチップによって構成されてもよい。コントローラ200は、CPU203に代えて、FPGA(field-programmable gate array)またはASIC(application specific integrated circuit)を備えていてもよい。つまり、コントローラ200は、ソフトウェア、ハードウェア、またはこれらの組み合わせによって構成され得る。なお、RAM202は、コントローラ200の外に配置されてもよい。
【0013】
ホストインターフェイス回路201は、例えばSATA(Serial Advanced Technology Attachment)規格、SAS(Serial Attached SCSI)規格、またはPCI(Peripheral Components Interconnect) Express(記録商標)規格などに準拠したバスを介してホスト機器300と接続され、コントローラ200とホスト機器300との通信を司る。
【0014】
NANDインターフェイス回路205は、NANDバス400を介して各メモリチップCPと接続され、コントローラ200とメモリチップCPとの通信を司る。
【0015】
CPU203は、コントローラ200の動作を制御する。
【0016】
RAM202は、CPU203の作業領域として使用される。バッファメモリ204は、メモリチップCPに送信されるデータ、およびメモリチップCPから受信したデータを一時的に保持する。RAM202およびバッファメモリ204は、例えばDRAM(dynamic random access memory)、SRAM(static random access memory)、またはこれらの組み合わせなどによって構成され得る。なお、RAM202およびバッファメモリ204を構成するメモリの種類は、これらに限定されない。
【0017】
なお、RAM202は第2メモリおよび第3メモリの一例である。第2メモリと第3メモリとは実施形態のように一つのRAM202によって構成されてもよいし、それぞれ異なるメモリによって構成されてもよい。
【0018】
ECC206は、エラー訂正符号を用いて、エラーの検出および検出されたエラーの訂正を実行する。エラーの検出および検出されたエラーの訂正を単にエラー訂正と表記する。
【0019】
図2は、メモリチップCPの構成例を示す図である。図示するようにメモリチップCPは、アクセス回路110およびメモリセルアレイ111を備える。
【0020】
メモリセルアレイ111は、複数のプレーン(プレーン0、プレーン1)に分割されている。各プレーンは、並列にアクセスされることが可能なサブアレイである。各プレーンは、各々が複数の不揮発性メモリセルトランジスタの集合である複数のブロックBLK(BLK0、BLK1、…)を備える。ブロックBLKの各々は、それぞれがワード線およびビット線に関連付けられたメモリセルトランジスタの集合である複数のストリングユニットSU(SU0、SU1、…)を備える。ストリングユニットSUの各々は、メモリセルトランジスタが直列接続された複数のNANDストリング114を備える。なお、ストリングユニットSU内のNANDストリング114の数は任意である。なお、メモリセルアレイ111が備えるプレーンの数は2に限定されない。また、メモリセルアレイ111は、必ずしも分割されていなくてもよい。
【0021】
なお、ブロックBLKは、第1記憶領域の一例である。
【0022】
アクセス回路110は、例えば、ロウデコーダ、カラムデコーダ、センスアンプ、ラッチ回路、および電圧発生回路を含む。アクセス回路110は、コントローラ200からの命令に応じて、各プレーンのメモリセルアレイ111に対し、プログラム動作、センス動作、およびイレース動作を実行する。
【0023】
プログラム動作はメモリセルアレイ111にデータをライトする動作である。センス動作はメモリセルアレイ111からデータをリードする動作である。
【0024】
なお、コントローラ200がメモリチップCPにデータをライトする一連の動作を、ライト動作と表記する。ライト動作は、コントローラ200がデータをメモリチップCPに転送するデータイン動作と、アクセス回路110がデータイン動作によって受信したデータをメモリセルアレイ111にライトするプログラム動作と、によって構成される。
【0025】
コントローラ200がメモリチップCPからデータをリードする一連の動作を、リード動作を表記する。リード動作は、アクセス回路110がメモリセルアレイ111からデータをリードするセンス動作と、センス動作によってリードされたデータをコントローラ200がメモリチップCPから取得するデータアウト動作と、によって構成される。
【0026】
図3は、実施形態のブロックBLKの回路構成を示す図である。なお、各ブロックBLKは、同一の構成を有している。ブロックBLKは、例えば4つのストリングユニットSU0~SU3を有する。各ストリングユニットSUは、複数のNANDストリング114を含む。
【0027】
NANDストリング114の各々は、例えば64個のメモリセルトランジスタMT(MT0~MT63)および選択トランジスタST1、ST2を含んでいる。メモリセルトランジスタMTは、制御ゲートと電荷蓄積層とを備え、データを不揮発に保持する。そして64個のメモリセルトランジスタMT(MT0~MT63)は、選択トランジスタST1のソースと選択トランジスタST2のドレインとの間に直列接続されている。なお、メモリセルトランジスタMTは、電荷蓄積層に絶縁膜を用いたMONOS型であってもよいし、電荷蓄積層に導電膜を用いたFG型であってもよい。さらに、NANDストリング114内のメモリセルトランジスタMTの個数は64個に限定されない。
【0028】
ストリングユニットSU0~SU3の各々における選択トランジスタST1のゲートは、それぞれ選択ゲート線SGD0~SGD3に接続される。これに対してストリングユニットSU0~SU3の各々における選択トランジスタST2のゲートは、例えば選択ゲート線SGSに共通接続される。ストリングユニットSU0~SU3の各々における選択トランジスタST2のゲートは、ストリングユニットSU毎に異なる選択ゲート線SGS0~SGS3に接続されてもよい。同一のブロックBLK内にあるメモリセルトランジスタMT0~MT63の制御ゲートは、それぞれワード線WL0~WL63に共通接続される。
【0029】
ストリングユニットSU内にある各NANDストリング114の選択トランジスタST1のドレインは、それぞれ異なるビット線BL(BL0~BL(L-1)、但しLは2以上の自然数)に接続される。また、ビット線BLは、複数のブロックBLK間で各ストリングユニットSU内にある1つのNANDストリング114を共通に接続する。更に、各選択トランジスタST2のソースは、ソース線SLに共通に接続されている。
【0030】
つまりストリングユニットSUは、異なるビット線BLに接続され、且つ同一の選択ゲート線SGDに接続されたNANDストリング114の集合である。またブロックBLKは、ワード線WLを共通にする複数のストリングユニットSUの集合である。そしてメモリセルアレイ111は、ビット線BLを共通にする複数のブロックBLKの集合である。
【0031】
アクセス回路110による1つのプレーンに対するプログラム動作およびセンス動作は、1つのストリングユニットSUにおける1つのワード線WLに接続されたメモリセルトランジスタMTに対して、一括して行われる。以降、1つのプレーンに対するプログラム動作およびセンス動作の際、一括して選択されるメモリセルトランジスタMTの群を「メモリセルグループMCG」と表記する。そして、1つのメモリセルグループMCGにライトされる、あるいはリードされる1ビットのデータの集まりを「ページ」と表記する。
【0032】
アクセス回路110による1つのプレーンに対するイレース動作は、ブロックBLK単位、またはブロックBLKよりも小さい単位で行うことができる。イレース方法に関しては、例えば“NONVOLATILE SEMICONDUCTOR MEMORY DEVICE”という2011年9月18日に出願された米国特許出願13/235,389号に記載されている。また、イレース方法に関しては、“NON-VOLATILE SEMICONDUCTOR STORAGE DEVICE”という2010年1月27日に出願された米国特許出願12/694,690号に記載されている。更に、“NONVOLATILE SEMICONDUCTOR MEMORY DEVICE AND DATA ERASE METHOD THEREOF”という2012年5月30日に出願された米国特許出願13/483,610号に記載されている。これらの特許出願は、その全体が本願明細書において参照により援用されている。
【0033】
なお、それぞれ異なるプレーンまたは異なるメモリチップCPに格納された複数のページによって1つの論理ページが構成され、コントローラ200は1つの論理ページを構成する複数のページを対象として並列にプログラム動作またはセンス動作を指示してもよい。また、それぞれ異なるプレーンまたは異なるメモリチップCPに具備される複数のブロックBLKによって1つの論理ブロックが構成され、コントローラ200は、1つの論理ブロックを構成する複数のブロックBLKに対して並列にイレース動作を指示してもよい。
【0034】
以降では、メモリセルトランジスタMTを、単に、メモリセルと表記する。
【0035】
図4は、実施形態のメモリセルが取り得るしきい値電圧の一例を示す図である。縦軸は、メモリセルの数を示しており、横軸は、しきい値電圧を示している。即ち、本図は、しきい値電圧に対するメモリセルの分布を示している。以下、本実施形態では、メモリセルが8値のデータを保持可能な場合について説明するが、保持可能なデータは8値に限定されない。本実施形態においては、メモリセルが2値以上のデータ(1ビット以上のデータ)を保持可能である限り、メモリセルが保持できるデータのビット数は任意である。
【0036】
図4に示すように、しきい値電圧が取り得る範囲は、8つの範囲に区分される。この8つの範囲を、しきい値電圧が低いほうから順に、“Er”ステート、“A”ステート、“B”ステート、“C”ステート、“D”ステート、“E”ステート、“F”ステート、および“G”ステートと呼ぶことにする。各メモリセルのしきい値電圧は、アクセス回路110によって、“Er”ステート、“A”ステート、“B”ステート、“C”ステート、“D”ステート、“E”ステート、“F”ステート、および“G”ステート、の何れかに属するように、制御される。その結果、しきい値電圧に対するメモリセルの数をプロットした場合、メモリセルは、理想的には、本図に示すように、それぞれ異なるステートに属する互いに重ならない8つのローブ状の分布を形成する。以降では、ステートごとの分布を、単に、ローブ、と表記することがある。
【0037】
8つのステートは、3ビットのデータに対応する。本図の例によれば、“Er”ステートは“111”に対応し、“A”ステートは“110”に対応し、“B”ステートは“100”に対応し、“C”ステートは“000”に対応し、“D”ステートは“010”に対応し、“E”ステートは“011”に対応し、“F”ステートは“001”に対応し、“G”ステートは“101”に対応する。このように、各メモリセルは、そのしきい値電圧が属するステートに応じたデータを保持することができる。なお、
図4に示すステートとデータとの対応関係は、データコーディングの一例である。データコーディングは本図の例に限定されない。
【0038】
なお、1つのメモリセルに保持される3ビットのデータのうち、LSB(Least Significant Bit)をロアービット、MSB(Most Significant Bit)をアッパービット、LSBとMSBとの間のビットをミドルビット、と表記する。同一のメモリセルグループMCGに属する全てのメモリセルトランジスタMTのロアービットの集合を、ロアーページと表記する。同一のメモリセルグループMCGに属する全てのメモリセルトランジスタMTのミドルビットの集合を、ミドルページと表記する。同一のメモリセルグループMCGに属する全てのメモリセルトランジスタMTのアッパービットの集合を、アッパーページと表記する。
【0039】
しきい値電圧は、イレース動作によって“Er”ステートに低下せしめられる。また、しきい値電圧は、プログラム動作によって、“Er”ステートに維持されるか、または“A”ステート、“B”ステート、“C”ステート、“D”ステート、“E”ステート、“F”ステート、および“G”ステート、の何れかに至るまで、上昇せしめられる。
【0040】
具体的には、プログラム動作においては、アクセス回路110は、カラムアドレスに対応したビット線BLを選択する。アクセス回路110は、選択されたビット線BLの電位をゼロとする。アクセス回路110は、ロウアドレスに対応したワード線WLを選択し、選択されたワード線WLに、プログラミングパルスを印加する。すると、選択されたビット線BLおよび選択されたワード線WLとの交点に位置するメモリセルの電荷蓄積層に電子が注入され、その結果、メモリセルのしきい値電圧が上昇する。アクセス回路110は、所定のタイミングでデータのリードを行うことで、メモリセルのしきい値電圧がライトデータのデータに対応した目標のステートに到達したか否かを確認する(ベリファイリード)。アクセス回路110は、メモリセルのしきい値電圧が目標のステートに到達するまで、プログラムパルスの印加を継続する。
【0041】
以降、プログラム動作によってあるステートにしきい値電圧が設定されたメモリセルを、そのステートに属するメモリセル、と表記することがある。
【0042】
隣接する2つのステート間には、判定電圧が設定される。例えば、
図4に例示されるように、“Er”ステートと“A”ステートとの間に判定電圧Vraが設定され、“A”ステートと“B”ステートとの間に判定電圧Vrbが設定され、“B”ステートと“C”ステートとの間に判定電圧Vrcが設定され、“C”ステートと“D”ステートとの間に判定電圧Vrdが設定され、“D”ステートと“E”ステートとの間に判定電圧Vreが設定され、“E”ステートと“F”ステートとの間に判定電圧Vrfが設定され、“F”ステートと“G”ステートとの間に判定電圧Vrgが設定される。センス動作においては、アクセス回路110は、複数種類の判定電圧を用いて、メモリセルが属するステートに対応付けられたデータを判定する。
【0043】
例えば
図4に示されたデータコーディングが適用される場合を考える。メモリセルが“Er”ステート、“E”ステート、“F”ステート、および“G”ステート、の何れかに属する場合、そのメモリセルが保持するロアービットの値は“1”である。メモリセルが“A”ステート、“B”ステート、“C”ステート、および“D”ステートの何れかに属する場合、そのメモリセルが保持するロアービットの値は“0”である。よって、VraおよびVreの2種類の判定電圧を使用することによって、ロアーページのデータが判定できる。
【0044】
メモリセルが“Er”ステート、“A”ステート、“D”ステート、および“E”ステートの何れかに属する場合、そのメモリセルが保持するミドルビットの値は“1”である。メモリセルが“B”ステート、“C”ステート、“F”ステート、および“G”ステートの何れかに属する場合、そのメモリセルが保持するミドルビットの値は“0”である。よって、Vrb、Vrd、およびVrfの3種類の判定電圧を使用することによって、ミドルページのデータが判定できる。
【0045】
メモリセルが“Er”ステート、“A”ステート、“B”ステート、および“G”ステートの何れかに属する場合、そのメモリセルが保持するアッパービットの値は“1”である。メモリセルが“C”ステート、“D”ステート、“E”ステート、および“F”ステートの何れかに属する場合、そのメモリセルが保持するアッパービットの値は“0”である。よって、VrcおよびVrgの2種類の判定電圧を使用することによって、アッパーページのデータが判定できる。
【0046】
このように、データの判定に使用される判定電圧の種類は、センス動作の対象のページの種類に応じて異なる。アクセス回路110は、センス動作では、センス動作の対象のページの種類に応じた複数種類の判定電圧を使用する。
【0047】
なお、
図4では、メモリセルが、互いに重ならない8つのローブを形成する場合を説明した。しかしながら、メモリセルのしきい値電圧は、種々の要因で変化し得る。例えば、メモリセルのしきい値電圧は、プログラム動作の完了時からの経過時間に応じて変化する傾向がある。メモリセルのしきい値電圧の変化の速度は、プログラム動作完了の直後が最も早く、経過時間とともに減速する。イレース動作とプログラム動作とのサイクルの実行回数が多いメモリセルほど、しきい値電圧が変化しやすい。また、メモリセルのしきい値電圧の変化は、プログラム動作の完了時からの経過時間だけでなく、当該メモリセルに対するセンス動作、隣接するメモリセルに対するセンス動作、アクセスの際の温度、などによっても影響され得る。メモリセルのしきい値電圧が変化し得るので、現実的には、センス動作時において、隣り合う2つのローブが互いに重なり合った状態になっている場合がある。
【0048】
図5は、実施形態のメモリセルが取り得るしきい値電圧の別の一例を示す図である。ここでは、説明を簡単にするために、“A”ステートおよび“B”ステートのいずれかに属するメモリセルの分布を図示している。実線は、“A”ステートおよび“B”ステートのいずれかに属するメモリセルの分布を示している。破線は、“A”ステートのローブを示し、一点鎖線は、“B”ステートのローブを示している。本図の例では、“A”ステートのローブの裾野と“B”ステートのローブの裾野とが重なり合っている。言い換えると、“A”ステートに属するメモリセルのしきい値電圧の最大値が判定電圧Vrbを超えており、かつ、“B”ステートに属するメモリセルのしきい値電圧の最小値が判定電圧Vrbを下回っている。“A”ステートに属し、かつ、しきい値電圧が判定電圧Vrbよりも大きいメモリセルがリードされた場合、そのメモリセルは“B”ステートに属するとして認識される。即ち、“110”としてプログラムされたデータが“100”としてリードされる。“B”ステートに属し、かつ、しきい値電圧が判定電圧Vrbよりも小さいメモリセルがリードされた場合、そのメモリセルは“A”ステートに属するとして認識される。即ち、“100”としてプログラムされたデータが“110”としてリードされる。
【0049】
このように、センス動作によってリードされたデータは、しきい値電圧の変化によって、プログラム動作の時点での値から変化する場合がある。データおよびしきい値電圧の変化に対しては、コントローラ200は、エラー訂正と、判定電圧のシフトと、によって対応する。具体的には、コントローラ200では、ECC回路206によって、リードデータに対してエラー訂正を実行する。エラー訂正が失敗した場合には、コントローラ200は、判定電圧を変えてリード動作を再び実行する。なお、エラー訂正が失敗するとは、変化後のデータから変化前のデータを復元できないことをいう。具体的には、エラー訂正が失敗するとは、リードデータに含まれるエラービットが訂正できないことをいう。エラー訂正が成功するとは、リードデータに含まれる全てのエラービットが訂正されたことをいう。コントローラ200は、エラー訂正が成功するか、またはリード動作が繰り返し実行された回数が所定回数に至るまで、リトライリードする。つまり、コントローラ200は、エラー訂正が成功するか、またはリード動作が繰り返し実行された回数が所定回数に至るまで、判定電圧を変化させながらリード動作を繰り返す。判定電圧を変化させてリードするリード動作を、シフトリードと表記する。
【0050】
なお、判定電圧の値は、種々の量で表現され得る。また、判定電圧の値は、種々の表現で指示され得る。本実施形態では、一例として、判定電圧の種類(Vra~Vrg)毎に基準値が予め設定されており、判定電圧の値は、基準値からの差分であるシフト量で表現される。また、メモリチップCP内の所定の位置に基準値が判定電圧の種類毎に記録されている。そして、コントローラ200は、判定電圧の種類毎に基準値からのシフト量をメモリチップCPに指示する。
【0051】
なお、判定電圧の表現方法および指示の方法は、これに限定されない。例えば、判定電圧の値は差分ではなく電圧値で表現され、判定電圧は、メモリチップCPに対し、差分ではなく電圧値で指示されてもよい。
【0052】
リトライリードでは、コントローラ200は、センス動作において適用される判定電圧を、シフトインデックステーブル220に基づいて取得する。
【0053】
図6は、実施形態のシフトインデックステーブル220のデータ構造の一例を示す図である。シフトインデックステーブル220は、複数のエントリを含んでおり、それぞれのエントリには一つのシフトパターンが記録されている。シフトパターンは、全種類の判定電圧の値をそれぞれ1つずつ含むセットであり、判定電圧の候補値を示すものである。各シフトパターンが含むそれぞれの種類の判定電圧の値は、基準値からのシフト量の形式で表記される。
図6において、シフト量X(XはA、B、C、D、E、F、G)は、判定電圧Vrx(xはa、b、c、d、e、f、g)の基準値からの差分を示す。
【0054】
シフトインデックステーブル220に含まれる各エントリは、インデックスによって区別される。そして、各エントリにはシフトパターンが記録される。各エントリに記録されたシフトパターンは、判定電圧の候補値である。つまり、シフトパターンにはインデックスの値が対応付けられている。
【0055】
なお、インデックスは、IDとも表記される。インデックスの値がYのエントリは、エントリIDY(Yは0以上の整数)とも表記される。あるシフトパターンがエントリIDYに記録されている場合、そのシフトパターンはIDYのシフトパターンとも表記される。あるシフトパターンがエントリIDYに記録されている場合、インデックスYは、そのシフトパターンのインデックスとも表記される。
【0056】
エントリID0には、初期状態で使用されるシフトパターンが記録される。エントリID0に記録されたシフトパターンおよびエントリID3から末尾のエントリ(ここではエントリIDI_lastと表記する)までの各エントリに記録されたシフトパターンは、固定値とされる。エントリID0、ID3~IDI_lastには、しきい値電圧の変化の進行に対応した順番で複数のシフトパターンが記録される。即ち、これらのエントリに与えられたインデックスの値0,3~I_lastは、しきい値電圧の変化の進行に対応した順位を示す。
【0057】
例えば、しきい値電圧の変化の進行が第1の度合いと、第1の度合いよりも変化がより進行した第2の度合いと、を考える。第1の度合いに対応した第1のシフトパターンには、第2の度合いに対応した第2のシフトパターンよりも若い順位が設定される。
【0058】
よって、理論上では、コントローラ200がシフトリードを繰り返す際、エントリID0,ID3~IDI_lastの順番でシフトパターンを選択して順次適用すれば、エラー訂正に失敗することなくリードが可能なシフトパターンを最も効率よく突き止めることが可能である。
【0059】
しかしながら、エントリID0,ID3~IDI_lastには、想定し得る使用条件の下で製造者が計算または試験により求めたシフトパターンが記録される。よって、製造者が想定したメモリシステム1の使用条件と、エンドユーザによるメモリシステム1の実際の使用条件と、が異なる場合、インデックスの値の順番にシフトパターンを選択して適用しても、エラー訂正に失敗することなくリードが可能なシフトパターンを得ることができない場合がある。
【0060】
そこで、実施形態では、或るエントリ内のシフトパターンは可変に構成される。ここでは一例として、エントリID1およびエントリID2のそれぞれのシフトパターンは可変とされる。コントローラ200は、実際の使用状況に応じてエントリID1内のシフトパターンおよびエントリID2内のシフトパターンを更新する。
【0061】
図7は、実施形態のエントリID1,ID2に記録されるシフトパターンの取得方法の一例を示す図である。
【0062】
コントローラ200は、リードデータに発生するエラービットの数を抑制できるシフトパターンを測定する、シフトパターン測定動作を実行することが可能である。リードデータに発生するエラービットの数を抑制できるシフトパターンを便宜的に最適シフトパターンと表記する。シフトパターン測定動作の例については後述する。
【0063】
コントローラ200は、所定の条件をトリガとしてシフトパターン測定動作を実行する。所定の条件は、例えば、所定回数、シフトインデックステーブル220に従ってシフトリードを行ってもエラー訂正が成功しないことである。なお、シフトパターン測定動作の実行開始のトリガはこれに限定されない。
【0064】
コントローラ200は、シフトパターン測定動作によって取得した最新の所定個の最適シフトパターンをFIFO(First-In First-Out)構造の記憶領域(即ちFIFO222、FIFO223-0~223-7)に格納する。つまり、コントローラ200は、取得した最適シフトパターンのヒストリをFIFO構造の記憶領域に保存する。コントローラ200は、当該最新の所定個の最適シフトパターンのヒストリに基づいて新たなシフトパターンを生成し、生成した新たなシフトパターンをエントリID1,ID2に上書き形式で記録する。これによって、エントリID1,ID2内のシフトパターンは更新される。
【0065】
エントリID1には、システム全体、即ちメモリシステム1が備える全てのメモリチップCPから取得された最適シフトパターンに基づき生成されたシフトパターンが記録される。つまり、コントローラ200は、メモリシステム1においてシフトパターン測定動作を行った場合、シフトパターン測定動作によって得られた最適シフトパターンをFIFO222に格納する。そして、コントローラ200は、FIFO222に格納されている全ての最適シフトパターンに基づき、新たなシフトパターンを取得し、当該新たなシフトパターンをエントリID1に記録する。エントリID1に記録されたシフトパターンを、メモリシステム1の出荷後に動的に生成された一つのシフトパターンという意味で、第1ホットパターンと表記する。
【0066】
エントリID2には、各プレーンの範囲で取得された最適シフトパターンに基づき生成されたシフトパターンが記録される。つまり、エントリID2には、メモリチップCP0のプレーン0から取得された最適シフトパターンに基づき生成されたシフトパターンと、メモリチップCP0のプレーン1から取得された最適シフトパターンに基づき生成されたシフトパターンと、メモリチップCP1のプレーン0から取得された最適シフトパターンに基づき生成されたシフトパターンと、メモリチップCP1のプレーン1から取得された最適シフトパターンに基づき生成されたシフトパターンと、メモリチップCP2のプレーン0から取得された最適シフトパターンに基づき生成されたシフトパターンと、メモリチップCP2のプレーン1から取得された最適シフトパターンに基づき生成されたシフトパターンと、メモリチップCP3のプレーン0から取得された最適シフトパターンに基づき生成されたシフトパターンと、メモリチップCP3のプレーン1から取得された最適シフトパターンに基づき生成されたシフトパターンと、が記録される。このように、エントリID2には、メモリチップCPとプレーンとの組み合わせ毎にシフトパターンが記録される。
【0067】
コントローラ200は、或るメモリチップCPの或るプレーンに対してシフトパターン測定動作を行った場合、シフトパターン測定動作によって得られた最適シフトパターンをFIFO223-0~223-7のうちのシフトパターン測定動作の対象のメモリチップCPとプレーンとの組み合わせに対応したFIFO223に格納する。そして、コントローラ200は、そのFIFO223に格納されている全ての最適シフトパターンに基づき、新たなシフトパターンを取得し、当該新たなシフトパターンをシフトパターン測定動作の対象のメモリチップCPとプレーンとの組み合わせに対応付けてシフトインデックステーブル220のエントリID2に格納する。エントリID2に記録された各シフトパターンを、第2ホットパターンと表記する。
【0068】
しきい値電圧の変化の傾向は、メモリチップCP毎に異なる場合がある。また、メモリチップCP内においても、しきい値電圧の変化の傾向がプレーン毎に異なる場合がある。メモリチップCPとプレーンとの組み合わせ毎に個別に第2ホットパターンが生成されることで、メモリチップCP毎またはメモリチップCP内のプレーン毎に異なり得るしきい値電圧の変化の傾向に則したシフトパターンを第2ホットパターンとして生成することが可能である。
【0069】
実施形態では、さらに、第2ホットパターンの更新に関して条件が設けられている。プログラム動作の完了後にシフトパターンが初回に更新された場合にのみ、第2ホットパターンの更新が行われる。
【0070】
前述したように、メモリセルのしきい値電圧の変化の速度は、プログラム動作完了の直後が最も速い。そのため、プログラム動作完了の直後の期間において、管理IDが示すシフトパターンを用いたリード動作においてエラー訂正が成功しない事象が発生しやすい。実施形態によれば、上記事象がプログラム動作完了の後に管理IDの初回の更新よりも先に発生したときに、コントローラ200は、最適シフトパターンの取得を行い、取得した最適シフトパターンに基づいて第2ホットパターンを更新する。よって、同じ記憶領域または他の記憶領域においてプログラム動作完了の後に管理IDが示すシフトパターンを用いたリード動作においてエラー訂正が成功しない事象が発生したとしても、類似の条件下で集められた最適シフトパターンの群に用いて生成された第2ホットパターンを用いたリード動作を行うことで、エラー訂正が成功する可能性を高くすることができる。
【0071】
コントローラ200は、シフトリードを繰り返す場合には、エントリID0,ID3~IDI_lastのうちの所定のルールに従って選択された複数のエントリのシフトパターンに加えて、第1ホットパターンおよび第2ホットパターンを使用候補とする。これによって、製造者が予め用意したシフトパターンだけでなく、エンドユーザによる実際の使用環境下において取得された最適シフトパターンに基づき生成されたシフトパターンである第1ホットパターンおよび第2ホットパターンがシフトリードの際に適用される。よって、シフトリードの際にエラー訂正が成功する可能性を高めることができる。
【0072】
なお、ここでは一例として、コントローラ200は、第1ホットパターンおよび第2ホットパターンをエントリID0,ID3~IDI_lastに記録されたシフトパターンよりも優先して選択する。なお、コントローラ200は、第1ホットパターンおよび第2ホットパターンを必ずしも優先しなくてもよい。
【0073】
コントローラ200は、さらに、パトロールリードを実行する。パトロールリードは、ホスト機器300からの要求に関係なくメモリチップCPに対して行われるリードである。パトロールリードは、ホスト機器300からのリード要求の際にエラー訂正が成功する確率を高めるために、エラー訂正が成功するシフトパターンを予め特定することを目的としたリード動作である。コントローラ200は、例えば所定の周期でパトロールリードを実行する。コントローラ200は、ホスト機器300からのリード要求の受信に応じ、パトロールリードの実行をスキップしたり、パトロールリードの実行の周期を一時的または非一時的に変更してもよい。つまり、パトロールリードは、ホスト機器300からのリード要求とは関係なく、異なるタイミングで複数回、実行される。
【0074】
また、コントローラ200は、パトロールリードの実行対象を管理領域単位で逐次切り替える。なお、管理領域は、1つのシフトパターンが共通に使用される記憶領域の単位である。一例では、各ブロックが管理領域とされる。
【0075】
コントローラ200は、パトロールリードでは、エラー訂正が成功するためのシフトパターンを学習する。コントローラ200は、ホスト機器300からの要求に応じてリード動作を実行する際には、学習によって得たシフトパターンを使用する。以降では、ホスト機器300から要求されたデータをリードする動作を、ホストリードと表記する。
【0076】
図8は、実施形態のRAM202に保持される各種データを説明する図である。
【0077】
RAM202には、前述したシフトインデックステーブル220および管理テーブル221が格納される。
【0078】
シフトインデックステーブル220は、前述したように、各種シフトパターンを規定した情報である。
【0079】
シフトインデックステーブル220のうちの固定エントリ、つまり
図6に示したエントリID0、ID3~IDI_last、の内容は、所定の不揮発性の記憶領域、例えばNAND型フラッシュメモリ100、に予め格納されている。コントローラ200は、起動時にシフトインデックステーブル220のうちの固定エントリの内容をRAM202にロードする。
【0080】
コントローラ200は、メモリシステム1がシャットダウンされるまでに、エントリID1およびエントリID2に記録されたシフトパターンを、定期的にNAND型フラッシュメモリ100に保存し、メモリシステム1の起動時にNAND型フラッシュメモリ100からRAM202にロードしてもよい。または、エントリID1およびエントリID2に記録されたシフトパターンの一部または全部は、電源断時に失われてもよい。
【0081】
管理テーブル221は、学習によって得たシフトパターンが記録された情報である。コントローラ200は、パトロールリードによって取得したシフトパターンのインデックスの値を、管理テーブル221に記録する。ホストリードでは、コントローラ200は、管理テーブル221を参照することによって、シフトリードを含むリード動作において使用するシフトパターンを決定する。
【0082】
管理テーブル221も、エントリID1およびエントリID2に記録されたシフトパターンと同様、メモリシステム1がシャットダウンされるまでに、定期的あるいは一括してNAND型フラッシュメモリ100に保存され、メモリシステム1の起動時にNAND型フラッシュメモリ100からRAM202にロードされてもよい。または、管理テーブル221の一部または全部は、電源断時に失われてもよい。
【0083】
RAM202には、前述したFIFO222,223-0~223-7がアロケートされる。
【0084】
FIFO222,223-0~223-7の内容も、エントリID1およびエントリID2に記録されたシフトパターンと同様、メモリシステム1がシャットダウンされるまでに、定期的あるいは一括してNAND型フラッシュメモリ100に保存され、メモリシステム1の起動時にNAND型フラッシュメモリ100からRAM202にロードされてもよい。あるいは、FIFO222,223-0~223-7の内容の一部または全部は、電源断時に失われてもよい。
【0085】
図9は、実施形態の管理テーブル221のデータ構成例を示す図である。
【0086】
管理テーブル221は、学習したシフトパターンのインデックスの値を管理領域毎に管理する。実施形態では、一例として、管理テーブル221には、シフトパターンのインデックスの値が記録される。なお、管理テーブル221に記録されたインデックスを、管理IDと表記する。
【0087】
実施形態では、一例として、各ブロックが管理領域とされる。つまり、1つのブロックから何れかのページをリードする際には、当該ブロックに対応付けられた管理IDが示すシフトパターンが使用される。
【0088】
次に、シフトパターン測定動作について説明する。まず、シフトパターン測定動作の一例として、第1のシフトパターン測定動作について説明する。第1のシフトパターン測定動作は、Vthトラッキングとも称される。
【0089】
図10は、第1のシフトパターン測定動作を説明するための図である。
図10の(A)は、メモリセルの分布の一例を示している。
【0090】
第1のシフトパターン測定動作においては、コントローラ200は、何らかの方法で選択したひとつのワード線を対象として、判定電圧の値を異ならせながら2値モードでリード動作を複数回、実行する。2値モードとは、1つの判定電圧を用いたセンス動作によって、メモリセルのオン/オフを対象のワード線に接続されたメモリセル毎に判定するモードである。メモリチップCPは、データアウト動作では、各メモリセルに対応した値を対象のワード線に接続されたメモリセル分だけ含むデータを出力する。例えば、データは、オン状態のメモリセルについては“1”、オフ状態のメモリセルについては“0”を含む。なお、オン状態を示す値およびオフ状態を示す値はこれに限定されない。
【0091】
コントローラ200は、各リード動作によって得られたデータに基づき、オン状態またはオフ状態のメモリセルの数をカウントする。
図10の(B)は、一例として、オン状態のメモリセルの数のカウント結果を示す。
【0092】
続いて、コントローラ200は、
図10の(B)に示したオン状態のメモリセルの数に基づき、オン状態のメモリセルの数の変化率を計算する。オン状態のメモリセルの数の変化率とは、判定電圧を所定単位量だけ変化させた場合のオン状態のメモリセルの数の変化量である。判定電圧に対して変化率をプロットすると、しきい値電圧に対するメモリセルの分布(即ち
図10の(A)に示す曲線)の近似が得られる。
【0093】
コントローラ200は、第1のシフトパターン測定動作において、リード動作毎に判定電圧の値をVstepずつ増加させながら複数回のリード動作を実行する。コントローラ200は、変化率として、判定電圧の値をVstepだけ増加させた際のオン状態のメモリセルの数の変化量を計算する。
【0094】
コントローラ200は、判定電圧Vra~Vrgのそれぞれについて、変化量が極小となる判定電圧の値を取得する。そして、コントローラ200は、取得した判定電圧の値のセット、即ち
図10の電圧Vra_opt~Vrg_optのセットを最適シフトパターンとして決定する。
【0095】
なお、コントローラ200は、第1のシフトパターン測定動作において、判定電圧の値をVstepずつ増加させながら複数回のリード動作を実行する。判定電圧の変更範囲は、メモリセルのしきい値電圧がとりうる全範囲をカバーしていてもよいし、特定の電圧値の付近の範囲(例えば判定電圧Vra~Vrgのそれぞれがとり得る範囲)だけをカバーしていてもよい。
【0096】
シフトパターン測定動作の別の一例として、第2のシフトパターン測定動作について説明する。
図11および
図12は、第2のシフトパターン測定動作を説明するための図である。
【0097】
図11に含まれる3つのグラフにおいて、縦軸は、メモリセルの数を示しており、横軸は、しきい値電圧を示している。
【0098】
図11の(A)は、プログラム動作の直後のメモリセルの分布を示す。プログラム動作の直後においては、例えば、本図に示すように、各ステートのローブは隣接するステートのローブと互いに離間している。
【0099】
図11の(B)は、プログラム動作が完了してからしばらくの間、メモリシステム1が使用された後に得られる、メモリセルの分布を示している。本図に示されるように、8つのローブは、
図11の(A)に示される8つのローブとは形状および位置が異なっている。8つのローブの裾野が重なり合って、1つの連続した分布が形成されている。このような分布が得られた場合、当該分布が有する7つの極小点、即ち、Vra_opt,Vrb_opt,Vrc_opt,Vrd_opt,Vre_opt,Vrf_opt,Vrg_optのセットが、
図11の(B)の状態における最適シフトパターンに該当すると考えられる。
【0100】
図11の(B)の例では、7点の参照電圧Vr1,Vr2,Vr3,Vr4,Vr5,Vr6,Vr7が予め設定されている。コントローラ200は、参照電圧Vr1,Vr2,Vr3,Vr4,Vr5,Vr6,Vr7のそれぞれを用いて2値モードでのリード動作を実行する。つまり、コントローラ200は、7回のリード動作を実行することによって、メモリチップCPのひとつのワード線から、各メモリセルのオン/オフを示すデータを参照電圧毎に取得する。コントローラ200は、参照電圧Vri(ただしiは1から7までの整数)を用いたリード動作によって得たオン状態のメモリセルの数(またはオフ状態のメモリセルの数)と、参照電圧Vri+1を用いたリード動作によって得たオン状態のメモリセルの数(またはオフ状態のメモリセルの数)と、の差分を演算することによって、参照電圧Vr1,Vr2,Vr3,Vr4,Vr5,Vr6,Vr7によって区切られた8つの区間をビンとし、メモリセルの数を度数とするヒストグラムを生成する。
【0101】
例えば、参照電圧Vriを判定電圧として用いた場合のオン状態のメモリセルの数をCiと表記し、対象のワード線に接続されたメモリセルの数をCmtと表記すると、VrjとVr(j+1)とによって区切られた区間の度数は、C(j+1)-Cjの演算によって得ることができる。ただし、jは1から6までの整数である。Vr1より小さい区間の度数は、C1とされる。Vr7より大きい区間の度数は、Cmt-C7とされる。
【0102】
図11の(C)は、上記の処理によって得られたヒストグラムを示す図である。
【0103】
なお、参照電圧Vr1~Vr7は、予め設定されている。参照電圧Vr1~Vr7の設定方法は、特定の方法に限定されない。
【0104】
例えば、判定電圧Vra~Vrgのそれぞれの基準値が予め決められており、コントローラ200は、各基準値からの差分を用いて各判定電圧を設定する場合がある。そのような場合においては、7点の判定電圧Vra~Vrgの基準値が7点の参照電圧Vr1~Vr7として使用されてもよい。
【0105】
なお、
図11の例では、参照電圧の数は、判定電圧Vra~Vrgの数と等しい。参照電圧の数は、判定電圧Vra~Vrgの数と異なっていてもよい。例えば、参照電圧の数が3点であり、コントローラ200は、当該3点の参照電圧を用いて4つのビンを有するヒストグラムを生成してもよい。
【0106】
コントローラ200は、参照電圧を用いた7回のリード動作によって取得したヒストグラムに対し、予め用意された推定行列を作用させることによって、最適シフトパターンを取得する。
【0107】
図12は、実施形態の推定行列の構成の一例を説明ための図である。本図の例では、推定行列260は、8つの行(row)と7つの列(column)とによって構成される。推定行列260の行の数は、参照電圧を用いた複数回のリード動作によって得られるヒストグラム(ヒストグラム250)を構成するビンの数と等しい。推定行列260の列の数は、最適シフトパターンを構成する電圧の数と等しい。コントローラ200は、ヒストグラム250の各ビンの値(度数)を要素として有するベクトルの右側から推定行列260を乗算することによって、7点の要素を有するベクトルを演算する。当該ベクトルを構成する7点の要素は、判定電圧Va~Vgの最適値の推定値に該当する。
【0108】
推定行列260は、例えば下記のようにして生成される。
【0109】
メモリチップCPの1以上のサンプル品などから、ヒストグラムと、7点の判定電圧Vra~Vrgの最適値のセットと、の対が、メモリチップCPのストレス条件を種々に変更しながら、多数、取得される。例えば、メモリチップCPの1以上のサンプル品が試験装置に接続され、試験装置は、メモリシステム1の実際の使用を模擬した試験を実施する。
【0110】
試験では、アクセスのパターンなどを異ならせることで、各サンプル品は、プログラム動作およびイレース動作のサイクルの実行回数やリードの実行回数などストレス条件の点で異なる状態にされる。試験装置は、各状態においてヒストグラムを取得する。
【0111】
つまり、試験装置は、メモリチップCPに、対象のワード線に参照電圧Vr1,Vr2,Vr3,Vr4,Vr5,Vr6,Vr7を順次印加させて、参照電圧毎に各メモリセルがオン状態であるかオフ状態であるかを判定する。試験装置は、参照電圧毎に、対象のワード線に接続された複数のメモリセルのうちの、オン状態のメモリセルの数(またはオフ状態のメモリセルの数)をカウントする。そして、試験装置は、参照リード電圧毎に得られたカウント値に基づいて、参照電圧Vr1,Vr2,Vr3,Vr4,Vr5,Vr6,Vr7によって区切られた8つの区間をビンとし、メモリセルの数を度数とするヒストグラムを生成する。
【0112】
試験装置は、サンプル品からヒストグラムを取得する際に、最適シフトパターンを取得する。最適シフトパターンの取得方法は、特定の方法に限定されない。最適シフトパターンは、例えば、第1のシフトパターン測定動作を実行することによって得ることができる。
【0113】
試験装置は、ヒストグラムと、ヒストグラムを取得した際に取得した最適シフトパターンのセットと、を出力する。
【0114】
上記のようにしてヒストグラムと最適シフトパターンのセットとの対が集められ、集められた多数の対を用いることで、ヒストグラムと最適シフトパターンのセットとを対応付ける推定行列260が生成される。つまり、推定行列260は、ヒストグラムを説明変数とし、最適シフトパターンのセットを目的変数とする回帰モデルである。
【0115】
第2のシフトパターン測定動作では、上記のような方法で生成された推定行列260を用いて最適シフトパターンが取得される。なお、推定行列260の生成方法は上記の方法に限定されない。
【0116】
このように、第2のシフトパターン測定動作では、コントローラ200は、判定電圧の値を複数点の参照電圧のうちから切り替えながら複数回のリード動作を2値モードで実行する。そして、コントローラ200は、複数回のリード動作の結果に基づき、しきい値電圧に対するメモリセルの数を示すヒストグラムを取得する。そして、コントローラ200は、取得されたヒストグラムと推定行列260とに基づいて判定電圧Vra~Vrgの最適値、つまり最適シフトパターンを取得する。
【0117】
以上説明したように、いずれのシフトパターン測定動作も多数回のリード動作の実行を要する。よって、ホストリード中にシフトパターン測定動作が起動すると、リードレイテンシが悪化する。
【0118】
実施形態では、シフトパターン測定動作が実行された場合、第1ホットパターン、第2ホットパターン、またはその両方は、当該シフトパターン測定動作によって得られた最適シフトパターンに基づいて更新されて、更新された各ホットパターンは、以降のシフトインデックステーブル220を用いたシフトリードにおいて使用可能となる。エンドユーザによるメモリシステム1の実際の使用条件下で得られた各ホットパターンがシフトインデックステーブル220を用いたシフトリードにおいて使用可能となるので、シフトインデックステーブル220を用いたシフトリードにおいてエラー訂正が生成する可能性が向上する。これによってシフトパターン測定動作の起動の頻度を抑制できる。つまり、シフトパターン測定動作に起因したリードレイテンシの悪化を低減することができる。
【0119】
続いて、実施形態のメモリシステム1の動作を説明する。
【0120】
図13は、実施形態のコントローラ200によるひとつのブロックに対する典型的な動作例を示すフローチャートである。なお、ここでは、管理テーブル221はNAND型フラッシュメモリ100には格納されず、管理テーブル221はメモリシステム1のシャットダウンによって失われることとして説明する。また、本図の説明においては、着目したひとつのブロックを、対象のブロック、と表記する。なお、コントローラ200は、すべてのブロックに対し、本図に示す動作を実行し得る。
【0121】
メモリシステム1が起動すると、コントローラ200は、すべての管理領域(即ちブロック)の管理IDとしてID0が記録された管理テーブル221を生成し、生成した管理テーブル221をRAMに格納する。つまり、コントローラ200は、メモリシステム1の起動直後に、初期化処理として、対象のブロックに管理IDとしてID0を設定する(S101)。
【0122】
コントローラ200は、対象のブロックに対するライト動作を開始する(S102)。なお、ライト動作は、ページ単位で実行される。対象のブロックがデータでいっぱいになるなどによって対象のブロックに対するライト動作が完了する(S103)。つまり、対象のブロックが備える全てのワード線に対するプログラム動作が完了する。
【0123】
コントローラ200は、対象のブロックに対し、パトロールリードまたはホストリードを実行する。コントローラ200は、パトロールリードまたはホストリードの際に、対象のブロックの管理IDを更新し得る(S104)。
【0124】
そして、コントローラ200は、対象のブロックに対するイレース動作を行うと(S105)、対象のブロックの管理IDをID0にリセットする(S106)。そして、制御がS102に移行する。
【0125】
図14は、実施形態のパトロールリードの動作の一例を示すフローチャートである。
【0126】
まず、コントローラ200は、1つのブロックを選択する(S201)。S201で選択されたブロックを、
図14の説明では、対象のブロックと表記する。
【0127】
コントローラ200は、管理テーブル221を参照することによって、対象のブロックの管理IDを特定する(S202)。そして、コントローラ200は、対象のブロックに対し、管理IDおよびシフトインデックステーブル220に基づくリード動作を実行する(S203)。なお、リードの対象のページの選定方法は特定の方法に限定されない。
【0128】
図15は、実施形態の管理IDおよびシフトインデックステーブル220に基づくリード動作、つまり
図14のS203の処理、の一例を示すフローチャートである。
【0129】
まず、コントローラ200は、管理IDが示すシフトパターンを用いてリード動作を実行する(S301)。そして、コントローラ200は、S301の処理によって取得したリードデータについて、エラー訂正が成功したか否かを判定する(S302)。エラー訂正が成功した場合(S302:Yes)、管理IDおよびシフトインデックステーブル220に基づくリード動作が完了する。
【0130】
エラー訂正が失敗した場合(S302:No)、コントローラ200は、ID1が示すシフトパターン、即ち第1ホットパターン、を用いてリード動作を実行する(S303)。そして、コントローラ200は、S303の処理によって取得したリードデータについて、エラー訂正が成功したか否かを判定する(S304)。エラー訂正が成功した場合(S304:Yes)、管理IDおよびシフトインデックステーブル220に基づくリード動作が完了する。
【0131】
エラー訂正が失敗した場合(S304:No)、コントローラ200は、ID2が示すシフトパターン、即ち第2ホットパターン、を用いてリード動作を実行する(S305)。コントローラ200は、ID2が示す8つの第2ホットパターンのうちの、
図14のS201の処理によって選択したブロックが属するメモリチップCPとプレーンとの組み合わせに対応した第2ホットパターンを用いてリード動作を実行する。コントローラ200は、S305の処理によって取得したリードデータについて、エラー訂正が成功したか否かを判定する(S306)。エラー訂正が成功した場合(S306:Yes)、管理IDおよびシフトインデックステーブル220に基づくリード動作が完了する。
【0132】
エラー訂正が失敗した場合(S306:No)、コントローラ200は、管理IDから1つ進んだインデックスが示すシフトパターンを用いてリード動作を実行する(S307)。そして、コントローラ200は、S307の処理によって取得したリードデータについて、エラー訂正が成功したか否かを判定する(S308)。エラー訂正が成功した場合(S308:Yes)、管理IDおよびシフトインデックステーブル220に基づくリード動作が完了する。
【0133】
エラー訂正が失敗した場合(S308:No)、コントローラ200は、管理IDから2つ進んだインデックスが示すシフトパターンを用いてリード動作を実行する(S309)。そして、管理IDおよびシフトインデックステーブル220に基づくリード動作が完了する。
【0134】
なお、
図15に示した例では、初回のリード動作においてエラー訂正が失敗した場合、コントローラ200は、シフトインデックステーブル220に基づいてシフトパターンを3回まで変更した。シフトパターンの変更が可能な回数は3回に限定されない。
【0135】
図14に説明を戻す。コントローラ200は、S203の動作の際にエラー訂正が成功したか否かを判定する(S204)。つまり、コントローラ200は、S203の動作において実行された何れかのリード動作によって、エラーを含まないリードデータが得られたか否かを判定する。
【0136】
エラー訂正が成功しなかった場合(S204:No)、コントローラ200は、シフトパターン測定動作を実行する(S205)。例えば、コントローラ200は、上述した第1のシフトパターン測定動作または第2のシフトパターン測定動作を実行する。
【0137】
コントローラ200は、S205の動作によって取得した最適シフトパターンに基づいて第1ホットパターンを更新する(S206)。
【0138】
S206では、コントローラ200は、取得した最適シフトパターンをFIFO222に入力する。これによって、FIFO222に格納されていた最も古い最適シフトパターンはFIFO222から削除される。コントローラ200は、判定電圧Vra~Vrgのそれぞれについて、FIFO222内の全ての最適シフトパターンの平均値を演算する。そして、コントローラ200は、取得した平均値のセットを新しい第1ホットパターンとしてエントリID1に上書き形式で記録する。
【0139】
続いて、コントローラ200は、シフトインデックステーブル220に記録されたシフトパターンのうちの最も適したシフトパターンを特定する(S207)。
【0140】
例えば、コントローラ200は、S205の動作によって取得した最適シフトパターンに最も類似するシフトパターンを、シフトインデックステーブル220に記録されたシフトパターンのうちの最も適したシフトパターンとする。なお、2つのシフトパターン間の類似度の指標としては、任意の指標が使用され得る。例えば、ユークリッド距離またはコサイン類似度などが使用され得る。
【0141】
S204の判定処理においてエラー訂正が成功した場合(S204:Yes)、コントローラ200は、S207では、
図15に示した一連の動作のうち、エラー訂正が成功したときに使用したシフトパターンを、シフトインデックステーブル220に記録されたシフトパターンのうちの最も適したシフトパターンとする。
【0142】
シフトインデックステーブル220に記録されたシフトパターンのうちの最も適したシフトパターンが現在の管理IDが示すシフトパターンと等しい場合(S208:Yes)、コントローラ200は、対象のブロックに対するパトロールリードを終了する。
【0143】
シフトインデックステーブルに記録されたシフトパターンのうちの最も適したシフトパターンが現在の管理IDが示すシフトパターンと異なる場合(S208:No)、コントローラ200は、管理IDの更新を行う(S209)。つまり、コントローラ200は、シフトインデックステーブル220に記録されたシフトパターンのうちの最も適したシフトパターンのインデックスで、管理IDを上書きする。
【0144】
そして、コントローラ200は、今回の管理IDの更新は対象のブロックに対するライト動作の完了後の初回の更新か否かを判定する(S210)。対象のブロックに対するライト動作の完了後の初回の更新とは、
図13のS103の後に最初にS104が実行された管理IDの更新のことをいう。
【0145】
今回の管理IDの更新は対象のブロックに対するライト動作の完了後の初回の更新である場合(S210:Yes)、コントローラ200は、第2ホットパターンを更新する(S211)。
【0146】
例えば、コントローラ200が既にS205を実行した場合、コントローラ200は、S211では、ID2が示す8つの第2ホットパターンのうちの対象のブロックが属するメモリチップCPとプレーンとの組み合わせに対応したFIFO223に、S205の処理によって取得した最適シフトパターンを入力する。これによって、FIFO223に格納されていた最も古い最適シフトパターンはFIFO223から削除される。コントローラ200は、判定電圧Vra~Vrgのそれぞれについて、FIFO223内の全てのシフトパターンの平均値を演算する。そして、コントローラ200は、ID2が示す8つの第2ホットパターンのうちの対象のブロックが属するメモリチップCPとプレーンとの組み合わせに対応した第2ホットパターンに、得られた平均値のセットを新しい第2ホットパターンとして上書き形式で記録する。
【0147】
また、コントローラ200が、S204の判定処理においてYesと判定した場合、コントローラ200は、S211では、ID2が示す8つの第2ホットパターンのうちの対象のブロックが属するメモリチップCPとプレーンとの組み合わせに対応したFIFO223に、更新後の管理IDが示すシフトパターンを入力する。これによって、FIFO223に格納されていた最も古い最適シフトパターンはFIFO223から削除される。コントローラ200は、判定電圧Vra~Vrgのそれぞれについて、FIFO223内の全てのシフトパターンの平均値を演算する。そして、コントローラ200は、ID2が示す8つの第2ホットパターンのうちの対象のブロックが属するメモリチップCPとプレーンとの組み合わせに対応した第2ホットパターンに、得られた平均値のセットを新しい第2ホットパターンとして上書き形式で記録する。
【0148】
今回の管理IDの更新は対象のブロックに対するライト動作の完了後の初回の更新でない場合(S210:No)、またはS211の後、コントローラ200は、対象のブロックに対するパトロールリードを終了する。
【0149】
このように、コントローラ200は、パトロールリードにおいてシフトパターン測定動作を起動した場合には、シフトパターン測定動作によって取得した最適シフトパターンを用いて第1ホットパターンを更新し、管理IDを更新する。そして、管理IDの更新がライト動作の完了後に初回に実行したものであれば、コントローラ200は、シフトパターン測定動作によって取得した最適シフトパターンを用いて第2ホットパターンをも更新する。
【0150】
図16は、実施形態のホストリードの動作の一例を示すフローチャートである。
【0151】
まず、コントローラ200は、管理テーブル221を参照することによって、リード対象のページが格納されたブロックの管理IDを特定する(S401)。リード対象のページが格納されたブロックを、
図16の説明において、対象のブロックと表記する。
【0152】
コントローラ200は、対象のブロックに対し、管理IDおよびシフトインデックステーブル220に基づくリード動作を実行する(S402)。S402では、コントローラ200は、例えば、
図15に示した動作を実行する。
【0153】
続いて、コントローラ200は、S402の動作の際にエラー訂正が成功したか否かを判定する(S403)。つまり、コントローラ200は、S402の動作において実行された何れかのリード動作によって、エラーを含まないリードデータが得られたか否かを判定する。
【0154】
エラー訂正が成功した場合(S403:Yes)、コントローラ200は、リードデータをホスト機器300に送信して、ホストリードが終了する。
【0155】
エラー訂正が成功しなかった場合(S403:No)、コントローラ200は、シフトパターン測定動作を実行する(S404)。例えば、コントローラ200は、第1シフトパターン測定動作または第2シフトパターン測定動作を実行する。
【0156】
このとき、コントローラ200は、S404の動作によって取得した最適シフトパターンを用いたリード動作を実行し、得たリードデータをホスト機器300に送信し得る。
【0157】
続いて、コントローラ200は、S404の動作によって取得した最適シフトパターンに基づいて第1ホットパターンを更新する(S405)。そして、コントローラ200は、シフトインデックステーブル220に記録されたシフトパターンのうちの最も適したシフトパターンを特定する(S406)。
【0158】
S207の処理と同様、例えば、コントローラ200は、S404の動作によって取得した最適シフトパターンに最も類似するシフトパターンを、シフトインデックステーブル220に記録されたシフトパターンのうちの最も適したシフトパターンとする。
【0159】
続いて、コントローラ200は、管理IDの更新を行う(S407)。つまり、コントローラ200は、シフトインデックステーブルに記録されたシフトパターンのうちの最も適したシフトパターンのインデックスで、管理IDを上書きする。
【0160】
続いて、コントローラ200は、今回の管理IDの更新は対象のブロックに対するライト動作の完了後の初回の更新か否かを判定する(S408)。
【0161】
今回の管理IDの更新は対象のブロックに対するライト動作の完了後の初回の更新である場合(S408:Yes)、コントローラ200は、第2ホットパターンを更新する(S409)。
【0162】
例えば、コントローラ200は、ID2が示す8つの第2ホットパターンのうちの対象のブロックが属するメモリチップCPとプレーンとの組み合わせに対応したFIFO223に、S404の処理によって取得した最適シフトパターンを入力する。これによって、FIFO223に格納されていた最も古い最適シフトパターンはFIFO223から削除される。コントローラ200は、判定電圧Vra~Vrgのそれぞれについて、FIFO223内の全てのシフトパターンの平均値を演算する。そして、コントローラ200は、ID2が示す8つの第2ホットパターンのうちの対象のブロックが属するメモリチップCPとプレーンとの組み合わせに対応した第2ホットパターンに、得られた平均値のセットを新しい第2ホットパターンとして上書き形式で記録する。
【0163】
今回の管理IDの更新は対象のブロックに対するライト動作の完了後の初回の更新でない場合(S408:No)、またはS409の後、ホストリードが終了する。
【0164】
このように、実施形態によれば、コントローラ200は、パトロールリードまたはホストリードにおいて或るブロックに対してリード動作を実行して(例えば
図14のS203または
図16のS402)、エラー訂正を実行する。コントローラ200は、エラー訂正が失敗した場合(例えば
図14のS204においてNo、または
図16のS403においてNo)、シフトパターン測定動作を実行する(例えば
図14のS205または
図16のS404)。
図10~
図12を用いて説明したように、シフトパターン測定動作では、コントローラ200は、判定電圧の値を異ならせてメモリセルのオン/オフを複数回、判定し、判定結果の群に基づいてエラービットの発生数を抑制する判定電圧の値のセットを、最適シフトパターンとして取得する。そして、コントローラ200は、所定値のインデックスに対応するシフトパターン(例えばエントリID1またはエントリID2のシフトパターン)を最適シフトパターンに基づいて更新する(例えば
図14のS206、S211、または
図16のS405、S409)。その後、コントローラ200は、パトロールリードまたはホストリードにおいて或るブロックに対してリード動作を実行して(例えば
図15のS301)、エラー訂正を実行する。コントローラ200は、エラー訂正が失敗した場合(例えば
図15のS302においてNo)、シフトインデックステーブル220に基づいて判定電圧を変更しながら、1回以上のシフトリードを実行する(例えば
図15のS303~S309)。
【0165】
エンドユーザによるメモリシステム1の実際の使用条件下で得られた各ホットパターンがシフトインデックステーブル220を用いたシフトリードにおいて使用可能となるので、シフトインデックステーブル220を用いたシフトリードにおいてエラー訂正が生成する可能性が向上する。これによってシフトパターン測定動作の起動の頻度を抑制できる。つまり、シフトパターン測定動作に起因したリードレイテンシの悪化を低減することができる。
【0166】
また、実施形態によれば、コントローラ200は、定期的に実行されるパトロールリードおよびホスト機器300からのリード要求に応じたホストリードの際に、所定回数のシフトリードによってエラー訂正に成功しなかった場合、シフトリード測定動作を実行する。よって、コントローラ200は、シフトリード測定動作をそれぞれ異なるタイミングで複数回、実行することになる。コントローラ200は、複数回の測定動作によって取得した最適シフトパターンをFIFO222,223に格納する。コントローラ200は、FIFO222,223に格納された最適シフトパターンの群に基づいて第1ホットパターンまたは第2ホットパターンを生成し、シフトインデックステーブル220に記録された対応するホットパターンを更新する。
【0167】
第1ホットパターンまたは第2ホットパターンを計算するための元となる最適シフトパターンの群がFIFO222,223に保存されるため、コントローラ200は、最も新しく取得した所定個の最適シフトパターンの群を第1ホットパターンまたは第2ホットパターンの取得に使用することができる。よって、例えばエンドユーザによるメモリシステム1の使用条件が刻々と変わるような場合であっても、できるだけ現在の使用条件に近い使用条件下で得られた最適シフトパターンを第1ホットパターンまたは第2ホットパターンの取得に使用することができる。よって、第1ホットパターンまたは第2ホットパターンを用いたシフトリードにおいてエラー訂正が成功する確率が向上する。
【0168】
なお、実施形態では、コントローラ200は、最適シフトパターンの群から判定電圧Vra~Vrgのそれぞれについて平均値を取得して、平均値のセットを新しいホットパターンとした。ホットパターンを取得するための計算は、平均の計算に限定されない。例えば、コントローラ200は、判定電圧Vra~Vrgのそれぞれについて、平均値と標準偏差とを計算し、平均値と標準偏差との線形和を計算する。そして、コントローラ200は、平均値と標準偏差との線形和のセットを新しいホットパターンとしてもよい。
【0169】
また、第1ホットパターンまたは第2ホットパターンを計算するための元となる最適シフトパターンの群の格納先は、必ずしもFIFO構造の記憶領域でなくてもよい。例えば、コントローラ200は、判定電圧Vra~Vrgのそれぞれについてヒストグラムを生成し、最適シフトパターンの群を判定電圧Vra~VrgのそれぞれについてのヒストグラムとしてRAM202に格納してもよい。その場合、コントローラ200は、判定電圧Vra~Vrgのそれぞれについて、ヒストグラムに基づいて所定の計算を行い、計算によって得られた値のセットを新しいホットパターンとしてもよい。所定の計算の方法は特定の方法に限定されない。例えば、所定の計算は、中央値、最頻値、最大値、最小値、またはそれらを基準として得られる値、などを取得する計算である。
【0170】
また、実施形態によれば、
図15に示したように、コントローラ200は、エントリID1,ID2に記録されたホットパターンを、他のエントリに記録された固定値の(換言すると更新不可の)シフトパターンよりも優先して選択する。つまり、コントローラ200は、シフトリードを実行する場合には、固定値のシフトパターンよりも先にホットパターンを選択する。
【0171】
ホットパターンは、エンドユーザによる実際の使用条件下で得られた最適シフトパターンに基づく。よって、ホットパターンを用いたシフトリードは、他の固定値のシフトパターンを用いた場合に比べてエラー訂正が成功する可能性が高い場合がある。シフトパターンが優先的に使用されるので、エラービットを含まないリードデータを得るまでに実行されるシフトリードの回数を抑制し得る。
【0172】
また、実施形態によれば、コントローラ200は、ライト動作の完了後に管理IDが初回に更新した場合にのみ、第2ホットパターンの更新を行う。
【0173】
よって、ライト動作の完了の後に管理IDが示すシフトパターンを用いたリード動作においてエラー訂正が成功しない事象が発生したとしても、類似の条件下で集められた最適シフトパターンの群に用いて生成された第2ホットパターンを用いたリード動作を行うことができる。よって、エラー訂正が成功する可能性を高くすることができる。
【0174】
また、実施形態によれば、メモリセルアレイ111は複数のプレーンに分割され、コントローラ200は、第2ホットパターンをプレーン毎に個別に記録する。
【0175】
よって、メモリチップCP毎またはメモリチップCP内のプレーン毎に異なり得るしきい値電圧の変化の傾向に則したシフトパターンを第2ホットパターンとして生成することが可能である。
【0176】
なお、コントローラ200は、第2ホットパターンを必ずしもプレーン毎に記録しなくてもよい。コントローラ200は、メモリチップCP毎または任意の単位領域毎に第2ホットパターンを記録してもよいし、システム全体でひとつの第2ホットパターンを記録してもよい。
【0177】
また、コントローラ200は、第1ホットパターンをプレーン毎、メモリチップCP毎、または任意の単位領域毎に記録してもよい。
【0178】
(変形例1)
以上の説明では、コントローラ200は、パトロールリードにおいてエラー訂正が成功した場合(
図14のS204:Yes)、シフトインデックステーブル220に記録されたシフトパターンのうちのエラー訂正が成功したときに使用したシフトパターンを示すインデックスで管理IDを更新した。新しい管理IDの取得方法はこれに限定されない。
【0179】
例えば、コントローラ200は、シフトパターン計算動作に基づき、新しい管理IDを取得してもよい。
【0180】
シフトパターン計算動作では、コントローラ200は、ECC206によるエラー訂正前のリードデータとECC206によるエラー訂正後のリードデータとの比較を行う。そして、コントローラ200は、“Si”ステートに対応したデータが誤って“Si”ステートに隣接する“Si+1”ステートに対応したデータとしてリードされたビットの数と、“Si+1”ステートに対応したデータが誤って“Si”ステートに対応したデータとしてリードされたビットの数と、に基づいて評価指標を取得する。そして、コントローラ200は、評価指標に基づいて“Si”ステートと“Si+1”ステートとの境界に対応した判定電圧の、エラービットの発生数を抑制できるシフト量を計算する。
【0181】
以降では、“Si”ステートに対応したデータが誤って“Si+1”ステートに対応したデータとしてリードされたビットを、ビットSitoSi+1と表記する。“Si+1”ステートに対応したデータが誤って“Si”ステートに対応したデータとしてリードされたビットを、ビットSi+1toSiと表記する。
【0182】
図17および
図18は、実施形態の変形例1のシフトパターン計算動作を説明するための図である。
図17および
図18では、隣り合う2つのステートの例として、“A”ステートと“B”ステートとを挙げる。
【0183】
図16には、“A”ステートにかかるローブと“B”ステートにかかるローブとが描画されている。当該2つのローブは、種々の要因によって変化し、互いに重なり合っている。このような2つのローブに対して電圧Vb1~Vb5のそれぞれを判定電圧として使用してリード動作を実行すると、ビットAtoBの数(カウントAtoBと表記する)と、ビットBtoAの数(カウントBtoAと表記する)と、の比が判定電圧によって変化する。
【0184】
Vb3が判定電圧として使用された場合、カウントAtoBと、カウントBtoAと、が等しい。Vb4またはVb5が判定電圧として使用された場合、カウントAtoBはカウントBtoAよりも小さい。Vb5が判定電圧として使用された場合、Vb4が判定電圧として使用された場合に比べ、カウントAtoBと、カウントBtoAと、の差が大きい。Vb1またはVb2が判定電圧として使用された場合、カウントAtoBはカウントBtoAよりも大きい。Vb1が判定電圧として使用された場合、Vb2が判定電圧として使用された場合に比べ、カウントAtoBと、カウントBtoAと、の差が大きい。
【0185】
カウントAtoBと、カウントBtoAと、が等しい電圧Vb3を判定電圧として使用した場合、エラービットの数を最小とすることができる。つまり、電圧Vb3が判定電圧Vrbの最適値Vrb_optに該当すると考えられる。そして、判定電圧Vrbが電圧Vb3よりも大きくなるほど、カウントBtoAに対するカウントAtoBの割合が大きくなる。判定電圧Vrbが電圧Vb3よりも小さくなるほど、カウントBtoAに対するカウントAtoBの割合が小さくなる。
【0186】
図18は、カウントBtoAに対するカウントAtoBの割合の常用対数と、電圧Vrb_opt(つまりVb3)と電圧Vb1~Vb5との差分d1~d5と、の関係を示すグラフである。この例によれば、カウントBtoAに対するカウントAtoBの割合の常用対数と、差分d1~d5と、はリニアな関係があることが読み取れる。
【0187】
設計者は、
図18に示した関係式をそのまま、またはテーブルなどの形式で、コントローラ200に保持させる。コントローラ200は、ECC206によるエラー訂正の前のリードデータとECC206によるエラー訂正の後のリードデータとの比較に基づき、カウントAtoBとカウントBtoAとを取得する。そして、コントローラ200は、評価指標としてカウントBtoAに対するカウントAtoBの割合の常用対数を計算する。そして、コントローラ200は、計算によって取得した評価指標と上記の関係式とに基づき、評価指標としてカウントBtoAに対するカウントAtoBの割合の常用対数が0とすることができる差分電圧を計算する。そして、コントローラ200は、リードデータの取得に使用した判定電圧の値に取得した差分電圧を適用することによって、電圧Vrb_optを取得する。
【0188】
コントローラ200は、上記の一連の処理を、判定電圧Vra,Vrc~Vrgのそれぞれについても実行することで、最適シフトパターンを取得する。
【0189】
このように、コントローラ200は、パトロールリードにおいてエラー訂正に成功した場合であっても、シフトパターン計算動作を実行することによって、最適シフトパターンを取得してもよい。
【0190】
シフトパターン計算動作によって最適シフトパターンを取得した場合、コントローラ200は、
図14のS207の処理では、シフトインデックステーブル220に記録されたシフトパターンのうちの最適シフトパターンに最も類似するシフトパターンを、シフトインデックステーブルに記録されたシフトパターンのうちの最も適したシフトパターンとする。また、
図14のS211の処理では、コントローラ200は、ID2が示す8つの第2ホットパターンのうちの対象のブロックが属するメモリチップCPとプレーンとの組み合わせに対応したFIFO223に、シフトパターン計算動作によって取得した最適シフトパターンを入力する。これによって、FIFO223に格納されていた最も古い最適シフトパターンはFIFO223から削除される。コントローラ200は、判定電圧Vra~Vrgのそれぞれについて、FIFO223内の全てのシフトパターンの平均値を演算する。そして、コントローラ200は、ID2が示す8つの第2ホットパターンのうちの対象のブロックが属するメモリチップCPとプレーンとの組み合わせに対応した第2ホットパターンに、得られた平均値のセットを新しい第2ホットパターンとして上書き形式で記録する。
【0191】
このように、変形例1によれば、コントローラ200は、リード動作においてエラー訂正が成功した場合、エラー訂正の前のリードデータとエラー訂正の後のリードデータとの比較に基づいて最適シフトパターンを取得する。そして、コントローラ200は、取得した最適シフトパターンに基づいて第1ホットパターン、または第1ホットパターンおよび第2ホットパターンを更新する。
【0192】
つまり、リード動作を行った際にエラー訂正が成功したとしても、コントローラ200は、最適シフトパターンを計算して、計算によって得られた最適シフトパターンによってホットパターンを更新する。更新されたホットパターンはシフトインデックステーブル220から取得することが可能になる。よって、ホストリードにおいて誤り訂正が失敗してシフトリードを行う際にエラー訂正が成功する可能性が向上する。
【0193】
(変形例2)
以上の説明では、コントローラ200は、第2ホットパターンの更新に関して条件が設けられていた。第1ホットパターンまたは第2ホットパターンの更新に関してさらなる条件が設けられてもよい。
【0194】
例えば、コントローラ200は、センサなどによってメモリシステム1の温度をモニタリングする。コントローラ200は、モニタリングによって取得した温度が所定の条件を満たす場合に第1ホットパターンまたは第2ホットパターンの更新を許可し、温度が所定の条件を満たさない場合に第1ホットパターンまたは第2ホットパターンの更新を禁止してもよい。
【0195】
温度にかかる所定の条件は、例えば環境温度が所定の温度範囲内であることである。なお、環境温度にかかる所定の条件はこれに限定されない。
【0196】
第1ホットパターンまたは第2ホットパターンの更新に関して温度にかかる条件が設けられることで、通常の使用条件とは異なるイレギュラーな使用条件下で得られた最適シフトパターンを用いた第1ホットパターンまたは第2ホットパターンの更新を防止することが可能となる。
【0197】
または、コントローラ200は、最適シフトパターンを取得した後、取得した最適シフトパターンを構成する各値が判定電圧毎に設けられた所定の範囲内に収まっている場合に、第1ホットパターンまたは第2ホットパターンの更新を行う。コントローラ200は、取得した最適シフトパターンを構成する値の何れかが判定電圧毎に設けられた所定の範囲内に収まっていない場合に、第1ホットパターンまたは第2ホットパターンの更新を行わない。
【0198】
第1ホットパターンまたは第2ホットパターンの更新に関して最適シフトパターンの値にかかる条件が設けられることで、イレギュラーな値を含む最適シフトパターンが例えば偶発的に得られた場合、そのような最適シフトパターンを用いた第1ホットパターンまたは第2ホットパターンの更新を防止することが可能となる。
【0199】
(変形例3)
コントローラ200は、パトロールリードにおいてエラー訂正が成功した場合(
図14のS204:Yes)、管理IDを更新せずにパトロールリードを終了してもよい。
【0200】
(変形例4)
以上の説明では、シフトインデックステーブル220は、更新可能なエントリとして、第1ホットパターンが記録されるエントリID1と、第2ホットパターンが記録されるエントリID2と、を備えた。シフトインデックステーブル220は、第2ホットパターンが記録されるエントリID2を備えていなくてもよい。その場合、コントローラ200は、パトロールリードにおいては、管理IDの更新(
図14のS209)を行った後、S210およびS211の処理をスキップしてパトロールリードを終了する。また、コントローラ200は、ホストリードにおいては、管理IDの更新(
図16のS407)を行った後、S408およびS409の処理をスキップしてホストリードを終了する。
【0201】
以上述べた実施形態およびその変形例1~4の説明では、シフトパターン測定動作は、リード動作において実行されるエラー訂正が失敗することを契機として起動された。シフトパターン測定動作の起動の契機はこれに限定されない。シフトパターン測定動作は、任意の事象を契機として起動され得る。シフトパターン測定動作は、タイマなどに基づき、定期的に起動されてもよい。
【0202】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0203】
1 メモリシステム、100 NAND型フラッシュメモリ、110 アクセス回路、111 メモリセルアレイ、114 NANDストリング、200 コントローラ、201 ホストインターフェイス回路、202 RAM、203 CPU、204 バッファメモリ、205 NANDインターフェイス回路、206 ECC回路、220 シフトインデックステーブル、221 管理テーブル、250 ヒストグラム、260 推定行列、300 ホスト機器、400 NANDバス。