(58)【調査した分野】(Int.Cl.,DB名)
前記符号化処理部は、前記誤り訂正単位データを3つ以上の分割データに分割し、前記誤り訂正符号化処理の対象となる分割データと同一の誤り訂正単位データを構成する分割データに基づいて生成された中間符号が前記一時記憶バッファへ書き込まれている場合には、同一の誤り訂正単位データを構成する分割データに基づいて生成された中間符号のうち最後に生成された中間符号を前記一時記憶バッファから読み出して前記誤り訂正符号化処理の初期値として用いる、
ことを特徴とする請求項1に記載の半導体記憶装置。
前記不揮発性半導体メモリから読み出した、前記確定誤り訂正符号と当該確定誤り訂正符に対応する誤り訂正単位データとに基づいて当該誤り訂正単位データの復号化処理を実施する復号化処理部、
をさらに備え、
前記制御部は、電源遮断に備えるよう指示するコマンドを受信した場合に、前記中間符号を前記不揮発性半導体メモリへ書き込むよう前記メモリインタフェースを制御し、前記中間符号の前記不揮発性半導体メモリ内の記憶位置と当該中間符号に対応する書き込みデータの記憶位置との対応を保持し、書き込みデータの復号化処理時に前記中間符号が前記不揮発性半導体メモリに記憶されている場合、当該中間符号を読み出すよう前記メモリインタフェースを制御し、
前記復号化処理部は、前記不揮発性半導体メモリから読み出した、前記中間符号と当該中間符号に対応する前記書き込みデータとに基づいて復号化処理を実施し、
ことを特徴とする請求項1に記載の半導体記憶装置。
前記制御部は、同一の誤り訂正単位データを構成する分割データに基づいて生成された複数の中間符号が前記不揮発性半導体メモリに記憶される場合に、前記複数の中間符号のうち最後に記憶された中間符号を有効とし、書き込みデータの読み出し時に前記中間符号を前記不揮発性半導体メモリから読み出す場合、有効な前記中間符号を読み出すよう前記メモリインタフェースを制御する、
ことを特徴とする請求項3に記載の半導体記憶装置。
前記制御部は、対応する前記確定誤り訂正符号または前記中間符号が前記不揮発性半導体メモリへ書き込まれていない前記不揮発性半導体メモリへ書き込み済みの前記書き込みデータのデータ量が、所定の閾値以上となった場合に、前記中間符号を前記不揮発性半導体メモリへ書き込むよう前記メモリインタフェースを制御する、
ことを特徴とする請求項1〜7のいずれか1つに記載の半導体記憶装置。
前記確定誤り訂正符号の符号化対象データを、互いに異なるブロックの同一のページのデータで構成する、ことを特徴とする請求項13または14に記載の半導体記憶装置。
前記分割データ単位で前記不揮発性半導体メモリへの書き込みを制御し、同一ブロックに属するデータで構成される前記分割データをページ順に前記不揮発性半導体メモリへ書き込み、当該ブロック内の全ページの書き込みが終了した後に、当該ブロック以外のデータで構成される前記分割データに対応するブロックへの書き込みを実施する、
ことを特徴とする請求項15に記載の半導体記憶装置。
前記確定誤り訂正符号の符号化対象データを、互いに異なるブロックに属する単一でないページのデータで構成する、ことを特徴とする請求項13または14に記載の半導体記憶装置。
前記確定誤り訂正符号の符号化対象データを、誤りに対して強いページと、誤りに対して弱いページと、を組み合わせて構成する、ことを特徴とする請求項17に記載の半導体記憶装置。
【発明を実施するための形態】
【0008】
誤り訂正符号を使って誤りを訂正する場合、どのような誤り訂正符号化処理を実施するかを検討する際には、訂正能力だけではなく訂正能力によって決まる冗長符号(誤り訂正符号)量も重要な要素となってくる。特にストレージの分野では冗長情報量の増加はそのままコスト増加につながるためもっとも重要な要素である。
【0009】
一般に、BCH符号などの一般的に使用される誤り訂正符号では、半導体メモリ中の冗長符号とデータの総量を固定した場合、誤り訂正単位を大きくした方が(データ+符号の長さを大きくした方が)誤りが偏った場合でも訂正できる可能性が上がるため誤り訂正能力を高くすることが可能である。逆に誤り訂正能力を固定した場合、誤り訂正単位を大きくすることで冗長符号の量を削減できるため、半導体メモリのコスト増加を防ぎつつ訂正能力を維持できる可能性がある。
【0010】
一方、ブロック単位やメモリチップ単位での故障に対応するためには、複数のブロックまたは複数のメモリチップへ分散して記録するデータから誤り訂正符号を計算することが有効である。不揮発性の半導体メモリとしてNANDメモリを使用する場合、NANDメモリではページ順に書き込みを行うため、複数のブロックまたは複数のメモリチップへ分散して記録するデータから符号長が大きな誤り訂正符号を計算すると未書き込みの領域を有するブロック等が多数存在することになる。このため、半導体メモリの使用効率が下がってしまうという問題がある。
【0011】
以下に添付図面を参照して、実施形態にかかる半導体記憶装置を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【0012】
(第1の実施の形態)
図1は、第1の実施の形態にかかる半導体記憶装置100の構成例を示すブロック図である。本実施の形態の半導体記憶装置(SSD(Solid State Drive))100は、不揮発にデータを記憶する半導体メモリを備えている。本実施の形態では、半導体記憶装置100をSSDとした例について説明するが、本実施の形態の適用対象はSSDに限定しない。例えば、不揮発にデータを記憶する半導体メモリおよびコントローラを搭載したメモリカード等の補助記憶装置に対しても、本実施の形態を適用することが可能である。
【0013】
また、各実施形態における各機能ブロックは、ハードウェア、及びソフトウェアのいずれか、又は両者の組み合わせとして実現することができる。このため、各機能ブロックは、これらのいずれでもあることが明確となるように、概してそれらの機能の観点から以下に説明される。このような機能が、ハードウェアとして実現されるか、又はソフトウェアとして実現されるかは、具体的な実施態様、或いはシステム全体に課される設計制約に依存する。当業者は、具体的な実施態様ごとに、様々な方法でこれらの機能を実現し得るが、そのような実現を決定することは本発明の範疇に含まれる。
【0014】
半導体記憶装置100は、パーソナルコンピュータなどのホスト装置とホストインタフェース(ホストI/F)3で接続され、ホスト装置の外部記憶装置として機能する。半導体記憶装置100は、コントローラ(制御部)1と、ECC(Error Check and Correct)エンコーダ/デコーダ2と、ホストI/F3と、一時記憶バッファ4と、NANDインタフェース(NANDI/F)5と、NANDメモリ6と、を備える。
【0015】
ホストI/F3は、例えばATA(Advanced Technology Attachment)規格の通信インタフェースを有し、コントローラ1の制御にしたがって半導体記憶装置100とホスト装置との通信を制御する。ホストI/F3は、ホスト装置から送信されたコマンドを受信し、当該コマンドによって論理アドレス(LBA:Logical Block Addressing)が指定されたデータの書き込みが要求されている場合、当該コマンド(ライトコマンド)をコントローラ1に送る。また、ホスト装置からNANDメモリ6へ記憶されているデータの読み出しを要求するコマンドを受信した場合には、当該コマンド(リードコマンド)をコントローラ1へ送る。
【0016】
コントローラ1は、半導体記憶装置1とホスト装置とのデータ転送制御、NANDメモリ6への書き込み制御、NANDメモリ6からの読み出し制御等の各種制御を実施する。コントローラ1は、NANDメモリ6への書き込みおよび読み出しを制御し、NANDメモリ6へ書き込まれた誤り訂正符号とデータとの対応を管理する符号管理部11と、NANDメモリ6へ書き込むデータに対する誤り訂正符号化処理、およびNANDメモリ6からの読み出しデータに対する復号化処理を制御する符号化制御部12と、を備える。また、コントローラ1は、ホスト装置が指定する論理アドレスとしての論理アドレス(LBA)とNANDメモリ6上でのデータ記憶位置と、NANDメモリ6に書き込まれたデータに対応する誤り訂正符号のNANDメモリ6上での記憶位置との対応関係などを管理する。
【0017】
一時記憶バッファ4は、コントローラ1がデータ転送のための転送データを一時格納するために使用されるデータ用領域41と、ECCエンコーダ/デコーダ2が生成した誤り訂正符号を格納するECC用領域と、で構成される。また、一時記憶バッファ4は、例えば、DRAM(Dynamic Random Access Memory)などの揮発性メモリで構成される。
【0018】
ECC(Error Check and Correct)エンコーダ/デコーダ2は、エンコーダ(符号化処理部)21およびデコーダ(復号化処理部)22で構成される。エンコーダ21は、一時記憶バッファ4のデータ用領域41に格納されているNANDメモリ6への書き込みデータに対して誤り訂正符号化処理を実施する。デコーダ22はNANDメモリ6へ記憶されているデータに対して当該データに対応する誤り訂正符号に基づいて復号化処理を実施する。
【0019】
NANDI/F5は、NANDメモリ6−0〜6−4と一時記憶バッファ4との間のデータ転送制御を実行するメモリインタフェースであり、読み書きを並行して実施できるよう4つのチャネル(チャネルch0〜ch−4)を有している。チャネルch0〜ch4は、それぞれ対応するNANDメモリ6−0〜6−4を制御する。
【0020】
NANDメモリ6は、半導体メモリであり、NANDメモリ6−0〜6−4で構成される。NANDメモリ6−0〜6−4のうち、NANDメモリ6−0〜6−3は、ホスト装置から転送されたデータが書き込まれるデータ記憶用のメモリであり、NANDメモリ6−4は、ECCエンコーダ/デコーダ2が生成した誤り訂正符号が書き込まれる符号用のメモリである。なお、本実施の形態では、符号用としてデータ用とは別にチャネルおよびメモリ領域(NANDメモリ6−4)を設けるようにしたが、符号用に専用のチャネルおよびメモリ領域を設けず、NANDメモリ6のデータ記憶用の領域に誤り訂正符号を格納するようにしてもよい。
【0021】
ホスト装置から送信されてきたデータは、コントローラ1の制御の基に、ホストI/F3を経由して一時記憶バッファ4のデータ用領域41に一旦格納され、その後、一時記憶バッファ4から読み出されてNANDI/F5を経由してNANDメモリ6に書き込まれる。NANDメモリ6から読み出されたデータは、NANDI/F5を経由して一時記憶バッファ4のデータ用領域41に一旦格納され、その後、一時記憶バッファ4から読み出されてホストI/F3を経由してホスト装置に転送される。
【0022】
NANDメモリ6は、複数のメモリセルがマトリクス状に配列されたメモリセルアレイを有する。個々のメモリセルは、多値記憶が可能なメモリセルであってもよいし各セルが1つの値を記憶可能なメモリセルであってもよい。NANDメモリ6−0〜6−4はそれぞれ1つのメモリチップによって構成されているとする。また、各メモリチップ(NANDメモリ6−0〜6−4)は、データ消去の単位であるブロックをそれぞれ1つ以上備える。1ブロックは、1つ以上のページで構成される。1ページは、複数のメモリセルで構成され、NANDメモリ6の書き込みおよび読み出しはページ単位で行われる。また、NANDメモリ6への書き込みはページの昇順に書き込みが行なわれる。
【0023】
つぎに、本実施の形態の誤り訂正符号化処理について説明する。
図2および
図3は、符号化対象データと誤り訂正符号との対応の一例を示す図である。
図2および
図3では、NANDメモリ6の各ブロックの1ページ分ずつのデータを符号化対象データとして誤り訂正符号を生成する例を示している。また、
図2および
図3では、データ:符号を4:1の比率とした例を示している。
図2および
図3に示したブロック7−0は、チャネルch0により読み書きが行われるNANDメモリ6−0内のブロックであり、同様にブロック7−1,7−2,7−3は、それぞれチャネルch1,ch2,ch3により読み書きが行われるNANDメモリ6−1,6−2,6−3内のブロックである。ブロック8は、チャネルch4により読み書きが行われる符号用のメモリであるNANDメモリ6−4内のブロックである。
【0024】
4つのブロックのうち1ページずつのデータを用いて1つの誤り訂正符号を生成する場合、
図2に示したように、例えばブロック7−0〜7−3のページ#0に書き込まれるデータを符号化対象データ201とし、ECCエンコーダ/デコーダ2のエンコーダ21は、符号化対象データ201に基づいて誤り訂正符号を生成する。そして、生成された誤り訂正符号は、符号(誤り訂正符号)301としてブロック8に書き込まれる。同様に、ブロック7−0〜7−3のページ#1に書き込まれる符号化対象データ202に基づいて生成された誤り訂正符号は、符号302としてブロック8に書き込まれる。
図2は、ページ#0については、NANDメモリ6への書き込みが終了し、ページ#1については、NANDメモリ6への書き込みが終了していない状態を示している。
【0025】
図2に示した符号化対象データの選択方法(各ブロックから1ページずつデータを選択する方法)によりデータを選択し、1ページ分のデータの訂正が可能な誤り訂正符号を用いれば、ブロックの故障が生じた場合にもデータの訂正が可能である。具体的には、1ページ分のデータの訂正が可能な誤り訂正符号を用いれば、4ブロックのうちのいずれかのブロックが故障した場合でも、ページごとに生成された誤り訂正符号を用いて、故障したブロックのデータをページ毎に復元することができる。なお、1ページ分のデータが訂正可能な誤り訂正符号は、1ページ分のデータの訂正が可能な誤り訂正符号を組み合わせて1ブロック分のデータを復元する上記の方法と同様に、1ページ分のデータよりも小さいデータの訂正が可能な誤り訂正符号を組み合わせて1ページ分のデータを復元する方法で代替してもよい。
【0026】
図3は、
図2と同様にデータ:符号を4:1の比率としているが、
図2とは異なり1つの誤り訂正符号に対応する符号化対象データ203を一部のブロック(ブロック7−2)から重複して選択し、対応する符号303を生成する例を示している。この場合、ブロック7−2が故障した場合には2ページ分の訂正が必要となり、1ページ分のデータが訂正可能な誤り訂正能力を有していてもデータの訂正ができず、1ブロック分のデータを修復できないことになる。
【0027】
以上のことから、データと符号の比率が同じく誤り訂正能力が同じ場合に、ブロック単位の故障が生じた場合に対応するためには、
図2の例のように、符号化対象データを各ブロックから訂正可能なページ数以下ずつ選択することが望ましい。例えば、2ページ訂正可能な場合には、
図3のように、符号化対象データとして1つのブロックから2ページ分のデータを選択してもよい。
【0028】
図4は、データ:符号が8:1の場合の符号化対象データと誤り訂正符号との対応の一例を示す図である。
図4の例では、符号304に対応する符号化対象データ204として
図2の例と同様に各ブロックから1ページずつデータを選択している。ここでは、データ用のチャネルは4つであるため、データ:符号が8:1の場合は、符号化対象データ204として各チャネルに対応する2つのブロックからそれぞれ1つずつデータが選択されることになる。例えば、ブロック7−0とブロック7−4は、チャネルch0により制御され、ブロック7−1とブロック7−5は、チャネルch1により制御されブロック7−2とブロック7−6は、チャネルch2により制御されブロック7−3とブロック7−7は、チャネルch3により制御されるとする。チャネルとブロックの対応はこれに限定されないが、並行して読み書きを行う効率を考慮すると、1つの誤り訂正符号に対応する符号化対象データは、特定のチャネルに集中しないように選択することが望ましい。
【0029】
以上、NANDメモリ6に格納される符号化対象データと誤り訂正符号と対応例について1ブロック分のデータを修復する場合を例にとって説明したが、データと符号の比率及び訂正能力、対応する故障モードは上述した例に限定されない。
【0030】
次に、本実施の形態の誤り訂正符号の中間状態(中間符号)の記録について説明する。
図5は、本実施の形態の誤り訂正符号の中間状態の記録方法の一例を示す図である。
図5は、データ:符号が8:1の場合の例を示している。
図5の例では、
図5の下段に示すように、NANDメモリ6へは、
図4の例と同様に、8つのブロックのデータである符号化対象データ205に基づいて生成した誤り訂正符号である符号305がブロック8へ格納される。
【0031】
一方、
図5の例では、ECCエンコーダ/デコーダ2のエンコーダ21は、ブロック7−0〜7−7に記憶されるデータ(ページデータ)に基づいてNANDメモリ6へ格納される誤り訂正符号を生成する際に、まず、
図5の上段に示すようにブロック7−0〜7−3に記憶されるページデータ9−0〜9−3に基づいた誤り訂正符号の生成処理を実施する。そして、ページデータ9−0〜9−3に基づいた誤り訂正符号の生成処理結果を誤り訂正符号の中間状態として一時記憶バッファ4のECC用領域42へ格納する。そして、エンコーダ21は、ブロック7−0〜7−3に記憶される次のページのページデータに基づく誤り訂正符号の生成処理結果を誤り訂正符号の中間状態として一時記憶バッファ4のECC用領域42へ格納する。
【0032】
ブロック7−0〜7−3をグループAとし、ブロック7−0〜7−3をグループBとして、エンコーダ21は、グループAの各ブロックの全てのページの誤り訂正符号の中間状態をECC用領域42へ格納した後に、グループBのブロック7−4〜7−7に記憶されるページデータ9−4〜9−7に基づく誤り訂正符号の生成処理を開始する。グループBのブロック7−4〜7−7に記憶されるページデータ9−4〜9−7の処理の際には、ECC用領域42に格納されている同一ページに対応するグループAの中間状態を読み出し、中間状態とページデータ9−4〜9−7とに基づいてNANDメモリ6へ格納する誤り訂正符号(すなわち完成した誤り訂正符号)を生成する。このように、グループAの誤り訂正符号の中間状態を初期値としてグループBのデータを入力して誤り訂正符号化処理を実施することにより、全体としてグループAとグループBのデータの両方に対応する誤り訂正不符号を生成することになる。そして、同様に順次次のページについて、中間状態とグループBの各ブロックのページデータとに基づいて誤り訂正符号を生成していく。
【0033】
本実施の形態では、上述のように誤り訂正符号の処理途中の中間状態を一時記憶バッファ4へ格納し(退避させ)て、残りのブロックを用いた誤り訂正符号の生成処理時に退避させた中間状態を読み出す(復帰させる)ことにより、
図5に示すようにグループAのブロックを全て書き込んだ後に、グループBの書き込みを行うことができる。NANDメモリは、ページ順に書き込みをする必要があるデバイスである。複数のブロックに跨ったデータを用いて誤り訂正符号を生成する場合、中間状態を格納しない従来の方法では誤り訂正符号の符号化対象データをページ順に格納していくことになるため、ブロックの使用効率が低下してしまう。これに対し、本実施の形態では、グループAのブロックを全て書き込んだ後に、グループBの書き込みを行うことができるため、中間状態を格納しない従来の方法に比べブロックの使用効率を向上させることができる。
【0034】
なお、
図5では、1つの確定した誤り訂正符号に対して中間状態が一度(一時記憶バッファ4へ)格納される例を示しているが、例えば12個のブロックのデータで確定した誤り訂正符号を生成する場合等には、複数回中間状態を格納するようにしてもよい。例えば、ブロック7−0〜7−11のページ#0のデータで1つの確定した誤り訂正符号を生成する場合、4つのブロックずつA、B、Cの3つのグループにグループ化しておき、グループCの誤り訂正符号を生成する場合には、
図5の例でグループBまでの誤り訂正符号を中間状態として復帰させ、この中間状態とグループCのデータとで確定した誤り訂正符号を生成すればよい。なお、ここでは、説明を簡単にするためグループ化しているが、グループ化は必須ではない。確定した誤り訂正符号の生成処理過程の中間状態として、確定した誤り訂正符号の符号化対象データの一部のデータを入力した誤り訂正符号化処理結果の格納および復帰を行うようにすれば、どのような単位で中間状態を生成してもよい。例えば、
図5の例でページごとに中間状態の入力となったデータの数を異なるようにしてもよい。また、誤り訂正符号の符号化対象データの選択方法にも制約はなく、1ブロックのデータだけで誤り訂正符号を生成してもよいし、5ブロックのデータで誤り訂正符号を生成してもよい。
【0035】
図6は、本実施の形態の効果を説明するための図である。
図6は、符号の量を減らすために符号長(データ+符号)を長くした場合の例を示しており、具体的には、
図6では、一例として、データ:符号を100:1(符号+データに対する符号の比率は約1%)とした例を示している。ブロック7−0〜7−99は、NANDメモリ6内のブロックであり、7−0〜7−3がch0〜ch3により制御され、7−4〜7−7がch0〜ch3により制御され、というように4つのブロックを1つのグループとしてグループ内では4つのチャネルによる同時書き込みが可能とする。
【0036】
図6の左側は中間状態の退避・復帰がない場合を示し、1つの誤り訂正符号がNANDメモリ6へ格納され、次の誤り訂正符号がNANDメモリ6へ格納するまでのNANDメモリ6への書き込みの状態を示している。中間状態の退避・復帰がない場合、ブロック7−0〜7−99の各々1ページ分ずつのデータに対応する誤り訂正符号を生成した後に、次のページの書き込みおよび誤り訂正符号化処理が実施される。したがって、100個のブロックが未書込み領域を有する状態が長く継続し、ブロックの使用効率が悪い。
【0037】
図6の右側は、中間状態の退避・復帰がある場合を示し、
図6の右側と同様に1つの誤り訂正符号がNANDメモリ6へ格納され、次の誤り訂正符号がNANDメモリ6へ格納するまでのNANDメモリ6への書き込みの状態を示している。この場合、
図5で説明したようにグループ順にグループ内のブロックの全ページの書き込みが行われていくため、未書き込みの領域があるのは最後のグループの4つのブロックだけとなる。このように、中間状態の退避・復帰がある場合には、ブロックの使用効率が向上する。なお、同様の効果は、一時記憶バッファ4の容量を大きくすることによっても実現可能であるが、
図6の例のように符号化対象データのデータ長を大きくする場合、非常に大きな容量が必要となりコスト増となるため好ましくない。例えば、
図6の例では、一時記憶バッファ4の容量が100ブロック分以上必要となる。
【0038】
次に、本実施の形態の誤り訂正符号化処理とデータ書き込みの手順について説明する。
図7は、本実施の形態の誤り訂正符号化処理とデータ書き込みの手順の一例を示す図である。
図7では、各ブロックは128ページで構成されるとしている。
【0039】
図7の最上段は、エンコーダ21の動作を示している。エンコーダ21は、まず、ブロック7−0〜7−3のページ#0のデータに基づいて、符号#0を生成するための誤り訂正符号処理(符号#0の計算)を実施し、その時点での処理結果を符号#0の中間状態として一時記憶バッファ4のECC格納領域42へ退避(格納)する。次に、ブロック7−0〜7−3のページ#1のデータに基づいて、符号#1を生成するための誤り訂正符号処理(符号#1の計算)を実施し、その時点での処理結果を符号#1の中間状態として一時記憶バッファ4のECC用領域42へ退避する。
【0040】
以降同様に、ページの昇順に処理を実施し、ブロック7−0〜7−3のページ#127のデータに基づいて、符号#127の中間状態の退避を実施した後、符号#0の中間状態を一時記憶バッファ4のECC格納領域42から読出し、読み出した中間状態とブロック7−4〜7−7のページ#0のデータとに基づいて確定した符号#0を生成して、確定した符号#0を一時記憶バッファ4のECC格納領域42へ退避する。そして、同様にページの昇順に読み出した中間状態とブロック7−4〜7−7のデータとに基づいて確定した誤り訂正符号を生成してECC格納領域42へ退避する。
【0041】
図7の中段には、NANDI/F5の動作をチャネルごとに示している。ch0では、まず、エンコーダ7−0が符号#0を生成するために用いるブロック7−0のデータをNANDメモリ6−0のブロック7−0のページ#0へ書き込む。次に、同様に符号#1を生成するために用いるブロック7−0のデータをブロック7−0のページ#1へ書き込む。以降、同様にブロック7−0についてページの昇順に書き込みを実施し、ページ#127までの書き込みを実施する。そして、ブロック7−0のページ#127までの書き込みが終了した後に、同様にブロック7−4のページ#0への書き込みを実施し、以降同様にページの昇順に書き込みを実施する。
【0042】
ch1〜ch3も、ch0と同様にブロック7−1〜7−3についてページの昇順に書き込みを行った後、ブロック7−5〜7−7についてページの昇順に書き込みを行う。
図7の再下段は、NANDメモリ6の各ブロックに格納されたデータと一時記憶バッファ4に格納された符号の関係を示している。
【0043】
なお、一時記憶バッファ4のECC格納領域42へ退避した確定した誤り訂正符号は、コントローラ1の指示によりNANDI/F5経由でNANDメモリ6−4へ記憶される。確定した誤り訂正符号の書き込みのタイミングに制約はないが、例えば対応する符号化対象データのNANDメモリ6への書き込みの終了時等に書き込みを実施する。
【0044】
図7では、エンコーダ21の処理対象となるデータをNANDI/F5がエンコーダ21の処理に同期して書き込むようにしているが、
図7に示した手順は一例であり、エンコーダ21の動作タイミングとNANDI/F5動作タイミングとの関係はこれに限定されない。ただし、
図7のように、エンコーダ21が処理対象とするエンコーダ21の処理対象となるデータをNANDI/F5がエンコーダ21の処理に同期しないで書き込む場合には、
図7の例より一時記憶バッファ4のデータ用領域41の必要容量が
図7のように同期する場合より増加する。
【0045】
以上の例では、1つの確定した誤り訂正符号の符号化対象データとして各ブロックの同一ページのデータを選択するようにしたが、符号化対象データの選択方法はこれに限定されない。NANDメモリ6では、誤りに対して強い(誤りが生じにくい)位置と誤りに対して弱い(誤りが生じやすい)位置がある。例えば、多値記憶が可能なメモリセルの場合、上位ページの方が下位ページより誤りが生じやすい。また、ブロック内での位置やチップ内でのブロックの位置によっても誤りに対する強さが異なるデバイスもある。このような場合、誤りが弱い位置のデータのみを符号化対象データとして誤り訂正符号を生成すると、誤りが集中して訂正できなくなる可能性がある。誤りに対して強い位置と弱い位置を組み合わせて1つの誤り訂正符号を生成することで、誤りを訂正できる可能性を向上させることができる。
【0046】
図8は、下位ページと上位ページを組み合わせて符号化対象データとする例を示す図である。
図8の各ブロック内の強い、弱いは、誤りに対する強さを示している。このような場合に、符号化対象データとして、ブロック7−0〜7−3とブロック7−4〜7−7とで強さの異なるページを選択することで、誤りを訂正できる可能性を向上させることができる。
【0047】
次に、本実施の形態の誤り訂正処理について説明する。
図9は、本実施の形態の誤り訂正処理手順の一例を示すフローチャートである。
図9に示すように、符号化制御部12は、一時記憶バッファ4からNANDメモリ6への転送を行う際等に、符号化処理を開始し、まず、符号化の対象となるデータを書き込むNANDメモリ6の領域が、符号の確定していない状態であるか否かを判断する(ステップS11)。
【0048】
なお、符号化制御部12は、確定した符号を生成する符号化対象データが書き込まれるNANDメモリ上の領域(例えば、
図5の場合ブロック7−0〜7−7のページ#0等)を把握しており、また、1つの確定した誤り訂正符号に対応するNANDメモリ上のデータ領域毎に、誤り訂正符号の状態(符号化処理を実施していないか、誤り訂正符号の中間状態が一時記憶バッファ4に格納済みであるか、確定した誤り訂正符号が一時記憶バッファ4に格納済みである(符号が確定している)か)を把握しているとする。なお、符号化処理を実施していない場合(NANDメモリ6への最初の書き込み時等)も、符号が確定しているとして扱うこととする。
【0049】
符号が確定していると判断した場合(ステップS11 No)、符号化制御部12は、エンコーダ21に対して、処理対象のデータ(一時記憶バッファ4のデータ用領域41に格納されているNANDメモリ6への書き込みデータのうちのどのデータを符号化の処理対象とするか)を指示するとともに誤り訂正符号の初期化(誤り訂正符号を全て0にする)を指示し、エンコーダ21は指示に基づいて誤り訂正符号の初期化を実施する(ステップS12)。なお、ここでは、この際、処理対象のデータとして
図5で示したようなグループ単位でデータを指示する(例えば、
図5の例では、ブロック7−0〜7−3のそれぞれのページ#0に書き込むデータや、ブロック7−4〜7−7のそれぞれのページ#0に書き込むデータ等)。
【0050】
符号が確定していないと判断した場合(ステップS11 Yes)、符号化制御部12は、エンコーダ21に処理対象のデータを指示するとともに当該データに対応する誤り訂正符号の中間状態の復帰(一時記憶バッファ4からの読み出し)を指示し、エンコーダ21は指示に基づいて誤り訂正符号の中間状態を復帰させる(ステップS13)。
【0051】
ステップS12またはステップS13の後、エンコーダ21は、誤り訂正符号処理を実施し、処理を終了すると処理終了を符号化制御部12へ通知する(ステップS14)。符号化制御部12は、処理終了を通知されると、エンコーダ21に対して処理結果である誤り訂正符号(誤り訂正符号の中間状態、または確定した誤り訂正符号)を一時記憶バッファ4へ退避するよう指示し、エンコーダ21は指示に基づいて誤り訂正符号を退避させる(ステップS15)。
【0052】
次に、符号化制御部12は、他に符号化対象のデータが存在するか否かを判断し(ステップS16)、存在しない場合(ステップS16 No)には処理を終了する。他に符号化対象のデータが存在する場合(ステップS16 Yes)、ステップS11へ戻る。
【0053】
図10は、エンコーダ21を構成する符号化回路の構成例を示す図である。
図10は、誤り訂正符号としてBCH符号を用い、生成多項式F(x)として以下の式(1)に示す式を用いる場合の符号化回路の一例を示している。
F(X)=X
8+X
7+X
6+X
4+1 …(1)
【0054】
図10の例では、符号化回路は8つのシフトレジスタ200と4つのXOR(排他的論理和回路)201とで構成されている。誤り訂正符号の初期化の際には、各シフトレジスタ200は全て0に設定される。この符号化回路には符号化対象データとして各ブロックの各ページのデータが順次入力され、1グループの全データが入力された段階の各シフトレジスタ200の値を誤り訂正符号の中間状態として退避させる。例えば、
図5の例では、ブロック7−0のページ#0のデータ、ブロック7−1のページ#0のデータ、ブロック7−2のページ#0のデータ、ブロック7−3のページ#0のデータの順に入力し、その後の各シフトレジスタ200の値を誤り訂正符号の中間状態として一時記憶バッファ4へ退避させる。
【0055】
そして、中間状態を復帰させて処理を行う場合は、各シフトレジスタ200へ一時記憶バッファ4から読み出した誤り訂正符号の中間状態を設定した後に、処理対象データを順次入力する。例えば、
図5の例では、誤り訂正符号の中間状態を各シフトレジスタ200へ設定した後に、ブロック7−4のページ#0のデータ、ブロック7−5のページ#0のデータ、ブロック7−6のページ#0のデータ、ブロック7−7のページ#0のデータの順に入力し、その後の各シフトレジスタ200の値を確定した誤り訂正符号として一時記憶バッファ4へ退避させる。
【0056】
なお、
図10に示した符号化回路の構成は一例であり符号化回路の構成はこれに限定されず、適用する誤り訂正符号化方式に応じてどのような回路構成としてもよい。
【0057】
次に、ホスト装置から電源切断の指示(フラッシュコマンド等)を受けた場合の半導体記憶装置100の動作について説明する。ホスト装置は、自身が電源切断を行う場合や半導体記憶装置100との接続を解除する時等に半導体記憶装置100に対してフラッシュやアイドルやスリープなどのコマンドを発行することにより、処理を終了して状態を確定する(ホスト装置から受領済みでNANDメモリ6へ書き込まれていないデータを書き込む等)よう指示する。以下の説明では、フラッシュコマンドが発行された場合について説明するが、アイドルやスリープなどのコマンドが発行された場合も同様である。
【0058】
符号長を長くした(確定した誤り訂正符号の符号化対象となるデータの数を多くした)場合、確定した誤り訂正符号がNANDメモリ6へ格納されるまでに時間がかかる。このため、フラッシュコマンドを受け取って状態を確定する際に確定した誤り訂正符号が格納されていないデータ(誤り訂正符号で保護されていないデータ)が生じる可能性がある。一方、誤り訂正符号の中間状態は一時記憶バッファ4に格納されているが、一時記憶バッファ4に格納されているデータは電源切断により消えてしまう。従って、誤り訂正符号により保護されないデータをなくすために、本実施の形態では、フラッシュコマンドを受け取った場合に誤り訂正符号の中間状態をNANDメモリ6へ格納する。
【0059】
半導体記憶装置100は、フラッシュコマンドを受け取ると、通常処理の手順を停止して、フラッシュ時の処理に移行する。フラッシュ時の処理では、一時記憶バッファ4に格納されているNANDメモリ6へ未書き込みの書き込みデータをNANDメモリ6へ書き込むが、本実施の形態では、誤り訂正符号の中間状態についてもNANDメモリ6へ書き込む。
【0060】
図11は、誤り訂正符号と符号化対象データとのNANDメモリ6上の記憶位置の対応を示す対応関係表の一例を示す図である。対応表には、
図11に示すように、符号化対象データの位置と対応する誤り訂正符号の位置との対応が格納される。例えば、ブロック7−0〜7−(N−1)(N=符号化対象データを構成するブロックの数)のあるページ(例えばページ#0)に書き込まれた符号化対象データ206のNANDメモリ6上の位置と符号化対象データ206に基づいて生成した確定した誤り訂正符号306のNANDメモリ6上の位置との対応が格納される。
【0061】
なお、コントローラ1は、ホスト装置から指定される論理アドレス(LBA)とNANDメモリ上の記憶位置との対応関係についても管理しているが、論理アドレス(LBA)とNANDメモリ6上の記憶位置との対応は、上述の対応関係表と別に管理してもよいし、統合して1つの対応関係表として管理してもよい。統合する場合には、論理アドレスと、書き込まれた符号化対象データ206のNANDメモリ6上の位置と、符号化対象データ206に基づいて生成した確定した誤り訂正符号306のNANDメモリ6上の位置と、が対応表として管理される。
【0062】
この対応関係表は、コントローラ1の符号管理部11が保持する。符号管理部11は、NANDメモリ6へのデータの書き込みを制御するとともにNANDメモリ6へ書き込んだデータの位置に基づいて対応関係表を更新する。通常時には、このように符号化対象データと確定した誤り訂正符号との対応が対応関係表に書き込まれる。
【0063】
図12は、フラッシュ時の符号書き込みの一例を示す図である。
図12では、16のブロックの符号化対象データ207に基づいて1つの確定した誤り訂正符号を生成するとする。この場合、ページ毎に、ブロック7−0〜7−3に対する誤り訂正符号化処理で1回中間状態を一時記憶バッファ4へ退避し、ブロック7−4〜7−7の誤り訂正符号化処理で2回目の中間状態を退避し、ブロック7−8〜7−11の誤り訂正符号化処理で3回目の中間状態を退避し、ブロック7−12〜7−15の誤り訂正符号化処理で確定した誤り訂正符号を退避する処理を行うとする。
【0064】
この場合に、例えば、ページ#0のブロック7−0〜7−3に書き込むデータ208に対する誤り訂正符号化処理で中間状態を一時記憶バッファ4へ退避してからページ#0のブロック7−4〜7−7に書き込むデータ209の誤り訂正符号化処理で2回目の中間状態を退避するまでの間に、コントローラ1がフラッシュコマンドを受け取ったとする。この場合、符号管理部11は、データ208に対する誤り訂正符号の中間状態である符号#0をNANDメモリ6−4のブロック8(符号用のブロック)へ格納する。なお、ここでは、フラッシュコマンドを受け取るまでに、NANDメモリ6のデータ208がNANDメモリ6への書き込まれていることを想定しているが、データ208が書き込まれていない場合はデータ208についてもNANDメモリ6へ書き込む。そして、符号管理部11は、符号#0のNANDメモリ上の位置と符号#0の処理対象のデータ(データ208)のNANDメモリ6上の位置とを対応づけて対応関係表に格納する。
【0065】
図13は、フラッシュ時の符号書き込みの別の一例を示す図である。
図13では、
図12で説明した動作によりフラッシュコマンドにより符号#0がNANDメモリ6へ書き込まれた後、さらにデータ209が一時記憶バッファ4に格納された後に次のフラッシュコマンドを受け取ったとする。この場合、データ209に基づいて生成した中間状態である符号#0´をNANDメモリ6−4のブロック8へ格納する。また、対応関係表にデータ208およびデータ209の位置と符号#0´の位置との対応を格納するとともに、対応関係表の既に格納されている符号#0に関する情報を無効化する。なお、無効化の方法はどのような方法でもよいが、例えば、対応する新たな符号の情報(例えば符号#0´に関する情報)が対応関係表に書き込まれた場合に自動的に古い情報(例えば符号#0に関する情報)が無効であると判断されるようにしてもよいし、例えば符号ごとに有効無効のいずれであるかのフラグを対応関係表に格納することとし、このフラグにより明示的に有効無効を管理してもよい。
【0066】
図13を用いて説明したように、無効化した符号がNANDメモリ6へ格納されているとNANDメモリ6上の領域を無駄に使用することになるため、符号のコンパクションを実施してもよい。
図14は、符号のコンパクションの一例を示す図である。
図14では、ハッチングされた符号が無効化された符号を示している。このような場合、次の手順により符号のコンパクションを実施する。
【0067】
(1)まず、有効な符号#2と符号#0´を記憶する新規ブロックの領域を確保する。(2)次に有効な符号#2と符号#0´を新規ブロックの確保した領域にコピーする。
(3)有効な符号#2と符号#0´の対応関係表の符号の位置を更新する。
(4)不要になったブロックを解放する。
【0068】
図12および
図13では、フラッシュコマンドを受け取った場合に、誤り訂正符号の中間状態を符号用のブロックに書き込むようにしたが、誤り訂正符号の中間状態をデータ用のブロックに書き込むようにしてもよい。
【0069】
図15および
図16では、誤り訂正符号の中間状態をデータ用のブロックに書き込む場合の書き込み方法の一例を示す図である。
図15の例では、符号化対象データ208に対応する誤り訂正符号の中間状態である符号#0をブロック7−4へ格納する。この場合も対応関係表には、符号化対象データ208の位置と符号#0の位置とを対応づけて格納する。
【0070】
図16の例では、
図15で示した状態から、さらにデータ211を書き込み、データ208およびデータ211に対応する誤り訂正符号の中間状態である符号#0´をブロック7−8へ書き込む。なお、符号#0を書き込んだ後のデータの書き込み時には、ブロック7−5〜7−7の3ブロックにのみデータを格納する。この場合、ブロック7−0〜7−3のデータ208とブロック7−5〜ブロック7−7のデータ211とのデータに基づいて符号#0´を生成したことを対応関係表に格納しておく。
【0071】
なお、符号#0をデータ用の領域に書き込んだ場合、符号#0´を計算する場合には、符号#0についてもデータとして取り扱って計算するなどの方法を用いればよい。このようにしておけば、訂正処理(復号化処理)時に、符号の中間状態とデータを区別しないで処理ができる。
【0072】
次に、本実施の形態の復号化処理について説明する。
図17〜20は、本実施の形態の復号化処理の概念を示す図である。ここでは、
図5で示した例と同様に8つのブロックで1つの確定した誤り訂正符号を生成するとする。
図17は、確定した誤り訂正符号がNANDメモリ6に記憶されている場合の本実施の形態の復号化処理を示している。
図17は、排他的論理和で計算するパリティを使って8ページ中1ページを訂正する例を示している。8つのブロックのデータ401に基づいて符号402が生成されているとするとき、データ401を格納するあるブロックが故障したとする。この場合、ECCエンコーダ/デコーダ2のデコーダ22は、NANDメモリ6から読み出したデータ401のうち故障したブロック以外のデータと、NANDメモリ6から読み出したデータ401に対応する符号402(確定した誤り訂正符号)とに基づいて復号化処理を行い、故障したブロックのデータを復元して復元したデータ403を得ることができる。
【0073】
図17では、排他的論理和で計算するパリティを用いる場合を示したが、BCH符号やRS符号などを使用する場合には全てのデータ(故障したブロックのデータも含む)と誤り訂正符号とを読み出してデコーダ22に入力する。各符号に対応した処理は従来と同様であり、適用する誤り訂正符号に対応した処理を実施する。なお、データにCRC(Cyclic Redundancy Check)符号を付加して、故障した箇所が検出できるようにしていることとする。CRC符号の付加については従来と同様である。確定した誤り訂正符号を用いた(中間状態を用いない)復号化処理は、従来と同様であり、詳細な説明は省略する。
【0074】
図18は、誤り訂正符号の中間状態を用いて復号化処理を実施する例を示している。
図18は、誤り訂正符号の中間状態がデータの格納されるブロックとは別のブロックに格納されている例を示している。デコーダ22は、8つのブロックのデータ401のうち故障したブロック以外のデータと、誤り訂正符号の中間状態404と、を用いて復号化処理を行う。誤り訂正符号の中間状態404は、最初の4つのブロックに対応する中間状態であるとし、残り4つのブロックについては未使用(データが書き込まれていない)の状態とする。この場合には、未使用の4つのブロックのデータの代わりに4つの0データ405を用いて、復号化処理を実施する。これにより、故障したブロックのデータを復元して復元したデータ404を得ることができる。
【0075】
図19は、誤り訂正符号の中間状態がデータの格納されるブロックに格納されている例を示している。この場合、未使用のブロックのデータの代わりに
図18と同様の0データ405を用い、さらに符号の中間状態の格納されているブロックの代わりに0データ405を用いる。デコーダ22は、データの書き込まれている4つのブロックのデータと、4つの0データとを入力データ408とし、誤り訂正符号の中間状態409を用いて復号化処理を実施する。なお、
図18および
図19ではパリティを用いる場合を示したが、BCH符号やRS符号などを他の符号を使用する場合には、符号の特徴に応じて復号化処理を実施する。この場合にも、上記と同様に未使用のブロックのデータや符号の中間状態が格納されているブロックの代わりに0データを用いればよい。
【0076】
図20は、誤り訂正符号の中間状態をNANDメモリ6で格納する場合の起動時の処理手順の一例を示すフローチャートである。上述のようにフラッシュコマンドにより誤り訂正符号の中間状態をNANDメモリ6で格納した後に、再び半導体記憶装置100が起動すると、確定した誤り訂正符号を計算していない未書き込み領域から書き込み(
図12のデータ209の書き込み等)を始めることになる。このような未書き込み領域から書き込みを始める場合には、NANDメモリ6に格納されている誤り訂正符号の中間状態を読み出して誤り訂正符号化処理を実施することになる。
【0077】
従って、起動時に、半導体記憶装置100の符号化管理部11は、まず符号化対象データ単位内に未書き込みのデータ領域が存在するかを確認し(ステップS21)、未書き込みのデータ領域が存在するか否かを判断する(ステップS22)。
【0078】
未書き込みのデータ領域が存在する場合(ステップS22 Yes)、符号化管理部11は、対応関係表を参照して未書き込みのデータ領域に対応する誤り訂正符号の中間状態のNANDメモリ6上の位置を取得し(ステップS23)、取得した位置から誤り訂正符号の中間状態を一時記憶バッファ4へ読み出し(ステップS24)、処理を終了する。また、未書き込みのデータ領域が存在しない場合(ステップS22 No)、処理を終了する。
図20で示した処理を実施した後は、上述の
図9に示した符号化処理を実施する。
【0079】
次に、不正電源遮断に対応する冗長化について説明する。フラッシュコマンドを受け取らずに半導体記憶装置100の電源が遮断(不正電源遮断)されることがある。不正電源遮断時には、上述したフラッシュコマンドを受け取った場合の動作を実施できずに、処理の途中で電源が遮断されることになる。不正電源遮断に対してNANDメモリ6に書き込まれたデータを保護するため、本実施の形態では次のような冗長化を実施する。
【0080】
図21は、半導体記憶装置100の冗長化手順の一例を示すフローチャートである。まず、NANDメモリ6への書き込みデータがホスト装置より転送されると、コントローラ1は、
図9で示した手順により誤り訂正符号化処理(符号の計算)を開始するとともに(ステップS31)、書き込みデータを多重化によりNANDメモリ6へ書き込む(ステップS32)。この多重化は、NANDメモリ6の複数の箇所へ同一の書き込みデータを書き込むことを意味し、ここでは2箇所に書き込むこととするが、3箇所以上に書き込むようにしてもよい。同一の書き込みデータを多重化により書き込む位置に制約はないが、同一の書き込みデータは、同時に故障する可能性が少ない位置にそれぞれ格納することが望ましい。
【0081】
次に、コントローラ1は、誤り訂正符号が完成した(確定した誤り訂正符号が生成された)か否かを判断し(ステップS33)、誤り訂正符号が完成した場合(ステップS33 Yes)、当該誤り訂正符号をNANDメモリ6へ書き込む(ステップS34)。そして、誤り訂正符号をNANDメモリ6へ格納したデータについて多重化したデータの他方のブロックを解放し(ステップS35)、処理を終了する。
【0082】
また、誤り訂正符号が完成していない場合(ステップS33 No)、ステップS31へ戻る。このように、本実施の形態では、初めは多重化によりデータを冗長化し、誤り訂正符号が完成してNANDメモリ6への書き込みが終了すると誤り訂正符号による冗長化に切替える。なお、多重化および誤り訂正符号により保護されるデータは、ホスト装置から転送された書き込みデータだけでなく半導体記憶装置100が用いる管理情報についても同様の冗長化を行ってもよい。管理情報を同様に冗長化する場合は、例えば、データの場合と同様に多重化する方法や、NANDメモリ6へ管理情報を書き込みかつ管理情報の更新した情報だけをNANDメモリ6へ書き込むことで同じ情報を多重化して記録する方式などがある。
【0083】
なお、本実施の形態では、誤り訂正符号の中間状態を生成する単位であるグループを、異なるチップから1つずつのブロックにより構成することにしたが、グループの構成はこれに限定されない。また、前述したようにグループ化されている必要もない。また、誤り訂正符号の訂正能力や符号化対象データの選択方法についても限定はない。例えば、符号化対象データをチップを跨って選択することでチップの故障に対応可能としてもよい。同様にブロック内の任意のページからデータを選択することでブロック故障するよりももっと小さい範囲であるページの故障に対応できるようにしてもよい。また、用いる誤り訂正符号の種類にも限定は無い。
【0084】
また、以上の説明では、1チップあたりのブロックの総数と、確定した誤り訂正符号を生成するブロックの数と、の関係を明記していない。これについては、例えば、1チップあたりのブロックの総数が16で、8つのブロックのデータで確定した誤り訂正符号を生成する場合等には、各チップのブロックを8つずつのブロックで構成される処理単位に分け、1つの処理単位の全てについて書き込みおよび確定した誤り訂正符号の書き込みが終了した場合には、次の処理単位のブロックへの書き込みを開始する等というように、すればよい。
【0085】
以上のように、本実施の形態では、誤り訂正符号に対応する符号化対象データの一部を入力として用いて誤り訂正符号化処理を行った誤り訂正符号の中間状態を一時記憶バッファ4へ格納し、同一の誤り訂正符号の符号化対象データ内の後続するデータの誤り訂正処理では一時記憶バッファ4に格納されている誤り訂正符号の中間状態を初期値として用いて誤り訂正処理を実施するようにした。このため、1つの誤り訂正符号の訂正対象とするデータ量を増やした場合でも、NANDメモリ6のブロックの使用効率の低下を防ぐことができる。
【0086】
(第2の実施の形態)
図22は、第2の実施の形態にかかる半導体記憶装置100の冗長化手順の一例を示すフローチャートである。本実施の形態の半導体記憶装置100の構成は第1の実施の形態の半導体記憶装置100と同様である。第1の実施の形態と同様の機能を有する構成要素は第1の実施の形態と同一の符号を付して重複する説明を省略する。
【0087】
第1の実施の形態では、誤り訂正符号が完成するまでは多重化により冗長化し、誤り訂正符号が完成してNANDメモリ6へ書き込まれた後は誤り訂正符号による冗長化に切替えることにより、不正電源遮断からデータを保護するようにした。
【0088】
本実施の形態では、データの多重化を行わず、誤り訂正符号の中間状態を定期的にNANDメモリ6へ記憶することにより、不正電源遮断からデータを保護する。
図22に示すように、まず、コントローラ1は、第1の実施の形態のステップS31と同様に誤り訂正符号化処理(符号の計算)を開始し(ステップS31)、誤り訂正符号が完成したか否かを判断する(ステップS33)。
【0089】
誤り訂正符号が完成していない場合(ステップS33 No)、コントローラ1は、NANDメモリ6へ書き込んだデータ(対応する誤り訂正符号がNANDメモリ6へ記憶されていないデータ)量が閾値以上であるか否かを判断する(ステップS36)。書き込んだデータ量が閾値以上である場合(ステップS36 Yes)、誤り訂正符号の中間状態をNANDメモリ6へ書き込み、対応関係表を更新し(ステップS37)、ステップS33へ戻る。なお、ステップS37の中間状態をNANDメモリ6へ書き込む方法は、フラッシュコマンドを受け取った場合の書き込み方法と同様である。また、対応関係表には、NANDメモリ6へ書き込んだ中間状態ごとに、当該中間状態で保護できるデータを特定できる情報等を記録されているとする。
【0090】
一方、ステップS33で誤り訂正符号が完成した場合(ステップS33 Yes)、完成した誤り訂正符号をNANDメモリ6へ書き込み、対応関係表を更新し(ステップS38)、処理を終了する。また、書き込んだデータ量が閾値でない場合(ステップS36 No)、ステップS33へ戻る。
【0091】
なお、一旦ステップS37を経由してからステップS36を実施する場合は、書き込みデータとして、NANDメモリ6に書き込まれた誤り訂正符号の中間状態が記憶されたデータについては除外して閾値と比較する。
【0092】
また、ステップS36の判断に用いる閾値はどのような値としてもよいが、閾値を小さくすると書き込む符号(中間状態)の量が増え、閾値を大きくすると書き込む符号量は少なくなるが保護されないデータが増加することになる。従って、これらの要素を考慮してトレードオフにより適切に閾値を設定すればよい。
【0093】
例えば16ブロックのデータで確定した誤り訂正符号を生成し、4ブロック毎に計3回(1つの確定した誤り停止符号あたり)中間状態を一時記憶バッファ4へ格納する場合、3回の中間状態が全てNANDメモリ6へ記憶されるように閾値を設定してもよいし、1回の中間状態のみが記憶されるように閾値を設定してもよい。
【0094】
図23は、不正電源遮断後の本実施の形態の復号化処理の概念を示す図である。
図23では、8ブロックのデータ410で確定した誤り訂正符号処理を実施する場合に、最初の4つのブロックを用いた符号(誤り訂正符号)の中間状態411がNANDメモリ6へ書き込まれてから確定した誤り訂正符号がNANDメモリ6へ書き込まれるまでの間に不正電源遮断が生じた例を示している。非保護と記載したデータは、NANDメモリ6にデータが記録されている状態であるが中間状態あるいは完成した符号がNANDメモリ6へ記録されていないために誤り訂正符号で保護されないデータである。このような場合、非保護のデータの代わりに0データを用いて復号化処理を実施する。なお、非保護と記載した部分の一部がまだ情報を書き込んでいない未書き込み領域であっても同様の処理を行う。以上述べた以外の本実施の形態の動作は、第1の実施の形態と同様である。
【0095】
以上のように、本実施の形態では、多重化を行わずに、フラッシュコマンドを受け取っていない場合にも誤り訂正符号の中間状態を例えば定期的にNANDメモリ6へ格納することにより、データの冗長化を行うようにした。このため、多重化のためのNANDメモリ6を用いずに済むため、第1の実施の形態に比べ、NANDメモリ6を効率的に使用することができる。
【0096】
(第3の実施の形態)
図24は、第3の実施の形態にかかる半導体記憶装置100aの構成例を示すブロック図である。本実施の形態の半導体記憶装置100aの構成は第1の実施の形態の半導体記憶装置100と同様であるが、一時記憶バッファ4にECC用領域42を設ける代わりにNANDメモリ6にECC用領域61を設けている。第1の実施の形態と同様の機能を有する構成要素は第1の実施の形態と同一の符号を付して重複する説明を省略する。
【0097】
第1の実施の形態では、エンコーダ21は、一時記憶バッファ4に格納されているデータを用いて誤り訂正符号を生成したが、本実施の形態では、エンコーダ21は、第1の実施の形態と同様に一時記憶バッファ4のデータ用領域41に格納されているデータを用いて誤り訂正符号化処理を実施する。第1の実施の形態では、確定した誤り訂正符号および誤り訂正符号の中間状態を一時記憶バッファ4に格納したが、本実施の形態では直接NANDメモリ6のECC用領域61へ書き込む。そして、誤り訂正符号の中間状態を復帰させて誤り訂正符号化処理を実施する場合には、NANDメモリ6のECC用領域61から誤り訂正符号の中間状態を読み出して処理に用いる。
【0098】
図25および26は、本実施の形態の誤り訂正符号の中間状態の生成と記憶方法の一例を示す図である。
図25および
図26の例は、8つのブロックで確定した誤り訂正符号を生成し、第1の実施の形態の
図5の例と同様に8つのブロックをグループ分け(
図25の例では、グループAとグループBの2つにグループ分け)し、グループ毎に誤り訂正符号化処理を実施する。
【0099】
また、ブロック7−0とブロック7−4は、チャネルch0により制御されるNANDメモリ6−0内のブロックであり、ブロック7−1とブロック7−5は、チャネルch1により制御されるNANDメモリ6−1内のブロックであり、ブロック7−2とブロック7−6は、チャネルch2により制御されるNANDメモリ6−2内のブロックであり、ブロック7−3とブロック7−7は、チャネルch3により制御されるNANDメモリ6−3内のブロックであるとする。ブロック8−1はチャネルch4に制御されるNANDメモリ6−4内のブロックであるとする。
【0100】
図25に示すように、エンコーダ21は、グループAの4つのブロックのページ#0のデータ220に基づいて誤り訂正符号の中間状態を生成し、生成した中間状態を符号#0としてNANDメモリ6のECC用領域61へ書き込む。同様に、グループAのページ#1、ページ#2、ページ#3のデータに基づいて、誤り訂正符号の中間状態である符号#1、符号#2、符号#3を書き込む。
図26は符号#3の書き込み時を示しており、データ221に基づいて符号#3を生成し、NANDメモリ6へ書き込む。符号管理部11は、符号#0,1,2,3の書き込み位置とそれぞれの対応するデータの書き込み位置との対応は、第1の実施の形態と同様に対応関係表により管理する。なお、
図25および
図26では、簡略化のため各ブロックはページ#0〜ページ#3で構成される例を示しているが、実際のブロック内のページ数はこれに限定されない。
【0101】
図27および
図28は、本実施の形態の誤り訂正符号の中間状態の復帰と再生成の一例を示す図である。ブロック8−2はチャネルch4に制御されるNANDメモリ6−4内のブロックであるとする。
図25および
図26に示したようにグループAのブロックのデータに基づいて生成された誤り訂正符号の中間状態がNANDメモリ6に格納されており、グループAの全ブロックの書き込みが終了したとする。
図27に示すように、エンコーダ21は、NANDメモリ6の符号#0を読み出して復帰させ(符号化回路の各レジスタに設定し)た後に、グループBのページ#0のデータ222を用いて誤り訂正符号化処理を実施し符号#0´(確定した誤り訂正符号)を生成してNANDメモリ6へ書き込む。この際、符号#0が無効になるため、符号管理部11は、符号#0´の書き込み位置と対応するデータの書き込み位置とを対応関係表に格納するとともに、対応関係表の符号#0を無効化する。
【0102】
同様に、
図28に示すように、エンコーダ21は、NANDメモリ6の符号#3を読み出して復帰させた後に、グループBのページ#3のデータ223を用いて誤り訂正符号化処理を実施し符号#3´(確定した誤り訂正符号)を生成してNANDメモリ6へ書き込む。そして、符号管理部11は、対応関係表を更新する。ブロック8−1に有効な符号が無くなった場合(格納されている全ての符号が無効となった)場合、ブロック8−1を解放する。
【0103】
なお、確定した誤り訂正符号を誤り訂正符号の中間状態とは別に管理してNANDメモリ6の別領域に格納してもよいし、確定した誤り訂正符号と誤り訂正符号の中間状態とを区別せずに格納していくようにしてもよい。また、本実施の形態では、誤り訂正符号の中間状態をNANDメモリ6へ書き込んでいるため、フラッシュコマンドを受け取った際の誤り訂正符号の中間状態のNANDメモリ6への書き込み処理や冗長化のための定期的な誤り訂正符号の中間状態のNANDメモリ6への書き込み処理を実施する必要はない。
【0104】
図29は、本実施の形態のデータ書き込み時の動作手順の一例を示すフローチャートである。なお、ここでは、各チップのそれぞれN(Nは1以上の整数)個のブロックで、1つの処理単位を構成することとし、1つの処理単位内で確定した誤り訂正符号を書き込むまでの処理を実施した後に、次の処理単位の書き込みを実施することとする。
図29では、1つの処理単位内のデータ書き込みを示している。
【0105】
まず、書き込み処理を開始すると、符号管理部11は、書き込み開始位置の属するグループ(グループ番号をkとし、書き込み開始位置のグループ番号をk0とする)とページ(ページ番号をiとし、書き込み開始位置のページをP0とする)とを把握する(ステップS40)。そして、符号管理部11は、NANDI/F5へデータをNANDメモリ6のグループkのページiへ書き込むよう指示する(ステップS41)。
【0106】
符号化制御部12は、kがkmin(kの最小値、
図25の例ではグループAのように誤り訂正符号の生成の際に中間状態を復帰させる必要のないグループの番号)の場合にはエンコーダ21に符号化回路の初期化を指示し、kがkminでない場合には、対応する誤り訂正符号の中間状態をNANDメモリ6から読み出して復帰させる(ステップS42)。
【0107】
データの書き込み(一時記憶バッファ4からNANDメモリ6への転送)が開始されると、符号化制御部12は、エンコーダ21に誤り訂正符号化処理の開始を指示し、エンコーダ21は指示に基づいて、転送中の書き込みデータを用いて誤り訂正符号の中間状態(または確定した誤り訂正符号)を生成する(ステップS43)。符号管理部11は、生成された中間状態(または確定した誤り訂正符号)をNANDメモリ6−4のECC用領域61へ書き込むようNANDI/F5へ指示し(ステップS44)、データの書き込み位置と中間状態の書き込み位置とに基づいて対応関係表を更新する(ステップS45)。
【0108】
次に、符号管理部11は、書き込みデータがまだ存在するか否かを判断し(ステップS47)、存在しない場合(ステップS47 No)には処理を終了する。書き込みデータが存在する場合には(ステップS47 Yes)、iがimax(ブロック内の最大のページ番号)であるか否かを判断し(ステップS48)、i=imaxでない場合(ステップS48 No)は、iをプラス1し(ステップS49)、ステップS41へ戻る。また、i=imaxの場合(ステップS48 Yes)、kがkmax(最大のグループ番号)であるか否かを判断し(ステップS50)、k=kmaxでない(ステップS50 No)場合は、kをプラス1し、i=0として(ステップS51)、ステップS41へ戻る。
【0109】
また、k=kmaxの場合(ステップS50 Yes)、当該処理単位内の書き込みを終了し、次の処理単位への書き込み処理へ移行する(ステップS52)。
【0110】
なお、フラッシュコマンドの受信や不正電源遮断等が途中で生じない場合には、NANDメモリ6へ書き込まれたデータに対応する確定した誤り訂正符号がNANDメモリ6に格納されることになる。この場合の復号化処理は従来の処理と同様である。また、フラッシュコマンドの受信や不正電源遮断等が途中で生じた場合の復号化処理は、第1の実施の形態のフラッシュコマンドを受信して中間状態が書き込まれた後の復号化処理、または第2の実施の形態で不正電源遮断が生じた後の復号化処理と同様である。以上述べた以外の本実施の形態の動作は第1の実施の形態と同様である。
【0111】
以上のように、本実施の形態では、エンコーダ21は、生成した誤り訂正符号の中間状態を一時記憶バッファ4へ書き込まずに直接NANDメモリ6へ書き込むようにした。このため、第1の実施の形態に比べ、一時記憶バッファ4の要領を低減させることができ、コストを低下させることができる。
【0112】
(第4の実施の形態)
図30は、SSD100を搭載したパーソナルコンピュータ1200の一例を示す斜視図である。パーソナルコンピュータ1200は、本体1201、及び表示ユニット1202を備えている。表示ユニット1202は、ディスプレイハウジング1203と、このディスプレイハウジング1203に収容された表示装置1204とを備えている。
【0113】
本体1201は、筐体1205と、キーボード1206と、ポインティングデバイスであるタッチパッド1207とを備えている。筐体1205内部には、メイン回路基板、ODD(Optical Disk Device)ユニット、カードスロット、及びSSD100等が収容されている。
【0114】
カードスロットは、筐体1205の周壁に隣接して設けられている。周壁には、カードスロットに対向する開口部1208が設けられている。ユーザは、この開口部1208を通じて筐体1205の外部から追加デバイスをカードスロットに挿抜することが可能である。
【0115】
SSD100は、従来のHDDの置き換えとして、パーソナルコンピュータ1200内部に実装された状態として使用してもよいし、パーソナルコンピュータ1200が備えるカードスロットに挿入した状態で、追加デバイスとして使用してもよい。
【0116】
図31は、SSD100を搭載したパーソナルコンピュータのシステム構成例を示している。パーソナルコンピュータ1200は、CPU1301、ノースブリッジ1302、主メモリ1303、ビデオコントローラ1304、オーディオコントローラ1305、サウスブリッジ1309、BIOS−ROM1310、SSD100、ODDユニット1311、エンベデッドコントローラ/キーボードコントローラIC(EC/KBC)1312、及びネットワークコントローラ1313等を備えている。
【0117】
CPU1301は、パーソナルコンピュータ1200の動作を制御するために設けられたプロセッサであり、SSD100から主メモリ1303にロードされるオペレーティングシステム(OS)を実行する。更に、ODDユニット1311が、装填された光ディスクに対して読出し処理及び書込み処理の少なくとも1つの処理の実行を可能にした場合に、CPU1301は、それらの処理の実行をする。
【0118】
また、CPU1301は、BIOS−ROM1310に格納されたシステムBIOS(Basic Input Output System)も実行する。尚、システムBIOSは、パーソナルコンピュータ1200内のハードウェア制御のためのプログラムである。
【0119】
ノースブリッジ1302は、CPU1301のローカルバスとサウスブリッジ1309との間を接続するブリッジデバイスである。ノースブリッジ1302には、主メモリ1303をアクセス制御するメモリコントローラも内蔵されている。
【0120】
また、ノースブリッジ1302は、AGP(Accelerated Graphics Port)バス等を介してビデオコントローラ1304との通信、及びオーディオコントローラ1305との通信を実行する機能も有している。
【0121】
主メモリ1303は、プログラムやデータを一時的に記憶し、CPU1301のワークエリアとして機能する。主メモリ1303は、例えばRAMから構成される。
【0122】
ビデオコントローラ1304は、パーソナルコンピュータ1200のディスプレイモニタとして使用される表示ユニット1202を制御するビデオ再生コントローラである。
【0123】
オーディオコントローラ1305は、パーソナルコンピュータ1200のスピーカ1306を制御するオーディオ再生コントローラである。
【0124】
サウスブリッジ1309は、LPC(Low Pin Count)バス1314上の各デバイス、及びPCI(Peripheral Component Interconnect)バス1315上の各デバイスを制御する。また、サウスブリッジ1309は、各種ソフトウェア及びデータを格納する記憶装置であるSSD100を、ATAインタフェースを介して制御する。
【0125】
パーソナルコンピュータ1200は、セクタ単位でSSD100へのアクセスを行う。ATAインタフェースを介して、書き込みコマンド、読出しコマンド、キャッシュフラッシュコマンド等がSSD100に入力される。
【0126】
また、サウスブリッジ1309は、BIOS−ROM1310、及びODDユニット1311をアクセス制御するための機能も有している。
【0127】
EC/KBC1312は、電力管理のためのエンベデッドコントローラと、キーボード(KB)1206及びタッチパッド1207を制御するためのキーボードコントローラとが集積された1チップマイクロコンピュータである。
【0128】
このEC/KBC1312は、ユーザによるパワーボタンの操作に応じてパーソナルコンピュータ1200の電源をON/OFFする機能を有している。ネットワークコントローラ1313は、例えばインターネット等の外部ネットワークとの通信を実行する通信装置である。
【0129】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。