(57)【要約】  メモリシステムによって実装されるメモリに対するウェアレベリングを実行する方法であって、受信器及びメモリに連結されたプロセッサが、メモリの第１の部分の書き込みカウントに基づいて、循環シフターオフセットを決定する段階と、メモリが、循環シフターオフセットに基づいて、メモリの第１の部分及びメモリの第２の部分内の複数のメモリセルに複数のユーザビット及び複数の誤り訂正符号（ＥＣＣ）ビットを書き込む段階とを備える。
2021506024.tif 000002
【特許請求の範囲】
【請求項１】
メモリシステムによって実装されるメモリに対するウェアレベリングを実行する方法であって、
前記メモリに連結された受信器が、前記メモリの第１の部分に複数のユーザビットを書き込むための書き込みコマンドを受信する段階であって、前記書き込みコマンドは前記複数のユーザビット及び前記メモリの前記第１の部分のアドレスを含み、前記複数のユーザビットは前記メモリの第２の部分で格納され、且つ、前記複数のユーザビットに対する誤り検出を実行するのに用いられる複数の誤り訂正符号（ＥＣＣ）ビットと関連している、受信する段階と、
前記受信器及び前記メモリに連結されたプロセッサが、前記メモリの前記第１の部分の書き込みカウントに基づいて、循環シフターオフセットを決定する段階と、
前記メモリが、前記循環シフターオフセットに基づいて、前記メモリの前記第１の部分及び前記メモリの前記第２の部分内の複数のメモリセルに前記複数のユーザビット及び前記複数のＥＣＣビットを書き込む段階と
を備える、方法。
【請求項２】
前記循環シフターオフセットは複数のメモリセルの数に対応する整数値であり、その整数値だけ前記メモリの前記第１の部分及び前記メモリの前記第２の部分内の前記複数のユーザビット及び前記複数のＥＣＣビットをシフトし、前記循環シフターオフセットは前記書き込みカウント／Ｋに等しく、Ｋは前記書き込みカウントと関連している予め定められた定数である、請求項１に記載の方法。
【請求項３】
前記書き込みカウントは複数の書き込みカウントビットを含み、前記方法は、前記書き込みカウントをインクリメントした後で、且つ、前記複数のメモリセルに前記複数のユーザビット及び前記複数のＥＣＣビットを書き込む前に、前記プロセッサが、前記書き込みカウントの前記複数の書き込みカウントビットに対するバランスのとれたグレイコード（ＢＧＣ）符号化を実行する段階をさらに備える、請求項１又は２に記載の方法。
【請求項４】
前記循環シフターオフセットは前記複数のメモリセルの数に対応する整数値であり、その整数値だけ前記メモリの前記第１の部分及び前記メモリの前記第２の部分内の前記複数のユーザビット及び前記複数のＥＣＣビットをシフトし、前記複数のユーザビット及び前記複数のＥＣＣビットは、単一ビットを格納するよう各々構成される複数のメモリセル内で連続して論理的に格納され、前記複数のメモリセルに前記複数のユーザビット及び前記複数のＥＣＣビットを書き込む段階は、前記複数のメモリセルのうちの１つで前記複数のユーザビット及び前記複数のＥＣＣビットの各々を格納するための位置を前記循環シフターオフセットだけシフトする段階を有する、請求項１から３のいずれか一項に記載の方法。
【請求項５】
前記循環シフターオフセットは前記複数のメモリセルの数に対応する整数値であり、その整数値だけ前記メモリの前記第１の部分及び前記メモリの前記第２の部分内の前記複数のユーザビット及び前記複数のＥＣＣビットをシフトし、前記複数のユーザビット及び前記複数のＥＣＣビットは、単一ニブルを格納するよう各々構成される複数のメモリセル内で連続して論理的に格納され、１ニブルは４ビットを含み、前記複数のメモリセルに前記複数のユーザビット及び前記複数のＥＣＣビットを書き込む段階は、前記複数のメモリセルのうちの１つで前記複数のユーザビット及び前記複数のＥＣＣビットの各々を格納するための位置を前記循環シフターオフセットだけシフトする段階を有する、請求項１から４のいずれか一項に記載の方法。
【請求項６】
前記書き込みカウントは複数の書き込みカウントビットを含み、前記方法は、前記書き込みコマンドを受信した後、前記書き込みカウントをインクリメントする段階をさらに備える、請求項１から５のいずれか一項に記載の方法。
【請求項７】
前記プロセッサが、前記複数のユーザビットに対応する前記複数のＥＣＣビットを計算する段階をさらに備える、請求項１から６のいずれか一項に記載の方法。
【請求項８】
前記メモリはストレージクラスメモリである、請求項１から７のいずれか一項に記載の方法。
【請求項９】
前記第１の部分及び前記第２の部分は、前記メモリ内で連続して格納されない、請求項１から８のいずれか一項に記載の方法。
【請求項１０】
メモリシステムとして実装される装置であって、
命令を含むメモリストレージと、
前記メモリストレージと通信する１又は複数のプロセッサと
を備え、
前記１又は複数のプロセッサは、
前記メモリの第１の部分に複数のユーザビットを書き込むための書き込みコマンドを受信することであって、前記書き込みコマンドは前記複数のユーザビット及び前記メモリの前記第１の部分のアドレスを含み、前記複数のユーザビットは前記メモリの第２の部分で格納され、且つ、前記複数のユーザビットに対する誤り検出を実行するのに用いられる複数の誤り訂正符号（ＥＣＣ）ビットと関連している、受信することと、
前記メモリの前記第１の部分の書き込みカウントに基づいて、循環シフターオフセットを決定することと、
前記循環シフターオフセットに基づいて、前記メモリの前記第１の部分及び前記メモリの前記第２の部分内の複数のメモリセルに前記複数のユーザビット及び前記複数のＥＣＣビットを書き込むことと
を行うよう前記命令を実行する、装置。
【請求項１１】
前記循環シフターオフセットは複数のメモリセルの数に対応する整数値であり、その整数値だけ前記メモリの前記第１の部分及び前記メモリの前記第２の部分内の前記複数のユーザビット及び前記複数のＥＣＣビットをシフトし、前記循環シフターオフセットは前記書き込みカウント／Ｋに等しく、Ｋは前記書き込みカウントと関連している予め定められた定数である、請求項１０に記載の装置。
【請求項１２】
前記書き込みカウントは複数の書き込みカウントビットを含み、前記１又は複数のプロセッサは、前記書き込みカウントをインクリメントした後で、且つ、前記複数のメモリセルに前記複数のユーザビット及び前記複数のＥＣＣビットを書き込む前に、前記書き込みカウントの前記複数の書き込みカウントビットに対するバランスのとれたグレイコード（ＢＧＣ）符号化を実行することを行うよう前記命令を実行する、請求項１０又は１１に記載の装置。
【請求項１３】
前記循環シフターオフセットは前記複数のメモリセルの数に対応する整数値であり、その整数値だけ前記メモリの前記第１の部分及び前記メモリの前記第２の部分内の前記複数のユーザビット及び前記複数のＥＣＣビットをシフトし、前記複数のユーザビット及び前記複数のＥＣＣビットは、単一ビットを格納するよう各々構成される複数のメモリセル内で連続して論理的に格納され、前記１又は複数のプロセッサは、前記複数のメモリセルのうちの１つで前記複数のユーザビット及び前記複数のＥＣＣビットの各々を格納するための位置を前記循環シフターオフセットだけシフトすることを行うよう前記命令を実行する、請求項１０から１２のいずれか一項に記載の装置。
【請求項１４】
前記循環シフターオフセットは前記複数のメモリセルの数に対応する整数値であり、その整数値だけ前記メモリの前記第１の部分及び前記メモリの前記第２の部分内の前記複数のユーザビット及び前記複数のＥＣＣビットをシフトし、前記複数のユーザビット及び前記複数のＥＣＣビットは、単一ニブルを格納するよう各々構成される複数のメモリセル内で連続して論理的に格納され、１ニブルは４ビットを含み、前記１又は複数のプロセッサは、前記複数のメモリセルのうちの１つで前記複数のユーザビット及び前記複数のＥＣＣビットの各々を格納するための位置を前記循環シフターオフセットだけシフトすることを行うよう前記命令を実行する、請求項１０から１３のいずれか一項に記載の装置。
【請求項１５】
前記書き込みカウントは複数の書き込みカウントビットを含み、前記１又は複数のプロセッサは、前記書き込みコマンドを受信した後、前記書き込みカウントをインクリメントするよう前記命令を実行する、請求項１０から１４のいずれか一項に記載の装置。
【請求項１６】
前記１又は複数のプロセッサは、前記複数のユーザビットに対応する前記複数のＥＣＣビットを計算することを行うよう前記命令を実行する、請求項１０から１５のいずれか一項に記載の装置。
【請求項１７】
コンピュータ実行可能命令を含むコンピュータプログラム製品を格納するよう構成される非一時的媒体であって、プロセッサによって実行されるとき、前記コンピュータ実行可能命令は、
前記メモリの第１の部分に複数のユーザビットを書き込むための書き込みコマンドを受信する手順であって、前記書き込みコマンドは前記複数のユーザビット及び前記メモリの前記第１の部分のアドレスを含み、前記複数のユーザビットは前記メモリの第２の部分で格納され、且つ、前記複数のユーザビットに対する誤り検出を実行するのに用いられる複数の誤り訂正符号（ＥＣＣ）ビットと関連している、受信する手順と、
前記メモリの前記第１の部分の書き込みカウントに基づいて、循環シフターオフセットを決定する手順と、
前記循環シフターオフセットに基づいて、前記メモリの前記第１の部分及び前記メモリの前記第２の部分内の複数のメモリセルに前記複数のユーザビット及び前記複数のＥＣＣビットを書き込む手順と
を前記プロセッサにさせる、非一時的媒体。
【請求項１８】
前記循環シフターオフセットは複数のメモリセルの数に対応する整数値であり、その整数値だけ前記メモリの前記第１の部分及び前記メモリの前記第２の部分内の前記複数のユーザビット及び前記複数のＥＣＣビットをシフトし、前記循環シフターオフセットは前記書き込みカウント／Ｋに等しく、Ｋは前記書き込みカウントと関連している予め定められた定数である、請求項１７に記載の非一時的媒体。
【請求項１９】
前記書き込みカウントは複数の書き込みカウントビットを含み、前記プロセッサによって実行されるとき、前記コンピュータ実行可能命令は、前記書き込みカウントをインクリメントした後で、且つ、前記複数のメモリセルに前記複数のユーザビット及び前記複数のＥＣＣビットを書き込む前に、前記書き込みカウントの前記複数の書き込みカウントビットに対するバランスのとれたグレイコード（ＢＧＣ）符号化を実行する手順をさらに前記プロセッサにさせる、請求項１７又は１８に記載の非一時的媒体。
【請求項２０】
前記循環シフターオフセットは前記複数のメモリセルの数に対応する整数値であり、その整数値だけ前記メモリの前記第１の部分及び前記メモリの前記第２の部分内の前記複数のユーザビット及び前記複数のＥＣＣビットをシフトし、前記複数のユーザビット及び前記複数のＥＣＣビットは、単一ビットを格納するよう各々構成される複数のメモリセル内で連続して論理的に格納され、前記プロセッサによって実行されるとき、前記コンピュータ実行可能命令は、前記複数のメモリセルのうちの１つで前記複数のユーザビット及び前記複数のＥＣＣビットの各々を格納するための位置を前記循環シフターオフセットだけシフトする手順をさらに前記プロセッサにさせる、請求項１７から１９のいずれか一項に記載の非一時的媒体。
【請求項２１】
前記循環シフターオフセットは前記複数のメモリセルの数に対応する整数値であり、その整数値だけ前記メモリの前記第１の部分及び前記メモリの前記第２の部分内の前記複数のユーザビット及び前記複数のＥＣＣビットをシフトし、前記複数のユーザビット及び前記複数のＥＣＣビットは、単一ニブルを格納するよう各々構成される複数のメモリセル内で連続して論理的に格納され、１ニブルは４ビットを含み、前記プロセッサによって実行されるとき、前記コンピュータ実行可能命令は、前記複数のメモリセルのうちの１つで前記複数のユーザビット及び前記複数のＥＣＣビットの各々を格納するための位置を前記循環シフターオフセットだけシフトする手順をさらに前記プロセッサにさせる、請求項１７から２０のいずれか一項に記載の非一時的媒体。
【請求項２２】
前記書き込みカウントは複数の書き込みカウントビットを含み、前記プロセッサによって実行されるとき、前記コンピュータ実行可能命令は、前記書き込みコマンドを受信した後、前記書き込みカウントをインクリメントする手順をさらに前記プロセッサにさせる、請求項１７から２１のいずれか一項に記載の非一時的媒体。
【請求項２３】
前記プロセッサによって実行されるとき、前記コンピュータ実行可能命令は、前記複数のユーザビットに対応する前記複数のＥＣＣビットを計算する手順をさらに前記プロセッサにさせる、請求項１７から２２のいずれか一項に記載の非一時的媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願の相互参照］
本願は、２０１７年１２月１２日にＣｈａｏｈｏｎｇ  Ｈｕによって出願され、「ストレージクラスメモリシステムのウェアレベリングスキーム及び実装（Ａ  Ｗｅａｒ−Ｌｅｖｅｌｉｎｇ  Ｓｃｈｅｍｅ  ａｎｄ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ  ｆｏｒ  ａ  Ｓｔｏｒａｇｅ  Ｃｌａｓｓ  Ｍｅｍｏｒｙ  Ｓｙｓｔｅｍ）」と題された米国仮特許出願第６２／５９７，７５８号に対する優先権を主張し、その全体が複製されたかのように参照により本明細書に組み込まれる。
【０００２】
本開示は、メモリ管理の分野に関連する。特に、本開示は、メモリシステム内のメモリセルの寿命を延ばすことに関連する。
【背景技術】
【０００３】
メモリシステム内のメモリセル又は物理的な位置に対する消耗は、どのくらいの頻度でセルの各々がプログラミングされるかに応じて変化する。メモリセルが一旦プログラミングされて、その後、実質的に再プログラミングされない場合、そのセルと関連している消耗は、概して比較的低い。しかしながら、メモリセルが繰り返し書き込まれて消去される場合、そのセルと関連している消耗は、概して比較的高い。データストレージシステムにおいて、ホストが同じ物理アドレスを繰り返し用いてデータの書き込み及び上書きを行う場合、メモリセルの同じ物理的な位置は、繰り返し書き込まれて消去される。
【発明の概要】
【０００４】
本開示の第１の態様によれば、メモリシステムによって実装される方法が提供される。方法は、メモリに連結された受信器が、メモリの第１の部分に複数のユーザビットを書き込むための書き込みコマンドを受信する段階であって、書き込みコマンドは複数のユーザビット及びメモリの第１の部分のアドレスを含み、ユーザビットはメモリの第２の部分で格納され、且つ、複数のユーザビットに対する誤り検出を実行するのに用いられる複数の誤り訂正符号（ＥＣＣ）ビットと関連している、受信する段階と、受信器及びメモリに連結されたプロセッサが、メモリの第１の部分の書き込みカウントに基づいて、循環シフターオフセットを決定する段階と、メモリが、循環シフターオフセットに基づいて、メモリの第１の部分及びメモリの第２の部分内の複数のメモリセルに複数のユーザビット及び複数のＥＣＣビットを書き込む段階とを備える。
【０００５】
第１の態様による方法の第１の実装において、循環シフターオフセットは複数のメモリセルの数に対応する整数値であり、その整数値だけメモリの第１の部分及びメモリの第２の部分内の複数のユーザビット及び複数のＥＣＣビットをシフトし、循環シフターオフセットは書き込みカウント／Ｋに等しく、Ｋは書き込みカウントと関連している予め定められた定数である。
【０００６】
第１の態様又は第１の態様の任意の前述の実装による方法の第２の実装において、書き込みカウントは複数の書き込みカウントビットを含み、方法は、書き込みカウントをインクリメントした後で、且つ、複数のメモリセルに複数のユーザビット及び複数のＥＣＣビットを書き込む前に、プロセッサが、書き込みカウントの複数の書き込みカウントビットに対するバランスのとれたグレイコード（ＢＧＣ）符号化を実行する段階をさらに備える。
【０００７】
第１の態様又は第１の態様の任意の前述の実装による方法の第３の実装において、循環シフターオフセットは複数のメモリセルの数に対応する整数値であり、その整数値だけメモリの第１の部分及びメモリの第２の部分内の複数のユーザビット及び複数のＥＣＣビットをシフトし、複数のユーザビット及び複数のＥＣＣビットは、単一ビットを格納するよう各々構成される複数のメモリセル内で連続して論理的に格納され、複数のメモリセルに複数のユーザビット及び複数のＥＣＣビットを書き込む段階は、複数のメモリセルのうちの１つで複数のユーザビット及び複数のＥＣＣビットの各々を格納するための位置を循環シフターオフセットだけシフトする段階を有する。
【０００８】
第１の態様又は第１の態様の任意の前述の実装による方法の第４の実装において、循環シフターオフセットは複数のメモリセルの数に対応する整数値であり、その整数値だけメモリの第１の部分及びメモリの第２の部分内の複数のユーザビット及び複数のＥＣＣビットをシフトし、複数のユーザビット及び複数のＥＣＣビットは、単一ニブルを格納するよう各々構成される複数のメモリセル内で連続して論理的に格納され、１ニブルは４ビットを含み、複数のメモリセルに複数のユーザビット及び複数のＥＣＣビットを書き込む段階は、複数のメモリセルのうちの１つで複数のユーザビット及び複数のＥＣＣビットの各々を格納するための位置を循環シフターオフセットだけシフトする段階を有する。
【０００９】
第１の態様又は第１の態様の任意の前述の実装による方法の第５の実装において、書き込みカウントは複数の書き込みカウントビットを含み、方法は、書き込みコマンドを受信した後、書き込みカウントをインクリメントする段階をさらに備える。
【００１０】
第１の態様又は第１の態様の任意の前述の実装による方法の第６の実装において、方法は、プロセッサが、複数のユーザビットに対応する複数のＥＣＣビットを計算する段階をさらに備える。
【００１１】
第１の態様又は第１の態様の任意の前述の実装による方法の第７の実装において、メモリはストレージクラスメモリである。
【００１２】
第１の態様又は第１の態様の任意の前述の実装による方法の第８の実装において、第１の部分及び第２の部分は、メモリ内で連続して格納されない。
【００１３】
本開示の第２の態様によれば、メモリシステムとして実装される装置が提供される。装置は、命令を含むメモリストレージと、メモリストレージと通信する１又は複数のプロセッサとを備え、１又は複数のプロセッサは、メモリの第１の部分に複数のユーザビットを書き込むための書き込みコマンドを受信することであって、書き込みコマンドは複数のユーザビット及びメモリの第１の部分のアドレスを含み、ユーザビットはメモリの第２の部分で格納され、且つ、複数のユーザビットに対する誤り検出を実行するのに用いられる複数の誤り訂正符号（ＥＣＣ）ビットと関連している、受信することと、メモリの第１の部分の書き込みカウントに基づいて、循環シフターオフセットを決定することと、循環シフターオフセットに基づいて、メモリの第１の部分及びメモリの第２の部分内の複数のメモリセルに複数のユーザビット及び複数のＥＣＣビットを書き込むこととを行うよう命令を実行する。
【００１４】
第２の態様による装置の第１の実装において、循環シフターオフセットは複数のメモリセルの数に対応する整数値であり、その整数値だけメモリの第１の部分及びメモリの第２の部分内の複数のユーザビット及び複数のＥＣＣビットをシフトし、循環シフターオフセットは書き込みカウント／Ｋに等しく、Ｋは書き込みカウントと関連している予め定められた定数である。
【００１５】
第２の態様又は第２の態様の任意の前述の実装による装置の第２の実装において、書き込みカウントは複数の書き込みカウントビットを含み、１又は複数のプロセッサは、書き込みカウントをインクリメントした後で、且つ、複数のメモリセルに複数のユーザビット及び複数のＥＣＣビットを書き込む前に、書き込みカウントの複数の書き込みカウントビットに対するバランスのとれたグレイコード（ＢＧＣ）符号化を実行することを行うよう命令を実行する。
【００１６】
第２の態様又は第２の態様の任意の前述の実装による装置の第３の実装において、循環シフターオフセットは複数のメモリセルの数に対応する整数値であり、その整数値だけメモリの第１の部分及びメモリの第２の部分内の複数のユーザビット及び複数のＥＣＣビットをシフトし、複数のユーザビット及び複数のＥＣＣビットは、単一ビットを格納するよう各々構成される複数のメモリセル内で連続して論理的に格納され、１又は複数のプロセッサは、複数のメモリセルのうちの１つで複数のユーザビット及び複数のＥＣＣビットの各々を格納するための位置を循環シフターオフセットだけシフトすることを行うよう命令を実行する。
【００１７】
第２の態様又は第２の態様の任意の前述の実装による装置の第４の実装において、循環シフターオフセットは複数のメモリセルの数に対応する整数値であり、その整数値だけメモリの第１の部分及びメモリの第２の部分内の複数のユーザビット及び複数のＥＣＣビットをシフトし、複数のユーザビット及び複数のＥＣＣビットは、単一ニブルを格納するよう各々構成される複数のメモリセル内で連続して論理的に格納され、１ニブルは４ビットを含み、１又は複数のプロセッサは、複数のメモリセルのうちの１つで複数のユーザビット及び複数のＥＣＣビットの各々を格納するための位置を循環シフターオフセットだけシフトすることを行うよう命令を実行する。
【００１８】
第２の態様又は第２の態様の任意の前述の実装による装置の第５の実装において、書き込みカウントは複数の書き込みカウントビットを含み、１又は複数のプロセッサは、書き込みコマンドを受信した後、書き込みカウントをインクリメントすることを行うよう命令を実行する。
【００１９】
第２の態様又は第２の態様の任意の前述の実装による装置の第６の実装において、１又は複数のプロセッサは、複数のユーザビットに対応する複数のＥＣＣビットを計算することを行うよう命令を実行する。
【００２０】
本開示の第３の態様によれば、コンピュータ実行可能命令を含むコンピュータプログラム製品を格納するよう構成される非一時的媒体であって、プロセッサによって実行されるとき、コンピュータ実行可能命令は、メモリの第１の部分に複数のユーザビットを書き込むための書き込みコマンドを受信する手順であって、書き込みコマンドは複数のユーザビット及びメモリの第１の部分のアドレスを含み、ユーザビットはメモリの第２の部分で格納され、且つ、複数のユーザビットに対する誤り検出を実行するのに用いられる複数の誤り訂正符号（ＥＣＣ）ビットと関連している、受信する手順と、メモリの第１の部分の書き込みカウントに基づいて、循環シフターオフセットを決定する手順と、循環シフターオフセットに基づいて、メモリの第１の部分及びメモリの第２の部分内の複数のメモリセルに複数のユーザビット及び複数のＥＣＣビットを書き込む手順とをプロセッサにさせる、非一時的媒体が提供される。
【００２１】
第３の態様による非一時的媒体の第１の実装において、循環シフターオフセットは複数のメモリセルの数に対応する整数値であり、その整数値だけメモリの第１の部分及びメモリの第２の部分内の複数のユーザビット及び複数のＥＣＣビットをシフトし、循環シフターオフセットは書き込みカウント／Ｋに等しく、Ｋは書き込みカウントと関連している予め定められた定数である。
【００２２】
第３の態様又は第３の態様の任意の前述の実装による非一時的媒体の第２の実装において、書き込みカウントは複数の書き込みカウントビットを含み、プロセッサによって実行されるとき、コンピュータ実行可能命令は、書き込みカウントをインクリメントした後で、且つ、複数のメモリセルに複数のユーザビット及び複数のＥＣＣビットを書き込む前に、書き込みカウントの複数の書き込みカウントビットに対するバランスのとれたグレイコード（ＢＧＣ）符号化を実行する手順をさらにプロセッサにさせる。
【００２３】
第３の態様又は第３の態様の任意の前述の実装による非一時的媒体の第３の実装において、循環シフターオフセットは複数のメモリセルの数に対応する整数値であり、その整数値だけメモリの第１の部分及びメモリの第２の部分内の複数のユーザビット及び複数のＥＣＣビットをシフトし、複数のユーザビット及び複数のＥＣＣビットは、単一ビットを格納するよう各々構成される複数のメモリセル内で連続して論理的に格納され、プロセッサによって実行されるとき、コンピュータ実行可能命令は、複数のメモリセルのうちの１つで複数のユーザビット及び複数のＥＣＣビットの各々を格納するための位置を循環シフターオフセットだけシフトする手順をさらにプロセッサにさせる。
【００２４】
第３の態様又は第３の態様の任意の前述の実装による非一時的媒体の第４の実装において、循環シフターオフセットは複数のメモリセルの数に対応する整数値であり、その整数値だけメモリの第１の部分及びメモリの第２の部分内の複数のユーザビット及び複数のＥＣＣビットをシフトし、複数のユーザビット及び複数のＥＣＣビットは、単一ニブルを格納するよう各々構成される複数のメモリセル内で連続して論理的に格納され、１ニブルは４ビットを含み、プロセッサによって実行されるとき、コンピュータ実行可能命令は、複数のメモリセルのうちの１つで複数のユーザビット及び複数のＥＣＣビットの各々を格納するための位置を循環シフターオフセットだけシフトする手順をさらにプロセッサにさせる。
【００２５】
第３の態様又は第３の態様の任意の前述の実装による非一時的媒体の第５の実装において、書き込みカウントは複数の書き込みカウントビットを含み、プロセッサによって実行されるとき、コンピュータ実行可能命令は、書き込みコマンドを受信した後、書き込みカウントをインクリメントする手順をさらにプロセッサにさせる。
【００２６】
第３の態様又は第３の態様の任意の前述の実装による非一時的媒体の第６の実装において、プロセッサによって実行されるとき、コンピュータ実行可能命令は、複数のユーザビットに対応する複数のＥＣＣビットを計算する手順をさらにプロセッサにさせる。
【００２７】
ウェアレベリングは、典型的に、一定の時間間隔で、データの大きいブロック（数千のビット）を異なるメモリ位置に移動することを含む。しかしながら、データの大きいブロック内で特定のビットに対するきめ細かいウェアレベリングを実行するためのメカニズムが現在のところ存在しない。ウェアレベリングの現在のメカニズムはまた、ユーザビットより頻繁に変更する場合がある対応するＥＣＣビットを考慮しない。
【００２８】
本明細書で開示されるウェアレベリングスキームは、数千のビットのデータの大きいブロックよりはむしろ、データの特定のビット又はニブルを格納する位置を変更することを本明細書で開示されるウェアレベリングスキームは含む点で有利である。これは、メモリ内のメモリセルの寿命を制御するより詳細で正確な方法をもたらす。このようにして、本明細書で開示されるウェアレベリングスキームは、メモリ内のメモリセルの各々の寿命を延ばすことによって、メモリの寿命を延ばす。
【００２９】
これらの特徴又は他の特徴は、添付図面及び特許請求の範囲と合わせて以下の詳細な説明からより明確に理解されるだろう。
【図面の簡単な説明】
【００３０】
本開示をより十分に理解するために、ここで、添付図面及び詳細な説明と共に併用される以下の簡潔な説明について言及する。ここで、同様の参照番号は同様の要素を表す。
【００３１】
【図１】本開示の様々な実施形態による、ウェアレベリングを実行するよう構成されるメモリシステムの例を示す図である。
【００３２】
【図２】本開示の様々な実施形態による、メモリ内のメモリセルの物理アドレスと論理アドレスとの間の関係を示す図である。
【００３３】
【図３】本開示の様々な実施形態による、コードワードのＥＣＣビットとコードワードのユーザビットとの間の書き込み割合の差を示す図である。
【００３４】
【図４】本開示の様々な実施形態による、ウェアレベリングの方法を示す図である。
【００３５】
【図５】本開示の様々な実施形態による、ウェアレベリングを実行する方法の例を示す図である。
【００３６】
【図６】本開示の様々な実施形態による、ウェアレベリングを実行する方法の他の例を示す図である。
【００３７】
【図７】本開示の様々な実施形態による、メモリの第１の部分の書き込みカウントを格納するメモリセルに対するウェアレベリングを実行する方法の例を示す図である。
【００３８】
【図８】本開示の様々な実施形態による、メモリシステムの実施形態の図である。
【００３９】
【図９】本開示の様々な実施形態による、メモリに対するウェアレベリングを実行する方法を示すフローチャートである。
【００４０】
【図１０】本開示の様々な実施形態による、メモリに対するウェアレベリングを実行するための装置を示す図である。
【発明を実施するための形態】
【００４１】
１又は複数の実施形態の例示的な実装が以下に提供されるが、開示されたシステム及び／又は方法は、現在知られているか存在しているかどうかにかかわらず、任意の数の技術を用いて実装され得ることが最初に理解されるべきである。本開示は、本明細書に示され説明される例示的な設計及び実装を含む、以下で示される例示的な実装、図面、及び技術に決して限定されるべきでないが、添付の特許請求の範囲の範囲内に加えて、それらの均等物の全範囲内に変更され得る。
【００４２】
ユーザデータが、典型的にユーザから受信され、ユーザビットとして格納される。誤り訂正符号（ＥＣＣ）ビットがユーザビットに基づいて計算され、ユーザビットに対する誤り検出及び訂正を実行するのに用いられる。メモリに書き込まれるユーザビットを備える書き込みコマンドは、メモリシステムによって受信され得る。メモリシステムは、書き込みコマンドで受信したユーザビットのＥＣＣビットを計算するよう構成され得る。ユーザビットがメモリの第１の部分に書き込まれ得、ＥＣＣビットがメモリの第２の部分に書き込まれ得る。
【００４３】
場合によっては、ＥＣＣビットを格納するメモリセルが、ユーザビットを格納するメモリセルより頻繁に書き込まれる。例えば、ユーザビットのセット内の特定のビットに対する書き込みコマンドを実行するとき、ほんのわずかだけのユーザビットを更新する必要があるときに、全ての対応するＥＣＣビットを更新する必要がある場合がある。これによって、特定のメモリセルが他のメモリセルより頻繁に書き込まれることになり、したがって、より頻繁に書き込まれるメモリセルがそれほど頻繁に書き込まれないメモリセルより速く消耗する。
【００４４】
ウェアレベリングは、典型的に、そうでなければ他のメモリセルより頻繁に書き込まれるであろう特定のメモリセルの消耗を減らすよう実行される。ウェアレベリングは、典型的に、一定の時間間隔で、データの大きいブロック（数千のビット）を異なるメモリ位置に移動することを含む。しかしながら、データの大きいブロック内で特定のビットに対するきめ細かいウェアレベリングを実行するためのメカニズムが現在のところ存在しない。ウェアレベリングの現在のメカニズムはまた、ユーザビットより頻繁に変更する場合がある対応するＥＣＣビットを考慮しない。
【００４５】
本明細書で開示されるのは、ユーザビットを格納するメモリの一部分の書き込みカウントに基づいてユーザビット及びＥＣＣビットを格納するメモリセルに対するウェアレベリングを実装する方法及びシステムである。ウェアレベリングは、書き込みカウントに従って計算される循環シフターオフセットだけユーザビット及びＥＣＣビットをシフト又は回転することによって実行される。ウェアレベリングはまた、書き込みカウントビットに対するバランスのとれたグレイコード（ＢＧＣ）符号化を実行することによって、書き込みカウントビットに対して実行される。
【００４６】
図１は、本開示の様々な実施形態による、ウェアレベリングを実行するよう構成されるメモリシステム１００の例を示す図である。メモリシステム１００は、書き込みカウント１２５、ユーザビット１３０、及びＥＣＣビット１３５を格納するよう構成されるメモリ１０５を含み、これは、以下でさらに説明される。メモリシステム１００はまた、ＢＧＣモジュール１１０（本明細書でＢＧＣエンジンとも称される）、循環シフターモジュール１１５（本明細書で循環シフターとも称される）、及びＥＣＣモジュール１２０（本明細書でＥＣＣエンジンとも称される）を含む。以下でさらに説明されるように、ＢＧＣモジュール１１０、循環シフターモジュール１１５、及びＥＣＣモジュール１２０はそれぞれ、実行されるとき、メモリ１０５に対してきめ細かい方式のウェアレベリングを実行することをメモリシステム１００にさせるような、メモリシステム１００内に格納されるコンピュータ実行可能命令のセットであり得る。
【００４７】
メモリ１０５は、複数のメモリセルを有し、それらの各々は、データを格納するよう構成される最小の物理ユニットである。メモリ１０５内の各々のメモリセルは、任意の数のビットを格納するよう構成され得る。例えば、メモリ１０５内のメモリセルは、単一ビットのデータ、２ビットのデータ、又は４ビットのデータを格納するよう構成され得る。４ビットのデータの集合は、本明細書でニブルとも称される。
【００４８】
メモリ１０５内のメモリセルは、多くの異なるタイプのデータを格納するよう構成され得る。図１に示されるように、メモリ１０５は、ユーザビット１３０を格納するよう構成され、これは、ユーザデータのビットを参照する。メモリ１０５はまた、ＥＣＣビット１３５を格納するよう構成され、これは、ユーザビット１３０に対する誤り検出及び訂正を実行するのに用いるビットを参照する。
【００４９】
メモリ１０５が複数のコードワードに論理的に分割され得、複数のコードワードにおける各々のコードワードは、ユーザビット１３０のブロック（本明細書で複数のユーザビット１３０又は単にユーザビット１３０とも称される）及びユーザビット１３０に対応するＥＣＣビット１３５の両方を含む。図５及び図６を参照して以下でさらに説明されるように、ユーザビット１３０のブロックは、典型的に、メモリ１０５の第１の部分で格納されるが、ＥＣＣビット１３５のブロックは、典型的に、メモリ１０５の第２の部分で格納される。コードワードのユーザビット１３０及びＥＣＣビット１３５を説明するとき、ＥＣＣビット１３５は、ユーザビット１３０の対応するブロックと共に論理的に格納されるものとみなされ得る。しかしながら、ＥＣＣビット１３５は、実際には、ユーザビット１３０の対応するブロックから離れて不連続に格納され得る。
【００５０】
コードワード内のユーザビット１３０のブロックは、１又は複数の連続するメモリセル又は１又は複数の連続しないメモリセルでメモリ１０５の第１の部分内で物理的に格納され得る。ユーザビット１３０のブロックは、ユーザビット１３０のブロックを格納する１又は複数のメモリセルの位置を示す物理アドレスと関連してよい。ユーザビット１３０のブロックはまた、論理アドレスと関連してよく、これは、論理アドレスがユーザビット１３０のブロックを格納する１又は複数のメモリセルの位置を示すという点で物理アドレスと類似している。しかしながら、ユーザビット１３０のブロックの物理アドレスは時間と共に変更し得るが、ユーザビット１３０のブロックの論理アドレスは時間と共に変更しない。
【００５１】
ユーザビット１３０のブロックの物理アドレスは、ユーザビット１３０のブロックの物理アドレスがアクセスされた（書き込まれた又は読み出された）回数を示す整数値を指す書き込みカウント１２５と関連してよい。書き込みカウント１２５はまた、書き込みコマンド１５０が受信されて、ユーザビット１３０のブロックの物理アドレスに対して実行された回数を示す整数値を指し得る。図１によって示されるように、メモリ１０５は、ユーザビット１３０の様々なブロックの書き込みカウント１２５を離れて格納し得る。書き込みカウント１２５は、ユーザビット１３０の対応するブロックと共に論理的に格納されるものとしてみなされ得る。しかしながら、書き込みカウント１２５は、実際には、ユーザビット１３０の対応するブロックから物理的に離れて不連続に格納され得る。
【００５２】
ＥＣＣビット１３５は、１又は複数の連続するメモリセル又は１又は複数の連続しないメモリセルでメモリ１０５の第２の部分内で物理的に格納され得る。ＥＣＣビット１３５はまた、物理アドレス及び論理アドレスと関連してよい。いくつかの実施形態において、ユーザビット１３０及びＥＣＣビット１３５内のビットの各々は、時間と共に変更し得る対応する物理アドレス、又は同じままである論理アドレスを有する。
【００５３】
メモリ１０５は、カルコゲニド、ペロブスカイト、相変化材料、磁気バブル技術、カーボンナノチューブ等の低費用材料を用いる不揮発性ストレージ技術であるストレージクラスメモリ（ＳＣＭ）であり得る。例えば、メモリ１０５は、３次元（３Ｄ）クロスポイント（ＸＰｏｉｎｔ）メモリ、相変化ランダムアクセスメモリ（ＲＡＭ）、又は任意の抵抗変化型ＲＡＭ等のＳＣＭであり得る。メモリ１０５は、ＳＣＭの不揮発性の特性に起因して、恒久的に格納するよう構成され得る。メモリ１０５はまた、ＤＲＡＭと同様にビット可変であり、これにより、ユーザ又は管理者がビット単位でデータを変更することを可能にする。
【００５４】
しかしながら、ＤＲＡＭ及びディスクドライブとは異なって、メモリ１０５等のＳＣＭは限られた寿命を有し、その中で、メモリセルが消耗されてもはやデータを格納するために機能しなくなる前に、最大閾値数の処理のみがメモリセルに対して実行され得る。例えば、ＳＣＭは、もはやメモリセルがデータを格納するのに用いられることができなくなる前に、メモリセルに対する１０６から１０１２の処理をサポートすることのみが可能であり得る。
【００５５】
一部のメモリセルは他のメモリセルよりはるかに頻繁に書き込まれて読み出されるので、一部のメモリセルは他のメモリセルより速く消耗される。一部のセルが効果的に消耗されるが、他のセルが比較的消耗されていないとき、消耗されたセルの存在は、概して、メモリシステム１００の全体の性能を低下させる。消耗したメモリセルと関連している性能の劣化に加えて、消耗していない不十分な数のメモリセルが所望のデータを格納するのに利用可能であるとき、メモリシステム１００の全体の性能は、悪影響を受ける場合がある。臨界数の消耗したセルがメモリシステム１００内に存在するとき、多くの他のセルが比較的消耗されていないときでさえ、しばしば、メモリシステム１００を使用できないと考えられる場合がある。
【００５６】
メモリシステム１００内のメモリセルが公平でむらなく消耗される可能性を高めるべく、ウェアレベリング処理がしばしば実行される。ウェアレベリング処理は、同じデータが常に同じメモリセルで格納されないように、メモリ１０５内で周期的にデータの位置を変更することを含む。メモリセルの各々で格納されるデータを変更することによって、他のセルが消耗される前に特定のメモリセルがかなり消耗される可能性はより低くなる。
【００５７】
ウェアレベリングは、典型的には、データの論理アドレスを変更することなく、周期的にデータの物理アドレスを変更することによって実行される。図２を参照して以下でさらに説明されるように、例えば、ウェアレベリングは、ユーザビット１３０の論理アドレスを変更することなく、ユーザビット１３０の物理アドレスを変更することによって実行される。しかしながら、ウェアレベリングの典型的な方法は、ウェアレベリングの一回の反復の間に数千のビットが位置を変更する粗い方式でメモリ１０５に対して実行される。例えば、セルが不規則に消耗することを防止すべく、ウェアレベリングの一回の反復は、典型的には、１，０００（１Ｋ）ビット又は４，０００（４Ｋ）ビット等の数千のビットの位置を変更することを含む。しかしながら、そのようなウェアレベリングの粗い方法は、特定のメモリセルが消耗することを効率的に防止せず、ユーザビット１３０と関連しているＥＣＣビット１３５を考慮しない。
【００５８】
本明細書で開示される複数の実施形態は、書き込みカウント１２５の値に基づいて、ユーザビット１３０及びＥＣＣビット１３５の位置を変更することによって、きめ細かい方式でメモリ１０５対するウェアレベリングを実行することに向けられる。本明細書で開示される複数の実施形態は、ユーザビット１３０とＥＣＣビット１３５との間のビット（例えば、１ビット）又はニブル（例えば、４ビット）レベルでウェアレベリングを実行する。動作中、矢印１５３によって示されるように、メモリシステム１００は、ユーザから書き込みコマンド１５０を受信し得る。書き込みコマンド１５０は、メモリ１０５に書き込まれるユーザビット１３０及びユーザビット１３０を書き込むアドレスを含み得る。一実施形態において、書き込みコマンド１５０に含まれるアドレスは、書き込みコマンド１５０におけるユーザビット１３０を格納するよう構成されるメモリ１０５の第１の部分の物理アドレスであり得る。一実施形態において、書き込みコマンド１５０に含まれるアドレスは、ユーザビット１３０がメモリ１０５に格納され得る場所の位置を示すコードワード（ユーザビット１３０及び対応するＥＣＣビット１３５）の論理アドレスであり得る。
【００５９】
一実施形態において、矢印１５６によって示されるように、ＢＧＣモジュール１１０は、書き込みコマンド１５０を受信した後、書き込みコマンド１５０に含まれるアドレスに対応する書き込みカウント１２５を最初に取得する。ＢＧＣモジュール１１０は、その後、書き込みコマンド１５０を受信したことに応じて、書き込みカウント１２５を１だけインクリメントするよう構成される。図７を参照して以下でさらに説明されるように、書き込みカウント１２５をインクリメントした後、ＢＧＣモジュール１１０は、書き込みカウント１２５を格納するメモリ１０５のメモリセルの各々が実質的に等しい回数書き込まれるように、書き込みカウント１２５の書き込みカウントビットを符号化するよう構成される。
【００６０】
矢印１５９によって示されるように、メモリシステム１００は、書き込みカウント１２５をインクリメントしてＢＧＣ符号化した後、予め定められたメモリ位置で書き込みカウント１２５の書き込みカウントビットを格納するよう構成される。このようにして、ＢＧＣ符号化されてインクリメントされた書き込みカウント１２５は、循環シフターモジュール１１５によってアクセスされ得る。
【００６１】
ＥＣＣモジュール１２０は、書き込みコマンド１５０における対応するユーザビット１３０のＥＣＣビット１３５を計算するよう構成される。例えば、ＥＣＣモジュール１２０は、誤り訂正アルゴリズムを用いてＥＣＣビット１３５を計算するよう構成され得る。ＥＣＣビット１３５は、典型的には、送信及び格納を通じてユーザビット１３０に取り込まれる誤りを検出して訂正するのに用いられる。例えば、ＥＣＣモジュール１２０はまた、ＥＣＣビット１３５及び格納されたＥＣＣに基づいて、ユーザビット１３０の誤り訂正を実行するよう構成され得る。ＥＣＣモジュール１２０によって実行されるＥＣＣビット１３５計算及び誤り訂正メカニズムは、Ｗａｎｇ  Ｘｕｅｑｉａｎｇ他による「ＭＬＣ  ＮＯＲフラッシュメモリにおける誤り訂正のための高速２セルＢＣＨ複合器（Ａ  Ｈｉｇｈ−Ｓｐｅｅｄ  Ｔｗｏ−Ｃｅｌｌ  ＢＣＨ  Ｄｅｃｏｄｅｒ  ｆｏｒ  Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｎｇ  ｉｎ  ＭＬＣ  ＮＯＲ  Ｆｌａｓｈ（登録商標）  Ｍｅｍｏｒｉｅｓ）」と題されたＩＥＥＥ文献でさらに説明される。
【００６２】
矢印１６１によって示されるように、循環シフターモジュール１１５は、ＥＣＣモジュール１２０によって計算されたＥＣＣビット１３５を取得し得る。循環シフターモジュール１１５は、その後、書き込みコマンド１５０及び計算されたＥＣＣビット１３５からユーザビット１３０を含むコードワードの特定のビットを格納するためにメモリセルの位置を決定するよう構成される。一実施形態において、図３〜図６を参照して以下にさらに説明されるように、循環シフターモジュール１１５は、回転された位置でユーザビット１３０及び対応するＥＣＣビット１３５を格納してメモリ１０５に対するウェアレベリングを実行するよう構成される。矢印１６４によって示されるように、循環シフターモジュール１１５は、メモリ１０５の第１の部分及びメモリ１０５の第２の部分の両方内の特定のメモリセルにユーザビット１３０の個々のビット又はニブルを書き込むよう構成される。同様に、矢印１６７によって示されるように、循環シフターモジュール１１５は、メモリ１０５の第１の部分及びメモリ１０５の第２の部分の両方内の特定のメモリセルにＥＣＣビット１３５の個々のビット又はニブルを書き込むよう構成される。
【００６３】
一実施形態において、図５及び図６を参照して以下でさらに説明されるように、循環シフターモジュール１１５は、書き込みカウント１２５に基づいて計算される循環シフターオフセットを用いて、コードワードのユーザビット１３０及びＥＣＣビット１３５を格納するためのメモリセルの位置を決定するよう構成される。例えば、ユーザビット１３０を格納するよう構成されるメモリ１０５の第１の部分に対する書き込みカウント１２５が１の循環シフターオフセットに対応すると仮定すると、循環シフターモジュール１１５は、メモリ１０５の第１の部分及びメモリ１０５の第２の部分内のユーザビット１３０及びＥＣＣビット１３５のストレージを１だけ回転させる。そのような場合において、メモリ１０５は、全てのユーザビット１３０及びＥＣＣビット１３０を１つのメモリセルだけ右にシフトするよう構成される。この場合、コードワードの最後のビット又はニブルがシフトされてコードワードの第１のビットが配置された位置で格納される。このようにして、書き込みカウント１２５は、循環シフターモジュール１１５がユーザビット１３０及びＥＣＣビット１３５のストレージを可変量だけ回転させるよう命令する様々な異なる循環シフターオフセットに対応し得る。
【００６４】
様々な実施形態によれば、ＢＧＣモジュール１１０、循環シフターモジュール１１５、及びＥＣＣモジュール１２０が共働してユーザビット１３０及び対応するＥＣＣビット１３５を含むコードワードの特定のビット又はニブルを格納するメモリセルに対するきめ細かいウェアレベリングを実装する。きめ細かいウェアレベリングは、数千のビットのデータの大きいブロックよりはむしろ、データの特定のビット又はニブルを格納する位置を変更し、メモリ１０５内のメモリセルの寿命を制御するより詳細で正確な方法をもたらす。
【００６５】
図２は、本開示の様々な実施形態による、メモリ内のメモリセル２１０の物理アドレス２０６と論理アドレス２０３との間の関係を示す図である。表２００Ａ−Ｂは、ユーザビット１３０及びＥＣＣビット１３５を含み得るコードワード２２０に対する論理アドレス２０３の列と、コードワード２２０に対する物理アドレス２０６の列とを含む。表２００Ａ−Ｂは、ウェアレベリングがメモリセル２１０Ａ−Ｄに対して実行される前後でどのようにユーザビット１３０及びＥＣＣビット１３５が特定のメモリセル２１０Ａ−Ｄ内に格納され得るかを示す。表２００Ａ−Ｂの右のブロック図は、ウェアレベリングがメモリセル２１０Ａ−Ｄに対して実行される前後の、メモリ１０５内の特定のメモリセル２１０Ａ−Ｄにおけるコードワード２２０内のビットのストレージを示す。
【００６６】
図２によって示されるように、メモリセル２１０Ａは０の物理アドレス２０６を有し得、メモリセル２１０Ｂは１の物理アドレス２０６を有し得、メモリセル２１０Ｃは２の物理アドレス２０６を有し得、メモリセル２１０Ｄはｎの物理アドレス２０６を有し得る。図２に示される例について、コードワード２２０の第１のビットが０の論理アドレス２０３を有するユーザビット１３０であり、コードワード２２０の第２のビットが１の論理アドレス２０３を有するユーザビット１３０であり、コードワード２２０の第３のビットが３の論理アドレス２０３を有するユーザビット１３０であり、コードワード２２０の第４のビットが４の論理アドレス２０３有するＥＣＣビット１３５であることを想定する。ウェアレベリングがコードワード２２０に対して実行されるとき、コードワード２２０内のビットの実際の物理的な位置を示す物理アドレス２０６が変更し得るが、論理アドレス２０３は同じままである。
【００６７】
特に、表２００Ａは、ウェアレベリングがメモリ１０５に対して実行される前の、コードワード２２０内のビット（又はニブル）の論理アドレス２０３と、コードワード２２０内のビット又はニブルを格納するメモリセル２１０Ａ−Ｄを示す物理アドレス２０６との間のデフォルトマッピングを示す。表２００Ａによって示されるように、デフォルトでは、コードワード２２０内のビットに対する論理アドレス２０３及び物理アドレス２０６は、一致する又は同じである。表２００Ａは、０の論理アドレス２０３に対応するユーザビット１３０が０の物理アドレス２０６を有するメモリセル２１０Ａで格納され、１の論理アドレス２０３に対応するユーザビット１３０が１の物理アドレス２０６を有するメモリセル２１０Ｂで格納され、２の論理アドレス２０３に対応するユーザビット１３０が２の物理アドレス２０６を有するメモリセル２１０Ｃで格納され、ｎの論理アドレス２０３に対応するＥＣＣビット１３５がｎの物理アドレス２０６を有するメモリセル２１０Ｄで格納されることを示す。０−２の論理アドレス２０３に対応するユーザビット１３０がメモリ１０５の第１の部分で格納され得るが、ｎの論理アドレス２０３に対応するＥＣＣビット１３５がメモリ１０５の第２の部分で格納され得る。
【００６８】
ウェアレベリングが実行された後、矢印２２２によって示されるように、コードワード２２０内のビットの物理アドレス２０６が特定の数のメモリセル２１０Ａ−Ｄだけ変更（例えば、シフト又は回転）する。図２によって示されるように、コードワード２２０内のビットが、１つのメモリセル２１０だけ右に回転する。表２００Ｂは、０の論理アドレス２０３に対応するユーザビット１３０が、ここで、１の物理アドレス２０６を有するメモリセル２１０Ｂで格納され、１の論理アドレス２０３に対応するユーザビット１３０が、ここで、２の物理アドレス２０６を有するメモリセル２１０Ｃで格納され、２の論理アドレス２０３に対応するユーザビット１３０が、ここで、ｎの物理アドレス２０６を有するメモリセル２１０Ｄで格納され、ｎの論理アドレス２０３に対応するＥＣＣビット１３５が、ここで、０の物理アドレス２０６を有するメモリセル２１０Ａで格納されることを示す。このようにして、ウェアレベリングがコードワード２２０内で実行された後、コードワード２２０内のビットの各々の物理アドレス２０６が変更するが、コードワード２２０内のビットの各々の論理アドレス２０３は同じままである。
【００６９】
４つのメモリ２１０Ａ−Ｄのセルのみがコードワード２２０を格納するものとして示されるが、コードワード２２０が任意の数のメモリセル２１０Ａ−Ｄ内に格納される任意の数のビットを含み得ることが理解されるべきである。メモリセル２１０Ａ−Ｄの各々はまた、任意の数のユーザビット１３０又はＥＣＣビット１３５を格納し得る。図２におけるメモリセル２１０Ａ−Ｄの各々がユーザビット１３０又はＥＣＣビット１３５内に１ビットを格納することが示されるが、図２におけるメモリセル２１０Ａ−Ｄの各々が、その代わりに２ビット又は１ニブルを格納するよう構成されてもよいことが理解されるべきである。メモリセル２１０Ａ−Ｄの各々が連続して隣接するものとして図２に示されるが、メモリセル２１０Ａ−Ｄの各々が離れて不連続であってよいことが理解されるべきである。
【００７０】
図２はコードワード２２０内のビットが単一のメモリセル２１０だけシフトすることを示すが、いくつかの実施形態において、コードワード２００内のビットはコードワード２２０の書き込みカウント１２５に応じて任意の数のメモリセル２１０だけシフトしてよく、これは以下の図５及び図６を参照してさらに説明される。その数だけコードワード２２０内のウェアレベリングを実行するメモリセル２１０の数は、循環シフターオフセットとも称され、以下の図４を参照してさらに説明される。
【００７１】
理解されるべきであるように、表２００Ａ−Ｂは、実際には、メモリシステム１００で格納される必要がなくてよい。代わりに、メモリシステム１００は、ユーザビット１３０の論理アドレス２０３と物理アドレス２０６との間のマッピングを格納するのに他のデータ構造を用い得る。図２によって示されるように、本明細書で開示される複数の実施形態は、ビットレベル基準又はニブルレベル基準でウェアレベリングを実行することを可能にする。本明細書で開示される複数の実施形態は、図３を参照して以下で説明されるように、対応するユーザビット１３０よりはるかに頻繁に変更し得るＥＣＣビット１３５を格納するメモリセル２１０の消耗に対処する。
【００７２】
図３は、本開示の様々な実施形態による、コードワード２２０のＥＣＣビット１３５とコードワード２２０のユーザビット１３０との間の差を示す図３００である。特に、図３００は、コードワード２２０Ａ−Ｃにおけるユーザビット１３０Ａ−Ｃ及びＥＣＣビット１３５Ａ−Ｃがコードワード２２０Ａ−Ｃに対して実行される２つの書き込みコマンド１５０に応じて更新されることを示す。
【００７３】
コードワード２２０Ａは、コードワード２２０Ａが「００００００００００００００００」のユーザビット１３０Ａを及び１３５Ａ「００」の対応するＥＣＣビットを含むメモリセル２１０の初期設定を表し得る。一実施形態において、ユーザビット１３０Ａがメモリ１０５の第１の部分で格納されてよく、一方で、ＥＣＣビット１３５Ａがメモリ１０５の第２の部分で格納される。メモリ１０５の第１の部分及びメモリ１０５の第２の部分は、メモリ１０５内の不連続で離れた位置であり得る。
【００７４】
第１の書き込みコマンド１５０がコードワード２２０Ａに対して実行されて、「０００００００００００００００１」のユーザビット１３０Ｂ及び「８３」の対応するＥＣＣビット１３５Ａを含むコードワード２２０Ｂを生成し得る。コードワード２２０Ａと同様に、ユーザビット１３０Ｂがメモリ１０５の第１の部分に書き込まれ得、ＥＣＣビット１３５Ｂがメモリ１０５の第２の部分に書き込まれ得る。
【００７５】
書き込み割合は、変更したビットの数とビットの総数との比率を指す。ユーザビット１３０Ａ−Ｃの書き込み割合は、ＥＣＣビット１３５Ａ−Ｃに対する書き込み割合より低いことが多い。図３によって示されるように、１６個のユーザビット１３０Ｂのうちの１ビットのみが第１の書き込みコマンド１５０に応じて変更され、一方で、ＥＣＣビット１３５Ｂの両方が第１の書き込みコマンド１５０に応じて変更される。したがって、ＥＣＣビット１３５Ｂは、第１の書き込みコマンド１５０に応じて、ユーザビット１３０Ｂより高い書き込み割合（例えば、更新されたビットの数／総ビット数）を有する。
【００７６】
第２の書き込みコマンド１５０がコードワード２２０Ｂに対して実行されて、「０００００００００００００００３」のユーザビット１３０Ｃ及び「０６」の対応するＥＣＣビット１３５Ｃを含むコードワード２２０Ｃを生成し得る。コードワード２２０Ａ−Ｂと同様に、ユーザビット１３０Ｃがメモリ１０５の第１の部分に書き込まれ得、ＥＣＣビット１３５Ｃがメモリ１０５の第２の部分に書き込まれ得る。
【００７７】
コードワード２２０Ｂと同様に、１６個のユーザビット１３０Ｃのうちの１ビットのみが第２の書き込みコマンド１５０に応じて変更され、一方で、ＥＣＣビット１３５Ｃの両方が第１の書き込みコマンド１５０に応じて変更される。したがって、ＥＣＣビット１３５Ｃはまた、第２の書き込みコマンド１５０に応じて、ユーザビット１３０Ｃより高い書き込み割合（例えば、更新されたビットの数／総ビット数）を有する。
【００７８】
メモリ１０５内のデータのストレージを管理するＥＣＣビット１３５Ａ−Ｃ等の制御ビットの性質は、制御ビットが実際のユーザビット１３０Ａ−Ｃよりはるかに頻繁に変更するようなものである。しかしながら、ＥＣＣビット１３５Ａ−Ｃ等の制御ビットを格納するメモリセル２１０は、典型的には、これらのメモリセル２１０に発生する場合がある増加した消耗に対処すべくウェアレベリングされない。上記及び以下で説明されるように、本明細書で開示される複数の実施形態は、ＥＣＣビット１３５Ａ−Ｃを格納するメモリセル２１０に対して発生した増加した消耗に対処すべく、ユーザビット１３０Ａ−Ｃ及びＥＣＣビット１３５Ａ−Ｃに対してウェアレベリングを実行する。
【００７９】
理解されるべきであるように、各々のメモリセル２１０がデータのビットを格納するような方法で図３００が説明される。しかしながら、本明細書で説明される複数の実施形態が、各々のメモリセル２１０が２ビットのデータ、１ニブルのデータ、又は任意の他の数のビットのデータのいずれかを格納するように実装され得ることが理解されるべきである。
【００８０】
図４は、本開示の様々な実施形態による、ウェアレベリングの方法４００を示す図である。図４は、ユーザビット１３０及びＥＣＣビット１３５、並びにコードワード２２０内のユーザビット１３０を格納するよう構成されたメモリ１０５の第１の部分の対応する書き込みカウント１２５を含むコードワード２２０を示す。理解されるべきであるように、ユーザビット１３０、ＥＣＣビット１３５、及び書き込みカウント１２５が連続して互いに隣接して格納されるものとして図４に示されるが、ユーザビット１３０、ＥＣＣビット１３５、及び書き込みカウント１２５が、不連続でメモリ１０５の離れた位置で格納されてよい。ユーザビット１３０、ＥＣＣビット１３５、及び書き込みカウント１２５内のビットはまた、メモリ１０５内で連続又は不連続に格納され得る。一実施形態において、ユーザビット１３０及びＥＣＣビット１３５が共に連続して論理的に格納されてよく、ユーザビット１３０及びＥＣＣビット１３５内のビットはまた、共に連続して論理的に格納されてよい。
【００８１】
方法４００は、ウェアレベリング４０５（本明細書で循環シフトとも称される）が実行されたときのユーザビット１３０、ＥＣＣビット１３５、及び書き込みカウント１２５の位置を示す。一実施形態において、ウェアレベリング４０５を実行することは、書き込みカウントに基づいて計算され、図５及び図６を参照して以下でさらに説明される循環シフターオフセットに従って、ユーザビット１３０及びＥＣＣビット１３５内のビットの各々を格納する物理アドレスをシフトすることを含む。本実施形態において及び図４によって示されるように、ユーザビット１３０及びＥＣＣビット１３５は、ウェアレベリング４０５を実行した後、異なるメモリセル２１０で格納されるべく、位置を変更（例えば、回転又はシフト）する。さらに、ウェアレベリング４０５を実行している間のコードワード２２０内のビットの移動の詳細が、図５及び図６を参照してさらに以下で説明される。
【００８２】
しかしながら、書き込みカウント１２５の位置は同じままであり、ウェアレベリング４０５を実行した後に変更しない。図７を参照して以下でさらに説明されるように、書き込みカウント１２５を格納するメモリセルが、ＢＧＣモジュール１１０によってさらに管理され、書き込みカウント１２５内のビットを格納する特定のメモリセルが他のメモリセルの前に消耗することを防止する。
【００８３】
図５は、本開示の様々な実施形態による、ウェアレベリングを実行する方法５００の例を示す図である。具体的には、方法５００は、書き込みカウント１２５に従ってウェアレベリングを実行した後、どのようにコードワード２２０がメモリセル２１０Ａ−Ｒに格納されるかを示す。メモリ１０５に格納されるコードワード２２０又はデータは、１６個のユーザビット１３０（「０００００００００００００００１」）及び２個のＥＣＣビット１３５（「８３」）を含む。ユーザビット１３０は、書き込みコマンド１５０で受信され、書き込みコマンド１５０から抽出され得る。ＥＣＣビット１３５は、ユーザビット１３０に基づいて、ＥＣＣモジュール１２０によって計算され得る。
【００８４】
コードワード２２０は、メモリ１０５の第１の部分５０５及びメモリ１０５の第２の部分５１０に格納され得る。第１の部分５０５及び第２の部分５１０は、連続して互いに隣接してよく、又は連続しないで互いから離れてよい。典型的には、ユーザビット１３０が第１の部分５０５に格納され、一方で、ＥＣＣビット１３５が第２の部分５１０に格納される。本明細書で開示される複数の実施形態は、ユーザビット１３０が第２の部分５１０に格納され、ＥＣＣビット１３５が第１の部分５０５に格納されることを可能にする。
【００８５】
ユーザビット１３０を備え書き込みコマンド１５０を受信し、対応するＥＣＣビット１３５を計算すると、ユーザビット１３０が格納されるメモリ１０５の第１の部分５０５のアドレスに対する書き込みカウント１２５が、１だけインクリメントされ得る。一実施形態において、メモリ１０５の様々なブロックに対する書き込みカウント１２５が、ユーザビット１３０を格納するメモリ１０５の第１の部分５０５及びＥＣＣビット１３５を格納するメモリ１０５の第２の部分５１０から離れたメモリ１０５の第３の部分で格納され得る。例示的な方法５００に示されるように、ユーザビット１３０を格納するメモリ１０５の第１の部分５０５に対する書き込みカウント１２５が、書き込みコマンド１５０を受信した後、１だけインクリメントされて１０２４になる。図７を参照して以下でさらに説明されるように、書き込みカウント１２５は、メモリ１０５に格納される前に、ＢＧＣ符号化を用いてさらに符号化される。
【００８６】
ユーザビット１３０が格納されるメモリ１０５の第１の部分５０５の書き込みカウント１２５をインクリメントした後、循環シフターモジュール１１５は、メモリセル２１０Ａ−Ｒを決定し得る。ここで、ユーザビット１３０及びＥＣＣビット１３５が書き込みカウント１２５に基づいて格納される。図５のコードワード２２０によって示されるように、デフォルトでは、同じシーケンスで、ユーザビット１３０がメモリ１０５の第１の部分５０５のメモリセル２１０Ａ−Ｐで格納されてよく、ＥＣＣビット１３５がメモリ１０５の第２の部分５１０のメモリセル２１０Ｑ−Ｒで格納されてよい。上記のように、メモリ１０５の第１の部分５０５及びメモリ１０５の第２の部分５１０は、メモリ１０５内のメモリセル２１０Ａ−Ｒの連続しないブロックであり得る。
【００８７】
しかしながら、上記のように、メモリセル２１０Ａ−Ｒが異なる回数書き込まれてアクセスされる場合があり、これは、他のメモリセル２１０Ａ−Ｒの前に消耗する特定のメモリセル２１０Ａ−Ｒをもたらす。メモリ１０５のメモリセル２１０Ａ−Ｒのこの等しくない消耗を防止すべく、循環シフターモジュール１１５は、循環シフターオフセットに基づいてどのようにビットがメモリ１０５内の第１の部分５０５及び第２の部分５１０で格納されるかを調整することによって、ウェアレベリングを実行するよう構成される。循環シフターオフセットは、メモリ１０５の第１の部分５０５及び第２の部分５１０内のメモリセル２１０Ａ−Ｒの数を表す整数値であって、メモリ１０５の第１の部分５０５及び第２の部分５１０内のメモリセル２１０Ａ−Ｒにユーザビット１３０及びＥＣＣビット１３５を書き込む前にその整数値だけユーザビット１３０及びＥＣＣビット１３５をシフトする。
【００８８】
一実施形態において、循環シフターオフセットは、書き込みカウント１２５の関数であり、書き込みコマンドと読み出しコマンドとの間のデータに適用される。いくつかの実施形態において、循環シフターオフセットは、Ｉｎｔｅｇｅｒ（書き込みカウント１２５／Ｋ）に等しい。ここで、Ｋは書き込みカウント１２５と関連している予め定められた定数である。いくつかの実施形態において、循環シフターオフセットは、書き込みカウント１２５の関数である任意の値であり得る。例えば、循環シフターオフセットは、Ｉｎｔｅｇｅｒ（ａ×ｌｏｇ（書き込みカウント）＋ｂ）に等しくてよい。ここで、ａ及びｂは予め定められた定数である。
【００８９】
図５に示される例示的な方法５００においてＫ＝１０２４と仮定する。この場合、循環シフターモジュール１１５は、循環シフターオフセットが１（Ｉｎｔｅｇｅｒ（１０２４／１０２４））であると決定するよう構成される。循環シフターモジュール１１５は、その後、循環シフターオフセットが１であるので、ユーザビット１３０及びＥＣＣビット１３５の格納が、１つのメモリセル２１０Ａ−Ｒだけ右にシフトされるべきであると決定し得る。
【００９０】
図５に示されるように、最後のビット「３」がメモリセル２１０Ａの位置に移動するように、循環シフターモジュール１１５は、全てのユーザビット１３０及びＥＣＣビット１３５を１つのメモリセル２１０Ａ−Ｒだけ右にシフトする。メモリセル２１０Ａは、デフォルトでは、第１のユーザビット１３０「０」を格納するが、代わりに、循環シフターモジュール１１５によって実行されたウェアレベリングに起因してＥＣＣビット１３５「３」を格納する。同様に、メモリセル２１０Ｂ−Ｑは、１つのメモリセルだけ右にシフトされたユーザビット１３０を格納し、メモリセル２１０Ｒは、循環シフターモジュール１１５によって実行されたウェアレベリングに起因して、ＥＣＣビット１３５「４」の代わりにＥＣＣビット１３５「８」を格納する。
【００９１】
いくつかの実施形態において、循環シフターモジュール１１５は、ビットレベル、ニブルレベル、分数ニブルレベル、又は複数ニブルレベルの循環シフターオフセットに従って、ユーザビット１３０及びＥＣＣビット１３５の格納を回転するよう構成される。複数ニブルレベルの循環シフターオフセットの例は、循環シフターオフセットが、例えば、２、４、又は８のニブル等の倍数に等しいとき、書き込みカウント１２５が１０２４であるときを含む。分数ニブルレベルの循環シフターオフセットの例は、循環シフターオフセットが、例えば、ニブルの１／４又は１／２等の分数に等しいとき、書き込みカウント１２５が１０２４であるときを含む。このようにして、循環シフターモジュール１１５は、ニブルレベル、分数ニブルレベル、又は複数ニブルレベルでユーザビット１３０及びＥＣＣビット１３５を格納する特定のメモリセル２１０Ａ−Ｒを決定するよう構成される。
【００９２】
典型的には、ユーザビット１３０がメモリ１０５の第１の部分５０５に格納され、ＥＣＣビット１３５がメモリ１０５の第２の部分５１０に格納されるが、本明細書で開示されるウェアレベリングの複数の実施形態は、ＥＣＣビット１３５がメモリ１０５の第１の部分５０５及びメモリ１０５の第２の部分５１０に格納されることを可能にする。同様に、本明細書で開示されるウェアレベリングの複数の実施形態は、ユーザビット１３０がメモリ１０５の第２の部分５１０及びメモリ１０５の第１の部分５０５に格納されることを可能にする。図５に示されるこの例は、循環シフターオフセットが１ビットであることを示すが、循環シフターオフセットが、別の例では、１ニブル、複数のビット、又は複数のニブルであり得ることが理解されるべきである。
【００９３】
図６は、本開示の様々な実施形態による、ウェアレベリングを実行する方法６００の他の例を示す図である。方法６００は、メモリ１０５の第１の部分５０５の書き込みカウント１２５が１０２４の代わりに２０４８である点を除いて方法５００と同様である。ユーザビット１３０を備える書き込みコマンド１５０を受信し、ユーザビット１３０に基づいてＥＣＣビット１３５を計算した後、２０４８の書き込みカウント１２５が計算される。循環シフターオフセットを決定するのに用いられる２０４８の書き込みカウント１２５はまた、書き込みコマンド１５０の受信に応じて１だけインクリメントされ得る。２０４８の書き込みカウント１２５は、メモリ１０５の第１の部分５０５及びメモリ１０５の第２の部分５１０から離れてメモリ１０５に格納され得る。
【００９４】
一実施形態において、循環シフターモジュール１１５は、書き込みカウント１２５に基づいて、ユーザビット１３０及びＥＣＣビット１３５の各々を格納するメモリセル２１０Ａ−Ｒを決定し得る。図５を参照して上記のように、デフォルトでは、コードワード２２０によって示されるように、同じシーケンスで、ユーザビット１３０がメモリ１０５の第１の部分５０５のメモリセル２１０Ａ−Ｐで格納されてよく、ＥＣＣビット１３５がメモリ１０５の第２の部分５１０のメモリセル２１０Ｑ−Ｒで格納されてよい。しかしながら、メモリ１０５の第１の部分５０５の２０４８の書き込みカウント１２５は比較的高いので、ウェアレベリングは計算された循環シフターオフセットに基づいて実行され得る。
【００９５】
図５を参照して上記のように、循環シフターオフセットが様々な方法で計算され得る。循環シフターオフセットがＩｎｔｅｇｅｒ（書き込みカウント１２５／Ｋ）に基づいて再び計算されることを想定する。ここで、Ｋ＝２０４８であり、循環シフターオフセットが２に等しくてよい。循環シフターモジュール１１５は、その後、循環シフターオフセットが２であるので、ユーザビット１３０及びＥＣＣビット１３５の格納が、２つのメモリセル２１０Ａ−Ｒだけ右にシフトされるべきであると決定し得る。
【００９６】
図６に示されるように、最後のビット「３」がメモリセル２１０Ｂの位置に移動し、最後から２番目のビット「８」がメモリセル２１０Ａの位置に移動するように、循環シフターモジュール１１５は、全てのユーザビット１３０及びＥＣＣビット１３５を２つのメモリセル２１０Ａ−Ｒだけ右にシフトする。メモリセル２１０Ａ−Ｂは、デフォルトでは、第１の及び第２のユーザビット１３０「００」を格納するが、代わりに、循環シフターモジュール１１５によって実行されたウェアレベリングに起因してＥＣＣビット１３５「３」及びユーザビット１３０「０」を格納する。同様に、メモリセル２１０Ｂ−Ｑは、１つのメモリセルだけ右にシフトされたユーザビット１３０を格納する。メモリセル２１０Ｑが「１」のユーザビット１３０を格納し、メモリセル２１０Ｒが「８」のＥＣＣビット１３５を格納する。
【００９７】
図５及び図６によって示されるように、書き込みカウント１２５及び定数Ｋは、循環シフターオフセットを計算するのに用いられる主な係数であり、これは、メモリセル２１０Ａ−Ｒの数に対応し、そのメモリセル２１０Ａ−Ｒの数だけメモリ１０５の第１の部分５０５及び第２の部分５１０内のユーザビット１３０及びＥＣＣビット１３５をシフトする。本明細書で開示されるウェアレベリングの複数の実施形態は、ＥＣＣビット１３５がメモリ１０５の第１の部分５０５及びメモリ１０５の第２の部分５１０に格納されることを可能にする。同様に、本明細書で開示されるウェアレベリングの実施形態は、ユーザビット１３０がメモリ１０５の第２の部分５１０及びメモリ１０５の第１の部分５０５に格納されることを可能にする。したがって、本明細書で開示されるウェアレベリングの複数の実施形態は、メモリセル２１０Ａ−Ｒの寿命を延ばし、したがって、メモリ１０５全体の寿命を延ばす。本明細書で開示されるウェアレベリングの複数の実施形態はまた、ビット又はニブルを格納するためのメモリ１０５内の位置がデータの大きいブロックの位置を変更する代わりに変更されるきめ細かいウェアレベリングが実行されることを可能にする。
【００９８】
図７は、本開示の様々な実施形態による、時間（ｔ）と共にメモリ１０５の第１の部分５０５の書き込みカウント１２５を格納するメモリセル７１０に対するウェアレベリングを実行する方法７００の例を示す図である。図１を参照して上記のように、ＢＧＣモジュール１１０は、書き込みコマンド１５０に含まれるユーザビット１３０が書き込まれるべきであるメモリ１０５の第１の部分５０５の書き込みカウント１２５を取得する。書き込みカウント１２５を取得した後、ＢＧＣモジュール１１０は、メモリ１０５の第１の部分５０５の書き込みカウント１２５をインクリメントし得る。図７の左側のボックス７２０は、書き込みコマンド１５０を受信することに応じて時間と共にインクリメントされるメモリ１０５の第１の部分５０５の書き込みカウント１２５を表す。図７の右側のボックス７２５は、書き込みカウント１２５に対してインクリメント及びＢＧＣ符号化を実行した後のメモリ１０５の第１の部分５０５の書き込みカウント１２５を表す。
【００９９】
一実施形態において、書き込みカウント１２５内の書き込みカウントビットが実質的に均等な方式でメモリセル７１０に書き込まれるように、ＢＧＣモジュール１１０は、書き込みカウント１２５に対してＢＧＣ符号化を実行し、書き込みカウント１２５を再符号化するよう構成される。このような訳で、ＢＧＣモジュール１１０は、ＢＧＣ符号化に従って書き込みカウントビットに対してウェアレベリングを実行し、書き込みカウントビットが実質的等しい回数書き込まれ、及び／又は読み出されることを保証する。
【０１００】
ボックス７２０及びボックス７２５の両方において、縦の列は、時間と共に書き込みカウント１２５がインクリメントされるような書き込みカウント１２５のビット（又はニブル）を表す。ボックス７２０及びボックス７２５内の各々の列は、経時的な書き込みカウント１２５への更新を表す。横の列は、最下位ビット７０３から最上位ビット７０６までの書き込みカウント１２５内の個々のビット（又はニブル）を表す。図７に示されるように、ボックス７２０及びボックス７２５の上の行は、書き込みカウント１２５の最下位ビット７０３を表し、一方で、ボックス７２０及びボックス７２５の下の行は、書き込みカウント１２５の最上位ビット７０６を表す。
【０１０１】
ボックス７２０によって示されるように、書き込みカウント１２５の最下位ビット７０３は、書き込みカウント１２５がインクリメントされるたびに変更し、一方で、書き込みカウント１２５の最上位ビット７０６は、一度だけ変更する。最下位ビット７０３と最上位ビット７０６との間におけるビットはまた、均等でない方式で書き込まれ、及び／又は読み出される。このようにして、書き込みカウント１２５に対してＢＧＣ符号化が実行される前に、書き込みカウント１２５内の書き込みカウントビットは、これらのビットを格納するメモリセル７１０を均等でない方式で消耗させる、均等でない方式で変更される。
【０１０２】
いくつかの実施形態によれば、ＢＧＣモジュール１１０は、書き込みカウント１２５をメモリ１０５の第３の部分に格納する前に、書き込みカウント１２５内のビットに対してＢＧＣ符号化を実行する。ＢＧＣ符号化を実行することは、メモリセル７１０の各々が実質的に均等な方式で書き込まれ、及び／又は読み出されるように、書き込みカウント１２５のビットの各々を格納するメモリセル７１０に対処すべく、書き込みカウント１２５のビットを変更することを指す。
【０１０３】
一実施形態において、ＢＧＣモジュール１１０が書き込みカウント１２５内のビットに対してＢＧＣ符号化を実行した後、書き込みカウント１２５内のビットは、より均等な方式でインクリメントした後、時間と共に変更する。ボックス７２５によって示されるように、最下位ビット７０３は４回変更し、一方で、最上位ビット７０６は３回変更する。このようにして、書き込みカウント１２５内のビットに対してＢＧＣ符号化を実行した後、最下位ビット７０３を格納するメモリセル７１０が、それほど頻繁に書き込まれず、最上位ビット７０６を格納するメモリセル７１０がより頻繁に書き込まれる。最下位ビット７０３と最上位ビット７０６との間におけるビットを格納するメモリセル７１０はまた、ＢＧＣ符号化を実行した後、より均等な方式で書き込まれる。このようにして、書き込みカウント１２５内のビットに対してＢＧＣ符号化を実行することによって、ビットがより均等な方式で更新されることを可能にする。
【０１０４】
図８は、本開示の様々な実施形態による、メモリシステム８００の実施形態の図である。メモリシステム８００は、図１に示されるメモリシステム１００と同様であり得る。メモリシステム８００は、本明細書で説明されたウェアレベリングメカニズムを実装及び／又はサポートするよう構成され得る。メモリシステム８００が単一ノードに実装されてよく、又はメモリシステム８００の機能が複数のノードに実装されてよい。当業者は、用語「メモリシステム」が広範囲のデバイスを包含し、メモリシステム８００が単に一例に過ぎないことを認識するだろう。メモリシステム８００が説明の明確性のために含まれるが、本開示の適用を特定のメモリシステムの実施形態又はメモリの実施形態のクラスに限定することを決して意味するものではない。本開示で説明された少なくともいくつかの特徴及び／又は方法が、メモリシステム８００等のネットワーク装置又はモジュールに実装され得る。例えば、本開示における特徴及び／又は方法が、ハードウェア、ファームウェア、及び／又はハードウェア上で動作するようインストールされたソフトウェアを用いて実装され得る。図８に示されるように、メモリシステム８００は、１又は複数の入口ポート８１０、データを受信するための受信器ユニット（Ｒｘ）８２０、データを処理するための少なくとも１つのプロセッサ、論理ユニット、又は中央演算装置（ＣＰＵ）８３０、データを送信するための送信器ユニット（Ｔｘ）８４０、１又は複数の出口ポート６５０、及びデータを格納するためのメモリ１０５を備える。
【０１０５】
プロセッサ８３０は、１又は複数のマルチコアプロセッサを備え得、図１で説明されたメモリと同様に、データストア、バッファ等として機能し得るメモリ１０５に連結され得る。プロセッサ８３０は、汎用プロセッサとして実装されてよく、又は、１又は複数の特定用途向け集積回路（ＡＳＩＣ）及び／又はデジタルシグナルプロセッサ（ＤＳＰ）の一部であってよい。プロセッサ８３０は、プロセッサ８３０によって実行可能である各々のソフトウェア命令である、循環シフターモジュール１１５及びＢＧＣモジュール１１０を備え得る。そのため、循環シフターモジュール１１５と、ＢＧＣモジュール１１０と、関連方法及びシステムとを包含することは、メモリシステム８００の機能に対する改善を提供する。さらに、循環シフターモジュール１１５及びＢＧＣモジュール１１０は、特定の物品（例えば、ネットワーク）を異なる状態に変換することをもたらす。代替的な実施形態において、循環シフターモジュール１１５及びＢＧＣモジュール１１０は、プロセッサ８３０によって実行され得るメモリ１０５に格納された命令として実装され得る。
【０１０６】
メモリ１０５は、図１で説明されたメモリ１０５と同様にストレージクラスメモリであり得る。メモリ１０５は、コンテンツを一時的に格納するためのキャッシュ、例えば、ＲＡＭを備え得る。さらに、メモリ１０５は、コンテンツを比較的長く格納するための長期記憶ストレージ、例えば、ソリッドステートドライブ（ＳＳＤ）を備え得る。例えば、キャッシュ及び長期記憶ストレージは、ＤＲＡＭ、ＳＣＭ、ＳＳＤ、ハードディスク、又はそれらの組み合わせを含み得る。メモリ１０５は、本明細書で説明されたように、書き込みカウント１２５、ユーザビット１３０、ＥＣＣビット１３５、及び循環シフターオフセット７７０を格納するよう構成され得る。
【０１０７】
メモリシステム８００に対する実行可能命令をプログラミング及び／又はロードすることによって、プロセッサ８３０及び／又はメモリ１０５のうちの少なくとも１つが変更され、メモリシステム８００を本開示によって教示される新たな機能を有する特定のマシン又は装置、例えば、マルチコア転送アーキテクチャに部分的に変換することが理解される。電気工学及びソフトウェア工学の技術では基本的なことであるが、実行可能なソフトウェアをコンピュータにロードすることによって実装され得る機能は、周知の設計ルールによってハードウェア実装に変換され得る。概念をハードウェアで実装するか、ソフトウェアで実装するかの決定は、典型的には、ソフトウェアネットワーク領域からハードウェアネットワーク領域に変換することに関与する任意の問題よりはむしろ、設計の安定性及び製造されるユニット数の考慮で決まる。概して、さらに頻繁に変更する可能性がある設計は、ハードウェア実装を再設計することがソフトウェア設計を再設計することより費用がかかるので、ソフトウェアで実装されることが望ましいだろう。概して、安定的であり、大量生産される設計は、大量生産の実行に関してハードウェア実装がソフトウェア実装より費用がかからない場合があるので、ハードウェア、例えば、ＡＳＩＣで実装されることが望ましいだろう。しばしば、設計がソフトウェアの形態で開発及び試験され得、後に、ソフトウェアの命令をハードウェアに組み込むＡＳＩＣにおいて、周知の設計ルールによって均等なハードウェア実装に変換され得る。新しいＡＳＩＣによって制御されるマシンが特定のマシン又は装置であるのと同じように、実行可能命令がプログラミング及び／又はロードされたコンピュータは同様に、特定のマシン又は装置としてみなされ得る。
【０１０８】
図９は、本開示の様々な実施形態による、メモリ１０５に対してウェアレベリングを実行する方法９００を示すフローチャートである。方法９００は、メモリシステム１００又はメモリシステム８００によって実行され得る。方法９００は、書き込みコマンド１２５がメモリシステム１００又はメモリシステム８００によって受信されるとき、実行され得る。
【０１０９】
ステップ９０３では、メモリ１０５の第１の部分５０５に複数のユーザビット１３０を書き込むための書き込みコマンド１５０が受信される。例えば、Ｒｘ８２０が書き込みコマンド１５０を受信する。一実施形態において、書き込みコマンド１５０は、複数のユーザビット１３０及びメモリ１０５の第１の部分５０５のアドレス（物理アドレス又は論理アドレス）を備える。一実施形態において、複数のユーザビット１３０は、メモリ１０５の第２の部分５１０で格納され、且つ、複数のユーザビット１３０に対する誤り検出を実行するのに用いられる複数のＥＣＣビット１３５と関連している。
【０１１０】
ステップ９０５では、循環シフターオフセット７７０が、メモリ１０５の第１の部分５０５の書き込みカウント１２５に基づいて、決定される。図５及び図６を参照して上記のように、例えば、プロセッサ８３０は、書き込みカウント１２５に基づいて、循環シフターオフセット７７０を決定する。循環シフターオフセット７７０は、メモリ１０５又はメモリシステム１００又はメモリシステム８００内の任意の箇所に格納され得る。
【０１１１】
ステップ９０６では、ユーザビット１３０及びＥＣＣビット１３５が、循環シフターオフセット７７０に基づいて、メモリ１０５の第１の部分５０５及びメモリ１０５の第２の部分５１０内の複数のメモリセル２１０に書き込まれる。例えば、プロセッサ８３０は、循環シフターモジュール１１５を実行し、循環シフターオフセット７７０に基づいて、メモリ１０５の第１の部分５０５及びメモリ１０５の第２の部分５１０内のメモリセル２１０に複数のユーザビット１３０及びＥＣＣビット１３５を書き込み得る。
【０１１２】
図１０は、本開示の様々な実施形態による、メモリ１０５に対するウェアレベリングを実行するよう構成された装置１０００を示す図である。装置１００は、受信手段１００３、決定手段１００６、及び書き込み手段１００９を備える。受信手段１００３はメモリ１０５の第１の部分５０５に複数のユーザビット１３０を書き込むための書き込みコマンド１５０を受信するよう構成され、書き込みコマンド１５０は複数のユーザビット１３０及びメモリ１０５の第１の部分５０５のアドレスを含み、ユーザビット１３０はメモリ１０５の第２の部分５１０で格納され、且つ、複数のユーザビット１３０に対する誤り検出を実行するのに用いられる複数のＥＣＣビット１３５と関連している。決定手段１００６は、メモリ１０５の第１の部分５０５の書き込みカウント１２５に基づいて、循環シフターオフセット７７０を決定するよう構成される。書き込み手段１００９は、循環シフターオフセット７７０に基づいて、メモリ１０５の第１の部分５０５及びメモリ１０５の第２の部分５１０内の複数のメモリセル２１０に複数のユーザビット１３０及び複数のＥＣＣビット１３５を書き込むよう構成される。
【０１１３】
本明細書で説明されたシステム、方法、及び装置は、ビットレベル及び／又はニブルレベルでＥＣＣビットとユーザビットとの間で回転するためのメカニズムを提供する。循環シフター機能に基づく書き込みカウント１２５は、各々の書き込みコマンド１５０の後に記録された書き込みカウント１２５の機能として、回転頻度を変更するメカニズムを提供する。書き込みカウント１２５内のビットは、ＢＧＣ符号化で自己ウェアレベリングされる。本明細書で開示されたシステム、方法、及び装置は、エネルギー、耐久性、及び性能の目的でＳＣＭビット修正機能を十分に利用する。
【０１１４】
複数の実施形態が本開示で提供されたが、開示されたシステム及び方法は、本開示の思想又は範囲から逸脱することなく、多くの他の特定の形態で具現化され得ることが理解されるべきである。本例は例示的なものであって限定的なものでないとしてみなされるべきであり、その意図は本明細書で与えられた詳細に限定されるべきでない。例えば、様々な要素若しくは構成要素が他システムに組み合わされても統合されてもよく、又は特定の特徴が省略されても実装されなくてもよい。
【０１１５】
さらに、様々な実施形態において個別のもの又は独立したものとして説明されて示された技術、システム、サブシステム、及び方法は、本開示の範囲から逸脱することなく、他のシステム、モジュール、技術、又は方法と組み合わされても統合されてもよい。互いに連結される又は直接連結される、又は通信するものとして示され又は説明された他のアイテムは、電気的であれ、機械的であれ、又は別の方法であれ、いくつかのインタフェース、デバイス、又は中間の構成要素を介して間接的に連結又は通信され得る。変更、置換、及び修正の他の例が、当業者によって確認可能であり、本明細書で開示された思想及び範囲から逸脱することなく作成され得る。
【図１】
2021506024.tif 000003
【図２】
2021506024.tif 000004
【図３】
2021506024.tif 000005
【図４】
2021506024.tif 000006
【図５】
2021506024.tif 000007
【図６】
2021506024.tif 000008
【図７】
2021506024.tif 000009
【図８】
2021506024.tif 000010
【図９】
2021506024.tif 000011
【図１０】
2021506024.tif 000012
【手続補正書】
【提出日】令和2年7月14日(2020.7.14)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
メモリシステムによって実装されるメモリに対するウェアレベリングを実行する方法であって、
前記メモリに連結された受信器が、前記メモリの第１の部分に複数のユーザビットを書き込むための書き込みコマンドを受信する段階であって、前記書き込みコマンドは前記複数のユーザビット及び前記メモリの前記第１の部分のアドレスを含み、前記複数のユーザビットは前記メモリの第２の部分で格納され、且つ、前記複数のユーザビットに対する誤り検出を実行するのに用いられる複数の誤り訂正符号（ＥＣＣ）ビットと関連している、受信する段階と、
前記受信器及び前記メモリに連結されたプロセッサが、前記メモリの前記第１の部分の書き込みカウントに基づいて、循環シフターオフセットを決定する段階と、
前記メモリが、前記循環シフターオフセットに基づいて、前記メモリの前記第１の部分及び前記メモリの前記第２の部分内の複数のメモリセルに前記複数のユーザビット及び前記複数のＥＣＣビットを書き込む段階と
を備える、方法。
【請求項２】
前記循環シフターオフセットは複数のメモリセルの数に対応する整数値であり、その整数値だけ前記メモリの前記第１の部分及び前記メモリの前記第２の部分内の前記複数のユーザビット及び前記複数のＥＣＣビットをシフトし、前記循環シフターオフセットは前記書き込みカウント／Ｋに等しく、Ｋは前記書き込みカウントと関連している予め定められた定数である、請求項１に記載の方法。
【請求項３】
前記書き込みカウントは複数の書き込みカウントビットを含み、前記方法は、前記書き込みカウントをインクリメントした後で、且つ、前記複数のメモリセルに前記複数のユーザビット及び前記複数のＥＣＣビットを書き込む前に、前記プロセッサが、前記書き込みカウントの前記複数の書き込みカウントビットに対するバランスのとれたグレイコード（ＢＧＣ）符号化を実行する段階をさらに備える、請求項１又は２に記載の方法。
【請求項４】
前記循環シフターオフセットは前記複数のメモリセルの数に対応する整数値であり、その整数値だけ前記メモリの前記第１の部分及び前記メモリの前記第２の部分内の前記複数のユーザビット及び前記複数のＥＣＣビットをシフトし、前記複数のユーザビット及び前記複数のＥＣＣビットは、単一ビットを格納するよう各々構成される複数のメモリセル内で連続して論理的に格納され、前記複数のメモリセルに前記複数のユーザビット及び前記複数のＥＣＣビットを書き込む段階は、前記複数のメモリセルのうちの１つで前記複数のユーザビット及び前記複数のＥＣＣビットの各々を格納するための位置を前記循環シフターオフセットだけシフトする段階を有する、請求項１から３のいずれか一項に記載の方法。
【請求項５】
前記循環シフターオフセットは前記複数のメモリセルの数に対応する整数値であり、その整数値だけ前記メモリの前記第１の部分及び前記メモリの前記第２の部分内の前記複数のユーザビット及び前記複数のＥＣＣビットをシフトし、前記複数のユーザビット及び前記複数のＥＣＣビットは、単一ニブルを格納するよう各々構成される複数のメモリセル内で連続して論理的に格納され、１ニブルは４ビットを含み、前記複数のメモリセルに前記複数のユーザビット及び前記複数のＥＣＣビットを書き込む段階は、前記複数のメモリセルのうちの１つで前記複数のユーザビット及び前記複数のＥＣＣビットの各々を格納するための位置を前記循環シフターオフセットだけシフトする段階を有する、請求項１から４のいずれか一項に記載の方法。
【請求項６】
前記書き込みカウントは複数の書き込みカウントビットを含み、前記方法は、前記書き込みコマンドを受信した後、前記書き込みカウントをインクリメントする段階をさらに備える、請求項１から５のいずれか一項に記載の方法。
【請求項７】
前記プロセッサが、前記複数のユーザビットに対応する前記複数のＥＣＣビットを計算する段階をさらに備える、請求項１から６のいずれか一項に記載の方法。
【請求項８】
前記メモリはストレージクラスメモリである、請求項１から７のいずれか一項に記載の方法。
【請求項９】
前記第１の部分及び前記第２の部分は、前記メモリ内で連続して格納されない、請求項１から８のいずれか一項に記載の方法。
【請求項１０】
メモリシステムとして実装される装置であって、
命令を含むメモリストレージと、
前記メモリストレージと通信する１又は複数のプロセッサと
を備え、
前記１又は複数のプロセッサは、請求項１から９のいずれか一項に記載の方法の各段階の処理を実行するよう前記命令を実行する、装置。
【請求項１１】
コンピュータが請求項１から９のいずれか一項に記載のメモリに対するウェアレベリングを実行する方法を実行するプログラム。
【請求項１２】
受信モジュールと、処理モジュールと、格納モジュールとを備えるメモリシステムであって、前記受信モジュールは前記格納モジュールに連結され、前記処理モジュールは前記受信モジュール及び前記格納モジュールに連結され、
前記受信モジュールは、請求項１から９のいずれか一項で前記受信器によって実行される各段階の処理を実行するよう構成され、
前記処理モジュールは、請求項１から９のいずれか一項で前記プロセッサによって実行される各段階の処理を実行するよう構成され、
前記格納モジュールは、請求項１から９のいずれか一項で前記メモリによって実行される各段階の処理を実行するよう構成される、
メモリシステム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、メモリ管理の分野に関連する。特に、本開示は、メモリシステム内のメモリセルの寿命を延ばすことに関連する。
【背景技術】
【０００２】
メモリシステム内のメモリセル又は物理的な位置に対する消耗は、どのくらいの頻度でセルの各々がプログラミングされるかに応じて変化する。メモリセルが一旦プログラミングされて、その後、実質的に再プログラミングされない場合、そのセルと関連している消耗は、概して比較的低い。しかしながら、メモリセルが繰り返し書き込まれて消去される場合、そのセルと関連している消耗は、概して比較的高い。データストレージシステムにおいて、ホストが同じ物理アドレスを繰り返し用いてデータの書き込み及び上書きを行う場合、メモリセルの同じ物理的な位置は、繰り返し書き込まれて消去される。
【発明の概要】
【０００３】
本開示の第１の態様によれば、メモリシステムによって実装される方法が提供される。方法は、メモリに連結された受信器が、メモリの第１の部分に複数のユーザビットを書き込むための書き込みコマンドを受信する段階であって、書き込みコマンドは複数のユーザビット及びメモリの第１の部分のアドレスを含み、ユーザビットはメモリの第２の部分で格納され、且つ、複数のユーザビットに対する誤り検出を実行するのに用いられる複数の誤り訂正符号（ＥＣＣ）ビットと関連している、受信する段階と、受信器及びメモリに連結されたプロセッサが、メモリの第１の部分の書き込みカウントに基づいて、循環シフターオフセットを決定する段階と、メモリが、循環シフターオフセットに基づいて、メモリの第１の部分及びメモリの第２の部分内の複数のメモリセルに複数のユーザビット及び複数のＥＣＣビットを書き込む段階とを備える。
【０００４】
第１の態様による方法の第１の実装において、循環シフターオフセットは複数のメモリセルの数に対応する整数値であり、その整数値だけメモリの第１の部分及びメモリの第２の部分内の複数のユーザビット及び複数のＥＣＣビットをシフトし、循環シフターオフセットは書き込みカウント／Ｋに等しく、Ｋは書き込みカウントと関連している予め定められた定数である。
【０００５】
第１の態様又は第１の態様の任意の前述の実装による方法の第２の実装において、書き込みカウントは複数の書き込みカウントビットを含み、方法は、書き込みカウントをインクリメントした後で、且つ、複数のメモリセルに複数のユーザビット及び複数のＥＣＣビットを書き込む前に、プロセッサが、書き込みカウントの複数の書き込みカウントビットに対するバランスのとれたグレイコード（ＢＧＣ）符号化を実行する段階をさらに備える。
【０００６】
第１の態様又は第１の態様の任意の前述の実装による方法の第３の実装において、循環シフターオフセットは複数のメモリセルの数に対応する整数値であり、その整数値だけメモリの第１の部分及びメモリの第２の部分内の複数のユーザビット及び複数のＥＣＣビットをシフトし、複数のユーザビット及び複数のＥＣＣビットは、単一ビットを格納するよう各々構成される複数のメモリセル内で連続して論理的に格納され、複数のメモリセルに複数のユーザビット及び複数のＥＣＣビットを書き込む段階は、複数のメモリセルのうちの１つで複数のユーザビット及び複数のＥＣＣビットの各々を格納するための位置を循環シフターオフセットだけシフトする段階を有する。
【０００７】
第１の態様又は第１の態様の任意の前述の実装による方法の第４の実装において、循環シフターオフセットは複数のメモリセルの数に対応する整数値であり、その整数値だけメモリの第１の部分及びメモリの第２の部分内の複数のユーザビット及び複数のＥＣＣビットをシフトし、複数のユーザビット及び複数のＥＣＣビットは、単一ニブルを格納するよう各々構成される複数のメモリセル内で連続して論理的に格納され、１ニブルは４ビットを含み、複数のメモリセルに複数のユーザビット及び複数のＥＣＣビットを書き込む段階は、複数のメモリセルのうちの１つで複数のユーザビット及び複数のＥＣＣビットの各々を格納するための位置を循環シフターオフセットだけシフトする段階を有する。
【０００８】
第１の態様又は第１の態様の任意の前述の実装による方法の第５の実装において、書き込みカウントは複数の書き込みカウントビットを含み、方法は、書き込みコマンドを受信した後、書き込みカウントをインクリメントする段階をさらに備える。
【０００９】
第１の態様又は第１の態様の任意の前述の実装による方法の第６の実装において、方法は、プロセッサが、複数のユーザビットに対応する複数のＥＣＣビットを計算する段階をさらに備える。
【００１０】
第１の態様又は第１の態様の任意の前述の実装による方法の第７の実装において、メモリはストレージクラスメモリである。
【００１１】
第１の態様又は第１の態様の任意の前述の実装による方法の第８の実装において、第１の部分及び第２の部分は、メモリ内で連続して格納されない。
【００１２】
本開示の第２の態様によれば、メモリシステムとして実装される装置が提供される。装置は、命令を含むメモリストレージと、メモリストレージと通信する１又は複数のプロセッサとを備え、１又は複数のプロセッサは、メモリの第１の部分に複数のユーザビットを書き込むための書き込みコマンドを受信することであって、書き込みコマンドは複数のユーザビット及びメモリの第１の部分のアドレスを含み、ユーザビットはメモリの第２の部分で格納され、且つ、複数のユーザビットに対する誤り検出を実行するのに用いられる複数の誤り訂正符号（ＥＣＣ）ビットと関連している、受信することと、メモリの第１の部分の書き込みカウントに基づいて、循環シフターオフセットを決定することと、循環シフターオフセットに基づいて、メモリの第１の部分及びメモリの第２の部分内の複数のメモリセルに複数のユーザビット及び複数のＥＣＣビットを書き込むこととを行うよう命令を実行する。
【００１３】
第２の態様による装置の第１の実装において、循環シフターオフセットは複数のメモリセルの数に対応する整数値であり、その整数値だけメモリの第１の部分及びメモリの第２の部分内の複数のユーザビット及び複数のＥＣＣビットをシフトし、循環シフターオフセットは書き込みカウント／Ｋに等しく、Ｋは書き込みカウントと関連している予め定められた定数である。
【００１４】
第２の態様又は第２の態様の任意の前述の実装による装置の第２の実装において、書き込みカウントは複数の書き込みカウントビットを含み、１又は複数のプロセッサは、書き込みカウントをインクリメントした後で、且つ、複数のメモリセルに複数のユーザビット及び複数のＥＣＣビットを書き込む前に、書き込みカウントの複数の書き込みカウントビットに対するバランスのとれたグレイコード（ＢＧＣ）符号化を実行することを行うよう命令を実行する。
【００１５】
第２の態様又は第２の態様の任意の前述の実装による装置の第３の実装において、循環シフターオフセットは複数のメモリセルの数に対応する整数値であり、その整数値だけメモリの第１の部分及びメモリの第２の部分内の複数のユーザビット及び複数のＥＣＣビットをシフトし、複数のユーザビット及び複数のＥＣＣビットは、単一ビットを格納するよう各々構成される複数のメモリセル内で連続して論理的に格納され、１又は複数のプロセッサは、複数のメモリセルのうちの１つで複数のユーザビット及び複数のＥＣＣビットの各々を格納するための位置を循環シフターオフセットだけシフトすることを行うよう命令を実行する。
【００１６】
第２の態様又は第２の態様の任意の前述の実装による装置の第４の実装において、循環シフターオフセットは複数のメモリセルの数に対応する整数値であり、その整数値だけメモリの第１の部分及びメモリの第２の部分内の複数のユーザビット及び複数のＥＣＣビットをシフトし、複数のユーザビット及び複数のＥＣＣビットは、単一ニブルを格納するよう各々構成される複数のメモリセル内で連続して論理的に格納され、１ニブルは４ビットを含み、１又は複数のプロセッサは、複数のメモリセルのうちの１つで複数のユーザビット及び複数のＥＣＣビットの各々を格納するための位置を循環シフターオフセットだけシフトすることを行うよう命令を実行する。
【００１７】
第２の態様又は第２の態様の任意の前述の実装による装置の第５の実装において、書き込みカウントは複数の書き込みカウントビットを含み、１又は複数のプロセッサは、書き込みコマンドを受信した後、書き込みカウントをインクリメントすることを行うよう命令を実行する。
【００１８】
第２の態様又は第２の態様の任意の前述の実装による装置の第６の実装において、１又は複数のプロセッサは、複数のユーザビットに対応する複数のＥＣＣビットを計算することを行うよう命令を実行する。
【００１９】
本開示の第３の態様によれば、コンピュータ実行可能命令を含むコンピュータプログラム製品を格納するよう構成される非一時的媒体であって、プロセッサによって実行されるとき、コンピュータ実行可能命令は、メモリの第１の部分に複数のユーザビットを書き込むための書き込みコマンドを受信する手順であって、書き込みコマンドは複数のユーザビット及びメモリの第１の部分のアドレスを含み、ユーザビットはメモリの第２の部分で格納され、且つ、複数のユーザビットに対する誤り検出を実行するのに用いられる複数の誤り訂正符号（ＥＣＣ）ビットと関連している、受信する手順と、メモリの第１の部分の書き込みカウントに基づいて、循環シフターオフセットを決定する手順と、循環シフターオフセットに基づいて、メモリの第１の部分及びメモリの第２の部分内の複数のメモリセルに複数のユーザビット及び複数のＥＣＣビットを書き込む手順とをプロセッサにさせる、非一時的媒体が提供される。
【００２０】
第３の態様による非一時的媒体の第１の実装において、循環シフターオフセットは複数のメモリセルの数に対応する整数値であり、その整数値だけメモリの第１の部分及びメモリの第２の部分内の複数のユーザビット及び複数のＥＣＣビットをシフトし、循環シフターオフセットは書き込みカウント／Ｋに等しく、Ｋは書き込みカウントと関連している予め定められた定数である。
【００２１】
第３の態様又は第３の態様の任意の前述の実装による非一時的媒体の第２の実装において、書き込みカウントは複数の書き込みカウントビットを含み、プロセッサによって実行されるとき、コンピュータ実行可能命令は、書き込みカウントをインクリメントした後で、且つ、複数のメモリセルに複数のユーザビット及び複数のＥＣＣビットを書き込む前に、書き込みカウントの複数の書き込みカウントビットに対するバランスのとれたグレイコード（ＢＧＣ）符号化を実行する手順をさらにプロセッサにさせる。
【００２２】
第３の態様又は第３の態様の任意の前述の実装による非一時的媒体の第３の実装において、循環シフターオフセットは複数のメモリセルの数に対応する整数値であり、その整数値だけメモリの第１の部分及びメモリの第２の部分内の複数のユーザビット及び複数のＥＣＣビットをシフトし、複数のユーザビット及び複数のＥＣＣビットは、単一ビットを格納するよう各々構成される複数のメモリセル内で連続して論理的に格納され、プロセッサによって実行されるとき、コンピュータ実行可能命令は、複数のメモリセルのうちの１つで複数のユーザビット及び複数のＥＣＣビットの各々を格納するための位置を循環シフターオフセットだけシフトする手順をさらにプロセッサにさせる。
【００２３】
第３の態様又は第３の態様の任意の前述の実装による非一時的媒体の第４の実装において、循環シフターオフセットは複数のメモリセルの数に対応する整数値であり、その整数値だけメモリの第１の部分及びメモリの第２の部分内の複数のユーザビット及び複数のＥＣＣビットをシフトし、複数のユーザビット及び複数のＥＣＣビットは、単一ニブルを格納するよう各々構成される複数のメモリセル内で連続して論理的に格納され、１ニブルは４ビットを含み、プロセッサによって実行されるとき、コンピュータ実行可能命令は、複数のメモリセルのうちの１つで複数のユーザビット及び複数のＥＣＣビットの各々を格納するための位置を循環シフターオフセットだけシフトする手順をさらにプロセッサにさせる。
【００２４】
第３の態様又は第３の態様の任意の前述の実装による非一時的媒体の第５の実装において、書き込みカウントは複数の書き込みカウントビットを含み、プロセッサによって実行されるとき、コンピュータ実行可能命令は、書き込みコマンドを受信した後、書き込みカウントをインクリメントする手順をさらにプロセッサにさせる。
【００２５】
第３の態様又は第３の態様の任意の前述の実装による非一時的媒体の第６の実装において、プロセッサによって実行されるとき、コンピュータ実行可能命令は、複数のユーザビットに対応する複数のＥＣＣビットを計算する手順をさらにプロセッサにさせる。
【００２６】
ウェアレベリングは、典型的に、一定の時間間隔で、データの大きいブロック（数千のビット）を異なるメモリ位置に移動することを含む。しかしながら、データの大きいブロック内で特定のビットに対するきめ細かいウェアレベリングを実行するためのメカニズムが現在のところ存在しない。ウェアレベリングの現在のメカニズムはまた、ユーザビットより頻繁に変更する場合がある対応するＥＣＣビットを考慮しない。
【００２７】
本明細書で開示されるウェアレベリングスキームは、数千のビットのデータの大きいブロックよりはむしろ、データの特定のビット又はニブルを格納する位置を変更することを本明細書で開示されるウェアレベリングスキームは含む点で有利である。これは、メモリ内のメモリセルの寿命を制御するより詳細で正確な方法をもたらす。このようにして、本明細書で開示されるウェアレベリングスキームは、メモリ内のメモリセルの各々の寿命を延ばすことによって、メモリの寿命を延ばす。
【００２８】
これらの特徴又は他の特徴は、添付図面及び特許請求の範囲と合わせて以下の詳細な説明からより明確に理解されるだろう。
【図面の簡単な説明】
【００２９】
本開示をより十分に理解するために、ここで、添付図面及び詳細な説明と共に併用される以下の簡潔な説明について言及する。ここで、同様の参照番号は同様の要素を表す。
【００３０】
【図１】本開示の様々な実施形態による、ウェアレベリングを実行するよう構成されるメモリシステムの例を示す図である。
【００３１】
【図２】本開示の様々な実施形態による、メモリ内のメモリセルの物理アドレスと論理アドレスとの間の関係を示す図である。
【００３２】
【図３】本開示の様々な実施形態による、コードワードのＥＣＣビットとコードワードのユーザビットとの間の書き込み割合の差を示す図である。
【００３３】
【図４】本開示の様々な実施形態による、ウェアレベリングの方法を示す図である。
【００３４】
【図５】本開示の様々な実施形態による、ウェアレベリングを実行する方法の例を示す図である。
【００３５】
【図６】本開示の様々な実施形態による、ウェアレベリングを実行する方法の他の例を示す図である。
【００３６】
【図７】本開示の様々な実施形態による、メモリの第１の部分の書き込みカウントを格納するメモリセルに対するウェアレベリングを実行する方法の例を示す図である。
【００３７】
【図８】本開示の様々な実施形態による、メモリシステムの実施形態の図である。
【００３８】
【図９】本開示の様々な実施形態による、メモリに対するウェアレベリングを実行する方法を示すフローチャートである。
【００３９】
【図１０】本開示の様々な実施形態による、メモリに対するウェアレベリングを実行するための装置を示す図である。
【発明を実施するための形態】
【００４０】
１又は複数の実施形態の例示的な実装が以下に提供されるが、開示されたシステム及び／又は方法は、現在知られているか存在しているかどうかにかかわらず、任意の数の技術を用いて実装され得ることが最初に理解されるべきである。本開示は、本明細書に示され説明される例示的な設計及び実装を含む、以下で示される例示的な実装、図面、及び技術に決して限定されるべきでないが、添付の特許請求の範囲の範囲内に加えて、それらの均等物の全範囲内に変更され得る。
【００４１】
ユーザデータが、典型的にユーザから受信され、ユーザビットとして格納される。誤り訂正符号（ＥＣＣ）ビットがユーザビットに基づいて計算され、ユーザビットに対する誤り検出及び訂正を実行するのに用いられる。メモリに書き込まれるユーザビットを備える書き込みコマンドは、メモリシステムによって受信され得る。メモリシステムは、書き込みコマンドで受信したユーザビットのＥＣＣビットを計算するよう構成され得る。ユーザビットがメモリの第１の部分に書き込まれ得、ＥＣＣビットがメモリの第２の部分に書き込まれ得る。
【００４２】
場合によっては、ＥＣＣビットを格納するメモリセルが、ユーザビットを格納するメモリセルより頻繁に書き込まれる。例えば、ユーザビットのセット内の特定のビットに対する書き込みコマンドを実行するとき、ほんのわずかだけのユーザビットを更新する必要があるときに、全ての対応するＥＣＣビットを更新する必要がある場合がある。これによって、特定のメモリセルが他のメモリセルより頻繁に書き込まれることになり、したがって、より頻繁に書き込まれるメモリセルがそれほど頻繁に書き込まれないメモリセルより速く消耗する。
【００４３】
ウェアレベリングは、典型的に、そうでなければ他のメモリセルより頻繁に書き込まれるであろう特定のメモリセルの消耗を減らすよう実行される。ウェアレベリングは、典型的に、一定の時間間隔で、データの大きいブロック（数千のビット）を異なるメモリ位置に移動することを含む。しかしながら、データの大きいブロック内で特定のビットに対するきめ細かいウェアレベリングを実行するためのメカニズムが現在のところ存在しない。ウェアレベリングの現在のメカニズムはまた、ユーザビットより頻繁に変更する場合がある対応するＥＣＣビットを考慮しない。
【００４４】
本明細書で開示されるのは、ユーザビットを格納するメモリの一部分の書き込みカウントに基づいてユーザビット及びＥＣＣビットを格納するメモリセルに対するウェアレベリングを実装する方法及びシステムである。ウェアレベリングは、書き込みカウントに従って計算される循環シフターオフセットだけユーザビット及びＥＣＣビットをシフト又は回転することによって実行される。ウェアレベリングはまた、書き込みカウントビットに対するバランスのとれたグレイコード（ＢＧＣ）符号化を実行することによって、書き込みカウントビットに対して実行される。
【００４５】
図１は、本開示の様々な実施形態による、ウェアレベリングを実行するよう構成されるメモリシステム１００の例を示す図である。メモリシステム１００は、書き込みカウント１２５、ユーザビット１３０、及びＥＣＣビット１３５を格納するよう構成されるメモリ１０５を含み、これは、以下でさらに説明される。メモリシステム１００はまた、ＢＧＣモジュール１１０（本明細書でＢＧＣエンジンとも称される）、循環シフターモジュール１１５（本明細書で循環シフターとも称される）、及びＥＣＣモジュール１２０（本明細書でＥＣＣエンジンとも称される）を含む。以下でさらに説明されるように、ＢＧＣモジュール１１０、循環シフターモジュール１１５、及びＥＣＣモジュール１２０はそれぞれ、実行されるとき、メモリ１０５に対してきめ細かい方式のウェアレベリングを実行することをメモリシステム１００にさせるような、メモリシステム１００内に格納されるコンピュータ実行可能命令のセットであり得る。
【００４６】
メモリ１０５は、複数のメモリセルを有し、それらの各々は、データを格納するよう構成される最小の物理ユニットである。メモリ１０５内の各々のメモリセルは、任意の数のビットを格納するよう構成され得る。例えば、メモリ１０５内のメモリセルは、単一ビットのデータ、２ビットのデータ、又は４ビットのデータを格納するよう構成され得る。４ビットのデータの集合は、本明細書でニブルとも称される。
【００４７】
メモリ１０５内のメモリセルは、多くの異なるタイプのデータを格納するよう構成され得る。図１に示されるように、メモリ１０５は、ユーザビット１３０を格納するよう構成され、これは、ユーザデータのビットを参照する。メモリ１０５はまた、ＥＣＣビット１３５を格納するよう構成され、これは、ユーザビット１３０に対する誤り検出及び訂正を実行するのに用いるビットを参照する。
【００４８】
メモリ１０５が複数のコードワードに論理的に分割され得、複数のコードワードにおける各々のコードワードは、ユーザビット１３０のブロック（本明細書で複数のユーザビット１３０又は単にユーザビット１３０とも称される）及びユーザビット１３０に対応するＥＣＣビット１３５の両方を含む。図５及び図６を参照して以下でさらに説明されるように、ユーザビット１３０のブロックは、典型的に、メモリ１０５の第１の部分で格納されるが、ＥＣＣビット１３５のブロックは、典型的に、メモリ１０５の第２の部分で格納される。コードワードのユーザビット１３０及びＥＣＣビット１３５を説明するとき、ＥＣＣビット１３５は、ユーザビット１３０の対応するブロックと共に論理的に格納されるものとみなされ得る。しかしながら、ＥＣＣビット１３５は、実際には、ユーザビット１３０の対応するブロックから離れて不連続に格納され得る。
【００４９】
コードワード内のユーザビット１３０のブロックは、１又は複数の連続するメモリセル又は１又は複数の連続しないメモリセルでメモリ１０５の第１の部分内で物理的に格納され得る。ユーザビット１３０のブロックは、ユーザビット１３０のブロックを格納する１又は複数のメモリセルの位置を示す物理アドレスと関連してよい。ユーザビット１３０のブロックはまた、論理アドレスと関連してよく、これは、論理アドレスがユーザビット１３０のブロックを格納する１又は複数のメモリセルの位置を示すという点で物理アドレスと類似している。しかしながら、ユーザビット１３０のブロックの物理アドレスは時間と共に変更し得るが、ユーザビット１３０のブロックの論理アドレスは時間と共に変更しない。
【００５０】
ユーザビット１３０のブロックの物理アドレスは、ユーザビット１３０のブロックの物理アドレスがアクセスされた（書き込まれた又は読み出された）回数を示す整数値を指す書き込みカウント１２５と関連してよい。書き込みカウント１２５はまた、書き込みコマンド１５０が受信されて、ユーザビット１３０のブロックの物理アドレスに対して実行された回数を示す整数値を指し得る。図１によって示されるように、メモリ１０５は、ユーザビット１３０の様々なブロックの書き込みカウント１２５を離れて格納し得る。書き込みカウント１２５は、ユーザビット１３０の対応するブロックと共に論理的に格納されるものとしてみなされ得る。しかしながら、書き込みカウント１２５は、実際には、ユーザビット１３０の対応するブロックから物理的に離れて不連続に格納され得る。
【００５１】
ＥＣＣビット１３５は、１又は複数の連続するメモリセル又は１又は複数の連続しないメモリセルでメモリ１０５の第２の部分内で物理的に格納され得る。ＥＣＣビット１３５はまた、物理アドレス及び論理アドレスと関連してよい。いくつかの実施形態において、ユーザビット１３０及びＥＣＣビット１３５内のビットの各々は、時間と共に変更し得る対応する物理アドレス、又は同じままである論理アドレスを有する。
【００５２】
メモリ１０５は、カルコゲニド、ペロブスカイト、相変化材料、磁気バブル技術、カーボンナノチューブ等の低費用材料を用いる不揮発性ストレージ技術であるストレージクラスメモリ（ＳＣＭ）であり得る。例えば、メモリ１０５は、３次元（３Ｄ）クロスポイント（ＸＰｏｉｎｔ）メモリ、相変化ランダムアクセスメモリ（ＲＡＭ）、又は任意の抵抗変化型ＲＡＭ等のＳＣＭであり得る。メモリ１０５は、ＳＣＭの不揮発性の特性に起因して、恒久的に格納するよう構成され得る。メモリ１０５はまた、ＤＲＡＭと同様にビット可変であり、これにより、ユーザ又は管理者がビット単位でデータを変更することを可能にする。
【００５３】
しかしながら、ＤＲＡＭ及びディスクドライブとは異なって、メモリ１０５等のＳＣＭは限られた寿命を有し、その中で、メモリセルが消耗されてもはやデータを格納するために機能しなくなる前に、最大閾値数の処理のみがメモリセルに対して実行され得る。例えば、ＳＣＭは、もはやメモリセルがデータを格納するのに用いられることができなくなる前に、メモリセルに対する１０６から１０１２の処理をサポートすることのみが可能であり得る。
【００５４】
一部のメモリセルは他のメモリセルよりはるかに頻繁に書き込まれて読み出されるので、一部のメモリセルは他のメモリセルより速く消耗される。一部のセルが効果的に消耗されるが、他のセルが比較的消耗されていないとき、消耗されたセルの存在は、概して、メモリシステム１００の全体の性能を低下させる。消耗したメモリセルと関連している性能の劣化に加えて、消耗していない不十分な数のメモリセルが所望のデータを格納するのに利用可能であるとき、メモリシステム１００の全体の性能は、悪影響を受ける場合がある。臨界数の消耗したセルがメモリシステム１００内に存在するとき、多くの他のセルが比較的消耗されていないときでさえ、しばしば、メモリシステム１００を使用できないと考えられる場合がある。
【００５５】
メモリシステム１００内のメモリセルが公平でむらなく消耗される可能性を高めるべく、ウェアレベリング処理がしばしば実行される。ウェアレベリング処理は、同じデータが常に同じメモリセルで格納されないように、メモリ１０５内で周期的にデータの位置を変更することを含む。メモリセルの各々で格納されるデータを変更することによって、他のセルが消耗される前に特定のメモリセルがかなり消耗される可能性はより低くなる。
【００５６】
ウェアレベリングは、典型的には、データの論理アドレスを変更することなく、周期的にデータの物理アドレスを変更することによって実行される。図２を参照して以下でさらに説明されるように、例えば、ウェアレベリングは、ユーザビット１３０の論理アドレスを変更することなく、ユーザビット１３０の物理アドレスを変更することによって実行される。しかしながら、ウェアレベリングの典型的な方法は、ウェアレベリングの一回の反復の間に数千のビットが位置を変更する粗い方式でメモリ１０５に対して実行される。例えば、セルが不規則に消耗することを防止すべく、ウェアレベリングの一回の反復は、典型的には、１，０００（１Ｋ）ビット又は４，０００（４Ｋ）ビット等の数千のビットの位置を変更することを含む。しかしながら、そのようなウェアレベリングの粗い方法は、特定のメモリセルが消耗することを効率的に防止せず、ユーザビット１３０と関連しているＥＣＣビット１３５を考慮しない。
【００５７】
本明細書で開示される複数の実施形態は、書き込みカウント１２５の値に基づいて、ユーザビット１３０及びＥＣＣビット１３５の位置を変更することによって、きめ細かい方式でメモリ１０５対するウェアレベリングを実行することに向けられる。本明細書で開示される複数の実施形態は、ユーザビット１３０とＥＣＣビット１３５との間のビット（例えば、１ビット）又はニブル（例えば、４ビット）レベルでウェアレベリングを実行する。動作中、矢印１５３によって示されるように、メモリシステム１００は、ユーザから書き込みコマンド１５０を受信し得る。書き込みコマンド１５０は、メモリ１０５に書き込まれるユーザビット１３０及びユーザビット１３０を書き込むアドレスを含み得る。一実施形態において、書き込みコマンド１５０に含まれるアドレスは、書き込みコマンド１５０におけるユーザビット１３０を格納するよう構成されるメモリ１０５の第１の部分の物理アドレスであり得る。一実施形態において、書き込みコマンド１５０に含まれるアドレスは、ユーザビット１３０がメモリ１０５に格納され得る場所の位置を示すコードワード（ユーザビット１３０及び対応するＥＣＣビット１３５）の論理アドレスであり得る。
【００５８】
一実施形態において、矢印１５６によって示されるように、ＢＧＣモジュール１１０は、書き込みコマンド１５０を受信した後、書き込みコマンド１５０に含まれるアドレスに対応する書き込みカウント１２５を最初に取得する。ＢＧＣモジュール１１０は、その後、書き込みコマンド１５０を受信したことに応じて、書き込みカウント１２５を１だけインクリメントするよう構成される。図７を参照して以下でさらに説明されるように、書き込みカウント１２５をインクリメントした後、ＢＧＣモジュール１１０は、書き込みカウント１２５を格納するメモリ１０５のメモリセルの各々が実質的に等しい回数書き込まれるように、書き込みカウント１２５の書き込みカウントビットを符号化するよう構成される。
【００５９】
矢印１５９によって示されるように、メモリシステム１００は、書き込みカウント１２５をインクリメントしてＢＧＣ符号化した後、予め定められたメモリ位置で書き込みカウント１２５の書き込みカウントビットを格納するよう構成される。このようにして、ＢＧＣ符号化されてインクリメントされた書き込みカウント１２５は、循環シフターモジュール１１５によってアクセスされ得る。
【００６０】
ＥＣＣモジュール１２０は、書き込みコマンド１５０における対応するユーザビット１３０のＥＣＣビット１３５を計算するよう構成される。例えば、ＥＣＣモジュール１２０は、誤り訂正アルゴリズムを用いてＥＣＣビット１３５を計算するよう構成され得る。ＥＣＣビット１３５は、典型的には、送信及び格納を通じてユーザビット１３０に取り込まれる誤りを検出して訂正するのに用いられる。例えば、ＥＣＣモジュール１２０はまた、ＥＣＣビット１３５及び格納されたＥＣＣに基づいて、ユーザビット１３０の誤り訂正を実行するよう構成され得る。ＥＣＣモジュール１２０によって実行されるＥＣＣビット１３５計算及び誤り訂正メカニズムは、Ｗａｎｇ  Ｘｕｅｑｉａｎｇ他による「ＭＬＣ  ＮＯＲフラッシュメモリにおける誤り訂正のための高速２セルＢＣＨ複合器（Ａ  Ｈｉｇｈ−Ｓｐｅｅｄ  Ｔｗｏ−Ｃｅｌｌ  ＢＣＨ  Ｄｅｃｏｄｅｒ  ｆｏｒ  Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｎｇ  ｉｎ  ＭＬＣ  ＮＯＲ  Ｆｌａｓｈ（登録商標）  Ｍｅｍｏｒｉｅｓ）」と題されたＩＥＥＥ文献でさらに説明される。
【００６１】
矢印１６１によって示されるように、循環シフターモジュール１１５は、ＥＣＣモジュール１２０によって計算されたＥＣＣビット１３５を取得し得る。循環シフターモジュール１１５は、その後、書き込みコマンド１５０及び計算されたＥＣＣビット１３５からユーザビット１３０を含むコードワードの特定のビットを格納するためにメモリセルの位置を決定するよう構成される。一実施形態において、図３〜図６を参照して以下にさらに説明されるように、循環シフターモジュール１１５は、回転された位置でユーザビット１３０及び対応するＥＣＣビット１３５を格納してメモリ１０５に対するウェアレベリングを実行するよう構成される。矢印１６４によって示されるように、循環シフターモジュール１１５は、メモリ１０５の第１の部分及びメモリ１０５の第２の部分の両方内の特定のメモリセルにユーザビット１３０の個々のビット又はニブルを書き込むよう構成される。同様に、矢印１６７によって示されるように、循環シフターモジュール１１５は、メモリ１０５の第１の部分及びメモリ１０５の第２の部分の両方内の特定のメモリセルにＥＣＣビット１３５の個々のビット又はニブルを書き込むよう構成される。
【００６２】
一実施形態において、図５及び図６を参照して以下でさらに説明されるように、循環シフターモジュール１１５は、書き込みカウント１２５に基づいて計算される循環シフターオフセットを用いて、コードワードのユーザビット１３０及びＥＣＣビット１３５を格納するためのメモリセルの位置を決定するよう構成される。例えば、ユーザビット１３０を格納するよう構成されるメモリ１０５の第１の部分に対する書き込みカウント１２５が１の循環シフターオフセットに対応すると仮定すると、循環シフターモジュール１１５は、メモリ１０５の第１の部分及びメモリ１０５の第２の部分内のユーザビット１３０及びＥＣＣビット１３５のストレージを１だけ回転させる。そのような場合において、メモリ１０５は、全てのユーザビット１３０及びＥＣＣビット１３０を１つのメモリセルだけ右にシフトするよう構成される。この場合、コードワードの最後のビット又はニブルがシフトされてコードワードの第１のビットが配置された位置で格納される。このようにして、書き込みカウント１２５は、循環シフターモジュール１１５がユーザビット１３０及びＥＣＣビット１３５のストレージを可変量だけ回転させるよう命令する様々な異なる循環シフターオフセットに対応し得る。
【００６３】
様々な実施形態によれば、ＢＧＣモジュール１１０、循環シフターモジュール１１５、及びＥＣＣモジュール１２０が共働してユーザビット１３０及び対応するＥＣＣビット１３５を含むコードワードの特定のビット又はニブルを格納するメモリセルに対するきめ細かいウェアレベリングを実装する。きめ細かいウェアレベリングは、数千のビットのデータの大きいブロックよりはむしろ、データの特定のビット又はニブルを格納する位置を変更し、メモリ１０５内のメモリセルの寿命を制御するより詳細で正確な方法をもたらす。
【００６４】
図２は、本開示の様々な実施形態による、メモリ内のメモリセル２１０の物理アドレス２０６と論理アドレス２０３との間の関係を示す図である。表２００Ａ−Ｂは、ユーザビット１３０及びＥＣＣビット１３５を含み得るコードワード２２０に対する論理アドレス２０３の列と、コードワード２２０に対する物理アドレス２０６の列とを含む。表２００Ａ−Ｂは、ウェアレベリングがメモリセル２１０Ａ−Ｄに対して実行される前後でどのようにユーザビット１３０及びＥＣＣビット１３５が特定のメモリセル２１０Ａ−Ｄ内に格納され得るかを示す。表２００Ａ−Ｂの右のブロック図は、ウェアレベリングがメモリセル２１０Ａ−Ｄに対して実行される前後の、メモリ１０５内の特定のメモリセル２１０Ａ−Ｄにおけるコードワード２２０内のビットのストレージを示す。
【００６５】
図２によって示されるように、メモリセル２１０Ａは０の物理アドレス２０６を有し得、メモリセル２１０Ｂは１の物理アドレス２０６を有し得、メモリセル２１０Ｃは２の物理アドレス２０６を有し得、メモリセル２１０Ｄはｎの物理アドレス２０６を有し得る。図２に示される例について、コードワード２２０の第１のビットが０の論理アドレス２０３を有するユーザビット１３０であり、コードワード２２０の第２のビットが１の論理アドレス２０３を有するユーザビット１３０であり、コードワード２２０の第３のビットが３の論理アドレス２０３を有するユーザビット１３０であり、コードワード２２０の第４のビットが４の論理アドレス２０３有するＥＣＣビット１３５であることを想定する。ウェアレベリングがコードワード２２０に対して実行されるとき、コードワード２２０内のビットの実際の物理的な位置を示す物理アドレス２０６が変更し得るが、論理アドレス２０３は同じままである。
【００６６】
特に、表２００Ａは、ウェアレベリングがメモリ１０５に対して実行される前の、コードワード２２０内のビット（又はニブル）の論理アドレス２０３と、コードワード２２０内のビット又はニブルを格納するメモリセル２１０Ａ−Ｄを示す物理アドレス２０６との間のデフォルトマッピングを示す。表２００Ａによって示されるように、デフォルトでは、コードワード２２０内のビットに対する論理アドレス２０３及び物理アドレス２０６は、一致する又は同じである。表２００Ａは、０の論理アドレス２０３に対応するユーザビット１３０が０の物理アドレス２０６を有するメモリセル２１０Ａで格納され、１の論理アドレス２０３に対応するユーザビット１３０が１の物理アドレス２０６を有するメモリセル２１０Ｂで格納され、２の論理アドレス２０３に対応するユーザビット１３０が２の物理アドレス２０６を有するメモリセル２１０Ｃで格納され、ｎの論理アドレス２０３に対応するＥＣＣビット１３５がｎの物理アドレス２０６を有するメモリセル２１０Ｄで格納されることを示す。０−２の論理アドレス２０３に対応するユーザビット１３０がメモリ１０５の第１の部分で格納され得るが、ｎの論理アドレス２０３に対応するＥＣＣビット１３５がメモリ１０５の第２の部分で格納され得る。
【００６７】
ウェアレベリングが実行された後、矢印２２２によって示されるように、コードワード２２０内のビットの物理アドレス２０６が特定の数のメモリセル２１０Ａ−Ｄだけ変更（例えば、シフト又は回転）する。図２によって示されるように、コードワード２２０内のビットが、１つのメモリセル２１０だけ右に回転する。表２００Ｂは、０の論理アドレス２０３に対応するユーザビット１３０が、ここで、１の物理アドレス２０６を有するメモリセル２１０Ｂで格納され、１の論理アドレス２０３に対応するユーザビット１３０が、ここで、２の物理アドレス２０６を有するメモリセル２１０Ｃで格納され、２の論理アドレス２０３に対応するユーザビット１３０が、ここで、ｎの物理アドレス２０６を有するメモリセル２１０Ｄで格納され、ｎの論理アドレス２０３に対応するＥＣＣビット１３５が、ここで、０の物理アドレス２０６を有するメモリセル２１０Ａで格納されることを示す。このようにして、ウェアレベリングがコードワード２２０内で実行された後、コードワード２２０内のビットの各々の物理アドレス２０６が変更するが、コードワード２２０内のビットの各々の論理アドレス２０３は同じままである。
【００６８】
４つのメモリ２１０セルＡ−Ｄのみがコードワード２２０を格納するものとして示されるが、コードワード２２０が任意の数のメモリセル２１０Ａ−Ｄ内に格納される任意の数のビットを含み得ることが理解されるべきである。メモリセル２１０Ａ−Ｄの各々はまた、任意の数のユーザビット１３０又はＥＣＣビット１３５を格納し得る。図２におけるメモリセル２１０Ａ−Ｄの各々がユーザビット１３０又はＥＣＣビット１３５内に１ビットを格納することが示されるが、図２におけるメモリセル２１０Ａ−Ｄの各々が、その代わりに２ビット又は１ニブルを格納するよう構成されてもよいことが理解されるべきである。メモリセル２１０Ａ−Ｄの各々が連続して隣接するものとして図２に示されるが、メモリセル２１０Ａ−Ｄの各々が離れて不連続であってよいことが理解されるべきである。
【００６９】
図２はコードワード２２０内のビットが単一のメモリセル２１０だけシフトすることを示すが、いくつかの実施形態において、コードワード２００内のビットはコードワード２２０の書き込みカウント１２５に応じて任意の数のメモリセル２１０だけシフトしてよく、これは以下の図５及び図６を参照してさらに説明される。その数だけコードワード２２０内のウェアレベリングを実行するメモリセル２１０の数は、循環シフターオフセットとも称され、以下の図４を参照してさらに説明される。
【００７０】
理解されるべきであるように、表２００Ａ−Ｂは、実際には、メモリシステム１００で格納される必要がなくてよい。代わりに、メモリシステム１００は、ユーザビット１３０の論理アドレス２０３と物理アドレス２０６との間のマッピングを格納するのに他のデータ構造を用い得る。図２によって示されるように、本明細書で開示される複数の実施形態は、ビットレベル基準又はニブルレベル基準でウェアレベリングを実行することを可能にする。本明細書で開示される複数の実施形態は、図３を参照して以下で説明されるように、対応するユーザビット１３０よりはるかに頻繁に変更し得るＥＣＣビット１３５を格納するメモリセル２１０の消耗に対処する。
【００７１】
図３は、本開示の様々な実施形態による、コードワード２２０のＥＣＣビット１３５とコードワード２２０のユーザビット１３０との間の差を示す図３００である。特に、図３００は、コードワード２２０Ａ−Ｃにおけるユーザビット１３０Ａ−Ｃ及びＥＣＣビット１３５Ａ−Ｃがコードワード２２０Ａ−Ｃに対して実行される２つの書き込みコマンド１５０に応じて更新されることを示す。
【００７２】
コードワード２２０Ａは、コードワード２２０Ａが「００００００００００００００００」のユーザビット１３０Ａを及び「００」の対応するＥＣＣビット１３５Ａを含むメモリセル２１０の初期設定を表し得る。一実施形態において、ユーザビット１３０Ａがメモリ１０５の第１の部分で格納されてよく、一方で、ＥＣＣビット１３５Ａがメモリ１０５の第２の部分で格納される。メモリ１０５の第１の部分及びメモリ１０５の第２の部分は、メモリ１０５内の不連続で離れた位置であり得る。
【００７３】
第１の書き込みコマンド１５０がコードワード２２０Ａに対して実行されて、「０００００００００００００００１」のユーザビット１３０Ｂ及び「８３」の対応するＥＣＣビット１３５Ａを含むコードワード２２０Ｂを生成し得る。コードワード２２０Ａと同様に、ユーザビット１３０Ｂがメモリ１０５の第１の部分に書き込まれ得、ＥＣＣビット１３５Ｂがメモリ１０５の第２の部分に書き込まれ得る。
【００７４】
書き込み割合は、変更したビットの数とビットの総数との比率を指す。ユーザビット１３０Ａ−Ｃの書き込み割合は、ＥＣＣビット１３５Ａ−Ｃに対する書き込み割合より低いことが多い。図３によって示されるように、１６個のユーザビット１３０Ｂのうちの１ビットのみが第１の書き込みコマンド１５０に応じて変更され、一方で、ＥＣＣビット１３５Ｂの両方が第１の書き込みコマンド１５０に応じて変更される。したがって、ＥＣＣビット１３５Ｂは、第１の書き込みコマンド１５０に応じて、ユーザビット１３０Ｂより高い書き込み割合（例えば、更新されたビットの数／総ビット数）を有する。
【００７５】
第２の書き込みコマンド１５０がコードワード２２０Ｂに対して実行されて、「０００００００００００００００３」のユーザビット１３０Ｃ及び「０６」の対応するＥＣＣビット１３５Ｃを含むコードワード２２０Ｃを生成し得る。コードワード２２０Ａ−Ｂと同様に、ユーザビット１３０Ｃがメモリ１０５の第１の部分に書き込まれ得、ＥＣＣビット１３５Ｃがメモリ１０５の第２の部分に書き込まれ得る。
【００７６】
コードワード２２０Ｂと同様に、１６個のユーザビット１３０Ｃのうちの１ビットのみが第２の書き込みコマンド１５０に応じて変更され、一方で、ＥＣＣビット１３５Ｃの両方が第１の書き込みコマンド１５０に応じて変更される。したがって、ＥＣＣビット１３５Ｃはまた、第２の書き込みコマンド１５０に応じて、ユーザビット１３０Ｃより高い書き込み割合（例えば、更新されたビットの数／総ビット数）を有する。
【００７７】
メモリ１０５内のデータのストレージを管理するＥＣＣビット１３５Ａ−Ｃ等の制御ビットの性質は、制御ビットが実際のユーザビット１３０Ａ−Ｃよりはるかに頻繁に変更するようなものである。しかしながら、ＥＣＣビット１３５Ａ−Ｃ等の制御ビットを格納するメモリセル２１０は、典型的には、これらのメモリセル２１０に発生する場合がある増加した消耗に対処すべくウェアレベリングされない。上記及び以下で説明されるように、本明細書で開示される複数の実施形態は、ＥＣＣビット１３５Ａ−Ｃを格納するメモリセル２１０に対して発生した増加した消耗に対処すべく、ユーザビット１３０Ａ−Ｃ及びＥＣＣビット１３５Ａ−Ｃに対してウェアレベリングを実行する。
【００７８】
理解されるべきであるように、各々のメモリセル２１０がデータのビットを格納するような方法で図３００が説明される。しかしながら、本明細書で説明される複数の実施形態が、各々のメモリセル２１０が２ビットのデータ、１ニブルのデータ、又は任意の他の数のビットのデータのいずれかを格納するように実装され得ることが理解されるべきである。
【００７９】
図４は、本開示の様々な実施形態による、ウェアレベリングの方法４００を示す図である。図４は、ユーザビット１３０及びＥＣＣビット１３５、並びにコードワード２２０内のユーザビット１３０を格納するよう構成されたメモリ１０５の第１の部分の対応する書き込みカウント１２５を含むコードワード２２０を示す。理解されるべきであるように、ユーザビット１３０、ＥＣＣビット１３５、及び書き込みカウント１２５が連続して互いに隣接して格納されるものとして図４に示されるが、ユーザビット１３０、ＥＣＣビット１３５、及び書き込みカウント１２５が、不連続でメモリ１０５の離れた位置で格納されてよい。ユーザビット１３０、ＥＣＣビット１３５、及び書き込みカウント１２５内のビットはまた、メモリ１０５内で連続又は不連続に格納され得る。一実施形態において、ユーザビット１３０及びＥＣＣビット１３５が共に連続して論理的に格納されてよく、ユーザビット１３０及びＥＣＣビット１３５内のビットはまた、共に連続して論理的に格納されてよい。
【００８０】
方法４００は、ウェアレベリング４０５（本明細書で循環シフトとも称される）が実行されたときのユーザビット１３０、ＥＣＣビット１３５、及び書き込みカウント１２５の位置を示す。一実施形態において、ウェアレベリング４０５を実行することは、書き込みカウントに基づいて計算され、図５及び図６を参照して以下でさらに説明される循環シフターオフセットに従って、ユーザビット１３０及びＥＣＣビット１３５内のビットの各々を格納する物理アドレスをシフトすることを含む。本実施形態において及び図４によって示されるように、ユーザビット１３０及びＥＣＣビット１３５は、ウェアレベリング４０５を実行した後、異なるメモリセル２１０で格納されるべく、位置を変更（例えば、回転又はシフト）する。さらに、ウェアレベリング４０５を実行している間のコードワード２２０内のビットの移動の詳細が、図５及び図６を参照してさらに以下で説明される。
【００８１】
しかしながら、書き込みカウント１２５の位置は同じままであり、ウェアレベリング４０５を実行した後に変更しない。図７を参照して以下でさらに説明されるように、書き込みカウント１２５を格納するメモリセルが、ＢＧＣモジュール１１０によってさらに管理され、書き込みカウント１２５内のビットを格納する特定のメモリセルが他のメモリセルの前に消耗することを防止する。
【００８２】
図５は、本開示の様々な実施形態による、ウェアレベリングを実行する方法５００の例を示す図である。方法５００は、書き込みカウント１２５に従ってウェアレベリングを実行した後、どのようにコードワード２２０がメモリセル２１０Ａ−Ｒに格納されるかを示す。メモリ１０５に格納されるコードワード２２０又はデータは、１６個のユーザビット１３０（「０００００００００００００００１」）及び２個のＥＣＣビット１３５（「８３」）を含む。ユーザビット１３０は、書き込みコマンド１５０で受信され、書き込みコマンド１５０から抽出され得る。ＥＣＣビット１３５は、ユーザビット１３０に基づいて、ＥＣＣモジュール１２０によって計算され得る。
【００８３】
コードワード２２０は、メモリ１０５の第１の部分５０５及びメモリ１０５の第２の部分５１０に格納され得る。第１の部分５０５及び第２の部分５１０は、連続して互いに隣接してよく、又は連続しないで互いから離れてよい。典型的には、ユーザビット１３０が第１の部分５０５に格納され、一方で、ＥＣＣビット１３５が第２の部分５１０に格納される。本明細書で開示される複数の実施形態は、ユーザビット１３０が第２の部分５１０に格納され、ＥＣＣビット１３５が第１の部分５０５に格納されることを可能にする。
【００８４】
ユーザビット１３０を備え書き込みコマンド１５０を受信し、対応するＥＣＣビット１３５を計算すると、ユーザビット１３０が格納されるメモリ１０５の第１の部分５０５のアドレスに対する書き込みカウント１２５が、１だけインクリメントされ得る。一実施形態において、メモリ１０５の様々なブロックに対する書き込みカウント１２５が、ユーザビット１３０を格納するメモリ１０５の第１の部分５０５及びＥＣＣビット１３５を格納するメモリ１０５の第２の部分５１０から離れたメモリ１０５の第３の部分で格納され得る。例示的な方法５００に示されるように、ユーザビット１３０を格納するメモリ１０５の第１の部分５０５に対する書き込みカウント１２５が、書き込みコマンド１５０を受信した後、１だけインクリメントされて１０２４になる。図７を参照して以下でさらに説明されるように、書き込みカウント１２５は、メモリ１０５に格納される前に、ＢＧＣ符号化を用いてさらに符号化される。
【００８５】
ユーザビット１３０が格納されるメモリ１０５の第１の部分５０５の書き込みカウント１２５をインクリメントした後、循環シフターモジュール１１５は、メモリセル２１０Ａ−Ｒを決定し得る。ここで、ユーザビット１３０及びＥＣＣビット１３５が書き込みカウント１２５に基づいて格納される。図５のコードワード２２０によって示されるように、デフォルトでは、同じシーケンスで、ユーザビット１３０がメモリ１０５の第１の部分５０５のメモリセル２１０Ａ−Ｐで格納されてよく、ＥＣＣビット１３５がメモリ１０５の第２の部分５１０のメモリセル２１０Ｑ−Ｒで格納されてよい。上記のように、メモリ１０５の第１の部分５０５及びメモリ１０５の第２の部分５１０は、メモリ１０５内のメモリセル２１０Ａ−Ｒの連続しないブロックであり得る。
【００８６】
しかしながら、上記のように、メモリセル２１０Ａ−Ｒが異なる回数書き込まれてアクセスされる場合があり、これは、他のメモリセル２１０Ａ−Ｒの前に消耗する特定のメモリセル２１０Ａ−Ｒをもたらす。メモリ１０５のメモリセル２１０Ａ−Ｒのこの等しくない消耗を防止すべく、循環シフターモジュール１１５は、循環シフターオフセットに基づいてどのようにビットがメモリ１０５内の第１の部分５０５及び第２の部分５１０で格納されるかを調整することによって、ウェアレベリングを実行するよう構成される。循環シフターオフセットは、メモリ１０５の第１の部分５０５及び第２の部分５１０内のメモリセル２１０Ａ−Ｒの数を表す整数値であって、メモリ１０５の第１の部分５０５及び第２の部分５１０内のメモリセル２１０Ａ−Ｒにユーザビット１３０及びＥＣＣビット１３５を書き込む前にその整数値だけユーザビット１３０及びＥＣＣビット１３５をシフトする。
【００８７】
一実施形態において、循環シフターオフセットは、書き込みカウント１２５の関数であり、書き込みコマンドと読み出しコマンドとの間のデータに適用される。いくつかの実施形態において、循環シフターオフセットは、Ｉｎｔｅｇｅｒ（書き込みカウント１２５／Ｋ）に等しい。ここで、Ｋは書き込みカウント１２５と関連している予め定められた定数である。いくつかの実施形態において、循環シフターオフセットは、書き込みカウント１２５の関数である任意の値であり得る。例えば、循環シフターオフセットは、Ｉｎｔｅｇｅｒ（ａ×ｌｏｇ（書き込みカウント）＋ｂ）に等しくてよい。ここで、ａ及びｂは予め定められた定数である。
【００８８】
図５に示される例示的な方法５００においてＫ＝１０２４と仮定する。この場合、循環シフターモジュール１１５は、循環シフターオフセットが１（Ｉｎｔｅｇｅｒ（１０２４／１０２４））であると決定するよう構成される。循環シフターモジュール１１５は、その後、循環シフターオフセットが１であるので、ユーザビット１３０及びＥＣＣビット１３５の格納が、１つのメモリセル２１０Ａ−Ｒだけ右にシフトされるべきであると決定し得る。
【００８９】
図５に示されるように、最後のビット「３」がメモリセル２１０Ａの位置に移動するように、循環シフターモジュール１１５は、全てのユーザビット１３０及びＥＣＣビット１３５を１つのメモリセル２１０Ａ−Ｒだけ右にシフトする。メモリセル２１０Ａは、デフォルトでは、第１のユーザビット１３０「０」を格納するが、代わりに、循環シフターモジュール１１５によって実行されたウェアレベリングに起因してＥＣＣビット１３５「３」を格納する。同様に、メモリセル２１０Ｂ−Ｑは、１つのメモリセルだけ右にシフトされたユーザビット１３０を格納し、メモリセル２１０Ｒは、循環シフターモジュール１１５によって実行されたウェアレベリングに起因して、ＥＣＣビット１３５「３」の代わりにＥＣＣビット１３５「８」を格納する。
【００９０】
いくつかの実施形態において、循環シフターモジュール１１５は、ビットレベル、ニブルレベル、分数ニブルレベル、又は複数ニブルレベルの循環シフターオフセットに従って、ユーザビット１３０及びＥＣＣビット１３５の格納を回転するよう構成される。複数ニブルレベルの循環シフターオフセットの例は、循環シフターオフセットが、例えば、２、４、又は８のニブル等の倍数に等しいとき、書き込みカウント１２５が１０２４であるときを含む。分数ニブルレベルの循環シフターオフセットの例は、循環シフターオフセットが、例えば、ニブルの１／４又は１／２等の分数に等しいとき、書き込みカウント１２５が１０２４であるときを含む。このようにして、循環シフターモジュール１１５は、ニブルレベル、分数ニブルレベル、又は複数ニブルレベルでユーザビット１３０及びＥＣＣビット１３５を格納する特定のメモリセル２１０Ａ−Ｒを決定するよう構成される。
【００９１】
典型的には、ユーザビット１３０がメモリ１０５の第１の部分５０５に格納され、ＥＣＣビット１３５がメモリ１０５の第２の部分５１０に格納されるが、本明細書で開示されるウェアレベリングの複数の実施形態は、ＥＣＣビット１３５がメモリ１０５の第１の部分５０５及びメモリ１０５の第２の部分５１０に格納されることを可能にする。同様に、本明細書で開示されるウェアレベリングの複数の実施形態は、ユーザビット１３０がメモリ１０５の第２の部分５１０及びメモリ１０５の第１の部分５０５に格納されることを可能にする。図５に示されるこの例は、循環シフターオフセットが１ビットであることを示すが、循環シフターオフセットが、別の例では、１ニブル、複数のビット、又は複数のニブルであり得ることが理解されるべきである。
【００９２】
図６は、本開示の様々な実施形態による、ウェアレベリングを実行する方法６００の他の例を示す図である。方法６００は、メモリ１０５の第１の部分５０５の書き込みカウント１２５が１０２４の代わりに２０４８である点を除いて方法５００と同様である。ユーザビット１３０を備える書き込みコマンド１５０を受信し、ユーザビット１３０に基づいてＥＣＣビット１３５を計算した後、２０４８の書き込みカウント１２５が計算される。循環シフターオフセットを決定するのに用いられる２０４８の書き込みカウント１２５はまた、書き込みコマンド１５０の受信に応じて１だけインクリメントされ得る。２０４８の書き込みカウント１２５は、メモリ１０５の第１の部分５０５及びメモリ１０５の第２の部分５１０から離れてメモリ１０５に格納され得る。
【００９３】
一実施形態において、循環シフターモジュール１１５は、書き込みカウント１２５に基づいて、ユーザビット１３０及びＥＣＣビット１３５の各々を格納するメモリセル２１０Ａ−Ｒを決定し得る。図５を参照して上記のように、デフォルトでは、コードワード２２０によって示されるように、同じシーケンスで、ユーザビット１３０がメモリ１０５の第１の部分５０５のメモリセル２１０Ａ−Ｐで格納されてよく、ＥＣＣビット１３５がメモリ１０５の第２の部分５１０のメモリセル２１０Ｑ−Ｒで格納されてよい。しかしながら、メモリ１０５の第１の部分５０５の２０４８の書き込みカウント１２５は比較的高いので、ウェアレベリングは計算された循環シフターオフセットに基づいて実行され得る。
【００９４】
図５を参照して上記のように、循環シフターオフセットが様々な方法で計算され得る。循環シフターオフセットがＩｎｔｅｇｅｒ（書き込みカウント１２５／Ｋ）に基づいて再び計算されることを想定する。ここで、Ｋ＝２０４８であり、循環シフターオフセットが２に等しくてよい。循環シフターモジュール１１５は、その後、循環シフターオフセットが２であるので、ユーザビット１３０及びＥＣＣビット１３５の格納が、２つのメモリセル２１０Ａ−Ｒだけ右にシフトされるべきであると決定し得る。
【００９５】
図６に示されるように、最後のビット「３」がメモリセル２１０Ｂの位置に移動し、最後から２番目のビット「８」がメモリセル２１０Ａの位置に移動するように、循環シフターモジュール１１５は、全てのユーザビット１３０及びＥＣＣビット１３５を２つのメモリセル２１０Ａ−Ｒだけ右にシフトする。メモリセル２１０Ａ−Ｂは、デフォルトでは、第１の及び第２のユーザビット１３０「００」を格納するが、代わりに、循環シフターモジュール１１５によって実行されたウェアレベリングに起因してＥＣＣビット１３５「３」及びユーザビット１３０「０」を格納する。同様に、メモリセル２１０Ｂ−Ｑは、１つのメモリセルだけ右にシフトされたユーザビット１３０を格納する。メモリセル２１０Ｑが「１」のユーザビット１３０を格納し、メモリセル２１０Ｒが「８」のＥＣＣビット１３５を格納する。
【００９６】
図５及び図６によって示されるように、書き込みカウント１２５及び定数Ｋは、循環シフターオフセットを計算するのに用いられる主な係数であり、これは、メモリセル２１０Ａ−Ｒの数に対応し、そのメモリセル２１０Ａ−Ｒの数だけメモリ１０５の第１の部分５０５及び第２の部分５１０内のユーザビット１３０及びＥＣＣビット１３５をシフトする。本明細書で開示されるウェアレベリングの複数の実施形態は、ＥＣＣビット１３５がメモリ１０５の第１の部分５０５及びメモリ１０５の第２の部分５１０に格納されることを可能にする。同様に、本明細書で開示されるウェアレベリングの実施形態は、ユーザビット１３０がメモリ１０５の第２の部分５１０及びメモリ１０５の第１の部分５０５に格納されることを可能にする。したがって、本明細書で開示されるウェアレベリングの複数の実施形態は、メモリセル２１０Ａ−Ｒの寿命を延ばし、したがって、メモリ１０５全体の寿命を延ばす。本明細書で開示されるウェアレベリングの複数の実施形態はまた、ビット又はニブルを格納するためのメモリ１０５内の位置がデータの大きいブロックの位置を変更する代わりに変更されるきめ細かいウェアレベリングが実行されることを可能にする。
【００９７】
図７は、本開示の様々な実施形態による、時間（ｔ）と共にメモリ１０５の第１の部分５０５の書き込みカウント１２５を格納するメモリセル７１０に対するウェアレベリングを実行する方法７００の例を示す図である。図１を参照して上記のように、ＢＧＣモジュール１１０は、書き込みコマンド１５０に含まれるユーザビット１３０が書き込まれるべきであるメモリ１０５の第１の部分５０５の書き込みカウント１２５を取得する。書き込みカウント１２５を取得した後、ＢＧＣモジュール１１０は、メモリ１０５の第１の部分５０５の書き込みカウント１２５をインクリメントし得る。図７の左側のボックス７２０は、書き込みコマンド１５０を受信することに応じて時間と共にインクリメントされるメモリ１０５の第１の部分５０５の書き込みカウント１２５を表す。図７の右側のボックス７２５は、書き込みカウント１２５に対してインクリメント及びＢＧＣ符号化を実行した後のメモリ１０５の第１の部分５０５の書き込みカウント１２５を表す。
【００９８】
一実施形態において、書き込みカウント１２５内の書き込みカウントビットが実質的に均等な方式でメモリセル７１０に書き込まれるように、ＢＧＣモジュール１１０は、書き込みカウント１２５に対してＢＧＣ符号化を実行し、書き込みカウント１２５を再符号化するよう構成される。このような訳で、ＢＧＣモジュール１１０は、ＢＧＣ符号化に従って書き込みカウントビットに対してウェアレベリングを実行し、書き込みカウントビットが実質的等しい回数書き込まれ、及び／又は読み出されることを保証する。
【００９９】
ボックス７２０及びボックス７２５の両方において、縦の列は、時間と共に書き込みカウント１２５がインクリメントされるような書き込みカウント１２５のビット（又はニブル）を表す。ボックス７２０及びボックス７２５内の各々の列は、経時的な書き込みカウント１２５への更新を表す。横の列は、最下位ビット７０３から最上位ビット７０６までの書き込みカウント１２５内の個々のビット（又はニブル）を表す。図７に示されるように、ボックス７２０及びボックス７２５の上の行は、書き込みカウント１２５の最下位ビット７０３を表し、一方で、ボックス７２０及びボックス７２５の下の行は、書き込みカウント１２５の最上位ビット７０６を表す。
【０１００】
ボックス７２０によって示されるように、書き込みカウント１２５の最下位ビット７０３は、書き込みカウント１２５がインクリメントされるたびに変更し、一方で、書き込みカウント１２５の最上位ビット７０６は、一度だけ変更する。最下位ビット７０３と最上位ビット７０６との間におけるビットはまた、均等でない方式で書き込まれ、及び／又は読み出される。このようにして、書き込みカウント１２５に対してＢＧＣ符号化が実行される前に、書き込みカウント１２５内の書き込みカウントビットは、これらのビットを格納するメモリセル７１０を均等でない方式で消耗させる、均等でない方式で変更される。
【０１０１】
いくつかの実施形態によれば、ＢＧＣモジュール１１０は、書き込みカウント１２５をメモリ１０５の第３の部分に格納する前に、書き込みカウント１２５内のビットに対してＢＧＣ符号化を実行する。ＢＧＣ符号化を実行することは、メモリセル７１０の各々が実質的に均等な方式で書き込まれ、及び／又は読み出されるように、書き込みカウント１２５のビットの各々を格納するメモリセル７１０に対処すべく、書き込みカウント１２５のビットを変更することを指す。
【０１０２】
一実施形態において、ＢＧＣモジュール１１０が書き込みカウント１２５内のビットに対してＢＧＣ符号化を実行した後、書き込みカウント１２５内のビットは、より均等な方式でインクリメントした後、時間と共に変更する。ボックス７２５によって示されるように、最下位ビット７０３は４回変更し、一方で、最上位ビット７０６は３回変更する。このようにして、書き込みカウント１２５内のビットに対してＢＧＣ符号化を実行した後、最下位ビット７０３を格納するメモリセル７１０が、それほど頻繁に書き込まれず、最上位ビット７０６を格納するメモリセル７１０がより頻繁に書き込まれる。最下位ビット７０３と最上位ビット７０６との間におけるビットを格納するメモリセル７１０はまた、ＢＧＣ符号化を実行した後、より均等な方式で書き込まれる。このようにして、書き込みカウント１２５内のビットに対してＢＧＣ符号化を実行することによって、ビットがより均等な方式で更新されることを可能にする。
【０１０３】
図８は、本開示の様々な実施形態による、メモリシステム８００の実施形態の図である。メモリシステム８００は、図１に示されるメモリシステム１００と同様であり得る。メモリシステム８００は、本明細書で説明されたウェアレベリングメカニズムを実装及び／又はサポートするよう構成され得る。メモリシステム８００が単一ノードに実装されてよく、又はメモリシステム８００の機能が複数のノードに実装されてよい。当業者は、用語「メモリシステム」が広範囲のデバイスを包含し、メモリシステム８００が単に一例に過ぎないことを認識するだろう。メモリシステム８００が説明の明確性のために含まれるが、本開示の適用を特定のメモリシステムの実施形態又はメモリの実施形態のクラスに限定することを決して意味するものではない。本開示で説明された少なくともいくつかの特徴及び／又は方法が、メモリシステム８００等のネットワーク装置又はモジュールに実装され得る。例えば、本開示における特徴及び／又は方法が、ハードウェア、ファームウェア、及び／又はハードウェア上で動作するようインストールされたソフトウェアを用いて実装され得る。図８に示されるように、メモリシステム８００は、１又は複数の入口ポート８１０、データを受信するための受信器ユニット（Ｒｘ）８２０、データを処理するための少なくとも１つのプロセッサ、論理ユニット、又は中央演算装置（ＣＰＵ）８３０、データを送信するための送信器ユニット（Ｔｘ）８４０、１又は複数の出口ポート８５０、及びデータを格納するためのメモリ１０５を備える。
【０１０４】
プロセッサ８３０は、１又は複数のマルチコアプロセッサを備え得、図１で説明されたメモリと同様に、データストア、バッファ等として機能し得るメモリ１０５に連結され得る。プロセッサ８３０は、汎用プロセッサとして実装されてよく、又は、１又は複数の特定用途向け集積回路（ＡＳＩＣ）及び／又はデジタルシグナルプロセッサ（ＤＳＰ）の一部であってよい。プロセッサ８３０は、プロセッサ８３０によって実行可能である各々のソフトウェア命令である、循環シフターモジュール１１５及びＢＧＣモジュール１１０を備え得る。そのため、循環シフターモジュール１１５と、ＢＧＣモジュール１１０と、関連方法及びシステムとを包含することは、メモリシステム８００の機能に対する改善を提供する。さらに、循環シフターモジュール１１５及びＢＧＣモジュール１１０は、特定の物品（例えば、ネットワーク）を異なる状態に変換することをもたらす。代替的な実施形態において、循環シフターモジュール１１５及びＢＧＣモジュール１１０は、プロセッサ８３０によって実行され得るメモリ１０５に格納された命令として実装され得る。
【０１０５】
メモリ１０５は、図１で説明されたメモリ１０５と同様にストレージクラスメモリであり得る。メモリ１０５は、コンテンツを一時的に格納するためのキャッシュ、例えば、ＲＡＭを備え得る。さらに、メモリ１０５は、コンテンツを比較的長く格納するための長期記憶ストレージ、例えば、ソリッドステートドライブ（ＳＳＤ）を備え得る。例えば、キャッシュ及び長期記憶ストレージは、ＤＲＡＭ、ＳＣＭ、ＳＳＤ、ハードディスク、又はそれらの組み合わせを含み得る。メモリ１０５は、本明細書で説明されたように、書き込みカウント１２５、ユーザビット１３０、ＥＣＣビット１３５、及び循環シフターオフセット７７０を格納するよう構成され得る。
【０１０６】
メモリシステム８００に対する実行可能命令をプログラミング及び／又はロードすることによって、プロセッサ８３０及び／又はメモリ１０５のうちの少なくとも１つが変更され、メモリシステム８００を本開示によって教示される新たな機能を有する特定のマシン又は装置、例えば、マルチコア転送アーキテクチャに部分的に変換することが理解される。電気工学及びソフトウェア工学の技術では基本的なことであるが、実行可能なソフトウェアをコンピュータにロードすることによって実装され得る機能は、周知の設計ルールによってハードウェア実装に変換され得る。概念をハードウェアで実装するか、ソフトウェアで実装するかの決定は、典型的には、ソフトウェアネットワーク領域からハードウェアネットワーク領域に変換することに関与する任意の問題よりはむしろ、設計の安定性及び製造されるユニット数の考慮で決まる。概して、さらに頻繁に変更する可能性がある設計は、ハードウェア実装を再設計することがソフトウェア設計を再設計することより費用がかかるので、ソフトウェアで実装されることが望ましいだろう。概して、安定的であり、大量生産される設計は、大量生産の実行に関してハードウェア実装がソフトウェア実装より費用がかからない場合があるので、ハードウェア、例えば、ＡＳＩＣで実装されることが望ましいだろう。しばしば、設計がソフトウェアの形態で開発及び試験され得、後に、ソフトウェアの命令をハードウェアに組み込むＡＳＩＣにおいて、周知の設計ルールによって均等なハードウェア実装に変換され得る。新しいＡＳＩＣによって制御されるマシンが特定のマシン又は装置であるのと同じように、実行可能命令がプログラミング及び／又はロードされたコンピュータは同様に、特定のマシン又は装置としてみなされ得る。
【０１０７】
図９は、本開示の様々な実施形態による、メモリ１０５に対してウェアレベリングを実行する方法９００を示すフローチャートである。方法９００は、メモリシステム１００又はメモリシステム８００によって実行され得る。方法９００は、書き込みコマンド１２５がメモリシステム１００又はメモリシステム８００によって受信されるとき、実行され得る。
【０１０８】
ステップ９０３では、メモリ１０５の第１の部分５０５に複数のユーザビット１３０を書き込むための書き込みコマンド１５０が受信される。例えば、Ｒｘ８２０が書き込みコマンド１５０を受信する。一実施形態において、書き込みコマンド１５０は、複数のユーザビット１３０及びメモリ１０５の第１の部分５０５のアドレス（物理アドレス又は論理アドレス）を備える。一実施形態において、複数のユーザビット１３０は、メモリ１０５の第２の部分５１０で格納され、且つ、複数のユーザビット１３０に対する誤り検出を実行するのに用いられる複数のＥＣＣビット１３５と関連している。
【０１０９】
ステップ９０５では、循環シフターオフセット７７０が、メモリ１０５の第１の部分５０５の書き込みカウント１２５に基づいて、決定される。図５及び図６を参照して上記のように、例えば、プロセッサ８３０は、書き込みカウント１２５に基づいて、循環シフターオフセット７７０を決定する。循環シフターオフセット７７０は、メモリ１０５又はメモリシステム１００又はメモリシステム８００内の任意の箇所に格納され得る。
【０１１０】
ステップ９０６では、ユーザビット１３０及びＥＣＣビット１３５が、循環シフターオフセット７７０に基づいて、メモリ１０５の第１の部分５０５及びメモリ１０５の第２の部分５１０内の複数のメモリセル２１０に書き込まれる。例えば、プロセッサ８３０は、循環シフターモジュール１１５を実行し、循環シフターオフセット７７０に基づいて、メモリ１０５の第１の部分５０５及びメモリ１０５の第２の部分５１０内のメモリセル２１０に複数のユーザビット１３０及びＥＣＣビット１３５を書き込み得る。
【０１１１】
図１０は、本開示の様々な実施形態による、メモリ１０５に対するウェアレベリングを実行するよう構成された装置１０００を示す図である。装置１００は、受信手段１００３、決定手段１００６、及び書き込み手段１００９を備える。受信手段１００３はメモリ１０５の第１の部分５０５に複数のユーザビット１３０を書き込むための書き込みコマンド１５０を受信するよう構成され、書き込みコマンド１５０は複数のユーザビット１３０及びメモリ１０５の第１の部分５０５のアドレスを含み、ユーザビット１３０はメモリ１０５の第２の部分５１０で格納され、且つ、複数のユーザビット１３０に対する誤り検出を実行するのに用いられる複数のＥＣＣビット１３５と関連している。決定手段１００６は、メモリ１０５の第１の部分５０５の書き込みカウント１２５に基づいて、循環シフターオフセット７７０を決定するよう構成される。書き込み手段１００９は、循環シフターオフセット７７０に基づいて、メモリ１０５の第１の部分５０５及びメモリ１０５の第２の部分５１０内の複数のメモリセル２１０に複数のユーザビット１３０及び複数のＥＣＣビット１３５を書き込むよう構成される。
【０１１２】
本明細書で説明されたシステム、方法、及び装置は、ビットレベル及び／又はニブルレベルでＥＣＣビットとユーザビットとの間で回転するためのメカニズムを提供する。循環シフター機能に基づく書き込みカウント１２５は、各々の書き込みコマンド１５０の後に記録された書き込みカウント１２５の機能として、回転頻度を変更するメカニズムを提供する。書き込みカウント１２５内のビットは、ＢＧＣ符号化で自己ウェアレベリングされる。本明細書で開示されたシステム、方法、及び装置は、エネルギー、耐久性、及び性能の目的でＳＣＭビット修正機能を十分に利用する。
【０１１３】
複数の実施形態が本開示で提供されたが、開示されたシステム及び方法は、本開示の思想又は範囲から逸脱することなく、多くの他の特定の形態で具現化され得ることが理解されるべきである。本例は例示的なものであって限定的なものでないとしてみなされるべきであり、その意図は本明細書で与えられた詳細に限定されるべきでない。例えば、様々な要素若しくは構成要素が他システムに組み合わされても統合されてもよく、又は特定の特徴が省略されても実装されなくてもよい。
【０１１４】
さらに、様々な実施形態において個別のもの又は独立したものとして説明されて示された技術、システム、サブシステム、及び方法は、本開示の範囲から逸脱することなく、他のシステム、モジュール、技術、又は方法と組み合わされても統合されてもよい。互いに連結される又は直接連結される、又は通信するものとして示され又は説明された他のアイテムは、電気的であれ、機械的であれ、又は別の方法であれ、いくつかのインタフェース、デバイス、又は中間の構成要素を介して間接的に連結又は通信され得る。変更、置換、及び修正の他の例が、当業者によって確認可能であり、本明細書で開示された思想及び範囲から逸脱することなく作成され得る。
【国際調査報告】
2021506024.tif 000013
2021506024.tif 000014
2021506024.tif 000015