"不揮発性メモリから読み出されたデータに含まれる誤りデータを訂正する誤り訂正機能を備えた誤り訂正装置において、前記不揮発性メモリから読み出されたデータに、誤り訂正能力を超える誤りがあるか否かを判定する判定手段を備え、前記判定手段は、誤り位置多項式を算出して誤り個数を計算する第1の誤り個数計算手段と、誤り無し領域と訂正対象領域とで構成されるデータのうち、前記訂正対象領域をチェン探索して誤り個数を計算する第2の誤り個数計算手段と、前記第1の誤り個数計算手段で計算された誤り個数と前記第2の誤り個数計算手段で計算された誤り個数とが一致しない場合に前記誤り訂正能力を超えていると判定する比較手段と、を含み、前記比較手段で誤り訂正能力を超える誤りがあると判定された場合に、誤り訂正を行わないことを特徴とする誤り訂正装置。前記誤り無し領域は、パディング領域および/または誤り検出手段で誤り無しと判定された領域であることを特徴とする請求項1に記載の誤り訂正装置。前記不揮発性メモリは、NAND型フラッシュメモリであることを特徴とする請求項1または請求項2に記載の誤り訂正装置。不揮発性メモリから読み出されたデータに含まれる誤りデータを誤り訂正する誤り訂正方法において、前記不揮発性メモリから読み出されたデータに、誤り訂正能力を超える誤りがあるか否かを判定する判定工程を備え、前記判定工程は、誤り位置多項式を算出して誤り個数を計算する第1の誤り個数計算工程と、誤り無し領域と訂正対象領域とで構成されるデータのうち、前記訂正対象領域をチェン探索して誤り個数を計算する第2の誤り個数計算工程と、前記第1の誤り個数計算工程で計算された誤り個数と前記第2の誤り個数計算工程で計算された誤り個数とが一致しない場合に前記誤り訂正能力を超えていると判定する比較工程と、を含み、前記比較工程で誤り訂正能力を超える誤りがあると判定された場合に、誤り訂正を行わないことを特徴とする誤り訂正方法。本発明は、上記課題に鑑みてなされたものであり、データに誤り訂正能力を超える誤りがある場合に、さらなる誤りを付加することを防止することが可能な誤り訂正装置および誤り訂正方法を提供することを目的とする。実施の形態によれば、不揮発性メモリから読み出されたデータに含まれる誤りデータを訂正する誤り訂正機能を備えた誤り訂正装置において、前記不揮発性メモリから読み出されたデータに、誤り訂正能力を超える誤りがあるか否かを判定する判定手段を備え、前記判定手段は、誤り位置多項式を算出して誤り個数を計算する第1の誤り個数計算手段と、誤り無し領域と訂正対象領域とで構成されるデータのうち、前記訂正対象領域をチェン探索して誤り個数を計算する第2の誤り個数計算手段と、前記第1の誤り個数計算手段で計算された誤り個数と前記第2の誤り個数計算手段で計算された誤り個数とが一致しない場合に前記誤り訂正能力を超えていると判定する比較手段と、を含み、前記比較手段で誤り訂正能力を超える誤りがあると判定された場合に、誤り訂正を行わない誤り訂正装置を提供する。以下に、この発明の実施の形態につき図面を参照しつつ詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。また、下記実施の形態における構成要素には、当業者が容易に想定できるものまたは実質的に同一のものが含まれる。実施の形態1[SSDの構成]図1は、本実施の形態にかかるSSD1を概略的に示すブロック図である。図1は、SSDSolidStateDrive1の構成例を示すブロック図である。SSD1は、I/Fを介してホスト装置ホスト4と接続され、ホスト装置4の外部メモリとして機能する。SSD1は、不揮発性メモリとしてのNANDフラッシュメモリ以下、NANDメモリと略す2と、ホスト装置4の指示に応じて、NANDメモリ2に対してデータのリード/ライトを行うNANDコントローラ3とを備えている。本実施の形態では、不揮発性メモリとしてNANDメモリを使用しているが、不揮発性メモリは、情報を不揮発に記憶し、時間の経過に伴って記憶されているデータに変化が生じ得る特徴を有すれば、どのような記憶装置であっても構わない。NANDメモリ2は、データ消去の単位である複数のメモリブロックBLKから構成されている。メモリブロックBLKの構成について、図2を用いて説明する。図2は、いずれかのメモリブロックBLKの構成を示す等価回路図である。メモリブロックBLKは、X方向に沿って配置されたmmは、1以上の整数個のNANDストリングを備えている。各NANDストリングは、選択トランジスタST1、ST2、およびnnは、1以上の整数個のメモリセルトランジスタMTを備えている。m個のNANDストリングにそれぞれ含まれる選択トランジスタST1は、ドレインがビット線BL1~BLmに接続され、ゲートが選択ゲート線SGDに共通接続されている。また、選択トランジスタST2は、ソースがソース線SLに共通接続され、ゲートが選択ゲート線SGSに共通接続されている。各メモリセルトランジスタMTは、半導体基板上にゲート絶縁膜を介在して形成された積層ゲート構造を備えたMOSFETMetaloxidesemiconductorfieldeffecttransistorである。積層ゲート構造は、ゲート絶縁膜上に形成された電荷蓄積層浮遊ゲート電極と、電荷蓄積層上にゲート間絶縁膜を介在して形成された制御ゲート電極とを含んでいる。各NANDストリングにおいて、n個のメモリセルトランジスタMTは、選択トランジスタST1のソースと選択トランジスタST2のドレインとの間に、それぞれの電流経路が直列接続されるように配置されている。すなわち、n個のメモリセルトランジスタMTを、隣接するもの同士でソース領域若しくはドレイン領域を共有するような形でY方向に直列接続させる。そして、最もドレイン側に位置するメモリセルトランジスタMTから順に、制御ゲート電極がワード線WL0~WLnにそれぞれ接続されている。従って、ワード線WL1に接続されたメモリセルトランジスタMTのドレインは選択トランジスタST1のソースに接続され、ワード線WLnに接続されたメモリセルトランジスタMTのソースは選択トランジスタST2のドレインに接続されている。ワード線WL0~WLnは、メモリブロックBLK内のNANDストリング間で、メモリセルトランジスタMTの制御ゲート電極を共通に接続している。つまり、メモリブロックBLK内において同一行にあるメモリセルトランジスタMTの制御ゲート電極は、同一のワード線WLに接続される。この同一のワード線WLに接続される複数のメモリセルは1ページとして取り扱われ、このページごとにデータの書き込みおよびデータの読み出しが行われる。また、ビット線BL1~BLnは、メモリブロックBLK間で、選択トランジスタST1のドレインを共通に接続している。つまり、複数のメモリブロックBLK内において同一列にあるNANDストリングは、同一のビット線BLに接続される。メモリセルトランジスタMTは、浮遊ゲート電極に蓄えられる電子の数に応じて閾値電圧が変化し、この閾値電圧の違いに応じた情報を記憶する。メモリセルトランジスタMTは、1ビットの情報を記憶するように構成されていてもよいし、複数ビット多値の情報を記憶するように構成されていてもよい。本発明による実施例では、特に閾値の間隔が狭い多値のメモリセルトランジスタMTに対して有効である。そして、NANDメモリ2内のセンスアンプ、および電位発生回路等を含む制御回路図示せずは、NANDメモリ2に供給されたデータをメモリセルトランジスタMTに書き込み、メモリセルトランジスタMTに記憶されているデータをNANDメモリ2の外部に出力することが可能な構成を有している。図1において、NANDコントローラ3は、ホスト装置4とのインタフェース処理を行うホストI/F10、NANDメモリ2とのインタフェース処理を行い、データのリード/ライトを制御するNANDI/F20と、NANDメモリ2に書き込むデータに対して、誤り訂正符号を生成する誤り訂正符号部30と、NANDメモリ2から読み出されたデータに対して、誤り検出および誤り訂正を行う誤り訂正復号部40とを備えている。誤り訂正符号部30は、第1の誤り訂正符号生成部31と、第2の誤り訂正符号生成部32とを備えている。第1の誤り訂正符号生成部31は、書き込みデータに対して、所定のブロックBK単位で、その誤り訂正を行うための第1の誤り訂正符号を生成する。ここで、第1の誤り訂正符号としては、1ビットあるいは複数ビットの誤りを訂正できる誤り訂正符号を用いることができ、本実施の形態では、32ビットのデータ構成されるブロックBK単位で1ビットの訂正能力がある6ビットのハミング符号第1の誤り訂正符号を生成する。第2の誤り訂正符号生成部32は、NANDメモリ2の書き込みデータに対して、複数個のブロック単位で、その誤り訂正を行うための第2の誤り訂正符号を生成する。第2の誤り訂正符号としては、複数ビットの誤りを訂正できる誤り訂正符号を用いることができ、例えば、BCH符号BosechaudhurihocquenghemcodeやRS符号を使用することができ、本実施の形態では、4個のブロック128ビット単位で、2ビットの訂正能力がある16ビットのBCH符号を生成する。図3は、NANDメモリ2に書き込まれるデータ構成例を示す図である。同図に示すように、32ビットのデータ構成されるブロックBK単位で1ビットの訂正能力がある6ビットのハミング符号第1の誤り訂正符号が付加され、さらに、4個のブロックBK128ビット単位で2ビットの訂正能力がある16ビットのBCH符号第2の誤り訂正符号が付加されている。誤り訂正復号部40は、第1の誤り訂正復号部42と、第2の誤り訂正復号部41とを備えている。第1の誤り訂正復号部42は、NANDメモリ2からの読み出しデータに対して、ブロックBK単位で、そのハミング符号を用いて第1の誤り訂正を行う。また、第1の誤り訂正後のデータに対して、誤り検出を行い、誤り訂正結果を第2の誤り訂正復号部41に出力する。第2の誤り訂正復号部41は、第1の誤り訂正後のデータに対して、誤り訂正結果を参照し、4つのブロックBK単位でBCH符号を使用して第2の誤り訂正を行う。上記構成のSSD1の動作の概略を説明する。ホスト装置4からSSD1に書き込みを要求するデータ書き込みデータが供給されると、ホストI/F10は、受信した書き込みデータを誤り訂正符号部30に供給する。誤り訂正符号部30では、書き込みデータに対して、第1および第2の誤り訂正符号を生成する。NANDI/F20は、第1および第2の誤り訂正符号を付加した書き込みデータをNANDメモリ2に書き込む。また、SSD1は、ホスト装置4からデータの読み出し要求が入力されると、NANDI/F20は、読み出しを要求されているデータ読み出しデータとこれに付加された第1および第2の誤り訂正符号を読み出して、誤り訂正復号部40に供給する。誤り訂正復号部40は、読み出しデータに対して第1および第2の誤り訂正を行う。誤り訂正後のデータは、ホストI/F10によりホスト装置4に転送される。[第2の誤り訂正復号部]図4~図11を参照して、第2の誤り訂正復号部41の構成および動作を詳細に説明する。図4-1は、第1の誤り訂正後のデータ構成例、図4-2は、第1の誤り訂正処理結果の一例を示す図である。図5は、第2の誤り訂正復号部の構成例を示す図である。図6はシンドローム計算器の回路構成例を示す図である。第2の誤り訂正復号部41は、図5に示すように、第1の誤り訂正済みの読み出しデータのシンドローム値を計算するシンドローム計算器51と、データを一時記憶するためのメモリ52と、シンドローム値に基づいて誤り位置多項式を生成する誤り位置多項式計算器53と、誤り位置多項式の根を算出して誤り位置を特定して誤り位置のデータを訂正するとともに、データの訂正対象領域の誤り個数を計算する誤りロケータ計算誤り訂正器54と、誤り位置多項式計算器53で計算された誤り個数と、誤りロケータ計算誤り訂正器54で計算された誤り個数とを比較する比較器55と、および誤りロケータ計算誤り訂正器54による誤り訂正後のデータと、メモリ52に蓄えられている誤り訂正前のデータを選択する選択器56で構成される。本実施の形態では、誤り訂正能力の範囲内のデータの誤りがある場合には、誤りロケータ計算誤り訂正器54の誤り位置は正しい誤り位置を示し、誤り訂正能力を超えた誤りがある場合には、誤った誤り位置を示す確率が高いという点に着目して、訂正対象領域の誤りの個数と誤り位置多項式の計算で求まった誤り個数と比較し、一致しなければ誤り訂正能力を超えている判断して、誤り訂正不可と判定し、誤り訂正を行わないことにしている。誤り位置多項式計算器53は、シンドローム多項式を用いて、誤り位置多項式を計算し、誤り位置多項式の係数を誤りロケータ計算誤り訂正器54に出力する。また、誤り位置多項式計算器53は、誤り位置多項式から誤り個数を算出して、比較器55に出力する。ここで、データに含まれる誤り個数が誤り訂正能力nビットを超えていた場合は、実際の誤り個数とは異なる個数が計算される。例えば、10ビットの誤り訂正能力を持つBCH符号が用いられている場合に30ビットの誤りがある時に、10ビットの誤りと計算される場合がある。誤りロケータ計算誤り訂正器54は、誤り位置多項式計算部53から受け取った誤り位置多項式の係数を用いて、チェンサーチを行って訂正対象領域の誤り位置を計算すると共にその誤り個数をカウントし、メモリ52に格納した訂正前のデータを読み出して誤り訂正を行う。誤りロケータ計算誤り訂正器54は、誤り訂正後のデータを選択器56に出力するとともに、カウントした訂正対象領域の誤り個数を比較器55に出力する。比較器55は、誤り位置多項式計算器53から受け取った誤り個数と、誤りロケータ計算誤り訂正器54から受け取った対象領域の誤り個数とを比較し、一致している場合は、誤り訂正の結果が正しい旨を示す正常情報例えば、1を選択器56に出力する一方、一致していない場合は、誤り訂正能力を超えた誤りがあると判断して、誤り訂正の結果が異常である旨を示す異常情報例えば、0を選択器56に出力する。選択器56は、比較器55から正常信号が入力された場合には、誤りロケータ計算誤り訂正器54から入力される誤り訂正後のデータをホスト装置4に転送する一方、比較器55から異常信号が入力された場合には、メモリ52に格納した訂正前のデータをホストと装置4に転送する。以下、第1および第2誤り訂正復号部42,41での誤り訂正復号動作を詳細に説明する。ホスト装置4よりNANDメモリ2への読み出し要求が発生すると、NANDIF20はNANDメモリ2から要求されたデータを読み出し、第1の誤り訂正復号部42に出力する。第1の誤り訂正復号部42は、NANDメモリ2から読み出したデータデータブロック、ハミング符号、BCH符号が入力され、各ブロックBK毎に、ハミング符号を使用して第1の誤り訂正を行う。本実施の形態では、ハミング符号は1ビットの誤り訂正能力を持つため、2ビット以上の誤りは訂正できない。第1の誤り訂正復号部42では、第1の誤り訂正処理により、ブロックBKの誤り訂正ができたか否か検出する。具体的には、例えば、第1の誤り訂正後のブロックBKについてシンドローム計算を行って、その計算結果0=誤り無しから誤り訂正ができたか否かを判断することができる。また、ブロックBK毎に誤り検出符号を付加して、誤り検出符号を使用して第1の誤り訂正後のデータにエラーが無いかを検出することにしてもよい。第1の誤り訂正復号部42は、ハミング符号を廃棄して、第1の誤り訂正処理後のデータブロックBK、BCH符号、および各データブロックBKの第1の誤り訂正処理結果第1の誤り訂正復号結果を第2の誤り訂正復号部41に出力する。以下の説明では、図4-1に示すように、第1の誤り訂正後の読み出しデータのうち、BK0,BK2に誤りがあるものとして説明する。図4-2は、図4-1の第1の誤り処理の結果1ビットを示す図である。同図において、0=誤り無し、1=誤りありを示している。第2の誤り訂正復号部41では、第1の誤り訂正処理後のブロックBK、BCH符号、および各ブロックBKの第1の誤り訂正結果1ビットがメモリ52に格納されると共に、第1の誤り訂正処理後のブロックBK、BCH符号がシンドローム計算器51に入力される。なお、以下の説明では、第2の誤り訂正符号生成部32でBCH符号化を行う場合に、下記式1に示す原始多項式GXを用いたものとして説明する。原始多項式GX=x^8x^4x^3x^211シンドローム計算器51では、図6に示すように、BK0,1,2,3およびBCH符号のdata[0]~data[143]の順に1ビットづつ入力されて、シンドローム計算を行い、シンドローム計算結果S0[7:0]~S3[7:0]を誤り位置多項式計算器53に出力する。図5において、誤り位置多項式計算器53は、シンドローム計算結果S0[7:0]~S3[7:0]を使用して、誤り位置多項式σZ=1σ0Zσ1Z^2の係数σ1およびσ2を算出する。ここでは、ピーターソン法を用いて説明する。他にバーレーカンプマッシイ法BM法、ユークリッド互除法等を使用することができる。ピータソン法では、シンドローム計算値S0~S3を用いて、下記式2の行列式を演算して、誤り位置多項式の係数σ0およびσ1を算出する。誤り位置多項式計算器53で算出された誤り位置多項式の係数σ0[7:0]およびσ1[7:0]は、誤りロケータ計算誤り訂正器54に出力される。誤りロケータ計算誤り訂正器54は、誤り位置多項式計算器53から受け取った誤り位置多項式の係数σ0[7:0]およびσ1[7:0]に基づいて、チェンサーチを行って誤り位置を特定し、メモリ52に格納されている第1の誤り訂正済みのデータに対して、第2の誤り訂正を行う。誤りロケータ計算誤り訂正器54は、図7-1に示すように、符号長を2^N-1ここではN=8=255ビット固定長とするために、処理対象のデータに対して、先頭の111ビットを0パディングして処理を行なう。この場合、上記図4-1の場合は、誤り無し領域は、図7-2に示すように、パディング領域と誤り無しと検出されたブロックBK1,3となる。本実施の形態では、誤りロケータ計算誤り訂正器54は、先頭から誤り無し領域パディング領域、第1の誤り訂正後に誤り無しと判断された領域の処理は飛ばしてそれ以外の領域に対してのみ、誤りの個数をカウントすることで、高速に誤り個数をカウントしている。図8は、誤りロケータ計算誤り訂正器54のチェンサーチ回路61と誤り訂正部62の構成例を示す図である。図9-1は、チェンサーチ回路61の×α回路α倍する回路乗算回路の構成図である。図9-2は、チェンサーチ回路61の×α^32回路α^32倍する回路の構成図である。図9-3は、チェンサーチ回路61の×α^111回路α^111倍する回路の構成図である。図9-4は、チェンサーチ回路61の×α^2回路α^2倍する回路の構成図である。図9-5は、チェンサーチ回路61の×α^64回路α^64倍する回路の構成図である。図9-6は、チェンサーチ回路61の×α^222回路α^222倍する回路の構成図である。図10は、チェンサーチ回路の回路選択部の構成を示す図である。チェンサーチアルゴリズムとは、σzにアルゴリズムαのべきαii=0,1,...,n-1を逐次代入し、σαiが0かどうかを調べる方法で、この方法による根の検索がチェンサーチChienSearchと呼ばれる。チェンサーチ回路61は、図8に示すように、セレクタSEL0,1に切替信号を出力する回路選択部71と、×α回路76、×α^32回路75、および×α^111回路74の出力を択一的に選択して出力するセレクタSEL0と、×α^2回路79、×α^64回路78、および×α^222回路77の出力を択一的に選択して出力するセレクタSEL1と、レジスタ0,1と、EXOR演算回路80と、EXOR演算回路80の出力が1となる回数をカウントして、そのカウント値を誤り個数として、比較器55図5参照に出力する誤り数カウント部81とを備えている。また、チェンサーチ回路61は、レジスタ出力をレジスタ入力に帰還する乗算器として、1ビット処理部×α回路76、×α^2回路79と、32ビット処理部×α^32回路75および×α^64回路78と、111ビット処理部×α^111回路74,×α^222回路77とを備えている。本実施の形態のチェンサーチ回路61は、1ビット処理部×α回路76および×α^2回路79に加えて、32ビット処理部×α^32回路75,×α^64回路78、111ビット処理部×α^111回路74、×α^222回路77を備えることでチェンサーチを高速化している。1ビット処理部×α回路76およびα^2回路79は、誤り訂正対象領域のブロックを1ビット単位で処理するときに使用する。32ビット処理部×α^32回路75および×α^64回路78は、誤り訂正対象外領域のうち誤り検出で誤り無しと判定されたブロック32ビットを処理するときに使用し、32ビットデータを1サイクル1度で処理することができる。111ビット処理部×α^111回路74および×α^222回路77は、誤り訂正対象外領域のうち0でパディングされたパディング領域111ビットを処理するときに使用し、111ビットデータを1サイクル1度で処理することができる。誤り訂正部62は、データを反転出力する反転器82と、EXOR演算結果が1の場合は、入力データの反転値を出力し、EXOR演算結果が1以外の値の場合は入力データをそのまま出力するセレクタ83とを備えている。チェンサーチ回路61の処理フローについて説明する。まず、誤り位置多項式計算で計算された係数σ0[7:0]およびσ1[7:0]をレジスタ0およびレジスタ1に取り込む。1先頭の0パディング領域の処理に移る。この部分は誤りがないことが判明しているので、回路選択部71は、×α^111回路、×α^222回路を選択させる選択信号をSEL0,1に出力する。セレクタSEL0,1は、×α^111回路74の出力d0[7:0]および×α^222回路77の出力d1[7:0]をそれぞれ選択し、レジスタ0およびレジスタ1に各々取り込む。これにより、0パディング領域111ビットの処理を1サイクルで一度に行うことができ、0パディング領域111ビットの処理を高速化することが可能となる。2ブロックBK0の処理を行なう。ブロックBK0は誤り対象ブロックBKである。まず、誤り訂正部62は、メモリ53からブロックBK0の先頭データBK0[0]を取り出す。次に、×α回路76の出力b0[7:0]およびα^2回路79の出力b1[7:0]を選択し、レジスタ0およびレジスタ1に取り込む。誤り訂正部62のセレクタ83は、レジスタ0とレジスタ1のEXOR演算部80のEXOR演算結果が1ならば、BK0[0]の値の反転値を出力する。EXOR演算結果が1以外の値であればBK0[0]の値をそのまま出力する。次に、誤り訂正部62はメモリ53からブロックBK0の2番目のデータBK0[1]を取り出す。×α回路76の出力b0[7:0]および×α^2回路79の出力b1[7:0]を選択し、レジスタ0およびレジスタ1に取り込む。レジスタ0とレジスタ1のEXOR演算結果が1ならば、BK0[1]の値の反転値を出力する。EXOR演算結果が1以外の値であればBK0[1]の値をそのまま出力する。以下、同様にブロックBK0の最後のデータBK0[31]まで繰り返す。このようにして、BK0については1ビット単位の処理が行われる。3ブロックBK1の処理を行なう。ブロックBK1は誤り訂正対象外ブロックなので、×α^32回路75の出力c0[7:0]および×α^64回路78の出力c1[7:0]をレジスタ0およびレジスタ1に取り込む。これにより、誤り訂正対象外ブロック32ビットの処理を一度に行うことができ、誤り訂正対象外ブロック32ビットの処理を高速化することができる。4ブロックBK2の処理を行なう。ブロックBK2は誤り訂正対象ブロックである。3と同様に、メモリ53からブロックBK2の先頭データBK2[0]から最後のデータBK2[31]までを取り出して処理を行なう。5ブロックBK3の処理を行なう。ブロックBK3は誤り訂正対象外ブロックである。×α^32回路75の出力c0[7:0]および×α^64回路78の出力c1[7:0]をレジスタ0およびレジスタ1に取り込む。図10は、回路選択部71の構成例を示す図である。回路選択部71は、第1の誤り訂正復号結果記憶部91と、セレクタ92と、ブロックカウント部93と、ビットカウント部95と、ビット比較部97と、判定部98とを備えている。第1の誤り訂正復号結果記憶部91は、各ブロックBK0~3毎の第1の誤り訂正復号結果を保存する。0は誤り訂正できたBK第2誤り訂正復号の対象外ブロックを示す。1は誤り訂正できなかったBK第2誤り訂正復号の対象ブロックを示す。ビットカウント部95は、1ブロックBK中の現在の処理位置であるビットカウンタ値をカウントしてビット比較部97に出力するビットカウンタ値=0~31。ブロックカウント部93は、4ブロックBK中の現在の処理ブロックであるブロックカウンタ値をカウントして、セレクタ92に出力するブロックカウンタ値=0~3。ビット比較部97は、ビットカウンタ値がブロックサイズに等しいか否かを判断して、ビットカウンタ値がブロックサイズに等しい場合には、ブロックカウント部93に、ブロックカウンタ値をインクリメントさせる。セレクタ92は、ブロックカウンタ値が示すブロックの第1の誤り訂正復号結果記憶部111に格納されている第1の誤り訂正復号結果を判定部98に出力する。判定部98は、セレクタ92から出力される現在の処理ブロックの第1の誤り訂正復号結果に基づいて、1ビット処理回路×α回路76および×α^2回路79、32ビット処理回路×α^32回路75,×α^64回路78、111ビット処理回路×α^111回路74、×α^222回路77のいずれかを選択して、選択信号をセレクタSEL0、1に出力する。判定部98は、処理開始直後は、パディング領域を処理するために111ビット処理部×α^111回路74、×α^222回路77を選択する。また、判定部98は、現在の処理ブロックが誤り訂正対象外ブロックの場合は、32ビット処理部×α^32回路75,×α^64回路78を選択する。また、判定部98は、現在の処理ブロックが誤り訂正対象ブロックの場合は、1ビット処理部×α回路76および×α^2回路79を選択する。図11は、回路選択部71の動作を説明するためのフローチャートである。図11において、まず、判定部98は、111ビット処理部×α^111回路74、×α^222回路77を選択するステップS11。つぎに、判定部98は、ブロックカウンタ値が示す第1の誤り訂正復号結果記憶部91の値が1であるか否かを判定しステップS12、1である場合にはステップS12のYes、1ビット処理部×α回路76、×α^2回路79を選択するステップS16。そして、ビットカウント部95はビットカウンタ値をインクリメントしステップS17、ビット比較部97は、ビットカウント値がブロックサイズ32に等しいか否かを判断するステップS18。ビットカウンタ値がブロックサイズに等しい場合にはステップS18のYes、ステップS14に移行する一方、ビットカウンタ値がブロックサイズに等しくない場合にはステップS18のNo、ステップS17に戻る。上記ステップS12で、判定部98は、ブロックカウンタ値が示す第1の誤り訂正復号結果記憶部91の値が1でない場合にはステップS12のNo、32ビット処理部×α^32回路75,×α^64回路78を選択するステップS13。そして、ブロックカウント部95はブロックカウンタをインクリメントするステップS14。そして、ブロックカウンタ値が4である場合にはステップS15のYes、当該フローを終了する一方、ブロックカウンタ値が4でない場合にはステップS15のNo、ステップS12に戻る。以上説明したように、本実施の形態によれば、第2の誤り訂正の訂正能力を超えた誤りがあるか否かを判断し、第2の誤り訂正能力を超えた誤りがあると判断した場合には、第2の誤り訂正を行わないこととしたので、誤り訂正能力を超えた誤りがある場合に、さらなる誤りを付加することを避けることが可能となる。また、本実施の形態によれば、比較器55は、誤り位置多項式計算器53から受け取った誤り個数と、誤りロケータ計算誤り訂正器54から受け取った対象領域の誤り個数とを比較し、一致していない場合は、誤り訂正能力を超えた誤りがあると判断することとしたので、簡単かつ低コストな方法で誤り訂正能力を超えた誤りがあるかを判断することが可能となる。また、誤りロケータ計算誤り訂正器54は、誤り無し領域については、誤り個数をカウントしないで、それ以外の領域に対してのみ、誤りの個数誤り訂正した個数をカウントすることとしたので、高速に誤り個数をカウントすることが可能となる。実施の形態2図12~図15を参照して、実施の形態2にかかる第2の誤り訂正復号部41について説明する。実施の形態2では、誤り訂正能力の範囲内のデータの誤りがある場合には、誤りロケータ計算誤り訂正器101の誤り位置は正しい誤り位置を示し、誤り訂正能力を超えた誤りがある場合には、誤った誤り位置を示す確率が高いという点に着目して、上記図7-2において、誤りロケータ計算誤り訂正器101では、先頭から誤り位置を検出し、誤り位置が誤り無しの領域訂正対象外の領域で発見された時点で、誤り訂正能力を超えていると判断して、誤り訂正不可を判定し、以降の誤り位置の検出を行わない構成である。図12は、実施の形態2にかかる第2の誤り訂正復号部41の構成を示す図である。実施の形態2にかかる第2の誤り訂正復号部41は、シンドローム計算を行うシンドローム計算器51と、データを一時記憶するためのメモリ52と、誤り位置多項式計算器53と、誤りロケータ計算誤り訂正器101と、訂正不可能判定器102と、第2の誤り訂正後のデータと、メモリ52に蓄えられている第2の誤り訂正前のデータを選択する選択器56で構成される。シンドローム計算器51は、シンドローム多項式の計算を行い、計算したシンドローム多項式を誤り位置多項式計算器53に出力する。誤り位置多項式計算器53は、シンドローム多項式を用いて、誤り位置多項式を計算して、誤り位置多項式の係数を誤りロケータ計算誤り訂正器101に出力する。誤りロケータ計算誤り訂正器101は、誤り位置多項式計算器53から入力される誤り位置多項式の係数を用いて、チェンサーチを行って誤り位置を計算し、メモリ52に格納した訂正前のデータを読み出して誤り訂正を行い、誤り訂正後のデータを選択器56に出力する。また、誤りロケータ計算誤り訂正器101は、誤りを検出した場合に、誤り検出信号を訂正不可能判定器102に出力する。訂正不可能判定器102は、第1の誤り訂正復号部42から入力される第1の誤り訂正結果と、誤りロケータ誤り訂正器101から入力される誤り検出信号とに基づいて、誤りが検出された領域が、誤り無し領域パディング領域および誤り検出で誤り無しと判定された領域である場合には、誤り訂正不能誤り訂正能力を超えていると判断して処理を終了すると共に、選択器56に、誤り訂正不能である旨を示す異常信号を出力する。選択器56は、誤りロケータ計算誤り訂正器101から入力される誤り訂正後のデータをホスト装置4に転送する一方、訂正不可能判定器102から異常信号が入力された場合には、メモリ52に格納している誤り訂正前のデータをホスト装置4に転送する。誤りロケータ計算誤り訂正器101は、図7-1に示すように、符号長を2^N-1ここではN=8=255ビット固定長とするために、処理対象のデータに対して、先頭の111ビットを0パディングして処理を行なう。この場合、上記図4-1の場合は、誤り無しの領域は、図7-2に示すように、パディング領域と誤り無しと検出されたブロックBK1,3となる。図13は、誤りロケータ計算誤り訂正器101のチェンサーチ回路61と誤り訂正部62の構成例を示す図である。図13において、図8と同等機能を有する部位には、同一符号を付し、共通する部分の説明は省略する。図13に示すチェンサーチ回路61は、標準的な回路構成となっており、図8の32ビット処理部および111ビット処理部は設けられておらず、上記図7-2に示す誤り無し領域パディング領域、第1の誤り訂正後に誤り無しと判断された領域も他の領域と同様に処理される。EXOR演算部80の出力は誤り検出信号1=誤りあり、0=誤り無しとして、訂正不可能判定器102に出力される。図14は、訂正不可能判定器102の構成例を示す図である。訂正不可能判定器102は、図14に示すように、第1の誤り訂正復号結果記憶部111と、選択部112と、パティングカウント部115と、ビットカウント部119と、ブロックカウント部113と、制御部116とを備えている。第1の誤り訂正復号結果記憶部111は、第1の誤り訂正復号部42から入力される第1の誤り訂正復号結果を記憶する。パティングカウント部115は、パディング領域の現在の処理位置を示すパディングカウンタ値をカウントして制御部116に出力する。ビットカウント部119は、ブロックBK中の現在の処理位置を示すビットカウンタ値をカウントして制御部116および選択部112に出力する。ブロックカウント部113は、4ブロックのうちの現在の処理ブロック位置を示すブロックカウンタ値をカウントして制御部116に出力する。選択部112は、ブロックカウンタ値が示すブロックの第1の誤り訂正復号結果記憶部111に格納されている第1の誤り訂正復号結果を制御部116に出力する。制御部116は、パティングカウント部115、ブロックカウント部113、およびビットカウント部119の出力から現在の処理位置を判定し、第1誤り訂正復号結果記憶部111に格納される第1の誤り訂正復号結果に基づいて、現在の処理位置が誤り無し領域か否かを判定する。さらに、制御部116は、誤りロケータ誤り訂正器101からの誤り検出信号1が入力された場合に、現在処理している領域が誤り無し領域である場合には、誤り訂正不能と判断して、処理を終了し、選択部56に、誤り訂正不能である旨を示す異常信号を出力する。図15は、訂正不可能判定器102の動作を説明するためのフローチャートである。図15において、まず、制御部116は、誤り検出信号が1であるか否かを判定するステップS20。誤り検出信号が1である場合にはステップS20のYes、メモリ52からの訂正前データを選択して、ホスト装置4に出力するステップS23。他方、誤り検出信号が1でない場合にはステップS20のNo、パティングカウント部115はパディングカウンタ値を1インクリメントしステップS24、パディングカウンタ値がパディング長と等しいか否かを判定するステップS25。パディングカウンタ値がパディング長と等しくない場合にはステップS25のNo、ステップS20に戻る一方、パディングカウンタ値がパディング長と等しい場合にはステップS25のYes、次の誤り検出信号は1であるか否かを判定するステップS21。次の誤り検出信号が1でない場合にはステップS21のNo、ステップS26に移行する一方、次の誤り検出信号が1である場合にはステップS21のYes、ブロックカウンタ値が示すブロックは、訂正対象外か否かを判定するステップS22。ブロックカウンタ値が示すブロックが訂正対象外である場合にはステップS22のNo、メモリ52から訂正前データを選択して、ホスト装置4に出力するステップS23。他方、ブロックカウンタ値が示すブロックが訂正対象外でない場合にはステップS22のYes、ステップS26に移行する。ステップS26では、ビットカウント部119はビットカウンタ値を1インクリメントし、ビットカウンタ値がブロックサイズと一致するか否かを判定するステップS27。ビットカウンタ値がブロックサイズと一致しない場合にはステップS27のNo、ステップS21に戻る一方、ビットカウンタ値がブロックサイズと一致する場合にはステップS27のYes、ブロックカウント部113は、ブロックカウンタ値をインクリメントしステップS28、ブロックカウンタ値が4であるか否かを判定するステップS29。ブロックカウンタ値が4でない場合にはステップS29のNo、ステップS21に戻る一方、ブロックカウンタ値が4である場合にはステップS29のYes、誤りロケータ計算誤り訂正器101で誤り訂正されたデータをホスト装置4に転送するステップS20。以上説明したように、実施の形態2によれば、訂正不可能判定器102は、第1の誤り訂正復号部42から入力される第1の誤り訂正結果と、誤りロケータ誤り訂正器101から入力される誤り検出信号とに基づいて、誤りが検出された領域が、誤り無し領域パディング領域および誤り検出で誤り無しと判定された領域である場合には、誤り訂正能力を超えていると判断することとしたので、簡単な構成で誤り訂正能力を超えているか否かを判断することが可能となる。なお、上記した実施の形態では、ブロックのサイズを32ビット、BCH符号を2ビットの訂正能力がある16ビットサイズ、パディング領域を111ビットとしたが、本発明はこれに限られるものではなく、ブロックのサイズ、BCH符号の訂正能力およびサイズ、パディング領域のサイズは如何なる値としてもよい。また、上記実施の形態では、本発明をNANDメモリを有するSSDに適用するようにしたが、NOR型などの他のフラッシュEEPROMを有するSSDに本発明を適用するようにしてもよい。また、本発明の各実施形態における各機能ブロックは、ハードウェア、コンピュータソフトウェア、のいずれか、または両者の組み合わせとして実現することができる。このため、各ブロックは、これらのいずれでもあることが明確となるように、概してそれらの機能の観点から以下に説明される。このような機能が、ハードウェアとして実行されるか、またはソフトウェアとして実行されるかは、具体的な実施態様またはシステム全体に課される設計制約に依存する。当業者は、具体的な実施態様ごとに、様々な方法でこれらの機能を実現し得るが、そのような実現を決定することは本発明の範疇に含まれるものである。"