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

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

▶ ウェスタン デジタル テクノロジーズ インコーポレーテッドの特許一覧

特許7069233特定のシステムレベルトリガ及びポリシーに基づいた不規則なコードスキームの適応的使用
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-05-09
(45)【発行日】2022-05-17
(54)【発明の名称】特定のシステムレベルトリガ及びポリシーに基づいた不規則なコードスキームの適応的使用
(51)【国際特許分類】
   H03M 13/19 20060101AFI20220510BHJP
   G06F 11/10 20060101ALI20220510BHJP
【FI】
H03M13/19
G06F11/10 648
【請求項の数】 16
【外国語出願】
(21)【出願番号】P 2020032086
(22)【出願日】2020-02-27
(65)【公開番号】P2020202553
(43)【公開日】2020-12-17
【審査請求日】2020-05-01
(31)【優先権主張番号】16/433,535
(32)【優先日】2019-06-06
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】504056130
【氏名又は名称】ウェスタン デジタル テクノロジーズ インコーポレーテッド
(74)【代理人】
【識別番号】110000110
【氏名又は名称】特許業務法人快友国際特許事務所
(72)【発明者】
【氏名】エフゲニー メヒャーニク
(72)【発明者】
【氏名】ラン ザミール
(72)【発明者】
【氏名】エラン シャーロン
【審査官】吉江 一明
(56)【参考文献】
【文献】米国特許出願公開第2014/0325268(US,A1)
【文献】特開2015-056184(JP,A)
【文献】米国特許出願公開第2018/0374548(US,A1)
【文献】特表2015-535640(JP,A)
【文献】米国特許出願公開第2017/0310342(US,A1)
【文献】特開2016-062463(JP,A)
【文献】米国特許出願公開第2012/0317459(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
H03M 13/19
G06F 11/10
(57)【特許請求の範囲】
【請求項1】
データ記憶システムであって、
複数のメモリセルを含むメモリと、
不規則な低密度パリティチェック(LDPC)符号化スキームを使用してデータを符号化するように構成されているエンコーダと、
不規則なLDPC復号スキームを使用してデータを復号するように構成されているデコーダと、
前記メモリ、前記エンコーダ及び前記デコーダと通信するコントローラであって、
書き込まれるデータを指定するデータ書き込みコマンドを受信することと、
(i)温度又はライフサイクルステージ、及び/又は(ii)前記指定されたデータのデータタイプに従って、前記エンコーダに利用可能な、複数の利用可能な不規則なLDPC符号化スキームのうちの不規則なLDPC符号化スキームを選択することと、
前記選択された不規則なLDPC符号化スキームを使用して、前記指定された書き込まれるデータを符号化することと、
読み出されるデータを指定するデータ読み出しコマンドを受信することと、
シンドローム重み動作に従って、前記デコーダに利用可能な、複数の不規則なLDPC復号スキームのうちの不規則なLDPC復号スキームを選択することと、
前記選択された不規則なLDPC復号スキームを使用して、前記指定された読み出されるデータを復号することと、を行うように構成されているコントローラと、を含み、
前記コントローラが、前記シンドローム重み動作に従って前記不規則なLDPC復号スキームを選択するように構成されていることは、前記コントローラが、
第1の不規則なLDPC復号スキーム候補を選択することと、
前記第1の不規則なLDPC復号スキーム候補を使用して、前記指定された読み出されるデータの少なくとも一部の第1のシンドローム重みを計算することと、
前記計算された第1のシンドローム重みが所定の閾値未満であるかどうかを決定することと、
前記計算された第1のシンドローム重みが前記所定の閾値未満であるとの決定に従って、前記不規則なLDPC復号スキームとして前記第1の不規則なLDPC復号スキーム候補を選択することと、を行うように構成されていることを含み、
前記コントローラが、前記第1の不規則なLDPC復号スキーム候補を選択するように構成されていることは、前記コントローラが、
前記利用可能な不規則なLDPC復号スキームのうちの第1のものを使用して、復号される前記データに関連付けられたデータ署名を復号して、第1の復号データ署名をもたらすことと、
前記第1の復号データ署名をモデルデータ署名と比較することと、
前記第1の復号データ署名が、前記モデルデータ署名に最も近いとの決定に従って、前記第1の不規則なLDPC復号スキーム候補として、前記利用可能な不規則なLDPC復号スキームのうちの前記第1のものを選択することであって、前記第1の復号データ署名が、前記モデルデータ署名に最も近いとの決定は、前記第1の復号データ署名が、前記モデルデータ署名から閾値量未満で逸脱するとの決定である、前記第1のものを選択することと、を行うように構成されていることを含む、データ記憶システム。
【請求項2】
前記複数の利用可能な不規則なLDPC符号化スキームが、性能について最適化された第1の不規則なLDPC符号化スキームと、信頼性について最適化された第2の不規則なLDPC符号化スキーム及び低電力について最適化された第3の不規則なLDPC符号化スキームのうちの1つ以上と、を含む、請求項1に記載のデータ記憶システム。
【請求項3】
前記コントローラが、前記エンコーダに利用可能な、複数の利用可能な不規則なLDPC符号化スキームのうちの不規則なLDPC符号化スキームを選択するように構成されていることは、前記コントローラが、
前記データ記憶システムの1つ以上の条件及び/又は前記書き込まれるデータのデータ特性基準を検出することであって、前記1つ以上の条件が、
環境条件、
前記データ記憶システムのライフサイクルステージ、
前記指定されたデータのデータタイプ、
前記データ書き込みコマンドの前記受信に近接する期間中のプログラミングスループット、及び
前記書き込まれるデータのエントロピーレベルのうちの少なくとも1つを含む、検出することと、
前記データ記憶システムの前記検出された1つ以上の条件に基づいて、前記不規則なLDPC符号化スキームを選択することと、を行うように構成されていることを含む、請求項1又は2に記載のデータ記憶システム。
【請求項4】
前記コントローラが、前記エンコーダに利用可能な、複数の利用可能な不規則なLDPC符号化スキームのうちの不規則なLDPC符号化スキームを選択するように構成されていることは、前記コントローラが、
前記データ記憶システムの環境条件を検出することと、
前記データ記憶システムの前記検出された環境条件に基づいて、前記不規則なLDPC符号化スキームを選択することと、を行うように更に構成されていることを含む、請求項1~3のいずれか一項に記載のデータ記憶システム。
【請求項5】
前記環境条件が、前記データ記憶システムの温度を含み、前記コントローラが、前記不規則なLDPC符号化スキームを選択するように構成されていることは、前記コントローラが、
前記温度が閾値を超えるかどうかを決定することと、
前記温度が前記閾値を超えるとの決定に従って、信頼性について最適化された不規則なLDPC符号化スキームを選択することと、
前記温度が前記閾値を超えないとの決定に従って、性能について最適化された不規則なLDPC符号化スキームを選択することと、を行うように構成されていることを含む、請求項4に記載のデータ記憶システム。
【請求項6】
前記コントローラが、前記エンコーダに利用可能な、複数の利用可能な不規則なLDPC符号化スキームのうちの不規則なLDPC符号化スキームを選択するように構成されていることは、前記コントローラが、
前記データ記憶システムの前記ライフサイクルステージを決定することと、
前記決定されたライフサイクルステージに基づいて、前記不規則なLDPC符号化スキームを選択することと、を更に行うように構成されていることを含む、請求項1~3のいずれか一項に記載のデータ記憶システム。
【請求項7】
前記コントローラが、前記データ記憶システムの前記ライフサイクルステージを決定するように構成されていることは、前記データ記憶システムによって行われるプログラミングサイクルの累積数を測定することを含み、前記不規則なLDPC符号化スキームを選択することは、前記コントローラが、
前記プログラミングサイクルの累積数が閾値を超えているかどうかを決定することと、
前記プログラミングサイクルの累積数が前記閾値を超えるとの決定に従って、信頼性について最適化された不規則なLDPC符号化スキームを選択することと、
前記プログラミングサイクルの累積数が前記閾値を超えないという決定に従って、性能について最適化された不規則なLDPC符号化スキームを選択することと、を行うように構成されていることを含む、請求項6に記載のデータ記憶システム。
【請求項8】
前記コントローラが、前記エンコーダに利用可能な、複数の利用可能な不規則なLDPC符号化スキームのうちの不規則なLDPC符号化スキームを選択するように構成されていることは、前記コントローラが、
前記指定されたデータの前記データタイプを決定することと、
前記指定されたデータの前記決定されたデータタイプに基づいて、前記不規則なLDPC符号化スキームを選択することと、を行う
ように更に構成されていることを含む、請求項1~3のいずれか一項に記載のデータ記憶システム。
【請求項9】
前記コントローラが、前記指定されたデータの前記データタイプを決定するように構成されていることは、前記コントローラが、
(i)はんだ付け作業の前に書き込まれる予めロードされたコンテンツデータと、
(ii)重要なブートデータ又は管理システムデータ、
(iii)ホストブートデータ又はホストオペレーティングシステムデータ、
(iv)変数データ、及び/又は
(v)TLCデータ、として前記指定されたデータを分類するように構成されていることを含み、
前記コントローラが、前記不規則なLDPC符号化スキームを選択するように構成されていることは、前記コントローラが、前記分類によって決定された前記データタイプのいずれかを有する前記データについて、信頼性について最適化された不規則なLDPC符号化スキームを選択するように構成されていることを含む、請求項8に記載のデータ記憶システム。
【請求項10】
前記コントローラが、前記指定されたデータの前記データタイプを決定するように構成されていることは、前記コントローラが、
(i)非重要データ、
(ii)静的データ、
(iii)TLCデータ保護のためのXORスナップショットデータ、
(iv)低エントロピー、及び/又は
(iv)SLCデータ、として前記指定されたデータを分類するように構成されていることを含み、
前記コントローラが、前記不規則なLDPC符号化スキームを選択するように構成されていることは、前記コントローラが、前記分類によって決定された前記データタイプのいずれかを有する前記データについて、性能について最適化された不規則なLDPC符号化スキームを選択するように構成されていることを含む、請求項8に記載のデータ記憶システム。
【請求項11】
前記コントローラが、前記エンコーダに利用可能な、複数の利用可能な不規則なLDPC符号化スキームのうちの不規則なLDPC符号化スキームを選択するように構成されていることは、前記コントローラが、
前記データ書き込みコマンドの前記受信に近接する期間中にプログラミングスループットを測定することと、
前記測定されたプログラミングスループットに基づいて、前記不規則なLDPC符号化スキームを選択することと、を行うよう更に構成されていることを含む、請求項1~3のいずれか一項に記載のデータ記憶システム。
【請求項12】
前記コントローラが、前記測定されたプログラミングスループットに基づいて前記不規則なLDPC符号化スキームを選択するように構成されていることは、前記コントローラが、
前記測定されたプログラミングスループットが閾値を超えるかどうかを決定することと、
前記測定されたプログラミングスループットが前記閾値を超えるとの決定に従って、低電力消費について最適化された不規則なLDPC符号化スキームを選択することと、
前記測定されたプログラミングスループットが前記閾値を超えないという決定に従って、性能について最適化された不規則なLDPC符号化スキームを選択することと、を行うように構成されていることを含む、請求項11に記載のデータ記憶システム。
【請求項13】
前記コントローラが、前記第1の不規則なLDPC復号スキーム候補を選択するように構成されていることは、前記コントローラが、
前記第1の復号データ署名が、前記モデルデータ署名に最も近くないとの決定に従って、前記利用可能な不規則なLDPC復号スキームのうちの第2のものを使用して、前記復号されるデータに関連付けられた前記データ署名を復号し、第2の復号データ署名をもたらすことであって、前記第1の復号データ署名が、前記モデルデータ署名に最も近くないとの決定は、前記第1の復号データ署名が、前記モデルデータ署名から閾値量以上で逸脱するとの決定である、前記第2の復号データ署名をもたらすことと、
前記第2の復号データ署名を前記モデルデータ署名と比較することと、
前記第2の復号データ署名が、前記モデルデータ署名に最も近いとの決定に従って、前記第1の不規則なLDPC復号スキーム候補として、前記利用可能な不規則なLDPC復号スキームのうちの前記第2のものを選択することであって、前記第2の復号データ署名が、前記モデルデータ署名に最も近いとの決定は、前記第2の復号データ署名が前記モデルデータ署名から前記閾値量未満で逸脱するとの決定である、前記第2のものを選択することと、を行うように構成されていることを更に含む、請求項1~12のいずれか一項に記載のデータ記憶システム。
【請求項14】
複数のメモリセルを含むメモリと、不規則な低密度パリティチェック(LDPC)符号化又は復号スキームをそれぞれ使用してデータを符号化又は復号するように構成されているエンコーダ及びデコーダと、前記メモリ、エンコーダ及びデコーダと通信するコントローラと、を含むデータ記憶システムを動作させる方法であって、
書き込まれるデータを指定するデータ書き込みコマンドを受信することと、
前記データ書き込みコマンドの前記受信に近接する期間中にプログラミングスループットを測定することと、
前記測定されたプログラミングスループットに基づいて、前記エンコーダに利用可能な、複数の利用可能な不規則なLDPC符号化スキームのうちの不規則なLDPC符号化スキームを選択することと、
前記選択された不規則なLDPC符号化スキームを使用して、前記指定された書き込まれるデータを符号化することと、
読み出されるデータを指定するデータ読み出しコマンドを受信することと、
シンドローム重み動作に従って、前記デコーダに利用可能な、複数の不規則なLDPC復号スキームのうちの不規則なLDPC復号スキームを選択することと、
前記選択された不規則なLDPC復号スキームを使用して、前記指定された読み出されるデータを復号することと、を含み、
前記シンドローム重み動作に従って前記不規則なLDPC復号スキームを選択することは、
第1の不規則なLDPC復号スキーム候補を選択することと、
前記第1の不規則なLDPC復号スキーム候補を使用して、前記指定された読み出されるデータの少なくとも一部の第1のシンドローム重みを計算することと、
前記計算された第1のシンドローム重みが所定の閾値未満であるかどうかを決定することと、
前記計算された第1のシンドロームの重みが前記所定の閾値未満であるとの決定に従って、前記不規則なLDPC復号スキームとして前記第1の不規則なLDPC復号スキーム候補を選択することと、を含み、
前記第1の不規則なLDPC復号スキーム候補を選択することは、
前記利用可能な不規則なLDPC復号スキームのうちの第1のものを使用して、復号される前記データに関連付けられたデータ署名を復号して、第1の復号データ署名をもたらすことと、
前記第1の復号データ署名をモデルデータ署名と比較することと、
前記第1の復号データ署名が、前記モデルデータ署名に最も近いとの決定に従って、前記第1の不規則なLDPC復号スキーム候補として、前記利用可能な不規則なLDPC復号スキームのうちの前記第1のものを選択することであって、前記第1の復号データ署名が、前記モデルデータ署名に最も近いとの決定は、前記第1の復号データ署名が、前記モデルデータ署名から閾値量未満で逸脱するとの決定である、前記第1のものを選択することと、を含む方法。
【請求項15】
データ記憶システムであって、
書き込まれるデータを指定するデータ書き込みコマンドを受信する手段と、
(i)前記データ記憶システムの作動モード、及び/又は(ii)前記指定されたデータのデータ特性に従って、エンコーダに利用可能な、複数の利用可能な不規則なLDPC符号化スキームのうちの不規則なLDPC符号化スキームを選択する手段と、
前記選択された不規則なLDPC符号化スキームを使用して前記指定された書き込まれるデータを符号化する手段と、
読み出されるデータを指定するデータ読み出しコマンドを受信する手段と、
シンドローム重み動作に従って、前記データ記憶システムのデコーダに利用可能な、複数の不規則なLDPC復号スキームのうちの不規則なLDPC復号スキームを選択する手段と、
前記選択された不規則なLDPC復号スキームを使用して、前記指定された読み出されるデータを復号する手段と、を含み、
前記シンドローム重み動作に従って前記不規則なLDPC復号スキームを選択する手段は、
第1の不規則なLDPC復号スキーム候補を選択する手段と、
前記第1の不規則なLDPC復号スキーム候補を使用して、前記指定された読み出されるデータの少なくとも一部の第1のシンドローム重みを計算する手段と、
前記計算された第1のシンドローム重みが所定の閾値未満であるかどうかを決定する手段と、
前記計算された第1のシンドローム重みが前記所定の閾値未満であるとの決定に従って、前記不規則なLDPC復号スキームとして前記第1の不規則なLDPC復号スキーム候補を選択する手段と、を含み、
前記第1の不規則なLDPC復号スキーム候補を選択する手段は、
前記利用可能な不規則なLDPC復号スキームのうちの第1のものを使用して、復号される前記データに関連付けられたデータ署名を復号して、第1の復号データ署名をもたらす手段と、
前記第1の復号データ署名をモデルデータ署名と比較する手段と、
前記第1の復号データ署名が、前記モデルデータ署名に最も近いとの決定に従って、前記第1の不規則なLDPC復号スキーム候補として、前記利用可能な不規則なLDPC復号スキームのうちの前記第1のものを選択する手段であって、前記第1の復号データ署名が、前記モデルデータ署名に最も近いとの決定は、前記第1の復号データ署名が、前記モデルデータ署名から閾値量未満で逸脱するとの決定である、前記第1のものを選択する手段と、を含むデータ記憶システム。
【請求項16】
データ記憶システムであって、
複数のメモリセルを含むメモリと、
不規則な低密度パリティチェック(LDPC)符号化スキームを使用してデータを符号化するように構成されているエンコーダと、
不規則なLDPC復号スキームを使用してデータを復号するように構成されているデコーダと、
前記メモリ、前記エンコーダ及び前記デコーダと通信するコントローラであって、
書き込まれるデータを指定するデータ書き込みコマンドを受信することと、
前記データ書き込みコマンドの前記受信に近接する期間中にプログラミングスループットを測定することと、
前記測定されたプログラミングスループットに基づいて、前記エンコーダに利用可能な、複数の利用可能な不規則なLDPC符号化スキームのうちの不規則なLDPC符号化スキームを選択することと、
前記選択された不規則なLDPC符号化スキームを使用して、前記指定された書き込まれるデータを符号化することと、
読み出されるデータを指定するデータ読み出しコマンドを受信することと、
シンドローム重み動作に従って、前記デコーダに利用可能な、複数の不規則なLDPC復号スキームのうちの不規則なLDPC復号スキームを選択することと、
前記選択された不規則なLDPC復号スキームを使用して、前記指定された読み出されるデータを復号することと、を行うように構成されているコントローラと、を含み、
前記コントローラが、前記シンドローム重み動作に従って前記不規則なLDPC復号スキームを選択するように構成されていることは、前記コントローラが、
第1の不規則なLDPC復号スキーム候補を選択することと、
前記第1の不規則なLDPC復号スキーム候補を使用して、前記指定された読み出されるデータの少なくとも一部の第1のシンドローム重みを計算することと、
前記計算された第1のシンドローム重みが所定の閾値未満であるかどうかを決定することと、
前記計算された第1のシンドローム重みが前記所定の閾値未満であるとの決定に従って、前記不規則なLDPC復号スキームとして前記第1の不規則なLDPC復号スキーム候補を選択することと、を行うように構成されていることを含み、
前記コントローラが、前記第1の不規則なLDPC復号スキーム候補を選択するように構成されていることは、前記コントローラが、
前記利用可能な不規則なLDPC復号スキームのうちの第1のものを使用して、復号される前記データに関連付けられたデータ署名を復号して、第1の復号データ署名をもたらすことと、
前記第1の復号データ署名をモデルデータ署名と比較することと、
前記第1の復号データ署名が、前記モデルデータ署名に最も近いとの決定に従って、前記第1の不規則なLDPC復号スキーム候補として、前記利用可能な不規則なLDPC復号スキームのうちの前記第1のものを選択することであって、前記第1の復号データ署名が、前記モデルデータ署名に最も近いとの決定は、前記第1の復号データ署名が、前記モデルデータ署名から閾値量未満で逸脱するとの決定である、前記第1のものを選択することと、を行うように構成されていることを含む、データ記憶システム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、メモリシステムに関し、具体的には、適応的に選択されたコーディングスキームを使用してデータを符号化及び復号することに関する。
【背景技術】
【0002】
反復エラー訂正コーディングスキームは、近年、非常に普及している。普及している分類の反復コードは、低密度パリティックチェック(low-density parity-check、LDPC)コードである。適切に設計された場合、反復エラー訂正コーディングは、コード長が増加するにつれて、シャノン限界に近づくことができる。しかしながら、大きいコード長は、待ち時間ペナルティ及び複雑性ペナルティの両方を招くことがある。したがって、いくつかの用途においては、短いコードが有益である。例えば、短いコードは、記憶分類メモリのためのエラー訂正コードに有益であることがある。残念ながら、反復コーディングスキームは短いコードに対して不十分にしか機能せず、コードがより短く高密度になるにつれて、最大事後確率(maximum a posteriori、MAP)復号と比較して劣化した性能を示す。
【図面の簡単な説明】
【0003】
図1】実施形態が実施され得るメモリデバイスの機能ブロック図である。
【0004】
図2図1のコントローラの一実施形態のより詳細を描画する例示的なメモリシステムのブロック図である。
【0005】
図3】パラメータ化反復メッセージパッシングデコーダにおいてパラメータを学習し使用するプロセスの一実施形態のフローチャートである。
【0006】
図4】スパースパリティチェック行列Hの例を描画する。
【0007】
図5図4のスパースパリティチェック行列に対応するスパース2部グラフを描画する。
【0008】
図6】パラメータ化反復メッセージパッシングデコーダのためのパラメータを学習するときに使用され得る例示的なネットワークである。
【0009】
図7】メッセージパッシング計算のためのパラメータを学習するプロセス700の一実施形態のフローチャートである。
【0010】
図8A図7のプロセス700のステップ706の一実施形態のバックワードパス中に計算され得る部分導関数の例である。
図8B図7のプロセス700のステップ706の一実施形態のバックワードパス中に計算され得る部分導関数の例である。
図8C図7のプロセス700のステップ706の一実施形態のバックワードパス中に計算され得る部分導関数の例である。
図8D図7のプロセス700のステップ706の一実施形態のバックワードパス中に計算され得る部分導関数の例である。
図8E図7のプロセス700のステップ706の一実施形態のバックワードパス中に計算され得る部分導関数の例である。
図8F図7のプロセス700のステップ706の一実施形態のバックワードパス中に計算され得る部分導関数の例である。
図8G図7のプロセス700のステップ706の一実施形態のバックワードパス中に計算され得る部分導関数の例である。
【0011】
図8H図7のプロセス700のステップ706の一実施形態のバックワードパス中に計算され得るパラメータ勾配の例である。
図8I図7のプロセス700のステップ706の一実施形態のバックワードパス中に計算され得るパラメータ勾配の例である。
図8J図7のプロセス700のステップ706の一実施形態のバックワードパス中に計算され得るパラメータ勾配の例である。
【0012】
図8K】方程式16のメッセージ規則をチェックするための変数に対するバックワードパスについての例示的な導関数表現を描画する。
図8L】方程式16のメッセージ規則をチェックするための変数に対するバックワードパスについての例示的な導関数表現を描画する。
図8M】方程式16のメッセージ規則をチェックするための変数に対するバックワードパスについての例示的な導関数表現を描画する。
図8N】方程式16のメッセージ規則をチェックするための変数に対するバックワードパスについての例示的な導関数表現を描画する。
【0013】
図9】パラメータ化反復メッセージパッシングデコーダのためのパラメータのオンライン学習のプロセスの一実施形態のフローチャートである。
【0014】
図10】パラメータ化反復メッセージパッシングデコーダのためのパラメータを管理するプロセスの一実施形態のフローチャートである。
【0015】
図11】パラメータ化反復メッセージパッシングデコーダを有するメモリシステムの一実施形態を描画する。
【0016】
図12】一実施形態に従って使用することができる不揮発性ストレージのためのデータを符号化及び復号するためのシステムを描画する。
【0017】
図13】規則的なコードを有するLDPCパリティチェック行列を示す。
【0018】
図14】不規則なコードを有するLDPCパリティチェック行列を示す。
【0019】
図15】いくつかのLDPCコードについてのブロックエラー率(block error rate、BLER)対ビットエラー率(bit error rate、BER)のグラフを示す。
【0020】
図16】いくつかのLDPCコードについてのブロックエラー率(BLER)対ビットエラー率(BER)の別のグラフを示す。
【0021】
図17】いくつかのLDPCコードについてのスループット対ビットエラー率(BER)のグラフを示す。
【0022】
図18】一部の実施形態によるコード最適化ターゲットを示すグラフである。
【0023】
図19】一部の実施形態による符号化方法のフローチャートである。
【0024】
図20】一部の実施形態による復号方法のフローチャートである。
【発明を実施するための形態】
【0025】
本技術は、不規則な低密度パリティチェック(LDPC)コードに関係する。
【0026】
LDPC(低密度パリティチェック)コードは、反復復号下でほぼシャノン限界性能を呈する最新のエラー訂正コードである。LDPCコードは、そのパリティチェック行列が変動する列重み及び/又は変動する行重みを有する場合、不規則になると言われる。不規則なLDPCコードは、エラー訂正性能に関して規則的なLDPCコードよりも性能が優れている。しかしながら、いくつかの欠点を有する。不規則なLDPCコードは規則的なLDPCコードよりも設計が複雑である。不規則なLDPCコードはエラーフロアを発達させる傾向があり、デコーダの実装を複雑にする。本開示では、不規則なLDPCコードを実装するためのアプローチを示す。本開示は、不規則なLDPCコード設計における考慮事項及びトレードオフを説明する。本開示は、LDPCコード設計をサポートするためのツールを説明する。本開示は、不規則なLDPCコードによって提供されるゲインを説明する。
【0027】
不規則なLDPCコード、特にそれらの程度分布は、密度エボリューション又は外部情報転送(extrinsic information transfer、EXIT)チャート最適化に基づいて選択され得る。これらの技術は、2SBフラッシュチャネルにおける1つの特定のパラメータ、主に訂正能力に対して最適な結果を与えるように調整されているが、結果は、0SB訂正能力、LDPCコードによって提供されるスループット等の他の点で準最適となることが多い。
【0028】
一実施形態は、不規則な低密度パリティックチェックコードを使用してデータを符号化及び復号するように構成されている不規則な低密度パリティチェックエンコーダ/デコーダを含む。不規則な低密度パリティチェックエンコーダは、一実施形態において、不揮発性メモリ(例えば、NAND、NOR、ReRAM、相変化メモリ(phase change memory、PCM))に記憶されるデータを符号化するために使用される。不規則な低密度パリティチェックデコーダは、GLDPCエンコーダで符号化した後に記憶されたデータを復号するために使用される。不規則な低密度パリティックチェックコードを使用したデータを符号化/復号する方法も本明細書で説明される。
【0029】
一実施形態において、不規則なLDPCエンコーダ/デコーダによって使用される不規則なLDPCコードは、変動する列重みを有するパリティチェック行列を有する。一実施形態において、不規則なLDPCエンコーダ/デコーダによって使用される不規則なLDPCコードは、変動する行重みを有するパリティチェック行列を有する。一実施形態において、不規則なLDPCエンコーダ/デコーダによって使用される不規則なLDPCコードは、変動する列重み及び変動する行重みを有するパリティチェック行列を有する。
【0030】
一実施形態において、不規則なLDPCエンコーダ/デコーダは、ビットフリップデコーダを含む。一実施形態において、ビットフリップデコーダは低~中ビットエラー率(BER)に使用される。
【0031】
一実施形態において、不規則なLDPCエンコーダ/デコーダは、ソフトデコーダを含む。ソフトデコーダは、一実施形態では、確率伝搬法アルゴリズムに基づく。ソフトデコーダは、一実施形態では、高BERを有するまれな場合に使用される。
【0032】
一実施形態は、異なるデコーダでの所与の程度のスペクトルの性能を推定するように設計されたツールのセットであり、最適な閾値のために走査及び最適化するために使用されるスペクトル設計ツールを含む。
【0033】
一実施形態は、所与のスペクトルに対してLDPCグラフを構築するグラフ生成ツールを含む。
【0034】
本明細書で説明される技術は、様々な種類のメモリシステムと共に使用され得る。しかしながら、本明細書で説明される技術は、メモリシステムに限定されないことが理解されるであろう。図1は、実施形態が実施され得るメモリデバイスの機能ブロック図である。メモリシステム100(又は記憶デバイスシステム)は、1つ以上のメモリダイ108を含み得る。メモリダイ108は、メモリセルのアレイなどのメモリセルのメモリ構造126、制御回路110及び読み出し/書き込み回路128を含む。メモリ構造126は、行デコーダ124を介してワード線によりアドレス指定可能であり、列デコーダ132を介してビット線によりアドレス指定可能である。読み出し/書き込み回路128は、複数の感知ブロックSB1、SB2、...、SBp(感知回路)を含み、メモリセルのページが並列で読み出し又はプログラムされることを可能にする。典型的には、コントローラ122は、1つ以上のメモリダイ108と同じメモリシステム100(例えば、リムーバブル記憶カード)に含まれる。コマンド及びデータは、データバス120を介してホスト140とコントローラ122との間で転送され、線118を介してコントローラと1つ以上のメモリダイ108との間で転送される。
【0035】
メモリ構造は、2D又は3Dとすることができる。メモリ構造は、3Dアレイを含むメモリセルの1つ以上のアレイを含み得る。メモリ構造は、複数のメモリレベルが、介在する基板なしでウェハなどの単一の基板の上方に形成された(かつ、基板内には形成されない)モノリシック3次元メモリ構造を含み得る。メモリ構造は、シリコン基板の上方に配置されたアクティブ領域を有するメモリセルのアレイの1つ以上の物理レベルでモノリシックに形成された任意の種類の不揮発性メモリを含み得る。メモリ構造は、関連する回路が基板の上方又は内部にあるかどうかに関わらず、メモリセルの動作に関連する回路を有する不揮発性メモリデバイスにあり得る。
【0036】
典型的には、モノリシック3次元メモリアレイでは、1つ以上のメモリデバイスレベルが単一の基板の上方に形成される。任意選択的に、モノリシック3次元メモリアレイは、単一の基板内に少なくとも部分的に1つ以上のメモリ層も有し得る。非限定的な例として、基板は、シリコンなどの半導体を含み得る。モノリシック3次元アレイでは、アレイの各メモリデバイスレベルを構成する層は、典型的には、アレイの下方のメモリデバイスレベルの層上に形成される。しかしながら、モノリシックな3次元メモリアレイの隣接するメモリデバイスレベルの層は、共有されてもよく、あるいはメモリデバイスレベル間に介在する層を有してもよい。
【0037】
別の観点から、2次元アレイが別個に形成され、次いでまとめてパッケージ化されて、複数のメモリ層を有する非モノリシックメモリデバイスを形成してもよい。例えば、非モノリシック積層メモリは、別個の基板上にメモリレベルを形成し、次いで、メモリレベルを互いの上に積層することによって構築することができる。基板は、積層前にメモリデバイスレベルから薄くされるか、あるいは除去され得るが、メモリデバイスレベルが別個の基板にわたって最初に形成されるため、結果として得られるメモリアレイはモノリシックな3次元メモリアレイではない。更に、複数の2次元メモリアレイ又は3次元メモリアレイ(モノリシック又は非モノリシック)は、別個のチップ上に形成され、次いでまとめてパッケージ化されて積層チップメモリデバイスを形成してもよい。
【0038】
関連する回路は、典型的には、メモリ素子の動作及びメモリ素子との通信のために必要とされる。非限定的な例として、メモリデバイスは、プログラミング、読み出し等の機能を達成するためにメモリ素子を制御及び駆動するために使用される回路を有し得る。これに関連する回路は、メモリ素子と同じ基板上及び/又は別個の基板上にあってもよい。例えば、メモリ読み出し書き込み動作のためのコントローラは、別個のコントローラチップ上及び/又はメモリ素子と同じ基板上に位置し得る。
【0039】
制御回路110は、読み出し/書き込み回路128と協働して、メモリ構造126でメモリ動作を実行し、ステートマシン112、オンチップアドレスデコーダ114及び電力制御モジュール116を含む。ステートマシン112はメモリ動作のチップレベル制御を提供する。記憶領域113は、メモリセルの異なる行又は他の群のためのプログラミングパラメータなど、メモリデバイスを動作させるためのパラメータのために提供され得る。これらのプログラミングパラメータは、ビット線電圧を含み、電圧を検証することができる。
【0040】
オンチップアドレスデコーダ114は、ホスト又はメモリコントローラによって使用されるものと、デコーダ124及び132によって使用されるハードウェアアドレスとの間のアドレスインターフェースを提供する。電力制御モジュール116は、メモリ動作中にワード線及びビット線に供給される電力及び電圧を制御する。それは、3D構成のワード線層(word line layer、WLL)、SGS及びSGD選択ゲート並びにソース線についてのドライバを含むことができる。感知ブロックは、1つのアプローチにおいて、ビット線ドライバを含むことができる。SGS選択は、NANDストリングのソース端でのゲートトランジスタであり、SGD選択ゲートはNANDストリングのドレイン端でのトランジスタである。
【0041】
いくつかの実装では、構成要素の一部を組み合わせることができる。様々な設計において、メモリ構造126以外の構成要素のうちの1つ以上(単独で又は組み合わせて)は、本明細書で説明される活動を実行するように構成されている少なくとも1つの制御回路と考えることができる。例えば、制御回路は、制御回路110、ステートマシン112、デコーダ114/132,電力制御モジュール116、感知ブロックSB1、SB2、...、SBp、読み出し/書き込み回路128、コントローラ122等のうちのいずれか1つ又はそれらの組み合わせを含み得る。
【0042】
オフチップコントローラ122は、プロセッサ122c及びROM122a、RAM122b等の記憶デバイス(メモリ)を含み得る。記憶デバイスは、命令セットなどのコードを含み、プロセッサは、本明細書で説明される機能を提供する命令セットを実行するように動作可能である。代替的又は追加的に、プロセッサは、1つ以上のワード線におけるメモリセルの予約領域などのメモリ構造の記憶デバイス126aからコードにアクセスすることができる。
【0043】
コードは、プログラミング、読み出し、及び消去動作などのために、メモリ構造にアクセスするコントローラによって使用される。コードは、ブートコード及び制御コード(例えば、命令セット)を含むことができる。ブートコードは、ブート又はスタートアッププロセス中にコントローラを初期化し、コントローラがメモリ構造にアクセスできるようにするソフトウェアである。コードは、1つ以上のメモリ構造を制御するコントローラによって使用することができる。電源投入されると、プロセッサ122cは、実行のためにROM122a又は記憶デバイス126aからブートコードをフェッチし、ブートコードはシステム構成要素を初期化し、制御コードをRAM122bにロードする。制御コードがRAMにロードされると、プロセッサによって実行される。制御コードは、メモリの制御及び割り当て、命令の処理の優先順位付け、入力及び出力ポートの制御等の基本タスクを実行するドライバを含む。一部の実施形態では、コントローラ122は、浮遊小数点数をバイナリストリングに符号化する。制御回路110及び読み出し/書き込み回路128と共にコントローラ122は、メモリアレイ126にバイナリストリングを記憶し得る。
【0044】
NANDフラッシュメモリに加えて、他の種類の不揮発性メモリを使用することもできる。半導体メモリデバイスは、ダイナミックランダムアクセスメモリ(dynamic random access memory、「DRAM」)、スタティックランダムアクセスメモリ(static random access memory、「SRAM」)デバイス等の揮発性メモリデバイス、抵抗ランダムアクセスメモリ(resistive random access memory、「ReRAM」)、電気的消去可能プログラム可能読み出し専用メモリ(electrically erasable programmable read only memory、「EEPROM」)、フラッシュメモリ(EEPROMのサブセットとみなすこともできる)、強誘電性ランダムアクセスメモリ(ferroelectric random access memory、「FRAM」)、磁気抵抗ランダムアクセスメモリ(magnetoresistive random access memory、「MRAM」)等の不揮発性メモリデバイス及び情報を記憶する能力がある他の半導体素子を含む。各種類のメモリデバイスは、異なる構成を有してもよい。例えば、フラッシュメモリデバイスは、NAND又はNOR構成で構成され得る。
【0045】
メモリデバイスは、受動及び/又は能動素子から、任意の組み合わせで形成することができる。非限定的な例として、受動半導体メモリ素子は、ReRAMデバイス素子を含み、これは一部の実施形態では、アンチヒューズ、相変化材料等の抵抗率スイッチング記憶素子、及び任意選択的にダイオード、トランジスタ等のステアリング素子を含む。更に非限定的な例として、能動半導体メモリ素子は、EEPROM及びフラッシュメモリデバイス素子を含み、これは一部の実施形態では、浮遊ゲート、導電性ナノ粒子、電荷蓄積誘電材料等の電荷蓄積領域を含有する素子を含む。
【0046】
複数のメモリ素子は、直列に接続されるように、あるいは各要素が個別にアクセス可能であるように構成され得る。非限定的な例として、NAND構成(NANDメモリ)内のフラッシュメモリデバイスは、典型的には、直列に接続されたメモリ素子を含む。NANDストリングは、メモリセル及び選択ゲートトランジスタを含む直列接続トランジスタのセットの例である。
【0047】
NANDメモリアレイは、ストリングが、単一のビット線を共有しグループとしてアクセスされる複数のメモリ素子から構成される、複数のメモリストリングからアレイが構成されるように構成され得る。代替的に、メモリ素子は、各要素が個別にアクセス可能、例えば、NORメモリアレイであるように構成され得る。NAND及びNORメモリ構成は例示的であり、メモリ素子は、別の方法で構成され得る。
【0048】
基板内及び/又は基板の上に位置する半導体メモリ素子は、2次元メモリ構造、3次元メモリ構造等の2次元又は3次元で配置され得る。
【0049】
2次元メモリ構造では、半導体メモリ素子は、単一の平面又は単一のメモリデバイスレベルに配置される。典型的には、2次元メモリ構造では、メモリ素子は、メモリ素子を支持する基板の主表面に実質的に平行に延在する平面(例えば、xy方向平面)に配置される。基板は、ウェハであり、ウェハの上又はウェハ内にメモリ素子の層が形成されるウェハであってもよく、あるいはメモリ素子が形成された後にメモリ素子に取り付けられるキャリア基板であってもよい。非限定的な例として、基板は、シリコンなどの半導体を含み得る。
【0050】
メモリ素子は、複数の行及び/又は列などの順序付きアレイにおいて単一のメモリデバイスレベルに配置され得る。しかしながら、メモリ素子は非規則的又は非直交構成で配列され得る。メモリ素子は各々2つ以上の電極又はビット線、ワード線等の接触線を有し得る。
【0051】
3次元メモリアレイは、メモリ素子が複数の平面又は複数のメモリデバイスレベルを占有するように配置され、それによって、3次元(すなわち、x、y、及びz方向であり、z方向は基板の主表面に実質的に垂直であり、x及びy方向は基板の主表面に実質的に平行である)の構造を形成する。
【0052】
非限定的な例として、3次元メモリ構造は、複数の2次元メモリデバイスレベルの積層体として垂直に配置され得る。別の非限定的な例として、3次元メモリアレイは、各列が複数の素子を有する複数の垂直列(例えば、基板の主表面に対して実質的に垂直、すなわちy方向に延在する列)として配置され得る。列は、2次元構成、例えば、xy平面に配置されてもよく、複数の垂直に積層されたメモリ面に素子があるメモリ素子の3次元配置をもたらす。3次元のメモリ素子の他の構成が、3次元メモリアレイを構成することもできる。
【0053】
非限定的な例として、3次元NANDメモリアレイでは、メモリ素子は、単一の水平(例えば、xy)メモリデバイスレベル内にNANDストリングを形成するようにまとめて結合され得る。代替的に、メモリ素子は、複数の水平メモリデバイスレベルにわたって横断する垂直なNANDストリングを形成するようにまとめて結合され得る。いくつかのNANDストリングが単一のメモリレベルでメモリ素子を含有し、他のストリングが複数のメモリレベルにわたるメモリ素子を含有する、他の3次元構成を想定することができる。
【0054】
当業者であれば、この技術は説明された2次元及び3次元の例示的な構造に限定されず、本明細書で説明され、当業者によって理解されるように、その技術の精神及び範囲内で、多くの関連するメモリ構造をカバーすると理解するであろう。
【0055】
図2は、コントローラ122のより詳細を描画する例示のメモリシステム100のブロック図である。一実施形態では、図2のシステムは、ソリッドステートドライブである。本明細書で使用するように、メモリコントローラは、メモリに記憶されたデータを管理し、コンピュータ、電子デバイス等のホストと通信するデバイスである。メモリコントローラは、本明細書で説明される特定の機能に加えて、様々な機能を有することができる。例えば、メモリコントローラは、フラッシュメモリをフォーマットしてメモリが適切に動作していることを確実にし、不良のメモリセルを打ち出し、将来の故障セルと置換される予備メモリセルを割り当てることができる。予備セルの一部は、フラッシュメモリコントローラを動作させ、他の機能を実装するためのファームウェアを保持するために使用することができる。動作面では、ホストは、データをメモリから読み出すか、あるいはデータをフラッシュメモリに書き込む必要があるときに、フラッシュメモリコントローラと通信する。データが読み出され/書き込まれる論理アドレス(logical address、LA)をホストが提供する場合、メモリコントローラは、ホストから受信される論理アドレスをメモリの物理アドレスに変換することができる。(代替的に、ホストが物理アドレスを提供することができる)。メモリコントローラは、これだけに限定されないが、ウェアレベリング(さもなければ繰り返し書き込まれる特定のメモリブロックの消耗を回避するために書き込みを分散させること)及びガーベッジコレクション(ブロックが満杯となった後、全ブロックを消去し再利用することができるように有効なデータページのみを新たなブロックに移すこと)等の様々なメモリ管理機能を実行することもできる。
【0056】
コントローラ122と不揮発性メモリダイ108との間のインターフェースは、任意の好適なインターフェースであり得る。一実施形態では、メモリシステム100は、セキュアデジタル(secure digital、SD)、マイクロセキュアデジタル(マイクロSD)カード等のカードベースのシステムであり得る。代替の実施形態では、メモリシステム100は、埋め込みメモリシステムの一部であり得る。例えば、メモリは、パーソナルコンピュータに設置されたソリッドステートディスク(solid state disk、SSD)ドライブの形態などでホスト内に埋め込まれ得る。
【0057】
一部の実施形態では、不揮発性メモリシステム100は、コントローラ122と不揮発性メモリダイ108との間に単一のチャネルを含み、本明細書で説明される主題は単一のメモリチャネルを有することに限定されない。例えば、一部のメモリシステムアーキテクチャでは、コントローラの能力に応じて、コントローラとメモリダイとの間に2、4、8、又はそれ以上のチャネルが存在し得る。本明細書で説明される任意の実施形態において、たとえ単一のチャネルが図面に示されていたとしても、コントローラとメモリダイとの間に単一より多いチャネルが存在し得る。
【0058】
図2に描画するように、コントローラ122は、ホストとインターフェースするフロントエンドモジュール208と、1つ以上の不揮発性メモリダイ108とインターフェースするバックエンドモジュール210と、詳細に説明することになる機能を実行する様々な他のモジュールを含む。
【0059】
図2に描画するコントローラ122の構成要素は、例えば、他の構成要素と共に使用するように設計されたパッケージ化された機能ハードウェアユニット(例えば、電気回路)、(マイクロ)プロセッサ若しくは関連する機能の特定の機能を通常実行する処理回路(若しくは1つ以上のプロセッサ)によって実行可能なプログラムコード(例えば、ソフトウェア若しくはファームウェア)の一部、又はより大きなシステムとインターフェースする自己完結型のハードウェア若しくはソフトウェア構成要素の形態を取り得る。例えば、各モジュールは、特定用途向け集積回路(application specific integrated circuit、ASIC)、書替え可能ゲートアレイ(Field Programmable Gate Array、FPGA)、回路、デジタル論理回路、アナログ回路、ディスクリート回路の組み合せ、ゲート、他の任意の種類のハードウェア、又はそれらの組み合せを含み得る。代替的又は追加的に、各モジュールは、本明細書で説明される機能を実行するコントローラ122のための1つ以上のプロセッサをプログラムする、プロセッサ可読デバイス(例えば、メモリ)に記憶されるソフトウェアを含み得る。図2Bに描画するアーキテクチャは、図2に描画したコントローラ122の構成要素(すなわち、RAM、ROM、プロセッサ)を使用してもよい(あるいは使用しなくてもよい)実装の一例である。
【0060】
コントローラ122は、メモリセル又はメモリブロックを再調整するために使用される再調整回路212を含み得る。コントローラ122のモジュールを再び参照すると、バッファマネージャ/バスコントローラ214が、ランダムアクセスメモリ(random access memory、RAM)216内のバッファを管理し、コントローラ122の内部バスの調停を制御する。読み出し専用メモリ(read only memory、ROM)218は、システムブートコードを記憶する。図2ではコントローラ122から離れて位置するものとして図示するが、他の実施形態では、RAM216及びROM218の一方又は両方がコントローラ内に位置してもよい。更に他の実施形態では、RAM及びROMの一部がコントローラ122内及びコントローラ外の両方に位置し得る。更に、一部の実装では、コントローラ122、RAM216、及びROM218が別個の半導体ダイに位置し得る。
【0061】
フロントエンドモジュール208は、ホスト又は次のレベルの記憶コントローラとの電気的インターフェースを提供するホストインターフェース220及び物理層インターフェース(physical layer interface、PHY)222を含む。ホストインターフェース220の種類の選択は、使用されているメモリの種類によって決まり得る。ホストインターフェース220の例として、これだけに限定されないが、SATA、SATA Express、SAS、ファイバチャネル、USB、PCIe、及びNVMeが挙げられる。ホストインターフェース220は、典型的に、データ、制御信号、及びタイミング信号の転送を促進する。
【0062】
バックエンドモジュール210は、ホストから受信したデータバイトを符号化し、不揮発性メモリから読み出したデータバイトを復号してエラー訂正するエラー訂正コントローラ(error correction controller、ECC)エンジン224を含む。ECCエンジン224は、パラメータ化デコーダ244、非パラメータ化デコーダ245、及び1つ以上のエンコーダ256を有する。一実施形態では、デコーダ244、245は低密度パリティチェック(LDPC)デコーダである。1つ以上のデコーダ244、245の出力は、ホストに提供され得る。
【0063】
一実施形態では、エンコーダ256は、不規則な低密度パリティックチェックコードを使用してデータを符号化するように構成されている、不規則な低密度パリティチェックエンコーダ247を含む。不規則な低密度パリティチェックエンコーダ247は、一実施形態では、不揮発性メモリ(例えば、NAND、NOR、ReRAM、相変化メモリ(PCM))に記憶されるデータを符号化するために使用される。一実施形態では、ECCエンジン224は、不規則な低密度パリティチェックエンコーダを用いて符号化した後に記憶されたデータを復号するように構成されている、不規則な低密度パリティックチェックデコーダ248を含む。
【0064】
デコーダ244、245の一部の実施形態は、ビット(又は可変)ノード及びチェックノードを有するスパース2部グラフに基づく。デコーダ244、245は、ビットノードとチェックノードとの間でメッセージを渡し得る。ビットノードとチェックノードとの間でメッセージを渡すことは、一部の実施形態では、メッセージパッシング計算を実行することによって達成される。メッセージパッシング計算は、確率伝搬法に基づき得る。一部の実施形態では、メモリシステム100は、パラメータ化デコーダ244のためのメッセージパッシング計算のためのパラメータを学習する。パラメータを学習することは、デコーダ244を、メッセージパッシング計算間の統計的依存性に適応させるために使用され得るが、これだけに限定されない。パラメータを学習することは、デコーダ244をメモリアレイに記憶されたコールドデータの特性に適応させるために使用され得る。パラメータを学習することは、デコーダ244をノイズリアリゼーションに適応させるために使用され得る。パラメータを学習することは、デコーダ244をノイズ統計(又はノイズ特性)に適応させるために使用され得る。パラメータを学習することは、デコーダ244をホストトラフィックの特性に適応させるために使用され得る。
【0065】
コマンドシーケンサ226は、不揮発性メモリダイ108に伝送されるプログラムコマンドシーケンス及び消去コマンドシーケンス等のコマンドシーケンスを生成する。RAID(Redundant Array of Independent Die、独立ダイの冗長アレイ)モジュール228はRAIDパリティの生成及び障害データの回復を管理する。RAIDパリティは、不揮発性メモリシステム100内に書き込まれているデータのための完全性保護の更なるレベルとして使用してもよい。場合によっては、RAIDモジュール228がECCエンジン224の一部であり得る。RAIDパリティは、通称によって暗示されるように追加のダイとして加えてもよいが、例えば、追加の平面、追加のブロック、又はブロック内の追加のワード線として既存のダイ中に加えてもよいことに留意されたい。メモリインターフェース230は、コマンドシーケンスを不揮発性メモリダイ108に提供し、不揮発性メモリダイ108からステータス情報を受信する。一実施形態では、メモリインターフェース230は、ダブルデータレート(double data rate、DDR)インターフェースであり得る。
【0066】
図2に図示するシステム100の追加の構成要素は、不揮発性メモリダイ108のメモリセルのウェアレベリングを実行するメディア管理層238を含む。システム100は、外部の電気的インターフェース、外部のRAM、抵抗、コンデンサ、又はコントローラ122とインターフェースし得る他の構成要素等の他のディスクリート構成要素240も含む。代替の実施形態では、物理層インターフェース222、RAIDモジュール228、メディア管理層238、及びバッファ管理/バスコントローラ214のうちの1つ以上が、コントローラ122内で不要である任意選択的な構成要素である。
【0067】
エラー及びホストとのインターフェースを扱い得る管理の一部として、メディア管理層(Media Management Layer、MML)238が統合され得る。一実施形態では、MML238はフラッシュ変換層である。特に、MMLは、NAND管理の内部を担当し得る。特に、MML238は、ホストからの書き込みをダイ108のメモリへの書き込みに変換するメモリデバイスファームウェア内のアルゴリズムを含み得る。MML238は、1)メモリの耐久性が限られている場合があること、2)メモリがページの倍数単位でのみ書き込まれる場合があること、及び/又は3)メモリはブロックとして消去されない限り書き込むことができないことを理由に必要とされ得る。MML238は、ホストに可視でないことがあるメモリのこれらの潜在的制約を理解する。したがって、MML238は、ホストからの書き込みをメモリへの書き込みに変換しようと試みる。
【0068】
コントローラ122は、1つ以上のメモリダイ108とインターフェースし得る。一実施形態では、コントローラ122及び複数のメモリダイ(まとめて不揮発性記憶システム100を含む)が、ソリッドステートドライブ(solid state drive、SSD)を実装し、SSDは、NASデバイス等、ホスト内のハードディスクドライブをエミュレートし、置換し、又はその代わりに使用され得る。追加的に、SSDはハードドライブとして作動するように作製される必要はない。
【0069】
図3は、パラメータ化反復メッセージパッシングデコーダ244においてパラメータを学習し使用するプロセス300の一実施形態のフローチャートである。プロセス300は、学習フェーズと復号フェーズとに分割される。学習フェーズは機械学習を使用して、一実施形態では、メッセージパッシング計算ためのパラメータを学習する。メッセージパッシング計算は、一実施形態では、確率伝搬法規則に基づく。しかしながら、プロセス300は、確率伝搬法規則に限定されない。メッセージパッシング計算は、一実施形態では、ミニサム計算規則である。復号フェーズは、学習されたパラメータを使用してデータを復号する。以下に説明するように、プロセス300は、コードワードのクリーンバージョン及びそれらのコードワードのノイズの多いバージョンを伴い得る。
【0070】
一実施形態では、学習フェーズはオフラインで実行される。オフラインによって、学習は、メモリシステム100がユーザデータを記憶するために使用される前に生じることを意味する。この場合、訓練データは、任意に生成されたコードワードのノイズの多いバージョンであり得る。莫大な数の任意に生成されたコードワードのノイズの多いバージョンを生成することが可能であることに留意されたい。したがって、大きなセットの訓練データを生成することが可能である。一実施形態では、学習フェーズはオンラインで実行される。オンラインによって、学習は、メモリシステム100がユーザデータを記憶するために使用されるときに生じることを意味する。この場合、訓練データは、メモリアレイ126から読み出された実際のデータであり得る。復号フェーズは、典型的にはオンラインで実行される。すなわち、復号フェーズは、典型的には、メモリアレイ126に記憶されたデータに対して実行される。
【0071】
ステップ302は、ノイズコードワードのバッチをパラメータ化反復メッセージパッシングデコーダ244に渡す。一実施形態では、ノイズコードワードは、事前対数尤度比のベクトルとして表される。オフライン実施形態では、ノイズコードワードは、コードワードの任意のノイズの多いバージョンをコードワードのクリーンバージョンに追加することによって生成され得る。オンライン実施形態では、ノイズコードワードは、クリーンバージョンのコードワードでプログラムされ、メモリセルから読み出されたデータに基づいて、事前LLRを形成することによって生成され得る。事前LLRは、ハードビットのみを読み出す、ハードビット及びソフトビットの両方を読み出す等に基づき得る。
【0072】
バッチにおけるノイズコードワードの数は、変動することができる。ステップ302は、一度に1つのコードワードをデコーダ244渡すことを含み得ることに留意されたい。図7のプロセス700は、1つのバッチにおける個々のノイズコードワードをデコーダ244に渡す一実施形態についての更なる詳細を提供する。
【0073】
パラメータ化反復メッセージパッシングデコーダ244は、一実施形態では、メッセージパッシング計算を実行する。一実施形態では、メッセージパッシング計算は、確率伝搬法規則に基づく。メッセージパッシング計算の少なくとも一部は、一実施形態では、学習される1つ以上のパラメータを有する。ステップ302は、デコーダ244の結果をもたらす。一実施形態では、デコーダ244の結果は、事後LLRのセットである。事後LLRは、一実施形態では、コードワード内の各ビットの推定値及びその推定値の信頼性を含む。
【0074】
ステップ304は、パラメータ化反復メッセージパッシングデコーダ244のメッセージパッシング計算のためのパラメータを修正する。パラメータは、一実施形態では、コードワードのバッチ全体から学習されたものに基づいて修正される。一実施形態では、パラメータは、デコーダ244のラベル付き出力に基づいて修正される。用語「ラベル付き出力」は、本明細書では、この用語が機械学習において一般的に使用されるように使用される。ラベル付き出力は、デコーダ結果(例えば、事後LLR)とクリーンコードワードとの間の相互情報に基づき得る。更なる詳細を以下に論じる。
【0075】
プロセス300がステップ302及びステップ304を実行するたびに、パラメータは更に修正され得る。ステップ306は、パラメータが十分に学習されたかどうかについての決定である。一実施形態では、ステップ306は、ラベル付き出力が飽和したかどうかを決定することを含む。一実施形態では、ステップ306は、所定の数のノイズの多いコードワードのバッチが処理されたかどうかを決定することを含む。
【0076】
ステップ308は、学習されたパラメータを記憶する。一実施形態では、学習されたパラメータは、メモリアレイ126に記憶される。一実施形態では、学習されたパラメータは、ROM122aに記憶される。一実施形態では、学習されたパラメータは、記憶領域113に記憶される。
【0077】
ステップ308とステップ310との間の矢印は破線になっており、これら2つのステップの間でかなりの時間が経過し得ることを示す。ステップ310は、符号化され、不揮発性メモリに記憶されたデータにアクセスすることを含む。すなわち、データは、デコーダ244によって使用されるコードに従って符号化されている。
【0078】
ステップ312は、パラメータ化反復メッセージパッシングデコーダ244において、学習されたパラメータを使用してデータを復号することを含む。
【0079】
一部の実施形態では、パラメータ化反復メッセージパッシングデコーダ244は、スパースパリティチェック行列(スパース2部グラフとして表すこともできる)に基づく。図4は、スパースパリティチェック行列Hの例を描画する。行列は、M行K+M列を含み、これは、長さN=K+Mの各コードワードにおけるK個の情報ビット及びM個のパリティビットに対応している。更に、パリティビットは、M個のパリティチェック方程式が満たされるように定義され、行列の各行はパリティチェック方程式を表す。
【0080】
図5は、図4のスパースパリティチェック行列に対応するスパース2部グラフ500を描画する。具体的には、コードは、Nビットノード502のセットV(この例ではN=13)、M個のチェックノード504のセットC(この例ではM=10)、及びビットノード502をチェックノード504に接続するエッジ506のセットE(この例ではE=38)を備えたスパース2部グラフG=(V,C,E)によって定義することができる。ビットノードはコードワードビットに対応し、チェックノードはビットに対するパリチェック制約に対応する。ビットノード502は、エッジ506によって、参加するチェックノード504に接続される。
【0081】
復号中、パラメータ化反復メッセージデコーダ244の一実施形態は、パリティチェックを満たすことを試みる。この例では、チェックノードcn1~cn10によって示されるように、10個のパリティチェックが存在する。cn1での第1のパリティチェックは、v2(XOR)v4(XOR)v11(XOR)v13=0であるかどうかを決定し、「(XOR)」は、排他的or(XOR)論理演算を示す。このチェックは、可変ノードv2、v4、v11及びv13に対応するビット内に偶数個の「1」が存在する場合に満たされる。このチェックは、可変ノードv2、v4、v11及びv13からの矢印が、2部グラフ内のチェックノードcn1に接続されているという事実によって示される。cn2での第2のパリティチェックは、v1(XOR)v7(XOR)v12(XOR)=0であるかどうかを決定し、cn3での第3のパリティチェックは、v3(XOR)v5(XOR)v6(XOR)v9(XOR)v10=0であるかどうかを決定し、cn4での第4のパリティチェックは、v2(XOR)v8(XOR)v11=0であるかどうかを決定し、cn5での第5のパリティチェックは、v4(XOR)v7(XOR)v12=0であるかどうかを決定し、cn6での第6のパリティチェックは、v1(XOR)v5(XOR)v6(XOR)v9=0であるかどうかを決定し、cn7での第7のパリティチェックは、v2(XOR)v8(XOR)v10(XOR)v13=0であるかどうかを決定し、cn8での第8のパリティチェックは、v4(XOR)v7(XOR)v11(XOR)v12=0であるかどうかを決定し、cn9での第9のパリティチェックは、v1(XOR)v3(XOR)v5(XOR)v13=0であるかどうかかを決定し、cn10での第10のパリティチェックは、v7(XOR)v8(XOR)v9(XOR)v10=0であるかどうかを決定する。
【0082】
一実施形態では、パラメータ化反復メッセージデコーダ244は、反復メッセージパッシング復号アルゴリズムを伴う反復確率復号プロセスを使用する。これらのアルゴリズムは、コードを表す下にある2部グラフのエッジを介してビットとチェックノードとの間でメッセージを交換することによって動作する。
【0083】
パラメータ化反復メッセージデコーダ244には、(通信チャネル出力に基づいて、あるいはメモリアレイからの読み出された内容に基づいて)コードワードビットの初期推定値が提供され得る。これらの初期推定値は、有効なコードワードとしてビットが満たされるべきであるパリティックチェック制約を課すことによって改良及び改善され得る。これは、グラフエッジに沿って渡されるメッセージを使用して、コードワードビットを表すビットノードと、コードワードビットに対するパリチェック制約を表すチェックノードとの間で情報を交換することによって行われ得る。
【0084】
例えば、反復は、チェックノードを連続的に横断し、各パリティチェックに基づいて関与するビットのLLR値を更新することを伴うことができる。1つのアプローチでは、cn1の第1のパリティチェックを満たす試みが行われる。パリティチェックが満たされると、cn2のパリティチェックなどを満たす試みが行われる。LLR値は、必要に応じて、各反復において、当業者に既知の方法で調整される。
【0085】
具体的には、反復復号アルゴリズムでは、ビット推定及び推定の信頼性の両方を伝達する「ソフト」ビット推定を利用することが一般的である。
【0086】
グラフエッジに沿って渡されたメッセージによって伝達されるビット推定は、様々な形態で表現することができる。「ソフト」ビット推定を表現するための一般的な尺度は、以下のように定義される対数尤度比(Log-Likelihood Ratio、LLR)である。
【数1】
【0087】
「現在の制約及び観察」は、近い将来メッセージを計算する際に考慮される様々なパリティックチェック制約と、これらのパリティチェックに参加しているビットに対応する観察である。一般性を失うことなく、LLRメッセージがこの文書の残りの全体にわたって使用されると仮定する。LLRの符号は、典型的には、ビット推定を提供する(すなわち、正のLLRはv=0に対応し、負のLLRはv=1に対応する)。LLRの大きさは、推定の信頼性を提供する(すなわち、|LLR|=0は、推定が完全に信頼できないことを意味し、|LLR|=∞は、推定が完全に信頼性でき、ビット値が既知であることを意味する)。
【0088】
通常、ビットノードとチェックノードとの間のグラフエッジに沿った復号中に渡されるメッセージは、外的である。エッジ「e」上のビットノード「v」から渡される外的メッセージ「m」は、エッジ「e」以外のビットノード「v」に接続されたエッジで受信された全ての値を考慮し得る(新しい情報にのみ基づくため、外的と呼ばれるわけである。)。
【0089】
メッセージパッシング復号アルゴリズムの例は、確率伝搬法(Belief-Propagation、BP)アルゴリズムである。
【数2】
【0090】
とし、受信された、あるいは読み出されたシンボル「y」にのみ基づいて、ビットvについての初期デコーダ推定値を示す。ビットの一部は、通信チャネルを通じて伝送されないか、あるいはメモリアレイに記憶されないことも可能であり、したがって、これらのビットについては「y」観察は存在しないことに留意されたい。この場合、2つの可能性がある。すなわち、1)短縮コードであり、例えば、ビットは事前に知られており、P=±∞(ビットが0又は1であるかどうかによる)である、2)事前に知られたパンクチャビットであり、
【数3】
であって、Pr(v=0)及びPr(v=1)は、ビットvがそれぞれ0又は1である事前確率である。フラッシュメモリの内容には、パンクチャビットは、単にメモリアレイに記憶されない。情報ビットが、0又は1について等しい事前確率を有し、コードが線形であると仮定すると、
【数4】
であり、
【数5】
【0091】
とし、受信された、あるいは読み出されたシーケンス「y」全体に基づいてビット「v」についての最終デコーダ推定値を表し、ビット「v」がコードワードの一部であると仮定する(すなわち、
【数6】
と仮定する)。
【0092】
vc及びRcvは、ビットノード「v」からチェックノード「c」へのメッセージ、及びチェックノード「c」からビットノード「v」へのメッセージを示すとする。従来のBPアルゴリズムは、メッセージを計算するために以下の更新規則を利用する。従来のビットノードからチェックノードへの計算規則は、
【数7】
【0093】
である。ここで、N(v)は、グラフGにおいてノード「v」の近隣のセットを示し、N(v)\cは、ノード「c」を除く近隣を指す。ここで、「j」は反復を指す。従来のBPアルゴリズムにおけるチェックノードからビットノードへの計算規則は、
【数8】
【0094】
である。同様に、N(c)は、グラフGにおけるチェックノード「c」のビットノード近隣のセットを示し、N(v)\cは、ノード「v」を除く近隣を指す。ビット「v」についての従来の最終デコーダ推定値は、
【数9】
【0095】
である。図3に戻って参照すると、パラメータがメッセージパッシング計算のために学習される。一例は、方程式6の例などのビットノードからチェックノードへの計算のための1つ以上のパラメータを学習する。別の例は、方程式7の例などのチェックノードからビットノードへの計算のための1つ以上のパラメータを学習する。別の例は、方程式8の例などのビット「v」についての最終デコーダ推定値のための1つ以上のパラメータを学習する。一実施形態では、1つ以上のパラメータは、コードを表すグラフ内のエッジについて学習される。しかしながら、グラフ内の各エッジについてパラメータを学習する必要はない。
【0096】
方程式9は、パラメータ
【数10】
有するパラメータ化メッセージパッシング計算の一実施形態である。なお、これは、方程式6の例の変形例である。「j」は反復を示す。アルファはビットノード(v)及びチェックノード(c)に依存することに留意されたい。一実施形態では、(所与のビットノード及びチェックノードのための)アルファパラメータは、各反復に対して異なり得る。しかしながら、(所与のビットノード及びチェックノードのための)アルファパラメータは、学習プロセス及び保存されたパラメータの数を簡潔にするため、各反復に関して同じにすることができる。また、方程式9は、(「c」及び「v」によって与えられる)グラフ内の異なるエッジに対するメッセージに関連することに留意されたい。しかしながら、以下に記載されるように、学習する必要があるアルファパラメータの数を低減することが可能である。したがって、方程式9で表される各エッジについて別個のアルファパラメータを学習する必要はない。
【数11】
【0097】
方程式10は、パラメータ
【数12】
を用いたパラメータ化メッセージパッシング計算の一実施形態である。なお、これは、方程式7の例の変形である。アルファパラメータと同様に、ベータはビットノード(v)及びチェックノード(c)に依存する。(所与のビットノード及びチェックノードのための)ベータパラメータは、各反復に関して異なり得る。しかしながら、(所与のビットノード及びチェックノードのための)ベータパラメータは、学習プロセス及び保存されたパラメータの数を簡潔にするため、各反復に関して同じにすることができる。また、学習する必要のあるベータパラメータの数を低減することが可能である。したがって、方程式9に表される各エッジについて別個のベータパラメータを学習する必要がない。
【数13】
【0098】
方程式11はパラメータ
【数14】
を用いたパラメータ化最終デコーダ推定値の一実施形態である。なお、これは、方程式8の例の変形であることに留意されたい。
【数15】
【0099】
一実施形態では、プロセス300は、方程式9、方程式10、及び/又は方程式11においてパラメータを学習する。いくつかの場合では、単一のメッセージパッシング計算のために複数のパラメータが学習され得ることに留意されたい。また、方程式9、方程式10、及び/又は方程式11は、様々な実施形態で学習することができる、多くの可能なパラメータ化メッセージパッシング計算のうちのほんの数個であることにも留意されたい。
【0100】
図6は、メッセージパッシングデコーダのためのパラメータを学習するときに使用され得る例示的なネットワーク600である。ネットワーク600は、図5のスパース2部グラフ500の「アンフォールド」バージョンである。ビットノード502(1)~502(3)の3つのセットは、実際にはビットノード502の同じセットである。同様に、チェックノード504(1)~504(2)の2つのセットは、実際にはチェックノード504の同じセットである。ネットワーク600は、ビットノード502とチェックノード504との間でエッジ506に沿ってメッセージを渡す2回の反復(j=1、j=2)を示す。ネットワーク600は、完全接続ネットワークではないことに留意されたい。「完全接続ネットワークではない」とは、1つのレベルのノードが次のレベルの全てのノードに接続されているわけではないことを意味する。ここで、「レベル」は、ビット及びチェックノードの異なるセットである。
【0101】
コードワード(b)602が描画されている。このことは、クリーンコードワードの例であることに留意されたい。コードワード602は、この例では、13ビット(b~b13)のベクトルを含む。コードワード内の各ビットは、一例では0又は1のいずれかである。いくつかの他の値は、2つの状態を表すため使用することができる(例えば、コードワード内の各ビットは、-1又は+1のいずれかであり得る)。ネットワーク600への入力は、ビットノード502(1)に供給される事前LLR(P-P13)のセットである。LLRは、一実施形態において、ビットの推定値とその推定値の信頼性の両方を含有する。LLRは、浮動小数点値、固定少数点値とすることができるが、これらの例に限定されない。
【0102】
一実施形態では、事前LLRは、クリーンコードワード602.のビットにノイズを追加することによって生成される。コードワード内のビットの値も正規化され得る。一実施形態では、事前LLRは、不揮発性メモリに記憶されたデータを読み出すことによって生成される。不揮発性メモリから読み出されるデータは、典型的には、読み出しディスターブ、プログラムディスターブ、電荷損失などの周知の要因によりノイズが多い。事前LLRは、ハードビットのみの読み出しに基づいて、あるいはハードビットとソフトビットの両方の読み出しに基づいて生成され得る。
【0103】
この例では、2回の反復後のビットノード502(3)での結果は、事後LLR(Q~Q13)のセットである。事後LLRは、コードワード内のビットの最終推定値である。図6は、「ラベル付き出力」604を示す。この例では、ラベル付き出力604は、
【数16】
【0104】
によって与えられる。なお、この例では、ラベル付き出力604は、コードワードb及び後方LLRの関数である。方程式12は、クリーンコードワードとデコーダ結果(例えば、ビットの最終推定値)との間の「相互情報」と呼ばれることがある。図6は、出力604に渡されるクリーンコードワード602を描画していることに留意されたい。一実施形態では、パラメータを学習するために、この相互情報を最大化することを試みることを目的とする。相互情報は、相互情報がもはや増加しなくなるなんらかの時点までパラメータが修正されるにつれて、相互情報が増加することがあり得る。一実施形態では、学習プロセスはこの時点で停止される。
【0105】
方程式12は、ソフトビット推定に基づいたラベル付き出力の例である。これは、ネットワーク600.の滑らかな勾配を決定するのに役立ち得る。このような勾配は、パラメータにおける無限小変化がどの程度ラベル付き出力を変化させるかを定義し得る。しかしながら、ラベル付き出力は、ソフトビット推定に基づく必要はない。一実施形態では、ラベル付き出力は、クリーンコードワードなどのデコーダ「ハード決定」である。
【0106】
図7は、メッセージパッシング計算のためのパラメータを学習するプロセス700の一実施形態のフローチャートである。プロセス700は、プロセス300.のステップ302及び304の一実施形態についての更なる詳細を提供する。プロセス700は、コードワードの1つのバッチを処理することを説明する。プロセス700は、図6のネットワーク600などのネットワークと共に使用され得る。したがって、プロセス700は、説明を目的として図6のネットワーク600を参照するが、そのネットワーク600.に限定されない。説明のために、方程式9、方程式10、及び方程式11についてのアルファ及びベータパラメータの例が説明される。プロセス700,の開始時に、パラメータの値を任意に設定することができる。代替的に、パラメータの値は、これに限定されないが、プロセス700を含むパラメータ学習プロセスを実行する以前に学習されていてもよい。
【0107】
ステップ702は、ネットワーク600にノイズが多いコードワードをフォワードパスすることを含む。フォワードパスは、ネットワーク600の入力ノード502(1)から出力ノード502(3)への処理を指す。ステップ702は、ノイズの多いコードワードをデコーダ244.に単に入力することによって達成され得ることに留意されたい。ステップ702は、一実施形態では、メッセージパッシング計算を実行することを含む。図6の例示的なネットワーク600を参照すると、各エッジ506に対してメッセージパッシング計算が実行され得る。図6には2回の反復が示されているが、ステップ702では、より多い又はより少ない反復が行われてもよい。一実施形態では、反復の数は、事後LLRが高くなりすぎることを意図的に防止するために比較的低く維持される。これは、より少ない反復が使用されるときに、デコーダ244がより良く動作するように訓練するのに役立つことがあり、これは、パラメータ化デコーダ244がより速く収束するのに役立つことができる。
【0108】
ステップ702は、ビットノードからチェックノードへの計算、及びチェックノードからビットノードへの計算を実行することを含み得る。一実施形態では、方程式9に示されるようにビットノードからチェックノードへの計算は、ビットノード502(1)からビットノード504(1)について実行され、方程式10に示されるようにチェックノードからビットノードへの計算は、チェックノード504(1)からビットノード502(2)について実行され、方程式9に示されるようにビットノードからチェックノードへの計算は、ビットノード502(2)からチェックノード504(2)について実行され、方程式10に示されるようにチェックノードからビットノードへの計算は、チェックノード504(2)からビットノード502(3)について実行される。別個のパラメータのセットは、各反復(j)について学習され得ることに留意されたい。しかしながら、別の選択肢は、各反復について同じパラメータを使用することによって学習を単純化することである。
【0109】
ステップ704は、デコーダ244のラベル付き出力604を計算することを含む。図6の例示的なネットワーク600に関して、ラベル付き出力604が計算され得る。ラベル付き出力の一例は、上記の方程式12で与えられる。しかしながら、ラベル付け出力のために異なる方程式が使用されてもよい。上述したように、デコーダ244の反復数が、意図的に低く維持されてもよく、これは、方程式12における相互情報をより低く維持することができる。これは、パラメータのより良好な学習を可能にし得る。この文脈において意図的に低くとは、デコーダ244が全てのコードワードの収束を試みるために使用された場合、典型的に使用されるものよりも低いことを意味する。
【0110】
ステップ706は、ネットワーク600を通じたバックワードパスを含む。ステップ706では、1つ以上の部分導関数が計算され得る。これらの部分導関数は、ネットワーク600を通じたステッピングバックワードによって計算され得る。部分導関数としては、これに限定されないが、事後LLRに関するラベル付き出力の部分導関数、パラメータに関するメッセージ計算、別のメッセージ計算に関するメッセージ計算が含まれ得る。例示的な部分導関数を図8A図8Gに示す。ステップ706が、パラメータの各々に対する勾配を決定することを含み得ることにも留意されたい。パラメータについての勾配は、ラベル付き出力604が、パラメータにおける無限小変化と共にどの程度変化するかを示し得る。例示的な勾配を図8H図8Jに示す。例示的な部分導関数及び勾配を、以下で更に詳細に説明する。
【0111】
一実施形態では、デコーダ244は、フォワードパスのメッセージ計算を実行する1つの計算ユニットのセットと、バックワードパスの計算を実行する別の計算ユニットのセットとを有する。一実施形態では、フォワードパスのために使用されるルータなどの一部のデコーダ回路は、バックワードパスのために再使用され得る(おそらく若干の修正を伴って)。
【0112】
このコードワードが処理された後、別のコードワードを処理するかどうかの決定が行われる。そうである場合、プロセス700はステップ702に戻り、バッチ内の次のコードワードを処理する。したがって、バッチ内のコードワードの各々について、部分導関数のセットがステップ706において決定され得る。更に、各パラメータの勾配は、各コードワードについてステップ706において決定され得る。バッチ内の全てのコードワードが処理された後、ステップ710が実行される。
【0113】
ステップ710は、パラメータ勾配に基づいてパラメータを修正することを含む。一実施形態では、ステップ706において各コードワードについて計算されたパラメータ勾配が平均化される。パラメータ勾配を平均化することは、特定のノイズの多いリアリゼーションの影響を平均するのに役立つことができ、グラフに関連する傾向のみが残るようにする。例えば、平均化された勾配は、特定の入力(例えば、「オーバーフィッティング」)に対する計算規則を最適化するのではなく、グラフサイクル特性及びそれらの誘発統計的依存性を捕捉することによって、複数のノイズリアリゼーションに対する計算規則を最適化する勾配であり得る。次いで、パラメータは平均に基づいて修正され得る。
【0114】
方程式13~方程式15は、それぞれ方程式9、方程式10、及び方程式11で使用されるパラメータを修正するための例である。
【数17】
【0115】
デルタ(δα、δβ)は学習速度係数であり、これはステップサイズを決定し得る。学習速度係数は、パラメータがどのくらい速く学習されるかを決定し得る。デルタの値は、所望の学習速度を達成するように選択され得る。用語「学習速度係数」は、本明細書では、その用語がニューラルネットワークに関して一般的に使用されるように使用されている。
【0116】
モーメンタム及び重み減衰などの、様々な追加の最適化「ノブ」及び「ツイーク」が同様に使用され得ることに留意されたい。用語「モーメンタム」は、本明細書では、その用語がニューラルネットワークに関して一般的に使用されるように使用されている。モーメンタムを使用すると、ラベル付き出力を同じ軌道上に維持するのに役立つことができる。言い換えると、これは、ラベル付き出力をジグザグパターンから維持するのに役立つことができる。モーメンタムは、ラベル付き出力が局所的最小値で動かなくなるのを回避するのにも役立ち得る。したがって、モーメンタムは、学習プロセスが適切に収束するのに役立つことができる。ここでの重み減衰は、その用語がニューラルネットワークに関して一般的に使用されるような用語「重み減衰」を指す。一部の実施形態では、重み減衰に好適な値は、オーバーフィッティング又はアンダーフィッティングを防止するのに役立つように選択される。
【0117】
プロセス700は、リフトグラフ(例えば、準環状LDPCコード)に基づくコードにも適用され得る。この場合、各「リフト」ノード又は「リフト」エッジに対して使用される計算規則は同じであり得る(「リフト」ノード/エッジ内の全てのノード/エッジに対するグラフ及び計算ツリーの対称性による)。したがって、勾配の平均化はまた、「リフト」ノード/エッジのノード/エッジに関連つけられた全ての勾配にわたって実行され得る。これは、訓練を必要とするパラメータの数を低減し、訓練プロセスを加速する。
【0118】
パラメータの数及び問題の次元を更に低減するために、いくつかの追加的な制約がパラメータに適用され得る。例えば、一実施形態では、フォーシングが使用される。フォーシングのために使用され得る例示的な方程式は、方程式16に示される。
【数18】
【0119】
方程式16は、ビットノードからチェックノードへの計算に関連付けられたアルファパラメータに適用される制約を示す。例えば、所与のビットノードは、いくつかのチェックノードにメッセージを送信し得る。一実施形態では、アルファパラメータの値は、異なるチェックノードへのメッセージに対して異なり得る。方程式16は、どのようにアルファの値が、(所与の反復jについて)所与のビットノードについてビットノードからチェックノードへのメッセージ計算の全てに対して同じとなるように強制され得るかを示す。アルファの値は、異なる反復(j)に対して異なり得ることに留意されたい。フォーシング技法は、チェックノードからビットノードへの計算において、ベータなどの他のパラメータのために使用することができる。
【0120】
追加的に、0~1の値に制限するように、いくつかの制約がパラメータに適用され得る。これは、訓練プロセスを安定化させ、速度を上げ得る。そのような制約による推論は、パラメータをメッセージ計算規則に適用される「減衰」係数として見ることができることである。これらの減衰係数は、例えば、メッセージ間の統計的依存性を補償し得る。メッセージが統計的に独立している場合(例えば、計算グラフ内にサイクルがない場合)、減衰の必要性はない(例えば、
【数19】
)。統計的依存性が強くなるにつれて(計算グラフ内の複数の短いサイクルの場合のように)、減衰は、メッセージが以前のメッセージと完全に相関する場合には、減衰を完了するまで(例えば
【数20】
)より強くなる(例えば、
【数21】
)。
【0121】
ノイズの多いコードワードの1つのバッチに対してプロセス700を完了した後、プロセス700が、次いで、ノイズの多いコードワードの次のバッチに対して使用されてもよく、この回はパラメータの新しい値を使用する。したがって、ノイズの多いコードワードの各バッチを用いて、パラメータは更に修正され得る。一実施形態では、この訓練プロセスは、ネットワークの出力(例えば、ラベル付き出力604)におけるソフトメトリックが飽和する(例えば、その周辺で変動する何らかの最大値に達する)まで継続する。
【0122】
図8A図8Jは、図7のステップ706の一実施形態のバックワードパス中に計算され得る部分導関数の例である。これは、部分導関数が計算される順序が、ネットワークの出力604から入力までであり得るため、バックワードパスと呼ばれる。
【0123】
図8Aは、事後LLR(Q)に関するラベル付き出力(I)の部分導関数についての例示的な方程式である。図8Bは、チェックノードからビットノードへのメッセージ計算に関する事後LLR(Q)の部分導関数についての例示的な方程式である。図8Cは、最終デコーダ推定(例えば、方程式11)におけるパラメータ
【数22】
に関する事後LLR(Q)の部分導関数の例示的な方程式である。
【0124】
図8Dは、ビットノードからチェックノードへの計算に関する、チェックノードからビットノードへの計算の部分導関数についての例示的な方程式である。図8Eは、チェックノードからビットノードへの計算におけるパラメータ
【数23】
に関するチェックノードからビットノードへの計算の部分導関数についての例示的な方程式である。
【0125】
図8Fは、チェックノードからビットノードへの計算に関するビットノードからチェックノードへの計算の部分導関数についての例示的な方程式である。図8Gは、ビットノードからチェックノードへの計算におけるパラメータ
【数24】
に関するビットノードからチェックノードへの計算の部分導関数についての例示的な方程式である。
【0126】
図8H図8Jは、例えばパラメータ勾配についての方程式を示す。パラメータ勾配は、ラベル付き出力604がパラメータにおける無限小変化に関してどのように変化するかを示す。図8Hは、ビットノードからチェックノードへの計算(例えば、方程式9)において、パラメータ
【数25】
に関するラベル付き出力604の部分導関数についての例示的な方程式である。図8Jは、チェックノードからビットノードへの計算(例えば、方程式10)におけるパラメータ
【数26】
に関するラベル付き出力604の部分導関数についての例示的な方程式である。図8Jは、最終デコーダ推定値(例えば、方程式11)におけるパラメータ
【数27】
に関するラベル付き出力604の部分導関数についての例示的な方程式である。
【0127】
方程式9~方程式11のパラメータ化メッセージパッシング計算は、ほんの数例である。方程式17は、メッセージ規則をチェックする変数に対する別の例示的なパラメータ化メッセージパッシング計算を示す。
【数28】
【0128】
このパラメトリックモデルでは、各チェック・変数メッセージ
【数29】
を乗算する係数は、固定された「減衰」係数ではない。それは、チェック・変数メッセージの大きさ
【数30】
の関数である。このように、メッセージの信頼性が高い又は低い場合に、より強い又は弱い減衰が適用され得る。別の変形では、チェック・変数メッセージの大きさ
【数31】
は、可変ノードに入る他のチェック・可変メッセージの大きさによって置き換えられ得る。図8K~8Nは、方程式16のメッセージ規則をチェックする変数に対するバックワードパスについての例示的な導関数表現を描画する。
【0129】
方程式18は、パラメトリックメッセージ計算の別の例である。
【数32】
【0130】
方程式18において、
【数33】
【0131】
方程式18において、付随するメッセージに類似する場合、より高い減衰係数がメッセージに適用され得る。これは、メッセージ間のより強い統計的依存性を示し得ることに留意されたい。
【0132】
デコーダ244の一実施形態は、ネットワーク600を実装するための回路を含む。回路は、フォワードパスとリバースパスの両方を実行する能力がある。デコーダ244は、計算を実行するためのプロセッサ(又は計算ユニット)及びメッセージ(又は計算の結果)を記憶するためのメモリを含み得る。
【0133】
図9は、パラメータ化反復メッセージパッシングデコーダ244のためのパラメータのオンライン学習のプロセス900の一実施形態のフローチャートである。プロセス900は、コールドデータに使用され得るが、コールドデータに限定されない。一部の実施形態では、学習パラメータは、クリーンコードワードに基づく。例えば、図6のネットワークでは、ラベル付き出力604は、クリーンコードワードと事後LLRとの間の相互情報に基づく。プロセス900は、クリーンコードワードを学習するための1つの技術を示し、これは、パラメータ化反復メッセージパッシングデコーダ244のためのパラメータを学習するために、ラベル付け出力で使用することができる。
【0134】
一実施形態では、プロセス900は、「コールドデータ」が読み出されるときに使用される。コールドデータは、本明細書では、一回だけ書き込まれるか、あるいは非常にまれに更新されるデータとして定義される。以下は、コールドデータを識別するいくつかの方法である。特定のデータの更新頻度が追跡され得る。更新頻度が閾値頻度よりも低い場合、データは、コールドデータである。別の代替案は、そのアプリケーションに従ってデータを識別することである。例えば、ソーシャルメディアコンテンツ(写真、ビデオ、ステータスなど)は、まれに更新されるであろう。したがって、所定のアプリケーションに関連付けられたデータは、コールドデータであると仮定され得る。別の代替案は、オペレーティングシステムブートシーケンスなどの、まれに更新されると知られている、データの事前定義された分類を有することである。別の例として、所定のメモリセクション又はパーティションは、コールドデータ又は一回だけ書き込まれ、複数回読み取られることがあるデータを記憶するために専用であり得る。
【0135】
コールドデータは、パラメータを特性により良く調整するために経時的に学習され得る所定の特性を有し得る。そのような特性の一例は、「ノイズリアリゼーション」である。ノイズリアリゼーションは、エラーベクトル内のパターンを指し得る。例えば、メモリセルのグループが一回プログラムされ、何回も読み戻される場合、同じメモリセルが一貫して同じエラーを有し得る。エラーベクトル内の特定のパターンは、プログラミングプロセスにおける失敗に起因し得る。例えば、いくつかのメモリセルは、オーバープログラム又はアンダープログラムされていることがある。このようなノイズリアリゼーションを学習することにより、デコーダ244はより良好に実行することができる。例えば、電力を節約することができ、復号待ち時間を低減することができ、エラー訂正をより正確に行うことができる。
【0136】
誤差ベクトルは、必ずしも経時的に一定ある必要はないことに留意されたい。例えば、読み出しディスターブによりエラーが生じる可能性がある。したがって、訓練は、経時的に変化するこのような条件について学習するためも使用することができる。このような訓練は、デコーダ244をノイズ統計(又はノイズ特性)に調整するために使用することができる。したがって、一実施形態では、デコーダは、経時的に変化する不揮発性メモリのノイズ特性に適応される。ノイズ統計は、ノイズリアリゼーションよりも一般的である。例えば、ノイズ統計は、エラーになりやすいビットのパーセントを示し得る。
【0137】
プロセス900は、デコーダ244をホストトラフィック特性に適応させ得ることにも留意されたい。したがって、パラメータを学習することにより、デコーダが特定のホストトラフィック特性に対してより良く実行するのに役立つことができる。
【0138】
ステップ902は、コードワードに符号化され、不揮発性メモリに記憶されたデータにアクセスすることを含む。これは、コールドデータであってもよいが、コールドデータに限定されない。
【0139】
ステップ904は、パラメータ化反復メッセージパッシングデコーダ224使用してコードワードを復号することを含む。ステップ904では、パラメータ化反復メッセージパッシングデコーダ224は、比較的多数の反復で実行され、デコーダ結果が(必要に応じて)収束するのに役立ち得る。言い換えると、ステップ904の一実施形態の目標は、ノイズの多いコードワードの復号に成功する確率が高いことである。例えば、デコーダ224は、一例として、必要に応じて収束するために最大10回の反復で実行することができる。代替的に、ステップ904では、パラメータ化反復メッセージパッシングデコーダ224は、より少数の反復で実行されてもよく、その意図は、デコーダ結果を必ずしも収束させる必要がないということである。例えば、デコーダ224は、一例として、最大4回、5回、又は6回の反復で実行することができる。
【0140】
ステップ906は、復号が成功したかどうかの決定である。コードワードの復号が成功した場合、ステップ910で、クリーンコードワードとして記憶される。ステップ912は、復号するより多くのコードワードが存在するかどうかの決定である。そうである場合、プロセスはステップ902に戻り、次のコードワードを読み出し、復号する。
【0141】
コードワードの復号に成功しない場合(ステップ906=いいえ)、次いで、ステップ908で、非パラメータ化デコーダ245がコードワードを復号するために使用され得る。一実施形態では、非パラメータ化デコーダ245は、パラメータがデフォルト値に設定されたパラメータ化デコーダ244であり得ることに留意されたい。説明のために、非パラメータ化デコーダ245は、コードワードの復号に成功すると仮定される。復号に成功した後、ステップ910で、クリーンコードワードが記憶される。
【0142】
全てのコードワードが処理されると(ステップ912=いいえ)、プロセスはステップ914に進む。ステップ914では、ステップ302のためのノイズの多いコードワードのバッチとしてメモリからのデータを用いてプロセス300が実行される。このデータは、ハードビットのみか、ハードビット及びソフトビットを使用して読み出され得る。いずれの方法でも、事前LLRをビット単位で読み出されたものに対して決定し得る。ステップ910で記憶されたクリーンコードワードは、ラベル付き出力604で使用され得る。したがって、プロセス300は、1つ以上のメッセージパッシング計算のための1つ以上のパラメータを学習するフィールドにおいて使用され得る。デコーダ244が、これらに限定されないが、コールドデータのノイズリアリゼーション、(経時的に変化し得る)不揮発性メモリのノイズ統計(又は特性)、及び/又はホストトラフィック特性を含むファクタに適応されているときは、ステップ914中であると留意されたい。
【0143】
(ステップ914で)プロセス300を実行するときに、パラメータ化反復メッセージパッシングデコーダ224における反復回数は、ステップ904よりも少なくてもよい(ステップ904で、より多くの反復回数でパラメータ化されたデコーダ224を実行するオプションが使用されたと仮定する)。訓練の目標は必ずしもコードワードを常に復号に成功することが必要であるというわけではないことに留意されたい。むしろ、訓練プロセスの目標は、デコーダ244を訓練してより速く収束させることである。これが達成され得る1つの方法は、比較的少数の反復を使用することである。例えば、訓練中に、デコーダ244は、4回、5回、又は6回の反復で実行され得る。また、事後LLRの値は、典型的には、デコーダ244の追加の反復で増加し、何らかの最大値で飽和してもよく、結果として、計算勾配が計算されることを許容しない(すなわち、所定のパラメータを変更することは、既に飽和しているため事後LLR出力を変化させず、したがって、特定のパラメータについての勾配は決定することができない)。したがって、より少ない反復を使用した訓練は、より低い事後LLRをもたらすことがあり、これは、異なるパラメータについての勾配を計算するのに有用とすることができる。
【0144】
図10は、パラメータ化反復メッセージデコーダ244のためのパラメータを管理するプロセス1000の一実施形態のフローチャートである。ステップ1002は、パラメータを記憶デバイス領域126aからRAM(例えば、122b、図1)にロードすることを含む。ステップ1002は、メモリシステム100の初期化時に実行され得る。
【0145】
ステップ1004は、パラメータ化反復メッセージデコーダ244においてRAMに記憶されたパラメータを使用することを含む。
【0146】
ステップ1006は、パラメータを更新し、更新されたパラメータをRAMに記憶することを含む。
【0147】
ステップ1008は、記憶デバイス領域126aに更新されたパラメータを記憶するかどうかを決定することを含む。更新されたパラメータは、パラメータに対する各「T」回更新後に記憶されてもよく、「T」は、ゼロよりも大きい任意の整数であり得る。更新されたパラメータは、メモリシステム100のシャットダウンについて何らかの警告が与えられる場合にも記憶され得る。
【0148】
ステップ1010は、更新されたパラメータを記憶デバイス領域126aに記憶することを含む。次いで、プロセスは、更新されたパラメータが記憶デバイス領域126aに記憶されるかどうかにかかわらずステップ1004に戻る。
【0149】
図11は、パラメータ化デコーダ244を有するメモリシステム100の一実施形態を描画する。パラメータ化デコーダ244は、一実施形態では、デコーダ244によって使用されるコードに対する2部グラフを記憶するグラフ構造ROM1102を有する。パラメータメモリ1110は、計算に使用されるパラメータを記憶する。一実施形態では、グラフのエッジごと及び反復ごとにパラメータが存在する。しかしながら、グラフのエッジごと及び反復ごとに固有のパラメータを有する必要はない。一実施形態では、同じパラメータが各反復に対して使用される。一実施形態では、同じパラメータが、少なくとも1回の反復で、所定のノードから渡された全てのメッセージに対して使用される。
【0150】
メッセージパッシングコンピュータ1112は、方程式9~方程式11及び方程式17の例などのパラメータを有するメッセージを計算するように構成され得る。勾配コンピュータ1114は、図8A図8Jなどの部分導関数及び勾配を計算するように構成され得る。パラメータ学習器1116は、方程式13~方程式15の例などのパラメータの値を計算するように構成され得る。パラメータ学習器1116は、学習されたパラメータをパラメータメモリ1110に記憶するようにも構成され得る。
【0151】
メッセージパッシングコンピュータ1112、勾配コンピュータ1114、及びパラメータ学習器1116は、各々様々な計算を実行するように構成されている計算ユニット1104を含む。一部の計算ユニットは、所定の種類の計算を実行するために専用であり得る。例えば、計算ユニット1104は、本明細書に説明される方程式のうちの1つを実行するハードウェアであり得る。したがって、メッセージパッシングコンピュータ1112における計算ユニット1104は、方程式9~方程式11及び方程式17の例などのメッセージパッシング計算を実行し得る。勾配コンピュータ1114における計算ユニット1104は、図8A図8Jの例などの部分導関数及び勾配を計算するなどの他の計算を実行し得る。パラメータ学習器における計算ユニット1104は、方程式12~方程式15などの方程式を実行し得る。計算ユニット1104は、パラメータに基づいて設定可能であり得ることに留意されたい。計算ユニット1104は、一実施形態では、より高速なスループットのためにハードウェアに実装される。しかしながら、計算ユニット1104は、ソフトウェア、又はハードウェアとソフトウェアとの組み合わせとして実装することができる。メッセージメモリ1106は、計算の結果を記憶するために使用され得る。
【0152】
ルータ1108は、一実施形態では、データパスを制御するように構成されている。ルータ1108は、グラフ構造に基づいてメッセージを計算ユニット1104にルーティングするために使用され得る。ルータ1108は、計算ユニット1104に適切なパラメータを提供するようにも構成され得る。したがって、ルータ1108は、どの計算がノード間で実行されるか、計算の順序等を制御するために使用され得る。
【0153】
クリーンコードワードストレージ1120は、コードワードのクリーンバージョンを記憶するために使用される。一実施形態では、コードワードのクリーンバージョンは、プロセス900のステップ910で提供される。代わりに、クリーンバージョンはオフラインで提供することができる。一実施形態では、ラベル付き出力として使用するために、デコーダ244によって、クリーンコードワードがアクセスされる。
【0154】
ノイズの多いコードワード生成器1122は、コードワードのノイズの多いバージョンを作成し、デコーダ244にノイズの多いコードワードを提供するように構成されている。一実施形態では、ノイズの多いコードワード生成器1122は、ノイズをクリーンコードワードに追加して、ノイズの多いコードワードを生成する。一実施形態では、ノイズの多いコードワード作成器1122は、不揮発性メモリ126からデータを読み出し、それに基づいて初期ビット推定値(例えば、LLR)を生成する。これらは、事前LLRと呼ばれることがあり、ノイズの多いコードワードとしてデコーダ244に提供され得る。
【0155】
システム100は、データを符号化し、不揮発性メモリ126に符号化データを記憶するエンコーダ(図11には図示せず)も有し得る。このデータは、ROM1102内のグラフ構造の2部グラフのコードに従って符号化され得る。デコーダ244は、一実施形態では、学習されたパラメータを使用して、不揮発性メモリ126からこのデータを復号する。なお、メッセージパッシングコンピュータ1112における計算ユニット1104は、パラメータを学習するとき、及び不揮発性メモリ126からデータを復号するときの両方で使用され得ることに留意されたい。したがって、メッセージパッシングコンピュータ1112における計算ユニット1104が構成可能なハードウェアである場合、システム100は、この構成可能なハードウェアの効率的な使用を行う。
【0156】
多くのメッセージがメモリ1106から読み出される必要があり得ることに留意されたい。しかしながら、一度に1つのメッセージをメモリ1106から読み出すことのみが可能であり得る。したがって、メモリアクセスは、スループットを潜在的に遅くすることができる。一部の実施形態では、スループットの増大に役立てるために、リフトグラフが使用される。リフトグラフを使用すると、訓練プロセスの速度を上げること、及びより少ないパラメータを記憶することの両方に役立つことができる。一部の実施形態では、同じサイクル構造を見ているリフトエッジのセットをもたらすリフトグラフには対称性が存在する。一実施形態では、リフトエッジのセットなどは、同じパラメータ値を有する。したがって、より少ないパラメータを計算し、記憶する必要がある。
【0157】
図12は、一実施形態に従って使用することができる不揮発性ストレージのデータを符号化及び復号するためのシステムを描画する。エラー訂正制御は、不揮発性メモリアレイ内の誤った又は破損したデータの読み出しを検出及び訂正するために採用される。一般的に言えば、いくつかの追加のECC又はパリティビットは、入力データから計算され、符号化スキームに従ってメモリアレイに記憶される。読み出すときに、入力データ及びECCビットが両方とも読み出され、デコーダは両方を使用して、エラーが存在するかどうかを検出し、場合によっては、どのビットにエラーが発生するかを検出する。
【0158】
図23のエラー訂正制御システムは、異なるシステム及びアーキテクチャを使用することができるが、一実施形態ではコントローラ144の一部として実装することができる。図23のシステムは、エンコーダ1272、メモリアレイ474、LLR(対数尤度比)テーブル1276及びデコーダ1278を含む。エンコーダ1272はユーザデータを受信し、これは情報ビットと呼ばれることもあり、メモリアレイ1274に記憶される。情報ビットは、行列i=[1 0]によって表される。エンコーダ1202は、パリティビットが情報ビットに追加されて、行列又はコードワードv=[1 0 1 0]によって表されるデータを提供するエラー訂正符号化プロセスを実装し、2つのパリティビットがデータビットに追加されている。より複雑な方法で入力データを出力データにマッピングする、下記に論じるような他の技術を使用することができる。Gallagerコードとも呼ばれる低密度パリティチェック(LDPC)コードを使用することができる。実際には、このようなコードは、典型的には、多数の記憶要素にわたって符号化された複数のページに適用される。次いで、データビットは論理ページにマッピングされ、不揮発性記憶要素を、vに対応するプログラミング状態、例えば、X=12にプログラミングすることによって不揮発性ストレージ1274に記憶することができ、4ビットデータ行列vにより、16のプログラミング状態を使用することができる。一般に、パリティビットは、各個々のセルには使用されない。
【0159】
1つの可能な実装では、エンコーダ1272で実装される符号化に対応するエラー訂正復号を実装する反復確率復号プロセスが使用される。反復確率復号は、コードワード内の各ビットに初期確率メトリックを割り当てることによって、コードワードを復号することを試みる。確率メトリックは、各ビットの信頼性、すなわち、ビットがどの程度エラーになっていないかを示す。1つのアプローチでは、確率メトリックは、LLRテーブル1276から得られる対数尤度比LLRである。LLR値は、記憶要素から読み出された様々なバイナリビットの値が既知である信頼性の尺度である。
【0160】
ビットに対するLLRは、
【数34】
で与えられ、P(v=0|Y)は、読み出し状態がYであるという条件でビットが0である確率であり、P(v=1|Y)は、読み出し状態がYであるという条件でビットが1である確率である。したがって、LLR>0はビットが1よりも0である可能性が高いことを示し、LLR<0はビットが0よりも1である可能性が高いことを示し、エラー訂正コードの1つ以上のパリティチェックを満たす。更に、より大きい大きさは、より高い確率又は信頼性を示す。したがって、LLR=63を有するビットは、LLR=5を有するビットよりも0である可能性が高く、LLR=-63を有するビットは、LLR=-5を有するビットよりも1である可能性が高い。LLR=0は、ビットが0又は1である可能性が同じであることを示す。
【0161】
LLR値は、コードワードy1内の4ビット位置の各々に対して提供することができる。例えば、4.5、5.2、-5.9及び6.6のLLRは、それぞれy1のビット0、0、1及び0に割り当てられる。更に、LLRテーブルは、ビット値が異なるコードワードにおいて一貫しているときに、より大きい大きさのLLRが使用されるように、複数の読み出し結果を説明することができる。
【0162】
デコーダ1278は、コードワードy1及びLLRを受信する。デコーダ1278は、エラー符号化プロセスのパリティチェックが満たされたかどうかを決定する連続反復で反復する。全てのパリティチェックが満たされた場合、復号プロセスは収束し、コードワードはエラー訂正されている。1つ以上のパリティチェックが満たされていない場合、デコーダは、パリティチェックと矛盾するビットのうちの1つ以上のLLRを調整し、次いで、パリティチェック又は次のチェックをプロセスにおいて再適用して、それが満たされたかどうかを決定する。例えば、LLRの大きさ及び/又は極性を調整することができる。問題のパリティチェックがまだ満たされていない場合、LLRは、別の反復において再び調整することができる。LLRを調整することにより、全てではないが一部の場合に、ビットを(例えば、0から1に、あるいは1から0に)フリップすることができる。一実施形態では、該当する場合には、問題のパリティチェックが満たされると、別のパリティチェックがコードワードに適用される。他の場合には、プロセスは次のパリティチェックに移り、その後に失敗したチェックにループバックする。プロセスは、全てのパリティチェックを満たすことを試みる。したがって、y1の復号プロセスは、パリティビットv及び復号された情報ビットiを含む復号情報を取得して完了する。
【0163】
一実施形態では、エンコーダ1272は、不規則な低密度パリティックチェックコードを使用してデータを符号化するように構成された、不規則な低密度パリチェックエンコーダである。不規則な低密度パリティチェックエンコーダは、一実施形態において、不揮発性メモリ(例えば、NAND、NOR、ReRAM、相変化メモリ(PCM))に記憶されるデータを符号化するために使用される。一実施形態では、デコーダ1278は、不規則な低密度パリティチェックエンコーダ1272を用いて符号化した後に記憶されたデータを復号するように構成された、不規則な低密度パリティチェックデコーダである。不規則な低密度パリティチェックエンコーダ1272は、メモリシステム100のコントローラ122におけるECC224において使用され得る。不規則な低密度パリティチェックデコーダ1278は、メモリシステム100のコントローラ122におけるECC224において使用され得る。
不規則な低密度パリティチェックコード
【0164】
LDPC(低密度パリティチェック)コードは、反復復号下でほぼシャノン限界性能を呈する最新のエラー訂正コードである。LDPCコードは、そのパリティチェック行列が変動する列重み及び/又は変動する行重みを有する場合、不規則になると言われる。図13は、規則的なコードを有するLDPCパリティチェック行列を示す。図14は、不規則なコードを有するLDPCパリティチェック行列を示す。
【0165】
不規則なLDPCコードは、エラー訂正性能に関して規則的なLDPCコードよりも性能が優れているが、これらはいくつかの欠点を有する。すなわち、設計がより複雑であり、エラーフロアを発達させる傾向があり、デコーダの実装を複雑にする。
制約された規則コード
【0166】
完全に最適化された不規則なコード(制約なしで)は、通常、改善された修正能力を可能にする低重み列の大部分を含む。しかしながら、低列重みは、いくつかの実用的な問題をもたらす。具体的には、列重み2及び3は、エラーフロアなしコードを生成することがより難しくなる。別の問題は、低み列がビットフリップデコーダで十分に機能しないことである。ビットフリップデコーダは、多数決論理に基づく準最適デコーダであるため、単純なフリップ決定に対して各列に限られた量の情報が存在するため、低重み列で十分に機能しない。ビットフリップデコーダの使用は、通常動作ビットエラー率(BER)の大きさのオーダーで電力効率を改善することを可能にし、したがって、最も多くの製品において必須である。したがって、記憶アプリケーションに必要とされる低エラーフロアをサポートし、低電力ビットフリップ復号モードをサポートするために、本明細書では、制約された不規則なコードをどのように設計するかを説明する。最小列重みが4であることを制限下で、列重みスペクトルを最適化する方法についても説明する。
スペクトル最適化における検討及びトレードオフ
【0167】
所与の長さ及び速度についてスペクトルを最適化するときに、以下のメトリックを考慮する。すなわち、1)デコーダの種類、2)チャネルの種類、及び3)複雑性である。
【0168】
デコーダの種類。本明細書に記載の解決策では、2つの種類のデコーダを提案する。単純な準最適ビット反転デコーダは、低媒体BER(ビットエラー率)に使用されることがあり、これはデコーダのスループット及び電力を左右する。BP(belief-propogation、ビリーフプロポゲーション)アルゴリズムに基づくソフトデコーダは、高いBERを有するまれなケースに使用され得る。スペクトルを最適化するとき、いずれかのデコーダについて最適化することができる。
【0169】
チャネルの種類。メモリ媒体は、2つのチャネルモデルによって特徴付けることができる。すなわち、1)ハードビットで復号するために使用されるバイナリ対称チャネル(Binary Symmetric Channel、BSC)、及び2)ソフトビットでの復号シナリオと類似する、適合性白色ガウス雑音(Adaptice White Gaussian Noise、AWGN)チャネルである。
【0170】
複雑さ。コードの複雑さは、コードマトリックス内の非ゼロ巡回の数で測定され得る。非ゼロのエントリが多いほど、各反復において多くの動作が実行に必要とされ、デコーダの電力効率及びコストに影響を及ぼす。
【0171】
いくつかの別個の最適化ターゲットが存在するため、大域的な解決策は存在しない。BSCについての最適なコードは、AWGNにとって必ずしも最適ではない。ビットフリップデコーダ(スループット)について良好なコードは、高い複雑性を有することがある。したがって、良好な「全般にわたる」スペクトルを見つけることを試みるか、あるいは特定の製品ライン要件に従って最適化ターゲットを調整することができる。デコーダアーキテクチャが汎用的であるため、複数のLDPCコードをサポートすることができ、それらを異なる要件に対してオンザフライで変更することを可能にし得る。例えば、1つの選択肢は、新しいデバイス上での電力効率に焦点を当て、寿命末期の改善された補正能力に焦点を合わせることである。
不規則なコード設計のためのツール
【0172】
一態様では、スペクトル設計ツールは、不規則なコードサポートのために開発された。別の態様では、グラフ生成ツール不規則なコードサポートのために開発された。
【0173】
スペクトル設計ツールは、異なるデコーダ及びチャネルでの所与の程度スペクトルの性能を推定するように設計されたツールのセットである。スペクトル設計ツールは、最適な閾値についてスキャン及び最適化するために使用される。以下のスペクトル設計ツールが本明細書に開示される。
【0174】
スペクトル設計ツールの一実施形態は、0-SBのためのビットフリップデコーダである。ビット反転デコーダ実装の密度エボリューション分析。
【0175】
スペクトル設計ツールの別の実施形態は、BSC上のBPデコーダである。ツールは、シリアルスケジュール固定点デコーダ実装下で、所与の不規則なLDPCプロトコルの密度エボリューション分析に基づく。
【0176】
スペクトル設計ツールの別の実施形態は、AWGNチャネル上のBPデコーダである。このツールは、外部情報転送(EXIT)分析に基づき、これは、線形制約のセットとしての復号の成功のための条件を説明し、線形プログラミング最適化装置を使用して効率的なスペクトル設計を可能にする。
【0177】
所与のスペクトルに対するLDPCグラフを構築するグラフ生成ツールの一実施形態。このグラフ生成ツールは、誤差最小化プログレッシングエッジ成長(Error Minimization Progressive Edge Growth、EMPEG)アルゴリズムの修正版に基づく。EMPEGアルゴリズムは、エラーフロアにつながり得る有害な構成を回避しながら、エッジごとにグラフエッジを生成する。
要約及び結果
【0178】
不規則なLDPCコードの使用は、設計において多くの自由度を導入する。これは、記憶製品の様々な測定基準においてかなりのゲインを提供する。図15図16、及び図17は、異なる基準に従って最適化された規則的なLDPCコードと不規則なLDPCコードの性能の比較を示す。予想されるように、各メトリックについて最適化されたLDPCコードは、基準において最適であり、他の基準においては準最適である。製品の要件に基づいて、異なるメトリック間の最適なトレードオフを有するLDPCコードを要求することに基づいて、設計することができる。図15図17は、いくつかのトレードオフを示す。
【0179】
図15は、いくつかのLDPCコードについてのブロックエラー率(BLER)対ビットエラー率(BER)のグラフを示す。グラフは、規則的なLDPCコードの曲線1502、不規則なLDPCコード(2-SB)の曲線1504、不規則なLDPCコード(0-SB)の曲線1506、及び不規則なLDPCコード(BF)の曲線1508を示す。所与のBER(例えば、1.65%)では、不規則なLDPCコード(2-SB)についての曲線1504は、最も低いBLERを有する。
【0180】
図16は、いくつかのLDPCコードについてのブロックエラー率(BLER)対ビットエラー率(BER)の別のグラフを示す。グラフは、規則的なLDPCコードの曲線1602、不規則なLDPCコード(2-SB)の曲線1604、不規則なLDPCコード(0-SB)の曲線1606、及び不規則なLDPCコード(BF)の曲線1608を示す。所与のBER(例えば、0.8%)では、不規則なLDPCコード(0-SB)についての曲線1606は、最も低いBLERを有する。
【0181】
図17は、いくつかのLDPCコードについてのスループット対ビットエラー率(BER)のグラフを示す。グラフは、規則的なLDPCコードの曲線1702、不規則なLDPCコード(2-SB)の曲線1704、不規則なLDPCコード(0-SB)の曲線1706、及び不規則なLDPCコード(BF)の曲線1708を示す。不規則なLDPCコードの3つ全ては、所与のBERに対してより大きなスループットを有する。この例では、所与のBER(例えば、0.45%)では、曲線1708は、不規則なLDPCコード(BF)が最も高いスループットを有することを示す。
不規則なコードスキームの適合的使用
【0182】
一部の実施形態において、ECCエンジン224は、以下により詳細に説明する特定のシステムレベルトリガ又はポリシーに従って、複数のエラー訂正コードのうちの1つを選択する。一部の実施形態では、各エラー訂正コードは、異なるターゲットについて最適化される。
【0183】
エラー訂正コードは、電力、信頼性、及び性能などの複数のドメインのうちの1つをターゲットにする。例えば、通常モード(例えば、通常の温度及び作動条件)では、ECCエンジン224は、性能(例えば、スループット)を最適化する性能指向エラー訂正コードを選択し得る。極端モード(例えば、高いデバイス温度又は臨界データ)では、ECCエンジン224は、信頼性を最適化する訂正能力指向エラー訂正コードを選択し得る。低電力モードでは、ECCエンジン224は、電力を最適化する電流消費指向エラー訂正コードを選択し得る。選択されたエラー訂正コードにかかわらず、ECCエンジン224は、同じデータの符号化及び復号中に、同じエラー訂正コーディングスキームを使用する。
【0184】
本明細書で説明されるエラー訂正コードを選択するための実施形態は、コードレート(例えば、コーディングスキームで使用されるパリティビットの量)を変更することを目的とする、調整可能なエラー訂正コードスキームとは異なる。このようなスキームは、フラッシュ遷移層(flash transition layer、FTL)の複雑性に大きな影響を及ぼすため、実装することは困難である。代わりに、本明細書で説明される実施形態では、パリティ量は、全てのエラー訂正コードに対して同一であり、それらの実装を大幅に簡素化する。加えて、本明細書で説明される実施形態は、復号動作中にエラー訂正コードの自動検出のための方法を含み、(以下により詳細に説明されるように)実装を更に簡素化する。
【0185】
上述のように、例示的なエラー訂正コードは、不規則なLDPCコードである。LDPCコードは、そのパリティックチェック行列が変動する列重み及び/又は変動する行重みを有する場合、不規則である。所与の長さ及びレートのスペクトルを最適化するとき、以下のメトリックを考慮する。すなわち、1)デコーダの種類、2)チャネルの種類、及び3)複雑性である。
【0186】
いくつかの別個の最適化ターゲットが存在するため、大域的な解決策は存在しない。すなわち、BSCに対して最適なコードはAWGNに対して最適ではなく、ビットフリップデコーダ(高スループット)に対して良好なコードは、高い複雑性を有し得る。したがって、記憶コントローラは、良好な「全般にわたる」スペクトルを使用することができるか、あるいは特定の製品ライン要件に従って最適化ターゲットを調整することができる。
【0187】
図18は、LDPCコードに対する最適化ターゲットを示すグラフである。規則的なLDPCコード1802は、0-SB及び2-SB補正能力に関して等しく最適化された、良好な全般にわたるスペクトルを有する。不規則なLDPCコード1804-1は、0-SB補正能力のために最適化され、不規則なLDPCコード1804-2は、2-SB補正能力のために最適化される。
【0188】
図19は、記憶デバイスシステムの記憶媒体内の1つ以上のメモリセルに対する書き込み動作中にデータを符号化する方法1900のフローチャートを示し、具体的には、ホストデバイスから受信した書き込みコマンドに応答する。方法1900は、典型的には、コントローラ122(又はEECエンジン224及び/又はエンコーダ256)によって実行されるが、代替的に、記憶デバイスシステムが埋め込まれたコンピュータシステムによって実行されてもよい。
【0189】
コントローラは、コンピュータシステム(代替的に、本明細書ではホスト又はホストシステムと呼ばれる)から書き込みコマンドを受信する(1902)。書き込みコマンドは、論理アドレス又は物理アドレスを指定することなどによって、記憶媒体(例えば、不揮発性メモリ108)に書き込まれるデータを指定する。一部の実施形態では、コントローラは、書き込みコマンドに応答して、符号化されたデータを生成するように、指定されたデータを符号化するプロセスを制御する。符号化スキームの少なくとも一部は、以下でより詳細に論じられる、エラー訂正コーディングスキームの選択を含む。
【0190】
コントローラは、記憶デバイスシステムの作動モード、及び/又は書き込まれるデータのデータタイプを決定する(1904)。作動モードの例としては、とりわけ、通常モード、極端モード、及び低電力消費モードが含まれ得る。作動モードの例は、以下により詳細に説明される。
【0191】
コントローラは、作動モード、デバイス固有基準、及び/又はデータタイプに基づいてコーディングスキームを選択する(1906)。一部の実施形態では、コントローラは、データ記憶システムの1つ以上の条件及び/又は書き込まれるデータのデータ特性基準を検出することであって、1つ以上の条件は、環境条件、データ記憶システムのライフサイクルステージ、指定されたデータのデータタイプ、データ書き込みコマンドの受信に近接する期間中のプログラミングスループット、及び書き込まれるデータのエントロピーレベルのうちの少なくとも1つを含む、検出することによって、かつデータ記憶システムの検出された1つ以上の条件に基づいて、不規則なLDPC符号化スキームを選択することによって、エンコーダに利用可能な、複数の利用可能な不規則LDPC符号化スキームのうちの不規則なLDPC符号化スキームを選択し得る。異なる基準の各々は、全体をとおしてより詳細に説明される。
【0192】
コントローラは、選択されたコーディングスキームを使用して書き込まれるデータを符号化する(1908)。
【0193】
エンコードが完了すると、書き込み動作は完了する(1912)。
【0194】
一部の実施形態では、決定(1904)は、書き込みコマンドを受信した記憶デバイスシステムに応答している(1902)。代替的に、決定(1904)は、書き込みコマンドを受信する記憶デバイスシステムとは独立しており、記憶装置システムが書き込みコマンドを受信する時間(1902)までに、コントローラは既に作動モード及び/又はデータタイプを決定している(1904)。別の代替として、決定(1904)及び選択(1906)は両方とも、書き込みコマンドを受信する記憶デバイスシステムとは独立しており、記憶デバイスシステムが書き込みコマンドを受信する時間(1902)までに、コントローラは既に作動モード及び/又はデータタイプを決定しており(1904)、かつ既にコーディングスキームを選択している(1906)。
【0195】
一部の実施形態では、記憶装置システムのライフサイクル中に、記憶デバイスシステムは、通常の動作モード(例えば、通常の温度、典型的な作動条件)において時間の大部分で作動している。これらの条件でプログラムされたデータに対して、コントローラは、性能のために最適化された不規則なLDPCコードスキームなど、性能に指向した(例えば、高スループット)エラー訂正コードを選択し得る。
【0196】
一部の実施形態では、コントローラが極端な作動モード(その例を以下に説明する)を検出すると、コントローラは、性能及び電力消費よりもデータ保護を優先する、信頼性のために最適化された(すなわち、高い訂正能力)不規則なLDPCコードスキームなど、訂正能力指向エラー訂正コードスキームに切り替える。このようなスイッチは、外部トリガ及び内部トリガのいずれか、又は既定のデータ使用ポリシーに基づき得る。追加的又は代替的に、コントローラは、そのような能力を必要とするデータの特定の重要な部分に対して、修正能力指向エラー訂正コードスキームを選択し得る。
【0197】
一部の実施形態では、コントローラは、環境条件(例えば、記憶デバイスシステム温度又は周囲温度が、追加の低温又は追加の高温の温度領域に到達する)に基づいてシステム作動モードを決定する。具体的には、記憶システムは環境条件を検出することであって、環境条件は、データ記憶デバイスシステムの温度又は周囲温度を含む、検出することと、温度が高温閾値より高い(又はそれ以上)か、あるいは低温閾値より低い(又はそれ以下)かを決定する(例えば、温度が閾値を超えるかどうかを決定する)こととを行う。コントローラは、温度が閾値を超える(すなわち、高温又は低温の温度領域)という決定に従って、信頼性のために最適化された不規則なLDPCコーディングスキームを選択し、温度が閾値を超えない(すなわち、通常の温度領域)という決定に従って、性能のために最適化された不規則なLDPCコーディングスキームを選択する。
【0198】
一部の実施形態では、コントローラは、耐久性の観点から、記憶システムのライフサイクルステージ(例えば、プログラミングサイクル数)に基づいてシステム作動モードを決定する。具体的には、記憶システムは、データ記憶システムによって行われる、あるいは記憶媒体131の選択可能な部分によって行われるプログラミングサイクルのカウントを保持し(例えば、累積数を測定する)、カウントが閾値より大きい(又はそれ以上)かどうかを決定する(例えば、カウントが閾値を超えるかどうかを決定する)。コントローラは、カウントが閾値を超える(すなわち、寿命末期)という決定に従って、信頼性のために最適化された不規則なLDPCコーディングスキームを選択し、カウントが閾値を超えない(すなわち、寿命初期又は寿命中期)という決定に従って、性能に最適化された不規則なLDPCコーディングスキームを選択する。
【0199】
一部の実施形態では、コントローラは、書き込まれるデータのデータタイプを決定し、決定されたデータタイプに従って符号化スキームを選択する。例えば、はんだ付け作業の前に書き込まれる前に予めロードされたコンテンツデータ、重要なブートデータ又は管理システムデータ、ホストブートデータ又はホストオペレーティングシステムデータ、変数データ、TLCデータ、コールドデータ部分、又は高エントロピーデータ(例えば、閾値エントロピーレベルを超える)として分類されるデータに対して、コントローラは、信頼性のために最適化された不規則なLDPC符号化スキームを選択する。別の例として、非臨界データ、静的データ、TLCデータ保護のためのXORスナップショットデータ、SLCデータ、ホットデータ部分、又は低エントロピーデータ(例えば、閾値エントロピーレベルを超えない)として分類されるデータに対して、コントローラは、性能に最適化された不規則なLDPCコーディングスキームを選択する。
【0200】
一部の実施形態では、コントローラは、データ書き込みコマンドの受信に近接する期間中のプログラミングスループットの1つ以上の測定値に基づいてシステム作動モードを決定する。具体的には、記憶システムは、書き込み動作を実行している間にプログラミングスループットを測定し、スループットが閾値より大きい(又はそれ以上)かどうかを決定する(例えば、スループットが閾値を超えるかどうかを決定する)。コントローラは、測定されたプログラミングスループットが閾値を超える(例えば、逐次的にプログラムされるデータ及び/又は頻繁に再書き込みされるデータ部分の場合)という決定に従って、低電力消費のために最適化された不規則なLDPCコーディングスキームを選択し、測定されたプログラミングスループットが閾値を超えない(例えば、ランダムに書き込まれるデータ及び/又は静的データの場合)という決定に従って、性能のために最適化された不規則なLDPCコーディングスキームを選択する。
復号中のコーディングスキームの自動発見
【0201】
図20は、データ記憶デバイスシステムの記憶媒体内の1つ以上のメモリセルに対する読み出し動作中にデータを復号する方法2000のフローチャートを示し、具体的には、ホストデバイスから受信した読み出しコマンドに応答する。方法2000は、典型的には、コントローラ122(又はEECエンジン224及び/又はデコーダ)によって実行されるが、代替的に、記憶デバイスシステムが埋め込まれたコンピュータシステムによって実行されてもよい。
【0202】
記憶デバイスシステムは、コンピュータシステム(代替的に、本明細書ではホスト又はホストシステムと呼ばれる)から読み出しコマンドを受信する(2002)。読み出しコマンドは、論理アドレス又は物理アドレスを指定することなどによって、記憶媒体から読み出されるデータを指定する。一部の実施形態では、コントローラは、読み出しコマンドに応答して、復号されたデータを生成するように、指定されたデータを復号するプロセスを制御する。復号スキームの少なくとも一部は、以下でより詳細に論じられるエラー訂正コーディングスキームの選択を含む。
【0203】
コントローラは、復号のための候補エラー訂正コーディングスキームを選択する(2004)。指定されたデータの復号に成功するために、デコーダは、データを符号化するために(例えば、方法1900において)使用されたエンコーダと同じエラー訂正コーディングスキームを使用しなければならない。一部の実施形態では、デコーダ及び/又はプロセッサは、符号化中に使用されたコーディングスキームを直接検出するのに十分な情報を有さない。このタイプの直接検出は、典型的には、符号化されたメモリの各選択可能部分についてコーディングスキーム識別子を記憶する非常に複雑な管理テーブルを必要とし、データが非常に頻繁に変更されるシナリオに対して、テーブルが非常に頻繁に更新される必要があり、メモリデバイスの性能に悪影響を及ぼす。代わりに、コントローラは、候補コーディングスキームを選択し、試験を実行し、選択された候補コーディングスキームを使用して、データを復号するか、あるいは試験に基づいて別の候補コーディングスキームを選択する。
【0204】
一部の実施形態では、コントローラは、候補コーディングスキームを使用して、指定されたデータの少なくとも一部分のビットエラー率(BER)を計算又は推定することによって、候補コーディングスキームを試験する(2008)。一部の実施形態では、コントローラは、指定されたデータ(又は、試験されている指定されたデータの部分)のシンドローム重みを計算することによって、BER推定を実行する。シンドローム重みが所定の閾値未満である場合(2010:「はい」)、コントローラは、選択された候補コーディングスキームを、指定されたデータを復号するためのコーディングスキームとして使用し、選択されたコーディングスキームを使用して指定されたデータを復号する(2012)。コントローラは復号されたデータをホストに戻し、それによって読み出し動作を完了する(2014)。
【0205】
シンドローム重みが所定の閾値以上である場合(2010:「いいえ」)、コントローラは、試験(2008、510)のための別の候補エラー訂正コーディングスキームを選択し(2004)、このプロセスは、その後に選択された候補コーディングスキームを用いてこれまでのように継続する。ループ(2010、2004、2006)は、計算されたシンドローム重みが閾値未満になるまで繰り返す。一部の実施形態では、コントローラは、ステップ2010において、第1の正の試験結果になった(例えば、シンドローム重みが閾値未満)ら、候補コーディングスキームの試験を停止する。言い換えると、特定の候補コーディングスキームの算出されたシンドローム重みが閾値未満であるとすぐに、コントローラは、他の候補コーディングスキームの試験を停止し、特定の候補コーディングスキームを使用して指定されたデータを即座に復号する(2012)。これは、データを読み出す必要があるたびに、全ての利用可能な候補符号化スキームを試験するよりも効率的である。一部の実施形態では、候補コーディングスキームのいずれも、閾値を下回るシンドローム重みをもたらさない場合、コントローラは、復号に使用するために最も低いシンドローム重みをもたらした候補を選択する。
【0206】
復号方法2000は、メモリセルがプログラムされたときに使用された特定のエラー訂正コードをより効率的に発見することを可能にする。これは、(例えば、各eブロックについて)メモリの各選択可能な部分にどのコードが使用されたかを記録するために、管理テーブル及びブック保持動作が不要であるため、復号プロセスが単純化される。
【0207】
一部の実施形態では、更により効率的であるために、デコーダは、(例えば、署名チェックに基づいて)最も可能性の高いコーディングスキームの初期評価に基づいて、候補符号化スキームを選択する(2004)。具体的には、符号化方法1900の一部として、エンコーダは、(例えば、各eブロックについて)メモリの各選択可能な部分に署名を埋め込む(1910)。例示的な署名は、100バイト~500バイトの長さである。署名は、100バイト未満及び500バイトを超える長さとすることができる。復号方法2000の一部として、デコーダ又はコントローラは、どのコードが使用されたかを示す、受信されたメッセージ(代替的に、本明細書では「モデルデータ署名」と称される)にどの署名が最も近いかをチェック(2006)する。一部の実施形態では、コントローラは、候補コーディングスキームを使用して署名を復号し、復号されたデータ署名をモデルデータ署名と比較し、復号されたデータ署名が、モデルデータ署名から閾値量未満で逸脱するとの決定に従って、指定された読み出されるデータを復号するための候補コーディングスキームを選択することによって、署名をチェックする。
【0208】
一部の実施形態では、シグネチャに使用されるバイト数は、コントローラが推定精度を有する必要だけがあるため、限定される。エラーは、コントローラが、シンドローム重みを計算する(2008)ときに間違いに直ちに通知することができるため、間違いが十分にまれである限り、許容される。署名チェックの使用は、冗長なシンドローム重み計算動作の大部分が、最も可能性の高い符号化スキームで開始することによって回避されるという点で、復号プロセスを更に効率的にする。
【0209】
本明細書で説明される実施形態は、LDPC能力をより良く利用し、スループットを増加させ、耐久性を増加させ、電力をより低く維持する。加えて、本明細書で説明される実施形態は、様々なBER及びPE/C閾値に基づいて高レベルシステムロジックを著しく改善する。柔軟に適合された補正能力及び性能速度を有することにより、メモリ記憶システムが、特定の閾値を緩和し、ホスト駆動活動とハウスキーピング活動との間のより良いバランスを可能にする。
【0210】
本明細書で提供される方法を実行するための実行可能コードを有する、対応する方法、システム、及びコンピュータ又はプロセッサ可読記憶デバイスシステムも提供され得る。
【0211】
前述の詳細な説明は、例示及び説明の目的のために提示したものである。前述の詳細な説明は、網羅的であること、又は開示した正確な形態に限定することを意図したものではない。上記の教示に鑑みて多くの修正及び変形が可能である。説明した実施形態は、本発明の原理及びその実際の用途を最も良く説明するために選択されており、それによって、当業者が様々な実施形態で、企図される特定の使用に適するように様々な修正を伴って、本発明を最も良く利用することを可能にする。本発明の範囲は、本明細書に添付の請求項によって定義されることが意図されている。
以下の項目は、出願当初の特許請求の範囲に記載されている各要素である。
(項目1)
データ記憶システムであって、
複数のメモリセルを含むメモリと、
不規則な低密度パリティチェック(LDPC)符号化スキームを使用してデータを符号化するように構成されているエンコーダと、
前記メモリ及び前記エンコーダと通信するコントローラであって、
書き込まれるデータを指定するデータ書き込みコマンドを受信することと、
(i)前記データ記憶システムの作動モード、(ii)デバイス固有基準、及び/又は(ii)前記指定されたデータのデータ特性に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なLDPC符号化スキームのうちの不規則なLDPC符号化スキームを選択することと、
前記選択された不規則なLDPC符号化スキームを使用して、前記指定された書き込まれるデータを符号化することと、を行うように構成されているコントローラと、を含むデータ記憶システム。
(項目2)
前記複数の利用可能な不規則なLDPC符号化スキームが、性能について最適化された第1の不規則なLDPC符号化スキームと、信頼性について最適化された第2の不規則なLDPC符号化スキーム及び低電力について最適化された第3の不規則なLDPC符号化スキームのうちの1つ以上と、を含む、項目1に記載のデータ記憶システム。
(項目3)
前記コントローラが、前記エンコーダに利用可能な、複数の利用可能な不規則なLDPC符号化スキームのうちの不規則なLDPC符号化スキームを選択するように構成されていることは、前記コントローラが、
前記データ記憶システムの1つ以上の条件及び/又は前記書き込まれるデータのデータ特性基準を検出することであって、前記1つ以上の条件が、
環境条件、
前記データ記憶システムのライフサイクルステージ、
前記指定されたデータのデータタイプ、
前記データ書き込みコマンドの前記受信に近接する期間中のプログラミングスループット、及び
前記書き込まれるデータのエントロピーレベルのうちの少なくとも1つを含む、検出することと、
前記データ記憶システムの前記検出された1つ以上の条件に基づいて、前記不規則なLDPC符号化スキームを選択することと、を行うように構成されていることを含む、項目1に記載のデータ記憶システム。
(項目4)
前記コントローラが、デバイス固有基準に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なLDPC符号化スキームのうちの不規則なLDPC符号化スキームを選択するように構成されていることは、前記コントローラが、
前記データ記憶システムの環境条件を検出することと、
前記データ記憶システムの前記検出された環境条件に基づいて、前記不規則なLDPC符号化スキームを選択することと、を行うように更に構成されていることを含む、項目1に記載のデータ記憶システム。
(項目5)
前記環境条件が、前記データ記憶デバイスシステムの温度を含み、前記コントローラが、前記不規則なLDPC符号化スキームを選択するように構成されていることは、前記コントローラが、
前記温度が閾値を超えるかどうかを決定することと、
前記温度が前記閾値を超えるとの決定に従って、信頼性について最適化された不規則なLDPC符号化スキームを選択することと、
前記温度が前記閾値を超えないとの決定に従って、性能について最適化された不規則なLDPC符号化スキームを選択することと、を行うように構成されていることを含む、項目4に記載のデータ記憶システム。
(項目6)
前記コントローラが、デバイス固有基準に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なLDPC符号化スキームのうちの不規則なLDPC符号化スキームを選択するように構成されていることは、前記コントローラが、
前記データ記憶システムのライフサイクルステージを決定することと、
前記決定されたライフサイクルステージに基づいて、前記不規則なLDPC符号化スキームを選択することと、を更に行うように構成されていることを含む、項目1に記載のデータ記憶システム。
(項目7)
前記コントローラが、前記データ記憶システムの前記ライフサイクルステージを決定するように構成されていることは、前記データ記憶システムによって行われるプログラミングサイクルの累積数を測定することを含み、前記不規則なLDPC符号化スキームを選択することは、前記コントローラが、
前記プログラミングサイクルの累積数が閾値を超えているかどうかを決定することと、
前記プログラミングサイクルの累積数が前記閾値を超えるとの決定に従って、信頼性について最適化された不規則なLDPC符号化スキームを選択することと、
前記プログラミングサイクルの累積数が前記閾値を超えないという決定に従って、性能について最適化された不規則なLDPC符号化スキームを選択することと、を行うように構成されていることを含む、項目6に記載のデータ記憶システム。
(項目8)
前記コントローラが、前記指定されたデータのデータ特性に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なLDPC符号化スキームのうちの不規則なLDPC符号化スキームを選択するように構成されていることは、前記コントローラが、
前記指定されたデータのデータタイプを決定することと、
前記指定されたデータの前記決定されたデータタイプに基づいて、前記不規則なLDPC符号化スキームを選択することと、を行う
ように更に構成されていることを含む、項目1に記載のデータ記憶システム。
(項目9)
前記コントローラが、前記指定されたデータの前記データタイプを決定するように構成されていることは、前記コントローラが、
(i)はんだ付け作業の前に書き込まれる予めロードされたコンテンツデータと、
(ii)重要なブートデータ又は管理システムデータ、
(iii)ホストブートデータ又はホストオペレーティングシステムデータ、
(iv)変数データ、及び/又は
(v)TLCデータ、として前記指定されたデータを分類するように構成されていることを含み、
前記コントローラが、前記不規則なLDPC符号化スキームを選択するように構成されていることは、前記コントローラが、前記分類に従って信頼性について最適化された不規則なLDPC符号化スキームを選択するように構成されていることを含む、項目8に記載のデータ記憶システム。
(項目10)
前記コントローラが、前記指定されたデータの前記データタイプを選択するように構成されていることは、前記コントローラが、
(i)非重要データ、
(ii)静的データ、
(iii)TLCデータ保護のためのXORスナップショットデータ、
(iv)高エントロピー、及び/又は
(iv)SLCデータ、として前記指定されたデータを分類するように構成されていることを含み、
前記コントローラが、前記不規則なLDPC符号化スキームを選択するように構成されていることは、前記コントローラが、前記分類に従って性能について最適化された不規則なLDPC符号化スキームを選択するように構成されていることを含む、項目8に記載のデータ記憶システム。
(項目11)
前記コントローラが、デバイス固有基準に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なLDPC符号化スキームのうちの不規則なLDPC符号化スキームを選択するように構成されていることは、前記コントローラが、
前記データ書き込みコマンドの前記受信に近接する期間中にプログラミングスループットを測定することと、
前記測定されたプログラミングスループットに基づいて、前記不規則なLDPC符号化スキームを選択することと、を行うよう更に構成されていることを含む、項目1に記載のデータ記憶システム。
(項目12)
前記コントローラが、前記測定されたプログラミングスループットに基づいて前記不規則なLDPC符号化スキームを選択するように構成されていることは、前記コントローラが、
前記測定されたプログラミングスループットが閾値を超えるかどうかを決定することと、
前記測定されたプログラミングスループットが前記閾値を超えるとの決定に従って、低電力消費について最適化された不規則なLDPC符号化スキームを選択することと、
前記測定されたプログラミングスループットが前記閾値を超えないという決定に従って、性能について最適化された不規則なLDPC符号化スキームを選択することと、を行うように構成されていることを含む、項目11に記載のデータ記憶システム。
(項目13)
不規則なLDPC復号スキームを使用してデータを復号するように構成されているデコーダを更に含み、
前記コントローラが前記デコーダと通信し、前記コントローラが、
読み出されるデータを指定するデータ読み出しコマンドを受信することと、
シンドローム重み動作に従って、前記デコーダに利用可能な、複数の不規則なLDPC復号スキームのうちの不規則なLDPC復号スキームを選択することと、
前記選択された不規則なLDPC復号スキームを使用して、前記指定された読み出されるデータを復号することと、を行うように更に構成されている、項目1に記載のデータ記憶システム。
(項目14)
前記コントローラが、前記シンドローム重み動作に従って前記不規則なLDPC復号スキームを選択するように構成されていることは、前記コントローラが、
第1の不規則なLDPC復号スキーム候補を選択することと、
前記第1の不規則なLDPC復号スキーム候補を使用して、前記指定された読み出されるデータの少なくとも一部の第1のシンドローム重みを計算することと、
前記計算された第1のシンドローム重みが所定の閾値未満であるかどうかを決定することと、
前記計算された第1のシンドローム重みが前記所定の閾値未満であるとの決定に従って、前記不規則なLDPC復号スキームとして前記第1の不規則なLDPC復号スキーム候補を選択することと、を行うように構成されていること含む、項目13に記載のデータ記憶システム。
(項目15)
前記コントローラが、前記シンドローム重み動作に従って前記不規則なLDPC復号スキームを選択するように構成されていることは、前記コントローラが、
前記計算されたシンドローム重みが前記所定の閾値以上であるという決定に従って、第2の不規則なLDPC復号スキーム候補を選択することと、
前記第2の不規則なLDPC復号スキーム候補を使用して、前記指定された読み出されるデータの少なくとも前記一部の第2のシンドローム重みを計算することと、
前記計算された第2のシンドローム重みが前記所定の閾値未満であるかどうかを決定することと、
前記計算された第2のシンドローム重みが前記所定の閾値未満であるとの決定に従って、前記不規則なLDPC復号スキームとして前記第2の不規則なLDPC復号スキーム候補を選択することと、を行うように構成されていることを更に含む、項目14に記載のデータ記憶システム。
(項目16)
前記コントローラが、前記第1の不規則なLDPC復号スキーム候補を選択するように構成されていることは、前記コントローラが、
前記利用可能な不規則なLDPC復号スキームのうちの第1のものを使用して、復号される前記データに関連付けられたデータ署名を復号して、第1の復号データ署名をもたらすことと、
前記第1の復号データ署名をモデルデータ署名と比較することと、
前記第1の復号データ署名が前記モデルデータ署名から閾値量未満を逸脱しているとの決定に従って、前記第1の不規則なLDPC復号スキーム候補として、前記利用可能な不規則なLDPC復号スキームのうちの前記第1のものを選択することと、を行うように構成されていることを含む、項目14に記載のデータ記憶システム。
(項目17)
前記コントローラが、前記第1の不規則なLDPC復号スキーム候補を選択するように構成されていることは、前記コントローラが、
前記第1の復号データ署名が、前記モデルデータ署名から前記閾値量以上を逸脱するとの決定に従って、前記利用可能な不規則なLDPC復号スキームのうちの第2のものを使用して、前記復号されるデータに関連付けられた前記データ署名を復号し、第2の復号データ署名をもたらすことと、
前記第2の復号データ署名を前記モデルデータ署名と比較することと、
前記第2の復号データ署名が、前記モデルデータ署名から前記閾値量未満を逸脱するとの決定に従って、前記第1の不規則なLDPC復号スキーム候補として、前記利用可能な不規則なLDPC復号スキームのうちの前記第2のものを選択することと、を行うように構成されていることを更に含む、項目16に記載のデータ記憶システム。
(項目18)
複数のメモリセルを含むメモリと、不規則な低密度パリティチェック(LDPC)符号化又は復号スキームをそれぞれ使用してデータを符号化又は復号するように構成されているエンコーダ及びデコーダと、前記メモリ、エンコーダ及びデコーダと通信するコントローラと、を含むデータ記憶システムを動作させる方法であって、
書き込まれるデータを指定するデータ書き込みコマンドを受信することと、
(i)前記データ記憶システムの作動モード、(ii)デバイス固有基準、及び/又は(ii)前記指定されたデータのデータ特性に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なLDPC符号化スキームのうちの不規則なLDPC符号化スキームを選択することと、
前記選択された不規則なLDPC符号化スキームを使用して、前記指定された書き込まれるデータを符号化することと、を含む方法。
(項目19)
読み出されるデータを指定するデータ読み出しコマンドを受信することと、
シンドローム重み動作に従って、前記デコーダに利用可能な、複数の不規則なLDPC復号スキームのうちの不規則なLDPC復号スキームを選択することと、
前記選択された不規則なLDPC復号スキームを使用して、前記指定された読み出されるデータを復号することと、を更に含み、
前記シンドローム重み動作に従って前記不規則なLDPC復号スキームを選択することは、
第1の不規則なLDPC復号スキーム候補を選択することと、
前記第1の不規則なLDPC復号スキーム候補を使用して、前記指定された読み出されるデータの少なくとも一部の第1のシンドローム重みを計算することと、
前記計算された第1のシンドローム重みが所定の閾値未満であるかどうかを決定することと、
前記計算された第1のシンドロームの重みが前記所定の閾値未満であるとの決定に従って、前記不規則なLDPC復号スキームとして前記第1の不規則なLDPC復号スキーム候補を選択することと、を含む、項目18に記載の方法。
(項目20)
データ記憶システムであって、
書き込まれるデータを指定するデータ書き込みコマンドを受信する手段と、
(i)前記データ記憶システムの作動モード、(ii)デバイス固有基準、及び/又は(ii)前記指定されたデータのデータ特性に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なLDPC符号化スキームのうちの不規則なLDPC符号化スキームを選択するための手段と、
前記選択された不規則なLDPC符号化スキームを使用して前記指定された書き込まれるデータを符号化するための手段と、
読み出されるデータを指定するデータ読み出しコマンドを受信するための手段と、
シンドローム重み動作に従って、前記データ記憶システムのデコーダに利用可能な、複数の不規則なLDPC復号スキームのうちの不規則なLDPC復号スキームを選択するための手段と、
前記選択された不規則なLDPC復号スキームを使用して、前記指定された読み出されるデータを復号するための手段と、を含むデータ記憶システム。
図1
図2
図3
図4
図5
図6
図7
図8A
図8B
図8C
図8D
図8E
図8F
図8G
図8H
図8I
図8J
図8K
図8L
図8M
図8N
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20