(57)【要約】【課題】データをリードソロモン符号で符号化するにあたり、付加するダミーデータの少ないメモリコントローラおよびフラッシュメモリシステムを提供する。【解決手段】フラッシュメモリに供給されるユーザデータを所定のバイト数単位で順次連結し、連結したユーザデータを所定のシンボル長単位で切り出す。このシンボル長単位の切り出しで、最後に残ったシンボル長に満たないユーザデータにだけダミーデータを付加する。【選択図】図３
2007179480.tif 000002
【特許請求の範囲】
【請求項１】
ホストシステムからの命令に応答してフラッシュメモリへのアクセスを制御するメモリコントローラであって、
前記フラッシュメモリのユーザ領域に書き込まれるユーザデータを供給する書き込みデータ供給手段と、
前記ユーザデータを受け取り、該ユーザデータを所定のバイト数に達するまで順次連結し、該連結したデータを所定のシンボル長単位で順次切り出して出力するシンボルデータ供給手段と、
前記所定のバイト数の前記ユーザデータから切り出される最終データのデータ長が前記所定のシンボル長に満たないときに該最終データに所定のダミーデータを付加するダミーデータ付加手段と、
前記シンボルデータ供給手段からシンボル長単位で出力されるデータに基づいて、前記所定のバイト数の前記ユーザデータに対するリードソロモン符号で構成された誤り訂正符号を生成する誤り訂正符号生成手段と、
前記所定のバイト数の前記ユーザデータが前記フラッシュメモリの消去状態と一致するときに前記誤り訂正符号が前記フラッシュメモリの消去状態に一致するような変換処理を前記誤り訂正符号に対して施す変換手段と、
前記変換処理が施された前記誤り訂正符号を前記所定のバイト数の前記ユーザデータが書き込まれたユーザ領域に対応する冗長領域に書き込む冗長データ書き込み手段と、
を備えることを特徴とするメモリコントローラ。
【請求項２】
前記ユーザ領域に書き込まれているユーザデータを読み出すユーザデータ読み出し手段と、
前記冗長領域に書き込まれている前記変換処理が施された前記誤り訂正符号を読み出す冗長データ読み出し手段と、
前記冗長データ読み出し手段によって読み出された前記変換処理が施された前記誤り訂正符号を前記変換処理前の前記誤り訂正符号に戻す逆変換手段と、
前記逆変換手段から供給される前記変換処理前の前記誤り訂正符号に基づいて、前記シンボルデータ供給手段を介して供給されるシンボル長単位のデータの誤りを訂正する誤り訂正符号生成手段と、
をさらに備えることを特徴とする請求項１に記載のメモリコントローラ。
【請求項３】
前記所定のバイト数が５１２バイトであることを特徴とする請求項１または２に記載のメモリコントローラ。
【請求項４】
前記シンボルデータ供給手段が前記ユーザデータを前記フラッシュメモリのバス幅と同一のビット数単位で順次連結し、該連結したデータを所定のシンボル長単位で切り出すことを特徴とする請求項１から３のいずれか１項に記載のメモリコントローラ。
【請求項５】
請求項１から４のいずれか１項に記載のメモリコントローラと、
フラッシュメモリと、
から構成されることを特徴とするフラッシュメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリコントローラおよび当該メモリコントローラを備えるフラッシュメモリシステムに関する。
【背景技術】
【０００２】
近年、不揮発性の記憶媒体であるフラッシュメモリの開発が行われ、デジタルカメラ等の情報機器（ホストシステム）の記憶媒体として普及している。
【０００３】
このような機器が扱うデータが大容量化したことに伴い、フラッシュメモリの大容量化・高密度化が進んでいる。このような大容量化・高密度化したフラッシュメモリを、ホストシステムのＯＳ（Operating System）を格納するなどの高信頼性を要求される分野への適用がある。
【０００４】
ＮＡＮＤ型フラッシュメモリは、大容量・高密度であることを特徴とし、近年特に多く用いられるフラッシュメモリの一種である。ＮＡＮＤ型フラッシュメモリでは、データは１セクタである５１２バイト単位で管理され、また、１セクタに対して冗長領域が１６バイト与えられている。
【０００５】
ＮＡＮＤ型フラッシュメモリからデータを読み出す、ＮＡＮＤ型フラッシュメモリにデータを書き込むとき、読み出し・書き込みエラーが発生しうる。これらのエラーに対しては、従来はハミング符号のような簡単な符号を用いることにより、誤り訂正を行ってきた。しかし、ホストシステムのＯＳを格納するなどの高信頼性を要求される分野にフラッシュメモリを適用するためには、多くのビットを訂正できる強力な誤り訂正符号が必要になる。このような誤り訂正符号として、たとえば、リードソロモン（Reed-Solomon）符号が知られている。
【０００６】
リードソロモン符号は、符号化できる最大符号長に対して数学的な制限がある。１シンボルのビット数をｎとすると、リードソロモン符号の最大符号長（最大シンボル数）Ｎは
（２ｎ−１）となる。すなわち、１シンボルのビット数を８ビットとするならば、リードソロモン符号ではリードソロモン符号によって生成される誤り訂正符号（ＥＣＣ）を含めて、２５５シンボルの符号長まで符号化できる。
【０００７】
ＮＡＮＤ型フラッシュメモリでは、データは１セクタである５１２バイト単位で管理される。この１セクタ（５１２バイト）のデータをリードソロモン符号で符号化する場合、ｎ≧１０となり、１シンボルを最低１０ビット（最大シンボル数は１０２３）として符号化しなければならない。
【０００８】
しかし、フラッシュメモリのデータバスは、通常、1バイト又は複数バイトのバス幅になっており、１シンボルの符号長とデータバスのバス幅とが必ずしも一致しないという問題がある。特許文献１には、データバスのバス幅８ビットのフラッシュメモリにおいて、５１２バイトのデータをリードソロモン符号で符号化する際に、シンボル長を１０ビットとし、１バイト（８ビット）のデータを順に読み出してそれぞれに２ビットのダミーデータを付加して、見かけ上１０ビットのデータとして符号化する（すなわち、５１２バイトのデータを５１２シンボルの符号として扱う）技術が開示されている。また、特許文献１には、データバスのバス幅１６ビットのフラッシュメモリにおいて、５１２バイトのデータをリードソロモン符号で符号化する際に、シンボル長を１０ビットとし、１６ビットのデータを順に読み出して１バイト（８ビット）のデータ２個に分解した後、それぞれに２ビットのダミーデータを付加して、見かけ上１０ビットのデータ２個として符号化する技術が開示されている。
【特許文献１】特開平９−２７４５９１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
上述の技術では、データをリードソロモン符号で符号化するにあたり、1バイト（８ビット）のデータに対して、シンボル長に一致させるためのダミーデータを付加している。その結果、1バイト（８ビット）のデータが１シンボルとして扱われ、シンボル長を１０ビットとした場合には、５１２バイトのデータに１２８バイト（１０２４ビット）のダミーデータが付加されることになり、データのエラー訂正の効率が落ちる。
【００１０】
本発明は、上記問題点に鑑みてなされたものであり、データをリードソロモン符号で符号化するときに付加されるダミーデータの少ないメモリコントローラおよびフラッシュメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記課題を解決するため、本発明の第１の観点に係るメモリコントローラは、
ホストシステムからの命令に応答してフラッシュメモリへのアクセスを制御するメモリコントローラであって、
前記フラッシュメモリのユーザ領域に書き込まれるユーザデータを供給する書き込みデータ供給手段と、
前記ユーザデータを受け取り、該ユーザデータを所定のバイト数に達するまで順次連結し、該連結したデータを所定のシンボル長単位で順次切り出して出力するシンボルデータ供給手段と、
前記所定のバイト数の前記ユーザデータから切り出される最終データのデータ長が前記所定のシンボル長に満たないときに該最終データに所定のダミーデータを付加するダミーデータ付加手段と、
前記シンボルデータ供給手段からシンボル長単位で出力されるデータに基づいて、前記所定のバイト数の前記ユーザデータに対するリードソロモン符号で構成された誤り訂正符号を生成する誤り訂正符号生成手段と、
前記所定のバイト数の前記ユーザデータが前記フラッシュメモリの消去状態と一致するときに前記誤り訂正符号が前記フラッシュメモリの消去状態に一致するような変換処理を前記誤り訂正符号に対して施す変換手段と、
前記変換処理が施された前記誤り訂正符号を前記所定のバイト数の前記ユーザデータが書き込まれたユーザ領域に対応する冗長領域に書き込む冗長データ書き込み手段と、
を備えることを特徴とする。
【００１２】
前記ユーザ領域に書き込まれているユーザデータを読み出すユーザデータ読み出し手段と、
前記冗長領域に書き込まれている前記変換処理が施された前記誤り訂正符号を読み出す冗長データ読み出し手段と、
前記冗長データ読み出し手段によって読み出された前記変換処理が施された前記誤り訂正符号を前記変換処理前の前記誤り訂正符号に戻す逆変換手段と、
前記逆変換手段から供給される前記変換処理前の前記誤り訂正符号に基づいて、前記シンボルデータ供給手段を介して供給されるシンボル長単位のデータの誤りを訂正する誤り訂正符号生成手段と、
をさらに備えてもよい。
【００１３】
前記所定のバイト数は５１２バイトであることが好ましい。
【００１４】
前記シンボルデータ供給手段は前記ユーザデータを前記フラッシュメモリのバス幅と同一のビット数単位で順次連結し、該連結したデータを所定のシンボル長単位で切り出してもよい。
【００１５】
上記課題を解決するため、本発明の第２の観点に係るフラッシュメモリシステムは、
上記のメモリコントローラと、
フラッシュメモリと、
から構成されることを特徴とする。
【発明の効果】
【００１６】
本発明によれば、フラッシュメモリに供給されるユーザデータを所定のバイト数単位で順次連結し、連結したユーザデータを所定のシンボル長単位で切り出し、切り出したシンボルデータに基づいてリードソロモン符号で構成された誤り訂正符号を生成している。従って、シンボル長単位で切り出した最後に残ったシンボル長に満たないユーザデータ以外には、ダミーデータが付加されないので、エラー訂正の対象となるシンボル数を従来よりも少なくし、エラー訂正することができる比率を高くすることができる。
【発明を実施するための最良の形態】
【００１７】
以下、本発明の実施形態について、図面を参照して説明する。
【００１８】
図１は、本発明に係るフラッシュメモリシステム１を概略的に示すブロック図である。図１に示すように、フラッシュメモリシステム１は、フラッシュメモリ２と、それを制御するコントローラ３で構成されている。
【００１９】
なお、フラッシュメモリシステム１は、外部バス１３を介してホストシステム４と接続される。ホストシステム４は、ホストシステム４の全体の動作を制御するためのＣＰＵ（Central Processing Unit）、フラッシュメモリシステム１との情報の授受を担うコンパニオンチップ等から構成される。ホストシステム４は、例えば、文字、音声、あるいは画像情報等の種々の情報を処理するパーソナルコンピュータやデジタルスチルカメラをはじめとする各種情報処理装置であってもよい。
【００２０】
フラッシュメモリ２は、ＮＡＮＤ型フラッシュメモリから構成される。ＮＡＮＤ型フラッシュメモリは、不揮発性メモリであり、レジスタと、メモリセルアレイとから構成される。フラッシュメモリ２は、レジスタとメモリセルとの間でデータの複写を行って、データの書き込み又は読み出しを行う。
【００２１】
メモリセルアレイは、複数のメモリセル群と、ワード線とを備える。各メモリセル群は、複数のメモリセルが直列に接続されたものである。ワード線は、メモリセル群の特定のメモリセルを選択するためのものである。このワード線を介して選択されたメモリセルとレジスタとの間で、データの複写、即ち、レジスタから選択されたメモリセルへの複写又は選択されたメモリセルからレジスタへのデータの複写が行われる。
【００２２】
メモリセルアレイを構成するメモリセルは、２つのゲートを備えたＭＯＳトランジスタによって構成される。ここで、上側のゲート、下側のゲートは、それぞれ、コントロールゲート、フローティングゲートと呼ばれており、フローティングゲートに電荷（電子）を注入若しくはフローティングゲートから電荷（電子）を排出することによって、データの書き込み若しくはデータの消去が行われる。
【００２３】
このフローティングゲートは、周囲を絶縁体で囲まれているので、注入された電子は長期間にわたって保持される。なお、フローティングゲートに電子を注入するときは、コントロールゲートが高電位側となる高電圧をコントロールゲートとフローティングゲート間に印加する。また、フローティングゲートから電子を排出するときは、コントロールゲートが低電位側となる高電圧をコントロールゲートとフローティングゲート間に印加する。
【００２４】
ここで、フローティングゲートに電子が注入されている状態が書き込み状態であり、論理値「０」に対応する。また、フローティングゲートから電子が排出されている状態が消去状態であり、論理値「１」に対応する。
【００２５】
このようなフラッシュメモリ２のアドレス空間を図２に示す。フラッシュメモリ２のアドレス空間は、“ページ”及び“ブロック（物理ブロック）”で構成されている。
【００２６】
ページは、フラッシュメモリ２にて行われるデータ読み出し動作及びデータ書き込み動作における処理単位である。物理ブロックは、フラッシュメモリ２にて行われるデータ消去動作における処理単位であり、複数個のページで構成されている。
【００２７】
図２に示したフラッシュメモリでは、１つのページは、１セクタ（５１２バイト）のユーザ領域２５と、１６バイトの冗長領域２６で構成され、１つの物理ブロックは３２個のページで構成されている。なお、１つのページが４セクタのユーザ領域と６４バイトの冗長領域で構成され、１つの物理ブロックが６４個のページで構成されているフラッシュメモリもある。ユーザ領域２５は、ホストシステム４から供給されるユーザデータを記憶するための領域である。
【００２８】
冗長領域２６は、ＥＣＣ（Error Correcting Code）、論理アドレス情報、ブロックステータス（フラグ）等の付加データを記憶するための領域である。
【００２９】
ＥＣＣは、ユーザ領域２５に記憶されているデータに含まれる誤りを検出し、訂正するためのデータであり、後述するＥＣＣブロックにより生成される。
【００３０】
論理アドレス情報は、フラッシュメモリ２の各物理ブロックに含まれている少なくとも１個のページのユーザ領域２５に有効なデータが格納されているとき、そのデータに対応する論理ブロックを特定するための情報である。
【００３１】
なお、ユーザ領域２５に有効なデータが格納されていない物理ブロックについては、そのブロックの冗長領域２６に、論理アドレス情報は格納されていない。
【００３２】
したがって、冗長領域２６に論理アドレス情報が格納されているか否かを判定することにより、その冗長領域２６が含まれている物理ブロックに有効なデータが格納されているか否かを判定することができる。つまり、冗長領域２６に論理アドレス情報が格納されていないとき、その物理ブロックには、有効なデータが格納されていないと判断する。
【００３３】
上述のように、１つの物理ブロックは、複数のページを含んでいる。これらのページには、データの上書きができない。このため、１つのページに格納されたデータのみを書き換えるときであっても、そのページが含まれた物理ブロック内の全ページに格納されたデータを、再度書き込まなければならない。
【００３４】
つまり、通常のデータ書き換えでは、書き換えるページが含まれる物理ブロックの全ページに格納されたデータが、別の消去されている物理ブロックに書き込まれる。この際、データが変更されないページに格納されているデータは、以前に格納されていたデータがそのまま再度書き込まれる。
【００３５】
上記のようにデータを書き換えるにあたっては、通常、書き換えられたデータは、以前に格納されていた物理ブロックとは異なる物理ブロックに書き込まれる。このため、論理ブロックアドレスと物理ブロックアドレスの間の対応関係は、フラッシュメモリ２にてデータが書き換えられる毎に、動的に変化する。
【００３６】
したがって、論理ブロックと物理ブロックとの対応関係を管理する必要があり、通常、この対応関係は、アドレス変換テーブルによって管理される。このアドレス変換テーブルは、各物理ブロックの冗長領域２６に記憶されている論理アドレス情報に基づいて作成される。なお、このような動的なアドレス管理手法は、上述の通り、フラッシュメモリを用いたメモリシステムでは一般的に行われている手法である。
【００３７】
ブロックステータス（フラグ）は、ブロックの良否を示すフラグである。正常にデータの書き込み等を行うことができないブロックは、不良ブロックと判別され、冗長領域２６には、不良ブロックであることを示すブロックステータス（フラグ）が書き込まれる。
【００３８】
このようなフラッシュメモリ２は、コントローラ３から、データ、アドレス情報、内部コマンド等を受信して、データの読み出し処理、書き込み処理、ブロック消去処理、転送処理等の各処理を行う。
【００３９】
ここで、内部コマンドとは、コントローラ３がフラッシュメモリ２に処理の実行を指示するためのコマンドであり、フラッシュメモリ２は、コントローラ３から与えられる内部コマンドに従って動作する。これに対して、外部コマンドとは、ホストシステム４がフラッシュメモリシステム１に対して処理の実行を指示するためのコマンドである。
【００４０】
コントローラ３は、図１に示すように、マイクロプロセッサ６と、ホストインターフェースブロック７と、ワークエリア８と、バッファ９と、フラッシュメモリインターフェースブロック１０と、ＥＣＣブロック１１と、ＲＯＭ（Read Only Memory）１２と、から構成される。これら機能ブロックによって構成されるコントローラ３は、一つの半導体チップ上に集積される。以下に各機能ブロックについて説明する。
【００４１】
マイクロプロセッサ６は、ＲＯＭ１２に記憶されているプログラムに従って、コントローラ３の全体の動作を制御する。例えば、マイクロプロセッサ６は、各種処理等を定義したコマンドセットをＲＯＭ１２から読み出してフラッシュメモリインターフェースブロック１０に供給し、フラッシュメモリインターフェースブロック１０に処理を実行させる。
【００４２】
ホストインターフェースブロック７は、ホストシステム４との間の、データ、アドレス情報、ステータス情報、外部コマンド等の授受を行なう。ホストシステム４よりフラッシュメモリシステム１に供給されるデータ等は、ホストインターフェースブロック７を入口としてフラッシュメモリシステム１の内部（例えば、バッファ９）に取り込まれる。また、フラッシュメモリシステム１からホストシステム４に供給されるデータ等は、ホストインターフェースブロック７を出口としてホストシステム４に供給される。
【００４３】
ワークエリア８は、フラッシュメモリ２の制御に必要なデータが一時的に格納される作業領域であり、複数のＳＲＡＭ（Static Random Access Memory）セルによって構成される。
【００４４】
バッファ９は、フラッシュメモリ２から読み出されたデータ及びフラッシュメモリ２に書き込むべきデータを一時的に蓄積する。すなわち、フラッシュメモリ２から読み出されたデータは、ホストシステム４が受け取り可能な状態となるまでバッファ９に保持され、フラッシュメモリ２に書き込むべきデータは、フラッシュメモリ２が書き込み可能な状態となるまでバッファ９に保持される。
【００４５】
フラッシュメモリインターフェースブロック１０は、内部バス１４を介して、フラッシュメモリ２とデータ、アドレス情報、ステータス情報、内部コマンド等の授受を行う。より詳細には、フラッシュメモリインターフェースブロック１０は、アドレス処理部、コマンドレジスタ、命令処理ブロック等から構成される。
【００４６】
フラッシュメモリインターフェースブロック１０は、命令処理ブロックによって出力される内部コマンド、アドレス情報等をフラッシュメモリ２に供給することにより、フラッシュメモリ２に読み出し、書き込み等を実行させる。
【００４７】
ＥＣＣブロック１１は、フラッシュメモリ２に書き込むデータ（ユーザデータ）に付加されるＥＣＣを生成するとともに、フラッシュメモリ２から読み出したデータに付加されたＥＣＣに基づいて、読み出したデータに含まれる誤りを検出・訂正する。
【００４８】
ＲＯＭ１２は、マイクロプロセッサ６による処理の手順を定義するプログラムを格納する不揮発性の記憶素子である。具体的には、ＲＯＭ１２は、例えば、アドレス変換テーブルの作成等の処理手順を定義するプログラムを格納する。
【００４９】
ここで、ＥＣＣブロック１１について図３および図４を用いて説明する。図３はフラッシュメモリ２へデータを書き込む処理におけるＥＣＣブロック１１の動作を説明するための図である。図４はフラッシュメモリ２からデータを読み出す処理におけるＥＣＣブロック１１の動作を説明するための図である。
【００５０】
ＥＣＣブロック１１は、ＥＣＣレジスタ３０と、バッファレジスタ３２と、誤り訂正符号・復号器３３と、マスク回路３４とから構成される。
【００５１】
ＥＣＣレジスタ３０は、フラッシュメモリ２の冗長領域２６から読み出した誤り訂正符号を一時的に保持する。
バッファレジスタ３２は、バッファ９とフラッシュメモリ２とを接続する内部バス１４に接続され、バッファ９またはユーザ領域２５から読み出したデータを一時的に保持する。内部バス１４に接続されたフラッシュメモリ２のデータバスは８ビットのバス幅を有し、８ビット単位でデータを伝送する。これに対応し、図５を参照して後述するように、バッファレジスタ３２は、８ビットのレジスタを２つ備えている。
誤り訂正符号・復号器３３は、フラッシュメモリ２への書き込み処理の時に、バッファレジスタ３２からフラッシュメモリ２に書き込むユーザデータをリードソロモン符号の所定のシンボル長に変換したシンボルデータを受け取り、そのシンボルデータに基づいてリードソロモン符号の誤り訂正符号を生成する。フラッシュメモリ２からの読み出し処理の時に、フラッシュメモリ２からユーザデータを、マスク回路３４から誤り訂正符号を受け取り、誤り訂正符号に基づいて読み出しデータの誤りを検出・訂正する。
マスク回路３４は、誤り訂正符号・復号器３３から入力された誤り訂正符号に対してあらかじめ設定されている第１の変換処理を施し、フラッシュメモリ２の冗長領域２６から読み出された誤り訂正符号に対して第２の変換処理を施す。
この第１の変換処理では、フラッシュメモリ２のユーザ領域２５に書き込まれる５１２バイト（４０９６ビット）のビットデータがすべて消去状態（論理値の“１”）のときに、変換後の誤り訂正符号のビットデータがすべて消去状態（論理値の“１”）になるような変換が行われる。
従来のハミング符号を用いた場合、４０９６ビットのデータがすべて論理値の“１”（消去状態）であるとき、誤り訂正符号・復号器３３が生成する誤り訂正符号のすべてのビットは“１”（消去状態）となるが、リードソロモン符号を用いた場合、４０９６ビットのデータがすべて論理値の“１”（消去状態）であっても、誤り訂正符号・復号器２２が生成する誤り訂正符号のすべてのビットが“１”にならない。このリードソロモン符号を用いた場合の不整合を解消するため、誤り訂正符号・復号器３３で生成された誤り訂正符号（ＥＣＣ）に対して第１の変換処理を施している。
一方、第２の変換処理では、フラッシュメモリ２の冗長領域２６から読み出した第１の変換を施された誤り訂正符号（ＥＣＣ−Ｍ）が、第１の変換を施す前の誤り訂正符号（ＥＣＣ）に戻るような変換が行われる。又、誤り訂正符号・復号器３３は、第２の変換処理を施した誤り訂正符号（ＥＣＣ）、つまり、第１の変換を施す前の誤り訂正符号に基づいて、フラッシュメモリ２のユーザ領域２５から読み出したデータに含まれる誤りを検出・訂正する。
【００５２】
次に、バッファレジスタ３２の構成について、図５を用いて説明する。
【００５３】
バッファレジスタ３２は内部バス１４に接続され、フラッシュメモリ２のデータバスと同じバス幅の８ビットのビット長を有する第１レジスタ４０と第２レジスタ４１との２つのレジスタを備える。従って、バッファレジスタ３２は８ビットのデータ２つを格納できる。また、バッファレジスタ３２は、読み出し位置を示す読み出し位置ポインタＲＰを備える。
【００５４】
本実施形態においては、リードソロモン符号によるシンボル長は１０ビットとし、誤り訂正符号・復号器３３は、このシンボル長（１０ビット）ずつデータを読み込んで符号化・復号化を行うものとする。又、誤り訂正符号・復号器３３は、８シンボルの誤り訂正符号（ＥＣＣ）を生成し、この８シンボルの誤り訂正符号（ＥＣＣ）に基づいて５シンボルの誤り検出と４シンボルの誤り訂正をすることができるように設定されている。
【００５５】
以下に、１０ビットを１シンボルとするリードソロモン符号を例にとり、ホストシステム４から与えられる５１２バイトのデータをユーザ領域２５に書き込む場合のＥＣＣブロック１１の動作を、図３を参照して説明する。
【００５６】
ホストシステム４から与えられたデータは、いったんバッファ９に蓄積され、これらの蓄積されたデータが内部バス１４を介してフラッシュメモリ２に書き込まれる。
【００５７】
図６（ａ）は、バッファ９からフラッシュメモリ２のデータバスのバス幅である８ビット単位で内部バス１４に出力される５１２バイトのデータを示している。バッファ９に蓄積されたデータは、先頭から順に、Ｄａｔａ０、Ｄａｔａ１、Ｄａｔａ２の順にＤａｔａ５１１まで、８ビット単位で内部バス１４を介してフラッシュメモリ２に供給され、ユーザデータとしてフラッシュメモリ２のユーザ領域２５に書き込まれる。これら８ビットのデータは、ビットの最下位から数えて０ビット目、１ビット目の順に、最上位が７ビット目となる。また、図６（ａ）には、Ｄａｔａ１［１：０］という記載があるが、これは、Ｄａｔａ１のうち０ビット目から１ビット目までのビット列（２ビット）を意味する。
【００５８】
また、バッファ９から８ビット単位で出力されたデータは、内部バス１４を介してバッファレジスタ３２にも供給される。
バッファレジスタ３２は、バッファ９から供給されたデータを一時的に保持し、所定のシンボル長（１０ビット）ずつ誤り訂正符号・復号器３３に出力する。又、Ｄａｔａ０〜Ｄａｔａ５１１の５１２バイトのデータを所定のシンボル長（１０ビット）ずつ誤り訂正符号・復号器３３に出力していき、最後に所定のシンボル長（１０ビット）に満たないデータが残ったときは、ダミーデータを付加した所定のシンボル長（１０ビット）のデータを生成し、誤り訂正符号・復号器３３に出力する。
図６（ｂ）は、バッファレジスタ３２から誤り訂正符号・復号器３３に出力される所定のシンボル長（１０ビット）のデータを示している。例えば、Ｄａｔａ０［７：０］とＤａｔａ１［１：０］で１個のシンボルデータが生成され、Ｄａｔａ１［７：２］とＤａｔａ２［３：０］で１個のシンボルデータが生成される。このようにＤａｔａ０〜Ｄａｔａ５１１の５１２バイトのデータを連結し、所定のシンボル長（１０ビット）単位で切り出していき、最後に４ビットのダミーデータを付加することにより４１０シンボルのシンボルデータが生成される。
【００５９】
誤り訂正符号・復号器３３は、バッファレジスタ３２から供給されたデータに基づいて、８シンボルの誤り訂正符号（ＥＣＣ）を生成する。８シンボルの誤り訂正符号は、マスク回路３４により第１の変換処理を施され、第１の変換処理を施された誤り訂正符号（ＥＣＣ−Ｍ）が、フラッシュメモリ２の冗長領域２６に書き込まれる。尚、フラッシュメモリ２の冗長領域２６に書き込まれるときに、第１の変換処理を施された８シンボルの誤り訂正符号（ＥＣＣ−Ｍ）は、８ビットのビット列データ（１０バイト）に変換される。
【００６０】
次いで、読み出し処理におけるＥＣＣブロック１１の動作を、図４を用いて説明する。
フラッシュメモリ２のユーザ領域２５から読み出された５１２バイトのデータは、内部バス１４を介してバッファ９に保持されるとともに、内部バス１４を介してバッファレジスタ３２にも転送される。バッファレジスタ３２は、転送された５１２バイトのデータを、所定のシンボル長（１０ビット）ずつ誤り訂正符号・復号器３３に出力する。又、読み出された５１２バイトのデータを所定のシンボル長（１０ビット）ずつ誤り訂正符号・復号器３３に出力していき、最後に所定のシンボル長（１０ビット）に満たないデータが残ったときは、ダミーデータを付加した所定のシンボル長（１０ビット）のデータを生成し、誤り訂正符号・復号器３３に出力する。
【００６１】
一方、マスク回路３４は、冗長領域２６から読み出された第１の変換処理が施されている誤り訂正符号（ＥＣＣ−Ｍ）に第２の変換処理を施して第１の変換処理前の誤り訂正符号（ＥＣＣ）に戻し、第２の変換処理を施した誤り訂正符号（ＥＣＣ）を誤り訂正符号・復号器３３に出力する。尚、冗長領域２６から読み出された第１の変換処理が施されている誤り訂正符号（ＥＣＣ−Ｍ）は、８ビットのビット列データ（１０バイト）なので、所定のシンボル長（１０ビット）のデータ（８シンボル）に変換された後に上記の第２の変換処理が施される。
【００６２】
誤り訂正符号・復号器３３は、バッファレジスタ３２から供給された４１０シンボルのシンボルデータと、マスク回路３４から供給された８シンボルの誤り訂正符号（ＥＣＣ）に基づいて、バッファ９に格納されているユーザデータやＥＣＣレジスタ３０に格納されている誤り訂正符号（ＥＣＣ）の誤りを検出し、訂正することができる。ここで、ユーザデータやＥＣＣの誤りの検出および訂正はシンボル単位で行われる。
【００６３】
次に、バッファレジスタ３２の動作を、図７及び図８を用いて説明する。
【００６４】
図７及び図８は、バッファ９からフラッシュメモリ２のデータバスのバス幅（図７及び図８では８ビット）単位でバッファレジスタ３２（第１レジスタ４０および第２レジスタ４１）に入力される入力データ（フラッシュメモリ２に書き込まれるユーザデータ）と、バッファレジスタ３２に保持される保持データと、バッファレジスタ３２から出力される出力データとを示したものである。
バッファレジスタ３２には、Ｄａｔａ０〜Ｄａｔａ５１１の５１２バイトの入力データがフラッシュメモリ２のデータバスのバス幅（図７及び図８では８ビット）単位で入力される。Ｄａｔａ０〜Ｄａｔａ５１１の入力データは、第１レジスタ４０と第２レジスタ４１に交互に入力されていく。つまり、Ｄａｔａ０が第１レジスタ４０に入力され、Ｄａｔａ１が第２レジスタ４１に入力され、Ｄａｔａ２が第１レジスタ４０に入力され、Ｄａｔａ３が第２レジスタ４１に入力され、以下同様にして、Ｄａｔａ５１１までの入力データが順次バッファレジスタ３２に入力されていく。その結果、バッファレジスタ３２に入力された入力データは、第１レジスタ４０又は第２レジスタ４１に保持される。
一方、第１レジスタ４０又は第２レジスタ４０に保持された保持データは、リードソロモン符号のシンボル長（図７及び図８では１０ビット）単位でバッファレジスタ３２から出力され、誤り訂正符号・復号器３３に供給される。
【００６５】
このバッファレジスタ３２の動作を、順を追って説明する。
【００６６】
まず、図７Ａに示すように、バッファレジスタ３２にＤａｔａ０（Ｄａｔａ０＿０〜Ｄａｔａ０＿７）とＤａｔａ１（Ｄａｔａ１＿０〜Ｄａｔａ１＿７）が入力され、Ｄａｔａ０（Ｄａｔａ０＿０〜Ｄａｔａ０＿７）が第１レジスタ４０に、Ｄａｔａ１（Ｄａｔａ１＿０〜Ｄａｔａ１＿７）が第２レジスタ４１に保持される。ここで、読み出し位置ポインタＲＰは、ビットの最下位から０ビット目、１ビット目と数えて、第１レジスタ４０の０ビット目に設定されているので、第１レジスタ４０の０ビット目から１０ビット分のデータが出力データとして出力される。つまり、第１レジスタ４０に保持されているＤａｔａ１＿０〜Ｄａｔａ１＿７に第２レジスタ４１に保持されているＤａｔａ１＿０〜Ｄａｔａ１＿１が連結された出力データが出力される。この後、読み出し位置ポインタＲＰの設定が第２レジスタ４１の２ビット目に変更される。
【００６７】
読み出し位置ポインタＲＰの設定が第２レジスタ４１の２ビット目に変更されると、図７Ｂに示すように、バッファレジスタ３２にＤａｔａ２（Ｄａｔａ２＿０〜Ｄａｔａ２＿７）が入力され、Ｄａｔａ２（Ｄａｔａ２＿０〜Ｄａｔａ２＿７）が第１レジスタ４０に保持される。ここで、読み出し位置ポインタＲＰが第２レジスタ４１の２ビット目に設定されているので、第２レジスタ４１の２ビット目から１０ビット分のデータが出力データとして出力される。つまり、第２レジスタ４１に保持されているＤａｔａ１＿２〜Ｄａｔａ１＿７に第１レジスタ４０に保持されているＤａｔａ２＿０〜Ｄａｔａ２＿３が連結された出力データが出力される。この後、読み出し位置ポインタＲＰの設定が第１レジスタ４０の４ビット目に変更される。
【００６８】
読み出し位置ポインタＲＰの設定が第１レジスタ４０の４ビット目に変更されると、図７Ｃに示すように、バッファレジスタ３２にＤａｔａ３（Ｄａｔａ３＿０〜Ｄａｔａ３＿７）が入力され、Ｄａｔａ３（Ｄａｔａ３＿０〜Ｄａｔａ３＿７）が第２レジスタ４１に保持される。ここで、読み出し位置ポインタＲＰが第１レジスタ４０の４ビット目に設定されているので、第１レジスタ４０の４ビット目から１０ビット分のデータが出力データとして出力される。つまり、第１レジスタ４０に保持されているＤａｔａ２＿４〜Ｄａｔａ２＿７に第２レジスタ４１に保持されているＤａｔａ３＿０〜Ｄａｔａ３＿５が連結された出力データが出力される。この後、読み出し位置ポインタＲＰの設定が第２レジスタ４１の６ビット目に変更される。
【００６９】
読み出し位置ポインタＲＰの設定が第２レジスタ４１の６ビット目に変更されると、図７Ｄに示すように、バッファレジスタ３２にＤａｔａ４（Ｄａｔａ４＿０〜Ｄａｔａ４＿７）が入力され、Ｄａｔａ４（Ｄａｔａ４＿０〜Ｄａｔａ４＿７）が第１レジスタ４０に保持される。ここで、読み出し位置ポインタＲＰが第２レジスタ４１の６ビット目に設定されているので、第２レジスタ４１の６ビット目から１０ビット分のデータが出力データとして出力される。つまり、第２レジスタ４１に保持されているＤａｔａ３＿６〜Ｄａｔａ３＿７に第１レジスタ４０に保持されているＤａｔａ４＿０〜Ｄａｔａ４＿７が連結された出力データが出力される。この後、読み出し位置ポインタＲＰの設定が第２レジスタ４１の０ビット目に変更される。
Ｄａｔａ５（Ｄａｔａ５＿０〜Ｄａｔａ５＿７）以降の入力データも、Ｄａｔａ５（Ｄａｔａ５＿０〜Ｄａｔａ５＿７）が第２レジスタ４１に、Ｄａｔａ６（Ｄａｔａ６＿０〜Ｄａｔａ６＿７）が第１レジスタ４０にという順番で、第１レジスタ４０又は第２レジスタ４１に保持され、読み出し位置ポインタＲＰの設定されたビットから１０ビット分のデータが出力データとして順次出力される。
【００７０】
又、バッファレジスタ３２に入力された５１２バイトの入力データは、シンボル長（１０ビット）単位の出力データとして出力され、最後のシンボル長（１０ビット）に満たないデータにダミーデータが付加される。このダミーデータの付加について、図８を参照して説明する。
【００７１】
図８には、バッファレジスタ３２に入力されるＤａｔａ５１０以降の入力データとバッファレジスタ３２から出力される出力データが示されている。バッファレジスタ３２に入力されたＤａｔａ５１０（Ｄａｔａ５１０＿０〜Ｄａｔａ５１０＿７）は第１レジスタ４０に保持され、Ｄａｔａ５１１（Ｄａｔａ５１１＿０〜Ｄａｔａ５１１＿７）は第２レジスタ４１に保持される。ここで、図８（ｉ）に示すように、読み出し位置ポインタＲＰが第１レジスタ４０の０ビット目に設定されているので、第１レジスタ４０の０ビット目から１０ビット分のデータが出力データとして出力される。つまり、第１レジスタ４０に保持されているＤａｔａ５１０＿０〜Ｄａｔａ５１０＿７に第２レジスタ４１に保持されているＤａｔａ５１１＿０〜Ｄａｔａ５１１＿１が連結された出力データが出力される。この後、読み出し位置ポインタＲＰの設定が第２レジスタ４１の２ビット目に変更される。更に、図８（ｉｉ）に示すように、Ｄａｔａ５１１＿２〜Ｄａｔａ５１１＿７の６ビットには４ビットのダミーデータが付加され、１０ビットの出力データとしてバッファレジスタ３２から出力される。
【００７２】
尚、最後に残るシンボル長に満たないデータのビット数は、リードソロモン符号を用いた訂正符号（ＥＣＣ）を生成する単位データ（本実施形態においては、Ｄａｔａ０〜Ｄａｔａ５１１の５１２バイトのユーザデータ）に含まれる全ビットの数を、所定のシンボル長のビット数（本実施形態においては１０ビット）で割ったときの余りに一致する。又、最後のシンボル長に満たないデータに付加されるダミーデータの論理値（“０”又は“１”）は適宜設定することができる。
【００７３】
以上に説明したように、本実施形態では、フラッシュメモリ２のデータバスと同じバス幅のレジスタを２個設け、この２個のレジスタにフラッシュメモリ２に供給されるユーザデータが順次保持され、保持されたユーザデータが所定のシンボル長単位で誤り訂正符号・復号器３３に供給される。この際、ユーザデータはフラッシュメモリ２に供給される順番で連結され、所定のシンボル長単位で切り出されて訂正符号・復号器３３に供給され、最後に残ったシンボル長に満たないユーザデータ以外には、ダミーデータが付加されない。従って、エラー訂正の対象となるシンボル数を従来よりも少なくすることができる。例えば、所定のシンボル長が１０ビットの場合、従来は１バイトのデータに２ビットのダミーデータを付加して１０ビットのシンボルデータとしていたので、５１２バイトのユーザデータから５１２シンボルのシンボルデータが生成されるが、上述のようにしてシンボルデータを生成すれば、生成されるシンボル数を４１０シンボルに減少させることができる。
【００７４】
又、リードソロモン符号を用いた誤り訂正では、生成される誤り訂正符号のシンボル数の１／２が訂正することができるシンボル数に一致する。例えば、８シンボル誤り訂正符号を生成する場合には、４シンボルの誤り訂正が可能になる。従って、誤り訂正符号のシンボル数が同じであれば、同じシンボル数の誤りを訂正することができるので、エラー訂正の対象となるシンボル数を少なくした方がエラー訂正することができる比率が高くなる。尚、誤り訂正符号・復号器３３で生成される誤り訂正符号のシンボル数は、冗長領域２６に格納できる誤り訂正符号の容量に合わせて適宜設定することができる。
【００７５】
以上説明したとおり、本発明に係るメモリコントローラは、フラッシュメモリ２に供給されるユーザデータを順次連結し、連結したユーザデータを所定のシンボル長単位で切り出して誤り訂正符号・復号器３３に供給している。従って、最後に残ったシンボル長に満たないユーザデータ以外には、ダミーデータが付加されないので、エラー訂正の対象となるシンボル数を従来よりも少なくし、エラー訂正することができる比率を高くすることができる。
【００７６】
この発明は、上述の実施形態に限定されず、種々の変形及び応用が可能である。
【００７７】
例えば、フラッシュメモリ２のデータバスのバス幅が１６ビットの場合には、バッファレジスタ３２内の第１レジスタ４０及び第２レジスタ４１のビット数を１６ビットに変更することによって同様に実施することができる。この場合、１６ビットの入力データが、第１レジスタ４０と第２レジスタ４１に順次保持され、保持されたデータが所定のシンボル長（１０ビット）単位で切り出され誤り訂正符号・復号器３３に供給される。
図９（ａ）は、バッファ９から１６ビット単位で内部バス１４に出力される５１２バイトのデータを示している。バッファ９に蓄積されたデータは、先頭から順に、Ｄａｔａ０、Ｄａｔａ１、Ｄａｔａ２の順にＤａｔａ２５５まで、１６ビット単位で内部バス１４を介してフラッシュメモリ２に供給され、ユーザデータとしてフラッシュメモリ２のユーザ領域２５に書き込まれる。これら１６ビットのデータは、ビットの最下位から数えて０ビット目、１ビット目の順に、最上位が１５ビット目となる。また、図９（ａ）には、Ｄａｔａ０［１０：１５］という記載があるが、これは、Ｄａｔａ０のうち１０ビット目から１５ビット目までのビット列（６ビット）を意味する。
また、バッファ９から１６ビット単位で出力されたデータは、内部バス１４を介してバッファレジスタ３２にも供給される。
バッファレジスタ３２は、バッファ９から供給されたデータを一時的に保持し、所定のシンボル長（１０ビット）ずつ誤り訂正符号・復号器３３に出力する。又、Ｄａｔａ０〜Ｄａｔａ２５５の５１２バイトのデータを所定のシンボル長（１０ビット）ずつ誤り訂正符号・復号器３３に出力していき、最後に所定のシンボル長（１０ビット）に満たないデータが残ったときは、ダミーデータを付加した所定のシンボル長（１０ビット）のデータを生成し、誤り訂正符号・復号器３３に出力する。
図９（ｂ）は、バッファレジスタ３２から誤り訂正符号・復号器３３に出力される所定のシンボル長（１０ビット）のデータを示している。例えば、Ｄａｔａ０［９：０］で１個のシンボルデータが生成され、Ｄａｔａ０［１５：１０］とＤａｔａ１［３：０］で１個のシンボルデータが生成される。このようにＤａｔａ０〜Ｄａｔａ２５５の５１２バイトのデータを連結し、所定のシンボル長（１０ビット）単位で切り出していき、最後に４ビットのダミーデータを付加することにより４１０シンボルのシンボルデータが生成される。
【００７８】
リードソロモン符号のシンボル長は、リードソロモン符号理論における生成多項式が成り立つ範囲で、誤り訂正符号を生成する単位（ユーザデータの容量）に応じて適宜設定することができる。例えば、２０４８バイト（４セクタ）単位で誤り訂正符号を生成する場合には、それに応じてリードソロモン符号のシンボル長を増やせばよい。
【００７９】
又、シンボル長を短くするために（１シンボルのビット数を減らすために）、５１２バイト（１セクタ）のユーザデータを複数個に分割して、分割したユーザデータ単位で誤り訂正符号を生成するようにしてもよい。
【図面の簡単な説明】
【００８０】
【図１】フラッシュメモリシステムの一例を示すブロック図である。
【図２】フラッシュメモリのアドレス空間の構造の一例を示す図である。
【図３】バッファからフラッシュメモリへデータを書き込む際のデータの流れを示す図である。
【図４】フラッシュメモリからバッファへデータを書き込む際のデータの流れを示す図である。
【図５】バッファレジスタの一例を示すブロック図である。
【図６】（ａ）は、データバスのバス幅が８ビットのフラッシュメモリに５１２バイトのデータを格納したときのバッファのデータ状態を示す図である。（ｂ）は、（ａ）で示したデータがどのような形式で誤り訂正符号・復号器に出力されるかを示す図である。
【図７Ａ】バッファレジスタからデータを誤り訂正符号・復号器に供給する処理を示す図である。
【図７Ｂ】バッファレジスタからデータを誤り訂正符号・復号器に供給する処理を示す図である。
【図７Ｃ】バッファレジスタからデータを誤り訂正符号・復号器に供給する処理を示す図である。
【図７Ｄ】バッファレジスタからデータを誤り訂正符号・復号器に供給する処理を示す図である。
【図８】バッファレジスタからデータを誤り訂正符号・復号器に供給する処理を示す図である。
【図９】（ａ）は、データバスのバス幅が１６ビットのフラッシュメモリに５１２バイトのデータを格納したときのバッファのデータ状態を示す図である。（ｂ）は、（ａ）で示したデータがどのような形式で誤り訂正符号・復号器に出力されるかを示す図である。
【符号の説明】
【００８１】
１    フラッシュメモリシステム
２    フラッシュメモリ
３    コントローラ
４    ホストシステム
６    マイクロプロセッサ
７    ホストインターフェースブロック
８    ワークエリア
９    バッファ
１０  フラッシュメモリインターフェースブロック
１１  ＥＣＣブロック
１２  ＲＯＭ
１３  外部バス
１４  内部バス
２５  ユーザ領域
２６  冗長領域
３０  ＥＣＣレジスタ
３２  バッファレジスタ
３３  誤り訂正符号・復号器
３４  マスク回路
４０  第１レジスタ
４１  第２レジスタ
【図１】
2007179480.tif 000003
【図２】
2007179480.tif 000004
【図３】
2007179480.tif 000005
【図４】
2007179480.tif 000006
【図５】
2007179480.tif 000007
【図６】
2007179480.tif 000008
【図７Ａ】
2007179480.tif 000009
【図７Ｂ】
2007179480.tif 000010
【図７Ｃ】
2007179480.tif 000011
【図７Ｄ】
2007179480.tif 000012
【図８】
2007179480.tif 000013
【図９】
2007179480.tif 000014