(57)【要約】【課題】処理を複雑にせず、回路規模の増大を防ぐことができるメモリコントローラを得ること。【解決手段】メモリ部へ書き込むデータに対して誤り検出符号化処理により冗長データを生成する符号化部と、データと冗長データをメモリ部から読み出し、読み出しデータに対して第１の誤り訂正能力を有する第１の誤り訂正復号化処理を実施する第１の誤り訂正復号化部を有するｎ（ｎは２以上の整数）個のメモリインターフェースと、第１の誤り訂正能力より高い誤り訂正能力を有する第２の誤り訂正復号化処理を実施するｎより小さい個数の第２の誤り訂正復号化部と、を備え、読み出しデータに対する第１の誤り訂正復号処理が失敗した場合第２の誤り訂正復号化処理部へ第２の誤り訂正復号化処理の実施を指示し、第２の誤り訂正復号化処理部が使用不可であった場合、入力する読み出しデータを変更して第１の誤り訂正復号化部を用いた再復号処理を実施する。【選択図】図２
2013214212.tif 000002
【特許請求の範囲】
【請求項１】
メモリ部を制御するメモリコントローラであって、
前記メモリ部へ書き込むデータに対して誤り検出符号化処理を実施して冗長データを生成する符号化部と、
前記データと前記冗長データとを前記メモリ部へそれぞれ書き込み、前記データと前記冗長データとを読み出しデータとして前記メモリ部からそれぞれ読み出し、前記読み出しデータに対して第１の誤り訂正能力を有する第１の誤り訂正復号化処理を実施する第１の誤り訂正復号化部をそれぞれ有するｎ（ｎは２以上の整数）個のメモリインターフェースと、
第１の誤り訂正復号処理が失敗した場合に、前記読み出しデータに対して前記第１の誤り訂正能力より高い誤り訂正能力を有する第２の誤り訂正復号化処理を実施するｎより小さい個数の第２の誤り訂正復号化部と、
を備え、
前記メモリインターフェースは、前記読み出しデータに対する第１の誤り訂正復号処理が失敗した場合、前記第２の誤り訂正復号化処理部の使用可否を判断し、前記第２の誤り訂正復号化処理部が使用可である場合には前記第２の誤り訂正復号化処理部へ当該読み出しデータに対する第２の誤り訂正復号化処理の実施を指示し、前記第２の誤り訂正復号化処理部が使用不可である場合に、入力する前記読み出しデータを変更して前記第１の誤り訂正復号化部を用いた再復号処理を実施する、ことを特徴とするメモリコントローラ。
【請求項２】
前記メモリインターフェースは、前記読み出しデータに対する前記第１の誤り訂正復号処理が失敗し、かつ前記第２の誤り訂正復号化処理部が使用不可であった場合に、シフトリードを実施することにより入力する前記読み出しデータを変更して前記再復号処理を実施することを特徴とする請求項１に記載のメモリコントローラ。
【請求項３】
シフトリードおよび前記再復号処理を、シフトリードの回数が所定の回数に至る、または前記再復号処理が成功するまで繰り返すことを特徴とする請求項２に記載のメモリコントローラ。
【請求項４】
前記メモリインターフェースは、論理アドレスと物理アドレスの変換情報を保持し、前記データに対応する論理アドレスを前記データとともに前記メモリ部へ格納し、前記読み出しデータにはさらに前記論理アドレスを含み、前記読み出しデータに対する前記第１の誤り訂正復号処理が失敗し、かつ前記第２の誤り訂正復号化処理部が使用不可であった場合に、前記データと前記冗長データとを再度読み出し、前記変換情報に基づいて算出した論理アドレスと再度読み出した前記データおよび前記冗長データとを変更後の入力データとして前記再復号処理を実施することを特徴とする請求項１に記載のメモリコントローラ。
【請求項５】
前記メモリインターフェースは、論理アドレスと物理アドレスの変換情報を保持し、前記データに対応する論理アドレスを前記データとともに前記メモリ部へ格納し、前記読み出しデータにはさらに前記論理アドレスを含み、読み出した前記データおよび前記冗長データを保持し、前記読み出しデータに対する前記第１の誤り訂正復号処理が失敗し、かつ前記第２の誤り訂正復号化処理部が使用不可であった場合に、前記変換情報に基づいて算出した論理アドレスと保持している前記データおよび前記冗長データとを変更後の入力データとして前記再復号処理を実施することを特徴とする請求項１に記載のメモリコントローラ。
【請求項６】
前記誤り検出符号化処理は、前記冗長データである第１の冗長データを生成する第１の符号化処理と、前記冗長データであり前記第１の冗長データより高い誤り訂正能力を有する第２の冗長データを生成する第２の符号化処理と、を含み、
前記第１の誤り訂正復号化部は、前記冗長データとして前記第１の冗長データを用いて前記第１の誤り訂正復号処理を実施し、
前記第２の誤り訂正復号化部は、前記冗長データとして前記第２の冗長データを用いて前記第２の誤り訂正復号処理を実施することを特徴とする請求項１乃至５のいずれか一項に記載のメモリコントローラ。
【請求項７】
メモリ部と、
前記メモリ部への書き込みおよび前記メモリ部からの読み出しを制御するメモリコントローラと、
を備え、
前記メモリコントローラは、
前記メモリ部へ書き込むデータに対して誤り検出符号化処理を実施して冗長データを生成する符号化部と、
前記データと前記冗長データとを前記メモリ部へそれぞれ書き込み、前記データと前記冗長データとを読み出しデータとして前記メモリ部からそれぞれ読み出し、前記読み出しデータに対して第１の誤り訂正能力を有する第１の誤り訂正復号化処理を実施する第１の誤り訂正復号化部をそれぞれ有するｎ（ｎは２以上の整数）個のメモリインターフェースと、
第１の誤り訂正復号処理が失敗した場合に、前記読み出しデータに対して前記第１の誤り訂正能力より高い誤り訂正能力を有する第２の誤り訂正復号化処理を実施するｎより小さい個数の第２の誤り訂正復号化部と、
を備え、
前記メモリインターフェースは、前記読み出しデータに対する第１の誤り訂正復号処理が失敗した場合、前記第２の誤り訂正復号化処理部の使用可否を判断し、前記第２の誤り訂正復号化処理部が使用可である場合には前記第２の誤り訂正復号化処理部へ当該読み出しデータに対する第２の誤り訂正復号化処理の実施を指示し、前記第２の誤り訂正復号化処理部が使用不可である場合に、入力する前記読み出しデータを変更して前記第１の誤り訂正復号化部を用いた再復号処理を実施する、ことを特徴とする半導体記憶装置。
【請求項８】
ｎ（ｎは２以上の整数）個のチャネルごとに備えた第１の誤り訂正能力を有する第１の誤り訂正復号化処理を実施する第１の誤り訂正復号化部と、前記第１の誤り訂正能力より高い誤り訂正能力を有する第２の誤り訂正復号化処理を実施するｎより小さい個数の第２の誤り訂正復号化部と、を用いて、メモリ部へ書き込まれたデータと当該データに対して誤り検出符号化処理により生成された冗長データとに対して誤り訂正復号化処理を行う復号方法であって、
前記データと前記冗長データとを読み出しデータとをｎ（ｎは２以上の整数）個のチャネルごとに読み出しデータとして前記メモリ部からそれぞれ読み出すステップと、
前記読み出しデータに対する第１の誤り訂正復号処理が失敗した場合、前記第２の誤り訂正復号化処理部の使用可否を判断するステップと、
前記第２の誤り訂正復号化処理部が使用可である場合には前記第２の誤り訂正復号化処理部へ当該読み出しデータに対する第２の誤り訂正復号化処理を用いた第２の誤り訂正復号化処理を実施するステップと、
前記第２の誤り訂正復号化処理部が使用不可である場合に、入力する前記読み出しデータを変更して前記第１の誤り訂正復号化部を用いた再復号処理を実施するステップと、
を含むことを特徴とする復号方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、メモリコントローラ、半導体記憶装置および復号方法に関する。
【背景技術】
【０００２】
一般に、誤り訂正能力が高い（かつ符号化率の高い）符号は、その復号化処理が複雑になる。また、発生する誤りの数にはばらつきがあり、誤りの数が多い場合には高い誤り訂正能力を発揮することと、誤りが少ない場合には簡易な復号化処理で済ませることと、を両立したいという要求がある。この要求に対して、多重に誤り訂正符号化を実施する技術や、適応的に復号方法を切り替える技術が知られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００９−５９４２２号公報
【特許文献２】特開２０１１−１００５１９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
多重に誤り訂正符号化を実施する技術や、適応的に復号方法を切り替える技術では、一般に、処理が複雑になる、または回路規模が大きくなる等の問題がある。
【課題を解決するための手段】
【０００５】
本願発明の一態様によれば、メモリ部を制御するメモリコントローラであって、メモリ部へ書き込むデータに対して誤り検出符号化処理を実施して冗長データを生成する符号化部と、データと冗長データとをメモリ部へそれぞれ書き込み、データと冗長データとを読み出しデータとしそれぞれ読み出し、読み出しデータに対して第１の誤り訂正能力を有する第１の誤り訂正復号化処理を実施する第１の誤り訂正復号化部をそれぞれ有するｎ（ｎは２以上の整数）個のメモリインターフェースと、第１の誤り訂正復号処理が失敗した場合に、読み出しデータに対して第１の誤り訂正能力より高い誤り訂正能力を有する第２の誤り訂正復号化処理を実施するｎより小さい個数の第２の誤り訂正復号化部と、を備える。メモリインターフェースは、読み出しデータに対する第１の誤り訂正復号処理が失敗した場合に、第２の誤り訂正復号化処理部が使用可であれば第２の誤り訂正復号化処理部へ当該読み出しデータに対する第２の誤り訂正復号化処理の実施を指示し、第２の誤り訂正復号化処理部が使用不可であった場合に、入力する読み出しデータを変更して第１の誤り訂正復号化部を用いた再復号処理を実施する。
【図面の簡単な説明】
【０００６】
【図１】図１は、第１の実施の形態にかかる半導体記憶装置の構成を示すブロック図である。
【図２】図２は、第１の実施の形態のＮＡＮＤＩ／Ｆの構成例を示す図である。
【図３】図３は、メモリ部への書込みフォーマットの一例を示す図である。
【図４】図４は、メモリ部への書込みフォーマットの一例を示す図である。
【図５】図５は、低度ＥＣＣ復号化部により訂正可の場合の読み出し処理のタイミングチャートの一例を示す図である。
【図６】図６は、低度ＥＣＣ復号化部により訂正不可の場合の比較例の読み出し処理のタイミングチャートの一例を示す図である。
【図７】図７は、低度ＥＣＣ復号化部により訂正不可の場合の第１の実施の形態の読み出し処理のタイミングチャートの一例を示す図である。
【図８】図８は、第１の実施の形態の復号化処理手順の一例を示すフローチャートである。
【図９】図９は、複数回シフトリードを実施する場合の読み出し時のタイミングチャートの一例を示す図である。
【図１０】図１０は、複数回シフトリードを実施する場合の第１の実施の形態の復号化処理手順の一例を示すフローチャートである。
【図１１】図１１は、第２の実施の形態のメモリ部への書込みフォーマットの一例を示す図である。
【図１２】図１２は、第２の実施の形態の読み出し処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、実施形態にかかるメモリコントローラ、半導体記憶装置および復号方法を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【０００８】
（第１の実施の形態）
図１は、第１の実施の形態にかかる半導体記憶装置の構成を示すブロック図である。本実施の形態では、半導体記憶装置が半導体ドライブ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ： ＳＳＤ）である例を説明するが、本実施の形態の半導体記憶装置はＳＳＤに限定されない。
【０００９】
本実施の形態の半導体記憶装置１は、メモリ部３と、メモリ部３を制御するメモリコントローラ２を備える。半導体記憶装置１は、通信媒体を介してホスト９に接続され、ホスト９に対する外部記憶媒体として機能する。ホスト９の例としては、パーソナルコンピュータやＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）コア等があげられる。
【００１０】
メモリ部３は、ＮＡＮＤフラッシュメモリ３１−１乃至３１−ｎ（ｎは２以上の整数）を備える。メモリコントローラ２は、ホストインターフェース４、コマンド処理部５、マイクロプロセッサ６、設定レジスタ群７およびＮＡＮＤＩ／Ｆ（Ｉｎｔｅｒｆａｃｅ）制御部８を備える。ホストインターフェース４、コマンド処理部５、マイクロプロセッサ６、設定レジスタ群７およびＮＡＮＤＩ／Ｆ制御部８は、内部バス１０を介して接続されている。
【００１１】
ＮＡＮＤＩ／Ｆ制御部８は、高度ＥＣＣ（Ｅｒｒｏｒ  Ｃｈｅｃｋ  ａｎｄ  Ｃｏｒｒｅｃｔ）部（第２の誤り訂正復号化部）８１と、ＮＡＮＤＩ／Ｆ８２−１乃至８１−ｎを備える。本実施の形態では、ＮＡＮＤＩ／Ｆ制御部８は、ｎ個のチャネル（ｃｈ０〜Ｃｈ（ｎ−１））にそれぞれ対応するＮＡＮＤＩ／Ｆ８２−１乃至８１−ｎを備え、ＮＡＮＤフラッシュメモリ３１−１乃至３１−ｎに対してそれぞれ個別にプログラム（書込み）、リード（読み出し）、イレース（消去）等の動作を実施する。高度ＥＣＣ部８１は、高度ＥＣＣ復号化部８１１を備える。
【００１２】
ＮＡＮＤＩ／Ｆ８２−１乃至８１−ｎは、メモリ部３への読み書きを行うメモリインターフェースを構成し、ＮＡＮＤＩ／Ｆ８２−１乃至８１−ｎがそれぞれチャネルに対応し、チャネルごとに独立して動作することが可能である。
【００１３】
ホストインターフェース４は、ホスト９から受信した命令、データなどを内部バス１０に出力する。また、ホストインターフェース４は、内部バス１０経由で入力されたデータ、マイクロプロセッサ６からの応答通知（命令の実行完了を示す通知など）などをホスト９へ送信する。
【００１４】
マイクロプロセッサ６は、半導体記憶装置１の各構成要素を統括的に制御する制御部であり、ＣＰＵコア、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）コントローラなどで構成される。マイクロプロセッサ６は、ホスト９からホストインターフェース４および内部バス１０経由で命令を受けた場合に、その命令に従った制御を行う。マイクロプロセッサ６は、設定レジスタ群７の各レジスタの値を設定する。
【００１５】
コマンド処理部５は、マイクロプロセッサ６からの制御にしたがって、ＮＡＮＤＩ／Ｆ制御部８を制御する。コマンド処理部５は、論理アドレスと物理アドレス（ＮＡＮＤフラッシュメモリ３１−１乃至３１−ｎ）の対応を保持し、マイクロプロセッサ６から、書込み対象のデータの論理アドレスとともに書込みが指示された場合、当該論理アドレスを物理アドレスに変換して、当該物理アドレスを指定して書込み対象のデータを書込むようＮＡＮＤＩ／Ｆ制御部８へ指示する。ＮＡＮＤフラッシュメモリ３１−１乃至３１−ｎからの読み出し時には、マイクロプロセッサ６から指定された論理アドレスに対応する物理アドレスから読み出し対象のデータを読み出すようＮＡＮＤＩ／Ｆ制御部８へ指示する。
【００１６】
図２は、本実施の形態のＮＡＮＤＩ／Ｆ８２−１乃至８１−ｎの構成例を示す図である。ＮＡＮＤＩ／Ｆ８２−ｉ（ｉ＝１，２，…，ｎ）は、ＥＣＣ符号化部（符号化部）８２１−ｉと低度ＥＣＣ復号化部（第１の誤り訂正復号化部）８２２−ｉを備える。
【００１７】
ここで、本実施の形態の誤り訂正符号化処理とメモリ部３への書込みについて説明する。本実施の形態では、ＮＡＮＤフラッシュメモリ３１−１乃至３１−ｎへ書き込むデータに対して誤り訂正符号化処理を実施して冗長データを生成し、冗長データとともに書込みデータをＮＡＮＤフラッシュメモリ３１−１乃至３１−ｎへ書き込む。
【００１８】
図３、４は、本実施の形態のメモリ部３への書込みフォーマットの一例を示す図である。図３は、誤り訂正符号化処理が１種類の符号を用いて実施される例を示し、誤り訂正符号化処理が２種類の符号を用いて実施される例を示している。図３の例では、高い誤り訂正能力を有する１種類の冗長データ（図では、ＥＣＣと表記）を生成する。図４の例では、低い誤り訂正能力を有する冗長データ（図では、ＥＣＣ＃１と表記）と、高い誤り訂正能力を有する冗長データ（図では、ＥＣＣ＃２と表記）と、の２種類を生成する。なお、図４では、ＥＣＣ＃１を生成するユーザデータの単位（データ量）とＥＣＣ＃２を生成するユーザデータの単位が同一の例を示しているが、両者は異なっていてもよい。例えば、５１２バイトのユーザデータに対してＥＣＣ＃１を生成し、５１２×ｍ（ｍは２以上の整数）バイトのユーザデータに対してＥＣＣ＃２を生成する等としてもよい。
【００１９】
本実施の形態の動作は、誤り訂正符号化処理が１種類の符号を用いる場合でも、誤り訂正符号化処理が２種類の符号を用いて実施される場合でもどちらでも適用可能であるが、図１、２で述べた構成例では、図４に示すように誤り訂正符号化処理が２種類の符号を用いて実施される例を前提としている。したがって、ＥＣＣ符号化部８２１−１乃至８２１−ｎは、低い誤り訂正能力を有する冗長データする誤り訂正符号化処理を実施する。
【００２０】
図３に示すように誤り訂正符号化処理が１種類の符号を用いる場合には、ＥＣＣ符号化部８２１−１乃至８２１−ｎが、高い誤り訂正能力を有し、且つ低い誤り訂正能力の冗長データを包含する１種類の冗長データを生成すればよい。
【００２１】
ＮＡＮＤＩ／Ｆ８２−ｉ（ｉ＝１，２，…，ｎ）は、コマンド処理部５からの指示に基づいて、定められたフォーマット（例えば、図３、図４に示したフォーマット）にしたがって、書込み対象のデータに対して誤り訂正符号化処理を実施する。そして、ＮＡＮＤＩ／Ｆ８２−ｉは、書込み対象のデータと誤り訂正符号化処理により生成された冗長データとをＮＡＮＤフラッシュメモリ３１−ｉへ書き込む。
【００２２】
次に、本実施の形態のメモリ部３からの読み出し動作について説明する。本実施の形態では、所定の数ａ（ａは１以上の整数）個までの誤りを訂正可能な低度ＥＣＣ復号化部をチャネル数分備える。一方で、ｂ（ｂはｂ＞ａの整数）個までの誤りを訂正可能な高度ＥＣＣ復号化部８１１をチャネル数より少ない数備える。なお、図１の例では、高度ＥＣＣ復号化部８１１を１つ備える例を示しているが、１つに限らずチャネル数より少ない数であればよい。
【００２３】
図４に示したように、ＥＣＣ＃１とＥＣＣ＃２の２種類が生成される場合、ＥＣＣ符号化部８２１−１乃至８２１−ｎは、所定の誤り訂正能力の誤り訂正符号化処理により冗長データ（ＥＣＣ＃１）を生成し、また、所定の誤り訂正能力より高い訂正能力の誤り訂正符号化処理により冗長データ（ＥＣＣ＃２）を生成する。
【００２４】
ＥＣＣ＃１とＥＣＣ＃２の２種類が生成される場合、例えば、低度ＥＣＣ復号化部８２２−１乃至８２２−ｎは、ＥＣＣ＃１とデータを用いて、ＥＣＣ＃１の最大誤り訂正能力に対応する誤り訂正復号化処理を実施する（ａをＥＣＣ＃１の最大誤り訂正能力とする）。また、高度ＥＣＣ復号化部８１１は、例えば、ＥＣＣ＃２とデータを用いて、ＥＣＣ＃２の最大誤り訂正能力に対応する誤り訂正復号化処理を実施する（ｂをＥＣＣ＃２の最大誤り訂正能力とする）。なお、ａ、ｂはこの例に限定されず、ｂ＞ａを満たせばよく、ａはＥＣＣ＃１の最大誤り訂正能力と一致しなくてもよいし、ｂはＥＣＣ＃２の最大誤り訂正能力と一致しなくてもよい。
【００２５】
図３に示したように、１種類のＥＣＣが生成される場合、高度ＥＣＣ復号化部８１１は、例えば、ＥＣＣ＃２の最大誤り訂正能力に対応する誤り訂正復号化処理を実施する（ｂをＥＣＣ＃２の最大誤り訂正能力とする）。この場合、低度ＥＣＣ復号化部８２２−１乃至８２２−ｎの誤り訂正能力であるａは、ｂより小さければどのような数値でもよい。なお、ｂはＥＣＣの最大誤り訂正能力と一致しなくてもよい。
【００２６】
本実施の形態の誤り訂正符号はどのような符号を用いてもよいが、例えば、ＢＣＨ符号、リードソロモン符号等を用いることができる。
【００２７】
誤り訂正復号化処理を行う回路の規模は、訂正能力が大きくなればなるほど大きくなる。このため、本実施の形態では、ある程度の訂正能力（最大誤り訂正能力ａ）を持った低度ＥＣＣ復号化部８２２−１乃至８２２−ｎを備えてチャネルごとに誤り訂正処理（誤り訂正復号化処理）を行い、低度ＥＣＣ復号化部８２２−１乃至８２２−ｎの訂正能力を超える誤りがあった場合に高度ＥＣＣ復号化部８１１により誤り訂正処理を実施する。高度ＥＣＣ復号化部８１１の個数をチャネル数より小さい数とすることにより、復号化回路全体の回路規模を抑えることができる。
【００２８】
次に、本実施の形態の復号化処理を含む読み出し動作の詳細を説明する。コマンド処理部５は、マイクロプロセッサ６からの指示に基づいて、ＮＡＮＤＩ／Ｆ制御部８のＮＡＮＤＩ／Ｆ８２−１乃至８２−ｎに対して、メモリ部３からのデータの読み出しを指示する。読み出し対象となるデータが格納されているＮＡＮＤフラッシュメモリ３１−１乃至３１−ｎを制御するＮＡＮＤＩ／Ｆ８２−１乃至８２−ｎは、ＮＡＮＤフラッシュメモリ３１−１乃至３１−ｎから読み出し対象のデータと当該データに対応する冗長データとを読み出し、低度ＥＣＣ復号化部８２２−１乃至８２２−ｎへ入力する。
【００２９】
低度ＥＣＣ復号化部８２２−１乃至８２２−ｎは、ＮＡＮＤフラッシュメモリ３１−１乃至３１−ｎから読み出したデータと当該データに対応する冗長データとに基づいて復号化処理（ＥＣＣ処理）を実施する。つまり、低度ＥＣＣ復号化部８２２−１乃至８２２−ｎは、当該データの誤りの有無をチェック（エラーチェック）し、誤りが有る場合は、当該データに対して誤り訂正を行った後に、内部バス１０へ出力する。復号化処理とは、具体的には、例えば、シンドローム計算、誤り位置多項式演算等を含み、シンドロームにより誤りの有無、誤り位置多項式により誤りの個数が算出され、誤りの訂正を行うことができる。内部バス１０へ出力されたデータは、ホストインターフェース４経由でホスト９へ転送される。
【００３０】
一方、低度ＥＣＣ復号化部８２２−１乃至８２２−ｎは、復号化処理が失敗した（誤り訂正不可）であった場合、復号化処理に失敗したデータおよび冗長データを高度ＥＣＣ復号化部８１１へ出力するとともに復号化処理の実施を依頼する。高度ＥＣＣ復号化部８１１は、入力されたデータおよび冗長データに基づいて復号化処理を実施し、誤り訂正可であった場合は、誤りを訂正し、訂正後のデータを一旦、入力元のＮＡＮＤＩ／Ｆ８２−１乃至８２−ｎへ戻す。高度ＥＣＣ復号化部８１１から誤り訂正後のデータを受け取ったＮＡＮＤＩ／Ｆ８２−１乃至８２−ｎは、内部バス１０へ当該データを出力する。また、高度ＥＣＣ復号化部８１１は、訂正不可であった場合、訂正不能エラーの発生を入力元のＮＡＮＤＩ／Ｆ８２−１乃至８２−ｎへ通知し、通知を受信したＮＡＮＤＩ／Ｆ８２−１乃至８２−ｎは、訂正不能エラーの発生をマイクロプロセッサ６へ通知する。
【００３１】
図５乃至７は、本実施の形態の読み出し処理のタイミングチャートの一例を示す図である。ここでは、説明の簡略化のため、ｎ＝４とし、ＮＡＮＤＩ／Ｆ８２−１，８２−２，８３−３，８２−４が、それぞれＣｈ０，Ｃｈ１，Ｃｈ２，Ｃｈ３に対応するとして説明する。図中、Ｄｘ−Ｄｙ（例えば、Ｄ０−０等）と記載された矩形は、Ｃｈｘのｙ番目のデータに対する処理を示す。
【００３２】
図５は、Ｃｈ０乃至Ｃｈ３において、それぞれ読み出したデータにエラーが存在し、低度ＥＣＣ復号化部８２２−１乃至８２２−ｎによる誤り訂正処理（ＥＣＣ処理）により、訂正可であった場合のタイミングチャートを示している。ここでは、Ｃｈ０，Ｃｈ１，Ｃｈ２，Ｃｈ３の順に若干タイミングがずれて読み出しが行われるとしているが、データの読み出しが行われるチャネルの順やタイミングのずれは、図５の例に限定されない。
【００３３】
まず、ＮＡＮＤＩ／Ｆ８２−ｉ（ｉ＝１，２，３，４）では、ＮＡＮＤフラッシュメモリ３１−ｉからデータおよび当該データに対応する冗長データを読み出し、読み出したデータおよび冗長データに基づいて低度ＥＣＣ復号化部８２２−ｉによりＥＣＣ処理が実施され、誤りがあるかのチェックを実施する（図５の読み出し／ＥＣＣチェックの実施）。図５乃至７では、データおよび冗長データ（ＥＣＣ）を用いた、誤りがあるかのチェックを含むＥＣＣ処理をＥＣＣチェックと記載している。
【００３４】
図５では、ＥＣＣチェックによりデータに誤りがあると判定された例を示しており、ＮＡＮＤＩ／Ｆ８２−ｉでは、低度ＥＣＣ復号化部８２２−ｉにより、誤り訂正処理（ＥＣＣ訂正）が実施される。誤り訂正処理は、具体的には誤り位置として検出されたビット値を反転させる処理である。ＮＡＮＤＩ／Ｆ８２−ｉでは、Ｄｉ−０のＥＣＣ訂正と並行して、次のデータＤｉ−１の読み出し／ＥＣＣチェックを行う。以降、ＮＡＮＤＩ／Ｆ８２−ｉは、順次、ＥＣＣ訂正の実施中に、次のデータの読み出し／ＥＣＣチェックを実施していく。なお、ＥＣＣチェックによりデータに誤りが無いと判定された場合は、誤り訂正処理を実施せずに、ＮＡＮＤフラッシュメモリ３１−ｉから読み出されたデータが内部バス１０へ出力される。
【００３５】
図５の例では、低度ＥＣＣ復号化部８２２−ｉによるＥＣＣ処理が成功しているため、ＮＡＮＤＩ／Ｆ８２−ｉは、誤り訂正後のデータを内部バス１０へ出力（データ出力）する。ＮＡＮＤＩ／Ｆ８２−ｉは、Ｄｉ−０のデータ出力と並行して、次のデータＤｉ−１の誤り訂正処理を行う。以降、ＮＡＮＤＩ／Ｆ８２−ｉは、順次、データ出力中に、次のデータの誤り訂正処理を実施していく。
【００３６】
読み出し／ＥＣＣチェック、ＥＣＣ訂正、データ出力の各フェーズの処理は、各チャネルは独立して動作な処理であり、処理時間も同程度となる様に設計されている。図５に示すように、高度ＥＣＣ復号化部８１１を用いない場合は、各チャネルは並行して他のチャネルの影響を受けずに読み出し処理を行うことができる。
【００３７】
これに対し、高度ＥＣＣ復号化部８１１は、図１の構成例では１つのみであり、高度ＥＣＣ復号化部８１１を使用する場合には、他のチャネルとの調整が必要となる。また、高度ＥＣＣエラー訂正（高度ＥＣＣ復号化部８１１による復号化）の処理時間はその他のフェーズの処理時間に比べて長いものとなる。図６は、高度ＥＣＣ復号化部８１１を使用する場合の比較例のタイミングチャートの一例を示している。この比較例では、ＥＣＣチェックにより訂正不可となり高度ＥＣＣ復号化部８１１を使用する際に、他のチャネルにより高度ＥＣＣ復号化部８１１が使用されている場合は、高度ＥＣＣ復号化部８１１が空くまで待機する。
【００３８】
図６に示すように、この例では、まず、図５の例と同様に、ＮＡＮＤＩ／Ｆ８２−ｉ（ｉ＝１，２，３，４）では、読み出し／ＥＣＣチェックを実施する。ここでは、ＮＡＮＤＩ／Ｆ８２−１のＥＣＣチェックで、Ｄ０−０に対する復号化処理が失敗（ＦＡＩＬ）したと判定され、高度ＥＣＣ復号化部８１１による復号化処理が実施される。なお、以降、高度ＥＣＣ復号化部８１１による復号化処理を高度ＥＣＣエラー訂正と表記する。ＮＡＮＤＩ／Ｆ８２−１（Ｃｈ０）では、高度ＥＣＣ復号化部８１１による復号化処理が終了するまでＤ０−０を出力することができないため、次のデータＤ０−１を読み出すことができない。Ｄ０−０に対する高度ＥＣＣ復号化部８１１による復号化処理が終了すると、ＮＡＮＤＩ／Ｆ８２−１は、Ｄ０−１を読み出す。図６の例では、Ｄ０−１には誤りがなかったとしＤ０−１はデータ出力され、Ｄ０−１のデータ出力と並行してＤ０−２が読み出される。
【００３９】
また、ＮＡＮＤＩ／Ｆ８２−２、４（Ｃｈ１、Ｃｈ３）においても、最初のデータで復号化処理が失敗したとする。ＮＡＮＤＩ／Ｆ８２−２では、読み出し／ＥＣＣチェックにより復号化処理を失敗したと判定し、高度ＥＣＣ復号化部８１１に対して復号化処理の実施を依頼することになるが、この例では、Ｃｈ０のＤ０−０により高度ＥＣＣ復号化部８１１が使用されている。したがって、ＮＡＮＤＩ／Ｆ８２−２（Ｃｈ１）は、高度ＥＣＣ復号化部８１１がＣｈ０のＤ０−０に対する処理を終了した後に、高度ＥＣＣ復号化部８１１に対してＤ１−０の復号化処理の実施を依頼する。ＮＡＮＤＩ／Ｆ８２−４（Ｃｈ３）は、さらに、高度ＥＣＣ復号化部８１１がＣｈ１のＤ１−０に対する処理を終了した後に、高度ＥＣＣ復号化部８１１に対してＤ３−０の復号化処理の実施を依頼する。
【００４０】
また、ＮＡＮＤＩ／Ｆ８２−３（Ｃｈ２）では、２番目のデータＤ２−１で復号化処理が失敗したとする。この場合、ＮＡＮＤＩ／Ｆ８２−３（Ｃｈ２）は、高度ＥＣＣ復号化部８１１がＣｈ３のＤ３−０に対する処理を終了した後に、高度ＥＣＣ復号化部８１１に対してＤ２−１の復号化処理の実施を依頼する。このように、図６に示した比較例では、復号化処理の失敗が重なった場合、高度ＥＣＣ復号化部８１１が空くまでの待機時間が長くなり、読み出し速度が低下することになる。
【００４１】
これに対し、本実施の形態では、高度ＥＣＣ復号化部８１１に対する使用要求が重なった場合、図７に示すように、シフトリードによる再復号を実施することにより、高度ＥＣＣ復号化部８１１を用いずに誤りを訂正する確率を向上させ、読み出し速度の低下を防ぐ。
【００４２】
図７は、シフトリードによる再復号する場合のタイミングチャートの一例を示す図である。図７では、各チャネルの処理で、読み出し／ＥＣＣチェックの処理とＥＣＣ訂正の処理の間に、シフトリード／ＥＣＣチェックの欄を追加している。
【００４３】
シフトリードは、ＮＡＮＤフラッシュメモリ３１−１乃至３１−ｎへの読み出しアクセス時の読み出し電圧及び閾値を変更して再度読み出しを行う処理である。このシフトリードにより、読み出し電圧及び閾値を変更する前の状態では正しく読めなかったデータに対して、読み出したデータの誤りが低減する可能性がある。図７では、シフトリードとして、電圧及び閾値を変更して１回再読み出しを実施する例を示している。また、図７では、比較のため、図６の場合の処理を点線の矩形で示している。
【００４４】
図７に示すように、Ｃｈ０では、まず、図５の例と同様にＤ０−０の読み出し／ＥＣＣチェックが行われる。ＥＣＣチェックで復号化処理失敗と判定されて高度ＥＣＣエラー訂正が必要と判断され、他のチャネルが高度ＥＣＣ復号化部８１１を使用していないため高度ＥＣＣ復号化部８１１によりＤ０−０に対する高度ＥＣＣエラー訂正の処理が開始される。以降、図６の例と同様に、Ｄ０−１、Ｄ０−２に対する処理が実施される。
【００４５】
Ｃｈ１では、まず、Ｄ１−０の読み出し／ＥＣＣチェックが行われる。ＥＣＣチェックで復号化処理失敗と判定されて高度ＥＣＣエラー訂正が必要と判断されるが、この判断がされた時には既にＣｈ０のＤ０−０の処理に高度ＥＣＣ復号化部８１１が使用されている。この場合、Ｃｈ１では、シフトリードを実施し、シフトリード後のデータに対して再度ＥＣＣチェックを実施する（シフトリード／ＥＣＣチェックの実施）。本実施の形態では、このように、高度ＥＣＣエラー訂正が必要な場合に高度ＥＣＣ復号化部８１１が別チャネルにより使用されている場合、シフトリードを行って再度ＥＣＣチェックを実施する。
【００４６】
図７の例では、Ｃｈ１では、Ｄ１−０については、シフトリード後のＥＣＣチェックでは、誤りが無かったため、Ｄ１−０はデータ出力される。Ｃｈ１では、次のデータＤ１−１の読み出しが、Ｄ１−０のデータ出力と並行して実施される。
【００４７】
また、Ｃｈ２では、Ｄ２−０の読み出し／ＥＣＣチェックが行われ、ＥＣＣチェックで訂正可能であることが判明し、ＥＣＣ訂正が実施されて、データ出力される。Ｄ２−０のＥＣＣ訂正と並行して次のＤ２−１の読み出しが実施され、ＥＣＣチェックで復号化処理失敗と判定されて高度ＥＣＣエラー訂正が必要と判断される。この判断がされた時には既にＣｈ０のＤ０−０の処理に高度ＥＣＣ復号化部８１１が使用されている。この場合、Ｃｈ２では、Ｄ２−１に対してシフトリードを実施し、シフトリード後のデータに対して再度ＥＣＣチェックを実施する（シフトリード／ＥＣＣチェックの実施）。Ｄ２−１について、シフトリード後のＥＣＣチェックでは、ＥＣＣ処理が成功し、ＥＣＣ訂正が実施されて、データ出力される。
【００４８】
Ｃｈ３では、Ｄ３−０の読み出し／ＥＣＣチェックが行われる。ＥＣＣチェックで復号化処理失敗と判定されて高度ＥＣＣエラー訂正が必要と判断されるが、この判断がされた時には既にＣｈ０のＤ０−０の処理に高度ＥＣＣ復号化部８１１が使用されている。この場合、Ｃｈ３では、シフトリードを実施し、シフトリード後のデータに対して再度ＥＣＣチェックを実施する。ここでは、Ｄ３−０については、シフトリード後のデータに対するＥＣＣチェックでも復号化処理失敗と判定され高度ＥＣＣエラー訂正が必要と判断される。この判断がされた時点で、高度ＥＣＣ復号化部８１１は他のチャネルの処理で使用されていないため、高度ＥＣＣ復号化部８１１によりＤ３−０の高度ＥＣＣエラー訂正が実施される。なお、この場合に、高度ＥＣＣ復号化部８１１に入力されるデータおよび冗長データは、シフトリード前のものであってもシフトリード後のものであってもいずれでもよい。
【００４９】
以上のように、比較例では１つの高度ＥＣＣ復号化部８１１を用いることによる待機時間が長くなり、読み出し速度を低下させているのに対し、図７に示した本実施の形態の処理では、待機時間が少なくなり読み出し速度が向上している。このように、シフトリードと各チャネルで空いている低度ＥＣＣ復号化部８２２−１乃至８２２−ｎによる再復号化処理とを実施することにより、高度ＥＣＣ復号化部８１１を使用せずに各チャネルに備わっている機能で訂正可能となる場合があり、リソースの有効利用、また、システム全体で見た時のデータのスループットの向上に繋がる。
【００５０】
図８は、本実施の形態の復号化処理手順の一例を示すフローチャートである。ＮＡＮＤＩ／Ｆ８２−１乃至８２−ｎは、ＮＡＮＤフラッシュメモリ３１−１乃至３１−ｎからデータおよび冗長データを読み出す（ステップＳ１）。次に、ＮＡＮＤＩ／Ｆ８２−１乃至８２−ｎは、読み出されたデータおよび冗長データに基づいてＥＣＣチェック（誤りの有無の判定、復号化処理の成功か否かの判定）を実施する（ステップＳ２）。
【００５１】
ＮＡＮＤＩ／Ｆ８２−１乃至８２−ｎは、ＥＣＣチェックの結果に基づいてデータに誤り（エラー）があるか否かを判断し（ステップＳ３）、誤りがある場合（ステップＳ３  Ｙｅｓ）、復号化処理が失敗した（訂正不能エラー）か否かを判断する（ステップＳ４）。  
【００５２】
ＥＣＣ処理が成功した（訂正不能エラーでない）場合（ステップＳ４  Ｎｏ）、ＮＡＮＤＩ／Ｆ８２−１乃至８２−ｎは、データに対して誤り訂正処理（エラー訂正）を実施し（ステップＳ５）、データが正常である（データＯＫ）と判断して（ステップＳ６）、データを内部バス１０に出力し処理を終了する。
【００５３】
また、ステップＳ３で、データに誤りが無いと判断した場合（ステップＳ３  Ｎｏ）、ステップＳ６へ進む。この場合、読み出したデータが内部バス１０に出力される。
【００５４】
また、ステップＳ４で、訂正不能エラーである場合（ステップＳ４  Ｙｅｓ）、ＮＡＮＤＩ／Ｆ８２−１乃至８２−ｎは、高度ＥＣＣ復号化部８１１（図８では、高度ＥＣＣと略す）が使用可能であるか否かを判断する（ステップＳ７）。
【００５５】
高度ＥＣＣ復号化部８１１が使用可能でない場合（ステップＳ７  Ｎｏ）、ＮＡＮＤＩ／Ｆ８２−１乃至８２−ｎは、シフトリードを実施する（ステップＳ８）。そして、ＮＡＮＤＩ／Ｆ８２−１乃至８２−ｎは、シフトリード後のデータおよび冗長データに基づいてＥＣＣチェックを実施する（ステップＳ９）。次に、ＮＡＮＤＩ／Ｆ８２−１乃至８２−ｎは、ＥＣＣチェックの結果に基づいてデータに誤り（エラー）があるか否かを判断し（ステップＳ１０）、誤りがない場合（ステップＳ１０  Ｎｏ）、ステップＳ６へ進む。
【００５６】
ステップＳ１０で、誤りがある場合（ステップＳ１０  Ｙｅｓ）、訂正不能エラーか否かを判断する（ステップＳ１１）。訂正不能エラーでない場合（ステップＳ１１  Ｎｏ）、ステップＳ５へ進む。訂正不能エラーである場合（ステップＳ１１  Ｙｅｓ）、ＮＡＮＤＩ／Ｆ８２−１乃至８２−ｎは、高度ＥＣＣ復号化部８１１のリソース使用権を取得するまで待機する（ステップＳ１２）。高度ＥＣＣ復号化部８１１のリソース使用権は、高度ＥＣＣ復号化部８１１を使用可能な権利であり、あるチャネルにより高度ＥＣＣ復号化部８１１が使用されている間に複数の他のチャネルから使用要求があった場合には、例えば使用要求を早く送出した順に、高度ＥＣＣ復号化部８１１が空き次第リソース使用権が与えられるとする。なお、高度ＥＣＣ復号化部８１１のリソース使用権を与える順は使用要求を早く送出した順に限定されない。
【００５７】
高度ＥＣＣ復号化部８１１のリソース使用権取得が与えられると、ＮＡＮＤＩ／Ｆ８２−１乃至８２−ｎは、高度ＥＣＣ復号化部８１１へ処理対象のデータおよび冗長データを送出するとともに処理を依頼し、高度ＥＣＣ復号化部８１１による高度ＥＣＣエラー訂正が実施される（ステップＳ１３）。そして、ＮＡＮＤＩ／Ｆ８２−１乃至８２−ｎは、高度ＥＣＣ復号化部８１１による高度ＥＣＣエラー訂正により訂正が成功したか否かを判断し（ステップＳ１４）、成功した場合（ステップＳ１４  Ｙｅｓ）は、ステップＳ６へ進む。高度ＥＣＣエラー訂正により失敗した場合（ステップＳ１４  Ｎｏ）、ＮＡＮＤＩ／Ｆ８２−１乃至８２−ｎは、訂正不能エラーであると判断してその旨マイクロプロセッサ６に通知し（ステップＳ１５）、処理を終了する。
【００５８】
ステップＳ７で高度ＥＣＣ復号化部８１１が使用可能である場合（ステップＳ７  Ｙｅｓ）、ステップＳ１３へ進む。
【００５９】
次に、最大Ｌｉｍ（Ｌｉｍは２以上の整数）回まで、読み出し電圧及び閾値（シフトリード値）を変更してシフトリードを実施する例について説明する。図９は、最大Ｌｉｍ回までシフトリードを実施する場合の読み出し時のタイミングチャートの一例を示す図である。
【００６０】
図９の例において、Ｃｈ０、Ｃｈ３については、図７の例と同様である。Ｃｈ１では、図７の例と同様に、ＥＣＣチェックで復号化処理失敗と判定されて高度ＥＣＣエラー訂正が必要と判断されるが、この判断がされた時には既にＣｈ０のＤ０−０の処理に高度ＥＣＣ復号化部８１１が使用されている。この場合、Ｃｈ１では、まず、１回目のシフトリードを実施し、シフトリード後のデータに対して再度ＥＣＣチェックを実施する。なお、図中のデータ番号の後ろに記載した括弧内の数値はシフトリードが何回目であるかを示している。１回目のシフトリード後のＥＣＣチェックで、再び復号化処理失敗と判定されると、１回目のシフトリードと異なる読み出し電圧及び閾値を設定して、２回目のシフトリードを実施し、シフトリード後のデータに対して再度ＥＣＣチェックを実施する。ＥＣＣチェックで復号化処理失敗と判定されるごとに、高度ＥＣＣ復号化部８１１が空いているか否かを判断し、空いている場合には高度ＥＣＣ復号化部８１１による処理を実施し、空いていない場合は、Ｌｉｍ回まで読み出し電圧及び閾値を順次変えてシフトリードを繰り返す。図９の例では、４回目のシフトリード後のＥＣＣチェックで、再び復号化処理失敗と判定した時点で、高度ＥＣＣ復号化部８１１が空いているため、高度ＥＣＣ復号化部８１１による高度ＥＣＣエラー訂正処理へ移行している。
【００６１】
また、Ｃｈ２では、Ｄ２−０の読み出し／ＥＣＣチェックが行われ、ＥＣＣチェックで復号化処理が成功し、つまりＥＣＣ訂正が実施されて、データ出力される。Ｄ２−０のＥＣＣ訂正と並行して次のＤ２−１の読み出しが実施され、ＥＣＣチェックで復号化処理失敗と判定されて高度ＥＣＣエラー訂正が必要と判断される。この判断がされた時には既にＣｈ０のＤ０−０の処理に高度ＥＣＣ復号化部８１１が使用されている。この場合、Ｃｈ２では、Ｄ２−１に対してシフトリードを実施し、シフトリード後のデータに対して再度ＥＣＣチェックを実施する。１回目のシフトリード後のＥＣＣチェックで、再び復号化処理失敗と判定されると、１回目のシフトリードと異なる読み出し電圧及び閾値を設定して、２回目のシフトリードを実施し、シフトリード後のデータに対して再度ＥＣＣチェックを実施する。Ｃｈ０では、２回目のシフトリードＥＣＣチェックでＥＣＣ処理成功と判定され、ＥＣＣ訂正へ進む。
【００６２】
図１０は、最大Ｌｉｍ回まで、読み出し電圧及び閾値を変更してシフトリードを実施する場合の読み出し処理手順の一例を示すフローチャートである。ステップＳ１〜ステップＳ１１までは、図８の処理と同様である。ステップＳ１１で、訂正不能エラーでない場合（ステップＳ１１  Ｎｏ）、ステップＳ５へ進む。訂正不能エラーである場合（ステップＳ１１  Ｙｅｓ）、ＮＡＮＤＩ／Ｆ８２−１乃至８２−ｎは、高度ＥＣＣ復号化部８１１が使用可能であるか否かを判断する（ステップＳ１６）。高度ＥＣＣ復号化部８１１が使用可能でない場合（ステップＳ１６  Ｎｏ）、ＮＡＮＤＩ／Ｆ８２−１乃至８２−ｎは、シフトリードの回数がＬｉｍ未満であるか否かを判断する（ステップＳ１７）。シフトリードの回数がＬｉｍ未満である場合（ステップＳ１７  Ｙｅｓ）、シフトリード値（読み出し電圧及び閾値）を変更し（ステップＳ１８）、ステップＳ８へ戻る。
【００６３】
ステップＳ１６で高度ＥＣＣ復号化部８１１が使用可能である場合（ステップＳ１６  Ｙｅｓ）、ステップＳ１３へ進む。ステップＳ１７でシフトリードの回数がＬｉｍ以上である場合（ステップＳ１７  Ｎｏ）、ステップＳ１２へ進む。ステップＳ１２〜ステップＳ１５は、図８の例と同様である。
【００６４】
なお、図９、１０では、シフトリードを複数回実施する場合に、シフトリードのたびにＥＣＣチェックを実施するようにしたが、ＥＣＣチェックをシフトリードのたびに実施せず、まず連続して所定回数のシフトリードを実施するようにしてもよい。その場合、各回のシフトリードにより読み出したデータおよび冗長データを図示しない記憶部へ保持しておき、所定回数のシフトリードの実施後に、記憶部に保持されているデータおよび冗長データに基づいてＥＣＣチェックを所定回数行うようにしてもよい。この場合も、ＥＣＣチェックにより復号化処理成功と判断された場合、記憶部に記憶されている全てのデータに対してＥＣＣチェックを行う必要はない。
【００６５】
以上のように、本実施の形態では、低度ＥＣＣ復号化部をチャネル数分備え、高度ＥＣＣ復号化部８１１をチャネル数より少ない数備える場合に、低度ＥＣＣ復号化部により復号化処理が失敗したときに、高度ＥＣＣ復号化部８１１が他のチャネルにより使用される場合、シフトリードを実施して再度低度ＥＣＣ復号化部による復号化処理を実施するようにした。すなわち、入力する読み出しデータをシフトリード後のデータに変更して再復号化処理を実施するようにした。このため、少ない数の高度ＥＣＣ復号化部８１１とチャネルごとの低度ＥＣＣ復号化部とを効率的に活用することにより回路規模を削減し、簡易な処理で、読み出し速度の低下を防ぐことができる。
【００６６】
（第２の実施の形態）
次に、第２の実施の形態にかかる読み出し動作について説明する。本実施の形態の半導体記憶装置１の構成は第１の実施の形態と同様である。図１１は、本実施の形態のメモリ部３への書込みフォーマットの一例を示す図である。図１１に示すように、本実施の形態では、ユーザデータ、冗長データ（ＥＣＣ）とともにＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）をメモリ部３へ格納する。なお、図１１では、１種類の冗長データを生成する例を示しているが、第１の実施形態の図４に示した２種類の冗長データを生成する場合に、ＬＢＡを追加してもよい。
【００６７】
ＮＡＮＤＩ／Ｆ８２−１乃至８２−ｎは、論理アドレス（ＬＢＡ）とＮＡＮＤフラッシュメモリ３１−１乃至３１−ｎ上の物理アドレスとの対応を示すアドレス変換表を保持している。本実施の形態では、ＮＡＮＤＩ／Ｆ８２−１乃至８２−ｎは、内部バス１０経由で書込みデータとともにＬＢＡも受け取り、図１１に例示したようにデータ、冗長データとともにＬＢＡもメモリ部３へ書き込む。ＮＡＮＤＩ／Ｆ８２−１乃至８２−ｎのＥＣＣ符号化部８２１−１乃至８２１−ｎは、ＬＢＡおよびデータに対して誤り訂正符号化処理を実施して冗長データを生成する。
【００６８】
本実施の形態では、低度ＥＣＣ復号化部８２２−１乃至８２２−ｎにおいて復号化処理が失敗した際に高度ＥＣＣ復号化部８１１が他のチャネルにより使用されている場合、ＬＢＡを正しい値に置き換えるＬＢＡ置き換え処理を実施する。そして、ＬＢＡ置き換え処理後に再度低度ＥＣＣ復号化部８２２−１乃至８２２−ｎによるＥＣＣチェックを実施する。
【００６９】
具体的には、ＮＡＮＤＩ／Ｆ８２−１乃至８２−ｎは、ＬＢＡ、データ、冗長データをメモリ部３から読み出し、低度ＥＣＣ復号化部８２２−１乃至８２２−ｎは、ＬＢＡ、データ、冗長データに基づいて復号化処理を実施する。この際、冗長データは、ＬＢＡおよびデータに基づいて生成されているため、ＬＢＡに誤りがある場合にはＬＢＡを正しい値に置き換えると、データに対して訂正可能な誤り数が増えることになる。本実施の形態では、低度ＥＣＣ復号化部８２２−１乃至８２２−ｎによりＥＣＣチェックを行って復号化が失敗した場合、保持しているアドレス変換表に基づいて、読み出したデータのＮＡＮＤフラッシュメモリ３１−１乃至３１−ｎ上の物理アドレスに対応するＬＢＡ（以下、算出ＬＢＡという）を求める。そして、ＮＡＮＤフラッシュメモリ３１−１乃至３１−ｎから読み出したＬＢＡを算出ＬＢＡに置き換える。
【００７０】
その後、ＮＡＮＤＩ／Ｆ８２−１乃至８２−ｎは、ＬＢＡ部分を除いて（すなわちデータおよび冗長データ）を再度ＮＡＮＤフラッシュメモリ３１−１乃至３１−ｎから読み出し、算出ＬＢＡと、再読出ししたデータおよび冗長データと、に基づいて復号化対象データを再構成し、再度低度ＥＣＣ復号化部８２２−１乃至８２２−ｎによりＥＣＣチェックを実施する。なお、読み出したＬＢＡを算出ＬＢＡに置き換えた後に、再度データおよび冗長データを読み出す替わりに、バッファを備えて初回に読み出したデータおよび冗長データをバッファに格納しておき、バッファに格納されたデータおよび冗長データを用いてもよい。本実施の形態では、読み出したＬＢＡを算出ＬＢＡに置き換えて、算出ＬＢＡと、再読出ししたデータおよび冗長データ（またはバッファに格納されたデータおよび冗長データ）と、を符号化対象として構成するまでをＬＢＡ置き換え処理と呼ぶこととする。
【００７１】
算出ＬＢＡは、メモリ部３へ書き込まれておらず誤りを含まない正しい値であるため、正しい値に置き換えることにより、はじめの復号化に失敗した（誤り訂正能力を超える）場合でも、ＬＢＡ置き換え後にはＬＢＡの分の誤りが減るため復号化に成功する確率が高くなる。
【００７２】
さらに、算出ＬＢＡと、再読出ししたデータおよび冗長データと、に基づいて、再度低度ＥＣＣ復号化部８２２−１乃至８２２−ｎによるＥＣＣチェックを実施する替わりに、復号化処理におけるシンドローム値を算出ＬＢＡと読み出したＬＢＡとの差分に基づいて補正し、データに対する誤り位置を算出するようにしてもよい。
【００７３】
本実施の形態の読み出し動作のタイミングチャートは、シフトリードの替わりにＬＢＡ置き換えとする以外は、実施の形態の図７の例と同様である。
【００７４】
図１２は、本実施の形態の読み出し処理手順の一例を示すフローチャートである。図１２に示すように、図８のフローチャートのステップＳ８のシフトリードを、ＬＢＡ置き換えとする以外は図８の例と同様である。
【００７５】
なお、本実施の形態で述べたＬＢＡ置き換えとシフトリードの両方を実施可能とし、両方を組み合わせて実施するようにしてもよい。例えば、低度ＥＣＣ復号化部８２２−１乃至８２２−ｎによる復号化処理に失敗したときに、高度ＥＣＣ復号化部８１１が他のチャネルにより使用されている場合、まずシフトリードを実施して再度ＥＣＣチェックを行う。そして、再び復号化処理に失敗しときに、高度ＥＣＣ復号化部８１１が他のチャネルにより使用されている場合、ＬＢＡ置き換えを実施して再度ＥＣＣチェックを行う等の処理を実施してもよい。
【００７６】
以上のように、本実施の形態では、低度ＥＣＣ復号化部をチャネル数分備え、高度ＥＣＣ復号化部８１１をチャネル数より少ない数備える場合に、低度ＥＣＣ復号化部により復号化処理が失敗したときに、高度ＥＣＣ復号化部８１１が他のチャネルにより使用される場合、ＬＢＡを正しい値に置き換えて再度低度ＥＣＣ復号化部による復号化処理を実施するようにした。すなわち、入力する読み出しデータをＬＢＡ置き換え後のデータに変更して再復号化処理を実施するようにした。このため、少ない数の高度ＥＣＣ復号化部８１１とチャネルごとの低度ＥＣＣ復号化部とを効率的に活用し、読み出し速度の低下を防ぐことができる。
【００７７】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００７８】
１  半導体記憶装置、２  メモリコントローラ、３  メモリ部、８２−１〜８２−ｎ  ＮＡＮＤＩ／Ｆ、８２１−１〜８２１−ｎ  ＥＣＣ符号化部、８２２−１〜８２２−ｎ  低度ＥＣＣ復号化部、８１１  高度ＥＣＣ復号化部。
【図１】
2013214212.tif 000003
【図２】
2013214212.tif 000004
【図３】
2013214212.tif 000005
【図４】
2013214212.tif 000006
【図５】
2013214212.tif 000007
【図６】
2013214212.tif 000008
【図７】
2013214212.tif 000009
【図８】
2013214212.tif 000010
【図９】
2013214212.tif 000011
【図１０】
2013214212.tif 000012
【図１１】
2013214212.tif 000013
【図１２】
2013214212.tif 000014