(57)【要約】【課題】軟判定アルゴリズムを使用する情報処理システムにおいて誤り訂正能力を向上させる。【解決手段】低レベル誤り訂正部が、所定の復号アルゴリズムを使用して符号語の誤りを訂正する低レベル誤り訂正処理を実行する。高レベル軟判定誤り訂正部が、低レベル誤り訂正部による誤りの訂正が失敗した場合には所定のアルゴリズムよりも誤り訂正能力が高い軟判定復号アルゴリズムである高レベルアルゴリズムを使用して符号語の誤りを訂正する高レベル軟判定誤り訂正処理を実行する。【選択図】図８
2014140111.tif 000002
【特許請求の範囲】
【請求項１】
所定の復号アルゴリズムを使用して符号語の誤りを訂正する低レベル誤り訂正処理を実行する低レベル誤り訂正部と、
前記低レベル誤り訂正部による誤りの訂正が失敗した場合には前記所定の復号アルゴリズムよりも誤り訂正能力が高い軟判定復号アルゴリズムである高レベルアルゴリズムを使用して前記符号語の誤りを訂正する高レベル軟判定誤り訂正処理を実行する高レベル軟判定誤り訂正部と
を具備するコントローラ。
【請求項２】
前記符号語は、複数の符号要素を含み、
前記符号語をメモリから読み出して前記低レベル誤り訂正部に供給するリード処理部と、
前記低レベル誤り訂正部による誤りの訂正が失敗した場合には前記メモリから前記符号語を読み出す符号語取得処理を複数回実行する符号語取得部と、
前記符号語取得部により読み出された符号語の各々に基づいて前記符号要素が特定の値となる確率に応じた軟判定値を前記符号要素ごとに生成して前記符号要素の各々の値を前記軟判定値に置き換えた前記符号語を前記高レベル軟判定誤り訂正部に供給する軟判定値生成部と
をさらに具備する請求項１記載のコントローラ。
【請求項３】
前記軟判定値生成部は、前記符号語取得部により前記特定の値が読み出された頻度を前記符号要素ごとに求めて当該頻度に応じて前記軟判定値を生成する
請求項２記載のコントローラ。
【請求項４】
前記符号要素の値を判断するための閾値を所定の範囲内で前記符号語取得処理が実行されるたびに変更する閾値制御部をさらに具備し、
前記軟判定値生成部は、前記特定の値の符号要素が読み出されたときの前記閾値のうち最大値または最小値に応じて前記軟判定値を生成する
請求項２記載のコントローラ。
【請求項５】
前記軟判定値生成部は、前記符号語取得処理が複数回実行されてから前記軟判定値を生成し、
前記高レベル軟判定誤り訂正部は、前記軟判定値が生成されると前記高レベル軟判定誤り訂正処理を実行する
請求項２記載のコントローラ。
【請求項６】
前記軟判定値生成部は、前記符号語取得処理が実行されるたびに前記軟判定値を生成し、
前記高レベル軟判定誤り訂正部は、前記軟判定値が生成されるたびに前記高レベル軟判定誤り訂正処理を実行する
請求項２記載のコントローラ。
【請求項７】
前記低レベル誤り訂正部は、前記符号要素が特定の値となる確率に応じた軟判定値を前記符号要素ごとに生成して前記符号要素の各々の値を前記軟判定値に置き換えた前記符号語を前記高レベル軟判定誤り訂正部に供給する
請求項１記載のコントローラ。
【請求項８】
記憶部から前記符号語を読み出すことを指示するリードコマンドを発行するホストコンピュータと、
前記リードコマンドに従って前記記憶部から前記符号語を読み出すリード処理部と、
所定のアルゴリズムを使用して符号語の誤りを訂正する低レベル誤り訂正処理を実行する低レベル誤り訂正部と、
前記低レベル誤り訂正部による誤りの訂正が失敗した場合には前記所定の復号アルゴリズムよりも誤り訂正能力が高い軟判定復号アルゴリズムである高レベルアルゴリズムを使用して前記符号語の誤りを訂正する高レベル軟判定誤り訂正処理を実行する高レベル軟判定誤り訂正部と
を具備する情報処理システム。
【請求項９】
前記ホストコンピュータは、前記低レベル誤り訂正部による誤りの訂正が失敗した場合には前記高レベル軟判定誤り訂正処理の開始を指示する訂正開始コマンドを含む１つ以上のコマンドの実行順序を前記高レベル軟判定誤り訂正処理の処理時間に基づいて決定し、前記実行順序で前記コマンドの各々を前記高レベル軟判定誤り訂正部に供給し、
前記高レベル軟判定誤り訂正部は、前記低レベル誤り訂正部による誤りの訂正が失敗し、かつ、前記訂正開始コマンドが供給されたときに前記高レベル軟判定誤り訂正処理を開始する
請求項８記載の情報処理システム。
【請求項１０】
前記ホストコンピュータは、前記低レベル誤り訂正部による誤りの訂正が失敗し、前記符号語を読み出す処理に対する割込みが発生した場合には前記高レベル軟判定誤り訂正処理の中断を指示するアボートコマンドを発行し、
前記高レベル軟判定誤り訂正部は、前記低レベル誤り訂正部による誤りの訂正が失敗した場合には前記高レベル軟判定誤り訂正処理を実行し、前記低レベル誤り訂正部による誤りの訂正が失敗した場合には前記アボートコマンドに従って前記実行していた高レベル軟判定誤り訂正処理を中断する
請求項８記載の情報処理システム。
【請求項１１】
前記ホストコンピュータは、前記符号語の種類に基づいて前記高レベル軟判定誤り訂正処理を実行するか否かを示すイネーブル信号をさらに生成し、
前記高レベル軟判定誤り訂正部は、前記低レベル誤り訂正部による誤りの訂正が失敗した場合には前記イネーブル信号に従って前記高レベル軟判定誤り訂正処理を実行する
請求項８記載の情報処理システム。
【請求項１２】
前記ホストコンピュータは、前記符号語の種類に基づいて複数の前記高レベルアルゴリズムのうちのいずれかを指定し、
前記高レベル軟判定誤り訂正部は、前記低レベル誤り訂正部による誤りの訂正が失敗した場合には前記指定された高レベルアルゴリズムを使用して前記符号語の誤りを訂正する
請求項８記載の情報処理システム。
【請求項１３】
記憶部から符号語を読み出して所定の復号アルゴリズムを使用して前記符号語の誤りを訂正する低レベル誤り訂正処理を実行するコントローラと、
前記コントローラによる誤りの訂正が失敗した場合には前記所定のアルゴリズムよりも誤り訂正能力が高い軟判定復号アルゴリズムである高レベルアルゴリズムを使用して前記符号語の誤りを訂正する高レベル軟判定誤り訂正処理を実行するホストコンピュータと
を具備する情報処理システム。
【請求項１４】
前記ホストコンピュータは、前記コントローラによる誤りの訂正が失敗した場合には前記符号語の出力を前記コントローラに指示する符号語出力コマンドを発行し、
前記コントローラは、前記符号語出力コマンドに従って前記符号語を前記メモリから読み出して前記低レベル誤り訂正処理を実行せずに前記ホストコンピュータに出力する
請求項１３記載の情報処理システム。
【請求項１５】
前記コントローラは、前記低レベル誤り訂正処理において前記符号語の誤りの訂正に成功したか否かを示す訂正成否情報を生成して前記ホストコンピュータに出力し、
前記ホストコンピュータは、前記訂正成否情報に基づいて前記コントローラによる誤りの訂正が失敗したか否かを判断する
請求項１３記載の情報処理システム。
【請求項１６】
低レベル誤り訂正部が、所定の復号アルゴリズムを使用して符号語の誤りを訂正する低レベル誤り訂正処理を実行する低レベル誤り訂正手順と、
高レベル軟判定誤り訂正部が、前記低レベル誤り訂正手順において誤りの訂正が失敗した場合には前記所定の復号アルゴリズムよりも誤り訂正能力が高い軟判定アルゴリズムである高レベルアルゴリズムを使用して前記符号語の誤りを訂正する高レベル軟判定誤り訂正処理を実行する高レベル軟判定誤り訂正手順と
を具備するコントローラの制御方法。
【請求項１７】
低レベル誤り訂正部が、所定の復号アルゴリズムを使用して符号語の誤りを訂正する低レベル誤り訂正処理を実行する低レベル誤り訂正手順と、
高レベル軟判定誤り訂正部が、前記低レベル誤り訂正手順において誤りの訂正が失敗した場合には前記所定の復号アルゴリズムよりも誤り訂正能力が高い軟判定アルゴリズムである高レベルアルゴリズムを使用して前記符号語の誤りを訂正する高レベル軟判定誤り訂正処理を実行する高レベル軟判定誤り訂正手順と
をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、コントローラ、情報処理システム、コントローラの制御方法およびプログラムに関する。詳しくは、軟判定復号アルゴリズムにより誤り訂正を行うコントローラ、情報処理システム、コントローラの制御方法およびプログラムに関する。
【背景技術】
【０００２】
近年の情報処理システムにおいては、不揮発性メモリ（ＮＶＭ：Non-Volatile memory）やＨＤＤ（Hard Disk Drive）がストレージとして用いられることがある。これらのストレージにおいては、記録したデータが破損して正しく読み出せなくなることがある。このため、情報処理システムは、記録する対象のデータに基づいて誤り検出訂正符号（ＥＣＣ：Error detection and Correction Code）を生成してストレージに記録することが多い。情報処理システムは、データの再生時に、このＥＣＣに基づいてデータにおける誤りの検出および訂正を行うことができる。
【０００３】
ＥＣＣに基づいて誤りを訂正する際には、軟判定復号アルゴリズムが用いられることがある。この軟判定復号アルゴリズムは、データにおけるビットが「１」である確率または「０」である確率に応じた軟判定値に基づいて誤りを訂正するアルゴリズムである。これに対して、データにおけるビットが「１」または「０」のいずれの値であるかを示す硬判定値に基づいて誤りを訂正するアルゴリズムは、硬判定復号アルゴリズムと呼ばれる。
【０００４】
軟判定復号アルゴリズムは、硬判定復号アルゴリズムと比較して誤り訂正能力が高いが、処理が複雑であるために回路規模や処理時間が増大してしまう。そこで、軟判定復号アルゴリズムの一部を簡略化して回路規模等の増大を抑制した装置が提案されている（例えば、特許文献１参照。）。具体的には、この装置は、変数ノードおよび検査ノードの一方で生成した軟判定値を他方に受け渡して誤り訂正を行う処理を繰り返す繰返し方式の軟判定復号アルゴリズムを使用し、その検査ノードでの処理を簡略化している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−２８４０８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述の技術では、誤り訂正能力を向上させることが困難である。符号化においてデータに付加するパリティの情報量を大きくするほど、言い換えれば、符号化率を低くするほど誤り訂正能力が高くなるが、記憶領域の使用効率が低下してしまう。符号化率を変えずに誤り訂正能力を向上させるには、より誤り訂正能力の高いアルゴリズムを使用する方法や、繰返し方式における繰返し回数を多くする方法を用いればよい。ところが、前者の方法では、誤り訂正能力が高いアルゴリズムほど処理が複雑となるために、回路規模や処理時間が増大してしまうという問題がある。また、繰返し回数を多くする後者の方法では、処理時間が長くなってしまうという問題がある。したがって、符号化率を変えずに、回路規模や処理時間の増大を抑制しつつ、誤り訂正能力を向上させることが困難である。
【０００７】
本技術はこのような状況に鑑みて生み出されたものであり、軟判定アルゴリズムを使用する情報処理システムにおいて誤り訂正能力を向上させることを目的とする。
【課題を解決するための手段】
【０００８】
本技術は、上述の問題点を解消するためになされたものであり、その第１の側面は、所定の復号アルゴリズムを使用して符号語の誤りを訂正する低レベル誤り訂正処理を実行する低レベル誤り訂正部と、上記低レベル誤り訂正部による誤りの訂正が失敗した場合には上記所定の復号アルゴリズムよりも誤り訂正能力が高い軟判定復号アルゴリズムである高レベルアルゴリズムを使用して上記符号語の誤りを訂正する高レベル軟判定誤り訂正処理を実行する高レベル軟判定誤り訂正部とコントローラ、および、その制御方法ならびに当該方法をコンピュータに実行させるためのプログラムである。これにより、低レベル誤り訂正部による誤りの訂正が失敗した場合には高レベルアルゴリズムを使用して上記符号語の誤りが訂正されるという作用をもたらす。
【０００９】
また、この第１の側面において、上記符号語は、複数の符号要素を含み、上記符号語をメモリから読み出して上記低レベル誤り訂正部に供給するリード処理部と、上記低レベル誤り訂正部による誤りの訂正が失敗した場合には上記メモリから上記符号語を読み出す符号語取得処理を複数回実行する符号語取得部と、上記符号語取得部により読み出された符号語の各々に基づいて上記符号要素が特定の値となる確率に応じた軟判定値を上記符号要素ごとに生成して上記符号要素の各々の値を上記軟判定値に置き換えた上記符号語を上記高レベル軟判定誤り訂正部に供給する軟判定値生成部とをさらに具備してもよい。これにより、低レベル誤り訂正部による誤りの訂正が失敗した場合には、符号語を読み出す符号語取得処理が複数回実行されて、読み出された符号語の各々に基づいて軟判定値が生成されるという作用をもたらす。
【００１０】
また、この第１の側面において、上記軟判定値生成部は、上記符号語取得部により上記特定の値が読み出された頻度を上記符号要素ごとに求めて当該頻度に応じて上記軟判定値を生成してもよい。これにより、特定の値が読み出された頻度に応じて軟判定値が生成されるという作用をもたらす。
【００１１】
また、この第１の側面において、上記符号要素の値を判断するための閾値を所定の範囲内で上記符号語取得処理が実行されるたびに変更する閾値制御部をさらに具備し、上記軟判定値生成部は、上記特定の値の符号要素が読み出されたときの上記閾値のうち最大値または最小値に応じて上記軟判定値を生成してもよい。これにより特定の値の符号要素が読み出されたときの閾値のうち最大値または最小値に応じて軟判定値が生成されるという作用をもたらす。
【００１２】
また、この第１の側面において、上記軟判定値生成部は、上記符号語取得処理が複数回実行されてから上記軟判定値を生成し、上記高レベル軟判定誤り訂正部は、上記軟判定値が生成されると上記高レベル軟判定誤り訂正処理を実行してもよい。これにより、符号語取得処理が複数回実行されてから軟判定値が生成されて、高レベル軟判定誤り訂正処理が実行されるという作用をもたらす。
【００１３】
また、この第１の側面において、上記軟判定値生成部は、上記符号語取得処理が実行されるたびに上記軟判定値を生成し、上記高レベル軟判定誤り訂正部は、上記軟判定値が生成されるたびに上記高レベル軟判定誤り訂正処理を実行してもよい。これにより、符号語取得処理が実行されるたびに軟判定値が生成されて、高レベル軟判定誤り訂正処理が実行されるという作用をもたらす。
【００１４】
また、この第１の側面において、上記低レベル誤り訂正部は、上記符号要素が特定の値となる確率に応じた軟判定値を上記符号要素ごとに生成して上記符号要素の各々の値を上記軟判定値に置き換えた上記符号語を上記高レベル軟判定誤り訂正部に供給してもよい。これにより、上記低レベル誤り訂正部が生成した軟判定値が上記高レベル軟判定誤り訂正部に供給されるという作用をもたらす。
【００１５】
また、本技術の第２の側面は、記憶部から前記符号語を読み出すことを指示するリードコマンドを発行するホストコンピュータと、前記リードコマンドに従って前記記憶部から前記符号語を読み出すリード処理部と、所定のアルゴリズムを使用して符号語の誤りを訂正する低レベル誤り訂正処理を実行する低レベル誤り訂正部と、前記低レベル誤り訂正部による誤りの訂正が失敗した場合には前記所定の復号アルゴリズムよりも誤り訂正能力が高い軟判定復号アルゴリズムである高レベルアルゴリズムを使用して前記符号語の誤りを訂正する高レベル軟判定誤り訂正処理を実行する高レベル軟判定誤り訂正部とを具備する情報処理システムである。これにより、低レベル誤り訂正部による誤りの訂正が失敗した場合には高レベルアルゴリズムを使用して上記符号語の誤りが訂正されるという作用をもたらす。
【００１６】
また、この第２の側面において、上記ホストコンピュータは、上記低レベル誤り訂正部による誤りの訂正が失敗した場合には上記高レベル軟判定誤り訂正処理の開始を指示する訂正開始コマンドを含む１つ以上のコマンドの実行順序を上記高レベル軟判定誤り訂正処理の処理時間に基づいて決定し、上記実行順序で上記コマンドの各々を上記高レベル軟判定誤り訂正部に供給し、上記高レベル軟判定誤り訂正部は、上記低レベル誤り訂正部による誤りの訂正が失敗し、かつ、上記訂正開始コマンドが供給されたときに上記高レベル軟判定誤り訂正処理を開始してもよい。これにより、低レベル誤り訂正部による誤りの訂正が失敗し、かつ、訂正開始コマンドが供給されたときに高レベル軟判定誤り訂正処理が実行されるという作用をもたらす。
【００１７】
また、この第２の側面において、上記ホストコンピュータは、上記低レベル誤り訂正部による誤りの訂正が失敗し、上記符号語を読み出す処理に対する割込みが発生した場合には上記高レベル軟判定誤り訂正処理の中断を指示するアボートコマンドを発行し、上記高レベル軟判定誤り訂正部は、上記低レベル誤り訂正部による誤りの訂正が失敗した場合には上記高レベル軟判定誤り訂正処理を実行し、上記低レベル誤り訂正部による誤りの訂正が失敗した場合には上記アボートコマンドに従って上記実行していた高レベル軟判定誤り訂正処理を中断してもよい。これにより、符号語を読み出す処理に対する割込みが発生した場合に高レベル軟判定誤り訂正処理が中断されるという作用をもたらす。
【００１８】
また、この第２の側面において、上記ホストコンピュータは、上記符号語の種類に基づいて上記高レベル軟判定誤り訂正処理を実行するか否かを示すイネーブル信号をさらに生成し、上記高レベル軟判定誤り訂正部は、上記低レベル誤り訂正部による誤りの訂正が失敗した場合には上記イネーブル信号に従って上記高レベル軟判定誤り訂正処理を実行してもよい。これにより、低レベル誤り訂正部による誤りの訂正が失敗した場合にはイネーブル信号に従って高レベル軟判定誤り訂正処理が実行されるという作用をもたらす。
【００１９】
また、この第２の側面において、上記ホストコンピュータは、上記符号語の種類に基づいて複数の上記高レベルアルゴリズムのうちのいずれかを指定し、上記高レベル軟判定誤り訂正部は、上記低レベル誤り訂正部による誤りの訂正が失敗した場合には上記指定された高レベルアルゴリズムを使用して上記符号語の誤りを訂正してもよい。これにより、低レベル誤り訂正部による誤りの訂正が失敗した場合には指定された高レベルアルゴリズムを使用して符号語の誤りが訂正されるという作用をもたらす。
【００２０】
また、本技術の第３の側面は、記憶部から上記符号語を読み出すことを指示するリードコマンドを発行するホストコンピュータと、上記リードコマンドに従って上記記憶部から上記符号語を読み出すリード処理部と、所定のアルゴリズムを使用して符号語の誤りを訂正する低レベル誤り訂正処理を実行する低レベル誤り訂正部と、上記低レベル誤り訂正部による誤りの訂正が失敗した場合には上記所定の復号アルゴリズムよりも誤り訂正能力が高い軟判定復号アルゴリズムである高レベルアルゴリズムを使用して上記符号語の誤りを訂正する高レベル軟判定誤り訂正処理を実行する高レベル軟判定誤り訂正部と
を具備する情報処理システムである。
【００２１】
また、この第３の側面において、上記ホストコンピュータは、上記符号語の種類に基づいて複数の上記高レベルアルゴリズムのうちのいずれかを指定し、上記高レベル軟判定誤り訂正部は、上記低レベル誤り訂正部による誤りの訂正が失敗した場合には上記指定された高レベルアルゴリズムを使用して上記符号語の誤りを訂正してもよい。これにより、コントローラは、上記符号語出力コマンドに従って符号語を上記記憶部から読み出して低レベル誤り訂正処理を実行せずに上記ホストコンピュータに出力するという作用をもたらす。
【００２２】
上記コントローラは、上記低レベル誤り訂正処理において上記符号語の誤りの訂正に成功したか否かを示す訂正成否情報を生成して上記ホストコンピュータに出力し、上記ホストコンピュータは、上記訂正成否情報に基づいて上記コントローラによる誤りの訂正が失敗したか否かを判断してもよい。これにより、ホストコンピュータにおいて訂正成否情報に基づいて上記コントローラによる誤りの訂正が失敗したか否かが判断されるという作用をもたらす。
【発明の効果】
【００２３】
本技術によれば、軟判定アルゴリズムを使用する情報処理システムにおいて誤り訂正能力を向上させることができるという優れた効果を奏し得る。
【図面の簡単な説明】
【００２４】
【図１】第１の実施の形態における情報処理システムの一構成例を示すブロック図である。
【図２】第１の実施の形態におけるホストコンピュータの一構成例を示すブロック図である。
【図３】第１の実施の形態におけるメモリコントローラの一構成例を示すブロック図である。
【図４】第１の実施の形態におけるメモリコントローラの機能構成例を示すブロック図である。
【図５】第１の実施の形態における誤り訂正符号のデータ構成の一例を示す図である。
【図６】第１の実施の形態における検査行列の一例を示す図である。
【図７】第１の実施の形態における誤り訂正符号の生成方法の一例を説明するための図である。
【図８】第１の実施の形態における誤り訂正部の一構成例を示すブロック図である。
【図９】第１の実施の形態における低レベル誤り訂正部の一構成例を示すブロック図である。
【図１０】第１の実施の形態における低レベル誤り訂正回路の一構成例を示す図である。
【図１１】第１の実施の形態における変数ノードと検査ノードとの間のメッセージ交換の一例を示す図である。
【図１２】第１の実施の形態における高レベル軟判定誤り訂正部の一構成例を示す図である。
【図１３】第１の実施の形態におけるホストコンピュータの動作の一例を示すフローチャートである。
【図１４】第１の実施の形態におけるメモリコントローラの動作の一例を示すフローチャートである。
【図１５】第１の実施の形態におけるリード処理の一例を示すフローチャートである。
【図１６】第１の実施の形態における低レベル誤り訂正処理の一例を示すフローチャートである。
【図１７】第１の実施の形態における高レベル軟判定誤り訂正処理の一例を示すフローチャートである。
【図１８】第１の実施の形態の第１の変形例における誤り訂正部の一構成例を示すブロック図である。
【図１９】第１の実施の形態の第１の変形例における低レベル誤り訂正部の一例を示すブロック図である。
【図２０】第１の実施の形態の第１の変形例における高レベル軟判定誤り訂正部の一例を示すブロック図である。
【図２１】第１の実施の形態の第２の変形例における誤り訂正部の一構成例を示すブロック図である。
【図２２】第１の実施の形態の第２の変形例におけるホストコンピュータの動作の一例を示すフローチャートである。
【図２３】第１の実施の形態の第２の変形例におけるリード処理の一例を示すフローチャートである。
【図２４】第２の実施の形態における誤り訂正部の一構成例を示すブロック図である。
【図２５】第２の実施の形態におけるホストコンピュータの動作の一例を示すフローチャートである。
【図２６】第２の実施の形態におけるリード処理の一例を示すフローチャートである。
【図２７】第２の実施の形態の第１の変形例における誤り訂正部の一構成例を示すブロック図である。
【図２８】第２の実施の形態の第１の変形例におけるホストコンピュータの動作の一例を示すフローチャートである。
【図２９】第２の実施の形態の第１の変形例における高レベル軟判定誤り訂正処理の一例を示すフローチャートである。
【図３０】第２の実施の形態の第２の変形例における誤り訂正部の一構成例を示すブロック図である。
【図３１】第２の実施の形態の第２の変形例におけるホストコンピュータの動作の一例を示すフローチャートである。
【図３２】第２の実施の形態の第２の変形例におけるリード処理の一例を示すフローチャートである。
【図３３】第２の実施の形態の第３の変形例におけるホストコンピュータの動作の一例を示すフローチャートである。
【図３４】第２の実施の形態の第３の変形例における高レベル軟判定誤り訂正処理の一例を示すフローチャートである。
【図３５】第３の実施の形態におけるホストコンピュータの一構成例を示すブロック図である。
【図３６】第３の実施の形態におけるメモリコントローラの一構成例を示すブロック図である。
【図３７】第３の実施の形態における誤り訂正部の一構成例を示すブロック図である。
【図３８】第３の実施の形態におけるホストコンピュータの動作の一例を示すフローチャートである。
【図３９】第３の実施の形態におけるメモリコントローラの動作の一例を示すフローチャートである。
【図４０】第３の実施の形態におけるリード処理の一例を示すフローチャートである。
【図４１】第４の実施の形態におけるホストコンピュータの一構成例を示すブロック図である。
【図４２】第４の実施の形態におけるリードデータおよび軟判定値の一例を示す図である。
【図４３】第４の実施の形態におけるメモリコントローラの一構成例を示すブロック図である。
【図４４】第４の実施の形態におけるホストコンピュータの動作の一例を示すフローチャートである。
【図４５】第４の実施の形態における高レベル軟判定誤り訂正処理の一例を示すフローチャートである。
【図４６】第４の実施の形態におけるメモリコントローラの動作の一例を示すフローチャートである。
【図４７】第４の実施の形態におけるリード処理の一例を示すフローチャートである。
【図４８】第４の実施の形態の変形例におけるホストコンピュータの動作の一例を示すフローチャートである。
【図４９】第５の実施の形態におけるホストコンピュータの一構成例を示すブロック図である。
【図５０】第５の実施の形態におけるメモリコントローラの一構成例を示すブロック図である。
【図５１】第５の実施の形態における可変抵抗素子の抵抗分布の一例を示す図である。
【図５２】第５の実施の形態における軟判定値の生成方法を説明するための図である。
【図５３】第５の実施の形態におけるホストコンピュータの動作の一例を示すフローチャートである。
【図５４】第５の実施の形態におけるリード処理の一例を示すフローチャートである。
【図５５】第５の実施の形態の変形例におけるホストコンピュータの動作の一例を示すフローチャートである。
【発明を実施するための形態】
【００２５】
以下、本技術を実施するための形態（以下、実施の形態と称する）について説明する。説明は以下の順序により行う。
１．第１の実施の形態（メモリコントローラが複数の軟判定復号アルゴリズムにより誤り訂正を行う例）
２．第２の実施の形態（ホストコンピュータの制御に従ってメモリコントローラが誤り訂正を行う例）
３．第３の実施の形態（ホストコンピュータが軟判定復号アルゴリズムにより誤り訂正を行う例）
４．第４の実施の形態（同一の閾値で読み出したデータから軟判定値を生成して誤り訂正を行う例）
５．第５の実施の形態（異なる閾値で読み出したデータから軟判定値を生成して誤り訂正を行う例）
【００２６】
＜１．第１の実施の形態＞
［情報処理システムの構成例］
図１は、第１の実施の形態における情報処理システムの一構成例を示すブロック図である。この情報処理システムは、ホストコンピュータ１００およびストレージ２００を備える。
【００２７】
ホストコンピュータ１００は、情報処理システム全体を制御するものである。具体的には、ホストコンピュータ１００は、コマンドおよびライトデータを生成してストレージ２００に信号線１０９を介して供給する。また、ホストコンピュータ１００は、ストレージ２００からリードデータを受け取る。ここで、コマンドは、ストレージ２００を制御するためのものであり、例えば、ライトデータの書込みを指示するライトコマンドや、リードデータの読出しを指示するリードコマンドを含む。
【００２８】
ストレージ２００は、メモリコントローラ３００および不揮発性メモリ４００を備える。このメモリコントローラ３００は、不揮発性メモリ４００を制御するものである。メモリコントローラ３００は、ホストコンピュータ１００からライトコマンドおよびライトデータを受け取った場合には、そのライトデータから誤り検出訂正符号（ＥＣＣ：Error detection and Correction Code）を生成する。具体的には、メモリコントローラ３００は、ライトデータを、そのライトデータおよびパリティからなる符号語に変換（すなわち、符号化）する。メモリコントローラ３００は、不揮発性メモリ４００に信号線３０９を介してアクセスして符号化したデータを書き込む。
【００２９】
また、ホストコンピュータ１００からリードコマンドを受け取った場合、メモリコントローラ３００は、不揮発性メモリ４００に信号線３０９を介してアクセスして符号化されたデータを読み出す。そして、メモリコントローラ３００は、符号化されたデータを、符号化前の元のデータに変換（すなわち、復号）する。復号においてメモリコントローラ３００は、ＥＣＣに基づいてデータにおける誤りの検出および訂正を行う。メモリコントローラ３００は、訂正したデータをホストコンピュータ１００に供給する。
【００３０】
なお、メモリコントローラ３００は、特許請求の範囲に記載のコントローラの一例である。
【００３１】
不揮発性メモリ４００は、メモリコントローラ３００の制御に従って、データを記憶するものである。例えば、ＲｅＲＡＭが不揮発性メモリ４００として用いられる。なお、ＲｅＲＡＭの代わりに、フラッシュメモリ、ＰＣＲＡＭ、および、ＭＲＡＭなどを不揮発性メモリ４００として用いてもよい。また、メモリコントローラ３００は、データを不揮発性メモリ４００に記録しているが、データを記録することができる媒体や装置であれば、不揮発性メモリ４００以外の記録媒体や記憶装置にデータを記録してもよい。そのような記憶装置の一例として、ハードディスクドライブ（ＨＤＤ：Hard Disk Drive）などを想定することができる。
【００３２】
［ホストコンピュータの構成例］
図２は、第１の実施の形態におけるホストコンピュータ１００の一構成例を示すブロック図である。このホストコンピュータ１００は、ＲＯＭ（Read Only Memory）１０２、ＲＡＭ（Random Access Memory）１０３およびＣＰＵ（Central Processing Unit）１０４を備える。また、ホストコンピュータ１００は、ユーザインターフェース１０１、バス１０５およびストレージインターフェース１０６を備える。
【００３３】
ユーザインターフェース１０１は、情報処理システムと、その利用者とが互いに、入力データや出力データをやりとりするためのインターフェースである。ＲＯＭ１０２は、ＣＰＵ１０４が実行するプログラム等を記憶するものである。ＲＡＭ１０３は、ＣＰＵ１０４が実行する処理において必要となるデータを一時的に保持するものである。ＣＰＵ１０４は、ホストコンピュータ１００全体を制御するものである。バス１０５は、ユーザインターフェース１０１、ＲＯＭ１０２、ＲＡＭ１０３、ＣＰＵ１０４およびストレージインターフェース１０６が相互にデータを交換するための共通の経路である。ストレージインターフェース１０６は、ホストコンピュータ１００とストレージ２００とがデータやコマンドを相互に交換するためのインターフェースである。
【００３４】
［メモリコントローラの構成例］
図３は、第１の実施の形態におけるメモリコントローラ３００の一構成例を示すブロック図である。このメモリコントローラ３００は、ホストインターフェース３０１、ＲＡＭ３０２、ＣＰＵ３０３、ＥＣＣ処理部３０４、ＲＯＭ３０５、バス３０６および不揮発性メモリインターフェース３０７を備える。
【００３５】
ホストインターフェース３０１は、メモリコントローラ３００がホストコンピュータ１００との間でデータやコマンドを相互に交換するものである。ＲＡＭ３０２は、ＣＰＵ３０３が実行する処理において必要となるデータを一時的に保持するものである。
【００３６】
ＥＣＣ処理部３０４は、ライトデータを符号化し、また、リードデータを復号するものである。ライトデータの符号化においてＥＣＣ処理部３０４は、複数のライトデータの各々にパリティを付加することにより所定の単位で符号化する。ここで、符号化は、軟判定復号アルゴリズムにより誤りを訂正することが可能なアルゴリズムにより行われる。また、所定の単位で符号化された個々のデータを以下、「符号語」と称する。そして、ＥＣＣ処理部３０４は、符号化したライトデータを不揮発性メモリ４００にバス３０６を介して供給する。
【００３７】
また、ＥＣＣ処理部３０４は、符号化されたリードデータを元のデータに復号する。この復号において、ＥＣＣ処理部３０４は、軟判定復号アルゴリズムを使用して符号語の誤りを訂正する。ＥＣＣ処理部３０４は、誤りの訂正が失敗したか否かを示す訂正正否情報をＣＰＵ３０３にバス３０６を介して供給する。また、誤りの訂正に成功した場合、ＥＣＣ処理部３０４は、復号したデータをホストコンピュータ１００にバス３０６を介して供給する。
【００３８】
ＣＰＵ３０３は、メモリコントローラ３００全体を制御するものである。また、ＣＰＵ３０３は、誤り訂正が失敗したことを示す訂正成否情報をＥＣＣ処理部３０４から受け取った場合には、ＥＣＣ処理部３０４が使用したアルゴリズムよりも誤り訂正能力の高い軟判定復号アルゴリズムを使用して、その符号語の誤りを訂正する。
【００３９】
ＲＯＭ３０５は、ＣＰＵ３０３が実行するプログラム等を記憶するものである。例えば、ＲＯＭ３０５には、軟判定復号アルゴリズムにより誤りを訂正する処理を実行するためのプログラムが記憶される。
【００４０】
バス３０６は、ホストインターフェース３０１、ＲＡＭ３０２、ＣＰＵ３０３、ＥＣＣ処理部３０４、ＲＯＭ３０５および不揮発性メモリインターフェース３０７が相互にデータを交換するための共通の経路である。不揮発性メモリインターフェース３０７は、メモリコントローラ３００が不揮発性メモリ４００との間でデータやコマンドを相互に交換するためのインターフェースである。
【００４１】
図４は、第１の実施の形態におけるメモリコントローラ３００の機能構成例を示すブロック図である。このメモリコントローラ３００は、符号化部３１０、ライト処理部３２０、リード処理部３３０および誤り訂正部３４０を備える。図４における符号化部３１０は、図３におけるＥＣＣ処理部３０４により実現される。また、図４におけるライト処理部３２０およびリード処理部３３０は、図３におけるホストインターフェース３０１、ＲＡＭ３０２、ＣＰＵ３０３、ＲＯＭ３０５、バス３０６および不揮発性メモリインターフェース３０７などにより実現される。図４における誤り訂正部３４０は、図３におけるＲＡＭ３０２、ＣＰＵ３０３、ＥＣＣ処理部３０４およびＲＯＭ３０５などにより実現される。
【００４２】
符号化部３１０は、符号語にライトデータを符号化するものである。この符号化において、ライトデータは、軟判定復号アルゴリズムにより誤りが訂正される符号に符号化される。具体的には、ライトデータは、ＬＤＰＣ（低密度パリティ検査：Low Density Parity Check）符号などに符号化される。符号化部３１０は、生成した符号語をライト処理部３２０に供給する。
【００４３】
なお、符号化部３１０は、ＬＤＰＣ符号に符号化しているが、軟判定復号アルゴリズムにより誤りを訂正することができる誤り訂正符号であれば、ライトデータをＬＤＰＣ符号以外の符号に符号化してもよい。例えば、符号化部３１０は、畳込み符号やターボ符号に符号化してもよい。
【００４４】
ライト処理部３２０は、ライトコマンドに従って、符号化されたライトデータを不揮発性メモリ４００に書き込む処理を実行するものである。ライト処理部３２０は、ホストコンピュータ１００からライトコマンドを受け取ると、符号語に符号化されたライトデータを符号化部３１０から取得し、不揮発性メモリ４００にアクセスして、そのコマンドにより指定されたメモリアドレスに符号語を書き込む。
【００４５】
リード処理部３３０は、リードコマンドに従って、リードデータを不揮発性メモリ４００から読み出す処理を実行するものである。リード処理部３３０は、ホストコンピュータ１００からリードコマンドを受け取ると、不揮発性メモリ４００にアクセスして、そのコマンドにより指定されたメモリアドレスから符号語に相当するデータをリードデータとして読み出す。ここで、符号語における各ビットの値は、「０」または「１」の値、すなわち硬判定値により読み出されるものとする。リード処理部３３０は、そのリードデータを誤り訂正部３４０に供給する。
【００４６】
誤り訂正部３４０は、リードデータ（符号語に相当するデータ）の誤りを訂正するものである。誤り訂正部３４０は、まず、複数の復号アルゴリズムのうち、誤り訂正能力の低いアルゴリズム（以下、「低レベルアルゴリズム」と称する。）を使用してリードデータの誤りを訂正する。低レベルアルゴリズムによる誤りの訂正に失敗した場合には、誤り訂正部３４０は、低レベルアルゴリズムよりも誤り訂正能力の高い軟判定復号アルゴリズム（以下、「高レベルアルゴリズム」と称する）を使用してリードデータの誤りを訂正する。高レベルアルゴリズムによる誤りの訂正が成功した場合に誤り訂正部３４０は、訂正した符号語からパリティを除いた元のデータ（ｋビット）をホストコンピュータ１００に出力する。また、誤り訂正部３４０は、訂正が成功したか否かを示す情報を記載したステータスを生成してホストコンピュータ１００に出力する。
【００４７】
ここで、軟判定復号アルゴリズムの誤り訂正能力の高さは、ＢＥＲ（Bit Error Rate）などのデータの誤り率や、ＣＮＲ（Carrier to Noise Ratio）などの通信品質により表わされる。例えば、軟判定復号アルゴリズムを使用した場合に、誤り率（ＢＥＲなど）を一定以下に抑制するために必要な通信品質（ＣＮＲなど）が低いほど、その軟判定復号アルゴリズムの誤り訂正能力は高い。あるいは、一定の通信品質における誤り率が低いほど、軟判定復号アルゴリズムの誤り訂正能力は高い。
【００４８】
図５は、第１の実施の形態における符号語のデータ構成の一例を示す図である。図５に示すように、符号化部３１０は、ｋビットのデータの各々をｎビットの符号語に符号化する。ここで、ｋは整数であり、ｎは、ｋより大きな整数である。それぞれの符号語は、ｋビットのデータと、ｎ−ｋビットのパリティとを含む。これらの符号語の各々が誤り検出訂正符号（ＥＣＣ）である。このように、符号語が、符号化対象のデータをそのまま含み、データとパリティとに符号語を容易に分離することができる符号は、組織符号と呼ばれる。なお、データを非組織符号に符号化してもよい。
【００４９】
図６は、第１の実施の形態における誤り訂正符号のデータ構成の一例を示す図である。ＬＤＰＣ符号化方式においては、誤り訂正部３４０により検査行列Ｈが生成される。この検査行列Ｈは、行および列における「１」の個数（以下、「重み」と称する。）が一定の検査行列である。行および列の重みは、検査行列全体における「１」の個数が疎となるように設定される。図５におけるａは、検査行列Ｈの重みの一例を示す図である。この例では、列の各々の重みは「３」であり、行の各々の重みは「６」である。図６におけるｂは、図５におけるａに示した重みを持つ検査行列Ｈの一例を示す図である。
【００５０】
図７は、第１の実施の形態における生成行列の使用方法を説明するための図である。図7７におけるａは、第１の実施の形態における生成行列Ｇの一例を示す図である。符号化部３１０は、図６において例示された検査行列Ｈから次式を使用して、図７におけるａに例示する生成行列Ｇを生成する。なお、符号化は、次式を要する検査行列に限定されるものではない。例えば、ＬＤＧＭ（Low Density Generation matrix）構造の検査行列を用いて符号化を行ってもよい。
Ｇ×ＨＴ＝０
【００５１】
検査行列Ｈの列数がｎで行数がｎ−ｋである場合、その検査行列Ｈから、図７におけるａに示すように、列数がｎで行数がｋの生成行列Ｇが生成される。図７におけるｂは、生成行列およびデータから符号語を生成する計算式の一例である。図７におけるｂに示すように、生成行列Ｇと、符号化対象のデータとの積により、符号語が生成される。この符号語は、ｋビットのデータと、ｎ−ｋビットのパリティとを含む。なお、符号化部３１０が生成行列Ｇを生成する構成としているが、この構成に限定されない。予め生成しておいた生成行列Ｇを、ＲＯＭなどの生成行列記憶部に記憶しておき、符号化部３１０が生成行列記憶部から生成行列を読み出す構成としてもよい。
【００５２】
［誤り訂正部の構成例］
図８は、第１の実施の形態における誤り訂正部３４０の一構成例を示すブロック図である。この誤り訂正部３４０は、リードデータバッファ３５０、低レベル誤り訂正部３６０、誤り訂正プログラム記憶部３７０および高レベル軟判定誤り訂正部３８０を備える。
【００５３】
リードデータバッファ３５０は、リード処理部３３０により読み出されたリードデータを保持するものである。
【００５４】
低レベル誤り訂正部３６０は、高レベル軟判定誤り訂正部３８０におけるアルゴリズムよりも誤り訂正能力の低い復号アルゴリズム（低レベルアルゴリズム）を使用してリードデータの誤りを訂正するものである。低レベルアルゴリズムとして、例えば、軟判定復号アルゴリズムであるＭｉｎ−Ｓｕｍアルゴリズムが用いられる。なお、低レベルアルゴリズムは、軟判定復号アルゴリズムに限定されない。例えば、リードデータの誤りを訂正することができる復号アルゴリズムであれば、Ｂｉｔ−ｆｌｉｐｐｉｎｇアルゴリズムなど、軟判定アルゴリズム以外の復号アルゴリズムであってもよい。低レベル誤り訂正部３６０は、リードデータバッファ３５０からリードデータを読み出し、低レベルアルゴリズムを使用してリードデータの誤りを訂正する。誤りの訂正に成功した場合には、低レベル誤り訂正部３６０は、訂正したリードデータからパリティを除いた元のデータ（ｋビット）をホストコンピュータ１００へ出力する。また、低レベル誤り訂正部３６０は、訂正に成功したか否かを示す訂正成否情報を高レベル軟判定誤り訂正部３８０に供給する。
【００５５】
誤り訂正プログラム記憶部３７０は、高レベルアルゴリズムにより誤りを訂正する処理を実行するための誤り訂正プログラムを記憶するものである。
【００５６】
高レベル軟判定誤り訂正部３８０は、低レベル誤り訂正部３６０におけるアルゴリズムよりも誤り訂正能力の高い軟判定復号アルゴリズム（高レベルアルゴリズム）を使用してリードデータの誤りを訂正するものである。高レベルアルゴリズムとして、例えば、ＢＰ（Brief-Propagation）アルゴリズムが用いられる。ＢＰアルゴリズムは、サムプロダクトアルゴリズムとも呼ばれる。高レベル軟判定誤り訂正部３８０は、訂正に失敗したことを示す訂正成否情報を低レベル誤り訂正部３６０から受け取ると、リードデータバッファ３５０から、訂正に失敗したリードデータを読み出す。高レベル軟判定誤り訂正部３８０は、誤り訂正プログラム記憶部３７０から、誤り訂正プログラムを読み出して実行することにより、リードデータの誤りの訂正を開始する。誤りの訂正に成功した場合に高レベル軟判定誤り訂正部３８０は、訂正したリードデータからパリティを除いた元のデータ（ｋビット）をホストコンピュータ１００へ出力する。また、高レベル軟判定誤り訂正部３８０は、訂正が成功したか否かを示す情報を記載したステータスを生成してホストコンピュータ１００に出力する。
【００５７】
前述したように、リードデータ内のそれぞれのビットの値は硬判定値であるから、低レベル誤り訂正部３６０および高レベル軟判定誤り訂正部３８０には硬判定値が入力される。
【００５８】
なお、低レベル誤り訂正部３６０は、高レベル軟判定誤り訂正部３８０におけるアルゴリズムよりも誤り訂正能力の低い軟判定復号アルゴリズムであれば、Ｍｉｎ−Ｓｕｍアルゴリズム以外のアルゴリズムを使用して誤りを訂正することができる。また、高レベル軟判定誤り訂正部３８０は、低レベル誤り訂正部３６０におけるアルゴリズムよりも誤り訂正能力の高い軟判定復号アルゴリズムであれば、ＢＰアルゴリズム以外のアルゴリズムを使用して誤りを訂正することができる。
【００５９】
［低レベル誤り訂正部の構成例］
図９は、第１の実施の形態における低レベル誤り訂正部３６０の一構成例を示すブロック図である。この低レベル誤り訂正部３６０は、低レベル誤り訂正回路３６１および訂正成否判定部３６６を備える。
【００６０】
低レベル誤り訂正回路３６１は、軟判定復号アルゴリズムを使用してリードデータの誤りを訂正する回路である。低レベル誤り訂正回路３６１においては、例えば、軟判定復号アルゴリズムとして、Ｍｉｎ−Ｓｕｍアルゴリズムが使用される。Ｍｉｎ−Ｓｕｍアルゴリズムが用いられる場合、低レベル誤り訂正回路３６１は、変数ノード処理部３６２および検査ノード処理部３６４を備える。
【００６１】
変数ノード処理部３６２は、検査ノード処理部３６４におけるパリティ検査の結果に基づいてリードデータにおける誤りの検出および訂正を行うものである。また、検査ノード処理部３６４は、リードデータに対してパリティ検査を行うものである。
【００６２】
具体的には、変数ノード処理部３６２は、リードデータをリードデータバッファ３５０から取得し、そのリードデータに基づいてメッセージｕ0_iLを生成する。このメッセージｕ0_iＬは、訂正前の符号語におけるi番目の符号要素（例えば、ビット）の値の「０」らしさ、または、「１」らしさの度合い（すなわち、尤度）を示す実数の変数である。また、「i」は、０乃至ｎ−１（ｎは符号語の符号長）の整数である。ここで、この符号要素は、符号語を構成する最小単位であり、シンボルとも呼ばれる。
【００６３】
変数ノード処理部３６２は、メッセージｕ0_ｊＬと検査ノード処理部３６４におけるパリティ検査の結果とに基づいてメッセージｖｉＬを生成して、検査ノード処理部３６４に出力する。このメッセージｖｉＬは、訂正後の符号語におけるｉＬ番目の符号要素（例えば、ビット）の値の尤度を示す実数の変数である。例えば、対数尤度比Λ（ｒｉＬ）がメッセージｕ0_ｉＬとして生成される。対数尤度比Λ（ｒｉＬ）は、符号語のｉＬ番目のビットの値が「０」である確率と、「１」である確率との比の対数であり、例えば、次式により求められる。
【数１】
2014140111.tif 000003
上式において、ｒは受け取ったリードデータであり、Ｐ（ｒｉＬ＝１｜ｒ）は、そのリードデータにおいてｉＬ番目のビットｒｉＬの値が「１」である確率であり、Ｐ（ｒｉＬ＝０｜ｒ）は、その値が「０」である確率である。
【００６４】
なお、メッセージｕ0_ｉＬは、尤度を示す値であれば、対数尤度比に限定されない。例えば、ｒｉＬの値が「１」または「０」である確率をメッセージｕ0_ｉＬとしてもよい。他のメッセージ（ｖｉＬやｕｊＬなど）についても同様である。低レベル誤り訂正回路３６１において、これらのメッセージは、例えば、符号付きの固定小数点型データにより表わされる。
【００６５】
検査ノード処理部３６４は、メッセージｖｉＬに基づいてパリティ検査を行い、その結果に基づいてメッセージｕｊＬを生成して変数ノード処理部３６２に出力する。ここで、「ｊＬ」は、０乃至（ｎ−ｋ）−１の整数である。また、ｋは符号化対象のデータのサイズである。
【００６６】
変数ノード処理部３６２と検査ノード処理部３６４とは所定の終了条件を満たすまでメッセージを交換する。例えば、一定回数メッセージを交換したときや、対数尤度比の絶対値が閾値を越えたときに終了条件を満たしたと判断される。
【００６７】
終了条件が満たされると、変数ノード処理部３６２は、受け取ったメッセージｕｊＬに基づいて、訂正結果であるメッセージｖｉＬ'を生成して訂正成否判定部３６６に出力する。
【００６８】
訂正成否判定部３６６は、誤りの訂正が成功したか否かを判定するものである。訂正成否判定部３６６は、例えば、検査行列の各行におけるパリティチェックの全てに成功したのであれば、訂正に成功したと判断する。一方、訂正成否判定部３６６は、いずれかのパリティチェックに失敗したのであれば、訂正に失敗したと判断する。なお、訂正成否判定部３６６は、メッセージｖｉＬ'の絶対値の全てが所定の閾値を超えているか否かにより、訂正の成否を判定してもよい。訂正に成功した場合に訂正成否判定部３６６は、メッセージｖｉＬ'に基づいて、誤りを訂正した符号語を生成し、その符号語からパリティを除いた元のデータ（ｋビット）をホストコンピュータ１００へ出力する。また、訂正成否判定部３６６は、訂正に成功したか否かを示す訂正成否情報を高レベル軟判定誤り訂正部３８０に供給する。
【００６９】
図１０は、第１の実施の形態における低レベル誤り訂正回路３６１の一構成例を示す図である。低レベル誤り訂正回路３６１において、変数ノード処理部３６２は、符号語のビット数（すなわち、検査行列Ｈの列数）と同数の変数ノード３６３を備える。また、検査ノード処理部３６４は、パリティのビット数（すなわち、検査行列Ｈの行数）と同数の検査ノード３６５を備える。そして、検査行列Ｈの成分の値に基づいて変数ノード３６３および検査ノード３６５が接続される。具体的には、ｊＬ行ｉＬ列の成分の値が「１」であれば、ｊＬ番目の検査ノード３６５とｉＬ番目の変数ノード３６３とが接続され、「０」であれば、それらのノードは接続されない。
【００７０】
ｉＬ番目の変数ノード３６３は、検査ノード３６５におけるパリティ検査の結果に基づいてリードデータにおけるｉＬ番目のビットの誤りの検出および訂正を行うものである。ｊＬ番目の検査ノード３６５は、検査行列ＨのｊＬ番目の行に対応するパリティ検査を行うものである。
【００７１】
具体的には、ｉＬ番目の変数ノード３６３は、リードデータのｉＬ番目のビットをリードデータバッファ３５０から取得し、そのビットの値に基づいて、メッセージｕ0_iＬを生成する。メッセージｕ0_iＬを対数尤度比とする場合、ｉＬ番目のビットの値が「１」であれば、正の所定値がu0_iＬに設定される。一方、ｉＬ番目のビットの値が「０」であれば、負の所定値がｕ0_iＬに設定される。
【００７２】
メッセージｕ0_iＬを生成した後、変数ノード３６３は、接続された検査ノード３６５の各々からのメッセージｕｊＬを初期値（例えば、「０」）に設定する。そして、変数ノード３６３は、次式を使用して、メッセージｖｉＬを算出し、接続された検査ノード３６５のいずれかに出力する。
【数２】
2014140111.tif 000004
上式において、ｄｖは、検査行列Ｈの列における「１」の値の個数（すなわち、重み）である。
【００７３】
検査ノード３６５は、接続された変数ノード３６３の各々からメッセージｖｉＬを受け取ると、次式を使用してメッセージｕｊＬを算出し、接続された変数ノード３６３のいずれかに出力する。
【数３】
2014140111.tif 000005
【００７４】
上式において、ｍｉｎ｜ｖｉＬ｜は、ｖｉＬの中の最小値を示す。また、ｓｉｇｎ（ｘ）は、入力値ｘに対し、ｘ≧０であれば「１」の値を返し、ｘ＜０であれば「−１」の値を返す関数である。ｄｃは、検査行列Ｈの行における「１」の値の個数（すなわち、重み）である。この式では対数演算が用いられない。一方、ＢＰアルゴリズムでは対数演算を要する。このため、ＢＰアルゴリズムを使用する回路と比較して、低レベル誤り訂正部３６０の回路規模は比較的小さくすることができる。
【００７５】
変数ノード３６３および検査ノード３６５は、所定の終了条件を満たすまで、式２および式３などを使用してメッセージｖｉＬおよびｕｊＬを生成し、それらのメッセージを交換する。
【００７６】
終了条件が満たされた場合には、変数ノード３６３は、次式を使用して、メッセージｖｉＬ'を生成して訂正成否判定部３６６に供給する。訂正成否判定部３６６は、このメッセージｖｉＬ'に基づいて、符号語のｉＬ番目のビットの値を決定する。訂正成否判定部３６６は、例えば、ｖｉＬ'≧０であればｉＬ番目の値を「１」に決定し、ｖｉＬ'＜０であれば、「０」に決定する。これにより、リードデータの誤りが訂正される。
【数４】
2014140111.tif 000006
【００７７】
なお、変数ノード３６３は、式２の演算を、式４と次の式５とに分けて実行することもできる。この場合、変数ノード３６３は、終了条件が満たされていない場合には式５により算出したメッセージｖｉＬを検査ノード３６５に出力する。そして、終了条件が満たされた場合には変数ノード３６３は、式５により算出したメッセージｖｉＬ'を訂正成否判定部３６６に供給する。
ｖｉＬ＝ｖｉＬ'−ｕｄｖ                                            ・・・式５
上式において、ｕdvは、変数ノード３６３に接続されたｄｖ個目の検査ノード３６５からのメッセージである。
【００７８】
図１１は、第１の実施の形態における変数ノード３６３と検査ノード３６５との間のメッセージ交換の一例を示す図である。図１１におけるａは、変数ノード３６３がメッセージｖｉＬを生成するときのメッセージ交換の一例を示す図である。例えば、１番目の変数ノードＶ１と、１、３および５番目の検査ノードＵ１、Ｕ３およびＵ５とが接続されているものとする。この場合、変数ノードＶ１は、読み出されたリードデータに基づいてメッセージｕ0_1を生成し、検査ノードＵ１およびＵ３からメッセージｕ１およびｕ３を受け取ると、これらのメッセージに基づいてメッセージｖ５を生成し、検査ノードＵ５に出力する。
【００７９】
図１１におけるｂは、検査ノード３６５がメッセージｕｊを生成するときのメッセージ交換の一例を示す図である。例えば、１番目の検査ノードＵ１と、１、３、５、６、７および９番目の変数ノードＶ１、Ｖ３、Ｖ５、Ｖ６、Ｖ７およびＶ９とが接続されているものとする。この場合、検査ノードＵ１は、変数ノードＶ３、Ｖ５、Ｖ６、Ｖ７およびＶ９からメッセージｖ３、ｖ５、ｖ６、ｖ７およびｖ９を受け取ると、これらのメッセージに基づいてメッセージｕ１を生成し、変数ノードＶ１に出力する。
【００８０】
［高レベル軟判定誤り訂正部］
図１２は、第１の実施の形態における高レベル軟判定誤り訂正部３８０の一構成例を示す図である。この高レベル軟判定誤り訂正部３８０は、高レベル誤り訂正処理部３８１および訂正成否判定部３８６を備える。
【００８１】
高レベル誤り訂正処理部３８１は、軟判定復号アルゴリズムを使用してリードデータの誤りを訂正するものである。高レベル誤り訂正処理部３８１においては、軟判定復号アルゴリズムとして、例えば、ＢＰアルゴリズムが使用される。ＢＰアルゴリズムが用いられる場合、高レベル誤り訂正処理部３８１は、変数ノード処理部３８２および検査ノード処理部３８４を備える。
【００８２】
高レベル誤り訂正処理部３８１は、訂正に失敗したことを示す訂正成否情報を低レベル誤り訂正部３６０から受け取った場合には、誤り訂正プログラム記憶部３７０から誤り訂正プログラムを読み出して実行する。この誤り訂正プログラムにより、変数ノード処理部３８２および検査ノード処理部３８４における処理が実行される。高レベル誤り訂正処理部３８１において、メッセージは、例えば、符号付きの浮動少数点型データにより表わされる。
【００８３】
変数ノード処理部３８２の構成は、変数ノード３８３が式２の代わりに次の式６を使用する点以外は、低レベル誤り訂正部３６０における変数ノード処理部３６２の構成と同様である。なお、変数ノード３８３は、図１２において省略されている。
【数５】
2014140111.tif 000007
上式は、式１におけるｉＬおよびｉＬの表記をｉＨおよびｊＨに置き換えたものである。
【００８４】
検査ノード処理部３８４は、低レベル誤り訂正部３６０における変数ノード処理部３８２とは異なる処理により、パリティ検査を行うものである。具体的には、検査ノード処理部３８４内の検査ノード３８５は、式３の代わりに次の式７によりメッセージｕｊＨを求める。なお、検査ノード３８５は、図１２において省略されている。
【数６】
2014140111.tif 000008
上式において、ｔａｎｈ（）は双曲線正接関数であり、Πｘは、ｘの総乗である。
【００８５】
この式７は、式８を使用して、次の式９に変形することができる。
ａ×ｂ＝ｅｘｐ(ｌｎ｜ａ｜＋ｌｎ｜ｂ｜)×ｓｉｇｎ(ａ)×ｓｉｇｎ(ｂ)・・・式８
【数７】
2014140111.tif 000009
上式において、ｌｎ（ｘ）はｘの自然対数を意味する。また、ｓｉｇｎ（）は、式３におけるｓｉｇｎ（）と同様の関数である。
【００８６】
ここで、次の式１０に定義した関数を使用して、式７を変形した式９を式１１にさらに変形することができる。検査ノード３８５は、式７の代わりに式１１を使用してメッセージｕｊＨを算出してもよい。
φ（ｘ）＝−ｌｎ｛ｔａｎｈ（ｘ／２）｝                            ・・・式１０
【数８】
2014140111.tif 000010
上式において、ｌｎ（ｘ）はｘの自然対数を意味する。上式におけるｓｉｇｎ（）は、式３におけるｓｉｇｎ（）と同様の関数である。
【００８７】
なお、メッセージｕｊＨは、式７や式１１を使用して求めるほか、それらより簡易な演算によって求めることもできる。例えば、次の式１２に定義する関数Ｒ（ｖ１，ｖ２）の演算結果を、メッセージｖ１およびｖ２の取りうる値ごとに予め計算しておく。そして、その演算結果とメッセージｖ１およびｖ２の組合せとを対応付けたテーブルを予め作成しておき、そのテーブルから読み出した演算結果を、次の式１３に示すように再帰的に使用することにより、メッセージｕｊＨを簡易に求めることができる。
Ｒ(ｖ１，ｖ２)＝２ｔａｎｈ−１｛ｔａｎ(ｖ１／２)ｔａｎ(ｖ２／２)｝  ・・・式１２
ｕｊＨ＝Ｒ(ｖ１，Ｒ(ｖ２，Ｒ(ｖ３・・・Ｒ(ｖｄｃ−２，ｖｄｃ−１))))  ・・・式１３
【００８８】
訂正成否判定部３８６は、誤りの訂正が成功したか否かを判定するものである。訂正成否判定部３８６は、メッセージｖｉＨ'を変数ノード処理部３８２から受け取り、そのメッセージのいずれかがの絶対値が所定の閾値以下である場合、訂正に失敗したと判定する。一方、メッセージｖｉＬ'の全ての絶対値が閾値を越えている場合には、訂正成否判定部３６６は、訂正に成功したと判定する。訂正に成功した場合に訂正成否判定部３８６は、メッセージｖｉＨ'に基づいて、誤りを訂正した符号語を生成し、その符号語からパリティを除いた元のデータ（ｋビット）をホストコンピュータ１００へ出力する。また、訂正成否判定部３８６は、訂正に成功したか否かを示す情報を記載したステータスを生成してホストコンピュータ１００に出力する。
【００８９】
［ホストコンピュータの動作例］
図１３は、第１の実施の形態におけるホストコンピュータ１００の動作の一例を示すフローチャートである。この動作は、例えば、所定のアプリケーションが実行されたときに開始する。ホストコンピュータ１００は、必要に応じてライトコマンドやリードコマンドを発行する（ステップＳ９０１）。ホストコンピュータ１００は、発行したコマンドをメモリコントローラ３００に出力する。発行したコマンドがライトコマンドであれば、ホストコンピュータ１００は、ライトコマンドとともにライトデータをメモリコントローラ３００に出力する（ステップＳ９０２）。
【００９０】
ホストコンピュータ１００は、ステータスを受信したか否かを判断する（ステップＳ９０３）。ステータスを受信していなければ（ステップＳ９０３：Ｎｏ）、ホストコンピュータ１００はステップＳ９０３に戻る。ステータスを受信したのであれば（ステップＳ９０３：Ｙｅｓ）、ホストコンピュータ１００は、ステップＳ９０１に戻る。
【００９１】
［メモリコントローラの動作例］
図１４は、第１の実施の形態におけるメモリコントローラ３００の動作の一例を示すフローチャートである。この動作は、例えば、メモリコントローラ３００に電源が投入されたときに開始する。
【００９２】
メモリコントローラ３００は、ライトコマンドをホストコンピュータ１００から受信したか否かを判断する（ステップＳ９５１）。ライトコマンドを受信したのであれば（ステップＳ９５１：Ｙｅｓ）、メモリコントローラ３００は、ライトデータを符号化して不揮発性メモリ４００に書き込む（ステップＳ９５２）。
【００９３】
ライトコマンドを受信していない場合（ステップＳ９５１：Ｎｏ）、または、ステップＳ９５２の後、メモリコントローラ３００は、リードコマンドをホストコンピュータ１００から受信したか否かを判断する（ステップＳ９５３）。リードコマンドを受信したのであれば（ステップＳ９５３：Ｙｅｓ）、メモリコントローラ３００は、リードデータ（符号語に相当するデータ）を読み出すためのリード処理を実行する（ステップＳ９６０）。リードコマンドを受信していない場合（ステップＳ９５３：Ｎｏ）、または、ステップＳ９６０の後、メモリコントローラ３００は、ステップＳ９５１に戻る。
【００９４】
図１５は、第１の実施の形態におけるリード処理の一例を示すフローチャートである。メモリコントローラ３００は、低レベルアルゴリズムを使用する低レベル誤り訂正処理を実行する（ステップＳ９７０）。メモリコントローラ３００は、低レベル誤り訂正処理において訂正が成功したか否かを判断する（ステップＳ９６１）。
【００９５】
訂正に失敗した場合には（ステップＳ９６１：Ｎｏ）、メモリコントローラ３００は、高レベルアルゴリズムを使用する高レベル軟判定誤り訂正処理を実行する（ステップＳ９８０）。一方、訂正に成功した場合（ステップＳ９６１：Ｙｅｓ）、または、ステップＳ９８０の後、メモリコントローラ３００は、ステータスをホストコンピュータ１００に出力する。また、ステップＳ９７０またはＳ９８０における訂正に成功していれば、ホストコンピュータ１００は、符号語からパリティを除いた元のデータ（ｋビット）とステータスとをホストコンピュータ１００に出力する（ステップＳ９６２）。ステップＳ９６２の後、メモリコントローラ３００は、リード処理を終了する。
【００９６】
図１６は、第１の実施の形態における低レベル誤り訂正処理の一例を示すフローチャートである。メモリコントローラ３００は、不揮発性メモリ４００からリードデータを読み出し（ステップＳ９７１）、リードデータバッファ３５０に保持する（ステップＳ９７２）。メモリコントローラ３００における低レベル誤り訂正部３６０は、誤り訂正能力の低い軟判定復号アルゴリズムを使用して、リードデータの誤りを訂正する（ステップＳ９７３）。ステップＳ９７３の後、メモリコントローラ３００は、低レベル誤り訂正を終了する。
【００９７】
図１７は、第１の実施の形態における高レベル軟判定誤り訂正処理の一例を示すフローチャートである。メモリコントローラ３００は、リードデータバッファ３５０からリードデータを読み出す（ステップＳ９８１）。また、メモリコントローラ３００における高レベル軟判定誤り訂正部３８０は、誤り訂正プログラムを誤り訂正プログラム記憶部３７０から読み出す（ステップＳ９８２）。高レベル軟判定誤り訂正部３８０は、誤り訂正プログラムの実行により、誤り訂正能力の高い軟判定復号アルゴリズムを使用してリードデータの誤りを訂正する（ステップＳ９８３）。ステップＳ９８３の後、メモリコントローラ３００は、高レベル軟判定誤り訂正処理を終了する。
【００９８】
このように、第１の実施の形態によれば、メモリコントローラ３００は、低レベルアルゴリズムによる誤りの訂正が失敗すると高レベルアルゴリズムを使用して誤りを訂正することにより、処理時間の増大を抑制しつつ、誤り訂正能力を向上させることができる。また、高レベルアルゴリズムによる復号をソフトウェアにより実現することにより、回路規模の増大を抑制することができる。
【００９９】
［第１の変形例］
第１の実施の形態では、高レベル軟判定誤り訂正部３８０への入力値は硬判定値であったが、低レベル誤り訂正部３６０が生成した軟判定値を高レベル軟判定誤り訂正部３８０に入力してもよい。軟判定値を入力値とすることにより、硬判定値を入力値とした場合よりも高レベル軟判定誤り訂正部３８０における誤り訂正が容易となる。第１の変形例は、低レベル誤り訂正部３６０が生成した軟判定値を高レベル軟判定誤り訂正部３８０に入力する点において第１の実施の形態と異なる。
【０１００】
図１８は、第１の実施の形態の第１の変形例における誤り訂正部３４０の一構成例を示すブロック図である。第１の変形例の誤り訂正部３４０は、低レベル誤り訂正部３６０がメッセージｖｉＬ'（すなわち、軟判定値）を高レベル軟判定誤り訂正部３８０に出力する点において第１の実施の形態と異なる。
【０１０１】
図１９は、第１の実施の形態の第１の変形例における低レベル誤り訂正部３６０の一例を示すブロック図である。第１の変形例における低レベル誤り訂正部３６０において、低レベル誤り訂正回路３６１は、メッセージｖｉＬ'を訂正成否判定部３６６に加えて、高レベル軟判定誤り訂正部３８０にも出力する。
【０１０２】
図２０は、第１の実施の形態の第１の変形例における高レベル軟判定誤り訂正部３８０の一例を示すブロック図である。第１の変形例における変数ノード処理部３８２には、リードデータの代わりにメッセージｖｉＬ'が入力される。変数ノード処理部３８２は、メッセージｖｉＬ'をメッセージｕｉ_０Ｈとして式６に例示した演算を実行する。
【０１０３】
［第２の変形例］
第１の実施の形態では、メモリコントローラ３００は、訂正成否情報をホストコンピュータ１００に出力していなかったが、この訂正成否情報をホストコンピュータ１００に出力してもよい。第２の変形例のメモリコントローラ３００は、訂正成否情報をホストコンピュータ１００に出力する点において第１の実施の形態と異なる。
【０１０４】
図２１は、第１の実施の形態の第２の変形例における誤り訂正部３４０の一構成例を示すブロック図である。第２の変形例の低レベル誤り訂正部３６０は、訂正成否情報をホストコンピュータ１００にも出力する点において第１の実施の形態と異なる。
【０１０５】
図２２は、第１の実施の形態の第２の変形例におけるホストコンピュータ１００の動作の一例を示すフローチャートである。第２の変形例のホストコンピュータ１００は、ステップＳ９１１およびＳ９１２をさらに実行する点において第１の実施の形態と異なる。
【０１０６】
ホストコンピュータ１００は、ステップＳ９０２の後、訂正失敗を示す訂正成否情報を受信したか否かを判断する（ステップＳ９１１）。訂正失敗を示す訂正成否情報を受信した場合には（ステップＳ９１１：Ｙｅｓ）、ホストコンピュータ１００は、メモリコントローラ３００で訂正中のデータの読出しを待たずに、必要に応じて他の処理を実行する（ステップＳ９１２）。訂正失敗を示す訂正成否情報を受信しなかった場合（ステップＳ９１１：Ｎｏ）、または、ステップＳ９１２の後、ホストコンピュータ１００は、ステップＳ９０３を実行する。
【０１０７】
誤り訂正能力の高いアルゴリズムによる訂正は時間がかかるため、誤り訂正能力の低いアルゴリズムによる訂正が失敗した場合、図２２に例示したようにホストコンピュータ１００は、訂正に要する予測時間内に別の処理を実行することができる。
【０１０８】
図２３は、第１の実施の形態の第２の変形例におけるリード処理の一例を示すフローチャートである。第２の変形例のリード処理は、ステップＳ９６３をさらに実行する点において第１の実施の形態と異なる。
【０１０９】
低レベルアルゴリズムによる訂正に失敗した場合（ステップＳ９６１：Ｎｏ）、メモリコントローラ３００は、訂正失敗を示す訂正成否情報を生成してホストコンピュータ１００へ出力する（ステップＳ９６３）。そして、メモリコントローラ３００は、高レベル軟判定誤り訂正処理を実行する（ステップＳ９８０）。
【０１１０】
＜２．第２の実施の形態＞
［誤り訂正部の構成例］
第１の実施の形態では、メモリコントローラ３００は、低レベルアルゴリズムにより誤り訂正が失敗すると直ちに高レベルアルゴリズムによる誤り訂正を開始していた。しかし、メモリコントローラ３００は、ホストコンピュータ１００の制御に従って、高レベルアルゴリズムによる誤り訂正を開始してもよい。第２の実施の形態のメモリコントローラ３００は、ホストコンピュータ１００の制御に従って、高レベルアルゴリズムによる誤り訂正を開始する点において第１の実施の形態と異なる。
【０１１１】
図２４は、第２の実施の形態における誤り訂正部３４０の一構成例を示すブロック図である。第２の実施の形態の低レベル誤り訂正部３６０は、訂正の成否を示す訂正成否情報をホストコンピュータ１００にも出力する点において第１の実施の形態と異なる。また、第２の実施の形態の高レベル軟判定誤り訂正部３８０は、訂正開始コマンドに従って誤り訂正を開始する点において第１の実施の形態と異なる。この訂正開始コマンドは、誤り訂正を開始することを高レベル軟判定誤り訂正部３８０に指示するコマンドであり、ホストコンピュータ１００により発行される。
【０１１２】
［ホストコンピュータの動作例］
図２５は、第２の実施の形態におけるホストコンピュータ１００の動作の一例を示すフローチャートである。第２の実施の形態のホストコンピュータ１００は、ステップＳ９１１、Ｓ９２１およびＳ９２２をさらに実行する点において第１の実施の形態と異なる。
【０１１３】
ホストコンピュータ１００は、ステップＳ９０２の後、訂正失敗を示す訂正成否情報を受信したか否かを判断する（ステップＳ９１１）。訂正失敗を示す訂正成否情報を受信した場合には（ステップＳ９１１：Ｙｅｓ）、ホストコンピュータ１００は、訂正開始コマンドを含む各種のコマンドの実行順序のスケジューリングを行う（ステップＳ９２１）。そして、ホストコンピュータ１００は、スケジュールに基づいて訂正開始コマンドをメモリコントローラ３００に出力する（ステップＳ９２２）。訂正失敗を示す訂正成否情報を受信しなかった場合（ステップＳ９１１：Ｎｏ）、または、ステップＳ９２２の後、ホストコンピュータ１００は、ステップＳ９０３を実行する。
【０１１４】
［メモリコントローラの動作例］
図２６は、第２の実施の形態におけるリード処理の一例を示すフローチャートである。第２の実施の形態のリード処理は、ステップＳ９６３およびＳ９６４をさらに実行する点において第１の実施の形態と異なる。
【０１１５】
低レベルアルゴリズムによる訂正に失敗した場合（ステップＳ９６１：Ｎｏ）、メモリコントローラ３００は、訂正失敗を示す訂正成否情報を生成してホストコンピュータ１００へ出力する（ステップＳ９６３）。そして、メモリコントローラ３００は、訂正開始コマンドをホストコンピュータ１００から受信したか否かを判断する（ステップＳ９６４）。訂正開始コマンドを受信していなければ（ステップＳ９６４：Ｎｏ）、メモリコントローラ３００は、ステップＳ９６４に戻る。訂正開始コマンドを受信したのであれば（ステップＳ９６４：Ｙｅｓ）、メモリコントローラ３００は、高レベル軟判定誤り訂正処理を実行する（ステップＳ９８０）。
【０１１６】
このように第２の実施の形態によれば、ホストコンピュータ１００は、高レベルアルゴリズムによる誤り訂正の開始のタイミングを制御することができるため、処理を最適化することができる。例えば、順に読み出す必要のないデータ＃１、＃２のうちデータ＃１の読出しにおいて低レベルアルゴリズムによる誤り訂正が失敗した場合を考える。この場合、情報処理システムは、高レベルアルゴリズムによるデータ＃１の誤り訂正のタイミングを遅らせて、低レベルアルゴリズムによるデータ＃２の読出しと誤り訂正とを先に行うことができる。これにより、スループットが向上する。
【０１１７】
［第１の変形例］
第２の実施の形態では、メモリコントローラ３００は、ホストコンピュータ１００の制御に従って高レベルアルゴリズムによる誤り訂正を開始していた。しかし、ホストコンピュータ１００の制御に従って高レベルアルゴリズムによる誤り訂正を中断し、その後に再開してもよい。第２の実施の形態のメモリコントローラ３００は、ホストコンピュータ１００の制御に従って、高レベルアルゴリズムによる誤り訂正を中断および再開する点において第２の実施の形態と異なる。
【０１１８】
図２７は、第２の実施の形態の第１の変形例における誤り訂正部３４０の一構成例を示すブロック図である。第１の変形例の高レベル軟判定誤り訂正部３８０は、アボートコマンドに従って誤り訂正を中断する点において第２の実施の形態と異なる。このアボートコマンドは、誤り訂正を中断することを高レベル軟判定誤り訂正部３８０に指示するコマンドであり、ホストコンピュータ１００により発行される。また、第１の変形例の高レベル軟判定誤り訂正部３８０は、訂正再開コマンドに従って、中断した誤り訂正を再開する点において第２の実施の形態と異なる。この訂正再開コマンドは、誤り訂正を再開することを高レベル軟判定誤り訂正部３８０に指示するコマンドであり、ホストコンピュータ１００により発行される。
【０１１９】
図２８は、第２の実施の形態の第１の変形例におけるホストコンピュータ１００の動作の一例を示すフローチャートである。第１の変形例のホストコンピュータ１００は、ステップＳ９２１およびＳ９２２の代わりにステップＳ９２３、Ｓ９２４、Ｓ９９１およびＳ９９２を実行する点において第２の実施の形態と異なる。
【０１２０】
訂正失敗を示す訂正成否情報を受信した場合には（ステップＳ９１１：Ｙｅｓ）、ホストコンピュータ１００は、訂正中のデータのリード処理に対する割込みが発生したか否かを判断する（ステップＳ９２３）。割込みが発生した場合には（ステップＳ９２３：Ｙｅｓ）、ホストコンピュータ１００は、アボートコマンドを発行してメモリコントローラ３００に出力し（ステップＳ９２４）、割込み処理が終了したか否かを判断する（ステップＳ９９１）。割込み処理が終了していなければ（ステップＳ９９１：Ｎｏ）、ホストコンピュータ１００は、ステップＳ９９１に戻る。割込み処理が終了したのであれば（ステップＳ９９１：Ｙｅｓ）、ホストコンピュータ１００は、訂正再開コマンドを発行してメモリコントローラ３００に出力する（ステップＳ９９２）。訂正失敗を示す訂正成否情報を受信しなかった場合（ステップＳ９１１：Ｎｏ）、割込みが発生しなかった場合（ステップＳ９２３：Ｎｏ）、または、ステップＳ９９２の後、ホストコンピュータ１００は、ステータスを受信したか否かを判断する（ステップＳ９０３）。
【０１２１】
ステータスを受信していなければ（ステップＳ９０３：Ｎｏ）、ホストコンピュータ１００はステップＳ９１１に戻る。ステータスを受信したのであれば（ステップＳ９０３：Ｙｅｓ）、ホストコンピュータ１００は、ステップＳ９０１に戻る。
【０１２２】
図２９は、第２の実施の形態の第１の変形例における高レベル軟判定誤り訂正処理の一例を示すフローチャートである。第１の変形例の高レベル軟判定誤り訂正処理は、ステップＳ９８４およびＳ９８５をさらに実行する点において第２の実施の形態と異なる。
【０１２３】
メモリコントローラ３００は、ステップＳ９８３の実行後、訂正処理が終了したか否かを判断する（ステップＳ９８４）。訂正処理が終了していなければ（ステップＳ９８４：Ｎｏ）、メモリコントローラ３００は、アボートコマンドを受信したか否かを判断する（ステップＳ９８５）。アボートコマンドを受信した場合（ステップＳ９８５：Ｙｅｓ）、メモリコントローラ３００は、訂正再開コマンドを受信したか否かを判断する（ステップＳ９９３）。訂正再開コマンドを受信していなければ（ステップＳ９９３：Ｎｏ）、メモリコントローラ３００は、ステップＳ９９３に戻る。訂正再開コマンドを受信したのであれば（ステップＳ９９３：Ｙｅｓ）、メモリコントローラ３００は、高レベル軟判定誤り訂正処理を再開する（ステップＳ９９４）。アボートコマンドを受信していない場合（ステップＳ９８５：Ｎｏ）、または、ステップＳ９９４の後、メモリコントローラ３００は、ステップＳ９８４に戻る。訂正処理が終了したのであれば（ステップＳ９８４：Ｙｅｓ）、メモリコントローラ３００は、高レベル軟判定誤り訂正処理を終了する。
【０１２４】
［第２の変形例］
第２の実施の形態では、情報処理システムは、データの種類に関らず、高レベルアルゴリズムによる誤り訂正を行っていたが、データの種類によっては高レベルアルゴリズムによる誤り訂正を行わなくてもよい場合がある。例えば、動画データや画像データの場合、多少の誤りがあるデータを再生しても観賞上は問題が少ない。このため、高レベルアルゴリズムによる誤り訂正を行う必要性に乏しい。一方、データベース内のデータやテキストデータは、時間がかかっても誤りを完全に訂正することが望ましい。このため、高レベルアルゴリズムによる誤り訂正を行う必要性が高い。第２の変形例の情報処理システムは、データの種類に基づいて高レベルアルゴリズムによる誤り訂正を行うか否かを判断する点において第２の実施の形態と異なる。
【０１２５】
図３０は、第２の実施の形態の第２の変形例における誤り訂正部３４０の一構成例を示すブロック図である。第１の変形例の高レベル軟判定誤り訂正部３８０は、イネーブル信号に従って誤り訂正を行う点において第２の実施の形態と異なる。このイネーブル信号は、高レベル軟判定誤り訂正部３８０における誤り訂正を行うか否かを示す信号であり、ホストコンピュータ１００により生成される。イネーブル信号は、例えば、誤り訂正を行う場合にオンに設定され、そうでない場合にオフに設定されるものとする。
【０１２６】
図３１は、第２の実施の形態の第２の変形例におけるホストコンピュータ１００の動作の一例を示すフローチャートである。第２の変形例のホストコンピュータ１００は、ステップＳ９１１、Ｓ９２１およびＳ９２２の代わりにステップＳ９２５乃至Ｓ９２７を実行する点において第２の実施の形態と異なる。
【０１２７】
ホストコンピュータ１００は、コマンドを発行する（ステップＳ９０１）。ただし、ステップＳ９０１においてリードコマンドを発行する際、ホストコンピュータ１００は、読み出す対象のデータの種類に基づいてイネーブル信号を生成する。データの種類は、例えば、実行中のアプリケーションにより判断される。より具体的には、アプリケーションが動画を再生するためのものであれば、読み出すデータは動画データであると判断され、オフに設定されたイネーブル信号が生成される。また、アプリケーションがデータベースを管理するためのものであれば、読み出すデータはデータベース内のデータであると判断され、オンに設定されたイネーブル信号が生成される。
【０１２８】
なお、データの種類を、そのデータが記録された不揮発性メモリ４００内の領域により判断することもできる。例えば、ＯＳ（Operation System）が記録されている領域からデータを読み出す場合、ホストコンピュータ１００は、イネーブル信号をオンにし、それ以外の領域からデータを読み出す場合にイネーブル信号をオフにする。
【０１２９】
ホストコンピュータ１００は、発行したコマンドがライトコマンドであるか否かを判断する（ステップＳ９２５）。ライトコマンドである場合（ステップＳ９２５：Ｙｅｓ）、ホストコンピュータ１００は、ライトコマンドおよびライトデータをメモリコントローラ３００に出力する（ステップＳ９２６）。
【０１３０】
一方、リードコマンドである場合（ステップＳ９２５：Ｎｏ）、ホストコンピュータ１００は、リードコマンドおよびイネーブル信号をメモリコントローラ３００に出力する（ステップＳ９２７）。ステップＳ９２６またはＳ９２７の後、ホストコンピュータ１００は、ステップＳ９０３を実行する。
【０１３１】
なお、リードコマンドを生成するときにおいて、イネーブル信号を生成する構成としているが、イネーブル信号を生成するタイミングはリード時に限定されない。例えば、ホストコンピュータ１００は、ライト処理においてイネーブル信号を生成して、符号化したデータとともにイネーブル信号を不揮発性メモリ４００に保持させておいてもよい。
【０１３２】
図３２は、第２の実施の形態の第２の変形例におけるリード処理の一例を示すフローチャートである。第２の変形例のリード処理は、ステップＳ９６３およびＳ９６４の代わりにステップＳ９６５を実行する点において第２の実施の形態と異なる。
【０１３３】
低レベルアルゴリズムによる訂正に失敗した場合（ステップＳ９６１：Ｎｏ）、メモリコントローラ３００は、イネーブル信号がオンであるか否かを判断する（ステップＳ９６５）。イネーブル信号がオンである場合には（ステップＳ９６５：Ｙｅｓ）、メモリコントローラ３００は、高レベル軟判定誤り訂正処理を実行する（ステップＳ９８０）。イネーブル信号がオフである場合（ステップＳ９６５：Ｎｏ）、または、ステップＳ９８０の後、メモリコントローラ３００は、ステップＳ９６２を実行する。
【０１３４】
［第３の変形例］
第２の実施の形態では、情報処理システムは、１種類の高レベルアルゴリズムを使用していたが、複数の種類の高レベルアルゴリズムの中から選択したアルゴリズムを使用してもよい。第３の変形例の情報処理システムは、複数の高レベルアルゴリズムの中から選択したアルゴリズムを使用する点において第２の実施の形態と異なる。
【０１３５】
図３３は、第２の実施の形態の第３の変形例におけるホストコンピュータ１００の動作の一例を示すフローチャートである。第３の変形例のホストコンピュータ１００は、ステップＳ９２１およびＳ９２２の代わりにステップＳ９２８およびＳ９２９を実行する点において第２の実施の形態と異なる。
【０１３６】
訂正失敗を示す訂正成否情報を受信した場合には（ステップＳ９１１：Ｙｅｓ）、ホストコンピュータ１００は、データの種類に基づいて、誤り訂正能力の異なる複数の高レベルアルゴリズムの中から、いずれかを選択する。例えば、動画データであれば、誤り訂正能力が低い高レベルアルゴリズムが選択される。また、データベース内のデータであれば、誤り訂正能力の高い高レベルアルゴリズムが選択される。高レベルアルゴリズムとしては、ＢＰアルゴリズム、Ｌａｙｅｒｅｄ  ＢＰアルゴリズム、Ｓｈｕｆｆｌｅｄ  ＢＰアルゴリズム、Ｉｍｐｒｏｖｅｄ  ＢＰアルゴリズム、線形計画法などが用意される（ステップＳ９２８）。ホストコンピュータ１００は、選択したアルゴリズムに対応する誤り訂正プログラムを指定する訂正開始コマンドを発行し、メモリコントローラ３００に出力する（ステップＳ９２９）。ステップＳ９２９の後、ホストコンピュータ１００は、ステップＳ９０３を実行する。
【０１３７】
なお、ホストコンピュータ１００は、訂正開始コマンドとは別のコマンドまたは信号により、アルゴリズムを指定してもよい。
【０１３８】
図３４は、第２の実施の形態の第３の変形例における高レベル軟判定誤り訂正処理の一例を示すフローチャートである。第３の変形例の高レベル軟判定誤り訂正処理は、ステップＳ９８２の代わりにステップＳ９８６を実行する点において第２の実施の形態と異なる。
【０１３９】
メモリコントローラ３００は、リードデータバッファ３５０からリードデータを読み出す（ステップＳ９８１）。高レベル軟判定誤り訂正部３８０は、ホストコンピュータ１００により指定された誤り訂正プログラムを誤り訂正プログラム記憶部３７０から読み出し（ステップＳ９８６）、ステップＳ９８３を実行する。
【０１４０】
＜３．第３の実施の形態＞
［ホストコンピュータの構成例］
第１の実施の形態では、メモリコントローラ３００が高レベル軟判定誤り訂正処理を実行していたが、この処理をホストコンピュータ１００が実行することもできる。第３の実施の形態の情報処理システムは、ホストコンピュータ１００が高レベル軟判定誤り訂正処理を実行する点において第１の実施の形態と異なる。
【０１４１】
図３５は、第３の実施の形態におけるホストコンピュータ１００の一構成例を示すブロック図である。このホストコンピュータ１００は、符号語取得部１１０、制御部１２０、リードデータバッファ１３０、高レベル軟判定誤り訂正部１４０および誤り訂正プログラム記憶部１５０を備える。
【０１４２】
符号語取得部１１０は、メモリコントローラ３００が誤り訂正に失敗したときにメモリコントローラ３００からリードデータ（符号語に相当するデータ）を取得するものである。具体的には、符号語取得部１１０は、メモリコントローラ３００から、誤り訂正に成功したか否かを示す訂正成否情報を受け取る。この訂正成否情報が訂正の失敗を示すものであれば、符号語取得部１１０は、訂正に失敗したリードデータにかかるアドレスを指定した符号語出力コマンドを発行してメモリコントローラ３００に出力する。この符号語出力コマンドは、メモリコントローラ３００に対して、データおよびパリティからなるリードデータをホストコンピュータ１００へ出力するように指示するコマンドである。
【０１４３】
メモリコントローラ３００は、リードコマンドに対して符号語から除いてパリティを除いて元のデータ（ｋビット）をホストコンピュータ１００に出力する。一方、符号語出力コマンドに対しては、メモリコントローラ３００は、パリティを除かないでリードデータ（ｎビット）をそのまま出力する。符号語取得部１１０は、メモリコントローラ３００からリードデータを受け取り、リードデータバッファ１３０に保持させる。
【０１４４】
制御部１２０は、ホストコンピュータ１００全体を制御するものである。この制御部１２０は、ユーザの操作に従って様々なアプリケーションを実行し、ライトコマンドやリードコマンドを発行する。また、制御部１２０は、ライトコマンドを発行した場合、そのライトコマンドおよびデータをストレージ２００に出力する。一方、リードコマンドを発行した場合、制御部１２０は、メモリコントローラ３００または高レベル軟判定誤り訂正部１４０から、誤りが訂正されたデータを受け取って処理する。また、制御部１２０は、メモリコントローラ３００からステータスを受け取る。
【０１４５】
リードデータバッファ１３０は、符号語取得部１１０により取得されたリードデータを保持するものである。
【０１４６】
高レベル軟判定誤り訂正部１４０の構成は、第１の実施の形態におけるメモリコントローラ３００内の高レベル軟判定誤り訂正部３８０と同様である。高レベル軟判定誤り訂正部１４０は、訂正した符号語からパリティを除いた元のデータ（ｋビット）をリードデータとして制御部１２０に供給する。
【０１４７】
誤り訂正プログラム記憶部１５０の構成は、第１の実施の形態におけるメモリコントローラ３００内の誤り訂正プログラム記憶部３７０と同様である。
【０１４８】
［メモリコントローラの構成例］
図３６は、第３の実施の形態におけるメモリコントローラ３００の一構成例を示すブロック図である。第３の実施の形態のメモリコントローラ３００の構成は、符号語出力部３９０をさらに備える点において第１の実施の形態と異なる。
【０１４９】
符号語出力部３９０は、符号語出力コマンドに従って、リードデータ（ｎビット）を不揮発性メモリ４００から読み出してホストコンピュータ１００に出力するものである。
【０１５０】
また、第３の実施の形態の誤り訂正部３４０は、訂正成否情報をホストコンピュータ１００にさらに出力する点において第１の実施の形態と異なる。
【０１５１】
［誤り訂正部の構成例］
図３７は、第３の実施の形態における誤り訂正部３４０の一構成例を示すブロック図である。第３の実施の形態の誤り訂正部３４０は、誤り訂正プログラム記憶部３７０および高レベル軟判定誤り訂正部３８０を備えない点において第１の実施の形態と異なる。また、第３の実施の形態の低レベル誤り訂正部３６０は、訂正成否情報をホストコンピュータ１００に出力する。
【０１５２】
［ホストコンピュータの動作例］
図３８は、第３の実施の形態におけるホストコンピュータ１００の動作の一例を示すフローチャートである。第３の実施の形態のホストコンピュータ１００は、ステップＳ９１１、Ｓ９３１、Ｓ９３２およびステップＳ９８０をさらに実行する点において第１の実施の形態と異なる。
【０１５３】
ホストコンピュータ１００は、ステップＳ９０２の後、訂正失敗を示す訂正成否情報を受信したか否かを判断する（ステップＳ９１１）。訂正失敗を示す訂正成否情報を受信した場合には（ステップＳ９１１：Ｙｅｓ）、ホストコンピュータ１００は、誤り訂正に失敗したリードデータにかかるアドレスを指定した符号語出力コマンドを発行する。そして、ホストコンピュータ１００は、その符号語出力コマンドをメモリコントローラ３００に出力する（ステップＳ９３１）。ホストコンピュータ１００は、メモリコントローラ３００により読み出されたリードデータをリードデータバッファ１３０に保持させる（ステップＳ９３２）。ホストコンピュータ１００は、高レベル軟判定誤り訂正処理を実行し（ステップＳ９８０）、ステップＳ９０１に戻る。
【０１５４】
訂正失敗を示す訂正成否情報を受信しなかった場合には（ステップＳ９１１：Ｎｏ）、ホストコンピュータ１００は、ステップＳ９０３を実行する。
【０１５５】
［メモリコントローラの動作例］
図３９は、第３の実施の形態におけるメモリコントローラ３００の動作の一例を示すフローチャートである。第３のメモリコントローラ３００は、ステップＳ９５４およびＳ９５５をさらに実行する点において第１の実施の形態と異なる。
【０１５６】
リードコマンドを受信していない場合（ステップＳ９５３：Ｎｏ）、または、ステップＳ９６０の後、メモリコントローラ３００は、符号語出力コマンドを受信したか否かを判断する（ステップＳ９５４）。符号語出力コマンドを受信した場合には（ステップＳ９５４：Ｙｅｓ）、メモリコントローラ３００は、符号語出力コマンドに従ってリードデータ（ｎビット）を不揮発性メモリ４００から読み出し、ホストコンピュータ１００に出力する（ステップＳ９５５）。符号語出力コマンドを受信していない場合（ステップＳ９５４：Ｎｏ）、または、ステップＳ９５５の後、メモリコントローラ３００はステップＳ９５１に戻る。
【０１５７】
図４０は、第３の実施の形態におけるリード処理の一例を示すフローチャートである。第３の実施の形態のリード処理は、ステップＳ９８０の代わりにステップＳ９６３を実行する点において第１の実施の形態と異なる。
【０１５８】
訂正に成功した場合（ステップＳ９６１：Ｙｅｓ）、メモリコントローラ３００は、符号語からパリティを除いた元のデータ（ｋビット）とステータスとをホストコンピュータ１００に出力する（ステップＳ９６２）。一方、訂正に失敗した場合（ステップＳ９６１：Ｎｏ）、メモリコントローラ３００は、訂正失敗を示す訂正成否情報をホストコンピュータ１００に出力する（ステップＳ９６３）。ステップＳ９６２またはＳ９６３の後、メモリコントローラ３００はリード処理を終了する。
【０１５９】
このように、第３の実施の形態によれば、ホストコンピュータ１００が高レベル軟判定誤り訂正処理を実行するため、高レベル軟判定誤り訂正処理においてメモリコントローラ３００より豊富なリソースを利用することができる。
【０１６０】
＜４．第４の実施の形態＞
［ホストコンピュータの構成例］
第３の実施の形態では、ホストコンピュータ１００は、高レベル軟判定誤り訂正部１４０に硬判定値を入力していたが、軟判定値を入力することにより誤り訂正がより容易になる。第４の実施の形態のホストコンピュータ１００は、軟判定値を生成して高レベル軟判定誤り訂正部１４０に入力する点において第３の実施の形態と異なる。
【０１６１】
図４１は、第４の実施の形態におけるホストコンピュータ１００の一構成例を示すブロック図である。第４の実施の形態のホストコンピュータ１００は、軟判定値生成部１６０をさらに備える点において第３の実施の形態と異なる。
【０１６２】
また、第４の実施の形態の符号語取得部１１０は、訂正失敗を示す訂正成否情報を受信すると、訂正停止信号を生成して一定期間の間、ストレージ２００へ出力する。また、ホストコンピュータ１００は、訂正停止信号が出力されている間に、符号語出力コマンドをストレージ２００に一定の周期で複数回出力する。
【０１６３】
ここで、訂正停止信号は、低レベル誤り訂正処理を一定期間停止するようにメモリコントローラ３００に指示する信号である。また、符号語出力コマンドが出力される周期は、例えば、ランダムテレグラフノイズなどによりデータの値が変動する周期である。符号語取得部１１０は、複数回取得したリードデータのそれぞれをリードデータバッファ１３０に保持させる。
【０１６４】
軟判定値生成部１６０は、複数回読み出されたリードデータから軟判定値を生成するものである。この軟判定値生成部１６０は、リードデータバッファ１３０に保持された複数のリードデータのそれぞれに基づいて、各々のビットが「１」または「０」となる確率に応じた軟判定値を生成する。ここで、不揮発性メモリにおいては、データの値が時間的に変動するノイズであるランダムテレグラフノイズが生じることがある。このようなノイズが生じるときに、異なるタイミングで同じデータを複数回読み出すと、それらのデータの値が異なるものになることがある。これらのデータの値の統計をとることにより、各々のビットが「１」または「０」となる確率が求められる。例えば、同じリードデータが読み出された回数が１０回であり、そのうち最初のビットの値が「１」となるリードデータが読み出された回数が９回である場合、最初のビットが「１」である確率は０．９である。一方、最初のビットが「０」である確率は０．１である。軟判定値として対数尤度比を使用する場合、式１から、ｌｎ９（≒２．２）の値が軟判定値として求められる。軟判定値生成部１６０は、リードデータの全てのビットの軟判定値を求め、それらの軟判定値からなる軟判定値データを生成して高レベル軟判定誤り訂正部１４０に供給する。
【０１６５】
高レベル軟判定誤り訂正部１４０は、軟判定値データにおける軟判定値を式６におけるメッセージｕ０_ｉＨとして使用し、誤り訂正を行う。
【０１６６】
なお、第１の実施の形態に例示したようにメモリコントローラ３００が高レベルアルゴリズムによる誤り訂正を行う構成において、第４の実施の形態の構成を適用することもできる。この場合、メモリコントローラ３００に軟判定値生成部１６０が設けられる。
【０１６７】
図４２は、第４の実施の形態におけるリードデータおよび軟判定値の一例を示す図である。メモリコントローラ３００がアドレスＡからリードデータを読み出し、その誤り訂正に失敗した場合を考える。
【０１６８】
この場合、ホストコンピュータ１００が、訂正停止信号を生成し、そのアドレスＡを指定する符号語出力コマンドを複数回（例えば、３回）メモリコントローラ３００に出力する。メモリコントローラ３００は、複数回、アドレスＡからリードデータを読み出し、誤り訂正をせずにホストコンピュータ１００に出力する。
【０１６９】
図４２におけるａは、アドレスＡから１回目に読み出されたリードデータ＃１の一例である。符号語の符号長はｎビットであるものとする。図４２におけるｂは、アドレスＡから２回目に読み出されたリードデータ＃２の一例であり、同図におけるｃは、アドレスＡから３回目に読み出されたリードデータ＃３の一例である。図４２におけるｄは、リードデータ＃１乃至＃３から生成された軟判定値データの一例である。軟判定値データは、例えば、ｎ個の浮動少数点型データからなるデータである。
【０１７０】
例えば、リードデータ＃１乃至＃３の０番目のビットの値が、いずれも「０」である場合、０番目のビットが「０」となる確率は１．０であるから、式１より、そのビットの値として負の無限大の値が得られる。この場合、符号付きの浮動小数点型データで表現される数値範囲内の最小値が軟判定値として生成される。また、リードデータ＃１の１番目のビットが「１」であり、リードデータ＃２および＃３の１番目のビットの値が「０」である場合、そのビットが「１」となる確率は１／３である。この場合、式１より、１番目のビットの軟判定値としてｌｎ２（≒０．７）が生成される。同様にして、ｎビットのそれぞれの軟判定値が生成される。これらのｎ個の軟判定値からなるデータが軟判定値データとして生成される。
【０１７１】
なお、ホストコンピュータ１００は、複数回読み出したデータから軟判定値データを取得しているが、他の方法で軟判定値を取得してもよい。例えば、不揮発性メモリ４００におけるメモリセルがＡ／Ｄ（Analog to Digital）コンバータを有し、メモリセルに保持されたデータの値を軟判定値として読み出し、Ａ／Ｄ変換して出力する構成であってもよい。ホストコンピュータ１００は、メモリセルから読み出された軟判定値を取得して、誤り訂正処理を行う。
【０１７２】
［メモリコントローラの構成例］
図４３は、第４の実施の形態におけるメモリコントローラ３００の一構成例を示すブロック図である。第３の実施の形態のリード処理部３３０は、リードコマンドまたは符号語出力コマンドを受け取った場合には不揮発性メモリ４００からリードデータを読み出して誤り訂正部３４０に供給する。誤り訂正部３４０は、ホストコンピュータ１００から訂正停止信号が出力されている間において、リードデータに対して誤り訂正を行わずにホストコンピュータ１００に出力する。
【０１７３】
［ホストコンピュータの動作例］
図４４は、第４の実施の形態におけるホストコンピュータ１００の動作の一例を示すフローチャートである。第４の実施の形態のホストコンピュータ１００は、ステップＳ９３１およびＳ９３２の代わりに、ステップＳ９４１乃至９４５を実行する点において第３の実施の形態と異なる。
【０１７４】
訂正失敗を示す訂正成否情報を受信した場合には（ステップＳ９１１：Ｙｅｓ）、ホストコンピュータ１００は、訂正停止信号を生成し、メモリコントローラ３００への訂正停止信号の出力を開始する（ステップＳ９４１）。そして、ホストコンピュータ１００は、誤り訂正に失敗したリードデータが記録されているアドレスを指定した符号語出力コマンドを発行する。そして、メモリコントローラ３００は、リードデータを前回読み出したときから一定の周期が経過したときに、符号語出力コマンドをメモリコントローラ３００に出力する（ステップＳ９４２）。ホストコンピュータ１０は、メモリコントローラ３００により読み出されたリードデータをリードデータバッファ１３０に保持させる（ステップＳ９４３）。
【０１７５】
ホストコンピュータ１００は、リードデータの読出し回数が所定回数に達したか否かを判断する（ステップＳ９４４）。リードデータの読出し回数が所定回数未満である場合（ステップＳ９４４：Ｎｏ）、ホストコンピュータ１００はステップＳ９４２に戻る。リードデータの読出し回数が所定回数に達した場合（ステップＳ９４４：Ｙｅｓ）、ホストコンピュータ１００は、各々のリードデータから、リードデータの各々のビットの軟判定値を示す軟判定値データを生成する（ステップＳ９４５）。ホストコンピュータ１００は、軟判定値を入力値とする高レベル軟判定誤り訂正処理を実行する（ステップＳ９８０）。
【０１７６】
図４５は、第４の実施の形態における高レベル軟判定誤り訂正処理の一例を示すフローチャートである。第４の実施の形態の高レベル軟判定誤り訂正処理は、ステップＳ９８１の代わりにステップＳ９８７を実行する点において第１の実施の形態と異なる。
【０１７７】
ホストコントローラ１００は、生成した軟判定値データを保持し（ステップＳ９８７）、その軟判定値データを使用してステップＳ９８２およびＳ９８３を実行する。
【０１７８】
［メモリコントローラの動作例］
図４６は、第４の実施の形態におけるメモリコントローラ３００の動作の一例を示すフローチャートである。第４の実施の形態のメモリコントローラ３００は、ステップＳ９５４をさらに実行する点において第１の実施の形態と異なる。
【０１７９】
リードコマンドを受信していない場合（ステップＳ９５３：Ｎｏ）、メモリコントローラ３００は、符号語出力コマンドを受信したか否かを判断する（ステップＳ９５４）。リードコマンドを受信した場合（ステップＳ９５３：Ｙｅｓ）、または、符号語出力コマンドを受信した場合（ステップＳ９５４：Ｙｅｓ）、メモリコントローラ３００はリード処理を実行する（ステップＳ９６０）。符号語出力コマンドを受信していない場合（ステップＳ９５４：Ｎｏ）、または、ステップＳ９６０の後、メモリコントローラ３００はステップＳ９５１に戻る。
【０１８０】
図４７は、第４の実施の形態におけるリード処理の一例を示すフローチャートである。第４の実施の形態のリード処理は、ステップＳ９８０の代わりにステップＳ９６３、Ｓ９６６およびＳ９６７を実行する点において第１の実施の形態と異なる。
【０１８１】
メモリコントローラ３００は、訂正停止信号を受信したか否かを判断する（ステップＳ９６６）。訂正停止信号を受信した場合（ステップＳ９６６：Ｙｅｓ）、メモリコントローラ３００は、符号語出力コマンドに従ってリードデータを読み出してホストコンピュータ１００に出力する（ステップＳ９６７）。一方、訂正停止信号を受信していなければ（ステップＳ９６６：Ｎｏ）、メモリコントローラ３００は、低レベル誤り訂正処理を実行する（ステップＳ９７０）。メモリコントローラ３００は、低レベル誤り訂正処理において訂正が成功したか否かを判断する（ステップＳ９６１）。
【０１８２】
訂正が成功した場合（ステップＳ９６１：Ｙｅｓ）、メモリコントローラ３００は、訂正した符号語からパリティを除いた元のデータ（ｋビット）とステータスとをホストコンピュータ１００に出力する（ステップＳ９６２）。
【０１８３】
訂正に失敗した場合（ステップＳ９６１：Ｎｏ）、または、ステップＳ９６７の後、メモリコントローラ３００は、訂正失敗を示す訂正成否情報を生成してホストコンピュータ１００に出力する（ステップＳ９６３）。ステップＳ９６２またはＳ９６３の後、メモリコントローラ３００はリード処理を終了する。
【０１８４】
このように第４の実施の形態によれば、ホストコンピュータ１００が軟判定値を生成し、その軟判定値を入力値として高レベル軟判定誤り訂正処理を行うことにより、硬判定値を入力値とする場合よりも容易に誤りを訂正することができる。具体的には、誤り訂正能力が向上する。また、誤り訂正に要する時間が短くなる。
【０１８５】
［変形例］
第４の実施の形態では、ホストコンピュータ１００は、複数回リードデータを読み出してから誤り訂正を行っていたが、リードデータを読み出すたびに誤り訂正を行ってもよい。誤り率が想定より低い場合、リードデータを読み出すたびに誤り訂正を行った方が、誤り訂正に要する時間が短くて済む場合があるためである。例えば、１０回の読出しが必要な程度の誤り率を想定していたところ、５回の読み出しで誤り訂正に成功する程度の誤り率であった場合を考える。この場合、読み出すたびに誤り訂正を行えば、５回目の誤り訂正に成功するため、１０回読み出してから誤り訂正を行うよりも誤り訂正に要する時間が短くなる。第４の実施の形態の変形例のホストコンピュータ１００は、リードデータを読み出すたびに誤り訂正を行う点において第４の実施の形態と異なる。
【０１８６】
図４８は、第４の実施の形態の変形例におけるホストコンピュータ１００の動作の一例を示すフローチャートである。変形例のホストコンピュータ１００は、リードデータを読み出すたびに高レベル軟判定誤り訂正処理を実行する点において第４の実施の形態と異なる。
【０１８７】
具体的には、訂正失敗を示す訂正成否情報を受信した場合には（ステップＳ９１１：Ｙｅｓ）、ホストコンピュータ１００は、符号語出力コマンドをメモリコントローラ３００に出力する（ステップＳ９４２）。ホストコンピュータ１００は、メモリコントローラ３００により読み出されたリードデータをリードデータバッファ１３０に保持させ（ステップＳ９４３）、軟判定値データを生成する（ステップＳ９４５）。ホストコンピュータ１０は、その軟判定値データを使用して高レベル軟判定誤り訂正処理を実行する（ステップＳ９８０）。
【０１８８】
ホストコンピュータ１００は、高レベル軟判定誤り訂正処理における誤り訂正が成功したか否かを判断する（ステップＳ９４６）。誤り訂正に失敗した場合には（ステップＳ９４６：Ｎｏ）、ホストコンピュータ１００は、リードデータの読出し回数が所定回数に達したか否かを判断する（ステップＳ９４４）。リードデータの読出し回数が所定回数未満である場合（ステップＳ９４４：Ｎｏ）、ホストコンピュータ１００は訂正停止信号を生成してメモリコントローラ３００への出力を開始する（ステップＳ９４１）。ステップＳ９４１の後、ホストコンピュータ１００はステップＳ９０１に戻る。また、誤り訂正に成功した場合（ステップＳ９４６：Ｙｅｓ）、または、リードデータの読出し回数が所定回数に達した場合（ステップＳ９４４：Ｙｅｓ）、ホストコンピュータ１００は、誤り訂正の成否に基づいて所定の処理を実行し、ステップＳ９０１に戻る。
【０１８９】
＜５．第５の実施の形態＞
［ホストコンピュータの構成例］
第４の実施の形態では、ホストコンピュータ１００は、同一の閾値で読み出した複数のリードデータから軟判定値を生成していたが、異なる閾値で読み出した複数のリードデータから軟判定値を生成することもできる。ここで、閾値は、不揮発性メモリ４００に記録されたビットの値が、「１」であるか「０」であるかを判断するために用いられる値である。第５の実施の形態のホストコンピュータ１００は、異なる閾値で読み出した複数のリードデータから軟判定値を生成する点において第４の実施の形態と異なる。
【０１９０】
不揮発性メモリ４００がＲｅＲＡＭである場合、不揮発性メモリ４００は複数の可変抵抗素子を備え、閾値として抵抗値が用いられる。これらの可変抵抗素子は、高抵抗状態（ＨＲＳ：High Resistive State）と低抵抗状態（ＬＲＳ：Low Resistive State）との２状態で１ビットのデータを記録することができる。
【０１９１】
図４９は、第５の実施の形態におけるホストコンピュータ１００の一構成例を示すブロック図である。第５の実施の形態のホストコンピュータ１００は、閾値制御部１７０をさらに備える点において第４の実施の形態と異なる。
【０１９２】
閾値制御部１７０は、リードデータを読み出す際の閾値を制御するものである。この閾値制御部１７０は、訂正成否信号をメモリコントローラ３００から受け取る。訂正成否信号が訂正失敗を示すものであれば、閾値制御部１７０は、リードデータを読み出す際の閾値を、一定の範囲内で前回と異なる閾値に制御するための制御信号を生成して、メモリコントローラ３００に出力する。
【０１９３】
第５の実施の形態の軟判定値生成部１６０は、複数のリードデータにおいて、「１」および「０」のうち特定の値が読み出されたときの閾値のうち、最大値または最小値に応じて軟判定値を生成する。
【０１９４】
なお、第１の実施の形態に例示したようにメモリコントローラ３００が高レベルアルゴリズムによる誤り訂正を行う構成において、第５の実施の形態の構成を適用することもできる。この場合、メモリコントローラ３００に軟判定値生成部１６０および閾値制御部１７０が設けられる。
【０１９５】
［メモリコントローラの構成例］
図５０は、第５の実施の形態におけるメモリコントローラの一構成例を示すブロック図である。第５の実施の形態のリード処理部３３０は、符号語出力コマンドおよび閾値制御信号をホストコンピュータ１００から受け取ると、閾値制御信号に従って閾値を制御してリードデータを読み出し、誤り訂正部３４０に供給する。
【０１９６】
図５１は、第５の実施の形態における可変抵抗素子の抵抗分布の一例を示す図である。横軸は、抵抗値Ｒを示しており、縦軸は、セルの数の相対的な分布を相対値により示している。この図が示すように可変抵抗素子の抵抗分布は、低抵抗状態と高抵抗状態とに分かれている。
【０１９７】
可変抵抗素子の高抵抗状態および低抵抗状態をそれぞれ「０」または「１」の何れかに対応付けることにより、可変抵抗素子はメモリセルとして機能する。「０」または「１」の何れに対応付けるかは任意である。例えば、高抵抗状態が「１」に対応付けられ、低抵抗状態が「０」に対応付けられる。
【０１９８】
これらの可変抵抗素子に記録されたデータを読み出す場合に、可変抵抗素子の状態が２状態のいずれであるか、すなわち記録されているデータが２値のうちのいずれであるかを判断するために通常用いられる閾値を閾値ＲＮとする。
【０１９９】
メモリセルの抵抗値が閾値ＲＮに近いほど、メモリセルに保持されたデータの値が「１」または「０」である確率が、いずれも０．５に近くなる。「１」または「０」である確率が０．５に近いということは、そのメモリセルに正常にデータが保持されていないことを意味する。つまり、この確率は、データが正常に保持されている程度を示すものである。このため、その確率に応じた軟判定値に基づいて誤り訂正を行うことにより、メモリコントローラ３００は、データが正常に保持されていない場合に、誤り訂正能力の低下を防止することができる。
【０２００】
ここで、閾値ＲＮより小さな所定の閾値を閾値ＲＶＬとし、閾値ＲＮより大きな所定の閾値を閾値ＲＶＨとする。誤り訂正に失敗したリードデータを複数回読み出す場合、閾値ＲＶＬから閾値ＲＶＨまでの間の範囲において閾値が制御されるものとする。
【０２０１】
図５２は、第５の実施の形態における軟判定値の生成方法を説明するための図である。閾値ＲＶＬ、ＲＬ、ＲＨおよびＲＶＨの４つの閾値のそれぞれにより、リードデータが読み出された場合を考える。ここで、閾値ＲＶＬは閾値ＲＬより小さく、閾値ＲＬは閾値ＲＨより小さい値である。また、閾値ＲＨは閾値ＲＶＨより小さい値である。それぞれの閾値に制御する順番は任意である。
【０２０２】
それぞれの閾値でメモリセルから読み出した値の統計をとることにより、そのメモリセルの抵抗値を推定し、その抵抗値からメモリセルに保持されたビットが「１」または「０」である確率に応じた軟判定値を求めることができる。例えば、「１」の値が読み出されたときの閾値の最大値に応じて軟判定値が求められる。もしくは、「０」の値が読み出されたときの閾値の最小値に応じて軟判定値が求められる。
【０２０３】
具体的には、閾値ＲＶＬ、ＲＬ、ＲＨおよびＲＶＨのいずれの閾値でも「１」の値が読み出された場合、言い換えれば、「１」の値が読み出されたときの閾値の最大値がＲＶＨである場合を考える。この場合、抵抗値が最大の閾値ＲＶＨでも「１」が読み出されることから、メモリセルの抵抗値は閾値ＲＶＨより大きい。メモリセルの抵抗値が十分に大きいため、そのメモリセルに保持されたデータが「１」である確率は十分に高く、１．０であると推測される。したがって、式１より正の無限大の軟判定値が生成される。
【０２０４】
次に、閾値ＲＶＬおよびＲＬのときに「１」の値が読み出された場合、言い換えれば、「１」の値が読み出されたときの閾値の最大値がＲＬである場合を考える。この場合、メモリセルの抵抗値は閾値ＲＶＬと式値ＲＶＨとの中間である。メモリセルの抵抗値が閾値ＲＮに近いため、そのメモリセルに保持されたデータが「１」である確率は０．５に近いと推測される。したがって、式１より０．０の軟判定値が生成される。
【０２０５】
また、閾値ＲＶＬ、ＲＬ、ＲＨおよびＲＶＨのいずれの閾値でも「０」の値が読み出された場合、言い換えれば、「１」の値が読み出されたときの閾値の最大値がＲＶＬ未満である場合を考える。この場合、抵抗値が最小の閾値ＲＶＬでも「０」が読み出されることから、メモリセルの抵抗値は閾値ＲＶＬより小さい。メモリセルの抵抗値が非常に小さいため、そのメモリセルに保持されたデータが「１」である確率は極めて低く、０．０であると推測される。したがって、式１より正の無限大の軟判定値が生成される。
【０２０６】
また、「１」の値が読み出されたときの閾値の最大値がＲＨである場合、正の無限大と０．０との間の所定の軟判定値（例えば、１．１）が生成される。「１」の値が読み出されたときの閾値の最大値がＲＶＬである場合、負の無限大と０．０との間の所定の軟判定値（例えば、−１．１）が生成される。
【０２０７】
［ホストコンピュータの動作例］
図５３は、第５の実施の形態におけるホストコンピュータ１００の動作の一例を示すフローチャートである。第５の実施の形態のホストコンピュータ１００は、ステップＳ９４２およびＳ９４４の代わりにステップＳ９４７およびＳ９４８を実行する点において第４の実施の形態と異なる。
【０２０８】
ホストコンピュータ１００は、メモリコントローラ３００への停止信号の出力を開始し（ステップＳ９４１）、前回と異なる閾値に制御するための閾値制御信号と符号語出力コマンドとをメモリコントローラ３００に出力する（ステップＳ９４７）。ホストコンピュータ１００は、メモリコントローラ３００により読み出されたリードデータをリードデータバッファ１３０に保持させる（ステップＳ９４３）。ホストコンピュータ１００は、一定範囲内の全ての閾値でリードデータを読み出したか否かを判断する（ステップＳ９４８）。全ての閾値で読み出していなければ（ステップＳ９４８：Ｎｏ）、ホストコンピュータ１００は、ステップＳ９４７に戻る。一方、全ての閾値で読み出したのであれば（ステップＳ９４８：Ｙｅｓ）、ホストコンピュータ１００は、各々のリードデータから軟判定値データを生成する（ステップＳ９４５）。
【０２０９】
［メモリコントローラの動作例］
図５４は、第５の実施の形態におけるリード処理の動作の一例を示すフローチャートである。第５の実施の形態のリード処理は、ステップＳ９６７の代わりにステップＳ９６８を実行する点において第１の実施の形態と異なる。
【０２１０】
メモリコントローラ３００は、訂正停止信号を受信した場合（ステップＳ９６６：Ｎｏ）、閾値制御信号および符号語出力コマンドに従って、閾値を制御してリードデータを読み出し、ホストコンピュータ１００に出力する（ステップＳ９６８）。ステップＳ９６８の後、メモリコントローラ３００はステップＳ９６３を実行する。
【０２１１】
このように第５の実施の形態によれば、メモリコントローラ３００は、異なる閾値で読み出した複数のリードデータから軟判定値を生成して使用することにより、硬判定値を使用する場合よりも容易に誤りを訂正することができる。また、異なる閾値で読み出した複数のリードデータから生成した軟判定値は、データが正常に保持されている程度を示す値である。このため、その軟判定値に基づいて誤り訂正を行うことにより、データが正常に保持されていない場合に誤り訂正能力の低下を防止することができる。
【０２１２】
［変形例］
第５の実施の形態では、ホストコンピュータ１００は、複数回リードデータを読み出してから誤り訂正を行っていたが、リードデータを読み出すたびに誤り訂正を行ってもよい。第５の実施の形態の変形例のホストコンピュータ１００は、リードデータを読み出すたびに誤り訂正を行う点において第５の実施の形態と異なる。
【０２１３】
図５５は、第５の実施の形態の変形例におけるホストコンピュータ１００の動作の一例を示すフローチャートである。変形例のホストコンピュータ１００は、リードデータを読み出すたびに高レベル軟判定誤り訂正処理を実行する点において第５の実施の形態と異なる。
【０２１４】
具体的には、訂正失敗を示す訂正成否情報を受信した場合には（ステップＳ９１１：Ｙｅｓ）、ホストコンピュータ１００は、閾値制御信号および符号語出力コマンドをメモリコントローラ３００に出力する（ステップＳ９４７）。ホストコンピュータ１０は、メモリコントローラ３００により読み出されたリードデータをリードデータバッファ１３０に保持させ（ステップＳ９４３）、軟判定値データを生成する（ステップＳ９４５）。ホストコンピュータ１０は、その軟判定値データを使用して高レベル軟判定誤り訂正処理を実行する（ステップＳ９８０）。
【０２１５】
ホストコンピュータ１００は、高レベル軟判定誤り訂正処理における誤り訂正が成功したか否かを判断する（ステップＳ９４６）。誤り訂正に失敗した場合には（ステップＳ９４６：Ｎｏ）、ホストコンピュータ１００は、全ての閾値で読み出したか否かを判断する（ステップＳ９４８）。全ての閾値で読み出していない場合（ステップＳ９４８：Ｎｏ）、ホストコンピュータ１００は訂正停止信号を生成してメモリコントローラ３００への出力を開始する（ステップＳ９４１）。ステップＳ９４１の後、ホストコンピュータ１００はステップＳ９０１に戻る。また、誤り訂正に成功した場合（ステップＳ９４６：Ｙｅｓ）、または、全ての閾値で読み出した場合（ステップＳ９４８：Ｙｅｓ）、ホストコンピュータ１００は、誤り訂正の成否に基づいて処理を実行し、ステップＳ９０１に戻る。
【０２１６】
なお、上述の実施の形態は本技術を具現化するための一例を示したものであり、実施の形態における事項と、特許請求の範囲における発明特定事項とはそれぞれ対応関係を有する。同様に、特許請求の範囲における発明特定事項と、これと同一名称を付した本技術の実施の形態における事項とはそれぞれ対応関係を有する。ただし、本技術は実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において実施の形態に種々の変形を施すことにより具現化することができる。
【０２１７】
また、上述の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。この記録媒体として、例えば、ＣＤ（Compact Disc）、ＭＤ（MiniDisc）、ＤＶＤ（Digital Versatile Disk）、メモリカード、ブルーレイディスク（Blu-ray Disc（登録商標））等を用いることができる。
【０２１８】
なお、本技術は以下のような構成もとることができる。
（１）所定の復号アルゴリズムを使用して符号語の誤りを訂正する低レベル誤り訂正処理を実行する低レベル誤り訂正部と、
前記低レベル誤り訂正部による誤りの訂正が失敗した場合には前記所定の復号アルゴリズムよりも誤り訂正能力が高い軟判定復号アルゴリズムである高レベルアルゴリズムを使用して前記符号語の誤りを訂正する高レベル軟判定誤り訂正処理を実行する高レベル軟判定誤り訂正部と
を具備するコントローラ。
（２）前記符号語は、複数の符号要素を含み、
前記符号語をメモリから読み出して前記低レベル誤り訂正部に供給するリード処理部と、
前記低レベル誤り訂正部による誤りの訂正が失敗した場合には前記メモリから前記符号語を読み出す符号語取得処理を複数回実行する符号語取得部と、
前記符号語取得部により読み出された符号語の各々に基づいて前記符号要素が特定の値となる確率に応じた軟判定値を前記符号要素ごとに生成して前記符号要素の各々の値を前記軟判定値に置き換えた前記符号語を前記高レベル軟判定誤り訂正部に供給する軟判定値生成部と
をさらに具備する前記（１）記載のコントローラ。
（３）前記軟判定値生成部は、前記符号語取得部により前記特定の値が読み出された頻度を前記符号要素ごとに求めて当該頻度に応じて前記軟判定値を生成する
前記（２）記載のコントローラ。
（４）前記符号要素の値を判断するための閾値を所定の範囲内で前記符号語取得処理が実行されるたびに変更する閾値制御部をさらに具備し、
前記軟判定値生成部は、前記特定の値の符号要素が読み出されたときの前記閾値のうち最大値または最小値に応じて前記軟判定値を生成する
前記（２）記載のコントローラ。
（５）前記軟判定値生成部は、前記符号語取得処理が複数回実行されてから前記軟判定値を生成し、
前記高レベル軟判定誤り訂正部は、前記軟判定値が生成されると前記高レベル軟判定誤り訂正処理を実行する
前記（２）乃至（４）のいずれかに記載のコントローラ。
（６）前記軟判定値生成部は、前記符号語取得処理が実行されるたびに前記軟判定値を生成し、
前記高レベル軟判定誤り訂正部は、前記軟判定値が生成されるたびに前記高レベル軟判定誤り訂正処理を実行する
前記（２）乃至（５）のいずれかに記載のコントローラ。
（７）前記低レベル誤り訂正部は、前記符号要素が特定の値となる確率に応じた軟判定値を前記符号要素ごとに生成して前記符号要素の各々の値を前記軟判定値に置き換えた前記符号語を前記高レベル軟判定誤り訂正部に供給する
前記（１）乃至（６）のいずれかに記載のコントローラ。
（８）記憶部から前記符号語を読み出すことを指示するリードコマンドを発行するホストコンピュータと、
前記リードコマンドに従って前記記憶部から前記符号語を読み出すリード処理部と、
所定のアルゴリズムを使用して符号語の誤りを訂正する低レベル誤り訂正処理を実行する低レベル誤り訂正部と、
前記低レベル誤り訂正部による誤りの訂正が失敗した場合には前記所定の復号アルゴリズムよりも誤り訂正能力が高い軟判定復号アルゴリズムである高レベルアルゴリズムを使用して前記符号語の誤りを訂正する高レベル軟判定誤り訂正処理を実行する高レベル軟判定誤り訂正部と
を具備する情報処理システム。
（９）前記ホストコンピュータは、前記低レベル誤り訂正部による誤りの訂正が失敗した場合には前記高レベル軟判定誤り訂正処理の開始を指示する訂正開始コマンドを含む１つ以上のコマンドの実行順序を前記高レベル軟判定誤り訂正処理の処理時間に基づいて決定し、前記実行順序で前記コマンドの各々を前記高レベル軟判定誤り訂正部に供給し、
前記高レベル軟判定誤り訂正部は、前記低レベル誤り訂正部による誤りの訂正が失敗し、かつ、前記訂正開始コマンドが供給されたときに前記高レベル軟判定誤り訂正処理を開始する
前記（８）記載の情報処理システム。
（１０）前記ホストコンピュータは、前記低レベル誤り訂正部による誤りの訂正が失敗し、前記符号語を読み出す処理に対する割込みが発生した場合には前記高レベル軟判定誤り訂正処理の中断を指示するアボートコマンドを発行し、
前記高レベル軟判定誤り訂正部は、前記低レベル誤り訂正部による誤りの訂正が失敗した場合には前記高レベル軟判定誤り訂正処理を実行し、前記低レベル誤り訂正部による誤りの訂正が失敗した場合には前記アボートコマンドに従って前記実行していた高レベル軟判定誤り訂正処理を中断する
前記（８）または（９）に記載の情報処理システム。
（１１）前記ホストコンピュータは、前記符号語の種類に基づいて前記高レベル軟判定誤り訂正処理を実行するか否かを示すイネーブル信号をさらに生成し、
前記高レベル軟判定誤り訂正部は、前記低レベル誤り訂正部による誤りの訂正が失敗した場合には前記イネーブル信号に従って前記高レベル軟判定誤り訂正処理を実行する
前記（８）乃至（１０）のいずれかに記載の情報処理システム。
（１２）  前記ホストコンピュータは、前記符号語の種類に基づいて複数の前記高レベルアルゴリズムのうちのいずれかを指定し、
前記高レベル軟判定誤り訂正部は、前記低レベル誤り訂正部による誤りの訂正が失敗した場合には前記指定された高レベルアルゴリズムを使用して前記符号語の誤りを訂正する
前記（８）乃至（１１）のいずれかに記載の情報処理システム。
（１３）記憶部から符号語を読み出して所定の復号アルゴリズムを使用して前記符号語の誤りを訂正する低レベル誤り訂正処理を実行するコントローラと、
前記コントローラによる誤りの訂正が失敗した場合には前記所定のアルゴリズムよりも誤り訂正能力が高い軟判定復号アルゴリズムである高レベルアルゴリズムを使用して前記符号語の誤りを訂正する高レベル軟判定誤り訂正処理を実行するホストコンピュータと
を具備する情報処理システム。
（１４）前記ホストコンピュータは、前記コントローラによる誤りの訂正が失敗した場合には前記符号語の出力を前記コントローラに指示する符号語出力コマンドを発行し、
前記コントローラは、前記符号語出力コマンドに従って前記符号語を前記記憶部から読み出して前記低レベル誤り訂正処理を実行せずに前記ホストコンピュータに出力する
前記（１３）記載の情報処理システム。
（１５）前記コントローラは、前記低レベル誤り訂正処理において前記符号語の誤りの訂正に成功したか否かを示す訂正成否情報を生成して前記ホストコンピュータに出力し、
前記ホストコンピュータは、前記訂正成否情報に基づいて前記コントローラによる誤りの訂正が失敗したか否かを判断する
前記（１３）または（１４）に記載の情報処理システム。
（１６）低レベル誤り訂正部が、所定の復号アルゴリズムを使用して符号語の誤りを訂正する低レベル誤り訂正処理を実行する低レベル誤り訂正手順と、
高レベル軟判定誤り訂正部が、前記低レベル誤り訂正手順において誤りの訂正が失敗した場合には前記所定の復号アルゴリズムよりも誤り訂正能力が高い軟判定アルゴリズムである高レベルアルゴリズムを使用して前記符号語の誤りを訂正する高レベル軟判定誤り訂正処理を実行する高レベル軟判定誤り訂正手順と
を具備するコントローラの制御方法。
（１７）低レベル誤り訂正部が、所定の復号アルゴリズムを使用して符号語の誤りを訂正する低レベル誤り訂正処理を実行する低レベル誤り訂正手順と、
高レベル軟判定誤り訂正部が、前記低レベル誤り訂正手順において誤りの訂正が失敗した場合には前記所定の復号アルゴリズムよりも誤り訂正能力が高い軟判定アルゴリズムである高レベルアルゴリズムを使用して前記符号語の誤りを訂正する高レベル軟判定誤り訂正処理を実行する高レベル軟判定誤り訂正手順と
をコンピュータに実行させるためのプログラム。
【符号の説明】
【０２１９】
１００  ホストコンピュータ
１０１  ユーザインターフェース
１０２、３０５  ＲＯＭ
１０３、３０２  ＲＡＭ
１０４、３０３  ＣＰＵ
１０５、３０６  バス
１０６  ストレージインターフェース
１１０  符号語取得部
１２０  制御部
１３０、３５０  リードデータバッファ
１４０、３８０  高レベル軟判定誤り訂正部
１５０、３７０  誤り訂正プログラム記憶部
１６０  軟判定値生成部
１７０  閾値制御部
２００  ストレージ
３００  メモリコントローラ
３０１  ホストインターフェース
３０４  ＥＣＣ処理部
３０７  不揮発性メモリインターフェース
３１０  符号化部
３２０  ライト処理部
３３０  リード処理部
３４０  誤り訂正部
３６０  低レベル誤り訂正部
３６１  低レベル誤り訂正回路
３６２、３８２  変数ノード処理部
３６３、３８３  変数ノード
３６４、３８４  検査ノード処理部
３６５、３８５  検査ノード
３６６、３８６  訂正成否判定部
３８１  高レベル誤り訂正処理部
３９０  符号語出力部
４００  不揮発性メモリ
【図１】
2014140111.tif 000011
【図２】
2014140111.tif 000012
【図３】
2014140111.tif 000013
【図４】
2014140111.tif 000014
【図５】
2014140111.tif 000015
【図６】
2014140111.tif 000016
【図７】
2014140111.tif 000017
【図８】
2014140111.tif 000018
【図９】
2014140111.tif 000019
【図１０】
2014140111.tif 000020
【図１１】
2014140111.tif 000021
【図１２】
2014140111.tif 000022
【図１３】
2014140111.tif 000023
【図１４】
2014140111.tif 000024
【図１５】
2014140111.tif 000025
【図１６】
2014140111.tif 000026
【図１７】
2014140111.tif 000027
【図１８】
2014140111.tif 000028
【図１９】
2014140111.tif 000029
【図２０】
2014140111.tif 000030
【図２１】
2014140111.tif 000031
【図２２】
2014140111.tif 000032
【図２３】
2014140111.tif 000033
【図２４】
2014140111.tif 000034
【図２５】
2014140111.tif 000035
【図２６】
2014140111.tif 000036
【図２７】
2014140111.tif 000037
【図２８】
2014140111.tif 000038
【図２９】
2014140111.tif 000039
【図３０】
2014140111.tif 000040
【図３１】
2014140111.tif 000041
【図３２】
2014140111.tif 000042
【図３３】
2014140111.tif 000043
【図３４】
2014140111.tif 000044
【図３５】
2014140111.tif 000045
【図３６】
2014140111.tif 000046
【図３７】
2014140111.tif 000047
【図３８】
2014140111.tif 000048
【図３９】
2014140111.tif 000049
【図４０】
2014140111.tif 000050
【図４１】
2014140111.tif 000051
【図４２】
2014140111.tif 000052
【図４３】
2014140111.tif 000053
【図４４】
2014140111.tif 000054
【図４５】
2014140111.tif 000055
【図４６】
2014140111.tif 000056
【図４７】
2014140111.tif 000057
【図４８】
2014140111.tif 000058
【図４９】
2014140111.tif 000059
【図５０】
2014140111.tif 000060
【図５１】
2014140111.tif 000061
【図５２】
2014140111.tif 000062
【図５３】
2014140111.tif 000063
【図５４】
2014140111.tif 000064
【図５５】
2014140111.tif 000065