(57)【特許請求の範囲】
【請求項１】
ライト処理時に２値のうちの一方の値への書換えと他方の値への書換えとを順に実行するメモリセルに対する入力データの一部において前記２値のうちの特定の値のビット数が基準値を超えるか否かを判定して当該判定の結果を示す判定データを生成する判定部と、
前記ビット数が前記基準値を超えると判定された場合には前記一部を反転した前記入力データをライトデータとして前記判定データとともに前記メモリセルへ出力するライト側出力部と
を具備し、
前記入力データは２つの部分からなり、
前記判定部は、前記２つの部分のうちの一方の部分において前記ビット数が前記基準値を超えるか否かを判定し、
前記基準値は、前記２つの部分のうちの他方の部分における前記特定の値のビット数であり、
前記ライト側出力部は、前記ビット数が前記基準値を超えると判定された場合には前記一方の部分を反転した前記入力データを前記ライトデータとして出力し、前記ビット数が前記基準値を超えないと判定された場合には前記他方の部分を反転した前記入力データを前記ライトデータとして出力する
記憶制御装置。
【請求項２】
データと当該データに対応する前記判定データとを前記メモリセルから取得するデータ取得部と、
前記ビット数が前記基準値を超えることを前記判定データが示す場合には前記取得されたデータにおいて前記一部を反転してリードデータとして出力するリード側出力部と
をさらに具備する請求項１記載の記憶制御装置。
【請求項３】
前記リードデータと当該リードデータに対応する前記判定データとを保持するバッファをさらに具備し、
前記ライト側出力部は、前記リードデータおよび前記判定データを前記バッファから読み出して前記ビット数が前記基準値を超えることを前記判定データが示す場合には前記一部を反転した前記リードデータを前記ライトデータとして出力する
請求項２記載の記憶制御装置。
【請求項４】
前記リードデータを保持するバッファをさらに具備し、
前記判定部は、前記リードデータを前記バッファから読み出して前記リードデータの一部において前記特定の値のビット数が前記基準値を超えるか否かをさらに判定して前記判定データを生成し、
前記ライト側出力部は、前記ビット数が前記基準値を超えることを前記判定データが示す場合には前記一部を反転した前記リードデータを前記ライトデータとしてさらに出力する
請求項２記載の記憶制御装置。
【請求項５】
前記判定部は、前記一部において前記特定の値のビット数を計数して当該計数値を前記基準値と比較することにより前記特定の値のビット数が前記基準値より多いか否かを判定する
請求項１記載の記憶制御装置。
【請求項６】
ライト処理時に２値のうちの一方の値への書換えと他方の値への書換えとを順に実行するメモリセルと、
前記メモリセルに対する入力データの一部において前記２値のうちの特定の値のビット数が基準値を超えるか否かを判定して当該判定の結果を示す判定データを生成する判定部と、
前記ビット数が前記基準値を超えると判定された場合には前記一部を反転した前記入力データをライトデータとして前記判定データとともに前記メモリセルへ出力するライト側出力部と
を具備し、
前記入力データは２つの部分からなり、
前記判定部は、前記２つの部分のうちの一方の部分において前記ビット数が前記基準値を超えるか否かを判定し、
前記基準値は、前記２つの部分のうちの他方の部分における前記特定の値のビット数であり、
前記ライト側出力部は、前記ビット数が前記基準値を超えると判定された場合には前記一方の部分を反転した前記入力データを前記ライトデータとして出力し、前記ビット数が前記基準値を超えないと判定された場合には前記他方の部分を反転した前記入力データを前記ライトデータとして出力する
メモリシステム。
【請求項７】
入力データのライト処理を指示するライトコマンドを発行するホストコンピュータと、
前記ライト処理において２値のうちの一方の値への書換えと他方の値への書換えとを順に実行するメモリセルと、
前記入力データの一部において前記２値のうちの特定の値のビット数が基準値を超えるか否かを判定して当該判定の結果を示す判定データを生成する判定部と、
前記ビット数が前記基準値を超えると判定された場合には前記一部を反転した前記入力データをライトデータとして前記判定データとともに前記メモリセルへ出力するライト側出力部と
を具備し、
前記入力データは２つの部分からなり、
前記判定部は、前記２つの部分のうちの一方の部分において前記ビット数が前記基準値を超えるか否かを判定し、
前記基準値は、前記２つの部分のうちの他方の部分における前記特定の値のビット数であり、
前記ライト側出力部は、前記ビット数が前記基準値を超えると判定された場合には前記一方の部分を反転した前記入力データを前記ライトデータとして出力し、前記ビット数が前記基準値を超えないと判定された場合には前記他方の部分を反転した前記入力データを前記ライトデータとして出力する
情報処理システム。
【請求項８】
判定部が、ライト処理時に２値のうちの一方の値への書換えと他方の値への書換えとを順に実行するメモリセルに対する入力データの一部において前記２値のうちの特定の値のビット数が基準値を超えるか否かを判定して当該判定の結果を示す判定データを生成する判定手順と、
ライト側出力部が、前記ビット数が前記基準値を超えると判定された場合には前記一部を反転した前記入力データをライトデータとして前記判定データとともに前記メモリセルへ出力するライト側出力手順と
を具備し、
前記入力データは２つの部分からなり、
前記判定手順において、前記２つの部分のうちの一方の部分において前記ビット数が前記基準値を超えるか否かを判定し、
前記基準値は、前記２つの部分のうちの他方の部分における前記特定の値のビット数であり、
前記ライト側出力手順において、前記ビット数が前記基準値を超えると判定された場合には前記一方の部分を反転した前記入力データを前記ライトデータとして出力し、前記ビット数が前記基準値を超えないと判定された場合には前記他方の部分を反転した前記入力データを前記ライトデータとして出力する
記憶制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、記憶制御装置、メモリシステム、情報処理システム、および、記憶制御方法に関する。詳しくは、不揮発性メモリを制御するための記憶制御装置、メモリシステム、情報処理システム、および、記憶制御方法に関する。
【背景技術】
【０００２】
近年の情報処理システムにおいては、補助記憶装置やストレージとして、不揮発性メモリ（ＮＶＭ：Non-Volatile memory）が用いられることがある。この不揮発性メモリは、大きなサイズを単位としたデータアクセスに対応したフラッシュメモリと、小さな単位での高速なランダムアクセスが可能な不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ：Non-Volatile RAM）とに大別される。ここで、フラッシュメモリの代表例としては、ＮＡＮＤ型フラッシュメモリが挙げられる。一方、不揮発性ランダムアクセスメモリの例としては、ＲｅＲＡＭ（Resistance RAM）、ＰＣＲＡＭ（Phase-Change RAM）、ＭＲＡＭ（Magnetoresistive RAM）などが挙げられる。
【０００３】
これらの不揮発性メモリの中には、ライト処理において、２値のうちの一方の値のビットの書き換えと他方の値の書換えとが順に行われるものがある。このような不揮発性メモリ（例えば、ＲｅＲＡＭ）において、それぞれの書き換えにおける消費電力の最大値は、一般に書き換えるビット数が多いほど大きくなる。この最大消費電力を低減するために、反転したライトデータと、反転していないライトデータとのうち、書き換えるビット数の少ない方を選択して不揮発性メモリに書き込む半導体装置が提案されている（例えば、特許文献１参照。）。
【０００４】
上述の半導体装置は、書込み先のアドレスに既に書き込まれているデータを読み出し、そのデータをバッファに保持する。そして、半導体装置は、ライトデータを反転し、反転前後のライトデータの各々をバッファにさらに保持する。半導体装置は、反転前後のライトデータの各々と、読み出したデータとを比較し、反転前後のライトデータのうち、変化ビット数の少ない方を書き込む。反転したデータの書込みにより変化ビット数が少なくなる場合には消費電力の最大値が低減する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２００６／１０６５７７号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述の従来技術では、ライト処理の速度が低下してしまうという問題がある。上述の半導体装置では、書込み前に、読み出したデータと反転前後のライトデータとを比較する処理を実行する必要があり、この比較処理の分、書込み処理の速度が低下してしまう。一方、この比較処理を行わない構成とすると、半導体装置は、反転により変化ビット数が小さくなるのか否かを判断することができなくなってしまう。この場合は、反転したとしても、変化ビット数が反転前より多くなってしまうことがあるため、消費電力の最大値が低減しなくなってしまう。このため、最大消費電力を低減しつつ、書込み処理の速度の低下を抑制することができないという問題がある。
【０００７】
本技術はこのような状況に鑑みて生み出されたものであり、不揮発性メモリのライト処理の速度の低下を抑制しつつ、最大消費電力を低減することを目的とする。
【課題を解決するための手段】
【０００８】
本技術は、上述の問題点を解消するためになされたものであり、ライト処理時に２値のうちの一方の値への書換えと他方の値への書換えとを順に実行するメモリセルに対する入力データの少なくとも一部において上記２値のうちの特定の値のビット数が基準値を超えるか否かを判定して当該判定の結果を示す判定データを生成する判定部と、上記ビット数が上記基準値を超えると判定された場合には上記少なくとも一部を反転した上記入力データをライトデータとして上記判定データとともに上記メモリセルへ出力するライト側出力部とを具備する記憶制御装置、および、その制御方法である。これにより、特定の値のビット数が基準値を超える場合には少なくとも一部を反転した入力データがライトデータとして出力されるという作用をもたらす。
【０００９】
また、この第１の側面において、上記基準値は、上記入力データの全ビットの数の半数であり、上記判定部は、上記全ビットのうち上記特定の値のビット数が上記基準値を超えるか否かを判定し、上記ライト側出力部は、上記ビット数が上記基準値を超えると判定された場合には上記入力データを反転して上記ライトデータとして出力し、上記ビット数が上記基準値を超えないと判定された場合には上記入力データを反転せずに上記ライトデータとして出力してもよい。これにより、特定の値のビット数が入力データの全ビットの数の半数を超える場合には反転した入力データがライトデータとして出力されるという作用をもたらす。
【００１０】
また、この第１の側面において、上記入力データは２つの部分からなり、上記判定部は、上記２つの部分のうちの一方の部分において上記ビット数が上記基準値を超えるか否かを判定し、上記基準値は、上記２つの部分のうちの他方の部分における上記特定の値のビット数であり、上記ライト側出力部は、上記ビット数が上記基準値を超えると判定された場合には上記一方の部分を反転した上記入力データを上記ライトデータとして出力し、上記ビット数が上記基準値を超えないと判定された場合には上記他方の部分を反転した上記入力データを上記ライトデータとして出力してもよい。これにより、特定の値のビット数が入力データの総ビット数の半数を超える場合には一方の部分を反転したデータがライトデータとして出力されるという作用をもたらす。
【００１１】
また、この第１の側面において、データと当該データに対応する上記判定データとを上記メモリセルから取得するデータ取得部と、上記ビット数が上記基準値を超えることを上記判定データが示す場合には上記取得されたデータにおいて上記少なくとも一部を反転してリードデータとして出力するリード側出力部とをさらに具備してもよい。これにより、ビット数が基準値を超えることを判定データが示す場合には上記取得されたデータにおいて上記少なくとも一部が反転されてリードデータとして出力されるという作用をもたらす。
【００１２】
また、この第１の側面において、上記リードデータと当該リードデータに対応する上記判定データとを保持するバッファをさらに具備し、上記ライト側出力部は、上記リードデータおよび上記判定データを上記バッファから読み出して上記ビット数が上記基準値を超えることを上記判定データが示す場合には上記少なくとも一部を反転した上記リードデータを上記ライトデータとして出力してもよい。これにより、リードデータと判定データとがバッファに保持され、ビット数が基準値を超えることを判定データが示す場合には上記取得されたデータにおいて上記少なくとも一部が反転されてリードデータとして出力されるという作用をもたらす。
【００１３】
また、この第１の側面において、上記リードデータを保持するバッファをさらに具備し、上記多数ビット判定部は、上記リードデータを上記バッファから読み出して上記リードデータの少なくとも一部において上記特定の値のビット数が上記基準値を超えるか否かをさらに判定して上記判定データを生成し、上記ライト側反転部は、上記ビット数が上記基準値を超えることを上記判定データが示す場合には上記少なくとも一部を反転した上記リードデータを上記ライトデータとしてさらに出力してもよい。これにより、リードデータがバッファに保持され、ビットが基準値より多いか否かがさらに判定されるという作用をもたらす。
【００１４】
また、この第１の側面において、上記メモリセルから通知されたデータサイズに基づいて上記入力データの全ビットの数を変更するデータサイズ変更部をさらに具備し、上記多数ビット判定部は、上記変更された上記ビットの数に応じて上記基準値を変更してもよい。これにより、入力データの総ビット数の変更に応じて基準値が変更されるという作用をもたらす。
【００１５】
また、この第１の側面において、上記多数ビット判定部は、上記対象データにおいて上記特定の値のビット数を計数して当該計数値を上記基準値と比較することにより上記特定の値のビット数が上記基準値より多いか否かを判定してもよい。これにより、入力データにおいて特定の値のビット数が計数されて、その計数値が基準値と比較されるという作用をもたらす。
【００１６】
また、本技術の第２の側面は、ライト処理時に２値のうちの一方の値への書換えと他方の値への書換えとを順に実行するメモリセルと、上記メモリセルに対する入力データの少なくとも一部において上記２値のうちの特定の値のビット数が基準値を超えるか否かを判定して当該判定の結果を示す判定データを生成する判定部と、上記ビット数が上記基準値を超えると判定された場合には上記少なくとも一部を反転した上記入力データをライトデータとして上記判定データとともに上記メモリセルへ出力するライト側出力部とを具備するメモリシステムである。これにより、特定の値のビット数が基準値を超える場合には少なくとも一部を反転した入力データがライトデータとして出力されるという作用をもたらす。
【００１７】
また、本技術の第３の側面は、入力データのライト処理を指示するライトコマンドを発行するホストコンピュータと、上記ライト処理において２値のうちの一方の値への書換えと他方の値への書換えとを順に実行するメモリセルと、上記入力データの少なくとも一部において上記２値のうちの特定の値のビット数が基準値を超えるか否かを判定して当該判定の結果を示す判定データを生成する判定部と、上記ビット数が上記基準値を超えると判定された場合には上記少なくとも一部を反転した上記入力データをライトデータとして上記判定データとともに上記メモリセルへ出力するライト側出力部とを具備する情報処理システムである。これにより、特定の値のビット数が基準値を超える場合には少なくとも一部を反転した入力データがライトデータとして出力されるという作用をもたらす。
【発明の効果】
【００１８】
本技術によれば、不揮発性メモリのライト処理の速度の低下を抑制しつつ、最大消費電力を低減することができるという優れた効果を奏し得る。
【図面の簡単な説明】
【００１９】
【図１】第１の実施の形態における情報処理システムの一構成例を示すブロック図である。
【図２】第１の実施の形態におけるＮＶＲＡＭのアクセス単位の一例を示す図である。
【図３】第１の実施の形態におけるページのデータ構造の一例を示す図である。
【図４】第１の実施の形態におけるライト処理部の一構成例を示すブロック図である。
【図５】第１の実施の形態におけるリード処理部の一構成例を示すブロック図である。
【図６】第１の実施の形態におけるライト処理時に転送されるデータの一例を示す図である。
【図７】第１の実施の形態におけるリード処理時に転送されるデータの一例を示す図である。
【図８】第１の実施の形態におけるメモリシステムの動作の一例を示すフローチャートである。
【図９】第１の実施の形態におけるメモリ制御部側ライト処理の一例を示すフローチャートである。
【図１０】第１の実施の形態における多数ビット判定処理の一例を示すフローチャートである。
【図１１】第１の実施の形態におけるライト側反転処理の一例を示すフローチャートである。
【図１２】第１の実施の形態におけるＮＶＲＡＭ側ライト処理の一例を示すフローチャートである。
【図１３】第１の実施の形態におけるメモリ制御部側リード処理の一例を示すフローチャートである。
【図１４】第１の実施の形態におけるエラー検出訂正処理の一例を示すフローチャートである。
【図１５】第１の実施の形態におけるリード側反転処理の一例を示すフローチャートである。
【図１６】第１の実施の形態におけるＮＶＲＡＭ側リード処理の一例を示すフローチャートである。
【図１７】第１の実施の形態におけるデータを反転して書き込む具体例を示す図である。
【図１８】第１の実施の形態における変化ビット数が最大となるライト処理の具体例を示す図である。
【図１９】第１の実施の形態における変形例のページのデータ構造の一例を示すブロック図である。
【図２０】第２の実施の形態におけるメモリ制御部の一構成例を示すブロック図である。
【図２１】第２の実施の形態におけるデータサイズ取得時に転送されるデータの一例を示す図である。
【図２２】第３の実施の形態におけるメモリ制御部の一構成例を示すブロック図である。
【図２３】第３の実施の形態におけるライト処理部の一構成例を示すブロック図である。
【図２４】第３の実施の形態におけるリード処理部の一構成例を示すブロック図である。
【図２５】第４の実施の形態におけるメモリ制御部の一構成例を示すブロック図である。
【図２６】第４の実施の形態におけるライト処理部の一構成例を示すブロック図である。
【図２７】第４の実施の形態におけるリード処理部の一構成例を示すブロック図である。
【図２８】第５の実施の形態におけるライト処理部の一構成例を示すブロック図である。
【図２９】第５の実施の形態における反転対象ビット列判定部の一構成例を示すブロック図である。
【図３０】第５の実施の形態におけるデータおよび判定ビットの一例を示す図である。
【図３１】第５の実施の形態における奇数ビット列および偶数ビット列のいずれかを反転したデータの一例を示す図である。
【図３２】第５の実施の形態におけるリード処理部の一構成例を示すブロック図である。
【図３３】第５の実施の形態におけるメモリ制御部側ライト処理の一例を示すフローチャートである。
【図３４】第５の実施の形態における反転対象ビット列判定処理の一例を示すフローチャートである。
【図３５】第５の実施の形態におけるライト側部分反転処理の一例を示すフローチャートである。
【図３６】第５の実施の形態におけるメモリ制御部側リード処理の一例を示すフローチャートである。
【図３７】第５の実施の形態におけるリード側部分反転処理の一例を示すフローチャートである。
【図３８】第５の実施の形態の変形例におけるライト処理部の一構成例を示すブロック図である。
【図３９】第５の実施の形態の変形例におけるメモリ制御部側ライト処理の一例を示すフローチャートである。
【図４０】第５の実施の形態の変形例における反転対象ビット列判定処理の一例を示すフローチャートである。
【図４１】第５の実施の形態の変形例におけるデータ転送処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００２０】
以下、本技術を実施するための形態（以下、実施の形態と称する）について説明する。説明は以下の順序により行う。
１．第１の実施の形態（特定の値のビット数に応じてライトデータを反転する例）
２．第２の実施の形態（設定されたデータサイズのライトデータを反転する例）
３．第３の実施の形態（ページバッファに保持されたライトデータを反転する例）
４．第４の実施の形態（ページバッファに保持されたライトデータ内の「０」ビット数に応じてライトデータを反転する例）
５．第５の実施の形態（ライトデータの一部を反転する例）
６．変形例（ライトデータの一部を反転してから判定ビットを生成する例）
【００２１】
＜１．第１の実施の形態＞
［情報処理システムの構成例］
図１は、実施の形態における情報処理システムの一構成例を示すブロック図である。この情報処理システムは、ホストコンピュータ３００およびメモリシステムを備える。このメモリシステムは、メモリ制御部１００およびＮＶＲＡＭ２００を備える。
【００２２】
ホストコンピュータ３００は、メモリシステムを制御するものである。具体的には、ホストコンピュータ３００は、コマンドを発行して、そのコマンド、アドレス、および、データをメモリ制御部１００に信号線３０９を介して供給する。また、ホストコンピュータ３００は、メモリシステムからデータおよびステータスを受け取る。ここで、コマンドは、メモリシステムを制御するためのものであり、例えば、データのライト処理を指示するライトコマンドと、データのリード処理を指示するリードコマンドとを含む。アドレスは、ＮＶＲＡＭ２００内のデータの格納場所を示すものである。データは、メモリシステムに入力されるデータ、または、メモリシステムから読み出されたリードデータである。ステータスは、コマンドの実行結果やメモリシステムの状況を通知する情報である。
【００２３】
メモリ制御部１００は、ＮＶＲＡＭ２００を制御するものである。このメモリ制御部１００は、ホストインターフェース１１０、ライト処理部１２０、リード処理部１３０およびメモリインターフェース１４０を備える。なお、メモリ制御部１００は、特許請求の範囲に記載の記憶制御装置の一例である。
【００２４】
ホストインターフェース１１０は、ホストコンピュータ３００との間でコマンド、アドレス、データ、および、ステータスなどをやりとりするインターフェースである。
【００２５】
ホストインターフェース１１０は、コマンドおよびアドレスをホストコンピュータ３００から受け取った場合には、そのコマンドをデコードする。デコードしたコマンドがライトコマンドである場合には、ホストインターフェース１１０は、ライトコマンドおよびアドレスをライト処理部１２０に信号線１２８を介して供給する。一方、リードコマンドである場合には、ホストインターフェース１１０は、リードコマンドおよびアドレスをリード処理部１３０に信号線１３８を介して供給する。
【００２６】
また、ホストインターフェース１１０は、ホストコンピュータ３００から受け取ったデータをライト処理部１２０に供給し、リード処理部１３０から受け取ったリードデータをホストコンピュータ３００へ転送する。さらに、ホストインターフェース１１０は、ライト処理部１２０およびリード処理部１３０を介して、ステータスを受け取った場合には、そのステータスをホストコンピュータ３００へ転送する。ホストインターフェース１１０としては、例えば、ＳＡＴＡ（Serial Advanced Technology Attachment）、ＰＣＩ  Ｅｘｐｒｅｓｓなどを利用することができる。
【００２７】
ライト処理部１２０は、ライトデータをＮＶＲＡＭ２００に書き込むためのライト処理を実行するものである。ライト処理部１２０は、ホストインターフェース１１０を介してライトコマンド、アドレスおよびデータを受け取った場合には、それらのライトコマンドおよびアドレスをメモリインターフェース１４０に供給する。そして、ライト処理部１２０は、ｎ（例えば、１６×８）ビットのデータが入力されるたびに、そのデータにおいて２値のうちの特定の値（例えば「０」）のビットの数を計数する。ライト処理部１２０は、計数したビット数をｎ／２と比較することにより、特定の値のビットが多数ビットであるか否かを判定する。ここで、多数ビットは、「０」の値のビットと「１」の値のビットとのうち、ｎビットのデータにおいて、ビット数がｎ／２より多いビットである。「０」および「１」の各々のビット数が等しい場合は、多数ビットはないものとされ、特定の値（例えば、「０」）のビットは多数ビットでないと判定される。ライト処理部１２０は、判定結果を示す判定ビットを生成する。ライト処理部１２０は、計数したビット数がｎ／２より多いの（すなわち、多数ビットが「０」）であれば、データを反転する。ライト処理部１２０は、反転後または反転前のデータをライトデータとして、そのライトデータおよび判定ビットについてエラー訂正コード（ＥＣＣ：Error Correcting Code）を生成する。ライト処理部１２０は、エラー訂正コードおよび判定ビットからなるデータを冗長データとして、ライトデータおよび冗長データをメモリインターフェース１４０に信号線１２９を介して供給する。なお、ライト処理部１２０は、データ内の「０」のビット数を計数して計数値がｎ／２より多いか否かを判定しているが、データ内の「１」のビット数を計数して、ｎ／２より多いか否かを判定してもよい。
【００２８】
また、ライト処理部１２０は、メモリインターフェース１４０から受け取ったステータスをホストインターフェース１１０に供給する。
【００２９】
リード処理部１３０は、データをＮＶＲＡＭ２００から読み出すためのリード処理を実行するものである。リード処理部１３０は、ホストインターフェース１１０を介してリードコマンドおよびアドレスを受け取った場合には、それらをメモリインターフェース１４０に供給する。そして、メモリインターフェース１４０を介してデータおよび冗長データを受け取った場合には、その冗長データ内の判定ビットから、多数ビットが「０」である否かを判断する。多数ビットが「０」であると判定された場合には、リード処理部１３０は、データを反転する。リード処理部１３０は、反転前または反転後のデータをリードデータとしてホストインターフェース１１０に信号線１３８を介して供給する。
【００３０】
また、リード処理部１３０は、メモリインターフェース１４０から受け取ったステータスをホストインターフェース１１０に供給する。
【００３１】
メモリインターフェース１４０は、ＮＶＲＡＭ２００との間でコマンド、アドレス、データ、および、ステータスなどをやりとりするインターフェースである。具体的には、メモリインターフェース１４０は、ライト処理部１２０から受け取ったコマンド、アドレスおよびデータをＮＶＲＡＭ２００に信号線１０６、１０７および１０８を介して転送する。そして、メモリインターフェース１４０は、ＮＶＲＡＭ２００から信号線１０９を介して転送されたステータスをライト処理部１２０に供給する。また、メモリインターフェース１４０は、リード処理部１３０から受け取ったコマンドおよびアドレスをＮＶＲＡＭ２００に転送し、ＮＶＲＡＭ２００から転送されたデータおよびステータスをリード処理部１３０に供給する。なお、メモリインターフェース１４０は、特許請求の範囲に記載のデータ取得部の一例である。
【００３２】
ＮＶＲＡＭ２００は、制御インターフェース２１０、ＮＶＲＡＭ制御部２２０およびメモリセルアレイ２３０を備える。
【００３３】
制御インターフェース２１０は、メモリ制御部１００との間でコマンド、アドレス、データ、および、ステータスなどをやりとりするインターフェースである。
【００３４】
ＮＶＲＡＭ制御部２２０は、ＮＶＲＡＭ２００全体を制御するものである。具体的には、ＮＶＲＡＭ制御部２２０は、制御インターフェース２１０を介してライトコマンド、アドレス、および、ライトデータを受け取った場合には、そのアドレスに書き込まれているデータを既書き込みデータとして読み出す。この読出しは、プレリードと呼ばれる。ＮＶＲＡＭ制御部２２０は、ライトデータと既書き込みデータとをビット単位で比較し、ライトデータにおいて「１」であり、かつ、既書き込みデータにおいて「０」のビットを書き換え対象とする。ＮＶＲＡＭ制御部２２０は、それらの書き換え対象のビットを「１」に書き換える。以下、この処理をリセット処理と称する。次に、ＮＶＲＡＭ制御部２２０は、ライトデータとセット処理後の既書き込みデータとをビット単位で比較し、ライトデータにおいて「０」であり、かつ、既書き込みデータにおいて「１」のビットを書き換え対象とする。ＮＶＲＡＭ制御部２２０は、それらの書き換え対象のビットを「０」に書き換える。以下、この処理をセット処理と称する。また、ＮＶＲＡＭ制御部２２０は、制御インターフェース２１０を介して冗長データを受け取った場合には、ライトデータを書き込む場合と同様の手順で書き込みを行う。
【００３５】
なお、ＮＶＲＡＭ制御部２２０は、リセット処理の後にセット処理を行っているが、セット処理の後にリセット処理を実行してもよい。また、「１」を「０」に書き換える処理をセット処理とし、「０」を「１」に書き換える処理をリセット処理としているが、これらの処理の名称は、リセット処理およびセット処理に限らない。例えば、セット処理に相当する処理は消去処理とも呼ばれる。また、リセット処理に相当する処理はプログラム処理とも呼ばれる。
【００３６】
また、制御インターフェース２１０を介してリードコマンドおよびアドレスを受け取った場合には、ＮＶＲＡＭ制御部２２０は、メモリセルアレイ２３０内の対応するアドレスからデータを読み出してメモリ制御部１００に転送する。
【００３７】
また、ＮＶＲＡＭ制御部２２０は、ＮＶＲＡＭ２００の状況やライトコマンドの実行結果を記載したステータスを生成してメモリ制御部１００に転送する。
【００３８】
メモリセルアレイ２３０は、配列された複数のメモリセルを備える。各々のメモリセルとして、例えば、ＲｅＲＡＭが用いられる。なお、ライト処理においてセット処理およびリセット処理の各々が順に実行される不揮発性メモリであれば、ＲｅＲＡＭ以外の不揮発性メモリをメモリセルアレイ２３０において用いてもよい。
【００３９】
図２は、第１の実施の形態におけるＮＶＲＡＭ２００のアクセス単位の一例を示す図である。図２に示すように、ＮＶＲＡＭ２００内のメモリセルアレイ２３０は複数のページから構成される。各々のページの格納場所には、所定のページアドレスが割り当てられる。
【００４０】
図３は、第１の実施の形態におけるページのデータ構造の一例を示す図である。各々のページは、ユーザデータ、および、その冗長データを含む。ユーザデータは、所定サイズの複数のデータから構成される。例えば、ユーザデータは、１６バイトの８個のデータからなる１２８バイトのデータである。一方、冗長データは、判定データおよびエラー訂正コードを含む。判定データは、ユーザデータ内の複数のデータに対応する複数の判定ビットから構成されるものである。これらの判定ビットは、特定の値（例えば、「０」）のビットがｎ／２より多いか否かを示すものである。例えば、ユーザデータが８個のデータからなる場合、判定データは、それらのデータに対応する８個の判定ビットから構成される。エラー訂正コードは、ユーザデータおよび判定データにおけるエラーを検出し、訂正するためのデータである。
【００４１】
［ライト処理部の構成例］
図４は、第１の実施の形態におけるライト処理部１２０の一構成例を示すブロック図である。このライト処理部１２０は、多数ビット判定部１２１、ページバッファ１２２、ライト側反転部１２３、および、ＥＣＣ生成部１２４を備える。
【００４２】
多数ビット判定部１２１は、ユーザデータ内のデータの各々において、２値のうちの特定の値（例えば、「０」）のビット数を計数してｎ／２と比較することにより、その特定の値のビットが多数ビットであるか否かを判定するものである。多数ビット判定部１２１は判定結果を示す判定ビットを生成し、データと、そのデータに対応する判定ビットとをページバッファ１２２に保持させる。例えば、「０」のビット数がｎ／２より多い（多数ビットが「０」である）場合には「０」の判定ビットが生成され、「０」のビット数がｎ／２以下である（多数ビットが「０」でない）場合には「１」の判定ビットが生成される。なお、多数ビット判定部１２１は、特許請求の範囲に記載の判定部の一例である。
【００４３】
ページバッファ１２２は、複数のデータ、および、それらの判定ビットを含むページを保持するものである。
【００４４】
ライト側反転部１２３は、ページバッファ１２２に保持されたデータを、その判定ビットに基づいて、必要に応じて反転するものである。ライト側反転部１２３は、まず、データと、その判定ビットとをページバッファ１２２から読み出す。そして、ライト側反転部１２３は、多数ビットが「０」であることを判定ビットが示す場合にはデータを反転してライトデータとし、そうでない場合には反転しないデータをライトデータとする。ライト側反転部１２３は、複数のライトデータからなるユーザデータと、複数の判定ビットからなる判定データとをＥＣＣ生成部１２４およびメモリインターフェース１４０に供給する。なお、ライト側反転部１２３は、特許請求の範囲に記載のライト側出力部の一例である。
【００４５】
ＥＣＣ生成部１２４は、ユーザデータおよび判定データについてエラー訂正コードを生成するものである。ＥＣＣ生成部１２４は、生成したエラー訂正コードをメモリインターフェース１４０に供給する。
【００４６】
［リード処理部の構成例］
図５は、第１の実施の形態におけるリード処理部１３０の一構成例を示すブロック図である。このリード処理部１３０は、リード側反転部１３１、ページバッファ１３２、および、エラー検出訂正部１３３を備える。
【００４７】
エラー検出訂正部１３３は、冗長データ内のエラー訂正コードを使用して、ユーザデータおよび判定データにおけるエラーを検出し、訂正可能であれば訂正するものである。エラー検出訂正部１３３は、エラー検出および訂正を行ってから、ユーザデータおよび判定データをページバッファ１３２に保持させる。
【００４８】
ページバッファ１３２は、ユーザデータおよび判定データを含むページを保持するものである。
【００４９】
リード側反転部１３１は、ページバッファ１３２に保持されたデータを、その判定ビットに基づいて、必要に応じて反転するものである。リード側反転部１３１は、まず、データと、その判定ビットとをページバッファ１３２から読み出す。そして、リード側反転部１３１は、反転前のデータにおける多数ビットが「０」であったことを判定ビットが示す場合にはデータを反転してリードデータとし、そうでない場合には反転していないデータをリードデータとする。リード側反転部１３１は、リードデータを含むユーザデータをホストインターフェース１１０に供給する。なお、リード側反転部１３１は、特許請求の範囲に記載のリード側出力部の一例である。
【００５０】
図６は、第１の実施の形態におけるライト処理時に転送されるデータの一例を示す図である。メモリ制御部１００は、信号線１０６および１０７を介して、ライトコマンドおよびページアドレスをＮＶＲＡＭ２００に転送する。そして、メモリ制御部１００は、ユーザデータから判定データおよびエラー訂正コードを生成し、それらを含むページをＮＶＲＡＭ２００に信号線１０８を介して転送する。ＮＶＲＡＭ２００は、転送されたページを、ページアドレスに書き込み、その書き込み処理の結果を記載したステータスをメモリ制御部１００に信号線１０９を介して転送する。このように、ライト処理においては、ライトコマンドと、ページアドレスと、ユーザデータ等とがメモリ制御部１００からＮＶＲＡＭ２００へ転送され、次いで、ＮＶＲＡＭ２００からメモリ制御部１００へステータスが転送される。
【００５１】
図７は、第１の実施の形態におけるリード処理時に転送されるデータの一例を示す図である。メモリ制御部１００は、信号線１０６および１０７を介して、リードコマンドおよびページアドレスをＮＶＲＡＭ２００に転送する。ＮＶＲＡＭ２００は、ページアドレスから、ユーザデータ、判定データおよびエラー訂正コードを含むページを読み出す。ＮＶＲＡＭ２００は、読み出したページと、読み出し処理の結果を記載したステータスとをメモリ制御部１００に信号線１０８および１０９を介して転送する。このように、リード処理においては、リードコマンド、および、ページアドレスがメモリ制御部１００からＮＶＲＡＭ２００へ転送され、次いで、ＮＶＲＡＭ２００からメモリ制御部１００へ、ユーザデータ等とステータスとが転送される。
【００５２】
［メモリシステムの動作例］
図８は、第１の実施の形態におけるメモリシステムの動作の一例を示すフローチャートである。この動作は、例えば、ホストコンピュータ３００によりメモリシステムに対して初期化が指示されたときに開始する。
【００５３】
ＮＶＲＡＭ２００は、メモリセルアレイ２３０内の全ビットを「１」の値に初期化する（ステップＳ９０１）。メモリ制御部１００は、ホストコンピュータ３００からのコマンドをデコードする（ステップＳ９０２）。メモリ制御部１００は、ホストコンピュータ３００からコマンドを受け取った場合に、そのコマンドがライトコマンドであるか否かを判断する（ステップＳ９０３）。ここでは、ホストコンピュータ３００からのコマンドは、ライトコマンドおよびリードコマンドのうちのいずれかであるものとする。なお、ＮＶＲＡＭ２００は、全ビットを「１」の値に初期化しているが、「０」の値に初期化してもよい。この場合、メモリ制御部１００は、「１」のビットが多数ビットであるか否かを判定すればよい。
【００５４】
ライトコマンドである場合には（ステップＳ９０３：Ｙｅｓ）、メモリ制御部１００は、メモリ制御部側ライト処理を実行する（ステップＳ９１０）。そして、ＮＶＲＡＭ２００は、ＮＶＲＡＭ側ライト処理を実行する（ステップＳ９４０）。
【００５５】
一方、リードコマンドである場合には（ステップＳ９０３：Ｎｏ）、メモリ制御部１００は、メモリ制御部側リード処理を実行する（ステップＳ９６０）。そして、ＮＶＲＡＭ２００は、ＮＶＲＡＭ側リード処理を実行する（ステップＳ９９０）。ステップＳ９４０またはＳ９９０の後、メモリ制御部１００は、ステップＳ９０２に戻る。
【００５６】
図９は、第１の実施の形態におけるメモリ制御部側ライト処理の一例を示すフローチャートである。メモリ制御部１００は、特定の値のビットが多数ビットであるか否かを判定するための多数ビット判定処理を実行する（ステップＳ９２０）。次いで、メモリ制御部１００は、必要に応じてデータを反転するためのライト側反転処理を実行する（ステップＳ９３０）。ステップＳ９３０の後、メモリ制御部１００は、メモリ制御部側ライト処理を終了する。
【００５７】
図１０は、第１の実施の形態における多数ビット判定処理の一例を示すフローチャートである。メモリ制御部１００における多数ビット判定部１２１は、ページ内のいずれかのｎビットのデータを選択する（ステップＳ９２１）。多数ビット判定部１２１は、選択したデータ内の「０」のビット数を計数する（ステップＳ９２２）。多数ビット判定部１２１は、選択したデータをページバッファ１２２に保持する（ステップＳ９２３）。そして、多数ビット判定部１２１は、「０」のビット数がｎ／２より多い（すなわち、多数ビットが「０」である）か否かを判定する（ステップＳ９２４）。計数値がｎ／２より多い場合には（ステップＳ９２４：Ｙｅｓ）、多数ビット判定部１２１は、多数ビットが「０」であることを示す「０」の値の判定ビットを生成し、その判定ビットをページバッファ１２２に保持する（ステップＳ９２５）。一方、計数値がｎ／２以下である場合には（ステップＳ９２４：Ｎｏ）、多数ビット判定部１２１は、多数ビットが「０」でないことを示す「１」の値の判定ビットを生成し、その判定ビットをページバッファ１２２に保持する（ステップＳ９２６）。
【００５８】
ステップＳ９２５またはＳ９２６の後、多数ビット判定部１２１は、ページ内の全データをページバッファ１２２に保持したか否かを判断する（ステップＳ９２７）。全データを保持していない場合には（ステップＳ９２７：Ｎｏ）、多数ビット判定部１２１は、ステップＳ９２１に戻る。一方、全データを保持した場合には（ステップＳ９２７：Ｙｅｓ）、多数ビット判定部１２１は、多数ビット判定処理を終了する。
【００５９】
図１１は、第１の実施の形態におけるライト側反転処理の一例を示すフローチャートである。メモリ制御部１００におけるライト側反転部１２３は、ページ内のいずれかのデータと、その判定ビットとをページバッファ１２２から読み出す（ステップＳ９３１）。ライト側反転部１２３は、判定ビットが「０」（すなわち、多数ビットが「０」）であるか否かを判断する（ステップＳ９３２）。
【００６０】
判定ビットが「０」である場合には（ステップＳ９３２：Ｙｅｓ）、ライト側反転部１２３は、データを反転してライトデータとしてＮＶＲＡＭ２００に転送する（ステップＳ９３３）。そして、ライト側反転部１２３は、反転したデータおよび判定ビットについてエラー訂正コードを生成する（ステップＳ９３４）。
【００６１】
一方、判定ビットが「１」である場合には（ステップＳ９３２：Ｎｏ）、ライト側反転部１２３は、データをライトデータとしてＮＶＲＡＭ２００に転送する（ステップＳ９３５）。そして、ライト側反転部１２３は、データおよび判定ビットについてエラー訂正コードを生成する（ステップＳ９３６）。
【００６２】
ステップＳ９３４またはＳ９３６の後、ライト側反転部１２３は、ページ内の全データをＮＶＲＡＭ２００に転送したか否かを判断する（ステップＳ９３７）。全データを転送していない場合には（ステップＳ９３７：Ｎｏ）、ライト側反転部１２３はステップＳ９３１に戻る。全データを転送した場合には（ステップＳ９３７：Ｙｅｓ）、ライト側反転部１２３は、判定データおよびエラー訂正コードを含む冗長データをＮＶＲＡＭ２００に転送する（ステップＳ９３８）。ステップＳ９３８の後、ライト側反転部１２３は、ライト側反転処理を終了する。
【００６３】
図１２は、第１の実施の形態におけるＮＶＲＡＭ側ライト処理の一例を示すフローチャートである。ＮＶＲＡＭ２００は、ページ内のライトデータまたは冗長データを取得する（ステップＳ９４１）。ＮＶＲＡＭ２００は、書き込み先のページアドレスに書き込まれているデータを既書き込みデータとしてプレリードする（ステップＳ９４２）。ＮＶＲＡＭ２００は、ライトデータまたは冗長データと、既書き込みデータとにおいて対応するビットを比較し、リセットマスクデータを生成する（ステップＳ９４３）。このリセットマスクデータは、ライトデータまたは冗長データにおいて「１」であり、かつ、既書き込みデータにおいて「０」であるビットについてはリセットする旨を示し、それ以外のビットについてはマスクする旨を示す。
【００６４】
ＮＶＲＡＭ２００は、リセットマスクデータによりリセットする旨が示されたビットのみを「０」から「１」に書き換える処理（リセット処理）を行う（ステップＳ９４４）。ＮＶＲＡＭ２００は、リセット処理後の既書き込みデータを読み出し、エラーが生じたか否かを判断する（ステップＳ９４５）。
【００６５】
エラーが生じなかった場合には（ステップＳ９４５：Ｎｏ）、ＮＶＲＡＭ２００は、ライトデータまたは冗長データと、リセット処理後の既書き込みデータとにおいて対応するビットを比較し、セットマスクデータを生成する（ステップＳ９４６）。このセットマスクデータは、ライトデータまたは冗長データにおいて「０」であり、かつ、既書き込みデータにおいて「１」であるビットについてはセットする旨を示し、それ以外のビットについてはマスクする旨を示す。
【００６６】
ＮＶＲＡＭ２００は、セットマスクデータによりセットする旨が示されたビットのみを「１」から「０」に書き換える処理（セット処理）を行う（ステップＳ９４７）。ＮＶＲＡＭ２００は、セット処理後の既書き込みデータを読み出し、エラーが生じたか否かを判断する（ステップＳ９４８）。
【００６７】
リセット処理においてエラーが発生した場合（ステップＳ９４５：Ｙｅｓ）、または、セット処理においてエラーが発生した場合（ステップＳ９４８：Ｙｅｓ）、ＮＶＲＡＭ２００は、ステータスにおけるエラーフラグをオンにする（ステップＳ９４９）。このエラーフラグは、書き込み処理においてエラーが生じたか否かを示す情報であり、初期状態においてはオフが設定される。セット処理においてエラーが発生していない場合（ステップＳ９４８：Ｎｏ）、または、ステップＳ９４９の後、ＮＶＲＡＭ２００は、メモリ制御部１００にステータスを転送する（ステップＳ９５０）。ステップＳ９５０の後、ＮＶＲＡＭ２００は、ＮＶＲＡＭ側ライト処理を終了する。
【００６８】
図１３は、第１の実施の形態におけるメモリ制御部側リード処理の一例を示すフローチャートである。メモリ制御部１００は、データ内のエラーを検出し、訂正するためのエラー検出訂正処理を実行する（ステップＳ９７０）。次いで、メモリ制御部１００は、必要に応じてデータを反転するためリード側反転処理を実行する（ステップＳ９８０）。ステップＳ９８０の後、メモリ制御部１００は、メモリ制御部側リード処理を終了する。
【００６９】
図１４は、第１の実施の形態におけるエラー検出訂正処理の一例を示すフローチャートである。メモリ制御部１００におけるエラー検出訂正部１３３は、データおよび判定データとエラー訂正コードとをＮＶＲＡＭ２００から取得する（ステップＳ９７１）。エラー検出訂正部１３３は、エラー訂正コードを使用して、データおよび判定データにおけるエラーを検出する（ステップＳ９７２）。そして、エラー検出訂正部１３３は、データおよび判定データにおいてエラーがあるか否かを判断する（ステップＳ９７３）。
【００７０】
エラーがある場合には（ステップＳ９７３：Ｙｅｓ）、エラー検出訂正部１３３は、そのエラーを訂正することができるか否かを判断する（ステップＳ９７４）。エラーを訂正することができる場合には（ステップＳ９７４：Ｙｅｓ）、エラー検出訂正部１３３は、データまたは判定データにおけるエラーを訂正する（ステップＳ９７５）。エラーを訂正することができない場合には（ステップＳ９７４：Ｎｏ）、エラー検出訂正部１３３は、ホストコンピュータ３００にエラーを通知する（ステップＳ９７６）。例えば、エラー検出訂正部１３３は、ＮＶＲＡＭ２００から転送されたステータスにおいてエラーフラグをオンにして、ホストコンピュータ３００に転送することによりエラーを通知する。
【００７１】
エラーがない場合（ステップＳ９７３：Ｎｏ）、または、ステップＳ９７５、あるいは、ステップＳ９７６の後、エラー検出訂正部１３３は、エラー検出訂正処理を終了する。
【００７２】
図１５は、第１の実施の形態におけるリード側反転処理の一例を示すフローチャートである。メモリ制御部１００におけるリード側反転部１３１は、ページ内のいずれかのデータと、その判定ビットとを選択する（ステップＳ９８１）。リード側反転部１３１は、判定ビットが「０」（すなわち、多数ビットが「０」）であるか否かを判断する（ステップＳ９８２）。
【００７３】
判定ビットが「０」である場合には（ステップＳ９８２：Ｙｅｓ）、リード側反転部１３１は、データを反転してリードデータとしてホストコンピュータ３００へ転送する（ステップＳ９８３）。一方、判定ビットが「１」である場合には（ステップＳ９８２：Ｎｏ）、リード側反転部１３１は、データを反転しないままでリードデータとしてホストコンピュータ３００へ転送する（ステップＳ９８４）。
【００７４】
ステップＳ９８３またはＳ９８４の後、リード側反転部１３１は、ページ内の全データを転送したか否かを判断する（ステップＳ９８５）。全データを転送していない場合には（ステップＳ９８５：Ｎｏ）、リード側反転部１３１はステップＳ９８１に戻る。一方、全データを転送した場合には（ステップＳ９８５：Ｙｅｓ）、リード側反転部１３１は、リード側反転処理を終了する。
【００７５】
図１６は、第１の実施の形態におけるＮＶＲＡＭ側リード処理の一例を示すフローチャートである。ＮＶＲＡＭ２００は、リードコマンドとともに受け取ったページアドレスから、ページを読み出す（ステップＳ９９１）。ＮＶＲＡＭ２００は、読み出したページをメモリ制御部１００へ転送する（ステップＳ９９２）。ステップＳ９９２の後、ＮＶＲＡＭ２００は、ＮＶＲＡＭ側リード処理を終了する。
【００７６】
図１７は、第１の実施の形態におけるデータを反転して書き込む具体例を示す図である。「０ｂ０００００１１１」のデータＡが、メモリシステムに入力された場合について考える。この場合、メモリ制御部１００は、この８ビットのデータＡにおける「０」の値のビット数を計数する。この例では、「０」のビット数（「５」）は、データＡの総ビット数の半数（「４」）より多い。このため、メモリ制御部１００は、「０」のビットが多数ビットであることを示す「０」の値の判定ビットを生成する。そして、メモリ制御部１００は、データＡを反転した「０ｂ１１１１１０００」をライトデータＡとしてＮＶＲＡＭ２００へ転送する。
【００７７】
ＮＶＲＡＭ２００において、ライトデータＡの書込み先のページアドレスには「０ｂ１１１１１１１１１」が書き込まれており、その判定ビットの書込み先には「１」が書き込まれているものとする。
【００７８】
ＮＶＲＡＭ２００は、ライトデータおよび判定ビットと、既に書き込まれたデータおよび判定ビットとを比較し、リセット処理を実行する。この例では、リセット処理により書き換えられるビットはない。
【００７９】
次いで、ＮＶＲＡＭ２００は、ライトデータおよび判定ビットと、既に書き込まれたデータおよび判定ビットとを比較し、セット処理を実行する。このセット処理により、既書き込みデータは「０ｂ１１１１１０００」に書き換えられ、判定ビットは「０」に書き換えられる。
【００８０】
ここで、仮にデータＡを反転しないままで書き込み処理を行う構成とすると、「０」のビット数が総ビット数の半数より多い場合には、セット処理またはリセット処理において、その半数より多いビットの書き換えが生じうる。例えば、データＡを反転しない場合、ＮＶＲＡＭ２００は、リセット処理において半数（４）より多い５ビットを書き換える必要がある。しかし、図１７に例示したように、「０」のビットが多数ビットであるデータをメモリ制御部１００が反転するため、セット処理およびリセット処理の各々において、ｎビットのデータ内で書き換えるビット数はｎ／２以下に抑制される。このため、セット処理およびリセット処理の各々における消費電力の最大値が、反転しない場合よりも低減する。
【００８１】
図１８は、第１の実施の形態における変化ビット数が最大となるライト処理の具体例を示す図である。ライト処理における変化ビット数が最大となるのは、ｎ個の全てのビットがセット処理またはリセット処理において書き換えられる場合である。そのケースの一例として、「０ｂ００００１１１１」のデータＢが、メモリシステムに入力された場合について考える。この例では、「０」のビット数（「４」）は、データＢの総ビット数の半数（「４」）以下である。このため、メモリ制御部１００は、「０」のビットが多数ビットでないことを示す「１」の値の判定ビットを生成する。そして、メモリ制御部１００は、データＢを反転しないでライトデータＢとしてＮＶＲＡＭ２００へ転送する。
【００８２】
ＮＶＲＡＭ２００において、ライトデータＢの書込み先のページアドレスには「０ｂ１１１１００００」の既書き込みデータが書き込まれており、その判定ビットの書込み先には「１」が書き込まれているものとする。この場合、この既書き込みデータとライトデータＢとにおける対応するビットの全てが異なる値であるため、既書き込みデータにおいて８ビットの全てが書き換えられる。
【００８３】
ＮＶＲＡＭ２００は、ライトデータおよび判定ビットと、既に書き込まれたデータおよび判定ビットとを比較し、リセット処理を実行する。このリセット処理により、５ビット目から８ビット目までの４ビットが書き換えられて、既書き込みデータは、「０ｂ１１１１１１１１」に更新される。なお、判定ビットは書き換えられない。
【００８４】
次いで、ＮＶＲＡＭ２００は、ライトデータおよび判定ビットと、リセット処理後の既書き込みデータおよび判定ビットとを比較し、セット処理を実行する。このセット処理により、先頭から４ビット目までの４ビットが書き換えられて、既書き込みデータは、「０ｂ００００１１１１」に更新される。なお、判定ビットは書き換えられない。
【００８５】
前述したように、「０」のビットが多数ビットであるとデータが反転されるため、ライトデータにおいて、「０」のビット数は常に総ビット数ｎの半数以下となる。このため、図１８に例示したように、セット処理およびリセット処理の合計の変化ビット数がｎ／２より多い場合でもあっても、セット処理およびリセット処理のそれぞれでは、変化ビット数がｎ／２（「４」）以下となる。したがって、ライト処理における消費電力の最大値が低減する。これに対して、「０」が多数ビットであるデータを反転しない構成とすると、セット処理およびリセット処理の各々における変化ビット数が、ｎ／２以下にならないことがある。例えば、「０ｂ００００００００」のライトデータを反転しないで、「０ｂ１１１１１１１１」が記憶されているアドレスに書き込む場合、リセット処理において変化ビット数が総ビット数ｎ（「８」）となってしまう。しかし、メモリ制御部１００が、ライトデータの特定の値（例えば、「０」）のビット数がｎ／２以下になるように必要に応じてデータを反転すれば、セット処理およびリセット処理の各々における変化ビット数がｎ／２以下に抑制される。この結果、反転しない場合よりも消費電力の最大値が低減する。
【００８６】
なお、メモリシステムは、図３に例示したように、複数の判定ビットをまとめて、ユーザデータに付加しているが、図１９に例示するように、判定ビットを分散してデータに付加してもよい。
【００８７】
また、情報処理システムは、図４に例示したように多数ビット判定部１２１およびライト側反転部１２３をメモリ制御部１００内に備える構成としているが、この構成に限定されない。多数ビット判定部１２１およびライト側反転部１２３の両方または一方をホストコンピュータ３００やＮＶＲＡＭ２００内に設ける構成としてもよい。また、情報処理システムは、図５に例示したようにリード側反転部１３１をメモリ制御部１００内に備える構成としているが、ホストコンピュータ３００やＮＶＲＡＭ２００内に設ける構成としてもよい。
【００８８】
また、多数ビット判定部１２１は、「０」および「１」のそれぞれのデータ保持特性に関りなく、特定の値のビット数を計数して、その計数値がｎ／２を超えるか否かを判定している。しかし、「０」および「１」のそれぞれのデータ保持特性が異なる場合には、多数ビット判定部１２１は、データ保持特性が低い方の値のビット数を計数してもよい。このデータ保持特性は、一般に、一定の温度条件においてデータを保持し続けることができる時間により表わされる。例えば、ある不揮発性メモリが７０℃以下で１０年間に渡ってデータを保持することが保証される場合には、その不揮発性メモリのデータ保持特性は、７０℃以下において１０年と表わされる。そして、保証される時間が長いほど、また、保証される温度が高いほど、データ保持特性が高いと評価される。具体的には、加速試験などによりＮＶＲＡＭ２００の「０」のデータ保持特性と「１」のデータ保持特性とを予め測定しておき、多数ビット判定部１２１が計数する特定の値のビットを、データ保持特性の低い方の値（例えば「０」）のビットに設定すればよい。ｎビットのデータにおいて、その特定の値のビット数がｎ／２を超えていれば、ライト側反転部１２３により、そのデータが反転されるため、データ保持特性の低い値のビット数がデータ保持特性の高い値のビット数以下に抑制される。この結果、ＮＶＲＡＭ２００のデータ保持特性が改善される。
【００８９】
このように、本技術の第１の実施の形態によれば、メモリ制御部１００は、特定の値のビットが多数ビットであるデータを反転するため、セット処理またはリセット処理における変化ビット数を総ビット数の半数以下に抑制することができる。これにより、セット処理およびリセット処理のそれぞれにおける最大消費電力が、反転しない場合よりも低減される。最大消費電力の低減により、電源回路の規模を小さくすることができ、ＮＶＲＡＭ２００を小型化することができる。また、メモリ制御部１００は、既書き込みデータを読み出して、書き込むデータと比較する必要がないため、ライト処理の速度の低下が抑制される。したがって、メモリシステムは、ライト処理における速度の低下を抑制しつつ、最大消費電力を低減することができる。
【００９０】
＜２．第２の実施の形態＞
［メモリ制御部の構成例］
図２０は、第２の実施の形態におけるメモリ制御部１００の一構成例を示すブロック図である。第２の実施の形態におけるメモリ制御部１００は、ＮＶＲＡＭ２００の仕様に応じて、データサイズを変更することができる点において第１の実施の形態と異なる。具体的には、第２の実施の形態のメモリ制御部１００は、データサイズ変更部１５０をさらに備える。
【００９１】
データサイズ変更部１５０は、判定対象のデータのデータサイズ（ｎビット）を変更するものである。このデータサイズ変更部１５０は、データの書き込みを開始する前に、データサイズを取得するためのデータサイズ取得コマンドを発行し、メモリインタ−フェース１４０を介してＮＶＲＡＭ２００に転送する。ＮＶＲＡＭ２００は、そのデータサイズ取得コマンドに応じて、ページサイズと、ページ内の個々のデータのデータサイズとをメモリ制御部１００に通知する。データサイズ変更部１５０は、通知されたサイズに基づいて、ライト処理部１２０およびリード処理部１３０におけるページサイズおよびデータサイズの設定を変更する。
【００９２】
図２１は、第２の実施の形態におけるデータサイズ取得時に転送されるデータの一例を示す図である。メモリ制御部１００は、データサイズ取得コマンドを発行してＮＶＲＡＭ２００に信号線１０６を介して転送する。ＮＶＲＡＭ２００は、そのデータサイズ取得コマンドに応じてページサイズおよびデータサイズをメモリ制御部１００に信号線１０８を介して転送する。
【００９３】
このように、第２の実施の形態によれば、メモリ制御部１００は、ＮＶＲＡＭ２００から通知されたサイズに応じてデータサイズを変更することができる。これにより、メモリ制御部１００は、アクセス単位の異なる複数の種類のＮＶＲＡＭ２００に対応することができる。
【００９４】
＜３．第３の実施の形態＞
［メモリ制御部の構成例］
図２２は、第３の実施の形態におけるメモリ制御部１００の一構成例を示すブロック図である。第３の実施の形態におけるメモリ制御部１００は、ページバッファの構成を変更した点において第１の実施の形態と異なる。具体的には、メモリ制御部１００が、ライト処理部１２０およびリード処理部１３０により共有されるページバッファ１６０をさらに備える点において第１の実施の形態と異なる。
【００９５】
ページバッファ１６０は、リードデータと、その判定ビットとを保持するものである。あるページアドレスに書き込まれたデータを、別のページアドレスにコピーする場合、ホストコンピュータ３００は、コピーを指示するコマンドをメモリ制御部１００に転送する。リード処理部１３０は、そのコマンドにより指示されたコピー元のページアドレスにおけるデータおよび判定ビットをＮＶＲＡＭ２００から受け取り、必要に応じてデータを反転する。リード処理部１３０は、反転前または反転後のデータをリードデータとして、判定ビットとともにページバッファ１６０に保持させる。ライト処理部１２０は、ページバッファ１６０からリードデータおよび判定ビットを読み出し、必要に応じてデータを反転する。ライト処理部１２０は、反転前または反転後のリードデータをライトデータとして、判定ビットとともにＮＶＲＡＭ２００に転送する。ＮＶＲＡＭ２００により、コピー先のページアドレスにライトデータおよび判定ビットが書き込まれる。
【００９６】
［ライト処理部の構成例］
図２３は、第３の実施の形態におけるライト処理部１２０の一構成例を示すブロック図である。第３の実施形態のライト処理部１２０は、ページバッファ１２２を備えない点において第１の実施の形態と異なる。ライト処理部１２０における多数ビット判定部１２１は、ユーザデータおよび判定データをページバッファ１２２の代わりにページバッファ１６０に保持する。ライト側反転部１２３は、ページバッファ１６０に保持されたユーザデータおよび判定データを読み出し、判定データに基づいて、必要に応じてデータを反転する。
【００９７】
［リード処理部の構成例］
図２４は、第３の実施の形態におけるリード処理部１３０の一構成例を示すブロック図である。第３の実施形態のリード処理部１３０は、ページバッファ１３２を備えない点において第１の実施の形態と異なる。リード処理部１３０におけるエラー検出訂正部１３３は、ページバッファ１３２を介さないで、リード側反転部１３１にユーザデータおよび判定データを供給する。リード側反転部１３１は、リードデータを含むユーザデータと、判定データとをページバッファ１６０に保持する。
【００９８】
このように、第３の実施の形態によれば、メモリ制御部１００は、リードデータおよび判定データをページバッファ１６０に保持し、リードデータを必要に応じて反転してライトデータとしてＮＶＲＡＭ２００に転送することができる。メモリシステム（メモリ制御部１００およびＮＶＲＡＭ２００）の外部のバッファにリードデータを保持させる必要がないため、メモリシステムは、異なるページアドレス間でデータを高速にコピーすることができる。
【００９９】
＜４．第４の実施の形態＞
［メモリ制御部の構成例］
図２５は、第４の実施の形態におけるメモリ制御部１００の一構成例を示すブロック図である。第４の実施の形態におけるメモリ制御部１００は、ページバッファ１６０の配置を変更した点において第３の実施の形態と異なる。ホストインターフェース１１０とライト処理部１２０およびリード処理部１３０との間にページバッファ１６０が配置される点において第３の実施の形態と異なる。ホストインターフェース１１０は、ライト処理部１２０およびリード処理部１３０との間において、ページバッファ１６０を介して、コマンド、アドレス、データ、および、ステータスなどをやりとりする。
【０１００】
第４の実施の形態のページバッファ１６０は、リードデータを保持するが判定データを保持しない。リード処理部１３０は、リードデータをページバッファ１６０に保持させる。ライト処理部１２０は、ページバッファ１６０に保持されたリードデータの値を必要に応じて変更する。そして、ライト処理部１２０は、ページバッファ１６０からリードデータを読み出し、そのリードデータにおける特定の値のビット数を計数する。計数値がｎ／２より多ければ、ライト処理部１２０は、そのリードデータを反転してライトデータとして判定データと共に、ＮＶＲＡＭ２００に供給する。
【０１０１】
［ライト処理部の構成例］
図２６は、第４の実施の形態におけるライト処理部１２０の一構成例を示すブロック図である。第４の実施形態の多数ビット判定部１２１は、ホストインターフェース１１０のまたはリード処理部１３０から、ページバッファ１６０を介して転送されたユーザデータを受け取る。多数ビット判定部１２１は、そのユーザデータについて判定データを生成し
【０１０２】
［リード処理部の構成例］
図２７は、第４の実施の形態におけるリード処理部１３０の一構成例を示すブロック図である。第４の実施の形態のリード処理部１３０は、判定データをページバッファ１６０に保持させず、ユーザデータのみをページバッファ１６０に保持させる点において、第３の実施の形態と異なる。
【０１０３】
このように、第４の実施の形態によれば、メモリ制御部１００は、リードデータをページバッファ１６０に保持し、リードデータを必要に応じて反転してライトデータとしてＮＶＲＡＭ２００に転送することができる。メモリシステムの外部のバッファにリードデータを保持させる必要がないため、メモリシステムは、異なるページアドレス間でデータを高速にコピーすることができる。また、メモリ制御部１００は、ページバッファ１６０から読み出したリードデータにおいて、特定の値のビット数を計数するため、メモリシステムは、ページバッファ１６０に保持したリードデータの値を変更してコピーすることができる。
【０１０４】
＜５．第５の実施の形態＞
［メモリ制御部の構成例］
第１の実施の形態では、ｎビットのデータの全ビットを反転する処理を実行することにより、そのデータ内の特定の値のビット数をｎ／２以下にしていた。しかし、ｎビットのデータ内の特定の値のビット数をｎ／２以下にすることができる処理であれば、全ビットを反転する処理以外の処理を行ってもよい。例えば、メモリ制御部１００は、データの全ビットを反転する処理の代わりに、一部のビットを反転する処理を行ってもよい。第５の実施の形態のメモリ制御部１００は、一部のビットを反転する処理を実行することにより、ｎビットのデータ内の特定の値のビット数をｎ／２以下にする点において第１の実施の形態と異なる。
【０１０５】
図２８は、第５の実施の形態のライト処理部１２０の一構成例を示すブロック図である。第５の実施の形態のライト処理部１２０は、多数ビット判定部１２１およびライト側反転部１２３の代わりに、反転対象ビット列判定部１６１およびライト側部分反転部１６５を備える点において第１の実施の形態と異なる。
【０１０６】
反転対象ビット列判定部１６１は、データの奇数ビット列における特定の値のビット数が偶数ビット列における特定の値のビット数より多いか否かを判定するものである。反転対象ビット列判定部１６１は、ｎビットのデータが入力されるたびに、そのデータの奇数ビット列と偶数ビット列とのそれぞれにおいて特定の値（例えば、「０」）のビットの個数を計数する。そして、反転対象ビット列判定部１６１は、奇数ビット列の計数値が偶数ビット列の計数値より大きいか否かを判定する。
【０１０７】
反転対象ビット列判定部１６１は、判定結果を示す判定ビットを生成し、データと、その判定ビットとをページバッファ１２２に保持させる。例えば、奇数ビット列の「０」の計数値が、偶数ビット列の「０」の計数値より多い場合には、「１」の判定ビットが生成される。一方、奇数ビット列の計数値が偶数ビット列の計数値以下である場合には、「０」の判定ビットが生成される。なお、反転対象ビット列判定部１６１は、特許請求の範囲に記載の判定部の一例である。
【０１０８】
ライト側部分反転部１６５は、ページバッファ１２２に保持されたデータの奇数ビット列または偶数ビット列を、その判定ビットに基づいて反転するものである。ライト側部分反転部１６５は、まず、データと、その判定ビットとをページバッファ１２２から読み出す。ライト側部分反転部１６５は、奇数ビット列の計数値の方が多いことを判定ビットが示す場合には、奇数ビット列を反転してライトデータとし、そうでない場合には、偶数ビット列を反転してライトデータとする。
【０１０９】
偶数ビット列の反転においては、ライト側部分反転部１６５は、例えば、偶数ビット列が「１」で奇数ビット列が「０」のｎビットのマスクデータと、反転対象のｎビットのデータとの排他的論理和をビット単位で求めることにより、偶数ビット列を反転する。一方、奇数ビット列の反転においては、ライト側部分反転部１６５は、例えば、奇数ビット列が「１」で偶数ビット列が「０」のｎビットのマスクデータと、反転対象のｎビットのデータとの排他的論理和を求めることにより、奇数ビット列を反転する。
【０１１０】
奇数ビット列および偶数ビット列のうち「０」の値の計数値が多い方を反転することにより、反転後のデータの「０」の個数は、常に、データの総ビット数の半数以下となる。
【０１１１】
ライト側部分反転部１６５は、複数のライトデータからなるユーザデータと、複数の判定ビットからなる判定データとをＥＣＣ生成部１２４およびメモリインターフェース１４０に供給する。なお、ライト側部分反転部１６５は、特許請求の範囲に記載のライト側出力部の一例である。
【０１１２】
［反転対象ビット列判定部の構成例］
図２９は、第５の実施の形態における反転対象ビット列判定部１６１の一構成例を示すブロック図である。この反転対象ビット列判定部１６１は、奇数ビット列計数部１６２、偶数ビット列計数部１６３、および、計数値比較部１６４を備える。
【０１１３】
奇数ビット列計数部１６２は、ｎビットのデータの奇数ビット列における「０」の個数を計数するものである。奇数ビット列計数部１６２は、計数値を計数値比較部１６４に供給する。偶数ビット列計数部１６３は、ｎビットのデータの偶数ビット列における「０」の個数を計数するものである。偶数ビット列計数部１６３は、計数値を計数値比較部１６４に供給する。
【０１１４】
計数値比較部１６４は、奇数ビット列の計数値と偶数ビット列の計数値とを比較するものである。計数値比較部１６４は、比較結果を示すビットを判定ビットとして生成する。例えば、奇数ビット列の計数値が偶数ビット列の計数値より多い場合には「１」の判定ビットを生成し、奇数ビット列の計数値が偶数ビット列の計数値以下である場合には「０」の判定ビットを生成する。計数値比較部１６４は、判定ビットを、ページバッファ１２２に保持させる。
【０１１５】
図２９に例示したように、奇数ビット列計数部１６２および偶数ビット列計数部１６３を設けることにより、奇数ビット列の「０」の個数を計数する処理と偶数ビット列の「０」の個数を計数する処理とを並列に実行することができる。これにより、「０」の個数を計数する処理を並列して実行しない第１の実施の形態と比較して、判定ビットを生成する処理を高速に行うことができる。
【０１１６】
図３０は、第５の実施の形態におけるデータおよび判定ビットの一例を示す図である。図３０におけるａは、データにおける奇数ビット列および偶数ビット列の一例を示すものである。例えば、ビット列の右から数えて奇数番目のビットが奇数ビットとされ、偶数番目のビットが偶数ビットとされる。
【０１１７】
図３０におけるｂは、データおよび判定ビットの一例を示す図である。１６進数表示で０乃至１５の値のデータＮを２進数表示すると、「０ｂ００００」乃至「０ｂ１１１１」のビット列が得られる。このデータＮにおける奇数ビット列と偶数ビット列との「０」の個数が反転対象ビット列判定部１６１により計数される。例えば、「０ｂ００００」における奇数ビット列および偶数ビット列の「０」の個数はいずれも２である。また、「００１０」における奇数ビット列の「０」の個数は２であり、偶数ビット列の「０」の個数は１個である。
【０１１８】
そして、奇数ビット列の計数値が偶数ビット列の計数値より多い場合には、反転対象ビット列判定部１６１により「１」の判定ビットが生成される。一方、奇数ビット列の計数値が偶数ビット列の計数値以下である場合には「０」の判定ビットが生成される。例えば、「００００」における奇数ビット列の計数値は、偶数ビット列の計数値以下であるため、「０」の判定ビットが生成される。一方、「００１０」における奇数ビット列の計数値は、偶数ビット列の計数値より多いため、「１」の判定ビットが生成される。
【０１１９】
図３１は、第５の実施の形態における奇数ビット列および偶数ビット列のいずれかを反転したデータの一例を示す図である。判定ビットが「０」である場合には、ライト側部分反転部１６５により、偶数列反転用マスクデータ「０ｂ１０１０」とデータＮとの排他的論理和が行われ、その処理結果であるデータＮＡ’が出力される。一方、判定ビットが「１」である場合には、奇数列反転用マスクデータ「０ｂ０１０１」とデータＮとの排他的論理和が行われ、その処理結果であるデータＮＢ’が出力される。例えば、データ「０ｂ００００」について判定ビット「０」が生成された場合には、偶数列半転用マスクデータ「０ｂ１０１０」の使用により、「０ｂ１０１０」のデータＮＡ’が出力される。また、データ「０ｂ００１０」について判定ビット「１」が生成された場合には、奇数列半転用マスクデータ「０ｂ０１０１」の使用により、「０ｂ０１１１」のデータＮＢ’が出力される。
【０１２０】
データＮＡ'およびデータＮＢ'は、データＮの偶数ビット列および奇数ビット列において「０」の個数が多い方が反転されたデータであるから、「０」の個数は、常に、そのデータの総ビット数の半数以下となる。このように、データの偶数ビット列または奇数ビット列を反転する処理を実行することにより、ｎビットのデータ内の特定の値のビット数をｎ／２以下にすることができる。
【０１２１】
なお、ｎビットのデータ内の特定の値のビット数をｎ／２以下にすることができる変換処理であれば、メモリ制御部１００は、データの偶数ビット列または奇数ビット列を反転する処理以外の処理を行ってもよい。例えば、データの上位ビット列または下位ビット列を反転する処理を行ってもよい。
【０１２２】
［リード処理部の構成例］
図３２は、第５の実施の形態におけるリード処理部１３０の一構成例を示すブロック図である。第５の実施の形態のリード処理部１３０は、リード側反転部１３１の代わりに、リード側部分反転部１３４を備える点において第１の実施の形態と異なる。
【０１２３】
リード側部分反転部１３４は、判定ビットに基づいて、ページバッファ１３２に保持されたデータの偶数ビット列または奇数ビット列を反転するものである。リード側部分反転部１３４は、まず、データと、その判定ビットとをページバッファ１３２から読み出す。そして、リード側部分反転部１３４は、奇数ビット列の計数値の方が多いことを判定ビットが示す場合には、奇数ビット列を反転してリードデータとし、そうでない場合には偶数ビット列を反転してリードデータとする。リード側部分反転部１３４は、リードデータを含むユーザデータをホストインターフェース１１０に供給する。なお、リード側部分反転部１３４は、特許請求の範囲に記載のリード側出力部の一例である。
【０１２４】
［メモリ制御部の動作例］
図３３は、第５の実施の形態におけるメモリ制御部側ライト処理の一例を示すフローチャートである。第５の実施の形態におけるメモリ制御部側ライト処理は、ステップＳ９２０およびＳ９３０の代わりに、ステップＳ９１１およびＳ９１５を実行する点において第１の実施の形態と異なる。メモリ制御部１００は、奇数ビット列の「０」の個数の方が多いか否かを判定するための反転対象ビット列判定処理を実行する（ステップＳ９１１）。次いで、メモリ制御部１００は、奇数ビット列または偶数ビット列を反転するためのライト側部分反転処理を実行する（ステップＳ９１５）。ステップＳ９１５の後、メモリ制御部１００は、メモリ制御部側ライト処理を終了する。
【０１２５】
図３４は、第５の実施の形態における反転対象ビット列判定処理の一例を示すフローチャートである。反転対象ビット列判定処理は、ステップＳ９２２およびＳ９２４の代わりにステップＳ９１２およびＳ９１３を実行する点以外は、第１の実施の形態の多数ビット判定処理と同様である。
【０１２６】
反転対象ビット列判定部１６１は、ステップＳ９２１の後、選択したデータの奇数ビット列および偶数ビット列のそれぞれの「０」のビット数を計数する（ステップＳ９１２）。反転対象ビット列判定部１６１は、選択したデータをページバッファ１２２に保持する（ステップＳ９２３）。そして、反転対象ビット列判定部１６１は、奇数ビット列の方が「０」の個数が多いか否かを判定する（ステップＳ９１３）。
【０１２７】
奇数ビット列の「０」の個数が、偶数ビット列の「０」の個数以下である場合には（ステップＳ９１３：Ｎｏ）、反転対象ビット列判定部１６１は、「０」の値の判定ビットを生成し、その判定ビットをページバッファ１２２に保持する（ステップＳ９２５）。一方、奇数ビット列の方が「０」の個数が多い場合には（ステップＳ９１３：Ｙｅｓ）、反転対象ビット列判定部１６１は、「１」の値の判定ビットを生成し、その判定ビットをページバッファ１２２に保持する（ステップＳ９２６）。ステップＳ９２５またはＳ９２６の後、反転対象ビット列判定部１６１は、ステップＳ９２７を実行する。
【０１２８】
図３５は、第５の実施の形態におけるライト側部分反転処理の一例を示すフローチャートである。ライト側部分反転処理は、ステップＳ９３３乃至Ｓ９３６の代わりにステップＳ９１６乃至Ｓ９１９を実行する点以外は、第１の実施の形態のライト側反転処理と同様である。
【０１２９】
ライト側部分反転部１６５は、ステップＳ９３１の後、判定ビットが「０」であるか否かを判断する（ステップＳ９３２）。判定ビットが「０」である場合には（ステップＳ９３２：Ｙｅｓ）、ライト側部分反転部１６５は、偶数ビット列を反転してライトデータとしてＮＶＲＡＭ２００に転送する（ステップＳ９１６）。そして、ライト側部分反転部１６５は、偶数ビット列を反転したデータおよび判定ビットについてエラー訂正コードを生成する（ステップＳ９１７）。
【０１３０】
一方、判定ビットが「１」である場合には（ステップＳ９３２：Ｎｏ）、ライト側部分反転部１６５は、奇数ビット列を反転してライトデータとしてＮＶＲＡＭ２００に転送する（ステップＳ９１８）。そして、ライト側部分反転部１６５は、奇数ビット列を反転したデータおよび判定ビットについてエラー訂正コードを生成する（ステップＳ９１９）。ステップＳ９１７またはＳ９１９の後、ライト側部分反転部１６５は、ステップＳ９３７およびＳ９３８を実行する。
【０１３１】
図３６は、第５の実施の形態におけるメモリ制御部側リード処理の一例を示すフローチャートである。第５の実施の形態のメモリ制御部側リード処理は、ステップＳ９８０の代わりにステップＳ９６１を実行する点において第１の実施の形態と異なる。メモリ制御部１００は、ステップＳ９７０の後、奇数ビット列または偶数ビット列を反転するためのリード側部分反転処理を実行する（ステップＳ９６１）。ステップＳ９６１の後、メモリ制御部１００は、メモリ制御部側リード処理を終了する。
【０１３２】
図３７は、第５の実施の形態におけるリード側部分反転処理の一例を示すフローチャートである。リード側部分反転処理は、ステップＳ９８３およびＳ９８４の代わりにステップＳ９６２およびＳ９６３を実行する点以外は、第１の実施の形態のリード側反転処理と同様である。
【０１３３】
リード側部分反転部１３４は、ステップＳ９８１の後、判定ビットが「０」であるか否かを判断する（ステップＳ９８２）。判定ビットが「０」である場合には（ステップＳ９８２：Ｙｅｓ）、リード側部分反転部１３４は、偶数ビット列を反転したデータをリードデータとしてホストコンピュータ３００へ転送する（ステップＳ９６２）。
【０１３４】
一方、判定ビットが「１」である場合には（ステップＳ９８２：Ｎｏ）、リード側部分反転部１３４は、奇数ビット列を反転したデータをリードデータとしてホストコンピュータ３００へ転送する（ステップＳ９６３）。ステップＳ９６２またはＳ９６３の後、リード側部分反転部１３４は、ステップＳ９８５を実行する。
【０１３５】
なお、第５の実施の形態のメモリ制御部１００において、第２乃至第４の実施の形態に記載の構成を適用してもよい。後述する第５の実施の形態の変形例についても同様である。
【０１３６】
このように、第５の実施の形態によれば、メモリ制御部１００はｎビットのデータ内の偶数ビット列および奇数ビット列のうち特定の値のビットが多い方を反転するため、セット処理またはリセット処理における変化ビット数をｎ／２以下にすることができる。これにより、セット処理およびリセット処理のそれぞれにおける最大消費電力が低減される。
【０１３７】
＜６．変形例＞
［メモリ制御部の構成例］
第５の実施の形態では、メモリ制御部１００は、判定ビットを生成した後にデータの一部のビットを反転していたが、一部のビットを反転した後に判定ビットを生成することもできる。第５の実施の形態の変形例のメモリ制御部１００は、一部のビットを反転した後に判定ビットを生成する点において第５の実施の形態と異なる。
【０１３８】
図３８は、第５の実施の形態の変形例におけるライト処理部１２０の一構成例を示すブロック図である。変形例のライト処理部１２０は、反転対象ビット列判定部１６１およびライト側部分反転部１６５の代わりに反転対象ビット列判定部１７１およびデータ転送処理部１７２を備える点において第５の実施の形態と異なる。
【０１３９】
反転対象ビット列判定部１７１は、データＮにおいて偶数ビット列を反転したデータＮＡ'と、奇数ビット列を反転したデータＮＢ'とを生成する。反転対象ビット列判定部１７１は、それぞれのデータの「０」の個数を計数する。そして、反転対象ビット列判定部１７１は、データＮＢ'の計数値がデータＮＡ'の計数値より多いか否かを判定し、判定結果を示す判定ビットとデータＮＡ'またはデータＮＢ'とをページバッファ１２２に保持させる。例えば、反転対象ビット列判定部１７１は、データＮＢ'の計数値がデータＮＡ'の計数値より多い場合には、「１」の判定ビットを生成し、データＮＢ'とともにページバッファ１２２に保持させる。一方、データＮＢ'の計数値がデータＮＡ'の計数値以下である場合には、反転対象ビット列判定部１７１は、「０」の判定ビットを生成し、データＮＡ'とともにページバッファ１２２に保持させる。
【０１４０】
データ転送処理部１７２は、判定ビットとデータＮＡ'またはデータＮＢ'とをＥＣＣ生成部１２４およびメモリインターフェース１４０に転送するものである。
【０１４１】
［メモリ制御部の動作例］
図３９は、第５の実施の形態の変形例におけるメモリ制御部側ライト処理の一例を示すフローチャートである。変形例のメモリ制御部側ライト処理は、ステップＳ９１５の代わりにステップＳ９９５を実行する点において第５の実施の形態と異なる。メモリ制御部１００は、ステップＳ９１１を実行した後、判定ビットと、一部を反転したデータとを転送するためのデータ転送処理を実行する（ステップＳ９９５）。ステップＳ９９５の後、メモリ制御部１００は、メモリ制御部側ライト処理を終了する。
【０１４２】
図４０は、第５の実施の形態の変形例における反転対象ビット列判定処理の一例を示すフローチャートである。変形例の反転対象ビット列判定処理は、ステップＳ９２２乃至Ｓ９２６の代わりにステップＳ９０４乃至Ｓ９０９を実行する点において第１の実施の形態の多数ビット判定処理と異なる。
【０１４３】
反転対象ビット列判定部１７１は、ステップＳ９２１の後、データＮの偶数ビット列を反転したデータＮＡ'を生成する（ステップＳ９０４）。また、反転対象ビット列判定部１７１は、データＮの奇数ビット列を反転したデータＮＢ'を生成する（ステップＳ９０５）。反転対象ビット列判定部１７１は、データＮＡ'およびデータＮＢ'のそれぞれの「０」のビット数を計数する（ステップＳ９０６）。そして、反転対象ビット列判定部１７１は、データＮＢ'の方が「０」の個数が多いか否かを判定する（ステップＳ９０７）。
【０１４４】
データＮＢ'の計数値がデータＮＡ'の計数値以下である場合（ステップＳ９０７：Ｎｏ）、反転対象ビット列判定部１７１は「０」の判定ビットを生成し、データＮＡ'とともにページバッファ１２２に保持させる（ステップＳ９０８）。一方、データＮＢ'の方が「０」の個数が多い場合（ステップＳ９０７：Ｙｅｓ）、反転対象ビット列判定部１７１は「１」の判定ビットを生成し、データＮＢ'とともにページバッファ１２２に保持させる（ステップＳ９０９）。ステップＳ９０８またはＳ９０９の後、反転対象ビット列判定部１７１はステップＳ９２７を実行する。
【０１４５】
図４１は、第５の実施の形態の変形例におけるデータ転送処理の一例を示すフローチャートである。変形例のデータ転送処理は、ステップＳ９１６およびＳ９１８の代わりにステップＳ９９６およびＳ９９７を実行する点以外は、第５の実施の形態のライト側部分反転処理と同様である。
【０１４６】
データ転送処理部１７２は、ステップＳ９３１の後、判定ビットが「０」であるか否かを判断する（ステップＳ９３２）。判定ビットが「０」である場合には（ステップＳ９３２：Ｙｅｓ）、データ転送処理部１７２は、偶数ビット列が反転されたデータＮＡ’をライトデータとしてＮＶＲＡＭ２００に転送する（ステップＳ９９６）。そして、データ転送処理部１７２はステップＳ９１７を実行する。
【０１４７】
一方、判定ビットが「１」である場合には（ステップＳ９３２：Ｎｏ）、データ転送処理部１７２は、奇数ビット列が反転されたデータＮＢ’をライトデータとしてＮＶＲＡＭ２００に転送する（ステップＳ９９７）。そして、データ転送処理部１７２はステップＳ９１９を実行する。
【０１４８】
このように変形例によれば、メモリ制御部１００は、データの一部のビットを反転した結果に基づいて判定ビットを生成することにより、セット処理またはリセット処理における変化ビット数を総ビット数の半数以下に抑制することができる。
【０１４９】
なお、上述の実施の形態は本技術を具現化するための一例を示したものであり、実施の形態における事項と、特許請求の範囲における発明特定事項とはそれぞれ対応関係を有する。同様に、特許請求の範囲における発明特定事項と、これと同一名称を付した本技術の実施の形態における事項とはそれぞれ対応関係を有する。ただし、本技術は実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において実施の形態に種々の変形を施すことにより具現化することができる。
【０１５０】
また、上述の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。この記録媒体として、例えば、ＣＤ（Compact Disc）、ＭＤ（MiniDisc）、ＤＶＤ（Digital Versatile Disk）、メモリカード、ブルーレイディスク（Blu-ray Disc（登録商標））等を用いることができる。
【０１５１】
なお、本技術は以下のような構成もとることができる。
（１）ライト処理時に２値のうちの一方の値への書換えと他方の値への書換えとを順に実行するメモリセルに対する入力データの少なくとも一部において前記２値のうちの特定の値のビット数が基準値を超えるか否かを判定して当該判定の結果を示す判定データを生成する判定部と、
前記ビット数が前記基準値を超えると判定された場合には前記少なくとも一部を反転した前記入力データをライトデータとして前記判定データとともに前記メモリセルへ出力するライト側出力部と
を具備する記憶制御装置。
（２）前記基準値は、前記入力データの全ビットの数の半数であり、
前記判定部は、前記全ビットのうち前記特定の値のビット数が前記基準値を超えるか否かを判定し、
前記ライト側出力部は、前記ビット数が前記基準値を超えると判定された場合には前記入力データを反転して前記ライトデータとして出力し、前記ビット数が前記基準値を超えないと判定された場合には前記入力データを反転せずに前記ライトデータとして出力する
前記（１）記載の記憶制御装置。
（３）前記入力データは２つの部分からなり、
前記判定部は、前記２つの部分のうちの一方の部分において前記ビット数が前記基準値を超えるか否かを判定し、
前記基準値は、前記２つの部分のうちの他方の部分における前記特定の値のビット数であり、
前記ライト側出力部は、前記ビット数が前記基準値を超えると判定された場合には前記一方の部分を反転した前記入力データを前記ライトデータとして出力し、前記ビット数が前記基準値を超えないと判定された場合には前記他方の部分を反転した前記入力データを前記ライトデータとして出力する
前記（１）記載の記憶制御装置。
（４）データと当該データに対応する前記判定データとを前記メモリセルから取得するデータ取得部と、
前記ビット数が前記基準値を超えることを前記判定データが示す場合には前記取得されたデータにおいて前記少なくとも一部を反転してリードデータとして出力するリード側出力部と
をさらに具備する前記（１）乃至（３）のいずれかに記載の記憶制御装置。
（５）前記リードデータと当該リードデータに対応する前記判定データとを保持するバッファをさらに具備し、
前記ライト側出力部は、前記リードデータおよび前記判定データを前記バッファから読み出して前記ビット数が前記基準値を超えることを前記判定データが示す場合には前記少なくとも一部を反転した前記リードデータを前記ライトデータとして出力する
前記（４）記載の記憶制御装置。
（６）前記リードデータを保持するバッファをさらに具備し、
前記多数ビット判定部は、前記リードデータを前記バッファから読み出して前記リードデータの少なくとも一部において前記特定の値のビット数が前記基準値を超えるか否かをさらに判定して前記判定データを生成し、
前記ライト側反転部は、前記ビット数が前記基準値を超えることを前記判定データが示す場合には前記少なくとも一部を反転した前記リードデータを前記ライトデータとしてさらに出力する
前記（４）または（５）に記載の記憶制御装置。
（７）前記メモリセルから通知されたデータサイズに基づいて前記入力データの全ビットの数を変更するデータサイズ変更部をさらに具備し、
前記多数ビット判定部は、前記変更された前記全ビットの数に応じて前記基準値を変更する
前記（１）乃至（６）のいずれかに記載の記憶制御装置。
（８）前記多数ビット判定部は、前記対象データにおいて前記特定の値のビット数を計数して当該計数値を前記基準値と比較することにより前記特定の値のビット数が前記基準値より多いか否かを判定する
前記（１）乃至（７）のいずれかに記載の記憶制御装置。
（９）ライト処理時に２値のうちの一方の値への書換えと他方の値への書換えとを順に実行するメモリセルと、
前記メモリセルに対する入力データの少なくとも一部において前記２値のうちの特定の値のビット数が基準値を超えるか否かを判定して当該判定の結果を示す判定データを生成する判定部と、
前記ビット数が前記基準値を超えると判定された場合には前記少なくとも一部を反転した前記入力データをライトデータとして前記判定データとともに前記メモリセルへ出力するライト側出力部と
を具備するメモリシステム。
（１０）入力データのライト処理を指示するライトコマンドを発行するホストコンピュータと、
前記ライト処理において２値のうちの一方の値への書換えと他方の値への書換えとを順に実行するメモリセルと、
前記入力データの少なくとも一部において前記２値のうちの特定の値のビット数が基準値を超えるか否かを判定して当該判定の結果を示す判定データを生成する判定部と、
前記ビット数が前記基準値を超えると判定された場合には前記少なくとも一部を反転した前記入力データをライトデータとして前記判定データとともに前記メモリセルへ出力するライト側出力部と
を具備する情報処理システム。
（１１）判定部が、ライト処理時に２値のうちの一方の値への書換えと他方の値への書換えとを順に実行するメモリセルに対する入力データの少なくとも一部において前記２値のうちの特定の値のビット数が基準値を超えるか否かを判定して当該判定の結果を示す判定データを生成する判定手順と、
ライト出力部が、前記ビット数が前記基準値を超えると判定された場合には前記少なくとも一部を反転した前記入力データをライトデータとして前記判定データとともに前記メモリセルへ出力するライト側出力手順と
を具備する記憶制御方法。
【符号の説明】
【０１５２】
１００  メモリ制御部
１１０  ホストインターフェース
１２０  ライト処理部
１２１  多数ビット判定部
１２２、１３２、１６０  ページバッファ
１２３  ライト側反転部
１２４  ＥＣＣ生成部
１３０  リード処理部
１３１  リード側反転部
１３３  エラー検出訂正部
１３４  リード側部分反転部
１４０  メモリインタ−フェース
１５０  データサイズ変更部
１６１、１７１  反転対象ビット列判定部
１６２  奇数ビット列計数部
１６３  偶数ビット列計数部
１６４  計数値比較部
１６５  ライト側部分反転部
１７２  データ転送処理部
２００  ＮＶＲＡＭ
２１０  制御インターフェース
２２０  ＮＶＲＡＭ制御部
２３０  メモリセルアレイ
３００  ホストコンピュータ
【図１】
0005942781.tif 000002
【図２】
0005942781.tif 000003
【図３】
0005942781.tif 000004
【図４】
0005942781.tif 000005
【図５】
0005942781.tif 000006
【図６】
0005942781.tif 000007
【図７】
0005942781.tif 000008
【図８】
0005942781.tif 000009
【図９】
0005942781.tif 000010
【図１０】
0005942781.tif 000011
【図１１】
0005942781.tif 000012
【図１２】
0005942781.tif 000013
【図１３】
0005942781.tif 000014
【図１４】
0005942781.tif 000015
【図１５】
0005942781.tif 000016
【図１６】
0005942781.tif 000017
【図１７】
0005942781.tif 000018
【図１８】
0005942781.tif 000019
【図１９】
0005942781.tif 000020
【図２０】
0005942781.tif 000021
【図２１】
0005942781.tif 000022
【図２２】
0005942781.tif 000023
【図２３】
0005942781.tif 000024
【図２４】
0005942781.tif 000025
【図２５】
0005942781.tif 000026
【図２６】
0005942781.tif 000027
【図２７】
0005942781.tif 000028
【図２８】
0005942781.tif 000029
【図２９】
0005942781.tif 000030
【図３０】
0005942781.tif 000031
【図３１】
0005942781.tif 000032
【図３２】
0005942781.tif 000033
【図３３】
0005942781.tif 000034
【図３４】
0005942781.tif 000035
【図３５】
0005942781.tif 000036
【図３６】
0005942781.tif 000037
【図３７】
0005942781.tif 000038
【図３８】
0005942781.tif 000039
【図３９】
0005942781.tif 000040
【図４０】
0005942781.tif 000041
【図４１】
0005942781.tif 000042