IP Force 特許公報掲載プロジェクト 2022.1.31 β版

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

▶ 東芝メモリ株式会社の特許一覧

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024043775
(43)【公開日】2024-04-02
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
   G11C 16/26 20060101AFI20240326BHJP
   G11C 7/04 20060101ALI20240326BHJP
   G11C 16/04 20060101ALI20240326BHJP
   G11C 11/56 20060101ALI20240326BHJP
   G06F 12/00 20060101ALI20240326BHJP
   G06F 11/30 20060101ALI20240326BHJP
【FI】
G11C16/26 100
G11C7/04
G11C16/04 170
G11C11/56 220
G06F12/00 597U
G06F11/30 158
G06F11/30 140N
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2022148952
(22)【出願日】2022-09-20
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】高田 万里江
(72)【発明者】
【氏名】白川 政信
(72)【発明者】
【氏名】武田 奈穂美
【テーマコード(参考)】
5B042
5B160
5B225
【Fターム(参考)】
5B042GA33
5B042MA08
5B042MC38
5B160NA01
5B225BA01
5B225BA19
5B225CA13
5B225DA03
5B225DA10
5B225DE08
5B225EA05
5B225EH08
5B225FA01
(57)【要約】
【課題】リードデータに発生するエラービットの数を簡単な管理で抑制することができるメモリシステムを提供すること。
【解決手段】コントローラは、第1タイミングにおいて、温度センサから第1温度検出値を取得し、取得動作を第1記憶領域について実行し、第1電圧値を第1温度検出値に基づいて温度設定値における判定電圧である第2電圧値に変換して記録する。取得動作は、判定電圧を用いて複数のメモリセルがオン状態であるかオフ状態であるかを判定して、判定結果に基づきエラービットの発生数を抑制する判定電圧である第1電圧値を取得する動作である。コントローラは、第1タイミングより後に、温度センサから第2温度検出値を取得し、第2電圧値を第2温度検出値における判定電圧である第3電圧値に変換し、第3電圧値の電圧を判定電圧として用いて複数のメモリセルからデータをリードする。
【選択図】図19
【特許請求の範囲】
【請求項1】
ワード線と前記ワード線に接続される複数のメモリセルとを備える第1記憶領域を備える不揮発性の第1メモリと、
前記複数のメモリセルのしきい値電圧の温度依存性に対応する第1情報が格納されるように構成された第2メモリと、
前記複数のメモリセルのしきい値電圧に対応する判定電圧の値が記録される第2情報が格納されるように構成された第3メモリと、
温度センサと、
第1タイミングにおいて、
前記温度センサから第1温度検出値を取得し、
前記判定電圧を用いて前記複数のメモリセルがオン状態であるかオフ状態であるかを判定して、判定結果に基づきエラービットの発生数を抑制する前記判定電圧の値である第1電圧値を取得する、取得動作を前記第1記憶領域について実行し、
前記第1電圧値を前記第1温度検出値と前記第1情報とに基づいて温度設定値における前記判定電圧の値である第2電圧値に変換し、前記第2電圧値を前記第2情報に記録し、
前記第1タイミングよりも後の第2タイミングにおいて、
前記温度センサから第2温度検出値を取得し、
前記第2情報に記録された前記第2電圧値を前記第2温度検出値と前記第1情報とに基づいて前記第2温度検出値における前記判定電圧の値である第3電圧値に変換し、
前記第3電圧値の電圧を前記判定電圧として用いて前記複数のメモリセルからデータを取得する第1リード動作を実行する、
ように構成されたコントローラと、
を備えるメモリシステム。
【請求項2】
前記コントローラは、
前記複数のメモリセルからデータを取得する第2リード動作を実行し、
前記第2リード動作によって取得した前記データに対するエラー訂正を実行する、
ように構成され、
前記第1タイミングは、前記エラー訂正が失敗したタイミングである、
請求項1に記載のメモリシステム。
【請求項3】
前記取得動作は、前記判定電圧の値を異ならせて前記複数のメモリセルがオン状態であるかオフ状態であるかを複数回、判定して、判定結果の群に基づいて前記第1電圧値を取得する動作である、
請求項1または請求項2に記載のメモリシステム。
【請求項4】
前記コントローラは、
前記第1タイミングにおいて、
前記複数のメモリセルからデータを取得する第2リード動作を実行し、
前記第2リード動作によって取得した前記データに対するエラー訂正を実行し、
前記エラー訂正が失敗した場合、第1の取得動作を実行する、
ように構成され、
前記第1の取得動作は、前記判定電圧の値を異ならせて前記複数のメモリセルがオン状態であるかオフ状態であるかを複数回、判定して、判定結果の群に基づいて前記第1電圧値を取得する動作である、
請求項1に記載のメモリシステム。
【請求項5】
前記コントローラは、
前記第1タイミングにおいて、
前記複数のメモリセルからデータを取得する第2リード動作を実行し、
前記第2リード動作によって取得した前記データに対するエラー訂正を実行し、
前記エラー訂正が成功した場合、第2の取得動作を実行する、
ように構成され、
前記第2の取得動作は、前記エラー訂正の前の前記データと前記エラー訂正の後の前記データとの比較に基づいて前記第1電圧値を計算する動作である、
請求項1に記載のメモリシステム。
【請求項6】
前記コントローラは、
前記第1タイミングよりも前の第3タイミングにおいて、
前記複数のメモリセルのしきい値電圧をデータに応じた値に設定するプログラム動作を実行し、
前記温度センサから第3温度検出値を取得し、
前記判定電圧の初期設定値である第4電圧値を前記第3温度検出値と前記第1情報とに基づいて温度設定値における前記判定電圧の値である第5電圧値に変換し、前記第5電圧値を前記第2情報に記録し、
前記第2リード動作において、
前記温度センサから第4温度検出値を取得し、
前記第2情報から前記判定電圧の値を取得し、
前記第2情報から取得した前記判定電圧の値である第6電圧値を前記第4温度検出値と前記第1情報とに基づいて前記第4温度検出値における前記判定電圧の値である第7電圧値に変換し、
前記第7電圧値の電圧を前記判定電圧として使用する、
請求項2に記載のメモリシステム。
【請求項7】
前記第1メモリは、前記第1記憶領域を含む複数の第2記憶領域を備え、
前記複数の第2記憶領域のそれぞれは、ワード線と前記ワード線に接続される複数のメモリセルとを備え、
前記コントローラは、
前記複数の第2記憶領域から選択された第3記憶領域に対して前記取得動作を実行し、
前記第3記憶領域に対する前記取得動作に基づき前記初期設定値を更新する、
請求項6に記載のメモリシステム。
【請求項8】
それぞれインデックスが対応付けられた複数の候補値が記録された第3情報が格納される第4メモリを備え、
前記第2情報には、前記複数の候補値から選択された値に対応するインデックスが前記判定電圧の値として記録される、
請求項1に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本実施形態は、メモリシステムに関する。
【背景技術】
【0002】
従来、メモリセルトランジスタを有するメモリシステムが広く知られている。そのようなメモリシステムにおいては、リード動作においては、メモリセルトランジスタのしきい値電圧と判定電圧との比較に基づいて、そのメモリセルトランジスタに保持されるデータが判定される。
【0003】
メモリセルトランジスタのしきい値電圧は、種々の要因によって変化し得る。そのため、メモリシステムは、判定電圧の値の変更が可能に構成され、リード動作においてデータの誤判定が発生した場合には判定電圧の値を変更してリード動作を行う、シフトリードを実行することができる。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2022-38392号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
一つの実施形態は、リードデータに発生するエラービットの数を簡単な管理で抑制することができるメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【0006】
一つの実施形態によれば、メモリシステムは、不揮発性の第1メモリと、第2メモリと、第3メモリと、温度センサと、コントローラと、を備える。第1メモリは、ワード線とワード線に接続される複数のメモリセルとを備える第1記憶領域を備える。第2メモリは、複数のメモリセルのしきい値電圧の温度依存性に対応する第1情報が格納されるように構成される。第3メモリは、複数のメモリセルのしきい値電圧に対応する判定電圧の値が記録される第2情報が格納されるように構成される。コントローラは、第1タイミングにおいて、温度センサから第1温度検出値を取得し、取得動作を第1記憶領域について実行し、第1電圧値を第1温度検出値と第1情報とに基づいて温度設定値における判定電圧の値である第2電圧値に変換し、第2電圧値を第2情報に記録する。取得動作は、判定電圧を用いて複数のメモリセルがオン状態であるかオフ状態であるかを判定して、判定結果に基づきエラービットの発生数を抑制する前記判定電圧の値である第1電圧値を取得する動作である。コントローラは、第1タイミングよりも後の第2タイミングにおいて、温度センサから第2温度検出値を取得し、第2情報に記録された第2電圧値を第2温度検出値と第1情報とに基づいて第2温度検出値における前記判定電圧の値である第3電圧値に変換し、第3電圧値の電圧を判定電圧として用いて複数のメモリセルからデータを取得する第1リード動作を実行する。
【図面の簡単な説明】
【0007】
図1】実施形態のメモリシステムの構成例を示す図。
図2】実施形態のメモリチップの構成例を示す図。
図3】実施形態のブロックの回路構成を示す図。
図4】実施形態のデータコーディングの一例を説明するための図。
図5】実施形態のメモリセルが取り得るしきい値電圧の別の一例を示す図。
図6】実施形態の第1の最適値取得動作において実行されるシフトリードについて説明する図。
図7】実施形態の第1の最適値取得動作において実行される各シフトリードによって得られる判定結果のデータと、マスクデータリードによって得られる判定結果のデータと、区分毎に示す図。
図8】実施形態の第1の最適値取得動作において最適判定電圧を取得する処理を説明するための図。
図9】実施形態の第2の最適値取得動作を説明するための図。
図10】実施形態の第2の最適値取得動作を説明するための図。
図11】実施形態の或るメモリチップにおける判定電圧の温度依存性の一例を示す図。
図12】実施形態の温度補正情報の一例を示す図。
図13】実施形態のメモリセルアレイの構成の一例を示す図。
図14】実施形態のメモリチップCPから温度検出値を取得するコマンドシーケンスの一例を示す図。
図15】実施形態の基準判定電圧の管理方法の一例を示す図。
図16】実施形態のメモリシステムが動作中においてRAMに保持する情報の一例を示す図。
図17】実施形態のメモリシステムの起動時の動作の一例を示す図。
図18】プログラム動作の際の実施形態のメモリシステムの動作の一例を示すフローチャート。
図19】ホスト機器からのリードコマンドに応じた実施形態のメモリシステムの動作の一例を示すフローチャート。
図20】実施形態のメモリシステムのパトロールリードの動作の一例を示すフローチャート。
図21】実施形態の基準判定電圧テーブルの内容の変化の一例を示す図。
図22】プログラム動作の際の変形例1のメモリシステムの動作の一例を示すフローチャート。
図23】変形例1の基準判定電圧テーブルの内容の変化の一例を示す図。
図24】変形例2のメモリシステムが動作中においてRAMに保持する情報の一例を示す図。
図25】変形例2のシフトインデックステーブルのデータ構造の一例を示す図。
図26】変形例2における基準判定電圧テーブルとシフトインデックステーブルとを用いた基準判定電圧のセットの取得方法の一例を示すフローチャート。
図27】変形例2における基準判定電圧のセットの記録方法の一例を示すフローチャート。
図28】初期設定値のセットの変形例3の管理方法の一例を示す図。
図29】初期設定値のセットの変形例3の更新方法の一例を示すフローチャート。
【発明を実施するための形態】
【0008】
以下に添付図面を参照して、実施形態にかかるメモリシステムを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【0009】
(実施形態)
図1は、実施形態のメモリシステムの構成例を示す図である。図1に示されるように、メモリシステム1は、ホスト機器300と接続可能である。ホスト機器300は、例えば、サーバ、パーソナルコンピュータ、またはモバイル型の情報処理装置などが該当する。メモリシステム1は、ホスト機器300の外部記憶装置として機能する。ホスト機器300は、メモリシステム1に対してコマンドを発行することができる。メモリシステム1に対するコマンドは、リードコマンドおよびライトコマンドを含む。
【0010】
メモリシステム1は、NAND型フラッシュメモリ100として、1以上のメモリチップCP、および1つのコントローラ200を備える。ここでは、メモリシステム1は、1以上のメモリチップCPとして、メモリチップCP0、CP1、CP2、CP3を備える。なお、メモリシステム1に具備されるメモリチップCPの数は、4に限定されない。
【0011】
なお、NAND型フラッシュメモリ100は、不揮発性の第1メモリの一例である。
【0012】
各メモリチップCPは、複数のメモリセルトランジスタを備え、データを不揮発に記憶することができる。メモリチップCPは、NANDバス400によってコントローラ200と接続されている。
【0013】
コントローラ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、および温度センサ207を備える。
【0014】
コントローラ200は、例えばSoC(System-On-a-Chip)として構成され得る。コントローラ200は、複数のチップによって構成されてもよい。コントローラ200は、CPU203に代えて、FPGA(field-programmable gate array)またはASIC(application specific integrated circuit)を備えていてもよい。つまり、コントローラ200は、ソフトウェア、ハードウェア、またはこれらの組み合わせによって構成され得る。なお、RAM202は、コントローラ200の外に配置されてもよい。また、温度センサ207は、コントローラ200の外に配置されてもよい。
【0015】
ホストインタフェース回路201は、例えばSATA(Serial Advanced Technology Attachment)規格、SAS(Serial Attached SCSI)規格、またはPCI(Peripheral Components Interconnect) Express(TM)などに準拠したバスを介してホスト機器300と接続され、コントローラ200とホスト機器300との通信を司る。
【0016】
NANDインタフェース回路205は、NANDバス400を介して各メモリチップCPと接続され、コントローラ200とメモリチップCPとの通信を司る。
【0017】
CPU203は、コントローラ200の動作を制御する。
【0018】
RAM202は、CPU203の作業領域として使用される。バッファメモリ204は、メモリチップCPに送信されるデータ、およびメモリチップCPから受信したデータを一時的に保持する。RAM202およびバッファメモリ204は、例えばDRAM(dynamic random access memory)、SRAM(static random access memory)、またはこれらの組み合わせなどによって構成され得る。なお、RAM202およびバッファメモリ204を構成するメモリの種類は、これらに限定されない。
【0019】
ECC回路206は、エラー訂正符号を用いて、エラーの検出および検出されたエラーの訂正を実行する。エラーの検出および検出されたエラーの訂正を単にエラー訂正と表記する。
【0020】
温度センサ207は、メモリシステム1の温度を検出する。CPU203は、温度センサ207による温度検出値をメモリシステム1の種々の制御に用いる。
【0021】
図2は、実施形態のメモリチップCPの構成例を示す図である。図示するようにメモリチップCPは、処理回路110、メモリセルアレイ111、および温度センサ112を備える。
【0022】
メモリセルアレイ111は、複数のプレーン(プレーン0、プレーン1)に分割されている。各プレーンは、並列にアクセスされることが可能なサブアレイである。各プレーンは、各々が複数の不揮発性メモリセルトランジスタの集合である複数のブロックBLK(BLK0、BLK1、…)を備える。ブロックBLKの各々は、それぞれがワード線およびビット線に関連付けられたメモリセルトランジスタの集合である複数のストリングユニットSU(SU0、SU1、…)を備える。ストリングユニットSUの各々は、メモリセルトランジスタが直列接続された複数のNANDストリング114を備える。なお、ストリングユニットSU内のNANDストリング114の数は任意である。なお、メモリセルアレイ111が備えるプレーンの数は2に限定されない。また、メモリセルアレイ111は、必ずしも分割されていなくてもよい。
【0023】
処理回路110は、例えば、ロウデコーダ、カラムデコーダ、センスアンプ、ラッチ回路、および電圧発生回路を含む。処理回路110は、コントローラ200からの命令に応じて、各プレーンのメモリセルアレイ111に対し、プログラム動作、センス動作、およびイレース動作を実行する。
【0024】
プログラム動作はメモリセルアレイ111にデータをライトする動作である。センス動作はメモリセルアレイ111からデータをリードする動作である。
【0025】
なお、コントローラ200がメモリチップCPにデータをライトする一連の動作を、ライト動作と表記する。ライト動作は、コントローラ200がデータをメモリチップCPに転送するデータイン動作と、処理回路110がデータイン動作によって受信したデータをメモリセルアレイ111にライトするプログラム動作と、によって構成される。
【0026】
コントローラ200がメモリチップCPからデータをリードする一連の動作を、リード動作を表記する。リード動作は、処理回路110がメモリセルアレイ111からデータをリードするセンス動作と、センス動作によってリードされたデータをコントローラ200がメモリチップCPから取得するデータアウト動作と、によって構成される。
【0027】
温度センサ112は、メモリチップCPの温度を検出する。コントローラ200は、リード動作を実行するに際して、温度センサ112による温度検出値をメモリチップCPから取得して、取得した温度検出値をメモリチップCPの制御に使用する。
【0028】
図3は、実施形態のブロックBLKの回路構成を示す図である。なお、各ブロックBLKは、同一の構成を有している。ブロックBLKは、例えば4つのストリングユニットSU0~SU3を有する。各ストリングユニットSUは、複数のNANDストリング114を含む。
【0029】
NANDストリング114の各々は、例えば64個のメモリセルトランジスタMT(MT0~MT63)および選択トランジスタST1、ST2を含んでいる。メモリセルトランジスタMTは、制御ゲートと電荷蓄積層とを備え、データを不揮発に保持する。そして64個のメモリセルトランジスタMT(MT0~MT63)は、選択トランジスタST1のソースと選択トランジスタST2のドレインとの間に直列接続されている。なお、メモリセルトランジスタMTは、電荷蓄積層に絶縁膜を用いたMONOS型であってもよいし、電荷蓄積層に導電膜を用いたFG型であってもよい。さらに、NANDストリング114内のメモリセルトランジスタMTの個数は64個に限定されない。
【0030】
ストリングユニットSU0~SU3の各々における選択トランジスタST1のゲートは、それぞれ選択ゲート線SGD0~SGD3に接続される。これに対してストリングユニットSU0~SU3の各々における選択トランジスタST2のゲートは、例えば選択ゲート線SGSに共通接続される。ストリングユニットSU0~SU3の各々における選択トランジスタST2のゲートは、ストリングユニットSU毎に異なる選択ゲート線SGS0~SGS4に接続されてもよい。同一のブロックBLK内にあるメモリセルトランジスタMT0~MT63の制御ゲートは、それぞれワード線WL0~WL63に共通接続される。
【0031】
ストリングユニットSU内にある各NANDストリング114の選択トランジスタST1のドレインは、それぞれ異なるビット線BL(BL0~BL(L-1)、但しLは2以上の自然数)に接続される。また、ビット線BLは、複数のブロックBLK間で各ストリングユニットSU内にある1つのNANDストリング114を共通に接続する。更に、各選択トランジスタST2のソースは、ソース線SLに共通に接続されている。
【0032】
つまりストリングユニットSUは、異なるビット線BLに接続され、且つ同一の選択ゲート線SGDに接続されたNANDストリング114の集合である。またブロックBLKは、ワード線WLを共通にする複数のストリングユニットSUの集合である。そしてメモリセルアレイ111は、ビット線BLを共通にする複数のブロックBLKの集合である。
【0033】
処理回路110による1つのプレーンに対するプログラム動作およびセンス動作は、1つのストリングユニットSUにおける1つのワード線WLに接続されたメモリセルトランジスタMTに対して、一括して行われる。以降、1つのプレーンに対するプログラム動作およびセンス動作の際、一括して選択されるメモリセルトランジスタMTの群を「メモリセルグループMCG」と表記する。そして、1つのメモリセルグループMCGにライトされる、あるいはリードされる1ビットのデータの集まりの記憶領域を「ページ」と表記する。
【0034】
処理回路110による1つのプレーンに対するイレース動作は、ブロックBLK単位、またはブロックBLKよりも小さい単位で行うことができる。
【0035】
なお、それぞれ異なるプレーンまたは異なるメモリチップCPに格納された複数のページによって1つの論理ページが構成され、コントローラ200は1つの論理ページを構成する複数のページを対象として並列にプログラム動作またはセンス動作を指示してもよい。また、それぞれ異なるプレーンまたは異なるメモリチップCPに具備される複数のブロックBLKによって1つの論理ブロックが構成され、コントローラ200は、1つの論理ブロックを構成する複数のブロックBLKに対して並列にイレース動作を指示してもよい。
【0036】
以降では、メモリセルトランジスタMTを、単に、メモリセルと表記する。
【0037】
各メモリセルには、n(n≧1)ビットのデータをライト可能である。各メモリセルにnビットのデータがライトされる場合、メモリセルグループMCG当たりの記憶容量はnページ分のサイズに等しくなる。nが1であるモードは、SLC(Single Level Cell)モードと称される。nが2であるモードは、MLC(Multi Level Cell)モードと称される。nが3であるモードは、TLC(Triple Level Cell)モードと称される。nが4であるモードは、QLC(Quad Level Cell)モードと称される。
【0038】
各メモリセルのしきい値電圧は、処理回路110によって一定の範囲内でコントロールされる。しきい値電圧のコントローラブルな範囲は、2のn乗の数の区分に分割され、各区分にそれぞれ異なるnビットの値がアサインされる。
【0039】
実施形態および以降の実施形態では、TLCモードでメモリセルが使用される例について説明する。なお、実施形態および以降の実施形態は、TLCモードでメモリセルが使用されるシステムに限らず、任意のモードでメモリセルが使用されるシステムに適用可能である。
【0040】
図4は、実施形態のデータコーディングの一例を説明するための図である。
【0041】
前述したように、TLCモードによれば、メモリセル当たりに3ビットのデータが格納される。メモリセルに格納された3ビットのデータを構成する各ビットを、その並び順に応じて、アッパービット、ミドルビット、およびロアービットと表記する。メモリセルグループMSGが備える3ページのうちのアッパービットの群が格納されるページをアッパーページ、ミドルビットの群が格納されるページをミドルページ、ロアービットの群が格納されるページをロアーページ、と表記する。
【0042】
TLCモードによれば、しきい値電圧が取り得る範囲は、8つの範囲に区分される。この8つの範囲を、しきい値電圧が低いほうから順に、“Er”ステート、“A”ステート、“B”ステート、“C”ステート、“D”ステート、“E”ステート、“F”ステート、および“G”ステートと呼ぶことにする。各メモリセルのしきい値電圧は、処理回路110によって、“Er”ステート、“A”ステート、“B”ステート、“C”ステート、“D”ステート、“E”ステート、“F”ステート、および“G”ステート、の何れかに属するように、制御される。その結果、しきい値電圧に対するメモリセルの数をプロットした場合、メモリセルは、理想的には、図4の中段に示すように、それぞれ異なるステートに属する互いに重ならない8つのローブ状の分布を形成する。以降では、ステートごとの分布を、単に、ローブ、と表記することがある。
【0043】
8つのステートは、3ビットのデータに対応する。図4の上段の表は、ステートと3ビットのデータとの対応関係、即ちデータコーディング、の一例を示す。この例によれば、“Er”ステートは“111”に対応し、“A”ステートは“110”に対応し、“B”ステートは“100”に対応し、“C”ステートは“000”に対応し、“D”ステートは“010”に対応し、“E”ステートは“011”に対応し、“F”ステートは“001”に対応し、“G”ステートは“101”に対応する。なお、3ビットのデータを“abc”と記載した場合、“a”をアッパービット、“b”をミドルビット、“c”をロアービットとしている。このように、各メモリセルは、そのしきい値電圧が属するステートに応じたデータを保持することができる。なお、図4に示すステートとデータとの対応関係は、データコーディングの一例である。データコーディングは本図の例に限定されない。
【0044】
しきい値電圧は、イレース動作によって“Er”ステートに低下せしめられる。また、しきい値電圧は、プログラム動作によって、“Er”ステートに維持されるか、または“A”ステート、“B”ステート、“C”ステート、“D”ステート、“E”ステート、“F”ステート、および“G”ステート、の何れかに至るまで、上昇せしめられる。
【0045】
具体的には、プログラム動作においては、処理回路110は、カラムアドレスに対応したビット線BLを選択する。処理回路110は、選択されたビット線BLの電位をゼロとする。処理回路110は、ロウアドレスに対応したワード線WLを選択し、選択されたワード線WLに、プログラミングパルスを印加する。すると、選択されたビット線BLおよび選択されたワード線WLとの交点に位置するメモリセルの電荷蓄積層に電子が注入され、その結果、メモリセルのしきい値電圧が上昇する。処理回路110は、所定のタイミングでデータのリードを行うことで、メモリセルのしきい値電圧がライトデータのデータに対応した目標のステートに到達したか否かを確認する(ベリファイリード)。処理回路110は、メモリセルのしきい値電圧が目標のステートに到達するまで、プログラムパルスの印加を継続する。
【0046】
以降、プログラム動作によってあるステートにしきい値電圧が設定されたメモリセルを、そのステートに属するメモリセル、と表記することがある。
【0047】
隣接する2つのステート間には、データを判定するための判定電圧が設定される。例えば、図4に例示されるように、“Er”ステートと“A”ステートとの間に判定電圧VAが設定され、“A”ステートと“B”ステートとの間に判定電圧VBが設定され、“B”ステートと“C”ステートとの間に判定電圧VCが設定され、“C”ステートと“D”ステートとの間に判定電圧VCが設定され、“D”ステートと“E”ステートとの間に判定電圧VEが設定され、“E”ステートと“F”ステートとの間に判定電圧VFが設定され、“F”ステートと“G”ステートとの間に判定電圧VGが設定される。
【0048】
センス動作においては、処理回路110は、複数種類の判定電圧を選択ワード線WLに順次印加して、各判定電圧が印加されているときにメモリセルが導通状態(換言するとオン状態)および非導通状態(換言するとオフ状態)の何れの状態にあるかをメモリセル毎に判定する。そして、処理回路110は、印加した判定電圧毎に得られた判定結果を用いた論理演算によって、メモリセルが属するステートに対応付けられたデータを判定する。
【0049】
以降、単一種類の判定電圧VX(XはA~Gのいずれか)を選択ワード線WLに印加してメモリセルがオン状態およびオフ状態の何れにあるかをメモリセル毎に判定する動作を、Xリード、またはいくつかの図ではさらに省略してXRと表記する。また、Xリードによる判定結果を、判定結果XRと表記する。
【0050】
図4に示すデータコーディングは採用される場合、メモリセルが“Er”ステート、“E”ステート、“F”ステート、および“G”ステート、の何れかに属する場合、そのメモリセルが保持するデータのロアービットは“1”である。メモリセルが“A”ステート、“B”ステート、“C”ステート、および“D”ステートの何れかに属する場合、そのメモリセルが保持するデータのロアービットは“0”である。よって、処理回路110は、VAおよびVEの2種類の判定電圧を使用することによって、アッパーページのデータを判定する。具体的には、処理回路110は、AリードとEリードとを行い、Aリードによって得られる判定結果ARとEリードによって得られる判定結果ERとを用いた論理演算によって、ロアーページのデータを取得する。
【0051】
メモリセルが“Er”ステート、“A”ステート、“D”ステート、および“E”ステートの何れかに属する場合、そのメモリセルが保持するデータのミドルビットは“1”である。メモリセルが“B”ステート、“C”ステート、“F”ステート、および“G”ステートの何れかに属する場合、そのメモリセルが保持するデータのミドルビットは“0”である。よって、処理回路110は、VB、VD、およびVFの3種類の判定電圧を使用することによって、ミドルページのデータを判定する。具体的には、処理回路110は、Bリード、Dリード、およびFリードを行う。そして、処理回路110は、Bリードによって得られる判定結果BR、Dリードによって得られる判定結果DR、およびFリードによって得られる判定結果DFを用いた論理演算によって、ミドルページのデータを取得する。
【0052】
メモリセルが“Er”ステート、“A”ステート、“B”ステート、および“G”ステートの何れかに属する場合、そのメモリセルが保持するデータのアッパービットは“1”である。メモリセルが“C”ステート、“D”ステート、“E”ステート、および“F”ステートの何れかに属する場合、そのメモリセルが保持するデータのアッパービットは“0”である。よって、処理回路110は、VCおよびVGの2種類の判定電圧を使用することによって、アッパーページのデータを判定する。具体的には、処理回路110は、CリードとGリードとを行い、Cリードによって得られる判定結果CRとGリードによって得られる判定結果GRとを用いた論理演算によって、アッパーページのデータを取得する。
【0053】
このように、データの判定に使用される判定電圧の種類は、リード対象のページの種類に応じて異なる。処理回路110は、センス動作の対象のページの種類に応じた複数種類の判定電圧のそれぞれを単独で使用した、メモリセルのしきい値電圧が判定電圧よりも高いか低いかの判定結果を組み合わせることによって、リード対象のページのデータを取得する。
【0054】
図4では、メモリセルが、互いに重ならない8つのローブを形成する場合を説明した。しかしながら、メモリセルのしきい値電圧は、種々の要因で変化し得る。例えば、メモリセルのしきい値電圧は、プログラム動作の完了時からの経過時間に応じて変化する傾向がある。メモリセルのしきい値電圧の変化の速度は、プログラム動作完了の直後が最も早く、経過時間とともに減速する。イレース動作とプログラム動作とのサイクルの実行回数が多いメモリセルほど、しきい値電圧が変化しやすい。また、メモリセルのしきい値電圧の変化は、プログラム動作の完了時からの経過時間だけでなく、当該メモリセルに対するセンス動作、隣接するメモリセルに対するセンス動作、アクセスの際の温度、などによっても影響され得る。メモリセルのしきい値電圧が変化し得るので、現実的には、センス動作時において、隣り合う2つのローブが互いに重なり合った状態になっている場合がある。
【0055】
図5は、実施形態のメモリセルが取り得るしきい値電圧の別の一例を示す図である。ここでは、説明を簡単にするために、“A”ステートおよび“B”ステートのいずれかに属するメモリセルの分布を図示している。実線は、“A”ステートおよび“B”ステートのいずれかに属するメモリセルの分布を示している。破線は、“A”ステートのローブを示し、一点鎖線は、“B”ステートのローブを示している。本図の例では、“A”ステートのローブの裾野と“B”ステートのローブの裾野とが重なり合っている。言い換えると、“A”ステートに属するメモリセルのしきい値電圧の最大値が判定電圧VBを超えており、かつ、“B”ステートに属するメモリセルのしきい値電圧の最小値が判定電圧VBを下回っている。“A”ステートに属し、かつ、しきい値電圧が判定電圧VBよりも大きいメモリセルがリードされた場合、そのメモリセルは“B”ステートに属するとして認識される。即ち、“110”としてプログラムされたデータが“100”としてリードされる。“B”ステートに属し、かつ、しきい値電圧が判定電圧VBよりも小さいメモリセルがリードされた場合、そのメモリセルは“A”ステートに属するとして認識される。即ち、“100”としてプログラムされたデータが“110”としてリードされる。
【0056】
このように、センス動作によってリードされたデータは、しきい値電圧の変化によって、プログラム動作の時点での値から変化する場合がある。データおよびしきい値電圧の変化に対しては、コントローラ200は、エラー訂正と、判定電圧のシフトと、によって対応する。具体的には、コントローラ200では、ECC回路206によって、リードデータに対してエラー訂正を実行する。エラー訂正が失敗した場合には、コントローラ200は、判定電圧を変えてリード動作を再び実行する。なお、エラー訂正が失敗するとは、変化後のデータから変化前のデータを復元できないことをいう。具体的には、エラー訂正が失敗するとは、リードデータに含まれるエラービットが訂正できないことをいう。エラー訂正が成功するとは、リードデータに含まれる全てのエラービットが訂正されたことをいう。判定電圧を変化させてリードするリード動作を、シフトリードと表記する。
【0057】
なお、判定電圧は、種々の量で表現され得る。一例では、判定電圧の種類(VA~VG)毎に固定値が予め設定されており、判定電圧は、固定値からのシフト量(つまり差分)で表現される。また、メモリチップCP内の所定の位置に固定値が判定電圧の種類毎に記録されている。シフトリードでは、コントローラ200は、判定電圧の種類毎に固定値からのシフト量をメモリチップCPに指示する。
【0058】
なお、判定電圧の表現方法および指示の方法は、これに限定されない。例えば、判定電圧の値は差分ではなく正味の電圧値で表現され、判定電圧は、メモリチップCPに対し、正味の電圧値として指示されてもよい。
【0059】
コントローラ200は、リードデータに発生するエラービットの数を抑制できる判定電圧の値を取得することができる。リードデータに発生するエラービットの数を抑制できる判定電圧の値を、便宜的に、最適判定電圧と表記する。例えば、しきい値電圧が図5に示すグラフのように分布する場合、“A”ステートおよび“B”ステートのいずれかに属するメモリセルの分布が極小値をとる電圧値VB’が、判定電圧VBに関する最適判定電圧VB_optであると考えられる。
【0060】
コントローラ200は、所定の条件をトリガとして最適判定電圧の取得を行う。以降、最適判定電圧を取得する動作を、単に、最適値取得動作、と表記する。
【0061】
最適値取得動作の一例として、第1の最適値取得動作を説明する。第1の最適値取得動作は、Vthトラッキングとも称される。第1の最適値取得動作では、ロアーページのリード動作に必要な判定電圧VA,VEと、ミドルページのリード動作に必要な判定電圧VB,VD,VFと、アッパーページのリード動作に必要な判定電圧VC,VGと、のそれぞれについて個別に最適判定電圧のセットを取得することができる。ここでは一例として、ロアーページのリード動作に必要な判定電圧VA,VEについて最適判定電圧を取得する動作を説明する。
【0062】
第1の最適値取得動作では、各判定電圧の値を少しずつ異ならせた複数のシフトリードが実行される。ロアーページのリード動作に必要な判定電圧である判定電圧VA,VEが最適判定電圧の測定対象である場合、コントローラ200は、メモリチップCPに対し、ロアーページをリードするためのシフトリードを複数回、実行する。コントローラ200は、判定電圧VA,VEのそれぞれの値をシフトリード毎に少しずつ異ならせる。
【0063】
図6は、実施形態の第1の最適値取得動作において実行されるシフトリードについて説明する図である。
【0064】
図6の例では、5回のシフトリードが実行される。i(iは1以上5以下の整数)回目のシフトリード(SFTi)においては、判定電圧VAとしてShift_aiが、判定電圧VEとしてShift_eiが、使用される。具体的には、1回目のシフトリード(SFT1)においては、判定電圧VAとしてShift_a1が、判定電圧VEとしてShift_e1が、使用される。2回目のシフトリード(SFT2)においては、判定電圧VAとしてShift_a2が、判定電圧VEとしてShift_e2が、使用される。3回目のシフトリード(SFT3)においては、判定電圧VAとしてShift_a3が、判定電圧VEとしてShift_e3が、使用される。4回目のシフトリード(SFT4)においては、判定電圧VAとしてShift_a4が、判定電圧VEとしてShift_e4が、使用される。5回目のシフトリード(SFT5)においては、判定電圧VAとしてShift_a5が、判定電圧VEとしてShift_e5が、使用される。各判定電圧のシフトリードの実行毎の変更量は、一定であってもよいし、一定でなくてもよい。ここでは一例として、各判定電圧は、シフトリードの実行毎に所定の刻み幅だけ変更されることとしている。
【0065】
また、第1の最適値取得動作においては、複数回のシフトリードの他に、マスクデータを取得するためのリードが実行される。ロアーページをリード対象としたセンス動作では、Aリードによる判定結果ARと、Eリードによる判定結果ERと、に基づいてロアーページのデータが判定される。マスクデータは、シフトリードによって得られたロアーページのデータから、Aリードによる判定結果ARと、Eリードによる判定結果ERと、を分離するために使用される。マスクデータを取得するためのリードを、マスクデータリード、と表記する。
【0066】
マスクデータリードにおいては、最適判定電圧の取得対象とされた互いに隣接する2つの判定電圧の間の電圧が、判定電圧として使用される。例えば、最適判定電圧の取得対象とされた互いに隣接する2つの判定電圧の間の電圧から十分に遠い電圧が、マスクデータリードにおける判定電圧として採用される。
【0067】
ここでは一例として、マスクデータリードでは、判定電圧VCが使用される。つまり、マスクデータリードでは、Cリードが実行される。
【0068】
各メモリセルのしきい値電圧が存在し得る範囲は、5回のシフトリードで使用される各判定電圧と1回のCリードとで使用される判定電圧VCとによって、合計12個の区分(図6の(1)~(12))に分けられる。図7は、5回のシフトリード(SFT1~SFT5)によって得られる判定結果のデータと、マスクデータリードによって得られる判定結果のデータと、区分毎に示している。なお、ここでは一例として、処理回路110は、マスクデータリードによる判定結果において、“0”はメモリセルがオン状態であることを示し、“1”はメモリセルがオフ状態であることを示すこととしている。
【0069】
例えば区分(3)にしきい値電圧が含まれるメモリセルを考える。処理回路110は、そのメモリセルからは、マスクデータリード(ここではCリード)によって“0”を取得する。また、処理回路110は、そのメモリセルが保持するロアービットは、シフトリードSFT1およびシフトリードSFT2によれば、“0”であると判定され、シフトリードSFT3、シフトリードSFT4、およびシフトリードSFT5によれば、“1”であると判定される。
【0070】
また、例えば区分(1)にしきい値電圧が含まれるメモリセルと、区分(12)にしきい値電圧が含まれるメモリセルとは、5回のシフトリードによって同一の結果が得られるが、マスクデータリードによる判定結果が異なる。つまり、マスクデータリードによって、区分(1)にしきい値電圧が含まれるメモリセルと、区分(12)にしきい値電圧が含まれるメモリセルとが識別できる。
【0071】
或るメモリセルにかかるCリードによる判定結果が“0”であることは、そのメモリセルがErステートまたはAステートに属す、つまり、区分(1)~(6)に含まれていることを示す。或るメモリセルにかかるCリードによる判定結果が“1”であることは、そのメモリセルがDステートまたはEステートに属す、つまり区分(7)~(12)に含まれていることを示す。シフトリードによるリードデータに対してCリードによる判定結果CRを用いたマスク処理を行うことで、ErステートまたはAステートに属するメモリセルに対するAリードの判定結果ARと、DステートまたはEステートに属するメモリセルに対するEリードの判定結果ERと、を取得することが可能である。
【0072】
コントローラ200は、5回のシフトリードのリードデータに対してCリードによる判定結果CRを用いてDステートまたはEステートに属するメモリセルから得られた判定結果をマスクすることによって、Aリードの判定結果ARを5回のシフトリードのそれぞれについて取得する。そして、コントローラ200は、5回のシフトリードのそれぞれについて取得した判定結果ARに基づき、ErステートまたはAステートに属するメモリセルのうちの、しきい値電圧がShift_a1よりも低いメモリセルの数、しきい値電圧がShift_a2よりも低いメモリセルの数、しきい値電圧がShift_a3よりも低いメモリセルの数、しきい値電圧がShift_a4よりも低いメモリセルの数、およびしきい値電圧がShift_a5よりも低いメモリセルの数を算出する。また、コントローラ200は、5回のシフトリードのそれぞれについて取得した判定結果ERに基づき、また、5回のシフトリードのリードデータに対してCリードによる判定結果CRを用いてErステートまたはAステートに属するメモリセルから得られた判定結果をマスクすることによって、Eリードの判定結果ERを5回のシフトリードのそれぞれについて取得する。そして、コントローラ200は、5回のシフトリードのそれぞれについて取得した判定結果ERに基づき、DステートまたはEステートに属するメモリセルのうちの、しきい値電圧がShift_e1よりも低いメモリセルの数、しきい値電圧がShift_e2よりも低いメモリセルの数、しきい値電圧がShift_e3よりも低いメモリセルの数、しきい値電圧がShift_e4よりも低いメモリセルの数、およびしきい値電圧がShift_e5よりも低いメモリセルの数を算出する。図8の中段のグラフは、このような動作によって算出されたメモリセルの数をプロットしたグラフである。
【0073】
続いて、コントローラ200は、しきい値電圧がShift_a1よりも低いメモリセルの数、しきい値電圧がShift_a2よりも低いメモリセルの数、しきい値電圧がShift_a3よりも低いメモリセルの数、しきい値電圧がShift_a4よりも低いメモリセルの数、しきい値電圧がShift_a5よりも低いメモリセルの数、しきい値電圧がShift_e1よりも低いメモリセルの数、しきい値電圧がShift_e2よりも低いメモリセルの数、しきい値電圧がShift_e3よりも低いメモリセルの数、しきい値電圧がShift_e4よりも低いメモリセルの数、およびしきい値電圧がShift_e5よりも低いメモリセルの数に基づき、区分(1)~(12)のそれぞれに含まれるメモリセルの数を算出する。図8の下段のグラフは、区分(1)~(12)のそれぞれに含まれるメモリセルの数をプロットしたグラフである。
【0074】
区分(1)~(12)のそれぞれに含まれるメモリセルの数をプロットしたグラフは、ErステートおよびAステートの何れかに属するメモリセルの分布と、DステートおよびEステートの何れかに属するメモリセルの分布と、の近似と考えることができる。よって、コントローラ200は、区分(1)~(12)のそれぞれに含まれるメモリセルの数のうちの区分(1)~(6)の範囲においてメモリセルの数が極小値をとる電圧値を、判定電圧VAにかかる最適判定電圧VA_optとして取得する。また、コントローラ200は、区分(1)~(12)のそれぞれに含まれるメモリセルの数のうちの区分(7)~(12)の範囲においてメモリセルの数が極小値をとる電圧値を、判定電圧VEにかかる最適判定電圧VE_optとして取得する。
【0075】
ミドルページのリード動作に必要な判定電圧VB,VD,VFについて最適判定電圧を測定する場合には、ミドルページをリード対象とした複数回のシフトリードと、判定電圧VB,VDの間の電圧(例えばVC)を判定電圧としたマスクデータリードと、判定電圧VD,VFの間の電圧(例えばVE)を判定電圧としたマスクデータリードと、によって判定電圧VB,VD,VFのそれぞれの最適判定電圧を測定することができる。
【0076】
また、アッパーページのリード動作に必要な判定電圧VC,VGについて最適判定電圧を測定する場合には、アッパーページをリード対象とした複数回のシフトリードと、判定電圧VC,VGの間の電圧(例えばVE)を判定電圧としたマスクデータリードと、によって判定電圧VC,VGのそれぞれの最適判定電圧を測定することができる。
【0077】
このように、第1の最適値取得動作によれば、判定電圧の値を異ならせて複数のメモリセルがオン状態であるかオフ状態であるかが複数回、判定され、判定結果の群に基づいて最適判定電圧が取得される。
【0078】
なお、第1の最適値取得動作では、必ずしもマスクデータリードが行われなくてもよい。例えば、処理回路110は、単一種類の判定電圧を少しずつ異ならせながら複数回のシフトリードを行うことで、当該単一種類の判定電圧の周辺のメモリセルの分布の近似を取得し、取得したメモリセルの分布の近似に基づいて当該単一種類の判定電圧の最適判定電圧を取得してもよい。
【0079】
最適値取得動作の別の一例として、第2の最適値取得動作を説明する。
【0080】
第2の最適値取得動作では、コントローラ200は、NAND型フラッシュメモリ100から取得した何れのエラー訂正も実行されていないリードデータ(訂正前データと表記する)とエラー訂正によって期待されたデータに訂正された後のリードデータ(訂正後データと表記する)との比較を行う。そして、コントローラ200は、“Si”ステートに対応したデータが誤って“Si”ステートに隣接する“Si+1”ステートに対応したデータとしてリードされたビットの数と、“Si+1”ステートに対応したデータが誤って“Si”ステートに対応したデータとしてリードされたビットの数と、に基づいて評価指標を取得する。そして、コントローラ200は、評価指標に基づいて“Si”ステートと“Si+1”ステートとの境界に対応した判定電圧の、エラービットの発生数を抑制できる電圧値を計算する。
【0081】
以降では、“Si”ステートに対応したデータが誤って“Si+1”ステートに対応したデータとしてリードされたビットを、ビットSitoSi+1と表記する。“Si+1”ステートに対応したデータが誤って“Si”ステートに対応したデータとしてリードされたビットを、ビットSi+1toSiと表記する。また、ビットSitoSi+1の数を、カウントSitoSi+1と表記する。また、ビットSi+1toSiの数を、カウントSi+1toSiと表記する。
【0082】
図9および図10は、実施形態の第2の最適値取得動作を説明するための図である。図9および図10では、隣り合う2つのステートの例として、“A”ステートと“B”ステートとを挙げる。
【0083】
図9には、“A”ステートにかかるローブと“B”ステートにかかるローブとが描画されている。当該2つのローブは、種々の要因によって変化し、互いに重なり合っている。このような2つのローブに対して電圧VB1~VB5のそれぞれを判定電圧として使用してリード動作を実行すると、ビットAtoBの数(つまりカウントAtoB)と、ビットBtoAの数(つまりカウントBtoA)と、の比が判定電圧によって変化する。
【0084】
VB3が判定電圧として使用された場合、カウントAtoBと、カウントBtoAと、が等しい。VB4またはVB5が判定電圧として使用された場合、カウントAtoBはカウントBtoAよりも小さい。VB5が判定電圧として使用された場合、VB4が判定電圧として使用された場合に比べ、カウントAtoBと、カウントBtoAと、の差が大きい。VB1またはVB2が判定電圧として使用された場合、カウントAtoBはカウントBtoAよりも大きい。VB1が判定電圧として使用された場合、VB2が判定電圧として使用された場合に比べ、カウントAtoBと、カウントBtoAと、の差が大きい。
【0085】
カウントAtoBと、カウントBtoAと、が等しい電圧VB3を判定電圧として使用した場合、エラービットの数を最小とすることができる。つまり、電圧VB3が判定電圧VBの最適値VB_optに該当すると考えられる。そして、判定電圧VBが電圧VB3よりも大きくなるほど、カウントBtoAに対するカウントAtoBの割合が大きくなる。判定電圧VBが電圧VB3よりも小さくなるほど、カウントBtoAに対するカウントAtoBの割合が小さくなる。
【0086】
図10は、カウントBtoAに対するカウントAtoBの割合の常用対数と、電圧VB_opt(つまりVB3)と電圧VB1~VB5との差分d1~d5と、の関係を示すグラフである。この例によれば、カウントBtoAに対するカウントAtoBの割合の常用対数と、差分d1~d5と、はリニアな関係があることが読み取れる。
【0087】
設計者は、図10に示した関係式をそのまま、またはテーブルなどの形式で、コントローラ200に保持させる。コントローラ200は、訂正前データと訂正後データとの比較に基づき、カウントAtoBとカウントBtoAとを取得する。そして、コントローラ200は、評価指標としてカウントBtoAに対するカウントAtoBの割合の常用対数を計算する。そして、コントローラ200は、計算によって取得した評価指標と上記の関係式とに基づき、評価指標としてカウントBtoAに対するカウントAtoBの割合の常用対数が0とすることができる差分電圧を計算する。そして、コントローラ200は、リードデータの取得に使用した判定電圧の値に取得した差分電圧を適用することによって、電圧VB_optを取得する。
【0088】
コントローラ200は、1つのメモリセルグループMSGのうちのロアーページ、ミドルページ、およびアッパーページのそれぞれに対してリード動作を行うことによって、ページ毎に訂正前データと訂正後データとの対を取得する。そして、コントローラ200は、全ページ分の訂正前データのセットと、全ページ分の訂正後データのセットと、に基づき、ビットSitoSi+1に該当するメモリセルと、ビットSi+1toSiに該当するメモリセルと、をステート境界毎に特定する。そして、コントローラ200は、カウントSitoSi+1と、カウントSi+1toSiと、をステート境界毎に計算する。コントローラ200は、ステート境界毎に計算したカウントSitoSi+1とカウントSi+1toSiとの対に基づき、判定電圧VA~VGの最適判定電圧を取得する。
【0089】
なお、判定電圧AR~GRの全てについて最適判定電圧を取得するためには、上記したように、1つのメモリセルグループMSGの全ページからデータをリードする必要がある。第2の最適値取得動作においても、第1の最適値取得動作と同様、マスクデータを用いることで、判定電圧AR~GRのうちの特定のページのリード動作に必要な判定電圧のみについて最適判定電圧を取得することが可能である。
【0090】
例えば、ロアーページからのリードデータに対するエラー訂正によって“0”から“1”に変化したビットは、ビットAtoErおよびビットDtoEの何れかである。また、ロアーページからのリードデータに対するエラー訂正によって“1”から“0”に変化したビットは、ビットErtoAおよびビットEtoDの何れかである。コントローラ200は、ロアーページからのリードデータのうちのDステートまたはEステートに属するメモリセルからリードされたビットを、例えばCリードによる判定結果CRを用いてマスクすることで、“0”から“1”に変化したビットのうちのビットAtoErと、“1”から“0”に変化したビットのうちのビットErtoAと、を特定する。また、コントローラ200は、ロアーページからのリードデータのうちのErステートまたはAステートに属するメモリセルからリードされたビットを、例えばCリードによる判定結果CRを用いてマスクすることで、“0”から“1”に変化したビットのうちのビットDtoEと、“1”から“0”に変化したビットのうちのビットEtoDと、を特定する。コントローラ200は、ビットAtoErの数とビットErtoAの数とに基づき、判定電圧VAの最適判定電圧VA_optを計算する。また、コントローラ200は、ビットDtoEの数とビットEtoDの数とに基づき、判定電圧VEの最適判定電圧VE_optを計算する。
【0091】
このように、第2の最適値取得動作では、エラー訂正の前のリードデータとエラー訂正の後のリードデータとの比較に基づいて最適判定電圧が取得される。
【0092】
第1の最適値取得動作および第2の最適値取得動作では、少なくとも1回のリード動作の結果(即ちリードデータ)が使用される。リード動作では、少なくとも1つの判定電圧を用いてメモリセルがオン状態であるかオフ状態であるかを判定した判定結果を用いてリードデータが取得される。よって、第1の最適値取得動作および第2の最適値取得動作は、判定電圧を用いてメモリセルがオン状態であるかオフ状態であるかを判定し、判定結果に基づいて最適判定電圧を取得する動作と考えることができる。
【0093】
前述したように、メモリセルのしきい値電圧は、種々の要因によって変化し得る。メモリセルのしきい値電圧の変化の要因のうちの1つに、メモリセルアレイ111へのアクセス時のメモリチップCPの温度がある。
【0094】
しきい値電圧の変化をキャンセルするように判定電圧を自律的に変化させる機能がメモリチップ自身に備わっている場合がある。しかしながら、そのような機能を用いたとしても、しきい値電圧の変化を完全にキャンセルすることは困難である。しきい値電圧の変化を完全にキャンセルしきれない場合、リードデータに含まれるエラービット数が増加する。そして、しきい値電圧の変化を完全にキャンセルしきれないことによるエラービット数の増加量は、1つのメモリセル当たりにライトされるデータのビット数が大きいほど大きい傾向がある。
【0095】
図11は、実施形態の或るメモリチップCPにおける判定電圧の温度依存性の一例を示す図である。本図の(A)は、或る温度(ここでは一例として50℃)を基準温度とし、メモリチップCPの温度が基準温度よりも高い場合におけるメモリセルのしきい値電圧の分布および判定電圧を示すグラフである。本図の(B)は、メモリチップCPの温度が基準温度である場合のメモリセルのしきい値電圧の分布および判定電圧を示すグラフである。本図の(C)は、メモリチップCPの温度が基準温度よりも低い場合におけるメモリセルのしきい値電圧の分布および判定電圧を示すグラフである。
【0096】
図11に示す例では、温度が高いほど各ステートのローブが負電圧側にシフトしている。このことは、リードデータに含まれるエラービット数を抑制するためには、温度が高いほど各判定電圧を負電圧側にシフトさせる必要があることを示す。つまり、或る温度において最適判定電圧を取得したとしても、別の温度でその最適判定電圧を使用する場合には、最適判定電圧の取得時の温度と最適判定電圧の使用時の温度との差に応じて最適判定電圧を補正することが求められる。
【0097】
なお、メモリチップCPは、しきい値電圧の変化をキャンセルするように温度に応じて判定電圧を変化させる機能を有していてもよいし、有していなくてもよい。メモリチップCPが温度に応じて判定電圧を変化させる機能を有していない場合、図11に示す各ローブおよび各判定電圧の温度による変動は、各ローブおよび各判定電圧の温度による実際の変動を表すと考えることができる。メモリチップCPが温度情報に応じて判定電圧を変化させる機能を有している場合、図11に示す各ローブおよび各判定電圧の温度による変動は、各ローブおよび各判定電圧の温度による実際の変動のうちのメモリチップCPの機能ではキャンセルできなかった成分を表すと考えることができる。
【0098】
コントローラ200は、リード動作においては、メモリチップCPに指示する判定電圧をリード動作時の温度に応じて変化させる。具体的には、コントローラ200は、最適値取得動作によって最適判定電圧としての電圧値を取得した場合、取得した最適判定電圧としての電圧値を、取得時の温度情報に基づいて基準温度での電圧値に変換して保存する。そして、以降にリード動作を行う際には、コントローラ200は、保存した基準温度での電圧値をリード動作時の温度に基づいて補正して、補正後の電圧値を判定電圧として用いたリード動作を実行する。
【0099】
なお、基準温度は、温度設定値の一例である。
【0100】
実施形態と比較される技術について説明する。実施形態と比較される技術を、比較例と表記する。比較例によれば、メモリコントローラは、リード動作時に最適判定電圧を使用する場合、その最適判定電圧を取得した最適値取得動作の実行時の温度情報とリード動作の実行時の温度情報とに基づいて最適判定電圧を補正して、補正後の最適判定電圧を使用する。しかしながら、この比較例によれば、最適値取得動作の実行時の温度を保存する必要があり、温度に応じて判定電圧を変化させるための管理が煩雑になる。
【0101】
実施形態によれば、コントローラ200は、最適値取得動作によって取得した最適判定電圧を基準温度における電圧値に変換して保存する。よって、最適値取得動作の実行時の温度を保存する必要がなく、温度に応じて判定電圧を変化させるための管理が簡単になる。
【0102】
以降では、最適判定電圧である電圧値から変換された基準温度における電圧値を、基準判定電圧と表記する。基準判定電圧である電圧値をリード動作時の温度に基づいて補正して得られる電圧値を、補正判定電圧、と表記する。そして、最適判定電圧は、特に断りがない限り、最適値取得動作によって取得した電圧値を意味することとする。
【0103】
コントローラ200は、最適判定電圧を基準判定電圧に変換したり、基準判定電圧を補正判定電圧に変換したりする際には、メモリセルのしきい値電圧の温度依存性に対応する温度補正情報を使用する。
【0104】
図12は、実施形態の温度補正情報210の一例を示す図である。本図に示す例では、温度補正情報210は、温度と補正量との関係を示す。
【0105】
温度補正情報210においては、基準温度においては補正量が0とされる。そして、この例では、温度と補正量との関係は、温度に応じて補正量が増加する一次関数として定義されている。
【0106】
例えば、最適判定電圧を基準判定電圧に変換する際には、コントローラ200は、最適判定電圧の取得時の温度に対応する補正量を温度補正情報210に基づいて取得する。そして、コントローラ200は、最適判定電圧に補正量を加算することによって、基準判定電圧を取得する。
【0107】
また、リード動作の際には、コントローラ200は、リード動作時の温度に対応する補正量を温度補正情報210に基づいて取得する。そして、コントローラ200は、基準判定電圧から補正量を減算することによって、補正判定電圧を取得する。
【0108】
なお、温度補正情報210によって定義される温度と補正量との関係は図12に示した例に限定されない。温度補正情報210がメモリセルの温度依存性に対応し、かつ判定電圧を当該温度依存性に基づいて変換または補正できる情報である限り、温度補正情報210の形式は特定の形式に限定されない。温度補正情報210は、数式として表現された情報であってもよいし、テーブル形式の情報であってもよい。
【0109】
また、温度補正情報210は、判定電圧VA~VGのそれぞれについて温度と補正量との関係を定義したものであってもよい。また、判定電圧VA~VGのうちの複数または全部で共通化されていてもよい。
【0110】
なお、メモリセルのしきい値電圧の温度依存性は、メモリチップCP毎に異なり得る。よって、例えば、温度補正情報210は、メモリチップCPの製造者によってメモリチップCP毎に個別に生成される。各メモリチップCPの温度補正情報210は、例えば、メモリチップCPの所定の領域に格納される。
【0111】
図13に示すように、メモリセルアレイ111は、ROMヒューズ121およびユーザROM122を備える。
【0112】
ROMヒューズ121には、メモリチップCPを正常に制御するためには必須の各種設定情報がメモリチップCPの製造者によって予め格納される。一例では、欠陥ブロック(defective block)情報がROMヒューズ121に格納される。製造工程では、許容レベルを超えた欠陥を備えるブロックが欠陥ブロックとして検出される。欠陥ブロック情報は、検出された欠陥ブロックの一覧を記録した情報である。コントローラ200は、メモリチップCPから欠陥ブロック情報を取得し、取得した欠陥ブロック情報に記録されたブロックを使用禁止とする。
【0113】
ユーザROM122には、メモリチップCPの制御に使用可能であるが制御に必須ではない各種設定情報がメモリチップCPの製造者によって予め格納される。温度補正情報210は、一例では、このユーザROM122に格納されている。コントローラ200は、ユーザROM122からRAM202に温度補正情報210をロードして、RAM202にロードした温度補正情報210を適時、参照する。
【0114】
温度補正情報210が定義する上記対応関係において、「温度」は、例えば、メモリチップCPの温度である。その場合、コントローラ200は、温度補正情報210から補正量を取得するための検索に用いる温度を、メモリチップCPに設けられた温度センサ112から取得する。つまり、コントローラ200は、温度補正情報210に基づいて補正量を取得する際には、温度検出値の出力を要求するコマンドをメモリチップCPに送信する。
【0115】
図14は、実施形態のメモリチップCPから温度検出値を取得するコマンドシーケンスの一例を示す図である。本図に示す例では、コントローラ200は、温度問い合わせコマンドと、温度検出値を出力させるメモリチップCPを示すメモリチップアドレスを少なくとも含むアドレス情報と、をこの順番でメモリチップCPに送信する。メモリチップCPは、自身に具備された温度センサ112から温度検出値を取得する。メモリチップCPの状態は、温度検出値を取得する期間には、ビジー状態に維持される。メモリチップCPは、温度検出値の取得が完了すると、レディー状態に遷移して、温度検出値をコントローラ200に出力する。
【0116】
コントローラ200は、取得した温度検出値を用いて温度補正情報210を参照することで、補正量を取得する。
【0117】
なお、温度補正情報210が定義する上記対応関係において、「温度」は、メモリチップCPの温度と相関がある限り、メモリチップCPと異なる任意の位置の温度であってもよい。例えば、コントローラ200の温度とメモリチップCPの温度との間に相関がある場合、温度補正情報210は、コントローラ200の温度から補正量を取得することが可能に構成されてもよい。その場合、コントローラ200は、自身に具備される温度センサ207から温度検出値を取得し、その温度検出値を用いて温度補正情報210を参照することで、補正量を取得することができる。
【0118】
また、温度補正情報210が予め格納される位置は、各メモリチップCPのユーザROM122に限定されない。また、1つの温度補正情報210は、2以上のメモリチップCP(例えば全てのメモリチップCP)で共有されてもよい。また、メモリチップCPあたりに複数の温度補正情報210が設けられてもよい。例えば、プレーン毎に温度補正情報210が設けられてもよい。
【0119】
図15は、実施形態の基準判定電圧の管理方法の一例を示す図である。
【0120】
図15に示す例では、1つのブロックにつき、基準判定電圧のセットが1つ、対応付けられて保存される。基準判定電圧のセットは、判定電圧VAにかかる基準判定電圧、判定電圧VBにかかる基準判定電圧、判定電圧VCにかかる基準判定電圧、判定電圧VDにかかる基準判定電圧、判定電圧VEにかかる基準判定電圧、判定電圧VFにかかる基準判定電圧、および判定電圧VGにかかる基準判定電圧からなる。基準判定電圧のセットは、ブロック毎に基準判定電圧テーブル211に記録され、適時、更新される。
【0121】
基準判定電圧テーブル211は例えばRAM202に格納され、RAM202上で更新される。電源断時には、RAM202内の基準判定電圧テーブル211は、所定の不揮発性の記憶領域(例えばNAND型フラッシュメモリ100)に転送されてもよいし、転送されなくてもよい。
【0122】
なお、基準判定電圧のセットは、必ずしもブロック単位で管理されなくてもよい。ブロックよりも大きい記憶領域の単位で基準判定電圧のセットが管理されてもよいし、ブロックよりも小さい記憶領域の単位で基準判定電圧のセットが管理されてもよい。
【0123】
図16は、実施形態のメモリシステム1が動作中においてRAM202に保持する情報の一例を示す図である。本図に示すように、動作中においては、RAM202には、メモリチップCP0から取得した温度補正情報210-0、メモリチップCP1ら取得した温度補正情報210-1、メモリチップCP2ら取得した温度補正情報210-2、メモリチップCP3ら取得した温度補正情報210-3が保持される。また、RAM202には、基準判定電圧テーブル211が保持される。
【0124】
なお、温度補正情報210は、第1情報の一例である。基準判定電圧テーブル211は、第2情報の一例である。RAM202は、第1情報が格納されるように構成された第2メモリの一例であり、第2報が格納されるように構成された第3モリの一例でもある。第2メモリと第3メモリとは実施形態のように1つのRAM202によって構成されてもよいし、それぞれ異なるメモリによって構成されてもよい。
【0125】
続いて、実施形態のメモリシステム1の動作を説明する。
【0126】
図17は、実施形態のメモリシステム1の起動時の動作の一例を示す図である。
【0127】
メモリシステム1がパワーオンされると、コントローラ200は、各メモリチップCPをパワーオンする(S101)。図17では、図面をシンプルにするために、ひとつのメモリチップCPに対する動作が描画されている。
【0128】
メモリチップCPがパワーオンに応じた処理を完了すると、パワーオンが完了したことをコントローラ200に通知する(S102)。
【0129】
パワーオンの完了の通知に応じて、コントローラ200は、欠陥ブロック情報を要求する(S103)。
【0130】
メモリチップCPは、欠陥ブロック情報を含むROMヒューズ121に格納されている管理情報は、パワーオンの処理においてROMヒューズ121からリードされてメモリチップCP内の所定のレジスタにセットされる。メモリチップCPは、レジスタ内の管理情報のうちの欠陥ブロック情報を、S103の処理によって受信する要求に応じて出力する(S104)。
【0131】
続いて、コントローラ200は、温度補正情報210を要求する(S105)。メモリチップCPは、S104の処理によって受信する要求に応じて、ユーザROM122に格納されている温度補正情報210をリードして、温度補正情報210を出力する(S106)。コントローラ200は、取得した温度補正情報210をRAM202に格納する。
【0132】
このように、一例では、コントローラ200は、起動時に、各メモリチップCPから温度補正情報210を取得する。
【0133】
図18は、プログラム動作の際の実施形態のメモリシステム1の動作の一例を示すフローチャートである。
【0134】
コントローラ200は、1つのブロックに対するプログラム動作を実行する(S201)。S201の処理が実行されるブロックを、図18の説明において、対象ブロックと表記する。S201の処理は、対象ブロックに空きが無くなるまで繰り返し実行される。
【0135】
コントローラ200は、対象ブロックに対するプログラム動作が完了したか否かを判定する(S202)。対象ブロックに対するプログラム動作が完了するとは、例えば、対象ブロックがいっぱいまでデータが格納されて、別のデータを格納可能な領域が無くなることである。
【0136】
対象ブロックに対するプログラム動作が完了していない場合(S202:No)、コントローラ200は、S201の処理を再び実行する。
【0137】
対象ブロックに対するプログラム動作が完了した場合(S202:Yes)、コントローラ200は、判定電圧の初期設定値のセットを取得する(S203)。そして、コントローラ200は、判定電圧の初期設定値のセットを基準判定電圧のセットとして対象ブロックに対応付けて基準判定電圧テーブル211に記録し(S204)、動作が終了する。
【0138】
なお、判定電圧の初期設定値のセットは、予め設定されている。判定電圧の初期設定値のセットは、例えば、全メモリチップCPで共通とされる。判定電圧の種類(VA~VG)毎に固定値が予め各メモリチップCPに設定されており、コントローラ200において判定電圧が固定値からのシフト量(つまり差分)として管理される場合においては、判定電圧の初期設定値のセットは、オールゼロとされる。なお、判定電圧の初期設定値のセットの例はこれに限定されない。
【0139】
実施形態では、一例として、基準設定値のセットは、ブロック単位で記録されることとしている。よって、図18に示したように、1つのブロックに対するプログラム動作が完了し、以降はイレース動作が実行されるまで当該ブロックに対するプログラム動作が実行されない場合に、判定電圧の初期設定値のセットが基準判定電圧テーブル211に記録される。
【0140】
図19は、ホスト機器300からのリードコマンドに応じた実施形態のメモリシステム1の動作の一例を示すフローチャートである。
【0141】
コントローラ200がホスト機器300からリードコマンドを受信すると(S301)、コントローラ200は、温度補正情報210の参照などに使用するための温度を取得する(S302)。温度は、例えば、温度センサ112による温度検出値または温度センサ207による温度検出値である。なお、図19の説明においては、S301で受信したリードコマンドによるリード対象のページを、対象ページと表記する。
【0142】
コントローラ200は、基準判定電圧テーブル211から対象ページを含むブロックに対応付けられた基準判定電圧を取得する(S303)。S303では、コントローラ200は、対象ページを含むブロックに対応付けられた基準判定電圧のセットのうちの、対象ページに対するリード動作に必要な種類の基準判定電圧を取得する。なお、図19の説明において、基準判定電圧および補正判定電圧を含む判定電圧は、特に断りがない限り、判定電圧VA~VGのうちの対象ページに対するリード動作に必要な種類の判定電圧を示すこととする。
【0143】
コントローラ200は、S302の処理によって取得した温度、S303の処理によって取得した基準判定電圧、および温度補正情報210に基づいて、補正判定電圧を算出する(S304)。そして、コントローラ200は、対象ページに対し、補正判定電圧を用いたリード動作を実行する(S305)。
【0144】
コントローラ200は、リード動作によって取得したリードデータに対し、エラー訂正を実行する(S306)。S306では、コントローラ200は、例えば、ECC回路206によってエラー訂正を実行する。
【0145】
コントローラ200は、エラー訂正が成功したか否かを判定する(S307)。エラー訂正が失敗した場合(S307:No)、コントローラ200は、第1の最適値取得動作によって最適判定電圧を取得する(S308)。コントローラ200は、対象ページに対し、最適判定電圧を用いたリード動作を実行する(S309)。そして、コントローラ200は、S309の処理によって取得したリードデータに対し、エラー訂正を実行する(S310)。S310では、コントローラ200は、例えば、ECC回路206によってエラー訂正を実行する。
【0146】
コントローラ200は、エラー訂正が成功したか否かを判定する(S311)。エラー訂正が成功した場合(S311:Yes)、コントローラ200は、S302の処理によって取得した温度、S309の処理によって取得した最適判定電圧、および温度補正情報210に基づいて、新しい基準判定電圧を算出する(S312)。そして、コントローラ200は、新しい基準判定電圧を基準判定電圧テーブル211に上書き記録する(S313)。
【0147】
エラー訂正が失敗した場合(S311:No)、コントローラ200は、S306で実行したエラー訂正やS310で実行したエラー訂正よりも訂正能力が高い、第2のエラー訂正を実行する(S314)。第2のエラー訂正としては、訂正能力が高くリードデータを非常に高い確率で復元できる限り、任意の方式が採用され得る。例えば、コントローラ200は、第2のエラー訂正として、軟判定を用いたエラー訂正を実行してもよい。別の例では、コントローラ200は、積符号の複合によるエラー訂正を実行してもよい。
【0148】
エラー訂正が成功した場合(S307:Yes)、S313の後、またはS314によってリードデータを復元した後、コントローラ200は、ホスト機器300にリードデータを出力する(S315)。そして、リードコマンドに応じたメモリシステム1の動作が終了する。
【0149】
このように、ホスト機器300からのリードコマンドに応じたリード動作において、エラー訂正が失敗した場合、最適値取得動作(この例では第1の最適値取得動作)が起動される。そして、最適値取得動作によって取得した最適判定電圧に基づき、基準判定電圧テーブル211に記録された基準判定電圧が更新される。
【0150】
なお、コントローラ200は、NAND型フラッシュメモリ100の管理の一つとして、ブロック間でデータを転記する転記動作を実行することができる。転記動作は、例えば、ガベージコレクションを含む。転記動作では、NAND型フラッシュメモリ100からデータをリードするリード動作と、NAND型フラッシュメモリ100にデータをライトするライト動作と、を含む。コントローラ200は、転記動作の一環としてのリード動作においても、S302~S314の動作を実行するよう構成されてもよい。
【0151】
また、最適値取得動作および基準判定電圧テーブル211の更新のトリガは、ホスト機器300からのライト動作に応じたリード動作の際または転記処理の一環としてのリード動作の際にエラー訂正が失敗したことのみに限定されない。
【0152】
例えば、コントローラ200は、NAND型フラッシュメモリ100の管理の別の一つとして、パトロールリードを実行することができる。パトロールリードは、ホスト機器300からの要求に関係なくメモリチップCPに対して行われるリード動作である。パトロールリードは、ホスト機器300からのリード要求の際にエラー訂正が成功する確率を高めるために、最適判定電圧を予め特定することを目的としたリード動作である。コントローラ200は、例えば所定の周期でパトロールリードを実行する。コントローラ200は、ホスト機器300からのライトコマンドやリードコマンドの受信に応じ、パトロールリードの実行をスキップしたり、パトロールリードの実行の周期を一時的または非一時的に変更したりしてもよい。つまり、パトロールリードは、ホスト機器300からのリードコマンドとは関係なく、異なるタイミングで複数回、実行される。
【0153】
実施形態では、コントローラ200は、パトロールリードの際に最適値取得動作および基準判定電圧テーブル211の更新を行うことができる。
【0154】
図20は、実施形態のメモリシステム1のパトロールリードの動作の一例を示すフローチャートである。ここでは一例として、1つのブロックにかかるパトロールリードの動作を説明する。
【0155】
コントローラ200は、何らかの方法でパトロールリードの対象のメモリセルグループMSGを決定する(S401)。図20の説明において、パトロールリードの対象のメモリセルグループMSGを、対象メモリセルグループMSGと表記する。
【0156】
コントローラ200は、温度補正情報210の参照などに使用する温度を取得する(S402)。温度は、例えば、温度センサ112による温度検出値または温度センサ207による温度検出値である。
【0157】
コントローラ200は、基準判定電圧テーブル211から対象メモリセルグループMSGを含むブロックに対応付けられた基準判定電圧のセットを取得する(S403)。そして、コントローラ200は、S402の処理によって取得した温度、S403の処理によって取得した基準判定電圧のセット、および温度補正情報210に基づいて、補正判定電圧のセットを算出する(S404)。
【0158】
コントローラ200は、対象メモリセルグループMSGを構成する各ページに対するリード動作を順次、実行する。図20では、メモリセルグループMSGが備える3つのページのそれぞれを、識別子i(ただしiは0から2までの整数)を用いて、ページiと表記することとする。一例では、ページ0はロアーページ、ページ1はミドルページ、ページ2はアッパーページを表す。なお、識別子iと3つのページとの対応関係はこれに限定されない。
【0159】
コントローラ200は、識別子iを0に初期化する(S405)。そして、コントローラ200は、対象メモリセルグループMSGを構成する3つのページのうちのページiをリード対象として、補正判定電圧を用いたリード動作を実行する(S406)。
【0160】
コントローラ200は、リード動作によって取得したリードデータを訂正前データとしてRAM202に格納し(S407)、格納した訂正前データとは別に、リードデータに対するエラー訂正を実行する(S408)。S408では、コントローラ200は、例えば、ECC回路206によってエラー訂正を実行する。
【0161】
コントローラ200は、エラー訂正が成功したか否かを判定する(S409)。エラー訂正が成功した場合(S409:Yes)、コントローラ200は、エラー訂正後のリードデータを訂正後データとしてRAM202に格納する(S410)。そして、コントローラ200は、識別子iが2と等しいか否かを判定する(S411)。
【0162】
識別子iが2と等しくない場合(S411:No)、即ち識別子iが0または1である場合、コントローラ200は、iを1だけインクリメントする(S412)。そして、コントローラ200は、S406の処理から一連の処理を再び繰り返す。
【0163】
識別子iが2と等しい場合(S411:Yes)、コントローラ200は、ページ毎に取得した訂正前データと訂正後データとを用いた第2の最適値取得動作によって、最適判定電圧のセットを取得する(S413)。
【0164】
何れかのページに対するリード動作の際にエラー訂正が失敗した場合(S409:No)、第2の最適値取得動作を実行することができない。よって、コントローラ200は、第1の最適値取得動作によって、最適判定電圧のセットを取得する(S414)。
【0165】
S413またはS414の後、コントローラ200は、S402の処理によって取得した温度、S413またはS414の処理によって取得した最適判定電圧のセット、および温度補正情報210に基づいて、新しい基準判定電圧のセットを算出する(S415)。そして、コントローラ200は、新しい基準判定電圧のセットを基準判定電圧テーブル211に上書き記録する(S416)。そして、1つのブロックにかかるパトロールリードの動作が終了する。
【0166】
図21は、実施形態の基準判定電圧テーブル211の内容の変化の一例を示す図である。
【0167】
図21の(A)は、初期状態の基準判定電圧テーブル211を示す。初期状態においては、各ブロックの基準判定電圧のセットは未定義とされている。
【0168】
例えばブロック#0およびブロック#1へのプログラム動作が完了すると(S501)、基準判定電圧テーブル211の内容は(B)に示す状態に変わる。(B)に示す基準判定電圧テーブル211には、判定電圧の初期設定値のセットVdec_defがブロック#0およびブロック#1にかかる基準判定電圧のセットとして記録されている。
【0169】
続いて、例えばホスト機器300からのリードコマンドに応じてブロック#0に対するリード動作が実行される(S502)。リード動作の実行の際の温度はTaであったこととする。リード動作の際に、新しい最適判定電圧のセットVdec_optが取得され、基準判定電圧テーブル211の内容は(C)に示す状態に変わる。(C)に示す基準判定電圧テーブル211によれば、ブロック#0には、最適判定電圧のセットVdec_optと、温度Taに対応する補正量Diff(Ta to 50℃)と、を加算して得られる値のセットが、ブロック#0の基準判定電圧のセットとして記録されている。
【0170】
実施形態のコントローラ200は、上記した構成を備える。よって、例えば、或るブロックに対し、或るタイミング(第1のタイミングと表記する)にリード動作が実行されてエラー訂正が失敗したり(例えば図19のS307参照)、または第1のタイミングにパトロールリードが実行され(例えば図20参照)、第1の後のタイミング(第2のタイミングと表記する)に、次のリード動作(図19参照)が実行された場合、コントローラ200は、次のように動作する。即ち、第1のタイミングにおいては、コントローラ200は、温度センサ112または温度センサ207から温度検出値(第1の温度検出値と表記する)を取得し、第1の最適値取得動作または第2の最適値取得動作によって最適判定電圧を取得する。そして、コントローラ200は、最適判定電圧を第1の温度検出値と温度補正情報210とに基づいて基準判定電圧に変換し、基準判定電圧を基準判定電圧テーブル211に記録する。そして、第2のタイミングにおいては、コントローラ200は、温度センサ112または温度センサ207から新たに温度検出値(第2の温度検出値と表記する)を取得し、基準判定電圧テーブル211に記録された基準判定電圧を、第2の温度検出値と温度補正情報210とに基づいて第2の温度検出値の温度における判定電圧である補正判定電圧に変換し、補正判定電圧を判定電圧として用いてリード動作を実行する。
【0171】
このように、最適判定電圧が温度補正情報210に基づいて温度設定値での電圧値に変換されて管理されるので、温度に応じて判定電圧を変化させるための管理を複雑にすることなくリードデータに発生するエラービットの数を抑制することが可能になる。つまり、簡単な管理でリードデータに発生するエラービットの数を抑制することが可能である。
【0172】
なお、実施形態の技術は種々に変形可能である。以下に実施形態の技術のいくつかの変形例を説明する。変形例の説明では、以上説明した実施形態の技術と異なる事項について説明する。実施形態の技術と同じ事項については説明を省略するか、または簡略的に説明する。
【0173】
(変形例1)
図22は、プログラム動作の際の変形例1のメモリシステム1の動作の一例を示すフローチャートである。
【0174】
変形例1では、コントローラ200は、S601~S602において、図18に示したS201~S202と同じ処理を実行する。
【0175】
対象ブロックに対するプログラム動作が完了した場合(S602:Yes)、コントローラ200は、温度を取得する(S603)。温度は、例えば、温度センサ112による温度検出値または温度センサ207による温度検出値である。
【0176】
続いて、コントローラ200は、判定電圧の初期設定値のセットを取得する(S604)。そして、コントローラ200は、S603の処理によって取得した温度、S604の処理によって取得した判定電圧の初期設定値のセット、および温度補正情報210に基づいて、基準判定電圧を算出する(S605)。具体的には、コントローラ200は、温度に対応する補正量を温度補正情報210に基づいて取得する。そして、コントローラ200は、各判定電圧の初期設定値に補正量を加算することによって、基準判定電圧を取得する。
【0177】
コントローラ200は、S605の処理によって取得した基準判定電圧のセットを対象ブロックに対応付けて基準判定電圧テーブル211に記録し(S606)、動作が終了する。
【0178】
図23は、変形例1の基準判定電圧テーブル211の内容の変化の一例を示す図である。
【0179】
図23の(A)は、初期状態の基準判定電圧テーブル211を示す。初期状態においては、各ブロックの基準判定電圧のセットは未定義とされている。
【0180】
例えばブロック#0およびブロック#1へのプログラム動作が完了すると(S701)、基準判定電圧テーブル211の内容は(B)に示す状態に変わる。なお、ブロック#0へのプログラム動作の際の温度はTbであり、ブロック#1へのプログラム動作の際の温度はTcであることとする。(B)に示す基準判定電圧テーブル211には、判定電圧の初期設定値のセットVdec_defと、温度Tbに対応する補正量Diff(Tb to 50℃)と、を加算した値のセットが、ブロック#0の基準判定電圧のセットとして記録されている。また、判定電圧の初期設定値のセットVdec_defと、温度Tcに対応する補正量Diff(Tc to 50℃)と、を加算して得られる値のセットが、ブロック#1の基準判定電圧のセットとして記録されている。
【0181】
続いて、例えばホスト機器300からのリードコマンドに応じてブロック#0に対するリード動作が実行される(S702)。リード動作の実行の際の温度はTdであったこととする。リード動作の際に、新しい最適判定電圧のセットVdec_optが取得され、基準判定電圧テーブル211の内容は(C)に示す状態に変わる。(C)に示す基準判定電圧テーブル211によれば、最適判定電圧のセットVdec_optと、温度Tdに対応する補正量Diff(Td to 50℃)と、を加算して得られる値のセットが、ブロック#0の基準判定電圧のセットとして記録されている。
【0182】
このように、変形例1では、コントローラ200は、プログラム動作において基準判定電圧を記録する際にも温度補正情報210に基づく変換を実行するように構成される。
【0183】
つまり、変形例1によれば、或るブロックに対してプログラム動作が実行され、その後に、ホスト機器300からのリードコマンドに応じて、または転記動作の一環として、そのブロックに対してリード動作が実行される場合、コントローラ200は、次のように動作する。即ち、コントローラ200は、プログラム動作の際に、判定電圧の初期設定値のセットに対してプログラム動作の際の温度および温度補正情報210に基づく変換を行うことで基準判定電圧のセットを算出し、その基準判定電圧のセットを基準判定電圧テーブル211に記録する。その後のリード動作の際には、コントローラ200は、基準判定電圧テーブル211に記録された基準判定電圧に対してリード動作の際の温度および温度補正情報210に基づく変換を行うことで補正判定電圧を取得し、補正判定電圧を用いてリード動作を実行する。
【0184】
(変形例2)
変形例2では、判定電圧の候補値のセットが予め用意されている。判定電圧の候補値のセットにはインデックスが対応付けられており、コントローラ200は、基準判定電圧のセットを即値のセットとしてではなく、即値のセットに近い候補値のセットに対応するインデックスを記憶する。判定電圧の候補値のセットを、シフトパターンと表記する。シフトパターンは、シフトインデックステーブル212に予め記録されている。
【0185】
図24は、変形例2のメモリシステム1が動作中においてRAM202に保持する情報の一例を示す図である。本図に示すように、動作中においては、RAM202には、メモリチップCP0から取得すた温度補正情報210-0、メモリチップCP1ら取得すた温度補正情報210-1、メモリチップCP2ら取得すた温度補正情報210-2、メモリチップCP3ら取得した温度補正情報210-3、基準判定電圧テーブル211、およびシフトインデックステーブル212が保持される。
【0186】
なお、温度補正情報210は、第1情報の一例である。基準判定電圧テーブル211は、第2情報の一例である。シフトインデックステーブル212は、第3情報の一例である。RAM202は、第1情報が格納されるように構成された第2メモリの一例であり、第2情報が格納されるように構成された第3モリの一例でもあり、第3情報が格納されるように構成された第4メモリの一例でもある。第2メモリ、第3メモリおよび第4メモリは、変形例2のように一つのRAM202によって構成されてもよいし、それぞれ異なるメモリによって構成されてもよい。
【0187】
図25は、変形例2のシフトインデックステーブル212のデータ構造の一例を示す図である。
【0188】
シフトインデックステーブル220は、複数のエントリを含んでおり、それぞれのエントリには1つのシフトパターンが記録されている。シフトパターンは、全種類の判定電圧の値をそれぞれ1つずつ含むセットであり、判定電圧の候補値を示すものである。
【0189】
シフトインデックステーブル220に含まれる各エントリは、インデックスによって区別される。そして、各エントリにはシフトパターンが記録される。各エントリに記録されたシフトパターンは、判定電圧の候補値である。つまり、シフトパターンにはインデックスの値が対応付けられている。
【0190】
図26は、変形例2における基準判定電圧テーブル211とシフトインデックステーブル212とを用いた基準判定電圧のセットの取得方法の一例を示すフローチャートである。図26に示す一連の動作は、図19のS303および図20のS403において実行される。
【0191】
基準判定電圧テーブル211には、基準判定電圧の即値のセットに変えて、インデックスが記録される。よって、コントローラ200は、基準判定電圧テーブル211から、着目するブロックに対応付けられたインデックスを取得する(S801)。そして、コントローラ200は、シフトインデックステーブル212を参照することで、S801の処理によって取得したインデックスに対応するシフトパターンを、基準判定電圧のセットとして取得する(S802)。そして、基準判定電圧テーブル211とシフトインデックステーブル212とを用いた基準判定電圧のセットの取得の動作が終了する。
【0192】
図27は、変形例2における基準判定電圧のセットの記録方法の一例を示すフローチャートである。図27に示す一連の動作は、図19のS313、図20のS416、および図22のS606において実行される。
【0193】
コントローラ200は、シフトインデックステーブル212に記録された複数のシフトパターンのうちの基準判定電圧のセットに最も類似したシフトパターンを特定する(S901)。基準判定電圧のセットとシフトパターンとの類似度の指標としては、任意の指標が使用され得る。例えば、ユークリッド距離、コサイン類似度、などが類似度の指標として使用され得る。
【0194】
なお、図27に示す一連の動作が図19のS313において実行される場合、コントローラ200は、古い基準判定電圧のセット、つまり図19のS303の処理に替わる図26の一連の動作のうちのS802の処理によって取得した基準判定電圧のセットを、図19のS312の処理によって取得した新しい基準判定電圧によって更新することで、新しい基準判定電圧のセットを取得する。そして、コントローラ200は、当該新しい基準判定電圧のセットに対してS901の処理を実行する。
【0195】
S801の後、コントローラ200は、特定したシフトパターンに対応するインデックスを、基準判定電圧テーブル211に記録する(S902)。そして、基準判定電圧のセットの記録の動作が終了する。
【0196】
このように、基準判定電圧テーブル211は、複数のシフトパターンから選択された1つのシフトパターンに対応するインデックスが基準判定電圧のセットとして記録されるように構成されてもよい。
【0197】
なお、上記した変形例2は、実施形態だけでなく、変形例1とともに適用することが可能である。
【0198】
(変形例3)
実施形態、変形例1、および変形例2では、初期設定値は基本的に固定されていた。初期設定値は可変に構成されてもよい。
【0199】
既に述べたように、メモリセルのしきい値電圧の変化の速度は、プログラム動作完了の直後が最も早く、経過時間とともに減速する。また、プログラム動作完了の直後の比較的短い期間においては、プログラム動作が完了してから受けたアクセスの回数が多くないため、似た特性を有する複数の記憶領域においては似た変化パターンでしきい値電圧が変化すると考えられる。また、プログラム動作が完了してからの経過時間が比較的短いブロックに対応する基準判定電圧は、パトロールリードによる更新が受けていない可能性がある。パトロールリードによる更新を受けていない基準判定電圧に基づいて図19に示したリード動作にかかる一連の動作が実行された場合、リードデータに対するエラー訂正が失敗する可能性が少なからず存在する。
【0200】
変形例3では、プログラム動作が完了してからの経過時間が比較的短いブロックに対するリード動作の際にエラー訂正が失敗する確率を抑制するために、所定の動作によって初期設定値が更新される。初期設定値の1つのセットは、しきい値電圧の変化の特性が類似すると考えられるブロックのグループで共通に使用される。ブロックのグループ化のルールは製造者が任意に決定することができる。例えば、メモリチップCP単位で1つのグループが形成される。または、プレーン単位で1つのグループが形成される。または、メモリセルアレイ111がセンスアンプからの距離に応じて複数のサブ領域に分割され、サブ領域単位で1つのグループが形成される。
【0201】
図28は、初期設定値のセットの変形例3の管理方法の一例を示す図である。
【0202】
初期設定値は、初期設定値テーブル213に記録される。具体的には、初期設定値テーブル213は、ブロックグループ毎にエントリを備え、各エントリに初期設定値のセットが記録される。
【0203】
例えば、図18のS203の処理や、図22のS204の処理においては、コントローラ200は、プログラム動作が完了したブロックが属するブロックグループにかかる初期設定値のセットを、初期設定値テーブル213から取得する。
【0204】
初期設定値テーブル213は、例えばRAM202に格納され、RAM202上で初期設定値テーブル213に対する更新が実行される。
【0205】
図29は、初期設定値のセットの変形例3の更新方法の一例を示すフローチャートである。
【0206】
変形例3では、ブロックグループ毎に代表ブロックが設定されている。代表ブロックの設定方法は特定の方法に限定されない。
【0207】
コントローラ200は、代表ブロックに対するプログラム動作が完了し(S1001)、代表ブロックに対するプログラム動作が完了してから所定の短い時間(例えば6時間)が経過すると(S1002)、最適値取得動作を含む種々の処理を行うことで、代表ブロックにかかる基準判定電圧のセットを取得する(S1003)。一例では、コントローラ200は、代表ブロックから何らかの方法でメモリセルグループMSGを選択し、メモリセルグループMSGに対し、図20のS402~S415の処理を実行することで、代表ブロックにかかる基準判定電圧のセットを取得する。
【0208】
コントローラ200は、取得した基準判定電圧のセットを、代表ブロックが属するブロックグループにかかる初期設定値のセットとして初期設定値テーブル213に上書き記録する(S1004)。そして、初期設定値のセットの更新の動作が終了する。
【0209】
このように、変形例3によれば、コントローラ200は、ブロックグループから選択された代表ブロックに対する最適値取得動作に基づき、ブロックグループにかかる初期設定値のセットを更新する。
【0210】
よって、プログラム動作が完了してからの経過時間が比較的短いブロックに対するリード動作の際にエラー訂正が失敗する確率を抑制することが可能である。
【0211】
なお、上記した変形例3は、実施形態だけでなく、変形例1、変形例2、またはその両方とともに適用することが可能である。
【0212】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0213】
1 メモリシステム、100 NAND型フラッシュメモリ、110 処理回路、111 メモリセルアレイ、112 温度センサ、114 NANDストリング、121 ROMヒューズ、122 ユーザROM、200 コントローラ、201 ホストインタフェース回路、202 RAM、203 CPU、204 バッファメモリ、205 NANDインタフェース回路、206 ECC回路、207 温度センサ、210 温度補正情報、211 基準判定電圧テーブル、212 シフトインデックステーブル、213 初期設定値テーブル、220 シフトインデックステーブル、300 ホスト機器、400 NANDバス、CP メモリチップ。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25
図26
図27
図28
図29