(57)【要約】【課題】記憶媒体のエラーレートを低減させること。【解決手段】データ変換装置１０１は、記憶媒体１１０に書き込まれる書込データ２００をホスト１０２から受け付ける。データ変換装置１０１は、受け付けた書込データ２００を特定のビット数単位で区切ったデータ群に基づいて、データ群に含まれるビットパターンＰのデータの個数を計数する。データ変換装置１０１は、計数した計数結果が多い順にビットパターンＰ１〜Ｐｍから選ばれた変換元となるビットパターンと、「１」の個数が多い順にビットパターンＰ１〜Ｐｍから選ばれた変換先となるビットパターンとを対応付ける。データ変換装置１０１は、変換元となるビットパターンごとに、データｄ１〜ｄｎに含まれる変換元となるビットパターンのデータを、変換元となるビットパターンに対応付けた変換先となるビットパターンのデータに変換する。【選択図】図２
2014010670.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが、
記憶保持されるビット単位の二種の値のうち一方の値が他方の値よりもビットエラーの発生率が高くなる特性を有する記憶媒体に書き込まれる書込データを特定のビット数の単位で区切ったデータ群に基づいて、前記ビット数のビット列が取り得るビットパターン群のうち前記データ群に出現するビットパターンごとに、前記データ群に含まれる前記ビットパターンのデータの個数を計数し、
計数した計数結果が多い順に前記ビットパターン群から選ばれた変換元となるビットパターンと、前記他方の値の個数が多い順に前記ビットパターン群から選ばれた変換先となるビットパターンとを対応付け、
前記変換元となるビットパターンごとに、前記データ群に含まれる前記変換元となるビットパターンのデータを、前記変換元となるビットパターンに対応付けた前記変換先となるビットパターンのデータに変換する、
処理を実行することを特徴とするデータ変換方法。
【請求項２】
前記コンピュータが、
対応付けた前記変換元となるビットパターンと前記変換先となるビットパターンとの対応関係を表す対応情報を作成し、
変換した変換後のデータ群と、作成した前記対応情報とを関連付けて前記記憶媒体に出力する、
処理を実行することを特徴とする請求項１に記載のデータ変換方法。
【請求項３】
前記コンピュータが、
前記変換後のデータ群と前記対応情報とを前記記憶媒体から取得し、
取得した前記対応情報に基づいて、取得した前記変換後のデータ群に含まれる各データのビットパターンを変換先となるビットパターンとして、前記各データを、前記変換先となるビットパターンに対応する変換元となるビットパターンのデータに変換する、
処理を実行することを特徴とする請求項２に記載のデータ変換方法。
【請求項４】
前記計数する処理は、
前記ビットパターン群のうち前記他の値の個数が前記ビット数の半数未満となるビットパターンの計数結果に重み付けすることを特徴とする請求項１〜３のいずれか一つに記載のデータ変換方法。
【請求項５】
コンピュータが、
記憶保持されるビット単位の二種の値のうち一方の値が他方の値よりもビットエラーの発生率が高くなる特性を有する記憶媒体に書き込まれる書込データを区切ったデータ群から選ばれたデータごとに、前記データに含まれる前記一方の値の個数を計数し、
計数した前記個数が前記データに含まれる全ビットのビット数の過半数となる場合、前記データを、前記データに含まれる各ビットの値を反転したデータに変換する、
処理を実行することを特徴とするデータ変換方法。
【請求項６】
記憶保持されるビット単位の二種の値のうち一方の値が他方の値よりもビットエラーの発生率が高くなる特性を有する記憶媒体に書き込まれる書込データを特定のビット数の単位で区切ったデータ群に基づいて、前記ビット数のビット列が取り得るビットパターン群のうち前記データ群に出現するビットパターンごとに、前記データ群に含まれる前記ビットパターンのデータの個数を計数する計数部と、
前記計数部によって計数された計数結果が多い順に前記ビットパターン群から選ばれた変換元となるビットパターンと、前記他方の値の個数が多い順に前記ビットパターン群から選ばれた変換先となるビットパターンとを対応付ける対応付け部と、
前記変換元となるビットパターンごとに、前記データ群に含まれる前記変換元となるビットパターンのデータを、前記対応付け部によって前記変換元となるビットパターンに対応付けられた前記変換先となるビットパターンのデータに変換する変換部と、
を有することを特徴とするデータ変換装置。
【請求項７】
記憶保持されるビット単位の二種の値のうち一方の値が他方の値よりもビットエラーの発生率が高くなる特性を有する記憶媒体に書き込まれる書込データを区切ったデータ群から選ばれたデータごとに、前記データに含まれる前記一方の値の個数を計数する計数部と、
前記計数部によって計数された前記個数が前記データに含まれる全ビットのビット数の過半数となる場合、前記データを、前記データに含まれる各ビットの値を反転したデータに変換する変換部と、
を有することを特徴とするデータ変換装置。
【請求項８】
コンピュータに、
記憶保持されるビット単位の二種の値のうち一方の値が他方の値よりもビットエラーの発生率が高くなる特性を有する記憶媒体に書き込まれる書込データを特定のビット数の単位で区切ったデータ群に基づいて、前記ビット数のビット列が取り得るビットパターン群のうち前記データ群に出現するビットパターンごとに、前記データ群に含まれる前記ビットパターンのデータの個数を計数し、
計数した計数結果が多い順に前記ビットパターン群から選ばれた変換元となるビットパターンと、前記他方の値の個数が多い順に前記ビットパターン群から選ばれた変換先となるビットパターンとを対応付け、
前記変換元となるビットパターンごとに、前記データ群に含まれる前記変換元となるビットパターンのデータを、前記変換元となるビットパターンに対応付けた前記変換先となるビットパターンのデータに変換する、
処理を実行させることを特徴とするデータ変換プログラム。
【請求項９】
コンピュータに、
記憶保持されるビット単位の二種の値のうち一方の値が他方の値よりもビットエラーの発生率が高くなる特性を有する記憶媒体に書き込まれる書込データを区切ったデータ群から選ばれたデータごとに、前記データに含まれる前記一方の値の個数を計数し、
計数した前記個数が前記データに含まれる全ビットのビット数の過半数となる場合、前記データを、前記データに含まれる各ビットの値を反転したデータに変換する、
処理を実行させることを特徴とするデータ変換プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ変換方法、データ変換装置およびデータ変換プログラムに関する。
【背景技術】
【０００２】
従来、ＮＡＮＤ型フラッシュメモリなどの半導体メモリのエラーレート対策として、ＥＣＣ（Ｅｒｒｏｒ  Ｃｈｅｃｋ  ａｎｄ  Ｃｏｒｒｅｃｔ）と呼ばれる技術がある。ＥＣＣは、メモリコントローラが、半導体メモリへのデータの書込時に誤り訂正符号を付加することにより、データの読出時に誤り訂正符号によるエラー訂正を行う技術である。
【０００３】
関連する先行技術としては、例えば、フラッシュメモリのライト操作時に、データをエンコードし、エンコードしたデータの中で特定の数値の個数をエンコード前より減らし、エンコードしたデータをフラッシュメモリ記憶セルに書き込む技術がある。また、第１のデータフォーマットに関連する統計値を用いて、第１のデータフォーマットから第２のデータフォーマットへ情報を変換し、第２のデータフォーマットに変換するために用いる変換値を特定する識別子とともに情報をメモリに格納する技術がある。
【０００４】
また、ランダムアクセスメモリにデータを書込む際に、データのうち所定値を有するビットの数が所定数以上となるように、データを変換してランダムアクセスメモリへ出力する技術がある。また、バーストの順番を並べ替えて生成したｎ種類のライトデータから、メモリに書き込む際のデータ切り替え回数がバーストの順番を並べ替える前よりも少ないライトデータを選択し、ライトデータのバースト並び順を冗長ビットにエンコードする技術がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表２０１０−５２８３８０号公報
【特許文献２】特表２００５−５３７５５１号公報
【特許文献３】特開２００２−３６６４１９号公報
【特許文献４】特開２００８−０５９４４９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、半導体メモリの微細化や多値化などにともなって半導体メモリのエラーレートが高くなってきており、従来技術では、ＥＣＣ等によりエラー訂正を行うことが難しくなってきている。例えば、半導体メモリのエラーレートが高くなると、ＥＣＣに用いる誤り訂正符号のビット数が増大し、メモリコントローラの回路規模や半導体メモリの記憶量の増大化を招く。
【０００７】
１つの側面では、本発明は、記憶媒体のエラーレートを低減させるデータ変換方法、データ変換装置およびデータ変換プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の一側面によれば、記憶保持されるビット単位の二種の値のうち一方の値が他方の値よりもビットエラーの発生率が高くなる特性を有する記憶媒体に書き込まれる書込データを特定のビット数の単位で区切ったデータ群に基づいて、前記ビット数のビット列が取り得るビットパターン群のうち前記データ群に出現するビットパターンごとに、前記データ群に含まれる前記ビットパターンのデータの個数を計数し、計数した計数結果が多い順に前記ビットパターン群から選ばれた変換元となるビットパターンと、前記他方の値の個数が多い順に前記ビットパターン群から選ばれた変換先となるビットパターンとを対応付け、前記変換元となるビットパターンごとに、前記データ群に含まれる前記変換元となるビットパターンのデータを、前記変換元となるビットパターンに対応付けた前記変換先となるビットパターンのデータに変換するデータ変換方法、データ変換装置およびデータ変換プログラムが提案される。
【０００９】
また、本発明の一側面によれば、記憶保持されるビット単位の二種の値のうち一方の値が他方の値よりもビットエラーの発生率が高くなる特性を有する記憶媒体に書き込まれる書込データを区切ったデータ群から選ばれたデータごとに、前記データに含まれる前記一方の値の個数を計数し、計数した前記個数が前記データに含まれる全ビットのビット数の過半数となる場合、前記データを、前記データに含まれる各ビットの値を反転したデータに変換するデータ変換方法、データ変換装置およびデータ変換プログラムが提案される。
【発明の効果】
【００１０】
本発明の一態様によれば、記憶媒体のエラーレートを低減させることができるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施の形態１にかかるデータ変換方法の一実施例を示す説明図である。
【図２】図２は、実施の形態２にかかるデータ変換方法の一実施例を示す説明図である。
【図３】図３は、ストレージ装置３００のハードウェア構成例を示すブロック図である。
【図４】図４は、カウントルール４００の具体例を示す説明図である。
【図５】図５は、カウンタテーブル５００の記憶内容の一例を示す説明図である。
【図６】図６は、変換テーブル６００の記憶内容の一例を示す説明図である。
【図７】図７は、ＮＡＮＤコントローラ３０２の機能的構成例を示すブロック図である。
【図８】図８は、ページフォーマットの一例を示す説明図である。
【図９】図９は、変換テーブル６００の作成例を示す説明図である。
【図１０】図１０は、ＮＡＮＤコントローラ３０２の書込処理手順の一例を示すフローチャート（その１）である。
【図１１】図１１は、ＮＡＮＤコントローラ３０２の書込処理手順の一例を示すフローチャート（その２）である。
【図１２】図１２は、ＮＡＮＤコントローラ３０２の読出処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下に添付図面を参照して、この発明にかかるデータ変換方法、データ変換装置およびデータ変換プログラムの実施の形態を詳細に説明する。
【００１３】
（実施の形態１）
図１は、実施の形態１にかかるデータ変換方法の一実施例を示す説明図である。図１において、データ変換装置１０１は、記憶媒体１１０に書き込まれるデータを変換する機能を有するコンピュータである。具体的には、例えば、データ変換装置１０１は、記憶媒体１１０に対するデータの書き込み／読み出しを制御するメモリコントローラやＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）である。
【００１４】
記憶媒体１１０は、記憶保持されるビット単位の二種の値のうち一方の値が他方の値よりもビットエラーの発生率が高くなる特性を有する。具体的には、例えば、記憶媒体１１０は、ＮＡＮＤ型フラッシュメモリなどの半導体メモリである。
【００１５】
ここで、ＮＡＮＤ型フラッシュメモリは、メモリセルの浮遊ゲート（フローティングゲート）に蓄えられる電子による電荷が、ある状態とない状態によってビット単位の情報を表現する。具体的には、例えば、電荷がある状態が「０」と表現され、電荷がない状態が「１」と表現される。
【００１６】
また、ＮＡＮＤ型フラッシュメモリは、例えば、記憶保持されるビット単位の「０」または「１」の値のうち、「０」のほうが「１」よりもビットエラーの発生率が高くなる特性を有している。具体的には、例えば、ＮＡＮＤ型フラッシュメモリは、メモリセルのトランジスタの閾値電圧の低下により、「０」が「１」に変わるビットエラーが発生しやすい。
【００１７】
このため、書込データに含まれる「０」の比率が５０％を超える場合は、ＮＡＮＤ型フラッシュメモリへの書込時に、メモリコントローラが、書込データに含まれる各ビットの値を反転させることにより、エラーレートを低減させることができる。エラーレートとは、書込データ全体に対するビットエラーの発生率を表すものである。
【００１８】
ところが、書込データに含まれる「０」の比率と「１」の比率がほぼ同程度の場合は、書込データに含まれる各ビットの値を反転させることによるエラーレートの低減効果が小さくなる。例えば、書込データに含まれる「０」の比率が５１％の場合、書込データに含まれる各ビットの値を反転させても、「０」の比率と「１」の比率がほぼ同程度となり、エラーレートの低減効果が小さい。
【００１９】
そこで、実施の形態１では、データ変換装置１０１は、記憶媒体１１０に書き込まれる書込データを任意のビット数で区切ったデータ単位でビット反転制御を行う。具体的には、例えば、データ変換装置１０１は、記憶媒体１１０に書き込まれる書込データを区切ったデータ群から選ばれたデータごとに、データに含まれる特定の値の個数を計数する。
【００２０】
ここで、特定の値は、記憶媒体１１０に記憶保持されるビット単位の二種の値のうちビットエラーの発生率が高いほうの値である。そして、データ変換装置１０１は、計数した特定の値の個数が、データに含まれる全ビットのビット数の過半数となる場合に、データに含まれる各ビットの値を反転させる。
【００２１】
以下、実施の形態１にかかるデータ変換装置１０１のデータ変換処理の一実施例について説明する。以下の説明では、記憶媒体１１０は、記憶保持されるビット単位の「０」または「１」の値のうち、「０」のほうが「１」よりもビットエラーの発生率が高くなる特性を有している場合を想定する。
【００２２】
（１）データ変換装置１０１は、記憶媒体１１０に書き込まれる書込データ１２０をホスト１０２から受け付ける。ホスト１０２は、記憶媒体１１０への書込データ１２０の書き込みを要求するコンピュータである。具体的には、例えば、ホスト１０２は、データ変換装置１０１と記憶媒体１１０とを含むシステム内のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｅｒ）、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）などである。
【００２３】
（２）データ変換装置１０１は、受け付けた書込データ１２０を任意のビット数で区切ったデータ群から選ばれたデータごとに、データに含まれる「０」の個数を計数する。図１の例では、１６ビットの書込データ１２０を４ビット単位で区切ることにより、書込データ１２０がデータ１２０−１〜１２０−４に分割されている。
【００２４】
この場合、データ変換装置１０１は、例えば、データ１２０−１〜１２０−４ごとに、データ１２０−１〜１２０−４に含まれる「０」の個数を計数する。ここでは、データ１２０−１に含まれる「０」の個数は３個である。データ１２０−２に含まれる「０」の個数は１個である。データ１２０−３に含まれる「０」の個数は３個である。データ１２０−４に含まれる「０」の個数は２個である。
【００２５】
（３）データ変換装置１０１は、書込データ１２０を区切ったデータごとに、計数した「０」の個数がデータに含まれる全ビットのビット数の過半数となる場合、データに含まれる各ビットの値を反転する。図１の例では、各データ１２０−１〜１２０−４に含まれる全ビットのビット数は４ビットである。
【００２６】
また、データ１２０−１に含まれる「０」の個数は３個であり、ビット数「４」の過半数となる。このため、データ変換装置１０１は、データ１２０−１に含まれる各ビットの値を反転する。この結果、データ１２０−１が、データ１２０−１に含まれる各ビットの値を反転したものに変換されている。
【００２７】
また、データ１２０−３に含まれる「０」の個数は３個であり、ビット数「４」の過半数となる。このため、データ変換装置１０１は、データ１２０−３に含まれる各ビットの値を反転する。この結果、データ１２０−３が、データ１２０−３に含まれる各ビットの値を反転したものに変換されている。
【００２８】
なお、データ１２０−２，１２０−４については、各データ１２０−２，１２０−４に含まれる「０」の個数がビット数「４」の半数以下のため変換されない。
【００２９】
（４）データ変換装置１０１は、書込データ１２０を区切ったデータごとに、データに含まれる各ビットの値を反転したか否かを示す反転フラグを付加する。図１の例では、データ１２０−１に各ビットの値を反転したことを示す反転フラグ「１」が付加されている。具体的には、例えば、データ１２０−１のビット列の最後尾に反転フラグ「１」が付加されている。
【００３０】
また、データ１２０−２に各ビットの値を反転していないことを示す反転フラグ「０」が付加されている。また、データ１２０−３に各ビットの値を反転したことを示す反転フラグ「１」が付加されている。また、データ１２０−４に各ビットの値を反転していないことを示す反転フラグ「０」が付加されている。
【００３１】
（５）データ変換装置１０１は、書込データ１２０を区切った各データに反転フラグが付加された書込データ１２０を記憶媒体１１０に出力する。これにより、書込データ１２０のうちデータ１２０−１，１２０−３に含まれる各ビットの値が反転された状態で、書込データ１２０が記憶媒体１１０に書き込まれる。
【００３２】
以上説明したように、実施の形態１にかかるデータ変換装置１０１によれば、書込データ１２０を任意のビット数で区切ったデータごとに、データに含まれる「０」の個数を計数することができる。そして、データ変換装置１０１によれば、データに含まれる「０」の個数が、データに含まれる全ビットのビット数の過半数となる場合に、データに含まれる各ビットの値を反転させることができる。
【００３３】
これにより、書込データ１２０を任意のビット数で区切ったデータ単位でビット反転制御を行うことができ、書込データ単位でビット反転制御を行う場合に比べてエラーレートの低減効果を向上させることができる。
【００３４】
図１の例では、書込データ１２０に含まれる「０」の比率は、０．５６（≒９／１６）である。ここで、書込データ１２０をビット数「４」で区切ったデータ単位でビット反転制御を行った場合、ビット反転後の書込データ１２０に含まれる「０」の比率は、０．３１（≒５／１６）となる。一方、書込データ１２０を書込データ単位でビット反転制御を行った場合、ビット反転後の書込データ１２０に含まれる「０」の比率は、０．４４（≒７／１６）となる。
【００３５】
このように、書込データ１２０を区切ったデータ単位でビット反転制御を行うことにより、書込データ単位でビット反転制御を行う場合に比べて、ビット反転後の「０」の比率が低くなっており、エラーレートの低減効果を向上させることができる。
【００３６】
なお、記憶媒体１１０から書込データ１２０を読み出す場合、データ変換装置１０１は、書込データ１２０の各データ１２０−１〜１２０−４に付加されている反転フラグに基づいて、各データ１２０−１〜１２０−４を変換する。
【００３７】
具体的には、例えば、データ変換装置１０１は、反転フラグ「１」が付加されているデータ１２０−１，１２０−３に含まれる各ビットの値を反転する。一方、反転フラグ「０」が付加されているデータ１２０−２，１２０−４については、データ１２０−２，１２０−４に含まれる各ビットの値の反転は行われない。
【００３８】
これにより、記憶媒体１１０から書込データ１２０を読み出す場合に、書込データ１２０に含まれる各データに付加されている反転フラグに基づいて、書込時にビット反転したデータを復元することができる。
【００３９】
（実施の形態２）
つぎに、実施の形態２にかかるデータ変換装置１０１について説明する。なお、実施の形態１で説明した箇所と同一箇所については説明を省略する。
【００４０】
上述した実施の形態１では、書込データを任意のビット数で区切ったデータ単位でビット反転制御を行う場合について説明した。しかしながら、実施の形態１では、各データに反転フラグを付加するため、書込データにおける冗長部分の割合が大きくなり記憶媒体１１０の容量不足を招いてしまう場合がある。
【００４１】
例えば、書込データを４ビット単位で区切る場合、書込データのデータサイズが、元のデータサイズの２５％分増加してしまう。また、例えば、書込データを１６ビット単位で区切る場合、書込データのデータサイズが、元のデータサイズの６．３％分増加してしまう。
【００４２】
そこで、実施の形態２では、記憶媒体１１０のエラーレートを低減させるとともに、書込データにおける冗長部分の増加を抑制するデータ変換方法について説明する。以下、実施の形態２にかかるデータ変換方法の一実施例について説明する。
【００４３】
図２は、実施の形態２にかかるデータ変換方法の一実施例を示す説明図である。
【００４４】
（１）データ変換装置１０１は、記憶媒体１１０に書き込まれる書込データ２００をホスト１０２から受け付ける。
【００４５】
（２）データ変換装置１０１は、受け付けた書込データ２００を特定のビット数単位で区切ったデータ群に基づいて、データ群に含まれるビットパターンＰのデータの個数を計数する。ここで、特定のビット数は、書込データ２００を区切るデータ幅を表しており、任意に設定可能である。特定のビット数は、例えば、４ビットや１６ビットなどである。
【００４６】
また、ビットパターンＰは、特定のビット数のビット列が取り得るビットパターン群のうち、書込データ２００を特定のビット数単位で区切ったデータ群に出現するビットパターンである。なお、ビットパターンとは、ビット列に含まれるビットの組み合わせのパターンである。
【００４７】
以下の説明では、書込データ２００を特定のビット数単位で区切ったデータ群を「データｄ１〜ｄｎ」と表記する場合がある。図２の例では、書込データ２００が４ビット単位で区切られている。また、特定のビット数のビット列が取り得るビットパターン群を「ビットパターンＰ１〜Ｐｍ」と表記する場合がある。図２の例では、特定のビット数が「４」のため、ビット数「４」のビット列が取り得るビットパターンは、ビットパターンＰ１〜Ｐ１６の１６通りとなる。なお、図２では、４ビットのビット列を１６進数で表記している。
【００４８】
（３）データ変換装置１０１は、計数した計数結果が多い順にビットパターンＰ１〜Ｐｍから選ばれた変換元となるビットパターンと、「１」の個数が多い順にビットパターンＰ１〜Ｐｍから選ばれた変換先となるビットパターンとを対応付ける。
【００４９】
具体的には、例えば、データ変換装置１０１は、変換元となるビットパターンとして、ビットパターンＰ１〜Ｐｍの中から、計数した計数結果が最も多いビットパターンを選択する。また、データ変換装置１０１は、変換先となるビットパターンとして、ビットパターンＰ１〜Ｐｍの中から、「１」の個数が最も多いビットパターンを選択する。
【００５０】
そして、データ変換装置１０１は、選択した変換元となるビットパターンと、選択した変換先となるビットパターンとを対応付ける。データ変換装置１０１は、例えば、ビットパターンＰ１〜Ｐｍの中から、計数した計数結果が１以上の未選択のビットパターンがなくなるまで変換元となるビットパターンを繰り返し選択する。
【００５１】
図２の例では、ビットパターンＰ１５の計数結果が最も多く、ビットパターンＰ１０の計数結果が２番目に多く、ビットパターンＰ５の計数結果が３番目に多くなっている場合を想定する。また、説明を簡単にするため、ビットパターンＰ５，Ｐ１０，Ｐ１５以外のビットパターンがデータｄ１〜ｄｎに出現しない場合を想定する。
【００５２】
この場合、まず、データ変換装置１０１は、変換元となるビットパターンとしてビットパターンＰ１５を選択し、変換先となるビットパターンとしてビットパターンＰ１を選択する。なお、ビットパターンＰ１は、ビットパターンＰ１〜Ｐ１５のうち「１」の個数が最も多いビットパターンである。そして、データ変換装置１０１は、選択した変換元となるビットパターンＰ１５と、選択した変換先となるビットパターンＰ１とを対応付ける。
【００５３】
つぎに、データ変換装置１０１は、変換元となるビットパターンとしてビットパターンＰ１０を選択し、変換先となるビットパターンとしてビットパターンＰ２を選択する。なお、ビットパターンＰ２は、ビットパターンＰ１〜Ｐ１５のうち「１」の個数が２番目に多いビットパターンである。そして、データ変換装置１０１は、選択した変換元となるビットパターンＰ１０と、選択した変換先となるビットパターンＰ２とを対応付ける。
【００５４】
つぎに、データ変換装置１０１は、変換元となるビットパターンとしてビットパターンＰ５を選択し、変換先となるビットパターンとしてビットパターンＰ３を選択する。なお、ビットパターンＰ３は、ビットパターンＰ１〜Ｐ１５のうち「１」の個数が３番目に多いビットパターンである。そして、データ変換装置１０１は、選択した変換元となるビットパターンＰ５と、選択した変換先となるビットパターンＰ３とを対応付ける。
【００５５】
これにより、データｄ１〜ｄｎに出現する頻度が高い順に選ばれた変換元となるビットパターンＰ１５，Ｐ１０，Ｐ５と、「１」の個数が多い順に選ばれた変換先となるビットパターンＰ１，Ｐ２，Ｐ３とをそれぞれ対応付けることができる。
【００５６】
（４）データ変換装置１０１は、変換元となるビットパターンごとに、データｄ１〜ｄｎに含まれる変換元となるビットパターンのデータを、変換元となるビットパターンに対応付けた変換先となるビットパターンのデータに変換する。
【００５７】
図２の例では、例えば、変換元となるビットパターンＰ１５のデータｄ１，ｄ３，ｄｎが、変換元となるビットパターンＰ１５に対応付けられた変換先となるビットパターンＰ１のデータｄ１’，ｄ３’，ｄｎ’に変換されている。また、変換元となるビットパターンＰ１０のデータｄ４が、変換元となるビットパターンＰ１０に対応付けられた変換先となるビットパターンＰ２のデータｄ４’に変換されている。また、変換元となるビットパターンＰ５のデータｄ２が、変換元となるビットパターンＰ５に対応付けられた変換先となるビットパターンＰ３のデータｄ２’に変換されている。
【００５８】
（５）データ変換装置１０１は、変換元となるビットパターンのデータを、変換先となるビットパターンのデータに変換した変換後の書込データ２００を記憶媒体１１０に出力する。これにより、データｄ１〜ｄｎのうち、データｄ１〜ｄｎに出現する頻度が高いビットパターンのデータほど、「１」の個数が多いビットパターンのデータに変換された書込データ２００が記憶媒体１１０に書き込まれる。
【００５９】
以上説明したように、実施の形態１にかかるデータ変換装置１０１によれば、データｄ１〜ｄｎに出現する頻度が高いビットパターンのデータほど、「１」の個数が多いビットパターンのデータに変換することができる。これにより、ビットエラーの発生率が低い「１」の個数が変換前よりも多くなるように各データｄ１〜ｄｎを変換した状態で、記憶媒体１１０に書込データ２００を書き込むことができ、記憶媒体１１０のエラーレートを低減させることができる。
【００６０】
（ストレージ装置３００のハードウェア構成例）
つぎに、実施の形態２にかかるデータ変換装置１０１を、ストレージ装置３００に含まれるＮＡＮＤコントローラ３０２に適用した場合を例に挙げて説明する。また、記憶媒体１１０は、ＮＡＮＤフラッシュメモリ３０３に相当する。
【００６１】
図３は、ストレージ装置３００のハードウェア構成例を示すブロック図である。図３において、ストレージ装置３００は、ＣＰＵ３０１と、ＮＡＮＤコントローラ３０２と、ＮＡＮＤフラッシュメモリ３０３と、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）コントローラ３０４と、ＤＲＡＭ３０５と、ディスクコントローラ３０６と、ハードディスク３０７と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）３０８と、を含む。また、各構成部はバス３１０によってそれぞれ接続されている。
【００６２】
ここで、ＣＰＵ３０１は、ストレージ装置３００の全体の制御を司る。ＮＡＮＤコントローラ３０２は、ＮＡＮＤフラッシュメモリ３０３に対するデータの書き込み／読み出しを制御する。また、ＮＡＮＤコントローラ３０２は、ＮＡＮＤフラッシュメモリ３０３に書き込むデータやＮＡＮＤフラッシュメモリ３０３から読み出したデータを一時的に記憶するデータバッファ３０９を有する。
【００６３】
ＮＡＮＤフラッシュメモリ３０３は、ＮＡＮＤコントローラ３０２の制御で書き込まれたデータを記憶する。ＮＡＮＤフラッシュメモリ３０３では、メモリセルを駆動するための導線を複数のメモリセルで共有しているため、ページ単位でデータの読み書きが行われる。ページの大きさは、例えば、４キロバイト、８キロバイトなどである。データバッファ３０９は、例えば、ＣＰＵ３０１から送信される３２〜２５６バイト前後のデータを、ページ単位の書込データに成形するための待ち合わせ処理に用いられる。ＮＡＮＤフラッシュメモリ３０３は、例えば、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）やアプリケーションプログラムなどを記憶している。
【００６４】
ＤＲＡＭコントローラ３０４は、ＤＲＡＭ３０５に対するデータの書き込み／読み出しを制御する。ＤＲＡＭ３０５は、ＤＲＡＭコントローラ３０４の制御で書き込まれたデータを記憶する。ＤＲＡＭ３０５は、例えば、ＣＰＵ３０１のワークエリアとして使用される。ディスクコントローラ３０６は、ハードディスク３０７に対するデータの書き込み／読み出しを制御する。ハードディスク３０７は、ディスクコントローラ３０６の制御で書き込まれたデータを記憶する。
【００６５】
Ｉ／Ｆ３０８は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークに接続され、このネットワークを介して他のコンピュータに接続される。そして、Ｉ／Ｆ３０８は、ネットワークと内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。Ｉ／Ｆ３０８には、例えば、モデムやＬＡＮアダプタなどを採用することができる。
【００６６】
以下の説明では、ＮＡＮＤフラッシュメモリ３０３に書き込まれるページ単位の書込データを「データＤ」と表記する場合がある。また、データＤをｋビット単位で区切ったデータ群を「ユニットＵ１〜Ｕｎ」と表記し、ユニットＵ１〜Ｕｎのうちの任意のユニットを「ユニットＵｉ」と表記する場合がある（ｉ＝１，２，…，ｎ）。また、ｋビットのビット列が取り得るビットパターン群を「ビットパターンＰ１〜Ｐｍ」と表記し、ビットパターンＰ１〜Ｐｍのうちの任意のビットパターンを「ビットパターンＰｊ」と表記する場合がある（ｍ＝２k、ｊ＝１，２，…，ｍ）。
【００６７】
（カウントルール４００の具体例）
つぎに、ＮＡＮＤコントローラ３０２が用いるカウントルール４００について説明する。カウントルール４００は、ユニットＵ１〜Ｕｎに含まれるビットパターンＰｊのユニットを計数する場合のルールを表すものである。ここでは、ＮＡＮＤフラッシュメモリ３０３に書き込まれるデータＤを４ビット単位（ｋ＝４）で区切る場合のカウントルール４００について説明する。なお、カウントルール４００は、例えば、ＮＡＮＤコントローラ３０２のメモリ（不図示）やＮＡＮＤフラッシュメモリ３０３に記憶されている。
【００６８】
図４は、カウントルール４００の具体例を示す説明図である。図４において、カウントルール４００は、カウンタＩＤとビットパターンと加算値とを対応付けて記憶している。ここで、カウンタＩＤは、カウンタＣ１〜Ｃ１６の識別子である。カウンタＣ１〜Ｃ１６は、例えば、ＮＡＮＤコントローラ３０２が有している。
【００６９】
ビットパターンは、４ビット（ｋ＝４）のビット列に含まれるビットの組み合わせを表すパターンである。ここでは、４ビットのビットパターンが１６進数で表現されている。加算値は、各カウンタＣ１〜Ｃ１６に加算する値であり、任意に設定可能である。
【００７０】
例えば、カウンタＣ１は、ユニットＵ１〜Ｕｎに含まれるビットパターン「０ｘ０」のユニットの個数をカウントするカウンタである。また、カウンタＣ１の加算値は「２」である。すなわち、ユニットＵ１〜Ｕｎにビットパターン「０ｘ０」のユニットが出現するたびに、カウンタＣ１のカウント値に「２」が加算される。
【００７１】
また、例えば、カウンタＣ６は、ユニットＵ１〜Ｕｎに含まれるビットパターン「０ｘＣ」のユニットの個数をカウントするカウンタである。また、カウンタＣ６の加算値は「１」である。すなわち、ユニットＵ１〜Ｕｎにビットパターン「０ｘＣ」のユニットが出現するたびに、カウンタＣ６のカウント値に「１」が加算される。
【００７２】
なお、以下の説明では、各カウンタＣ１〜Ｃ１６に対応する４ビットのビットパターンを便宜上「ビットパターンＰ１〜Ｐ１６」と表記する場合がある。
【００７３】
（カウンタテーブル５００の記憶内容）
つぎに、ＮＡＮＤコントローラ３０２が用いるカウンタテーブル５００について説明する。ここでは、ＮＡＮＤフラッシュメモリ３０３に書き込まれるデータＤを４ビット単位（ｋ＝４）で区切る場合のカウンタテーブル５００について説明する。なお、カウンタテーブル５００は、例えば、ＮＡＮＤコントローラ３０２のメモリ（不図示）やＮＡＮＤフラッシュメモリ３０３により実現される。
【００７４】
図５は、カウンタテーブル５００の記憶内容の一例を示す説明図である。図５において、カウンタテーブル５００は、各カウンタＣ１〜Ｃ１６のカウンタ値を記憶するテーブルである。ここでは、各カウンタＣ１〜Ｃ１６のカウンタ値が１６進数で表現されている。例えば、カウンタＣ１のカウンタ値「０ｘ２６４」が記憶されている。なお、各カウンタＣ１〜Ｃ１６のカウンタ値は、例えば、初期状態では「０ｘ０００」である。
【００７５】
（変換テーブル６００の記憶内容）
つぎに、ＮＡＮＤコントローラ３０２が用いる変換テーブル６００について説明する。変換テーブル６００は、変換元となるビットパターンと変換先となるビットパターンとを対応付けて表す情報である。変換テーブル６００は、例えば、ＮＡＮＤフラッシュメモリ３０３に書き込まれるデータＤごとに作成される。
【００７６】
ここでは、ＮＡＮＤフラッシュメモリ３０３に書き込まれるデータＤを４ビット単位（ｋ＝４）で区切る場合の変換テーブル６００について説明する。なお、変換テーブル６００は、例えば、ＮＡＮＤコントローラ３０２のメモリ（不図示）やＮＡＮＤフラッシュメモリ３０３により実現される。
【００７７】
図６は、変換テーブル６００の記憶内容の一例を示す説明図である。図６において、変換テーブル６００は、エントリ番号、変換元パターンおよび変換先パターンのフィールドを有する。各フィールドに情報を設定することにより、各エントリ１〜１６がレコードとして記憶される。
【００７８】
ここで、エントリ番号は、変換テーブル６００のエントリの番号である。変換元パターンは、変換元となるビットパターンである。変換元パターンフィールドは、初期状態では未設定である。変換先パターンは、変換先となるビットパターンである。各エントリの変換先パターンフィールドには、エントリ番号が小さいものから順に、４ビット（ｋ＝４）のビット列に含まれる「１」の個数が多いビットパターンが予め設定されている。
【００７９】
例えば、エントリ１の変換先パターンフィールドには、「１」の個数が４個のビットパターン「０ｘＦ」が設定されている。また、エントリ２の変換先パターンフィールドには、「１」の個数が３個のビットパターン「０ｘＥ」が設定されている。
【００８０】
（ＮＡＮＤコントローラ３０２の機能的構成例）
つぎに、ＮＡＮＤコントローラ３０２の機能的構成例について説明する。図７は、ＮＡＮＤコントローラ３０２の機能的構成例を示すブロック図である。図７において、ＮＡＮＤコントローラ３０２は、受付部７０１と、計数部７０２と、対応付け部７０３と、変換部７０４と、書込部７０５と、読出部７０６と、復元部７０７と、出力部７０８と、を含む構成である。
【００８１】
各機能部は、例えば、ハードウェアにより実現される。具体的には、例えば、各機能部は、論理積回路であるＡＮＤ、否定論理回路であるＩＮＶＥＲＴＥＲ、論理和回路であるＯＲや、ラッチ回路であるＦＦ（Ｆｌｉｐ  Ｆｌｏｐ）などの素子によって形成されてもよい。また、各機能部は、例えば、Ｖｅｒｉｌｏｇ−ＨＤＬ（Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）などの記述によって機能定義し、その記述を論理合成してＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）によって実現してもよい。また、各機能部は、例えば、ＮＡＮＤコントローラ３０２のメモリ（不図示）やＮＡＮＤフラッシュメモリ３０３に記憶されたプログラムを、ＮＡＮＤコントローラ３０２の演算回路（不図示）に実行させることにより、その機能を実現することにしてもよい。
【００８２】
受付部７０１は、ＮＡＮＤフラッシュメモリ３０３に書き込まれる書込データを受け付ける機能を有する。具体的には、例えば、受付部７０１が、ＣＰＵ３０１からシリアル伝送されるデータＤを受け付ける。受け付けられたデータＤは、例えば、図３に示したデータバッファ３０９に記憶される。
【００８３】
計数部７０２は、受け付けられたデータＤをｋビット単位で区切ったユニットＵ１〜Ｕｎに基づいて、ユニットＵ１〜Ｕｎに含まれるビットパターンＰｊのユニットの個数を計数する機能を有する。具体的には、例えば、計数部７０２は、ビットパターンＰｊに対応するカウンタＣｊにより、ユニットＵ１〜Ｕｎに含まれるビットパターンＰｊのユニットの個数を計数することにしてもよい。
【００８４】
ここで、カウンタＣｊは、ユニットＵ１〜Ｕｎに含まれるビットパターンＰｊのユニットの個数を計数する論理回路である。より具体的には、例えば、計数部７０２は、ＣＰＵ３０１からシリアル伝送されてくる各ユニットＵｉのビットパターンＰｊに対応するカウンタＣｊを選択して、カウンタＣｊのカウンタ値をインクリメントする。
【００８５】
また、計数部７０２は、データバッファ３０９（図３参照）に記憶されたデータＤに基づいて、ユニットＵ１〜Ｕｎに含まれるビットパターンＰｊのユニットの個数を計数することにしてもよい。より具体的には、例えば、計数部７０２は、データバッファ３０９に記憶されたデータＤをｋビット単位で区切ってユニットＵ１〜Ｕｎに分割する。そして、計数部７０２は、分割したユニットＵ１〜Ｕｎの中からユニットＵｉを順次選択して、選択したユニットＵｉのビットパターンに対応するカウンタＣｊのカウンタ値をインクリメントする。
【００８６】
これにより、ｋビットのビット列が取り得るビットパターンＰ１〜ＰｍのうちユニットＵ１〜Ｕｎに出現するビットパターンＰｊごとに、ユニットＵ１〜Ｕｎに含まれるビットパターンＰｊのユニットの個数を計数することができる。なお、計数されたビットパターンＰｊごとの計数結果、すなわち、カウンタＣｊのカウンタ値は、例えば、図５に示したカウンタテーブル５００に記憶される。
【００８７】
対応付け部７０３は、計数した計数結果が多い順にビットパターンＰ１〜Ｐｍから選ばれた変換元となるビットパターンと、「１」の個数が多い順にビットパターンＰ１〜Ｐｍから選ばれた変換先となるビットパターンとを対応付ける機能を有する。ここで、ビットパターンＰ１〜Ｐｍのうち計数結果が多いビットパターンほど、ユニットＵ１〜Ｕｎに出現する頻度が高くなるビットパターンである。
【００８８】
また、ビットパターンＰ１〜Ｐｍのうち「１」の個数が多いビットパターンほど、エラーレートが低くなるビットパターンである。すなわち、対応付け部７０３は、ビットパターンＰ１〜ＰｍのうちユニットＵ１〜Ｕｎに出現する頻度が高いビットパターンほど、エラーレートが低くなるビットパターンに対応付ける。
【００８９】
具体的には、例えば、対応付け部７０３が、カウンタテーブル５００を参照して、図６に示した変換テーブル６００を作成することにしてもよい。なお、変換テーブル６００の作成例については、図９を用いて後述する。
【００９０】
変換部７０４は、変換元となるビットパターンごとに、ユニットＵ１〜Ｕｎに含まれる変換元となるビットパターンのユニットを、変換元となるビットパターンに対応付けられた変換先となるビットパターンのユニットに変換する機能を有する。具体的には、例えば、変換部７０４が、変換テーブル６００を参照して、変換元となるビットパターンのユニットを、変換先となるビットパターンのユニットに変換する。なお、ユニットの変換例については、図９を用いて後述する。
【００９１】
以下の説明では、ユニットＵ１〜Ｕｎに含まれる変換元となるビットパターンのユニットを、変換先となるビットパターンのユニットに変換した変換後のユニット群を「ユニットＵ１’〜Ｕｎ’」と表記する場合がある。
【００９２】
書込部７０５は、ＮＡＮＤフラッシュメモリ３０３に書込データを書き込む機能を有する。具体的には、例えば、書込部７０５が、変換された変換後のデータＤと、対応付け部７０３によって作成された変換テーブル６００とを関連付けてＮＡＮＤフラッシュメモリ３０３に出力することにしてもよい。なお、変換後のデータＤは、ユニットＵ１’〜Ｕｎ’である。
【００９３】
この結果、変換後のデータＤ（ユニットＵ１’〜Ｕｎ’）と変換テーブル６００とが関連付けられてＮＡＮＤフラッシュメモリ３０３に書き込まれる。ここで、ＮＡＮＤフラッシュメモリ３０３に書き込まれる変換後のデータＤのページフォーマットの一例について説明する。
【００９４】
図８は、ページフォーマットの一例を示す説明図である。図８において、ＤＡＴＡ領域８１０とＳＰＡＲＥ領域８２０は、ＮＡＮＤフラッシュメモリ３０３のページ単位の記憶領域である。ＤＡＴＡ領域８１０は、ページ単位の変換後のデータＤ、すなわち、ユニットＵ１’〜Ｕｎ’が書き込まれる領域である。ＤＡＴＡ領域８１０の大きさは、例えば、４ＫＢ、８ＫＢなどである。
【００９５】
ＳＰＡＲＥ領域８２０は、変換後のデータＤと関連付けて出力された変換テーブル６００が書き込まれる領域である。ＳＰＡＲＥ領域８２０の大きさは、例えば、データＤの大きさの５％程度である。ＳＰＡＲＥ領域８２０には、変換テーブル６００のほかに、例えば、誤り訂正符号（ＥＣＣ）などが書き込まれることにしてもよい。
【００９６】
なお、変換テーブル６００のデータサイズは、ｋビットのビット列が取り得るビットパターンの数（２k個）に依存する。図６の例では、変換テーブル６００のエントリ数は「１６（＝２4）」となり、例えば、１エントリのデータサイズを０．５Ｂｙｔｅとすると、変換テーブル６００のデータサイズは８Ｂｙｔｅとなる。
【００９７】
このように、ＮＡＮＤフラッシュメモリ３０３にページ単位のＤＡＴＡ領域８１０とＳＰＡＲＥ領域８２０とを用意することにより、出力部７０８から出力される変換後のデータＤ（ユニットＵ１’〜Ｕｎ’）と変換テーブル６００とを関連付けて記憶することができる。
【００９８】
図７の説明に戻り、受付部７０１は、ＮＡＮＤフラッシュメモリ３０３に書き込まれた書込データの読出要求を受け付ける機能を有する。具体的には、例えば、受付部７０１が、ＮＡＮＤフラッシュメモリ３０３に書き込まれたデータＤの読出要求をＣＰＵ３０１から受け付ける。
【００９９】
読出部７０６は、読出要求を受け付けた書込データをＮＡＮＤフラッシュメモリ３０３から読み出す機能を有する。具体的には、例えば、読出部７０６が、関連付けて記憶されている変換後のデータＤと変換テーブル６００とをＮＡＮＤフラッシュメモリ３０３から読み出す。読み出された変換後のデータＤと変換テーブル６００は、例えば、データバッファ３０９に記憶される。
【０１００】
復元部７０７は、ＮＡＮＤフラッシュメモリ３０３から読み出された書込データを復元する機能を有する。具体的には、例えば、復元部７０７が、変換後のデータＤとともに読み出された変換テーブル６００を参照して、変換後のデータＤを復元することにしてもよい。
【０１０１】
より具体的には、例えば、復元部７０７が、変換テーブル６００を参照して、ユニットＵ１’〜Ｕｎ’の各ユニットＵｉ’のパターンを変換先となるパターンとして、各ユニットＵｉ’を、変換先となるパターンに対応する変換元となるパターンのユニットに変換する。なお、ユニットの復元例については図９を用いて後述する。
【０１０２】
出力部７０８は、復元した復元後の書込データを出力する機能を有する。具体的には、例えば、出力部７０８は、復元した復元後のデータＤを、データＤの読出要求の要求元となるＣＰＵ３０１に出力する。
【０１０３】
また、計数部７０２は、ビットパターンＰ１〜Ｐｍのうちの特定のビットパターンの計数結果に重み付けすることにしてもよい。ここで、特定のビットパターンは、例えば、ビットエラーの発生率が「０」よりも低い「１」の個数がｋビットの半数未満となるビットパターンである。
【０１０４】
例えば、４ビット単位（ｋ＝４）でデータＤを区切る場合、「１」の個数が４ビットの半数未満となるビットパターンは、ビットパターンＰ１「０ｘ０」、ビットパターンＰ２「０ｘ１」、ビットパターンＰ３「０ｘ２」、ビットパターンＰ４「０ｘ４」およびビットパターンＰ５「０ｘ８」となる。
【０１０５】
具体的には、例えば、計数部７０２は、図４に示したカウントルール４００を参照して、各カウンタＣ１〜Ｃ１６に、各カウンタＣ１〜Ｃ１６の加算値を設定することにしてもよい。図４の例では、計数部７０２は、カウンタＣ１〜Ｃ５に加算値「２」を設定し、カウンタＣ６〜Ｃ１６に加算値「１」を設定する。
【０１０６】
この結果、例えば、ビットパターン「０ｘ０」のユニットが受け付けられた場合、カウンタＣ１のカウンタ値に「２」が加算される。また、例えば、ビットパターン「０ｘＣ」のユニットが受け付けられた場合、カウンタＣ６のカウンタ値に「１」が加算される。
【０１０７】
また、計数部７０２は、カウンタテーブル５００に記憶されているカウンタＣ１〜Ｃ１６のカウンタ値のうち、カウンタＣ１〜Ｃ５のカウンタ値に、１より大きい係数αを乗算することにより、特定のビットパターンの計数結果に重み付けすることにしてもよい。係数αは、例えば、「α＝２」である。
【０１０８】
これにより、特定のビットパターンのユニットがユニットＵ１〜Ｕｎに出現する頻度が他のビットパターンと同程度の場合であっても、特定のビットパターンのほうを「１」の個数が多いビットパターンと対応付けることができる。
【０１０９】
なお、上述した説明では、書込部７０５が、変換後のデータＤと変換テーブル６００とを関連付けてＮＡＮＤフラッシュメモリ３０３に出力することにしたが、これに限らない。例えば、変換テーブル６００については、例えば、書込部７０５が、データＤの識別子と関連付けてＮＡＮＤコントローラ３０２のメモリ等に記憶することにしてもよい。この場合、復元部７０７は、例えば、変換後のデータＤの読出時に、データＤの識別子と関連付けてＮＡＮＤコントローラ３０２のメモリ等に記憶されている変換テーブル６００を参照して、変換後のデータＤを復元する。
【０１１０】
また、ＮＡＮＤコントローラ３０２は、データＤを任意のビット数で区切ったユニット単位でビット反転制御を行う機能を有することにしてもよい。具体的には、例えば、計数部７０２は、ユニットＵｉごとに、ユニットＵｉに含まれる「０」の個数を計数することにしてもよい。そして、変換部７０４は、計数した「０」の個数がｋビットの過半数となる場合、ユニットＵｉを、ユニットＵｉに含まれる各ビットの値を反転したユニットＵｉ’に変換することにしてもよい。
【０１１１】
また、書込部７０５は、計数した「０」の個数がｋビットの過半数となる場合、変換後のユニットＵｉ’と、ユニットＵｉに含まれる各ビットの値を反転したことを示す反転フラグとを関連付けてＮＡＮＤフラッシュメモリ３０３に出力することにしてもよい。また、書込部７０５は、計数した「０」の個数がｋビットの過半数とならない場合、ユニットＵｉと、ユニットＵｉに含まれる各ビットの値を反転していないことを示す反転フラグとを関連付けてＮＡＮＤフラッシュメモリ３０３に出力することにしてもよい。
【０１１２】
また、データＤの読出時には、読出部７０６は、ユニットＵｉ’またはユニットＵｉと反転フラグとをＮＡＮＤフラッシュメモリ３０３から読み出すことにしてもよい。また、復元部７０７は、反転フラグが各ビットの値を反転したことを示す場合、読み出したユニットＵｉ’を、ユニットＵｉ’に含まれる各ビットの値を反転したユニットＵｉに変換することにしてもよい。
【０１１３】
（変換テーブル６００の作成例）
つぎに、変換テーブル６００の作成例について説明する。図９は、変換テーブル６００の作成例を示す説明図である。以下、図５に示したカウンタテーブル５００を参照して、変換テーブル６００を作成する対応付け部７０３の具体的な処理例（ａ）〜（ｅ）について説明する。
【０１１４】
（ａ）対応付け部７０３は、カウンタテーブル５００を参照して、カウンタＣ１〜Ｃ１６の中からカウンタ値が最大のカウンタＣｊを選択する。図５の例では、カウンタＣ５のカウンタ値「０ｘＦＣ１」が最大となる。このため、対応付け部７０３は、カウンタＣ５を選択する。
【０１１５】
（ｂ）対応付け部７０３は、変換テーブル６００のエントリ番号が最小のエントリの変換元パターンフィールドに、選択したカウンタＣ５に対応するビットパターンＰ５を設定する。ここで、カウンタＣ５に対応するビットパターンＰ５は、ビットパターン「０ｘ８」である。このため、エントリ番号「１」のエントリの変換元パターンフィールドに、ビットパターン「０ｘ８」が設定されている。
【０１１６】
（ｃ）対応付け部７０３は、カウンタテーブル５００を参照して、カウンタＣ１〜Ｃ１６の中から、カウンタ値が最大かつ１以上の未選択のカウンタＣｊを選択する。図５の例では、カウンタＣ３のカウンタ値「０ｘＢ６１」が２番目に大きい。このため、対応付け部７０３は、カウンタＣ３を選択する。
【０１１７】
（ｄ）対応付け部７０３は、変換テーブル６００の変換元パターンが未設定かつエントリ番号が最小のエントリの変換元パターンフィールドに、選択したカウンタＣ３に対応するビットパターンＰ３を設定する。ここで、カウンタＣ３に対応するビットパターンＰ３は、ビットパターン「０ｘ２」である。このため、エントリ番号「２」のエントリの変換元パターンフィールドに、ビットパターン「０ｘ２」が設定されている。
【０１１８】
（ｅ）対応付け部７０３は、カウンタＣ１〜Ｃ１６の中からカウンタ値が１以上の未選択のカウンタがなくなるまで、上記（ｃ）および（ｄ）の処理を繰り返し行う。
【０１１９】
この結果、図９の例では、エントリ番号「３」のエントリの変換元パターンフィールドに、ビットパターンＰ１「０ｘ０」が設定されている。また、エントリ番号「４」のエントリの変換元パターンフィールドに、ビットパターンＰ１１「０ｘ３」が設定されている。また、エントリ番号「５」のエントリの変換元パターンフィールドに、ビットパターンＰ２「０ｘ１」が設定されている。また、エントリ番号「６」のエントリの変換元パターンフィールドに、ビットパターンＰ９「０ｘ６」が設定されている。また、エントリ番号「７」のエントリの変換元パターンフィールドに、ビットパターンＰ１６「０ｘ７」が設定されている。
【０１２０】
これにより、ビットパターンＰ１〜Ｐ１６のうち、ユニットＵ１〜Ｕｎに出現する頻度が高い変換元となるビットパターンほど、「０」よりもビットエラーの発生率が低い「１」の割合が高い変換先となるビットパターンに対応付けることができる。
【０１２１】
・ユニットの変換例
ここで、図９に示した変換テーブル６００を用いて、ＮＡＮＤフラッシュメモリ３０３に書き込まれるデータＤの各ユニットＵｉの変換例について説明する。まず、変換部７０４は、データバッファ３０９に記憶されているユニットＵ１〜ＵｎのうちのいずれかのユニットＵｉをデータバッファ３０９から読み出す。
【０１２２】
つぎに、変換部７０４は、変換テーブル６００を参照して、読み出したユニットＵｉのビットパターンが、変換元パターンフィールドに設定されているエントリを特定する。例えば、読み出したユニットＵｉのビットパターンを「０ｘ８」とする。この場合、変換部７０４は、変換テーブル６００を参照して、読み出したユニットＵｉのビットパターン「０ｘ８」が、変換元パターンフィールドに設定されているエントリ１を特定する。
【０１２３】
そして、変換部７０４は、変換テーブル６００を参照して、読み出したユニットＵｉを、特定したエントリの変換先パターンフィールドに設定されているビットパターンに変換する。例えば、変換部７０４は、変換テーブル６００を参照して、読み出したユニットＵｉを、特定したエントリ１の変換先パターンフィールドに設定されているビットパターン「０ｘＦ」に変換する。
【０１２４】
変換部７０４は、データバッファ３０９から読み出されていない未読出のユニットがなくなるまで上述した一連の処理を繰り返す。これにより、ユニットＵ１〜Ｕｎに含まれる変換元となるビットパターンのユニットを、対応する変換先となるビットパターンのデータに変換することができる。
【０１２５】
・ユニットの復元例
ここで、図９に示した変換テーブル６００を用いて、ＮＡＮＤフラッシュメモリ３０３から読み出されるデータＤの各ユニットＵｉ’の復元例について説明する。まず、復元部７０７は、データバッファ３０９に記憶されているユニットＵ１’〜Ｕｎ’のうちのいずれかのユニットＵｉ’をデータバッファ３０９から読み出す。
【０１２６】
つぎに、復元部７０７は、変換テーブル６００を参照して、読み出したユニットＵｉのビットパターンが、変換先パターンフィールドに設定されているエントリを特定する。例えば、読み出したユニットＵｉ’のビットパターンを「０ｘＦ」とする。この場合、復元部７０７は、変換テーブル６００を参照して、読み出したユニットＵｉ’のビットパターン「０ｘＦ」が、変換先パターンフィールドに設定されているエントリ１を特定する。
【０１２７】
そして、復元部７０７は、変換テーブル６００を参照して、読み出したユニットＵｉ’を、特定したエントリの変換元パターンフィールドに設定されているビットパターンに変換する。例えば、復元部７０７は、変換テーブル６００を参照して、読み出したユニットＵｉ’を、特定したエントリ１の変換元パターンフィールドに設定されているビットパターン「０ｘ８」に変換する。
【０１２８】
復元部７０７は、データバッファ３０９から読み出されていない未読出のユニットがなくなるまで上述した一連の処理を繰り返す。これにより、ユニットＵ１’〜Ｕｎ ’に含まれる変換先となるビットパターンのユニットを、対応する変換元となるビットパターンのデータに復元することができる。
【０１２９】
（ＮＡＮＤコントローラ３０２の各種処理手順）
つぎに、ＮＡＮＤコントローラ３０２の各種処理手順について説明する。まず、ＮＡＮＤフラッシュメモリ３０３に対するデータＤの書込要求を受け付けた場合のＮＡＮＤコントローラ３０２の書込処理手順について説明する。
【０１３０】
＜ＮＡＮＤコントローラ３０２の書込処理手順＞
図１０および図１１は、ＮＡＮＤコントローラ３０２の書込処理手順の一例を示すフローチャートである。図１０のフローチャートにおいて、まず、ＮＡＮＤコントローラ３０２は、データＤの書込要求をＣＰＵ３０１から受け付けたか否かを判断する（ステップＳ１００１）。ここで、ＮＡＮＤコントローラ３０２は、データＤの書込要求を受け付けるのを待つ（ステップＳ１００１：Ｎｏ）。
【０１３１】
そして、データＤの書込要求を受け付けた場合（ステップＳ１００１：Ｙｅｓ）、ＮＡＮＤコントローラ３０２は、データＤをｋビット単位で区切ったユニットＵｉをＣＰＵ３０１から受け付けたか否かを判断する（ステップＳ１００２）。
【０１３２】
ここで、ユニットＵｉを受け付けた場合（ステップＳ１００２：Ｙｅｓ）、ＮＡＮＤコントローラ３０２は、受け付けたユニットＵｉのビットパターンに対応するカウンタＣｊのカウンタ値をインクリメントして（ステップＳ１００３）、ステップＳ１００２に戻る。なお、カウンタＣｊのカウンタ値にインクリメントされる加算値は、例えば、カウントルール４００に記憶されているカウンタＣｊの加算値である。
【０１３３】
また、ステップＳ１００２において、ユニットＵｉを受け付けていない場合（ステップＳ１００２：Ｎｏ）、ＮＡＮＤコントローラ３０２は、データＤの書込完了通知をＣＰＵ３０１から受け付けたか否かを判断する（ステップＳ１００４）。ここで、データＤの書込完了通知を受け付けていない場合（ステップＳ１００４：Ｎｏ）、ＮＡＮＤコントローラ３０２は、ステップＳ１００２に戻る。
【０１３４】
一方、データＤの書込完了通知を受け付けた場合（ステップＳ１００４：Ｙｅｓ）、ＮＡＮＤコントローラ３０２は、カウンタテーブル５００を参照して、カウンタ値が最大の未選択のカウンタＣｊを選択する（ステップＳ１００５）。
【０１３５】
つぎに、ＮＡＮＤコントローラ３０２は、変換テーブル６００の中からエントリ番号が最小の未選択のエントリを選択する（ステップＳ１００６）。そして、ＮＡＮＤコントローラ３０２は、選択したエントリの変換元パターンフィールドに、選択したカウンタＣｊに対応するビットパターンＰｊを設定して（ステップＳ１００７）、カウンタＣｊのカウンタ値をリセットする（ステップＳ１００８）。
【０１３６】
つぎに、ＮＡＮＤコントローラ３０２は、カウンタテーブル５００を参照して、カウンタ値が１以上の未選択のカウンタがあるか否かを判断する（ステップＳ１００９）。ここで、未選択のカウンタがある場合（ステップＳ１００９：Ｙｅｓ）、ＮＡＮＤコントローラ３０２は、ステップＳ１００５に戻る。
【０１３７】
一方、未選択のカウンタがない場合（ステップＳ１００９：Ｎｏ）、ＮＡＮＤコントローラ３０２は、図１１に示すステップＳ１１０１に移行する。
【０１３８】
図１１のフローチャートにおいて、まず、ＮＡＮＤコントローラ３０２は、データバッファ３０９に記憶されているユニットＵ１〜Ｕｎのうち、未読出のいずれかのユニットＵｉをデータバッファ３０９から読み出す（ステップＳ１１０１）。
【０１３９】
つぎに、ＮＡＮＤコントローラ３０２は、変換テーブル６００を参照して、読み出したユニットＵｉのビットパターンが、変換元パターンフィールドに設定されているエントリを特定する（ステップＳ１１０２）。そして、ＮＡＮＤコントローラ３０２は、変換テーブル６００を参照して、読み出したユニットＵｉを、特定したエントリの変換先パターンフィールドに設定されているビットパターンに変換する（ステップＳ１１０３）。
【０１４０】
つぎに、ＮＡＮＤコントローラ３０２は、ユニットＵ１〜Ｕｎのうちデータバッファ３０９から読み出していない未読出のユニットがあるか否かを判断する（ステップＳ１１０４）。ここで、未読出のユニットがある場合（ステップＳ１１０４：Ｙｅｓ）、ＮＡＮＤコントローラ３０２は、ステップＳ１１０１に戻る。
【０１４１】
一方、未読出のユニットがない場合（ステップＳ１１０４：Ｎｏ）、ＮＡＮＤコントローラ３０２は、変換した変換後のデータＤ（ユニットＵ１’〜Ｕｎ’）と変換テーブル６００とを関連付けてＮＡＮＤフラッシュメモリ３０３に出力して（ステップＳ１１０５）、本フローチャートによる一連の処理を終了する。
【０１４２】
これにより、ビットエラーの発生率が低い「１」の個数が変換前よりも多くなるようにデータＤを変換した状態で、ＮＡＮＤフラッシュメモリ３０３にデータＤを書き込むことができる。また、変換後のデータＤと関連付けて、変換元となるビットパターンと変換先となるビットパターンとの対応関係を表す変換テーブル６００をＮＡＮＤフラッシュメモリ３０３に書き込むことができる。
【０１４３】
＜ＮＡＮＤコントローラ３０２の読出処理手順＞
つぎに、データＤの読出要求を受け付けた場合のＮＡＮＤコントローラ３０２の読出処理手順について説明する。
【０１４４】
図１２は、ＮＡＮＤコントローラ３０２の読出処理手順の一例を示すフローチャートである。図１２のフローチャートにおいて、まず、ＮＡＮＤコントローラ３０２は、データＤの読出要求をＣＰＵ３０１から受け付けたか否かを判断する（ステップＳ１２０１）。ここで、ＮＡＮＤコントローラ３０２は、データＤの読出要求を受け付けるのを待つ（ステップＳ１２０１：Ｎｏ）。
【０１４５】
そして、データＤの読出要求を受け付けた場合（ステップＳ１２０１：Ｙｅｓ）、ＮＡＮＤコントローラ３０２は、読出要求を受け付けたデータＤを変換した変換後のデータＤ（ユニットＵ１’〜Ｕｎ’）と変換テーブル６００とをＮＡＮＤフラッシュメモリ３０３から読み出す（ステップＳ１２０２）。
【０１４６】
そして、ＮＡＮＤコントローラ３０２は、データバッファ３０９に記憶されたユニットＵ１’〜Ｕｎ’のうち、未読出のいずれかのユニットＵｉ’をデータバッファ３０９から読み出す（ステップＳ１２０３）。
【０１４７】
つぎに、ＮＡＮＤコントローラ３０２は、変換テーブル６００を参照して、読み出したユニットＵｉ’のビットパターンが、変換先パターンフィールドに設定されているエントリを特定する（ステップＳ１２０４）。そして、ＮＡＮＤコントローラ３０２は、変換テーブル６００を参照して、読み出したユニットＵｉ’を、特定したエントリの変換元パターンフィールドに設定されているビットパターンに変換する（ステップＳ１２０５）。
【０１４８】
つぎに、ＮＡＮＤコントローラ３０２は、ユニットＵ１’〜Ｕｎ ’のうちデータバッファ３０９から読み出していない未読出のユニットがあるか否かを判断する（ステップＳ１２０６）。ここで、未読出のユニットがある場合（ステップＳ１２０６：Ｙｅｓ）、ＮＡＮＤコントローラ３０２は、ステップＳ１２０３に戻る。
【０１４９】
一方、未読出のユニットがない場合（ステップＳ１２０６：Ｎｏ）、ＮＡＮＤコントローラ３０２は、復元した復元後のデータＤ（ユニットＵ１〜Ｕｎ）をＣＰＵ３０１に出力して（ステップＳ１２０７）、本フローチャートによる一連の処理を終了する。
【０１５０】
これにより、データＤの読出時に、変換後のデータＤを復元して復元後のデータＤをＣＰＵ３０１に出力することができる。
【０１５１】
以上説明したように、実施の形態２にかかるＮＡＮＤコントローラ３０２によれば、ビットパターンＰ１〜ＰｍのうちのユニットＵ１〜Ｕｎに出現するビットパターンＰｊごとに、ユニットＵ１〜Ｕｎに含まれるビットパターンＰｊのユニットの個数を計数できる。ここで、ユニットＵ１〜Ｕｎは、ＮＡＮＤフラッシュメモリ３０３に書き込まれるページ単位のデータＤをｋビット単位で区切ったデータ群である。また、ビットパターンＰ１〜Ｐｍは、ｋビットのビット列が取り得るビットパターン群である。
【０１５２】
また、ＮＡＮＤコントローラ３０２によれば、ビットパターンＰ１〜Ｐｍから、計数結果が多い順に選ばれた変換元となるビットパターンと、「１」の個数が多い順に選ばれた変換先となるビットパターンとを対応付けることができる。ここで、「１」は、ＮＡＮＤフラッシュメモリ３０３に記憶保持されるビット単位の「０」または「１」の値のうち、ビットエラーの発生率が低いほうの値である。
【０１５３】
また、ＮＡＮＤコントローラ３０２によれば、変換元となるビットパターンごとに、ユニットＵ１〜Ｕｎに含まれる変換元となるビットパターンのデータを、対応する変換先となるビットパターンのデータに変換することができる。これにより、ユニットＵ１〜Ｕｎに出現する頻度が高いビットパターンのユニットほど、「１」の個数が多いビットパターンのユニットに変換することができる。この結果、ＮＡＮＤフラッシュメモリ３０３に書き込むデータＤを、ビットエラーの発生率が低い「１」の個数が変換前よりも多くなるように変換することができる。
【０１５４】
また、ＮＡＮＤコントローラ３０２によれば、変換元となるビットパターンと変換先となるビットパターンとの対応関係を表す変換テーブル６００を作成することができる。そして、ＮＡＮＤコントローラ３０２によれば、変換した変換後のデータＤ（ユニットＵ１〜Ｕｎ）と、作成した変換テーブル６００とを関連付けてＮＡＮＤフラッシュメモリ３０３に書き込むことができる。
【０１５５】
これにより、ビットエラーの発生率が低い「１」の個数が変換前よりも多くなるようにデータＤを変換した状態で、ＮＡＮＤフラッシュメモリ３０３にデータＤを書き込むことができ、ＮＡＮＤフラッシュメモリ３０３のエラーレートを低減させることができる。また、データＤに含まれる「０」の比率と「１」の比率がほぼ同程度の場合であっても、ユニットＵ１〜Ｕｎに出現するビットパターンＰｊの頻度に応じて各ユニットＵｉを変換することにより、データＤに含まれる「１」の個数を効率的に増やすことができる。
【０１５６】
ここで、変換テーブル６００のデータサイズは、ｋビットのビット列が取り得るビットパターンの数（２k個）に依存する。例えば、データＤを４ビット単位で区切る場合、変換テーブル６００のエントリ数は「１６（＝２4）」となる。１エントリのデータサイズを０．５Ｂｙｔｅとすると、変換テーブル６００のデータサイズは８Ｂｙｔｅである。
【０１５７】
また、例えば、ページ単位のデータＤのデータサイズを４キロバイトとすると、データＤにおける冗長部分の割合（８バイト／４０９６バイト）は０．２％程度である。このように、ＮＡＮＤコントローラ３０２によれば、例えば、ユニット単位で反転フラグを付加してビット反転制御を行う場合に比べて、データＤにおける冗長部分の割合を減らすことができる。
【０１５８】
また、ＮＡＮＤコントローラ３０２によれば、ＮＡＮＤフラッシュメモリ３０３からの変換後のデータＤの読出時に、変換後のデータＤと関連付けて記憶されている変換テーブル６００を参照して、変換後のデータＤを復元することができる。
【０１５９】
また、ＮＡＮＤコントローラ３０２によれば、ビットパターンＰ１〜Ｐｍのうち特定のビットパターンの計数結果に重み付けすることができる。ここで、特定のビットパターンは、例えば、ビットエラーの発生率が「０」よりも低い「１」の個数がｋビットの半数未満となるビットパターンである。
【０１６０】
これにより、特定のビットパターンが出現する頻度が他のビットパターンと同程度の場合であっても、特定のビットパターンのほうを「１」の個数が多いビットパターンと対応付けることができ、データＤに含まれる「１」の個数を効率的に増やすことができる。
【０１６１】
これらのことから、実施の形態２にかかるＮＡＮＤコントローラ３０２によれば、ＮＡＮＤフラッシュメモリ３０３に書き込まれるデータＤのエラーレートを低減させることができる。また、ＮＡＮＤコントローラ３０２によれば、データＤのエラーレートを低減させることにより、ＥＣＣに用いる誤り訂正符号のビット数の増大化を防いで、ＮＡＮＤコントローラ３０２の回路規模やＮＡＮＤフラッシュメモリ３０３の記憶量の増大化を防ぐことができる。
【０１６２】
また、ＮＡＮＤコントローラ３０２によれば、書込時にデータＤに含まれる「１」の比率を増やすことにより、データＤを消去する際に浮遊ゲートから電荷を引き抜くための消費電力を抑制するとともに消去時間の短縮化を図ることができる。また、ＮＡＮＤコントローラ３０２によれば、データＤの消去時間を短縮することにより、ＮＡＮＤフラッシュメモリ３０３へのアクセス性能を向上させるとともに、ＮＡＮＤフラッシュメモリ３０３の長寿命化を図ることができる。
【０１６３】
なお、本実施の形態で説明したデータ変換方法は、例えば、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。また、本データ変換プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本データ変換プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１６４】
また、本実施の形態で説明したデータ変換装置１０１は、スタンダードセルやストラクチャードＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの特定用途向けＩＣ（以下、単に「ＡＳＩＣ」と称す。）やＦＰＧＡなどのＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）によっても実現することができる。具体的には、例えば、上述したＮＡＮＤコントローラ３０２の各機能部をＨＤＬ記述によって機能定義し、そのＨＤＬ記述を論理合成してＡＳＩＣやＰＬＤに与えることにより、ＮＡＮＤコントローラ３０２を製造することができる。
【０１６５】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１６６】
（付記１）コンピュータが、
記憶保持されるビット単位の二種の値のうち一方の値が他方の値よりもビットエラーの発生率が高くなる特性を有する記憶媒体に書き込まれる書込データを特定のビット数の単位で区切ったデータ群に基づいて、前記ビット数のビット列が取り得るビットパターン群のうち前記データ群に出現するビットパターンごとに、前記データ群に含まれる前記ビットパターンのデータの個数を計数し、
計数した計数結果が多い順に前記ビットパターン群から選ばれた変換元となるビットパターンと、前記他方の値の個数が多い順に前記ビットパターン群から選ばれた変換先となるビットパターンとを対応付け、
前記変換元となるビットパターンごとに、前記データ群に含まれる前記変換元となるビットパターンのデータを、前記変換元となるビットパターンに対応付けた前記変換先となるビットパターンのデータに変換する、
処理を実行することを特徴とするデータ変換方法。
【０１６７】
（付記２）前記コンピュータが、
対応付けた前記変換元となるビットパターンと前記変換先となるビットパターンとの対応関係を表す対応情報を作成し、
変換した変換後のデータ群と、作成した前記対応情報とを関連付けて前記記憶媒体に出力する、
処理を実行することを特徴とする付記１に記載のデータ変換方法。
【０１６８】
（付記３）前記コンピュータが、
前記変換後のデータ群と前記対応情報とを前記記憶媒体から取得し、
取得した前記対応情報に基づいて、取得した前記変換後のデータ群に含まれる各データのビットパターンを変換先となるビットパターンとして、前記各データを、前記変換先となるビットパターンに対応する変換元となるビットパターンのデータに変換する、
処理を実行することを特徴とする付記２に記載のデータ変換方法。
【０１６９】
（付記４）前記計数する処理は、
前記ビットパターン群のうち前記他の値の個数が前記ビット数の半数未満となるビットパターンの計数結果に重み付けすることを特徴とする付記１〜３のいずれか一つに記載のデータ変換方法。
【０１７０】
（付記５）コンピュータが、
記憶保持されるビット単位の二種の値のうち一方の値が他方の値よりもビットエラーの発生率が高くなる特性を有する記憶媒体に書き込まれる書込データを区切ったデータ群から選ばれたデータごとに、前記データに含まれる前記一方の値の個数を計数し、
計数した前記個数が前記データに含まれる全ビットのビット数の過半数となる場合、前記データを、前記データに含まれる各ビットの値を反転したデータに変換する、
処理を実行することを特徴とするデータ変換方法。
【０１７１】
（付記６）前記コンピュータが、
前記個数が前記ビット数の過半数となる場合、変換した変換後のデータと前記各ビットの値を反転したことを示す反転情報とを関連付けて前記記憶媒体に出力し、
前記個数が前記ビット数の過半数とならない場合、前記データと前記各ビットの値を反転していないことを示す反転情報とを関連付けて前記記憶媒体に出力する、
処理を実行することを特徴とする付記５に記載のデータ変換方法。
【０１７２】
（付記７）前記コンピュータが、
前記変換後のデータと前記反転情報とを前記記憶媒体から取得し、
取得した前記反転情報が前記各ビットの値を反転したことを示す場合、取得した前記変換後のデータを、前記変換後のデータに含まれる各ビットの値を反転したデータに変換する、
処理を実行することを特徴とする付記６に記載のデータ変換方法。
【０１７３】
（付記８）記憶保持されるビット単位の二種の値のうち一方の値が他方の値よりもビットエラーの発生率が高くなる特性を有する記憶媒体に書き込まれる書込データを特定のビット数の単位で区切ったデータ群に基づいて、前記ビット数のビット列が取り得るビットパターン群のうち前記データ群に出現するビットパターンごとに、前記データ群に含まれる前記ビットパターンのデータの個数を計数する計数部と、
前記計数部によって計数された計数結果が多い順に前記ビットパターン群から選ばれた変換元となるビットパターンと、前記他方の値の個数が多い順に前記ビットパターン群から選ばれた変換先となるビットパターンとを対応付ける対応付け部と、
前記変換元となるビットパターンごとに、前記データ群に含まれる前記変換元となるビットパターンのデータを、前記対応付け部によって前記変換元となるビットパターンに対応付けられた前記変換先となるビットパターンのデータに変換する変換部と、
を有することを特徴とするデータ変換装置。
【０１７４】
（付記９）記憶保持されるビット単位の二種の値のうち一方の値が他方の値よりもビットエラーの発生率が高くなる特性を有する記憶媒体に書き込まれる書込データを区切ったデータ群から選ばれたデータごとに、前記データに含まれる前記一方の値の個数を計数する計数部と、
前記計数部によって計数された前記個数が前記データに含まれる全ビットのビット数の過半数となる場合、前記データを、前記データに含まれる各ビットの値を反転したデータに変換する変換部と、
を有することを特徴とするデータ変換装置。
【０１７５】
（付記１０）コンピュータに、
記憶保持されるビット単位の二種の値のうち一方の値が他方の値よりもビットエラーの発生率が高くなる特性を有する記憶媒体に書き込まれる書込データを特定のビット数の単位で区切ったデータ群に基づいて、前記ビット数のビット列が取り得るビットパターン群のうち前記データ群に出現するビットパターンごとに、前記データ群に含まれる前記ビットパターンのデータの個数を計数し、
計数した計数結果が多い順に前記ビットパターン群から選ばれた変換元となるビットパターンと、前記他方の値の個数が多い順に前記ビットパターン群から選ばれた変換先となるビットパターンとを対応付け、
前記変換元となるビットパターンごとに、前記データ群に含まれる前記変換元となるビットパターンのデータを、前記変換元となるビットパターンに対応付けた前記変換先となるビットパターンのデータに変換する、
処理を実行させることを特徴とするデータ変換プログラム。
【０１７６】
（付記１１）コンピュータに、
記憶保持されるビット単位の二種の値のうち一方の値が他方の値よりもビットエラーの発生率が高くなる特性を有する記憶媒体に書き込まれる書込データを区切ったデータ群から選ばれたデータごとに、前記データに含まれる前記一方の値の個数を計数し、
計数した前記個数が前記データに含まれる全ビットのビット数の過半数となる場合、前記データを、前記データに含まれる各ビットの値を反転したデータに変換する、
処理を実行させることを特徴とするデータ変換プログラム。
【０１７７】
（付記１２）コンピュータに、
記憶保持されるビット単位の二種の値のうち一方の値が他方の値よりもビットエラーの発生率が高くなる特性を有する記憶媒体に書き込まれる書込データを特定のビット数の単位で区切ったデータ群に基づいて、前記ビット数のビット列が取り得るビットパターン群のうち前記データ群に出現するビットパターンごとに、前記データ群に含まれる前記ビットパターンのデータの個数を計数し、
計数した計数結果が多い順に前記ビットパターン群から選ばれた変換元となるビットパターンと、前記他方の値の個数が多い順に前記ビットパターン群から選ばれた変換先となるビットパターンとを対応付け、
前記変換元となるビットパターンごとに、前記データ群に含まれる前記変換元となるビットパターンのデータを、前記変換元となるビットパターンに対応付けた前記変換先となるビットパターンのデータに変換する、
処理を実行させることを特徴とするデータ変換プログラムを記録した前記コンピュータに読み取り可能な記録媒体。
【０１７８】
（付記１３）コンピュータに、
記憶保持されるビット単位の二種の値のうち一方の値が他方の値よりもビットエラーの発生率が高くなる特性を有する記憶媒体に書き込まれる書込データを区切ったデータ群から選ばれたデータごとに、前記データに含まれる前記一方の値の個数を計数し、
計数した前記個数が前記データに含まれる全ビットのビット数の過半数となる場合、前記データを、前記データに含まれる各ビットの値を反転したデータに変換する、
処理を実行させることを特徴とするデータ変換プログラムを記録した前記コンピュータに読み取り可能な記録媒体。
【符号の説明】
【０１７９】
１０１  データ変換装置
１１０  記憶媒体
３０１  ＣＰＵ
３０２  ＮＡＮＤコントローラ
３０３  ＮＡＮＤフラッシュメモリ
７０１  受付部
７０２  計数部
７０３  対応付け部
７０４  変換部
７０５  書込部
７０６  読出部
７０７  復元部
７０８  出力部
【図１】
2014010670.tif 000003
【図２】
2014010670.tif 000004
【図３】
2014010670.tif 000005
【図４】
2014010670.tif 000006
【図５】
2014010670.tif 000007
【図６】
2014010670.tif 000008
【図７】
2014010670.tif 000009
【図８】
2014010670.tif 000010
【図９】
2014010670.tif 000011
【図１０】
2014010670.tif 000012
【図１１】
2014010670.tif 000013
【図１２】
2014010670.tif 000014