(57)【要約】  メモリセルにおいて誤りの発生頻度を十分に低減する。  読出し部が、情報ビットと情報ビットが反転されているか否かを判定するための反転情報とを含むリードデータをメモリセルから読み出す。また、誤り検出訂正部が、その情報ビットの誤りの有無を検出して誤りを訂正する。データ反転部が、誤りが訂正された情報ビットと反転情報とを反転する。また、書込み部が、反転された情報ビットと反転された反転情報とを前記メモリセルに書き込む。
2016063592.tif 000002
【特許請求の範囲】
【請求項１】
情報ビットと当該情報ビットが反転されているか否かを判定するための反転情報とを含むリードデータをメモリセルから読み出す読出し部と、
前記情報ビットの誤りの有無を検出して前記誤りを訂正する誤り検出訂正部と、
前記誤りが訂正された前記情報ビットと前記反転情報とを反転するデータ反転部と、
前記反転された前記情報ビットと前記反転された前記反転情報とを前記メモリセルに書き込む書込み部と
を具備するメモリコントローラ。
【請求項２】
前記リードデータを反転した反転リードデータの誤りの有無を検出して前記誤りを訂正する反転リードデータ誤り検出訂正部をさらに具備し、
前記反転情報は、前記誤りの有無を検出して訂正するための冗長ビットであり、
前記データ反転部は、前記リードデータの誤りの訂正にのみ成功した場合には前記誤りが訂正されたリードデータを反転してライトデータとして供給し、前記反転リードデータの誤りの訂正にのみ成功した場合には前記誤りが訂正された反転リードデータを反転して前記ライトデータとして供給し、
前記書込み部は、前記ライトデータを前記メモリセルに書き込む
請求項１記載のメモリコントローラ。
【請求項３】
前記書込み部は、前記リードデータの誤りの訂正にのみ成功した場合には前記ライトデータを書き込む前に前記誤りが訂正されたリードデータを前記メモリセルに書き込み、前記反転リードデータの誤りの訂正にのみ成功した場合には前記ライトデータを書き込む前に前記誤りが訂正された反転リードデータをさらに書き込む
請求項２記載のメモリコントローラ。
【請求項４】
前記反転情報は、前記情報ビットが反転されているか否かを示す反転ビットであり、
前記リードデータは、前記誤りを検出して訂正するための冗長ビットをさらに含み、
前記誤り検出訂正部は、前記冗長ビットを用いて前記誤りの有無を検出して訂正する
請求項１記載のメモリコントローラ。
【請求項５】
前記反転された情報ビットと前記反転された反転ビットとの誤りを検出して訂正するための新たな冗長ビットを生成する再符号化部をさらに具備し、
前記誤り検出訂正部は、前記情報ビットおよび前記反転情報の誤りの有無を検出して前記誤りを訂正し、
前記誤りが訂正された前記情報ビットと前記誤りが訂正された反転情報とを反転し、
前記書込み部は、前記反転された前記情報ビットと前記反転された前記反転情報と前記新たな冗長ビットとを含む符号語をライトデータとして前記メモリセルに書き込む
請求項４記載のメモリコントローラ。
【請求項６】
前記書込み部は、前記ライトデータを書き込む前に前記誤りが訂正された前記リードデータを前記メモリセルに書き込む
請求項５記載のメモリコントローラ。
【請求項７】
前記反転された情報ビットの誤りを検出して訂正するための新たな冗長ビットを生成する再符号化部をさらに具備し、
前記書込み部は、前記反転された前記情報ビットおよび前記新たな冗長ビットを含む符号語と前記反転された前記反転情報とを含むデータをライトデータとして前記メモリセルに書き込む
請求項４記載のメモリコントローラ。
【請求項８】
前記書込み部は、前記ライトデータを書き込む前に前記誤りが訂正された前記リードデータを前記メモリセルに書き込む
請求項７記載のメモリコントローラ。
【請求項９】
メモリセルと、
情報ビットと当該情報ビットが反転されているか否かを判定するための反転情報とを含むリードデータを前記メモリセルから読み出す読出し部と、
前記情報ビットの誤りの有無を検出して前記誤りを訂正する誤り検出訂正部と、
前記誤りが訂正された前記情報ビットと前記反転情報とを反転するデータ反転部と、
前記反転された前記情報ビットと前記反転された前記反転情報とを前記メモリセルに書き込む書込み部と
を具備するメモリシステム。
【請求項１０】
読出し部が、情報ビットと当該情報ビットが反転されているか否かを判定するための反転情報とを含むリードデータをメモリセルから読み出す読出し手順と、
誤り検出訂正部が、前記情報ビットの誤りの有無を検出して前記誤りを訂正する誤り検出訂正手順と、
データ反転部が、前記誤りが訂正された前記情報ビットと前記反転情報とを反転するデータ反転手順と、
書込み部が、前記反転された前記情報ビットと前記反転された前記反転情報とを前記メモリセルに書き込む書込み手順と
を具備するメモリコントローラの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、メモリコントローラ、メモリシステム、および、メモリコントローラの制御方法に関する。詳しくは、誤り訂正を行うメモリコントローラ、メモリシステム、および、メモリコントローラの制御方法に関する。
【背景技術】
【０００２】
近年の情報処理システムにおいては、補助記憶装置やストレージとして、不揮発性メモリ（ＮＶＭ：Non-Volatile memory）が用いられることがある。この不揮発性メモリは、大きなサイズを単位としたデータアクセスに対応したフラッシュメモリと、小さな単位での高速なランダムアクセスが可能な不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ：Non-Volatile RAM）とに大別される。ここで、フラッシュメモリの代表例としては、ＮＡＮＤ型フラッシュメモリが挙げられる。一方、不揮発性ランダムアクセスメモリの例としては、ＲｅＲＡＭ（Resistance RAM）、ＰＣＲＡＭ（Phase-Change RAM）、ＭＲＡＭ（Magnetoresistive RAM）などが挙げられる。【０００３】
これらの不揮発性メモリにおいては、アクセスの繰返しや経年劣化の進行により、メモリセルが劣化して、書き込んだデータに誤りが発生することが知られている。そこで、劣化が進んだメモリセルにおいてデータを書き換える処理をリフレッシュ処理として行うメモリコントローラが提案されている（例えば、特許文献１参照。）。このメモリコントローラは、リフレッシュ処理において、メモリセルからデータを読み出し、ＥＣＣ(Error detection and Correction Code)を用いて、そのデータの誤りを訂正し、訂正したデータの再度の書込みを行う。このリフレッシュ処理により、誤りの生じたメモリセルを書き換えて、そのメモリセルの劣化をある程度回復することができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平６−１１０７９３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述の従来技術では、誤りが発生していないビットが書き込まれたメモリセルについては正しい値が既に書き込まれているため、書換えが行われない。しかし、誤りが発生していないメモリセルにおいても劣化が進んでいる可能性があり、アクセスの繰返しや経年劣化によって新たに誤りが発生するおそれがある。このように誤りが発生するおそれがあるメモリセルについて上述の装置では書換えが行われないため、メモリセルにおいて誤りの発生頻度を十分に低減することができない問題がある。【０００６】
本技術はこのような状況に鑑みて生み出されたものであり、メモリセルにおいて誤りの派生頻度を低減することを目的とする。
【課題を解決するための手段】
【０００７】
本技術は、上述の問題点を解消するためになされたものであり、その第１の側面は、情報ビットと当該情報ビットが反転されているか否かを判定するための反転情報とを含むリードデータをメモリセルから読み出す読出し部と、上記情報ビットの誤りの有無を検出して上記誤りを訂正する誤り検出訂正部と、上記誤りが訂正された上記情報ビットと上記反転情報とを反転するデータ反転部と、上記反転された上記情報ビットと上記反転された上記反転情報とを上記メモリセルに書き込む書込み部とを具備するメモリコントローラ、および、その制御方法である。これにより、誤りが訂正された情報ビットと反転情報とを反転したデータがメモリセルに書き込まれるという作用をもたらす。【０００８】
また、この第１の側面において、上記リードデータを反転した反転リードデータの誤りの有無を検出して上記誤りを訂正する反転リードデータ誤り検出訂正部をさらに具備し、上記反転情報は、上記誤りの有無を検出して訂正するための冗長ビットであり、上記データ反転部は、上記リードデータの誤りの訂正にのみ成功した場合には上記誤りが訂正されたリードデータを反転してライトデータとして供給し、上記反転リードデータの誤りの訂正にのみ成功した場合には上記誤りが訂正された反転リードデータを反転して上記ライトデータとして供給し、上記書込み部は、上記ライトデータを上記メモリセルに書き込んでもよい。これにより、リードデータの誤りの訂正にのみ成功した場合に誤りが訂正されたリードデータが反転して書き込まれるという作用をもたらす。【０００９】
また、この第１の側面において、上記書込み部は、上記リードデータの誤りの訂正にのみ成功した場合には上記ライトデータを書き込む前に上記誤りが訂正されたリードデータを上記メモリセルに書き込み、上記反転リードデータの誤りの訂正にのみ成功した場合には上記ライトデータの書込み前に上記誤りが訂正された反転リードデータをさらに書き込んでもよい。これにより、リードデータの誤りの訂正にのみ成功した場合にライトデータを書き込む前に誤りが訂正されたリードデータが書き込まれるという作用をもたらす。【００１０】
また、この第１の側面において、上記反転情報は、上記情報ビットが反転されているか否かを示す反転ビットであり、上記リードデータは、上記誤りを検出して訂正するための冗長ビットをさらに含み、上記誤り検出訂正部は、上記冗長ビットを用いて上記誤りの有無を検出して訂正してもよい。これにより、反転ビットが反転されてメモリセルに書き込まれる作用をもたらす。【００１１】
また、この第１の側面において、反転された情報ビットと上記反転された反転ビットとの誤りを検出して訂正するための新たな冗長ビットを生成する再符号化部をさらに具備し、上記誤り検出訂正部は、上記情報ビットおよび上記反転情報の誤りの有無を検出して上記誤りを訂正し、上記誤りが訂正された上記情報ビットと上記誤りが訂正された反転情報とを反転し、上記書込み部は、上記反転された上記情報ビットと上記反転された上記反転情報と上記新たな冗長ビットとを含む符号語をライトデータとして上記メモリセルに書き込んでもよい。これにより、反転された情報ビットと反転された反転情報と新たな冗長ビットとを含む符号語がリードデータとして書き込まれるという作用をもたらす。【００１２】
また、この第１の側面において、上記書込み部は、上記ライトデータを書き込む前に上記誤りが訂正された上記リードデータを上記メモリセルに書き込んでもよい。これにより、ライトデータの書込み前に誤りが訂正されたリードデータがメモリセルに書き込まれるという作用をもたらす。【００１３】
また、この第１の側面において、上記反転された情報ビットの誤りを検出して訂正するための新たな冗長ビットを生成する再符号化部をさらに具備し、上記書込み部は、上記反転された上記情報ビットおよび上記新たな冗長ビットを含む符号語と上記反転された上記反転情報とを含むデータをライトデータとして上記メモリセルに書き込んでもよい。これにより、符号語と反転された反転情報とを含むライトデータがメモリセルに書き込まれるという作用をもたらす。【００１４】
また、この第１の側面において、上記書込み部は、上記ライトデータを書き込む前に上記誤りが訂正された上記リードデータを上記メモリセルに書き込んでもよい。これにより、ライトデータの書込み前に誤りが訂正されたリードデータがメモリセルに書き込まれるという作用をもたらす。【００１５】
また、本技術の第２の側面は、メモリセルと、情報ビットと当該情報ビットが反転されているか否かを判定するための反転情報とを含むリードデータを上記メモリセルから読み出す読出し部と、上記情報ビットの誤りの有無を検出して上記誤りを訂正する誤り検出訂正部と、上記誤りが訂正された上記情報ビットと上記反転情報とを反転するデータ反転部と、上記反転された上記情報ビットと上記反転された上記反転情報とを上記メモリセルに書き込む書込み部とを具備するメモリシステムである。これにより、誤りが訂正された情報ビットと反転情報とを反転したデータがメモリセルに書き込まれるという作用をもたらす。
【発明の効果】
【００１６】
本技術によれば、メモリセルにおいて誤りの発生頻度を十分に低減することができるという優れた効果を奏し得る。なお、ここに記載された効果は必ずしも限定されるものではなく、本開示中に記載されたいずれかの効果であってもよい。
【図面の簡単な説明】
【００１７】
【図１】第１の実施の形態におけるメモリシステムの一構成例を示す全体図である。
【図２】第１の実施の形態におけるメモリコントローラの一構成例を示すブロック図である。
【図３】第１の実施の形態におけるメモリコントローラの機能構成例を示すブロック図である。
【図４】第１の実施の形態におけるライト処理部の一構成例を示すブロック図である。
【図５】第１の実施の形態におけるライト処理により生成されるデータの一例を示す図である。
【図６】第１の実施の形態におけるリード処理部の一構成例を示すブロック図である。
【図７】第１の実施の形態におけるリフレッシュ処理部の一構成例を示すブロック図である。
【図８】第１の実施の形態における不揮発性メモリの一構成例を示すブロック図である。
【図９】第１の実施の形態におけるリフレッシュ処理により生成されるデータの一例を示す図である。
【図１０】第１の実施の形態における劣化前後の可変抵抗素子の抵抗分布の一例を示す図である。
【図１１】第１の実施の形態におけるリフレッシュ後の可変抵抗素子の抵抗分布の一例を示す図である。
【図１２】第１の実施の形態におけるストレージの動作の一例を示すフローチャートである。
【図１３】第１の実施の形態におけるライト処理の一例を示すフローチャートである。
【図１４】第１の実施の形態におけるリード処理の一例を示すフローチャートである。
【図１５】第１の実施の形態におけるリフレッシュ処理の一例を示すフローチャートである。
【図１６】第２の実施の形態におけるリフレッシュ処理部の一構成例を示すブロック図である。
【図１７】第２の実施の形態におけるリフレッシュ処理の一例を示すフローチャートである。
【図１８】第２の実施の形態におけるリフレッシュ処理により生成される訂正データの一例を示す図である。
【図１９】第２の実施の形態におけるリフレッシュ処理により生成されるライトデータの一例を示す図である。
【図２０】第３の実施の形態におけるライト処理部の一構成例を示すブロック図である。
【図２１】第３の実施の形態におけるライト処理により生成されるデータの一例を示す図である。
【図２２】第３の実施の形態におけるリード処理部の一構成例を示すブロック図である。
【図２３】第３の実施の形態におけるリフレッシュ処理部の一構成例を示すブロック図である。
【図２４】第３の実施の形態におけるライト処理の一例を示すフローチャートである。
【図２５】第３の実施の形態におけるリフレッシュ処理の一例を示すフローチャートである。
【図２６】第３の実施の形態におけるリフレッシュ処理により生成されるデータの一例を示す図である。
【図２７】第４の実施の形態におけるリフレッシュ処理部の一構成例を示すブロック図である。
【図２８】第４の実施の形態におけるリフレッシュ処理の一例を示すフローチャートである。
【図２９】第４の実施の形態におけるリフレッシュ処理により生成される訂正データの一例を示す図である。
【図３０】第４の実施の形態におけるリフレッシュ処理により生成されるライトデータの一例を示す図である。
【図３１】第５の実施の形態におけるライト処理部の一構成例を示すブロック図である。
【図３２】第５の実施の形態におけるリード処理部の一構成例を示すブロック図である。
【図３３】第５の実施の形態における訂正データ選択部の動作の一例を示す表である。
【図３４】第５の実施の形態におけるリフレッシュ処理部の一構成例を示すブロック図である。
【図３５】第５の実施の形態におけるライト処理の一例を示すフローチャートである。
【図３６】第５の実施の形態におけるリード処理の一例を示すフローチャートである。
【図３７】第５の実施の形態におけるリフレッシュ処理の一例を示すフローチャートである。
【図３８】第５の実施の形態におけるリフレッシュ処理により生成される訂正データの一例を示す図である。
【図３９】第５の実施の形態におけるリフレッシュ処理により生成されるライトデータの一例を示す図である。
【図４０】第６の実施の形態におけるリフレッシュ処理部の一構成例を示すブロック図である。
【図４１】第６の実施の形態におけるリフレッシュ処理の一例を示すフローチャートである。
【図４２】第６の実施の形態におけるリフレッシュ処理により生成される訂正データの一例を示す図である。
【図４３】第６の実施の形態におけるリフレッシュ処理により生成されるライトデータの一例を示す図である。
【図４４】第６の実施の形態の変形例におけるリフレッシュ処理部の一構成例を示すブロック図である。
【発明を実施するための形態】
【００１８】
以下、本技術を実施するための形態（以下、実施の形態と称する）について説明する。説明は以下の順序により行う。
１．第１の実施の形態（反転した情報ビットを再符号化して再書込みする例）
２．第２の実施の形態（訂正データの再書込み後に反転した情報ビットを再符号化して再書込みする例）
３．第３の実施の形態（反転した情報ビットと反転ビットとを再符号化して再書込みする例）
４．第４の実施の形態（訂正データの再書込み後に反転した情報ビットと反転ビットとを再符号化して再書込みする例）
５．第５の実施の形態（情報ビットおよび冗長ビットを反転して再書込みする例）
６．第６の実施の形態（訂正データの再書込み後に情報ビットおよび冗長ビットを反転して再書込みする例）
【００１９】
＜１．第１の実施の形態＞
［メモリシステムの構成例］
図１は、第１の実施の形態におけるメモリシステムの一構成例を示す全体図である。このメモリシステムは、ホストコンピュータ１００およびストレージ２００を備える。
【００２０】
ホストコンピュータ１００は、情報処理システム全体を制御するものである。このホストコンピュータ１００は、コマンドおよびデータを生成してストレージ２００に信号線１０９を介して供給する。また、ホストコンピュータ１００は、ストレージ２００から、読み出されたデータを受け取る。ここで、コマンドは、ストレージ２００を制御するためのものであり、例えば、データの書込みを指示するライトコマンドや、データの読出しを指示するリードコマンドを含む。
【００２１】
ストレージ２００は、メモリコントローラ３００および不揮発性メモリ４００を備える。このメモリコントローラ３００は、不揮発性メモリ４００を制御するものである。メモリコントローラ３００は、ホストコンピュータ１００からライトコマンドおよびデータを受け取った場合には、そのデータから誤り検出訂正符号（ＥＣＣ：Error detection and Correction Code）を生成する。具体的には、メモリコントローラ３００は、符号化対象のデータを、そのデータと所定数の冗長ビットとを含む符号語に変換（すなわち、符号化）する。メモリコントローラ３００は、不揮発性メモリ４００に信号線３０９を介してアクセスして符号化したデータをライトデータとして書き込む。
【００２２】
また、ホストコンピュータ１００からリードコマンドを受け取った場合、メモリコントローラ３００は、不揮発性メモリ４００に信号線３０９を介してアクセスして符号化されたリードデータを読み出す。そして、メモリコントローラ３００は、そのリードデータを、符号化前の元のデータに変換（すなわち、復号）する。また、メモリコントローラ３００は、ＥＣＣに基づいてリードデータにおける誤りの検出および訂正を行う。メモリコントローラ３００は、訂正したリードデータ内の情報ビットをホストコンピュータ１００に供給する。
【００２３】
また、メモリコントローラ３００は、不揮発性メモリ４００内のメモリセルの劣化の度合いが一定より高くなると、そのメモリセルに対するデータの再書込みをリフレッシュ処理として行う。例えば、アクセス頻度や、エラーの発生頻度が所定値を超えたときに、リフレッシュ処理が行われる。
【００２４】
不揮発性メモリ４００は、メモリコントローラ３００の制御に従って、データを記憶するものである。例えば、ＲｅＲＡＭが不揮発性メモリ４００として用いられる。この不揮発性メモリ４００は、複数のメモリセルを備え、これらのメモリセルは、複数のブロックに分けられている。ここで、ブロックは、不揮発性メモリ４００のアクセス単位であり、セクタとも呼ばれる。ブロックのそれぞれには物理アドレスが割り当てられている。なお、ＲｅＲＡＭの代わりに、フラッシュメモリ、ＰＣＲＡＭ、および、ＭＲＡＭなどを不揮発性メモリ４００として用いてもよい。
【００２５】
［メモリコントローラの構成例］
図２は、第１の実施の形態におけるメモリコントローラ３００の一構成例を示すブロック図である。このメモリコントローラ３００は、ホストインターフェース３０１、ＲＡＭ（Random Access Memory）３０２、ＣＰＵ（Central Processing Unit）３０３およびＥＣＣ処理部３０４を備える。また、メモリコントローラ３００は、ＲＯＭ（Read Only Memory）３０５、バス３０６およびメモリインターフェース３０７を備える。
【００２６】
ホストインターフェース３０１は、ホストコンピュータ１００との間でデータやコマンドを相互に交換するものである。ＲＡＭ３０２は、ＣＰＵ３０３が実行する処理において必要となるデータを一時的に保持するものである。ＣＰＵ３０３は、メモリコントローラ３００全体を制御するものである。ＲＯＭ３０５は、ＣＰＵ３０３が実行するプログラム等を記憶するものである。バス３０６は、ＲＡＭ３０２、ＣＰＵ３０３、ＥＣＣ処理部３０４、ＲＯＭ３０５、ホストインターフェース３０１およびメモリインターフェース３０７が相互にデータを交換するための共通の経路である。メモリインターフェース３０７は、不揮発性メモリ４００との間でデータやコマンドを相互に交換するものである。
【００２７】
ＥＣＣ処理部３０４は、情報ビットを符号化し、また、リードデータを復号するものである。情報ビットの符号化においてＥＣＣ処理部３０４は、所定数の情報ビットを含むデータを符号化対象データとして、その符号化対象データに冗長ビットを付加することにより所定の単位で符号化する。所定の単位で符号化された個々のデータは、「符号語」と呼ばれる。そして、ＥＣＣ処理部３０４は、符号化したデータをライトデータとして不揮発性メモリ４００にバス３０６を介して供給する。
【００２８】
また、ＥＣＣ処理部３０４は、符号化されたリードデータを元の情報ビットに復号する。この復号において、ＥＣＣ処理部３０４は、冗長ビットを使用してリードデータの誤りの有無を検出して訂正する。ＥＣＣ処理部３０４は、復号した情報ビットをホストコンピュータ１００にバス３０６を介して供給する。
【００２９】
図３は、第１の実施の形態におけるメモリコントローラ３００の機能構成例を示すブロック図である。このメモリコントローラ３００は、ライト処理部３１０、リード処理部３２０およびリフレッシュ処理部３５０を備える。図３におけるライト処理部３１０は、図２におけるホストインターフェース３０１、ＲＡＭ３０２、ＣＰＵ３０３、ＥＣＣ処理部３０４、ＲＯＭ３０５、バス３０６およびメモリインターフェース３０７などにより実現される。リード処理部３２０およびリフレッシュ処理部３５０についても同様である。
【００３０】
ライト処理部３１０は、ライトコマンドに従って、ライトデータを不揮発性メモリ４００に書き込む処理を実行するものである。ライト処理部３１０は、ホストコンピュータ１００からライトコマンドおよび情報ビットを受け取った場合には、その情報ビットを含むデータを符号化対象データとして、その符号化対象データを符号語に符号化する。符号化において符号化対象データは、例えば、２元のＢＣＨ符号に符号化される。このＢＣＨ符号への符号化においては、例えば、次の式による生成多項式が用いられる。
【数１】
2016063592.tif 000003
【００３１】
上式において、ＬＣＭ［］は、［］内の各々の多項式の最小公倍多項式を表わす。また、Ｍｉ（ｘ）は、ガロア体ＧＦ（２ｑ）上の原始元をαとしたときのαｉの、最小多項式である。
【００３２】
そして、ライト処理部３１０は、符号化したデータをライトデータとして不揮発性メモリ４００に出力する。また、ライト処理部３１０は、ライトデータを書き込むたびに、アクセスした物理アドレスを通知するアクセス通知をリフレッシュ処理部３５０に供給する。
【００３３】
なお、ライト処理部３１０は、符号化対象データを２元のＢＣＨ符号に符号化しているが、誤り検出訂正符号であれば、ＢＣＨ符号以外の符号に符号化してもよい。ライト処理部３１０は、例えば、ＲＳ（Reed-Solomon）符号や畳込み符号に符号化してもよい。また、ライト処理部３１０は、２元より高い次元の符号に符号化してもよい。
【００３４】
リード処理部３２０は、リードコマンドに従って、リードデータを不揮発性メモリ４００から読み出す処理を実行するものである。リード処理部３２０は、ホストコンピュータ１００からリードコマンドを受け取ると、そのコマンドにより指定された物理アドレスから受信語をリードデータとして読み出す。リード処理部３２０は、そのリードデータを元の情報ビットに復号する。復号においてリード処理部３２０は、リードデータに含まれる冗長ビットを使用して、リードデータにおける誤りを訂正する。また、リード処理部３２０は、復号に成功したか否かを通知するエラーフラグを生成して復号した情報ビットとともにホストコンピュータ１００へ出力する。また、リード処理部３２０は、リードデータを読み出すたびに、アクセスした物理アドレスを通知するアクセス通知をリフレッシュ処理部３５０に供給する。
【００３５】
リフレッシュ処理部３５０は、メモリセルの劣化の度合いが一定より高くなると、そのメモリセルに対してリフレッシュ処理を行うものである。このリフレッシュ処理部３５０は、例えば、物理アドレスごとにアクセス回数を計数し、ある物理アドレスのアクセス頻度が所定値を超えた際に、その物理アドレスに対するリフレッシュ処理を開始する。なお、リフレッシュ処理部３５０は、アクセス頻度が所定値を超えたか否かをリフレッシュ処理の開始条件としているが、この構成に限定されない。例えば、リフレッシュ処理部３５０は、ライトエラーやリードエラーの発生頻度を物理アドレスごとに求め、それらのエラーの発生頻度が許容値を超えた際に、リフレッシュ処理を開始してもよい。
【００３６】
[ライト処理部の構成例]
図４は、第１の実施の形態におけるライト処理部３１０の一構成例を示すブロック図である。このライト処理部３１０は、反転判定部３１１、ライト側情報ビット反転部３１２、符号化部３１３および論物アドレス変換部３１４を備える。
【００３７】
反転判定部３１１は、情報ビットを反転するか否かを判定するものである。この反転判定部３１１は、例えば、情報ビットにおいて、特定の値（例えば、「０」）のビットが、その総ビット数ｋの半数よりビット数の多い多数ビットであるか否かを判定する。そして、「０」のビットが多数ビットである場合に反転判定部３１１は、反転しない旨を示す反転ビットを生成し、そうでない場合に反転する旨を示す反転ビットを生成してライト側情報ビット反転部３１２および符号化部３１３に供給する。例えば、反転する場合に「１」の反転ビットが生成され、反転しない場合に「０」の反転ビットが生成される。なお、反転ビットは、特許請求の範囲に記載の反転情報の一例である。
【００３８】
このように「０」のビットが多数ビットでなければ、反転データが書き込まれるため、情報ビットにおいて、「１」のビット数は常に総ビット数ｋの半数以下となる。このため、不揮発性メモリ４００において、「１」を「０」に書き換えるリセット処理と、「０」を「１」に書き換えるセット処理とのそれぞれで、情報ビットの変化ビット数が常にｋ／２以下となる。したがって、不揮発性メモリ４００のライト処理において消費電力の最大値が低減する。
【００３９】
ライト側情報ビット反転部３１２は、反転ビットに従って、情報ビットを反転するものである。ライト側情報ビット反転部３１２は、反転する旨を反転ビットが示す場合に情報ビットを反転して符号化部３１３に供給し、そうでない場合に情報ビットを反転せずに符号化部３１３に供給する。
【００４０】
符号化部３１３は、情報ビットおよび反転ビットからなる符号化対象データを符号化するものである。この符号化部３１３は、符号化したデータをライトデータとして不揮発性メモリ４００に供給する。
【００４１】
論物アドレス変換部３１４は、ライトコマンドにより指定された論理アドレスを物理アドレスに変換するものである。ここで、論理アドレスは、ホストコンピュータ１００が定義するアドレス空間において、ホストコンピュータ１００がストレージ２００にアクセスする際のアクセス単位の領域ごとに割り振られたアドレスである。また、物理アドレスは、前述したように不揮発性メモリ４００内のブロック（アクセス単位）のそれぞれに割り当てられたアドレスである。論物アドレス変換部３１４は、アドレスを変換したライトコマンドを不揮発性メモリ４００に供給する。また、論物アドレス変換部３１４は、アクセス通知を生成してリフレッシュ処理部３５０に供給する。
【００４２】
なお、ライト処理部３１０は、必要に応じて情報ビットを反転しているが、情報ビットを常に反転しないで書き込んでもよい。この場合、反転判定部３１１およびライト側情報ビット反転部３１２は不要であり、符号化部３１３は、反転しない旨を示す反転ビットを情報ビットに付加してから符号化する。
【００４３】
図５は、第１の実施の形態におけるライト処理により生成されるデータの一例を示す図である。同図におけるａは、符号化される情報ビットの一例である。ライト処理部３１０は、例えば、２３ビットの単位で情報ビットを符号化する。同図におけるｂは、符号化対象データの一例である。ライト処理部３１０は、例えば、２３ビットの情報ビットを必要に応じて反転し、それらの情報ビットと反転ビットとを含む２４ビットのデータを符号化対象データとして生成する。同図におけるｃは、ライトデータの一例である。ライト処理部３１０は、例えば、２４ビットの符号化対象データから、１６ビットの冗長ビットを生成し、それらを含む４０ビットの符号語をライトデータとして不揮発性メモリ４００に書き込む。
【００４４】
［リード処理部の構成例］
図６は、第１の実施の形態におけるリード処理部３２０の一構成例を示すブロック図である。このリード処理部３２０は、訂正データ反転部３２１、誤り検出訂正部３２２、および、論物アドレス変換部３２３を備える。
【００４５】
誤り検出訂正部３２２は、リードデータにおける誤りの有無を検出して訂正するものである。この誤り検出訂正部３２２は、誤りを訂正したリードデータ内の情報ビットおよび反転ビットを訂正データ反転部３２１に供給する。また、誤り検出訂正部３２２は、エラーフラグを生成してホストコンピュータ１００に供給する。
【００４６】
訂正データ反転部３２１は、反転ビットに従って、誤りが訂正された情報ビットを反転するものである。この訂正データ反転部３２１は、反転されている旨を反転ビットが示す場合に情報ビットを反転してホストコンピュータ１００に供給し、そうでない場合に情報ビットを反転せずにホストコンピュータ１００に供給する。
【００４７】
論物アドレス変換部３２３は、リードコマンドにより指定された論理アドレスを物理アドレスに変換するものである。この論物アドレス変換部３２３は、アドレス変換したリードコマンドを不揮発性メモリ４００に供給する。また、論物アドレス変換部３２３は、アクセス通知を生成してリフレッシュ処理部３５０に供給する。
【００４８】
［リフレッシュ処理部］
図７は、第１の実施の形態におけるリフレッシュ処理部３５０の一構成例を示すブロック図である。このリフレッシュ処理部３５０は、アクセス回数計数部３５１、リフレッシュ判定部３５２、プレリードデータ読出し部３５３、誤り検出訂正部３５４、訂正データ反転部３５５、再符号化部３５６および再書込み部３５７を備える。
【００４９】
アクセス回数計数部３５１は、物理アドレスごとに、アクセス回数を計数するものである。リフレッシュ判定部３５２は、アクセス回数に基づいてリフレッシュを開始するか否かを判定するものである。このリフレッシュ判定部３５２は、リフレッシュを開始する際に、リフレッシュを行う物理アドレスをプレリードデータ読出し部３５３および再書込み部３５７に供給する。
【００５０】
プレリードデータ読出し部３５３は、リフレッシュ判定部３５２により供給された物理アドレスから、受信語をプレリードデータとして読み出すものである。プレリードデータ読出し部３５３は、読み出したプレリードデータを誤り検出訂正部３５４に供給する。なお、プレリードデータ読出し部３５３は、特許請求の範囲に記載の読出し部の一例である。
【００５１】
誤り検出訂正部３５４は、プレリードデータの誤りの有無を検出して訂正するものである。この誤り検出訂正部３５４は、プレリードデータ内の冗長ビットを用いて、誤りの検出および訂正を行う。誤り検出訂正部３５４は、誤りを訂正したプレリードデータを訂正データとして訂正データ反転部３５５に供給する。
【００５２】
訂正データ反転部３５５は、訂正データ内の情報ビットおよび反転ビットを反転するものである。この訂正データ反転部３５５は、反転した情報ビットおよび反転ビットを符号化対象データとして再符号化部３５６に供給する。なお、訂正データ反転部３５５は、特許請求の範囲に記載のデータ反転部の一例である。
【００５３】
再符号化部３５６は、符号化対象データを符号化するものである。この再符号化部３５６は、符号化対象データから冗長ビットを新たに生成し、その符号化対象データおよび冗長ビットを含む符号語をライトデータとして再書込み部３５７に供給する。
【００５４】
再書込み部３５７は、ライトデータを不揮発性メモリ４００に書き込むものである。この再書込み部３５７は、リフレッシュする物理アドレスを指定したライトコマンドを発行し、ライトデータとともに不揮発性メモリ４００に供給する。なお、再書込み部３５７は、特許請求の範囲に記載の書込み部の一例である。
【００５５】
［不揮発性メモリの構成例］
図８は、第１の実施の形態における不揮発性メモリ４００の一構成例を示すブロック図である。この不揮発性メモリ４００は、データバッファ４１０、メモリセルアレイ４２０、ドライバ４３０、アドレスデコーダ４４０、バス４５０、制御インターフェース４６０、および、メモリ制御部４７０を備える。
【００５６】
データバッファ４１０は、メモリ制御部４７０の制御に従って、ライトデータやリードデータをアクセス単位で保持するものである。メモリセルアレイ４２０は、マトリックス状に配列された複数のメモリセルを備える。各々のメモリセルとして、不揮発性の記憶素子が用いられる。具体的には、ＮＡＮＤ型やＮＯＲ型のフラッシュメモリ、ＲｅＲＡＭ、ＰＣＲＡＭ、または、ＭＲＡＭなどが記憶素子として用いられる。
【００５７】
ドライバ４３０は、アドレスデコーダ４４０により選択されたメモリセルに対してデータの書込み、または、データの読出しを行うものである。アドレスデコーダ４４０は、コマンドにより指定されたアドレスを解析して、そのアドレスに対応するメモリセルを選択するものである。バス４５０は、データバッファ４１０、メモリセルアレイ４２０、アドレスデコーダ４４０、メモリ制御部４７０および制御インターフェース４６０が相互にデータを交換するための共通の経路である。制御インターフェース４６０は、メモリコントローラ３００と不揮発性メモリ４００とがデータやコマンドを相互に交換するためのインターフェースである。
【００５８】
メモリ制御部４７０は、ドライバ４３０およびアドレスデコーダ４４０を制御して、データの書込み、または、読出しを行わせるものである。メモリ制御部４７０は、ライトコマンドおよびライトデータを受け取った場合には、そのコマンドの指定するアドレスに書き込まれているデータをプレリードデータとして読み出す。この読出しは、プレリードと呼ばれる。メモリ制御部４７０は、ライトデータとプレリードデータとをビット単位で比較し、ライトデータにおいて「１」であり、かつ、プレリードデータにおいて「０」のビットを書換え対象とする。メモリ制御部４７０は、それらの書換え対象のビットを「１」に書き換える。この処理は、リセット処理と呼ばれる。次に、メモリ制御部４７０は、ライトデータとセット処理後のプレリードデータとをビット単位で比較し、ライトデータにおいて「０」であり、かつ、プレリードデータにおいて「１」のビットを書換え対象とする。メモリ制御部４７０は、それらの書換え対象のビットを「０」に書き換える。この処理は、セット処理と呼ばれる。
【００５９】
また、メモリ制御部４７０は、リードコマンドを受け取ると、アドレスデコーダ４４０およびドライバ４３０を制御して、指定された物理アドレスのデータをメモリコントローラ３００へリードデータとして出力させる。
【００６０】
図９は、第１の実施の形態におけるリフレッシュ処理により生成されるデータの一例を示す図である。同図におけるａは、リフレッシュする物理アドレスから読み出されたプレリードデータの一例である。例えば、リフレッシュ処理部３５０は、２３ビットの情報ビットと、反転ビットと、１６ビットの冗長ビットとを含む４０ビットの受信語をプレリードデータとして読み出す。同図におけるｂは、誤りが訂正された訂正データの一例を示す図である。例えば、リフレッシュ処理部３５０は、プレリードデータ内の情報ビットの先頭から４ビット目と、冗長ビットの末尾から２ビット目とをエラービットとして検出し、その値を訂正する。
【００６１】
また、図９におけるｃは、符号化対象データの一例を示す図である。リフレッシュ処理部３５０は、訂正データ内の２３ビットの情報ビットと反転ビットとを反転して、２４ビットの符号化対象データを生成する。同図におけるｄは、ライトデータの一例を示す図である。例えば、リフレッシュ処理部３５０は、２４ビットの符号化対象データから、１６ビットの冗長ビットを生成し、それらを含む４０ビットの符号語をライトデータとして不揮発性メモリ４００に供給する。
【００６２】
図９におけるｅは、セットされるビットの位置を示す図である。同図のｅにおいて、「＊」は、セット処理が行われるビットの位置を示し、「−」は、セット処理が行われないビットの位置を示す。例えば、同図におけるａのプレリードデータの先頭のビットは「０」であり、同図におけるｄのライトデータの先頭ビットが「１」である場合、不揮発性メモリ４００は、物理アドレスの先頭のビットをセットする。同図におけるｆは、リセットされるビットの位置を示す図である。同図のｆにおいて、「＊」は、リセット処理が行われるビットの位置を示し、「−」は、リセット処理が行われないビットの位置を示す。例えば、同図におけるａのプレリードデータの先頭から２４ビット目の反転ビットは「１」であり、同図におけるｄのライトデータの反転ビットが「０」である場合、不揮発性メモリ４００は、物理アドレスの先頭から２４ビット目をリセットする。
【００６３】
図９におけるｇは、リフレッシュされるビットの位置を示す図である。同図のｇにおいて、「＊」は、リフレッシュされるビットの位置を示し、「−」は、リフレッシュされないビットの位置を示す。メモリコントローラ３００は、訂正した情報ビットを反転し、その反転した情報ビットを含む符号語をライトデータとして書き込むため、誤りが検出されなかった情報ビットの全てをリフレッシュすることができる。なお、冗長ビットに対応するメモリセルが書き換えられる確率は、ランダムパターンが、再生成されたランダムパターンに変化する際の確率に相当し、約１／２である。
【００６４】
図１０は、第１の実施の形態における劣化前後の可変抵抗素子の抵抗分布の一例を示す図である。同図における横軸は、抵抗値Ｒを示しており、縦軸は、セルの数の相対的な分布を相対値により示している。可変抵抗素子の抵抗状態は、所定の閾値を境に、大きく２つの分布に分かれている。閾値と比較して抵抗値が低い状態は、低抵抗状態（ＬＲＳ：Low-Resistance State）と呼ばれ、閾値と比較して抵抗値が高い状態は、高抵抗状態（ＨＲＳ：High-Resistance State）と呼ばれる。
【００６５】
可変抵抗素子の高抵抗状態および低抵抗状態をそれぞれ論理０値または論理１値の何れかに対応付けることにより、可変抵抗素子はメモリセルとして機能する。論理０値または論理１値の何れに対応付けるかは任意である。例えば、高抵抗状態が論理１値に対応付けられ、低抵抗状態が論理０値に対応付けられる。
【００６６】
図１０におけるａは、劣化していない可変抵抗素子の抵抗分布の一例を示す図である。劣化していない場合には、「０」が書き込まれたメモリセル全ての抵抗値は閾値より低く、「１」が書き込まれたメモリセル全ての抵抗値は閾値より高くなっている。このため、書き込まれた値と同一の値のビットが読み出され、リードエラーは生じない。
【００６７】
一方、図１０におけるｂは、劣化が進行した可変抵抗素子の抵抗分布の一例を示す図である。劣化が進行すると、「０」が書き込まれたメモリセルの抵抗値が上昇し、閾値を超えるおそれがある。この閾値を超えたメモリセルからは、「１」の値が読み出され、誤りが発生してしまう。また、「１」が書き込まれたメモリセルの抵抗値が低下し、閾値を下回るおそれがある。この閾値を下回ったメモリセルからは、「０」の値が読み出され、誤りが発生してしまう。同図における点線で囲まれた部分は、誤りの生じるメモリセルの位置を示す。
【００６８】
図１１におけるａは、第１の実施の形態におけるリフレッシュ後の可変抵抗素子の抵抗分布の一例を示す図である。メモリコントローラ３００は、訂正した情報ビットを反転するため、誤りが生じていない情報ビットの全てが反転して書き込まれる。
【００６９】
図１１におけるｂは、比較例におけるリフレッシュ後の可変抵抗素子の抵抗分布の一例を示す図である。この比較例では、訂正データを再度書き込むリフレッシュ処理が行われたものとする。同図におけるｂに例示するように、訂正データでは、誤りが生じた情報ビットのみが反転して、そのメモリセルがリフレッシュされる。しかし、誤りの生じていないメモリセルはリフレッシュされず、その状態は改善しない。抵抗状態が閾値ぎりぎりで正常と判断されたメモリセルは、近いうちに誤りが生じる可能性が高く、そのたびにリフレッシュを繰り返す必要がある。このため、誤りが生じないメモリセルをリフレッシュしない構成では、そのメモリセルをリフレッシュする場合と比較して、メモリセルのリフレッシュの頻度が増加するおそれがある。
【００７０】
これに対して、メモリコントローラ３００は、図１１におけるａに例示したように、誤りが生じないメモリセルを全てリフレッシュする。このため、誤りの無いメモリセル全ての状態を劣化の無い状態に近づけて 、誤りの発生頻度を低減することができる。
【００７１】
［メモリシステムの動作例］
図１２は、第１の実施の形態におけるストレージ２００の動作の一例を示すフローチャートである。この動作は、例えば、ホストコンピュータ１００によりストレージ２００に
対して初期化が指示されたときに開始する。
【００７２】
不揮発性メモリ４００は、メモリセルアレイ４２０内の全ビットを特定の値（例えば、「０」）に初期化する（ステップＳ９０１）。メモリコントローラ３００は、ホストコンピュータ１００からのコマンドをデコードする（ステップＳ９０２）。メモリコントローラ３００は、ホストコンピュータ１００からコマンドを受け取った場合に、そのコマンドがライトコマンドであるか否かを判断する（ステップＳ９０３）。ここでは、ホストコンピュータ１００からのコマンドは、ライトコマンドおよびリードコマンドのうちのいずれかであるものとする。なお、不揮発性メモリ４００は、全ビットを「０」の値に初期化しているが、「１」の値に初期化してもよい。この場合、メモリコントローラ３００は、「１」のビット数がｋ／２を超えるか否かを判定すればよい。
【００７３】
ライトコマンドである場合には（ステップＳ９０３：Ｙｅｓ）、メモリコントローラ３００および不揮発性メモリ４００は、ライト処理を行う（ステップＳ９１０）。一方、ライトコマンドでない場合には（ステップＳ９０３：Ｎｏ）、メモリコントローラ３００および不揮発性メモリ４００は、リード処理を行う（ステップＳ９３０）。
【００７４】
ステップＳ９１０またはＳ９３０の後、メモリコントローラ３００は、アクセス頻度などに基づいて、リフレッシュが必要であるか否かを判断する（ステップＳ９０４）。リフレッシュが必要である場合には（ステップＳ９０４：Ｙｅｓ）、メモリコントローラ３００は、リフレッシュ処理を行う（ステップＳ９５０）。一方、リフレッシュが必要でない場合（ステップＳ９０４：Ｎｏ）またはステップＳ９５０の後、メモリコントローラ３００は、ステップＳ９０２に戻る。
【００７５】
図１３は、第１の実施の形態におけるライト処理の一例を示すフローチャートである。メモリコントローラ３００は、情報ビットにおいて「０」のビット数がｋ／２より多いか否かを判断する（ステップＳ９１１）。
【００７６】
「０」のビット数がｋ／２以下の場合に（ステップＳ９１１：Ｎｏ）、メモリコントローラ３００は、情報ビットを反転し（ステップＳ９１２）、「１」の反転フラグを生成する（ステップＳ９１３）。そして、メモリコントローラ３００は、反転した情報ビットと反転フラグとを符号化してライトデータを生成し、ライトコマンドとともに不揮発性メモリ４００に供給する（ステップＳ９１４）。
【００７７】
一方、「０」のビット数がｋ／２より多い場合に（ステップＳ９１１：Ｙｅｓ）、メモリコントローラ３００は、「０」の反転フラグを生成する（ステップＳ９１５）。そして、メモリコントローラ３００は、情報ビットおよび反転フラグを符号化してライトデータを生成し、ライトコマンドとともに不揮発性メモリ４００に供給する（ステップＳ９１６）。
【００７８】
不揮発性メモリ４００は、ライトコマンドに従ってプレリードを行い（ステップＳ９１７）、セット処理（ステップＳ９１８）およびリセット処理（ステップＳ９１９）を順に行う。ステップＳ９１９の後、ストレージ２００は、ライト処理を終了する。なお、不揮発性メモリ４００は、書き込んだデータを読み出して、ライトデータとビット単位で比較するベリファイ処理やステータスの生成処理を行っているが、これらの処理は図１３において省略されている。
【００７９】
図１４は、第１の実施の形態におけるリード処理の一例を示すフローチャートである。不揮発性メモリ４００は、リードコマンドに従ってリードデータを読み出す（ステップＳ９３１）。メモリコントローラ３００は、リードデータの誤りの検出および訂正を行い（ステップＳ９３２）、リードデータ内の反転フラグが「０」であるか否かを判断する（ステップＳ９３３）。リードデータ内の反転フラグが「０」である場合（ステップＳ９３３：Ｙｅｓ）、メモリコントローラ３００は、誤りを訂正した情報ビットを反転する（ステップＳ９３４）。そして、メモリコントローラ３００は、反転した情報ビットをエラーフラグとともにホストコンピュータ１００に出力する（ステップＳ９３５）。
【００８０】
一方、リードデータ内の反転フラグが「１」である場合（ステップＳ９３３：Ｎｏ）、メモリコントローラ３００は、情報ビットを反転せずにエラーフラグとともにホストコンピュータ１００に出力する（ステップＳ９３６）。ステップＳ９３５またはＳ９３６の後に、ストレージ２００は、リード処理を終了する。
【００８１】
図１５は、第１の実施の形態におけるリフレッシュ処理の一例を示すフローチャートである。不揮発性メモリ４００は、メモリコントローラ３００の制御に従って、プレリードを行う（ステップＳ９５１）。メモリコントローラ３００は、プレリードデータの誤りの検出および訂正を行い（ステップＳ９５２）、誤りを訂正した情報ビットおよび反転ビットを反転する（ステップＳ９５５）。メモリコントローラ３００は、反転した情報ビットと反転ビットとを含む符号化対象データを再符号化し、ライトコマンドとともに不揮発性メモリ４００に供給する（ステップＳ９５６）。
【００８２】
不揮発性メモリ４００は、ライトコマンドに従ってセット処理（ステップＳ９５７）およびリセット処理（ステップＳ９５８）を順に行う。ステップＳ９５８の後、ストレージ２００は、リフレッシュ処理を終了する。
【００８３】
このように、本技術の第１の実施の形態によれば、メモリコントローラ３００は、情報ビットの誤りを訂正して、その情報ビットおよび反転ビットを反転してメモリセルに書き込むため、誤りの無いメモリセルの全てを書き換えることができる。これにより、誤りの無いメモリセルの状態を劣化の無い状態に近づけて、誤りの発生頻度を低減することができる。
【００８４】
＜２．第２の実施の形態＞
第１の実施の形態においてメモリコントローラ３００は、誤りの生じたメモリセルをリフレッシュせず、誤りが無いメモリセルのみをリフレッシュしていた。しかし、誤りの生じたメモリセルについてもさらにリフレッシュを行うことが望ましい。第２の実施の形態のメモリコントローラ３００は、誤りの生じたメモリセルをさらにリフレッシュする点において第１の実施の形態と異なる。
【００８５】
図１６は、第２の実施の形態におけるリフレッシュ処理部３５０の一構成例を示すブロック図である。第２の実施の形態のリフレッシュ処理部３５０は、再書込み部３５７の代わりに再書込み部３５８を備える点において第１の実施の形態と異なる。また、第２の実施の形態の誤り検出訂正部３５４は、訂正データを訂正データ反転部３５５に加えて、再書込み部３５８にも供給する。
【００８６】
再書込み部３５８は、訂正データをライトコマンドとともに不揮発性メモリ４００に供給し、その後に、そのライトコマンドを再発行して、再符号化部３５６からのライトデータとともに不揮発性メモリ４００に供給する。
【００８７】
図１７は、第２の実施の形態におけるリフレッシュ処理の一例を示すフローチャートである。第２の実施の形態のリフレッシュ処理は、ステップＳ９５３およびＳ９５４をさらに実行する点において第１の実施の形態と異なる。
【００８８】
誤りの検出および訂正（ステップＳ９５２）の後にメモリコントローラ３００は、訂正データを不揮発性メモリ４００に供給する。そして、不揮発性メモリ４００は、訂正データおよびプレリードデータを比較してセット処理（ステップＳ９５３）およびリセット処理（ステップＳ９５４）を行う。また、メモリコントローラ３００および不揮発性メモリ４００は、ステップＳ９５５以降の処理を行う。
【００８９】
図１８は、第２の実施の形態におけるリフレッシュ処理により生成される訂正データの一例を示す図である。同図におけるａは、リフレッシュする物理アドレスから読み出されたプレリードデータの一例である。同図におけるｂは、誤りが訂正された訂正データの一例を示す図である。例えば、第１の実施の形態と同様に、プレリードデータ内の情報ビットの先頭から４ビット目と、冗長ビットの末尾から２ビット目とがエラービットとして検出され、訂正される。
【００９０】
図１８におけるｃは、訂正データの書込みの際にセットされるビットの位置を示す図である。同図のｃにおいて、「＊」は、セット処理が行われるビットの位置を示し、「−」は、セット処理が行われないビットの位置を示す。同図におけるａのプレリードデータ内の冗長ビットの末尾から２ビット目が「０」で、そのビットが「１」に訂正された場合、不揮発性メモリ４００は、冗長ビットの末尾から２ビット目を「１」にセットする。同図におけるｄは、訂正データの書込みの際にリセットされるビットの位置を示す図である。同図のｄにおいて、「＊」は、リセット処理が行われるビットの位置を示し、「−」は、リセット処理が行われないビットの位置を示す。同図におけるａのプレリードデータ内の情報ビットの先頭から４ビット目が「１」で、そのビットが「０」に訂正された場合、不揮発性メモリ４００は、情報ビットの先頭から４ビット目を「０」にリセットする。
【００９１】
図１９は、第２の実施の形態におけるリフレッシュ処理により生成されるライトデータの一例を示す図である。同図におけるａは、符号化対象データの一例を示す図である。第１の実施の形態と同様に２４ビットの符号化対象データが生成される。同図におけるｂは、ライトデータの一例を示す図である。第１の実施の形態と同様に、４０ビットの符号語をライトデータとして生成される。
【００９２】
図１９におけるｃは、ライトデータの書込みの際にセットされるビットの位置を示す図である。同図のｃにおいて、「＊」は、セット処理が行われるビットの位置を示し、「−」は、セット処理が行われないビットの位置を示す。訂正データの書込みの際に不揮発性メモリ４００は、情報ビットの先頭から４ビット目を「０」にリセットしたため、ライトデータの書込みの際には、そのビットを「１」にセットする。同図におけるｄは、ライトデータの書込みの際にリセットされるビットの位置を示す図である。同図のｄにおいて、「＊」は、リセット処理が行われるビットの位置を示し、「−」は、リセット処理が行われないビットの位置を示す。訂正データの書込みの際に不揮発性メモリ４００は、冗長ビットの末尾から２ビット目を「１」にセットしたため、ライトデータの書込みの際には、そのビットを「０」にリセットする。
【００９３】
図１９におけるｅは、リフレッシュされるビットの位置を示す図である。同図のｅにおいて、「＊」は、リフレッシュされるビットの位置を示し、「−」は、リフレッシュされないビットの位置を示す。メモリコントローラ３００は、誤りが訂正されたビットについてもリフレッシュされるため、情報ビットの全てがリフレッシュされている。同図におけるｆは、各ビットの書換え回数を示す図である。情報ビット内の先頭から４ビット目のメモリセルでは、訂正後の値が書き込まれた後に、その訂正した値をさらに反転した値が書き込まれるため、２回の書換えが行われる。それ以外の情報ビットに対応するメモリセルでは、１回の書換えが行われる。
【００９４】
このように、本技術の第２の実施の形態によれば、メモリコントローラ３００は、ライトデータの書込み前に、訂正データの書込みを行うため、誤りの無いメモリセルに加えて、誤りが検出されたメモリセルも書き換えることができる。これにより、誤りの発生頻度をさらに低減することができる。
【００９５】
＜３．第３の実施の形態＞
第１の実施の形態においてメモリコントローラ３００は、情報ビットおよび反転ビットを符号化していたが、情報ビットのみを符号化してもよい。第３の実施の形態のメモリコントローラ３００は、情報ビットのみを符号化する点において第１の実施の形態と異なる。
【００９６】
図２０は、第３の実施の形態におけるライト処理部３１０の一構成例を示すブロック図である。第３の実施の形態の反転判定部３１１は、反転ビットを符号化部３１３に供給せず、ライト側情報ビット反転部３１２および不揮発性メモリ４００に供給する。また、第３の実施の形態の実施の形態の符号化部３１３は、情報ビットのみを符号語に符号化する。この結果、符号語および反転ビットがライトデータとして不揮発性メモリ４００に供給される。
【００９７】
図２１は、第３の実施の形態におけるライト処理により生成されるデータの一例を示す図である。同図におけるａは、符号化される情報ビットの一例である。ライト処理部３１０は、例えば、２４ビットの単位で情報ビットを符号化する。同図におけるｂは、符号化対象データの一例である。ライト処理部３１０は、例えば、２４ビットの情報ビットを必要に応じて反転して、符号化対象データとする。同図におけるｃは、符号語の一例である。ライト処理部３１０は、例えば、２４ビットの符号化対象データから、１６ビットの冗長ビットを生成し、それらを含む４０ビットの符号語を生成する。同図におけるｄは、ライトデータの一例である。ライト処理部３１０は、例えば、４０ビットの符号語と反転ビットとを含む４１ビットのデータをライトデータとして不揮発性メモリ４００に書き込む。
【００９８】
図２２は、第３の実施の形態におけるリード処理部３２０の一構成例を示すブロック図である。第３の実施の形態の誤り検出訂正部３２２は、受信語および反転ビットを含むリードデータにおいて、受信語を元の情報ビットに復号する。また、第３の実施の形態の訂正データ反転部３２１は、リードデータにおける反転ビットに従って、情報ビットを反転する。
【００９９】
図２３は、第３の実施の形態におけるリフレッシュ処理部３５０の一構成例を示すブロック図である。第３の実施の形態のリフレッシュ処理部３５０は、訂正データ反転部３５５の代わりに、リード側情報ビット反転部３５９および反転ビット反転部３６０を備える点において第１の実施の形態と異なる。
【０１００】
リード側情報ビット反転部３５９は、訂正された情報ビットを誤り検出訂正部３５４から受け取り、その情報ビットを反転して符号化対象データとして再符号化部３５６に供給するものである。
【０１０１】
反転ビット反転部３６０は、プレリードデータ読出し部３５３から反転ビットを受け取り、その反転ビットを反転して再書込み部３５７に供給するものである。
【０１０２】
また、第３の実施の形態のプレリードデータ読出し部３５３は、プレリードデータ内の受信語を誤り検出訂正部３５４に供給し、プレリードデータ内の反転ビットを反転ビット反転部３６０に供給する。第３の実施の形態の再書込み部３５７は、反転された反転ビットと符号語とを含むデータをライトデータとして不揮発性メモリ４００に書き込む。
【０１０３】
図２４は、第３の実施の形態におけるライト処理の一例を示すフローチャートである。第３の実施の形態のライト処理は、ステップＳ９１３乃至Ｓ９１６の代わりにステップＳ９２１乃至Ｓ９２４を実行する点において第１の実施の形態と異なる。
【０１０４】
「０」のビット数がｋ／２以下の場合に（ステップＳ９１１：Ｎｏ）、メモリコントローラ３００は、情報ビットを反転し（ステップＳ９１２）、反転した情報ビットを符号化する（ステップＳ９２１）。そして、メモリコントローラ３００は、「１」の反転フラグを符号語に付加して不揮発性メモリ４００に供給する（ステップＳ９２３）。
【０１０５】
一方、「０」のビット数がｋ／２より多い場合に（ステップＳ９１１：Ｙｅｓ）、メモリコントローラ３００は、情報ビットを符号化し（ステップＳ９２２）、「０」の反転フラグを符号語に付加して不揮発性メモリ４００に供給する（ステップＳ９２４）。
【０１０６】
図２５は、第３の実施の形態におけるリフレッシュ処理の一例を示すフローチャートである。第３の実施の形態のリフレッシュ処理は、ステップＳ９５５の代わりに、ステップＳ９６０およびＳ９６１を実行する点において第１の実施の形態と異なる。
【０１０７】
メモリコントローラ３００は、誤りの検出および訂正（ステップＳ９５２）の後に情報ビットを反転し（ステップＳ９６０）、反転した情報ビットを再符号化する（ステップＳ９５６）。そしてメモリコントローラ３００は、反転した反転ビットを符号語に付加し、ライトデータとして不揮発性メモリ４００に供給する（ステップＳ９６１）。
【０１０８】
図２６は、第３の実施の形態におけるリフレッシュ処理により生成されるデータの一例を示す図である。同図におけるａは、リフレッシュする物理アドレスから読み出されたプレリードデータの一例である。例えば、リフレッシュ処理部３５０は、４０ビットの受信語と反転ビットとを含む４１ビットのプレリードデータを読み出す。同図におけるｂは、誤りが訂正された訂正データの一例を示す図である。例えば、リフレッシュ処理部３５０は、プレリードデータ内の情報ビットの先頭から４ビット目と、冗長ビットの末尾から２ビット目とをエラービットとして検出し、その値を訂正する。
【０１０９】
また、図２６におけるｃは、符号化対象データの一例を示す図である。リフレッシュ処理部３５０は、訂正した２４ビットの情報ビットを反転して、２４ビットの符号化対象データを生成する。同図におけるｄは、ライトデータの一例を示す図である。例えば、リフレッシュ処理部３５０は、２４ビットの符号化対象データから４０ビットの符号語を生成し、その符号語および反転ビットを含む４１ビットのライトデータを不揮発性メモリ４００に供給する。
【０１１０】
図２６におけるｅは、セットされるビットの位置を示す図である。同図のｅにおいて、「＊」は、セット処理が行われるビットの位置を示し、「−」は、セット処理が行われないビットの位置を示す。同図におけるｆは、リセットされるビットの位置を示す図である。同図のｆにおいて、「＊」は、リセット処理が行われるビットの位置を示し、「−」は、リセット処理が行われないビットの位置を示す。同図におけるｇは、リフレッシュされるビットの位置を示す図である。同図のｇにおいて、「＊」は、リフレッシュされるビットの位置を示し、「−」は、リフレッシュされないビットの位置を示す。
【０１１１】
このように、第３の実施の形態によれば、メモリコントローラ３００は、情報ビットのみを符号化するため、符号語内に反転ビットを挿入する必要がなくなる。
【０１１２】
＜４．第４の実施の形態＞
第３の実施の形態においてメモリコントローラ３００は、誤りの生じたメモリセルをリフレッシュせず、誤りが無いメモリセルのみをリフレッシュしていた。しかし、誤りの生じたメモリセルについてもさらにリフレッシュを行うことが望ましい。第４の実施の形態のメモリコントローラ３００は、誤りの生じたメモリセルをさらにリフレッシュする点において第３の実施の形態と異なる。
【０１１３】
図２７は、第４の実施の形態におけるリフレッシュ処理部３５０の一構成例を示すブロック図である。第４の実施の形態のリフレッシュ処理部３５０は、再書込み部３５７の代わりに再書込み部３５８を備える点において第３の実施の形態と異なる。また、第４の実施の形態の誤り検出訂正部３５４は、訂正データをリード側情報ビット反転部３５９に加えて、再書込み部３５８にも供給する。再書込み部３５８の構成は、第２の実施の形態と同様である。
【０１１４】
図２８は、第４の実施の形態におけるリフレッシュ処理の一例を示すフローチャートである。第４の実施の形態のリフレッシュ処理は、ステップＳ９５３およびＳ９５４をさらに実行する点において第３の実施の形態と異なる。
【０１１５】
図２９は、第４の実施の形態におけるリフレッシュ処理により生成される訂正データの一例を示す図である。同図におけるａは、リフレッシュする物理アドレスから読み出されたプレリードデータの一例である。同図におけるｂは、誤りが訂正された訂正データの一例を示す図である。例えば、第３の実施の形態と同様に、プレリードデータ内の情報ビットの先頭から４ビット目と、冗長ビットの末尾から２ビット目とがエラービットとして検出され、訂正される。
【０１１６】
図２９におけるｃは、訂正データの書込みの際にセットされるビットの位置を示す図である。同図のｃにおいて、「＊」は、セット処理が行われるビットの位置を示し、「−」は、セット処理が行われないビットの位置を示す。同図におけるａのプレリードデータ内の冗長ビットの末尾から２ビット目が「０」で、そのビットが「１」に訂正された場合、不揮発性メモリ４００は、冗長ビットの末尾から２ビット目を「１」にセットする。同図におけるｄは、訂正データの書込みの際にリセットされるビットの位置を示す図である。同図のｄにおいて、「＊」は、リセット処理が行われるビットの位置を示し、「−」は、リセット処理が行われないビットの位置を示す。同図におけるａのプレリードデータ内の情報ビットの先頭から４ビット目が「１」で、そのビットが「０」に訂正された場合、不揮発性メモリ４００は、情報ビットの先頭から４ビット目を「０」にリセットする。
【０１１７】
図３０は、第４の実施の形態におけるリフレッシュ処理により生成されるライトデータの一例を示す図である。同図におけるａは、符号化対象データの一例を示す図である。第３の実施の形態と同様に２４ビットの符号化対象データが生成される。同図におけるｂは、ライトデータの一例を示す図である。第３の実施の形態と同様に、４１ビットの符号語をライトデータとして生成される。
【０１１８】
図３０におけるｃは、ライトデータの書込みの際にセットされるビットの位置を示す図である。同図のｃにおいて、「＊」は、セット処理が行われるビットの位置を示し、「−」は、セット処理が行われないビットの位置を示す。訂正データの書込みの際に不揮発性メモリ４００は、情報ビットの先頭から４ビット目を「０」にリセットしたため、ライトデータの書込みの際には、そのビットを「１」にセットする。同図におけるｄは、ライトデータの書込みの際にリセットされるビットの位置を示す図である。同図のｄにおいて、「＊」は、リセット処理が行われるビットの位置を示し、「−」は、リセット処理が行われないビットの位置を示す。訂正データの書込みの際に不揮発性メモリ４００は、冗長ビットの末尾から２ビット目を「１」にセットしたため、ライトデータの書込みの際には、そのビットを「０」にリセットする。
【０１１９】
図３０におけるｅは、リフレッシュされるビットの位置を示す図である。同図のｅにおいて、「＊」は、リフレッシュされるビットの位置を示し、「−」は、リフレッシュされないビットの位置を示す。メモリコントローラ３００は、誤りが訂正されたビットについてもリフレッシュされるため、情報ビットの全てがリフレッシュされている。同図におけるｆは、各ビットの書換え回数を示す図である。情報ビット内の先頭から２ビット目のメモリセルでは、訂正後の値が書き込まれた後に、その訂正した値をさらに反転した値が書き込まれるため、２回の書換えが行われる。それ以外の情報ビットに対応するメモリセルでは、１回の書換えが行われる。
【０１２０】
このように、本技術の第４の実施の形態によれば、メモリコントローラ３００は、ライトデータの書込み前に、訂正データの書込みを行うため、誤りの無いメモリセルに加えて、誤りが検出されたメモリセルも書き換えることができる。これにより、誤りの発生頻度をさらに低減することができる。
【０１２１】
＜５．第５の実施の形態＞
第１の実施の形態においてメモリコントローラ３００は、反転ビットを含むライトデータを不揮発性メモリ４００に供給していたが、反転ビットを含まないライトデータを供給してもよい。第５の実施の形態のメモリコントローラ３００は、反転ビットを含まないライトデータを不揮発性メモリ４００に供給する点において第１の実施の形態と異なる。
【０１２２】
図３１は、第５の実施の形態におけるライト処理部３１０の一構成例を示すブロック図である。第５の実施の形態のライト処理部３１０は、反転判定部３１１、ライト側情報ビット反転部３１２および符号化部３１３の代わりに、符号化部３１５、反転判定部３１６、符号語反転部３１７およびセレクタ３１８を備える点において第１の実施の形態と異なる。
【０１２３】
符号化部３１５は、情報ビットを符号語に符号化するものである。この符号化部３１５は、符号語を反転判定部３１６、符号語反転部３１７およびセレクタ３１８に供給する。
【０１２４】
反転判定部３１６は、符号語を反転するか否かを反転するものである。この反転判定部３１６は、例えば、符号語において、特定の値（例えば、「０」）のビットが、符号語の総ビット数ｎの半数よりビット数の多い多数ビットであるか否かを判定する。そして、「０」のビットが多数ビットである場合には、反転判定部３１６は、反転しない旨を示す判定ビットを生成し、そうでない場合には反転する旨を示す判定ビットを生成する。
【０１２５】
符号語反転部３１７は、符号語を反転するものである。この符号語反転部３１７は、反転した符号語をセレクタ３１８に供給する。
【０１２６】
セレクタ３１８は、判定ビットに従って、反転した符号語と反転していない符号語との一方を選択するものである。セレクタ３１８は、選択した方のデータをライトデータとして不揮発性メモリ４００に供給する。
【０１２７】
図３２は、第５の実施の形態におけるリード処理部３２０の一構成例を示すブロック図である。第５の実施の形態のリード処理部３２０には、訂正データ反転部３２１および誤り検出訂正部３２２が設けられない。このリード処理部３２０は、それらの代わりに、セレクタ３３１、訂正データ選択部３３２、リードデータ誤り検出訂正部３３３、反転リードデータ誤り検出訂正部３３４および受信語反転部３３５を備える。
【０１２８】
受信語反転部３３５は、不揮発性メモリ４００からリードデータとして読み出された受信語を反転するものである。この受信語反転部３３５は、反転した受信語を反転リードデータとして反転リードデータ誤り検出訂正部３３４に供給する。
【０１２９】
リードデータ誤り検出訂正部３３３は、不揮発性メモリ４００から読み出されたリードデータにおいて誤り検出および誤り訂正を行うものである。このリードデータ誤り検出訂正部３３３は、受信語に検査行列を乗じてシンドロームＳを生成し、そのシンドロームＳから誤りの位置を求めて、その誤りを訂正する。リードデータ誤り検出訂正部３３３は、誤り検出および誤り訂正の結果に基づいて、誤り訂正に成功したか否かを示す訂正成否ビットＢｒを生成する。ここで、誤りが検出されなかった場合は誤り訂正自体が行われないが、この場合は、説明の便宜上、誤り訂正の成功として扱われるものとする。この訂正成否ビットＢｒには、例えば、誤り訂正に成功した場合に「１」の値が設定され、誤り訂正に失敗した場合に「０」の値が設定される。
【０１３０】
また、誤り訂正に成功した場合にリードデータ誤り検出訂正部３３３は、誤り訂正後のリードデータから、冗長ビットを除いたデータを訂正データＤｒとしてセレクタ３３１に供給する。また、リードデータ誤り検出訂正部３３３は、誤り訂正に成功したことを通知する訂正成否ビットＢｒを生成して、訂正データ選択部３３２に供給する。
【０１３１】
ここで、誤りの数がＥＣＣの訂正能力を超える場合には誤り訂正に失敗するおそれがある。この場合にリードデータ誤り検出訂正部３３３は、誤り訂正に失敗したことを通知する訂正成否ビットＢｒを生成して、訂正データ選択部３３２に供給する。なお、リードデータ誤り検出訂正部３３３は、特許請求の範囲に記載の誤り検出訂正部の一例である。
【０１３２】
反転リードデータ誤り検出訂正部３３４は、反転リードデータにおいて誤り検出および誤り訂正を行うものである。この反転リードデータ誤り検出訂正部３３４は、反転リードデータに検査行列を乗じてシンドロームＳ’を生成し、そのシンドロームＳ’から誤りの位置を求めて、その誤りを訂正する。また、反転リードデータ誤り検出訂正部３３４は、反転データの誤り訂正に成功したか否かを示す訂正成否ビットＢｒ’を生成する。
【０１３３】
誤り訂正に成功した場合に反転リードデータ誤り検出訂正部３３４は、誤り訂正後の反転リードデータから冗長ビットを除いたデータを訂正反転データＤｒ’としてセレクタ３３１に供給する。また、反転リードデータ誤り検出訂正部３３４は、誤り訂正に成功したことを通知する訂正成否ビットＢｒ’を生成して訂正データ選択部３３２に供給する。
【０１３４】
一方、誤りの訂正に失敗した場合に反転リードデータ誤り検出訂正部３３４は、誤り訂正に失敗したことを通知する訂正成否ビットＢｒ’を生成して、訂正データ選択部３３２に供給する。
【０１３５】
訂正データ選択部３３２は、リードデータおよび反転リードデータの一方のみの誤り訂正に成功した場合には、その成功した方のデータを選択するものである。この訂正データ選択部３３２は、リードデータのみの誤り訂正に成功した場合に訂正データＤｒを選択し、反転リードデータのみの誤り訂正に成功した場合に訂正反転データＤｒ’を選択する。そして、訂正データ選択部３３２は、選択した方を示す選択ビットを生成してセレクタ３３１に供給し、リードエラーが生じなかった旨を通知するエラーフラグを生成してホストコンピュータ１００に出力する。この選択ビットには、例えば、訂正データＤｒが選択された場合に「０」の値が設定され、訂正反転データＤｒ’が選択された場合に「１」の値が設定される。また、エラーフラグには、リードエラーが生じなかった場合に「０」の値が設定され、そのリードエラーが生じた場合に「１」の値が設定される。
【０１３６】
また、リードデータおよび反転リードデータの両方の誤り訂正に失敗した場合、訂正データ選択部３３２は、リードエラーが生じた旨を通知するエラーフラグを生成してホストコンピュータ１００に出力する。
【０１３７】
また、リードデータおよび反転リードデータの両方の誤り訂正に成功した場合にも、訂正データ選択部３３２は、リードエラーが生じた旨を通知するエラーフラグを生成してホストコンピュータ１００に出力する。両方の誤り訂正に成功した場合にリードエラーとして扱うのは、リードデータおよび反転リードデータの少なくとも一方において、訂正能力を超える数の誤りが発生したおそれがあり、いずれのデータが正しいのか判断することができないためである。
【０１３８】
このように、第５の実施の形態では、反転した場合と反転していない場合とのそれぞれで、冗長ビットを用いて誤り訂正に成功するか否かに基づいて、情報ビットが反転されているかが判定される。なお、冗長ビットは、特許請求の範囲に記載の反転情報の一例である。
【０１３９】
セレクタ３３１は、選択ビットに従って、訂正データＤｒおよび訂正反転データＤｒ’の一方をホストコンピュータ１００へ出力するものである。
【０１４０】
なお、リードエラーの際に、リード処理部３２０はホストコンピュータ１００に訂正前のデータを出力する構成としてもよい。この場合に、リード処理部３２０は、例えば、訂正前のリードデータおよび反転リードデータの少なくとも一方をホストコンピュータ１００に出力する。そして、ホストコンピュータ１００は、例えば、メモリコントローラ３００が用いる復号アルゴリズムよりも誤り訂正能力の高いアルゴリズムにより、そのデータの誤り訂正を行う。訂正能力の低い方の復号アルゴリズムとして、例えば、軟判定復号アルゴリズムにおけるＭｉｎ−Ｓｕｍアルゴリズムが用いられる。また、訂正能力の高い方の復号アルゴリズムとして、例えば、ＢＰ（Brief-Propagation）アルゴリズムが用いられる。
【０１４１】
図３３は、第５の実施の形態における訂正データ選択部３３２の動作の一例を示す表である。訂正成否ビットＢｒおよびＢｒ’の両方が「０」の場合、すなわちリードデータおよび反転リードデータの両方の訂正に失敗した場合には、訂正データ選択部３３２は、リードエラーのあったことを示す「１」のエラーフラグを生成する。この場合、選択ビットは、「０」および「１」のいずれのビットであってもよい。
【０１４２】
また、訂正成否ビットＢｒ’のみが「１」の場合、すなわち反転リードデータのみの訂正に成功した場合には、訂正データ選択部３３２は、訂正反転データＤｒ’を示す「１」の選択ビットを生成する。また、訂正データ選択部３３２は、リードエラーの無いことを示す「０」のエラーフラグを生成する。
【０１４３】
また、訂正成否ビットＢｒのみが「１」の場合、すなわちリードデータのみの訂正に成功した場合には、訂正データ選択部３３２は、訂正データＤｒを示す「０」の選択ビットを生成する。また、訂正データ選択部３３２は、リードエラーの無いことを示す「０」のエラーフラグを生成する。
【０１４４】
また、訂正成否ビットＢｒおよびＢｒ’の両方が「１」の場合、すなわちリードデータおよび反転リードデータの両方の訂正に成功した場合には、訂正データ選択部３３２は、リードエラーのあったことを示す「１」のエラーフラグを生成する。この場合、選択ビットは、「０」および「１」のいずれのビットであってもよい。
【０１４５】
なお、メモリコントローラ３００は、リードデータおよび反転リードデータの両方の誤り訂正に成功した際にリードエラーと判断していたが、リードエラーと判断せずに一方の訂正データを出力してもよい。例えば、ライト処理部３１０が「０」のビット数がｎ／２より多ければ反転しないで書き込んでいた場合には、訂正データＤｒおよび訂正反転データＤｒ’のうち、「０」のビットが多い方が正しいデータである可能性が高い。このため、メモリコントローラ３００は、訂正データＤｒおよび訂正反転データＤｒ’の両方の誤り訂正に成功した際にリードエラーと判断せずに特定の値のビット数が多い方を出力してもよい。
【０１４６】
また、メモリコントローラ３００は、リードデータおよび反転リードデータの両方の誤り訂正に成功した際に、訂正データＤｒおよび訂正反転データＤｒ’のうち訂正したビット数の少ない方を出力してもよい。
【０１４７】
図３４は、第５の実施の形態におけるリフレッシュ処理部３５０の一構成例を示すブロック図である。第５の実施の形態のリフレッシュ処理部３５０は、誤り検出訂正部３５４の代わりに、セレクタ３６１、訂正データ選択部３６２、リードデータ誤り検出訂正部３６３、反転リードデータ誤り検出訂正部３６４および受信語反転部３６５を備える。また、第５の実施の形態のリフレッシュ処理部３５０は、訂正データ反転部３５５の代わりに訂正データ反転部３６６を備える。
【０１４８】
セレクタ３６１、訂正データ選択部３６２およびリードデータ誤り検出訂正部３６３の構成は、セレクタ３３１、訂正データ選択部３３２およびリードデータ誤り検出訂正部３３３と同様である。また、反転リードデータ誤り検出訂正部３６４および受信語反転部３６５の構成は、反転リードデータ誤り検出訂正部３３４および受信語反転部３３５と同様である。
【０１４９】
訂正データ反転部３６６は、セレクタ３６１により選択されたデータを反転して再書込み部３５７に供給する。
【０１５０】
図３５は、第５の実施の形態におけるライト処理の一例を示すフローチャートである。第５の実施の形態のライト処理は、ステップＳ９１１乃至Ｓ９１６の代わりにステップＳ９２１乃至Ｓ９２３を実行する点において第１の実施の形態と異なる。
【０１５１】
メモリコントローラ３００は、情報ビットを符号化し（ステップＳ９２１）、符号語において「０」のビット数がｎ／２より多いか否かを判断する（ステップＳ９２２）。
【０１５２】
「０」のビット数がｎ／２以下の場合に（ステップＳ９２２：Ｎｏ）、メモリコントローラ３００は、符号語を反転する（ステップＳ９２３）。「０」のビット数がｎ／２より多い場合（ステップＳ９２２：Ｙｅｓ）、または、ステップＳ９２３の後、不揮発性メモリ４００は、ステップＳ９１７乃至Ｓ９１９を実行する。
【０１５３】
図３６は、第５の実施の形態におけるリード処理の一例を示すフローチャートである。第５の実施の形態のリード処理は、ステップＳ９３２以降の処理の代わりに、ステップＳ９４１乃至Ｓ９４８を実行する点において第１の実施の形態と異なる。メモリコントローラ３００は、ステップＳ９３１の後、リードデータを反転し（ステップＳ９４１）、リードデータの誤りの検出および訂正を行う（ステップＳ９４２）。また、メモリコントローラ３００は、反転リードデータの誤りの検出および訂正を行い（ステップＳ９４３）、反転しない場合にのみ訂正に成功したか否かを判断する（ステップＳ９４４）。
【０１５４】
反転しない場合にのみ訂正に成功した場合には（ステップＳ９４４：Ｙｅｓ）、メモリコントローラ３００は、訂正したリードデータ内の情報ビットと、「０」のエラーフラグとをホストコンピュータ１００へ出力する（ステップＳ９４５）。
【０１５５】
一方、反転しない場合にのみ訂正に成功したのではない場合には（ステップＳ９４４：Ｎｏ）、メモリコントローラ３００は、反転した場合にのみ訂正に成功したか否かを判断する（ステップＳ９４６）。反転した場合にのみ訂正に成功した場合には（ステップＳ９４６：Ｙｅｓ）、メモリコントローラ３００は、訂正した反転リードデータ内の情報ビットと、「０」のエラーフラグとをホストコンピュータ１００へ出力する（ステップＳ９４７）。
【０１５６】
一方、反転した場合にのみ訂正に成功したのではない場合には（ステップＳ９４６：Ｎｏ）、メモリコントローラ３００は、「１」のエラーフラグを生成してホストコンピュータ１００へ出力する（ステップＳ９４８）。ステップＳ９４５、Ｓ９４７またはＳ９４８の後に、メモリコントローラ３００は、リード処理を終了する。
【０１５７】
図３７は、第５の実施の形態におけるリフレッシュ処理の一例を示すフローチャートである。第５の実施の形態のリフレッシュ処理は、ステップＳ９５２、Ｓ９５５、Ｓ９５６の代わりにステップＳ９６２乃至Ｓ９６７および９７０を実行する点において第１の実施の形態と異なる。
【０１５８】
プレリード（ステップＳ９５１）の後、メモリコントローラ３００は、プレリードデータを反転し（ステップＳ９６２）、プレリードデータの誤りの検出および訂正を行う（ステップＳ９６３）。そして、メモリコントローラ３００は、反転リードデータの誤り検出および訂正を行い（ステップＳ９６４）、反転しない場合にのみ訂正に成功したか否かを判断する（ステップＳ９６５）。
【０１５９】
反転しない場合にのみ訂正に成功した場合には（ステップＳ９６５：Ｙｅｓ）、メモリコントローラ３００は、訂正したプレリードデータを反転し、ライトデータとして不揮発性メモリ４００に供給する（ステップＳ９６６）。一方、反転しない場合にのみ訂正に成功したのではない場合には（ステップＳ９６５：Ｎｏ）、メモリコントローラ３００は、反転した場合にのみ訂正に成功したか否かを判断する（ステップＳ９６７）。反転した場合にのみ訂正に成功した場合には（ステップＳ９６７：Ｙｅｓ）、メモリコントローラ３００は、訂正した反転リードデータを反転し、ライトデータとして不揮発性メモリ４００に供給する（ステップＳ９７０）。
【０１６０】
ステップＳ９６６またはＳ９７０の後、不揮発性メモリは、セット処理（ステップＳ９５７）およびリセット処理（ステップＳ９５８）を行う。反転した場合にのみ訂正に成功したのではない場合（ステップＳ９６７：Ｎｏ）、または、ステップＳ９５８の後、メモリコントローラ３００および不揮発性メモリ４００は、リフレッシュ処理を終了する。
【０１６１】
図３８は、第５の実施の形態におけるライト処理により生成されるデータの一例を示す図である。同図におけるａは、符号化される情報ビットの一例である。ライト処理部３１０は、例えば、２４ビットの単位で情報ビットを符号化する。同図におけるｂは、符号語の一例である。ライト処理部３１０は、例えば、２４ビットの情報ビットから１６ビットの冗長ビットを生成し、それらを含む４０ビットの符号語を生成する。同図におけるｃは、反転された符号語の一例である。同図におけるｂの符号語と、同図におけるｃの反転された符号語とのうち、「０」のビット数の多い方がライトデータとして不揮発性メモリ４００に書き込まれる。
【０１６２】
図３９は、第５の実施の形態におけるリフレッシュ処理により生成されるデータの一例を示す図である。同図におけるａは、リフレッシュする物理アドレスから読み出されたプレリードデータの一例である。例えば、リフレッシュ処理部３５０は、２４ビットの情報ビットと１６ビットの冗長ビットとを含む４０ビットの受信語をプレリードデータとして読み出す。同図におけるｂは、プレリードデータの反転により生成された反転リードデータの一例である。同図におけるｃは、訂正されたプレリードデータの一例を示す図である。同図におけるｄは、ライトデータの一例を示す図である。例えば、プレリードデータの訂正に成功し、反転リードデータの訂正には失敗した場合には、メモリコントローラ３００は、訂正したプレリードデータを反転し、ライトデータとして不揮発性メモリに供給する。
【０１６３】
図３９におけるｅは、セットされるビットの位置を示す図である。同図のｅにおいて、「＊」は、セット処理が行われるビットの位置を示し、「−」は、セット処理が行われないビットの位置を示す。同図におけるｆは、リセットされるビットの位置を示す図である。同図のｆにおいて、「＊」は、リセット処理が行われるビットの位置を示し、「−」は、リセット処理が行われないビットの位置を示す。同図におけるｇは、リフレッシュされるビットの位置を示す図である。同図のｇにおいて、「＊」は、リフレッシュされるビットの位置を示し、「−」は、リフレッシュされないビットの位置を示す。情報ビットおよび冗長ビットが反転されて書き込まれたため、誤りのない情報ビットおよび冗長ビットの全てがリフレッシュされている。
【０１６４】
このように、本技術の第５の実施の形態によれば、メモリコントローラ３００は、リードデータおよび反転リードデータのうち、訂正に成功した方を反転して不揮発性メモリ４００に書き込むため、反転ビットを書き込む必要がなくなる。これにより、不揮発性メモリ４００の使用効率を向上させることができる。
【０１６５】
＜６．第６の実施の形態＞
第５の実施の形態においてメモリコントローラ３００は、誤りの生じたメモリセルをリフレッシュせず、誤りが無いメモリセルのみをリフレッシュしていた。しかし、誤りの生じたメモリセルについてもさらにリフレッシュを行うことが望ましい。第６の実施の形態のメモリコントローラ３００は、誤りの生じたメモリセルをさらにリフレッシュする点において第５の実施の形態と異なる。
【０１６６】
図４０は、第６の実施の形態におけるリフレッシュ処理部３５０の一構成例を示すブロック図である。第６の実施の形態のリフレッシュ処理部３５０は、再書込み部３５７の代わりに再書込み部３５８を備える点において第５の実施の形態と異なる。また、第６の実施の形態のセレクタ３６１は、選択したデータを訂正データ反転部３６６に加えて、再書込み部３５８にも供給する。再書込み部３５８の構成は、第２の実施の形態と同様である。
【０１６７】
図４１は、第６の実施の形態におけるリフレッシュ処理の一例を示すフローチャートである。第４の実施の形態のリフレッシュ処理は、ステップＳ９６８、Ｓ９６９、ステップＳ９５３およびＳ９５４をさらに実行する点において第３の実施の形態と異なる。
【０１６８】
反転しない場合にのみ訂正に成功した場合には（ステップＳ９６５：Ｙｅｓ）、メモリコントローラ３００は、訂正したプレリードデータを不揮発性メモリ４００に供給する。そして、不揮発性メモリ４００は、セット処理（ステップＳ９５３）およびリセット処理（ステップＳ９５４）を実行する。
【０１６９】
一方、反転した場合にのみ訂正に成功した場合には（ステップＳ９６７：Ｙｅｓ）、メモリコントローラ３００は、訂正した反転リードデータを不揮発性メモリ４００に供給する。そして、不揮発性メモリ４００は、セット処理（ステップＳ９６８）およびリセット処理（ステップＳ９６９）を実行する。
【０１７０】
図４２は、第６の実施の形態におけるリフレッシュ処理により生成される訂正データの一例を示す図である。同図におけるａは、リフレッシュする物理アドレスから読み出されたプレリードデータの一例である。例えば、リフレッシュ処理部３５０は、第５の実施の形態と同様に４０ビットの受信語をプレリードデータとして読み出す。同図におけるｂは、プレリードデータの反転により生成された反転リードデータの一例である。同図におけるｃは、訂正されたプレリードデータの一例を示す図である。例えば、プレリードデータの訂正に成功し、反転リードデータの訂正には失敗した場合には、メモリコントローラ３００は、訂正したプレリードデータをライトデータとして不揮発性メモリ４００に供給する。
【０１７１】
図４２におけるｃは、訂正データの書込みの際にセットされるビットの位置を示す図である。同図のｃにおいて、「＊」は、セット処理が行われるビットの位置を示し、「−」は、セット処理が行われないビットの位置を示す。同図におけるｄは、訂正データの書込みの際にリセットされるビットの位置を示す図である。同図のｄにおいて、「＊」は、リセット処理が行われるビットの位置を示し、「−」は、リセット処理が行われないビットの位置を示す。
【０１７２】
図４３は、第６の実施の形態におけるリフレッシュ処理により生成されるライトデータの一例を示す図である。同図におけるａは、ライトデータの一例を示す図である。第５の実施の形態と同様に、訂正に成功したプレリードデータの反転により、４０ビットの符号語がライトデータとして生成される。
【０１７３】
図４３におけるｂは、ライトデータの書込みの際にセットされるビットの位置を示す図である。同図のｂにおいて、「＊」は、セット処理が行われるビットの位置を示し、「−」は、セット処理が行われないビットの位置を示す。同図におけるｃは、ライトデータの書込みの際にリセットされるビットの位置を示す図である。同図のｃにおいて、「＊」は、リセット処理が行われるビットの位置を示し、「−」は、リセット処理が行われないビットの位置を示す。同図におけるｄは、リフレッシュされるビットの位置を示す図である。同図のｄにおいて、「＊」は、リフレッシュされるビットの位置を示し、「−」は、リフレッシュされないビットの位置を示す。
【０１７４】
図４３におけるｅは、各ビットの書換え回数を示す図である。誤りが検出された、先頭から４ビット目と末尾から２ビット目のメモリセルには、訂正後の値が書き込まれた後に、その訂正した値をさらに反転した値が書き込まれるため、２回の書換えが行われる。それ以外のメモリセルは、１回の書換えが行われる。
【０１７５】
このように、本技術の第６の実施の形態によれば、メモリコントローラ３００は、ライトデータの書込み前に訂正データの書込みを行うため、誤りの無いメモリセルに加えて、誤りが検出されたメモリセルも書き換えることができる。これにより、誤りの発生頻度をさらに低減することができる。
【０１７６】
［変形例］
第６の実施の形態では、リードデータおよび反転リードデータのそれぞれからシンドロームＳおよびＳ’を計算していたが、シンドロームＳに簡易な演算を行うことによりシンドロームＳ’を計算することができる。これにより、計算量を少なくすることができる。変形例のメモリコントローラ３００は、シンドロームＳ’を簡易な演算により求める点において第６の実施の形態と異なる。
【０１７７】
図４４は、変形例におけるリフレッシュ処理部３５０の一構成例を示すブロック図である。変形例のリフレッシュ処理部３５０は、反転リードデータ誤り検出訂正部３６４および受信語反転部３６５の代わりに反転リードデータ誤り検出訂正部３６７を備える点において第６の実施の形態と異なる。また、変形例のリードデータ誤り検出訂正部３６３は、シンドロームＳを反転リードデータ誤り検出訂正部３６７に供給する。
【０１７８】
反転リードデータ誤り検出訂正部は、シンドロームＳからシンドロームＳ’を計算する。まず、シンドロームＳからＳ’を計算する方法について説明するため、フルレングスのＢＣＨ符号を用いた場合について考える。この場合、符号語ｃ＊、誤りパターンｅ＊、および、受信語ｒ＊は、次の各式により表される。
【数２】
2016063592.tif 000004
【数３】
2016063592.tif 000005
【数４】
2016063592.tif 000006
【０１７９】
上式の受信語ｒ＊に対するシンドロームＳ＊は、次の式により表される。
【数５】
2016063592.tif 000007
【０１８０】
ここで、短縮化符号は、フルレングス符号の一部であることと、フルレングス符号では符号語のビット反転がやはり符号語になることとから、次の関係式が導かれる。
【数６】
2016063592.tif 000008
【数７】
2016063592.tif 000009
【０１８１】
上式において、オーバーラインを付したｃ＊およびｒ＊は、ｃ＊およびｒ＊を反転したベクトルを表す。また、オーバーラインを付したｃおよびｒは、短縮化符号における符号語および受信語を反転したベクトルを表す。
【０１８２】
式１および式２から、次の式が導かれる。
【数８】
2016063592.tif 000010
【０１８３】
上式において、Ｈとオーバーバー付きのｒとの積は、反転リードデータに対応するシンドロームＳ’に等しい。したがって、上式から、シンドロームＳ’は、シンドロームＳに次の式で表される補正係数を加算したベクトルに該当することが導かれる。
【数９】
2016063592.tif 000011
【０１８４】
上式において、０番目からｎ−１番目までの「０」の部分は、符号語コーディネートを示し、ｎ番目からＮ−１番目までの「１」の部分は、短縮化されたコーディネートを示す。
【０１８５】
反転リードデータ誤り検出訂正部３６７は、シンドロームＳに式９の補正係数を加算してシンドロームＳ’を計算する。そして、反転リードデータ誤り検出訂正部３６７は、シンドロームＳ’からリードデータの誤りの位置を求め、その誤りを訂正する。反転リードデータ誤り検出訂正部３６７は、誤りを訂正したリードデータを反転して訂正反転データＤｒ’として出力する。
【０１８６】
このように変形例によれば、メモリコントローラ３００は、補正係数の加算という簡易な演算によりシンドロームＳからシンドロームＳ’を算出するため、計算量を少なくすることができる。
【０１８７】
なお、上述の実施の形態は本技術を具現化するための一例を示したものであり、実施の形態における事項と、特許請求の範囲における発明特定事項とはそれぞれ対応関係を有する。同様に、特許請求の範囲における発明特定事項と、これと同一名称を付した本技術の実施の形態における事項とはそれぞれ対応関係を有する。ただし、本技術は実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において実施の形態に種々の変形を施すことにより具現化することができる。
【０１８８】
また、上述の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。この記録媒体として、例えば、ＣＤ（Compact Disc）、ＭＤ（MiniDisc）、ＤＶＤ（Digital Versatile Disc）、メモリカード、ブルーレイディスク（Blu-ray（登録商標）Disc）等を用いることができる。
【０１８９】
なお、ここに記載された効果は必ずしも限定されるものではなく、本開示中に記載されたいずれかの効果であってもよい。
【０１９０】
なお、本技術は以下のような構成もとることができる。
（１）情報ビットと当該情報ビットが反転されているか否かを判定するための反転情報とを含むリードデータをメモリセルから読み出す読出し部と、
前記情報ビットの誤りの有無を検出して前記誤りを訂正する誤り検出訂正部と、
前記誤りが訂正された前記情報ビットと前記反転情報とを反転するデータ反転部と、
前記反転された前記情報ビットと前記反転された前記反転情報とを前記メモリセルに書き込む書込み部と
を具備するメモリコントローラ。
（２）前記リードデータを反転した反転リードデータの誤りの有無を検出して前記誤りを訂正する反転リードデータ誤り検出訂正部をさらに具備し、
前記反転情報は、前記誤りの有無を検出して訂正するための冗長ビットであり、
前記データ反転部は、前記リードデータの誤りの訂正にのみ成功した場合には前記誤りが訂正されたリードデータを反転してライトデータとして供給し、前記反転リードデータの誤りの訂正にのみ成功した場合には前記誤りが訂正された反転リードデータを反転して前記ライトデータとして供給し、
前記書込み部は、前記ライトデータを前記メモリセルに書き込む
前記（１）記載のメモリコントローラ。
（３）前記書込み部は、前記リードデータの誤りの訂正にのみ成功した場合には前記ライトデータを書き込む前に前記誤りが訂正されたリードデータを前記メモリセルに書き込み、前記反転リードデータの誤りの訂正にのみ成功した場合には前記ライトデータを書き込む前に前記誤りが訂正された反転リードデータをさらに書き込む
前記（２）記載のメモリコントローラ。
（４）前記反転情報は、前記情報ビットが反転されているか否かを示す反転ビットであり、
前記リードデータは、前記誤りを検出して訂正するための冗長ビットをさらに含み、
前記誤り検出訂正部は、前記冗長ビットを用いて前記誤りの有無を検出して訂正する
前記（１）記載のメモリコントローラ。
（５）前記反転された情報ビットと前記反転された反転ビットとの誤りを検出して訂正するための新たな冗長ビットを生成する再符号化部をさらに具備し、
前記誤り検出訂正部は、前記情報ビットおよび前記反転情報の誤りの有無を検出して前記誤りを訂正し、
前記誤りが訂正された前記情報ビットと前記誤りが訂正された反転情報とを反転し、
前記書込み部は、前記反転された前記情報ビットと前記反転された前記反転情報と前記新たな冗長ビットとを含む符号語をライトデータとして前記メモリセルに書き込む
前記（４）記載のメモリコントローラ。
（６）前記書込み部は、前記ライトデータを書き込む前に前記誤りが訂正された前記リードデータを前記メモリセルに書き込む
前記（５）記載のメモリコントローラ。
（７）前記反転された情報ビットの誤りを検出して訂正するための新たな冗長ビットを生成する再符号化部をさらに具備し、
前記書込み部は、前記反転された前記情報ビットおよび前記新たな冗長ビットを含む符号語と前記反転された前記反転情報とを含むデータをライトデータとして前記メモリセルに書き込む
前記（４）記載のメモリコントローラ。
（８）前記書込み部は、前記ライトデータを書き込む前に前記誤りが訂正された前記リードデータを前記メモリセルに書き込む
前記（７）記載のメモリコントローラ。
（９）メモリセルと、
情報ビットと当該情報ビットが反転されているか否かを判定するための反転情報とを含むリードデータを前記メモリセルから読み出す読出し部と、
前記情報ビットの誤りの有無を検出して前記誤りを訂正する誤り検出訂正部と、
前記誤りが訂正された前記情報ビットと前記反転情報とを反転するデータ反転部と、
前記反転された前記情報ビットと前記反転された前記反転情報とを前記メモリセルに書き込む書込み部と
を具備するメモリシステム。
（１０）読出し部が、情報ビットと当該情報ビットが反転されているか否かを判定するための反転情報とを含むリードデータをメモリセルから読み出す読出し手順と、
誤り検出訂正部が、前記情報ビットの誤りの有無を検出して前記誤りを訂正する誤り検出訂正手順と、
データ反転部が、前記誤りが訂正された前記情報ビットと前記反転情報とを反転するデータ反転手順と、
書込み部が、前記反転された前記情報ビットと前記反転された前記反転情報とを前記メモリセルに書き込む書込み手順と
を具備するメモリコントローラの制御方法。
【符号の説明】
【０１９１】
１００  ホストコンピュータ
２００  ストレージ
３００  メモリコントローラ
３０１  ホストインターフェース
３０２  ＲＡＭ
３０３  ＣＰＵ
３０４  ＥＣＣ処理部
３０５  ＲＯＭ
３０６、４５０  バス
３０７  メモリインターフェース
３１０  ライト処理部
３１１、３１６  反転判定部
３１２  ライト側情報ビット反転部
３１３、３１５  符号化部
３１４、３２３  論物アドレス変換部
３１７  符号語反転部
３１８、３３１、３６１  セレクタ
３２０  リード処理部
３２１、３６６  訂正データ反転部
３２２、３５４  誤り検出訂正部
３３２、３６２  訂正データ選択部
３３３、３６３  リードデータ誤り検出訂正部
３３４、３６４、３６７  反転リードデータ誤り検出訂正部
３３５、３６５  受信語反転部
３５０  リフレッシュ処理部
３５１  アクセス回数計数部
３５２  リフレッシュ判定部
３５３  プレリードデータ読出し部
３５５  訂正データ反転部
３５６  再符号化部
３５７、３５８  再書込み部
３５９  リード側情報ビット反転部
３６０  反転ビット反転部
４００  不揮発性メモリ
４１０  データバッファ
４２０  メモリセルアレイ
４３０  ドライバ
４４０  アドレスデコーダ
４６０  制御インターフェース
４７０  メモリ制御部
【図１】
2016063592.tif 000012
【図２】
2016063592.tif 000013
【図３】
2016063592.tif 000014
【図４】
2016063592.tif 000015
【図５】
2016063592.tif 000016
【図６】
2016063592.tif 000017
【図７】
2016063592.tif 000018
【図８】
2016063592.tif 000019
【図９】
2016063592.tif 000020
【図１０】
2016063592.tif 000021
【図１１】
2016063592.tif 000022
【図１２】
2016063592.tif 000023
【図１３】
2016063592.tif 000024
【図１４】
2016063592.tif 000025
【図１５】
2016063592.tif 000026
【図１６】
2016063592.tif 000027
【図１７】
2016063592.tif 000028
【図１８】
2016063592.tif 000029
【図１９】
2016063592.tif 000030
【図２０】
2016063592.tif 000031
【図２１】
2016063592.tif 000032
【図２２】
2016063592.tif 000033
【図２３】
2016063592.tif 000034
【図２４】
2016063592.tif 000035
【図２５】
2016063592.tif 000036
【図２６】
2016063592.tif 000037
【図２７】
2016063592.tif 000038
【図２８】
2016063592.tif 000039
【図２９】
2016063592.tif 000040
【図３０】
2016063592.tif 000041
【図３１】
2016063592.tif 000042
【図３２】
2016063592.tif 000043
【図３３】
2016063592.tif 000044
【図３４】
2016063592.tif 000045
【図３５】
2016063592.tif 000046
【図３６】
2016063592.tif 000047
【図３７】
2016063592.tif 000048
【図３８】
2016063592.tif 000049
【図３９】
2016063592.tif 000050
【図４０】
2016063592.tif 000051
【図４１】
2016063592.tif 000052
【図４２】
2016063592.tif 000053
【図４３】
2016063592.tif 000054
【図４４】
2016063592.tif 000055
【国際調査報告】
2016063592.tif 000056
2016063592.tif 000057
2016063592.tif 000058
2016063592.tif 000059