JP2019168897A - メモリシステム - Google Patents
メモリシステム Download PDFInfo
- Publication number
- JP2019168897A JP2019168897A JP2018055737A JP2018055737A JP2019168897A JP 2019168897 A JP2019168897 A JP 2019168897A JP 2018055737 A JP2018055737 A JP 2018055737A JP 2018055737 A JP2018055737 A JP 2018055737A JP 2019168897 A JP2019168897 A JP 2019168897A
- Authority
- JP
- Japan
- Prior art keywords
- data
- parity
- reed
- parity data
- memory
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/52—Protection of memory contents; Detection of errors in memory contents
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1012—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1068—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/29—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
- H03M13/2906—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes using block codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/29—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
- H03M13/2906—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes using block codes
- H03M13/2909—Product codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/29—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
- H03M13/2948—Iterative decoding
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C2029/0411—Online error correction
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/151—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
- H03M13/1515—Reed-Solomon codes
Abstract
【課題】冗長データ用に確保されるページ数を削減しつつページ間方向の誤り訂正を可能にする。【解決手段】実施形態に係るメモリシステムは、同一のブロックに書き込まれる複数のデータフレームをフレーム間方向に符号化して第1パリティデータを生成し、前記第1パリティデータをフレーム間方向に符号化して第2パリティデータを生成し、前記第1又は第2パリティデータの少なくとも一部と前記複数のデータフレームそれぞれとを連接して複数の第1フレームデータを生成し、前記複数の第1フレームデータそれぞれをフレーム内方向に符号化して複数の第3パリティデータを生成し、前記複数の第1フレームデータそれぞれと前記複数の第3パリティデータそれぞれとを連接した複数の第2フレームデータを前記不揮発性メモリにおける同一ブロック内の前記複数のページに1つずつ書き込む。【選択図】図4
Description
以下の実施形態は、一般的に、メモリシステムに関する。
不揮発半導体メモリは、それぞれ情報を電荷量に置き換えて保持する多数のメモリセルをチップ内に備えている。チップ内の多数のメモリセルは、ブロックと呼ばれる複数のグループに区画されており、各ブロックは、複数のメモリセルで構成されたページと呼ばれるグループにさらに区画されている。なお、ブロックとは、例えばチップ内のデータを消去する際の最小単位であり、ページとは、例えばチップに対してデータの書込み又は読出しを行なう際の最小単位である。
情報を電荷量に置き換えて保持するメモリセルでは、電荷量の大小に対応させて情報が記録される。そのため、書込み時に所望の電荷量に設定できない場合や、時間経過に伴い電荷が放電されてしまった場合には、メモリセルから読み出した情報に誤りが発生する。このような電荷量の変動による誤りはソフトエラーと呼ばれる。ソフトエラー対策としては、記録する情報データに対して誤り訂正符号化を行い、この誤り訂正符号化によって生成された冗長データを情報データと共にチップ内に記録しておく方法が存在する。このような誤り訂正符号化は、一般的には、ページ単位ないしページデータを分割したサブページ単位で実施される。
本発明の一つの実施形態は、冗長データ用に確保されるページ数を削減しつつページ間方向の誤り訂正を可能にするメモリシステムを提供することを目的とする。
実施形態によれば、メモリシステムは、それぞれ複数のページで構成された複数のブロックを備える不揮発性メモリと、前記不揮発性メモリに対する書込み及び読出しを実行するメモリインタフェースと、前記複数のブロックのうちの同一のブロックに書き込まれる複数のデータフレームをフレーム間方向に符号化して第1パリティデータを生成する第1符号化器と、前記第1パリティデータを複数のパリティフレームに分割し、前記複数のパリティフレームをフレーム間方向に符号化して第2パリティデータを生成する第2符号化器と、前記第1パリティデータの少なくとも一部又は前記第2パリティデータの少なくとも一部と前記複数のデータフレームそれぞれとを連接して複数の第1フレームデータを生成し、前記複数の第1フレームデータそれぞれをフレーム内方向に符号化して複数の第3パリティデータを生成する第3符号化器とを備え、前記メモリインタフェースは、前記複数の第1フレームデータそれぞれと前記複数の第3パリティデータそれぞれとを連接した複数の第2フレームデータを前記不揮発性メモリにおける同一ブロック内の前記複数のページに1つずつ書き込む。
以下に添付図面を参照して、実施形態に係るメモリシステムを詳細に説明する。なお、以下の実施形態により本発明が限定されるものではない。
不揮発半導体メモリ(以下、単に不揮発性メモリという)では、デバイスの製造ばらつきにより、各ページのソフトエラー率が大きく変動する。そのため、ソフトエラー率の高いページを目的として誤り訂正符号を構成した場合、強力な誤り訂正能力が必要となり、冗長データ量が増大する。また、不揮発性メモリでは、読出し回路や入出力バッファ等の故障により、ページやブロックといったメモリセルよりも大きな単位の誤りが発生する場合もある。このような大きな単位の誤りが生じた場合、ページ単位での誤り訂正符号では訂正することができない。
そこで、ページ単位で誤り訂正を行なうことを目的とした誤り訂正符号(以下、ページ内符号という)に加え、ページを跨ぐ方向(以下、ページ間方向という)に誤り訂正を行なうことを目的とした誤り訂正符号(以下、ページ間符号という)を用いてユーザデータを保護する方法が考えられる。ただし、ページ間方向に誤り訂正符号化を行う場合、ページ間方向の冗長データを格納するためのページやブロックが別途必要となる場合がある。
また、近年の不揮発半導体メモリには、3次元の構造を採用することで、単位面積あたりの記憶容量を大幅に向上させた、いわゆる3次元構造フラッシュメモリが存在する。3次元構造フラッシュメモリでは、消去単位であるブロック当たりの記憶容量が増大する一方、メモリチップ上のブロック数が減少する傾向にある。そのため、3次元構造フラッシュメモリでは、冗長データ専用のページやブロックを確保することが困難な場合が存在する。
そこで以下の実施形態では、冗長データ用に確保されるページ数を削減しつつページ間方向の誤り訂正を可能にするメモリシステムについて、幾つか例を挙げて説明する。
(第1の実施形態)
図1は、第1の実施形態に係るメモリシステムの概略構成例を示すブロック図である。図1に示すように、メモリシステム1は、メモリコントローラ10と不揮発性メモリ20とを備える。メモリシステム1は、ホスト30と接続可能であり、図1ではホスト30と接続された状態が示されている。ホスト30は、例えば、パーソナルコンピュータ、携帯端末などの電子機器であってよい。
図1は、第1の実施形態に係るメモリシステムの概略構成例を示すブロック図である。図1に示すように、メモリシステム1は、メモリコントローラ10と不揮発性メモリ20とを備える。メモリシステム1は、ホスト30と接続可能であり、図1ではホスト30と接続された状態が示されている。ホスト30は、例えば、パーソナルコンピュータ、携帯端末などの電子機器であってよい。
不揮発性メモリ20は、データを不揮発に記憶する不揮発性メモリであり、例えば、NAND型フラッシュメモリ(以下、単にNANDメモリという)である。以下の説明では、不揮発性メモリ20としてNANDメモリが用いられた場合を例示するが、不揮発性メモリ20として3次元構造フラッシュメモリ、ReRAM(Resistance Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)等の種々の記憶装置を用いることも可能である。また、不揮発性メモリ20が半導体メモリであることは必須ではなく、半導体メモリ以外の種々の記憶媒体に対しても本実施形態を適用することが可能である。
メモリシステム1は、メモリコントローラ10と不揮発性メモリ20とが1つのパッケージとして構成されるメモリカード等であってもよいし、SSD(Solid State Drive)等であってもよい。
メモリコントローラ10は、例えばSoC(System-On-a-Chip)として構成される半導体集積回路である。以下で説明するメモリコントローラ10の各構成要素の動作の一部又は全部は、CPU(Central Processing Unit)がファームウエアを実行することによって実現されてもよいし、ハードウエアで実現されてもよい。
メモリコントローラ10は、ホスト30からの書込み要求に従って不揮発性メモリ20への書込みを制御する。また、ホスト30からの読出し要求に従って不揮発性メモリ20からの読み出しを制御する。メモリコントローラ10は、ホストI/F(ホストインタフェース)15、メモリI/F(メモリインタフェース)13、制御部11、符号化/復号部(コーデック)14およびデータバッファ12を備える。ホストI/F15、メモリI/F13、制御部11、符号化/復号部14およびデータバッファ12は、内部バス16で相互に接続されている。
ホストI/F15は、ホスト30との間のインタフェース規格に従った処理を実施し、ホスト30から受信した要求、書込み対象のユーザデータなどを内部バス16に出力する。また、ホストI/F15は、不揮発性メモリ20から読み出されて復元されたユーザデータ、制御部11からの応答などをホスト30へ送信する。
メモリI/F13は、制御部11の指示に基づいて、不揮発性メモリ20への書込み処理を行う。また、メモリI/F13は、制御部11の指示に基づいて、不揮発性メモリ20からの読出し処理を行う。
制御部11は、メモリシステム1の各構成要素を統括的に制御する。制御部11は、ホスト30からホストI/F15経由で命令を受けた場合に、その命令に従った制御を行う。例えば、制御部11は、ホスト30からの命令に従って、不揮発性メモリ20への書込みをメモリI/F13へ指示する。また、制御部11は、ホスト30からの命令に従って、不揮発性メモリ20からの読出しをメモリI/F13へ指示する。
また、制御部11は、ホスト30から書込み要求を受信した場合、データバッファ12に蓄積されるユーザデータに対して、不揮発性メモリ20上の格納領域(メモリ領域)を決定する。すなわち、制御部11は、ユーザデータの書込み先を管理する。ホスト30から受信したユーザデータの論理アドレスと該ユーザデータが格納された不揮発性メモリ20上の格納領域を示す物理アドレスとの対応はアドレス変換テーブルとして格納される。
また、制御部11は、ホスト30から読出し要求を受信した場合、読出し要求により指定された論理アドレスを上述のアドレス変換テーブルを用いて物理アドレスに変換し、該物理アドレスからの読み出しをメモリI/F13へ指示する。
NANDメモリでは、一般に、ページと呼ばれるデータ単位で、書込みおよび読出しが行われ、ブロックと呼ばれるデータ単位で消去が行われる。本実施形態では、同一のワード線に接続される複数のメモリセルをメモリセルグループと呼ぶ。メモリセルがSLC(Single Level Cell)である場合は、1つのメモリセルグループが1ページに対応する。メモリセルがMLC(Multiple Level Cell)である場合は、1つのメモリセルグループが複数ページに対応する。なお、本説明におけるMLCには、TLC(Triple Level Cell)やQLC(Quad Level Cell)等も含まれるものとする。また、各メモリセルはワード線に接続するとともにビット線にも接続される。したがって、各メモリセルは、ワード線を識別するアドレスとビット線を識別するアドレスとで識別することが可能である。
データバッファ12は、メモリコントローラ10がホスト30から受信したユーザデータを不揮発性メモリ20へ記憶するまでに一時格納する。また、データバッファ12は、不揮発性メモリ20から読み出して復元されたユーザデータをホスト30へ送信するまでに一時格納する。データバッファ12には、例えば、SRAM(Static Random Access Memory)やDRAM(Dynamic Random Access Memory)などの汎用メモリを用いることができる。
ホスト30から送信されるユーザデータは、内部バス16に転送されてデータバッファ12に一旦格納される。符号化/復号部14は、不揮発性メモリ20に格納されるユーザデータを符号化して符号語を生成する。また、符号化/復号部24は、不揮発性メモリ20から読み出された受信語を復号してユーザデータを復元する。そこで符号化/復号部14は、符号化器17と復号器18を備える。なお、符号化/復号部14により符号化されるデータには、ユーザデータ以外にも、メモリコントローラ10内部で用いられる制御データ等が含まれてもよい。また、本実施形態では、符号化/復号部14がメモリI/F13とは独立した部として構成されているが、このような構成に限られず、符号化/復号部14がメモリI/F13内に組み込まれた構成であってもよい。
符号化器17は、制御部11からの指示に基づいて、データバッファ12上のユーザデータを符号化して符号語を生成する。復号器18は、制御部11からの指示に基づいて、不揮発性メモリ20の指定されたアドレスから読み出された受信語を復号する。
本実施形態において、符号化器17が生成する符号語は、例えば積符号に代表されるような多次元の誤り訂正符号である。多次元の誤り訂正符号とは、例えば、誤り訂正符号の構成単位である各シンボルが、複数の成分符号によって多重に保護された構造を有する符号である。各シンボルは、例えば1ビット(二元体(Binary Field)の元(Element))、又は、二元体以外の有限体(Finite Field)などのアルファベットの元で構成されたものであってよい。そこで以下の説明では、簡略化のため、各シンボルが次元の異なる2つの成分符号で保護された2次元の誤り訂正符号を例示する。その際、ページ間方向に対応する次元の成分符号(以下、ページ間符号という)には、例として、リードソロモン(Reed-Solomon:RS)符号を用いることとする。一方、ページ内方向(インライン方向ともいう)に対応する次元の成分符号(以下、ページ内符号という)には、例えば、BCH(Bose-Chaudhuri-Hocquenghem)符号やLDPC(Low-Density Parity-Check)符号等を用いることができる。
次に、本実施形態に係る誤り訂正符号を、従来に係る誤り訂正符号との比較とともに、図面を用いて詳細に説明する。図2は、従来に係るリードソロモン符号をページ間符号として用いた誤り訂正符号の概略構成例を示す模式図である。なお、図2に示す例では、1つのブロックBLKがK個のページP1〜PKで構成されている。
図2に例示される誤り訂正符号では、ブロックBLKを構成するK個のページのうちの(K−L)個のページP1〜P(K−L)に(K−L)個のユーザデータフレームB1〜B(K−L)よりなるユーザデータYDが格納されている。また、ページP(K−L+1)〜PKには、ページ間方向にユーザデータフレームB1〜B(K−L)をリードソロモン符号化することで生成されたL個のリードソロモンパリティフレームR1〜RLよりなるリードソロモンパリティデータRSが格納されている。したがって、図2に示す誤り訂正符号では、ページ間方向において、ユーザデータYDにおけるエラーシンボルの位置(ページ)が分かっている場合にはL個のエラーシンボルを、エラーシンボルの位置(ページ)が分かっていない場合には(L/2)個(ただし、割り切れない場合には少数点以下は切り捨て)のエラーシンボルを、誤り訂正することが可能である。さらに、各ページP1〜PKには、ページ内符号として、それぞれのページに格納されているユーザデータフレームB1〜B(K−L)又はリードソロモンパリティフレームR1〜RLをBCH符号やLDPC符号等で誤り訂正符号化することで生成されたパリティ(以下、インラインECCパリティという)IEPが格納されている。
このように、従来では、ページ間方向に誤り訂正を行なうことを目的としたリードソロモン符号(リードソロモンパリティデータRS)を用いてユーザデータYDを保護する場合、ユーザデータフレームB1〜B(K−L)を格納するためのページP1〜P(K−L)の他に、リードソロモンパリティフレームR1〜RLを格納するための専用のページP(K−L+1)〜PKを確保しておく必要がある。もしくは、ページ間符号の格納先を別ブロックとする場合には、ユーザデータYDを格納するブロックとは別にページ間符号を格納するための専用のブロックを確保しておく必要がある。なお、本説明において、「専用」とは、「ユーザデータを格納しない冗長データ用」であることを意味する。
一方、図3は、本実施形態に係る誤り訂正符号の概略構成例を示す模式図である。なお、図3に示す例でも、図2に示す例と同様に、ページ間方向において、ユーザデータYDにおけるエラーシンボルの位置(ページ)が分かっている場合にはL個のエラーシンボルを、エラーシンボルの位置(ページ)が分かっていない場合には(L/2)個(ただし、割り切れない場合には少数点以下は切り捨て)個のエラーシンボルを、誤り訂正することが可能である。
図3に示す例では、図2に示した例と同様に、1つのブロックBLKがK個のページP1〜PKで構成されている。ただし、図3に示す誤り訂正符号では、ブロックBLKを構成する全てのページP1〜PKに、ページ数と同数のK個のユーザデータフレームB1〜BKよりなるユーザデータYDが格納されている。
ユーザデータYDをページ間方向に保護する第1リードソロモンパリティデータRS1は、ページ間方向にユーザデータフレームB1〜BKをリードソロモン符号化することで生成される。このようにして生成された第1リードソロモンパリティデータRS1は、例えばL個の第1リードソロモンパリティフレームR1〜RLで構成される。
本実施形態において、第1リードソロモンパリティデータRS1は、(K−M)個の第1リードソロモンデータフレームT1〜T(K−M)に再構成され、ユーザデータフレームB1〜B(K−M)と共に、ページP1〜P(K−M)に格納される。残りのページP(K−M+1)〜PKには、第1リードソロモンパリティデータRS1をリードソロモン符号化することで生成されたM個の第2リードソロモンデータフレームU1〜UMよりなる第2リードソロモンパリティデータRS2が、ユーザデータフレームB(K−M+1)〜BKと共に格納される。したがって、図3に示す誤り訂正符号では、ページ間方向において、ユーザデータYDにおけるエラーシンボルの位置(ページ)が分かっている場合にはL個のエラーシンボルを、エラーシンボルの位置(ページ)が分かっていない場合には(L/2)個(ただし、割り切れない場合には少数点以下は切り捨て)個のエラーシンボルを、誤り訂正することが可能であると共に、ページ間方向において、第1リードソロモンパリティデータRS1におけるエラーシンボルの位置(ページ)が分かっている場合にはM個のエラーシンボルを、エラーシンボルの位置(ページ)が分かっていない場合には(M/2)個(ただし、割り切れない場合には少数点以下は切り捨て)個のエラーシンボルを、誤り訂正することが可能である。なお、第1リードソロモンパリティデータRS1及び第2リードソロモンパリティデータRS2の格納方法は、図3に例示する方法に限定されず、種々変形することが可能である。例えば、P1〜PKの全てのページに対して第1リードソロモンパリティデータRS1と第2リードソロモンパリティデータRS2との両方を分散して格納することも可能である。その場合、各ページのRSパリティが格納される領域(以下、RSパリティ領域という)のデータ長をGとすると、各ページのRSパリティ領域におけるG(K−M/K)の領域に第1リードソロモンパリティデータRS1が分散して格納され、各ページのRSパリティ領域における残りの領域G(M/K)に第2リードソロモンパリティデータRS2が分散して格納される。
このように、本実施形態では、ユーザデータYDをバースト誤りから救済するための第1リードソロモンパリティデータRS1と、第1リードソロモンパリティデータRS1をバースト誤りから救済するための第2リードソロモンパリティデータRS2との2つのページ間符号(冗長データ)を用いることで、ユーザデータYDを2段階に保護している。このような2段階の保護とすることで、ページ間符号(RS1,RS2)を専用のページやブロックではなくユーザデータYDと同一のページ内に格納した場合でも、ユーザデータYDに発生したバースト誤りを訂正することが可能となる。
なお、各ページP1〜PKには、図2に示す例と同様に、ページ内符号として、それぞれのページに格納されているユーザデータフレームB1〜BK及び第1リードソロモンデータフレームT1〜T(K−M)又は第2リードソロモンデータフレームU1〜UMをBCH符号やLDPC符号等で誤り訂正符号化することで生成されたインラインECCパリティIEPが格納される。
つづいて、本実施形態に係る符号化器17(図1参照)について、図面を用いて詳細に説明する。図4は、本実施形態に係る符号化器の概略構成例を示すブロック図である。図5は、本説明におけるユーザデータYDのフレーム構成例を示す図である。図6〜図8は、符号化器17が誤り訂正符号を生成する際の流れを説明するための図である。
図4に示すように、符号化器17は、ライトバッファメモリ101と、第1のRS符号化器102と、第2のRS符号化器103と、パリティバッファメモリ104と、ECC符号化器105とを備える。
例えば、制御部11からの指示に従ってデータバッファ12(図1参照)から符号化/復号部14の符号化器17に入力されたユーザデータYDは、ライトバッファメモリ101に蓄積される。ここで、図5に示すように、本説明におけるユーザデータYDは、第1のRS符号化器102が符号化する際に必要なK個のユーザデータフレームB1〜BKより構成されているものとする。
図6に示すように、第1のRS符号化器102には、ライトバッファメモリ101内のユーザデータフレームB1〜BKそれぞれから符号化シンボル単位のビット数(本説明では8ビット)ずつ抜き出して構成されたページ間データフレームF1〜F(N_b/8)が入力される。なお、図5と図6とでは、説明の都合上、ページ間方向とページ内方向とが入れ替わっている。また、図6では、1シンボルのビット数を8としているが、これは第1のRS符号化器102で符号化に用いるリードソロモン符号の有限体の大きさに依存して変化する値であってよい。さらに、ユーザデータフレームB1〜BKからページ間データフレームF1〜F(N_b/8)を構成する際にN_b/8が整数とならない場合には、N_b/8は少数点以下を繰り上げた整数に置き換えられる。その際、繰り上がりにより不足したビット又はシンボルについては、例えばゼロパディング等によって補填されてもよい。
第1のRS符号化器102は、ライトバッファメモリ101から入力されたページ間データフレームF1〜F(N_b/8)に対し、それぞれLシンボルずつのパリティで構成された計L×N_bビットの第1リードソロモンパリティデータRS1を生成する。なお、生成された第1リードソロモンパリティデータRS1は、ページ内方向に沿って、ユーザデータフレームB1〜BKそれぞれと同じシンボル数のL個の第1リードソロモンパリティフレームR1〜RLを構成する。第1のRS符号化器102で生成された第1リードソロモンパリティデータRS1は、第2のRS符号化器103に入力されると共に、パリティバッファメモリ104に格納される。
第2のRS符号化器103は、入力された第1リードソロモンパリティデータRS1に対し、Mシンボルの誤り訂正を可能にする第2リードソロモンパリティデータRS2を生成する。具体的には、図7に示すように、第2のRS符号化器103は、フレーム単位で入力された第1リードソロモンパリティデータRS1をQ分割することで、Q個のページ間リードソロモンパリティフレームS1〜SQを作成する。ここで、Qは、第1リードソロモンパリティデータRS1の総ビット数L×N_bを8×(K−M)で除算した値(Q=LN_b/8(K−M))である。なお、分母の8は、1シンボルを構成するビット数であり、Kは、1ブロックのページ数(又はユーザデータYDのフレーム数)であり、Mは、第2リードソロモンパリティデータRS2を構成する第2リードソロモンデータフレームU1〜UMのフレーム数である。ただし、1シンボルのビット数は第1リードソロモンパリティデータRS1を構成する各シンボルのビット数と同じ数(8ビット)に限らず、別の数であってもよい。また、第2リードソロモンデータフレームU1〜UMのフレーム数Mは、第1リードソロモンパリティフレームR1〜RLのフレーム数Lと同じ数であってもよいし、異なる数であってもよい。例えば、MはL以下であってもよい。
さらに、LN_b/8(K−M)が整数とならない場合には、QはLN_b/8(K−M)の少数点以下を繰り上げた整数に置き換えられる。その際、繰り上がりにより不足したビット又はシンボルについては、図7に示すように、例えばゼロパディング等によって補填されてもよい。
そして、第2のRS符号化器103は、ページ間リードソロモンパリティフレームS1〜SQそれぞれから符号化シンボル単位のビット数(本説明では8ビット)ずつ抜き出して構成された第1リードソロモンデータフレームT1〜T(K−M)に対し、それぞれMシンボルずつのパリティで構成された計M×8×Qビットの第2リードソロモンパリティデータRS2を生成する。なお、生成された第2リードソロモンパリティデータRS2は、ページ内方向に沿って、第1リードソロモンデータフレームT1〜T(K−M)それぞれと同じシンボル数のM個の第2リードソロモンデータフレームU1〜UMを構成する。第2のRS符号化器103で生成された第2リードソロモンパリティデータRS2は、パリティバッファメモリ104に格納される。その結果、パリティバッファメモリ104には、第1のRS符号化器102からの第1リードソロモンパリティデータRS1と、第2のRS符号化器103からの第2リードソロモンパリティデータRS2とが格納される。
ECC符号化器105が符号化を実行する際には、図4に示すように、ライトバッファメモリ101からECC符号化器105へ、ユーザデータYDがフレーム単位(ページ間データフレームF1〜F(N_b/8))で入力される。また、ECC符号化器105には、パリティバッファメモリ104内の第1リードソロモンパリティデータRS1及び第2リードソロモンパリティデータRS2も入力される。具体的には、パリティバッファメモリ104内の第1リードソロモンパリティデータRS1と第2リードソロモンパリティデータRS2とが連接されて最終リードソロモンパリティデータRS3が生成され、この最終リードソロモンパリティデータRS3が、フレーム単位(第1リードソロモンデータフレームT1〜T(K−M)及び第2リードソロモンデータフレームU1〜UM)でECC符号化器105に入力される。
ECC符号化器105は、ライトバッファメモリ101から入力されたユーザデータYDと、パリティバッファメモリ104から入力された最終リードソロモンパリティデータRS3とをフレーム単位で連接したフレームデータをBCH符号やLDPC符号等で誤り訂正符号化することで、各フレームデータに対するインラインECCパリティIEPを生成する。そして、ECC符号化器105は、各フレームデータに、それぞれに対して生成したインラインECCパリティIEPを連接することで、各フレームデータのECCフレームを生成し、生成したECCフレームを順次、メモリI/F13へ出力する。これに対し、メモリI/F13は、制御部11からの指示に従い、ECC符号化器105から入力されたECCフレームを不揮発性メモリ20における指定の物理アドレスに対応するページに書き込む。
次に、本実施形態に係る書込み時の動作について、図面を用いて詳細に説明する。図9は、本実施形態に係る書込み動作の概略例を示すフローチャートである。なお、図9では、簡略化のため、第1リードソロモンパリティデータRS1をRS1符号といい、第2リードソロモンパリティデータRS2をRS2符号という。
図9に示すように、本動作では、まず、ホストI/F15を介して入力されたホスト30からの書込み要求を受け付けた制御部11が、例えば不図示のアドレス変換テーブルを参照することで、書込み要求で指定された論理アドレスに対応する物理アドレスを特定する(ステップS101)。また、制御部11は、書込み要求と共にホスト30から入力された書込み対象のユーザデータYDをデータバッファ12に一時格納する(ステップS102)。
次に、制御部11は、1ブロック分のユーザデータYDをデータバッファ12から符号化器17へ転送する(ステップS103)。符号化器17へ転送された1ブロック分のユーザデータYDは、ライトバッファメモリ101(図4参照)に格納される。なお、1ブロック分のユーザデータYDは、第1のRS符号化器102が符号化する際に必要なK個のユーザデータフレームB1〜BKより構成されているものとする。
次に、符号化器17において、第1のRS符号化器102が、ライトバッファメモリ101からユーザデータYDのページ間データフレームF1〜F(N_b/8)を入力し、入力したページ間データフレームF1〜F(N_b/8)それぞれをリードソロモン符号化することで、それぞれLシンボルずつのパリティで構成された計L×N_bビットの第1リードソロモンパリティデータRS1を生成する(ステップS104)。なお、生成された第1リードソロモンパリティデータRS1は、第2のRS符号化器103に入力されると共に、パリティバッファメモリ104に格納される。
次に、第2のRS符号化器103が、入力された第1リードソロモンパリティデータRS1をQ分割することで、Q個のページ間リードソロモンパリティフレームS1〜SQを作成する(ステップS105)。つづいて、第2のRS符号化器103は、ページ間リードソロモンパリティフレームS1〜SQそれぞれから符号化シンボル単位のビット数(本説明では8ビット)ずつ抜き出して構成された第1リードソロモンデータフレームT1〜T(K−M)をリードソロモン符号化することで、それぞれMシンボルずつのパリティで構成された計M×8×Qビットの第2リードソロモンパリティデータRS2を生成する(ステップS106)。なお、生成された第2リードソロモンパリティデータRS2は、パリティバッファメモリ104に格納される。
次に、ECC符号化器105が、ライトバッファメモリ101内のユーザデータYDと、パリティバッファメモリ104内の第1リードソロモンパリティデータRS1及び第2リードソロモンパリティデータRS2とを入力し、入力したユーザデータYDと第1リードソロモンパリティデータRS1又は第2リードソロモンパリティデータRS2とをフレーム単位で連接してフレームデータを作成する(ステップS107)。つづいて、ECC符号化器105は、作成したフレームデータをBCH符号やLDPC符号等で誤り訂正符号化することで、各フレームデータに対するインラインECCパリティIEPを生成する(ステップS108)。そして、ECC符号化器105は、生成したインラインECCパリティIEPを各フレームデータに連接することで、ECCフレームを生成する(ステップS109)。
このようにして生成されたECCフレームは、メモリI/F13に入力される。メモリI/F13は、制御部11からの指示に従い、ECC符号化器105から入力されたECCフレームを不揮発性メモリ20における指定の物理アドレスに対応するページに書き込む(ステップS110)。
その後、制御部11は、データバッファ12に一時保持されている全てのユーザデータYDの不揮発性メモリ20への書込みが完了したか否かを判定し(ステップS111)、完了している場合(ステップS111のYES)、本動作が終了する。一方、完了していない場合(ステップS111のNO)、ステップS103へリターンし、以降の動作が実行される。
つづいて、本実施形態に係る復号器18(図1参照)について、図面を用いて詳細に説明する。図10は、本実施形態に係る復号器の概略構成例を示すブロック図である。図11は、本実施形態に係る復号器による復号の流れを説明するための図である。図12〜図14は、本実施形態に係る復号器による復号の流れの具体例を用いて説明するための図である。
図10に示すように、復号器18は、ECC復号器106と、リードバッファメモリ107と、第1のRS復号器108と、第2のRS復号器109とを備える。
メモリI/F13は、制御部11からの指示に従って、不揮発性メモリ20から対象のデータを読み出し、これにより読み出されたリードデータをECC復号器106に入力する。なお、図11に示すように、リードデータは、書込み時のECCフレームに対応するK個のリードECCフレームE1〜EKで構成されている。それぞれのリードECCフレームE1〜EKは、書込み時のECCフレームと同様に、ユーザデータYDと、第1リードソロモンパリティデータRS1及び/又は第2リードソロモンパリティデータRS2と、インラインECCパリティIEPとで構成されている。
ECC復号器106は、入力された各リードECCフレームE1〜EKに対し、それぞれのインラインECCパリティIEPを用いた誤り訂正処理を実施し、それにより得られた誤り訂正処理後のリードデータをリードバッファメモリ107に入力する。なお、インラインECCパリティIEPを用いた誤り訂正処理によって誤り訂正できないシンボルが存在する場合、そのシンボルを含むリードECCフレームを特定するための情報が、例えばリードバッファメモリ107における所定の領域又は不図示のメモリに保持される。
リードバッファメモリ107は、誤り訂正処理後のリードデータ(及び誤り訂正できないシンボルを含むリードECCフレームを特定するための情報)を保持するほか、ECC復号器106、第1のRS復号器108及び第2のRS復号器109それぞれに対し、必要なデータの入出力を実行する。
ここで、インラインECCパリティIEPを用いた誤り訂正後のリードデータにエラーシンボルが存在しない場合、すなわち、インラインECCパリティIEPを用いた誤り訂正によって元々のECCフレームが復元できた場合、リードバッファメモリ107内には、ライトデータであるユーザデータYDが復元されている。このようにして復元されたユーザデータYDは、例えばデータバッファ12等で一時保持された後、ホストI/F15を介してホスト30へ送信される。
一方、リードECCフレームが消失している場合など、誤り訂正できないエラーシンボルが存在し、且つ、誤り訂正できないエラーシンボルを含むリードECCフレームの数が第2リードソロモンパリティデータRS2で訂正可能なエラーシンボル数であるM個以下である場合、リードバッファメモリ107内のリードデータに含まれる第1リードソロモンパリティデータRS1が、同じくリードバッファメモリ107内のリードデータに含まれる第2リードソロモンパリティデータRS2を用いて誤り訂正される。
具体的には、リードバッファメモリ107内のリードECCフレームE1〜EKに含まれる第1リードソロモンパリティデータRS1及び第2リードソロモンパリティデータRS2と、誤り訂正できないシンボルを含むリードECCフレームを特定するための情報とが、第1のRS復号器108に入力される。第1のRS復号器108は、誤り訂正できないシンボルを含むリードECCフレームを特定するための情報に基づき、エラーシンボルを含むリードECCフレームの第1リードソロモンデータフレームT1〜T(K−M)を、第2リードソロモンパリティデータRS2を用いて誤り訂正する。そして、第2のRS復号器109は、エラーシンボルを含むリードECCフレームのユーザデータフレームを、誤り訂正後の第1リードソロモンパリティデータRS1を用いて誤り訂正する。その結果、リードバッファメモリ107内に、ライトデータであるユーザデータYDが復元される。
これを、図12〜図14に示す具体例を用いて説明する。図12〜図14に示す例では、誤り訂正処理後のリードデータが8個のリードECCフレームE1〜E8で構成され、これらのうちの6つのリードECCフレームE1〜E6に第1リードソロモンパリティデータRS1が含まれ、残りの2つのリードECCフレームE7及びE8に第2リードソロモンパリティデータRS2が含まれている。すなわち、図12〜図14に示す例では、第2リードソロモンパリティデータRS2が2つの第2リードソロモンデータフレームU1及びU2で構成されている。その場合、第2リードソロモンパリティデータRS2で訂正可能なエラーシンボル数Mは2である。また、図12〜図14に示す例では、8個のリードECCフレームE1〜E8のうち、2つのリードECCフレームE4及びE5がエラーシンボルを含むリードECCフレームである。なお、図12〜図14に示す例では、第1リードソロモンパリティデータRS1で訂正可能なエラーシンボル数Lも2であるとする。
図12〜図14に例示する場合では、図13に示すように、リードバッファメモリ107内のリードECCフレームE1〜E8のうち、第1リードソロモンパリティデータRS1を構成する第1リードソロモンデータフレームT1〜T6と、第2リードソロモンパリティデータRS2を構成する第2リードソロモンデータフレームU1及びU2とが、第1のRS復号器108に入力される。また、第1のRS復号器108には、誤り訂正できないシンボルを含むリードECCフレームE4及びE5を特定するための情報も入力される。第1のRS復号器108は、誤り訂正できないシンボルを含むリードECCフレームE4及びE5を特定するための情報に基づき、入力された第1リードソロモンデータフレームT1〜T8に対して第2リードソロモンデータフレームU1及びU2を用いた誤り訂正を実行する。その結果、誤り訂正できないシンボルを含むリードECCフレームE4及びE5に対応する第1リードソロモンデータフレームT4及びT5が誤り訂正される。そして、第1のRS復号器108は、エラーシンボルを含まない第1リードソロモンデータフレームT1〜T6で構成された第1リードソロモンパリティデータRS1で、リードバッファメモリ107内のリードECCフレームE1〜E8における第1リードソロモンパリティデータRS1を更新する。
このようにしてリードバッファメモリ107内の第1リードソロモンパリティデータRS1が訂正されると、リードバッファメモリ107内のユーザデータYDを構成するユーザデータフレームB1〜BKと、同じくリードバッファメモリ107内の第1リードソロモンパリティデータRS1を構成する第1リードソロモンデータフレームT1〜T6とが、第2のRS復号器109に入力される。また、第2のRS復号器109には、誤り訂正できないシンボルを含むリードECCフレームE4及びE5を特定するための情報も入力される。第2のRS復号器109は、誤り訂正された第1リードソロモンデータフレームT1〜T6を再構成することで、第1リードソロモンパリティフレームR1及びR2を生成する。そして、第2のRS復号器109は、誤り訂正できないシンボルを含むリードECCフレームE4及びE5を特定するための情報に基づき、生成した第1リードソロモンパリティフレームR1及びR2を用いてユーザデータフレームB1〜BKを誤り訂正する。その結果、リードバッファメモリ107内に、ライトデータであるユーザデータYDが復元される。
また、誤り訂正できないエラーシンボルを含むリードECCフレームの数が第2リードソロモンパリティデータRS2で訂正可能なエラーシンボル数であるM個又は第1リードソロモンパリティデータRS1で訂正可能なエラーシンボル数であるL個よりも多い場合、第1リードソロモンパリティデータRS1を用いた誤り訂正と、インラインECCパリティIEPを用いた誤り訂正とを交互に繰返し実行することで、ライトデータであるユーザデータYDを復元できる場合がある。
そこで本実施形態では、誤り訂正できないエラーシンボルを含むリードECCフレームの数がM個又はL個よりも多い場合、リードバッファメモリ107内のリードデータに対し、上述した第1のRS復号器108による第2リードソロモンパリティデータRS2を用いた第1リードソロモンパリティデータRS1の誤り訂正及び第2のRS復号器109による第1リードソロモンパリティデータRS1を用いたユーザデータYDの誤り訂正と、ECC復号器106によるインラインECCパリティIEPを用いた誤り訂正とが、交互に繰返し実行される。このような繰返しの誤り訂正は、例えばユーザデータYDの復元に成功するまで継続される。ただし、ホスト30からの読出し要求に対するレイテンシの増大化を回避するために、繰返しの回数に対して上限が設定されてもよい。
次に、本実施形態に係る読出し時の動作について、図面を用いて詳細に説明する。図15は、本実施形態に係る読出し動作の概略例を示すフローチャートである。なお、図15では、簡略化のため、第1リードソロモンパリティデータをRS1符号といい、第2リードソロモンパリティデータをRS2符号という。
図15に示すように、本動作では、まず、ホストI/F15を介して入力されたホスト30からの読出し要求を受け付けた制御部11が、例えば不図示のアドレス変換テーブルを参照することで、読出し要求で指定された論理アドレスに対応する物理アドレスを特定する(ステップS121)。そして、制御部11は、特定した物理アドレスからのデータの読み出しをメモリI/F13に指示し、これにより、特定した物理アドレスから読出し対象のデータがメモリI/F13によって読み出される(ステップS122)。
メモリI/F13によって読み出されたリードデータは、例えばリードECCフレーム単位でECC復号器106に入力される。ECC復号器106は、入力された各リードECCフレームに対し、それぞれのインラインECCパリティIEPを用いた復号を実行し(ステップS123)、その復号結果として得られたリードECCフレームをリードバッファメモリ107に順次格納する。これにより、リードバッファメモリ107内には、インラインECCパリティIEPを用いた誤り訂正後のリードデータが格納される。そして、ECC復号器106は、ユーザデータYDの復号に成功したか否かを判断する(ステップS124)。
ステップS123の復号に成功した場合(ステップS124のYES)、復号器18は、リードバッファメモリ107内のユーザデータYDを出力する(ステップS131)。出力されたユーザデータYDは、例えばデータバッファ12(図1参照)に一時保持された後、ホストI/F15を介してホスト30へ転送される。一方、復号に成功しなかった場合(ステップS124のNO)、リードバッファメモリ107内の第1リードソロモンパリティデータRS1及び第1リードソロモンパリティデータRS2と、誤り訂正できないシンボルを含むリードECCフレームを特定するための情報とが、第1のRS復号器108に入力され、第1のRS復号器108において、第2リードソロモンパリティデータRS2を用いた第1リードソロモンパリティデータRS1の誤り訂正が実行される(ステップS125)。この誤り訂正により、リードバッファメモリ107内の第1リードソロモンパリティデータRS1が誤り訂正後の第1リードソロモンパリティデータRS1に書き換えられる。
つづいて、リードバッファメモリ107内の誤り訂正後の第1リードソロモンパリティデータRS1及びユーザデータYDと、誤り訂正できないシンボルを含むリードECCフレームを特定するための情報とが、第2のRS復号器109に入力され、第2のRS復号器109において、誤り訂正後の第1リードソロモンパリティデータRS1を用いたユーザデータYDの復号が実行される(ステップS126)。そして、第2のRS復号器109は、ユーザデータYDの復号に成功したか否かを判断する(ステップS127)。なお、ステップS126の復号により、リードバッファメモリ107内のユーザデータYDが誤り訂正後のユーザデータYDに書き換えられる。
ステップS126の復号に成功した場合(ステップS127のYES)、復号器18は、ステップS131へ進み、上述と同様に、リードバッファメモリ107内のユーザデータYDを出力する。一方、復号に成功しなかった場合(ステップS127のNO)、復号器18は、第1リードソロモンパリティデータRS1及び第2リードソロモンパリティデータRS2を用いた復号とインラインECCパリティIEPを用いた復号との繰返し回数が予め設定しておいた上限回数に達したか否かを判定する(ステップS128)。繰返し回数が上限回数に達している場合(ステップS128のYES)、復号器18は、復号失敗を例えば制御部11へ通知し(ステップS129)、本動作を終了する。なお、復号失敗が通知された制御部11は、例えばホスト30へ読出しエラーを返す。一方、繰返し回数が上限回数に達していない場合(ステップS128のNO)、リードバッファメモリ107内のリードデータが例えばリードECCフレーム単位で再度、ECC復号器106に入力され、ECC復号器106において、入力された各リードECCフレームに対するインラインECCパリティIEPを用いた復号が実行される(ステップS130)。なお、ステップS130の復号結果として得られたリードECCフレームは、リードバッファメモリ107に順次格納される。
その後、本動作はステップS125へリターンし、以降、ユーザデータYDの復号に成功するまで(ステップS127のYES)、若しくは、繰返し回数が上限回数に達するまで(ステップS128のYES)、第2リードソロモンパリティデータRS2を用いた第1リードソロモンパリティデータRS1の誤り訂正(ステップS125)、誤り訂正後の第1リードソロモンパリティデータRS1を用いたユーザデータYDの復号(ステップS126)、及び、誤り訂正後のインラインECCパリティIEPを用いたユーザデータYDの復号(ステップS130)が繰返し実行される。
以上のように、本実施形態によれば、各ブロックBLKに書き込まれるユーザデータYDに対して生成された第1リードソロモンパリティデータRS1及び第2リードソロモンパリティデータRS2が、それぞれのユーザデータYDと同じブロックBLK内に格納される。それにより、冗長データ用に確保されるページ数又はブロック数を削減しつつページ間方向の誤り訂正を可能にするメモリシステムを実現することができる。
(第2の実施形態)
次に、第2の実施形態に係るメモリシステムについて、図面を参照して詳細に説明する。第1の実施形態で例示した符号化処理を含む書込み動作は、ホスト30からの書込み要求に応じて実行される書込み動作に限られず、例えば、メモリシステム1内で発生したガベージコレクションやリフレッシュ等のイベントの実行において発生する書込み要求に対する書込み動作に対しても適用することが可能である。そこで本実施形態では、ホスト30から書込み要求を受信した際の書込み動作と、メモリシステム1内で発生したイベントの実行において発生する書込み要求に対する書込み動作とで、異なる書込み動作を実行する場合について、例を挙げて説明する。
次に、第2の実施形態に係るメモリシステムについて、図面を参照して詳細に説明する。第1の実施形態で例示した符号化処理を含む書込み動作は、ホスト30からの書込み要求に応じて実行される書込み動作に限られず、例えば、メモリシステム1内で発生したガベージコレクションやリフレッシュ等のイベントの実行において発生する書込み要求に対する書込み動作に対しても適用することが可能である。そこで本実施形態では、ホスト30から書込み要求を受信した際の書込み動作と、メモリシステム1内で発生したイベントの実行において発生する書込み要求に対する書込み動作とで、異なる書込み動作を実行する場合について、例を挙げて説明する。
なお、以下の説明では、メモリシステム1内で発生したイベントとしてガベージコレクションを例示するが、これに限定されず、リフレッシュ等、書込み対象のデータとして1ブロック分のデータが予め揃っている状態での書込み動作の実行を伴う種々のイベントであってよい。また、本実施形態では、明確化のため、ホスト30から書込み要求を受信した際の書込み動作を第1書込みモードの書込み動作といい、ガベージコレクションの実行において発生する書込み要求に対する書込み動作を第2書込みモードの書込み動作という。第1書込みモードの書込み動作は、例えば通常の書込み動作であってよい。一方、第2書込みモードの書込み動作は、第1の実施形態で例示した書込み動作である。その他、以下の説明において、第1の実施形態と同様の構成及び動作については、それらを引用することで、重複する説明を省略する。
本実施形態に係るメモリシステムは、第1の実施形態において図1を用いて説明したメモリシステム1と同様の構成であってよい。ただし、本実施形態において、書込み動作と読み出し動作とを実行するための概略構成は、図16に示すブロック構成のようになる。
図16に示すように、本実施形態に係るメモリシステムは、制御部11と、符号化/復号部14と、メモリI/F13と、不揮発性メモリ20と、ブロック単位書込みモード管理部201とを備える。これらのうち、制御部11、符号化/復号部14、メモリI/F13及び不揮発性メモリ20は、図1に示すこれらと同様であってよい。
ブロック単位書込みモード管理部201は、例えば、RAMや不揮発性メモリ20における一部の領域で構成されており、不揮発性メモリ20の各ブロックBLKについて、第1書込みモードと第2書込みモードとのいずれの書込みモードで書込みが実行されたかを管理する。そこで、ブロック単位書込みモード管理部201は、例えば各ブロックBLKを特定するための物理アドレスに対応付けて、第1書込みモードと第2書込みモードとを特定するための識別情報を管理する。
図17は、本実施形態に係る書込み時の動作のメインフローの一例を示すフローチャートである。図17は、本実施形態に係る第2書込みモードの書込み動作の一例を示すフローチャートである。
図17に示すように、本実施形態では、例えば制御部11が書込み要求を待機する(ステップS201のNO)。なお、本説明における書込み要求は、上述したように、ホスト30からの書込み要求、又は、ガベージコレクションの実行中において発生する書込み要求である。
書込み要求があると(ステップS201のYES)、制御部11は、その書込み要求がホスト30からの書込み要求であるか否かを判断する(ステップS202)。ホスト30からの書込み要求である場合(ステップS202のYES)、制御部11は、第1書込みモードでの書込み動作を符号化/復号部14及びメモリI/F13へ指示し、これにより、第1書込みモードでの書込み動作が実行される(ステップS203)。なお、第1書込みモードでの書込み動作では、例えば、符号化器17は、図2に例示した誤り訂正符号を生成する。メモリI/F13は、符号化器17によって生成された誤り訂正符号を、書込み要求で指定された論理アドレスに対応する物理アドレスによって特定されるページへ書き込む。そして、制御部11は、書込み先となったブロックBLKの書込みモードが第1書込みモードであることを、ブロック単位書込みモード管理部201に設定し(ステップS204)、ステップS207へ進む。
一方、書込み要求がホスト30からの書込み要求ではなかった場合(ステップS202のNO)、すなわち、ガベージコレクションの実行において発生した書込み要求であった場合、制御部11は、第2書込みモードでの書込み動作を符号化/復号部14及びメモリI/F13へ指示し、これにより、第2書込みモードでの書込み動作が実行される(ステップS205)。第2書込みモードでの書込み動作では、例えば、ガベージコレクションにおいて、有効データの収集対象とするブロック(以下、転記元ブロックという)と、収集した有効データの転記先とするブロック(以下、転記先ブロックという)とを特定し、転記元ブロックから収集した1ブロック分ごとの有効データに対して、第1の実施形態において図9を用いて説明した書込み動作と同様の動作が実行される。そして、制御部11は、転記先ブロックの書込みモードが第2書込みモードであることを、ブロック単位書込みモード管理部201に設定し(ステップS206)、ステップS207へ進む。
ステップS207では、例えば制御部11が本動作を終了するか否かを判断し、終了する場合(ステップS207のYES)、本動作が終了する。一方、終了しない場合(ステップS207のNO)、本動作がステップS201へリターンする。
以上のように、本実施形態によれば、1ブロック分のデータが揃っている場合には第1の実施形態で例示した第2書込みモードの書込み動作を実行し、揃っていない場合には例えば通常の書込み動作である第1書込みモードの書込み動作を実行する。それにより、1ブロック分のユーザデータYDがデータバッファ12に確保されるまで不揮発性メモリ20への書込みを待機する必要がなくなるため、書込み処理をより迅速に行なうことが可能となる。
なお、その他の構成、動作及び効果は、上述した実施形態と同様であるため、ここでは詳細な説明を省略する。
(第3の実施形態)
次に、第3の実施形態に係るメモリシステムについて、図面を参照して詳細に説明する。なお、以下の説明において、第1の実施形態と同様の構成及び動作については、それらを引用することで、重複する説明を省略する。
次に、第3の実施形態に係るメモリシステムについて、図面を参照して詳細に説明する。なお、以下の説明において、第1の実施形態と同様の構成及び動作については、それらを引用することで、重複する説明を省略する。
第1及び第2の実施形態で例示した符号化処理を含む書込み動作では、各ブロックBLKに書き込まれるユーザデータYDに対して生成した第1リードソロモンパリティデータRS1及び第2リードソロモンパリティデータRS2が、それぞれのユーザデータYDと同じブロックBLK内に格納されていた。これに対し、第3の実施形態では、各ブロックBLKに書き込まれるユーザデータYDに対して生成した第1リードソロモンパリティデータRS1及び第2リードソロモンパリティデータRS2が、ユーザデータYDが格納されるブロックBLKとは異なるブロックBLKに格納される。これを、図18の例を用いて説明する。
図18には、4つのブロックBLK1〜BLK4に対して順次、ユーザデータYDを書き込む場合が例示されている。図18に示すように、本実施形態では、先頭のブロックBLK1に格納されるユーザデータYD1に対しては、第1の実施形態と同様の方法により、第1リードソロモンパリティデータRS11及び第2リードソロモンパリティデータRS21が生成される。ただし、第3の実施形態では、ユーザデータYD1に対して生成された第1リードソロモンパリティデータRS11及び第2リードソロモンパリティデータRS21が、ユーザデータYD1と同一のブロックBLK1ではなく、次のブロックBLK2に格納される。同様に、ブロックBLK2に格納されるユーザデータYD2に対して作成された第1リードソロモンパリティデータRS12及び第2リードソロモンパリティデータRS22も次のブロックBLK3に格納され、ブロックBLK3に格納されるユーザデータYD3に対して作成された第1リードソロモンパリティデータRS13及び第2リードソロモンパリティデータRS23も次のブロックBLK4に格納される。ただし、最終のブロックBLK4に格納されるユーザデータYD4に対しては、例えば図2を用いて説明した誤り訂正符号と同様にして第1リードソロモンパリティデータRS14が作成され、この第1リードソロモンパリティデータRS14がユーザデータYD4と同じブロックBLK4内でユーザデータYD4とは別に確保されたページP(K−L+1)〜PKに格納される。
このように、本実施形態では、最終以外のブロックBLKに格納されるユーザデータYDに対しては、第1の実施形態において図3を用いて説明した符号化と同様の符号化(第2の実施形態における第2書込みモードに相当)が実行され、これにより生成された第1リードソロモンパリティデータRS1及び第2リードソロモンパリティデータRS2が次のブロックBLKに格納される。一方、最終のブロックBLKに格納されるユーザデータYDに対しては、第1の実施形態において図2を用いて説明した符号化と同様の符号化(第2の実施形態における第1書込みモードに相当)が実行され、これにより生成された第1リードソロモンパリティデータRS1が最終のブロックBLK4内で確保された専用のページに格納される。
なお、最後のブロックBLKとは、例えばメモリシステムの電源やメモリシステムとホスト30との接続がオフされた際に書込み先として選択されているブロックBLK等であってよい。
また、先頭のブロックBLKと2番目以降のブロックBLKとで各ページP1〜PKに割り当てるユーザデータYDのデータ長を変えない場合、先頭のブロックBLKの各ページP1〜PKに格納されるECCフレームには、第1リードソロモンデータフレームT1〜T(K−M)または第2リードソロモンデータフレームU1〜UM分の空き領域OPTが発生する。そこで本実施形態では、空き領域OPTに特定の値のダミーデータが格納されてもよいし、先頭のブロックBLKに格納されるユーザデータYDに対して生成されるインラインECCパリティIEPのパリティ長を空き領域OPT分増やすことで空き領域OPTを埋めてもよい。
このような本実施形態に係るメモリシステムは、第1の実施形態において図1を用いて説明したメモリシステム1と同様の構成であってよい。また、書込み動作と読み出し動作とを実行するための概略構成は、第2の実施形態において図16に例示したブロック構成と同様であってよい。ただし、本実施形態では、符号化器17が、図19に示す符号化器27に置き換えられ得る。
図19に示すように、符号化器27は、図4に示した符号化器17と同様の構成において、パリティバッファメモリ104が、第1セレクタ301と、第2セレクタ302と、セレクタ制御部303と、第1パリティバッファメモリ304と、第2パリティバッファメモリ305とに置き換えられている。
第1パリティバッファメモリ304及び第2パリティバッファメモリ305それぞれは、第1の実施形態におけるパリティバッファメモリ104と同様に、第1のRS符号化器102から第1セレクタ301を介して入力された第1リードソロモンパリティデータRS1と、第2のRS符号化器103から第1セレクタ301を介して入力された第2リードソロモンパリティデータRS2とを一時保持する。また、第1パリティバッファメモリ304及び第2パリティバッファメモリ305それぞれは、保持している第1リードソロモンパリティデータRS1及び第2リードソロモンパリティデータRS2を第2セレクタ302を介してECC符号化器105に入力する。
セレクタ制御部303は、例えば不図示のカウンタ又はフラグメモリ等を有しており、カウンタのカウント値やフラグメモリのフラグの状態等に基づいて、第1セレクタ301の出力先を第1パリティバッファメモリ304と第2パリティバッファメモリ305とのうちから交互に選択する。同様に、セレクタ制御部303は、例えばカウンタのカウント値やフラグメモリのフラグの状態等に基づいて、第2セレクタ302の入力元を第1パリティバッファメモリ304と第2パリティバッファメモリ305とのうちから交互に選択する。
具体例としては、セレクタ制御部303は、奇数番目に使用するブロックBLKに格納されるユーザデータYDに対して作成された第1リードソロモンパリティデータRS1及び第2リードソロモンパリティデータRS2が第1パリティバッファメモリ304に入力され、偶数番目に使用するブロックBLKに格納されるユーザデータYDに対して作成された第1リードソロモンパリティデータRS1及び第2リードソロモンパリティデータRS2が第1パリティバッファメモリ304に入力されるように、第1セレクタ301を制御する。
一方、セレクタ制御部303は、奇数番目に使用するブロックBLKに格納するECCフレームを作成する際には第2パリティバッファメモリ305に保持されている第1リードソロモンパリティデータRS1及び第2リードソロモンパリティデータRS2がECC符号化器105に入力され、偶数番目に使用するブロックBLKに格納するECCフレームを作成する際には第1パリティバッファメモリ304に保持されている第1リードソロモンパリティデータRS1及び第2リードソロモンパリティデータRS2がECC符号化器105に入力されるように、第2セレクタ302を制御する。
このようにして、第1パリティバッファメモリ304及び第2パリティバッファメモリ305を交互に切り替えて使用することで、各ブロックBLKに書き込まれるユーザデータYDに対して生成した第1リードソロモンパリティデータRS1及び第2リードソロモンパリティデータRS2を、ユーザデータYDが格納されるブロックBLKの次のブロックBLK内に格納することが可能となる。なお、第2セレクタ302を介してECC符号化器105へ出力された第1リードソロモンパリティデータRS1及び第2リードソロモンパリティデータRS2は、順次破棄されてもよい。
以上のように、本実施形態によれば、各ブロックBLKに書き込まれるユーザデータYDに対して生成した第1リードソロモンパリティデータRS1及び第2リードソロモンパリティデータRS2が、ユーザデータYDが格納されるブロックBLKの次のブロックBLK内に格納される。それにより、1ブロック分のユーザデータYDがデータバッファ12に確保される前に、前のブロックBLKに格納されるユーザデータYDに対して作成された第1リードソロモンパリティデータRS1及び第2リードソロモンパリティデータRS2を使用して次のブロックBLKに書き込むECCフレームの作成及び作成したECCフレームの不揮発性メモリ20への書込みを実行することが可能となるため、1ブロック分のユーザデータYDを確保されるまで不揮発性メモリ20への書込みを待機する時間を省略することが可能となる。その結果、書込み処理をより迅速に行なうことが可能となる。
なお、その他の構成、動作及び効果は、上述した実施形態と同様であるため、ここでは詳細な説明を省略する。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1…メモリシステム、10…メモリコントローラ、11…制御部、12…データバッファ、13…メモリI/F、14…符号化/復号部、15…ホストI/F、16…内部バス、17,27…符号化器、18…復号器、20…不揮発性メモリ、30…ホスト、101…ライトバッファメモリ、102…第1のRS符号化器、103…第2のRS符号化器、104…パリティバッファメモリ、105…ECC符号化器、106…ECC復号器、107…リードバッファメモリ、108…第1のRS復号器、109…第2のRS復号器、201…ブロック単位書込みモード管理部、301…第1セレクタ、302…第2セレクタ、303…セレクタ制御部、304…第1パリティバッファメモリ、305…第2パリティバッファメモリ、B1〜BK…ユーザデータフレーム、BLK,BLK1〜BLK4…ブロック、E1〜EK…リードECCフレーム、F1〜F(N_b/8)…ページ間データフレーム、IEP…インラインECCパリティ、OPT…空き領域、P1〜PK…ページ、R1〜RL…第1リードソロモンパリティフレーム、RS…リードソロモンパリティデータ、RS1…第1リードソロモンパリティデータ、RS2…第2リードソロモンパリティデータ、RS3…最終リードソロモンパリティデータ、S1〜SQ…ページ間リードソロモンパリティフレーム、T1〜T(K−M)…第1リードソロモンデータフレーム、U1〜UM…第2リードソロモンデータフレーム、YD…ユーザデータ。
Claims (10)
- それぞれ複数のページで構成された複数のブロックを備える不揮発性メモリと、
前記不揮発性メモリに対する書込み及び読出しを実行するメモリインタフェースと、
前記複数のブロックのうちの同一のブロックに書き込まれる複数のデータフレームをフレーム間方向に符号化して第1パリティデータを生成する第1符号化器と、
前記第1パリティデータを複数のパリティフレームに分割し、前記複数のパリティフレームをフレーム間方向に符号化して第2パリティデータを生成する第2符号化器と、
前記第1パリティデータの少なくとも一部及び/又は前記第2パリティデータの少なくとも一部と前記複数のデータフレームそれぞれとを連接して複数の第1フレームデータを生成し、前記複数の第1フレームデータそれぞれをフレーム内方向に符号化して複数の第3パリティデータを生成する第3符号化器と、
を備え、
前記メモリインタフェースは、前記複数の第1フレームデータそれぞれと前記複数の第3パリティデータそれぞれとを連接した複数の第2フレームデータを前記不揮発性メモリにおける同一ブロック内の前記複数のページに1つずつ書き込む
メモリシステム。 - 1ブロック分のデータフレームをバッファするライトバッファメモリをさらに備え、
前記第1符号化器は、前記ライトバッファメモリに前記1ブロック分の前記複数のデータフレームが格納された場合、前記複数のデータフレームを前記フレーム間方向に符号化して前記第1パリティデータを生成する
請求項1に記載のメモリシステム。 - 前記複数のブロックのうちの1つ以上のブロックに格納されている有効データを他のブロックに転記するガベージコレクションを実行する制御部をさらに備え、
前記複数のデータフレームは、前記1つ以上のブロックに格納されている前記有効データである
請求項1に記載のメモリシステム。 - 前記複数のブロックのうちの1つのブロックから読み出された前記第1パリティデータに、前記1つのブロックから読み出された前記第2パリティデータを用いた第1復号を実行する第1復号器と、
前記1つのブロックから読み出された前記複数のデータフレームに、前記第1復号により誤り訂正された前記第1パリティデータを用いた第2復号を実行する第2復号器と、
を備える請求項1に記載のメモリシステム。 - 前記1つのブロックから読み出された前記複数の第2フレームデータそれぞれに、前記複数の第2フレームデータそれぞれの前記第3パリティデータを用いた第3復号を実行する第3復号器をさらに備え、
前記第3復号器による前記第3復号に成功しなかった場合、前記第1復号器が前記第1復号を実行し、前記第2復号器が前記第2復号を実行する
請求項4に記載のメモリシステム。 - 前記第3復号器は、前記第2復号器による前記第2復号に成功しなかった場合、再度、前記第2復号により誤り訂正されたデータフレームの一部と前記第3パリティデータを用いた前記第3復号を実行する
請求項5に記載のメモリシステム。 - 前記第1パリティデータ及び前記第2パリティデータは、リードソロモン符号のパリティデータである請求項1に記載のメモリシステム。
- それぞれ複数のページで構成された複数のブロックを備える不揮発性メモリと、
前記不揮発性メモリに対する書込み及び読出しを実行するメモリインタフェースと、
前記複数のブロックのうちの第1ブロックに書き込まれる複数の第1データフレームをフレーム間方向に符号化して第1パリティデータを生成する第1符号化器と、
前記第1パリティデータを複数のパリティフレームに分割し、前記複数のパリティフレームをフレーム間方向に符号化して第2パリティデータを生成する第2符号化器と、
前記第1パリティデータの少なくとも一部及び/又は前記第2パリティデータの少なくとも一部を、前記複数のブロックのうちの前記第1ブロックとは異なる第2ブロックに書き込まれる複数の第2データフレームそれぞれとを連接して複数の第1フレームデータを生成し、前記複数の第1フレームデータそれぞれをフレーム内方向に符号化して複数の第3パリティデータを生成する第3符号化器と、
を備え、
前記メモリインタフェースは、前記複数の第1フレームデータそれぞれと前記複数の第3パリティデータそれぞれとを連接した複数の第2フレームデータを前記不揮発性メモリにおける同一ブロック内の前記複数のページに1つずつ書き込む
メモリシステム。 - 前記第2ブロックから読み出された前記第1パリティデータを、前記第2ブロックから読み出された前記第2パリティデータを用いて誤り訂正する第1復号器と、
前記第1ブロックから読み出された前記第1データフレームを、前記第2パリティデータを用いて誤り訂正された前記第1パリティデータを用いて復号する第2復号器と、
を備える請求項8に記載のメモリシステム。 - 前記第1パリティデータ及び前記第2パリティデータは、リードソロモン符号のパリティデータである請求項8に記載のメモリシステム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018055737A JP2019168897A (ja) | 2018-03-23 | 2018-03-23 | メモリシステム |
US16/104,233 US10756764B2 (en) | 2018-03-23 | 2018-08-17 | Memory system and control method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018055737A JP2019168897A (ja) | 2018-03-23 | 2018-03-23 | メモリシステム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2019168897A true JP2019168897A (ja) | 2019-10-03 |
Family
ID=67985895
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2018055737A Pending JP2019168897A (ja) | 2018-03-23 | 2018-03-23 | メモリシステム |
Country Status (2)
Country | Link |
---|---|
US (1) | US10756764B2 (ja) |
JP (1) | JP2019168897A (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6818667B2 (ja) * | 2017-09-20 | 2021-01-20 | キオクシア株式会社 | メモリシステム |
JP6960877B2 (ja) * | 2018-03-22 | 2021-11-05 | キオクシア株式会社 | メモリシステム |
JP2021044046A (ja) * | 2019-09-13 | 2021-03-18 | キオクシア株式会社 | メモリシステム、半導体集積回路、及びブリッジ通信システム |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS5017407B2 (ja) | 1971-12-28 | 1975-06-20 | ||
US7840868B2 (en) * | 2005-10-05 | 2010-11-23 | Lg Electronics Inc. | Method of processing traffic information and digital broadcast system |
WO2007136165A1 (en) * | 2006-05-23 | 2007-11-29 | Lg Electronics Inc. | Digital broadcasting system and method of processing data |
WO2007145411A1 (en) * | 2006-06-16 | 2007-12-21 | Lg Electronics Inc. | Digital broadcasting system and method of processing data |
WO2009005326A2 (en) * | 2007-07-04 | 2009-01-08 | Lg Electronics Inc. | Digital broadcasting system and method of processing data |
KR20110073932A (ko) | 2009-12-24 | 2011-06-30 | 주식회사 하이닉스반도체 | Ecc 회로를 포함하는 반도체 스토리지 시스템 및 그 제어 방법 |
JP5039160B2 (ja) * | 2010-03-02 | 2012-10-03 | 株式会社東芝 | 不揮発性半導体記憶システム |
JP5017407B2 (ja) | 2010-03-24 | 2012-09-05 | 株式会社東芝 | 半導体記憶装置 |
JP5426711B2 (ja) | 2011-06-08 | 2014-02-26 | パナソニック株式会社 | メモリコントローラ及び不揮発性記憶装置 |
US9189322B2 (en) * | 2012-08-31 | 2015-11-17 | Kabushiki Kaisha Toshiba | Memory system |
KR102081980B1 (ko) | 2012-10-08 | 2020-02-27 | 삼성전자 주식회사 | 메모리 시스템에서의 라이트 동작 또는 리드 동작 수행 방법 |
US10120793B2 (en) * | 2014-12-29 | 2018-11-06 | Toshiba Memory Corporation | Memory device and non-transitory computer readable recording medium |
TWI640865B (zh) * | 2017-09-05 | 2018-11-11 | 群聯電子股份有限公司 | 解碼方法、記憶體儲存裝置及記憶體控制電路單元 |
-
2018
- 2018-03-23 JP JP2018055737A patent/JP2019168897A/ja active Pending
- 2018-08-17 US US16/104,233 patent/US10756764B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US10756764B2 (en) | 2020-08-25 |
US20190296774A1 (en) | 2019-09-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2199911B1 (en) | Flash memory controller, error correction code controller therein, and the methods and systems thereof | |
KR101877106B1 (ko) | 데이터 스토리지 시스템들에 대한 데이터 신뢰도 스킴들 | |
US9465552B2 (en) | Selection of redundant storage configuration based on available memory space | |
US9159422B1 (en) | Cross page management to avoid NAND physical page size limitation | |
EP2734925B1 (en) | Systems and methods of storing data | |
US8065583B2 (en) | Data storage with an outer block code and a stream-based inner code | |
US20200350007A1 (en) | Multi-State Programming for Memory Devices | |
US8438457B2 (en) | Nonvolatile memory apparatus, memory controller, and memory system | |
US20180091172A1 (en) | Ecc and raid-type decoding | |
US9158623B2 (en) | Flash subsystem organized into pairs of upper and lower page locations | |
US9929750B2 (en) | Memory system | |
JP2015018451A (ja) | メモリコントローラ、記憶装置およびメモリ制御方法 | |
JP2019168897A (ja) | メモリシステム | |
US8856616B1 (en) | Two dimensional encoding for non-volatile memory blocks | |
JP2020155167A (ja) | 不揮発性メモリ | |
US8775902B2 (en) | Memory controller and storage device | |
US11086718B2 (en) | Memory system | |
US10922025B2 (en) | Nonvolatile memory bad row management | |
JP2021033530A (ja) | メモリシステム | |
JP2014134843A (ja) | メモリシステム | |
JP7438859B2 (ja) | メモリシステムおよび方法 | |
JP2022102785A (ja) | メモリシステム | |
JP2013218525A (ja) | 半導体記憶システム、メモリコントローラおよびメモリ制御方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A712 Effective date: 20180905 |