(57)【要約】【課題】書き込み時間を短縮できる。【解決手段】制御回路１２ｂは、メモリセル１１ａ１〜１１ａｎの初期値（論理値“１”）とは異なるビット列２１のビット数が、２ビット以下の場合、ビット列２１と付加値２５ａとを対応付けて記憶部１１に書き込み、６ビット以上の場合、反転ビット列２１ａと付加値２５ｂとを対応付けて記憶部１１に書き込み、３−５ビットである場合、ビット列２１の下位４ビットと反転ビット列２１ａとの論理和をとった第１変換後ビット列２１ｃにおいて論理値“０”のビット数が、２ビット以下である場合、第１変換後ビット列２１ｃと付加値２５ｃと復元コード２６ａとを対応付けて記憶部１１に書き込み、２ビットより大きい場合、反転ビット列２１ａの下位４ビットとビット列２１との論理和をとった第２変換後ビット列２１ｅと付加値２５ｄと復元コード２６ｂとを対応付けて記憶部１１に書き込む。【選択図】図１
2019023951.tif 000002
【特許請求の範囲】
【請求項１】
複数の不揮発性メモリセルを有する記憶部に書き込むデータを受ける入力回路と、
前記データに含まれる第１のビット数の第１のビット列において、前記複数の不揮発性メモリセルに記憶されている初期値である第１の論理値とは異なる第２の論理値である第２のビット数が、第１の閾値以下の場合、前記第１のビット列と第１の付加値とを対応付けて前記記憶部に書き込み、
前記第２のビット数が、前記第１の閾値よりも大きい第２の閾値以上の場合、前記第１のビット列の全ビットの論理値を反転した第２のビット列と第２の付加値とを対応付けて前記記憶部に書き込み、
前記第２のビット数が、前記第１の閾値よりも大きく前記第２の閾値よりも小さい場合、前記第１のビット列のうち前記第１のビット数の半分のビット数である第３のビット列と、前記第２のビット列との論理和をとった第４のビット列を生成し、前記第４のビット列において前記第２の論理値である第３のビット数が前記第１の閾値以下である場合、前記第４のビット列と第３の付加値と前記第３のビット列とを対応付けて前記記憶部に書き込み、
前記第３のビット数が前記第１の閾値より大きい場合、前記第２のビット列のうち前記第３のビット列に対応するビット位置の第５のビット列と、前記第１のビット列との論理和をとった第６のビット列を生成し、前記第６のビット列と第４の付加値と前記第５のビット列とを対応付けて前記記憶部に書き込む、
制御回路と、
を有するメモリ制御回路。
【請求項２】
前記第１の付加値と前記第２の付加値と前記第３の付加値と前記第４の付加値は、それぞれ異なる３ビット値であり、前記第１の付加値と前記第２の付加値と前記第３の付加値と前記第４の付加値のうち、前記第４の付加値に含まれる前記第２の論理値の数が最も多い、請求項１に記載のメモリ制御回路。
【請求項３】
前記第３のビット列は、前記第１のビット列の下位側の半分のビット列であり、前記第５のビット列は、前記第２のビット列の下位側の半分のビット列である、請求項１または２に記載のメモリ制御回路。
【請求項４】
前記第３のビット列は、前記第１のビット列の上位側の半分のビット列であり、前記第５のビット列は、前記第２のビット列の上位側の半分のビット列である、請求項１または２に記載のメモリ制御回路。
【請求項５】
前記第１のビット数が８ビットである場合、前記第１の閾値は２ビットであり、前記第２の閾値は６ビットである、請求項１乃至４の何れか一項に記載のメモリ制御回路。
【請求項６】
前記第１のビット数が１６ビットである場合、前記第１の閾値は４ビットであり、前記第２の閾値は１２ビットである、請求項１乃至４の何れか一項に記載のメモリ制御回路。
【請求項７】
前記複数の不揮発性メモリセルのそれぞれは、前記第１の論理値が１であるフラッシュメモリセルである、請求項１乃至６の何れか一項に記載のメモリ制御回路。
【請求項８】
複数の不揮発性メモリセルを有する記憶部と、
前記記憶部に書き込むデータを受ける入力回路と、前記データに含まれる第１のビット数の第１のビット列において、前記複数の不揮発性メモリセルに記憶されている初期値である第１の論理値とは異なる第２の論理値である第２のビット数が、第１の閾値以下の場合、前記第１のビット列と第１の付加値とを対応付けて前記記憶部に書き込み、前記第２のビット数が、前記第１の閾値よりも大きい第２の閾値以上の場合、前記第１のビット列の全ビットの論理値を反転した第２のビット列と第２の付加値とを対応付けて前記記憶部に書き込み、前記第２のビット数が、前記第１の閾値よりも大きく前記第２の閾値よりも小さい場合、前記第１のビット列のうち前記第１のビット数の半分のビット数である第３のビット列と、前記第２のビット列との論理和をとった第４のビット列を生成し、前記第４のビット列において前記第２の論理値である第３のビット数が前記第１の閾値以下である場合、前記第４のビット列と第３の付加値と前記第３のビット列とを対応付けて前記記憶部に書き込み、前記第３のビット数が前記第１の閾値より大きい場合、前記第２のビット列のうち前記第３のビット列に対応するビット位置の第５のビット列と、前記第１のビット列との論理和をとった第６のビット列を生成し、前記第６のビット列と第４の付加値と前記第５のビット列とを対応付けて前記記憶部に書き込む、制御回路と、を備えたメモリ制御回路と、
を有するメモリ。
【請求項９】
制御回路が、
複数の不揮発性メモリセルを有する記憶部に書き込むデータに含まれる第１のビット数の第１のビット列において、前記複数の不揮発性メモリセルに記憶されている初期値である第１の論理値とは異なる第２の論理値である第２のビット数が、第１の閾値以下の場合、前記第１のビット列と第１の付加値とを対応付けて前記記憶部に書き込み、
前記第２のビット数が、前記第１の閾値よりも大きい第２の閾値以上の場合、前記第１のビット列の全ビットの論理値を反転した第２のビット列と第２の付加値とを対応付けて前記記憶部に書き込み、
前記第２のビット数が、前記第１の閾値よりも大きく前記第２の閾値よりも小さい場合、前記第１のビット列のうち前記第１のビット数の半分のビット数である第３のビット列と、前記第２のビット列との論理和をとった第４のビット列を生成し、
前記第４のビット列において前記第２の論理値である第３のビット数が前記第１の閾値以下である場合、前記第４のビット列と第３の付加値と前記第３のビット列とを対応付けて前記記憶部に書き込み、
前記第３のビット数が前記第１の閾値より大きい場合、前記第２のビット列のうち前記第３のビット列に対応するビット位置の第５のビット列と、前記第１のビット列との論理和をとった第６のビット列を生成し、前記第６のビット列と第４の付加値と前記第５のビット列とを対応付けて前記記憶部に書き込む、
メモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ制御回路、メモリ、及びメモリ制御方法に関する。
【背景技術】
【０００２】
フラッシュメモリなどの不揮発性メモリへの書き込み処理は、第１の論理値を保持している状態（消去状態）の各メモリセルの何れかの第１の論理値を、書き込みデータに応じて第２の論理値に反転することで行われる。たとえば、フラッシュメモリでは、論理値“１”を保持している消去状態の各メモリセルの何れかの論理値を、書き込みデータに応じて論理値“０”に反転することで書き込み処理が行われる。
【０００３】
フラッシュメモリにおいて、論理値“０”を書き込む際にはメモリセルのフローティングゲートに、書き込みパルスを用いて少しずつ電子をチャージしていくために時間がかかる。そのため、従来、書き込みデータに論理値“０”のビットが多い場合には、書き込みデータを全ビット反転させてから各メモリセルに書き込む技術があった。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−１５７７８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、書き込みデータを全ビット反転させる従来の技術では、フラッシュメモリにおいて書き込まれる書き込みデータにおける論理値“０”の割合は、ワーストケースでは５０％を下回らず、書き込み時間が長くなってしまう可能性があった。なお、フラッシュメモリに限らず、他の不揮発性メモリにおいても同様に、消去状態の論理値から反転するビット数が多くなるほど書き込み時間が長くなるという問題がある。
【０００６】
１つの側面では、本発明は、書き込み時間を短縮することが可能なメモリ制御回路、メモリ、及びメモリ制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
１つの実施態様では、複数の不揮発性メモリセルを有する記憶部に書き込むデータを受ける入力回路と、前記データに含まれる第１のビット数の第１のビット列において、前記複数の不揮発性メモリセルに記憶されている初期値である第１の論理値とは異なる第２の論理値である第２のビット数が、第１の閾値以下の場合、前記第１のビット列と第１の付加値とを対応付けて前記記憶部に書き込み、前記第２のビット数が、前記第１の閾値よりも大きい第２の閾値以上の場合、前記第１のビット列の全ビットの論理値を反転した第２のビット列と第２の付加値とを対応付けて前記記憶部に書き込み、前記第２のビット数が、前記第１の閾値よりも大きく前記第２の閾値よりも小さい場合、前記第１のビット列のうち前記第１のビット数の半分のビット数である第３のビット列と、前記第２のビット列との論理和をとった第４のビット列を生成し、前記第４のビット列において前記第２の論理値である第３のビット数が前記第１の閾値以下である場合、前記第４のビット列と第３の付加値と前記第３のビット列とを対応付けて前記記憶部に書き込み、前記第３のビット数が前記第１の閾値より大きい場合、前記第２のビット列のうち前記第３のビット列に対応するビット位置の第５のビット列と、前記第１のビット列との論理和をとった第６のビット列を生成し、前記第６のビット列と第４の付加値と前記第５のビット列とを対応付けて前記記憶部に書き込む、制御回路と、を有するメモリ制御回路が提供される。
【０００８】
また、１つの実施態様では、メモリが提供される。また、１つの実施態様では、メモリ制御方法が提供される。
【発明の効果】
【０００９】
１つの側面では、書き込み時間を短縮できる。
【図面の簡単な説明】
【００１０】
【図１】第１の実施の形態のメモリ及びメモリ制御回路の一例を示す図である。
【図２】ＳＳＤの一例を示す図である。
【図３】ＮＡＮＤ型のフラッシュメモリのメモリマップの一例を示す図である。
【図４】データ変換及び書き込み処理の一例を示す図である。
【図５】論理値“０”のビット数に応じて適用される変換処理、付加値及び復元コードと、実際に書き込まれるデータにおける論理値“０”のビット数をまとめた例を示す図である。
【図６】８ビットのビット列の全データパターンにおいて、変換処理後に実際に書き込まれるデータの論理値“０”の数とその割合の計算結果の例を示す図である。
【図７】付加値として使用できる複数の組合せの一例を示す図である。
【図８】データ変換及び書き込み処理の他の例を示す図である。
【図９】１６ビットのビット列を用いる場合のデータ変換及び書き込み処理の例を示す図である。
【図１０】ＳＳＤ外部のプロセッサがデータ変換処理を行う例を示す図である。
【図１１】プロセッサが直接メモリセル単体に書き込む例を示す図である。
【発明を実施するための形態】
【００１１】
以下、発明を実施するための形態を、図面を参照しつつ説明する。
（第１の実施の形態）
図１は、第１の実施の形態のメモリ及びメモリ制御回路の一例を示す図である。
【００１２】
第１の実施の形態のメモリ１０は、記憶部１１とメモリ制御回路１２を有する。
記憶部１１は、複数のメモリセル１１ａ１〜１１ａｎを有する。メモリセル１１ａ１〜１１ａｎのそれぞれは、不揮発性のメモリセルである。不揮発性のメモリセルとして、フラッシュメモリセル、ＦｅＲＡＭ（Ferroelectric Random Access Memory）セル、ＭＲＡM（Magnetoresistive Random Access Memory）セルなどがある。なお、記憶部１１は、さらに、センスアンプ、コラムデコーダ、ロウデコーダ、データレジスタなどを含むが、図１では図示が省略されている。
【００１３】
メモリ制御回路１２は、Ｉ／Ｆ（インターフェース）１２ａ、制御回路１２ｂ、Ｉ／Ｆ１２ｃを有し、記憶部１１を制御する。
Ｉ／Ｆ１２ａは、プロセッサである制御回路１５から供給される各種コマンド、アドレス、記憶部１１へ書き込むデータなどを受ける入力回路の一例である。Ｉ／Ｆ１２ａは、上記各種コマンドや、アドレス、データを制御回路１２ｂに供給する。また、Ｉ／Ｆ１２ａは、記憶部１１から読み出され、後述の処理により制御回路１２ｂにて変換されたデータを受け、制御回路１５に供給する出力回路としても機能する。
【００１４】
制御回路１２ｂは、たとえば、論理アドレスから物理アドレスへの変換処理や、ウェアレベリング処理など、各種処理を実行する他、後述のデータ変換及び書き込み処理を実行する。
【００１５】
Ｉ／Ｆ１２ｃは、制御回路１２ｂで生成された信号やデータを記憶部１１に供給する出力回路として機能するとともに、記憶部１１から読み出したデータを受ける入力回路としても機能する。
【００１６】
制御回路１５は、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）などのプロセッサである。ただし、制御回路１５は、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の電子回路を含んでもよい。制御回路１２ｂも、プロセッサであってもよい。
【００１７】
以下、制御回路１２ｂによるメモリ制御方法として、書き込みデータに対するデータ変換及び書き込み処理の例を説明する。
制御回路１２ｂは、たとえば、まず、Ｉ／Ｆ１２ａが受けた書き込みデータを、所定のビット数のビット列単位に分割する。図１には、書き込みデータ２０を８ビットのビット列単位に分割した例が示されている。たとえば、図１の例では、３２ビットの書き込みデータ２０を分割することで、４つのビット列２１，２２，２３，２４が生成されている。
【００１８】
そして、制御回路１２ｂは、ビット列２１〜２４のそれぞれについて、以下のデータ変換及び書き込み処理を行う。なお、以下では、ビット列２１に対するデータ変換処理を説明するが、他のビット列２２〜２４についても同様の処理が行われる。
【００１９】
制御回路１２ｂは、ビット列２１において、メモリセル１１ａ１〜１１ａｎに記憶されている初期値である第１の論理値とは異なる第２の論理値であるビット数が第１の閾値以下である場合、ビット列２１と付加値２５ａとを対応付けて記憶部１１に書き込む。
【００２０】
また、制御回路１２ｂは、ビット列２１において、第２の論理値であるビット数が、第１の閾値よりも大きい第２の閾値以上の場合、ビット列２１の全ビットの論理値を反転したビット列（以下反転ビット列２１ａという）を生成する。そして、制御回路１２ｂは、反転ビット列２１ａと、付加値２５ｂとを対応付けて記憶部１１に書き込む。
【００２１】
以下に説明する例では、メモリセル１１ａ１〜１１ａｎは、フラッシュメモリセルであるものとする。メモリセル１１ａ１〜１１ａｎがフラッシュメモリセルである場合、初期値である第１の論理値は“１”であり、第２の論理値は“０”である。また、以下に説明する例では、第１の閾値は２ビットであり、第２の閾値は６ビットとする。
【００２２】
論理値“０”が２ビット以下となるビット列２１の例として、“００１１１１１１”がある。また、論理値“０”が６ビット以上となるビット列２１の例として、“００１０１０００”がある。反転ビット列２１ａの例として、“００１０１０００”を全ビット反転した、“１１０１０１１１”がある。この場合、論理値“０”の数が全ビット反転前と比べて、６から２に減る。
【００２３】
また、制御回路１２ｂは、ビット列２１において、第２の論理値である“０”のビット数が３，４または５ビットである場合、以下の処理を行う。論理値“０”が３，４または５ビットとなるビット列２１の例として、“０１１０１１１０”や“０１１１００００”がある。
【００２４】
制御回路１２ｂは、ビット列２１のうち、ビット列２１のビット数の半分のビット列、たとえば、ビット列２１の下位４ビットのビット列２１ｂと、反転ビット列２１ａとの論理和をとったビット列（以下第１変換後ビット列２１ｃという）を生成する。
【００２５】
たとえば、ビット列２１が“０１１０１１１０”の場合、反転ビット列２１ａは、“１００１０００１”となり、ビット列２１の下位４ビットのビット列２１ｂは、“１１１０”であるから、第１変換後ビット列２１ｃは、“１００１１１１１”となる。また、ビット列２１が“０１１１００００”の場合、反転ビット列２１ａは、“１０００１１１１”となり、ビット列２１の下位４ビットのビット列２１ｂは、“００００”であるから、第１変換後ビット列２１ｃは、“１０００１１１１”となる。
【００２６】
制御回路１２ｂは、第１変換後ビット列２１ｃにおいて論理値“０”のビット数が２ビット以下である場合、第１変換後ビット列２１ｃと付加値２５ｃと復元コード２６ａとを対応付けて記憶部１１に書き込む。
【００２７】
たとえば、第１変換後ビット列２１ｃが“１００１１１１１”の場合、論理値“０”のビット数は２ビット以下であるため、制御回路１２ｂは、“１００１１１１１”と、付加値２５ｃと復元コード２６ａとを記憶部１１に書き込む。この例では、第１変換後ビット列２１ｃは、論理値“０”のビット数が２であり、元のビット列２１、すなわち“０１１０１１１０”よりも論理値“０”の数が少なくなる。なお、復元コード２６ａは、ビット列２１ｂと同じであり、たとえば、“１１１０”である。
【００２８】
一方、第１変換後ビット列２１ｃにおいて論理値“０”のビット数が２ビットより多い場合、制御回路１２ｂは、以下の処理を行う。制御回路１２ｂは、反転ビット列２１ａのうち、ビット列２１ｂに対応するビット位置の４ビットの反転ビット列２１ｄと、ビット列２１との論理和をとったビット列（以下第２変換後ビット列２１ｅという）を生成する。ビット列２１ｂがビット列２１の下位４ビットである場合、反転ビット列２１ｄは、反転ビット列２１ａの下位４ビットである。
【００２９】
たとえば、第１変換後ビット列２１ｃが“１０００１１１１”である場合、論理値“０”のビット数は２ビットより多い。この場合、制御回路１２ｂは、たとえば、反転ビット列２１ａ“１００１１１１”の下位４ビットの反転ビット列２１ｄである“１１１１”とビット列２１“０１１１００００”との論理和である“０１１１１１１１”を第２変換後ビット列２１ｅとして生成する。
【００３０】
そして、制御回路１２ｂは、第２変換後ビット列２１ｅと、付加値２５ｄと、復元コード２６ｂとを対応付けて記憶部１１に書き込む。上記の例では、第２変換後ビット列２１ｅは、論理値“０”のビット数が１であり、元のビット列２１、すなわち“０１１１００００”よりも論理値“０”の数が少なくなる。なお、復元コード２６ｂは、反転ビット列２１ｄと同じであり、第２変換後ビット列２１ｅが“０１１１１１１１”である場合、“１１１１”である。
【００３１】
記憶部１１からの読み出しの際、制御回路１２ｂは、記憶部１１から読み出したビット列に対応付けられた付加値や復元コードを検出する。そして、制御回路１２ｂは、付加値２５ａを検出した場合には、読み出されたビット列をそのまま出力し、付加値２５ｂを検出した場合には、読み出されたビット列を全ビット反転して出力する。
【００３２】
また、制御回路１２ｂは、付加値２５ｃを検出した場合には、読み出したビット列から復元コード２６ａを減算する。そして、減算結果のビット列を全ビット反転して出力する。たとえば、ビット列２１である“０１１０１１１０”から変換された、第１変換後ビット列２１ｃである“１００１１１１１”が読み出された場合、復元コード２６ａは、“１１１０”であるため、減算結果は“１００１０００１”となる。このビット列の全ビット反転結果は、“０１１０１１１０”となり、元のビット列２１が復元される。
【００３３】
また、制御回路１２ｂは、付加値２５ｄを検出した場合には、読み出したビット列から復元コード２６ａを減算して出力する。たとえば、ビット列２１である“０１１１００００”から変換された、第２変換後ビット列２１ｅである“０１１１１１１１”が読み出された場合、復元コード２６ｂは、“１１１１”であるため、減算結果は“０１１１００００”となる。すなわち、元のビット列２１が復元される。
【００３４】
以上のように、制御回路１２ｂは、書き込みデータ２０に含まれるビット列２１に対し、メモリセル１１ａ１〜１１ａｎの初期値と異なるビット数に応じ、全ビット反転処理以外に、上記のような２種類のデータ変換処理を行う。すなわち、制御回路１２ｂは、第１変換後ビット列２１ｃへの変換または、第２変換後ビット列２１ｅへの変換を行う。上記の例ではビット列２１が書き込まれる場合、反転ビット列２１ａが書き込まれる場合、第１変換後ビット列２１ｃが書き込まれる場合は、８ビット中の論理値“０”の数を２ビット以下にできる。また、第２変換後ビット列２１ｅが書き込まれる場合は、８ビット中の論理値“０”の数を１ビット以下にできる。
【００３５】
これにより、書き込みデータにおいて、初期値と異なる論理値が多い場合に全ビット反転させる方法よりも、初期値からの反転数が減り（初期値と異なるビット数が減り）、書き込み時間を短縮できる。
【００３６】
また、書き込み時間の短縮は、書き込み数の低減により得られるため、メモリセル１１ａ１〜１１ａｎの劣化を遅らせることが可能となり、記憶部１１の長寿命化（高信頼性）の効果も期待できる。
【００３７】
ところで、付加値２５ａ〜２５ｄは、読み出し処理の際、上記４通りの書き込み処理を区別するために設けられ、たとえば、３ビットのビット列である。付加値２５ａ〜２５ｄも、記憶部１１に書き込まれるため、付加値２５ａ〜２５ｄ自身の論理値“０”のビット数も少ないことが望ましい。たとえば、付加値２５ａは“０１１”であり、付加値２５ｂは“１１１”の３ビットであり、付加値２５ｃは“１０１”であり、付加値２５ｄは“００１”である。４種類の付加値２５ａ〜２５ｄのうち、付加値２５ｄの論理値“０”の数が一番多いが、対応付けられた第２変換後ビット列２１ｅは、論理値“０”の数が４通りの書き込み処理の中で最も少なくなるため、トータルとしての論理値“０”の数の増加は抑制される。
【００３８】
なお、ビット列２１のデータパターンによっては、復元コード２６ａ，２６ｂにも論理値“０”が含まれ、１５ビット中、５ビットまたは６ビットの論理値“０”の書き込みが発生する場合がある。しかし、後述の計算例に示すように、単に、書き込みデータにおいて、初期値と異なる論理値が多い場合に全ビット反転させる方法よりも、全データパターンの平均の書き込み時間を短縮できる。
【００３９】
なお、ビット列２１と付加値２５ａとを対応付けて記憶部１１に書き込むために、たとえば、制御回路１２ｂは、ビット列２１と付加値２５ａとを合わせたビット列を記憶部１１に記憶してもよい。また、制御回路１２ｂは、ビット列２１と付加値２５ａとのそれぞれを記憶する記憶部１１の異なる領域の各アドレス情報を紐付けして管理することで、ビット列２１と付加値２５ａとを対応付けてもよい。付加値２５ｂ〜２５ｃや復元コード２６ａ，２６ｂなども、同様にしてビット列（反転ビット列２１ａ、第１変換後ビット列２１ｃ、または第２変換後ビット列２１ｅ）と対応付けられる。
【００４０】
なお、上記の例では、第１の閾値を２ビット、第２の閾値を６ビットとしたがこれに限定されず、第１の閾値を３ビット、第２の閾値を５ビットとしてもよい。その場合、記憶部１１に書き込まれる８ビットのビット列（反転ビット列２１ａ、第１変換後ビット列２１ｃ、または第２変換後ビット列２１ｅ）のうち、論理値“０”のビット数を３ビット以下にできる。
【００４１】
また、上記では、ビット列２１ｂをビット列２１の下位４ビットとし、反転ビット列２１ｄを反転ビット列２１ａの下位４ビットとしたがこれに限定されない。ビット列２１ｂをビット列２１の上位４ビットとし、反転ビット列２１ｄを反転ビット列２１ａの上位４ビットとしてもよい。また、ビット列２１ｂをビット列２１の任意の４ビットとし、反転ビット列２１ｄをビット列２１ｂに対応するビット位置の反転ビット列２１ａの４ビットとしてもよい。ただ、この場合、下位４ビットまたは上位４ビットを用いる場合よりも、読み出し時に復元コード２６ａ，２６ｂを用いて減算するビット位置を特定するための情報量が増えることになる。
【００４２】
また、上記では、書き込みデータ２０を８ビットのビット列単位に分割した例を示したが、これに限定されず、たとえば、１６ビットのビット列単位に分割してもよい。その場合、たとえば、第１の閾値を４ビット、第２の閾値を１２ビットとしてもよい。
【００４３】
また、上記では、メモリセル１１ａ１〜１１ａｎの初期値は論理値“０”としたが、初期値は論理値“１”であってもよい。
なお、上記の例では、８ビットのビット列以外に、３ビットの付加値と４ビットの復元コードが記憶部１１に書き込まれることになるため、そのまま８ビットのビット列を書き込む場合よりも記憶領域が多く用いられる。しかし、近年の微細加工技術の進歩による高集積化や、３次元実装技術、メモリセルの多ビット化などにより、メモリの大容量化が進む中、記憶領域の増大については対処が可能である。
【００４４】
（第２の実施の形態）
以下第２の実施の形態のメモリの一例として、ＮＡＮＤ型のフラッシュメモリを有するＳＳＤ（Solid State Drive）を説明する。
【００４５】
図２は、ＳＳＤの一例を示す図である。
ＳＳＤ３０は、ＮＡＮＤ型のフラッシュメモリ３１、コントローラＩＣ（Integrated Circuit）３２を有する。
【００４６】
フラッシュメモリ３１は、図１に示した記憶部１１の一例であり、コントローラＩＣ３２は、図１に示したメモリ制御回路１２の一例である。
フラッシュメモリ３１は、複数のメモリセル３１ａ１〜３１ａｎを有する。メモリセル３１ａ１〜３１ａｎのそれぞれは、フラッシュメモリセルである。なお、フラッシュメモリ３１は、さらに、センスアンプ、コラムデコーダ、ロウデコーダ、データレジスタなどを含むが、図２では図示が省略されている。
【００４７】
コントローラＩＣ３２は、Ｉ／Ｆ３２ａ、制御回路３２ｂ、Ｉ／Ｆ３２ｃを有する。
Ｉ／Ｆ３２ａは、各種インターフェース規格にしたがって、プロセッサ３５との間で各種コマンド、アドレスまたはデータの送受信を行う。各種インターフェース規格として、たとえば、シリアルＡＴＡ（Advanced Technology Attachment）、ＰＣＩｅ（Peripheral Component Interconnect express）、ＮＶＭｅ（Non-Volatile Memory express）などがある。なお、図２に示すようなプロセッサ３５とＳＳＤ３０は、各種電子装置に搭載可能である。各種電子装置として、サーバ、スーパーコンピュータ、パーソナルコンピュータ、モバイル機器、ネットワーク装置、デジタル機器などがある。
【００４８】
制御回路３２ｂは、論理・物理アドレス変換機能、信頼性管理機能、エラー訂正・管理機能、不良ブロック管理機能、データ変換方式管理機能、バッファメモリ制御機能を実行する。
【００４９】
論理・物理アドレス変換機能は、論理アドレスから物理アドレスへの変換処理を行う機能である。信頼性管理機能は、フラッシュメモリ３１の各ブロックの消去回数の管理や、書き換え処理がフラッシュメモリ３１の特定のブロックに集中することを避けるためのウェアレベリング処理などを行う機能である。エラー訂正・管理機能は、ＥＣＣ（Error Check and Correct）などを実行する機能である。不良ブロック管理機能は、不良ブロックを他の正常なブロックに置き換える処理などを行う機能である。データ変換方式管理機能は、後述のデータ変換処理を行う機能である。バッファメモリ制御機能は、コントローラＩＣ３２内の図示しないバッファメモリを制御する機能である。なお、上記の各機能は、それぞれ回路で実現されてもよい。また、制御回路３２ｂは、ＣＰＵやＤＳＰなどのプロセッサであってもよく、上記の各機能を、図示しないＲＯＭ（Read Only Memory）に記憶されたプログラムを実行することで実現してもよい。
【００５０】
Ｉ／Ｆ３２ｃは、制御回路３２ｂで生成された信号やデータをフラッシュメモリ３１に供給する出力回路として機能するとともに、フラッシュメモリ３１から読み出したデータを受ける入力回路としても機能する。
【００５１】
図３は、ＮＡＮＤ型のフラッシュメモリのメモリマップの一例を示す図である。
メモリマップには、フラッシュメモリ３１に含まれるメモリセル１１ａ１〜１１ａｎによる記憶領域である２つのプレーン４０ａ，４０ｂが含まれる。プレーン４０ａ，４０ｂのそれぞれは、複数のブロック（たとえば、ブロック４１ａ，４１ｂ）に分割されている。また、図示を省略しているが、各ブロックは複数のページに分割されている。
【００５２】
さらに、メモリマップには、フラッシュメモリ３１に含まれる図示しないキャッシュレジスタとデータレジスタの記憶領域４２ａ１，４２ｂ１，４３ａ１，４３ｂ１と、冗長領域４２ａ２，４２ｂ２，４３ａ２，４３ｂ２が含まれる。キャッシュレジスタの記憶領域４２ａ１と冗長領域４２ａ２とを合わせた領域、記憶領域４２ｂ１と冗長領域４２ｂ２とを合わせた領域にそれぞれ１ページ分のデータが保持される。同様に、データレジスタの記憶領域４３ａ１と冗長領域４３ａ２とを合わせた領域、記憶領域４３ｂ１と冗長領域４３ｂ２とを合わせた領域にそれぞれ１ページ分のデータが保持される。
【００５３】
ＮＡＮＤ型のフラッシュメモリ３１において、書き込みや読み出しはページ単位で行われ、消去はブロック単位で行われる。たとえば、プレーン４０ａのブロック４１ａ内のページには、１ページ分の書き込みデータが、キャッシュレジスタの記憶領域４２ａ１と冗長領域４２ａ２と、データレジスタの記憶領域４３ａ１と冗長領域４３ａ２を介して書き込まれる。各ページに含まれる全メモリセルの初期値は、論理値“１”である。
【００５４】
次に、制御回路３２ｂによるメモリ制御方法として、データ変換及び書き込み処理の一例を説明する。
図４は、データ変換及び書き込み処理の一例を示す図である。
【００５５】
Ｉ／Ｆ３２ａがプロセッサ３５から書き込みデータを受信すると（ステップＳ１）、制御回路３２ｂは、書き込みデータを、８ビットのビット列単位に分割する（ステップＳ２）。そして、制御回路３２ｂは、分割した複数のビット列のうちの１つを選択する（ステップＳ３）。
【００５６】
その後、制御回路３２ｂは、選択したビット列において、論理値“０”の数が２ビット以下であるか否かを判定する（ステップＳ４）。論理値“０”の数が２ビット以下である場合、制御回路３２ｂは、無変換のビット列を付加値“０１１”と対応付けて、フラッシュメモリ３１に書き込む（ステップＳ５）。
【００５７】
論理値“０”の数が２ビットより多い場合、制御回路３２ｂは、論理値“０”の数が６ビット以上であるか否かを判定する（ステップＳ６）。論理値“０”の数が６ビット以上である場合、制御回路３２ｂは、選択したビット列に対して全ビット反転処理を行うことで反転ビット列を生成する（ステップＳ７）。その後、制御回路３２ｂは、反転ビット列を付加値“１１１”と対応付けて、フラッシュメモリ３１に書き込む（ステップＳ８）。
【００５８】
論理値“０”の数が６ビット以上ではない場合、制御回路３２ｂは、ステップＳ７の処理と同様に反転ビット列を生成するとともに、その反転ビット列と、元のビット列の下位４ビットとの論理和により、第１変換後ビット列を生成する（ステップＳ９）。そして、制御回路３２ｂは、生成した第１変換後ビット列において、論理値“０”の数が２ビット以下であるか否かを判定する（ステップＳ１０）。第１変換後ビット列における論理値“０”の数が２ビット以下である場合、制御回路３２ｂは、第１変換後ビット列を、付加値“１０１”と復元コード（ビット列の下位４ビット）と対応付けてフラッシュメモリ３１に書き込む（ステップＳ１１）。
【００５９】
第１変換後ビット列における論理値“０”の数が２ビットより多い場合、制御回路３２ｂは、元のビット列と、反転ビット列の下位４ビットとの論理和により第２変換後ビット列を生成する（ステップＳ１２）。そして、制御回路３２ｂは、第２変換後ビット列を、付加値“００１”と復元コード（反転ビット列の下位４ビット）と対応付けてフラッシュメモリ３１に書き込む（ステップＳ１３）。
【００６０】
ステップＳ５，Ｓ８，Ｓ１１，Ｓ１３の後、制御回路３２ｂは、分割した全ビット列を選択したか否かを判定する（ステップＳ１４）。分割した全ビット列が選択されていない場合に、制御回路３２ｂは、ステップＳ３からの処理を繰り返し、全ビット列が選択された場合には、処理を終了する。
【００６１】
なお、上記の処理順序は一例であり、適宜順序を入れ替えてもよい。
ところで、付加値や復元コードは、たとえば、図３のブロック４１ａ，４１ｂに含まれるページにおいて、冗長領域４２ａ２，４２ｂ２，４３ａ２，４３ｂ２に対応する領域に書き込まれるようにしてもよい。また、付加値や復元コードは、対応する８ビットのビット列に続けて、図３のブロック４１ａ，４１ｂに含まれるページにおいて、記憶領域４２ａ１，４２ｂ１，４３ａ１，４３ｂ１に対応する領域に書き込まれるようにしてもよい。
【００６２】
図５は、論理値“０”のビット数に応じて適用される変換処理、付加値及び復元コードと、実際に書き込まれるデータにおける論理値“０”のビット数をまとめた例を示す図である。
【００６３】
分割によって得られた８ビットのビット列において、論理値“０”の数が０〜２ビットの場合には、図４のステップＳ５の処理のように、ビット列は変換されずに書き込まれる。付加値には論理値“０”が１ビット含まれ、復元コードは未使用（または全て論理値“１”になっている）である。そのため、実際に書き込まれるデータ（８ビット＋３ビット＋４ビットのデータ）のうち、論理値“０”の数は、ビット列に含まれる論理値“０”の数＋１ビットとなる。
【００６４】
８ビットのビット列において、論理値“０”の数が６〜８ビットの場合には、図４のステップＳ７，Ｓ８の処理のように、ビット列は全ビット反転されて書き込まれる。全ビット反転によって得られる反転ビット列に含まれる論理値“０”の数は、０〜２ビットである。付加値には論理値“０”が含まれず、復元コードは未使用（または全て論理値“１”になっている）である。そのため、実際に書き込まれるデータのうち、論理値“０”の数は、０〜２ビットとなる。
【００６５】
８ビットのビット列において、論理値“０”の数が３〜５ビットの場合には、図４のステップＳ９の処理のように、元のビット列は、反転ビット列と元のビット列の下位４ビットの論理和に変換される（前述の第１変換後ビット列が生成される）。この第１変換後ビット列において、論理値“０”の数が２ビット以下の場合には、ステップＳ１１の処理のように、第１変換後ビット列が書き込まれる。この変換処理が適用される場合の付加値には論理値“０”が１ビット含まれる。復元コードである元のビット列の下位４ビットに含まれる論理値“０”の数を合わせると、実際に書き込まれるデータのうち、論理値“０”の数は、６ビット以下になる。
【００６６】
第１変換後ビット列において、論理値“０”の数が２ビットより多い場合には、図４のステップＳ１２の処理のように、元のビット列は、元のビット列と反転ビット列の下位４ビットの論理和に変換される（前述の第２変換後ビット列が生成される）。そして、ステップＳ１３の処理のように、その第２変換後ビット列が書き込まれる。第２変換後ビット列に含まれる論理値“０”の数は、１ビット以下になる。この変換処理が適用される場合の付加値には論理値“０”が２ビット含まれる。復元コードである元のビット列の下位４ビットに含まれる論理値“０”の数を合わせると、実際に書き込まれるデータのうち、論理値“０”の数は、５ビット以下になる。
【００６７】
図５のように、元のビット列において、論理値“０”の数が３〜５ビットの場合、復元コードによっては、実際に書き込まれるデータの論理値“０”の数が、５ビットまたは６ビットになる場合がある。しかしながら、８ビットのビット列の全データパターン（２５６パターン）で見た場合には、実際にフラッシュメモリ３１に書き込まれる論理値“０”の割合を、単に論理値“０”の数が論理値“１”の数よりも多い場合に全ビット反転する方法よりも少なくできる。このため、単に論理値“０”の数が論理値“１”の数よりも多い場合に全ビット反転する方法よりも、平均の書き込み時間を短縮できる。以下その計算例を説明する。
【００６８】
（書き込み時間の計算例）
図６は、８ビットのビット列の全データパターンにおいて、変換処理後に実際に書き込まれるデータの論理値“０”の数とその割合の計算結果の例を示す図である。
【００６９】
たとえば、元のビット列が“０００００００１”である場合、図４のステップＳ７の処理によって、実際にフラッシュメモリ３１に書き込まれるビット列は“１１１１１１１０”になる。また、付加値と復元コードには論理値“０”は含まれないため、実際フラッシュメモリ３１に書き込まれるデータの論理値“０”の数は１ビットになる。そして、書き込まれるビット列と付加値と復元コードを合わせた全１５ビット中の論理値“０”の割合は１／１５＝０．０６７となる。
【００７０】
全２５６のデータパターン中、実際に書き込まれる１５ビットのデータの論理値“０”の数が、０ビットとなり、上記割合が０／１５＝０．０００となるデータパターンの数は１パターンである。また、そのデータの論理値“０”の数が１ビットとなり、上記割合が１／１５＝０．０６７となるデータパターンの数は１０パターン、論理値“０”の数が２ビットとなり、上記割合が２／１５＝０．１３３となるデータパターンの数は４５パターンである。また、そのデータの論理値“０”の数が３ビットとなり、上記割合が３／１５＝０．２００となるデータパターンの数は５２パターン、論理値“０”の数が４ビットとなり、上記割合が４／１５＝０．２６７となるデータパターンの数は６４パターンである。また、そのデータの論理値“０”の数が５ビットとなり、上記割合が５／１５＝０．３３３となるデータパターンの数は６０パターン、論理値“０”の数が６ビットとなり、上記割合が６／１５＝０．４００となるデータパターンの数は２４パターンである。
【００７１】
相対書き込み時間を、割合×その割合となるパターン数とした場合、実際に書き込まれる１５ビットのデータの論理値“０”の数が０ビットとなるデータパターンの相対書き込み時間は、０．０００×１＝０となる。また、そのデータの論理値“０”の数が１ビットとなるデータパターンの相対書き込み時間は、０．０６７×１０＝０．６６７となり、そのデータの論理値“０”の数が２ビットとなるデータパターンの相対書き込み時間は、０．１３３×４５＝６となる。また、そのデータの論理値“０”の数が３ビットとなるデータパターンの相対書き込み時間は、０．２００×５２＝１０．４となり、そのデータの論理値“０”の数が４ビットとなるデータパターンの相対書き込み時間は、０．２６７×６４＝１７．０６７となる。また、そのデータの論理値“０”の数が５ビットとなるデータパターンの相対書き込み時間は、０．３３３×６０＝２０となり、そのデータの論理値“０”の数が６ビットとなるデータパターンの相対書き込み時間は、０．４００×２４＝９．６となる。
【００７２】
したがって、全データパターンが均等に発生する場合（書き込みデータがランダムデータの場合）、平均の相対書き込み時間は、（０＋０．６６７＋６＋１０．４＋１７．０６７＋２０＋９．６）／２５６＝０．２４９となる。
【００７３】
一方、８ビットのビット列において、論理値“０”の数が、４ビット以下の場合には変換せず、付加値“１”を加えて書き込み、４ビットより多い場合には反転ビット列と付加値“０”を加えて書き込む場合、平均の相対書き込み時間は以下のようになる。なお、この場合、付加値は、全ビット反転したか否かを示している。
【００７４】
全２５６のデータパターン中、実際に書き込まれる９ビット（ビット列の８ビットと付加値の１ビット）のデータの論理値“０”の数が０ビットとなり、上記割合が０／９＝０．０００となるデータパターンの数は１パターンである。また、そのデータの論理値“０”の数が１ビットとなり、上記割合が１／９＝０．１１１となるデータパターンの数は９パターン、論理値“０”の数が２ビットとなり、上記割合が２／９＝０．２２２となるデータパターンの数は３６パターンである。また、そのデータの論理値“０”の数が３ビットとなり、上記割合が３／９＝０．３３３となるデータパターンの数は８４パターン、論理値“０”の数が４ビットとなり、上記割合が４／９＝０．４４４となるデータパターンの数は１２６パターンである。
【００７５】
相対書き込み時間を、割合×その割合となるパターン数とした場合、実際に書き込まれる９ビットのデータの論理値“０”の数が０ビットとなるデータパターンの相対書き込み時間は、０．０００×１＝０となる。また、そのデータの論理値“０”の数が１ビットとなるデータパターンの相対書き込み時間は、０．１１１×９＝１となり、そのデータの論理値“０”の数が２ビットとなるデータパターンの相対書き込み時間は、０．２２２×３６＝８となる。また、そのデータの論理値“０”の数が３ビットとなるデータパターンの相対書き込み時間は、０．３３３×８４＝２８となり、そのデータの論理値“０”の数が４ビットとなるデータパターンの相対書き込み時間は、０．４４４×１２６＝５６となる。したがって、全データパターンが均等に発生する場合（書き込みデータがランダムデータの場合）、平均の相対書き込み時間は、（０＋１＋８＋２８＋５６）／２５６＝０．３６３となる。
【００７６】
この相対書き込み時間を１とすると、図４に示したようなデータ変換及び書き込み処理による平均の相対書き込み時間は、０．２４９／０．３６３＝０．６８５となる。つまり、図４に示したようなデータ変換及び書き込み処理によれば、単に論理値“０”の数が論理値“１”の数よりも多い場合に全ビット反転する方法よりも、約３１％、書き込み時間の短縮が期待できる。
【００７７】
また、書き込み時間の短縮は、書き込み数の低減により得られるため、メモリセル３１ａ１〜３１ａｎにおける絶縁層の劣化を遅らせることが可能となり、フラッシュメモリ３１の長寿命化（高信頼性）の効果も期待できる。
【００７８】
ところで、付加値は上記の例に限定されない。たとえば、以下のような付加値を用いても同じ効果を得ることができる。
図７は、付加値として使用できる複数の組合せの一例を示す図である。
【００７９】
図７では、処理１〜４のそれぞれで用いられる付加値の組み合わせを示している。処理１は図４のステップＳ５の処理、処理２は図４のステップＳ８の処理、処理３は図４のステップＳ１１の処理、処理４は図４のステップＳ１３の処理を示している。
【００８０】
組合せＮｏ．１の４つの付加値は、上記の例と同じ付加値である。４つの処理１〜４を区別でき、かつ、処理１，３で用いられる付加値の論理値“０”の数が１ビットで、処理２で用いられる付加値の論理値“０”の数が０ビットで、処理４で用いられる付加値の論理値“０”の数が２ビットであれば、図７の他の組合せでもよい。
【００８１】
なお、付加値を４ビット以上としてもよい。これにより、付加値に含まれる論理値“０”の数を１ビット以下にできる。
読み出し処理については上記のような付加値や復元コードを用いて、第１の実施の形態で説明した処理と同様の処理により元のビット列を復元できる。
【００８２】
ところで、図４のステップＳ９の処理では、ビット列の下位４ビットが用いられ、ステップＳ１２の処理では、反転ビット列の下位４ビットが用いられているが、これに限定されない。ビット列の上位４ビット及び反転ビット列の上位４ビットを用いてもよい。
【００８３】
図８は、データ変換及び書き込み処理の他の例を示す図である。
制御回路３２ｂは、図４のステップＳ９の処理の代わりに、反転ビット列と、ビット列の上位４ビットとの論理和により第１変換後ビット列を生成するステップＳ９ａの処理を行う。また、制御回路３２ｂは、図４のステップＳ１２の処理の代わりに、ビット列と、反転ビット列の上位４ビットとの論理和により第２変換後ビット列を生成するステップＳ１２ａの処理を行う。
【００８４】
なお、ステップＳ１１の処理において用いられる復元コードは、ビット列の上位４ビットとなり、ステップＳ１３の処理において用いられる復元コードは、反転ビット列の上位４ビットとなる。その他の処理は、図４に示した処理と同じである。
【００８５】
図８に示すようなデータ変換及び書き込み処理が行われる場合の平均の相対書き込み時間も、０．２４９となり、図４に示したデータ変換及び書き込み処理が行われる場合と、同様の効果が得られる。
【００８６】
また、上記図４、図８の例では、８ビットのビット列を用いる場合について説明したが、これに限定されない。たとえば、１６ビットのビット列を用いることもできる。
図９は、１６ビットのビット列を用いる場合のデータ変換及び書き込み処理の例を示す図である。
【００８７】
制御回路３２ｂは、図４のステップＳ２の処理の代わりに、書き込みデータを１６ビットのビット列単位に分割するステップＳ２ａの処理を行う。また、制御回路３２ｂは、図４のステップＳ４の処理の代わりに、選択した１６ビットのビット列において、論理値“０”の数が４ビット以下であるか否かを判定するステップＳ４ａの処理を行う。また、制御回路３２ｂは、図４のステップＳ６の処理の代わりに、選択した１６ビットのビット列において、論理値“０”の数が１２ビット以上であるか否かを判定するステップＳ６ａの処理を行う。さらに、制御回路３２ｂは、図４のステップＳ９の処理の代わりに、反転ビット列と、ビット列の下位８ビットとの論理和により第１変換後ビット列を生成するステップＳ９ｂの処理を行う。また、制御回路３２ｂは、図４のステップＳ１０の処理の代わりに、第１変換後ビット列において、論理値“０”の数が４ビット以下であるか否かを判定するステップＳ１０ａの処理を行う。また、制御回路３２ｂは、ステップＳ１２の処理の代わりに、ビット列と、反転ビット列の下位８ビットとの論理和により第２変換後ビット列を生成するステップＳ１２ｂの処理を行う。
【００８８】
なお、ステップＳ１１の処理において用いられる復元コードは、ビット列の下位８ビットとなり、ステップＳ１３の処理において用いられる復元コードは、反転ビット列の下位８ビットとなる。その他の処理は、図４に示した処理と同じである。
【００８９】
また、制御回路３２ｂは、ステップＳ９ｂの処理で、反転ビット列と、ビット列の上位８ビットとの論理和により第１変換後ビット列を生成してもよい。その場合、制御回路３２ｂは、ステップＳ１２ｂの処理では、ビット列と、反転ビット列の上位８ビットとの論理和により第２変換後ビット列を生成する。また、ステップＳ１１の処理において用いられる復元コードは、ビット列の上位８ビットとなり、ステップＳ１３の処理において用いられる復元コードは、反転ビット列の上位８ビットとなる。
【００９０】
１６ビットのビット列の全データパターン数は、６５５３６である。図９のデータ変換及び書き込み処理が行われる場合の平均の相対書き込み時間は、８ビットのビット列を用いた場合と同様の計算方法により得られ、０．２９１となる。一方、１６ビットのビット列において、論理値“０”の数が、８ビット以下の場合には変換せず、付加値“１”を加えて書き込み、８ビットより多い場合には反転ビット列と付加値“０”を加えて書き込む場合の平均の相対書き込み時間は、０．４０２となる。
【００９１】
したがって、図９のデータ変換及び書き込み処理が行われる場合も、単に論理値“０”の数が論理値“１”の数よりも多い場合に全ビット反転する方法よりも、書き込み時間の短縮が期待できる。
【００９２】
ところで、上記のようなデータ変換処理は、コントローラＩＣ３２の制御回路３２ｂが行う代わりに、ＳＳＤ３０の外部の制御回路であるプロセッサ３５が行ってもよい。
図１０は、ＳＳＤ外部のプロセッサがデータ変換処理を行う例を示す図である。
【００９３】
ＳＳＤ５０の内部のコントローラＩＣ５１は、データ変換方式管理機能を有しておらず、ＳＳＤ５０に接続されたプロセッサ３５ａがその機能を実行する。つまり、プロセッサ３５ａが、フラッシュメモリ３１または他のメモリに記憶されたプログラムを実行することで、図４、図８または図９の処理を行ってもよい。
【００９４】
また、図１０の例では、プロセッサ３５ａは、処理したビット列を、コントローラＩＣ５１を介してフラッシュメモリ３１に書き込むが、これに限定されない。
図１１は、プロセッサが直接メモリセル単体に書き込む例を示す図である。
【００９５】
図１１には、プロセッサ３５ａの他、メモリセル６０ａ１〜６０ａｎを有するフラッシュメモリ６０ａ、ＤＲＡＭ（Dynamic Random Access Memory）６０ｂ１〜６０ｂｎ、その他のデバイス６０ｃ１〜６０ｃｎがバス６１に接続された例が示されている。
【００９６】
プロセッサ３５ａは、図４、図８または図９の処理によって変換したビット列や付加値及び復元コードを、バス６１を介して、メモリセル６０ａ１〜６０ａｎに直接書き込んでもよい。
【００９７】
なお、上記ではフラッシュメモリ３１，６０ａを用いたが、これに限定されず、書き込み時間が、メモリセルの初期値（消去状態の論理値）から反転させるビット数に依存する他の不揮発性メモリを用いることもできる。
【００９８】
以上、実施の形態に基づき、本発明のメモリ制御回路、メモリ及びメモリ制御方法の一観点について説明してきたが、これらは一例にすぎず、上記の記載に限定されるものではない。
【符号の説明】
【００９９】
１０  メモリ
１１  記憶部
１１ａ１〜１１ａｎ  メモリセル
１２  メモリ制御回路
１２ａ，１２ｃ  Ｉ／Ｆ
１２ｂ  制御回路
１５  制御回路（プロセッサ）
２０  書き込みデータ
２１，２２，２３，２４，２１ｂ  ビット列
２１ａ，２１ｄ  反転ビット列
２１ｃ  第１変換後ビット列
２１ｅ  第２変換後ビット列
２５ａ〜２５ｄ  付加値
２６ａ，２６ｂ  復元コード
【図１】
2019023951.tif 000003
【図２】
2019023951.tif 000004
【図３】
2019023951.tif 000005
【図４】
2019023951.tif 000006
【図５】
2019023951.tif 000007
【図６】
2019023951.tif 000008
【図７】
2019023951.tif 000009
【図８】
2019023951.tif 000010
【図９】
2019023951.tif 000011
【図１０】
2019023951.tif 000012
【図１１】
2019023951.tif 000013