本発明の有利点が容易に理解されるように、本発明のより具体的な説明が、添付図面に示される特定の実施形態を参照することによって与えられる。これらの図面は本発明の典型的な実施形態のみを示し、それゆえ、本発明の範囲を限定しているとは見なすべきではないことを理解して、本発明を、以下の添付図面の使用を介して、更なる特異性及び詳細と共に記載し、説明する。
本明細書で説明される機能単位の多くは、それらの実装の独立性をより具体的に強調するために、モジュールとして表示されている。例えば、モジュールは、カスタムVLSI回路若しくはゲートアレイ、論理チップなどの既製の半導体、トランジスタ、又は他の離散的構成要素を含む、ハードウェア回路として実装することができる。モジュールはまた、現場プログラム可能ゲートアレイ、プログラム可能アレイ論理、プログラム可能論理デバイスなどのような、プログラム可能ハードウェアデバイスの形態でも実装することができる。
モジュールはまた、様々なタイプのプロセッサによる実行のための、ソフトウェアの形態でも実装することができる。例えば、識別される、実行可能コードのモジュールは、例えば、オブジェクト、プロシージャ、又は関数として編成することができる、コンピュータ命令の1つ以上の物理ブロック又は論理ブロックを含み得る。それにもかかわらず、識別されるモジュールの実行可能ファイルは、物理的に一体となって位置する必要はなく、種々の場所に記憶される異種の命令を含み得、これらは、論理的に一体となって結合されると、モジュールを構成して、そのモジュールに関する規定の目的を達成する。
実際に、実行可能コードのモジュールは、単一の命令、又は多数の命令とすることができ、更に、幾つかの異なるコードセグメントにわたって、異なるプログラム間で、及び幾つかのメモリデバイスの全体にわたって分散させることができる。同様に、操作データは、本明細書では、モジュール内部で識別して示すことができ、任意の好適な形態で具体化し、任意の好適なタイプのデータ構造内部に編成することができる。操作データは、単一のデータセットとして収集することができ、又は種々の記憶デバイスを含めて、種々の場所にわたって、分散させることができ、また、少なくとも部分的には、単にシステム又はネットワーク上の電気信号として存在することができる。モジュール、又はモジュールの諸部分がソフトウェアの形態で実装される場合は、そのソフトウェア部分は、1つ以上のコンピュータ読み取り可能媒体上に記憶される。
本明細書の全体を通して、「一実施形態」、「実施形態」、又は同様の言語への言及は、実施形態に関連して説明される具体的な特徴、構造、又は特性が、本発明の少なくとも1つの実施形態に含まれることを意味する。それゆえ、本明細書の全体を通して、語句「一実施形態では」、「実施形態では」、又は同様の言語の表現は、全て同一の実施形態に言及する場合もあるが、必ずしもそうではない場合もある。
コンピュータ読み取り可能媒体への言及は、デジタル処理装置メモリデバイス上に機械読み取り可能命令を記憶することが可能な、任意の形態を取ることができる。コンピュータ読み取り可能媒体は、コンパクトディスク、デジタルビデオディスク、磁気テープ、ベルヌーイドライブ、磁気ディスク、パンチカード、フラッシュメモリ、集積回路、又は他のデジタル処理装置メモリデバイスによって、具体化することができる。
更には、本発明の、説明される特徴、構造、又は特性は、1つ以上の実施形態内に、任意の好適な方式で組み合わせることができる。以下の説明では、本発明の実施形態の完全な理解を提供するために、プログラミングの実施例、ソフトウェアモジュール、ユーザー選択、ネットワークトランザクション、データベース問い合わせ、データベース構造、ハードウェアモジュール、ハードウェエア回路、ハードウェアチップなどのような、数多くの具体的な詳細が提供される。しかしながら、当業者には、1つ以上の具体的な詳細を有することなく、又は他の方法、構成要素、材料などを使用して、本発明を実践し得ることが認識されるであろう。他の場合では、本発明の態様を不明瞭にすることを避けるために、周知の構造、材料、又は操作は、詳細に示されず、又は説明されることもない。
本明細書に含まれる概略流れ図は、全般的には、論理流れ図として記載される。したがって、図示される順序、及び表示される工程は、本方法の一実施形態を示すものである。機能、論理、又は効果が、説明される方法の1つ以上の工程、若しくはそれらの工程の諸部分に等価である、他の工程及び方法を想到することができる。更には、採用される形式及びシンボルは、本方法の論理工程を説明するために提供されるものであり、本方法の範囲を限定するものではないことが理解されよう。様々な矢印のタイプ及び線のタイプが、流れ図で採用される場合があるが、それらは、対応する方法の範囲を限定するものではないことが理解されよう。実際に、一部の矢印又は他の結合子は、本方法の論理の流れのみを示すために使用することができる。例えば、矢印は、図示の方法の列挙された工程間の、不特定持続時間の待機期間又は監視期間を示し得る。更には、特定の方法を実施する順序は、対応する図示の工程の順序に厳格に従う場合もあれば、そうではない場合もある。
ソリッドステート記憶システム
図1は、本発明による、ソリッドステート記憶媒体110の有用性を改善するためのシステム100の一実施形態を示す、概略ブロック図である。システム100は、以下で説明される、ソリッドステート記憶デバイス102、ソリッドステート記憶装置コントローラ104、書き込みデータパイプライン106、読み取りデータパイプライン108、ソリッドステート記憶媒体110、コンピュータ112、クライアント114、及びコンピュータネットワーク116を含む。
システム100は、少なくとも1つのソリッドステート記憶デバイス102を含む。他の実施形態では、システム100は、2つ以上のソリッドステート記憶デバイス102を含む。各ソリッドステート記憶デバイス102は、フラッシュメモリ、ナノランダムアクセスメモリ(「ナノRAM、すなわちNRAM」)、磁気抵抗RAM(「MRAM」)、ダイナミックRAM(「DRAM」)、相変化RAM(「PRAM」)、レーストラックメモリ、メモリスタメモリ、ナノ結晶ワイヤーベースのメモリ、シリコン−酸化物ベースのサブ10ナノメートルプロセスメモリ、グラフェンメモリ、シリコン−酸化物−窒化物−酸化物−シリコン(「SONOS」)メモリ、抵抗変化型メモリ(「RRAM」)、プログラム可能金属化セル(「PMC」)、導電性ブリッジRAM(「CBRAM」)などのような、不揮発性のソリッドステート記憶媒体110を含み得る。ソリッドステート記憶デバイス102は、図2、図3A、及び図3Bに関連して、より詳細に説明される。
ソリッドステート記憶デバイス102は、コンピュータネットワーク116を通じて1つ以上のクライアント114に接続される、コンピュータ112内に示される。一実施形態では、ソリッドステート記憶デバイス102は、コンピュータ112の内部にあり、周辺機器相互接続高速(「PCI−e」)バス、シリアルアドバンスドテクノロジーアタッチメント(「シリアルATA」)バスなどのような、システム通信バスを使用して接続される。別の実施形態では、ソリッドステート記憶デバイス102は、コンピュータ112の外部にあり、ユニバーサルシリアルバス(「USB」)接続、米国電気電子技術者協会(「IEEE」)1394バス(「ファイアワイヤー」)などのような、外部通信バスを使用して接続される。他の実施形態では、ソリッドステート記憶デバイス102は、周辺機器相互接続(「PCI」)高速バスなどのような、通信バスを使用して、インフィニバンド若しくはPCIエクスプレスアドバンスドスイッチング(「PCIe−AS」)などの、外部の電気的バス若しくは光学的バスの拡張、又はバスネットワーキングソリューションを使用して、などで、コンピュータ112に接続される。
様々な実施形態では、ソリッドステート記憶デバイス102は、デュアルインラインメモリモジュール(「DIMM」)、ドーターカード、又はマイクロモジュールの形態とすることができる。別の実施形態では、ソリッドステート記憶デバイス102は、ラック装着ブレード内部の素子である。別の実施形態では、ソリッドステート記憶デバイス102は、より高いレベルのアセンブリ(例えば、マザーボード、ラップトップ、グラフィックプロセッサ)上に直接統合されるパッケージ内部に含まれる別の実施形態では、ソリッドステート記憶デバイス102を構成する個々の構成要素は、中間パッケージを使用することなく、より高いレベルのアセンブリ上に直接統合される。
ソリッドステート記憶デバイス102は、図2、図3A、及び図3Bに関連して、以下でより詳細に説明される、1つ以上のソリッドステート記憶装置コントローラ104を含み、そのそれぞれが、書き込みデータパイプライン106及び読み取りデータパイプライン108を含み得、それぞれが、ソリッドステート記憶媒体110を含む。全般的には、1つ以上のソリッドステート記憶装置コントローラ104は、ソリッドステート記憶媒体110の記憶セルに関する設定パラメーターを判定すること、及びその設定パラメーターに従って記憶セルを設定することを含めて、ソリッドステート記憶媒体110を管理する。
本明細書で使用するとき、記憶セルのセットに関する設定パラメーターは、インターフェースを経由して修正可能なパラメーターである。このインターフェースは、公知のインターフェース又は独自開発のインターフェースを含み得、記憶セルのセットとのインターフェース又は管理のために使用される、特定のコマンド命令の使用、及び/あるいは特定のパラメーター、レジスタ設定、ドライバ設定、コントローラ設定、コマンド命令シーケンスの特定のセット、又は他の通常のコマンド(汎用コマンド)若しくは設定との差異の使用を含み得る。設定パラメーターは、記憶セルへの書き込み、すなわちプログラミング、記憶セルからの読み取り、記憶セルの消去、記憶セルの管理、記憶セルに関するデバイスドライバ又は記憶装置コントローラの設定などに関連し得る。記憶セルのセットに関する設定パラメーターは、ソリッドステート記憶デバイス102に関するデバイスドライバ、ソリッドステート記憶装置コントローラ104などに関連し得、そのデバイスドライバ及び/又はソリッドステート記憶装置コントローラ104が、記憶セルのセット及び/又はソリッドステート記憶媒体110を、どのように使用、管理、及び相互作用するかに関連し得る。
設定パラメーターは、特定の実施形態では、読み取り電圧閾値、固有抵抗閾値、プログラミング閾値、消去閾値、ハードウェアドライバレベル閾値、記憶装置コントローラレベル閾値などのような、1つ以上の閾値を含み得る。設定パラメーターは、ソリッドステート記憶媒体110の初期化の間に、ソリッドステート記憶媒体110に発行される各コマンドを使用して動的に、又はイベント若しくは時間間隔などのトリガーに応答して、ソリッドステート記憶媒体110の動作の間に、一旦設定することができる。ソリッドステート記憶装置コントローラ104は、一実施形態では、ソリッドステート記憶媒体110の有用性の改善、エラーの低減などのために、ソリッドステート記憶媒体110の記憶セルに関する1つ以上の設定パラメーターを、事前対応的に設定する。
システム100は、ソリッドステート記憶デバイス102に接続される、1つ以上のコンピュータ112を含む。コンピュータ112は、ホスト、サーバ、ストレージエリアネットワーク(「SAN」)の記憶装置コントローラ、ワークステーション、パーソナルコンピュータ、ラップトップコンピュータ、ハンドヘルドコンピュータ、スーパーコンピュータ、コンピュータクラスター、ネットワークスイッチ、ルーター又は専用機器、データベース又は記憶機器、データ取得又はデータ捕捉システム、診断システム、試験システム、ロボット、携帯用電子デバイス、無線デバイスなどとすることができる。別の実施形態では、コンピュータ112は、クライアントとすることができ、ソリッドステート記憶デバイス102は、コンピュータ112から送られるデータ要求にサービスを提供するように自律的に動作する。この実施形態では、コンピュータ112及びソリッドステート記憶デバイス102は、コンピュータネットワーク、システムバス、又はコンピュータ112と自律的ソリッドステート記憶デバイス102との間の接続に好適な他の通信手段を使用して、接続することができる。
一実施形態では、システム100は、1つ以上のコンピュータネットワーク116を通じて、1つ以上のコンピュータ112に接続される、1つ以上のクライアント114を含む。クライアント114は、ホスト、サーバ、SANの記憶装置コントローラ、ワークステーション、パーソナルコンピュータ、ラップトップコンピュータ、ハンドヘルドコンピュータ、スーパーコンピュータ、コンピュータクラスター、ネットワークスイッチ、ルーター又は専用機器、データベース又は記憶機器、データ取得又はデータ捕捉システム、診断システム、試験システム、ロボット、携帯用電子デバイス、無線デバイスなどとすることができる。コンピュータネットワーク116としては、インターネット、広域ネットワーク(「WAN」)、都市圏ネットワーク(「MAN」)、構内ネットワーク(「LAN」)、トークンリング、無線ネットワーク、ファイバーチャネルネットワーク、SAN、ネットワーク接続ストレージ(「NAS」)、ESCONなど、又は任意のネットワークの組み合わせを挙げることができる。コンピュータネットワーク116としてはまた、IEEE 802系統のネットワーク技術からのネットワーク、そのようなイーサネット、トークンリング、WiFi、WiMaxなども挙げることができる。
コンピュータネットワーク116としては、サーバ、スイッチ、ルーター、ケーブル布線、ラジオ、及びコンピュータ112とクライアント114とのネットワーク化を促進するために使用される他の設備機器を挙げることができる。一実施形態では、システム100は、コンピュータネットワーク116を介してピアとして通信する、複数のコンピュータ112を含む。別の実施形態では、システム100は、コンピュータネットワーク116を介してピアとして通信する、複数のソリッドステート記憶デバイス102を含む。当業者には、1つ以上のクライアント114の間に、単一接続若しくは冗長接続を有する、1つ以上のコンピュータネットワーク116及び関連機器を含む他のコンピュータネットワーク116、あるいは1つ以上のソリッドステート記憶デバイス102を有する他のコンピュータ、又は1つ以上のコンピュータ112に接続される1つ以上のソリッドステート記憶デバイス102が認識されるであろう。一実施形態では、システム100は、コンピュータ112を使用することなく、コンピュータネットワーク116を通じてクライアント114に接続される2つ以上のソリッドステート記憶デバイス102を含む。ソリッドステート記憶装置コントローラ104は、特定の実施形態では、コンピュータ112のプロセッサから、及び/又はクライアント114から、上述のような1つ以上の通信バスを介して、ソリッドステート記憶媒体110内の記憶に関する原始データを受信する。
ソリッドステート記憶デバイス
図2は、本発明によるソリッドステート記憶デバイス102内の、書き込みデータパイプライン106及び読み取りデータパイプライン108を含む、ソリッドステート記憶デバイスコントローラ202の一実施形態200を示す概略ブロック図である。ソリッドステート記憶デバイスコントローラ202は、ハードウェアとして、ソフトウェアとして、又はハードウェアとソフトウェアとの組み合わせとして、具体化することができる。ソリッドステート記憶デバイスコントローラ202は、多数のソリッドステート記憶装置コントローラ0〜N(104a〜n)を含み得、それぞれがソリッドステート記憶媒体110を制御する。図示の実施形態では、2つのソリッドステートコントローラが示される。ソリッドステートコントローラ0(104a)及びソリッドステート記憶装置コントローラN(104n)であり、それぞれが、ソリッドステート記憶媒体110a〜nを制御する。図示の実施形態では、ソリッドステート記憶装置コントローラ0(104a)は、接続されたソリッドステート記憶媒体110aがデータを記憶するように、データチャネルを制御する。ソリッドステート記憶装置コントローラN(104n)は、記憶されるデータに関連する索引メタデータチャネルを制御し、関連するソリッドステート記憶媒体110nが、索引メタデータを記憶する。代替的実施形態では、ソリッドステート記憶デバイスコントローラ202は、単一のソリッドステート記憶媒体110aを備える単一のソリッドステートコントローラ104aを含む。別の実施形態では、複数個のソリッドステート記憶装置コントローラ104a〜n、及び関連するソリッドステート記憶媒体110a〜nが存在する。一実施形態では、1つ以上のソリッドステートコントローラ104a〜104n−1が、それらの関連するソリッドステート記憶媒体110a〜110n−1に結合されて、データを制御する一方で、少なくとも1つのソリッドステート記憶装置コントローラ104nが、その関連するソリッドステート記憶媒体110nに結合されて、索引メタデータを制御する。
一実施形態では、少なくとも1つのソリッドステートコントローラ104は、現場プログラム可能ゲートアレイ(「FPGA」)を含み、コントローラ機能が、FPGA内にプログラムされる。特定の実施形態では、FPGAは、Xilinx(登録商標)FPGAである。別の実施形態では、ソリッドステート記憶装置コントローラ104は、特定用途向け集積回路(「ASIC」)又はカスタム論理ソリューションなどの、ソリッドステート記憶装置コントローラ104として特定的に設計される構成要素を含む。各ソリッドステート記憶装置コントローラ104は、典型的には、図3Aに関連して更に説明される、書き込みデータパイプライン106及び読み取りデータパイプライン108を含む。別の実施形態では、少なくとも1つのソリッドステート記憶装置コントローラ104は、FPGA、ASIC、及びカスタム論理構成要素の組み合わせで構成される。特定の実施形態では、ソリッドステート記憶装置コントローラ104の少なくとも一部分は、コンピュータ112に対して実行するデバイスドライバなどに統合されるか、それらの一部であるか、及び/又はそれらと通信する。
ソリッドステート記憶装置
ソリッドステート記憶媒体110は、バンク214内に配列され、双方向記憶入出力(「I/O」)バス210を通じて並列にアクセスされる、不揮発性ソリッドステート記憶素子216、218、220のアレイである。記憶I/Oバス210は、一実施形態では、いずれの時点でも、単方向通信が可能である。例えば、ソリッドステート記憶媒体110にデータが書き込まれている場合、ソリッドステート記憶媒体110からデータを読み取ることはできない。別の実施形態では、データは、同時に双方向で流れることができる。しかしながら、双方向とは、データバスに関連して本明細書で使用するとき、一度に一方向のみに流れるデータを有し得るが、双方向データバス上で一方向に流れるデータが停止すると、その双方向データバス上で、データが反対方向に流れることができるデータ経路を指す。
ソリッドステート記憶素子(例えば、SSS 0.0(216a))は、典型的には、回路基板上のチップ(1つ以上のダイのパッケージ)又はダイとして構成される。図示のように、ソリッドステート記憶素子(例えば、216a)は、他のソリッドステート記憶素子(例えば、218a)からは、たとえこれらの幾つかの素子が、チップパッケージ、チップパッケージの積み重ね体、又は何らかの他のパッケージ素子内に一体となってパッケージ化される場合であっても、独立的に、又は半独立的に動作する。図示のように、ソリッドステート記憶素子216a、216b、216mの行は、バンク214として指定される。図示のように、「n」個のバンク214a〜n、及び1つのバンク当たり「m」個のソリッドステート記憶素子216a〜m、218a〜m、220a〜mが、ソリッドステート記憶媒体110内の、n×mのソリッドステート記憶素子216、218、220のアレイ内に存在し得る。当然ながら、種々の実施形態は、n及びmに関して種々の値を含み得る。一実施形態では、ソリッドステート記憶媒体110aは、8つのバンク214を有して、1つのバンク214当たり20個のソリッドステート記憶素子216、218、220を含む。一実施形態では、ソリッドステート記憶媒体110aは、8つのバンク214を有して、1つのバンク214当たり24個のソリッドステート記憶素子216、218、220を含む。n×mの記憶素子216、218、220に加えて、1つ以上の追加的な列(P)もまた、1つ以上の行に関する他のソリッドステート記憶素子216a、216b、216mと並列に、アドレス指定し、操作することができる。追加されるP列は、一実施形態では、特定のバンクに関するm個の記憶素子を範囲とするECCチャンク(すなわち、ECC符号語)の部分に対する、パリティデータを記憶する。一実施形態では、各ソリッドステート記憶素子216、218、220は、シングルレベルセル(「SLC」)のデバイスから構成される。別の実施形態では、各ソリッドステート記憶素子216、218、220は、マルチレベルセル(「MLC」)のデバイスから構成される。
一実施形態では、共通の記憶I/Oバス210aを共有する、ソリッドステート記憶素子(例えば、216b、218b、220b)は、一体となってパッケージ化される。一実施形態では、ソリッドステート記憶素子216、218、220は、1つ以上のチップが垂直に積み重ねられた状態で、1つのチップ当たり1つ以上のダイを有し得、各ダイには、独立してアクセスすることができる。別の実施形態では、ソリッドステート記憶素子(例えば、SSS 0.0(216a))は、1つのダイ当たり1つ以上の仮想ダイ、及び1つのチップ当たり1つ以上のダイ、及び垂直に積み重ねられた1つ以上のチップを有し得、各仮想ダイには、独立してアクセスすることができる。別の実施形態では、ソリッドステート記憶素子SSS 0.0(216a)は、1つのダイ当たり1つ以上の仮想ダイ、及び1つのチップ当たり1つ以上のダイを、それら1つ以上のダイのうちの一部又は全てが垂直に積み重ねられた状態で有し得、各仮想ダイには、独立してアクセスすることができる。
一実施形態では、2つのダイが垂直に積み重ねられ、1グループ当たり4つの積み重ねを有して、8つの記憶素子(例えば、SSS 0.0〜SSS 8.0)216a〜220aを形成し、それぞれが、別個のバンク214a〜n内にある。別の実施形態では、24個の記憶素子(例えば、SSS 0.0〜SSS 0.24)216が、論理バンク214aを形成することにより、8つの論理バンクのそれぞれは、24個の記憶素子(例えば、SSS 0.0〜SSS 8.24)216、218、220を有する。データは、ソリッドステート記憶媒体110へ、記憶I/Oバス210を介して、特定のグループの記憶素子(SSS 0.0〜SSS 8.0)216a、218a、220aの全ての記憶素子へ送られる。記憶制御バス212aを使用して、特定のバンク(例えば、バンク0(214a))を選択することにより、全てのバンク214に接続された記憶I/Oバス210を介して受信されるデータは、選択されたバンク214aにのみ書き込まれる。
特定の実施形態では、記憶制御バス212及び記憶I/Oバス210は、ソリッドステートコントローラ104によって共に使用され、アドレス指定情報、記憶素子コマンド情報、及び記憶されるデータを通信する。当業者には、このアドレス、データ、及びコマンド情報は、これらのバス212、210の一方、若しくは他方を使用して、又は制御情報の各タイプに関して別個のバスを使用して、通信し得ることが認識されよう。一実施形態では、アドレス指定情報、記憶素子コマンド情報、及び記憶データは、記憶I/Oバス210上を移動し、記憶制御バス212は、バンクを作動させるため、並びに記憶I/Oバス210のライン上のデータが、アドレス指定情報、記憶素子コマンド情報、又は記憶データを構成するか否かを識別するための信号を搬送する。
例えば、「コマンド有効」などの、記憶制御バス212上の制御信号は、記憶I/Oバス210のライン上のデータが、プログラム、消去、リセット、読み取りなどのような、記憶素子コマンドであることを指示し得る。「アドレス有効」などの、記憶制御バス212上の制御信号は、記憶I/Oバス210のライン上のデータが、消去ブロック識別子、ページ識別子、及び任意選択的な、特定の記憶素子内部のページ内部でのオフセットなどの、アドレス指定情報であることを指示し得る。最終的に、「コマンド有効」及び「アドレス有効」の双方に関する、記憶制御バス212上の制御信号の不在は、記憶I/Oバス210のライン上のデータが、前回アドレス指定された、消去ブロック、物理ページ、及び任意選択的な、特定の記憶素子のページ内部でのオフセットで、記憶素子上に記憶される、記憶データであることを指示し得る。
一実施形態では、記憶I/Oバス210は、1つ以上の独立I/Oバス(210a.a〜m、210n.a〜mを含む、「IIOBa〜m」)から構成され、各列の内部のソリッドステート記憶素子は、独立I/Oバスの1つを共有し、これらの独立I/Oバスは、各ソリッドステート記憶素子216、218、220に並列にアクセスすることにより、全てのバンク214が同時にアクセスされる。例えば、記憶I/Oバス210の1つのチャネルは、各バンク214a〜nの、第1のソリッドステート記憶素子216a、218a、220aに同時にアクセスすることができる。記憶I/Oバス210の第2のチャネルは、各バンク214a〜nの、第2のソリッドステート記憶素子216b、218b、220bに同時にアクセスすることができる。ソリッドステート記憶素子216a、216b、216mの各行は、同時にアクセスされる。一実施形態では、ソリッドステート記憶素子216、218、220は、マルチレベル(物理的に積み重ねられた)であり、ソリッドステート記憶素子216、218、220の全ての物理レベルは、同時にアクセスされる。本明細書で使用するとき、「同時に」とは、ほぼ同時のアクセスもまた包含し、この場合、スイッチングノイズを回避するために、デバイスは若干異なる間隔でアクセスされる。同時に、とは、この文脈で使用され、コマンド及び/又はデータが独立して次々に送られる、順次アクセス又は直列アクセスからは区別される。
典型的には、バンク214a〜nは、記憶制御バス212を使用して、独立して選択される。一実施形態では、バンク214は、チップ有効又はチップ選択を使用して選択される。チップ選択及びチップ有効の双方が利用可能である場合は、記憶制御バス212は、マルチレベルソリッドステート記憶素子216、218、220の、1つのレベルを選択することができる。他の実施形態では、他のコマンドが、記憶制御バス212によって使用され、マルチレベルソリッドステート記憶素子216、218、220の、1つのレベルが独立して選択される。ソリッドステート記憶素子216、218、220はまた、記憶I/Oバス210及び記憶制御バス212上に送信される、制御情報とアドレス情報との組み合わせを通じて、選択することもできる。
一実施形態では、各ソリッドステート記憶素子216、218、220は、消去ブロックへと区分化され、各消去ブロックは、ページへと区分化される。ソリッドステート記憶素子216、218、220上の消去ブロックは、物理消去ブロック又は「PEB」と称することができる。典型的なページは、2000バイト(「2kB」)である。一実施例では、ソリッドステート記憶素子(例えば、SSS 0.0)は、2つのレジスタを含み、2つのページをプログラムすることにより、2つのレジスタのソリッドステート記憶素子216、218、220は、4kBの容量を有し得る。20個のソリッドステート記憶素子216a、216b、216mのバンク214は、この場合、記憶I/Oバス210のチャネルから出る同一アドレスを使用してアクセスされる、80kBの容量のページを有する。
この80kBの、ソリッドステート記憶素子216a、216b、216mのバンク214内のページのグループは、論理ページ又は仮想ページと称することができる。同様に、バンク214aの各記憶素子216a〜mの消去ブロックをグループ化して、論理消去ブロック又は仮想消去ブロックを形成することができる。一実施形態では、ソリッドステート記憶素子216、218、220内部のページの消去ブロックは、消去コマンドがソリッドステート記憶素子216、218、220内部に受信される場合に消去される。ソリッドステート記憶素子216、218、220内部の消去ブロック、ページ、プレーン、あるいは他の論理区画及び物理区画のサイズ並びに数は、時が経過するにつれて、技術の進歩と共に変化することが予測されるが、新たな構成と一致する多くの実施形態が可能であり、本明細書の全般的な説明と一致することが予測される。
典型的には、ソリッドステート記憶素子216、218、220内部の特定の場所にパケットが書き込まれ、そのパケットが、特定のバンクの特定の記憶素子の特定の物理消去ブロックに特有である、特定のページ内部の場所に書き込まれることが意図される場合、物理アドレスが記憶I/Oバス210上に送られ、その後にパケットが続く。この物理アドレスには、ソリッドステート記憶素子216、218、220が、そのパケットを、ページ内部の指定された場所へ向かわせるための、十分な情報が含まれる。記憶素子の列内の全ての記憶素子(例えば、SSS 0.0〜SSS N.0(216a、218a、220a))は、記憶I/Oバス内部の適切なバス210a.aによって同時にアクセスされるため、適切なページに到達し、記憶素子の列(SSS 0.0〜SSS N.0(216a、218a、220a))内の同様にアドレス指定されたページにパケットが書き込まれることを避けるためには、データパケットが書き込まれるべき正しいページを有するソリッドステート記憶素子SSS 0.0(216a)を含むバンク214aが、記憶制御バス212によって同時に選択される。
同様に、記憶I/Oバス210上の読み取りコマンドを履行することは、単一のバンク214a、及びそのバンク214a内部の適切なページを選択するための、記憶制御バス212上の同時信号を必要とする。一実施形態では、読み取りコマンドは、ページ全体を読み取り、またバンク214内には、複数のソリッドステート記憶素子216a、216b、216mが並列して存在するため、読み取りコマンドで、論理ページ全体が読み取られる。しかしながら、読み取りコマンドは、バンクインターリーブに関連して以下で説明されるように、サブコマンドへと分解することができる。論理ページはまた、書き込み操作でもアクセスすることができる。
消去ブロック消去コマンドは、特定の消去ブロックを消去するための、特定の消去ブロックアドレスを使用して、記憶I/Oバス210を介して、消去ブロックを消去するように送り出すことができる。典型的には、消去ブロック消去コマンドは、記憶I/Oバス210の並列パスを介して、論理消去ブロックを消去するために送られ、それぞれが、特定の消去ブロックを消去するための、特定の消去ブロックアドレスを有する。同時に、記憶制御バス212を介して、特定のバンク(例えば、バンク0(214a))が選択され、全てのバンク(バンク1〜N(214b〜n)内の同様にアドレス指定された消去ブロックが消去されることを防ぐ。あるいは、記憶制御バス212を介して、特定のバンク(例えば、バンク0(214a))が選択されないことにより、全てのバンク(バンク1〜N(214b〜n)内の同様にアドレス指定された消去ブロックを、同時に消去することが可能になる。他のコマンドもまた、記憶I/Oバス210と記憶制御バス212との組み合わせを使用して、特定の場所に送ることができる。当業者には、双方向記憶I/Oバス210及び記憶制御バス212を使用して、特定の記憶場所を選択するための、他の方法が認識されるであろう。
一実施形態では、パケットは、ソリッドステート記憶媒体110に、順次書き込まれる。例えば、パケットは、記憶素子216のバンク214aの記憶書き込みバッファに流されて、このバッファが一杯になると、指定された論理ページに、パケットがプログラムされる。次いで、パケットが記憶書き込みバッファを再充填して、一杯になると、次の論理ページに、パケットが書き込まれる。次の論理ページは、同一のバンク214a、又は別のバンク(例えば、214b)内に存在し得る。このプロセスは、論理ページから論理ページへと次々に、典型的には論理消去ブロック(「LEB」)が一杯になるまで、継続する。別の実施形態では、このストリーミングは、プロセスの継続と共に、論理消去ブロックの境界を横断して、論理消去ブロックから論理消去ブロックへと次々に継続することができる。
読み取り、修正、書き込み操作では、要求データに関連するデータパケットが検索され、読み取り操作で読み取られる。修正された、修正要求データのデータセグメントは、それらが読み取られる場所には書き込まれない。その代わりに、修正データセグメントは、データパケットに再び変換され、次いで、現時点で書き込まれている論理ページ内の、次の利用可能な場所に順次書き込まれる。それぞれのデータパケットに関する索引項目は、修正データセグメントを含むパケットを指すように修正される。同一の要求データに関連する、修正されていないデータパケットに関する索引内の項目は、未修正データパケットの元の場所に対するポインタを含むことになる。それゆえ、元の要求データが維持される場合には、例えば、前バージョンの要求データを維持するために、元の要求データは、元から書き込まれている全てのデータパケットに対するポインタを索引内に有することになる。新たな要求データは、一部の元のデータパケットに対する、索引内のポインタと、現時点で書き込まれている、論理ページ内の修正データパケットに対するポインタとを有することになる。
コピー操作では、索引は、ソリッドステート記憶媒体110内に記憶された数多くのパケットにマップされる、元の要求データに関する項目を含む。コピーが作成される場合、要求データの新たなコピーが作り出され、その要求データの新たなコピーを元のパケットにマップする、新たな項目が索引内に作り出される。要求データの新たなコピーはまた、ソリッドステート記憶媒体110に書き込まれ、その場所が、索引内の新たな項目にマップされる。要求データパケットの新たなコピーは、要求データのコピーに伝搬していない変更が、元の要求データ内に加えられており、索引が失われるか又は破損している場合に参照される、元の要求データ内部のパケットを識別するために、使用することができる。
有利には、順次書き込みパケットは、より均等なソリッドステート記憶媒体110の使用を促進し、ソリッド記憶デバイスコントローラ202が、記憶ホットスポットを監視して、ソリッドステート記憶媒体110内の様々な論理ページの使用を均等にすることを可能にする。順次書き込みパケットはまた、以下で詳細に説明される、強力で効率的なガベージコレクションシステムも促進する。当業者には、データパケットの順次記憶の他の利益が認識されるであろう。
ソリッドステート記憶デバイスコントローラ
様々な実施形態では、ソリッドステート記憶デバイスコントローラ202はまた、以下で説明される、データバス204、ローカルバス206、バッファコントローラ208、バッファ0〜N(222a〜n)、マスターコントローラ224、ダイレクトメモリアクセス(「DMA」)コントローラ226、メモリコントローラ228、ダイナミックメモリアレイ230、スタティックランダムメモリアレイ232、管理コントローラ234、管理バス236、システムバス240へのブリッジ238、及びその他の論理242も含む。他の実施形態では、システムバス240は、以下で説明される、リモートDMA(「RDMA」)コントローラ246を一部が含み得る1つ以上のネットワークインターフェースカード(「NIC」)244、1つ以上の中央処理装置(「CPU」)248、1つ以上の外部メモリコントローラ250及び関連する外部メモリアレイ252、1つ以上の記憶装置コントローラ254、ピアコントローラ256、並びに特定用途向けプロセッサ258に結合される。システムバス240に接続される構成要素244〜258は、コンピュータ112内に位置することができ、又は他のデバイスとすることもできる。
典型的には、ソリッドステート記憶装置コントローラ104は、記憶I/Oバス210を介して、ソリッドステート記憶媒体110にデータを通信する。ソリッドステート記憶装置が、バンク214内に配列され、各バンク214が、並列にアクセスされる複数の記憶素子216a、216b、216mを含む、典型的な実施形態では、記憶I/Oバス210は、バスのアレイであり、1つのバスは、複数のバンク214を範囲とする、記憶素子216、218、220の各列に関するものである。本明細書で使用するとき、用語「記憶I/Oバス」とは、1つのI/Oバス210、又はデータ非依存性バスのアレイ204を指す場合がある。一実施形態では、記憶素子の列(例えば、216a、218a、220a)にアクセスする各記憶I/Oバス210は、記憶素子の列216a、218a、220a内でアクセスされる記憶区画(例えば、消去ブロック)に関する、論理から物理へのマッピングを含み得る。このマッピング(又は不良ブロック再マッピング)により、記憶区画の物理アドレスに対してマップされる論理アドレスは、最初の記憶区画が障害を起こすか、部分的に障害を起こすか、アクセス不能となるか、又は何らかの他の問題を有する場合には、異なる記憶区画に再マップすることが可能になる。
データはまた、要求デバイス155から、システムバス240、ブリッジ238、ローカルバス206、バッファ222を通り、最終的にはデータバス204を介して、ソリッドステート記憶装置コントローラ104に通信することもできる。データバス204は、典型的には、バッファコントローラ208で制御される、1つ以上のバッファ222a〜nに接続される。バッファコントローラ208は、典型的には、ローカルバス206からバッファ222への、並びにデータバス204を通り、パイプラインの入力バッファ306及び出力バッファ330への、データの転送を制御する。バッファコントローラ208は、典型的には、種々のクロックドメインに配慮するため、データの衝突を防ぐためなどに、要求デバイスから到着したデータが、バッファ222内に一時的に記憶され、次いでデータバス204上に転送され得る方式、又はその逆の方式も同様に制御する。バッファコントローラ208は、典型的には、マスターコントローラ224と協働して、データの流れを調整する。データが到着する際、データは、システムバス240上に到着して、ブリッジ238を通じてローカルバス206へと転送されることになる。
典型的には、データは、マスターコントローラ224及びバッファコントローラ208によって方向付けられて、ローカルバス206から、1つ以上のデータバッファ222へと転送される。次いでデータは、バッファ222から、データバス204へ出て、ソリッドステートコントローラ104を通り、NANDフラッシュ又は他の記憶媒体などの、ソリッドステート記憶媒体110上へと流れる。一実施形態では、データ、及びそのデータと共に到着する関連する帯域外メタデータ(「メタデータ」)は、1つ以上のソリッドステート記憶装置コントローラ104a〜104n−1及び関連するソリッドステート記憶媒体110a〜110n−1を含む、1つ以上のデータチャネルを使用して通信され、その一方で、少なくとも1つのチャネル(ソリッドステート記憶装置コントローラ104n、ソリッドステート記憶媒体110n)は、索引情報、及びソリッドステート記憶デバイス102の内部で生成される他のメタデータなどの、帯域内メタデータに専用である。
ローカルバス206は、典型的には、ソリッドステート記憶デバイスコントローラ202の内部のデバイス間、及びソリッドステート記憶デバイス102の内部のデバイスと、システムバス240に接続されるデバイス244〜258との間の、データ及びコマンドの通信を可能にする、双方向バス又はバスのセットである。ブリッジ238は、ローカルバス206とシステムバス240との間の通信を促進する。当業者には、リング構造又は切り換え星形構成などの、他の実施形態、並びにバス240、206、204、210、及びブリッジ238の機能が認識されるであろう。
システムバス240は、典型的には、ソリッドステート記憶デバイス102が設置若しくは接続される、コンピュータ112又は他のデバイスのバスである。一実施形態では、システムバス240は、PCI−eバス、シリアルアドバンスドテクノロジーアタッチメント(「シリアルATA」)バス、パラレルATAなどとすることができる。別の実施形態では、システムバス240は、小型コンピュータシステムインターフェース(「SCSI」)、ファイアワイヤー、ファイバーチャネル、USB、PCIe−ASなどのような、外部バスである。ソリッドステート記憶デバイス102は、デバイスの内部に適合するように、又は外部接続デバイスとして、パッケージ化することができる。
ソリッドステート記憶デバイスコントローラ202は、ソリッドステート記憶デバイス102内部の、より高いレベルの機能を制御するマスターコントローラ224を含む。マスターコントローラ224は、様々な実施形態では、オブジェクト要求及び他の要求を解釈することによってデータの流れを制御し、索引の作成を指示して、データに関連するオブジェクト識別子を、関連データの物理的な場所にマップし、DMA要求を調整することなどを行なう。本明細書で説明される機能の多くが、マスターコントローラ224によって、完全に、又は部分的に制御される。
一実施形態では、マスターコントローラ224は、埋め込み型コントローラを使用する。別の実施形態では、マスターコントローラ224は、ダイナミックメモリアレイ230(ダイナミックランダムアクセスメモリ「DRAM」)、スタティックメモリアレイ232(スタティックランダムアクセスメモリ「SRAM」)などのようなローカルメモリを使用する。一実施形態では、このローカルメモリは、マスターコントローラ224を使用して制御される。別の実施形態では、マスターコントローラ224は、メモリコントローラ228を介して、ローカルメモリにアクセスする。別の実施形態では、マスターコントローラ224は、Linuxサーバを走らせ、ワールドワイドウェブ、ハイパーテキストマークアップ言語(「HTML」)などのような様々な共通のサーバインターフェースに対応することができる。別の実施形態では、マスターコントローラ224は、ナノプロセッサを使用する。マスターコントローラ224は、プログラム可能論理、若しくは標準論理を使用して、又は上述のコントローラのタイプの任意の組み合わせを使用して構築することができる。マスターコントローラ224は、ハードウェアとして、ソフトウェアとして、又はハードウェアとソフトウェアとの組み合わせとして、具体化することができる。当業者には、マスターコントローラ224に関する多くの実施形態が認識されるであろう。
一実施形態では、記憶デバイス/ソリッドステート記憶デバイスコントローラ202が、複数のデータ記憶デバイス/ソリッドステート記憶媒体110a〜nを管理する場合は、マスターコントローラ224は、ソリッドステート記憶装置コントローラ104a〜nなどの内部コントローラの間に、作業負荷を分割する例えば、マスターコントローラ224が、データ記憶デバイス(例えば、ソリッドステート記憶媒体110a〜n)に書き込むべきオブジェクトを分割することにより、接続された各データ記憶デバイス上に、そのオブジェクトの一部分を記憶させることができる。この特徴は、より迅速な記憶、及びより迅速なオブジェクトへのアクセスを可能にする、性能強化である。一実施形態では、マスターコントローラ224は、FPGAを使用して実装される。別の実施形態では、マスターコントローラ224内部のファームウェアを、管理バス236を通じて、NIC 244に接続されるネットワークを介したシステムバス240を通じて、又はシステムバス240に接続される他のデバイスを通じて、更新することができる。
一実施形態では、オブジェクトを管理するマスターコントローラ224が、ブロック記憶装置をエミュレートすることにより、記憶デバイス/ソリッドステート記憶デバイス102に接続される、コンピュータ112又は他のデバイスは、記憶デバイス/ソリッドステート記憶デバイス102を、ブロック記憶デバイスとして見なし、記憶デバイス/ソリッドステート記憶デバイス102内の特定の物理アドレスにデータを送る。次いでマスターコントローラ224は、ブロックを分割して、そのマスターコントローラ224がオブジェクトとするように、データブロックを記憶する。次いでマスターコントローラ224は、ブロック、及びブロックと共に送られる物理アドレスを、マスターコントローラ224によって判定される実際の場所にマップする。このマッピングは、オブジェクト索引内に記憶される。典型的には、ブロックエミュレーションに関しては、ブロックデバイスのアプリケーションプログラムインターフェース(「API」)が、記憶デバイス/ソリッドステート記憶デバイス102を、ブロック記憶デバイスとして使用することを望む、コンピュータ112、クライアント114、又は他のデバイス内の、ドライバ内に提供される。
別の実施形態では、マスターコントローラ224は、NICコントローラ244及び埋め込み型RDMAコントローラ246と協調して、データセット及びコマンドセットのジャストインタイムRDMA転送を供給する。NICコントローラ244を、非透過性ポートの背後に隠して、カスタムドライバの使用を可能にすることができる。同様に、クライアント114上のドライバも、標準的なスタックAPIを使用するI/Oメモリドライバを通して、コンピュータネットワーク116にアクセスし、NIC 244と共に動作することができる。
一実施形態では、マスターコントローラ224はまた、独立ドライブの冗長アレイ(「RAID」)コントローラでもある。データ記憶デバイス/ソリッドステート記憶デバイス102が、1つ以上の他のデータ記憶デバイス/ソリッドステート記憶デバイス102とネットワーク化される場合は、マスターコントローラ224は、単一階層RAID、多階層RAID、プログレッシブRAIDなどに関するRAIDコントローラとすることができる。マスターコントローラ224はまた、一部のオブジェクトがRAIDアレイ内に記憶され、他のオブジェクトがRAIDを使用せずに記憶されることも可能にする。別の実施形態では、マスターコントローラ224は、分散RAIDコントローラ素子とすることができる。別の実施形態では、マスターコントローラ224は、多RAID、分散RAID、及び別の箇所で説明されるような他の機能を含み得る。一実施形態では、マスターコントローラ224は、RAID様の構造内のデータの記憶を管理し、この場合パリティ情報が、論理ページの1つ以上の記憶素子216、218、220内に記憶され、このパリティ情報は、同一の論理ページの他の記憶素子216、218、220内に記憶されたデータを保護する。
一実施形態では、マスターコントローラ224は、単一又は冗長ネットワーク管理機器(例えば、スイッチ)と協調して、経路指定を確立し、帯域幅利用、フェイルオーバーなどを平衡させる。別の実施形態では、マスターコントローラ224は、統合された特定用途向け論理(ローカルバス206を介して)、及び関連するドライバソフトウェアと協調する。別の実施形態では、マスターコントローラ224は、接続された特定用途向けプロセッサ258又は論理(外部システムバス240を介して)、及び関連するドライバソフトウェアと協調する。別の実施形態では、マスターコントローラ224は、遠隔の特定用途向け論理(コンピュータネットワーク116を介して)、及び関連するドライバソフトウェアと協調する。別の実施形態では、マスターコントローラ224は、ローカルバス206又は外部バス接続のハードディスクドライブ(「HDD」)記憶装置コントローラと協調する。
一実施形態では、マスターコントローラ224は、1つ以上の記憶装置コントローラ254と通信し、この場合、記憶デバイス/ソリッドステート記憶デバイス102は、SCSIバス、インターネットSCSI(「iSCSI)、ファイバーチャネルなどを通じて接続される記憶デバイスとして現れることができる。その一方で、記憶デバイス/ソリッドステート記憶デバイス102は、オブジェクトを自律的に管理することができ、オブジェクトファイルシステム又は分散オブジェクトファイルシステムとして現れることができる。マスターコントローラ224はまた、ピアコントローラ256及び/又は特定用途向けプロセッサ258によってアクセスすることもできる。
別の実施形態では、マスターコントローラ224は、自律的統合管理コントローラと協調して、FPGAコード及び/又はコントローラソフトウェアを定期的に検証し、FPGAコードを実行(リセット)の間に検証し、かつ/又はコントローラソフトウェアを電源投入(リセット)の間に検証し、外部リセット要求に対応し、ウオッチドッグタイムアウトによるリセット要求に対応し、電圧、電流、電力、温度、及び他の環境測定値、並びに閾値割り込みの設定に対応する。別の実施形態では、マスターコントローラ224は、ガベージコレクションを管理して、消去ブロックを、再使用するために解放する。別の実施形態では、マスターコントローラ224はウェアレベリングを管理する。別の実施形態では、マスターコントローラ224は、データ記憶デバイス/ソリッドステート記憶デバイス102が、複数の論理デバイスへと区分化されることを可能にし、区分化に基づく媒体暗号化を可能にする。更に別の実施形態では、マスターコントローラ224は、先端的マルチビットECC訂正を使用するソリッドステート記憶装置コントローラ104に対応する。当業者には、記憶装置コントローラ202内の、又はより具体的には、ソリッドステート記憶デバイス102内の、マスターコントローラ224の、他の特徴及び機能が認識されるであろう。
一実施形態では、ソリッドステート記憶デバイスコントローラ202は、ダイナミックランダムメモリアレイ230及び/又はスタティックランダムメモリアレイ232を制御する、メモリコントローラ228を含む。上述のようにメモリコントローラ228は独立させることができ、又はマスターコントローラ224に統合することもできる。メモリコントローラ228は、典型的には、DRAM(ダイナミックランダムメモリアレイ230)及びSRAM(スタティックランダムメモリアレイ232)などの一部のタイプの揮発性メモリを制御する。他の実施例では、メモリコントローラ228はまた、電気的消去可能プログラム可能読み取り専用メモリ(「EEPROM」)などのような、他のメモリのタイプも制御する。他の実施形態では、メモリコントローラ228は、2つ以上のメモリのタイプを制御し、メモリコントローラ228は、2つ以上のコントローラを含み得る。典型的にはメモリコントローラ228は、実行可能な限り多くのSRAM 232を制御し、DRAM 230によってSRAM 232を補完する。
一実施形態では、オブジェクト索引がメモリ230、232内に記憶され、次いで定期的に、ソリッドステート記憶媒体110n又は他の不揮発性メモリのチャネルにオフロードされる。当業者には、メモリコントローラ228、ダイナミックメモリアレイ230、及びスタティックメモリアレイ232の、他の使用並びに構成が認識されるであろう。
一実施形態では、ソリッドステート記憶デバイスコントローラ202は、記憶デバイス/ソリッドステート記憶デバイス102と、1つ以上の外部メモリコントローラ250、並びに関連する外部メモリアレイ252及びCPU 248との間のDMA操作を制御する、DMAコントローラ226を含む。外部メモリコントローラ250及び外部メモリアレイ252が外部と称されるのは、それらが記憶デバイス/ソリッドステート記憶デバイス102の外部にあるためであることに留意されたい。更には、DMAコントローラ226はまた、NIC 244及び関連するRDMAコントローラ246を通じて、要求デバイスを使用するRDMA操作も制御することができる。
一実施形態では、ソリッドステート記憶デバイスコントローラ202は、管理バス236に接続される、管理コントローラ234を含む。典型的には、管理コントローラ234は、記憶デバイス/ソリッドステート記憶デバイス102の、環境評価基準及び環境状況を管理する。管理コントローラ234は、管理バス236を介して、デバイスの温度、ファンの速度、電力供給設定などを監視することができる。管理コントローラ234は、FPGAコード及びコントローラソフトウェアの記憶に関する、消去可能プログラム可能読み取り専用メモリ(「EEPROM」)の、読み取り及びプログラミングに対応することができる。典型的には、管理バス236は、記憶デバイス/ソリッドステート記憶デバイス102内部の、様々な構成要素に接続される。管理コントローラ234は、ローカルバス206を介して、警告、割り込みなどを通信することができ、又はシステムバス240若しくは他のバスへの、別個の接続を含み得る。一実施形態では、管理バス236は、Inter−Integrated Circuit(「I2C」)バスである。当業者には、管理バス236によって、記憶デバイス/ソリッドステート記憶デバイス102に接続される、管理コントローラ234の、他の関連機能及び使用が認識されるであろう。
一実施形態では、ソリッドステート記憶デバイスコントローラ202は、特定用途向けにカスタマイズすることができる、その他の論理242を含む。典型的には、ソリッドステートデバイスコントローラ202又はマスターコントローラ224が、FPGA又は他の設定可能コントローラを使用して構成される場合は、具体的な用途、利用者要件、記憶要件などに基づいて、カスタム論理を含めることができる。
データパイプライン
図3Aは、本発明による、ソリッドステート記憶デバイス102内の、書き込みデータパイプライン106及び読み取りデータパイプライン108を有する、ソリッドステート記憶装置コントローラ104の一実施形態300を示す、概略ブロック図である。実施形態300は、データバス204、ローカルバス206、及びバッファコントローラ208を含み、これらは、図2のソリッドステート記憶デバイスコントローラ202に関連して説明されるものと、実質的に同様である。書き込みデータパイプライン106は、パケタイザー302及びエラー訂正符号(「ECC」)エンコーダ304を含む。他の実施形態では、書き込みデータパイプライン106は、入力バッファ306、書き込み同期バッファ308、書き込みプログラムモジュール310、圧縮モジュール312、暗号化モジュール314、ガベージコレクタバイパス316(読み取りデータパイプライン108内部に一部分を有する)、バイアスモジュール318、及び書き込みバッファ320を含む。読み取りデータパイプライン108は、読み取り同期バッファ328、ECCデコーダ322、デパケタイザー324、アライメントモジュール326、及び出力バッファ330を含む。他の実施形態では、読み取りデータパイプライン108は、逆バイアスモジュール332、ガベージコレクタバイパス316の一部分、暗号解除モジュール334、解凍モジュール336、及び読み取りプログラムモジュール338を含み得る。
ソリッドステート記憶装置コントローラ104はまた、制御及び状態レジスタ340、並びに制御キュー342、バンクインターリーブコントローラ344、同期バッファ346、記憶バスコントローラ348、並びにマルチプレクサー(「MUX」)350も含み得る。ソリッドステート記憶装置コントローラ104は、図示の実施形態では、設定モジュール352を含み、この設定モジュール352は、書き込みデータパイプライン106の一部分及び/又は読み取りデータパイプライン108の一部分とすることができ、あるいは書き込みデータパイプライン106及び読み取りデータパイプライン108から独立させることもできる。ソリッドステートコントローラ104並びに関連する書き込みデータパイプライン106及び読み取りデータパイプライン108の、構成要素を以下で説明する。他の実施形態では、同期的ソリッドステート記憶媒体110を使用することができ、同期バッファ308、328を削除することができる。
書き込みデータパイプライン
書き込みデータパイプライン106は、パケタイザー302を含み、このパケタイザー302は、直接的に、又は別の書き込みデータパイプライン106のステージを通じて間接的に、ソリッドステート記憶装置に書き込まれるべきデータ若しくはメタデータのセグメントを受信し、ソリッドステート記憶媒体110に関してサイズ設定される1つ以上のパケットを作り出す。データ又はメタデータのセグメントは、典型的には、オブジェクトなどの、データ構造の一部分であるが、また、データ構造全体も含み得る。別の実施形態では、データセグメントは、データのブロックの一部分であるが、また、データのブロック全体も含み得る。典型的には、データ構造などの、データのセットは、コンピュータ112、クライアント114、又は他のコンピュータ若しくはデバイスから受信され、ソリッドステート記憶デバイス102へ送信されて、データセグメントの形で、ソリッドステート記憶デバイス102又はコンピュータ112に流される。データセグメントはまた、データパーセルなどの、別の名称でも既知であり得るが、本明細書で参照されるように、データ構造又はデータブロックの、全て若しくは一部分を含む。
各データ構造は、1つ以上のパケットとして記憶される。各データ構造は、1つ以上のコンテナパケットを有し得る。各パケットは、ヘッダを含む。ヘッダは、ヘッダタイプフィールドを含み得る。タイプフィールドは、データ、属性、メタデータ、データセグメント区切り記号(マルチパケット)、データ構造、データリンクなどを含み得る。ヘッダはまた、パケット内に含まれるデータのバイト数などの、パケットのサイズに関する情報も含み得る。パケットの長さは、パケットのタイプによって規定することができる。ヘッダは、パケットとデータ構造との関係を規定する情報を含み得る。一例としては、データ構造内部でのデータセグメントの場所を識別するための、データパケットヘッダ内でのオフセットの使用の場合がある。当業者には、パケタイザー302によってデータに付加されるヘッダ内に含めることができる他の情報、及びデータパケットに付加することができる他の情報が認識されるであろう。
各パケットは、ヘッダと、恐らくは、データ又はメタデータのセグメントからの、データとを含む。各パケットのヘッダは、パケットを、そのパケットが属するデータ構造に関連付けるための関連情報を含む。例えば、ヘッダは、オブジェクト識別子若しくは他のデータ構造識別子、及びそのデータパケットが形成されたデータセグメント、オブジェクト、データ構造、若しくはデータブロックを指示するオフセットを含み得る。ヘッダはまた、パケットを記憶するために、記憶バスコントローラ348によって使用される、論理アドレスも含み得る。ヘッダはまた、パケット内に含まれるバイト数などの、パケットのサイズに関する情報も含み得る。ヘッダはまた、データセグメント又はデータ構造を復元する際、データセグメントが、データ構造内部で他のパケットに対して属する場所を識別するシーケンス番号も含み得る。ヘッダはヘッダタイプフィールドを含み得る。タイプフィールドは、データ、データ構造属性、メタデータ、データセグメント区切り記号(マルチパケット)、データ構造タイプ、データ構造リンクなどを含み得る。当業者には、パケタイザー302によってデータ若しくはメタデータに付加されるヘッダ内に含めることができる他の情報、及びパケットに付加することができる他の情報が認識されるであろう。
書き込みデータパイプライン106は、パケタイザー302から受信される1つ以上のパケットに関する、1つ以上のエラー訂正符号(「ECC」)を生成するECCエンコーダ304を含む。ECCエンコーダ304は、典型的には、エラー訂正アルゴリズムを使用して、1つ以上のデータパケットと共に記憶されるECC検査ビットを生成する。ECCエンコーダ304によって生成されるECCコードは、そのECCコードに関連する1つ以上のデータパケットと一体となってECCチャンクを構成する。1つ以上のデータパケットと共に記憶されるECCデータを使用して、送信及び記憶を通じてデータ内に導入されたエラーを検出及び訂正する。一実施形態では、パケットは、長さNの非符号化ブロックとして、ECCエンコーダ304内へと流される。長さSのシンドロームが算出され、付加されて、長さN+Sの符号化ブロックとして出力される。N及びSの値は、特定の性能、効率、及び堅牢性の評価基準を達成するために選択される、アルゴリズムの特性に応じて決定される。一実施形態では、ECCブロックとパケットとの間には、固定した関係は存在せず、パケットは2つ以上のECCブロックを含み得、ECCブロックは2つ以上のパケットを含み得、第1のパケットは、ECCブロックのいずれかの場所で終了することができ、第2のパケットは、同一のECCブロック内部の、第1のパケットの終了の後に開始することができる。一実施形態では、ECCアルゴリズムは動的に修正されない。一実施形態では、データパケットと共に記憶されるECCデータは、3ビット以上でエラーを訂正するほど十分に堅牢である。
有利には、2ビット以上の訂正、又は更に3ビット以上の訂正を可能にする堅牢なECCアルゴリズムにより、ソリッドステート記憶媒体110の耐用年数を延長させることが可能になる。例えばフラッシュメモリを、ソリッドステート記憶媒体110内の記憶媒体として使用する場合には、フラッシュメモリは、消去サイクル当り、エラーを伴わない約100,000回の書き込みが可能である。この使用限界は、堅牢なECCアルゴリズムを使用して、延長させることができる。ECCエンコーダ304及び対応するECCデコーダ322を、ソリッドステート記憶デバイス102に搭載することによって、ソリッドステート記憶デバイス102は、内部でエラーを訂正することができ、単一ビット訂正などの、堅牢性に劣るECCアルゴリズムを使用する場合よりも長い耐用年数を有する。しかしながら、他の実施形態では、ECCエンコーダ304は堅牢性に劣るアルゴリズムを使用することができ、単一ビット又は2ビットのエラーを訂正することができる。別の実施形態では、ソリッドステート記憶媒体110は、容量を増大させるために、マルチレベルセル(「MLC」)フラッシュなどの、信頼性に劣る記憶装置を含み得るが、この記憶装置は、より堅牢なECCアルゴリズムを使用しなければ、十分に信頼することができない。
一実施形態では、書き込みパイプライン106は、入力バッファ306を含み、この入力バッファ306は、ソリッドステート記憶媒体110に書き込まれるべきデータセグメントを受信し、パケタイザー302などの、書き込みデータパイプライン106の次のステージ(又は、より複合的な書き込みデータパイプライン106に関する他のステージ)が、次のデータセグメントを処理する準備が整うまで入来するデータセグメントを記憶する。入力バッファ306は典型的には、書き込みデータパイプライン106によって、データセグメントが受信される速度と、処理される速度との相違を、適切にサイズ設定されたデータバッファを使用して許容する。入力バッファ306はまた、データバス204の動作の効率を改善するために、データバス204が書き込みデータパイプライン106によって維持することができる速度よりも速い速度で、書き込みデータパイプライン106にデータを転送することも可能にする。典型的には、書き込みデータパイプライン106が入力バッファ306を含まない場合、バッファリング機能は、他の場所で、例えば、書き込みデータパイプライン106外部の、ソリッドステート記憶デバイス102内で、ネットワークインターフェースカード(「NIC」)内部などのコンピュータ112内で、又は、例えばリモートダイレクトメモリアクセス(「RDMA」)を使用する場合には、別のデバイスで、実行される。
別の実施形態では、書き込みデータパイプライン106はまた、ソリッドステート記憶媒体110にパケットを書き込む前に、ECCエンコーダ304から受信されたパケットをバッファリングする書き込み同期バッファ308も含む。書き込み同期バッファ308は、ローカルのクロックドメインとソリッドステート記憶装置のクロックドメインとの境界に位置し、クロックドメインの差異に配慮するためにバッファリングを提供する。他の実施形態では、同期的ソリッドステート記憶媒体110を使用することができ、同期バッファ308、328を削除することができる。
一実施形態では、書き込みデータパイプライン106はまた、パケタイザー302から、直接的に又は間接的に1つ以上のパケットを受信する、バイアスモジュール318も含む。バイアスモジュール318は、ソリッドステート記憶媒体110の記憶セルのバイアスに向けて、データパケットのビットにバイアスを印加する。本明細書で使用するとき、「バイアス」とは、特定のデータパターンを呈するための、ビットのセット内部のビットに関する値の優先度、確率、傾向、又は望ましさである。バイアスは、自然な特性、設計された属性、記憶媒体に対する操作を実行する特性、又は偶発性とすることができる。データ自体が、バイアスを有し得、データ記憶媒体が、バイアスを有し得る。バイアスは、バイナリ1に向けたもの、バイナリ0に向けたもの、バイナリ1とバイナリ0との平衡に向けたもの、特定のビットに関する特定のバイナリ値に向けたものなどとすることができる。
例えば、一実施形態では、データファイルの終端区域にバイナリ0が埋め込まれることにより、その終端区域を記憶するデータパケットは、バイナリ0に向かうバイアスを呈するようになり、このことはそのデータパケットがバイナリ1よりもバイナリ0を多く有することを意味する。他のデータパケットは、バイナリ0よりも、バイナリ1を多く有するか、バイナリ1とバイナリ0との平衡を有し得る。データパケットは、それぞれ、パケット内部のデータに基づく個々のバイアスを有し得るが、ソリッドステート記憶媒体110の記憶セルのバイアスは、特定のバイナリ値若しくはパターンの記憶に関連する何らかの利益、又は記憶セルの何らかの特性に基づき得る。記憶セル特性の一例として、NANDフラッシュ記憶セルは、現在、製造元によって提供される際に、全てバイナリ1の値、又は殆ど全てバイナリ1の値にバイアスが印加される。更には、NANDフラッシュ記憶セルに対する消去操作を実行することにより、各記憶セル内のバイナリ値がバイナリ1に設定されるため、記憶セルのプログラミングは、特定の記憶セルをバイナリ0の値に変化させることを含む。製造元によって提供される際、又は消去の際の、全てバイナリ1の値若しくは殆ど全てバイナリ1の値への、このバイアスは、不揮発性ソリッドステート記憶媒体の記憶セルに関する、空の状態の一例を表す。
記憶素子216、218、220のそれぞれは、一実施形態では、バイアスを呈する複数個の記憶セル内にバイナリデータを記憶する。各記憶セルは、1つ以上のバイナリビット、すなわちバイナリ値を記憶する。フラッシュメモリ記憶セルは、それぞれが単一のバイナリビットを記憶する、シングルレベルセル(「SLC」)、又はそれぞれが2つ以上のバイナリビットを記憶する、マルチレベルセル(「MLC」)とすることができる。記憶セルの例としては、トランジスタ、コンデンサ、磁気素子、機械的素子、光学素子などが挙げられる。フラッシュメモリでは、各記憶セルは、典型的には、浮遊ゲートトランジスタである。NRAM、MRAM、DRAM、PRAM、及び他のタイプのソリッドステート記憶装置は、他のタイプの記憶セルを有し得、1つの記憶セル当たり、単一のバイナリビット又は2つ以上のバイナリビットのいずれかを記憶することができる。
一実施形態では、空の状態、又は消去された状態の、記憶素子216、218、220の記憶セルは、初期バイナリ値を記憶する。この初期バイナリ値は、記憶セルに関するバイアスを表す。例えば、記憶セルは、それらの記憶セルに特定の値をデフォルトで記憶させる、物理的品質、電気的品質、機械的品質、又は他の品質を有し得る。別の実施形態では、このバイアスは、ソリッドステート記憶媒体110の設計考慮、セキュリティへの考慮、互換性の問題などに基づいて、意図的に選択することができ、記憶セルのデフォルトの特性に基づかない場合がある。
例えば、一実施形態では、記憶素子216、218、220の記憶セルは、フラッシュメモリでは典型的なように、それぞれ製造元からの供給時に1のバイナリ値を記憶することができ、またそれぞれ、プログラム、すなわち書き込みが行なわれる前に1の値に消去することができる。別の実施形態では、記憶素子216、218、220の記憶セルは、バイナリ0に向けて、バイナリ1とバイナリ0との平衡又は等量に向けて、複数個のビットに関して特定のバイナリ値に向けて、一定のバイナリパターンに向けて、などのようにバイアスを印加することができる。
特定の実施形態では、1つ以上の記憶セルのバイアスは、その1つ以上の記憶セルと物理的に隣接するか、又は他の方式で近位にある他の記憶セルの状態に影響され得るか、又はその記憶セルの状態に基づき得る。例えば、記憶セル内に記憶されるデータにバイアスを印加して、その記憶セルと他の記憶セルとの、セル相互間の干渉を最小限に抑えることなどが望ましい場合がある。セル相互間の干渉は、物理的に隣接する記憶セル間の電圧差によって引き起こされる場合があり、特定の実施形態では、記憶セルの物理的ジオメトリに基づいて、データにバイアスを印加し、記憶セル間の電圧差を低減するか、又は最小限に抑えることにより、セル相互間の干渉を低減することができる。一実施形態では、ソリッドステート記憶媒体110の記憶セルは、その記憶セルと他の物理的に隣接する記憶セルとの間の、既定の電圧差閾値を満たすバイナリパターンに向けたバイアスなどを有し得る。
局所的なタイプのセル相互間の干渉に加えて、ビット文字列、ワード線などのような、より大きいマルチセル構造も、セル相互間の干渉を経験し得る。バイナリ1若しくはバイナリ0のストライプなどの、データ内の特定のストライプ又は他のパターンは、これらのより大きいマルチセル構造に関するセンスアンプ及び/又は管理回路機構の、正確性若しくは有効性に干渉する恐れがあり、そのようなストライプ又は他のパターンを避けるように、データにバイアスを印加することが有利であり得る。
SLCフラッシュメモリなどの、特定のタイプの記憶セルに関しては、記憶セルの電圧レベル、及び記憶セル間の関連する電圧差は、各記憶セルに関する単一のビット値に基づく場合があり、データにバイアスを印加することは、データパケット内部及び/又は記憶セルの物理領域内部の、バイナリ1の値とバイナリ0の値との間での最小の遷移を有するバイナリパターンに向けて、バイアスを印加することを含み得る。MLCフラッシュメモリなどの、他のタイプの記憶セルに関しては、記憶セルの電圧レベル、及び記憶セル間の関連する電圧差は、サブパターン又はシンボルを形成するビットのグループに基づき得、データにバイアスを印加することは、特定のサブパターン又はシンボル間での最小の遷移を有するバイナリパターンに向けて、バイアスを印加することを含み得る。サブパターン又はシンボルを使用する一例としては、複数のバイナリ値の、MLC記憶セル内部の関連する電荷レベルへの、バイナリマッピング又はグレイコードマッピングが挙げられる。単一のMLC記憶セルによって記憶されるビットは、特定の実施形態では、隣接するアドレスを有し得ず、異なる物理ページ上、論理ページ上などに記憶させることができる。
一実施形態では、バイアスモジュール318は、他のバイアス技術とは別に、他のバイアス技術の代わりに、又は他のバイアス技術に加えて実行される、別個の工程として、原始データにバイアスを印加して、セル相互間の干渉を低減する。例えば、原始データに、反転、ホワイトニング、圧縮、再配置、及び/又は他の方法でバイアスを印加する際には、原始データの別個のブロックは、依然として、セル相互間の干渉を引き起こすパターンを呈し得、バイアスモジュール318は、セル相互間の干渉を最小限に抑えるパターンに向けて、原始データの1つ以上の別個のブロックに、バイアスを印加することなどができる。
バイアスモジュール318は、パケットのバイアスを変化させることによって、ソリッドステート記憶媒体110の記憶セルのバイアスに、より密接に適合するようにパケットにバイアスを印加する。バイアスモジュール318は、可逆的な方式でパケットにバイアスを印加することにより、逆バイアスモジュール332がパケットを変換して、それらの元の原始バイアスを有する、それらの元の原始データの値に戻すことができる。一実施形態では、バイアスモジュール318がバイアスを印加するパケットは、消去ブロック、仮想消去ブロック、ページ、仮想ページ、ECCチャンク、ページ内部の区画などのような、ソリッドステート記憶媒体110の、特定の論理又は物理記憶領域若しくは区画内の記憶に関して、サイズ設定される。一実施形態では、バイアスモジュール318は、特定のパケットに、そのパケットのバイアスに基づいて、選択的にバイアスを印加し、他のパケットにはバイアスを印加しない場合がある。
当業者には、バイアスモジュール318があるいは、データパケットのサブセットを形成する1つ以上のデータセグメントに対して動作し得ることが認識されよう。同様に、逆バイアスモジュール332もまた、データセグメントに対して動作することができる。あるいは、又はそれに加えて、一実施形態では、データパケット(又はデータセグメントなどの、データパケットのサブセット)は、ソリッドステート記憶媒体110内の記憶領域のサイズ、バス又はバッファのサイズ、パイプライン106、108のサイズ、標識の記憶に利用可能な追加ビットの数などに基づいてサイズ設定することができる。
記憶セルのバイアスに向けて、データパケットにバイアスを印加することによって、バイアスモジュール318は、ソリッドステート記憶媒体110並びにソリッドステート記憶デバイス102の性能及び耐久性を向上させる。例えば、記憶セルのバイアスにより密接に適合するように、パケットにバイアスを印加することにより書き込み時間及び消去時間が減少するが、これは、その操作を実行するために変化させなければならない実際の記憶セルがより少ないためである。このことはまた、記憶セルの書き込み可能耐用期間も増大させるが、これは、記憶セル上で実行される操作がより少ないことは、消耗が記憶セルの性能/信頼性に影響を及ぼし始めるまで、記憶セルが、より長持ちすることを意味するためである。特定の実施形態では、データパケットにバイアスを印加することは、電力消費を減少させるか、又は他の追加的な利益を有し得る。一実施形態では、記憶セルは、プログラム又は書き込みが行なわれる直前のバイアスに合致する、初期バイナリ値を記憶するため、データパケットが記憶セルのバイアスにより密接して適合するほど、データパケットを記憶するために変化する記憶セルの数は少なくなり、より多くの記憶セルが、バイアス状態に維持される。
図示のように、バイアスモジュール318は、1つ以上のパケットにバイアスを印加した後に、そのパケットをECCエンコーダ304に送る。パケットにバイアスを印加するためにバイアスモジュール318が使用する方法、及び他の設計考慮に応じて、更なる実施形態では、バイアスモジュール318は、書き込みデータパイプライン106内で、ECCエンコーダ304の後に続いてデータを受信することができ、又は書き込みデータパイプライン106内の他の場所に位置することもできる。例えば、特定の実施形態では、ECCデータを、バイアスモジュール318がバイアスを印加するデータとは別個に維持することが有益であり得、その一方で、他の実施形態では、バイアスモジュール318が、ECCエンコーダ304からのECCデータを含むデータに、バイアスを印加することが有益であり得る。
一実施形態では、バイアスモジュール318は、1つ以上のデータセグメントにバイアスを印加した後に、そのデータセグメントをECCエンコーダ304に送る。データセグメントは、一実施形態でのデータパケットよりも小さい、ビットのグルーピングとすることができる。そのような実施形態では、データセグメントは、書き込みデータパイプライン106のビット/バイト内の幅を含み得る。同様に、逆バイアスモジュール332は、バイアス印加されたデータセグメントを、読み取りの後に変換して、それらのデータセグメントの元の原始状態に戻すことができる。データセグメントに、バイアス及び逆バイアスを印加することにより、書き込みデータパイプライン106内のバイアスモジュール318、及び読み取りデータパイプライン108内の逆バイアスモジュール332の使用を促進することができるが、これは、データセグメントがパイプライン106、108を通って流れるデータのサイズ(バス幅)に適合するようにサイズ設定することができるためである。
別の実施形態では、バイアスモジュール318は、圧縮モジュール312、暗号化モジュール314、ECCエンコーダ304などのような、書き込みデータパイプライン106の別の素子に統合することができる。バイアスモジュール318及び対応する逆バイアスモジュール332は、ソリッドステート記憶媒体110の性能を透過的に向上させるが、これは、バイアスモジュール318が、データパケットに書き込みの前にバイアスを印加し、逆バイアスモジュール332が、バイアス印加されたデータパケットを、読み取りの後に変換して、それらのデータパケットの元の原始状態に戻すためである。
別の実施形態では、書き込みデータパイプライン106はまた、暗号化モジュール314も含み、この暗号化モジュール314は、入力バッファ306から、直接的に、又は間接的に受信されるデータ若しくはメタデータのセグメントを、パケタイザー302へそのデータセグメントを送る前に暗号化し、データセグメントは、そのデータセグメントと共に受信される暗号化キーを使用して暗号化される。データを暗号化するために、暗号化モジュール314によって使用される暗号化キーは、以下で説明されるように、ソリッドステート記憶デバイス102内部に記憶される全てのデータに共通しない場合があり、データ構造を基準としてそれぞれ異なり、データセグメントの受信と共に受信され得る。例えば、暗号化モジュール314によって暗号化されるデータセグメントに関する暗号化キーは、そのデータセグメントと共に受信することができ、又はそのデータセグメントが属するデータ構造を書き込む、コマンドの一部として受信することができる。ソリッドステート記憶デバイス102は、暗号化キーと共に使用される、各データ構造パケット内の非秘密暗号ナンスを、使用及び記憶することができる。異なるナンスを、各パケットと共に記憶することができる。データセグメントは、暗号化アルゴリズムによる保護の改善を目的として、固有のナンスを有する複数のパケット間に、分割することができる。
暗号化キーは、クライアント114、別のコンピュータ、キー管理プログラム、又はデータセグメントを暗号化するために使用される暗号化キーを保持する他のデバイスから、受信することができる。一実施形態では、暗号化キーは、ソリッドステート記憶デバイス102、コンピュータ112、クライアント114、あるいは秘密キー及び公開キーを安全に転送並びに保護するための、業界標準の方法を実行する能力を有する、他の外部エージェントのうちの1つから、ソリッドステート記憶装置コントローラ104に転送される。
一実施形態では、暗号化モジュール314は、第1のパケットを、そのパケットと共に受信された第1の暗号化キーを使用して暗号化し、第2のパケットを、そのパケットと共に受信された第2の暗号化キーを使用して暗号化する。別の実施形態では、暗号化モジュール314は、第1のパケットを、そのパケットと共に受信された第1の暗号化キーを使用して暗号化し、第2のデータパケットを、暗号化することなく、次のステージへと通過させる。有利には、ソリッドステート記憶デバイス102の書き込みデータパイプライン106内に含まれる暗号化モジュール314は、対応するデータ構造又はデータセグメントを記憶するために使用される、種々の暗号化キーを追跡するための、単一のファイルシステム又は他の外部システムを使用することなく、データ構造毎の、又はセグメント毎のデータ暗号化を可能にする。各要求デバイス155又は関連するキー管理プログラムが、その要求デバイス155によって送られるデータ構造又はデータセグメントのみを暗号化するために使用される暗号化キーを、独立して管理する。
一実施形態では、暗号化モジュール314は、ソリッドステート記憶デバイス102に固有の暗号化キーを使用して、1つ以上のパケットを暗号化することができる。暗号化モジュール314は、この媒体暗号化を、上述の暗号化とは独立して、又はそれに加えて、実行することができる。典型的には、パケット全体が、ヘッダを含めて暗号化される。別の実施形態では、ヘッダは暗号化されない。暗号化モジュール314による媒体暗号化は、ソリッドステート記憶媒体110内に記憶されるデータに関する、一定レベルの安全性を提供する。例えば、データが、特定のソリッドステート記憶デバイス102に固有の媒体暗号化を使用して暗号化される場合、そのソリッドステート記憶媒体110が、異なるソリッドステート記憶装置コントローラ104、ソリッドステート記憶デバイス102、又はコンピュータ112に接続される場合には、ソリッドステート記憶媒体110の内容は、典型的には、ソリッドステート記憶媒体110へのデータの書き込みの間に使用された、同一の暗号化キーを使用しなければ、多大な労力なしで読み取ることは不可能である。
別の実施形態では、書き込みデータパイプライン106は、メタデータセグメントに関するデータを圧縮した後に、そのデータセグメントをパケタイザー302に送る、圧縮モジュール312を含む。圧縮モジュール312は、典型的には、当業者には既知の圧縮ルーチンを使用して、データ又はメタデータのセグメントを圧縮し、セグメントの記憶サイズを低減する。例えば、データセグメントが、512個の0の文字列を含む場合には、圧縮モジュール312は、512個の0を指示する符号又はトークンで、その512個の0を置き換えることができ、この場合、その符号は、512個の0によって占められるスペースよりも、遙かにコンパクトである。
一実施形態では、圧縮モジュール312は、第1のセグメントを、第1の圧縮ルーチンを使用して圧縮し、第2のセグメントを、圧縮することなく通過させる。別の実施形態では、圧縮モジュール312は、第1のセグメントを、第1の圧縮ルーチンを使用して圧縮し、第2のセグメントを、第2の圧縮ルーチンを使用して圧縮する。ソリッドステート記憶デバイス102内部に、この柔軟性を有することは、クライアント114、又はソリッドステート記憶デバイス102にデータを書き込む他のデバイスが、それぞれ圧縮ルーチンを指定することができるために、又は1つは圧縮を指定しないが、もう1つは圧縮を指定することができるために有益である。圧縮ルーチンの選択はまた、データ構造のタイプ又はデータ構造のクラスをそれぞれの基準とする、デフォルトの設定に従って、選択することもできる。例えば、特定のデータ構造の第1のデータ構造は、デフォルトの圧縮ルーチンの設定を上書きすることが可能であり、同一のデータ構造のクラス及びデータ構造のタイプの、第2のデータ構造は、デフォルトの圧縮ルーチンを使用することができ、同一のデータ構造のクラス及びデータ構造のタイプの、第3のデータ構造は、圧縮を使用しない場合がある。
一実施形態では、書き込みデータパイプライン106は、ガベージコレクションシステム内のデータバイパスの一部として、読み取りデータパイプライン108からデータセグメントを受信する、ガベージコレクタバイパス316を含む。ガベージコレクションシステムは、典型的には、パケットが削除されるためにマークされるか、又はパケットが修正されていて、修正されたデータが異なる場所に記憶されているために、もはや有効ではないパケットを典型的にはマークする。いずれかの時点で、ガベージコレクションシステムは、記憶装置の特定の区域の回復が可能であることを判定する。この判定は、利用可能な記憶容量の欠如、無効としてマークされたデータのパーセンテージが閾値に到達すること、有効データの整理統合、記憶装置のその区域に関するエラー検出率が閾値に到達すること、又はデータ分散に基づく性能の改善などによるものとすることができる。多数の因数を、ガベージコレクションアルゴリズムによって考察して、記憶装置の区域を回復させるべき時点を判定することができる。
記憶装置の区域が、回復に関してマークされた時点で、その区域内の有効パケットは典型的には、再配置されなければならない。ガベージコレクタバイパス316により、パケットは、読み取りデータパイプライン108内へ読み取られ、次いで、ソリッドステート記憶装置コントローラ104の外に経路指定されることなく、書き込みデータパイプライン106へ直接転送されることが可能になる。一実施形態では、ガベージコレクタバイパス316は、ソリッドステート記憶デバイス102内部で動作する、自律的ガベージコレクタシステムの一部である。このことにより、ソリッドステート記憶デバイス102は、データがソリッドステート記憶媒体110全体へ系統的に拡散して、性能、データ信頼性を改善し、ソリッドステート記憶媒体110の任意の1つの場所又は領域の、過剰使用並びに過少使用を回避し、ソリッドステート記憶媒体110の耐用年数を延長させるように、データを管理することが可能になる。
ガベージコレクタバイパス316は、書き込みデータパイプライン106内へのセグメントの挿入を調整し、他のセグメントが、クライアント114又は他のデバイスによって書き込まれる。図示の実施形態では、ガベージコレクタバイパス316は、書き込みデータパイプライン106内で、パケタイザー302の前にあり、読み取りデータパイプライン108内で、デパケタイザー324の後にあるが、また書き込みデータパイプライン106及び読み取りデータパイプライン108内の他の場所に位置することもできる。ソリッドステート記憶媒体110内部の記憶の効率を改善するために、ガベージコレクタバイパス316を、書き込みパイプライン106のフラッシュの間に使用して、仮想ページの残部を充填することにより、ガベージコレクションの頻度を低減するができる。
一実施形態では、書き込みデータパイプライン106は、効率的な書込み操作のためにデータをバッファリングする、書き込みバッファ320を含む。典型的には、書き込みバッファ320は、パケットが、ソリッドステート記憶媒体110内の少なくとも1つの仮想ページを充填するための、十分な容量を含む。このことにより、書き込み操作は、割り込みを伴うことなく、ソリッドステート記憶媒体110に、ページ全体のデータを送ることが可能になる。書き込みデータパイプライン106の書き込みバッファ320、及び読み取りデータパイプライン108内部のバッファを、ソリッドステート記憶媒体110内部の記憶書き込みバッファと同一の容量に、又はより大きくサイズ設定することによって、複数のコマンドの代わりに、単一のコマンドを作成して、ソリッドステート記憶媒体110に、仮想ページ全体のデータを送ることができるため、書き込み及び読み取りは、より効率的となる。
書き込みバッファ320が充填されている間に、ソリッドステート記憶媒体110は他の読み取り操作に関して使用することができる。このことが有利であるのは、より小さい書き込みバッファを有するか、又は書き込みバッファを有さない、他のソリッドステートデバイスは、記憶書き込みバッファにデータが書き込まれ、記憶書き込みバッファ内へのデータの流れがストールする際、ソリッドステート記憶装置を停滞させる恐れがあるためである。読み取り操作は、記憶書き込みバッファ全体が充填されてプログラムされるまでブロックされることになる。書き込みバッファを有さないか、又はより小さい書き込みバッファを有するシステムに関する別の手法は、読み取りを有効にするために、一杯ではない記憶書き込みバッファをフラッシュすることである。この場合も同様に、複数の書き込み/プログラムのサイクルが、ページを充填するために必要とされるため、非効率的である。
仮想ページよりも大きいサイズ設定の書き込みバッファ320を有する図示の実施形態に関しては、多数のサブコマンドを含む単一の書き込みコマンドは、その場合、その後に単一のプログラムコマンドが続いて、各ソリッドステート記憶素子216、218、220内の記憶書き込みバッファから、各ソリッドステート記憶素子216、218、220内部の指定ページへ、データのページを転送することができる。この技術は、データの信頼性及び耐久性を低減するとして既知の、部分的ページプログラミングを排除し、バッファが充填される間に、読み取り及び他のコマンドに関する宛先のバンクを解放する利益を有する。
一実施形態では、書き込みバッファ320は、ピンポンバッファであり、この場合、バッファの一方の側が一杯になり、次いで適切な時点での転送が指定される間、ピンポンバッファの他方の側は、充填中である。別の実施形態では、書き込みバッファ320は、データセグメントの仮想ページよりも大きい容量を有する、先入れ先出し方式(「FIFO」)レジスタを含む。当業者には、ソリッドステート記憶媒体110にデータを書き込む前に、データの仮想ページが記憶されることを可能にする、他のバッファ320の構成が認識されるであろう。
別の実施形態では、書き込みバッファ320は、仮想ページよりも小さくサイズ設定されることにより、ソリッドステート記憶媒体110内の記憶書き込みバッファに書き込むことが可能であるのは、1ページ未満の情報である。この実施形態では、書き込みデータパイプライン106内のストールが、読み取り操作を停滞させることを防ぐために、データは、ガベージコレクションシステムを使用して、待ち行列に入れられ、ガベージコレクションプロセスの一部として、1つの場所から別の場所へ移動させる必要がある。書き込みデータパイプライン106内のデータストールの場合には、データは、ガベージコレクタバイパス316を通じて、書き込みバッファ320へ、次いで、ソリッドステート記憶媒体110内の記憶書き込みバッファへと供給されて、データをプログラムする前の仮想ページのページを充填することができる。この方式では、書き込みデータパイプライン106内のデータストールが、ソリッドステート記憶デバイス102からの読み取りをストールさせることはない。
別の実施形態では、書き込みデータパイプライン106は、書き込みデータパイプライン106内部での1つ以上のユーザー定義可能な機能を有する、書き込みプログラムモジュール310を含む。書き込みプログラムモジュール310により、ユーザーは、書き込みデータパイプライン106をカスタマイズすることが可能になる。ユーザーは、特定のデータ要件又は用途に基づいて、書き込みデータパイプライン106をカスタマイズすることができる。ソリッドステート記憶装置コントローラ104が、FPGAである場合は、ユーザーは、カスタムコマンド及びカスタム機能を使用して、書き込みデータパイプライン106を、比較的容易にプログラムすることができる。ユーザーはまた、ASICを使用するカスタム機能を含むように、書き込みプログラムモジュール310を使用することもできるが、ASICをカスタマイズすることは、FPGAを使用するよりも困難である場合がある。書き込みプログラムモジュール310は、バッファ及びバイパス機構を含み得、第1のデータセグメントが、書き込みプログラムモジュール310内で実行される間に、第2のデータセグメントが、書き込みデータパイプライン106を通って継続し得ることを可能にする。別の実施形態では、書き込みプログラムモジュール310は、ソフトウェアを通じてプログラムすることができる、プロセッサコアを含み得る。
書き込みプログラムモジュール310は、入力バッファ306と圧縮モジュール312との間に示されるが、しかしながら、書き込みプログラムモジュール310は、書き込みデータパイプライン106内の任意の場所にあることが可能であり、様々なステージ302〜320の間に分散させることができる点に留意されたい。更には、独立してプログラムされ、動作する、様々なステージ302〜320の間に分散する複数の書き込みプログラムモジュール310が存在し得る。更には、ステージ302〜320の順序を変更することができる。当業者には、特定のユーザー要件に基づく、ステージ302〜320の順序に対する実行可能な変更が認識されるであろう。
読み取りデータパイプライン
読み取りデータパイプライン108は、ECCデコーダ322を含み、このECCデコーダ322は、データエラーが、ソリッドステート記憶媒体110から受信された要求データパケットのECCブロック内に存在するか否かを、その要求パケットの各ECCブロックと共に記憶されたECCを使用することによって判定する。次いで、ECCデコーダ322は、いずれかのエラーが存在し、そのエラーがECCを使用して訂正可能である場合には、要求パケット内のいずれかのエラーを訂正する。例えばECCが6ビットのエラーを検出することができるが、3ビットのエラーのみを修正することができる場合には、ECCデコーダ322は、最大3つのエラー状態のビットを有する、要求パケットのECCブロックを訂正する。ECCデコーダ322は、要求データパケットが、ソリッドステート記憶媒体110に要求データパケットが書き込まれ、そのパケットに関してECCが生成されたときと同一となるように、エラー状態のビットを、正しい1又は0の状態に変化させることによってエラー状態のビットを訂正する。
特定の実施形態では、ECCデコーダ322は、以下で説明される設定モジュール352に、エラー状態のビットの場所、エラー状態のビットに関する値、及び/又は他のエラー情報などの、訂正可能なエラーに関するエラー情報を提供することができる。例えば、ECCデコーダ322は、エラー状態にある、データセットの1つ以上のビットを指示する、エラーバイアスなどを、設定モジュール352に提供することができる。エラーバイアスは、本明細書で使用するとき、データセット内の1つ以上の検出ビットエラーの表示である。一実施形態では、エラーバイアスとしては、データセット内の検出ビットエラーの場所又は位置が挙げられる。別の実施形態では、エラーバイアスとしては、検出ビットエラーに関する値が挙げられる。検出エラーに関する値としては、エラー状態のビットのエラー訂正値、エラー状態のビットのエラー値などを挙げることができる。例えば、一実施形態では、ECCデコーダ322は、設定モジュール352に、未訂正のデータセット、及び検出ビットエラーの場所を指示するエラーバイアスを提供することができ、設定モジュール352は、それらの場所内のビットを逆転又は反転させることによって既知のバイアスを判定することができる。別の実施形態では、例えばECCデコーダ322は、設定モジュール352に、エラー訂正データセット、及び検出ビットエラーの場所を指示するエラーバイアスを提供することができ、設定モジュール352は、それらの場所内のビットを逆転又は反転させることによって、読み取りバイアスを判定することができる。
ECCデコーダ322が、要求パケットには、ECCデコーダ322が訂正することができるビットよりも多くの、エラー状態のビットが含まれることを判定した場合には、ECCデコーダ322は、要求パケットの破損したECCブロック内のエラーを訂正することができず、割り込みを送る。一実施形態では、ECCデコーダ322は、要求パケットがエラー状態であることを指示するメッセージを有する割り込みを送る。このメッセージは、ECCデコーダ322がエラーを訂正することができないという情報を含み得、又はECCデコーダ322の、エラーを訂正する能力の欠如を暗示することができる。別の実施形態では、ECCデコーダ322は、割り込み及び/又はメッセージと共に、要求パケットの破損したECCブロックを送る。
一実施形態では、ECCデコーダ322によって訂正することができない、要求パケットの破損したECCブロック、又は破損したECCブロックの諸部分は、マスターコントローラ224によって読み取られ、訂正されて、読み取りデータパイプライン108によって更に処理されるために、ECCデコーダ322に戻される。一実施形態では、要求パケットの破損したECCブロック、又は破損したECCブロックの諸部分は、そのデータを要求するデバイスに送られる。要求デバイス155は、ECCブロックを訂正するか、又はバックアップコピー若しくはミラーコピーなどの別のコピーを使用して、データを置き換えることができ、次いで、その要求データパケットの置換データを使用するか、又は読み取りデータパイプライン108に、その置換データを戻すことができる。要求デバイス155は、エラー状態の要求パケット内のヘッダ情報を使用して、破損した要求パケットを置き換えるか又はそのパケットが属するデータ構造を置き換えることが必要とされる、データを識別することができる。別の実施形態では、ソリッドステート記憶装置コントローラ104は、何らかのタイプのRAIDを使用してデータを記憶し、破損したデータを回復することが可能である。別の実施形態では、ECCデコーダ322は、割り込み及び/又はメッセージを送り、受信デバイスは、要求データパケットに関連する読み取り操作に失敗する。当業者には、ECCデコーダ322が、要求パケットの1つ以上のECCブロックが破損していること、及びECCデコーダ322がそのエラーを訂正できないことを判定する結果として取られる、他の選択肢並びに動作が認識されるであろう。
読み取りデータパイプライン108は、ECCデコーダ322から、直接的に、又は間接的に、要求パケットのECCブロックを受信して、1つ以上のパケットヘッダを検査及び削除するデパケタイザー324を含む。デパケタイザー324は、ヘッダ内部の、パケット識別子、データ長、データの場所などを検査することによって、パケットヘッダを検証することができる。一実施形態では、ヘッダは、読み取りデータパイプライン108に供給されたパケットが、要求パケットであることを検証するために使用することができる、ハッシュコードを含む。デパケタイザー324はまた、要求パケットから、パケタイザー302によって付加されたヘッダも削除する。デパケタイザー324は、特定のパケットに対しては動作せずに、それらを修正することなく先へ通過させるように指示することができる。一例としては、索引の復元のためにヘッダ情報を必要とする、再構築プロセスの経過中に要求されるコンテナラベルの場合がある。更なる例としては、ソリッドステート記憶デバイス102内部での使用が予定されている、様々なタイプのパケットの転送が挙げられる。別の実施形態では、デパケタイザー324の動作は、パケットのタイプに依存し得る。
読み取りデータパイプライン108は、デパケタイザー324からデータを受信し、不必要なデータを削除する、アライメントモジュール326を含む。一実施形態では、ソリッドステート記憶媒体110に送られた読み取りコマンドは、データのパケットを検索する。データを要求するデバイスは、検索されたパケット内部の全てのデータを必要とはしない場合があり、アライメントモジュール326が、不必要なデータを削除する。検索されたページ内部の全てのデータが、要求データである場合には、アライメントモジュール326は、いずれのデータも削除しない。
アライメントモジュール326は、データセグメントを次のステージへと転送する前に、そのデータセグメントを要求するデバイスに対応する形態の、データ構造のデータセグメントとしてデータを再フォーマットする。典型的には、データが読み取りデータパイプライン108によって処理される際、データセグメント又はパケットのサイズは、様々なステージで変化する。アライメントモジュール326は、受信データを使用して、要求デバイス155に送られ、応答を形成するように結合されるために好適なデータセグメントへと、そのデータをフォーマットする。例えば、第1のデータパケットの一部分からのデータを、第2のデータパケットの一部分からのデータと組み合わせることができる。データセグメントが、要求デバイス155によって要求されたデータよりも大きい場合には、アライメントモジュール326は、不必要なデータを破棄することができる。
一実施形態では、読み取りデータパイプライン108は、ソリッドステート記憶媒体110から読み取られた1つ以上の要求パケットを、読み取りデータパイプライン108によって処理する前にバッファリングする、読み取り同期バッファ328を含む。読み取り同期バッファ328は、ソリッドステート記憶装置のクロックドメインとローカルバスのクロックドメインとの境界にあり、クロックドメインの差異に配慮するために、バッファリングを提供する。
別の実施形態では、読み取りデータパイプライン108は、アライメントモジュール326から要求パケットを受信して、そのパケットを要求デバイス155へ送信する前に記憶する、出力バッファ330を含む。出力バッファ330は、読み取りデータパイプライン108から、データセグメントを受信するときと、ソリッドステート記憶装置コントローラ104の他の部分、又は要求デバイス155へ、データセグメントを送信するときとの差異に配慮する。出力バッファ330はまた、データバス204の動作の効率を改善するために、データバス204が、読み取りデータパイプライン108によって維持することができる速度よりも速い速度で、読み取りデータパイプライン108からデータを受信することも可能にする。
一実施形態では、ソリッドステート記憶装置コントローラ104は、読み取り電圧閾値などのような、ソリッドステート記憶媒体110に関する設定パラメーターを、設定及び調整する設定モジュール352含む。更なる実施形態では、設定モジュール352は、読み取りデータパイプライン108及び/又は書き込みデータパイプライン106から独立して動作するように、ソリッドステート記憶媒体110に統合することができる。特定の実施形態では、図4及び図5の事前対応設定モジュール424に関して、以下でより詳細に説明されるように、設定モジュール352は、ソリッドステート記憶媒体110の記憶セルに関する1つ以上の設定パラメーターを、記憶セルに関する記憶媒体特性に基づいて、記憶セルからのフィードバックを、殆ど又は全く使用せずに、開ループ方式で事前対応的に判定する。図示の実施形態では、設定モジュール352は、記憶制御バス212及び記憶バスコントローラ348と通信して、ソリッドステート記憶媒体110の記憶セルを、様々な設定パラメーターを使用するように設定する。別の実施形態では、設定モジュール352は、設定パラメーター、並びに/又は、ソリッドステート記憶装置コントローラ104及び/若しくはソリッドステート記憶デバイス102に関する設定を管理する。
他の実施形態では、設定モジュール352は、ソリッドステート記憶媒体110からのデータセットを、直接的に、又は間接的に受信して、対応する記憶セルに関する設定パラメーターを、記憶セルからのフィードバックとしての読み取りデータセットを使用して、閉ループ方式で判定することができる。特定の実施形態では、設定モジュール352は、ECCデコーダ322からの、1つ以上の要求バイアスパケットを受信することができる。更なる実施形態では、設定モジュール352は、読み取り同期バッファ328からのデータセットを、記憶I/Oバス210から直接的に、逆バイアスモジュール332から、又は他の方法で、受信することができる。設定モジュール352は、図4に関して、より詳細に説明される。設定モジュール352が、ECCデコーダ322及び逆バイアスモジュール332の双方からの入力を受信する、別の実施形態は、図3Bに関して、以下で説明される。
全般的には、設定モジュール352は、読み取り電圧閾値、固有抵抗閾値、プログラミング閾値、消去閾値などを、設定及び調整するなど、ソリッドステート記憶媒体110からの1つ以上の記憶セルに関する1つ以上の設定パラメーターを設定及び調整する。読み取り電圧閾値は、ソリッドステート記憶媒体110の記憶セル内に記憶される離散値を分離する電圧レベルである。種々のソリッドステート記憶技術が、電圧以外の種々の閾値を使用して、離散的状態を区別することができる。相変化RAM、すなわちPRAMは、例えば、異なる状態で異なる電気抵抗を有する、カルコゲナイドガラス内に、データを記憶する。PRAMに関しては、設定モジュール352は、離散的記憶状態を区別する固有抵抗閾値を、判定、設定、及び/又は調整することができる。当業者には、本開示の見地から、設定モジュール352が、読み取り電圧閾値に関して本明細書で説明されるものと実質的に同様の方式で、固有抵抗閾値若しくは他の設定パラメーターを、判定、設定、及び/又は調整することができることが認識されるであろう。
単一のバイナリ値を記憶する、SLC記憶セルに関しては、読み取り電圧閾値は、バイナリ1の状態とバイナリ0の状態との境界である。例えば、一実施形態では、読み取り電圧閾値よりも高い読み取り電圧レベルを有する記憶セルは、バイナリ1を記憶し、その一方で、読み取り電圧閾値よりも低い読み取り電圧レベルを有する記憶セルは、バイナリ0を記憶する。MLC記憶セルなどの、他のタイプの記憶セルは、複数の読み取り電圧閾値を有して、3つ以上の離散的状態を区別することができる。
例えば、一実施形態では、2ビットを記憶するMLC記憶セルは、11、01、00、及び10のバイナリ値を隔てる、3つの読み取り電圧閾値を有し得る。これら3つの例示的読み取り電圧閾値は、xボルト、yボルト、及びzボルトとすることができ、図6Cの読み取り電圧閾値662に関して、以下でより詳細に説明される。記憶セルから読み取られる電圧が、Vminとxボルトとの間に位置する場合には、バイナリ11の状態が指示される。特定の実施形態では、Vminは、負電圧とすることができる。記憶セルから読み取られる電圧が、xボルトとyボルトとの間に位置する場合には、バイナリ01の状態が指示される。記憶セルから読み取られる電圧が、yボルトとzボルトとの間に位置する場合には、バイナリ00の状態が指示される。記憶セルから読み取られる電圧が、zボルトとVmaxボルトとの間に位置する場合には、バイナリ10の状態が指示される。
Vmin、Vmax、x、y、zに関する電圧は、記憶セルの製造元に基づいて変動し得る。読み取り電圧は、例えば、−3.5〜5.8ボルトの範囲、又は別の既定の電圧間の範囲とすることができる。同様に、読み取り電圧閾値に対する、バイナリ状態の変化11、01、00、及び10の順序は、グレイコード符号化タイプ、バイナリコード符号化タイプなどのような、使用される符号化タイプに基づいて変動し得る。1つの例示的な符号化タイプは、図6Cに関して、以下で説明される。図6Cに関して、より詳細に説明されるように、単一のMLC記憶セルは、複数ビットを記憶するが、単一の記憶セルからのビットは、隣接するアドレスを有し得ず、異なる物理ページ、論理ページ内などに含まれ得る。
特定の実施形態では、離散値間の境界を参照する代わりに、読み取り電圧閾値は、一定の値を指示する、電圧の範囲(最大及び最小)を含む。一定の範囲である電圧閾値は、その範囲の一方の端で、又は両端で境界を変化させることによって、調整することができる。ソリッドステート記憶媒体110に関する、読み取り電圧閾値又は他の設定パラメーターは、一実施形態では、製造元によって定義することができるデフォルトのレベルで、最初に設定される。多くの場合、そのような設定パラメーターのデフォルトのレベルは、ソリッドステート記憶媒体110の広範囲の汎用的使用に適応するように設定される。有利には、設定モジュール352の実施形態は、ソリッドステート記憶媒体110が、より具体的な使用特性に基づいて、極めて最適に使用されることを可能にする。設定モジュール352は、特定の実施形態では、1つ以上の設定パラメーターに関するデフォルトのレベルを上書きして、ソリッドステート記憶媒体110の記憶媒体特性に基づいて、その1つ以上の設定パラメーターを異なるレベルに設定する。設定モジュール352は、デフォルトのレベルと比較した場合に、ソリッドステート記憶媒体110が遭遇するエラーの量を減少させるレベルに、デフォルトのレベルと比較した場合に、検出及び訂正することができるエラーの量を増大させるレベルに、デフォルトのレベルと比較した場合に、ソリッドステート記憶媒体110の1秒当りの入力/出力(「IOPS」)の数を増大させるレベルに、デフォルトのレベルと比較した場合に、ソリッドステート記憶媒体110の可使時間を増大させるレベルに、及び/又はデフォルトのレベルと比較した場合に、ソリッドステート記憶媒体110の有用性を他の方法で改善するレベルに、設定パラメーターを設定することができる。
記憶セルの読み取り電圧レベル、及び他の設定パラメーターはまた、ソリッドステート記憶媒体110のリーク及び他の外乱のために、時間と共に推移する場合もある。リークの割合もまた、ソリッドステート記憶媒体110の消耗及び経年と共に増大し得る。記憶セルの読み取り電圧レベルが、読み取り電圧閾値を超えて推移する場合には、記憶セルから読み取られるデータの値が、その記憶セルに書き込まれたデータの値とは異なるために、データエラーが発生する。設定モジュール352は、一実施形態では、ソリッドステート記憶媒体110からの1つ以上の記憶セルに関する、読み取り電圧閾値又は他の設定パラメーターを調整して、記憶セルの読み取り電圧レベルの推移を補正する。事前対応的に、及び/又は動的に、読み取り電圧閾値を調整することによって、設定モジュール352は、ソリッドステート記憶媒体110内に記憶されるデータの、保持率及び/又は信頼性を向上させ、ソリッドステート記憶媒体110自体の可使耐用年数を延長することができ、ソリッドステート記憶媒体110の有用性を改善する。
設定モジュール352は、一実施形態では、ソリッドステート記憶媒体110からのデータセット又はパケットの、既知のバイアスを使用して、読み取り電圧閾値又は他の設定パラメーターを調整する。バイアスモジュール318に関して上述したように、バイアスは、特定のデータパターンを呈するための、ビットのセット内部のビットに関する値の、優先度、確率、傾向、又は望ましさである。バイアスは、自然な特性、設計された属性、記憶媒体に対する操作を実行する特性、又は偶発性とすることができる。バイアスは、バイナリ1に向けたもの、バイナリ0に向けたもの、バイナリ1とバイナリ0との平衡に向けたもの、特定のビットに関する特定のバイナリ値に向けたもの、バイナリ1とバイナリ0との特定の比率に向けたもの、一定のバイナリパターンに向けたものなどとすることができる。
一実施形態では、設定モジュール352が受信するデータセット又はパケットは、既知のバイアスを有する。データセット又はパケットは、少なくとも3つの理由のうちの1つから、既知のバイアスを有する。第1に、データセット又はパケットは、そのデータセット又はパケットが書き込まれたときに、バイアスモジュール318が、そのデータセット又はパケットにバイアスを印加したために、既知のバイアスを有し得る。一実施形態では、バイアスモジュール318及び/又は逆バイアスモジュール332は、設定モジュール352と協働して、既知のバイアスを、設定モジュール352に通信する。第2に、データセット又はパケットは、そのデータセット又はパケットが、ソリッドステート記憶媒体110の未使用の、書き込まれていない領域から読み取られるために、既知のバイアスを有し得る。例えば、一実施形態では、ソリッドステート記憶媒体110の未使用の、書き込まれていない領域は、典型的には、書き込まれていない状態での排他的なバイナリ1又は排他的なバイナリ0の、既知のバイアスを有し得る。第3に、データセット又はパケットは、ECCデコーダ322が、そのデータセット又はパケットを訂正しており、エラー状態にあったデータセットの1つ以上のビットの、元の正しい値を判定しているために、既知のバイアスを有し得る。データセット内のビットに関する正しい値が、この既知のバイアスを構成する。データセット内のエラーによって引き起こされる、既知のバイアスからの偏差が、エラーバイアスである。
設定モジュール352は、一実施形態では、データセット又はパケットに関する読み取りバイアスが、既知のバイアスから偏移することを判定し、読み取りバイアスと既知のバイアスとの差異に基づいて、そのデータセットに関する偏差の方向を判定する。更なる実施形態では、設定モジュール352は、この偏差の方向に基づいて、そのデータセットに対応する記憶セルに関する、読み取り電圧閾値、又は固有抵抗閾値などの別の読み取り閾値を調整する。例えば、一実施形態では、設定モジュール352は、データセットが、既知のバイアスに基づいて予想されるよりも多くのバイナリ0を有する場合には、その記憶セルに関して、従前の読み取り電圧閾値から、新たな読み取り電圧閾値へと、読み取り電圧閾値を低下させることができる。MLC記憶セルに関しては、一実施形態では、データセットは、種々のアドレス、種々のページなどからのデータを含むことにより、そのデータセットは、関連する記憶セルが記憶する全てのデータを含み得る。設定モジュール352は、記憶セルの物理的及び/又は電気的アーキテクチャーなどに基づいて、記憶セルに関して使用される、符号化タイプなどの記憶セルの既知の特性に、読み取り電圧閾値調整の基盤を置くことができる。更なる実施形態では、設定モジュール352は、種々のアドレス又はページからのデータを、変形、翻訳、若しくは組み合わせて、MLC記憶セルに関する既知のバイアス、読み取りバイアス、及び/又は既知のバイアスからの偏差の判定を、促進させることができる。別の実施形態では、MLC記憶セルに関しては、設定モジュール352は、MLC記憶セルによって記憶されるデータのサブセットに基づいて、MLC記憶セルに関する読み取り電圧閾値を調整することができる。
設定モジュール352は、一実施形態では、データセットを新たな読み取り閾値を使用して再読み取りすることを要求することができる。設定モジュール352は、再読み取りされたデータセットが、既知のバイアスから偏移する読み取りバイアスを有するか否かを判定することができ、そのデータセットの読み取りバイアスが、もはや既知のバイアスから一定の閾値量(ゼロとすることができる)を超えて偏移しなくなるまで、ECCデコーダ322がデータセット内のエラーを訂正できるようになるまで、などのように読み取り電圧閾値を反復的に、新たな読み取り電圧閾値に調整することができる。一実施形態では、設定モジュール352は、新たな読み取り電圧閾値が、ソリッドステート記憶媒体110からの後続のデータ読み取りに関して持続的となるように、新たな読み取り電圧閾値を記憶する。更なる実施形態では、ソリッドステート記憶媒体110が、後続のデータ読み取りに関して、新たな読み取り電圧閾値を記憶する。
設定モジュール352は、一実施形態では、各パケット読み取りの読み取りバイアスを監視し、読み取り要求に応答して、パケット又は他のデータセットのバイアスを既知のバイアスと比較することができる。更なる実施形態では、設定モジュール352は、各パケット読み取りの読み取りバイアスを監視することができ、例えば、ECCデコーダ322が訂正することができない、訂正不能なビットエラーなどのような、データエラーに応答して、データセット又はパケットのバイアスを、既知のバイアスと比較することができる。更なる実施形態では、設定モジュール352は、各パケット読み取りの読み取りバイアスを監視することができず、排他的にデータエラーに応答して、データセット又はパケットのバイアスを判定し、既知のバイアスと比較することができる。図4及び図5の事前対応設定モジュール424に関して、以下で説明されるように、特定の実施形態では、設定モジュール352は、読み取りデータセット若しくは読み取りパケットに基づく調整の代わりに、又はそれに加えて、記憶媒体特性に基づいて、事前対応的に、読み取り電圧閾値若しくは他の設定パラメーターを設定又は調整する。
一実施形態では、ソリッドステート記憶装置コントローラ104は、それぞれが独立した読み取り電圧閾値を有し得るソリッドステート記憶媒体110内部の、複数のチャネル、記憶素子、ダイ、チップ、物理消去ブロック(「PEB」)、記憶セルのグルーピングなどからの、データパケット内のデータを読み取ることができる。チャネル、記憶素子、ダイ、チップ、及び/又は記憶セルのグルーピングの製造元は、各チャネル、記憶素子、ダイ、チップ、及び/又は記憶セルのグルーピングに関する読み取り電圧閾値が、ソリッドステート記憶装置コントローラ104によって独立して調整可能であるようにすることができる。あるいは、又はそれに加えて、チャネル、記憶素子、ダイ、チップ、及び/又は記憶セルのグルーピングの製造元は、チャネルのグループ、記憶素子のグループ、ダイのグループ、チップのグループ、及び/又は記憶セルのグルーピングのグループに関する読み取り電圧閾値が、ソリッドステート記憶装置コントローラ104によって別個のグループとして調整可能であるようにすることができる。
一実施形態では、ECCエンコーダ304は、各チャネル、記憶素子、ダイ、チップ、PEB、又は他の記憶セルのグルーピングに関する、独立したECC検査ビットを作成する。ECC検査ビットは、複数のグルーピング全体にわたって分散されるのではなく、記憶セルの特定のグルーピング上に、データと共に記憶される。ECC検査ビットが、記憶セルの各グルーピングに関して独立して作成及び記憶される場合には、設定モジュール352は、データエラーに応答して、ECC検査ビット、及びECC検査ビットが記憶セルのグルーピングに書き込まれた方式に関する既知のアーキテクチャーを使用して、記憶セルのいずれのグルーピング内にデータエラーが発生したかを判定し、それらのグルーピングの読み取り電圧閾値を調整することができる。データパケットに関するECC検査ビットが、記憶セルの複数のグルーピング全体にわたって記憶される場合には、設定モジュール352は、記憶セルの各グルーピングからのデータセットの読み取りバイアスを別個に検査して、対応する読み取り電圧閾値のうちの1つ以上を調整することができる。複数のチャネルを有する記憶素子のアレイは、図6A及び図6Bに関して、より詳細に説明される。
一実施形態では、読み取りデータパイプライン108は、逆バイアスモジュール332を含み、この逆バイアスモジュール332は、ECCデコーダ322から、直接的に又は間接的に、1つ以上の要求バイアスパケットを受信し、バイアスモジュール318のバイアス印加プロセスを逆行させることによって、1つ以上の要求パケットを変換して、それらの元の原始形態に戻した後に、その1つ以上の要求パケットを、デパケタイザー324に送る。一実施形態では、逆バイアスモジュール332は、バイアスモジュール318によって記憶された1つ以上の標識を使用して、バイアスパケットを変換し、それらの元の原始データに戻すことができる。特定の実施形態では、逆バイアスモジュール332は、図3Bに関して以下で説明されるように、パケット又は他のデータセットに関する、既知のバイアス、読み取りバイアス、及び/又は既知のバイアスからの偏差を、設定モジュール352に提供することができる。
更なる実施形態では、逆バイアスモジュール332は、標識を使用することなく、バイアスパケットを変換して、それらの元の原始データに戻す。標識を使用する代わりに、逆バイアスモジュール332は、バイアスモジュール318の逆演算であるアルゴリズムを、実装することができる。このアルゴリズムは、受信された各データパケット、及び/又は選択した数の受信データパケットに関するバイアスを、逆転させることができる。図示の実施形態では、逆バイアスモジュール332は、ECCデコーダ322とデパケタイザー324との間に位置する。更なる実施形態では、逆バイアスモジュール332は、書き込みデータパイプライン106内のバイアスモジュール318の場所に基づいて、読み取りデータパイプライン108内の他の場所に位置することができる。
別の実施形態では、読み取りデータパイプライン108は、出力バッファ330にデータセグメントを送る前に、デパケタイザー324によってフォーマットされたデータセグメントの暗号を解除する、暗号解除モジュール334を含む。データセグメントは、読み取り同期バッファ328によって受信された要求パケットの検索を開始する読み取り要求と共に受信される、暗号化キーを使用して、暗号解除することができる。暗号解除モジュール334は、第1のパケットを、その第1のパケットに関する読み取り要求と共に受信される暗号化キーを使用して暗号解除することができ、次いで、第2のパケットを、異なる暗号化キーを使用して暗号解除することができ、又は暗号解除することなく、読み取りデータパイプライン108の次のステージへと、第2のパケットを通過させることができる。パケットが、非秘密暗号ナンスを有して記憶された場合、そのナンスを暗号化キーと共に使用して、そのデータパケットを暗号解除する。暗号化キーは、クライアント114、コンピュータ112、キー管理プログラム、又はソリッドステート記憶装置コントローラ104によって使用される暗号化キーを管理する他のデバイスから受信することができる。
別の実施形態では、読み取りデータパイプライン108は、デパケタイザー324によってフォーマットされたデータセグメントを解凍する、解凍モジュール336を含む。一実施形態では、解凍モジュール336は、パケットヘッダ及びコンテナラベルの一方、若しくは双方内に記憶された圧縮情報を使用して、圧縮モジュール312によってデータを圧縮するために使用されたルーチンに対する、相補的なルーチンを選択する。別の実施形態では、解凍モジュール336によって使用される解凍ルーチンは、データセグメントを解凍することを要求するデバイスによって、指定される。別の実施形態では、解凍モジュール336は、データ構造タイプ又はデータ構造クラスをそれぞれの基準とする、デフォルトの設定に従って、解凍ルーチンを選択する。第1のオブジェクトの第1のパケットは、デフォルトの解凍ルーチンを上書きすることが可能であり得、同一のデータ構造のクラス及びデータ構造のタイプの、第2のデータ構造の第2のパケットは、デフォルトの解凍ルーチンを使用することができ、同一のデータ構造のクラス及びデータ構造のタイプの、第3のデータ構造の第3のデータパケットは、解凍を使用しない場合がある。
別の実施形態では、読み取りデータパイプライン108は、読み取りデータパイプライン108内部での1つ以上のユーザー定義可能な機能を含む、読み取りプログラムモジュール338を含む。読み取りプログラムモジュール338は、書き込みプログラムモジュール310と同様の特性を有し、読み取りデータパイプライン108に、ユーザーがカスタム機能を提供することを可能にする。読み取りプログラムモジュール338は、図3Aに示されるように位置することができ、読み取りデータパイプライン108内部の別の場所に位置することができ、又は読み取りデータパイプライン108内部の複数の場所内の、複数の部分を含み得る。更には、読み取りデータパイプライン108内部の、複数の場所内部に、独立して動作する複数の読み取りプログラムモジュール338が存在し得る。当業者には、読み取りデータパイプライン108内部の読み取りプログラムモジュール338の、他の形態が認識されるであろう。書き込みデータパイプライン106と同様に、読み取りデータパイプライン108のステージは、再配列することができ、当業者には、読み取りデータパイプライン108内部のステージの、他の順序が認識されるであろう。
ソリッドステート記憶装置コントローラ104は、制御及び状態レジスタ340、並びに対応する制御キュー342を含む。制御及び状態レジスタ340、並びに制御キュー342は、書き込みデータパイプライン106及び読み取りデータパイプライン108内で処理されるデータに関連する、コマンド及びサブコマンドの、制御並びに順序付けを促進する。例えば、パケタイザー302内のデータセグメントは、ECCエンコーダ304に関連する、制御キュー342内の1つ以上の対応する制御コマンド又は命令を有し得る。データセグメントがパケット化される際、一部の命令又はコマンドを、パケタイザー302内部で実行することができる。他のコマンド又は命令は、そのデータセグメントから作成された新規形成データパケットが、次のステージに渡される際に、制御及び状態レジスタ340を通じて、次の制御キュー342に渡すことができる。
コマンド又は命令は、パケットが書き込みデータパイプライン106に転送されている間に、同時に制御キュー342内に読み込むことができ、各パイプラインステージは、対応するパケットがそのステージによって実行される際に、適切なコマンド又は命令を引き出す。同様に、コマンド又は命令は、パケットが読み取りデータパイプライン108から要求されている間に、同時に制御キュー342内に読み込むことができ、各パイプラインステージは、対応するパケットがそのステージによって実行される際に適切なコマンド又は命令を引き出す。当業者には、制御及び状態レジスタ340、並びに制御キュー342の、他の特徴及び機能が認識されるであろう。
ソリッドステート記憶装置コントローラ104及び/又はソリッドステート記憶デバイス102はまた、バンクインターリーブコントローラ344、同期バッファ346、記憶バスコントローラ348、及びマルチプレクサー(「MUX」)350も含み得る。
記憶セルの設定
図3Bは、ソリッドステート記憶装置コントローラ104の別の実施形態301を示す、概略ブロック図である。図示の実施形態301では、ソリッドステート記憶装置コントローラ104は、デバイス因数モジュール354、逆バイアスモジュール332、ECCデコーダ322、及び設定モジュール352を含む。図3Bには示されないが、図3Bに示す実施形態のソリッドステート記憶装置コントローラ104はまた、特定の実施形態では、上述のような、図3Aに示すソリッドステート記憶装置コントローラ104からの、1つ以上の追加的モジュール又は他の素子も含み得る。
図示の実施形態301では、設定モジュール352は、逆バイアスモジュール332、ECCデコーダ322、及びデバイス因数モジュール354からの入力を受信し、設定モジュール352は、その入力に基づいて、設定パラメーター調整358を判定する。他の実施形態では、設定モジュール352は、逆バイアスモジュール332のみから、ECCデコーダ322のみから、デバイス因数モジュール354のみから、あるいは逆バイアスモジュール332、ECCデコーダ322、及び/又はデバイス因数モジュール354の異なる組み合わせからの入力を受信することができる。
逆バイアスモジュール332は、一実施形態では、データセットの既知のバイアス及び/又は実際の読み取りバイアスを設定モジュール352に提供する。逆バイアスモジュール332は、ソリッドステート記憶媒体110に書き込まれるデータに、バイアスモジュール318が適用する、可逆的バイアス印加アルゴリズムに基づく予想バイアスとして、既知のバイアスを提供することができる。この予想バイアスは、特定の実施形態では、あるバイアスに正確に適合するようにデータにバイアスを印加する可逆的バイアス印加アルゴリズムを、バイアスモジュール318が使用する場合の、正確なバイアスとすることができる。例えば、バイアスモジュール318が、データセットに埋め込みデータを追加することにより、そのデータセットは、バイナリ1とバイナリ0との正確な平衡などを有し得、既知のバイアスを正確なものにすることができる。
別の実施形態では、逆バイアスモジュール332は、バイアスモジュール318がデータに適用する、可逆的バイアス印加アルゴリズムに基づく範囲、分散、平均、推定などとして、予想バイアスを提供することができる。例えば、逆バイアスモジュール332は、逆バイアスモジュール332が、ソリッドステート記憶媒体110から読み取られたデータに、逆バイアス印加アルゴリズムを適用する際、予想バイアスを、経時的に測定又は学習することができる。一実施形態では、予想バイアスは、バイアスモジュール318の可逆的バイアス印加アルゴリズムから、数学的に、又は他の方法で、可能なバイアス若しくは適当なバイアスの範囲又は分散として導き出すことができる。
例えば、バイアスモジュール318が、直流(「DC」)平衡と称される場合もある、半分のバイナリ1と半分のバイナリ0との平衡に向けて、データにバイアスを印加する場合は、バイアスデータに関する実際のバイアスの範囲は、約46パーセントのバイナリ1〜54パーセントのバイナリ1などの範囲とすることができる。データセットの既知のバイアス、及び読み取りバイアスはまた、他の実施形態では、個々のバイナリ1及びバイナリ0に排他的に基づく代わりに、ビットの、マルチビットシンボル又はパターンなどにも基づき得る。逆バイアスモジュール332は、図示の実施形態301では、設定モジュール352に入力を提供するが、特定の実施形態では、バイアスモジュール318が、既知のバイアスとして、設定モジュール352に予想バイアスを提供することができ、この既知のバイアスは、設定モジュール352内にハードコード化又はプログラムすることなどができる。
一実施形態では、逆バイアスモジュール332は、ソリッドステート記憶媒体110から読み取られたデータセットの読み取りバイアスを、設定モジュール352に提供する。例えば、逆バイアスモジュール332が、バイアスモジュール318のバイアス印加プロセスを逆行させることによって、バイアスデータパケット又は他のデータセットを変換して、それらの元の原始形態に戻す際に、逆バイアスモジュール332は、そのデータパケット又は他のデータセットの読み取りバイアスを、判定、測定、若しくは検出することができる。逆バイアスモジュール332は、使用されるバイアス印加プロセスに応じて、バイアス印加プロセスを逆行させる前に、逆行中に、逆行させた後に、読み取りバイアスを判定することができる。特定の実施形態では、データセットの読み取りバイアスが、そのデータセットの既知のバイアス/予想バイアスから偏移していることを、逆バイアスモジュール332が判定する場合には、逆バイアスモジュール332は、そのデータセットを設定モジュール352に提供して、そのデータセットの記憶セルに、設定パラメーター調整358を実施し得ることにより、そのデータセットを再読み取りすることができる。他の実施形態では、図3Aに関して上述したように、設定モジュール352は、逆バイアスモジュール332がデータセットを受信する前に、そのデータセットに関する読み取り電圧閾値を調整することができる。当業者には、それぞれが本発明の範囲内に含まれる、設定モジュール352、逆バイアスモジュール332、及びECCデコーダ322の他の配置構成が、本明細書の見地から、認識されるであろう。
ECCデコーダ322は、一実施形態では、データセットに関する既知のバイアス及び/又は読み取りバイアスを、設定モジュール352に提供する。ECCデコーダ322は、データセットに関するビットの正しい状態を有する、データセットに関する既知のバイアスを、提供することができる。例えば、ECCデコーダ322が、データセット内の1つ以上の訂正可能なビットエラーを訂正した後、ECCデコーダ322は、そのデータセットのビットのエラー訂正状態を、そのデータセットがソリッドステート記憶媒体110に書き込まれた状態の既知のバイアスとして、設定モジュール352に提供することができる。ECCデコーダ322は、更なる実施形態では、データセットに関する読み取りバイアスを、そのデータセットがソリッドステート記憶媒体110から読み取られた際にエラー状態にあった、データセットの1つ以上のビットを指示するエラーバイアスとして、提供することができる。
ECCデコーダ322は、訂正可能なエラーに関しては、データセットのビットの、正確な、元の正しい値(既知のバイアス)、及びそのデータセットのエラー状態のビットの正確な場所(エラーバイアス)を判定するため、設定モジュール352は、既知のバイアスからの、そのデータセットの正確な偏差を判定することができる。この理由のために、特定の実施形態では、設定モジュール352は、利用可能な場合、ECCデコーダ322からの既知のバイアス及びエラーバイアスを使用して、逆バイアスモジュール332からの予想バイアス及び読み取りバイアスを使用するよりも正確な設定パラメーター調整358を実施することができる。
設定モジュール352は、一実施形態では、データセット内の1つ以上の訂正可能なビットエラーに応答して、ECCデコーダ322からのデータセットに関する既知のバイアス及び/又はエラーバイアスを使用する。更なる実施形態では、設定モジュール352は、可逆的バイアス印加アルゴリズムに基づく予想バイアスを、既知のバイアスとして使用する。特定の実施形態では、予想バイアスは、データセット内の1つ以上の訂正不能なビットエラーに応答して、既知のバイアスとして使用される。訂正不能ビットエラーに関しては、ECCデコーダ322からのエラーバイアスは、設定モジュール352が利用することはできないが、これは訂正不能ビットエラー条件により、バイアスが未定義となるためである。データセット内の訂正不能ビットエラーに関しては、特定の実施形態では、より大きいエラーの深刻度のために、データセットの読み取りバイアスは、訂正可能なビットエラーに関するよりも、そのデータセットに関する既知の予想バイアスから大きく偏移し得る。訂正不能ビットエラーに関する、データセットの既知の予想バイアスからの、データセットの読み取りバイアスのより大きい偏差の規模のために、逆バイアスモジュール332からのバイアス情報は、訂正可能なビットエラーに関するよりも、訂正不能ビットエラーに関して、設定パラメーター調整358に関するより良好な方向の標識を提供することができる。
デバイス因数モジュール354は、一実施形態では、ソリッドステート記憶デバイス102に関する1つ以上の統計を設定モジュール352に提供する。設定モジュール352は、一実施形態では、その1つ以上の統計に基づいて、設定パラメーター調整358を実施することができ、その1つ以上の統計を使用して、逆バイアスモジュール332及び/又はECCデコーダ322からの情報を補完することなどが可能である。ソリッドステート記憶デバイス102に関する1つ以上の統計は、一実施形態では、ソリッドステート記憶デバイス102の記憶セルの読み取り電圧に影響を及ぼし得る統計を含む。例えば、特定の実施形態では、1つ以上の統計としては、ソリッドステート記憶デバイス102に関する温度、ソリッドステート記憶デバイス102に関するエラー率(訂正不能ビットエラー率「UBER」)などのような)、ソリッドステート記憶デバイス102に関する消去サイクル回数、ソリッドステート記憶デバイス102に関する記憶要求待ち時間(平均、最大、又は他の、記憶要求実行待ち時間など)、ソリッドステート記憶デバイス102の経年、及び/又は他の統計若しくは特性を挙げることができる。
図示の実施形態301では、デバイス因数モジュール354は、1つ以上のセンサー356からの入力を受信する。1つ以上のセンサー356は、それぞれ、温度、湿度、移動、及び/又は他の統計などの、ソリッドステート記憶デバイス102に関する統計若しくは特性を検出する。例えば、様々な実施形態では、1つ以上のセンサー356としては、温度センサー、湿度センサー、加速度計、及び/又はソリッドステート記憶デバイス102に関する別のタイプのセンサーを挙げることができる。一実施形態では、デバイス因数モジュール354及び/又は設定モジュール352は、1つ以上の他のモジュール又は素子から、ソリッドステート記憶デバイス102に関する1つ以上の統計を受信することができる。例えば、デバイス因数モジュール354及び/又は設定モジュール352は、ECCデコーダ322から、UBERなどのような、ソリッドステート記憶デバイス102に関するエラー率を受信することができる。
設定モジュール352は、様々な実施形態では、逆バイアスモジュール332、ECCデコーダ322、及び/又はデバイス因数モジュール354からの、単一の入力若しくは入力の組み合わせに、設定パラメーター調整358の基盤を置くことができる。特定の実施形態では、逆バイアスモジュール332、ECCデコーダ322、及び/又はデバイス因数モジュール354からの、1つ以上の入力は、データセットに関して利用することができない場合がある。例えば、ECCデコーダ322は、訂正不能なビットエラーを有するデータセットに関しては、エラーバイアス及び既知のバイアスを提供することができず、逆バイアスモジュール332は、逆バイアスモジュール332が予想バイアスを判定している間の、学習期間中のデータセットに関しては、既知の予想バイアス又は読み取りバイアスを提供することができず、デバイス因数モジュール354は、最初の始動期間中は、1つ以上の統計を提供することができない、などの場合がある。
一実施形態では、設定モジュール352は、入力の既定の階層性又は序列による、最良の利用可能な入力に、設定パラメーター調整358の基盤を置く。例えば、設定モジュール352は、利用可能な場合には、ECCデコーダ322からの、既知のバイアス及びエラーバイアスに、ECCデコーダ322からの入力が利用可能ではない場合には、逆バイアスモジュール332からの、既知の予想バイアス及び読み取りバイアスに、ECCデコーダ322及び逆バイアスモジュール332の双方からの入力が利用不可能である場合には、デバイス因数モジュール354からの1つ以上の統計に、設定パラメーター調整358の基盤を置くことができる。
更なる実施形態では、設定モジュール352は、逆バイアスモジュール332、ECCデコーダ322、及びデバイス因数モジュール354のそれぞれからの入力が利用不可能である場合には、データエラーなどに応答して、無作為の設定パラメーター調整358を実施することができる。例えば、設定モジュール352は、一方向での設定パラメーター調整358を試みて、データセットを再読み取りし、エラーに関する検査を行い、エラーが持続する場合には、逆方向での設定パラメーター調整358を試みることができる。
別の実施形態では、設定モジュール352は、逆バイアスモジュール332、ECCデコーダ322、及び/又はデバイス因数モジュール354からの入力を組み合わせることによって、複数の入力に、設定パラメーター調整358の基盤を置くことができる。設定モジュール352は、入力をスケーリングし、入力を重み付けし、入力を共通の単位に変換するなどして、入力の組み合わせを促進することができる。例えば、設定モジュール352は、一実施形態では、各入力を、個々の予備閾値調整に変換し、次いで、その予備閾値調整を合計して、設定パラメーター調整358を提供することができる。設定モジュール352は、実施例では、関連する入力の既定の階層性又は序列に基づいて、各予備閾値調整を重み付けすることができる。例えば、ECCデコーダ322からの、既知のバイアス及びエラーバイアスが、一方向での設定パラメーター調整358を指示し、逆バイアスモジュール332からの、既知の予想バイアス及び読み取りバイアスが、逆方向での設定パラメーター調整358を指示する場合には、既定の階層性又は序列内で、より大きい重み又は優先度を有する入力が、設定パラメーター調整358の方向を指定することになる。
図4は、設定モジュール352の一実施形態を示す、概略ブロック図である。図示の実施形態では、設定モジュール352は、データセット読み取りモジュール402、偏差モジュール404、方向モジュール406、調整モジュール408、持続モジュール410、ECCモジュール412、分散モジュール414、データセットソースモジュール422、事前対応設定モジュール424、及び書き込み電圧モジュール416を含む。書き込み電圧モジュール416は、設定モジュール352に統合することができ、又は設定モジュール352から分離することもできる。図3A及び図3Bの設定モジュール352に関して上述したように、設定モジュール352は、設定モジュール352が、ソリッドステート記憶媒体110の1つ以上の記憶セルに関する、読み取り電圧閾値、及び/又は別の設定パラメーターを調整することができるように、書き込みデータパイプライン106の一部分、読み取りデータパイプライン108の一部分、ソリッドステート記憶媒体110の一部分などとすることができる。読み取り電圧閾値を、例示的な設定パラメーターとして使用する、特定の実施形態が説明されるが、設定モジュール352は、他の設定パラメーターを、同様に、判定及び調整することができる。
設定モジュール352は、一実施形態では、事前対応設定モジュール424を使用する開ループモデルで、設定パラメーターを、事前対応的に設定する。別の実施形態では、設定モジュール352は、データセット読み取りモジュール402、偏差モジュール404、方向モジュール406、及び/又は調整モジュール408を使用する閉ループモデルで、設定パラメーターを、反応的に設定する。特定の実施形態では、設定モジュール352は、設定パラメーターに、幾つかの層又は相の調整を実施することができ、事前対応設定モジュール424を使用して、設定パラメーターを事前対応的に判定し、またデータセット読み取りモジュール402が、ソリッドステート記憶媒体110からデータセットを読み取る際に、その設定パラメーターを反応的に調整する。
一実施形態では、データセット読み取りモジュール402は、ソリッドステート記憶媒体110の記憶セルから、データセットを読み取る。データセット読み取りモジュール402は、ソリッドステート記憶媒体110から、直接的に、又は間接的に、データセットを読み取ることができる。例えば、一実施形態では、データセット読み取りモジュール402は、読み取りデータパイプライン108内、ソリッドステート記憶媒体110内などの、別のモジュール又は素子から、データセットを受信することができる。
一実施形態では、データセット読み取りモジュール402は、試験操作に応答してデータセットを読み取り、そのデータセットは、試験操作の一部として読み取られるサンプルデータセットとすることができる。更なる実施形態では、データセット読み取りモジュール402は、クライアントからの読み取り要求に応答してデータセットを読み取り、そのデータセットは、クライアントか要求したデータセットとすることができる。データセットは、一実施形態では、完全パケット、パケットの一部分などとすることができる。別の実施形態では、データセットのサイズは、試験操作によって、クライアントからの読み取り要求などによって、設定することができる。更なる実施形態では、データセットは、パケット又は他のデータ構造から独立した、ソリッドステート記憶媒体110からの生データとすることができる。
データセットは、更なる実施形態では、既知のバイアスを有する記憶セル内に、元々記憶されていたものである。例えば、データセットは、バイアスモジュール318がバイアス印加したパケットからのものとすることができ、又は例えば、ソリッドステート記憶媒体110の製造元による既知のバイアスで、ソリッドステート記憶媒体110にプログラムされた、デフォルトのデータ若しくは他のデータを記憶する、未使用状態の、ソリッドステート記憶媒体110の記憶セルからのものなどとすることができる。
一実施形態では、データセットは、バイアスモジュール318が、パケットにバイアスを印加するために採用する、バイアス印加スキームに関連して、サイズ設定することができる。例えば、一実施形態では、データセットは、バイアスモジュール318が、パケットにバイアスを印加するために使用する、擬似ランダム2進シーケンスなどの、決定論的シーケンスの期間に基づいて、サイズ設定することができる。データセットのサイズが、擬似ランダム2進シーケンスの期間の整数倍に接近するほど、得られるデータセットのバイアスが、既知のバイアスに適合する可能性が高くなる。更なる実施形態では、バイアスモジュール318は、既定サイズのデータセットが、既知のバイアスから閾値量を超えて偏移することのないバイアスを有することを、保証することができる。この閾値量は、ゼロから、所定の正数値又はパーセント値までの範囲とすることができる。
上述のように、バイアスは、特定のデータパターンを呈するための、ビットのセット内部のビットに関する値の、優先度、確率、又は傾向である。一実施形態では、既知のバイアスは、ビットのセット、又はビットのセットのグルーピング内部での、バイナリ1とバイナリ0との既知の比率である。この既知の比率は、一実施形態では、ゼロ〜1の比又はパーセンテージとして表現することができ、ゼロの比率は、排他的に1の値のバイアスを表し、1の比率は、排他的に他方の値のバイアスを表す。一実施形態では、既知の比率は、ゼロよりも大きく、1未満であり、この既知の比率が、排他的に1のバイナリ値の比率と、排他的に反対のバイナリの比率との間の、オフセットであることを意味する。既知の比率が、ゼロよりも大きく、1未満である場合には、データセットの読み取りバイアスでの偏差は、この既知の比率から、いずれの方向にも発生し、依然として、設定モジュール352によって検出可能なままに維持され得る。
図示の実施形態では、データセット読み取りモジュール402は、監視モジュール418及び読み取りエラーモジュール420を含む。データセット読み取りモジュール402は、一実施形態では、監視モジュール418及び/又は読み取りエラーモジュール420を使用して、データセットを読み取ることができる。
一実施形態では、監視モジュール418は、コンピュータ112又は他のクライアント114からの読み取り要求に応答して、ソリッドステート記憶媒体110から読み取られるデータセットを監視する。監視モジュール418は、ソリッドステート記憶媒体110から読み取られる各データセットを監視することができ、又はソリッドステート記憶媒体110から読み取られる、特定のデータセットを、既定の間隔で、又は記憶装置のクライアントからのコマンド若しくはディレクティブに応答して、などのように、選択することができる。監視モジュール418を使用して、ソリッドステート記憶媒体110から読み取られるデータセットを監視することによって、設定モジュール352は、そのソリッドステート記憶媒体110に関する読み取り電圧閾値を動的に調整し、訂正不能なデータエラーが発生することを防ぐことができる。
一実施形態では、読み取りエラーモジュール420は、データセット内で識別されたデータエラーに応答して、そのデータセットを読み取る。例えば、ECCデコーダ322又は別のモジュールが、データエラーが発生したことを判定することができる。一実施形態では、このデータエラーは、訂正するための十分な情報をECCデコーダ322が有さない、訂正不能なビットエラーである。具体的には、ECCデコーダ322は、一実施形態では、データセット内の、特定の数までのエラー状態ビット(エラー状態ビットの数−#BER)を、検出及び訂正するように構成される。エラー状態ビットの数が、この#BERを超過する場合、ECCデコーダ322は、訂正不能データエラー、訂正不能ビットエラーなどの信号を送ることができる。
データエラーは、ソリッドステート記憶媒体110の、1つ以上の記憶セル内に保持される電圧レベルの推移によって、発生し得る。この記憶セルの保持電圧レベルは、本明細書では、読み取り電圧レベルと称される。読み取りエラーモジュール420は、一実施形態では、試験操作の一部として、データセットを読み取る。設定モジュール352は、データエラーに応答して、定期保守操作に応答して、初期較正操作などに応答して、試験操作を遂行することができる。読み取りエラーモジュール420によって使用されるデータセットは、クライアント要求パケットから来る場合もあり、又は試験操作の一部として読み取られる、サンプルデータとすることもできる。
特定の実施形態では、データセット読み取りモジュール402は、試験操作に応答して、定期的に、監視中に、などのようにサンプルデータのデータセットを読み取る場合、ソリッドステート記憶媒体110の、過剰読み取り帯域幅の範囲内に適合するように、そのサンプルデータセットをサイズ設定することができる。ソリッドステート記憶媒体110の過剰読み取り帯域幅の範囲内に適合するように、サンプルデータをサイズ設定することによって、一実施形態では、サンプルデータの読み取りは、ソリッドステート記憶媒体110に読み取り要求を供給するための、読み取り帯域幅、又はソリッドステート記憶媒体110の読み取りスループットに、影響を及ぼし得ない。一実施形態では、データセット読み取りモジュール402は、読み取り要求によって要求されるよりも多くの量のデータを有する、ソリッドステート記憶媒体110からのデータセットを読み取り、設定モジュール352が、読み取り電圧閾値に対する調整などを判定するために使用する、より大きいサンプルサイズのビットを提供することができる。要求されるデータの量よりも大きいサンプルサイズは、特定の実施形態では、読み取り電圧閾値の調整の正確性を改善することができる。
例えば、ユーザーの用途が、512バイトのデータを要求し、ソリッドステート記憶媒体110が、800バイトの読み取り要求内のデータを、512バイトのデータと実質的に同じ速度で読み取ることができる場合、一実施形態では、データセット読み取りモジュール402は、800バイトのデータセットを、読み取り電圧閾値を調整するために読み取り、この動作の読み取り時間に影響を及ぼすことなく、要求された512バイト(800バイトのデータセットのサブセット)を、ユーザーの用途に提供することができる。一実施形態では、データセット読み取りモジュール402は、最小データセット要求サイズを設定し、各読み取り要求に関して、その読み取り要求が最小データセット要求サイズよりも小さい場合であっても、少なくとも最小データセット要求サイズの量のデータを検索する。最小データセット要求サイズは、特定の実施形態では、1つ以上のECCチャンク、1つ以上のページ、1つ以上の消去ブロックの境界の範囲内、ソリッドステート記憶媒体110の過剰帯域幅の範囲内などに適合するように、選択することができる。一実施形態では、最小データセット要求サイズは、ソリッドステート記憶媒体110、読み取りデータパイプライン108などの、アーキテクチャー又はジオメトリに基づいて、選択することができる。
一実施形態では、偏差モジュール404は、データセットに関する読み取りバイアスが、そのデータセットが元々記憶された状態の既知のバイアスから偏移していることを判定する。データセットの読み取りバイアスは、その読み取りバイアスと既知のバイアスとの間に差異が存在する場合、その既知のバイアスから偏移している。一実施形態では、既知のバイアスが、エラー訂正されたビット値を含む場合、又はバイアスモジュール318が、正確なバイアスへとバイアス印加する場合などの、既知のバイアスが正確である場合は、偏差モジュール404は、読み取りバイアスと既知のバイアスとのいずれの差異も、既知のバイアスからの偏差を含むことを判定することができる。他の実施形態では、既知のバイアスとしては、平均バイアス、推定バイアス、バイアスの分散、バイアスの範囲などを挙げることができる。偏差モジュール404は、これらの実施形態では、既知のバイアスの範囲又は分散の外側の読み取りバイアス、既知のバイアスから少なくとも既定の偏差閾値で離れている読み取りバイアスなどが、その既知のバイアスから偏移していることを、判定することができる。
一実施形態では、データセットの読み取りバイアスと既知のバイアスとの差異は、バイナリ1とバイナリ0との比率の差異とすることができる。他の実施形態では、データセットのバイアスと既知のバイアスとの差異は、バイナリパターンの差異、マルチビットバイナリシンボルの差異などとすることができる。図3Bに関して上述したように、様々な実施形態では、偏差モジュール404は、ECCデコーダ322、逆バイアスモジュール332などから、データセットに関する元の既知のバイアス及び/又は読み取りバイアスを受信することができる。
偏差モジュール404は、一実施形態では、データセットの読み取りバイアスが、既知のバイアスから偏移しているか否かを、読み取りバイアスと既知のバイアスとを比較することによって判定する。偏差モジュール404は、データセット内のバイナリ1の数及びバイナリ0の数を計数して、そのデータセット内のバイナリ1とバイナリ0との比率を判定し、その比率と既知のバイアスの比率とを比較することによって、読み取りバイアスと既知のバイアスとを比較することができる。更なる実施形態では、偏差モジュール404は、既知のバイアスの予想パターン又は他の予想属性の出現を、探索及び/又は計数して、データセット内での同様の探索及び/又は計数の結果と、その予想属性とを比較することができる。特定の実施形態では、ECCデコーダ322は、データセットに関するエラーバイアスを、設定モジュール352に提供することなどによって、そのデータセットの読み取りバイアスが、既知のバイアスから偏移していることを、偏差モジュール404に指示する。
既知のバイアスが、ビットのパターン、マルチビットバイナリシンボルなどを含む実施形態では、偏差モジュール404は、データセットのビットに対して変換を実行し、データセットのビットのサブセットを分析するなどして、そのデータセットの読み取りバイアスが、既知のバイアスから偏移しているか否かを、判定することができる。例えば、偏差モジュール404は、グレイコード符号化タイプ、バイナリコード符号化タイプなどのような、ソリッドステート記憶媒体110の記憶セルに関して使用される符号化タイプに基づいて、変換を実行することができる。この変換は、特定の実施形態では、記憶媒体110の記憶セルの物理的及び/又は電気的アーキテクチャーに基づき得る。
例えば、図6Cに関して、以下で説明されるように、マルチレベル記憶セルは、少なくとも、最上位ビット(「MSB」)及び最下位ビット(「LSB」)を記憶する。特定の実施形態では、MSB及びLSBは、同一の物理マルチレベル記憶セルの一部であるが、ソリッドステート記憶媒体110の異なるページに割り当てることができる。特定の実施形態では、複数個のマルチレベル記憶セルが、ソリッドステート記憶媒体110(例えば、NANDフラッシュなど)上で、物理ページとして編成される。特定のソリッドステート記憶媒体110では、物理ページは、ソリッドステート記憶媒体110に書き込むことができる、最小の単位である。そのような実施形態では、マルチレベル記憶セルは、ページ対と関連付けることができる。ページ対は、物理マルチレベル記憶セルの単一のセットと関連付けられる、1対のページ(上位及び下位)である。例えば、マルチレベル記憶セルは、上位ページ及び下位ページを含むページ対と、関連付けることができる。上位ページは、MSBと関連付けることができ、下位ページは、LSBと関連付けることができ、又は逆も同様である。
それゆえ、同一の物理マルチレベル記憶セル内の、MSB及びLSBは、記憶デバイス102内の異なるアドレスを有し得る。特定の実施形態では、上位ページは、複数個のマルチレベル記憶セルのMSBを含み、下位ページは、同一のマルチレベル記憶セルのLSBを含む。したがって、上位ページに向けられる書き込みは、関連するマルチレベル記憶セルの、MSBのみの変化を引き起こすことができ、一方で、下位ページに向けられる書き込みは、関連するマルチレベル記憶セルの、LSBのみの変化を引き起こす。
図6Cに関して、以下でより詳細に説明されるように、特定の実施形態では、データセット読み取りモジュール402は、マルチレベル記憶セルのグルーピングによって記憶されるビットのサブセットのみを含む、データセットを読み取ることができ、偏差モジュール404は、そのデータセットの読み取りバイアスが、既知のバイアスから偏移しているか否かを、そのビットのサブセットに基づいて、判定することができる。例えば、データセットは、LSB(下位ページ)からのデータ値のみ、MSB(上位ページ)からのデータ値のみなどを含み得る。別の実施形態では、偏差モジュール404は、データセットの読み取りバイアスが、既知のバイアスから偏移しているか否かを、ソリッドステート記憶媒体110の記憶セルに関して使用される符号化タイプ、記憶媒体110の記憶セルの物理的及び/又は電気的アーキテクチャーなどに、少なくとも部分的に基づいて、判定することができる。他の実施形態では、偏差モジュール404は、異なるページからのデータを組み合わせて、単一のデータセット内にLSBビット及びMSBビットの双方を含むことができ、LSBビット及びMSBビット並びに/あるいは異なるデータセットからのページを調整することなどができるような、データセットに対する変換を実行することができる。
偏差モジュール404は、一実施形態では、データセット読み取りモジュール402が読み取る各データセットの、読み取りバイアスを検査する。例えば、データセット読み取りモジュール402が、監視モジュール418を使用する場合には、偏差モジュール404は、データセットの読み取りバイアスを、それらのデータセットがソリッドステート記憶媒体110から読み取られる際、規則的に監視することができる。監視モジュール418は、一実施形態では、クライアントによって要求される各データセットの読み取りバイアスを比較することができる。更なる実施形態では、監視モジュール418は、要求データセットの読み取りバイアスを、例えば定期的間隔で、及び/又はコマンドに応答して、などのように、検査することができる。別の実施形態では、データセット読み取りモジュール402が、読み取りエラーモジュール420を使用する場合には、偏差モジュール404は、データセットの読み取りバイアスを、データエラーに応答して、試験操作の一部として、などのように、検査することができる。
一実施形態では、方向モジュール406は、データセットに関する偏差の方向を判定する。偏差の方向は、一実施形態では、データセットの読み取りバイアスと既知のバイアスとの差異である。差異の方向は、値、符号(すなわち、正又は負)、関係(すなわち、より大きい、より小さい)、方向(すなわち、上、下)などとして表すことができる。方向モジュール406は、特定の実施形態では、ソリッドステート記憶媒体110の記憶セルに関して使用される符号化タイプに基づいて、記憶媒体110の記憶セルの物理的及び/又は電気的アーキテクチャーなどに基づいて、偏差の方向を判定することができる。例えば、方向モジュール406は、データセット内のバイアスの偏差を検討し、記憶媒体のタイプ(2ビットMLC、3ビットMLC、nビットMLC)、多相プログラミングモデルのいずれのページが読み取られたか、ソリッドステート記憶媒体110に関する符号化タイプ(グレイコード符号化タイプ、バイナリコード符号化タイプなどのような)、及び/又は判定された偏差の規模に基づいて、偏差の方向を判定することができる。
方向モジュール406は、一実施形態では、既知のバイアスの比率、比、又は他の表示を、データセットの読み取りバイアスの表示から、減算することによって、方向を判定することができる。例えば、一実施形態では、方向モジュール406は、既知のバイアスに基づいて予想される、バイナリ1、バイナリ0、マルチビットバイナリシンボルなどの比を、データセット内にあるバイナリ1、バイナリ0、マルチビットバイナリシンボルなどの比から減算することができる。バイナリ1の比率が比較されるのか、若しくはバイナリ0の比率が比較されるのか、及び高電圧がバイナリ1若しくはバイナリ0のいずれを表すのか、又は記憶セルの他の特定のアーキテクチャーに応じて、方向モジュール406は、その差異を逆転させるか、別の変換を実行して、方向を判定することができる。
ECCデコーダ322からのエラーバイアスが利用可能である実施形態では、方向モジュール406は、エラーバイアスによって指示されるような、エラー状態にあるデータセットの1つ以上のビットに基づいて、偏差の方向を判定することができる。他の実施形態では、図3Bに関して上述したように、方向モジュール406は、逆バイアスモジュール332、ECCデコーダ322、及び/又はデバイス因数モジュール354からの入力に基づく方向を組み合わせて、偏差の方向を判定することなどができる。
一実施形態では、バイナリ0は、読み取り電圧閾値よりも低い電圧によって表され、バイナリ1は、読み取り電圧閾値よりも高い電圧によって表される。一実施例では、データセットは、0.5の既知のバイアスを有して記憶されるが、これは、そのデータセットの予想バイアスが、半分のバイナリ1、又はDC平衡となるはずであることを表す。この実施例では、データセットが、記憶セルから読み取られ、そのデータセットは、70パーセントのデータビットがバイナリ1であることを意味する、0.7の読み取りバイアスを有する。方向を判定するために、一実施形態では、方向モジュール406は、予想バイアス0.5を、データセットの読み取りバイアス0.7から減算し、0.2の方向が得られる。方向は、全体結果(すなわち、「0.2」)、結果の符合(すなわち、「正」)、関係(すなわち、「より大きい」)、方向(すなわち、「上」)、又は0.5の予想バイアスと0.7の読み取りバイアスとの差異を表す別の標識とすることができる。
別の実施例では、データセットの読み取りバイアスが、30パーセントのデータビットがバイナリ1であることを意味する、0.3である場合には、方向モジュール406は、一実施形態では、予想バイアス0.5を、データセットの読み取りバイアス0.3から減算して、−0.2の差異が得られる。この実施例では、方向は、第1の実施例の反対、すなわち、「−0.2」、「負」、「より小さい」、「下」などになる。
予想バイアスは既知であるため、既知のバイアスに対して読み取りバイアスを比較することは、既知のバイアスと合致するはずであった特定のビットが、現状では合致しないことを指示し、このことは、データエラーによるものか、又は記憶セルに書き込まれた後の、記憶セル内に記憶された電圧レベルの変化によるものとすることができる。更には、その差異が正又は負であると判定することは、データセットの再読み取りが、既知のバイアスと同一か若しくはより近接する読み取りバイアスを生じさせるようにするために、その読み取り電圧を増大させるべきか、又は減少させるべきかを指示する。一実施形態では、設定モジュール352が、方向モジュール406によって指示された方向と同じ方向に、読み取り電圧レベルを調整する。
有利には、いずれの方向に読み取り電圧閾値を調整するかについての指示を有することは、新たな調整読み取り電圧レベルを特定するために必要とされる時間及びリソースの著しい低減をもたらす。読み取り電圧閾値を作成する方向が不明であった場合には、新たな読み取り電圧閾値を特定することは、種々の可能な読み取り電圧閾値を設定して、次いで試験し、必要に応じて次いで調整が行なわれるため、労力及び時間集約的な、試行錯誤のプロセスを必要とし得る。このプロセスは、既知のバイアスに実質的に適合するデータパケットの再読み取りを生じさせる、読み取り電圧閾値を見出すために、必要とされ得る。
一実施形態では、調整モジュール408は、ソリッドステート記憶媒体110の記憶セルに関する読み取り電圧閾値を、方向モジュール406が判定する偏差の方向に基づいて調整する。調整モジュール408は、一実施形態では、偏差の方向に、偏差の方向から離れて、などのように、読み取り電圧閾値を調整することができる。例えば、一実施形態では、調整モジュール408は、方向モジュール406が、既知のバイアス内で予想されたよりも、多くのバイナリ1を検出することに応答して、読み取り電圧閾値を引き上げ、予想よりも少ないバイナリ1に応答して、読み取り電圧閾値を引き下げることができる。この相対方向は、ソリッドステート記憶媒体110の記憶セルの特性、及び採用される記憶スキームに基づいて変化し得るが、調整モジュール408は、方向モジュール406によって判定された差異を、訂正又は補正するように、読み取り電圧閾値を調整する。
更なる実施形態では、調整モジュール408は、方向モジュール406によって判定された、方向の振幅又は差異の振幅に基づいて、読み取り電圧閾値を調整する量を判定する。別の実施形態では、調整モジュール408は、方向モジュール406からの振幅を、スケーリングするか、又は他の方法で調整して、その調整量で、読み取り電圧閾値を調整することができる。例えば、調整モジュール408は、一実施形態では、方向の振幅に基づいて、単一の調整内での、幾つかの調整レベルによって、読み取り電圧閾値を調整することができる。更なる実施形態では、調整モジュール408は、ソリッドステート記憶媒体110の、経年、消耗の量、使用履歴、エラー履歴、又は他の態様などの、追加的因数に基づいて、読み取り電圧閾値を調整する量を選択することができる。図3Bに関して上述したように、特定の実施形態では、調整モジュール408は、設定モジュール352がデバイス因数モジュール354から受信する、ソリッドステート記憶デバイス102に関する1つ以上の統計に基づいて、読み取り電圧閾値調整を実施することができる。
別の実施形態では、調整モジュール408は、探索アルゴリズムを使用して、偏差の方向に基づいて読み取り電圧閾値を判定する。例えば、現時点の読み取り電圧閾値からの偏差の方向での電圧の範囲は、探索アルゴリズムに関する探索空間とすることができる。調整モジュール408は、一実施形態では、線形探索、二分探索などを使用して、読み取り電圧閾値を判定することができる。探索アルゴリズムの一部として、各工程を検査するために、データセット読み取りモジュール402は、各調整に応答して、データセットを再読み取りすることができ、偏差モジュール404は、再読み取りデータセットの読み取りバイアスが、既知のバイアスから偏移しているか否かを再判定することができる。方向モジュール406は、再読み取りデータセットに関する偏差の方向を再判定して、探索を更に進めることができる。調整モジュール408は、再読み取りデータセットの読み取りバイアスが既知のバイアスから偏移しないことを、偏差モジュール404が判定するまで、又は読み取り電圧閾値レベルのそれぞれが試験済みとなるまで、及び/又はECC検査ビットを使用してデータセットを訂正することができるまで、などのように、再判定された偏差の方向に基づいて、読み取り電圧閾値を、反復的に再調整することができる。
一実施形態では、調整モジュール408は、再試行閾値が一旦満たされると、読み取り電圧閾値の再調整を停止する。例えば、ECCデコーダ322が、データエラーを訂正することができない場合、及び/又はデータセットに関する読み取りバイアスが、既知のバイアスからの偏移を継続する場合には、そのデータセットに関する再試行閾値が満たされると、調整モジュール408は、読み取り電圧閾値への調整の実施を終えることができる。再試行閾値は、可能な読み取り電圧閾値レベルのセットなどに基づいて、選択することができる。一実施形態では、再試行閾値は、調整モジュール408が読み取り電圧閾値を調整することができる回数を設定する。別の実施形態では、再試行閾値は、調整モジュール408が読み取り電圧閾値調整を実施することができる時間量を設定することができる。ソリッドステート記憶装置コントローラ104は、特定の実施形態では、再試行閾値が満たされることに応答して、そのデータセットに関連する記憶セルを退去させること、そのデータセットに関連する記憶セルを論理的に置き換えることなどのような、更なる是正措置を取ることができる。
一実施形態では、調整モジュール408は、データセットの読み取りバイアスが既知のバイアスから偏移していること、データエラーが発生していること、再試行閾値が満たされていないことなどを、偏差モジュール404が判定した場合であっても、読み取り電圧閾値を調整することがない。調整モジュール408は、特定の実施形態では、記憶セルのグルーピングに対する調整に関連する1つ以上のリスク因子に基づいて、読み取り電圧閾値を選択的に調整することができる。例えば、リスク因子としては、記憶セルのグルーピングに関するエラー率(UBERなどのような)、記憶セルのグルーピングに関する消去サイクル回数、記憶セルのグルーピングに関する記憶要求待ち時間(平均、最大、又は他の、記憶要求実行待ち時間など)、記憶セルのグルーピングの経年、記憶セルのグルーピングの読み取り電圧閾値に対する以前の調整の数、及び/又は他の潜在的リスク因子を挙げることができる。一実施形態では、調整モジュール408は、リスク閾値を満たす1つ以上のリスク因子に応答して、読み取り電圧閾値に対する調整を取り消すか、又は遅延させることができる。更なる実施形態では、ソリッドステート記憶装置コントローラ104は、リスク閾値を満たす1つ以上のリスク因子に応答して、更なる是正措置を取ることができる。
調整モジュール408は、一実施形態では、ソリッドステート記憶媒体110の製造元によって提供されるプロシージャ又はコマンドを使用して、読み取り電圧閾値を調整する。例えば、一実施形態では、調整モジュール408は、ソリッドステート記憶媒体110の設定レジスタに値を書き込むことによって、ソリッドステート記憶媒体110に読み取り電圧閾値パラメーターを送ることによって、又はソリッドステート記憶媒体110に読み取り電圧閾値に対する調整を他の方法で通信することによって、読み取り電圧閾値を調整することができる。調整モジュール408は、その調整を、読み取り電圧閾値の絶対値、読み取り電圧閾値を調整する量などとして通信することができる。更なる実施形態では、ソリッドステート記憶媒体110は、読み取り電圧閾値が調整され得る、複数個の離散レベル(すなわち、2〜15個の異なるレベル)を提供する。他の実施形態では、読み取り電圧閾値調整の規模は、ソリッドステート記憶媒体110の販売元又は製造元によって、定義又は推奨することができる。
調整モジュール408は、一実施形態では、ソリッドステート記憶媒体110のダイ、チップ、PEB、又は他の離散的セグメントに関して、読み取り電圧閾値を個々に調整する。調整モジュール408は、更なる実施形態では、各記憶セルに関して、複数の読み取り電圧閾値を調整する。例えば、一実施形態では、ソリッドステート記憶媒体110の記憶セルは、1つのセル当たり複数の読み取り電圧閾値を有する、MLC記憶セルである(すなわち、2ビットMLC記憶セルは、3つの個別の読み取り電圧閾値を有し得る)。調整モジュール408は、複数の読み取り電圧閾値のそれぞれを、一体として移動させることができ、又はそれらを独立して移動させることもできる。
記憶セルが複数の読み取り電圧閾値を有する実施形態では、各読み取り電圧閾値は、一定の分離距離によって隔てられる。一実施形態では、この分離距離は、各読み取り電圧閾値間で均一である。更なる実施形態では、調整モジュール408は、単一のコマンド又はプロシージャで、複数の読み取り電圧閾値を調整し、複数の読み取り電圧閾値間の分離距離は、その調整でスケーリングされる。例えば、一実施形態では、読み取り電圧閾値間の分離距離は、読み取り電圧閾値が大きくなると共に増大し、読み取り電圧閾値が低くなると共に減少し得る。調整の際に、読み取り電圧閾値間の分離距離をスケーリングすることが、一実施形態では、より均等な読み取り電圧閾値の分散を提供することにより、電圧の範囲は、その範囲の端で縮小又は拡大することなく、その一方で、中間範囲は、同一に維持される。
一実施形態では、持続モジュール410は、読み取り電圧閾値の状態を記憶する。持続モジュール410は、一実施形態ではソリッドステート記憶装置コントローラ104の一部である。持続モジュール410は、別の実施形態では、各読み取り操作で、ソリッドステート記憶媒体110に、読み取り電圧閾値を送ることができる。更なる実施形態では、持続モジュール410は、ソリッドステート記憶媒体110の一部であり、調整モジュール408が実施する、読み取り電圧閾値に対する調整を、ソリッドステート記憶媒体110に保持させる。持続モジュール410は、一実施形態では、複数の読み取り電圧閾値を記憶し、各読み取り電圧閾値は、ソリッドステート記憶媒体110の記憶セルの、異なるセグメント又はグルーピングに関する。
一実施形態では、ソリッドステート記憶媒体110の製造元は、チップ、物理消去ブロック、物理ページ、若しくはダイなどの、記憶セルの既定のグルーピングに関する読み取り電圧閾値を調整するための、コマンド又はプロシージャを提供する。更なる実施形態では、持続モジュール410は、調整モジュール408が製造元提供のコマンド又はプロシージャを使用して調整を実施することができる、記憶セルの既定のグルーピングよりも小さい、記憶セルのサブグルーピングに関する、読み取り電圧閾値を記憶する。調整モジュール408は、次いで、別の実施形態では、データセットがサブグルーピングから読み取られる際に、持続モジュール410が記憶する読み取り電圧閾値に基づいて、読み取り電圧閾値を再調整することができる。サブグルーピングの例としては、PEB、ページ、ECCチャンク、又は記憶セルのグルーピングの他の物理区画若しくは論理区画を挙げることができる。
例えば、記憶セルの第1のサブグルーピングからのデータセットに関する読み取り要求に応答して、調整モジュール408は、持続モジュール410が第1のサブグルーピングに関して記憶するレベルに、その記憶セルのグルーピング全体の読み取り電圧閾値を調整することができる。第2のサブグルーピングからのデータセットに関する読み取り要求に応答して、一実施形態では、調整モジュール408は、持続モジュール410が第2のサブグルーピングに関して記憶するレベルに、そのグルーピング全体に関する読み取り電圧閾値を再調整することができる。このことにより、設定モジュール352は、ソリッドステート記憶媒体110に関して利用可能なコマンド又はプロシージャ内に提供し得るよりも細密な範囲で、ソリッドステート記憶媒体110に関する読み取り電圧閾値を調整することが可能になる。例えば、製造元は、ダイ、チップ、若しくは他の記憶セルのグルーピングに関する読み取り電圧閾値を調整するための、コマンド、プロシージャ、又は方法論を提供することができ、調整モジュール408は、そのコマンド、プロシージャ、又は方法論に従って、個々のPEB若しくは他のサブグルーピングを調整することができる。
一実施形態では、設定モジュール352は、上述のように、訂正不能な(本明細書では、ECCデコーダ322によって訂正不能であることを意味し、本明細書で論じられるように、読み取り電圧閾値の調整後に、訂正が可能であり得る)データエラーに応答して、データセットを処理し、データエラーがもはや訂正不能ではなくなるまで、またそのデータセットに関するECC検査ビットを使用して修復可能となるまで、読み取り電圧閾値を1回以上調整する。一実施形態では、ECCモジュール412が、ECCデコーダ322と協働して、ECCデコーダ322が、データセット内のエラーを訂正することができるか否かを、判定する。あるいは、設定モジュール352が、ECCデコーダ322と協働して、ECCデコーダ322が、データセット内のエラーを訂正することができるか否かを判定する。
設定モジュール352は、一実施形態では、ECCデコーダ322がエラーを訂正することができることを、ECCモジュール412が判定するまで、上述の処理工程を繰り返す。例えば、更なる実施形態では、データセット読み取りモジュール402、偏差モジュール404、方向モジュール406、及び調整モジュール408は、ECCデコーダ322がエラーを訂正することができることを、ECCモジュール412が判定するまで、反復的に、データセットを読み取り、そのデータセットに関する読み取りバイアスが、既知のバイアスから偏移していることを判定し、そのデータセットに関する偏差の方向を判定し、上述のように読み取り電圧閾値を調整することができる。
図6A及び図6Bに関して、より詳細に説明されるように、一実施形態では、データセットは、幾つかのダイ、チップ、チャネル、記憶素子、PEB、又は他の記憶セルのグルーピング全体にわたって、記憶させることができる。ECC検査ビットは、一実施形態では、記憶セルの各グルーピングに関して、独立して、算出及び記憶させることができる。別の実施形態では、ECC検査ビットは、例えば、ECCチャンクの一部として、記憶セルの各グルーピングと一体に記憶される。
更なる実施形態では、ECCモジュール412は、ECC検査ビットを使用して、ソリッドステート記憶媒体110の、いずれのダイ、チップ、チャネル、記憶素子、PEB、又は他の記憶セルのグルーピング内で、訂正不能なエラーが発生したかを判定する。ECCモジュール412は、一実施形態では、ECC検査ビットを使用して、記憶セルの各グルーピングのデータセットを検証し、記憶セルのグルーピングのセットからの、いずれの特定のグルーピングが、訂正不能なエラーを有するかを判定する。設定モジュール352は、一実施形態では、訂正不能なエラーを有する、記憶セルの特定のグルーピング内の、1つ以上の読み取り電圧閾値を調整する。
一実施形態では、分散モジュール414は、データセットの読み取りバイアスが、既知のバイアスの予想される分散の範囲内にあり、読み取り電圧閾値の更なる調整を実施するべきではないことを判定する。更なる実施形態では、データセット読み取りモジュール402、偏差モジュール404、方向モジュール406、及び調整モジュール408は、データセットの読み取りバイアスが、予想される分散の範囲内にあることを、分散モジュール414が判定するまで、継続して、新たな読み取り電圧閾値を使用して、データセットを再読み取りし、そのデータセットに関する読み取りバイアスが、既知のバイアスから偏移していることを再判定し、そのデータセットに関する偏差の方向を再判定し、読み取り電圧閾値を再調整する。
分散モジュール414は、一実施形態では、偏差モジュール404と協働することができ、又は偏差モジュール404に統合することもできる。一実施形態では、設定モジュール352は、ECCモジュール412又は分散モジュール414のいずれかを使用して、読み取り電圧閾値の調整を、いつ実施するべきか、又はいつ完了するべきかを判定する。更なる実施形態では、分散モジュール414は、ソリッドステート記憶媒体110の、幾つかのダイ、チップ、チャネル、記憶素子、PEB、又は他の記憶セルのグルーピングからのデータセットの読み取りバイアスを、既知のバイアスの分散と比較して、いずれの記憶セルのグルーピング内でエラーが発生したかを判定し、設定モジュール352は、エラーを有する記憶セルのグルーピング内の、1つ以上の読み取り電圧閾値を調整する。
一実施形態では、ECCモジュール412及び/又は分散モジュール414は、データセットソースモジュール422と協働する。データセットソースモジュール422は、一実施形態では、いずれの特定の記憶セルのグルーピングから、データセットが読み取られたかを判定する。例えば、データセットソースモジュール422は、いずれのダイ、チップ、チャネル、記憶素子、PEB、又は他の記憶セルのグルーピングが、データセットのソースであるかを、判定することができる。一実施形態では、データセットソースモジュール422は、データセットが、既知のバイアスから偏移する読み取りバイアスを有すること、データエラーを有することなどを、偏差モジュール404、ECCモジュール412、及び/又は分散モジュール414が判定することに応答して、いずれの特定の記憶セルのグルーピングから、そのデータが読み取られたかを判定する。
一実施形態では、データセットソースモジュール422は、データセットのシーケンス内部での、データセットの位置に基づいて、いずれの特定の記憶セルのグルーピングから、そのデータセットが読み取られたかを判定する。例えば、一実施形態では、ソリッドステート記憶媒体110は、記憶セルの複数個のグルーピングを含み得、記憶セルの各グルーピングは、読み取り操作の間、並列に読み取ることができる。データセットソースモジュール422は、一実施形態では、書き込みデータパイプライン106及び/又は読み取りデータパイプライン108がデータを処理する方式についての既知の情報、並びに記憶セルの複数個のグルーピングについての既知の情報を使用して、いずれの記憶セルのグルーピングから、データセットが読み取られたかを判定することができる。
例えば、一実施形態では、書き込みデータパイプライン106及び読み取りデータパイプライン108は、それぞれ、64ビット(8バイト)のデータパスを有してもよく、ソリッドステート記憶媒体110は、24個のダイ幅のアレイを含み得、読み取り操作の間、24個のダイのそれぞれから、8バイトを並列に読み取ることができ、1度の読み取り操作当たり、合計192バイトとなる。この情報に基づいて、データセットソースモジュール422は、一実施形態では、192バイトの内部の、8バイトのデータセットの位置に基づいて、いずれのダイ又は他の記憶セルのグルーピングから、そのデータセットが読み取られたかを判定することができる。
データセットソースモジュール422は、更なる実施形態では、読み取り操作の一部として処理されるデータセットの数を計数するか、又は他の方法で追跡して、データセットのシーケンス内での、データセットの位置を判定することができる。例えば、第1のダイから開始して、24個のダイから、順次8バイトを読み取ることができるため、ECCモジュール412及び/又は分散モジュール414が、読み取りバイアスの偏差又はデータエラーを、第5の8バイトのデータのセットに対する操作の間に検出する場合には、データセットソースモジュール422は、この8バイトのデータのセットが、24個のダイの第5のダイから来たことを特定する。
データセットのシーケンス内でのデータセットの位置、及び他の既知の情報を使用することによって、データセットソースモジュール422は、一実施形態では、識別子又は他の外部情報を使用することなく、そのデータセットが読み取られた、記憶セルのグルーピングを判定することができる。読み取りバイアスの差異を呈する、ダイ、チップ、チャネル、記憶素子、PEB、又は他の記憶セルのグルーピングを特定することにより、読み取り電圧閾値の変更、予備のグルーピングを使用する、記憶セルのグルーピングの論理スワッピング、及び他の是正措置の形態などの、迅速な是正措置を取ることが可能になる。
一実施形態では、事前対応設定モジュール424は、ソリッドステート記憶媒体110の記憶セルに関する設定パラメーターを、事前対応的に設定及び調整することによって、ソリッドステート記憶媒体110の有用性を改善する。エラーが発生する前に、設定パラメーターを事前対応的に設定することによって、事前対応設定モジュール424は、読み取りを再試行するか、又はエラー防止のために他の是正対策を実行する、性能上の不利益を伴うことなく、特定のエラーが発生することを防ぐ。事前対応設定モジュール424は、特定の実施形態では、ソリッドステート記憶デバイス102のユースケースに関する設定パラメーターを、デフォルトのパラメーターを使用する代わりに最適化して、そのユースケースに関して記憶セルを最適化する。
上述のように、設定パラメーターは、読み取り閾値、書き込み又はプログラム閾値、消去閾値などのような、インターフェースを経由して修正可能である、記憶セルのセットのパラメーターである。設定パラメーターを修正するためのインターフェースとしては、プログラム可能データレジスタ、ソリッドステート記憶媒体110に関する制御バスのコマンドインターフェース、ソリッドステート記憶デバイス102のデバイスドライバのAPI、ソリッドステート記憶装置コントローラ104に関する制御パラメーターなどを挙げることができる。
事前対応設定モジュール424は、記憶セルのセットに関する、1つ以上の記憶媒体特性を参照して、その記憶セルのセットに関する設定パラメーターを判定する。記憶媒体特性は、ソリッドステート記憶媒体110の属性に関連する、統計的、発見的、又は他の記述子である。記憶セルのセットに関する記憶媒体特性は、実質的に静的とすることができ、又は動的であり、経時的に変化する場合もある。記憶媒体特性は、一実施形態では、ソリッドステート記憶デバイス102及び/又はソリッドステート記憶媒体110に関する、形式、モデル、製造元、製品バージョンなどを含むか、若しくはそれらに関連する。別の実施形態では、記憶媒体特性は、記憶セルのセットに関するプログラム/消去サイクルの回数、記憶セルのセットに関する読み取り回数、記憶セルのセットに関する前回の書き込みからの保持時間、記憶セルのセットに関するエラー統計などのような、特定の記憶セルのセットに関する属性又は統計を説明する。記憶媒体特性は、更なる実施形態では、温度、ユースケース(例えば、キャッシュのユースケース、アーカイブのユースケース、サーバのユースケース、企業体のユースケース、消費者のユースケースなど)などのような、環境条件、あるいはソリッドステート記憶デバイス102及び/又はソリッドステート記憶媒体110の使用を含み得るか、若しくはそれらに関連し得る。
事前対応設定モジュール424は、記憶セルのセットに関する設定パラメーターを判定することに応答して、判定された設定パラメーターを使用するように、記憶セルのセットを設定する。事前対応設定モジュール424は、定期的に、記憶セルのセットに関する記憶媒体特性を更新し、記憶セルのセットに関する設定パラメーターを更新し、更新された設定パラメーターを使用するように、記憶セルのセットを再設定することができる。事前対応設定モジュール424は、設定パラメーターを使用して、入力/出力操作の実行の間、起動操作の間、変更された記憶媒体特性を指示する記憶セルのセットのバックグラウンドスキャンに応答して、などのように、記憶セルを設定することができる。
特定の実施形態では、事前対応設定モジュール424は、調整モジュール408に関して上述した調整からは独立して、記憶セルを設定する。例えば、事前対応設定モジュール424は、設定モジュール352から分離することができ、事前対応設定モジュール424は、設定モジュール352を有さない記憶装置コントローラ104の一部とすることなどができる。他の実施形態では、調整モジュール408及び事前対応設定モジュール424は、協働することができる。例えば、調整モジュール408は、事前対応設定モジュール424が開ループモデルを使用して設定した、1つ以上の設定パラメーターに対して、閉ループのフィードバックに基づく調整を実施することなどができる。
一実施形態では、書き込み電圧モジュール416は、ソリッドステート記憶媒体110の記憶セルにデータを書き込むための、書き込み電圧レベルを設定する。書き込み電圧レベルは、記憶セルの状態、増加型ステップパルスプログラミング操作に関するステップの大きさ、増加型ステップパルスプログラミング操作に関する反復の最大数、プログラム操作に関するプログラム検証閾値、増加型ステップパルスプログラミング操作に関する初期バイアスなどを、プログラムするか若しくは変化させるために使用される最小又は最大電圧を指定する、プログラミング電圧である。一実施形態では、書き込み電圧モジュール416は、設定モジュール352及び/又は事前対応設定モジュール424に統合することができる。
例えば、NANDフラッシュソリッドステート記憶装置に関しては、書き込み電圧及び/又は設定パラメーターに関連する他のプログラムは、記憶セルの状態を、バイナリ1からバイナリ0に変化させる。書き込み電圧モジュール416は、一実施形態では、既知のパターンを記憶セルに書き込み、次いで、そのパターンを読み直して、読み取り電圧閾値を判定し、所望の読み取り閾値に適合するまで、書き込み閾値を調整する。書き込み電圧モジュール416は、更なる実施形態では、記憶セルの経年に対しての、記憶セルの耐久性及びデータ保持の要件に基づいて書き込み電圧レベル値を指定する、数学的モデルに基づいて、書き込み電圧レベルを調整する。一実施形態では、記憶セルの経年は、プログラム及び消去のサイクルの観点から、計算される。書き込み電圧モジュール416は、一実施形態では、1つ以上の記憶セルに、試験書き込みを実行し、少なくとも1つの記憶セルの読み取り電圧を検出して、その読み取り電圧が閾値に適合するまで、書き込み電圧レベルを調整する。書き込み電圧モジュール416は、更なる実施形態では、記憶セルに、既知のバイアスを有するデータセットを書き込むことによって、試験書き込みを実行し、読み取りデータセットの読み取りバイアスが、既知のバイアスから偏移するか否かを判定することによって、読み取り電圧を試験する。
書き込み電圧モジュール416は、一実施形態では、最小の書き込み電圧で開始して、読み取り電圧が閾値に適合するまで、書き込み電圧を増大させることができる。更なる実施形態では、書き込み電圧モジュール416は、最大の書き込み電圧で開始して、読み取り電圧が閾値に適合するまで、書き込み電圧を減少させることができる。書き込み電圧モジュール416は、一実施形態では、記憶セルにプログラムする時間と、その記憶セルに関する所望の耐久性及び/又はデータ保持とを平衡させる、書き込み電圧レベルを選択することができる。
事前対応設定
図5は、事前対応設定モジュール424の一実施形態を示す。この事前対応設定モジュール424は、一実施形態では、図4に関して上述した事前対応設定モジュール424と、実質的に同様とすることができる。図示の実施形態では、事前対応設定モジュール424は、媒体特性モジュール502、設定パラメーターモジュール504、記憶セル設定モジュール506、特性更新モジュール508、設定更新モジュール510、及び適合設定モジュール512を含む。媒体特性モジュール502、設定パラメーターモジュール504、記憶セル設定モジュール、特性更新モジュール508、設定更新モジュール510、及び適合設定モジュール512は、ソリッドステート記憶デバイス102に関する、コンピュータ112若しくは別のホストデバイス上に設置される、デバイスドライバの一部、及び/又はFPGA、ASICなどのファームウェアのような、ソリッドステート記憶デバイスに関するハードウェアの一部とすることができる。
一実施形態では、媒体特性モジュール502は、ソリッドステート記憶媒体110の記憶セルのセットに関する、1つ以上の記憶媒体特性を参照する。媒体特性モジュール502は、それ自体で1つ以上の記憶媒体特性を判定することができ、別のモジュールから記憶媒体特性を受信することができ、記憶媒体特性レポジトリから記憶媒体特性を検索することなどができる。上述のように、記憶媒体特性は、ソリッドステート記憶媒体110の属性に関連する、統計的、発見的、又は他の記述子である。記憶媒体特性は、ソリッドステート記憶デバイス102及び/又はソリッドステート記憶媒体110に関する、形式、モデル、製造元、製品バージョンなど、記憶セルのセットに関する属性又は統計、環境条件、あるいはソリッドステート記憶デバイス102及び/又はソリッドステート記憶媒体110のユースケース、並びに/あるいはソリッドステート記憶媒体110の属性に関する、別の統計的、発見的、又は他の記述子を含み得るか、若しくはそれらに関連し得る。
記憶セルのセットに関する記憶媒体特性は、その記憶セルのセットに関する設定パラメーターの判定に、影響を及ぼすか、又は情報を与える。一実施形態では、記憶媒体特性は、記憶セルのセットに関するプログラム/消去サイクルの回数を含む。別の実施形態では、記憶媒体特性は、記憶セルのセットに関する読み取り回数を含む。記憶媒体特性は、更なる実施形態では、記憶セルのセットに関する、前回の書き込みからの保持時間を含む。更なる実施形態では、記憶媒体特性は、記憶セルのセットに関する温度を含む。記憶媒体特性は、特定の実施形態では、記憶セルのセットに関するユースケースを含む。別の実施形態では、記憶媒体特性は、UBERなどのような、記憶セルのセットに関するエラー統計を含む。更なる実施形態では、記憶媒体特性としては、記憶セルのセットに関する、前回又は履歴上の設定パラメーター、記憶セルの他のセットに関する設定パラメーター若しくは記憶媒体特性などを挙げることができる。
媒体特性モジュール502は、特定の実施形態では、記憶媒体特性の収集及び/又は維持を管理する。媒体特性モジュール502は、記憶媒体特性レポジトリ内に、記憶媒体特性を維持し、かつ/又は記憶媒体特性レポジトリから、記憶媒体特性を検索することができる。記憶媒体特性レポジトリの一実施例は、図7A及び図7Bに関して、以下でより詳細に説明される。媒体特性モジュール502は、特定の実施形態では、ソリッドステート記憶デバイス102の、各記憶媒体領域又は記憶媒体区画などの、記憶セルの幾つかの異なるセットに関する記憶媒体特性を、参照、判定、及び/又は管理する。記憶媒体領域としては、消去ブロック(論理又は物理)、ページ、論理ページ、ECCチャンク、ページ内部の区画、ダイ、ダイプレーン、チップなどを挙げることができる。
一実施形態では、媒体特性モジュール502は、図3Bに関して上述したデバイス因数モジュール354と、同様のものとすることができ、共に働くことができ、かつ/又は統合することができる。例えば、記憶媒体特性としては、ソリッドステート記憶デバイス102に関する温度、ソリッドステート記憶デバイス102に関するエラー率(訂正不能ビットエラー率UBERなどのような)、ソリッドステート記憶デバイス102に関する消去サイクル回数、ソリッドステート記憶デバイス102に関する記憶要求待ち時間(平均、最大、又は他の、記憶要求実行待ち時間など)、ソリッドステート記憶デバイス102の経年、及び/又は他の統計若しくは特性などの、デバイス因数モジュール354に関して上述した、1つ以上の統計を挙げることができる。媒体特性モジュール502は、特定の実施形態では、1つ以上のセンサー356から、ECCデコーダ322などのような他のモジュール若しくは素子から、直接的に、又は間接的に、入力を受信することができる。
一実施形態では、設定パラメーターモジュール504は、記憶セルのセットに関する設定パラメーターを、その記憶セルのセットに関する、媒体特性モジュール502からの1つ以上の記憶媒体特性に基づいて判定する。上述のように、設定パラメーターは、インターフェースを経由して修正可能である、記憶セルのセットのパラメーターである。設定パラメーターは、記憶セルへの書き込み若しくはプログラミング、記憶セルからの読み取り、記憶セルの消去、及び/又は記憶セルに関する別のパラメーターに関連し得る。設定パラメーターモジュール504は、設定パラメーターを、絶対的データ値として、データ値に対するオフセット若しくは調整として、又は以下で説明するように、記憶セル設定モジュール506が、記憶セルのセットを設定する場合に使用することができる、別のパラメーターとして、判定することができる。
記憶セルからの読み取りに関する設定パラメーターの一実施形態は、読み取り電圧閾値、固有抵抗閾値などのような、読み取り閾値である。記憶セルの書き込み/プログラミングに関する設定パラメーターの様々な実施形態としては、増加型ステップパルスプログラミング操作に関するステップの大きさ、増加型ステップパルスプログラミング操作に関する反復の最大数、プログラム操作に関するプログラム検証閾値、増加型ステップパルスプログラミング操作に関する初期バイアスなどが挙げられる。記憶セルの消去に関する設定パラメーターとしては、特定の実施形態では、増加型ステップパルス消去操作に関するステップの大きさ、増加型ステップパルス消去操作に関する反復の最大数、消去操作に関する消去検証閾値、増加型ステップパルス消去操作に関する初期バイアスなどを挙げることができる。当業者には、本明細書の見地から、インターフェースを経由して修正可能とすることができる、記憶セルに関する他の設定パラメーターが認識されるであろう。
設定パラメーターモジュール504は、1つ以上の記憶媒体特性を、等式に、参照テーブル(「LUT」)に行列などに入力することによって、1つ以上の記憶媒体特性に対して、既定の変換又は操作を実行することによって、あるいは、1つ以上の記憶媒体特性を、他の方法で参照及び/又は操作して、設定パラメーターを判定することによって、その1つ以上の記憶媒体特性に、設定パラメーターの基盤を置くことができる。設定パラメーターの等式、LUT、行列などは、試験データ、履歴データなどの、経験的データに基づき得る。設計技術者などは、一実施形態では、様々な製造元によるソリッドステート記憶媒体などのような、様々な記憶媒体特性を有する記憶セルのセットを試験して、その様々な記憶媒体特性を有する記憶セルのセットに関する、最適な設定パラメーターを判定することができる。例えば、等式、LUT、行列などは、製造元Xによるソリッドステート記憶媒体110が、1,000回のプログラム/消去サイクルの後で、Yの量の、セルの値の自然ドリフトを有する傾向があるため、読み取り閾値を、補正のためにZボルト増大させ得ることなどを、指示することができる。
一実施形態では、記憶セルのセットに関する記憶媒体特性は温度を含む。記憶セルのセットに関する温度は、その記憶セルのセットに対する、1つ以上の他の記憶媒体特性の効果の速度に、影響を及ぼし得る。例えば、より高い温度では、生のビットエラー率(RBER)などのエラー統計、及びデータ保持時間に関連する、記憶媒体特性に関する変化率が、増大する可能性があり、設定パラメーターに対する特定の調整によって、その効果を緩和することができる。特定の実施形態では、設定パラメーターモジュール504は、その温度の効果を補正するための温度によって、設定パラメーター、記憶媒体特性などを、調整又はスケーリングして、温度に関してデータを正規化することができる。記憶セルのセットに関する温度は、平均温度、スライディング時間枠にわたる温度、現在温度、ソリッドステート記憶デバイス102に関する温度、又は記憶セルの1つ以上のセットに関連する別の温度測定値とすることができる。
1つ以上の記憶媒体特性は、一実施形態では、設定パラメーターに関する傾向、最適化などを、設定パラメーターモジュール504に指示し、設定パラメーターモジュール504は、その傾向又は最適化に合致する設定パラメーターを判定する。例えば、プログラム/消去サイクルの回数、読み取り回数、UBER、又は別の記憶媒体特性の大きさは、読み取り電圧がドリフトしている量を指示することができ、設定パラメーターモジュール504は、読み取り、読み取り再試行などの、記憶セルからの直接的なフィードバックを使用することなく、その記憶媒体特性に基づいて、読み取り電圧閾値又は他の設定パラメーターを、事前対応的に判定することができる。
一実施形態では、設定パラメーターモジュール504は、ソリッドステート記憶媒体110の種々の記憶領域又は記憶区画の、記憶セルのセットに関する設定パラメーターを、設定パラメーターレポジトリ内に維持する。設定パラメーターレポジトリの一実施例は、図8A及び図8Bに関して、以下でより詳細に説明される。種々の記憶領域に関する、別個の記憶媒体特性及び/又は設定パラメーターを、判定並びに管理することによって、事前対応設定モジュール424は、特定の実施形態では、各記憶領域に関する設定パラメーターを、個々にカスタマイズすることができるため、ソリッドステート記憶媒体110のエラーを低減し、耐用年数を延長することなどによって、ソリッドステート記憶媒体110の有用性を向上させる。
特定の実施形態では、設定パラメーターモジュール504は、記憶セルの1つのセットに関する設定パラメーターを、記憶セルの標的セットに基づいて、判定することができる。記憶セルの標的セットは、設定パラメーターモジュール504が、記憶セルの別のセットに関する設定パラメーターを判定するために使用する、既知の使用特性及び/又は制御された使用特性(例えば、記憶媒体特性など)を有し得る。具体的には、設定パラメーターモジュール504は、記憶セルの標的セットの記憶媒体特性と、現時点で設定されている記憶セルのセットの記憶媒体特性とを比較することができる。そのような比較を使用して、その記憶セルのセットに関して判定される設定パラメーターを、更に最適化することができる。記憶セルの標的セットは、メタデータ、システムデータ、データの既知のパターンなどのような、既知のデータを記憶することができ、設定パラメーターモジュール504は、その既知のデータに基づいて、別のデータのセットに関する設定パラメーターを判定することができる。
別の実施形態では、設定パラメーターモジュール504は、記憶セルのセットに関する設定パラメーターを、記憶セルの標的セットに関して判定された設定パラメーターに基づいて、記憶セルの標的セットに関する1つ以上の記憶媒体特性に基づいて、などのように判定する。例えば、設定パラメーターモジュール504は、記憶セルの標的セットに関する設定パラメーターを、記憶セルの別のセットに関する設定パラメーターとして使用することができ、記憶セルの別のセットに関する設定パラメーターを判定する際に使用するために、記憶セルの標的セットに関する設定パラメーターを調整することができ、記憶セルの標的セットに関する記憶媒体特性を使用して、記憶セルの別のセットに関する設定パラメーターを判定することなどができる。この方式では、記憶セルの標的セットは、記憶セルの他のセットを管理する際に使用するための、対照群としての機能を果たす。記憶セルの標的セットは、特定の実施形態では、ハードディスクドライブ技術で「システム追跡」が使用されている方式と類似の方式で使用され、記憶デバイス102の耐用年数にわたって、設定パラメーターに修正を加えることができる。更なる実施形態では、設定パラメーターモジュール504は、記憶セルのセットに関する1つ以上の記憶媒体特性と、記憶セルの標的セットに関する1つ以上の記憶媒体特性とを比較して、その記憶媒体特性間の差異に基づいて、記憶セルのセットに関する設定パラメーターを判定する。
設定パラメーターモジュール504は、特定の実施形態では、記憶セルのセットに関する設定パラメーターの基盤を、記憶セルの標的セットに置き、その記憶セルのセットに関する既知の記憶媒体特性の欠如に応答して、その設定パラメーターをブートストラップする。設定パラメーターモジュール504は、記憶セルのセットに関する設定パラメーターを、起動操作の間に、又はその記憶セルのセットに関する記憶媒体特性は未だ利用可能ではないが、記憶セルの標的セットに関しては記憶媒体特性若しくは他のデータが利用可能である、別の操作の間に、ブートストラップすることができる。例えば、ソリッドステート記憶媒体110のメタデータ領域内に記憶されるメタデータは、既知の、又は制御されたプログラム/消去の回数を有し得、設定パラメーターモジュール504は、ユーザーデータを記憶する、ソリッドステート記憶媒体110の領域に関する、設定パラメーターの基盤を、そのメタデータ領域に関する、既知の、又は制御されたプログラム/消去の回数に置くことができる。
一実施形態では、記憶セル設定モジュール506は、設定パラメーターモジュール504が記憶セルのセットに関して判定する設定パラメーターを、その記憶セルのセットが使用するように設定する。記憶セル設定モジュール506は、記憶セルのセットのインターフェースを使用して、その記憶セルのセットを設定する。このインターフェースは、公知のインターフェース又は独自開発のインターフェースを含み得る。設定モジュール506は、データレジスタを設定することによって、ソリッドステート記憶媒体110に関する制御バスのコマンドインターフェースを介してコマンドを送ることによって、ソリッドステート記憶デバイス102のデバイスドライバのAPIを呼び出すことによって、ソリッドステート記憶装置コントローラ104に関する制御パラメーターを設定することによって、又は他の方法で記憶セルのセットを設定することによって、記憶セルのセットを設定することができる。記憶セル設定モジュール506は、特定のコマンド命令、特定のコマンド命令のシーケンスを使用することができ、かつ/又は特定のパラメーター、レジスタ設定、若しくは記憶セルのセットとインターフェースするために使用される通常のコマンド(汎用コマンド)との他の差異を使用することができる。記憶セル設定モジュール506は、設定パラメーターモジュール504から、設定パラメーターを受信することができ、設定パラメーターレポジトリから、設定パラメーターを検索することなどができる。
記憶セル設定モジュール506は、一実施形態では、トリガーに応答して、判定された設定パラメーターを使用するように、記憶セルのセットを設定する。このトリガーは、特定の実施形態では、ソリッドステート記憶デバイス102及び/又はソリッドステート記憶媒体110のアーキテクチャーに基づいて選択される。例えば、特定のソリッドステート記憶デバイス102及び/又はソリッドステート記憶媒体110は、複数の入力/出力操作の全体にわたる設定パラメーターを保持し得るが、一方で、別のソリッドステート記憶デバイス102及び/又はソリッドステート記憶媒体110は、設定パラメーターを、各入力/出力操作で設定することが必要とされる場合などがある。記憶セル設定モジュール506は、ソリッドステート記憶媒体110の初期化の間に、記憶セルのセットに発行される各コマンドを使用して動的に、ソリッドステート記憶媒体110の動作中にイベント又は時間間隔に応答して、別のトリガーに応答して、などのように記憶セルのセットを一旦設定することができる。
一実施形態では、記憶セル設定モジュール506に対するトリガーとしては、記憶セルのセットに関する記憶媒体特性の変化、記憶セルのセットに関する記憶媒体特性の既定の大きさの変化などが挙げられ、記憶セル設定モジュール506は、それらの記憶媒体特性の変化に応答して、記憶セルのセットを設定する。別の実施形態では、記憶セル設定モジュール506に対するトリガーとしては、読み取り要求、書き込み要求、消去要求などのような、記憶セルのセットに対する入力/出力要求が挙げられる。例えば、特定の実施形態では、記憶セル設定モジュール506は、記憶セルに対する読み取り要求に応答して、読み取り設定パラメーターを使用するように、記憶セルのセットを設定することができ、記憶セルに対する書き込み要求に応答して、書き込み設定パラメーターを使用するように、記憶セルのセットを設定することができ、消去要求に応答して、消去設定パラメーターを使用するように、記憶セルのセットを設定することなどができる。
更なる実施形態では、ソリッドステート記憶デバイス102に対する起動操作、ソリッドステート記憶デバイス102に対する通常シャットダウン操作などが、記憶セルの1つ以上のセットを設定するための、記憶セル設定モジュール506に対するトリガーである。特定の実施形態では、記憶セル設定モジュール506が、起動操作に応答して、記憶セルのセットを、設定パラメーターを使用して一旦設定すると、その記憶セルのセットは、シャットダウン操作、及び後続の起動操作などまで、その設定パラメーターを保持する。記憶セルのセットが、設定パラメーターを保持する方式は、設定パラメーターのタイプ、記憶セルのセットのアーキテクチャーなどに応じて変動し得る。
一実施形態では、特性更新モジュール508は、記憶セルのセットに対する更新イベントに応答して、その記憶セルのセットに関する1つ以上の記憶媒体特性を更新する。更新イベントは、特性更新モジュール508が応答して、記憶媒体特性を更新するトリガーである。ソリッドステート記憶デバイス102及び/又はソリッドステート記憶媒体110の形式、モデル、製造元、製品バージョンなどのような、特定の記憶媒体特性は、実質的に静的とすることができ、特性更新モジュール508は、特定の実施形態では、そのような記憶媒体特性を変更することができないか、より少ない頻度で、そのような記憶媒体特性を更新する場合などがある。プログラム/消去サイクルの回数、読み取り回数、保持時間、温度、ユースケース、エラー統計など、他の記憶媒体特性は、動的であり、頻繁に変化し得る。
一実施形態では、ソリッドステート記憶媒体110のバックグラウンドスキャンを、更新イベントとすることができる。例えば、特性更新モジュール508は、ソリッドステート記憶媒体110のバックグラウンドスキャンを実行して、そのバックグラウンドスキャンの間の、記憶セルのセットのスキャニングに応答して、その記憶セルのセットに関する記憶媒体特性の記録を更新することができる。別の実施形態では、読み取り要求、書き込み要求、消去要求などのような、記憶セルのセット又は隣接する記憶セルのセットに対する入力/出力要求が、更新イベントであり、特性更新モジュール508は、その入力/出力要求に応答して、記憶セルのセットに関する記憶媒体特性を更新する。特性更新モジュール508に対する更新イベントとしては、更なる実施形態では、ソリッドステート記憶デバイス102に対する、起動操作及び/又はシャットダウン操作を挙げることができる。特定の実施形態では、記憶セルのセットに対するガベージコレクション操作が、更新イベントである。例えば、特性更新モジュール508は、ガベージコレクション操作が、記憶セルのセットの記憶容量を回復する際などに、その記憶セルのセットに関する記憶媒体特性を更新することができる。
特性更新モジュール508は、一実施形態では、媒体特性モジュール502と協働して、媒体特性モジュール502を使用するなどして、記憶媒体特性を更新する。特定の実施形態では、特性更新モジュール508は、図7A及び図7Bに関して、以下でより詳細に説明されるように、記憶媒体特性レポジトリ内に記憶される記憶媒体特性を、更新することができる。
一実施形態では、設定更新モジュール510は、記憶セルのセットに関する設定パラメーターを更新する。設定更新モジュール510は、特定の実施形態では、設定パラメーターに対応する1つ以上の記憶媒体特性の変化に応答して、その設定パラメーターを更新する。特性更新モジュール508は、特性更新モジュール508が記憶媒体特性を更新したことを、設定更新モジュール510に通知することができ、設定更新モジュール510は、記憶媒体特性を、変化に関して定期的にスキャンすることができ、設定更新モジュール510は、記憶セルのセットに関する設定トリガーに応答して、記憶媒体特性を、変化に関して検査することなどができる。
特定の実施形態では、設定更新モジュール510は、既定の変化閾値よりも大きい、記憶媒体特性の変化に応答して、設定パラメーターを更新する。設定更新モジュール510は、一実施形態では、設定パラメーターモジュール504と協働して、設定パラメーターモジュール504を使用するなどして、設定パラメーターを更新する。設定更新モジュール510は、別の実施形態では、図8A及び図8Bに関して、以下でより詳細に説明されるように、設定パラメーターレポジトリ内に記憶される設定パラメーターを、更新することができる。
一実施形態では、適合設定モジュール512は、ソリッドステート記憶デバイス102及び/又はソリッドステート記憶媒体110に関する、1つ以上の設定パラメーター、閾値、管理技術などを、動的に調整及び適合させる。特定の実施形態では、適合設定モジュール512は、ソリッドステート記憶デバイス102が経年変化する場合、ソリッドステート記憶デバイス102に関するユースケースが変化する場合などに、調整又は適合させることができる。ユースケースの例としては、キャッシュのユースケース、アーカイブのユースケース、サーバのユースケース、企業体のユースケース、消費者のユースケースなどを挙げることができる。
適合設定モジュール512は、一実施形態では、ソリッドステート記憶デバイス102に関する先験的知識、ソリッドステート記憶デバイス102に関して収集された実行時統計、ソリッドステート記憶デバイス102の記憶セルに関する記憶媒体特性などに、調整又は適合の基盤を置く。磁気記憶装置とは異なり、ソリッドステート記憶装置に関する媒体属性は、典型的には、記憶デバイスの耐用年数にわたって変動する。例えば、ソリッドステート記憶媒体110の記憶領域を、記憶容量の回復又はガベージコレクションのために定期的に処理することにより、読み取り妨害の影響を管理し、信頼できるデータ保持を確実にすることができる。
ソリッドステート記憶媒体110では、隣接する記憶セルが選択されて読み取られる場合、読み取り妨害と呼ばれる効果が、非選択の記憶セル内に発生して、非選択の記憶セルの浮遊ゲート上に電荷を収集させ、非選択の記憶セルが、意図的に印加されたものではない増加電圧を有するようになる恐れがある。読み取り妨害の効果に対処する一手法は、妨害されたセルから、有効データを外に移動させ、その一方で、それらのセル内の値を、依然として判定可能のままとすることである。有効データは、新たな物理的な場所に再書き込みすることができ、妨害されたセルを消去して、読み取り妨害の効果を除去する。この手法は、リフレッシュと呼ばれ、リフレッシュ操作間の時間は、データリフレッシュ間隔と称される。読み取り妨害閾値は、読み取り妨害の効果を緩和するために是正措置が必要とされる前の、隣接するセルの読み取りの数である。耐用期間の末期に近いソリッドステート記憶デバイス102に対して適切な、記憶容量の回復及び/又はデータリフレッシュのために記憶領域が処理される、データリフレッシュ間隔は、使用開始時でのソリッドステート記憶デバイス102に対しては、攻撃性が高すぎる恐れがある。
適合設定モジュール512は、様々な実施形態では、ソリッドステート記憶デバイス102の経年(絶対時間での、電源投入時間での、書き込まれたユーザーデータの量などでの)に基づいてデータリフレッシュ間隔を、ソリッドステート記憶デバイス102の消耗に基づいて読み取り妨害閾値(すなわち、読み取り妨害の効果を緩和するためにデータがリフレッシュされる前の、読み取り操作の数)を、ソリッドステート記憶デバイス102の経年に基づいて消去ブロック退去ポリシーを、ホストの作業負荷に基づいてソリッドステート記憶デバイス102に関するガベージコレクションの方法を、アクティブデータと非アクティブデータとの混乱を最小限に抑えるためのエクステント活動のレベルに基づいてソリッドステート記憶デバイス102のゾーン単位のガベージコレクションを、ソリッドステート記憶デバイス102が経年変化する際にスクラッビングを増大させるためのスクラッビング間隔などを、動的に、調整又は適合させることができる。
図6Aは、本発明による、N個の数の記憶素子606のアレイ600の一実施形態を示す、概略ブロック図である。図示の実施形態では、ECCチャンク616は、幾つかの記憶素子606からのデータ612を含む。更なる実施形態では、ECCチャンク616に関するECC検査ビットもまた、幾つかの記憶素子606全体にわたって記憶される。
記憶素子606のアレイ600は、一実施形態では、N個の数の記憶素子606a、606b、606c、...606nを含む。各記憶素子606は、デバイス、チップ、チップの一部分、ダイなどを構成し得る。図示の実施形態では、記憶素子606a〜nは、バンク602aを形成する。アレイ600は、一実施形態では、幾つかのバンク602a...602mを含む。バンク602a〜mは、図示の実施形態では、幾つかのチャネル604a、604b、604c、...、604nを含む。一実施形態では、パケット又はデータセットは、幾つかのチャネル604a〜n全体にわたって書き込まれ、各チャネル604a〜nから別個に読み取られて、パケットへと再構築される。別の実施形態では、ECCチャンク616、パケット、又はデータセットは、幾つかのチャネル604a〜n全体にわたって書き込まれ、データは、全てのチャネル604a〜nから並列に読み取られる。バンク602aに対する1つの読み取り操作は、ECCチャンク616、パケット、若しくはデータセットの全体を読み取るか、又はECCチャンク616、パケット、若しくはデータセットの全体へと再構築される、ECCチャンク616、パケット、若しくはデータセットの一部分を読み取ることができる。図示の実施形態では、各チャネルは、各バンク602内の、少なくとも1つの記憶素子606を含む。
更には、一実施形態では、各記憶素子606は、物理消去ブロック、すなわち「PEB」608を含む。例えば、記憶素子1(606a)は、PEB(608a)を含む。物理消去ブロックは、典型的には、1つのダイ、チップ、又は他の記憶素子606上に位置する、消去ブロックである。各PEB 608は、m個の物理ページ610を含む。例えば、PEB(608a)は、ページ0(610a)...ページm(614a)を含む。各物理ページ610aは、データ(「D」)612の一部分、及びデータ612と共に分散されるECC検査ビットを記憶する。
一実施形態では、PEBのグループ(PEB 1(608a)〜PEBm(608m))は、論理消去ブロック(「LEB」)を形成する。LEBは、N個の記憶素子のアレイ600を範囲とする。更には、一実施形態では、論理ページ(「LP」)は、行を成す複数個の物理ページ610を範囲とする。別の実施形態では、論理ページは、N個の記憶素子606a〜nを範囲とする。
一実施形態では、ECCは、データと共に分散されるブロックコードである。更には、データ及びECCは、いずれの特定の物理的ハードウェア境界にも位置合わせされない場合がある。結果として、ECCコードでのエラー訂正は、特定のハードウェア構成に依存することがない。それゆえ、ECC及び対応するデータは、ECCチャンク616を形成することができ、N個の記憶素子606a〜nのうちの1つ以上に対して、分割して記憶させることができる。ECCチャンク616は、典型的には、論理ページの複数個の物理ページ610の少なくとも一部分を範囲として、この場合、データ612a、612b、...612mから生成される、データ及びECCは、N個の記憶素子606a〜n全体にわたって拡散する。一実施形態では、LPは、複数個のECCチャンク616を含む。物理ページ610は、ECCチャンク616の1つ以上のデータバイトを含み得る。ECCチャンク616は、物理ページ610内部の複数の行を範囲とすることができ、物理ページ610は、複数個のECCチャンク616を含み得る。
図示の実施形態では、ECCチャンク616に関するECC検査ビットは、幾つかの記憶素子606a〜n及びチャネル604a〜n全体にわたって分散されるため、1つ以上の記憶素子606a〜n内での読み取り電圧の推移により、データエラーが発生する場合、ECCモジュール412は、いずれの記憶素子606が、その読み取り電圧閾値を調整することによって訂正可能なエラーを有するかを、判定することが不可能である場合がある。一実施形態では、既知のバイアスの予想分散の外側にある読み取りバイアスを有するデータを、いずれの記憶素子606又はチャネル604が有するかを、分散モジュール414が判定し、設定モジュール352が、分散モジュール414によって判定された記憶素子606の、読み取り電圧閾値を調整する。
一実施形態では、偏差モジュール404、ECCモジュール412、及び/又は分散モジュール414は、データセットが、エラー、又は既知のバイアスから偏移する読み取りバイアスを有することを判定し、データセットソースモジュール422が、いずれの記憶素子606から、そのデータセットが読み取られたかを判定する。例えば、一実施形態では、アレイ600は、24個のチャネル604を有し得、読み取り操作の間に、単一のバンク602の24個の記憶素子606から、8バイトを並列に読み取ることができ、1度の読み取り操作当たり、合計192バイトとなる。この情報に基づいて、データセットソースモジュール422は、一実施形態では、いずれの記憶素子606から、データセットが読み取られたかを、192バイトの内部の、8バイトのデータセットの位置に基づいて判定することができる一実施形態では、この192バイトは、ECCチャンク616を構成する。
チャネル604a〜nのそれぞれからのデータの読み取りバイアスと、既知のバイアスとを比較することによって、設定モジュール352は、ECC検査ビットを使用せずとも、特定のチャネルに関する、読み取り電圧の変化によって発生するデータエラーを、訂正することができる。チャネル604a〜nからのデータの読み取りバイアスと、既知のバイアスとを比較しない場合には、読み取り電圧閾値の調整には、チャネル604a〜nの可能な組み合わせのそれぞれに関して、可能な読み取り電圧閾値の調整のそれぞれを調整及び試験する、数多くの試行錯誤試験が必要になる。チャネル604a〜nからのデータの読み取りバイアスと、既知のバイアスとを比較することによって、設定モジュール352は、いずれのチャネル604を調整するべきかを、正確に判定することができる。それらのチャネルに関する偏差の方向を判定することによって、設定モジュール352は更に、それらのチャネルに関する読み取り電圧閾値のための探索空間を、半分に減少させる。
好適な調整読み取り電圧閾値のための探索空間の、潜在的なサイズを説明するために、ECCチャンク616(すなわち、データ及び対応するECC検査ビットの双方を含む、ECC符号語)が、記憶素子606a〜606n上に記憶されていると想定する。ECCチャンク616を記憶する、アレイ600の行を為す記憶素子606a〜606nは、それぞれ、独立して調整可能な読み取り電圧閾値を有することを、更に想定する。例えば、一実施形態では、η個のチャネル604a〜nと、読み取り電圧閾値を設定することができる、1つのチャネル当たりλ個の数のレベルと、調整が必要な読み取り電圧閾値を有する、x個の数のチャネルとを有する、アレイ600に関する読み取り電圧閾値設定の、異なる組み合わせの数は、次の等式1によって与えられる。
最大η個のチャネル604a〜nの全ての並べ替えを有する、アレイ600に関する読み取り電圧閾値設定の、異なる組み合わせの数は、一実施形態では、次の等式2によって与えられる。
等式1を使用して、例えば、24個のチャネル604a〜n(η=24)各チャネル604に関して8つの可能な読み取り電圧閾値設定(λ=8)が存在し、24個のチャネル606a〜nのうちの2つのみが、調整が必要な読み取り電圧閾値を有する(x=2)場合には、合計17,644の、読み取り電圧閾値設定の異なる組み合わせが存在する。調整が必要な読み取り電圧閾値を有するチャネル606の数が、3つに増加する場合には、異なる組み合わせの数は、1,036,288に増加する。設定モジュール352は、いずれのチャネル606a〜nが、調整を必要とする読み取り電圧閾値を有するかを検出することによって、これらの数を大幅に低減する。更には、記憶装置のグルーピング内の媒体上のデータの既知のバイアスと、現時点でのバイアスとを比較することにより、読み取り電圧閾値を調整する方向が指示される。読み取り電圧閾値を調整する方向を知ることにより、データエラーを有することが既知であるチャネル内での、好適な電圧のための探索空間は、大きく低減される。
その結果、試みることが必要とされ得る組み合わせの数は、x=2の場合、17,644から32へと、x=3の場合、1,036,288から256へと変化するが、これは、設定モジュール352が既知のバイアスを使用して、いずれのチャネルが調整を必要とする読み取り電圧閾値を有するか、及びその調整の方向を、判定するためである。しかしながら、これらの組み合わせのそれぞれを、試行する必要がない場合があり、これは、調整が反復的に実施される際、そのデータの既知のバイアスは、いずれの方向で後続の調整のそれぞれを実施するべきかを、継続的に指示して、潜在的に、各反復で探索空間を少なくとも半分に削減するためである。様々な探索アルゴリズムを使用して、好適な調整読み取り電圧閾値を、迅速に特定することができる。(すなわち、二分探索)。
図6Bは、本発明による、N個の記憶素子606のアレイ650の一実施形態を示す、概略ブロック図である。アレイ650は、図示の実施形態では、図6Aのアレイ600と実質的に同様であるが、ECCチャンク652は、幾つかの記憶素子606a〜nの全体にわたるのではなく、単一の記憶素子606a内のデータ612aを含む。一実施形態では、ECCチャンク652に関するECC検査ビットは、単一の記憶素子606a内に記憶される。各記憶素子606a〜n又はチャネル604a〜nは、別個のECC検査ビットを有するため、一実施形態では、ECCモジュール412は、その別個のECC検査ビットを使用して、いずれの記憶素子606a〜n又はチャネル604a〜n内でエラーが発生したかを判定し、設定モジュール352は、ECCモジュール412によって判定された特定の記憶素子606の読み取り電圧閾値を調整する。
図6Cは、例示的な符号化又はプログラミングのモデルを使用する、MLCのNANDフラッシュ記憶セルなどのような、マルチレベル記憶セルのセットに関する、設定パラメーター662a〜cの一実施形態を示す。表示される符号化モデルに固有のいずれの限定も、全ての他の符号化モデルに、必ずしも適用されるものではなく、本発明は、いずれかのそのような限定を本質的に含むものとして、解釈されるべきではない。読み取り電圧閾値は、図示の実施形態では、グレイコード符号化モデルを使用して符号化され、隣接状態に関するバイナリ値は、その符号化内の単一のビットで異なる。
図6Cは、値「11」が、最も低い読み取り電圧状態(L0と表示される、「消去」状態)と関連し、値「01」が、2番目に低い読み取り電圧状態(L1と表示される)と関連し、値「00」が、2番目に高い読み取り電圧状態(L2と表示される)と関連し、値「10」が、最も高い読み取り電圧状態(L3と表示される)と関連することを示す。図6Cでは、最も低い読み取り電圧状態L0は、負電圧として示される。読み取り電圧の値、規模、サイズなどは、ソリッドステート記憶セルの製造元及びタイプによって変動し得、そのそれぞれは、本発明によって包含される。設定パラメーター662は、図示の実施形態では、上述のように、状態L0、L1、L2、及び状態L3を隔てる、読み取り電圧閾値662である。ソリッドステート記憶装置コントローラ104は、マルチレベル記憶セル内に記憶される電圧の、この4つの離散レベルを、2つのバイナリビットを表すものとして解釈し、1つは、セル符号化内での最上位ビット(MSB)によって表され、1つは、セル符号化内での最下位ビット(LSB)によって表される。上述のように、他のプログラミング及び符号化のモデルを使用することができる。同様に、特定のソリッドステート記憶媒体110は、5つ以上の可能な状態を有し得、3つ以上のバイナリ値が、単一のマルチレベル記憶セル内に記憶されることを可能にする。電圧レベルL0、L1、L2、及び電圧レベルL3は、連続的な場合があり、又は連続的ではない場合もある。例えば、特定の実施形態では、電圧レベルは、保護帯域として既知の、バンドギャップによって隔てられる。例えば、L0とL1とは、0.3V隔てることができる。
一実施形態では、LSBは、データの下位ページに対応し、MSBは、データの上位ページに対応する。特定の実施形態では、マルチレベル記憶セルは、以下で説明される2相プログラミングモデルに従うことができ、このモデルは、MSBが書き込み可能になる前に、LSBが書き込まれることが必要とされ、又は逆も同様である。別の実施形態では、LSB及びMSBは、ソリッドステート記憶装置コントローラ104によって、別個にプログラムすることができる。そのような手法は、ページ対形成(すなわち、MLCセルのLSBビットを、異なるMLCセルのMSBビットと対にする)及びページアドレス指定(すなわち、LSBページは、MSBページよりも前にプログラムされなければならない、又は逆も同様)に関する、販売元若しくは製造元の要件により、取られる場合がある。特定の場合では、LSBは、MSBが書き込まれる前に書き込まれなければならないか、MSBは、LSBが書き込まれる前に書き込まれなければならない、などとなる。
特定の実施形態では、ソリッドステート記憶媒体110は、2相プログラミングモデルを採用することができる。そのようなモデルでは、下位ページへの第1の書き込みコマンドによって、バイナリ値が、最初にLSBに書き込まれる。この書き込みコマンドは、マルチレベル記憶セルを、その初期状態(例えば、L0内の11状態)から、その後00状態が読み取られるように構成される中間状態(L1とL2との間の、下位〜中間LM状態)へと移動させる。例えば、下位ページに「0」を書き込むことは、マルチレベル記憶セルを、L0状態(LSB及びMSBの双方が1)から、L2状態(LSBが0に変更される)へと変化させる。上位ページへの、後続の「0」の書き込みが、マルチレベル記憶セルを、中間状態(典型的には、L1状態とL2状態との間)から、MLCの双方のビットが「0」であるようなL2状態に移動させる。それゆえ、そのような実施形態では、セルは、中間状態を通って遷移するため、マルチレベルセルをL0からL2へと移動させるためには、2つの書き込み(1つは下位ページへ、1つは上位ページへ)が必要とされ、MLCデバイスは、下位ページが上位ページよりも前にプログラムされることを必要とし、消去操作が介在することのない部分的なページのプログラミングを許可しない。上位ページ又は下位ページのいずれかへ「1」を書き込むことは、その時点での下位ページのバイナリ値に応じて、MLCを、L1又はL3のいずれかへ遷移させることになる。更には、特定のソリッドステート媒体の販売元は、下位ページが上位ページよりも前に書き込まれなければならない、などの要件を課す場合がある。他の実施形態では、ソリッドステート記憶媒体110は、上位ページへの第1の書き込みコマンドによって、バイナリ値が最初にMSBに書き込まれる、2相プログラミングモデルを採用することができる。
一実施形態では、設定モジュール352は、上位ページのみ、下位ページのみ、などのような、マルチレベル記憶セルが記憶するバイナリデータのサブセットに基づいて、1つ以上の読み取り電圧閾値662を調整する。そのような実施形態では、LSBビットに関する状態変化を検討することにより、マルチレベル記憶セル内の電圧が変化している方向が、指示される。ビット値の、グレイコード符号化(図6Cに示すような)及びバイナリコード符号化の双方に関しては、マルチレベル記憶セルのLSBは、図示の実施形態では、中間の2つの居所又は状態、L1状態とL2状態との間で、バイナリ0とバイナリ1との間で遷移する。他の符号化モデルに関しては、MSBが、中間の2つの居所又は状態の間で、バイナリ0とバイナリ1との間で遷移することなどができる。グレイコード又はバイナリコード符号化モデルに関しては、LSBは、「1」の値を、下位の範囲(下位の2つの状態又は居所、L0及びL1を含む)内での読み取り電圧に関して有し、LSBは、「0」の値を、上位の範囲(上位の2つの状態又は居所、L2及びL3を含む)内での読み取り電圧に関して有する。読み取りバイアスが既知のバイアスから偏移しているか否かを判定するために、MLC記憶セルのLSBのみを使用することによって、設定モジュール352は、一実施形態では、SLC記憶セルに関する読み取りバイアスが既知のバイアスから偏移しているか否かを判定することと実質的に同様の方式で、LSBデータセットのバイナリ1及び/又はバイナリ0を、計数若しくは集計することなどによって、判定を実施することができる。
特定のタイプのマルチレベル記憶セルに関しては、中間の読み取り電圧閾値662b、並びに隣接するL1状態及びL2状態は、読み取り電圧をドリフトさせる恐れのある、読み取り妨害又は他の要因に、より敏感であり得る。更には、上述のように、特定の実施形態では、単一のマルチレベル記憶セルのLSB及びMSBは、異なる物理ページ内に記憶されたデータを表し得る。複数個のマルチレベル記憶セルのそれぞれからの単一のビットを、データセットとして使用することにより、一実施形態では、そのデータセットを検索するための読み取り操作の数を低減することができる。他の実施形態では、下位ページ内の複数個のマルチレベル記憶セルのそれぞれからの単一のビットの使用は、マルチレベル記憶セルに関する、既知のバイアスからの読み取りバイアスの偏差及び方向を検出するプロセスを、単純化する。
一実施形態では、方向モジュール406は、マルチレベル記憶セルの1つ以上の下位ページからのデータを含む、データセットに基づいて、そのマルチレベル記憶セルのグルーピングに関する偏差の方向を判定する。下位ページは、LSBを含むため、特定の実施形態では、方向モジュール406は、LSBに関する記憶セルの値が、バイナリ1からバイナリ0へ遷移していることを、下位ページに関する読み取りバイアスと下位ページに関する既知のバイアスとの差異が指示することに応答して、読み取り電圧閾値662が、より大きい読み取り電圧に向けて偏移していることを判定する。バイナリ1からバイナリ0へ遷移するLSBに関しては、図6Cの符号化モデルを使用するマルチレベル記憶セルに関する読み取り電圧は、L0又はL1の状態のいずれかから、L2又はL3の状態にドリフトしなければならず、1つ以上の読み取り電圧閾値662を増大させて、読み取り電圧を元のL0又はL1の状態に戻すべきであることを指示する。
同様に、特定の実施形態では、方向モジュール406は、LSBに関する記憶セルの値が、バイナリ0からバイナリ1へ遷移していることを、下位ページに関する読み取りバイアスと下位ページに関する既知のバイアスとの差異が指示することに応答して、読み取り電圧閾値662が、より小さい読み取り電圧に向けて偏移していることを判定する。バイナリ0からバイナリ1へ遷移するLSBに関しては、図6Cの符号化モデルを使用するマルチレベル記憶セルに関する読み取り電圧は、L3又はL2の状態のいずれかから、L1又はL0の状態にドリフトしなければならず、1つ以上の読み取り電圧閾値662を減少させて、読み取り電圧を元のL3又はL2の状態に戻すべきであることを指示する。特定の実施形態では、複数の状態の全体にわたる偏差は、可能性が低い場合があり、LSBを使用して検出可能な偏差は、L1状態とL2状態との間であり、偏差の明確な方向を、いずれかの方向で指示することができる。
別の実施形態では、方向モジュール406は、ソリッドステート記憶媒体110の記憶セルに関して使用される符号化のタイプ、記憶媒体110の記憶セルの物理的及び/又は電気的アーキテクチャーなどに、少なくとも部分的に基づいて、偏差の方向を判定する。例えば、図6Cの符号化モデルに基づくと、方向モジュール406は、2ビットMLC記憶媒体のタイプに基づいて、データセットが上位ページ又は下位ページのいずれを含むかに基づいて、示されるグレイコード符号化タイプに基づいて、判定される偏差の規模に基づいてなどのように、偏差の方向を判定することができる。更なる実施形態では、方向モジュール406は、異なる物理ページなどのような、別個の、若しくは異種のアドレスからのLSB及びMSBを、単一のデータセットへと変換又は組み合わせるか、あるいは他の方法でLSB及びMSBを調整して、偏差の方向を判定することができる。
読み取り電圧閾値調整を判定するために、マルチレベル記憶セル内に記憶される各ビットを使用することにより、特定の実施形態では、読み取り電圧閾値調整の正確性を増大させることができるが、読み取り操作の数が増大するか、又は判定に複雑性が加わる恐れがある。一実施形態では、ECCデコーダ322が、マルチレベル記憶セルのグルーピングの上位ページ内のデータエラーを検出し、データセット読み取りモジュール402が、そのグルーピングに関する1つ以上の下位ページを検索し、設定モジュール352が、その下位ページに基づいて、そのグルーピングに関する読み取り電圧閾値を調整する。
図6Dは、ソリッドステート記憶媒体110のマルチレベル記憶セルのセットに関する、調整設定パラメーター672a〜cの一実施形態を示す。特定の実施形態では、図6Cの設定パラメーター662a〜cは、製造元、販売元などによって設定された、デフォルトの設定パラメーターであり、設定モジュール352及び/又は事前対応設定モジュール424が、これらのデフォルト設定パラメーター662a〜cを、調整設定パラメーター672a〜cへと、調整又は設定する。
調整設定パラメーター672a〜cは、デフォルト設定パラメーター662a〜cよりも、図6Dの実際の記憶セル状態の分散と密接に適合する。記憶セルの対応するセットが、図6Dの記憶セル状態の分散を有して、デフォルト設定パラメーター662a〜cを使用した場合であれば、デフォルト設定パラメーター662a〜cの場所を越えてドリフトした分散の諸部分は、データエラーを登録する。調整設定パラメーター672a〜cを使用するように、記憶セルの対応するセットを設定することによって、設定モジュール352は、潜在的なデータエラーを、防止、回避、又は訂正する。
一実施形態では、設定モジュール352は、上述のように、偏差モジュール404、方向モジュール406、調整モジュール408などを使用して、調整設定パラメーター672a〜cを反応的に判定する。別の実施形態では、設定モジュール352は、上述のように、記憶セルの対応するセットに関する記憶媒体特性に基づいて、事前対応設定モジュール424を使用して、調整設定パラメーター672a〜cを事前対応的に判定する。
図7Aは、媒体特性モジュール502及び記憶媒体特性レポジトリ702の、一実施形態を示す。図示の実施形態では、媒体特性モジュール502は、記憶媒体特性レポジトリ702内に、複数個の異なる記憶セルのセットに関する記憶媒体特性を、記憶及び維持する。記憶媒体特性レポジトリ702は、ソリッドステート記憶媒体110の記憶セルのセットに関する記憶媒体特性を記述する項目を記憶する。記憶媒体特性レポジトリ702は、テーブル、行列、アレイ、データベース、ファイル、又は記憶媒体特性を記憶する別のデータ構造のうちの1つ以上によって、具体化することができる。
媒体特性モジュール502は、ソリッドステート記憶媒体110のメタデータ領域内、ソリッドステート記憶デバイス102及び/又はコンピュータ112の、揮発性メモリ内、コンピュータ112の不揮発性記憶装置内に記憶された、ソリッドステート記憶デバイス102に関する設定ファイル内、ソリッドステート記憶デバイス102の専用不揮発性記憶装置内などのうちの1つ以上に、記憶媒体特性レポジトリを記憶することができる。媒体特性モジュール502は、記憶媒体特性レポジトリ702及び/又は記憶媒体特性を、単一の場所に記憶することができ、又は複数の場所の間に、記憶を分割することもできる。
例えば、一実施形態では、媒体特性モジュール502は、製造元又は販売元によってプログラムされるプログラム可能読み取り専用メモリ(「PROM」)内などのような、ソリッドステート記憶デバイス102の不揮発性記憶装置から、ソリッドステート記憶デバイス102及び/又はソリッドステート記憶媒体110に関する形式、モデル、製造元、製品バージョンなどのような、静的な記憶媒体特性にアクセスすることができる。媒体特性モジュール502は、プログラム/消去サイクルの回数、読み取り回数、保持時間、温度、ユースケース、エラー統計などのような動的な記憶媒体特性を、ソリッドステート記憶デバイス102及び/又はコンピュータ112の揮発性メモリ、ソリッドステート記憶媒体110上のメタデータ内などに、記憶することができる。媒体特性モジュール502が、記憶媒体特性レポジトリ702の少なくとも一部分を、揮発性メモリ内に記憶する場合には、特定の実施形態では、媒体特性モジュール502は、記憶媒体特性レポジトリ702のデータを、ソリッドステート記憶媒体110又は他の不揮発性記憶装置に、定期的に保存し得ることにより、媒体特性モジュール502は、電源異常、不適切なシャットダウンなどに応答して、記憶媒体特性レポジトリ702を再構築することができる。
図7Bは、記憶媒体特性レポジトリ702の別の実施形態を示す。記憶媒体特性レポジトリ702は、記憶セルのセットに関する複数個の項目708を含む。記憶セルのセットは、図示の実施形態では、記憶媒体領域706によって編成され、LEB 0〜LEB Nの、各記憶媒体領域706に関する、記憶媒体特性レポジトリ702内の項目708を有する。図示の実施形態での記憶媒体領域706は、上述のように、論理消去ブロックLEB0〜LEBNとして示されるが、他の実施形態では、記憶媒体領域706としては、物理消去ブロック、ページ、論理ページ、ECCチャンク、ページ内部の区画、ダイ、ダイプレーン、チップなどを挙げることができる。
各項目708は、対応する記憶媒体領域706に関する記憶媒体特性704を更に含む。記憶媒体特性704は、図示の実施形態では、プログラム/消去サイクルの回数704a、読み取り回数704b、保持時間704c、温度704d、及びビットエラー率704eを含む。特性更新モジュール508が、媒体特性モジュール502と協働して、上述のように記憶媒体特性レポジトリ702を更新することができる。
図8Aは、設定パラメーターモジュール504及び設定パラメーターレポジトリ802の一実施形態を示す。図示の実施形態では、設定パラメーターモジュール504は、設定パラメーターレポジトリ802内に、複数個の異なる記憶セルのセットに関する設定パラメーターを、記憶及び維持する。特定の実施形態では、設定パラメーターレポジトリ802は、記憶媒体特性レポジトリ702に統合して、単一のレポジトリ702、802の形態にすることができる。設定パラメーターレポジトリ802は、ソリッドステート記憶媒体110の記憶セルのセットに関する設定パラメーターを記述する項目を記憶する。設定パラメーターレポジトリ802は、テーブル、行列、アレイ、データベース、ファイル、又は設定パラメーターを記憶する別のデータ構造のうちの1つ以上によって、具体化することができる。
図8Bは、設定パラメーターレポジトリ802の別の実施形態を示す。設定パラメーターレポジトリ802は、記憶セルのセットに関する複数個の項目808を含む。記憶セルのセットは、図示の実施形態では、記憶媒体領域706によって編成され、項目808は、LEB 0〜LEB Nの記憶媒体領域706に対応する。各項目808は、対応する記憶媒体領域706に関する、設定パラメーター804を更に含む。設定パラメーター804は、図示の実施形態では、読み取りレベルR1(804a)、読み取りレベルR2(804b)、及び読み取りレベルR3(804c)に関する、読み取り電圧閾値調整804a〜cを含み、各項目を、デフォルトの読み取り電圧閾値からの16進数オフセットとして有する。
図示の実施形態での設定パラメーター804は、上述のように、読み取り電圧閾値調整として示されるが、他の実施形態では、設定パラメーター804としては、ソリッドステート記憶媒体110の、固有抵抗閾値、書き込み若しくはプログラム閾値、消去閾値、及び/又は他の修正可能パラメーターを挙げることができる。上述のように、設定パラメーター804としては、絶対的データ値、データ値に対するオフセット若しくは調整、又は別のパラメーターを挙げることができる。設定更新モジュール510が、設定パラメーターモジュール504と協働して、上述のように設定パラメーターレポジトリ802を更新することができる。
流れ図
図9は、ソリッドステート記憶媒体110の有用性を改善するための方法の一実施形態900を示す。この方法900が開始すると、媒体特性モジュール502が、ソリッドステート記憶媒体110の記憶セルのセットに関する1つ以上の記憶媒体特性を参照する(902)。設定パラメーターモジュール504が、1つ以上の記憶媒体特性の参照(902)に基づいて、記憶セルのセットに関する設定パラメーターを判定する(904)。記憶セル設定モジュール506が、判定された(904)設定パラメーターを使用するように、記憶セルのセットを設定し(906)、方法900が終了する。
図10は、ソリッドステート記憶媒体110の有用性を改善するための方法の別の実施形態1000を示す。この方法1000が開始すると、特性更新モジュール508が、ソリッドステート記憶媒体110の記憶セルのセットに関して、更新イベントが発生しているか否かを判定する(1002)。更新イベントが発生していることを、特性更新モジュール508が判定する(1002)場合には、特性更新モジュール508は、記憶媒体特性レポジトリ702内などの、記憶セルのセットに関する1つ以上の記憶媒体特性を更新する(1004)。更新イベントが発生していないことを、特性更新モジュール508が判定する(1002)場合には、特性更新モジュール508は、記憶セルのセットに関する1つ以上の記憶媒体特性を更新しない(1004)。
設定更新モジュール510が、1つ以上の記憶媒体特性を更新する(1004)特性更新モジュール508などからの、記憶セルのセットに関する1つ以上の記憶媒体特性の変化が存在するか否かを判定する(1006)。記憶セルのセットに関する1つ以上の記憶媒体特性の変化が存在することを、設定更新モジュール510が判定する(1006)場合には、媒体特性モジュール502が、記憶セルのセットに関する1つ以上の記憶媒体特性を参照し(1008)、設定パラメーターモジュール504及び/又は設定更新モジュール510が、記憶セルのセットに関する設定パラメーターを、判定/更新する(1010)。記憶セルのセットに関する1つ以上の記憶媒体特性の変化が存在しないことを、設定更新モジュール510が判定する(1006)場合には、この方法1000は、参照する(1008)工程、及び判定/更新する(1010)工程をスキップする。
記憶セル設定モジュール506が、記憶セルのセットに関して設定トリガーが発生しているか否かを判定する(1012)。設定トリガーが発生していることを、記憶セル設定モジュール506が判定する(1012)場合には、記憶セル設定モジュール506は、判定/更新された(1010)設定パラメーターを使用するように、記憶セルのセットを設定し(1014)、方法1000を繰り返す。設定トリガーが発生していないことを、記憶セル設定モジュール506が判定する(1012)場合には、方法1000を繰り返す。
本発明は、その趣旨又は本質的特性から逸脱することなく、他の特定の形態で具体化することができる。説明される実施形態はあらゆる点で、制限的なものではなく、単に例示的なものとして見なすべきである。本発明の範囲は、それゆえ、上述の説明によるよりも、添付される特許請求の範囲によって指示される。特許請求の範囲の等価物の意味及び範囲内に入る全ての変更は、それらの特許請求の範囲内に包含されるものとする。