IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 旺宏電子股▲ふん▼有限公司の特許一覧

<>
  • 特許-メモリシステムの誤り訂正管理 図1A
  • 特許-メモリシステムの誤り訂正管理 図1B
  • 特許-メモリシステムの誤り訂正管理 図2
  • 特許-メモリシステムの誤り訂正管理 図3
  • 特許-メモリシステムの誤り訂正管理 図4A
  • 特許-メモリシステムの誤り訂正管理 図4B
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B1)
(11)【特許番号】
(24)【登録日】2024-09-24
(45)【発行日】2024-10-02
(54)【発明の名称】メモリシステムの誤り訂正管理
(51)【国際特許分類】
   G06F 11/10 20060101AFI20240925BHJP
【FI】
G06F11/10 662
【請求項の数】 22
(21)【出願番号】P 2023144706
(22)【出願日】2023-09-06
【審査請求日】2023-09-06
(31)【優先権主張番号】18/350,877
(32)【優先日】2023-07-12
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】599129074
【氏名又は名称】旺宏電子股▲ふん▼有限公司
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】▲呉▼ 昇翰
(72)【発明者】
【氏名】▲黄▼ ▲ユ▼銘
【審査官】田中 幸雄
(56)【参考文献】
【文献】特開2020-42326(JP,A)
【文献】米国特許出願公開第2012/0151294(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/10
(57)【特許請求の範囲】
【請求項1】
メモリ;および
前記メモリに連結されて、
前記メモリのデータページからデータを読み取り;
前記読み取ったデータに対して、前記データと関連付けられた第1のECCデータに基づいて第1フェーズの誤り訂正符号(ECC)テストを行い、前記第1のECCデータは前記データと共に前記データページに格納されている;
前記読み取ったデータが前記第1フェーズのECCテストに通らないという判定に応答して、前記読み取ったデータの一部分に対して第2のECCデータに基づいて第2フェーズのECCテストを行う、ここで前記第2のECCデータは前記読み取ったデータの前記一部分に対応する前記データの一部分と関連付けられており、前記データページと異なる冗長ページに格納されている
ように構成されたメモリコントローラ
を備える、メモリシステム。
【請求項2】
前記データには、前記データの第1部分として前記データの前記一部分および前記データの第2部分を含む複数の部分が含まれ、前記読み取ったデータには、前記読み取ったデータの第1部分として前記読み取ったデータの前記一部分および前記データの前記第2部分に対応する前記読み取ったデータの第2部分を含む、前記読み取ったデータの複数の部分が含まれ、
前記メモリコントローラが、
前記読み取ったデータの前記第1部分が前記第2フェーズのECCテストに通るという判定に応答して、前記読み取ったデータの前記第2部分および前記読み取ったデータの前記第1部分の訂正されたデータに対して、前記第1のECCデータに基づいて前記第1フェーズのECCテストを行うように構成されている、請求項1に記載のメモリシステム。
【請求項3】
前記メモリコントローラがRAID(独立したディスクの冗長アレイ)回路を有し、
前記メモリコントローラが、前記読み取ったデータの前記一部分が前記第2フェーズのECCテストに通らないという判定に応答して、前記RAID回路を用いて、前記読み取ったデータに対して誤り訂正を行うように構成されている、請求項1または2に記載のメモリシステム。
【請求項4】
前記メモリコントローラがECCデコーダを有し、
前記メモリコントローラが前記ECCデコーダを用いて前記第1フェーズのECCテストおよび前記第2フェーズのECCテストを行うように構成されている、請求項1または2に記載のメモリシステム。
【請求項5】
前記メモリコントローラが、
前記読み取ったデータが前記第1フェーズのECCテストに通らないという判定に応答して、前記冗長ページから前記第2のECCデータを読み取り;
前記読み取ったデータの前記一部分および複数の予め決められた値の組み合わせに対して、前記第2のECCデータを用いてECCデコード動作を実行する、ここで前記読み取ったデータの前記一部分および前記複数の予め決められた値の合計サイズが前記読み取ったデータのサイズと同一である
ように構成されている、請求項1または2に記載のメモリシステム。
【請求項6】
前記メモリコントローラがECCエンコーダを有し、前記ECCエンコーダが、
前記データに基づいて前記第1のECCデータを生成し;
前記データの前記一部分および前記複数の予め決められた値に基づいて前記第2のECCデータを生成する
ように構成されている、請求項5に記載のメモリシステム。
【請求項7】
前記複数の予め決められた値が0または1の少なくとも一方を含む、請求項5に記載のメモリシステム。
【請求項8】
データの前記一部分のサイズが前記データのサイズの半分である、請求項1または2に記載のメモリシステム。
【請求項9】
前記メモリコントローラが、
前記読み取ったデータに対して前記第1のECCデータに基づいてECCデコード動作を実行し;
前記ECCデコード動作後の前記読み取ったデータにある誤りビットの数が予め決められた閾値より小さいかどうかを判定し;
前記誤りビットの数が前記予め決められた閾値より小さい場合、前記読み取ったデータが前記第1フェーズのECCテストに通ると判定し;
前記誤りビットの数が前記予め決められた閾値と同一またはこれより大きい場合、前記読み取ったデータが前記第1フェーズのECCテストに通らないと判定する
ように構成されている、請求項1または2に記載のメモリシステム。
【請求項10】
前記冗長ページには前記第2のECCデータと関連付けられたECCパリティデータが含まれ、
前記メモリコントローラが、
前記ECCパリティデータに基づいて前記第2のECCデータに対してECCデコード動作を実行して、訂正された第2のECCデータを生成し;
前記訂正された第2のECCデータに基づいて、前記読み取ったデータの前記一部分に対して前記第2フェーズのECCテストを行う
ように構成されている、請求項1または2に記載のメモリシステム。
【請求項11】
前記メモリには、前記データページを第1データページとして含む複数のデータページが含まれ、前記冗長ページが前記複数のデータページのそれぞれと異なり、
前記冗長ページには、前記複数のデータページにある特定部分のページデータと関連付けられた複数の第2のECCデータが含まれる、請求項1または2に記載のメモリシステム。
【請求項12】
前記複数のデータページのそれぞれにある特定部分のページデータのサイズが同一であり、
前記メモリコントローラが、
前記複数のデータページのそれぞれについて、前記データページにある前記ページデータに基づいてそれぞれの第1のECCデータを生成し、前記それぞれの第1のECCデータを前記データページに格納し;
前記データページにある前記ページデータの前記特定部分および複数の予め決められた値に基づいてそれぞれの第2のECCデータを生成し、前記データページ用の前記それぞれの第2のECCデータを前記冗長ページに格納する
ように構成されており、
前記データページにある前記特定部分のページデータおよび前記複数の予め決められた値の合計サイズが前記データページにある前記ページデータのサイズと同一である、請求項11に記載のメモリシステム。
【請求項13】
前記メモリには、それぞれが複数のブロックを有する1つまたは複数のメモリチップが含まれ、
前記複数のデータページが前記1つまたは複数のメモリチップのうちの1つの同じブロックにあり、前記冗長ページが前記1つまたは複数のメモリチップのうちの前記1つの前記同じブロックまたは異なるブロックにあるか、または
前記複数のデータページのうちの少なくとも2つが前記1つまたは複数のメモリチップのうちの1つの異なるブロックにあり、前記冗長ページが前記1つまたは複数のメモリチップのうちの前記1つ、または前記1つまたは複数のメモリチップのうちの異なる1つにあるか、または
前記複数のデータページのうちの少なくとも2つが前記メモリの異なるメモリチップにあり、前記冗長ページが前記メモリにある、請求項11に記載のメモリシステム。
【請求項14】
前記メモリコントローラが、
前記複数のデータページの2つまたはこれより多くのデータページのそれぞれのページデータに基づいてそれぞれの第1のECCデータを生成し、前記それぞれの第1のECCデータを前記2つまたはこれより多くのデータページのそれぞれに格納し;
前記2つまたはこれより多くのデータページの特定部分に基づいて複合データを生成し、前記複合データのサイズが前記2つまたはこれより多くのデータページの前記特定部分のそれぞれのサイズと同一である;
前記複合データおよび複数の予め決められた値に基づいて、対応する第2のECCデータを生成し、前記2つまたはこれより多くのデータページ用の前記対応する第2のECCデータを前記冗長ページに格納する
ように構成されている、請求項11に記載のメモリシステム。
【請求項15】
前記メモリコントローラが、
前記2つまたはこれより多くのデータページの第1データページから第1ページデータを読み取り;
読み取った前記第1ページデータに対して、前記第1データページの前記それぞれの第1のECCデータに基づいて第1フェーズのECCテストを行い;
読み取った前記第1ページデータが前記第1フェーズのECCテストに通らないという判定に応答して、前記2つまたはこれより多くのデータページの1つまたは複数の他のデータページから他のページデータを読み取り;
前記2つまたはこれより多くのデータページ用の前記対応する第2のECCデータを前記冗長ページから読み取り;
前記対応する第2のECCデータおよび前記1つまたは複数の他のデータページからの前記他のページデータに基づいて、読み取った前記第1ページデータの第1データ部分および前記複数の予め決められた値に対して第2フェーズのECCテストを行う
ように構成されている、請求項14に記載のメモリシステム。
【請求項16】
メモリ;および
前記メモリに連結されて、
前記メモリのデータページにあるデータに基づいて第1の誤り訂正符号(ECC)データを生成し;
前記第1のECCデータを前記データと共に前記データページに格納し;
前記データページにある前記データの一部分に基づいて第2のECCデータを生成し;
前記データページ用の前記第2のECCデータを前記データページと異なる冗長ページに格納する
ように構成されたメモリコントローラ
を備える、メモリシステム。
【請求項17】
前記メモリコントローラが、
前記データページにある前記データの前記一部分および複数の予め決められた値に基づいて前記第2のECCデータを生成するように構成されており、
前記データページにあるデータの前記一部分および前記複数の予め決められた値の合計サイズが、前記データページにある前記データのサイズと同一である、請求項16に記載のメモリシステム。
【請求項18】
前記メモリコントローラが、
前記メモリの前記データページから前記データを読み取り;
前記読み取ったデータに対して、前記データページにある前記第1のECCデータに基づいて第1フェーズのECCテストを行い;
前記読み取ったデータが前記第1フェーズのECCテストに通らないという判定に応答して、前記冗長ページから前記第2のECCデータを読み取り、前記第2のECCデータに基づいて、前記データの前記一部分に対応する前記読み取ったデータの一部分に対して第2フェーズのECCテストを行う
ように構成されている、請求項16または17に記載のメモリシステム。
【請求項19】
前記メモリには前記データページを含む複数のデータページが含まれ、前記冗長ページが前記複数のデータページのそれぞれと異なり、
前記メモリコントローラが、
前記複数のデータページの2つまたはこれより多くのデータページのそれぞれのページデータ上にそれぞれの第1のECCデータを生成し、前記それぞれの第1のECCデータを前記ページデータと共に前記2つまたはこれより多くのデータページのそれぞれに格納し;
前記2つまたはこれより多くのデータページの前記ページデータの特定部分に基づいて複合データを生成し、前記複合データのサイズが前記2つまたはこれより多くのデータページの前記ページデータの前記特定部分のそれぞれのサイズと同一である;
前記複合データに基づいて対応する第2のECCデータを生成し、前記2つまたはこれより多くのデータページ用の前記対応する第2のECCデータを前記冗長ページに格納する
ように構成されている、請求項16または17に記載のメモリシステム。
【請求項20】
前記メモリコントローラが、
前記2つまたはこれより多くのデータページの第1データページから第1ページデータを読み取り;
読み取った前記第1ページデータに対して、前記第1データページの前記それぞれの第1のECCデータに基づいて第1フェーズのECCテストを行い;
読み取った前記第1ページデータが前記第1フェーズのECCテストに通らないという判定に応答して、前記2つまたはこれより多くのデータページの1つまたは複数の他のデータページから1つまたは複数の他の特定部分のページデータを読み取り;
前記2つまたはこれより多くのデータページ用の前記対応する第2のECCデータを前記冗長ページから読み取り;
前記対応する第2のECCデータおよび前記1つまたは複数の他のデータページからの前記1つまたは複数の他の特定部分のページデータに基づいて、読み取った前記第1ページデータの第1データ部分および複数の予め決められた値に対して第2フェーズのECCテストを行う
ように構成されている、請求項19に記載のメモリシステム。
【請求項21】
メモリシステムの誤り訂正を管理するための方法であって、
メモリのデータページからデータを読み取る段階;
前記読み取ったデータに対して、前記データと関連付けられた第1のECCデータに基づいて第1フェーズの誤り訂正符号(ECC)テストを行う段階、前記第1のECCデータは前記データと共に前記データページに格納されている;および
前記読み取ったデータが前記第1フェーズのECCテストに通らないという判定に応答して、前記読み取ったデータの一部分に対して第2のECCデータに基づいて第2フェーズのECCテストを行う段階、ここで前記第2のECCデータは前記読み取ったデータの前記一部分に対応する前記データの一部分と関連付けられており、前記データページと異なる冗長ページに格納されている、
を備える、方法。
【請求項22】
さらに、
前記データページにある前記データに基づいて前記第1のECCデータを生成し、前記第1のECCデータを前記データページに格納する段階;および
前記データページにある前記データの前記一部分および複数の予め決められた値に基づいて前記第2のECCデータを生成し、前記データページ用の前記第2のECCデータを前記冗長ページに格納する段階
を備え、
前記データページにあるデータの前記一部分のおよび前記複数の予め決められた値の合計サイズが、前記データページにある前記データのサイズと同一である、請求項21に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、メモリシステム、例えばメモリシステムの誤り訂正を対象にしている。
【背景技術】
【0002】
データストレージデバイス(例えば、メモリシステム)のメモリセルがプログラミングされると、セル閾値電圧を1つまたは複数の読み取り電圧と比較して各メモリセルのプログラミング状態を感知することで、メモリセルからデータの読み取りが可能になる。しかしながら、セル閾値電圧は、読み取り妨害またはデータ保持といった1つまたは複数の要因によって変わることがあり、これにより、感知されたプログラミング状態と書き込まれたプログラミング状態が異なってしまい、データの読み取り出力にフェイルビットが発生する場合がある。
【発明の概要】
【0003】
本開示では、メモリシステム、例えば不揮発性メモリ(NVM)システムの誤り訂正を管理するためのシステムおよび手法について説明する。
【0004】
本開示の1つの態様では、メモリシステムに注目する。このシステムには、メモリ、およびメモリに連結されて、メモリのデータページからデータを読み取り;読み取ったデータに対して、データと関連付けられた第1のECCデータに基づいて第1フェーズの誤り訂正符号(ECC)テストを行い、第1のECCデータはデータと共にデータページに格納されている;読み取ったデータが第1フェーズのECCテストに通らないという判定に応答して、読み取ったデータの一部分に対して第2のECCデータに基づいて第2フェーズのECCテストを行う、ここで第2のECCデータは読み取ったデータの一部分に対応するデータの一部分と関連付けられており、データページと異なる冗長ページに格納されている、ように構成されたメモリコントローラが含まれる。いくつかの実装形態では、第2のECCデータのサイズが第1のECCデータのサイズと同一である。
【0005】
いくつかの実装形態において、データには、データの第1部分としてデータの一部分およびデータの第2部分を含む複数の部分が含まれ、読み取ったデータには、読み取ったデータの第1部分として読み取ったデータの一部分およびデータの第2部分に対応する読み取ったデータの第2部分を含む、読み取ったデータの複数の部分が含まれる。メモリコントローラは、読み取ったデータの第1部分が第2フェーズのECCテストに通るという判定に応答して、読み取ったデータの第2部分、および読み取ったデータの第1部分の訂正されたデータに対して、第1のECCデータに基づいて第1フェーズのECCテストを行うように構成されている。
【0006】
いくつかの実装形態において、メモリコントローラは、読み取ったデータの第2部分、および読み取ったデータの第1部分の訂正されたデータが第1フェーズのECCテストに通るという判定に応答して、読み取ったデータの第2部分の訂正されたデータおよび読み取ったデータの第1部分の訂正されたデータをデータの読み出しデータとして出力するように構成されている。
【0007】
いくつかの実装形態において、メモリコントローラはRAID(独立したディスクの冗長アレイ)回路を含み、メモリコントローラは、読み取ったデータの一部分が第2フェーズのECCテストに通らないという判定に応答して、RAID回路を用いて、読み取ったデータに対して誤り訂正を行うように構成されている。RAID回路は、メモリに外付けされた1つまたは複数の他のメモリデバイスに、データ用の冗長データを格納するように構成されてよい。
【0008】
いくつかの実装形態において、メモリコントローラはECCデコーダを含み、メモリコントローラは、ECCデコーダを用いて第1フェーズのECCテストおよび第2フェーズのECCテストを行うように構成されている。
【0009】
いくつかの実装形態において、メモリコントローラは、読み取ったデータが第1フェーズのECCテストに通らないという判定に応答して、冗長ページから第2のECCデータを読み取り;読み取ったデータの一部分および複数の予め決められた値の組み合わせに対して、第2のECCデータを用いてECCデコード動作を実行する、ここで読み取ったデータの一部分および複数の予め決められた値の合計サイズが読み取ったデータのサイズと同一である、ように構成されている。
【0010】
いくつかの実装形態において、メモリコントローラはECCエンコーダを含み、これは、データに基づいて第1のECCデータを生成し;データの一部分および複数の予め決められた値に基づいて第2のECCデータを生成するように構成されている。
【0011】
いくつかの実装形態において、メモリコントローラは、データページからデータの一部分を抽出してデータの一部分をキャッシュページに格納し;処理ユニットまたは特定の回路によって、複数の予め決められた値をキャッシュページに充填し;データの一部分および複数の予め決められた値をエンコードして第2のECCデータを生成するように構成されている。
【0012】
いくつかの実装形態において、複数の予め決められた値には、0または1の少なくとも一方が含まれる。いくつかの実装形態において、第1のECCデータには、ECCエンコーダを用いてデータ用に生成されたECC検査ビットが含まれる。いくつかの実装形態において、データの一部分のサイズがデータのサイズの半分である。
【0013】
いくつかの実装形態において、メモリコントローラは、読み取ったデータに対して第1のECCデータに基づいてECCデコード動作を実行し;ECCデコード動作後の読み取ったデータにある誤りビットの数が予め決められた閾値より小さいかどうかを判定し;誤りビットの数が予め決められた閾値より小さい場合、読み取ったデータが第1フェーズのECCテストに通ると判定し;誤りビットの数が予め決められた閾値と同一またはこれより大きい場合、読み取ったデータが第1フェーズのECCテストに通らないと判定するように構成されている。
【0014】
いくつかの実装形態において、メモリコントローラは、読み取ったデータの一部分に対して第2のECCデータに基づいてECCデコード動作を実行し;ECCデコード動作後の読み取ったデータの一部分にある誤りビットの数が予め決められた閾値より小さいかどうかを判定し;誤りビットの数が予め決められた閾値より小さい場合、読み取ったデータの一部分が第2フェーズのECCテストに通ると判定し;誤りビットの数が予め決められた閾値と同一またはこれより大きい場合、読み取ったデータの一部分が第2フェーズのECCテストに通らないと判定するように構成されている。
【0015】
いくつかの実装形態において、冗長ページには第2のECCデータと関連付けられたECCパリティデータが含まれ、メモリコントローラは、ECCパリティデータに基づいて第2のECCデータに対してECCデコード動作を実行して、訂正された第2のECCデータを生成し;訂正された第2のECCデータに基づいて、読み取ったデータの一部分に対して第2フェーズのECCテストを行うように構成されている。
【0016】
いくつかの実装形態において、メモリには、データページを第1データページとして含む複数のデータページが含まれ、冗長ページは複数のデータページのそれぞれと異なり、冗長ページには、複数のデータページにある特定部分のページデータと関連付けられた複数の第2のECCデータが含まれる。複数の第2のECCデータの合計サイズが、データのサイズを超えることはない。
【0017】
いくつかの実装形態において、複数のデータページのそれぞれにある特定部分のページデータのサイズが同一であり、メモリコントローラは、複数のデータページのそれぞれについて、データページにあるページデータに基づいてそれぞれの第1のECCデータを生成し、それぞれの第1のECCデータをデータページに格納し;データページにあるページデータの特定部分および複数の予め決められた値に基づいてそれぞれの第2のECCデータを生成し、データページ用のそれぞれの第2のECCデータを冗長ページに格納するように構成されている。データページにある特定部分のページデータおよび複数の予め決められた値の合計サイズが、データページにあるページデータのサイズと同一であってよい。
【0018】
いくつかの実装形態において、メモリには、それぞれが複数のブロックを有する1つまたは複数のメモリチップが含まれ、複数のデータページは1つまたは複数のメモリチップのうちの1つの同じブロックにあり、冗長ページは1つまたは複数のメモリチップのうちの上記1つの上記同じブロックまたは異なるブロックにあるか、または複数のデータページのうちの少なくとも2つが1つまたは複数のメモリチップのうちの1つの異なるブロックにあり、冗長ページは1つまたは複数のメモリチップのうちの上記1つ、または1つまたは複数のメモリチップのうちの異なる1つにあるか、または複数のデータページのうちの少なくとも2つがメモリの異なるメモリチップにあり、冗長ページはメモリにある。
【0019】
いくつかの実装形態において、メモリシステムは、メモリおよびメモリコントローラを含む第1のメモリデバイス;および第2のメモリデバイスを含む。冗長ページには、第2のメモリデバイスにある特定のデータページと関連付けられた特定の第2のECCデータが含まれる。
【0020】
いくつかの実装形態において、メモリコントローラは、複数のデータページのうちの2つまたはこれより多くのデータページのそれぞれのページデータに基づいてそれぞれの第1のECCデータを生成し、それぞれの第1のECCデータを2つまたはこれより多くのデータページのそれぞれに格納し;2つまたはこれより多くのデータページの特定部分に基づいて複合データを生成し、複合データのサイズが2つまたはこれより多くのデータページの特定部分のそれぞれのサイズと同一である;複合データおよび複数の予め決められた値に基づいて、対応する第2のECCデータを生成し、2つまたはこれより多くのデータページ用の対応する第2のECCデータを冗長ページに格納するように構成されている。
【0021】
いくつかの実装形態において、メモリコントローラは、2つまたはこれより多くのデータページの特定部分に対してXOR論理演算を適用することにより、複合データを生成するように構成されている。
【0022】
いくつかの実装形態において、メモリコントローラは、2つまたはこれより多くのデータページの第1データページから第1ページデータを読み取り;読み取った第1ページデータに対して、第1データページのそれぞれの第1のECCデータに基づいて第1フェーズのECCテストを行い;読み取った第1ページデータが第1フェーズのECCテストに通らないという判定に応答して、2つまたはこれより多くのデータページの1つまたは複数の他のデータページから他のページデータを読み取り;2つまたはこれより多くのデータページ用の対応する第2のECCデータを冗長ページから読み取り;対応する第2のECCデータおよび1つまたは複数の他のデータページからの他のページデータに基づいて、読み取った第1ページデータの第1データ部分および複数の予め決められた値に対して第2フェーズのECCテストを行うように構成されている。
【0023】
本開示の別の態様では、メモリシステムに注目する。このシステムにはメモリ;およびメモリに連結されて、メモリのデータページにあるデータに基づいて第1の誤り訂正符号(ECC)データを生成し;このデータと共に第1のECCデータをデータページに格納し;データページにあるデータの一部分に基づいて第2のECCデータを生成し;データページと異なる冗長ページにデータページ用の第2のECCデータを格納するように構成されたメモリコントローラが含まれる。
【0024】
いくつかの実装形態において、メモリコントローラは、データページにあるデータの一部分および複数の予め決められた値に基づいて、第2のECCデータを生成するように構成されている。データページにあるデータの一部分および複数の予め決められた値の合計サイズが、データページにあるデータのサイズと同一であってよい。第2のECCデータのサイズが第1のECCデータのサイズと同一であってよい。
【0025】
いくつかの実装形態において、メモリコントローラは、メモリのデータページからデータを読み取り;読み取ったデータに対して、データページにある第1のECCデータに基づいて第1フェーズのECCテストを行い;読み取ったデータが第1フェーズのECCテストに通らないという判定に応答して、冗長ページから第2のECCデータを読み取り、第2のECCデータに基づいて、データの一部分に対応する読み取ったデータの一部分に対して第2フェーズのECCテストを行うように構成されている。
【0026】
いくつかの実装形態において、メモリにはデータページを含む複数のデータページが含まれ、冗長ページは複数のデータページのそれぞれと異なり、メモリコントローラは、複数のデータページのうちの2つまたはこれより多くのデータページのそれぞれのページデータ上にそれぞれの第1のECCデータを生成し、それぞれの第1のECCデータをページデータと共に2つまたはこれより多くのデータページのそれぞれに格納し;2つまたはこれより多くのデータページのページデータの特定部分に基づいて複合データを生成し、複合データのサイズが2つまたはこれより多くのデータページのページデータの特定部分のそれぞれのサイズと同一であり;複合データに基づいて対応する第2のECCデータを生成し、2つまたはこれより多くのデータページ用の対応する第2のECCデータを冗長ページに格納するように構成されている。
【0027】
いくつかの実装形態において、メモリコントローラは、複合データおよび複数の予め決められた値に基づいて、対応する第2のECCデータを生成するように構成されている。いくつかの実装形態において、メモリコントローラは、2つまたはこれより多くのデータページのページデータの特定部分に対してXOR論理演算を適用することにより、複合データを生成するように構成されている。
【0028】
いくつかの実装形態において、メモリコントローラは、2つまたはこれより多くのデータページの第1データページから第1ページデータを読み取り;読み取った第1ページデータに対して、第1データページのそれぞれの第1のECCデータに基づいて第1フェーズのECCテストを行い;読み取った第1ページデータが第1フェーズのECCテストに通らないという判定に応答して、2つまたはこれより多くのデータページの1つまたは複数の他のデータページから1つまたは複数の他の特定部分のページデータを読み取り;2つまたはこれより多くのデータページ用の対応する第2のECCデータを冗長ページから読み取り;対応する第2のECCデータおよび1つまたは複数の他のデータページからの1つまたは複数の他の特定部分のページデータに基づいて、読み取った第1ページデータの第1データ部分および複数の予め決められた値に対して第2フェーズのECCテストを行うように構成されている。
【0029】
いくつかの実装形態において、メモリコントローラは、読み取った第1ページデータの第1データ部分および複数の予め決められた値に対して、対応する第2のECCデータおよび1つまたは複数の他のデータページからの1つまたは複数の他の特定部分のページデータに基づいて第2フェーズのECCテストを行うように構成されている。
【0030】
本開示の別の態様では、方法に注目する。本方法は、メモリのデータページからデータを読み取る段階;読み取ったデータに対して、データと関連付けられた第1のECCデータに基づいて第1フェーズの誤り訂正符号(ECC)テストを行う段階、第1のECCデータはデータと共にデータページに格納されている;および読み取ったデータが第1フェーズのECCテストに通らないという判定に応答して、読み取ったデータの一部分に対して第2のECCデータに基づいて第2フェーズのECCテストを行う段階、ここで第2のECCデータは読み取ったデータの一部分に対応するデータの一部分と関連付けられており、データページと異なる冗長ページに格納されている、を含む。
【0031】
いくつかの実装形態において、本方法はさらに、データページにあるデータに基づいて第1のECCデータを生成し、第1のECCデータをデータページに格納する段階;およびデータページにあるデータの一部分および複数の予め決められた値に基づいて、第2のECCデータを生成し、データページ用の第2のECCデータを冗長ページに格納する段階を含む。データページにあるデータの一部分および複数の予め決められた値の合計サイズが、データページにあるデータのサイズと同一であってよい。
【0032】
上記手法の実装形態には、方法、システム、コンピュータプログラム製品、およびコンピュータ可読媒体が含まれる。1つの例では、メモリおよびメモリに連結されたメモリコントローラを含むメモリシステムによって方法が行われてよく、本方法はメモリコントローラおよびメモリによって行われる上述した動作、例えば、メモリシステムの誤り訂正を管理するための動作を含むことが可能である。別の例では、1つのそのようなコンピュータプログラム製品が、1つまたは複数のプロセッサにより実行可能な命令を格納する非一時的なマシン可読媒体で適切に具現化される。この命令は、1つまたは複数のプロセッサに上述した動作を行わせるように構成されている。1つのそのようなコンピュータ可読媒体は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに上述した動作を行わせるように構成された命令を格納する。
【0033】
1つまたは複数の開示された実装形態の詳細が、添付図面および以下の説明に記載されている。この説明、図面、および特許請求の範囲から、他の特徴、態様、および利点が明らかになるであろう。
【図面の簡単な説明】
【0034】
図1A】誤り訂正能力を備えたシステムの一例についての概略図である。
【0035】
図1B】メモリチップの一例についての概略図である。
【0036】
図2】メモリシステムにおける誤り訂正用のマルチフェーズのECCデータを生成する一例を示している。
【0037】
図3】メモリシステムにおける誤り訂正用のマルチフェーズのECCデータを生成する別の例を示している。
【0038】
図4A】メモリシステムにおける誤り訂正用のマルチフェーズのECCデータを生成する一処理例のフローチャートである。
【0039】
図4B】メモリシステムにおける誤り訂正を管理する一処理例のフローチャートである。
【0040】
様々な図面における同様な参照番号および名称は、同様な要素を示す。図に示す様々な例示的実装形態は、単なる説明表現にすぎず、必ずしも縮尺どおりに描かれているわけではないことも理解されたい。
【発明を実施するための形態】
【0041】
頻繁な読み取り動作によって、メモリに格納されたデータが読み取り妨害に遭うことがあり、メモリ内のメモリセルの状態、例えば、消去状態および1つまたは複数のプログラミング状態によって閾値電圧が増加した可能性がある。読み取り妨害によって、データの読み取り出力にフェイルビット(または誤りビット)が発生する場合がある。誤り訂正符号(ECC)デコーダが、メモリから読み取ったデータをデコードして、データに存在し得るあらゆるビット誤りを、ECC方式の誤り訂正能力まで検出し且つ訂正するように構成されてよい。
【0042】
RAID(独立したディスクの冗長アレイ)とは、データ冗長性、性能向上、またはその両方のために、複数の物理ディスクドライブ装置を組み合わせて1つまたは複数の論理ユニットにするデータストレージ仮想化技術のことである。データは、必要なレベルの冗長性および性能に応じて、RAIDレベルと呼ばれる複数の方式のうちの1つで異なるディスクドライブに割り当てられる。異なる方式またはデータ割り当てレイアウトが、「RAID」という単語の後に続く数字、例えば、RAID0、RAID1、RAID2、…、RAID9、またはそれ以上によって命名されている。各方式またはRAIDレベルによって、信頼性、可用性、性能、および容量という主要目標間の様々なバランスが提供される。RAID0より高いRAIDレベルでは、物理ドライブ全体の故障に対する保護の他に、回復不可能なセクタ読み取りエラーに対する保護も提供できる。
【0043】
同じページにユーザデータとして格納されているECCデータとは異なり、RAID冗長データは、様々な物理ディスクドライブ装置に格納されている。したがって、RAIDは、ページ間RAIDまたはディスク間RAID保護を提供し、付加的な保護としてECC訂正不可能なデータを回復することができる。しかしながら、ページ間RAIDまたはディスク間RAID保護を行うには、フェイルデータを求めて全てのページを読み取るが、これにはデータを回復するのにECCよりはるかに長い時間を要する。
【0044】
本開示の実装形態では、例えば、マルチフェーズのECC保護(またはマルチフェーズのECC誤り訂正)を用いてメモリシステムの誤り訂正を管理するためのシステム、方法、および手法を提供する。この手法は、ECC保護(または誤り訂正)の能力を強化して、標準的なECC方式では訂正不可能なデータを回復することができる。この手法は、同じECCハードウェア(例えば、ECCエンコーダおよびデコーダ)を用いて、RAID回路を用いることなく、および/または既存のハードウェア構成を変更することなく、同様のRAID機能を実現できる。この手法は、データ訂正および保護の付加的な/さらなる強化のために、RAID回路または技術を用いても実現され得る。
【0045】
いくつかの実装形態では、例えば、図2および図4Aに関するさらなる詳細について論じるように、第1フェーズのECC保護の場合、ECCエンコーダがメモリの各データページにあるデータをエンコードして、データページにあるデータと共に格納される第1のECCデータを生成し;第2フェーズのECC保護の場合、ECCエンコーダはデータの一部分(例えば、データの半分)を予め決められた値(例えば、1または0)と共にエンコードして、データとは別に冗長ページに格納される第2のECCデータを生成する。冗長ページは、複数のページからのデータの一部分用に第2のECCデータを格納できる。予め決められた値は固定されているので、第2のECCデータはデータの一部分(例えば、データの半分)を訂正するのに用いられるだけであり、したがって、第2のECCデータは第1のECCデータより高いECC能力を提供できる。一例として、データの一部分がデータの半分であり、且つ第2のECCデータが第1のECCデータと同じ長さのECC検査ビットを含む場合、第2のECCデータは第1のECCデータより2倍のECC能力を持つことができる。
【0046】
読み取り動作では、例えば、図4Bに関するさらなる詳細について論じるように、データページにある第1のECCデータがデータを訂正できない場合、例えば、第1フェーズのECC保護が失敗した場合、コントローラがデータページ用の第2のECCデータを冗長ページから取り出す(または抽出する)ことができる。第2のECCデータの方が高いECC能力を有するので、データの一部分の訂正には第2のECCデータが用いられてよい。データの一部分が訂正された後に、訂正されたデータの一部分はデータ内のデータの一部分を置き換えることができ、次いで、データの残りの部分を訂正するのに第1のECCデータが用いられてよい。データの残りの部分のサイズはデータより小さいので、第1のECCデータは、データの残りの部分に対してより高いECC能力を持つことができる。こうして、第2フェーズのECC保護によって、第1フェーズのECC保護の訂正不可能なデータを回復することが可能になる。第2フェーズのECC保護では、2つのページ(データページおよび冗長ページ)だけが、ECC保護を実施するのに読み取られる。第1フェーズのECC保護が失敗した場合に全てのページ(例えば、8~128個のページ)を読み取る必要があるページ間RAID保護を用いたRAID技術と比較した場合、本明細書で実現される手法の方が、速い速度および速い応答を提供する。
【0047】
いくつかの実装形態において、第2フェーズのECC保護はRAID技術を利用して、性能をさらに向上させる。例として、例えば図3に関するさらなる詳細について論じるように、多数のデータページを少数の利用可能な冗長ページで保護する必要がある場合には、同じ第2のECCデータを用いて複数のデータページの一部分を保護することができる。複数のデータページの一部分は、例えば、XORなどの1つまたは複数の論理/数学関数を用いて複合データを生成するのに用いられてよい。複合データは、各一部分と同じサイズ(例えば、データページの半分)を持つことができる。次いで複合データは、冗長ページに格納される第2のECCデータを生成するためにエンコードされてよい。そのようにして、冗長ページは、より多くのデータページに第2フェーズのECC保護を提供できる。読み取り動作において、複合データおよび第2のECCデータを生成するための複数のデータページは、複数のデータページのうちのいずれか1つの第2フェーズのECC保護のために読み出される。
【0048】
この手法は、異なるシナリオに適用できる。いくつかの実装形態では、複数のデータページがメモリチップの同じブロックにあり、複数のデータページ用の第2のECCデータを格納する冗長ページが同じメモリチップの同じブロックまたは異なるブロックにあってよい。いくつかの実装形態では、複数のデータページのうちの少なくとも2つがメモリチップの異なるブロックにあり、冗長ページは上記メモリチップまたは異なるメモリチップのブロックにあってよい。いくつかの実装形態では、複数のデータページのうちの少なくとも2つがメモリデバイスの異なるメモリチップにあり、冗長ページは上記メモリデバイスまたは異なるメモリデバイスのメモリチップにあってよい。いくつかの実装形態では、複数のデータページのうちの少なくとも2つが、メモリシステムのソリッドステートドライブ(SSD)といった異なるメモリデバイスにあり、冗長ページは、異なるメモリデバイスのうちの1つ、または上記メモリシステムの別のメモリデバイスにあってよい。これらの手法は、個々に、またはRAID技術と組み合わせて適用できる。
【0049】
この手法は、様々なタイプの半導体デバイス、揮発性メモリデバイス、または不揮発性メモリ(NVM)デバイス、とりわけ、NAND型フラッシュメモリ、NOR型フラッシュメモリ、抵抗変化型ランダムアクセスメモリ(RRAM)、相変化ランダムアクセスメモリ(PCRAM)などの相変化メモリ(PCM)、スピン注入トルク(STT)磁気抵抗ランダムアクセスメモリ(MRAM)などに適用できる。この手法は、電荷トラップ型のメモリデバイス、例えば、シリコン/酸化物/窒化物/酸化物/シリコン(SONOS)メモリデバイスおよび浮遊ゲート型のメモリデバイスにも適用できる。この手法は、2次元(2D)メモリデバイスまたは3次元(3D)メモリデバイスに適用できる。この手法は、例えば、SLC(シングルレベルセル)デバイスや、2レベルセルデバイス、TLC(トリプルレベルセル)デバイス、QLC(クアッドレベルセル)デバイス、またはPLC(ペンタレベルセル)デバイスのようなMLC(マルチレベルセル)デバイスなどの様々なメモリタイプに適用できる。追加的にまたは代替的に、この手法は、とりわけ、セキュアデジタル(SD)カード、埋め込みマルチメディアカード(eMMC)、またはソリッドステートドライブ(SSD)、埋め込みシステムなどの様々なタイプのデバイスおよびシステムに適用できる。
【0050】
図1Aは、誤り訂正能力を備えたシステム100の一例を示している。システム100は、デバイス110およびホストデバイス120を含む。ホストデバイス120はホストコントローラ122を含み、このホストコントローラは、少なくとも1つのプロセッサ、および少なくとも1つのプロセッサに連結され且つ少なくとも1つのプロセッサが1つまたは複数の対応する動作を行うのに実行するプログラミング命令を格納した少なくとも1つのメモリを含むことができる。
【0051】
いくつかの実装形態において、デバイス110はストレージデバイスである。例えば、デバイス110は、埋め込みマルチメディアカード(eMMC)、セキュアデジタル(SD)カード、ソリッドステートドライブ(SSD)、または何らかの他の好適なストレージとすることができる。いくつかの実装形態において、デバイス110は、スマートウォッチ、デジタルカメラ、またはメディアプレーヤである。いくつかの実装形態において、デバイス110は、ホストデバイス120に連結されたクライアントデバイスである。例えば、デバイス110は、ホストデバイス120であるデジタルカメラまたはメディアプレーヤに入っているSDカードである。
【0052】
いくつかの実装形態において、ホストデバイス120は1つまたは複数のデバイス110(例えば、SSD)に連結されている。各デバイス110は、デバイスコントローラ112およびメモリ150を含むことができる。メモリ150は、それぞれがデバイスコントローラ112に連結された1つまたは複数のメモリチップ152を含むことができる。図1Bは、複数のブロック154(例えば、ブロック0、ブロック1、…、ブロックm-1、およびブロックm)を含むメモリチップ152の一構成例を示している。各ブロックは、同じ数のページ156(例えば、ページ0、ページ1、…、ページn)を含むことができる。各ページは、ブロック内で一意の番号を有する。データは、ブロック内のページの一意の番号の順序に従って、ブロックのページに格納される。各ページは別個に読み取りまたは書き込みが可能であり、ブロック内のページはまとめて消去が可能である。
【0053】
デバイスコントローラ112は、汎用マイクロプロセッサまたは特定用途向けマイクロコントローラである。いくつかの実装形態において、デバイスコントローラ112は、デバイス110のメモリコントローラである。以下のセクションでは、デバイスコントローラ112がメモリコントローラである実装形態に基づいて、様々な手法を説明する。しかしながら、以下のセクションで説明する手法は、デバイスコントローラ112がメモリコントローラとは異なる別のタイプのコントローラである実装形態においても適用可能である。
【0054】
いくつかの実装形態において、デバイスコントローラ112は、プロセッサ113および内蔵メモリ114を含む。プロセッサ113は、命令を実行してデータを処理するように構成されている。これらの命令には、ファームウェアコードおよび/または他のプログラムコードとしてそれぞれ二次メモリに格納された、ファームウェア命令および/または他のプログラム命令が含まれる。データとしては、好適なデータの中でもとりわけ、プロセッサによって実行されるファームウェアおよび/または他のプログラムに対応するプログラムデータが含まれる。いくつかの実装形態において、プロセッサ113は、汎用マイクロプロセッサまたは特定用途向けマイクロコントローラである。プロセッサ113は、中央演算処理装置(CPU)とも呼ばれる。
【0055】
プロセッサ113は、内蔵メモリ114から命令およびデータにアクセスする。いくつかの実装形態において、内蔵メモリ114は、スタティックランダムアクセスメモリ(SRAM)またはダイナミックランダムアクセスメモリ(DRAM)である。例えば、いくつかの実装形態において、デバイス110がeMMC、SDカード、またはスマートウォッチである場合、内蔵メモリ114はSRAMである。いくつかの実装形態において、デバイス110がデジタルカメラまたはメディアプレーヤである場合、内蔵メモリ114はDRAMである。
【0056】
いくつかの実装形態において、内蔵メモリ114は、図1Aに示すように、デバイスコントローラ112に含まれているキャッシュメモリである。内蔵メモリ114は、プロセッサ113により実行される命令に対応する命令コード、および/または実行時にプロセッサ113により要求されるデータを格納する。
【0057】
デバイスコントローラ112は、命令コードおよび/またはデータをメモリ150から内蔵メモリ114へ転送する。いくつかの実装形態において、メモリ150は、命令および/またはデータの長期保存用に構成されたストレージデバイスまたは不揮発性メモリ(NVM)、例えば、NAND型フラッシュメモリデバイス、または何らかの他の好適な不揮発性メモリデバイスである。メモリ150がNAND型フラッシュメモリである実装形態において、デバイス110はフラッシュメモリデバイス、例えば、フラッシュメモリカードであり、デバイスコントローラ112はNAND型フラッシュコントローラである。例えば、いくつかの実装形態において、デバイス110がeMMCまたはSDカードである場合、メモリ150はNAND型フラッシュであり;いくつかの実装形態において、デバイス110がデジタルカメラである場合、メモリ150はSDカードであり;いくつかの実装形態において、デバイス110がメディアプレーヤである場合、メモリ150はハードディスクである。
【0058】
いくつかの実装形態において、デバイスコントローラ112は、ホストデバイス120からデータおよび命令を受け取り、そこへデータを送るように構成されている。デバイスコントローラ112はさらに、メモリ150へデータおよびコマンドを送り、メモリ150からデータを受け取るように構成されている。例えば、デバイスコントローラ112は、データおよび書き込みコマンドを送り、そのデータを指定アドレスに格納するようメモリ150に指示するように構成されている。別の例として、デバイスコントローラ112は、ホストデバイス120から読み取り要求(または読み取りコマンド)を受け取り、対応する読み取りコマンドをメモリ150へ送り、メモリ150の指定アドレスからデータを読み取るように構成されている。
【0059】
いくつかの実装形態において、図1Aに示すように、デバイスコントローラ112はECC回路130を含む。ECC回路130は、ECCエンコーダ132およびECCデコーダ134を含むことができる。いくつかの実装形態において、ECC回路130は、デバイスコントローラ112に外部連結されるように配置することが可能である。
【0060】
ECCエンコーダ132は、メモリ150に格納されるデータを受け取り、且つ、例えば、ECCエンコード方式を用いてデータをエンコードすることによって、検査ビットを生成するように構成されてよい。検査ビットは、ECCデータと呼ばれることがある。ECCエンコーダ132としては、リードソロモンエンコーダ、Bose-Chaudhuri-Hocquenghem(BCH)エンコーダ、低密度パリティ検査(LDPC)エンコーダ、またはこれらの任意の組み合わせを挙げることができる。ECCデコーダ134は、メモリ150から読み取ったデータをデコードして、データに存在し得るあらゆるビット誤りを、ECC方式の誤り訂正能力まで検出し且つ訂正するように構成されてよい。ECCデコーダ134は、BCHデコーディングまたはLDPCデコーディングを行うことができる。
【0061】
いくつかの実装形態において、ECCエンコーダ132は、予め決められた長さまたはサイズ(例えば、4KB)のデータをエンコードして、予め決められたサイズ(例えば、512B)のECCデータを生成するように構成されている。ECCデコーダ134は、予め決められたサイズ(例えば、512B)のECCデータを用いて、予め決められた長さまたはサイズ(例えば、4KB)のデータをデコードするように構成されている。同じサイズのデータの場合、大きいサイズのECCデータの方が、小さいサイズのECCデータより高い誤り訂正能力を提供できる。同じサイズのECCデータの場合、ECCデータは、大きいサイズのデータより小さいサイズのデータに、高い誤り訂正能力を提供できる。例えば、4KBのECCエンコーダが512BのECCデータを生成する。ECCエンコーダを用いて、2KBのデータおよび2KBの予め決められた(または固定された)値(例えば、1または0)をエンコードして512BのECCデータを生成する場合。ECCデコーダがECCデータを用いてデータをデコードする場合、2KBのデータに基づいて生成された512BのECCデータは、4KBのデータに基づいて生成された512BのECCデータより高い誤り訂正能力を提供できる。以下でさらなる詳細について、例えば、図2図3、および図4A図4Bに関して論じるように、ECCエンコーダ132およびECCデコーダ134は、マルチフェーズのECC保護を提供するのに用いられてよい。
【0062】
いくつかの実装形態において、デバイスコントローラ112は、RAID技術を用いてデータを保護するように構成されたRAID回路(またはRAID回路構成)140を含む。RAID回路140は、あるRAIDレベル、例えば、RAID0、RAID1、RAID2、…、RAID9、またはこれらの任意の組み合わせで、異なるディスクドライブにデータを割り当てることができる。RAID回路140は、ECC回路130を用いるマルチフェーズのECC保護が失敗した場合、さらなるフェーズの誤り保護を提供するように構成されてよい。
【0063】
図2は、メモリシステムにおける誤り訂正用のマルチフェーズのECCデータを生成する一例200を示している。メモリシステムは、メモリコントローラ(例えば、図1Aのデバイスコントローラ112)およびメモリ(例えば、図1Aのメモリ150)を有するメモリデバイス(例えば、図1Aのデバイス110)を含むことができる。メモリは、1つまたは複数のメモリチップ(例えば、図1A図1Bのメモリチップ152)を含むことができる。各メモリチップは、それぞれが複数のページ(例えば、図1Bのページ156)を含む複数のブロック(例えば、図1Bのブロック154)を含む。
【0064】
説明のために、マルチフェーズのECC保護(またはマルチフェーズのECC誤り訂正)を複数のデータページ(例えば、ページ0(202-0)、ページ1(202-1)、ページ2(202-2)、ページ3(202-3)、…、ページM-1(202-(M-1)))に対して実施し、これらのページはデータページ202と一般に呼ばれ、またデータページ202と個々に呼ばれ得る。Mは1に等しいまたはこれより大きい整数である。具体的一例では、Mが7である。各データページ202には、データページ202のそれぞれのユーザデータ212が格納されている。
【0065】
第1フェーズのECC保護の場合、ECCエンコーダ220(例えば、図1AのECCエンコーダ132)が複数のデータページ202のそれぞれ、例えば、図2に示すページ0(202-0)のユーザデータ212をエンコードして、ECCデータ222を生成する。上述したように、ECCエンコーダ220としては、リードソロモンエンコーダ、Bose-Chaudhuri-Hocquenghem(BCH)エンコーダ、低密度パリティ検査(LDPC)エンコーダ、またはこれらの任意の組み合わせを挙げることができる。ECCデータ222は、ユーザデータ212のECC検査ビット(またはECC保護ビット)を含むことができる。ECCデータ222は、同じデータページ202にユーザデータ212として格納されてよく、例えば、データページ202のユーザデータ212に追加されてよい。
【0066】
ECCエンコーダ220は、予め決められた長さまたはサイズのデータをエンコードして、予め決められたサイズのECCデータを生成するように構成されている。例えば、ECCエンコーダ220は、サイズが4KBのデータをエンコードするように構成された4KBのECCエンコーダとすることができる。ユーザデータ212は4KBのサイズを持つことができ、ECCデータ222は512Bのサイズを持つことができる。いくつかの例において、データページ202は16KBのユーザデータを格納する。ECCエンコーダ220は、4KBごとにユーザデータ212をエンコードして、サイズが512Bの対応するECCデータ222を生成し、対応するECCデータ222をデータページ202のユーザデータ212のすぐ隣に格納することができる。ECCエンコーダ220は、4回繰り返して、データページ202の16KBのユーザデータ全てをエンコードすることができる。対応するECCデータ222は、第1フェーズのECCデータまたは第1のECCデータと呼ばれることがある。「第1フェーズのECCデータ」および「第1のECCデータ」という用語は、本開示において区別なく用いられ得ることに留意されたい。
【0067】
第2フェーズのECC保護の場合、図2に示すように、コントローラ(例えば、図1Aのデバイスコントローラ112)がユーザデータ212のデータ部分214をデータページ202から抽出し、データ部分214をECCエンコーダ220の入力としてキャッシュページ230に入れることができる。キャッシュページ230は、コントローラのキャッシュ(またはデータバッファ)(例えば、図1Aの内蔵メモリ114にあるキャッシュまたはECCエンコーダ220のキャッシュ)内にあってよい。
【0068】
いくつかの実装形態において、例えば、図2に示すように、コントローラは、キャッシュページ230の残りの空間を固定データ216(例えば、複数の予め決められた値)で充填することで、データ部分214および固定データ216の合計サイズがECCエンコーダ220の予め決められたデータサイズに適合する(例えば、一致する)ようにする。固定データ216は、データを充填するように構成されたコントローラのプロセッサ(例えば、図1Aのプロセッサ113)またはコントローラ内の特定の回路によってキャッシュページ230に充填されてよい。固定データ216は、1、0、または任意の固定値のうちの少なくとも1つを含むことができる。
【0069】
いくつかの例において、ECCエンコーダ220は4KBのECCエンコーダ220であり、ユーザデータ212は4KBである。データ部分214がユーザデータ212の半分、例えば、2KBである場合、キャッシュページに充填される固定データ216のサイズは2KBである。そのようにして、エンコーダ220はなおも、キャッシュページ230のデータ(例えば、データ部分214および予め決められた値216)をエンコードしてECCデータ224を生成するのに用いられてよい。ECCデータ224は、ECCデータ222と同じサイズ(例えば、512B)を持つことができる。
【0070】
ユーザデータ212用のECCデータ222と比較すると、ECCデータ224はデータ部分214および固定データ216のためのものである。固定データ216は予め決められた/固定された値を含み、誤りビットがないので、ECCデータ224は全て、(例えば、図1AのECCデコーダ134などのECCデコーダを用いて)データ部分214のデコードおよび訂正に用いられてよい。データ部分214はユーザデータ212の一部分であり、ユーザデータ212よりサイズが小さいので、ECCデータ224がECCデータ222と同じサイズである場合、ECCデータ224は、ユーザデータ212用のECCデータ222よりデータ部分214に対して高い誤り訂正能力を持つことができる。例えば、データ部分214がユーザデータ212の半分であり、ECCデータ224がECCデータ222と同じサイズである場合、ECCデータ224はECCデータ222の2倍の誤り訂正能力を持つ。
【0071】
ECCデータ224は、第2フェーズのECCデータまたは第2のECCデータと呼ばれることがある。「第2フェーズのECCデータ」および「第2のECCデータ」という用語は、本開示において区別なく用いられ得ることに留意されたい。第2フェーズのECCデータ224は、第1フェーズのECCデータ222がユーザデータ212を訂正できない場合、データ部分214およびユーザデータ212を訂正するのに用いられてよい。例えば、第2フェーズのECCデータ224でデータ部分214が訂正された後に、訂正されたデータ部分214はユーザデータ212のデータ部分を置き換えることができ、第1フェーズのECCデータ222は、訂正されたデータ部分214を有するユーザデータ212の残りの部分のデコードおよび訂正に改めて用いられてよい。こうして、ユーザデータ212の全体が第1フェーズのECCデータ222および第2フェーズのECCデータ224で訂正され得る。
【0072】
いくつかの実装形態では、データ部分214のサイズがユーザデータ212のサイズの半分である。すなわち、データ部分214はユーザデータ212の50%である。データ部分は、ユーザデータ212の50%より小さくすることも、またはユーザデータ212の50%より大きくすることもできる。
【0073】
固定データ216は、任意の好適な方式でキャッシュページ230に充填されてよい。いくつかの実装形態において、固定データ216は、キャッシュページ230のデータ部分214に隣接して配置される。いくつかの実装形態では、固定データ216の値(例えば、1または0)がデータ部分214のビット同士の間に割り当てられるか、または挿入される。いくつかの実装形態において、固定データ216は、データ部分214の異なる位置に充填される2つまたはこれより多くの部分に分割される。
【0074】
ECCデータ224は、例えば、図2に示すように、冗長ページ204(例えば、ページM)に格納されてよい。コントローラ(例えば、ECCエンコーダ220)は、複数のデータページ202のそれぞれに対してそれぞれのECCデータ224を生成することができる。したがって、冗長ページ204は、複数のデータページ202のためにM個のECCデータ224を格納することができる。冗長ページ204は、複数のデータページ202のそれぞれと同じサイズを持つことができる。M個のECCデータ224の合計サイズが、冗長ページ204のサイズを超える可能性はない。冗長ページ204は、M個のデータページ202用に構成されてよい。いくつかの例において、Mは7と同一である。いくつかの実装形態において、冗長ページ204は任意選択で、第2のECCデータ224に隣接して冗長ページ204に格納され得る独自のECCデータ226を生成するために、例えば、ECCエンコーダ220によりエンコードされてよい。ECCデータ226は任意選択で、例えば、第2フェーズのECC保護のために第2フェーズのECCデータ224を抽出する前に、冗長ページ204の誤りビットを訂正するのに用いられてよい。
【0075】
冗長ページ204は、複数のデータページ202のそれぞれと異なってよい。いくつかの実装形態において、複数のデータページ202はメモリチップの同じブロックにあり、冗長ページ204は上記メモリチップの同じブロックまたは異なるブロックにあってよい。いくつかの実装形態では、複数のデータページ202のうちの少なくとも2つがメモリチップの異なるブロックにあり、冗長ページ204は同じメモリの同じメモリチップまたは異なるメモリチップにあってよい。いくつかの実装形態では、複数のデータページ202のうちの少なくとも2つが同じメモリの少なくとも2つのメモリチップにあり、冗長ページ204は上記メモリの少なくとも2つのメモリチップと異なるメモリチップにあってよい。いくつかの実装形態では、複数のデータページ202のうちの少なくとも2つがメモリシステムの少なくとも2つのメモリデバイス(例えば、SSD)にあり、冗長ページ204は上記メモリシステムの少なくとも2つのメモリデバイスと異なるメモリデバイスにあってよい。
【0076】
いくつかの実装形態において、コントローラは、ECCエンコーダ220と異なり得る第2のECCエンコーダを含む。第2のECCエンコーダは、データ部分214と同じサイズ(例えば、2KB)のデータをエンコードするように構成されてよい。それに応じて、コントローラは、データ部分214と同じサイズ(例えば、2KB)のデータをデコードするように構成された対応する第2のECCデコーダを含むことができる。データ部分214のために、さらなるデータ(例えば、固定データ216)をキャッシュページに追加することが必要になる可能性はない。その代わり、データ部分214は第2のECCエンコーダの入力として直接的に用いられてよい。いくつかの例において、第2のECCエンコーダにより生成されるECCデータは、ECCデータ224またはECCデータ222と同じサイズを持つことができる。そのようにして、第2のECCエンコーダにより生成されるECCデータは、ユーザデータ212のECCデータ222より高い誤り訂正能力を持つことができる。第2のECCエンコーダにより生成されるECCデータは、第1フェーズのECCデータ222を用いる第1フェーズのECC保護が失敗した場合、第2フェーズの保護を提供するための第2フェーズのECCデータ(または第2のECCデータ)としても用いられてよい。
【0077】
いくつかの例において、第2のECCエンコーダにより生成されるECCデータは、ECCデータ222のサイズより大きいサイズにすることができる。いくつかの例において、第2のECCエンコーダにより生成されるECCデータは、ECCデータ222のサイズより小さいがサイズ閾値より大きいサイズにすることができる。例えば、データ部分214がユーザデータ212の半分のサイズである場合、サイズ閾値はECCデータ222の半分のサイズとすることができる。
【0078】
図3は、メモリシステムにおいて誤り訂正用のマルチフェーズのECCデータを生成する別の例300を示している。各データページがそれぞれの第2フェーズのECCデータを有する図2の例200と異なり、例300では、複数のデータページのデータ部分に1つまたは複数の論理演算および/または数学演算(例えば、XOR)を用いて、複数のデータページ用の単一の第2フェーズのECCデータを獲得する。こうすることで、冗長ページの空間を省くこと、および/またはマルチフェーズのECC保護のために多数のデータページ用の第2フェーズのECCデータを格納する冗長ページの数を削減することが可能になる。
【0079】
図2の例200と同様に、メモリシステムは、メモリコントローラ(例えば、図1Aのデバイスコントローラ112)およびメモリ(例えば、図1Aのメモリ150)を有するメモリデバイス(例えば、図1Aのデバイス110)を含むことができる。メモリは、1つまたは複数のメモリチップ(例えば、図1A図1Bのメモリチップ152)を含むことができる。各メモリチップは、それぞれが複数のページ(例えば、図1Bのページ156)を含む複数のブロック(例えば、図1Bのブロック154)を含む。メモリコントローラは、ECCエンコーダ320(例えば、図1AのECCエンコーダ132)およびECCデコーダ(例えば、図1AのECCデコーダ134)を含むことができる。
【0080】
説明のために、マルチフェーズのECC保護(またはマルチフェーズのECC誤り訂正)を複数のデータページ(例えば、ページ0(302-0)、ページ1(302-1)、ページ2(302-2)、ページ3(302-3)、…、ページN-1(302-(N-1)))に対して実施し、これらのページはデータページ302と一般に呼ばれ、またデータページ302と個々に呼ばれ得る。Nは2に等しいまたはこれより大きい整数である。いくつかの例において、Nは15、31、63、127、255、またはこれより多い。
【0081】
データページ302は、図2のデータページ202と同様にする、またはこれと同じにすることができる。各データページ302には、データページ302のそれぞれのユーザデータ312が格納されている。図2の例200と同様に、第1フェーズのECC保護では、例300において、ECCエンコーダ320(例えば、図1AのECCエンコーダ132または図2の220)がそれぞれデータページ302のユーザデータ312のためにそれぞれの第1フェーズのECCデータ(または第1のECCデータ)322を生成することが可能であり、第1フェーズのECCデータ322はユーザデータ312に隣接してデータページ302に格納されてよい。例えば、図3に示すように、ページ0(データページ302-0)がユーザデータ312-0および第1フェーズのECCデータ322-0を格納し、ページ1(データページ302-1)がユーザデータ312-1および第1フェーズのECCデータ322-1を格納し、ページ2(データページ302-2)がユーザデータ312-2および第1フェーズのECCデータ322-2を格納し、ページ3(データページ302-3)がユーザデータ312-3および第1フェーズのECCデータ322-3を格納し、…、ページN-1(データページ302-(N-1))がユーザデータ312-(N-1)および第1フェーズのECCデータ322-(N-1)を格納する。
【0082】
第2フェーズのECC保護の場合、各データページ202がそれぞれの第2フェーズのECCデータ224を冗長ページ204(ページM)に有する図2の例200と異なり、例300では、複数のデータページのデータ部分に1つまたは複数の論理演算または数学演算(例えば、XOR)を用いて、複数のデータページ用の単一の第2フェーズのECCデータを冗長ページ304(ページN)に入れる。1つまたは複数の論理演算または数学演算は、RAID技術に用いるものと同様にする、またはこれと同じにすることができる。
【0083】
例えば、図3に示すように、ページ0(データページ302-0)におけるユーザデータ312-0のデータ部分314-0、およびページ1(データページ302-1)におけるユーザデータ312-1のデータ部分314-1、および任意選択で1つまたは複数の他のデータページ302におけるユーザデータ312の1つまたは複数の他のデータ部分がXOR演算315を用いて演算されて、複合データ316が生成され得る。XOR演算315は、エンコードする前に、メモリコントローラ(例えば、ECCエンコーダ320または特定の論理ゲートまたは回路)によって行われてよい。データ部分314-0、314-1、…は、データ部分314と一般に呼ばれ、またデータ部分314と個々に呼ばれ得る。複合データ316は、データ部分314のそれぞれと同じサイズである。例えば、データ部分314が2KBのサイズを有する場合、複合データ316も2KBのサイズを有する。そのようにして、複数のデータページ302のユーザデータ312のデータ部分314が単一の複合データ316で表されてよく、これは複数のデータページ302用の第2フェーズのECCデータ324を生成するのに用いられてよい。第2フェーズのECCデータ324は、第1フェーズのECCデータ322と同じサイズ(例えば、512B)にすることができる。
【0084】
いくつかの実装形態において、図2の例200と同様に、例300では、複合データ316がECCエンコーダ320の入力としてキャッシュページ330に格納される。固定データ318は、キャッシュページ330に充填されてよい。固定データ318は、図2の固定データ216と同様にする、またはこれと同じにすることができる。固定データ318は、複数の予め決められた値(例えば、1または0)を含むことができる。複合データ316および固定データ318の合計サイズが、ユーザデータ312と同一である。具体的一例では、それぞれのユーザデータ312が4KBのサイズを有し、それぞれのデータ部分314がユーザデータ312の半分(すなわち、2KB)である。そうすると、複合データ316は2KBのサイズを有し、固定データ318は2KBのサイズを有する。そのようにして、ECCエンコーダ320は、第1フェーズのECCデータ322および第2フェーズのECCデータ324の生成に用いられてよい。
【0085】
複数のデータページ302は、複数のグループのデータページ302に分割されてよい。データページ302の各グループは、それぞれの第2フェーズのECCデータ324と関連付けられてよい。複数のグループのそれぞれの第2フェーズのECCデータ324は、冗長ページ304に格納されてよい。それぞれの第2フェーズのECCデータ324の合計サイズが、ユーザデータ312のサイズまたは冗長ページ304の空間容量を超える可能性はない。いくつかの実装形態では、図2の例200と同様に、例300において、冗長ページ304に格納された第2フェーズのECCデータ324を、例えば、ECCエンコーダ320でエンコードして、第2フェーズのECCデータ324と共に冗長ページ304に格納されるECCデータ326を生成することができる。読み取り動作時に、第2フェーズのECCデータ324を第2フェーズのECC保護に用いる前に、ECCデータ326は任意選択で、冗長ページ304に格納された第2フェーズのECCデータ324のビット誤りを訂正するのに用いられてよい。
【0086】
複数のデータページ302の数は1より大きい整数とすることができ、複数のグループの数はn、すなわち1より大きい整数とすることができる。いくつかの例において、ユーザデータ312が4KBのサイズを有し、第2フェーズのECCデータ324がそれぞれ512Bのサイズを有する場合、nは8とすることができる。
【0087】
いくつかの例において、複数のデータページ302の数が15(例えば、N=15)である場合、2個のデータページ302のグループが7個、および単一のデータページ302が1個存在し得る。各グループが、複合データ316を生成し、且つそのグループの第2フェーズのECCデータ324を生成するのに用いられ、単一のデータページ302自体は、単一のデータページ302の第2フェーズのECCデータ324を生成するのに用いられる。15個のデータページ302に対して第2フェーズのECCデータ324が8個あり、これが冗長ページ304に格納される。したがって、XOR演算を用いると、1個の冗長ページで15個のデータページ302に第2フェーズのECC保護を提供できる。
【0088】
いくつかの例において、複数のデータページ302の数が31(例えば、N=31)である場合、4個のデータページ302のグループが7個、および3個のデータページ302のグループが1個存在し得る。各グループが、複合データ316を生成し、且つそのグループの第2フェーズのECCデータ324を生成するのに用いられる。31個のデータページ302に対してもなお、第2フェーズのECCデータ324が8個あり、これが冗長ページ304に格納される。したがって、XOR演算を用いると、1個の冗長ページで31個のデータページ302に第2フェーズのECC保護を提供できる。
【0089】
いくつかの例において、複数のデータページ302の数が63(例えば、N=63)である場合、8個のデータページ302のグループが7個、および7個のデータページ302のグループが1個存在し得る。各グループが、複合データ316を生成し、且つそのグループの第2フェーズのECCデータ324を生成するのに用いられる。63個のデータページ302に対して第2フェーズのECCデータ324が8個あり、これが冗長ページ304に格納される。したがって、XOR演算を用いると、1個の冗長ページで63個のデータページ302に第2フェーズのECC保護を提供できる。
【0090】
図2の冗長ページ204と同様に、冗長ページ304は複数のデータページ302のそれぞれと異なってよい。いくつかの実装形態において、複数のデータページ302はメモリチップの同じブロックにあり、冗長ページ304は上記メモリチップの同じブロックまたは異なるブロックにあってよい。いくつかの実装形態では、複数のデータページ302のうちの少なくとも2つがメモリチップの異なるブロックにあり、冗長ページ304は同じメモリの同じメモリチップまたは異なるメモリチップにあってよい。いくつかの実装形態では、複数のデータページ302のうちの少なくとも2つが同じメモリの少なくとも2つのメモリチップにあり、冗長ページ304は上記メモリの少なくとも2つのメモリチップと異なるメモリチップにあってよい。いくつかの実装形態では、複数のデータページ302のうちの少なくとも2つがメモリシステムの少なくとも2つのメモリデバイス(例えば、SSD)にあり、冗長ページ304は上記メモリシステムの少なくとも2つのメモリデバイスと異なるメモリデバイスにあってよい。
【0091】
図4Aは、メモリシステムにおける誤り訂正用のマルチフェーズのECCデータを生成する一処理例400のフローチャートである。メモリシステムは、メモリコントローラ(例えば、図1Aのデバイスコントローラ112)およびメモリ(例えば、図1Aのメモリ150)を有するメモリデバイス(例えば、図1Aのデバイス110)を含むことができる。メモリは、1つまたは複数のメモリチップ(例えば、図1A図1Bのメモリチップ152)を含むことができる。各メモリチップは、それぞれが複数のページ(例えば、図1Bのページ156)を含む複数のブロック(例えば、図1Bのブロック154)を含む。メモリコントローラは、ECCエンコーダ(例えば、図1AのECCエンコーダ132、図2の220、または図3の320)およびECCデコーダ(例えば、図1AのECCデコーダ134)を含むことができる。処理400は、メモリシステム(例えば、メモリコントローラ)により行われてよい。
【0092】
メモリシステムは、ホストデバイス(例えば、図1Aのホストデバイス120)からデータを受け取り、このデータをメモリシステムの複数のデータページに格納することができる。メモリシステムは、格納されたデータにデータ誤り保護(例えば、図2または図3に示したマルチフェーズのECC保護、および任意選択でRAIDデータ保護)を提供することができる。複数のデータページは、図2の複数のデータページ202または図3の複数のデータページ302とすることができる。
【0093】
段階402では、第1のECCデータ(または第1フェーズのECCデータ)が、複数のデータページのそれぞれに格納されたデータに基づいて生成され、そのデータと共にデータページに格納される。第1のECCデータは、ECCエンコーダにより生成されてよい。複数のデータページのそれぞれに格納されたデータは、図2のユーザデータ212または図3のユーザデータ312とすることができる。第1のECCデータは、図2の第1のECCデータ222または図3の第1のECCデータ322とすることができる。
【0094】
段階404では、第2のECCデータ(または第2フェーズのECCデータ)が、複数のデータページのそれぞれに格納されたデータの一部分に基づいて生成され、データページと異なる冗長ページに格納される。冗長ページは、図2の冗長ページ204または図3の冗長ページ304とすることができる。格納されたデータの一部分は、図2のデータ部分214または図3のデータ部分314とすることができる。
【0095】
いくつかの実装形態では、例えば、図2に示すように、メモリコントローラが、データページに格納されたデータの一部分、および複数の予め決められた値(例えば、図2の固定データ216)に基づいて、第2のECCデータを生成する。複数の予め決められた値には、1または0の少なくとも一方が含まれてよい。格納されたデータの一部分が抽出されて、キャッシュページ(例えば、図2のキャッシュページ230)に格納されてよい。この一部分は、格納されたデータの半分とすることができる。複数の予め決められた値は、キャッシュページに充填されてよい。データページに格納されたデータの一部分および複数の予め決められた値の合計サイズが、データページに格納されたデータのサイズと同一である。ECCエンコーダはキャッシュページにあるデータをエンコードして、データページ用の第2のECCデータを生成することができる。データページに格納されたデータの一部分用の第2のECCデータは、データページに格納されたデータ用の第1のECCデータと同じサイズを持つことができる。
【0096】
いくつかの実装形態において、複数のデータページは複数のグループに分割される。各グループには、1つまたは複数のデータページが含まれてよい。2つまたはこれより多くのデータページを含むグループの場合、例えば、図3に示すように、2つまたはこれより多くのデータページの特定部分のページデータが、例えば、XOR演算で最初に演算されて、複合データ(例えば、図3の複合データ316)が生成されてよく、次いで、第2のECCデータ(例えば、図3の第2のECCデータ324)が、複合データおよび複数の予め決められた値(例えば、図3の固定データ318)に基づいて生成されてよい。「ページデータ」という用語は、データページに格納されたデータのことを指す。そのグループ用の第2のECCデータは次いで、冗長ページに格納されてよい。複合データのサイズが、2つまたはこれより多くのデータページのページデータの特定部分のそれぞれのサイズと同一であってよい。複合データおよび複数の予め決められた値の合計サイズが、データページにあるページデータのサイズと同一である。2つまたはこれより多くのデータページの特定部分のページデータ用の第2のECCデータは、2つまたはこれより多くのデータページのそれぞれのページデータ用の第1のECCデータと同じサイズを持つことができる。
【0097】
いくつかの実装形態において、メモリシステムがRAID回路(例えば、図1AのRAID回路140)を含む場合、メモリシステムは、RAID回路を用いて、例えば、メモリシステムの複数のディスクドライブ装置(メモリチップなど)にデータを格納して、データを保護することができる。
【0098】
いくつかの実装形態において、複数のデータページはメモリのメモリチップの同じブロックにあり、冗長ページは同じメモリチップの同じブロックまたは異なるブロックにあってよい。いくつかの実装形態では、複数のデータページのうちの少なくとも2つがメモリのメモリチップの異なるブロックにあり、冗長ページはメモリの同じメモリチップまたは異なるメモリチップにあってよい。いくつかの実装形態では、複数のデータページのうちの少なくとも2つがメモリの少なくとも2つのメモリチップにあり、冗長ページは上記メモリの少なくとも2つのメモリチップと異なるメモリチップにあってよい。いくつかの実装形態では、複数のデータページのうちの少なくとも2つがメモリシステムの少なくとも2つのメモリデバイス(例えば、SSD)にあり、冗長ページは上記メモリシステムの少なくとも2つのメモリデバイスと異なるメモリデバイスにあってよい。
【0099】
図4Bは、メモリシステムにおける誤り訂正を管理する一処理例450のフローチャートである。メモリシステムは、図4Aのメモリシステムと同様に、またはこれと同じにすることができる。メモリシステムは、メモリコントローラ(例えば、図1Aのデバイスコントローラ112)およびメモリ(例えば、図1Aのメモリ150)を有するメモリデバイス(例えば、図1Aのデバイス110)を含むことができる。メモリは、1つまたは複数のメモリチップ(例えば、図1A図1Bのメモリチップ152)を含むことができる。各メモリチップは、それぞれが複数のページ(例えば、図1Bのページ156)を含む複数のブロック(例えば、図1Bのブロック154)を含む。メモリコントローラは、ECCエンコーダ(例えば、図1AのECCエンコーダ132、図2の220、または図3の320)およびECCデコーダ(例えば、図1AのECCデコーダ134)を含むことができる。処理450は、メモリシステム(例えば、メモリコントローラ)により行われてよい。
【0100】
メモリシステムは、ホストデバイス(例えば、図1Aのホストデバイス120)から要求を受け取ることができる。この要求は、メモリシステムに格納されたデータを読み取るための読み取り要求とすることができる。上述したように、データは、マルチフェーズのECC保護を受けた複数のデータページに格納されてよい。
【0101】
段階452では、データ(例えば、図2のユーザデータ212または図3の312)が複数のデータページ(例えば、図2のデータページ202または図3の302)のそれぞれから読み取られる。段階454では、読み取ったデータに対して、このデータと関連付けられた第1のECCデータに基づいて第1フェーズのECCテストが行われる。第1のECCデータはデータと共にデータページに格納されている。第1のECCデータは、図2の第1フェーズのECCデータ222または図3の322とすることができる。
【0102】
いくつかの実装形態において、メモリコントローラは、第1のECCデータに基づいて、読み取ったデータに対してECCデコード動作を実行することにより第1フェーズのECCテストを行い、ECCデコード動作後の読み取ったデータにある誤りビットの数が予め決められた閾値より小さいかどうかを判定する。誤りビットの数字が予め決められた閾値より小さい場合、メモリコントローラは、読み取ったデータが第1フェーズのECCテストに通ると判定する。メモリコントローラは次いで、読み取ったデータを出力データとして、例えば、ホストデバイスへ出力することができる。誤りビットの数が予め決められた閾値と一致する、またはこれより大きい場合、メモリコントローラは、読み取ったデータが第1フェーズのECCテストに通らないと判定する。
【0103】
段階456では、読み取ったデータが第1フェーズのECCテストに通らなかった場合、読み取ったデータの一部分に対する第2フェーズのECCテストが第2のECCデータに基づいて行われる。第2のECCデータは、読み取ったデータの一部分に対応するデータの一部分と関連付けられており、複数のデータページのそれぞれと異なる冗長ページに格納されている。第2のECCデータは、図2の第2のECCデータ224または図3の324とすることができる。第2のECCデータのサイズが第1のECCデータのサイズと同一であってよい。データの一部分は、図2のデータ部分214または図3のデータ部分314とすることができる。データの一部分のサイズがデータのサイズの半分であってよい。冗長ページは、図2の冗長ページ204または図3の304とすることができる。
【0104】
いくつかの実装形態において、メモリコントローラは、読み取ったデータの一部分に対して第2のECCデータに基づいて(例えば、図1AのECCデコーダ134などのECCデコーダによる)ECCデコード動作を実行し、ECCデコード動作後の読み取ったデータの一部分にある誤りビットの数が予め決められた閾値より小さいかどうかを判定することにより、第2フェーズのECCテストを行う。メモリコントローラは、同じECCデコーダを用いて、第1フェーズのECCテストおよび第2フェーズのECCテストを行うことができる。誤りビットの数が予め決められた閾値より小さい場合、メモリコントローラは、読み取ったデータの一部分が第2フェーズのECCテストに通ると判定する。誤りビットの数が予め決められた閾値と一致する、またはこれより大きい場合、メモリコントローラは、読み取ったデータの一部分が第2フェーズのECCテストに通らないと判定する。
【0105】
データには、データの第1部分としてデータの一部分およびデータの第2部分(例えば、残りの部分)を含む複数の部分が含まれてよい。読み取ったデータには、読み取ったデータの第1部分として読み取ったデータの一部分、およびデータの第2部分に対応する読み取ったデータの第2部分を含む、読み取ったデータの複数の部分が含まれる。読み取ったデータの第1部分が第2フェーズのECCテストに通った場合、メモリコントローラは、読み取ったデータの第2部分、および読み取ったデータの第1部分の訂正されたデータに対して、第1のECCデータに基づいて第1フェーズのECCテストを行うことができる。読み取ったデータの第2部分、および読み取ったデータの第1部分の訂正されたデータが第1フェーズのECCテストに通った場合、メモリコントローラは、読み取ったデータの第2部分の訂正されたデータおよび読み取ったデータの第1部分の訂正されたデータをデータの読み出しデータとして出力できる。
【0106】
いくつかの実装形態において、メモリコントローラはRAID回路(例えば、図1AのRAID回路140)を含む。読み取ったデータの一部分が第2フェーズのECCテストに通らなかった場合、メモリコントローラは、RAID回路を用いて、例えば、第3フェーズのデータ保護として、読み取ったデータに対して誤り訂正を行うことができる。
【0107】
いくつかの実装形態において、メモリコントローラは、読み取ったデータが第1フェーズのECCテストに通らないという判定に応答して、冗長ページから第2のECCデータを読み取り、読み取ったデータの一部分および複数の予め決められた値の組み合わせに対して、第2のECCデータを用いてECCデコード動作を実行する。読み取ったデータの一部分および複数の予め決められた値の合計サイズが、読み取ったデータのサイズと同一である。複数の予め決められた値は、第2のECCデータを生成するのに用いられる複数の予め決められた値と同じにすることができる。複数の予め決められたデータは、図2の固定データ216または図3の固定データ318とすることができる。複数の予め決められた値には、0または1の少なくとも一方が含まれてよい。
【0108】
いくつかの実装形態において、冗長ページには、第2のECCデータと関連付けられたECCパリティデータ(例えば、図2のECCデータ226または図3の326)が含まれる。メモリコントローラは、ECCパリティデータに基づいて第2のECCデータに対してECCデコード動作を実行して、訂正された第2のECCデータを生成し、訂正された第2のECCデータに基づいて、読み取ったデータの一部分に対して第2フェーズのECCテストを行うことができる。
【0109】
いくつかの実装形態において、例えば、図2または図3に示すように、冗長ページには、複数のデータページにある特定部分のページデータと関連付けられた複数の第2のECCデータが含まれる。複数の第2のECCデータの合計サイズが、データのサイズを超えることはない。複数のデータページのそれぞれにある特定部分のページデータのサイズが同一であってよい。
【0110】
いくつかの実装形態において、図3に示すように、複数のデータページは複数のグループに分割される。各グループには、1つまたは複数のデータページが含まれてよい。2つまたはこれより多くのデータページを含むグループの場合、例えば、図3に示すように、2つまたはこれより多くのデータページの特定部分のページデータが、例えば、XOR演算で最初に演算されて、複合データ(例えば、図3の複合データ316)が生成されてよく、次いで、第2のECCデータ(例えば、図3の第2のECCデータ324)が、複合データおよび複数の予め決められた値(例えば、図3の固定データ318)に基づいて生成されてよい。そのグループ用の第2のECCデータは次いで、冗長ページに格納されてよい。複合データは、1つまたは複数のデータページのそれぞれの各特定部分のページデータと同じサイズを持つことができる。
【0111】
いくつかの実装形態では、読み取り動作において、メモリコントローラは、(例えば、段階452で)2つまたはこれより多くのデータページの第1データページから第1ページデータを読み取り、読み取った第1ページデータに対して(例えば、段階454で)第1データページのそれぞれの第1のECCデータに基づいて第1フェーズのECCテストを行う。読み取った第1ページデータが第1フェーズのECCテストに通らないという判定に応答して、例えば、段階456では、メモリコントローラが2つまたはこれより多くのデータページの1つまたは複数の他のデータページから他のページデータを読み取り、2つまたはこれより多くのデータページ用の対応する第2のECCデータを冗長ページから読み取り、読み取った第1ページデータの第1データ部分および複数の予め決められた値に対して、対応する第2のECCデータおよび1つまたは複数の他のデータページからの他のページデータに基づいて第2フェーズのECCテストを行う。
【0112】
複数の予め決められた値は、誤りビットがない固定データである。ECCデコーダは複合データを、対応する第2のECCデータを用いてデコードすることができ、デコードされた複合データを1つまたは複数の他のデータページからの他のページデータと共に逆XOR演算に用いると、第1ページデータの第1データ部分を導出することができ、これを用いて、読み取った第1ページデータの第1データ部分を訂正することができる。訂正された第1データ部分は、上述したように、第1ページデータ用の第1のECCデータを用いて、読み取った第1ページデータの残りの部分を訂正するのに用いられてよい。さらに、第1データページにある読み取った第1ページデータが訂正された後に、訂正された第1ページデータは、1つまたは複数の他のデータページの読み取ったページデータの誤り訂正に用いられてよい。
【0113】
開示された例および他の例は、1つまたは複数のコンピュータプログラム製品として実現されてよく、例えば、コンピュータプログラム命令の1つまたは複数のモジュールが、データ処理装置による実行のために、またはデータ処理装置の動作を制御するために、コンピュータ可読媒体上にエンコードされている。コンピュータ可読媒体は、マシン可読ストレージデバイス、マシン可読ストレージ基板、メモリデバイス、または1つまたは複数のそれらの組み合わせであってよい。「データ処理装置」という用語は、データを処理する全ての装置、デバイス、およびマシンを包含し、例として、プログラマブルプロセッサ、コンピュータ、または複数のプロセッサまたはコンピュータが含まれる。装置としては、ハードウェアに加えて、問題のコンピュータプログラムの実行環境を作成するコード、例えば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらのうちの1つまたは複数の組み合わせを構成するコードが挙げられてよい。
【0114】
システムとしては、データを処理する全ての装置、デバイス、およびマシンが包含されてよく、例として、プログラマブルプロセッサ、コンピュータ、または複数のプロセッサまたはコンピュータが含まれる。システムとしては、ハードウェアに加えて、問題のコンピュータプログラムの実行環境を作成するコード、例えば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらのうちの1つまたは複数の組み合わせを構成するコードが含まれてよい。
【0115】
コンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、スクリプト、またはコードとしても知られている)は、コンパイラ型言語またはインタープリタ型言語を含むあらゆる形式のプログラミング言語で記述されてよく、これは、スタンドアロン型プログラムとして、またはモジュールとして、コンピューティング環境で用いるのに適したコンポーネント、サブルーチン、または他のユニットを含むあらゆる形式で展開されてよい。コンピュータプログラムは、必ずしもファイルシステムにおけるファイルに対応するわけではない。プログラムは、他のプログラムまたはデータ(例えば、マークアップ言語ドキュメントに格納された1つまたは複数のスクリプト)を保持するファイルの一部分に、問題のプログラムに専用の単一ファイルに、または複数の調整済みファイル(例えば、1つまたは複数のモジュール、サブプログラム、またはコードの一部分を格納するファイル)に格納されてよい。コンピュータプログラムは、1つのコンピュータで、または複数のコンピュータで実行するために展開されてよく、複数のコンピュータは1つの場所に位置しているか、または複数の場所に分散されて通信ネットワークで相互接続されている。
【0116】
本明細書で説明した処理および論理フローは、本明細書で説明した機能を行う1つまたは複数のコンピュータプログラムを実行する1つまたは複数のプログラマブルプロセッサによって行われてよい。この処理および論理フローは、特殊目的論理回路、例えば、FPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)によって行われてもよく、装置がこうしたものとして実現されてもよい。
【0117】
コンピュータプログラムを実行するのに適したプロセッサは、例として、汎用および特殊目的のマイクロプロセッサの両方、およびあらゆる種類のデジタルコンピュータのうちの任意の1つまたは複数のプロセッサを含む。一般に、プロセッサは、読み取り専用メモリまたはランダムアクセスメモリまたはその両方から、命令およびデータを受け取ることになる。コンピュータの必須要素には、命令を行うためのプロセッサ、および命令およびデータを格納するための1つまたは複数のメモリデバイスが含まれてよい。一般に、コンピュータも、データを格納するための1つまたは複数の大容量ストレージデバイス(例えば、磁気ディスク、光磁気ディスク、または光ディスク)を含むか、またはそこからデータを受け取る、またはそこへデータを転送する、またはその両方を行うように動作可能に連結されてよい。しかしながら、コンピュータがそのようなデバイスを持つ必要はない。コンピュータプログラム命令およびデータを格納するのに適したコンピュータ可読媒体としては、あらゆる形式の不揮発性メモリ、媒体、およびメモリデバイスが挙げられてよく、例として半導体メモリデバイスが含まれ、例えば、EPROM、EEPROM、フラッシュメモリデバイス、および磁気ディスクがある。プロセッサおよびメモリは、特殊目的論理回路によって補完される、またはそこに組み込まれることが可能である。
【0118】
本明細書では多くの詳細について説明しているかもしれないが、これらは、特許請求されている発明または特許請求され得ることの範囲に対する限定と解釈されるのではなく、むしろ特定の実施形態に固有の特徴の説明と解釈されるべきである。本明細書において別個の実施形態の文脈で説明されている特定の特徴が、単一の実施形態に組み合わせて実現されてもよい。反対に、単一の実施形態の文脈で説明されている様々な特徴が、複数の実施形態で別個に、または任意の好適な部分的組み合わせで実現されてもよい。さらに、こうした特徴は特定の組み合わせで動作するものとして上述され、それどころかそのようなものとして最初に特許請求されているかもしれないが、場合によっては、特許請求されている組み合わせからの1つまたは複数の特徴が、この組み合わせから削除されてよく、特許請求されている組み合わせは、部分的組み合わせまたは部分的組み合わせの変形を対象としてよい。同様に、図面には特定の順序で各動作が示されているが、これについて、そのような動作が示された特定の順序でまたは順番に行われること、または示された動作が全て行われることが、所望の結果を達成するために必要であると理解するべきではない。
【0119】
開示されている例および実装形態は、ほんのわずかである。説明された例および実装形態、および他の実装形態に対して、変形、変更、および改良が開示事項に基づいて行われてよい。
【要約】      (修正有)
【課題】メモリシステムの誤り訂正を管理するための、コンピュータ可読媒体を含むシステム、方法及び装置を提供する。
【解決手段】メモリシステム100は、メモリおよびメモリに連結されたデバイスコントローラが含まれる。デバイスコントローラは、メモリのデータページからデータを読み取り、読み取ったデータに対して、データと関連付けられた第1のECCデータに基づいて第1フェーズの誤り訂正符号(ECC)テストを行い、読み取ったデータが第1フェーズのECCテストに通らないという判定に応答して、読み取ったデータの一部分に対して第2のECCデータに基づいて第2フェーズのECCテストを行う。第1のECCデータは、データと共にデータページに格納されている。第2のECCデータは、読み取ったデータの一部分に対応するデータの一部分と関連付けられており、データページと異なる冗長ページに格納されている。
【選択図】図1A
図1A
図1B
図2
図3
図4A
図4B