"外部からの入力データにパリティ情報を付加させた記憶データを記憶する複数のメモリセルを有するメモリデバイスと、前記入力データ及び前記記憶データ間の変換を行うメモリコントローラとを備え、前記記憶データに含まれる前記入力データに対応する情報データは、前記入力データに対して非線形の関係にあることを特徴とするメモリシステム。前記情報データは、前記入力データと同じビット数であり、相補関係にある2つの前記入力データそれぞれに対応した2つの前記記憶データの前記情報データ同士の2を法とする加算を行った場合、当該2を法とする加算結果のうち1ビットは‘0’データになることを特徴とする請求項1記載のメモリシステム。相補関係にある2つの前記入力データそれぞれに対応した2つの前記記憶データに対して2を法とする加算を、異なる複数組の前記相補関係にある2つの前記入力データのそれぞれについて取った場合、これら加算結果に共通する前記出力データ長の1/3を超える数の特定のビットに、それぞれ‘0’データ及び‘1’データが共に現れることを特徴とする請求項1記載のメモリシステム。前記メモリコントローラは、バイナリデータ及びp進数データpは、素数間の変換を行うp進数変換部を有し、当該p進数変換部を用いて前記入力データ及び前記記憶データ間の変換を行うことを特徴とする請求項1~3のいずれか1項記載のメモリシステム。前記メモリデバイスは、1つのメモリセル毎にdビットdは、2以上の整数を記憶し、所定数の前記メモリセルの特定のビットからなるページ単位でデータの読み書きをし、前記メモリコントローラは、前記ページのサイズのd倍のサイズを持つバッファレジスタを有し、当該バッファレジスタを介して前記メモリデバイスとの前記記憶データの送受信を行うことを特徴とする請求項1~4のいずれか1項記載のメモリシステム。前記メモリコントローラは、前記バッファレジスタを複数有することを特徴とする請求項5記載のメモリシステム。前記メモリコントローラは、前記入力データ及び前記記憶データの少なくとも一方のデータをスクランブルするスクランブラを有し、当該スクランブラを介して前記入力データ及び前記記憶データ間の変換を行うことを特徴とする請求項1~6のいずれか1項記載のメモリシステム。記憶データを記憶する複数のメモリセルを有するメモリデバイスを制御するメモリコントローラであって、前記メモリデバイスの制御の際、外部からの入力データと当該入力データにパリティ情報を付加させた前記記憶データとの変換を行い、前記記憶データに含まれる前記入力データに対応する情報データが前記入力データに対して非線形の関係にあることを特徴とするメモリコントローラ。処理内容の判別が可能なメモリシステム及びメモリコントローラを提供することを目的とする。実施形態に係るメモリシステムは、外部からの入力データにパリティ情報を付加させた記憶データを記憶する複数のメモリセルを有するメモリデバイスと、前記入力データ及び前記記憶データ間の変換を行うメモリコントローラとを備える。前記記憶データに含まれる前記入力データに対応する情報データは、前記入力データに対して非線形の関係にあることを特徴とする。実施形態に係るメモリコントローラは、記憶データを記憶する複数のメモリセルを有するメモリデバイスを制御するメモリコントローラであって、前記メモリデバイスの制御の際、外部からの入力データと当該入力データにパリティ情報を付加させた前記記憶データとの変換を行い、前記記憶データに含まれる前記入力データに対応する情報データが前記入力データに対して非線形の関係にあることを特徴とする。以下、図面を参照しながら実施形態に係るメモリシステム及びメモリコントローラについて説明する。[メモリシステムの概要]先ず、実施形態に係るメモリシステムの構成について簡単に説明しておく。図1は、実施形態に係るメモリシステムのブロック図である。このメモリシステムは、メモリデバイス100とメモリコントローラ200からなる。メモリデバイス100は、例えば、多ビット記憶可能なメモリセルMulti-LevelCell、以下、MLCと呼ぶを用いたNANDフラッシュメモリ以下、MLCNANDフラッシュメモリと呼ぶが利用できる。なお、以下では、主にメモリデバイス100としてMLCNANDフラッシュメモリを用いた実施形態について説明しているが、メモリデバイス100はこれに限定されるものではない。また、本実施形態に係るメモリコントローラ200も含め、MLCNANDフラッシュメモリを制御するメモリコントローラをMLCNANDコントローラと呼ぶこともある。メモリコントローラ200は、binarytop-adicdecode回路ブロック210、LeemetriccodeECCsystem回路ブロック220、p-adic<>MLCbinarymapping回路ブロック230、2つのページバッファ群240a及び240bバッファレジスタ、control回路ブロック250及びp-adictobinarydecode回路ブロック260からなる。なお、ページバッファ群に関し、特定のページバッファ群を指さない場合、単にページバッファ群240と呼ぶこともある。このメモリシステムにおけるデータ書き込みの流れは次のようになる。始めに、MLCNANDコントローラ200メモリシステムに入力されたバイナリデータは、binarytop-adicdecode回路ブロック210によってp進数化pは、素数され、LeemetriccodeECCsystem回路ブロック220に入力される。続いて、LeemetriccodeECCsystem回路ブロック220に入力されたp進数データが、LeemetriccodeECCsystem回路ブロック220によって、ECC処理のためのリーメトリックコードに変換される。最後に、このリーメトリックコードが、MLCNANDフラッシュメモリ100に保存できるようにp-adic<>MLCbinarymapping回路ブロック230によってマッピングされた後、ページバッファ240を介してMLCNANDフラッシュメモリ100に転送されて記憶される。また、このメモリシステムにおけるデータ読み出しの流れは次のようになる。始めに、MLCNANDフラッシュメモリ100から読み出されたリーメトリックコードが、MLCNANDコントローラ200のページバッファ群240a又は240bに転送される。続いて、ページバッファ群240a又は240bに転送されたリーメトリックコードは、LeemetriccodeECCsystem回路ブロック220で処理できるようp-adic<>MLCbinarymapping回路ブロック230によってマッピングされる。その後、このリーメトリックコードは、LeemetriccodeECCsystem回路ブロック220に入力される。続いて、LeemetriccodeECCsystem回路ブロック220に入力されたリーメトリックコードは、ここでECC処理を受けた上で、p進数データに変換された後、p-adictobinarydecode回路ブロック260に入力される。最後に、p-adictobinarydecode回路ブロック260に入力されたp進数データは、ここでバイナリデータに変換されて、MLCNANDコントローラ200メモリシステムから出力される。以上のデータ書き込み及びデータ読み出しの一連の動作は、外部のCPUからコマンドを受けたcontrol回路ブロック250によって制御される。以上が、本実施形態に係るメモリシステムの簡単な概要となるが、ここからは、本メモリシステムを詳細に説明する。先ず、16値のMLCを用いたMLCNANDフラッシュメモリを例に、MLCのレベルとMLCNANDフラッシュメモリのページとの対応関係について説明した上で、本実施形態に係るMLCNANDコントローラ200のデータ処理の要点であるECCについて説明する。16値のMLCを用いた場合、1セル当たり4ビットのバイナリデータを記憶することができる。4ビットのバイナリデータとMLCのレベルの対応付けについては、様々なパターンが考えられるが、ここでは、グレイコードGraycodeを利用することを考える。このようにグレイコードを利用することで、隣接レベル間の変化が4ビットのうちの1ビットのみの変化になるように、バイナリデータとMLCのレベルとの対応付けることができる。4ビットのバイナリデータは、それぞれ異なるページ<0>~<3>の構成要素となる。例えば、MLCの最も低いレベルから最も高いレベルにかけて、0~15の番号付けをした場合、MLCのレベルに対応するページ<0>~<3>の各ビットは、図2のようになる。この場合、ページ<0>のビットp0、ページ<1>のビットp1、ページ<2>のビットp2、及びページ<3>のビットp3は、数1に示すように、それぞれMLCのレベルの値Lを2進数で表した各桁B0、B1、B2、及びB3のバイナリ関数P0、P1、P2、及びP3で決定される。[数1]LB020B121B222B323p0P0p1P1p2P2p3P3特に、グレイコードを利用した場合、Lの1の変化に対してはp0、p1、p2、及びp3のうちのいずれか1つが変化するようにコード化される。また、一般にLのどの様な変化も各ページのビットp0~p3の変化で表せる。そのため、4つのページ<0>~<3>それぞれで1ビットのエラー検出訂正が可能な場合、1つのMLCで生じるレベル変化に関するあらゆるエラーを処理することができる。更に、MLCのレベル変化が隣接レベル間のみで生じると仮定した場合、いずれか1つのページに対する1ビットの修正によってエラー検出訂正ができる。そのため、ページ毎にそれぞれ独立に1ビットのエラー検出訂正が可能である場合、独立した4つのMLCに対応することができる。以上から、ページ毎に1ビットのエラー検出訂正する方法は、MLCで生じるいかなるエラーも処理できる強力な方法である。しかし、MLCで生じるエラーのほとんどが、隣接レベル間で生じる点を鑑みれば、上記のようなエラー検出訂正の方法は、過剰なエラー対応であって、その分、エラー検出訂正に通常必要としない多くの情報を扱うことになり、非効率である。次に、本実施形態に係るメモリシステムにおけるエラー検出訂正の効率を考えるが、その前提として、バイナリリニアコードを用いたECCについて説明しておく。ここでは、バイナリリニアコードの例として、リードソロモンコードReed-SolomoncodeとBCHコードを取り扱う。なお、リードソロモンコード及びBCHコードは、いずれもガロア体GF2m上のコード体系である。但し、リードソロモンコードは、コードの各成分がmビットで表現されるシンボルとなっており、リードソロモンコードを用いたECCは、このシンボルのエラーを対象としている。一方、BCHコードは、各ビットがコードの成分であり、BCHコードを用いたECCは、ビットエラーを対象としている。以下において、このようなバイナリリニアコードを用いたECCシステムを搭載したメモリコントローラをバイナリリニアコントローラと呼ぶ事もある。これに対し、本実施形態で利用するリーメトリックコードのように、ガロア体GFppは、素数上のコード体系を用いたECCシステムを搭載したメモリコントローラをp-adicコントローラと呼ぶ事もある。始めに、バイナリデータからリードソロモンコードへのエンコード方法について説明する。GF2mの1つの原始根をαとした場合、生成多項式gXは数2に示すように2t個のαm0im0=0又は1、i=0~2t-1を根とする多項式として構成される。[数2]g...g0g1Xg2X2...g2t1X2t1X2tここで、αは、mビットのシンボルでGF2mの原始根であり、m次のGF2上の既約多項式M1Xの根である。gxの係数gは、mビットのシンボルである。また、tはエラーが訂正可能な最大シンボル数である。ゼロ元を除いたGF2mの要素の総数n=2m-1から2tを引いた数kが任意に設定できるデータのシンボルである。このデータのシンボルは、バイナリで考えた場合mkビットの長さとなり、データを表すk-1次の多項式uXは数3の通りである。[数3]uu0u1Xu2X2...uk1Xk1n2m1kn2tこれら多項式gX、uXから2t-1次の剰余多項式vXを数4に示すように求めると、これらの係数シンボルvがコードのパリティのシンボルとなる。[数4]vX2tuv0v1Xv2X2...V2t1X2t1数5に示しように、データを表す多項式uXの係数シンボルuとパリティを表す多項式vXの係数シンボルvの合計n個のシンボルによってリードソロモンコードを表す多項式tXを構成することができる。つまり、リードソロモンコードには、データのシンボルが直接に反映される。[数5]tX2tuv以上の他、データのシンボルからパリティのシンボルを生成し、リードソロモンコードを構成する方法はいくつかのバリエーションはあるが、データのシンボルに対してリードソロモンコードに含まれるデータに対応する部分は、線形関係にある。したがって、データのシンボルをバイナリで表した場合におけるシンボルの和は、リードソロモンコードに含まれるデータに対応する部分の和として表すことができる。続いて、バイナリデータからBCHコードへのエンコード方法について説明する。GF2mの1つの原始根をαとし、α、α3、、α2t-1を根とするm次の既約多項式をそれぞれM1X、M3X、、M2t-1Xとした場合、生成多項式gXは数6に示すようにt個のm次の既約多項式の積の多項式として構成される。[数6]gM1M3...M2t11g1Xg2X2...gmt1Xmt1Xmtここで、gXの係数Mは、0又は1であり、1ビットで表すことができる。また、tはエラーが訂正可能なビット数である。ゼロ元を除いたGF2mの要素の総数n=2m-1からmtを引いた数kが任意に設定できるデータのビットである。このデータのビットは、kビットの長さとなり、データのビットを表すk-1次の多項式uXは数7の通りである。[数7]uu0u1Xu2X2...uk1Xk1knmtこれらの多項式gX、uXからmt-1次の剰余多項式vXを数8に示すように求めると、これらの係数がBCHコードのパリティのビットとなる。[数8]vXmtuv0v1X...vmt1Xmt1数9に示すように、データを表す多項式uxの係数ビットuとパリティを表す多項式vXの係数ビットvの合計n個のビットによってBCHコードを表す多項式tXを構成することができる。つまり、BCHコードには、データのビットが直接に反映される。[数9]tXmtuvBCHコードの場合も、リードソロモンコードと同様、データのビットの和は、BCHコードに含まれるデータに対応する部分の和として表すことができる。次に、BCHコードを用いたECCによってビット修正する方法について説明する。ここでは、NANDフラッシュメモリが有するページバッファを利用する方法について説明する。図3は、ページデータを構成するMLCの一部とこれに対応するページバッファの部分を示す図である。1つのMLCのレベルとページのビットとの対応付けについては図2に示したが、図3中にも拡大して示している。図3に示すページバッファの部分は、いわゆるセクタに対応していてデータ処理の1つのまとまりとなる部分である。図3の場合、1ページは、512バイトのMLCで構成されている。この例のMLCNANDフラッシュメモリは、16値のMLCに対応するため、512バイトのMLCに対して4系列のページバッファが設けられている。これら4系列のページバッファは合計512バイト個のメモリセルに対応している。ここで、このような構成のMLCNANDフラッシュメモリを対象として、比較例に係るバイナリリニアコントローラの特徴を生かしたメモリシステムについて検討する。512バイトは212ビットなので、バイナリリニアコントローラにおけるECCの処理は、GF213を利用する。GF212を利用する場合、付加されるパリティビットを構成できないからである。GF213を利用する場合、1ビットのエラー訂正に必要なチェックビットは13ビットとなる。tビットtは1以上の整数のエラー訂正に必要なページバッファ当たりのビット数は、データの512バイトとチェックビットの13tバイトの和となる。したがって、512バイトのデータを扱えるものとして容易に拡張できる訂正ビット数tは、不等式21213t≦213を満たす必要がある。このように構成すると、グレイコードを用いた場合、MLCに隣接レベル間のエラーのみが発生すると仮定した場合、512バイト13t個のうち4t個のMLCを修正することができる。この様に構成された図3に示す例では、さらに加えてt個のMLCで発生した如何なるエラーをも修正できるようになっている。しかし、前述のように、MLCに生じるエラーの多くが隣接レベル間で生じる点に着目すると、図3に示すような構成は、エラーに対する過剰な保証と考えることができる。すなわち、ページバッファのデータに対するECCは、NANDフラッシュメモリのMLCの不良の生じ方に対して過剰であり、その分だけ余分にパリティ部分が大きくなっている。そこで、本実施形態では、以上の過剰な保証を削るためにリーメトリックコードを用いたECCを利用する。この場合、MLCの隣接レベル程度のエラーのみ対応させることでパリティ部分を削減することができる。また、同じサイズのパリティ部分を用いる場合には、訂正可能なセル数を増やすことができる。本実施形態に係るメモリコントローラ200は、リーメトリックコードを用いてECCの処理を行う。その一方、このメモリコントローラ200では、従来のMLCNANDフラッシュメモリに対応するため、リーメトリックコードの各シンボルをMLCのレベルに対応した数値に変換している。この変換を行うのが、図1に示したp-adic<>MLCbinarymapping回路ブロック230である。そこで、次に、このp-adic<>MLCbinarymapping回路ブロック230の機能について説明する。ここでは、16値のMLCを用いた例について説明する。p-adic<>MLCbinarymapping回路ブロック230では、具体的には、MLCNANDフラッシュメモリ100のページバッファと、p-adicコントローラ200のページバッファ群240とのアドレスのマッピングが行われる。マッピングは、MLCの16個のレベルとp=13とする有限体Zpとの対応を決定することから始める。ここでは、MLCのレベルと有限体Zpとの対応関係に関する2つケースを説明しておく。図4は、MLCのレベルとZpとの対応関係を説明する図である。ケース1は、Zpの各要素をMLCの下のレベルから順に対応させる割り付け方法である。この場合、Zpの要素0~12をMLCの下のレベルから順に割り付け、余ったMLCの上の3レベルについてZpの要素12を割り付けている。ケース1は、NANDフラッシュメモリに対するプログラムにおいてワード線に印加する電圧パルスの振幅を抑えることができる。これによって、ワード線とワード線に隣接するメモリセルとの容量カップリングを小さくすることができ、ディスターブを抑制することができる。つまり、ケース1は、メモリセルのエラーの発生を低減させることが期待できる割り付け方法と言える。ケース2は、MLCのレベルのうち高いレベルについてレベル間隔を大きくした割り付け方法である。この場合、Zpの要素0~12をMLCの下のレベルから順に割り付けているが、このうちZpの要素10~12については、2レベル間隔で割り付けている。ケース2は、消去レベルからの閾値変化が大きくなる高いレベルのプログラムをラフに行うことが可能であり、プログラムの負担の軽減が期待できる割り付け方法と言える。このように、16値のMLCNANDフラッシュメモリの特性を踏まえた上で、エラー発生の抑制や、プログラム時間の短縮など、目的を絞って前述のケース1やケース2の割り付け方法を決定すれば良い。なお、割り付け方法について、メモリデバイス200の状況に応じてメモリコントローラ100で随時設定できるようにすれば良い。また、ケース1及びケース2では、MLCの下のレベルからZpの各要素を順番に割り付けているが、MLCの上のレベルからZpの各要素を割り付けることもできる。続いて、MLCのレベルとページのビットとの対応について図4を用いて説明する。図4は、グレイコードを使用して、各ページのビットとMLCのレベルとの対応付けを行った例である。なお、ページのビットは、製品毎に異なる場合があるが、この場合、使用するメモリデバイス100に合わせればよい。そのため、ページバッファ240とMLCのレベルの対応は、データをMLCのレベルに順序良く並べるために重要な情報であり、この情報をもとにメモリコントローラ200におけるマッピングを柔軟に設定できるようにしておけば、様々なメモリデバイスに対応できるメモリコントローラ200を実現することができる。例えば、メモリコントローラ200に複数種類のp-adic<>MLCbinarymapping回路ブロック230を設けるか、種類変更可能なp-adic<>MLCbinarymapping回路ブロック230を設けておいてメモリデバイス100の仕様をもとに切り替えられるようにすれば良い。このように、Zpの要素とMLCのレベルとの対応が決定したら、続いて、Zpの各要素を、MLCのレベルに対応するページ<0>~<3>の4ビットに基づいてデコードした後、ページバッファ群240に保持する。そのため、ページバッファ群240は、4系列のページバッファが並列に配置された構成となっており、前述のマッピングによってデコードされた4ビットのデータは、それぞれページバッファ群240の各系列に順に保持される。メモリコントローラ200のページバッファ群240のうちの1系列は、メモリデバイス100が有するページバッファに対応する。メモリコントローラ200のページバッファ群240がデータで満杯になった時点で、データは、1系列分ずつメモリデバイス100のページバッファに順次転送される。そして、ページバッファ群240のデータは、メモリデバイス100において、連続して同じMLCにプログラムされる。このようなデータ書き込み手順によって、メモリコントローラ200で得られたZpの要素は、MLCのレベルとしてメモリデバイス100に記憶される。メモリデバイス100からのデータの読み出しは、前述のデータ書き込み手順とは逆の手順となる。つまり、同一のMLCの4つのページのデータが順次読み出された後、これらデータがメモリコントローラ200のページバッファ群240に転送される。そして、ページバッファ群240に転送されたデータからMLCのレベルを示すZpの数がデコードされる。次に、本実施形態に係るメモリシステムの一般的な電子機器への適用について言及しておく。一般的な電子機器は、CPUと、このCPUを中心とする周辺機器及びメモリシステムとを備え、これらがコマンドデータバスで結ばれて構成されている。特に、最近の電子機器の場合、大容量のメモリデバイスとして、ハードディスクよりも高速アクセスが可能な半導体を用いたメモリデバイスを利用する例もあるが、これらの多くには、NANDフラッシュメモリが利用されている。図5は、このような電子機器を想定した本実施形態に係るメモリシステムの適用例である。図5におけるメモリシステムは、図5中Bに示すように、MLCNANDフラッシュメモリメモリデバイスとMLCNANDコントローラメモリコントローラとを備えている。このメモリシステムを、図4では、MLCSMMSemiconductorMemoryModuleと表記している。このMLCSMM等のメモリシステムは、電子機器にとっては差し替え可能なモジュールである。つまり、MLCSMMの性能を十分に引き出すためには、MLCSMMに応じてコマンドバスやデータバス等を適切に設定する必要がある。そのため、MLCSMM内の処理内容を知っておくことが望ましい。例えば、コマンドデータバスからMLCSMMの種類を判別することができれば、このMLCSMMに最適なデータ転送サイクルによってデータ送受信を行うことができる。しかし、MLCSMMのMLCNANDコントローラが、本実施形態のようにp-adicコントローラであるか、比較例のようにバイナリリニアコントローラであるかを判別できない場合、p-adicコントローラの性能を十分に引き出せないことになる。このような点から、MLCSMMがどのようなMLCNANDコントローラを搭載しているかを判別することが重要となる。また、電子機器は、図5に示すような、CPUを中心に周辺機器及びメモリシステムMLCSMMから構成される他、図6に示すような、メモリシステムの一部であるMLCNANDコントローラメモリコントローラのみが電子機器に組み込まれており、MLCNANDフラッシュメモリメモリデバイスを自由に増設できる構成となっているものもある。この場合、電子機器内のMLCNANDコントローラに、MLCNANDフラッシュメモリの信頼性を向上させるようなECCシステムが搭載されておれば、MLCNANDフラッシュメモリ自身を高品質のものにしなくても、信頼性の高い電子機器を構築することができる。図5及び図6に示す電子機器のように、電子機器のメモリコントローラがどのような種類のメモリコントローラを使用しているかを、電子機器自体の動作から判断できれば、メモリデバイスの増設時など、信頼性を確保するための適切なコストのメモリデバイスを選択することができる。そこで、以下では、本実施形態に係るメモリコントローラ200p-adicコントローラにおける処理の概要について説明し、比較例に係るバイナリリニアシステムとの違いについて説明する。先ず、図1を用いて、本実施形態に係るメモリシステムの機能ブロックについて詳細に説明する。本実施形態に係るメモリシステムは、前述のようにメモリデバイス100と、このメモリデバイス100を制御するメモリコントローラ200からなる。このメモリデバイス100には、例えば、図1に示したMLCNANDフラッシュメモリなど既存のメモリデバイスを用いることができる。この場合であっても、メモリコントローラ200を用いることで、リーメトリックコードを用いたECCによって高効率なエラー検出訂正が可能である。メモリコントローラ200に入力されたバイナリデータは、メモリコントローラ200におけるデータ処理システムである素数pの有限体Zpの量に変換される。このバイナリデータは、所定のMビット毎にメモリコントローラ200で処理される。メモリコントローラ200に入力されたバイナリデータは、始めに、binarytop-adicdecode回路ブロック210に入力される。binarytop-adicdecode回路ブロック210では、バイナリデータをp進数データに変換する。このp進数データは、LeemetriccodeECCsystem回路ブロック220に入力される。LeemetriccodeECCsystem回路ブロック220では、p進数データの各桁が表わすZpの数に基づいてリーメトリックコードが生成される。このリーメトリックコードは、p-adic<>MLCbinarymapping回路ブロック230に入力される。p-adic<>MLCbinarymapping回路ブロック230は、リーメトリックコードの各シンボルが表わすZpの数をMLCのレベルに対応付けして、ZpのリーメトリックとMLCのレベル間の距離との対応が成立するように変換する。このp-adic<>MLCbinarymapping回路ブロック230によって、Zpの数は、MLCのレベルへと変換されてページバッファ群240a或いは240bに保持される。16値のMLCを用いる場合、1つのページバッファ群240には、4系列のページバッファが必要となる。ここで、ページバッファ群240は、メモリデバイス100のMLCのレベルとページの関係を反映している必要がある。これらのページバッファ群240がデータで満たされると、これらのデータはコントローラ200からメモリデバイス100に転送される。このデータ転送によって、Zpの数は、メモリデバイス100のMLCのレベルとして記憶されることになる。図1に示す場合、メモリコントローラ200には、2組のページバッファ群240A、204Bが設けられているが、ページバッファ群240は、1組以上あれば良い。但し、図1に示すようにページバッファ群240を2組設けた場合、例えば、ページバッファ群240A及びp-adic<>MLCbinarymapping回路ブロック230間のデータ転送を行っていると同時に、ページバッファ群240b及びMLCNANDフラッシュメモリ間のデータ転送を行うことができるため、データ転送時間を稼ぐことができる。メモリデバイス100は、コントローラ200から転送されたデータをページ毎にプログラムして行く。このようなメモリデバイス100の動作は、メモリコントローラ200内のcontrol回路ブロック250から受け取るコマンド<2>に基づいて実行される。このコマンド<2>は、コントローラ200に入力されたコマンド<1>に応じてcontrol回路ブロック250によって生成される。メモリシステムからデータを読み出す場合、始めに、control回路ブロックからのコマンド<2>によって、メモリデバイス100から1つのMLCのレベルを表すことができる一連のデータが読み出される。このデータは、メモリデバイス100から順次メモリコントローラ200のページバッファ群240に転送されて保持される。続いて、ページバッファ群240に保持されたデータは、p-adic<>MLCbinarymapping回路ブロック230で処理される。p-adic<>MLCbinarymapping回路ブロック230は、このページバッファ群240が保持するデータをZpの数、即ちMLCのレベルを表す量に変換する。続いて、Zpの数で表されたデータは、LeemetriccodeECCsystem回路ブロック220に入力される。LeemetriccodeECCsystem回路ブロック220は、このデータに対しエラー訂正を施し、正しいリーメトリックコードを復元し、更に、このリーメトリックコードをp進数データに変換する。最後に、p進数データは、p-adictobinarydecode回路ブロック260に入力される。p-adictobinarydecode回路ブロック260は、このp進数データをMビットのバイナリデータに戻した上で、メモリコントローラ200の外部に出力する。次に、メモリコントローラ200のデータ転送システムのデータの処理フローからみたブロック構成について説明する。以下において、メモリデバイス100などバイナリでデータを取り扱う環境をbinaryworldと呼ぶことにする。これに対し、データをZpの数で取り扱うメモリコントローラ200などの環境をp-adicZpworldと呼ぶことにする。この場合、binaryworldは、p-adicZ2worldと呼ぶこともできる。図7は、ε=2、p=13の場合であって、ECC処理にユークリッド反復法を用いた場合のメモリコントローラ200のブロック図である。メモリコントローラ200は、13進数変換部210 ́、エンコード部221、p-adic<>MLCbinarymapping回路ブロック230、ページバッファ群240、シンドローム生成部222、解探索多項式生成部223、ユークリッド反復法処理部224、第1のハッセ微分多項式生成部225、第2のハッセ微分多項式生成部226、コード復元部227、デコード部228、及び24進数変換部260 ́を備える。このうち13進数変換部210 ́は、binarytop-adicdecode回路ブロック210に含まれる。エンコード部221、シンドローム生成部222、解探索多項式生成部223、ユークリッド反復法処理部224、第1のハッセ微分多項式生成部225、第2のハッセ微分多項式生成部226、コード復元部227及びデコード部228は、LeemetriccodeECCsystem回路ブロック220に含まれる。また、24進数変換部260 ́は、p-adictobinarydecode回路ブロック260に含まれる。メモリコントローラ200に入力される32ビットずつのまとまりM=32としてのバイナリデータDは、始めに、13進数変換部210 ́に入力される。13進数変換部210 ́では、入力されたバイナリデータDが13進数に変換される。これによって、各桁がZpの要素で表現されたデータAが生成される。このデータAは、エンコード部221に入力される。エンコード部221では、入力されたデータAに生成行列Gを作用させる。これによって、データAからリーメトリックコードCが生成される。このコードCは、p-adic<>MLCbinarymapping回路ブロック230に入力される。p-adic<>MLCbinarymapping回路ブロック230では、入力されたリーメトリックコードCからメモリデバイス100に転送されるデータが生成され、ページバッファ群240に入力される。その後、ページバッファ240に保持されたデータが、メモリデバイス100に転送され、MLCにプログラムされる。続いて、メモリデバイス100にプログラムされたデータは、一連のページデータとしてページバッファ群240に読み出される。ここで、このデータは、p-adic<>MLCbinarymapping回路ブロック230においてMLCのレベルの誤認識のエラーを含むコードYになる。以降の処理では、コードYからエラーのないリーメトリックコードCの復元を行う。NAND<>MLCbinarymapping回路ブロック230から出力されたコードYは、シンドローム生成部222に入力される。シンドローム生成部222では、入力されたコードYに対するS=YHtの演算処理が行われ、シンドロームSが生成される。この演算で得られたS0のリーメトリックが3以上|S0|≧3の場合、個々のエラーコード成分の和は必ず3以上になる。つまり、ε=2とする解法ではコードYのエラーを訂正できない場合である。そのため、メモリコントローラ200の外部にNG信号が出力されると共に、エラー訂正前のコードYがそのままデコード部228に出力される。また、S=0の場合、コードYにはエラーが生じていないため、コードYはエラー訂正されることなくデコード部228に出力される。その他のシンドロームの場合、生成されたシンドロームSは、解探索多項式生成部223に出力される。解探索多項式生成部223では、入力されたシンドロームS=S0,S1,S2から多項式Ψxが生成される。多項式Ψxの係数ψ0、ψ1及びψ2は、数2のようになる。この多項式Ψxは、ユークリッド反復法処理部224に出力される。[数10]Ψ01Ψ1S1Ψ22ユークリッド反復法処理部224では、入力された多項式Ψxとx3からユークリッド反復法によって多項式λx及びvxの生成が試みられる。多項式λx及びvxが生成できない場合、メモリコントローラ200の外部にNG信号が出力される共に、エラー訂正前のコードYがそのままデコード部228に出力される。一方、多項式λx及びvxが生成できた場合、処理は、第1のハッセ微分多項式生成部225及び第2のハッセ微分多項式生成部226に移される。第1のハッセ微分多項式生成部225では、多項式λxからハッセ微分多項式が生成され、更に、このハッセ微分多項式に対してr=1~12が代入され[λr][0]=0となる根rが抽出される。続いて、これら抽出された根rから[λr][n-1]=0且つ[λr][n]≠0となる多重度nが求められる。そして、これら根r、多重度nに基づいた位置t=r-1及びエラーet=nがデコード部227に出力される。同様に、第2のハッセ微分多項式生成部226では、多項式vxからハッセ微分多項式が生成され、更に、このハッセ微分多項式に対してr=1~12が代入され[vr][0]=0となる根rが抽出される。続いて、これら抽出された根rから[vr][n-1]=0且つ[vr][n]≠0となる多重度nが求められる。そして、これら根r、多重度nに基づいた位置t=r-1及びエラーet=13-nがコード復元部227に出力される。コード復元部227では、入力された位置t及びエラーetを用いてct=yt-etからエラー訂正されたリーメトリックコードC=c1,c2,,c3が復元される。このリーメトリックコードCは、デコード部228に入力される。デコード部228では、入力されたリーメトリックコードCに生成行列Gの逆変換が施される。これによって、各桁がZpの要素で表されるp進数データAが生成される。このp進数データAは、24進数変換部260 ́に入力される。24進数変換部260 ́では、入力されたp進数データAが、バイナリデータである24進数のバイナリデータDに変換される。そして、このバイナリデータDが、メモリコントローラ200の外部に出力される。なお、図1では、ページバッファ群240を、メモリデバイス100とのデータ授受にのみに使用しているが、このページバッファ群240は、図7に示された点線矢印aにあるように、データ処理の過程で多重に利用することもできる。この場合、メモリコントローラ200の回路規模を小さくすることができる。ページバッファ群240の多重使用方法については後述する。次に、データ処理過程におけるページバッファ群240の多重使用について説明する。なお、本実施形態の場合、メモリコントローラ200に設けられた2組のページバッファ群240a、240bは、それぞれデータ転送及びデータ処理で交互に利用されるが、ここでは、データ処理における利用について説明する。具体例として、16値のMLCを用いたもので、12セルあたり最高2セルのエラー訂正が可能ε=2なメモリシステムを想定して説明する。また、メモリコントローラ200のI/Oのデータ転送速度は、1バイト8ビット/サイクルとし、1セクタを512バイトとする。したがって、1セクタ分のデータを転送する場合、図8に示すように、512サイクル要する。p=13の場合、コードの成分数はn=p-1=12となる。このうち2つの成分の訂正を可能ε=2としているため、コード中のデータ成分はk=n-ε1=12-3=9となる。入力されたバイナリ表示のデータの桁数をδとし、各桁をバイナリ表現した場合のビット数をh=4とすると、p進数変換によってδ桁のバイトデータは、δ1桁となる。したがって、コード中のデータ成分k=δ1=9からδ=8となる。結果として、ECCのための一括処理するバイナリデータのビット数はδh=8×4=32となる。以下において、この処理単位である32ビットのデータに要する処理過程をプロセスと呼ぶが、一般的なプロセスと区別するためPROCESSと表記する。この場合、1PROCESS分の32ビットのデータは、4=32/8サイクル毎に蓄積することができる。つまり、4サイクル毎に1PROCESSの処理が可能となる。また、1セクタ分のデータは、丁度128PROCESSで過不足なく処理することができる。ページバッファ群240は概念的に、1サイクルで1バイトが記憶できるバイトレジスタを6列並べたものが基本構成とする。以下では、この6個のバイトレジスタからなる基本構成を、図8にも示すように、REGISTER6と呼ぶこともある。以下において1列目からn列目までのバイトレジスタをレジスタ<1:n>と表現する。例えば1列目から6列目までのバイトレジスタの場合レジスタ<1:6>となる。外部から入力されたバイナリデータDは、ε=2の場合、REGISTER6のうちレジスタ<1:4>に保持される。このレジスタ<1:4>に保持されるバイナリデータDは、以下のステップS1~S4によって処理される。始めに、ステップS1において、バイナリデータDは、128PROCESSで処理されて13進数のデータAに変換される。この変換によって、binarydataでは、32ビットであった1PROCESS分のデータδ=6が、p-adicZpworldでは1桁分4ビット多い36ビットのデータδ=7に変換される。したがって、128PROCESSで生成される13進数データAは、128PROCESS×36ビット=4608ビットになる。この4608ビットのデータは、バイトレジスタ4.5列分の容量に相当する。続いて、ステップS2において、13進数データAのデータ量はバイトレジスタ4.5列分にあたるため、REGISTER6のうちレジスタ<1:5>に保持されることになる。したがって、REGISTER6のうち外部から入力されたバイナリデータDを保持していた領域については、13進数データAで上書きされることになる。続いて、ステップS3において、13進数データAは、128PROCESSで処理されてリーメトリックコードCに変換される。この変換によって、1PROCESS分の36ビットの13進数データAから、p-1=12個の成分からなる48ビットのZpのコードが生成される。したがって、128PROCESSで生成されるリーメトリックコードCは、128PROCESS×48ビット=6144ビット768バイトとなる。この768バイトのデータは、バイトレジスタ6列分の容量に相当する。続いて、ステップS4において、リーメトリックコードCがレジスタ<1:6>に保持される。したがって、REGISTER6のうち13進数データAを保持していた領域については上書きされることになる。また、このステップS4において全てのレジスタ<1:6>が使用されることになる。以上のように、ε=2の場合、binaryworldから入力されたバイナリデータDは、REGISTER6のうちレジスタ<1:4>で保持され、残りのレジスタ<5:6>については、レジスタ<1:4>と併せて最終的なデータ処理結果であるリーメトリックコードCを保持するまでの段階で上書きされて使用されることになる。ステップS1~S4からなるデータ処理は、図8に示すように、バイナリデータDを13進数変換データAに変換した後ステップS1及びS2、更に、13進数データAをリーメトリックコードCに変換してステップS3及びS4、これをスキャンする仮想的なデータレジスタD-rとしてイメージすることができる。図8で示すデータ処理の場合、1セクタ分4096ビットのデータに対して、1PROCESS毎に12セル分のデータを生成する過程を128PROCESS繰り返すことになる。そのため、1セルの実質ビット数は、4096/128×12=2.667となる。以上のように、本実施形態に係るリーメトリックコードを用いたECCは、32ビットのデータを12セルで記憶し、そのうち2セルのエラーを訂正可能な効率の高いECCと言える。次に、ε=2の場合について、データ書き込み時におけるREGISTER6でのセクタデータの処理過程について図9を参照しながら説明する。図9は、左から順に、バイナリデータのバースト転送時のREGISTER6の様子図9中のステップS1、p進数変換後のREGISTER6の様子図9中のステップS2、リーメトリックコード変換後のREGISTER6の様子図9中のステップS3を示している。なお、図9中のレジスタを貫く実線は、8ビット毎のバイトレジスタの境界を示している。セクタレジスタとなるREGISTER6は、1024個のレジスタを6列並べた構成となっており、1024行で768バイトのデータ転送の受け口を持つ。6列のうち、1~4列目をデータ転送で利用し、残りの5~6列目をデータ転送後の処理データの保持に利用する。始めに、ステップS1で、転送されたバイナリデータが、4サイクル毎に1~4列目のレジスタに1バイトずつ行方向に順次格納されていく。この動作は128回繰り返される。その結果、レジスタには1列毎に128バイトのバイナリデータが格納されることになる。一連の動作の総サイクル数は512サイクルとなる。以上によって、セクタレジスタには、10桁の24進数のh=4、δ=8に相当する32ビットのバイナリデータが128PROCESS分格納されることになる。続いて、ステップS2で、32ビットのバイナリデータが9桁のp=13進数である36ビットのデータに変換されセクタレジスタに上書きされる。このPROCESSはレジスタ8行毎に行われる。元々のレジスタブロックは1024行6列であるため、1PROCESS毎に8行ずつ、合計128PROCESSで埋められることになる。ここまでで、1セクタにおけるbinaryworldからp-adicZpworldへの移行が完了したことになる。最後に、ステップS3で、p進数データをリーメトリックコードに変換する。リーメトリックコードは、p-1=12個のZpの要素を成分とするデータとなる。1PROCESS分のリーメトリックコードは、36ビットのp進数データに対してG行列を掛けて得られる48ビットのデータであり、この1PROCESS分のリーメトリックコードは、8行6列のレジスタブロック1つに上書き格納される。この場合、128PROCESSで1セクタレジスタ全体がリーメトリックコードで満たされることになる。これによって、セクタレジスタには、MLC192バイト個に書き込むためのデータが保持される。以上、ステップS1~S3に示す3段階の処理は、8行6列のレジスタ群毎に順時進行して行く。なお、メモリコントローラ200では、512バイトのバイナリデータからp進数データへの変換の際とp進数データから192バイト個のMLCに書き込むリーメトリックコードへの変換の際の2回、セクタレジスタに対するデータの上書きが実行される。例えば、メモリデバイス100であるMLCNANDフラッシュメモリのページ構成が51216バイトのセクタ8個で構成されている場合、4ページで51216バイト×8個のMLCのデータとなるので、192バイト個のMLCのレベルは、ここで述べた22個分のセクタレジスタに対応する。そのためメモリコントローラ200のページバッファ240は、22個分のセクタレジスタで構成され、このページバッファ240のデータは、MLCNANDフラッシュメモリに対して、4ページ分のデータとして転送される。メモリデバイス100であるMLCNANDフラッシュメモリのページ構成が51216バイトのセクタ4個で構成されている場合、4ページで51216バイト×4個のMLCのデータとなるので、192バイト個のMLCのレベルは、ここで述べた11個分のセクタレジスタに対応する。そのためメモリコントローラ200のページバッファ240は、11個分のセクタレジスタで構成され、MLCNANDフラッシュメモリに対して、4ページ分のデータとして転送される。次に、データ読み出し時のセクタレジスタにおけるデータ処理の過程について、図10を参照しながら説明する。始めに、ステップS1で、MLCNANDフラッシュメモリの4ページ分のデータが、192バイト個のMLCに記憶されたデータ毎に、メモリコントローラ200のページバッファ240にまとめて転送される。セクタレジスタに格納された128PROCESS分の768バイトのデータは、8行6列のレジスタブロックに格納された1PROCESS分のデータ毎に、セクタレジスタの端からECCによる計算処理を受け、エラーが訂正できるものは訂正され、できないものはそのままにされる。そして128PROCESSによって1セクタ全てのデータに対するECC処理が完了し、リーメトリックコードが復元される。続いて、ステップS2で、ステップS1において復元されたリーメトリックコードが順次13進数データに変換される。ここでは、1セクタ分のリーメトリックコードは、1PROCESS分の48ビット毎に生成行列Gの逆変換が行われ、4ビットの9桁で表される13進数データに変換された上で、各レジスタブロックに上書きされる。最後に、ステップS3で、ステップS2において生成された13進数データが24進数のバイナリデータに変換される。p-adictobinarydecode回路ブロック260では、1PROCESS分の13進数データを4ビット8桁の32ビットのバイナリデータへと変換した上で、このバイナリデータを8行6列のレジスタブロックの単位で上書きしていく。その後、バイナリデータは8行5列のレジスタ群毎に、1バイト/サイクルの速度で列順に読み出され、1セクタ分のデータとして出力される。このように、メモリコントローラ200では、ECC処理後に実行されるリーメトリックコードからp進数データへの変換の際とp進数データからバイナリデータへの変換の際の2回、セクタレジスタに対するデータの上書きが実行される。次に、ε=2の場合について、REGISTER6とページバッファの関係の一例について図11を参照しながら説明する。図11中に施されたハッチングは、binaryworldから4サイクルで入力される32ビットのバイナリデータDで満たされている領域を示す。REGISTER6は、8行6列のレジスタ群である。これをメモリコントローラ200のページバッファ群240として見た場合、図11に示すように、12行4列のレジスタ群となる。この12行4列のレジスタ群の各列がそれぞれページ<0>~<4>に対応している。ある第i番目のPROCESSについてみた場合、イメージ的には、図11に示すように、始めに、入力されたバイナリデータDは、12個のMLC<i0>~<i11>のうち8個のMLC<i0>~<i7>に保持され、その後、データ処理の過程で残りのMLC<i8>~<i11>も含めて次々にMLCにデータが上書きされると考えることができる。以上説明したように、本実施形態に係るメモリコントローラ200では、データ処理の過程でページバッファ群240が多重に使用される。次に、メモリデバイス100であるMLCNANDフラッシュメモリのページバッファとメモリコントローラ200のページバッフ群240との関係を説明するが、その前提として、MLCNANDフラッシュメモリのページバッファの動作例を説明しておく。図12は、データ書き込み時における8値3ビットのMLCからなるMLCNANDフラッシュメモリのページバッファの動作例を示す図である。なお、以下において、MLCの3ビットのうち、最も重みの小さいビットをLビット、中程度の重みのビットをMビット、最も重みの大きいビットをUビットと呼ぶ事にする。また、所定数のMLCのLビット、Mビット、Uビットからなるページを、それぞれLページ、Mページ、Uページと呼ぶ事にする。さらに、MLCを共通にするLページ、Mページ及びUページをまとめてページ群と呼ぶ事にする。図12に示すMLCNANDフラッシュメモリは、3系統のページバッファpage<0>~<2>を備えており、これらページバッファpage<0>、<1>、<2>は、それぞれLページ、Mページ、Uページのデータ書き込み或いはデータ読み出しの際に用いられる。なお、MLCへのデータ書き込みは、MLCの閾値レベルを、最初は粗くシフトさせ、徐々に細かいシフトをさせながら確定させていくことで実現される。このため、例えば、LページのデータをMLCの閾値レベルの最も粗い区分、MページのデータをMLCの閾値レベルの中程度の区分、UページのデータをMLCの閾値レベルの最も細かい区分に対応させておき、Lページのデータ書き込み、Mページのデータ書き込み、Uページのデータ書き込みを順次行い、MLCの閾値レベルを確定させれば良い。i番目のページ群のデータ書き込みは、以下のステップによって実行される。始めに、ステップS1において、メモリコントローラ200から転送されたi番目のページ群のLページのデータが、ページバッファpage<0>に格納されていく図12中のS1a。これと同時に、既にページバッファpage<2>に格納されていたi-1番目のページ群のUページのデータが、MLCアレイに書き込まれる図12中のS1b。続いて、ステップS2において、メモリコントローラ200から転送されたi番目のページ群のMページのデータが、ページバッファpage<1>に格納されていく図12中のS2a。これと同時に、先のステップS1でページバッファpage<0>に格納されたi番目のページ群のLページのデータが、MLCアレイに書き込まれる図12中のS2b。続いて、ステップS3において、メモリコントローラ200から転送されたi番目のページ群のUページのデータが、ページバッファpage<2>に格納されていく図12中のS3a。これと同時に、先のステップS2でページバッファpage<1>に格納されたi番目のページ群のMページのデータが、MLCアレイに書き込まれる図12中のS3b。続いて、ステップS1 ́において、先のステップS3においてページバッファpage<2>に格納されたi番目のページ群のUページのデータが、MLCアレイに書き込まれる図12中のS1b ́。これと同時に、メモリコントローラ200から転送されたi1番目のページ群のLページのデータが、ページバッファpage<0>に格納されていく図12中のS1a ́。以降、ステップS1~S3を繰り返すことで複数ページ群へのデータ書き込みを完了することができる。図13は、データ読み出し時における8値3ビットのMLCからなるMLCNANDフラッシュメモリのページバッファの動作例を示す図である。i番目のページ群のデータ読み出しは、以下のステップによって実行される。始めに、ステップS1において、MLCアレイから読み出されたi番目のページ群のLページのデータが、ページバッファ<0>に格納されていく図13中のS1b。これと同時に、既にページバッファpage<2>に格納されていたi-1番目のページ群のUページのデータが、メモリコントローラ200に転送される図13中のS1a。続いて、ステップS2において、MLCアレイから読み出されたi番目のページ群のMページのデータが、ページバッファpage<1>に格納されていく図13中のS2b。これと同時に、先のステップS1でページバッファpage<0>に格納されたi番目のページ群のLページのデータが、メモリコントローラ200に転送される図13中のS2a。続いて、ステップS3において、MLCアレイから読み出されたi番目のページ群のUページのデータが、ページバッファpage<2>に格納されていく。これと同時に、先のステップS3でページバッファpage<2>に格納されたi番目のページ群のMページのデータが、メモリコントローラ200に転送される図13中のS3a。続いて、ステップS1 ́において、先のステップS3においてページバッファpage<2>に格納されたi番目のページ群のUページのデータが、メモリコントローラ200に転送される図13中のS1a ́。これと同時に、MLCアレイから読み出されたi1番目のページ群のLページのデータが、ページバッファpage<0>に格納されていく図13中のS1b ́。以降、ステップS1~S3を繰り返すことで複数ページ群へのデータ読み出しを完了することができる。以上説明したように、MLCNANDフラッシュメモリでは、ページバッファpage<0>~<3>へのデータの格納と、MLCアレイへのデータ書き込み或いはメモリコントローラ200へのデータ読み出しが、異なるページにおいて同時に進行する。次に、図12、図13に示す場合における、メモリコントローラ200のページバッファ群240とMLCNANDフラッシュメモリのページバッファとのデータ転送について説明する。図14は、図12に示すデータ書き込み時における、メモリコントローラ200のページバッファ群240aとMLCNANDフラッシュメモリのページバッファとのデータ転送を説明する図である。図14は、i番目のページ群に対するデータ書き込み時の様子であり、メモリコントローラ200のページバッファ群240aには、既にi番目のページ群に書き込むデータが格納されている。また、ページバッファ群240bには、i-1番目のページ群に書き込まれたデータが残っている。一方、MLCNANDフラッシュメモリのページバッファpage<2>には、既にi-1番目のページ群のUページのデータが格納されている。なお、メモリコントローラ200は、p-adic<>MLCbinarymapping回路ブロック230とページバッファ群240a及び240bとを選択的に接続するデータパスを有しており、図14の場合、このデータパスは、ページバッファ群240bに接続されている図14中のA1。この状態において、i番目のページ群のデータ書き込み時のデータ転送は以下のように実行される。始めに、ステップS1において、ページバッファ群240aのページバッファpage<0>から転送されたi番目のページ群のLページのデータが、MLCNANDフラッシュメモリのページバッファpage<0>に格納されていく図14中のS1a。これと同時に、既にMLCNANDフラッシュメモリのページバッファpage<2>に格納されていたi-1番目のページ群のUページのデータが、MLCアレイに書き込まれる図14中のS1b。また、メモリコントローラ200では、p-adic<>MLCbinarymapping回路ブロック230を介して、LeemetriccodeECCsystem回路ブロック220からページバッファ群240bに対してi1番目のページ群に書き込まれるデータが転送される。これによって、図8に示したように、ページバッファ群240bに残っていたi-1番目のデータがi1番目のデータによって上書きされる。このページバッファ群240bに対するデータ転送は、後述のステップS2以降でも並行して実行される。続いて、ステップS2において、ページバッファ群240aのページバッファpage<0>からMLCNANDフラッシュメモリのページバッファpage<0>へのi番目のページ群のLページのデータが全て転送された後、このi番目のページ群のLページのデータがMLCアレイに書き込まれる図14中のS2b。これと同時に、ページバッファ群240aのページバッファpage<1>から転送されたi番目のページ群のMページのデータが、MLCNANDフラッシュメモリのページバッファpage<1>に格納されていく図14中のS2a。続いて、ステップS3において、ページバッファ群240aのページバッファpage<1>からMLCNANDフラッシュメモリのページバッファpage<1>へのi番目のページ群のMページのデータが全て転送された後、このi番目のページ群のMページのデータがMLCアレイに書き込まれる図14中のS3b。これと同時に、ページバッファ群240aのページバッファpage<2>から転送されたi番目のページ群のUページのデータが、MLCNANDフラッシュメモリのページバッファpage<2>に格納されていく図14中のS3a。一方、ステップS3までで、既に、メモリコントローラ200のページバッファ群240bには、i1番目のページ群に書き込まれるデータが格納されている。これによって、ステップS3終了後、すぐにMLCNANDフラッシュメモリに対するi1番目のページ群のデータの転送が開始される。以降、データパスの接続先をページバッファ群240a図14中のA0及び240b図14中のA1に交互に切り換えながら、ステップS1~S3を繰り返すことで、メモリコントローラ200からMLCNANDフラッシュメモリへの複数のページ群に対する書き込みデータの転送を実現することができる。図15は、図13に示すデータ読み込み時における、メモリコントローラ200のページバッファ群240とMLCNANDフラッシュメモリのページバッファとのデータ転送を説明する図である。図15は、i番目のページ群に対するデータ読み出し時の様子であり、メモリコントローラ200のページバッファ群240bには、既にi-1番目のページ群から読み出されたデータが格納されている。また、ページバッファ群240aには、i-2番目のページ群から読み出されたデータが残っている。一方、MLCNANDフラッシュメモリのページバッファpage<0>には、既にi番目のページ群のLページのデータが格納されている。なお、メモリコントローラ200のデータパスは、ページバッファ群240bに接続されている図15中のA1。この状態において、i番目のページ群からのデータ読み出し時のデータ転送は以下のように実行される。始めに、ステップS1において、既にMLCNANDフラッシュメモリのページバッファpage<0>に格納されているi番目のページ群のLページのデータが、メモリコントローラ200のページバッファ群240aのページバッファpage<0>に転送される図15中のS1a。これによって、ページバッファ群240aに残っていたi-2番目のページ群のデータがi番目のページ群のデータによって上書きされる。これと同時に、MLCNANDフラッシュメモリでは、MLCアレイから読み出されたi番目のページ群のMページのデータがページバッファpage<1>に格納されていく図15中のS1b。また、メモリコントローラ200では、ページバッファ群240bに格納しているi-1番目のページ群のデータが、p-adicMLCbinarymapping回路ブロック230、LeemetriccodeECCsystem回路ブロック220を介して外部へ読み出される。この外部へのデータ読み出しは、後述のステップS2以降でも並行に実行される。続いて、ステップS2において、MLCNANDフラッシュメモリのページバッファpage<1>にi番目のページ群のMページのデータが全て格納された後、このi番目のページ群のMページのデータがメモリコントローラ200のページバッファ群240aのページバッファpage<1>に転送される図15中のS2a。これと同時に、MLCNANDフラッシュメモリでは、MLCアレイから読み出されたi番目のページ群のUページのデータがページバッファ<2>に格納されていく図15中のS2b。続いて、ステップS3において、MLCNANDフラッシュメモリのページバッファpage<2>にi番目のページ群のUページのデータが全て格納された後、このi番目のページ群のUページのデータがメモリコントローラ200のページバッファ群240aのページバッファpage<2>に転送される図15中のS3a。これと同時に、MLCNANDフラッシュメモリでは、MLCアレイから読み出されたi1番目のページ群のLページのデータがページバッファ<2>に格納されていく図15中のS3b。一方、ステップS3までで、メモリコントローラ200では、ページバッファ群240bに格納されていたi-1番目のページ群のデータが全てメモリコントローラ200から読み出された後、ページパスの接続先がページバッファ群240aに切り換えられる図15中のA0。以降、データパスの接続先をページバッファ群240a図15中のA0及び240b図15中のA1に交互に切り換えながら、ステップS1~S3を繰り返すことで、MLCNANDフラッシュメモリからメモリコントローラ200への複数のページ群から読み出されたデータの転送を実現することができる。次に、16値のMLCを用いた場合について説明しておく。図16は、データ書き込み時における16値4ビットのMLCからなるMLCNANDフラッシュメモリのページバッファの動作例を示す図である。なお、以下において、MLCの4ビットのうち、最も重みの小さいビットをLビット、中程度の重みのビットをM1ビット、M2ビット、最も重みの大きいビットをUビットと呼ぶ事にする。また、所定数のMLCのLビット、M1ビット、M2ビット、Uビットからなるページを、それぞれLページ、M1ページ、M2ページ、Uページと呼ぶ事にする。さらに、MLCを共通にするLページ、M1ページ、M2ページ及びUページをまとめてページ群と呼ぶ事にする。図16に示すMLCNANDフラッシュメモリは、4系統のページバッファpage<0>~<3>を備えており、これらページバッファpage<0>、<1>、<2>、<3>は、それぞれLページ、M1ページ、M2ページ、Uページのデータ書き込み或いはデータ読み出しの際に用いられる。なお、MLCへのデータ書き込みは、MLCの閾値レベルを、最初は粗くシフトさせ、徐々に細かいシフトをさせながら確定させていくことで実現される。このため、例えば、LページのデータをMLCの閾値レベルの最も粗い区分、M1ページ及びM2ページのデータをMLCの閾値レベルの中程度の区分、UページのデータをMLCの閾値レベルの最も細かい区分に対応させておき、Lページのデータ書き込み、M1ページのデータ書き込み、M2ページのデータ書き込み、Uページのデータ書き込みを順次行い、MLCの閾値レベルを確定させれば良い。i番目のページ群のデータ書き込みは、以下のステップによって実行される。始めに、ステップS1において、メモリコントローラ200から転送されたi番目のページ群のLページのデータが、ページバッファpage<0>に格納されていく図16中のS1a。これと同時に、既にページバッファpage<2>に格納されていたi-1番目のページ群のUページのデータが、MLCアレイに書き込まれる図16中のS1b。続いて、ステップS2において、メモリコントローラ200から転送されたi番目のページ群のM1ページのデータが、ページバッファpage<1>に格納されていく図16中のS2a。これと同時に、先のステップS1でページバッファpage<0>に格納されたi番目のページ群のLページのデータが、MLCアレイに書き込まれる図16中のS2b。続いて、ステップS3において、メモリコントローラ200から転送されたi番目のページ群のM2ページのデータが、ページバッファpage<2>に格納されていく図16中のS3a。これと同時に、先のステップS2でページバッファpage<1>に格納されたi番目のページ群のM1ページのデータが、MLCアレイに書き込まれる図16中のS3b。続いて、ステップS4において、メモリコントローラ200から転送されたi番目のページ群のUページのデータが、ページバッファpage<3>に格納されていく図16中のS4a。これと同時に、先のステップS2でページバッファpage<2>に格納されたi番目のページ群のM1ページのデータが、MLCアレイに書き込まれる図16中のS4b。続いて、ステップS1 ́において、先のステップS4においてページバッファpage<3>に格納されたi番目のページ群のUページのデータが、MLCアレイに書き込まれる図16中のS1b ́。これと同時に、メモリコントローラ200から転送されたi1番目のページ群のLページのデータが、ページバッファpage<0>に格納されていく図16中のS1a ́。以降、ステップS1~S4を繰り返すことで複数ページ群へのデータ書き込みを完了することができる。図17は、データ読み出し時における16値4ビットのMLCからなるMLCNANDフラッシュメモリのページバッファの動作例を示す図である。i番目のページ群のデータ読み出しは、以下のステップによって実行される。始めに、ステップS1において、MLCアレイから読み出されたi番目のページ群のLページのデータが、ページバッファ<0>に格納されていく図17中のS1b。これと同時に、既にページバッファpage<2>に格納されていたi-1番目のページ群のUページのデータが、メモリコントローラ200に転送される図17中のS1a。続いて、ステップS2において、MLCアレイから読み出されたi番目のページ群のM1ページのデータが、ページバッファpage<1>に格納されていく図17中のS2b。これと同時に、先のステップS1でページバッファpage<0>に格納されたi番目のページ群のLページのデータが、メモリコントローラ200に転送される図17中のS2a。続いて、ステップS3において、MLCアレイから読み出されたi番目のページ群のM2ページのデータが、ページバッファpage<2>に格納されていく図17中のS3b。これと同時に、先のステップS2でページバッファpage<1>に格納されたi番目のページ群のM1ページのデータが、メモリコントローラ200に転送される図17中のS3a。続いて、ステップS4において、MLCアレイから読み出されたi番目のページ群のUページのデータが、ページバッファpage<3>に格納されていく。これと同時に、先のステップS3でページバッファpage<2>に格納されたi番目のページ群のM2ページのデータが、メモリコントローラ200に転送される図17中のS4a。続いて、ステップS1 ́において、先のステップS4においてページバッファpage<3>に格納されたi番目のページ群のUページのデータが、メモリコントローラ200に転送される図17中のS1a ́。これと同時に、MLCアレイから読み出されたi1番目のページ群のLページのデータが、ページバッファpage<0>に格納されていく図17中のS1b ́。以降、ステップS1~S4を繰り返すことで複数ページ群へのデータ読み出しを完了することができる。以上説明したように、MLCNANDフラッシュメモリでは、ページバッファpage<0>~<3>へのデータの格納と、MLCアレイへのデータ書き込み或いはメモリコントローラ200へのデータ読み出しが、異なるページにおいて同時に進行する。次に、図16、図17に示す場合における、メモリコントローラ200のページバッファ群240とMLCNANDフラッシュメモリのページバッファとのデータ転送について説明する。図18は、図16に示すデータ書き込み時における、メモリコントローラ200のページバッファ群240とMLCNANDフラッシュメモリのページバッファとのデータ転送を説明する図である。図18は、i番目のページ群に対するデータ書き込み時の様子であり、メモリコントローラ200のページバッファ群240aには、既にi番目のページ群に書き込むデータが格納されている。また、ページバッファ群240bには、i-1番目のページ群に書き込まれたデータが残っている。一方、MLCNANDフラッシュメモリのページバッファpage<3>には、既にi-1番目のページ群のUページのデータが格納されている。なお、メモリコントローラ200は、p-adic<>MLCbinarymapping回路ブロック230とページバッファ群240a及び240bとを選択的に接続するデータパスを有しており、図18の場合、このデータパスは、ページバッファ群240bに接続されている図18中のA1。この状態において、i番目のページ群のデータ書き込み時のデータ転送は以下のように実行される。始めに、ステップS1において、ページバッファ群240aのページバッファpage<0>から転送されたi番目のページ群のLページのデータが、MLCNANDフラッシュメモリのページバッファpage<0>に格納されていく図18中のS1a。これと同時に、既にMLCNANDフラッシュメモリのページバッファpage<3>に格納されていたi-1番目のページ群のUページのデータが、MLCアレイに書き込まれる図18中のS1b。また、メモリコントローラ200では、p-adic<>MLCbinarymapping回路ブロック230を介して、LeemetriccodeECCsystem回路ブロック220からページバッファ群240bに対してi1番目のページ群に書き込まれるデータが転送される。これによって、図8に示したように、ページバッファ群240bに残っていたi-1番目のデータがi1番目のデータによって上書きされる。このページバッファ群240bに対するデータ転送は、後述のステップS2以降でも並行に実行される。続いて、ステップS2において、ページバッファ群240aのページバッファpage<0>からMLCNANDフラッシュメモリのページバッファpage<0>へのi番目のページ群のLページのデータが全て転送された後、このi番目のページ群のLページのデータがMLCアレイに書き込まれる図18中のS2b。これと同時に、ページバッファ群240aのページバッファpage<1>から転送されたi番目のページ群のM1ページのデータが、MLCNANDフラッシュメモリのページバッファpage<1>に格納されていく図18中のS2a。続いて、ステップS3において、ページバッファ群240aのページバッファpage<1>からMLCNANDフラッシュメモリのページバッファpage<1>へのi番目のページ群のM1ページのデータが全て転送された後、このi番目のページ群のM1ページのデータがMLCアレイに書き込まれる図18中のS3b。これと同時に、ページバッファ群240aのページバッファpage<2>から転送されたi番目のページ群のM2ページのデータが、MLCNANDフラッシュメモリのページバッファpage<2>に格納されていく図18中のS3a。続いて、ステップS4において、ページバッファ群240aのページバッファpage<2>からMLCNANDフラッシュメモリのページバッファpage<2>へのi番目のページ群のM2ページのデータが全て転送された後、このi番目のページ群のM2ページのデータがMLCアレイに書き込まれる図18中のS4b。これと同時に、ページバッファ群240aのページバッファpage<3>から転送されたi番目のページ群のUページのデータが、MLCNANDフラッシュメモリのページバッファpage<3>に格納されていく図18中のS4a。一方、ステップS4までで、既に、メモリコントローラ200のページバッファ群240bには、i1番目のページ群に書き込まれるデータが格納されている。これによって、ステップS4終了後、すぐにMLCNANDフラッシュメモリに対するi1番目のページ群のデータの転送が開始される。以降、データパスの接続先をページバッファ群240a図18中のA0及び240b図18中のA1に交互に切り換えながら、ステップS1~S4を繰り返すことで、メモリコントローラ200からMLCNANDフラッシュメモリへの複数のページ群に対する書き込みデータの転送を実現することができる。図19は、図17に示すデータ読み込み時における、メモリコントローラ200のページバッファ群240とMLCNANDフラッシュメモリのページバッファとのデータ転送を説明する図である。図19は、i番目のページ群に対するデータ読み出し時の様子であり、メモリコントローラ200のページバッファ群240bには、既にi-1番目のページ群から読み出されたデータが格納されている。また、ページバッファ群240aには、i-2番目のページ群から読み出されたデータが残っている。一方、MLCNANDフラッシュメモリのページバッファpage<0>には、既にi番目のページ群のLページのデータが格納されている。なお、メモリコントローラ200のデータパスは、ページバッファ群240bに接続されている図19中のA1。この状態において、i番目のページ群からのデータ読み出し時のデータ転送は以下のように実行される。始めに、ステップS1において、既にMLCNANDフラッシュメモリのページバッファpage<0>に格納されているi番目のページ群のLページのデータが、メモリコントローラ200のページバッファ群240aのページバッファpage<0>に転送される図19中のS1a。これによって、ページバッファ群240aに残っていたi-2番目のページ群のデータがi番目のページ群のデータによって上書きされる。これと同時に、MLCNANDフラッシュメモリでは、MLCアレイから読み出されたi番目のページ群のMページのデータがページバッファpage<1>に格納されていく図19中のS1b。また、メモリコントローラ200では、ページバッファ群240bに格納しているi-1番目のページ群のデータが、p-adicMLCbinarymapping回路ブロック230、LeemetriccodeECCsystem回路ブロック220を介して外部へ読み出される。この外部へのデータ読み出しは、後述のステップS2以降でも並行に実行される。続いて、ステップS2において、MLCNANDフラッシュメモリのページバッファpage<1>にi番目のページ群のM1ページのデータが全て格納された後、このi番目のページ群のM1ページのデータがメモリコントローラ200のページバッファ群240aのページバッファpage<1>に転送される図19中のS2a。これと同時に、MLCNANDフラッシュメモリでは、MLCアレイから読み出されたi番目のページ群のM2ページのデータがページバッファ<2>に格納されていく図19中のS2b。続いて、ステップS3において、MLCNANDフラッシュメモリのページバッファpage<2>にi番目のページ群のM2ページのデータが全て格納された後、このi番目のページ群のM2ページのデータがメモリコントローラ200のページバッファ群240Aのページバッファpage<2>に転送される図19中のS3a。これと同時に、MLCNANDフラッシュメモリでは、MLCアレイから読み出されたi番目のページ群のUページのデータがページバッファ<3>に格納されていく図19中のS3b。続いて、ステップS4において、MLCNANDフラッシュメモリのページバッファpage<3>にi番目のページ群のUページのデータが全て格納された後、このi番目のページ群のUページのデータがメモリコントローラ200のページバッファ群240aのページバッファpage<3>に転送される図19中のS4a。これと同時に、MLCNANDフラッシュメモリでは、MLCアレイから読み出されたi1番目のページ群のLページのデータがページバッファ<2>に格納されていく図19中のS4b。一方、ステップS4までで、メモリコントローラ200では、ページバッファ群240bに格納されていたi-1番目のページ群のデータが全てメモリコントローラ200から読み出された後、ページパスの接続先がページバッファ群240aに切り換えられる図19中のA0。以降、データパスの接続先をページバッファ群240a図19中のA0及び240b図19中のA1に交互に切り換えながら、ステップS1~S4を繰り返すことで、MLCNANDフラッシュメモリからメモリコントローラ200への複数のページ群から読み出されたデータの転送を実現することができる。以上では、8値のMLCと16値のMLCを用いた場合について、MLCNANDフラッシュメモリのページバッファとメモリコントローラ200のページバッファ群240とのデータの転送の方法を説明した。一方、メモリコントローラ200のようなp-adicコントローラの場合、メモリコントローラ200のページバッファ群240とMLCNANDフラッシュメモリの各ページとのマッピングが重要となる。但し、このマッピングは、メモリデバイス100とメモリコントローラ200との間で辻褄が合ってさえいれば良く、メモリシステムと外部とのデータのマッピングは任意である。このメモリシステムと外部とのデータのマッピングを上手く設定してやれば、メモリデバイス100に記録するデータと実際のバイナリデータとの対応関係を複雑にすることができ、記録データのセッキュリティを高めることができる。以下において、このメモリシステムと外部とのデータのマッピングを任意に設定できる機能ブロックをスクランブラBScと呼ぶことにする。そこで、次に、本実施形態に係るメモリコントローラ200がスクランブラBScを備えた場合における、リーメトリックコードの各シンボルが表わすZpの数とMLCのレベルとの対応関係について図20を用いて説明する。図20に示すスクランブラBScは、addressscrambler回路ブロック及びrotator回路ブロックを有する。addressscrambler回路ブロックは、外部から入力されたバイナリデータがZpの数を成分とするコードに変換された後で、このコードの各成分をページ内のどのアドレスに格納するかを決定する。MLCNANDコントローラメモリコントローラ200及びMLCNANDフラッシュメモリメモリデバイス100間のデータ転送は、全てZpの数を成分とするコードで行われるが、データ書き込み時及びデータ読み出し時のZpの数とMLCのレベルとの対応関係が一定であれば、addressscrambler回路ブロックにおいて、コードの成分をページ内のどのアドレスに格納するかをメモリコントローラ200毎に任意に設定することができる。一方、rotator回路ブロックは、コードの成分が表わすZpの数を、その巡回的順序を維持しつつMLCのレベルに対応付けする。Zpは、巡回的順序の数であり、この数の変化を検出し、訂正するのがリーメトリックコードを用いたECCである。このZpの巡回的順序を維持したままMLCのレベルに対応付けさえすれば、隣接レベル間で生じるエラーは、Zpの数の最小変化に留まる。したがって、Zpの巡回的順序とMLCのレベルの順序との対応に飛びがなく、且つ、その対応関係がデータ書き込み時及びデータ読み出し時においてMLC毎に一定であれば、Zpの数とMLCの絶対的なレベルとの対応関係に制限はなく、rotator回路ブロックにおいて、メモリコントローラ200毎に任意に設定することができる。図20の場合は、p=13とした場合のMLCのレベルに対するZpの数の対応関係を説明する図である。始めに、コードの成分が表現するn=p-1=12個の成分は、addressscrambler回路ブロックによって、それぞれMLCNANDフラッシュメモリのページ内のアドレスにマッピングされる。そして、MLCの最低のレベルから最高のレベルにかけて、各レベルに0~12の番号が昇順又は降順に付けられているとした場合、rotator回路ブロックによって、このMLCのレベルの番号とZpの13個の成分の対応付けがなされる。図20の例では、Zpの数にssは、整数を加えてMLCのレベルの番号に変換している。MLCのレベルとページバッファのビットのデータの対応は、例えば、図20に示したように、グレイコードを用いても良い。これはメモリデバイス100の仕様に従う。[実施形態に係るメモリコントローラの特徴とその判別方法]メモリコントローラ200には、図20に示したZpの数を成分とするコードをスクランブルするスクランブラBScの他、バイナリデータそのものをスクランブルするスクランブラ以下、この機能ブロックをスクランブラAScと呼ぶを含めることもできる。即ち、このスクランブラAScは、データコマンドバスを介してメモリコントローラ200とCPU等との間で転送されるデータと、メモリコントローラ200の内部で処理されるデータとを対応付けるものである。例えば、メモリコントローラ200にシリアルに入力されたデータに対して、どのように順序付けをするか、或いは、反転させるか等の処理を行う。つまり、メモリコントローラ200は、CPU側のスクランブラAScとメモリデバイス100側のスクランブラBScの2箇所によってデータのスクランブルを行う。これらスクランブラASc及びBScによる作用によって、データコマンドバス上のデータとメモリデバイス100に記憶されるデータとの対応関係は非常に複雑かつ予測困難なものとなる。従って、実施形態に係るメモリコントローラ200を使用しているかどうかを判別するためには、これらスクランブラASc及びBScに依存しないメモリコントローラ200の特徴を知っておく必要がある。そこで、次に、これらスクランブルASc及びBScの影響について図21を参照しながら説明する。なお、以下において、CPU側のデータバス上のデータのうちメモリコントローラで一括処理される最小のデータのまとまりをD、メモリコントローラによってデータDを処理後の最小のデータのまとまりをδとする。データ処理の作用をを用いて表わす。また、スクランブラASc及びBScを除くp-adicコントローラ実施形態に係るメモリコントローラ200本体によるデータ処理をP、スクランブラASc及びBScを除くバイナリリニアコントローラ本体比較例に係るメモリコントローラによるデータ処をLで表わす。この表記方法によれば、例えば、データDにスクランブラAScを作用させた場合AScDと表記でき、さらに、AScDにp-adicコントローラを作用させた場合PAScDと表記することができる。メモリコントローラがp-adicコントローラ及びバイナリリニアコントローラの特徴は、データDとして、任意のデータ[c]とその反転データ[/c]を入力した場合に現れる。始めに、p-adicコントローラの特徴を説明する。データDをp-adicコントローラで処理した場合、データδは数11のようになる。[数11]BScPAScデータDとして[c]、[/c]を入力した場合、スクランブラAScを作用させた結果は数12のように表わすことができる。[数12]ASccASccスクランブラAScは、どのようなデータDに対しても、一定にスクランブルするため、データ[c]と[/c]に対してスクランブラAScを作用させた結果は、やはり互いに相補の関係となる。さらに、数12のデータaとデータ/aに対して、p-adicコントローラ本体のデータ処理を作用させた結果Pa、P/aは、それぞれ数13のように表わすことができる。[数13]PPバイナリデータからp進数データへの変換などp-adicコントローラ本体のデータ処理では線形関係が成立しないため、データαとデータβとの間では単純に関係づけることはできない。これらデータα、βに更に、スクランブラBScを作用させた結果BScα、BScβは、それぞれ数14のように表わすことができる。[数14]BScBScPASccBScBScPASccスクランブラBScは、どのようなデータDに対しても、一定にスクランブルするため、複雑な関係にあるデータαとβとにそれぞれスクランブラBScを作用させても、やはり、結果として得られるXとYとは複雑な関係となる。つまり、p-adicコントローラでデータを処理した場合、p-adicコントローラに入力したデータと、p-adicコントローラによってパリティ情報が付加されて出力されたデータとは、非線形の関係となる。続いて、比較例に係るバイナリリニアコントローラの特徴を説明する。データDをバイナリリニアコントローラで処理した場合、データδは数15のようになる。[数15]BScLAScデータDとして[c]、[/c]を入力した場合、スクランブラAScを作用させた結果は数16のように表わすことができる。[数16]ASccASccさらに、数16のデータaとデータ/aに対してバイナリリニアコントローラ本体におけるデータ処理の結果La、L/aは、それぞれ数17のように表わすことができる。[数17]LLバイナリリニアコントローラ本体によって相補的な2つのデータa及び/aを処理した結果であるデータα及びβのビット毎のmod2による加算結果は、数18のような関係が成立する。[数18]LL11ここで[1] ́は、データα及びβのビット毎のmod2による加算結果のうちデータDと対応する部分が全て‘1’であることを示している。なお、パリティデータについては、データ[c]及び[/c]が相補の関係にあってもパリティデータ同士が相補の関係にはないため、これらのmod2による加算結果は、必ずしも‘1’にはならない。したがって、データα、βにそれぞれスクランブラBScを作用させた結果BScα、BScβに関しても数19のような関係が成立する。[数19]BScBScLASccBScBScLAScc1以上、説明したように、p-adicコントローラとバイナリリニアコントローラの特徴は、相補的なデータを処理した後のデータを比べることで顕在化する。この特徴によって、外部からメモリコントローラの種類を判別することができる。なお、図21では、スクランブラASc及びBScは、メモリコントローラに含まれていたが、メモリコントローラの外部に有っても良い。次に、メモリコントローラがp-adicコントローラであるかバイナリリニアコントローラであるかを判別する手順について説明する。図22は、メモリコントローラの判別手順を説明する図である。始めに、メモリコントローラにデータcを入力し図22中のステップS1、メモリコントローラからメモリデバイスに出力されるデータXを得る図22中のステップS2。同様に、メモリコントローラにデータcの反転データ/cを入力し図22中のステップS3、メモリコントローラからメモリデバイスに出力されるデータYを得る図22中のステップS4。続いて、データX及びYに対して2を法とするビット毎の加算を行う図22中のステップS5。そして、その加算結果のうち、入力データに対応する特定のビットが全て‘1’かどうかを検証する図22中のステップS6。なお、この特定のビットは、入力データと同じビット数となる。加算結果の特定のビットが全て‘1’であった場合には、メモリコントローラがバイナリリニアコントローラであると判別でき、そうでない場合、つまり、加算結果の特定のビットに‘0’がある場合、メモリコントローラがp-adicコントローラであると判別できる。つまり、本実施形態に係るp-adicコントローラメモリコントローラ200を用いた場合、ステップS5で得られた加算結果には、入力データのビット数以上の‘1’が現れない場合も生じることになる。図23は、メモリコントローラの他の判別手順を説明する図である。データからリードソロモンコードへのエンコードの方式はいくつかあり、その方式によっては、結果として得られたリードソロモンコードの各ビットを、データに対応する情報部分か、その他のパリティ部分かに明確に分けることができない場合もある。しかし、この場合であっても、バイナリリニアコントローラを用いた場合、データcを入力した時の出力データXと、データcの相補のデータ/cを入力したときの出力データYとで、2を法とするビット毎の加算を行った場合、この加算結果のうち入力データと同程度のビット数の特定のビットは、全て‘1’又は全て‘0’になる。この特徴は入力データに依らず現れる。一方、p-adicコントローラを用いた場合、この様な特徴は現れない。つまり、このバイナリリニアコントローラの特徴が利用することで、情報部分とパリティ部分を明確に区別できないコードが用いられている場合であっても、メモリコントローラの種類を判別することができる。図23の場合、複数のデータc=c1、c2、及びその反転データ/c=/c1、/c2、を入力データとして、図21に示すステップS1~S5と同様の手順を行う。これによって、データc及び反転データ/cの組毎に出力データX及びYに対する2を法とする加算結果が得られる。そして、各加算結果のうち入力データのビット数程度の特定のビットが全て‘1’又は全て‘0’であり、且つ、この特定のビットの位置が全ての加算結果において共通している場合、メモリコントローラがバイナリリニアコントローラであると判別でき、そうでない場合、メモリコントローラがp-adicコントローラであると判別できる図23中のステップS6。ここで、ステップS6の説明において入力データのビット数程度と記載したが、これは、例えば、出力データのビット数の2/3にあたるビット数を意味する。換言すれば、加算結果の中に出力データ長の1/3以上の数の特定のビットにおいて、‘0’及び‘1’が共に現れる場合には、p-adicコントローラであると言える。なお、この2/3とし根拠は、入力データに対して付加されるパリティ情報のサイズが、入力データのサイズの50を超えているようなコードを用いたECCは非常に効率が悪いものであり、実用的ではないと考えられるからである。[まとめ]以上、本実施形態に係るメモリシステム及びメモリコントローラを用いた電子機器等のシステムの場合、メモリコントローラの種類の判別が容易である。それと共に、外部から入力されるデータ又は外部に出力するデータとメモリデバイスで記録されているデータとの関係が、バイナリリニアコントローラを用いた場合よりも複雑であるためセキュリティが高いと言える。なお、本実施形態に係るメモリコントローラ及びメモリシステムの特徴をまとめると以下のようになる。1外部からの入力データにパリティ情報を付加させた記憶データを記憶する複数のメモリセルを有するメモリデバイスと、入力データ及び記憶データ間の変換を行うメモリコントローラとを備え、記憶データに含まれる入力データに対応する情報データは、入力データに対して非線形の関係にあることを特徴とするメモリシステムである。ここでの非線形とは入力データの和の情報データが、各々の情報データの和とはならいない関係を言う。2情報データは、入力データと同じビット数であり、相補関係にある2つの入力データそれぞれに対応した2つの記憶データの情報データ同士の2を法とする加算を行った場合、当該2を法とする加算結果のうち1ビットは‘0’データになることを特徴とする上記1記載のメモリシステムである。3相補関係にある2つの入力データそれぞれに対応した2つの記憶データに対して2を法とする加算を、異なる複数組の相補関係にある2つの入力データのそれぞれについて取った場合、これら加算結果に共通する出力データ長の1/3を超える数の特定のビットに、それぞれ‘0’データ及び‘1’データが共に現れることを特徴とする上記1記載のメモリシステムである。4メモリコントローラは、バイナリデータ及びp進数データpは、素数間の変換を行うp進数変換部を有し、当該p進数変換部を用いて入力データ及び記憶データ間の変換を行うことを特徴とする上記1~3のいずれか1つに記載のメモリシステムである。5メモリデバイスは、1つのメモリセル毎にdビットdは、2以上の整数を記憶し、所定数のメモリセルの特定のビットからなるページ単位でデータの読み書きをし、メモリコントローラは、ページのサイズのd倍のサイズを持つバッファレジスタを有し、当該バッファレジスタを介してメモリデバイスとの記憶データの送受信を行うことを特徴とする上記1~4のいずれか1つに記載のメモリシステムである。6メモリコントローラは、バッファレジスタを複数有することを特徴とする上記5記載のメモリシステムである。7メモリコントローラは、入力データ及び記憶データの少なくとも一方のデータをスクランブルするスクランブラを有し、スクランブラを介して入力データ及び記憶データ間の変換を行うことを特徴とする上記6記載のメモリシステムである。8記憶データを記憶する複数のメモリセルを有するメモリデバイスを制御するメモリコントローラであって、メモリデバイスの制御の際、外部からの入力データと当該入力データにパリティ情報を付加させた記憶データとの変換を行い、記憶データに含まれる入力データに対応する情報データが入力データに対して非線形の関係にあることを特徴とするメモリコントローラである。[その他]以上、本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。"