(57)【特許請求の範囲】
【請求項１】
低密度パリティー検査行列を用いて符号化された複数の１ビットのデータが入力される複数の変数ノードごとに設けられ、それぞれが、前記変数ノードに入力される前記データの値が１である確率を示す第１メッセージを算出する複数の第１算出部と、
前記低密度パリティー検査行列に応じた結線状態で前記複数の変数ノードと接続される複数のチェックノードごとに設けられ、それぞれが、前記チェックノードに接続された２以上の前記変数ノードのそれぞれの前記第１メッセージを用いて、前記チェックノードに接続された２以上の前記変数ノードごとに、前記変数ノードに入力される前記データの値が１である確率を示す第２メッセージを算出する複数の第２算出部と、
前記複数の変数ノードごとに設けられ、それぞれが、前記第１メッセージと前記第２メッセージとを用いて、前記変数ノードに入力される前記データの真の値を推定して推定値を生成する複数の推定部と、
前記複数の変数ノードのうちの少なくとも１つの前記変数ノードに対応する前記推定値を、０より大きく１より小さい確率で反転させる反転部と、を備える、
誤り訂正装置。
【請求項２】
前記反転部による前記推定値の反転が行われる確率は、１／６０００〜１／１００の範囲である、
請求項１の誤り訂正装置。
【請求項３】
前記反転部による前記推定値の反転が行われる確率は、１／１０００〜１／１００の範囲である、
請求項１の誤り訂正装置。
【請求項４】
前記反転部は、ランダムテレグラフノイズの発生により閾値電圧が変動するＭＯＳＦＥＴを含み、前記閾値電圧の変動に応じて、前記推定値を反転させる、
請求項１の誤り訂正装置。
【請求項５】
前記反転部は、２値の信号をランダムに出力する乱数発生回路を含み、前記乱数発生回路から出力される前記信号に応じて、前記推定値を反転させる、
請求項１の誤り訂正装置。
【請求項６】
前記反転部から出力された前記推定値がパリティー条件を満たすか否かを判定する判定部をさらに備える、
請求項１の誤り訂正装置。
【請求項７】
低密度パリティー検査行列を用いて符号化された複数の１ビットのデータが入力される複数の変数ノードごとに、前記変数ノードに入力される前記データの値が１である確率を示す第１メッセージを算出する第１算出ステップと、
前記低密度パリティー検査行列に応じた結線状態で前記複数の変数ノードと接続される複数のチェックノードのそれぞれに接続された２以上の前記変数ノードのそれぞれの前記第１メッセージを用いて、各前記チェックノードに接続された２以上の前記変数ノードごとに、前記変数ノードに入力される前記データの値が１である確率を示す第２メッセージを算出する第２算出ステップと、
前記複数の変数ノードごとに、前記第１メッセージと前記第２メッセージとを用いて、前記変数ノードに入力される前記データの真の値を推定して推定値を生成する推定ステップと、
前記複数の変数ノードのうちの少なくとも１つの前記変数ノードに対応する前記推定値を、０より大きく１より小さい確率で反転させる反転ステップと、を含む、
誤り訂正方法。
【請求項８】
コンピュータに、
低密度パリティー検査行列を用いて符号化された複数の１ビットのデータが入力される複数の変数ノードごとに、前記変数ノードに入力される前記データの値が１である確率を示す第１メッセージを算出する第１算出ステップと、
前記低密度パリティー検査行列に応じた結線状態で前記複数の変数ノードと接続される複数のチェックノードのそれぞれに接続された２以上の前記変数ノードのそれぞれの前記第１メッセージを用いて、各前記チェックノードに接続された２以上の前記変数ノードごとに、前記変数ノードに入力される前記データの値が１である確率を示す第２メッセージを算出する第２算出ステップと、
前記複数の変数ノードごとに、前記第１メッセージと前記第２メッセージとを用いて、前記変数ノードに入力される前記データの真の値を推定して推定値を生成する推定ステップと、
前記複数の変数ノードのうちの少なくとも１つの前記変数ノードに対応する前記推定値を、０より大きく１より小さい確率で反転させる反転ステップと、を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、誤り訂正装置、誤り訂正方法およびプログラムに関する。
【背景技術】
【０００２】
従来、行列内の「１」の密度が疎である低密度パリティー検査行列を用いたＬＤＰＣ（Ｌｏｗ  Ｄｅｎｓｉｔｙ  Ｐａｒｉｔｙ  Ｃｈｅｃｋ：低密度パリティー検査）符号が知られている。ＬＤＰＣ符号の復号において、軟判定方式による誤り訂正を行う場合は、高い訂正能力を実現できるものの、処理時間が増大してしまう。一方、硬判定方式による誤り訂正を行う場合は、処理速度を高めることができるものの、十分な訂正能力を実現できないという問題がある。
【０００３】
そこで、従来においては、硬判定方式と軟判定方式とを組み合わせ、硬判定方式では誤り訂正ができなかったものに対して軟判定方式による誤り訂正を行うという技術が知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−１９７９５７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、硬判定方式と軟判定方式とを組み合わせる場合は、半導体集積回路等を用いた実装の構成が複雑化するという問題がある。
【０００６】
本発明が解決しようとする課題は、簡易な構成で誤り訂正能力を向上させることが可能な誤り訂正装置、誤り訂正方法およびプログラムを提供することである。
【課題を解決するための手段】
【０００７】
実施形態の誤り訂正装置は、第１算出部と第２算出部と推定部と反転部とを備える。第１算出部は、低密度パリティー検査行列を用いて符号化された複数の１ビットのデータが入力される複数の変数ノードごとに設けられ、変数ノードに入力されるデータの値が１である確率を示す第１メッセージを算出する。第２算出部は、低密度パリティー検査行列に応じた結線状態で複数の変数ノードと接続される複数のチェックノードごとに設けられ、チェックノードに接続された２以上の変数ノードのそれぞれの第１メッセージを用いて、チェックノードに接続された２以上の変数ノードごとに、変数ノードに入力されるデータの値が１である確率を示す第２メッセージを算出する。推定部は、複数の変数ノードごとに設けられ、第１メッセージと第２メッセージとを用いて、変数ノードに入力されるデータの真の値を推定して推定値を生成する。反転部は、複数の変数ノードのうちの少なくとも１つの変数ノードに対応する推定値を、０より大きく１より小さい確率で反転させる。
【０００８】
実施形態の誤り訂正方法は、第１算出ステップと第２算出ステップと推定ステップと反転ステップとを含む。第１算出部ステップは、低密度パリティー検査行列を用いて符号化された複数の１ビットのデータが入力される複数の変数ノードごとに、変数ノードに入力されるデータの値が１である確率を示す第１メッセージを算出する。第２算出ステップは、低密度パリティー検査行列に応じた結線状態で複数の変数ノードと接続される複数のチェックノードのそれぞれに接続された２以上の変数ノードのそれぞれの第１メッセージを用いて、各チェックノードに接続された２以上の変数ノードごとに、変数ノードに入力されるデータの値が１である確率を示す第２メッセージを算出する。推定ステップは、複数の変数ノードごとに、第１メッセージと第２メッセージとを用いて、変数ノードに入力されるデータの真の値を推定して推定値を生成する。反転ステップは、複数の変数ノードのうちの少なくとも１つの変数ノードに対応する推定値を、０より大きく１より小さい確率で反転させる。
【０００９】
実施形態のプログラムは、コンピュータに、第１算出ステップと第２算出ステップと推定ステップと反転ステップとを実行させるためのプログラムである。第１算出部ステップは、低密度パリティー検査行列を用いて符号化された複数の１ビットのデータが入力される複数の変数ノードごとに、変数ノードに入力されるデータの値が１である確率を示す第１メッセージを算出する。第２算出ステップは、低密度パリティー検査行列に応じた結線状態で複数の変数ノードと接続される複数のチェックノードのそれぞれに接続された２以上の変数ノードのそれぞれの第１メッセージを用いて、各チェックノードに接続された２以上の変数ノードごとに、変数ノードに入力されるデータの値が１である確率を示す第２メッセージを算出する。推定ステップは、複数の変数ノードごとに、第１メッセージと第２メッセージとを用いて、変数ノードに入力されるデータの真の値を推定して推定値を生成する。反転ステップは、複数の変数ノードのうちの少なくとも１つの変数ノードに対応する推定値を、０より大きく１より小さい確率で反転させる。
【図面の簡単な説明】
【００１０】
【図１】実施形態の検査行列を表現するタナーグラフの一例を示す図。
【図２】実施形態の第２メッセージの算出方法の例を説明するための図。
【図３】実施形態の第１メッセージの再計算方法の例を説明するための図。
【図４】実施形態の軟判定方式および硬判定方式の検証結果の一例を示す図。
【図５】実施形態のアルゴリズムの繰り返し回数とエラー残数との関係を示す図。
【図６】実施形態のビット反転確率とエラー残数との関係を示す図。
【図７】実施形態の誤り訂正装置の構成例を示す図。
【図８】実施形態の変数ノード部およびチェックノード部の機能構成例を示す図。
【図９】実施形態の誤り訂正装置の具体的な構成例を示す図。
【図１０】実施形態の尤度計算回路の構成例を示す図。
【図１１】対比例の尤度計算回路の構成例を示す図。
【図１２】実施形態の多数決回路の構成例を示す図。
【図１３】実施形態のＲＴＮの様子と、ＭＯＳＦＥＴの構造例を示す図。
【図１４】実施形態のビット反転回路の構成例を示す図。
【図１５】実施形態のビット反転回路によるビット反転の様子を示す図。
【図１６】実施形態の誤り訂正装置による処理の一例を示すフローチャート。
【図１７】変形例のビット反転回路の構成例を示す図。
【図１８】変形例のビット反転回路の出力とクロック信号との関係を示す図。
【図１９】変形例の誤り訂正装置の構成例を示す図。
【図２０】変形例のビット反転回路の構成例を示す図。
【図２１】変形例のビット反転回路の構成例を示す図。
【発明を実施するための形態】
【００１１】
以下、添付図面を参照しながら、本発明に係る誤り訂正装置、誤り訂正方法およびプログラムの実施形態を詳細に説明する。
【００１２】
まず、本実施形態に係る誤り訂正装置の説明を行う前に、ＬＤＰＣに関する説明を行う。ＬＤＣＰ符号とは、行列内における「１」の密度が疎である（行列の大多数の成分が「０」であり、小数の成分のみが「１」である）低密度パリティー検査行列Ｈ（以下の説明では、単に「検査行列Ｈ」と呼ぶ場合がある）によって特徴付けられる符号である。検査行列Ｈのサイズは符号長に応じて大きくなるが、説明の便宜上、ここでは、検査行列Ｈは、８行×４列の行列であることを想定する。
【００１３】
検査行列Ｈの各行および各列に含まれる１の数を重みとよび、ここでは、検査行列Ｈの各行の重み、および、各列の重みの各々は０よりも大きいものとする。各行のそれぞれの重みが一様（一定値）であり、かつ、各列のそれぞれの重みが一様（一定値）である場合を正則と呼ぶ。ここでは、検査行列Ｈは、正則行列であり、各行のそれぞれの重みはすべて４であり、各列のそれぞれの重みはすべて２であるとする。
【００１４】
ＬＤＰＣ方式の符号では、通信路に送信またはメモリに格納して処理する対象のデータ列ｘを、ＨｃＴ＝０となるようなデータ列ｃに変換する。このｃを符号と呼ぶ。つまり、情報処理に使用されるデータは元の信号ｘそのものではなく、符号ｃである。一般に、符号ｃはデータ列ｘよりも長いデータ列であり、データ列ｘに含まれる情報の他にエラー訂正に必要な情報も含んでいるが、符号化自体は、データ列ｘと符号ｃとが１対１に対応する写像である。つまり、データ列ｘが与えられれば符号ｃは一意に決まり、逆に符号ｃが与えられれば元のデータ列ｘは一意に決まる。（データ列ｘの長さ）／（符号ｃの長さ）を符合化率と呼ぶ。符合化率が高い方が効率の良い誤り訂正方式と言える。
【００１５】
検査行列Ｈは、複数の行と１対１に対応する複数のチェックノードと、複数の列と１対１に対応する複数の変数ノードとの間の結線状態を示すタナーグラフにより表現することができる。説明を簡単にするために、８ｂｉｔの例を示すが、実際の例では、後述するように例えば１０００ｂｉｔのように長いデータ列を扱う。図１は、検査行列Ｈを表現するタナーグラフの一例を示す図である。タナーグラフは、検査行列Ｈの複数の行（図１の例では４行）と１対１に対応する複数のチェックノードｆ０〜ｆ３を上段に配置し、検査行列Ｈの複数の列（図１の例では８列）と１対１に対応する複数の変数ノードｃ０〜ｃ７を下段に配置し、検査行列Ｈの成分が「１」となる行と列の組み合わせに対応するチェックノードｆｊと変数ノードｃｉとを結線（接続）する。例えば、図１の例では、第０行に対応するチェックノードｆ０と、第１列に対応する変数ノードｃ１とは結線されているが、これは、検査行列Ｈの第０行第１列の成分は「１」であることを示す。このように、チェックノードｆｊと変数ノードｃｉとの結線状態を示すタナーグラフにより検査行列Ｈを表現することができる。
【００１６】
次に、ＬＤＰＣ符号の基本的な誤り訂正方法を説明する。ここでは、確率伝播法（ｂｅｌｉｅｆ  ｐｒｏｐａｇａｔｉｏｎ，ＢＰ法）で説明する。具体的には軟判定方式による誤り訂正方法を説明する。軟判定とは、１つの閾値を用いて「０」または「１」をデジタル的に判定する硬判定の対義語であり、０か１かを完全には判定せずに、０である確率（「０」である尤度）または１である確率（「１」である尤度）をアナログ的に判定するものである。
【００１７】
ここでは、検査行列Ｈを用いて符号化されたデータ（デジタルデータ）の集合は、不図示のメモリ（例えば、ＤＲＡＭ、ＭＲＡＭ、ＮＡＮＤ型フラッシュメモリ、ＲｅＲＡＭなど）や通信路に格納されており、符号化されたデータの列を当該メモリから読み出すときの物理量（例えば読み出し電圧の値）の列｛ｙｉ｝が、各変数ノード｛ｃｉ，ｃｋ，・・・｝に入力される。変数ノードｃｉは、受信した物理量ｙｉから、メモリに格納されていたデジタルデータの値が１である確率Ｐｉ（見方を変えれば、変数ノードｃｉに対応するデジタルデータの値が１である確率）を算出する。変数ノードｃｉは、自身と接続されるチェックノード｛ｆｊ，ｆｋ，・・・｝の各々に対して、算出した確率Ｐｉを第１メッセージ｛ｑｉｊ，ｑｋｊ，・・・｝として送信する。
【００１８】
チェックノードｆｊは、自身と接続される複数の変数ノード｛ｃｉ，ｃｋ，・・・｝のそれぞれから送信された第１メッセージ｛ｑｉｊ，ｑｋｊ，・・・｝を元に、パリティー条件を満たすように、自身と接続される変数ノード｛ｃｉ，ｃｋ，・・・｝ごとに、当該変数ノードに対応するデジタルデータの値が１である確率を示す第２メッセージ｛ｒｉｊ，ｒｋｊ，・・・｝を算出し、当該変数ノードへ返信する（図２参照）。ここで、チェックノードｆｊは、例えば変数ノードｃｉに対して返信する第２メッセージｒｉｊを算出する際に、当該変数ノードｃｉから送信された第１メッセージｑｉｊは考慮に入れない。つまり、変数ノードｃｉは、チェックノードｆｊと接続される、変数ノードｃｉ以外の変数ノード｛ｃｋ，ｃｌ，・・・｝の第１メッセージ｛ｑｋｊ，ｃｌｊ，・・・｝に基づいて算出された第２メッセージｒｉｊを受け取ることになる。
【００１９】
変数ノードｃｉは、自身と接続される複数のチェックノード｛ｆｊ，ｆｋ，・・・｝の各々から受け取った第２メッセージ｛ｒｊｉ，ｒｋｉ，・・・｝と、自身の確率Ｐｉ（第１メッセージｑ）とを用いて、受信した物理量ｙｉに対応するデジタルデータの値が１であった確率Ｑｉを計算する。この例では、Ｑｉが１／２以上であれば、受信した物理量ｙｉに対応するデジタルデータの値は１であると仮定し、Ｑｉが１／２未満であれば、受信した物理量ｙｉに対応するデジタルデータの値は０であると仮定する。
【００２０】
そして、この仮定値を用いてパリティチェックを行う。より具体的には、仮定値の列ｃｔｅｍｐ＝｛ｃ０ｔｅｍｐ，ｃ１ｔｅｍｐ，・・・｝に対して、ＨｃｔｅｍｐＴ＝０が成立するか否かを判定し、ＨｃｔｅｍｐＴ＝０が成立する場合は、仮定値の列ｃｔｅｍｐを、メモリに格納されていたデジタルデータ列であると結論付けて、計算を終了する。ただし、この結論は推定結果であるので、誤ったデータに変更されている可能性はある。これが、ＬＤＰＣが「推論型」と分類される由縁である。一方、ＨｃｔｅｍｐＴ＝０が成立しない場合は、変数ノードｃｉは、第１メッセージを再計算し、自身と接続されるチェックノード｛ｆｊ，ｆｋ，・・・｝へ送信する。この場合、例えば変数ノードｃｉからチェックノードｆｊへ送信する第１メッセージｑｉｊは、確率Ｐｉと、変数ノードｃｉと接続される、チェックノードｆｊ以外のチェックノード｛ｆｋ，ｆｌ，・・・｝から受信した第２メッセージ｛ｒｋｉ，ｒｌｉ，・・・｝とから計算される。すなわち、この第１メッセージｑｉｊの算出の際に、チェックノードｆｊから受信した第２メッセージｒｊｉは考慮されない。つまり、チェックノードｆｊは、変数ノードｃｉと接続される、チェックノードｆｊ以外のチェックノード｛ｆｋ，ｆｌ，・・・｝の第２メッセージ｛ｒｋｉ，ｒｌｉ，・・・｝に基づいて算出された第１メッセージｑｉｊを受け取ることになる（図３参照）。チェックノードｆｊは、自身と接続される変数ノード｛ｃｉ，ｃｋ，・・・｝の各々から受信した第１メッセージ｛ｑｉｊ，ｑｋｊ，・・・｝を元に、パリティー条件を満たすように、自身と接続される変数ノード｛ｃｉ，ｃｋ，・・・｝ごとに、当該変数ノードに対応するデータが１である確率を示す第２メッセージ｛ｒｉｊ，ｒｋｊ，・・・｝を算出し、当該変数ノードへ返信する。以上のアルゴリズムをパリティー条件が満たされるまで繰り返す。ＬＤＰＣのエラー訂正は計算の繰り返しにより行われる。
【００２１】
次に、硬判定方式による誤り訂正方法を説明する。ここでは、メモリ（例えば、ＤＲＡＭ、ＭＲＡＭ、ＮＡＮＤ型フラッシュメモリ、ＲｅＲＡＭなど）や通信路からの、符号化されたデータの列の読み出しは終了し、例えば読み出し電圧の値が所定の閾値以上であるか否かに応じて、「０」または「１」が確定したデジタルデータ列ｃ０＝｛ｃｉ０，ｃｋ０，・・・｝が各変数ノード｛ｃｉ，ｃｊ，・・・｝に入力される。見方を変えれば、検査行列Ｈを用いて符号化された、誤りを含む可能性がある１ビットのデータ列の各ビットが、１対１に対応する変数ビットに入力されると捉えることもできる。変数ノードｃｉは、受信したデジタルデータｃｉ０の値を元に、当該変数ノードｃｉに対応するデジタルデータの値が１である確率Ｐｉを算出する。ここでは、変数ノードｃｉは、受信したデジタルデータの値ｃｉ０を、そのまま確率Ｐｉとして算出する。例えば変数ノードｃｉで受信したデジタルデータｃｉ０の値が「１」の場合、確率Ｐｉは「１」となり、受信したデジタルデータｃｉ０が「０」の場合、確率Ｐｉは「０」となる。そして、変数ノードｃｉは、自身と接続される複数のチェックノード｛ｆｊ，ｆｋ，・・・｝の各々に対して、算出した確率Ｐｉを第１メッセージ｛ｑｉｊ，ｑｋｊ，・・・｝として送信する。
【００２２】
チェックノードｆｊは、自身と接続される複数の変数ノード｛ｃｉ，ｃｋ，・・・｝のそれぞれから送信された第１メッセージ｛ｑｉｊ，ｑｋｊ，・・・｝を元に、パリティー条件を満たすように、自身と接続される変数ノード｛ｃｉ，ｃｋ，・・・｝ごとに、当該変数ノードに対応するデータが１である確率を示す第２メッセージ｛ｒｉｊ，ｒｋｊ，・・・｝を算出し、当該変数ノードへ返信する。ここでは、各変数ノードから送信される第１メッセージは、当該変数ノードで受信したデジタルデータの値そのものを示し、図１に例示された検査行列Ｈのパリティー条件は、０（Ｌｏｗ）の数が偶数であることなので、例えばチェックノードｆｊが受信した第１メッセージ｛ｑｉｊ，ｑｋｊ，・・・｝のうちｑｉｊ以外の値の和が「０」の場合は、パリティー条件を満たすためには、変数ノードｃｉで受信するデジタルデータの値は「０」でなければならない。チェックノードｆｊは、変数ノードｃｉで受信すべきデジタルデータの値（「０」または「１」）を、当該変数ノードｃｉに対応するデジタルデータの値が１である確率を示す第２メッセージｒｉｊとして算出するので、この場合、チェックノードｆｊにより算出される第２メッセージｒｉｊは「０」となり、当該第２メッセージｒｉｊは、変数ノードｃｉへ返信される。一方、例えばチェックノードｆｊが受信した第１メッセージ｛ｑｉｊ，ｑｋｊ，・・・｝のうちｑｉｊ以外の値の和が「１」の場合は、パリティー条件を満たすためには、変数ノードｃｉで受信するデジタルデータの値は「１」でなければならない。この場合、チェックノードｆｊにより算出される第２メッセージｒｉｊは「１」となり、当該第２メッセージｒｉｊは、変数ノードｃｉへ返信される。
【００２３】
変数ノードｃｉは、自身と接続される複数のチェックノード｛ｆｊ，ｆｋ，・・・｝の各々から受け取った第２メッセージ｛ｒｊｉ，ｒｋｉ，・・・｝と、自身の確率Ｐｉ（第１メッセージｑ）とを用いて、当該変数ノードｃｉに対応するデジタルデータの真の値ｃｉ１（当該変数ノードｃｉで受信すべきデジタルデータの値）を推定する。より具体的には、変数ノードｃｉは、自身と接続される複数のチェックノード｛ｆｊ，ｆｋ，・・・｝の各々から受け取った第２メッセージ｛ｒｊｉ，ｒｋｉ，・・・｝、および、自身の確率Ｐｉのそれぞれが示すデジタルデータの値の多数決により、当該変数ノードｃｉに対応するデジタルデータの真の値ｃｉ１を推定する。例えば「０」の数が多い場合は、ｃｉ１は「０」であると推定される一方、「１」の数が多い場合は、ｃｉ１は「１」であると推定される。
【００２４】
以上のようにして変数ノード｛ｃｉ，ｃｊ，・・・｝ごとに得られた推定値の列ｃ１＝｛ｃｉ１，ｃｋ１，・・・｝を用いてパリティチェックを行う（ここでは、確からしい値の確認と言う意味で尤度計算である。実際には、硬判定ではパリティーで尤度を表現するため、ほぼ同義である。ただし、全データに対して検査行列を用いてチェックするパリティチェックと区別するため、以下、尤度計算と呼ぶ。）。より具体的には、推定値の列ｃ１に対して、Ｈｃ１Ｔ＝０が成立するか否かを判定し、Ｈｃ１Ｔ＝０が成立する場合は、メモリから読み出されたデータ列（符号化されたデータの列）は、推定値の列ｃ１であると判断して、計算を終了する。一方、Ｈｃ１Ｔ＝０が成立しない場合、変数ノードｃｉは、上述の推定結果を示すｃｉ１を、第１メッセージとして、自身と接続される複数のチェックノード｛ｆｊ，ｆｋ，・・・｝の各々へ送信する。チェックノードｆｊは、自身と接続される複数の変数ノード｛ｃｉ，ｃｋ，・・・｝の各々から受信した第１メッセージ｛ｑｉｊ，ｑｋｊ，・・・｝を元に、パリティー条件を満たすように、自身と接続される変数ノード｛ｃｉ，ｃｋ，・・・｝ごとに、第２メッセージ｛ｒｉｊ，ｒｋｊ，・・・｝を算出し、当該変数ノードへ返信する。以上のアルゴリズムをパリティー条件が満たされるまで繰り返す。以上が、ＬＤＰＣ符号の基本的な誤り訂正方法の内容である。
【００２５】
ここで、軟判定方式による誤り訂正を行う場合は、高い訂正能力を実現できるものの、硬判定方式による誤り訂正を行う場合は、十分な訂正能力を実現できないという問題がある。これを検証するために、列数１０００程度の検査行列を用いたＬＤＰＣ符号に対する、硬判定方式および軟判定方式の各々による誤り訂正のシミュレーションを行った。シミュレーションの条件としては、ＡＷＧＮ通信路を仮定し、Ｓ／Ｎ比をパラメータとしてエラーを発生させ、軟判定方式および硬判定方式の各々による誤り訂正処理を行った。それぞれ１０通りの入力信号を用いて、エラー残数（エラービット数）のメジアン値を、上述のアルゴリズムの繰り返し回数に対して検証した。この検証の結果、図４に示すように、軟判定方式の場合は、繰り返し回数が２回で、エラービット数は０に達するが、硬判定方式の場合は、エラービット数が半分程度になったところで飽和してしまう。
【００２６】
硬判定方式では、エラーがある程度訂正されたところで、一方のビットの推定結果（多数決による推定結果）を反転すると、その影響を受けて、他方のビットがパリティー条件を満たさなくなり、他方のビットの推定結果を反転すると、その影響を受けて、一方のビットがパリティー条件を満たさなくなるというような、尤度計算の結果から生じる訂正処理計算の閉ループにはまり、それ以上エラーが訂正されない状態に陥ってしまうと考えられる。これは、物理系のシミュレーションにおいて、エネルギーのローカルミニマムで計算が停止してしまうことに似ている。
【００２７】
そこで、本実施形態では、硬判定方式における誤り訂正処理において、尤度計算の結果から生じる訂正処理計算の閉ループにはまり、それ以上誤りが訂正されなくなる状態に陥ることを防ぐためには、訂正処理計算の閉ループを崩すための外乱を与える必要があることを見出した。そして、本実施形態では、ローカルミニマムにトラップされにくいように、誤り訂正を行いながら、低い確率でランダムなビット反転を加えるという計算を行った。より具体的には、上述の多数決によるビット推定後、確率ｐ（０＜ｐ＜１）でビットを反転させる。例えば、図５に示すように、確率ｐ＝１／６００で、推定されたビットの値を反転させる場合においては、エラー残数は繰り返し回数に対して減少し、最終的に、推定されたビットの値を反転させない場合（ｐ＝０の場合）の１／３程度に達することがわかった。以上より、本実施形態では、パリティチェック計算のループを崩すためには、推定後のビットを、０より大きく１より小さい確率で反転させることが好ましいことを見出した。
【００２８】
図６は、確率ｐと、最終的なエラー残数のメジアン値との関係を示す図である。推定後のビットを反転させない場合においては、最終的なエラー残数のメジアン値は「１５」となるのに対して、確率ｐ＝１／６０００〜１／１００で、推定後のビットが反転する場合は、最終的なエラー残数のメジアン値は「１５」を下回るので、誤り訂正能力を向上させることが可能になることを見出した。また、確率ｐ＝１／１０００〜１／１００で、推定後のビットを反転させる場合は、最終的なエラー残数のメジアン値を「１０」以下にすることができるので、誤り訂正能力を一層向上させることが可能になることを見出した。
【００２９】
以上、本発明の原理を説明した。以下、本実施形態に係る誤り訂正装置１００の具体的な内容を説明する。図７は、誤り訂正装置１００の構成例を示すブロック図である。誤り訂正装置１００は、硬判定方式による誤り訂正処理を行うものであり、低密度パリティー検査行列を用いて符号化された１ビットのデータ列（硬判定により「０」または「１」が確定したデジタルデータ列、つまり、誤りを含む可能性があるデータ列と捉えることもできる）が入力される。図７に示すように、誤り訂正装置１００は、変数ノード部１０と、チェックノード部２０と、反転部３０とを備える。なお、この例では、反転部３０は、変数ノード部１０に内包されているが、これに限られるものではない。
【００３０】
図８は、変数ノード部１０およびチェックノード部２０の機能構成例を示すブロック図である。図８においては、反転部３０の図示を省略している。図８に示すように、変数ノード部１０は、第１算出部１１と推定部１２と判定部１３とを備える。一方、チェックノード部２０は、第２算出部２１を備える。以下、第１算出部１１、第２算出部２１、推定部１２、および判定部１３の各々の機能を説明する。
【００３１】
第１算出部１１は、低密度パリティー検査行列を用いて符号化された複数の１ビットのデータが入力される複数の変数ノードごとに設けられる。説明の便宜上、図８の例では、ひとつの第１算出部１１のみを図示している。各第１算出部１１は、自身に対応する変数ノードに入力される１ビットのデータの値が１である確率を示す第１メッセージを算出し、自身に対応する変数ノードが接続される２以上のチェックノードの各々に対して第１メッセージを送信する。本実施形態の誤り訂正装置１００は、硬判定方式による誤り訂正処理を行うので、各第１算出部１１は、自身に対応する変数ノードに入力されるデジタルデータの値を、当該変数ノードの第１メッセージとして算出し、当該変数ノードと接続される複数のチェックノードの各々に対して当該第１メッセージを送信する。
【００３２】
第２算出部２１は、低密度パリティー検査行列に応じた結線状態で複数の変数ノードと接続される複数のチェックノードごとに設けられる。説明の便宜上、図８の例では、ひとつの第２算出部２１のみを図示している。各第２算出部２１は、自身に対応するチェックノードに接続された２以上の変数ノードの各々から送信された第１メッセージを用いて、自身に対応するチェックノードに接続された２以上の変数ノードごとに、当該変数ノードに入力されるデータの値が１である確率を示す第２メッセージ（確からしい値と言う意味で尤度と呼ぶ）を、算出して当該変数ノードへ返信する。ここでは、各第２算出部２１は、自身に対応するチェックノードに接続された２以上の変数ノードごとに、自身に対応するチェックノードに接続された複数の変数ノードのうち当該変数ノード以外の変数ノードの第１メッセージとパリティー条件とから、当該変数ノードに入力されるべきと判断したデジタルデータの値（「０」または「１」）を、当該変数ノードの第２メッセージ（尤度）として算出し、算出した第２メッセージを当該変数ノードへ返信する。尤度の表現は、硬判定方式では、「１」らしさを１で表現し、「０」らしさを０で表現するというように、簡素に表現できる。
【００３３】
推定部１２は、複数の変数ノードごとに設けられる。説明の便宜上、図８の例では、ひとつの推定部１２のみを図示している。各推定部１２は、自身に対応する変数ノードの第１メッセージと第２メッセージの多数決により、自身に対応する変数ノードに入力されるデータの真の値（入力されるべきデータの値）を推定して推定値を生成する。例えば各推定部１２は、「０」の数が多い場合は、自身に対応する変数ノードに入力されるデータの真の値は「０」であると推定して推定値「０」を生成する。一方、「１」の数が多い場合は、自身に対応する変数ノードに入力されるデータの真の値は「１」であると推定して推定値「１」を生成する。なお、第１メッセージと第２メッセージを用いて、変数ノードに入力されるデータの真の値を推定する方法は、多数決に限らず、公知の様々な技術を利用することができる。要するに、各推定部１２は、自身に対応する変数ノードの第１メッセージと第２メッセージとを用いて、自身に対応する変数ノードに入力されるデータの真の値を推定して推定値を生成するものであればよい。
【００３４】
判定部１３は、後述の反転部３０から出力された推定値がパリティー条件を満たすか否かを判定する。後述するように、本実施形態では、全ての変数ノードの推定値が、反転部３０による反転の対象となり、判定部１３は、反転部３０から出力されたビット列ｃ１（反転されなかった推定値も含まれ得る）を用いてパリティチェックを行う。より具体的には、判定部１３は、ビット列ｃ１に対して、Ｈｃ１Ｔ＝０が成立するか否かを判定する。Ｈｃ１Ｔ＝０が成立する場合は、符号化されたデータの列は、反転部３０から出力されたビット列ｃ１であると判断して、計算を終了する。一方、Ｈｃ１Ｔ＝０が成立しない場合は、各第１算出部１１は、反転部３０から出力された、自身に対応する変数ノードの推定値を、自身に対応する変数ノードの第１メッセージとして算出する。そして、以上のアルゴリズムが繰り返される。
【００３５】
本実施形態では、上述の第１算出部１１、第２算出部２１、推定部１２、および、判定部１３の各々の機能は、専用のハードウェア回路（例えば半導体集積回路）により実現される。なお、これに限らず、例えばＣＰＵ、ＲＯＭ，ＲＡＭ等を備えたコンピュータが誤り訂正装置１００に搭載され、ＣＰＵがＲＯＭ等に格納されたプログラムを実行することにより、上述の第１算出部１１、第２算出部２１、推定部１２、および、判定部１３の各々の機能の少なくとも一部を実現することもできる。
【００３６】
図９は、誤り訂正装置１００の具体的な構成例を示す図である。図９に示すように、チェックノード部２０は、尤度計算部２１を備える。尤度計算部２１は、複数のチェックノードと１対１に対応する複数の尤度計算回路から構成される。尤度計算回路の具体的な構成については後述する。変数ノード部１０は、各変数ノードに繋がる多数決部１４を備える。多数決部１４は、複数の変数ノードと１対１に対応する複数の多数決回路から構成される。多数決回路の具体的な構成については後述する。なお、多数決回路は、上述の推定部１２に対応する。また、図９に示すように、変数ノード部１０は、複数の変数ノードと１対１に対応する複数の記憶セル１５を有する。各記憶セル１５には、当該記憶セル１５に対応する変数ノードの推定値が格納される。各記憶セル１５に格納された推定値は、反転部３０により反転される。この詳細な内容については後述する。
【００３７】
図９の例では、尤度計算部２１と多数決部１４は、検査行列に対応する結線で接続される。結線をインタリーブ部と呼ぶこともある。インタリーブ部は、物理的な配線で形成される形態であってもよいし、バス線で互いに繋がれた状態で、必要な情報を、時分割で互いに送信し合う形態であってもよい。
【００３８】
図１０は、尤度計算回路の具体的な構成例を示す図である。図１０では、変数ノードｃｉ，ｃｊ，ｃｋ，ｃｌの各々に接続されるチェックノードｆｊに対応する尤度計算回路２２が例示されている。図１０に示すように、尤度計算回路２２は、互いに直列に接続される４つの単位回路（Ｔ１〜Ｔ４）と、最終段のインバータ４０とを備える。４つの単位回路（Ｔ１〜Ｔ４）の各々は、ＣＭＯＳ５０とインバータ６０とを含む。第１段目の単位回路Ｔ１は変数ノードｃｉに対応し、ＣＭＯＳ５０のゲートには、変数ノードｃｉからの第１メッセージ（「０」または「１」）が入力され（ここでは、ゲートに入力される第１メッセージをｃｉと表記）、ＣＭＯＳ５０の出力信号は、第２段目の単位回路Ｔ２に入力される。また、第１段目の単位回路Ｔ１のインバータ６０の出力側は、ＰＭＯＳの入力側の電極に接続される一方、インバータ６０の入力側は、ＮＭＯＳの入力側の電極に接続される。さらに、インバータ６０の入力側には、ＧＮＤレベル（ローレベル）の入力信号が供給される。
【００３９】
第２段目の単位回路Ｔ２は変数ノードｃｊに対応し、ＣＭＯＳ５０のゲートには、変数ノードｃｊからの第１メッセージが入力され（ここでは、ゲートに入力される第１メッセージをｃｊと表記）、ＣＭＯＳ５０の出力信号は、第３段目の単位回路Ｔ３へ入力される。また、第２段目の単位回路Ｔ２のインバータ６０の出力側は、ＰＭＯＳの入力側の電極に接続される一方、インバータ６０の入力側は、ＮＭＯＳの入力側の電極に接続される。さらに、第２段目の単位回路Ｔ２のインバータ６０には、第１段目の単位回路Ｔ１の出力信号が入力される。
【００４０】
第３段目の単位回路Ｔ３は変数ノードｃｋに対応し、ＣＭＯＳ５０のゲートには、変数ノードｃｋからの第１メッセージが入力され（ここでは、ゲートに入力される第１メッセージをｃｋと表記）、ＣＭＯＳ５０の出力信号は、第４段目の単位回路Ｔ３へ入力される。また、第３段目の単位回路Ｔ３のインバータ６０の出力側は、ＰＭＯＳの入力側の電極に接続される一方、インバータ６０の入力側は、ＮＭＯＳの入力側の電極に接続される。さらに、第３段目の単位回路Ｔ３のインバータ６０には、第２段目の単位回路Ｔ２の出力信号が入力される。
【００４１】
第４段目の単位回路Ｔ４は変数ノードｃｌに対応し、ＣＭＯＳ５０のゲートには、変数ノードｃｌからの第１メッセージが入力され（ここでは、ゲートに入力される第１メッセージをｃｌと表記）、ＣＭＯＳ５０の出力信号は、最終段のインバータ４０へ入力される。最終段のインバータ４０で反転された信号が、最終的な出力信号となる。また、第４段目の単位回路Ｔ４のインバータ６０の出力側は、ＰＭＯＳの入力側の電極に接続される一方、インバータ６０の入力側は、ＮＭＯＳの入力側の電極に接続される。さらに、第４段目の単位回路Ｔ３のインバータ６０には、第３段目の単位回路Ｔ２の出力信号が入力される。
【００４２】
図１０の尤度計算回路２２では、入力ｃｉがローレベルの場合（「０」の場合）、第１段目の単位回路Ｔ１のＮＭＯＳはＯＦＦ、ＰＭＯＳはＯＮとなるので、ＧＮＤレベルの入力信号は、インバータ６０で反転された後、ＰＭＯＳを通過して、第２段目の単位回路Ｔ２へ入力される。一方、入力ｃｉがハイレベルの場合（「１」の場合）、第１段目の単位回路Ｔ１のＮＭＯＳはＯＮ、ＰＭＯＳはＯＦＦとなるので、ＧＮＤレベルの入力信号は、インバータ６０を通らずにＮＭＯＳを通過して、第２段目の単位回路Ｔ２へ入力される。図１０の尤度計算回路２２では、ＧＮＤレベルの入力信号は、ｃｉ，ｃｊ，ｃｋ，ｃｌのうちローレベルの数が偶数個であれば、遇数回反転した後に、最終段のインバータ４０で反転されるので、最終的な出力信号はハイレベルとなる。一方、ＧＮＤレベルの入力信号は、ｃｉ，ｃｊ，ｃｋ，ｃｌのうちローレベルの数が奇数個であれば、奇数回反転した後に、最終段のインバータ４０で反転されるので、最終的な出力信号はローレベルとなる。したがって、例えば「０（ローレベル）」の数が偶数であることがパリティー条件の場合、尤度計算回路２２からの出力信号がハイレベルであれば、パリティー条件は満たされる（パリティー整合）。一方、尤度計算回路２２からの出力信号はローレベルであれば、パリティー条件は満たされない（パリティー違反）。このように尤度計算からパリティー条件をチェックすることができる。
【００４３】
図１０の例では、ひとつの単位回路Ｔごとに４個のトランジスタを使用し、最終段のインバータ４０に２個のトランジスタを使用するので、必要なトランジスタの総数は、４×４＋２＝１８個である。図１０の対比例として、多段（多入力）ＸＯＲゲートによって尤度計算回路を実現する構成を想定すると、ＸＯＲゲートは、通常１６個のトランジスタで構成され、本例の場合、１つのチェックノードごとに３段のＸＯＲゲート、つまり４８個のトランジスタが必要になる（図１１参照）。これに対して、図１０の例では、必要なトランジスタの総数は１６個で済むので、単純にＸＯＲゲートを用いて尤度計算回路を実現する構成に比べて、必要なトランジスタの総数を低減できるとともに、尤度計算回路を極めて小さな面積で実現できる。
【００４４】
また、図１０のような回路では、インバータ出力を、単体ＭＯＳＦＥＴのソース電極から入力しているので、いわゆる「閾値落ち」の問題が生じる。例えばＮＭＯＳのゲート電極にＶｇを印加して入力側の電極から電圧を印加しても、ドレイン電極側はＶｇ−Ｖｔｎ（Ｖｔｎ：ＮＭＯＳの閾値電圧）までしか上昇しない。同様に、ＰＭＯＳのソースおよびゲート電極に０を入力した場合は、ドレイン電極側の電位はＶｔｐ（Ｖｔｐ：ＰＭＯＳの閾値電圧）までしか下がらない。実際、電源電圧１Ｖで１ＶのパルスがＮＭＯＳを通過した場合、パルス高さは０．６Ｖにまで低下し、０ＶがＰＭＯＳを通過した場合には０．４Ｖ程度にまで上昇する。しかし、図１０に例示した回路では、次段の単位回路Ｔへ出力する直前に、インバータ６０によって電圧を回復させることにより、以上のような「閾値落ち」を抑制することができる。
【００４５】
図１２は、多数決回路の具体的な構成例を示す図である。図１２では、一例として、チェックノードｆｉ，ｆｊの各々に接続される変数ノードｃｉに対応する多数決回路７０が例示されている。説明の便宜上、図１２の例では、チェックノードｆｉからの第２メッセージをｆｉ（「０」または「１」）、チェックノードｆｊからの第２メッセージをｆｊ（「０」または「１」）と表記する。また、変数ノードｃｉ自身の確率（第１メッセージ）をＰｉ（「０」または「１」）と表記する。
【００４６】
図１２に示すように、多数決回路７０は、３段のＡＮＤ回路７１，７２，７３と、２段のＯＲ回路７４，７５と、１段のＸＯＲ回路７６とを含む。この例では、ＡＮＤ回路７１には、チェックノードｆｉからの第２メッセージｆｉとチェックノードｆｊからの第２メッセージｆｊが入力される。また、ＡＮＤ回路７２には、チェックノードｆｉからの第２メッセージｆｉと変数ノードｃｉ自身の確率Ｐｉが入力される。さらに、ＡＮＤ回路７３には、チェックノードｆｊからの第２メッセージｆｊと変数ノードｃｉ自身の確率Ｐｉが入力される。
【００４７】
ＡＮＤ回路７１およびＡＮＤ回路７２の各々の出力は、ＯＲ回路７４に入力される。また、ＯＲ回路７４の出力とＡＮＤ回路７３の出力は、ＯＲ回路７５に入力される。そして、ＯＲ回路７５の出力と、ローレベルの入力信号ＧＮＤは、ＸＯＲ回路７６に入力され、ＸＯＲ回路７６の出力に応じて、多数決の結果が判定される。より具体的には、入力ｆｉ，ｆｊ，Ｐｉのうち、「０」の数が多い場合は、ＯＲ回路７５の出力はローレベルとなり、ＸＯＲ回路７６の出力もローレベル（「０」）を示す。一方、入力ｆｉ，ｆｊ，Ｐｉのうち、「１」の数が多い場合は、ＯＲ回路７５の出力はハイレベルとなり、ＸＯＲ回路７６の出力もハイレベル（「１」）を示す。なお、図１２に示す回路構成は、多数決回路の一例であり、これに限定されるものではない。
【００４８】
再び図７に戻り、反転部３０について説明する。反転部３０は、推定部１２により生成された推定値を、０より大きく１より小さい確率で反転させる。上述したように、硬判定方式における誤り訂正処理において、尤度計算の結果から生じる訂正処理計算が閉ループにはまり、それ以上誤りが訂正されなくなる状態に陥ることを防ぐためには、パリティチェック計算のループを崩すための外乱を与える必要があり、訂正処理計算の閉ループを崩すためには、推定部１２により生成された推定値を、０より大きく１より小さい確率で反転させることが好ましいことを見出したためである。上述したように、反転部３０による推定値の反転が行われる確率は、１／６０００〜１／１００の範囲であることが好ましい。さらに言えば、反転部３０による推定値の反転が行われる確率は、１／１０００〜１／１００の範囲であることが一層好ましい。
【００４９】
低確率でのビット反転を起こす機構として、例えばＭＯＳＦＥＴのランダムテレグラフノイズ（ＲＴＮ）が考えられる。図１３は、ＲＴＮによるＭＯＳＦＥＴの出力信号（ドレイン電流Ｉｄｓ）の変化の様子と、典型的なＭＯＳＦＥＴの構造例を示す図である。ＲＴＮとは、ＭＯＳＦＥＴの絶縁膜（ゲート酸化膜）における電荷のトラップ（束縛）、デトラップ（解放）に伴い、Ｉ−Ｖ特性の閾値電圧Ｖｔｈが変動する現象を指す。閾値電圧Ｖｔｈの変動は、ドレイン電流Ｉｄｓの変動により観測することができる。図１３において、Ｌは、ＭＯＳＦＥＴのゲート長を示す。また、Ｗは、ＭＯＳＦＥＴのチャネル幅を示す。ゲート長Ｌが２０ｎｍの世代では、実効的なゲート酸化膜厚にも依存するが、ＲＴＮにより、１／１０００程度の確率で、１００ｍＶ以上の閾値電圧Ｖｔｈの変動が起こると考えられており、適切なノイズ発生確率である。なお、ＲＴＮの信号は、ゲート長Ｌのみならず、チャネル幅Ｗにも依存して変化するため、必要とされる回路のサイズに応じて、適切なサイズのＭＯＳＦＥＴ構造を作ることが望ましい。
【００５０】
本実施形態の反転部３０は、複数の変数ノードと１対１に対応する複数のビット反転回路２００から構成されるが、これに限らず、例えば複数の変数ノードの中には、対応するビット反転回路が設けられない変数ノードが存在する形態であってもよい。要するに、反転部３０は、複数の変数ノードのうちの少なくとも１つの変数ノードに対応する推定値を低確率で反転させるものであればよい。本実施形態では、変数ノードごとに、当該変数ノードの推定値（推定部１２により推定された推定ビット）が格納される記憶セル１５（図９参照）が設けられ、その記憶セル１５に、当該変数ノードに対応するビット反転回路２００が接続される。図１４は、ひとつのビット反転回路２００の構成例を示す図である。図１４に示すように、ビット反転回路２００は、フリップフロップ部２１０と、フリップフロップ部２１０からの出力信号を反転させるインバータ２２０とを含む。なお、ここでフリップフロップと呼ぶのは、通電時の自己保持回路であることを意味しており、ラッチの一種と考えてもよい。具体的には、インバータの向かい合わせ構造を例示する。
【００５１】
フリップフロップ部２１０は、電源電位Ｖｄｄ１が供給される第１電源線２０１と、接地電位ＧＮＤ（＜Ｖｄｄ１）が供給される第２電源線２０２との間に配置される。フリップフロップ部２１０は、第１インバータ２１１と第２インバータ２１２とを含み、第１インバータ２１１の入力は第２インバータ２１２の入力と接続され、第１インバータ２１１の出力は第２インバータ２１２の出力と接続される。第１インバータ２１１および第２インバータ２１２の各々は、ＰＭＯＳとＮＭＯＳとの組み合わせから構成される。
【００５２】
フリップフロップ部２１０の入力側には、不図示の制御回路から供給される制御信号Ｃｔｌに応じてオンオフが切り替わるスイッチ素子２３０が設けられる。なお、この例では、スイッチ素子２３０はＮＭＯＳで構成されるが、これに限られるものではない。図１４の例では、入力信号Ｉｎｐｕｔとして、記憶セル１５に格納された推定値（「０」または「１」）が、スイッチ素子２３０を介してフリップフロップ部２１０に入力される。記憶セル１５に格納された推定値（「０」または「１」）を、フリップフロップ部２１０へ入力するタイミングで、制御信号Ｃｔｌはハイレベルに設定される。
【００５３】
例えば、スイッチ素子２３０がオン状態に遷移して、ハイレベル（「１」）の入力信号Ｉｎｐｕｔがフリップフロップ部２１０に入力されると、第１インバータ２１１のＰＭＯＳと第２インバータ２１２のＮＭＯＳがオンに遷移し、フリップフロップ部２１０の出力信号はローレベル（「０」）になる。一方、スイッチ素子２３０がオン状態に遷移して、ローレベル（「０」）の入力信号Ｉｎｐｕｔがフリップフロップ部２１０に入力されると、第１インバータ２１１のＮＭＯＳと第２インバータ２１２のＰＭＯＳがオンに遷移し、フリップフロップ部２１０の出力信号はハイレベル（「１」）になる。なお、一旦、入力信号Ｉｎｐｕｔがフリップフロップ部２１０に入力されると、その後にスイッチ素子２３０がオフに遷移しても、次回の入力信号Ｉｎｐｕｔが入力されるまでの間、フリップフロップ部２１０の出力信号は、前回の入力信号Ｉｎｐｕｔに応じたレベルに保持され続ける。すなわち、記憶情報がラッチされている。
【００５４】
フリップフロップ部２１０からの出力信号は、インバータ２２０により反転される。そして、インバータ２２０により反転された信号が、最終的な出力信号Ｏｕｔｐｕｔとして判定部１３へ出力される。図１４に示すように、インバータ２２０は、電源電位Ｖｄｄ２が供給される第３電源線２０３と、接地電位ＧＮＤ（＜Ｖｄｄ２）が供給される第４電源線２０４との間に配置される。なお、上記第１電源線２０１に供給される電位の値と第３電源線２０３に供給される電位の値が同じである場合は、第１電源線２０１と第３電源線２０３とが一体に形成されてもよい。同様に、上記第２電源線２０２に供給される電位の値と第４電源線２０４に供給される電位の値が同じである場合は、第２電源線２０２と第４電源線２０４とが一体に形成されてもよい。インバータ２２０は、ＰＭＯＳとＮＭＯＳとの組み合わせにより構成され、そのＰＭＯＳとＮＭＯＳとの間に介在するノードＮＤの電位が、最終的な出力信号Ｏｕｔｐｕｔとなる。
【００５５】
前述したように、ＭＯＳＦＥＴにＲＴＮが発生すると、閾値電圧Ｖｔｈの変動により、ドレイン電流Ｉｄｓ（ＭＯＳＦＥＴの出力信号）が反転する。ＳＲＡＭの微細化により、ＭＯＳＦＥＴでのＲＴＮの発生確率が高まるため、ビットエラーを生じるおそれがあるが、本実施形態では、このＲＴＮの発生によるビット反転の仕組みを、積極的に利用している。図１５は、ＭＯＳＦＥＴで発生するノイズ（ＲＴＮ）による電圧信号の経時的変化と、ノードＮＤの電位（出力信号Ｏｕｔｐｕｔ）の経時的変化を示す図である。図１５に示すＮｏｉｓｅは、代表的なＭＯＳＦＥＴのＲＴＮ特性をモデル化してシミュレーション用に再現したものであり、回路シミュレーションにて扱い易いように、振幅と周波数を任意の値に設定できるようになっている。この例では、振幅が０．２Ｖで周波数が５ＭＨｚに調節されている。前述したように、閾値電圧Ｖｔｈの変動は、ドレイン電流Ｉｄｓにより観測することができる。図１５に示すＮｏｉｓｅは、ドレイン電流Ｉｄｓの実測値を元に、閾値電圧Ｖｔｈの経時的変化をモデル化し、ゲート電圧に実効的に印加される電圧波形を示したものである。
【００５６】
図１４の制御信号Ｃｔｌをローレベルに設定して（スイッチ素子２３０をオフに設定して）、入力信号Ｉｎｐｕｔの電位をフリップフロップ部２１０に与えないようにしておき、フリップフロップ部２１０で保持される信号を、インバータ２２０で反転して取り出した結果を示すのが、ノードＮＤの電圧波形であり、図１５の最下段に示されている。フリップフロップ部２１０からの出力信号を、そのまま最終的な出力信号号Ｏｕｔｐｕｔとせずにインバータ２２０を通過させるのは、フリップフロップ部２１０のノイズの影響がそのまま出力信号号Ｏｕｔｐｕｔに伝わることを防止するためのである。要するに、Ｎｏｉｓｅの影響により、フリップフロップ部２１０で保持されていた出力信号（「０」または「１」）が反転した結果が、ノードＮＤの電位に反映されて出力されるものであればよい。この例は、ＶＤＤ１＝ＶＤＤ２の値を与えた例であるが、ノードＮＤの電位をさらに後段に効率的に伝えるために、ＶＤＤ２の値をＶＤＤ１の値よりも高い値に設定することもできる。
【００５７】
図１５に示すＮｏｉｓｅのように、５ＭＨｚ程度の高い周波数のＲＴＮが発生している場合、フリップフロップ部２１０の各ＭＯＳＦＥＴにおいて同じ時刻でＲＴＮが発生したタイミングで、フリップフロップ部２１０で保持されていた信号が反転し、それがノードＮＤの電位に反映される。なお、図１５の例では、図１４に示す電源電圧Ｖｄｄ１として、０．５Ｖが与えられている。電源電圧Ｖｄｄ１の値が十分に大きい場合は、フリップフロップ部２１０のノイズマージンがＲＴＮのノイズ振幅（閾値電圧Ｖｔｈの変動の振幅）よりも十分に大きくなって、ビット反転が起こる確率が極めて小さくなる。例えば電源電圧Ｖｄｄ１として１．０Ｖを与え、ノイズ振幅を０．１５Ｖに設定して上記の回路シミュレーションを行った結果、図１５に示すような、０〜１００マイクロ秒（μｓｅｃ）の範囲では、全くビット反転が起こらなかった。
【００５８】
電源電圧Ｖｄｄ１として０．５Ｖが与えられている図１５の例では、０〜１００マイクロ秒（μｓｅｃ）の範囲で、およそ２０回程度のビット反転が起こる。このビット反転レートから、ビット反転回路２００によるビット反転の発生確率（反転確率）を求めることができる。例えば、ビット反転回路２００の個数あたりの反転確率として、１０００個に１個の反転確率（１／１０００）を得たいときに、図１５のビット反転レートを示す回路構成を用いた場合、１００μｓｅｃで１個当たり２０回、１０ｎｓｅｃだと、１０００個当たり２回の反転が生じることになる。これは１０００個当たり２個と同義であると解釈できる。従って、２／１０００のビット反転レートになるので、目的が１／１０００の場合は、目的の値よりも２倍大きいということになる。ビット反転レートを小さくするには、ＲＴＮの振幅および周波数を小さくすればよい。逆に、ビット反転レートを大きくする場合は、ＲＴＮの振幅および周波数を大きくすればよい。ＲＴＮの振幅は、ＭＯＳＦＥＴのゲート長Ｌとチャネル幅Ｗとから求まり、ゲート面積（＝Ｌ×Ｗ）に反比例する。また絶縁膜（ゲート酸化膜）の厚さにも反比例する。例えば振幅０．１Ｖというのは、絶縁膜の厚さ（ＳｉＯ２換算）を１０ｎｍ程度にし、Ｌ（＝Ｗ）を２０ｎｍ程度にすれば十分可能であることが実験的に示されている。周波数は絶縁膜の種類やゲート電圧の大きさに依存し、キャリアの絶縁膜捕獲あるいは解放（脱出）の時定数（τｃあるいはτｅ）が１μｓｅｃ程度であれば、ＲＴＮは十分に観測できる。０．１μｓｅｃ以下の観測は、高周波測定のためのシールドやインピーダンスマッチングなどの工夫が必要なため、一般的にデータが示されることは稀だが、観測が物理的に不可能ということはない。なお、時定数がゲート電圧や基板バイアス電圧に依存することを利用して設計することもできる。
【００５９】
以上の実装方式を用いることで、経時的変化が不規則（ランダム）な信号を発生するＲＴＮが、ＭＯＳＦＥＴという、素子レベルのサイズで発生することを利用して、回路レベルでも小さなビット反転回路２００を構成できる。本実施形態のビット反転回路２００は、複数の変数ノードと１対１に対応し、推定部１２による推定値が格納される複数の記憶セル１５の各々に対して、小さな回路面積増で付け加えることができる。もともと変数ノードがＳＲＡＭで構成されていた場合は、ＬＷ縮小の効果で、むしろ従来よりも小さな回路面積になることもあり得る。
【００６０】
次に、図１６を参照しながら、本実施形態の誤り訂正装置１００による処理の一例を説明する。図１６は、本実施形態の誤り訂正装置１００による処理の一例を示すフローチャートである。図１６に示すように、まず複数の第１算出部１１は、１対１に対応する複数のデータ（１ビットのデータ）を受信する（ステップＳ１）。次に、各第１算出部１１は、自身に対応する変数ノードの第１メッセージを算出し、自身に対応する変数ノードに接続される複数のチェックノードの各々に対して第１メッセージを送信する（ステップＳ２）。
【００６１】
次に、各第２算出部２１は、自身に対応するチェックノードに接続された複数の変数ノードの各々から送信された第１メッセージを用いて、自身に対応するチェックノードに接続された２以上の変数ノードごとに、パリティー条件を満たすように第２メッセージを算出し、算出した第２メッセージを当該変数ノードへ返信する（ステップＳ３）。次に、各推定部１２は、自身に対応する変数ノードごとに、第１算出部１１で算出された第１メッセージと、当該変数ノードが接続された複数のチェックノードの各々から受信した第２メッセージとの多数決により、当該変数ノードに対応するデータの真の値を推定する（ステップＳ４）。次に、反転部３０は、各推定部１２により生成された推定値の列を、１より小さい確率で反転させ（ステップＳ５）、判定部１３へ送る。
【００６２】
次に、判定部１３は、反転部３０から渡されたデータ列と検査行列を用いて全データ分に対して一気にパリティチェックを行い、パリティー整合か否かを判定する（ステップＳ６）。パリティー整合であると判定した場合（ステップＳ６の結果：ＹＥＳの場合）、処理は終了する。パリティー違反であると判定した場合（ステップＳ６の結果：ＮＯの場合）、判定部１３は、処理回数（上述のアルゴリズムの繰り返し回数）が規定回数に到達したか否かを判定する（ステップＳ７）。処理回数が、規定回数に到達していないと判定された場合（ステップＳ７の結果：ＮＯの場合）、各第１算出部１１は、反転部３０から出力された、自身に対応する変数ノードの推定値を、当該変数ノードの第１メッセージとして算出する。そして、上述のステップＳ２以降の処理が繰り返される。
【００６３】
以上に説明したように、本実施形態では、硬判定方式における誤り訂正処理において、尤度計算（チェックノード内でのパリティチェック）の結果から生じる訂正処理計算が閉ループにはまり、それ以上誤りが訂正されなくなる状態に陥ることを防ぐためには、尤度計算の結果から生じる訂正処理計算の閉ループを崩すための外乱を与える必要があることを見出した。そして、本実施形態では、この訂正処理計算の閉ループを崩すために、推定部１２により生成された推定値を、０より大きく１より小さい確率で反転させる。これにより、硬判定方式における誤り訂正処理の誤り訂正能力を向上させることができる。また、本実施形態では、軟判定方式と硬判定方式とを組み合わせる必要が無いので、簡易な構成で誤り訂正能力を向上させることが可能な誤り訂正装置を提供することができる。
【００６４】
以上、本発明の実施形態を説明したが、上述の実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。以下、変形例を記載する。なお、以下の変形例を任意に組み合わせてもよい。
【００６５】
（１）変形例１
例えば上述の実施形態では、反転部３０は、変数ノード部１０に内包されているが、これに限らず、例えば図１７に示すように、反転部３０が、変数ノード部１０およびチェックノード部２０の外部に設けられてもよい。
【００６６】
（２）変形例２
上述のビット反転回路の構成は、図１４の形態に限られるものではなく、例えば図１８に示す形態であってもよい。図１８に示すビット反転回路３００は、ＲＴＮにより反転されたＭＯＳＦＥＴの出力信号を、所定のクロック信号に同期させて取り出す形態である。より具体的には以下のとおりである。図１８に示すように、ビット反転回路３００は、ビット反転素子３１０と、抵抗３２０と、クロック入力部３３０とを含んで構成される。ビット反転素子３１０および抵抗３２０は、電源電位Ｖｄｄ３が供給される第５電源線３０１と、接地電位ＧＮＤ（＜Ｖｄｄ３）が供給される第６電源線３０２との間に配置され、互いに直列に接続される。第５電源線３０１から第６電源線３０２へ至る電流経路上において、ビット反転素子３１０と抵抗３２０との間にはノードＮＤ２が介在し、当該ノードＮＤ２は、クロック入力部３３０の入力側に接続される。
【００６７】
ビット反転素子３１０は、ＭＯＳＦＥＴで構成され、第５電源線３０１とノードＮＤ２との間に配置される。ビット反転素子３１０のゲートには、対応する変数ノードの推定値（「０」または「１」）が入力される。例えばビット反転素子３１０がＮＭＯＳで構成される場合、対応する変数ノードの推定値（記憶セル１５に格納された推定値）が「０」であれば、ビット反転素子３１０はＯＦＦとなり、ノードＮＤ２の出力電位（ＭＯＳＦＥＴの出力信号）はローレベルになる。一方、対応する変数ノードの推定値が「１」であれば、ビット反転素子３１０はＯＮとなり、ノードＮＤ２の出力電位はハイレベルになる。上述したように、ＲＴＮの発生により、ＭＯＳＦＥＴの閾値電圧Ｖｔｈが変動することにより、ノードＮＤ２の出力電位は、低確率で反転する。なお、図１８の例では、ビット反転素子３１０は、ＮＭＯＳで構成されているが、これに限らず、例えばＰＭＯＳで構成されてもよい。
【００６８】
クロック入力部３３０は、ＮＭＯＳとＰＭＯＳとの組み合わせにより構成され、所定のクロック信号ＣＬＫをクロック入力部３３０に入力することで、ノードＮＤ２の出力電位をサンプリングして、判定部１３へ出力する。ＮＭＯＳのゲートには、クロック信号ＣＬＫが入力される一方、ＰＭＯＳのゲートには、クロック信号ＣＬＫを反転した信号が入力される。
【００６９】
いま、図１８に示すビット反転回路３００に対応する記憶セル１５に格納された推定値（ビット反転回路３００に対応する変数ノードの推定値）が「１」である場合を想定する。この場合、ＮＭＯＳで構成されるビット反転素子３１０のゲートには、ハイレベル（「１」）の信号が入力されるので、ビット反転素子３１０はオンに遷移し、ノードＮＤ２の出力電位はハイレベルになるはずであるが、ＲＴＮの発生により、低確率で、ビット反転素子３１０の出力信号の反転が起こる。図１９は、この場合のノードＮＤ２の出力電位と、クロック信号ＣＬＫとの関係の一例を示す図である。以上のようなビット反転回路３００を用いても、ビット反転素子３１０のゲートに入力される推定ビットを、低確率で反転させることができる。要するに、反転部３０は、ランダムテレグラフノイズの発生により閾値電圧が変動するＭＯＳＦＥＴを含み、閾値電圧の変動に応じて、推定部１２により生成された推定値を反転させる形態とすることができる。
【００７０】
（３）変形例３
また、上述のビット反転回路の代わりに、例えば図２０に示すような乱数発生回路４００を用いることもできる。図２０に示す乱数発生回路４００は、フリップフロップ型に接続された２つのＮＡＮＤ回路４０１および４０２と、ＮＡＮＤ回路４０１側に接続される抵抗Ｒ１およびコンデンサＣ１と、ＮＡＮＤ回路４０２側に接続される抵抗Ｒ２およびコンデンサＣ２とを含む。
【００７１】
この乱数発生回路４００は、Ｂ側のコントロール入力をＯＮにすると、動作を開始する。ＮＡＮＤ回路４０２に入力されるＢ側のコントロール入力がローレベル（「０」）である（つまり、コンデンサＣ２に蓄えられている電荷量は０）とすると、ＮＡＮＤ回路４０２の出力はハイレベル（「１」）となり、Ａ側のコンデンサＣ１の充電が開始される。コンデンサＣ１の充電が進行すると、コンデンサＣ１を介したＮＡＮＤ回路４０１への入力はローレベルとなるので、ＮＡＮＤ回路４０１の出力はハイレベルとなり、今度は、Ｂ側のコンデンサＣ２の充電が開始される。これが交互に繰り返されることにより、ＮＡＮＤ回路４０１からの出力（Ｏｕｔｐｕｔ）は、「１」と「０」とを交互に繰り返す信号となる。この繰り返し周期は、コンデンサＣ１およびＣ２の充電時間に応じて決まり、コンデンサの容量と抵抗Ｒとの積（Ｃ×Ｒ）に比例する。例えば記憶セル１５に格納された推定値（対応する変数ノードの推定値）を、乱数発生回路４００から出力される信号（「１」または「０」）に置き換えることで、当該推定値を、低確率で反転させることもできる。
【００７２】
（４）変形例４
また、例えば図２１に示すような乱数発生回路５００でビット反転回路が構成されてもよい。図２１に示す乱数発生回路５００は、クロック信号ＣＬＫが入力されるビット反転素子５１０と、抵抗５２０と、インバータ５３０とを備える。ビット反転素子５１０は、絶縁体５１１と、絶縁体５１１を挟持する一対の電極５１２，５１３とを含む。電極５１２には、クロック信号ＣＬＫが入力される。また、電極５１３は、抵抗５２０の一方の端部に接続される。抵抗５２０の他方の端部は、接地電位ＧＮＤが供給される接地線５０１に接続される。ビット反転素子５１０と抵抗５２０との間に介在するノードＮＤ３は、インバータ５３０の入力側に接続される。
【００７３】
この例では、ＲＴＮの発生により、ビット反転素子５１０の抵抗が変動する。つまり、ビット反転素子５１０は、低確率で抵抗が変動する可変抵抗素子として振る舞い、ビット反転素子５１０の抵抗の変動に伴い、ノードＮＤ３の出力電位も変動する。これにより、乱数発生回路５００の出力信号（インバータ５３０からの出力信号）が、低確率で反転する。例えば記憶セル１５に格納された推定値を、乱数発生回路５００から出力される信号（「１」または「０」）に置き換えることで、当該推定値を低確率で反転させることもできる。要するに、反転部３０は、２値の信号（「０」または「１」）をランダムに出力する乱数発生回路を含み、乱数発生回路から出力される信号に応じて、推定部１２により生成された推定値を反転させる形態とすることもできる。
【００７４】
（５）変形例５
また、以上の例では、反転部３０は、半導体集積回路で構成されているが、これに限らず、例えばＣＰＵ、ＲＯＭ、ＲＡＭ等を備えたコンピュータが誤り訂正装置に搭載され、ＣＰＵがＲＯＭ等に格納されたプログラムを実行することにより、上述の反転部３０の機能が実現される構成であってもよい。要するに、反転部３０は、推定部１２により生成された推定値（「０」または「１」のデジタルデータ）を、０より大きく１より小さい確率で反転させる機能を有するものであればよい。
【００７５】
また、上述の誤り訂正装置１００に搭載されたコンピュータで実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するようにしてもよい。また、上述の誤り訂正装置１００に搭載されたコンピュータで実行されるプログラムを、インターネット等のネットワーク経由で提供または配布するようにしてもよい。また、上述の誤り訂正装置１００で実行されるプログラムを、ＲＯＭ等の不揮発性の記録媒体に予め組み込んで提供するようにしてもよい。
【符号の説明】
【００７６】
１０  変数ノード部
１１  第１算出部
１２  推定部
１３  判定部
２０  チェックノード部
２１  第２算出部
２２  尤度計算回路
３０  反転部
１００  誤り訂正装置
【図１】
0005591876.tif 000002
【図２】
0005591876.tif 000003
【図３】
0005591876.tif 000004
【図４】
0005591876.tif 000005
【図５】
0005591876.tif 000006
【図６】
0005591876.tif 000007
【図７】
0005591876.tif 000008
【図８】
0005591876.tif 000009
【図９】
0005591876.tif 000010
【図１０】
0005591876.tif 000011
【図１１】
0005591876.tif 000012
【図１２】
0005591876.tif 000013
【図１３】
0005591876.tif 000014
【図１４】
0005591876.tif 000015
【図１５】
0005591876.tif 000016
【図１６】
0005591876.tif 000017
【図１７】
0005591876.tif 000018
【図１８】
0005591876.tif 000019
【図１９】
0005591876.tif 000020
【図２０】
0005591876.tif 000021
【図２１】
0005591876.tif 000022