(57)【特許請求の範囲】
【請求項１】
データの書込み後に状態が不安定な期間が存在するメモリセルからなる不揮発メモリにおいてデータの書込み後の前記メモリセルの状態が安定しているか否かの判断を行う判断部と、
前記判断の結果に基づいて前記データが書き込まれた前記メモリセルから読み出した読出しデータと前記書込みに係る書込みデータとを比較して検証する検証部と、
前記データの書込みと前記検証の結果に基づく前記書込みデータの再書込みとを行う書込み制御部と
を具備し、
前記不揮発メモリは、ページアドレスによりページ単位でアクセスされ、
前記書込み制御部は、複数ページからなるデータの書込みを連続して行い、
前記検証部は、前記データの書込みが行われた順にページ単位で前記検証を行い、
前記判断部は、前記検証の際には前記メモリセルの状態が安定していると判断する
メモリコントローラ。
【請求項２】
前記不揮発メモリは、前記データの書込みの直後に読出しを行うと前記書き込まれたデータが破壊される請求項１記載のメモリコントローラ。
【請求項３】
前記不揮発メモリは、前記データの書込みの直後には書込まれたデータが正常に読み出されない請求項１記載のメモリコントローラ。
【請求項４】
前記判断部は、前記データの書込み後の所定の安定化時間の経過に基づいて前記判断を行う請求項１記載のメモリコントローラ。
【請求項５】
前記再書込みを行う前記不揮発メモリのページアドレスの情報である再書込みアドレス情報を保持する再書込みアドレス情報保持部をさらに具備し、
前記検証部は、前記複数ページからなるデータの書込み後に前記検証を連続して行って当該検証の結果に基づく前記再書込みアドレス情報を前記再書込みアドレス情報保持部に保持させ、
前記書込み制御部は、前記保持された前記再書込みアドレス情報に基づいて前記再書込みを行う
請求項１記載のメモリコントローラ。
【請求項６】
前記検証を行う前記不揮発メモリのページアドレスの情報である検証アドレス情報を保持する検証アドレス情報保持部をさらに具備し、
前記書込み制御部は、前記書込みおよび前記再書込みを行った際に前記書込みおよび前記再書込みを行ったページアドレスの情報を前記検証アドレス情報として前記検証アドレス情報保持部に保持させ、
前記検証部は、前記保持された前記検証アドレス情報に基づいて前記検証を行う
請求項１記載のメモリコントローラ。
【請求項７】
データの書込み後に状態が不安定な期間が存在するメモリセルからなる不揮発メモリにおいてデータの書込み後の前記メモリセルの状態が安定しているか否かの判断を行う判断部と、
前記判断の結果に基づいて前記データが書き込まれた前記メモリセルから読み出した読出しデータと前記書込みに係る書込みデータとを比較して検証する検証部と、
前記データの書込みと前記検証の結果に基づく前記書込みデータの再書込みとを行う書込み制御部と
を具備し、
前記不揮発メモリは、ページアドレスによりページ単位でアクセスされ、
前記書込み制御部は、複数ページからなるデータの書込みを連続して行い、
前記検証部は、前記データの書込みが行われた順にページ単位で前記検証を行い、
前記判断部は、前記書込みデータのページ数が前記不揮発メモリにおけるデータの書込み後の所定の安定化時間に相当する書込み時間となるページ数である状態安定化ページ数以上の場合には前記検証の際に前記メモリセルの状態が安定していると判断し、前記書込みデータのページ数が前記状態安定化ページ数未満の場合には前記所定の安定化時間の経過を待って前記メモリセルの状態が安定していると判断する
メモリコントローラ。
【請求項８】
データの書込み後に状態が不安定な期間が存在するメモリセルからなる不揮発メモリと、
前記不揮発メモリにおいてデータの書込み後の前記メモリセルの状態が安定しているか否かの判断を行う判断部と、
前記判断の結果に基づいて前記データが書き込まれた前記メモリセルから読み出した読出しデータと前記書込みに係る書込みデータとを比較して検証する検証部と、
前記データの書込みと前記検証の結果に基づく前記書込みデータの再書込みとを行う書込み制御部と
を具備し、
前記不揮発メモリは、ページアドレスによりページ単位でアクセスされ、
前記書込み制御部は、複数ページからなるデータの書込みを連続して行い、
前記検証部は、前記データの書込みが行われた順にページ単位で前記検証を行い、
前記判断部は、前記検証の際には前記メモリセルの状態が安定していると判断する
記憶装置。
【請求項９】
データの書込み後に状態が不安定な期間が存在するメモリセルからなる不揮発メモリと、
前記不揮発メモリを制御するメモリコントローラと、
前記メモリコントローラを介して前記不揮発メモリにアクセスするホストコンピュータと
を具備し、
前記メモリコントローラは、
前記不揮発メモリにおいてデータの書込み後の前記メモリセルの状態が安定しているか否かの判断を行う判断部と、
前記判断の結果に基づいて前記データが書き込まれた前記メモリセルから読み出した読出しデータと前記書込みに係る書込みデータとを比較して検証する検証部と、
前記データの書込みと前記比較の結果に基づく前記書込みデータの再書込みとを行う書込み制御部とを備え、
前記不揮発メモリは、ページアドレスによりページ単位でアクセスされ、
前記書込み制御部は、複数ページからなるデータの書込みを連続して行い、
前記検証部は、前記データの書込みが行われた順にページ単位で前記検証を行い、
前記判断部は、前記検証の際には前記メモリセルの状態が安定していると判断する
情報処理システム。
【請求項１０】
データの書込み後に状態が不安定な期間が存在するメモリセルからなる不揮発メモリにおいてデータの書込み後の前記メモリセルの状態が安定しているか否かの判断を行う判断手順と、
前記判断の結果に基づいて前記データが書き込まれた前記メモリセルから読み出した読出しデータと前記書込みに係る書込みデータとを比較して検証する検証手順と、
前記データの書込みと前記比較の結果に基づく前記書込みデータの再書込みとを行う書込み制御手順と
を具備し、
前記不揮発メモリは、ページアドレスによりページ単位でアクセスされ、
前記書込み制御手順において、複数ページからなるデータの書込みを連続して行い、
前記検証手順において、前記データの書込みが行われた順にページ単位で前記検証を行い、
前記判断手順において、前記検証の際には前記メモリセルの状態が安定していると判断する
不揮発メモリの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、メモリコントローラに関する。詳しくは、不揮発メモリに対するデータの書込みおよび検証を行うメモリコントローラ、記憶装置、情報処理システムおよび不揮発メモリの制御方法に関する。
【背景技術】
【０００２】
従来、情報処理システムの補助記憶装置として、不揮発メモリ（nonvolatile memory）であるＮＡＮＤ型フラッシュメモリが広く使用されている。このＮＡＮＤ型フラッシュメモリは、メモリセル内のＭＯＳトランジスタに配置された浮遊ゲートに電荷を蓄積させることにより、データを記憶させるものである。これに対し、メモリセル内の記憶素子の物性を変化させてデータの記憶を行う形式の不揮発メモリがその高速性やランダムアクセスが可能等の利点により、注目されている。このような不揮発メモリとして、例えば、ＰＣＲＡＭ（Phase-Change RAM）やＲｅＲＡＭ（Resistance RAM）が挙げられる。また、ＭＲＡＭ（Magnetoresistive RAM）およびＳＴＴ−ＭＲＡＭ（Spin transfer torque-MRAM）等の磁性材料を使用した不揮発メモリも該当する。【０００３】
ＰＣＲＡＭは、メモリセルに配置された相変化素子である記憶素子の電気抵抗を変化させてデータの記憶を行うものである。具体的には、記憶素子の状態を結晶状態またはアモルファス状態とし、これによる電気抵抗の差異を利用して記憶動作を行う。結晶状態の時に記憶素子は低抵抗となり、アモルファス状態の時に記憶素子は高抵抗となる。ここで、記憶素子を低抵抗状態とする操作をセット操作、高抵抗状態とする操作をリセット操作と表現する。メモリセルに対してリセットおよびセット操作を行うことによりＰＣＲＡＭのデータの書込みが行われる。【０００４】
記憶素子の状態を変化させるためには、記憶素子に電圧（書込み電圧）を印加して電流を流し、加熱する必要がある。その時の温度および発熱時間の条件を変えて、記憶素子の状態を結晶状態またはアモルファス状態とする。記憶素子を略融点温度かつ短時間の加熱条件とした場合には、記憶素子はアモルファス状態となり、リセット操作がなされる。一方、融点より低温である結晶化温度かつ長時間の加熱条件とした場合には、記憶素子は結晶化し、セット操作がなされる。このようなＰＣＲＡＭにおいて記憶素子の結晶化の温度が許容範囲を超えてばらついた場合には、記憶素子の十分な結晶化ができないことにより、セット操作ができないおそれがある。そこで、セット操作の際、記憶素子を略融点とした後、書込み電圧を徐々に低下させて、記憶素子を除冷することにより結晶化の温度がばらついた場合であっても、セット操作を可能とするシステムが提案されている（例えば、特許文献１参照。）。【０００５】
ＰＣＲＡＭと同様に、ＲｅＲＡＭもメモリセルに配置された記憶素子の電気抵抗を変化させてデータの記憶を行うものである。ＲｅＲＡＭの記憶素子は絶縁層と金属イオン供給層とからなる２層構造を有しており、記憶素子に電圧を印加すると、金属イオン供給層から供給される金属イオンからなる導電フィラメントが絶縁層内へ拡散し、低抵抗状態となる。これに対し、逆極性の電圧を印加すると、拡散していた導電フィラメントの金属イオンが金属イオン供給層に戻るため、記憶素子は高抵抗状態となる。なお、ＲｅＲＡＭにおいても記憶素子を低抵抗状態とする操作をセット操作、高抵抗状態とする操作をリセット操作と表現する。このようなＲｅＲＡＭにおいて、データの書込み動作であるリセットおよびセット操作を行った直後は、記憶素子の状態が安定しない現象が知られている。これは、データの書込み直後の記憶素子の抵抗値が、低抵抗または高抵抗状態と判別する閾値近傍の値となり、時間の経過に伴って正規の抵抗値に落ち着く現象である（例えば、非特許文献１参照。）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−２５２２５３号公報
【非特許文献】
【０００７】
【非特許文献１】T.O.Iwasaki, et.al"Stability Conditioning to Enhance Read Stability 10x in 50nm AlxOy ReRAM", IEEE International Memory Workshop (IMW2013), pp44-47.
【発明の概要】
【発明が解決しようとする課題】
【０００８】
不揮発メモリは、データの書込み後に正しいデータが書込まれているか否かを検証する必要がある。このため、データの書込み後に当該データの読出しが行われ、読み出されたデータと書込みに係るデータとの比較が行われる。上述のＰＣＲＡＭでは、書込み電圧より低い電圧（読出し電圧）を記憶素子に印加して記憶素子の抵抗値を測定することにより、この読出しが行われる。しかし、書込みの際、記憶素子を加熱し、冷却期間中に結晶化を行うため、この期間は記憶素子の状態が不安定となる。したがって、この期間に読出し電圧を印加すると、記憶素子の状態が変化し、書き込まれていたデータが破壊される場合がある。【０００９】
また、ＲｅＲＡＭにおいても、上述のようにデータの書込み直後は記憶素子の状態が不安定となる。この期間に読出しを行うと、データが正常に読み出されないため、検証の結果、書込み不良と判断されることとなる。このように、記憶素子の物性を変化させてデータの書込みを行う形式の不揮発メモリは、書込みの直後に物性の変化に伴う不安定な期間が存在する。そのため、検証のためのデータの読出しをデータの書込みの直後に行うと、書込み不良と判断される可能性がある。その結果、書込みの信頼性が低くなるという問題がある。【００１０】
本技術はこのような状況に鑑みて生み出されたものであり、正確な書込みデータの検証を行い、不揮発メモリの書込み信頼性を向上させることを目的とする。
【課題を解決するための手段】
【００１１】
本技術は、上述の問題点を解消するためになされたものであり、その第１の側面は、データの書込み後に状態が不安定な期間が存在するメモリセルからなる不揮発メモリにおいてデータの書込み後の上記メモリセルの状態が安定しているか否かの判断を行う判断部と、上記判断の結果に基づいて上記データが書き込まれた上記メモリセルから読み出した読出しデータと上記書込みに係る書込みデータとを比較して検証する検証部と、上記データの書込みと上記検証の結果に基づく上記書込みデータの再書込みとを行う書込み制御部とを具備するメモリコントローラである。これにより、不揮発メモリのメモリセルの状態が安定しているか否かの判断後に検証が行われるという作用をもたらす。【００１２】
また、この第１の側面において、上記不揮発メモリは、上記データの書込みの直後に読出しを行うと上記書き込まれたデータが破壊される不揮発メモリであってもよい。これにより、上記データの書込みの直後に読出しを行うと上記書き込まれたデータが破壊される不揮発メモリにおいても不揮発メモリのメモリセルの状態が安定しているか否かの判断後に検証が行われるという作用をもたらす。【００１３】
また、この第１の側面において、上記不揮発メモリは、上記データの書込みの直後には書込まれたデータが正常に読み出されない不揮発メモリであってもよい。これにより、上記データの書込みの直後には書込まれたデータが正常に読み出されない不揮発メモリにおいても不揮発メモリのメモリセルの状態が安定しているか否かの判断後に検証が行われるという作用をもたらす。【００１４】
また、この第１の側面において、上記判断部は、上記データの書込み後の所定の安定化時間の経過に基づいて上記判断を行ってもよい。これにより、所定の安定化時間の経過に基づいて上記判断が行われるという作用をもたらす。【００１５】
また、この第１の側面において、上記不揮発メモリは、ページアドレスによりページ単位でアクセスされ、上記書込み制御部は、複数ページからなるデータの書込みを連続して行い、上記検証部は、上記データの書込みが行われた順にページ単位で上記検証を行い、上記判断部は、上記検証の際には上記メモリセルの状態が安定していると判断してもよい。これにより、複数ページからなるデータの書込み後には上記メモリセルの状態が安定していると判断するという作用をもたらす。【００１６】
また、この第１の側面において、上記再書込みを行う上記不揮発メモリのページアドレスの情報である再書込みアドレス情報を保持する再書込みアドレス情報保持部をさらに具備し、上記検証部は、上記複数ページからなるデータの書込み後に上記検証を連続して行って当該検証の結果に基づく上記再書込みアドレス情報を上記再書込みアドレス情報保持部に保持させ、上記書込み制御部は、上記保持された上記再書込みアドレス情報に基づいて上記再書込みを行ってもよい。これにより、再書込みアドレス情報に基づいて再書込みが行われるという作用をもたらす。【００１７】
また、この第１の側面において、上記検証を行う上記不揮発メモリのページアドレスの情報である検証アドレス情報を保持する検証アドレス情報保持部をさらに具備し、上記書込み制御部は、上記書込みおよび上記再書込みを行った際に上記書込みおよび上記再書込みを行ったページアドレスの情報を上記検証アドレス情報として上記検証アドレス情報保持部に保持させ、上記検証部は、上記保持された上記検証アドレス情報に基づいて上記検証を行ってもよい。これにより、検証アドレス情報に基づいて検証が行われるという作用をもたらす。【００１８】
また、この第１の側面において、上記不揮発メモリは、ページアドレスによりページ単位でアクセスされ、上記書込み制御部は、複数ページからなるデータの書込みを連続して行い、上記検証部は、上記データの書込みが行われた順にページ単位で上記検証を行い、上記判断部は、上記書込みデータのページ数が上記不揮発メモリにおけるデータの書込み後の所定の安定化時間に相当する書込み時間となるページ数である状態安定化ページ数以上の場合には上記検証の際に上記メモリセルの状態が安定していると判断し、上記書込みデータのページ数が上記状態安定化ページ数未満の場合には上記所定の安定化時間の経過を待って上記メモリセルの状態が安定していると判断してもよい。これにより、複数ページからなるデータの書込み後には当該書込みデータのページ数に基づいて上記判断を行い、所定の状態安定化ページ数よりも上記書込みデータのページ数が少ない場合には上記所定の安定化時間の経過に基づいて上記判断を行うという作用をもたらす。【００１９】
また、この第１の側面において、データの書込み後に状態が不安定な期間が存在するメモリセルからなる不揮発メモリにおいてデータの書込みを行う書込み制御部と、上記データの書込み後の上記メモリセルの状態が安定しているか否かの判断を行う判断部と、上記判断の結果に基づいて上記データが書き込まれた上記メモリセルから読み出した読出しデータと上記書込みに係る書込みデータとを比較する検証と上記検証の結果に基づく上記書込みデータの再書込みとを行う検証書込み部とを具備してもよい。これにより、不揮発メモリのメモリセルの状態が安定しているか否かの判断後に検証が行われるという作用をもたらす。【００２０】
また、本技術の第２の側面は、データの書込み後に状態が不安定な期間が存在するメモリセルからなる不揮発メモリと、上記不揮発メモリにおいてデータの書込み後の上記メモリセルの状態が安定しているか否かの判断を行う判断部と、上記判断の結果に基づいて上記データが書き込まれた上記メモリセルから読み出した読出しデータと上記書込みに係る書込みデータとを比較して検証する検証部と、上記データの書込みと上記検証の結果に基づく上記書込みデータの再書込みとを行う書込み制御部とを具備する記憶装置である。これにより、不揮発メモリのメモリセルの状態が安定しているか否かの判断後に検証が行われるという作用をもたらす。【００２１】
また、本技術の第３の側面は、データの書込み後に状態が不安定な期間が存在するメモリセルからなる不揮発メモリと、上記不揮発メモリを制御するメモリコントローラと、上記メモリコントローラを介して上記不揮発メモリにアクセスするホストコンピュータとを具備し、上記メモリコントローラは、上記不揮発メモリにおいてデータの書込み後の上記メモリセルの状態が安定しているか否かの判断を行う判断部と、上記判断の結果に基づいて上記データが書き込まれた上記メモリセルから読み出した読出しデータと上記書込みに係る書込みデータとを比較して検証する検証部と、上記データの書込みと上記比較の結果に基づく上記書込みデータの再書込みとを行う書込み制御部とを備える情報処理システムである。これにより、不揮発メモリのメモリセルの状態が安定しているか否かの判断後に検証が行われるという作用をもたらす。【００２２】
また、本技術の第４の側面は、データの書込み後に状態が不安定な期間が存在するメモリセルからなる不揮発メモリにおいてデータの書込み後の上記メモリセルの状態が安定しているか否かの判断を行う判断手順と、上記判断の結果に基づいて上記データが書き込まれた上記メモリセルから読み出した読出しデータと上記書込みに係る書込みデータとを比較して検証する検証手順と、上記データの書込みと上記比較の結果に基づく上記書込みデータの再書込みとを行う書込み制御手順とを具備する不揮発メモリの制御方法である。これにより、不揮発メモリのメモリセルの状態が安定しているか否かの判断後に検証が行われるという作用をもたらす。
【発明の効果】
【００２３】
本技術によれば、正確な書込みデータの検証を行い、不揮発メモリの書込み信頼性を向上させるという優れた効果を奏し得る。なお、ここに記載された効果は必ずしも限定されるものではなく、本開示中に記載されたいずれかの効果であってもよい。
【図面の簡単な説明】
【００２４】
【図１】本技術の第１の実施の形態における情報処理システムの構成例を示す図である。
【図２】本技術の第１の実施の形態におけるメモリコントローラの構成例を示す図である。
【図３】本技術の第１の実施の形態におけるメモリの構成例を示す図である。
【図４】本技術の第１の実施の形態における機能構成例を示す図である。
【図５】本技術の第１の実施の形態における判断部の構成例を示す図である。
【図６】本技術の第１の実施の形態における書込み操作を説明する図である。
【図７】本技術の第１の実施の形態における書込み処理の処理手順（メモリコントローラ）の一例を示す図である。
【図８】本技術の第１の実施の形態における通常書込み処理の処理手順（メモリコントローラ）の一例を示す図である。
【図９】本技術の第１の実施の形態における安定状態判断処理の処理手順（メモリコントローラ）の一例を示す図である。
【図１０】本技術の第１の実施の形態における検証書込み処理の処理手順（メモリコントローラ）の一例を示す図である。
【図１１】本技術の第１の実施の形態における書込み処理の処理手順（メモリ）の一例を示す図である。
【図１２】本技術の第１の実施の形態における検証書込み処理の処理手順（メモリ）の一例を示す図である。
【図１３】本技術の第１の実施の形態における再書込み処理の処理手順（メモリ）の一例を示す図である。
【図１４】本技術の第１の実施の形態の変形例における再書込み処理の処理手順（メモリ）の一例を示す図である。
【図１５】本技術の第２の実施の形態における機能構成例を示す図である。
【図１６】本技術の第２の実施の形態における書込み処理の処理手順（メモリコントローラ）の一例を示す図である。
【図１７】本技術の第３の実施の形態における機能構成例を示す図である。
【図１８】本技術の第３の実施の形態における書込み処理の処理手順（メモリコントローラ）の一例を示す図である。
【図１９】本技術の第３の実施の形態における検証書込み処理の処理手順（メモリコントローラ）の一例を示す図である。
【図２０】本技術の第４の実施の形態における機能構成例を示す図である。
【図２１】本技術の第４の実施の形態における書込み処理の処理手順（メモリコントローラ）の一例を示す図である。
【図２２】本技術の第４の実施の形態における検証処理の処理手順（メモリコントローラ）の一例を示す図である。
【図２３】本技術の第４の実施の形態における再書込み処理の処理手順（メモリコントローラ）の一例を示す図である。
【図２４】本技術の第４の実施の形態における検証処理の処理手順（メモリ）の一例を示す図である。
【図２５】本技術の第４の実施の形態における再書込み処理の処理手順（メモリ）の一例を示す図である。
【図２６】本技術の第４の実施の形態の第１の変形例における再書込み処理の処理手順（メモリ）の一例を示す図である。
【図２７】本技術の第４の実施の形態の第２の変形例における検証処理の処理手順（メモリコントローラ）の一例を示す図である。
【図２８】本技術の第４の実施の形態の第２の変形例における再書込み処理の処理手順（メモリコントローラ）の一例を示す図である。
【図２９】本技術の第４の実施の形態の第３の変形例における機能構成例を示す図である。
【図３０】本技術の第４の実施の形態の第３の変形例における書込み処理の処理手順（メモリコントローラ）の一例を示す図である。
【図３１】本技術の第４の実施の形態の第３の変形例における検証処理の処理手順（メモリコントローラ）の一例を示す図である。
【図３２】本技術の第４の実施の形態の第３の変形例における再書込み処理の処理手順（メモリコントローラ）の一例を示す図である。
【図３３】本技術の第５の実施の形態における情報処理システムの構成例を示す図である。
【図３４】本技術の第５の実施の形態におけるメモリコントローラの構成例を示す図である。
【図３５】本技術の第５の実施の形態における機能構成例を示す図である。
【図３６】ＤＲＡＭにおけるデータの移動を説明する図である。
【図３７】本技術の第５の実施の形態における書込み処理の処理手順（メモリコントローラ）の一例を示す図である。
【図３８】本技術の第５の実施の形態におけるデータ移動処理の処理手順（メモリコントローラ）の一例を示す図である。
【発明を実施するための形態】
【００２５】
以下、本技術を実施するための形態（以下、実施の形態と称する）について説明する。説明は以下の順序により行う。
１．第１の実施の形態（複数ページの書込みを連続して行う例）
２．第２の実施の形態（書込み条件を変更する例）
３．第３の実施の形態（検証アドレス情報を使用する例）
４．第４の実施の形態（複数ページの書込みおよび検証を連続して行う例）
５．第５の実施の形態（データバックアップ装置に適用した例）
【００２６】
＜１．第１の実施の形態＞
［情報処理システムの構成］
図１は、本技術の第１の実施の形態における情報処理システムの構成例を示す図である。同図の情報処理システムは、ホストコンピュータ１００と、メモリコントローラ２００と、メモリ３００と、信号線１０９および２０８とを備える。なお、メモリ３００は、特許請求の範囲に記載の不揮発メモリの一例である。
【００２７】
ホストコンピュータ１００は、メモリコントローラ２００を介してメモリ３００とデータの入出力を行うものである。このホストコンピュータ１００は、プロセッサ１１０と、ＤＲＡＭ１２０と、メモリコントローラインターフェース１３０と、バス装置１０１とを備える。プロセッサ１１０は、ホストコンピュータ１００の全体の動作を制御するものである。ＤＲＡＭ１２０は、ホストコンピュータ１００で使用されるデータを一時的に記憶するものである。メモリコントローラインターフェース１３０は、メモリコントローラ２００とのやり取りを行うインターフェースである。バス装置１０１は、プロセッサ１１０、ＤＲＡＭ１２０、および、メモリコントローラインターフェース１３０を相互に接続するものである。ホストコンピュータ１００は、信号線１０９を介してメモリコントローラ２００にコマンドを発行することにより、メモリコントローラ２００およびメモリ３００との間でデータの入出力を行う。
【００２８】
［メモリコントローラの構成］
図２は、本技術の第１の実施の形態におけるメモリコントローラの構成例を示す図である。同図のメモリコントローラ２００は、プロセッサ２１０と、ＲＡＭ２２０と、ホストインターフェース２３０と、ＥＣＣ処理部２５０と、ＲＯＭ２６０と、メモリインターフェース２７０と、バス装置２０１とを備える。
【００２９】
プロセッサ２１０は、メモリコントローラ２００の全体の動作を制御するものである。また、プロセッサ２１０は、ホストコンピュータ１００が発行したコマンドの解釈およびこれに基づく処理も行う。ＲＡＭ２２０は、メモリコントローラ２００で使用されるデータを一時的に記憶するものである。ホストインターフェース２３０は、ホストコンピュータ１００とのやり取りを行うインターフェースである。ＥＣＣ処理部２５０は、ホストコンピュータ１００から出力されたデータにパリティを付加してＥＣＣ符号にする符号化と、ＥＣＣ符号から元のデータを取り出す復号とを行うものである。この復号の際、データの誤り訂正を行う。
【００３０】
ＲＯＭ２６０は、メモリコントローラ２００のファームウェアを記憶するものである。プロセッサ２１０は、このファームウェアに従って動作する。メモリインターフェース２７０は、メモリ３００とのやりとりを行うインターフェースである。バス装置２０１は、上述したメモリコントローラ２００内の各部を相互に接続するものである。メモリコントローラ２００は、信号線２０８を介してメモリ３００に対してリクエストを発行し、データの入出力、すなわちデータの書込みおよび読出しを行う。
【００３１】
［メモリの構成］
図３は、本技術の第１の実施の形態におけるメモリの構成例を示す図である。同図のメモリ３００は、制御部３１０と、作業メモリ３２０と、メモリコントローラインターフェース３３０と、アドレスデコーダ３４０と、メモリセルアレイ３５０と、バッファ３６０と、バス装置３０１とを備える。
【００３２】
制御部３１０は、メモリ３００の全体の動作を制御するものである。また、制御部３１０は、メモリコントローラ２００が発行したリクエストの解釈およびこれに基づく処理も行う。作業メモリ３２０は、メモリ３００で使用されるデータを一時的に記憶するものである。メモリコントローラインターフェース３３０は、メモリコントローラ２００とのやり取りを行うインターフェースである。メモリセルアレイ３５０は、データを記憶するものである。このメモリセルアレイ３５０は、不揮発メモリからなるメモリセルが２次元に配置されて構成される。これらのメモリセルはページアドレスによりページ単位でアクセスされる。このページは、例えば、５１２バイトの大きさである。
【００３３】
アドレスデコーダ３４０は、与えられたページアドレスをページ選択信号に変換してメモリセルアレイ３５０に対して出力するものである。バッファ３６０は、メモリセルアレイ３５０に入出力するデータを保持するものである。このバッファ３６０は、１ページに相当する大きさのデータ（以下、ページデータと称する。）と同じ容量である。
【００３４】
本技術の実施の形態における不揮発メモリとして、データの書込み後に状態が不安定な期間が存在するメモリセルからなる不揮発メモリを使用することができる。このような不揮発メモリとして、例えば、ＰＣＲＡＭやＲｅＲＡＭが該当する。以下の説明では、ＲｅＲＡＭを例に挙げて説明する。
【００３５】
［情報処理システムにおける書込み処理］
本技術の第１の実施の形態における情報処理システムの書込み処理のデータのやり取りについて、ホストコンピュータ１００がＤＲＡＭ１２０に記憶されているデータをメモリ３００に書込む場合を例に挙げて説明する。まず、ホストコンピュータ１００が、書込みコマンドを生成し、メモリコントローラ２００に対して発行する。このコマンドにはＤＲＡＭ１２０における書込みデータの先頭アドレス、書込みデータサイズ（ページ数）およびメモリ３００における書込みアドレス（ページアドレス）が含まれている。発行されたコマンドは、メモリコントローラインターフェース１３０およびホストインターフェース２３０を介してメモリコントローラ２００に入力され、ＲＡＭ２２０に記憶される。プロセッサ２１０は、このコマンドを解釈してデータの書込みを行う。まず、コマンドに基づいてＤＲＡＭ１２０から書込みデータを読み出して、ＲＡＭ２２０に記憶させる。次に、プロセッサ２１０は、ＥＣＣ処理部２５０に指示を出し、読み出した書込みデータの符号化を行わせる。その後、プロセッサ２１０は、書込みリクエストを生成してメモリ３００に対して発行する。その際に、符号化した書込みデータをメモリ３００に対して出力する。最後に、データの書込みが成功したか否かについて検証を行う。
【００３６】
この検証についても、メモリコントローラ２００がメモリ３００に対して検証リクエストを発行することにより行う。検証の結果、書込みが不成功であった場合には、再度リクエストを発行して再書込みを行う。これらのリクエストおよび書込みデータは、メモリインターフェース２７０およびメモリコントローラインターフェース３３０を介してメモリ３００に入力され、作業メモリ３２０に記憶される。その後、制御部３１０がリクエストを解釈し、処理を行う。なお、本技術の第１の実施の形態では、検証リクエストおよびこれに基づく書込みリクエストを個別に発行する代わりにこれらを統合した検証書込みリクエストを発行して、処理を簡略化している。
【００３７】
［機能構成］
図４は、本技術の第１の実施の形態における機能構成例を示す図である。同図は、データの書込みを行う際の機能構成を想定したものである。メモリコントローラ２００は、書込制御部２９２と、判断部２８０と、検証書込み部２９９とを備える。これらの機能は、図２において説明したプロセッサ２１０が実行するファームウェアにより実現される。なお、書込制御部２９２は、特許請求の範囲に記載の書込み制御部の一例である。
【００３８】
判断部２８０は、不揮発メモリにおいてデータの書込み後のメモリセルの状態が安定しているか否かの判断を行うものである。前述したように、ＲｅＲＡＭは、データの書込み直後は、メモリセルの状態が不安定な期間が存在する。判断部２８０は、このメモリセルの状態が安定になり、検証のためのデータの読出しを安定に行えるか否かを判断する。
【００３９】
検証書込み部２９９は、判断部２８０の判断の結果に基づいてデータの書込みを検証するものである。ここで、検証とは、データの書込みが正常に行われたか否かを調べることである。この検証は、データの書込み後にこのデータが書き込まれたメモリセルから読み出した読出しデータと書込みに係る書込みデータとを比較することにより行われる。また、検証書込み部２９９は、この検証の結果に基づく書込みデータの再書込みをさらに行う。すなわち、検証書込み部２９９は、検証とこの検証の結果に基づく再書込みとを行うものである。この検証書込み部２９９は、前述した検証書込みリクエストをメモリ３００に対して発行することにより、検証および再書込みを実行する。
【００４０】
書込制御部２９２は、データの書込みを行うものである。この書込制御部２９２は、前述した書込みリクエストをメモリ３００に対して発行する。また、書込制御部２９２は、判断部２８０に対して上述の判断に必要となる書込み情報の出力も行う。書込み情報と判断部２８０の動作については、後述する。
【００４１】
なお、同図におけるメモリ３００は、制御部３１０と、作業メモリ３２０と、バッファ３６０と、メモリセルアレイ３５０とを備える。これらは、図３において説明したものと同様であり、説明を省略する。このような、メモリコントローラ２００およびメモリ３００における処理について説明する。ホストコンピュータ１００から書込みコマンドがメモリコントローラ２００に対して発行されると、書込制御部２９２は、メモリ３００に対して書込みリクエストを発行する。この書込みリクエストは、例えば、書込みを表すオペコード、書込みデータおよび書込み先ページアドレスにより構成される。制御部３１０は、このリクエストを解釈して、これに含まれる書込みデータおよび書込み先ページアドレスを作業メモリ３２０に記憶させる。次に、制御部３１０は、書込みデータをバッファ３６０に転送して保持させる。次に、バッファ３６０に保持された書込みデータがメモリセルアレイ３５０に書き込まれる。メモリセルアレイ３５０における書込み動作の詳細については、後述する。書込み動作が完了すると、制御部３１０は、書込みレスポンスとして、書込みを行ったページ数である書込みページ数を書込制御部２９２に出力する。
【００４２】
また、書込制御部２９２は、メモリ３００から出力された書込みレスポンスに基づく書込み情報を判断部２８０に対して出力する。すなわち、書込制御部２９２は、書込み動作が完了するたびに書込みページ数を書込み情報として出力する。
【００４３】
判断部２８０は、これに基づいて、上述した判断を行い、判断結果を検証書込み部２９９に対して出力する。検証書込み部２９９は、この判断結果に基づいて検証を行う。具体的には、次の手順により検証が行われる。まず、検証書込み部２９９は、検証を行うページの書込みデータをホストコンピュータ１００のＤＲＡＭ１２０から読み出してＲＡＭ２２０に記憶させる。この書込みデータは、検証のための比較データとして使用される。次に、検証書込み部２９９は、検証書込みリクエストを生成してメモリ３００に対して発行する。この検証書込みリクエストは、例えば、検証書込みを表すオペコード、比較データおよび検証先ページアドレスにより構成される。この検証先ページアドレスは、検証を行うページのページアドレスであり、上述した書込みデータの書込み先ページアドレスと同一のページアドレスである。なお、本技術の第１の実施の形態では、書込みおよび検証書込みリクエストにおける書込みデータおよび比較データはいずれもページデータにより構成される。
【００４４】
制御部３１０は、このリクエストを解釈して、これに含まれる比較データおよび検証先ページアドレスを作業メモリ３２０に記憶させる。次に、制御部３１０は、検証先ページアドレスに基づいてメモリセルアレイ３５０に対して読出しを行う。読み出されたデータは、読出しデータとしてバッファ３６０に保持される。次に、制御部３１０は、作業メモリ３２０に記憶された比較データとバッファ３６０に保持された読出しデータとを比較する。この比較は、両データが完全に一致しているか否かにより行う。また、この比較は、不一致となったビット数が所定の閾値以下となっているか否かにより行ってもよい。両データが完全に一致しない場合であっても、メモリコントローラ２００が備えるＥＣＣ処理部２５０により、誤りは訂正され、所望のデータを読み出すことができるからである。
【００４５】
次に、制御部３１０は、上述の比較の結果、比較データおよび読出しデータが不一致と判断した場合に、書込みデータの再書込みを行う。この再書込みは、作業メモリ３２０に記憶されている比較データをメモリセルアレイ３５０に書き込むことにより行われる。その後、制御部３１０は、再書込みにおける書込みを行ったページ数を検証書込みレスポンスとして検証書込み部２９９に出力し、処理を終了する。
【００４６】
また、検証書込み部２９９は、メモリ３００から出力された検証書込みレスポンスに基づく書込み情報を判断部２８０に対して出力する。
【００４７】
［判断部の構成］
図５は、本技術の第１の実施の形態における判断部の構成例を示す図である。同図の判断部２８０は、タイマ部２８１と、書込みページ数判断部２８２と、メモリセル安定状態判断部２８３とを備える。
【００４８】
タイマ部２８１は、書込制御部２９２および検証書込み部２９９によるデータの書込み後の安定化時間の計時を行うものである。ここで、安定化時間とは、データの書込み後に不安定となっていた不揮発メモリのメモリセルの状態が安定するまでの時間である。タイマ部２８１は、書込み情報が入力されると、新規に計時を開始し、この安定化時間が経過した場合には、この結果を出力する。
【００４９】
書込みページ数判断部２８２は、書込みページ数が状態安定化ページ数以上であるか否かを判断する。ここで、状態安定化ページ数とは、複数のページからなる書込みデータの書込みを行った際に、不揮発メモリにおけるデータの書込み後の安定化時間に相当する書込み時間となるページ数である。複数のページからなる書込みデータの書込みを連続して行った場合、書き込んだページ数によっては、当該書込みの処理の間に、初期に書込みを行ったメモリセルにおいて安定化時間が経過する場合がある。このような場合、上述したタイマ部２８１による安定化時間の計時を行うことなく、この書込みに係るメモリセルは状態が安定していると判断することができる。書込みを行った順に検証を行うことにより、この書込みに係る全てのメモリセルについて安定化時間の経過を担保することができるからである。この書込みページ数判断部２８２は、例えば、書込み情報に基づく書込みページ数をカウントするカウンタを備える構成とすることができる。書込みページ数判断部２８２は、このカウント値が状態安定化ページ数以上となった場合には、この結果を出力する。
【００５０】
メモリセル安定状態判断部２８３は、タイマ部２８１および書込みページ数判断部２８２の出力に基づいてメモリセルの安定状態を判断するものである。具体的には、タイマ部２８１におけるデータの書込み後の安定化時間の経過または書込みページ数判断部２８２における状態安定化ページ数以上の書込みが生じた場合に、これらの書込みに係るメモリセルの状態が安定したものと判断する。その後、この判断結果を出力する。これにより、判断部２８０は、複数ページからなるデータの書込み後には当該書込みデータのページ数に基づいて判断を行い、状態安定化ページ数よりも書込みデータのページ数が少ない場合には安定化時間の経過に基づいて前記判断を行うことができる。
【００５１】
［メモリセルアレイにおける書込み操作］
図６は、本技術の第１の実施の形態における書込み操作を説明する図である。同図を参照して、メモリ３００のメモリセルアレイ３５０における書込み操作について説明する。前述のように、ＲｅＲＡＭでは、メモリセルに対してリセット操作およびセット操作を行うことにより書込が行われる。ここで、ＲｅＲＡＭの記憶素子が低抵抗状態にある場合を値「１」、高抵抗状態にある場合を値「０」に対応させる。これにより、リセット操作によりメモリセルには値「０」が書き込まれ、セット操作によりメモリセルには値「１」が書き込まれることとなる。
【００５２】
なお、本技術の実施の形態におけるリセット操作およびセット操作は、それぞれリセット操作用データおよびセット操作用データに基づいて行われる。このリセット操作用データは、ページデータのうち対象となるビット、すなわち値「０」を書き込むビットを値「１」とし、他のビットを値「０」としたデータである。また、このセット操作用データは、ページデータのうち対象となるビット、すなわち値「１」を書き込むビットを値「１」とし、他のビットを値「０」としたデータである。メモリ３００は、データの書込みの際には、これらリセット操作用データおよびセット操作用データを生成し、リセット操作およびセット操作を行う。
【００５３】
なお、データの書込み操作の前に、事前消去を行ってもよい。ここで、事前消去とは、データの書込みに先立って行われる対象メモリセルの全ビットを値「１」にする操作である。ＲｅＲＡＭは、ＮＡＮＤ型フラッシュメモリとは異なり、事前消去をすることなくデータの書込みが可能である。しかし、ＮＡＮＤ型フラッシュメモリとの互換性を持たせるため、情報処理システムが事前消去機能を備え、データの書込み処理前に事前消去が行われる場合がある。ただし、この場合、メモリ３００は、書込み処理の対象となるメモリセルの事前消去の有無について、把握する必要がある。事前消去の有無によりメモリ３００における書込み操作が異なるためである。このため、メモリ３００は、例えば、作業メモリ３２０にフラグを設けて、このフラグに事前消去の有無を設定する方式を用いることができる。次に、書込みおよび再書込みの操作について場合に分けて説明する。
【００５４】
（ａ）書込み操作（事前消去あり）の場合
事前消去によりメモリセルのデータは全て値「１」となっているため、メモリ３００はリセット操作のみを行う。リセット操作用データは、書込みデータに対してビット毎の論理反転演算を行うことにより算出される。この演算を論理式で表すと、次式のようになる。
ＲＤａｔａ＝〜Ｗ    ・・・式１
ただし、ＲＤａｔａはリセット操作用データを表す。Ｗは書込みデータ（ページデータ）を表す。〜はビット毎の論理反転を表す演算子である。同図におけるａに書込みデータ、メモリセルのデータおよびリセット操作用データの関係を表した。
【００５５】
（ｂ）書込み操作（事前消去なし）の場合
メモリ３００は、リセット操作およびセット操作を行う。リセット操作用データは、以下の手順により算出される。まず、メモリセルに書き込まれているデータが読み出される。次に、読み出されたデータと書込みデータとについてビット毎の排他的論理和演算が行われる。最後に、この排他的論理和演算の結果と読み出されたデータとについてビット毎の論理積演算が行われる。メモリ３００は、得られた演算結果をリセット操作用データとする。これらの演算を論理式で表すと、次式のようになる。
ＲＤａｔａ＝（（Ｗ＾Ｒ）＆Ｒ）    ・・・式２
ただし、Ｒは読み出したデータ（ページデータ）を表す。また、＾および＆はそれぞれビット毎の排他的論理和演算およびビット毎の論理積演算を表す演算子である。
【００５６】
セット操作用データは、以下の手順により算出される。まず、メモリセルに書き込まれているデータが読み出される。次に、読み出されたデータと書込みデータとについてビット毎の排他的論理和演算が行われる。最後に、この排他的論理和演算の結果と書込みデータとについてビット毎の論理積演算が行われる。メモリ３００は、得られた演算結果をセット操作用データとする。これらの演算を論理式で表すと、次式のようになる。
ＳＤａｔａ＝（（Ｗ＾Ｒ）＆Ｗ）    ・・・式３
ただし、ＳＤａｔａはセット操作用データを表す。同図におけるｂに書込みデータ、読み出されたデータ、リセット操作用データおよびセット操作用データの関係を表した。
【００５７】
（ｃ）再書込み操作（事前消去あり）の場合
メモリ３００はリセット操作のみを行う。リセット操作用データは、式２に基づいて算出される。
【００５８】
（ｄ）再書込み操作（事前消去なし）の場合
この場合は、（ｂ）と同じ操作にすることができる。すなわち、メモリ３００は、リセット操作およびセット操作を行う。リセット操作用データおよびセット操作用データは、それぞれ式２および式３に基づいて算出される。
【００５９】
［書込み処理の処理手順（メモリコントローラ側の処理）］
図７は、本技術の第１の実施の形態における書込み処理の処理手順（メモリコントローラ）の一例を示す図である。なお、本技術の第１の実施の形態における書込み処理では、再書込みカウンタおよびオフセットレジスタを使用する。これらは、メモリコントローラ２００においてソフトウェアにより実現されるカウンタおよびレジスタである。再書込みカウンタは、書込み処理における再書込みを行った回数を保持するものである。オフセットレジスタは、ＤＲＡＭ１２０における書込みデータの先頭アドレスからのオフセット値を保持するものである。なお、このオフセット値は、ページ数を単位とする値である。
【００６０】
ホストコンピュータ１００より書込みコマンドが発行されると、メモリコントローラ２００は、書込み処理を開始する。まず、メモリコントローラ２００は、通常書込みを行う（ステップＳ９１０）。本技術の第１の実施の形態においては、複数のページからなる書込みデータの書込みをこの通常書込み処理において行う。次に、メモリコントローラ２００は、安定状態判断処理を行う（ステップＳ９２０）。次に、メモリコントローラ２００は、再書込みカウンタを初期化し（ステップＳ９０３）、検証書込みを行う（ステップＳ９３０）。この検証書込み処理により再書込みカウンタには再書込みを行った回数が保持される。
【００６１】
この再書込みカウンタの値が「０」の場合は（ステップＳ９０４：Ｙｅｓ）、検証書き込み処理において再書き込みが発生しなかったことを示している。すなわち、書き込み処理が成功したことを示しており、メモリコントローラ２００は、ホストコンピュータ１００に対して書込み処理が正常に終了したことを通知し、書込み処理を終了する。一方、再書込みカウンタの値が「０」でない場合は（ステップＳ９０４：Ｎｏ）、検証書き込み処理において再書き込みが発生したことを示している。すなわち、該当部分に対する再度の検証書き込み処理が必要であることを示している。この場合、再書込みカウンタの値が「０」となるまで、再書込み処理（ステップＳ９２０からの処理）をループ状に実行する。しかし、再書込み処理回数の上限に達している場合には（ステップＳ９０５：Ｙｅｓ）、メモリコントローラ２００は、再書込み処理を行わず、エラー処理（ステップＳ９０６）を行う。このエラー処理として、メモリコントローラ２００は、ホストコンピュータ１００に対してデータの書込みが異常終了したことを通知する。その後、メモリコントローラ２００は、書込み処理を終了する。再書込み処理の上限値としては、例えば、２回とすることができる。
【００６２】
［通常書込み処理の処理手順（メモリコントローラ側の処理）］
図８は、本技術の第１の実施の形態における通常書込み処理の処理手順（メモリコントローラ）の一例を示す図である。本処理は、図７において説明したステップＳ９１０に対応する処理である。まず、メモリコントローラ２００は、書込み設定を行う（ステップＳ９１１）。具体的には、書込みコマンドに基づいて、書込みデータの読出し元であるＤＲＡＭ１２０の書込みデータの先頭アドレス、書込みデータのページ数および書込み先であるメモリ３００におけるページアドレスを設定する。次に、メモリコントローラ２００は、オフセットレジスタを初期化する（ステップＳ９１２）。その後、メモリコントローラ２００は、全てのデータの書込みが終了したか否かを調べる（ステップＳ９１６）。具体的には、メモリコントローラ２００が、ステップＳ９１１において設定した書込みデータのページ数と書込みが終了したページ数、例えば、オフセットレジスタの値とを比較することにより行う。
【００６３】
その結果、全てのデータの書込みが終了していた場合には（ステップＳ９１６：Ｙｅｓ）、通常書込み処理を終了する。一方、全てのデータの書込みが終了していない場合には（ステップＳ９１６：Ｎｏ）、ステップＳ９１３からの処理に移行する。メモリコントローラ２００は、ホストコンピュータ１００から書込みデータを取得する（ステップＳ９１３）。具体的には、ホストインターフェース２３０を介してメモリコントローラインターフェース１３０に対して書込みデータの転送を指示する。この際、データの読出し元であるＤＲＡＭ１２０のアドレスを指定する。このアドレスは、ＤＲＡＭ１２０の書込みデータの先頭アドレスにオフセットレジスタの値とページサイズとの積を加えたものである。メモリコントローラインターフェース１３０は、指定されたアドレスのページデータをＤＲＡＭ１２０から読み出して、これを書込みデータとしてメモリコントローラ２００に対して出力する。
【００６４】
メモリコントローラ２００は、このページデータをＲＡＭ２２０に記憶させる。このページデータに対してＥＣＣ処理部２５０が符号化を行う。次に、メモリコントローラ２００は、符号化されたページデータを含む書込みリクエストを生成し、発行する（ステップＳ９１４）。この際、書込みリクエストの書込み先ページアドレスには、ホストコンピュータ１００が出力した書込みコマンドに含まれるメモリ３００における書込みアドレス（ページアドレス）にオフセットレジスタの値を加算した値を使用することができる。すなわち、オフセットレジスタの値による相対アドレスによりページアドレスを指定することができる。メモリ３００における書込み動作が完了して書込みレスポンスがメモリ３００から出力された後、メモリコントローラ２００は、オフセットレジスタを更新し（ステップＳ９１８）、ステップＳ９１６の処理に戻る。なお、メモリコントローラ２００は、ステップＳ９１４の処理を行った際に書込みレスポンスに基づく書込み情報を判断部２８０に出力する。これにより、タイマ部２８１による安定化時間の計時と書込みページ数判断部２８２による状態安定化ページ数に係る判断とを開始させることができる。
【００６５】
［安定状態判断処理の処理手順（メモリコントローラ側の処理）］
図９は、本技術の第１の実施の形態における安定状態判断処理の処理手順（メモリコントローラ）の一例を示す図である。本処理は、図７において説明したステップＳ９２０に対応する処理である。まず、メモリコントローラ２００は、書込みページ数が状態安定化ページ数以上か否かを判断する（ステップＳ９２１）。その結果、書込みページ数が状態安定化ページ数以上であった場合には（ステップＳ９２１：Ｙｅｓ）、安定状態判断処理を終了する。一方、書込みページ数が状態安定化ページ数未満であった場合には（ステップＳ９２１：Ｎｏ）、メモリコントローラ２００は、安定化時間が経過しているか否かを判断し（ステップＳ９２２）、安定化時間が経過するまで待機する（ステップＳ９２２：Ｎｏ）。一方、安定化時間が経過している場合には（ステップＳ９２２：Ｙｅｓ）、安定状態判断処理を終了する。なお、メモリコントローラ２００は、ステップＳ９２１の処理を行った際に、書込みページ数判断部２８２のカウンタをリセットしてこれに保持された書込みページ数をゼロにする。
【００６６】
［検証書込み処理の処理手順（メモリコントローラ側の処理）］
図１０は、本技術の第１の実施の形態における検証書込み処理の処理手順（メモリコントローラ）の一例を示す図である。本処理は、図７において説明したステップＳ９３０に対応する処理である。まず、メモリコントローラ２００は、オフセットレジスタを初期化する（ステップＳ９３２）。次に、メモリコントローラ２００は、全てのデータの検証が終了したか否かを調べる（ステップＳ９３６）。その結果、全てのデータの検証が終了していた場合には（ステップＳ９３６：Ｙｅｓ）、検証書込み処理を終了する。一方、全てのデータの検証が終了していない場合には（ステップＳ９３６：Ｎｏ）、ステップＳ９３３からの処理に移行する。
【００６７】
メモリコントローラ２００は、ホストコンピュータ１００から書込みデータを取得する（ステップＳ９３３）。次に、メモリコントローラ２００は、この書込みデータを含む検証書込みリクエストを生成し、発行する（ステップＳ９３４）。このリクエストのレスポンス（検証書込みレスポンス）として、メモリ３００は、再書込みにおける書込みページ数を出力する。このリクエストの結果、メモリ３００により再書込みが行われた場合、メモリコントローラ２００は、再書込みカウンタを更新する。すなわち、検証書込みレスポンスの書込みページ数がゼロでない場合は（ステップＳ９３５：Ｙｅｓ）、メモリコントローラ２００は、再書込みカウンタに検証書込みレスポンスの書込みページ数を加算する（ステップＳ９３７）。その後、メモリコントローラ２００は、ステップＳ９３８の処理に移行する。
【００６８】
一方、メモリ３００により再書込みが行われなかった場合、すなわち、検証書込みレスポンスの書込みページ数がゼロの場合は（ステップＳ９３５：Ｎｏ）、メモリコントローラ２００は、ステップＳ９３７の処理をスキップして、ステップＳ９３８の処理に移行する。ステップＳ９３８において、メモリコントローラ２００は、オフセットレジスタを更新し（ステップＳ９３８）、ステップＳ９３６の処理に戻る。なお、メモリコントローラ２００は、ステップＳ９３４の処理を行った際に検証書込みレスポンスに基づく書込み情報を判断部２８０に出力する。
【００６９】
［書込み処理の処理手順（メモリ側の処理）］
図１１は、本技術の第１の実施の形態における書込み処理の処理手順（メモリ）の一例を示す図である。メモリ３００は、メモリコントローラ２００から書込みリクエストが発行されると、書込み処理を開始する。なお、リクエストに伴う書込みデータは、作業メモリ３２０に記憶される。まず、メモリ３００は、事前消去の有無を調べ（ステップＳ７０１）、事前消去がされていない場合は（ステップＳ７０１：Ｎｏ）、ステップＳ７０２乃至ステップＳ７０６の処理を実行する。一方、事前消去がされている場合は（ステップＳ７０１：Ｙｅｓ）、メモリ３００は、ステップＳ７０７およびステップＳ７０８の処理を実行する。
【００７０】
まず、ステップＳ７０２乃至ステップＳ７０６の処理について説明する。この場合は、前述した（ｂ）書込み操作（事前消去なし）の場合に該当する。メモリ３００は、書込み操作の対象となるメモリセルからページデータの読出しを行う（ステップＳ７０２）。この読み出したページデータおよび作業メモリ３２０に記憶された書込みデータに基づいて、メモリ３００は、リセット操作用データを算出し（ステップＳ７０３）、リセット操作を行う（ステップＳ７０４）。次に、メモリ３００は、セット操作用データを算出し（ステップＳ７０５）、セット操作を行い（ステップＳ７０６）、ステップＳ７０９の処理に移行する。次に、ステップＳ７０７およびステップＳ７０８の処理について説明する。この場合は、前述した（ａ）書込み操作（事前消去あり）の場合に該当する。事前消去が行われているため、メモリ３００は、メモリセルからのページデータの読出しを行うことなく、リセット操作用データを算出する（ステップＳ７０７）。次に、メモリ３００は、リセット操作を行い（ステップＳ７０８）、ステップＳ７０９の処理に移行する。ステップＳ７０９において、メモリ３００は、書込み処理の結果として、書込みを行ったページ数をメモリコントローラ２００に対して出力し（ステップＳ７０９）、書込み処理を終了する。
【００７１】
［検証書込み処理の処理手順（メモリ側の処理）］
図１２は、本技術の第１の実施の形態における検証書込み処理の処理手順（メモリ）の一例を示す図である。メモリ３００は、メモリコントローラ２００から検証書込みリクエストが発行されると、検証書込み処理を開始する。なお、リクエストに伴う比較データは、作業メモリ３２０に記憶される。まず、メモリ３００は、メモリセルからデータ（ページデータ）の読出しを行う（ステップＳ７１２）。読み出されたデータは、バッファ３６０に保持される。次に、メモリ３００は、データの比較を行う（ステップＳ７１８）。具体的には、メモリ３００は、作業メモリ３２０に記憶された比較データおよびバッファ３６０に保持されたデータの比較を行う。
【００７２】
その結果、両者が一致していない場合には（ステップＳ７１１：Ｎｏ）、再書込みを行う（ステップＳ７２０）。一方、両者が一致している場合には（ステップＳ７１１：Ｙｅｓ）、ステップＳ７２０の処理をスキップして、ステップＳ７１９の処理に移行する。ステップＳ７１９において、メモリ３００は、検証書込み処理の結果として、書込みを行ったページ数をメモリコントローラ２００に対して出力し（ステップＳ７１９）、検証書込み処理を終了する。
【００７３】
［再書込み処理の処理手順（メモリ側の処理）］
図１３は、本技術の第１の実施の形態における再書込み処理の処理手順（メモリ）の一例を示す図である。本処理は、図１２において説明したステップＳ７２０に対応する処理である。すなわち、上述の検証書込み処理から呼び出される処理であるため、バッファ３６０にはメモリセルから読み出したデータが保持されている。このデータを使用して再書込みを行う。メモリ３００は、リセット操作用データの算出を行い（ステップＳ７２３）、リセット操作を行う（ステップＳ７２４）。本技術の第１の実施の形態では、再書込みの際、事前消去の有無にかかわらずリセット操作を行う。
【００７４】
次に、メモリ３００は、事前消去の有無を調べ（ステップＳ７２１）、事前消去がされていない場合は（ステップＳ７２１：Ｎｏ）、ステップＳ７２５およびステップＳ７２６の処理を実行する。この場合は、前述した（ｄ）再書込み操作（事前消去なし）の場合に該当する。一方、事前消去がされている場合は（ステップＳ７２１：Ｙｅｓ）、メモリ３００は、ステップＳ７２９の処理に移行する。この場合は、前述した（ｃ）再書込み操作（事前消去あり）の場合に該当する。ステップＳ７２５およびステップＳ７２６の処理について説明する。メモリ３００は、セット操作用データを算出し（ステップＳ７２５）、セット操作を行い（ステップＳ７２６）、ステップＳ７２９の処理に移行する。ステップＳ７２９において、メモリ３００は、再書込み処理の結果として、書込みを行ったページ数をメモリコントローラ２００に対して出力し（ステップＳ７２９）、再書込み処理を終了する。
【００７５】
このように、本技術の第１の実施の形態によれば、複数ページからなるデータの書込みを行った後に、状態安定化ページ数以上の書込みページ数および書込み後の安定化時間の経過の何れかに基づいてメモリセルの状態が安定しているか否かの判断を行う。メモリセルの状態が安定したと判断してデータの読出しを行い、検証を行うことにより、正確な書込みデータの検証が可能になり、書込み信頼性を向上させることができる。
【００７６】
［第１の変形例］
上述の第１の実施の形態では、図１０において説明した検証書込み処理のステップＳ９３３において、検証のためのデータを１ページずつホストコンピュータ１００のＤＲＡＭ１２０から読み出して転送していた。しかし、複数のページデータをまとめて転送してもよい。データ転送時間を短縮することができるためである。そこで、第１の変形例では、検証書込み処理において、ＤＲＡＭ１２０から複数のページデータをまとめて転送する。これにより、転送された複数ページのデータはメモリコントローラ２００のＲＡＭ２２０に記憶され、検証書込みリクエスト発行処理（ステップＳ９３４）の際に、１ページずつ読み出されて、検証に使用される。
【００７７】
［第２の変形例］
上述の第１の実施の形態では、図１０において説明した検証書込み処理のステップＳ９３４において、検証書込みリクエストの発行に伴ってページデータを出力していた。しかし、複数のページデータをまとめて出力し、メモリ３００に転送してもよい。第１の変形例と同様、データ転送時間を短縮することができるためである。そこで、第２の変形例では、検証書込み処理において、検証書込みリクエスト発行の際に、複数のページデータをまとめて出力する。これにより、転送された複数のページデータはメモリ３００の作業メモリ３２０に記憶され、メモリ３００における検証書込み処理の際に、１ページずつ読み出されて、検証および再書込みに使用される。
【００７８】
［第３の変形例］
上述の第１の実施の形態では、図４における判断部２８０は、状態安定化ページ数以上の書込みページ数および書込み後の安定化時間の経過の何れかに基づいてメモリセルの状態が安定しているか否かの判断を行っていた。しかし、安定化時間の経過のみに基づいて判断を行ってもよい。判断部２８０の構成を簡素化することができるためである。そこで、第３の変形例では、書込みページ数判断部２８２を省略し、タイマ部２８１による安定化時間の経過のみに基づいて判断を行う。
【００７９】
［第４の変形例］
上述の第１の実施の形態では、図４における判断部２８０は、状態安定化ページ数以上の書込みページ数および書込み後の安定化時間の経過の何れかに基づいてメモリセルの状態が安定しているか否かの判断を行っていた。しかし、判断部２８０は、書込制御部２９２における複数ページからなるデータの書込みが連続して行われ、この書込みが行われた順に検証書込み部２９９において検証が行われた後には、メモリセルの状態が安定していると判断してもよい。ページデータサイズが大きく処理に時間がかかる場合等には、複数ページからなるデータの書込みにより、所定の安定化時間の経過が担保されるためである。そこで、書込みページ数判断部２８２は、複数ページからなる書込みであるか否かに基づいて判断を行う。これにより、判断部２８０の構成を簡素化することができる。
【００８０】
［第５の変形例］
上述の第１の実施の形態では、事前消去されている場合の再書込み処理においてリセット操作のみを行っていたが、事前消去されている場合であってもリセット操作およびセット操作により再書込みを行ってもよい。リセット操作によりライトディスターブ現象が発生した場合であっても、セット操作を行うことによりメモリセルに書込まれたデータの反転を防ぐことができる。なお、ライトディスターブ現象とは、メモリセルに書込みを行った際に、近隣のメモリセルに記憶されたデータが書き換えられる現象である。そこで、事前消去されている場合であってもリセット操作およびセット操作により再書込みを行う。これにより、データの書込みの信頼性を向上させることができる。
【００８１】
書込みおよび再書込みの操作について場合に分けて説明する。
（ａ'）書込み操作（事前消去あり）の場合
メモリ３００はリセット操作のみを行う。リセット操作用データは、式１に基づいて算出される。すなわち、前述した（ａ）と同じ操作にすることができる。
（ｂ'）書込み操作（事前消去なし）の場合
メモリ３００は、リセット操作およびセット操作を行う。リセット操作用データおよびセット操作用データは、それぞれ式２および式３に基づいて算出される。すなわち、前述した（ｂ）と同じ操作にすることができる。
（ｃ'）再書込み操作（事前消去あり）の場合
この場合は、（ｂ'）と同じ操作にすることができる。
（ｄ'）再書込み操作（事前消去なし）の場合
この場合も、（ｂ'）と同じ操作にすることができる。
【００８２】
［再書込み処理の処理手順（メモリ側の処理）］
図１４は、本技術の第１の実施の形態の変形例における再書込み処理の処理手順（メモリ）の一例を示す図である。第５の変形例では、事前消去の有無にかかわらずリセット操作およびセット操作を行うため、図１３において説明した再書込み処理と比較して処理が簡素化される。まず、メモリ３００は、リセット操作用データを算出し（ステップＳ７２３）、リセット操作を行う（ステップＳ７２４）。次に、メモリ３００は、セット操作用データを算出し（ステップＳ７２５）、セット操作を行う（ステップＳ７２６）。次に、メモリ３００は、再書込み処理の結果として、書込みを行ったページ数をメモリコントローラ２００に対して出力し（ステップＳ７２９）、再書込み処理を終了する。
【００８３】
［第６の変形例］
上述の第１の実施の形態では、不揮発性メモリとして、ＲｅＲＡＭを想定していたが、データの書込みの直後に読出しを行うと書き込まれたデータが破壊されるＰＣＲＡＭであってもよい。ＰＣＲＡＭにおいても、複数ページからなるデータの書込みを行った後に、メモリセルの状態が安定しているか否かの判断を行って、検証を行うことにより、正確な書込みデータの検証が可能になる。これにより、書込み信頼性を向上させることができる。
【００８４】
［書込み処理および再書込み処理の処理手順（メモリ側の処理）］
ＰＣＲＡＭは、データの書込みの際に、メモリセルのデータを読み出すことなくリセット操作用データおよびセット操作用データを生成することができる。そのため、処理が簡素化される。なお、本技術の第１の実施の形態の第６の変形例では、事前消去は行われないものと想定する。これにより、書込み処理および再書込み処理は同一の処理となり、図１４において説明した処理と同様の処理手順となる。ステップＳ７２３において、メモリコントローラ２００は、リセット操作用データを算出する。これは、式１に基づいて算出される。ステップＳ７２５において、メモリコントローラ２００は、セット操作用データを算出する。これは、次式に基づいて算出される。
ＳＤａｔａ＝Ｗ
これ以外の処理手順は、図１４における処理手順と同様であるため説明を省略する。なお、ＰＣＲＡＭにおいても、ＲｅＲＡＭと同様に、メモリセルのデータの読み出しを行い、これを参照してリセット操作用データおよびセット操作用データを生成してもよい。この場合のリセット操作用データおよびセット操作用データの生成は、前述したＲｅＲＡＭにおけるこれらのデータの生成と同様にすることができる。
【００８５】
［第７の変形例］
上述の第１の実施の形態では、メモリコントローラ２００が、書込み制御部２９２と、判断部２８０と、検証書込み部２９９とを備えていたが、メモリ３００がこれらを備えてもよい。メモリコントローラ２００の処理を簡素化できるからである。この場合、メモリコントローラ２００は、メモリ３００に対して、書込みリクエストのみを発行する。そして、メモリ３００が、このリクエストに基づいて書込み、判断および検証書込みの処理を行う。
【００８６】
＜２．第２の実施の形態＞
上述の第１の実施の形態では、再書込みを行う際、記憶素子に印加する書込み電圧等を変更せずに書込みを行っていた。これに対し本技術の第２の実施の形態では、再書込みの際に、書込み条件を変更する。これにより、書込みの信頼性を向上させる。
【００８７】
［機能構成］
図１５は、本技術の第２の実施の形態における機能構成例を示す図である。同図のメモリコントローラ２００は、書込み条件設定部２９４を備える。この書込み条件設定部はメモリ３００に対して書込み条件を設定するものである。ここで、書込み条件とは、メモリセルにデータを書き込む際の条件である。書込み条件の設定は、メモリ３００に対して書込み条件設定リクエストを発行することにより行われる。メモリ３００は、この書込み条件設定リクエストに基づく書込み条件を保持し、書込みの際に適用する。これ以外の構成は、図４において説明したメモリコントローラ２００およびメモリ３００と同様であるため、説明を省略する。
【００８８】
［書込み条件］
ＲｅＲＡＭにおける書込み条件としては、メモリセルの記憶素子に印加する書込み電圧とそのパルス幅およびパルス数、メモリセルに流す電流ならびに読出し電圧および読出しの際の参照電圧が挙げられる。本技術の第２の実施の形態のメモリコントローラ２００は、既定の書込み条件をメモリ３００に設定して通常書込みを行い、再書込みの際には書込み条件を変更する。例えば、書込み電圧を変更して再書込みを行う。
【００８９】
再書込みの際に、書込み電圧を高くすることにより、記憶素子の絶縁層内の金属イオンの拡散を高速化することができる。絶縁層における金属イオンの移動度が低く、書込みの際に記憶素子の抵抗値が閾値近傍の値となり、書込みが失敗したメモリセルであっても、再書込みの際に書込み電圧を高くすることにより、記憶素子を所望の高抵抗状態または低抵抗状態にすることが可能となる。これにより、書込みを成功させ、書込み信頼性を向上させることができる。なお、書込み電圧を高くすると消費電力が増加する。しかし、本技術の第２の実施の形態では、再書込みの時だけ高い書込み電圧にすることにより、書込み処理全体の消費電力の増加を抑えながら書込み信頼性を向上させることができる。
【００９０】
［書込み処理の処理手順（メモリコントローラ側の処理）］
図１６は、本技術の第２の実施の形態における書込み処理の処理手順（メモリコントローラ）の一例を示す図である。ホストコンピュータ１００から書込みコマンドが発行されると、メモリコントローラ２００は、書込み処理を開始する。まず、メモリコントローラ２００は、書込み条件設定リクエストの発行を行う（ステップＳ９５１）。これにより、既定の書込み条件がメモリ３００に設定される。次に、メモリコントローラ２００は、コマンドを解釈して通常書込みを行う（ステップＳ９６０）。次に、メモリコントローラ２００は、安定状態判断処理を行う（ステップＳ９７０）。その後、メモリコントローラ２００は、後続する検証書込み処理に先立ち、書込み条件を変更し（ステップＳ９５７）、変更した条件に基づく書込み条件設定リクエストを発行する（ステップＳ９５８）。次に、メモリコントローラ２００は、再書込みカウンタを初期化し（ステップＳ９５９）、検証書込みを行う（ステップＳ９８０）。その後、再書込みカウンタの値が「０」の場合は（ステップＳ９５４：Ｙｅｓ）、メモリコントローラ２００は、ホストコンピュータ１００に対して書込み処理が正常に終了したことを通知し、書込み処理を終了する。
【００９１】
再書込みカウンタの値が「０」でない場合は（ステップＳ９５４：Ｎｏ）、再書込みカウンタの値が「０」となるまで、再書込み処理回数が上限に達しない範囲で（ステップＳ９５５：Ｎｏ）、再書込み処理（ステップＳ９７０からの処理）をループ状に実行する。しかし、ステップＳ９５５において、再書込み処理回数が上限に達している場合には（ステップＳ９５５：Ｙｅｓ）、メモリコントローラ２００は、再書込み処理を行わず、エラー処理（ステップＳ９５６）を行う。このエラー処理として、メモリコントローラ２００は、ホストコンピュータ１００に対してデータの書込みが異常終了したことを通知する。その後、メモリコントローラ２００は、書込み処理を終了する。
【００９２】
なお、通常書込み（ステップＳ９６０）の処理は、図７において説明した通常書込み（ステップＳ９１０）と同様であるため説明を省略する。安定状態判断（ステップＳ９７０）の処理は、図７において説明した安定状態判断（ステップＳ９２０）と同様であるため説明を省略する。検証書込み（ステップＳ９８０）の処理は、図７において説明した検証書込み（ステップＳ９３０）と同様であるため説明を省略する。また、メモリ３００における処理も本技術の第１の実施の形態における処理と同様であるため説明を省略する。
【００９３】
このように、本技術の第２の実施の形態によれば、再書込みの際の書込み条件を変更することにより、書込み信頼性をさらに高めることができる。
【００９４】
＜３．第３の実施の形態＞
上述の第１の実施の形態では、再書込みの際、書込み処理の対象となった全てのメモリセルに対して検証を行うため、長い処理時間を要していた。これに対し、本技術の第３の実施の形態では、検証が必要なページのページアドレスを保持して検証を行い、不必要な検証を抑制することにより、書込み処理を高速化する。
【００９５】
［機能構成］
図１７は、本技術の第３の実施の形態における機能構成例を示す図である。同図のメモリコントローラ２００は、検証アドレス情報保持部２９５を備える。この検証アドレス情報保持部２９５は、検証アドレス情報を保持するものである。ここで、検証アドレス情報とは、検証を行うメモリ３００におけるページのページアドレスの情報である。書込制御部２９２は、書込みを行った際に書込みを行ったページアドレスの情報を検証アドレス情報として検証アドレス情報保持部２９５に保持させる。同様に、検証書込み部２９９は、再書込みを行った際に再書込みを行ったページアドレスの情報を検証アドレス情報として検証アドレス情報保持部２９５に保持させる。また、検証書込み部２９９は、検証アドレス情報保持部２９５に保持された検証アドレス情報に基づいて検証を行う。これ以外の構成は、図４において説明したメモリコントローラ２００およびメモリ３００と同様であるため、説明を省略する。
【００９６】
［書込み処理の処理手順（メモリコントローラ側の処理）］
図１８は、本技術の第３の実施の形態における書込み処理の処理手順（メモリコントローラ）の一例を示す図である。ホストコンピュータ１００から書込みコマンドが発行されると、メモリコントローラ２００は、書込み処理を開始する。まず、メモリコントローラ２００は、通常書込みを行う（ステップＳ８１０）。次に、メモリコントローラ２００は、検証アドレス情報の保持を行う（ステップＳ８０１）。この場合、書込み対象となった全てのページのページアドレスが検証アドレス情報として、検証アドレス情報保持部２９５に保持される。なお、第３の実施の形態においても、前述した第１の実施の形態と同様の、メモリ３００におけるページアドレスの指定方式を採用している。すなわち、ホストコンピュータ１００が出力した書込みコマンドに含まれるメモリ３００における書込みアドレスにオフセットレジスタの値を加算した値をメモリ３００における書込みアドレス（ページアドレス）としている。このため、検証アドレス保持部２９５に保持される検証アドレス情報として、オフセットレジスタの値が使用される。
【００９７】
次に、メモリコントローラ２００は、安定状態判断処理を行う（ステップＳ８２０）。次に、メモリコントローラ２００は、再書込みカウンタを初期化し（ステップＳ８０９）、検証書込みを行う（ステップＳ８３０）。その後、再書込みカウンタの値が「０」の場合は（ステップＳ８０４：Ｙｅｓ）、メモリコントローラ２００は、ホストコンピュータ１００に対して書込み処理が正常に終了したことを通知し、本書込み処理を終了する。
【００９８】
再書込みカウンタの値が「０」でない場合は（ステップＳ８０４：Ｎｏ）、再書込みカウンタの値が「０」となるまで、再書込み処理回数が上限に達しない範囲で（ステップＳ８０５：Ｎｏ）、再書込み処理（ステップＳ８２０からの処理）をループ状に実行する。しかし、ステップＳ８０５において、再書込み処理回数が上限に達している場合には（ステップＳ８０５：Ｙｅｓ）、メモリコントローラ２００は、再書込み処理を行わず、エラー処理（ステップＳ８０６）を行う。このエラー処理として、メモリコントローラ２００は、ホストコンピュータ１００に対してデータの書込みが異常終了したことを通知する。その後、メモリコントローラ２００は、書込み処理を終了する。
【００９９】
［検証書込み処理の処理手順（メモリコントローラ側の処理）］
図１９は、本技術の第３の実施の形態における検証書込み処理の処理手順（メモリコントローラ）の一例を示す図である。本処理は、図１８において説明したステップＳ８３０に対応する処理である。まず、メモリコントローラ２００は、全てのデータの検証が終了したか否かを調べる（ステップＳ８３６）。その結果、全てのデータの検証が終了していた場合には（ステップＳ８３６：Ｙｅｓ）、検証書込み処理を終了する。一方、全てのデータの検証が終了していない場合には（ステップＳ８３６：Ｎｏ）、ステップＳ８３１からの検証書込みループの処理に移行する。メモリコントローラ２００は、検証アドレス情報保持部２９５から検証アドレス情報（オフセットレジスタの値）を取得する（ステップＳ８３１）。次に、メモリコントローラ２００は、この検証アドレス情報に基づいてホストコンピュータ１００から書込みデータを取得する（ステップＳ８３３）。また、メモリコントローラ２００は、検証アドレス情報に基づいてメモリ３００における検証先ページアドレスを特定し、検証書込みリクエストを生成して発行する（ステップＳ８３４）。
【０１００】
このリクエストの結果、メモリ３００において再書込みが行われなかった場合には（ステップＳ８３５：Ｎｏ）、メモリコントローラ２００は、ステップＳ８３６の処理に移行する。一方、メモリ３００において再書込みが行われた場合には（ステップＳ８３５：Ｙｅｓ）、メモリコントローラ２００は、再書込みカウンタにレスポンスの書込みページ数を加算する（ステップＳ８３７）。次に、メモリコントローラ２００は、この再書込みが行われたページのページアドレスを新たな検証アドレス情報として、検証アドレス情報保持部２９５に保持させる（ステップＳ８３９）。この新たな検証アドレス情報は、次回の検証書込み処理に使用される。なお、ステップＳ８３１で取得した検証アドレス情報に係るページアドレス（オフセットレジスタの値）が、再書込みが行われたページのページアドレスとして、検証アドレス情報保持部２９５に保持される。このため、メモリコントローラ２００は、検証書込み（ステップＳ８３０）においてオフセットレジスタを使用することなく、オフセットレジスタの値による相対アドレス指定を行うことができる。その後、メモリコントローラ２００は、ステップＳ８３６の処理に戻る。
【０１０１】
なお、メモリコントローラ２００は、ステップＳ８３４の処理を行った際に書込みレスポンスに基づく書込み情報を判断部２８０に出力する。
【０１０２】
なお、検証アドレス情報保持部２９５は、例えば、第１および第２のＦＩＦＯ（First-In First-Out）メモリを有する構成とすることができる。通常書込みまたは直前の検証書込みループで生成された検証アドレス情報は第１のＦＩＦＯメモリに保持されており、ステップＳ８３１において順に取得される。一方、ステップＳ８３９において生じた新たな検証アドレス情報は第２のＦＩＦＯメモリに保持される。その後、検証書込み処理の終了の際、第２のＦＩＦＯメモリに保持された検証アドレス情報を第１のＦＩＦＯメモリに移動させることにより、当該検証アドレス情報を次回の検証書込み処理におけるステップＳ８３１の処理対象とすることができる。また、検証アドレス情報として、オフセットレジスタの値を使用することができる。
【０１０３】
なお、図１８における通常書込み（ステップＳ８１０）および安定状態判断（ステップＳ８２０）の処理は、図７において説明した通常書込み（ステップＳ９１０）および安定状態判断（ステップＳ９２０）と同様であるため説明を省略する。また、メモリ３００における処理も本技術の第１の実施の形態における処理と同様であるため説明を省略する。
【０１０４】
このように、本技術の第３の実施の形態によれば、再書込みを行ったページアドレスの情報を検証アドレス情報として保持し、これ基づいて検証を行うため、書込みが成功したメモリセルに対する検証の処理を抑制することができる。このため、書込み処理を高速化することができる。
【０１０５】
＜４．第４の実施の形態＞
上述の第１の実施の形態では、通常書込みは連続して行うものの、検証と再書込みとは交互に行うため、リクエストの生成が煩雑となる問題があった。このため、検証リクエストと書込みリクエストを統合した検証書込みリクエストを使用していた。しかし、その一方で、メモリ３００におけるリクエストの処理が複雑なものになっていた。これに対し、本技術の第４の実施の形態では、検証および再書込みも連続して行う。これにより、リクエストの生成を容易なものにする。
【０１０６】
［機能構成］
図２０は、本技術の第４の実施の形態における機能構成例を示す図である。同図のメモリコントローラ２００は、書込制御部２９１と、判断部２８０と、検証部２９３と、再書込アドレス情報保持部２９６とを備える。
【０１０７】
書込制御部２９１は、データの書込みと検証の結果に基づく書込みデータの再書込みとを行うものである。この書込制御部２９１は、書込みリクエストをメモリ３００に対して発行する。このリクエストに対してメモリ３００は、書込みおよび再書込みにおける書込みページ数を書込みレスポンスとしてメモリコントローラ２００に出力する。その後、書込制御部２９１は、書込みページ数を書込み情報として判断部２８０に対して出力する。
【０１０８】
再書込アドレス情報保持部２９６は、再書込みアドレス情報を保持するものである。ここで、再書込みアドレス情報とは、再書込みを行うメモリ３００のページアドレスの情報である。上述の書込制御部２９１は、再書込アドレス情報保持部２９６に保持された再書込みアドレス情報に基づいて再書込みを行う。
【０１０９】
検証部２９３は、前述した検証を行うものである。この検証部２９３は、判断部２８０の判断の結果に基づいてデータの書込みを検証する。また、この検証部２９３は、検証のリクエストをメモリ３００に対して発行することにより検証を実行する。このリクエストに対してメモリ３００は、第１の実施の形態において説明した検証の処理を行い、この検証の結果を検証レスポンスとしてメモリコントローラ２００に出力する。その後、この検証の結果に基づく再書込みアドレス情報が再書込アドレス情報保持部２９６に保持される。このように、本技術の第４の実施の形態における検証部２９３は、本技術の第１の実施の形態において説明した検証書込み部２９９とは異なり、検証のみを行う。
【０１１０】
このように、本技術の第４の実施の形態では、検証および再書込みは個別のリクエストとして発行される。これ以外の構成は、図４において説明したメモリコントローラ２００およびメモリ３００と同様であるため、説明を省略する。なお、書込制御部２９１は、特許請求の範囲に記載の書込み制御部の一例である。再書込アドレス情報保持部２９６は、特許請求の範囲に記載の再書込みアドレス情報保持部の一例である。
【０１１１】
［書込み処理の処理手順（メモリコントローラ側の処理）］
図２１は、本技術の第４の実施の形態における書込み処理の処理手順（メモリコントローラ）の一例を示す図である。ホストコンピュータ１００から書込みコマンドが発行されると、メモリコントローラ２００は、書込み処理を開始する。まず、メモリコントローラ２００は、コマンドを解釈して通常書込みを行う（ステップＳ８６０）。次に、メモリコントローラ２００は、安定状態判断処理を行う（ステップＳ８７０）。次に、メモリコントローラ２００は、再書込みカウンタを初期化し（ステップＳ８５９）、検証を行い（ステップＳ８８０）、再書込みを行う（ステップＳ８９０）。その後、再書込みカウンタの値が「０」の場合は（ステップＳ８５４：Ｙｅｓ）、メモリコントローラ２００は、ホストコンピュータ１００に対して書込み処理が正常に終了したことを通知し、書込み処理を終了する。
【０１１２】
再書込みカウンタの値が「０」でない場合は（ステップＳ８５４：Ｎｏ）、再書込みカウンタの値が「０」となるまで、再書込み処理回数が上限に達しない範囲で（ステップＳ８５５：Ｎｏ）、再書込み処理（ステップＳ８７０からの処理）をループ状に実行する。しかし、ステップＳ８５５において、再書込み処理回数が上限に達している場合には（ステップＳ８５５：Ｙｅｓ）、メモリコントローラ２００は、再書込み処理を行わず、エラー処理（ステップＳ８５６）を行う。このエラー処理として、メモリコントローラ２００は、ホストコンピュータ１００に対してデータの書込みが異常終了したことを通知する。その後、メモリコントローラ２００は、書込み処理を終了する。
【０１１３】
なお、通常書込み（ステップＳ８６０）および安定状態判断（ステップＳ８７０）の処理は、図７において説明した通常書込み（ステップＳ９１０）および安定状態判断（ステップＳ９２０）と同様であるため説明を省略する。
【０１１４】
［検証処理の処理手順（メモリコントローラ側の処理）］
図２２は、本技術の第４の実施の形態における検証処理の処理手順（メモリコントローラ）の一例を示す図である。本処理は、図２１において説明したステップＳ８８０に対応する処理である。まず、メモリコントローラ２００は、オフセットレジスタおよび再書込アドレス情報保持部２９６を初期化する（ステップＳ８８２）。次に、メモリコントローラ２００は、全てのデータの検証が終了したか否かを調べる（ステップＳ８８６）。その結果、全てのデータの検証が終了していた場合には（ステップＳ８８６：Ｙｅｓ）、検証処理を終了する。一方、全てのデータの検証が終了していない場合には（ステップＳ８８６：Ｎｏ）、ステップＳ８８３からの処理に移行する。メモリコントローラ２００は、ホストコンピュータ１００から書込みデータを取得する（ステップＳ８８３）。次に、メモリコントローラ２００は、ステップＳ８８３において取得した書込みデータを比較データとして検証リクエストを生成し、発行する（ステップＳ８８４）。
【０１１５】
次に、メモリコントローラ２００は、メモリ３００から返されたリクエストの結果を当該ページのページアドレスとともに再書込アドレス情報保持部２９６に保持させる（ステップＳ８８９）。これにより、リクエストの結果が「不一致」であるページのページアドレスは後続の再書込み処理において、再書込みが必要なページのページアドレスとして認識される。なお、第４の実施の形態においてもオフセットレジスタの値による相対アドレスによりメモリ３００のページアドレスを指定している。そのため、この再書込みが必要なページのページアドレスは、オフセットレジスタの値を用いた相対アドレスにより示されることとなる。次に、メモリコントローラ２００は、オフセットレジスタを更新し（ステップＳ８８８）、ステップＳ８８６の処理に戻る。なお、再書込アドレス情報保持部２９６は、例えば、オフセットレジスタの値に対応するアドレス情報と当該アドレスにおける検証結果とを保持するＲＡＭにより構成することができる。
【０１１６】
［再書込み処理の処理手順（メモリコントローラ側の処理）］
図２３は、本技術の第４の実施の形態における再書込み処理の処理手順（メモリコントローラ）の一例を示す図である。本処理は、図２１において説明したステップＳ８９０に対応する処理である。まず、メモリコントローラ２００は、オフセットレジスタを初期化する（ステップＳ８９２）。次に、メモリコントローラ２００は、全てのデータの再書込みが終了したか否かを調べる（ステップＳ８９６）。その結果、全てのデータの再書込みが終了していた場合には（ステップＳ８９６：Ｙｅｓ）、再書込み処理を終了する。
【０１１７】
一方、全てのデータの再書込みが終了していない場合には（ステップＳ８９６：Ｎｏ）、ステップＳ８９１からの処理に移行する。メモリコントローラ２００は、再書込アドレス情報保持部２９６からオフセットレジスタの値に対応するアドレスにおける検証結果を取得する（ステップＳ８９１）。この結果が「不一致」であった場合には（ステップＳ８９５：Ｎｏ）、メモリコントローラ２００は、ホストコンピュータ１００から書込みデータを取得する（ステップＳ８９３）。次に、メモリコントローラ２００は、ステップＳ８９３において取得した書込みデータを含む再書込みのリクエストを生成し、発行する（ステップＳ８９４）。メモリ３００における再書込み動作が完了して書込みレスポンスがメモリ３００から出力された後、メモリコントローラ２００は、再書込みカウンタにレスポンスの書込みページ数を加算し（ステップＳ８９７）、ステップＳ８９８の処理に移行する。
【０１１８】
一方、結果が「一致」であった場合（ステップＳ８９５：Ｙｅｓ）、再書込みは不要であり、メモリコントローラ２００は、ステップＳ８９３、ステップＳ８９４およびステップＳ８９７の処理をスキップしてステップＳ８９８の処理に移行する。ステップＳ８９８において、メモリコントローラ２００は、オフセットレジスタを更新し（ステップＳ８９８）、ステップＳ８９６の処理に戻る。なお、メモリコントローラ２００は、ステップＳ８９４の処理を行った際に書込みレスポンスに基づく書込み情報を判断部２８０に出力する。
【０１１９】
［検証処理の処理手順（メモリ側の処理）］
図２４は、本技術の第４の実施の形態における検証処理の処理手順（メモリ）の一例を示す図である。メモリ３００は、メモリコントローラ２００から検証のリクエストが発行されると、検証処理を開始する。なお、リクエストに伴う比較データは、作業メモリ３２０に記憶される。まず、メモリ３００は、メモリセルからデータの読出しを行う（ステップＳ７３２）。読み出されたデータは、バッファ３６０に保持される。次に、メモリ３００は、データの比較を行う（ステップＳ７３８）。具体的には、メモリ３００は、作業メモリ３２０に記憶された比較データおよびバッファ３６０に保持されたデータの比較を行う。その結果をメモリコントローラ２００に対して出力し（ステップＳ７３９）、検証処理を終了する。
【０１２０】
［再書込み処理の処理手順（メモリ側の処理）］
図２５は、本技術の第４の実施の形態における再書込み処理の処理手順（メモリ）の一例を示す図である。メモリ３００は、メモリコントローラ２００から再書込みのリクエストが発行されると、再書込み処理を開始する。まず、メモリコントローラ２００は、メモリセルからデータの読出しを行う（ステップＳ７４２）。図１３において説明した再書込み処理とは異なり、バッファ３６０には、データが保持されていないため、この読出し処理が必要となる。次に、メモリ３００は、リセット操作用データの算出を行い（ステップＳ７４３）、リセット操作を行う（ステップＳ７４４）。
【０１２１】
次に、メモリ３００は、事前消去の有無を調べる（ステップＳ７４１）。事前消去がされていない場合は、前述した（ｄ）再書込み操作（事前消去なし）の場合に該当する。メモリ３００は、セット操作用データを算出し（ステップＳ７４５）、セット操作を行い（ステップＳ７４６）、ステップＳ７４９の処理に移行する。一方、事前消去がされている場合は、前述した（ｃ）再書込み操作（事前消去あり）の場合に該当する。メモリ３００は、ステップＳ７４５およびステップＳ７４６の処理をスキップしてステップＳ７４９の処理に移行する。ステップＳ７４９において、メモリ３００は、書込み処理の結果として、書込みを行ったページ数をメモリコントローラ２００に対して出力し（ステップＳ７４９）、再書込み処理を終了する。
【０１２２】
このように、本技術の第４の実施の形態では、通常書込みだけでなく検証および再書込みにおいても連続した処理を行うため、検証と再書込みを交互に行う場合と比較して、リクエストの生成を容易にすることができる。これは、検証および再書込みのリクエストに複数ページのデータを付加する構成とした場合に顕著である。
【０１２３】
［第１の変形例］
上述の第４の実施の形態では、事前消去がある場合の再書込み処理においてリセット操作のみを行っていたが、事前消去がある場合であってもリセット操作およびセット操作により再書込みを行ってもよい。前述の第１の実施の形態の第５の変形例と同様に、ライトディスターブ現象が発生した場合であっても、メモリセルに書込まれたデータの反転を防いで、データの書込みの信頼性を向上させることができるためである。書込みおよび再書込みの操作は、前述の第１の実施の形態の第５の変形例において説明した（ａ'）〜（ｄ'）と同様であるため説明を省略する。
【０１２４】
［再書込み処理の処理手順（メモリ側の処理）］
図２６は、本技術の第４の実施の形態の第１の変形例における再書込み処理の処理手順（メモリ）の一例を示す図である。まず、メモリ３００は、メモリセルからページデータの読出しを行う（ステップＳ６９２）。次に、メモリ３００は、リセット操作用データを算出し（ステップＳ６９３）、リセット操作を行う（ステップＳ６９４）。次に、メモリ３００は、セット操作用データを算出し（ステップＳ６９５）、セット操作を行う（ステップＳ６９６）。次に、メモリ３００は、再書込み処理の結果として、書込みを行ったページ数をメモリコントローラ２００に対して出力し（ステップＳ６９９）、再書込み処理を終了する。
【０１２５】
［第２の変形例］
上述の第４の実施の形態では、図２２において説明した検証処理のステップＳ８８９において、全ての検証リクエストの結果を再書込みアドレス情報として再書込アドレス情報保持部２９６に保持させていた。しかし、検証リクエストの結果が不一致となったページのページアドレスをアドレス情報として保持させてもよい。後続の再書込み処理において、再書込みが必要なページのページアドレスが特定されて、処理が簡略化されるためである。
【０１２６】
［検証処理の処理手順］
図２７は、本技術の第４の実施の形態の第２の変形例における検証処理の処理手順（メモリコントローラ）の一例を示す図である。本処理は、図２１において説明したステップＳ８８０に対応する処理である。ステップＳ８８５において、メモリコントローラ２００は、メモリ３００から返されたリクエストの結果を調べる。この結果が一致でなかった場合（ステップＳ８８５：Ｎｏ）、メモリコントローラ２００は、検証リクエストに係るページのページアドレスを再書込アドレス情報保持部２９６に保持させる（ステップＳ８８９）。その後、ステップＳ８８８の処理に移行する。一方、メモリ３００から返されたリクエストの結果が一致であった場合（ステップＳ８８５：Ｙｅｓ）、メモリコントローラ２００は、ステップＳ８８９の処理をスキップしてステップＳ８８８の処理に移行する。これにより、検証リクエストの結果が不一致となったページのページアドレスのみを検証結果として再書込みアドレス情報に保持させることができる。ステップＳ８８８において、メモリコントローラ２００は、オフセットレジスタを更新し（ステップＳ８８８）、ステップＳ８８６の処理に戻る。これ以外は、図２２において説明した処理手順と同様であるため説明を省略する。
【０１２７】
［再書込み処理の処理手順（メモリコントローラ側の処理）］
図２８は、本技術の第４の実施の形態の第２の変形例における再書込み処理の処理手順（メモリコントローラ）の一例を示す図である。本処理は、図２１において説明したステップＳ８９０に対応する処理である。また、本処理は、図２３において説明した処理手順のうちステップＳ８９２、ステップＳ８９５およびステップＳ８９８の処理を削除したものである。これにより、メモリコントローラ２００は、再書込みが必要なページを特定して再書込みを行う。これ以外は、図２１において説明した処理手順と同様であるため、説明を省略する。
【０１２８】
［第３の変形例］
上述の第４の実施の形態では、図２２において説明した検証処理において、書込み処理の対象となる全てのページについて検証を行っていた。しかし、第３の実施の形態において説明した検証アドレス情報保持部２９５を使用して、検証が必要なページのみ検証を行ってもよい。検証の処理が簡略化されるためである。
【０１２９】
［機能構成］
図２９は、本技術の第４の実施の形態の第３の変形例における機能構成例を示す図である。同図のメモリコントローラ２００は、検証アドレス情報保持部２９５を備える。これ以外の構成は図２０において説明した機能構成例と同様であるため説明を省略する。
【０１３０】
［書込み処理の処理手順（メモリコントローラ側の処理）］
図３０は、本技術の第４の実施の形態の第３の変形例における書込み処理の処理手順（メモリコントローラ）の一例を示す図である。本処理は、図２１において説明した処理手順に対して、ステップＳ８０１の処理をステップＳ８１０とステップＳ８２０との間に追加したものである。これ以外は図２１において説明した処理手順と同様であるため説明を省略する。
【０１３１】
［検証処理の処理手順］
図３１は、本技術の第４の実施の形態の第３の変形例における検証処理の処理手順（メモリコントローラ）の一例を示す図である。本処理は、図２１において説明したステップＳ８８０に対応する処理である。ステップＳ８８２において、メモリコントローラ２００は、再書込アドレス情報保持部２９６の初期化のみを行う。ステップＳ８８１において、メモリコントローラ２００は、検証アドレス情報保持部２９５から検証アドレス情報を取得する（ステップＳ８８１）。ステップＳ８８５において、メモリコントローラ２００は、メモリ３００から返されたリクエストの結果を調べる。この結果が一致でなかった場合（ステップＳ８８５：Ｎｏ）、メモリコントローラ２００は、検証リクエストに係るページのページアドレスを再書込アドレス情報保持部２９６に保持させる（ステップＳ８８９）。その後、ステップＳ８８６の処理に移行する。一方、メモリ３００から返されたリクエストの結果が一致であった場合（ステップＳ８８５：Ｙｅｓ）、メモリコントローラ２００は、ステップＳ８８９の処理をスキップしてステップＳ８８６の処理に移行する。これにより、検証が必要なページを特定して検証を行い、検証リクエストの結果が不一致となったページのページアドレスのみを検証結果として再書込アドレス情報保持部２９６に保持させることができる。なお、ステップＳ８８８の処理は不要であるため、削除している。これ以外は、図２２において説明した処理手順と同様であるため説明を省略する。
【０１３２】
［再書込み処理の処理手順（メモリコントローラ側の処理）］
図３２は、本技術の第４の実施の形態の第３の変形例における再書込み処理の処理手順（メモリコントローラ）の一例を示す図である。本処理は、図２１において説明したステップＳ８９０に対応する処理である。また、本処理は、図２３において説明した処理手順のうちステップＳ８９２、ステップＳ８９５およびステップＳ８９８の処理を削除し、ステップＳ８９７の後にステップＳ８９９の処理を追加したものである。これにより、メモリコントローラ２００は、再書込みが必要なページを特定して再書込みを行うとともに、再書込みを行ったページのページアドレスを検証アドレス情報保持部２９５に保持させる。これ以外は、図２１において説明した処理手順と同様であるため、説明を省略する。
【０１３３】
［第４の変形例］
上述の第４の実施の形態では、メモリコントローラ２００が、書込み制御部２９１と、判断部２８０と、検証部２９３と、再書込みアドレス情報保持部２９６とを備えていたが、メモリ３００がこれらを備えてもよい。メモリコントローラ２００の処理を簡素化できるからである。この場合、メモリコントローラ２００は、メモリ３００に対して、書込みリクエストのみを発行する。そして、メモリ３００が、このリクエストに基づいて書込み、判断および検証の処理を行う。
【０１３４】
＜５．第５の実施の形態＞
上述の第１の実施の形態の情報処理システムは、データバックアップ機能を備えていなかった。これに対し、本技術の第５の実施の形態の情報処理システムでは、データバックアップ機能を備え、電源異常が生じた際に、データのバックアップを行う。
【０１３５】
［情報処理システムの構成］
図３３は、本技術の第５の実施の形態における情報処理システムの構成例を示す図である。同図の情報処理システムは、データバックアップ機能を備えた情報処理システムの例である。同図の情報処理システムは、ホストコンピュータ１００と、メモリコントローラ２００と、メモリ３００と、信号線１０９および２０８と、電源電圧監視部１０７とを備える。電源電圧監視部１０７は、情報システムに供給される電源の電圧を監視するものである。この電源電圧監視部１０７は、停電等の電源異常により電源の電圧が低下した場合に、メモリコントローラ２００に対して電源電圧低下の情報を出力する。なお、同図の情報処理システムは、電池またはスーパーキャパシタ等のバックアップ用電源を備えている（不図示）。このバックアップ用電源から給電することにより、電源異常となった場合であっても、情報処理システムは、短時間ながら動作可能である。この間に、メモリコントローラ２００は、ホストコンピュータに保持されているデータをメモリ３００に退避させる。
【０１３６】
同図のホストコンピュータ１００は、メモリコントローラインターフェース１３０の代わりに切替部１５０を備える点で、図１において説明したホストコンピュータ１００と異なる。切替部１５０は、ＤＲＡＭ１２０の接続先をプロセッサ１１０またはメモリコントローラ２００に切り替えるものである。この切替部１５０は、通常時には、バス装置１０１を介してＤＲＡＭ１２０をプロセッサ１１０に接続している。ＤＲＡＭ１２０には、プロセッサ１１０の動作に必要なデータが記憶される。電源異常が生じた際には、電源電圧監視部１０７から電源電圧低下の情報を得たメモリコントローラ２００が制御信号を切替部１５０に出力する。これにより、切替部１５０は、ＤＲＡＭ１２０をメモリコントローラ２００に接続する。これ以外の情報処理システムの構成は図１において説明した情報処理システムと同様であるため説明を省略する。
【０１３７】
［メモリコントローラの構成］
図３４は、本技術の第５の実施の形態におけるメモリコントローラの構成例を示す図である。同図のメモリコントローラ２００は、ホストインターフェース２３０の代わりにＤＲＡＭインターフェース２４０を備え、また、入力ポート２９０を備える点で図２において説明したメモリコントローラ２００と異なる。ＤＲＡＭインターフェース２４０は、ホストコンピュータ１００のＤＲＡＭ１２０とのやり取りを行うインターフェースである。入力ポート２９０は、電源電圧監視部１０７の出力が接続される入力ポートである。この入力ポート２９０には、電源電圧監視部１０７による電源電圧低下の情報が入力される。これ以外のメモリコントローラ２００の構成は、図２において説明したメモリコントローラ２００と同様であるため説明を省略する。また、メモリ３００の構成も、図３において説明したメモリ３００と同様であるため説明を省略する。
【０１３８】
［機能構成］
図３５は、本技術の第５の実施の形態における機能構成例を示す図である。同図は、データの書込みを行う際の機能構成を想定したものである。同図のメモリコントローラ２００は、ＤＲＡＭ制御部２９７およびアドレス変換情報保持部２９８を備える点で図１７において説明したメモリコントローラ２００と異なる。
【０１３９】
ＤＲＡＭ制御部２９７は、切替部１５０を制御するものである。また、ＤＲＡＭ制御部２９７は、切替部１５０を介したＤＲＡＭ１２０の制御も行う。このＤＲＡＭ制御部２９７は、電源異常の際、制御信号を切替部１５０に出力して、ＤＲＡＭ１２０の接続先をプロセッサ１１０からメモリコントローラ２００に切替させる。その後、ＤＲＡＭ制御部２９７は、切替部１５０を介して制御信号をＤＲＡＭ１２０に出力することにより、ＤＲＡＭ１２０にアクセスして、ＤＲＡＭ１２０に記憶されているデータを出力させる。また、ＤＲＡＭ制御部２９７は、ＤＲＡＭ１２０のメモリアドレスに対するアドレス変換の情報であるアドレス変換情報の生成も行う。このアドレス変換情報については、後述する。書込制御部２９２は、ＤＲＡＭ１２０が出力したデータをメモリ３００に対する書込みデータとして取り込む。アドレス変換情報保持部２９８は、アドレス変換情報を保持するものである。
【０１４０】
これ以外のメモリコントローラ２００およびメモリ３００の構成は、図１７において説明したメモリコントローラ２００およびメモリ３００と同様であるため説明を省略する。
【０１４１】
［情報処理システムにおける書込み処理］
電源電圧監視部１０７から電源電圧低下の情報が入力されると、ＤＲＡＭ制御部２９７は、ＤＲＡＭ１２０にアクセスしてＤＲＡＭ１２０に記憶されている全データを出力させる。書込制御部２９２は、リクエストを生成してこのデータを書込みデータとしてメモリ３００に出力する。その後、書込みデータは、メモリ３００のメモリセルアレイ３５０に記憶される。そのため、メモリ３００の記憶容量は、ＤＲＡＭ１２０の記憶容量以上にする必要がある。データの書込み後に、検証書込み部２９９による検証およびこの結果に基づく再書込みが行われる。この際、再書込みが必要なＤＲＡＭ１２０のデータに対してＤＲＡＭ１２０内においてデータの移動を行う。
【０１４２】
［データの移動］
図３６は、ＤＲＡＭにおけるデータの移動を説明する図である。同図は、１０個の記憶領域を有するＤＲＡＭ１２０の例であり、紙面に向かって左側がデータ移動前の状態を右側がデータ移動後の状態をそれぞれ表している。同図におけるａのＤＲＡＭ１２０は、２個のＤＲＡＭにより構成され、それぞれのＤＲＡＭは５個の記憶領域を有し、上位アドレスおよび下位アドレスに配置されている。これらはそれぞれ第１の領域および第２の領域として表されている。
【０１４３】
データ移動前のＤＲＡＭ１２０には、アドレス順にデータ＃１乃至データ＃１０が記憶されている。メモリコントローラ２００によるメモリ３００へのデータの書込みが行われ、検証の結果、データ＃２、データ＃５およびデータ＃９について再書込みが必要になった場合を想定する。再書込みが行われる前に、ＤＲＡＭ制御部２９７は、上記データを第１の領域に該当するＤＲＡＭに移動する。その後、第２の領域に該当するＤＲＡＭへの電源の供給が停止される。これにより、ＤＲＡＭ１２０の消費電力を低減させることができ、バックアップ用電源の電池またはスーパーキャパシタを小容量のものにすることができる。その後、移動されたデータを対象として再書込みが行われる。
【０１４４】
同図におけるｂは、ＤＲＡＭ１２０がデータ方向に分割されている例を表している。すなわち、上位ビットのデータは第１の領域に割り当てられ、下位ビットのデータは第２の領域に割り当てられている。上述の例と同様にデータ＃２、データ＃５およびデータ＃９について再書込みが必要になったと想定する。同図におけるｂでは、第２の領域に記憶されたデータ＃２Ｂ、データ＃５Ｂおよびデータ＃９Ｂが第１の領域に移動される。その後、第２の領域に該当するＤＲＡＭへの電源の供給が停止される。
【０１４５】
このように、本技術の第５の実施の形態では、複数のＤＲＡＭにより構成されたＤＲＡＭ１２０のデータを移動させることにより、一部のＤＲＡＭにデータが集約される。そのため、データの移動前に、移動するデータ量が集約可能なデータ量であるか否かを判断する必要がある。この判断方法として、例えば、ＤＲＡＭ１２０を構成する複数のＤＲＡＭの容量を閾値とし、次回の検証を行うデータ量がこの閾値以下か否かによって判断する方法を採ることができる。このデータ量の算出には、検証アドレス情報保持部２９５に保持された検証アドレス情報を利用することができる。すなわち、検証アドレス情報に保持されたページアドレスの個数にページのデータ量を乗算したものを次回の検証を行うデータ量とすることができる。
【０１４６】
なお、本技術の第５の実施の形態におけるメモリコントローラ２００の書込み処理の方式としては、この検証アドレス情報保持部を備える方式（本技術の第３の実施の形態の方式）だけでなく、上述した他の方式を利用することもできる。すなわち、書込み条件設定部を備える方式（本技術の第２の実施の形態の方式）および再書込アドレス情報保持部を備える方式（本技術の第４の実施の形態の方式）を利用することもできる。また、検証アドレス情報保持部等を使用しない第１の実施の形態で説明した方式を使用することもできる。
【０１４７】
なお、データの移動に伴いデータのアドレスを変換する必要が生じる。上述のアドレス変換情報は、このデータ移動に伴うアドレス変換の情報であり、ＤＲＡＭ制御部２９７により生成され、アドレス変換情報保持部２９８に保持される。以降のＤＲＡＭ１２０のアクセスの際に、ＤＲＡＭ制御部２９７は、アドレス変換情報保持部２９８に保持されたアドレス変換情報に基づいてアクセスを行う。
【０１４８】
［書込み処理の処理手順（メモリコントローラ側の処理）］
図３７は、本技術の第５の実施の形態における書込み処理の処理手順（メモリコントローラ）の一例を示す図である。電源電圧監視部１０７から電源電圧低下の情報が入力されると、メモリコントローラ２００は、制御信号を切替部１５０に出力する。これにより、切替部１５０は、ＤＲＡＭ１２０をメモリコントローラ２００に接続する。その後、メモリコントローラ２００は、書込み処理を開始する。まず、メモリコントローラ２００は、ＤＲＡＭ１２０の全ページデータに対して通常書込みを行う（ステップＳ７６０）。次に、メモリコントローラ２００は、検証アドレス情報の保持を行う（ステップＳ７５１）。本技術の第５の実施の形態では、書込み対象となった全てのページのページアドレスが検証アドレス情報として、検証アドレス情報保持部２９５に保持される。次に、メモリコントローラ２００は、既にメモリ３００に対する再書込みが行われているか否かを調べ（ステップＳ７５２）、再書込みが行われていた場合には（ステップＳ７５２：Ｙｅｓ）、データの移動を行う（ステップＳ７９０）。
【０１４９】
一方、再書込みが行われていない場合には（ステップＳ７５２：Ｎｏ）、ステップＳ７９０の処理をスキップする。次に、メモリコントローラ２００は、安定状態判断処理を行う（ステップＳ７７０）。次に、メモリコントローラ２００は、再書込みカウンタを初期化し（ステップＳ７５９）、検証書込みを行う（ステップＳ７８０）。その後、再書込みカウンタの値が「０」の場合は（ステップＳ７５４：Ｙｅｓ）、メモリコントローラ２００は、書込み処理を終了する。再書込みカウンタの値が「０」でない場合は（ステップＳ７５４：Ｎｏ）、再書込みカウンタの値が「０」となるまで、再書込み処理回数が上限に達しない範囲で（ステップＳ７５５：Ｎｏ）、再書込み処理（ステップＳ７５２からの処理）をループ状に実行する。
【０１５０】
しかし、ステップＳ７５５において、再書込み処理回数が上限に達している場合には（ステップＳ７５５：Ｙｅｓ）、メモリコントローラ２００は、再書込み処理を行わず、エラー処理（ステップＳ７５６）を行う。このエラー処理として、メモリコントローラ２００は、例えば、ホストコンピュータ１００に対してデータのバックアップに失敗したことを通知する。その後、書込み処理を終了する。なお、通常書込み（ステップＳ７６０）の処理は、図７において説明した通常書込み（ステップＳ９１０）と同様であるため説明を省略する。安定状態判断（ステップＳ７７０）の処理は、図７において説明した安定状態判断（ステップＳ９２０）と同様であるため説明を省略する。検証書込み（ステップＳ７８０）の処理は、図７において説明した検証書込み（ステップＳ９３０）と同様であるため説明を省略する。
【０１５１】
［データ移動処理の処理手順（メモリコントローラ側の処理）］
図３８は、本技術の第５の実施の形態におけるデータ移動処理の処理手順（メモリコントローラ）の一例を示す図である。本処理は、図３７において説明したステップＳ７９０に対応する処理である。まず、メモリコントローラ２００は、データが移動済みであるか否かを調べ（ステップＳ７９１）、移動済みである場合は（ステップＳ７９１：Ｙｅｓ）、以降の処理をスキップしてデータ移動処理を終了する。一方、移動済みでない場合は（ステップＳ７９１：Ｎｏ）、次回の検証を行うデータ量の算出を行う（ステップＳ７９２）。この算出したデータ量が閾値以下でない場合（ステップＳ７９３：Ｎｏ）、メモリコントローラ２００は、以降の処理をスキップしてデータ移動処理を終了する。
【０１５２】
一方、算出したデータ量が閾値以下の場合（ステップＳ７９３：Ｙｅｓ）、メモリコントローラ２００は、ＤＲＡＭ１２０のデータを移動し（ステップＳ７９４）、データ移動済みのＤＲＡＭの電源をオフさせる（ステップＳ７９５）。最後に、メモリコントローラ２００は、アドレス変換情報を生成し（ステップＳ７９６）、データ移動処理を終了する。
【０１５３】
なお、図３７において説明したように、メモリコントローラ２００は、再書込みが行われているか否かを調べ（ステップＳ７５２）、データの移動を行っている（ステップＳ７９０）。しかし、これらの処理を省略したデータバックアップ機能を備える情報処理システムを構成することも可能である。
【０１５４】
このように、データバックアップ機能を備えた情報処理システムにおいても、メモリセルの状態が安定しているか否かの判断を行い、状態が安定した後に、データの読出しを行って検証を行うことにより、正確な書込みデータの検証を可能としている。また、ＤＲＡＭ１２０内部でデータの移動を行い、データが集約されたＤＲＡＭにのみ電源を供給することにより、バックアップ用電源を小型化することができる。さらに、データの移動の際、検証アドレス情報を使用することにより、データ移動処理に係るデータ量の算出を簡略化することができる。
【０１５５】
このように、本技術の実施の形態によれば、データの書込み後に、メモリセルの状態が安定しているか否かの判断を行い、メモリセルの状態の安定化を待って、データの読出しを行って検証を行うことにより、正確な書込みデータの検証を可能としている。これにより、不必要な再書込みを抑制して、不揮発メモリの書込み信頼性を向上させることができる。
【０１５６】
なお、上述の実施の形態は本技術を具現化するための一例を示したものであり、実施の形態における事項と、特許請求の範囲における発明特定事項とはそれぞれ対応関係を有する。同様に、特許請求の範囲における発明特定事項と、これと同一名称を付した本技術の実施の形態における事項とはそれぞれ対応関係を有する。ただし、本技術は実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において実施の形態に種々の変形を施すことにより具現化することができる。
【０１５７】
また、上述の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。この記録媒体として、例えば、ＣＤ（Compact Disc）、ＭＤ（MiniDisc）、ＤＶＤ（Digital Versatile Disc）、メモリカード、ブルーレイディスク（Blu-ray（登録商標）Disc）等を用いることができる。
【０１５８】
なお、本明細書に記載された効果はあくまで例示であって、限定されるものではなく、また、他の効果があってもよい。
【０１５９】
なお、本技術は以下のような構成もとることができる。
（１）データの書込み後に状態が不安定な期間が存在するメモリセルからなる不揮発メモリにおいてデータの書込み後の前記メモリセルの状態が安定しているか否かの判断を行う判断部と、
前記判断の結果に基づいて前記データが書き込まれた前記メモリセルから読み出した読出しデータと前記書込みに係る書込みデータとを比較して検証する検証部と、
前記データの書込みと前記検証の結果に基づく前記書込みデータの再書込みとを行う書込み制御部と
を具備するメモリコントローラ。
（２）前記不揮発メモリは、前記データの書込みの直後に読出しを行うと前記書き込まれたデータが破壊される前記（１）に記載のメモリコントローラ。
（３）前記不揮発メモリは、前記データの書込みの直後には書込まれたデータが正常に読み出されない前記（１）に記載のメモリコントローラ。
（４）前記判断部は、前記データの書込み後の所定の安定化時間の経過に基づいて前記判断を行う前記（１）から（３）のいずれかに記載のメモリコントローラ。
（５）前記不揮発メモリは、ページアドレスによりページ単位でアクセスされ、
前記書込み制御部は、複数ページからなるデータの書込みを連続して行い、
前記検証部は、前記データの書込みが行われた順にページ単位で前記検証を行い、
前記判断部は、前記検証の際には前記メモリセルの状態が安定していると判断する
前記（１）から（３）のいずれかに記載のメモリコントローラ。
（６）前記再書込みを行う前記不揮発メモリのページアドレスの情報である再書込みアドレス情報を保持する再書込みアドレス情報保持部をさらに具備し、
前記検証部は、前記複数ページからなるデータの書込み後に前記検証を連続して行って当該検証の結果に基づく前記再書込みアドレス情報を前記再書込みアドレス情報保持部に保持させ、
前記書込み制御部は、前記保持された前記再書込みアドレス情報に基づいて前記再書込みを行う
前記（５）に記載のメモリコントローラ。
（７）前記検証を行う前記不揮発メモリのページアドレスの情報である検証アドレス情報を保持する検証アドレス情報保持部をさらに具備し、
前記書込み制御部は、前記書込みおよび前記再書込みを行った際に前記書込みおよび前記再書込みを行ったページアドレスの情報を前記検証アドレス情報として前記検証アドレス情報保持部に保持させ、
前記検証部は、前記保持された前記検証アドレス情報に基づいて前記検証を行う
前記（５）に記載のメモリコントローラ。
（８）前記不揮発メモリは、ページアドレスによりページ単位でアクセスされ、
前記書込み制御部は、複数ページからなるデータの書込みを連続して行い、
前記検証部は、前記データの書込みが行われた順にページ単位で前記検証を行い、
前記判断部は、前記書込みデータのページ数が前記不揮発メモリにおけるデータの書込み後の所定の安定化時間に相当する書込み時間となるページ数である状態安定化ページ数以上の場合には前記検証の際に前記メモリセルの状態が安定していると判断し、前記書込みデータのページ数が前記状態安定化ページ数未満の場合には前記所定の安定化時間の経過を待って前記メモリセルの状態が安定していると判断する
前記（１）から（３）のいずれかに記載のメモリコントローラ。
（９）データの書込み後に状態が不安定な期間が存在するメモリセルからなる不揮発メモリにおいてデータの書込みを行う書込み制御部と、
前記データの書込み後の前記メモリセルの状態が安定しているか否かの判断を行う判断部と、
前記判断の結果に基づいて前記データが書き込まれた前記メモリセルから読み出した読出しデータと前記書込みに係る書込みデータとを比較する検証と前記検証の結果に基づく前記書込みデータの再書込みとを行う検証書込み部と
を具備するメモリコントローラ。
（１０）データの書込み後に状態が不安定な期間が存在するメモリセルからなる不揮発メモリと、
前記不揮発メモリにおいてデータの書込み後の前記メモリセルの状態が安定しているか否かの判断を行う判断部と、
前記判断の結果に基づいて前記データが書き込まれた前記メモリセルから読み出した読出しデータと前記書込みに係る書込みデータとを比較して検証する検証部と、
前記データの書込みと前記検証の結果に基づく前記書込みデータの再書込みとを行う書込み制御部と
を具備する記憶装置。
（１１）データの書込み後に状態が不安定な期間が存在するメモリセルからなる不揮発メモリと、
前記不揮発メモリを制御するメモリコントローラと、
前記メモリコントローラを介して前記不揮発メモリにアクセスするホストコンピュータと
を具備し、
前記メモリコントローラは、
前記不揮発メモリにおいてデータの書込み後の前記メモリセルの状態が安定しているか否かの判断を行う判断部と、
前記判断の結果に基づいて前記データが書き込まれた前記メモリセルから読み出した読出しデータと前記書込みに係る書込みデータとを比較して検証する検証部と、
前記データの書込みと前記比較の結果に基づく前記書込みデータの再書込みとを行う書込み制御部とを備える
情報処理システム。
（１２）データの書込み後に状態が不安定な期間が存在するメモリセルからなる不揮発メモリにおいてデータの書込み後の前記メモリセルの状態が安定しているか否かの判断を行う判断手順と、
前記判断の結果に基づいて前記データが書き込まれた前記メモリセルから読み出した読出しデータと前記書込みに係る書込みデータとを比較して検証する検証手順と、
前記データの書込みと前記比較の結果に基づく前記書込みデータの再書込みとを行う書込み制御手順と
を具備する不揮発メモリの制御方法。
【符号の説明】
【０１６０】
１００  ホストコンピュータ
１０１、２０１、３０１  バス装置
１０７  電源電圧監視部
１０９、２０８  信号線
１１０  プロセッサ
１２０  ＤＲＡＭ
１３０、３３０  メモリコントローラインターフェース
１５０  切替部
２００  メモリコントローラ
２１０  プロセッサ
２２０  ＲＡＭ
２３０  ホストインターフェース
２４０  ＤＲＡＭインターフェース
２５０  ＥＣＣ処理部
２６０  ＲＯＭ
２７０  メモリインターフェース
２８０  判断部
２８１  タイマ部
２８２  書込みページ数判断部
２８３  メモリセル安定状態判断部
２９０  入力ポート
２９１、２９２  書込制御部
２９３  検証部
２９４  書込み条件設定部
２９５  検証アドレス情報保持部
２９６  再書込アドレス情報保持部
２９７  ＤＲＡＭ制御部
２９８  アドレス変換情報保持部
２９９  検証書込み部
３００  メモリ
３１０  制御部
３２０  作業メモリ
３４０  アドレスデコーダ
３５０  メモリセルアレイ
３６０  バッファ
【図１】
0006481691.tif 000002
【図２】
0006481691.tif 000003
【図３】
0006481691.tif 000004
【図４】
0006481691.tif 000005
【図５】
0006481691.tif 000006
【図６】
0006481691.tif 000007
【図７】
0006481691.tif 000008
【図８】
0006481691.tif 000009
【図９】
0006481691.tif 000010
【図１０】
0006481691.tif 000011
【図１１】
0006481691.tif 000012
【図１２】
0006481691.tif 000013
【図１３】
0006481691.tif 000014
【図１４】
0006481691.tif 000015
【図１５】
0006481691.tif 000016
【図１６】
0006481691.tif 000017
【図１７】
0006481691.tif 000018
【図１８】
0006481691.tif 000019
【図１９】
0006481691.tif 000020
【図２０】
0006481691.tif 000021
【図２１】
0006481691.tif 000022
【図２２】
0006481691.tif 000023
【図２３】
0006481691.tif 000024
【図２４】
0006481691.tif 000025
【図２５】
0006481691.tif 000026
【図２６】
0006481691.tif 000027
【図２７】
0006481691.tif 000028
【図２８】
0006481691.tif 000029
【図２９】
0006481691.tif 000030
【図３０】
0006481691.tif 000031
【図３１】
0006481691.tif 000032
【図３２】
0006481691.tif 000033
【図３３】
0006481691.tif 000034
【図３４】
0006481691.tif 000035
【図３５】
0006481691.tif 000036
【図３６】
0006481691.tif 000037
【図３７】
0006481691.tif 000038
【図３８】
0006481691.tif 000039