(57)【要約】【課題】回路規模を削減出来るエラー訂正システムを提供すること。【解決手段】ＮビットのデータＤ０〜Ｄ２３を保持可能なデータバッファ２３と、ハミングコードに従った行列式に基づくビットの組み合わせにより出力された前記データＤＩＮＥＣＣ＜２３：０＞を元にして、シンドローム及びパリティを生成する生成部２６と、前記シンドロームを用いて、前記データバッファ２３に保持される前記データのエラー位置を特定して、前記データバッファ２３に対してエラーを訂正させるデコード部２９とを具備し、前記データバッファ２３は、クロックのｋサイクル（ｋは１以上の自然数）毎に、前記データＤ０〜Ｄ２３をビットシフトさせつつ前記ＮビットのうちのｎビットＤＩＮＥＣＣ＜５：０＞を前記生成部２６へ出力する。【選択図】図５
2010009643.tif 000002
【特許請求の範囲】
【請求項１】
Ｎビット（Ｎは２以上の自然数）のデータを保持可能なデータバッファと、
ハミングコードに従った行列式に基づくビットの組み合わせにより前記データバッファから出力された前記データを元にして、該データのシンドローム及びパリティを生成する生成部と、
前記生成部で生成された前記シンドロームを保持可能なシンドローム保持部と、
前記生成部で生成された前記パリティを保持可能なパリティ保持部と、
前記シンドローム保持部に保持される前記シンドロームを用いて、前記データバッファに保持される前記データのエラー位置を特定して、前記データバッファに対してエラーを訂正させるデコード部と
を具備し、前記データバッファは、クロックのｋサイクル（ｋは１以上の自然数）毎に、前記データをビットシフトさせつつ前記Ｎビットのうちのｎビット（ｎは１以上の自然数）を前記生成部へ出力する
ことを特徴とするエラー訂正システム。
【請求項２】
前記生成部は、前記ｋサイクル毎に、前記データバッファから出力される前記ｎビットの前記データを用いて前記シンドロームのいずれかのビットを生成し、且つ生成したビットを前記シンドローム保持部へ出力し、または
前記ｋサイクル毎に、前記データバッファから出力される前記ｎビットの前記データを用いて前記パリティのいずれかのビットを生成し、且つ生成したビットを前記パリティ保持部へ出力し、
前記シンドローム保持部は、前記生成部から前記シンドロームの全ビットが与えられた後に、該シンドロームを前記デコード部へ出力し、
前記パリティ保持部は、前記生成部から前記パリティの全ビットが与えられた後、該パリティを、前記データの書き込み先へ出力する
ことを特徴とする請求項１記載のエラー訂正システム。
【請求項３】
前記データバッファは、前記データをＭビット（Ｍ＜Ｎ）のＬ個（Ｌは２以上の自然数）のグループに分割して保持し、且つ
前記Ｌ個のグループ内において前記ビットシフトさせつつ、前記グループの各々からｍビット（ｍは自然数であり、ｍ×Ｌ＝ｎ）ずつ選ばれる前記データを、前記ｋサイクル毎に前記生成部へ出力し、
前記生成部は、前記Ｌ個のグループの各々からｍビットずつ選ばれた前記データを元にして、前記シンドローム及び前記パリティのいずれかのビットを生成する
ことを特徴とする請求項１または２記載のエラー訂正システム。
【請求項４】
前記データバッファに保持される前記データにおいて、エラーの生じたビット数が偶数であるか奇数であるかを判定する判定回路を更に備え、
前記判定回路は、前記データの全ビットを用いてシンドロームまたはパリティを生成し、
前記判定回路における前記シンドロームまたはパリティを生成するための演算は、前記グループ単位で行われる
ことを特徴とする請求項３記載のエラー訂正システム。
【請求項５】
前記データバッファは、各々がＭ個のレジスタを含むＬ個のレジスタ群を含み、
Ｌ個のレジスタ群はそれぞれＬ個の前記グループのいずれかに対応し、
Ｌ個のレジスタ群の各々におけるＭ個の前記レジスタは、それぞれ各グループに属するＭビットのうちのいずれかのビットを保持し、
各々のレジスタ群において、Ｍ個のうちのいずれかｍ個のレジスタの保持するデータが前記生成部へ出力され、
各々のレジスタ群において、前記レジスタに保持される前記ビットは、前記ｋサイクル毎に、前記レジスタ間で順次転送される
ことを特徴とする請求項３または４記載のエラー訂正システム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、エラー訂正システムに関する。例えば、不揮発性半導体メモリにおけるデータ訂正方法に関する。
【背景技術】
【０００２】
従来、ＥＣＣ（Error Checking and Correcting）機能を有する半導体メモリが知られている。ＥＣＣ機能は、読み出したデータの中にエラーが存在するか否かを検査し、もしエラーが存在すれば、そのエラーを正しく訂正する機能である（例えば、特許文献１参照）。
【０００３】
また従来、不揮発性の半導体メモリとして、ＮＡＮＤ型フラッシュメモリが広く知られている。ＮＡＮＤ型フラッシュメモリでは、ある確率でエラーが発生するため、ＥＣＣ機能を搭載することが重要である。
【０００４】
しかしながら、大容量化が要求されるＮＡＮＤ型フラッシュメモリにおいては、従来のＥＣＣ機能であると、ＥＣＣ機能を実現する回路ブロックが大規模になり、チップサイズが大型化するという問題があった。
【特許文献１】特開２００７−０８０３４３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
この発明は、回路規模を削減出来るエラー訂正システムを提供する。
【課題を解決するための手段】
【０００６】
この発明の一態様に係るエラー訂正システムは、Ｎビット（Ｎは２以上の自然数）のデータを保持可能なデータバッファと、ハミングコードに従った行列式に基づくビットの組み合わせにより前記データバッファから出力された前記データを元にして、該データのシンドローム及びパリティを生成する生成部と、前記生成部で生成された前記シンドロームを保持可能なシンドローム保持部と、前記生成部で生成された前記パリティを保持可能なパリティ保持部と、前記シンドローム保持部に保持される前記シンドロームを用いて、前記データバッファに保持される前記データのエラー位置を特定して、前記データバッファに対してエラーを訂正させるデコード部とを具備し、前記データバッファは、クロックのｋサイクル（ｋは１以上の自然数）毎に、前記データをビットシフトさせつつ前記Ｎビットのうちのｎビット（ｎは１以上の自然数）を前記生成部へ出力する。
【発明の効果】
【０００７】
本発明によれば、回路規模を削減出来るエラー訂正システムを提供出来る。
【発明を実施するための最良の形態】
【０００８】
以下、この発明の実施形態につき図面を参照して説明する。この説明に際し、全図にわたり、共通する部分には共通する参照符号を付す。
【０００９】
［第１の実施形態］  
この発明の第１の実施形態に係るエラー訂正システムについて、図１を用いて説明する。図１は、本実施形態に係るデータ転送方法を実現するメモリシステムのブロック図である。
【００１０】
＜メモリシステムの全体構成＞  
図示するように、本実施形態に係るメモリシステム１は、大まかにはＮＡＮＤ型フラッシュメモリ２、ＲＡＭ部３、及びコントローラ部４を備えている。そしてＮＡＮＤ型フラッシュメモリ２、ＲＡＭ部３、及びコントローラ部４は、同一の半導体基板上に形成され、１つのチップに集積されている。以下、各ブロックの詳細について説明する。
【００１１】
＜ＮＡＮＤ型フラッシュメモリ２＞  
ＮＡＮＤ型フラッシュメモリ２は、メモリシステム１の主記憶部として機能する。図示するようにＮＡＮＤ型フラッシュメモリ２は、メモリセルアレイ１０、ロウデコーダ１１、ページバッファ１２、電圧発生回路１３、シーケンサ１４、及びオシレータ１５、１６を備えている。
【００１２】
メモリセルアレイ１０は、データを保持可能な複数のメモリセルトランジスタを備えている。図２はメモリセルアレイ１０の回路図である。図示するように、メモリセルアレイ１０は大まかには第１領域１７と第２領域１８とを含む。第１領域１７は、ユーザデータ等の正味のデータ（以下、メインデータと呼ぶ）を保持する。他方、第２領域１８は第１領域１７のスペア領域として用いられ、例えばエラー訂正用の情報（パリティ等）を保持する。
【００１３】
第１領域１７及び第２領域１８はそれぞれ、複数のメモリセルユニット１９を備えている。メモリセルユニット１９の各々は、例えば３２個のメモリセルトランジスタＭＴ０〜ＭＴ３１と、選択トランジスタＳＴ１、ＳＴ２とを含んでいる。以下、メモリセルトランジスタＭＴ０〜ＭＴ３１を区別しない場合には、単にメモリセルトランジスタＭＴと呼ぶ。メモリセルトランジスタＭＴは、半導体基板上にゲート絶縁膜を介在して形成された電荷蓄積層（例えば浮遊ゲート）と、電荷蓄積層上にゲート間絶縁膜を介在して形成された制御ゲートとを有する積層ゲート構造を備えている。なお、メモリセルトランジスタＭＴの個数は３２個に限られず、８個や１６個、６４個、１２８個、２５６個等であってもよく、その数は限定されるものではない。また、メモリセルトランジスタＭＴは、窒化膜に電子をトラップさせる方式を用いたＭＯＮＯＳ（Metal Oxide Nitride Oxide Silicon）構造であっても良い。
【００１４】
メモリセルトランジスタＭＴは、隣接するもの同士でソース、ドレインを共有している。そして、選択トランジスタＳＴ１、ＳＴ２間に、その電流経路が直列接続されるようにして配置されている。直列接続されたメモリセルトランジスタＭＴの一端側のドレインは選択トランジスタＳＴ１のソースに接続され、他端側のソースは選択トランジスタＳＴ２のドレインに接続されている。
【００１５】
同一行にあるメモリセルトランジスタＭＴの制御ゲートは、ワード線ＷＬ０〜ＷＬ３１のいずれかに共通接続される。また同一行にある選択トランジスタＳＴ１、ＳＴ２のゲートは、それぞれセレクトゲート線ＳＧＤ、ＳＧＳに共通接続されている。なお説明の簡単化のため、以下ではワード線ＷＬ０〜ＷＬ３１を、単にワード線ＷＬと呼ぶことがある。ワード線ＷＬ及びセレクトゲート線ＳＧＤ、ＳＧＳは、第１領域１７と第２領域１８とで共通に用いられる。
【００１６】
第１領域１７において同一列にある選択トランジスタＳＴ１のドレインは、ビット線ＢＬ０〜ＢＬｎ（ｎは自然数）に共通接続される。また、第２領域１８において同一列にある選択トランジスタＳＴ１のドレインは、ビット線ＢＬ（ｎ＋１）〜ＢＬｍ（ｍは自然数）に共通接続される。ビット線ＢＬ０〜ＢＬｍについても、単にビット線ＢＬと呼ぶことがある。選択トランジスタＳＴ２のソースはソース線ＳＬに共通接続される。なお、選択トランジスタＳＴ１、ＳＴ２は必ずしも両方必要ではなく、メモリセルユニット１９を選択出来るのであればいずれか一方のみが設けられていても良い。
【００１７】
上記構成において、同一のワード線ＷＬに接続された複数のメモリセルトランジスタＭＴには一括してデータが書き込まれ、または読み出され、この単位をページと呼ぶ。更に、同一行にある複数のメモリセルユニット１９は一括してデータが消去され、この単位をメモリブロックと呼ぶ。
【００１８】
各々のメモリセルトランジスタＭＴは、例えば、浮遊ゲートに注入された電子の多寡によるトランジスタの閾値電圧の変化に応じて、１ビットのデータを保持することが可能である。なお、閾値電圧の制御を細分化し、各々のメモリセルトランジスタＭＴに２ビット以上のデータを保持する構成としても良い。
【００１９】
引き続き図１に戻って、ＮＡＮＤ型フラッシュメモリ２の構成について説明を続ける。ロウデコーダ１１は、データのプログラム、読み出し、及び消去動作の際に、ワード線ＷＬ及びセレクトゲート線ＳＧＤ、ＳＧＳを選択する。そして、ワード線ＷＬ及びセレクトゲート線ＳＧＤ、ＳＧＳに対して、必要な電圧を印加する。
【００２０】
ページバッファ１２はページサイズのデータを保持可能とされ、データのプログラム動作時には、ＲＡＭ部３から与えられるデータを一時的に保持し、メモリセルアレイ１０にデータを書き込む。他方、読み出し動作時には、メモリセルアレイ１０から読み出されたデータを一時的に保持し、ＲＡＭ部３へ転送する。
【００２１】
電圧発生回路１３は、外部から与えられる電圧を昇圧または降圧することにより、データのプログラム、読み出し、及び消去に必要な電圧を発生する。そして発生した電圧を、例えばロウデコーダ１１に供給する。電圧発生回路１３で発生された電圧が、ワード線ＷＬに印加される。
【００２２】
シーケンサ１４は、ＮＡＮＤ型フラッシュメモリ２全体の動作を司る。すなわち、コントローラ部４からプログラム命令（Program）、ロード命令（Load）、または消去命令（図示せず）を受けると、これに応答して、データのプログラム、読み出し、及び消去を実行するためのシーケンスを実行する。そして、このシーケンスに従って、電圧発生回路１３やページバッファ１２の動作を制御する。
【００２３】
オシレータ１５は内部クロックＩＣＬＫを生成する。すなわち、クロック生成器として機能する。そしてオシレータ１５は、生成した内部クロックＩＣＬＫをシーケンサ１４に供給する。シーケンサ１４は、この内部クロックＩＣＬＫに同期して動作する。
【００２４】
オシレータ１６は内部クロックＡＣＬＫを生成する。すなわち、クロック生成器として機能する。そしてオシレータ１６は、生成した内部クロックＡＣＬＫをコントローラ部４やＲＡＭ部４へ供給する。内部クロックＡＣＬＫは、コントローラ部４やＲＡＭ部３の動作の基準となるクロックである。
【００２５】
＜ＲＡＭ部３＞  
次に、引き続き図１を参照しつつ、ＲＡＭ部３について説明する。ＲＡＭ部３は、大まかにはＥＣＣ部２０、ＳＲＡＭ（Static Ramdom Access Memory）３０、インターフェース部４０、及びアクセスコントローラ５０を備えている。以下、それぞれについて説明する。
【００２６】
なお、本実施形態に係るメモリシステム１では、ＮＡＮＤ型フラッシュメモリ２が主記憶部として機能し、ＲＡＭ部３のＳＲＡＭ３０がバッファとして機能する。従って、ＮＡＮＤ型フラッシュメモリ２からデータを外部に読み出す際には、まずＮＡＮＤ型フラッシュメモリ２のメモリセルアレイ１０から読み出されたデータが、ページバッファ１２を介してＲＡＭ部３のＳＲＡＭ３０に格納される。その後、ＳＲＡＭ３０内のデータがインターフェース部４０に転送されて、外部に出力される。他方、データをＮＡＮＤ型フラッシュメモリ２に記憶させる際には、まず外部から与えられたデータが、インターフェース部４０を介してＲＡＭ部３内のＳＲＡＭ３０に格納される。その後、ＳＲＡＭ３０内のデータがページバッファ１２へ転送されて、メモリセルアレイ１０に書き込まれる。
【００２７】
以下では、データがメモリセルアレイ１０から読み出されてから、ページバッファ１２を介してＳＲＡＭ３０に転送されるまでの動作を、データの“ロード（load）”と呼ぶ。また、ＳＲＡＭ３０内のデータが、インターフェース部４０内において後述するバーストバッファ４１、４２を介してインターフェース４３に転送されるまでの動作を、データの“リード（read）”と呼ぶ。
【００２８】
更に、ＮＡＮＤ型フラッシュメモリ２に記憶させるべきデータが、インターフェース４３からバーストバッファ４１、４２を介してＳＲＡＭ３０に転送されるまでの動作を、データの“ライト（write）”と呼ぶ。また、ＳＲＡＭ３０内のデータがページバッファ１２に転送されて、ＮＡＮＤ型フラッシュメモリ２のメモリセルアレイ１０に書き込まれるまでの動作を、データの“プログラム（program）”と呼ぶ。
【００２９】
＜＜ＥＣＣ部２０＞＞  
ＥＣＣ部２０は、データについてのエラー検出及びエラー訂正、並びにパリティの生成（以下、これらをまとめてＥＣＣ処理と呼ぶことがある）を行う。すなわち、データのロード時には、ＮＡＮＤ型フラッシュメモリ２から読み出されたデータについてエラーの検出及び訂正を行う。他方、データのプログラム時には、プログラムすべきデータについてパリティの生成を行う。ＥＣＣ部２０は、ＥＣＣバッファ２１及びＥＣＣエンジン２２を備えている。
【００３０】
ＥＣＣバッファ２１は、ＮＡＮＤバスによりＮＡＮＤ型フラッシュメモリ２のページバッファ１２と接続され、ＥＣＣバスによりＳＲＡＭ３０と接続される。そしてデータのロード時には、ページバッファ１２からＮＡＮＤバスを介して転送されるデータを保持すると共に、ＥＣＣ処理済みのデータをＳＲＡＭ３０へＥＣＣバスを介して転送する。他方、データのプログラム時には、ＳＲＡＭ３０からＥＣＣバスを介して転送されるデータを保持すると共に、転送されたデータとパリティとをページバッファ１２へＮＡＮＤバスを介して転送する。
【００３１】
ＥＣＣエンジン２２は、ＥＣＣバッファ２１に保持されるデータを用いてＥＣＣ処理を行う。ＥＣＣエンジンは、例えばハミングコードを用いた１ビット訂正方式を用いる。ＥＣＣエンジン２２は、メインデータを例えばＮビット（Ｎは２以上の自然数であり、本実施形態では２４ビット）単位でＥＣＣ処理する。そして２４ビットのメインデータあたり、例えば８ビットのパリティを使用する。勿論、これらのビット数は一例に過ぎず、ＥＣＣの処理単位及びパリティのビット数は２４ビット及び８ビットに限られない。但し、ＥＣＣの処理単位が２ｋビット（ｋは自然数）であったとすると、そのうちの１ビットを訂正するためには少なくとも（ｋ＋１）ビットのパリティが必要である。
【００３２】
つまりＥＣＣエンジン２２は、データロード時には、２４ビットのメインデータ毎に８ビットのパリティを用いてシンドロームを生成し、これによりエラー検出を行う。そしてエラーが発見された際には、これを訂正する。他方、データプログラム時には、２４ビットのメインデータ毎に８ビットのパリティを生成する。ＥＣＣ部２０の詳細については後述する。
【００３３】
＜＜ＳＲＡＭ３０＞＞  
次に、ＳＲＡＭ３０について説明する。メモリシステム１においてＳＲＡＭ３０は、ＮＡＮＤ型フラッシュメモリ２に対するバッファメモリとして機能する。図示するように、ＳＲＡＭ３０は前述のＤＱバッファ３１、複数（本実施形態では２つ）のデータＲＡＭ、及び１つのブート（boot）ＲＡＭを備えている。
【００３４】
ＤＱバッファ３１は、データＲＡＭまたはブートＲＡＭにデータを書き込む、または読み出す際に、一時的にデータを保持する。ＤＱバッファ３１は前述の通り、ＥＣＣバスにより、ＥＣＣバッファ２１との間でデータ転送可能とされている。またＤＱバッファ３１は、例えば６４ビットのバス幅を有するRAM/Registerバスを用いて、インターフェース部４０との間でデータ転送可能とされている。
【００３５】
ブートＲＡＭは、例えばメモリシステム１を起動するためのブートコード（boot code）を一時的に保持する。ブートＲＡＭの容量は、例えば１Ｋバイトである。またデータＲＡＭは、ブートコード以外のデータ（メインデータ及びパリティ）を一時的に保持し、その容量は例えば２Ｋバイトであり、２つ設けられている。データＲＡＭ及びブートＲＡＭはそれぞれ、メモリセルアレイ３２、センスアンプ３３、及びロウデコーダ３４を備えている。
【００３６】
メモリセルアレイ３２は、データ保持可能な複数のＳＲＡＭセルを備える。ＳＲＡＭセルはそれぞれ、ワード線及びビット線に接続される。メモリセルアレイ３２も、メモリセルアレイ１０と同様に、メインデータを保持する領域と、パリティ等を保持する領域とを備えている。センスアンプ３３は、ＳＲＡＭセルからビット線に読み出したデータをセンス・増幅する。またセンスアンプ３３は、ＤＱバッファ３１内のデータをＳＲＡＭセルに書き込む際の負荷としても機能する。ロウデコーダ３４は、メモリセルアレイ３２におけるワード線を選択する。
【００３７】
＜＜インターフェース部４０＞＞  
次に、引き続き図１を参照しつつインターフェース部４０について説明する。図示するようにインターフェース部４０は、複数（本実施形態では２つ）のバーストバッファ（burst buffer）４１、４２、及びインターフェース４３を備えている。
【００３８】
インターフェース４３は、メモリシステム１外部のホスト機器と接続可能とされ、ホスト機器との間でデータ、制御信号、及びアドレスＡｄｄ等、種々の信号の入出力を司る。制御信号の一例は、メモリシステム１全体をイネーブルにするチップイネーブル信号／ＣＥ、アドレスをラッチさせるためのアドレスバリッド信号／ＡＶＤ、バーストリード（burst read）用のクロックＣＬＫ、書き込み動作をイネーブルにするライトイネーブル信号／ＷＥ、データの外部への出力をイネーブルにするアウトプットイネーブル信号／ＯＥ、などである。
【００３９】
インターフェース４３は、例えば１６ビットのバス幅を有するＤＩＮ／ＤＯＵＴバスによりバーストバッファ４１、４２と接続されている。そしてインターフェース３４は、ホスト機器からのデータのリード要求、ロード要求、ライト要求、及びプログラム要求等に係る制御信号をアクセスコントローラ５０へ転送する。そしてデータリード時には、バーストバッファ４１、４２内のデータをホスト機器へ出力する。またデータライト時には、ホスト機器から与えられるデータをバーストバッファ４１、４２へ転送する。
【００４０】
バーストバッファ４１、４２は、RAM/RegisterバスによりＤＱバッファ３１及びコントローラ部４とデータ転送可能とされ、また前述のＤＩＮ／ＤＯＵＴバスによりインターフェース４３とデータ転送可能とされている。そして、ホスト機器からインターフェース４３を介して与えられるデータ、またはＤＱバッファ３１から与えられるデータを、一時的に保持する。
【００４１】
＜＜アクセスコントローラ５０＞＞  
アクセスコントローラ５０は、インターフェース４３から制御信号及びアドレスを受け取る。そして、ホスト機器の要求を満たす動作を実行するよう、ＳＲＡＭ３０及びコントローラ部４を制御する。
【００４２】
より具体的には、ホスト機器の要求に応じてアクセスコントローラ５０は、ＳＲＡＭ３０とコントローラ４の後述するレジスタ６０とのいずれかをアクティブ状態とする。そして、ＳＲＡＭ３０に対するデータのライトコマンドまたはリードコマンド（Write/Read）、またはレジスタ６０に対するライトコマンドまたはリードコマンド（Write/Read、以下、これをレジスタライトコマンドまたはレジスタリードコマンドと呼ぶ）を発行する。これらの制御により、ＳＲＡＭ３０及びコントローラ部４は動作を開始する。
【００４３】
＜コントローラ部４＞  
次に、引き続き図１を参照しつつ、コントローラ部４について説明する。コントローラ部４は、ＮＡＮＤ型フラッシュメモリ２及びＲＡＭ部３の動作を制御する。すなわち、メモリシステム１全体としての動作を統括する機能を有する。図示するようにコントローラ部４は、レジスタ６０、コマンドユーザインターフェース（command user interface）６１、ステートマシン（state machine）６２、アドレス／コマンド発生回路６３、及びアドレス／タイミング発生回路６４を備えている。
【００４４】
レジスタ６０は、ファンクションの動作状態を設定するためのレジスタである。すなわちレジスタ６０は、アクセスコントローラ５０から与えられるレジスタライトコマンドまたはレジスタリードコマンドに応じて、ファンクションの動作状態を設定する。より具体的には、レジスタ６０には、例えばデータロード時にはロードコマンドが設定され、データプログラム時にはプログラムコマンドが設定される。
【００４５】
コマンドユーザインターフェース６１は、所定のコマンドがレジスタ６０に設定されることで、メモリシステム１に対してファンクション実行コマンドが与えられたことを認識する。そして、内部コマンド信号（Command）を発行し、ステートマシン６２へ出力する。
【００４６】
ステートマシン６２は、コマンドユーザインターフェース６１から与えられる内部コマンド信号に基づいて、メモリシステム１内部におけるシーケンス動作を制御する。ステートマシン６２がサポートするファンクションは、ロード、プログラム、及び消去等、多数あり、これらのファンクションを実行するよう、ＮＡＮＤ型フラッシュメモリ２及びＲＡＭ部３の動作を制御する。なお前述の通りロードは、ＮＡＮＤ型フラッシュメモリ２からデータを読み出してＳＲＡＭ３０へ出力する動作であり、プログラムは、ＲＡＭデータをＮＡＮＤ型フラッシュメモリ２に記憶する動作であり、消去は、ＮＡＮＤ型フラッシュメモリ２内のデータを削除する動作である。
【００４７】
アドレス／コマンド発生回路６３は、ステートマシン６２の制御に基づいてＮＡＮＤ型フラッシュメモリ２の動作を制御する。より具体的には、アドレスやコマンド（Program/Load）等を生成し、ＮＡＮＤ型フラッシュメモリ２へ出力する。アドレス／コマンド発生回路６３は、オシレータ１６の生成する内部クロックＡＣＬＫに同期しつつ、これらのアドレスやコマンドを出力する。
【００４８】
アドレス／タイミング発生回路６４は、ステートマシン６２の制御に基づいてＲＡＭ部３の動作を制御する。より具体的には、ＲＡＭ部３において必要なアドレスやコマンドを発行して、アクセスコントローラ５０及びＥＣＣエンジン２２へ出力する。
【００４９】
＜メモリシステム１の動作＞  
次に、上記構成のメモリシステム１における大まかな動作について簡単に説明する。前述の通り本実施形態に係るメモリシステム１では、ＮＡＮＤ型フラッシュメモリ２とホスト機器との間のデータの授受は、ＳＲＡＭ３０を介して行われる。
【００５０】
すなわち、ホスト機器がメモリシステム１のＮＡＮＤ型フラッシュメモリ２にデータを記憶させる場合には、まずホスト機器から与えられるライトコマンドとＳＲＡＭ３０のアドレスに従って、データがデータＲＡＭまたはブートＲＡＭに一旦、格納される。その後、ホスト機器から与えられるプログラムコマンドとＮＡＮＤ型フラッシュメモリ２のアドレスに従って、ＳＲＡＭ３０に格納されたデータが、ページ単位で一括してＮＡＮＤ型フラッシュメモリ２にプログラムされる。
【００５１】
また、ホスト機器がＮＡＮＤ型フラッシュメモリ２内のデータを読み出す場合には、まずホスト機器から与えられるロードコマンド、ＮＡＮＤ型フラッシュメモリ２のアドレス、及びＳＲＡＭ３０のアドレスに従って、データがＮＡＮＤ型フラッシュメモリ２から読み出され、データＲＡＭまたはブートＲＡＭに一旦、格納される。その後、ホスト機器から与えられるリードコマンドとＳＲＡＭ３０のアドレスに従って、データＲＡＭまたはブートＲＡＭに保持されるデータが、インターフェース部４０を介してホスト機器に読み出される。
【００５２】
以下、ロードの場合の動作手順の一例について、簡単に説明する。  
まず、ホスト機器がインターフェース部４０に対して、ロードすべきＮＡＮＤ型フラッシュメモリ２のアドレス及びＳＲＡＭのアドレスを入力し、またロードコマンドを入力する。
【００５３】
するとメモリシステム１では、アクセスコントローラ５０が上記アドレス及びコマンドをレジスタ６０に設定する。レジスタ６０にコマンドが設定されたことを検知したコマンドユーザインターフェース６１は、内部コマンド信号を発行する。ロードの場合にはロードコマンドが発行される。
【００５４】
ユーザインターフェース６１からロードコマンドを受信することにより、ステートマシン６２が起動する。ステートマシン６２は、各回路ブロックについて必要な初期化を行った後、アドレス／コマンド発生回路６３に対して、ＮＡＮＤ型フラッシュメモリ２に対してセンスコマンドを発行するよう要求する。
【００５５】
するとアドレス／コマンド発生回路６３は、レジスタ６０に設定されたアドレスにつき、データのセンスを行うよう、シーケンサ１４に対してセンスコマンドを発行する。
【００５６】
アドレス／コマンド発生回路６３からセンスコマンドを受けることで、シーケンサ１４が起動する。シーケンサ１４は、ＮＡＮＤ型フラッシュメモリ２において必要な初期化を行った後、指定されたアドレスのセンス動作を行う。すなわち、電圧発生回路１３、ロウデコーダ１１、図示せぬセンスアンプ、及びページバッファ１２を制御し、センスデータをページバッファ１２に格納させる。その後シーケンサ１４は、センス動作が終了したことを、ステートマシン６２に通知する。
【００５７】
次にステートマシン６２は、アドレス／コマンド発生回路６３に対して、ＮＡＮＤ型フラッシュメモリ２に対して転送コマンドを発行するよう命令する。転送コマンドとは、ＮＡＮＤ型フラッシュメモリ２からＲＡＭ部３へデータを転送するための命令である。この命令に応じてアドレス／コマンド発生回路６３は、転送コマンドを発行してシーケンサ１４へ出力する。
【００５８】
転送コマンドを受けたシーケンサ１４は、ページバッファ１２をデータ転送可能なようにセットする。そしてシーケンサ１４の制御に従って、ページバッファ１２内のデータがＮＡＮＤバスを介してＥＣＣバッファ２１へ転送される。
【００５９】
更にステートマシン６２は、ＥＣＣ部２０に対してエラー訂正開始制御信号を発行する。この信号に応答して、ＥＣＣ部２０がＥＣＣ処理を行う。そして、ＥＣＣ処理されたデータが、ＥＣＣ部２０からＥＣＣバスを介してＤＱバッファ３１に転送される。
【００６０】
引き続き、アクセスコントローラ５０の命令に従って、ＤＱバッファ３１内のデータが、ＳＲＡＭ３０のメモリセルアレイ３２に書き込まれる。
【００６１】
以上により、データのロードが完了する。その後、ホスト機器はインターフェース部４０を介してリードコマンドを発行することで、メモリセルアレイ３２に書き込まれたデータを読み出す。
【００６２】
＜ＥＣＣ部２０について＞  
次に、上記ＥＣＣ部２０の詳細について、以下説明する。図３は、ＥＣＣ部２０のブロック図である。
【００６３】
＜ＥＣＣバッファ２１について＞  
図示するように、ＥＣＣバッファ２１はデータバッファ部２３及びパリティ保持部２４を備えている。
【００６４】
データバッファ部２３は、データロード時においては、ページバッファ１２からＮＡＮＤバスを介して与えられるメインデータを、２４ビット（Ｎ＝２４）単位で保持する。そして、例えばアドレス／タイミング発生回路６４により与えられる信号ＥＣＣＧＯに応答して、２４ビットのメインデータをｎビット（ｎは自然数であり、本実施形態では６ビット）ずつ、順次ＥＣＣエンジン２２へ転送する。このｎビットのメインデータを、以下信号ＤＩＮＥＣＣ＜５：０＞と呼ぶ。ｎビットの組み合わせは、ハミングコードに従った行列式に基づいて決定される。更に、ＥＣＣエンジン２２から与えられる２４ビットの信号ＣＲＣＴ＜２３：０＞に応じてメインデータに生じたエラーを訂正し、メインデータをＤＱバッファ３１へ転送する。
【００６５】
またデータプログラム時には、ＤＱバッファ３１からＥＣＣバスを介して与えられるメインデータを２４ビット（Ｎ＝２４）単位で保持する。そして、データロード時と同様に、信号ＥＣＣＧＯに応答して２４ビットのメインデータを６ビット（ｎ＝６）ずつ、順次ＥＣＣエンジン２２へ出力する。
【００６６】
パリティ保持部２４は、データロード時においては、ページバッファ１２からＮＡＮＤバスを介して与えられるパリティを、８ビット単位で保持する（８ビットのパリティを以下、パリティＰＲＴＹと呼ぶ）。そして、例えばアドレス／タイミング発生回路６４により与えられる信号ＰＲＴＹＧＯに応答して、８ビットのパリティを１ビットずつ、順次ＥＣＣエンジン２２へ転送する。この１ビットのパリティを、以下信号ＰＲＴＹＩＮと呼ぶ。
【００６７】
またデータプログラム時には、ＥＣＣエンジン２２から与えられる信号ＰＲＴＹＧＥＴに応答して、同じくＥＣＣエンジン２２から与えられるパリティの各ビット（これを信号ＰＲＴＹＯＵＴと呼ぶ）を受信する。そして、信号ＰＲＴＹＯＵＴを８回受信することでパリティの全ビットが揃い、パリティＰＲＴＹ＜７：０＞が完成すると、これをＤＱバッファ３１へ転送する。
【００６８】
＜ＥＣＣエンジン２２について＞  
図示するようにＥＣＣエンジン２２は、生成部２６、シンドローム保持部２７、ＥＣＣコントローラ２８、及びデコード部２９を備えている。
【００６９】
生成部２６は、シンドローム及びパリティを生成する。すなわちデータロード時においては、ＥＣＣコントローラ２８から与えられる信号ＥＣＣＧＯ、ＰＲＴＹＧＯに応答して、データバッファ部２３から与えられる６ビットの信号ＤＩＮＥＣＣ＜５：０＞と、パリティ保持部２４から与えられる１ビットの信号ＰＲＴＹＩＮとを用いて、８ビットのシンドロームＳＹＮＤＲＭ＜７：０＞のうちの１ビット（これを信号ＳＹＮＤＲＭＯＵＴと呼ぶ）を生成する。そして、信号ＳＹＮＤＧＥＴに応答して、信号ＳＹＮＤＲＭＯＵＴをシンドローム保持部２７に転送する。従って、上記処理を８回繰り返すことで、８ビットのシンドロームＳＹＮＤＲＭ＜７：０＞が完成する。
【００７０】
またデータプログラム時においては、ＥＣＣコントローラ２８から与えられる信号ＥＣＣＧＯに応答して、データバッファ部２３から与えられる６ビットの信号ＤＩＮＥＣＣ＜５：０＞を用いて、８ビットのパリティＰＲＴＹ＜７：０＞のうちの１ビット（＝信号ＰＲＴＹＯＵＴ）を生成する。そして、信号ＰＲＴＹＧＥＴに応答して、信号ＰＲＴＹＯＵＴをパリティ保持部２４に転送する。
【００７１】
シンドローム保持部２７は、生成部２６から与えられる信号ＳＹＮＤＲＭＯＵＴを保持する。そして、信号ＳＹＮＤＲＭＯＵＴを８回受信することで８ビットのシンドロームＳＹＮＤＲＭ＜７：０＞が完成すると、ＥＣＣコントローラ２８から与えられる信号ＣＲＣＴＧＯに応答して、シンドロームＳＹＮＤＲＭ＜７：０＞をデコード部２９へ転送する。
【００７２】
デコード部２９は、シンドロームＳＹＮＤＲＭ＜７：０＞に基づいて、２４ビットの信号ＣＲＣＴ＜２３：０＞を発生する。そしてこれをデータバッファ部２３へ転送する。
【００７３】
ＥＣＣコントローラ２８は、上記信号ＥＣＣＧＯ、ＰＲＴＹＧＯ、ＳＹＮＤＧＥＴ、ＰＲＴＹＧＥＴ、ＣＲＣＴＧＯを発生することで、生成部２６、シンドローム保持部２７、及びパリティ保持部２４の動作を制御する。
【００７４】
＜生成部２６で使用するハミング行列について＞  
図４は、生成部２６で使用するハミング行列を示す表であり、縦軸にメインデータの各ビットＤ０〜Ｄ２３を示し、横軸にシンドロームＳＹＮＤＲＭ＜７：０＞及びパリティＰＲＴＹ＜７：０＞を取ったものである。横軸における０〜７の数字が、シンドロームＳＹＮＤＲＭ＜７：０＞及びパリティＰＲＴＹ＜７：０＞の各ビットＳＹＮＤＲＭ＜０＞〜＜７＞及びパリティの各ビットＰＲＴＹ＜０＞〜＜７＞に対応する。なお、図中の＜Ｅ２＞は判定回路に関するものであり、その詳細は第２の実施形態で説明する。
【００７５】
図中において、“１”が表記されている箇所が、シンドロームＳＹＮＤＲＭ＜７：０＞及びパリティＰＲＴＹ＜７：０＞の各ビットを生成するために使用するメインデータである。
【００７６】
すなわち、シンドロームＳＹＮＤＲＭ＜７＞は、ビットＤ６、Ｄ７、Ｄ１３、Ｄ１５、Ｄ２０、Ｄ２３の排他的論理和演算（ＸＯＲ）によって生成される。またシンドロームＳＹＮＤＲＭ＜６＞は、ビットＤ５、Ｄ６、Ｄ１２、Ｄ１４、Ｄ１９、Ｄ２２のＸＯＲによって生成される。更にシンドロームＳＹＮＤＲＭ＜５＞は、ビットＤ４、Ｄ５、Ｄ１１、Ｄ１３、Ｄ１８、Ｄ２１のＸＯＲによって生成される。以下同様であり、シンドロームＳＹＮＤＲＭ＜０＞は、ビットＤ０、Ｄ７、Ｄ８、Ｄ１４、Ｄ１６、Ｄ２１のＸＯＲによって生成される。生成部２６は、これらのシンドロームＳＹＮＤＲＭ＜０＞〜＜７＞を、それぞれ信号ＳＹＮＤＲＭＯＵＴとしてシンドローム保持部２７に転送する。
【００７７】
またパリティの場合も同様である。すなわち、パリティＰＲＴＹ＜７＞は、ビットＤ６、Ｄ７、Ｄ１３、Ｄ１５、Ｄ２０、Ｄ２３と、パリティＰＲＴＹ＜７＞自身との排他的論理和演算（ＸＯＲ）がゼロとなるように生成される。またパリティＰＲＴＹ＜６＞は、ビットＤ５、Ｄ６、Ｄ１２、Ｄ１４、Ｄ１９、Ｄ２２と、パリティＰＲＴＹ＜６＞自身とのＸＯＲがゼロとなるように生成される。更にパリティＰＲＴＹ＜５＞は、ビットＤ４、Ｄ５、Ｄ１１、Ｄ１３、Ｄ１８、Ｄ２１と、パリティＰＲＴＹ＜５＞自身とのＸＯＲがゼロとなるように生成される。以下同様であり、パリティＰＲＴＹ＜０＞は、ビットＤ０、Ｄ７、Ｄ８、Ｄ１４、Ｄ１６、Ｄ２１と、パリティＰＲＴＹ＜０＞自身とのＸＯＲがゼロとなるように生成される。生成部２６は、これらのパリティＰＲＴＹ＜０＞〜＜７＞を、それぞれ信号ＰＲＴＹＯＵＴとしてパリティ保持部２４に転送する。
【００７８】
更に、図中においてＣＲＣＴ＜＊＞の欄に示した０〜２３の数字は、信号ＣＲＣＴの各ビットに対応する。そして、信号ＣＲＣＴ＜２３：０＞の各ビットＣＲＣＴ＜０＞〜＜２３＞をデコードする際のシンドロームＳＹＮＤＲＭ＜７：０＞の組み合わせは、各行の横方向を見れば良い。ＣＲＣＴ＜０＞〜＜２３＞は、それぞれメインデータＤ０〜Ｄ２３に対応しており、“Ｈ”レベルとなることで、対応するメインデータが訂正される。
【００７９】
すなわちＣＲＣＴ＜０＞は、シンドロームＳＹＮＤＲＭ＜７＞〜＜２＞＝“０”で、且つＳＹＮＤＲＭ＜１＞〜＜０＞＝“１”の場合に“Ｈ”レベルとなり、これによりメインデータＤ０が訂正される。またＣＲＣＴ＜１＞は、シンドロームＳＹＤＲＭ＜７＞〜＜３＞＝ＳＹＮＤＲＭ＜０＞＝“０”で、且つＳＹＮＤＲＭ＜２＞〜＜１＞＝“１”の場合に“Ｈ”レベルとなり、これによりメインデータＤ１が訂正される。以下同様であり、ＣＲＣＴ＜２３＞は、シンドロームＳＹＮＤＲＭ＜６＞〜＜３＞＝ＳＹＮＤＲＭ＜１＞〜＜０＞＝“０”で、且つＳＹＮＤＲＭ＜７＞＝ＳＹＮＤＲＭ＜２＞＝“１”の場合に“Ｈ”レベルとなり、これによりメインデータＤ２３が訂正される。
【００８０】
本実施形態に係るハミング行列は、次の（１）〜（３）を満たす行列である。すなわち図４に示すように、  
（１）メインデータは、各々がＭビット（Ｍは自然数でありＭ＜Ｎで、本実施形態では８ビット）であるＬ個（Ｌは２以上の自然数であり、本実施形態では３個）のグループ（Ｓｅｔ１〜Ｓｅｔ３）に分割して取り扱われる。そして、  
（２）シンドロームＳＹＮＤＲＭ＜７：０＞及びパリティＰＲＴＹ＜７：０＞の各ビットを生成するために使用するメインデータは、各グループからｍビット（ｍは自然数であり、ｍ×Ｌ＝ｎ、本実施形態では２ビット）ずつ選ばれる。更に、  
（３）各グループにおいて使用する２ビットの組み合わせは、シンドロームＳＹＮＤＲＭ＜７：０＞及びパリティＰＲＴＹ＜７：０＞の各ビットを生成する度に、メインデータを１ビットずつシフトさせ、且つ全ビットを生成した時点で、この組み合わせが一巡するように割り付けられる。
【００８１】
例えばメインデータのビットＤ０〜Ｄ７を含むグループＳｅｔ１に着目すると、シンドロームＳＹＮＤＲＭ＜７＞生成の際に使用する組み合わせを基準にすれば、使用する組み合わせは、（Ｄ７、Ｄ６）から、シンドロームＳＹＮＤＲＭ＜７：０＞の下位ビットに向かうにつれて、Ｄ０に向かって１ビットずつシフトされる。つまり、シンドロームＳＹＮＤＲＭ＜６＞生成の際に使用する組み合わせは、（Ｄ７、Ｄ６）をＤ０方向に１ビットシフトさせた（Ｄ６、Ｄ５）である。またシンドロームＳＹＮＤＲＭ＜５＞生成の際に使用する組み合わせは、（Ｄ６、Ｄ５）をＤ０方向に１ビットシフトさせた（Ｄ５、Ｄ４）である。最後に、シンドロームＳＹＮＤＲＭ＜０＞生成の際に使用する組み合わせは、（Ｄ１、Ｄ０）をＤ０方向に１ビットシフトさせた（Ｄ０、Ｄ７）である。そして、（Ｄ０、Ｄ７）を更に１ビットシフトさせれば、シンドロームＳＹＮＤＲＭ＜７＞生成の際に使用する組み合わせである（Ｄ７、Ｄ６）に戻る。他のグループＳｅｔ２、Ｓｅｔ３についても同様である。
【００８２】
＜ＥＣＣバッファ２１の構成の詳細について＞  
図５は、本実施形態に係るＥＣＣバッファ２１のブロック図である。図示するように、ＥＣＣバッファ２１はレジスタ７０−０〜７０−２３及びレジスタ７１−０〜７１−７を備えている。以下、レジスタ７０−０〜７０−２３を区別しない場合には、これをレジスタ７０と呼び、レジスタ７１−０〜７１−７を区別しない場合には、これをレジスタ７１と呼ぶ。そしてレジスタ７０がデータバッファ部２３として機能し、レジスタ７１がパリティ保持部２４として機能する。
【００８３】
データバッファ部２３において、レジスタ７０−０〜７０−７が、メインデータのうちのグループＳｅｔ１保持用として使用され、レジスタ７０−８〜７０−１５がグループＳｅｔ２保持用として使用され、レジスタ７０−１６〜７０−２３がグループＳｅｔ３保持用として使用される。
【００８４】
そして、同一のグループに属するビットを保持する８個のレジスタ７０は、レジスタ７０−ｉ（ｉは自然数、ｉ＝０を含む）からレジスタ７０−（ｉ＋１）の方向に、自身が保持するビットをシフト可能とされている。そして各グループにおいて、最終段のレジスタ７０は初段のレジスタ７０にビットシフト可能とされている。
【００８５】
より具体的には、レジスタ７０−０、７０−８、７０−１６は、自身が保持するビットをレジスタ７０−１、７０−９、７０−１７に転送可能とされ、レジスタ７０−１、７０−９、７０−１７は、レジスタ７０−２、７０−１０、７０−１８に転送可能とされ、以下同様である。そして、最終段のレジスタ７０−７、７０−１５、７０−２３は、自身が保持するビットを初段のレジスタ７０−０、７０−８、７０−１６に転送可能とされる。
【００８６】
パリティ保持部２４においては、レジスタ７１はパリティＰＲＴＹ＜７：０＞の各ビットを保持可能とされている。そして、データバッファ部２３と同様に各レジスタ７１は、レジスタ７１−ｉ（ｉは自然数、ｉ＝０を含む）からレジスタ７１−（ｉ＋１）の方向に、自身が保持するビットをシフト可能とされている。そして最終段のレジスタ７１−７は、初段のレジスタ７１−０にビットシフト可能とされている。
【００８７】
ＥＣＣバッファ２１への入力信号は、まずレジスタ７１−０〜７１−７に入力される。そしてレジスタ７１−０〜７１−７は、自身の保持するビットをレジスタ７０−１６〜７０−２３にそれぞれ転送可能とされ、レジスタ７０−１６〜７０−２３は、自身の保持するビットをレジスタ７０−８〜７０−１５にそれぞれ転送可能とされ、レジスタ７０−８〜７０−１５は、自身の保持するビットをレジスタ７０−０〜７０−７にそれぞれ転送可能とされる。そして、データバッファ２１からの出力信号は、レジスタ７０−０〜７０−７から外部へ出力される。
【００８８】
また、レジスタ７０−６、７０−７、７０−１３、７０−１５、７０−２０、７０−２３は、自身の保持するビットを、それぞれ信号ＤＩＮＥＣＣ＜５：０＞の各ビットとして、生成部２６へ出力可能とされている。更に、レジスタ７１−７は、自身が保持するビットを、信号ＰＲＴＹＩＮとして生成部２６へ出力可能とされている。
【００８９】
なお、パリティ保持部２４にクロックに同期して入力される８ビットのデータは、第２の実施形態で説明する判定回路にも与えられる。判定回路については、第２の実施形態で詳しく説明する。
【００９０】
図６は、上記レジスタ７０−ｉについての、入出力信号を示す図である。図示するようにレジスタ７０−ｉは、レジスタ７０−（ｉ＋８）（レジスタ７０−０〜７０−１５の場合）またはレジスタ７１−ｉ（レジスタ７０−１６〜７０−２３の場合）から転送されるビットを、入力信号ＩＮＡとして内部に取り込む。またレジスタ７０−ｉは、レジスタ７０−（ｉ−１）から転送されるビットを、入力信号ＩＮＢとして内部に取り込む。但し、ｉ＝０、８、１６の場合には、最終段のレジスタ７０−７、７０−１５、７０−２３から転送されるビットを入力信号ＩＮＢとして取り込む。そして、保持するビットを出力信号ＯＵＴとして出力可能とされている。
【００９１】
またレジスタ７０−ｉには、クロックＣＬＫＡ、ＣＬＫＢが入力され、これに同期して動作する。更にレジスタ７０−ｉには、信号ＣＲＣＴ＜ｉ＞、ＣＲＣＴＧＯが入力され、これに基づいてレジスタ７０−ｉはエラー訂正を行う。また、信号ＤＩＮＥＣＣを出力するレジスタ７０−ｉには、信号ＥＣＣＧＯが入力される。
【００９２】
図７は、上記レジスタ７０（特に信号ＤＩＮＥＣＣを出力するレジスタ７０−６、７０−７、７０−１３、７０−１５、７０−２０、７０−２３）の回路図である。図示するようにレジスタ７０は、インバータ７２〜８７、ＮＡＮＤゲート８８、ＡＮＤゲート８９、９０、ＸＯＲゲート９１、及びＮＯＲゲート９２を備えている。
【００９３】
インバータ７２は、信号ＥＣＣＧＯを反転して、その結果を信号ＥＣＣＧＯｎとして出力する。インバータ７３は、信号ＥＣＣＧＯｎを反転して、その結果を信号ＥＣＣＧＯｄとして出力する。
【００９４】
ＮＡＮＤゲート８８は、信号ＣＲＣＴ＜ｉ＞と信号ＣＲＣＴＧＯとのＮＡＮＤ演算を行い、その結果を信号ＣＲＣＴＩＮｎとして出力する。インバータ７８は、信号ＣＲＣＴＩＮｎを反転して、その結果を信号ＣＲＣＴＩＮとして出力する。
【００９５】
インバータ８２は、クロックＣＬＫＡ、ＣＬＫＡｎに同期して、入力信号ＩＮＡを反転させ、その結果をノードｎ０に出力する。なお、クロックＣＬＫＡは、例えばコントローラ部４から与えられるクロックであり、クロックＣＬＫＡｎはクロックＣＬＫＡを反転させた信号である。インバータ８３は、クロックＣＬＫＢ、ＣＬＫＢｎに同期して、入力信号ＩＮＢを反転させ、その結果をノードｎ０に出力する。なお、クロックＣＬＫＢも、例えばコントローラ部４から与えられるクロックであり、クロックＣＬＫＢｎはクロックＣＬＫＢを反転させた信号である。
【００９６】
インバータ７４は、信号ＥＣＣＧＯｎ、ＥＣＣＧＯｄに同期して、ノードｎ０における信号を反転させる。インバータ７５は、インバータ７４の出力を反転させる。インバータ７７は、信号ＥＣＣＧＯｄ、ＥＣＣＧＯｎに同期して、インバータ７５の出力を反転させる。インバータ７７の出力ノードは、インバータ７５の入力ノードに接続される。インバータ７６は、インバータ７５の出力を反転させて、その結果を信号ＤＩＮＥＣＣとして出力する。
【００９７】
インバータ７９は、信号ＣＲＣＴＩＮ、ＣＲＣＴＩＮｎに同期して、ノードｎ０における信号を反転させ、その結果をノードＣ０に出力する。インバータ８０は、ノードＣ０における信号を反転させて、その結果をノードＣ１に出力する。インバータ８１は、ノードＣ１における信号を反転させて、その結果をノードＣ０に出力する。ＸＯＲゲート９１は、信号ＣＲＣＴＩＮと、ノードＣ１における信号とのＸＯＲ演算を行う。
【００９８】
ＡＮＤゲート８９は、ＸＯＲゲート９１の出力と信号ＣＲＣＴＩＮとのＡＮＤ演算を行う。ＡＮＤゲート９０は、ノードｎ０における信号と信号ＣＲＣＴＩＮｎとのＡＮＤ演算を行う。ＮＯＲゲート９２は、ＡＮＤゲート８９、９０の出力のＮＯＲ演算を行い、演算結果をノードｎ２に出力する。
【００９９】
インバータ８４は、信号ＣＬＫＯＲｎ、ＣＬＫＯＲに同期して、ノードｎ２における信号を反転させ、その結果をノードｎ０に出力する。なお、信号ＣＬＫＯＲｎはクロックＣＬＫＡ、ＣＬＫＢのＮＯＲ演算結果であり、信号ＣＬＫＯＲは信号ＣＬＫＯＲｎを反転させた信号である。
【０１００】
インバータ８５は、信号ＣＬＫＯＲｎ、ＣＬＫＯＲに同期して、ノードｎ２における信号を反転させ、その結果をノードｎ３に出力する。インバータ８６は、インバータ８５の出力を反転させる。インバータ８７は、クロックＣＬＫＢ、ＣＬＫＢｎに同期して、インバータ８６の出力を反転させ、その結果をノードｎ３に出力する。そして、インバータ８６の出力が、出力信号ＯＵＴとなる。
【０１０１】
なお、信号ＤＩＮＥＣＣを出力しないレジスタ７０（レジスタ７０−０〜７０−５、７０−８〜７０−１２、７０−１４、７０−１６〜７０−１９、７０−２１、７０−２２）の構成は、図７においてインバータ７２〜７７を排したものである。
【０１０２】
次に、レジスタ７１の構成について図８を用いて説明する。図８はレジスタ７１（特に信号ＰＲＴＹＩＮを出力するレジスタ７１−７）の回路図である。図示するようにレジスタ７１は、インバータ９５〜１０８を備えている。
【０１０３】
インバータ９５は、信号ＰＲＴＹＧＯを反転して、その結果を信号ＰＲＴＹＧＯｎとして出力する。インバータ９６は、信号ＰＲＴＹＧＯｎを反転して、その結果を信号ＰＲＴＹＧＯｄとして出力する。
【０１０４】
インバータ１０１は、クロックＣＬＫＡ、ＣＬＫＡｎに同期して、入力信号ＩＮＡを反転させ、その結果をノードｎ０に出力する。インバータ１０２は、クロックＣＬＫＢ、ＣＬＫＢｎに同期して、入力信号ＩＮＢを反転させ、その結果をノードｎ０に出力する。なお、レジスタ７１においても、入力信号ＩＮＢはレジスタ７１−（ｉ−１）から転送されるデータである。また入力信号ＩＮＡは、ＥＣＣバッファ２１外部から転送されるデータである。インバータ１０３は、信号ＰＲＴＹＧＥＴ、ＰＲＴＹＧＥＴｎに同期して、信号ＰＲＴＹＯＵＴを反転させ、その結果をノードｎ０に出力する。信号ＰＲＴＹＧＥＴｎは信号ＰＲＴＹＧＥＴの反転信号である。
【０１０５】
インバータ９７は、信号ＰＲＴＹＧＯｎ、ＰＲＴＹＧＯｄに同期して、ノードｎ０における信号を反転させる。インバータ９８は、インバータ９７の出力を反転させる。インバータ１００は、信号ＰＲＴＹＧＯｄ、ＰＲＴＹＧＯｎに同期して、インバータ９８の出力を反転させる。インバータ１００の出力ノードは、インバータ９８の入力ノードに接続される。インバータ９９は、インバータ９８の出力を反転させて、その結果を信号ＰＲＴＹＩＮとして出力する。
【０１０６】
インバータ１０４は、ノードｎ０における信号を反転させ、その結果をノードｎ２に出力する。インバータ１０５は、信号ＣＬＫＰＯＲｎ、ＣＬＫＰＯＲに同期して、ノードｎ２における信号を反転させて、その結果をノードｎ０に出力する。信号ＣＬＫＰＯＲｎは、クロックＣＬＫＡ、ＣＬＫＢ、及び信号ＰＲＴＹＧＥＴのＮＯＲ演算結果であり、信号ＣＬＫＰＯＲはＣＬＫＰＯＲｎの反転信号である。
【０１０７】
インバータ１０６は、信号ＣＬＫＰＯＲｎ、ＣＬＫＰＯＲに同期して、ノードｎ２における信号を反転させ、その結果をノードｎ３に出力する。インバータ１０７は、インバータ１０６の出力を反転させる。インバータ１０８は、クロックＣＬＫＰＯＲ、ＣＬＫＰＯＲｎに同期して、インバータ１０７の出力を反転させ、その結果をノードｎ３に出力する。そして、インバータ１０７の出力が、レジスタ７１の出力信号ＯＵＴとなる。
【０１０８】
なお、信号ＰＲＴＹＩＮを出力しないレジスタ７０−０〜７１−６については、インバータ９５〜１００を排しても良い。
【０１０９】
＜ＥＣＣエンジン２２の構成の詳細について＞  
次に、ＥＣＣエンジン２２における生成部２６、シンドローム保持部２７、及びデコード部２９の回路構成について説明する。
【０１１０】
＜＜生成部２６について＞＞  
まず、生成部２６について説明する。図９は、生成部２６の回路図である。図示するように生成部２６は、排他的否定論理和（ＸＮＯＲ）ゲート１１０〜１１４、１１９、及びインバータ１１５〜１１８、１２０〜１２２を備えている。
【０１１１】
ＸＮＯＲゲート１１０は、入力信号ＤＩＮ１、ＤＩＮ２のＸＮＯＲ演算を行う。入力信号ＤＩＮ１、ＤＩＮ２は、データバッファ部２３から与えられる例えば信号ＤＩＮＥＣＣ＜０＞、ＤＩＮＥＣＣ＜１＞である。ＸＮＯＲゲート１１１は、入力信号ＤＩＮ５、ＤＩＮ６のＸＮＯＲ演算を行う。入力信号ＤＩＮ５、ＤＩＮ６は、データバッファ部２３から与えられる例えば信号ＤＩＮＥＣＣ＜４＞、ＤＩＮＥＣＣ＜５＞である。ＸＮＯＲゲート１１２は、ＸＮＯＲゲート１１０の演算結果と入力信号ＤＩＮ３のＸＮＯＲ演算を行う。入力信号ＤＩＮ３は、データバッファ部２３から与えられる例えば信号ＤＩＮＥＣＣ＜２＞である。ＸＮＯＲゲート１１３は、ＸＮＯＲゲート１１１の演算結果と入力信号ＤＩＮ４のＸＮＯＲ演算を行う。入力信号ＤＩＮ４は、データバッファ部２３から与えられる例えば信号ＤＩＮＥＣＣ＜３＞である。ＸＮＯＲゲート１１４は、ＸＮＯＲゲート１１２、１１３の演算結果のＸＮＯＲ演算を行う。
【０１１２】
インバータ１１５は、信号ＰＲＴＹＧＥＴ、ＰＲＴＹＧＥＴｎに同期して動作し、ＸＮＯＲゲート１１４の演算結果を反転させる。インバータ１１６は、インバータ１１５の出力を反転させる。インバータ１１７は、信号ＰＲＴＹＧＥＴ、ＰＲＴＹＧＥＴｎに同期して動作し、インバータ１１６の出力を反転させる。インバータ１１７の出力ノードは、インバータ１１６の入力ノードに接続される。インバータ１１８は、インバータ１１６の出力を反転させる。そしてインバータ１１８の出力が、信号ＰＲＴＹＯＵＴとしてパリティ保持部２４へ転送される。
【０１１３】
ＸＮＯＲゲート１１９は、ＸＮＯＲゲート１１４の出力と信号ＰＲＴＹＩＮとのＸＮＯＲ演算を行う。インバータ１２０は、信号ＰＲＴＹＧＥＴ、ＳＹＮＤＧＥＴｎに同期して動作し、ＸＮＯＲゲート１１９の出力を反転させる。インバータ１２１は、インバータ１２０の出力を反転させる。インバータ１２２は、信号ＰＲＴＹＧＥＴ、ＳＹＮＤＧＥＴｎに同期して動作し、インバータ１２１の出力を反転させる。インバータ１２２の出力ノードは、インバータ１２１の入力ノードに接続される。そしてインバータ１２１の出力が、信号ＳＹＮＤＲＭＯＵＴとしてシンドローム保持部２７へ転送される。
【０１１４】
＜＜シンドローム保持部２７について＞＞  
次に、シンドローム保持部２７について説明する。図１０は、シンドローム保持部２７の回路図である。図示するようにシンドローム保持部２７は、シンドロームＳＹＮＤＲＭ＜７：０＞にそれぞれ対応したレジスタ１３０−０〜１３０−７を備えている。以下、レジスタ１３０−０〜１３０−７を区別しない場合には、レジスタ１３０と呼ぶことにする。
【０１１５】
図１１は、上記レジスタ１３０−ｉについての、入出力信号を示す図である。８個のレジスタ１３０は、レジスタ１３０−ｊ（ｊは自然数、ｊ＝０を含む）からレジスタ１３０−（ｉ＋１）の方向に、自身が保持するビットをシフト可能とされ、シンドロームＳＹＮＤＲＭ＜７＞から順に、レジスタ１３０−０に入力される。レジスタ１３０の各々は、信号ＳＹＮＤＧＥＴに同期して、保持するビットを転送する。そして、全てのレジスタ１３０にビットが格納されると、すなわちレジスタ１３０−０〜１３０−７にそれぞれシンドロームＳＹＮＤＲＭ＜０＞〜＜７＞が格納されると、レジスタ１３０−０〜１３０−７は信号ＣＲＣＴＧＯに同期して、自身が保持するシンドロームＳＹＮＤＲＭ＜０＞〜＜７＞をデコード部２９へ出力する。
【０１１６】
次に、レジスタ１３０の構成について図１２を用いて説明する。図１２はレジスタ１３０の回路図である。図示するようにレジスタ１３０は、インバータ１４０〜１４８を備えている。
【０１１７】
インバータ１４０は、信号ＣＲＣＴＧＯを反転して、その結果を信号ＣＲＣＴＧＯｎとして出力する。インバータ１４１は、信号ＣＲＣＴＧＯｎを反転して、その結果を信号ＣＲＣＴＧＯｄとして出力する。
【０１１８】
インバータ１４３は、信号ＳＹＮＤＧＥＴ、ＳＹＮＤＧＥＴｎに同期して入力信号ＩＮを反転させ、その結果をノードｎ１に出力する。信号ＳＹＮＤＧＥＴｎは、信号ＳＹＮＤＧＥＴの反転信号である。また入力信号ＩＮは、レジスタ１３０−１〜１３０−７の場合には前段のレジスタ１３０の出力信号ＯＵＴであり、レジスタ１３０−０の場合には生成部２６から転送される信号である。
【０１１９】
インバータ１４２は、信号ＣＲＣＴＧＯｎ、ＣＲＣＴＧＯｄに同期して、ノードｎ１における信号を反転させる。インバータ１４２の出力が、シンドロームＳＹＮＤＲＭ＜ｊ＞としてデコード部２９へ転送される。
【０１２０】
インバータ１４４は、ノードｎ１における信号を反転させて、その結果をノードｎ２へ出力する。インバータ１４８は、信号ＳＹＮＤＧＥＴｎ、ＳＹＮＤＧＥＴに同期して、インバータ１４４の出力を反転させ、その結果をノードｎ１に出力する。信号ＳＹＮＤＧＥＴｎは、信号ＳＹＮＤＧＥＴの反転信号である。
【０１２１】
インバータ１４５は、信号ＳＹＮＤＧＥＴｎ、ＳＹＮＤＧＥＴに同期して、ノードｎ２における信号を反転させ、その結果をノードｎ３に出力する。インバータ１４６は、ノードｎ３における信号を反転させる。インバータ１４７は、信号ＳＹＮＤＧＥＴ、ＳＹＮＤＧＥＴｎに同期して、インバータ１４６の出力を反転させ、その結果をノードｎ３に出力する。そしてインバータ１４６の出力が、レジスタ１３０の出力信号ＯＵＴとして、次段のレジスタ１３０へ転送される。なお、最終段のレジスタ１３０−７では、レジスタ１４４〜１４８を排しても良い。
【０１２２】
＜＜デコード部２９について＞＞  
次に、デコード部２９について説明する。図１３は、デコード部２９のうちのある信号ＣＲＣＴ＜ｉ＞を生成する回路図である。図示するようにデコード部２９は、ＮＡＮＤゲート１５０及びＮＯＲゲート１５１〜１５３を備えている。
【０１２３】
ＮＡＮＤゲート１５０は、入力信号ＤＥＣＩＮ０、ＤＥＣＩＮ１のＮＡＮＤ演算を行う。ＮＯＲゲート１５１は、入力信号ＤＥＣＩＮ２〜ＤＥＣＩＮ４のＮＯＲ演算を行う。ＮＯＲゲート１５２は、入力信号ＤＥＣＩＮ５〜ＤＥＣＩＮ７のＮＯＲ演算を行う。ＮＯＲゲート１５３は、ＮＡＮＤゲート１５０における演算結果、及びＮＯＲゲート１５１、１５２における演算結果のＮＯＲ演算を行う。そして、ＮＯＲゲート１５３が、信号ＣＲＣＴ＜＊＞となる。
【０１２４】
入力信号ＤＥＣＩＮ０〜ＤＥＣＩＮ７は、生成する信号ＣＲＣＴ＜＊＞によって異なる。すなわち図４において、各信号ＣＲＣＴ＜＊＞に対応するシンドロームＳＹＮＤＲＭ＜７：０＞のうち、ハミングコードに“１”が割り当てられた２ビットが、入力信号ＤＥＣＩＮ０、ＤＥＣＩＮ１となり、その他のビットが入力信号ＤＥＣＩＮ２〜ＤＥＣＩＮ７となる。
【０１２５】
例えば、ＣＲＣＴ＜０＞を生成する場合には、シンドロームＳＹＮＤＲＭ＜０＞、＜１＞が入力信号ＤＥＣＩＮ０、ＤＥＣＩＮ１となり、シンドロームＳＹＮＤＲＭ＜２＞〜＜７＞が入力信号ＤＥＣＩＮ２〜ＤＥＣＩＮ７となる。そして、ＣＲＣＴ＜０＞が“１”であれば、メインデータのビットＤ０が訂正される。
【０１２６】
またＣＲＣＴ＜８＞を生成する場合には、シンドロームＳＹＮＤＲＭ＜０＞、＜２＞が入力信号ＤＥＣＩＮ０、ＤＥＣＩＮ１となり、シンドロームＳＹＮＤＲＭ＜１＞、＜３＞〜＜７＞が入力信号ＤＥＣＩＮ２〜ＤＥＣＩＮ７となる。そして、ＣＲＣＴ＜８＞が“１”であれば、メインデータのビットＤ８が訂正される。  
以下、同様である。
【０１２７】
＜ＥＣＣ部２０の動作＞  
次に、上記構成のＥＣＣ部２０の動作について、以下説明する。  
＜データロード時の動作＞  
まずデータロード時の動作について、図１４を用いて説明する。図１４は、例えばオシレータ１６から与えられるメインクロックＭＣＬＫ（＝ＡＣＬＫ）、クロックＣＬＫＡ、ＣＬＫＢ、信号ＥＣＣＧＯ、ＰＲＴＹＧＯ、ＤＩＮＥＣＣ＜５：０＞、ＰＲＴＹＩＮ、ＳＹＮＤＧＥＴ、ＳＹＮＤＲＭＯＵＴ、ＣＲＣＴＧＯ、ＳＹＮＤＲＭ＜７：０＞、及びＣＲＣＴ＜２３：０＞のタイミングチャートである。
【０１２８】
（ステップＳ１）  
まず始めに、ＮＡＮＤ型フラッシュメモリ２のメモリセルアレイ１０から読み出されたデータが、ページバッファ１２からＥＣＣバッファ２１へ転送される。以下では、２４ビットのメインデータと８ビットのパリティを転送する例について説明する。
【０１２９】
まず時刻ｔ１〜ｔ２の期間に、ページバッファ１２はメインデータのビットＤ０〜Ｄ７を、ＥＣＣバッファ２１へ転送する。図１５はＥＣＣバッファ２１のブロック図であり、時刻ｔ１〜ｔ２の期間の様子を示している。ビットＤ０〜Ｄ７はそれぞれ、まずパリティ保持部２４のレジスタ７１−０〜７１−７に転送される。
【０１３０】
次に時刻ｔ２〜ｔ３の期間に、ページバッファ１２はメインデータのビットＤ８〜Ｄ１５を、ＥＣＣバッファ２１へ転送する。図１６はＥＣＣバッファ２１のブロック図であり、時刻ｔ２〜ｔ３の期間の様子を示している。ビットＤ８〜Ｄ１５はそれぞれ、パリティ保持部２４のレジスタ７１−０〜７１−７に転送される。またステップＳ１の期間、クロックＭＣＬＫに同期するクロックＣＬＫＡが生成され、且つクロックＣＬＫＢは生成されない。従って、レジスタ７０、７１は入力信号ＩＮＡをビットシフトする（図７、図８参照）。そのため、それまでレジスタ７１−０〜７１−７に保持されていたビットＤ０〜Ｄ７は、レジスタ７０−１６〜７０−２３に転送される。
【０１３１】
時刻ｔ３〜ｔ４の期間には、ページバッファはメインデータのビットＤ１６〜Ｄ２３をパリティ保持部２４に転送し、また時刻ｔ４〜ｔ５の期間には、パリティＰＲＴＹ＜０＞〜＜７＞をパリティ保持部２４に転送する。時刻ｔ５の時点におけるＥＣＣバッファ２１の様子を図１７に示す。図示するように、入力信号ＩＮＡがレジスタ間で順次転送されることで、４クロックサイクルでメインデータの全ビットＤ０〜Ｄ２３及びパリティＰＲＴＹ＜０＞〜＜７＞の転送が完了する。すなわち、レジスタ７０−０〜７０−２３にはそれぞれ、メインデータのビットＤ０〜Ｄ２３が格納され、レジスタ７１−０〜７１−７にはそれぞれパリティＰＲＴＹ＜０＞〜＜７＞が格納される。なお図１７では紙面の都合上、パリティＰＲＴＹ＜０＞〜＜７＞をそれぞれ“Ｐ０”〜“Ｐ７”と表記している。
【０１３２】
（ステップＳ２）  
次に、ＥＣＣエンジン２２においてシンドロームＳＹＮＤＲＭ＜７：０＞の生成が開始される。ステップＳ２が開始されるにあたって、クロックＣＬＫＡの生成が停止され、メインクロックＭＣＬＫに同期して信号ＥＣＣＧＯ及び信号ＰＲＴＹＧＯと、クロックＣＬＫＢ及び信号ＳＹＮＤＧＥＴとが、交互に生成される。
【０１３３】
まず時刻ｔ５〜ｔ６の期間に、信号ＥＣＣＧＯ、ＰＲＴＹＧＯが“Ｈ”レベルとされることで、ＥＣＣバッファ２１から信号ＤＩＮＥＣＣ＜５：０＞、ＰＲＴＹＩＮが、生成部２６へ転送される。この様子を図１７に示す。図示するように、ＤＩＮＥＣＣ＜５：０＞として、ビットＤ６、Ｄ７、Ｄ１３、Ｄ１５、Ｄ２０、Ｄ２３が転送され、またＰＲＴＹＩＮとしてパリティＰＲＴＹ＜７＞が転送される。そして生成部２６は、これらの信号を用いてシンドロームＳＹＮＤＲＭ＜７＞に相当するデータを生成する。
【０１３４】
その後、時刻ｔ６において信号ＳＹＮＤＧＥＴが“Ｈ”レベルとされることで、シンドロームＳＹＮＤＲＭ＜７＞が信号ＳＹＮＤＲＭＯＵＴとしてシンドローム保持部２７に転送される。シンドロームＳＹＮＤＲＭ＜７＞は、シンドローム保持部２７におけるレジスタ１３０−０にまず格納される。
【０１３５】
またＥＣＣバッファでは、クロックＣＬＫＢに同期して入力信号ＩＮＢを転送する。この様子を図１８に示す。図示するように、各グループ内においてメインデータとパリティとがビットシフトされる。この時点において、レジスタ７０−６、７０−７、７０−１３、７０−１５、７０−２０、７０−２３、７１−７にはそれぞれ、ビットＤ５、Ｄ６、Ｄ１２、Ｄ１４、Ｄ１９、Ｄ２２、ＰＲＴＹ＜６＞が格納される。
【０１３６】
従って、時刻ｔ７〜ｔ９において、これらのデータが信号ＤＩＮＥＣＣ＜５：０＞及びＰＲＴＹＩＮとして生成部２６に転送される。そして生成部２６は、これらの信号を用いてシンドロームＳＹＮＤＲＭ＜６＞に相当するデータを生成する。
【０１３７】
その後、時刻ｔ８において信号ＳＹＮＤＧＥＴが“Ｈ”レベルとされることで、シンドロームＳＹＮＤＲＭ＜６＞が信号ＳＹＮＤＲＭＯＵＴとしてシンドローム保持部２７に転送される。シンドローム保持部２７内においても、信号ＳＹＮＤＲＭＯＵＴに同期して、レジスタ１３０間のビットシフトが行われる。従って、それまでレジスタ１３０−０に保持されていたシンドロームＳＹＮＤＲＭ＜７＞はレジスタ１３０−１に転送され、シンドロームＳＹＮＤＲＭ＜６＞がレジスタ１３０−０に格納される。
【０１３８】
引き続きＥＣＣバッファ２１では、各グループ内においてメインデータとパリティとがビットシフトされる。この様子を図１９に示す。この時点において、レジスタ７０−６、７０−７、７０−１３、７０−１５、７０−２０、７０−２３、７１−７にはそれぞれ、ビットＤ４、Ｄ５、Ｄ１１、Ｄ１３、Ｄ１８、Ｄ２１、ＰＲＴＹ＜５＞が格納される。
【０１３９】
従って、時刻ｔ９〜ｔ１０において、これらのデータが信号ＤＩＮＥＣＣ＜５：０＞及びＰＲＴＹＩＮとして生成部２６に転送される。そして生成部２６は、これらの信号を用いてシンドロームＳＹＮＤＲＭ＜５＞を生成する。その後、時刻ｔ１０において、シンドロームＳＹＮＤＲＭ＜５＞がシンドローム保持部２７に転送される。
【０１４０】
以下、同様の処理をトータルで８サイクル繰り返す。この結果の様子を図２０に示す。図示するようにレジスタ７０−６、７０−７、７０−１３、７０−１５、７０−２０、７０−２３、７１−７にはそれぞれ、Ｄ０、Ｄ７、Ｄ１４、Ｄ８、Ｄ２１、Ｄ１６が格納される。そして生成部２６は、これらを用いてシンドロームＳＹＮＤＲＭ＜０＞を生成する。これにより、時刻ｔ２０〜ｔ２１において、シンドローム保持部のレジスタ１３０−０〜１３０−７にはそれぞれ、シンドロームＳＹＮＤＲＭ＜０＞〜＜７＞が格納される。
【０１４１】
（ステップＳ３）  
次にステップＳ３として、２４ビットのメインデータにおいて、エラーの位置のデコードと、エラーが存在する場合のエラー訂正とが行われる。
【０１４２】
すなわち時刻ｔ２１においてＣＲＣＴＧＯが“Ｈ”レベルとされることで、デコード部２９ではシンドロームＳＹＮＤＲＭ＜７：０＞をデコードして信号ＣＲＣＴ＜２３：０＞を生成し、これをメインデータ保持部２３へ転送する。それを受けてメインデータ保持部２３においてデータ訂正がなされる。
【０１４３】
（ステップＳ４）  
最後に、時刻ｔ２３において、エラー訂正後のメインデータ及びパリティが、ＥＣＣバッファ２１からＤＱバッファ３１へ転送され、ＳＲＡＭ３０のメモリセルアレイ３２に書き込まれる。
【０１４４】
＜データプログラム時の動作＞  
図２１は、データプログラム時におけるメインクロックＭＣＬＫ、クロックＣＬＫＡ、ＣＬＫＢ、信号ＥＣＣＧＯ、ＤＩＮＥＣＣ＜５：０＞、ＰＲＴＹＦＥＴ、及びＰＲＴＹＯＵＴのタイミングチャートである。
【０１４５】
データプログラム時の動作も、データロード時とほぼ同様である。データロード時と異なる点は、ＥＣＣバッファ２１へのメインデータの転送元がＤＱバッファ３１であり、ＥＣＣバッファ２１からの転送先がページバッファ１２であること、生成部２６ではパリティを生成すること、パリティ保持部２４から生成部２６への信号転送が不要であること、及び生成部２６からシンドローム保持部２７への信号転送が不要であること、である。
【０１４６】
図示するように、時刻ｔ１〜ｔ５の期間では、データロード時と同様に４クロックサイクルでメインデータがメインデータ保持部２３に転送される。そして時刻ｔ５〜ｔ２１の期間で、生成部２６においてパリティの生成が行われる。その後、時刻ｔ２１でメインデータと生成したパリティとが、ページバッファ１２へ転送される。
【０１４７】
＜効果＞  
以上のように、この発明の第１の実施形態に係るエラー訂正システムであると、エラー訂正対象となるメインデータを、複数のグループに分割している。そして、各グループ内において、シンドローム/パリティデータ生成用に２ビットを用いている。この２ビットの組み合わせは、シンドローム／パリティ毎にメインデータを１ビットずつシフトさせた組み合わせであり、且つ、シンドローム／パリティの全ビット分をシフトさせると、その組み合わせが一巡するような組み合わせとしている。
【０１４８】
これにより、ＥＣＣバッファ２１にシフトレジスタを用いれば、クロックに同期して順次、シンドローム／パリティの各ビットを作成するために必要なメインデータを出力することが出来る。そして、シンドローム／パリティを生成する回路（生成部２６）の数は１つで良く、１つの回路がクロックに同期して順次、シンドローム／パリティの各ビットを生成する。
【０１４９】
そのため、メインデータのビット数が大きくなった場合であっても、ＥＣＣ部３０の回路規模を削減し、メモリシステムの回路面積の増大を抑制出来る。
【０１５０】
また、ＥＣＣバッファ２１にシフトレジスタを用いることで、メインデータを各グループ間で順次転送することが出来る。そして、初段のレジスタをパリティ保持用とすることで、ページバッファからクロックに同期して順次、メインデータとパリティとをＥＣＣバッファ２１に格納出来る。例えば本実施形態の場合には、メインデータのグループは３グループである。よって、メインデータ用の３段のシフトレジスタと、パリティ用の１段のシフトレジスタとを含む４段のシフトレジスタを使用することで、８ビットデータバスにより４クロックサイクルで、必要なデータをＥＣＣバッファ２１に格納出来る。これにより、ＥＣＣバッファ２１の構成及びデータ転送制御を簡便にすることが出来る。
【０１５１】
［第２の実施形態］  
次に、この発明の第２の実施形態に係るエラー訂正システムについて説明する。本実施形態は、上記第１の実施形態において、ＥＣＣエンジン２２がエラー数の偶奇を判定する回路を更に備えるものである。以下では第１の実施形態と異なる点についてのみ説明する。
【０１５２】
図２２は、本実施形態に係るＥＣＣエンジン２２のブロック図である。図示するように、本実施形態に係るＥＣＣエンジン２２は、上記第１の実施形態で説明した図３の構成において、判定部１６０を更に備えている。
【０１５３】
判定部１６０は、エラー数の偶奇判定用のシンドローム及びパリティを生成する。以下、これをシンドロームＳＹＮＤＲＭ＜Ｅ２＞及びパリティＰＲＴＹ＜Ｅ２＞と呼ぶ。これらは、メインデータに発生したエラー数が偶数個であるか、または奇数個であるかを示す情報である。判定部１６０は、２４ビットのメインデータの全ビットを足し合わせた結果に対するシンドロームＳＹＮＤＲＭ＜Ｅ２＞及びパリティＰＲＴＹ＜Ｅ２＞を、前述のシンドロームＳＹＮＤＲＭ＜７：０＞及びＰＲＴＹ＜７：０＞と別個に生成する。これを図４の表における“Ｅ２”の列に示してある。
【０１５４】
図示するように、＜Ｅ２＞に関しては、全ビットＤ０〜Ｄ２３に“１”が割り付けられる。すなわち、シンドロームＳＹＮＤＲＭ＜Ｅ２＞を生成する際には、ビットＤ０〜Ｄ２３の全てのＸＯＲ演算を行う。そして、例えばデータロード時において、メインデータに生じたエラー数が奇数であれば、シンドロームＳＹＮＤＲＭ＜Ｅ２＞は“１”となり、偶数であればシンドロームＳＹＮＤＲＭ＜Ｅ２＞は“０”となる。またこのような結果が得られるよう、データプログラム時にはパリティＰＲＴＹ＜Ｅ２＞が生成される。
【０１５５】
そして、シンドロームＳＹＮＤＲＭ＜Ｅ２＞はシンドローム保持部２７に転送され、またパリティＰＲＴＹ＜Ｅ２＞はパリティ保持部２４に転送される。つまり、判定回路１６０が生成部２６と異なる点は、メインデータの全ビットＤ０〜Ｄ２３の全てを用いてシンドローム及びパリティを生成する点にある。
【０１５６】
図２３は判定回路１６０の回路図である。図示するように判定回路１６０は、ＸＮＯＲゲート１６１〜１６８、１７４、レジスタ１６９、及びインバータ１７０〜１７３、１７５、１７６を備えている。
【０１５７】
ＸＮＯＲゲート１６１は、入力信号ＤＩＮａ、ＤＩＮｂのＸＮＯＲ演算を行う。ＸＮＯＲゲート１６２は、入力信号ＤＩＮｇ、ＤＩＮｈのＸＮＯＲ演算を行う。ＸＮＯＲゲート１６３は、ＸＮＯＲゲート１６１の演算結果と入力信号ＤＩＮｃとのＸＮＯＲ演算を行う。ＸＮＯＲゲート１６４は、ＸＮＯＲゲート１６２の演算結果と入力信号ＤＩＮｆとのＸＮＯＲ演算を行う。ＸＮＯＲゲート１６５は、ＸＮＯＲゲート１６３の演算結果と入力信号ＤＩＮｄとのＸＮＯＲ演算を行う。ＸＮＯＲゲート１６６は、ＸＮＯＲゲート１６４の演算結果と入力信号ＤＩＮｅとのＸＮＯＲ演算を行う。ＸＮＯＲゲート１６７は、ＸＮＯＲゲート１６５、１６６の演算結果のＸＮＯＲ演算を行う。
【０１５８】
ＸＮＯＲゲート１６８は、ＸＮＯＲゲート１６７の演算結果と、レジスタ１６９から出力される信号ＸＯＲＬＡＴとのＸＮＯＲ演算を行い、その結果を信号ＸＯＲＳＵＭとして出力する。レジスタ１６９は、信号ＸＯＲＳＵＭを保持し、それを信号ＸＯＲＬＡＴとして、ＸＮＯＲゲート１６８へ出力する。レジスタ１６９の初期値は“０”である。
【０１５９】
ＸＮＯＲゲート１７４はデータロード時において、信号ＸＯＲＳＵＭと、パリティ保持部２４から転送されるパリティＰＲＴＹＩＮ＜Ｅ２＞とのＸＮＯＲ演算を行う。インバータ１７５はＸＮＯＲゲート１７４の演算結果を反転する。インバータ１７６は、インバータ１７６の出力を反転し、その結果をエラー数の偶奇判定用のシンドロームＳＹＮＤＲＭ＜Ｅ２＞として、シンドローム保持部２７に転送する。
【０１６０】
インバータ１７０は信号ＰＲＴＹＧＥＴ、ＰＲＴＹＧＥＴｎに同期して動作する。そしてデータプログラム時において、信号ＸＯＲＳＵＭを反転する。インバータ１７１は、インバータ１７０の出力を反転する。インバータ１７２は、信号ＳＹＮＤＧＥＴ、ＳＹＮＤＧＥＴｎに同期して動作し、インバータ１７１の出力を反転させる。インバータ１７２の出力ノードは、インバータ１７１の入力ノードに接続される。インバータ１７３は、インバータ１７１の出力を反転させる。そしてインバータ１７３の出力が、信号ＰＲＴＹＯＵＴ＜Ｅ２＞としてパリティ保持部２４へ転送される。
【０１６１】
上記構成において、入力信号ＤＩＮａ〜ＤＩＮｈはメインデータのいずれかのビットである。すなわち、入力信号ＤＩＮａ〜ＤＩＮｈとして、メインデータの２４ビットのうちの８ビットが与えられる。そしてこれらについての演算結果ＸＯＲＳＵＭが、クロックＢＵＦＦ＿ＣＬＫに同期してレジスタ１６９に保持される。
【０１６２】
引き続き、入力信号ＤＩＮａ〜ＤＩＮｈとして、メインデータの２４ビットのうちの他の８ビットが与えられる。そしてこれらと、既にレジスタに保持されている信号ＸＯＲＬＡＴとの演算結果ＸＯＲＳＵＭが、クロックＢＵＦＦ＿ＣＬＫに同期してレジスタ１６９に上書きされる。
【０１６３】
最後に、入力信号ＤＩＮａ〜ＤＩＮｈとして残りの８ビットが与えられる。そしてこれらと、既にレジスタに保持されている信号ＸＯＲＬＡＴとの演算結果ＸＯＲＳＵＭが、クロックＢＵＦＦ＿ＣＬＫに同期してレジスタ１６９に上書きされる。
【０１６４】
＜効果＞  
以上のように、この発明の第２の実施形態に係るエラー訂正システムであると、判定回路１６０を設けることにより、エラーの発生したビット数が偶数個であるか奇数個であるかを判定している。
【０１６５】
ハミングコードを利用した１ビットのエラーを訂正するシステムであると、２ビット以上のエラーが発生した場合に正しくエラー訂正出来ない。しかし、エラー数が偶数個であるか奇数個であるかを判定する手段を有することで、エラー訂正の信頼度を把握出来る。すなわち、通常、発生するエラー数は１ビットか２ビット程度である。従って、判定回路１６０の判定結果を参照することで、実際に生じたエラー数が１ビットであって且つ正しくエラー訂正が出来たのか、またはエラーは発生しなかったのか、またはエラー数が２ビット以上で且つ正しくエラー訂正が出来なかったのか、を検証することが出来る。従って、メモリシステムの動作信頼性を向上出来る。
【０１６６】
更に本実施形態では、第１の実施形態で説明したように、メインデータを複数のグループに分割している。そして、判定回路１６０においてメインデータの全ビットを足し合わせる際に、メインデータをグループ毎に判定回路１６０を転送する。判定回路１６０では、グループ毎に転送が行われる度に、当該グループについてのＸＯＲ演算を行い、新たなグループが入力される度にＸＯＲ演算結果を更新する。従って、メインデータの全ビットが入力されるまで演算を待つ必要が無く、演算を高速化出来ると共に、１グループ分のデータのＸＯＲ演算に必要な回路で、メインデータ全ビットのＸＯＲ演算が出来るので、演算回路面積の増大を抑制することも出来る。
【０１６７】
上記のように、この発明の第１、第２の実施形態に係るエラー訂正システムは、Ｎビット（Ｎは２以上の自然数で、例えば２４ビット）のデータＤ０〜Ｄ２３を保持可能なデータバッファ２３と、ハミングコードに従った行列式に基づくビットの組み合わせにより前記データバッファ２３から出力された前記データＤＩＮＥＣＣ＜２３：０＞を元にして、該データのシンドローム及びパリティを生成する生成部２６と、前記生成部２６で生成された前記シンドロームＳＹＮＤＲＭ＜７：０＞を保持可能なシンドローム保持部２７と、前記生成部２６で生成された前記パリティＰＲＴＹ＜７：０＞を保持可能なパリティ保持部と、前記シンドローム保持部２７に保持される前記シンドロームＳＹＮＤＲＭ＜７：０＞を用いて、前記データバッファ２３に保持される前記データのエラー位置を特定して、前記データバッファ２３に対してエラーを訂正させるデコード部２９とを具備する。そして前記データバッファ２３は、クロックのｋサイクル（ｋは１以上の自然数で、例えば１サイクル）毎に、前記データＤ０〜Ｄ２３をビットシフトさせつつ前記Ｎビットのうちのｎビット（ｎは１以上の自然数で、例えば６ビット）ＤＩＮＥＣＣ＜５：０＞を前記生成部２６へ出力する。これにより、メモリシステム１の回路規模を削減出来る。
【０１６８】
なお、上記実施形態では、メインデータの１つのグループがＥＣＣバッファ２１に転送する際に、１クロックを要する場合を例に説明した。しかし、複数のクロックサイクルを要する場合であっても良い。
【０１６９】
また、メインデータを分割するグループ数が３つである場合にも限らない。パリティのビット数を増やすことなくメインデータのビット数を増やす場合には、分割するグループ数の数も増やす必要がある。但し、パリティに必要なビット数は、前述の通りメインデータのビット数を２ｋビットとすれば、（ｋ＋１）ビットであり、この条件を満たす必要がある。
【０１７０】
更に、上記第１、第２の実施形態では、ＮＡＮＤ型フラッシュメモリ２、ＲＡＭ部３、及びコントローラ部４がワンチップに集積された例を挙げて説明した。このようなメモリシステム２の具体例としては、「ＯｎｅＮＡＮＤ（登録商標）」型のフラッシュメモリが挙げられる。しかし、必ずしもワンチップ化されている場合に限らず、ＮＡＮＤ型フラッシュメモリ２、ＲＡＭ部３、及びコントローラ部４が別々の半導体チップで実現されている場合であっても良い。
【０１７１】
なお、本願発明は上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。更に、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出されうる。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出されうる。
【図面の簡単な説明】
【０１７２】
【図１】この発明の第１の実施形態に係るメモリシステムのブロック図。
【図２】この発明の第１の実施形態に係るメモリセルアレイの回路図。
【図３】この発明の第１の実施形態に係るＥＣＣ部のブロック図。
【図４】この発明の第１の実施形態に係るハミングコードを示すダイアグラム。
【図５】この発明の第１の実施形態に係るＥＣＣバッファのブロック図。
【図６】この発明の第１の実施形態に係るレジスタのブロック図。
【図７】この発明の第１の実施形態に係るレジスタの回路図。
【図８】この発明の第１の実施形態に係るレジスタの回路図。
【図９】この発明の第１の実施形態に係る生成部の回路図。
【図１０】この発明の第１の実施形態に係るシンドローム保持部のブロック図。
【図１１】この発明の第１の実施形態に係るレジスタのブロック図。
【図１２】この発明の第１の実施形態に係るレジスタの回路図。
【図１３】この発明の第１の実施形態に係るデコード部の回路図。
【図１４】この発明の第１の実施形態に係るメモリシステムにおけるデータロード時の各種信号のタイミングチャート。
【図１５】この発明の第１の実施形態に係るＥＣＣバッファのブロック図。
【図１６】この発明の第１の実施形態に係るＥＣＣバッファのブロック図。
【図１７】この発明の第１の実施形態に係るＥＣＣ部のブロック図。
【図１８】この発明の第１の実施形態に係るＥＣＣ部のブロック図。
【図１９】この発明の第１の実施形態に係るＥＣＣ部のブロック図。
【図２０】この発明の第１の実施形態に係るＥＣＣ部のブロック図。
【図２１】この発明の第１の実施形態に係るメモリシステムにおけるデータプログラム時の各種信号のタイミングチャート。
【図２２】この発明の第２の実施形態に係るＥＣＣ部のブロック図。
【図２３】この発明の第２の実施形態に係る判定回路の回路図。
【符号の説明】
【０１７３】
１…メモリシステム、２…ＮＡＮＤ型フラッシュメモリ、３…ＲＡＭ部、４…コントローラ部、１０、３２…メモリセルアレイ、１１、３４…ロウデコーダ、１２…ページバッファ、１３…電圧発生回路、１４…シーケンサ、１５、１６…オシレータ、１７…第１領域、１８…第２領域、１９…メモリセルユニット、２０…ＥＣＣ部、２１…ＥＣＣバッファ、２２…ＥＣＣエンジン、
２３…データバッファ部、２４…パリティ保持部、２６…生成部、２７…シンドローム保持部、２８…ＥＣＣコントローラ、２９…デコード部、３０…ＳＲＡＭ、３１…ＤＱバッファ、３３…センスアンプ、４０…インターフェース部、４１、４２…バーストバッファ、４３…インターフェース、５０…アクセスコントローラ、６０、７０、７０−０〜７０−２３、７１、７１−０〜７１−７、１３０、１３０−０〜１３０−７、１６９…レジスタ、６１…コマンドユーザインターフェース、６２…ステートマシン、６３…アドレス／コマンド発生回路、６４…アドレス／０タイミング発生回路、７２〜８７、９５〜１０８、１１５〜１１８、１２０〜１２２、１４０〜１４８、１７０〜１７３、１７５、１７６…インバータ、８８、１５０…ＮＡＮＤゲート、８９、９０…ＡＮＤゲート、９１…ＸＯＲゲート、９２、１５１〜１５３、１６１〜１６８、１７４…ＮＯＲゲート、１１０〜１１４、１１９…ＸＮＯＲゲート、１６０…判定部
【図１】
2010009643.tif 000003
【図２】
2010009643.tif 000004
【図３】
2010009643.tif 000005
【図４】
2010009643.tif 000006
【図５】
2010009643.tif 000007
【図６】
2010009643.tif 000008
【図７】
2010009643.tif 000009
【図８】
2010009643.tif 000010
【図９】
2010009643.tif 000011
【図１０】
2010009643.tif 000012
【図１１】
2010009643.tif 000013
【図１２】
2010009643.tif 000014
【図１３】
2010009643.tif 000015
【図１４】
2010009643.tif 000016
【図１５】
2010009643.tif 000017
【図１６】
2010009643.tif 000018
【図１７】
2010009643.tif 000019
【図１８】
2010009643.tif 000020
【図１９】
2010009643.tif 000021
【図２０】
2010009643.tif 000022
【図２１】
2010009643.tif 000023
【図２２】
2010009643.tif 000024
【図２３】
2010009643.tif 000025