(57)【特許請求の範囲】
【請求項１】
所定の未使用データ内の所定の可変領域に所定値が設定された情報部の誤りを検出するためのパリティを第１の候補パリティとして生成する第１候補パリティ生成部と、
前記未使用データ内の前記所定の可変領域に前記所定値と異なる値が設定された前記情報部の誤りを検出するためのパリティを第２の候補パリティとして生成する第２候補パリティ生成部と、
前記第１の候補パリティと当該第１の候補パリティに対応する前記未使用データとからなる組と前記第２の候補パリティと当該第２の候補パリティに対応する前記未使用データとからなる組とのそれぞれの前記組における特定の値のビット数に基づいて前記第１および第２の候補パリティのうち所定の条件を満たすパリティを選択パリティとして選択する選択部と、
前記選択パリティに対応する前記情報部と前記選択パリティとからなる符号語を出力する出力部と
を具備する符号化装置。
【請求項２】
前記情報部は、前記第１候補パリティ生成部に入力されたユーザデータと前記未使用データとを含む
請求項１記載の符号化装置。
【請求項３】
前記選択部は、
前記第１の候補パリティと当該第１の候補パリティに対応する前記未使用データとにおいて前記特定の値のビットの個数を重みとして計数する第１の重みカウンタと、
前記第２の候補パリティと当該第２の候補パリティに対応する前記未使用データとにおいて前記特定の値のビットの個数を重みとして計数する第２の重みカウンタと、
前記第１および第２の重みカウンタのそれぞれの計数値を比較して当該比較結果に基づいて前記所定の条件を満たすパリティを選択する比較部と
を備える請求項２記載の符号化装置。
【請求項４】
所定の可変領域に所定値が設定された情報部の誤りを検出するためのパリティを第１の候補パリティとして生成する第１候補パリティ生成部と、
前記所定の可変領域に前記所定値と異なる値が設定された前記情報部の誤りを検出するためのパリティを第２の候補パリティとして生成する第２候補パリティ生成部と、
前記第１および第２の候補パリティのうち所定の条件を満たすパリティを選択パリティとして選択する選択部と、
前記選択パリティに対応する前記情報部と前記選択パリティとからなる符号語を出力する出力部と、
メモリセルに書き込まれているデータをプレリードデータとして読み出す制御部と
を具備し、
前記情報部は、前記第１候補パリティ生成部に入力されたユーザデータと前記所定の可変領域を含む未使用データとを含み、
前記選択部は、前記第１の候補パリティと当該第１の候補パリティに対応する前記未使用データとにおいて前記プレリードデータと値の異なるビット数を書換えビット数として計数する第１の書換えビット数カウンタと、
前記第２の候補パリティと当該第２の候補パリティに対応する前記未使用データととにおいて前記プレリードデータと値の異なるビット数を書換えビット数として計数する第２の書換えビット数カウンタと、
前記第１および第２の書換えビット数カウンタのそれぞれで計数された書換えビット数を比較して当該比較結果に基づいて前記所定の条件を満たすパリティを選択する比較部と
を備える
符号化装置。
【請求項５】
所定の可変領域に所定値が設定された情報部の誤りを検出するためのパリティを第１の候補パリティとして生成する第１候補パリティ生成部と、
前記所定の可変領域に前記所定値と異なる値が設定された前記情報部の誤りを検出するためのパリティを第２の候補パリティとして生成する第２候補パリティ生成部と、
前記第１および第２の候補パリティのうち所定の条件を満たすパリティを選択パリティとして選択する選択部と、
前記選択パリティに対応する前記情報部と前記選択パリティとからなる符号語を出力する出力部と、
メモリセルに書き込まれているデータをプレリードデータとして読み出す制御部と
を具備し、
前記情報部は、前記第１候補パリティ生成部に入力されたユーザデータと前記所定の可変領域を含む未使用データとを含み、
前記選択部は、前記第１の候補パリティと当該第１の候補パリティに対応する前記未使用データとにおいて前記プレリードデータと値の異なるビットが連続する個数を計数して当該計数値の最大値を最長ランの長さとして求める第１の最長ランカウンタと、
前記選択部は、前記第２の候補パリティと当該第２の候補パリティに対応する前記未使用データとにおいて前記プレリードデータと値の異なるビットが連続する個数を計数して当該計数値の最大値を最長ランの長さとして求める第２の最長ランカウンタと、
前記第１および第２の最長ラン数カウンタのそれぞれで求められた最長ランの長さを比較して当該比較結果に基づいて前記所定の条件を満たすパリティを選択する比較部と
を備える
符号化装置。
【請求項６】
前記符号語において前記ユーザデータと前記選択パリティとの間に前記未使用データが配置される請求項５記載の符号化装置。
【請求項７】
前記符号語において前記未使用データと前記選択パリティとの間に前記ユーザデータが配置される請求項５記載の符号化装置。
【請求項８】
前記符号語において前記ユーザデータは複数の領域に分散して配置される請求項５記載の符号化装置。
【請求項９】
前記符号語において前記未使用データは、複数の領域に分散して配置される請求項５記載の符号化装置。
【請求項１０】
前記未使用データは、前記可変領域と値が変更されない固定領域とからなり、
前記第２候補パリティ生成部は、前記可変領域の値を変更した前記情報部に対応する前記第２の候補パリティを生成する
請求項５記載の符号化装置。
【請求項１１】
前記符号語において前記可変領域は複数の領域に分散して配置される請求項１０記載の符号化装置。
【請求項１２】
前記符号語において前記固定領域は複数の領域に分散して配置される請求項１０記載の符号化装置。
【請求項１３】
所定の可変領域に所定値が設定された情報部の誤りを検出するためのパリティを第１の候補パリティとして生成する第１候補パリティ生成部と、
前記所定の可変領域に前記所定値と異なる値が設定された前記情報部の誤りを検出するためのパリティを第２の候補パリティとして生成する第２候補パリティ生成部と、
前記第１および第２の候補パリティのうち所定の条件を満たすパリティを選択パリティとして選択する選択部と、
前記選択パリティに対応する前記情報部と前記選択パリティとからなる符号語を出力する出力部と
を具備し、
前記第１の候補パリティ生成部は、前記情報部から前記第１の候補パリティを生成し、
前記第２の候補パリティ生成部は、前記第１の候補パリティと第１のパリティパターンとの論理演算により前記第２の候補パリティを生成する
符号化装置。
【請求項１４】
第２のパリティパターンと前記第１の候補パリティとの論理演算により第３の候補パリティを生成する第３の候補パリティ生成部と、
前記第２のパリティパターンと前記第２の候補パリティとの論理演算により第４の候補パリティを生成する第４の候補パリティ生成部と
をさらに具備し、
前記選択部は、前記第１、第２、第３および第４の候補パリティのうち所定の条件を満たすパリティを選択パリティとして選択する
請求項１３記載の符号化装置。
【請求項１５】
所定の可変領域に所定値が設定された情報部の誤りを検出するためのパリティを第１の候補パリティとして生成する第１候補パリティ生成部と、
前記所定の可変領域に前記所定値と異なる値が設定された前記情報部の誤りを検出するためのパリティを第２の候補パリティとして生成する第２候補パリティ生成部と、
前記第１および第２の候補パリティのうち所定の条件を満たすパリティを選択パリティとして選択する選択部と、
前記選択パリティに対応する前記情報部と前記選択パリティとからなる符号語を出力する出力部と
ユーザデータにおける特定の値のビット数を変換する変換処理を行って当該変換処理後の前記ユーザデータと前記変換処理前の前記ユーザデータとのいずれかを前記第１の候補パリティ生成部に出力するユーザデータ変換部と
を具備し、
前記第１の候補パリティ生成部は、前記出力されたユーザデータを含む前記第１の情報部から前記第１の候補パリティを生成する
符号化装置。
【請求項１６】
所定の未使用データ内の所定の可変領域に所定値が設定された情報部の誤りを検出するためのパリティを第１の候補パリティとして生成する第１候補パリティ生成部と、
前記未使用データ内の前記所定の可変領域に前記所定値と異なる値が設定された前記情報部の誤りを検出するためのパリティを第２の候補パリティとして生成する第２候補パリティ生成部と、
前記第１の候補パリティと当該第１の候補パリティに対応する前記未使用データとからなる組と前記第２の候補パリティと当該第２の候補パリティに対応する前記未使用データとからなる組とのそれぞれの前記組における特定の値のビット数に基づいて前記第１および第２の候補パリティのうち所定の条件を満たすパリティを選択パリティとして選択する選択部と、
前記選択パリティに対応する前記情報部と前記選択パリティとからなる符号語をライトデータとしてメモリセルに出力する出力部と、
前記メモリセルからリードデータを読み出して前記リードデータを復号する復号部と
を具備するメモリコントローラ。
【請求項１７】
所定の未使用データ内の所定の可変領域に所定値が設定された情報部の誤りを検出するためのパリティを第１の候補パリティとして生成する第１候補パリティ生成部と、
前記未使用データ内の前記所定の可変領域に前記所定値と異なる値が設定された前記情報部の誤りを検出するためのパリティを第２の候補パリティとして生成する第２候補パリティ生成部と、
前記第１の候補パリティと当該第１の候補パリティに対応する前記未使用データとからなる組と前記第２の候補パリティと当該第２の候補パリティに対応する前記未使用データとからなる組とのそれぞれの前記組における特定の値のビット数に基づいて前記第１および第２の候補パリティのうち所定の条件を満たすパリティを選択パリティとして選択する選択部と、
前記選択パリティに対応する前記情報部と前記選択パリティとからなる符号語を送信語として出力する出力部と、
前記送信語に対応する受信語を受信して復号する復号部と
を具備する通信システム。
【請求項１８】
所定の未使用データ内の所定の可変領域に所定値が設定された情報部の誤りを検出するためのパリティを第１の候補パリティとして生成する第１候補パリティ生成手順と、
前記未使用データ内の前記所定の可変領域に前記所定値と異なる値が設定された前記情報部の誤りを検出するためのパリティを第２の候補パリティとして生成する第２候補パリティ生成手順と、
前記第１の候補パリティと当該第１の候補パリティに対応する前記未使用データとからなる組と前記第２の候補パリティと当該第２の候補パリティに対応する前記未使用データとからなる組とのそれぞれの前記組における特定の値のビット数に基づいて前記第１および第２の候補パリティのうち所定の条件を満たすパリティを選択パリティとして選択する選択手順と、
前記選択パリティに対応する前記情報部と前記選択パリティとからなる符号語を出力する出力手順と
を具備する符号化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、符号化装置、メモリシステム、通信システムおよび符号化方法に関する。詳しくは、データを符号化してメモリセルに書き込む符号化装置、メモリシステム、通信システムおよび符号化方法に関する。
【背景技術】
【０００２】
近年の情報処理システムにおいては、補助記憶装置やストレージとして、不揮発性メモリ（ＮＶＭ：Non-Volatile memory）が用いられることがある。この不揮発性メモリは、大きなサイズを単位としたデータアクセスに対応したフラッシュメモリと、小さな単位での高速なランダムアクセスが可能な不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ：Non-Volatile RAM）とに大別される。ここで、フラッシュメモリの代表例としては、ＮＡＮＤ型フラッシュメモリが挙げられる。一方、不揮発性ランダムアクセスメモリの例としては、ＲｅＲＡＭ（Resistive RAM）、ＰＣＲＡＭ（Phase-Change RAM）、ＭＲＡＭ（Magnetoresistive RAM）などが挙げられる。
【０００３】
これらの不揮発性メモリの中には、論理値「０」を保持する際のデータ保持特性と、論理値「１」を保持する際のデータ保持特性とが異なるものがある。このデータ保持特性は、リテンションとも呼ばれる。論理値「０」のデータ保持特性（リテンション）の方が良好である場合に、「１」の個数が少なくなるように所定の変換処理（反転など）をユーザデータに対して行うメモリコントローラが提案されている（例えば、特許文献１参照。）。このメモリコントローラは、変換処理後のユーザデータの誤りを検出するためのパリティをユーザデータに付加してメモリセルに書き込む。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−２３９１４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述の従来技術では、ユーザデータの反転により、そのユーザデータを保持するメモリセルのリテンションが向上する。しかしながら、メモリコントローラがパリティを反転せずにそのまま書き込むため、パリティを保持するメモリセルのリテンションが向上しないという問題がある。
【０００６】
本技術はこのような状況に鑑みて生み出されたものであり、データを符号化してメモリセルに書き込むメモリシステムにおいて、メモリセルのデータ保持特性を向上させることを目的とする。
【課題を解決するための手段】
【０００７】
本技術は、上述の問題点を解消するためになされたものであり、その第１の側面は、所定の可変領域に所定値が設定された情報部の誤りを検出するためのパリティを第１の候補パリティとして生成する第１候補パリティ生成部と、前記所定の可変領域に前記所定値と異なる値が設定された前記情報部の誤りを検出するためのパリティを第２の候補パリティとして生成する第２候補パリティ生成部と、前記第１および第２の候補パリティのうち所定の条件を満たすパリティを選択パリティとして選択する選択部と、前記選択パリティに対応する前記情報部と前記選択パリティとからなる符号語を出力する出力部とを具備する符号化装置、および、当該装置における符号化方法である。これにより、第１および第２の候補パリティのうち所定の条件を満たす選択パリティと選択パリティに対応する上記情報部とからなる符号語が出力されるという作用をもたらす。
【０００８】
また、この第１の側面において、前記情報部は、前記第１候補パリティ生成部に入力されたユーザデータと前記所定の可変領域を含む未使用データとを含んでもよい。これにより、ユーザデータ以外の領域に可変領域が配置された情報部からパリティが生成されるという作用をもたらす。
【０００９】
また、この第１の側面において、上記選択部は、上記第１の候補パリティと当該第１の候補パリティに対応する上記未使用データとにおいて特定の値のビットの個数を重みとして計数する第１の重みカウンタと、上記第２の候補パリティと当該第２の候補パリティに対応する上記未使用データとにおいて上記特定の値のビットの個数を重みとして計数する第２の重みカウンタと、上記第１および第２の重みカウンタのそれぞれの計数値を比較して当該比較結果に基づいて上記所定の条件を満たすパリティを選択する比較部とを備えてもよい。これにより、特定の値のビット数の比較結果に基づいてパリティが選択されるという作用をもたらす。
【００１０】
また、この第１の側面において、メモリセルに書き込まれているデータをプレリードデータとして読み出す制御部をさらに具備し、上記選択部は、上記第１の候補パリティと当該第１の候補パリティに対応する上記未使用データとにおいて上記プレリードデータと値の異なるビット数を書換えビット数として計数する第１の書換えビット数カウンタと、上記第２の候補パリティと当該第２の候補パリティに対応する上記未使用データとにおいて上記プレリードデータと値の異なるビット数を書換えビット数として計数する第２の書換えビット数カウンタと、上記第１および第２の書換えビット数カウンタのそれぞれで計数された書換えビット数を比較して当該比較結果に基づいて上記所定の条件を満たすパリティを選択する比較部とを備えてもよい。これにより、書換えビット数の比較結果に基づいてパリティが選択されるという作用をもたらす。
【００１１】
また、この第１の側面において、メモリセルに書き込まれているデータをプレリードデータとして読み出す制御部をさらに具備し、上記選択部は、上記第１の候補パリティと当該第１の候補パリティに対応する上記未使用データとにおいて上記プレリードデータと値の異なるビットが連続する個数を計数して当該計数値の最大値を最長ランの長さとして求める第１の最長ランカウンタと、上記選択部は、上記第２の候補パリティと当該第２の候補パリティに対応する上記未使用データとにおいて上記プレリードデータと値の異なるビットが連続する個数を計数して当該計数値の最大値を最長ランの長さとして求める第２の最長ランカウンタと、上記第１および第２の最長ラン数カウンタのそれぞれで求められた最長ランの長さを比較して当該比較結果に基づいて上記所定の条件を満たすパリティを選択する比較部とを備えてもよい。これにより、最長ランの長さの比較結果に基づいてパリティが選択されるという作用をもたらす。
【００１２】
また、この第１の側面において、上記符号語において上記ユーザデータと上記選択パリティとの間に上記未使用データが配置されてもよい。これにより、ユーザデータと選択パリティとの間に配置された未使用データが変更されるという作用をもたらす。
【００１３】
また、この第１の側面において、上記符号語において上記未使用データと上記選択パリティとの間に上記ユーザデータが配置されてもよい。これにより、未使用データと選択パリティとの間にユーザデータが配置された符号語の未使用データが変更されるという作用をもたらす。
【００１４】
また、この第１の側面において、上記符号語において上記ユーザデータは複数の領域に分散して配置されてもよい。これにより、ユーザデータが複数の領域に分散して配置された符号語の未使用データが変更されるという作用をもたらす。
【００１５】
また、この第１の側面において、上記符号語において上記未使用データは、複数の領域に分散して配置されてもよい。これにより、複数の領域に分散して配置された未使用データが変更されるという作用をもたらす。
【００１６】
また、この第１の側面において、上記未使用データは、前記可変領域と値が変更されない固定領域とからなり、上記第２候補パリティ生成部は、上記可変領域の値を変更した上記情報部に対応する上記第２の候補パリティを生成してもよい。これにより、未使用データ内の可変領域の値が変更されるという作用をもたらす。
【００１７】
また、この第１の側面において、上記符号語において上記可変領域は複数の領域に分散して配置されてもよい。これにより、複数の領域に分散して配置された可変領域が変更されるという作用をもたらす。
【００１８】
また、この第１の側面において、上記符号語において上記固定領域は複数の領域に分散して配置されてもよい。これにより、固定領域が複数の領域に分散して配置された符号語の未使用データが変更されるという作用をもたらす。
【００１９】
また、この第１の側面において、上記第１の候補パリティ生成部は、上記情報部から上記第１の候補パリティを生成し、上記第２の候補パリティ生成部は、上記第１の候補パリティと第１のパリティパターンとの論理演算により上記第２の候補パリティを生成してもよい。これにより、第１の候補パリティと第１のパリティパターンとの論理演算により第２の候補パリティが生成されるという作用をもたらす。
【００２０】
また、この第１の側面において、第２のパリティパターンと上記第１の候補パリティとの論理演算により第３の候補パリティを生成する第３の候補パリティ生成部と、上記第２のパリティパターンと上記第２の候補パリティとの論理演算により第４の候補パリティを生成する第４の候補パリティ生成部とをさらに具備し、上記選択部は、上記第１、第２、第３および第４の候補パリティのうち所定の条件を満たすパリティを選択パリティとして選択してもよい。これにより、第２のパリティパターンと第１の候補パリティとの論理演算により第３の候補パリティが生成され、第２のパリティパターンと第２の候補パリティとの論理演算により第４の候補パリティが生成されるという作用をもたらす。
【００２１】
また、この第１の側面において、ユーザデータにおける特定の値のビット数を変換する変換処理を行って当該変換処理後の上記ユーザデータと上記変換処理前の上記ユーザデータとのいずれかを上記第１の候補パリティ生成部に出力するユーザデータ変換部をさらに具備し、上記第１の候補パリティ生成部は、上記出力されたユーザデータを含む上記第１の情報部から上記第１の候補パリティを生成してもよい。これにより、ユーザデータにおける特定の値のビット数が変換されるという作用をもたらす。
【００２２】
また、本技術の第２の側面は、所定の可変領域に所定値が設定された情報部の誤りを検出するためのパリティを第１の候補パリティとして生成する第１候補パリティ生成部と、前記所定の可変領域に前記所定値と異なる値が設定された前記情報部の誤りを検出するためのパリティを第２の候補パリティとして生成する第２候補パリティ生成部と、前記第１および第２の候補パリティのうち所定の条件を満たすパリティを選択パリティとして選択する選択部と、前記選択パリティに対応する前記情報部と前記選択パリティとからなる符号語をライトデータとしてメモリセルに出力する出力部と、前記メモリセルからリードデータを読み出して前記リードデータを復号する復号部とを具備するメモリコントローラある。これにより、第１および第２の候補パリティのうち所定の条件を満たす選択パリティと選択パリティに対応する上記情報部とからなる符号語が出力されるという作用をもたらす。
【００２３】
また、本技術の第３の側面は、所定の可変領域に所定値が設定された情報部の誤りを検出するためのパリティを第１の候補パリティとして生成する第１候補パリティ生成部と、前記所定の可変領域に前記所定値と異なる値が設定された前記情報部の誤りを検出するためのパリティを第２の候補パリティとして生成する第２候補パリティ生成部と、前記第１および第２の候補パリティのうち所定の条件を満たすパリティを選択パリティとして選択する選択部と、前記選択パリティに対応する前記情報部と前記選択パリティとからなる符号語を送信語として出力する出力部と、前記送信語に対応する受信語を受信して復号する復号部とを具備する通信システムである。これにより、第１および第２の候補パリティのうち所定の条件を満たす選択パリティと選択パリティに対応する上記情報部とからなる符号語が出力されるという作用をもたらす。
【発明の効果】
【００２４】
本技術によれば、データを符号化してメモリセルに書き込むメモリシステムにおいて、メモリセルのデータ保持特性を向上させることができるという優れた効果を奏し得る。なお、ここに記載された効果は必ずしも限定されるものではなく、本開示中に記載されたいずれかの効果であってもよい。
【図面の簡単な説明】
【００２５】
【図１】第１の実施の形態におけるメモリシステムの一構成例を示す全体図である。
【図２】第１の実施の形態における可変抵抗素子の抵抗分布の一例を示す図である。
【図３】第１の実施の形態におけるメモリコントローラの一構成例を示すブロック図である。
【図４】第１の実施の形態におけるメモリコントローラの機能構成例を示すブロック図である。
【図５】第１の実施の形態における生成行列および符号語の一例を示す図である。
【図６】第１の実施の形態における符号語のデータ構成の一例を示す図である。
【図７】第１の実施の形態における符号化部の一構成例を示すブロック図である。
【図８】第１の実施の形態における候補パリティ生成部の一構成例を示すブロック図である。
【図９】第１の実施の形態における選択部の一構成例を示すブロック図である。
【図１０】第１の実施の形態における復号部の一構成例を示すブロック図である。
【図１１】第１の実施の形態におけるユーザデータおよび符号語の一例を示す図である。
【図１２】第１の実施の形態における情報部および候補パリティの一例を示す図である。
【図１３】第１の実施の形態における不揮発性メモリの一構成を示すブロック図である。
【図１４】第１の実施の形態におけるストレージの動作の一例を示すフローチャートである。
【図１５】第１の実施の形態におけるコントローラ側ライト処理の一例を示すフローチャートである。
【図１６】第１の実施の形態におけるパリティ選択処理の一例を示すフローチャートである。
【図１７】第１の実施の形態におけるＮＶＲＡＭ側ライト処理の一例を示すフローチャートである。
【図１８】第１の実施の形態におけるコントローラ側リード処理の一例を示すフローチャートである。
【図１９】第１の実施の形態の変形例における候補パリティ生成部の一構成例を示すブロック図である。
【図２０】第２の実施の形態におけるメモリコントローラの機能構成例を示すブロック図である。
【図２１】第２の実施の形態における符号化部の一構成例を示すブロック図である。
【図２２】第２の実施の形態における選択部の一構成例を示すブロック図である。
【図２３】第２の実施の形態における情報部および候補パリティの一例を示す図である。
【図２４】第２の実施の形態におけるコントローラ側ライト処理の一例を示すフローチャートである。
【図２５】第２の実施の形態におけるパリティ選択処理の一例を示すフローチャートである。
【図２６】第３の実施の形態における符号語のデータ構造の一例を示す図である。
【図２７】第４の実施の形態における候補パリティ生成部の一構成例を示すブロック図である。
【図２８】第５の実施の形態における選択部の一構成例を示すブロック図である。
【図２９】第５の実施の形態における情報部および候補パリティの一例を示す図である。
【図３０】第５の実施の形態におけるパリティ選択処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００２６】
以下、本技術を実施するための形態（以下、実施の形態と称する）について説明する。説明は以下の順序により行う。
１．第１の実施の形態（候補パリティのいずれかを選択する例）
２．第２の実施の形態（書換えビット数に基づいて候補パリティのいずれかを選択する例）
３．第３の実施の形態（選択値の配置を変えて候補パリティのいずれかを選択する例）
４．第４の実施の形態（パリティパターンおよび候補パリティから新たに候補パリティを生成し、それらのいずれかを選択する例）
５．第５の実施の形態（最長ランの長さに基づいて候補パリティのいずれかを選択する例）
【００２７】
＜１．第１の実施の形態＞
［メモリシステムの構成例］
図１は、実施の形態におけるメモリシステムの一構成例を示すブロック図である。このメモリシステムは、ホストコンピュータ１００およびストレージ２００を備える。
【００２８】
ホストコンピュータ１００は、メモリシステム全体を制御するものである。具体的には、ホストコンピュータ１００は、コマンドおよびデータを生成してストレージ２００に信号線１０９を介して供給する。また、ホストコンピュータ１００は、ストレージ２００から、読み出されたデータを受け取る。ここで、コマンドは、ストレージ２００を制御するためのものであり、例えば、データの書込みを指示するライトコマンドや、データの読出しを指示するリードコマンドを含む。
【００２９】
ストレージ２００は、メモリコントローラ３００および不揮発性メモリ４００を備える。このメモリコントローラ３００は、不揮発性メモリ４００を制御するものである。メモリコントローラ３００は、ホストコンピュータ１００からライトコマンドおよびデータを受け取った場合に、そのデータから誤り検出訂正符号（ＥＣＣ：Error detection and Correction Code）を生成する。メモリコントローラ３００は、不揮発性メモリ４００に信号線３０９を介してアクセスして符号化したデータを書き込む。
【００３０】
また、ホストコンピュータ１００からリードコマンドを受け取った場合、メモリコントローラ３００は、不揮発性メモリ４００に信号線３０９を介してアクセスして符号化されたデータを読み出す。そして、メモリコントローラ３００は、符号化されたデータを、符号化前の元のデータに変換（すなわち、復号）する。復号の際に、メモリコントローラ３００は、ＥＣＣに基づいてデータにおける誤りの検出および訂正を行う。メモリコントローラ３００は、訂正したデータをホストコンピュータ１００に供給する。
【００３１】
不揮発性メモリ４００は、メモリコントローラ３００の制御に従って、データを記憶するものである。例えば、ＲｅＲＡＭが不揮発性メモリ４００として用いられる。この不揮発性メモリ４００は、複数のメモリセルを備え、これらのメモリセルは、複数のブロックに分けられている。ここで、ブロックは、不揮発性メモリ４００のアクセス単位であり、セクタとも呼ばれる。ブロックのそれぞれにはメモリアドレスが割り当てられている。なお、ＲｅＲＡＭの代わりに、フラッシュメモリ、ＰＣＲＡＭ、および、ＭＲＡＭなどを不揮発性メモリ４００として用いてもよい。
【００３２】
図２は、第１の実施の形態におけるＲｅＲＡＭの可変抵抗素子の抵抗分布の一例を示す図である。同図における横軸は、抵抗値を示しており、縦軸は、セルの数の相対的な分布を相対値により示している。可変抵抗素子の抵抗状態は、所定の閾値を境に、大きく２つの分布に分かれている。閾値と比較して抵抗値が低い状態は、低抵抗状態（ＬＲＳ：Low-Resistance State）と呼ばれ、閾値と比較して抵抗値が高い状態は、高抵抗状態（ＨＲＳ：High-Resistance State）と呼ばれる。不揮発性メモリ４００は、可変抵抗素子に電圧を印加することにより、その抵抗状態を可逆的に変化させてメモリセルを書き換えることができる。このメモリセルへの電圧印加を止めても抵抗状態が保持されるため、ＲｅＲＡＭは不揮発メモリとして機能することができる。
【００３３】
また、可変抵抗素子のＬＲＳおよびＨＲＳのそれぞれには、論理値「０」および論理値「１」の何れかが対応付けられる。例えば、ＬＲＳに論理値「１」が対応付けられ、ＨＲＳに論理値「０」が対応付けられる。それぞれの状態に論理値「０」および論理値「１」の何れを対応付けるかは任意である。
【００３４】
ＨＲＳのメモリセルに対して、一定以上の電圧が印加されると、そのメモリセルはＬＲＳ（「１」）に遷移する。この動作を以下、「セット」動作と称する。一方、ＬＲＳのメモリセルに対して、逆方向の電圧が印加されると、そのメモリセルはＨＲＳ（「０」）に遷移する。この動作を以下、「リセット」動作と称する。
【００３５】
図２におけるａは、劣化していない可変抵抗素子の抵抗分布の一例を示す図である。劣化していない場合には、「１」が書き込まれたメモリセル全ての抵抗値は閾値より低く、「０」が書き込まれたメモリセル全ての抵抗値は閾値より高くなっている。このため、書き込まれた値と同一の値のビットが読み出され、リードエラーは生じない。
【００３６】
一方、図２におけるｂは、劣化が進行した可変抵抗素子の抵抗分布の一例を示す図である。経年劣化やアクセスの繰返しにより劣化が進行すると、「１」が書き込まれたメモリセルの抵抗値が上昇し、閾値を超えるおそれがある。この閾値を超えたメモリセルからは、「０」の値が読み出され、誤りが発生してしまう。また、「０」が書き込まれたメモリセルの抵抗値が低下し、閾値を下回るおそれがある。この閾値を下回ったメモリセルからは、「１」の値が読み出され、誤りが発生してしまう。同図における点線で囲まれた部分は、誤りの生じるメモリセルを示す。
【００３７】
ここで、ＬＲＳのメモリセルでは、ＨＲＳのメモリセルと比較して誤りが発生しやすい。言い換えれば、ＨＲＳのメモリセルのデータ保持特性（リテンション）は、ＬＲＳよりも良好である。このため、ＬＲＳに「１」が割り当てられている場合、「１」が書き込まれたメモリセルでは、「０」が書き込まれたメモリセルよりも高い頻度で誤りが発生する。ＥＣＣが訂正することができる誤りの個数には、上限があるため、誤りの発生頻度が高いほど、訂正不能となってデータを保持することができなくなる可能性が高くなる。したがって、「１」のビット数が少ないほど、不揮発性メモリ４００のデータ保持特性が向上する。
【００３８】
［メモリコントローラの構成例］
図３は、第１の実施の形態におけるメモリコントローラ３００の一構成例を示すブロック図である。このメモリコントローラ３００は、ＲＡＭ（Random Access Memory）３１２、ＣＰＵ（Central Processing Unit）３１３、ＥＣＣ処理部３１４およびＲＯＭ（Read Only Memory）３０５を備える。また、メモリコントローラ３００は、システムインターフェース３１１、バス３１６およびメモリインターフェース３１７を備える。
【００３９】
ＲＡＭ３１２は、ＣＰＵ３１３が実行する処理において必要となるデータを一時的に保持するものである。ＣＰＵ３１３は、メモリコントローラ３００全体を制御するものである。ＲＯＭ３１５は、ＣＰＵ３１３が実行するプログラム等を記憶するものである。システムインターフェース３１１は、ホストコンピュータ１００との間でデータやコマンドを相互に交換するものである。バス３１６は、ＲＡＭ３１２、ＣＰＵ３１３、ＥＣＣ処理部３１４、ＲＯＭ３１５、システムインターフェース３１１およびメモリインターフェース３１７が相互にデータを交換するための共通の経路である。メモリインターフェース３１７は、不揮発性メモリ４００との間でデータやコマンドを相互に交換するものである。
【００４０】
ＥＣＣ処理部３１４は、符号化対象のデータ（ユーザデータなど）を符号化し、また、符号化されたデータを復号するものである。ここで、ユーザデータは、ホストコンピュータ１００により生成され、メモリコントローラ３００に入力されたデータである。ユーザデータの符号化においてＥＣＣ処理部３１４は、ユーザデータを含む情報部にパリティを付加することにより一定の単位で符号化する。一定の単位で符号化された個々のデータを以下、「符号語」と称する。これらの固定長の符号語からなる符号は、線形ブロック符号と呼ばれる。そして、ＥＣＣ処理部３１４は、符号語をライトデータとして不揮発性メモリ４００にバス３１６を介して供給する。
【００４１】
また、ＥＣＣ処理部３１４は、符号化されたリードデータを元のユーザデータに復号する。この復号において、ＥＣＣ処理部３１４は、パリティを使用して符号語の誤りを検出および訂正する。ＥＣＣ処理部３１４は、復号した元のユーザデータを訂正データとしてホストコンピュータ１００にバス３１６を介して供給する。
【００４２】
このＥＣＣ処理部３１４において誤り検出訂正符号として、例えば、ＢＣＨ符号が用いられる。このＢＣＨ符号の定義体（有限体）として、例えば、ＧＦ（２16）が用いられるものとする。このＧＦ（２16）上の多項式は、例えば、次の式により表される。
ｐ（ｘ）＝ｘ16＋ｘ5＋ｘ3＋ｘ2＋１                                ・・・式１
【００４３】
この有限体の原始元をαとすると、ＧＦ（２16）の元は、全てαのべき乗で表すことができる。また、符号化においては、次の式により表されるＧ（ｘ）が生成多項式として用いられる。
【数１】
0006657634.tif 000002
式２において、ＬＣＭ［］は、［］内の各々の多項式の最小公倍多項式を表わす。また、Ｍｉ（ｘ）は、αｉを根として持つ最小次数の多項式（最小多項式）である。例えばα（ｉ＝１）に対応する最小多項式はｘ16＋ｘ5＋ｘ3＋ｘ2＋１であり、α3（ｉ＝３）に対応する最小多項式はｘ16＋ｘ8＋ｘ6＋ｘ5＋ｘ4＋ｘ＋１である。
【００４４】
式２の生成多項式Ｇ（ｘ）により生成されるＢＣＨ符号は、ｔビットまでの誤りを訂正することができる。このＢＣＨ符号における符号語は生成多項式Ｇ（ｘ）で割り切れる多項式の係数をビット列に置き換えたものである。１ビットの誤りを訂正する場合には、１６ビットのパリティが生成され、ｔビットまでの誤りを訂正する場合には、t×１６ビット以下のパリティが生成される。ＢＣＨ符号の符号化および復号の手順の詳細については、例えば、「今井秀樹著、『符号理論』、社団法人電子情報通信学会、１９９０年３月、ｐ．１５１−１５５」に記載されている。
【００４５】
なお、ＥＣＣ処理部３１４は、ＢＣＨ符号に符号化しているが、誤りを検出することができる線形ブロック符号であれば、ＢＣＨ符号以外の符号に符号化してもよい。ＥＣＣ処理部３１４は、例えば、ＣＲＣ（Cyclic Redundancy Check）符号、ハミング符号、拡張ハミング符号や、ＲＳ（Reed-Solomon）符号に符号化してもよい。
【００４６】
図４は、第１の実施の形態におけるメモリコントローラ３００の機能構成例を示すブロック図である。このメモリコントローラ３００は、システムインターフェース３１１、符号化部３２０、復号部３７０、コマンド制御部３８０およびメモリインターフェース３１７を備える。図４における符号化部３２０および復号部３７０は、図３におけるＥＣＣ処理部３１４などにより実現される。また、図４におけるコマンド制御部３８０は、図３に
ＲＡＭ３１２、ＣＰＵ３１３およびＲＯＭ３１５などにより実現される。なお、メモリコントローラ３００は、特許請求の範囲に記載の符号化装置の一例である。
【００４７】
コマンド制御部３８０は、アクセス先のアドレスを指定するコマンドをデコードするものである。このコマンド制御部３８０は、デコードした結果に基づいて、制御信号を生成してメモリインターフェース３１７を介して不揮発性メモリ４００に供給する。この制御信号は、アクセス先のアドレスを指定して、不揮発性メモリ４００に読出しや書込みを要求する信号である。
【００４８】
符号化部３２０は、ユーザデータを符号化するものである。符号化部３２０は、ユーザデータを符号化してライトデータを生成し、メモリインターフェース３１７を介して不揮発性メモリ４００に供給する。
【００４９】
復号部３７０は、不揮発性メモリ４００から読み出されたリードデータを復号するものである。この復号部３７０は、リードデータの誤りを検出および訂正し、訂正後のユーザデータを訂正データとしてホストコンピュータ１００にシステムインターフェース３１１を介して供給する。
【００５０】
図５は、第１の実施の形態における生成行列および符号語の一例を示す図である。同図におけるａは、第１の実施の形態における、符号語を生成する際に用いられる生成行列Ｇの一例を示す図である。この生成行列の行数はｋ（ｋは整数）であり、列数はｎ（ｎは、ｋより大きな整数）である。同図におけるｂは、生成行列および情報部から符号語を求める計算式の一例である。ここで、情報部のデータサイズは、ユーザデータを符号化する単位より大きく、この情報部内には、ユーザデータが、それ以外の非ユーザデータとともに格納される。同図におけるｂに示すように、生成行列Ｇと、情報部との積により符号語が生成される。この符号語は、ｋビットの情報部と、ｎ−ｋビットのパリティとを含む。このように、情報部および生成行列の積によりパリティが生成されるため、情報部を一部でも変更すると、その変更後の情報部に対応するパリティも変化する。
【００５１】
［符号語の構成例］
図６は、第１の実施の形態における符号語のデータ構成の一例を示す図である。符号語は、４バイトの情報部と２バイトのパリティとから構成される。この情報部は、３バイトのユーザデータと１バイトの非ユーザデータとからなる。そして、非ユーザデータは、４ビットの管理データと４ビットの未使用データとからなる。メモリシステムの拡張性やアクセス単位の都合により、符号語には、ある程度の余裕をもったサイズの非ユーザデータが設けられており、管理データ以外の余った部分に未使用データが割り当てられる。なお、符号語内の各データのデータサイズは、図６に例示したサイズに限定されない。
【００５２】
ここで、管理データは、ユーザデータに対して符号化時に行われた変換処理を示すデータである。例えば、ユーザデータを反転する処理が変換処理として行われた場合には、反転したか否かを示す反転ビットが管理データに格納される。
【００５３】
また、未使用データは、非ユーザデータのうち、ユーザデータおよび管理データのいずれにも用いられないデータである。この未使用データは、２ビットの固定領域と２ビットの可変領域とからなる。固定領域には、固定値のデータが格納される領域である。例えば、固定領域の全ビットの値は「０」に固定される。一方、可変領域は、複数の値のいずれかのデータが格納される領域である。例えば、２進数で「００」、「０１」、「１０」および「１１」のいずれかが符号化部３２０により選択され、その値のデータが格納される。この可変領域に格納されるデータの値を以下、「選択値」と称する。なお、未使用データに固定領域および可変領域の両方を設けているが、固定領域を設けず、可変領域のみとしてもよい。
【００５４】
これらのデータは、例えば、符号語の右端から順に、パリティ、固定領域、可変領域、管理データ、および、ユーザデータの順で配置される。すなわち、右端から０乃至１５ビット目にパリティが格納され、１６および１７ビット目が固定領域として用いられる。また、右端から１８および１９ビット目に選択値が格納され、２０乃至２３ビット目に管理データが格納され、２４ビット目以降にユーザデータが格納される。
【００５５】
前述したように、情報部を一部でも変更すると、その情報部に対応するパリティも変化する。このため、符号化部３２０は、選択値の変更により、その変更後の情報部に対応するパリティを変化させることができる。例えば、符号化部３２０は、選択値を４パターンに変化させることにより、４パターンのパリティを生成することができる。
【００５６】
［符号化部の構成例］
図７は、第１の実施の形態における符号化部３２０の一構成例を示すブロック図である。この符号化部３２０は、ライトバッファ３２１、ユーザデータ変換部３２２、ＥＣＣ符号化器３２３、候補パリティ生成部３３０、選択部３４０、および、ライトデータ出力部３２４を備える。
【００５７】
ライトバッファ３２１は、ホストコンピュータ１００からのユーザデータを保持するものである。ユーザデータ変換部３２２は、必要に応じて、ユーザデータに対して変換処理を行うものである。例えば、ユーザデータ変換部３２２は、ユーザデータの少なくとも一部のビットを反転する処理を行う。例えば、ユーザデータの１／３または２／３のビットを反転する処理や、全体を反転する処理が行われる。ユーザデータ変換部３２２は、反転前に、ユーザデータの「１」のビット数を計数する。以下、データ内の特定の値（例えば、「１」）のビット数を、そのデータの「重み」と称する。前述したように「０」を保持するメモリセルのリテンションは、「１」を保持するメモリセルより良好である。このため、符号化部３２０は、「１」のビット数（すなわち、重み）が低減するか否かにより、反転するか否かを判断し、また、反転する部分を決定する。重みが低減するようにユーザデータを変換して書き込むことにより、そのユーザデータを保持するメモリセルのリテンションを向上させることができる。
【００５８】
ユーザデータ変換部３２２は、ユーザデータのうち反転した部分を示す反転ビットを格納したデータと所定の選択値（例えば、「００」）を設定した未使用データとを生成し、それらとユーザデータとを格納した情報部をＥＣＣ符号化器３２３に供給する。
【００５９】
なお、ユーザデータ変換部３２２は、ユーザデータの少なくとも一部の反転処理によりユーザデータを変換しているが、重みが変わる処理であれば、反転処理以外の処理により変換してもよい。ユーザデータ変換部３２２は、例えば、所定の固定パターンとユーザデータとにおいて対応するビットごとにＸＯＲ（排他的論理和）を演算する処理を行ってもよい。
【００６０】
ＥＣＣ符号化器３２３は、情報部を符号化するものである。このＥＣＣ符号化器３２３は、式２の生成多項式Ｇ（ｘ）と情報部とから、情報部およびパリティからなる符号語を生成する。そして、ＥＣＣ符号化器３２３は、その情報部をライトデータ出力部３２４に供給し、パリティを候補パリティＣ０として候補パリティ生成部３３０に供給する。なお、ＥＣＣ符号化器３２３は、特許請求の範囲に記載の第１候補パリティ生成部の一例である。
【００６１】
候補パリティ生成部３３０は、一部のデータを変更した情報部の誤りを検出するためのパリティを候補パリティとして生成するものである。この候補パリティ生成部３３０は、未使用データに「００」以外の選択値（「０１」など）を設定した情報部に対応するパリティを候補パリティとして生成する。候補パリティ生成部３３０は、例えば、選択値「０１」の情報部と、選択値「１０」の情報部と、選択値「１１」の情報部とのそれぞれについて候補パリティを生成する。これらの候補パリティをＣ１、Ｃ２およびＣ３とする。候補パリティ生成部３３０は、ＥＣＣ符号化器３２３からの候補パリティＣ０と、自身が生成した候補パリティＣ１、Ｃ２およびＣ３とを選択部３４０に供給する。
【００６２】
なお、候補パリティ生成部３３０が生成する候補パリティの個数は、１つ以上であればよく、３つに限定されない。生成する候補パリティの個数に応じて、選択値が格納される可変領域のビット数を変更すればよい。例えば、３ビットの可変領域を設けた場合には、ＥＣＣ符号化器３２３および候補パリティ生成部３３０は、合計で８個の候補パリティを生成することができる。
【００６３】
選択部３４０は、候補パリティＣ０、Ｃ１、Ｃ２およびＣ３のうち、所定の条件を満たすパリティを選択するものである。この選択部３４０は、候補パリティごとに、その候補パリティに対応する未使用データと、候補パリティとからなる組の重みを計数して比較する。そして、選択部３４０は、候補パリティおよび未使用データの組のうち重みが最も少ないものを選択する。選択部３４０は、選択した組の候補パリティを選択パリティとして、その選択パリティに対応する選択値とともにライトデータ出力部３２４に供給する。
【００６４】
前述したように「０」を保持するメモリセルのリテンションは、「１」を保持するメモリセルより良好である。このため、符号化部３２０は、「１」のビット数（すなわち、重み）が最小の候補パリティおよび未使用データを選択して書き込むことにより、それらのデータを保持するメモリセルのリテンションを向上させることができる。
【００６５】
なお、選択部３４０は「１」の値のビット数を「重み」として計数しているが、「０」の値のビット数を重みとして計数してもよい。
【００６６】
ライトデータ出力部３２４は、選択パリティに対応する情報部と、選択パリティとからなる符号語をライトデータとして出力するものである。このライトデータ出力部３２４は、選択パリティに対応する選択値により、情報部の未使用データを更新し、その情報部と選択パリティとからなる符号語をメモリインターフェース３１７に出力する。
【００６７】
［候補パリティ生成部の構成例］
図８は、第１の実施の形態における候補パリティ生成部３３０の一構成例を示すブロック図である。この候補パリティ生成部３３０は、パリティパターン生成部３３１、３３２および３３３と、排他的論理和演算部３３４、３３５および３３６とを備える。
【００６８】
パリティパターン生成部３３１は、未使用データに選択値「０１」を設定し、未使用データ以外の全ビットに「０」に設定した情報部から、パリティを生成するものである。パリティは、例えば、情報部と生成多項式Ｇ（ｘ）との積により生成される。このパリティパターン生成部３３１は、生成したパリティをパリティパターンＰ１として排他的論理和演算部３３４に供給する。
【００６９】
パリティパターン生成部３３２は、未使用データに選択値「１０」を設定し、未使用データ以外の全ビットに「０」を設定した情報部から、パリティを生成するものである。このパリティパターン生成部３３２は、生成したパリティをパリティパターンＰ２として排他的論理和演算部３３５に供給する。
【００７０】
パリティパターン生成部３３３は、未使用データに選択値「１１」を設定し、未使用データ以外の全ビットに「０」を設定した情報部から、パリティを生成するものである。このパリティパターン生成部３３３は、生成したパリティをパリティパターンＰ３として排他的論理和演算部３３６に供給する。
【００７１】
排他的論理和演算部３３４は、候補パリティＣ０とパリティパターンＰ１とにおいて、対応するビットごとにＸＯＲ（排他的論理和）を演算するものである。この排他的論理和演算部３３４は、演算結果を候補パリティＣ１として選択部３４０に供給する。なお、排他的論理和演算部３３４は、特許請求の範囲に記載の第２候補パリティ生成部の一例である。
【００７２】
排他的論理和演算部３３５は、候補パリティＣ０とパリティパターンＰ２とにおいて、対応するビットごとにＸＯＲを演算するものである。この排他的論理和演算部３３５は、演算結果を候補パリティＣ２として選択部３４０に供給する。なお、排他的論理和演算部３３５は、特許請求の範囲に記載の第３候補パリティ生成部の一例である。
【００７３】
排他的論理和演算部３３６は、候補パリティＣ０とパリティパターンＰ３とにおいて、対応するビットごとにＸＯＲを演算するものである。この排他的論理和演算部３３６は、演算結果を候補パリティＣ３として選択部３４０に供給する。
【００７４】
［選択部の構成例］
図９は、第１の実施の形態における選択部３４０の一構成例を示すブロック図である。この選択部３４０は、重みカウンタ３４１、３４２、３４３および３４４と、加算器３４６、３４７および３４８と、比較部３４５とを備える。
【００７５】
重みカウンタ３４１は、候補パリティＣ３の「１」の個数（重み）を計数するものである。この重みカウンタ３４１は、計数値を加算器３４６に供給する。
【００７６】
加算器３４６は、候補パリティＣ３に対応する未使用データの重みの個数（例えば、「２」）を候補パリティＣ３の重みの計数値に加算するものである。この加算器３４６は、加算後の計数値ＣＮＴ３を比較部３４５に供給する。
【００７７】
重みカウンタ３４２は、候補パリティＣ２の重みを計数するものである。この重みカウンタ３４２は、計数値を加算器３４７に供給する。
【００７８】
加算器３４７は、候補パリティＣ２に対応する未使用データの重みの個数（例えば、「１」）を候補パリティＣ２の重みの計数値に加算するものである。この加算器３４７は、加算後の計数値ＣＮＴ２を比較部３４５に供給する。
【００７９】
重みカウンタ３４３は、候補パリティＣ１の重みを計数するものである。この重みカウンタ３４３は、計数値を加算器３４８に供給する。
【００８０】
加算器３４８は、候補パリティＣ１に対応する未使用データの重みの個数（例えば、「１」）を候補パリティＣ１の重みの計数値に加算するものである。この加算器３４８は、加算後の計数値ＣＮＴ１を比較部３４５に供給する。なお、重みカウンタ３４３および加算器３４８は、特許請求の範囲に記載の第２の重みカウンタの一例である。
【００８１】
重みカウンタ３４４は、候補パリティＣ０の重みを計数するものである。この重みカウンタ３４４は、計数値ＣＮＴ０を比較部３４５に供給する。なお、重みカウンタ３４４は、特許請求の範囲に記載の第１の重みカウンタの一例である。
【００８２】
比較部３４５は、候補パリティＣ０乃至Ｃ３のうち、対応する重み（ＣＮＴ０乃至ＣＮＴ３）が最小の候補パリティを選択パリティとして選択するものである。比較部３４５は、選択した選択パリティと、その選択パリティに対応する選択値とをライトデータ出力部３２４に供給する。
【００８３】
［復号部の構成例］
図１０は、第１の実施の形態における復号部３７０の一構成例を示すブロック図である。この復号部３７０は、リードバッファ３７１、ユーザデータ逆変換部３７２およびＥＣＣ復号器３７３を備える。
【００８４】
ＥＣＣ復号器３７３は、不揮発性メモリ４００からリードデータを読み出し、符号化部３２０の符号化手順と対応する復号手順により、リードデータを復号するものである。このＥＣＣ復号器３７３は、復号した情報部をユーザデータ逆変換部３７２に供給する。
【００８５】
ユーザデータ逆変換部３７２は、情報部内のユーザデータに対し、符号化部３２０の変換処理と対応する逆変換処理を行うものである。このユーザデータ逆変換部３７２は、例えば、情報部内の管理データ内の反転ビットに基づいて、ユーザデータの少なくとも一部を反転して元のデータに戻す処理を逆変換処理として行う。ユーザデータ逆変換部３７２は、逆変換処理後のユーザデータをリードバッファ３７１に供給する。
【００８６】
リードバッファ３７１は、ユーザデータ逆変換部３７２からのユーザデータを保持し、訂正データとしてシステムインターフェース３１１に供給するものである。
【００８７】
図１１は、第１の実施の形態におけるユーザデータおよび符号語の一例を示す図である。同図におけるａは、反転前のユーザデータの一例を示し、同図におけるｂは、一部を反転したユーザデータの一例を示す。同図における「＊」は「１」の値のビットの位置を示す。また、同図におけるｂの点線で囲った部分は、反転されたビット列を示す。例えば、３バイトのユーザデータのうち１バイトが反転される。これにより、同図におけるｂに例示するように重みが低減する。
【００８８】
図１１におけるｃは、第１の実施の形態における符号語の一例を示す図である。ユーザデータの左端の１バイトが反転されたため、左端の部分を反転したことを示す「１」の反転ビットが管理データの左端のビットに設定される。また、未使用データには、選択値「００」が設定される。ＥＣＣ符号化器３２３は、それらの管理データおよび未使用データと反転後のユーザデータとからなる情報部を生成し、その情報部から候補パリティＣ０を生成する。
【００８９】
図１２は、第１の実施の形態における情報部および候補パリティの一例を示す図である。同図におけるａは、ユーザデータと選択値「００」の未使用データと候補パリティＣ０とからなる符号語を示す。
【００９０】
候補パリティ生成部３３０は、選択値「０１」、「１０」および「１１」を設定し、それ以外の全ビットを「０」に設定した情報部のそれぞれから、パリティパターンＰ１、Ｐ２およびＰ３を生成する。
【００９１】
図１２におけるｂは、パリティパターンＰ１を含む符号語を示し、同図におけるｃはパリティパターンＰ２を含む符号語を示す。また、同図におけるｄはパリティパターンＰ３を含む符号語を示す。そして、候補パリティ生成部３３０は、候補パリティＣ０とパリティパターンＰ１、Ｐ２およびＰ３とについて、対応するビットごとにＸＯＲ演算を行い、候補パリティＣ１、Ｃ２およびＣ３を生成する。
【００９２】
図１２におけるｅは、候補パリティＣ１を含む符号語を示し、同図におけるｆは候補パリティＣ２を含む符号語を示す。また、同図におけるｇは候補パリティＣ３を含む符号語を示す。
【００９３】
ここで、ＢＣＨ符号などの線形ブロック符号においては、符号語同士を加算した結果は、その符号における符号語になることが知られている。したがって、パリティパターンＰ１を含む符号語と、候補パリティＣ０を含む符号語とについて、対応するビットごとにＸＯＲ演算（言い換えれば加算）を行った結果は、符号語となる。このため、その加算結果の符号語における候補パリティＣ０により、対応する情報部の誤りを検出および訂正することができる。したがって、復号部３７０は、選択パリティについてＸＯＲ演算などを行う必要がなく、そのまま復号を行うことができる。
【００９４】
そして、候補パリティ生成部３３０は、候補パリティＣ０乃至Ｃ３と、対応する選択値とにおける重みを計数する。図１２における「＊」は、計数されたビットの位置を示す。例えば、候補パリティＣ０および選択値「００」の「＊」の個数（重み）は、１０進数で「８」である。また。候補パリティＣ１および選択値「０１」の重みは、１０進数で「８」であり、候補パリティＣ２および選択値「１０」の重みは、１０進数で「５」である。候補パリティＣ３および選択値「１１」の重みは、１０進数で「８」である。
【００９５】
これらの重みの最小値は「５」であり、対応する候補パリティＣ２が選択される。なお、重みが最小となる候補パリティが２つ以上の場合には、それらのいずれか１つが任意に選択される。
【００９６】
一般的なメモリコントローラのように、パリティおよび未使用データをそのまま書き込む構成では、それらを書き込むメモリセルのリテンションを向上させることができない。しかし、図１２に例示したように、符号化部３２０は、情報部の一部（すなわち、未使用データ）を変更して、複数の候補パリティを生成し、それらのうち重みが最小のパリティを選択する。このため、パリティおよび未使用データを書き込むメモリセルの重みが小さくなる。例えば、図１２の例においては、重みを「８」から「５」に低減することができる。これにより、メモリセルのリテンションを向上させることができる。
【００９７】
なお、パリティパターンの生成およびＸＯＲ演算により候補パリティＣ１乃至Ｃ３を生成しているが、この構成に限定されない。例えば、符号化部３２０は、図１２におけるｅ乃至ｇの未使用データのみを変更した情報部と、生成多項式Ｇ（ｘ）との積により、候補パリティＣ１等を生成してもよい。ただし、パリティパターンの生成およびＸＯＲ演算を行う場合の方が演算量が少なくて済む。例えば、情報部の未使用データ以外の全ビットを「０」とした情報部からパリティパターンを生成する場合には、未使用データ以外が「０」であるため、ユーザデータが格納されている場合と比較して演算量が少なくなる。さらにＸＯＲ演算も行われるが、この演算を考慮しても全体の演算量は低減する。したがって、符号化部３２０は、パリティパターンの生成およびＸＯＲ演算により候補パリティＣ１等を生成することが望ましい。
【００９８】
また、符号化部３２０は、ユーザデータを変換しているが、ユーザデータを変換せずにそのまま符号化してもよい。この場合には、復号部３７０が、逆変換を行わず復号のみを行う。
【００９９】
また、メモリシステムに符号化部３２０を設けているが、符号化を行うシステム（通信システム）であれば、メモリシステム以外のシステムに符号化部３２０を設けてもよい。例えば、ハイレベルのビットを送信するよりも、ローレベルのビットを送信する方が消費電力が低減する通信システムであれば、符号化部３２０が最小の重みとなるパリティを選択することで消費電力を低減することができる。
【０１００】
［不揮発性メモリの構成例］
図１３は、第１の実施の形態における不揮発性メモリ４００の一構成例を示すブロック図である。この不揮発性メモリ４００は、データバッファ４１０、メモリセルアレイ４２０、ドライバ４３０、アドレスデコーダ４４０、バス４５０、制御インターフェース４６０、および、メモリ制御部４７０を備える。
【０１０１】
データバッファ４１０は、メモリ制御部４７０の制御に従って、ライトデータやリードデータをアクセス単位で保持するものである。メモリセルアレイ４２０は、マトリックス
状に配列された複数のメモリセルを備える。各々のメモリセルとして、ＲｅＲＡＭなどの不揮発性の記憶素子が用いられる。
【０１０２】
ドライバ４３０は、アドレスデコーダ４４０により選択されたメモリセルに対してデータの書込み、または、データの読出しを行うものである。アドレスデコーダ４４０は、コマンドにより指定されたアドレスを解析して、そのアドレスに対応するメモリセルを選択するものである。バス４５０は、データバッファ４１０、メモリセルアレイ４２０、アドレスデコーダ４４０、メモリ制御部４７０および制御インターフェース４６０が相互にデータを交換するための共通の経路である。制御インターフェース４６０は、メモリコントローラ３００と不揮発性メモリ４００とがデータやコマンドを相互に交換するためのインターフェースである。
【０１０３】
メモリ制御部４７０は、ドライバ４３０およびアドレスデコーダ４４０を制御して、データの書込み、または、読出しを行わせるものである。メモリ制御部４７０は、書込みを指示する制御信号およびライトデータを受け取った場合には、その制御信号の指定するアドレスに書き込まれているデータをプレリードデータとして読み出す。メモリ制御部４７０は、ライトデータとプレリードデータとをビット単位で比較し、ライトデータにおいて「１」であり、かつ、プレリードデータにおいて「０」のビットを書換え対象とする。メモリ制御部４７０は、それらの書換え対象のビットを「１」に書き換える。次に、メモリ制御部４７０は、ライトデータとセット処理後のプレリードデータとをビット単位で比較し、ライトデータにおいて「０」であり、かつ、プレリードデータにおいて「１」のビットを書換え対象とする。メモリ制御部４７０は、それらの書換え対象のビットを「０」に書き換える。
【０１０４】
また、メモリ制御部４７０は、読出しを指示する制御信号を受け取ると、アドレスデコーダ４４０およびドライバ４３０を制御してメモリコントローラ３００へリードデータを出力させる。
【０１０５】
［ストレージの動作例］
図１４は、第１の実施の形態におけるストレージ２００の動作の一例を示すフローチャートである。この動作は、例えば、ホストコンピュータ１００によりストレージ２００に対して初期化が指示されたときに開始する。
【０１０６】
不揮発性メモリ４００は、メモリセルアレイ４２０を初期化する（ステップＳ９０１）。メモリコントローラ３００は、ホストコンピュータ１００からのコマンドをデコードする（ステップＳ９０２）。メモリコントローラ３００は、ホストコンピュータ１００からコマンドを受け取った場合に、そのコマンドがライトコマンドであるか否かを判断する（ステップＳ９０３）。ここでは、ホストコンピュータ１００からのコマンドは、ライトコマンドおよびリードコマンドのうちのいずれかであるものとする。
【０１０７】
ライトコマンドである場合には（ステップＳ９０３：Ｙｅｓ）、メモリコントローラ３００は、コントローラ側ライト処理を実行する（ステップＳ９１０）。そして、不揮発性メモリ４００は、ＮＶＲＡＭ側ライト処理を実行する（ステップＳ９３０）。
【０１０８】
一方、リードコマンドである場合には（ステップＳ９０３：Ｎｏ）、メモリコントローラ３００は、コントローラ側リード処理を実行する（ステップＳ９５０）。そして、不揮発性メモリ４００は、データを読み出し、メモリコントローラ３００に転送する（ステップＳ９０４）。ステップＳ９３０またはＳ９０４の後、ストレージ２００は、ステップＳ９０２に戻る。
【０１０９】
図１５は、第１の実施の形態におけるコントローラ側ライト処理の一例を示すフローチャートである。メモリコントローラ３００は、ユーザデータの重みを計数し（ステップＳ９１１）、計数値に基づいてユーザデータの少なくとも一部を反転する（ステップＳ９１２）。メモリコントローラ３００は、反転フラグを管理データに格納し（ステップＳ９１３）、反転処理後のユーザデータを含む情報部を、その情報部および候補パリティＣ０からなる符号語に符号化する（ステップＳ９１４）。
【０１１０】
メモリコントローラ３００は、複数の候補パリティのいずれかを選択するパリティ選択処理を実行する（ステップＳ９２０）。そして、メモリコントローラ３００は、選択パリティと、対応する情報部とを含むライトデータを不揮発性メモリ４００に出力し（ステップＳ９１５）、コントローラ側ライト処理を終了する。
【０１１１】
図１６は、第１の実施の形態におけるパリティ選択処理の一例を示すフローチャートである。メモリコントローラ３００は、選択値ごとに候補パリティを生成し（ステップＳ９２１）、候補パリティごとに重みを計数する（ステップＳ９２２）。メモリコントローラ３００は、重みが最小になる候補パリティを選択し（ステップＳ９２３）、選択パリティ、および、対応する選択値を符号語に格納する（ステップＳ９２４）。ステップＳ９２４の後、メモリコントローラ３００は、パリティ選択処理を終了する。
【０１１２】
図１７は、第１の実施の形態におけるＮＶＲＡＭ側ライト処理の一例を示すフローチャートである。不揮発性メモリ４００は、ライトデータを取得する（ステップＳ９３１）。不揮発性メモリ４００は、書込み先のアドレスに書き込まれているデータをプレリードする（ステップＳ９３２）。不揮発性メモリ４００は、ライトデータと、プレリードデータとにおいて対応するビットを比較し、リセットマスクデータを生成する（ステップＳ９３３）。このリセットマスクデータは、ライトデータにおいて「０」であり、かつ、プレリードデータにおいて「１」であるビットについてはリセットする旨を示し、それ以外のビットについてはマスクする旨を示す。
【０１１３】
不揮発性メモリ４００は、リセットマスクデータによりリセットする旨が示されたビットのみを「１」から「０」に書き換える処理（リセット処理）を行う（ステップＳ９３４）。不揮発性メモリ４００は、リセット処理後のプレリードデータを読み出し、ベリファイエラーが生じたか否かを判断する（ステップＳ９３５）。
【０１１４】
ベリファイエラーが生じなかった場合には（ステップＳ９３５：Ｎｏ）、不揮発性メモリ４００は、ライトデータと、リセット処理後のプレリードデータとにおいて対応するビットを比較し、セットマスクデータを生成する（ステップＳ９３６）。このセットマスクデータは、ライトデータにおいて「１」であり、かつ、プレリードデータにおいて「０」であるビットについてはセットする旨を示し、それ以外のビットについてはマスクする旨を示す。
【０１１５】
不揮発性メモリ４００は、セットマスクデータによりセットする旨が示されたビットのみを「０」から「１」に書き換える処理（セット処理）を行う（ステップＳ９３７）。不揮発性メモリ４００は、セット処理後のプレリードデータを読み出し、ベリファイエラーが生じたか否かを判断する（ステップＳ９３８）。
【０１１６】
リセット処理においてエラーが発生した場合（ステップＳ９３５：Ｙｅｓ）、または、セット処理においてエラーが発生した場合（ステップＳ９３８：Ｙｅｓ）、不揮発性メモリ４００は、ライトエラーをホストコンピュータ１００に通知する（ステップＳ９３９）。セット処理においてエラーが発生していない場合（ステップＳ９３８：Ｎｏ）、または、ステップＳ９３９の後、不揮発性メモリ４００は、メモリコントローラ３００にステータスを転送する（ステップＳ９４０）。ステップＳ９４０の後、不揮発性メモリ４００は、ＮＶＲＡＭ側ライト処理を終了する。
【０１１７】
図１８は、第１の実施の形態におけるコントローラ側リード処理の一例を示すフローチャートである。メモリコントローラ３００は、リードデータを取得し（ステップＳ９５１）、復号する（ステップＳ９５２）。メモリコントローラ３００は、管理データに基づいて、ユーザデータを反転する（ステップＳ９５３）。メモリコントローラ３００は、ユーザデータを訂正データとしてホストコンピュータ１００に出力し（ステップＳ９５４）、コントローラ側リード処理を終了する。
【０１１８】
このように、本技術の第１の実施の形態によれば、符号化部３２０は、情報部内の可変領域に複数の異なる値を設定して候補パリティを生成し、それらのうち重みが最小となるパリティを選択するため、メモリセルのデータ保持特性を向上させることができる。
【０１１９】
［変形例］
上述の第１の実施の形態では、候補パリティ生成部３３０は、行列演算によりパリティパターンを生成していたが、符号語のデータサイズが大きくなるほど、演算量が増大するおそれがある。この第１の実施の形態における変形例の候補パリティ生成部３３０は、演算量を低減した点において第１の実施の形態と異なる。
【０１２０】
図１９は、第１の実施の形態の変形例における候補パリティ生成部３３０の一構成例を示すブロック図である。この変形例の候補パリティ生成部３３０は、パリティパターン生成部３３１、３３２および３３３の代わりに、パリティパターン保持部３３７を備える点において第１の実施の形態と異なる。
【０１２１】
パリティパターン保持部３３７は、選択値ごとに、予め演算しておいたパリティパターン（Ｐ１、Ｐ２およびＰ３など）を保持するものである。これらのパリティパターンは。排他的論理和演算部３３４、３３５および３３６のそれぞれにより読み出される。
【０１２２】
このように、本技術の第１の実施の形態の変形例によれば、候補パリティ生成部３３０は、予め演算しておいたパリティパターンを保持するため、パリティパターンを求める行列演算を行う必要がなくなる。
【０１２３】
＜２．第２の実施の形態＞
上述の第１の実施の形態では、メモリコントローラ３００は、重みが最小となる候補パリティを選択パリティとして選択していた。しかし、選択パリティにより、書き換えるビット数が多くなる場合には、メモリセルのリテンションを十分に向上することができないおそれがある。このため、書き換えるビット数を低減することが望ましい。この第２の実施の形態のメモリコントローラ３００は、書き換えるビット数を低減した点において第１の実施の形態と異なる。
【０１２４】
図２０は、第２の実施の形態におけるメモリコントローラ３００の機能構成例を示すブロック図である。この第２の実施の形態のメモリコントローラ３００は、コマンド制御部３８０の代わりにコマンド制御部３８１を備える点において第１の実施の形態と異なる。
【０１２５】
コマンド制御部３８１は、ライトコマンドを受け取ると、書込みとプレリードデータの出力とを要求する制御信号を生成して不揮発性メモリ４００に供給する。この制御信号に従ってメモリコントローラ３００は、ライトデータの書込み前のプレリードデータをメモリコントローラ３００に出力する。符号化部３２０は、このプレリードデータと、符号語とをビット単位で比較して書き換えるビット数が最小になるライトデータを生成する。
【０１２６】
図２１は、第２の実施の形態における符号化部３２０の一構成例を示すブロック図である。この第２の実施の形態の符号化部３２０は、ユーザデータ変換部３２２および選択部３４０の代わりにユーザデータ変換部３２５および選択部３５０を備える点において第１の実施の形態と異なる。
【０１２７】
ユーザデータ変換部３２５は、プレリード内のユーザデータおよび管理データからなる組を取得する。そして、ユーザデータ変換部３２５は、反転前のユーザデータおよび管理データにおいて、プレリードデータ内の対応するビットと値の異なるビットの個数を計数する。ユーザデータ変換部３２５は、その計数値に基づいて、書換えビット数が最小になるように反転処理を行い、その反転処理後のユーザデータを含む情報部をＥＣＣ符号化器３２３に供給する。
【０１２８】
また、選択部３５０は、プレリード内の未使用データおよびパリティからなる組を取得する。そして、ユーザデータ変換部３２５は、候補パリティおよび未使用データからなる組のそれぞれについて、プレリードデータ内の対応するビットと値の異なるビットの個数を計数する。ユーザデータ変換部３２５は、計数値（すなわち、書き換えるビット数）が最小となる組の候補パリティを選択する。
【０１２９】
図２２は、第２の実施の形態における選択部３５０の一構成例を示すブロック図である。この選択部３５０は、未使用データ保持部３５１、排他的論理和演算部３５２乃至３５５と、書換えビット数カウンタ３５６乃至３５９と、比較部３４５とを備える。
【０１３０】
未使用データ保持部３５１は、異なる選択値が設定された複数の未使用データを保持するものである。これらの未使用データは、排他的論理和演算部３５２乃至３５５により読み出される。
【０１３１】
排他的論理和演算部３５２は、プレリードデータ内のパリティおよび未使用データと、候補パリティＣ３および対応する未使用データとのそれぞれについて、対応するビットごとにＸＯＲ演算を行うものである。候補パリティＣ３に対応する未使用データとして、「１１００」が未使用データ保持部３５１から読み出される。排他的論理和演算部３５２は、演算結果を書換えビット数カウンタ３５６に供給する。
【０１３２】
排他的論理和演算部３５３は、プレリードデータ内のデータと、候補パリティＣ２および対応する未使用データ「１０００」とのそれぞれについて、対応するビットごとにＸＯＲ演算を行うものである。この排他的論理和演算部３５３は、演算結果を書換えビット数カウンタ３５７に供給する。
【０１３３】
排他的論理和演算部３５４は、プレリードデータ内のデータと、候補パリティＣ１および対応する未使用データ「０１００」とのそれぞれについて、対応するビットごとにＸＯＲ演算を行うものである。この排他的論理和演算部３５４は、演算結果を書換えビット数カウンタ３５８に供給する。
【０１３４】
排他的論理和演算部３５５は、プレリードデータ内のデータと、候補パリティＣ０および対応する未使用データ「００００」とのそれぞれについて、対応するビットごとにＸＯＲ演算を行うものである。この排他的論理和演算部３５５は、演算結果を書換えビット数カウンタ３５９に供給する。
【０１３５】
書換えビット数カウンタ３５６は、排他的論理和演算部３５２の演算結果において「１」の個数を書換えビット数として計数するものである。この書換えビット数カウンタ３５６は、計数値ＣＮＴ３を比較部３４５に供給する。
【０１３６】
書換えビット数カウンタ３５７は、排他的論理和演算部３５３の演算結果において「１」の個数を書換えビット数として計数するものである。この書換えビット数カウンタ３５７は、計数値ＣＮＴ２を比較部３４５に供給する。
【０１３７】
書換えビット数カウンタ３５８は、排他的論理和演算部３５４の演算結果において「１」の個数を書換えビット数として計数するものである。この書換えビット数カウンタ３５８は、計数値ＣＮＴ１を比較部３４５に供給する。
【０１３８】
書換えビット数カウンタ３５９は、排他的論理和演算部３５５の演算結果において「１」の個数を書換えビット数として計数するものである。この書換えビット数カウンタ３５９は、計数値ＣＮＴ０を比較部３４５に供給する。第２の実施の形態の比較部３４５の構成は、第１の実施の形態と同様である。
【０１３９】
図２３は、第２の実施の形態における情報部および候補パリティの一例を示す図である。同図におけるａは、ユーザデータと選択値「００」の未使用データと候補パリティＣ０とからなる符号語を示す。同図におけるｂは、プレリードデータの一例を示す図である。また、図２２におけるｃは、候補パリティＣ１を含む符号語を示し、同図におけるｄは候補パリティＣ２を含む符号語を示す。また、同図におけるｅは候補パリティＣ３を含む符号語を示す。
【０１４０】
候補パリティ生成部３３０は、プレリードデータ内のパリティおよび未使用データと、候補パリティおよび対応する未使用データとをビット単位で比較する。この比較結果より、候補パリティ生成部３３０は、それぞれの候補パリティについて書換えビット数を求める。
【０１４１】
図２３において「＊」は、書換えビットの位置を示す。例えば、候補パリティＣ０および未使用データ「００００」では、書換えビット数が１０進数で「１２」個になる。候補パリティＣ１および未使用データ「０１００」では、書換えビット数が１０進数で「９」個になり、候補パリティＣ２および未使用データ「１０００」では、書換えビット数が１０進数で「１３」個になる。候補パリティＣ３および未使用データ「１１００」では、書換えビット数が１０進数で「１２」個になる。これらのうち、書換えビット数が最小となる候補パリティＣ２が選択される。これにより、メモリセルの書換えビット数が低減し、メモリセルのリテンションを向上させることができる。
【０１４２】
図２４は、第２の実施の形態におけるコントローラ側ライト処理の一例を示すフローチャートである。この第２の実施の形態のコントローラ側ライト処理は、ステップＳ９１１の代わりに、ステップＳ９１６およびＳ９１７を実行する点において第１の実施の形態と異なる。
【０１４３】
メモリコントローラ３００は、プレリードデータを取得し（ステップＳ９１６）、反転前のユーザデータについて書換えビット数を計数する（ステップＳ９１７）。ステップＳ９１７の後、メモリコントローラ３００は、ステップＳ９１２以降を実行する。
【０１４４】
図２５は、第２の実施の形態におけるパリティ選択処理の一例を示すフローチャートである。第２の実施の形態のパリティ選択処理は、ステップＳ９２２およびＳ９２３の代わりにステップＳ９２５およびＳ９２６を実行する点において第１の実施の形態と異なる。
【０１４５】
メモリコントローラ３００は、候補パリティを生成し（ステップＳ９２１）、候補パリティごとに書換えビット数を計数する（ステップＳ９２５）。メモリコントローラ３００は、書換えビット数が最小になる候補パリティを選択し（ステップＳ９２６）、ステップＳ９２４を実行する。
【０１４６】
このように、本技術の第２の実施の形態によれば、符号化部３２０は、候補パリティのうち書換えビット数が最小になるパリティを選択するため、メモリセルの書換えビット数を低減してメモリセルのデータ保持特性を向上させることができる。
【０１４７】
＜３．第３の実施の形態＞
上述の第１の実施の形態では符号語において、右端からパリティ、固定領域、可変領域、管理データ、および、ユーザデータの順でデータが配置されていた。しかし、この順では、重みが十分に低減しないことがあるため、重みが低減しやすい順序でデータを配置することが望ましい。第３の実施の形態のメモリコントローラ３００は、データ構造の異なる符号語を生成する点において第１の実施の形態と異なる。
【０１４８】
図２６は、第３の実施の形態における符号語のデータ構造の一例を示す図である。同図における灰色の領域は、固定領域を示し、斜線の領域は、可変領域を示す。同図におけるａは、第３の実施の形態における可変領域の位置を変えた符号語のデータ構造の一例を示す図である。この符号語は、可変領域の位置と固定領域の位置とが互いに入れ替えられている点において第１の実施の形態と異なる。すなわち、符号語の右端からパリティ、可変領域、固定領域、管理データおよびユーザデータの順で配置される。
【０１４９】
図２６におけるｂは、第３の実施の形態における可変領域および固定領域を分散させた符号語のデータ構造の一例を示す図である。例えば、可変領域および固定領域はそれぞれ２つに分割され、符号語の右端から順に、パリティ、固定領域の一部、可変領域の一部、固定領域の残り、可変領域の残り、管理データおよびユーザデータの順で配置される。
【０１５０】
図２６におけるｃは、第３の実施の形態における非ユーザデータ領域の位置を変えた符号語のデータ構造の一例を示す図である。例えば、符号語の右端からパリティ、ユーザデータおよび非ユーザデータの順で配置される。
【０１５１】
図２６におけるｄは、第３の実施の形態におけるユーザデータを分散させた符号語のデータ構造の一例を示す図である。例えば、ユーザデータが２つに分割され、符号語の右端からパリティ、ユーザデータの一部、非ユーザデータ、ユーザデータの残りの順で配置される。
【０１５２】
図２６におけるｅは、第３の実施の形態におけるユーザデータおよび非ユーザデータを分散させた符号語のデータ構造の一例を示す図である。例えば、ユーザデータおよび非ユーザデータが２つに分割され、符号語の右端から順に、パリティ、ユーザデータの一部、非ユーザデータの一部、ユーザデータの残り、および、非ユーザデータの残りの順で配置される。
【０１５３】
図２６におけるｆは、第３の実施の形態において非ユーザデータを分散させ、さらに可変領域および固定領域を分散させた符号語のデータ構造の一例を示す図である。例えば、非ユーザデータが２つに分割され、さらに可変領域および固定領域も２つに分割される。例えば、符号語の右端からパリティ、固定領域の一部、可変領域の一部、ユーザデータ、固定領域の残り、可変領域の残り、および、管理データの順で配置される。
【０１５４】
なお、符号語のデータ構成は、図２６に例示した構成に限定されない。例えば、ユーザデータなどを３つ以上に分割してもよいし、符号語の左端に可変領域を配置してもよい。
【０１５５】
図２６に例示したように、選択値を格納する可変領域の位置を変えることにより、パリティにおける重みを変えることができる。例えば、図２６におけるａのように、右端から１８および１９ビット目に選択値を配置し、それ以外の全ビットを「０」にした情報部と、ある生成多項式Ｇ（ｘ）とから次のパリティパターンが生成されたものとする。
選択値「０１」のパリティパターンＰ１：００００００００  １０１１０１００
選択値「１０」のパリティパターンＰ２：０００００００１  ０１１０１０００
選択値「１１」のパリティパターンＰ３：０００００００１  １１０１１１００
【０１５６】
ここで、図２６におけるｃのように、右端から４２および４３ビット目に選択値の位置を変えて、同じ生成多項式Ｇ（ｘ）を用いると、次のパリティパターンが得られる。
選択値「０１」のパリティパターンＰ１’：０１０００１１０  １１１１１１０１
選択値「１０」のパリティパターンＰ２’：１０００１１０１  １１１１１０１０
選択値「１１」のパリティパターンＰ３’：１１００１０１１  ０００００１１１
【０１５７】
上述のパリティパターンＰ１、Ｐ２およびＰ３と比較して、パリティパターンＰ１’、Ｐ２’およびＰ３’の方が「１」のビット数（重み）が多い。この場合には、重みの少なくなる図２４におけるａの配置の方が望ましい。情報部のデータサイズ、生成多項式や、符号の種類により、最適な可変領域の位置は変わるため、可変領域の位置を幾通りかに変えてパリティを生成し、それらを比較することにより最適な位置が求められる。
【０１５８】
このように、本技術の第３の実施の形態によれば、パリティの右隣の位置などに可変領域を配置した情報部を符号化することにより、重みを低減してデータ保持特性を向上させることができる。
【０１５９】
＜４．第４の実施の形態＞
上述の第１の実施の形態では、候補パリティ生成部３３０は、パリティパターン生成部３３１、３３２および３３３により３つのパリティパターンを生成していた。すなわち、パリティパターンと同じ個数のパリティパターン生成部を設けていた。しかし、パリティパターンの個数が多くなるほど、パリティパターン生成部の個数が増大し、演算量や回路規模が増大するおそれがある。この第４の実施の形態の候補パリティ生成部３３０は、パリティパターンを生成する回路を削減した点において第１の実施の形態と異なる。
【０１６０】
図２７は、第４の実施の形態における候補パリティ生成部３３０の一構成例を示すブロック図である。この第４の実施の形態の候補パリティ生成部３３０は、パリティパターン生成部３３３を備えない点において第１の実施の形態と異なる。
【０１６１】
また、第４の実施の形態の排他的論理和演算部３３６は、候補パリティＣ１とパリティパターンＰ２とに対し、対応するビットごとにＸＯＲ演算を行う点において第１の実施の形態と異なる。このＸＯＲ演算により候補パリティＣ３が得られる。これは、候補パリティＣ１を含む符号語とパリティパターンＰ２を含む符号語との加算は、候補パリティＣ３を含む符号語となるためである。なお、排他的論理和演算部３３６は、特許請求の範囲に記載の第４候補パリティ生成部の一例である。
【０１６２】
このように、本技術の第４の実施の形態によれば、候補パリティ生成部３３０は、候補パリティＣ１とパリティパターンＰ２とのＸＯＲ演算により候補パリティＰ３を生成するため、パリティパターンＰ３を生成する回路を削減することができる。
【０１６３】
＜５．第５の実施の形態＞
上述の第１の実施の形態では、メモリコントローラ３００は、重みが最小となる候補パリティを選択パリティとして選択していた。しかし、選択パリティにより、連続して書き換えるビット数が多くなる場合には、書込みの際の消費電力が大きくなるおそれがある。このため、連続して書き換えるビット数を低減することが望ましい。この第５の実施の形態のメモリコントローラ３００は、連続して書き換えるビット数を低減した点において第１の実施の形態と異なる。
【０１６４】
図２８は、第５の実施の形態における選択部３５０の一構成例を示すブロック図である。この選択部３５０は、未使用データ保持部３５１と、排他的論理和演算部３５２乃至３５５と、最長ランカウンタ３６１乃至３６４と比較部３４５とを備える。未使用データ保持部３５１と排他的論理和演算部３５２乃至３５５との構成は、第２の実施の形態と同様である。また、第５の実施の形態の未使用データ保持部３５１の構成は第２の実施の形態と同様であり、第５の実施の形態の比較部３４５の構成は、第１の実施の形態と同様である。
【０１６５】
最長ランカウンタ３６１は、排他的論理和演算部３５２の演算結果において、ランの長さを計数して、その最大値を最長ランの長さとして求めるものである。ここで、「ラン」は、連続する特定の値（例えば、「１」）のビットの集まりを示す。また、最長ランの長さは、連続して書き換えられるビット数の最大値を示す。最長ランカウンタ３６１は、最長ランの長さをＣＮＴ３として比較部３４５に供給する。
【０１６６】
最長ランカウンタ３６２は、排他的論理和演算部３５３の演算結果において最長ランの長さを求めるものである。この最長ランカウンタ３６２は、求めた長さをＣＮＴ２として比較部３４５に供給する。
【０１６７】
最長ランカウンタ３６３は、排他的論理和演算部３５４の演算結果において最長ランの長さを求めるものである。この最長ランカウンタ３６３は、求めた長さをＣＮＴ１として比較部３４５に供給する。
【０１６８】
最長ランカウンタ３６４は、排他的論理和演算部３５５の演算結果において最長ランの長さを求めるものである。この最長ランカウンタ３６４は、求めた長さをＣＮＴ０として比較部３４５に供給する。
【０１６９】
図２９は、第５の実施の形態における情報部および候補パリティの一例を示す図である。同図におけるａは、ユーザデータと選択値「００」の未使用データと候補パリティＣ０とからなる符号語を示す。同図におけるｂは、プレリードデータの一例を示す図である。また、図２９におけるｃは、候補パリティＣ１を含む符号語を示し、同図におけるｄは候補パリティＣ２を含む符号語を示す。また、同図におけるｅは候補パリティＣ３を含む符号語を示す。
【０１７０】
候補パリティ生成部３３０は、プレリードデータ内のパリティおよび未使用データと、候補パリティおよび対応する未使用データとをビット単位で比較する。候補パリティ生成部３３０は、それぞれの候補パリティについて、連続して書き換えるビット数（すなわち、最長ランの長さ）を求める。
【０１７１】
図２９において「＊」は、書換えビットの位置を示す。また、点線で囲った部分は、最長ランを示す。例えば、候補パリティＣ０および未使用データ「００００」では、最長ランの長さは、１０進数で「６」となる。候補パリティＣ１および未使用データ「０１００」では、最長ランの長さが１０進数で「３」となり、候補パリティＣ２および未使用データ「１０００」では、最長ランの長さが１０進数で「５」となる。候補パリティＣ３および未使用データ「１１００」では最長ランの長さは、１０進数で「３」となる。これらのうち、最長ランの長さが最小となる候補パリティＣ１およびＣ３のいずれかが選択される。
【０１７２】
一般に、不揮発性メモリ４００がデータを一定の単位で書き換える場合、連続して書き換えるビット数（最長ランの長さ）が少ないほど、書込みの際の消費電力が低減し、リテンションも向上する。このため、符号化部３２０は、最長ランの長さが最小の候補パリティを選択することにより、不揮発性メモリ４００の消費電力およびデータ保持特性を向上させることができる。
【０１７３】
図３０は、第５の実施の形態におけるパリティ選択処理の一例を示すフローチャートである。第２の実施の形態のパリティ選択処理は、ステップＳ９２２およびＳ９２３の代わりにステップＳ９２７およびＳ９２８を実行する点において第１の実施の形態と異なる。
【０１７４】
メモリコントローラ３００は、候補パリティを生成し（ステップＳ９２１）、候補パリティごとに最長ランの長さを計数する（ステップＳ９２７）。メモリコントローラ３００は、最長ランの長さが最小になる候補パリティを選択し（ステップＳ９２８）、ステップＳ９２４を実行する。なお、第５の実施の形態のコントローラ側ライト処理は、第２の実施の形態と同様である。
【０１７５】
このように、本技術の第５の実施の形態によれば、符号化部３２０は、連続して書き換えるビット数が最小になるパリティを選択するため、メモリセルへの書込みの際の不揮発性メモリ４００の消費電力を低減することができる。
【０１７６】
なお、上述の実施の形態は本技術を具現化するための一例を示したものであり、実施の形態における事項と、特許請求の範囲における発明特定事項とはそれぞれ対応関係を有する。同様に、特許請求の範囲における発明特定事項と、これと同一名称を付した本技術の実施の形態における事項とはそれぞれ対応関係を有する。ただし、本技術は実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において実施の形態に種々の変形を施すことにより具現化することができる。
【０１７７】
また、上述の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。この記録媒体として、例えば、ＣＤ（Compact Disc）、ＭＤ（MiniDisc）、ＤＶＤ（Digital Versatile Disc）、メモリカード、ブルーレイディスク（Blu-ray（登録商標）Disc）等を用いることができる。
【０１７８】
なお、ここに記載された効果は必ずしも限定されるものではなく、本開示中に記載されたいずれかの効果であってもよい。
【０１７９】
なお、本技術は以下のような構成もとることができる。
（１）所定の可変領域に所定値が設定された情報部の誤りを検出するためのパリティを第１の候補パリティとして生成する第１候補パリティ生成部と、
前記所定の可変領域に前記所定値と異なる値が設定された前記情報部の誤りを検出するためのパリティを第２の候補パリティとして生成する第２候補パリティ生成部と、
前記第１および第２の候補パリティのうち所定の条件を満たすパリティを選択パリティとして選択する選択部と、
前記選択パリティに対応する前記情報部と前記選択パリティとからなる符号語を出力する出力部と
を具備する符号化装置。
（２）前記情報部は、前記第１候補パリティ生成部に入力されたユーザデータと前記所定の可変領域を含む未使用データとを含む
前記（１）記載の符号化装置。
（３）前記選択部は、
前記第１の候補パリティと当該第１の候補パリティに対応する前記未使用データとにおいて特定の値のビットの個数を重みとして計数する第１の重みカウンタと、
前記第２の候補パリティと当該第２の候補パリティに対応する前記未使用データとにおいて前記特定の値のビットの個数を重みとして計数する第２の重みカウンタと、
前記第１および第２の重みカウンタのそれぞれの計数値を比較して当該比較結果に基づいて前記所定の条件を満たすパリティを選択する比較部と
を備える前記（２）記載の符号化装置。
（４）メモリセルに書き込まれているデータをプレリードデータとして読み出す制御部をさらに具備し、
前記選択部は、前記第１の候補パリティと当該第１の候補パリティに対応する前記未使用データとにおいて前記プレリードデータと値の異なるビット数を書換えビット数として計数する第１の書換えビット数カウンタと、
前記第２の候補パリティと当該第２の候補パリティに対応する前記未使用データととにおいて前記プレリードデータと値の異なるビット数を書換えビット数として計数する第２の書換えビット数カウンタと、
前記第１および第２の書換えビット数カウンタのそれぞれで計数された書換えビット数を比較して当該比較結果に基づいて前記所定の条件を満たすパリティを選択する比較部と
を備える前記（２）記載の符号化装置。
（５）メモリセルに書き込まれているデータをプレリードデータとして読み出す制御部をさらに具備し、
前記選択部は、前記第１の候補パリティと当該第１の候補パリティに対応する前記未使用データとにおいて前記プレリードデータと値の異なるビットが連続する個数を計数して当該計数値の最大値を最長ランの長さとして求める第１の最長ランカウンタと、
前記選択部は、前記第２の候補パリティと当該第２の候補パリティに対応する前記未使用データとにおいて前記プレリードデータと値の異なるビットが連続する個数を計数して当該計数値の最大値を最長ランの長さとして求める第２の最長ランカウンタと、
前記第１および第２の最長ラン数カウンタのそれぞれで求められた最長ランの長さを比較して当該比較結果に基づいて前記所定の条件を満たすパリティを選択する比較部と
を備える前記（２）記載の符号化装置。
（６）前記符号語において前記ユーザデータと前記選択パリティとの間に前記未使用データが配置される前記（２）から（５）のいずれかに記載の符号化装置。
（７）前記符号語において前記未使用データと前記選択パリティとの間に前記ユーザデータが配置される前記（２）から（５）のいずれかに記載の符号化装置。
（８）前記符号語において前記ユーザデータは複数の領域に分散して配置される前記（２）から（５）のいずれかに記載の符号化装置。
（９）前記符号語において前記未使用データは、複数の領域に分散して配置される前記（２）から（５）のいずれかに記載の符号化装置。
（１０）前記未使用データは、前記可変領域と値が変更されない固定領域とからなり、
前記第２候補パリティ生成部は、前記可変領域の値を変更した前記情報部に対応する前記第２の候補パリティを生成する
前記（２）から（９）のいずれかに記載の符号化装置。
（１１）前記符号語において前記可変領域は複数の領域に分散して配置される前記（１０）記載の符号化装置。
（１２）前記符号語において前記固定領域は複数の領域に分散して配置される前記（１０）または（１１）に記載の符号化装置。
（１３）前記第１の候補パリティ生成部は、前記情報部から前記第１の候補パリティを生成し、
前記第２の候補パリティ生成部は、前記第１の候補パリティと第１のパリティパターンとの論理演算により前記第２の候補パリティを生成する前記（１）から（１２）のいずれかに記載の符号化装置。
（１４）第２のパリティパターンと前記第１の候補パリティとの論理演算により第３の候補パリティを生成する第３の候補パリティ生成部と、
前記第２のパリティパターンと前記第２の候補パリティとの論理演算により第４の候補パリティを生成する第４の候補パリティ生成部と
をさらに具備し、
前記選択部は、前記第１、第２、第３および第４の候補パリティのうち所定の条件を満たすパリティを選択パリティとして選択する
前記（１３）記載の符号化装置。
（１５）ユーザデータにおける特定の値のビット数を変換する変換処理を行って当該変換処理後の前記ユーザデータと前記変換処理前の前記ユーザデータとのいずれかを前記第１の候補パリティ生成部に出力するユーザデータ変換部をさらに具備し、
前記第１の候補パリティ生成部は、前記出力されたユーザデータを含む前記第１の情報部から前記第１の候補パリティを生成する
前記（１）から（１４）のいずれかに記載の符号化装置。
（１６）所定の可変領域に所定値が設定された情報部の誤りを検出するためのパリティを第１の候補パリティとして生成する第１候補パリティ生成部と、
前記所定の可変領域に前記所定値と異なる値が設定された前記情報部の誤りを検出するためのパリティを第２の候補パリティとして生成する第２候補パリティ生成部と、
前記第１および第２の候補パリティのうち所定の条件を満たすパリティを選択パリティとして選択する選択部と、
前記選択パリティに対応する前記情報部と前記選択パリティとからなる符号語をライトデータとしてメモリセルに出力する出力部と、
前記メモリセルからリードデータを読み出して前記リードデータを復号する復号部と
を具備するメモリコントローラ。
（１７）所定の可変領域に所定値が設定された情報部の誤りを検出するためのパリティを第１の候補パリティとして生成する第１候補パリティ生成部と、
前記所定の可変領域に前記所定値と異なる値が設定された前記情報部の誤りを検出するためのパリティを第２の候補パリティとして生成する第２候補パリティ生成部と、
前記第１および第２の候補パリティのうち所定の条件を満たすパリティを選択パリティとして選択する選択部と、
前記選択パリティに対応する前記情報部と前記選択パリティとからなる符号語を送信語として出力する出力部と、
前記送信語に対応する受信語を受信して復号する復号部と
を具備する通信システム。
（１８）所定の可変領域に所定値が設定された情報部の誤りを検出するためのパリティを第１の候補パリティとして生成する第１候補パリティ生成手順と、
前記所定の可変領域に前記所定値と異なる値が設定された前記情報部の誤りを検出するためのパリティを第２の候補パリティとして生成する第２候補パリティ生成手順と、
前記第１および第２の候補パリティのうち所定の条件を満たすパリティを選択パリティとして選択する選択手順と、
前記選択パリティに対応する前記情報部と前記選択パリティとからなる符号語を出力する出力手順と
を具備する符号化方法。
【符号の説明】
【０１８０】
１００  ホストコンピュータ
２００  ストレージ
３００  メモリコントローラ
３１１  システムインターフェース
３１２  ＲＡＭ
３１３  ＣＰＵ
３１４  ＥＣＣ処理部
３１５  ＲＯＭ
３１６、４５０  バス
３１７  メモリインターフェース
３２０  符号化部
３２１  ライトバッファ
３２２、３２５  ユーザデータ変換部
３２３  ＥＣＣ符号化器
３２４  ライトデータ出力部
３３０  候補パリティ生成部
３３１、３３２、３３３  パリティパターン生成部
３３４、３３５、３３６、３５２、３５３、３５４、３５５  排他的論理和演算部
３３７  パリティパターン保持部
３４０、３５０  選択部
３４１、３４２、３４３、３４４  重みカウンタ
３４５  比較部
３４６、３４７、３４８  加算器
３５１  未使用データ保持部
３５６、３５７、３５８、３５９  書換えビット数カウンタ
３６１、３６２、３６３、３６４  最長ランカウンタ
３７０  復号部
３７１  リードバッファ
３７２  ユーザデータ逆変換部
３７３  ＥＣＣ復号器
３８０、３８１  コマンド制御部
４００  不揮発性メモリ
４１０  データバッファ
４２０  メモリセルアレイ
４３０  ドライバ
４４０  アドレスデコーダ
４６０  制御インターフェース
４７０  メモリ制御部
【図１】
0006657634.tif 000003
【図２】
0006657634.tif 000004
【図３】
0006657634.tif 000005
【図４】
0006657634.tif 000006
【図５】
0006657634.tif 000007
【図６】
0006657634.tif 000008
【図７】
0006657634.tif 000009
【図８】
0006657634.tif 000010
【図９】
0006657634.tif 000011
【図１０】
0006657634.tif 000012
【図１１】
0006657634.tif 000013
【図１２】
0006657634.tif 000014
【図１３】
0006657634.tif 000015
【図１４】
0006657634.tif 000016
【図１５】
0006657634.tif 000017
【図１６】
0006657634.tif 000018
【図１７】
0006657634.tif 000019
【図１８】
0006657634.tif 000020
【図１９】
0006657634.tif 000021
【図２０】
0006657634.tif 000022
【図２１】
0006657634.tif 000023
【図２２】
0006657634.tif 000024
【図２３】
0006657634.tif 000025
【図２４】
0006657634.tif 000026
【図２５】
0006657634.tif 000027
【図２６】
0006657634.tif 000028
【図２７】
0006657634.tif 000029
【図２８】
0006657634.tif 000030
【図２９】
0006657634.tif 000031
【図３０】
0006657634.tif 000032