(57)【要約】【課題】書込み速度を向上させることができるメモリコントローラを提供する。【解決手段】データバッファと、不揮発性メモリの読み書きを行うメモリインタフェースと、書込みデータに基づいて誤り訂正符号化処理を実施し冗長データを生成する符号エンコード部と、書込みデータをデータバッファから読出してメモリインタフェースへ転送し、冗長データと対応する書込みデータとを不揮発性メモリに書込むよう制御し、メモリインタフェースへ転送した書込みデータのデータバッファ上の領域を解放し、書込みエラーが生じても再書込みを実施しない書込み制御部と、不揮発性メモリからの読出しエラーを検出するリードエラー検出部と、読出しを要求された読出し対象データを不揮発性メモリから読出すよう制御し、読出し対象データの読み出しエラーが検出された場合に、冗長データと対応するデータとを不揮発性メモリから読出すよう制御する読出し制御部と、を備える。【選択図】図１
2013131095.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリを制御するメモリコントローラであって、
前記不揮発性メモリへの書き込み、前記不揮発性メモリからの読み出しを行うメモリインタフェースと、
受信した書込みデータ及び前記不揮発性メモリから読み出した読出しデータを格納するデータバッファと、
前記書込みデータに基づいて、第１誤り訂正符号化処理を実施し第１冗長データを生成する第１符号エンコード部と、
前記書込みデータを前記データバッファから読出して前記メモリインタフェースへ転送し、書き込みデータと該書き込みデータを基に生成された冗長データとを前記不揮発性メモリに書込むよう制御し、前記書き込みデータを前記メモリインタフェースへの転送後、前記書き込みデータの前記不揮発性メモリへの書込みが完了する前に前記データバッファの前記書き込みデータが格納された領域を解放する書込み制御部と、
前記不揮発性メモリから読出したデータに対してエラーを検出するエラー検出部と、
読出しを要求された読出し対象データを前記不揮発性メモリから読出すよう制御し、前記リードエラー検出部により前記読出し対象データのエラーが検出された場合に、当該読出し対象データに対応する前記第１冗長データと該第１冗長データに対応するデータとを前記不揮発性メモリから読出すよう制御する読出し制御部と、
前記不揮発性半導体メモリから読み出された第１冗長データと該第１冗長データに対応する読み出しデータとに基づいて第１誤り訂正処理を行う第１符号デコード部と、
を備える
ことを特徴とするメモリコントローラ。
【請求項２】
前記書込み制御部は、前記冗長データと該冗長データに対応する前記書込みデータとを前記不揮発性メモリの複数の書込み単位領域に分散させて書込むよう制御することを特徴とする請求項１に記載のメモリコントローラ。
【請求項３】
前記書込みデータに基づいて、第２誤り訂正符号化処理により第２冗長データを生成する第２符号エンコード部と、
前記不揮発性メモリから読出された第２冗長データと該第２冗長データに対応する読出しデータとに基づいて第２誤り訂正処理を行う第２符号デコード部と、
をさらに備え、
前記書込み制御部は、
前記第２冗長データと該第２冗長データに対応するデータとを前記不揮発性メモリの同一書込み単位領域に書き込むよう制御し、
前記リードエラー検出部は、前記第２符号デコード部による誤り訂正処理で訂正不可であったデータを読出しエラーが検出されたデータと判定することを特徴とする請求項２に記載のメモリコントローラ。
【請求項４】
同一の書込み単位領域に書き込まれる前記冗長データと該冗長データに対応する前記書込みデータのシンボル数を、前記冗長データにより訂正可能なシンボル数以下とすることを特徴とする請求項２に記載のメモリコントローラ。
【請求項５】
前記書込み制御部は、前記冗長データと該冗長データに対応する前記書込みデータとを前記不揮発性メモリに含まれる複数のブロックに分散させて書込むよう制御することを特徴とする請求項１ないし４のいずれか一項に記載のメモリコントローラ。
【請求項６】
同一のブロックに書き込まれる前記冗長データと該冗長データに対応する前記書込みデータのシンボル数を、前記冗長データにより訂正可能なシンボル数以下とすることを特徴とする請求項５に記載のメモリコントローラ。
【請求項７】
前記書込み制御部は、前記冗長データと該冗長データに対応する前記書込みデータとを前記不揮発性メモリに含まれる複数のメモリチップに分散させて書込むよう制御することを特徴とする請求項１ないし６のいずれか一項に記載のメモリコントローラ。
【請求項８】
同一のメモリチップに書き込まれる前記書込みデータのシンボル数を、前記冗長データにより訂正可能なシンボル数以下とすることを特徴とする請求項７に記載のメモリコントローラ。
【請求項９】
前記書き込み制御部は、前記書き込みデータが前記不揮発性半導体メモリへの書き込み時に書き込みエラーが生じても再書き込みを実施しないことを特徴とする請求項１に記載のメモリコントローラ。
【請求項１０】
不揮発性メモリと、
前記不揮発性メモリへの書き込み、前記不揮発性メモリからの読み出しを行うメモリインタフェースと、
受信した書込みデータ及び前記不揮発性メモリから読み出した読出しデータを格納するデータバッファと、
前記書込みデータに基づいて、第１誤り訂正符号化処理を実施し第１冗長データを生成する第１符号エンコード部と、
前記書込みデータを前記データバッファから読出して前記メモリインタフェースへ転送し、書き込みデータと該書き込みデータを基に生成された冗長データとを前記不揮発性メモリに書込むよう制御し、前記書き込みデータを前記メモリインタフェースへの転送後、前記書き込みデータの前記不揮発性メモリへの書込みが完了する前に前記データバッファの前記書き込みデータが格納された領域を解放する書込み制御部と、
前記不揮発性メモリから読出したデータに対してエラーを検出するエラー検出部と、
読出しを要求された読出し対象データを前記不揮発性メモリから読出すよう制御し、前記リードエラー検出部により前記読出し対象データのエラーが検出された場合に、当該読出し対象データに対応する前記第１冗長データと該第１冗長データに対応するデータとを前記不揮発性メモリから読出すよう制御する読出し制御部と、
前記不揮発性半導体メモリから読み出された第１冗長データと該第１冗長データに対応する読み出しデータとに基づいて第１誤り訂正処理を行う第１符号デコード部と、
を備える
ことを特徴とする記憶装置。
【請求項１１】
不揮発性メモリを制御するメモリ制御方法であって、
受信した書込みデータに基づいて、誤り訂正符号化処理を実施し冗長データを生成する第１のステップと、
前記書込みデータをデータバッファから読出し、読み出した前記書込みデータを、前記不揮発性への書込みを行うメモリインタフェースへ転送する第２のステップと、
書き込みデータと該書き込みデータを基に生成された冗長データとを前記不揮発性メモリに書込むよう制御し、前記書き込みデータを転送後、前記書き込みデータの前記不揮発性メモリへの書込みが完了する前に前記データバッファの前記書き込みデータが格納された領域を解放する第３のステップと、
前記不揮発性メモリから読出したデータに対してエラーを検出する第４のステップと、
読出しを要求された読出し対象データを前記不揮発性メモリから読出す第５のステップと、
前記不揮発性メモリから読出したデータに対してエラーを検出する第６のステップと、
前記第５のステップで前記読出し対象データのエラーが検出された場合に、エラーの検出された前記読出し対象データに対応する前記冗長データと該冗長データに対応するデータとを前記不揮発性メモリから読出す第７のステップと、
前記不揮発性メモリから読出された前記冗長データと該冗長データに対応するデータとに基づいて誤り訂正処理を行う第８のステップと、
を含むことを特徴とするメモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、メモリコントローラ、記憶装置およびメモリ制御方法に関する。
【背景技術】
【０００２】
ＮＡＮＤメモリのセルへのデータ書込み（プログラム）は、通常、セルを複数集めたページ単位で実施される。この時、何らかの理由で書込みエラー（プログラムエラー）が発生することがある。
【０００３】
書込みエラー（プログラムエラー）は、プログラムを実施しても、閾値電圧が正しいレベルに達しないセルが所定の数以上存在する状態を示している。プログラムエラーには、例えばセル単位で閾値電圧が所定のレベルから外れるビット単位のランダム誤りや、ＷＬ（Ｗｏｒｄ  Ｌｉｎｅ）単位で周辺回路が故障することによるページ単位でのバースト誤り等がある。プログラムエラーが生じた場合、ＮＡＮＤメモリへ書込むデータから誤り訂正符号を生成してデータとともにＮＡＮＤメモリのページ内に書き込んだとしても、ビット単位のランダム誤りが誤り訂正能力を超えた場合や、ページ単位のバースト誤りが発生した場合、さらにはブロック単位やチップ単位で故障した場合には当該データが失われることになる。
【０００４】
そのため、従来は、プログラムエラーを検出した場合、再書込みする必要があり、再書込みに要する時間分、書込み速度が低下するという問題があった。
【０００５】
また、メモリコントローラが、プログラム後に、書き込んだデータを読出して、書き込まれたデータに誤りがあるか否かを確認するリードベリファイを実施することもある。リードベリファイにより誤りがあると判定された場合にも、再書込みする必要があり、リードベリファイにより生じる再書込みに要する時間分、書込み速度が低下するという問題があった。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１１−２０３８７８号公報
【特許文献２】特開平８−２６３２２９号公報
【特許文献３】特開２０１１−１６５０６３号公報
【特許文献４】特開２００９−２１１２０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本実施形態は、書込み速度を向上させることができるメモリコントローラ、記憶装置およびメモリ制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本実施形態によれば、メモリコントローラは、データバッファと、不揮発性メモリの読み書きを行うメモリインタフェースと、書込みデータに基づいて誤り訂正符号化処理を実施し冗長データを生成する符号エンコード部と、書込みデータをデータバッファから読出してメモリインタフェースへ転送し、冗長データと対応する書込みデータとを不揮発性メモリに書込むよう制御し、メモリインタフェースへ転送した書込みデータのデータバッファ上の領域を解放し、書込みエラーが生じても再書込みを実施しない書込み制御部と、不揮発性メモリからの読出しエラーを検出するリードエラー検出部と、読出しを要求された読出し対象データを不揮発性メモリから読出すよう制御し、読出し対象データの読み出しエラーが検出された場合に、冗長データと対応するデータとを不揮発性メモリから読出すよう制御する読出し制御部と、を備える。
【図面の簡単な説明】
【０００９】
【図１】図１は、第１の実施の形態にかかる記憶装置１の構成例を示すブロック図である。
【図２】図２は、従来の記憶装置におけるＮＡＮＤメモリへの書込み処理手順の一例を示すフローチャートである。
【図３】図３は、従来の記憶装置におけるＮＡＮＤメモリからの読出し処理手順の一例を示すフローチャートである。
【図４】図４は、第１の実施の形態の記憶装置におけるＮＡＮＤメモリへの書込み処理手順の一例を示すフローチャートである。
【図５】図５は、第１の実施の形態の記憶装置におけるＮＡＮＤメモリからの読出し処理手順の一例を示すフローチャートである。
【図６】図６は、第１の実施の形態の誤り訂正符号（ＲＳ符号）の構成例を示す図である。
【図７】図７は、第１の実施の形態の誤り訂正符号（ＸＯＲパリティ符号）の構成例を示す図である。
【図８】図８は、インターフェース部の書込み処理手順の一例を示すフローチャートである。
【図９】図９は、書込み制御部における書込み処理手順の一例を示すフローチャートである。
【図１０】図１０は、書込み制御部における書込み処理手順の一例を示すフローチャートである（１シンボルごとにバッファ解放）。
【図１１】図１１は、第１の実施の形態のデータバッファの使用例を示す図である。
【図１２】図１２は、同一ブロックの異なるページに１つの誤り訂正符号に対応するシンボル群を格納する例を示す図である。
【図１３】図１３は、異なるブロックに１つの誤り訂正符号に対応するシンボル群を格納する例を示す図である。
【図１４】図１４は、異なるチップの異なるプレーンに１つの誤り訂正符号に対応するシンボル群を格納する例を示す図である。
【図１５】図１５は、第２の実施の形態にかかる記憶装置の構成例を示すブロック図である。
【図１６】図１６は、第２の実施の形態の誤り訂正符号の構成例を示す図である。
【発明を実施するための形態】
【００１０】
以下に添付図面を参照して、実施形態にかかるメモリコントローラ、記憶装置およびメモリ制御方法を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【００１１】
（第１の実施の形態）
図１は、第１の実施の形態にかかる記憶装置１の構成例を示すブロック図である。記憶装置１は、メモリコントローラ２とＮＡＮＤメモリ（不揮発性メモリ）３を備える。記憶装置１は、ホスト４と接続可能であり、図１ではホスト４と接続された状態を示している。ホスト４は、例えば、パーソナルコンピュータ、携帯端末などの電子機器である。
【００１２】
ＮＡＮＤメモリ３は、データを不揮発に記憶する不揮発性メモリであり、ｎ（ｎは０以上の整数）＋１個のメモリチップ（メモリ）３１−０〜３１−ｎで構成されている。メモリ３１−ｋは、ｋ番目のメモリチップを表す。なお、ここでは、不揮発性メモリとしてＮＡＮＤメモリ３を用いる例を説明するが、ＮＡＮＤメモリ以外の記憶手段を用いてもよい。ＮＡＮＤメモリでは、一般にページと言われる書込み単位（最小書込み）が存在し、ページ単位で書込みが行われる。
【００１３】
メモリコントローラ２は、ホスト４からの書込みコマンド（要求）に従ってＮＡＮＤメモリ３への書込みを制御し、またホスト４からの読出しコマンド（要求）に従ってＮＡＮＤメモリ３からの読出しを制御する。メモリコントローラ２は、インターフェース部２１、データバッファ２２、符号エンコード部２３、書込み制御部２４、読出し制御部２５、符号デコード部２６、メモリインタフェース（Ｉ／Ｆ）２７およびリードエラー検出部２８を備える。
【００１４】
インターフェース部２１は、ホスト４のインターフェース部４１と通信線により接続し、通信線の種別や規格に応じて、ホスト４と記憶装置１の間の転送処理等を実施する。通信線としては、例えば、ＳＡＴＡ（Serial  Advanced  Technology  Attachment）のようなシリアルバスの場合や、アドレスバスとデータバスの場合などがある。インターフェース部２１は、ホスト４からの読出しコマンドや書込みコマンド等を受信するとともに当該コマンドにより転送するデータのアドレスやサイズを受信する。その後、必要なバッファ領域をデータバッファ２２上に確保して、各コマンドの処理を書込み制御部２４や読出し制御部２５に通知する。また、インターフェース部２１は、ホスト４からＮＡＮＤメモリ３への書込みデータを受信してデータバッファ２２へ格納し、ＮＡＮＤメモリ３から読出されてデータバッファ２２へ格納された読出しデータをホスト４へ転送する。
【００１５】
データバッファ２２は、メモリコントローラ２がホスト４から受信したデータをＮＡＮＤメモリ３へ記憶するまでに一時格納したり、ＮＡＮＤメモリ３から読出したデータをホスト４へ送信するまでに一時格納したりするために使用されるメモリであり、例えば、ＳＲＡＭ（Static  Random  Access  Memory）やＤＲＡＭ（Dynamic  Random  Access  Memory）などの汎用メモリで構成される。
【００１６】
書込み制御部２４は、データバッファ２２に格納された書込みデータをＮＡＮＤメモリ３へ書込む処理を制御する。具体的には、書込み制御部２４は、データバッファ２２上のデータ（書き込みデータ）を書込むＮＡＮＤメモリ３上の領域を決定し、データをデータバッファ２２から読出して符号エンコード部２３に転送し、また符号エンコード部２３により生成された符号の各シンボルを書込むＮＡＮＤメモリ３上の領域を決定し、データおよび符号をメモリＩ／Ｆ２７に転送する。また、書込み制御部２４は、メモリＩ／Ｆ２７への書込みデータの転送が終了すると、転送が終了した書込みデータが格納されていたデータバッファ２２の領域を解放する。本実施の形態では、書込み制御部２４はメモリＩ／Ｆ２７経由でＮＡＮＤメモリ３から書込みエラー（プログラムエラー）を受け取っても、再書込み等の処理を行わない。なお、メモリコントローラ２は、書込みエラーを受信してエラーの有無を検出する処理は実施し、エラーを検出しても再書込みを行わないようにしてもよいし、エラーの有無を検出する処理自体を実施しなくてもよい。また、リードベリファイの結果エラーとなっても再書込みは実施しない、またはリードベリファイ自体実施しないようにしてもよい。
【００１７】
符号エンコード部２３は、書込み制御部２４から転送されたデータに基づいて、誤り訂正符号化処理を実施し冗長シンボルを生成する（誤り訂正符号を生成する）。誤り訂正符号としてはどのような符号を用いてもよいが、例えば、ＲＳ（Reed−Solomon）符号やＸＯＲパリティ符号等を用いることができる。誤り訂正符号の種類は限定するものではないが、符号化後に情報シンボルと冗長シンボルとに明確に分離できる組織符号に属する符号が好ましい。すなわち、１個の誤り訂正符号は情報シンボルと冗長シンボルから構成され、情報シンボルは誤り訂正符号の元となったデータであり、冗長シンボルは誤り訂正符号化で生成付加された部分である。本実施の形態では、１つの誤り訂正符号を構成する各シンボルは、ＮＡＮＤメモリ３において異なる書込み単位に記録されるように配置される。一般に誤り訂正符号の１シンボル辺りのビット数よりメモリの書込み単位サイズの方がはるかに大きいため、書込み単位サイズのデータは複数のシンボルを含むシンボル群になる。
【００１８】
メモリＩ／Ｆ２７は、ＮＡＮＤメモリ３への書込みや読出しを直接制御するコントローラである。メモリＩ／Ｆ２７は、書込み制御部２４から転送された書込みデータをＮＡＮＤメモリ３へ転送して、当該書込みデータを書込み制御部２４が決定した書込み領域に書き込むよう指示する。また、メモリＩ／Ｆ２７は、読出し制御部２５から読出しを指示されたデータをＮＡＮＤメモリ３から読出し、読出し制御部２５へ転送する。また、ＮＡＮＤメモリ３からのステータス信号等を受信する。なお、ＮＡＮＤメモリ３では、一般にステータス信号としてメモリセルへの書込みエラー（プログラムエラー）を通知するが、本実施の形態では、メモリＩ／Ｆ２７はプログラムエラーが通知されても、当該プログラムエラーを書込み制御部２４へ通知しなくてもよい。
【００１９】
リードエラー検出部２８は、メモリＩ／Ｆ２７がＮＡＮＤメモリ３からデータを読出した際に、読出しに失敗したか成功したか、すなわち読出しエラー（リードエラー）の有無を検出し、その検出結果をメモリＩ／Ｆ２７へ通知する。読出しに失敗したか成功したかの判断はどのような方法で行ってもよいが、例えば、ＮＡＮＤメモリ３から出力されるステータス信号等により判断してもよいし、書込み時に誤り検出符号を付加してＮＡＮＤメモリ３へ格納し、誤り検出符号を用いた誤り検出処理で誤りが検出された場合に読出に失敗したと判断してもよい。
【００２０】
読出し制御部２５は、インターフェース部２１経由で通知されたホスト４からの読出しコマンドに従って、読出しを要求されたデータ（読み出し対象データ）をＮＡＮＤメモリ３からデータを読出す処理を制御する。具体的には、読出し制御部２５は、読出しを要求されたデータをＮＡＮＤメモリ３からデータを読出すようメモリＩ／Ｆ２７へ指示するとともに、データバッファ２２上の領域に読出したデータを格納する領域を割当てる。読出し制御部２５は、リードエラー検出部２８によりエラーが検出されなかった場合は、読出しデータをデータバッファ２２上の割当てた領域に格納する。また、読出し制御部２５は、リードエラー検出部２８がエラーを検出した場合、エラーの検出されたデータに対応する誤り訂正符号を構成するシンボル全てについて、ＮＡＮＤメモリ３への記憶位置を特定して読出すようメモリＩ／Ｆ２７へ指示する。そして、読出し制御部２５は、読出したそれらのシンボルを符号デコード部２６に転送して誤り訂正処理を実施するよう指示する。その後、当該読出しデータに割当てられていたデータバッファ２２上の領域に誤り訂正処理後のデータを転送する。
【００２１】
符号デコード部２６は、読出し制御部２５から転送されたデータ（シンボル）に基づいて復号処理を実施し、誤り訂正後の（修復された）読出しデータを読出し制御部２５へ転送する。
【００２２】
ここで、従来の記憶装置の書込みおよび読出し処理について説明する。図２は、従来の記憶装置におけるＮＡＮＤメモリへの書込み処理手順の一例を示すフローチャートであり、図３は、従来の記憶装置におけるＮＡＮＤメモリからの読出し処理手順の一例を示すフローチャートである。
【００２３】
従来、メモリコントローラは、図２に示すように、書込みコマンドをホストから受信する（ステップ１０１）と、データバッファ上にデータｄを格納する領域を割当てる（ステップＳ１０２）。そして、データｄをホストから受信し（ステップＳ１０３）、データバッファ上の（ＮＡＮＤメモリ３への）未書込みデータ量が所定の閾値Ａ以上であるか否かを判断する（ステップＳ１０４）。なお、閾値Ａは、ＮＡＮＤメモリ３への書込み処理を開始するデータ量の単位であり、ＮＡＮＤメモリ３の書込み単位である１ページ以上の値である。一般には、転送や処理の効率化のため、データバッファにある程度のデータが蓄積してから書込み処理を実施する。例えば、ＮＡＮＤメモリが１６メモリチップ、２プレーンで構成される場合、３２ページを閾値Ａとすることができる。
【００２４】
データバッファ上の未書込みデータ量が所定の閾値Ａ以上である場合（ステップＳ１０４  Ｙｅｓ）、ＮＡＮＤメモリ上の書込み領域の決定を行い（ステップＳ１０５）、データバッファに格納されている書込みデータをＮＡＮＤメモリの書込み領域へ転送する（ステップＳ１０６）。そして、ＮＡＮＤメモリにおいてセルへの書込み（プログラム）が実施され（ステップＳ１０７）、セルへのプログラム完了を待機する（ステップＳ１０８）。そして、ＮＡＮＤメモリの書込みエラー（プログラムエラー、リードベリファイによるエラーの少なくとも一方）の有無を検出し（ステップＳ１０９）、書込みエラーがあった場合（ステップＳ１１０  Ｙｅｓ）、ステップＳ１０５へ戻り、再書込みを実施する。
【００２５】
書込みエラーがなかった場合（ステップＳ１１０  Ｎｏ）、書込んだデータに対応するデータバッファの領域を解放し（ステップＳ１１１）、書込み処理を完了する（ステップＳ１１２）。また、ステップＳ１０４で、未書込みデータ量が所定の閾値Ａ未満の場合（ステップＳ１０４  Ｎｏ）、書込み処理を完了する（ステップＳ１１２）。
【００２６】
従来のＮＡＮＤメモリの読出し処理では、図３に示すように、メモリコントローラは、読出しコマンドをホストから受信する（ステップ２０１）と、読出すデータｄのＮＡＮＤメモリ上の記録位置を特定する（ステップＳ２０２）。そして、ＮＡＮＤメモリからデータｄを読出し（ステップＳ２０３）、読出しエラーの検出を行い（ステップＳ２０４）、エラーが検出された場合（ステップＳ２０４  Ｙｅｓ）、ステップＳ２０３へ戻り再読出しを実施する。読出しエラーが検出されなかった場合（ステップＳ２０４  Ｎｏ）、読出したデータｄをホストに送信し（ステップＳ２０５）、読出し処理を完了する（ステップＳ２０６）。
【００２７】
このように、従来のＮＡＮＤメモリへ書込み処理では、プログラムエラー、リードベリファイによるエラーなどの書込みエラーが検出された場合に、再書込みを実施していた。このため、書込み時の転送速度が低下するという問題があった。また、ＮＡＮＤメモリのセルに正常に書き込んだことを確認してからデータバッファを解放しているため、書込み中にホストから受信したデータを格納するために、データバッファを余分に必要とするという問題があった。
【００２８】
これに対し、本実施の形態の記憶装置１では、書込み時に誤り訂正符号化処理を行って冗長シンボルを生成しかつ書込み時に再書込みを実施しないことにより、書込み時の転送速度の低下を防ぎ、またデータバッファの利用効率を向上させる。以下、本実施の形態の記憶装置１における書込みおよび読出し処理について説明する。図４は、本実施の形態の記憶装置１におけるＮＡＮＤメモリ３への書込み処理手順の一例を示すフローチャートであり、図５は、本実施の形態の記憶装置１におけるＮＡＮＤメモリ３からの読出し処理手順の一例を示すフローチャートである。
【００２９】
図４に示すように、本実施の形態のメモリコントローラ２は、従来のステップＳ１０１〜ステップＳ１０４と同様に、書込みコマンド受信からデータバッファ上の未書込みデータが閾値Ａ以上であるか否かの判断までを実施する（ステップＳ１〜ステップＳ４）。
【００３０】
データバッファ上の未書込みデータ量が所定の閾値Ａ以上である場合（ステップＳ４  Ｙｅｓ）、メモリコントローラ２は、書込みデータであるシンボル群（情報シンボル群）についてＮＡＮＤメモリ３上の書込み領域の決定を行う（ステップＳ５）。そして、データバッファに格納されている書込みデータを、符号エンコード部２３へ転送し、符号エンコード部２３が情報シンボル群に基づいて誤り訂正符号Ｅを生成する（ステップＳ６）。
【００３１】
メモリコントローラ２は、符号エンコード部２３により生成された冗長シンボル群に対するＮＡＮＤメモリ３の書込み領域を決定し、情報シンボル群および冗長シンボル群を、ＮＡＮＤメモリ３の対応する書込み領域へ転送する（ステップＳ７）。そして、転送が完了したシンボル群に対応するデータバッファ２２上の領域を解放し（ステップＳ８）、書込み処理を完了する（ステップＳ１０）。また、ステップＳ８のＮＡＮＤメモリ３の対応する書込み領域へ転送後、データバッファ２２の解放と並行して、転送されたシンボル群のＮＡＮＤメモリ３のセルへの書込み（プログラム）が実施される（ステップＳ９）。すなわち、メモリコントローラ２（より詳細には、メモリコントローラ２の書込み制御部２４）は、データバッファ２２から情報シンボル群をＮＡＮＤメモリ３へ転送後、この情報シンボル群のＮＡＮＤメモリ３のセルへの書込み完了を待たずに、データバッファ２２のこの情報シンボル群が格納されていた領域を解放する。また、ステップＳ４で、未書込みデータ量が所定の閾値Ａ未満の場合（ステップＳ４  Ｎｏ）、書込み処理を完了する（ステップＳ１０）。
【００３２】
図５に示すように、本実施の形態のメモリコントローラ２は、従来のステップＳ２０１〜ステップＳ２０４と同様に、読出しコマンド受信から読出しエラーの検出までを実施する（ステップＳ２１〜ステップＳ２４）。
【００３３】
読出しエラーが検出された場合（ステップＳ２４  Ｙｅｓ）、読出し対象のデータｄに対応する誤り訂正符号を構成する全シンボル群についてＮＡＮＤメモリ３上の記録位置を特定する（ステップＳ２７）。そして、誤り訂正符号を構成する全シンボル群をＮＡＮＤメモリ３から読出し（ステップＳ２８）、符号デコード部２６がこれらのシンボル群を用いて復号処理を行い、データｄを修復する（ステップＳ２９）。そして、データｄをホストに送信し（ステップＳ２５）、読出し処理を終了する（ステップＳ２６）。
【００３４】
読出しエラーが検出されなかった場合（ステップＳ２４  Ｎｏ）、読出したデータｄをホストに送信し（ステップＳ２５）、読出し処理を完了する（ステップＳ２６）。
【００３５】
なお、図５では、読出しエラーを検出した場合（ステップＳ２４  Ｙｅｓ）に、再読出しを行わない例を示しているが、再読出しを行うようにしてもよい。そして、再読出しを行った後に読出しエラーを検出した場合に、ステップＳ２７以降の処理を実施するようにしてもよい。
【００３６】
このように、本実施の形態では、データの書込み時に冗長シンボル（冗長データ）を生成して情報シンボル（書込みデータ）とともに冗長シンボルをＮＡＮＤメモリ３へ格納しておくことで、書込みエラーの有無に関わらず、再書込みを実施しない。そして、書込みエラーがあった場合には、誤り訂正符号を用いた復号を行うことにより、エラーによりデータが失われることを防ぐ。従って、本実施の形態の誤り訂正符号は、できるだけ多くの書込みエラーを修復可能なように生成することが望ましい。
【００３７】
書込みエラーとしては、ビット単位のランダム誤りもあるが、ＷＬ（Ｗｏｒｄ  Ｌｉｎｅ）単位で周辺回路が故障することによるページ単位でのバースト誤りもある。ページ単位での誤りが発生した場合、１つの誤り訂正符号を同一ページ内の情報シンボル群に基づいて生成すると、ＮＡＮＤメモリ３から冗長シンボルが読出せたとしても、当該符号の元になった情報シンボル群を１つも読出せないことになり、復号ができなくなる。このため、１つの誤り訂正符号を生成するシンボル群は、ＮＡＮＤメモリ３の異なるページに分散させて格納することが望ましい。特に、符号エンコード部２３で生成する誤り訂正符号の訂正能力がｔシンボルの場合に、１つの誤り訂正符号に含まれる各シンボルのうち同一ページ上に記録するシンボルの数はｔシンボル以下とすると、ページ単位のエラーを修復することができる。なお、シンボル群は、ＮＡＮＤメモリ３の異なるページに分散させることが望ましいが、各シンボル群のＮＡＮＤメモリ３への格納位置に特に限定はない。
【００３８】
図６、７は、本実施の形態の誤り訂正符号の構成例を示す図である。図６は、ＲＳ符号（Ｎ＝３２、Ｋ＝３０）を用いる例を示し、図７は、ＸＯＲパリティ（Ｎ＝３２、Ｋ＝３１）を用いる例を示している。ここでは、１シンボルは８ビットとする。各シンボル群は１ページ分のデータサイズ（８Ｋバイト）である。なお、ここでは１シンボルを８ビットとし、１ページを８Ｋバイトとしているが、１シンボルのビット数、１ページのデータサイズは、これらに限定されない。
【００３９】
図６の例では、シンボル群＃０〜シンボル群＃２９の３０個のシンボル群を情報シンボル群＃０〜＃２９とし、シンボル群＃３０、シンボル群＃３１を冗長シンボル群＃０〜＃１としている。
【００４０】
図６のＲＳ符号１０１として示した、シンボル群＃０〜シンボル群＃３１の３２シンボルは、１つのＲＳ符号に対応するシンボルである。ＲＳ符号１０１内の情報シンボル群＃０〜＃２９のそれぞれ１シンボルずつ（合計３０シンボル）に基づいて、ＲＳ符号１０１内の冗長シンボル群＃３０、３１の１シンボルずつ（計２シンボル）の冗長シンボルが生成される。そして、各シンボル群＃０〜＃３１をそれぞれ異なるページに書き込むことにより、１つのＲＳ符号に対応する３２個のシンボルは異なるページに格納されることになる。
【００４１】
図７の例では、シンボル群＃０〜シンボル群＃３０の３１個のシンボル群を情報シンボル群＃０〜＃３０とし、シンボル群＃３１を冗長シンボル群＃０としている。情報シンボル群＃０〜＃３０のそれぞれ１シンボルずつ（合計３１シンボル）に基づいて冗長シンボル群＃０の１つの冗長シンボルを生成する。そして、各シンボル群＃０〜＃３１をそれぞれ異なるページに書き込むことにより、１つのパリティ符号に対応するシンボル群＃０〜シンボル群＃３１は異なるページに格納されることになる。
【００４２】
なお、以上述べた誤り訂正符号の構成は例であり、誤り訂正符号の種類、情報シンボルと冗長シンボルの比率等は、図６、７の例に限定されない。
【００４３】
以降では、１つの誤り訂正符号を構成する情報シンボルと冗長シンボルの合計の数をｎ、情報シンボルの数をｋとする。ｎ個のシンボル群（情報シンボル群と対応する冗長シンボル群）を符号データ単位と呼ぶこととする。図６の例ではｎ＝３２、ｋ＝３０であり、３２シンボル群（３２ページ）で１つの符号データ単位を構成し、そのうち３０シンボル群が情報シンボル群である。また、図７の例ではｎ＝３２、ｋ＝３１である。
【００４４】
次に、本実施の形態のＮＡＮＤメモリ３への書込み処理について詳細に説明する。図８は、インターフェース部２１の書込み処理手順の一例を示すフローチャートである。インターフェース部２１は、ホスト４からＬ個のデータ（データｄ（ｉ），ｉ＝０〜Ｌ−１）の書込みを要求する書込みコマンドを受信する（ステップＳ３１）と、まず、データバッファ２２上に空き領域が有るか否かを判断する（ステップＳ３２）。
【００４５】
データバッファ２２上に空き領域が有る場合（ステップＳ３２  Ｙｅｓ）、データバッファ２２上にデータｄ（ｉ）を格納する領域を割当てる（ステップＳ３３）。なお、ｉの初期値は０とする。データｄ（ｉ）をホストから受信する（ステップＳ３４）と、データバッファ２２上の未書込みデータ量が閾値Ａ以上であるか否かを判断する（ステップＳ３５）。
【００４６】
データバッファ２２上の未書込みデータ量が閾値Ａ未満の場合（ステップＳ３５  Ｎｏ）、Ｌ個のデータを受信したか否かを判断し（ステップＳ３６）、Ｌ個のデータを受信していない場合（ステップＳ３６  Ｎｏ）、ｉを１インクリメントしてステップＳ３２へ戻る。Ｌ個のデータを受信した場合（ステップＳ３６  Ｙｅｓ）、書込み処理を完了する（ステップＳ３７）。
【００４７】
データバッファ２２上に空き領域が無い場合（ステップＳ３２  Ｎｏ）、書込み制御部２４によりデータバッファ２２が解放されるまで待ち（ステップＳ３８）、ステップＳ３３へ進む。また、ステップＳ３５でデータバッファ２２上の未書込みデータ量が閾値Ａ以上であると判断した場合（ステップＳ３５  Ｙｅｓ）、書込み制御部２４にＮＡＮＤメモリ３への書込み処理の開始を指示し（ステップＳ３９）、ステップＳ３６へ進む。
【００４８】
図９は、書込み制御部２４における書込み処理手順の一例を示すフローチャートである。書込み制御部２４は、インターフェース部２１からＮＡＮＤメモリ３への書込み処理の開始指示を受けると、データバッファ２２上のデータをｋ個のシンボル群（情報シンボル群）Ｓ（ｊ）（ｊ＝ｐ〜ｐ＋ｋ−１）に振り分け、シンボル群Ｓ（ｊ）（ｊ＝ｐ〜ｐ＋ｋ−１）についての書込み処理を開始する（ステップＳ４１）。なお、ここでは、図８の閾値Ａを１符号データ単位内のｋ個の情報シンボル群に対応するデータ量とする。データバッファ２２のバッファサイズをｋページ分以上のサイズとし、シンボル群Ｓ（ｐ−１）までは、前回の処理までにＮＡＮＤメモリ３への書込み処理済みであるとする。
【００４９】
書込み制御部２４は、シンボル群Ｓ（ｊ）のＮＡＮＤメモリ３上の書込み領域を決定し（ステップＳ４２）、シンボル群Ｓ（ｊ）の書込み先のチップ（メモリチップ）が動作中であるか否かを判断する（ステップＳ４３）。シンボル群Ｓ（ｊ）の書込み先のチップが動作中の場合（ステップＳ４３  Ｙｅｓ）、当該チップの動作完了が終わるのを待ってから（ステップＳ４４）、シンボル群Ｓ（ｊ）をデータバッファ２２から読出して符号エンコード部２３へ転送し（ステップＳ４５）、符号エンコード部２３に対し、誤り訂正符号生成処理の中間結果に転送したシンボル群Ｓ（ｊ）を反映するよう指示する（ステップＳ４６）。符号エンコード部２３は、指示に基づいてシンボル群Ｓ（ｊ）に基づいて誤り訂正符号生成処理の中間結果を更新する。
【００５０】
なお、ここでは、誤り訂正符号の生成処理（符号エンコード処理）では、演算の入力となるシンボルが増えるごとに、シンボルが増える前までの演算結果を用いて誤り訂正符号を更新することが可能であるとする。すなわち、ｘ（０），ｘ（１），…，ｘ（ｑ−１）を用いて求めた誤り訂正符号をＥｑとするとき、ｘ（０），ｘ（１），…，ｘ（ｑ）のシンボルを用いた誤り訂正符号は、Ｅｑとｘ（ｑ）を用いて生成することができるとする。ここでは、ｎｄ個のシンボルを用いて生成した誤り訂正符号をＮＡＮＤメモリ３へ格納する最終的な誤り訂正符号として生成する場合に、符号エンコード部２３がｎｄ個未満のシンボルを用いて生成した誤り訂正符号（例えば、前述のＥｑ）を中間結果と呼ぶこととする。
【００５１】
また、書込み制御部２４は、シンボル群Ｓ（ｊ）をメモリＩ／Ｆ２７へ転送し（ステップＳ４７）、ステップＳ４２で決定したＮＡＮＤメモリ３上の書込み領域へシンボル群Ｓ（ｊ）を書込むよう指示する。書込み制御部２４は、シンボル群Ｓ（ｊ）のメモリＩ／Ｆ２７への転送が完了するまで待ち（ステップＳ４８）、転送完了後にシンボル群Ｓ（ｊ）に対応するデータバッファ２２上の領域を解放する（ステップＳ４９）。
【００５２】
その後、書込み制御部２４は、符号を構成するｋ個の情報シンボル群をメモリＩ／Ｆ２７へ転送したか否かを判断し（ステップＳ５０）、ｋ個のシンボル群をメモリＩ／Ｆ２７へ転送していない場合（ステップＳ５０  Ｎｏ）、ｊをｊ＋１に更新して（ステップＳ５１）ステップＳ４２へ戻る。
【００５３】
ｋ個の情報シンボル群をメモリＩ／Ｆ２７へ転送した場合（ステップＳ５０  Ｙｅｓ）、書込み制御部２４は、冗長シンボル群の書込み領域を決定する（ステップＳ５２）。そして、書込み先のチップが動作中であるか否かを判断し（ステップＳ５３）、動作中でない場合（ステップＳ５３  Ｎｏ）、冗長シンボル群を符号エンコード部２３からメモリＩ／Ｆ２７へ転送し（ステップＳ５５）、当該冗長シンボル群の転送完了を待つ（ステップＳ５６）。転送完了後、書込み制御部２４は、符号データ単位を構成するｎ個のシンボルをメモリＩ／Ｆ２７へ転送したか否かを判断する（ステップＳ５７）。
【００５４】
ステップＳ５２で、書込み先のチップが動作中であった場合（ステップＳ５３  Ｙｅｓ）、当該チップの動作が完了するまで待ち（ステップＳ５４）、ステップＳ５５へ進む。
【００５５】
符号データ単位を構成するｎ個のシンボル群をメモリＩ／Ｆ２７へ転送した場合（ステップＳ５７  Ｙｅｓ）、符号化エンコード部を初期化し（ステップＳ５８）、書込み処理を終了する。また、符号データ単位を構成するｎ個のシンボル群をメモリＩ／Ｆ２７へ転送していない場合（ステップＳ５７  Ｎｏ）、ステップＳ５２へ戻り転送していない冗長シンボル群についてステップＳ５２以降の処理を実施する。
【００５６】
ステップＳ４８およびステップＳ５６の後、並行して、ＮＡＮＤメモリ３において、メモリＩ／Ｆ２７から転送されたシンボル群のセルへの書込み（プログラム）が実施される（ステップＳ５９）。
【００５７】
なお、中間結果を用いた演算のできないアルゴリズムにより誤り訂正符号を生成する場合には、情報シンボル群ごとに符号エンコード部２３およびメモリＩ／Ｆ２７へ順次入力するのではなく、最終的な誤り訂正符号が生成されるまで情報シンボルをメモリＩ／Ｆ２７へ転送せずに、最終的な誤り訂正符号が生成された後に全情報シンボル群および冗長シンボル群をメモリＩ／Ｆ２７へ転送して、転送後にデータバッファ２２を解放するようにすればよい。
【００５８】
図１０は、１符号データ単位内のｋ個の情報シンボル群に相当するデータ量がデータバッファに溜まる前に書込み処理を開始する場合の書込み制御部２４における書込み処理手順の一例を示すフローチャートである。ステップＳ６１〜ステップＳ６９は、処理対象のシンボル群を１つのＳ（ｊ）のみとする以外は、図９のステップＳ６１〜ステップＳ４９と同様である。ステップＳ６９の後、書込み制御部２４は、符号を構成するｋ個のシンボル群をメモリＩ／Ｆ２７へ転送したか否かを判断し（ステップＳ７０）、ｋ個のシンボル群をメモリＩ／Ｆ２７へ転送していない場合（ステップＳ７０  Ｎｏ）、処理を終了する（その後、次のシンボル群の処理へ移行する）。
【００５９】
符号を構成するｋ個のシンボル群をメモリＩ／Ｆ２７へ転送した場合（ステップＳ７０  Ｙｅｓ）、図９のステップＳ５２〜Ｓ５８と同様にステップＳ７１〜ステップＳ７７を実施する。
【００６０】
図１０のフローチャートによれば、データバッファ２２に情報シンボル群１個分に相当するデータが溜まればメモリI/Fへの転送が可能なので、図８における閾値Ａおよびデータバッファ２２のサイズを情報シンボル群ｋ個分より小さくすることが可能である。また、ここでは、シンボル群単位でメモリＩ／Ｆ２７へ転送してデータバッファ２２をシンボル群単位で解放するようにしたが、複数シンボル単位でメモリＩ／Ｆ２７へ転送してデータバッファ２２を複数シンボル群単位で解放するようにしてもよい。
【００６１】
図１１は、本実施の形態のデータバッファ２２の使用例を示す図である。図１１の上の２段は、従来の記憶装置におけるデータバッファの使用例を示しており、１段目がダブルバッファ（バッファＷＢ＃０、ＷＢ＃１の２つのバッファ）を用いる例を示し、２段目がシングルバッファ（バッファＷＢ）を示している。３段目は、本実施の形態のデータバッファ２２の使用例を示しており、データバッファ２２がシングルバッファ（バッファＷＢ）の例を示している。
【００６２】
図１１は、横軸は模式的に示した時間を示しており、横線のハッチングはホスト受信の操作を示し、斜め線のハッチングはＤａｔａ−ｉｎ（データバッファ２２からＮＡＮＤメモリ３への転送）を示し、格子状のハッチングはプログラム（ｔＰｒｏｇ；セルへの書込み）を示している。また、各バッファ（ＷＢ＃０、ＷＢ＃１、ＷＢ）の矩形中にＤａｔａ＃ｉ（ｉはデータの番号、ｉ＝０，１，…）と記載されている部分は、当該バッファがＤａｔａ＃ｉにより使用されていることを示している。また、図１１の斜め上向きの黒矢印は、従来（上２段）ではプログラム完了、本実施形態（下段）では転送完了を示しており、各例においてはこのタイミングでデータバッファを解放する。
【００６３】
なお、図１１では、データバッファ２２がｍページ（ｍシンボル群）格納可能である場合に、１シンボル群ずつデータバッファ２２上の領域を開放するのではなく、ｍページ分まとめて解放する例を示している。Ｄａｔａ＃ｉ（ｉ＝０，１，…）は、それぞれｍページ分のデータであるとする。
【００６４】
２段目に示すように、従来のシングルバッファの場合は、プログラムが終了してから、バッファを解放するため、Ｄａｔａ＃０のプログラムが終了（再書込みも含む）するまで次のデータであるＤａｔａ＃１をバッファに格納することができない。このため、Ｄａｔａ＃０のプログラム終了より前にホストからデータが送信されても書込み準備ができないため、ホストからの送信を待機させる必要があった。
【００６５】
一方、１段目に示すように、従来のダブルバッファを用いる場合は、Ｄａｔａ＃０のプログラム終了より前にホストからデータを受信すると、ＷＢ＃０は使用することができないが、ＷＢ＃１を使用することができる。このため、書込みの速度は、２段目のシングルバッファの場合に比べ向上する。しかし、シングルバッファに比べ倍のバッファが必要となる。
【００６６】
これに対し、３段目に示す本実施の形態では、Ｄａｔａ−ｉｎ後にすぐにデータバッファ２２を解放する。このため、従来のシングルバッファの場合に比べ書込み速度を向上させることができ、また従来のダブルバッファの場合に比べバッファの量を削減することができる。
【００６７】
なお、ここでは、ｍページ分のデータをまとめて転送してデータバファ２２を解放する例を示したが、ｍページ未満の１つ以上のシンボル群（ページ）単位で転送を実施してデータバファ２２を解放する場合も、転送および解放がデータバッファ２２の一部を単位として転送および解放が実施される以外は、上述の例と同様である。ホスト４からの送信されたデータは、データバッファ２２の空いている領域に格納することができる。
【００６８】
次に、本実施の形態のシンボル群のＮＡＮＤメモリ３上の書込み位置について説明する。上述したように、本実施の形態では、１つの誤り訂正符号を構成するシンボル群をそれぞれ異なるページに格納することが望ましい。図１２は、ＮＡＮＤメモリ３内の同一ブロックの異なるページに１つの誤り訂正符号を構成するシンボル群を格納する例を示す図である。図１２に示すように、同一ブロックの異なるページに分散させて格納するようにしてもよい。
【００６９】
図１３は、ＮＡＮＤメモリ３内の異なるブロックに１つの誤り訂正符号を構成するシンボル群を格納する例を示す図である。図１３に示すように、異なるブロックに分散させて格納すると、ページ単位のエラーだけでなくブロック単位のエラーにも対応できる。特に、符号エンコード部２３で生成する誤り訂正符号の訂正能力がｔシンボルの場合に、１つの誤り訂正符号に含まれる各シンボルのうち同一ブロック上に記録するシンボルの数はｔシンボル以下とすると、ブロック単位の故障を修復することができる。
【００７０】
図１４は、ＮＡＮＤメモリ３内の異なるチップ（メモリチップ）の異なるプレーンに１つの誤り訂正符号を構成するシンボル群を格納する例を示す図である。図１４に示すように、異なるチップおよびプレーンに分散させて格納すると、ページ単位のエラーだけでなくチップ単位のエラーにも対応できる。なお、図１４では、プレーンを分散させているがプレーンは同一で異なるチップに分散させるようにしてもよい。特に、符号エンコード部２３で生成する誤り訂正符号の訂正能力がｔシンボルの場合に、１つの誤り訂正符号に含まれる各シンボルのうち同一チップ上に記録するシンボルの数はｔシンボル以下とすると、チップ単位の故障を修復することができる。
【００７１】
以上のように、本実施の形態では、データの書込み時に誤り訂正符号化処理により冗長データを生成して情報データとともに冗長データをＮＡＮＤメモリ３へ格納しておき、書込みエラーの有無に関わらず、再書込みを実施しないようにした。そして、書込みエラーがあった場合には、読出し時に誤り訂正符号を用いた復号を行うようにした。このため、書込み速度の低下を防ぐことができる。さらに、メモリＩ／Ｆ２７へのデータ転送が完了したデータに対応するデータバッファ２２の領域を解放するようにした。このため、従来に比べ、バッファの容量を削減することができ、また同一のバッファ容量の場合は従来に比べ書込み速度を向上させることができる。
【００７２】
（第２の実施の形態）
図１５は、第２の実施の形態にかかる記憶装置１ａの構成例を示すブロック図である。記憶装置１ａは、メモリコントローラ２ａとＮＡＮＤメモリ（不揮発性メモリ）３を備える。第１の実施の形態と同様の機能を有する構成要素は、第１の実施の形態と同一の符号を付して重複する説明を省略する。
【００７３】
なお、本実施の形態の第１符号エンコード部２３は、第１の実施の形態の符号エンコード部２３と同様であり、本実施の形態の第１符号デコード部２６は、第１の実施の形態の符号デコード部２６と同様である。
【００７４】
本実施の形態では、第１の実施の形態で述べた書込みエラーに対する誤りを訂正するための誤り訂正処理（第１誤り訂正処理）に加え、同一ページ内にデータと当該データに対応する冗長シンボル（冗長データ）とを含む誤り訂正処理（第２誤り訂正処理）を実施する。第１の実施の形態で述べたように、ページ間にまたがって１つの誤り訂正符号（第１誤り訂正符号）に対応するデータを格納する場合、誤り訂正を行う際には、対応するデータを含むページを全て読出すことになる。これに対し、同一ページ内にデータと当該データに対応する冗長データとを含む場合、ページ単位の読出しを行えば誤り訂正処理が実施することができる。
【００７５】
本実施の形態では、リードエラー検出部２８ａは、ＮＡＮＤメモリ３からの読出し時に第２誤り訂正処理を行って、第２誤り訂正処理で訂正能力を超えて訂正不可と判定された場合に、リードエラーが検出されたと判断する。そして、読出し制御部２５は、リードエラーが検出された場合、エラーが検出されたデータに対応する第１誤り訂正符号（第１符号エンコード部２３により生成された誤り訂正符号）を構成するデータを全て読出し、第２符号デコード部４２へ入力する。第２符号デコード部４２は、ページごとにページ内の第２誤り訂正符号を用いた誤り訂正処理を行う。読出し制御部２５は、第２符号デコード部４２による誤り訂正処理後のデータおよび第１誤り訂正符号の冗長シンボル群を第１符号デコード部２６へ入力する。第１符号デコード部２６は、入力されたデータおよび冗長シンボル群に基づいて誤り訂正処理を実施する。
【００７６】
図１６は、本実施の形態の誤り訂正符号の構成例を示す図である。図１６では、図６の例と同様に、ＲＳ符号（Ｎ＝３２、Ｋ＝３０）を第１誤り訂正符号として用いた例を示している。本実施の形態の書込み処理では、第１の実施の形態と同様に第１誤り訂正符号を生成した後、書込み制御部２４は第２符号エンコード部４１へ各シンボル群を入力し、第２符号エンコード部４１は、シンボル群ごとにシンボル群内のデータ（情報データ）に基づいて冗長データを生成する。書込み制御部２４は、情報データと対応する冗長データとをＮＡＮＤメモリ３の同一ページに格納するよう制御する。図１６の例では、５１２ｂｙｔｅごとに第２誤り訂正符号を生成しているが、第２誤り訂正符号を構成する情報データのサイズは、これに限定されない。また、図１６では、情報データごとに、情報データの後に当該情報データに対応する冗長データを配置しているが、第２誤り訂正符号のページ内の配置位置はこれに限定されない。
【００７７】
以上のように、本実施の形態では、書込み時に、再書込みを実施せず第１の実施の形態と同様の誤り訂正符号である第１誤り訂正符号を生成するとともに、同一ページ内のデータに基づいて第２誤り訂正符号を生成するようにした。そして、ＮＡＮＤメモリ３からの読出し時に、第２誤り訂正符号を用いた誤り訂正処理により訂正不可であった場合に、第１誤り訂正符号を用いた誤り訂正処理を実施するようにした。このため、ランダム誤り等については第２誤り訂正符号を用いて訂正することが可能となり、読出し対象のページ以外のページを読出して第１誤り訂正符号を用いた誤り訂正処理を行う頻度が低下する。
【００７８】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００７９】
１，１ａ  記憶装置、２，２ａ  メモリコントローラ、３  ＮＡＮＤメモリ、４  ホスト、２１，４１インターフェース部、２３  符号エンコード部、２４  書込み制御部、２５  読出し制御部、２６  符号デコード部、２７  メモリＩ／Ｆ、２８，２８ａ  リードエラー検出部、４１  第２符号エンコード部、４２  第２符号デコード部。
【図１】
2013131095.tif 000003
【図２】
2013131095.tif 000004
【図３】
2013131095.tif 000005
【図４】
2013131095.tif 000006
【図５】
2013131095.tif 000007
【図６】
2013131095.tif 000008
【図７】
2013131095.tif 000009
【図８】
2013131095.tif 000010
【図９】
2013131095.tif 000011
【図１０】
2013131095.tif 000012
【図１１】
2013131095.tif 000013
【図１２】
2013131095.tif 000014
【図１３】
2013131095.tif 000015
【図１４】
2013131095.tif 000016
【図１５】
2013131095.tif 000017
【図１６】
2013131095.tif 000018