(57)【要約】【課題】データの誤りを正確に訂正する技術を提供する。【解決手段】符号語読出部が、消失位置の検出により誤り訂正能力が向上する複数の符号要素からなる符号語をリードデータとしてメモリアドレスから読み出すリード処理を実行し、リードデータを読み出したときから所定時間が経過したときに符号語を再リードデータとしてメモリアドレスから読み出す再リード処理を実行する。タイミング制御消失位置検出部が、リードデータおよび再リードデータにおいて符号要素ごとに値が一致するか否かを判断して値が一致しない符号要素の位置を符号語における消失位置として検出する。誤り訂正部が、消失位置が検出された符号語において消失位置に基づいて誤りを訂正する。【選択図】図５
2014093654.tif 000002
【特許請求の範囲】
【請求項１】
消失位置の検出により誤り訂正能力が向上する複数の符号要素からなる符号語をリードデータとしてメモリアドレスから読み出すリード処理を実行し、前記リードデータを読み出したときから所定時間が経過したときに前記符号語を再リードデータとして前記メモリアドレスから読み出す再リード処理を実行する符号語読出部と、
前記リードデータおよび前記再リードデータにおいて前記符号要素ごとに値が一致するか否かを判断して値が一致しない前記符号要素の位置を前記符号語における前記消失位置として検出するタイミング制御消失位置検出部と、
前記消失位置が検出された前記符号語において前記消失位置に基づいて誤りを訂正する誤り訂正部と
を具備する誤り検出訂正装置。
【請求項２】
前記誤り訂正部は、前記検出された消失位置の総数が前記誤り訂正能力に応じた所定数より多い場合には前記検出された消失位置のうち前記消失位置の総数と前記所定数との差分に該当する個数の位置を消失位置でないものとして誤りを訂正する
請求項１記載の誤り検出訂正装置。
【請求項３】
前記検出された消失位置の総数が前記所定数より多い場合には前記差分に該当する個数の前記消失位置において前記符号要素を特定の値のデータに置き換えて前記誤り訂正部に供給するデータ置換部をさらに具備し、
前記誤り訂正部は、前記特定の値のデータに置き換られた位置は前記消失位置でないものとして誤りを訂正する
請求項２記載の誤り検出訂正装置。
【請求項４】
前記特定の値は、２値のうちの一方の値の前記符号要素が他方の値に反転する確率と前記他方の値の前記符号要素が前記一方の値に反転する確率とに基づいて決定された値である
請求項３記載の誤り検出装置。
【請求項５】
前記メモリアドレスに保持された前記符号要素の値が２値のうちのいずれであるかを判断するための閾値を第１の値に制御して前記メモリアドレスから前記符号語を第１のデータとして読み出し、前記閾値を前記第１の値とは異なる第２の値に制御して前記メモリアドレスから前記符号語を第２のデータとして読み出す閾値制御読出部と、
前記第１および第２のデータにおいて前記符号要素ごとに値が一致するか否かを判断して値が一致しない前記符号要素の位置を前記符号語における前記消失位置として検出する閾値制御消失位置検出部と
をさらに具備し、
前記誤り訂正部は、前記タイミング制御消失位置検出部により前記消失位置が検出された前記符号語と前記閾値制御消失位置検出部により前記消失位置が検出された前記符号語との各々において誤りを訂正する
請求項１記載の誤り検出訂正装置。
【請求項６】
前記符号語読出部により前記リード処理が実行されると前記リードデータにおける誤りの有無を検出するリードデータ誤り検出部をさらに具備し、
前記符号語読出部は、前記リードデータ誤り検出部により前記誤りが検出されると前記再リード処理を実行する
請求項１記載の誤り検出訂正装置。
【請求項７】
温度を取得する温度取得部と、
前記リード処理が実行される前に前記温度に応じて前記所定時間の長さを決定する決定部と
をさらに具備し、
前記符号語読出部は、前記所定時間の長さが決定されると前記リード処理を実行する
請求項１記載の誤り検出訂正装置。
【請求項８】
複数の符号要素からなる符号語をリードデータとしてメモリアドレスから読み出すリード処理を実行し、前記リードデータを読み出したときから所定時間が経過したときに前記符号語を再リードデータとして前記メモリアドレスから読み出す再リード処理を実行する符号語読出部と、
前記リードデータと前記再リードデータとが不一致であるか否かを検出する不一致検出部と、
前記不一致であることが検出された場合には前記メモリアドレスをアクセスが禁止されるアドレスである不良アドレスとして登録する登録部と
具備する不一致検出装置。
【請求項９】
前記不一致検出部は、前記符号要素ごとに値が不一致であるか否かを判断し、
前記登録部は、前記不一致であると判断された前記符号要素の数が所定の閾値を超えた場合には前記メモリアドレスを前記不良アドレスとして登録する
請求項６記載の不一致検出装置。
【請求項１０】
長さの異なる複数の時間を候補時間として順に供給する供給部と、
複数の符号要素からなる符号語をリードデータとしてメモリアドレスから読み出すリード処理と前記リードデータを読み出したときから前記候補時間が経過したときに前記符号語を再リードデータとして前記メモリアドレスから読み出す再リード処理とのそれぞれを前記候補時間が設定されるたびに一定回数実行する符号語読出部と、
前記リード処理および前記再リード処理が実行されるたびに前記リードデータと前記再リードデータとが不一致であるか否かを検出する不一致検出部と、
前記複数の時間の各々について前記不一致であると検出された回数を計数する計数部と、
前記検出回数に基づいて前記複数の時間のうち前記不一致であると検出された頻度が最も高い時間を設定する設定部と
を具備する不一致検出装置。
【請求項１１】
消失位置の検出により誤り訂正能力が向上する複数の符号要素からなる符号語をメモリアドレスに記憶するメモリと、
前記符号語をリードデータとしてメモリアドレスから読み出すリード処理を実行し、前記リードデータを読み出したときから所定時間が経過したときに前記符号語を再リードデータとして前記メモリアドレスから読み出す再リード処理を実行する符号語読出部と、
前記リードデータおよび前記再リードデータにおいて前記符号要素ごとに値が一致するか否かを判断して値が一致しない前記符号要素の位置を前記符号語における前記消失位置として検出するタイミング制御消失位置検出部と、
前記消失位置が検出された前記符号語において前記消失位置に基づいて誤りを訂正する誤り訂正部と
を具備するメモリシステム。
【請求項１２】
符号語読出部が、消失位置の検出により誤り訂正能力が向上する複数の符号要素からなる符号語をリードデータとしてメモリアドレスから読み出すリード処理を実行し、前記リードデータを読み出したときから所定時間が経過したときに前記符号語を再リードデータとして前記メモリアドレスから読み出す再リード処理を実行する符号語読出手順と、
タイミング制御消失位置検出部が、前記リードデータおよび前記再リードデータにおいて前記符号要素ごとに値が一致するか否かを判断して値が一致しない前記符号要素の位置を前記符号語における前記消失位置として検出するタイミング制御消失位置検出手順と、
誤り訂正部が、前記消失位置が検出された前記符号語において前記消失位置に基づいて誤りを訂正する誤り訂正手順と
を具備する誤り検出訂正方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、誤り検出訂正装置、不一致検出装置、メモリシステムおよび誤り検出訂正方法に関する。詳しくは、不揮発性メモリから読み出したデータにおいて誤りを検出および訂正する誤り検出訂正装置、不一致検出装置、メモリシステムおよび誤り検出訂正方法に関する。
【背景技術】
【０００２】
近年の情報処理システムにおいては、補助記憶装置やストレージとして、不揮発性メモリ（ＮＶＭ：Non-Volatile memory）が用いられることがある。この不揮発性メモリの例としては、フラッシュメモリ、ＲｅＲＡＭ（Resistance RAM）、ＰＣＲＡＭ（Phase-Change RAM）、および、ＭＲＡＭ（Magnetoresistive RAM）などが挙げられる。これらの不揮発性メモリにおいては、記録したデータが熱雑音などのために破損して正しく読み出せないことがある。このため、データ記録装置は、記録する対象のデータから誤り検出訂正符号（ＥＣＣ：Error detection and Correction Code）を生成して不揮発性メモリに記録することが多い。データ記録装置は、データの再生時に、このＥＣＣに基づいてデータにおける誤りの検出および訂正を行うことができる。
【０００３】
この誤りの検出および訂正において、異なる閾値電圧を用いて複数回データを読み出して、これらのデータを比較することにより消失を検出し、検出した消失に基づいて誤りを訂正するシステムが提案されている（例えば、特許文献１参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願公開第２０１０／００７７２７９号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述の従来技術では、データの誤りを正確に訂正することができない場合がある。例えば、不揮発性メモリでは、記録されたデータの値が時間に応じて変動するノイズであるランダムテレグラフノイズが生じることがある。このランダムテレグラフノイズが生じた場合には同じ閾値電圧で読み出したデータが、読み出した時間により異なる値になるおそれがある。異なる閾値電圧で読み出したデータを比較する上述のシステムでは、このような誤りを検出することができない。このため、データの誤りが正確に訂正されないおそれがある。
【０００６】
本技術はこのような状況に鑑みて生み出されたものであり、データの誤りを正確に訂正する技術を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本技術は、上述の問題点を解消するためになされたものであり、その第１の側面は、消失位置の検出により誤り訂正能力が向上する複数の符号要素からなる符号語をリードデータとしてメモリアドレスから読み出すリード処理を実行し、上記リードデータを読み出したときから所定時間が経過したときに上記符号語を再リードデータとして上記メモリアドレスから読み出す再リード処理を実行する符号語読出部と、上記リードデータおよび上記再リードデータにおいて上記符号要素ごとに値が一致するか否かを判断して値が一致しない上記符号要素の位置を上記符号語における上記消失位置として検出するタイミング制御消失位置検出部と、上記消失位置が検出された上記符号語において上記消失位置に基づいて誤りを訂正する誤り訂正部とを具備する誤り検出訂正装置、および、当該装置における誤り検出訂正方法である。これにより、リードデータおよび再リードデータにおいて値が一致しない符号要素の位置が消失位置として検出され、その消失位置が検出された符号語において誤りが訂正されるという作用をもたらす。
【０００８】
また、この第１の側面において、上記誤り訂正部は、上記検出された消失位置の総数が上記誤り訂正能力に応じた所定数より多い場合には上記検出された消失位置のうち上記消失位置の総数と上記所定数との差分に該当する個数の位置を消失位置でないものとして誤りを訂正してもよい。これにより、検出された消失位置の総数が所定数より多い場合には検出された消失位置のうち消失位置の総数と所定数との差分に該当する個数の位置が消失位置でないものとして誤りが訂正されるという作用をもたらす。
【０００９】
また、この第１の側面において、上記検出された消失位置の総数が上記所定数より多い場合には上記差分に該当する個数の上記消失位置において上記符号要素を特定の値のデータに置き換えて上記誤り訂正部に供給するデータ置換部をさらに具備し、上記誤り訂正部は、上記特定の値のデータに置き換られた位置は上記消失位置でないものとして誤りを訂正してもよい。これにより、消失位置の総数と所定数との差分に該当する個数の消失位置において符号要素が特定の値のデータに置き換えられ、その位置は消失位置でないものとして誤り訂正が行われるという作用をもたらす。
【００１０】
また、この第１の側面において、上記特定の値は、２値のうちの一方の値の上記符号要素が他方の値に反転する確率と上記他方の値の上記符号要素が上記一方の値に反転する確率とに基づいて決定された値であってもよい。これにより、特定の値は、２値のうちの一方の値の符号要素が他方の値に反転する確率と他方の値の符号要素が一方の値に反転する確率とに基づいて決定されるという作用をもたらす。
【００１１】
また、この第１の側面において、上記メモリアドレスに保持された上記符号要素の値が２値のうちのいずれであるかを判断するための閾値を第１の値に制御して上記メモリアドレスから上記符号語を第１のデータとして読み出し、上記閾値を上記第１の値とは異なる第２の値に制御して上記メモリアドレスから上記符号語を第２のデータとして読み出す閾値制御読出部と、上記第１および第２のデータにおいて上記符号要素ごとに値が一致するか否かを判断して値が一致しない上記符号要素の位置を上記符号語における上記消失位置として検出する閾値制御消失位置検出部とをさらに具備し、上記誤り訂正部は、上記タイミング制御消失位置検出部により上記消失位置が検出された上記符号語と上記閾値制御消失位置検出部により上記消失位置が検出された上記符号語との各々において誤りを訂正してもよい。これにより、上記第１および第２のデータにおいて値が一致しない上記符号要素の位置が消失位置として検出されるという作用をもたらす。
【００１２】
また、この第１の側面において、上記符号語読出部により上記リード処理が実行されると上記リードデータにおける誤りの有無を検出するリードデータ誤り検出部をさらに具備し、上記符号語読出部は、上記リードデータ誤り検出部により上記誤りが検出されると上記再リード処理を実行してもよい。これにより、リード処理が実行されるとリードデータにおける誤りの有無が検出され、その誤りが検出されると再リード処理が実行されるという作用をもたらす。
【００１３】
また、この第１の側面において、温度を取得する温度取得部と、上記リード処理が実行される前に上記温度に応じて上記所定時間の長さを決定する決定部とをさらに具備し、上記符号語読出部は、上記所定時間の長さが決定されると上記リード処理を実行してもよい。これにより、上記温度に応じて所定時間の長さが決定されるとリード処理が実行されるという作用をもたらす。
【００１４】
また、本技術の第２の側面は、複数の符号要素からなる符号語をリードデータとしてメモリアドレスから読み出すリード処理を実行し、上記リードデータを読み出したときから所定時間が経過したときに上記符号語を再リードデータとして上記メモリアドレスから読み出す再リード処理を実行する符号語読出部と、上記リードデータと上記再リードデータとが不一致であるか否かを検出する不一致検出部と、上記不一致であることが検出された場合には上記メモリアドレスをアクセスが禁止されるアドレスである不良アドレスとして登録する登録部と具備する不一致検出装置である。これにより、リードデータと再リードデータとが不一致であることが検出された場合にはメモリアドレスが不良アドレスとして登録されるという作用をもたらす。
【００１５】
また、この第２の側面において、上記不一致検出部は、上記符号要素ごとに値が不一致であるか否かを判断し、上記登録部は、上記不一致であると判断された上記符号要素の数が所定の閾値を超えた場合には上記メモリアドレスを上記不良アドレスとして登録してもよい。これにより、不一致であると判断された符号要素の数が所定の閾値を超えた場合にメモリアドレスが不良アドレスとして登録されるという作用をもたらす。
【００１６】
また、本技術の第３の側面は、長さの異なる複数の時間を候補時間として順に供給する供給部と、複数の符号要素からなる符号語をリードデータとしてメモリアドレスから読み出すリード処理と上記リードデータを読み出したときから上記候補時間が経過したときに上記符号語を再リードデータとして上記メモリアドレスから読み出す再リード処理とのそれぞれを上記候補時間が設定されるたびに一定回数実行する符号語読出部と、上記リード処理および上記再リード処理が実行されるたびに上記リードデータと上記再リードデータとが不一致であるか否かを検出する不一致検出部と、上記複数の時間の各々について上記不一致であると検出された回数を計数する計数部と、上記検出回数に基づいて上記複数の時間のうち上記不一致であると検出された頻度が最も高い時間を設定する設定部とを具備する不一致検出装置である。これにより、不一致の検出頻度が最も高い時間が設定されるという作用をもたらす。
【００１７】
また、本技術の第４の側面は、消失位置の検出により誤り訂正能力が向上する複数の符号要素からなる符号語をメモリアドレスに記憶するメモリと、上記符号語をリードデータとしてメモリアドレスから読み出すリード処理を実行し、上記リードデータを読み出したときから所定時間が経過したときに上記符号語を再リードデータとして上記メモリアドレスから読み出す再リード処理を実行する符号語読出部と、上記リードデータおよび上記再リードデータにおいて上記符号要素ごとに値が一致するか否かを判断して値が一致しない上記符号要素の位置を上記符号語における上記消失位置として検出するタイミング制御消失位置検出部と、上記消失位置が検出された上記符号語において上記消失位置に基づいて誤りを訂正する誤り訂正部とを具備するメモリシステムである。これにより、リードデータおよび再リードデータにおいて値が一致しない符号要素の位置が消失位置として検出され、その消失位置が検出された符号語において誤りが訂正されるという作用をもたらす。
【発明の効果】
【００１８】
本技術によれば、データの誤りを正確に訂正することができるという優れた効果を奏し得る。
【図面の簡単な説明】
【００１９】
【図１】第１の実施の形態における情報処理システムの一構成例を示すブロック図である。
【図２】第１の実施の形態におけるメモリコントローラの具体的な構成例を示すブロック図である。
【図３】第１の実施の形態におけるメモリコントローラの機能構成例を示すブロック図である。
【図４】第１の実施の形態における符号語のデータ構成の一例を示す図である。
【図５】第１の実施の形態におけるリード処理部の一構成例を示すブロック図である。
【図６】第１の実施の形態におけるＢＣＨ符号の検査行列の一例を示す図である。
【図７】第１の実施の形態における誤り訂正部の一構成例を示すブロック図である。
【図８】第１の実施の形態におけるリードデータ、再リードデータおよび消失位置データの一例を示す図である。
【図９】第１の実施の形態におけるメモリコントローラの動作の一例を示すフローチャートである。
【図１０】第１の実施の形態におけるリード処理の一例を示すフローチャートである。
【図１１】第１の実施の形態の変形例におけるリード処理の一例を示すフローチャートである。
【図１２】第２の実施の形態におけるリード処理部の一構成例を示すブロック図である。
【図１３】第２の実施の形態におけるリードデータ、再リードデータ、一部を置換したリードデータおよび消失位置データの一例を示す図である。
【図１４】第２の実施の形態におけるリード処理の一例を示すフローチャートである。
【図１５】第３の実施の形態におけるリード処理部の一構成例を示すブロック図である。
【図１６】第３の実施の形態における可変抵抗素子の抵抗分布の一例を示す図である。
【図１７】第３の実施の形態における符号語リード部の一構成例を示すブロック図である。
【図１８】第３の実施の形態における消失位置検出部の一構成例を示す図である。
【図１９】第３の実施の形態におけるリード処理の一例を示すフローチャートである。
【図２０】第４の実施の形態におけるメモリコントローラの機能構成例を示すブロック図である。
【図２１】第４の実施の形態におけるメモリ検査部の一構成例を示すブロック図である。
【図２２】第４の実施の形態におけるメモリコントローラの動作の一例を示すフローチャートである。
【図２３】第４の実施の形態におけるメモリ検査処理の一例を示すフローチャートである。
【図２４】第５の実施の形態におけるメモリコントローラの機能構成例を示すブロック図である。
【図２５】第５の実施の形態におけるＲＴＮ（Random Telegraph Noise）サイクル決定部の一構成例を示すブロック図である。
【図２６】第５の実施の形態におけるＲＴＮサイクルごとの不一致数の計数結果を示すヒストグラムの一例である。
【図２７】第５の実施の形態におけるメモリコントローラの動作の一例を示すフローチャートである。
【図２８】第５の実施の形態におけるＲＴＮサイクル決定処理の一例を示すフローチャートである。
【図２９】第６の実施の形態におけるメモリコントローラの機能構成例を示すブロック図である。
【発明を実施するための形態】
【００２０】
以下、本技術を実施するための形態（以下、実施の形態と称する）について説明する。説明は以下の順序により行う。
１．第１の実施の形態（消失位置を検出して訂正する例）
２．第２の実施の形態（消失位置を検出し、データを置換して訂正する例）
３．第３の実施の形態（閾値を制御するとともに消失位置を検出して訂正する例）
４．第４の実施の形態（不一致を検出してアクセス制御する例）
５．第５の実施の形態（ＲＴＮサイクルを決定し、消失位置を検出して訂正する例）
６．第６の実施の形態（温度に応じてＲＴＮサイクルを決定し、消失位置を検出して訂正する例）
【００２１】
＜１．第１の実施の形態＞
［情報処理システムの構成例］
図１は、第１の実施の形態における情報処理システムの一構成例を示すブロック図である。この情報処理システムは、ホストシステム１００およびストレージシステム２００を備える。
【００２２】
ホストシステム１００は、情報処理システム全体を制御するものである。具体的には、ホストシステム１００は、コマンドおよびライトデータを生成してストレージシステム２００に信号線１０９を介して供給する。また、ホストシステム１００は、ストレージシステム２００からリードデータを受け取る。ここで、コマンドは、ストレージシステム２００を制御するためのものであり、例えば、ライトデータの書込みを指示するライトコマンドや、リードデータの読出しを指示するリードコマンドを含む。
【００２３】
ストレージシステム２００は、メモリコントローラ３００および不揮発性メモリ４００を備える。このメモリコントローラ３００は、不揮発性メモリ４００を制御するものである。メモリコントローラ３００は、ホストシステム１００からライトコマンドおよびライトデータを受け取った場合には、そのライトデータから誤り検出訂正符号（ＥＣＣ：Error detection and Correction Code）を生成する。具体的には、メモリコントローラ３００は、ライトデータを、ライトデータおよびパリティからなる符号語に変換（すなわち、符号化）する。メモリコントローラ３００は、不揮発性メモリ４００に信号線３０９を介してアクセスして符号化したデータを書き込む。
【００２４】
また、ホストシステム１００からリードコマンドを受け取った場合、メモリコントローラ３００は、不揮発性メモリ４００に信号線３０９を介してアクセスして符号化されたデータを読み出す。そして、メモリコントローラ３００は、符号化されたデータを、符号化前の元のデータに変換（すなわち、復号）する。また、メモリコントローラ３００は、ＥＣＣに基づいてデータにおける誤りの検出および訂正を行う。メモリコントローラ３００は、訂正したデータをホストシステム１００に供給する。なお、メモリコントローラ３００は、特許請求の範囲に記載の誤り検出訂正装置の一例である。
【００２５】
不揮発性メモリ４００は、メモリコントローラ３００の制御に従って、データを記憶するものである。例えば、ＲｅＲＡＭが不揮発性メモリ４００として用いられる。この不揮発性メモリ４００は、複数のメモリセルを備え、これらのメモリセルは、複数のブロックに分けられている。ここで、ブロックは、不揮発性メモリ４００のアクセス単位であり、セクタとも呼ばれる。ブロックのそれぞれにはメモリアドレスが割り当てられている。なお、ＲｅＲＡＭの代わりに、フラッシュメモリ、ＰＣＲＡＭ、および、ＭＲＡＭなどを不揮発性メモリ４００として用いてもよい。
【００２６】
［メモリコントローラの構成例］
図２は、第１の実施の形態におけるメモリコントローラ３００の一構成例を示すブロック図である。このメモリコントローラ３００は、ＲＡＭ（Random Access Memory）３０１、ＣＰＵ（Central Processing Unit）３０２、ＥＣＣ処理部３０３およびＲＯＭ（Read Only Memory）３０４を備える。また、メモリコントローラ３００は、ホストインターフェース３０５、バス３０６および不揮発性メモリインターフェース３０７を備える。
【００２７】
ＲＡＭ３０１は、ＣＰＵ３０２が実行する処理において必要となるデータを一時的に保持するものである。ＣＰＵ３０２は、メモリコントローラ３００全体を制御するものである。ＲＯＭ３０４は、ＣＰＵ３０２が実行するプログラム等を記憶するものである。ホストインターフェース３０５は、ホストシステム１００との間でデータやコマンドを相互に交換するものである。バス３０６は、ＲＡＭ３０１、ＣＰＵ３０２、ＥＣＣ処理部３０３、ＲＯＭ３０４、ホストインターフェース３０５および不揮発性メモリインターフェース３０７が相互にデータを交換するための共通の経路である。不揮発性メモリインターフェース３０７は、不揮発性メモリ４００との間でデータやコマンドを相互に交換するものである。
【００２８】
ＥＣＣ処理部３０３は、ライトデータを符号化し、また、リードデータを復号するものである。ライトデータの符号化においてＥＣＣ処理部３０３は、複数のライトデータの各々を符号化対象データとして、その符号化対象データにパリティを付加することにより所定の単位で符号化する。所定の単位で符号化された個々のデータを以下、「符号語」と称する。そして、ＥＣＣ処理部３０３は、符号化したライトデータを不揮発性メモリ４００にバス３０６を介して供給する。
【００２９】
また、ＥＣＣ処理部３０３は、符号化されたリードデータを元の符号化対象データに復号する。この復号において、ＥＣＣ処理部３０３は、パリティを使用して符号語の誤りを検出および訂正する。ＥＣＣ処理部３０３は、復号した符号化対象データをホストシステム１００にバス３０６を介して供給する。
【００３０】
図３は、第１の実施の形態におけるメモリコントローラ３００の機能構成例を示すブロック図である。このメモリコントローラ３００は、ライト処理部３１０およびリード処理部３２０を備える。図３におけるライト処理部３１０は、図２におけるＲＡＭ３０１、ＣＰＵ３０２、ＥＣＣ処理部３０３、ＲＯＭ３０４、ホストインターフェース３０５、バス３０６および不揮発性メモリインターフェース３０７などにより実現される。リード処理部３２０についても同様である。
【００３１】
ライト処理部３１０は、ライトコマンドに従って、ライトデータを不揮発性メモリ４００に書き込む処理を実行するものである。ライト処理部３１０は、ホストシステム１００からライトコマンドおよびライトデータを受け取った場合には、そのライトデータを符号化対象データとして、その符号化対象データを符号語に符号化する。符号化において符号化対象データは、例えば、αｉを根とする２元のＢＣＨ符号に符号化される。ここでｉは１乃至２ｔの整数であり、ｔは整数である。また、αは、ガロア体ＧＦ（２ｍ）の元である。２元のＢＣＨ符号では、αｉの各々は、「１」または「０」の値をとる。ＢＣＨ符号への符号化においては、例えば、次の式１による生成多項式が用いられる。
【数１】
2014093654.tif 000003
式１において、ＬＣＭ［］は、［］内の各々の多項式の最小公倍多項式を表わす。また、Ｍｉ（ｘ）は、αｉのガロア体ＧＦ（２ｍ）上の最小多項式である。
【００３２】
ライト処理部３１０は、符号化対象データから符号多項式を生成し、その符号多項式を式１に例示した生成多項式により割った剰余を求める。この符号多項式は、符号化対象データの各々のビットの値を係数とする多項式である。ライト処理部３１０は、求めた剰余の係数の各々からなるデータをパリティとして生成し、符号化対象データおよびパリティからなるデータを符号語として不揮発性メモリ４００に出力する。
【００３３】
なお、ライト処理部３１０は、生成多項式を使用した多項式演算でなく、行列演算によって符号化を行ってもよい。また、ライト処理部３１０は、ライトデータを２元のＢＣＨ符号に符号化しているが、誤り訂正能力を持つ符号であれば、ＢＣＨ符号以外の符号に符号化してもよい。ライト処理部３１０は、例えば、ＲＳ（Reed-Solomon）符号や畳込み符号に符号化してもよい。また、ライト処理部３１０は、２元より高い次元の符号に符号化してもよい。
【００３４】
リード処理部３２０は、リードコマンドに従って、リードデータを不揮発性メモリ４００から読み出す処理を実行するものである。リード処理部３２０は、ホストシステム１００からリードコマンドを受け取ると、そのコマンドにより指定されたメモリアドレスから符号語をリードデータとして読み出す。リード処理部３２０は、リードデータを元の符号化対象データに復号する。復号においてリード処理部３２０は、リードデータに含まれるパリティを使用して、リードデータにおける誤りを訂正する。誤り訂正方法の詳細については後述する。リード処理部３２０は、復号した符号化対象データをホストシステム１００へ出力する。
【００３５】
図４は、第１の実施の形態における符号語のデータ構成の一例を示す図である。図４に示すように、ライト処理部３１０は、ｋビットの符号化対象データの各々をｎビットの符号語に符号化する。ここで、ｋは整数であり、ｎは、ｋより大きな整数である。それぞれの符号語は、ｋビットの符号化対象データと、ｎ−ｋビットのパリティとを含む。このように、符号語が、符号化対象データをそのまま含み、符号化対象データとパリティとに符号語を容易に分離することができる符号は、組織符号と呼ばれる。なお、符号は非組織符号であってもよい。
【００３６】
［リード処理部の構成例］
図５は、第１の実施の形態におけるリード処理部３２０の一構成例を示すブロック図である。このリード処理部３２０は、リードコマンドバッファ３２１、ＲＴＮサイクルカウンタ３２２、符号語リード部３２３、リードデータバッファ３２４、誤り訂正部３２５および消失位置検出部３２８を備える。
【００３７】
リードコマンドバッファ３２１は、ホストシステム１００から受け取ったリードコマンドを保持するものである。
【００３８】
ＲＴＮサイクルカウンタ３２２は、ＲＴＮサイクルを計数するものである。このＲＴＮサイクルは、ランダムテレグラフノイズによりデータの値が変動する周期である。ＲＴＮサイクルの値には、例えば、不揮発性メモリ４００と同じ種類の他のメモリにおいて、ＲＴＮによる不一致の検出頻度が最も高くなるサイクルが設定される。
【００３９】
符号語リード部３２３は、符号語の単位でデータを不揮発性メモリ４００から読み出すものである。この符号語リード部３２３は、リードコマンドをリードコマンドバッファ３２１から取得して不揮発性メモリ４００に出力することにより符号語をメモリアドレスからリードデータＲＤとして読み出す。また、符号語リード部３２３は、リードコマンドの送信とともに、ＲＴＮサイクルカウンタ３２２に計数を開始させる。
【００４０】
そして、符号語リード部３２３は、誤り訂正部３２５から、読み出したリードデータについての誤り訂正の結果を受け取る。訂正が成功であった場合に符号語リード部３２３は、ＲＴＮサイクルカウンタ３２２の計数値を初期値にする。一方、訂正が失敗であった場合に符号語リード部３２３は、ＲＴＮサイクルカウンタの計数値を参照し、リードコマンドの出力時からＲＴＮサイクルが経過したか否かを判断する。ＲＴＮサイクルが経過したのであれば、符号語リード部３２３は、リードコマンドをリードコマンドバッファ３２１から取得して不揮発性メモリ４００に出力することにより符号語をメモリアドレスから再リードデータｒＲＤとして読み出す。なお、符号語リード部３２３は、特許請求の範囲に記載の符号語読出部の一例である。
【００４１】
リードデータバッファ３２４は、不揮発性メモリ４００から読み出されたリードデータＲＤおよび再リードデータｒＲＤを保持するものである。
【００４２】
誤り訂正部３２５は、リードデータＲＤにおける誤りを訂正するものである。誤り訂正部３２５は、リードデータＲＤがリードデータバッファ３２４に読み出されると、そのリードデータＲＤに含まれるパリティを使用して、リードデータＲＤの誤りを検出および訂正する。誤り訂正部３２５は、訂正が成功したか否かを示す訂正結果を符号語リード部３２３および消失位置検出部３２８に供給する。
【００４３】
そして、リードデータＲＤの誤り訂正に成功したのであれば、誤り訂正部３２５は、訂正後のリードデータからパリティを除いたデータＲＤ'をホストシステム１００に出力する。一方、訂正に失敗したのであれば、誤り訂正部３２５は、消失位置検出部３２８から消失位置データを受け取る。この消失位置データは、リードデータＲＤにおいてデータが消失した位置である消失位置を示すものである。例えば、リードデータＲＤと同じサイズのデータであって、消失位置のビットの値を「１」に、消失位置に該当しない位置のビットの値を「０」に設定したデータが消失位置データとして生成される。
【００４４】
消失位置データを受け取ると、誤り訂正部３２５は、消失位置データの示す消失位置に基づいて消失訂正を実行する。ここで、消失訂正は、消失位置においてデータが消失したものとして、その消失位置のデータの値を求める訂正処理であり、消失位置が検出されていることを前提として実行される。誤り訂正部３２５は、消失訂正したリードデータからパリティを除いたデータＲＤ'をホストシステム１００に出力する。
【００４５】
この消失訂正における誤り訂正能力は、消失位置が不明であるときにおける誤り訂正能力より高く、２倍程度となる。ここで、誤り訂正能力は、符号語当たりの訂正可能な符号要素（例えば、ビット）の個数である。この符号要素は、符号語を構成する最小単位であり、シンボルとも呼ばれる。
【００４６】
この誤り訂正能力は、符号の最小ハミング距離ｄminにより決定される。符合の最小ハミング距離ｄminは、その符号に属する任意の異なる符号語間のハミング距離の最小値である。２ｔ＋１≦ｄminを満たすｔ（ｔは整数）の最大値をｔmaxとすると、消失位置が不明である場合にはｔmax個までの符号要素を訂正することができる。この規則は、限界距離復号則と呼ばれる。
【００４７】
一方、消失位置が検出されている消失訂正においては、消失位置の個数をｈとし、位置が不明である誤りの数をｔ個とすると、２ｔ＋ｈ＋１≦ｄminが成立する限り、両方を訂正することができる。言い換えれば、ｔ＝０とすると、ｈ＋１≦ｄminを満たすｈ（ｈは整数）の最大値であるｈmax個までの符号要素を訂正することができる。ｈmaxは、ｔmaxより大きいことから、消失位置が検出されているときの方が、消失位置が検出されていないときよりも、符号語の誤り訂正能力が高くなる。
【００４８】
消失位置検出部３２８は、符号語における消失位置を検出するものである。消失位置検出部３２８は、リードデータＲＤの訂正に失敗したことを示す訂正結果を受け取ると、リードデータバッファ３２４からリードデータＲＤおよび再リードデータｒＲＤを取得する。前述したように、再リードデータｒＲＤは、リードデータＲＤが読み出されたときからＲＴＮサイクルが経過したときに読み出されたデータであるから、ＲＴＮサイクル内にランダムテレグラフノイズが生じた場合には異なる値となりうる。このため、消失位置検出部３２８は、リードデータＲＤおよび再リードデータｒＲＤにおいてビットごとに値が一致するか否かを判断することにより、どのビット位置でデータが消失しているかを検出することができる。消失位置検出部３２８は、検出した消失位置を示す消失位置データを誤り訂正部３２５に供給する。
【００４９】
なお、消失位置の検出と誤りの訂正とをメモリコントローラ３００が行う構成としているが、これらの処理を不揮発性メモリ４００が実行する構成としてもよい。
【００５０】
図６は、第１の実施の形態におけるＢＣＨ符号の検査行列の一例を示す図である。検査行列は、符号の誤りを検出するために用いられる行列である。ＢＣＨ符号においては、図６に例示するような検査行列を符号語に乗算することにより、その符号語の誤りが検出される。
【００５１】
［誤り訂正部の構成例］
図７は、第１の実施の形態における誤り訂正部３２５の一構成例を示すブロック図である。この誤り訂正部３２５は、リードデータ誤り検出訂正部３２６および消失訂正部３２７を備える。
【００５２】
リードデータ誤り検出訂正部３２６は、リードデータＲＤにおける誤りを検出および訂正するものである。ＢＣＨ符号において誤りを訂正する場合、リードデータ誤り検出訂正部３２６は、符号語（リードデータＲＤ）に含まれるパリティを使用して、その符号語における誤りの位置を検出する。具体的には、リードデータ誤り検出訂正部３２６は、符号語と図６に例示した検査行列とからシンドロームを求める。ここで、シンドロームは、受信した符号語に検査行列を乗じることにより得られるベクトルであり、誤りの位置を求めるために用いられる。
【００５３】
シンドロームを求める上述の行列演算は、次の式２により表わすこともできる。
【数２】
2014093654.tif 000004
式２において、Ｙ（ｘ）は、リードデータを構成するビットの各々の値を係数とする受信多項式である。また、Ｓｉは、シンドロームである。
【００５４】
シンドロームＳｉが全て「０」である場合、リードデータ誤り検出訂正部３２６は、リードデータに誤りがないと判断する。この場合、リードデータ誤り検出訂正部３２６は、リードデータＲＤからパリティを除いたデータＲＤ'をホストシステム１００に供給する。
【００５５】
一方、シンドロームＳｉのいずれかが「０」でない場合には、リードデータ誤り検出訂正部３２６は、リードデータに誤りがあると判断する。この場合、リードデータ誤り検出訂正部３２６は、その誤りの位置を求めるために、次の式３および式４を生成する。
【数３】
2014093654.tif 000005
【数４】
2014093654.tif 000006
式３および式４において、ｊ１乃至ｊＬは、誤りの位置である。これらの誤りの位置の個数、すなわち誤りの個数が、誤り訂正能力ｔ以下であれば、誤り訂正が成功する。また、式４において、Πｘは、ｘの総乗を意味し、ｅｉは、誤りの位置における符号要素の値である。
【００５６】
式４におけるσ（ｚ）の根を求めることにより誤りの位置を求めることができるため、このσ（ｚ）は、誤り位置多項式と呼ばれる。また、式５におけるω（ｚ）から誤りの位置における値を求めることができるため、ω（ｚ）は、誤り評価多項式と呼ばれる。
【００５７】
リードデータ誤り検出訂正部３２６は、生成した式３および４から次の式５を生成する。
【数５】
2014093654.tif 000007
式５においてＡｍｏｄＢは、ＡをＢで割った剰余を意味する。また、Ｓ（ｚ）は、シンドロームＳｉの各々を係数とする多項式である。
【００５８】
リードデータ誤り検出訂正部３２６は、生成した式５と、次の式６乃至式８を満たすσ（ｚ）およびω（ｚ）を求める。式５乃至式８を満たすσ（ｚ）およびω（ｚ）は、ピーターソン法やユークリッド法などにより求められる。
【数６】
2014093654.tif 000008
【数７】
2014093654.tif 000009
【数８】
2014093654.tif 000010
式７において、ｄｅｇＦ（ｚ）は、多項式Ｆ（ｚ）の最大の次数を示す。
【００５９】
式５乃至式８を満たすσ（ｚ）およびω（ｚ）が存在しない場合には、誤り訂正能力を越える数の誤りがあるために誤り訂正が失敗したと判断される。リードデータ誤り検出訂正部３２６は、訂正が失敗したことを示す訂正結果を消失位置検出部３２８に供給する。
【００６０】
一方、式５乃至式８を満たすσ（ｚ）およびω（ｚ）が存在する場合、リードデータ誤り検出訂正部３２６は、σ（ｚ）の根α-j1乃至α-jLを求める。リードデータ誤り検出訂正部３２６は、これらの根に対応するｊ１乃至ｊＬを誤りの位置として検出する。リードデータ誤り検出訂正部３２６は、検出した誤りの位置の各々のビットを反転することにより誤りを訂正する。リードデータ誤り検出訂正部３２６は、訂正したリードデータＲＤからパリティを除いたデータＲＤ'をホストシステム１００に供給する。
【００６１】
なお、２元より高い次元のＢＣＨ符号を使用する場合、誤りの位置に加え、その位置における符号要素（シンボル）の値ｅｉも求める必要がある。この場合、符号要素の値ｅｉは、例えば、次の式９および式１０により求められる。
【数９】
2014093654.tif 000011
【数１０】
2014093654.tif 000012
式９および式１０において、σ'（ｚ）は、σ（ｚ）の導関数である。
【００６２】
また、リードデータ誤り検出訂正部３２６は、誤りの有無の検出および訂正を行う構成としているが、訂正を行わずに誤りの有無の検出のみを行ってもよい。また、リードデータ誤り検出訂正部３２６は、特許請求の範囲に記載のリードデータ誤り検出部の一例である。
【００６３】
消失訂正部３２７は、消失位置データに基づいて、リードデータＲＤにおいて消失訂正を行うものである。消失訂正部３２７は、消失位置データを消失位置検出部３２８から受け取ると、リードデータバッファ３２４からリードデータＲＤを取得する。そして、消失訂正部３２７は、消失位置データの示す消失位置に基づいて、次の式１１および式１２を生成する。
【数１１】
2014093654.tif 000013
【数１２】
2014093654.tif 000014
式１１および式１２において、ｊ１'乃至ｊｈ'は消失位置である。
【００６４】
また、消失訂正部３２７は、式２を使用してリードデータＲＤからシンドロームを求める。消失訂正部３２７は、生成した式１１および式１２とシンドロームとから、式１３を生成する。
【数１３】
2014093654.tif 000015
【００６５】
ここで、位置が検出されていない誤りの個数をｔとし、消失した符号要素の個数をｈとし、最小ハミング距離をｄminとして、２ｔ＋ｈ＋１≦ｄminが成立する場合、式２１におけるσ（ｚ）はｔ以下の次数となる。このために、ｄｅｇσ（ｚ）≦ｔが成立する。消失訂正部３２７は、このｄｅｇσ（ｚ）≦ｔと、式７および式８と、式１３とを満たすσ（ｚ）およびΨ（ｚ）を求める。σ（ｚ）およびΨ（ｚ）は、ピーターソン法やユークリッド法などにより求められる。
【００６６】
条件を満たすσ（ｚ）およびΨ（ｚ）が存在する場合、消失訂正部３２７は、求めたσ（ｚ）およびΨ（ｚ）から、次の式１４を使用して消失位置ｊｉ'のビットの値ｅｉ'を求める。消失訂正部３２７は、リードデータＲＤにおいて消失位置ｊｉ'のビットの値を求めた値ｅｉ'に訂正する。
【数１４】
2014093654.tif 000016
式１４においてλ'（ｚ）は、λ（ｚ）の導関数である。
【００６７】
また、消失訂正部３２７は、σ（ｚ）の根α-j1乃至α-jLに対応するｊ１乃至ｊＬを誤りの位置として検出し、リードデータＲＤにおいて、これらの位置のビットを反転する。消失訂正部３２７は、訂正したリードデータＲＤからパリティを除いたデータＲＤ'をホストシステム１００に出力する。
【００６８】
条件を満たすσ（ｚ）およびΨ（ｚ）が存在しなかった場合、消失訂正部３２７は、誤り訂正能力を超える数の誤りが生じたために、誤り訂正は失敗したと判断する。この場合、消失訂正部３２７は、リードデータを正確に読み出すことができなかったことを通知するリードエラーをホストシステム１００に出力する。
【００６９】
なお、２元より高い次元のＢＣＨ符号を使用する場合、誤りの位置において符号要素（シンボル）の値をさらに求める必要がある。この場合、誤りの位置ｊｉの符号要素の値ｅｉは、例えば、次の式１５により求められる。
【数１５】
2014093654.tif 000017
【００７０】
図８は、第１の実施の形態におけるリードデータ、再リードデータおよび消失位置データの一例を示す図である。図８におけるａは、リードデータの一例であり、図８におけるｂは再リードデータの一例である。リードデータにおける０乃至３ビット目が「０１１０」であり、再リードデータにおける０乃至３ビット目が「０００１」であった場合について考える。
【００７１】
リードデータの誤り訂正が失敗した場合、消失位置検出部３２８は、リードデータおよび再リードデータにおいてビットごとに値が一致するか否かを判断し、値が一致しない位置を消失位置として検出する。図８におけるａおよびｂに示した例では、１乃至３ビット目の値が一致していないため、これらの位置が消失位置として検出される。
【００７２】
消失位置検出部３２８は、検出した消失位置を示す消失位置データを生成する。図８におけるｃは、消失位置データの一例である。消失位置データのデータサイズ（ｎビット）は、リードデータと同じサイズであり、一致した位置のビットは「０」に設定され、不一致のある位置（すなわち、消失位置）のビットは「１」に設定される。例えば、１乃至３ビット目のみが不一致である場合、１乃至３ビット目に「１」が設定され、他の位置に「０」が設定された消失位置データが生成される。なお、消失位置データのデータ構成は、図８に例示した構成に限定されない。
【００７３】
［メモリコントローラの動作例］
図９は、第１の実施の形態におけるメモリコントローラ３００の動作の一例を示すフローチャートである。この動作は、例えば、メモリコントローラ３００に電源が投入されたときに開始する。
【００７４】
メモリコントローラ３００は、ライトコマンドをホストシステム１００から受信したか否かを判断する（ステップＳ９３１）。ライトコマンドを受信したのであれば（ステップＳ９３１：Ｙｅｓ）、メモリコントローラ３００は、ライトデータを符号化して不揮発性メモリ４００に書き込む（ステップＳ９３２）。
【００７５】
ライトコマンドを受信していない場合（ステップＳ９３１：Ｎｏ）、または、ステップＳ９３２の後、メモリコントローラ３００は、リードコマンドを受信したか否かを判断する（ステップＳ９３３）。リードコマンドを受信したのであれば（ステップＳ９３３：Ｙｅｓ）、メモリコントローラ３００は、符号化されたリードデータを読み出すためのリード処理を実行する（ステップＳ９４０）。リードコマンドを受信していない場合（ステップＳ９３３：Ｎｏ）、または、ステップＳ９４０の後、メモリコントローラ３００は、ステップＳ９３１に戻る。
【００７６】
図１０は、第１の実施の形態におけるリード処理の一例を示すフローチャートである。メモリコントローラ３００は、リードコマンドにより指定されたメモリアドレスから符号語をリードデータとして読み出す（ステップＳ９４１）。メモリコントローラ３００は、そのリードデータにおいて誤りの検出および訂正を実行する（ステップＳ９４２）。メモリコントローラ３００は、誤り訂正が成功したか否かを判断する（ステップＳ９４３）。
【００７７】
誤り訂正が失敗した場合には（ステップＳ９４３：Ｎｏ）、メモリコントローラ３００は、リードデータを読み出したときからＲＴＮサイクルが経過したか否かを判断する（ステップＳ９４４）。ＲＴＮサイクルが経過していなければ（ステップＳ９４４：Ｎｏ）、メモリコントローラ３００はステップＳ９４４に戻る。一方、ＲＴＮサイクルが経過したのであれば（ステップＳ９４４：Ｙｅｓ）、メモリコントローラ３００は、同一のメモリアドレスから符号語を再リードデータとして読み出す（ステップＳ９４５）。
【００７８】
メモリコントローラ３００は、リードデータおよび再リードデータにおいてビット毎に値が一致しているか否かを判断することにより、消失位置を検出する（ステップＳ９４６）。そして、メモリコントローラ３００は、検出した消失位置に基づいてリードデータにおいて消失訂正を実行する（ステップＳ９４９）。メモリコントローラ３００は、消失訂正が成功したか否かを判断する（ステップＳ９５０）。
【００７９】
誤り訂正が成功した場合（ステップＳ９４３：Ｙｅｓ）、または、消失訂正が成功した場合（ステップＳ９５０：Ｙｅｓ）、メモリコントローラ３００は、訂正したリードデータをホストシステム１００に出力してリード処理を終了する（ステップＳ９５１）。一方、消失訂正が失敗した場合（ステップＳ９５０：Ｎｏ）、メモリコントローラ３００は、リードエラーをホストシステム１００に出力してリード処理を終了する（ステップＳ９５３）。
【００８０】
このように、第１の実施の形態によれば、メモリコントローラ３００は、リードデータの読出しからＲＴＮサイクルが経過したときに読み出した再リードデータとリードデータとから消失位置を検出して、符号語の誤りを訂正することができる。これにより、ＲＴＮサイクルが経過したときに生じたランダムテレグラフノイズによる誤りを検出および訂正することができる。また、消失位置の検出により符号の誤り訂正能力が向上するため、メモリコントローラ３００はデータをより正確に訂正することができる。なお、第１の実施の形態ではＲＴＮサイクルより誤り訂正時間が長いことを想定し、ステップＳ９４３で誤り訂正が失敗したことを確認した後にステップＳ９４４でＲＴＮサイクルのタイミングを待つという構成としている。しかし、誤り訂正時間がＲＴＮサイクルより短い場合には、誤り訂正処理中にＲＴＮサイクルのタイミングを持ち、再リードデータを予め読み出しておくという構成もあり得る。
【００８１】
［変形例］
第１の実施の形態では、メモリコントローラ３００は、最初の消失訂正に失敗するとホストシステム１００にリードエラーを出力していたが、消失訂正に失敗した場合に再度、消失訂正を実行してもよい。変形例のメモリコントローラ３００は、消失訂正に失敗した場合に再度、消失訂正を実行する点において第１の実施の形態と異なる。
【００８２】
図１１は、第１の実施の形態の変形例におけるリード処理の一例を示すフローチャートである。変形例のリード処理は、ステップＳ９５２をさらに実行する点において第１の実施の形態と異なる。
【００８３】
消失訂正に失敗した場合（ステップＳ９５０：Ｎｏ）を、メモリコントローラ３００は、消失訂正の実行回数が一定回数未満であるか否かを判断する（ステップＳ９５２）。
【００８４】
消失訂正の実行回数が一定回数未満である場合（ステップＳ９５２：Ｙｅｓ）、メモリコントローラ３００は、ステップＳ９４４に戻る。一方、消失訂正の実行回数が一定回数以上となった場合（ステップＳ９５２：Ｎｏ）、メモリコントローラ３００は、リードエラーをホストシステム１００に出力してリード処理を終了する（ステップＳ９５３）。
【００８５】
このように第１の実施の形態の変形例によれば、メモリコントローラ３００は、消失訂正に失敗してからＲＴＮサイクルが経過したときに再度、消失訂正を実行することができる。これにより、メモリコントローラ３００は、あるＲＴＮサイクルが経過したときに生じた不一致を検出および訂正することができない場合であっても、他のＲＴＮサイクルが経過したときに生じた不一致を検出および訂正することができる。なお、変形例においても、第１の実施の形態と同様に、誤り訂正時間がＲＴＮサイクルより短い場合には、誤り訂正処理中にＲＴＮサイクルのタイミングを持ち、再リードデータを予め読み出しておいてもよい。
【００８６】
＜２．第２の実施の形態＞
［リード処理部の構成例］
第１の実施の形態では、消失訂正において誤り訂正能力を超える不一致が生じた場合にはメモリコントローラ３００は消失訂正に失敗したと判断していた。しかし、メモリコントローラ３００は、誤り訂正能力を超える数の不一致が生じた場合に、誤り訂正能力と不一致のデータ数との差分に該当する個数の不一致のデータを特定の値のデータに置換し、誤り訂正能力の範囲内で消失訂正を行ってもよい。第２の実施の形態のメモリコントローラ３００は、誤り訂正能力と不一致のデータ数との差分に該当する個数の不一致のデータを特定の値のデータに置換して、誤り訂正能力の範囲内で消失訂正を行う点において第１の実施の形態と異なる。
【００８７】
図１２は、第２の実施の形態におけるリード処理部３２０の一例構成例を示すブロック図である。第２の実施の形態のリード処理部３２０は、データ置換部３２９をさらに備える点において第１の実施の形態と異なる。
【００８８】
データ置換部３２９は、誤り訂正能力を超える分の消失位置においてデータを特定の値のデータに置換するものである。データ置換部３２９は、消失位置検出部３２８から消失位置データおよびリードデータを受け取り、消失位置データの示す消失位置の個数ｈが誤り訂正能力を超えるか否かを判断する。具体的には、消失位置の個数が誤り訂正能力に応じたｄmin−１より多いか否かを判断する。ｄminは、符号の最小ハミング距離である。
【００８９】
ｈがｄmin−１より多い場合、データ置換部３２９は、リードデータにおいて、ｈとｄmin−１の差分であるｈ−（ｄmin−１）個の消失位置においてビットを特定の値（「０」または「１」）のビットに置換する。「１」および「０」のいずれの値に置換するかは、例えば、メモリセルにおいてデータが「０」から「１」へ反転する確率と、「１」から「０」へ反転する確率とを予め測定しておき、いずれの測定値が高いかにより決定される。あるいは、不揮発性メモリのデバイス特性により、「０」から「１」へ反転する確率と「１」から「０」へ反転する確率とに偏りがある場合には、確率の高い方の値に置換される。また、データ置換部３２９は、置換した位置には消失がないものとして消失位置データを修正し、一部を置換したリードデータとともに誤り訂正部３２５に供給する。これにより、消失位置の個数が誤り訂正能力以下となる。このため、消失位置の個数と誤りの数との合計が誤り訂正能力を超えなければ、誤り訂正部３２５は、リードデータの誤りを訂正することができる。
【００９０】
一方、ｈがｄmin−１以下である場合、消失訂正が可能であるため、データ置換部３２９は、リードデータをそのまま誤り訂正部３２５に供給する。
【００９１】
図１３は、第２の実施の形態におけるリードデータ、再リードデータ、一部を置換したリードデータおよび消失位置データの一例を示す図である。図１３におけるａは、リードデータの一例であり、図１３におけるｂは再リードデータの一例である。リードデータおよび再リードデータにおける１乃至３ビット目と、ｎ−１ビット目とが不一致であったものとする。ｎは、リードデータのデータサイズである。
【００９２】
この場合、消失位置検出部３２８は、４つの位置を消失位置として検出する。誤り訂正能力（ｄmin−１）が３ビットである場合、消失位置の個数が誤り訂正能力を超えるために消失訂正による訂正が不可能である。この場合、データ置換部３２９は、誤り訂正能力（３ビット）と消失位置の個数（４ビット）の差分に該当する個数の消失扱いとされる位置のビット（１ビット）を特定の値のビットに置換する。図１３におけるｃは、置換後のリードデータの一例である。リードデータにおいて、例えば、ｎ−１番目のビットが「０」の値のビットに置換される。
【００９３】
データ置換部３２９は、置換した位置には消失がないものとして消失位置データを修正する。図１３におけるｄは、修正後の消失位置データの一例である。消失位置データにおいて、例えば、置換したｎ−１番目のビットが「０」の値のビットに修正される。なお、リード処理部３２０は、消失位置の数が誤り訂正能力を超える場合にデータの置換を行う構成としているが、データの置換を行わずに、誤り訂正能力を超える分の消失位置を消失扱いにしない処理のみを行う構成としてもよい。この場合、リード処理部３２０にはデータ置換部３２９を設けず、消失位置検出部３２８が、消失位置データにおいてｈ−（ｄmin−１）個のビットを「０」に修正すればよい。
【００９４】
［メモリコントローラの動作例］
図１４は、第２の実施の形態におけるリード処理の一例を示すフローチャートである。第２の実施の形態のリード処理は、ステップＳ９４７およびＳ９４８をさらに実行する点において第１の実施の形態と異なる。
【００９５】
消失位置を検出した後（ステップＳ９４６）、メモリコントローラ３００は、消失位置の数ｈがｄmin−１を超えるか否かを判断する（ステップＳ９４７）。ｄmin−１を超える場合には（ステップＳ９４７：Ｙｅｓ）、メモリコントローラ３００は、リードデータにおいて、ｈ−（ｄmin−１）個の消失位置のデータを特定の値のデータに置換する。また、メモリコントローラ３００は、消失位置データにおいて、置換した位置に対応するビットを「０」に修正する（ステップＳ９４８）。ｈがｄmin−１以下である場合（ステップＳ９４７：Ｎｏ）、または、ステップＳ９４８の後、メモリコントローラ３００は、消失訂正を実行する（ステップＳ９４９）。
【００９６】
このように、第２の実施の形態によれば、メモリコントローラ３００は、検出された消失位置の数と誤り訂正可能な誤りの数との差分の個数の不一致のデータを特定の値のデータに置換する。また、メモリコントローラ３００は、置換した位置には消失がないものとして消失位置データを修正して、消失扱いとするビット数を誤り訂正能力以下にする。これにより、メモリコントローラ３００は、誤り訂正能力を超える数の消失位置が検出された場合であっても、誤り訂正能力の範囲内でリードデータの誤りを訂正することができる。
【００９７】
＜３．第３の実施の形態＞
［リード処理部の構成例］
第１の実施の形態では、メモリコントローラ３００は、メモリアドレスに保持されたビットの値が２値のうちのいずれであるかを判断するための閾値を制御しないでリードデータを読み出していた。しかし、メモリコントローラ３００は、閾値を制御してリードデータを読み出してもよい。異なる値に閾値を制御して読み出すことにより、ランダムテレグラフノイズ以外の要因による消失位置が検出される。第３の実施の形態のリード処理部３２０は、閾値を制御してリードデータを読み出す点において第１の実施の形態と異なる。
【００９８】
図１５は、第３の実施の形態におけるリード処理部３２０の一構成例を示すブロック図である。第３の実施の形態のリード処理部３２０は、符号語リード部３２３および消失位置検出部３２８の代わりに符号語リード部３３０および消失位置検出部３４０を備える点において第１の実施の形態と異なる。
【００９９】
符号語リード部３３０は、閾値を制御するための閾値制御信号をリードコマンドとともに不揮発性メモリ４００に出力する。
【０１００】
ここで、不揮発性メモリ４００がＲｅＲＡＭである場合、不揮発性メモリ４００は複数の可変抵抗素子を備え、閾値として抵抗値が用いられる。これらの可変抵抗素子は、高抵抗状態（ＨＲＳ：High Resistive State）と低抵抗状態（ＬＲＳ：Low Resistive State）との２状態で１ビットのデータを記録することができる。これらの可変抵抗素子に記録されたデータを読み出す場合に、可変抵抗素子の状態が２状態のいずれであるか、すなわち記録されているデータが２値のうちのいずれであるかを判断するために通常用いられる閾値を以下、「標準閾値」と称する。
【０１０１】
符号語リード部３３０は、リードコマンドをホストシステム１００から受け取ると、閾値制御信号により閾値を標準閾値に制御してメモリアドレスからリードデータを読み出す。そして、誤り訂正部３２５においてリードデータの訂正が失敗した場合には、符号語リード部３３０は、標準閾値より高抵抗側に設定した高抵抗閾値に閾値を制御して再リードデータを読み出す。また、符号語リード部３３０は、標準閾値より低抵抗側に設定した低抵抗閾値に閾値を制御して再リードデータを読み出す。以下、標準閾値により読み出されたリードデータを「標準閾値リードデータＲＤ_Ｎ」と称する。また、高抵抗閾値により読み出された再リードデータを「高抵抗閾値再リードデータｒＲＤ_Ｈ」と称し、低抵抗閾値により読み出された再リードデータを「低抵抗閾値再リードデータｒＲＤ_Ｌ」と称する。
【０１０２】
消失位置検出部３４０は、高抵抗閾値再リードデータｒＲＤ_Ｈおよび低抵抗閾値再リードデータｒＲＤ_Ｌにおいてビット毎に値が一致するか否かを判断して、値の一致しないビットの位置を消失位置として検出する。
【０１０３】
誤り訂正部３２５は、高抵抗閾値再リードデータｒＲＤ_Ｈおよび低抵抗閾値再リードデータｒＲＤ_Ｌから検出された消失位置に基づいて消失訂正を行う。誤り訂正部３２５が消失訂正に失敗した場合、符号語リード部３３０は、標準閾値リードデータＲＤ_Ｎを読み出したときからＲＴＮサイクルが経過したときに、標準閾値により再リードデータを読み出す。以下、標準閾値により読み出された再リードデータを「標準閾値再リードデータｒＲＤ_Ｎ」と称する。
【０１０４】
消失位置検出部３４０は、標準閾値リードデータＲＤ_Ｎおよび標準閾値再リードデータｒＲＤ_Ｎから消失位置を検出し、誤り訂正部３２５は、その消失位置に基づいて消失訂正を行う。
【０１０５】
なお、符号語リード部３３０は、高抵抗閾値再リードデータｒＲＤ_Ｈおよび低抵抗閾値再リードデータｒＲＤ_Ｌの読出しの次に、標準閾値再リードデータｒＲＤ_Ｎを読み出している。しかし、符号語リード部３３０は、標準閾値再リードデータｒＲＤ_Ｎの読出しの次に、高抵抗閾値再リードデータｒＲＤ_Ｈおよび低抵抗閾値再リードデータｒＲＤ_Ｌを読み出してもよい。
【０１０６】
図１６は、第３の実施の形態における可変抵抗素子の抵抗分布の一例を示す図である。横軸は、抵抗値Ｒを示しており、縦軸は、セルの数の相対的な分布を相対値により示している。この図が示すように可変抵抗素子の抵抗分布は、ＬＲＳおよびＨＲＳに分かれている。これら低抵抗状態と高抵抗状態とを分離するために通常、標準閾値が用いられる。
【０１０７】
可変抵抗素子の高抵抗状態および低抵抗状態をそれぞれ論理０値または論理１値の何れ
かに対応付けることにより、可変抵抗素子はメモリセルとして機能する。論理０値または論理１値の何れに対応付けるかは任意である。例えば、高抵抗状態が論理１値に対応付けられ、低抵抗状態が論理０値に対応付けられる。
【０１０８】
ここで、ＨＲＳにおいて抵抗値が比較的低い状態と、ＬＲＳにおいて抵抗値が比較的高い状態とは、データ保持特性が良くない。このため、高抵抗閾値と低抵抗閾値とでデータを読み出し、それらの値が異なる場合には、その可変抵抗素子のデータ保持特性が低下しており、その可変抵抗素子に記録されたデータが消失していると推定することができる。
【０１０９】
［符号語リード部の構成例］
図１７は、第３の実施の形態における符号語リード部３３０の一構成例を示すブロック図である。符号語リード部３３０は、送信タイミング制御部３３１および閾値制御部３３２を備える。
【０１１０】
送信タイミング制御部３３１は、リードコマンドの送信タイミングを制御するものである。また、閾値制御部３３２は、閾値制御信号により閾値を制御するものである。
【０１１１】
送信タイミング制御部３３１は、リードコマンドがリードコマンドバッファ３２１に保持されると、そのリードコマンドを不揮発性メモリ４００に出力する。一方、閾値制御部３３２は、標準閾値に制御するための閾値制御信号を不揮発性メモリ４００に出力する。これにより、標準閾値リードデータＲＤ_Ｎが読み出される。
【０１１２】
そして、送信タイミング制御部３３１は、訂正が失敗したことを示す訂正結果＃１を受け取ると、リードコマンドバッファ３２１からリードコマンドを取得して、そのリードコマンドを２回出力する。一方、閾値制御部３３２は、訂正が失敗したことを示す訂正結果＃１を受け取ると、高抵抗閾値に制御するための閾値制御信号と、低抵抗閾値に制御するための閾値制御信号とを順に出力する。これにより、高抵抗閾値再リードデータｒＲＤ_Ｈおよび低抵抗閾値再リードデータｒＲＤ_Ｌが読み出される。
【０１１３】
次いで、送信タイミング制御部３３１は、訂正が失敗したことを示す訂正結果＃２を受け取ると、標準閾値リードデータＲＤ_Ｎが送信されたときからＲＴＮサイクルが経過したときにリードコマンドを再度出力する。この訂正結果＃２は、訂正結果＃１の次に生成される訂正結果である。一方、閾値制御部３３２は、訂正が失敗したことを示す訂正結果＃２を受け取ると、標準閾値に制御するための閾値制御信号を出力する。これにより、標準閾値再リードデータｒＲＤ_Ｎが読み出される。
【０１１４】
［消失位置検出部の構成例］
図１８は、第３の実施の形態における消失位置検出部３４０の一構成例を示すブロック図である。消失位置検出部３４０は、閾値制御消失位置検出部３４１およびタイミング制御消失位置検出部３４２を備える。
【０１１５】
閾値制御消失位置検出部３４１は、高抵抗閾値再リードデータｒＲＤ_Ｈおよび低抵抗閾値再リードデータｒＲＤ_Ｌから消失位置を検出するものである。この閾値制御消失位置検出部３４１は、訂正が失敗したことを示す訂正結果＃１を受け取ると、高抵抗閾値再リードデータｒＲＤ_Ｈおよび低抵抗閾値再リードデータｒＲＤ_Ｌを取得する。閾値制御消失位置検出部３４１は、それらのデータから消失位置を検出して消失位置データ＃１を生成し、誤り訂正部３２５に供給する。
【０１１６】
タイミング制御消失位置検出部３４２は、標準閾値リードデータＲＤ_Ｎおよび標準閾値再リードデータｒＲＤ_Ｎから消失位置を検出するものである。このタイミング制御消失位置検出部３４２は、訂正が失敗したことを示す訂正結果＃２を受け取ると、標準閾値リードデータＲＤ_Ｎおよび標準閾値再リードデータｒＲＤ_Ｎを取得する。タイミング制御消失位置検出部３４２は、それらのデータから消失位置を検出して消失位置データ＃２を生成し、誤り訂正部３２５に供給する。
【０１１７】
［メモリコントローラの動作例］
図１９は、第３の実施の形態におけるリード処理の一例を示すフローチャートである。第３の実施の形態のリード処理は、ステップＳ９６１乃至Ｓ９６５をさらに実行する点において第１の実施の形態と異なる。
【０１１８】
１回目の誤り訂正に失敗した場合（ステップＳ９４３：Ｎｏ）、メモリコントローラ３００は、高抵抗閾値で再リードデータを読み出す（ステップＳ９６１）。また、メモリコントローラ３００は、低抵抗閾値で再リードデータを読み出す（ステップＳ９６２）。メモリコントローラ３００は、異なる閾値で読み出した２つの再リードデータから消失位置を検出する（ステップＳ９６３）。メモリコントローラ３００は、検出した消失位置に基づいて消失訂正を行う（ステップＳ９６４）。そして、メモリコントローラ３００は、消失訂正が成功したか否かを判断する（ステップＳ９６５）。消失訂正に成功した場合には（ステップＳ９６５：Ｙｅｓ）、メモリコントローラ３００は、訂正したリードデータをホストシステム１００に出力してリード処理を終了する。一方、消失訂正に失敗した場合には（ステップＳ９６５：Ｎｏ）、メモリコントローラ３００は、ステップＳ９４４を実行する。
【０１１９】
このように、第３の実施の形態によれば、メモリコントローラ３００は、異なる閾値で読み出した２つのデータから消失位置を検出して符号語の誤りを訂正することにより、ランダムテレグラフノイズ以外の要因による誤りを訂正することができる。
【０１２０】
＜４．第４の実施の形態＞
［メモリコントローラの構成例］
第１の実施の形態では、メモリコントローラ３００は、ＲＴＮによる不一致の有無の検出結果に関わりなく、不揮発性メモリ４００にアクセスしていた。しかし、メモリコントローラ３００は、不一致の有無の検出結果に応じて、そのメモリアドレスに対するアクセスを制御することもできる。第４の実施の形態のメモリコントローラ３００は、不一致の有無の検出結果に応じてメモリアドレスへのアクセスを制御する点において第１の実施の形態と異なる。
【０１２１】
図２０は、第４の実施の形態におけるメモリコントローラ３００の一構成例を示すブロック図である。第４の実施の形態のメモリコントローラ３００は、メモリ検査部３５０およびアクセス制御部３６０をさらに備える点において第１の実施の形態と異なる。
【０１２２】
メモリ検査部３５０は、不揮発性メモリ４００におけるメモリアドレスの各々について、ＲＴＮによる不一致が発生するか否かを検査するものである。メモリ検査部３５０は、例えば、メモリコントローラ３００の起動時に検査を行う。なお、メモリ検査部３５０は、工場出荷時や修理時などに検査を行ってもよいし、出荷されたメモリコントローラ３００の動作中において、ＲＴＮサイクルより長い一定の周期で検査を繰返し実行してもよい。
【０１２３】
検査において、メモリ検査部３５０は、検査対象のメモリアドレスからリードデータを読み出し、ＲＴＮサイクルの経過後に再リードデータを読み出す。メモリ検査部３５０は、リードデータおよび再リードデータが一致するか否かによりＲＴＮによる不一致の有無を検出する。メモリ検査部３５０は、全てのメモリアドレスについて、不一致の有無を検出し、不一致が検出されたメモリアドレスを不良アドレスとしてアクセス制御部３６０に信号線３５９を介して通知する。
【０１２４】
なお、メモリ検査部３５０は、全てのメモリアドレスについて検査を行っているが、一部のメモリアドレスについて検査を行う構成としてもよい。例えば、メモリ検査部３５０は、メモリアドレスごとにアクセス頻度を記録しておき、アクセス頻度が閾値より高いメモリアドレスについてのみ検査を行ってもよい。
【０１２５】
アクセス制御部３６０は、不良アドレスへのアクセスを制御するものである。例えば、アクセス制御部は、論理アドレスと物理アドレスとを対応付けたテーブルを保持し、そのテーブルに物理アドレスが不良アドレスであるか否かを示すフラグを登録しておく。ここで、論理アドレスは、ホストシステム１００が定義したアドレス空間におけるアドレスである。物理アドレスは、不揮発性メモリ４００の各々のブロックに割り当てられたメモリアドレスである。
【０１２６】
なお、メモリ検査部３５０およびアクセス制御部３６０をメモリコントローラ３００の内部に設ける構成としているが、これらをメモリコントローラ３００の外部に設けてもよい。また、アクセス制御部３６０は、特許請求の範囲に記載の登録部の一例である。また、メモリコントローラ３００は、特許請求の範囲に記載の不一致検出装置の一例である。
【０１２７】
第４の実施の形態のライト処理部３１０は、ホストシステム１００からライトコマンドを受け取った場合に、そのライトコマンドにより指定された論理アドレスに対し、不良アドレスに該当しない物理アドレスを割り当てる。
【０１２８】
また、第４の実施の形態のリード処理部３２０は、ホストシステム１００からリードコマンドを受け取った場合に、そのリードコマンドにより指定された論理アドレスに対応する物理アドレスが不良アドレスであるか否かを判断する。不良アドレスでない場合には、リード処理部３２０は、その物理アドレスからリードデータを読み出して誤りの検出および訂正を行う。一方、不良アドレスである場合にはリード処理部３２０は、リードエラーをホストシステム１００に出力する。
【０１２９】
なお、メモリ検査部３５０は、不一致が一度でも検出されたメモリアドレスを不良アドレスとしているが、メモリアドレスごとに複数回検査を行って、不一致の発生率が一定値を超えたときに、そのメモリアドレスが不良アドレスであると判断してもよい。また、メモリ検査部３５０は、誤り訂正能力を超える数の消失位置が検出されたメモリアドレスを不良アドレスとして登録することもできる。この場合、メモリ検査部３５０は、第１の実施の形態と同様に消失位置データを生成し、そのデータの示す消失位置の個数が誤り訂正能力を超えるか否かを判断すればよい。
【０１３０】
［メモリ検査部の構成例］
図２１は、第４の実施の形態におけるメモリ検査部３５０の一構成例を示すブロック図である。このメモリ検査部３５０は、リードコマンド発行部３５１、リードコマンドバッファ３５２、ＲＴＮサイクルカウンタ３５３、符号語リード部３５４、リードデータバッファ３５５、不一致検出部３５６および不良アドレス通知部３５７を備える。
【０１３１】
リードコマンド発行部３５１は、検査対象のメモリアドレスからデータを読み出すためのリードコマンドを発行するものである。このリードコマンド発行部３５１は、例えば、全てのメモリアドレスを検査対象とし、それらを指定するリードコマンドを順に発行して、リードコマンドバッファ３５２に保持させる。
【０１３２】
リードコマンドバッファ３５２、ＲＴＮサイクルカウンタ３５３およびリードデータバッファ３５５の構成は、第１の実施の形態におけるリードコマンドバッファ３２１、ＲＴＮサイクルカウンタ３２２およびリードデータバッファ３２４と同様である。
【０１３３】
符号語リード部３５４は、メモリアドレスごとに、リードデータおよび再リードデータを読み出すものである。この符号語リード部３５４は、リードコマンドバッファ３５２に保持されたリードコマンドのそれぞれを、ＲＴＮサイクルの間隔で２回ずつ不揮発性メモリ４００に出力する。これにより、メモリアドレスごとにリードデータおよび再リードデータが読み出される。
【０１３４】
不一致検出部３５６は、リードデータおよび再リードデータが一致するか否かによりＲＴＮによる不一致の有無を検出するものである。不一致検出部３５６は、メモリアドレスごとに、不一致の有無を検出して、それらの検出結果を不良アドレス通知部３５７に供給する。
【０１３５】
不良アドレス通知部３５７は、不一致が検出されたメモリアドレスを不良アドレスとしてアクセス制御部３６０に通知するものである。この不良アドレス通知部３５７は、不一致が検出されたリードデータに対応するリードコマンドをリードコマンドバッファ３５２から取得し、そのリードコマンドにより指定されたメモリアドレスを不良アドレスとしてアクセス制御部３６０に通知する。
【０１３６】
［メモリコントローラの動作例］
図２２は、第４の実施の形態におけるメモリコントローラの動作の一例を示すフローチャートである。第４の実施の形態のメモリコントローラ３００の動作は、ステップＳ９１０をさらに実行する点において第１の実施の形態と異なる。
【０１３７】
メモリコントローラ３００は、不揮発性メモリを検査するためのメモリ検査処理を最初に実行し（ステップＳ９１０）、その後にステップＳ９３１乃至Ｓ９３３およびＳ９４０を実行する。
【０１３８】
図２３は、第４の実施の形態におけるメモリ検査処理の一例を示すフローチャートである。メモリコントローラ３００は、検査対象のメモリアドレスのいずれかからリードデータを読み出す（ステップＳ９１１）。そして、メモリコントローラ３００は、リードデータを読み出したときからＲＴＮサイクルが経過したか否かを判断する（ステップＳ９１２）。ＲＴＮサイクルが経過していなければ（ステップＳ９１２：Ｎｏ）、メモリコントローラ３００はステップＳ９１２に戻る。一方、ＲＴＮサイクルが経過したのであれば（ステップＳ９１２：Ｙｅｓ）、メモリコントローラ３００は、再リードデータを読み出す（ステップＳ９１３）。
【０１３９】
メモリコントローラ３００は、リードデータおよび再リードデータが一致するか否かによりＲＴＮによる不一致の有無を検出する（ステップＳ９１４）。メモリコントローラ３００は、不一致が検出されたメモリアドレスを不良アドレスとして登録し、以後のアクセスを制限する（ステップＳ９１５）。メモリコントローラ３００は、全メモリアドレスを検査したか否かを判断する（ステップＳ９１６）。全メモリアドレスを検査していなければ（ステップＳ９１６：Ｎｏ）、メモリコントローラ３００は、ステップＳ９１１に戻る。一方、全メモリアドレスを検査したのであれば（ステップＳ９１６：Ｙｅｓ）、メモリコントローラ３００は、メモリ検査処理を終了する。
【０１４０】
このように、第４の実施の形態によれば、メモリコントローラ３００は、リードデータと再リードデータとからランダムテレグラフノイズによる不一致の有無を検出することができる。そして、メモリコントローラ３００は、不一致の生じたメモリアドレスを不良なアドレスとして登録することにより、そのアドレスへのアクセスを制限することができる。
【０１４１】
＜５．第５の実施の形態＞
［メモリコントローラの構成例］
第１の実施の形態では、予め設定されたＲＴＮサイクルの値に基づいてデータの誤りを訂正していた。しかし、不一致の検出頻度が最も高くなるサイクルは、不揮発性メモリ４００の製品ごとの特性のばらつきや温度条件などにより変動することもあるため、予め設定されたＲＴＮサイクルが、実際のＲＴＮサイクルの値と異なる場合もある。このため、メモリコントローラ３００自身が、制御対象の不揮発性メモリ４００におけるＲＴＮによる不一致の検出頻度を測定し、その測定値に応じてＲＴＮサイクルを設定することが望ましい。第５の実施の形態のメモリコントローラ３００は、制御対象の不揮発性メモリ４００のＲＴＮによる不一致の検出頻度を測定して、その測定値に応じてＲＴＮサイクルを設定する点において第１の実施の形態と異なる。
【０１４２】
図２４は、第５の実施の形態におけるメモリコントローラ３００の一構成例を示すブロック図である。第５の実施の形態のメモリコントローラ３００は、ＲＴＮサイクル設定部３７０をさらに備える点において第１の実施の形態と異なる。
【０１４３】
ＲＴＮサイクル設定部３７０は、ＲＴＮによる不一致の検出頻度に応じてＲＴＮサイクルを求め、そのＲＴＮサイクルをリード処理部３２０に設定するものである。ＲＴＮサイクル設定部３７０は、例えば、メモリコントローラ３００の起動時にＲＴＮサイクルを設定する。なお、ＲＴＮサイクル設定部３７０は、工場出荷時や修理時などにＲＴＮサイクルを設定してもよいし、出荷されたメモリコントローラ３００の動作中において、ＲＴＮサイクルを設定するための処理を、そのＲＴＮサイクルより長い一定の周期で実行してもよい。
【０１４４】
ＲＴＮサイクルの設定において、ＲＴＮサイクル設定部３７０は、所定の長さのサイクルを、ＲＴＮサイクルの候補である候補サイクルとして設定し、任意のメモリアドレスから符号語をリードデータとして読み出す。そして、ＲＴＮサイクル設定部３７０は、候補サイクルの経過後に同一のメモリアドレスから符号語を再リードデータとして読み出す。ＲＴＮサイクル設定部３７０は、それらのリードデータおよび再リードデータが一致するか否かによりＲＴＮによる不一致の有無を検出する。ＲＴＮサイクル設定部３７０は、この不一致の有無の検出処理を一定回数実行する。そして、ＲＴＮサイクル設定部３７０は、候補サイクルの長さを変更し、同様の手順で不一致の有無の検出を一定回数実行する。
【０１４５】
ＲＴＮサイクル設定部３７０は、複数の候補サイクルの中から、不一致の検出回数が最も多かったサイクルをＲＴＮサイクルとし、その値をリード処理部３２０に設定する。第５の実施の形態のリード処理部３２０は、ＲＴＮサイクル設定部３７０によりＲＴＮサイクルが設定されると、その値に基づいて再リードデータを読み出す。
【０１４６】
なお、ＲＴＮサイクル設定部３７０をメモリコントローラ３００の外部に設ける構成としているが、メモリコントローラ３００の外部に設けてもよい。また、ＲＴＮサイクル設定部３７０は、特許請求の範囲に記載の不一致検出装置の一例である。
【０１４７】
［ＲＴＮサイクル設定部の構成例］
図２５は、第５の実施の形態におけるＲＴＮサイクル設定部３７０の一構成例を示すブロック図である。このＲＴＮサイクル設定部３７０は、リードコマンド発行部３７１、リードコマンドバッファ３７２、候補サイクルカウンタ３７３、候補サイクル設定部３７４および符号語リード部３７５を備える。また、ＲＴＮサイクル設定部３７０は、リードデータバッファ３７６、不一致検出部３７７、不一致数計数部３７８およびＲＴＮサイクル設定回路３７９を備える。
【０１４８】
リードコマンド発行部３７１は、任意のメモリアドレスを指定するリードコマンドを発行するものである。リードコマンド発行部３７１は、発行したリードコマンドをリードコマンドバッファ３７２に保持させる。
【０１４９】
リードコマンドバッファ３７２およびリードデータバッファ３７６の構成は、第１の実施の形態におけるリードコマンドバッファ３２１およびリードデータバッファ３２４と同様である。
【０１５０】
候補サイクルカウンタ３７３は、候補サイクルを計数するものである。候補サイクル設定部３７４は、長さの異なる複数の時間のいずれかを候補サイクルとして設定するものである。候補サイクル設定部３７４は、設定した候補サイクルを符号語リード部３７５に供給する。
【０１５１】
符号語リード部３７５は、指定されたメモリアドレスからリードデータおよび再リードデータを読み出すものである。この符号語リード部３７５は、候補サイクルが設定されるたびに、その候補サイクルに基づいてリードデータおよび再リードデータを読み出す処理を一定回数実行する。
【０１５２】
不一致検出部３７７は、リードデータおよび再リードデータが読み出されるたびに、それらが一致するか否かによりＲＴＮによる不一致の有無を検出するものである。不一致検出部３７７は、不一致の検出結果を不一致数計数部３７８に供給する。
【０１５３】
不一致数計数部３７８は、候補サイクルごとに不一致の発生回数を計数するものである。不一致数計数部３７８は、計数した結果をＲＴＮサイクル設定回路３７９に供給する。
【０１５４】
ＲＴＮサイクル設定回路３７９は、複数の候補サイクルの中から、不一致の検出回数が最も多かったサイクルをＲＴＮサイクルとして設定するものである。ＲＴＮサイクル設定回路３７９は、設定したＲＴＮサイクルの値をリード処理部３２０におけるＲＴＮサイクルカウンタ３２２に供給する。
【０１５５】
なお、不一致検出部３７７は、リードデータおよび再リードデータにおいてビット単位で不一致を検出していないが、ビット単位で不一致を検出してもよい。この場合、不一致検出部３７７は、第１の実施の形態と同様に消失位置データを生成して、不一致数計数部３７８に供給する。そして、不一致数計数部３７８は、消失位置の数を１回当たりの不一致数として計数する。不一致の検出回数が複数回である場合、不一致数計数部３７８は、それぞれの検出における不一致数の総数を計数結果としてＲＴＮサイクル設定回路３７９に出力する。
【０１５６】
図２６は、第５の実施の形態におけるＲＴＮサイクルごとの不一致数の計数結果を示すヒストグラムの一例である。縦軸は不一致の検出回数を示し、横軸は、候補サイクルを示す。長さの異なるＴ１乃至Ｔ９のサイクルのうち、Ｔ４のサイクルにおける不一致の検出回数が最も多かったものとする。この場合、Ｔ４のサイクルがＲＴＮサイクルとして用いられる。
【０１５７】
［メモリコントローラの動作例］
図２７は、第５の実施の形態におけるメモリコントローラ３００の動作の一例を示すフローチャートである。第５の実施の形態のメモリコントローラ３００の動作はステップＳ９２０をさらに実行する点において第１の実施の形態と異なる。
【０１５８】
メモリコントローラ３００は、ＲＴＮサイクルを設定するためのＲＴＮサイクル設定処理を最初に実行し（ステップＳ９２０）、その後にステップＳ９３１乃至Ｓ９３３およびＳ９４０を実行する。
【０１５９】
図２８は、第５の実施の形態におけるＲＴＮサイクル設定処理の一例を示すフローチャートである。メモリコントローラ３００は、任意のメモリアドレスからリードデータを読み出す（ステップＳ９２１）。メモリコントローラ３００は、リードデータを読み出したときから候補サイクルが経過したか否かを判断する（ステップＳ９２２）。候補サイクルが経過していなければ（ステップＳ９２２：Ｎｏ）、メモリコントローラ３００は、ステップＳ９２２に戻る。候補サイクルが経過したのであれば（ステップＳ９２２：Ｙｅｓ）、メモリコントローラ３００は、メモリアドレスから再リードデータを読み出す（ステップＳ９２３）。メモリコントローラ３００は、リードデータおよび再リードデータが一致するか否かによりＲＴＮによる不一致の有無を検出する（ステップＳ９２４）。メモリコントローラ３００は、不一致が検出されたのであれば、その候補サイクルにおける不一致の検出回数をカウントアップする（ステップＳ９２５）。
【０１６０】
そして、メモリコントローラ３００は、候補サイクルにおけるリードデータおよび再リードデータの読出し回数が一定回数に達したか否かを判断する（ステップＳ９２６）。読出し回数が一定回数に達していなければ（ステップＳ９２６：Ｎｏ）、メモリコントローラ３００は、ステップＳ９２１に戻る。読出し回数が一定回数に達したのであれば（ステップＳ９２６：Ｙｅｓ）、メモリコントローラ３００は、候補サイクルを変更する（ステップＳ９２７）。
【０１６１】
メモリコントローラ３００は、長さの異なる複数の候補サイクルの全てにおいて不一致の検出回数の算出を行ったか否かを判断する（ステップＳ９２８）。全てのサイクルで不一致の検出回数を算出していなければ（ステップＳ９２８：Ｎｏ）、メモリコントローラ３００は、ステップＳ９２１に戻る。全てのサイクルで不一致の検出回数を算出したのであれば（ステップＳ９２８：Ｙｅｓ）、メモリコントローラ３００は、不一致の検出回数（検出頻度）が最も多い候補サイクルをＲＴＮサイクルとして設定する（ステップＳ９２９）。ステップＳ９２９の後、メモリコントローラ３００は、ＲＴＮサイクル設定処理を終了する。
【０１６２】
このように、第５の実施の形態によれば、メモリコントローラ３００は、制御対象の不揮発性メモリ４００のＲＴＮによる不一致の検出頻度を測定して、その測定値に応じてＲＴＮサイクルを設定することができる。これにより、メモリコントローラ３００は、データの誤りをより正確に訂正することができる。
【０１６３】
＜６．第６の実施の形態＞
［メモリコントローラの構成例］
第１の実施の形態では、メモリコントローラ３００は、一定のＲＴＮサイクルに基づいて消失位置を検出していた。しかし、ＲＴＮサイクルの長さは、温度に応じて変わる場合がある。第６の実施の形態のメモリコントローラ３００は温度に応じてＲＴＮサイクルの長さを変更する点において第１の実施の形態と異なる。
【０１６４】
図２９は、第６の実施の形態におけるメモリコントローラ３００の一構成例を示すブロック図である。第６の実施の形態のメモリコントローラ３００は、温度取得部３８０およびＲＴＮサイクル決定部３９０をさらに備える点において第１の実施の形態と異なる。
【０１６５】
温度取得部３８０は、不揮発性メモリ４００内の温度センサにより測定された温度を取得するものである。温度取得部３８０は、取得した温度をＲＴＮサイクル決定部３９０に供給する。
【０１６６】
ＲＴＮサイクル決定部３９０は、温度に応じてＲＴＮサイクルの長さを決定するものである。ＲＴＮサイクル決定部３９０は、例えば、ＲＴＮサイクルより長い一定の周期でＲＴＮサイクルの長さを決定する。
【０１６７】
一般に、温度が高いほど、不揮発性メモリ４００においてランダムテレグラフノイズ等の各種のノイズの発生率が増加するため、ＲＴＮサイクル決定部３９０は、温度が高いほど、ＲＴＮサイクルを短くする。ＲＴＮサイクル決定部３９０は、長さを決定したＲＴＮサイクルをリード処理部３２０に供給する。
【０１６８】
第６の実施の形態のリード処理部３２０は、ＲＴＮサイクル決定部３９０からＲＴＮサイクルの値を受け取り、その値に基づいて再リードデータを読み出す。
【０１６９】
なお、温度取得部３８０およびＲＴＮサイクル決定部３９０をメモリコントローラ３００の内部に設ける構成としているが、これらの一方または両方をメモリコントローラ３００の外部に設ける構成とすることもできる。
【０１７０】
このように、第６の実施の形態によれば、メモリコントローラ３００は、温度に応じてＲＴＮサイクルの長さを変更することができる。これにより、メモリコントローラ３００は、温度が変動した場合であっても、現在の温度に応じたＲＴＮサイクルによりデータを正確に訂正することができる。
【０１７１】
なお、上述の実施の形態は本技術を具現化するための一例を示したものであり、実施の形態における事項と、特許請求の範囲における発明特定事項とはそれぞれ対応関係を有する。同様に、特許請求の範囲における発明特定事項と、これと同一名称を付した本技術の実施の形態における事項とはそれぞれ対応関係を有する。ただし、本技術は実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において実施の形態に種々の変形を施すことにより具現化することができる。
【０１７２】
また、上述の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。この記録媒体として、例えば、ＣＤ（Compact Disc）、ＭＤ（MiniDisc）、ＤＶＤ（Digital Versatile Disk）、メモリカード、ブルーレイディスク（Blu-ray Disc（登録商標））等を用いることができる。
【０１７３】
なお、本技術は以下のような構成もとることができる。
（１）消失位置の検出により誤り訂正能力が向上する複数の符号要素からなる符号語をリードデータとしてメモリアドレスから読み出すリード処理を実行し、前記リードデータを読み出したときから所定時間が経過したときに前記符号語を再リードデータとして前記メモリアドレスから読み出す再リード処理を実行する符号語読出部と、
前記リードデータおよび前記再リードデータにおいて前記符号要素ごとに値が一致するか否かを判断して値が一致しない前記符号要素の位置を前記符号語における前記消失位置として検出するタイミング制御消失位置検出部と、
前記消失位置が検出された前記符号語において前記消失位置に基づいて誤りを訂正する誤り訂正部と
を具備する誤り検出訂正装置。
（２）前記誤り訂正部は、前記検出された消失位置の総数が前記誤り訂正能力に応じた所定数より多い場合には前記検出された消失位置のうち前記消失位置の総数と前記所定数との差分に該当する個数の位置を消失位置でないものとして誤りを訂正する
前記（１）記載の誤り検出訂正装置。
（３）前記検出された消失位置の総数が前記所定数より多い場合には前記差分に該当する個数の前記消失位置において前記符号要素を特定の値のデータに置き換えて前記誤り訂正部に供給するデータ置換部をさらに具備し、
前記誤り訂正部は、前記特定の値のデータに置き換られた位置は前記消失位置でないものとして誤りを訂正する
前記（２）記載の誤り検出訂正装置。
（４）前記特定の値は、２値のうちの一方の値の前記符号要素が他方の値に反転する確率と前記他方の値の前記符号要素が前記一方の値に反転する確率とに基づいて決定された値である
前記（３）記載の誤り検出装置。
（５）前記メモリアドレスに保持された前記符号要素の値が２値のうちのいずれであるかを判断するための閾値を第１の値に制御して前記メモリアドレスから前記符号語を第１のデータとして読み出し、前記閾値を前記第１の値とは異なる第２の値に制御して前記メモリアドレスから前記符号語を第２のデータとして読み出す閾値制御読出部と、
前記第１および第２のデータにおいて前記符号要素ごとに値が一致するか否かを判断して値が一致しない前記符号要素の位置を前記符号語における前記消失位置として検出する閾値制御消失位置検出部と
をさらに具備し、
前記誤り訂正部は、前記タイミング制御消失位置検出部により前記消失位置が検出された前記符号語と前記閾値制御消失位置検出部により前記消失位置が検出された前記符号語との各々において誤りを訂正する
前記（１）乃至（４）のいずれかに記載の誤り検出訂正装置。
（６）前記符号語読出部により前記リード処理が実行されると前記リードデータにおける誤りの有無を検出するリードデータ誤り検出部をさらに具備し、
前記符号語読出部は、前記リードデータ誤り検出部により前記誤りが検出されると前記再リード処理を実行する
前記（１）乃至（５）のいずれかに記載の誤り検出訂正装置。
（７）温度を取得する温度取得部と、
前記リード処理が実行される前に前記温度に応じて前記所定時間の長さを決定する決定部と
をさらに具備し、
前記符号語読出部は、前記所定時間の長さが決定されると前記リード処理を実行する
前記（１）乃至（６）のいずれかに記載の誤り検出訂正装置。
（８）  複数の符号要素からなる符号語をリードデータとしてメモリアドレスから読み出すリード処理を実行し、前記リードデータを読み出したときから所定時間が経過したときに前記符号語を再リードデータとして前記メモリアドレスから読み出す再リード処理を実行する符号語読出部と、
前記リードデータと前記再リードデータとが不一致であるか否かを検出する不一致検出部と、
前記不一致であることが検出された場合には前記メモリアドレスをアクセスが禁止されるアドレスである不良アドレスとして登録する登録部と
具備する不一致検出装置。
（９）前記不一致検出部は、前記符号要素ごとに値が不一致であるか否かを判断し、
前記登録部は、前記不一致であると判断された前記符号要素の数が所定の閾値を超えた場合には前記メモリアドレスを前記不良アドレスとして登録する
前記（８）記載の不一致検出装置。
（１０）長さの異なる複数の時間を候補時間として順に供給する供給部と、
複数の符号要素からなる符号語をリードデータとしてメモリアドレスから読み出すリード処理と前記リードデータを読み出したときから前記候補時間が経過したときに前記符号語を再リードデータとして前記メモリアドレスから読み出す再リード処理とのそれぞれを前記候補時間が設定されるたびに一定回数実行する符号語読出部と、
前記リード処理および前記再リード処理が実行されるたびに前記リードデータと前記再リードデータとが不一致であるか否かを検出する不一致検出部と、
前記複数の時間の各々について前記不一致であると検出された回数を計数する計数部と、
前記検出回数に基づいて前記複数の時間のうち前記不一致であると検出された頻度が最も高い時間を設定する設定部と
を具備する不一致検出装置。
（１１）消失位置の検出により誤り訂正能力が向上する複数の符号要素からなる符号語をメモリアドレスに記憶するメモリと、
前記符号語をリードデータとしてメモリアドレスから読み出すリード処理を実行し、前記リードデータを読み出したときから所定時間が経過したときに前記符号語を再リードデータとして前記メモリアドレスから読み出す再リード処理を実行する符号語読出部と、
前記リードデータおよび前記再リードデータにおいて前記符号要素ごとに値が一致するか否かを判断して値が一致しない前記符号要素の位置を前記符号語における前記消失位置として検出するタイミング制御消失位置検出部と、
前記消失位置が検出された前記符号語において前記消失位置に基づいて誤りを訂正する誤り訂正部と
を具備するメモリシステム。
（１２）符号語読出部が、消失位置の検出により誤り訂正能力が向上する複数の符号要素からなる符号語をリードデータとしてメモリアドレスから読み出すリード処理を実行し、前記リードデータを読み出したときから所定時間が経過したときに前記符号語を再リードデータとして前記メモリアドレスから読み出す再リード処理を実行する符号語読出手順と、
タイミング制御消失位置検出部が、前記リードデータおよび前記再リードデータにおいて前記符号要素ごとに値が一致するか否かを判断して値が一致しない前記符号要素の位置を前記符号語における前記消失位置として検出するタイミング制御消失位置検出手順と、
誤り訂正部が、前記消失位置が検出された前記符号語において前記消失位置に基づいて誤りを訂正する誤り訂正手順と
を具備する誤り検出訂正方法。
【符号の説明】
【０１７４】
１００  ホストシステム
２００  ストレージシステム
３００  メモリコントローラ
３０１  ＲＡＭ
３０２  ＣＰＵ
３０３  ＥＣＣ処理部
３０４  ＲＯＭ
３０５  ホストインターフェース
３０６  バス
３０７  不揮発性メモリインターフェース
３１０  ライト処理部
３２０  リード処理部
３２１、３５２、３７２  リードコマンドバッファ
３２２、３５３  ＲＴＮサイクルカウンタ
３２３、３３０、３５４、３７５  符号語リード部
３２４、３５５、３７６  リードデータバッファ
３２５  誤り訂正部
３２６  リードデータ誤り検出訂正部
３２７  消失訂正部
３２８、３４０  消失位置検出部
３２９  データ置換部
３３１  送信タイミング制御部
３３２  閾値制御部
３４１  閾値制御消失位置検出部
３４２  タイミング制御消失位置検出部
３５０  メモリ検査部
３５１、３７１  リードコマンド発行部
３５６、３７７  不一致検出部
３５７  不良アドレス通知部
３６０  アクセス制御部
３７０  ＲＴＮサイクル設定部
３７３  候補サイクルカウンタ
３７４  候補サイクル設定部
３７８  不一致数計数部
３７９  ＲＴＮサイクル設定回路
３８０  温度取得部
３９０  ＲＴＮサイクル決定部
４００  不揮発性メモリ
【図１】
2014093654.tif 000018
【図２】
2014093654.tif 000019
【図３】
2014093654.tif 000020
【図４】
2014093654.tif 000021
【図５】
2014093654.tif 000022
【図６】
2014093654.tif 000023
【図７】
2014093654.tif 000024
【図８】
2014093654.tif 000025
【図９】
2014093654.tif 000026
【図１０】
2014093654.tif 000027
【図１１】
2014093654.tif 000028
【図１２】
2014093654.tif 000029
【図１３】
2014093654.tif 000030
【図１４】
2014093654.tif 000031
【図１５】
2014093654.tif 000032
【図１６】
2014093654.tif 000033
【図１７】
2014093654.tif 000034
【図１８】
2014093654.tif 000035
【図１９】
2014093654.tif 000036
【図２０】
2014093654.tif 000037
【図２１】
2014093654.tif 000038
【図２２】
2014093654.tif 000039
【図２３】
2014093654.tif 000040
【図２４】
2014093654.tif 000041
【図２５】
2014093654.tif 000042
【図２６】
2014093654.tif 000043
【図２７】
2014093654.tif 000044
【図２８】
2014093654.tif 000045
【図２９】
2014093654.tif 000046