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

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

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

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024115360
(43)【公開日】2024-08-26
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
   G11C 16/26 20060101AFI20240819BHJP
   G11C 16/04 20060101ALI20240819BHJP
   G11C 16/08 20060101ALI20240819BHJP
   G11C 11/56 20060101ALI20240819BHJP
   G06F 12/00 20060101ALI20240819BHJP
   G06F 11/10 20060101ALI20240819BHJP
【FI】
G11C16/26 100
G11C16/04 170
G11C16/08 120
G11C11/56 220
G06F12/00 597U
G06F12/00 560
G06F11/10 662
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2023021015
(22)【出願日】2023-02-14
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110003708
【氏名又は名称】弁理士法人鈴榮特許綜合事務所
(72)【発明者】
【氏名】中川 貴史
【テーマコード(参考)】
5B160
5B225
【Fターム(参考)】
5B160NA01
5B225BA19
5B225CA01
5B225CA28
5B225DA10
5B225DE08
5B225EA05
5B225FA01
(57)【要約】
【課題】実施形態の一つは、動作速度が向上されたメモリシステムを提供する。
【解決手段】実施形態のメモリシステムは、複数のメモリセルを含む不揮発性メモリと、複数のメモリセルからデータを読み出す読出し処理を実行するメモリコントローラと、を備える。メモリコントローラは、ホストからの要求に依らないパトロール処理において、第1トラッキング処理を実行し、第1トラッキング処理の結果として第1電圧の値を算出し、ホストから読出し要求を受信したことに応じ、第1読出し処理を実行し、第1データを不揮発性メモリから読み出し、第1データのエラー訂正に失敗したことに応じ、不揮発性メモリに第1電圧を用いた第2トラッキング処理を実行させ、第2トラッキング処理の結果として不揮発性メモリから第2電圧の値を受信し、第2電圧を用いた第2読出し処理を実行し、第2データを不揮発性メモリから読み出す。
【選択図】図8
【特許請求の範囲】
【請求項1】
複数のメモリセルを含む不揮発性メモリと、
前記複数のメモリセルからデータを読み出す読出し処理を実行するように構成されたメモリコントローラと、
を備え、
前記メモリコントローラは、さらに、
ホストからの要求に依らないパトロール処理において、第1トラッキング処理を実行し、前記第1トラッキング処理の結果として第1電圧の値を算出し、
前記ホストから読出し要求を受信したことに応じ、
第1読出し処理を実行し、第1データを前記不揮発性メモリから読み出し、
前記第1データのエラー訂正に失敗したことに応じ、前記不揮発性メモリに前記第1電圧を用いた第2トラッキング処理を実行させ、
前記第2トラッキング処理の結果として前記不揮発性メモリから第2電圧の値を受信し、
前記第2電圧を用いた第2読出し処理を実行し、第2データを前記不揮発性メモリから読み出す、
ように構成されたメモリシステム。
【請求項2】
前記メモリコントローラは、前記パトロール処理において、
第3電圧を用いた前記第1トラッキング処理を実行して第4電圧の値を算出し、
前記第4電圧を用いた第3読出し処理を実行し、第3データを前記不揮発性メモリから読み出し、
前記第3データのエラー訂正に成功した場合、前記第4電圧の値を前記第1電圧の値として算出する、
ように構成された請求項1に記載のメモリシステム。
【請求項3】
前記メモリコントローラは、前記第1トラッキング処理において、
前記第3電圧の値に基づいて探索範囲を決定し、
前記探索範囲内を所定のシフト量で読出し電圧をシフトさせながら複数の読出し処理を実行し、
前記複数の読出し処理に基づいて、前記複数のメモリセルのうちオン状態となるメモリセルの数が第1条件を満たす読出し電圧を前記第4電圧として算出する、
ように構成された請求項2に記載のメモリシステム。
【請求項4】
前記メモリコントローラは、前記第1トラッキング処理において、
複数の読出し電圧をそれぞれ用いて複数の読出し処理を実行し、
前記複数の読出し処理のそれぞれにおいて、前記複数のメモリセルのうちオン状態となるメモリセルの数をカウントし、
前記オン状態となるメモリセルの数が期待値よりも小さい読出し電圧の中で最大の読出し電圧である第5電圧の値と、前記オン状態となるメモリセルの数が前記期待値よりも大きい読出し電圧のなかで最小の読出し電圧である第6電圧の値と、から、前記第4電圧の値を算出する、
ように構成された請求項2に記載のメモリシステム。
【請求項5】
前記メモリコントローラは、
前記第5電圧を用いた読出し処理においてオン状態となったメモリセルの数である第1数と、前記期待値と、の差である第1差を算出し、
前記第1数と、前記第6電圧を用いた読出し処理においてオン状態となったメモリセルの数である第2数と、の差である第2差を算出し、
前記第1差と前記第2差の比率を、前記第5電圧の値と前記第6電圧の値との差に乗算し、
前記乗算の結果を、前記第5電圧の値に加算することにより、前記第4電圧の値を算出する、
ように構成された請求項4に記載のメモリシステム。
【請求項6】
前記メモリコントローラは、前記第1トラッキング処理において、
複数の読出し電圧をそれぞれ用いて複数の読出し処理を実行し、
前記複数の読出し処理のうちの第4読出し処理において、前記複数のメモリセルのうちオン状態となるメモリセルの数が期待値よりも小さい場合、読出し電圧を大きくし、前記複数の読出し処理のうちの第5読出し処理を実行し、
前記複数の読出し処理のうちの第6読出し処理において、前記オン状態となるメモリセルの数が前記期待値よりも大きい場合、読出し電圧を小さくし、前記複数の読出し処理のうちの第7読出し処理を実行する、
ように構成された請求項2に記載のメモリシステム。
【請求項7】
前記メモリコントローラは、
第7電圧を用いて実行された前記第4読出し処理において、前記オン状態となるメモリセルの数が前記期待値よりも大きく、且つ、第8電圧を用いて実行された前記第6読出し処理において、前記オン状態となるメモリセルの数が前記期待値よりも小さい場合に、前記第7電圧の値と前記第8電圧の値との差である第1電圧差の値に基づいて、前記第4電圧の値を算出する、
ように構成された請求項6に記載のメモリシステム。
【請求項8】
前記メモリコントローラは、
前記第1電圧差の値が閾値よりも大きい場合、
前記第1電圧差の値よりも小さい第2電圧差の値を前記第7電圧の値から減算することにより、または、前記第2電圧差の値を前記第8電圧の値に加算することにより、前記第4電圧の値を算出する、
ように構成された請求項7に記載のメモリシステム。
【請求項9】
前記メモリコントローラは、前記パトロール処理において、
第9電圧を用いた第8読出し処理を実行し、第4データを前記不揮発性メモリから読み出し、
前記第4データに対してエラー訂正処理を実行することにより第5データを取得し、
前記第4データの中の第1値の数と、前記第5データの中の第2値の数と、の差に基づいて、前記第9電圧の値から前記第1電圧の値を算出する、
ように構成された請求項1に記載のメモリシステム。
【請求項10】
前記不揮発性メモリは、前記第2トラッキング処理において、
前記第1電圧に基づいて読出し電圧を決定し、
読出し電圧をシフトさせながら複数の読出し処理を実行し、
前記複数の読出し処理に基づいて前記第2電圧の値を推定する、
ように構成された請求項1に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、メモリシステムに関する。
【背景技術】
【0002】
NANDフラッシュメモリのような不揮発性メモリと、不揮発性メモリを制御するメモリコントローラと、を含むメモリシステムが知られている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2020-47318号公報
【特許文献2】特開2020-107376号公報
【特許文献3】米国特許第9595320号明細書
【発明の概要】
【発明が解決しようとする課題】
【0004】
実施形態の一つは、動作速度が向上されたメモリシステムを提供する。
【課題を解決するための手段】
【0005】
実施形態のメモリシステムは、複数のメモリセルを含む不揮発性メモリと、複数のメモリセルからデータを読み出す読出し処理を実行するように構成されたメモリコントローラと、を備える。メモリコントローラは、さらに、ホストからの要求に依らないパトロール処理において、第1トラッキング処理を実行し、第1トラッキング処理の結果として第1電圧の値を算出するように構成される。メモリコントローラは、さらに、ホストから読出し要求を受信したことに応じ、第1読出し処理を実行し、第1データを不揮発性メモリから読み出し、第1データのエラー訂正に失敗したことに応じ、不揮発性メモリに第1電圧を用いた第2トラッキング処理を実行させるように構成される。メモリコントローラは、さらに、第2トラッキング処理の結果として不揮発性メモリから第2電圧の値を受信し、第2電圧を用いた第2読出し処理を実行し、第2データを不揮発性メモリから読み出すように構成される。
【図面の簡単な説明】
【0006】
図1】第1実施形態に係る情報処理システムの構成を示すブロック図。
図2】第1実施形態に係るメモリバスで用いられる信号の一例を示すブロック図。
図3】第1実施形態に係る不揮発性メモリの構成の一例を示す回路図。
図4】第1実施形態に係る複数のメモリセルトランジスタの閾値電圧分布の一例と、累積分布関数の一例とを示す模式図。
図5】第1実施形態に係るメモリシステムにおいて用いられるシフト量情報の構成を示す図。
図6】第1実施形態に係る複数のメモリセルトランジスタの閾値分布の別な一例と、累積分布関数の別な一例とを示す模式図。
図7】第1実施形態に係る複数のメモリセルトランジスタの閾値分布のさらに別な一例と、累積分布関数のさらに別な一例とを示す模式図。
図8】第1実施形態に係るメモリシステムにおけるパトロール処理の一例を示すフローチャート。
図9】第1実施形態に係るメモリシステムにおけるトラッキング処理の一例を示すフローチャート。
図10】第1実施形態に係るメモリシステムにおけるトラッキング処理の一例を示すフローチャート。
図11】第1実施形態に係るメモリシステムにおけるトラッキング処理で用いられるシフト量の初期値を説明するための図。
図12】第1実施形態に係るメモリシステムにおけるトラッキング処理で用いられるシフト量を説明するための図。
図13】第1実施形態に係るメモリシステムにおけるトラッキング処理で用いられる再設定されたシフト量の初期値を説明するための図。
図14】第1実施形態に係るメモリシステムにおけるトラッキング処理で用いられる再設定されたシフト量の初期値を説明するための図。
図15】第1実施形態に係るメモリシステムにおけるトラッキング処理で算出される好適なシフト量を説明するための図。
図16】第1実施形態に係るメモリシステムにおけるホストリード処理の一例を示すフローチャート。
図17】第2実施形態に係る情報処理システムの構成を示すブロック図。
図18】第2実施形態に係るメモリシステムにおいて用いられるルックアップテーブルの構成の一例を示す図。
図19】第2実施形態に係るメモリシステムにおけるトラッキング処理の一例を示すフローチャート。
図20】第2実施形態に係るメモリシステムにおけるトラッキング処理の一例を示すフローチャート。
図21】第2実施形態に係るメモリシステムにおけるトラッキング処理で算出される好適なシフト量を説明するための図。
図22】第2実施形態に係るメモリシステムにおけるトラッキング処理の具体例を説明するための図。
図23】変形例に係るメモリシステムにおけるシフト量推定処理に適用される第1推定方式の一例を示す図。
図24】変形例に係るメモリシステムにおけるシフト量推定処理に適用される第2推定方式の一例を示す図。
【発明を実施するための形態】
【0007】
以下、実施形態につき図面を参照して説明する。説明に際し、略同一の機能及び構成を有する構成要素については、同一符号を付す。また、以下に示す実施形態は、技術的思想を例示するものである。実施形態は、構成部品の材質、形状、構造、配置等を特定するものではない。実施形態は、種々の変更を加えることができる。
【0008】
<1>第1実施形態
<1-1>構成
<1-1-1>情報処理システム
第1実施形態に係る情報処理システムの構成について説明する。
【0009】
図1は、第1実施形態に係る情報処理システムの構成を示すブロック図である。図1に示すように、情報処理システム1は、ホスト機器2及びメモリシステム3を含む。
【0010】
ホスト機器2は、メモリシステム3を使用してデータを処理するデータ処理装置である。ホスト機器2は、例えば、パーソナルコンピュータ又はデータセンタ内のサーバである。
【0011】
メモリシステム3は、ホスト機器2に接続されるように構成された記憶装置である。メモリシステム3は、例えば、SDTMカードのようなメモリカード、UFS(Universal Flash Storage)デバイス、または、SSD(Solid State Drive)である。
【0012】
<1-1-2>メモリシステム
第1実施形態に係るメモリシステムの内部構成について説明する。
【0013】
メモリシステム3は、不揮発性メモリ10、揮発性メモリ20、及びメモリコントローラ30を含む。
【0014】
不揮発性メモリ10は、例えば、NANDフラッシュメモリである。不揮発性メモリ10は、複数のブロックBLK(BLK0~BLK3)を含む。各ブロックBLKは、各々が不揮発にデータを記憶する複数のメモリセルトランジスタ(以下、単にメモリセルとも称する)を含む。各ブロックBLKは、例えば、データの消去単位である。
【0015】
揮発性メモリ20は、例えば、DRAM(Dynamic Random Access Memory)である。揮発性メモリ20は、シフト量情報21を記憶する。シフト量情報21の詳細については、後述する。
【0016】
メモリコントローラ30は、例えばSoC(System-on-a-Chip)のような集積回路で構成される。メモリコントローラ30は、ホスト機器2からの要求に基づいて、または、ホスト機器2からの要求に依らず、不揮発性メモリ10を制御する。
【0017】
具体的には、例えば、メモリコントローラ30は、ホスト機器2からの読出し要求に基づいて、読出しデータを不揮発性メモリ10から読み出す。そして、メモリコントローラ30は、読出しデータに基づくデータをホスト機器2に送信する。また、例えば、メモリコントローラ30は、内部処理として、読出しデータを不揮発性メモリ10から読み出す。そして、メモリコントローラ30は、読出しデータに基づいて不揮発性メモリ10を制御する。
【0018】
<1-1-3>メモリコントローラ
次に、引き続き図1を参照して、メモリコントローラ30の内部構成について説明する。メモリコントローラ30は、制御回路31、バッファメモリ32、ホストインタフェース回路(ホストI/F)33、ECC(Error Correction and Check)回路34、不揮発性メモリインタフェース回路(NVM I/F)35、揮発性メモリインタフェース回路(VM I/F)36、及び演算回路37を含む。以下に説明されるメモリコントローラ30の各部31-37の機能は、専用ハードウェア、ファームウェアを実行するプロセッサ、又はこれらの組合せのいずれでも実現可能である。
【0019】
制御回路31は、メモリコントローラ30の全体を制御する回路である。制御回路31は、例えば、CPU(Central Processing Unit)のようなプロセッサ、及びROM(Read Only Memory)を含む。
【0020】
バッファメモリ32は、例えば、SRAM(Static Random Access Memory)である。バッファメモリ32は、ホスト機器2と不揮発性メモリ10との間でデータをバッファリングする。バッファメモリ32は、書込みデータ、及び読出しデータを一時的に記憶する。
【0021】
ホストインタフェース回路33は、メモリコントローラ30とホスト機器2との間の通信を司る。ホストインタフェース回路33は、ホストバスを介してホスト機器2と接続される。ホストバスは、例えば、SDTMインタフェース、M-PHY、SAS(Serial Attached SCSI (Small Computer System Interface))、SATA(Serial ATA (Advanced Technology Attachment))、又はPCIeTM(Peripheral Component Interconnect express)に準拠する。
【0022】
ECC回路34は、不揮発性メモリ10に記憶されるデータに関するエラー検出処理及びエラー訂正処理を行う。すなわちデータのライト処理時には、ECC回路34は、書込みデータに誤り訂正符号を付与する。データのリード処理時には、ECC回路34は、読出しデータを復号し、フェイルビットの有無を検出する。フェイルビットとは、複数のメモリセルから読み出されたデータ(ビット列)のうち、当該複数のメモリセルに書き込まれたデータと異なるビットである。そしてフェイルビットが検出された際には、ECC回路34は、フェイルビットのカラムアドレスを特定し、エラー訂正をする。エラー訂正の方法は、例えば、硬判定復号(Hard bit decoding)及び軟判定復号(Soft bit decoding)を含む。硬判定復号に用いられる硬判定復号符号としては、例えば、BCH(Bose‐Chaudhuri‐Hocquenghem)符号やRS(Reed‐Solomon)符号を用いることができる。軟判定復号に用いられる軟判定復号符号としては、例えば、LDPC(Low Density Parity Check)符号を用いることができる。
【0023】
不揮発性メモリインタフェース回路35は、不揮発性メモリ10とメモリコントローラ30との間の通信を司る。不揮発性メモリインタフェース回路35は、メモリバスBUSを介して不揮発性メモリ10と接続される。メモリバスBUSは、例えば、SDR(single data rate)インタフェース、トグルDDR(double data rate)インタフェース、又はONFI(Open NAND flash interface)に準拠する。
【0024】
揮発性メモリインタフェース回路36は、揮発性メモリ20とメモリコントローラ30との間の通信を司る。揮発性メモリ20とメモリコントローラ30との間を接続するバスは、例えば、DRAMインタフェース規格に準拠する。
【0025】
演算回路37は、例えばカウンタである。演算回路37は、バッファメモリ32に記憶された読出しデータから、同一値を記憶していたメモリセルの数をカウントする。
【0026】
<1-1-4>メモリバス
次に、不揮発性メモリ10とメモリコントローラ30との間でやり取りされる信号の一例を説明する。図2は、第1実施形態に係るメモリバスで用いられる信号の一例を示すブロック図である。
【0027】
メモリバスBUSで用いられる信号は、例えば、チップイネーブル信号CEn、コマンドラッチイネーブル信号CLE、アドレスラッチイネーブル信号ALE、ライトイネーブル信号WEn、リードイネーブル信号REn、ライトプロテクト信号WPn、レディ・ビジー信号RBn、及び入出力信号I/Oを含む。本明細書において、信号の名称の末尾のnは、その信号が“L(Low)”レベルの場合にアサートされることを意味する。
【0028】
チップイネーブル信号CEnは、不揮発性メモリ10をイネーブルにするための信号である。
【0029】
コマンドラッチイネーブル信号CLE及びアドレスラッチイネーブル信号ALEは、不揮発性メモリ10への入力信号I/Oがそれぞれコマンド及びアドレスであることを不揮発性メモリ10に通知する信号である。
【0030】
ライトイネーブル信号WEnは、入力信号I/Oを不揮発性メモリ10に取り込ませるための信号である。
【0031】
リードイネーブル信号REnは、不揮発性メモリ10から出力信号I/Oを読み出すための信号である。
【0032】
ライトプロテクト信号WPnは、データの書き込み及び消去の禁止を不揮発性メモリ10に指示するための信号である。
【0033】
レディ・ビジー信号RBnは、不揮発性メモリ10がレディ状態であるか、それともビジー状態であるかを示す信号である。レディ状態は、不揮発性メモリ10がメモリコントローラ30からの命令を受信出来る状態である。ビジー状態は、不揮発性メモリ10がメモリコントローラ30からの命令を受信出来ない状態である。レディ・ビジー信号RBnは、“L”レベルでビジー状態を示す。
【0034】
入出力信号I/Oは、例えば8ビットの信号である。入出力信号I/Oは、不揮発性メモリ10とメモリコントローラ30との間で送受信されるデータの実体である。入出力信号I/Oは、コマンド、アドレス、ステータス、書込みデータ、及び読出しデータを含む。
【0035】
<1-1-5>不揮発性メモリ
次に、不揮発性メモリ10の内部構成について説明する。図3は、第1実施形態に係る不揮発性メモリの構成の一例を示す回路図である。図3では、一例として、ブロックBLK0の構成が示される。他のブロックBLK1~BLK3の構成は、ブロックBLK0の構成と同等である。ブロックBLK0は、例えば、4つのストリングユニットSU0~SU3を含む。なお、図3において、ストリングユニットSU2及びSU3の構成は簡略化して示される。
【0036】
各ストリングユニットSUは、ビット線BL0~BLm(mは、1以上の整数)にそれぞれ関連付けられた複数のNANDストリングNSを含む。NANDストリングNSは、例えばメモリセルトランジスタMT0~MT7、並びに選択トランジスタST1及びST2を含む。
【0037】
メモリセルトランジスタMTは、制御ゲート及び電荷蓄積層を含み、データを不揮発に記憶する。選択トランジスタST1及びST2のそれぞれは、各種処理時にストリングユニットSUの選択に使用される。
【0038】
各NANDストリングNSにおいて、メモリセルトランジスタMT0~MT7は、直列接続される。直列接続されたメモリセルトランジスタMT0~MT7の一端と、関連付けられたビット線BLとの間には、選択トランジスタST1が接続される。直列接続されたメモリセルトランジスタMT0~MT7の他端には、選択トランジスタST2のドレインが接続される。選択トランジスタST2のソースには、ソース線SLが接続される。
【0039】
同一のブロックBLKにおいて、ストリングユニットSU0~SU3に含まれた複数の選択トランジスタST1の各々のゲートは、選択ゲート線SGD0~SGD3にそれぞれ共通接続される。複数のメモリセルトランジスタMT0~MT7の各々の制御ゲートは、ワード線WL0~WL7にそれぞれ共通接続される。複数の選択トランジスタST2の各々のゲートは、選択ゲート線SGSに共通接続される。
【0040】
ビット線BL0~BLmは、複数のブロックBLK0~BLK3で共有される。同じカラムアドレスに対応するNANDストリングNSには、同じビット線BLが接続される。ワード線WL0~WL7のそれぞれは、ブロックBLK0~BLK3の各々に設けられる。ソース線SLは、例えば、複数のブロックBLK0~BLK3で共有される。
【0041】
1つのストリングユニットSU内で共通のワード線WLに接続された複数のメモリセルトランジスタMTの集合は、例えばセルユニットCUと称され、データの書込み単位として使用される。例えば、それぞれが1ビットデータを記憶するメモリセルトランジスタMTを含むセルユニットCUの記憶容量が、ページとして定義される。ページは、例えば、データの読出し単位として使用される。また、1ページ分のサイズを有するデータが、ページデータとして定義される。つまり、1ページデータは、セルユニットCU内のメモリセルトランジスタMTの数に等しいビット数を有するデータである。セルユニットCUは、メモリセルトランジスタMTが記憶するビット数に応じて2ページ以上の記憶容量を有し得る。
【0042】
なお、以上で説明したブロックBLKの回路構成はあくまで一例であり、これに限定されない。例えば、不揮発性メモリ10に含まれるブロックBLKの個数は、任意の個数に設計され得る。各ブロックBLKが含むストリングユニットSUの個数は、任意の個数に設計され得る。各NANDストリングNSが含むメモリセルトランジスタMT並びに選択トランジスタST1及びST2の各々の個数は、それぞれ任意の個数に設計され得る。
【0043】
本実施形態では、1つのメモリセルトランジスタMTが3ビットデータを記憶することができる。すなわち、本実施形態におけるメモリセルトランジスタMTは、3ビットのデータを記憶するTLC(Triple Level Cell)である。TLCとして構成されたメモリセルトランジスタMTが記憶する3ビットデータを、下位ビットから順に下位(Lower)ビット、中位(Middle)ビット、及び上位(Upper)ビットと呼ぶ。また、同一のセルユニットCUに含まれるメモリセルトランジスタMTの記憶する下位ビットの集合を“下位ページデータ”と呼び、中位ビットの集合を“中位ページデータ”と呼び、上位ビットの集合を“上位ページデータ”と呼ぶ。
【0044】
図4は、第1実施形態に係る複数のメモリセルトランジスタMTの閾値電圧分布の一例と、累積分布関数の一例とを示す模式図である。図4の上部に閾値電圧分布が示され、図4の下部に累積分布関数が示される。メモリセルトランジスタMTが3ビットのデータを記憶する場合、その閾値電圧の分布は8個に分けられる。この8個の閾値電圧分布を、閾値電圧が低いものから順に“S0”状態、“S1”状態、“S2”状態、“S3”状態、“S4”状態、“S5”状態、“S6”状態、及び“S7”状態と呼ぶ。
【0045】
また、図4に示す電圧R1、R2、R3、R4、R5、R6、及びR7はそれぞれ、リード処理の際に隣り合う2つの状態を区別するために用いられる。電圧VREADは、リード処理時において非選択ワード線に印加される電圧である。メモリセルトランジスタMTは、ゲートに電圧VREADが印加されると記憶するデータに依らずにオン状態になる。これらの電圧値の関係は、R1<R2<R3<R4<R5<R6<R7<VREADである。
【0046】
上述した閾値電圧分布のうち“S0”状態は、メモリセルトランジスタMTの消去状態に相当する。“S0”状態における閾値電圧は、電圧R1未満である。“S1”状態における閾値電圧は、電圧R1以上且つ電圧R2未満である。“S2”状態における閾値電圧は、電圧R2以上且つ電圧R3未満である。“S3”状態における閾値電圧は、電圧R3以上且つ電圧R4未満である。“S4”状態における閾値電圧は、電圧R4以上且つ電圧R5未満である。“S5”状態における閾値電圧は、電圧R5以上且つ電圧R6未満である。“S6”状態における閾値電圧は、電圧R6以上且つ電圧R7未満である。“S7”状態における閾値電圧は、電圧R7以上且つ電圧VREAD未満である。
【0047】
上述した8個の閾値電圧分布は、下位ビット、中位ビット、及び上位ビットを含む3ビットデータを各メモリセルトランジスタMTに書き込むことで形成される。そして8個の閾値電圧分布が、それぞれ異なる3ビットのデータに対応する。本実施形態では、各状態に含まれるメモリセルトランジスタMTに対して、“上位ビット/中位ビット/下位ビット”に、以下に示すようにデータが割り付けられる。
【0048】
すなわち、“S0”状態に含まれるメモリセルトランジスタMTは、“111”データを記憶する。“S1”状態に含まれるメモリセルトランジスタMTは、“110”データを記憶する。“S2”状態に含まれるメモリセルトランジスタMTは、“100”データを記憶する。“S3”状態に含まれるメモリセルトランジスタMTは、“000”データを記憶する。“S4”状態に含まれるメモリセルトランジスタMTは、“010”データを記憶する。“S5”状態に含まれるメモリセルトランジスタMTは、“011”データを記憶する。“S6”状態に含まれるメモリセルトランジスタMTは、“001”データを記憶する。“S7”状態に含まれるメモリセルトランジスタMTは、“101”データを記憶する。
【0049】
下位ページ読出しは、“S0”状態と“S1”状態とを区別する電圧R1、及び“S4”状態と“S5”状態とを区別する電圧R5を読出し電圧として用いるリード処理である。
【0050】
中位ページ読出しは、S1”状態と“S2”状態とを区別する電圧R2、“S3”状態と“S4”状態とを区別する電圧R4、及び“S5”状態と“S6”状態とを区別する電圧R6を読出し電圧として用いるリード処理である。
【0051】
上位ページ読出しは、“S2”状態と“S3”状態とを区別する電圧R3、及び“S6”状態と“S7”状態とを区別する電圧R7を読出し電圧として用いるリード処理である。
【0052】
なお、セルユニットCUに記憶されるデータは、“S0”状態から“S7”状態までの各状態が均等に存在するようにランダマイズされている。
【0053】
また、図4の下部に示す累積分布関数は、ある大きさの読出し電圧でデータを読み出した際に、どれだけのメモリセルトランジスタMTがオン状態となるかを表している。横軸は読出し電圧の大きさ、縦軸はオン状態のメモリセルトランジスタMTの総数(以下、オンセル数とも称する)を表している。各状態にあるメモリセルトランジスタMTの個数の期待値をE個とする。この場合、各状態を区別するための電圧分、読出し電圧が上昇するごとに、オンセル数がE個ずつ増加することが期待される。
【0054】
具体的には、読出し電圧が電圧R1の場合、オンセル数の期待値はE個である。読出し電圧を電圧R2まで上昇させた場合、オンセル数の期待値は2×E個となる。読出し電圧を電圧R3まで上昇させた場合、オンセル数の期待値は3×E個となる。読出し電圧を電圧R4まで上昇させた場合、オンセル数の期待値は4×E個となる。読出し電圧を電圧R5まで上昇させた場合、オンセル数の期待値は5×E個となる。読出し電圧を電圧R6まで上昇させた場合、オンセル数の期待値は6×E個となる。読出し電圧を電圧R7まで上昇させた場合、オンセル数の期待値は7×E個となる。読出し電圧を電圧VREADまで上昇させた場合、オンセル数の期待値は8×E個となる。
【0055】
<1-1-6>シフト量情報
次に、シフト量情報21の構成について説明する。図5は、第1実施形態に係るメモリシステムにおいて用いられるシフト量情報の構成を示す図である。図5に示すように、シフト量情報21には、読出し電圧R1~R7それぞれのデフォルト値からのシフト量(ΔR1_i~ΔR7_i)が、ブロックBLKiに関連付けられて記憶される。
【0056】
シフト量情報21は、読出し電圧に関わる動作において使用される。例えば、リード処理において、メモリコントローラ30はシフト量情報21に基づいて読出し電圧を設定する。例えば、パトロール処理において、メモリコントローラ30はシフト量情報21に基づいて、シフト量探索の始点を決定する。なお、パトロール処理の詳細については後述する。
【0057】
<1-2>動作
次に、第1実施形態に係るメモリシステムにおける動作について説明する。
【0058】
<1-2-1>シフトリード処理及びトラッキング処理
まず、第1実施形態に係るメモリシステム3において実行されるシフトリード処理及びトラッキング処理について説明する。シフトリード処理及びトラッキング処理は、例えば、既定の(default)読出し電圧ではエラーが多くなることが想定される場合に実行される。
【0059】
図6及び図7は、第1実施形態に係る複数のメモリセルトランジスタの閾値分布の一例と、累積分布関数の一例とを示す模式図である。図6は、書込み直後の状態を示している。図7は、隣接する閾値電圧分布同士が重なった状態を示している。
【0060】
図6(A)に示すように、例えば、書込み直後において、“S(n-1)”状態(nは1以上7以下の整数)と“Sn”状態それぞれの閾値電圧分布は互いに乖離している。従って、メモリコントローラ30は、“S(n-1)”状態及び“Sn”状態それぞれの閾値電圧分布の間の既定の読出し電圧Rndefに読出し電圧を設定することで、正しいデータを読出すことができる。
【0061】
書込み直後におけるオンセル数と読出し電圧との関係を、図6(B)に示す。各状態にあるメモリセルトランジスタMTの個数の期待値をE個とした場合、電圧Rndefは、オンセル数がn×Eになる最適な読出し電圧に近い電圧である。
【0062】
しかしながら、ディスターブやリテンション等の要因により、メモリセルトランジスタMTの閾値電圧は変動し得る。これにより、各状態の閾値電圧の分布幅が広がること、各状態の閾値電圧分布の最頻値が変化すること、または、各状態の閾値電圧分布がシフトすることがある。このような閾値分布の状態変化の結果、図7(A)に示すように、隣接する分布同士が重なる場合がある。隣接する分布同士が重なる場合、図7(A)中の太い斜線部と細い斜線部とに対応するメモリセルトランジスタMTからは、書込み時と異なるデータが読出されてしまう。より具体的には、“S(n-1)”状態の閾値電圧分布のメモリセルトランジスタMTのうち、読出し電圧Rndef以上の閾値電圧を有するメモリセルトランジスタMTの読出しデータはフェイルビットとなる。また、“Sn”状態の閾値電圧分布のメモリセルトランジスタMTのうち、読出し電圧Rndef未満の閾値電圧を有するメモリセルトランジスタMTの読出しデータはフェイルビットとなる。そして、フェイルビット数がECC回路34のエラー訂正可能ビット数を超えていれば、データを正しく訂正することができない。
【0063】
読出し電圧を適切にシフトさせることができれば、フェイルビット数を少なくすることができる。シフト量を決定する手法の一例として、オンセル数を用いる手法が挙げられる。隣接する分布同士が重なった場合の、オンセル数と読出し電圧との関係を、図7(B)に示す。オンセル数がn×Eとなる読出し電圧Rnoptを用いることで、フェイルビット数を少なくすることができる。具体的には、図7(A)において、読出し電圧Rnoptを用いることで、読出し電圧Rndefを用いる場合と比べて、細い斜線部に対応するメモリセルトランジスタMTの数だけ、フェイルビットを少なくすることができる。
【0064】
このように、既定の読出し電圧からある電圧だけシフトさせた電圧を読出し電圧に設定して行う読出し動作を、シフトリードと呼ぶ。前述のシフト量情報21は、シフトリードで用いられるシフト量の集合である。
【0065】
また、シフトリードで用いられるシフト量を探索する動作を、トラッキングと呼ぶ。
【0066】
トラッキングは、メモリコントローラ30が不揮発性メモリ10を制御して行うシステムトラッキングと、不揮発性メモリ10自身が行うオンチップトラッキングとに分類することができる。
【0067】
システムトラッキングにおいて、メモリコントローラ30は、不揮発性メモリ10にリードコマンドを送信し、不揮発性メモリ10にリード動作を実行させる。そして、メモリコントローラ30は、不揮発性メモリ10から読出しデータを受信し、読出しデータに基づいてシフト量を探索する。
【0068】
システムトラッキングでは、メモリコントローラ30がシフト量の探索を行う。これにより、複雑で高度なトラッキング処理を行うことが可能である。
【0069】
対して、オンチップトラッキングにおいて、メモリコントローラ30は、不揮発性メモリ10にオンチップトラッキングコマンドとシフト量とを送信する。オンチップトラッキングコマンドとシフト量とを受信した不揮発性メモリ10は、リード動作を実行し、読出しデータに基づいて、例えば受信したシフト量を起点として、より適したシフト量を探索する。シフト量を探索し終えると、不揮発性メモリ10は、シフト量情報をメモリコントローラ30に送信する。
【0070】
オンチップトラッキングは、コマンドの受信と結果の送信を除いて、不揮発性メモリ10単体で実施される。これにより、短時間でトラッキング処理を行うことが可能である。
【0071】
<1-2-2>パトロール動作
第1実施形態に係るメモリシステム3は、例えばホストからの命令を実行していない期間に、パトロール処理を実行する。パトロール処理は、トラッキング処理とシフトリード処理とを含む。パトロール処理の詳細について説明する。
【0072】
図8は、第1実施形態に係るメモリシステムにおけるパトロール処理の一例を示すフローチャートである。
【0073】
パトロール処理が開始されると(開始)、メモリコントローラ30は、シフト量情報21を取得する(S10)。具体的には、メモリコントローラ30は、揮発性メモリ20からシフト量情報21を読み出す。
【0074】
メモリコントローラ30は、トラッキング処理を実行する(S11)。具体的には、メモリコントローラ30は、取得したシフト量情報21に基づいて、トラッキング処理を実行する。トラッキング処理は、不揮発性メモリ10からデータを読み出し、新たなシフト量を探索する処理である。トラッキング処理の詳細は後述する。トラッキング処理の結果、メモリコントローラ30は、新たに算出されたシフト量情報を得る。
【0075】
メモリコントローラ30は、不揮発性メモリ10にリード処理を実行させる(S12)。具体的には、メモリコントローラ30は、トラッキング処理で得られたシフト量情報を用いて、不揮発性メモリ10にリード処理を実行させる。リード処理を実行させた結果、メモリコントローラ30は、読み出されたデータを得る。
【0076】
メモリコントローラ30のECC回路34は、リード処理によって得られたデータを硬判定復号する(S13)。
【0077】
メモリコントローラ30は、復号に成功したか判定する(S14)。
【0078】
復号に成功した場合(S14,Yes)、メモリコントローラ30は、シフト量情報21を更新する(S15)。具体的には、メモリコントローラ30は、既存のシフト量情報21を、ステップS11の処理で得られたシフト量情報で上書きするように、揮発性メモリ20を制御してシフト量情報21を更新する。そして、パトロール処理は終了となる(終了)。
【0079】
復号に成功しなかった場合(S14,No)、パトロール処理は終了となる(終了)。
【0080】
続いて、トラッキング処理の詳細について説明する。トラッキング処理は、読出し電圧R1~R7それぞれについて、好適なシフト量を探索する処理である。説明を簡易にするため、読出し電圧Rnについてシフト量を探索する場合を例に説明する。なお、nは1以上7以下の整数である。
【0081】
図9及び図10は、第1実施形態に係るメモリシステムにおけるトラッキング処理の一例を示すフローチャートである。
【0082】
トラッキング処理が開始されると(開始)、メモリコントローラ30は、シフト量の初期値を算出する(S20)。具体的には、以下の(1)式を用いてシフト量の初期値shiftintを算出する。
【0083】
shiftint=shifthold-((SP-1)×ST÷2) (1)
なお、shiftholdはシフト量情報21から読み出したシフト量、SPはサンプリング回数、STはサーチステップである。サンプリング回数SPは2以上の整数であり、サーチステップSTは0でない電圧である。
【0084】
式(1)について説明する。図11は、式(1)を説明するための図である。第1実施形態に係るメモリシステム3では、シフト量shiftholdを中心に(SP-1)×STの電圧範囲で好適なシフト量が探索される。そのため、シフト量の初期値shiftintは、シフト量shiftholdよりも((SP-1)×ST÷2)だけ低い電圧に設定される。
【0085】
図9に戻る。メモリコントローラ30は、変数“i”を1にリセットする(S21)。
【0086】
メモリコントローラ30は、シフト量として“shift(i)”を用いたリード処理を、不揮発性メモリ10に実行させる(S22)。具体的には、“shift(i)”は、以下の(2)式に示される。
【0087】
shift(i)=shiftint+(i-1)×ST (2)
リード処理は、例えば、あるブロックBLKのあるセルユニットCUに対して実行される。リード処理を不揮発性メモリ10に実行させた結果、メモリコントローラ30は、読み出されたデータを得る。
【0088】
式(2)について説明する。図12は、式(2)を説明するための図である。第1実施形態に係るメモリシステム3では、shift(1)はshiftintと等しい。また、iが2以上のとき、shift(i)はiが1増える毎にSTずつ大きな電圧に設定される。また、shift(1)とshift(SP)との差は、探索範囲と等しい(SP-1)×STである。
【0089】
図9に戻る。メモリコントローラ30の演算回路37は、オンセル数“chist(i)”を算出する(S23)。具体的には、メモリコントローラ30の演算回路37は、シフト量として“shift(i)”を用いたリード処理におけるオンセル数をカウントし、“chist(i)”として算出する。さらに、メモリコントローラ30は、算出したオンセル数“chist(i)”を揮発性メモリ20に記憶させる。
【0090】
メモリコントローラ30は、変数“i”をインクリメントする(S24)。
【0091】
メモリコントローラ30は、変数“i”がサンプリング回数SPよりも大きいか判定する(S25)。変数“i”がサンプリング回数SPよりも大きくない場合(S25,No)、ステップS22の処理が実行される。すなわち、変数“i”がサンプリング回数SP以下である間、インクリメントされた変数“i”に対応する“shift(i)”を用いたリード処理が実行される。
【0092】
変数“i”がサンプリング回数SPよりも大きい場合(S25,Yes)、メモリコントローラ30は、変数“i”を1にリセットする(S26)。
【0093】
メモリコントローラ30は、オンセル数“chist(i)”が期待値“chistexp”よりも小さいかを判定する(S27)。期待値“chistexp”は、各状態にあるメモリセルトランジスタMTの個数の期待値をE個、シフト量の探索対象となっている読出し電圧がRnの場合、E×nである。
【0094】
オンセル数“chist(i)”が期待値“chistexp”よりも小さい場合(S27,Yes)、メモリコントローラ30は、変数“i”をインクリメントする(S28)。
【0095】
メモリコントローラ30は、変数“i”がサンプリング回数SPよりも大きいか判定する(S29)。変数“i”がサンプリング回数SPよりも大きくない場合(S29,No)、ステップS27の処理が実行される。
【0096】
すなわち、変数“i”がサンプリング回数SP以下である間、インクリメントされた変数“i”に対応するオンセル数“chist(i)”と期待値“chistexp”とが比較される。これにより、期待値“chistexp”よりも大きいオンセル数“chist(i)”に対応する最小の変数“i”が得られる。
【0097】
変数“i”がサンプリング回数SPよりも大きい場合(S29,Yes)、シフト量の初期値が再設定され(S30)、ステップS21の処理が実行される。具体的には、shiftintに(SP-1)×STが加算され、ステップS21の処理が実行される。
【0098】
すなわち、以前の探索範囲において、期待値“chistexp”よりも大きいオンセル数“chist(i)”が得られなかったため、より高い電圧で探索できるよう、シフト量の初期値が再設定される(S30)。図13は、ステップS30で再設定されるシフト量の初期値を説明するための図ある。図13に示すように、以前のshiftintに(SP-1)×STが加算される。これにより、以前の探索の終点が、新たな探索の始点となるように、シフト量の初期値が再設定される。
【0099】
図10に戻る。ステップS27の処理において、オンセル数“chist(i)”が期待値“chistexp”よりも小さくない場合(S27,No)、メモリコントローラ30は、変数“i”が1であるかを判定する(S31)。なぜなら、変数“i”が1である場合、探索の始点でオンセル数“chist(1)”が期待値“chistexp”よりも大きくなっている。すなわち、この場合は探索の範囲が高すぎたことを示している。
【0100】
変数“i”が1である場合(S31,Yes)、シフト量の初期値が再設定され(S32)、ステップS21の処理が実行される。具体的には、shiftintから(SP-1)×STが減算され、ステップS21の処理が実行される。
【0101】
すなわち、以前の探索範囲において、期待値“chistexp”よりも小さいオンセル数“chist(i)”が得られなかったため、より低い電圧で探索できるよう、シフト量の初期値が再設定される(S32)。図14は、ステップS32で再設定されるシフト量の初期値を説明するための図である。図14に示すように、以前のshiftintから(SP-1)×STが減算される。これにより、以前の探索の始点が、新たな探索の終点となるように、シフト量の初期値を再設定される。
【0102】
図10に戻る。ステップS27の判定がNoとなり、ステップS31の判定がNoとなった場合、探索範囲の始点以外の電圧でオンセル数“chist(i)”が期待値“chistexp”を上回ったことがわかる。すなわち、期待値“chistexp”を挟む2つのオンセル数“chist(i)”にそれぞれ対応する変数“i”の値が2つ(すなわち、現在の“i”の値と“i-1”の値)得られる。これにより、メモリコントローラ30は、好適なシフト量を算出することができる。
【0103】
変数“i”が1でない場合(S31,No)、メモリコントローラ30は、好適なシフト量を算出する(S33)。具体的には、以下の式(3)より好適なシフト量を算出する。
【0104】
shiftopt=shift(i-1)+ST×(chistexp-chist(i-1))÷(chist(i)-chist(i-1)) (3)
なお、算出に当たり、メモリコントローラ30は、オンセル数“chist(i-1)”を揮発性メモリ20から読み出す。
【0105】
式(3)について説明する。図15は、式(3)を説明するための図である。オンセル数“chist(i-1)”及び“chist(i)”と、期待値“chistexp”は既知であるから、メモリコントローラ30は、“chist(i-1)”から“chist(i)”の間のオンセル数と、“chist(i-1)”から“chistexp”の間のオンセル数を求めることができる。メモリコントローラ30は、これらを用いて、オンセル数の分布の内分比[(chistexp-chist(i-1))÷(chist(i)-chist(i-1))]を求めることができる。この内分比をサーチステップSTに乗算し、乗算結果をシフト量“shift(i-1)”に加算することで、メモリコントローラ30は、好適なシフト量“shiftopt”を算出することができる。
【0106】
図10に戻る。好適なシフト量が算出されると(S33)、一連の処理は終了する(終了)。なお、図8を参照して説明したように、メモリコントローラ30は、トラッキング処理で算出されたシフト量を用いて、リード処理(S12)及び硬判定処理(S13)を実行する。そして、復号に成功した場合(S14,Yes)、このシフト量により、既存のシフト量情報21が上書きされる。
【0107】
<1-2-3>ホストリード動作
ホストリード処理の詳細について説明する。ホストリード処理は、ホスト機器からの読出し要求に基づいて実行されるリード処理である。
【0108】
図16は、第1実施形態に係るメモリシステムにおけるホストリード処理の一例を示すフローチャートである。
【0109】
ホスト機器2からの読出し要求を受信すると(開始)、メモリコントローラ30は、シフト量情報21を取得する(S40)。具体的には、メモリコントローラ30は、揮発性メモリ20からシフト量情報21を読み出す。
【0110】
メモリコントローラ30は、不揮発性メモリ10にリード処理を実行させる(S41)。具体的には、メモリコントローラ30は、シフト量情報21に記憶されていたシフト量を用いて、不揮発性メモリ10にリード処理を実行させる。リード処理を実行させた結果、メモリコントローラ30は、読出しデータを得る。
【0111】
メモリコントローラ30のECC回路34は、リード処理によって得られたデータを硬判定復号する(S42)。
【0112】
メモリコントローラ30は、復号に成功したか判定する(S43)。復号に成功した場合(S43,Yes)、メモリコントローラ30は復号した読出しデータをホスト機器2に送信し、ホストリード処理を終了する(終了)。
【0113】
復号に成功しなかった場合(S43,No)、メモリコントローラ30は、不揮発性メモリ10にオンチップトラッキング処理を実行させる(S44)。具体的には、メモリコントローラ30は、ステップS40の処理で取得したシフト量情報21と、オンチップトラッキングコマンドとを不揮発性メモリ10に送信して、不揮発性メモリ10にオンチップトラッキングを実行させる。オンチップトラッキング処理により得られたシフト量情報が、不揮発性メモリ10からメモリコントローラ30に送信される。
【0114】
メモリコントローラ30は、不揮発性メモリ10にリード処理を実行させる(S45)。具体的には、メモリコントローラ30は、受信したシフト量情報を用いて、不揮発性メモリ10にリード処理を実行させる。リード処理を実行させた結果、メモリコントローラ30は、読出しデータを得る。
【0115】
メモリコントローラ30のECC回路34は、リード処理によって得られたデータを硬判定復号する(S46)。
【0116】
メモリコントローラ30は、復号に成功したか判定する(S47)。復号に成功しなかった場合(S47,No)、メモリコントローラ30は、不揮発性メモリ10にリード処理を実行させる(S48)。具体的には、メモリコントローラ30は、不揮発性メモリ10に軟判定復号のためのリード処理を実行させる。リード処理を実行させた結果、メモリコントローラ30は、読出しデータを得る。
【0117】
メモリコントローラ30のECC回路34は、リード処理によって得られたデータを軟判定復号する(S49)。
【0118】
メモリコントローラ30は、復号に成功したか判定する(S50)。復号に成功しなかった場合(S50,No)、メモリコントローラ30は、ホスト機器2にエラーを報告する(S51)。具体的には、メモリコントローラ30は、ホスト機器2に、アンコレクタブルエラーを報告する。そして、ホストリード処理は終了となる(終了)。
【0119】
ステップS47またはステップS50の処理において、復号に成功した場合(S47またはS50,Yes)、メモリコントローラ30は、シフト量情報21を更新する(S52またはS53)。具体的には、メモリコントローラ30は、既存のシフト量情報21を、ステップS44の処理で得られたシフト量情報で上書きするように、揮発性メモリ20を制御してシフト量情報21を更新する。そして、復号した読出しデータをホスト機器2に送信し、ホストリード処理は終了となる(終了)。
【0120】
<1-3>効果
以上で説明した第1実施形態に係るメモリシステムによれば、動作速度を向上することができる。
【0121】
第1実施形態に係るメモリシステムは、ホスト機器からの要求に依らずに、トラッキング処理を実行し、得られたシフト量情報を用いてリード処理を実行し、エラー訂正に成功した場合にシフト量情報21を更新する。すなわち、第1実施形態に係るメモリシステムは、不揮発性メモリ10の現在の状態を反映するように、シフト量情報21を更新することができる。そして、第1実施形態に係るメモリシステムは、ホストリード処理において、読み出したデータのエラー訂正に失敗した際に、シフト量情報21に基づいたオンチップトラッキング処理を実行する。これにより、第1実施形態に係るメモリシステムは、より適したシフト量情報を高速に探索することができる。従って、第1実施形態に係るメモリシステムは、動作速度を向上することができる。
【0122】
<2>第2実施形態
第2実施形態に係るメモリシステムの構成は、第1実施形態に係るメモリシステムに対して、揮発性メモリ20の構成と、トラッキング処理とが異なる。以下に、第2実施形態に係るメモリシステムについて、第1実施形態と異なる点を説明する。
【0123】
<2-1>構成
<2-1-1>メモリシステム
図17は、第2実施形態に係る情報処理システムの構成を示すブロック図である。第2実施形態に係るメモリシステム3は、第1実施形態で説明したメモリシステム3に対して、揮発性メモリ20がルックアップテーブル(LUT)22をさらに記憶する。
【0124】
図18は、第2実施形態に係るメモリシステムにおいて用いられるルックアップテーブルの構成の一例を示す図である。図18に示すように、LUT22には、オンセル数の差分ΔC1、ΔC2、ΔC3、…、と、読出し電圧の変化量ΔVR1、ΔVR2、ΔVR3、…、とが記憶される。LUT22は、トラッキング処理において使用される。LUT22は、オンセル数の差分と、読出し電圧の変化量とを関連付けている。この関連付けは、例えば、メモリシステム3の出荷前に、実験的に求められる。メモリコントローラ30は、例えば、オンセル数をある数だけ増加させたい場合、LUT22を参照することで、その数に対応した読出し電圧の変化量を知ることができる。なお、LUT22は、読出し電圧R1~R7毎に、オンセル数の差分と読出し電圧の変化量とを関連付けてもよい。LUT22は、さらに、ブロック毎に、オンセル数の差分と読出し電圧の変化量とを関連付けてもよい。
【0125】
<2-2>動作
第2実施形態に係るメモリシステムにおける動作について説明する。
【0126】
トラッキング処理の詳細について説明する。説明を簡易にするため、読出し電圧Rnについてシフト量を探索する場合を例に説明する。なお、nは1以上7以下の整数である。
【0127】
図19及び図20は、第2実施形態に係るメモリシステムにおけるトラッキング処理の一例を示すフローチャートである。
【0128】
トラッキング処理が開始されると(開始)、メモリコントローラ30は、シフト量情報21からシフト量“shift”を決定する(S60)。具体的には、メモリコントローラ30は、シフト量情報21から、シフト量の探索を行うメモリセルトランジスタMTが含まれるブロックBLKと、シフト量の探索を行う読出し電圧とに対応したシフト量情報を、シフト量“shift”として決定する。
【0129】
メモリコントローラ30は、シフト量として“shift”を用いたリード処理を、不揮発性メモリ10に実行させる(S61)。リード処理は、例えば、あるブロックBLKのあるセルユニットCUに対して実行される。不揮発性メモリ10にリード処理を実行させた結果、メモリコントローラ30は、読み出されたデータを得る。
【0130】
メモリコントローラ30の演算回路37は、オンセル数“chist(shift)”を算出する(S62)。具体的には、メモリコントローラ30の演算回路37は、シフト量として“shift”を用いたリード処理におけるオンセル数をカウントし、“chist(shift)”として算出する。
【0131】
メモリコントローラ30は、オンセル数“chist(shift)”が期待値“chistexp”よりも小さいか判定する(S63)。オンセル数“chist(shift)”が期待値“chistexp”よりも小さい場合(S63,Yes)、メモリコントローラ30は、変数“sign”に1を代入する(S64)。
【0132】
オンセル数“chist(shift)”が期待値“chistexp”よりも小さくない場合(S63,No)、メモリコントローラ30は、変数“sign”に-1を代入する(S65)。
【0133】
このように、オンセル数“chist(shift)”と期待値“chistexp”との大小関係に基づいて、変数“sign”に1又は-1が代入される。
【0134】
メモリコントローラ30は、LUT22から差分シフト量“val”を決定する(S66)。具体的には、メモリコントローラ30は、LUT22を参照して、オンセル数“chist(shift)”と期待値“chistexp”との差分から、差分シフト量“val”を決定する。
【0135】
メモリコントローラ30は、シフト量“shift”、オンセル数“chist(shift)”、変数“sign”の値をそれぞれ保存する(S67)。より具体的には、メモリコントローラ30は、シフト量“shiftpre”にシフト量“shift”を代入し、オンセル数“chistpre”にオンセル数“chist(shift)”を代入し、変数“signpre”に変数“sign”を代入する(S67)。
【0136】
メモリコントローラ30は、シフト量“shift”に、変数“sign”と差分シフト量“val”とを乗算した値を加算する(S68)。
【0137】
変数“sign”には、オンセル数“chist(shift)”と期待値“chistexp”との大小関係に基づいて、1又は-1が代入されている。このため、ステップS68の処理は、シフト量“shift”に差分シフト量“val”を加算又は減算する処理である。具体的には、オンセル数“chist(shift)”が期待値“chistexp”よりも小さい場合、ステップS68の処理は加算となる。すなわち、オンセル数“chist(shift)”が大きくなるように、シフト量“shift”が差分シフト量“val”だけ大きい値に設定される。一方、オンセル数“chist(shift)”が期待値“chistexp”よりも小さくない場合、ステップS68の処理は減算となる。すなわち、オンセル数“chist(shift)”が小さくなるように、シフト量“shift”が差分シフト量“val”だけ小さい値に設定される。
【0138】
メモリコントローラ30は、シフト量として“shift”を用いたリード処理を、不揮発性メモリ10に実行させる(S69)。リード処理を不揮発性メモリ10に実行させた結果、メモリコントローラ30は、読み出されたデータを得る。
【0139】
メモリコントローラ30の演算回路37は、オンセル数“chist(shift)”を算出する(S70)。
【0140】
メモリコントローラ30は、オンセル数“chist(shift)”が期待値“chistexp”よりも小さいかを再度判定する(S71)。オンセル数“chist(shift)”が期待値“chistexp”よりも小さい場合(S71,Yes)、メモリコントローラ30は、変数“sign”に1を代入する(S72)。
【0141】
オンセル数“chist(shift)”が期待値“chistexp”よりも小さくない場合(S71,No)、メモリコントローラ30は、変数“sign”に-1を代入する(S73)。
【0142】
メモリコントローラ30は、ステップS67で保存された変数“signpre”と、ステップS72またはステップS73で値が代入された変数“sign”とを乗算した値が0よりも小さいか判定する(S74)。変数“signpre”と変数“sign”とを乗算した値が0よりも小さい場合(S74,Yes)、ステップS75の処理が実行される。変数“signpre”と変数“sign”とを乗算した値が0よりも小さくない場合(S74,No)、ステップS67の処理が実行される。
【0143】
メモリコントローラ30は、ステップS74において、オンセル数“chist(shift)”と期待値“chistexp”との大小関係と、オンセル数“chistpre”と期待値“chistexp”との大小関係と、が異なっているかを判定する。
【0144】
具体的には、大小関係が異なる場合は変数“signpre”と変数“sign”の乗算結果は-1となる。この場合は、オンセル数“chistpre”と“chist(shift)”との間に期待値“chistexp”があることを示す。すなわち、期待値“chistexp”を挟む2つのオンセル数にそれぞれ対応する2つのシフト量(すなわち、現在の“shift”と“shiftpre”)得られる。この場合は、ステップS74の判定はYesになり、ステップS75の処理が実行される。
【0145】
一方、大小関係が等しい場合は、変数“signpre”と変数“sign”の乗算結果は1となる。この場合は、オンセル数“chistpre”及び“chist(shift)”よりも期待値“chistexp”が大きい、または、オンセル数“chistpre”及び“chist(shift)”よりも期待値“chistexp”が小さいことを示す。この場合は、ステップS74の判定はNoになり、ステップS67の処理が再度実行される。そして、続くステップS68において差分シフト量“val”の加算又は減算が行われる。
【0146】
メモリコントローラ30は、差分シフト量“val”が閾値TH以下かを判定する(S75)。差分シフト量“val”が閾値TH以下ではない場合(S75,No)、メモリコントローラ30は、差分シフト量“val”を2で除算して(S76)、ステップS67の処理が再度実行される。
【0147】
メモリコントローラ30は、ステップS75において、シフト量“shiftpre”と“shift”との間隔である差分シフト量“val”が、閾値TH以下かを判定する。後述するシフト量の算出において、差分シフト量“val”が大きい場合には誤差が生じうるため、メモリコントローラ30は、十分小さい差分シフト量“val”が得られたかを確認する。すなわち、差分シフト量“val”が閾値TH以下の場合にはステップS77に進む。そうでない場合にはステップS76の処理が実行され、2で除算された追加シフト量“val”を用いて、ステップS67以降の処理が再度実行される。
【0148】
追加シフト量“val”が閾値TH以下である場合(S75,Yes)、メモリコントローラ30は、好適なシフト量を算出する(S77)。具体的には、メモリコントローラ30は、以下の式(4)より好適なシフト量を算出する。
【0149】
shiftopt=shiftpre+(shift-shiftpre)×(chistexp-chistpre)÷(chist(shift)-chistpre) (4)
そして、一連の処理は終了する(終了)。
【0150】
式(4)について説明する。図21は、式(4)を説明するための図である。オンセル数“chistpre”及び“chist(shift)”と、期待値“chistexp”は既知であるから、メモリコントローラ30は、“chist(shift)”から“chistpre”の間のオンセル数と、“chist(shift)”から“chistexp”の間のオンセル数を求めることができる。メモリコントローラ30は、これらを用いて、オンセル数の分布の内分比[(chistexp-chistpre)÷(chist(shift)-chistpre)]を求めることができる。この内分比を、シフト量“shift”と“shiftpre”との差分に乗算し、乗算結果をシフト量“shiftpre”に加算することで、メモリコントローラ30は、好適なシフト量“shiftopt”を算出することができる。
【0151】
第2実施形態に係るメモリシステムにおけるトラッキング処理について、具体例を挙げて動作を更に説明する。図22は、第2実施形態に係るメモリシステムにおけるトラッキング処理の具体例を説明するための図である。図22では、図19を参照して説明したステップS68の処理を矢印で示している。また、各読出し電圧における変数“sign”の値を括弧で付記している。また、破線で示した電圧よりも読出し電圧が高くなると、オンセル数“chist(shift)”が期待値“chistexp”を上回ることを想定する。また、閾値THは、S/3であることを想定する。
【0152】
図22に示す例では、シフト量情報21からシフト量“shift”を用いて読出し電圧VAが決定される(図19のS60)。読出し電圧VAにおいて、オンセル数“chist(shift)”は期待値“chistexp”未満であるから、変数“sign”は1である。そして、差分シフト量“val”として電圧Sが決定される(図19のS66)。
【0153】
電圧VAに電圧Sが加えられ、新たなシフト量に基づく読出し電圧は、電圧VBとなる(図19のS68)。読出し電圧VBにおいても、オンセル数“chist(shift)”は期待値“chistexp”未満であるから、変数“sign”は1である。変数“signpre”(すなわち、読出し電圧VAに対応する変数“sign”)と“sign”とは共に1であるから(図20のS74,No)、新たなシフト量に基づく読出し電圧が再度決定される。
【0154】
電圧VBに電圧Sが加えられ、新たなシフト量に基づく読出し電圧は、電圧VCとなる(図19のS68)。読出し電圧VCにおいても、オンセル数“chist(shift)”は期待値“chistexp”未満であるから、変数“sign”は1である。変数“signpre”(すなわち、読出し電圧VBに対応する変数“sign”)と“sign”とは共に1であるから(図20のS74,No)、新たなシフト量に基づく読出し電圧が再度決定される。
【0155】
電圧VCに電圧Sが加えられ、新たなシフト量に基づく読出し電圧は、電圧VDとなる(図19のS68)。読出し電圧VDにおいて、オンセル数“chist(shift)”は期待値“chistexp”よりも大きいため、変数“sign”は-1である。変数“signpre”(すなわち、読出し電圧VCに対応する変数“sign”)は1であり、“sign”は-1であるから(図20のS74、Yes)、差分シフト量の大きさが判定される(図20のS75)。差分シフト量である電圧Sは閾値THよりも大きいため(図20のS75、No)、差分シフト量が2で除算される(図20のS76)。そして、差分シフト量はS/2となり、新たなシフト量に基づく読出し電圧が再度決定される。
【0156】
電圧VDから電圧S/2が引かれ、新たなシフト量に基づく読出し電圧は、電圧VEとなる(図19のS68)。読出し電圧VEにおいて、オンセル数“chist(shift)”は期待値“chistexp”よりも大きいため、変数“sign”は-1である。変数“signpre”(すなわち、読出し電圧VDに対応する変数“sign”)と“sign”は共に-1であるから(図20のS74,No)、新たなシフト量に基づく読出し電圧が再度決定される。
【0157】
電圧VEから電圧S/2が引かれ、新たなシフト量に基づく読出し電圧は、電圧VFとなる(図19のS68)。読出し電圧VFにおいて、オンセル数“chist(shift)”は期待値“chistexp”未満であるから、変数“sign”は1である。変数“signpre”(すなわち、読出し電圧VEに対応する変数“sign”)は-1であり、“sign”は1であるから(図20のS74、Yes)、差分シフト量の大きさが再度判定される(図20のS75)。差分シフト量である電圧S/2は閾値THよりも大きいため(図20のS75、No)、差分シフト量が2で除算される(図20のS76)。そして、差分シフト量はS/4となり、新たなシフト量に基づく読出し電圧が再度決定される。
【0158】
電圧VFに電圧S/4が加えられ、新たなシフト量に基づく読出し電圧は、電圧VGとなる(図19のS68)。読出し電圧VGにおいて、オンセル数“chist(shift)”は期待値“chistexp”未満であるから、変数“sign”は1である。変数“signpre”(すなわち、読出し電圧VFに対応する変数“sign”)と“sign”とは共に1であるから(図20のS74,No)、新たなシフト量に基づく読出し電圧が再度決定される。
【0159】
電圧VGに電圧S/4が加えられ、新たなシフト量に基づく読出し電圧は、電圧VHとなる(図19のS68)。読出し電圧VHにおいて、オンセル数“chist(shift)”は期待値“chistexp”よりも大きいため、変数“sign”は-1である。変数“signpre”(すなわち、読出し電圧VGに対応する変数“sign”)は1であり、“sign”は-1であるから(図20のS74、Yes)、差分シフト量の大きさが再度判定される(図20のS75)。差分シフト量である電圧S/4は閾値THよりも小さいため(図20のS75、Yes)、好適なシフト量が算出される(図20のS77)。すなわち、読出し電圧VGと読出し電圧VHとを用いて、好適なシフト量“shiftopt”が算出される。
【0160】
このように、第2実施形態に係るメモリシステムは、追加シフト量“val”を小さくしながらシフト量を増加もしくは減少させることで、好適なシフト量“shiftopt”を算出する。
【0161】
<2-3>効果
以上で説明した第2実施形態に係るメモリシステムによれば、動作速度を向上することができる。
【0162】
第2実施形態に係るメモリシステムは、トラッキング処理において、シフト量情報21に基づいて起点の読出し電圧を決定し、起点からシフト量を小さくしながら複数のデータを読み出し、好適なシフト量を算出する。第2実施形態に係るメモリシステムは、大きいシフト量から小さいシフト量へ探索のステップを狭めていくことで、高速に好適なシフト量を探索することができる。これにより、第2実施形態に係るメモリシステムは、動作速度を向上することができる。
【0163】
<3>変形例等
第1実施形態に係るメモリシステムは、探索範囲が不適切だった場合、シフト量の初期値を再設定して(図10のS30及びS32)、新たな探索範囲で好適なシフト量を探索する(図9のS21以降)。しかしながら、メモリシステムは、探索範囲が不適切だった場合、シフト量を算出して処理を終了するように変更してもよい。具体的には、メモリシステムは、図10を参照して説明したステップS30以降の処理に替えて、シフト量“shift(SP)”を“shiftopt”として算出し、処理を終了してもよい。また、メモリシステムは、図10を参照して説明したステップS32以降の処理に替えて、シフト量“shift(1)”を“shiftopt”として算出し、処理を終了してもよい。
【0164】
上記実施形態では、除算が実行される。メモリシステムは、除算の結果について桁の切り捨て又は切り上げを行ってもよい。
【0165】
上記実施形態では、トラッキング処理(図8のS11)について、2つの例を示した。しかしながら、トラッキング処理は上記実施形態に示した例に限定されず、種々の変形が可能である。一例として、以下に、第1推定方式について説明する。
【0166】
(第1推定方式)
第1推定方式において、メモリコントローラ30は、読出し電圧をシフトさせながら複数の読出し処理を不揮発性メモリ10に実行させる。そして、演算回路37は、当該複数の読出し処理による複数の読出しデータに基づき、複数の読出し電圧で区切られる閾値電圧範囲毎のメモリセルトランジスタMTの数(区間セル数)をヒストグラムH1として算出する。
【0167】
制御回路31は、算出されたヒストグラムH1に基づいて、複数の読出し電圧R1~R7を決定する。そして、制御回路31は、決定された複数の読出し電圧R1~R7に基づいて、複数のシフト量ΔR1~ΔR7を算出する。ヒストグラムH1に基づく複数の読出し電圧R1~R7の決定方式について、図23を用いて説明する。
【0168】
図23は、変形例に係るメモリシステムにおけるシフト量推定処理に適用される第1推定方式の一例を示す図である。
【0169】
図23(A)では、一例として、“S0”状態及び“S1”状態に対応する2つの閾値電圧分布が示される。図23(B)では、オンセル数Mの推移が示される。図23(C)では、2つの読出し電圧間におけるオンセル数の変化量、すなわち区間セル数Cの推移が示される。図23(C)は、上述したヒストグラムH1に対応する。
【0170】
図23(B)に示すように、読出し電圧Vを低電圧側にシフトさせていくと、“S1”状態の最頻値である電圧VS1midよりわずかに高い電圧でオンセル数Mが急激に減少し、|dM/dV|が極大となる。ここで、最頻値とは、図23(A)において閾値電圧の分布確率が極大となる電圧である。更に読出し電圧Vを低くしていくと、オンセル数Mの減少率は小さくなり、或る値の読出し電圧Vにおいてオンセル数Mの減少率が極小となる。オンセル数Mの減少率の極小値は、“S1”状態に属する閾値電圧分布と、“S0”状態に属する閾値電圧分布とが重ならない場合にはゼロとなる。他方で、“S1”状態に属する閾値電圧分布と、“S0”状態に属する閾値電圧分布とが重なる場合には、オンセル数Mの減少率の極小値はゼロではない値(>0)となる。そして更に読出し電圧Vを低くしていくと、再びオンセル数Mの減少率が大きくなり、“S0”状態の最頻値である電圧VS0midよりわずかに高い電圧で再び|dM/dV|が極大となる。
【0171】
上述のオンセル数Mの変化によって、2つの状態間の閾値電圧分布の重なりが最も小さくなる読出し電圧V(すなわち、2つの状態の閾値電圧分布の交点に対応する読出し電圧V)を検出することができる。例えば、変形例に係るメモリシステムは、まず、読出し電圧V0を用いて読出し処理を行う。この時のオンセル数をM0とする。メモリシステムは、次に、電圧V0よりΔVだけ低い電圧V1を用いて読出し処理を行う。この時のオンセル数をM1とする。すると、読出し電圧がV0からV1に低下した際に新たにオフ状態となるメモリセルトランジスタMTの数は、C1=M0-M1である。すなわち、閾値電圧範囲[V0,V1]における区間セル数がC1個である。
【0172】
引き続き、メモリシステムは、電圧V1よりΔVだけ低い電圧V2を用いて読出し処理を行う。この時のオンセル数をM2とする。すると、読出し電圧がV1からV2に低下した際に新たにオフ状態となるメモリセルトランジスタMTの数は、C2=M1-M2である。すなわち、閾値電圧範囲[V1,V2]における区間セル数がC2個である。そして、C1>C2であったとすれば、|dM/dV|が最小となる電圧は、少なくとも電圧V1より低電圧側に位置すると考えられる。
【0173】
引き続き、メモリシステムは、電圧V2よりΔVだけ低い電圧V3を用いて読出し処理を行う。この時のオンセル数をM3とする。すると、読出し電圧がV2からV3に低下した際に新たにオフ状態となるメモリセルトランジスタMTの数は、C3=M2-M3である。すなわち、閾値電圧範囲[V2,V3]における区間セル数がC3個である。ここで、C3>C2であったとすれば、ヒストグラムH1として図23(C)のようなヒストグラムが得られる。
【0174】
以上の結果、区間セル数Cによって、図23(C)における一点鎖線で示されるような閾値電圧分布を推定することができる。そして、“S0”状態に属する閾値電圧分布と“S1”状態に属する閾値電圧分布との重なりが最も小さくなる読出し電圧が電圧V1と電圧V2との間(区間セル数が極小値の区間)に存在することが推定できる。
【0175】
以上のように動作することにより、第1推定方式では、複数の読出し処理に基づいて、読出し電圧が決定される。
【0176】
なお、各メモリセルトランジスタMTが記憶するデータが、連続しない複数の電圧範囲に対応づけられる場合、或るページデータの読出し処理(ページ読出し処理)が、複数の読出し電圧を用いたデータの読出し処理を含む場合がある。具体的には、例えば、図4を参照して説明したように、下位ビットのデータ“1”は、読出し電圧R1以下の電圧範囲(すなわち、“S0”状態)、及び、読出し電圧R5以上の電圧範囲(すなわち、“S5”~“S7”状態)に対応づけられる。このため、読出し電圧をシフトさせながら実行した下位ページ読出し処理による複数の読出しデータ(すなわち、電圧R1を読出し電圧として得られた読出しデータと、電圧R5を読出し電圧として得られた読出しデータ)だけでは、オンセル数を正しく算出することが困難な場合がある。
【0177】
そこで、ページ読出し処理が複数の読出し電圧を用いた読出し処理を含む場合、メモリコントローラ30は、当該複数の読出し処理の他に、少なくとも1回のシングルステート読出し処理を不揮発性メモリ10に更に実行させる。シングルステート読出し処理は、1つの読出し電圧に基づいて読出しデータを生成する点において、2つ以上の読出し電圧に基づいて読出しデータを生成するページ読出し処理と異なる。シングルステート読出し処理には、各メモリセルトランジスタMTが記憶するデータに対応づけられる連続しない複数の電圧範囲の間に位置する電圧が適用される。具体的には、例えば、下位ページ読出し処理に対しては、読出し電圧R3のシングルステート読出し処理が実行され得る。中位ページ読出し処理に対しては、読出し電圧R3のシングルステート読出し処理、及び読出しR5のシングルステート読出し処理が実行され得る。上位ページ読出し処理に対しては、読出し電圧R5のシングルステート読出し処理が実行され得る。
【0178】
例えば、下位ページ読出し処理用の読出し電圧R3を用いたシングルステート読出しにおいて、“S0”~“S2”状態に含まれるメモリセルトランジスタMTが下位ビットとして“1”データを記憶し、“S3”~“S7”状態に含まれるメモリセルトランジスタMTが下位ビットとして“0”データを記憶する、とする。この場合、読出し電圧R3を用いた読み出しで得られたページデータと、読出し電圧R1を用いた読み出しで得られたページデータと、の論理積演算によって得られるデータ中の“1”データの個数は、セルユニットCU中の“S1“状態に含まれるメモリセルトランジスタMTの数を示す。同様に、読出し電圧R3を用いた読み出しで得られたページデータの論理反転と、読出し電圧R5を用いた読み出しで得られたページデータと、の論理和演算によって得られるデータ中の“1”データの個数は、セルユニットCU中の“S0”~“S4”状態に含まれるメモリセルトランジスタMTの数を示す。これにより、メモリコントローラ30は、オンセル数を正しく算出することができる。
【0179】
上記実施形態では、パトロール処理においてトラッキング処理を実行し、好適なシフト量を推定する場合を例に説明した。パトロール処理において、トラッキング処理以外の方法で好適なシフト量を推定してもよい。トラッキング処理以外の方法の一例として、以下に第2推定方式について説明する。メモリシステムは、パトロール処理において、トラッキング処理に替えて、または、トラッキング処理に加えて、第2推定方式に基づく処理を実行してもよい。
【0180】
(第2推定方式)
第2推定方式において、演算回路37は、誤り訂正処理前の下位ページデータ、中位ページデータ、及び上位ページデータに基づいて、誤り訂正処理前の読出しデータにおける“S0”状態~“S7”状態の各々に属するメモリセルトランジスタMTの数をヒストグラムH2として算出する。また、演算回路37は、誤り訂正処理後の下位ページデータ、中位ページデータ、及び上位ページデータに基づいて、誤り訂正処理後の読出しデータにおける“S0”状態~“S7”状態の各々に属するメモリセルトランジスタMTの数をヒストグラムH3として算出する。そして、演算回路37は、算出されたヒストグラムH2及びヒストグラムH3に基づき、メモリセル数E_x(x+1)及びE_y(y-1)を算出する(0≦x≦6、1≦y≦7)。メモリセル数E_x(x+1)は、“S(x+1)”状態として書き込まれたデータが、“Sx”状態として誤って読み出されたメモリセル数である。メモリセル数E_y(y-1)は、“S(y-1)”状態として書き込まれたデータが、“Sy”状態として誤って読み出されたメモリセル数である。
【0181】
制御回路31は、上述したメモリセル数E_x(x+1)及びE_y(y-1)に基づいて、複数のシフト量ΔR1~ΔR7を算出する。メモリセル数E_x(x+1)及びE_y(y-1)に基づく複数のシフト量ΔR1~ΔR7の算出方式について、図24を用いて説明する。
【0182】
図24は、変形例に係るメモリシステムにおけるシフト量推定処理に適用される第2推定方式の一例を示す図である。図24では、読出し電圧R1のシフト量ΔR1を算出する場合が例示される。図24において、“S1”状態として書き込まれたデータが“S0”状態として誤って読み出されたメモリセル数E_01は、図24(A)~図24(C)における領域(a)の面積に相当する。また、“S0”状態として書き込まれたデータが“S1”状態として誤って読み出されたメモリセル数E_10は、図24(A)~図24(C)における領域(b)の面積に相当する。
【0183】
図24(A)では、“S0”状態及び“S1”状態に対応する2つの閾値電圧分布の交差する位置における閾値電圧R1optと、読出し電圧R1と、が等しい場合が示される。図24(A)に示す例の場合、領域(a)の面積と、領域(b)の面積とは、等しくなる。この場合、“S0”状態と“S1”状態との間で発生するフェイルビット数E(=E_01+E_10)は最小となることが期待される。このため、メモリコントローラ30は、読出し電圧R1が更新不要であると判定する。つまり、メモリコントローラ30は、“0”のシフト量ΔR1を算出する(ΔR1=0)。
【0184】
図24(B)では、閾値電圧R1optよりも読出し電圧R1が高電圧側に位置する場合が示される。図24(B)に示す例の場合、領域(a)の面積は、領域(b)の面積よりも大きくなる。この場合、フェイルビット数Eは、図24(A)の場合のフェイルビット数Eよりも大きくなり、好ましくない。このため、メモリコントローラ30は、読出し電圧R1を閾値電圧R1optに近づけるように、低電圧側にシフトさせる。つまり、メモリコントローラ30は、負のシフト量ΔR1を算出する(ΔR1<0)。
【0185】
図24(C)では、閾値電圧R1optよりも読出し電圧R1が低電圧側に位置する場合が示される。図24(C)に示す例の場合、領域(a)の面積は、領域(b)の面積よりも小さくなる。この場合、フェイルビット数Eは、図24(A)の場合のフェイルビット数Eよりも大きくなり、好ましくない。このため、メモリコントローラ30は、読出し電圧R1を閾値電圧R1optに近づけるように、高電圧側にシフトさせる。つまり、メモリコントローラ30は、正のシフト量ΔR1を算出する(ΔR1>0)。
【0186】
なお、領域(a)の面積及び領域(b)の面積の差の絶対値は、読出し電圧R1が閾値電圧R1optから離れるほど大きくなることが期待される。このため、メモリコントローラ30は、読出し電圧R1のシフト量ΔR1を、領域(a)の面積及び領域(b)の面積の比の大きさ(すなわち、メモリセル数E_10とメモリセル数E_01の比の大きさ)に応じて決定する。これにより、閾値電圧分布の重複の度合いに応じて適切なシフト量を決定することができ、閾値電圧R1optに近づくようにシフト量ΔR1を算出することができる。
【0187】
なお、図示は省略されるが、他の読出し電圧R2~R7についても、読出し電圧R1の場合と同様にシフト量ΔR2~ΔR7が算出される。
【0188】
以上のように動作することにより、第2推定方式では、誤り訂正処理前の下位ページデータ、中位ページデータ、及び上位ページデータと、誤り訂正処理後の下位ページデータ、中位ページデータ、及び上位ページデータとに基づいて、複数のシフト量ΔR1~ΔR7が算出される。
【0189】
なお、推定前のシフト量ΔR1preと、推定後のシフト量ΔR1postとの関係は、以下のようになる。すなわち、図24(A)のように、領域(a)の面積と領域(b)の面積とが等しい場合、シフト量ΔR1preの更新は不要である。このため、ΔR1post=ΔR1preとなる。図24(B)のように、領域(a)の面積が領域(b)の面積よりも大きい場合、シフト量ΔR1postは、シフト量ΔR1preよりも低い値に更新される。図24(C)のように、領域(a)の面積が領域(b)の面積よりも小さい場合、シフト量ΔR1postは、シフト量ΔR1preよりも高い値に更新される。
【0190】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことが出来る。これら実施形態やその変形は、発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0191】
1…情報処理システム、2…ホスト機器、3…メモリシステム、10…不揮発性メモリ、20…揮発性メモリ、21…シフト量情報、22…ルックアップテーブル、30…メモリコントローラ、31…制御回路、32…バッファメモリ、33…ホストインタフェース回路、34…ECC回路、35…不揮発性メモリインタフェース回路、36…揮発性メモリインタフェース回路、37…演算回路、MT…メモリセルトランジスタ。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24