(57)【特許請求の範囲】
【請求項１】
不揮発性半導体メモリと、
書き込みデータと、所定のサイズの前記書き込みデータである誤り訂正単位データに基づいて生成された誤り訂正符号である確定誤り訂正符号と、を前記不揮発性半導体メモリへ書き込むメモリインタフェースと、
前記書き込みデータと前記確定誤り訂正符号とを前記不揮発性半導体メモリへの書き込み前に一時記憶する一時記憶バッファと、
前記誤り訂正単位データを２つ以上の分割データに分割し、前記一時記憶バッファに記憶されている前記分割データに基づいて誤り訂正符号化処理を実施し、前記誤り訂正符号化処理により得られた誤り訂正符号を中間符号として前記一時記憶バッファへ書き込み、前記誤り訂正符号化処理の対象となる分割データと同一の誤り訂正単位データを構成する分割データに基づいて生成された中間符号が前記一時記憶バッファへ書き込まれている場合には、当該中間符号を前記一時記憶バッファから読み出して前記誤り訂正符号化処理の初期値として用いる符号化処理部と、
前記一時記憶バッファに記憶されている前記書き込みデータを前記不揮発性半導体メモリへ書き込むよう前記メモリインタフェースを制御し、前記中間符号のうち誤り訂正単位データを構成する全ての分割データを用いて誤り訂正符号化処理が実施された結果となる中間符号を前記確定誤り訂正符号として前記不揮発性半導体メモリへ書き込むよう前記メモリインタフェースを制御する制御部と、
を備えることを特徴とする半導体記憶装置。
【請求項２】
前記符号化処理部は、前記誤り訂正単位データを３つ以上の分割データに分割し、前記誤り訂正符号化処理の対象となる分割データと同一の誤り訂正単位データを構成する分割データに基づいて生成された中間符号が前記一時記憶バッファへ書き込まれている場合には、同一の誤り訂正単位データを構成する分割データに基づいて生成された中間符号のうち最後に生成された中間符号を前記一時記憶バッファから読み出して前記誤り訂正符号化処理の初期値として用いる、
ことを特徴とする請求項１に記載の半導体記憶装置。
【請求項３】
前記不揮発性半導体メモリから読み出した、前記確定誤り訂正符号と当該確定誤り訂正符に対応する誤り訂正単位データとに基づいて当該誤り訂正単位データの復号化処理を実施する復号化処理部、
をさらに備え、
前記制御部は、電源遮断に備えるよう指示するコマンドを受信した場合に、前記中間符号を前記不揮発性半導体メモリへ書き込むよう前記メモリインタフェースを制御し、前記中間符号の前記不揮発性半導体メモリ内の記憶位置と当該中間符号に対応する書き込みデータの記憶位置との対応を保持し、書き込みデータの復号化処理時に前記中間符号が前記不揮発性半導体メモリに記憶されている場合、当該中間符号を読み出すよう前記メモリインタフェースを制御し、
前記復号化処理部は、前記不揮発性半導体メモリから読み出した、前記中間符号と当該中間符号に対応する前記書き込みデータとに基づいて復号化処理を実施し、
ことを特徴とする請求項１に記載の半導体記憶装置。
【請求項４】
前記制御部は、同一の誤り訂正単位データを構成する分割データに基づいて生成された複数の中間符号が前記不揮発性半導体メモリに記憶される場合に、前記複数の中間符号のうち最後に記憶された中間符号を有効とし、書き込みデータの読み出し時に前記中間符号を前記不揮発性半導体メモリから読み出す場合、有効な前記中間符号を読み出すよう前記メモリインタフェースを制御する、
ことを特徴とする請求項３に記載の半導体記憶装置。
【請求項５】
前記不揮発性半導体メモリは、確定誤り訂正符号を記憶するための符号用領域を有し、
前記制御部は、前記中間符号を、前記符号用領域へ書き込むよう前記メモリインタフェースを制御する、
ことを特徴とする請求項３または４に記載の半導体記憶装置。
【請求項６】
前記不揮発性半導体メモリは、確定誤り訂正符号を記憶するための符号用領域と、前記書き込みデータを格納するデータ用領域を有し、
前記制御部は、前記中間符号を、前記データ用領域へ書き込むよう前記メモリインタフェースを制御する、
ことを特徴とする請求項３または４に記載の半導体記憶装置。
【請求項７】
前記不揮発性半導体メモリに同一の誤り訂正単位データを構成する分割データに基づいて生成された複数の中間符号が記憶されている場合に、前記複数の中間符号のうち最新の中間符号を前記不揮発性半導体メモリの別の領域に記憶し、前記複数の中間符号が記憶されていた領域を開放する、
ことを特徴とする請求項３〜６のいずれか１つに記載の半導体記憶装置。
【請求項８】
前記制御部は、対応する前記確定誤り訂正符号が前記不揮発性半導体メモリへ格納されていない前記書き込みデータを前記不揮発性半導体メモリへ多重に書き込むよう前記メモリインタフェースを制御し、前記確定誤り訂正符号が書き込まれた場合、当該確定誤り訂正符号に対応する前記書き込みデータの記憶されている多重の領域のうち１つの領域を除いた領域を開放するよう前記メモリインタフェースを制御する、
ことを特徴とする請求項１〜７のいずれか１つに記載の半導体記憶装置。
【請求項９】
前記制御部は、対応する前記確定誤り訂正符号または前記中間符号が前記不揮発性半導体メモリへ書き込まれていない前記不揮発性半導体メモリへ書き込み済みの前記書き込みデータのデータ量が、所定の閾値以上となった場合に、前記中間符号を前記不揮発性半導体メモリへ書き込むよう前記メモリインタフェースを制御する、
ことを特徴とする請求項１〜７のいずれか１つに記載の半導体記憶装置。
【請求項１０】
不揮発性半導体メモリと、
書き込みデータを前記不揮発性半導体メモリへ書き込むメモリインタフェースと、
前記書き込みデータを前記不揮発性半導体メモリへの書き込み前に一時記憶する一時記憶バッファと、
所定のサイズの前記書き込みデータである誤り訂正単位データに基づいて誤り訂正処理を実施して得られた誤り訂正符号を確定誤り訂正符号とし、前記誤り訂正単位データを２つ以上の分割データに分割し、前記一時記憶バッファから前記不揮発性半導体メモリへ転送中の分割データに基づいて誤り訂正符号化処理を実施し、分割データの誤り訂正符号化処理により得られた誤り訂正符号を中間符号とする符号化処理部と、
前記中間符号を前記不揮発性半導体メモリへ書き込むよう前記メモリインタフェースを制御し、前記中間符号の前記不揮発性半導体メモリ内の記憶位置と当該中間符号に対応する書き込みデータの記憶位置との対応を保持し、前記対応に基づいて前記誤り訂正符号化処理の対象となる分割データと同一の前記誤り訂正単位データを構成する分割データに基づいて生成された中間符号が前記不揮発性半導体メモリへ書き込まれていると判断した場合には当該中間符号を読み出して前記符号化処理部へ初期値として入力するよう前記メモリインタフェースを制御する制御部と、
を備え、
前記符号化処理部は、分割データの誤り訂正符号化処理を実施する際に、制御部から初期値を入力された場合は、入力された初期値と分割データとに基づいて誤り訂正符号化処理を実施する、
ことを特徴とする半導体記憶装置。
【請求項１１】
前記不揮発性半導体メモリに同一の誤り訂正単位データを構成する分割データに基づいて生成された複数の中間符号が記憶されている場合に、前記複数の中間符号のうち最新の中間符号を前記不揮発性半導体メモリの別の領域に記憶し、前記複数の中間符号が記憶されていた領域を開放する、
ことを特徴とする請求項１０に記載の半導体記憶装置。
【請求項１２】
前記不揮発性半導体メモリは複数のブロックで構成され、
前記分割データは、２つ以上の前記ブロック内のデータで構成される、
ことを特徴とする請求項１〜１１のいずれか１つに記載の半導体記憶装置。
【請求項１３】
前記不揮発性半導体メモリは、夫々独立に動作可能な複数のメモリ領域を有し、
前記メモリインタフェースは、前記複数のメモリ領域に夫々独立に書き込み可能とし、
前記複数のメモリ領域は夫々１つ以上のブロックを含み、前記ブロックは１つ以上のページを含み、
前記分割データは、互いに異なる前記メモリ領域に属するブロック内のデータで構成される、
ことを特徴とする請求項１〜１１のいずれか１つに記載の半導体記憶装置。
【請求項１４】
前記制御部は、前記分割データの前記不揮発性半導体メモリへの書き込みと並行して、当該分割データに対応する誤り訂正符号化処理を実施するよう前記メモリインタフェースおよび前記符号化処理部を制御する、
ことを特徴とする請求項１３に記載の半導体記憶装置。
【請求項１５】
前記確定誤り訂正符号の符号化対象データを、互いに異なるブロックの同一のページのデータで構成する、ことを特徴とする請求項１３または１４に記載の半導体記憶装置。
【請求項１６】
前記分割データ単位で前記不揮発性半導体メモリへの書き込みを制御し、同一ブロックに属するデータで構成される前記分割データをページ順に前記不揮発性半導体メモリへ書き込み、当該ブロック内の全ページの書き込みが終了した後に、当該ブロック以外のデータで構成される前記分割データに対応するブロックへの書き込みを実施する、
ことを特徴とする請求項１５に記載の半導体記憶装置。
【請求項１７】
前記確定誤り訂正符号の符号化対象データを、互いに異なるブロックに属する単一でないページのデータで構成する、ことを特徴とする請求項１３または１４に記載の半導体記憶装置。
【請求項１８】
前記確定誤り訂正符号の符号化対象データを、誤りに対して強いページと、誤りに対して弱いページと、を組み合わせて構成する、ことを特徴とする請求項１７に記載の半導体記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、半導体記憶装置に関する。
【背景技術】
【０００２】
不揮発性の半導体メモリを用いて情報を記憶する半導体記憶装置では、経年劣化等によりデータに誤りが生じる可能性がある。このため、このような半導体記憶装置では、データ誤りが生じた場合にも、誤りを訂正できるように、誤り訂正符号化処理を実施している。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００９−２１１２０９号公報
【非特許文献】
【０００４】
【非特許文献１】A  Case  for  Redundant  Arrays  of  Inexpensive  Disks  (RAID)  UC  Berkeley  Technical  Report  UCB/CSD-87-391  1987年
【非特許文献２】A  Tutorial  on  Reed-Solomon  Coding  for  Fault-Tolerance  in  RAID-like  Systems  James  S.Plank  Technical  Report  CS-96-332  Department  of  Computer  Science  University  of  Tennessee
【非特許文献３】D.Patterson,G.  Gibson,  and  R.  Katz.“A  Case  for  Redundant  Arrays  of  Inexpensive  Disks（RAID）”，Proceedings  of  the  1988  ACM  SIGMOD，pp.109-116，June  1988.
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明が解決しようとする課題は、半導体メモリの使用効率の低下を防ぐことができる半導体記憶装置を提供することである。
【課題を解決するための手段】
【０００６】
本願発明の一態様によれば、不揮発性半導体メモリと、不揮発性半導体メモリへ書き込む書き込みデータを一時記憶する一時記憶バッファと、誤り訂正符号の符号化対象データを２つ以上の分割データに分割し、一時記憶バッファに記憶されている分割データに基づいて誤り訂正符号化処理を実施して得られた誤り訂正符号を中間符号として一時記憶バッファへ書き込み符号化処理部と、を備える。
【図面の簡単な説明】
【０００７】
【図１】図１は、第１の実施の形態にかかる半導体記憶装置の構成例を示すブロック図である。
【図２】図２は、符号化対象データと誤り訂正符号との対応の一例を示す図である。
【図３】図３は、符号化対象データと誤り訂正符号との対応の一例を示す図である。
【図４】図４は、データ：符号が８：１の場合の符号化対象データと誤り訂正符号との対応の一例を示す図である。
【図５】図５は、第１の実施の形態の誤り訂正符号の中間状態の記録方法の一例示す図である。
【図６】図６は、第１の実施の形態の効果を説明するための図である。
【図７】図７は、第１の実施の形態の誤り訂正符号化処理とデータ書き込みの手順の一例を示す図である。
【図８】図８は、下位ページと上位ページを組み合わせて符号化対象データとする例を示す図である。
【図９】図９は、第１の実施の形態の誤り訂正処理手順の一例を示すフローチャートである。
【図１０】図１０は、符号化回路の構成例を示す図である。
【図１１】図１１は、対応関係表の一例を示す図である。
【図１２】図１２は、フラッシュ時の符号書き込みの一例を示す図である。
【図１３】図１３は、フラッシュ時の符号書き込みの別の一例を示す図である。
【図１４】図１４は、符号のコンパクションの一例を示す図である。
【図１５】図１５は、誤り訂正符号の中間状態をデータ用のブロックに書き込む場合の書き込み方法の一例を示す図である。
【図１６】図１６は、誤り訂正符号の中間状態をデータ用のブロックに書き込む場合の書き込み方法の一例を示す図である。
【図１７】図１７は、第１の実施の形態の復号化処理の概念を示す図である。
【図１８】図１８は、第１の実施の形態の復号化処理の概念を示す図である。
【図１９】図１９は、第１の実施の形態の復号化処理の概念を示す図である。
【図２０】図２０は、第１の実施の形態の復号化処理の概念を示す図である。
【図２１】図２１は、冗長化手順の一例を示すフローチャートである。
【図２２】図２２は、第２の実施の形態の冗長化手順の一例を示すフローチャートである。
【図２３】図２３は、第２の実施の形態の不正電源遮断後の復号化処理の概念を示す図である。
【図２４】図２４は、第３の実施の形態にかかる半導体記憶装置の構成例を示すブロック図である。
【図２５】図２５は、第３の実施の形態の誤り訂正符号の中間状態の生成と記憶方法の一例を示す図である。
【図２６】図２６は、第３の実施の形態の誤り訂正符号の中間状態の生成と記憶方法の一例を示す図である。
【図２７】図２７は、第３の実施の形態の誤り訂正符号の中間状態の復帰と再生成の一例を示す図である。
【図２８】図２８は、第３の実施の形態の誤り訂正符号の中間状態の復帰と再生成の一例を示す図である。
【図２９】図２９は、第３の実施の形態のデータ書き込み時の動作手順の一例を示すフローチャートである。
【図３０】図３０は、パーソナルコンピュータの外観を示す斜視図である。
【図３１】図３１は、パーソナルコンピュータの機能構成例を示す図である。
【発明を実施するための形態】
【０００８】
誤り訂正符号を使って誤りを訂正する場合、どのような誤り訂正符号化処理を実施するかを検討する際には、訂正能力だけではなく訂正能力によって決まる冗長符号（誤り訂正符号）量も重要な要素となってくる。特にストレージの分野では冗長情報量の増加はそのままコスト増加につながるためもっとも重要な要素である。
【０００９】
一般に、ＢＣＨ符号などの一般的に使用される誤り訂正符号では、半導体メモリ中の冗長符号とデータの総量を固定した場合、誤り訂正単位を大きくした方が(データ＋符号の長さを大きくした方が)誤りが偏った場合でも訂正できる可能性が上がるため誤り訂正能力を高くすることが可能である。逆に誤り訂正能力を固定した場合、誤り訂正単位を大きくすることで冗長符号の量を削減できるため、半導体メモリのコスト増加を防ぎつつ訂正能力を維持できる可能性がある。
【００１０】
一方、ブロック単位やメモリチップ単位での故障に対応するためには、複数のブロックまたは複数のメモリチップへ分散して記録するデータから誤り訂正符号を計算することが有効である。不揮発性の半導体メモリとしてＮＡＮＤメモリを使用する場合、ＮＡＮＤメモリではページ順に書き込みを行うため、複数のブロックまたは複数のメモリチップへ分散して記録するデータから符号長が大きな誤り訂正符号を計算すると未書き込みの領域を有するブロック等が多数存在することになる。このため、半導体メモリの使用効率が下がってしまうという問題がある。
【００１１】
以下に添付図面を参照して、実施形態にかかる半導体記憶装置を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【００１２】
（第１の実施の形態）
図１は、第１の実施の形態にかかる半導体記憶装置１００の構成例を示すブロック図である。本実施の形態の半導体記憶装置（ＳＳＤ（Solid  State  Drive））１００は、不揮発にデータを記憶する半導体メモリを備えている。本実施の形態では、半導体記憶装置１００をＳＳＤとした例について説明するが、本実施の形態の適用対象はＳＳＤに限定しない。例えば、不揮発にデータを記憶する半導体メモリおよびコントローラを搭載したメモリカード等の補助記憶装置に対しても、本実施の形態を適用することが可能である。
【００１３】
また、各実施形態における各機能ブロックは、ハードウェア、及びソフトウェアのいずれか、又は両者の組み合わせとして実現することができる。このため、各機能ブロックは、これらのいずれでもあることが明確となるように、概してそれらの機能の観点から以下に説明される。このような機能が、ハードウェアとして実現されるか、又はソフトウェアとして実現されるかは、具体的な実施態様、或いはシステム全体に課される設計制約に依存する。当業者は、具体的な実施態様ごとに、様々な方法でこれらの機能を実現し得るが、そのような実現を決定することは本発明の範疇に含まれる。
【００１４】
半導体記憶装置１００は、パーソナルコンピュータなどのホスト装置とホストインタフェース（ホストＩ／Ｆ）３で接続され、ホスト装置の外部記憶装置として機能する。半導体記憶装置１００は、コントローラ（制御部）１と、ＥＣＣ（Error  Check  and  Correct）エンコーダ／デコーダ２と、ホストＩ／Ｆ３と、一時記憶バッファ４と、ＮＡＮＤインタフェース（ＮＡＮＤＩ／Ｆ）５と、ＮＡＮＤメモリ６と、を備える。
【００１５】
ホストＩ／Ｆ３は、例えばＡＴＡ（Advanced  Technology  Attachment）規格の通信インタフェースを有し、コントローラ１の制御にしたがって半導体記憶装置１００とホスト装置との通信を制御する。ホストＩ／Ｆ３は、ホスト装置から送信されたコマンドを受信し、当該コマンドによって論理アドレス（ＬＢＡ：Logical  Block  Addressing）が指定されたデータの書き込みが要求されている場合、当該コマンド（ライトコマンド）をコントローラ１に送る。また、ホスト装置からＮＡＮＤメモリ６へ記憶されているデータの読み出しを要求するコマンドを受信した場合には、当該コマンド（リードコマンド）をコントローラ１へ送る。
【００１６】
コントローラ１は、半導体記憶装置１とホスト装置とのデータ転送制御、ＮＡＮＤメモリ６への書き込み制御、ＮＡＮＤメモリ６からの読み出し制御等の各種制御を実施する。コントローラ１は、ＮＡＮＤメモリ６への書き込みおよび読み出しを制御し、ＮＡＮＤメモリ６へ書き込まれた誤り訂正符号とデータとの対応を管理する符号管理部１１と、ＮＡＮＤメモリ６へ書き込むデータに対する誤り訂正符号化処理、およびＮＡＮＤメモリ６からの読み出しデータに対する復号化処理を制御する符号化制御部１２と、を備える。また、コントローラ１は、ホスト装置が指定する論理アドレスとしての論理アドレス（ＬＢＡ）とＮＡＮＤメモリ６上でのデータ記憶位置と、ＮＡＮＤメモリ６に書き込まれたデータに対応する誤り訂正符号のＮＡＮＤメモリ６上での記憶位置との対応関係などを管理する。
【００１７】
一時記憶バッファ４は、コントローラ１がデータ転送のための転送データを一時格納するために使用されるデータ用領域４１と、ＥＣＣエンコーダ／デコーダ２が生成した誤り訂正符号を格納するＥＣＣ用領域と、で構成される。また、一時記憶バッファ４は、例えば、ＤＲＡＭ（Dynamic  Random  Access  Memory）などの揮発性メモリで構成される。
【００１８】
ＥＣＣ（Error  Check  and  Correct）エンコーダ／デコーダ２は、エンコーダ（符号化処理部）２１およびデコーダ（復号化処理部）２２で構成される。エンコーダ２１は、一時記憶バッファ４のデータ用領域４１に格納されているＮＡＮＤメモリ６への書き込みデータに対して誤り訂正符号化処理を実施する。デコーダ２２はＮＡＮＤメモリ６へ記憶されているデータに対して当該データに対応する誤り訂正符号に基づいて復号化処理を実施する。
【００１９】
ＮＡＮＤＩ／Ｆ５は、ＮＡＮＤメモリ６−０〜６−４と一時記憶バッファ４との間のデータ転送制御を実行するメモリインタフェースであり、読み書きを並行して実施できるよう４つのチャネル（チャネルｃｈ０〜ｃｈ−４）を有している。チャネルｃｈ０〜ｃｈ４は、それぞれ対応するＮＡＮＤメモリ６−０〜６−４を制御する。
【００２０】
ＮＡＮＤメモリ６は、半導体メモリであり、ＮＡＮＤメモリ６−０〜６−４で構成される。ＮＡＮＤメモリ６−０〜６−４のうち、ＮＡＮＤメモリ６−０〜６−３は、ホスト装置から転送されたデータが書き込まれるデータ記憶用のメモリであり、ＮＡＮＤメモリ６−４は、ＥＣＣエンコーダ／デコーダ２が生成した誤り訂正符号が書き込まれる符号用のメモリである。なお、本実施の形態では、符号用としてデータ用とは別にチャネルおよびメモリ領域（ＮＡＮＤメモリ６−４）を設けるようにしたが、符号用に専用のチャネルおよびメモリ領域を設けず、ＮＡＮＤメモリ６のデータ記憶用の領域に誤り訂正符号を格納するようにしてもよい。
【００２１】
ホスト装置から送信されてきたデータは、コントローラ１の制御の基に、ホストＩ／Ｆ３を経由して一時記憶バッファ４のデータ用領域４１に一旦格納され、その後、一時記憶バッファ４から読み出されてＮＡＮＤＩ／Ｆ５を経由してＮＡＮＤメモリ６に書き込まれる。ＮＡＮＤメモリ６から読み出されたデータは、ＮＡＮＤＩ／Ｆ５を経由して一時記憶バッファ４のデータ用領域４１に一旦格納され、その後、一時記憶バッファ４から読み出されてホストＩ／Ｆ３を経由してホスト装置に転送される。
【００２２】
ＮＡＮＤメモリ６は、複数のメモリセルがマトリクス状に配列されたメモリセルアレイを有する。個々のメモリセルは、多値記憶が可能なメモリセルであってもよいし各セルが１つの値を記憶可能なメモリセルであってもよい。ＮＡＮＤメモリ６−０〜６−４はそれぞれ１つのメモリチップによって構成されているとする。また、各メモリチップ（ＮＡＮＤメモリ６−０〜６−４）は、データ消去の単位であるブロックをそれぞれ１つ以上備える。１ブロックは、１つ以上のページで構成される。１ページは、複数のメモリセルで構成され、ＮＡＮＤメモリ６の書き込みおよび読み出しはページ単位で行われる。また、ＮＡＮＤメモリ６への書き込みはページの昇順に書き込みが行なわれる。
【００２３】
つぎに、本実施の形態の誤り訂正符号化処理について説明する。図２および図３は、符号化対象データと誤り訂正符号との対応の一例を示す図である。図２および図３では、ＮＡＮＤメモリ６の各ブロックの１ページ分ずつのデータを符号化対象データとして誤り訂正符号を生成する例を示している。また、図２および図３では、データ：符号を４：１の比率とした例を示している。図２および図３に示したブロック７−０は、チャネルｃｈ０により読み書きが行われるＮＡＮＤメモリ６−０内のブロックであり、同様にブロック７−１，７−２，７−３は、それぞれチャネルｃｈ１，ｃｈ２，ｃｈ３により読み書きが行われるＮＡＮＤメモリ６−１，６−２，６−３内のブロックである。ブロック８は、チャネルｃｈ４により読み書きが行われる符号用のメモリであるＮＡＮＤメモリ６−４内のブロックである。
【００２４】
４つのブロックのうち１ページずつのデータを用いて１つの誤り訂正符号を生成する場合、図２に示したように、例えばブロック７−０〜７−３のページ＃０に書き込まれるデータを符号化対象データ２０１とし、ＥＣＣエンコーダ／デコーダ２のエンコーダ２１は、符号化対象データ２０１に基づいて誤り訂正符号を生成する。そして、生成された誤り訂正符号は、符号（誤り訂正符号）３０１としてブロック８に書き込まれる。同様に、ブロック７−０〜７−３のページ＃１に書き込まれる符号化対象データ２０２に基づいて生成された誤り訂正符号は、符号３０２としてブロック８に書き込まれる。図２は、ページ＃０については、ＮＡＮＤメモリ６への書き込みが終了し、ページ＃１については、ＮＡＮＤメモリ６への書き込みが終了していない状態を示している。
【００２５】
図２に示した符号化対象データの選択方法（各ブロックから１ページずつデータを選択する方法）によりデータを選択し、１ページ分のデータの訂正が可能な誤り訂正符号を用いれば、ブロックの故障が生じた場合にもデータの訂正が可能である。具体的には、１ページ分のデータの訂正が可能な誤り訂正符号を用いれば、４ブロックのうちのいずれかのブロックが故障した場合でも、ページごとに生成された誤り訂正符号を用いて、故障したブロックのデータをページ毎に復元することができる。なお、１ページ分のデータが訂正可能な誤り訂正符号は、１ページ分のデータの訂正が可能な誤り訂正符号を組み合わせて１ブロック分のデータを復元する上記の方法と同様に、１ページ分のデータよりも小さいデータの訂正が可能な誤り訂正符号を組み合わせて１ページ分のデータを復元する方法で代替してもよい。
【００２６】
図３は、図２と同様にデータ：符号を４：１の比率としているが、図２とは異なり１つの誤り訂正符号に対応する符号化対象データ２０３を一部のブロック（ブロック７−２）から重複して選択し、対応する符号３０３を生成する例を示している。この場合、ブロック７−２が故障した場合には２ページ分の訂正が必要となり、１ページ分のデータが訂正可能な誤り訂正能力を有していてもデータの訂正ができず、１ブロック分のデータを修復できないことになる。
【００２７】
以上のことから、データと符号の比率が同じく誤り訂正能力が同じ場合に、ブロック単位の故障が生じた場合に対応するためには、図２の例のように、符号化対象データを各ブロックから訂正可能なページ数以下ずつ選択することが望ましい。例えば、２ページ訂正可能な場合には、図３のように、符号化対象データとして１つのブロックから２ページ分のデータを選択してもよい。
【００２８】
図４は、データ：符号が８：１の場合の符号化対象データと誤り訂正符号との対応の一例を示す図である。図４の例では、符号３０４に対応する符号化対象データ２０４として図２の例と同様に各ブロックから１ページずつデータを選択している。ここでは、データ用のチャネルは４つであるため、データ：符号が８：１の場合は、符号化対象データ２０４として各チャネルに対応する２つのブロックからそれぞれ１つずつデータが選択されることになる。例えば、ブロック７−０とブロック７−４は、チャネルｃｈ０により制御され、ブロック７−１とブロック７−５は、チャネルｃｈ１により制御されブロック７−２とブロック７−６は、チャネルｃｈ２により制御されブロック７−３とブロック７−７は、チャネルｃｈ３により制御されるとする。チャネルとブロックの対応はこれに限定されないが、並行して読み書きを行う効率を考慮すると、１つの誤り訂正符号に対応する符号化対象データは、特定のチャネルに集中しないように選択することが望ましい。
【００２９】
以上、ＮＡＮＤメモリ６に格納される符号化対象データと誤り訂正符号と対応例について１ブロック分のデータを修復する場合を例にとって説明したが、データと符号の比率及び訂正能力、対応する故障モードは上述した例に限定されない。
【００３０】
次に、本実施の形態の誤り訂正符号の中間状態（中間符号）の記録について説明する。図５は、本実施の形態の誤り訂正符号の中間状態の記録方法の一例を示す図である。図５は、データ：符号が８：１の場合の例を示している。図５の例では、図５の下段に示すように、ＮＡＮＤメモリ６へは、図４の例と同様に、８つのブロックのデータである符号化対象データ２０５に基づいて生成した誤り訂正符号である符号３０５がブロック８へ格納される。
【００３１】
一方、図５の例では、ＥＣＣエンコーダ／デコーダ２のエンコーダ２１は、ブロック７−０〜７−７に記憶されるデータ（ページデータ）に基づいてＮＡＮＤメモリ６へ格納される誤り訂正符号を生成する際に、まず、図５の上段に示すようにブロック７−０〜７−３に記憶されるページデータ９−０〜９−３に基づいた誤り訂正符号の生成処理を実施する。そして、ページデータ９−０〜９−３に基づいた誤り訂正符号の生成処理結果を誤り訂正符号の中間状態として一時記憶バッファ４のＥＣＣ用領域４２へ格納する。そして、エンコーダ２１は、ブロック７−０〜７−３に記憶される次のページのページデータに基づく誤り訂正符号の生成処理結果を誤り訂正符号の中間状態として一時記憶バッファ４のＥＣＣ用領域４２へ格納する。
【００３２】
ブロック７−０〜７−３をグループＡとし、ブロック７−０〜７−３をグループＢとして、エンコーダ２１は、グループＡの各ブロックの全てのページの誤り訂正符号の中間状態をＥＣＣ用領域４２へ格納した後に、グループＢのブロック７−４〜７−７に記憶されるページデータ９−４〜９−７に基づく誤り訂正符号の生成処理を開始する。グループＢのブロック７−４〜７−７に記憶されるページデータ９−４〜９−７の処理の際には、ＥＣＣ用領域４２に格納されている同一ページに対応するグループＡの中間状態を読み出し、中間状態とページデータ９−４〜９−７とに基づいてＮＡＮＤメモリ６へ格納する誤り訂正符号（すなわち完成した誤り訂正符号）を生成する。このように、グループＡの誤り訂正符号の中間状態を初期値としてグループＢのデータを入力して誤り訂正符号化処理を実施することにより、全体としてグループＡとグループＢのデータの両方に対応する誤り訂正不符号を生成することになる。そして、同様に順次次のページについて、中間状態とグループＢの各ブロックのページデータとに基づいて誤り訂正符号を生成していく。
【００３３】
本実施の形態では、上述のように誤り訂正符号の処理途中の中間状態を一時記憶バッファ４へ格納し（退避させ）て、残りのブロックを用いた誤り訂正符号の生成処理時に退避させた中間状態を読み出す（復帰させる）ことにより、図５に示すようにグループＡのブロックを全て書き込んだ後に、グループＢの書き込みを行うことができる。ＮＡＮＤメモリは、ページ順に書き込みをする必要があるデバイスである。複数のブロックに跨ったデータを用いて誤り訂正符号を生成する場合、中間状態を格納しない従来の方法では誤り訂正符号の符号化対象データをページ順に格納していくことになるため、ブロックの使用効率が低下してしまう。これに対し、本実施の形態では、グループＡのブロックを全て書き込んだ後に、グループＢの書き込みを行うことができるため、中間状態を格納しない従来の方法に比べブロックの使用効率を向上させることができる。
【００３４】
なお、図５では、１つの確定した誤り訂正符号に対して中間状態が一度（一時記憶バッファ４へ）格納される例を示しているが、例えば１２個のブロックのデータで確定した誤り訂正符号を生成する場合等には、複数回中間状態を格納するようにしてもよい。例えば、ブロック７−０〜７−１１のページ＃０のデータで１つの確定した誤り訂正符号を生成する場合、４つのブロックずつＡ、Ｂ、Ｃの３つのグループにグループ化しておき、グループＣの誤り訂正符号を生成する場合には、図５の例でグループＢまでの誤り訂正符号を中間状態として復帰させ、この中間状態とグループＣのデータとで確定した誤り訂正符号を生成すればよい。なお、ここでは、説明を簡単にするためグループ化しているが、グループ化は必須ではない。確定した誤り訂正符号の生成処理過程の中間状態として、確定した誤り訂正符号の符号化対象データの一部のデータを入力した誤り訂正符号化処理結果の格納および復帰を行うようにすれば、どのような単位で中間状態を生成してもよい。例えば、図５の例でページごとに中間状態の入力となったデータの数を異なるようにしてもよい。また、誤り訂正符号の符号化対象データの選択方法にも制約はなく、１ブロックのデータだけで誤り訂正符号を生成してもよいし、５ブロックのデータで誤り訂正符号を生成してもよい。
【００３５】
図６は、本実施の形態の効果を説明するための図である。図６は、符号の量を減らすために符号長（データ＋符号）を長くした場合の例を示しており、具体的には、図６では、一例として、データ：符号を１００：１（符号＋データに対する符号の比率は約１％）とした例を示している。ブロック７−０〜７−９９は、ＮＡＮＤメモリ６内のブロックであり、７−０〜７−３がｃｈ０〜ｃｈ３により制御され、７−４〜７−７がｃｈ０〜ｃｈ３により制御され、というように４つのブロックを１つのグループとしてグループ内では４つのチャネルによる同時書き込みが可能とする。
【００３６】
図６の左側は中間状態の退避・復帰がない場合を示し、１つの誤り訂正符号がＮＡＮＤメモリ６へ格納され、次の誤り訂正符号がＮＡＮＤメモリ６へ格納するまでのＮＡＮＤメモリ６への書き込みの状態を示している。中間状態の退避・復帰がない場合、ブロック７−０〜７−９９の各々１ページ分ずつのデータに対応する誤り訂正符号を生成した後に、次のページの書き込みおよび誤り訂正符号化処理が実施される。したがって、１００個のブロックが未書込み領域を有する状態が長く継続し、ブロックの使用効率が悪い。
【００３７】
図６の右側は、中間状態の退避・復帰がある場合を示し、図６の右側と同様に１つの誤り訂正符号がＮＡＮＤメモリ６へ格納され、次の誤り訂正符号がＮＡＮＤメモリ６へ格納するまでのＮＡＮＤメモリ６への書き込みの状態を示している。この場合、図５で説明したようにグループ順にグループ内のブロックの全ページの書き込みが行われていくため、未書き込みの領域があるのは最後のグループの４つのブロックだけとなる。このように、中間状態の退避・復帰がある場合には、ブロックの使用効率が向上する。なお、同様の効果は、一時記憶バッファ４の容量を大きくすることによっても実現可能であるが、図６の例のように符号化対象データのデータ長を大きくする場合、非常に大きな容量が必要となりコスト増となるため好ましくない。例えば、図６の例では、一時記憶バッファ４の容量が１００ブロック分以上必要となる。
【００３８】
次に、本実施の形態の誤り訂正符号化処理とデータ書き込みの手順について説明する。図７は、本実施の形態の誤り訂正符号化処理とデータ書き込みの手順の一例を示す図である。図７では、各ブロックは１２８ページで構成されるとしている。
【００３９】
図７の最上段は、エンコーダ２１の動作を示している。エンコーダ２１は、まず、ブロック７−０〜７−３のページ＃０のデータに基づいて、符号＃０を生成するための誤り訂正符号処理（符号＃０の計算）を実施し、その時点での処理結果を符号＃０の中間状態として一時記憶バッファ４のＥＣＣ格納領域４２へ退避（格納）する。次に、ブロック７−０〜７−３のページ＃１のデータに基づいて、符号＃１を生成するための誤り訂正符号処理（符号＃１の計算）を実施し、その時点での処理結果を符号＃１の中間状態として一時記憶バッファ４のＥＣＣ用領域４２へ退避する。
【００４０】
以降同様に、ページの昇順に処理を実施し、ブロック７−０〜７−３のページ＃１２７のデータに基づいて、符号＃１２７の中間状態の退避を実施した後、符号＃０の中間状態を一時記憶バッファ４のＥＣＣ格納領域４２から読出し、読み出した中間状態とブロック７−４〜７−７のページ＃０のデータとに基づいて確定した符号＃０を生成して、確定した符号＃０を一時記憶バッファ４のＥＣＣ格納領域４２へ退避する。そして、同様にページの昇順に読み出した中間状態とブロック７−４〜７−７のデータとに基づいて確定した誤り訂正符号を生成してＥＣＣ格納領域４２へ退避する。
【００４１】
図７の中段には、ＮＡＮＤＩ／Ｆ５の動作をチャネルごとに示している。ｃｈ０では、まず、エンコーダ７−０が符号＃０を生成するために用いるブロック７−０のデータをＮＡＮＤメモリ６−０のブロック７−０のページ＃０へ書き込む。次に、同様に符号＃１を生成するために用いるブロック７−０のデータをブロック７−０のページ＃１へ書き込む。以降、同様にブロック７−０についてページの昇順に書き込みを実施し、ページ＃１２７までの書き込みを実施する。そして、ブロック７−０のページ＃１２７までの書き込みが終了した後に、同様にブロック７−４のページ＃０への書き込みを実施し、以降同様にページの昇順に書き込みを実施する。
【００４２】
ｃｈ１〜ｃｈ３も、ｃｈ０と同様にブロック７−１〜７−３についてページの昇順に書き込みを行った後、ブロック７−５〜７−７についてページの昇順に書き込みを行う。図７の再下段は、ＮＡＮＤメモリ６の各ブロックに格納されたデータと一時記憶バッファ４に格納された符号の関係を示している。
【００４３】
なお、一時記憶バッファ４のＥＣＣ格納領域４２へ退避した確定した誤り訂正符号は、コントローラ１の指示によりＮＡＮＤＩ／Ｆ５経由でＮＡＮＤメモリ６−４へ記憶される。確定した誤り訂正符号の書き込みのタイミングに制約はないが、例えば対応する符号化対象データのＮＡＮＤメモリ６への書き込みの終了時等に書き込みを実施する。
【００４４】
図７では、エンコーダ２１の処理対象となるデータをＮＡＮＤＩ／Ｆ５がエンコーダ２１の処理に同期して書き込むようにしているが、図７に示した手順は一例であり、エンコーダ２１の動作タイミングとＮＡＮＤＩ／Ｆ５動作タイミングとの関係はこれに限定されない。ただし、図７のように、エンコーダ２１が処理対象とするエンコーダ２１の処理対象となるデータをＮＡＮＤＩ／Ｆ５がエンコーダ２１の処理に同期しないで書き込む場合には、図７の例より一時記憶バッファ４のデータ用領域４１の必要容量が図７のように同期する場合より増加する。
【００４５】
以上の例では、１つの確定した誤り訂正符号の符号化対象データとして各ブロックの同一ページのデータを選択するようにしたが、符号化対象データの選択方法はこれに限定されない。ＮＡＮＤメモリ６では、誤りに対して強い（誤りが生じにくい）位置と誤りに対して弱い（誤りが生じやすい）位置がある。例えば、多値記憶が可能なメモリセルの場合、上位ページの方が下位ページより誤りが生じやすい。また、ブロック内での位置やチップ内でのブロックの位置によっても誤りに対する強さが異なるデバイスもある。このような場合、誤りが弱い位置のデータのみを符号化対象データとして誤り訂正符号を生成すると、誤りが集中して訂正できなくなる可能性がある。誤りに対して強い位置と弱い位置を組み合わせて１つの誤り訂正符号を生成することで、誤りを訂正できる可能性を向上させることができる。
【００４６】
図８は、下位ページと上位ページを組み合わせて符号化対象データとする例を示す図である。図８の各ブロック内の強い、弱いは、誤りに対する強さを示している。このような場合に、符号化対象データとして、ブロック７−０〜７−３とブロック７−４〜７−７とで強さの異なるページを選択することで、誤りを訂正できる可能性を向上させることができる。
【００４７】
次に、本実施の形態の誤り訂正処理について説明する。図９は、本実施の形態の誤り訂正処理手順の一例を示すフローチャートである。図９に示すように、符号化制御部１２は、一時記憶バッファ４からＮＡＮＤメモリ６への転送を行う際等に、符号化処理を開始し、まず、符号化の対象となるデータを書き込むＮＡＮＤメモリ６の領域が、符号の確定していない状態であるか否かを判断する（ステップＳ１１）。
【００４８】
なお、符号化制御部１２は、確定した符号を生成する符号化対象データが書き込まれるＮＡＮＤメモリ上の領域（例えば、図５の場合ブロック７−０〜７−７のページ＃０等）を把握しており、また、１つの確定した誤り訂正符号に対応するＮＡＮＤメモリ上のデータ領域毎に、誤り訂正符号の状態（符号化処理を実施していないか、誤り訂正符号の中間状態が一時記憶バッファ４に格納済みであるか、確定した誤り訂正符号が一時記憶バッファ４に格納済みである（符号が確定している）か）を把握しているとする。なお、符号化処理を実施していない場合（ＮＡＮＤメモリ６への最初の書き込み時等）も、符号が確定しているとして扱うこととする。
【００４９】
符号が確定していると判断した場合（ステップＳ１１  Ｎｏ）、符号化制御部１２は、エンコーダ２１に対して、処理対象のデータ（一時記憶バッファ４のデータ用領域４１に格納されているＮＡＮＤメモリ６への書き込みデータのうちのどのデータを符号化の処理対象とするか）を指示するとともに誤り訂正符号の初期化（誤り訂正符号を全て０にする）を指示し、エンコーダ２１は指示に基づいて誤り訂正符号の初期化を実施する（ステップＳ１２）。なお、ここでは、この際、処理対象のデータとして図５で示したようなグループ単位でデータを指示する（例えば、図５の例では、ブロック７−０〜７−３のそれぞれのページ＃０に書き込むデータや、ブロック７−４〜７−７のそれぞれのページ＃０に書き込むデータ等）。
【００５０】
符号が確定していないと判断した場合（ステップＳ１１  Ｙｅｓ）、符号化制御部１２は、エンコーダ２１に処理対象のデータを指示するとともに当該データに対応する誤り訂正符号の中間状態の復帰（一時記憶バッファ４からの読み出し）を指示し、エンコーダ２１は指示に基づいて誤り訂正符号の中間状態を復帰させる（ステップＳ１３）。
【００５１】
ステップＳ１２またはステップＳ１３の後、エンコーダ２１は、誤り訂正符号処理を実施し、処理を終了すると処理終了を符号化制御部１２へ通知する（ステップＳ１４）。符号化制御部１２は、処理終了を通知されると、エンコーダ２１に対して処理結果である誤り訂正符号（誤り訂正符号の中間状態、または確定した誤り訂正符号）を一時記憶バッファ４へ退避するよう指示し、エンコーダ２１は指示に基づいて誤り訂正符号を退避させる（ステップＳ１５）。
【００５２】
次に、符号化制御部１２は、他に符号化対象のデータが存在するか否かを判断し（ステップＳ１６）、存在しない場合（ステップＳ１６  Ｎｏ）には処理を終了する。他に符号化対象のデータが存在する場合（ステップＳ１６  Ｙｅｓ）、ステップＳ１１へ戻る。
【００５３】
図１０は、エンコーダ２１を構成する符号化回路の構成例を示す図である。図１０は、誤り訂正符号としてＢＣＨ符号を用い、生成多項式Ｆ（ｘ）として以下の式（１）に示す式を用いる場合の符号化回路の一例を示している。
Ｆ（Ｘ）＝Ｘ8＋Ｘ7＋Ｘ6＋Ｘ4＋１                            …（１）
【００５４】
図１０の例では、符号化回路は８つのシフトレジスタ２００と４つのＸＯＲ（排他的論理和回路）２０１とで構成されている。誤り訂正符号の初期化の際には、各シフトレジスタ２００は全て０に設定される。この符号化回路には符号化対象データとして各ブロックの各ページのデータが順次入力され、１グループの全データが入力された段階の各シフトレジスタ２００の値を誤り訂正符号の中間状態として退避させる。例えば、図５の例では、ブロック７−０のページ＃０のデータ、ブロック７−１のページ＃０のデータ、ブロック７−２のページ＃０のデータ、ブロック７−３のページ＃０のデータの順に入力し、その後の各シフトレジスタ２００の値を誤り訂正符号の中間状態として一時記憶バッファ４へ退避させる。
【００５５】
そして、中間状態を復帰させて処理を行う場合は、各シフトレジスタ２００へ一時記憶バッファ４から読み出した誤り訂正符号の中間状態を設定した後に、処理対象データを順次入力する。例えば、図５の例では、誤り訂正符号の中間状態を各シフトレジスタ２００へ設定した後に、ブロック７−４のページ＃０のデータ、ブロック７−５のページ＃０のデータ、ブロック７−６のページ＃０のデータ、ブロック７−７のページ＃０のデータの順に入力し、その後の各シフトレジスタ２００の値を確定した誤り訂正符号として一時記憶バッファ４へ退避させる。
【００５６】
なお、図１０に示した符号化回路の構成は一例であり符号化回路の構成はこれに限定されず、適用する誤り訂正符号化方式に応じてどのような回路構成としてもよい。
【００５７】
次に、ホスト装置から電源切断の指示（フラッシュコマンド等）を受けた場合の半導体記憶装置１００の動作について説明する。ホスト装置は、自身が電源切断を行う場合や半導体記憶装置１００との接続を解除する時等に半導体記憶装置１００に対してフラッシュやアイドルやスリープなどのコマンドを発行することにより、処理を終了して状態を確定する（ホスト装置から受領済みでＮＡＮＤメモリ６へ書き込まれていないデータを書き込む等）よう指示する。以下の説明では、フラッシュコマンドが発行された場合について説明するが、アイドルやスリープなどのコマンドが発行された場合も同様である。
【００５８】
符号長を長くした（確定した誤り訂正符号の符号化対象となるデータの数を多くした）場合、確定した誤り訂正符号がＮＡＮＤメモリ６へ格納されるまでに時間がかかる。このため、フラッシュコマンドを受け取って状態を確定する際に確定した誤り訂正符号が格納されていないデータ（誤り訂正符号で保護されていないデータ）が生じる可能性がある。一方、誤り訂正符号の中間状態は一時記憶バッファ４に格納されているが、一時記憶バッファ４に格納されているデータは電源切断により消えてしまう。従って、誤り訂正符号により保護されないデータをなくすために、本実施の形態では、フラッシュコマンドを受け取った場合に誤り訂正符号の中間状態をＮＡＮＤメモリ６へ格納する。
【００５９】
半導体記憶装置１００は、フラッシュコマンドを受け取ると、通常処理の手順を停止して、フラッシュ時の処理に移行する。フラッシュ時の処理では、一時記憶バッファ４に格納されているＮＡＮＤメモリ６へ未書き込みの書き込みデータをＮＡＮＤメモリ６へ書き込むが、本実施の形態では、誤り訂正符号の中間状態についてもＮＡＮＤメモリ６へ書き込む。
【００６０】
図１１は、誤り訂正符号と符号化対象データとのＮＡＮＤメモリ６上の記憶位置の対応を示す対応関係表の一例を示す図である。対応表には、図１１に示すように、符号化対象データの位置と対応する誤り訂正符号の位置との対応が格納される。例えば、ブロック７−０〜７−（Ｎ−１）（Ｎ＝符号化対象データを構成するブロックの数）のあるページ（例えばページ＃０）に書き込まれた符号化対象データ２０６のＮＡＮＤメモリ６上の位置と符号化対象データ２０６に基づいて生成した確定した誤り訂正符号３０６のＮＡＮＤメモリ６上の位置との対応が格納される。
【００６１】
なお、コントローラ１は、ホスト装置から指定される論理アドレス（ＬＢＡ）とＮＡＮＤメモリ上の記憶位置との対応関係についても管理しているが、論理アドレス（ＬＢＡ）とＮＡＮＤメモリ６上の記憶位置との対応は、上述の対応関係表と別に管理してもよいし、統合して１つの対応関係表として管理してもよい。統合する場合には、論理アドレスと、書き込まれた符号化対象データ２０６のＮＡＮＤメモリ６上の位置と、符号化対象データ２０６に基づいて生成した確定した誤り訂正符号３０６のＮＡＮＤメモリ６上の位置と、が対応表として管理される。
【００６２】
この対応関係表は、コントローラ１の符号管理部１１が保持する。符号管理部１１は、ＮＡＮＤメモリ６へのデータの書き込みを制御するとともにＮＡＮＤメモリ６へ書き込んだデータの位置に基づいて対応関係表を更新する。通常時には、このように符号化対象データと確定した誤り訂正符号との対応が対応関係表に書き込まれる。
【００６３】
図１２は、フラッシュ時の符号書き込みの一例を示す図である。図１２では、１６のブロックの符号化対象データ２０７に基づいて１つの確定した誤り訂正符号を生成するとする。この場合、ページ毎に、ブロック７−０〜７−３に対する誤り訂正符号化処理で１回中間状態を一時記憶バッファ４へ退避し、ブロック７−４〜７−７の誤り訂正符号化処理で２回目の中間状態を退避し、ブロック７−８〜７−１１の誤り訂正符号化処理で３回目の中間状態を退避し、ブロック７−１２〜７−１５の誤り訂正符号化処理で確定した誤り訂正符号を退避する処理を行うとする。
【００６４】
この場合に、例えば、ページ＃０のブロック７−０〜７−３に書き込むデータ２０８に対する誤り訂正符号化処理で中間状態を一時記憶バッファ４へ退避してからページ＃０のブロック７−４〜７−７に書き込むデータ２０９の誤り訂正符号化処理で２回目の中間状態を退避するまでの間に、コントローラ１がフラッシュコマンドを受け取ったとする。この場合、符号管理部１１は、データ２０８に対する誤り訂正符号の中間状態である符号＃０をＮＡＮＤメモリ６−４のブロック８（符号用のブロック）へ格納する。なお、ここでは、フラッシュコマンドを受け取るまでに、ＮＡＮＤメモリ６のデータ２０８がＮＡＮＤメモリ６への書き込まれていることを想定しているが、データ２０８が書き込まれていない場合はデータ２０８についてもＮＡＮＤメモリ６へ書き込む。そして、符号管理部１１は、符号＃０のＮＡＮＤメモリ上の位置と符号＃０の処理対象のデータ（データ２０８）のＮＡＮＤメモリ６上の位置とを対応づけて対応関係表に格納する。
【００６５】
図１３は、フラッシュ時の符号書き込みの別の一例を示す図である。図１３では、図１２で説明した動作によりフラッシュコマンドにより符号＃０がＮＡＮＤメモリ６へ書き込まれた後、さらにデータ２０９が一時記憶バッファ４に格納された後に次のフラッシュコマンドを受け取ったとする。この場合、データ２０９に基づいて生成した中間状態である符号＃０´をＮＡＮＤメモリ６−４のブロック８へ格納する。また、対応関係表にデータ２０８およびデータ２０９の位置と符号＃０´の位置との対応を格納するとともに、対応関係表の既に格納されている符号＃０に関する情報を無効化する。なお、無効化の方法はどのような方法でもよいが、例えば、対応する新たな符号の情報（例えば符号＃０´に関する情報）が対応関係表に書き込まれた場合に自動的に古い情報（例えば符号＃０に関する情報）が無効であると判断されるようにしてもよいし、例えば符号ごとに有効無効のいずれであるかのフラグを対応関係表に格納することとし、このフラグにより明示的に有効無効を管理してもよい。
【００６６】
図１３を用いて説明したように、無効化した符号がＮＡＮＤメモリ６へ格納されているとＮＡＮＤメモリ６上の領域を無駄に使用することになるため、符号のコンパクションを実施してもよい。図１４は、符号のコンパクションの一例を示す図である。図１４では、ハッチングされた符号が無効化された符号を示している。このような場合、次の手順により符号のコンパクションを実施する。
【００６７】
（１）まず、有効な符号＃２と符号＃０´を記憶する新規ブロックの領域を確保する。（２）次に有効な符号＃２と符号＃０´を新規ブロックの確保した領域にコピーする。
（３）有効な符号＃２と符号＃０´の対応関係表の符号の位置を更新する。
（４）不要になったブロックを解放する。
【００６８】
図１２および図１３では、フラッシュコマンドを受け取った場合に、誤り訂正符号の中間状態を符号用のブロックに書き込むようにしたが、誤り訂正符号の中間状態をデータ用のブロックに書き込むようにしてもよい。
【００６９】
図１５および図１６では、誤り訂正符号の中間状態をデータ用のブロックに書き込む場合の書き込み方法の一例を示す図である。図１５の例では、符号化対象データ２０８に対応する誤り訂正符号の中間状態である符号＃０をブロック７−４へ格納する。この場合も対応関係表には、符号化対象データ２０８の位置と符号＃０の位置とを対応づけて格納する。
【００７０】
図１６の例では、図１５で示した状態から、さらにデータ２１１を書き込み、データ２０８およびデータ２１１に対応する誤り訂正符号の中間状態である符号＃０´をブロック７−８へ書き込む。なお、符号＃０を書き込んだ後のデータの書き込み時には、ブロック７−５〜７−７の３ブロックにのみデータを格納する。この場合、ブロック７−０〜７−３のデータ２０８とブロック７−５〜ブロック７−７のデータ２１１とのデータに基づいて符号＃０´を生成したことを対応関係表に格納しておく。
【００７１】
なお、符号＃０をデータ用の領域に書き込んだ場合、符号＃０´を計算する場合には、符号＃０についてもデータとして取り扱って計算するなどの方法を用いればよい。このようにしておけば、訂正処理（復号化処理）時に、符号の中間状態とデータを区別しないで処理ができる。
【００７２】
次に、本実施の形態の復号化処理について説明する。図１７〜２０は、本実施の形態の復号化処理の概念を示す図である。ここでは、図５で示した例と同様に８つのブロックで１つの確定した誤り訂正符号を生成するとする。図１７は、確定した誤り訂正符号がＮＡＮＤメモリ６に記憶されている場合の本実施の形態の復号化処理を示している。図１７は、排他的論理和で計算するパリティを使って８ページ中１ページを訂正する例を示している。８つのブロックのデータ４０１に基づいて符号４０２が生成されているとするとき、データ４０１を格納するあるブロックが故障したとする。この場合、ＥＣＣエンコーダ／デコーダ２のデコーダ２２は、ＮＡＮＤメモリ６から読み出したデータ４０１のうち故障したブロック以外のデータと、ＮＡＮＤメモリ６から読み出したデータ４０１に対応する符号４０２（確定した誤り訂正符号）とに基づいて復号化処理を行い、故障したブロックのデータを復元して復元したデータ４０３を得ることができる。
【００７３】
図１７では、排他的論理和で計算するパリティを用いる場合を示したが、ＢＣＨ符号やＲＳ符号などを使用する場合には全てのデータ（故障したブロックのデータも含む）と誤り訂正符号とを読み出してデコーダ２２に入力する。各符号に対応した処理は従来と同様であり、適用する誤り訂正符号に対応した処理を実施する。なお、データにＣＲＣ（Cyclic  Redundancy  Check）符号を付加して、故障した箇所が検出できるようにしていることとする。ＣＲＣ符号の付加については従来と同様である。確定した誤り訂正符号を用いた（中間状態を用いない）復号化処理は、従来と同様であり、詳細な説明は省略する。
【００７４】
図１８は、誤り訂正符号の中間状態を用いて復号化処理を実施する例を示している。図１８は、誤り訂正符号の中間状態がデータの格納されるブロックとは別のブロックに格納されている例を示している。デコーダ２２は、８つのブロックのデータ４０１のうち故障したブロック以外のデータと、誤り訂正符号の中間状態４０４と、を用いて復号化処理を行う。誤り訂正符号の中間状態４０４は、最初の４つのブロックに対応する中間状態であるとし、残り４つのブロックについては未使用（データが書き込まれていない）の状態とする。この場合には、未使用の４つのブロックのデータの代わりに４つの０データ４０５を用いて、復号化処理を実施する。これにより、故障したブロックのデータを復元して復元したデータ４０４を得ることができる。
【００７５】
図１９は、誤り訂正符号の中間状態がデータの格納されるブロックに格納されている例を示している。この場合、未使用のブロックのデータの代わりに図１８と同様の０データ４０５を用い、さらに符号の中間状態の格納されているブロックの代わりに０データ４０５を用いる。デコーダ２２は、データの書き込まれている４つのブロックのデータと、４つの０データとを入力データ４０８とし、誤り訂正符号の中間状態４０９を用いて復号化処理を実施する。なお、図１８および図１９ではパリティを用いる場合を示したが、ＢＣＨ符号やＲＳ符号などを他の符号を使用する場合には、符号の特徴に応じて復号化処理を実施する。この場合にも、上記と同様に未使用のブロックのデータや符号の中間状態が格納されているブロックの代わりに０データを用いればよい。
【００７６】
図２０は、誤り訂正符号の中間状態をＮＡＮＤメモリ６で格納する場合の起動時の処理手順の一例を示すフローチャートである。上述のようにフラッシュコマンドにより誤り訂正符号の中間状態をＮＡＮＤメモリ６で格納した後に、再び半導体記憶装置１００が起動すると、確定した誤り訂正符号を計算していない未書き込み領域から書き込み（図１２のデータ２０９の書き込み等）を始めることになる。このような未書き込み領域から書き込みを始める場合には、ＮＡＮＤメモリ６に格納されている誤り訂正符号の中間状態を読み出して誤り訂正符号化処理を実施することになる。
【００７７】
従って、起動時に、半導体記憶装置１００の符号化管理部１１は、まず符号化対象データ単位内に未書き込みのデータ領域が存在するかを確認し（ステップＳ２１）、未書き込みのデータ領域が存在するか否かを判断する（ステップＳ２２）。
【００７８】
未書き込みのデータ領域が存在する場合（ステップＳ２２  Ｙｅｓ）、符号化管理部１１は、対応関係表を参照して未書き込みのデータ領域に対応する誤り訂正符号の中間状態のＮＡＮＤメモリ６上の位置を取得し（ステップＳ２３）、取得した位置から誤り訂正符号の中間状態を一時記憶バッファ４へ読み出し（ステップＳ２４）、処理を終了する。また、未書き込みのデータ領域が存在しない場合（ステップＳ２２  Ｎｏ）、処理を終了する。図２０で示した処理を実施した後は、上述の図９に示した符号化処理を実施する。
【００７９】
次に、不正電源遮断に対応する冗長化について説明する。フラッシュコマンドを受け取らずに半導体記憶装置１００の電源が遮断（不正電源遮断）されることがある。不正電源遮断時には、上述したフラッシュコマンドを受け取った場合の動作を実施できずに、処理の途中で電源が遮断されることになる。不正電源遮断に対してＮＡＮＤメモリ６に書き込まれたデータを保護するため、本実施の形態では次のような冗長化を実施する。
【００８０】
図２１は、半導体記憶装置１００の冗長化手順の一例を示すフローチャートである。まず、ＮＡＮＤメモリ６への書き込みデータがホスト装置より転送されると、コントローラ１は、図９で示した手順により誤り訂正符号化処理（符号の計算）を開始するとともに（ステップＳ３１）、書き込みデータを多重化によりＮＡＮＤメモリ６へ書き込む（ステップＳ３２）。この多重化は、ＮＡＮＤメモリ６の複数の箇所へ同一の書き込みデータを書き込むことを意味し、ここでは２箇所に書き込むこととするが、３箇所以上に書き込むようにしてもよい。同一の書き込みデータを多重化により書き込む位置に制約はないが、同一の書き込みデータは、同時に故障する可能性が少ない位置にそれぞれ格納することが望ましい。
【００８１】
次に、コントローラ１は、誤り訂正符号が完成した（確定した誤り訂正符号が生成された）か否かを判断し（ステップＳ３３）、誤り訂正符号が完成した場合（ステップＳ３３  Ｙｅｓ）、当該誤り訂正符号をＮＡＮＤメモリ６へ書き込む（ステップＳ３４）。そして、誤り訂正符号をＮＡＮＤメモリ６へ格納したデータについて多重化したデータの他方のブロックを解放し（ステップＳ３５）、処理を終了する。
【００８２】
また、誤り訂正符号が完成していない場合（ステップＳ３３  Ｎｏ）、ステップＳ３１へ戻る。このように、本実施の形態では、初めは多重化によりデータを冗長化し、誤り訂正符号が完成してＮＡＮＤメモリ６への書き込みが終了すると誤り訂正符号による冗長化に切替える。なお、多重化および誤り訂正符号により保護されるデータは、ホスト装置から転送された書き込みデータだけでなく半導体記憶装置１００が用いる管理情報についても同様の冗長化を行ってもよい。管理情報を同様に冗長化する場合は、例えば、データの場合と同様に多重化する方法や、ＮＡＮＤメモリ６へ管理情報を書き込みかつ管理情報の更新した情報だけをＮＡＮＤメモリ６へ書き込むことで同じ情報を多重化して記録する方式などがある。
【００８３】
なお、本実施の形態では、誤り訂正符号の中間状態を生成する単位であるグループを、異なるチップから１つずつのブロックにより構成することにしたが、グループの構成はこれに限定されない。また、前述したようにグループ化されている必要もない。また、誤り訂正符号の訂正能力や符号化対象データの選択方法についても限定はない。例えば、符号化対象データをチップを跨って選択することでチップの故障に対応可能としてもよい。同様にブロック内の任意のページからデータを選択することでブロック故障するよりももっと小さい範囲であるページの故障に対応できるようにしてもよい。また、用いる誤り訂正符号の種類にも限定は無い。
【００８４】
また、以上の説明では、１チップあたりのブロックの総数と、確定した誤り訂正符号を生成するブロックの数と、の関係を明記していない。これについては、例えば、１チップあたりのブロックの総数が１６で、８つのブロックのデータで確定した誤り訂正符号を生成する場合等には、各チップのブロックを８つずつのブロックで構成される処理単位に分け、１つの処理単位の全てについて書き込みおよび確定した誤り訂正符号の書き込みが終了した場合には、次の処理単位のブロックへの書き込みを開始する等というように、すればよい。
【００８５】
以上のように、本実施の形態では、誤り訂正符号に対応する符号化対象データの一部を入力として用いて誤り訂正符号化処理を行った誤り訂正符号の中間状態を一時記憶バッファ４へ格納し、同一の誤り訂正符号の符号化対象データ内の後続するデータの誤り訂正処理では一時記憶バッファ４に格納されている誤り訂正符号の中間状態を初期値として用いて誤り訂正処理を実施するようにした。このため、１つの誤り訂正符号の訂正対象とするデータ量を増やした場合でも、ＮＡＮＤメモリ６のブロックの使用効率の低下を防ぐことができる。
【００８６】
（第２の実施の形態）
図２２は、第２の実施の形態にかかる半導体記憶装置１００の冗長化手順の一例を示すフローチャートである。本実施の形態の半導体記憶装置１００の構成は第１の実施の形態の半導体記憶装置１００と同様である。第１の実施の形態と同様の機能を有する構成要素は第１の実施の形態と同一の符号を付して重複する説明を省略する。
【００８７】
第１の実施の形態では、誤り訂正符号が完成するまでは多重化により冗長化し、誤り訂正符号が完成してＮＡＮＤメモリ６へ書き込まれた後は誤り訂正符号による冗長化に切替えることにより、不正電源遮断からデータを保護するようにした。
【００８８】
本実施の形態では、データの多重化を行わず、誤り訂正符号の中間状態を定期的にＮＡＮＤメモリ６へ記憶することにより、不正電源遮断からデータを保護する。図２２に示すように、まず、コントローラ１は、第１の実施の形態のステップＳ３１と同様に誤り訂正符号化処理（符号の計算）を開始し（ステップＳ３１）、誤り訂正符号が完成したか否かを判断する（ステップＳ３３）。
【００８９】
誤り訂正符号が完成していない場合（ステップＳ３３  Ｎｏ）、コントローラ１は、ＮＡＮＤメモリ６へ書き込んだデータ（対応する誤り訂正符号がＮＡＮＤメモリ６へ記憶されていないデータ）量が閾値以上であるか否かを判断する（ステップＳ３６）。書き込んだデータ量が閾値以上である場合（ステップＳ３６  Ｙｅｓ）、誤り訂正符号の中間状態をＮＡＮＤメモリ６へ書き込み、対応関係表を更新し（ステップＳ３７）、ステップＳ３３へ戻る。なお、ステップＳ３７の中間状態をＮＡＮＤメモリ６へ書き込む方法は、フラッシュコマンドを受け取った場合の書き込み方法と同様である。また、対応関係表には、ＮＡＮＤメモリ６へ書き込んだ中間状態ごとに、当該中間状態で保護できるデータを特定できる情報等を記録されているとする。
【００９０】
一方、ステップＳ３３で誤り訂正符号が完成した場合（ステップＳ３３  Ｙｅｓ）、完成した誤り訂正符号をＮＡＮＤメモリ６へ書き込み、対応関係表を更新し（ステップＳ３８）、処理を終了する。また、書き込んだデータ量が閾値でない場合（ステップＳ３６  Ｎｏ）、ステップＳ３３へ戻る。
【００９１】
なお、一旦ステップＳ３７を経由してからステップＳ３６を実施する場合は、書き込みデータとして、ＮＡＮＤメモリ６に書き込まれた誤り訂正符号の中間状態が記憶されたデータについては除外して閾値と比較する。
【００９２】
また、ステップＳ３６の判断に用いる閾値はどのような値としてもよいが、閾値を小さくすると書き込む符号（中間状態）の量が増え、閾値を大きくすると書き込む符号量は少なくなるが保護されないデータが増加することになる。従って、これらの要素を考慮してトレードオフにより適切に閾値を設定すればよい。
【００９３】
例えば１６ブロックのデータで確定した誤り訂正符号を生成し、４ブロック毎に計３回（１つの確定した誤り停止符号あたり）中間状態を一時記憶バッファ４へ格納する場合、３回の中間状態が全てＮＡＮＤメモリ６へ記憶されるように閾値を設定してもよいし、１回の中間状態のみが記憶されるように閾値を設定してもよい。
【００９４】
図２３は、不正電源遮断後の本実施の形態の復号化処理の概念を示す図である。図２３では、８ブロックのデータ４１０で確定した誤り訂正符号処理を実施する場合に、最初の４つのブロックを用いた符号（誤り訂正符号）の中間状態４１１がＮＡＮＤメモリ６へ書き込まれてから確定した誤り訂正符号がＮＡＮＤメモリ６へ書き込まれるまでの間に不正電源遮断が生じた例を示している。非保護と記載したデータは、ＮＡＮＤメモリ６にデータが記録されている状態であるが中間状態あるいは完成した符号がＮＡＮＤメモリ６へ記録されていないために誤り訂正符号で保護されないデータである。このような場合、非保護のデータの代わりに０データを用いて復号化処理を実施する。なお、非保護と記載した部分の一部がまだ情報を書き込んでいない未書き込み領域であっても同様の処理を行う。以上述べた以外の本実施の形態の動作は、第１の実施の形態と同様である。
【００９５】
以上のように、本実施の形態では、多重化を行わずに、フラッシュコマンドを受け取っていない場合にも誤り訂正符号の中間状態を例えば定期的にＮＡＮＤメモリ６へ格納することにより、データの冗長化を行うようにした。このため、多重化のためのＮＡＮＤメモリ６を用いずに済むため、第１の実施の形態に比べ、ＮＡＮＤメモリ６を効率的に使用することができる。
【００９６】
（第３の実施の形態）
図２４は、第３の実施の形態にかかる半導体記憶装置１００ａの構成例を示すブロック図である。本実施の形態の半導体記憶装置１００ａの構成は第１の実施の形態の半導体記憶装置１００と同様であるが、一時記憶バッファ４にＥＣＣ用領域４２を設ける代わりにＮＡＮＤメモリ６にＥＣＣ用領域６１を設けている。第１の実施の形態と同様の機能を有する構成要素は第１の実施の形態と同一の符号を付して重複する説明を省略する。
【００９７】
第１の実施の形態では、エンコーダ２１は、一時記憶バッファ４に格納されているデータを用いて誤り訂正符号を生成したが、本実施の形態では、エンコーダ２１は、第１の実施の形態と同様に一時記憶バッファ４のデータ用領域４１に格納されているデータを用いて誤り訂正符号化処理を実施する。第１の実施の形態では、確定した誤り訂正符号および誤り訂正符号の中間状態を一時記憶バッファ４に格納したが、本実施の形態では直接ＮＡＮＤメモリ６のＥＣＣ用領域６１へ書き込む。そして、誤り訂正符号の中間状態を復帰させて誤り訂正符号化処理を実施する場合には、ＮＡＮＤメモリ６のＥＣＣ用領域６１から誤り訂正符号の中間状態を読み出して処理に用いる。
【００９８】
図２５および２６は、本実施の形態の誤り訂正符号の中間状態の生成と記憶方法の一例を示す図である。図２５および図２６の例は、８つのブロックで確定した誤り訂正符号を生成し、第１の実施の形態の図５の例と同様に８つのブロックをグループ分け（図２５の例では、グループＡとグループＢの２つにグループ分け）し、グループ毎に誤り訂正符号化処理を実施する。
【００９９】
また、ブロック７−０とブロック７−４は、チャネルｃｈ０により制御されるＮＡＮＤメモリ６−０内のブロックであり、ブロック７−１とブロック７−５は、チャネルｃｈ１により制御されるＮＡＮＤメモリ６−１内のブロックであり、ブロック７−２とブロック７−６は、チャネルｃｈ２により制御されるＮＡＮＤメモリ６−２内のブロックであり、ブロック７−３とブロック７−７は、チャネルｃｈ３により制御されるＮＡＮＤメモリ６−３内のブロックであるとする。ブロック８−１はチャネルｃｈ４に制御されるＮＡＮＤメモリ６−４内のブロックであるとする。
【０１００】
図２５に示すように、エンコーダ２１は、グループＡの４つのブロックのページ＃０のデータ２２０に基づいて誤り訂正符号の中間状態を生成し、生成した中間状態を符号＃０としてＮＡＮＤメモリ６のＥＣＣ用領域６１へ書き込む。同様に、グループＡのページ＃１、ページ＃２、ページ＃３のデータに基づいて、誤り訂正符号の中間状態である符号＃１、符号＃２、符号＃３を書き込む。図２６は符号＃３の書き込み時を示しており、データ２２１に基づいて符号＃３を生成し、ＮＡＮＤメモリ６へ書き込む。符号管理部１１は、符号＃０，１，２，３の書き込み位置とそれぞれの対応するデータの書き込み位置との対応は、第１の実施の形態と同様に対応関係表により管理する。なお、図２５および図２６では、簡略化のため各ブロックはページ＃０〜ページ＃３で構成される例を示しているが、実際のブロック内のページ数はこれに限定されない。
【０１０１】
図２７および図２８は、本実施の形態の誤り訂正符号の中間状態の復帰と再生成の一例を示す図である。ブロック８−２はチャネルｃｈ４に制御されるＮＡＮＤメモリ６−４内のブロックであるとする。図２５および図２６に示したようにグループＡのブロックのデータに基づいて生成された誤り訂正符号の中間状態がＮＡＮＤメモリ６に格納されており、グループＡの全ブロックの書き込みが終了したとする。図２７に示すように、エンコーダ２１は、ＮＡＮＤメモリ６の符号＃０を読み出して復帰させ（符号化回路の各レジスタに設定し）た後に、グループＢのページ＃０のデータ２２２を用いて誤り訂正符号化処理を実施し符号＃０´（確定した誤り訂正符号）を生成してＮＡＮＤメモリ６へ書き込む。この際、符号＃０が無効になるため、符号管理部１１は、符号＃０´の書き込み位置と対応するデータの書き込み位置とを対応関係表に格納するとともに、対応関係表の符号＃０を無効化する。
【０１０２】
同様に、図２８に示すように、エンコーダ２１は、ＮＡＮＤメモリ６の符号＃３を読み出して復帰させた後に、グループＢのページ＃３のデータ２２３を用いて誤り訂正符号化処理を実施し符号＃３´（確定した誤り訂正符号）を生成してＮＡＮＤメモリ６へ書き込む。そして、符号管理部１１は、対応関係表を更新する。ブロック８−１に有効な符号が無くなった場合（格納されている全ての符号が無効となった）場合、ブロック８−１を解放する。
【０１０３】
なお、確定した誤り訂正符号を誤り訂正符号の中間状態とは別に管理してＮＡＮＤメモリ６の別領域に格納してもよいし、確定した誤り訂正符号と誤り訂正符号の中間状態とを区別せずに格納していくようにしてもよい。また、本実施の形態では、誤り訂正符号の中間状態をＮＡＮＤメモリ６へ書き込んでいるため、フラッシュコマンドを受け取った際の誤り訂正符号の中間状態のＮＡＮＤメモリ６への書き込み処理や冗長化のための定期的な誤り訂正符号の中間状態のＮＡＮＤメモリ６への書き込み処理を実施する必要はない。
【０１０４】
図２９は、本実施の形態のデータ書き込み時の動作手順の一例を示すフローチャートである。なお、ここでは、各チップのそれぞれＮ（Ｎは１以上の整数）個のブロックで、１つの処理単位を構成することとし、１つの処理単位内で確定した誤り訂正符号を書き込むまでの処理を実施した後に、次の処理単位の書き込みを実施することとする。図２９では、１つの処理単位内のデータ書き込みを示している。
【０１０５】
まず、書き込み処理を開始すると、符号管理部１１は、書き込み開始位置の属するグループ（グループ番号をｋとし、書き込み開始位置のグループ番号をｋ０とする）とページ（ページ番号をｉとし、書き込み開始位置のページをＰ０とする）とを把握する（ステップＳ４０）。そして、符号管理部１１は、ＮＡＮＤＩ／Ｆ５へデータをＮＡＮＤメモリ６のグループｋのページｉへ書き込むよう指示する（ステップＳ４１）。
【０１０６】
符号化制御部１２は、ｋがｋｍｉｎ（ｋの最小値、図２５の例ではグループＡのように誤り訂正符号の生成の際に中間状態を復帰させる必要のないグループの番号）の場合にはエンコーダ２１に符号化回路の初期化を指示し、ｋがｋｍｉｎでない場合には、対応する誤り訂正符号の中間状態をＮＡＮＤメモリ６から読み出して復帰させる（ステップＳ４２）。
【０１０７】
データの書き込み（一時記憶バッファ４からＮＡＮＤメモリ６への転送）が開始されると、符号化制御部１２は、エンコーダ２１に誤り訂正符号化処理の開始を指示し、エンコーダ２１は指示に基づいて、転送中の書き込みデータを用いて誤り訂正符号の中間状態（または確定した誤り訂正符号）を生成する（ステップＳ４３）。符号管理部１１は、生成された中間状態（または確定した誤り訂正符号）をＮＡＮＤメモリ６−４のＥＣＣ用領域６１へ書き込むようＮＡＮＤＩ／Ｆ５へ指示し（ステップＳ４４）、データの書き込み位置と中間状態の書き込み位置とに基づいて対応関係表を更新する（ステップＳ４５）。
【０１０８】
次に、符号管理部１１は、書き込みデータがまだ存在するか否かを判断し（ステップＳ４７）、存在しない場合（ステップＳ４７  Ｎｏ）には処理を終了する。書き込みデータが存在する場合には（ステップＳ４７  Ｙｅｓ）、ｉがｉｍａｘ（ブロック内の最大のページ番号）であるか否かを判断し（ステップＳ４８）、ｉ＝ｉｍａｘでない場合（ステップＳ４８  Ｎｏ）は、ｉをプラス１し（ステップＳ４９）、ステップＳ４１へ戻る。また、ｉ＝ｉｍａｘの場合（ステップＳ４８  Ｙｅｓ）、ｋがｋｍａｘ（最大のグループ番号）であるか否かを判断し（ステップＳ５０）、ｋ＝ｋｍａｘでない（ステップＳ５０  Ｎｏ）場合は、ｋをプラス１し、ｉ＝０として（ステップＳ５１）、ステップＳ４１へ戻る。
【０１０９】
また、ｋ＝ｋｍａｘの場合（ステップＳ５０  Ｙｅｓ）、当該処理単位内の書き込みを終了し、次の処理単位への書き込み処理へ移行する（ステップＳ５２）。
【０１１０】
なお、フラッシュコマンドの受信や不正電源遮断等が途中で生じない場合には、ＮＡＮＤメモリ６へ書き込まれたデータに対応する確定した誤り訂正符号がＮＡＮＤメモリ６に格納されることになる。この場合の復号化処理は従来の処理と同様である。また、フラッシュコマンドの受信や不正電源遮断等が途中で生じた場合の復号化処理は、第１の実施の形態のフラッシュコマンドを受信して中間状態が書き込まれた後の復号化処理、または第２の実施の形態で不正電源遮断が生じた後の復号化処理と同様である。以上述べた以外の本実施の形態の動作は第１の実施の形態と同様である。
【０１１１】
以上のように、本実施の形態では、エンコーダ２１は、生成した誤り訂正符号の中間状態を一時記憶バッファ４へ書き込まずに直接ＮＡＮＤメモリ６へ書き込むようにした。このため、第１の実施の形態に比べ、一時記憶バッファ４の要領を低減させることができ、コストを低下させることができる。
【０１１２】
（第４の実施の形態）
図３０は、ＳＳＤ１００を搭載したパーソナルコンピュータ１２００の一例を示す斜視図である。パーソナルコンピュータ１２００は、本体１２０１、及び表示ユニット１２０２を備えている。表示ユニット１２０２は、ディスプレイハウジング１２０３と、このディスプレイハウジング１２０３に収容された表示装置１２０４とを備えている。
【０１１３】
本体１２０１は、筐体１２０５と、キーボード１２０６と、ポインティングデバイスであるタッチパッド１２０７とを備えている。筐体１２０５内部には、メイン回路基板、ＯＤＤ（Optical  Disk  Device）ユニット、カードスロット、及びＳＳＤ１００等が収容されている。
【０１１４】
カードスロットは、筐体１２０５の周壁に隣接して設けられている。周壁には、カードスロットに対向する開口部１２０８が設けられている。ユーザは、この開口部１２０８を通じて筐体１２０５の外部から追加デバイスをカードスロットに挿抜することが可能である。
【０１１５】
ＳＳＤ１００は、従来のＨＤＤの置き換えとして、パーソナルコンピュータ１２００内部に実装された状態として使用してもよいし、パーソナルコンピュータ１２００が備えるカードスロットに挿入した状態で、追加デバイスとして使用してもよい。
【０１１６】
図３１は、ＳＳＤ１００を搭載したパーソナルコンピュータのシステム構成例を示している。パーソナルコンピュータ１２００は、ＣＰＵ１３０１、ノースブリッジ１３０２、主メモリ１３０３、ビデオコントローラ１３０４、オーディオコントローラ１３０５、サウスブリッジ１３０９、ＢＩＯＳ−ＲＯＭ１３１０、ＳＳＤ１００、ＯＤＤユニット１３１１、エンベデッドコントローラ／キーボードコントローラＩＣ（ＥＣ／ＫＢＣ）１３１２、及びネットワークコントローラ１３１３等を備えている。
【０１１７】
ＣＰＵ１３０１は、パーソナルコンピュータ１２００の動作を制御するために設けられたプロセッサであり、ＳＳＤ１００から主メモリ１３０３にロードされるオペレーティングシステム（ＯＳ）を実行する。更に、ＯＤＤユニット１３１１が、装填された光ディスクに対して読出し処理及び書込み処理の少なくとも１つの処理の実行を可能にした場合に、ＣＰＵ１３０１は、それらの処理の実行をする。
【０１１８】
また、ＣＰＵ１３０１は、ＢＩＯＳ−ＲＯＭ１３１０に格納されたシステムＢＩＯＳ（Basic  Input  Output  System）も実行する。尚、システムＢＩＯＳは、パーソナルコンピュータ１２００内のハードウェア制御のためのプログラムである。
【０１１９】
ノースブリッジ１３０２は、ＣＰＵ１３０１のローカルバスとサウスブリッジ１３０９との間を接続するブリッジデバイスである。ノースブリッジ１３０２には、主メモリ１３０３をアクセス制御するメモリコントローラも内蔵されている。
【０１２０】
また、ノースブリッジ１３０２は、ＡＧＰ（Accelerated  Graphics  Port）バス等を介してビデオコントローラ１３０４との通信、及びオーディオコントローラ１３０５との通信を実行する機能も有している。
【０１２１】
主メモリ１３０３は、プログラムやデータを一時的に記憶し、ＣＰＵ１３０１のワークエリアとして機能する。主メモリ１３０３は、例えばＲＡＭから構成される。
【０１２２】
ビデオコントローラ１３０４は、パーソナルコンピュータ１２００のディスプレイモニタとして使用される表示ユニット１２０２を制御するビデオ再生コントローラである。
【０１２３】
オーディオコントローラ１３０５は、パーソナルコンピュータ１２００のスピーカ１３０６を制御するオーディオ再生コントローラである。
【０１２４】
サウスブリッジ１３０９は、ＬＰＣ（Low  Pin  Count）バス１３１４上の各デバイス、及びＰＣＩ（Peripheral  Component  Interconnect）バス１３１５上の各デバイスを制御する。また、サウスブリッジ１３０９は、各種ソフトウェア及びデータを格納する記憶装置であるＳＳＤ１００を、ＡＴＡインタフェースを介して制御する。
【０１２５】
パーソナルコンピュータ１２００は、セクタ単位でＳＳＤ１００へのアクセスを行う。ＡＴＡインタフェースを介して、書き込みコマンド、読出しコマンド、キャッシュフラッシュコマンド等がＳＳＤ１００に入力される。
【０１２６】
また、サウスブリッジ１３０９は、ＢＩＯＳ−ＲＯＭ１３１０、及びＯＤＤユニット１３１１をアクセス制御するための機能も有している。
【０１２７】
ＥＣ／ＫＢＣ１３１２は、電力管理のためのエンベデッドコントローラと、キーボード（ＫＢ）１２０６及びタッチパッド１２０７を制御するためのキーボードコントローラとが集積された１チップマイクロコンピュータである。
【０１２８】
このＥＣ／ＫＢＣ１３１２は、ユーザによるパワーボタンの操作に応じてパーソナルコンピュータ１２００の電源をＯＮ／ＯＦＦする機能を有している。ネットワークコントローラ１３１３は、例えばインターネット等の外部ネットワークとの通信を実行する通信装置である。
【０１２９】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１３０】
１  コントローラ、２  ＥＣＣエンコーダ／デコーダ、４  一時記憶バッファ、５  ＮＡＮＤ  Ｉ／Ｆ、６  ＮＡＮＤメモリ、エンコーダ２１、デコーダ２２、１００  半導体記憶装置（ＳＳＤ）
【図１】
0005651457.tif 000002
【図２】
0005651457.tif 000003
【図３】
0005651457.tif 000004
【図４】
0005651457.tif 000005
【図５】
0005651457.tif 000006
【図６】
0005651457.tif 000007
【図７】
0005651457.tif 000008
【図８】
0005651457.tif 000009
【図９】
0005651457.tif 000010
【図１０】
0005651457.tif 000011
【図１１】
0005651457.tif 000012
【図１２】
0005651457.tif 000013
【図１３】
0005651457.tif 000014
【図１４】
0005651457.tif 000015
【図１５】
0005651457.tif 000016
【図１６】
0005651457.tif 000017
【図１７】
0005651457.tif 000018
【図１８】
0005651457.tif 000019
【図１９】
0005651457.tif 000020
【図２０】
0005651457.tif 000021
【図２１】
0005651457.tif 000022
【図２２】
0005651457.tif 000023
【図２３】
0005651457.tif 000024
【図２４】
0005651457.tif 000025
【図２５】
0005651457.tif 000026
【図２６】
0005651457.tif 000027
【図２７】
0005651457.tif 000028
【図２８】
0005651457.tif 000029
【図２９】
0005651457.tif 000030
【図３０】
0005651457.tif 000031
【図３１】
0005651457.tif 000032