(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-07-26
(45)【発行日】2024-08-05
(54)【発明の名称】メモリコントローラおよびメモリシステム
(51)【国際特許分類】
G06F 11/10 20060101AFI20240729BHJP
【FI】
G06F11/10 656
(21)【出願番号】P 2021048592
(22)【出願日】2021-03-23
【審査請求日】2023-09-11
(73)【特許権者】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】齊藤 貴樹
【審査官】三坂 敏夫
(56)【参考文献】
【文献】特開2016-218897(JP,A)
【文献】特表2003-508861(JP,A)
【文献】特開2010-250816(JP,A)
【文献】特開2020-87490(JP,A)
【文献】特開2004-341989(JP,A)
【文献】特開2018-160060(JP,A)
【文献】米国特許出願公開第2018/0287634(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/08-11/10
(57)【特許請求の範囲】
【請求項1】
複数の不揮発性メモリを制御するメモリコントローラにおいて、
第1のデータを記憶するメモリと、
前記メモリに記憶されている前記第1のデータに対する処理を実行する処理部と、
を具備し、
前記処理部は、
ライト処理時に、
前記第1のデータと、前記第1のデータに対応する付加データとを含む第2のデータを生成し、
前記第2のデータのライト先の状態を示す情報に基づいて、前記第2のデータのビット順序を変更し、
ビット順序が変更された前記第2のデータを、前記複数の不揮発性メモリにライトし、
リード処理時に、
前記複数の不揮発性メモリから、ビット順序が変更された前記第2のデータをリードし、
前記情報に基づいて、リードした前記第2のデータのビット順序を元に戻す、
メモリコントローラ。
【請求項2】
前記情報は、前記第2のデータのライト先のライト回数、リード回数、イレーズ回数、ライト頻度、リード頻度、イレーズ頻度のうちの少なくとも1つを含む、
請求項1のメモリコントローラ。
【請求項3】
前記処理部は、
前記情報を重み付けした値を管理し、
前記ライト処理時に、前記値に基づいて、前記第2のデータのビット順序を変更し、
前記リード処理時に、前記値に基づいて、リードした前記第2のデータのビット順序を元に戻す、
請求項1または請求項2のメモリコントローラ。
【請求項4】
前記処理部は、
前記ライト処理時に、
前記第1のデータの種類に基づいて、前記第2のデータに対してビット順序の変更を行うか否かを判断する第1の判断を実行し、
前記第1の判断によってビット順序の変更を行うと判断した場合に、前記第2のデータのビット順序を変更する第1の変更処理を実行し、
前記第1の判断によってビット順序を変更しないと判断した場合に、前記第1の変更処理を実行せず、
前記リード処理時に、
前記第1のデータの種類に基づいて、前記第2のデータに対してビット順序を元に戻すか否かを判断する第2の判断を実行し、
前記第2の判断によってビット順序を元に戻すと判断した場合に、前記第2のデータのビット順序を元に戻す第2の変更処理を実行し、
前記第2の判断によってビット順序を元に戻すと判断しなかった場合に、前記第2の変更処理を実行しない、
請求項1~3のうちのいずれか1項のメモリコントローラ。
【請求項5】
前記処理部は、
前記ライト処理時に、
前記第1のデータが外部の装置から受信したユーザデータである場合に、前記第2のデータに対してビット順序の変更を行うと判断し、前記第1のデータが前記ユーザデータではないシステム管理情報である場合に、前記第2のデータに対してビット順序の変更を行わないと判断し、
前記リード処理時に、
リードした前記第2のデータに含まれている前記第1のデータが前記ユーザデータである場合に、リードした前記第2のデータのビット順序を元に戻すと判断し、リードした前記第2のデータに含まれている前記第1のデータが前記システム管理情報である場合に、ビット順序を変更しないと判断する、
請求項4のメモリコントローラ。
【請求項6】
前記処理部は、
前記ライト処理時に、前記第2のデータが連続するアドレスにしたがって追記されるライト形式により前記複数の不揮発性メモリにライトされる場合に、ビット順序を変更することなく前記第2のデータを前記複数の不揮発性メモリにライトし、
前記リード処理時に、前記連続するアドレスにしたがって追記された前記第2のデータのビット順序を変更しない、
請求項1のメモリコントローラ。
【請求項7】
前記処理部は、
論理アドレスと、物理アドレスと、前記物理アドレスの示す位置へライトされた前記第2のデータに関するビット順序の変更パターンとを、関連付けているアドレス変換テーブルを管理し、
前記ライト処理時に、前記変更パターンに基づいて、前記物理アドレスの示す位置にライトされる前記第2のデータのビット順序を変更し、
前記リード処理時に、前記アドレス変換テーブルを参照し、前記変更パターンに基づいて、前記物理アドレスの示す位置からリードした前記第2のデータのビット順序を元に戻す、
請求項1のメモリコントローラ。
【請求項8】
前記複数の不揮発性メモリは、複数のメモリチップであり、
前記処理部は、
前記ライト処理時に、ビット順序が変更された前記第2のデータを、前記複数のメモリチップに跨ってライトし、
前記リード処理時に、前記複数のメモリチップに跨って記憶されておりビット順序が変更された前記第2のデータを、前記複数のメモリチップからリードする、
請求項1~7のうちのいずれか1項のメモリコントローラ。
【請求項9】
前記付加データは、前記第1のデータに対するエラー検出およびエラー訂正を行うために使用されるパリティを含み、
前記処理部は、SCM(Storage Class Memory)モジュールとしての機能を実現する、
請求項1~8のうちのいずれか1項のメモリコントローラ。
【請求項10】
前記処理部は、前記情報が更新された場合に、更新された前記情報を、前記複数の不揮発性メモリにおける前記第2のデータの位置とは異なる位置にライトする、
請求項1~9のうちのいずれか1項のメモリコントローラ。
【請求項11】
前記情報は、前記第2のデータのライト先と前記第2のデータと同じサイズの第3のデータのライト先との状態を示し、
前記処理部は、
前記第2のデータのライト処理時に、
前記情報に基づいて、前記第2のデータおよび前記第3のデータに対して同じビット順序の変更を行い、
ビット順序が変更された前記第2のデータおよび前記第3のデータを、前記複数の不揮発性メモリにライトする、
請求項1~10のうちのいずれか1項のメモリコントローラ。
【請求項12】
前記処理部は、
前記ライト処理時に、
前記第2のデータのビット情報と、前記第2のデータと同じサイズの第3のデータのビット情報とに基づいて垂直パリティを計算し、前記第2のデータと同じサイズであり前記垂直パリティを含む第4のデータを生成し、
前記ライト処理時または前記リード処理時に、
前記情報に基づいて、前記第2のデータと前記第3のデータと前記第4のデータとのうちの少なくとも1つに対応するライト先またはリード先を変更し、前記情報に基づいて変更されたライト先またはリード先に対して、前記第2のデータと前記第3のデータと前記第4のデータとのうちの少なくとも1つに対するライトまたはリードを実行する、
請求項1~10のうちのいずれか1項のメモリコントローラ。
【請求項13】
前記付加データは、前記第1のデータに対するエラー訂正を行う第1のパリティを含み
前記処理部は、
前記ライト処理時に、
前記第2のデータに対応する第2のパリティを計算し、
前記ビット順序が変更された前記第2のデータを前記複数の不揮発性メモリにライトするとともに、前記複数の不揮発性メモリとは異なる別の不揮発性メモリに前記第2のパリティをライトし、
前記リード処理時に、
前記情報に基づいて、前記第2のデータを記憶する前記複数の不揮発性メモリと、前記第2のパリティを記憶する前記別の不揮発性メモリとを認識し、
前記複数の不揮発性メモリから、ビット順序が変更された前記第2のデータをリードし、
前記第1のパリティを用いて前記第1のデータのエラーを訂正できない場合に、前記別の不揮発性メモリから前記第2のパリティをリードし、
前記第2のパリティを用いて前記第2のデータのエラーを訂正する、
請求項1~請求項8のうちのいずれか1項のメモリコントローラ。
【請求項14】
少なくとも1つの不揮発性メモリを制御するメモリコントローラにおいて、
第1のデータを記憶するメモリと、
前記メモリに記憶されている前記第1のデータに対する処理を実行する処理部と、
を具備し、
前記処理部は、
ライト処理時に、
前記第1のデータと、前記第1のデータに対応する付加データとを含む第2のデータを生成し、
前記第2のデータのライト先の状態を示す情報に基づいて、前記第2のデータのビット順序を変更し、
ビット順序が変更された前記第2のデータを、前記少なくとも1つの不揮発性メモリに含まれている複数のライト先エリアにライトし、
リード処理時に、
前記複数のライト先エリアから、ビット順序が変更された前記第2のデータをリードし、
前記情報に基づいて、リードした前記第2のデータのビット順序を元に戻す、
メモリコントローラ。
【請求項15】
複数の不揮発性メモリと、
前記複数の不揮発性メモリを制御するコントローラと、
を具備し、
前記コントローラは、
ライト処理時に、
第1のデータと、前記第1のデータに対応する付加データとを含む第2のデータを生成し、
前記第2のデータのライト先の状態を示す情報に基づいて、前記第2のデータのビット順序を変更し、
ビット順序が変更された前記第2のデータを、前記複数の不揮発性メモリにライトし、
リード処理時に、
前記複数の不揮発性メモリから、ビット順序が変更された前記第2のデータをリードし、
前記情報に基づいて、リードした前記第2のデータのビット順序を元に戻す、
メモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本実施形態は、メモリコントローラおよびメモリシステムに関する。
【背景技術】
【0002】
メモリシステムの一例として、SCM(Storage Class Memory)モジュールがある。SCMモジュールは、例えばDRAM(Dynamic Random Access Memory)などのようなメインメモリのリード・ライト性能と、例えばSSD(Solid State Drive)などのようなストレージデバイスのリード・ライト性能との間の差を吸収するための装置である。SCMモジュールは、ストレージデバイスよりも高速にデータをリードおよびライト可能である。プロセッサは、データをストレージデバイスに代えて一時的にSCMモジュールに記憶させることにより、データのリードまたはライトを高速化する。
【先行技術文献】
【特許文献】
【0003】
【文献】米国特許第9594627号明細書
【文献】米国特許第9760292号明細書
【文献】米国特許第8341501号明細書
【文献】特許第6346123号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
本実施形態は、不揮発性メモリの耐久性を向上させるメモリコントローラおよびメモリシステムを提供する。
【課題を解決するための手段】
【0005】
本実施形態によれば、メモリコントローラは、複数の不揮発性メモリを制御する。メモリコントローラは、第1のデータを記憶するメモリと、メモリに記憶されている第1のデータに対する処理を実行する処理部を備える。処理部は、ライト処理時に、第1のデータと、第1のデータに対応する付加データとを含む第2のデータを生成し、第2のデータのライト先の状態を示す情報に基づいて、第2のデータのビット順序を変更し、ビット順序が変更された第2のデータを、複数の不揮発性メモリにライトする。処理部は、リード処理時に、複数の不揮発性メモリから、ビット順序が変更された第2のデータをリードし、リード先の状態を示す情報に基づいて、リードした第2のデータのビット順序を元に戻す。
【図面の簡単な説明】
【0006】
【
図1】第1の実施形態に係るSCMモジュールの構成の例を示す機能ブロック図。
【
図2】第1の実施形態に係るSCMチップの例を示す機能ブロック図。
【
図3】第1の実施形態に係るメモリセルアレイの一部の要素および接続を示す図。
【
図4】第1の実施形態に係るメモリセルアレイの一部の立体構造を示す図。
【
図5】第1の実施形態に係るメモリセルアレイの一部の断面構造を示す図。
【
図6】第1の実施形態に係るメモリセルの抵抗値の分布と種々のリード電圧を示すグラフ。
【
図7】第1の実施形態に係るメモリセルの抵抗状態の特徴を示す図。
【
図8】第1の実施形態に係るセンスアンプおよびデータラッチセットの要素および接続を示す図。
【
図9】複数のSCMチップとフレームとの関係の例を示す図。
【
図10】フレームのビット順序の変更状態の例を示す図。
【
図11】第1の実施形態に係るSCMモジュールで実行されるフレームのライト処理の例を示すフローチャート。
【
図12】第1の実施形態に係るSCMモジュールで実行されるフレームのリード処理の例を示すフローチャート。
【
図13】複数のSCMチップに跨るフレームのライト先エリアの例を示す図。
【
図14】第2の実施形態に係るアドレス変換テーブルの例を示す図。
【
図15】第2の実施形態に係るSCMモジュールの構成の例を示す機能ブロック図。
【
図16】第3の実施形態において生成される複数のフレームおよび垂直パリティフレームの例を示す図。
【発明を実施するための形態】
【0007】
以下、図面を参照しながら各実施形態について説明する。以下の説明において、略同一の機能及び構成要素については、同一符号を付し、重複説明は必要な場合にのみ行う。また、各実施形態で説明する数値、および、構成要素の個数は例であり、適宜変更可能である。
【0008】
(第1の実施形態)
第1の実施形態においては、複数の不揮発性メモリ(または記憶装置)に跨ってライトされる所定量のデータのビット順序を変更し、複数の不揮発性メモリからリードされた所定量のデータのビット順序を変更前の状態に戻すための制御を実行し、複数の不揮発性メモリの耐久性を向上させるメモリコントローラおよびメモリシステムを説明する。
【0009】
ここで、データの「量」とは、例えばデータのサイズを意味するものとする。ただし、データが所定サイズの1以上のサブデータを含む場合、このデータの「量」は、サブデータの個数を意味してもよい。
【0010】
第1の実施形態において、各機能ブロックは、ハードウェア、コンピュータソフトウェアのいずれか、または、双方を組み合わせたものとして実現されてもよい。各機能ブロックは、複数に分割されてもよい。複数の機能ブロックは組み合わされてもよい。ある機能ブロックの一部の機能が、他の機能ブロックによって実行されてもよい。
【0011】
第1の実施形態において説明されるフローにおけるいずれの処理も、例示の順序に限定されない。フローにおける処理の順序は、適宜変更可能である。フローにおける処理は、適宜、別の処理と並列に実行されもてよい。
【0012】
第1の実施形態において、ある要素が他の要素と接続されているとは、例えば、ある要素と他の要素とが、直接的に、または、間接的に導電性となることを含むとしてもよい。ある要素が他の要素と接続されているとは、例えば、ある要素と他の要素とが、常時、または、選択的に、導電性となることを含むとしてもよい。
【0013】
第1の実施形態においては、メモリシステムがSCMモジュールである場合を例として説明する。しかしながら、メモリシステムは、SCMモジュールに限定されるものではなく、例えばSSD(Solid State Drive)、UFS(Universal Flash Storage)デバイス、USB(登録商標)(Universal Serial Bus)メモリ、メモリカード、ハードディスクドライブとSSDとを含むハイブリッド型ストレージシステムなどのような、様々な種類のストレージデバイスのいずれかでもよい。
【0014】
第1の実施形態において、SCMモジュールに備えられているSCMコントローラは、複数の不揮発性メモリからデータをリードした場合に、エラー検出およびエラー訂正を実行する。SCMコントローラは、エラーを検出し、エラー訂正に失敗した場合には、エラー処理を実行する。以下の説明では、SCMコントローラがエラーを検出しても当該エラーを訂正可能な場合を説明し、エラー訂正に失敗した際に実行されるエラー処理の説明は省略する。
【0015】
図1は、第1の実施形態に係るSCMモジュール1の構成の例を示す機能ブロック図である。
【0016】
SCMモジュール1は、例えば、プロセッサ3から受信したデータを不揮発性メモリにライトするライト処理、および、不揮発性メモリからリードしたデータをプロセッサ3に送信するリード処理において、データのビット順序を変更する。
【0017】
第1の実施形態において、ビット順序の変更とは、例えば、所定単位のデータを複数のサブデータに分割し、当該所定単位のデータに関する複数のサブデータの配置または並びを変更することをいう。1つのサブデータのサイズは、例えば、所定単位のデータのサイズを、ライト先となる複数の不揮発性メモリの数で割った値としてもよい。
【0018】
第1の実施形態において、SCMモジュール1は、データのビット順序を変更するために、例えば、管理単位ごとの疲弊、摩耗または劣化の状態を示す状態情報を管理する。管理単位は、例えば、フレームでもよく、ウェアレベリングの管理単位でもよい。また、状態情報の管理単位は、例えば、チップ単位、キャッシュライン単位、キャッシュラインより大きい単位、キャッシュラインより小さい単位、所定数のビットの集合(ビットセット)のなどのうちのいずれかとしてもよい。キャッシュライン単位とは、例えば、プロセッサ3で使用されるキャッシュメモリのキャッシュラインの単位サイズとする。
【0019】
フレームとは、データ本体と、当該データ本体に対するエラー検出および訂正に使用される付加データとを含むデータ、または、このデータの単位を意味するものとする。第1の実施形態において、フレームに含まれるデータ本体は、例えば、ユーザデータ、または、システム管理情報のいずれかである場合を説明する。ユーザデータは、例えば、ライト対象データとしてSCMモジュール1がプロセッサ3から受信したデータである。システム管理情報は、例えば、SCMモジュール1の動作および制御に使用される情報である。以下、データ本体は、ペイロード部分と表記する場合がある。
【0020】
ウェアレベリングとは、ライト限度回数のある不揮発性メモリの寿命を延ばすための処理である。ウェアレベリングは、例えば、不揮発性メモリのメモリセルの摩耗を平準化する。
【0021】
しかしながら、第1の実施形態において、SCMモジュール1は、データのビット順序を変更するために、フレームまたはウェアレベリングの管理単位ではない単位で、状態情報を管理してもよい。
【0022】
第1の実施形態において、SCMモジュール1は、例えば、データ本体がユーザデータではなく、システム管理情報の場合には、ビット順序を変更しない。
【0023】
第1の実施形態において、SCMモジュール1は、例えば、不揮発性メモリに対してインプレース・アップデート(In-Place Update)を実行可能であるとする。第1の実施形態において、インプレース・アップデートとは、例えば、不揮発性メモリにデータをライトする場合に、任意の物理アドレスを指定できることをいうものとする。
【0024】
第1の実施形態において、SCMモジュール1は、SCMモジュール1で実行されるリード・モディファイ・ライト(Read Modify Write)において、データのビット順序を変更してもよい。リード・モディファイ・ライトでは、SCMモジュール1に備えられている不揮発性メモリのメモリセルのデータをリードし、データを修正し、修正後のデータを不揮発性メモリにライトする処理である。
【0025】
以下で、SCMモジュール1で実行される第1のリード・モディファイ・ライトおよび第2のリード・モディファイ・ライトを説明する。
【0026】
第1のリード・モディファイ・ライトは、SCMチップMD1~MDzのそれぞれにおいて実行される。ここでは、SCMチップMD1~MDzのうちSCMチップMD1を用いて説明する。
【0027】
SCMチップMD1がSCMコントローラ2からライト要求およびライト対象データを受信し、受信したライト対象データをそのままメモリセルにライトすると、メモリセルが疲弊しやすくなる。そこで、SCMチップMD1は、ライト対象データをメモリセルにライトする前に、1回メモリセルからデータをリードし、リードしたデータとライト対象データとを比較し、ビットが反転している部分に対応するメモリセルのみライトを行う。ビット反転しないメモリセルがある場合、そのメモリセルに対してはライトされないため、そのメモリセルが疲弊することを抑制することができる。このような処理が、SCMチップMD1で実行される第1のリード・モディファイ・ライトである。
【0028】
第2のリード・モディファイ・ライトは、SCMコントローラ2において実行される。SCMコントローラ2は、インプレース・アップデートで、フレームをSCMチップMD1~MDzにライトする。フレームは、例えば、データ本体と、当該データ本体のエラーを検出および訂正するためのパリティを含む。SCMコントローラ2は、パリティを用いることで、SCMチップMD1~MDzにライトしたフレームを後でリードした時に、フレームに含まれているデータ本体の一部にエラーが発生していた(例えば、ライトしたデータ本体とリードしたデータ本体が違っていた)としても、このエラーを訂正可能である。パリティは、フレームに含まれるデータ本体の全体から計算された値である。このため、フレーム中のデータ本体の1箇所でも更新されると、フレーム中のパリティの値も計算され、更新される。
【0029】
例えば、SCMコントローラ2が、プロセッサ3がアクセス要求を発行する際に指定する論理アドレス(例えば0x100番地)に対する64バイトのデータのライト要求を、プロセッサ2から受信したと仮定する。この場合、SCMコントローラ2は、後で説明するアドレス変換テーブルATを用いて、論理アドレスに対応する物理アドレスを取得する。SCMコントローラ2は、単純に、SCMチップMD1~MDzにおける物理アドレスに対応する位置に、ライト対象データをライトすることはできない。なぜなら、論理アドレスに対応する物理アドレスで指定される位置には、他の論理アドレスに対応するデータもライトされており、論理アドレスに対応するデータと他の論理アドレスに対応するデータとから計算されるパリティを更新する必要があるためである。したがって、SCMコントローラ2は、物理アドレスで指定される位置のフレームの全体をリードし、SCMコントローラ2上でライト対象データを上書きし、パリティを再計算し、新たなフレームを生成する。そして、SCMコントローラ2は、物理アドレスで指定される位置に、新たなフレームをライトする。このような処理が、SCMコントローラ2で実行される第2のリード・モディファイ・ライトである。
【0030】
SCMコントローラ2が、プロセッサ3からライト要求(例えばランダムライト要求)を繰り返し受信すると、SCMコントローラ2は、SCMチップMD1~MDzに対して第2のリード・モディファイ・ライトを繰り返し、その度にフレームのパリティを更新する。ランダムライト要求とは、例えば、ライト対象データのアドレスが連続ではなく、ランダムなライトコマンドである。
【0031】
第1の実施形態では、SCMコントローラ2が、フレームのビット順序を変更し、パリティの位置をずらすことにより、フレームを記憶するメモリセルの疲弊を平準化することができる。
【0032】
以下で、SCMモジュール1の構成を説明する。
【0033】
SCMモジュール1は、複数のSCMチップMD1~MDzと、SCMコントローラ2とを備える。第1の実施形態において、zは、2以上の整数である。
【0034】
SCMモジュール1は、図示しないメモリバスまたは外部バス経由でプロセッサ3と通信する。以下においては、メモリバスまたは外部バスを省略して、説明を簡略化する。
【0035】
プロセッサ3は、例えば、CPU(Central Processing Unit)、MPU(Micro-Processing Unit)、DSP(Digital Signal Processor)、GPU(Graphics Processing Unit)などの各種の処理デバイスのいずれかである。
【0036】
なお、SCMモジュール1は、プロセッサ3に代えて、ホストデバイス、または、外部の情報処理装置などと通信してもよい。この場合、SCMモジュール1は、ホストデバイス、または、外部の情報処理装置と、例えば、所定の規格に準拠する通信を行うとしてもよい。所定の規格は、例えば、NVMe(登録商標)(Non-Volatile Memory Express)規格、PCIe(登録商標)(Peripheral Component Interconnect Exprress)規格、SATA(Serial Advanced Technology Attachment)規格、または、SAS(Serial Attached Small Computer System Interface)規格などでもよい。
【0037】
SCMチップMD1~MDzは、記憶装置の例であり、チップ形式でなくてもよい。SCMチップMD1~MDzは、例えば、ReRAM(Resistive Random Access Memory:抵抗変化型メモリ)としてもよい。しかしながら、SCMチップMD1~MDzは、ReRAMに限定されるものではなく、例えばMRAM(Magnetoresistive Random Access Memory:磁気抵抗メモリ)、PRAM(Phasechange Random Access Memory:相変化メモリ)、FeRAM(Ferroelectric Random Access Memory)、NAND型フラッシュメモリ、NOR型フラッシュメモリなどのうちのいずれかでもよい。
【0038】
このSCMチップMD1~MDzに関しては、
図2から
図8までを用いて後で具体的に説明する。
【0039】
SCMコントローラ2は、プロセッサ3から受信したコマンドにしたがってSCMチップMD1~MDzに対する制御を実行する。また、SCMコントローラ2は、プロセッサ3からのコマンドを受信しなくても、バックグラウンド処理として、SCMチップMD1~MDzに対する制御を実行する。より具体的には、SCMコントローラ2は、SCMチップMD1~MDzへのデータのライトを制御し、SCMチップMD1~MDzからのデータのリードを制御する。
【0040】
SCMコントローラ2は、データのライト処理時に、プロセッサ3から第1のデータを受信する。第1の実施形態において、第1のデータは、例えば、フレームに含まれる1以上のユーザデータであるとする。
【0041】
SCMコントローラ2は、SCMチップMD1~MDzにライトされる1以上のユーザデータに対してエラー訂正のための付加データを付与し、ユーザデータと付加データとを含む第2のデータを生成する。第1の実施形態において、第2のデータは、例えば、フレームであるとする。
【0042】
SCMコントローラ2は、状態情報に基づいて、フレーム内のビット順序を変更するか否かを判断する。
【0043】
SCMコントローラ2は、フレームのビット順序を変更する場合に、例えば、状態情報に応じて、フレーム内のビット順序を変更する。
【0044】
そして、SCMコントローラ2は、フレーム、または、ビット順序が変更された後のフレームを、SCMチップMD1~MDzへライトする。
【0045】
第1の実施形態においては、SCMコントローラ2がSCMチップMD1~MDzに跨ってフレームをライトする場合を例として説明する。しかしながら、SCMコントローラ2は、SCMチップMD1~MDzのうちの1つ、または、2つ以上にフレームをライトする場合に同様の制御を実行してもよい。
【0046】
SCMコントローラ2は、データのリード処理時に、SCMチップMD1~MDzから、フレームをリードする。
【0047】
SCMコントローラ2は、状態情報に基づいて、リードしたフレームのビット順序を変更する(言い換えれば、ライト処理時に変更したフレームのビット順序を元に戻す)か否かを判断する。
【0048】
SCMコントローラ2は、リードしたフレームのビット順序を変更する場合に、例えば、状態情報に応じて、フレームのビット順序を変更する(戻す)。
【0049】
SCMコントローラ2は、フレームに含まれている付加データに基づいて、フレームに含まれているユーザデータに対してエラー検出および訂正のための処理を実行する。
【0050】
そして、SCMコントローラ2は、エラー検出および訂正後のユーザデータをプロセッサ3へ送信する。
【0051】
SCMコントローラ2は、第1のインタフェース部4と、第2のインタフェース部I1~Izと、バッファメモリ5aを含むメモリ部5と、処理部6と、エンコーダ7と、デコーダ8とを備える。第1のインタフェース部4、第2のインタフェース部I1~Iz、メモリ部5、処理部6、エンコーダ7、および、デコーダ8は、バス9を介して、互いに、データ、情報、信号、コマンド、要求、メッセージ、指示、応答を送信または受信可能である。
【0052】
第1のインタフェース部4は、プロセッサ3からのデータ、情報、信号、コマンド、要求、メッセージ、指示、応答などを受信する。また、第1のインタフェース部4は、データ、情報、信号、コマンド、要求、メッセージ、指示、応答などを、プロセッサ3へ送信する。
【0053】
第1のインタフェース部4は、プロセッサ3から受信したユーザデータを、メモリ部5のバッファメモリ5aに一時的にライトする。また、第1のインタフェース部4は、バッファメモリ5aに一時的に記憶されているユーザデータをリードし、リードしたユーザデータをプロセッサ3へ送信する。
【0054】
第2のインタフェース部I1~Izは、それぞれ、SCMチップMD1~MDzと電気的に接続されている。第2のインタフェース部I1~Izは、SCMチップMD1~MDzに対するデータ、情報、信号、コマンド、要求、メッセージ、指示、応答などを送受信する回路である。第2のインタフェース部I1~IzのそれぞれによるSCMチップMD1~MDzに対するライトまたはリードは、互いに並列に実行可能である。言い換えれば、SCMコントローラ2は、SCMチップMD1~MDzのうちの少なくとも2つに対して並列にライトまたはリードを実行可能である。以下においては、簡略化のために、第2のインタフェース部I1~Izを省略して説明する場合がある。
【0055】
メモリ部5は、例えば揮発性メモリと不揮発性メモリとを含むとしてもよい。メモリ部5は、例えば、ROM(Read Only Memory)およびRAM(Random Access Memory)を備えるとしてもよい。メモリ部5は、例えば、第1のインタフェース部4、第2のインタフェース部I1~Iz、処理部6、エンコーダ7、デコーダ8によって作業用として使用されてもよい。メモリ部5は、例えば、SRAM(Static Random Access Memory)としてもよい。メモリ部5は、例えばDRAM(Dynamic random Access Memory)とSRAMとの組み合わせでもよい。メモリ部5は、SCMコントローラ2の内部でなく外部に配置されてもよい。
【0056】
メモリ部5は、バッファメモリ5aを備えている。バッファメモリ5aは、例えば、プロセッサ3から受信したユーザデータ、および、プロセッサ3へ送信されるユーザデータを記憶する。バッファメモリ5aは、例えば、メモリ部5の外部に配置されてもよい。バッファメモリ5aは、例えば、第1のインタフェース部4に備えられてもよい。
【0057】
メモリ部5は、例えば状態データ10、アドレス変換テーブルAT、ファームウェアFWを記憶する。
【0058】
状態データ10は、例えば、SCMチップMD1~MDzにおける管理単位ごとの疲弊、摩耗または劣化の状態を示す状態情報を含む。状態データ10は、動的に更新される。状態情報は、例えばSCMチップMD1~MDzの各管理単位の使用状態を示す情報を含むとしてもよい。使用状態を示す情報は、例えば、ライト(更新)回数、リード回数、イレーズ回数、ライト(更新)頻度、リード頻度、イレーズ頻度、または、それらの組み合わせを含む。第1の実施形態において、頻度とは、例えば、単位時間あたりの回数とする。第1の実施形態において、SCMチップMD1~MDzの管理単位はウェアレベリングの管理単位であり、状態情報はライト回数である場合を例として説明する。なお、SCMチップMD1~MDzがMRAMの場合、MRAMからデータをリードすると、MRAMに記憶されていたデータは破壊される。このような場合、状態データ10の状態情報は、リード回数を含むとしてもよい。状態データ10は、システム管理情報の一例である。
【0059】
状態データ10は、例えば、SCMチップMD1~MDzにライトされるフレームのデータ種別を示す種別情報を含むとしてもよい。種別情報は、例えば、SCMチップMD1~MDzにライトされるデータがユーザデータか、あるいは、システム管理情報かを示す情報としてもよい。
【0060】
状態データ10は、管理単位ごとに、ライト回数をライト方式(ライトの種類)に応じて重み付けした値を含むとしてもよい。ライト方式としては、例えば、SCMチップMD1~MDzからデータをリードし、その後データをライトする第1のリード・モディファイ・ライトがある。また、他のライト方式としては、データをSCMチップMD1~MDzからリードすることなくライトする標準のライトがある。標準のライトは、第1のリード・モディファイ・ライトの動作とは異なり、ライト先の全メモリセルに対してデータをライトする。第1のリード・モディファイ・ライトではビット反転するメモリセルだけ疲弊するのに対し,標準のライトではビット反転しないメモリセルも含めてライト先の全セルが疲弊する。このように、第1のリード・モディファイ・ライトと標準のライトとで、メモリセルの疲弊の進行に差が生じる場合がある。このため、例えば、メモリセルの疲弊の進行しやすいライト方式の重みを大きくし、メモリセルの疲弊の進行しにくいライト方式の重みを小さくする。
【0061】
例えば、メモリセルの疲弊がライト処理時の温度によって変わる場合、状態データ10は、例えば、状態情報として、管理単位ごとに、ライト処理時の温度で重み付された値を含むとしてもよい。SCMチップMD1~MDzのそれぞれに備えられているメモリセルの温度は、SCMチップMD1~MDzのそれぞれに備えられている温度センサによって測定されてもよい。
【0062】
状態データ10は、例えば、状態情報として、管理単位ごとに、ライト処理時に反転されたビット数で重み付された値を含むとしてもよい。この場合、状態データ10は、例えば、反転されたビット数が多い管理単位ほど、摩耗状態が進行していることを示す。
【0063】
ユーザデータまたはシステム管理情報に対応するメタデータが存在し、メタデータが状態データ10の状態情報として使用可能な情報を含む場合がある。この場合、SCMコントローラ2は、当該メタデータに基づいて状態データ10を生成あるいは更新してもよい。
【0064】
第1の実施形態において、状態データ10は、フレームとは分離した構成であり、フレームと異なる位置にライトされる。
【0065】
アドレス変換テーブルATは、SCMチップMD1~MDzに記憶されているデータの論理アドレスと、そのデータが記憶されている位置を特定する物理アドレスとを関連付けている。アドレス変換テーブルATは、システム管理情報の一例である。
【0066】
上記のように、メモリセルは、ライトなどを繰り返すことにより疲弊する。例えば、プロセッサ3が同じ論理アドレスに対して繰り返しライトを要求した場合、SCMコントローラ2は、インプレース・アップデートによりSCMチップMD1~MDzに対するライト処理を実行する。この場合、同じメモリセルの疲弊が進行し、疲弊の進行したメモリセルは寿命を迎えてライト不可となる。このような局所的なメモリセルの疲弊の進行を防止するために、SCMコントローラ2は、例えばウェアレベリングを実行する。SCMコントローラ2は、状態情報を持ち、プロセッサ3が繰り返し同じ論理アドレスに対してライトを要求する場合に、疲弊の進行していないメモリセルにライトを実行するように制御を行う。アドレス変換テーブルATは、どのデータがどこにライトされているかを示すデータである。SCMコントローラ2は、アドレス変換テーブルATを参照することにより、アクセス対象データの論理アドレスがSCMチップMD1~MDzのどの物理的位置に対応するかを理解することができる。
【0067】
ファームウェアFWは、処理部6によって実行されるソフトウェアの一例である。ファームウェアFWは、例えば、コードとデータとを含む。ファームウェアFWは、処理部6によって実行されることにより、第1のインタフェース部4、第2のインタフェース部I1~Iz、メモリ部5、エンコーダ7、デコーダ8を制御する。ファームウェアFWは、システム管理情報の一例である。
【0068】
第1の実施形態において、ファームウェアFWは、例えば、処理部6を、アドレス変換部11、第1のリード制御部12、エンコード制御部13、第1の判断部14、第1の変更部15、第1のライト制御部16、更新部17、第2のリード制御部18、第2の判断部19、第2の変更部20、デコード制御部21、第2のライト制御部22として機能させる。また、ファームウェアFWは、処理部6によって実行されることにより、例えば、SCMチップMD1~MDzに対するウェアレベリングを実行する。
【0069】
アドレス変換部11は、ライト処理時に、メモリ部5に記憶されているアドレス変換テーブルATに基づいて、ライト先の論理アドレスを、ライト先の物理アドレスに変換する。
【0070】
アドレス変換部11は、リード処理時に、メモリ部5に記憶されているアドレス変換テーブルATに基づいて、リード対象の論理アドレスを、リード対象の物理アドレスに変換する。
【0071】
第1のリード制御部12は、ライト処理時に、メモリ部5に記憶されているデータをリードする。
【0072】
エンコード制御部13は、データの信頼性を担保するために、エンコーダ7を使用して、メモリ部5からリードしたデータと、当該データに対応しエラー訂正のための情報を含む付加データとを含むフレームを生成する。
【0073】
第1の判断部14は、ライト対象のフレームのビット順序を変更するか否かを判断する。
【0074】
例えば、第1の判断部14は、フレームに含まれるデータの種類に基づいて、フレームのビット順序を変更するか否かを判断してもよい。より具体的には、第1の判断部14は、例えば、メモリ部5からリードしたデータがプロセッサ3から受信したユーザデータの場合に、ユーザデータを含むフレームのビット順序を変更すると判断する。SCMコントローラ2は、フレーム内のビット順序が変更可能になる前に、SCMチップMD1~MDzからシステム管理情報をリードする場合がある。このため、第1の判断部14は、例えば、メモリ部5からリードしたデータがシステム管理情報の場合に、システム管理情報を含むフレームのビット順序を変更しないと判断する。
【0075】
言い換えれば、第1の判断部14は、システム管理情報を含むフレームのビット順序は変更する必要がないと判断する。この場合、第1のライト制御部16は、フレームをそのままの状態でSCMチップMD1~MDzへライトする。
【0076】
ここで、システム管理情報のうち、SCMモジュール1が起動してから状態データ10がリードされるまでの間にリードされる部分を含むフレームのビット順序が変更されないことを具体的に説明する。
【0077】
第1の実施形態において、SCMコントローラ2は、フレーム内において、比較的ライト回数の高いパリティなどの位置を変更する(例えばビット順序を変える)。これにより、メモリセルの疲弊をフレーム内で平準化し、メモリセルを長寿命化する。フレームのデータ本体は、例えば、ユーザデータまたはシステム管理情報を含む。SCMコントローラ2は、ビット順序を変更するか否かを判断するために、ライト対象フレームの状態情報を備える。SCMモジュール1が起動すると、SCMコントローラ2は、SCMチップMD1~MDzからシステム管理情報をリードし、メモリ部5に記憶させる。例えば、SCMモジュール1の起動直後は、SCMコントローラ2のメモリ部5は基本的には空であり、SCMコントローラ2は、状態情報を持っていない。この状態において、SCMコントローラ2は、SCMチップMD1~MDzからリードしたフレームのビット順序を変更することはできない。起動時に、SCMコントローラ2が、アドレス変換テーブルAT、ファームウェアFW、状態データ10を、どのような順序でSCMチップMD1~MDzからリードするかは、実装に依存するが、SCMコントローラ2は、少なくとも状態データ10をリードするまではフレームのビット順序の変更を実行することはできない。そのため、第1の実施形態において、SCMコントローラ2は、状態データ10を含むフレームと、起動してから状態データ10がSCMチップMD1~MDzからリードされるまでの間にリードされるフレームとに関しては、ビット順序を元に戻すことができないため、ビット順序を変更しない。
【0078】
より具体的に説明すると、SCMコントローラ2は、例えば、SCMチップMD1~MDzから、その他のシステム管理情報、ファームウェアFW、アドレス変換テーブルAT、状態データ10という順でリードを行い、その他のシステム管理情報、ファームウェアFW、アドレス変換テーブルAT、状態データ10をメモリ部5に記憶させる場合を想定する。この場合、SCMコントローラ2は、状態データ10をリードし終わるまでビット順序の変更を実行することができない。このため、SCMコントローラ2は、ライト処理時に、その他のシステム管理情報を含むフレーム、ファームウェアFWを含むフレーム、アドレス変換テーブルATを含むフレーム、状態データ10を含むフレームの全てに対して、ビット順序の変更を実行しない。
【0079】
SCMコントローラ2は、例えば、SCMチップMD1~MDzから、ファームウェアFW、状態データ10、アドレス変換テーブルAT、その他のシステム管理情報という順でリードを行い、ファームウェアFW、状態データ10、アドレス変換テーブルAT、その他のシステム管理情報をメモリ部5に記憶させる場合を想定する。この場合、SCMコントローラ2は、状態データ10をリードし終わることで、ビット順序の変更を実行可能となる。このため、SCMコントローラ2は、ライト処理時に、少なくとも、ファームウェアFWを含むフレーム、状態データ10を含むフレームに対して、ビット順序の変更を実行しない。SCMコントローラ2は、ライト処理時に、アドレス変換テーブルATを含むフレーム、その他のシステム管理情報を含むフレームに対してはビット情報を変更してもよく、変更しなくてもよい。
【0080】
第1の判断部14は、例えば、SCMコントローラ2がプロセッサ3からランダムライト要求を受信した場合(すなわち、ライト方式がランダムライトの場合)に、ライト対象データを含むフレームの順序を変更すると判断する。
【0081】
第1の判断部14は、例えば、SCMコントローラ2がプロセッサ3からライト要求および連続するアドレスを受信した場合(すなわち、ライト方式がシーケンシャルライトの場合)に、連続するアドレスに基づいてSCMチップMD1~MDzへ追記されるフレームのビット順序を変更しないと判断する。シーケンシャルライトの場合、フレームに含まれるデータ本体の全体が最新のデータに更新されるとともに、データ本体に応じてパリティを含む付加データも更新される。したがって、シーケンシャルライトの場合に生成されるフレームは、フレーム全体にわたってメモリセルが疲弊する。このように、シーケンシャルライトの場合には、フレーム内のビット順序を変更しても、メモリセルの疲弊を平準化する効果が得られない。このため、第1の判断部14は、例えばライト方式がシーケンシャルライトの場合に、連続するアドレスに基づいてSCMチップMD1~MDzへ追記されるフレームのビット順序を変更しないと判断する。この場合、第1のライト制御部16は、フレームをそのままの状態でSCMチップMD1~MDzへライトする。
【0082】
例えば、第1の判断部14は、状態データ10におけるフレームのライト回数に基づいて、フレームのビット順序を変更するか否かを判断してもよい。より具体的には、第1の判断部14は、例えば、フレームのライト回数が第1のライト回数以上の場合に、フレームのビット順序を変更すると判断する。
【0083】
例えば、第1の判断部14は、状態データ10におけるライト先に対応する管理単位のライト回数と少なくとも1つの閾値に基づいて、フレームのビット順序を変更するか否かを判断してもよい。より具体的には、第1の判断部14は、例えば、ライト先に対応する管理単位のライト回数を所定の値で割り算し、商に応じてフレームのビット順序を変更すると判断する。
【0084】
第1の変更部15は、第1の判断部14によってビット順序を変更すると判断された場合に、フレームのビット順序を変更する。
【0085】
より具体的には、第1の変更部15は、例えば、ライト先に対応する管理単位のライト回数を所定の値で割り算して得られた結果に応じてフレームのビット順序を変更する。
【0086】
例えば、第1の変更部15は、フレームのビット順序を変更する場合、フレーム内のビットを複数に分割した複数のビットセットの位置を変更してもよい。ビットセットとは、言い換えれば、ビットの束である。ビットセットを構成するビットの数は、例えば、フレームに含まれている付加データを構成するビット数の約数としてもよい。あるいは、ビットセットを構成するビットの数は、例えば、SCMコントローラ2のSCMチップMD1~MDzへのアクセス単位の約数としてもよい。ここで、アクセス単位とは、例えば、ライト対象のデータの単位サイズ、および、リード対象のデータの単位サイズとする。
【0087】
第1の変更部15は、例えば、プロセッサ3のSCMモジュール1へのアクセス単位である64バイト分、フレーム内でビット順序をずらすとしてもよい。第1の実施形態において、プロセッサ3のSCMモジュール1へのアクセス単位のサイズは、プロセッサ3で使用されるキャッシュメモリのキャッシュラインサイズと同じでもよい。
【0088】
第1の判断部14によってフレームのビット順序を変更すると判断された場合、第1のライト制御部16は、第1の変更部15によってビット順序の変更されたフレームを、第2のインタフェース部I1~Iz経由で、SCMチップMD1~MDzにおけるライト先の物理アドレスの示す位置にライトする。
【0089】
一方、第1の判断部14によってフレームのビット順序を変更しないと判断された場合、第1のライト制御部16は、フレームを、第2のインタフェース部I1~Iz経由で、SCMチップMD1~MDzにおけるライト先の物理アドレスの示す位置にライトする。
【0090】
更新部17は、SCMチップMD1~MDzに対するフレームのライト処理が実行された場合に、状態データ10に対して、ライト処理に関連する管理単位の状態情報を更新する。具体的には、更新部17は、ライト先に対応する管理単位のライト回数を加算する。
【0091】
更新部17としては、例えば、ウェアレベリングに使用されるライト回数管理部が使用されてもよい。
【0092】
第2のリード制御部18は、リード処理時に、SCMチップMD1~MDzにおけるリード対象の物理アドレスの示す位置から第2のインタフェース部I1~Iz経由で、フレーム、または、ビット順序が変更されたフレームをリードする。
【0093】
第2の判断部19は、リードしたフレームのビット順序を変更するか否かを判断する。言い換えれば、第2の判断部19は、SCMチップMD1~MDzからリードしたフレームのビット順序がライト処理時に変更されており元に戻す必要があるか否かを判断する。
【0094】
例えば、第2の判断部19は、フレームに含まれているデータの種類に基づいて、フレームのビット順序を変更するか否かを判断してもよい。より具体的には、第2の判断部19は、例えば、SCMチップMD1~MDzからリードしたフレームに含まれているデータがユーザデータである場合に、フレームのビット順序を変更すると判断する。第2の判断部19は、例えば、SCMチップMD1~MDzからリードしたフレームに含まれているデータがシステム管理情報である場合に、フレームのビット順序を変更しないと判断する。
【0095】
例えば、第2の判断部19は、フレームがライトされた時のライト方式に基づいて、フレームのビット情報を変更するか否かを判断してもよい。より具体的には、第2の判断部19は、例えば、リード対象のフレームがライト処理時にランダムライト要求に基づいてライトされたフレームである場合に、リード対象のフレームのビット順序を変更すると判断する。第2の判断部19は、例えば、リード対象のフレームがライト処理時に連続するアドレスにしたがってSCMチップMD1~MDzへ追記されたフレームの場合に、リード対象のフレームのビット順序を変更しないと判断する。
【0096】
例えば、第2の判断部19は、状態データ10におけるリード対象に対応する管理単位のライト回数に基づいて、フレームのビット順序を変更するか否かを判断してもよい。より具体的には、第2の判断部19は、例えば、リード対象に対応する管理単位のライト回数が閾値を超える場合に、フレームのビット順序を変更すると判断する。
【0097】
第2の変更部20は、第2の判断部19によってビット順序を変更すると判断された場合に、フレームのビット順序を変更する。
【0098】
例えば、第2の変更部20は、状態データ10に含まれている状態情報に応じて、ライト時に変更されたビット順序を元に戻す。
【0099】
例えば、第2の変更部20は、フレームにおける複数のビットセットの位置を変更前の状態に戻してもよい。
【0100】
デコード制御部21は、デコーダ8を使用して、SCMチップMD1~MDzからリードされたフレーム、または、第2の変更部20によってビット順序が変更されたフレームに対するエラー検出およびエラー訂正を実行し、エラー検出およびエラー訂正後のデータを生成する。より具体的には、デコード制御部21は、フレームに含まれている付加データに基づいて、フレームに含まれているデータに対するエラー検出およびエラー訂正を実行する。
【0101】
第2のライト制御部22は、エラー検出およびエラー訂正後のデータを、メモリ部5にライトする。
【0102】
エンコーダ7は、例えば、エラー検出処理およびエラー訂正処理に使用される付加データを生成するための回路である。エンコーダ7は、例えば、CRC(Cyclic Redundancy Code)エンコーダ71、ECC(Error Correcting Code)エンコーダ72、XOR(排他的論理和)エンコーダ73を備える。
【0103】
CRCエンコーダ71は、データのエラーを検出するためのCRC符号情報を生成する。
【0104】
ECCエンコーダ72は、データのエラーを検出および訂正するためのECCパリティを生成する。
【0105】
XORエンコーダ73は、SCMチップMD1~MDzごとに、エラーを検出および訂正するためのXORパリティを生成する。
【0106】
デコーダ8は、例えば、付加データに基づいて、当該付加データに対応するデータに対するエラー検出処理およびエラー訂正処理を実行するための回路である。デコーダ8は、例えば、CRCチェック部81、ECCデコーダ82、XORデコーダ83を備える。
【0107】
CRCチェック部81は、CRC符号情報に基づいて、データに対するエラーの検出を行う。具体的には、CRCチェック部81は、付加データに含まれておりCRCエンコーダ71によって計算されたCRC符号情報と、ECCデコーダ82によるエラーの検出および訂正後のデータからCRCチェック部81が計算したCRC符号情報とを比較する。そして、CRCチェック部81は、付加データに含まれているCRC符号情報と、CRCチェック部81が計算したCRC符号情報とが一致した場合にエラーがなく、一致しない場合にエラーがあると判断する。
【0108】
ECCデコーダ82は、ECCパリティに基づいて、データのエラーを検出および訂正する。
【0109】
XORデコーダ83は、ECCデコーダ82によってエラー訂正できないエラーが発生した場合に、XORパリティに基づいて、データのエラー訂正を行う。
【0110】
ここで、エンコーダ7およびデコーダ8とマルチキャストとの関係を具体的に説明する。
【0111】
SCMチップMD1~MDzにフレームをライトしてリードすると、フレームに含まれているデータ本体にエラーが含まれている場合がある。例えば、0xABCDというデータ本体をライトしたが、リードすると、データ本体が0xAACDに変わっている場合を想定する。このエラーを訂正するために、SCMコントローラ2は、ECCエンコーダ72を用いて、ライト処理時に、0xABCDというデータ本体に対してECCパリティを付加したフレームを生成する。SCMコントローラ2は、フレームをSCMチップMD1~MDzにライトする。SCMコントローラ2は、リード処理時に、SCMチップMD1~MDzからフレームをリードし、ECCデコーダ82を用いて、エラーのあるデータ本体0xAACDおよびECCパリティに対するエラー訂正を実行する。
【0112】
例えばエラー(すなわちビット反転)しているビット数が増加した場合、または、SCMチップMD1~MDzのうちのいずれか1つが故障した場合、ECCデコーダ82でエラー訂正ができない場合がある。このような場合、SCMコントローラ2は、XORデコーダ83によるデコードを実行する。XORデコーダ83は、XORエンコーダ73で生成されたXORパリティを用いて、フレームのエラー訂正を行う。
【0113】
説明を簡略化するため、3つのSCMチップMD1~MD3に対してフレームがライトおよびリードされる場合を説明する。SCMコントローラ2は、例えば、2つのSCMチップMD1,MD2に対してデータ本体とECCパリティをライトし、1つのSCMチップMD3に対してXORパリティをライトする場合を仮定する。2つのSCMチップMD1,MD2に対してライトされたデータ本体およびECCパリティは、2進数表記で、0b11110000および0b10101010であるとする。このデータ本体およびECCパリティのXORを計算すると0b01011010となる。このXOR演算値がXORパリティとなる。この結果、SCMチップMD1には、0b11110000がライトされ、SCMチップMD2には、0b10101010がライトされ、SCMチップMD3には、0b01011010がライトされる。データ本体、CRC符号情報、ECCパリティが更新されると、XORパリティの更新も必要になる。
【0114】
その後、SCMチップMD2が故障したものとする。この場合、SCMコントローラ2は、SCMチップMD1から0b11110000をリードし、SCMチップMD2からはデータをリードすることができず、SCMチップMD3からXORパリティである0b01011010をリードする。XORデコーダ83は、SCMチップMD1からリードしたデータである0b11110000とSCMチップMD3からリードしたXORパリティである0b01011010とのXORを計算する。これにより、SCMチップMD2に記憶されていたデータ0b10101010を復活させることができる。
【0115】
XORパリティは、ECCデコーダ82によるエラー訂正が可能な場合には、使用されない。ここで、SCMチップMD1~MDzのうちのいずれかのSCMチップがXORパリティの記憶に使用されるものと仮定する。SCMコントローラ2は、プロセッサ3からリード要求を受信した場合に、SCMチップMD1~MDzのすべてに対して、データ本体、ECCパリティ、および、XORパリティのリードを実行することは、効率的ではない。なぜなら、XORパリティは、ECCデコーダ82によってデータ本体のエラー訂正ができない場合のみに使用されるものであり、XORパリティが使用される機会は少ないためである。このように、使用される機会の少ないXORパリティのリード回数が多くなると、SCMモジュール1の消費電力に無駄が生じるとともに、XORパリティのリードによりメモリセルの疲弊が進行する場合がある。
【0116】
このような無駄なXORパリティのリードを抑制するために、マルチキャストが使用される。マルチキャストにおいて、SCMコントローラ2は、SCMチップMD1~MDzのうち、データ本体、および、ECCパリティを記憶するSCMチップに対してリード要求を発行し、ECCデコーダ82によってフレームをエラー訂正できる場合には、XORパリティを記憶するSCMチップに対してリード要求を発行しない。SCMコントローラ2は、XORパリティを記憶するSCMチップに対しては、ECCデコーダ82によってフレームをエラー訂正できない場合にのみリード要求を行う。
【0117】
処理部6は、ファームウェアFWにしたがって各種の制御を実行する。処理部6は、例えば、CPU、MPU、DSP、GPUなどの各種の処理デバイスのいずれかでもよい。
【0118】
処理部6は、例えば、SCMモジュール1の起動時に、SCMチップMD1~MDzのうちの少なくとも1つから第2のインタフェース部I1~Izのうちの少なくとも1つ経由で、状態データ10の少なくとも一部、ファームウェアFWの少なくとも一部、および、アドレス変換テーブルATの少なくとも一部をリードする。そして、処理部6は、状態データ10の少なくとも一部、ファームウェアFWの少なくとも一部、および、アドレス変換テーブルATの少なくとも一部をメモリ部5に記憶させる。
【0119】
処理部6は、例えば、SCMモジュール1がシャットダウンする前に、メモリ部5に記憶されている状態データ10の少なくとも一部、および、アドレス変換テーブルATの少なくとも一部を、第2のインタフェース部I1~Izのうちの少なくとも1つ経由でSCMチップMD1~MDzのうちの少なくとも1つへライトする。
【0120】
例えば、処理部6は、データのライト処理時に、ファームウェアFWにしたがって、上記のアドレス変換部11、第1のリード制御部12、エンコード制御部13、第1の判断部14、第1の変更部15、第1のライト制御部16、更新部17として機能する。
【0121】
例えば、処理部6は、データのリード処理時に、ファームウェアFWにしたがって、上記のアドレス変換部11、第2のリード制御部18、第2の判断部19、第2の変更部20、デコード制御部21、第2のライト制御部22として機能する。
【0122】
次に、
図2から
図8までを用いて、第1の実施形態に係るSCMチップMD1の構成の詳細を説明する。なお、SCMチップMD2~SCMチップMDzも、SCMチップMD1と同様の構成を持つものとする。
【0123】
図2は、SCMチップMD1の例を示す機能ブロック図である。
図2に示されるように、SCMチップMD1は、メモリセルアレイ23、シーケンサ(コントローラ)24、ワード線(WL)デコーダ25、ゲート線(SGL)デコーダ26、グローバルビット線(GBL)デコーダ27、センスアンプ28、データラッチセット29、温度センサ100を備える。
【0124】
メモリセルアレイ23は、複数のメモリセルMCを含む。複数のメモリセルMCは、1つのページを構成する。各メモリセルMCは、第1端において1つのワード線WLと接続され、第2端において1つのビット線BLと接続される。各ビット線BLは、トランジスタST(図示せず)を介して1つのグローバルビット線GBLと接続されている。1つのグローバルビット線GBLには、対応するトランジスタST(図示せず)を介して複数のビット線BLが接続されている。各トランジスタSTは、1つのゲート線SGLによってオンし、すなわち、当該トランジスタSTの両端を電気的に接続する。メモリセルアレイ23の詳細は後述される。ビット線BLは、グローバルビット線GBLとの区別のために、ローカルビット線と称される場合がある。
【0125】
WLデコーダ25は、複数のワード線WLと接続されており、ワード線選択部およびワード線ドライバを含む。ワード線選択部は、シーケンサ24からワード線アドレスを示す信号(WLアドレス信号)を受信し、受信されたWLアドレス信号により示されるWLアドレスを付されたワード線WLを選択する。ワード線ドライバは、シーケンサ24の制御にしたがって、選択されたワード線(選択ワード線)WLおよび非選択のワード線(非選択ワード線)WLに、データのリード、ライト、および、イレーズの間に、必要な電圧を印加する。
【0126】
SGLデコーダ26は、複数のゲート線SGLと接続されており、ゲート線選択部およびゲート線ドライバを含む。ゲート線選択部は、シーケンサ24からゲート線アドレスを示す信号(SGLアドレス信号)を受信し、受信されたSGLアドレス信号により示されるゲート線アドレスを付されたゲート線SGLを選択する。ゲート線ドライバは、シーケンサ24の制御にしたがって、選択されたゲート線SGLおよび非選択のゲート線SGLに、データのリード、ライト、および、イレーズの間、必要な電圧を印加する。
【0127】
GBLデコーダ27は、複数のグローバルビット線GBLと接続されており、グローバルビット線選択部およびグローバルビット線ドライバを含む。グローバルビット線選択部は、シーケンサ24からグローバルビット線アドレスを示す信号(GBLアドレス信号)を受信し、受信されたGBLアドレス信号により示されるGBLアドレスを付されたグローバルビット線GBLを選択する。グローバルビット線ドライバは、シーケンサ24の制御にしたがって、選択されたグローバルビット線(選択グローバルビット線)GBLおよび非選択のグローバルビット線(非選択グローバルビット線)GBLに、データのリード、ライト、および、イレーズの間、必要な電圧を印加する。
【0128】
センスアンプ28は、GBLデコーダ27によって選択されたグローバルビット線GBLを流れる電流を受信し、受信された電流に基づいて、リード対象のメモリセルMCに保持されているデータを割り出す。
【0129】
データラッチセット29は、センスアンプ28からのデータおよびシーケンサ24からのデータを保持し、複数のデータラッチを含む。
【0130】
シーケンサ24は、SCMコントローラ2との間で信号DQおよび制御信号を送受信する。信号DQは、例えば8ビットの幅を有し、データの実体であり、コマンド、データ、アドレス信号、ステータスデータ等を含む。制御信号は、信号RY/ ̄BYを含む。信号RY/ ̄BYは、SCMチップMD1がレディー状態であるか、ビジー状態であるかを示し、ローレベルによってビジー状態を示す。SCMチップMD1は、レディー状態においてSCMコントローラ2からの命令を受け付け、ビジー状態においてSCMコントローラ2からの命令を受け付けない。
【0131】
シーケンサ24は、受信されたコマンドおよびアドレス信号に基づいて、センスアンプ28およびデータラッチセット29を制御し、データラッチセット29へ(から)データを送信(受信)する。また、シーケンサ24は、受信されたアドレス信号から、WLアドレス、SGLアドレスおよびGBLアドレスを取得する。
【0132】
シーケンサ24は、データのライトの間、WLデコーダ25およびGBLデコーダ27を制御して、選択ワード線WLと選択グローバルビット線BLの間に大きい電位差を発生させる。この電位差により、メモリセルMCの抵抗状態が遷移する。シーケンサ24は、データのリードの間、選択ワード線WLと選択グローバルビット線BLとの間に抵抗状態の遷移が生じない大きさの電位差を発生させ、センスアンプ28は、選択グローバルビット線BLを流れる電流を検出する。
【0133】
シーケンサ24は、データレジスタ24aを含む。データレジスタ24aは、ステータスデータ等のデータを保持する。ステータスデータは、SCMチップMD1の状態を示す。
【0134】
シーケンサ24は、先に説明した第1のリード・モディファイ・ライトを実行するための制御を実行する。
【0135】
温度センサ100は、SCMチップMD1に備えられているメモリセルの温度を測定する。
【0136】
後述の「ワード線WL」の表記に後続する英数字を伴った要素もワード線WLであり、後続する英数字はワード線WLを互いに区別するために使用される。後述の「ビット線BL」の表記に後続する英数字を伴った要素もビット線BLであり、後続する英数字はビット線BLを互いに区別するために使用される。後述の「グローバルビット線GBL」の表記に後続する英数字を伴った要素もグローバルビット線GBLであり、後続する英数字はグローバルビット線GBLを互いに区別するために使用される。後述の「メモリセルMC」の表記に後続する英数字を伴った要素もメモリセルMCであり、後続する英数字はメモリセルMCを互いに区別するために使用される。後述の「ゲート線SGL」の表記に後続する英数字を伴った要素もゲート線SGLであり、後続する英数字はゲート線SGLを互いに区別するために使用される。後述の「トランジスタST」の表記に後続する英数字を伴った要素もトランジスタSTであり、後続する英数字はトランジスタSTを互いに区別するために使用される。
【0137】
図3は、第1の実施形態に係るメモリセルアレイ23の一部の要素および接続を示す図である。
【0138】
図3に示されるように、αが0~k(kは自然数)の各々の場合について、グローバルビット線GBL0は、トランジスタSTα0を介してビット線BLα0と接続されている。同様に、αが0~kの各々の場合かつβが0~n(nは自然数)の各々の場合について、グローバルビット線GBLβは、トランジスタSTαβを介してビット線BLαβと接続されている。αが0~kの各々の場合かつβが0~nの各々の場合について、トランジスタSTαβはゲートにおいて、ゲート線SGLαと接続されている。
【0139】
βが0~nの各々の場合かつγが0~m(mは自然数)の各々の場合について、ビット線BL0βは、メモリセルMCaγ0βを介して、ワード線WLaγと接続されている。同様に、αが0~kの各々の場合かつβが0~nの各々の場合かつγが0~mの各々の場合について、ビット線BLαβは、メモリセルMCaγαβを介して、ワード線WLaγと接続されている。さらに、αが0~kの各々の場合かつβが0~nの各々の場合かつγが0~mの各々の場合について、ビット線BLαβは、メモリセルMCbγαβを介して、ワード線WLbγと接続されている。
【0140】
1つのゲート線SGLを共有する複数のトランジスタSTとそれぞれのビット線BLと、1つのワード線WLの間に接続された複数のメモリセルMCの組は、1つのセルセットCUを構成する。1つのセルセットCUにより提供される記憶空間は、ページと称される。あるセルセットCUの1ページの各ビットのデータは、当該セルセットCU中の1つのメモリセルMCによって保持される。
【0141】
図4は、第1の実施形態に係るメモリセルアレイ23の一部の立体構造を示す図であり、互いに直交するx軸、y軸、およびz軸により定義される空間での構造を示す。
【0142】
図示せぬ基板のz軸に沿った上方に、複数の導電体CGBが設けられる。導電体CGBは、x軸に沿って延び、y軸に沿って間隔を有し、各々が1つのグローバルビット線GBLとして機能する。
【0143】
各導電体CGBの上面上に、半導体SCが設けられる。1つの導電体CGBと接続された半導体SCは、x軸に沿って間隔を有して並ぶ。半導体SCは、例えばシリコンを含むか、シリコンからなる。各半導体SCは、x軸に沿って対向する2つの側面上において、絶縁体IGを設けられている。各半導体SCは、z軸の下方から、部分SCa、SCb、および、SCcを含む。
【0144】
導電体CGBの上方に、複数の導電体CSが設けられる。x軸に関して並ぶ導電体CBの対の各々の間に2つの導電体CSが間隔を有して並ぶ。導電体CSは、y軸に沿って延び、x軸に沿って間隔を有して並ぶ。各導電体CSは、1つのゲート線SGLとして機能し、1つの絶縁体IGと接し、当該絶縁体IGとともに1つの半導体SCの部分SCbを挟む。1つの部分SCb、1つの導電体CS、および、当該部分SCbならびに当該導電体CSの間の絶縁体IGは、1つのトランジスタSTを構成する。1つの半導体SCの部分SCaの一部およびSCcの一部は、1つのトランジスタSTのソース/ドレイン領域として機能する。1つの半導体SCの部分SCbの一部は、1つのトランジスタSTのチャネル領域として機能する。
【0145】
各半導体SCの上面上に、導電体CBが設けられる。複数の導電体CBは、z軸に沿って延び、各々が1つのビット線BL(BL0、BL1、…)として機能する。
【0146】
各導電体CBは、x軸に沿って対向する2つの側面上において、抵抗変化層VRを設けられている。抵抗変化層VRは、連続的に可変な値の抵抗を有することができる抵抗変化材料を含むか、そのような抵抗変化材料からなる。抵抗変化材料は、電圧を印加されると、より低い抵抗値を有する状態に至る。抵抗変化材料は、電流が流れると、より高い抵抗値の状態を有する状態に遷移する。このような抵抗変化材料は、HfO、TiO2、ZnMn2O4、NiO、SrZrO3、および、Pr0.7Ca0.3MnO3、C等の材料の少なくとも1つを含む。また、抵抗変化材料は、多結晶またはアモルファス状態のSi、または、Ge、SiGe、GaAs、InP、GaP、GaInAsP、GaN、SiC、SiO、SiON、SiN、HfSiO、AlOの少なくとも1つを含む。さらに、抵抗変化層VRは、上に列挙された材料の層が積層された構造を含むことが可能である。
【0147】
導電体CBと抵抗変化層VRとの間に、電極(図示せず)が設けられてもよい。電極の材料は、Ag、Au、Ti、Ni、Co、Al、Fe、Cr、Cu、W、Hf、Ta、Pt、Ru、Zr、または、Ir、あるいは、これらの材料の窒化物または炭化物を含む。また、電極は、上に列挙された材料を添加された多結晶シリコンから構成されることが可能である。
【0148】
導電体CSの上方に、導電体CWの複数の層が設けられる。相違する層は、z軸に沿って相違する座標に位置する。
図4は、5つの層の例、すなわちβ=5の場合の例を示し、第1層~第5層はこの順でz軸に沿って上方に向かって並ぶ。各層は、複数の導電体CWを含む。導電体CWは、y軸に沿って延び、x軸に沿って間隔を有して並ぶ。各層において隣り合う2つの導電体CWは、1つの導電体CBを挟み、当該導電体CB上の2つの抵抗変化層VRとそれぞれ接する。各層中の導電体CWのうちの1つおきの複数の導電体CWの第1組は、第1層のx軸およびy軸に沿った面の構造を示す
図5に示されるように、当該導電体CWの各第1端において相互に接続されており、導電体CWとそれらを接続する導電体とは櫛形構造を形成する。同様に、各層中の複数の導電体CWのうちの1つおきの複数の導電体CWの第2組は、
図5に示されるように、当該導電体CWの各第2端において相互に接続されており、導電体CWとそれらを接続する導電体とは櫛形構造を形成する。γが0~n(nは自然数)の各々の場合について、第γ層の導電体CWの第1組はワード線WLaγとして機能し、第γ層の導電体CWの第2組はワード線WLbγとして機能する。
図5は、第1層について示す。
【0149】
各抵抗変化層VRのうち、1つの導電体CWと1つの導電体CBとに挟まれた部分は、1つのメモリセルMCとして機能する。
【0150】
メモリセルMCは、ライトにより、低抵抗状態または高抵抗状態へと移される。
図6に示されるように、ライトされた直後の低抵抗状態のメモリセルMCはある抵抗値Rlhより低い抵抗値を有し、かつライトされた直後の高抵抗状態のメモリセルMCはある抵抗値Rhsより高い抵抗値を有するように、メモリセルMCにデータがライトされる。高抵抗状態にある複数のメモリセルMCであっても、メモリセルMC、センスアンプ、および、配線の特性等のばらつきに起因して、相違する抵抗値を有し得る。同様に、低抵抗状態にある複数のメモリセルMCであっても、相違する抵抗値を有し得る。このため、同じ抵抗状態にあるメモリセルMCの抵抗値は1つの分布を形成する。
【0151】
低抵抗状態にある複数のメモリセルMCのうち、最大の抵抗値を有するメモリセルMClhは、抵抗値Rlhを有する。一方、高抵抗状態にある複数のメモリセルMCのうち、最小の抵抗値を有するメモリセルMChsは、抵抗値Rhsを有する。ライトされた直後の複数のメモリセルMCについての抵抗値Rlhと抵抗値Rhsが大きな差を有するようにSCMチップMD1は動作する。
【0152】
メモリセルMCは抵抗状態に基づいてデータを記憶し、よってデータのリードのためにメモリセルMCの抵抗値が判断される。そのために、
図7に示されるように、メモリセルMCにある大きさのリード電圧Vrが印加され、結果メモリセルMCを流れる電流の大きさに基づいてメモリセルMCの抵抗値がセンスアンプ28によって判断される。2つの抵抗値分布が間隔を有するようにデータがライトされかつ適当なリード電圧Vrが使用されることにより、リード電圧Vrの印加によって、センスアンプ28は、メモリセルMCが2つの抵抗状態のいずれにあるかを判断することができる。低抵抗状態にあるメモリセルMCは、導体に類似の低い抵抗値を有し、よって、ある大きさのリード電圧Vrを印加されると、メモリセルMCをある大きさの以上のリード電流が流れる。一方、高抵抗状態にあるメモリセルMCは、絶縁体に類似の高い抵抗値を有し、よって、リード電圧Vrを印加されても、ある大きさ以下のリード電流しか流れない。センスアンプ28は、リード電流が基準の大きさ以下の場合、メモリセルMCが0データを保持していると判断し、リード電流が基準の大きさを超える場合、メモリセルMCが1データを保持していると判断する。基準の大きさを超えるリード電流を流す抵抗状態のメモリセルMCが0データを保持していて、基準の大きさ以下リード電流を流す抵抗状態のメモリセルMCが1データを保持しているとして扱われてもよい。
【0153】
図6に示されるように、SCMチップMD1での通常のデータリードでは、通常リード電圧VmがメモリセルMCに印加される。通常リード電圧Vmは、リード電圧Vlhとリード電圧Vhsとの間の大きさを有する。リード電圧Vlhは、ライト直後の低抵抗状態のメモリセルMCに印加された場合にいずれの低抵抗状態のメモリセルもが低抵抗状態にあると判断される大きさのリード電流を流す大きさを有する。リード電圧Vhsは、ライト直後の高抵抗状態のメモリセルMCに印加された場合にいずれの高抵抗状態のメモリセルMCもが高抵抗状態にあると判断される大きさのリード電流を流す大きさを有する。リード電圧Vlh以下のリード電圧がデータリードに使用されると、最大抵抗値メモリセルMCを含むいくつかのメモリセルMCは、高抵抗状態にあると誤って判断され得る。リード電圧Vhs以上のリード電圧がデータリードに使用されると、最小抵抗値メモリセルMChsを含むいくつかのメモリセルMCは、低抵抗状態にある誤って判断され得る。
【0154】
図8は、センスアンプ28およびデータラッチセット29の要素および接続を示す図である。
図8の太線は、制御信号を伝送する。
【0155】
センスアンプ28は、n+1個のセンスアンプ回路SACを含む。センスアンプ回路SACは、要素および接続の同じ組を有し、グローバルビット線GBL(GBL0、GBL1、…)とそれぞれ接続されている。データのリードの際、各センスアンプ回路SACは、当該センスアンプ回路SACと接続された(対応する)1つのグローバルビット線GBLおよび1つのビット線BLを介してリード対象の1つのメモリセルMCと電気的に接続される。そして、各センスアンプ回路SACは、対応するビット線BLの電流をセンスし、センスの結果に基づいて、対応するメモリセルMCが2つの抵抗状態のいずれに属するかを判断する。各センスアンプ回路SACは、センスの結果、2つの抵抗状態に基づいて、データ0またはデータ1を保持する。
【0156】
データラッチセット29は、データラッチ29a、29b、29c、および、29d、ならびに、複数の演算回路LCを含む。データラッチ29a、29b、29c、および、29dの各々は、1ページの大きさデータを保持できる。データラッチ29aは、n+1個のデータラッチ回路DLCaを含む。データラッチ29bは、n+1個のデータラッチ回路DLCbを含む。データラッチ29cは、n+1個のデータラッチ回路DLCcを含む。データラッチ29cは、n+1個のデータラッチ回路DLCdを含む。データラッチ回路DLCa、DLCb、DLC、および、DLCdは、相互に区別される必要が無い場合は、データラッチ回路DLCと称される。各データラッチ回路DLCは、1ビットのデータを保持できる。
【0157】
データラッチ29dは、例えば、SCMコントローラ2とSCMチップMD1との間のデータの入出力に使用される。SCMコントローラ2から受信されたデータは、まずデータラッチ29dに入力され、SCMチップMD1から出力されるデータは、データラッチ29dから送出される。
【0158】
データラッチ29a、29b、29c、および、29dの各々の1つのデータラッチ回路DLCは、1つのセンスアンプ回路SACと接続されている。相互に接続されたセンスアンプ回路SAC、および、データラッチ回路DLCa、DLCb、DLCc、ならびに、DLCdは、それぞれ、センスアンプ28、ならびに、データラッチ29a、29b、29c、および、29dの各々の1ページサイズデータ中の同じ位置のビットを扱う。
【0159】
図9は、SCMチップMD1~MDzと、このSCMチップMD1~MDzにライトされるフレームFRとの関係の例を示す図である。この
図9において、SCMコントローラ2に備えられる構成要素は、バッファメモリ5a、メモリ部5の状態データ10、エンコーダ7、デコーダ8、第1の判断部14、第1の変更部15、第2の判断部19、第2の変更部20のみを図示しており、他の構成要素は省略している。また、以下の説明においては、リードされたデータはECCデコーダ82によりエラー訂正可能であり、SCMチップMD1~MDzにチップ故障が発生しない場合を例として説明するため、デコーダ8に備えられるXORデコーダ83は省略している。
【0160】
第1の実施形態において、フレームFRは、所定のサイズ(または所定の数)になるまでユーザデータUDを集めたペイロード部分PLと、当該ペイロード部分PLに対応する付加データADとを含むとする。
【0161】
第1の実施形態において、プロセッサ3は、64バイト単位でSCMモジュール1をアクセスする。アクセスとは、例えば、データのライト、および、データのリードを含むとする。
【0162】
SCMコントローラ2は、ライト処理時に、プロセッサ3から受信したユーザデータUDをバッファメモリ5aにライトする。SCMコントローラ2は、バッファメモリ5aに記憶されているユーザデータUDの集合がフレームFRを生成する所定のサイズになった場合に、フレームFRの生成を開始する。
【0163】
エンコーダ7は、ペイロード部分PLに対して、CRCエンコーダ71、ECCエンコーダ72、XORエンコーダ73によるエンコードを実行し、ペイロード部分PLに対する付加データADを生成する。
【0164】
第1の実施形態において、付加データADは、例えば、CRC符号情報、ECCパリティ、および、XORパリティを含む。しかしながら、XORパリティは、付加データADに含まれず、フレームとXORパリティとは別構成として管理され、SCMチップMD1~MDzのうちの少なくとも1つが、XORパリティの記憶用として使用されてもよい。
【0165】
第1の判断部14は、例えばライト先のライト回数などの状態情報を含む状態データ10に基づいて、フレームFRのビット順序を変更するか否か判断する。
【0166】
第1の変更部15は、フレームFRのビット順序を変更すると判断された場合に、状態データ10に基づいて、フレームFRのビット順序を変更する。
【0167】
そして、SCMコントローラ2は、ビット順序を変更したフレームFRを、複数のSCMチップMD1~MDzに跨ってライトする。
【0168】
なお、SCMコントローラ2は、フレームFRに含まれているペイロード部分PLの一部分を書き換える場合、パリティを再計算し、第2のリード・モディファイ・ライトにより、書き換えが必要なペイロード部分PLの一部分と付加データADの一部分とを書き換える。
【0169】
第2のリード・モディファイ・ライトにおいては、SCMコントローラ2が、SCMチップMD1~MDzからフレームをリードし、書き換えを行う一部分を書き換えることにより実行されてもよい。
【0170】
あるいは、第1のリード・モディファイ・ライトは、SCMチップMD1~MDz内で、一部分を書き換えることにより実行されてもよい。
【0171】
SCMコントローラ2は、リード処理時に、複数のSCMチップMD1~MDzから、フレームFRをリードする。
【0172】
第2の判断部19は、例えば状態データ10に基づいて、フレームFRのビット順序を変更するか(すなわち、元に戻すか)否か判断する。
【0173】
第2の変更部20は、フレームFRのビット順序を変更すると判断された場合に、状態データ10に基づいて、フレームFRのビット順序を変更する。
【0174】
デコーダ8におけるECCデコーダ82は、付加データADに含まれているECCパリティに基づいて、ペイロード部分PLに対するエラー検出およびエラー訂正を行い、デコーダ8におけるCRCデコーダ81は、付加データADに含まれているCRC符号情報に基づいて、ペイロード部分PLに対するエラー検出を行う。デコーダ8は、ペイロード部分PLにエラーがないと判断した場合に、ペイロード部分PLをバッファメモリ5aにライトする。
【0175】
そして、SCMコントローラ2は、ペイロード部分PLに含まれるユーザデータUDをプロセッサ3へ送信する。
【0176】
図10は、フレームFRのビット順序の変更状態の例を示す図である。
【0177】
第1の実施形態では、上記のように、ライト先のライト回数などに基づいて、フレームFR内のビット順序が変更される。
【0178】
より具体的に説明すると、ライト先のライト回数が第1のライト回数以下のフレームFRにおいて、フレームFR内のデータは、左から右へ、データP_A~P_H、付加データADの順で並んでいる。フレームFRは、この状態でSCMチップMD1~MDzにライトされる。
【0179】
フレームFRは、ライト先のライト回数が第1のライト回数(例えば1000回)を超えた場合に、2チップ分、データがずらされ、フレームFR1が生成される。フレームFR1内のデータは、左から右へ、データP_C~P_H、付加データAD、データP_A~P_Bの順で並んでいる。フレームFR1は、フレームFRの状態からビット順序が2チップ分ずれた状態で、SCMチップMD1~MDzにライトされる。
【0180】
フレームFR1は、ライト先のライト回数が第2のライト回数(例えば2000回)を超えた場合に、フレームFR1の状態からさらに2チップ分データがずらされ、フレームFR2が生成される。フレームFR2内のデータは、左から右へ、データP_E~P_H、付加データAD、データP_A~P_Dの順で並んでいる。フレームFR2は、フレームFRの状態からビット順序が4チップ分ずれた状態で、SCMチップMD1~MDzにライトされる。
【0181】
以下、同様に、フレームFRのライト先のライト回数が増加するにつれて、フレームFRのビット順序が変更される。
【0182】
なお、この
図10およびその説明は、例であり、ビット順序をどのように変更するか、および、ビット順序をどのような条件が満たされた場合に変更するかは、適宜変更可能である。
【0183】
仮に、SCMモジュール1に不正電源断が発生し、最新の状態情報が不揮発化されていない場合を想定する。この場合、SCMコントローラ2で管理されていた最新の状態情報が揮発する。すると、SCMモジュール1を再起動しても、状態情報は古いままであり、SCMコントローラ2は、リードしたフレームを正しいビット順序へ変更することができない。したがって、第1の実施形態においては、SCMコントローラ2の処理部6は、
図10で例示するようにフレームのビット順序を変更すると、このフレームに対応する状態情報を、例えばSCMチップMD1~MDzに記憶させるなどにより不揮発化する。
【0184】
この
図10に示すように、SCMモジュール1は、フレームをSCMチップMD1~MDzにライトする場合に、例えばライト先のライト回数に応じて、フレームFR内のビット順序を変更する。より具体的には、SCMモジュール1は、ペイロード部分PLおよび付加データADの位置または順序を変える。
【0185】
なお、SCMモジュール1は、ペイロード部分PLの内部の疲弊の偏りを考慮して、例えば、ユーザデータUDの単位、ユーザデータUDより小さい単位、ユーザデータUDより大きい単位、チップ単位など、位置をずらすビット数(ビットを巡回させるレベル)を決定または変更してもよい。
【0186】
ただし、SCMモジュール1は、システム管理情報を含むフレームのビット順序を変更しないものとする。
【0187】
SCMモジュール1は、例えば、プロセッサ3から64バイトのユーザデータUDに対する連続するアドレスに対するライト要求を受信した場合、第1の判断部14の処理および第1の変更部15の処理をスキップしてもよい。この場合、SCMモジュール1は、連続で受信したユーザデータUDに基づいてフレームを生成し、生成したフレームをビット順序に関する判断および変更をすることなく、SCMチップMD1~MDzへライトする。
【0188】
図11は、第1の実施形態に係るSCMモジュール1で実行されるフレームFRのライト処理の例を示すフローチャートである。この
図11は、例えば、バッファメモリ5aに、フレームFRを生成するための所定個数のユーザデータUDが記憶されている場合に、実行される。
【0189】
S1101において、アドレス変換部11は、アドレス変換テーブルATに基づいて、ライト先の論理アドレスを、ライト先の物理アドレスに変換する。
【0190】
S1102において、第1のリード制御部12は、バッファメモリ5aから、フレームFRを生成するための所定個数のユーザデータUDをリードする。
【0191】
S1103において、エンコード制御部13は、CRCエンコーダ71を用いて、リードしたユーザデータUDに対してCRCエンコードを実行し、CRC符号情報を生成する。
【0192】
S1104において、エンコード制御部13は、ECCエンコーダ72を用いて、リードしたユーザデータUDに対してECCエンコードを実行し、リードしたユーザデータUDに対応するECCパリティを生成する。
【0193】
S1105において、エンコード制御部13は、XORエンコーダ73を用いて、リードしたユーザデータUDとECCパリティとのXORを演算してXORパリティを生成する。
【0194】
S1106において、エンコード制御部13は、リードしたユーザデータUDと、CRC符号情報、ECCパリティ、XORパリティを含む付加データとを含むフレームを生成する。
【0195】
S1107において、第1の判断部14は、例えば、状態データ10に含まれているフレームFRのライト先のライト回数に基づいて、生成したフレームFRのビット順序を変更するか否かを判断する。
【0196】
生成したフレームFRのビット順序を変更しない場合(S1107のNo)、処理はS1109へ移動する。
【0197】
生成したフレームFRのビット順序を変更する場合(S1107のYes)、S1108において、第1の変更部15は、状態データ10に含まれているフレームFRのライト先のライト回数に基づいて、フレームFRのビット順序を変更する。
【0198】
S1109において、第1のライト制御部16は、生成されたフレームFRまたはビット順序が変更されたフレームFRを、SCMチップMD1~MDzのライト先へライトする。
【0199】
S1110において、更新部17は、ライト先のライト回数を増加させるように、状態データ10を更新する。
【0200】
図12は、第1の実施形態に係るSCMモジュール1で実行されるリード処理の例を示すフローチャートである。
【0201】
S1201において、アドレス変換部11は、アドレス変換テーブルATに基づいて、リード対象の論理アドレスを、リード対象の物理アドレスに変換する。
【0202】
S1202において、第2のリード制御部18は、SCMチップMD1~MDzにおけるリード対象の物理アドレスの示す位置から、フレームFRをリードする。
【0203】
S1203において、第2の判断部19は、状態データ10に含まれており、SCMチップMD1~MDzにおけるリード対象の位置に対応するライト回数に基づいて、リードしたフレームFRのビット順序を変更するか否かを判断する。
【0204】
リードしたフレームFRのビット順序を変更しない場合(S1203のNo)、処理はS1205へ移動する。
【0205】
リードしたフレームFRのビット順序を変更する場合(S1203のYes)、S1204において、第2の変更部20は、状態データ10に含まれており、SCMチップMD1~MDzにおけるリード対象の位置に対応するライト回数に基づいて、フレームFRのビット順序を変更する(元に戻す)。
【0206】
S1205において、デコード制御部21は、ECCデコーダ82を用いて、リードしたフレームFRまたはビット順序が変更されたフレームFRに対してECCデコードを実行する。
【0207】
S1206において、デコード制御部21は、CRCチェック部81を用いて、リードしたフレームFRまたはビット順序が変更されたフレームFRに対してCRCチェックを実行する。
【0208】
S1207において、第2のライト制御部22は、エラー検出およびエラー訂正後のフレームFRに含まれている所定個数のユーザデータUDを、バッファメモリ5aにライトする。
【0209】
以上説明した第1の実施形態に係るSCMモジュール1によって得られる効果を説明する。
【0210】
SCMチップMD1~MDzが第1のリード・モディファイ・ライトを実行すると、メモリセルにビット反転が発生し、メモリセルに対するライト回数が増加し、メモリセルの疲弊が進行する。メモリセルの疲弊が進むと、SCMチップMD1~MDzの寿命は短くなる。また、SCMチップMD1~MDzに記憶されているフレームFRには、ペイロード部分PLと付加データADが含まれており、さらに付加データADには、CRC符号情報、ECCパリティ、XORパリティが含まれる。ペイロード部分PLの一部が更新されるたびに、付加データADが更新される必要がある。そのため、付加データADのライト回数は、フレームFRのペイロード部分PLの一部のライト回数よりも多くなる。
【0211】
したがって、フレームFRのビット順序が固定されている場合、付加データADのライト先のメモリセルがペイロード部分PLのライト先のメモリセルより疲弊速度が速くなり、SCMチップMD1~MDzに備えられているメモリセルの間で耐久性にばらつきが生じる。
【0212】
これに対して、第1の実施形態に係るSCMモジュール1においては、フレームFRのビット順序が変更されるため、SCMチップMD1~MDzのメモリセルの疲弊が平準化(均等化)され、SCMチップMD1~MDzの耐久性の向上と長寿命化を実現することができる。
【0213】
図13は、SCMチップMD1~MDzに跨る1つのフレームFRのライト先エリアE_A~E_Kの例を示す図である。第1の実施形態においてエリアとは、例えば、メモリセルの集合を意味するものとする。
【0214】
フレームFRは、例えば、11個のSCMチップMD1~MD11のそれぞれに備えられているライト先エリアE_A~E_Kのそれぞれに跨ってライトされる。
【0215】
ライト先エリアE_A~E_Kのそれぞれは、例えば、32バイトとしてもよい。この場合、64バイトの1つのユーザデータUDは、ライト先エリアE_A~E_Kのうちの2つに跨ってライトされる。
【0216】
フレームFRのビット順序が固定の場合、フレームFRのペイロード部分PLは、例えば、8個のライト先エリアE_A~E_Kに跨ってライトされる。フレームFRのビット順序が固定の場合、フレームFRの付加データADは、例えば、3個のライト先エリアE_I~E_Kに跨ってライトされる。
【0217】
フレームFRのビット順序が固定の場合、SCMチップMD1~MDzのうち付加データADがライトされるチップの更新頻度が、ペイロード部分PLがライトされるチップの更新頻度よりも高くなり、付加データADがライトされるチップのメモリセルの疲弊が進行する。
【0218】
また、フレームFRのペイロード部分PLに含まれている複数のユーザデータUDの間でライトアクセスに局所的な偏りがある場合、アクセス頻度の高いユーザデータUDに対応するメモリセルの疲弊が進行する。
【0219】
さらに、暗号器非搭載でありフレームFRのビット順序が固定のSCMモジュールにおいては、複数のユーザデータUDの間で疲弊が偏る可能性がある。
【0220】
しかしながら、第1の実施形態に係るSCMモジュール1においては、複数のSCMチップMD1~MDzに跨ってライトされるフレームFRのビット順序が変更される。この結果、フレームFRのライト先となる例えば11個のライト先エリアE_A~E_Kのライト回数は平準化する。これにより、第1の実施形態においては、複数のSCMチップMD1~MDzのメモリセルの疲弊を平準化することができ、SCMチップMD1~MDzの耐久性の向上と長寿命化を実現することができる。
【0221】
特に、第2のリード・モディファイ・ライトを実行する場合、フレームFRの付加データADの疲弊が進行する傾向にあるが、第1の実施形態に係るSCMモジュール1は、フレームFRのビット順序を変更することにより、SCMチップMD1~MDzのメモリセルの疲弊を平準化することができる。
【0222】
第1の実施形態においては、SCMチップMD1~MDzの疲弊を平準化することができるため、SCMチップMD1~MDzに対するウェアレベリングの実行頻度を下げることができ、SCMモジュール1の処理効率を上げることができる。
【0223】
例えば、システム管理情報は、SCMコントローラ2が起動してからビット順序を元に戻す処理を実行可能になるまでの間に、SCMコントローラ2によって使用される場合がある。第1の実施形態においては、例えば、システム管理情報を含むフレームは、ビット順序の変更対象から外される。このため、SCMコントローラ2は、SCMコントローラ2が起動してからビット順序を元に戻す処理を実行可能になるまでの間であっても、SCMチップMD1~MDzからシステム管理情報を含むフレームをリードし、システム管理情報を使用することができる。
【0224】
なお、第1の実施形態においては、システム管理情報のビット順序は変更されない場合を説明している。このようにシステム管理情報のビット順序が変更されない場合においては、別の方法によりシステム管理情報に関するライト回数またはライト頻度などを低下させて、メモリセルが消耗することを防止してもよい。
【0225】
ここで、システム管理情報に関するライト回数を低下させる方法を具体的に説明する。SCMコントローラ2は、SCMチップMD1~MDzへライトするデータの種類、および、SCMチップMD1~MDzからリードするリードデータの種類を認識している。また、SCMコントローラ2は、データのライト先となる物理アドレスも決定可能である。そこで、SCMコントローラ2は、例えば、SCMチップMD1~MDzのいずれかに、システム管理情報を含むフレームをライトする場合に、システム管理情報を含むフレームを連続する物理アドレスにしたがって追記する。このように、システム管理情報を連続するアドレスへ追記することで、システム管理情報が同じライト先に繰り返しライトされてメモリセルが疲弊することを防止することができる。
【0226】
SCMモジュール1は、例えば、システム管理情報の一種である状態データ10を、ビット順序の変更が発生した場合のみ、メモリ部5からSCMチップMD1~MDzへ書き戻す。一方で、SCMモジュール1は、例えば、ビット順序の変更が発生していない場合には、状態データ10をメモリ部5からSCMチップMD1~MDzへ書き戻さないとしてもよい。このように、ビット順序の変更が発生していない場合の状態データ10を揮発させることで、SCMチップMD1~MDzに対する状態データ10のライト回数を抑制することができる。
【0227】
SCMモジュール1は、例えば、無停電電源装置などのような大容量のバッテリに接続されている場合には、システム管理情報を、シャットダウン前に1回、SCMチップMD1~MDzにライトするとしてもよい。これにより、SCMチップMD1~MDzに対するシステム管理情報のライト回数を抑制することができる。
【0228】
第1の実施形態において、フレームFRのビット順序を変更する各種の構成要素は、SCMコントローラ2に備えられている場合を例として説明している。しかしながら、SCMチップMD1~MDzが、それぞれに割り当てられたデータに対して、ビット順序を変更してもよい。
【0229】
第1の実施形態において、SCMコントローラ2は、データの種類がシステム管理情報か否かを判断することにより、ビット順序変更の実行、または、不実行を切り替えている。しかしながら、ビット順序変更の実行、または、不実行を切り替えるデータの種類は、システム管理情報に限定されない。SCMコントローラ2は、データが他の種類か否かを判断することにより、ビット順序変更の実行、または、不実行を切り替えてもよい。
【0230】
第1の実施形態では、ウェアレベリングの管理単位が1フレームであり、1フレームごとに状態情報が管理される場合を例として説明している。しかしながら、ウェアレベリングの管理単位は、複数のフレーム(例えば、4フレーム)であり、複数のフレームに対応する状態情報が管理されてもよい。SCMコントローラ2は、プロセッサ3から同一の論理アドレスの特定のフレームに対するライト要求を、繰り返し受信したとする。この場合、SCMコントローラ2は、特定のフレームに加えて、当該特定のフレームと同じ状態情報に対応する他のフレーム(例えば、3フレーム)を、SCMチップMD1~MDzからリードする。そして、SCMコントローラ2は、状態情報に基づいて、特定のフレームおよび他のフレームのビット順序を変更し、ビット順序を変更した特定のフレームおよび他のフレームを、SCMチップMD1~MDzへライトする。これにより、状態情報が複数のフレームごとに管理される場合にも、SCMチップMD1~MDzのメモリセルの疲弊を平準化し、SCMチップMD1~MDzの長寿命化を実現できる。
【0231】
(第2の実施形態)
第2の実施形態においては、SCMコントローラ2のウェアレベリング実行時に、フレームのビット順序を変更することを説明する。第2の実施形態において、ウェアレベリングは、例えば、SCMチップMD1~MDzに対して、疲弊の進行している(例えばライト回数が多い)エリアのデータを、疲弊の進行していない(例えばライト回数が少ない)エリアへ移動させる処理とする。SCMチップMD1~MDzに対してウェアレベリングを実行することにより、SCMチップMD1~MDzの寿命を延ばすことができる。
【0232】
図14は、第2の実施形態に係るアドレス変換テーブルAT1の例を示す図である。このアドレス変換テーブルAT1は、上記第1の実施形態で説明したアドレス変換テーブルATと状態データ10とに対応する。
【0233】
アドレス変換テーブルAT1は、論理アドレスLAと物理アドレスPAとビット順序情報BOIとを関連付けている。
【0234】
ビット順序情報BOIは、物理アドレスPAの示す位置へライトされたフレームFRのビット順序の変更パターンを示す情報である。このビット順序情報BOIを参照することにより、物理アドレスPAの示す位置からリードしたデータのビット順序を元に戻すことが可能になる。
【0235】
ビット順序情報BOIは、例えば、複数の順序変更パターンからランダムに特定の順序変更パターンが選択されることで決定されてもよい。
【0236】
ビット順序情報BOIは、関数またはテーブルに基づいて決定されてもよい。
【0237】
図15は、第2の実施形態に係るSCMモジュール1Aの構成の例を示す機能ブロック図である。
【0238】
SCMモジュール1AのSCMコントローラ2Aは、メモリ部5A、バッファメモリ5a、アドレス変換部11A、第1のリード制御部12A、エンコーダ7、第1の変更部15A、第1のライト制御部16A、第2のリード制御部18A、第2の変更部20A、デコーダ8、第2のライト制御部22Aを備える。
図15において、SCMコントローラ2Aの他の構成要素は、省略している。なお、アドレス変換部11A、第1のリード制御部12A、第1の変更部15A、第1のライト制御部16A、第2のリード制御部18A、第2の変更部20A、第2のライト制御部22Aは、SCMコントローラ2Aに備えられている処理部が、メモリ部5Aに記憶されているファームウェアを実行することにより実現されてもよい。
【0239】
メモリ部5Aは、アドレス変換テーブルAT1を記憶する。
【0240】
アドレス変換部11Aは、ウェアレベリング時のライト処理において、ライト先の論理アドレスと、ライト先の物理アドレスと、ビット順序情報とを関連付けてアドレス変換テーブルAT1に登録する。
【0241】
第1のリード制御部12Aは、ライト処理時に、バッファメモリ5aからユーザデータUDをリードする。
【0242】
エンコーダ7は、バッファメモリ5aからリードされたユーザデータUDに対するエンコードを実行し、ユーザデータUDと付加データADとを含むライト対象のフレームFRを生成する。
【0243】
第1の変更部15Aは、アドレス変換テーブルAT1を参照し、ビット順序情報BOIに基づいて、ライト対象のフレームFRのビット順序を変更する。
【0244】
そして、第1のライト制御部16Aは、ビット順序が変換されたフレームFRを、SCMチップMD1~MDzにおけるライト先の物理アドレスに対応する位置に、ライトする。
【0245】
SCMコントローラ2Aのアドレス変換部11Aは、リード処理において、アドレス変換テーブルAT1に基づいて、リード対象の論理アドレスをリード対象の物理アドレスへ変換する。
【0246】
第2のリード制御部18Aは、複数のSCMチップMD1~MDzにおけるリード対象の物理アドレスの示す位置から、フレームFRをリードする。
【0247】
第2の変更部20Aは、アドレス変換テーブルAT1を参照し、リード対象の物理アドレスに対応するビット順序情報BOIに基づいて、フレームFRのビット順序を元に戻す。
【0248】
デコーダ8は、ビット順序が元に戻されたフレームFRに対するデコードを実行する。
【0249】
そして、第2のライト制御部22Aは、フレームFRに含まれているユーザデータUDを、バッファメモリ5aにライトする。
【0250】
以上説明した第2の実施形態に係るSCMモジュール1Aにおいては、アドレス変換テーブルAT1の論理アドレスLAまたは物理アドレスPAに、ビット順序情報BOIが関連付けられている。そして、SCMモジュール1Aは、ウェアレベリング実行時のライト処理、および、リード処理において、ビット順序情報BOIに基づいてフレームFRの順序を変更する。
【0251】
これにより、複数のSCMチップMD1~MDzの間で、メモリセルの疲弊を平準化することができ、SCMチップMD1~MDzの耐久性の向上と長寿命化を実現することができる。
【0252】
なお、上記第1および第2の実施形態で説明したフレームFRのビット順序の変更は、SCMモジュール1,1Aのバックグラウンド処理においてリード処理およびライト処理が発生した場合に適用してもよい。例えば、バックグラウンド処理としてウェアレベリングが実行される場合に、フレームFRのビット順序を変更してもよい。また、例えば、バックグラウンド処理としてガベージコレクションを実行する場合に、フレームFRのビット順序を変更してもよい。ガベージコレクションとは、例えば、SCMチップMD1~MDz内のガベージコレクション元エリアに断片的に配置(記憶)されているデータを、ガベージコレクション先エリアにまとめて再配置(書き換え)し、ガベージコレクション元エリアのデータを無効化する処理である。ガベージコレクションは、コンパクションと表記されてもよい。
【0253】
上記第1および第2の実施形態では、1つのフレームFRに対してビット順序を変更するか否かを判断し、1つのフレームFRに対してビット順序の変更を実行している。しかしながら、例えばSCMチップMD1~MDzにおける管理単位が、フレームのサイズよりも大きい場合、複数フレーム単位で状態情報を管理し、複数フレーム単位でビット順序を変更するか否かを判断し、複数フレームに対して同じビット順序の変更を実行してもよい。
【0254】
上記第1および第2の実施形態において、SCMコントローラ2,2Aは、デコード制御部21およびデコーダ8によってSCMチップMD1~MDzのエリアに不良が発生したか否かを検知してもよい。SCMコントローラ2,2Aは、エリアのメモリセルの不良を検知した場合に、不良の検出されたエリアに代えて、SCMチップMD1~MDzにおける他のエリアを使用してもよい。
【0255】
上記第1および第2の実施形態において、第1のライト制御部16,16Aは、複数のSCMチップMD1~MDzに対して、マルチキャストによりフレームをライトしてもよい。また、第2のリード制御部18,18Aは、複数のSCMチップMD1~MDzから、マルチキャストによりライトされたフレームをリードしてもよい。マルチキャストを用いた場合の具体例は、後述の第4の実施形態で説明する。
【0256】
上記第1および第2の実施形態において、第2の変更部20,20Aは、リードした少なくとも1つのフレームのうちの一部のビット順序を変更してもよい。デコーダ8は、リードした少なくとも1つのフレームのうちの一部に対するデコードを実行してもよい。第2のライト制御部22,22Aは、デコードされたフレームの一部を、バッファメモリ5aにライトし、他の部分を読み捨ててもよい。これにより、SCMコントローラ2,2Aの負荷増加を抑制することができる。
【0257】
上記第1および第2の実施形態においては、フレームFRが複数のSCMチップMD1~MDzに跨ってライトおよびリードされる場合を例として説明している。しかしながら、上記第1および第2の実施形態は、SCMコントローラ2,2Aが1つのSCMチップに対してフレームFRをライトおよびリードする場合に適用されてもよい。例えば、SCMコントローラ2,2Aが1つのSCMチップ内の複数のページに跨ってフレームFRをライトおよびリードする場合に、上記第1および第2の実施形態で説明された処理が適用されてもよい。
【0258】
上記第1および第2の実施形態は、SCMコントローラ2,2Aが複数のSCMチップMD1~MDzに跨って、かつ、各SCMチップMD1~MDzの2以上のページに対して、フレームFRをライト・リードする場合に適用されてもよい。上記の
図9および
図15を参照してより具体的に説明すると、SCMコントローラ2,2Aが、フレームFRに含まれる複数のユーザデータUDおよび付加データADのそれぞれを、各SCMチップMD1~MDz内の2ページ分のエリアに対してライト・リードする場合に、上記第1および第2の実施形態で説明された処理が適用されてもよい。
【0259】
(第3の実施形態)
第3の実施形態は、上記第1および第2の実施形態の変形例である。第3の実施形態では、例として第1の実施形態に対する変形を説明するが、第2の実施形態に対する変形も同様である。
【0260】
第3の実施形態では、複数のフレームに対する垂直パリティを含むパリティフレームを生成し、複数のフレームおよびパリティフレームの配置をずらす。
【0261】
図16は、第3の実施形態において生成される複数のフレームFRV1~FRVwおよび垂直パリティフレームFRPの例を示す図である。
【0262】
フレームFRV1~FRVwのそれぞれは、ユーザデータUDおよび付加データADを含む。ここで、wは、2以上の整数である。
図16において、フレームFRV1~FRVwのそれぞれは、水平方向に配列されているビット情報である。
図16において、フレームFRV1~FRVwは、垂直方向に重ねて配列されている。
【0263】
垂直パリティフレームFRPは、
図16のように、垂直方向に重ねて配列されている複数のビット情報から生成される垂直パリティを含む。言い換えれば、垂直パリティフレームFRPに含まれている垂直パリティは、複数のフレームFRV1~FRVwのそれぞれに含まれているビット情報に対して計算されたパリティである。フレームFRV1~FRVwのそれぞれと、垂直パリティフレームFRPは、同じサイズである。
【0264】
第3の実施形態において、SCMコントローラ2は、SCMチップMD1~MDzに跨ってフレームFRV1~FRVwおよび垂直パリティフレームFRPをライトする。例えば、SCMチップMD1~MDzは、フレームFRV1~FRVwを記憶するw個のページと、当該w個のページに記憶されているフレームFRV1~FRVwから生成される垂直パリティフレームを記憶するページとを含む。SCMコントローラ2は、フレームFRV1~FRVwと垂直パリティフレームFRPとの対応関係を管理している。例えば、SCMコントローラ2は、フレームFRV1~FRVwおよび垂直パリティフレームFRPを、連続する論理アドレスまたは物理アドレスにしたがってSCMチップMD1~MDzにライトすることで、フレームFRV1~FRVwおよび垂直パリティフレームFRPを関連付けてもよい。フレームFRV1~FRVwを記憶するw個のページは、例えばウェアレベリングの管理単位に対応することが好ましい。
【0265】
SCMコントローラ2は、フレームFRV1~FRVwのいずれかを新しいデータにより上書きする場合、垂直パリティフレームFRPを更新する必要がある。具体的には、SCMコントローラ2は、SCMチップMD1~MDzから、上書き対象のフレームと垂直パリティフレームFRPとをリードする。SCMコントローラ2は、リードした上書き対象のフレーム、垂直パリティフレームFRP、新しい上書き対象のフレームに基づいて垂直パリティを計算し、垂直パリティフレームFRPを更新する。そして、SCMコントローラ2は、更新した垂直パリティフレームFRPと新しい上書き対象のフレームとを、SCMチップMD1~MDzへリード・モディファイ・ライトする。
【0266】
例えば、プロセッサ3がフレームFRV1~FRVwのそれぞれに対して1回ずつライトをしたと仮定する。この場合、フレームFRV1~FRVwのそれぞれのライト回数は1回増加するが、垂直パリティフレームFRPのライト回数はw回増加する。
【0267】
そこで、第3の実施形態において、SCMコントローラ2は、例えばウェアレベリングの管理単位で管理されている状態情報を参照し、状態情報が例えば閾値を超えるなどの配置変更条件を満たすか否かを判断する。そして、SCMコントローラ2は、配置変更条件を満たすと判断した場合に、フレームFRV1~FRVw及び垂直パリティフレームFRPの配置順序を変更する。第3の実施形態において、SCMコントローラ2は、例えば、フレームFRV1~FRVw及び垂直パリティフレームFRPのそれぞれが配置されるページを、ページ単位でずらす。
【0268】
SCMコントローラ2は、例えば、状態情報に基づいて、フレームFRV1~FRVwと垂直パリティフレームFRPの位置変更後のライト先またはリード先を決定する。より具体的には、SCMコントローラ2は、例えば、アドレス変換テーブルATで物理アドレスを取得した後であり、SCMチップMD1~MDzにアクセス要求を発行する前に、状態情報に基づいて、取得した物理アドレスを、計算によってさらに変更後の物理アドレスへ変換し、変更後の物理アドレスに基づいてSCMチップMD1~MDzにアクセスする。
【0269】
図16の例において、フレームの位置は、上から下へ、フレームFRV1~FRVw、垂直パリティフレームFRPの順に並んでいる。このフレームの並びは、所定の条件にしたがって、2フレーム分ずらされる。この結果、フレームの位置は、上から下へ、フレームFRVw-1、フレームFRVw、垂直パリティフレームFRP、フレームFRV1~FRw-2の順に並ぶように変更される。SCMコントローラ2は、変更前の配置に対応する物理アドレスを取得した後に、物理アドレスを2フレーム分ずらし、変更後の配置に対応する物理アドレスを決定する。そして、SCMコントローラ2は、決定した変更後の配置に対応する物理アドレスに基づいてSCMチップMD1~MDzにアクセス要求を発行する。
【0270】
以上説明した第3の実施形態において、SCMコントローラ2は、状態情報に基づいて、フレームFRV1~FRVwと垂直パリティフレームFRPとのうちの少なくとも1つに対応するライト先またはリード先を変更する。そして、SCMコントローラ2は、状態情報に基づいて変更されたライト先またはリード先に対して、フレームFRV1~FRVwと垂直パリティフレームFRPとのうちの少なくとも1つに対するライトまたはリードを実行する。第3の実施形態においては、垂直パリティフレームFRPを記憶するページの疲弊が、フレームFRV1~FRVwを記憶するページの疲弊よりも進行することを防止することができ、SCMチップMD1~MDzの耐久性の向上および長寿命化を実現することができる。
【0271】
(第4の実施形態)
第4の実施形態は、上記第1の実施形態から第3の実施形態までの変形例である。第4の実施形態では、例として第1の実施形態に対する変形を説明するが、第2の実施形態または第3の実施形態に対する変形も同様である。
【0272】
上記第1の実施形態においては、XORパリティがフレームFRの付加データAD内に含まれている場合を説明している。これに対して、第4の実施形態では、XORパリティがフレームFRの付加データAD内に含まれるのではなく、XORパリティがSCMチップMD1~MDzのうちの少なくとも1つのSCMチップ(例えばMD1)に記憶されるものとする。
【0273】
このように、XORパリティが、付加データAD内ではなく、SCMチップMD1に記憶される場合、SCMコントローラ2は、マルチキャストを使用することにより、XORパリティのリードを抑制することができる。
【0274】
マルチキャストを使用するSCMコントローラ2は、SCMチップMD2~MDzに対してリード要求を発行し、ECCデコーダ82によってリードしたフレームをエラー訂正できる場合には、XORパリティを記憶するSCMチップMD1に対してリード要求を発行しない。SCMコントローラ2は、SCMチップMD1に対しては、ECCデコーダ82によってリードしたフレームをエラー訂正できない場合にのみリード要求を行う。
【0275】
第1の実施形態において、SCMコントローラ2は、例えば、XORパリティがどのSCMチップに記憶されているかを、状態データ10により認識可能とする。SCMコントローラ2は、状態データ10を参照し、リード対象のフレームのビット順序を認識し、フレーム内のXORパリティの位置を認識し、どのSCMチップに対してリード要求を発行しないかを認識する。
【0276】
以上説明した第4の実施形態においては、マルチキャストを使用することにより、SCMモジュール1の消費電力が上昇することを防止することができ、XORパリティのリードによりSCMチップMD1のメモリセルの疲弊が進行することを防止することができる。
【0277】
なお、第4の実施形態において、SCMコントローラ2は、例えば、XORパリティを記憶するSCMチップMD1に対しては、別の方法によりライト回数またはライト頻度などを低下させて、メモリセルが消耗することを防止する。具体的には、SCMコントローラ2は、例えば、XORパリティを連続する物理アドレスへ追記する。これにより、XORパリティがSCMチップMD1の同じライト先に繰り返しライトされてメモリセルが疲弊することを防止することができる。
【0278】
本実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。本実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。本実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0279】
1,1A…SCMモジュール、2,2A…SCMコントローラ、3…プロセッサ、4…第1のインタフェース部、5…メモリ部、5a…バッファメモリ、6…処理部、7…エンコーダ、8…デコーダ、I1~Iz…第2のインタフェース部、MD1~MDz…SCMチップ、10…状態データ、AT,AT1…アドレス変換テーブル、FW…ファームウェア、11,11A…アドレス変換部、12,12A…第1のリード制御部、13…エンコード制御部、14…第1の判断部、15、15A…第1の変更部、16,16A…第1のライト制御部、17…更新部、18,18A…第2のリード制御部、19…第2の判断部、20,20A…第2の変更部、21…デコード制御部、22,22A…第2のライト制御部、FR,FR1~FR2,FRV1~FRVw…フレーム、UD…ユーザデータ、AD…付加データ、PL…ペイロード部分、LA…論理アドレス、PA…物理アドレス、BOI…ビット順序情報、FRP…垂直パリティフレーム