(57)【特許請求の範囲】
【請求項１】
外部からの入力データにパリティ情報を付加させた記憶データを記憶する複数のメモリセルを有するメモリデバイスと、
前記入力データ及び前記記憶データ間の変換を行うメモリコントローラと
を備え、
前記記憶データに含まれる前記入力データに対応する情報データは、前記入力データに対して非線形の関係にあり、
前記情報データは、前記入力データと同じビット数であり、
相補関係にある２つの前記入力データそれぞれに対応した２つの前記記憶データの前記情報データ同士の２を法とする加算を行った場合、当該２を法とする加算結果のうち１ビットは‘０’データになる
ことを特徴とするメモリシステム。
【請求項２】
外部からの入力データにパリティ情報を付加させた記憶データを記憶する複数のメモリセルを有するメモリデバイスと、
前記入力データ及び前記記憶データとなる出力データ間の変換を行うメモリコントローラと
を備え、
前記記憶データに含まれる前記入力データに対応する情報データは、前記入力データに対して非線形の関係にあり、
相補関係にある２つの前記入力データそれぞれに対応した２つの前記出力データに対して２を法とする加算を、異なる複数組の前記相補関係にある２つの前記入力データのそれぞれについて取った場合、これら加算結果に共通する前記出力データ長の１／３を超える数の特定のビットに、それぞれ‘０’データ及び‘１’データが共に現れる
ことを特徴とするメモリシステム。
【請求項３】
前記メモリコントローラは、バイナリデータ及びｐ進数データ（ｐは、素数）間の変換を行うｐ進数変換部を有し、当該ｐ進数変換部を用いて前記入力データ及び前記記憶データ間の変換を行う
ことを特徴とする請求項１又は２記載のメモリシステム。
【請求項４】
前記メモリデバイスは、１つのメモリセル毎にｄビット（ｄは、２以上の整数）を記憶し、所定数の前記メモリセルの特定のビットからなるページ単位でデータの読み書きをし、
前記メモリコントローラは、前記ページのサイズのｄ倍のサイズを持つバッファ・レジスタを有し、当該バッファ・レジスタを介して前記メモリデバイスとの前記記憶データの送受信を行う
ことを特徴とする請求項１〜３のいずれか１項記載のメモリシステム。
【請求項５】
前記メモリコントローラは、前記バッファ・レジスタを複数有する
ことを特徴とする請求項４記載のメモリシステム。
【請求項６】
前記メモリコントローラは、前記入力データ及び前記記憶データの少なくとも一方のビットの順序を入れ替えるスクランブラを有し、当該スクランブラを介して前記入力データ及び前記記憶データ間の変換を行う
ことを特徴とする請求項１〜５のいずれか１項記載のメモリシステム。
【請求項７】
記憶データを記憶する複数のメモリセルを有するメモリデバイスを制御するメモリコントローラであって、
前記メモリデバイスの制御の際、外部からの入力データと当該入力データにパリティ情報を付加させた前記記憶データとの変換を行い、前記記憶データに含まれる前記入力データに対応する情報データが前記入力データに対して非線形の関係にあり、
前記情報データは、前記入力データと同じビット数であり、
相補関係にある２つの前記入力データそれぞれに対応した２つの前記記憶データの前記情報データ同士の２を法とする加算を行った場合、当該２を法とする加算結果のうち１ビットは‘０’データになる
ことを特徴とするメモリコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
実施形態は、メモリシステム及びメモリコントローラに関する。
【背景技術】
【０００２】
大容量のデータを記憶可能なメモリシステムとして三次元化が容易な抵抗変化メモリ（ＲｅＲＡＭ：Ｒｅｓｉｓｔａｎｃｅ  ＲＡＭ）等が注目されている。また、大容量のデータを記憶するための技術として、ＲｅＲＡＭのような特定のメモリセルを用いる場合に限らず、メモリセルの多値化が挙げられる。この技術は、例えばＮＡＮＤフラッシュメモリにおいて見ることができる。
【０００３】
このように、メモリセルを多値化した場合、データのエラーが生じ易くなるため、データに対してエラーの検出・訂正をすることが必須の技術となる。そのため、これまで、様々なエラー検出・訂正システムを搭載したメモリコントローラが提案されている。
【０００４】
これらメモリコントローラを用いてメモリデバイスを構築する際、メモリコントローラの処理内容が判別できた場合、メモリシステム全体の信頼性、データ処理の効率化、メモリシステムの拡張性の点から有効である。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００９−１８１４３９号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
処理内容の判別が可能なメモリシステム及びメモリコントローラを提供することを目的とする。
【課題を解決するための手段】
【０００７】
実施形態に係るメモリシステムは、外部からの入力データにパリティ情報を付加させた記憶データを記憶する複数のメモリセルを有するメモリデバイスと、前記入力データ及び前記記憶データ間の変換を行うメモリコントローラとを備える。前記記憶データに含まれる前記入力データに対応する情報データは、前記入力データに対して非線形の関係にあることを特徴とする。
【０００８】
実施形態に係るメモリコントローラは、記憶データを記憶する複数のメモリセルを有するメモリデバイスを制御するメモリコントローラであって、前記メモリデバイスの制御の際、外部からの入力データと当該入力データにパリティ情報を付加させた前記記憶データとの変換を行い、前記記憶データに含まれる前記入力データに対応する情報データが前記入力データに対して非線形の関係にあることを特徴とする。
【図面の簡単な説明】
【０００９】
【図１】実施形態に係るメモリシステムのブロック図である。
【図２】実施形態に係るメモリシステムのＭＬＣ（Ｍｕｌｔｉ−Ｌｅｖｅｌ  Ｃｅｌｌ）１セルのレベルとページ・バッファの１ビットの対応例を示す図である。
【図３】バイナリ・コード（グレイ・コード）を用いたＥＣＣについて説明する図である。
【図４】実施形態に係るメモリシステムの有限体Ｚｐの数とＭＬＣのレベルとの対応を示す図である。
【図５】実施形態に係るメモリシステムを適用した機器の構成例を示す図である。
【図６】実施形態に係るメモリコントローラを適用した機器の構成例を示す図である。
【図７】実施形態に係るメモリコントローラのデータ転送システムのブロック図である。
【図８】実施形態に係るメモリコントローラの２セル訂正／１２セルの場合のレジスタの構成例を示す図である。
【図９】実施形態に係るメモリコントローラのセクタ毎のデータ書き込みの処理を説明する図である。
【図１０】実施形態に係るメモリコントローラのセクタ毎のデータ読み出しの処理を説明する図である。
【図１１】実施形態に係るメモリシステムのレジスタとページ・バッファの関係の一例を示す図である。
【図１２】実施形態に係るメモリシステムのメモリデバイス（８値のＭＬＣ  ＮＡＮＤフラッシュメモリ）のデータ書き込み時のページ・バッファの動作を説明する図である。
【図１３】実施形態に係るメモリシステムのメモリデバイス（８値のＭＬＣ  ＮＡＮＤフラッシュメモリ）のデータ読み出し時のページ・バッファの動作を説明する図である。
【図１４】実施形態に係るメモリシステムにおけるデータ書き込み時のメモリデバイス（８値のＭＬＣ  ＮＡＮＤフラッシュメモリ）及びメモリコントローラ間のデータ転送を説明する図である。
【図１５】実施形態に係るメモリシステムにおけるデータ読み出し時のメモリデバイス（８値のＭＬＣ  ＮＡＮＤフラッシュメモリ）及びメモリコントローラ間のデータ転送を説明する図である。
【図１６】実施形態に係るメモリシステムのメモリデバイス（１６値のＭＬＣ  ＮＡＮＤフラッシュメモリ）のデータ書き込み時のページ・バッファの動作を説明する図である。
【図１７】実施形態に係るメモリシステムのメモリデバイス（１６値のＭＬＣ  ＮＡＮＤフラッシュメモリ）のデータ読み出し時のページ・バッファの動作を説明する図である。
【図１８】実施形態に係るメモリシステムにおけるデータ書き込み時のメモリデバイス（１６値ＭＬＣ  ＮＡＮＤフラッシュメモリ）及びメモリコントローラ間のデータ転送を説明する図である。
【図１９】実施形態に係るメモリシステムにおけるデータ読み出し時のメモリデバイス（１６値ＭＬＣ  ＮＡＮＤフラッシュメモリ）及びメモリコントローラ間のデータ転送を説明する図である。
【図２０】実施形態に係るメモリシステムの有限体Ｚｐの数とＭＬＣのレベルとの対応を示す図である。
【図２１】実施形態に係るメモリコントローラの判別方法を説明する図である。
【図２２】実施形態に係るメモリコントローラの判別手順を説明する図である。
【図２３】実施形態に係るメモリコントローラの判別手順を説明する図である。
【発明を実施するための形態】
【００１０】
以下、図面を参照しながら実施形態に係るメモリシステム及びメモリコントローラについて説明する。
【００１１】
［メモリシステムの概要］
先ず、実施形態に係るメモリシステムの構成について簡単に説明しておく。
図１は、実施形態に係るメモリシステムのブロック図である。このメモリシステムは、メモリデバイス１００とメモリコントローラ２００からなる。
【００１２】
メモリデバイス１００は、例えば、多ビット記憶可能なメモリセル（Ｍｕｌｔｉ−Ｌｅｖｅｌ  Ｃｅｌｌ、以下、「ＭＬＣ」と呼ぶ）を用いたＮＡＮＤフラッシュメモリ（以下、「ＭＬＣ  ＮＡＮＤフラッシュメモリ」と呼ぶ）が利用できる。なお、以下では、主にメモリデバイス１００としてＭＬＣ  ＮＡＮＤフラッシュメモリを用いた実施形態について説明しているが、メモリデバイス１００はこれに限定されるものではない。また、本実施形態に係るメモリコントローラ２００も含め、ＭＬＣ  ＮＡＮＤフラッシュメモリを制御するメモリコントローラを「ＭＬＣ  ＮＡＮＤコントローラ」と呼ぶこともある。  メモリコントローラ２００は、“ｂｉｎａｒｙ  ｔｏ  ｐ−ａｄｉｃ  ｄｅｃｏｄｅ”回路ブロック２１０、“Ｌｅｅ  ｍｅｔｒｉｃ  ｃｏｄｅ  ＥＣＣ  ｓｙｓｔｅｍ”回路ブロック２２０、“ｐ−ａｄｉｃ＜＞ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック２３０、２つのページ・バッファ群２４０ａ及び２４０ｂ（バッファ・レジスタ）、“ｃｏｎｔｒｏｌ”回路ブロック２５０及び“ｐ−ａｄｉｃ  ｔｏ  ｂｉｎａｒｙ  ｄｅｃｏｄｅ”回路ブロック２６０からなる。なお、ページ・バッファ群に関し、特定のページ・バッファ群を指さない場合、単に「ページ・バッファ群２４０」と呼ぶこともある。
【００１３】
このメモリシステムにおけるデータ書き込みの流れは次のようになる。
始めに、ＭＬＣ  ＮＡＮＤコントローラ２００（メモリシステム）に入力されたバイナリデータは、“ｂｉｎａｒｙ  ｔｏ  ｐ−ａｄｉｃ  ｄｅｃｏｄｅ”回路ブロック２１０によってｐ進数化（ｐは、素数）され、“Ｌｅｅ  ｍｅｔｒｉｃ  ｃｏｄｅ  ＥＣＣ  ｓｙｓｔｅｍ”回路ブロック２２０に入力される。
【００１４】
続いて、“Ｌｅｅ  ｍｅｔｒｉｃ  ｃｏｄｅ  ＥＣＣ  ｓｙｓｔｅｍ”回路ブロック２２０に入力されたｐ進数データが、“Ｌｅｅ  ｍｅｔｒｉｃ  ｃｏｄｅ  ＥＣＣ  ｓｙｓｔｅｍ”回路ブロック２２０によって、ＥＣＣ処理のためのリー・メトリック・コードに変換される。
【００１５】
最後に、このリー・メトリック・コードが、ＭＬＣ  ＮＡＮＤフラッシュメモリ１００に保存できるように“ｐ−ａｄｉｃ＜＞ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック２３０によってマッピングされた後、ページ・バッファ２４０を介してＭＬＣ  ＮＡＮＤフラッシュメモリ１００に転送されて記憶される。
【００１６】
また、このメモリシステムにおけるデータ読み出しの流れは次のようになる。
始めに、ＭＬＣ  ＮＡＮＤフラッシュメモリ１００から読み出されたリー・メトリック・コードが、ＭＬＣ  ＮＡＮＤコントローラ２００のページ・バッファ群２４０ａ又は２４０ｂに転送される。
【００１７】
続いて、ページ・バッファ群２４０ａ又は２４０ｂに転送されたリー・メトリック・コードは、“Ｌｅｅ  ｍｅｔｒｉｃ  ｃｏｄｅ  ＥＣＣ  ｓｙｓｔｅｍ”回路ブロック２２０で処理できるよう“ｐ−ａｄｉｃ＜＞ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック２３０によってマッピングされる。その後、このリー・メトリック・コードは、“Ｌｅｅ  ｍｅｔｒｉｃ  ｃｏｄｅ  ＥＣＣ  ｓｙｓｔｅｍ”回路ブロック２２０に入力される。
【００１８】
続いて、“Ｌｅｅ  ｍｅｔｒｉｃ  ｃｏｄｅ  ＥＣＣ  ｓｙｓｔｅｍ”回路ブロック２２０に入力されたリー・メトリック・コードは、ここでＥＣＣ処理を受けた上で、ｐ進数データに変換された後、“ｐ−ａｄｉｃ  ｔｏ  ｂｉｎａｒｙ  ｄｅｃｏｄｅ”回路ブロック２６０に入力される。
【００１９】
最後に、“ｐ−ａｄｉｃ  ｔｏ  ｂｉｎａｒｙ  ｄｅｃｏｄｅ”回路ブロック２６０に入力されたｐ進数データは、ここでバイナリデータに変換されて、ＭＬＣ  ＮＡＮＤコントローラ２００（メモリシステム）から出力される。
【００２０】
以上のデータ書き込み及びデータ読み出しの一連の動作は、外部のＣＰＵからコマンドを受けた“ｃｏｎｔｒｏｌ”回路ブロック２５０によって制御される。
【００２１】
以上が、本実施形態に係るメモリシステムの簡単な概要となるが、ここからは、本メモリシステムを詳細に説明する。
【００２２】
先ず、１６値のＭＬＣを用いたＭＬＣ  ＮＡＮＤフラッシュメモリを例に、ＭＬＣのレベルとＭＬＣ  ＮＡＮＤフラッシュメモリのページとの対応関係について説明した上で、本実施形態に係るＭＬＣ  ＮＡＮＤコントローラ２００のデータ処理の要点であるＥＣＣについて説明する。
【００２３】
１６値のＭＬＣを用いた場合、１セル当たり４ビットのバイナリデータを記憶することができる。４ビットのバイナリデータとＭＬＣのレベルの対応付けについては、様々なパターンが考えられるが、ここでは、グレイ・コード（Ｇｒａｙ  ｃｏｄｅ）を利用することを考える。このようにグレイ・コードを利用することで、隣接レベル間の変化が４ビットのうちの１ビットのみの変化になるように、バイナリデータとＭＬＣのレベルとの対応付けることができる。４ビットのバイナリデータは、それぞれ異なるページ＜０＞〜＜３＞の構成要素となる。
【００２４】
例えば、ＭＬＣの最も低いレベルから最も高いレベルにかけて、０〜１５の番号付けをした場合、ＭＬＣのレベルに対応するページ＜０＞〜＜３＞の各ビットは、図２のようになる。この場合、ページ＜０＞のビットｐ０、ページ＜１＞のビットｐ１、ページ＜２＞のビットｐ２、及びページ＜３＞のビットｐ３は、数１に示すように、それぞれＭＬＣのレベルの値Ｌを２進数で表した各桁Ｂ０、Ｂ１、Ｂ２、及びＢ３のバイナリ関数Ｐ０、Ｐ１、Ｐ２、及びＰ３で決定される。
［数１］
L = B020+B121+B222+B323
p0 = P0(B0, B1, B2, B3)
p1 = P1(B0, B1, B2, B3)
p2 = P2(B0, B1, B2, B3)
p3 = P3(B0, B1, B2, B3)
【００２５】
特に、グレイ・コードを利用した場合、Ｌの１の変化に対してはｐ０、ｐ１、ｐ２、及びｐ３のうちのいずれか１つが変化するようにコード化される。また、一般にＬのどの様な変化も各ページのビットｐ０〜ｐ３の変化で表せる。そのため、４つのページ＜０＞〜＜３＞それぞれで１ビットのエラー検出・訂正が可能な場合、１つのＭＬＣで生じるレベル変化に関するあらゆるエラーを処理することができる。更に、ＭＬＣのレベル変化が隣接レベル間のみで生じると仮定した場合、いずれか１つのページに対する１ビットの修正によってエラー検出・訂正ができる。そのため、ページ毎にそれぞれ独立に１ビットのエラー検出・訂正が可能である場合、独立した４つのＭＬＣに対応することができる。
【００２６】
以上から、ページ毎に１ビットのエラー検出・訂正する方法は、ＭＬＣで生じるいかなるエラーも処理できる強力な方法である。
【００２７】
しかし、ＭＬＣで生じるエラーのほとんどが、隣接レベル間で生じる点を鑑みれば、上記のようなエラー検出・訂正の方法は、過剰なエラー対応であって、その分、エラー検出・訂正に通常必要としない多くの情報を扱うことになり、非効率である。
【００２８】
次に、本実施形態に係るメモリシステムにおけるエラー検出・訂正の効率を考えるが、その前提として、バイナリ・リニア・コードを用いたＥＣＣについて説明しておく。ここでは、バイナリ・リニア・コードの例として、リード・ソロモン・コード（Ｒｅｅｄ−Ｓｏｌｏｍｏｎ  ｃｏｄｅ）とＢＣＨコードを取り扱う。
【００２９】
なお、リード・ソロモン・コード及びＢＣＨコードは、いずれもガロア体ＧＦ（２ｍ）上のコード体系である。但し、リード・ソロモン・コードは、コードの各成分がｍビットで表現されるシンボルとなっており、リード・ソロモン・コードを用いたＥＣＣは、このシンボルのエラーを対象としている。一方、ＢＣＨコードは、各ビットがコードの成分であり、ＢＣＨコードを用いたＥＣＣは、ビットエラーを対象としている。
【００３０】
以下において、このようなバイナリ・リニア・コードを用いたＥＣＣシステムを搭載したメモリコントローラを「バイナリ・リニア・コントローラ」と呼ぶ事もある。これに対し、本実施形態で利用するリー・メトリック・コードのように、ガロア体ＧＦ（ｐ）（ｐは、素数）上のコード体系を用いたＥＣＣシステムを搭載したメモリコントローラを「ｐ−ａｄｉｃコントローラ」と呼ぶ事もある。
【００３１】
始めに、バイナリデータからリード・ソロモン・コードへのエンコード方法について説明する。
【００３２】
ＧＦ（２ｍ）の１つの原始根をαとした場合、生成多項式ｇ（Ｘ）は数２に示すように２ｔ個のαｍ０＋ｉ（ｍ０＝０又は１、ｉ＝０〜２ｔ−１）を根とする多項式として構成される。
［数２］
g(X) = (X+αm0)(X+αm0+1)(X+αm0+2) … (X+αm0+2t-1)
= g0+g1X+g2X2+…+g2t-1X2t-1+X2t
ここで、αは、ｍビットのシンボルでＧＦ（２ｍ）の原始根であり、ｍ次のＧＦ（２）上の既約多項式Ｍ１（Ｘ）の根である。ｇ（ｘ）の係数ｇは、ｍビットのシンボルである。また、ｔはエラーが訂正可能な最大シンボル数である。ゼロ元を除いたＧＦ（２ｍ）の要素の総数ｎ＝２ｍ−１から２ｔを引いた数ｋが任意に設定できるデータのシンボルである。
【００３３】
このデータのシンボルは、バイナリで考えた場合ｍｋビットの長さとなり、データを表すｋ−１次の多項式ｕ（Ｘ）は数３の通りである。
［数３］
u(X) = u0+u1X+u2X2+ … +uk-1Xk-1, n = 2m-1, k = n-2t
【００３４】
これら多項式ｇ（Ｘ）、ｕ（Ｘ）から２ｔ−１次の剰余多項式ｖ（Ｘ）を数４に示すように求めると、これらの係数シンボルｖがコードのパリティのシンボルとなる。
［数４］
v(X) = X2tu(X) (mod g(x)) = v0+v1X+v2X2+ … +V2t-1X2t-1
【００３５】
数５に示しように、データを表す多項式ｕ（Ｘ）の係数シンボルｕとパリティを表す多項式ｖ（Ｘ）の係数シンボルｖの合計ｎ個のシンボルによってリード・ソロモン・コードを表す多項式ｔ（Ｘ）を構成することができる。つまり、リード・ソロモン・コードには、データのシンボルが直接に反映される。
［数５］
t(X) = X2tu(X)+v(X)
【００３６】
以上の他、データのシンボルからパリティのシンボルを生成し、リード・ソロモン・コードを構成する方法はいくつかのバリエーションはあるが、データのシンボルに対してリード・ソロモン・コードに含まれるデータに対応する部分は、線形関係にある。したがって、データのシンボルをバイナリで表した場合におけるシンボルの和は、リード・ソロモン・コードに含まれるデータに対応する部分の和として表すことができる。
【００３７】
続いて、バイナリデータからＢＣＨコードへのエンコード方法について説明する。
ＧＦ（２ｍ）の１つの原始根をαとし、α、α３、・・・、α２ｔ−１を根とするｍ次の既約多項式をそれぞれＭ１（Ｘ）、Ｍ３（Ｘ）、・・・、Ｍ２ｔ−１（Ｘ）とした場合、生成多項式ｇ（Ｘ）は数６に示すようにｔ個のｍ次の既約多項式の積の多項式として構成される。
［数６］
g(X) = M1(X)M3(X) … M2t-1 = 1+g1X+g2X2+ …+gmt-1Xmt-1+Xmt
【００３８】
ここで、ｇ（Ｘ）の係数Ｍは、０又は１であり、１ビットで表すことができる。また、ｔはエラーが訂正可能なビット数である。ゼロ元を除いたＧＦ（２ｍ）の要素の総数ｎ＝２ｍ−１からｍｔを引いた数ｋが任意に設定できるデータのビットである。
【００３９】
このデータのビットは、ｋビットの長さとなり、データのビットを表すｋ−１次の多項式ｕ（Ｘ）は数７の通りである。
［数７］
u(X) = u0+u1X+u2X2+ … +uk-1Xk-1, k = n-mt
これらの多項式ｇ（Ｘ）、ｕ（Ｘ）からｍｔ−１次の剰余多項式ｖ（Ｘ）を数８に示すように求めると、これらの係数がＢＣＨコードのパリティのビットとなる。
［数８］
v(X) = Xmtu(X) (mod g(x)) = v0+v1X+ … +vmt-1Xmt-1
【００４０】
数９に示すように、データを表す多項式ｕ（ｘ）の係数ビットｕとパリティを表す多項式ｖ（Ｘ）の係数ビットｖの合計ｎ個のビットによってＢＣＨコードを表す多項式ｔ（Ｘ）を構成することができる。つまり、ＢＣＨコードには、データのビットが直接に反映される。
［数９］
t(X) = Xmtu(X)+v(X)
【００４１】
ＢＣＨコードの場合も、リード・ソロモン・コードと同様、データのビットの和は、ＢＣＨコードに含まれるデータに対応する部分の和として表すことができる。
【００４２】
次に、ＢＣＨコードを用いたＥＣＣによってビット修正する方法について説明する。ここでは、ＮＡＮＤフラッシュメモリが有するページ・バッファを利用する方法について説明する。
【００４３】
図３は、ページ・データを構成するＭＬＣの一部とこれに対応するページ・バッファの部分を示す図である。１つのＭＬＣのレベルとページのビットとの対応付けについては図２に示したが、図３中にも拡大して示している。図３に示すページ・バッファの部分は、いわゆるセクタに対応していてデータ処理の１つのまとまりとなる部分である。図３の場合、１ページは、５１２バイトのＭＬＣで構成されている。
【００４４】
この例のＭＬＣ  ＮＡＮＤフラッシュメモリは、１６値のＭＬＣに対応するため、５１２バイトのＭＬＣに対して４系列のページ・バッファが設けられている。これら４系列のページ・バッファは合計５１２バイト個のメモリセルに対応している。
【００４５】
ここで、このような構成のＭＬＣ  ＮＡＮＤフラッシュメモリを対象として、比較例に係るバイナリ・リニア・コントローラの特徴を生かしたメモリシステムについて検討する。
【００４６】
５１２バイトは２１２ビットなので、バイナリ・リニア・コントローラにおけるＥＣＣの処理は、ＧＦ（２１３）を利用する。ＧＦ（２１２）を利用する場合、付加されるパリティビットを構成できないからである。
【００４７】
ＧＦ（２１３）を利用する場合、１ビットのエラー訂正に必要なチェックビットは１３ビットとなる。ｔビット（ｔは１以上の整数）のエラー訂正に必要なページ・バッファ当たりのビット数は、データの５１２バイトとチェックビットの１３ｔバイトの和となる。したがって、５１２バイトのデータを扱えるものとして容易に拡張できる訂正ビット数ｔは、不等式２１２＋１３ｔ≦２１３を満たす必要がある。このように構成すると、グレイ・コードを用いた場合、ＭＬＣに隣接レベル間のエラーのみが発生すると仮定した場合、５１２バイト＋１３ｔ個のうち４ｔ個のＭＬＣを修正することができる。この様に構成された図３に示す例では、さらに加えてｔ個のＭＬＣで発生した如何なるエラーをも修正できるようになっている。
【００４８】
しかし、前述のように、ＭＬＣに生じるエラーの多くが隣接レベル間で生じる点に着目すると、図３に示すような構成は、エラーに対する過剰な保証と考えることができる。すなわち、ページ・バッファのデータに対するＥＣＣは、ＮＡＮＤフラッシュメモリのＭＬＣの不良の生じ方に対して過剰であり、その分だけ余分にパリティ部分が大きくなっている。
【００４９】
そこで、本実施形態では、以上の過剰な保証を削るためにリー・メトリック・コードを用いたＥＣＣを利用する。この場合、ＭＬＣの隣接レベル程度のエラーのみ対応させることでパリティ部分を削減することができる。また、同じサイズのパリティ部分を用いる場合には、訂正可能なセル数を増やすことができる。
【００５０】
本実施形態に係るメモリコントローラ２００は、リー・メトリック・コードを用いてＥＣＣの処理を行う。その一方、このメモリコントローラ２００では、従来のＭＬＣ  ＮＡＮＤフラッシュメモリに対応するため、リー・メトリック・コードの各シンボルをＭＬＣのレベルに対応した数値に変換している。この変換を行うのが、図１に示した“ｐ−ａｄｉｃ＜＞ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック２３０である。
【００５１】
そこで、次に、この“ｐ−ａｄｉｃ＜＞ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック２３０の機能について説明する。ここでは、１６値のＭＬＣを用いた例について説明する。
【００５２】
“ｐ−ａｄｉｃ＜＞ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック２３０では、具体的には、ＭＬＣ  ＮＡＮＤフラッシュメモリ１００のページ・バッファと、ｐ−ａｄｉｃコントローラ２００のページ・バッファ群２４０とのアドレスのマッピングが行われる。
【００５３】
マッピングは、ＭＬＣの１６個のレベルとｐ＝１３とする有限体Ｚｐとの対応を決定することから始める。ここでは、ＭＬＣのレベルと有限体Ｚｐとの対応関係に関する２つケースを説明しておく。
【００５４】
図４は、ＭＬＣのレベルとＺｐとの対応関係を説明する図である。
ケース１は、Ｚｐの各要素をＭＬＣの下のレベルから順に対応させる割り付け方法である。この場合、Ｚｐの要素０〜１２をＭＬＣの下のレベルから順に割り付け、余ったＭＬＣの上の３レベルについてＺｐの要素１２を割り付けている。ケース１は、ＮＡＮＤフラッシュメモリに対するプログラムにおいてワード線に印加する電圧パルスの振幅を抑えることができる。これによって、ワード線とワード線に隣接するメモリセルとの容量カップリングを小さくすることができ、ディスターブを抑制することができる。つまり、ケース１は、メモリセルのエラーの発生を低減させることが期待できる割り付け方法と言える。
【００５５】
ケース２は、ＭＬＣのレベルのうち高いレベルについてレベル間隔を大きくした割り付け方法である。この場合、Ｚｐの要素０〜１２をＭＬＣの下のレベルから順に割り付けているが、このうちＺｐの要素１０〜１２については、２レベル間隔で割り付けている。ケース２は、消去レベルからの閾値変化が大きくなる高いレベルのプログラムをラフに行うことが可能であり、プログラムの負担の軽減が期待できる割り付け方法と言える。
【００５６】
このように、１６値のＭＬＣ  ＮＡＮＤフラッシュメモリの特性を踏まえた上で、エラー発生の抑制や、プログラム時間の短縮など、目的を絞って前述のケース１やケース２の割り付け方法を決定すれば良い。なお、割り付け方法について、メモリデバイス２００の状況に応じてメモリコントローラ１００で随時設定できるようにすれば良い。また、ケース１及びケース２では、ＭＬＣの下のレベルからＺｐの各要素を順番に割り付けているが、ＭＬＣの上のレベルからＺｐの各要素を割り付けることもできる。
【００５７】
続いて、ＭＬＣのレベルとページのビットとの対応について図４を用いて説明する。図４は、グレイ・コードを使用して、各ページのビットとＭＬＣのレベルとの対応付けを行った例である。なお、ページのビットは、製品毎に異なる場合があるが、この場合、使用するメモリデバイス１００に合わせればよい。そのため、ページ・バッファ２４０とＭＬＣのレベルの対応は、データをＭＬＣのレベルに順序良く並べるために重要な情報であり、この情報をもとにメモリコントローラ２００におけるマッピングを柔軟に設定できるようにしておけば、様々なメモリデバイスに対応できるメモリコントローラ２００を実現することができる。例えば、メモリコントローラ２００に複数種類の“ｐ−ａｄｉｃ＜＞ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック２３０を設けるか、種類変更可能な“ｐ−ａｄｉｃ＜＞ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック２３０を設けておいてメモリデバイス１００の仕様をもとに切り替えられるようにすれば良い。
【００５８】
このように、Ｚｐの要素とＭＬＣのレベルとの対応が決定したら、続いて、Ｚｐの各要素を、ＭＬＣのレベルに対応するページ＜０＞〜＜３＞の４ビットに基づいてデコードした後、ページ・バッファ群２４０に保持する。そのため、ページ・バッファ群２４０は、４系列のページ・バッファが並列に配置された構成となっており、前述のマッピングによってデコードされた４ビットのデータは、それぞれページ・バッファ群２４０の各系列に順に保持される。
【００５９】
メモリコントローラ２００のページ・バッファ群２４０のうちの１系列は、メモリデバイス１００が有するページ・バッファに対応する。メモリコントローラ２００のページ・バッファ群２４０がデータで満杯になった時点で、データは、１系列分ずつメモリデバイス１００のページ・バッファに順次転送される。そして、ページ・バッファ群２４０のデータは、メモリデバイス１００において、連続して同じＭＬＣにプログラムされる。このようなデータ書き込み手順によって、メモリコントローラ２００で得られたＺｐの要素は、ＭＬＣのレベルとしてメモリデバイス１００に記憶される。
【００６０】
メモリデバイス１００からのデータの読み出しは、前述のデータ書き込み手順とは逆の手順となる。つまり、同一のＭＬＣの４つのページのデータが順次読み出された後、これらデータがメモリコントローラ２００のページ・バッファ群２４０に転送される。そして、ページ・バッファ群２４０に転送されたデータからＭＬＣのレベルを示すＺｐの数がデコードされる。
【００６１】
次に、本実施形態に係るメモリシステムの一般的な電子機器への適用について言及しておく。
【００６２】
一般的な電子機器は、ＣＰＵと、このＣＰＵを中心とする周辺機器及びメモリシステムとを備え、これらがコマンド・データバスで結ばれて構成されている。特に、最近の電子機器の場合、大容量のメモリデバイスとして、ハードディスクよりも高速アクセスが可能な半導体を用いたメモリデバイスを利用する例もあるが、これらの多くには、ＮＡＮＤフラッシュメモリが利用されている。
【００６３】
図５は、このような電子機器を想定した本実施形態に係るメモリシステムの適用例である。
【００６４】
図５におけるメモリシステムは、図５中（Ｂ）に示すように、ＭＬＣ  ＮＡＮＤフラッシュメモリ（メモリデバイス）とＭＬＣ  ＮＡＮＤコントローラ（メモリコントローラ）とを備えている。このメモリシステムを、図４では、「ＭＬＣ  ＳＭＭ（Ｓｅｍｉｃｏｎｄｕｃｔｏｒ  Ｍｅｍｏｒｙ  Ｍｏｄｕｌｅ）」と表記している。
【００６５】
このＭＬＣ  ＳＭＭ等のメモリシステムは、電子機器にとっては差し替え可能なモジュールである。つまり、ＭＬＣ  ＳＭＭの性能を十分に引き出すためには、ＭＬＣ  ＳＭＭに応じてコマンドバスやデータバス等を適切に設定する必要がある。そのため、ＭＬＣ  ＳＭＭ内の処理内容を知っておくことが望ましい。例えば、コマンド・データバスからＭＬＣ  ＳＭＭの種類を判別することができれば、このＭＬＣ  ＳＭＭに最適なデータ転送サイクルによってデータ送受信を行うことができる。
【００６６】
しかし、ＭＬＣ  ＳＭＭのＭＬＣ  ＮＡＮＤコントローラが、本実施形態のようにｐ−ａｄｉｃコントローラであるか、比較例のようにバイナリ・リニア・コントローラであるかを判別できない場合、ｐ−ａｄｉｃコントローラの性能を十分に引き出せないことになる。
【００６７】
このような点から、ＭＬＣ  ＳＭＭがどのようなＭＬＣ  ＮＡＮＤコントローラを搭載しているかを判別することが重要となる。
【００６８】
また、電子機器は、図５に示すような、ＣＰＵを中心に周辺機器及びメモリシステム（ＭＬＣ  ＳＭＭ）から構成される他、図６に示すような、メモリシステムの一部であるＭＬＣ  ＮＡＮＤコントローラ（メモリコントローラ）のみが電子機器に組み込まれており、ＭＬＣ  ＮＡＮＤフラッシュメモリ（メモリデバイス）を自由に増設できる構成となっているものもある。
【００６９】
この場合、電子機器内のＭＬＣ  ＮＡＮＤコントローラに、ＭＬＣ  ＮＡＮＤフラッシュメモリの信頼性を向上させるようなＥＣＣシステムが搭載されておれば、ＭＬＣ  ＮＡＮＤフラッシュメモリ自身を高品質のものにしなくても、信頼性の高い電子機器を構築することができる。
【００７０】
図５及び図６に示す電子機器のように、電子機器のメモリコントローラがどのような種類のメモリコントローラを使用しているかを、電子機器自体の動作から判断できれば、メモリデバイスの増設時など、信頼性を確保するための適切なコストのメモリデバイスを選択することができる。
【００７１】
そこで、以下では、本実施形態に係るメモリコントローラ２００（ｐ−ａｄｉｃコントローラ）における処理の概要について説明し、比較例に係るバイナリ・リニア・システムとの違いについて説明する。
【００７２】
先ず、図１を用いて、本実施形態に係るメモリシステムの機能ブロックについて詳細に説明する。
【００７３】
本実施形態に係るメモリシステムは、前述のようにメモリデバイス１００と、このメモリデバイス１００を制御するメモリコントローラ２００からなる。
【００７４】
このメモリデバイス１００には、例えば、図１に示したＭＬＣ  ＮＡＮＤフラッシュメモリなど既存のメモリデバイスを用いることができる。この場合であっても、メモリコントローラ２００を用いることで、リー・メトリック・コードを用いたＥＣＣによって高効率なエラー検出・訂正が可能である。
【００７５】
メモリコントローラ２００に入力されたバイナリデータは、メモリコントローラ２００におけるデータ処理システムである素数ｐの有限体Ｚｐの量に変換される。このバイナリデータは、所定のＭビット毎にメモリコントローラ２００で処理される。
【００７６】
メモリコントローラ２００に入力されたバイナリデータは、始めに、“ｂｉｎａｒｙ  ｔｏ  ｐ−ａｄｉｃ  ｄｅｃｏｄｅ”回路ブロック２１０に入力される。“ｂｉｎａｒｙ  ｔｏ  ｐ−ａｄｉｃ  ｄｅｃｏｄｅ”回路ブロック２１０では、バイナリデータをｐ進数データに変換する。
【００７７】
このｐ進数データは、“Ｌｅｅ  ｍｅｔｒｉｃ  ｃｏｄｅ  ＥＣＣ  ｓｙｓｔｅｍ”回路ブロック２２０に入力される。“Ｌｅｅ  ｍｅｔｒｉｃ  ｃｏｄｅ  ＥＣＣ  ｓｙｓｔｅｍ”回路ブロック２２０では、ｐ進数データの各桁が表わすＺｐの数に基づいてリー・メトリック・コードが生成される。
【００７８】
このリー・メトリック・コードは、“ｐ−ａｄｉｃ＜＞ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック２３０に入力される。“ｐ−ａｄｉｃ＜＞ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック２３０は、リー・メトリック・コードの各シンボルが表わすＺｐの数をＭＬＣのレベルに対応付けして、Ｚｐのリー・メトリックとＭＬＣのレベル間の距離との対応が成立するように変換する。この“ｐ−ａｄｉｃ＜＞ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック２３０によって、Ｚｐの数は、ＭＬＣのレベルへと変換されてページ・バッファ群２４０ａ或いは２４０ｂに保持される。
【００７９】
１６値のＭＬＣを用いる場合、１つのページ・バッファ群２４０には、４系列のページ・バッファが必要となる。ここで、ページ・バッファ群２４０は、メモリデバイス１００のＭＬＣのレベルとページの関係を反映している必要がある。これらのページ・バッファ群２４０がデータで満たされると、これらのデータはコントローラ２００からメモリデバイス１００に転送される。このデータ転送によって、Ｚｐの数は、メモリデバイス１００のＭＬＣのレベルとして記憶されることになる。
【００８０】
図１に示す場合、メモリコントローラ２００には、２組のページ・バッファ群２４０Ａ、２０４Ｂが設けられているが、ページ・バッファ群２４０は、１組以上あれば良い。但し、図１に示すようにページ・バッファ群２４０を２組設けた場合、例えば、ページ・バッファ群２４０Ａ及び“ｐ−ａｄｉｃ＜＞ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック２３０間のデータ転送を行っていると同時に、ページ・バッファ群２４０ｂ及びＭＬＣ  ＮＡＮＤフラッシュメモリ間のデータ転送を行うことができるため、データ転送時間を稼ぐことができる。
【００８１】
メモリデバイス１００は、コントローラ２００から転送されたデータをページ毎にプログラムして行く。このようなメモリデバイス１００の動作は、メモリコントローラ２００内の“ｃｏｎｔｒｏｌ”回路ブロック２５０から受け取るコマンド＜２＞に基づいて実行される。このコマンド＜２＞は、コントローラ２００に入力されたコマンド＜１＞に応じて“ｃｏｎｔｒｏｌ”回路ブロック２５０によって生成される。
【００８２】
メモリシステムからデータを読み出す場合、始めに、“ｃｏｎｔｒｏｌ”回路ブロックからのコマンド＜２＞によって、メモリデバイス１００から１つのＭＬＣのレベルを表すことができる一連のデータが読み出される。このデータは、メモリデバイス１００から順次メモリコントローラ２００のページ・バッファ群２４０に転送されて保持される。
【００８３】
続いて、ページ・バッファ群２４０に保持されたデータは、“ｐ−ａｄｉｃ＜＞ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック２３０で処理される。“ｐ−ａｄｉｃ＜＞ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック２３０は、このページ・バッファ群２４０が保持するデータをＺｐの数、即ちＭＬＣのレベルを表す量に変換する。
【００８４】
続いて、Ｚｐの数で表されたデータは、“Ｌｅｅ  ｍｅｔｒｉｃ  ｃｏｄｅ  ＥＣＣ  ｓｙｓｔｅｍ”回路ブロック２２０に入力される。“Ｌｅｅ  ｍｅｔｒｉｃ  ｃｏｄｅ  ＥＣＣ  ｓｙｓｔｅｍ”回路ブロック２２０は、このデータに対しエラー訂正を施し、正しいリー・メトリック・コードを復元し、更に、このリー・メトリック・コードをｐ進数データに変換する。
【００８５】
最後に、ｐ進数データは、“ｐ−ａｄｉｃ  ｔｏ  ｂｉｎａｒｙ  ｄｅｃｏｄｅ”回路ブロック２６０に入力される。“ｐ−ａｄｉｃ  ｔｏ  ｂｉｎａｒｙ  ｄｅｃｏｄｅ”回路ブロック２６０は、このｐ進数データをＭビットのバイナリデータに戻した上で、メモリコントローラ２００の外部に出力する。
【００８６】
次に、メモリコントローラ２００のデータ転送システムのデータの処理フローからみたブロック構成について説明する。
【００８７】
以下において、メモリデバイス１００などバイナリでデータを取り扱う環境を「ｂｉｎａｒｙ  ｗｏｒｌｄ」と呼ぶことにする。これに対し、データをＺｐの数で取り扱うメモリコントローラ２００などの環境を「ｐ−ａｄｉｃ  Ｚｐ  ｗｏｒｌｄ」と呼ぶことにする。この場合、「ｂｉｎａｒｙ  ｗｏｒｌｄ」は、「ｐ−ａｄｉｃ  Ｚ２  ｗｏｒｌｄ」と呼ぶこともできる。
【００８８】
図７は、ε＝２、ｐ＝１３の場合であって、ＥＣＣ処理にユークリッド反復法を用いた場合のメモリコントローラ２００のブロック図である。
【００８９】
メモリコントローラ２００は、１３進数変換部２１０´、エンコード部２２１、“ｐ−ａｄｉｃ＜＞ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック２３０、ページ・バッファ群２４０、シンドローム生成部２２２、解探索多項式生成部２２３、ユークリッド反復法処理部２２４、第１のハッセ微分多項式生成部２２５、第２のハッセ微分多項式生成部２２６、コード復元部２２７、デコード部２２８、及び２４進数変換部２６０´を備える。
【００９０】
このうち１３進数変換部２１０´は、“ｂｉｎａｒｙ  ｔｏ  ｐ−ａｄｉｃ  ｄｅｃｏｄｅ”回路ブロック２１０に含まれる。エンコード部２２１、シンドローム生成部２２２、解探索多項式生成部２２３、ユークリッド反復法処理部２２４、第１のハッセ微分多項式生成部２２５、第２のハッセ微分多項式生成部２２６、コード復元部２２７及びデコード部２２８は、“Ｌｅｅ  ｍｅｔｒｉｃ  ｃｏｄｅ  ＥＣＣ  ｓｙｓｔｅｍ”回路ブロック２２０に含まれる。また、２４進数変換部２６０´は、“ｐ−ａｄｉｃ  ｔｏ  ｂｉｎａｒｙ  ｄｅｃｏｄｅ”回路ブロック２６０に含まれる。
【００９１】
メモリコントローラ２００に入力される３２ビットずつのまとまり（Ｍ＝３２）としてのバイナリデータＤは、始めに、１３進数変換部２１０´に入力される。
【００９２】
１３進数変換部２１０´では、入力されたバイナリデータＤが１３進数に変換される。これによって、各桁がＺｐの要素で表現されたデータＡが生成される。このデータＡは、エンコード部２２１に入力される。
【００９３】
エンコード部２２１では、入力されたデータＡに生成行列Ｇを作用させる。これによって、データＡからリー・メトリック・コードＣが生成される。このコードＣは、“ｐ−ａｄｉｃ＜＞ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック２３０に入力される。
【００９４】
“ｐ−ａｄｉｃ＜＞ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック２３０では、入力されたリー・メトリック・コードＣからメモリデバイス１００に転送されるデータが生成され、ページ・バッファ群２４０に入力される。
【００９５】
その後、ページ・バッファ２４０に保持されたデータが、メモリデバイス１００に転送され、ＭＬＣにプログラムされる。
【００９６】
続いて、メモリデバイス１００にプログラムされたデータは、一連のページ・データとしてページ・バッファ群２４０に読み出される。ここで、このデータは、“ｐ−ａｄｉｃ＜＞ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック２３０においてＭＬＣのレベルの誤認識のエラーを含むコードＹになる。以降の処理では、コードＹからエラーのないリー・メトリック・コードＣの復元を行う。
【００９７】
“ＮＡＮＤ＜＞ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック２３０から出力されたコードＹは、シンドローム生成部２２２に入力される。
【００９８】
シンドローム生成部２２２では、入力されたコードＹに対するＳ＝ＹＨｔの演算処理が行われ、シンドロームＳが生成される。この演算で得られたＳ０のリー・メトリックが３以上（｜Ｓ０｜≧３）の場合、個々のエラーコード成分の和は必ず３以上になる。つまり、ε＝２とする解法ではコードＹのエラーを訂正できない場合である。そのため、メモリコントローラ２００の外部にＮＧ信号が出力されると共に、エラー訂正前のコードＹがそのままデコード部２２８に出力される。また、Ｓ＝０の場合、コードＹにはエラーが生じていないため、コードＹはエラー訂正されることなくデコード部２２８に出力される。その他のシンドロームの場合、生成されたシンドロームＳは、解探索多項式生成部２２３に出力される。
【００９９】
解探索多項式生成部２２３では、入力されたシンドロームＳ＝（Ｓ０，Ｓ１，Ｓ２）から多項式Ψ（ｘ）が生成される。多項式Ψ（ｘ）の係数ψ０、ψ１及びψ２は、数２のようになる。この多項式Ψ（ｘ）は、ユークリッド反復法処理部２２４に出力される。
［数１０］
Ψ0 = 1
Ψ1 = -S1
Ψ2 = -(Ψ1S1+Ψ0S2)/2
【０１００】
ユークリッド反復法処理部２２４では、入力された多項式Ψ（ｘ）とｘ３からユークリッド反復法によって多項式λ（ｘ）及びｖ（ｘ）の生成が試みられる。多項式λ（ｘ）及びｖ（ｘ）が生成できない場合、メモリコントローラ２００の外部にＮＧ信号が出力される共に、エラー訂正前のコードＹがそのままデコード部２２８に出力される。一方、多項式λ（ｘ）及びｖ（ｘ）が生成できた場合、処理は、第１のハッセ微分多項式生成部２２５及び第２のハッセ微分多項式生成部２２６に移される。
【０１０１】
第１のハッセ微分多項式生成部２２５では、多項式λ（ｘ）からハッセ微分多項式が生成され、更に、このハッセ微分多項式に対してｒ＝１〜１２が代入され［λ（ｒ）］［０］＝０となる根ｒが抽出される。続いて、これら抽出された根ｒから［λ（ｒ）］［ｎ−１］＝０且つ［λ（ｒ）］［ｎ］≠０となる多重度ｎが求められる。そして、これら根ｒ、多重度ｎに基づいた位置ｔ＝ｒ−１及びエラーｅｔ＝ｎがデコード部２２７に出力される。
【０１０２】
同様に、第２のハッセ微分多項式生成部２２６では、多項式ｖ（ｘ）からハッセ微分多項式が生成され、更に、このハッセ微分多項式に対してｒ＝１〜１２が代入され［ｖ（ｒ）］［０］＝０となる根ｒが抽出される。続いて、これら抽出された根ｒから［ｖ（ｒ）］［ｎ−１］＝０且つ［ｖ（ｒ）］［ｎ］≠０となる多重度ｎが求められる。そして、これら根ｒ、多重度ｎに基づいた位置ｔ＝ｒ−１及びエラーｅｔ＝１３−ｎがコード復元部２２７に出力される。
【０１０３】
コード復元部２２７では、入力された位置ｔ及びエラーｅｔを用いてｃｔ＝ｙｔ−ｅｔからエラー訂正されたリー・メトリック・コードＣ＝（ｃ１，ｃ２，・・・，ｃ３）が復元される。このリー・メトリック・コードＣは、デコード部２２８に入力される。
【０１０４】
デコード部２２８では、入力されたリー・メトリック・コードＣに生成行列Ｇの逆変換が施される。これによって、各桁がＺｐの要素で表されるｐ進数データＡが生成される。このｐ進数データＡは、２４進数変換部２６０´に入力される。
【０１０５】
２４進数変換部２６０´では、入力されたｐ進数データＡが、バイナリデータである２４進数のバイナリデータＤに変換される。そして、このバイナリデータＤが、メモリコントローラ２００の外部に出力される。
【０１０６】
なお、図１では、ページ・バッファ群２４０を、メモリデバイス１００とのデータ授受にのみに使用しているが、このページ・バッファ群２４０は、図７に示された点線矢印ａにあるように、データ処理の過程で多重に利用することもできる。この場合、メモリコントローラ２００の回路規模を小さくすることができる。ページ・バッファ群２４０の多重使用方法については後述する。
【０１０７】
次に、データ処理過程におけるページ・バッファ群２４０の多重使用について説明する。なお、本実施形態の場合、メモリコントローラ２００に設けられた２組のページ・バッファ群２４０ａ、２４０ｂは、それぞれデータ転送及びデータ処理で交互に利用されるが、ここでは、データ処理における利用について説明する。
【０１０８】
具体例として、１６値のＭＬＣを用いたもので、１２セルあたり最高２セルのエラー訂正が可能（ε＝２）なメモリシステムを想定して説明する。また、メモリコントローラ２００のＩ／Ｏのデータ転送速度は、１バイト（８ビット）／サイクルとし、１セクタを５１２バイトとする。したがって、１セクタ分のデータを転送する場合、図８に示すように、５１２サイクル要する。
【０１０９】
ｐ＝１３の場合、コードの成分数はｎ＝ｐ−１＝１２となる。このうち２つの成分の訂正を可能（ε＝２）としているため、コード中のデータ成分はｋ＝ｎ−（ε＋１）＝１２−３＝９となる。入力されたバイナリ表示のデータの桁数をδとし、各桁をバイナリ表現した場合のビット数をｈ＝４とすると、ｐ進数変換によってδ桁のバイトデータは、δ＋１桁となる。したがって、コード中のデータ成分ｋ＝δ＋１＝９からδ＝８となる。結果として、ＥＣＣのための一括処理するバイナリデータのビット数はδｈ＝８×４＝３２となる。以下において、この処理単位である３２ビットのデータに要する処理過程を「プロセス」と呼ぶが、一般的なプロセスと区別するため「ＰＲＯＣＥＳＳ」と表記する。
【０１１０】
この場合、１ＰＲＯＣＥＳＳ分の３２ビットのデータは、４（＝３２／８）サイクル毎に蓄積することができる。つまり、４サイクル毎に１ＰＲＯＣＥＳＳの処理が可能となる。また、１セクタ分のデータは、丁度１２８ＰＲＯＣＥＳＳで過不足なく処理することができる。
【０１１１】
ページ・バッファ群２４０は概念的に、１サイクルで１バイトが記憶できるバイトレジスタを６列並べたものが基本構成とする。以下では、この６個のバイトレジスタからなる基本構成を、図８にも示すように、「ＲＥＧＩＳＴＥＲ６」と呼ぶこともある。以下において１列目からｎ列目までのバイトレジスタを「レジスタ＜１：ｎ＞」と表現する。例えば１列目から６列目までのバイトレジスタの場合「レジスタ＜１：６＞」となる。
【０１１２】
外部から入力されたバイナリデータＤは、ε＝２の場合、ＲＥＧＩＳＴＥＲ６のうちレジスタ＜１：４＞に保持される。このレジスタ＜１：４＞に保持されるバイナリデータＤは、以下のステップＳ１〜Ｓ４によって処理される。
【０１１３】
始めに、ステップＳ１において、バイナリデータＤは、１２８ＰＲＯＣＥＳＳで処理されて１３進数のデータＡに変換される。この変換によって、「ｂｉｎａｒｙ  ｄａｔａ」では、３２ビットであった１ＰＲＯＣＥＳＳ分のデータ（δ＝６）が、「ｐ−ａｄｉｃ  Ｚｐ  ｗｏｒｌｄ」では１桁分４ビット多い３６ビットのデータ（δ＝７）に変換される。したがって、１２８ＰＲＯＣＥＳＳで生成される１３進数データＡは、１２８ＰＲＯＣＥＳＳ×３６ビット＝４６０８ビットになる。この４６０８ビットのデータは、バイトレジスタ４．５列分の容量に相当する。
【０１１４】
続いて、ステップＳ２において、１３進数データＡのデータ量はバイトレジスタ４．５列分にあたるため、ＲＥＧＩＳＴＥＲ６のうちレジスタ＜１：５＞に保持されることになる。したがって、ＲＥＧＩＳＴＥＲ６のうち外部から入力されたバイナリデータＤを保持していた領域については、１３進数データＡで上書きされることになる。
【０１１５】
続いて、ステップＳ３において、１３進数データＡは、１２８ＰＲＯＣＥＳＳで処理されてリー・メトリック・コードＣに変換される。この変換によって、１ＰＲＯＣＥＳＳ分の３６ビットの１３進数データＡから、ｐ−１＝１２個の成分からなる４８ビットのＺｐのコードが生成される。したがって、１２８ＰＲＯＣＥＳＳで生成されるリー・メトリック・コードＣは、１２８ＰＲＯＣＥＳＳ×４８ビット＝６１４４ビット（７６８バイト）となる。この７６８バイトのデータは、バイトレジスタ６列分の容量に相当する。
【０１１６】
続いて、ステップＳ４において、リー・メトリック・コードＣがレジスタ＜１：６＞に保持される。したがって、ＲＥＧＩＳＴＥＲ６のうち１３進数データＡを保持していた領域については上書きされることになる。また、このステップＳ４において全てのレジスタ＜１：６＞が使用されることになる。
【０１１７】
以上のように、ε＝２の場合、「ｂｉｎａｒｙ  ｗｏｒｌｄ」から入力されたバイナリデータＤは、ＲＥＧＩＳＴＥＲ６のうちレジスタ＜１：４＞で保持され、残りのレジスタ＜５：６＞については、レジスタ＜１：４＞と併せて最終的なデータ処理結果であるリー・メトリック・コードＣを保持するまでの段階で上書きされて使用されることになる。
【０１１８】
ステップＳ１〜Ｓ４からなるデータ処理は、図８に示すように、バイナリデータＤを１３進数変換データＡに変換した後（ステップＳ１及びＳ２）、更に、１３進数データＡをリー・メトリック・コードＣに変換して（ステップＳ３及びＳ４）、これをスキャンする仮想的なデータレジスタＤ−ｒとしてイメージすることができる。
【０１１９】
図８で示すデータ処理の場合、１セクタ分４０９６ビットのデータに対して、１ＰＲＯＣＥＳＳ毎に１２セル分のデータを生成する過程を１２８ＰＲＯＣＥＳＳ繰り返すことになる。そのため、１セルの実質ビット数は、４０９６／（１２８×１２）＝２．６６７となる。
【０１２０】
以上のように、本実施形態に係るリー・メトリック・コードを用いたＥＣＣは、３２ビットのデータを１２セルで記憶し、そのうち２セルのエラーを訂正可能な効率の高いＥＣＣと言える。
【０１２１】
次に、ε＝２の場合について、データ書き込み時におけるＲＥＧＩＳＴＥＲ６でのセクタデータの処理過程について図９を参照しながら説明する。
【０１２２】
図９は、左から順に、バイナリデータのバースト転送時のＲＥＧＩＳＴＥＲ６の様子（図９中のステップＳ１）、ｐ進数変換後のＲＥＧＩＳＴＥＲ６の様子（図９中のステップＳ２）、リー・メトリック・コード変換後のＲＥＧＩＳＴＥＲ６の様子（図９中のステップＳ３）を示している。なお、図９中のレジスタを貫く実線は、８ビット毎のバイトレジスタの境界を示している。
【０１２３】
セクタレジスタとなるＲＥＧＩＳＴＥＲ６は、１０２４個のレジスタを６列並べた構成となっており、１０２４行で７６８バイトのデータ転送の受け口を持つ。６列のうち、１〜４列目をデータ転送で利用し、残りの５〜６列目をデータ転送後の処理データの保持に利用する。
【０１２４】
始めに、ステップＳ１で、転送されたバイナリデータが、４サイクル毎に１〜４列目のレジスタに１バイトずつ行方向に順次格納されていく。この動作は１２８回繰り返される。その結果、レジスタには１列毎に１２８バイトのバイナリデータが格納されることになる。一連の動作の総サイクル数は５１２サイクルとなる。
【０１２５】
以上によって、セクタレジスタには、１０桁の２４進数のｈ＝４、δ＝８に相当する３２ビットのバイナリデータが１２８ＰＲＯＣＥＳＳ分格納されることになる。
【０１２６】
続いて、ステップＳ２で、３２ビットのバイナリデータが９桁のｐ（＝１３）進数である３６ビットのデータに変換されセクタレジスタに上書きされる。このＰＲＯＣＥＳＳはレジスタ８行毎に行われる。元々のレジスタブロックは１０２４行６列であるため、１ＰＲＯＣＥＳＳ毎に８行ずつ、合計１２８ＰＲＯＣＥＳＳで埋められることになる。ここまでで、１セクタにおける「ｂｉｎａｒｙ  ｗｏｒｌｄ」から「ｐ−ａｄｉｃ  Ｚｐ  ｗｏｒｌｄ」への移行が完了したことになる。
最後に、ステップＳ３で、ｐ進数データをリー・メトリック・コードに変換する。
【０１２７】
リー・メトリック・コードは、ｐ−１（＝１２）個のＺｐの要素を成分とするデータとなる。１ＰＲＯＣＥＳＳ分のリー・メトリック・コードは、３６ビットのｐ進数データに対してＧ行列を掛けて得られる４８ビットのデータであり、この１ＰＲＯＣＥＳＳ分のリー・メトリック・コードは、８行６列のレジスタブロック１つに上書き格納される。この場合、１２８ＰＲＯＣＥＳＳで１セクタレジスタ全体がリー・メトリック・コードで満たされることになる。これによって、セクタレジスタには、ＭＬＣ１９２バイト個に書き込むためのデータが保持される。
【０１２８】
以上、ステップＳ１〜Ｓ３に示す３段階の処理は、８行６列のレジスタ群毎に順時進行して行く。
【０１２９】
なお、メモリコントローラ２００では、５１２バイトのバイナリデータからｐ進数データへの変換の際とｐ進数データから１９２バイト個のＭＬＣに書き込むリー・メトリック・コードへの変換の際の２回、セクタレジスタに対するデータの上書きが実行される。
【０１３０】
例えば、メモリデバイス１００であるＭＬＣ  ＮＡＮＤフラッシュメモリのページ構成が５１２＋１６バイトのセクタ８個で構成されている場合、４ページで（５１２＋１６）バイト×８個のＭＬＣのデータとなるので、１９２バイト個のＭＬＣのレベルは、ここで述べた２２個分のセクタレジスタに対応する。そのためメモリコントローラ２００のページ・バッファ２４０は、２２個分のセクタレジスタで構成され、このページ・バッファ２４０のデータは、ＭＬＣ  ＮＡＮＤフラッシュメモリに対して、４ページ分のデータとして転送される。
【０１３１】
メモリデバイス１００であるＭＬＣ  ＮＡＮＤフラッシュメモリのページ構成が５１２＋１６バイトのセクタ４個で構成されている場合、４ページで（５１２＋１６）バイト×４個のＭＬＣのデータとなるので、１９２バイト個のＭＬＣのレベルは、ここで述べた１１個分のセクタレジスタに対応する。そのためメモリコントローラ２００のページ・バッファ２４０は、１１個分のセクタレジスタで構成され、ＭＬＣ  ＮＡＮＤフラッシュメモリに対して、４ページ分のデータとして転送される。
【０１３２】
次に、データ読み出し時のセクタレジスタにおけるデータ処理の過程について、図１０を参照しながら説明する。
【０１３３】
始めに、ステップＳ１で、ＭＬＣ  ＮＡＮＤフラッシュメモリの４ページ分のデータが、１９２バイト個のＭＬＣに記憶されたデータ毎に、メモリコントローラ２００のページ・バッファ２４０にまとめて転送される。
【０１３４】
セクタレジスタに格納された１２８ＰＲＯＣＥＳＳ分の７６８バイトのデータは、８行６列のレジスタブロックに格納された１ＰＲＯＣＥＳＳ分のデータ毎に、セクタレジスタの端からＥＣＣによる計算処理を受け、エラーが訂正できるものは訂正され、できないものはそのままにされる。そして１２８ＰＲＯＣＥＳＳによって１セクタ全てのデータに対するＥＣＣ処理が完了し、リー・メトリック・コードが復元される。
【０１３５】
続いて、ステップＳ２で、ステップＳ１において復元されたリー・メトリック・コードが順次１３進数データに変換される。ここでは、１セクタ分のリー・メトリック・コードは、１ＰＲＯＣＥＳＳ分の４８ビット毎に生成行列Ｇの逆変換が行われ、４ビットの９桁で表される１３進数データに変換された上で、各レジスタブロックに上書きされる。
【０１３６】
最後に、ステップＳ３で、ステップＳ２において生成された１３進数データが２４進数のバイナリデータに変換される。“ｐ−ａｄｉｃ  ｔｏ  ｂｉｎａｒｙ  ｄｅｃｏｄｅ”回路ブロック２６０では、１ＰＲＯＣＥＳＳ分の１３進数データを４ビット８桁の３２ビットのバイナリデータへと変換した上で、このバイナリデータを８行６列のレジスタブロックの単位で上書きしていく。
【０１３７】
その後、バイナリデータは８行５列のレジスタ群毎に、１バイト／サイクルの速度で列順に読み出され、１セクタ分のデータとして出力される。
【０１３８】
このように、メモリコントローラ２００では、ＥＣＣ処理後に実行されるリー・メトリック・コードからｐ進数データへの変換の際とｐ進数データからバイナリデータへの変換の際の２回、セクタレジスタに対するデータの上書きが実行される。
【０１３９】
次に、ε＝２の場合について、ＲＥＧＩＳＴＥＲ６とページ・バッファの関係の一例について図１１を参照しながら説明する。図１１中に施されたハッチングは、「ｂｉｎａｒｙ  ｗｏｒｌｄ」から４サイクルで入力される３２ビットのバイナリデータＤで満たされている領域を示す。
【０１４０】
ＲＥＧＩＳＴＥＲ６は、８行６列のレジスタ群である。これをメモリコントローラ２００のページ・バッファ群２４０として見た場合、図１１に示すように、１２行４列のレジスタ群となる。この１２行４列のレジスタ群の各列がそれぞれページ＜０＞〜＜４＞に対応している。
【０１４１】
ある第ｉ番目のＰＲＯＣＥＳＳについてみた場合、イメージ的には、図１１に示すように、始めに、入力されたバイナリデータＤは、１２個のＭＬＣ＜ｉ＋０＞〜＜ｉ＋１１＞のうち８個のＭＬＣ＜ｉ＋０＞〜＜ｉ＋７＞に保持され、その後、データ処理の過程で残りのＭＬＣ＜ｉ＋８＞〜＜ｉ＋１１＞も含めて次々にＭＬＣにデータが上書きされると考えることができる。
【０１４２】
以上説明したように、本実施形態に係るメモリコントローラ２００では、データ処理の過程でページ・バッファ群２４０が多重に使用される。
【０１４３】
次に、メモリデバイス１００であるＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファとメモリコントローラ２００のページ・バッフ群２４０との関係を説明するが、その前提として、ＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファの動作例を説明しておく。
【０１４４】
図１２は、データ書き込み時における８値（３ビット）のＭＬＣからなるＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファの動作例を示す図である。
【０１４５】
なお、以下において、ＭＬＣの３ビットのうち、最も重みの小さいビットを「Ｌビット」、中程度の重みのビットを「Ｍビット」、最も重みの大きいビットを「Ｕビット」と呼ぶ事にする。また、所定数のＭＬＣのＬビット、Ｍビット、Ｕビットからなるページを、それぞれ「Ｌページ」、「Ｍページ」、「Ｕページ」と呼ぶ事にする。さらに、ＭＬＣを共通にするＬページ、Ｍページ及びＵページをまとめて「ページ群」と呼ぶ事にする。
【０１４６】
図１２に示すＭＬＣ  ＮＡＮＤフラッシュメモリは、３系統のページ・バッファｐａｇｅ＜０＞〜＜２＞を備えており、これらページ・バッファｐａｇｅ＜０＞、＜１＞、＜２＞は、それぞれＬページ、Ｍページ、Ｕページのデータ書き込み或いはデータ読み出しの際に用いられる。
【０１４７】
なお、ＭＬＣへのデータ書き込みは、ＭＬＣの閾値レベルを、最初は粗くシフトさせ、徐々に細かいシフトをさせながら確定させていくことで実現される。このため、例えば、ＬページのデータをＭＬＣの閾値レベルの最も粗い区分、ＭページのデータをＭＬＣの閾値レベルの中程度の区分、ＵページのデータをＭＬＣの閾値レベルの最も細かい区分に対応させておき、Ｌページのデータ書き込み、Ｍページのデータ書き込み、Ｕページのデータ書き込みを順次行い、ＭＬＣの閾値レベルを確定させれば良い。
【０１４８】
ｉ番目のページ群のデータ書き込みは、以下のステップによって実行される。
始めに、ステップＳ１において、メモリコントローラ２００から転送されたｉ番目のページ群のＬページのデータが、ページ・バッファｐａｇｅ＜０＞に格納されていく（図１２中のＳ１ａ）。これと同時に、既にページ・バッファｐａｇｅ＜２＞に格納されていたｉ−１番目のページ群のＵページのデータが、ＭＬＣアレイに書き込まれる（図１２中のＳ１ｂ）。
【０１４９】
続いて、ステップＳ２において、メモリコントローラ２００から転送されたｉ番目のページ群のＭページのデータが、ページ・バッファｐａｇｅ＜１＞に格納されていく（図１２中のＳ２ａ）。これと同時に、先のステップＳ１でページ・バッファｐａｇｅ＜０＞に格納されたｉ番目のページ群のＬページのデータが、ＭＬＣアレイに書き込まれる（図１２中のＳ２ｂ）。
【０１５０】
続いて、ステップＳ３において、メモリコントローラ２００から転送されたｉ番目のページ群のＵページのデータが、ページ・バッファｐａｇｅ＜２＞に格納されていく（図１２中のＳ３ａ）。これと同時に、先のステップＳ２でページ・バッファｐａｇｅ＜１＞に格納されたｉ番目のページ群のＭページのデータが、ＭＬＣアレイに書き込まれる（図１２中のＳ３ｂ）。
【０１５１】
続いて、ステップＳ１´において、先のステップＳ３においてページ・バッファｐａｇｅ＜２＞に格納されたｉ番目のページ群のＵページのデータが、ＭＬＣアレイに書き込まれる（図１２中のＳ１ｂ´）。これと同時に、メモリコントローラ２００から転送されたｉ＋１番目のページ群のＬページのデータが、ページ・バッファｐａｇｅ＜０＞に格納されていく（図１２中のＳ１ａ´）。
【０１５２】
以降、ステップＳ１〜Ｓ３を繰り返すことで複数ページ群へのデータ書き込みを完了することができる。
【０１５３】
図１３は、データ読み出し時における８値（３ビット）のＭＬＣからなるＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファの動作例を示す図である。
【０１５４】
ｉ番目のページ群のデータ読み出しは、以下のステップによって実行される。
始めに、ステップＳ１において、ＭＬＣアレイから読み出されたｉ番目のページ群のＬページのデータが、ページ・バッファ＜０＞に格納されていく（図１３中のＳ１ｂ）。これと同時に、既にページ・バッファｐａｇｅ＜２＞に格納されていたｉ−１番目のページ群のＵページのデータが、メモリコントローラ２００に転送される（図１３中のＳ１ａ）。
【０１５５】
続いて、ステップＳ２において、ＭＬＣアレイから読み出されたｉ番目のページ群のＭページのデータが、ページ・バッファｐａｇｅ＜１＞に格納されていく（図１３中のＳ２ｂ）。これと同時に、先のステップＳ１でページ・バッファｐａｇｅ＜０＞に格納されたｉ番目のページ群のＬページのデータが、メモリコントローラ２００に転送される（図１３中のＳ２ａ）。
【０１５６】
続いて、ステップＳ３において、ＭＬＣアレイから読み出されたｉ番目のページ群のＵページのデータが、ページ・バッファｐａｇｅ＜２＞に格納されていく。これと同時に、先のステップＳ３でページ・バッファｐａｇｅ＜２＞に格納されたｉ番目のページ群のＭページのデータが、メモリコントローラ２００に転送される（図１３中のＳ３ａ）。
【０１５７】
続いて、ステップＳ１´において、先のステップＳ３においてページ・バッファｐａｇｅ＜２＞に格納されたｉ番目のページ群のＵページのデータが、メモリコントローラ２００に転送される（図１３中のＳ１ａ´）。これと同時に、ＭＬＣアレイから読み出されたｉ＋１番目のページ群のＬページのデータが、ページ・バッファｐａｇｅ＜０＞に格納されていく（図１３中のＳ１ｂ´）。
【０１５８】
以降、ステップＳ１〜Ｓ３を繰り返すことで複数ページ群へのデータ読み出しを完了することができる。
【０１５９】
以上説明したように、ＭＬＣ  ＮＡＮＤフラッシュメモリでは、ページ・バッファｐａｇｅ＜０＞〜＜３＞へのデータの格納と、ＭＬＣアレイへのデータ書き込み或いはメモリコントローラ２００へのデータ読み出しが、異なるページにおいて同時に進行する。
【０１６０】
次に、図１２、図１３に示す場合における、メモリコントローラ２００のページ・バッファ群２４０とＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファとのデータ転送について説明する。
【０１６１】
図１４は、図１２に示すデータ書き込み時における、メモリコントローラ２００のページ・バッファ群２４０ａとＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファとのデータ転送を説明する図である。
【０１６２】
図１４は、ｉ番目のページ群に対するデータ書き込み時の様子であり、メモリコントローラ２００のページ・バッファ群２４０ａには、既にｉ番目のページ群に書き込むデータが格納されている。また、ページ・バッファ群２４０ｂには、ｉ−１番目のページ群に書き込まれたデータが残っている。一方、ＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファｐａｇｅ＜２＞には、既にｉ−１番目のページ群のＵページのデータが格納されている。
【０１６３】
なお、メモリコントローラ２００は、“ｐ−ａｄｉｃ＜＞ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック２３０とページ・バッファ群２４０ａ及び２４０ｂとを選択的に接続するデータパスを有しており、図１４の場合、このデータパスは、ページ・バッファ群２４０ｂに接続されている（図１４中のＡ１）。
【０１６４】
この状態において、ｉ番目のページ群のデータ書き込み時のデータ転送は以下のように実行される。
【０１６５】
始めに、ステップＳ１において、ページ・バッファ群２４０ａのページ・バッファｐａｇｅ＜０＞から転送されたｉ番目のページ群のＬページのデータが、ＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファｐａｇｅ＜０＞に格納されていく（図１４中のＳ１ａ）。これと同時に、既にＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファｐａｇｅ＜２＞に格納されていたｉ−１番目のページ群のＵページのデータが、ＭＬＣアレイに書き込まれる（図１４中のＳ１ｂ）。また、メモリコントローラ２００では、“ｐ−ａｄｉｃ＜＞ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック２３０を介して、“Ｌｅｅ  ｍｅｔｒｉｃ  ｃｏｄｅ  ＥＣＣ  ｓｙｓｔｅｍ”回路ブロック２２０からページ・バッファ群２４０ｂに対してｉ＋１番目のページ群に書き込まれるデータが転送される。これによって、図８に示したように、ページ・バッファ群２４０ｂに残っていたｉ−１番目のデータがｉ＋１番目のデータによって上書きされる。このページ・バッファ群２４０ｂに対するデータ転送は、後述のステップＳ２以降でも並行して実行される。
【０１６６】
続いて、ステップＳ２において、ページ・バッファ群２４０ａのページ・バッファｐａｇｅ＜０＞からＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファｐａｇｅ＜０＞へのｉ番目のページ群のＬページのデータが全て転送された後、このｉ番目のページ群のＬページのデータがＭＬＣアレイに書き込まれる（図１４中のＳ２ｂ）。これと同時に、ページ・バッファ群２４０ａのページ・バッファｐａｇｅ＜１＞から転送されたｉ番目のページ群のＭページのデータが、ＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファｐａｇｅ＜１＞に格納されていく（図１４中のＳ２ａ）。
【０１６７】
続いて、ステップＳ３において、ページ・バッファ群２４０ａのページ・バッファｐａｇｅ＜１＞からＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファｐａｇｅ＜１＞へのｉ番目のページ群のＭページのデータが全て転送された後、このｉ番目のページ群のＭページのデータがＭＬＣアレイに書き込まれる（図１４中のＳ３ｂ）。これと同時に、ページ・バッファ群２４０ａのページ・バッファｐａｇｅ＜２＞から転送されたｉ番目のページ群のＵページのデータが、ＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファｐａｇｅ＜２＞に格納されていく（図１４中のＳ３ａ）。
【０１６８】
一方、ステップＳ３までで、既に、メモリコントローラ２００のページ・バッファ群２４０ｂには、ｉ＋１番目のページ群に書き込まれるデータが格納されている。これによって、ステップＳ３終了後、すぐにＭＬＣ  ＮＡＮＤフラッシュメモリに対するｉ＋１番目のページ群のデータの転送が開始される。
【０１６９】
以降、データパスの接続先をページ・バッファ群２４０ａ（図１４中のＡ０）及び２４０ｂ（図１４中のＡ１）に交互に切り換えながら、ステップＳ１〜Ｓ３を繰り返すことで、メモリコントローラ２００からＭＬＣ  ＮＡＮＤフラッシュメモリへの複数のページ群に対する書き込みデータの転送を実現することができる。
【０１７０】
図１５は、図１３に示すデータ読み込み時における、メモリコントローラ２００のページ・バッファ群２４０とＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファとのデータ転送を説明する図である。
【０１７１】
図１５は、ｉ番目のページ群に対するデータ読み出し時の様子であり、メモリコントローラ２００のページ・バッファ群２４０ｂには、既にｉ−１番目のページ群から読み出されたデータが格納されている。また、ページ・バッファ群２４０ａには、ｉ−２番目のページ群から読み出されたデータが残っている。一方、ＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファｐａｇｅ＜０＞には、既にｉ番目のページ群のＬページのデータが格納されている。
【０１７２】
なお、メモリコントローラ２００のデータパスは、ページ・バッファ群２４０ｂに接続されている（図１５中のＡ１）。
【０１７３】
この状態において、ｉ番目のページ群からのデータ読み出し時のデータ転送は以下のように実行される。
【０１７４】
始めに、ステップＳ１において、既にＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファｐａｇｅ＜０＞に格納されているｉ番目のページ群のＬページのデータが、メモリコントローラ２００のページ・バッファ群２４０ａのページ・バッファｐａｇｅ＜０＞に転送される（図１５中のＳ１ａ）。これによって、ページ・バッファ群２４０ａに残っていたｉ−２番目のページ群のデータがｉ番目のページ群のデータによって上書きされる。これと同時に、ＭＬＣ  ＮＡＮＤフラッシュメモリでは、ＭＬＣアレイから読み出されたｉ番目のページ群のＭページのデータがページ・バッファｐａｇｅ＜１＞に格納されていく（図１５中のＳ１ｂ）。また、メモリコントローラ２００では、ページ・バッファ群２４０ｂに格納しているｉ−１番目のページ群のデータが、“ｐ−ａｄｉｃ  ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック２３０、“Ｌｅｅ  ｍｅｔｒｉｃ  ｃｏｄｅ  ＥＣＣ  ｓｙｓｔｅｍ”回路ブロック２２０を介して外部へ読み出される。この外部へのデータ読み出しは、後述のステップＳ２以降でも並行に実行される。
【０１７５】
続いて、ステップＳ２において、ＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファｐａｇｅ＜１＞にｉ番目のページ群のＭページのデータが全て格納された後、このｉ番目のページ群のＭページのデータがメモリコントローラ２００のページ・バッファ群２４０ａのページ・バッファｐａｇｅ＜１＞に転送される（図１５中のＳ２ａ）。これと同時に、ＭＬＣ  ＮＡＮＤフラッシュメモリでは、ＭＬＣアレイから読み出されたｉ番目のページ群のＵページのデータがページ・バッファ＜２＞に格納されていく（図１５中のＳ２ｂ）。
【０１７６】
続いて、ステップＳ３において、ＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファｐａｇｅ＜２＞にｉ番目のページ群のＵページのデータが全て格納された後、このｉ番目のページ群のＵページのデータがメモリコントローラ２００のページ・バッファ群２４０ａのページ・バッファｐａｇｅ＜２＞に転送される（図１５中のＳ３ａ）。これと同時に、ＭＬＣ  ＮＡＮＤフラッシュメモリでは、ＭＬＣアレイから読み出されたｉ＋１番目のページ群のＬページのデータがページ・バッファ＜２＞に格納されていく（図１５中のＳ３ｂ）。
【０１７７】
一方、ステップＳ３までで、メモリコントローラ２００では、ページ・バッファ群２４０ｂに格納されていたｉ−１番目のページ群のデータが全てメモリコントローラ２００から読み出された後、ページパスの接続先がページ・バッファ群２４０ａに切り換えられる（図１５中のＡ０）。
【０１７８】
以降、データパスの接続先をページ・バッファ群２４０ａ（図１５中のＡ０）及び２４０ｂ（図１５中のＡ１）に交互に切り換えながら、ステップＳ１〜Ｓ３を繰り返すことで、ＭＬＣ  ＮＡＮＤフラッシュメモリからメモリコントローラ２００への複数のページ群から読み出されたデータの転送を実現することができる。
次に、１６値のＭＬＣを用いた場合について説明しておく。
【０１７９】
図１６は、データ書き込み時における１６値（４ビット）のＭＬＣからなるＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファの動作例を示す図である。
【０１８０】
なお、以下において、ＭＬＣの４ビットのうち、最も重みの小さいビットを「Ｌビット」、中程度の重みのビットを「Ｍ１ビット」、「Ｍ２ビット」、最も重みの大きいビットを「Ｕビット」と呼ぶ事にする。また、所定数のＭＬＣのＬビット、Ｍ１ビット、Ｍ２ビット、Ｕビットからなるページを、それぞれ「Ｌページ」、「Ｍ１ページ」、「Ｍ２ページ」、「Ｕページ」と呼ぶ事にする。さらに、ＭＬＣを共通にするＬページ、Ｍ１ページ、Ｍ２ページ及びＵページをまとめて「ページ群」と呼ぶ事にする。
【０１８１】
図１６に示すＭＬＣ  ＮＡＮＤフラッシュメモリは、４系統のページ・バッファｐａｇｅ＜０＞〜＜３＞を備えており、これらページ・バッファｐａｇｅ＜０＞、＜１＞、＜２＞、＜３＞は、それぞれＬページ、Ｍ１ページ、Ｍ２ページ、Ｕページのデータ書き込み或いはデータ読み出しの際に用いられる。
【０１８２】
なお、ＭＬＣへのデータ書き込みは、ＭＬＣの閾値レベルを、最初は粗くシフトさせ、徐々に細かいシフトをさせながら確定させていくことで実現される。このため、例えば、ＬページのデータをＭＬＣの閾値レベルの最も粗い区分、Ｍ１ページ及びＭ２ページのデータをＭＬＣの閾値レベルの中程度の区分、ＵページのデータをＭＬＣの閾値レベルの最も細かい区分に対応させておき、Ｌページのデータ書き込み、Ｍ１ページのデータ書き込み、Ｍ２ページのデータ書き込み、Ｕページのデータ書き込みを順次行い、ＭＬＣの閾値レベルを確定させれば良い。
ｉ番目のページ群のデータ書き込みは、以下のステップによって実行される。
【０１８３】
始めに、ステップＳ１において、メモリコントローラ２００から転送されたｉ番目のページ群のＬページのデータが、ページ・バッファｐａｇｅ＜０＞に格納されていく（図１６中のＳ１ａ）。これと同時に、既にページ・バッファｐａｇｅ＜２＞に格納されていたｉ−１番目のページ群のＵページのデータが、ＭＬＣアレイに書き込まれる（図１６中のＳ１ｂ）。
【０１８４】
続いて、ステップＳ２において、メモリコントローラ２００から転送されたｉ番目のページ群のＭ１ページのデータが、ページ・バッファｐａｇｅ＜１＞に格納されていく（図１６中のＳ２ａ）。これと同時に、先のステップＳ１でページ・バッファｐａｇｅ＜０＞に格納されたｉ番目のページ群のＬページのデータが、ＭＬＣアレイに書き込まれる（図１６中のＳ２ｂ）。
【０１８５】
続いて、ステップＳ３において、メモリコントローラ２００から転送されたｉ番目のページ群のＭ２ページのデータが、ページ・バッファｐａｇｅ＜２＞に格納されていく（図１６中のＳ３ａ）。これと同時に、先のステップＳ２でページ・バッファｐａｇｅ＜１＞に格納されたｉ番目のページ群のＭ１ページのデータが、ＭＬＣアレイに書き込まれる（図１６中のＳ３ｂ）。
【０１８６】
続いて、ステップＳ４において、メモリコントローラ２００から転送されたｉ番目のページ群のＵページのデータが、ページ・バッファｐａｇｅ＜３＞に格納されていく（図１６中のＳ４ａ）。これと同時に、先のステップＳ２でページ・バッファｐａｇｅ＜２＞に格納されたｉ番目のページ群のＭ１ページのデータが、ＭＬＣアレイに書き込まれる（図１６中のＳ４ｂ）。
【０１８７】
続いて、ステップＳ１´において、先のステップＳ４においてページ・バッファｐａｇｅ＜３＞に格納されたｉ番目のページ群のＵページのデータが、ＭＬＣアレイに書き込まれる（図１６中のＳ１ｂ´）。これと同時に、メモリコントローラ２００から転送されたｉ＋１番目のページ群のＬページのデータが、ページ・バッファｐａｇｅ＜０＞に格納されていく（図１６中のＳ１ａ´）。
【０１８８】
以降、ステップＳ１〜Ｓ４を繰り返すことで複数ページ群へのデータ書き込みを完了することができる。
【０１８９】
図１７は、データ読み出し時における１６値（４ビット）のＭＬＣからなるＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファの動作例を示す図である。
【０１９０】
ｉ番目のページ群のデータ読み出しは、以下のステップによって実行される。
始めに、ステップＳ１において、ＭＬＣアレイから読み出されたｉ番目のページ群のＬページのデータが、ページ・バッファ＜０＞に格納されていく（図１７中のＳ１ｂ）。これと同時に、既にページ・バッファｐａｇｅ＜２＞に格納されていたｉ−１番目のページ群のＵページのデータが、メモリコントローラ２００に転送される（図１７中のＳ１ａ）。
【０１９１】
続いて、ステップＳ２において、ＭＬＣアレイから読み出されたｉ番目のページ群のＭ１ページのデータが、ページ・バッファｐａｇｅ＜１＞に格納されていく（図１７中のＳ２ｂ）。これと同時に、先のステップＳ１でページ・バッファｐａｇｅ＜０＞に格納されたｉ番目のページ群のＬページのデータが、メモリコントローラ２００に転送される（図１７中のＳ２ａ）。
【０１９２】
続いて、ステップＳ３において、ＭＬＣアレイから読み出されたｉ番目のページ群のＭ２ページのデータが、ページ・バッファｐａｇｅ＜２＞に格納されていく（図１７中のＳ３ｂ）。これと同時に、先のステップＳ２でページ・バッファｐａｇｅ＜１＞に格納されたｉ番目のページ群のＭ１ページのデータが、メモリコントローラ２００に転送される（図１７中のＳ３ａ）。
【０１９３】
続いて、ステップＳ４において、ＭＬＣアレイから読み出されたｉ番目のページ群のＵページのデータが、ページ・バッファｐａｇｅ＜３＞に格納されていく。これと同時に、先のステップＳ３でページ・バッファｐａｇｅ＜２＞に格納されたｉ番目のページ群のＭ２ページのデータが、メモリコントローラ２００に転送される（図１７中のＳ４ａ）。
【０１９４】
続いて、ステップＳ１´において、先のステップＳ４においてページ・バッファｐａｇｅ＜３＞に格納されたｉ番目のページ群のＵページのデータが、メモリコントローラ２００に転送される（図１７中のＳ１ａ´）。これと同時に、ＭＬＣアレイから読み出されたｉ＋１番目のページ群のＬページのデータが、ページ・バッファｐａｇｅ＜０＞に格納されていく（図１７中のＳ１ｂ´）。
【０１９５】
以降、ステップＳ１〜Ｓ４を繰り返すことで複数ページ群へのデータ読み出しを完了することができる。
【０１９６】
以上説明したように、ＭＬＣ  ＮＡＮＤフラッシュメモリでは、ページ・バッファｐａｇｅ＜０＞〜＜３＞へのデータの格納と、ＭＬＣアレイへのデータ書き込み或いはメモリコントローラ２００へのデータ読み出しが、異なるページにおいて同時に進行する。
【０１９７】
次に、図１６、図１７に示す場合における、メモリコントローラ２００のページ・バッファ群２４０とＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファとのデータ転送について説明する。
【０１９８】
図１８は、図１６に示すデータ書き込み時における、メモリコントローラ２００のページ・バッファ群２４０とＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファとのデータ転送を説明する図である。
【０１９９】
図１８は、ｉ番目のページ群に対するデータ書き込み時の様子であり、メモリコントローラ２００のページ・バッファ群２４０ａには、既にｉ番目のページ群に書き込むデータが格納されている。また、ページ・バッファ群２４０ｂには、ｉ−１番目のページ群に書き込まれたデータが残っている。一方、ＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファｐａｇｅ＜３＞には、既にｉ−１番目のページ群のＵページのデータが格納されている。
【０２００】
なお、メモリコントローラ２００は、“ｐ−ａｄｉｃ＜＞ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック２３０とページ・バッファ群２４０ａ及び２４０ｂとを選択的に接続するデータパスを有しており、図１８の場合、このデータパスは、ページ・バッファ群２４０ｂに接続されている（図１８中のＡ１）。
【０２０１】
この状態において、ｉ番目のページ群のデータ書き込み時のデータ転送は以下のように実行される。
【０２０２】
始めに、ステップＳ１において、ページ・バッファ群２４０ａのページ・バッファｐａｇｅ＜０＞から転送されたｉ番目のページ群のＬページのデータが、ＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファｐａｇｅ＜０＞に格納されていく（図１８中のＳ１ａ）。これと同時に、既にＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファｐａｇｅ＜３＞に格納されていたｉ−１番目のページ群のＵページのデータが、ＭＬＣアレイに書き込まれる（図１８中のＳ１ｂ）。また、メモリコントローラ２００では、“ｐ−ａｄｉｃ＜＞ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック２３０を介して、“Ｌｅｅ  ｍｅｔｒｉｃ  ｃｏｄｅ  ＥＣＣ  ｓｙｓｔｅｍ”回路ブロック２２０からページ・バッファ群２４０ｂに対してｉ＋１番目のページ群に書き込まれるデータが転送される。これによって、図８に示したように、ページ・バッファ群２４０ｂに残っていたｉ−１番目のデータがｉ＋１番目のデータによって上書きされる。このページ・バッファ群２４０ｂに対するデータ転送は、後述のステップＳ２以降でも並行に実行される。
【０２０３】
続いて、ステップＳ２において、ページ・バッファ群２４０ａのページ・バッファｐａｇｅ＜０＞からＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファｐａｇｅ＜０＞へのｉ番目のページ群のＬページのデータが全て転送された後、このｉ番目のページ群のＬページのデータがＭＬＣアレイに書き込まれる（図１８中のＳ２ｂ）。これと同時に、ページ・バッファ群２４０ａのページ・バッファｐａｇｅ＜１＞から転送されたｉ番目のページ群のＭ１ページのデータが、ＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファｐａｇｅ＜１＞に格納されていく（図１８中のＳ２ａ）。
【０２０４】
続いて、ステップＳ３において、ページ・バッファ群２４０ａのページ・バッファｐａｇｅ＜１＞からＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファｐａｇｅ＜１＞へのｉ番目のページ群のＭ１ページのデータが全て転送された後、このｉ番目のページ群のＭ１ページのデータがＭＬＣアレイに書き込まれる（図１８中のＳ３ｂ）。これと同時に、ページ・バッファ群２４０ａのページ・バッファｐａｇｅ＜２＞から転送されたｉ番目のページ群のＭ２ページのデータが、ＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファｐａｇｅ＜２＞に格納されていく（図１８中のＳ３ａ）。
【０２０５】
続いて、ステップＳ４において、ページ・バッファ群２４０ａのページ・バッファｐａｇｅ＜２＞からＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファｐａｇｅ＜２＞へのｉ番目のページ群のＭ２ページのデータが全て転送された後、このｉ番目のページ群のＭ２ページのデータがＭＬＣアレイに書き込まれる（図１８中のＳ４ｂ）。これと同時に、ページ・バッファ群２４０ａのページ・バッファｐａｇｅ＜３＞から転送されたｉ番目のページ群のＵページのデータが、ＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファｐａｇｅ＜３＞に格納されていく（図１８中のＳ４ａ）。
【０２０６】
一方、ステップＳ４までで、既に、メモリコントローラ２００のページ・バッファ群２４０ｂには、ｉ＋１番目のページ群に書き込まれるデータが格納されている。これによって、ステップＳ４終了後、すぐにＭＬＣ  ＮＡＮＤフラッシュメモリに対するｉ＋１番目のページ群のデータの転送が開始される。
【０２０７】
以降、データパスの接続先をページ・バッファ群２４０ａ（図１８中のＡ０）及び２４０ｂ（図１８中のＡ１）に交互に切り換えながら、ステップＳ１〜Ｓ４を繰り返すことで、メモリコントローラ２００からＭＬＣ  ＮＡＮＤフラッシュメモリへの複数のページ群に対する書き込みデータの転送を実現することができる。
【０２０８】
図１９は、図１７に示すデータ読み込み時における、メモリコントローラ２００のページ・バッファ群２４０とＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファとのデータ転送を説明する図である。
【０２０９】
図１９は、ｉ番目のページ群に対するデータ読み出し時の様子であり、メモリコントローラ２００のページ・バッファ群２４０ｂには、既にｉ−１番目のページ群から読み出されたデータが格納されている。また、ページ・バッファ群２４０ａには、ｉ−２番目のページ群から読み出されたデータが残っている。一方、ＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファｐａｇｅ＜０＞には、既にｉ番目のページ群のＬページのデータが格納されている。
【０２１０】
なお、メモリコントローラ２００のデータパスは、ページ・バッファ群２４０ｂに接続されている（図１９中のＡ１）。
【０２１１】
この状態において、ｉ番目のページ群からのデータ読み出し時のデータ転送は以下のように実行される。
【０２１２】
始めに、ステップＳ１において、既にＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファｐａｇｅ＜０＞に格納されているｉ番目のページ群のＬページのデータが、メモリコントローラ２００のページ・バッファ群２４０ａのページ・バッファｐａｇｅ＜０＞に転送される（図１９中のＳ１ａ）。これによって、ページ・バッファ群２４０ａに残っていたｉ−２番目のページ群のデータがｉ番目のページ群のデータによって上書きされる。これと同時に、ＭＬＣ  ＮＡＮＤフラッシュメモリでは、ＭＬＣアレイから読み出されたｉ番目のページ群のＭページのデータがページ・バッファｐａｇｅ＜１＞に格納されていく（図１９中のＳ１ｂ）。また、メモリコントローラ２００では、ページ・バッファ群２４０ｂに格納しているｉ−１番目のページ群のデータが、“ｐ−ａｄｉｃ  ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック２３０、“Ｌｅｅ  ｍｅｔｒｉｃ  ｃｏｄｅ  ＥＣＣ  ｓｙｓｔｅｍ”回路ブロック２２０を介して外部へ読み出される。この外部へのデータ読み出しは、後述のステップＳ２以降でも並行に実行される。
【０２１３】
続いて、ステップＳ２において、ＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファｐａｇｅ＜１＞にｉ番目のページ群のＭ１ページのデータが全て格納された後、このｉ番目のページ群のＭ１ページのデータがメモリコントローラ２００のページ・バッファ群２４０ａのページ・バッファｐａｇｅ＜１＞に転送される（図１９中のＳ２ａ）。これと同時に、ＭＬＣ  ＮＡＮＤフラッシュメモリでは、ＭＬＣアレイから読み出されたｉ番目のページ群のＭ２ページのデータがページ・バッファ＜２＞に格納されていく（図１９中のＳ２ｂ）。
【０２１４】
続いて、ステップＳ３において、ＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファｐａｇｅ＜２＞にｉ番目のページ群のＭ２ページのデータが全て格納された後、このｉ番目のページ群のＭ２ページのデータがメモリコントローラ２００のページ・バッファ群２４０Ａのページ・バッファｐａｇｅ＜２＞に転送される（図１９中のＳ３ａ）。これと同時に、ＭＬＣ  ＮＡＮＤフラッシュメモリでは、ＭＬＣアレイから読み出されたｉ番目のページ群のＵページのデータがページ・バッファ＜３＞に格納されていく（図１９中のＳ３ｂ）。
【０２１５】
続いて、ステップＳ４において、ＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファｐａｇｅ＜３＞にｉ番目のページ群のＵページのデータが全て格納された後、このｉ番目のページ群のＵページのデータがメモリコントローラ２００のページ・バッファ群２４０ａのページ・バッファｐａｇｅ＜３＞に転送される（図１９中のＳ４ａ）。これと同時に、ＭＬＣ  ＮＡＮＤフラッシュメモリでは、ＭＬＣアレイから読み出されたｉ＋１番目のページ群のＬページのデータがページ・バッファ＜２＞に格納されていく（図１９中のＳ４ｂ）。
【０２１６】
一方、ステップＳ４までで、メモリコントローラ２００では、ページ・バッファ群２４０ｂに格納されていたｉ−１番目のページ群のデータが全てメモリコントローラ２００から読み出された後、ページパスの接続先がページ・バッファ群２４０ａに切り換えられる（図１９中のＡ０）。
【０２１７】
以降、データパスの接続先をページ・バッファ群２４０ａ（図１９中のＡ０）及び２４０ｂ（図１９中のＡ１）に交互に切り換えながら、ステップＳ１〜Ｓ４を繰り返すことで、ＭＬＣ  ＮＡＮＤフラッシュメモリからメモリコントローラ２００への複数のページ群から読み出されたデータの転送を実現することができる。
【０２１８】
以上では、８値のＭＬＣと１６値のＭＬＣを用いた場合について、ＭＬＣ  ＮＡＮＤフラッシュメモリのページ・バッファとメモリコントローラ２００のページ・バッファ群２４０とのデータの転送の方法を説明した。
【０２１９】
一方、メモリコントローラ２００のようなｐ−ａｄｉｃコントローラの場合、メモリコントローラ２００のページ・バッファ群２４０とＭＬＣ  ＮＡＮＤフラッシュメモリの各ページとのマッピングが重要となる。
【０２２０】
但し、このマッピングは、メモリデバイス１００とメモリコントローラ２００との間で辻褄が合ってさえいれば良く、メモリシステムと外部とのデータのマッピングは任意である。このメモリシステムと外部とのデータのマッピングを上手く設定してやれば、メモリデバイス１００に記録するデータと実際のバイナリデータとの対応関係を複雑にすることができ、記録データのセッキュリティを高めることができる。以下において、このメモリシステムと外部とのデータのマッピングを任意に設定できる機能ブロックを「スクランブラＢＳｃ」と呼ぶことにする。
【０２２１】
そこで、次に、本実施形態に係るメモリコントローラ２００がスクランブラＢＳｃを備えた場合における、リー・メトリック・コードの各シンボルが表わすＺｐの数とＭＬＣのレベルとの対応関係について図２０を用いて説明する。
【０２２２】
図２０に示すスクランブラＢＳｃは、“ａｄｄｒｅｓｓ  ｓｃｒａｍｂｌｅｒ”回路ブロック及び“ｒｏｔａｔｏｒ”回路ブロックを有する。
【０２２３】
“ａｄｄｒｅｓｓ  ｓｃｒａｍｂｌｅｒ”回路ブロックは、外部から入力されたバイナリデータがＺｐの数を成分とするコードに変換された後で、このコードの各成分をページ内のどのアドレスに格納するかを決定する。
【０２２４】
ＭＬＣ  ＮＡＮＤコントローラ（メモリコントローラ２００）及びＭＬＣ  ＮＡＮＤフラッシュメモリ（メモリデバイス１００）間のデータ転送は、全てＺｐの数を成分とするコードで行われるが、データ書き込み時及びデータ読み出し時のＺｐの数とＭＬＣのレベルとの対応関係が一定であれば、“ａｄｄｒｅｓｓ  ｓｃｒａｍｂｌｅｒ”回路ブロックにおいて、コードの成分をページ内のどのアドレスに格納するかをメモリコントローラ２００毎に任意に設定することができる。
【０２２５】
一方、“ｒｏｔａｔｏｒ”回路ブロックは、コードの成分が表わすＺｐの数を、その巡回的順序を維持しつつＭＬＣのレベルに対応付けする。
【０２２６】
Ｚｐは、巡回的順序の数であり、この数の変化を検出し、訂正するのがリー・メトリック・コードを用いたＥＣＣである。このＺｐの巡回的順序を維持したままＭＬＣのレベルに対応付けさえすれば、隣接レベル間で生じるエラーは、Ｚｐの数の最小変化に留まる。したがって、Ｚｐの巡回的順序とＭＬＣのレベルの順序との対応に飛びがなく、且つ、その対応関係がデータ書き込み時及びデータ読み出し時においてＭＬＣ毎に一定であれば、Ｚｐの数とＭＬＣの絶対的なレベルとの対応関係に制限はなく、“ｒｏｔａｔｏｒ”回路ブロックにおいて、メモリコントローラ２００毎に任意に設定することができる。
【０２２７】
図２０の場合は、ｐ＝１３とした場合のＭＬＣのレベルに対するＺｐの数の対応関係を説明する図である。
【０２２８】
始めに、コードの成分が表現するｎ＝ｐ−１＝１２個の成分は、“ａｄｄｒｅｓｓ  ｓｃｒａｍｂｌｅｒ”回路ブロックによって、それぞれＭＬＣ  ＮＡＮＤフラッシュメモリのページ内のアドレスにマッピングされる。
【０２２９】
そして、ＭＬＣの最低のレベルから最高のレベルにかけて、各レベルに０〜１２の番号が昇順又は降順に付けられているとした場合、“ｒｏｔａｔｏｒ”回路ブロックによって、このＭＬＣのレベルの番号とＺｐの１３個の成分の対応付けがなされる。図２０の例では、Ｚｐの数にｓ（ｓは、整数）を加えてＭＬＣのレベルの番号に変換している。
【０２３０】
ＭＬＣのレベルとページ・バッファのビットのデータの対応は、例えば、図２０に示したように、グレイ・コードを用いても良い。これはメモリデバイス１００の仕様に従う。
【０２３１】
［実施形態に係るメモリコントローラの特徴とその判別方法］
メモリコントローラ２００には、図２０に示したＺｐの数を成分とするコードをスクランブルするスクランブラＢＳｃの他、バイナリデータそのものをスクランブルするスクランブラ（以下、この機能ブロックを「スクランブラＡＳｃ」と呼ぶ）を含めることもできる。
【０２３２】
即ち、このスクランブラＡＳｃは、データ・コマンドバスを介してメモリコントローラ２００とＣＰＵ等との間で転送されるデータと、メモリコントローラ２００の内部で処理されるデータとを対応付けるものである。例えば、メモリコントローラ２００にシリアルに入力されたデータに対して、どのように順序付けをするか、或いは、反転させるか等の処理を行う。
【０２３３】
つまり、メモリコントローラ２００は、ＣＰＵ側のスクランブラＡＳｃとメモリデバイス１００側のスクランブラＢＳｃの２箇所によってデータのスクランブルを行う。これらスクランブラＡＳｃ及びＢＳｃによる作用によって、データ・コマンドバス上のデータとメモリデバイス１００に記憶されるデータとの対応関係は非常に複雑かつ予測困難なものとなる。
【０２３４】
従って、実施形態に係るメモリコントローラ２００を使用しているかどうかを判別するためには、これらスクランブラＡＳｃ及びＢＳｃに依存しないメモリコントローラ２００の特徴を知っておく必要がある。
【０２３５】
そこで、次に、これらスクランブルＡＳｃ及びＢＳｃの影響について図２１を参照しながら説明する。
【０２３６】
なお、以下において、ＣＰＵ側のデータバス上のデータのうちメモリコントローラで一括処理される最小のデータのまとまりを（Ｄ）、メモリコントローラによってデータＤを処理後の最小のデータのまとまりを（δ）とする。データ処理の作用を＊を用いて表わす。また、スクランブラＡＳｃ及びＢＳｃを除くｐ−ａｄｉｃコントローラ（実施形態に係るメモリコントローラ２００）本体によるデータ処理をＰ、スクランブラＡＳｃ及びＢＳｃを除くバイナリ・リニア・コントローラ本体（比較例に係るメモリコントローラ）によるデータ処をＬで表わす。この表記方法によれば、例えば、データＤにスクランブラＡＳｃを作用させた場合ＡＳｃ（Ｄ）と表記でき、さらに、ＡＳｃ（Ｄ）にｐ−ａｄｉｃコントローラを作用させた場合Ｐ＊ＡＳｃ（Ｄ）と表記することができる。
【０２３７】
メモリコントローラがｐ−ａｄｉｃコントローラ及びバイナリ・リニア・コントローラの特徴は、データ（Ｄ）として、任意のデータ［ｃ］とその反転データ［／ｃ］を入力した場合に現れる。
始めに、ｐ−ａｄｉｃコントローラの特徴を説明する。
【０２３８】
データ（Ｄ）をｐ−ａｄｉｃコントローラで処理した場合、データ（δ）は数１１のようになる。
［数１１］
BSc*P*ASc(D) = (δ)
【０２３９】
データ（Ｄ）として［ｃ］、［／ｃ］を入力した場合、スクランブラＡＳｃを作用させた結果は数１２のように表わすことができる。
［数１２］
ASc[c] = (a)
ASc[/c] = (/a)
【０２４０】
スクランブラＡＳｃは、どのようなデータ（Ｄ）に対しても、一定にスクランブルするため、データ［ｃ］と［／ｃ］に対してスクランブラＡＳｃを作用させた結果は、やはり互いに相補の関係となる。
【０２４１】
さらに、数１２のデータ（ａ）とデータ（／ａ）に対して、ｐ−ａｄｉｃコントローラ本体のデータ処理を作用させた結果Ｐ（ａ）、Ｐ（／ａ）は、それぞれ数１３のように表わすことができる。
［数１３］
P(a) = (α)
P(/a) = (β)
【０２４２】
バイナリデータからｐ進数データへの変換などｐ−ａｄｉｃコントローラ本体のデータ処理では線形関係が成立しないため、データ（α）とデータ（β）との間では単純に関係づけることはできない。
【０２４３】
これらデータ（α）、（β）に更に、スクランブラＢＳｃを作用させた結果ＢＳｃ（α）、ＢＳｃ（β）は、それぞれ数１４のように表わすことができる。
［数１４］
BSc(α)=BSc*P*ASc[c] = (X)
BSc(β)=BSc*P*ASc[/c] = (Y)
【０２４４】
スクランブラＢＳｃは、どのようなデータ（Ｄ）に対しても、一定にスクランブルするため、複雑な関係にあるデータ（α）と（β）とにそれぞれスクランブラＢＳｃを作用させても、やはり、結果として得られる（Ｘ）と（Ｙ）とは複雑な関係となる。
【０２４５】
つまり、ｐ−ａｄｉｃコントローラでデータを処理した場合、ｐ−ａｄｉｃコントローラに入力したデータと、ｐ−ａｄｉｃコントローラによってパリティ情報が付加されて出力されたデータとは、非線形の関係となる。
【０２４６】
続いて、比較例に係るバイナリ・リニア・コントローラの特徴を説明する。
データ（Ｄ）をバイナリ・リニア・コントローラで処理した場合、データ（δ）は数１５のようになる。
［数１５］
BSc*L*ASc(D) = (δ)
【０２４７】
データ（Ｄ）として［ｃ］、［／ｃ］を入力した場合、スクランブラＡＳｃを作用させた結果は数１６のように表わすことができる。
［数１６］
ASc[c] = (a)
ASc[/c] = (/a)
【０２４８】
さらに、数１６のデータ（ａ）とデータ（／ａ）に対してバイナリ・リニア・コントローラ本体におけるデータ処理の結果Ｌ（ａ）、Ｌ（／ａ）は、それぞれ数１７のように表わすことができる。
［数１７］
L(a) = (α)
L(/a) = (β)
【０２４９】
バイナリ・リニア・コントローラ本体によって相補的な２つのデータ（ａ）及び（／ａ）を処理した結果であるデータ（α）及び（β）のビット毎のｍｏｄ（２）による加算結果は、数１８のような関係が成立する。
［数１８］
(α)+(β) = L{(a)+(/a)} = L[1]=[1]'
ここで［１］´は、データ（α）及び（β）のビット毎のｍｏｄ２による加算結果のうちデータ（Ｄ）と対応する部分が全て‘１’であることを示している。なお、パリティデータについては、データ［ｃ］及び［／ｃ］が相補の関係にあってもパリティデータ同士が相補の関係にはないため、これらのｍｏｄ（２）による加算結果は、必ずしも‘１’にはならない。
【０２５０】
したがって、データ（α）、（β）にそれぞれスクランブラＢＳｃを作用させた結果ＢＳｃ（α）、ＢＳｃ（β）に関しても数１９のような関係が成立する。
［数１９］
BSc(α) = BSc*L*ASc[c] = (X)
BSc(β) = BSc*L*ASc[/c] = (Y)
(X)+(Y) = [1]'
【０２５１】
以上、説明したように、ｐ−ａｄｉｃコントローラとバイナリ・リニア・コントローラの特徴は、相補的なデータを処理した後のデータを比べることで顕在化する。この特徴によって、外部からメモリコントローラの種類を判別することができる。
【０２５２】
なお、図２１では、スクランブラＡＳｃ及びＢＳｃは、メモリコントローラに含まれていたが、メモリコントローラの外部に有っても良い。
【０２５３】
次に、メモリコントローラがｐ−ａｄｉｃコントローラであるかバイナリ・リニア・コントローラであるかを判別する手順について説明する。
【０２５４】
図２２は、メモリコントローラの判別手順を説明する図である。
始めに、メモリコントローラにデータｃを入力し（図２２中のステップＳ１）、メモリコントローラからメモリデバイスに出力されるデータＸを得る（図２２中のステップＳ２）。同様に、メモリコントローラにデータｃの反転データ／ｃを入力し（図２２中のステップＳ３）、メモリコントローラからメモリデバイスに出力されるデータＹを得る（図２２中のステップＳ４）。
【０２５５】
続いて、データＸ及びＹに対して２を法とするビット毎の加算を行う（図２２中のステップＳ５）。
そして、その加算結果のうち、入力データに対応する特定のビットが全て‘１’かどうかを検証する（図２２中のステップＳ６）。なお、この特定のビットは、入力データと同じビット数となる。加算結果の特定のビットが全て‘１’であった場合には、メモリコントローラがバイナリ・リニア・コントローラであると判別でき、そうでない場合、つまり、加算結果の特定のビットに‘０’がある場合、メモリコントローラがｐ−ａｄｉｃコントローラであると判別できる。つまり、本実施形態に係るｐ−ａｄｉｃコントローラ（メモリコントローラ２００）を用いた場合、ステップＳ５で得られた加算結果には、入力データのビット数以上の‘１’が現れない場合も生じることになる。
【０２５６】
図２３は、メモリコントローラの他の判別手順を説明する図である。
データからリード・ソロモン・コードへのエンコードの方式はいくつかあり、その方式によっては、結果として得られたリード・ソロモン・コードの各ビットを、データに対応する情報部分か、その他のパリティ部分かに明確に分けることができない場合もある。
【０２５７】
しかし、この場合であっても、バイナリ・リニア・コントローラを用いた場合、データｃを入力した時の出力データＸと、データｃの相補のデータ／ｃを入力したときの出力データＹとで、２を法とするビット毎の加算を行った場合、この加算結果のうち入力データと同程度のビット数の特定のビットは、全て‘１’又は全て‘０’になる。この特徴は入力データに依らず現れる。一方、ｐ−ａｄｉｃコントローラを用いた場合、この様な特徴は現れない。
【０２５８】
つまり、このバイナリ・リニア・コントローラの特徴が利用することで、情報部分とパリティ部分を明確に区別できないコードが用いられている場合であっても、メモリコントローラの種類を判別することができる。
【０２５９】
図２３の場合、複数のデータｃ＝ｃ１、ｃ２、・・・及びその反転データ／ｃ＝／ｃ１、／ｃ２、・・・を入力データとして、図２１に示すステップＳ１〜Ｓ５と同様の手順を行う。これによって、データｃ及び反転データ／ｃの組毎に出力データＸ及びＹに対する２を法とする加算結果が得られる。
【０２６０】
そして、各加算結果のうち入力データのビット数程度の特定のビットが全て‘１’又は全て‘０’であり、且つ、この特定のビットの位置が全ての加算結果において共通している場合、メモリコントローラがバイナリ・リニア・コントローラであると判別でき、そうでない場合、メモリコントローラがｐ−ａｄｉｃコントローラであると判別できる（図２３中のステップＳ６）。
【０２６１】
ここで、ステップＳ６の説明において「入力データのビット数程度」と記載したが、これは、例えば、出力データのビット数の２／３にあたるビット数を意味する。換言すれば、加算結果の中に出力データ長の１／３以上の数の特定のビットにおいて、‘０’及び‘１’が共に現れる場合には、ｐ−ａｄｉｃコントローラであると言える。
【０２６２】
なお、この「２／３」とし根拠は、入力データに対して付加されるパリティ情報のサイズが、入力データのサイズの５０％を超えているようなコードを用いたＥＣＣは非常に効率が悪いものであり、実用的ではないと考えられるからである。
【０２６３】
［まとめ］
以上、本実施形態に係るメモリシステム及びメモリコントローラを用いた電子機器等のシステムの場合、メモリコントローラの種類の判別が容易である。それと共に、外部から入力されるデータ又は外部に出力するデータとメモリデバイスで記録されているデータとの関係が、バイナリ・リニア・コントローラを用いた場合よりも複雑であるためセキュリティが高いと言える。
【０２６４】
なお、本実施形態に係るメモリコントローラ及びメモリシステムの特徴をまとめると以下のようになる。
【０２６５】
（１）  外部からの入力データにパリティ情報を付加させた記憶データを記憶する複数のメモリセルを有するメモリデバイスと、入力データ及び記憶データ間の変換を行うメモリコントローラとを備え、記憶データに含まれる入力データに対応する情報データは、入力データに対して非線形の関係にあることを特徴とするメモリシステムである。ここでの非線形とは入力データの和の情報データが、各々の情報データの和とはならいない関係を言う。
【０２６６】
（２）  情報データは、入力データと同じビット数であり、相補関係にある２つの入力データそれぞれに対応した２つの記憶データの情報データ同士の２を法とする加算を行った場合、当該２を法とする加算結果のうち１ビットは‘０’データになることを特徴とする上記（１）記載のメモリシステムである。
【０２６７】
（３）  相補関係にある２つの入力データそれぞれに対応した２つの記憶データに対して２を法とする加算を、異なる複数組の相補関係にある２つの入力データのそれぞれについて取った場合、これら加算結果に共通する出力データ長の１／３を超える数の特定のビットに、それぞれ‘０’データ及び‘１’データが共に現れることを特徴とする上記（１）記載のメモリシステムである。
【０２６８】
（４）  メモリコントローラは、バイナリデータ及びｐ進数データ（ｐは、素数）間の変換を行うｐ進数変換部を有し、当該ｐ進数変換部を用いて入力データ及び記憶データ間の変換を行うことを特徴とする上記（１）〜（３）のいずれか１つに記載のメモリシステムである。
【０２６９】
（５）  メモリデバイスは、１つのメモリセル毎にｄビット（ｄは、２以上の整数）を記憶し、所定数のメモリセルの特定のビットからなるページ単位でデータの読み書きをし、メモリコントローラは、ページのサイズのｄ倍のサイズを持つバッファ・レジスタを有し、当該バッファ・レジスタを介してメモリデバイスとの記憶データの送受信を行うことを特徴とする上記（１）〜（４）のいずれか１つに記載のメモリシステムである。
【０２７０】
（６）  メモリコントローラは、バッファ・レジスタを複数有することを特徴とする上記（５）記載のメモリシステムである。
【０２７１】
（７）  メモリコントローラは、入力データ及び記憶データの少なくとも一方のデータをスクランブルするスクランブラを有し、スクランブラを介して入力データ及び記憶データ間の変換を行うことを特徴とする上記（６）記載のメモリシステムである。
【０２７２】
（８）  記憶データを記憶する複数のメモリセルを有するメモリデバイスを制御するメモリコントローラであって、メモリデバイスの制御の際、外部からの入力データと当該入力データにパリティ情報を付加させた記憶データとの変換を行い、記憶データに含まれる入力データに対応する情報データが入力データに対して非線形の関係にあることを特徴とするメモリコントローラである。
【０２７３】
［その他］
以上、本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２７４】
１００・・・メモリデバイス（ＭＬＣ  ＮＡＮＤフラッシュメモリ）、２００・・・メモリコントローラ（ＭＬＣ  ＮＡＮＤコントローラ、ｐ−ａｄｉｃコントローラ）、２１０・・・“ｂｉｎａｒｙ  ｔｏ  ｐ−ａｄｉｃ  ｄｅｃｏｄｅ”回路ブロック、２１０´・・・１３進数変換部、２２０・・・“Ｌｅｅ  ｍｅｔｒｉｃ  ｃｏｄｅ  ＥＣＣ  ｓｙｓｔｅｍ”回路ブロック、２２１・・・エンコード部、２２２・・・シンドローム生成部、２２３・・・解探索多項式生成部、２２４・・・ユークリッド反復法処理部、２２５、２２６・・・ハッセ微分多項式生成部、２２７・・・コード復元部、２２７・・・デコード部、２３０・・・“ｐ−ａｄｉｃ＜＞ＭＬＣ  ｂｉｎａｒｙ  ｍａｐｐｉｎｇ”回路ブロック、２４０、２４０ａ、２０４ｂ・・・ページ・バッファ群、２５０・・・“ｃｏｎｔｒｏｌ”回路ブロック、２６０・・・“ｐ−ａｄｉｃ  ｔｏ  ｂｉｎａｒｙ  ｄｅｃｏｄｅ”回路ブロック、２６０´・・・２４進数変換部。
【図１】
0005398764.tif 000002
【図２】
0005398764.tif 000003
【図３】
0005398764.tif 000004
【図４】
0005398764.tif 000005
【図５】
0005398764.tif 000006
【図６】
0005398764.tif 000007
【図７】
0005398764.tif 000008
【図８】
0005398764.tif 000009
【図９】
0005398764.tif 000010
【図１０】
0005398764.tif 000011
【図１１】
0005398764.tif 000012
【図１２】
0005398764.tif 000013
【図１３】
0005398764.tif 000014
【図１４】
0005398764.tif 000015
【図１５】
0005398764.tif 000016
【図１６】
0005398764.tif 000017
【図１７】
0005398764.tif 000018
【図１８】
0005398764.tif 000019
【図１９】
0005398764.tif 000020
【図２０】
0005398764.tif 000021
【図２１】
0005398764.tif 000022
【図２２】
0005398764.tif 000023
【図２３】
0005398764.tif 000024