(57)【特許請求の範囲】
【請求項１】
受信されたデータに対し、ブロック型エラー訂正符号を生成するように構成されたブロック符号エンコーダと、
前記受信されたデータと前記ブロック型エラー訂正符号を符号化し、パンクチャ可能なデータを生成し、前記パンクチャ可能なデータをパンクチャリングして、パンクチャドデータを生成するように構成されたレート互換エンコーダと、
前記パンクチャドデータを格納するよう構成された一つ以上のメモリアレイと、
前記一つ以上のメモリアレイから取得された前記パンクチャドデータをデコードして、訂正前データと前記ブロック型エラー訂正符号を復元するよう構成されたレート互換デコーダと、
前記ブロック型エラー訂正符号を用いて、前記訂正前データを訂正するように構成されたブロック符号デコーダと、
前記ブロック型エラー訂正符号を用いて、前記ブロック符号デコーダによって訂正されるビットの数が、更なるエラー訂正できないビット数に残り1ビット以内に迫った場合に、前記レート互換エンコーダによって用いられる符号化率を低下させるように構成された制御回路と、
を含む、
ことを特徴とする装置。
【請求項２】
前記レート互換エンコーダは、パンクチャラブルコードエンコーダおよびパンクチャリング回路をさらに含む、
ことを特徴とする請求項１に記載の装置。
【請求項３】
前記パンクチャラブルコードエンコーダは、畳み込みエンコーダを含む、
ことを特徴とする請求項２に記載の装置。
【請求項４】
前記レート互換デコーダは、Ｖｉｔｅｒｂｉデコーダを含む、
ことを特徴とする請求項３に記載の装置。
【請求項５】
前記装置は、ＮＡＮＤフラッシュメモリデバイスを含む、
ことを特徴とする請求項１に記載の装置。
【請求項６】
前記符号化率は、少なくとも部分的には、前記受信されたデータに対するデータタイプに応じて選択される、
ことを特徴とする請求項１に記載の装置。
【請求項７】
前記一つ以上のメモリアレイの少なくとも一ブロックに第一の符号化率が割り当てられ、少なくとも第二のブロックに第二の符号化率が割り当てられる、
ことを特徴とする請求項１に記載の装置。
【請求項８】
前記一つ以上のメモリアレイは、複数レベルメモリセルを含み、前記複数レベルメモリセルが、前記パンクチャドデータを前記メモリセルの前記複数レベル内に格納するよう構成された、
ことを特徴とする請求項１に記載の装置。
【請求項９】
前記レート互換エンコーダは、前記受信されたデータと前記ブロック型エラー訂正符号から、符号化率が１／４の畳み込みコードを生成するよう構成され、１／３から１／２のうちで選択可能な符号化率を有する前記パンクチャドデータ生成するように前記畳み込みコードをパンクチャリングするようにさらに構成された、
ことを特徴とする請求項１に記載の装置。
【請求項１０】
制御回路をさらに含み、前記制御回路は、前記一つ以上のメモリアレイ中に、パンクチャリングされていない形式でリファレンス情報を格納するよう構成され、前記リファレンス情報は、前記パンクチャドデータのパンクチャリングレベルを示す、
ことを特徴とする請求項１に記載の装置。
【請求項１１】
一つ以上のメモリアレイを有する不揮発性メモリデバイスにデータを格納するための方法であって、
前記一つ以上のメモリアレイ中への格納を意図されたデータを受信するステップと、
前記受信されたデータに対し、ブロック型エラー訂正符号を生成するステップと、
パンクチャドデータを生成するために前記受信されたデータと前記ブロック型エラー訂正符号をエンコードするステップと、
前記一つ以上のメモリアレイに前記パンクチャドデータを格納するステップと、
前記一つ以上のメモリアレイから前記パンクチャドデータを取り出すステップと、
訂正前データと前記ブロック型エラー訂正符号を復元するために、前記パンクチャドデータを復号するステップと、
前記ブロック型エラー訂正符号を用いて、前記訂正前データを訂正するステップと、
前記ブロック型エラー訂正符号を用いて、前記ブロック符号デコーダによって訂正されるビットの数が、更なるエラー訂正できないビット数に残り1ビット以内に迫った場合に、前記レート互換エンコーダによって用いられる符号化率を低下させるステップと、
を含む、
ことを特徴とする方法。
【請求項１２】
前記パンクチャドデータを生成するために、前記受信されたデータに対して畳み込みエンコードおよびパンクチャリングを行うステップをさらに含む、
ことを特徴とする請求項１１に記載の方法。
【請求項１３】
畳み込みコードされたデータの少なくとも一部分を、あるパンクチャパターンでパンクチャリングして、第一の符号化率を有する前記パンクチャドデータを生成するステップと、畳み込みコードされたデータの少なくとも第二の部分を、第二のパンクチャパターンでパンクチャリングして、第二の符号化率を有する前記パンクチャドデータを生成するステップとをさらに含み、
前記あるパンクチャパターンでパンクチャリングされた前記データは、前記一つ以上のメモリアレイの第一の部分に格納され、前記第二のパンクチャパターンでパンクチャリングされた前記データは、前記一つ以上のメモリアレイの第二の部分に格納される、
ことを特徴とする請求項１２に記載の方法。
【請求項１４】
少なくとも部分的には、前記受信されたデータに対するデータタイプに応じて、前記第一の符号化率と前記第二の符号化率の間で選択するステップをさらに含む、
ことを特徴とする請求項１３に記載の方法。
【請求項１５】
エンコードするステップは、
符号化率が１／４の畳み込みコードを生成するステップと、
１／３から１／２のうちで選択可能な符号化率を有する前記パンクチャドデータを生成するために、前記畳み込みコードをパンクチャリングするステップと、
を含む、
ことを特徴とする請求項１１に記載の方法。
【請求項１６】
前記一つ以上のメモリアレイ中に、パンクチャリングされていない形式でリファレンス情報を格納するステップをさらに含み、
前記リファレンス情報は、前記パンクチャドデータのパンクチャリングレベルを示す、
ことを特徴とする請求項１１に記載の方法。
【請求項１７】
更に、
前記パンクチャドデータに関連したパンクチャパターンに従って、前記パンクチャドデータをデコードするステップと、
を含む、
ことを特徴とする請求項１１に記載の方法。
【請求項１８】
デコードするステップは、Ｖｉｔｅｒｂｉデコードを行うステップを含む、
ことを特徴とする請求項１７に記載の方法。
【請求項１９】
前記一つ以上のメモリアレイから、パンクチャリングされていない形式でリファレンス情報を取り出すステップであって、前記リファレンス情報は、前記パンクチャドデータのパンクチャリングレベルを示すステップと、
前記リファレンス情報に従って、前記パンクチャパターンを選択するステップと、
をさらに含む、
ことを特徴とする請求項１７に記載の方法。
【請求項２０】
不揮発性ソリッドステートメモリデバイス中のメモリスペースのブロックに対して符号化率を決定する方法であって、
前記メモリデバイスのデータのブロックの少なくとも一部に対して、エラー訂正符号によって訂正されるビットの数が、更なるエラー訂正をできないビット数に残り1ビット以内に迫ったことを示す限界条件が存在するかどうかを決定するステップと、
前記限界条件が存在する場合に、前記ブロックで使用される符号化率を減少させるステップと、
を含む、
ことを特徴とする方法。
【請求項２１】
減少させるステップは、パンクチャリング量を減少させるステップを含む、
ことを特徴とする請求項２０に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、概して集積回路に関する。詳細には、本発明の実施形態は、メモリ回路に関する。
【背景技術】
【０００２】
フラッシュメモリは、消去可能、および再プログラム可能な不揮発性メモリの一形式である。フラッシュメモリにおいては、メモリセルは、消去のために“ブロック”で配列される。ブロックが消去された後に、所望の場合にはプログラミングのために準備が整えられる。ＮＯＲフラッシュメモリは、データを取り出すために個々のバイトに対するアクセスを提供するフラッシュメモリの１タイプであるが、比較的低密度を有する。
【０００３】
ＮＡＮＤフラッシュメモリは、比較的高密度を提供するフラッシュメモリの１タイプである。高密度は、１つには直列に接続されたセルの列を形成することによって達成される。さらには、ＮＡＮＤフラッシュメモリでは、例えばデータからなるページなどの比較的大きなバイト群で、データがプログラムされ、アクセスされる。例えば、１つのページは、アレイにおける一行、もしくは一行のうちの一部に対応しうる。
【０００４】
例えば、データを格納するためのセルのメモリアレイは、典型的には、行および列の２次元アレイに配列される。これらのアレイは、寸法が大きく変化しうる。アレイのセルが、セルごとに２つ以上のレベル、すなわち複数レベルつまり２ビット以上のデータを保持することが可能である場合には、アレイは、３次元でデータを効率的に保持する。
【０００５】
ＮＡＮＤフラッシュメモリの典型的なアレイにおいては、フラッシュセルのソースおよびドレインは、（ソースからドレインへと）直列に配列され、列と称される。行に沿って“ワード線”があり、セルのゲートを制御する。典型的には、データは一度に一行にアクセスされ、各列から１ビットを提供される。読み出されるべき行に対するワード線は、セルの格納された（１つまたは複数の）状態を読み出すための特定の電圧へ設定される。複数レベルのセルに対しては、異なる電圧レベルが使用されうる。列の他のセルに対する他の行ラインは、セルを“オン”状態にするように設定され、列における対応するセルを介して、その行のセルの格納された（１つまたは複数の）状態の読み出しを可能にする。
【０００６】
行ごとのバイト数は、“ページ”におけるバイト数と同様、非常に広範囲に変化しうる。ある製造業者は、ある量のデータでページを定義し、例えば、２ページのデータが１つのワード線（行）に対応しうる。本記述の目的のために、１“ページ”のデータは、書き込み一周期もしくは読み出し一周期の間に、ＮＡＮＤフラッシュメモリアレイへ書き込まれる、もしくはそこから読み出されるデータの量に対応する。一例においては、２１１２バイトが１本のワード線のアクティベーションによって取り出される。この２１１２バイトのうち、２０４８はデータバイト、６４はスペアバイトであるが、このスペアバイトは典型的にはエラー訂正コード（ＥＣＣ）、ウェアレベリング情報、もしくは他のオーバーヘッドデータのために使用される。エラー訂正コードは、格納されたデータのロバスト性を増加させる。典型的には、ある形式のブロックコードが、巡回冗長検査（ＣＲＣ）チェックサム、Ｒｅｅｄ−Ｓｏｌｏｍｏｎエラー訂正などのエラー訂正コードを生成するために使用される。これらのエラー訂正コードは、データバイトの読み出しにおいてエラーが存在したかどうかを検出し、また、エラーがエラー訂正コードの性能を超えない場合にはデータバイトにおけるエラーを訂正することが通常は可能である。
【０００７】
フラッシュメモリには多くの用途がある。例として、フラッシュメモリハードドライブ（ハードドライブに対する代替品）、ＵＳＢフラッシュドライブもしくはサムドライブ、携帯電話、デジタルカメラ、デジタルメディアプレイヤー、ゲーム、メモリカード、ナビゲーションデバイス、携帯情報端末、コンピュータなどを含む。最大限度内では、エラー訂正コードは、データバイトのデータにおける多くのエラーを訂正しうる。しかしながら、最大限度を超えるエラーを有するデータは、通常は訂正することができない。例えば、あるワード線が機能しない場合には、データを読み出す上で、行全体にわたって問題が生じうる。通常はこれによって、エラーが多くなりすぎてしまい、エラー訂正コードが訂正を行えなくなる。データの臨界性に応じて、データにおける訂正不可能なエラーの影響は、単なる不都合である場合から、壊滅的な場合まで多岐にわたる。
【図面の簡単な説明】
【０００８】
本明細書におけるこれらの図面および関連する記述は、本発明の具体的な実施形態を説明するために提供されるものであって、限定することを意図するものではない。
【図１】メモリデバイスを含む概略図であって、このメモリデバイスは、外部ブロックコードおよび内部レートコンパチブルコードを有するデータを格納する。
【図２】畳み込みコードを生成するためのコーダの一例を概略的に示す。
【図３】畳み込みコードをパンクチャリング（puncture）するためのデータフローを概略的に示す。
【図４】ＮＡＮＤフラッシュメモリデバイスへのデータの格納のためにコードレートを動的に選択するプロセスを概略的に示すフローチャートである。
【発明を実施するための形態】
【０００９】
データは、レートコンパチブル畳み込みコード（ＲＣＰＣ）などのレートコンパチブルコードに従って、不揮発性ソリッドステートメモリデバイスに格納される。このようなメモリデバイスの一例は、フラッシュメモリデバイスである。データは、はじめに、エラー訂正および検出などのために、ブロックエンコードされうる。ブロックエンコードされたデータは、さらに、畳み込みエンコードされる。畳み込みエンコードは、リダンダンシーを増加させるが、格納されるデータ量もまた増加させる。パンクチャリング（puncture）される（ときには、“パーフォレーティド（perforated：穴あき）”とも称される）と、畳み込みエンコードされたデータのうちの幾つかは、パンクチャパターンに従って除去される。パンクチャパターンの例は、図３に関連して後に記述される。これによって、レートコンパチブルコードのコードレートｍ／ｎが増加する。ここで、ｍは情報シンボルの数であり、ｎはコードシンボルの数である。パンクチャリングを行うことにより、データを格納するのに使用されるメモリ量が減少する。状況に応じて、パンクチャリング量は、パンクチャリングしない場合から比較的高いパンクチャリング量まで変化し、提供される追加のエラー訂正量および使用されるメモリ量を変化させる。エンコードされたパンクチャドデータは、データがメモリデバイスから読み出されるべきときにデコードされる。本明細書においては、特定の実施形態が記述されるが、本明細書で説明される利点および特徴のうちの全てを提供するわけではない実施形態を含む、他の実施形態も当業者にとっては明らかであろう。
【００１０】
“ブロック”という用語が使用される文脈は２つ存在する。ＮＡＮＤフラッシュに関して、ブロックは、メモリの消去可能な単位に対応するページの集合である。エラー訂正に関して、ブロックコードは、エラー訂正の１タイプを称したものである。この二つは、文脈に基づいて、区別することができる。
【００１１】
図１は、メモリデバイス１００を含む概略図であり、このメモリデバイスは、エンコードされたデータを生成するために、レートコンパチブルコード、すなわち、調整可能なコードレートｍ／ｎを有する畳み込みコードを使用する。レートコンパチブルコードの一例は、畳み込みコードである。畳み込みコードは、フォワードエラー訂正技術であり、この技術では、畳み込みエンコーダに対する入力データストリームは、エンコーダのインパルスレスポンスと畳み込まれる。畳み込みコードの計算の一例のブロック図は図２に示される。示された実施形態は、内部コードおよび外部コードによって形成された連結エラー訂正コードを生成する。外部エラー訂正コードがまず生成される。内部エラー訂正コードは、外部コードが生成された後にエンコードされ、さらに外部コードをエンコードする。外部ブロックコードが、エラー検出機能およびエラー訂正機能を提供する。内部レートコンパチブルコードが、さらなるエラー訂正機能を提供する。データをブロックで処理するブロックコードとは対照的に、レートコンパチブル内部コードは、連続的にデータを処理する。
【００１２】
メモリデバイス１００は、ＣＰＵ１０２と通信した状態で示され、ＣＰＵ１０２は、メモリデバイス１００を使用するデバイスを表す。ＣＰＵ１０２は、マイクロプロセッサ、マイクロコントローラ、信号プロセッサなどに該当しうるプロセッサである。示されたメモリデバイス１００は、書き込みバッファ１０４、コントローラ１０６、メモリアレイ１０８、および読み出しバッファ１１０を含む。
【００１３】
コントローラ１０６は、さらにブロックコードエンコーダ１１２、レートコンパチブルエンコーダ１２４、レートコンパチブルデコーダ１２６、およびブロックコードデコーダ１２２を含む。示される実施形態においては、レートコンパチブルエンコーダ１２４は、パンクチャラブル（puncturable）コードエンコーダ１１４およびパンクチャリング回路１１６をさらに含み、レートコンパチブルデコーダ１２６は、挿入回路１１８およびパンクチャラブルコードデコーダ１２０をさらに含む。コントローラ１０６は、ハードウェア、ファームウェア（ソフトウェア）もしくはハードウェアおよびファームウェア両方の組み合わせによって実現されうる。ブロックコードエンコーダ１１２およびパンクチャラブルコードエンコーダ１１４は、各々フォワードエラー訂正（ＦＥＣ）を提供する。コントローラ１０６は、メモリアレイ１０８に対するデータ格納、およびメモリアレイ１０８からのデータの取出しを処理する。明瞭性のために、バッファ、行デコーダ、センス／増幅器回路などの既知のコンポーネントは、図１には示されていない。例えば、ブロックコードエンコーダ１１２とパンクチャラブルコードエンコーダ１１４との間には、エンコードされるべきデータを格納するために、バッファが存在しうる。パンクチャラブルコードエンコーダ１１４とパンクチャリング回路１１６との間には、パンクチャリングされるべきデータを格納するためにバッファが存在しうる。パンクチャリング回路１１６とメモリアレイ１０８のためのドライバとの間には、エンコードされた書き込まれるべきパンクチャドデータを格納するためにバッファが存在しうる。
【００１４】
一実施形態においては、メモリアレイ１０８は、ＮＡＮＤフラッシュメモリアレイに相当する。ＮＡＮＤフラッシュメモリアレイは、シングルレベルである可能性もあるし、マルチレベルである可能性もあるし、または、複数アレイに対応する可能性さえもある。ＮＡＮＤフラッシュメモリの文脈において特定の実施形態が記述されるが、本明細書で記述される原理および利点は、他のタイプのメモリに対しても適用可能である。種々の不揮発性ソリッドステートメモリタイプが、メモリアレイ１０８のために使用されうる。例えば、メモリアレイ１０８は、他の形式のフラッシュ（例えばＮＯＲタイプ）、電気的に消去可能なプログラマブルリードオンリーメモリ（ＥＥＰＲＯＭ）、磁気抵抗メモリ（ＭＲＡＭ）、プログラマブルコンダクタメモリ、強誘電体メモリなどに相当しうる。
【００１５】
書き込みバッファ１０４は、メモリアレイ１０８への格納を意図されるデータを格納する。読み出しバッファ１１０は、ＣＰＵ１０２によって読み出すために、メモリアレイ１０８から取り出されたデータを格納する。ＮＡＮＤフラッシュメモリの場合、通常は、１度に１“ページ”のデータがメモリアレイ１０８へと書き込まれるか、またはそこから読み出される。このデータページのサイズは、メモリデバイスによって変化しうる。典型的なページサイズは、５１２バイト、１０２４バイト、２０４８バイトなどを含むがそのいずれにも限定はされない。概略図においては、変数Ｎが、１ページに対するデータ量（例えば、バイト数）を表す。典型的には、ＣＰＵ１０２に対して有利なサイズになるように、特定のページサイズが固定されるが、メモリアレイ１０８に格納されるページサイズは、以下に詳細に説明されるように、コードレートに応じて変化する。
【００１６】
Ｎバイトの正常データが、ブロックコードエンコーダ１１２によってエンコードされる。ブロックコードの例は、Ｈａｍｍｉｎｇコード、Ｒｅｅｄ−Ｓｏｌｏｍｏｎエラー訂正コード、Ｂｏｓｅ−Ｃｈａｕｄｈｕｒｉ−Ｈｏｃｑｕｅｎｇｈｅｍ（ＢＣＨ）コードなどを含むが、そのいずれにも限定はされない。最大限度内においては、これらのブロックエラー訂正コードは、データ内の多くのエラーを検出し、訂正するために使用することができる。ブロックコードを使用してエンコードされたデータは、図１ではブロックコードバイトの変数ｙとして表される、さらなるバイトを占有する。従来のＮＡＮＤフラッシュメモリアレイにおいては、ブロックコードは、典型的には、対応するページのためのスペアバイト領域に格納され、この領域はブロックコードと同様に他の情報を含みうる。例示の目的のために、考えられるこれらの余剰バイトを、変数ｙに含める。したがって、従来のＮＡＮＤフラッシュメモリアレイの場合、Ｎバイトの正常データと、ｙバイトのエラー訂正データに対するページのために、Ｎ＋ｙバイトが格納される。典型的には、ブロックコードに対しては、Ｎ＋ｙバイトのうちのＮバイトは同一のデータのままであり、エラー訂正のためのｙブロックコードバイトが、Ｎバイトの正常データへと付加される。Ｎバイトの正常データは、ブロックコードエンコーダ１１２に対するオリジナルデータと考えられ、Ｎ＋ｙバイトはパンクチャラブルコードエンコーダ１１４に対するオリジナルデータと考えられうる。ブロックコードは、後にエンコードされたデータがデコードされるとき、エラーを検出および／もしくは訂正することを可能にする。
【００１７】
レートコンパチブルエンコーダ１２４は、ブロックエンコードされたデータをエンコードする。一実施形態においては、レートコンパチブルエンコーダ１２４は、パンクチャラブルコードエンコーダ１１４およびパンクチャリング回路１１６を含む。パンクチャラブルコードエンコーダ１１４は、ブロックコードエンコーダ１１２からのＮ＋ｙバイトのデータをエンコードするために、内部レートコンパチブルコード、例えば、畳み込みコードを使用してエンコードを行う。典型的には、パンクチャリングする前のコードに対するコードレートは、１／ｎ、例えば、１／２、１／３、１／４などである。このエンコードにより、ページに対するデータ量がｚ０倍だけ増加し、したがって、パンクチャラブルコードエンコーダ１１４の出力において、ｚ０（Ｎ＋ｙ）バイトが生成される。１／ｎのコードレートに対しては、ｚ０は、ｎに等しい。例えば、ハーフレート（１／２）コードレートに対しては、ｚ０は２に等しい。ハーフレートコードで畳み込みエンコードされたデータを生成することについて、図２に関連して後により詳細に記述される。
【００１８】
パンクチャリング回路１１６は、畳み込みエンコードされたデータをパンクチャリングする。一実施形態においては、パンクチャリング回路１１６の機能は、パンクチャラブルコードエンコーダ１１４と統合される。これによってデータ量は減少し、この減少により、コードレート（ｍ／ｎ）が増加する。パンクチャリング後、ページに対するビット数は、ｚ１（Ｎ＋ｙ）バイトであり、ここで、ｚ１は、パンクチャリング後のコードレートの逆数である。ｚ１（Ｎ＋ｙ）バイトはメモリアレイ１０８に格納される。データサイズが増加するにつれて、格納されるデータサイズの増加を反映するように、メモリアドレスを、メモリデバイス内部へマップすることもできる。パンクチャリングの利点の１つは、コードレート（ｍ／ｎ）を変化させ、それによって、格納されるリダンダンシー量に対して使用される格納量を変化させるために使用することが可能なことである。
【００１９】
パンクチャドコードのレートの例は、図３に関連して後に記述されるように、２／３および４／５を含むが、そのいずれにも限定はされない。他のコードレートも適用可能であり、当業者によって容易に決定されるであろう。コードレート（ｍ／ｎ）は、選択される特定のパンクチャパターンおよび、パンクチャリングされるデータをエンコードするために使用されるコードのコードレートに依存する。データが“パンクチャリングされる”とき、データのうちのあるビットが削除される。図１においては、パンクチャパターンもしくはパンクチャパターンの指示は、制御回路１２８によって提供される。コードレート（ｍ／ｎ）は、パンクチャパターンとともに変化し、それによって、パンクチャドデータを格納するために使用されるメモリアレイ１０８のスペース量が変化しうる。したがって、アドレス、行および／もしくは列のマッピングならびに個々のブロックによって使用されるコードレートの指示を、メモリアレイ１０８のリファレンス領域に格納し、制御回路１２８により使用ならびに／または選択することが可能であることが理解されるであろう。一実施形態においては、さらに、制御回路１２８は、パンクチャドデータのパンクチャリングレベルを示すリファレンス情報をメモリアレイ１０８に格納する。例えば、パンクチャパターンが格納されうる。一実施形態においては、リファレンス情報は、それ自体はパンクチャリングされず、そのため、パンクチャパターンを知らなくてもデコードすることが可能である。一例においては、リファンレス情報は、各ページの終端に格納される。しかしながら、リファレンス情報は、各ブロックの終端、またはアレイ全体に対して１つのブロック内などにも格納されうる。制御回路１２８の考えられる機能のさらなる例は、図４に関連して後に記述される。
【００２０】
レートコンパチブルデコーダ１２６は、パンクチャドデータをデコードする。レートコンパチブルデコーダ１２６は、パンクチャリングされていないデータもまた規定通りにデコードしうる。一実施形態においては、レートコンパチブルデコーダ１２６は、挿入回路１１８およびパンクチャラブルコードデコーダ１２０を含む。ｚ１（Ｎ＋ｙ）バイトのパンクチャドデータがメモリアレイ１０８から取り出されると、挿入回路１１８は、ダミーデータを挿入するためにパンクチャパターンを使用する。ダミーデータは、例えば、Ｖｉｔｅｒｂｉデコーダの可能性のあるデコーディングシーケンスについての確度計算（ブランチメトリクス）に影響を与えず、これにより、既に削除されたデータの代わりとなる（デパンクチャ）。一代替実施形態においては、ダミーデータを挿入するのではなく、特定のデータがパンクチャリングされたことをデコーダへ示すために、消去ポインタが使用される。一実施形態においては、挿入回路１１８の“挿入”機能は、パンクチャラブルコードデコーダ１２０におけるハードワイヤードの数学的均等物と入れ替わる。エラーの総数がレートコンパチブルコードのエラー訂正能力内である限り、パンクチャドデータを正確にデコードするのに十分なリダンダンシーが存在するはずである。
【００２１】
ｚ０（Ｎ＋ｙ）バイトの再構成されたコードは、パンクチャラブルコードデコーダ１２０によってデコードされる。一実施形態においては、パンクチャラブルコードデコーダ１２０は、Ｖｉｔｅｒｂｉデコーダであり、畳み込みエンコードされたデータをデコンボルブ（deconvolve）する。デコンボルブされたデータは、その後ブロックコードデコーダ１２２へと（例えば、さらなるエラー検出および／もしくは訂正のために）提供される。ブロックコードデコーダ１２２は、ｚ（Ｎ＋ｙ）バイトのブロックエンコードされたデータをデコードし、（そのエラーが訂正不可能ではない限り）Ｎバイトの訂正されたデータを生成する。このＮバイトの訂正されたデータは、ＣＰＵ１０２によるアクセスのために読み出しバッファ１１０に配置される。
【００２２】
比較的低いコードレートにおいては、ブロックコードエンコーダ１１２とレートコンパチブルエンコーダ１２４の組み合わせ由来の、外部ブロックコードおよび内部畳み込みコードの連結により、格納されたデータのインテグリティが改善し、訂正可能なデータの再生確度が増加するはずである。その効果は、ビットエラーレート（ＢＥＲ）の低下により観察することができる。ＢＥＲの改善を用いて、より価値の高いデータはより高いリダンダンシーでエンコードし、より価値の低いデータはより低いリダンダンシーでエンコードするように使用可能なメモリを割り当てることができる。例えば、ファームウェアなどのプログラムデータ、オペレーティングシステムもしくは他のプログラムデータは、音楽ファイルなどのアプリケーションデータよりも、より高いリダンダンシーでエンコードすることができる。別の例においては、図４に関連して後に記述されるように、メモリアレイ１０８の領域へと向かうデータの信頼性がより低いと識別されるものほど、このデータを、相対的により低いレートの内部コードと連結させることができる。例えば、内部コードのリダンダンシーおよびエラー訂正能力を増加させるために、パンクチャリング量を減少させるか、または、パンクチャリングを完全に無効にすることができる。
【００２３】
図２は、畳み込みエンコードデータのためのエンコーダ２００の一例を示し、これはレートコンパチブルエンコーダの一例である。エンコーダ２００は、ｍ／ｎコードレートが１／２である畳み込みコードを使用する。このエンコーダは、シフトレジスタ２０２、第一のモジュロ−２加算器２０４、第二のモジュロ−２加算器２０６を含む。モジュロ−２加算器２０４、２０６は、排他的ＯＲ（ＸＯＲ）論理を実施する。入力データビットＸが、シフトレジスタ２０２にシリアルに提供される。シフトレジスタ２０２およびモジュロ−２加算器２０４、２０６は、生成多項式Ｙ０、Ｙ１（各々モジュロ−２加算器２０４、２０６による）を実施する。生成多項式は、畳み込みエンコーダの伝達関数を特徴づける。種々の生成多項式が使用されうる。さらには、必要に応じて、３つ以上の生成多項式を計算することができ、それに対応して、コードレートが例えば１／３、１／４などに減少する。
【００２４】
図３は、データストリームを示す。例えば、図１に関連して、これらデータストリームは、パンクチャラブルコードエンコーダ１１４、パンクチャリング回路１１６、メモリアレイ１０８への格納およびそこからの取出し、挿入回路１１８、ならびにパンクチャラブルコードデコーダ１２０の周辺のパスにおいて生じるデータストリームに対応しうる。最上部の第一の例においては、データストリームは、１／２のコードレートを使用して畳み込みエンコードされ、パンクチャリングされることなく格納される。中間の第二の例においては、データストリームは、１／２のコードレートを使用して畳み込みエンコードされ、２／３のコードレートを実現するようにパンクチャリングされる。下部の第三の例においては、データストリームは、１／２のコードレートを使用して畳み込みエンコードされ、４／５のコードレートを実現するようにパンクチャリングされる。
【００２５】
最上部の第一の例に戻ると、ブロックコードエンコーダ１１２の出力由来のデータストリームｘ０，ｘ１，ｘ２，ｘ３，・・・は畳み込みエンコードされて、２つの出力データストリームｙ００，ｙ０１，ｙ０２，ｙ０３，・・・とｙ１０，ｙ１１，ｙ１２，ｙ１３，・・・が生成される。これらの二つの出力データストリームは、パンクチャリングされることなくメモリアレイ１０８に格納される。データがメモリアレイ１０８から取り出さされるとき、パンクチャラブルコードデコーダ１２０は、いかなるデータの挿入もなく、ｙ００，ｙ０１，ｙ０２，ｙ０３，・・・とｙ１０，ｙ１１，ｙ１２，ｙ１３，・・・のデータストリームをデコードすることが可能である。
【００２６】
中間の第二の例においては、データストリームｘ０，ｘ１，ｘ２，ｘ３，・・・は畳み込みエンコードされて、２つの出力データストリームｙ００，ｙ０１，ｙ０２，ｙ０３，・・・とｙ１０，ｙ１１，ｙ１２，ｙ１３，・・・が生成される。これら２つのデータストリームは、その後、ｙ００，ｙ０１，ｙ０２，ｙ０３，・・・とｙ１０，ｙ１２，・・・にパンクチャリングされて、メモリアレイ１０８に格納される。データ読み出しのために、パンクチャドデータｙ００，ｙ０１，ｙ０２，ｙ０３，・・・とｙ１０，ｙ１２，・・・はメモリアレイ１０８から取り出され、削除されたデータと置換するためにデコードを阻害しないダミー値が挿入されるか、または消去ポインタが使用される。挿入が行われたパンクチャドデータ、ｙ００，ｙ０１，ｙ０２，ｙ０３，・・・とｙ１０，−，ｙ１２，−，・・・は、パンクチャラブルコードデコーダ１２０によってデコードされて、もとのオリジナルデータストリームｘ０，ｘ１，ｘ２，ｘ３，・・・にデコードされる。ダッシュ記号（−）は、消去されたデータを示す。
【００２７】
下部の第三の例においては、データストリームｘ０，ｘ１，ｘ２，ｘ３，・・・は畳み込みエンコードされて、２つの出力データストリームｙ００，ｙ０１，ｙ０２，ｙ０３，・・・とｙ１０，ｙ１１，ｙ１２，ｙ１３，・・・が生成される。これら２つのデータストリームは、その後、ｙ００，ｙ０１，ｙ０２，ｙ０３，・・・とｙ１０，・・・にパンクチャリングされて、メモリアレイ１０８に格納される。データ読み出しのために、パンクチャドデータｙ００，ｙ０１，ｙ０２，ｙ０３，・・・とｙ１０，・・・はメモリアレイ１０８から取り出され、削除されたデータと置換するためにデコードを阻害しないダミー値が挿入されるか、または消去ポインタが使用される。挿入が行われたパンクチャドデータ、ｙ００，ｙ０１，ｙ０２，ｙ０３，・・・とｙ１０，−，−，−，・・・は、パンクチャラブルコードデコーダ１２０によってデコードされて、もとのオリジナルデータストリームｘ０，ｘ１，ｘ２，ｘ３，・・・にデコードされる。
【００２８】
図３に示されるように、レートコンパチブルコードは、コードレートを操作することによって、データを種々の密度で格納することを可能にする。したがって、比較的高いリダンダンシーが望まれる場合には、比較的低いコードレートを使用することができる。これによって、メモリデバイス１００（図１）が配置された後に、記憶容量と格納の信頼性との間でのトレードオフを実現させることが可能になる。従って、例えば、ユーザは、より信頼性の高いデータ格納か、もしくはより多くのデータ格納かの間で選択することが可能である。別の例においては、レートコンパチブルコードに対して使用される、畳み込みコードの拘束長ｋが変化しうる。拘束長ｋは、畳み込みエンコーダの伝達関数の長さのことを称する。より信頼性の高いデータ格納とデコードの複雑性との間でトレードオフを生じさせることができる。チップの選択部分を、例えば、比較的高いコードレートか、または比較的低いコードレート（およびその中間）へと、前もって割り当てることができる。別の例においては、ファームウェア、オペレーティングシステムなどのためのプログラムデータは、音楽もしくは文書のためのデータなどのアプリケーションデータよりも、より価値の高いものと考えられうる。しばしば、格納されているデータのタイプは、ヘッダを読み出すことによって識別可能である。したがって、より価値の高いデータを、より低いレートのコードによって提供されるより高いリダンダンシーとともに格納することができる。ページ、ブロック、パンクチャパターンなどの適用可能マッピングは、不良ブロックテーブルデータをも格納するデータのブロックなどとして、永続的メモリのリファレンス領域に格納されうる。
【００２９】
別の例においては、ｍ／ｎコードレートが１／４である畳み込みコードが生成される。パンクチャリングされていないコードレート１／４を有するこの畳み込みコードは、リファレンス情報を格納するために使用される。他のデータを格納する場合、この畳み込みコードは、１／３、もしくは１／２などの異なるコードレートへとパンクチャリングされる。一実施形態においては、パンクチャリング量は、図４に関連して後に記述されるように、選択可能である。さらには、メモリアレイ１０８（図１）は、複数レベルセルを有し、（パンクチャド、もしくはパンクチャリングされていない）畳み込みコード化されたデータが、セルの複数レベルにわたって散在しうる。
【００３０】
一実施形態においては、コードレートを、メモリデバイス１００（図１）が場に配置された後にでも変化させることができる。しかしながら、エンコードされたデータのページサイズおよびブロックサイズは、コードレートとともに変化し、したがって、開始もしくは停止アドレスの指標であり、どのパンクチャパターンが選択されるかなどを示すメモリマップも、適切に調整され、取出しのために永続的に格納されるべきであることに留意されたい。拘束長および／もしくは生成多項式が変化する場合、後の取出しのためにそれらを格納することもできる。コードレートに応じて、ブロックが消費するメモリの物理的スペースの量は変化するため、ブロックを消去するときにこれを割り当てることができる。図４は、コードレートの動的選択の一例を示す。
【００３１】
図４は、ＮＡＮＤフラッシュメモリデバイス中へのデータ格納のためのコードレートを動的に選択するためのプロセスを概略的に示すフローチャートである。例示されたプロセスは、本発明の趣旨と範囲から逸脱することなく、種々の方法で改変することが可能であることが当業者には理解されるであろう。例えば、別の実施形態においては、例示されたプロセスの種々の部分を組み合わせたり、別のシーケンスに再配置したり、除去したりすることが可能である。一実施形態においては、ＮＡＮＤフラッシュメモリデバイスの種々のブロックを、最初は、比較的高いコードレート（低いリダンダンシー）で開始させ、消耗するにつれて、より多くのリダンダンシーを得るためにコードレートを低下させることができる。
【００３２】
ＮＡＮＤフラッシュメモリデバイスにおいては、メモリは、複数ページの比較的大きなブロックで消去され、典型的には、データは一度に１ページ分書き込まれ、一度に１ページから読み出される。このプロセスは、ブロックを消去するコマンド、または消去されたブロックの一部をプログラムする（４１０）コマンドを受信することによって開始する。
【００３３】
このプロセスでは、特定のブロックのために使用されているコードレートにおいて、限界条件の指示が存在しているかどうかが決定される（４２０）。限界条件は、ブロックＥＣＣによって訂正されているビット数の増加によって、示されうる。例えば、ブロックＥＣＣが、さらなるエラーを訂正することが不可能になる前までに使用していいビットが１ビット以内であることを示す場合には、そのページおよび／もしくはブロックは、パンクチャリングが減少したことによりリダンダンシーが増加したために劣化し、減衰したと考えることができる。このことは、ブロックの寿命を延長させ、メモリデバイス１００（図１）の耐用期間を増加させうる。コードレートを動的に選択することが望ましい他の状況も存在する。先に言及された例の他に、メモリデバイス１００のメモリアレイにおいて、どの程度のメモリが使用可能かに応じてコードレートは選択されうる。図４に示されるプロセスは、一例に過ぎない。
【００３４】
フラッシュメモリチップは、消耗メカニズムを呈する。例えば、メモリデバイス１００（図１）を、最初のうちは比較的高いコードレート（例えば４／５）で動作するように製造中に構成することができる。メモリデバイス１００が消耗するにつれて、メモリデバイス１００が信頼性を維持するようにコードレートを低減させることができる。このブロックＥＣＣデコーディングは読み出し動作の間に実施されることに留意されたい。一実施形態においては、ブロックが消去される前に、ブロックが読み出され、このブロックのページに対するブロックＥＣＣがチェックされる。別の実施形態においては、ブロックのページは、通常の読み出し動作の間に、継続的に読み出される。
【００３５】
ブロックＥＣＣが、限界条件を示す場合には、コードレートは減少する（４３０）。これは、次組のデータのパンクチャリング量を減少させることによって達成されうる。例えば、コードレートは、２／３から１／２（パンクチャリングしない）へと調製されうる。
【００３６】
ブロックＥＣＣが限界条件を示さない場合には、それらメモリ位置へプログラムされるべき次組のデータに対して、直前のコードレートを使用し続けるように（４４０）、プロセスは進行しうる。
【００３７】
一実施形態は、データを受信するよう構成され、受信されたデータをパンクチャリングするように構成されたエンコーダと、パンクチャドデータを格納するよう構成された一つ以上のメモリアレイと、パンクチャドデータをデコードするよう構成されたデコーダとを含む装置である。
【００３８】
一実施形態は、一つ以上のメモリアレイを有する不揮発性メモリデバイスにデータを格納するための一方法である。その方法は、一つ以上のメモリアレイに格納するよう意図されたデータを受信するステップ、パンクチャドデータを生成するようデータをエンコードするステップ、および、パンクチャドデータを一つ以上のメモリアレイに格納するステップを含む。
【００３９】
一実施形態は、一つ以上のメモリアレイを有する不揮発性メモリデバイスに格納された、パンクチャドデータを取り出す一方法である。その方法は、メモリデバイスの一つ以上のメモリアレイからパンクチャドデータを取り出すステップと、パンクチャドデータに関連するパンクチャパターンに従って、パンクチャドデータをデコードするステップとを含む。
【００４０】
一実施形態は、不揮発性ソリッドステートメモリデバイス中のメモリスペースのブロックに対してコードレートを決定する一方法である。その方法は、メモリデバイスのデータのブロックの少なくとも一部に対して、限界条件が存在するかどうかを決定するステップと、限界条件が存在する場合に、そのブロックで使用されるコードレートを減少させるステップとを含む。
【００４１】
種々の実施形態が上述されてきた。これらの具体的な実施形態に関して説明されてきたが、この説明は例示的なものであって、限定することを意図するものではない。添付された請求項で定義されるような本発明の真の趣旨および範囲から逸脱することなく、種々の改変および適用法が当業者にとっては想到することができるものである。
【図１】
0005687062.tif 000002
【図２】
0005687062.tif 000003
【図３】
0005687062.tif 000004
【図４】
0005687062.tif 000005