(57)【要約】【課題】読み出し速度を向上させることができる半導体記憶装置を得ること。【解決手段】書き込みデータとセクタ単位で生成されたＣＲＣ符号およびＬ１ＥＣＣ符号とクラスタ単位で生成されたＬ２ＥＣＣ符号とを格納するためのＮＡＮＤメモリ２０と、ＮＡＮＤメモリ２０から読みだされた、書き込みデータとＣＲＣ符号とＬ１ＥＣＣ符号とを用いてＬ１ＥＣＣ処理を実施し、残留する誤りがあるか否かを判定するＣＲＣ／Ｌ１デコーダ１８と、残留する誤りがあると判定されたセクタを含むクラスタに対して、書き込みデータとＣＲＣ符号とＬ２ＥＣＣ符号とを用いてＬ２ＥＣＣ処理を実施するＬ２デコーダ５０と、残留する誤りの有無に基づいてクラスタ内のＬ２ＥＣＣ符号を読み出すか否かを判定する読み出し判定部１７と、を備える。【選択図】図１
2011198272.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性半導体メモリと、
所定のサイズの書き込みデータと、前記書き込みデータ内の誤りを検出するために生成された誤り検出符号と、前記書き込みデータと該書き込みデータに対応する前記誤り検出符号とで構成される第１の符号化対象データ内の誤りを訂正するために生成された第１の誤り訂正符号と、１つ以上の前記第１の符号化対象データで構成される第２の符号化対象データ内の誤りを訂正するために生成された第２の誤り訂正符号と、を、前記不揮発性半導体メモリに書き込む書き込み処理部と、
前記不揮発性半導体メモリから読みだされた、前記書き込みデータと、前記誤り検出符号と、前記第１の誤り訂正符号と、を用いて前記書き込みデータに対する第１の誤り訂正処理を実施し、第１の誤り訂正処理後に前記書き込みデータに残留する誤りがあるか否かを判定する第１の誤り訂正処理部と、
前記第１の誤り訂正処理部により残留する誤りがあると判定された前記書き込みデータを含む前記第２の符号化対象データと、前記不揮発性半導体メモリから読みだされた前記第２の誤り訂正符号と、を用いて前記書き込みデータに対する第２の誤り訂正処理を実施する第２の誤り訂正処理部と、
前記第２の符号化対象データ内の前記書き込みデータについての前記第１の誤り訂正処理部による判定結果に基づいて、前記第２の符号化対象データに対応する第２の誤り訂正符号を前記不揮発性半導体メモリから読み出すか否かを判定する読み出し判定部と、
前記読み出し判定部の判定結果に基づいて、前記不揮発性半導体メモリからの読み出しを制御する読み出し制御部と、
を備えることを特徴とする半導体記憶装置。
【請求項２】
前記第１の符号化対象データと該第１の符号化対象データに対応する前記第１の誤り訂正符号とで第１単位データを構成することとし、また、前記第２の符号化対象データと、該第２の符号化対象データを構成する前記第１の符号化対象データに対応する前記第１の誤り訂正符号と、該第２の符号化対象データに対応する前記第２の誤り訂正符号と、で第２単位データを構成することとし、また、１以上の前記２単位データで読み出し単位データを構成することとし、
前記読み出し単位データごとに、所定の順序に基づいて、前記第２の符号化対象データと、該第２の符号化対象データを構成する前記第１の符号化対象データに対応する前記第１の誤り訂正符号と、該第２の符号化対象データに対応する前記第２の誤り訂正符号と、が前記不揮発性半導体メモリへの書き込まれるよう制御する書き込み制御部、
をさらに備え、
前記読み出し制御部は、前記読み出し単位データごとに、前記所定の順序に基づいて前記不揮発性半導体メモリからの読み出しを制御し、
前記第１の誤り訂正処理部は、前記第１単位データごとに、前記第１の誤り訂正処理と前記書き込みデータに残留する誤りがあるか否かの判定と、を行う、
ことを特徴とする請求項１に記載の半導体記憶装置。
【請求項３】
前記所定の順序を、前記第２単位データごとに、前記第２単位データ内の第１単位データと該第１単位データに対応する前記第１の誤り訂正符号とが連続して読み出され、かつ前記第２の誤り訂正符号の読出しが該第２の誤り訂正符号に対応する前記第２の符号化対象データの読み出しの直後となるような順序とする、
ことを特徴とする請求項２に記載の半導体記憶装置。
【請求項４】
前記所定の順序を、前記読み出しデータごとに、該読み出しデータ内の前記第１の符号化対象データと、該第１の符号化対象データに対応する前記第１の誤り訂正符号と、が全て読み出された後に、読み出しデータ内の前記第２の誤り訂正符号が読み出されるような順序とする、
ことを特徴とする請求項２に記載の半導体記憶装置。
【請求項５】
前記読み出し判定部は、前記不揮発性半導体メモリから読み出すか否かの判定対象の前記第２の誤り訂正符号を、前記読み出し単位データ内で最後に読み出される前記第２の誤り訂正符号とする、
ことを特徴とする請求項３に記載の半導体記憶装置。
【請求項６】
前記読み出し判定部は、前記不揮発性半導体メモリから読み出すか否かの判定対象の前記第２の誤り訂正符号を、前記読み出し単位データ内の全ての前記第２の誤り訂正符号とする、
ことを特徴とする請求項３または４に記載の半導体記憶装置。
【請求項７】
前記読み出し判定部は、前記読み出し単位データ内の最後以外の位置で読み出される前記第２の誤り訂正符号については、該第２の誤り訂正符号を読み出すための所要時間が、該第２の誤り訂正符号の読み出しの手前で読み出しを停止した後に該第２の誤り訂正符号の直後から読み出しを再開するための処理の所要時間以下となる場合に、該第２の誤り訂正符号を読み出すと判定する、
ことを特徴とする請求項６に記載の半導体記憶装置。
【請求項８】
前記読み出し単位データごとに、前記読み出し判定部からの指示がない場合に、前記不揮発性半導体メモリに格納されている前記読み出し単位データを前記第２の誤り訂正符号を除いて読み出すよう前記読み出し制御部に指示するスキップ指示部、
をさらに備え、
前記読み出し判定部は、前記第２の誤り訂正符号を除いて読み出された前記読み出し単位データ内の前記書き込みデータに、残留する誤りがあると前記第１の誤り訂正処理部により判定された場合に、該読み出し単位データの前記第２の誤り訂正符号を読み出すと判定して前記スキップ指示部へ前記第２の誤り訂正符号の読み出しを指示し、
前記スキップ部は、前記読み出し判定部からの指示に基づいて、前記第２の誤り訂正符号を読み出すよう指示された読み出し単位データを前記第２の誤り訂正符号を含めて再読出しデータとして前記不揮発性半導体メモリから読み出すよう読み出し制御部に指示し、
前記読み出し制御部は、前記スキップ指示部からの指示に基づいて、前記第２の誤り訂正符号を除いた前記読み出しデータまたは前記再読み出しデータを前記不揮発性半導体メモリから読み出すよう制御し、
前記前記第２の誤り訂正処理部は、前記再読み出しデータを用いて前記書き込みデータに対する前記第２の誤り訂正処理を実施する、
ことを特徴とする請求項１に記載の半導体記憶装置。
【請求項９】
前記不揮発性半導体メモリを、ＮＡＮＤ型フラッシュメモリとすることを特徴とする請求項１〜８のいずれか１つに記載の半導体記憶装置。
【請求項１０】
前記不揮発性半導体メモリから読みだされた、前記書き込みデータと、前記誤り検出符号と、に基づいて前記書き込みデータに誤りがあるか否かを判定する誤り検出処理部、
をさらに備え、
前記読み出し判定部は、さらに前記第１の符号化対象データ内の前記書き込みデータについての前記誤り検出処理部による判定結果に基づいて、前記第１の符号化対象データに対応する第１の誤り訂正符号を前記不揮発性半導体メモリから読み出すか否かを判定する、
ことを特徴とする請求項１〜９のいずれか１つに記載の半導体記憶装置。
【請求項１１】
不揮発性半導体メモリと、
所定のサイズの書き込みデータと、前記書き込みデータ内の誤りを検出するために生成された誤り検出符号と、前記書き込みデータと該書き込みデータに対応する前記誤り検出符号とで構成される符号化対象データ内の誤りを訂正するために生成された誤り訂正符号と、を、前記不揮発性半導体メモリに書き込む書き込み処理部と、
前記不揮発性半導体メモリから読みだされた、前記書き込みデータと、前記誤り検出符号と、に基づいて前記書き込みデータに誤りがあるか否かを判定する誤り検出処理部と、
誤り検出処理部により誤りがあると判定された前記書き込みデータを含む前記符号化対象データと、前記不揮発性半導体メモリから読みだされた前記誤り訂正符号と、を用いて前記書き込みデータに対する誤り訂正処理を実施する誤り訂正処理部と、
前記符号化対象データ内の前記書き込みデータについての前記誤り検出処理部による判定結果に基づいて、前記符号化対象データに対応する誤り訂正符号を前記不揮発性半導体メモリから読み出すか否かを判定する読み出し判定部と、
前記読み出し判定部の判定結果に基づいて、前記不揮発性半導体メモリからの読み出しを制御する読み出し制御部と、
を備えることを特徴とする半導体記憶装置。
【請求項１２】
所定のサイズの書き込みデータと、前記書き込みデータ内の誤りを検出するために生成された誤り検出符号と、前記書き込みデータと該書き込みデータに対応する前記誤り検出符号とで構成される第１の符号化対象データ内の誤りを訂正するために生成された第１の誤り訂正符号と、１つ以上の前記第１の符号化対象データで構成される第２の符号化対象データ内の誤りを訂正するために生成された第２の誤り訂正符号と、を、不揮発性半導体メモリに書き込むデータ書き込みステップと、
前記不揮発性半導体メモリから読みだされた、前記書き込みデータと、前記誤り検出符号と、前記第１の誤り訂正符号と、を用いて前記書き込みデータに対する第１の誤り訂正処理を実施し、第１の誤り訂正処理後に前記書き込みデータに残留する誤りがあるか否かを判定する第１の誤り訂正処理ステップと、
前記第１の誤り訂正処理ステップで残留する誤りがあると判定された前記書き込みデータを含む前記第２の符号化対象データと、前記不揮発性半導体メモリから読みだされた前記第２の誤り訂正符号と、を用いて前記書き込みデータに対する第２の誤り訂正処理を実施する第２の誤り訂正処理ステップと、
前記第２の符号化対象データ内の前記書き込みデータについての前記第１の誤り訂正処理ステップでの判定結果に基づいて、前記第２の符号化対象データに対応する第２の誤り訂正符号を前記不揮発性半導体メモリから読み出すか否かを判定する読み出し判定ステップと、
前記読み出し判定ステップの判定結果に基づいて、前記不揮発性半導体メモリからの読み出しを制御する読み出し制御ステップと、
を含むことを特徴とする半導体記憶装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体記憶装置および半導体記憶装置の制御方法に関する。
【背景技術】
【０００２】
不揮発性の半導体メモリを用いて情報を記憶する半導体記憶装置では、経年劣化によりデータに誤りが生じる可能性がある。消費電力を抑えて、このような誤りに対して訂正速度の平均値を向上させつつ訂正能力を確保するために、２段階のＥＣＣ（Ｅｒｒｏｒ  Ｃｈｅｃｋ  ａｎｄ  Ｃｏｒｒｅｃｔ）を用いる半導体記憶装置がある（たとえば、下記特許文献１および特許文献２参照）。
【０００３】
２段階のＥＣＣを用いる半導体記憶装置では、所定のデータ単位ごとに、Ｌ１（レベル１）のＥＣＣ符号化処理により生成されるＬ１ＥＣＣ符号と、Ｌ２（レベル２）のＥＣＣ符号化処理により生成されるＬ２ＥＣＣ符号と、をデータとともに半導体メモリへ記憶する。そして、読み出しの際に、Ｌ１ＥＣＣ符号を参照して、読み出したデータの誤りの検出および誤り訂正処理（Ｌ１誤り訂正処理）を行い、Ｌ１誤り訂正処理により誤りが訂正できなかった場合に、Ｌ２ＥＣＣ符号を用いた誤り訂正処理（Ｌ２ＥＣＣ処理）を行う。
【０００４】
２段階のＥＣＣを用いる半導体記憶装置では、データの読み出しの際、所定のデータ単位ごとに読み出すデータに対応するＬ１ＥＣＣ符号およびＬ２ＥＣＣ符号を同時に読み出す。一方、このような半導体記憶装置では、一般に読み出しデータの誤り検出のための誤り検出符号も同時に半導体メモリへ記憶する。そして、誤り検出符号に基づいて読み出したデータに誤りが無いと判定した場合（読み出しデータに誤りが無い場合）、および読み出しデータ内の誤り数がＬ１誤り訂正処理の訂正能力以内であった場合には、Ｌ２ＥＣＣ処理を実施しない。このような場合、Ｌ２ＥＣＣ符号は、使用されることなく破棄されることになる。したがって、従来の２段階のＥＣＣを用いる半導体記憶装置では、使用されない不要な情報を読み出すことにより、読み出し速度が低下する、という問題がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００９−５９４２２号公報
【特許文献２】特開２００９−８０６５１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明は、読み出し速度を向上させることができる半導体記憶装置および半導体記憶装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本願発明の一態様によれば、不揮発性半導体メモリと、所定のサイズの書き込みデータと、前記書き込みデータ内の誤りを検出するために生成された誤り検出符号と、前記書き込みデータと該書き込みデータに対応する前記誤り検出符号とで構成される第１の符号化対象データ内の誤りを訂正するために生成された第１の誤り訂正符号と、１つ以上の前記第１の符号化対象データで構成される第２の符号化対象データ内の誤りを訂正するために生成された第２の誤り訂正符号と、を、前記不揮発性半導体メモリに書き込む書き込み処理部と、前記不揮発性半導体メモリから読みだされた、前記書き込みデータと、前記誤り検出符号と、前記第１の誤り訂正符号と、を用いて前記書き込みデータに対する第１の誤り訂正処理を実施し、第１の誤り訂正処理後に前記書き込みデータに残留する誤りがあるか否かを判定する第１の誤り訂正処理部と、前記第１の誤り訂正処理部により残留する誤りがあると判定された前記書き込みデータを含む前記第２の符号化対象データと、前記不揮発性半導体メモリから読みだされた前記第２の誤り訂正符号と、を用いて前記書き込みデータに対する第２の誤り訂正処理を実施する第２の誤り訂正処理部と、前記第２の符号化対象データ内の前記書き込みデータについての前記第１の誤り訂正処理部による判定結果に基づいて、前記第２の符号化対象データに対応する第２の誤り訂正符号を前記不揮発性半導体メモリから読み出すか否かを判定する読み出し判定部と、前記読み出し判定部の判定結果に基づいて、前記不揮発性半導体メモリからの読み出しを制御する読み出し制御部と、を備えることを特徴とする半導体記憶装置が提供される。
【０００８】
また、本願発明の一態様によれば、不揮発性半導体メモリと、所定のサイズの書き込みデータと、前記書き込みデータ内の誤りを検出するために生成された誤り検出符号と、前記書き込みデータと該書き込みデータに対応する前記誤り検出符号とで構成される符号化対象データ内の誤りを訂正するために生成された誤り訂正符号と、を、前記不揮発性半導体メモリに書き込む書き込み処理部と、前記不揮発性半導体メモリから読みだされた、前記書き込みデータと、前記誤り検出符号と、に基づいて前記書き込みデータに誤りがあるか否かを判定する誤り検出処理部と、誤り検出処理部により誤りがあると判定された前記書き込みデータを含む前記符号化対象データと、前記不揮発性半導体メモリから読みだされた前記誤り訂正符号と、を用いて前記書き込みデータに対する誤り訂正処理を実施する誤り訂正処理部と、前記符号化対象データ内の前記書き込みデータについての前記誤り検出処理部による判定結果に基づいて、前記符号化対象データに対応する誤り訂正符号を前記不揮発性半導体メモリから読み出すか否かを判定する読み出し判定部と、前記読み出し判定部の判定結果に基づいて、前記不揮発性半導体メモリからの読み出しを制御する読み出し制御部と、を備えることを特徴とする半導体記憶装置が提供される。
【０００９】
また、本願発明の一態様によれば、所定のサイズの書き込みデータと、前記書き込みデータ内の誤りを検出するために生成された誤り検出符号と、前記書き込みデータと該書き込みデータに対応する前記誤り検出符号とで構成される第１の符号化対象データ内の誤りを訂正するために生成された第１の誤り訂正符号と、１つ以上の前記第１の符号化対象データで構成される第２の符号化対象データ内の誤りを訂正するために生成された第２の誤り訂正符号と、を、不揮発性半導体メモリに書き込むデータ書き込みステップと、前記不揮発性半導体メモリから読みだされた、前記書き込みデータと、前記誤り検出符号と、前記第１の誤り訂正符号と、を用いて前記書き込みデータに対する第１の誤り訂正処理を実施し、第１の誤り訂正処理後に前記書き込みデータに残留する誤りがあるか否かを判定する第１の誤り訂正処理ステップと、前記第１の誤り訂正処理ステップで残留する誤りがあると判定された前記書き込みデータを含む前記第２の符号化対象データと、前記不揮発性半導体メモリから読みだされた前記第２の誤り訂正符号と、を用いて前記書き込みデータに対する第２の誤り訂正処理を実施する第２の誤り訂正処理ステップと、前記第２の符号化対象データ内の前記書き込みデータについての前記第１の誤り訂正処理ステップでの判定結果に基づいて、前記第２の符号化対象データに対応する第２の誤り訂正符号を前記不揮発性半導体メモリから読み出すか否かを判定する読み出し判定ステップと、前記読み出し判定ステップの判定結果に基づいて、前記不揮発性半導体メモリからの読み出しを制御する読み出し制御ステップと、を含むことを特徴とする半導体記憶装置の制御方法が提供される。
【発明の効果】
【００１０】
本発明によれば、読み出し速度を向上させることができる、という効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】図１は、第１の実施の形態の半導体記憶装置の構成例を示す図である。
【図２】図２は、Ｌ１／Ｌ２エンコーダの構成例を示す図である。
【図３】図３は、２段階のＥＣＣ処理の概念を示す図である。
【図４】図４は、第１の実施の形態のページフォーマットの一例を示す図である。
【図５】図５は、Ｌ２ＥＣＣ符号読み出し判定処理手順の一例を示すフローチャートである。
【図６】図６は、第２の実施の形態のページフォーマットの一例を示す図である。
【図７】図７は、第２の実施の形態のＬ１／Ｌ２エンコーダの構成例を示す図である。
【図８】図８は、第２の実施の形態のＬ２ＥＣＣ符号の読み出し判定処理手順の一例を示すフローチャートである。
【図９】図９は、第３の実施の形態のページフォーマットの一例を示す図である。
【図１０】図１０は、第４の実施の形態の半導体記憶装置の構成例を示す図である。
【図１１】図１１は、第４の実施の形態の読み出し判定処理の処理手順の一例を示す図である。
【発明を実施するための形態】
【００１２】
以下に添付図面を参照して、本発明の実施の形態にかかる半導体記憶装置を詳細に説明する。なお、これらの実施の形態により本発明が限定されるものではない。
【００１３】
（第１の実施の形態）
図１は、本発明の第１の実施の形態にかかる半導体記憶装置の構成例を示す図である。本実施の形態の半導体記憶装置１は、たとえばＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）の、半導体メモリを用いて情報を不揮発に記憶するための装置である。半導体記憶装置１は、通信媒体を介してホスト装置２の外部に接続され、ホスト装置２に対する外部記憶媒体として機能する。ホスト装置２の例としては、パーソナルコンピュータやＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）コア等があげられる。
【００１４】
半導体記憶装置１は、ＮＡＮＤコントローラ１０と、不揮発性の半導体メモリであるＮＡＮＤ型フラッシュメモリ（以下、ＮＡＮＤメモリと略す）２０と、ＭＰＵ（Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３０と、ＮＡＮＤメモリ２０よりも高速動作が可能なメモリ４０と、Ｌ２デコーダ５０と、通信Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）６０と、内部バス７０と、を備える。
【００１５】
ＮＡＮＤコントローラ２０、ＭＰＵ３０、メモリ４０、Ｌ２デコーダ５０および通信Ｉ／Ｆ６０は、内部バス７０を介して互いに接続されている。なお、ここでは、半導体記憶装置１の半導体メモリとしてＮＡＮＤ型フラッシュメモリを用いる例を説明するが、これに限らず、ＮＡＮＤ型フラッシュメモリ以外の不揮発の半導体メモリを用いてもよい。
【００１６】
通信Ｉ／Ｆ６０は、ＡＴＡ（Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）インタフェースなどのメモリ接続インタフェースであり、ホスト装置２から受信した命令、データなどを内部バス７０に出力する、また、通信Ｉ／Ｆ６０は、内部バス７０経由で入力されたデータ、ＭＰＵ３０からの応答通知（命令の実行完了を示す通知など）などをホスト装置２へ送信する。
【００１７】
ＭＰＵ３０は、半導体記憶装置１の各構成要素を統括的に制御し、ホスト装置２から通信Ｉ／Ｆ６０および内部バス７０経由で命令を受けた場合に、その命令に従った制御を行う。例えば、ＭＰＵ３０は、ホスト装置２からの命令に従って、ＮＡＮＤメモリ２０へのデータの書き込み、ＮＡＮＤメモリ２０からのデータの読み出しなどをＮＡＮＤコントローラ１０へ指示する。
【００１８】
なお、図１に示した半導体記憶装置１の構成は一例であり、半導体メモリとその半導体メモリの読み書きを制御するコントローラを備え、ホスト装置２と通信が可能な構成であれば、図１に示した構成に限らずどのような構成でもよい。
【００１９】
ＮＡＮＤコントローラ１０は、ＮＡＮＤメモリ２０の読み書き等を制御するコントローラであり、ＤＭＡコントローラ１１、バッファメモリ１２、Ｌ１／Ｌ２エンコーダ１３、書き込み制御部１４、メモリＩ／Ｆ１５、読み出し制御部１６、読み出し判定部１７、ＣＲＣ／Ｌ１デコーダ１８および誤り記録部１９を備える。
【００２０】
ＤＭＡコントローラ１１は、バッファメモリ１２、Ｌ２デコーダ５０およびメモリ４０の間のデータ転送制御をＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）方式に従って行う。バッファメモリ１２は、ＤＭＡコントローラ１１からＬ１／Ｌ２エンコーダ１３へのデータ転送時の一時記憶領域として機能し、また、ＮＡＮＤメモリ２０から読み出したデータをＤＭＡコントローラ１１へデータ転送する際の一時記憶領域として機能する。
【００２１】
つぎに、本実施の形態のＮＡＮＤメモリ２０への書き込み動作について説明する。ＮＡＮＤメモリ２０への書き込みおよび読み出しは、ページ単位で行なわれる。１ページのデータ量については、特に制約は無いが、以下の説明では、一例として１ページを８６４０Ｂｙｔｅとして説明する。
【００２２】
図２は、本実施の形態のＬ１／Ｌ２エンコーダ１３の構成例を示す図である。図２に示すように、Ｌ１／Ｌ２エンコーダ１３は、ＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）生成部（誤り検出符号生成部）１３１、ＣＲＣ符号格納部１３２、Ｌ１エンコーダ１３３、Ｌ１ＥＣＣ符号格納部１３４、Ｌ２エンコーダ１３５、Ｌ２ＥＣＣ符号格納部１３６および選択部１３７で構成される。
【００２３】
本実施の形態では、レベル１（Ｌ１）とレベル２（Ｌ２）の２段階のＥＣＣ処理を行う。Ｌ１ＥＣＣ処理では、所定のサイズの書き込みデータごとに、書き込みデータに対する誤り検出符号を生成する処理と、書き込みデータと誤り検出符号とに対して誤り訂正を行なうためのＥＣＣ符号を生成する処理と、の処理を行う。
【００２４】
具体的には、まず、Ｌ１／Ｌ２エンコーダ１３のＣＲＣ生成部１３１が、バッファメモリ１２から入力される所定のサイズの書き込みデータに基づいて誤り検出符号を生成し、生成した誤り検出符号をＣＲＣ符号格納部１３２へ格納する。なお、Ｌ１ＥＣＣ処理で用いる誤り検出符号としては、たとえば、ＣＲＣ３２符号、ＣＲＣ１６符号等を用いることができる。なお、本実施の形態では、Ｌ１ＥＣＣ処理で用いる誤り検出符号としてＣＲＣ３２符号を用いる例について説明する。以降、Ｌ１ＥＣＣ処理で生成する誤り検出符号をＣＲＣ符号と記載する。
【００２５】
つぎに、Ｌ１エンコーダ１３３が、ＣＲＣ符号格納部１３２から読み出したＣＲＣ符号と、バッファメモリ１２から入力される書き込みデータと、に基づいてＥＣＣ符号を生成し、生成したＥＣＣ符号をＬ１ＥＣＣ符号格納部１３４へ格納する。Ｌ１ＥＣＣ処理により生成された各符号は、書き込みデータとともに、ＮＡＮＤメモリ２０へ格納される。本実施の形態では、Ｌ１ＥＣＣ処理により生成される符号（誤り検出符号およびＥＣＣ符号）と、その符号に対応するデータ（第１の符号化対象データ）と、で構成されるデータ単位を１セクタ（第１単位データ）とする。
【００２６】
また、Ｌ２ＥＣＣ処理では、書き込みデータと、その書き込むデータに対応するＣＲＣ符号と、に基づいて、Ｌ１ＥＣＣ処理で生成するＥＣＣ符号とは別のＥＣＣ符号を生成する。具体的には、Ｌ２エンコーダ１３５が、バッファメモリ１２から入力される所定のサイズの書き込みデータと、ＣＲＣ符号格納部１３２から読み出したＣＲＣ符号と、に基づいてＥＣＣ符号を生成する。本実施の形態では、Ｌ２ＥＣＣ処理の符号化の対象とするデータ（第２の符号化対象データ：書き込みデータとＣＲＣ符号）と、そのデータに対応するＬ１ＥＣＣ処理で生成されたＥＣＣ符号と、そのデータに対応してＬ２ＥＣＣ処理で生成したＥＣＣ符号と、で構成されるデータ単位を１クラスタ（第２単位データ）とする。
【００２７】
なお、後述のように、ＮＡＮＤメモリ２０からのデータ読み出しの際、セクタ単位で誤り検出符号に基づいて誤りの有無を判定し、誤りが無いと判定されたセクタのデータに対してはＬ１のＥＣＣ符号を用いた誤り訂正処理は実施しない。一方、誤り検出符号に基づいて誤りが有ると判定されたセクタのデータに、Ｌ１のＥＣＣ符号を用いた誤り訂正処理を実施する。また、クラスタ内の全セクタについて、誤りが無いまたはＬ１のＥＣＣ符号による誤り訂正が可能である場合には、そのクラスタについてはＬ２の誤り訂正処理は実施しない。一方、Ｌ１のＥＣＣ符号を用いた誤り訂正処理による訂正が不可であったセクタが含まれるクラスタに対しては、Ｌ２のＥＣＣ符号を用いた誤り訂正処理を実施する。
【００２８】
したがって、Ｌ１ＥＣＣ処理は全ての書き込みデータに対して実施することになり、Ｌ１ＥＣＣ処理で生成する誤り訂正符号（Ｌ１ＥＣＣ符号）は、計算量の少ない符号であることが望ましい。たとえば、Ｌ１ＥＣＣ符号としてハミング符号等を用いることができる。また、Ｌ２ＥＣＣ処理はＬ１ＥＣＣ処理で誤り訂正ができなかった場合に実施するため、Ｌ２ＥＣＣ処理で生成する誤り訂正符号（Ｌ２ＥＣＣ符号）は、計算量が多いが多ビットの誤りを訂正できる符号であり、Ｌ１ＥＣＣ符号よりも高い誤り訂正能力を有する符号であることが望ましい。たとえば、Ｌ２ＥＣＣ符号として、ＢＣＨ（Ｂｏｓｅ  Ｃｈａｕｄｈｕｒｉ  Ｈｏｃｑｕｅｎｇｈｅｍ）符号、リード・ソロモン（ＲＳ）符号またはＬＤＰＣ符号（Ｌｏｗ  Ｄｅｎｓｉｔｙ  Ｐａｒｉｔｙ  Ｃｈｅｃｋ  Ｃｏｄｅ）等を用いることができる。
【００２９】
図３は、２段階のＥＣＣ処理の概念を示す図である。図３では、ＣＲＣによる誤り検出範囲Ａと、Ｌ１ＥＣＣ符号による誤り訂正範囲Ｂと、Ｌ２ＥＣＣ符号による誤り訂正範囲Ｃと、を示している。図３の例では、５１２Ｂｙｔｅの書き込み対象データごとにＣＲＣ符号およびＬ１ＥＣＣ符号を生成している。また、複数の、５１２ＢｙｔｅとＣＲＣ符号とに対してＬ２ＥＣＣ符号を生成している。
【００３０】
以上のＬ１ＥＣＣ処理およびＬ２ＥＣＣ処理により生成されたＣＲＣ符号、Ｌ１ＥＣＣ符号およびＬ２ＥＣＣ符号は、ページ単位でＮＡＮＤメモリ２０へ書き込まれる。図４は、本実施の形態のページフォーマットの一例を示す図である。図４に示したフォーマットは、従来の半導体装置（２段階でＥＣＣ処理を行う従来の半導体装置）が用いるページフォーマットと同様である。ページフォーマットは、書き込みおよび読み出しの際の、ページ単位での各データ（各符号も含む）の書き込みおよび読み出しの順序を示している。図４のページフォーマットは、ページフォーマット内の左側から順に書き込みおよび読み出しが行なわれることを示している。図４の例では、１ページは、２クラスタ（クラスタ＃０、クラスタ＃１）で構成される。１クラスタは、８セクタ（クラスタ＃０はセクタ＃０〜＃７、クラスタ＃１はセクタ＃８〜＃１５）と、Ｌ２ＥＣＣ符号と、で構成される。１セクタは、書き込みデータとそのデータに対応するＣＲＣ符号と、で構成される。
【００３１】
選択部１３７は、書き込み制御部１４からの指示に基づいて、上述のページフォーマットとなるよう、ＣＲＣ符号格納部１３２から読み出したＣＲＣ符号と、Ｌ１ＥＣＣ符号格納部１３４から読み出したＬ１ＥＣＣ符号と、Ｌ２ＥＣＣ符号格納部１３６から読み出したＬ２ＥＣＣ符号と、バッファメモリ１２から入力される書き込みデータと、のいずれかをメモリＩ／Ｆ１５へ出力する。このようにして、選択部１３７から出力された書き込みデータおよび各符号は、メモリＩ／Ｆ１５経由でＮＡＮＤメモリ２０へ書き込まれる。
【００３２】
なお、以上述べたＮＡＮＤメモリ２０への書き込み動作、および書き込み動作に関連する構成（Ｌ１／Ｌ２エンコーダ等の構成）は、従来の２段階でＥＣＣ処理を行う半導体記憶装置と同様であり、上述した動作および構成に限定されない。誤り検出符号、Ｌ１ＥＣＣ符号およびＬ２ＥＣＣ符号を生成し、ページ単位で書き込みを行なうことができる動作および構成であれば、どのような動作および構成を用いてもよい。
【００３３】
つぎに、本実施の形態のＮＡＮＤメモリ２０からのデータ読み出し動作について説明する。ＭＰＵ３０から読み出しの指示があった場合に、読み出し制御部１６は、ページ単位で、メモリＩ／Ｆ１５にＮＡＮＤメモリ２０から読み出しデータと書き込み処理で生成された各符号とを読み出すよう指示する。なお、読み出し制御部１６は、通常は、ページごとに、ページの先頭からページの最後までを一括して読み出すようメモリＩ／Ｆ１５へ指示するが、ページの途中から読み出すよう指示すること（読み出し開始位置の指示）や、ページ途中までを読み出すよう指示すること（読み出し終了位置の指示）も可能である。
【００３４】
メモリＩ／Ｆ１５は、ＮＡＮＤメモリ２０からの読み出し処理部としての機能を有し、ＮＡＮＤメモリ２０から読み出した読み出しデータ、をバッファメモリ１２へ格納するとともに、セクタごとにＮＡＮＤメモリ２０から読み出した読み出しデータとその読み出しデータに対応するＣＲＣ符号とＬ１ＥＣＣ符号と、をＣＲＣ／Ｌ１デコーダ１８へ入力する。メモリＩ／Ｆ１５は、ＮＡＮＤメモリ２０への書き込み処理部としての機能を有し、書き込み制御部１４からの指示に基づいてＬ１／Ｌ２エンコーダ１３から出力されるデータをＮＡＮＤメモリ２０へ書き込む。およびまた、読み出し制御部１６は、読み出したＬ２ＥＣＣ符号を保持する。
【００３５】
ＣＲＣ／Ｌ１デコーダ１８は、入力されたＬ１ＥＣＣ符号と読み出しデータとに基づいてＬ１デコード処理を行うことにより、誤り訂正後の読み出しデータおよびＣＲＣ符号を生成する。ＣＲＣ／Ｌ１デコーダ１８は、誤り訂正後の読み出しデータおよびＣＲＣ符号に基づいて読み出しデータに誤りがあると判定した場合には、当該クラスタで誤りが発生したことを示す情報を誤り情報として誤り記録部１９へ記録するとともに、バッファメモリ１２に格納されている読み出しデータおよびＣＲＣ符号（Ｌ１ＥＣＣ符号による誤り訂正前）をＤＭＡコントローラ１１経由でＭＤＡメモリ４０へ格納する。
【００３６】
ＣＲＣ／Ｌ１デコーダ１８は、誤り訂正後の読み出しデータおよびＣＲＣ符号に基づいて読み出しデータに誤りが無いと判定した場合には、バッファメモリ１２に格納されている当該読み出しデータを誤り訂正後のデータに書き換えて、ＤＭＡコントローラ１１経由でＭＤＡメモリ４０へ格納する。
【００３７】
なお、ＣＲＣ／Ｌ１デコーダ１８は、誤り訂正後の読み出しデータおよびＣＲＣ符号に基づいて読み出しデータに誤りが無いか否か（Ｌ１誤り訂正符号で訂正が可能か否か）の判断を、たとえば以下の手順で行う。まず、ＣＲＣ／Ｌ１デコーダ１８は、シンドローム計算を行う。つぎに、シンドローム計算の結果、誤りがあれば、誤り位置を計算し、チェン検索を行う。この誤り位置の計算によって誤りの個数がわかる。そして、チェン検索を実施しながら、誤りの位置と、誤りの個数を調べる。Ｌ１ＥＣＣ符号による訂正が不可能な場合には、チェン検索で調べた誤りの個数と、誤り位置の計算で求めた誤りの個数が異なる値となる。したがって、チェン検索で調べた誤りの個数と、誤り位置の計算で求めた誤りの個数が異なる場合に、Ｌ１ＥＣＣ符号による誤り訂正が不可能であったと判定できる。
【００３８】
Ｌ１ＥＣＣ符号による誤り訂正が可能な場合は、チェン検索で調べた誤りの個数と、誤り位置の計算で求めた誤りの個数が一致する。しかし、個数が一致しても、誤って訂正している可能性があるため、最終的には、読み出しデータとＣＲＣ符号に基づいて誤り検出を行い、誤りがなかった場合に、Ｌ１ＥＣＣ符号による誤り訂正が可能であると判断し、誤りがなかった場合に、Ｌ１ＥＣＣ符号による誤り訂正が不可であったと判断する。
【００３９】
読み出し判定部１７は、誤り記録部１９に格納されている誤り情報に基づいて、通常読み出しを継続するか、読み出し中のページの読み出し終了位置を変更するか等を決定する。また、読み出し判定部１７は、誤り記録部１９に格納されている誤り情報に基づいて、Ｌ１ＥＣＣ符号による誤り訂正が不可であったか否か（Ｌ１誤り訂正後に誤りが残っているか否か）をＭＰＵ３０に通知し、ＭＰＵ３０は、その通知に基づいて、Ｌ１訂正不可であったと判断したクラスタについて、読み出し制御部１６からＬ２ＥＣＣ符号を取得し、取得したＬ２ＥＣＣ符号をＬ２デコーダ５０へ渡すとともに、当該クラスタのＬ２ＥＣＣ符号による誤り訂正処理の開始を指示する。
【００４０】
Ｌ２デコーダ５０は、ＭＰＵ３０からの指示に基づいて、Ｌ２ＥＣＣ符号と、メモリ４０に格納されている読み出しデータおよびＣＲＣ符号と、に基づいて、読み出しデータおよびＣＲＣ符号の誤り訂正処理を行い、読み出しデータを誤り訂正後のデータに書き換える。
【００４１】
つぎに、読み出し判定部１７の処理について詳細に説明する。従来の２段階のＥＣＣ処理を行う半導体記憶装置では、Ｌ２ＥＣＣ符号を用いた誤り訂正処理（Ｌ２誤り訂正処理）を実施しないクラスタについても、ＮＡＮＤメモリ２０からＬ２ＥＣＣ符号を読み出していた。したがって、不要な情報をＮＡＮＤメモリ２０から読み出すことによる読み出し速度が生じていた。本実施の形態では、このような問題への対策として、Ｌ２ＥＣＣ符号を読み出すか否かを判定する読み出し判定部１７を備え、読み出し判定部１７が、Ｌ２ＥＣＣ符号を読み出さないと判定した場合には、Ｌ２ＥＣＣ符号をＮＡＮＤメモリ２０から読み出さない。
【００４２】
ここでは、図４に例示したページフォーマットを用いるとして以下の説明を行なう。図４に示すように、Ｌ２ＥＣＣ符号は、各クラスタの最後部に格納されている。たとえば、クラスタ＃１のセクタ＃８〜セクタ＃１５の全てのセクタについて、Ｌ１ＥＣＣ符号を用いた誤り訂正処理の後に残留する誤りが無い場合、クラスタ＃１のＬ２ＥＣＣ符号は読み出す必要はない。この場合、当該ページの読み出し中に、ＮＡＮＤメモリ２０からの読み出し終了位置をセクタ＃１５の終了位置に変更すれば、Ｌ２ＥＣＣ符号を読み出されない。
【００４３】
また、クラスタ＃０についても同様に、セクタ＃０〜セクタ＃７の全てのセクタについて、誤りが検出されなかった場合またはＬ１ＥＣＣ符号を用いて訂正が可能であった場合、クラスタ＃０のＬ２ＥＣＣ符号は読み出す必要はない。この場合に、クラスタ＃０のＬ２ＥＣＣ符号は読み出さないようにするには、当該ページの読み出し中に、一旦、ＮＡＮＤメモリ２０からの読み出し終了位置をセクタ＃７の終了位置に変更し、その後に、クラスタ＃１のセクタ＃８の開始位置から読み出しを開始する必要がある。このような読み出しの制御処理が、Ｌ２ＥＣＣ符号を読み出す時間に比べ、高速で実施できる場合には、クラスタ＃０とクラスタ＃１についてＬ２ＥＣＣ符号の読み飛ばしを行なってもよい。一方、このような読み出しの制御処理が、Ｌ２ＥＣＣ符号を読み出す時間に比べ、同程度以上である場合には、クラスタ＃０についてはＬ２ＥＣＣ符号の読み飛ばしを実施せず、Ｌ２ＥＣＣ符号を読み出すようにする。
【００４４】
たとえば、１セクタを５２０Ｂｙｔｅとし、１クラスタを４３２０Ｂｙｔｅとし、Ｌ２ＥＣＣ符号を１６０Ｂｙｔｅとし、Ｌ２ＥＣＣ符号をＮＡＮＤメモリ２０から読み出すための所要時間を３２０クロック（２クロックで１Ｂｙｔｅを読み出し）とする。また、読み出し終了位置をセクタ＃７の終了位置に変更し、その後に、クラスタ＃１のセクタ＃８の開始位置から読み出しを開始する読み出し制御処理の所要時間（待機時間も含む）を３０サイクル程度とする。この場合は、読み出しの所要時間に比べ、読み出し制御処理の所要時間の方が短いため、クラスタ＃０のＬ２ＥＣＣ符号についても読み飛ばしを行なってもよい。また、読み出しの所要時間に比べ、読み出し制御処理の所要時間の方が短い場合でも、クラスタ＃０の読み出し制御処理が複雑になること等を考慮してクラスタ＃１のＬ２ＥＣＣ符号のみを読み飛ばしてもよい。
【００４５】
図５は、本実施の形態のＬ２ＥＣＣ符号読み出し判定処理手順の一例を示すフローチャートである。図５では、クラスタ＃１のＬ２ＥＣＣ符号について読み出し処理を行う場合のフローチャートを示している。クラスタ＃０についてもＬ２ＥＣＣ符号の読み出し判定処理を行う場合は、図５のクラスタ＃１をクラスタ＃０に読み替えて（後述のステップＳ７では、クラスタ＃０のＬ２ＥＣＣ符号を読み出さない場合は読み出し終了位置をセクタ＃７の終了位置する）、同様の動作を行なえばよい。
【００４６】
まず、ＣＲＣ／Ｌ１デコーダ１８は、読み出しデータと、ＣＲＣ符号と、Ｌ１ＥＣＣ符号と、に基づいて、Ｌ１デコード処理を行い、読み出しデータおよびＣＲＣ符号の誤り訂正を実施する（ステップＳ１）。その後、ＣＲＣ／Ｌ１デコーダ１８は、誤り訂正後の、読み出しデータとＣＲＣ符号とに基づいて、読み出しデータの誤り検出処理（ＣＲＣの判定処理）を実施する（ステップＳ２）。ＣＲＣの判定結果、読み出しデータに誤りが無いか否かを判定し（ステップＳ３）、誤りがあると判定した場合（ステップＳ３  Ｎｏ）、ＣＲＣ／Ｌ１デコーダ１８は、誤り記録部１９へ誤りを検出したセクタが属するクラスタを識別するための情報と誤りがあったか否かを示す誤り情報と対応付けて記録する（ステップＳ４）。
【００４７】
ステップＳ３で誤りが無いと判定した場合（ステップＳ３  Ｙｅｓ）は、ＣＲＣ／Ｌ１デコーダ１８は、ステップＳ２で判定処理を行ったセクタがクラスタ＃１の最後のセクタであるか否かを判断する（ステップＳ５）。クラスタ＃１の最後のセクタでないと判断した場合（ステップＳ５  Ｎｏ）、ステップＳ１に戻り、つぎのセクタについての処理を実施する。ステップＳ５でクラスタ＃１の最後のセクタであると判断した場合（ステップＳ５  Ｙｅｓ）、ＣＲＣ／Ｌ１デコーダ１８は、読み出し判定部１７へ判定処理の実施を指示し、読み出し判定部１７は、誤り記録部１９に記憶されている誤り情報を参照して、クラスタ＃１内の全セクタについて誤りが無かったか否かを判断する（ステップＳ６）。
【００４８】
クラスタ＃１内の全セクタで誤りがなかったと判断した場合（ステップＳ６  Ｙｅｓ）は、読み出し判定部１７は、読み出し制御部１６に対して、クラスタ＃１のＬ２ＥＣＣ符号を読み出さないよう（セクタ＃１５の終了位置を読み出し終了位置とするよう）指示する（ステップＳ７）。読み出し制御部１６は、読み出し判定部１７からの指示に基づいてクラスタ＃１のセクタ＃１５の終了位置を読み出し終了位置とするようＮＡＮＤメモリ２０からの読み出しを制御する。
【００４９】
また、ステップＳ６で、クラスタ＃１内のセクタで１つでも誤りがあったと判断した場合（ステップＳ６  Ｎｏ）は、読み出し判定部１７は、読み出しに関する追加指示はせず、通常読み出しを継続する。すなわち、クラスタ＃１のＬ２ＥＣＣ符号をＮＡＮＤメモリ２０から読み出す。以上の処理により、クラスタ＃１内の全てのセクタで、Ｌ１ＥＣＣ符号による訂正後に誤りが無かった場合に、Ｌ２ＥＣＣ符号をＮＡＮＤメモリ２０から読み出さないようにすることができる。
【００５０】
たとえば、１セクタを５２０Ｂｙｔｅとし、１クラスタを４３２０Ｂｙｔｅとし、Ｌ２ＥＣＣ符号を１６０Ｂｙｔｅとする。この場合、１ページは、８６４０Ｂｙｔｅであり、１ページ分全てを読み出す場合には、８６４０Ｂｙｔｅを読み出すことになる。これに対し、クラスタ＃１のＬ２ＥＣＣ符号を読み出さない場合には、８６４０Ｂｙｔｅ−１６０Ｂｙｔｅ＝８４８０Ｂｙｔｅとなり、全て読み出す場合に比べ、約１．８％読み出し速度を向上させることができる。
【００５１】
また、クラスタ＃０についても読み出さない場合、さらに１６０Ｂｙｔｅの読み出し時間から上述のような読み出し制御処理（一旦読み出しを終了してから読み出しを再開する処理）の時間を除いた分だけ読み出し速度を向上させることができる。すなわち、１Ｂｙｔｅを読み出す時間を１サイクルとし、上述の読み出し時間をＴサイクルとすると、通常読み出しを行なう場合に比べ、(１６０＋１６０−Ｔ)／８６４０×１００％向上させることができる。たとえば、Ｔを３０サイクルとすると、約３．４％読み出し速度を向上させることができる。また、たとえばＴが１６０サイクルを超える場合には、クラスタ＃０のＬ２ＥＣＣ符号を読み出さないことによる速度向上が見込めないため、クラスタ＃１のＬ２ＥＣＣ符号についてのみ読み出し判定処理を実施すればよい。
【００５２】
なお、読み出し判定部１７以外の本実施の形態の読み出し動作および読み出し動作に関連する構成は、従来の２段階でＥＣＣ処理を行う半導体記憶装置と同様であり、上述した動作および構成に限定されない。誤り検出符号に基づく誤り検出と、Ｌ１ＥＣＣ符号およびＬ２ＥＣＣ符号に基づく誤り訂正を実施し、ページ単位で読み出しを行なうことができる動作および構成であれば、どのような動作および構成を用いてもよい。
【００５３】
なお、本実施の形態では、ページ単位で読み出しを行なう場合を例に説明したが、これに限らず、たとえば、１回の読み出し単位が不定の場合にも、同様にＬ２ＥＣＣ読み出し判定処理を行うことができる。たとえば、１回の読み出し単位が不定の場合には、クラスタごとに上記の読み出し判定処理を行い、Ｌ２ＥＣＣ符号を読み出すか否かを判定すればよい。
【００５４】
なお、本実施の形態では、Ｌ１ＥＣＣ処理後に、誤りが無いと判定した場合、すなわちＬ２ＥＣＣ処理を行う必要がない場合にＬ２ＥＣＣ符号を読み出さないようにしたが、さらに、ＣＲＣ／Ｌ１デコーダ１８がＬ１ＥＣＣ符号を用いた誤り訂正処理の前に、ＣＲＣ符号により誤りがないと判定した場合には、当該セクタのＬ１ＥＣＣ符号を読み出さないようにしてもよい。その場合は、１つのセクタについてＣＲＣ符号をＬ１ＥＣＣ符号より先に読み出すようなページフォーマットとする。
【００５５】
また、本実施の形態では、２段階のＥＣＣ処理を行う場合を例に説明したが、ＣＲＣ符号により誤り検出処理と、１段階のＥＣＣ処理（１段階のＥＣＣ符号を用いた誤り訂正処理）とを行う場合に本実施の形態と同様の動作を適用してもよい。この場合、ＣＲＣ符号により誤り検出を行なう誤り検出部が、誤りが無いと判定したデータについて１段階のＥＣＣ符号を読み出さないようにする。
【００５６】
このように、本実施の形態では、読み出し判定部１７が、クラスタを構成する全てのセクタについて誤りが無いまたはＬ１ＥＣＣ符号による訂正が可能であった場合に、そのクラスタのＬ２ＥＣＣ符号を読み出さないようにした。そのため、従来の２段階でＥＣＣ処理を行う半導体記憶装置に比べ読み出し速度を向上させることができる。
【００５７】
（第２の実施の形態）
図６は、本発明の第２の実施の形態にかかる半導体記憶装置が用いるページフォーマットの一例を示す図である。図７は、本実施の形態のＬ１／Ｌ２エンコーダ１３ａの構成例を示す図である。本実施の形態の半導体記憶装置の構成は、第１の実施の形態で示した半導体記憶装置１のＬ１／Ｌ２エンコーダ１３を本実施の形態のＬ１／Ｌ２エンコーダ１３ａに代える以外は、第１の実施の形態の半導体記憶装置１と同様である。第１の実施の形態と同様の機能を有する構成要素は、第１の実施の形態と同一の符号を付し、説明を省略する。以下、第１の実施の形態と異なる点を説明する。
【００５８】
図６に示すように、本実施の形態では、クラスタ＃０のＬ２ＥＣＣ符号をクラスタ＃１のＬ２ＥＣＣ符号の直前に配置し、各ページの最後にＬ２ＥＣＣ符号が連続して配置されるようにしている。このようなページフォーマットに対応するため、本実施の形態のＬ１／Ｌ２エンコーダ１３ａは、第１の実施の形態のＬ１／Ｌ２エンコーダ１３にＬ２ＥＣＣ符号格納部１３８を追加している。
【００５９】
本実施の形態では、Ｌ２エンコーダ１３５は、生成したクラスタ＃０のＬ２ＥＣＣ符号をＬ２ＥＣＣ符号格納部１３６へ格納し、生成したクラスタ＃１のＬ２ＥＣＣ符号をＬ２ＥＣＣ符号格納部１３８へ格納する。そして、選択部１３７は、書き込み制御部１４の指示に基づいて、図６のページフォーマットとなるよう、ＣＲＣ符号格納部１３２から読み出したＣＲＣ符号と、Ｌ１ＥＣＣ符号格納部１３４から読み出したＬ１ＥＣＣ符号と、Ｌ２ＥＣＣ符号格納部１３６から読み出したＬ２ＥＣＣ符号と、Ｌ２ＥＣＣ符号格納部１３８から読み出したＬ２ＥＣＣ符号と、バッファメモリから入力される書き込みデータと、のいずれかをメモリＩ／Ｆ１５へ出力する。
【００６０】
図６に示したように、各ページの最後にＬ２ＥＣＣ符号を連続して配置することにより、クラスタ＃０およびクラスタ＃１の両方でＬ２ＥＣＣ符号を読み出さない場合に効率よく読み飛ばしを行うことができる。すなわち、クラスタ＃０およびクラスタ＃１の両方で、全てのセクタについて、誤りが無かった場合またはＬ１ＥＣＣ符号により訂正が可能であった場合に、読み出し終了位置をクラスタ＃１５の終了位置とすることにより、一度の終了位置の変更だけで両方のＬ２ＥＣＣ符号を読み出さないようにすることができる。
【００６１】
第１の実施の形態のページフォーマットの場合、クラスタ＃０およびクラスタ＃１の両方でＬ２ＥＣＣ符号を読み出さない場合には、クラスタ＃０については、一旦、読み出し終了位置を変更してから、途中からの読み出しを開始する必要があり、これらの読み出し制御の処理にある程度の時間を必要とした。これに対し、本実施の形態では、クラスタ＃０およびクラスタ＃１の両方で、Ｌ２ＥＣＣ符号を読み出さない場合には、読み出し終了位置をクラスタ＃１５の終了位置とするだけでよい。
【００６２】
なお、クラスタ＃０のＬ２ＥＣＣ符号を読み出さず、クラスタ＃１のＬ２ＥＣＣ符号を読み出す場合は、読み出し終了位置をクラスタ＃１５の終了位置に変更した後に、クラスタ＃１のＬ２ＥＣＣ符号の開始位置から読み出しを行なう。また、クラスタ＃０のＬ２ＥＣＣ符号を読み出し、クラスタ＃１のＬ２ＥＣＣ符号を読み出さない場合は、読み出し終了位置をクラスタ＃０のＬ２ＥＣＣ符号の終了位置に変更する。
【００６３】
図８は、クラスタごとに実施する本実施の形態のＬ２ＥＣＣ符号の使用／不使用判定処理手順の一例を示すフローチャートである。本実施の形態では、まず、ＣＲＣ／Ｌ１デコーダ１８および読み出し判定部１７は、クラスタごとに図８に示したような手順でＬ２ＥＣＣ符号の使用／不使用の判定を行う。図８に示したフローチャートのステップＳ１、Ｓ２、Ｓ３およびＳ４は図５で説明したフローチャートと同様である。以下、第１の実施の形態の読み出し判定処理手順と異なる部分を説明する。
【００６４】
本実施の形態では、ステップＳ３でＣＲＣの判定結果が誤り無しであった場合（ステップＳ３  Ｙｅｓ）に、読み出し中のクラスタの最後のセクタの判定結果であるか否かを判定する（ステップＳ５ａ）。読み出し中のクラスタの最後のセクタの判定結果であった場合（ステップＳ５ａ  Ｙｅｓ）、ＣＲＣ／Ｌ１デコーダ１８は読み出し判定部１７へ読み出し判定処理を実施するよう指示し、ステップＳ６ａに進む。また、読み出し中のクラスタの最後のセクタの判定結果でない場合（ステップＳ５ａ  Ｎｏ）、ステップＳ１に戻る。
【００６５】
ステップＳ６ａでは、読み出し判定部１７は、読み出し中のクラスタに誤りが無いか否かを判定し（ステップＳ６ａ）、誤りが無いと判定した場合（ステップＳ６ａ  Ｙｅｓ）、そのクラスタのＬ２ＥＣＣ符号を使用しないと判定し、判定した結果を当該クラスタの識別番号とともに符号使用判定結果として保持する（ステップＳ７ａ）。また、ステップＳ６ａで読み出し中のクラスタに誤りがあると判定した場合（ステップＳ６ａ  Ｎｏ）は、そのクラスタのＬ２ＥＣＣ符号を使用すると判定し、判定した結果を当該クラスタの識別番号とともに符号使用判定結果として保持する（ステップＳ８ａ）。
【００６６】
そして、読み出し判定部１７は、クラスタ＃０、クラスタ＃１について、それぞれ上記の符号使用判定結果を行った後、クラスタごとの符号使用判定結果に基づいて、読み出し制御部１６に指示を行なう。具体的には、符号使用判定結果が、クラスタ＃０とクラスタ＃１の両方のＬ２ＥＣＣ符号を使用するという結果であった場合は、通常読み出しを継続する。また、クラスタ＃０のＬ２ＥＣＣ符号を使用し、クラスタ＃１のＬ２ＥＣＣ符号を使用しない場合には、読み出し終了位置をクラスタ＃０のＬ２ＥＣＣ符号の終了位置とするよう指示する。また、クラスタ＃０のＬ２ＥＣＣ符号を使用せず、クラスタ＃１のＬ２ＥＣＣ符号を使用する場合には、読み出し終了位置をクラスタ＃０のセクタ＃１５の終了位置とした後に、クラスタ＃１のＬ２ＥＣＣ符号の先頭から読み出しを開始する。また、クラスタ＃０とクラスタ＃１の両方のＬ２ＥＣＣ符号を使用しない場合には、読み出し終了位置をクラスタ＃１５の終了位置とするよう指示する。
【００６７】
たとえば、１セクタを５２０Ｂｙｔｅとし、１クラスタを４３２０Ｂｙｔｅとし、Ｌ２ＥＣＣ符号を１６０Ｂｙｔｅとする。この場合、本実施の形態では、クラスタ＃０およびクラスタ＃１の両方のＬ２ＥＣＣ符号を読み出さない場合には、８６４０Ｂｙｔｅ−１６０Ｂｙｔｅ−１６０Ｂｙｔｅ＝８３２０Ｂｙｔｅとなり、全て読み出す場合に比べ、約３．８％読み出し速度を向上させることができる。
【００６８】
なお、符号使用判定結果が、クラスタ＃０のＬ２ＥＣＣ符号を使用せず、クラスタ＃１のＬ２ＥＣＣ符号を使用するという判定結果であった場合には、通常読み出しを継続してもよい。これは、一旦読み出し位置を変更し、再び、読み出しを開始する処理を行う必要があるため、それらの処理にある程度の所要時間を必要とするためである。たとえば、これらの処理の所要時間が、クラスタ＃０の読み出し時間に比べ同程度以上の場合には、通常読み出しを継続するようにしてもよい。以上述べた以外の本実施の形態の動作は、第１の実施の形態の動作と同様である。
【００６９】
このように、本実施の形態では、クラスタ＃０、クラスタ＃１のＬ２ＥＣＣ符号を１ページの最後部に連続して配置し、クラスタ＃０およびクラスタ＃２の両方について、クラスタを構成する全てのセクタについて誤りが無いまたはＬ１ＥＣＣ符号による訂正が可能であった場合に、連続してＬ２ＥＣＣ符号を読み飛ばせるようにした。そのため、第１の実施の形態に比べ、さらに読み出し速度を向上させることができる。
【００７０】
（第３の実施の形態）
図９は、本発明の第３の実施の形態にかかる半導体記憶装置が用いるページフォーマットの一例を示す図である。本実施の形態の半導体記憶装置の構成は、第１の実施の形態で示した半導体記憶装置１のＬ１／Ｌ２エンコーダ１３を（Ｎ（Ｎは１以上の整数）＋１）クラスタ分のＬ２ＥＣＣ符号を保持できるようにするような構成に変更する以外は、第１の実施の形態と同様である。第１の実施の形態と同様の機能を有する構成要素は、第１の実施の形態と同一の符号を付し、説明を省略する。以下、第１の実施の形態または第２の実施の形態と異なる点を説明する。
【００７１】
本実施の形態では、１ページは（Ｎ＋１）個のクラスタを含むとし、ページ内の各クラスタのＬ２ＥＣＣ符号を第２の実施の形態と同様に、ページの最後部に連続して配置する。また、図９では、１ページ内にはセクタ＃０〜セクタ＃Ｍ（Ｍは１以上の整数）までの（Ｍ＋１）個のセクタが含まれるとしている。また、本実施の形態では、１クラスタは（Ｌ（Ｌは１以上の整数）＋１）個のセクタで構成されるとする。第１の実施の形態および第２の実施の形態では、１ページを８６４０Ｂｙｔｅとし、１ページが２クラスタで構成され、また１クラスタは８セクタで構成される例を説明した。一方、将来的には、ページ長は増加すると考えられ、また、より多くの誤り訂正能力が必要となると考えられ、Ｌ２ＥＣＣ符号のビット数も増える可能性がある。そこで、本実施の形態では、ページ長、１ページ内のクラスタ数、１クラスタ内のセクタ数を一般化した例について説明する。
【００７２】
本実施の形態では、読み出し判定部１７は、読み出し判定処理としてクラスタごとに第２の実施の形態で説明したＬ２ＥＣＣ符号の使用／不使用の判定処理（図８で示した処理手順）を実施する。そして、読み出し判定部１７は、１ページを構成する各クラスタについての符号使用結果に基づいて、読み出し制御部１６への指示を決定する。たとえば、読み出し中のページの全クラスタについて、Ｌ２ＥＣＣ符号を使用しないという符号使用判定結果であった場合には、読み出し終了位置を、連続するＬ２ＥＣＣ符号の格納位置の直前（セクタ＃Ｍの終了位置）とするよう読み出し制御部１６へ指示する。また、読み出し中のページの全クラスタについて、Ｌ２ＥＣＣ符号を使用するという符号使用判定結果であった場合は、通常読み出しを継続する。
【００７３】
なお、読み出し中のページ内のクラスタについて、Ｋ個（Ｋは、１≦Ｋ≦Ｎを満たす整数）のクラスタについてＬ２ＥＣＣ符号を使用せず、残りの（（Ｎ＋１）−Ｋ）個のクラスタについてはＬ２ＥＣＣ符号を使用するという符号使用判定結果であった場合には、使用しないと判定されたＬ２ＥＣＣ符号を全て読み出さないようにしてもよいし、さらに、使用しないＬ２ＥＣＣ符号の配置等に基づいて、読み出すか否かを決定してもよい。たとえば、Ｋ＝１のときには、ページフォーマット上で最後のＬ２ＥＣＣ符号である場合に読み出さず、ページフォーマット上で最後以外のときには通常読み出しを継続してもよい。また、Ｋ＝２のときに、ページフォーマット上で読み出さないＬ２ＥＣＣ符号が連続する場合に読み出さないようにし、読み出さないＬ２ＥＣＣ符号が連続しない（離散的な配置となる）場合は、通常読み出しを継続してもよい。以上述べた以外の本実施の形態の動作は、第２の実施の形態の動作と同様である。
【００７４】
たとえば、ページ長を１００００Ｂｙｔｅとし、１ページ内の全クラスタ分のＬ２ＥＣＣ符号の合計を１００Ｂｙｔｅとすると、Ｌ２ＥＣＣ符号を全て読み出さない場合は、全て読み出す場合に比べて約１０％の読み出し速度を向上させることができる。
【００７５】
なお、本実施の形態では、第２の実施の形態と同様に、ページ内の最後部にＬ２ＥＣＣ符号を連続して配置するようにしたが、第１の実施の形態と同様に、クラスタごとにＬ２ＥＣＣ符号を配置するようにしてもよい。その場合は、第１の実施の形態と同様に、各ページの最後のクラスタについてＬ２ＥＣＣ符号の読み出しを行うか否かを判定して他のクラスタのＬ２ＥＣＣ符号は読み出すようにしてもよいし、また、クラスタごとにＬ２ＥＣＣ符号の読み出しを行うか否かを判定してもよい。
【００７６】
また、たとえば、Ｎが３以上の場合には、クラスタ＃０とクラスタ＃１の読出しデータ、ＣＲＣ符号、Ｌ２ＥＣＣ符号の後に、クラスタ＃０とクラスタ＃１のＬ２ＥＣＣ符号を連続して配置し、クラスタ＃２とクラスタ＃３の読出しデータ、ＣＲＣ符号、Ｌ２ＥＣＣ符号の後に、クラスタ＃２とクラスタ＃３のＬ２ＥＣＣ符号を連続して配置し、等のように、２つのクラスタごとにＬ２ＥＣＣ符号を連続するように配置してもよい。また、ページ内のクラスタを前半と後半の２つにわけ、前半と後半の最後部にそれぞれＬ２ＥＣＣ符号を連続して配置するようにしてもよい。これらの例のように、２つ以上のＬ２ＥＣＣ符号が連続するように、２箇所以上にＬ２ＥＣＣ符号を配置するようなページフォーマットとしてもよい。
【００７７】
このように、本実施の形態では、ページを構成するクラスタの数を任意とし、クラスタを構成するセクタの数を任意とする場合に、ページ内の最後部にＬ２ＥＣＣ符号を連続して配置し、ページを構成する全てのクラスタについて、全てのセクタについて誤りが無いまたはＬ１ＥＣＣ符号による訂正が可能であった場合に、連続してＬ２ＥＣＣ符号を読み飛ばせるようにした。そのため、ページを構成するクラスタの数によらず、従来に比べ読み出し速度を向上させることができる。また、Ｌ２ＥＣＣ符号のビット数が大きく、かつページを構成するクラスタの数が大きいほど、読み出し速度向上の効果が高くなる。
【００７８】
（第４の実施の形態）
図１０は、本発明の第４の実施の形態にかかる半導体記憶装置の構成例を示す図である。本実施の形態の半導体記憶装置１ａは、第１の実施の形態の半導体記憶装置１のＮＡＮＤコントローラ１０をＮＡＮＤコントローラ１０ａに代え、スキップ指示部８０を追加し、読み出し判定部１７をＮＡＮコントローラ１０ａの外に備える以外は、第１の実施の形態の半導体記憶装置１と同様である。第１の実施の形態と同様の機能を有する構成要素は、第１の実施の形態と同一の符号を付して説明を省略する。
【００７９】
本実施の形態では、第１の実施の形態では、ＮＡＮＤコントローラ１０の内部に備えていた読み出し判定部１７をＮＡＮＤコントローラ１０ａの外に備える。ＮＡＮＤコントローラ１０ａは、読み出し判定部１７を削除する以外は第１の実施の形態のＮＡＮＤコントローラ１０と同様である。
【００８０】
本実施の形態では、Ｌ１ＥＣＣ符号による誤り訂正後の誤りがほとんど発生しないような状況を想定した構成であり、初期状態では、常に全てのクラスタについてＬ２ＥＣＣ符号を読み出さないように設定しておく。スキップ指示部８０は、読み出し判定部１７の判定結果に基づいて、Ｌ２ＥＣＣ符号の読み飛ばし（スキップ）を行うか否か（ＯｎかＯｆｆか）を読み出し制御部１６へ指示する。スキップ指示部８０は、上述のように、初期状態では、スキップ処理をＯｎとしておく（Ｌ２ＥＣＣ符号を読み出さない）。
【００８１】
なお、ここでは、本実施の形態では、第２の実施の形態で説明したページフォーマットを前提とし、初期状態では、クラスタ＃０、クラスタ＃１ともにＬ２ＥＣＣ符号を読み出さない設定とする。
【００８２】
図１１は、本実施の形態の読み出し判定処理の処理手順の一例を示す図である。まず、スキップ指示部８０は、初期状態で読み飛ばし（スキップ）をＯＮとし、読み出し制御部１６へ、Ｌ２ＥＣＣ符号を読み出さないよう指示する（ステップＳ９）。つぎに、第１の実施の形態の図５で示した処理と同様にステップＳ１〜ステップＳ４を実施する。ステップＳ３でＣＲＣの判定結果に誤りが無かった場合（ステップＳ３  Ｙｅｓ）、ＣＲＣ／Ｌ１デコーダ１８は１ページ分の読み出し（この場合は２クラスタ分の読み出し）を終了したか否かを判断し（ステップＳ１０）、１ページ分の読み出しが終了していない場合（ステップＳ１０  Ｎｏ）はステップＳ１に戻る。
【００８３】
１ページ分の読み出しが終了した場合（ステップＳ１０  Ｙｅｓ）は、読み出し判定部１７に読み出しが終了したページの識別情報を通知し、読み出し判定部１７は、通知されたページに対応する誤り記録部１９の誤り情報を参照して、当該ページ内のクラスタに誤りが無かったか否かを判断する（ステップＳ６ｂ）。
【００８４】
当該ページ内のクラスタに誤りが無かった場合（ステップＳ６ｂ  Ｙｅｓ）、そのページに対する読み出し判定処理を終了する。当該ページ内のクラスタに誤りがあった場合（ステップＳ６ｂ  Ｎｏ）、読み出し判定部１７は、Ｌ２ＥＣＣ符号の読み飛ばし（スキップ）をＯＦＦとするようスキップ指示部８０へ指示する（ステップＳ１１）。スキップ指示部８０は、Ｌ２ＥＣＣ符号の読み飛ばし（スキップ）をＯＦＦとし、読み出し制御部１６に、Ｌ２ＥＣＣ符号を含めた当該ページを読み出す（再読み出しを行う）よう指示する。その後、メモリＩ／Ｆ１５は読み出し制御部１６の指示に基づいて、Ｌ２ＥＣＣ符号を含めた当該ページの読み出しを開始し、読みだしたデータについてステップＳ１〜ステップＳ４およびステップＳ１０を実施する。ただし、このときのステップＳ１０（再読み出し後のステップＳ１０）では、１ページ分読み出しが完了したと判断した場合（ステップＳ１０  Ｙｅｓ）は、読み出し処理を終了する。以上述べた以外の本実施の形態の動作は、実施の形態２と同様である。
【００８５】
再読み出しが行われた場合、ＣＲＣ／Ｌ１デコーダ１８での処理後のデータは、第１の実施の形態と同様に、バッファメモリ１２からメモリ４０へ転送される。そして、Ｌ２デコーダ５０が、Ｌ２ＥＣＣ符号を用いた誤り訂正処理を実施する。
【００８６】
なお、スキップ指示部８０は、ページの読み出しごとに、初期状態に戻り、スキップをＯＮとする。そして、上述の処理により、読み出し判定部１７からスキップをＯＦＦとするよう指示を受けた場合に、スキップをＯＦＦとする。このような動作を繰り返すことにより、Ｌ１ＥＣＣ符号を用いた誤り訂正処理結果に誤りが無いページについては、Ｌ２ＥＣＣ符号を読み出さず、Ｌ１ＥＣＣ符号を用いた誤り訂正処理結果に誤りがあるページについては再読み出しによりＬ２ＥＣＣ符号を読み出すことができる。
【００８７】
なお、ここでは、初期状態での読み出し（Ｌ２ＥＣＣ符号の読み飛ばしをＯＮとする読み出し）と、スキップをＯＦＦとした後の再読み出しと、で、ＮＡＮＤメモリ２０から読み出した後の処理を共通化するため、再読み出しの場合もステップＳ１〜ステップＳ４およびステップＳ１０を実施している。これに限らず、再読み出しの際には、ＣＲＣ／Ｌ１デコーダ１８による処理を省略して、メモリＩ／Ｆ１５経由でバッファメモリ１２に書き込まれた再読み出しデータをメモリ４０へ転送し、Ｌ２デコーダ５０がＬ２ＥＣＣ処理を行うようにしてもよい。
【００８８】
なお、第１の実施の形態で説明したページフォーマットの場合にも、本実施の形態の動作は適用可能である。第１の実施の形態で説明したページフォーマットを用いる場合には、初期設定ではクラスタ＃１についてはＬ２ＥＣＣ符号を読み出さないが、クラスタ＃０のＬ２ＥＣＣ符号については、上述のように読み出し制御処理の所要時間とＬ２ＥＣＣ符号の読み出し時間との関係により、読みだすか読みださないかを設定しておく。さらに、第３の実施の形態で述べた、ページ内のクラスタ数を一般化した場合にも適用可能である。この場合、上述のステップＳ１０では１ページ分（（Ｎ＋１）個）のクラスタを読み出したか否かを判断する。
【００８９】
このように、本実施の形態では、初期状態では、Ｌ２ＥＣＣ符号を読み出さないようにし、Ｌ１ＥＣＣ符号による誤り訂正後に誤りが検出されたページを、Ｌ２ＥＣＣ符号を含めて再度読み出すようにした。そのため、読み出し判定部１７の判定処理（ステップＳ６ｂ）を、１ページを読み出している最中に実施する必要がなくなり、処理を簡素化することができる。
【符号の説明】
【００９０】
１  半導体記憶装置、１０  ＮＡＮＤコントローラ、２０  ＮＡＮＤメモリ、１１  ＤＭＡコントローラ、１２  バッファメモリ、１３  Ｌ１／Ｌ２エンコーダ、１４  書き込み制御部、１５  メモリＩ／Ｆ、１６  読み出し制御部、１７  読み出し判定部、１８  ＣＲＣ／Ｌ１デコーダ、１９  誤り記録部、８０  スキップ指示部、１３１  ＣＲＣ生成部、１３２  ＣＲＣ符号格納部、１３３  Ｌ１エンコーダ、１３４  Ｌ１ＥＣＣ符号格納部、１３５  Ｌ２エンコーダ、１３６，１３８  Ｌ２ＥＣＣ符号格納部。
【図１】
2011198272.tif 000003
【図２】
2011198272.tif 000004
【図３】
2011198272.tif 000005
【図４】
2011198272.tif 000006
【図５】
2011198272.tif 000007
【図６】
2011198272.tif 000008
【図７】
2011198272.tif 000009
【図８】
2011198272.tif 000010
【図９】
2011198272.tif 000011
【図１０】
2011198272.tif 000012
【図１１】
2011198272.tif 000013