(57)【特許請求の範囲】
【請求項１】
複数チャネルの各不揮発性メモリに対してデータの入出力を制御するチャネル制御手段と、
前記各不揮発性メモリに記憶されるデータを使用して、チャネル間の誤り検出訂正処理が可能な符号化データを生成する符号化手段と、
前記チャネル制御手段により前記符号化データを前記各チャネルに並列に書き込むときに論理ブロック単位で管理し、かつ前記符号化データに含まれるパリティデータを前記論理ブロック中の１つのプレーンに割り当てて管理するデータ制御手段とを具備し、
前記データ制御手段は、
前記論理ブロックが前記複数のチャネルと、第１及び第２のプレーンのマトリックスとして構成されている場合に、前記パリティデータを前記第１または第２のプレーンのいずれかに割り当てて管理するデータ記憶装置。
【請求項２】
前記チャネル制御手段から読み出される前記符号化データに対して誤り検出訂正処理を実行する復号化手段を具備する請求項１に記載のデータ記憶装置。
【請求項３】
前記データ制御手段は、
前記符号化データの生成時に使用される元データと前記パリティデータの符号中次数情報と前記論理ブロック中の位置情報を関連付けて、前記論理ブロック中において前記パリティデータを格納するプレーンにおいて前記パリティデータに割り当てられるチャネル以外の各チャネルに前記元データを割り当てる請求項１に記載のデータ記憶装置。
【請求項４】
前記復号化手段は、
誤り検出訂正処理時に、前記データ制御手段から転送される前記符号化データを入力するときに、前記論理ブロックと前記符号化データの位置関係を示すチャネル番号及びプレーン番号を含む位置情報を前記データ制御手段から入力するように構成されている請求項２に記載のデータ記憶装置。
【請求項５】
複数チャネルの各不揮発性メモリを有するデータ記憶装置に適用するメモリ制御装置であって、
前記各不揮発性メモリに対するデータの入出力を制御するチャネル制御手段と、
前記各不揮発性メモリに記憶されるデータを使用して、チャネル間の誤り検出訂正処理が可能な符号化データを生成する符号化手段と、
前記チャネル制御手段により前記符号化データを前記各チャネルに並列に書き込むときに前記符号化データを論理ブロック単位で管理し、かつ前記符号化データに含まれるパリティデータを前記論理ブロック中の１つのプレーンに割り当てて管理するデータ制御手段とを具備し、
前記データ制御手段は、
前記論理ブロックが前記複数のチャネルと、第１及び第２のプレーンのマトリックスとして構成されている場合に、前記パリティデータを前記第１または第２のプレーンのいずれかに割り当てて管理するメモリ制御装置。
【請求項６】
前記チャネル制御手段から読み出される前記符号化データに対して誤り検出訂正処理を実行する復号化手段を具備する請求項５に記載のメモリ制御装置。
【請求項７】
前記データ制御手段は、
前記符号化データの生成時に使用される元データと前記パリティデータの符号中次数情報と前記論理ブロック中の位置情報を関連付けて、前記論理ブロック中において前記パリティデータを格納するプレーンにおいて前記パリティデータに割り当てられるチャネル以外の各チャネルに前記元データを割り当てる請求項５に記載のメモリ制御装置。
【請求項８】
複数チャネルの各不揮発性メモリを有するデータ記憶装置に適用するメモリ制御方法であって、
エンコード処理時に、前記各チャネルの不揮発性メモリから読み出されるデータを使用して、チャネル間の誤り検出訂正処理が可能な符号化データを生成し、
前記符号化データを前記各チャネルに並列に書き込むときに、前記符号化データを論理ブロック単位で管理し、かつ前記符号化データに含まれるパリティデータを前記論理ブロック中の１つのプレーンに割り当てて管理し、
前記論理ブロックが前記複数のチャネルと、第１及び第２のプレーンのマトリックスとして構成されている場合に、前記パリティデータを前記第１または第２のプレーンのいずれかに割り当てて管理するメモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを記憶媒体とするデータ記憶装置に関する。
【背景技術】
【０００２】
近年、データ記憶装置として、書き換え可能な不揮発性メモリであるNAND型フラッシュメモリ（以下、単にフラッシュメモリと表記する場合がある）を記憶媒体とするＳＳＤ（solid state drive）の開発が推進されている。
【０００３】
ＳＳＤでは、複数のフラッシュメモリがチャネル単位に管理されて、各チャネルに対してデータを並列に書き込むマルチチャネル方式が一般的である。このようなマルチチャネル方式では、各チャネルに書き込むデータ（ユーザデータ）を使用して、チャネル間で誤り訂正処理（ＩＣＰ:  Inter Channel Parity）が可能な誤り訂正符号データ（RS符号: Reed-Solomon符号、以下、パリティデータと表記する場合がある）が生成される。この誤り訂正符号データは、複数チャネルの中から設定されたチャネルのフラッシュメモリに格納される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−１９０３４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
マルチチャネル方式のＳＳＤでは、チャネル間で誤り訂正処理が可能なパリティデータが生成されて、設定されたチャネルに格納される。ＳＳＤでは、フラッシュメモリに格納するデータを管理する形式として、論理ブロック構成のデータ管理形式がある。パリティデータを含む符号化データは、論理ブロック中の任意の位置（格納場所）に割り当てられることになる。このような符号化データの格納処理は、ＳＳＤの性能であるライト処理に影響を与える。
【０００６】
そこで、本発明の目的は、ＩＣＰ機能を実現するパリティデータを含む符号化データの格納処理の効率化を図ることができるデータ記憶装置を提供することにある。
【課題を解決するための手段】
【０００７】
実施形態によれば、データ記憶装置は、チャネル制御手段と、符号化手段と、データ制御手段とを具備する。チャネル制御手段は、複数チャネルの各不揮発性メモリに対してデータの入出力を制御する。符号化手段は、前記各不揮発性メモリに記憶されるデータを使用して、チャネル間の誤り検出訂正処理が可能な符号化データを生成する。データ制御手段は、前記チャネル制御手段により前記符号化データを前記各チャネルに並列に書き込むときに論理ブロック単位で管理し、かつ前記符号化データに含まれるパリティデータを前記論理ブロック中の１つのプレーンに割り当てて管理する。さらに、前記データ制御手段は、前記論理ブロックが前記複数のチャネルと、第１及び第２のプレーンのマトリックスとして構成されている場合に、前記パリティデータを前記第１または第２のプレーンのいずれかに割り当てて管理する。
【図面の簡単な説明】
【０００８】
【図１】実施形態に関するデータ記憶装置の構成を説明するためのブロック図。
【図２】実施形態に関するフラッシュメモリコントローラの構成を説明するためのブロック図。
【図３】実施形態に関するＩＣＰモジュールの構成を説明するためのブロック図。
【図４】実施形態に関するデータ管理の形式を説明するための図。
【図５】実施形態に関するパリティデータを含む符号化データの管理概要を説明するための図。
【図６】実施形態に関するデコード処理時のデータの入出力を説明するための図。
【図７】実施形態に関するエンコード処理を説明するための図。
【図８】実施形態に関するデコード処理を説明するための図。
【図９】実施形態に関するチャネルのインターフェース制御を説明するための図。
【図１０】実施形態に関するチャネルのインターフェース制御を説明するための図。
【図１１】実施形態に関するＲＳ演算器のエンコード処理を説明するための図。
【図１２】実施形態に関するＲＳ演算器のデコード処理を説明するための図。
【図１３】実施形態に関するＲＳ演算器のデコード処理を説明するための図。
【図１４】実施形態に関するＩＣＰ処理を説明するためのフローチャート。
【図１５】実施形態に関するＩＣＰ処理を説明するためのフローチャート。
【発明を実施するための形態】
【０００９】
以下図面を参照して、実施形態を説明する。
【００１０】
［データ記憶装置の構成］
図１は、実施形態のデータ記憶装置の構成を示すブロック図である。
【００１１】
図１に示すように、実施形態のデータ記憶装置はＳＳＤ（solid state drive）であり、ＳＳＤコントローラ１０と、NAND型フラッシュメモリ（フラッシュメモリ）２０と、ＤＲＡＭ（dynamic random access memory）からなるバッファメモリ２１とを有する。
【００１２】
フラッシュメモリ２０は、ＳＳＤのデータ記憶媒体であり、複数のフラッシュメモリチップから構成されている。本実施形態のＳＳＤは、マルチチャネル方式であり、各チャネルＣＨ-0〜ＣＨ-nのそれぞれに対応するフラッシュメモリ２００〜２０ｎを有する。なお、本実施形態では、便宜的に５チャネルＣＨ-0〜ＣＨ-4のそれぞれに対応するフラッシュメモリ２００〜２０４を有する。
【００１３】
ＳＳＤコントローラ１０は、フラッシュメモリコントローラ１１と、バッファマネージャモジュール１２と、ホストインターフェースコントローラ１３と、サブシステムモジュール１４とを有する。
【００１４】
フラッシュメモリコントローラ１１は、チャネルＣＨ-0〜ＣＨ-4毎にフラッシュメモリ２０１〜２０４のリード／ライト動作の制御及びデータ転送制御を実行する（図２を参照）。バッファマネージャモジュール１２は、バッファメモリ２１を制御し、バッファメモリとのデータ転送を制御する。バッファメモリ２１は、フラッシュメモリ２００〜２０ｎに対してライトするデータまたはリードされたデータを一時的に格納する。また、バッファメモリ２１は、フラッシュメモリ２０のアクセス回数の統計情報や、フラッシュメモリ２００〜２０ｎに記憶するデータを管理するためのアドレス変換情報を格納する。
【００１５】
ホストインターフェースコントローラ１３は、ホストデバイス３０とＳＳＤとのデータやコマンドの転送を制御する。ホストデバイス３０は、例えばパーソナルコンピュータに含まれる例えばＳＡＴＡ（Serial ATA）規格のインターフェースコントローラである。
【００１６】
サブシステムモジュール１４は、第１及び第２のマイクロプロセッサ（ＣＰＵ）１４０，１４１を有し、ＳＳＤコントローラ１０の全体的制御を実行する。第１のＣＰＵ１４０は、バッファマネージャモジュール１２及びホストインターフェースコントローラ１３をそれぞれ制御する。第２のＣＰＵ１４１は、フラッシュメモリコントローラ１１及びバッファマネージャモジュール１２のそれぞれを制御し、例えばホストデバイス３０からのコマンドに応じて、データのライト動作及びリード動作に必要なコマンド処理を実行する。
【００１７】
（フラッシュメモリコントローラの構成）
図２に示すように、フラッシュメモリコントローラ１１は、チャネルＣＨ-0〜ＣＨ-4毎のチャネルコントローラ１００〜１０４と、ＩＯＰＳ（Input Output per Second）アクセラレータ（以下、単にアクセラレータ: accelerator）１１０と、データフローコントローラ１２０と、チャネル間パリティビットモジュール１３０とを含む。
【００１８】
アクセラレータ１１０は、チャネルコントローラ１００〜１０４、データフローコントローラ１２０及びＩＣＰモジュール１３０に対するデータ転送制御及び動作制御を実行する統合コントローラである。アクセラレータ１１０は、ファームウエア（ＣＰＵ１４１）と連携してコマンド処理を制御する。
【００１９】
チャネルコントローラ１００〜１０４は、それぞれ対応するチャネルＣＨ-0〜ＣＨ-4毎のフラッシュメモリ２００〜２０４とのインターフェース（データの転送）を制御する。即ち、フラッシュメモリコントローラ１１は、チャネルコントローラ１００〜１０４により、チャネルＣＨ-0〜ＣＨ-4毎に管理されるフラッシュメモリ２００〜２０４を並列に制御する構成である。
【００２０】
データフローコントローラ１２０は、チャネルコントローラ１００〜１０４とチャネル間パリティモジュール１３０との間のデータ転送制御を実行する。また、データフローコントローラ１２０は、チャネルコントローラ１００〜１０４とバッファマネージャモジュール１２との間のデータ転送制御を実行する。チャネル間パリティモジュール１３０は、後述するように、エラーの発生時に、チャネル間での誤り訂正処理（ＩＣＰ:  Inter Channel Parity）を実行するデータ保護モジュールであル。以下、チャネル間パリティモジュール１３０を、ＩＣＰモジュール１３０と表記する場合がある。
【００２１】
図３に示すように、ＩＣＰモジュール１３０は、符号化／復号化演算器４０と、アドレス計算モジュール４１と、アドレス変換モジュール４２とを有する。本実施形態では、符号化／復号化演算器（以下、ＲＳ演算器と表記する）４０は、リードソロモン符号（Reed-Solomon code : ＲＳ符号）方法での符号化（エンコード）及び復号化（デコード）の演算処理を実行する。ＲＳ演算器４０は、後述するように、エンコード処理によりパリティデータを生成し、デコード処理により訂正情報３０２を生成する。
【００２２】
ここで、チャネルＣＨ-0〜ＣＨ-4単位では、フラッシュメモリ２００〜２０４に記憶されるデータにはＥＣＣデータが含まれている。チャネルコントローラ１００〜１０４はそれぞれＥＣＣ処理を実行することで、個別のデータ保護機能を実現している。本実施形態のＩＣＰモジュール１３０は、異なるチャネル間のデータを組み合わせて符号化データを生成することで、チャネル間のデータ保護機能を実現している。なお、ＲＳ演算器４０は、高速処理のために複数個の演算器からなり、パイプライン的な並列処理を実行する構成、または複数バイト（byte）単位で演算を実行する演算器からなる構成である。
【００２３】
［ＩＣＰ処理(チャネル間パリティ処理)］
以下、図３から図１５までを参照して、本実施形態のＩＣＰ処理（チャネル間データ保護機能）を説明する。
【００２４】
図４は、本実施形態のデータ管理形式を説明するための図である。本実施形態のフラッシュメモリコントローラ１１は、チャネルコントローラ１００〜１０４を介して、チャネルＣＨ-0〜ＣＨ-4のフラッシュメモリ２００〜２０４と転送するデータを論理ブロック単位で管理する。
【００２５】
図４（Ａ）に示すように、本実施形態の論理ブロックは、チャネルＣＨ-0〜ＣＨ-4、プレーン（Plane）、及び論理ページから定義されている。プレーンは、各チャネルＣＨ-0〜ＣＨ-4のメモリ領域（フラッシュメモリ２００〜２０４）を論理的に分割した領域単位を意味する。本実施形態では、各チャネルＣＨ-0〜ＣＨ-4で管理するデータは、２プレーン（Plane 0, Plane 1）に分割されて管理される。論理ページ（ページサイズ４００，４０１）は、チャネルＣＨ-0〜ＣＨ-4と、２個のプレーン（Plane 0, Plane 1）のマトリックスとして構成されている。以下、プレーン（Plane 0）をプレーン０と表記し、プレーン（Plane 1）をプレーン１と表記する。
【００２６】
論理ブロックは、複数の論理ページから構成される。本実施形態では、プレーン毎の各行列要素は、例えば１バイト（byte）のデータを意味する。ＩＣＰモジュール１３０は、チャネル間のＥＣＣ処理の単位（データ保護単位）となる符号化データ４０２を生成する。この符号化データ４０２は、図４（Ｂ）に示すように、論理ページ中において、各チャネルＣＨ-0〜ＣＨ-4の各プレーン０，１から１バイトずつのデータを組み合わせた構成である。この符号化（データ保護）は、論理ブロックの全面に対して行なわれることになる。
【００２７】
以下、本実施形態では、図５（Ａ）に示すように、便宜的に１論理ページ（ページサイズ５００，５０１）で１論理ブロックが構成されるものとする。従って、論理ページと論理ブロックとを特に区別せずに表現する。また、本実施形態では、後述するエンコード処理により、図５（Ｂ）に示すように、パリティデータ５０３を含む符号化データ５０２が生成される。この符号化データ５０２が論理ブロック中に割り当てられる場合に、パリティデータ５０３は、論理ブロック中において必ず片方のプレーン（０または１）に割り当てられる。
【００２８】
次に、図１４、１５のフローチャートを参照し、ＩＣＰ処理（データ保護）をエンコード処理とデコード処理に大別して説明する。
【００２９】
まず、フラッシュメモリコントローラ１１は、フラッシュメモリ２００〜２０４に対するアクセスを実行するときに、各チャネルＣＨ-0〜ＣＨ-4の各プレーン０，１単位に処理する。ライトコマンドの処理時には、コントローラ１１は、各プレーン０，１の処理を組み合わせて１要求単位（１ライトコマンド）として処理する。このライト処理は、マルチプレーンライト（Multiple Plane Write）と呼ばれている。これにより、ライト処理の高速化（プログラム時間の短縮化）を図ることができる。
【００３０】
図１４のフローチャートに示すように、ライト動作では、ホストインターフェースコントローラ１３（ＳＡＳと表記する場合がある）から、バッファメモリ２１にユーザデータが転送される（ブロック１０００）。フラッシュメモリコントローラ１１は、パリティデータを格納するチャネル以外の各チャネルのフラッシュメモリに、バッファメモリ２１からユーザデータを転送して書き込む（ブロック１００１）。
【００３１】
ＩＣＰモジュール１３０は、エンコード処理を実行することにより、図５（Ｂ）に示すように、符号化データ５０２を生成する。ＩＣＰモジュール１３０は、エンコード処理時に、論理ページ（論理ブロック）単位で書き込みデータを用意し、これをＲＳ演算器４０に入力する。ＲＳ演算器４０は、パリティデータを生成する（ブロック１００２）。
【００３２】
図３に示すように、データフローコントローラ１２０は、チャネルコントローラ１００〜１０４によりフラッシュメモリ２００〜２０４から読み出された書き込みデータ（元データ）３０２をＲＳ演算器４０に転送する。また、データフローコントローラ１２０は、ＲＳ演算器４０により生成されたパリティデータをチャネルコントローラ１００〜１０４のいずれかに転送する（ブロック１００３）。チャネルコントローラ１００〜１０４は、生成されたパリティデータと元データ（パリティデータ以外の符号データ）を合わせた符号化データを論理ページ単位で書き込み処理を実行する。
【００３３】
図１１は、ＲＳ演算器４０のエンコード処理を説明するための図である。ＲＳ演算器４０は、ＲＳ符号演算を実行する。図１１に示すように、ＲＳ演算器４０は、例えば符号長が２ｎで、2n-k[byte]の元データ１３０１を矢印１３００の順番で入力されると、ｋ[byte]のパリティデータ１３０２を生成する。
【００３４】
図１２は、ＲＳ演算器４０のデコード処理（後述する）を説明するための図である。図１２に示すように、元データ１３０１にパリティデータ１３０２を並べて、符号多項式の次数を振ったものが、最終的に符号化された符号化データ１４００となる。
【００３５】
本実施形態は、エンコード処理時に生成されるパリティデータを格納する論理ブロック中の格納位置を、必ず片方のプレーン（０または１）に指定するデータ管理方法を想定している。即ち、本実施形態では、ＩＣＰ処理（データ保護）で使用するパリティデータを、論理ブロック中でどの様に管理するかを示すデータ管理方法が提案されている。
【００３６】
図７を参照して、本実施形態のエンコード処理を具体的に説明する。
【００３７】
ここで、本実施形態では、符号長が１０byteの符号化データを想定する。符号化データの２byte分がパリティデータ７０２である。図７（Ａ）に示すように、エンコード処理時には、ＲＳ演算器４０には、プレーン０の元データ７００及びプレーン１の元データ７０１が入力される（矢印７０４で示す順番）。ＲＳ演算器４０は、入力される元データ７００，７０１を使用してパリティデータ７０２を生成する。
【００３８】
次に、図７（Ｂ）に示すように、チャネルコントローラ１００〜１０４は、元データ７００，７０１と生成されたパリティデータ７０２とを関連付けて、論理ブロック中の各プレーン０，１の片方のプレーン（ここでは、プレーン１）にパリティデータ７０２を格納する（ブロック１００２）。この場合、本実施形態では、パリティデータ７０２を、チャネルＣＨ-2，ＣＨ-3のプレーン１に同一バイトずつ格納する。
【００３９】
ここで、図７（Ｂ）に示すように、パリティデータ７０２を格納するチャネルを選択する際に、パリティデータの次数の降順と論理ブロック中の物理番号の昇順とを関連付けて、格納する。即ち、高次である１次のパリティデータを、必ずチャネル番号の小さいチャネル（ここではＣＨ-2）に割り当てる。
【００４０】
また、他の符号データ（パリティデータ以外の符号化データ）を、パリティデータの最下位次数（０次）の論理ブロック中の格納位置を起点として、パリティデータの格納側とは逆側のプレーン（ここでは０）から、次数の降順に論理番号と関連付けて格納する。ここでは、チャネルＣＨ-4のプレーン０である。即ち、各プレーンの始点チャネル番号は、「（最下位次数の格納チャネル番号+1）／総チャネル数」から算出される番号となる。この場合、パリティデータを格納するチャネル（ＣＨ-2，ＣＨ-3）をスキップして、２次以上の符号データ（パリティデータ以外の符号化データ）の格納が完了した後に、パリティデータの格納を開始する。
【００４１】
以上要するに、パリティデータを格納する場合に、前述のように論理ブロックを管理することにより、符号化データの次数と論理ブロック中の位置情報との関連付けた処理を、整合性の取れた形で行なうことが可能となる。エンコード処理時においては、２次以上の全ての符号化データが入力された後に、１次以下のパリティデータが生成される。このパリティデータが、論理ブロック中の片方のプレーン（ここでは１）に格納される方法により、パリティデータ以外の符号データの格納に継続する形でパリティデータの格納処理を実行できる。
【００４２】
図９及び図１０は、エンコード処理時でのチャネルコントローラ１００〜１０４でのインターフェース制御を説明するための図である。
【００４３】
図９は、本実施形態のデータ管理方法とは異なり、パリティデータを両方のプレーン０，１に格納する方法の場合を示す。即ち、図９（Ａ）に示すように、フェーズ０では、チャネルコントローラ１００〜１０４は、チャネルＣＨ-1以外の各チャネルのプレーン０に対して、元データ（パリティデータ以外の符号データ）を書き込む。次に、図９（Ｂ）に示すように、フェーズ１では、チャネルコントローラ１００〜１０４は、チャネルＣＨ-3のプレーン１にパリティデータ（０次）を書き込み、これ以外の各チャネルのプレーン１に対して元データを書き込む。さらに、図９（Ｃ）に示すように、フェーズ２では、チャネルコントローラ１００〜１０４は、チャネルＣＨ-1のプレーン０にパリティデータ（１次）を書き込む。
【００４４】
このようなデータ管理方法では、図９（Ａ）に示すフェーズ１の処理において、必ずプレーン０，１の両方のプレーンに対する処理が必要なチャネルが存在してしまう。この場合、フェーズ１の処理では、どちらか一方のプレーン（１）の処理しかできない。従って、残りの片方のプレーン（０）はフェーズ２の処理として、フェーズを分けた処理が必要となる。
【００４５】
これに対し、本実施形態のデータ管理方法では、図１０（Ａ）に示すように、フェーズ０では、チャネルコントローラ１００〜１０４は、各チャネルのプレーン０に対して、元データ（パリティデータ以外の符号データ）を書き込む。次に、図１０（Ｂ）に示すように、フェーズ１では、チャネルコントローラ１００〜１０４は、チャネルＣＨ-2のプレーン１にパリティデータ（１次）を書き込み、チャネルＣＨ-3のプレーン１にパリティデータ（０次）を書き込む。従って、チャネルコントローラ１００〜１０４は、フェーズ１の処理において、チャネルＣＨ-2，ＣＨ-3以外の各チャネルのプレーン１に元データを書き込み、継続してプレーン１にパリティデータ（０次，１次）を書き込むことができる。
【００４６】
以上のようにして、本実施形態のデータ管理方法は、パリティデータを片方のプレーン１に格納するように、論理ブロックを管理する。これにより、フェーズを分けた処理を要することなく、フェーズ１の処理で、プレーン１にパリティデータ（０次，１次）を格納する処理が完了となる。従って、エンコード処理時でのライト処理の高速化を実現することが可能となる。
【００４７】
（デコード処理）
図１５のフローチャートに示すように、リード動作では、フラッシュメモリコントローラ１１は、各チャネルのフラッシュメモリからユーザデータを読み出してバッファメモリ２１に転送する（ブロック１１００）。このとき、フラッシュメモリコントローラ１１は、読み出したユーザデータのエラーチェックをＥＣＣにより実行する（ブロック１１０１）。フラッシュメモリコントローラ１１は、エラー訂正が可能であれば、ＥＣＣによる訂正処理を実行する（ブロック１１０２のＹＥＳ，１１０３）。ＥＣＣによりエラー訂正されたユーザデータは、バッファメモリ２１からホストインターフェースコントローラ１３に転送される（ブロック１１０４）。
【００４８】
ここで、フラッシュメモリコントローラ１１は、例えば、チャネルコントローラ１００〜１０４によりデータのアクセス時にエラーが検出され、ＥＣＣでの訂正能力を超えた場合でかつデータ復帰が必要な場合、ＩＣＰモジュール１３０に対してＩＣＰ処理（チャネル間パリティ処理）を実行させる（ブロック１１０２のＮＯ，１１０５のＹＥＳ）。
【００４９】
ＩＣＰモジュール１３０は、フラッシュメモリから読み出されるパリティデータを使用してデコード処理（データ復元処理）を実行する（ブロック１１０６，１１０７）。
【００５０】
以下、本実施形態のエンコード処理により生成される符号化データ（元データとパリティデータ）の管理方法において、主として図３及び図６を参照してデコード処理を説明する。
【００５１】
まず、図６に示すように、データフローコントローラ１２０は、チャネルコントローラ１００〜１０４を介してフラッシュメモリ２００〜２０４から読み出された符号化データ６００をＲＳ演算器４０に転送する。このとき、データフローコントローラ１２０は、図７（Ｂ）に示すように、管理している論理ブロックから、パリティデータの格納側と逆のプレーン０の始点位置（プレーン０のチャネルＣＨ-4）から順次読み出す（矢印７０３）。
【００５２】
従って、図８に示すように、デコード処理時には、ＲＳ演算器４０には、矢印８０３の順番で、プレーン０のチャネルＣＨ-4から順番に読み出された符号化データ８００，８０１が入力される。この場合、エンコード処理時のように、パリティデータの格納場所であるプレーン１のチャネルＣＨ-2，ＣＨ-3をスキップする必要はない。
【００５３】
図１２は、ＲＳ演算器４０のデコード処理を説明するための図である。ＲＳ演算器４０は、図１２に示すように、矢印１３００の順番で符号化データ１４００が次数順に入力されると、デコード処理を実行する。即ち、ＲＳ演算器４０は、符号化データ１４００にエラーが含まれる場合、そのエラー位置（ErrLo）とエラーパターン（ErrPt）を含むエラー訂正情報１４０１を出力する。
【００５４】
具体的には、図３及び図６に示すように、ＲＳ演算器４０は、データフローコントローラ１２０に対して、エラー位置とエラーパターンを含むエラー訂正情報（３０３，６０５）を出力する。データフローコントローラ１２０は、当該エラー訂正情報に基づいて、エラーを検出訂正した訂正データ６０６を、各チャネルコントローラ１００〜１０４またはバッファマネージャモジュール１２に転送する（ブロック１１０７）。
【００５５】
即ち、ライト処理時には、データフローコントローラ１２０は、訂正データ６０６を各チャネルコントローラ１００〜１０４に転送する。リード処理時には、データフローコントローラ１２０は、訂正データ６０６をバッファマネージャモジュール１２に転送する。バッファマネージャモジュール１２は、バッファメモリ２１を経由して、ホストインターフェースコントローラ１３に転送する。
【００５６】
図１３は、イレージャ訂正に関するデコード処理を説明するための図である。ＲＳ演算器４０は、予めデコード処理前にエラー位置を特定したエラー位置情報１５００を与えられると、それを事前情報としてデコード処理に使用する。具体的には、図３に示すように、ＲＳ演算器４０は、例えばＣＰＵ１４１からエラー位置情報３０７を与えられると、それを事前情報としてデコード処理に使用する。この場合、ＲＳ演算器４０は、エラー位置を算出する処理を省略できるため、エラー訂正情報（３０３，６０５）を高速に出力することができる。
【００５７】
ここで、前述したように、本実施形態のコントローラ１１は、チャネルＣＨ-0〜ＣＨ-4、及びプレーン０，１により定義される論理ブロック単位でデータを管理し、プレーン０，１を最小単位として処理を実行している。ＩＣＰモジュール１３０は、デコード処理時には各チャネルＣＨ-0〜ＣＨ-4をまたがる形態で、符号化データの単位で実行する。このため、ＩＣＰモジュール１３０は、デコード処理時に、論理ブロック中での位置情報（チャネル番号ＣＨ-0〜ＣＨ-4とプレーン番号０，１）と、符号化データの次数（順番）とを対応付ける必要がある。
【００５８】
本実施形態では、前述したように、エンコード処理時に、データフローコントローラ１２０によりＲＳ演算器４０に入力されるデータの順番と、符号化データを振り分けて格納するときのチャネル番号とを関連付けるように制御される。符号化データは、チャネルコントローラ１００〜１０４により、論理ブロックの各チャネルに割り当てられて格納される。
【００５９】
このようなデコード処理時での論理ブロック中の位置情報と符号化データの次数との対応付け処理を行なうために、ＩＣＰモジュール１３０は、図３及び図６に示すように、アドレス計算モジュール４１及びアドレス変換モジュール４２を有する。
【００６０】
図６に示すように、データフローコントローラ１２０は、当該データ（符号化データ６００）をＲＳ演算器４０に転送する。但し、ＲＳ演算器４０には、符号化データ１２００，１２０１の順番と次数の関係が崩れて入力されてしまう。このため、ＲＳ演算器４０には、付随する属性情報として入力データ（符号化データ）の次数情報（３０１，６０３）が与えられる必要がある。
【００６１】
図３または図６に示すように、次数情報（３０１，６０３）は、アドレス計算モジュール４１によりＲＳ演算器４０に入力される。アドレス計算モジュール４１は、チャネルコントローラ１００〜１０４から、パリティデータの格納位置情報３００が与えられる。格納位置情報３００は、論理ブロック中のパリティデータの格納先チャネル番号（ＣＨ-2，ＣＨ-3）及びプレーン番号（１）を示す情報である。
【００６２】
アドレス計算モジュール４１は、次数情報（３０１，６０３）として符号化データ中の位置情報（Ｆｎ）を算出する。ここで、アドレス計算モジュール４１は、データフローコントローラ１２０から、ＲＳ演算器４０の入力データのチャネル番号及びプレーン番号を示す論理ブロック中の位置情報（３０４，６０１）を与えられる。要するに、アドレス計算モジュール４１は、入力データのチャネル番号及びプレーン番号、およびパリティデータの格納先チャネル番号とプレーン番号を示す位置情報（Ｆｎ）をＲＳ演算器４０に入力する。但し、エンコード処理時のように、パリティデータの格納場所をスキップするように処理することにより、図３及び図６に示すようなアドレス計算モジュール４１を実装する必要ない。
【００６３】
以上のようにして、ＲＳ演算器４０は、アドレス計算モジュール４１からの位置情報（３０１，６０３）に基づいて、符号化データの順番と次数との対応関係をとり、符号化データに含まれるエラー検出訂正処理であるデコード処理を実行する。ＲＳ演算器４０は、デコード処理の結果であるエラー訂正情報（３０３，６０５）をデータフローコントローラ１２０に出力する。
【００６４】
ここで、データフローコントローラ１２０は、ＲＳ演算器４０からのエラー訂正情報（６０５）に基づいて訂正データ６０６を出力する。これにより、ＩＣＰ処理のデコード処理時には、論理ブロック中から全データを読み出してＲＳ演算器４０に転送することにより、チャネル間のデータ訂正処理を行なうことができる。
【００６５】
また、データフローコントローラ１２０は、訂正データ６０６を出力するときに、ＲＳ演算器４０により算出されたエラー位置情報と論理ブロック中の訂正位置情報を関連付けた訂正位置情報（Fn^-1）が必要となる。当該訂正位置情報は、図３または図６に示すように、アドレス変換モジュール４２により算出される。
【００６６】
なお、前述したように、各チャネル個別単位でのＥＣＣ処理を利用して、本実施形態のＩＣＰ処理でのエラー位置情報（３０７）を与えるイレージャ訂正処理を実行する形態も可能である。この場合、エラー位置情報（３０７）のプレーン位置指定から符号中の次数情報への変換は、アドレス計算モジュール４１により可能となる。このため、アドレス変換モジュール４２を省略することができる。
【００６７】
以上のようにして、本実施形態のＳＳＤでは、ＩＣＰモジュール１３０によりエンコード処理時には、元データとパリティデータとを論理ブロック中で関連付けた符号化データを生成する。この場合、パリティデータは、論理ブロック中の片方のプレーン（１）に格納される。従って、パリティデータの格納場所を、チャネル番号では連続的になるように設定することが可能となる。これにより、特にエンコード処理時でのライト処理の高速化を実現することが可能となる。また、デコード処理に関しても、ＲＳ演算器４０に対する符号化データの入力順番を効率的に制御することができる。
【００６８】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００６９】
１０…ＳＳＤコントローラ、１１…フラッシュメモリコントローラ、
１２…バッファマネージャモジュール、１３…ホストインターフェースコントローラ、
１４…サブシステムモジュール、２０，２００〜２０ｎ…NAND型フラッシュメモリ、
２１…バッファメモリ（ＤＲＡＭ）、３０…ホストデバイス、４０…ＲＳ演算器、
１００〜１０４…チャネルコントローラ、１１０…アクセラレータ、
１２０…データフローコントローラ、１３０…ＩＣＰモジュール（チャネル間パリティモジュール）、１４０，１４１…マイクロプロセッサ（ＣＰＵ）。
【図１】
0005367686.tif 000002
【図２】
0005367686.tif 000003
【図３】
0005367686.tif 000004
【図４】
0005367686.tif 000005
【図５】
0005367686.tif 000006
【図６】
0005367686.tif 000007
【図７】
0005367686.tif 000008
【図８】
0005367686.tif 000009
【図９】
0005367686.tif 000010
【図１０】
0005367686.tif 000011
【図１１】
0005367686.tif 000012
【図１２】
0005367686.tif 000013
【図１３】
0005367686.tif 000014
【図１４】
0005367686.tif 000015
【図１５】
0005367686.tif 000016