(57)【特許請求の範囲】
【請求項１】
ホストとＮ（Ｎ＝２n，ｎは２以上の整数）値セルメモリとの間に，それぞれ複数ビットのデータバスを介して接続されたメモリコントローラにおいて，
前記ホストに接続される第１のデータバスの第１乃至第Ｍ（Ｍはｎ以上）のデータ群をそれぞれ並列に入力し，当該第１乃至第Ｍのデータ群に対して，単ビット不良を訂正可能な第１乃至第Ｍのエラー訂正コードをそれぞれ生成する第１乃至第ＭのECC回路と，
１つのＮ値セルに属するｎビットデータが重複せずに第１乃至第Ｍのデータ群に分離されるように，当該データ群を前記Ｎ値セルメモリのデータ入出力端子に接続される第２のデータバスに出力するデータ出力手段とを有し，
前記データ出力手段は，更に前記ECC回路が生成したそれぞれのエラー訂正コードを前記第２のデータバスに出力することを特徴とする多値セルメモリ用メモリコントローラ。
【請求項２】
請求項１において，
前記Ｎ値セルメモリのデータ入出力端子が，下位から順に第１，第２．．．第Ｍのデータ群に分割されており，
前記データ出力手段は，第２のデータバスに対して，下位から順に第１，第２．．．第Ｍのデータ群が割り当てられるようにデータを出力することを特徴とする多値セルメモリ用メモリコントローラ。
【請求項３】
請求項２において，
前記第１のデータバスのデータが，下位から順に第１，第２．．．第Ｍのデータ群に分割して第１乃至第ＭのECC回路に入力されることを特徴とする多値セルメモリ用メモリコントローラ。
【請求項４】
請求項１において，
前記Ｎ値セルメモリのデータ入出力端子が，下位から順にＮ値セルに属するデータ群に分割されて，
前記データ出力手段は，第２のデータバスに対して，下位から順に第１，第２．．．第Ｍのデータ群のデータが周期的に繰り返されるようにデータを出力することを特徴とする多値セルメモリ用メモリコントローラ。
【請求項５】
請求項１において，
前記Ｎ値セルメモリからデータを読み出す場合は，前記第１乃至第ＭのECC回路は，前記第２のデータバスの第１乃至第Ｍのデータ群及び第１乃至第Ｍのエラー訂正コードを入力し，当該第１乃至第ＭのECC回路が第１乃至第Ｍのデータ群内の１ビットエラー訂正を行うことを特徴とする多値セルメモリ用メモリコントローラ。
【請求項６】
請求項１において，
前記多値セルメモリへの書き込み時に，クロックに同期して，前記第１のデータバスからデータが供給され，前記データ出力手段が当該データを前記第２のデータバスに出力すると共に，前記ECC回路が各データ群のエラー訂正コードを生成し，
クロックに同期して，１ページ分のデータを前記第２のデータバスに出力した後，前記データ出力手段が前記エラー訂正コードを前記第２のデータバスに出力することを特徴とする多値セルメモリ用メモリコントローラ。
【請求項７】
請求項１において，
前記多値セルメモリからの読み出し時に，クロックに同期して，前記第２のデータバスからデータが供給され，前記ECC回路が各データ群のエラー訂正コードを生成し，
クロックに同期して，１ページ分のデータを供給された後，前記第２のデータバスからエラー訂正コードが供給され，前記ECC回路が前記生成したエラー訂正コードと当該供給されたエラー訂正コードとを比較して，エラー検出及び訂正を行うことを特徴とする多値セルメモリ用メモリコントローラ。
【請求項８】
請求項１乃至７のいずれかにおいて，
前記エラー訂正コードは，各データ群に割り付けられたビット番号の各桁が「０」の第１のグループと「１」の第２のグループそれぞれのパリティビットを有することを特徴とする多値セルメモリ用メモリコントローラ。
【請求項９】
ホストとＮ（Ｎ＝２n，ｎは２以上の整数）値セルメモリとの間に，それぞれ複数ビットのデータバスを介して接続されたメモリコントローラにおいて，
前記ホストに接続される第１のデータバスのデータ群について，アドレス方向に分離された第１乃至第Ｍ（Ｍはｎ以上）のデータ群を順番に入力し，当該第１乃至第Ｍのデータ群に対して，単ビット不良を訂正可能な第１乃至第Ｍのエラー訂正コードをそれぞれ生成する共通のECC回路と，
前記第１乃至第（Ｍ−１）のエラー訂正コードを保持するエラー訂正コード保持手段と，
１つのＮ値セルに属するｎビットデータが重複せずに第１乃至第Ｍのデータ群に分離されるように，当該データを前記Ｎ値セルメモリに接続される第２のデータバスに出力するデータ出力手段とを有し，
前記データ出力手段は，更に前記エラー訂正コード保持手段が保持する第１乃至第（Ｍ−１）のエラー訂正コードと前記ECC回路が生成した第Ｍのエラー訂正コードとを，前記第２のデータバスに出力することを特徴とする多値セルメモリ用メモリコントローラ。
【請求項１０】
ホストとＮ（Ｎ＝２n，ｎは２以上の整数）値セルメモリとの間に，それぞれ複数ビットのデータバスを介して接続されたメモリコントローラにおいて，
前記ホストに接続される第１のデータバスのデータ群について，アドレス方向に分離された第１乃至第Ｍ（Ｍはｎ以上）のデータ群をそれぞれ入力し，当該第１乃至第Ｍのデータ群に対して，単ビット不良を訂正可能な第１乃至第Ｍのエラー訂正コードをそれぞれ生成する第１乃至第ＭのECC回路と，
１つのＮ値セルに属するｎビットデータが重複せずに第１乃至第Ｍのデータ群に分離されるように，当該データを前記Ｎ値セルメモリに接続される第２のデータバスに出力するデータ出力手段とを有し，
前記データ出力手段は，更に前記ECC回路が生成したそれぞれのエラー訂正コードを前記第２のデータバスに出力することを特徴とする多値セルメモリ用メモリコントローラ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は，多値セルメモリ用のメモリコントローラに関し，特に，多値セルのエラー検出・訂正コードの生成と検出・訂正を行うＥＣＣ回路を有するメモリコントローラに関する。
【０００２】
【従来の技術】
携帯情報端末，携帯電話など携帯型の情報機器を中心に，フラッシュメモリが普及している。フラッシュメモリは，半導体不揮発性メモリであり，電源がオフになっても記憶データを保持することができるので，主に電池駆動の携帯型情報機器に広く採用されている。
【０００３】
近年の高機能化やブロードバンドなどに伴い，フラッシュメモリの記憶容量の増大が広く求められている。それに応えるものとして，多値セルのフラッシュメモリが提案されている。この多値セルメモリは，広義には３値以上の状態をセルが記憶するメモリであり，通常は２n（ｎ≧２の整数）の状態をセルが記憶するメモリである。従って、４つのチャージ状態であれば２ビットのデータが１個のセルに記憶され，８つのチャージ状態であれば３ビットのデータが１個のセルに記憶され，２nのチャージ状態であればｎビットのデータが１個のセルに記憶されることになる。
【０００４】
フラッシュメモリのような半導体メモリは，１ビット当たりのコストが高いため，あまり多くのビットを必要とするECCコードの利用は，フラッシュメモリには適していない。一方，フラッシュメモリは，ハードディスクなどの他の記録媒体に比較して信頼性が高く，高々１個のセルに不良が発生する程度である。従って，従来の単ビットセルのメモリでは，ECCコードに１ビットエラーの訂正まで可能なハミングコードが採用されることが多い。複数ビットエラーの訂正を可能とするECCコードでは，ビット数が多くなりすぎると共に，複数ビットエラー訂正の必要性に欠けるからである。つまり，フラッシュメモリのように，１ビット当たりのコストが高いが，高々１個のセルに不良が発生する程度に信頼性が高い場合は，少ないビット数で１ビットエラーまで訂正可能なハミングコードが，ECCコードとして適している。
【０００５】
大容量化に対応した多値セルメモリは，あるセルに不良が発生すると，その不良セルに属するｎビットのデータが同時に不良ビットになる可能性がある。このため，上記の１ビットエラーまで訂正できるハミングコードを利用した誤り訂正コードでは，１個の不良セルに伴うｎビット（ｎは２以上）のエラーを訂正することはできないので，ハミングコード以外のビット数が大きい別の種類のECCコードに利用が必要になる。例えば，ハードディスクで採用されている複雑なECCコードなどである。しかし，そのようなビット数が大きいECCコードは，１ビット当たりのコストが高いフラッシュメモリには不向きである。
【０００６】
上記の問題に対処するものとして，米国特許第５，７５４，５６６号に，メモリデバイス内にECC回路を設け，そのECC回路が，シリアルなデータを複数のデータワードに分離し，このデータワード内には１セルのｎビットから１ビットのみが属するようにし，そして，データワード毎にECCコードを生成し，それをｎビットセルに記憶させることが提案されている。
【０００７】
【発明が解決しようとする課題】
しかしながら，メモリデバイスにECC回路を内蔵させることは，メモリデバイスのコストアップを招き，好ましくない。特に，複数個のメモリデバイスが搭載されるシステムでは，同じECC回路が複数のメモリデバイス内に重複して設けられることになり，システム全体のコストを押し上げてします。
【０００８】
そこで，本発明の目的は，多ビットセルメモリに対するECC回路を内蔵したメモリコントローラを提供することにある。
【０００９】
更に，本発明の別の目的は，多ビットセルメモリに対して，少ないビット数で誤り訂正可能なECCコードを生成し，誤り訂正を行うメモリコントローラを提供することにある。
【００１０】
【課題を解決するための手段】
上記の目的を達成するために，本発明の第１の側面は，ホストとＮ（Ｎ＝２n，ｎは２以上の整数）値セルメモリとの間に，それぞれ複数ビットのデータバスを介して接続されたメモリコントローラにおいて，ホストに接続される第１のデータバスの第１乃至第Ｍ（Ｍはｎ以上）のデータ群をそれぞれ並列に入力し，当該第１乃至第Ｍのデータ群に対して，単ビット不良を訂正可能な第１乃至第Ｍのエラー訂正コードをそれぞれ生成する第１乃至第ＭのECC回路と，１つのＮ値セルに属するｎビットデータが重複せずに第１乃至第Ｍのデータ群に分離されるように，当該データ群を前記Ｎ値セルメモリのデータ入出力端子に接続される第２のデータバスに出力するデータ出力手段とを有し，前記データ出力手段は，更に前記ECC回路が生成したそれぞれのエラー訂正コードを前記第２のデータバスに出力することを特徴とする多値セルメモリ用メモリコントローラである。
【００１１】
上記多値セルメモリ用のメモリコントローラに接続されるＮ値セルメモリは，第２のデータバス経由で入力された複数ビットのデータのうち，第１乃至第Ｍのデータ群それぞれから高々１ビットのデータを組み合わせて，１つのＮ値セルに記憶する。また，第１乃至第ＭのECC回路が生成したエラー訂正コードも，それぞれから高々１ビットのデータを組み合わせて，１つのＮ値セルに記憶することが好ましい。
【００１２】
上記発明のメモリコントローラが制御するＮ値セルメモリは，第２のデータバスに接続される複数のデータ入出力端子が，１つのＮ値セルに属するｎビットデータが重複しないように，第１乃至第Ｍのデータ入出力端子群に分離される内部構成を有する。それに合わせて，メモリコントローラは，第１のデータバスの複数ビットデータを第１乃至第Ｍのデータ群に分割し，それぞれのデータ群についてECC回路でエラー訂正コードを生成し，第１乃至第Ｍのデータ群と第１乃至第Ｍのエラー訂正コードとを，Ｎ値セルメモリの第１乃至第Ｍのデータ入出力端子に第２のデータバスを介して入力する。
【００１３】
その結果，各Ｎ値セルに属するｎビットのデータは，重複することなく複数のECCゾーンに分離され，それぞれのECCゾーンのデータに対してエラー訂正コードが生成され，記憶される。従って，１つのＮ値セルに不良が生じて同時にｎビットのデータが不良になっても，それぞれのECCゾーンで生成したエラー訂正コードを利用して，ｎビットのデータの訂正を行うことができる。つまり，単ビット不良を訂正可能なエラー訂正コードであっても，ｎビットの不良を訂正することができる。
【００１４】
Ｎ値セルメモリのデータ入出力端子が，下位から順に第１，第２．．．第Ｍのデータ群に分割されている場合は，メモリコントローラのデータ出力手段は，第２のデータバスに対して，下位から順に第１，第２．．．第Ｍのデータ群が割り当てられるようにデータを出力する。それに伴い，第１のデータバスのデータも，下位から順に第１，第２．．．第Ｍのデータ群に分割して第１乃至第ＭのECC回路に入力することができ，メモリコントローラ内のデータ群に分割する構成が比較的簡単になる。
【００１５】
また，Ｎ値セルメモリのデータ入出力端子が，下位から順にＮ値セルに属するデータ群に分割されている場合は，メモリコントローラのデータ出力手段は，第２のデータバスに対して，下位から順に第１，第２．．．第Ｍのデータ群のデータが周期的に繰り返されるようにデータを出力する。つまり，データ出力手段が，１つのＮ値セルに属するｎビットデータが重複せずに第１乃至第Ｍのデータ群に分離されるように，第１乃至第Ｍのデータ群のデータを組み合わせて，第２のデータバスに出力する。
【００１６】
上記の発明において，Ｎ値セルメモリからデータを読み出す場合は，第２のデータバスの第１乃至第Ｍのデータ群及び第１乃至第Ｍのエラー訂正コードが，メモリコントローラ内の第１乃至第ＭのECC回路にそれぞれ供給され，第１乃至第ＭのECC回路が第１乃至第Ｍのデータ群内の１ビットエラー訂正を行う。
【００１７】
従って，ホストとＮ値セルメモリとの間において，第１のデータバス，第１乃至第ＭのECC回路，データ出力手段及び第２のデータバスの経路で書き込みが行われ，その逆の経路で読み出しが行われる。
【００１８】
更に，クロックに同期して書き込みデータがECC回路に供給され，メモリに供給されると共に，クロックに同期して読み出しデータがメモリから出力され，ECC回路に供給される。従って，ホストとメモリデバイスとの間のクロック同期動作への影響を最小限に抑えて，エラー訂正コードの生成とエラー訂正を行うことができる。
【００１９】
上記目的を達成するために，本発明の第２の側面は，ホストとＮ（Ｎ＝２n，ｎは２以上の整数）値セルメモリとの間に，それぞれ複数ビットのデータバスを介して接続されたメモリコントローラにおいて，ホストに接続される第１のデータバスのデータ群について，アドレス方向に分離された第１乃至第Ｍ（Ｍはｎ以上）のデータ群を順番に入力し，当該第１乃至第Ｍのデータ群に対して，単ビット不良を訂正可能な第１乃至第Ｍのエラー訂正コードをそれぞれ生成する共通のECC回路と，第１乃至第（Ｍ−１）のエラー訂正コードを保持するエラー訂正コード保持手段と，１つのＮ値セルに属するｎビットデータが重複せずに第１乃至第Ｍのデータ群に分離されるように，当該データを前記Ｎ値セルメモリに接続される第２のデータバスに出力するデータ出力手段とを有し，前記データ出力手段は，更に前記エラー訂正コード保持手段が保持する第１乃至第（Ｍ−１）のエラー訂正コードと前記ECC回路が生成した第Ｍのエラー訂正コードとを，前記第２のデータバスに出力することを特徴とする多値セルメモリ用メモリコントローラである。
【００２０】
上記目的を達成するために，本発明の第３の側面は，ホストとＮ（Ｎ＝２n，ｎは２以上の整数）値セルメモリとの間に，それぞれ複数ビットのデータバスを介して接続されたメモリコントローラにおいて，ホストに接続される第１のデータバスのデータ群について，アドレス方向に分離された第１乃至第Ｍ（Ｍはｎ以上）のデータ群をそれぞれ入力し，当該第１乃至第Ｍのデータ群に対して，単ビット不良を訂正可能な第１乃至第Ｍのエラー訂正コードをそれぞれ生成する第１乃至第ＭのECC回路と，１つのＮ値セルに属するｎビットデータが重複せずに第１乃至第Ｍのデータ群に分離されるように，当該データを前記Ｎ値セルメモリに接続される第２のデータバスに出力するデータ出力手段とを有し，前記データ出力手段は，更に前記ECC回路が生成したそれぞれのエラー訂正コードを前記第２のデータバスに出力することを特徴とする多値セルメモリ用メモリコントローラである。
【００２１】
より好ましい実施例では，上記発明の第１，第２，第３の側面において，メモリデバイスは，前記データバスの複数ビットのデータを複数有するページ単位で書き込み及び読み出しを行い，前記データバスの複数ビットのデータを，内部アドレス順に，内部のページバッファに書き込み及び読み出す。更に，ページ内のデータが，（１）データ入出力端子（列）で，または（２）内部アドレス（行）で，第１乃至第Ｍのデータ群に分離され，そのデータ群毎に単ビットエラー訂正可能なエラー訂正コードがECC回路で生成され，訂正される。従って，メモリコントローラのECC回路及びデータ出力手段は，上記分離方法に応じた構成を有する。
【００２２】
上記の発明では，ECC生成回路は，各ECCゾーン内のデータにおいて単ビット不良を訂正可能なエラー訂正符号方式に基づくECCコードを生成する。従って，生成されるECCコードのビット数は最小限に抑えられ，フラッシュメモリのスペア領域に記憶させることができる。そして，各ECCゾーン内には，１つのＮ値セルに属するｎビットデータのうち１ビットのみが属するように分離されているので，１個の多値セルに不良が発生してｎビット不良が発生しても，各ECCゾーン内で１ビットの誤り訂正を行うことで，ｎビットの誤り訂正を可能にする。
【００２３】
【発明の実施の形態】
以下，図面を参照して本発明の実施の形態例を説明する。しかしながら，本発明の保護範囲は，以下の実施の形態例に限定されるものではなく，特許請求の範囲に記載された発明とその均等物にまで及ぶものである。
【００２４】
図１は，多値セルメモリを使用したメモリシステムの構成図である。ここで多値セルメモリとは，１個のセル内にｎビット（ｎは２以上の整数）のデータが保持可能なメモリであり，従って１個のセルはＮ＝２nの状態を持つ。この例では，ホスト１と多値セルメモリ３とがデータバス５，６で接続されて，その間にメモリコントローラ２が設けられる。具体的には，ホスト１とメモリコントローラ２との間に第１のデータバス５が，メモリコントローラ２と多値セルメモリ３との間に第２のデータバス６がそれぞれ設けられる。そして，メモリコントローラ２は，データバス５，６から供給されるデータに対してエラー訂正コード（以下ECCコード）を生成し，誤り訂正を行うECC回路４を内蔵する。
【００２５】
ホスト１は，多値セルメモリ３からデータを読み出すと共に，データを書き込む。その場合，メモリコントローラ２は，ホスト１による多値セルメモリ３へのアクセスを仲介する。ECC回路は，ホスト１が多値セルメモリ３にデータを書き込む時，そのデータに対するECCコードを生成し，データと共にそのECCコードも多値セルメモリ３に書き込む。通常，多値セルメモリ３の冗長セル領域であるスペア領域に，このECCコードが書き込まれる。そして，ホスト１が多値セルメモリ３からデータを読み出す時は，ECC回路４は，読み出したデータに対するECCコードを生成し，読み出したECCコードとの比較を行うことで，データの誤りを検出し，その誤りを訂正する。
【００２６】
図１のメモリシステム例では，ECC回路４は，データの誤りを検出すると，エラー検出手段７によりホストにエラー発生を通知すると共に，データバス５を介して，誤り訂正情報（エラー発生アドレスなど）をホスト１に送信する。従って，ホスト１は，その誤り訂正情報に従って，読み出しデータの誤り訂正を行う。別のメモリシステム例では，ECC回路４が例えば１ページ分のデータを保持するデータバッファを内蔵し，ECC回路内で誤りを訂正し，訂正されたデータがデータバス５を介してホスト１に転送される。本実施の形態例におけるメモリコントローラは，いずれの構成であっても良い。
【００２７】
図２は，多値セルメモリの構成例を示す回路図である。この例は，NAND型のフラッシュメモリである。また，簡単の為に，１個のセルに２ビットデータが保持される例で説明する。図２の多値セルメモリでは，複数のセルMCを縦列に接続したセルストリングスがビット線BL0,BL1に接続され，各セルのコントロールゲートにはワード線WL0,WL1が接続される。各セルMCは，例えばフローティングゲートを有し，フローティングゲート内に４つのチャージ状態が記憶される。従って，各セルMCは，２ビットデータを記憶する。
【００２８】
それに伴い，各ビット線BL0,BL1には，２つのページバッファPBがそれぞれ接続され，１個のセルMCにアクセスしたとき，２つのページバッファPBに１ビットずつのデータが読み出され，逆に２つのページバッファPBに入力された２ビットデータに従って，１個のセルMCにチャージ状態が記憶される。
【００２９】
読み出し時において，ワード線を選択することにより全てのページバッファPB内にデータが読み出され，１ページ分のデータが保持される。そして，図示しない選択信号に応じて，データバスのビット数単位で，ページバッファPB内のデータが入出力回路１０から出力される。逆に，書き込み時において，データバスからデータバスのビット数単位でデータが供給され，図示しない選択信号に応じて，ページバッファ内にデータが格納され，その後セルMCがデータに対応したチャージ状態にプログラムされる。
【００３０】
図３は，セルのチャージ状態を示す図である。縦軸がセルの閾値電圧を，横軸がセル数を示す。つまり，セルの複数の閾値電圧分布が示される。図示されるとおり，セルのフローティングゲート内のチャージ状態は，チャージ（電子）が非常に多くて閾値電圧が最も高いデータ（０，１）の状態と，次にチャージが多くて閾値電圧も次に高いデータ（０，０）の状態と，その次にチャージが多くて閾値電圧も次に高いデータ（１，０）の状態と，その次のデータ（１，１）の状態とが存在する。ワード線の電位を閾値分布の間のレベルにすると，状態に応じてセルトランジスタのドレイン電流の違いが発生し，どの分布のチャージ状態かを検出することができる。
【００３１】
図４は，多値セルメモリ装置の構成図である。図４には，１ページ分のセルアレイが示され，セルアレイは，データが記憶されるデータ領域８と，不良セルの置き換え用の冗長セルを有するスペア領域９とを有する。そして，このスペア領域９に書き込みデータに対して生成されたECCコードが書き込まれる。図４に示されるとおり，各セルMCには，４つのチャージ状態が記憶可能であり，それに伴い，２ビットデータが記憶されることになる。
【００３２】
図４の例では，１ページに対して，データ領域８は５１２バイトの容量を有し，スペア領域９は１６バイトの容量を有する。つまり，１ページのデータ容量は５１２バイトであり，それに対応してスペア領域９は１６バイトの容量を有する。１本のワード線ＷＬが選択されるとデータ領域８から５１２ビットのデータが，スペア領域９から１６ビットのデータが，合計で５２８ビット，それぞれ図示しないページバッファに読み出される。そして，８本のワード線が同時に選択されることで，データ領域８から５１２バイトのデータが，スペア領域９から１６バイトのデータがページバッファに読み出されることになる。その後は，アドレスのインクリメントに同期して，８ビットずつのデータ（１バイト）が，８本のI/O端子から出力される。
【００３３】
図５は，多値セルメモリのページ構成を示す図である。フラッシュメモリは，通常ページ単位で読み出し及び書き込みが行われる。従って，セル領域は複数のページを有する。図４に示したとおり，各ページは，５１２バイトのデータ領域８と，１６バイトのスペア領域９とを有する。図４の例は，入出力端子I/Oが８本の場合である。入出力端子I/Oが１６本の場合は，各ページは５１２ワードのデータ領域８と，１６ワードのスペア領域９とで構成されることになる。
【００３４】
フラッシュメモリは，どのページに対して読み出し又は書き込みを行うかをメモリコントローラから指示されるのみである。従って，フラッシュメモリは，指定されたページ内においては，メモリ内でクロックに同期してアドレスをインクリメント（又はデクリメント）して，ページ内のアドレス管理を行う。即ち，フラッシュメモリは，あるページに対してアクセス要求があると，ページ内のアドレスをインクリメントしながら，最初にデータ領域８に対して５１２バイトのデータをアクセスし，その後，スペア領域９に対して１６バイトのデータをアクセスする。
【００３５】
Ｎ（Ｎは４以上）値セルメモリは，１個のセル内にｎビット（２n＝Ｎ）のデータを記憶する。具体的には，図３で示した２nの状態を１個のセルが保持することにより，ｎビットのデータを記憶する。従って，１ページ内に１個の不良セルが発生すると，ｎビットのデータが同時にエラーになる。このような複数ビットのデータエラーを，単ビット不良を訂正可能なエラー訂正コード方式で救済可能にするために，本実施の形態では，１ページのデータを複数のデータ群に分割し，それぞれのデータ群で単ビット不良訂正可能なエラー訂正コードを生成し，メモリデバイス内のスペア領域に記憶する。そして，１個の多値セルに属するｎビットデータが，重複することなく複数のデータ群に分割され，それぞれ分割されたデータ群において高々１ビットエラーまでの修正を可能にする。そうすることで，１個のセルに不良が発生しても，それぞれのデータ群内では高々１ビットエラーにしか過ぎず，簡単な単ビット不良訂正可能なエラー訂正コードでも，多値セルの不良に対して誤り訂正を行うことが可能になる。
【００３６】
前述の通り，１ページのデータは，データバスの複数ビットに対応する入出力端子方向（列方向）と，データバスの複数ビットに対応付けられるアドレスの方向（行方向）とに分離可能である。１ページのデータは，アドレスをインクリメントしてワード単位でアクセスされるので，入出力端子方向（列方向）に分離すると，データバスの複数ビットのデータが，データバス内で複数のデータ群に分離され，アドレス方向（行方向）に分離すると，データバスの複数ビットのデータが，複数アドレス内で複数のデータ群に分離される。
【００３７】
図６は，ページデータを入出力端子（列）単位で複数のECCゾーンに分離する場合のメモリデバイスとメモリコントローラの構成例を示す図である。この例では，メモリデバイス３が，１個のセルに２ビットデータが保持される例であり，同じアドレスＡiに対して４個のセルの８ビットデータにアクセス可能な構成になっている。そして，各セルの２ビットデータは，重複することなく下位の入出力端子群I/O0〜I/O3と上位の入出力端子群I/O4〜I/O7に分離される。つまり，図中示されたセルMCの２ビットデータは，一方が入出力端子I/O0に他方が入出力端子I/O4に割り当てられる。それ以外のセルの２ビットデータも，それぞれI/O1,5，I/O2,6，I/O3,7に割り当てられる。そして，メモリデバイス３内の入出力配線構造４０により，４組の２ビットデータI/O0,1，I/O1,5，I/O2,6，I/O3,7が８ビットの入出力端子I/O0〜I/O7に接続され，その入出力端子が第２のデータバス６に接続される。
【００３８】
上記メモリデバイス３の構成の場合は，データ領域８とスペア領域９の５１２バイト及び１６バイトのデータを，入出力端子（列）方向で少なくとも２つのECCゾーンに分離して，それぞれでECCコードを生成することが必要である。１個のセルMCが不良になって２ビットデータがエラーになっても，２ビットデータがそれぞれ異なるECCゾーンに分離されてECCコードが生成されているので，たとえECCコードが単ビットのみ訂正可能なコードであっても，２つのECCコードにより２ビットデータを訂正することができる。
【００３９】
このメモリデバイス構造に伴い，本実施の形態のメモリコントローラ２では，第１のデータバス５の８ビットが，下位の４ビットDB0〜3と上位の４ビットDB4〜7に分離され，それぞれのデータ群DB0〜3，DB4〜7が，ゾーン０，１のECC回路２０，２２に供給される。ECC回路２０，２２では，供給されるデータ群DB0〜3，DB4〜7に対して，それぞれのECCコードを生成すると共に，供給されたデータ群DB0〜3，DB4〜7を，データ出力回路３０からそのまま第２のデータバス６の８本のバス線に出力し，メモリデバイス３の８個の入出力端子I/O0〜7に供給する。
【００４０】
メモリデバイス３では，入出力配線構造により，第１のデータ群I/O0〜3から１ビットと第２のデータ群I/O4〜7から１ビットとが組み合わされ，４組の２ビットデータI/O0,1，I/O1,5，I/O2,6，I/O3,7が，４個の２ビットセルMCに書き込まれる。
【００４１】
メモリデバイス３のデータ領域８に，５１２バイトのデータが書き込まれると，ECC回路２０，２２は，それぞれのECCコードの生成が終了し，生成された第１及び第２ECCコードが，第２のデータバスの下位ビットと上位ビットを介して，メモリデバイスの入出力端子I/O0〜3，I/O4〜7にそれぞれ供給される。そして，メモリデバイス内では，データと同様にして，スペア領域９のセルに２ビットデータが書き込まれる。
【００４２】
一方，読み出し時は，メモリデバイス３内において，５１２バイトと１６バイトのデータが図示しないページバッファに読み出され，ページバッファに保持されたデータが，アドレスをインクリメントすることで，８ビットずつ入出力端子I/O0〜7から出力される。メモリコントローラ内のECC回路２０，２２は，それぞれ第１及び第２データ群のデータを入力してECCコードを生成し，その後スペア領域９から読み出された第１及び第２のECCコードと比較し，エラー検出とエラー訂正を行う。
【００４３】
読み出された第１及び第２データ群のデータは，第１のデータバス５を経由してホスト１に転送されると共に，エラー訂正データが図示しないエラー通知手段７を経由してホスト１に供給される。
【００４４】
図６の例では，メモリデバイス内の入出力配線構造４０にて，１個の２値セルに属する２ビットデータが，第１及び第２のデータ群に重複しないように分離し，その第１及び第２のデータ群が，下位の入出力端子群I/O0〜3と上位の入出力端子群I/O4〜7とにそれぞれ割り当てられている。従って，メモリコントローラ２では，第１及び第２のECC回路２０，２２が，第１のデータバスにおける下位のデータ群DB0〜3と上位のデータ群DB4〜7を入力して，それぞれのECCコードを生成し，データ出力手段３０が，第１及び第２のデータ群と第１及び第２のECCコードとを，第２のデータバスにおける下位のデータ群と上位のデータ群に出力する。
【００４５】
図７は，ページデータを入出力端子（列）単位で複数のECCゾーンに分離する場合の別のメモリデバイスとメモリコントローラの構成例を示す図である。このメモリデバイスには，図６の入出力配線構造４０がなく，入出力端子が，下位から各セルの２ビットデータに割り当てたままになっている。それ以外のデータ領域８やスペア領域９は図６と同じである。従って，この場合も，入出力端子（列）方向に第１及び第２のデータ群に分離される必要がある。
【００４６】
メモリデバイス３内に入出力配線構造４０がないので，メモリコントローラ２のデータ出力手段３０では，第１のデータバス５における下位の第１のデータ群DB0〜3と上位の第２のデータ群DB4〜7とをインターリーブして，第１及び第２のデータ群から１ビットずつのデータが，交互に配置されるようにデータを第２のデータバスに出力する。つまり，図６の入出力配線構造４０の機能をデータ出力手段３０に持たせている。その結果，各２値セルMCには，第１及び第２のデータ群から１ビットずつのデータ，計２ビットデータが，それぞれ書き込まれる。また，２つのECC回路２０が生成する第１及び第２のエラー訂正コード（ECCコード）も，同様にスペア領域９内の２値セルに書き込まれる。
【００４７】
それ以外のメモリコントローラ２の構成は，図６の例と同じである。従って，第１データバス５の複数のデータが第１，第２のECCゾーンに分離され，それぞれのECCゾーンのデータについてECC回路２０，２２がECCコードを生成する。そして，メモリコントローラ２のデータ出力手段３０が，データDB0,DB4,DB1,DB5,DB2,DB6,DB3,DB7を，メモリデバイス３の入出力端子I/O0〜7に供給する。その結果，４個の２ビットセルには，４組のデータDB0,4，DB1,5，DB2,6，DB3,DB7がそれぞれ書き込まれる。ECCコードについても同じである。更に，読み出し時は，逆の経路でデータが読み出され，メモリコントローラ２では，それぞれのデータ群について生成したECCコードが，スペア領域９から読み出したECCコードと比較され，エラー検出，エラー訂正が行われる。
【００４８】
図８は，ページデータをアドレス（行）単位で複数のECCゾーンに分離する場合のメモリデバイスとメモリコントローラの構成例を示す図である。このメモリデバイスは，図６，７の場合と異なり，８つの入出力端子I/O0〜7には，１個の２ビットセルの２ビットデータが重複せずに出力される。つまり，あるアドレスに対して，８個のセルから１ビットずつのデータが８つの入出力端子I/O0〜7に出力される。従って，１個のセルに属する２ビットデータを複数のECCゾーンに分離するためには，１ページのデータをアドレス（行）単位で分離する必要がある。
【００４９】
図８のメモリデバイス３は，（データ領域８がアドレスA0〜７で８バイトのデータと仮定すると，）下位のアドレスA0,A1,A2,A3が４つのセルにおける１ビット目のデータに対して割り当てられ，上位のアドレスA4,A5,A6,A7が同じ４つのセルにおける２ビット目のデータに割り当てられる。従って，この場合は，１ページのデータを，下位アドレスA0〜3と上位アドレスA4〜8とに分離してそれぞれECCコードを生成することで，単ビットエラー訂正可能なECCコードでも，１個の不良セルに伴う２ビットデータ誤りを訂正することができる。
【００５０】
この場合，アドレスは最下位A0からインクリメントされるので，メモリコントローラ２のECC回路２０は，第１のデータバス５から供給される８ビットのデータを順に入力し，アドレスA0〜4に属する第１のデータ群に対して第１のECCコードを生成し，更に，アドレスA4〜7に属する第２のデータ群に対して第２のECCコードを生成する。そして，アドレスA0〜A7のデータをデータ領域８に書き込んだ後に，第１及び第２のECCコードを順番にスペア領域９に書き込む。
【００５１】
従って，メモリコントローラ２のECC回路２０は，第１及び第２のECCゾーンに対して共通に設けることができる。但し，図示しないECC保持回路が必要になる。また，メモリコントローラ２内のデータ出力回路３０も，第１のデータバス５の８ビットのデータを，そのまま第２のデータバス６に出力し，メモリデバイス３の８ビットの入出力端子I/O0〜7に供給する。
【００５２】
図９は，ページデータをアドレス（行）単位で複数のECCゾーンに分離する場合の別のメモリデバイスとメモリコントローラの構成例を示す図である。この例においても，メモリデバイス３において，８つの入出力端子I/O0〜7には，１個のセルの２ビットデータが重複せずに出力される。つまり，あるアドレスに対して，８個のセルから１ビットずつのデータが８つの入出力端子I/O0〜7に出力される。従って，１個のセルに属する２ビットデータを複数のECCゾーンに分離するためには，１ページのデータをアドレス（行）単位で分離する必要がある。
【００５３】
具体的には，メモリデバイス３は，（データ領域８がアドレスA0〜７で８バイトのデータと仮定すると，）偶数のアドレスA0,A2,A4,A6が４つのセルにおける１ビット目のデータに対して割り当てられ，奇数のアドレスA1,A3,A5,A7が同じ４つのセルにおける２ビット目のデータに割り当てられる。従って，この場合は，１ページのデータは，奇数アドレスと偶数アドレスとに分離してそれぞれECCコードを生成することで，単ビットエラー訂正可能なECCコードでも，１個の不良セルに伴う２ビットデータ誤りを訂正することができる。
【００５４】
このようなメモリデバイスの場合は，メモリコントローラ２は，第１のデータバス５の８ビットデータDB0〜8をそれぞれ順番に第１及び第２のECC回路に供給するデータ入力手段３２と，第１及び第２のECC回路を経由する８ビットデータとECCコードとを，第２のデータバス６に出力するデータ出力手段３０とを有する。また，ECC回路は共通化されずに，第１及び第２のデータ群に対応して設けられる。
【００５５】
図１０は，多値セルメモリへの書き込み動作を説明する図である。書き込み動作は，次の通りである。最初に，ホスト１は，多値セルメモリ３にデータを書き込むため，多値セルメモリ３の書き込み先のアドレス（ページアドレス）と，多値セルメモリ３に書き込むデータを，第１のデータバス５を経由して，メモリコントローラ２に供給する（Ｓ１）。次に，メモリコントローラ２は，ホスト１から供給された，多値セルメモリ３の書き込み先のアドレス（ページアドレス）と，多値セルメモリ３に書き込むデータを，第２のデータバス６を経由して，多値セルメモリ３に供給する。また，そのデータのエラー検出及び訂正を，そのデータの読み出し時に行えるようにするため，ECC回路４が，そのデータにしたがってＥＣＣコードを生成して，第２のデータバス６を経由して，多値セルメモリ３に供給する（Ｓ２）。次に，多値セルメモリ３は，メモリコントローラ２から供給された書き込み先のアドレスに対応するページのデータ領域８に，同じくメモリコントローラ２から供給されたデータを多値セルメモリ３に書き込み，その後，冗長データ領域９に，そのデータを元に生成されたＥＣＣコードを書き込む（Ｓ３）。
【００５６】
上記の書き込みデータとECCデータの多値セルメモリ３への供給は，システムクロックに同期して行われ，クロックに同期して多値セルメモリ３内でインクリメントされるアドレスに対応するページバッファ内に，それらの書き込みデータ及びECCデータが格納される。
【００５７】
図１１は，多値セルメモリからの読み出し動作を説明する図である。読み出し動作は，次の通りである。ホスト１は，多値セルメモリ３からデータを読み出すため，多値セルメモリ３の読み出し元のアドレス（ページアドレス）を，第１のデータバス５を経由して，メモリコントローラ２に供給する（Ｓ１１）。次に，メモリコントローラ２は，ホスト１から供給された，多値セルメモリ３の読み出し元のアドレスを，第２のデータバス６を経由して，多値セルメモリ３に供給する（Ｓ１２）。
【００５８】
次に，多値セルメモリ３は，メモリコントローラ２から供給されたアドレスに対応するページのデータ領域８からデータを，冗長データ領域９からＥＣＣコードを，それぞれ順に読み出し，第２のデータバス６を経由して，メモリコントローラ２に供給する（Ｓ１３）。
【００５９】
メモリコントローラ２は，多値セルメモリ３から供給された読み出しデータとＥＣＣコードを，エラー検出及び訂正のためにＥＣＣ回路４に供給する（Ｓ１４）。また，読み出しデータを，第１のデータバス５を経由して，ホスト１に供給する（Ｓ１５）。
【００６０】
ＥＣＣ回路４は，メモリコントローラ２から供給された読み出しデータとＥＣＣコードを元に，エラー検出及び訂正を行い，その結果を，エラー通知手段７を使って，ホストに通知する（Ｓ１６）。そして，エラーを検出し，かつエラー訂正可能な場合は，訂正すべきデータビットの位置を，メモリコントローラ２に第１のデータバス５を経由して通知する。
【００６１】
或いは，ECC回路４は，内部に１ページ分のデータバッファを有している場合は，１ページ分のデータを一旦データバッファに格納し，そのデータとECCコードから訂正すべきデータビットの位置を検出し，データ訂正をする。そして，その訂正後のデータを第１のデータバス５を経由してホスト１に供給する。この場合は，エラー通知は不要である。
【００６２】
次に，入出力端子（列）単位の分割の例とアドレス（行）単位の分割の例を，具体的なECC方式も含めて詳細に説明する。
【００６３】
［入出力端子（列）単位の分割の例］
図１２は，入出力端子（列）単位で分割した例を示す図である。この例は，図１２の上段に示されるとおり，多値セルメモリの各ページのデータ領域８が，５１２ワードの容量を持ち，それが列0-3，4-7，8-11，12-15の４つのゾーンZ0〜Z3に分割されている。更に，図１２の中段に示されるとおり，各ゾーンの４ｘ512ビットのデータに対して，それぞれビット番号を割り付ける。このビット番号は，２進数表現で行番号と列番号との組み合わせからなる。
【００６４】
本例のECCコードは，１ビットエラーを訂正可能であり，ビット番号の各桁で「０」と「１」を有する１対のデータ群に分けて，それぞれのデータ群に属する全ビットのパリティからなる。即ち，図１２の下段に示したとおり，ECCコードlp00,lp01のペアは，ビット番号のうち行番号を示すビット番号の最下位ビットが「０」になるデータ群のパリティlp00（lp：ラインパリティ）と，最下位ビットが「１」になるデータ群のパリティlp01とを有する。また，次のECCコードlp02,lp03のペアは，行番号を示すビット番号の最下位から２ビット目が「０」になるデータ群のパリティlp02と，「１」になるデータ群のパリティlp03とを有する。同様にして，ECCコードは，行番号を示すビット番号の各桁について１対のパリティからなる。
【００６５】
同様に，ECCコードは，列番号を示す２桁のビット番号についても，「０」になるデータ群のパリティと「１」になるデータ群のパリティとからなる２対のECCコードcp01〜cp03（cp：コラムパリティ）を有する。１つのECCゾーンのデータについて，ビット番号が１１桁からなるので，各桁で１対のパリティからなるECCコードを生成すると，合計で２２ビットのECCコードとなる。
【００６６】
このECCコード方式は，ECCゾーン内の５１２ｘ４ビットのデータを，１１通りの分割方法で２分割し，それぞれの分割されたデータの全ビットのパリティを生成する。従って，ECCコードの生成回路は，供給されるデータの「１」または「０」の数をカウントして，合計で偶数か奇数かによりECCコードを「１」または「０」にする。つまり，ECCコード生成回路は，例えば供給されるデータに応じて反転する２２個のフリップフロップ回路により実現される。２２個のフリップフロップ回路には，ビット番号に応じて供給されるデータが分配される。そして，その構成は，奇数パリティを採用するか偶数パリティを採用するかで異なる。
【００６７】
図１３は，ECCコードをスペア領域への格納を説明する図である。メモリデバイスのスペア領域は，不良セルに置き換えられるセルとECCコードが格納されるセルとを有し，１６ワードの容量を有する。ページ内のデータが列方向に４分割されたことに伴い，スペア領域９も列方向に４つのゾーンZ0〜Z3に分割される。そして，各ゾーンに対応して生成されたECCコードが，スペア領域９の各ゾーン内に格納される。
【００６８】
図１４は，図１２，１３の例に適用されるメモリコントローラ内のECC回路を示す図である。この例は，図６に対応するECC回路である。図１２，１３の例では，各ページが５１２バイトのデータで構成されるのに伴い，第１のデータバス５と第２のデータバス６は１６ビット構成になる。また，１６ビットが４つのゾーンに分割されることに伴い，ECC回路も４つのゾーンに対応した４列構成になる。
【００６９】
図１２で説明したとおり，ホスト１から第１のデータバス５を経由して供給された各バイトデータは，４ビットずつに分割され，対応するECCコード生成回路20A〜26Aにそれぞれ供給される。また同時に，各バイトデータは，データ出力手段３０を介して，第２のデータバス６経由でメモリデバイスに供給される。各ECCコード生成回路20A〜26Aは，供給されるデータをカウントし，前述のパリティコードを生成する。
【００７０】
メモリコントローラ内には，ECC制御回路５０が設けられ，システムクロックCLKに同期した内部クロックCLKを生成し，このクロックCLKに同期して供給されるデータを，メモリデバイス側に転送すると共に，ECCコード生成回路がデータのカウント動作を行う。
【００７１】
そして，５１２バイトのデータが供給された時点で，ECC生成回路20A〜26Aは各ゾーンのECCコードの生成を終了する。従って，データに引き続いて，ECCコードが，データ出力手段３０から第２のデータバス６を経由して，メモリデバイスに供給される。各ゾーン毎に生成したECCコードは，各ゾーンに分割したデータと同様にして第２のデータバス６から出力されるので，図１３で説明したとおり，メモリデバイス内のスペア領域の各ゾーンにそのECCコードが格納される。
【００７２】
読み出し動作時においては，メモリデバイス内のデータ領域から５１２バイトのデータが読み出され，第２のデータバスからメモリコントローラに供給される。データ出力手段３０を逆方向に転送されて，１６ビットの読み出しデータが４つのゾーンに分割され，それぞれ対応するECCコード生成回路20A〜26Aに供給される。それと同時に，読み出しデータは，第１のデータバス５を経由してホスト１に供給される。
【００７３】
５１２バイトのデータの読み出しが終了すると，各ECCコード生成回路20A〜26Aでも対応するECCコードの生成が終了する。もし読み出しデータに各ECCゾーンで高々１ビットのエラーが発生していると，読み出し時に生成されたECCコードは，書き込み時に格納したECCコードと異なる。従って，それを検出して誤りビットを検出するために，引き続き読み出されるECCコードと，新たに生成されたECCコードとの比較が，エラー検出・訂正回路20B〜26Bで行われる。
【００７４】
各エラー検出・訂正回路は，１１対のパリティが一致するか否かを検出するために，２２個の排他的論理和回路を有する。そして，メモリデバイスのスペア領域から読み出されるECCコードと，読み出し時に新たに生成されたECCコードとの比較，つまり１１対のパリティの比較が行われる。本例のパリティ対を利用したECCコード方式では，排他的論理和演算結果により，次の通りエラー検出が行われる。
【００７５】
第１に，ECCコードlp00〜lp17，cp00〜cp03の全てが一致して，排他的論理和結果が全て「０」の場合は，データが正常であり誤り訂正不要となる。第２に，ECCコードlp00〜lp17，cp00〜cp03の全てのペアで一方が「０」で他方が「１」（不一致）の時は，１ビットエラーが発生し，誤り訂正可能なエラーの発生となる。第３に，ECCコードlp00〜lp17，cp00〜cp03のうち，１つだけ「１」（不一致）の時は，データは正常であるが，ECCコードにエラーが発生したことを意味し，データの誤り訂正は不要になる。第４に，上記以外の排他的論理和結果の場合は，訂正不可能なエラーの発生となる。
【００７６】
上記第２の場合は，不一致が発生した１１個のデータ群から，エラーデータを特定することができる。即ち，奇数パリティの場合は，訂正すべきビット番号は，２２個の排他的論理和演算結果のうち，奇数番目のECCコードlp17,lp15,lp13,lp11,lp09,lp07,lp05,lp03,lp01,cp03,cp01のEORデータとなる。また，偶数パリティの場合は，訂正すべきビット番号は，偶数番目のECCコードに対するEORデータになる。
【００７７】
従って，エラー検出・訂正回路は，読み出したECCコードと読み出しデータを元に生成したECCコードとの排他的論理和の結果を，誤りが発生したデータのビット番号として，ホスト１に通知すればよい。
【００７８】
上記のエラー訂正コードによるＮビットエラー訂正は，メモリデバイスの信頼性が高く，高々１個のＮ値セルがエラーになった場合のエラー訂正を行うことを前提にしている。複数個のＮ値セルがエラーになる場合の訂正には対応できない。
【００７９】
［アドレス（行）単位の分割の例］
図１５は，アドレス（行）単位で分割した例を示す図である。この例は，図１５の上段に示されるとおり，多値セルメモリの各ページのデータ領域８が，５１２ワードの容量を持ち，それがアドレス0-127，128-255，256-383，384-511の４つのゾーンZ0〜Z3に分割されている。そして，図１５の下段に示されるとおり，各ゾーンの16ｘ128ビットのデータに対して，それぞれビット番号を割り付ける。このビット番号は，２進数表現で行番号と列番号との組み合わせからなる。
【００８０】
図１５の下段には，ゾーンZ3のデータに対してビット番号が割り付けられている。即ち，行番号は0-127，列番号は0-16であり，各ビット番号は，１１ビットで表現される。
【００８１】
図１６は，上記のゾーン毎に生成されるECCコードの例を示す図である。この例のECCコードも，ビット数は少ないがゾーン内で単ビットエラーを訂正可能な方式であり，図１５でゾーン内のデータに割り付けたビット番号の各桁について，「０」のデータ群と「１」のデータ群に分けて，それぞれのデータ群のパリティビットを利用する。従って，図１６に示されるとおり，１対のECCコードlp00,lp01は，行番号の最下位ビットが「０」のデータ群のパリティビットと，同ビットが「１」のデータ群のパリティビットとで構成される。他のECCコードも同様であり，全部で１１対のパリティビットで構成される。
【００８２】
図１７は，生成したECCコードの格納を説明する図である。Ｎ値セルメモリの各ページに割り当てられている１６ワードのスペア領域９を，アドレス（行）で４分割し，アドレス0-3のスペア領域にゾーンZ０のECCコードを，アドレス4-7のスペア領域にゾーンZ１のECCコードを，アドレス8-11のスペア領域にゾーンZ2のECCコードを，アドレス12-15のスペア領域にゾーンZ3のECCコードをそれぞれ格納する。
【００８３】
図１８は，図１５〜１７の例に適用されるメモリコントローラ内のECC回路を示す図である。この例は，図８に示したメモリコントローラに対応する。入出力端子（列）方向に分割した場合の図１４のECC回路と異なり，図１８では，ECCコード生成回路20Aとエラー検出・訂正回路22AからなるECC回路が１組のみ設けられる。そして，３つのECCゾーンのECCコードを保持するためのECCコード保持手段５４，５６，５８とそのセレクタ回路５２とが設けられる。
【００８４】
上記の例では，ページ内の５１２ワードのデータが，下位アドレス0-127，その上位アドレス128-255，256-382，383-511の４つのゾーンに分離されている。一方，ホスト１から書き込み対象のページアドレスが供給されると，メモリデバイスではシステムクロックに同期してページ内の内部アドレスをインクリメントする。従って，最初は下位アドレス0-127の１６ビットのデータがホスト１から順次第１のデータバス５に出力され，出力制御回路３０から第２のデータバス６を経由してメモリデバイスに転送されると共に，その下位アドレスのデータが，順番にECCコード生成回路20Aに供給される。
【００８５】
ECCコード生成回路20Aは，例えば２２個のフリップフロップ回路で構成され，アドレスADDに応じて，データがフリップフロップ回路に分配される。従って，下位アドレス0-127に属する５１２ワードのデータがホスト１からメモリデバイス３に転送終了した時点で，そのゾーンZ0のECCコードの生成も終了し，セレクタ５２を介してECCコード保持手段５４に一時的に格納される。
【００８６】
次のアドレス128-255のデータも同様にホスト１からメモリデバイス３にワード単位で順次転送されると共に，ECCコード生成回路２０Aに供給され，ゾーンZ1のECCコードが生成される。生成後にECCコードは，ECCコード保持手段５６に一時的に格納される。ゾーンZ2,Z3のデータも同様にしてメモリデバイス３に第２のデータバス６を経由して転送され，それぞれのECCコードが生成される。
【００８７】
そして，全てのデータがメモリデバイス３に転送終了した時点で，ゾーンZ0,Z1,Z2のECCコードが保持手段５４，５６，５８にそれぞれ保持され，ECCコード生成回路20AがゾーンZ3のECCコードの生成を終了する。そこで，データに続いて，４つのゾーンのECCコードが，スペア領域内のアドレス0-3，4-7，8-11，12-15にそれぞれ格納される。
【００８８】
次に，メモリデバイスからの読み出し時は，ホスト１から指定されたページのデータが，システムクロックに同期してインクリメントされる内部アドレスに応じて，順次読み出され，ECCコード生成回路20Aに供給される共に，ホスト１側にも転送される。アドレスがインクリメントされることに伴い，ゾーンZ0,Z1,Z2のECCコードが順次生成され，ECCコード保持手段５４，５６，５８にそれぞれ格納される。そして，ゾーンZ3のECCコードが生成回路20Aで生成された後，引き続いてメモリデバイスのスペア領域から先に生成し格納しておいたECCコードが順次読み出され，エラー検出・訂正回路22Aに供給される。
【００８９】
エラー検出・訂正回路22Aは，１１対のECCコードに対応して２２個の排他的論理和回路を有し，各ゾーンの読み出し時に生成したECCコードとメモリデバイスのスペア領域から読み出したECCコードとが一致するか否かのチェックを行う。
【００９０】
この例のECCコードは，前述の例と同じであり，エラー検出方法と１ビットエラー発生時の訂正ビットのアドレス生成方法も同じである。エラー検出・訂正回路22Aも，アドレスのインクリメントに応じて，ゾーンZ0,Z1,Z2,Z3の順にECCコードの比較を行う。
【００９１】
上記の例では，５１２バイトのデータを４つのECCゾーンに分離して，それぞれのエラー訂正コードを生成し，メモリに格納した。しかし，Ｎ値セルメモリの１個のＮ値セルが２ビットデータを格納する場合は，データは２つのECCゾーンに分離するだけで良い。即ち，データをＮ以上に分離して，それぞれのECCコードを生成すれば良い。
【００９２】
以上，実施の形態例をまとめると以下の付記の通りである。
【００９３】
（付記１）ホストとＮ（Ｎ＝２n，ｎは２以上の整数）値セルメモリとの間に，それぞれ複数ビットのデータバスを介して接続されたメモリコントローラにおいて，
前記ホストに接続される第１のデータバスの第１乃至第Ｍ（Ｍはｎ以上）のデータ群をそれぞれ並列に入力し，当該第１乃至第Ｍのデータ群に対して，単ビット不良を訂正可能な第１乃至第Ｍのエラー訂正コードをそれぞれ生成する第１乃至第ＭのECC回路と，
１つのＮ値セルに属するｎビットデータが重複せずに第１乃至第Ｍのデータ群に分離されるように，当該データ群を前記Ｎ値セルメモリのデータ入出力端子に接続される第２のデータバスに出力するデータ出力手段とを有し，
前記データ出力手段は，更に前記ECC回路が生成したそれぞれのエラー訂正コードを前記第２のデータバスに出力することを特徴とする多値セルメモリ用メモリコントローラ。
【００９４】
（付記２）付記１において，
前記Ｎ値セルメモリのデータ入出力端子が，下位から順に第１，第２．．．第Ｍのデータ群に分割されており，
前記データ出力手段は，第２のデータバスに対して，下位から順に第１，第２．．．第Ｍのデータ群が割り当てられるようにデータを出力することを特徴とする多値セルメモリ用メモリコントローラ。
【００９５】
（付記３）付記２において，
前記第１のデータバスのデータが，下位から順に第１，第２．．．第Ｍのデータ群に分割して第１乃至第ＭのECC回路に入力されることを特徴とする多値セルメモリ用メモリコントローラ。
【００９６】
（付記４）付記１において，
前記Ｎ値セルメモリのデータ入出力端子が，下位から順にＮ値セルに属するデータ群に分割されて，
前記データ出力手段は，第２のデータバスに対して，下位から順に第１，第２．．．第Ｍのデータ群のデータが周期的に繰り返されるようにデータを出力することを特徴とする多値セルメモリ用メモリコントローラ。
【００９７】
（付記５）付記１において，
前記Ｎ値セルメモリからデータを読み出す場合は，前記第１乃至第ＭのECC回路は，前記第２のデータバスの第１乃至第Ｍのデータ群及び第１乃至第Ｍのエラー訂正コードを入力し，当該第１乃至第ＭのECC回路が第１乃至第Ｍのデータ群内の１ビットエラー訂正を行うことを特徴とする多値セルメモリ用メモリコントローラ。
【００９８】
（付記６）付記５において，
前記ホストとＮ値セルメモリとの間において，第１のデータバス，第１乃至第ＭのECC回路，データ出力手段及び第２のデータバスの経路で前記Ｎ値セルメモリへのデータ及びECCコードの書き込みが行われ，前記経路の逆の経路でデータの読み出しが行われることを特徴とする多値セルメモリ用メモリコントローラ。
【００９９】
（付記７）付記１において，
前記多値セルメモリへの書き込み時に，クロックに同期して，前記第１のデータバスからデータが供給され，前記データ出力手段が当該データを前記第２のデータバスに出力すると共に，前記ECC回路が各データ群のエラー訂正コードを生成し，
クロックに同期して，１ページ分のデータを前記第２のデータバスに出力した後，前記データ出力手段が前記エラー訂正コードを前記第２のデータバスに出力することを特徴とする多値セルメモリ用メモリコントローラ。
【０１００】
（付記８）付記１において，
前記多値セルメモリからの読み出し時に，クロックに同期して，前記第２のデータバスからデータが供給され，前記ECC回路が各データ群のエラー訂正コードを生成し，
クロックに同期して，１ページ分のデータを供給された後，前記第２のデータバスからエラー訂正コードが供給され，前記ECC回路が前記生成したエラー訂正コードと当該供給されたエラー訂正コードとを比較して，エラー検出及び訂正を行うことを特徴とする多値セルメモリ用メモリコントローラ。
【０１０１】
（付記９）付記１乃至８のいずれかにおいて，
前記エラー訂正コードは，各データ群に割り付けられたビット番号の各桁が「０」の第１のグループと「１」の第２のグループそれぞれのパリティビットを有することを特徴とする多値セルメモリ用メモリコントローラ。
【０１０２】
（付記１０）付記９において，
前記ECC回路は，エラー検出・訂正時において，全てのビット番号の桁における１対のパリティビットの一方が一致し，他方が不一致の場合に，１ビットエラーの発生を検出することを特徴とする多値セルメモリ用メモリコントローラ。
【０１０３】
（付記１１）付記１０において，
前記ECC回路は，エラー検出・訂正時において，前記メモリから供給される供給エラー訂正コードと前記メモリから供給されるデータについて生成した生成エラー訂正コードとの排他的論理和演算を行い，全てのビット番号の桁における１対のパリティビットの一方が一致し，他方が不一致の場合に，前記奇数ビット番号または偶数ビット番号の排他的論理和演算値を，エラー発生ビット番号とすることを特徴する多値セルメモリ用メモリコントローラ。
【０１０４】
（付記１２）ホストとＮ（Ｎ＝２n，ｎは２以上の整数）値セルメモリとの間に，それぞれ複数ビットのデータバスを介して接続されたメモリコントローラにおいて，
前記ホストに接続される第１のデータバスのデータ群について，アドレス方向に分離された第１乃至第Ｍ（Ｍはｎ以上）のデータ群を順番に入力し，当該第１乃至第Ｍのデータ群に対して，単ビット不良を訂正可能な第１乃至第Ｍのエラー訂正コードをそれぞれ生成する共通のECC回路と，
前記第１乃至第（Ｍ−１）のエラー訂正コードを保持するエラー訂正コード保持手段と，
１つのＮ値セルに属するｎビットデータが重複せずに第１乃至第Ｍのデータ群に分離されるように，当該データを前記Ｎ値セルメモリに接続される第２のデータバスに出力するデータ出力手段とを有し，
前記データ出力手段は，更に前記エラー訂正コード保持手段が保持する第１乃至第（Ｍ−１）のエラー訂正コードと前記ECC回路が生成した第Ｍのエラー訂正コードとを，前記第２のデータバスに出力することを特徴とする多値セルメモリ用メモリコントローラ。
【０１０５】
（付記１３）付記１２において，
前記多値セルメモリへの書き込み時に，クロックに同期して，前記第１のデータバスからデータが供給され，前記データ出力手段が当該データを前記第２のデータバスに出力すると共に，前記ECC回路が各データ群のエラー訂正コードを順次生成し，
クロックに同期して，１ページ分のデータを前記第２のデータバスに出力した後，前記データ出力手段が前記エラー訂正コードを前記第２のデータバスに出力することを特徴とする多値セルメモリ用メモリコントローラ。
【０１０６】
（付記１４）付記１２において，
前記多値セルメモリからの読み出し時に，クロックに同期して，前記第２のデータバスからデータが供給され，前記ECC回路が各データ群のエラー訂正コードを順次生成し，
クロックに同期して，１ページ分のデータを供給された後，前記第２のデータバスからエラー訂正コードが供給され，前記ECC回路が前記生成したエラー訂正コードと当該供給されたエラー訂正コードとを比較して，エラー検出及び訂正を行うことを特徴とする多値セルメモリ用メモリコントローラ。
【０１０７】
（付記１５）付記１２乃至１４のいずれかにおいて，
前記エラー訂正コードは，各データ群に割り付けられたビット番号の各桁が「０」の第１のグループと「１」の第２のグループそれぞれのパリティビットを有することを特徴とする多値セルメモリ用メモリコントローラ。
【０１０８】
（付記１６）ホストとＮ（Ｎ＝２n，ｎは２以上の整数）値セルメモリとの間に，それぞれ複数ビットのデータバスを介して接続されたメモリコントローラにおいて，
前記ホストに接続される第１のデータバスのデータ群について，アドレス方向に分離された第１乃至第Ｍ（Ｍはｎ以上）のデータ群をそれぞれ入力し，当該第１乃至第Ｍのデータ群に対して，単ビット不良を訂正可能な第１乃至第Ｍのエラー訂正コードをそれぞれ生成する第１乃至第ＭのECC回路と，
１つのＮ値セルに属するｎビットデータが重複せずに第１乃至第Ｍのデータ群に分離されるように，当該データを前記Ｎ値セルメモリに接続される第２のデータバスに出力するデータ出力手段とを有し，
前記データ出力手段は，更に前記ECC回路が生成したそれぞれのエラー訂正コードを前記第２のデータバスに出力することを特徴とする多値セルメモリ用メモリコントローラ。
【０１０９】
（付記１７）付記１６において，
前記多値セルメモリへの書き込み時に，クロックに同期して，前記第１のデータバスからデータが供給され，前記データ出力手段が当該データを前記第２のデータバスに出力すると共に，前記ECC回路が各データ群のエラー訂正コードを生成し，
クロックに同期して，１ページ分のデータを前記第２のデータバスに出力した後，前記データ出力手段が前記エラー訂正コードを前記第２のデータバスに出力することを特徴とする多値セルメモリ用メモリコントローラ。
【０１１０】
（付記１８）付記１６において，
前記多値セルメモリからの読み出し時に，クロックに同期して，前記第２のデータバスからデータが供給され，前記ECC回路が各データ群のエラー訂正コードを生成し，
クロックに同期して，１ページ分のデータを供給された後，前記第２のデータバスからエラー訂正コードが供給され，前記ECC回路が前記生成したエラー訂正コードと当該供給されたエラー訂正コードとを比較して，エラー検出及び訂正を行うことを特徴とする多値セルメモリ用メモリコントローラ。
【０１１１】
（付記１９）付記１６乃至１８のいずれかにおいて，
前記エラー訂正コードは，各データ群に割り付けられたビット番号の各桁が「０」の第１のグループと「１」の第２のグループそれぞれのパリティビットを有することを特徴とする多値セルメモリ用メモリコントローラ。
【０１１２】
【発明の効果】
以上，本発明によれば，多値セルメモリのデータのエラー訂正を可能にするECCコードを生成し，そのエラー検出・訂正を行うメモリコントローラを提供することができる。
【０１１３】
また，本発明によれば，多値セルメモリのデータを，多値セルに属するｎビットデータが重複しないように第１乃至第Ｍ（Ｍはｎ以上）のデータ群に分離して，それら第１乃至第Ｍのデータ群について第１乃至第Ｍのエラー訂正コードを生成するので，１つの多値セルに不良が発生してｎビットエラーが発生しても，各データ群のエラー訂正コードにより各１ビットずつ訂正することで，ｎビットエラーを訂正することができる。
【図面の簡単な説明】
【図１】多値セルメモリを使用したメモリシステムの構成図である。
【図２】多値セルメモリの構成例を示す回路図である。
【図３】セルのチャージ状態を示す図である。
【図４】多値セルメモリ装置の構成図である。
【図５】多値セルメモリのページ構成を示す図である。
【図６】ページデータを入出力端子（列）単位で複数のECCゾーンに分離する場合のメモリデバイスとメモリコントローラの構成例を示す図である。
【図７】ページデータを入出力端子（列）単位で複数のECCゾーンに分離する場合の別のメモリデバイスとメモリコントローラの構成例を示す図である。
【図８】ページデータをアドレス（行）単位で複数のECCゾーンに分離する場合のメモリデバイスとメモリコントローラの構成例を示す図である。
【図９】ページデータをアドレス（行）単位で複数のECCゾーンに分離する場合の別のメモリデバイスとメモリコントローラの構成例を示す図である。
【図１０】多値セルメモリへの書き込み動作を説明する図である。
【図１１】多値セルメモリからの読み出し動作を説明する図である。
【図１２】入出力端子（列）単位で分割した例を示す図である。
【図１３】  ECCコードをスペア領域への格納を説明する図である。
【図１４】図１２，１３の例に適用されるメモリコントローラ内のECC回路を示す図である。
【図１５】アドレス（行）単位で分割した例を示す図である。
【図１６】ゾーン毎に生成されるECCコードの例を示す図である。
【図１７】生成したECCコードのスペア領域への格納を説明する図である。
【図１８】図１５〜１７の例に適用されるメモリコントローラ内のECC回路を示す図である。
【符号の説明】
１        ホスト
２        メモリコントローラ
３        多値セルメモリ
４        ECC回路
５        第１のデータバス
６        第２のデータバス
【図１】
0004437519.tif 000002
【図２】
0004437519.tif 000003
【図３】
0004437519.tif 000004
【図４】
0004437519.tif 000005
【図５】
0004437519.tif 000006
【図６】
0004437519.tif 000007
【図７】
0004437519.tif 000008
【図８】
0004437519.tif 000009
【図９】
0004437519.tif 000010
【図１０】
0004437519.tif 000011
【図１１】
0004437519.tif 000012
【図１２】
0004437519.tif 000013
【図１３】
0004437519.tif 000014
【図１４】
0004437519.tif 000015
【図１５】
0004437519.tif 000016
【図１６】
0004437519.tif 000017
【図１７】
0004437519.tif 000018
【図１８】
0004437519.tif 000019