(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2025008462
(43)【公開日】2025-01-20
(54)【発明の名称】メモリシステム及び方法
(51)【国際特許分類】
G06F 12/02 20060101AFI20250109BHJP
G06F 12/04 20060101ALI20250109BHJP
G06F 12/00 20060101ALI20250109BHJP
G06F 11/10 20060101ALI20250109BHJP
【FI】
G06F12/02 510A
G06F12/04 530
G06F12/00 597U
G06F12/04 510A
G06F11/10 608
【審査請求】未請求
【請求項の数】14
【出願形態】OL
(21)【出願番号】P 2023110657
(22)【出願日】2023-07-05
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】及川 恒平
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160AA12
5B160AB25
5B160DA08
(57)【要約】 (修正有)
【課題】記憶領域を有効に利用するメモリシステム及び方法を提供すること。
【解決手段】実施形態に係るメモリシステムは、不揮発性のメモリデバイスと、メモリデバイスに第1エラー訂正フレーム(ECCフレーム0)と第2エラー訂正フレーム(ECCフレーム1)とを書き込むコントローラと、を具備する。第1エラー訂正フレームと前記第2エラー訂正フレームは、重複領域(R4、R5)を含む。第1エラー訂正フレームの重複領域以外の領域は、第1データと第1エラー訂正データ(P0)を含む。第2エラー訂正フレームの重複領域以外の領域は、第2データと第2エラー訂正データ(P1)を含む。重複領域は、第1データ(D0)の一部分と、第2データ(D1)の一部分とを含む。
【選択図】
図6
【特許請求の範囲】
【請求項1】
不揮発性のメモリデバイスと、
前記メモリデバイスに第1エラー訂正フレームと第2エラー訂正フレームとを書き込むコントローラと、を具備し、
前記第1エラー訂正フレームと前記第2エラー訂正フレームは重複領域を含み、
前記第1エラー訂正フレームの前記重複領域以外の領域は、第1データと第1エラー訂正データを含み、
前記第2エラー訂正フレームの前記重複領域以外の領域は、第2データと第2エラー訂正データを含み、
前記重複領域は、前記第1データの一部分と、前記第2データの一部分とを含む、メモリシステム。
【請求項2】
前記第1エラー訂正フレームと前記第2エラー訂正フレームは固定長のサイズであり、
前記第1データのサイズは、第1可変長サイズであり、
前記第2データのサイズは、第2可変長サイズである、請求項1記載のメモリシステム。
【請求項3】
前記第2エラー訂正フレームは、前記第2データの一部分の先頭位置を示すヘッダをさらに含む、請求項1記載のメモリシステム。
【請求項4】
前記重複領域は、前記第2データの一部分の先頭位置を示すヘッダをさらに含む、請求項1記載のメモリシステム。
【請求項5】
前記第1データのサイズは、可変長サイズであり、
前記可変長サイズの最大値は、前記重複領域のサイズ以下である、請求項1記載のメモリシステム。
【請求項6】
前記コントローラは、圧縮回路を備え、1個以上の単位データを前記圧縮回路により圧縮し、1個以上の可変長の圧縮データを生成し、
前記第1データは、前記1個以上の可変長の圧縮データを含み、
前記1個以上の可変長の圧縮データの各々のサイズの最大値は、前記重複領域のサイズ以下である、請求項1記載のメモリシステム。
【請求項7】
前記第1データのサイズの最大値は、第1サイズであり、
前記第2データのサイズの最大値は、第2サイズと第3サイズの和であり、
前記第2サイズは、前記第1データのサイズと前記第1サイズとの差と、前記重複領域のサイズとの中の小さいサイズである、請求項1記載のメモリシステム。
【請求項8】
前記コントローラは、前記第1データと、前記第2データの一部分とに基づいて前記第1エラー訂正データを生成する、請求項1記載のメモリシステム。
【請求項9】
前記コントローラは、前記第1エラー訂正データと、前記第1データと、前記第2データの一部分とに基づいて前記第1データのエラー訂正処理を行う、請求項1記載のメモリシステム。
【請求項10】
前記コントローラは、前記第1データと、前記第2データの一部分とに基づいて第3エラー訂正データを求め、
前記重複領域は、前記第3エラー訂正データを格納する、請求項1記載のメモリシステム。
【請求項11】
前記コントローラは、前記第3エラー訂正データと、前記第1データとに基づいて前記第1データのエラー訂正処理を行い、
前記第3エラー訂正データと、前記第2データとに基づいて前記第2データのエラー訂正処理を行う、請求項10記載のメモリシステム。
【請求項12】
前記第1エラー訂正フレームにおける前記第1エラー訂正データの保存位置と前記第1データの保存位置の順は、
前記第2エラー訂正フレームにおける前記第2エラー訂正データの保存位置と前記第2データの保存位置の順と、異なる、請求項1記載のメモリシステム。
【請求項13】
前記コントローラは、前記第1エラー訂正フレームと前記第2エラー訂正フレームを連続でリードする場合、前記重複領域を1回だけリードする、請求項1記載のメモリシステム。
【請求項14】
第1データと第2データを生成し、
一部が互いに重複する第1エラー訂正フレームと第2エラー訂正フレームとを生成し、
前記第1データと重複領域のデータから第1エラー訂正データを計算し、
前記第2データと前記重複領域のデータから第2エラー訂正データを計算し、
前記第1エラー訂正フレームの前記重複領域以外の領域は、前記第1データと前記第1エラー訂正データを含み、
前記第2エラー訂正フレームの前記重複領域以外の領域は、前記第2データと前記第2エラー訂正データを含み、
前記重複領域は、前記第1データの一部分と、前記第2データの一部分とを含み、
前記第1エラー訂正フレームと前記第2エラー訂正フレームとを不揮発性のメモリデバイスに書き込む方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、メモリシステム及び方法に関する。
【背景技術】
【0002】
メモリシステムは、データからエラー訂正のためのパリティを計算する。メモリシステムは、データとパリティとを含む一定サイズのError Correction Code(ECC)フレームを形成する。メモリシステムは、ECCフレームをメモリデバイスに書き込む。
【0003】
メモリシステムは、可変長データをメモリデバイスに書き込むことがある。可変長データの一例は、圧縮データである。可変長データを書き込む際、可変長データのサイズによっては、ECCフレームが無効なデータを含む可能性がある。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】米国特許出願公開第2011/131346号明細書
【特許文献2】米国特許出願公開第2008/46608号明細書
【特許文献3】米国特許出願公開第2022/46114号明細書
【発明の概要】
【発明が解決しようとする課題】
【0005】
本発明の目的は、記憶領域を有効に利用するメモリシステム及び方法を提供することである。
【課題を解決するための手段】
【0006】
実施形態に係るメモリシステムは、不揮発性のメモリデバイスと、メモリデバイスに第1エラー訂正フレームと第2エラー訂正フレームとを書き込むコントローラと、を具備する。第1エラー訂正フレームと前記第2エラー訂正フレームは、重複領域を含む。第1エラー訂正フレームの重複領域以外の領域は、第1データと第1エラー訂正データを含む。第2エラー訂正フレームの重複領域以外の領域は、第2データと第2エラー訂正データを含む。重複領域は、第1データの一部分と、第2データの一部分とを含む。
【図面の簡単な説明】
【0007】
【
図1】実施形態に係るメモリシステムの概略の一例を説明するための図。
【
図2】実施形態に係るメモリシステムがデータを圧縮してメモリデバイスに書き込む場合のECCフレームの構成の比較例を説明するための図。
【
図3】実施形態に係るメモリシステムがデータを圧縮してメモリデバイスに書き込む場合のECCフレームの構成の他の比較例を説明するための図。
【
図4】実施形態に係るメモリシステムにおけるECCフレームの構成の一例を説明するための図。
【
図5】実施形態に係るメモリシステムにおけるECCフレームの構成の他の例を説明するための図。
【
図6】実施形態に係るメモリシステムにおけるECCフレームの構成の具体的なサイズの一例を説明するための図。
【
図7】実施形態に係る情報処理システムの一例を説明するための図。
【
図8】実施形態に係るアドレス変換テーブルの一例を説明するための図。
【
図9】実施形態に係る書き込み処理の一例を説明するためのフローチャート。
【
図10】実施形態に係る書き込み処理の一例を説明するためのフローチャート。
【
図11】実施形態に係るECCフレームの作成の一例を説明するための図。
【
図12】実施形態に係る読み出し処理の一例を説明するためのフローチャート。
【
図13】第1実施形態に係るデータの伸張処理の一例を説明するための図。
【
図14】第2実施形態に係るメモリシステムにおけるECCフレームの構成の具体的な一例を説明するための図である。
【
図15】第3実施形態に係るメモリシステムにおけるECCフレームの構成の具体的な一例を説明するための図である。
【
図16】第4実施形態において、4個の連続したECCフレームをシーケンシャルリードする動作の一例を説明するための図である。
【発明を実施するための形態】
【0008】
以下、図面を参照して、実施形態を説明する。以下の説明は、実施形態の技術的思想を具体化するための装置や方法を例示するものであって、実施形態の技術的思想は、以下に説明する構成要素の構造、形状、配置、材質等に限定されるものではない。当業者が容易に想到し得る変形は、当然に開示の範囲に含まれる。説明をより明確にするため、図面において、各要素のサイズ、厚み、平面寸法又は形状等を実際の実施態様に対して変更して模式的に表す場合もある。複数の図面において、互いの寸法の関係や比率が異なる要素が含まれることもある。複数の図面において、対応する要素には同じ参照数字を付して重複する説明を省略する場合もある。いくつかの要素に複数の呼称を付す場合があるが、これら呼称の例はあくまで例示であり、これらの要素に他の呼称を付すことを否定するものではない。また、複数の呼称が付されていない要素についても、他の呼称を付すことを否定するものではない。なお、以下の説明において、「接続」は直接接続のみならず、他の要素を介した接続を含む場合もある。
【0009】
図1は、第1実施形態に係るメモリシステム10の概略の一例を説明するための図である。メモリシステム10は、不揮発性のメモリデバイス12を含む。不揮発性メモリの一例は、NAND型フラッシュメモリである。メモリシステム10には、ホスト(
図1には示されない)との間でコマンド、データを転送するためのインタフェース14が定義されている。
【0010】
メモリデバイス12は、複数のページを格納する。ページは、複数のECCフレームを含む。
図1は、1ページが4個のECCフレームを含む例を示す。ECCフレームは、データとパリティを格納する。サイズの一例を次に示す。データのサイズは1024バイトであり、パリティのサイズは118バイトであり、ECCフレームのサイズは1142バイトであり、ページのサイズは4568バイトである。
【0011】
ページは、複数のECCフレームではなく、単一のECCフレームからなってもよい。
【0012】
書き込み(ライト)の際、メモリシステム10は、複数(例えば8個)の128バイト単位のデータ(合計1024バイト)から118バイトのパリティを計算する。メモリシステム10は、データとパリティとから1142バイトのECCフレームを生成し、ECCフレームをメモリデバイス12に書き込む。
【0013】
読み出し(リード)の際、メモリシステム10は、メモリデバイス12からECCフレームを読み出し、ECCフレームの中からパリティとデータを取り出す。メモリシステム10は、パリティに基づいてデータのエラー訂正を行なう。
【0014】
メモリシステム10は、メモリ使用量削減やデータ転送速度向上のため、データを圧縮してメモリデバイス12に書き込むことがある。
【0015】
図2は、第1実施形態に係るメモリシステム10がデータを圧縮してメモリデバイス12に書き込む場合のECCフレームの構成の比較例を説明するための図である。
【0016】
ECCフレームは、データ領域24、無効領域26、及びパリティ領域28を含む。データ領域24は、データストリームDを含む。データストリームDは、
図1のデータに対応する。無効領域26は、無効なデータを含む。各領域24、26、28のサイズの一例を次に示す。データ領域24と無効領域26の合計サイズは1024バイトである。パリティ領域28のサイズは118バイトである。データ領域24と無効領域26のそれぞれのサイズは可変である。
【0017】
メモリシステム10は、一定サイズ、例えば128バイトの単位データを圧縮し、少なくとも1つの圧縮データをデータストリームDとしてECCフレーム0のデータ領域24に書き込む。圧縮方式の一例は、可逆圧縮方式である。可逆圧縮方式では、圧縮データは可変長サイズである。
【0018】
メモリシステム10は、データストリームDのサイズが1024バイトを超える、すなわちデータ領域24に空きがなくなると、データ領域24へ圧縮データを書き込むことを中止する。圧縮データは可変長サイズであるので、データ領域24に空きがなくなるのは、大概の場合、圧縮データの一部分をデータ領域24に書き込んだ時点である。
【0019】
例えば、単位データ22の圧縮データの一部分をデータストリームD0としてECCフレーム0のデータ領域24に書き込んだ時点でデータ領域24に空きがなくなると、メモリシステム10は、圧縮データの書き込みを中止する。書き込みの中止後、メモリシステム10は、単位データ22の圧縮データの全てをデータストリームD1としてECCフレーム1のデータ領域24の先頭部分に書き込む。以降、メモリシステム10は、圧縮データをECCフレーム1のデータ領域24に順次書き込む。
【0020】
ECCフレーム0のデータ領域24に格納されている単位データ22の圧縮データの一部分は、後にリードされても利用できない無効なデータである。圧縮データの一部分の書き込みが中止されると、無効データを含むデータ領域24は無効領域26に変更される。無効領域26の平均サイズは条件によって変わるが、例えばECCフレームあたり数10バイト程度である。このため、メモリデバイスの記憶領域の数%が無効領域26になる可能性がある。
【0021】
メモリシステム10は、データ領域24に含まれるデータストリームD0に基づいてパリティP0を計算する。メモリシステム10は、パリティP0をパリティ領域26に書き込む。
【0022】
図3は、第1実施形態に係るメモリシステム10がデータを圧縮してメモリデバイス12に書き込む場合のECCフレームの構成の他の比較例を説明するための図である。データの圧縮方式やデータ、各領域のサイズは、
図2の比較例の場合と同じとする。
【0023】
ページの最後のECCフレーム以外のECCフレームは、1024バイトのデータ領域34と118バイトのパリティ領域38を含み、無効領域を含まない。ページの最後のECCフレームは、1024バイトのデータ領域とパリティ領域と無効領域を含む。
【0024】
メモリシステム10は、128バイト単位のデータを圧縮し、少なくとも1つの可変長サイズの圧縮データをデータストリームDとしてデータ領域34に書き込む。
【0025】
メモリシステム10は、データストリームDのサイズが1024バイトを超える、すなわちデータ領域34に空きがなくなると、データ領域34へ圧縮データを書き込むことを中止する。
【0026】
例えば、データ32の圧縮データの一部分をECCフレーム0のデータ領域34に書き込んだ時点でデータ領域34に空きがなくなると、メモリシステム10は、ECCフレーム0のデータ領域34への圧縮データの書き込みを中止する。書き込みの中止後、メモリシステム10は、データ32の圧縮データの残りの部分をデータストリームD0としてECCフレーム1のデータ領域34の先頭部分に書き込む。以降、メモリシステム10は、圧縮データをECCフレーム1のデータ領域34に順次書き込む。
【0027】
メモリシステム10は、ECCフレーム0のデータ領域34とECCフレーム1のデータ領域34に含まれるデータストリームD0に基づいてパリティP0を計算する。メモリシステム10は、パリティP0をパリティ領域38に書き込む。
【0028】
図2の例では、ECCフレーム1のデータ領域24は、128バイトの単位データ22の圧縮データの全てをデータストリームD1として含む。そのため、各ECCフレームは無効領域26を含む。
図3の例では、1個の128バイトのデータ32の圧縮データは、2個のサブ圧縮データに分割される。2個のECCフレーム0、1は、2個のサブ圧縮データをそれぞれデータストリームD0として含む。ページの最後のECCフレームは無効領域を含む可能性があるが、それ以外のECCフレームは無効領域を含まない。そのため、
図3の例の無効領域のサイズは、
図2の例の無効領域のサイズより小さい。
【0029】
しかし、
図3の例では、1個の単位データ32をリードするためには、2個のECCフレームをリードする必要がある。このため、データリード時に、ホスト32とのデータ通信回数が増え、インタフェースの帯域をより多く消費し、性能が低下する可能性がある。
【0030】
図4は、第1実施形態に係るメモリシステム10におけるECCフレームの構成の一例を説明するための図である。
【0031】
各ページは、4個のECCフレームを含む。隣り合った2個のECCフレームは重複領域を有する。
図4(a)は、ECCフレーム0、1の構成の一例を示す。
図4(b)は、ECCフレーム2、3の構成の一例を示す。
【0032】
ECCフレーム0は、6個の領域R0-R5を含む。領域R0、R1、R2、R3それぞれのサイズは一定である。領域R4、R5の合計それぞれのサイズは一定である。領域R4、R5それぞれのサイズは可変である。領域R0のサイズは領域R4、R5の合計のサイズと等しい。
【0033】
領域R0は、データストリームD0の先頭部分を含む。領域R1は、ヘッダH0を含む。ヘッダH0は、データストリームD0の先頭に対応するメモリデバイス12のアドレスを示す。領域R2は、データストリームD0のパリティP0を含む。領域R3、R4は、データストリームD0を含む。領域R5は、データストリームD1の先頭部分を含む。
【0034】
領域R4、R5は、ECCフレーム1にも含まれ、ECCフレーム0とECCフレーム1の重複領域である。データストリームD0の末尾部分は、重複領域の途中(領域R4)まで書き込まれる。データストリームD1は、重複領域の途中(領域R5)から書き込まれる。
【0035】
ECCフレーム1は、7個の領域R4-R10を含む。領域R6、R7、R8それぞれのサイズは一定である。領域R9、R10の合計のサイズは一定である。領域R9、R10それぞれのサイズは可変である。領域R9、R10の合計のサイズは、領域R4、R5の合計のサイズと等しい。
【0036】
領域R6は、ヘッダH1を含む。ヘッダH1は、データストリームD1の先頭を格納するメモリデバイス12のアドレスを示す。領域R7は、データストリームD1のパリティP1を含む。領域R8、R9は、データストリームD1を含む。領域R10は、データストリームD2の先頭部分を含む。
【0037】
領域R9、R10は、ECCフレーム2にも含まれ、ECCフレーム1とECCフレーム2の重複領域である。データストリームD1の末尾部分は、重複領域の途中(領域R9)まで書き込まれる。データストリームD2は、重複領域の途中(領域R10)から書き込まれる。
【0038】
ECCフレーム2は、7個の領域R9-R15を含む。領域R11、R12、R13それぞれのサイズは一定である。領域R14、R15の合計のサイズは一定である。領域R9、R10それぞれのサイズは可変である。領域R9、R10の合計のサイズは、領域R4、R5の合計のサイズと等しい。
【0039】
領域R11は、ヘッダH2を含む。ヘッダH1は、データストリームD2の先頭に対応するメモリデバイス12のアドレスを示す。領域R12は、データストリームD2のパリティP2を含む。領域R13、R14は、データストリームD2を含む。領域R15は、データストリームD3の先頭部分を含む。
【0040】
領域R14、R15は、ECCフレーム3にも含まれ、ECCフレーム2とECCフレーム3の重複領域である。データストリームD2の末尾部分は、重複領域の途中(領域R14)まで書き込まれる。データストリームD3は、重複領域の途中(領域R10)から書き込まれる。
【0041】
ECCフレーム3は、6個の領域R14-R19を含む。領域R16、R17それぞれのサイズは一定である。
【0042】
領域R16は、ヘッダH3を含む。ヘッダH3は、データストリームD3の先頭に対応するメモリデバイス12のアドレスを示す。領域R17は、データストリームD3のパリティP3を含む。領域R18は、データストリームD3を含む。領域R19は、無効データを含む無効領域である。無効領域R19は、無効領域26(
図2)と対応する。
【0043】
ヘッダを含む領域R1、R6、R11、R16のサイズは互いに等しい。パリティを含む領域R2、R7、R12、R17のサイズは互いに等しい。重複領域R4とR5の合計のサイズ、重複領域R9とR10の合計のサイズ、及び重複領域R14とR15の合計のサイズは、互いに等しい。
【0044】
第1実施形態に係るメモリシステム10は、隣接するECCフレームの一部が互いに重複するようなECCフレームを生成する。ECCフレームは、無効領域R19を含まず、1個のデータストリームの全体を含む。第1データストリームと第2データストリームの境界は重複領域に位置する。これにより、リード時のデータ転送回数を増やさずに、メモリデバイスの無効領域を減らすことができる。
【0045】
2個のデータストリームの境界の全てが重複領域に位置することは必須ではない。2個のデータストリームの境界の中の少なくとも1つが重複領域に位置しなくてもよい。
図5は、第1実施形態に係るメモリシステム10におけるECCフレームの構成の他の例を説明するための図である。
【0046】
各ページは、4個のECCフレームを含む。隣り合った2個のECCフレームは重複領域を有する。
図5(a)は、ECCフレーム0、1の構成の一例を示す。
図5(b)は、ECCフレーム2、3の構成の一例を示す。
【0047】
ECCフレーム0は、6個の領域R30-R35を含む。領域R30、R31、R32、R35それぞれのサイズは一定である。領域R33、R34のサイズは可変である。領域R30のサイズは領域R35のサイズと等しい。
【0048】
領域R30は、データストリームD0の先頭部分を含む。領域R31は、ヘッダH0を含む。ヘッダH0は、データストリームD0の先頭に対応するメモリデバイス12のアドレスを示す。領域R32は、データストリームD0のパリティP0を含む。領域R33は、データストリームD0を含む。領域R34は、無効データを含む。無効領域R34は、無効領域26(
図2)と対応する。
【0049】
領域R35は、ECCフレーム1にも含まれ、ECCフレーム0とECCフレーム1の重複領域である。重複領域R35は、ECCフレーム0のデータストリームD0を含まず、ECCフレーム1のデータストリームD1の先頭部分を含む。
【0050】
ECCフレーム1は、6個の領域R35-R40を含む。領域R36、R37の合計のサイズは一定である。領域R38のサイズは可変である。領域R39、R40の合計のサイズは一定である。領域R36、R37の合計のサイズは、領域R35のサイズと等しい。
【0051】
領域R36は、ヘッダH1を含む。ヘッダH1は、データストリームD1の先頭に対応するメモリデバイス12のアドレスを示す。領域R37は、データストリームD1のパリティP1を含む。領域R38は、データストリームD1を含む。
【0052】
領域R39、R40は、ECCフレーム2にも含まれ、ECCフレーム1とECCフレーム2の重複領域である。データストリームD1の末尾部分は、重複領域の途中(領域R39)まで書き込まれる。データストリームD2は、重複領域の途中(領域R40)から書き込まれる。
【0053】
ECCフレーム2は、7個の領域R39-R45を含む。領域R41、R42、R43それぞれのサイズは一定である。領域R44、R45の合計のサイズは一定である。領域R44、R450それぞれのサイズは可変である。領域R39、R40の合計のサイズは、領域R44、R45の合計のサイズと等しい。
【0054】
領域R41は、ヘッダH2を含む。ヘッダH1は、データストリームD2の先頭を格納するメモリデバイス12のアドレスを示す。領域R42は、データストリームD2のパリティP2を含む。領域R43、R44は、データストリームD2を含む。領域R45は、データストリームD3の先頭部分を含む。
【0055】
領域R44、R45は、ECCフレーム3にも含まれ、ECCフレーム2とECCフレーム3の重複領域である。データストリームD2の末尾部分は、重複領域の途中(領域R44)まで書き込まれる。データストリームD3は、重複領域の途中(領域R45)から書き込まれる。
【0056】
ECCフレーム3は、6個の領域R44-R49を含む。領域R46、R47それぞれのサイズは一定である。領域R48、R49の合計のサイズは一定である。領域R48、R49それぞれのサイズは可変である。
【0057】
領域R46は、ヘッダH3を含む。ヘッダH3は、データストリームD3の先頭に対応するメモリデバイス12のアドレスを示す。領域R47は、データストリームD3のパリティP3を含む。領域R48は、データストリームD3を含む。領域R49は、無効データを含む無効領域である。無効領域R49は、無効領域26(
図2)と対応する。
【0058】
ヘッダを含む領域R31、R36、R41、R46それぞれのサイズは、互いに等しい。パリティを含む領域R32、R37、R42、R47それぞれのサイズは、互いに等しい。重複領域R35のサイズ、重複領域R39とR40の合計のサイズ、及び重複領域R44とR45の合計のサイズは、互いに等しい。
【0059】
図5の例では、ECCフレーム0とECCフレーム1との重複領域R35は、ECCフレーム0のデータストリームD0を含まず、ECCフレーム1のデータストリームD1しか含まない。そのため、ECCフレーム0には無効領域R34が生じてしまう。
【0060】
2個のデータストリームの境界が重複領域に位置する確率が高ければ、無効領域のサイズは小さい。2個のデータストリームの境界の全てが常に重複領域に位置する場合、無効領域のサイズは最も小さくなる。
図4のECCフレームを実現するためには、圧縮データが1個増えた時のデータストリームのサイズの増加量(言い換えると、データ領域の空きサイズの減少量)が重複領域のサイズ以下であればよい。圧縮前のデータが128バイト単位である場合、圧縮データの最大サイズは128バイトである。圧縮データが1個増えた時のデータストリームのサイズの増加量の最大値は128バイトである。そのため、ECCフレームの重複領域のサイズを128バイトに設定すれば、
図4のECCフレームが実現される。
【0061】
重複領域のサイズが大きくなると、パリティ領域のサイズも大きくなるので、データ領域のサイズは小さくなる。重複領域のサイズが128バイトより小さい場合、
図4のECCフレームが実現されず、
図5のECCフレームが実現される可能性がある。
【0062】
図4、
図5の例では、重複領域以外の領域、例えば領域R1、R6、R11、R16がヘッダを含むが、メモリシステムに要求される性能、コストに応じて、重複領域がヘッダを含んでもよい。例えば、重複領域の先頭、または末尾がヘッダを含んでもよい。さらに、データを格納するメモリデバイス以外の他のメモリデバイスがヘッダを含んでもよい。
【0063】
隣接するECCフレームと一部分が重複する4個のECCフレームのフォーマット(データストリームのサイズ/保存位置、パリティのサイズ/保存位置等)は全て同じでもよいし、異なっていてもよい。フォーマットが揃っていると、複数種類のパリティ生成処理やエラー訂正処理が不要であり、一種類のパリティ生成処理やエラー訂正処理で済む。
【0064】
第1実施形態に係るメモリシステム10によれば、圧縮データ等の可変長データを格納する場合、無効領域を削減できる。
図2に示す比較例では、各ECCフレームは1個の無効領域を含むが、
図4に示す第1実施形態では、4フレーム(ページ)で1個の無効領域を含むので、無効領域の数を約1/4に削減でき、データストリームを記憶する領域を増やすことができる。
【0065】
さらに、
図4及び
図5に示す第1実施形態では、どの単位データ(128バイト)をリードする場合でも、リードする必要のあるECCフレームの個数は1個である。
図3に示す比較例では、複数(大概2個であるが、単位データのサイズが大きい場合は、3つ以上の場合もある)のECCフレームが1個の単位データの圧縮データを含む。1個の単位データをリードするためには、複数のECCフレームをリードする可能性がある。そのため、
図4及び
図5に示す第1実施形態は、1個の単位データをリードするためには、単一のECCフレームをリードすればよい。
図4及び
図5に示す第1実施形態は、
図3に示す比較例に比べて、データリード時にホスト32とのデータ通信回数が減り、インタフェースの帯域の消費量が減り、性能が向上する。
【0066】
第1実施形態の効果について、具体的な値を使って説明する。
図6は、第1実施形態に係るメモリシステム10におけるECCフレームの構成の具体的なサイズの一例を説明するための図である。
図6は、
図4の各領域にサイズ(単位:バイト)を記入したものである。
【0067】
図1に示すメモリデバイス12の記憶領域は、4個のECCフレームを含むページ(4568バイト)を含むとする。ECCフレームのデータ領域のサイズは1024バイトであるとする。メモリシステム10は、1単位(128バイト)のデータを圧縮し、複数の圧縮データからデータストリームを生成するとする。メモリシステム10に必要なエラー訂正能力は、ECCフレーム当たり60ビットであるとする。ECCとして、BCH符号が使われる場合、パリティのサイズをp(ビット)、圧縮データのサイズをk(ビット)、ECCフレーム当たりの訂正可能ビット数をtとすると、以下の関係が成り立つ符号が実現可能である(mは整数)。
【0068】
p=mt 式1
k<2
m-p 式2
ここでは、t=60、k=8192(=1024×8)である。式1と式2が成り立つmの最小値は14である。式1から、パリティビット長pの最小値は840ビット(105バイト)となる。4個のECCフレームに必要なサイズの最小値は、4516(=(1024+105)×4)バイトである。4個のECCフレームのサイズは、ページサイズ(4568バイト)に対して52バイト余っている。
図2に示す比較例によれば、ECCフレームのサイズを単純に大きくすることにより、1ページあたり約52バイトの記憶容量改善は可能である。
【0069】
次に、第1実施形態による記憶容量の改善について説明する。第1実施形態に係るECCフレームは、
図3に示すECCフレームに比べて、重複領域(データ単位と同じ128バイトとする)とヘッダ(2バイトとする)が増加され、ECCフレームのサイズは大きくなる。そのため、その分訂正能力を上げる必要がある。
図6は、1ページあたりの総データサイズは4096バイトのまま、パリティをできる限り増やして訂正能力を向上した場合のECCフレームの構成の一例を示す。
【0070】
ECCフレームのサイズは、1238バイト(データ:1120バイト+ヘッダ:2バイト+パリティ:116バイト)であるとする。訂正可能ビット数は66ビット(=p/m=116×8/14)である。訂正可能ビット数(66ビット)は、元の60ビットに対して1.1(=6.6/6.0)倍になっている。訂正可能ビット数の増加率は、ECCフレームのサイズの増加率1.097(=1238/1129)に見合っている。
【0071】
無効領域の1個当たりの平均サイズを40バイトであると仮定する。
図2に示す比較例では、1ページあたりの無効領域は160バイトである。
図6に示す第1実施形態によれば、1ページあたりの無効領域は40バイトである。
図6に示す第1実施形態の無効領域は、
図2に示す比較例に比べて120バイト削減される。つまり、記憶容量が120バイト改善したと言える。
図2に示す比較例による記憶容量の改善量は52バイトだったので、第1実施形態によれば、比較例よりも1ページ(データ4096バイト)あたり68バイト(=120-52)の記憶容量を改善できたと言える。
【0072】
図7は、第1実施形態に係る情報処理システム1の一例を説明するための図である。情報処理システム1は、メモリシステム10とホスト32を備える。
【0073】
ホスト32は、メモリシステム10にアクセスする情報処理装置である。メモリシステム10は、ホスト32のメインストレージとして使用され得る。メモリシステム10は、ホスト32に内蔵されてもよいし、ホスト32の外部に設けられ、ホスト32にケーブルまたはネットワークを介して接続されてもよい。ホスト32は、大量且つ多様なデータをメモリシステム10に保存するサーバ(ストレージサーバ)であってもよい。ホスト32は、パーソナルコンピュータであってもよい。メモリシステム10は、データセンター等のサーバに組み込まれるビジネスユース向けのシステムであってもよい。メモリシステム10はパーソナルコンピュータに組み込まれるパーソナルユース向けのシステムであってもよい。メモリシステム10の例は、SSD(Solid State Drive)、HDD(Hard Disk Drive)である。以下の説明では、メモリデバイス12はNAND型フラッシュメモリ12と称される。
【0074】
メモリシステム10は、NAND型フラッシュメモリ12、DRAM(Dynamic Random Access Memory)44、及びコントローラ44を備える。NAND型フラッシュメモリ12の代わりに、NOR型フラッシュメモリ、MRAM(Magneto-resistive Random Access Memory)、PRAM(Phase change Random Access Memory)、ReRAM(Resistive Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)を用いてもよい。NAND型フラッシュメモリ12は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。メモリセルアレイは、2次元構造でもよいし、3次元構造でもよい。
【0075】
DRAM44は、揮発性メモリの一例である。DRAM44は、例えばDDR3L(Double Data Rate 3 Low voltage)規格のDRAMである。DRAM44はライトバッファ46、リードバッファ48、アドレス変換テーブル50等を含む。ホスト32からメモリシステム10に供給され、NAND型フラッシュメモリ12に書き込まれている途中あるいは未書き込みのデータがライトバッファ46に格納される。NAND型フラッシュメモリ12から読み出され、ホスト32に転送中のデータあるいは未転送のデータがリードバッファ48に格納される。DRAM44は、メモリシステム10の動作中に用いられるデータや、コントローラ44において実行されるソフトウェアの一時的なバッファとしても機能する。DRAM44は、コントローラ44の外部に設けるのではなく、コントローラ44の内部に設けてもよい。なお、揮発性メモリとしては、DRAM44の代わりに、より高速アクセスが可能なSRAM(Static Random Access Memory)を用いてもよい。
【0076】
コントローラ44は、ホスト32から送信されるコマンドに従って、ホスト32から送信されるデータを圧縮して、圧縮データをNAND型フラッシュメモリ12に書き込む、又はNAND型フラッシュメモリ12から圧縮データを読み出し、読み出したデータを伸張する。コントローラ44は、SoC(System on a Chip)のような回路によって構成され得る。コントローラ44は、メモリシステム10の動作を司る。コントローラ44は、ホストインタフェース(ホストI/F回路と称する)52、CPU54、NANDインタフェース(NAND I/F回路と称する)56、DRAMインタフェース(DRAM I/F回路と称する)58、圧縮回路60、伸張回路62、ECCエンコーダ64、及びECCデコーダ66を備える。
【0077】
ホストI/F回路52は、ホスト32と通信する。ホスト32との通信は、例えばPCI ExpressTM規格に従う。ホストI/F回路52は、ホスト32からのコマンドを受信する。
【0078】
NAND I/F回路56は、CPU54の制御の下、NAND型フラッシュメモリ12を制御するメモリ制御回路である。NAND I/F回路56とNAND型フラッシュメモリ12とは、複数のチャネルChで接続される。NAND型フラッシュメモリ12は、多数のメモリチップからなる。複数のメモリチップが各チャネルに接続される。
【0079】
DRAM I/F回路58は、CPU54の制御の下、DRAM44を制御するDRAM制御回路である。
【0080】
圧縮回路60は、ホスト32から送信されたデータを可逆圧縮方式により圧縮する。圧縮データは可変長のデータである。ECCエンコーダ64は、圧縮データからECCフレームを生成する。NAND I/F回路56は、ECCフレームをNAND型フラッシュメモリ12に書き込む。
【0081】
NAND I/F回路56は、NAND型フラッシュメモリ12からECCフレームを読み出す。ECCデコーダ66は、ECCフレームから抽出した圧縮データに誤り訂正処理を施す。伸張回路62は、誤り訂正処理後の圧縮データを可逆伸張方式により伸張する。ホストI/F回路52は、伸張後のデータをホスト32へ送信する。
【0082】
圧縮回路60、伸張回路62、ECCエンコーダ64、及びECCデコーダ66の一部又は全ては、CPU54がファームウェアを実行することによって実現されてもよい。圧縮回路60、伸張回路62、ECCエンコーダ64、及びECCデコーダ66の一部又は全ては、メモリシステム10の外部に設けられていてもよい。メモリシステム10の外部とは、例えば、ホスト32又はホスト32がさらに接続されるサーバである。
【0083】
図8は、第1実施形態に係るアドレス変換テーブル50の一例を説明するための図である。アドレス変換テーブル50は、ホストアドレスに対応するECCフレームIDと、ECCフレーム内のデータ領域の先頭位置の情報(オフセットと称される)を格納する。
【0084】
図9は第1実施形態に係る書き込み処理の一例を説明するためのフローチャートである。
図9に示す書き込み処理は、ホスト32からライトコマンドが発行される毎に1回実行される。
【0085】
CPU54は、ホスト32から送信されたライトコマンドを受信する(S102)。
【0086】
CPU54は、ライトコマンドの内容に応じてライトデータをライトバッファ46に書き込むとともにライトコマンドで指定されたホストアドレスもライトバッファ46に書き込む(S104)。ライトデータは、所定サイズ単位のデータである。所定サイズは、例えば128バイトである。
【0087】
CPU54は、ホスト32にライト完了を通知し(S106)、処理を終了する。なお、この通知は省略してもよい。
【0088】
図10は第1実施形態に係る書き込み処理の一例を説明するためのフローチャートである。
図10に示す書き込み処理は、4個のECCフレーム用のデータがライトバッファ46に格納されると、1回実行される。
図11は第1実施形態に係るECCフレームの作成の一例を説明するための図である。
【0089】
CPU54は、ライトバッファ46に格納されている単位データを読み出し、圧縮回路60を用いて単位データを圧縮し、圧縮データを連結して1番目のECCフレーム用の1番目のデータストリームD0を生成する(S108)。
図11(a)は、ライトバッファ46から読み出される単位データの一例を示す。
【0090】
1個目の単位データの読み出し時、CPU54は、圧縮データをデータストリームD0とする。2個目以降の単位データの読み出し時、CPU54は、データストリームD0に圧縮データを加算し、加算結果を新たなデータストリームD0とする。
【0091】
CPU54は、128バイトの単位データの圧縮データが2個のデータストリームに分割されることがなく、必ず1個のデータストリームに入るようにデータストリームを生成する。CPU54は、或る圧縮データを或るデータストリームに加算した結果或るデータストリームのサイズが上限サイズを超える場合、或るデータストリームへの或る圧縮データの加算を行わず、或るデータストリームの次のデータストリームに或る圧縮データを加算する。
【0092】
ECCフレームは固定サイズである。圧縮データは可変長データであるので、データストリームサイズは上限サイズ以下にする必要がある。上限サイズはデータストリームによって異なる。1番目のデータストリームD0の上限サイズは1120バイトである。2番目のデータストリームD1の上限サイズは992バイト+α0である。α0は、1番目のデータストリームD0の上限サイズと1番目のデータストリームD0の実際のサイズの差の余りサイズである。3番目のデータストリームD2の上限サイズは992バイト+α1である。α1は、2番目のデータストリームD1の上限サイズと2番目のデータストリームD1の実際のサイズの差の余りサイズである。4番目のデータストリームD3の上限サイズは992バイト+α2である。α2は、3番目のデータストリームD2の上限サイズと3番目のデータストリームD2の実際のサイズの差の余りサイズである。
【0093】
例えば、1番目のデータストリームD0が1110バイトであり、10バイト余ったとすると、CPU54は、992+10=1002バイト以下である2番目のデータストリームD1を生成する。
【0094】
CPU54は、ライトバッファ46に格納されている単位データを読み出し、圧縮回路60を用いて単位データを圧縮し、圧縮データを連結して2番目-4番目のECCフレーム用の2番目-4番目のデータストリームD1-D3を生成する(S110)。
図11(b)は、データストリームD1-D3の一例を示す。
【0095】
CPU54は、データストリームD0-D3が記録されるECCフレームのIDと、ECCフレーム内のデータ位置(オフセット)をアドレス変換テーブル50(
図8)に書き込む(S112)。
【0096】
CPU54は、データストリームD0-D3に挿入するヘッダH0-H3を計算する(S114)。1番目のデータストリームD0の先頭位置はECCフレーム先頭位置であるので、ヘッダH0は常に0である。そのため、ヘッダH0は無くてもよいが、ヘッダをつけると、4つのECCフレームのフォーマットを揃えることができる。そのため、ECCデコーダ64のデコード処理を共通化できる。
【0097】
1番目のデータストリームD0が1110バイトであったとすると、2番目のデータストリームD1は、ECCフレーム0、1の重複領域(128バイト)の後半(10バイト)領域に配置される。2番目のデータストリームD1の先頭位置は、ECCフレーム1の先頭から118(=128-10)バイト目になるので、ヘッダH1は118である。同様に残りのヘッダH2、H3も生成する。
図11(c)は、ECCフレームにおけるデータストリームとヘッダの配置の一例を示す。
【0098】
CPU54は、データストリームD0-D3、ヘッダH0-H3に対してECCパリティP0-P3をそれぞれ生成して、ECCフレーム0-3に挿入する(S116)。隣接する2個のECCフレームの一部は重複しており、重複領域のデータは隣接する2個のECCフレームのパリティ生成に使われる。
【0099】
CPU54は、このようにして生成された4個のECCフレームを1ページのデータとしてNAND I/F回路56によりNAND型フラッシュメモリ12に書き込む(S118)。NAND型フラッシュメモリ12に書き込む(S118)。NAND型フラッシュメモリ12に書き込まれるページの一例は、
図6(a)、(b)に示すものと同じである。
【0100】
図12は第1実施形態に係る読み出し処理の一例を説明するためのフローチャートである。
図13は第1実施形態に係るデータの伸張処理の一例を説明するための図である。
【0101】
CPU54は、ホスト32から送信されたリードコマンドを受信する(S202)。
【0102】
CPU54は、リードコマンドが指定するホストアドレスのデータがライトバッファ46に格納されているか否かを判定する(S204)。
【0103】
CPU54は、ホストアドレスのデータがライトバッファ46に格納されていることを判定する場合(S204;YES)、そのデータをホスト32に転送する(S206)。
【0104】
CPU54は、ホストアドレスのデータがライトバッファ46に格納されていないことを判定する場合(S204;NO)、アドレス変換テーブル50からホストアドレスに対応するECCフレームIDとオフセットを読み出す(S208)。
図13(a)は、NAND型フラッシュメモリ12に書き込まれるページの一例を示す。
図13(a)は、
図6(a)、(b)に示すものと同じである。
【0105】
CPU54は、ECCフレームIDが指すECCフレームをNAND型 I/F回路56によりNAND型フラッシュメモリ12から読み出す(S210)。
図13(b)は、読み出されたECCフレームの一例を示す。各ECCフレームは隣のECCフレームのデータも含む。
【0106】
CPU54は、ECCデコーダ66によりECCフレームに含まれるパリティに基づいてECCフレームにエラー訂正処理を行う(S212)。
図13(c)は、エラー訂正処理後のECCフレームの一例を示す。
【0107】
CPU54は、ECCフレームからヘッダを読み出す(S214)。CPU54は、ヘッダに基づいてECCフレームからデータストリームを読み出す(S216)。
図13(d)は、データストリームD1、D2の一例を示す。
【0108】
CPU54は、伸張回路62によりデータストリームを伸張し、複数のデータ(非圧縮データ)を取得する(S218)。
図13(e)は、複数の非圧縮データの一例を示す。伸張回路62は、データストリームの終端を認識することができないので、正確なデータサイズが分からなくても伸長できるアルゴリズムを使用する。8バイトの0を1ビットに圧縮する方式の場合、圧縮データのサイズが分からなくても、伸張処理が可能である。圧縮データの正確なサイズが必要な伸張方式を使う場合は、ヘッダが重複領域に含まれるようなデータ配置にすればよい。
【0109】
CPU54は、アドレス変換テーブル50を参照して取得したデータの中からオフセットが指すデータを選んでホスト32に転送する(S220)。
【0110】
CPU54は、ホスト32にリード完了を通知する(S222)。この通知は省略してもよい。
【0111】
なお、第1実施形態のメモリシステム10は、圧縮データの終端を認識しない状況で圧縮データを伸張し、余分な非圧縮データを取得したとしても、ライト処理の段階で有効データを指すオフセットがアドレス変換テーブル50に書き込まれているので、余分な非圧縮データを選ぶことがない。そのため、メモリシステム10は、正しいデータのみホスト32に転送すること(S220)ができる。
【0112】
第1実施形態によれば、ECCフレームは重複領域を含み、重複領域は2つのECCフレームのデータストリームを含む。このため、ECCフレームは無効領域を含まず、記憶領域を有効に利用することができる。
【0113】
第2実施形態
図14は、第2実施形態に係るメモリシステム10におけるECCフレームの構成の具体的な一例を説明するための図である。第1実施形態では、重複領域以外のECCフレームがパリティを含む。第2実施形態では、2種類のパリティp、Pが計算される。重複領域が第2種類のパリティpを含む。重複領域以外のECCフレームが第1種類のパリティPと、第2種類のパリティpを含む。第1種類のパリティpの一例は水平パリティである。第2種類のパリティPの一例は垂直パリティである。
【0114】
図1、
図6と同様に、1ページは4個のECCフレームを含み、4個のECCフレームの中の隣接する2個のECCフレームはオーバーラップして記憶される。各ECCフレームでは、データストリームDが所定サイズに分割される。重複領域以外のECCフレームの領域は、複数の分割領域のデータを含む。メモリシステム10は、各分割領域に対して水平パリティpを計算する。水平パリティpは分割領域のデータに隣接している。ECCフレーム0の重複領域は、データストリーム0の末尾部分とデータストリーム1の先頭部分を含む。ECCフレーム0の先頭のデータD0のサイズは、重複領域に含まれるデータのサイズと等しい。メモリシステム10は、ECCフレーム内のデータストリーム0、1に対して垂直パリティPを計算する。垂直パリティPは、ECCフレーム0内の先頭のデータD0のパリティpに隣接している。ECCフレーム1-3では、垂直パリティPは先頭の重複領域に隣接している。
【0115】
第2実施形態では、重複領域は2つのECCフレームで共有に使われる水平パリティpを含む。このため、1つのECCフレームで使われるパリティと、他のECCフレームで使われるパリティとを別個に記憶する必要が無く、パリティのサイズを小さくすることができる。
【0116】
第3実施形態
図15は、第3実施形態に係るメモリシステム10におけるECCフレームの構成の具体的な一例を説明するための図である。第1、第2実施形態では、4個のECCフレームが重複領域を用いて互いに連結されているが、第3実施形態では、2個のECCフレームが重複領域を用いて互いに連結されている。
図15は、ECCフレーム0、1の構成の具体的な一例を示す。
【0117】
ECCフレーム0は、データストリームD0、D1と、パリティP0を含む。パリティP0は、データストリームD0、D1から計算される、パリティP0のサイズは一定である。ECCフレーム0の先頭部分は、パリティP0を含む。重複領域は、データストリームD0の末尾部分とデータストリームD1の先頭部分を含む。パリティP0、データストリームD0、D1は、アドレスの昇順に配置される。その結果、パリティP0、データストリームD0、D1は、この順番にライトされ、リードされる。
【0118】
ECCフレーム1は、データストリームD0、D1と、パリティP1を含む。パリティP1は、データストリームD0、D1から計算される、パリティP1のサイズは一定である。ECCフレーム0の末尾部分は、パリティP1を含む。重複領域は、データストリームD0の末尾部分とデータストリームD1の先頭部分を含む。パリティP1、データストリームD1、D0は、アドレスの降順に配置される。その結果、パリティP1、データストリームD1、D0は、この順番にライトされ、リードされる。あるいは、ライト、リードの順番はアドレス昇順で行い、例えばECC処理の段階でデータ順序を変えても良い。
【0119】
第3実施形態では、データストリームDの先頭位置は、ECCフレームの端部からパリティの分だけシフトした位置である。そのため、ヘッダが不要になり、記憶容量が増える。
【0120】
図15の例でも、データストリームの終端位置やサイズは判別できないが、第1実施形態で説明したように、正確なデータサイズを使わずに伸長できる伸張アルゴリズムを使えば問題ない。
【0121】
第4実施形態
上述の実施形態では、或るECCフレームが読み出される場合、隣のECCフレームのデータストリームの一部も読み出される。そのため、1個のECCフレームの読み出しの際にNAND型フラッシュメモリ12からコントローラ42に転送されるデータ量はやや増加する。しかし、重複部分を有するECCフレームを連続でリードする場合、重複領域を1回だけリードすることにより、NAND型フラッシュメモリ12からコントローラ42に転送されるデータ量を削減できる。
【0122】
図16は、第4実施形態において、4個の連続したECCフレーム0-3をシーケンシャルリードする動作の一例を説明するための図である。メモリシステム10は、ECCフレーム0の末尾までリードすると、ECCフレーム1の重複領域に隣接するヘッダH1からリードする。メモリシステム10は、ECCフレーム1の末尾までリードすると、ECCフレーム2の重複領域に隣接するヘッダH2からリードする。メモリシステム10は、ECCフレーム2の末尾までリードすると、ECCフレーム3の重複領域に隣接するヘッダH3からリードする。
【0123】
このように、各ECCフレームにおいて、先頭部分に位置する重複領域は1回だけリードされ、2回リードされることが無く、重複領域の3回分のデータ転送量を削減できる。
【0124】
なお、第1実施形態乃至第4実施形態の中の2つ以上の実施形態を組み合わせてもよい。
【0125】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0126】
12…NAND型フラッシュメモリ、42…コントローラ、44…DRAM、46…ライトバッファ、48…リードバッファ、50…アドレス変換テーブル、54…CPU、60…圧縮回路、62…伸張回路、64…ECCエンコーダ、66…ECCデコーダ