(57)【要約】      （修正有）【課題】適応的に選択されたコーディングスキームを使用してデータを符号化及び復号する技術を提供する。【解決手段】データ記憶システムによる符号化方法は、書き込まれるデータを指定するデータ書き込みコマンドを受信し１９０２、データ記憶システムの作動モード、デバイス固有基準及び／又は指定されたデータのデータタイプに従って、エンコーダに利用可能な、複数の利用可能な不規則なＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択し１９０６、選択された不規則なＬＤＰＣ符号化スキームを使用して、指定された書き込まれるデータを符号化する１９０８。【選択図】図１９
2020202553.tif 000002
【特許請求の範囲】
【請求項１】
データ記憶システムであって、
複数のメモリセルを含むメモリと、
不規則な低密度パリティチェック（ＬＤＰＣ）符号化スキームを使用してデータを符号化するように構成されているエンコーダと、
前記メモリ及び前記エンコーダと通信するコントローラであって、
書き込まれるデータを指定するデータ書き込みコマンドを受信することと、
（ｉ）前記データ記憶システムの作動モード、（ｉｉ）デバイス固有基準、及び／又は（ｉｉ）前記指定されたデータのデータ特性に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択することと、
前記選択された不規則なＬＤＰＣ符号化スキームを使用して、前記指定された書き込まれるデータを符号化することと、を行うように構成されているコントローラと、を含むデータ記憶システム。
【請求項２】
前記複数の利用可能な不規則なＬＤＰＣ符号化スキームが、性能について最適化された第１の不規則なＬＤＰＣ符号化スキームと、信頼性について最適化された第２の不規則なＬＤＰＣ符号化スキーム及び低電力について最適化された第３の不規則なＬＤＰＣ符号化スキームのうちの１つ以上と、を含む、請求項１に記載のデータ記憶システム。
【請求項３】
前記コントローラが、前記エンコーダに利用可能な、複数の利用可能な不規則なＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、
前記データ記憶システムの１つ以上の条件及び／又は前記書き込まれるデータのデータ特性基準を検出することであって、前記１つ以上の条件が、
環境条件、
前記データ記憶システムのライフサイクルステージ、
前記指定されたデータのデータタイプ、
前記データ書き込みコマンドの前記受信に近接する期間中のプログラミングスループット、及び
前記書き込まれるデータのエントロピーレベルのうちの少なくとも１つを含む、検出することと、
前記データ記憶システムの前記検出された１つ以上の条件に基づいて、前記不規則なＬＤＰＣ符号化スキームを選択することと、を行うように構成されていることを含む、請求項１に記載のデータ記憶システム。
【請求項４】
前記コントローラが、デバイス固有基準に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、
前記データ記憶システムの環境条件を検出することと、
前記データ記憶システムの前記検出された環境条件に基づいて、前記不規則なＬＤＰＣ符号化スキームを選択することと、を行うように更に構成されていることを含む、請求項１に記載のデータ記憶システム。
【請求項５】
前記環境条件が、前記データ記憶デバイスシステムの温度を含み、前記コントローラが、前記不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、
前記温度が閾値を超えるかどうかを決定することと、
前記温度が前記閾値を超えるとの決定に従って、信頼性について最適化された不規則なＬＤＰＣ符号化スキームを選択することと、
前記温度が前記閾値を超えないとの決定に従って、性能について最適化された不規則なＬＤＰＣ符号化スキームを選択することと、を行うように構成されていることを含む、請求項４に記載のデータ記憶システム。
【請求項６】
前記コントローラが、デバイス固有基準に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、
前記データ記憶システムのライフサイクルステージを決定することと、
前記決定されたライフサイクルステージに基づいて、前記不規則なＬＤＰＣ符号化スキームを選択することと、を更に行うように構成されていることを含む、請求項１に記載のデータ記憶システム。
【請求項７】
前記コントローラが、前記データ記憶システムの前記ライフサイクルステージを決定するように構成されていることは、前記データ記憶システムによって行われるプログラミングサイクルの累積数を測定することを含み、前記不規則なＬＤＰＣ符号化スキームを選択することは、前記コントローラが、
前記プログラミングサイクルの累積数が閾値を超えているかどうかを決定することと、
前記プログラミングサイクルの累積数が前記閾値を超えるとの決定に従って、信頼性について最適化された不規則なＬＤＰＣ符号化スキームを選択することと、
前記プログラミングサイクルの累積数が前記閾値を超えないという決定に従って、性能について最適化された不規則なＬＤＰＣ符号化スキームを選択することと、を行うように構成されていることを含む、請求項６に記載のデータ記憶システム。
【請求項８】
前記コントローラが、前記指定されたデータのデータ特性に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、
前記指定されたデータのデータタイプを決定することと、
前記指定されたデータの前記決定されたデータタイプに基づいて、前記不規則なＬＤＰＣ符号化スキームを選択することと、を行う
ように更に構成されていることを含む、請求項１に記載のデータ記憶システム。
【請求項９】
前記コントローラが、前記指定されたデータの前記データタイプを決定するように構成されていることは、前記コントローラが、
（ｉ）はんだ付け作業の前に書き込まれる予めロードされたコンテンツデータと、
（ｉｉ）重要なブートデータ又は管理システムデータ、
（ｉｉｉ）ホストブートデータ又はホストオペレーティングシステムデータ、
（ｉｖ）変数データ、及び／又は
（ｖ）ＴＬＣデータ、として前記指定されたデータを分類するように構成されていることを含み、
前記コントローラが、前記不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、前記分類に従って信頼性について最適化された不規則なＬＤＰＣ符号化スキームを選択するように構成されていることを含む、請求項８に記載のデータ記憶システム。
【請求項１０】
前記コントローラが、前記指定されたデータの前記データタイプを選択するように構成されていることは、前記コントローラが、
（ｉ）非重要データ、
（ｉｉ）静的データ、
（ｉｉｉ）ＴＬＣデータ保護のためのＸＯＲスナップショットデータ、
（ｉｖ）高エントロピー、及び／又は
（ｉｖ）ＳＬＣデータ、として前記指定されたデータを分類するように構成されていることを含み、
前記コントローラが、前記不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、前記分類に従って性能について最適化された不規則なＬＤＰＣ符号化スキームを選択するように構成されていることを含む、請求項８に記載のデータ記憶システム。
【請求項１１】
前記コントローラが、デバイス固有基準に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、
前記データ書き込みコマンドの前記受信に近接する期間中にプログラミングスループットを測定することと、
前記測定されたプログラミングスループットに基づいて、前記不規則なＬＤＰＣ符号化スキームを選択することと、を行うよう更に構成されていることを含む、請求項１に記載のデータ記憶システム。
【請求項１２】
前記コントローラが、前記測定されたプログラミングスループットに基づいて前記不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、
前記測定されたプログラミングスループットが閾値を超えるかどうかを決定することと、
前記測定されたプログラミングスループットが前記閾値を超えるとの決定に従って、低電力消費について最適化された不規則なＬＤＰＣ符号化スキームを選択することと、
前記測定されたプログラミングスループットが前記閾値を超えないという決定に従って、性能について最適化された不規則なＬＤＰＣ符号化スキームを選択することと、を行うように構成されていることを含む、請求項１１に記載のデータ記憶システム。
【請求項１３】
不規則なＬＤＰＣ復号スキームを使用してデータを復号するように構成されているデコーダを更に含み、
前記コントローラが前記デコーダと通信し、前記コントローラが、
読み出されるデータを指定するデータ読み出しコマンドを受信することと、
シンドローム重み動作に従って、前記デコーダに利用可能な、複数の不規則なＬＤＰＣ復号スキームのうちの不規則なＬＤＰＣ復号スキームを選択することと、
前記選択された不規則なＬＤＰＣ復号スキームを使用して、前記指定された読み出されるデータを復号することと、を行うように更に構成されている、請求項１に記載のデータ記憶システム。
【請求項１４】
前記コントローラが、前記シンドローム重み動作に従って前記不規則なＬＤＰＣ復号スキームを選択するように構成されていることは、前記コントローラが、
第１の不規則なＬＤＰＣ復号スキーム候補を選択することと、
前記第１の不規則なＬＤＰＣ復号スキーム候補を使用して、前記指定された読み出されるデータの少なくとも一部の第１のシンドローム重みを計算することと、
前記計算された第１のシンドローム重みが所定の閾値未満であるかどうかを決定することと、
前記計算された第１のシンドローム重みが前記所定の閾値未満であるとの決定に従って、前記不規則なＬＤＰＣ復号スキームとして前記第１の不規則なＬＤＰＣ復号スキーム候補を選択することと、を行うように構成されていること含む、請求項１３に記載のデータ記憶システム。
【請求項１５】
前記コントローラが、前記シンドローム重み動作に従って前記不規則なＬＤＰＣ復号スキームを選択するように構成されていることは、前記コントローラが、
前記計算されたシンドローム重みが前記所定の閾値以上であるという決定に従って、第２の不規則なＬＤＰＣ復号スキーム候補を選択することと、
前記第２の不規則なＬＤＰＣ復号スキーム候補を使用して、前記指定された読み出されるデータの少なくとも前記一部の第２のシンドローム重みを計算することと、
前記計算された第２のシンドローム重みが前記所定の閾値未満であるかどうかを決定することと、
前記計算された第２のシンドローム重みが前記所定の閾値未満であるとの決定に従って、前記不規則なＬＤＰＣ復号スキームとして前記第２の不規則なＬＤＰＣ復号スキーム候補を選択することと、を行うように構成されていることを更に含む、請求項１４に記載のデータ記憶システム。
【請求項１６】
前記コントローラが、前記第１の不規則なＬＤＰＣ復号スキーム候補を選択するように構成されていることは、前記コントローラが、
前記利用可能な不規則なＬＤＰＣ復号スキームのうちの第１のものを使用して、復号される前記データに関連付けられたデータ署名を復号して、第１の復号データ署名をもたらすことと、
前記第１の復号データ署名をモデルデータ署名と比較することと、
前記第１の復号データ署名が前記モデルデータ署名から閾値量未満を逸脱しているとの決定に従って、前記第１の不規則なＬＤＰＣ復号スキーム候補として、前記利用可能な不規則なＬＤＰＣ復号スキームのうちの前記第１のものを選択することと、を行うように構成されていることを含む、請求項１４に記載のデータ記憶システム。
【請求項１７】
前記コントローラが、前記第１の不規則なＬＤＰＣ復号スキーム候補を選択するように構成されていることは、前記コントローラが、
前記第１の復号データ署名が、前記モデルデータ署名から前記閾値量以上を逸脱するとの決定に従って、前記利用可能な不規則なＬＤＰＣ復号スキームのうちの第２のものを使用して、前記復号されるデータに関連付けられた前記データ署名を復号し、第２の復号データ署名をもたらすことと、
前記第２の復号データ署名を前記モデルデータ署名と比較することと、
前記第２の復号データ署名が、前記モデルデータ署名から前記閾値量未満を逸脱するとの決定に従って、前記第１の不規則なＬＤＰＣ復号スキーム候補として、前記利用可能な不規則なＬＤＰＣ復号スキームのうちの前記第２のものを選択することと、を行うように構成されていることを更に含む、請求項１６に記載のデータ記憶システム。
【請求項１８】
複数のメモリセルを含むメモリと、不規則な低密度パリティチェック（ＬＤＰＣ）符号化又は復号スキームをそれぞれ使用してデータを符号化又は復号するように構成されているエンコーダ及びデコーダと、前記メモリ、エンコーダ及びデコーダと通信するコントローラと、を含むデータ記憶システムを動作させる方法であって、
書き込まれるデータを指定するデータ書き込みコマンドを受信することと、
（ｉ）前記データ記憶システムの作動モード、（ｉｉ）デバイス固有基準、及び／又は（ｉｉ）前記指定されたデータのデータ特性に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択することと、
前記選択された不規則なＬＤＰＣ符号化スキームを使用して、前記指定された書き込まれるデータを符号化することと、を含む方法。
【請求項１９】
読み出されるデータを指定するデータ読み出しコマンドを受信することと、
シンドローム重み動作に従って、前記デコーダに利用可能な、複数の不規則なＬＤＰＣ復号スキームのうちの不規則なＬＤＰＣ復号スキームを選択することと、
前記選択された不規則なＬＤＰＣ復号スキームを使用して、前記指定された読み出されるデータを復号することと、を更に含み、
前記シンドローム重み動作に従って前記不規則なＬＤＰＣ復号スキームを選択することは、
第１の不規則なＬＤＰＣ復号スキーム候補を選択することと、
前記第１の不規則なＬＤＰＣ復号スキーム候補を使用して、前記指定された読み出されるデータの少なくとも一部の第１のシンドローム重みを計算することと、
前記計算された第１のシンドローム重みが所定の閾値未満であるかどうかを決定することと、
前記計算された第１のシンドロームの重みが前記所定の閾値未満であるとの決定に従って、前記不規則なＬＤＰＣ復号スキームとして前記第１の不規則なＬＤＰＣ復号スキーム候補を選択することと、を含む、請求項１８に記載の方法。
【請求項２０】
データ記憶システムであって、
書き込まれるデータを指定するデータ書き込みコマンドを受信する手段と、
（ｉ）前記データ記憶システムの作動モード、（ｉｉ）デバイス固有基準、及び／又は（ｉｉ）前記指定されたデータのデータ特性に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択するための手段と、
前記選択された不規則なＬＤＰＣ符号化スキームを使用して前記指定された書き込まれるデータを符号化するための手段と、
読み出されるデータを指定するデータ読み出しコマンドを受信するための手段と、
シンドローム重み動作に従って、前記データ記憶システムのデコーダに利用可能な、複数の不規則なＬＤＰＣ復号スキームのうちの不規則なＬＤＰＣ復号スキームを選択するための手段と、
前記選択された不規則なＬＤＰＣ復号スキームを使用して、前記指定された読み出されるデータを復号するための手段と、を含むデータ記憶システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、メモリシステムに関し、具体的には、適応的に選択されたコーディングスキームを使用してデータを符号化及び復号することに関する。
【背景技術】
【０００２】
反復エラー訂正コーディングスキームは、近年、非常に普及している。普及している分類の反復コードは、低密度パリティックチェック（low-density parity-check、ＬＤＰＣ）コードである。適切に設計された場合、反復エラー訂正コーディングは、コード長が増加するにつれて、シャノン限界に近づくことができる。しかしながら、大きいコード長は、待ち時間ペナルティ及び複雑性ペナルティの両方を招くことがある。したがって、いくつかの用途においては、短いコードが有益である。例えば、短いコードは、記憶分類メモリのためのエラー訂正コードに有益であることがある。残念ながら、反復コーディングスキームは短いコードに対して不十分にしか機能せず、コードがより短く高密度になるにつれて、最大事後確率（maximum a posteriori、ＭＡＰ）復号と比較して劣化した性能を示す。
【図面の簡単な説明】
【０００３】
【図１】実施形態が実施され得るメモリデバイスの機能ブロック図である。
【０００４】
【図２】図１のコントローラの一実施形態のより詳細を描画する例示的なメモリシステムのブロック図である。
【０００５】
【図３】パラメータ化反復メッセージパッシングデコーダにおいてパラメータを学習し使用するプロセスの一実施形態のフローチャートである。
【０００６】
【図４】スパースパリティチェック行列Ｈの例を描画する。
【０００７】
【図５】図４のスパースパリティチェック行列に対応するスパース２部グラフを描画する。
【０００８】
【図６】パラメータ化反復メッセージパッシングデコーダのためのパラメータを学習するときに使用され得る例示的なネットワークである。
【０００９】
【図７】メッセージパッシング計算のためのパラメータを学習するプロセス７００の一実施形態のフローチャートである。
【００１０】
【図８Ａ】図７のプロセス７００のステップ７０６の一実施形態のバックワードパス中に計算され得る部分導関数の例である。
【図８Ｂ】図７のプロセス７００のステップ７０６の一実施形態のバックワードパス中に計算され得る部分導関数の例である。
【図８Ｃ】図７のプロセス７００のステップ７０６の一実施形態のバックワードパス中に計算され得る部分導関数の例である。
【図８Ｄ】図７のプロセス７００のステップ７０６の一実施形態のバックワードパス中に計算され得る部分導関数の例である。
【図８Ｅ】図７のプロセス７００のステップ７０６の一実施形態のバックワードパス中に計算され得る部分導関数の例である。
【図８Ｆ】図７のプロセス７００のステップ７０６の一実施形態のバックワードパス中に計算され得る部分導関数の例である。
【図８Ｇ】図７のプロセス７００のステップ７０６の一実施形態のバックワードパス中に計算され得る部分導関数の例である。
【００１１】
【図８Ｈ】図７のプロセス７００のステップ７０６の一実施形態のバックワードパス中に計算され得るパラメータ勾配の例である。
【図８Ｉ】図７のプロセス７００のステップ７０６の一実施形態のバックワードパス中に計算され得るパラメータ勾配の例である。
【図８Ｊ】図７のプロセス７００のステップ７０６の一実施形態のバックワードパス中に計算され得るパラメータ勾配の例である。
【００１２】
【図８Ｋ】方程式１６のメッセージ規則をチェックするための変数に対するバックワードパスについての例示的な導関数表現を描画する。
【図８Ｌ】方程式１６のメッセージ規則をチェックするための変数に対するバックワードパスについての例示的な導関数表現を描画する。
【図８Ｍ】方程式１６のメッセージ規則をチェックするための変数に対するバックワードパスについての例示的な導関数表現を描画する。
【図８Ｎ】方程式１６のメッセージ規則をチェックするための変数に対するバックワードパスについての例示的な導関数表現を描画する。
【００１３】
【図９】パラメータ化反復メッセージパッシングデコーダのためのパラメータのオンライン学習のプロセスの一実施形態のフローチャートである。
【００１４】
【図１０】パラメータ化反復メッセージパッシングデコーダのためのパラメータを管理するプロセスの一実施形態のフローチャートである。
【００１５】
【図１１】パラメータ化反復メッセージパッシングデコーダを有するメモリシステムの一実施形態を描画する。
【００１６】
【図１２】一実施形態に従って使用することができる不揮発性ストレージのためのデータを符号化及び復号するためのシステムを描画する。
【００１７】
【図１３】規則的なコードを有するＬＤＰＣパリティチェック行列を示す。
【００１８】
【図１４】不規則なコードを有するＬＤＰＣパリティチェック行列を示す。
【００１９】
【図１５】いくつかのＬＤＰＣコードについてのブロックエラー率（block error rate、ＢＬＥＲ）対ビットエラー率（bit error rate、ＢＥＲ）のグラフを示す。
【００２０】
【図１６】いくつかのＬＤＰＣコードについてのブロックエラー率（ＢＬＥＲ）対ビットエラー率（ＢＥＲ）の別のグラフを示す。
【００２１】
【図１７】いくつかのＬＤＰＣコードについてのスループット対ビットエラー率（ＢＥＲ）のグラフを示す。
【００２２】
【図１８】一部の実施形態によるコード最適化ターゲットを示すグラフである。
【００２３】
【図１９】一部の実施形態による符号化方法のフローチャートである。
【００２４】
【図２０】一部の実施形態による復号方法のフローチャートである。
【発明を実施するための形態】
【００２５】
本技術は、不規則な低密度パリティチェック（ＬＤＰＣ）コードに関係する。
【００２６】
ＬＤＰＣ（低密度パリティチェック）コードは、反復復号下でほぼシャノン限界性能を呈する最新のエラー訂正コードである。ＬＤＰＣコードは、そのパリティチェック行列が変動する列重み及び／又は変動する行重みを有する場合、不規則になると言われる。不規則なＬＤＰＣコードは、エラー訂正性能に関して規則的なＬＤＰＣコードよりも性能が優れている。しかしながら、いくつかの欠点を有する。不規則なＬＤＰＣコードは規則的なＬＤＰＣコードよりも設計が複雑である。不規則なＬＤＰＣコードはエラーフロアを発達させる傾向があり、デコーダの実装を複雑にする。本開示では、不規則なＬＤＰＣコードを実装するためのアプローチを示す。本開示は、不規則なＬＤＰＣコード設計における考慮事項及びトレードオフを説明する。本開示は、ＬＤＰＣコード設計をサポートするためのツールを説明する。本開示は、不規則なＬＤＰＣコードによって提供されるゲインを説明する。
【００２７】
不規則なＬＤＰＣコード、特にそれらの程度分布は、密度エボリューション又は外部情報転送（extrinsic information transfer、ＥＸＩＴ）チャート最適化に基づいて選択され得る。これらの技術は、２ＳＢフラッシュチャネルにおける１つの特定のパラメータ、主に訂正能力に対して最適な結果を与えるように調整されているが、結果は、０ＳＢ訂正能力、ＬＤＰＣコードによって提供されるスループット等の他の点で準最適となることが多い。
【００２８】
一実施形態は、不規則な低密度パリティックチェックコードを使用してデータを符号化及び復号するように構成されている不規則な低密度パリティチェックエンコーダ／デコーダを含む。不規則な低密度パリティチェックエンコーダは、一実施形態において、不揮発性メモリ（例えば、ＮＡＮＤ、ＮＯＲ、ＲｅＲＡＭ、相変化メモリ（phase change memory、ＰＣＭ））に記憶されるデータを符号化するために使用される。不規則な低密度パリティチェックデコーダは、ＧＬＤＰＣエンコーダで符号化した後に記憶されたデータを復号するために使用される。不規則な低密度パリティックチェックコードを使用したデータを符号化／復号する方法も本明細書で説明される。
【００２９】
一実施形態において、不規則なＬＤＰＣエンコーダ／デコーダによって使用される不規則なＬＤＰＣコードは、変動する列重みを有するパリティチェック行列を有する。一実施形態において、不規則なＬＤＰＣエンコーダ／デコーダによって使用される不規則なＬＤＰＣコードは、変動する行重みを有するパリティチェック行列を有する。一実施形態において、不規則なＬＤＰＣエンコーダ／デコーダによって使用される不規則なＬＤＰＣコードは、変動する列重み及び変動する行重みを有するパリティチェック行列を有する。
【００３０】
一実施形態において、不規則なＬＤＰＣエンコーダ／デコーダは、ビットフリップデコーダを含む。一実施形態において、ビットフリップデコーダは低〜中ビットエラー率（ＢＥＲ）に使用される。
【００３１】
一実施形態において、不規則なＬＤＰＣエンコーダ／デコーダは、ソフトデコーダを含む。ソフトデコーダは、一実施形態では、確率伝搬法アルゴリズムに基づく。ソフトデコーダは、一実施形態では、高ＢＥＲを有するまれな場合に使用される。
【００３２】
一実施形態は、異なるデコーダでの所与の程度のスペクトルの性能を推定するように設計されたツールのセットであり、最適な閾値のために走査及び最適化するために使用されるスペクトル設計ツールを含む。
【００３３】
一実施形態は、所与のスペクトルに対してＬＤＰＣグラフを構築するグラフ生成ツールを含む。
【００３４】
本明細書で説明される技術は、様々な種類のメモリシステムと共に使用され得る。しかしながら、本明細書で説明される技術は、メモリシステムに限定されないことが理解されるであろう。図１は、実施形態が実施され得るメモリデバイスの機能ブロック図である。メモリシステム１００（又は記憶デバイスシステム）は、１つ以上のメモリダイ１０８を含み得る。メモリダイ１０８は、メモリセルのアレイなどのメモリセルのメモリ構造１２６、制御回路１１０及び読み出し／書き込み回路１２８を含む。メモリ構造１２６は、行デコーダ１２４を介してワード線によりアドレス指定可能であり、列デコーダ１３２を介してビット線によりアドレス指定可能である。読み出し／書き込み回路１２８は、複数の感知ブロックＳＢ１、ＳＢ２、．．．、ＳＢｐ（感知回路）を含み、メモリセルのページが並列で読み出し又はプログラムされることを可能にする。典型的には、コントローラ１２２は、１つ以上のメモリダイ１０８と同じメモリシステム１００（例えば、リムーバブル記憶カード）に含まれる。コマンド及びデータは、データバス１２０を介してホスト１４０とコントローラ１２２との間で転送され、線１１８を介してコントローラと１つ以上のメモリダイ１０８との間で転送される。
【００３５】
メモリ構造は、２Ｄ又は３Ｄとすることができる。メモリ構造は、３Ｄアレイを含むメモリセルの１つ以上のアレイを含み得る。メモリ構造は、複数のメモリレベルが、介在する基板なしでウェハなどの単一の基板の上方に形成された（かつ、基板内には形成されない）モノリシック３次元メモリ構造を含み得る。メモリ構造は、シリコン基板の上方に配置されたアクティブ領域を有するメモリセルのアレイの１つ以上の物理レベルでモノリシックに形成された任意の種類の不揮発性メモリを含み得る。メモリ構造は、関連する回路が基板の上方又は内部にあるかどうかに関わらず、メモリセルの動作に関連する回路を有する不揮発性メモリデバイスにあり得る。
【００３６】
典型的には、モノリシック３次元メモリアレイでは、１つ以上のメモリデバイスレベルが単一の基板の上方に形成される。任意選択的に、モノリシック３次元メモリアレイは、単一の基板内に少なくとも部分的に１つ以上のメモリ層も有し得る。非限定的な例として、基板は、シリコンなどの半導体を含み得る。モノリシック３次元アレイでは、アレイの各メモリデバイスレベルを構成する層は、典型的には、アレイの下方のメモリデバイスレベルの層上に形成される。しかしながら、モノリシックな３次元メモリアレイの隣接するメモリデバイスレベルの層は、共有されてもよく、あるいはメモリデバイスレベル間に介在する層を有してもよい。
【００３７】
別の観点から、２次元アレイが別個に形成され、次いでまとめてパッケージ化されて、複数のメモリ層を有する非モノリシックメモリデバイスを形成してもよい。例えば、非モノリシック積層メモリは、別個の基板上にメモリレベルを形成し、次いで、メモリレベルを互いの上に積層することによって構築することができる。基板は、積層前にメモリデバイスレベルから薄くされるか、あるいは除去され得るが、メモリデバイスレベルが別個の基板にわたって最初に形成されるため、結果として得られるメモリアレイはモノリシックな３次元メモリアレイではない。更に、複数の２次元メモリアレイ又は３次元メモリアレイ（モノリシック又は非モノリシック）は、別個のチップ上に形成され、次いでまとめてパッケージ化されて積層チップメモリデバイスを形成してもよい。
【００３８】
関連する回路は、典型的には、メモリ素子の動作及びメモリ素子との通信のために必要とされる。非限定的な例として、メモリデバイスは、プログラミング、読み出し等の機能を達成するためにメモリ素子を制御及び駆動するために使用される回路を有し得る。これに関連する回路は、メモリ素子と同じ基板上及び／又は別個の基板上にあってもよい。例えば、メモリ読み出し書き込み動作のためのコントローラは、別個のコントローラチップ上及び／又はメモリ素子と同じ基板上に位置し得る。
【００３９】
制御回路１１０は、読み出し／書き込み回路１２８と協働して、メモリ構造１２６でメモリ動作を実行し、ステートマシン１１２、オンチップアドレスデコーダ１１４及び電力制御モジュール１１６を含む。ステートマシン１１２はメモリ動作のチップレベル制御を提供する。記憶領域１１３は、メモリセルの異なる行又は他の群のためのプログラミングパラメータなど、メモリデバイスを動作させるためのパラメータのために提供され得る。これらのプログラミングパラメータは、ビット線電圧を含み、電圧を検証することができる。
【００４０】
オンチップアドレスデコーダ１１４は、ホスト又はメモリコントローラによって使用されるものと、デコーダ１２４及び１３２によって使用されるハードウェアアドレスとの間のアドレスインターフェースを提供する。電力制御モジュール１１６は、メモリ動作中にワード線及びビット線に供給される電力及び電圧を制御する。それは、３Ｄ構成のワード線層（word line layer、ＷＬＬ）、ＳＧＳ及びＳＧＤ選択ゲート並びにソース線についてのドライバを含むことができる。感知ブロックは、１つのアプローチにおいて、ビット線ドライバを含むことができる。ＳＧＳ選択は、ＮＡＮＤストリングのソース端でのゲートトランジスタであり、ＳＧＤ選択ゲートはＮＡＮＤストリングのドレイン端でのトランジスタである。
【００４１】
いくつかの実装では、構成要素の一部を組み合わせることができる。様々な設計において、メモリ構造１２６以外の構成要素のうちの１つ以上（単独で又は組み合わせて）は、本明細書で説明される活動を実行するように構成されている少なくとも１つの制御回路と考えることができる。例えば、制御回路は、制御回路１１０、ステートマシン１１２、デコーダ１１４／１３２，電力制御モジュール１１６、感知ブロックＳＢ１、ＳＢ２、．．．、ＳＢｐ、読み出し／書き込み回路１２８、コントローラ１２２等のうちのいずれか１つ又はそれらの組み合わせを含み得る。
【００４２】
オフチップコントローラ１２２は、プロセッサ１２２ｃ及びＲＯＭ１２２ａ、ＲＡＭ１２２ｂ等の記憶デバイス（メモリ）を含み得る。記憶デバイスは、命令セットなどのコードを含み、プロセッサは、本明細書で説明される機能を提供する命令セットを実行するように動作可能である。代替的又は追加的に、プロセッサは、１つ以上のワード線におけるメモリセルの予約領域などのメモリ構造の記憶デバイス１２６ａからコードにアクセスすることができる。
【００４３】
コードは、プログラミング、読み出し、及び消去動作などのために、メモリ構造にアクセスするコントローラによって使用される。コードは、ブートコード及び制御コード（例えば、命令セット）を含むことができる。ブートコードは、ブート又はスタートアッププロセス中にコントローラを初期化し、コントローラがメモリ構造にアクセスできるようにするソフトウェアである。コードは、１つ以上のメモリ構造を制御するコントローラによって使用することができる。電源投入されると、プロセッサ１２２ｃは、実行のためにＲＯＭ１２２ａ又は記憶デバイス１２６ａからブートコードをフェッチし、ブートコードはシステム構成要素を初期化し、制御コードをＲＡＭ１２２ｂにロードする。制御コードがＲＡＭにロードされると、プロセッサによって実行される。制御コードは、メモリの制御及び割り当て、命令の処理の優先順位付け、入力及び出力ポートの制御等の基本タスクを実行するドライバを含む。一部の実施形態では、コントローラ１２２は、浮遊小数点数をバイナリストリングに符号化する。制御回路１１０及び読み出し／書き込み回路１２８と共にコントローラ１２２は、メモリアレイ１２６にバイナリストリングを記憶し得る。
【００４４】
ＮＡＮＤフラッシュメモリに加えて、他の種類の不揮発性メモリを使用することもできる。半導体メモリデバイスは、ダイナミックランダムアクセスメモリ（dynamic random access memory、「ＤＲＡＭ」）、スタティックランダムアクセスメモリ（static random access memory、「ＳＲＡＭ」）デバイス等の揮発性メモリデバイス、抵抗ランダムアクセスメモリ（resistive random access memory、「ＲｅＲＡＭ」）、電気的消去可能プログラム可能読み出し専用メモリ（electrically erasable programmable read only memory、「ＥＥＰＲＯＭ」）、フラッシュメモリ（ＥＥＰＲＯＭのサブセットとみなすこともできる）、強誘電性ランダムアクセスメモリ（ferroelectric random access memory、「ＦＲＡＭ」）、磁気抵抗ランダムアクセスメモリ（magnetoresistive random access memory、「ＭＲＡＭ」）等の不揮発性メモリデバイス及び情報を記憶する能力がある他の半導体素子を含む。各種類のメモリデバイスは、異なる構成を有してもよい。例えば、フラッシュメモリデバイスは、ＮＡＮＤ又はＮＯＲ構成で構成され得る。
【００４５】
メモリデバイスは、受動及び／又は能動素子から、任意の組み合わせで形成することができる。非限定的な例として、受動半導体メモリ素子は、ＲｅＲＡＭデバイス素子を含み、これは一部の実施形態では、アンチヒューズ、相変化材料等の抵抗率スイッチング記憶素子、及び任意選択的にダイオード、トランジスタ等のステアリング素子を含む。更に非限定的な例として、能動半導体メモリ素子は、ＥＥＰＲＯＭ及びフラッシュメモリデバイス素子を含み、これは一部の実施形態では、浮遊ゲート、導電性ナノ粒子、電荷蓄積誘電材料等の電荷蓄積領域を含有する素子を含む。
【００４６】
複数のメモリ素子は、直列に接続されるように、あるいは各要素が個別にアクセス可能であるように構成され得る。非限定的な例として、ＮＡＮＤ構成（ＮＡＮＤメモリ）内のフラッシュメモリデバイスは、典型的には、直列に接続されたメモリ素子を含む。ＮＡＮＤストリングは、メモリセル及び選択ゲートトランジスタを含む直列接続トランジスタのセットの例である。
【００４７】
ＮＡＮＤメモリアレイは、ストリングが、単一のビット線を共有しグループとしてアクセスされる複数のメモリ素子から構成される、複数のメモリストリングからアレイが構成されるように構成され得る。代替的に、メモリ素子は、各要素が個別にアクセス可能、例えば、ＮＯＲメモリアレイであるように構成され得る。ＮＡＮＤ及びＮＯＲメモリ構成は例示的であり、メモリ素子は、別の方法で構成され得る。
【００４８】
基板内及び／又は基板の上に位置する半導体メモリ素子は、２次元メモリ構造、３次元メモリ構造等の２次元又は３次元で配置され得る。
【００４９】
２次元メモリ構造では、半導体メモリ素子は、単一の平面又は単一のメモリデバイスレベルに配置される。典型的には、２次元メモリ構造では、メモリ素子は、メモリ素子を支持する基板の主表面に実質的に平行に延在する平面（例えば、ｘｙ方向平面）に配置される。基板は、ウェハであり、ウェハの上又はウェハ内にメモリ素子の層が形成されるウェハであってもよく、あるいはメモリ素子が形成された後にメモリ素子に取り付けられるキャリア基板であってもよい。非限定的な例として、基板は、シリコンなどの半導体を含み得る。
【００５０】
メモリ素子は、複数の行及び／又は列などの順序付きアレイにおいて単一のメモリデバイスレベルに配置され得る。しかしながら、メモリ素子は非規則的又は非直交構成で配列され得る。メモリ素子は各々２つ以上の電極又はビット線、ワード線等の接触線を有し得る。
【００５１】
３次元メモリアレイは、メモリ素子が複数の平面又は複数のメモリデバイスレベルを占有するように配置され、それによって、３次元（すなわち、ｘ、ｙ、及びｚ方向であり、ｚ方向は基板の主表面に実質的に垂直であり、ｘ及びｙ方向は基板の主表面に実質的に平行である）の構造を形成する。
【００５２】
非限定的な例として、３次元メモリ構造は、複数の２次元メモリデバイスレベルの積層体として垂直に配置され得る。別の非限定的な例として、３次元メモリアレイは、各列が複数の素子を有する複数の垂直列（例えば、基板の主表面に対して実質的に垂直、すなわちｙ方向に延在する列）として配置され得る。列は、２次元構成、例えば、ｘｙ平面に配置されてもよく、複数の垂直に積層されたメモリ面に素子があるメモリ素子の３次元配置をもたらす。３次元のメモリ素子の他の構成が、３次元メモリアレイを構成することもできる。
【００５３】
非限定的な例として、３次元ＮＡＮＤメモリアレイでは、メモリ素子は、単一の水平（例えば、ｘｙ）メモリデバイスレベル内にＮＡＮＤストリングを形成するようにまとめて結合され得る。代替的に、メモリ素子は、複数の水平メモリデバイスレベルにわたって横断する垂直なＮＡＮＤストリングを形成するようにまとめて結合され得る。いくつかのＮＡＮＤストリングが単一のメモリレベルでメモリ素子を含有し、他のストリングが複数のメモリレベルにわたるメモリ素子を含有する、他の３次元構成を想定することができる。
【００５４】
当業者であれば、この技術は説明された２次元及び３次元の例示的な構造に限定されず、本明細書で説明され、当業者によって理解されるように、その技術の精神及び範囲内で、多くの関連するメモリ構造をカバーすると理解するであろう。
【００５５】
図２は、コントローラ１２２のより詳細を描画する例示のメモリシステム１００のブロック図である。一実施形態では、図２のシステムは、ソリッドステートドライブである。本明細書で使用するように、メモリコントローラは、メモリに記憶されたデータを管理し、コンピュータ、電子デバイス等のホストと通信するデバイスである。メモリコントローラは、本明細書で説明される特定の機能に加えて、様々な機能を有することができる。例えば、メモリコントローラは、フラッシュメモリをフォーマットしてメモリが適切に動作していることを確実にし、不良のメモリセルを打ち出し、将来の故障セルと置換される予備メモリセルを割り当てることができる。予備セルの一部は、フラッシュメモリコントローラを動作させ、他の機能を実装するためのファームウェアを保持するために使用することができる。動作面では、ホストは、データをメモリから読み出すか、あるいはデータをフラッシュメモリに書き込む必要があるときに、フラッシュメモリコントローラと通信する。データが読み出され／書き込まれる論理アドレス（logical address、ＬＡ）をホストが提供する場合、メモリコントローラは、ホストから受信される論理アドレスをメモリの物理アドレスに変換することができる。（代替的に、ホストが物理アドレスを提供することができる）。メモリコントローラは、これだけに限定されないが、ウェアレベリング（さもなければ繰り返し書き込まれる特定のメモリブロックの消耗を回避するために書き込みを分散させること）及びガーベッジコレクション（ブロックが満杯となった後、全ブロックを消去し再利用することができるように有効なデータページのみを新たなブロックに移すこと）等の様々なメモリ管理機能を実行することもできる。
【００５６】
コントローラ１２２と不揮発性メモリダイ１０８との間のインターフェースは、任意の好適なインターフェースであり得る。一実施形態では、メモリシステム１００は、セキュアデジタル（secure digital、ＳＤ）、マイクロセキュアデジタル（マイクロＳＤ）カード等のカードベースのシステムであり得る。代替の実施形態では、メモリシステム１００は、埋め込みメモリシステムの一部であり得る。例えば、メモリは、パーソナルコンピュータに設置されたソリッドステートディスク（solid state disk、ＳＳＤ）ドライブの形態などでホスト内に埋め込まれ得る。
【００５７】
一部の実施形態では、不揮発性メモリシステム１００は、コントローラ１２２と不揮発性メモリダイ１０８との間に単一のチャネルを含み、本明細書で説明される主題は単一のメモリチャネルを有することに限定されない。例えば、一部のメモリシステムアーキテクチャでは、コントローラの能力に応じて、コントローラとメモリダイとの間に２、４、８、又はそれ以上のチャネルが存在し得る。本明細書で説明される任意の実施形態において、たとえ単一のチャネルが図面に示されていたとしても、コントローラとメモリダイとの間に単一より多いチャネルが存在し得る。
【００５８】
図２に描画するように、コントローラ１２２は、ホストとインターフェースするフロントエンドモジュール２０８と、１つ以上の不揮発性メモリダイ１０８とインターフェースするバックエンドモジュール２１０と、詳細に説明することになる機能を実行する様々な他のモジュールを含む。
【００５９】
図２に描画するコントローラ１２２の構成要素は、例えば、他の構成要素と共に使用するように設計されたパッケージ化された機能ハードウェアユニット（例えば、電気回路）、（マイクロ）プロセッサ若しくは関連する機能の特定の機能を通常実行する処理回路（若しくは１つ以上のプロセッサ）によって実行可能なプログラムコード（例えば、ソフトウェア若しくはファームウェア）の一部、又はより大きなシステムとインターフェースする自己完結型のハードウェア若しくはソフトウェア構成要素の形態を取り得る。例えば、各モジュールは、特定用途向け集積回路（application specific integrated circuit、ＡＳＩＣ）、書替え可能ゲートアレイ（Field Programmable Gate Array、ＦＰＧＡ）、回路、デジタル論理回路、アナログ回路、ディスクリート回路の組み合せ、ゲート、他の任意の種類のハードウェア、又はそれらの組み合せを含み得る。代替的又は追加的に、各モジュールは、本明細書で説明される機能を実行するコントローラ１２２のための１つ以上のプロセッサをプログラムする、プロセッサ可読デバイス（例えば、メモリ）に記憶されるソフトウェアを含み得る。図２Ｂに描画するアーキテクチャは、図２に描画したコントローラ１２２の構成要素（すなわち、ＲＡＭ、ＲＯＭ、プロセッサ）を使用してもよい（あるいは使用しなくてもよい）実装の一例である。
【００６０】
コントローラ１２２は、メモリセル又はメモリブロックを再調整するために使用される再調整回路２１２を含み得る。コントローラ１２２のモジュールを再び参照すると、バッファマネージャ／バスコントローラ２１４が、ランダムアクセスメモリ（random access memory、ＲＡＭ）２１６内のバッファを管理し、コントローラ１２２の内部バスの調停を制御する。読み出し専用メモリ（read only memory、ＲＯＭ）２１８は、システムブートコードを記憶する。図２ではコントローラ１２２から離れて位置するものとして図示するが、他の実施形態では、ＲＡＭ２１６及びＲＯＭ２１８の一方又は両方がコントローラ内に位置してもよい。更に他の実施形態では、ＲＡＭ及びＲＯＭの一部がコントローラ１２２内及びコントローラ外の両方に位置し得る。更に、一部の実装では、コントローラ１２２、ＲＡＭ２１６、及びＲＯＭ２１８が別個の半導体ダイに位置し得る。
【００６１】
フロントエンドモジュール２０８は、ホスト又は次のレベルの記憶コントローラとの電気的インターフェースを提供するホストインターフェース２２０及び物理層インターフェース（physical layer interface、ＰＨＹ）２２２を含む。ホストインターフェース２２０の種類の選択は、使用されているメモリの種類によって決まり得る。ホストインターフェース２２０の例として、これだけに限定されないが、ＳＡＴＡ、ＳＡＴＡ  Ｅｘｐｒｅｓｓ、ＳＡＳ、ファイバチャネル、ＵＳＢ、ＰＣＩｅ、及びＮＶＭｅが挙げられる。ホストインターフェース２２０は、典型的に、データ、制御信号、及びタイミング信号の転送を促進する。
【００６２】
バックエンドモジュール２１０は、ホストから受信したデータバイトを符号化し、不揮発性メモリから読み出したデータバイトを復号してエラー訂正するエラー訂正コントローラ（error correction controller、ＥＣＣ）エンジン２２４を含む。ＥＣＣエンジン２２４は、パラメータ化デコーダ２４４、非パラメータ化デコーダ２４５、及び１つ以上のエンコーダ２５６を有する。一実施形態では、デコーダ２４４、２４５は低密度パリティチェック（ＬＤＰＣ）デコーダである。１つ以上のデコーダ２４４、２４５の出力は、ホストに提供され得る。
【００６３】
一実施形態では、エンコーダ２５６は、不規則な低密度パリティックチェックコードを使用してデータを符号化するように構成されている、不規則な低密度パリティチェックエンコーダ２４７を含む。不規則な低密度パリティチェックエンコーダ２４７は、一実施形態では、不揮発性メモリ（例えば、ＮＡＮＤ、ＮＯＲ、ＲｅＲＡＭ、相変化メモリ（ＰＣＭ））に記憶されるデータを符号化するために使用される。一実施形態では、ＥＣＣエンジン２２４は、不規則な低密度パリティチェックエンコーダを用いて符号化した後に記憶されたデータを復号するように構成されている、不規則な低密度パリティックチェックデコーダ２４８を含む。
【００６４】
デコーダ２４４、２４５の一部の実施形態は、ビット（又は可変）ノード及びチェックノードを有するスパース２部グラフに基づく。デコーダ２４４、２４５は、ビットノードとチェックノードとの間でメッセージを渡し得る。ビットノードとチェックノードとの間でメッセージを渡すことは、一部の実施形態では、メッセージパッシング計算を実行することによって達成される。メッセージパッシング計算は、確率伝搬法に基づき得る。一部の実施形態では、メモリシステム１００は、パラメータ化デコーダ２４４のためのメッセージパッシング計算のためのパラメータを学習する。パラメータを学習することは、デコーダ２４４を、メッセージパッシング計算間の統計的依存性に適応させるために使用され得るが、これだけに限定されない。パラメータを学習することは、デコーダ２４４をメモリアレイに記憶されたコールドデータの特性に適応させるために使用され得る。パラメータを学習することは、デコーダ２４４をノイズリアリゼーションに適応させるために使用され得る。パラメータを学習することは、デコーダ２４４をノイズ統計（又はノイズ特性）に適応させるために使用され得る。パラメータを学習することは、デコーダ２４４をホストトラフィックの特性に適応させるために使用され得る。
【００６５】
コマンドシーケンサ２２６は、不揮発性メモリダイ１０８に伝送されるプログラムコマンドシーケンス及び消去コマンドシーケンス等のコマンドシーケンスを生成する。ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｅ、独立ダイの冗長アレイ）モジュール２２８はＲＡＩＤパリティの生成及び障害データの回復を管理する。ＲＡＩＤパリティは、不揮発性メモリシステム１００内に書き込まれているデータのための完全性保護の更なるレベルとして使用してもよい。場合によっては、ＲＡＩＤモジュール２２８がＥＣＣエンジン２２４の一部であり得る。ＲＡＩＤパリティは、通称によって暗示されるように追加のダイとして加えてもよいが、例えば、追加の平面、追加のブロック、又はブロック内の追加のワード線として既存のダイ中に加えてもよいことに留意されたい。メモリインターフェース２３０は、コマンドシーケンスを不揮発性メモリダイ１０８に提供し、不揮発性メモリダイ１０８からステータス情報を受信する。一実施形態では、メモリインターフェース２３０は、ダブルデータレート（double data rate、ＤＤＲ）インターフェースであり得る。
【００６６】
図２に図示するシステム１００の追加の構成要素は、不揮発性メモリダイ１０８のメモリセルのウェアレベリングを実行するメディア管理層２３８を含む。システム１００は、外部の電気的インターフェース、外部のＲＡＭ、抵抗、コンデンサ、又はコントローラ１２２とインターフェースし得る他の構成要素等の他のディスクリート構成要素２４０も含む。代替の実施形態では、物理層インターフェース２２２、ＲＡＩＤモジュール２２８、メディア管理層２３８、及びバッファ管理／バスコントローラ２１４のうちの１つ以上が、コントローラ１２２内で不要である任意選択的な構成要素である。
【００６７】
エラー及びホストとのインターフェースを扱い得る管理の一部として、メディア管理層（Media Management Layer、ＭＭＬ）２３８が統合され得る。一実施形態では、ＭＭＬ２３８はフラッシュ変換層である。特に、ＭＭＬは、ＮＡＮＤ管理の内部を担当し得る。特に、ＭＭＬ２３８は、ホストからの書き込みをダイ１０８のメモリへの書き込みに変換するメモリデバイスファームウェア内のアルゴリズムを含み得る。ＭＭＬ２３８は、１）メモリの耐久性が限られている場合があること、２）メモリがページの倍数単位でのみ書き込まれる場合があること、及び／又は３）メモリはブロックとして消去されない限り書き込むことができないことを理由に必要とされ得る。ＭＭＬ２３８は、ホストに可視でないことがあるメモリのこれらの潜在的制約を理解する。したがって、ＭＭＬ２３８は、ホストからの書き込みをメモリへの書き込みに変換しようと試みる。
【００６８】
コントローラ１２２は、１つ以上のメモリダイ１０８とインターフェースし得る。一実施形態では、コントローラ１２２及び複数のメモリダイ（まとめて不揮発性記憶システム１００を含む）が、ソリッドステートドライブ（solid state drive、ＳＳＤ）を実装し、ＳＳＤは、ＮＡＳデバイス等、ホスト内のハードディスクドライブをエミュレートし、置換し、又はその代わりに使用され得る。追加的に、ＳＳＤはハードドライブとして作動するように作製される必要はない。
【００６９】
図３は、パラメータ化反復メッセージパッシングデコーダ２４４においてパラメータを学習し使用するプロセス３００の一実施形態のフローチャートである。プロセス３００は、学習フェーズと復号フェーズとに分割される。学習フェーズは機械学習を使用して、一実施形態では、メッセージパッシング計算ためのパラメータを学習する。メッセージパッシング計算は、一実施形態では、確率伝搬法規則に基づく。しかしながら、プロセス３００は、確率伝搬法規則に限定されない。メッセージパッシング計算は、一実施形態では、ミニサム計算規則である。復号フェーズは、学習されたパラメータを使用してデータを復号する。以下に説明するように、プロセス３００は、コードワードのクリーンバージョン及びそれらのコードワードのノイズの多いバージョンを伴い得る。
【００７０】
一実施形態では、学習フェーズはオフラインで実行される。オフラインによって、学習は、メモリシステム１００がユーザデータを記憶するために使用される前に生じることを意味する。この場合、訓練データは、任意に生成されたコードワードのノイズの多いバージョンであり得る。莫大な数の任意に生成されたコードワードのノイズの多いバージョンを生成することが可能であることに留意されたい。したがって、大きなセットの訓練データを生成することが可能である。一実施形態では、学習フェーズはオンラインで実行される。オンラインによって、学習は、メモリシステム１００がユーザデータを記憶するために使用されるときに生じることを意味する。この場合、訓練データは、メモリアレイ１２６から読み出された実際のデータであり得る。復号フェーズは、典型的にはオンラインで実行される。すなわち、復号フェーズは、典型的には、メモリアレイ１２６に記憶されたデータに対して実行される。
【００７１】
ステップ３０２は、ノイズコードワードのバッチをパラメータ化反復メッセージパッシングデコーダ２４４に渡す。一実施形態では、ノイズコードワードは、事前対数尤度比のベクトルとして表される。オフライン実施形態では、ノイズコードワードは、コードワードの任意のノイズの多いバージョンをコードワードのクリーンバージョンに追加することによって生成され得る。オンライン実施形態では、ノイズコードワードは、クリーンバージョンのコードワードでプログラムされ、メモリセルから読み出されたデータに基づいて、事前ＬＬＲを形成することによって生成され得る。事前ＬＬＲは、ハードビットのみを読み出す、ハードビット及びソフトビットの両方を読み出す等に基づき得る。
【００７２】
バッチにおけるノイズコードワードの数は、変動することができる。ステップ３０２は、一度に１つのコードワードをデコーダ２４４渡すことを含み得ることに留意されたい。図７のプロセス７００は、１つのバッチにおける個々のノイズコードワードをデコーダ２４４に渡す一実施形態についての更なる詳細を提供する。
【００７３】
パラメータ化反復メッセージパッシングデコーダ２４４は、一実施形態では、メッセージパッシング計算を実行する。一実施形態では、メッセージパッシング計算は、確率伝搬法規則に基づく。メッセージパッシング計算の少なくとも一部は、一実施形態では、学習される１つ以上のパラメータを有する。ステップ３０２は、デコーダ２４４の結果をもたらす。一実施形態では、デコーダ２４４の結果は、事後ＬＬＲのセットである。事後ＬＬＲは、一実施形態では、コードワード内の各ビットの推定値及びその推定値の信頼性を含む。
【００７４】
ステップ３０４は、パラメータ化反復メッセージパッシングデコーダ２４４のメッセージパッシング計算のためのパラメータを修正する。パラメータは、一実施形態では、コードワードのバッチ全体から学習されたものに基づいて修正される。一実施形態では、パラメータは、デコーダ２４４のラベル付き出力に基づいて修正される。用語「ラベル付き出力」は、本明細書では、この用語が機械学習において一般的に使用されるように使用される。ラベル付き出力は、デコーダ結果（例えば、事後ＬＬＲ）とクリーンコードワードとの間の相互情報に基づき得る。更なる詳細を以下に論じる。
【００７５】
プロセス３００がステップ３０２及びステップ３０４を実行するたびに、パラメータは更に修正され得る。ステップ３０６は、パラメータが十分に学習されたかどうかについての決定である。一実施形態では、ステップ３０６は、ラベル付き出力が飽和したかどうかを決定することを含む。一実施形態では、ステップ３０６は、所定の数のノイズの多いコードワードのバッチが処理されたかどうかを決定することを含む。
【００７６】
ステップ３０８は、学習されたパラメータを記憶する。一実施形態では、学習されたパラメータは、メモリアレイ１２６に記憶される。一実施形態では、学習されたパラメータは、ＲＯＭ１２２ａに記憶される。一実施形態では、学習されたパラメータは、記憶領域１１３に記憶される。
【００７７】
ステップ３０８とステップ３１０との間の矢印は破線になっており、これら２つのステップの間でかなりの時間が経過し得ることを示す。ステップ３１０は、符号化され、不揮発性メモリに記憶されたデータにアクセスすることを含む。すなわち、データは、デコーダ２４４によって使用されるコードに従って符号化されている。
【００７８】
ステップ３１２は、パラメータ化反復メッセージパッシングデコーダ２４４において、学習されたパラメータを使用してデータを復号することを含む。
【００７９】
一部の実施形態では、パラメータ化反復メッセージパッシングデコーダ２４４は、スパースパリティチェック行列（スパース２部グラフとして表すこともできる）に基づく。図４は、スパースパリティチェック行列Ｈの例を描画する。行列は、Ｍ行Ｋ＋Ｍ列を含み、これは、長さＮ＝Ｋ＋Ｍの各コードワードにおけるＫ個の情報ビット及びＭ個のパリティビットに対応している。更に、パリティビットは、Ｍ個のパリティチェック方程式が満たされるように定義され、行列の各行はパリティチェック方程式を表す。
【００８０】
図５は、図４のスパースパリティチェック行列に対応するスパース２部グラフ５００を描画する。具体的には、コードは、Ｎビットノード５０２のセットＶ（この例ではＮ＝１３）、Ｍ個のチェックノード５０４のセットＣ（この例ではＭ＝１０）、及びビットノード５０２をチェックノード５０４に接続するエッジ５０６のセットＥ（この例ではＥ＝３８）を備えたスパース２部グラフＧ＝（Ｖ，Ｃ，Ｅ）によって定義することができる。ビットノードはコードワードビットに対応し、チェックノードはビットに対するパリチェック制約に対応する。ビットノード５０２は、エッジ５０６によって、参加するチェックノード５０４に接続される。
【００８１】
復号中、パラメータ化反復メッセージデコーダ２４４の一実施形態は、パリティチェックを満たすことを試みる。この例では、チェックノードｃｎ１〜ｃｎ１０によって示されるように、１０個のパリティチェックが存在する。ｃｎ１での第１のパリティチェックは、ｖ２（ＸＯＲ）ｖ４（ＸＯＲ）ｖ１１（ＸＯＲ）ｖ１３＝０であるかどうかを決定し、「（ＸＯＲ）」は、排他的ｏｒ（ＸＯＲ）論理演算を示す。このチェックは、可変ノードｖ２、ｖ４、ｖ１１及びｖ１３に対応するビット内に偶数個の「１」が存在する場合に満たされる。このチェックは、可変ノードｖ２、ｖ４、ｖ１１及びｖ１３からの矢印が、２部グラフ内のチェックノードｃｎ１に接続されているという事実によって示される。ｃｎ２での第２のパリティチェックは、ｖ１（ＸＯＲ）ｖ７（ＸＯＲ）ｖ１２（ＸＯＲ）＝０であるかどうかを決定し、ｃｎ３での第３のパリティチェックは、ｖ３（ＸＯＲ）ｖ５（ＸＯＲ）ｖ６（ＸＯＲ）ｖ９（ＸＯＲ）ｖ１０＝０であるかどうかを決定し、ｃｎ４での第４のパリティチェックは、ｖ２（ＸＯＲ）ｖ８（ＸＯＲ）ｖ１１＝０であるかどうかを決定し、ｃｎ５での第５のパリティチェックは、ｖ４（ＸＯＲ）ｖ７（ＸＯＲ）ｖ１２＝０であるかどうかを決定し、ｃｎ６での第６のパリティチェックは、ｖ１（ＸＯＲ）ｖ５（ＸＯＲ）ｖ６（ＸＯＲ）ｖ９＝０であるかどうかを決定し、ｃｎ７での第７のパリティチェックは、ｖ２（ＸＯＲ）ｖ８（ＸＯＲ）ｖ１０（ＸＯＲ）ｖ１３＝０であるかどうかを決定し、ｃｎ８での第８のパリティチェックは、ｖ４（ＸＯＲ）ｖ７（ＸＯＲ）ｖ１１（ＸＯＲ）ｖ１２＝０であるかどうかを決定し、ｃｎ９での第９のパリティチェックは、ｖ１（ＸＯＲ）ｖ３（ＸＯＲ）ｖ５（ＸＯＲ）ｖ１３＝０であるかどうかかを決定し、ｃｎ１０での第１０のパリティチェックは、ｖ７（ＸＯＲ）ｖ８（ＸＯＲ）ｖ９（ＸＯＲ）ｖ１０＝０であるかどうかを決定する。
【００８２】
一実施形態では、パラメータ化反復メッセージデコーダ２４４は、反復メッセージパッシング復号アルゴリズムを伴う反復確率復号プロセスを使用する。これらのアルゴリズムは、コードを表す下にある２部グラフのエッジを介してビットとチェックノードとの間でメッセージを交換することによって動作する。
【００８３】
パラメータ化反復メッセージデコーダ２４４には、（通信チャネル出力に基づいて、あるいはメモリアレイからの読み出された内容に基づいて）コードワードビットの初期推定値が提供され得る。これらの初期推定値は、有効なコードワードとしてビットが満たされるべきであるパリティックチェック制約を課すことによって改良及び改善され得る。これは、グラフエッジに沿って渡されるメッセージを使用して、コードワードビットを表すビットノードと、コードワードビットに対するパリチェック制約を表すチェックノードとの間で情報を交換することによって行われ得る。
【００８４】
例えば、反復は、チェックノードを連続的に横断し、各パリティチェックに基づいて関与するビットのＬＬＲ値を更新することを伴うことができる。１つのアプローチでは、ｃｎ１の第１のパリティチェックを満たす試みが行われる。パリティチェックが満たされると、ｃｎ２のパリティチェックなどを満たす試みが行われる。ＬＬＲ値は、必要に応じて、各反復において、当業者に既知の方法で調整される。
【００８５】
具体的には、反復復号アルゴリズムでは、ビット推定及び推定の信頼性の両方を伝達する「ソフト」ビット推定を利用することが一般的である。
【００８６】
グラフエッジに沿って渡されたメッセージによって伝達されるビット推定は、様々な形態で表現することができる。「ソフト」ビット推定を表現するための一般的な尺度は、以下のように定義される対数尤度比（Log-Likelihood Ratio、ＬＬＲ）である。
【数１】
2020202553.tif 000003
【００８７】
「現在の制約及び観察」は、近い将来メッセージを計算する際に考慮される様々なパリティックチェック制約と、これらのパリティチェックに参加しているビットに対応する観察である。一般性を失うことなく、ＬＬＲメッセージがこの文書の残りの全体にわたって使用されると仮定する。ＬＬＲの符号は、典型的には、ビット推定を提供する（すなわち、正のＬＬＲはｖ＝０に対応し、負のＬＬＲはｖ＝１に対応する）。ＬＬＲの大きさは、推定の信頼性を提供する（すなわち、｜ＬＬＲ｜＝０は、推定が完全に信頼できないことを意味し、｜ＬＬＲ｜＝∞は、推定が完全に信頼性でき、ビット値が既知であることを意味する）。
【００８８】
通常、ビットノードとチェックノードとの間のグラフエッジに沿った復号中に渡されるメッセージは、外的である。エッジ「ｅ」上のビットノード「ｖ」から渡される外的メッセージ「ｍ」は、エッジ「ｅ」以外のビットノード「ｖ」に接続されたエッジで受信された全ての値を考慮し得る（新しい情報にのみ基づくため、外的と呼ばれるわけである。）。
【００８９】
メッセージパッシング復号アルゴリズムの例は、確率伝搬法（Belief−Propagation、ＢＰ）アルゴリズムである。
【数２】
2020202553.tif 000004
【００９０】
とし、受信された、あるいは読み出されたシンボル「ｙ」にのみ基づいて、ビットｖについての初期デコーダ推定値を示す。ビットの一部は、通信チャネルを通じて伝送されないか、あるいはメモリアレイに記憶されないことも可能であり、したがって、これらのビットについては「ｙ」観察は存在しないことに留意されたい。この場合、２つの可能性がある。すなわち、１）短縮コードであり、例えば、ビットは事前に知られており、Ｐｖ＝±∞（ビットが０又は１であるかどうかによる）である、２）事前に知られたパンクチャビットであり、
【数３】
2020202553.tif 000005
であって、Ｐｒ（ｖ＝０）及びＰｒ（ｖ＝１）は、ビットｖがそれぞれ０又は１である事前確率である。フラッシュメモリの内容には、パンクチャビットは、単にメモリアレイに記憶されない。情報ビットが、０又は１について等しい事前確率を有し、コードが線形であると仮定すると、
【数４】
2020202553.tif 000006
であり、
【数５】
2020202553.tif 000007
【００９１】
とし、受信された、あるいは読み出されたシーケンス「ｙ」全体に基づいてビット「ｖ」についての最終デコーダ推定値を表し、ビット「ｖ」がコードワードの一部であると仮定する（すなわち、
【数６】
2020202553.tif 000008
と仮定する）。
【００９２】
Ｑｖｃ及びＲｃｖは、ビットノード「ｖ」からチェックノード「ｃ」へのメッセージ、及びチェックノード「ｃ」からビットノード「ｖ」へのメッセージを示すとする。従来のＢＰアルゴリズムは、メッセージを計算するために以下の更新規則を利用する。従来のビットノードからチェックノードへの計算規則は、
【数７】
2020202553.tif 000009
【００９３】
である。ここで、Ｎ（ｖ）は、グラフＧにおいてノード「ｖ」の近隣のセットを示し、Ｎ（ｖ）＼ｃは、ノード「ｃ」を除く近隣を指す。ここで、「ｊ」は反復を指す。従来のＢＰアルゴリズムにおけるチェックノードからビットノードへの計算規則は、
【数８】
2020202553.tif 000010
【００９４】
である。同様に、Ｎ（ｃ）は、グラフＧにおけるチェックノード「ｃ」のビットノード近隣のセットを示し、Ｎ（ｖ）＼ｃは、ノード「ｖ」を除く近隣を指す。ビット「ｖ」についての従来の最終デコーダ推定値は、
【数９】
2020202553.tif 000011
【００９５】
である。図３に戻って参照すると、パラメータがメッセージパッシング計算のために学習される。一例は、方程式６の例などのビットノードからチェックノードへの計算のための１つ以上のパラメータを学習する。別の例は、方程式７の例などのチェックノードからビットノードへの計算のための１つ以上のパラメータを学習する。別の例は、方程式８の例などのビット「ｖ」についての最終デコーダ推定値のための１つ以上のパラメータを学習する。一実施形態では、１つ以上のパラメータは、コードを表すグラフ内のエッジについて学習される。しかしながら、グラフ内の各エッジについてパラメータを学習する必要はない。
【００９６】
方程式９は、パラメータ
【数１０】
2020202553.tif 000012
有するパラメータ化メッセージパッシング計算の一実施形態である。なお、これは、方程式６の例の変形例である。「ｊ」は反復を示す。アルファはビットノード（ｖ）及びチェックノード（ｃ）に依存することに留意されたい。一実施形態では、（所与のビットノード及びチェックノードのための）アルファパラメータは、各反復に対して異なり得る。しかしながら、（所与のビットノード及びチェックノードのための）アルファパラメータは、学習プロセス及び保存されたパラメータの数を簡潔にするため、各反復に関して同じにすることができる。また、方程式９は、（「ｃ」及び「ｖ」によって与えられる）グラフ内の異なるエッジに対するメッセージに関連することに留意されたい。しかしながら、以下に記載されるように、学習する必要があるアルファパラメータの数を低減することが可能である。したがって、方程式９で表される各エッジについて別個のアルファパラメータを学習する必要はない。
【数１１】
2020202553.tif 000013
【００９７】
方程式１０は、パラメータ
【数１２】
2020202553.tif 000014
を用いたパラメータ化メッセージパッシング計算の一実施形態である。なお、これは、方程式７の例の変形である。アルファパラメータと同様に、ベータはビットノード（ｖ）及びチェックノード（ｃ）に依存する。（所与のビットノード及びチェックノードのための）ベータパラメータは、各反復に関して異なり得る。しかしながら、（所与のビットノード及びチェックノードのための）ベータパラメータは、学習プロセス及び保存されたパラメータの数を簡潔にするため、各反復に関して同じにすることができる。また、学習する必要のあるベータパラメータの数を低減することが可能である。したがって、方程式９に表される各エッジについて別個のベータパラメータを学習する必要がない。
【数１３】
2020202553.tif 000015
【００９８】
方程式１１はパラメータ
【数１４】
2020202553.tif 000016
を用いたパラメータ化最終デコーダ推定値の一実施形態である。なお、これは、方程式８の例の変形であることに留意されたい。
【数１５】
2020202553.tif 000017
【００９９】
一実施形態では、プロセス３００は、方程式９、方程式１０、及び／又は方程式１１においてパラメータを学習する。いくつかの場合では、単一のメッセージパッシング計算のために複数のパラメータが学習され得ることに留意されたい。また、方程式９、方程式１０、及び／又は方程式１１は、様々な実施形態で学習することができる、多くの可能なパラメータ化メッセージパッシング計算のうちのほんの数個であることにも留意されたい。
【０１００】
図６は、メッセージパッシングデコーダのためのパラメータを学習するときに使用され得る例示的なネットワーク６００である。ネットワーク６００は、図５のスパース２部グラフ５００の「アンフォールド」バージョンである。ビットノード５０２（１）〜５０２（３）の３つのセットは、実際にはビットノード５０２の同じセットである。同様に、チェックノード５０４（１）〜５０４（２）の２つのセットは、実際にはチェックノード５０４の同じセットである。ネットワーク６００は、ビットノード５０２とチェックノード５０４との間でエッジ５０６に沿ってメッセージを渡す２回の反復（ｊ＝１、ｊ＝２）を示す。ネットワーク６００は、完全接続ネットワークではないことに留意されたい。「完全接続ネットワークではない」とは、１つのレベルのノードが次のレベルの全てのノードに接続されているわけではないことを意味する。ここで、「レベル」は、ビット及びチェックノードの異なるセットである。
【０１０１】
コードワード（ｂｖ）６０２が描画されている。このことは、クリーンコードワードの例であることに留意されたい。コードワード６０２は、この例では、１３ビット（ｂ１〜ｂ１３）のベクトルを含む。コードワード内の各ビットは、一例では０又は１のいずれかである。いくつかの他の値は、２つの状態を表すため使用することができる（例えば、コードワード内の各ビットは、−１又は＋１のいずれかであり得る）。ネットワーク６００への入力は、ビットノード５０２（１）に供給される事前ＬＬＲ（Ｐ１−Ｐ１３）のセットである。ＬＬＲは、一実施形態において、ビットの推定値とその推定値の信頼性の両方を含有する。ＬＬＲは、浮動小数点値、固定少数点値とすることができるが、これらの例に限定されない。
【０１０２】
一実施形態では、事前ＬＬＲは、クリーンコードワード６０２．のビットにノイズを追加することによって生成される。コードワード内のビットの値も正規化され得る。一実施形態では、事前ＬＬＲは、不揮発性メモリに記憶されたデータを読み出すことによって生成される。不揮発性メモリから読み出されるデータは、典型的には、読み出しディスターブ、プログラムディスターブ、電荷損失などの周知の要因によりノイズが多い。事前ＬＬＲは、ハードビットのみの読み出しに基づいて、あるいはハードビットとソフトビットの両方の読み出しに基づいて生成され得る。
【０１０３】
この例では、２回の反復後のビットノード５０２（３）での結果は、事後ＬＬＲ（Ｑ１〜Ｑ１３）のセットである。事後ＬＬＲは、コードワード内のビットの最終推定値である。図６は、「ラベル付き出力」６０４を示す。この例では、ラベル付き出力６０４は、
【数１６】
2020202553.tif 000018
【０１０４】
によって与えられる。なお、この例では、ラベル付き出力６０４は、コードワードｂｖ及び後方ＬＬＲの関数である。方程式１２は、クリーンコードワードとデコーダ結果（例えば、ビットの最終推定値）との間の「相互情報」と呼ばれることがある。図６は、出力６０４に渡されるクリーンコードワード６０２を描画していることに留意されたい。一実施形態では、パラメータを学習するために、この相互情報を最大化することを試みることを目的とする。相互情報は、相互情報がもはや増加しなくなるなんらかの時点までパラメータが修正されるにつれて、相互情報が増加することがあり得る。一実施形態では、学習プロセスはこの時点で停止される。
【０１０５】
方程式１２は、ソフトビット推定に基づいたラベル付き出力の例である。これは、ネットワーク６００．の滑らかな勾配を決定するのに役立ち得る。このような勾配は、パラメータにおける無限小変化がどの程度ラベル付き出力を変化させるかを定義し得る。しかしながら、ラベル付き出力は、ソフトビット推定に基づく必要はない。一実施形態では、ラベル付き出力は、クリーンコードワードなどのデコーダ「ハード決定」である。
【０１０６】
図７は、メッセージパッシング計算のためのパラメータを学習するプロセス７００の一実施形態のフローチャートである。プロセス７００は、プロセス３００．のステップ３０２及び３０４の一実施形態についての更なる詳細を提供する。プロセス７００は、コードワードの１つのバッチを処理することを説明する。プロセス７００は、図６のネットワーク６００などのネットワークと共に使用され得る。したがって、プロセス７００は、説明を目的として図６のネットワーク６００を参照するが、そのネットワーク６００．に限定されない。説明のために、方程式９、方程式１０、及び方程式１１についてのアルファ及びベータパラメータの例が説明される。プロセス７００，の開始時に、パラメータの値を任意に設定することができる。代替的に、パラメータの値は、これに限定されないが、プロセス７００を含むパラメータ学習プロセスを実行する以前に学習されていてもよい。
【０１０７】
ステップ７０２は、ネットワーク６００にノイズが多いコードワードをフォワードパスすることを含む。フォワードパスは、ネットワーク６００の入力ノード５０２（１）から出力ノード５０２（３）への処理を指す。ステップ７０２は、ノイズの多いコードワードをデコーダ２４４．に単に入力することによって達成され得ることに留意されたい。ステップ７０２は、一実施形態では、メッセージパッシング計算を実行することを含む。図６の例示的なネットワーク６００を参照すると、各エッジ５０６に対してメッセージパッシング計算が実行され得る。図６には２回の反復が示されているが、ステップ７０２では、より多い又はより少ない反復が行われてもよい。一実施形態では、反復の数は、事後ＬＬＲが高くなりすぎることを意図的に防止するために比較的低く維持される。これは、より少ない反復が使用されるときに、デコーダ２４４がより良く動作するように訓練するのに役立つことがあり、これは、パラメータ化デコーダ２４４がより速く収束するのに役立つことができる。
【０１０８】
ステップ７０２は、ビットノードからチェックノードへの計算、及びチェックノードからビットノードへの計算を実行することを含み得る。一実施形態では、方程式９に示されるようにビットノードからチェックノードへの計算は、ビットノード５０２（１）からビットノード５０４（１）について実行され、方程式１０に示されるようにチェックノードからビットノードへの計算は、チェックノード５０４（１）からビットノード５０２（２）について実行され、方程式９に示されるようにビットノードからチェックノードへの計算は、ビットノード５０２（２）からチェックノード５０４（２）について実行され、方程式１０に示されるようにチェックノードからビットノードへの計算は、チェックノード５０４（２）からビットノード５０２（３）について実行される。別個のパラメータのセットは、各反復（ｊ）について学習され得ることに留意されたい。しかしながら、別の選択肢は、各反復について同じパラメータを使用することによって学習を単純化することである。
【０１０９】
ステップ７０４は、デコーダ２４４のラベル付き出力６０４を計算することを含む。図６の例示的なネットワーク６００に関して、ラベル付き出力６０４が計算され得る。ラベル付き出力の一例は、上記の方程式１２で与えられる。しかしながら、ラベル付け出力のために異なる方程式が使用されてもよい。上述したように、デコーダ２４４の反復数が、意図的に低く維持されてもよく、これは、方程式１２における相互情報をより低く維持することができる。これは、パラメータのより良好な学習を可能にし得る。この文脈において意図的に低くとは、デコーダ２４４が全てのコードワードの収束を試みるために使用された場合、典型的に使用されるものよりも低いことを意味する。
【０１１０】
ステップ７０６は、ネットワーク６００を通じたバックワードパスを含む。ステップ７０６では、１つ以上の部分導関数が計算され得る。これらの部分導関数は、ネットワーク６００を通じたステッピングバックワードによって計算され得る。部分導関数としては、これに限定されないが、事後ＬＬＲに関するラベル付き出力の部分導関数、パラメータに関するメッセージ計算、別のメッセージ計算に関するメッセージ計算が含まれ得る。例示的な部分導関数を図８Ａ〜図８Ｇに示す。ステップ７０６が、パラメータの各々に対する勾配を決定することを含み得ることにも留意されたい。パラメータについての勾配は、ラベル付き出力６０４が、パラメータにおける無限小変化と共にどの程度変化するかを示し得る。例示的な勾配を図８Ｈ〜図８Ｊに示す。例示的な部分導関数及び勾配を、以下で更に詳細に説明する。
【０１１１】
一実施形態では、デコーダ２４４は、フォワードパスのメッセージ計算を実行する１つの計算ユニットのセットと、バックワードパスの計算を実行する別の計算ユニットのセットとを有する。一実施形態では、フォワードパスのために使用されるルータなどの一部のデコーダ回路は、バックワードパスのために再使用され得る（おそらく若干の修正を伴って）。
【０１１２】
このコードワードが処理された後、別のコードワードを処理するかどうかの決定が行われる。そうである場合、プロセス７００はステップ７０２に戻り、バッチ内の次のコードワードを処理する。したがって、バッチ内のコードワードの各々について、部分導関数のセットがステップ７０６において決定され得る。更に、各パラメータの勾配は、各コードワードについてステップ７０６において決定され得る。バッチ内の全てのコードワードが処理された後、ステップ７１０が実行される。
【０１１３】
ステップ７１０は、パラメータ勾配に基づいてパラメータを修正することを含む。一実施形態では、ステップ７０６において各コードワードについて計算されたパラメータ勾配が平均化される。パラメータ勾配を平均化することは、特定のノイズの多いリアリゼーションの影響を平均するのに役立つことができ、グラフに関連する傾向のみが残るようにする。例えば、平均化された勾配は、特定の入力（例えば、「オーバーフィッティング」）に対する計算規則を最適化するのではなく、グラフサイクル特性及びそれらの誘発統計的依存性を捕捉することによって、複数のノイズリアリゼーションに対する計算規則を最適化する勾配であり得る。次いで、パラメータは平均に基づいて修正され得る。
【０１１４】
方程式１３〜方程式１５は、それぞれ方程式９、方程式１０、及び方程式１１で使用されるパラメータを修正するための例である。
【数１７】
2020202553.tif 000019
【０１１５】
デルタ（δα、δβ）は学習速度係数であり、これはステップサイズを決定し得る。学習速度係数は、パラメータがどのくらい速く学習されるかを決定し得る。デルタの値は、所望の学習速度を達成するように選択され得る。用語「学習速度係数」は、本明細書では、その用語がニューラルネットワークに関して一般的に使用されるように使用されている。
【０１１６】
モーメンタム及び重み減衰などの、様々な追加の最適化「ノブ」及び「ツイーク」が同様に使用され得ることに留意されたい。用語「モーメンタム」は、本明細書では、その用語がニューラルネットワークに関して一般的に使用されるように使用されている。モーメンタムを使用すると、ラベル付き出力を同じ軌道上に維持するのに役立つことができる。言い換えると、これは、ラベル付き出力をジグザグパターンから維持するのに役立つことができる。モーメンタムは、ラベル付き出力が局所的最小値で動かなくなるのを回避するのにも役立ち得る。したがって、モーメンタムは、学習プロセスが適切に収束するのに役立つことができる。ここでの重み減衰は、その用語がニューラルネットワークに関して一般的に使用されるような用語「重み減衰」を指す。一部の実施形態では、重み減衰に好適な値は、オーバーフィッティング又はアンダーフィッティングを防止するのに役立つように選択される。
【０１１７】
プロセス７００は、リフトグラフ（例えば、準環状ＬＤＰＣコード）に基づくコードにも適用され得る。この場合、各「リフト」ノード又は「リフト」エッジに対して使用される計算規則は同じであり得る（「リフト」ノード／エッジ内の全てのノード／エッジに対するグラフ及び計算ツリーの対称性による）。したがって、勾配の平均化はまた、「リフト」ノード／エッジのノード／エッジに関連つけられた全ての勾配にわたって実行され得る。これは、訓練を必要とするパラメータの数を低減し、訓練プロセスを加速する。
【０１１８】
パラメータの数及び問題の次元を更に低減するために、いくつかの追加的な制約がパラメータに適用され得る。例えば、一実施形態では、フォーシングが使用される。フォーシングのために使用され得る例示的な方程式は、方程式１６に示される。
【数１８】
2020202553.tif 000020
【０１１９】
方程式１６は、ビットノードからチェックノードへの計算に関連付けられたアルファパラメータに適用される制約を示す。例えば、所与のビットノードは、いくつかのチェックノードにメッセージを送信し得る。一実施形態では、アルファパラメータの値は、異なるチェックノードへのメッセージに対して異なり得る。方程式１６は、どのようにアルファの値が、（所与の反復ｊについて）所与のビットノードについてビットノードからチェックノードへのメッセージ計算の全てに対して同じとなるように強制され得るかを示す。アルファの値は、異なる反復（ｊ）に対して異なり得ることに留意されたい。フォーシング技法は、チェックノードからビットノードへの計算において、ベータなどの他のパラメータのために使用することができる。
【０１２０】
追加的に、０〜１の値に制限するように、いくつかの制約がパラメータに適用され得る。これは、訓練プロセスを安定化させ、速度を上げ得る。そのような制約による推論は、パラメータをメッセージ計算規則に適用される「減衰」係数として見ることができることである。これらの減衰係数は、例えば、メッセージ間の統計的依存性を補償し得る。メッセージが統計的に独立している場合（例えば、計算グラフ内にサイクルがない場合）、減衰の必要性はない（例えば、
【数１９】
2020202553.tif 000021
）。統計的依存性が強くなるにつれて（計算グラフ内の複数の短いサイクルの場合のように）、減衰は、メッセージが以前のメッセージと完全に相関する場合には、減衰を完了するまで（例えば
【数２０】
2020202553.tif 000022
）より強くなる（例えば、
【数２１】
2020202553.tif 000023
）。
【０１２１】
ノイズの多いコードワードの１つのバッチに対してプロセス７００を完了した後、プロセス７００が、次いで、ノイズの多いコードワードの次のバッチに対して使用されてもよく、この回はパラメータの新しい値を使用する。したがって、ノイズの多いコードワードの各バッチを用いて、パラメータは更に修正され得る。一実施形態では、この訓練プロセスは、ネットワークの出力（例えば、ラベル付き出力６０４）におけるソフトメトリックが飽和する（例えば、その周辺で変動する何らかの最大値に達する）まで継続する。
【０１２２】
図８Ａ〜図８Ｊは、図７のステップ７０６の一実施形態のバックワードパス中に計算され得る部分導関数の例である。これは、部分導関数が計算される順序が、ネットワークの出力６０４から入力までであり得るため、バックワードパスと呼ばれる。
【０１２３】
図８Ａは、事後ＬＬＲ（Ｑ）に関するラベル付き出力（Ｉ）の部分導関数についての例示的な方程式である。図８Ｂは、チェックノードからビットノードへのメッセージ計算に関する事後ＬＬＲ（Ｑ）の部分導関数についての例示的な方程式である。図８Ｃは、最終デコーダ推定（例えば、方程式１１）におけるパラメータ
【数２２】
2020202553.tif 000024
に関する事後ＬＬＲ（Ｑ）の部分導関数の例示的な方程式である。
【０１２４】
図８Ｄは、ビットノードからチェックノードへの計算に関する、チェックノードからビットノードへの計算の部分導関数についての例示的な方程式である。図８Ｅは、チェックノードからビットノードへの計算におけるパラメータ
【数２３】
2020202553.tif 000025
に関するチェックノードからビットノードへの計算の部分導関数についての例示的な方程式である。
【０１２５】
図８Ｆは、チェックノードからビットノードへの計算に関するビットノードからチェックノードへの計算の部分導関数についての例示的な方程式である。図８Ｇは、ビットノードからチェックノードへの計算におけるパラメータ
【数２４】
2020202553.tif 000026
に関するビットノードからチェックノードへの計算の部分導関数についての例示的な方程式である。
【０１２６】
図８Ｈ〜図８Ｊは、例えばパラメータ勾配についての方程式を示す。パラメータ勾配は、ラベル付き出力６０４がパラメータにおける無限小変化に関してどのように変化するかを示す。図８Ｈは、ビットノードからチェックノードへの計算（例えば、方程式９）において、パラメータ
【数２５】
2020202553.tif 000027
に関するラベル付き出力６０４の部分導関数についての例示的な方程式である。図８Ｊは、チェックノードからビットノードへの計算（例えば、方程式１０）におけるパラメータ
【数２６】
2020202553.tif 000028
に関するラベル付き出力６０４の部分導関数についての例示的な方程式である。図８Ｊは、最終デコーダ推定値（例えば、方程式１１）におけるパラメータ
【数２７】
2020202553.tif 000029
に関するラベル付き出力６０４の部分導関数についての例示的な方程式である。
【０１２７】
方程式９〜方程式１１のパラメータ化メッセージパッシング計算は、ほんの数例である。方程式１７は、メッセージ規則をチェックする変数に対する別の例示的なパラメータ化メッセージパッシング計算を示す。
【数２８】
2020202553.tif 000030
【０１２８】
このパラメトリックモデルでは、各チェック・変数メッセージ
【数２９】
2020202553.tif 000031
を乗算する係数は、固定された「減衰」係数ではない。それは、チェック・変数メッセージの大きさ
【数３０】
2020202553.tif 000032
の関数である。このように、メッセージの信頼性が高い又は低い場合に、より強い又は弱い減衰が適用され得る。別の変形では、チェック・変数メッセージの大きさ
【数３１】
2020202553.tif 000033
は、可変ノードに入る他のチェック・可変メッセージの大きさによって置き換えられ得る。図８Ｋ〜８Ｎは、方程式１６のメッセージ規則をチェックする変数に対するバックワードパスについての例示的な導関数表現を描画する。
【０１２９】
方程式１８は、パラメトリックメッセージ計算の別の例である。
【数３２】
2020202553.tif 000034
【０１３０】
方程式１８において、
【数３３】
2020202553.tif 000035
【０１３１】
方程式１８において、付随するメッセージに類似する場合、より高い減衰係数がメッセージに適用され得る。これは、メッセージ間のより強い統計的依存性を示し得ることに留意されたい。
【０１３２】
デコーダ２４４の一実施形態は、ネットワーク６００を実装するための回路を含む。回路は、フォワードパスとリバースパスの両方を実行する能力がある。デコーダ２４４は、計算を実行するためのプロセッサ（又は計算ユニット）及びメッセージ（又は計算の結果）を記憶するためのメモリを含み得る。
【０１３３】
図９は、パラメータ化反復メッセージパッシングデコーダ２４４のためのパラメータのオンライン学習のプロセス９００の一実施形態のフローチャートである。プロセス９００は、コールドデータに使用され得るが、コールドデータに限定されない。一部の実施形態では、学習パラメータは、クリーンコードワードに基づく。例えば、図６のネットワークでは、ラベル付き出力６０４は、クリーンコードワードと事後ＬＬＲとの間の相互情報に基づく。プロセス９００は、クリーンコードワードを学習するための１つの技術を示し、これは、パラメータ化反復メッセージパッシングデコーダ２４４のためのパラメータを学習するために、ラベル付け出力で使用することができる。
【０１３４】
一実施形態では、プロセス９００は、「コールドデータ」が読み出されるときに使用される。コールドデータは、本明細書では、一回だけ書き込まれるか、あるいは非常にまれに更新されるデータとして定義される。以下は、コールドデータを識別するいくつかの方法である。特定のデータの更新頻度が追跡され得る。更新頻度が閾値頻度よりも低い場合、データは、コールドデータである。別の代替案は、そのアプリケーションに従ってデータを識別することである。例えば、ソーシャルメディアコンテンツ（写真、ビデオ、ステータスなど）は、まれに更新されるであろう。したがって、所定のアプリケーションに関連付けられたデータは、コールドデータであると仮定され得る。別の代替案は、オペレーティングシステムブートシーケンスなどの、まれに更新されると知られている、データの事前定義された分類を有することである。別の例として、所定のメモリセクション又はパーティションは、コールドデータ又は一回だけ書き込まれ、複数回読み取られることがあるデータを記憶するために専用であり得る。
【０１３５】
コールドデータは、パラメータを特性により良く調整するために経時的に学習され得る所定の特性を有し得る。そのような特性の一例は、「ノイズリアリゼーション」である。ノイズリアリゼーションは、エラーベクトル内のパターンを指し得る。例えば、メモリセルのグループが一回プログラムされ、何回も読み戻される場合、同じメモリセルが一貫して同じエラーを有し得る。エラーベクトル内の特定のパターンは、プログラミングプロセスにおける失敗に起因し得る。例えば、いくつかのメモリセルは、オーバープログラム又はアンダープログラムされていることがある。このようなノイズリアリゼーションを学習することにより、デコーダ２４４はより良好に実行することができる。例えば、電力を節約することができ、復号待ち時間を低減することができ、エラー訂正をより正確に行うことができる。
【０１３６】
誤差ベクトルは、必ずしも経時的に一定ある必要はないことに留意されたい。例えば、読み出しディスターブによりエラーが生じる可能性がある。したがって、訓練は、経時的に変化するこのような条件について学習するためも使用することができる。このような訓練は、デコーダ２４４をノイズ統計（又はノイズ特性）に調整するために使用することができる。したがって、一実施形態では、デコーダは、経時的に変化する不揮発性メモリのノイズ特性に適応される。ノイズ統計は、ノイズリアリゼーションよりも一般的である。例えば、ノイズ統計は、エラーになりやすいビットのパーセントを示し得る。
【０１３７】
プロセス９００は、デコーダ２４４をホストトラフィック特性に適応させ得ることにも留意されたい。したがって、パラメータを学習することにより、デコーダが特定のホストトラフィック特性に対してより良く実行するのに役立つことができる。
【０１３８】
ステップ９０２は、コードワードに符号化され、不揮発性メモリに記憶されたデータにアクセスすることを含む。これは、コールドデータであってもよいが、コールドデータに限定されない。
【０１３９】
ステップ９０４は、パラメータ化反復メッセージパッシングデコーダ２２４使用してコードワードを復号することを含む。ステップ９０４では、パラメータ化反復メッセージパッシングデコーダ２２４は、比較的多数の反復で実行され、デコーダ結果が（必要に応じて）収束するのに役立ち得る。言い換えると、ステップ９０４の一実施形態の目標は、ノイズの多いコードワードの復号に成功する確率が高いことである。例えば、デコーダ２２４は、一例として、必要に応じて収束するために最大１０回の反復で実行することができる。代替的に、ステップ９０４では、パラメータ化反復メッセージパッシングデコーダ２２４は、より少数の反復で実行されてもよく、その意図は、デコーダ結果を必ずしも収束させる必要がないということである。例えば、デコーダ２２４は、一例として、最大４回、５回、又は６回の反復で実行することができる。
【０１４０】
ステップ９０６は、復号が成功したかどうかの決定である。コードワードの復号が成功した場合、ステップ９１０で、クリーンコードワードとして記憶される。ステップ９１２は、復号するより多くのコードワードが存在するかどうかの決定である。そうである場合、プロセスはステップ９０２に戻り、次のコードワードを読み出し、復号する。
【０１４１】
コードワードの復号に成功しない場合（ステップ９０６＝いいえ）、次いで、ステップ９０８で、非パラメータ化デコーダ２４５がコードワードを復号するために使用され得る。一実施形態では、非パラメータ化デコーダ２４５は、パラメータがデフォルト値に設定されたパラメータ化デコーダ２４４であり得ることに留意されたい。説明のために、非パラメータ化デコーダ２４５は、コードワードの復号に成功すると仮定される。復号に成功した後、ステップ９１０で、クリーンコードワードが記憶される。
【０１４２】
全てのコードワードが処理されると（ステップ９１２＝いいえ）、プロセスはステップ９１４に進む。ステップ９１４では、ステップ３０２のためのノイズの多いコードワードのバッチとしてメモリからのデータを用いてプロセス３００が実行される。このデータは、ハードビットのみか、ハードビット及びソフトビットを使用して読み出され得る。いずれの方法でも、事前ＬＬＲをビット単位で読み出されたものに対して決定し得る。ステップ９１０で記憶されたクリーンコードワードは、ラベル付き出力６０４で使用され得る。したがって、プロセス３００は、１つ以上のメッセージパッシング計算のための１つ以上のパラメータを学習するフィールドにおいて使用され得る。デコーダ２４４が、これらに限定されないが、コールドデータのノイズリアリゼーション、（経時的に変化し得る）不揮発性メモリのノイズ統計（又は特性）、及び／又はホストトラフィック特性を含むファクタに適応されているときは、ステップ９１４中であると留意されたい。
【０１４３】
（ステップ９１４で）プロセス３００を実行するときに、パラメータ化反復メッセージパッシングデコーダ２２４における反復回数は、ステップ９０４よりも少なくてもよい（ステップ９０４で、より多くの反復回数でパラメータ化されたデコーダ２２４を実行するオプションが使用されたと仮定する）。訓練の目標は必ずしもコードワードを常に復号に成功することが必要であるというわけではないことに留意されたい。むしろ、訓練プロセスの目標は、デコーダ２４４を訓練してより速く収束させることである。これが達成され得る１つの方法は、比較的少数の反復を使用することである。例えば、訓練中に、デコーダ２４４は、４回、５回、又は６回の反復で実行され得る。また、事後ＬＬＲの値は、典型的には、デコーダ２４４の追加の反復で増加し、何らかの最大値で飽和してもよく、結果として、計算勾配が計算されることを許容しない（すなわち、所定のパラメータを変更することは、既に飽和しているため事後ＬＬＲ出力を変化させず、したがって、特定のパラメータについての勾配は決定することができない）。したがって、より少ない反復を使用した訓練は、より低い事後ＬＬＲをもたらすことがあり、これは、異なるパラメータについての勾配を計算するのに有用とすることができる。
【０１４４】
図１０は、パラメータ化反復メッセージデコーダ２４４のためのパラメータを管理するプロセス１０００の一実施形態のフローチャートである。ステップ１００２は、パラメータを記憶デバイス領域１２６ａからＲＡＭ（例えば、１２２ｂ、図１）にロードすることを含む。ステップ１００２は、メモリシステム１００の初期化時に実行され得る。
【０１４５】
ステップ１００４は、パラメータ化反復メッセージデコーダ２４４においてＲＡＭに記憶されたパラメータを使用することを含む。
【０１４６】
ステップ１００６は、パラメータを更新し、更新されたパラメータをＲＡＭに記憶することを含む。
【０１４７】
ステップ１００８は、記憶デバイス領域１２６ａに更新されたパラメータを記憶するかどうかを決定することを含む。更新されたパラメータは、パラメータに対する各「Ｔ」回更新後に記憶されてもよく、「Ｔ」は、ゼロよりも大きい任意の整数であり得る。更新されたパラメータは、メモリシステム１００のシャットダウンについて何らかの警告が与えられる場合にも記憶され得る。
【０１４８】
ステップ１０１０は、更新されたパラメータを記憶デバイス領域１２６ａに記憶することを含む。次いで、プロセスは、更新されたパラメータが記憶デバイス領域１２６ａに記憶されるかどうかにかかわらずステップ１００４に戻る。
【０１４９】
図１１は、パラメータ化デコーダ２４４を有するメモリシステム１００の一実施形態を描画する。パラメータ化デコーダ２４４は、一実施形態では、デコーダ２４４によって使用されるコードに対する２部グラフを記憶するグラフ構造ＲＯＭ１１０２を有する。パラメータメモリ１１１０は、計算に使用されるパラメータを記憶する。一実施形態では、グラフのエッジごと及び反復ごとにパラメータが存在する。しかしながら、グラフのエッジごと及び反復ごとに固有のパラメータを有する必要はない。一実施形態では、同じパラメータが各反復に対して使用される。一実施形態では、同じパラメータが、少なくとも１回の反復で、所定のノードから渡された全てのメッセージに対して使用される。
【０１５０】
メッセージパッシングコンピュータ１１１２は、方程式９〜方程式１１及び方程式１７の例などのパラメータを有するメッセージを計算するように構成され得る。勾配コンピュータ１１１４は、図８Ａ〜図８Ｊなどの部分導関数及び勾配を計算するように構成され得る。パラメータ学習器１１１６は、方程式１３〜方程式１５の例などのパラメータの値を計算するように構成され得る。パラメータ学習器１１１６は、学習されたパラメータをパラメータメモリ１１１０に記憶するようにも構成され得る。
【０１５１】
メッセージパッシングコンピュータ１１１２、勾配コンピュータ１１１４、及びパラメータ学習器１１１６は、各々様々な計算を実行するように構成されている計算ユニット１１０４を含む。一部の計算ユニットは、所定の種類の計算を実行するために専用であり得る。例えば、計算ユニット１１０４は、本明細書に説明される方程式のうちの１つを実行するハードウェアであり得る。したがって、メッセージパッシングコンピュータ１１１２における計算ユニット１１０４は、方程式９〜方程式１１及び方程式１７の例などのメッセージパッシング計算を実行し得る。勾配コンピュータ１１１４における計算ユニット１１０４は、図８Ａ〜図８Ｊの例などの部分導関数及び勾配を計算するなどの他の計算を実行し得る。パラメータ学習器における計算ユニット１１０４は、方程式１２〜方程式１５などの方程式を実行し得る。計算ユニット１１０４は、パラメータに基づいて設定可能であり得ることに留意されたい。計算ユニット１１０４は、一実施形態では、より高速なスループットのためにハードウェアに実装される。しかしながら、計算ユニット１１０４は、ソフトウェア、又はハードウェアとソフトウェアとの組み合わせとして実装することができる。メッセージメモリ１１０６は、計算の結果を記憶するために使用され得る。
【０１５２】
ルータ１１０８は、一実施形態では、データパスを制御するように構成されている。ルータ１１０８は、グラフ構造に基づいてメッセージを計算ユニット１１０４にルーティングするために使用され得る。ルータ１１０８は、計算ユニット１１０４に適切なパラメータを提供するようにも構成され得る。したがって、ルータ１１０８は、どの計算がノード間で実行されるか、計算の順序等を制御するために使用され得る。
【０１５３】
クリーンコードワードストレージ１１２０は、コードワードのクリーンバージョンを記憶するために使用される。一実施形態では、コードワードのクリーンバージョンは、プロセス９００のステップ９１０で提供される。代わりに、クリーンバージョンはオフラインで提供することができる。一実施形態では、ラベル付き出力として使用するために、デコーダ２４４によって、クリーンコードワードがアクセスされる。
【０１５４】
ノイズの多いコードワード生成器１１２２は、コードワードのノイズの多いバージョンを作成し、デコーダ２４４にノイズの多いコードワードを提供するように構成されている。一実施形態では、ノイズの多いコードワード生成器１１２２は、ノイズをクリーンコードワードに追加して、ノイズの多いコードワードを生成する。一実施形態では、ノイズの多いコードワード作成器１１２２は、不揮発性メモリ１２６からデータを読み出し、それに基づいて初期ビット推定値（例えば、ＬＬＲ）を生成する。これらは、事前ＬＬＲと呼ばれることがあり、ノイズの多いコードワードとしてデコーダ２４４に提供され得る。
【０１５５】
システム１００は、データを符号化し、不揮発性メモリ１２６に符号化データを記憶するエンコーダ（図１１には図示せず）も有し得る。このデータは、ＲＯＭ１１０２内のグラフ構造の２部グラフのコードに従って符号化され得る。デコーダ２４４は、一実施形態では、学習されたパラメータを使用して、不揮発性メモリ１２６からこのデータを復号する。なお、メッセージパッシングコンピュータ１１１２における計算ユニット１１０４は、パラメータを学習するとき、及び不揮発性メモリ１２６からデータを復号するときの両方で使用され得ることに留意されたい。したがって、メッセージパッシングコンピュータ１１１２における計算ユニット１１０４が構成可能なハードウェアである場合、システム１００は、この構成可能なハードウェアの効率的な使用を行う。
【０１５６】
多くのメッセージがメモリ１１０６から読み出される必要があり得ることに留意されたい。しかしながら、一度に１つのメッセージをメモリ１１０６から読み出すことのみが可能であり得る。したがって、メモリアクセスは、スループットを潜在的に遅くすることができる。一部の実施形態では、スループットの増大に役立てるために、リフトグラフが使用される。リフトグラフを使用すると、訓練プロセスの速度を上げること、及びより少ないパラメータを記憶することの両方に役立つことができる。一部の実施形態では、同じサイクル構造を見ているリフトエッジのセットをもたらすリフトグラフには対称性が存在する。一実施形態では、リフトエッジのセットなどは、同じパラメータ値を有する。したがって、より少ないパラメータを計算し、記憶する必要がある。
【０１５７】
図１２は、一実施形態に従って使用することができる不揮発性ストレージのデータを符号化及び復号するためのシステムを描画する。エラー訂正制御は、不揮発性メモリアレイ内の誤った又は破損したデータの読み出しを検出及び訂正するために採用される。一般的に言えば、いくつかの追加のＥＣＣ又はパリティビットは、入力データから計算され、符号化スキームに従ってメモリアレイに記憶される。読み出すときに、入力データ及びＥＣＣビットが両方とも読み出され、デコーダは両方を使用して、エラーが存在するかどうかを検出し、場合によっては、どのビットにエラーが発生するかを検出する。
【０１５８】
図２３のエラー訂正制御システムは、異なるシステム及びアーキテクチャを使用することができるが、一実施形態ではコントローラ１４４の一部として実装することができる。図２３のシステムは、エンコーダ１２７２、メモリアレイ４７４、ＬＬＲ（対数尤度比）テーブル１２７６及びデコーダ１２７８を含む。エンコーダ１２７２はユーザデータを受信し、これは情報ビットと呼ばれることもあり、メモリアレイ１２７４に記憶される。情報ビットは、行列ｉ＝［１  ０］によって表される。エンコーダ１２０２は、パリティビットが情報ビットに追加されて、行列又はコードワードｖ＝［１  ０  １  ０］によって表されるデータを提供するエラー訂正符号化プロセスを実装し、２つのパリティビットがデータビットに追加されている。より複雑な方法で入力データを出力データにマッピングする、下記に論じるような他の技術を使用することができる。Ｇａｌｌａｇｅｒコードとも呼ばれる低密度パリティチェック（ＬＤＰＣ）コードを使用することができる。実際には、このようなコードは、典型的には、多数の記憶要素にわたって符号化された複数のページに適用される。次いで、データビットは論理ページにマッピングされ、不揮発性記憶要素を、ｖに対応するプログラミング状態、例えば、Ｘ＝１２にプログラミングすることによって不揮発性ストレージ１２７４に記憶することができ、４ビットデータ行列ｖにより、１６のプログラミング状態を使用することができる。一般に、パリティビットは、各個々のセルには使用されない。
【０１５９】
１つの可能な実装では、エンコーダ１２７２で実装される符号化に対応するエラー訂正復号を実装する反復確率復号プロセスが使用される。反復確率復号は、コードワード内の各ビットに初期確率メトリックを割り当てることによって、コードワードを復号することを試みる。確率メトリックは、各ビットの信頼性、すなわち、ビットがどの程度エラーになっていないかを示す。１つのアプローチでは、確率メトリックは、ＬＬＲテーブル１２７６から得られる対数尤度比ＬＬＲである。ＬＬＲ値は、記憶要素から読み出された様々なバイナリビットの値が既知である信頼性の尺度である。
【０１６０】
ビットに対するＬＬＲは、
【数３４】
2020202553.tif 000036
で与えられ、Ｐ（ｖ＝０｜Ｙ）は、読み出し状態がＹであるという条件でビットが０である確率であり、Ｐ（ｖ＝１｜Ｙ）は、読み出し状態がＹであるという条件でビットが１である確率である。したがって、ＬＬＲ＞０はビットが１よりも０である可能性が高いことを示し、ＬＬＲ＜０はビットが０よりも１である可能性が高いことを示し、エラー訂正コードの１つ以上のパリティチェックを満たす。更に、より大きい大きさは、より高い確率又は信頼性を示す。したがって、ＬＬＲ＝６３を有するビットは、ＬＬＲ＝５を有するビットよりも０である可能性が高く、ＬＬＲ＝−６３を有するビットは、ＬＬＲ＝−５を有するビットよりも１である可能性が高い。ＬＬＲ＝０は、ビットが０又は１である可能性が同じであることを示す。
【０１６１】
ＬＬＲ値は、コードワードｙ１内の４ビット位置の各々に対して提供することができる。例えば、４．５、５．２、−５．９及び６．６のＬＬＲは、それぞれｙ１のビット０、０、１及び０に割り当てられる。更に、ＬＬＲテーブルは、ビット値が異なるコードワードにおいて一貫しているときに、より大きい大きさのＬＬＲが使用されるように、複数の読み出し結果を説明することができる。
【０１６２】
デコーダ１２７８は、コードワードｙ１及びＬＬＲを受信する。デコーダ１２７８は、エラー符号化プロセスのパリティチェックが満たされたかどうかを決定する連続反復で反復する。全てのパリティチェックが満たされた場合、復号プロセスは収束し、コードワードはエラー訂正されている。１つ以上のパリティチェックが満たされていない場合、デコーダは、パリティチェックと矛盾するビットのうちの１つ以上のＬＬＲを調整し、次いで、パリティチェック又は次のチェックをプロセスにおいて再適用して、それが満たされたかどうかを決定する。例えば、ＬＬＲの大きさ及び／又は極性を調整することができる。問題のパリティチェックがまだ満たされていない場合、ＬＬＲは、別の反復において再び調整することができる。ＬＬＲを調整することにより、全てではないが一部の場合に、ビットを（例えば、０から１に、あるいは１から０に）フリップすることができる。一実施形態では、該当する場合には、問題のパリティチェックが満たされると、別のパリティチェックがコードワードに適用される。他の場合には、プロセスは次のパリティチェックに移り、その後に失敗したチェックにループバックする。プロセスは、全てのパリティチェックを満たすことを試みる。したがって、ｙ１の復号プロセスは、パリティビットｖ及び復号された情報ビットｉを含む復号情報を取得して完了する。
【０１６３】
一実施形態では、エンコーダ１２７２は、不規則な低密度パリティックチェックコードを使用してデータを符号化するように構成された、不規則な低密度パリチェックエンコーダである。不規則な低密度パリティチェックエンコーダは、一実施形態において、不揮発性メモリ（例えば、ＮＡＮＤ、ＮＯＲ、ＲｅＲＡＭ、相変化メモリ（ＰＣＭ））に記憶されるデータを符号化するために使用される。一実施形態では、デコーダ１２７８は、不規則な低密度パリティチェックエンコーダ１２７２を用いて符号化した後に記憶されたデータを復号するように構成された、不規則な低密度パリティチェックデコーダである。不規則な低密度パリティチェックエンコーダ１２７２は、メモリシステム１００のコントローラ１２２におけるＥＣＣ２２４において使用され得る。不規則な低密度パリティチェックデコーダ１２７８は、メモリシステム１００のコントローラ１２２におけるＥＣＣ２２４において使用され得る。
不規則な低密度パリティチェックコード
【０１６４】
ＬＤＰＣ（低密度パリティチェック）コードは、反復復号下でほぼシャノン限界性能を呈する最新のエラー訂正コードである。ＬＤＰＣコードは、そのパリティチェック行列が変動する列重み及び／又は変動する行重みを有する場合、不規則になると言われる。図１３は、規則的なコードを有するＬＤＰＣパリティチェック行列を示す。図１４は、不規則なコードを有するＬＤＰＣパリティチェック行列を示す。
【０１６５】
不規則なＬＤＰＣコードは、エラー訂正性能に関して規則的なＬＤＰＣコードよりも性能が優れているが、これらはいくつかの欠点を有する。すなわち、設計がより複雑であり、エラーフロアを発達させる傾向があり、デコーダの実装を複雑にする。
制約された規則コード
【０１６６】
完全に最適化された不規則なコード（制約なしで）は、通常、改善された修正能力を可能にする低重み列の大部分を含む。しかしながら、低列重みは、いくつかの実用的な問題をもたらす。具体的には、列重み２及び３は、エラーフロアなしコードを生成することがより難しくなる。別の問題は、低み列がビットフリップデコーダで十分に機能しないことである。ビットフリップデコーダは、多数決論理に基づく準最適デコーダであるため、単純なフリップ決定に対して各列に限られた量の情報が存在するため、低重み列で十分に機能しない。ビットフリップデコーダの使用は、通常動作ビットエラー率（ＢＥＲ）の大きさのオーダーで電力効率を改善することを可能にし、したがって、最も多くの製品において必須である。したがって、記憶アプリケーションに必要とされる低エラーフロアをサポートし、低電力ビットフリップ復号モードをサポートするために、本明細書では、制約された不規則なコードをどのように設計するかを説明する。最小列重みが４であることを制限下で、列重みスペクトルを最適化する方法についても説明する。
スペクトル最適化における検討及びトレードオフ
【０１６７】
所与の長さ及び速度についてスペクトルを最適化するときに、以下のメトリックを考慮する。すなわち、１）デコーダの種類、２）チャネルの種類、及び３）複雑性である。
【０１６８】
デコーダの種類。本明細書に記載の解決策では、２つの種類のデコーダを提案する。単純な準最適ビット反転デコーダは、低媒体ＢＥＲ（ビットエラー率）に使用されることがあり、これはデコーダのスループット及び電力を左右する。ＢＰ（ｂｅｌｉｅｆ−ｐｒｏｐｏｇａｔｉｏｎ、ビリーフプロポゲーション）アルゴリズムに基づくソフトデコーダは、高いＢＥＲを有するまれなケースに使用され得る。スペクトルを最適化するとき、いずれかのデコーダについて最適化することができる。
【０１６９】
チャネルの種類。メモリ媒体は、２つのチャネルモデルによって特徴付けることができる。すなわち、１）ハードビットで復号するために使用されるバイナリ対称チャネル（Binary Symmetric Channel、ＢＳＣ）、及び２）ソフトビットでの復号シナリオと類似する、適合性白色ガウス雑音（Adaptice White Gaussian Noise、ＡＷＧＮ）チャネルである。
【０１７０】
複雑さ。コードの複雑さは、コードマトリックス内の非ゼロ巡回の数で測定され得る。非ゼロのエントリが多いほど、各反復において多くの動作が実行に必要とされ、デコーダの電力効率及びコストに影響を及ぼす。
【０１７１】
いくつかの別個の最適化ターゲットが存在するため、大域的な解決策は存在しない。ＢＳＣについての最適なコードは、ＡＷＧＮにとって必ずしも最適ではない。ビットフリップデコーダ（スループット）について良好なコードは、高い複雑性を有することがある。したがって、良好な「全般にわたる」スペクトルを見つけることを試みるか、あるいは特定の製品ライン要件に従って最適化ターゲットを調整することができる。デコーダアーキテクチャが汎用的であるため、複数のＬＤＰＣコードをサポートすることができ、それらを異なる要件に対してオンザフライで変更することを可能にし得る。例えば、１つの選択肢は、新しいデバイス上での電力効率に焦点を当て、寿命末期の改善された補正能力に焦点を合わせることである。
不規則なコード設計のためのツール
【０１７２】
一態様では、スペクトル設計ツールは、不規則なコードサポートのために開発された。別の態様では、グラフ生成ツール不規則なコードサポートのために開発された。
【０１７３】
スペクトル設計ツールは、異なるデコーダ及びチャネルでの所与の程度スペクトルの性能を推定するように設計されたツールのセットである。スペクトル設計ツールは、最適な閾値についてスキャン及び最適化するために使用される。以下のスペクトル設計ツールが本明細書に開示される。
【０１７４】
スペクトル設計ツールの一実施形態は、０−ＳＢのためのビットフリップデコーダである。ビット反転デコーダ実装の密度エボリューション分析。
【０１７５】
スペクトル設計ツールの別の実施形態は、ＢＳＣ上のＢＰデコーダである。ツールは、シリアルスケジュール固定点デコーダ実装下で、所与の不規則なＬＤＰＣプロトコルの密度エボリューション分析に基づく。
【０１７６】
スペクトル設計ツールの別の実施形態は、ＡＷＧＮチャネル上のＢＰデコーダである。このツールは、外部情報転送（ＥＸＩＴ）分析に基づき、これは、線形制約のセットとしての復号の成功のための条件を説明し、線形プログラミング最適化装置を使用して効率的なスペクトル設計を可能にする。
【０１７７】
所与のスペクトルに対するＬＤＰＣグラフを構築するグラフ生成ツールの一実施形態。このグラフ生成ツールは、誤差最小化プログレッシングエッジ成長（Error Minimization Progressive Edge Growth、ＥＭＰＥＧ）アルゴリズムの修正版に基づく。ＥＭＰＥＧアルゴリズムは、エラーフロアにつながり得る有害な構成を回避しながら、エッジごとにグラフエッジを生成する。
要約及び結果
【０１７８】
不規則なＬＤＰＣコードの使用は、設計において多くの自由度を導入する。これは、記憶製品の様々な測定基準においてかなりのゲインを提供する。図１５、図１６、及び図１７は、異なる基準に従って最適化された規則的なＬＤＰＣコードと不規則なＬＤＰＣコードの性能の比較を示す。予想されるように、各メトリックについて最適化されたＬＤＰＣコードは、基準において最適であり、他の基準においては準最適である。製品の要件に基づいて、異なるメトリック間の最適なトレードオフを有するＬＤＰＣコードを要求することに基づいて、設計することができる。図１５〜図１７は、いくつかのトレードオフを示す。
【０１７９】
図１５は、いくつかのＬＤＰＣコードについてのブロックエラー率（ＢＬＥＲ）対ビットエラー率（ＢＥＲ）のグラフを示す。グラフは、規則的なＬＤＰＣコードの曲線１５０２、不規則なＬＤＰＣコード（２−ＳＢ）の曲線１５０４、不規則なＬＤＰＣコード（０−ＳＢ）の曲線１５０６、及び不規則なＬＤＰＣコード（ＢＦ）の曲線１５０８を示す。所与のＢＥＲ（例えば、１．６５％）では、不規則なＬＤＰＣコード（２−ＳＢ）についての曲線１５０４は、最も低いＢＬＥＲを有する。
【０１８０】
図１６は、いくつかのＬＤＰＣコードについてのブロックエラー率（ＢＬＥＲ）対ビットエラー率（ＢＥＲ）の別のグラフを示す。グラフは、規則的なＬＤＰＣコードの曲線１６０２、不規則なＬＤＰＣコード（２−ＳＢ）の曲線１６０４、不規則なＬＤＰＣコード（０−ＳＢ）の曲線１６０６、及び不規則なＬＤＰＣコード（ＢＦ）の曲線１６０８を示す。所与のＢＥＲ（例えば、０．８％）では、不規則なＬＤＰＣコード（０−ＳＢ）についての曲線１６０６は、最も低いＢＬＥＲを有する。
【０１８１】
図１７は、いくつかのＬＤＰＣコードについてのスループット対ビットエラー率（ＢＥＲ）のグラフを示す。グラフは、規則的なＬＤＰＣコードの曲線１７０２、不規則なＬＤＰＣコード（２−ＳＢ）の曲線１７０４、不規則なＬＤＰＣコード（０−ＳＢ）の曲線１７０６、及び不規則なＬＤＰＣコード（ＢＦ）の曲線１７０８を示す。不規則なＬＤＰＣコードの３つ全ては、所与のＢＥＲに対してより大きなスループットを有する。この例では、所与のＢＥＲ（例えば、０．４５％）では、曲線１７０８は、不規則なＬＤＰＣコード（ＢＦ）が最も高いスループットを有することを示す。
不規則なコードスキームの適合的使用
【０１８２】
一部の実施形態において、ＥＣＣエンジン２２４は、以下により詳細に説明する特定のシステムレベルトリガ又はポリシーに従って、複数のエラー訂正コードのうちの１つを選択する。一部の実施形態では、各エラー訂正コードは、異なるターゲットについて最適化される。
【０１８３】
エラー訂正コードは、電力、信頼性、及び性能などの複数のドメインのうちの１つをターゲットにする。例えば、通常モード（例えば、通常の温度及び作動条件）では、ＥＣＣエンジン２２４は、性能（例えば、スループット）を最適化する性能指向エラー訂正コードを選択し得る。極端モード（例えば、高いデバイス温度又は臨界データ）では、ＥＣＣエンジン２２４は、信頼性を最適化する訂正能力指向エラー訂正コードを選択し得る。低電力モードでは、ＥＣＣエンジン２２４は、電力を最適化する電流消費指向エラー訂正コードを選択し得る。選択されたエラー訂正コードにかかわらず、ＥＣＣエンジン２２４は、同じデータの符号化及び復号中に、同じエラー訂正コーディングスキームを使用する。
【０１８４】
本明細書で説明されるエラー訂正コードを選択するための実施形態は、コードレート（例えば、コーディングスキームで使用されるパリティビットの量）を変更することを目的とする、調整可能なエラー訂正コードスキームとは異なる。このようなスキームは、フラッシュ遷移層（flash transition layer、ＦＴＬ）の複雑性に大きな影響を及ぼすため、実装することは困難である。代わりに、本明細書で説明される実施形態では、パリティ量は、全てのエラー訂正コードに対して同一であり、それらの実装を大幅に簡素化する。加えて、本明細書で説明される実施形態は、復号動作中にエラー訂正コードの自動検出のための方法を含み、（以下により詳細に説明されるように）実装を更に簡素化する。
【０１８５】
上述のように、例示的なエラー訂正コードは、不規則なＬＤＰＣコードである。ＬＤＰＣコードは、そのパリティックチェック行列が変動する列重み及び／又は変動する行重みを有する場合、不規則である。所与の長さ及びレートのスペクトルを最適化するとき、以下のメトリックを考慮する。すなわち、１）デコーダの種類、２）チャネルの種類、及び３）複雑性である。
【０１８６】
いくつかの別個の最適化ターゲットが存在するため、大域的な解決策は存在しない。すなわち、ＢＳＣに対して最適なコードはＡＷＧＮに対して最適ではなく、ビットフリップデコーダ（高スループット）に対して良好なコードは、高い複雑性を有し得る。したがって、記憶コントローラは、良好な「全般にわたる」スペクトルを使用することができるか、あるいは特定の製品ライン要件に従って最適化ターゲットを調整することができる。
【０１８７】
図１８は、ＬＤＰＣコードに対する最適化ターゲットを示すグラフである。規則的なＬＤＰＣコード１８０２は、０−ＳＢ及び２−ＳＢ補正能力に関して等しく最適化された、良好な全般にわたるスペクトルを有する。不規則なＬＤＰＣコード１８０４−１は、０−ＳＢ補正能力のために最適化され、不規則なＬＤＰＣコード１８０４−２は、２−ＳＢ補正能力のために最適化される。
【０１８８】
図１９は、記憶デバイスシステムの記憶媒体内の１つ以上のメモリセルに対する書き込み動作中にデータを符号化する方法１９００のフローチャートを示し、具体的には、ホストデバイスから受信した書き込みコマンドに応答する。方法１９００は、典型的には、コントローラ１２２（又はＥＥＣエンジン２２４及び／又はエンコーダ２５６）によって実行されるが、代替的に、記憶デバイスシステムが埋め込まれたコンピュータシステムによって実行されてもよい。
【０１８９】
コントローラは、コンピュータシステム（代替的に、本明細書ではホスト又はホストシステムと呼ばれる）から書き込みコマンドを受信する（１９０２）。書き込みコマンドは、論理アドレス又は物理アドレスを指定することなどによって、記憶媒体（例えば、不揮発性メモリ１０８）に書き込まれるデータを指定する。一部の実施形態では、コントローラは、書き込みコマンドに応答して、符号化されたデータを生成するように、指定されたデータを符号化するプロセスを制御する。符号化スキームの少なくとも一部は、以下でより詳細に論じられる、エラー訂正コーディングスキームの選択を含む。
【０１９０】
コントローラは、記憶デバイスシステムの作動モード、及び／又は書き込まれるデータのデータタイプを決定する（１９０４）。作動モードの例としては、とりわけ、通常モード、極端モード、及び低電力消費モードが含まれ得る。作動モードの例は、以下により詳細に説明される。
【０１９１】
コントローラは、作動モード、デバイス固有基準、及び／又はデータタイプに基づいてコーディングスキームを選択する（１９０６）。一部の実施形態では、コントローラは、データ記憶システムの１つ以上の条件及び／又は書き込まれるデータのデータ特性基準を検出することであって、１つ以上の条件は、環境条件、データ記憶システムのライフサイクルステージ、指定されたデータのデータタイプ、データ書き込みコマンドの受信に近接する期間中のプログラミングスループット、及び書き込まれるデータのエントロピーレベルのうちの少なくとも１つを含む、検出することによって、かつデータ記憶システムの検出された１つ以上の条件に基づいて、不規則なＬＤＰＣ符号化スキームを選択することによって、エンコーダに利用可能な、複数の利用可能な不規則ＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択し得る。異なる基準の各々は、全体をとおしてより詳細に説明される。
【０１９２】
コントローラは、選択されたコーディングスキームを使用して書き込まれるデータを符号化する（１９０８）。
【０１９３】
エンコードが完了すると、書き込み動作は完了する（１９１２）。
【０１９４】
一部の実施形態では、決定（１９０４）は、書き込みコマンドを受信した記憶デバイスシステムに応答している（１９０２）。代替的に、決定（１９０４）は、書き込みコマンドを受信する記憶デバイスシステムとは独立しており、記憶装置システムが書き込みコマンドを受信する時間（１９０２）までに、コントローラは既に作動モード及び／又はデータタイプを決定している（１９０４）。別の代替として、決定（１９０４）及び選択（１９０６）は両方とも、書き込みコマンドを受信する記憶デバイスシステムとは独立しており、記憶デバイスシステムが書き込みコマンドを受信する時間（１９０２）までに、コントローラは既に作動モード及び／又はデータタイプを決定しており（１９０４）、かつ既にコーディングスキームを選択している（１９０６）。
【０１９５】
一部の実施形態では、記憶装置システムのライフサイクル中に、記憶デバイスシステムは、通常の動作モード（例えば、通常の温度、典型的な作動条件）において時間の大部分で作動している。これらの条件でプログラムされたデータに対して、コントローラは、性能のために最適化された不規則なＬＤＰＣコードスキームなど、性能に指向した（例えば、高スループット）エラー訂正コードを選択し得る。
【０１９６】
一部の実施形態では、コントローラが極端な作動モード（その例を以下に説明する）を検出すると、コントローラは、性能及び電力消費よりもデータ保護を優先する、信頼性のために最適化された（すなわち、高い訂正能力）不規則なＬＤＰＣコードスキームなど、訂正能力指向エラー訂正コードスキームに切り替える。このようなスイッチは、外部トリガ及び内部トリガのいずれか、又は既定のデータ使用ポリシーに基づき得る。追加的又は代替的に、コントローラは、そのような能力を必要とするデータの特定の重要な部分に対して、修正能力指向エラー訂正コードスキームを選択し得る。
【０１９７】
一部の実施形態では、コントローラは、環境条件（例えば、記憶デバイスシステム温度又は周囲温度が、追加の低温又は追加の高温の温度領域に到達する）に基づいてシステム作動モードを決定する。具体的には、記憶システムは環境条件を検出することであって、環境条件は、データ記憶デバイスシステムの温度又は周囲温度を含む、検出することと、温度が高温閾値より高い（又はそれ以上）か、あるいは低温閾値より低い（又はそれ以下）かを決定する（例えば、温度が閾値を超えるかどうかを決定する）こととを行う。コントローラは、温度が閾値を超える（すなわち、高温又は低温の温度領域）という決定に従って、信頼性のために最適化された不規則なＬＤＰＣコーディングスキームを選択し、温度が閾値を超えない（すなわち、通常の温度領域）という決定に従って、性能のために最適化された不規則なＬＤＰＣコーディングスキームを選択する。
【０１９８】
一部の実施形態では、コントローラは、耐久性の観点から、記憶システムのライフサイクルステージ（例えば、プログラミングサイクル数）に基づいてシステム作動モードを決定する。具体的には、記憶システムは、データ記憶システムによって行われる、あるいは記憶媒体１３１の選択可能な部分によって行われるプログラミングサイクルのカウントを保持し（例えば、累積数を測定する）、カウントが閾値より大きい（又はそれ以上）かどうかを決定する（例えば、カウントが閾値を超えるかどうかを決定する）。コントローラは、カウントが閾値を超える（すなわち、寿命末期）という決定に従って、信頼性のために最適化された不規則なＬＤＰＣコーディングスキームを選択し、カウントが閾値を超えない（すなわち、寿命初期又は寿命中期）という決定に従って、性能に最適化された不規則なＬＤＰＣコーディングスキームを選択する。
【０１９９】
一部の実施形態では、コントローラは、書き込まれるデータのデータタイプを決定し、決定されたデータタイプに従って符号化スキームを選択する。例えば、はんだ付け作業の前に書き込まれる前に予めロードされたコンテンツデータ、重要なブートデータ又は管理システムデータ、ホストブートデータ又はホストオペレーティングシステムデータ、変数データ、ＴＬＣデータ、コールドデータ部分、又は高エントロピーデータ（例えば、閾値エントロピーレベルを超える）として分類されるデータに対して、コントローラは、信頼性のために最適化された不規則なＬＤＰＣ符号化スキームを選択する。別の例として、非臨界データ、静的データ、ＴＬＣデータ保護のためのＸＯＲスナップショットデータ、ＳＬＣデータ、ホットデータ部分、又は低エントロピーデータ（例えば、閾値エントロピーレベルを超えない）として分類されるデータに対して、コントローラは、性能に最適化された不規則なＬＤＰＣコーディングスキームを選択する。
【０２００】
一部の実施形態では、コントローラは、データ書き込みコマンドの受信に近接する期間中のプログラミングスループットの１つ以上の測定値に基づいてシステム作動モードを決定する。具体的には、記憶システムは、書き込み動作を実行している間にプログラミングスループットを測定し、スループットが閾値より大きい（又はそれ以上）かどうかを決定する（例えば、スループットが閾値を超えるかどうかを決定する）。コントローラは、測定されたプログラミングスループットが閾値を超える（例えば、逐次的にプログラムされるデータ及び／又は頻繁に再書き込みされるデータ部分の場合）という決定に従って、低電力消費のために最適化された不規則なＬＤＰＣコーディングスキームを選択し、測定されたプログラミングスループットが閾値を超えない（例えば、ランダムに書き込まれるデータ及び／又は静的データの場合）という決定に従って、性能のために最適化された不規則なＬＤＰＣコーディングスキームを選択する。
復号中のコーディングスキームの自動発見
【０２０１】
図２０は、データ記憶デバイスシステムの記憶媒体内の１つ以上のメモリセルに対する読み出し動作中にデータを復号する方法２０００のフローチャートを示し、具体的には、ホストデバイスから受信した読み出しコマンドに応答する。方法２０００は、典型的には、コントローラ１２２（又はＥＥＣエンジン２２４及び／又はデコーダ）によって実行されるが、代替的に、記憶デバイスシステムが埋め込まれたコンピュータシステムによって実行されてもよい。
【０２０２】
記憶デバイスシステムは、コンピュータシステム（代替的に、本明細書ではホスト又はホストシステムと呼ばれる）から読み出しコマンドを受信する（２００２）。読み出しコマンドは、論理アドレス又は物理アドレスを指定することなどによって、記憶媒体から読み出されるデータを指定する。一部の実施形態では、コントローラは、読み出しコマンドに応答して、復号されたデータを生成するように、指定されたデータを復号するプロセスを制御する。復号スキームの少なくとも一部は、以下でより詳細に論じられるエラー訂正コーディングスキームの選択を含む。
【０２０３】
コントローラは、復号のための候補エラー訂正コーディングスキームを選択する（２００４）。指定されたデータの復号に成功するために、デコーダは、データを符号化するために（例えば、方法１９００において）使用されたエンコーダと同じエラー訂正コーディングスキームを使用しなければならない。一部の実施形態では、デコーダ及び／又はプロセッサは、符号化中に使用されたコーディングスキームを直接検出するのに十分な情報を有さない。このタイプの直接検出は、典型的には、符号化されたメモリの各選択可能部分についてコーディングスキーム識別子を記憶する非常に複雑な管理テーブルを必要とし、データが非常に頻繁に変更されるシナリオに対して、テーブルが非常に頻繁に更新される必要があり、メモリデバイスの性能に悪影響を及ぼす。代わりに、コントローラは、候補コーディングスキームを選択し、試験を実行し、選択された候補コーディングスキームを使用して、データを復号するか、あるいは試験に基づいて別の候補コーディングスキームを選択する。
【０２０４】
一部の実施形態では、コントローラは、候補コーディングスキームを使用して、指定されたデータの少なくとも一部分のビットエラー率（ＢＥＲ）を計算又は推定することによって、候補コーディングスキームを試験する（２００８）。一部の実施形態では、コントローラは、指定されたデータ（又は、試験されている指定されたデータの部分）のシンドローム重みを計算することによって、ＢＥＲ推定を実行する。シンドローム重みが所定の閾値未満である場合（２０１０：「はい」）、コントローラは、選択された候補コーディングスキームを、指定されたデータを復号するためのコーディングスキームとして使用し、選択されたコーディングスキームを使用して指定されたデータを復号する（２０１２）。コントローラは復号されたデータをホストに戻し、それによって読み出し動作を完了する（２０１４）。
【０２０５】
シンドローム重みが所定の閾値以上である場合（２０１０：「いいえ」）、コントローラは、試験（２００８、５１０）のための別の候補エラー訂正コーディングスキームを選択し（２００４）、このプロセスは、その後に選択された候補コーディングスキームを用いてこれまでのように継続する。ループ（２０１０、２００４、２００６）は、計算されたシンドローム重みが閾値未満になるまで繰り返す。一部の実施形態では、コントローラは、ステップ２０１０において、第１の正の試験結果になった（例えば、シンドローム重みが閾値未満）ら、候補コーディングスキームの試験を停止する。言い換えると、特定の候補コーディングスキームの算出されたシンドローム重みが閾値未満であるとすぐに、コントローラは、他の候補コーディングスキームの試験を停止し、特定の候補コーディングスキームを使用して指定されたデータを即座に復号する（２０１２）。これは、データを読み出す必要があるたびに、全ての利用可能な候補符号化スキームを試験するよりも効率的である。一部の実施形態では、候補コーディングスキームのいずれも、閾値を下回るシンドローム重みをもたらさない場合、コントローラは、復号に使用するために最も低いシンドローム重みをもたらした候補を選択する。
【０２０６】
復号方法２０００は、メモリセルがプログラムされたときに使用された特定のエラー訂正コードをより効率的に発見することを可能にする。これは、（例えば、各ｅブロックについて）メモリの各選択可能な部分にどのコードが使用されたかを記録するために、管理テーブル及びブック保持動作が不要であるため、復号プロセスが単純化される。
【０２０７】
一部の実施形態では、更により効率的であるために、デコーダは、（例えば、署名チェックに基づいて）最も可能性の高いコーディングスキームの初期評価に基づいて、候補符号化スキームを選択する（２００４）。具体的には、符号化方法１９００の一部として、エンコーダは、（例えば、各ｅブロックについて）メモリの各選択可能な部分に署名を埋め込む（１９１０）。例示的な署名は、１００バイト〜５００バイトの長さである。署名は、１００バイト未満及び５００バイトを超える長さとすることができる。復号方法２０００の一部として、デコーダ又はコントローラは、どのコードが使用されたかを示す、受信されたメッセージ（代替的に、本明細書では「モデルデータ署名」と称される）にどの署名が最も近いかをチェック（２００６）する。一部の実施形態では、コントローラは、候補コーディングスキームを使用して署名を復号し、復号されたデータ署名をモデルデータ署名と比較し、復号されたデータ署名が、モデルデータ署名から閾値量未満で逸脱するとの決定に従って、指定された読み出されるデータを復号するための候補コーディングスキームを選択することによって、署名をチェックする。
【０２０８】
一部の実施形態では、シグネチャに使用されるバイト数は、コントローラが推定精度を有する必要だけがあるため、限定される。エラーは、コントローラが、シンドローム重みを計算する（２００８）ときに間違いに直ちに通知することができるため、間違いが十分にまれである限り、許容される。署名チェックの使用は、冗長なシンドローム重み計算動作の大部分が、最も可能性の高い符号化スキームで開始することによって回避されるという点で、復号プロセスを更に効率的にする。
【０２０９】
本明細書で説明される実施形態は、ＬＤＰＣ能力をより良く利用し、スループットを増加させ、耐久性を増加させ、電力をより低く維持する。加えて、本明細書で説明される実施形態は、様々なＢＥＲ及びＰＥ／Ｃ閾値に基づいて高レベルシステムロジックを著しく改善する。柔軟に適合された補正能力及び性能速度を有することにより、メモリ記憶システムが、特定の閾値を緩和し、ホスト駆動活動とハウスキーピング活動との間のより良いバランスを可能にする。
【０２１０】
本明細書で提供される方法を実行するための実行可能コードを有する、対応する方法、システム、及びコンピュータ又はプロセッサ可読記憶デバイスシステムも提供され得る。
【０２１１】
前述の詳細な説明は、例示及び説明の目的のために提示したものである。前述の詳細な説明は、網羅的であること、又は開示した正確な形態に限定することを意図したものではない。上記の教示に鑑みて多くの修正及び変形が可能である。説明した実施形態は、本発明の原理及びその実際の用途を最も良く説明するために選択されており、それによって、当業者が様々な実施形態で、企図される特定の使用に適するように様々な修正を伴って、本発明を最も良く利用することを可能にする。本発明の範囲は、本明細書に添付の請求項によって定義されることが意図されている。
以下の項目は、出願当初の特許請求の範囲に記載されている各要素である。
（項目１）
データ記憶システムであって、
複数のメモリセルを含むメモリと、
不規則な低密度パリティチェック（ＬＤＰＣ）符号化スキームを使用してデータを符号化するように構成されているエンコーダと、
前記メモリ及び前記エンコーダと通信するコントローラであって、
書き込まれるデータを指定するデータ書き込みコマンドを受信することと、
（ｉ）前記データ記憶システムの作動モード、（ｉｉ）デバイス固有基準、及び／又は（ｉｉ）前記指定されたデータのデータ特性に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択することと、
前記選択された不規則なＬＤＰＣ符号化スキームを使用して、前記指定された書き込まれるデータを符号化することと、を行うように構成されているコントローラと、を含むデータ記憶システム。
（項目２）
前記複数の利用可能な不規則なＬＤＰＣ符号化スキームが、性能について最適化された第１の不規則なＬＤＰＣ符号化スキームと、信頼性について最適化された第２の不規則なＬＤＰＣ符号化スキーム及び低電力について最適化された第３の不規則なＬＤＰＣ符号化スキームのうちの１つ以上と、を含む、項目１に記載のデータ記憶システム。
（項目３）
前記コントローラが、前記エンコーダに利用可能な、複数の利用可能な不規則なＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、
前記データ記憶システムの１つ以上の条件及び／又は前記書き込まれるデータのデータ特性基準を検出することであって、前記１つ以上の条件が、
環境条件、
前記データ記憶システムのライフサイクルステージ、
前記指定されたデータのデータタイプ、
前記データ書き込みコマンドの前記受信に近接する期間中のプログラミングスループット、及び
前記書き込まれるデータのエントロピーレベルのうちの少なくとも１つを含む、検出することと、
前記データ記憶システムの前記検出された１つ以上の条件に基づいて、前記不規則なＬＤＰＣ符号化スキームを選択することと、を行うように構成されていることを含む、項目１に記載のデータ記憶システム。
（項目４）
前記コントローラが、デバイス固有基準に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、
前記データ記憶システムの環境条件を検出することと、
前記データ記憶システムの前記検出された環境条件に基づいて、前記不規則なＬＤＰＣ符号化スキームを選択することと、を行うように更に構成されていることを含む、項目１に記載のデータ記憶システム。
（項目５）
前記環境条件が、前記データ記憶デバイスシステムの温度を含み、前記コントローラが、前記不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、
前記温度が閾値を超えるかどうかを決定することと、
前記温度が前記閾値を超えるとの決定に従って、信頼性について最適化された不規則なＬＤＰＣ符号化スキームを選択することと、
前記温度が前記閾値を超えないとの決定に従って、性能について最適化された不規則なＬＤＰＣ符号化スキームを選択することと、を行うように構成されていることを含む、項目４に記載のデータ記憶システム。
（項目６）
前記コントローラが、デバイス固有基準に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、
前記データ記憶システムのライフサイクルステージを決定することと、
前記決定されたライフサイクルステージに基づいて、前記不規則なＬＤＰＣ符号化スキームを選択することと、を更に行うように構成されていることを含む、項目１に記載のデータ記憶システム。
（項目７）
前記コントローラが、前記データ記憶システムの前記ライフサイクルステージを決定するように構成されていることは、前記データ記憶システムによって行われるプログラミングサイクルの累積数を測定することを含み、前記不規則なＬＤＰＣ符号化スキームを選択することは、前記コントローラが、
前記プログラミングサイクルの累積数が閾値を超えているかどうかを決定することと、
前記プログラミングサイクルの累積数が前記閾値を超えるとの決定に従って、信頼性について最適化された不規則なＬＤＰＣ符号化スキームを選択することと、
前記プログラミングサイクルの累積数が前記閾値を超えないという決定に従って、性能について最適化された不規則なＬＤＰＣ符号化スキームを選択することと、を行うように構成されていることを含む、項目６に記載のデータ記憶システム。
（項目８）
前記コントローラが、前記指定されたデータのデータ特性に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、
前記指定されたデータのデータタイプを決定することと、
前記指定されたデータの前記決定されたデータタイプに基づいて、前記不規則なＬＤＰＣ符号化スキームを選択することと、を行う
ように更に構成されていることを含む、項目１に記載のデータ記憶システム。
（項目９）
前記コントローラが、前記指定されたデータの前記データタイプを決定するように構成されていることは、前記コントローラが、
（ｉ）はんだ付け作業の前に書き込まれる予めロードされたコンテンツデータと、
（ｉｉ）重要なブートデータ又は管理システムデータ、
（ｉｉｉ）ホストブートデータ又はホストオペレーティングシステムデータ、
（ｉｖ）変数データ、及び／又は
（ｖ）ＴＬＣデータ、として前記指定されたデータを分類するように構成されていることを含み、
前記コントローラが、前記不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、前記分類に従って信頼性について最適化された不規則なＬＤＰＣ符号化スキームを選択するように構成されていることを含む、項目８に記載のデータ記憶システム。
（項目１０）
前記コントローラが、前記指定されたデータの前記データタイプを選択するように構成されていることは、前記コントローラが、
（ｉ）非重要データ、
（ｉｉ）静的データ、
（ｉｉｉ）ＴＬＣデータ保護のためのＸＯＲスナップショットデータ、
（ｉｖ）高エントロピー、及び／又は
（ｉｖ）ＳＬＣデータ、として前記指定されたデータを分類するように構成されていることを含み、
前記コントローラが、前記不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、前記分類に従って性能について最適化された不規則なＬＤＰＣ符号化スキームを選択するように構成されていることを含む、項目８に記載のデータ記憶システム。
（項目１１）
前記コントローラが、デバイス固有基準に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、
前記データ書き込みコマンドの前記受信に近接する期間中にプログラミングスループットを測定することと、
前記測定されたプログラミングスループットに基づいて、前記不規則なＬＤＰＣ符号化スキームを選択することと、を行うよう更に構成されていることを含む、項目１に記載のデータ記憶システム。
（項目１２）
前記コントローラが、前記測定されたプログラミングスループットに基づいて前記不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、
前記測定されたプログラミングスループットが閾値を超えるかどうかを決定することと、
前記測定されたプログラミングスループットが前記閾値を超えるとの決定に従って、低電力消費について最適化された不規則なＬＤＰＣ符号化スキームを選択することと、
前記測定されたプログラミングスループットが前記閾値を超えないという決定に従って、性能について最適化された不規則なＬＤＰＣ符号化スキームを選択することと、を行うように構成されていることを含む、項目１１に記載のデータ記憶システム。
（項目１３）
不規則なＬＤＰＣ復号スキームを使用してデータを復号するように構成されているデコーダを更に含み、
前記コントローラが前記デコーダと通信し、前記コントローラが、
読み出されるデータを指定するデータ読み出しコマンドを受信することと、
シンドローム重み動作に従って、前記デコーダに利用可能な、複数の不規則なＬＤＰＣ復号スキームのうちの不規則なＬＤＰＣ復号スキームを選択することと、
前記選択された不規則なＬＤＰＣ復号スキームを使用して、前記指定された読み出されるデータを復号することと、を行うように更に構成されている、項目１に記載のデータ記憶システム。
（項目１４）
前記コントローラが、前記シンドローム重み動作に従って前記不規則なＬＤＰＣ復号スキームを選択するように構成されていることは、前記コントローラが、
第１の不規則なＬＤＰＣ復号スキーム候補を選択することと、
前記第１の不規則なＬＤＰＣ復号スキーム候補を使用して、前記指定された読み出されるデータの少なくとも一部の第１のシンドローム重みを計算することと、
前記計算された第１のシンドローム重みが所定の閾値未満であるかどうかを決定することと、
前記計算された第１のシンドローム重みが前記所定の閾値未満であるとの決定に従って、前記不規則なＬＤＰＣ復号スキームとして前記第１の不規則なＬＤＰＣ復号スキーム候補を選択することと、を行うように構成されていること含む、項目１３に記載のデータ記憶システム。
（項目１５）
前記コントローラが、前記シンドローム重み動作に従って前記不規則なＬＤＰＣ復号スキームを選択するように構成されていることは、前記コントローラが、
前記計算されたシンドローム重みが前記所定の閾値以上であるという決定に従って、第２の不規則なＬＤＰＣ復号スキーム候補を選択することと、
前記第２の不規則なＬＤＰＣ復号スキーム候補を使用して、前記指定された読み出されるデータの少なくとも前記一部の第２のシンドローム重みを計算することと、
前記計算された第２のシンドローム重みが前記所定の閾値未満であるかどうかを決定することと、
前記計算された第２のシンドローム重みが前記所定の閾値未満であるとの決定に従って、前記不規則なＬＤＰＣ復号スキームとして前記第２の不規則なＬＤＰＣ復号スキーム候補を選択することと、を行うように構成されていることを更に含む、項目１４に記載のデータ記憶システム。
（項目１６）
前記コントローラが、前記第１の不規則なＬＤＰＣ復号スキーム候補を選択するように構成されていることは、前記コントローラが、
前記利用可能な不規則なＬＤＰＣ復号スキームのうちの第１のものを使用して、復号される前記データに関連付けられたデータ署名を復号して、第１の復号データ署名をもたらすことと、
前記第１の復号データ署名をモデルデータ署名と比較することと、
前記第１の復号データ署名が前記モデルデータ署名から閾値量未満を逸脱しているとの決定に従って、前記第１の不規則なＬＤＰＣ復号スキーム候補として、前記利用可能な不規則なＬＤＰＣ復号スキームのうちの前記第１のものを選択することと、を行うように構成されていることを含む、項目１４に記載のデータ記憶システム。
（項目１７）
前記コントローラが、前記第１の不規則なＬＤＰＣ復号スキーム候補を選択するように構成されていることは、前記コントローラが、
前記第１の復号データ署名が、前記モデルデータ署名から前記閾値量以上を逸脱するとの決定に従って、前記利用可能な不規則なＬＤＰＣ復号スキームのうちの第２のものを使用して、前記復号されるデータに関連付けられた前記データ署名を復号し、第２の復号データ署名をもたらすことと、
前記第２の復号データ署名を前記モデルデータ署名と比較することと、
前記第２の復号データ署名が、前記モデルデータ署名から前記閾値量未満を逸脱するとの決定に従って、前記第１の不規則なＬＤＰＣ復号スキーム候補として、前記利用可能な不規則なＬＤＰＣ復号スキームのうちの前記第２のものを選択することと、を行うように構成されていることを更に含む、項目１６に記載のデータ記憶システム。
（項目１８）
複数のメモリセルを含むメモリと、不規則な低密度パリティチェック（ＬＤＰＣ）符号化又は復号スキームをそれぞれ使用してデータを符号化又は復号するように構成されているエンコーダ及びデコーダと、前記メモリ、エンコーダ及びデコーダと通信するコントローラと、を含むデータ記憶システムを動作させる方法であって、
書き込まれるデータを指定するデータ書き込みコマンドを受信することと、
（ｉ）前記データ記憶システムの作動モード、（ｉｉ）デバイス固有基準、及び／又は（ｉｉ）前記指定されたデータのデータ特性に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択することと、
前記選択された不規則なＬＤＰＣ符号化スキームを使用して、前記指定された書き込まれるデータを符号化することと、を含む方法。
（項目１９）
読み出されるデータを指定するデータ読み出しコマンドを受信することと、
シンドローム重み動作に従って、前記デコーダに利用可能な、複数の不規則なＬＤＰＣ復号スキームのうちの不規則なＬＤＰＣ復号スキームを選択することと、
前記選択された不規則なＬＤＰＣ復号スキームを使用して、前記指定された読み出されるデータを復号することと、を更に含み、
前記シンドローム重み動作に従って前記不規則なＬＤＰＣ復号スキームを選択することは、
第１の不規則なＬＤＰＣ復号スキーム候補を選択することと、
前記第１の不規則なＬＤＰＣ復号スキーム候補を使用して、前記指定された読み出されるデータの少なくとも一部の第１のシンドローム重みを計算することと、
前記計算された第１のシンドローム重みが所定の閾値未満であるかどうかを決定することと、
前記計算された第１のシンドロームの重みが前記所定の閾値未満であるとの決定に従って、前記不規則なＬＤＰＣ復号スキームとして前記第１の不規則なＬＤＰＣ復号スキーム候補を選択することと、を含む、項目１８に記載の方法。
（項目２０）
データ記憶システムであって、
書き込まれるデータを指定するデータ書き込みコマンドを受信する手段と、
（ｉ）前記データ記憶システムの作動モード、（ｉｉ）デバイス固有基準、及び／又は（ｉｉ）前記指定されたデータのデータ特性に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択するための手段と、
前記選択された不規則なＬＤＰＣ符号化スキームを使用して前記指定された書き込まれるデータを符号化するための手段と、
読み出されるデータを指定するデータ読み出しコマンドを受信するための手段と、
シンドローム重み動作に従って、前記データ記憶システムのデコーダに利用可能な、複数の不規則なＬＤＰＣ復号スキームのうちの不規則なＬＤＰＣ復号スキームを選択するための手段と、
前記選択された不規則なＬＤＰＣ復号スキームを使用して、前記指定された読み出されるデータを復号するための手段と、を含むデータ記憶システム。
【図１】
2020202553.tif 000037
【図２】
2020202553.tif 000038
【図３】
2020202553.tif 000039
【図４】
2020202553.tif 000040
【図５】
2020202553.tif 000041
【図６】
2020202553.tif 000042
【図７】
2020202553.tif 000043
【図８Ａ】
2020202553.tif 000044
【図８Ｂ】
2020202553.tif 000045
【図８Ｃ】
2020202553.tif 000046
【図８Ｄ】
2020202553.tif 000047
【図８Ｅ】
2020202553.tif 000048
【図８Ｆ】
2020202553.tif 000049
【図８Ｇ】
2020202553.tif 000050
【図８Ｈ】
2020202553.tif 000051
【図８Ｉ】
2020202553.tif 000052
【図８Ｊ】
2020202553.tif 000053
【図８Ｋ】
2020202553.tif 000054
【図８Ｌ】
2020202553.tif 000055
【図８Ｍ】
2020202553.tif 000056
【図８Ｎ】
2020202553.tif 000057
【図９】
2020202553.tif 000058
【図１０】
2020202553.tif 000059
【図１１】
2020202553.tif 000060
【図１２】
2020202553.tif 000061
【図１３】
2020202553.tif 000062
【図１４】
2020202553.tif 000063
【図１５】
2020202553.tif 000064
【図１６】
2020202553.tif 000065
【図１７】
2020202553.tif 000066
【図１８】
2020202553.tif 000067
【図１９】
2020202553.tif 000068
【図２０】
2020202553.tif 000069
【手続補正書】
【提出日】令和2年5月1日(2020.5.1)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データ記憶システムであって、
複数のメモリセルを含むメモリと、
不規則な低密度パリティチェック（ＬＤＰＣ）符号化スキームを使用してデータを符号化するように構成されているエンコーダと、
前記メモリ及び前記エンコーダと通信するコントローラであって、
書き込まれるデータを指定するデータ書き込みコマンドを受信することと、
（ｉ）前記データ記憶システムの作動モード、（ｉｉ）デバイス固有基準、及び／又は（ｉｉｉ）前記指定されたデータのデータ特性に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択することと、
前記選択された不規則なＬＤＰＣ符号化スキームを使用して、前記指定された書き込まれるデータを符号化することと、を行うように構成されているコントローラと、を含むデータ記憶システム。
【請求項２】
前記複数の利用可能な不規則なＬＤＰＣ符号化スキームが、性能について最適化された第１の不規則なＬＤＰＣ符号化スキームと、信頼性について最適化された第２の不規則なＬＤＰＣ符号化スキーム及び低電力について最適化された第３の不規則なＬＤＰＣ符号化スキームのうちの１つ以上と、を含む、請求項１に記載のデータ記憶システム。
【請求項３】
前記コントローラが、前記エンコーダに利用可能な、複数の利用可能な不規則なＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、
前記データ記憶システムの１つ以上の条件及び／又は前記書き込まれるデータのデータ特性基準を検出することであって、前記１つ以上の条件が、
環境条件、
前記データ記憶システムのライフサイクルステージ、
前記指定されたデータのデータタイプ、
前記データ書き込みコマンドの前記受信に近接する期間中のプログラミングスループット、及び
前記書き込まれるデータのエントロピーレベルのうちの少なくとも１つを含む、検出することと、
前記データ記憶システムの前記検出された１つ以上の条件に基づいて、前記不規則なＬＤＰＣ符号化スキームを選択することと、を行うように構成されていることを含む、請求項１又は２に記載のデータ記憶システム。
【請求項４】
前記コントローラが、デバイス固有基準に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、
前記データ記憶システムの環境条件を検出することと、
前記データ記憶システムの前記検出された環境条件に基づいて、前記不規則なＬＤＰＣ符号化スキームを選択することと、を行うように更に構成されていることを含む、請求項１〜３のいずれか一項に記載のデータ記憶システム。
【請求項５】
前記環境条件が、前記データ記憶システムの温度を含み、前記コントローラが、前記不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、
前記温度が閾値を超えるかどうかを決定することと、
前記温度が前記閾値を超えるとの決定に従って、信頼性について最適化された不規則なＬＤＰＣ符号化スキームを選択することと、
前記温度が前記閾値を超えないとの決定に従って、性能について最適化された不規則なＬＤＰＣ符号化スキームを選択することと、を行うように構成されていることを含む、請求項４に記載のデータ記憶システム。
【請求項６】
前記コントローラが、デバイス固有基準に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、
前記データ記憶システムのライフサイクルステージを決定することと、
前記決定されたライフサイクルステージに基づいて、前記不規則なＬＤＰＣ符号化スキームを選択することと、を更に行うように構成されていることを含む、請求項１〜３のいずれか一項に記載のデータ記憶システム。
【請求項７】
前記コントローラが、前記データ記憶システムの前記ライフサイクルステージを決定するように構成されていることは、前記データ記憶システムによって行われるプログラミングサイクルの累積数を測定することを含み、前記不規則なＬＤＰＣ符号化スキームを選択することは、前記コントローラが、
前記プログラミングサイクルの累積数が閾値を超えているかどうかを決定することと、
前記プログラミングサイクルの累積数が前記閾値を超えるとの決定に従って、信頼性について最適化された不規則なＬＤＰＣ符号化スキームを選択することと、
前記プログラミングサイクルの累積数が前記閾値を超えないという決定に従って、性能について最適化された不規則なＬＤＰＣ符号化スキームを選択することと、を行うように構成されていることを含む、請求項６に記載のデータ記憶システム。
【請求項８】
前記コントローラが、前記指定されたデータのデータ特性に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、
前記指定されたデータのデータタイプを決定することと、
前記指定されたデータの前記決定されたデータタイプに基づいて、前記不規則なＬＤＰＣ符号化スキームを選択することと、を行う
ように更に構成されていることを含む、請求項１〜３のいずれか一項に記載のデータ記憶システム。
【請求項９】
前記コントローラが、前記指定されたデータの前記データタイプを決定するように構成されていることは、前記コントローラが、
（ｉ）はんだ付け作業の前に書き込まれる予めロードされたコンテンツデータと、
（ｉｉ）重要なブートデータ又は管理システムデータ、
（ｉｉｉ）ホストブートデータ又はホストオペレーティングシステムデータ、
（ｉｖ）変数データ、及び／又は
（ｖ）ＴＬＣデータ、として前記指定されたデータを分類するように構成されていることを含み、
前記コントローラが、前記不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、前記分類に従って信頼性について最適化された不規則なＬＤＰＣ符号化スキームを選択するように構成されていることを含む、請求項８に記載のデータ記憶システム。
【請求項１０】
前記コントローラが、前記指定されたデータの前記データタイプを選択するように構成されていることは、前記コントローラが、
（ｉ）非重要データ、
（ｉｉ）静的データ、
（ｉｉｉ）ＴＬＣデータ保護のためのＸＯＲスナップショットデータ、
（ｉｖ）高エントロピー、及び／又は
（ｉｖ）ＳＬＣデータ、として前記指定されたデータを分類するように構成されていることを含み、
前記コントローラが、前記不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、前記分類に従って性能について最適化された不規則なＬＤＰＣ符号化スキームを選択するように構成されていることを含む、請求項８に記載のデータ記憶システム。
【請求項１１】
前記コントローラが、デバイス固有基準に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、
前記データ書き込みコマンドの前記受信に近接する期間中にプログラミングスループットを測定することと、
前記測定されたプログラミングスループットに基づいて、前記不規則なＬＤＰＣ符号化スキームを選択することと、を行うよう更に構成されていることを含む、請求項１〜３のいずれか一項に記載のデータ記憶システム。
【請求項１２】
前記コントローラが、前記測定されたプログラミングスループットに基づいて前記不規則なＬＤＰＣ符号化スキームを選択するように構成されていることは、前記コントローラが、
前記測定されたプログラミングスループットが閾値を超えるかどうかを決定することと、
前記測定されたプログラミングスループットが前記閾値を超えるとの決定に従って、低電力消費について最適化された不規則なＬＤＰＣ符号化スキームを選択することと、
前記測定されたプログラミングスループットが前記閾値を超えないという決定に従って、性能について最適化された不規則なＬＤＰＣ符号化スキームを選択することと、を行うように構成されていることを含む、請求項１１に記載のデータ記憶システム。
【請求項１３】
不規則なＬＤＰＣ復号スキームを使用してデータを復号するように構成されているデコーダを更に含み、
前記コントローラが前記デコーダと通信し、前記コントローラが、
読み出されるデータを指定するデータ読み出しコマンドを受信することと、
シンドローム重み動作に従って、前記デコーダに利用可能な、複数の不規則なＬＤＰＣ復号スキームのうちの不規則なＬＤＰＣ復号スキームを選択することと、
前記選択された不規則なＬＤＰＣ復号スキームを使用して、前記指定された読み出されるデータを復号することと、を行うように更に構成されている、請求項１〜１２のいずれか一項に記載のデータ記憶システム。
【請求項１４】
前記コントローラが、前記シンドローム重み動作に従って前記不規則なＬＤＰＣ復号スキームを選択するように構成されていることは、前記コントローラが、
第１の不規則なＬＤＰＣ復号スキーム候補を選択することと、
前記第１の不規則なＬＤＰＣ復号スキーム候補を使用して、前記指定された読み出されるデータの少なくとも一部の第１のシンドローム重みを計算することと、
前記計算された第１のシンドローム重みが所定の閾値未満であるかどうかを決定することと、
前記計算された第１のシンドローム重みが前記所定の閾値未満であるとの決定に従って、前記不規則なＬＤＰＣ復号スキームとして前記第１の不規則なＬＤＰＣ復号スキーム候補を選択することと、を行うように構成されていること含む、請求項１３に記載のデータ記憶システム。
【請求項１５】
前記コントローラが、前記シンドローム重み動作に従って前記不規則なＬＤＰＣ復号スキームを選択するように構成されていることは、前記コントローラが、
前記計算されたシンドローム重みが前記所定の閾値以上であるという決定に従って、第２の不規則なＬＤＰＣ復号スキーム候補を選択することと、
前記第２の不規則なＬＤＰＣ復号スキーム候補を使用して、前記指定された読み出されるデータの少なくとも前記一部の第２のシンドローム重みを計算することと、
前記計算された第２のシンドローム重みが前記所定の閾値未満であるかどうかを決定することと、
前記計算された第２のシンドローム重みが前記所定の閾値未満であるとの決定に従って、前記不規則なＬＤＰＣ復号スキームとして前記第２の不規則なＬＤＰＣ復号スキーム候補を選択することと、を行うように構成されていることを更に含む、請求項１４に記載のデータ記憶システム。
【請求項１６】
前記コントローラが、前記第１の不規則なＬＤＰＣ復号スキーム候補を選択するように構成されていることは、前記コントローラが、
前記利用可能な不規則なＬＤＰＣ復号スキームのうちの第１のものを使用して、復号される前記データに関連付けられたデータ署名を復号して、第１の復号データ署名をもたらすことと、
前記第１の復号データ署名をモデルデータ署名と比較することと、
前記第１の復号データ署名が前記モデルデータ署名から閾値量未満を逸脱しているとの決定に従って、前記第１の不規則なＬＤＰＣ復号スキーム候補として、前記利用可能な不規則なＬＤＰＣ復号スキームのうちの前記第１のものを選択することと、を行うように構成されていることを含む、請求項１４に記載のデータ記憶システム。
【請求項１７】
前記コントローラが、前記第１の不規則なＬＤＰＣ復号スキーム候補を選択するように構成されていることは、前記コントローラが、
前記第１の復号データ署名が、前記モデルデータ署名から前記閾値量以上を逸脱するとの決定に従って、前記利用可能な不規則なＬＤＰＣ復号スキームのうちの第２のものを使用して、前記復号されるデータに関連付けられた前記データ署名を復号し、第２の復号データ署名をもたらすことと、
前記第２の復号データ署名を前記モデルデータ署名と比較することと、
前記第２の復号データ署名が、前記モデルデータ署名から前記閾値量未満を逸脱するとの決定に従って、前記第１の不規則なＬＤＰＣ復号スキーム候補として、前記利用可能な不規則なＬＤＰＣ復号スキームのうちの前記第２のものを選択することと、を行うように構成されていることを更に含む、請求項１６に記載のデータ記憶システム。
【請求項１８】
複数のメモリセルを含むメモリと、不規則な低密度パリティチェック（ＬＤＰＣ）符号化又は復号スキームをそれぞれ使用してデータを符号化又は復号するように構成されているエンコーダ及びデコーダと、前記メモリ、エンコーダ及びデコーダと通信するコントローラと、を含むデータ記憶システムを動作させる方法であって、
書き込まれるデータを指定するデータ書き込みコマンドを受信することと、
（ｉ）前記データ記憶システムの作動モード、（ｉｉ）デバイス固有基準、及び／又は（ｉｉｉ）前記指定されたデータのデータ特性に従って、前記エンコーダに利用可能な、複数の利用可能な不規則なＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択することと、
前記選択された不規則なＬＤＰＣ符号化スキームを使用して、前記指定された書き込まれるデータを符号化することと、を含む方法。
【請求項１９】
読み出されるデータを指定するデータ読み出しコマンドを受信することと、
シンドローム重み動作に従って、前記デコーダに利用可能な、複数の不規則なＬＤＰＣ復号スキームのうちの不規則なＬＤＰＣ復号スキームを選択することと、
前記選択された不規則なＬＤＰＣ復号スキームを使用して、前記指定された読み出されるデータを復号することと、を更に含み、
前記シンドローム重み動作に従って前記不規則なＬＤＰＣ復号スキームを選択することは、
第１の不規則なＬＤＰＣ復号スキーム候補を選択することと、
前記第１の不規則なＬＤＰＣ復号スキーム候補を使用して、前記指定された読み出されるデータの少なくとも一部の第１のシンドローム重みを計算することと、
前記計算された第１のシンドローム重みが所定の閾値未満であるかどうかを決定することと、
前記計算された第１のシンドロームの重みが前記所定の閾値未満であるとの決定に従って、前記不規則なＬＤＰＣ復号スキームとして前記第１の不規則なＬＤＰＣ復号スキーム候補を選択することと、を含む、請求項１８に記載の方法。
【請求項２０】
データ記憶システムであって、
書き込まれるデータを指定するデータ書き込みコマンドを受信する手段と、
（ｉ）前記データ記憶システムの作動モード、（ｉｉ）デバイス固有基準、及び／又は（ｉｉｉ）前記指定されたデータのデータ特性に従って、エンコーダに利用可能な、複数の利用可能な不規則なＬＤＰＣ符号化スキームのうちの不規則なＬＤＰＣ符号化スキームを選択するための手段と、
前記選択された不規則なＬＤＰＣ符号化スキームを使用して前記指定された書き込まれるデータを符号化するための手段と、
読み出されるデータを指定するデータ読み出しコマンドを受信するための手段と、
シンドローム重み動作に従って、前記データ記憶システムのデコーダに利用可能な、複数の不規則なＬＤＰＣ復号スキームのうちの不規則なＬＤＰＣ復号スキームを選択するための手段と、
前記選択された不規則なＬＤＰＣ復号スキームを使用して、前記指定された読み出されるデータを復号するための手段と、を含むデータ記憶システム。
【外国語明細書】
2020202553000001.pdf
2020202553000002.pdf
2020202553000003.pdf
2020202553000004.pdf