JP5591876B2 - 誤り訂正装置、誤り訂正方法およびプログラム - Google Patents

誤り訂正装置、誤り訂正方法およびプログラム Download PDF

Info

Publication number
JP5591876B2
JP5591876B2 JP2012140866A JP2012140866A JP5591876B2 JP 5591876 B2 JP5591876 B2 JP 5591876B2 JP 2012140866 A JP2012140866 A JP 2012140866A JP 2012140866 A JP2012140866 A JP 2012140866A JP 5591876 B2 JP5591876 B2 JP 5591876B2
Authority
JP
Japan
Prior art keywords
variable
node
message
probability
variable nodes
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2012140866A
Other languages
English (en)
Other versions
JP2014007496A (ja
Inventor
孝生 丸亀
義史 西
ジィエジィ 陳
悠介 東
貴宏 栗田
祐一郎 三谷
敦寛 木下
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP2012140866A priority Critical patent/JP5591876B2/ja
Priority to US13/861,547 priority patent/US9054739B2/en
Publication of JP2014007496A publication Critical patent/JP2014007496A/ja
Application granted granted Critical
Publication of JP5591876B2 publication Critical patent/JP5591876B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/11Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
    • H03M13/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/11Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
    • H03M13/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1105Decoding
    • H03M13/1108Hard decision decoding, e.g. bit flipping, modified or weighted bit flipping

Landscapes

  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Error Detection And Correction (AREA)

Description

本発明の実施形態は、誤り訂正装置、誤り訂正方法およびプログラムに関する。
従来、行列内の「1」の密度が疎である低密度パリティー検査行列を用いたLDPC(Low Density Parity Check:低密度パリティー検査)符号が知られている。LDPC符号の復号において、軟判定方式による誤り訂正を行う場合は、高い訂正能力を実現できるものの、処理時間が増大してしまう。一方、硬判定方式による誤り訂正を行う場合は、処理速度を高めることができるものの、十分な訂正能力を実現できないという問題がある。
そこで、従来においては、硬判定方式と軟判定方式とを組み合わせ、硬判定方式では誤り訂正ができなかったものに対して軟判定方式による誤り訂正を行うという技術が知られている。
特開2011−197957号公報
しかしながら、硬判定方式と軟判定方式とを組み合わせる場合は、半導体集積回路等を用いた実装の構成が複雑化するという問題がある。
本発明が解決しようとする課題は、簡易な構成で誤り訂正能力を向上させることが可能な誤り訂正装置、誤り訂正方法およびプログラムを提供することである。
実施形態の誤り訂正装置は、第1算出部と第2算出部と推定部と反転部とを備える。第1算出部は、低密度パリティー検査行列を用いて符号化された複数の1ビットのデータが入力される複数の変数ノードごとに設けられ、変数ノードに入力されるデータの値が1である確率を示す第1メッセージを算出する。第2算出部は、低密度パリティー検査行列に応じた結線状態で複数の変数ノードと接続される複数のチェックノードごとに設けられ、チェックノードに接続された2以上の変数ノードのそれぞれの第1メッセージを用いて、チェックノードに接続された2以上の変数ノードごとに、変数ノードに入力されるデータの値が1である確率を示す第2メッセージを算出する。推定部は、複数の変数ノードごとに設けられ、第1メッセージと第2メッセージとを用いて、変数ノードに入力されるデータの真の値を推定して推定値を生成する。反転部は、複数の変数ノードのうちの少なくとも1つの変数ノードに対応する推定値を、0より大きく1より小さい確率で反転させる。
実施形態の誤り訂正方法は、第1算出ステップと第2算出ステップと推定ステップと反転ステップとを含む。第1算出部ステップは、低密度パリティー検査行列を用いて符号化された複数の1ビットのデータが入力される複数の変数ノードごとに、変数ノードに入力されるデータの値が1である確率を示す第1メッセージを算出する。第2算出ステップは、低密度パリティー検査行列に応じた結線状態で複数の変数ノードと接続される複数のチェックノードのそれぞれに接続された2以上の変数ノードのそれぞれの第1メッセージを用いて、各チェックノードに接続された2以上の変数ノードごとに、変数ノードに入力されるデータの値が1である確率を示す第2メッセージを算出する。推定ステップは、複数の変数ノードごとに、第1メッセージと第2メッセージとを用いて、変数ノードに入力されるデータの真の値を推定して推定値を生成する。反転ステップは、複数の変数ノードのうちの少なくとも1つの変数ノードに対応する推定値を、0より大きく1より小さい確率で反転させる。
実施形態のプログラムは、コンピュータに、第1算出ステップと第2算出ステップと推定ステップと反転ステップとを実行させるためのプログラムである。第1算出部ステップは、低密度パリティー検査行列を用いて符号化された複数の1ビットのデータが入力される複数の変数ノードごとに、変数ノードに入力されるデータの値が1である確率を示す第1メッセージを算出する。第2算出ステップは、低密度パリティー検査行列に応じた結線状態で複数の変数ノードと接続される複数のチェックノードのそれぞれに接続された2以上の変数ノードのそれぞれの第1メッセージを用いて、各チェックノードに接続された2以上の変数ノードごとに、変数ノードに入力されるデータの値が1である確率を示す第2メッセージを算出する。推定ステップは、複数の変数ノードごとに、第1メッセージと第2メッセージとを用いて、変数ノードに入力されるデータの真の値を推定して推定値を生成する。反転ステップは、複数の変数ノードのうちの少なくとも1つの変数ノードに対応する推定値を、0より大きく1より小さい確率で反転させる。
実施形態の検査行列を表現するタナーグラフの一例を示す図。 実施形態の第2メッセージの算出方法の例を説明するための図。 実施形態の第1メッセージの再計算方法の例を説明するための図。 実施形態の軟判定方式および硬判定方式の検証結果の一例を示す図。 実施形態のアルゴリズムの繰り返し回数とエラー残数との関係を示す図。 実施形態のビット反転確率とエラー残数との関係を示す図。 実施形態の誤り訂正装置の構成例を示す図。 実施形態の変数ノード部およびチェックノード部の機能構成例を示す図。 実施形態の誤り訂正装置の具体的な構成例を示す図。 実施形態の尤度計算回路の構成例を示す図。 対比例の尤度計算回路の構成例を示す図。 実施形態の多数決回路の構成例を示す図。 実施形態のRTNの様子と、MOSFETの構造例を示す図。 実施形態のビット反転回路の構成例を示す図。 実施形態のビット反転回路によるビット反転の様子を示す図。 実施形態の誤り訂正装置による処理の一例を示すフローチャート。 変形例のビット反転回路の構成例を示す図。 変形例のビット反転回路の出力とクロック信号との関係を示す図。 変形例の誤り訂正装置の構成例を示す図。 変形例のビット反転回路の構成例を示す図。 変形例のビット反転回路の構成例を示す図。
以下、添付図面を参照しながら、本発明に係る誤り訂正装置、誤り訂正方法およびプログラムの実施形態を詳細に説明する。
まず、本実施形態に係る誤り訂正装置の説明を行う前に、LDPCに関する説明を行う。LDCP符号とは、行列内における「1」の密度が疎である(行列の大多数の成分が「0」であり、小数の成分のみが「1」である)低密度パリティー検査行列H(以下の説明では、単に「検査行列H」と呼ぶ場合がある)によって特徴付けられる符号である。検査行列Hのサイズは符号長に応じて大きくなるが、説明の便宜上、ここでは、検査行列Hは、8行×4列の行列であることを想定する。
検査行列Hの各行および各列に含まれる1の数を重みとよび、ここでは、検査行列Hの各行の重み、および、各列の重みの各々は0よりも大きいものとする。各行のそれぞれの重みが一様(一定値)であり、かつ、各列のそれぞれの重みが一様(一定値)である場合を正則と呼ぶ。ここでは、検査行列Hは、正則行列であり、各行のそれぞれの重みはすべて4であり、各列のそれぞれの重みはすべて2であるとする。
LDPC方式の符号では、通信路に送信またはメモリに格納して処理する対象のデータ列xを、Hc=0となるようなデータ列cに変換する。このcを符号と呼ぶ。つまり、情報処理に使用されるデータは元の信号xそのものではなく、符号cである。一般に、符号cはデータ列xよりも長いデータ列であり、データ列xに含まれる情報の他にエラー訂正に必要な情報も含んでいるが、符号化自体は、データ列xと符号cとが1対1に対応する写像である。つまり、データ列xが与えられれば符号cは一意に決まり、逆に符号cが与えられれば元のデータ列xは一意に決まる。(データ列xの長さ)/(符号cの長さ)を符合化率と呼ぶ。符合化率が高い方が効率の良い誤り訂正方式と言える。
検査行列Hは、複数の行と1対1に対応する複数のチェックノードと、複数の列と1対1に対応する複数の変数ノードとの間の結線状態を示すタナーグラフにより表現することができる。説明を簡単にするために、8bitの例を示すが、実際の例では、後述するように例えば1000bitのように長いデータ列を扱う。図1は、検査行列Hを表現するタナーグラフの一例を示す図である。タナーグラフは、検査行列Hの複数の行(図1の例では4行)と1対1に対応する複数のチェックノードf0〜f3を上段に配置し、検査行列Hの複数の列(図1の例では8列)と1対1に対応する複数の変数ノードc0〜c7を下段に配置し、検査行列Hの成分が「1」となる行と列の組み合わせに対応するチェックノードfjと変数ノードciとを結線(接続)する。例えば、図1の例では、第0行に対応するチェックノードf0と、第1列に対応する変数ノードc1とは結線されているが、これは、検査行列Hの第0行第1列の成分は「1」であることを示す。このように、チェックノードfjと変数ノードciとの結線状態を示すタナーグラフにより検査行列Hを表現することができる。
次に、LDPC符号の基本的な誤り訂正方法を説明する。ここでは、確率伝播法(belief propagation,BP法)で説明する。具体的には軟判定方式による誤り訂正方法を説明する。軟判定とは、1つの閾値を用いて「0」または「1」をデジタル的に判定する硬判定の対義語であり、0か1かを完全には判定せずに、0である確率(「0」である尤度)または1である確率(「1」である尤度)をアナログ的に判定するものである。
ここでは、検査行列Hを用いて符号化されたデータ(デジタルデータ)の集合は、不図示のメモリ(例えば、DRAM、MRAM、NAND型フラッシュメモリ、ReRAMなど)や通信路に格納されており、符号化されたデータの列を当該メモリから読み出すときの物理量(例えば読み出し電圧の値)の列{yi}が、各変数ノード{ci,ck,・・・}に入力される。変数ノードciは、受信した物理量yiから、メモリに格納されていたデジタルデータの値が1である確率Pi(見方を変えれば、変数ノードciに対応するデジタルデータの値が1である確率)を算出する。変数ノードciは、自身と接続されるチェックノード{fj,fk,・・・}の各々に対して、算出した確率Piを第1メッセージ{qij,qkj,・・・}として送信する。
チェックノードfjは、自身と接続される複数の変数ノード{ci,ck,・・・}のそれぞれから送信された第1メッセージ{qij,qkj,・・・}を元に、パリティー条件を満たすように、自身と接続される変数ノード{ci,ck,・・・}ごとに、当該変数ノードに対応するデジタルデータの値が1である確率を示す第2メッセージ{rij,rkj,・・・}を算出し、当該変数ノードへ返信する(図2参照)。ここで、チェックノードfjは、例えば変数ノードciに対して返信する第2メッセージrijを算出する際に、当該変数ノードciから送信された第1メッセージqijは考慮に入れない。つまり、変数ノードciは、チェックノードfjと接続される、変数ノードci以外の変数ノード{ck,cl,・・・}の第1メッセージ{qkj,clj,・・・}に基づいて算出された第2メッセージrijを受け取ることになる。
変数ノードciは、自身と接続される複数のチェックノード{fj,fk,・・・}の各々から受け取った第2メッセージ{rji,rki,・・・}と、自身の確率Pi(第1メッセージq)とを用いて、受信した物理量yiに対応するデジタルデータの値が1であった確率Qiを計算する。この例では、Qiが1/2以上であれば、受信した物理量yiに対応するデジタルデータの値は1であると仮定し、Qiが1/2未満であれば、受信した物理量yiに対応するデジタルデータの値は0であると仮定する。
そして、この仮定値を用いてパリティチェックを行う。より具体的には、仮定値の列ctemp={c0temp,c1temp,・・・}に対して、Hctemp =0が成立するか否かを判定し、Hctemp =0が成立する場合は、仮定値の列ctempを、メモリに格納されていたデジタルデータ列であると結論付けて、計算を終了する。ただし、この結論は推定結果であるので、誤ったデータに変更されている可能性はある。これが、LDPCが「推論型」と分類される由縁である。一方、Hctemp =0が成立しない場合は、変数ノードciは、第1メッセージを再計算し、自身と接続されるチェックノード{fj,fk,・・・}へ送信する。この場合、例えば変数ノードciからチェックノードfjへ送信する第1メッセージqijは、確率Piと、変数ノードciと接続される、チェックノードfj以外のチェックノード{fk,fl,・・・}から受信した第2メッセージ{rki,rli,・・・}とから計算される。すなわち、この第1メッセージqijの算出の際に、チェックノードfjから受信した第2メッセージrjiは考慮されない。つまり、チェックノードfjは、変数ノードciと接続される、チェックノードfj以外のチェックノード{fk,fl,・・・}の第2メッセージ{rki,rli,・・・}に基づいて算出された第1メッセージqijを受け取ることになる(図3参照)。チェックノードfjは、自身と接続される変数ノード{ci,ck,・・・}の各々から受信した第1メッセージ{qij,qkj,・・・}を元に、パリティー条件を満たすように、自身と接続される変数ノード{ci,ck,・・・}ごとに、当該変数ノードに対応するデータが1である確率を示す第2メッセージ{rij,rkj,・・・}を算出し、当該変数ノードへ返信する。以上のアルゴリズムをパリティー条件が満たされるまで繰り返す。LDPCのエラー訂正は計算の繰り返しにより行われる。
次に、硬判定方式による誤り訂正方法を説明する。ここでは、メモリ(例えば、DRAM、MRAM、NAND型フラッシュメモリ、ReRAMなど)や通信路からの、符号化されたデータの列の読み出しは終了し、例えば読み出し電圧の値が所定の閾値以上であるか否かに応じて、「0」または「1」が確定したデジタルデータ列c={c ,c ,・・・}が各変数ノード{ci,cj,・・・}に入力される。見方を変えれば、検査行列Hを用いて符号化された、誤りを含む可能性がある1ビットのデータ列の各ビットが、1対1に対応する変数ビットに入力されると捉えることもできる。変数ノードciは、受信したデジタルデータc の値を元に、当該変数ノードciに対応するデジタルデータの値が1である確率Piを算出する。ここでは、変数ノードciは、受信したデジタルデータの値c を、そのまま確率Piとして算出する。例えば変数ノードciで受信したデジタルデータc の値が「1」の場合、確率Piは「1」となり、受信したデジタルデータc が「0」の場合、確率Piは「0」となる。そして、変数ノードciは、自身と接続される複数のチェックノード{fj,fk,・・・}の各々に対して、算出した確率Piを第1メッセージ{qij,qkj,・・・}として送信する。
チェックノードfjは、自身と接続される複数の変数ノード{ci,ck,・・・}のそれぞれから送信された第1メッセージ{qij,qkj,・・・}を元に、パリティー条件を満たすように、自身と接続される変数ノード{ci,ck,・・・}ごとに、当該変数ノードに対応するデータが1である確率を示す第2メッセージ{rij,rkj,・・・}を算出し、当該変数ノードへ返信する。ここでは、各変数ノードから送信される第1メッセージは、当該変数ノードで受信したデジタルデータの値そのものを示し、図1に例示された検査行列Hのパリティー条件は、0(Low)の数が偶数であることなので、例えばチェックノードfjが受信した第1メッセージ{qij,qkj,・・・}のうちqij以外の値の和が「0」の場合は、パリティー条件を満たすためには、変数ノードciで受信するデジタルデータの値は「0」でなければならない。チェックノードfjは、変数ノードciで受信すべきデジタルデータの値(「0」または「1」)を、当該変数ノードciに対応するデジタルデータの値が1である確率を示す第2メッセージrijとして算出するので、この場合、チェックノードfjにより算出される第2メッセージrijは「0」となり、当該第2メッセージrijは、変数ノードciへ返信される。一方、例えばチェックノードfjが受信した第1メッセージ{qij,qkj,・・・}のうちqij以外の値の和が「1」の場合は、パリティー条件を満たすためには、変数ノードciで受信するデジタルデータの値は「1」でなければならない。この場合、チェックノードfjにより算出される第2メッセージrijは「1」となり、当該第2メッセージrijは、変数ノードciへ返信される。
変数ノードciは、自身と接続される複数のチェックノード{fj,fk,・・・}の各々から受け取った第2メッセージ{rji,rki,・・・}と、自身の確率Pi(第1メッセージq)とを用いて、当該変数ノードciに対応するデジタルデータの真の値c (当該変数ノードciで受信すべきデジタルデータの値)を推定する。より具体的には、変数ノードciは、自身と接続される複数のチェックノード{fj,fk,・・・}の各々から受け取った第2メッセージ{rji,rki,・・・}、および、自身の確率Piのそれぞれが示すデジタルデータの値の多数決により、当該変数ノードciに対応するデジタルデータの真の値c を推定する。例えば「0」の数が多い場合は、c は「0」であると推定される一方、「1」の数が多い場合は、c は「1」であると推定される。
以上のようにして変数ノード{ci,cj,・・・}ごとに得られた推定値の列c={c ,c ,・・・}を用いてパリティチェックを行う(ここでは、確からしい値の確認と言う意味で尤度計算である。実際には、硬判定ではパリティーで尤度を表現するため、ほぼ同義である。ただし、全データに対して検査行列を用いてチェックするパリティチェックと区別するため、以下、尤度計算と呼ぶ。)。より具体的には、推定値の列cに対して、Hc1T=0が成立するか否かを判定し、Hc1T=0が成立する場合は、メモリから読み出されたデータ列(符号化されたデータの列)は、推定値の列cであると判断して、計算を終了する。一方、Hc1T=0が成立しない場合、変数ノードciは、上述の推定結果を示すc を、第1メッセージとして、自身と接続される複数のチェックノード{fj,fk,・・・}の各々へ送信する。チェックノードfjは、自身と接続される複数の変数ノード{ci,ck,・・・}の各々から受信した第1メッセージ{qij,qkj,・・・}を元に、パリティー条件を満たすように、自身と接続される変数ノード{ci,ck,・・・}ごとに、第2メッセージ{rij,rkj,・・・}を算出し、当該変数ノードへ返信する。以上のアルゴリズムをパリティー条件が満たされるまで繰り返す。以上が、LDPC符号の基本的な誤り訂正方法の内容である。
ここで、軟判定方式による誤り訂正を行う場合は、高い訂正能力を実現できるものの、硬判定方式による誤り訂正を行う場合は、十分な訂正能力を実現できないという問題がある。これを検証するために、列数1000程度の検査行列を用いたLDPC符号に対する、硬判定方式および軟判定方式の各々による誤り訂正のシミュレーションを行った。シミュレーションの条件としては、AWGN通信路を仮定し、S/N比をパラメータとしてエラーを発生させ、軟判定方式および硬判定方式の各々による誤り訂正処理を行った。それぞれ10通りの入力信号を用いて、エラー残数(エラービット数)のメジアン値を、上述のアルゴリズムの繰り返し回数に対して検証した。この検証の結果、図4に示すように、軟判定方式の場合は、繰り返し回数が2回で、エラービット数は0に達するが、硬判定方式の場合は、エラービット数が半分程度になったところで飽和してしまう。
硬判定方式では、エラーがある程度訂正されたところで、一方のビットの推定結果(多数決による推定結果)を反転すると、その影響を受けて、他方のビットがパリティー条件を満たさなくなり、他方のビットの推定結果を反転すると、その影響を受けて、一方のビットがパリティー条件を満たさなくなるというような、尤度計算の結果から生じる訂正処理計算の閉ループにはまり、それ以上エラーが訂正されない状態に陥ってしまうと考えられる。これは、物理系のシミュレーションにおいて、エネルギーのローカルミニマムで計算が停止してしまうことに似ている。
そこで、本実施形態では、硬判定方式における誤り訂正処理において、尤度計算の結果から生じる訂正処理計算の閉ループにはまり、それ以上誤りが訂正されなくなる状態に陥ることを防ぐためには、訂正処理計算の閉ループを崩すための外乱を与える必要があることを見出した。そして、本実施形態では、ローカルミニマムにトラップされにくいように、誤り訂正を行いながら、低い確率でランダムなビット反転を加えるという計算を行った。より具体的には、上述の多数決によるビット推定後、確率p(0<p<1)でビットを反転させる。例えば、図5に示すように、確率p=1/600で、推定されたビットの値を反転させる場合においては、エラー残数は繰り返し回数に対して減少し、最終的に、推定されたビットの値を反転させない場合(p=0の場合)の1/3程度に達することがわかった。以上より、本実施形態では、パリティチェック計算のループを崩すためには、推定後のビットを、0より大きく1より小さい確率で反転させることが好ましいことを見出した。
図6は、確率pと、最終的なエラー残数のメジアン値との関係を示す図である。推定後のビットを反転させない場合においては、最終的なエラー残数のメジアン値は「15」となるのに対して、確率p=1/6000〜1/100で、推定後のビットが反転する場合は、最終的なエラー残数のメジアン値は「15」を下回るので、誤り訂正能力を向上させることが可能になることを見出した。また、確率p=1/1000〜1/100で、推定後のビットを反転させる場合は、最終的なエラー残数のメジアン値を「10」以下にすることができるので、誤り訂正能力を一層向上させることが可能になることを見出した。
以上、本発明の原理を説明した。以下、本実施形態に係る誤り訂正装置100の具体的な内容を説明する。図7は、誤り訂正装置100の構成例を示すブロック図である。誤り訂正装置100は、硬判定方式による誤り訂正処理を行うものであり、低密度パリティー検査行列を用いて符号化された1ビットのデータ列(硬判定により「0」または「1」が確定したデジタルデータ列、つまり、誤りを含む可能性があるデータ列と捉えることもできる)が入力される。図7に示すように、誤り訂正装置100は、変数ノード部10と、チェックノード部20と、反転部30とを備える。なお、この例では、反転部30は、変数ノード部10に内包されているが、これに限られるものではない。
図8は、変数ノード部10およびチェックノード部20の機能構成例を示すブロック図である。図8においては、反転部30の図示を省略している。図8に示すように、変数ノード部10は、第1算出部11と推定部12と判定部13とを備える。一方、チェックノード部20は、第2算出部21を備える。以下、第1算出部11、第2算出部21、推定部12、および判定部13の各々の機能を説明する。
第1算出部11は、低密度パリティー検査行列を用いて符号化された複数の1ビットのデータが入力される複数の変数ノードごとに設けられる。説明の便宜上、図8の例では、ひとつの第1算出部11のみを図示している。各第1算出部11は、自身に対応する変数ノードに入力される1ビットのデータの値が1である確率を示す第1メッセージを算出し、自身に対応する変数ノードが接続される2以上のチェックノードの各々に対して第1メッセージを送信する。本実施形態の誤り訂正装置100は、硬判定方式による誤り訂正処理を行うので、各第1算出部11は、自身に対応する変数ノードに入力されるデジタルデータの値を、当該変数ノードの第1メッセージとして算出し、当該変数ノードと接続される複数のチェックノードの各々に対して当該第1メッセージを送信する。
第2算出部21は、低密度パリティー検査行列に応じた結線状態で複数の変数ノードと接続される複数のチェックノードごとに設けられる。説明の便宜上、図8の例では、ひとつの第2算出部21のみを図示している。各第2算出部21は、自身に対応するチェックノードに接続された2以上の変数ノードの各々から送信された第1メッセージを用いて、自身に対応するチェックノードに接続された2以上の変数ノードごとに、当該変数ノードに入力されるデータの値が1である確率を示す第2メッセージ(確からしい値と言う意味で尤度と呼ぶ)を、算出して当該変数ノードへ返信する。ここでは、各第2算出部21は、自身に対応するチェックノードに接続された2以上の変数ノードごとに、自身に対応するチェックノードに接続された複数の変数ノードのうち当該変数ノード以外の変数ノードの第1メッセージとパリティー条件とから、当該変数ノードに入力されるべきと判断したデジタルデータの値(「0」または「1」)を、当該変数ノードの第2メッセージ(尤度)として算出し、算出した第2メッセージを当該変数ノードへ返信する。尤度の表現は、硬判定方式では、「1」らしさを1で表現し、「0」らしさを0で表現するというように、簡素に表現できる。
推定部12は、複数の変数ノードごとに設けられる。説明の便宜上、図8の例では、ひとつの推定部12のみを図示している。各推定部12は、自身に対応する変数ノードの第1メッセージと第2メッセージの多数決により、自身に対応する変数ノードに入力されるデータの真の値(入力されるべきデータの値)を推定して推定値を生成する。例えば各推定部12は、「0」の数が多い場合は、自身に対応する変数ノードに入力されるデータの真の値は「0」であると推定して推定値「0」を生成する。一方、「1」の数が多い場合は、自身に対応する変数ノードに入力されるデータの真の値は「1」であると推定して推定値「1」を生成する。なお、第1メッセージと第2メッセージを用いて、変数ノードに入力されるデータの真の値を推定する方法は、多数決に限らず、公知の様々な技術を利用することができる。要するに、各推定部12は、自身に対応する変数ノードの第1メッセージと第2メッセージとを用いて、自身に対応する変数ノードに入力されるデータの真の値を推定して推定値を生成するものであればよい。
判定部13は、後述の反転部30から出力された推定値がパリティー条件を満たすか否かを判定する。後述するように、本実施形態では、全ての変数ノードの推定値が、反転部30による反転の対象となり、判定部13は、反転部30から出力されたビット列c(反転されなかった推定値も含まれ得る)を用いてパリティチェックを行う。より具体的には、判定部13は、ビット列cに対して、Hc1T=0が成立するか否かを判定する。Hc1T=0が成立する場合は、符号化されたデータの列は、反転部30から出力されたビット列cであると判断して、計算を終了する。一方、Hc1T=0が成立しない場合は、各第1算出部11は、反転部30から出力された、自身に対応する変数ノードの推定値を、自身に対応する変数ノードの第1メッセージとして算出する。そして、以上のアルゴリズムが繰り返される。
本実施形態では、上述の第1算出部11、第2算出部21、推定部12、および、判定部13の各々の機能は、専用のハードウェア回路(例えば半導体集積回路)により実現される。なお、これに限らず、例えばCPU、ROM,RAM等を備えたコンピュータが誤り訂正装置100に搭載され、CPUがROM等に格納されたプログラムを実行することにより、上述の第1算出部11、第2算出部21、推定部12、および、判定部13の各々の機能の少なくとも一部を実現することもできる。
図9は、誤り訂正装置100の具体的な構成例を示す図である。図9に示すように、チェックノード部20は、尤度計算部21を備える。尤度計算部21は、複数のチェックノードと1対1に対応する複数の尤度計算回路から構成される。尤度計算回路の具体的な構成については後述する。変数ノード部10は、各変数ノードに繋がる多数決部14を備える。多数決部14は、複数の変数ノードと1対1に対応する複数の多数決回路から構成される。多数決回路の具体的な構成については後述する。なお、多数決回路は、上述の推定部12に対応する。また、図9に示すように、変数ノード部10は、複数の変数ノードと1対1に対応する複数の記憶セル15を有する。各記憶セル15には、当該記憶セル15に対応する変数ノードの推定値が格納される。各記憶セル15に格納された推定値は、反転部30により反転される。この詳細な内容については後述する。
図9の例では、尤度計算部21と多数決部14は、検査行列に対応する結線で接続される。結線をインタリーブ部と呼ぶこともある。インタリーブ部は、物理的な配線で形成される形態であってもよいし、バス線で互いに繋がれた状態で、必要な情報を、時分割で互いに送信し合う形態であってもよい。
図10は、尤度計算回路の具体的な構成例を示す図である。図10では、変数ノードci,cj,ck,clの各々に接続されるチェックノードfjに対応する尤度計算回路22が例示されている。図10に示すように、尤度計算回路22は、互いに直列に接続される4つの単位回路(T1〜T4)と、最終段のインバータ40とを備える。4つの単位回路(T1〜T4)の各々は、CMOS50とインバータ60とを含む。第1段目の単位回路T1は変数ノードciに対応し、CMOS50のゲートには、変数ノードciからの第1メッセージ(「0」または「1」)が入力され(ここでは、ゲートに入力される第1メッセージをciと表記)、CMOS50の出力信号は、第2段目の単位回路T2に入力される。また、第1段目の単位回路T1のインバータ60の出力側は、PMOSの入力側の電極に接続される一方、インバータ60の入力側は、NMOSの入力側の電極に接続される。さらに、インバータ60の入力側には、GNDレベル(ローレベル)の入力信号が供給される。
第2段目の単位回路T2は変数ノードcjに対応し、CMOS50のゲートには、変数ノードcjからの第1メッセージが入力され(ここでは、ゲートに入力される第1メッセージをcjと表記)、CMOS50の出力信号は、第3段目の単位回路T3へ入力される。また、第2段目の単位回路T2のインバータ60の出力側は、PMOSの入力側の電極に接続される一方、インバータ60の入力側は、NMOSの入力側の電極に接続される。さらに、第2段目の単位回路T2のインバータ60には、第1段目の単位回路T1の出力信号が入力される。
第3段目の単位回路T3は変数ノードckに対応し、CMOS50のゲートには、変数ノードckからの第1メッセージが入力され(ここでは、ゲートに入力される第1メッセージをckと表記)、CMOS50の出力信号は、第4段目の単位回路T3へ入力される。また、第3段目の単位回路T3のインバータ60の出力側は、PMOSの入力側の電極に接続される一方、インバータ60の入力側は、NMOSの入力側の電極に接続される。さらに、第3段目の単位回路T3のインバータ60には、第2段目の単位回路T2の出力信号が入力される。
第4段目の単位回路T4は変数ノードclに対応し、CMOS50のゲートには、変数ノードclからの第1メッセージが入力され(ここでは、ゲートに入力される第1メッセージをclと表記)、CMOS50の出力信号は、最終段のインバータ40へ入力される。最終段のインバータ40で反転された信号が、最終的な出力信号となる。また、第4段目の単位回路T4のインバータ60の出力側は、PMOSの入力側の電極に接続される一方、インバータ60の入力側は、NMOSの入力側の電極に接続される。さらに、第4段目の単位回路T3のインバータ60には、第3段目の単位回路T2の出力信号が入力される。
図10の尤度計算回路22では、入力ciがローレベルの場合(「0」の場合)、第1段目の単位回路T1のNMOSはOFF、PMOSはONとなるので、GNDレベルの入力信号は、インバータ60で反転された後、PMOSを通過して、第2段目の単位回路T2へ入力される。一方、入力ciがハイレベルの場合(「1」の場合)、第1段目の単位回路T1のNMOSはON、PMOSはOFFとなるので、GNDレベルの入力信号は、インバータ60を通らずにNMOSを通過して、第2段目の単位回路T2へ入力される。図10の尤度計算回路22では、GNDレベルの入力信号は、ci,cj,ck,clのうちローレベルの数が偶数個であれば、遇数回反転した後に、最終段のインバータ40で反転されるので、最終的な出力信号はハイレベルとなる。一方、GNDレベルの入力信号は、ci,cj,ck,clのうちローレベルの数が奇数個であれば、奇数回反転した後に、最終段のインバータ40で反転されるので、最終的な出力信号はローレベルとなる。したがって、例えば「0(ローレベル)」の数が偶数であることがパリティー条件の場合、尤度計算回路22からの出力信号がハイレベルであれば、パリティー条件は満たされる(パリティー整合)。一方、尤度計算回路22からの出力信号はローレベルであれば、パリティー条件は満たされない(パリティー違反)。このように尤度計算からパリティー条件をチェックすることができる。
図10の例では、ひとつの単位回路Tごとに4個のトランジスタを使用し、最終段のインバータ40に2個のトランジスタを使用するので、必要なトランジスタの総数は、4×4+2=18個である。図10の対比例として、多段(多入力)XORゲートによって尤度計算回路を実現する構成を想定すると、XORゲートは、通常16個のトランジスタで構成され、本例の場合、1つのチェックノードごとに3段のXORゲート、つまり48個のトランジスタが必要になる(図11参照)。これに対して、図10の例では、必要なトランジスタの総数は16個で済むので、単純にXORゲートを用いて尤度計算回路を実現する構成に比べて、必要なトランジスタの総数を低減できるとともに、尤度計算回路を極めて小さな面積で実現できる。
また、図10のような回路では、インバータ出力を、単体MOSFETのソース電極から入力しているので、いわゆる「閾値落ち」の問題が生じる。例えばNMOSのゲート電極にVgを印加して入力側の電極から電圧を印加しても、ドレイン電極側はVg−Vtn(Vtn:NMOSの閾値電圧)までしか上昇しない。同様に、PMOSのソースおよびゲート電極に0を入力した場合は、ドレイン電極側の電位はVtp(Vtp:PMOSの閾値電圧)までしか下がらない。実際、電源電圧1Vで1VのパルスがNMOSを通過した場合、パルス高さは0.6Vにまで低下し、0VがPMOSを通過した場合には0.4V程度にまで上昇する。しかし、図10に例示した回路では、次段の単位回路Tへ出力する直前に、インバータ60によって電圧を回復させることにより、以上のような「閾値落ち」を抑制することができる。
図12は、多数決回路の具体的な構成例を示す図である。図12では、一例として、チェックノードfi,fjの各々に接続される変数ノードciに対応する多数決回路70が例示されている。説明の便宜上、図12の例では、チェックノードfiからの第2メッセージをfi(「0」または「1」)、チェックノードfjからの第2メッセージをfj(「0」または「1」)と表記する。また、変数ノードci自身の確率(第1メッセージ)をPi(「0」または「1」)と表記する。
図12に示すように、多数決回路70は、3段のAND回路71,72,73と、2段のOR回路74,75と、1段のXOR回路76とを含む。この例では、AND回路71には、チェックノードfiからの第2メッセージfiとチェックノードfjからの第2メッセージfjが入力される。また、AND回路72には、チェックノードfiからの第2メッセージfiと変数ノードci自身の確率Piが入力される。さらに、AND回路73には、チェックノードfjからの第2メッセージfjと変数ノードci自身の確率Piが入力される。
AND回路71およびAND回路72の各々の出力は、OR回路74に入力される。また、OR回路74の出力とAND回路73の出力は、OR回路75に入力される。そして、OR回路75の出力と、ローレベルの入力信号GNDは、XOR回路76に入力され、XOR回路76の出力に応じて、多数決の結果が判定される。より具体的には、入力fi,fj,Piのうち、「0」の数が多い場合は、OR回路75の出力はローレベルとなり、XOR回路76の出力もローレベル(「0」)を示す。一方、入力fi,fj,Piのうち、「1」の数が多い場合は、OR回路75の出力はハイレベルとなり、XOR回路76の出力もハイレベル(「1」)を示す。なお、図12に示す回路構成は、多数決回路の一例であり、これに限定されるものではない。
再び図7に戻り、反転部30について説明する。反転部30は、推定部12により生成された推定値を、0より大きく1より小さい確率で反転させる。上述したように、硬判定方式における誤り訂正処理において、尤度計算の結果から生じる訂正処理計算が閉ループにはまり、それ以上誤りが訂正されなくなる状態に陥ることを防ぐためには、パリティチェック計算のループを崩すための外乱を与える必要があり、訂正処理計算の閉ループを崩すためには、推定部12により生成された推定値を、0より大きく1より小さい確率で反転させることが好ましいことを見出したためである。上述したように、反転部30による推定値の反転が行われる確率は、1/6000〜1/100の範囲であることが好ましい。さらに言えば、反転部30による推定値の反転が行われる確率は、1/1000〜1/100の範囲であることが一層好ましい。
低確率でのビット反転を起こす機構として、例えばMOSFETのランダムテレグラフノイズ(RTN)が考えられる。図13は、RTNによるMOSFETの出力信号(ドレイン電流Ids)の変化の様子と、典型的なMOSFETの構造例を示す図である。RTNとは、MOSFETの絶縁膜(ゲート酸化膜)における電荷のトラップ(束縛)、デトラップ(解放)に伴い、I−V特性の閾値電圧Vthが変動する現象を指す。閾値電圧Vthの変動は、ドレイン電流Idsの変動により観測することができる。図13において、Lは、MOSFETのゲート長を示す。また、Wは、MOSFETのチャネル幅を示す。ゲート長Lが20nmの世代では、実効的なゲート酸化膜厚にも依存するが、RTNにより、1/1000程度の確率で、100mV以上の閾値電圧Vthの変動が起こると考えられており、適切なノイズ発生確率である。なお、RTNの信号は、ゲート長Lのみならず、チャネル幅Wにも依存して変化するため、必要とされる回路のサイズに応じて、適切なサイズのMOSFET構造を作ることが望ましい。
本実施形態の反転部30は、複数の変数ノードと1対1に対応する複数のビット反転回路200から構成されるが、これに限らず、例えば複数の変数ノードの中には、対応するビット反転回路が設けられない変数ノードが存在する形態であってもよい。要するに、反転部30は、複数の変数ノードのうちの少なくとも1つの変数ノードに対応する推定値を低確率で反転させるものであればよい。本実施形態では、変数ノードごとに、当該変数ノードの推定値(推定部12により推定された推定ビット)が格納される記憶セル15(図9参照)が設けられ、その記憶セル15に、当該変数ノードに対応するビット反転回路200が接続される。図14は、ひとつのビット反転回路200の構成例を示す図である。図14に示すように、ビット反転回路200は、フリップフロップ部210と、フリップフロップ部210からの出力信号を反転させるインバータ220とを含む。なお、ここでフリップフロップと呼ぶのは、通電時の自己保持回路であることを意味しており、ラッチの一種と考えてもよい。具体的には、インバータの向かい合わせ構造を例示する。
フリップフロップ部210は、電源電位Vdd1が供給される第1電源線201と、接地電位GND(<Vdd1)が供給される第2電源線202との間に配置される。フリップフロップ部210は、第1インバータ211と第2インバータ212とを含み、第1インバータ211の入力は第2インバータ212の入力と接続され、第1インバータ211の出力は第2インバータ212の出力と接続される。第1インバータ211および第2インバータ212の各々は、PMOSとNMOSとの組み合わせから構成される。
フリップフロップ部210の入力側には、不図示の制御回路から供給される制御信号Ctlに応じてオンオフが切り替わるスイッチ素子230が設けられる。なお、この例では、スイッチ素子230はNMOSで構成されるが、これに限られるものではない。図14の例では、入力信号Inputとして、記憶セル15に格納された推定値(「0」または「1」)が、スイッチ素子230を介してフリップフロップ部210に入力される。記憶セル15に格納された推定値(「0」または「1」)を、フリップフロップ部210へ入力するタイミングで、制御信号Ctlはハイレベルに設定される。
例えば、スイッチ素子230がオン状態に遷移して、ハイレベル(「1」)の入力信号Inputがフリップフロップ部210に入力されると、第1インバータ211のPMOSと第2インバータ212のNMOSがオンに遷移し、フリップフロップ部210の出力信号はローレベル(「0」)になる。一方、スイッチ素子230がオン状態に遷移して、ローレベル(「0」)の入力信号Inputがフリップフロップ部210に入力されると、第1インバータ211のNMOSと第2インバータ212のPMOSがオンに遷移し、フリップフロップ部210の出力信号はハイレベル(「1」)になる。なお、一旦、入力信号Inputがフリップフロップ部210に入力されると、その後にスイッチ素子230がオフに遷移しても、次回の入力信号Inputが入力されるまでの間、フリップフロップ部210の出力信号は、前回の入力信号Inputに応じたレベルに保持され続ける。すなわち、記憶情報がラッチされている。
フリップフロップ部210からの出力信号は、インバータ220により反転される。そして、インバータ220により反転された信号が、最終的な出力信号Outputとして判定部13へ出力される。図14に示すように、インバータ220は、電源電位Vdd2が供給される第3電源線203と、接地電位GND(<Vdd2)が供給される第4電源線204との間に配置される。なお、上記第1電源線201に供給される電位の値と第3電源線203に供給される電位の値が同じである場合は、第1電源線201と第3電源線203とが一体に形成されてもよい。同様に、上記第2電源線202に供給される電位の値と第4電源線204に供給される電位の値が同じである場合は、第2電源線202と第4電源線204とが一体に形成されてもよい。インバータ220は、PMOSとNMOSとの組み合わせにより構成され、そのPMOSとNMOSとの間に介在するノードNDの電位が、最終的な出力信号Outputとなる。
前述したように、MOSFETにRTNが発生すると、閾値電圧Vthの変動により、ドレイン電流Ids(MOSFETの出力信号)が反転する。SRAMの微細化により、MOSFETでのRTNの発生確率が高まるため、ビットエラーを生じるおそれがあるが、本実施形態では、このRTNの発生によるビット反転の仕組みを、積極的に利用している。図15は、MOSFETで発生するノイズ(RTN)による電圧信号の経時的変化と、ノードNDの電位(出力信号Output)の経時的変化を示す図である。図15に示すNoiseは、代表的なMOSFETのRTN特性をモデル化してシミュレーション用に再現したものであり、回路シミュレーションにて扱い易いように、振幅と周波数を任意の値に設定できるようになっている。この例では、振幅が0.2Vで周波数が5MHzに調節されている。前述したように、閾値電圧Vthの変動は、ドレイン電流Idsにより観測することができる。図15に示すNoiseは、ドレイン電流Idsの実測値を元に、閾値電圧Vthの経時的変化をモデル化し、ゲート電圧に実効的に印加される電圧波形を示したものである。
図14の制御信号Ctlをローレベルに設定して(スイッチ素子230をオフに設定して)、入力信号Inputの電位をフリップフロップ部210に与えないようにしておき、フリップフロップ部210で保持される信号を、インバータ220で反転して取り出した結果を示すのが、ノードNDの電圧波形であり、図15の最下段に示されている。フリップフロップ部210からの出力信号を、そのまま最終的な出力信号号Outputとせずにインバータ220を通過させるのは、フリップフロップ部210のノイズの影響がそのまま出力信号号Outputに伝わることを防止するためのである。要するに、Noiseの影響により、フリップフロップ部210で保持されていた出力信号(「0」または「1」)が反転した結果が、ノードNDの電位に反映されて出力されるものであればよい。この例は、VDD1=VDD2の値を与えた例であるが、ノードNDの電位をさらに後段に効率的に伝えるために、VDD2の値をVDD1の値よりも高い値に設定することもできる。
図15に示すNoiseのように、5MHz程度の高い周波数のRTNが発生している場合、フリップフロップ部210の各MOSFETにおいて同じ時刻でRTNが発生したタイミングで、フリップフロップ部210で保持されていた信号が反転し、それがノードNDの電位に反映される。なお、図15の例では、図14に示す電源電圧Vdd1として、0.5Vが与えられている。電源電圧Vdd1の値が十分に大きい場合は、フリップフロップ部210のノイズマージンがRTNのノイズ振幅(閾値電圧Vthの変動の振幅)よりも十分に大きくなって、ビット反転が起こる確率が極めて小さくなる。例えば電源電圧Vdd1として1.0Vを与え、ノイズ振幅を0.15Vに設定して上記の回路シミュレーションを行った結果、図15に示すような、0〜100マイクロ秒(μsec)の範囲では、全くビット反転が起こらなかった。
電源電圧Vdd1として0.5Vが与えられている図15の例では、0〜100マイクロ秒(μsec)の範囲で、およそ20回程度のビット反転が起こる。このビット反転レートから、ビット反転回路200によるビット反転の発生確率(反転確率)を求めることができる。例えば、ビット反転回路200の個数あたりの反転確率として、1000個に1個の反転確率(1/1000)を得たいときに、図15のビット反転レートを示す回路構成を用いた場合、100μsecで1個当たり20回、10nsecだと、1000個当たり2回の反転が生じることになる。これは1000個当たり2個と同義であると解釈できる。従って、2/1000のビット反転レートになるので、目的が1/1000の場合は、目的の値よりも2倍大きいということになる。ビット反転レートを小さくするには、RTNの振幅および周波数を小さくすればよい。逆に、ビット反転レートを大きくする場合は、RTNの振幅および周波数を大きくすればよい。RTNの振幅は、MOSFETのゲート長Lとチャネル幅Wとから求まり、ゲート面積(=L×W)に反比例する。また絶縁膜(ゲート酸化膜)の厚さにも反比例する。例えば振幅0.1Vというのは、絶縁膜の厚さ(SiO換算)を10nm程度にし、L(=W)を20nm程度にすれば十分可能であることが実験的に示されている。周波数は絶縁膜の種類やゲート電圧の大きさに依存し、キャリアの絶縁膜捕獲あるいは解放(脱出)の時定数(τcあるいはτe)が1μsec程度であれば、RTNは十分に観測できる。0.1μsec以下の観測は、高周波測定のためのシールドやインピーダンスマッチングなどの工夫が必要なため、一般的にデータが示されることは稀だが、観測が物理的に不可能ということはない。なお、時定数がゲート電圧や基板バイアス電圧に依存することを利用して設計することもできる。
以上の実装方式を用いることで、経時的変化が不規則(ランダム)な信号を発生するRTNが、MOSFETという、素子レベルのサイズで発生することを利用して、回路レベルでも小さなビット反転回路200を構成できる。本実施形態のビット反転回路200は、複数の変数ノードと1対1に対応し、推定部12による推定値が格納される複数の記憶セル15の各々に対して、小さな回路面積増で付け加えることができる。もともと変数ノードがSRAMで構成されていた場合は、LW縮小の効果で、むしろ従来よりも小さな回路面積になることもあり得る。
次に、図16を参照しながら、本実施形態の誤り訂正装置100による処理の一例を説明する。図16は、本実施形態の誤り訂正装置100による処理の一例を示すフローチャートである。図16に示すように、まず複数の第1算出部11は、1対1に対応する複数のデータ(1ビットのデータ)を受信する(ステップS1)。次に、各第1算出部11は、自身に対応する変数ノードの第1メッセージを算出し、自身に対応する変数ノードに接続される複数のチェックノードの各々に対して第1メッセージを送信する(ステップS2)。
次に、各第2算出部21は、自身に対応するチェックノードに接続された複数の変数ノードの各々から送信された第1メッセージを用いて、自身に対応するチェックノードに接続された2以上の変数ノードごとに、パリティー条件を満たすように第2メッセージを算出し、算出した第2メッセージを当該変数ノードへ返信する(ステップS3)。次に、各推定部12は、自身に対応する変数ノードごとに、第1算出部11で算出された第1メッセージと、当該変数ノードが接続された複数のチェックノードの各々から受信した第2メッセージとの多数決により、当該変数ノードに対応するデータの真の値を推定する(ステップS4)。次に、反転部30は、各推定部12により生成された推定値の列を、1より小さい確率で反転させ(ステップS5)、判定部13へ送る。
次に、判定部13は、反転部30から渡されたデータ列と検査行列を用いて全データ分に対して一気にパリティチェックを行い、パリティー整合か否かを判定する(ステップS6)。パリティー整合であると判定した場合(ステップS6の結果:YESの場合)、処理は終了する。パリティー違反であると判定した場合(ステップS6の結果:NOの場合)、判定部13は、処理回数(上述のアルゴリズムの繰り返し回数)が規定回数に到達したか否かを判定する(ステップS7)。処理回数が、規定回数に到達していないと判定された場合(ステップS7の結果:NOの場合)、各第1算出部11は、反転部30から出力された、自身に対応する変数ノードの推定値を、当該変数ノードの第1メッセージとして算出する。そして、上述のステップS2以降の処理が繰り返される。
以上に説明したように、本実施形態では、硬判定方式における誤り訂正処理において、尤度計算(チェックノード内でのパリティチェック)の結果から生じる訂正処理計算が閉ループにはまり、それ以上誤りが訂正されなくなる状態に陥ることを防ぐためには、尤度計算の結果から生じる訂正処理計算の閉ループを崩すための外乱を与える必要があることを見出した。そして、本実施形態では、この訂正処理計算の閉ループを崩すために、推定部12により生成された推定値を、0より大きく1より小さい確率で反転させる。これにより、硬判定方式における誤り訂正処理の誤り訂正能力を向上させることができる。また、本実施形態では、軟判定方式と硬判定方式とを組み合わせる必要が無いので、簡易な構成で誤り訂正能力を向上させることが可能な誤り訂正装置を提供することができる。
以上、本発明の実施形態を説明したが、上述の実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。以下、変形例を記載する。なお、以下の変形例を任意に組み合わせてもよい。
(1)変形例1
例えば上述の実施形態では、反転部30は、変数ノード部10に内包されているが、これに限らず、例えば図17に示すように、反転部30が、変数ノード部10およびチェックノード部20の外部に設けられてもよい。
(2)変形例2
上述のビット反転回路の構成は、図14の形態に限られるものではなく、例えば図18に示す形態であってもよい。図18に示すビット反転回路300は、RTNにより反転されたMOSFETの出力信号を、所定のクロック信号に同期させて取り出す形態である。より具体的には以下のとおりである。図18に示すように、ビット反転回路300は、ビット反転素子310と、抵抗320と、クロック入力部330とを含んで構成される。ビット反転素子310および抵抗320は、電源電位Vdd3が供給される第5電源線301と、接地電位GND(<Vdd3)が供給される第6電源線302との間に配置され、互いに直列に接続される。第5電源線301から第6電源線302へ至る電流経路上において、ビット反転素子310と抵抗320との間にはノードND2が介在し、当該ノードND2は、クロック入力部330の入力側に接続される。
ビット反転素子310は、MOSFETで構成され、第5電源線301とノードND2との間に配置される。ビット反転素子310のゲートには、対応する変数ノードの推定値(「0」または「1」)が入力される。例えばビット反転素子310がNMOSで構成される場合、対応する変数ノードの推定値(記憶セル15に格納された推定値)が「0」であれば、ビット反転素子310はOFFとなり、ノードND2の出力電位(MOSFETの出力信号)はローレベルになる。一方、対応する変数ノードの推定値が「1」であれば、ビット反転素子310はONとなり、ノードND2の出力電位はハイレベルになる。上述したように、RTNの発生により、MOSFETの閾値電圧Vthが変動することにより、ノードND2の出力電位は、低確率で反転する。なお、図18の例では、ビット反転素子310は、NMOSで構成されているが、これに限らず、例えばPMOSで構成されてもよい。
クロック入力部330は、NMOSとPMOSとの組み合わせにより構成され、所定のクロック信号CLKをクロック入力部330に入力することで、ノードND2の出力電位をサンプリングして、判定部13へ出力する。NMOSのゲートには、クロック信号CLKが入力される一方、PMOSのゲートには、クロック信号CLKを反転した信号が入力される。
いま、図18に示すビット反転回路300に対応する記憶セル15に格納された推定値(ビット反転回路300に対応する変数ノードの推定値)が「1」である場合を想定する。この場合、NMOSで構成されるビット反転素子310のゲートには、ハイレベル(「1」)の信号が入力されるので、ビット反転素子310はオンに遷移し、ノードND2の出力電位はハイレベルになるはずであるが、RTNの発生により、低確率で、ビット反転素子310の出力信号の反転が起こる。図19は、この場合のノードND2の出力電位と、クロック信号CLKとの関係の一例を示す図である。以上のようなビット反転回路300を用いても、ビット反転素子310のゲートに入力される推定ビットを、低確率で反転させることができる。要するに、反転部30は、ランダムテレグラフノイズの発生により閾値電圧が変動するMOSFETを含み、閾値電圧の変動に応じて、推定部12により生成された推定値を反転させる形態とすることができる。
(3)変形例3
また、上述のビット反転回路の代わりに、例えば図20に示すような乱数発生回路400を用いることもできる。図20に示す乱数発生回路400は、フリップフロップ型に接続された2つのNAND回路401および402と、NAND回路401側に接続される抵抗R1およびコンデンサC1と、NAND回路402側に接続される抵抗R2およびコンデンサC2とを含む。
この乱数発生回路400は、B側のコントロール入力をONにすると、動作を開始する。NAND回路402に入力されるB側のコントロール入力がローレベル(「0」)である(つまり、コンデンサC2に蓄えられている電荷量は0)とすると、NAND回路402の出力はハイレベル(「1」)となり、A側のコンデンサC1の充電が開始される。コンデンサC1の充電が進行すると、コンデンサC1を介したNAND回路401への入力はローレベルとなるので、NAND回路401の出力はハイレベルとなり、今度は、B側のコンデンサC2の充電が開始される。これが交互に繰り返されることにより、NAND回路401からの出力(Output)は、「1」と「0」とを交互に繰り返す信号となる。この繰り返し周期は、コンデンサC1およびC2の充電時間に応じて決まり、コンデンサの容量と抵抗Rとの積(C×R)に比例する。例えば記憶セル15に格納された推定値(対応する変数ノードの推定値)を、乱数発生回路400から出力される信号(「1」または「0」)に置き換えることで、当該推定値を、低確率で反転させることもできる。
(4)変形例4
また、例えば図21に示すような乱数発生回路500でビット反転回路が構成されてもよい。図21に示す乱数発生回路500は、クロック信号CLKが入力されるビット反転素子510と、抵抗520と、インバータ530とを備える。ビット反転素子510は、絶縁体511と、絶縁体511を挟持する一対の電極512,513とを含む。電極512には、クロック信号CLKが入力される。また、電極513は、抵抗520の一方の端部に接続される。抵抗520の他方の端部は、接地電位GNDが供給される接地線501に接続される。ビット反転素子510と抵抗520との間に介在するノードND3は、インバータ530の入力側に接続される。
この例では、RTNの発生により、ビット反転素子510の抵抗が変動する。つまり、ビット反転素子510は、低確率で抵抗が変動する可変抵抗素子として振る舞い、ビット反転素子510の抵抗の変動に伴い、ノードND3の出力電位も変動する。これにより、乱数発生回路500の出力信号(インバータ530からの出力信号)が、低確率で反転する。例えば記憶セル15に格納された推定値を、乱数発生回路500から出力される信号(「1」または「0」)に置き換えることで、当該推定値を低確率で反転させることもできる。要するに、反転部30は、2値の信号(「0」または「1」)をランダムに出力する乱数発生回路を含み、乱数発生回路から出力される信号に応じて、推定部12により生成された推定値を反転させる形態とすることもできる。
(5)変形例5
また、以上の例では、反転部30は、半導体集積回路で構成されているが、これに限らず、例えばCPU、ROM、RAM等を備えたコンピュータが誤り訂正装置に搭載され、CPUがROM等に格納されたプログラムを実行することにより、上述の反転部30の機能が実現される構成であってもよい。要するに、反転部30は、推定部12により生成された推定値(「0」または「1」のデジタルデータ)を、0より大きく1より小さい確率で反転させる機能を有するものであればよい。
また、上述の誤り訂正装置100に搭載されたコンピュータで実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するようにしてもよい。また、上述の誤り訂正装置100に搭載されたコンピュータで実行されるプログラムを、インターネット等のネットワーク経由で提供または配布するようにしてもよい。また、上述の誤り訂正装置100で実行されるプログラムを、ROM等の不揮発性の記録媒体に予め組み込んで提供するようにしてもよい。
10 変数ノード部
11 第1算出部
12 推定部
13 判定部
20 チェックノード部
21 第2算出部
22 尤度計算回路
30 反転部
100 誤り訂正装置

Claims (8)

  1. 低密度パリティー検査行列を用いて符号化された複数の1ビットのデータが入力される複数の変数ノードごとに設けられ、それぞれが、前記変数ノードに入力される前記データの値が1である確率を示す第1メッセージを算出する複数の第1算出部と、
    前記低密度パリティー検査行列に応じた結線状態で前記複数の変数ノードと接続される複数のチェックノードごとに設けられ、それぞれが、前記チェックノードに接続された2以上の前記変数ノードのそれぞれの前記第1メッセージを用いて、前記チェックノードに接続された2以上の前記変数ノードごとに、前記変数ノードに入力される前記データの値が1である確率を示す第2メッセージを算出する複数の第2算出部と、
    前記複数の変数ノードごとに設けられ、それぞれが、前記第1メッセージと前記第2メッセージとを用いて、前記変数ノードに入力される前記データの真の値を推定して推定値を生成する複数の推定部と、
    前記複数の変数ノードのうちの少なくとも1つの前記変数ノードに対応する前記推定値を、0より大きく1より小さい確率で反転させる反転部と、を備える、
    誤り訂正装置。
  2. 前記反転部による前記推定値の反転が行われる確率は、1/6000〜1/100の範囲である、
    請求項1の誤り訂正装置。
  3. 前記反転部による前記推定値の反転が行われる確率は、1/1000〜1/100の範囲である、
    請求項1の誤り訂正装置。
  4. 前記反転部は、ランダムテレグラフノイズの発生により閾値電圧が変動するMOSFETを含み、前記閾値電圧の変動に応じて、前記推定値を反転させる、
    請求項1の誤り訂正装置。
  5. 前記反転部は、2値の信号をランダムに出力する乱数発生回路を含み、前記乱数発生回路から出力される前記信号に応じて、前記推定値を反転させる、
    請求項1の誤り訂正装置。
  6. 前記反転部から出力された前記推定値がパリティー条件を満たすか否かを判定する判定部をさらに備える、
    請求項1の誤り訂正装置。
  7. 低密度パリティー検査行列を用いて符号化された複数の1ビットのデータが入力される複数の変数ノードごとに、前記変数ノードに入力される前記データの値が1である確率を示す第1メッセージを算出する第1算出ステップと、
    前記低密度パリティー検査行列に応じた結線状態で前記複数の変数ノードと接続される複数のチェックノードのそれぞれに接続された2以上の前記変数ノードのそれぞれの前記第1メッセージを用いて、各前記チェックノードに接続された2以上の前記変数ノードごとに、前記変数ノードに入力される前記データの値が1である確率を示す第2メッセージを算出する第2算出ステップと、
    前記複数の変数ノードごとに、前記第1メッセージと前記第2メッセージとを用いて、前記変数ノードに入力される前記データの真の値を推定して推定値を生成する推定ステップと、
    前記複数の変数ノードのうちの少なくとも1つの前記変数ノードに対応する前記推定値を、0より大きく1より小さい確率で反転させる反転ステップと、を含む、
    誤り訂正方法。
  8. コンピュータに、
    低密度パリティー検査行列を用いて符号化された複数の1ビットのデータが入力される複数の変数ノードごとに、前記変数ノードに入力される前記データの値が1である確率を示す第1メッセージを算出する第1算出ステップと、
    前記低密度パリティー検査行列に応じた結線状態で前記複数の変数ノードと接続される複数のチェックノードのそれぞれに接続された2以上の前記変数ノードのそれぞれの前記第1メッセージを用いて、各前記チェックノードに接続された2以上の前記変数ノードごとに、前記変数ノードに入力される前記データの値が1である確率を示す第2メッセージを算出する第2算出ステップと、
    前記複数の変数ノードごとに、前記第1メッセージと前記第2メッセージとを用いて、前記変数ノードに入力される前記データの真の値を推定して推定値を生成する推定ステップと、
    前記複数の変数ノードのうちの少なくとも1つの前記変数ノードに対応する前記推定値を、0より大きく1より小さい確率で反転させる反転ステップと、を実行させるためのプログラム。
JP2012140866A 2012-06-22 2012-06-22 誤り訂正装置、誤り訂正方法およびプログラム Expired - Fee Related JP5591876B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012140866A JP5591876B2 (ja) 2012-06-22 2012-06-22 誤り訂正装置、誤り訂正方法およびプログラム
US13/861,547 US9054739B2 (en) 2012-06-22 2013-04-12 Error correction device, error correction method and computer program product

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012140866A JP5591876B2 (ja) 2012-06-22 2012-06-22 誤り訂正装置、誤り訂正方法およびプログラム

Publications (2)

Publication Number Publication Date
JP2014007496A JP2014007496A (ja) 2014-01-16
JP5591876B2 true JP5591876B2 (ja) 2014-09-17

Family

ID=49775500

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012140866A Expired - Fee Related JP5591876B2 (ja) 2012-06-22 2012-06-22 誤り訂正装置、誤り訂正方法およびプログラム

Country Status (2)

Country Link
US (1) US9054739B2 (ja)
JP (1) JP5591876B2 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014140111A (ja) * 2013-01-21 2014-07-31 Sony Corp コントローラ、情報処理システム、コントローラの制御方法およびプログラム
JP6290057B2 (ja) * 2014-09-22 2018-03-07 株式会社東芝 復号装置、復号方法およびメモリシステム
JP6400469B2 (ja) * 2014-12-26 2018-10-03 株式会社東芝 情報処理システム及び半導体素子
WO2019213947A1 (en) * 2018-05-11 2019-11-14 Qualcomm Incorporated Improved iterative decoder for ldpc codes with weights and biases
CN108683423B (zh) * 2018-05-16 2022-04-19 广东工业大学 一种多级闪存信道下的ldpc码动态串行调度译码算法及装置
CN111130564B (zh) * 2018-10-30 2021-10-26 华为技术有限公司 译码方法及装置
JP7532284B2 (ja) 2021-02-24 2024-08-13 株式会社東芝 不揮発性メモリデバイス

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100936022B1 (ko) * 2002-12-21 2010-01-11 삼성전자주식회사 에러 정정을 위한 부가정보 생성 방법 및 그 장치
JP4261575B2 (ja) * 2006-11-30 2009-04-30 株式会社東芝 誤り訂正処理装置及び誤り訂正処理方法
US8140948B2 (en) * 2007-09-24 2012-03-20 Nec Laboratories America, Inc. Efficient low complexity high throughput LDPC decoding method and optimization
JP4626827B2 (ja) * 2007-10-19 2011-02-09 ソニー株式会社 受信装置および方法、並びにプログラム
US20090319860A1 (en) * 2008-06-23 2009-12-24 Ramot At Tel Aviv University Ltd. Overcoming ldpc trapping sets by decoder reset
WO2010019169A1 (en) * 2008-08-15 2010-02-18 Lsi Corporation Rom list-decoding of near codewords
US8386894B2 (en) * 2009-03-23 2013-02-26 Applied Micro Circuits Corporation Parallel forward error correction with syndrome recalculation
JP2011197957A (ja) 2010-03-18 2011-10-06 Toshiba Corp 誤り訂正符号復号装置及び誤り訂正符号復号方法

Also Published As

Publication number Publication date
US9054739B2 (en) 2015-06-09
US20130346825A1 (en) 2013-12-26
JP2014007496A (ja) 2014-01-16

Similar Documents

Publication Publication Date Title
JP5591876B2 (ja) 誤り訂正装置、誤り訂正方法およびプログラム
US20180358988A1 (en) Parameterized Iterative Message Passing Decoder
CN108134602B (zh) 占空比校准电路及半导体存储器
Yaakobi et al. Multiple error-correcting WOM-codes
Wang et al. Error correction codes and signal processing in flash memory
Kayser et al. Multiple-write WOM-codes
Li et al. A study of polar codes for MLC NAND flash memories
EP2575257A1 (en) Logic circuit and data processing system including the same
Liao et al. A (21150, 19050) GC-LDPC decoder for NAND flash applications
Le et al. Variable-node-shift based architecture for probabilistic gradient descent bit flipping on QC-LDPC codes
US10715178B2 (en) Generalized low-density parity-check codes
Spinner et al. Soft input decoder for high‐rate generalised concatenated codes
Brkic et al. Analysis of one-step majority logic decoding under correlated data-dependent gate failures
CN113539334A (zh) 用于物理不可克隆函数的测量机制
Mei et al. Polar codes for spin-torque transfer magnetic random access memory
Badack et al. Modified DEC BCH codes for parallel correction of 3-bit errors comprising a pair of adjacent errors
Mheich et al. Short length non-binary rate-adaptive LDPC codes for Slepian-Wolf source coding
US9514812B2 (en) Apparatus and method for reading a storage device with a ring oscillator and a time-to-digital circuit
CN113535123A (zh) 具有通过位线预充电的物理不可克隆函数
Vasić et al. Low complexity memory architectures based on LDPC codes: Benefits and disadvantages
Garcia-Herrero et al. Low delay non-binary error correction codes based on orthogonal Latin squares
Marukame et al. Bit-flipping LDPC under noise conditions and its application to physically unclonable functions
US9672103B2 (en) Decoding device, decoding method, and memory system
Liu et al. Threshold‐voltage‐drift‐aware scheduling for belief propagation decoding of LDPC‐coded NAND flash memory
Gaudet Low-power LDPC decoding by exploiting the fault-tolerance of the sum-product algorithm

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140210

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140512

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140701

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140730

LAPS Cancellation because of no payment of annual fees