JP2023045450A - シンドローム計算回路、誤り訂正回路およびメモリシステム - Google Patents
シンドローム計算回路、誤り訂正回路およびメモリシステム Download PDFInfo
- Publication number
- JP2023045450A JP2023045450A JP2021153863A JP2021153863A JP2023045450A JP 2023045450 A JP2023045450 A JP 2023045450A JP 2021153863 A JP2021153863 A JP 2021153863A JP 2021153863 A JP2021153863 A JP 2021153863A JP 2023045450 A JP2023045450 A JP 2023045450A
- Authority
- JP
- Japan
- Prior art keywords
- circuit
- matrix
- syndrome
- error correction
- error
- 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.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, 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/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error 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/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/151—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
- H03M13/1575—Direct decoding, e.g. by a direct determination of the error locator polynomial from syndromes and subsequent analysis or by matrix operations involving syndromes, e.g. for codes with a small minimum Hamming distance
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, 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/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error 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/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/159—Remainder calculation, e.g. for encoding and syndrome calculation
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, 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/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error 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/09—Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
- H03M13/098—Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit using single parity bit
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, 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/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error 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/11—Error 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/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1148—Structural properties of the code parity-check or generator matrix
- H03M13/1177—Regular LDPC codes with parity-check matrices wherein all rows and columns have the same row weight and column weight, respectively
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, 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/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error 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/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/151—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
- H03M13/152—Bose-Chaudhuri-Hocquenghem [BCH] codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, 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/27—Coding, 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 using interleaving techniques
- H03M13/2732—Convolutional interleaver; Interleavers using shift-registers or delay lines like, e.g. Ramsey type interleaver
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, 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/27—Coding, 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 using interleaving techniques
- H03M13/2735—Interleaver using powers of a primitive element, e.g. Galois field [GF] interleaver
Abstract
【課題】誤り訂正処理に用いるシンドロームの演算回路規模を低減する。【解決手段】シンドローム計算回路は、ガロア体から合成体への第1基底変換行列と、パリティ検査行列の少なくとも一部の第1の演算行列との積から得られる第2の演算行列の行列積演算を実行する第1行列積回路を含み、誤り訂正符号化された入力信号が第1行列積回路に入力され、入力信号について第2演算行列の行列積演算を実行した結果に基づくシンドロームを出力する。【選択図】図4
Description
本実施形態は、シンドローム計算回路、誤り訂正回路およびメモリシステムに関する。
誤り訂正する際、誤り訂正処理に用いるシンドロームをガロア体表現から合成体表現へ基底変換する技術がある。
一つの実施形態は、誤り訂正処理に用いるシンドロームの演算回路規模を低減することを目的とする。
一つの実施形態によれば、シンドローム計算回路は、ガロア体から合成体への第1基底変換行列と、パリティ検査行列の少なくとも一部の第1の演算行列との積から得られる第2の演算行列の行列積演算を実行する第1行列積回路を含み、誤り訂正符号化された入力信号が第1行列積回路に入力され、入力信号について第2演算行列の行列積演算を実行した結果に基づくシンドロームを出力する。
以下に添付図面を参照して、実施形態にかかるメモリシステムを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
(第1の実施形態)
図1は、第1の実施形態に係るメモリシステムの概略構成例を示すブロック図である。図1に示すように、メモリシステム1は、メモリコントローラ10と不揮発性メモリ20とを備える。メモリシステム1は、ホスト30と接続可能であり、図1ではホスト30と接続された状態が示されている。ホスト30は、例えば、パーソナルコンピュータ、携帯端末などの電子機器であってよい。
図1は、第1の実施形態に係るメモリシステムの概略構成例を示すブロック図である。図1に示すように、メモリシステム1は、メモリコントローラ10と不揮発性メモリ20とを備える。メモリシステム1は、ホスト30と接続可能であり、図1ではホスト30と接続された状態が示されている。ホスト30は、例えば、パーソナルコンピュータ、携帯端末などの電子機器であってよい。
不揮発性メモリ20は、データを不揮発に記憶する不揮発性メモリであり、例えば、NAND型フラッシュメモリ(以下、単にNANDメモリという)である。以下の説明では、不揮発性メモリ20としてNANDメモリが用いられた場合を例示するが、不揮発性メモリ20として3次元構造フラッシュメモリ、ReRAM(Resistance Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)等のNANDメモリ以外の記憶装置を用いることも可能である。また、不揮発性メモリ20が半導体メモリであることは必須ではなく、半導体メモリ以外の種々の記憶媒体に対して本実施形態を適用することも可能である。
メモリシステム1は、メモリコントローラ10と不揮発性メモリ20とが1つのパッケージとして構成されるメモリカード等であってもよいし、SSD(Solid State Drive)等であってもよい。
メモリコントローラ10は、例えばSoC(System-On-a-Chip)として構成される半導体集積回路である。以下で説明するメモリコントローラ10の各構成要素の動作の一部又は全部は、CPU(Central Processing Unit)がファームウエアを実行することによって実現されてもよいし、ハードウエアで実現されてもよい。
メモリコントローラ10は、ホスト30からの書き込み要求に従って不揮発性メモリ20への書き込みを制御する。また、メモリコントローラ10は、ホスト30からの読み出し要求に従って不揮発性メモリ20からの読み出しを制御する。メモリコントローラ10は、ホストI/F(ホストインタフェース)15、メモリI/F(メモリインタフェース)13、制御部11、符号化/復号部(コーデック)14、および、データバッファ12を備える。ホストI/F15、メモリI/F13、制御部11、符号化/復号部14、および、データバッファ12は、内部バス16で相互に接続されている。
ホストI/F15は、ホスト30との間のインタフェース規格に従った処理を実施し、ホスト30から受信した要求、書き込み対象のユーザデータなどを内部バス16に出力する。また、ホストI/F15は、不揮発性メモリ20から読み出されて復元されたユーザデータ、制御部11からの応答などをホスト30へ送信する。
メモリI/F13は、制御部11の指示に基づいて、不揮発性メモリ20への書き込み処理を行う。また、メモリI/F13は、制御部11の指示に基づいて、不揮発性メモリ20からの読み出し処理を行う。
データバッファ12は、メモリコントローラ10がホスト30から受信したユーザデータを不揮発性メモリ20へ記憶するまでに一時記憶する。また、データバッファ12は、不揮発性メモリ20から読み出したユーザデータをホスト30へ送信するまでに一時記憶する。データバッファ12には、例えば、SRAM(Static Random Access Memory)やDRAM(Dynamic Random Access Memory)などの汎用メモリを用いることができる。
制御部11は、メモリシステム1の各構成要素を統括的に制御する。制御部11は、ホスト30からの要求をホストI/F15経由で受け付けた場合に、その要求に応じた制御を行う。例えば、制御部11は、ホスト30からの書き込み要求に応じて、不揮発性メモリ20へのユーザデータおよびパリティの書き込みをメモリI/F13へ指示する。また、制御部11は、ホスト30からの読み出し要求に応じて、不揮発性メモリ20からのユーザデータおよびパリティの読み出しをメモリI/F13へ指示する。
また、制御部11は、ホスト30からユーザデータの書き込み要求を受信した場合、データバッファ12に蓄積されるユーザデータに対して、不揮発性メモリ20上の記憶領域(メモリ領域)を決定する。すなわち、制御部11は、ユーザデータの書き込み先を管理する。ホスト30から受信したユーザデータの論理アドレスと該ユーザデータが記憶された不揮発性メモリ20上の記憶領域を示す物理アドレスとの対応は、アドレス変換テーブルとして例えばデータバッファ12に記憶される。
また、制御部11は、ホスト30から読み出し要求を受信した場合、読み出し要求により指定された論理アドレスを上述のアドレス変換テーブルを用いて物理アドレスに変換し、該物理アドレスからの読み出しをメモリI/F13へ指示する。
ここで、NANDメモリでは、一般に、ページと呼ばれるデータ単位で、書き込みおよび読み出しが行われ、ページよりも大きい所定のデータ単位で消去が行われる。本実施形態では、同一のワード線に接続される複数のメモリセルをメモリセルグループと呼ぶ。メモリセルがシングルレベルセル(SLC)である場合は、1つのメモリセルグループが1ページに対応する。メモリセルがマルチレベルセル(MLC)である場合は、1つのメモリセルグループが複数ページに対応する。また、各メモリセルはワード線に接続するとともにビット線にも接続される。従って、各メモリセルは、ワード線を識別するアドレスとビット線を識別するアドレスとで識別することが可能である。
例えばメモリセルが2ビット/セルのメモリセルである場合、Er、A、B、Cレベルの4つの閾値分布に2ビットのデータ値がそれぞれ対応づけられる。この対応をデータコーディングという。データコーディングは予め定められる。データの書き込み(プログラム)時には、データコーディングに従って記憶するデータ値に応じたレベル(閾値分布)となるようにメモリセルに電荷が注入される。また、2ビット/セルを用いる場合、1つのメモリセルグループは2ページに対応する。各メモリセルが記憶可能な2ビットは、それぞれこの2ページに対応する。以下では、この2ページをローワーページ(lower page)およびアッパーページ(upper page)と呼ぶ。
ホスト30から送信されるユーザデータは、内部バス16に転送されてデータバッファ12に一旦記憶される。符号化/復号部14は、不揮発性メモリ20に記憶されるユーザデータを誤り訂正符号で符号化して符号化データ(符号語)を生成する。また、符号化/復号部14は、不揮発性メモリ20から読み出された符号化データ(読み出し情報又は受信語ともいう)を復号してユーザデータを復元する。なお、符号化/復号部14により符号化されるデータには、ユーザデータ以外にも、メモリコントローラ10内部で用いる制御データ等が含まれてもよい。
以上のような構成を備えるメモリシステム1における書き込み処理では、制御部11は、不揮発性メモリ20への書き込み時に、ユーザデータの符号化を符号化/復号部14に指示する。その際、制御部11は、不揮発性メモリ20における符号語の記憶場所(記憶アドレス)を決定し、決定した記憶場所もメモリI/F13へ指示する。符号化/復号部14は、制御部11からの指示に基づいて、データバッファ12上のユーザデータを誤り訂正符号で符号化して符号語を生成する。符号化方式としては、例えば、LDPC(Low-Density Parity-Check)符号やBCH(Bose-Chaudhuri-Hocquenghem)符号やRS(Reed-Solomon)符号を用いた符号化方式を採用することができる。メモリI/F13は、制御部11からの指示に基づいて符号語を不揮発性メモリ20に書き込む。
一方、読み出し処理では、制御部11は、不揮発性メモリ20からの読み出し時に、不揮発性メモリ20上のアドレスを指定してメモリI/F13へ読み出しを指示する。また、制御部11は、符号化/復号部14へ復号の開始を指示する。メモリI/F13は、制御部11の指示に従って、不揮発性メモリ20の指定されたアドレスに対する読み出しを実行し、この読み出しにより得られた読み出し情報を符号化/復号部14に入力する。そして、符号化/復号部14は、入力された読み出し情報を復号する。
符号化/復号部14は、例えば、多次元の誤り訂正符号の各成分符号の符号化部/復号部として用いることもできる。多次元の誤り訂正符号とは、誤り訂正符号の少なくとも一つ以上の構成単位であるシンボルが、複数のより小規模な成分符号によって多重に保護されているものを指す。その際、1シンボルは、例えば1ビット(二元体(binary field)の元(element))、又は、二元体以外のガロア体(Galois field)(または有限体(finite field)とも呼ばれる)などのアルファベットの元で構成される。
図2は、符号化/復号部14の機能構成の一例を示すブロック図である。図2に示すように、符号化/復号部14は、符号化部301と、復号部302とを有する。符号化部301は、内部バス16に転送されたデータに基づいて、誤り訂正符号化処理を実行し、パリティを生成し、符号化部301は、ユーザデータおよびパリティを不揮発性メモリ20へ書き込む。誤り訂正符号としてはどのような符号を用いてもよいが、例えば、BCH符号やRS(Reed-Solomon)符号等を用いることができる。以下の説明では、BCH符号を用いる例について説明するが、誤り訂正符号の種類はこれに限定されないが、符号化後に情報データとパリティとに分離できる組織符号(systematic code)が好ましい。
復号部302は、不揮発性メモリ20からの読み出されたユーザデータおよびパリティに基づいて復号処理を実行する。ユーザデータに誤りの無い場合、不揮発性メモリ20からの読み出されたユーザデータをそのまま内部バス16へ出力し、ユーザデータに誤りのある場合、パリティを用いて誤り訂正を行った後にユーザデータを内部バス16へ出力する。復号処理が実行されたユーザデータは、内部バス16へ出力された後、制御部11によって、例えば、ホスト30から受信した読み出し要求に対する応答として、ホストI/F15を介してホスト30へ送信される。
制御部11は、符号化/復号部14に対して、データバッファ12に保存されているデータを誤り訂正符号で符号化して符号語を生成することを指示するが、誤り訂正符号で符号化するデータは、ユーザデータに対して圧縮処理等の所定の処理が実行されたデータであってもよい。この場合、復号部302により、不揮発性メモリ20から読み出されたデータに対して復号処理が実行され、復号処理が実行されたデータに対して、伸長処理等の所定の処理が実行された後にホストI/F15を介してホスト30へ送信される。つまり、ユーザデータに基づくデータが符号化されて符号語が生成されて不揮発性メモリ20へ保存されてもよいし、不揮発性メモリ20から読み出されたデータに対して復号処理が実行され、復号処理が実行されたデータに基づくデータがホスト30へ送信されてもよい。
図3は、復号部302の機能構成の一例を示すブロック図である。図3に示すように、復号部302は、誤り訂正回路310を有する。また、誤り訂正回路310は、シンドローム計算回路311と誤り訂正制御回路312とを有する。
シンドローム計算回路311は、複数ビットの入力データからシンドローム(Syndrome)を生成する回路である。誤り訂正制御回路312は、シンドロームを用いて誤り位置を特定する。
BCH符号やReed-Solomon符号などの代数的誤り訂正符号(algebraic error-correcting code)において,誤り訂正を実行する復号器(decoder)では、しばしば符号が定義されたガロア体そのものではなく、部分体(Subfield)の合成表現である合成体(Composite field)上の演算を用いて復号処理を実施する場合がある。これは、復号にかかる演算複雑度を低減するためである。この場合、ガロア体表現から合成体表現を得るため、シンドローム計算の前後で基底変換を実施しており、回路規模の増大や動作周波数の低下の原因となっていた。
そこで、本実施形態にかかるシンドローム計算回路311は、より回路規模を削減してシンドローム計算する。具体的に、シンドローム計算回路311は、シンドロームの計算と合成体への基底変換とを同時に実行するようにする。
図4は、本実施形態にかかるシンドローム計算回路311の回路図である。シンドローム計算回路311では、長さNのバイナリデータ列wに対して、行列積回路3111で行列積演算を実行して、長さkのバイナリシンドロームs′を出力する。行列積回路3111では、バイナリデータ列wに対して、k行N列の演算行列H´を乗算する。
演算行列H´は、以下の式(1)である。
H´=TH・・・(1)
H´=TH・・・(1)
Tは、ガロア体(2k)から合成体(2mn)へのk行k列の基底変換行列である。なお,ガロア体(2k)は二元体を任意の二元体上の最大次数kの既約多項式で拡大したガロア拡大体である。また合成体(2mn)は,ガロア体(2m)を任意のガロア体(2m)上の最大次数nの既約多項式で拡大したガロア拡大体である。k=mnであるため、ガロア体(2k)の元から合成体(2mn)の元へは基底変換行列を用いて1対1写像が可能である。ガロア体(2k)の元はkビットのバイナリ列で表現され、合成体(2mn)の元はn個のガロア体(2m)の元で表現されることから、k=mnよりどちらもkビットのバイナリ列で表現される。Hは、誤り訂正符号を定義するパリティ検査行列の一部もしくは全体に相当する演算行列である。このように、演算行列H´は、基底変換行列と、パリティ検査行列の一部もしくは全体に相当する演算行列との積である。本実施形態にかかるシンドローム計算回路311は、単一の回路でシンドローム計算と基底変換処理を同時に実行するため、高速かつ回路規模を削減することができる。
続いて、図5に示す2ビット訂正BCH符号の復号アルゴリズムの疑似コードを用いて、誤り訂正制御回路312の処理内容を説明する。擬似コード中の‘==’は等価判定で左項と右項が同一の際に真(true)を返し、‘! =’は逆に左項と右項が異なる際に真(true)を返す。‘=’は左項への代入を意味する。なお、本実施形態の2ビット訂正BCH符号は、ガロア体(2k)の原始元αの最小多項式と、α3の最小多項式の積により得られる生成多項式で定義されるものとする。2ビット訂正BCH符号の訂正回路では、2つのシンドロームを計算し、そのシンドロームから誤り位置を特定する。入力は、シンドローム計算回路311により出力された、2つのシンドロームs1、s2である。出力は2つの誤り位置インデックスe1、e2∈{-1、0、1、2、・・・、N-1}と、誤り訂正処理をした際に1となる誤り訂正フラグfc∈{0,1}、誤り検出した際に1となる誤り検出フラグfd∈{0,1}である。なお、誤り訂正する際には必ず誤りを検出した状態であるため,fc=1のときには必ずfd=1である。Nはデータとパリティを合わせた長さで、有効インデックスは0~N-1のため、インデックス-1は、誤り無しや訂正不能な時に返す無効な返り値である。
誤り訂正制御回路312は、エラーの有無や訂正可否をシンドロームs1、s2によって判定する。誤り訂正制御回路312は、s1、s2が共に0のときには誤り無しと判定する(疑似コードの1行目から4行目)。
誤り訂正制御回路312は、s1=0、且つs2が0でない場合には,3ビット以上の誤りが生じているため誤り訂正は不可能と判定する。つまり、誤り訂正制御回路312は、fc=0、fd=1として訂正はしない(疑似コードの5行目から7行目)。
疑似コードの10行目以降は誤り訂正処理となる。まず、誤り訂正制御回路312は、誤り訂正s1を3乗したstを算出する(疑似コードの10行目)。s3=stの場合、1ビット誤りか3ビット以上の誤りなので、誤り訂正制御回路312は、合成体(2mn)の元から誤り位置を求める位置変換演算locとシンドロームs1を使い、誤り位置を求める(疑似コードの12行目)。位置変換演算locは、誤り位置が得られないとき(3ビット以上の誤りがある場合)-1を返すので、誤り訂正制御回路312は、位置変換演算locが-1を返した場合、誤り訂正不可能と判定し、fc=0、fd=1として訂正をしない(疑似コードの13行目から15行目)。
一方、位置変換演算locにより誤り位置が得られた際、誤り訂正制御回路312は、そのビット位置を誤り位置としてfc=1、fd=1と共に返す(疑似コードの16行目から18行目)。
20行目以降は2ビット誤りか3ビット以上の処理になる。誤り訂正制御回路312は、21行目の計算によって得られたuのトレースTr(u)が0以外となる際には訂正不能と判定する(疑似コードの22行目から24行目)。なお、22行目のTr(u)は合成体(2mn)の元uを二元体の元へ写像するトレース関数である。またinv(x)はxの逆元を返す関数である。
Tr(u)が0の場合、2ビット誤りとして25行目以降の処理を行う。26行目のYはk行k列のバイナリ行列である。29、30行目で位置変換演算locを使用して誤り位置を求めるが、いずれか一方が無効値-1の場合には、3ビット以上の誤りが生じているため誤り訂正をしない(疑似コードの31行目から33行目)。
誤り訂正制御回路312のハードウエアの構成としては,入力s1、s2に従いst、u、loc(s1)、loc(x1)、loc(x2)といった値を計算し、s1=0、s2=0、s2=st、Tr(u)、loc(s1)=-1、loc(x1)=-1、loc(x2)=-1の7ビットの組み合わせ論理で出力値を選択するような順序回路が考えられる。
s1=0の場合(誤りなしもしくは訂正不能)は、疑似コードの10行目以降の計算は不要であり、またs2=stの場合(1ビット誤りもしくは訂正不能)は疑似コードの20行目以降の計算は不要である。よって、SDRAMのように誤りの発生確率が非常に低いことが期待される場合には、誤り訂正制御回路312は、疑似コードの10行目、20行目以降の計算を必要に応じて活性化することで平均消費電力を抑制できる。誤り訂正制御回路312は、誤り訂正のビット反転について、e1、e2それぞれのインデックスのみが1となる長さNのワンホットベクトルをそれぞれ生成し、それらを誤り訂正回路310へ入力されたバイナリデータ列wに加算(排他的論理和)することで、誤りを訂正することができる。
本実施形態にかかるシンドローム計算回路311に対する比較例として、シンドローム計算と基底変換処理をそれぞれ別の回路で実装することが考えられる。比較例にかかるシンドローム計算回路の回路図を図6に示す。図6に示すように、比較例にかかるシンドローム計算回路は、パリティ検査行列演算回路5111と、基底変換演算回路5112とを有する。
比較例にかかるシンドローム計算回路では、パリティ検査行列演算回路5111にバイナリデータ列wが入力されると、パリティ検査行列演算回路5111がバイナリデータ列wと、パリティ検査行列との積を算出した結果であるシンドロームsを出力する。このシンドロームsは、ガロア体(2k)表現のシンドロームである。
シンドロームsに基底変換演算回路5112が入力されると、基底変換演算回路5112は、シンドロームsと基底変換行列との積を算出した結果であるシンドロームs´を出力する。このシンドロームs´は、合成体(2mn)表現のシンドロームである。
比較例にかかるシンドローム計算回路は、シンドローム計算と基底変換処理を別々の回路で実装していたが、本実施形態にかかるシンドローム計算回路311では図4に示したように単一の回路で2つの処理を同時に実施するため、高速かつ回路規模を削減することが可能になる。
続いて、図7に、符号長N=144の2ビット訂正BCH符号のシンドローム計算回路を実装した際のXOR(排他的論理和)ゲート数の表を示し、図8に、同じく符号長N=144の2ビット訂正BCH符号のシンドローム計算回路を実装した際のXORの最大段数の表を示す。
2ビット訂正BCH符号の訂正回路では、2つのシンドロームを計算するため、それぞれに対応する演算行列H1、H2が必要になる。また、H1、H2それぞれで得られたシンドロームを計算する基底変換回路Tも2つ必要になるので、回路実装時のXORゲート数は合計539ゲートとなる。
一方、本実施形態にかかるシンドローム計算回路311では、2つのシンドロームそれぞれに対応する演算行列H´1,H´2のXORゲート数の合計は507ゲートとなり、比較例にかかるシンドローム計算回路よりも少ない規模で実装できる。
また、図8に基づいて、回路の高速性に関わる回路中の最大のXOR段数(回路入力から回路出力までに回路中で通るXORゲートの数の最大値)を比較すると、比較例にかかるシンドローム計算回路が17ゲートである。これは、演算行列H1、H2の内、最大値と、基底変換行列Tの3ゲートとを加算するためである。本実施形態にかかるシンドローム計算回路311では14ゲートと少なくすることができる。このように、本実施形態にかかるシンドローム計算回路311を構成することで、小規模かつ高速なシンドローム計算回路を実現することができる。
なお、本実施形態では、説明を簡単にするために二元体上のシンボルを持つBCH符号のシンドローム計算回路を例として述べているが、Reed-Solomon符号など、有限体の多項式で定義される誤り訂正符号のシンドローム計算回路に適用してもよい。
以上述べた説明では、シンドローム計算回路311では、バイナリデータ列wに対して、基底変換行列と、パリティ検査行列の一部もしくは全体に相当する演算行列との積行列を用いた積演算を実行して、バイナリシンドロームs′を出力する。
このように、シンドローム計算回路311は、単一の回路でシンドローム計算と、合成体への基底変換処理を同時に実行するため、高速かつ回路規模を削減することができる。
また、誤り訂正制御回路312は、シンドローム計算回路311により出力されたシンドロームs′を用いて誤り位置を検出する。この場合、誤り訂正回路310は、シンドローム計算回路311で高速かつ回路規模を削減するので、誤り訂正回路310でも高速かつ回路規模を削減することができる。
(第2の実施形態)
続いて、第2の実施形態にかかるメモリシステム1について説明する。第2の実施形態にかかるメモリシステム1のシンドローム計算回路では、入力データを逐次計算するものである。シンドローム計算回路および誤り訂正制御回路以外は、第1の実施形態にかかるメモリシステム1と共通するので、シンドローム計算回路および誤り訂正制御回路を中心に説明する。
続いて、第2の実施形態にかかるメモリシステム1について説明する。第2の実施形態にかかるメモリシステム1のシンドローム計算回路では、入力データを逐次計算するものである。シンドローム計算回路および誤り訂正制御回路以外は、第1の実施形態にかかるメモリシステム1と共通するので、シンドローム計算回路および誤り訂正制御回路を中心に説明する。
図9に、第2の実施形態にかかるシンドローム計算回路311aの回路図を示す。第2の実施形態にかかるシンドローム計算回路311aは、第1行列積回路3025と、加算回路3026と、レジスタ3027と、第2行列積回路3028とを有する。
第1行列積回路3025は、入力された長さpのデータチャンクwtp:(t+1)p-1に対して、演算行列B´であるTBを乗算し、長さkの第1の中間データを加算回路3026へ出力する。wtp:(t+1)p-1とは、tpビットから(t+1)p-1までのビット列を示す。tは0、1、・・・、(N/p)-1のチャンクインデックスで、pは同時入力ビット数である。行列Tは、ガロア体(2k)から合成体(2mn)へのk行k列の基底変換行列である。演算行列Bは、k行p列の行列であり、パリティ検査行列の一部である。
第1行列積回路3025に入力される長さpのデータチャンクとは、誤りを含む可能性のある長さNのバイナリデータ列wがpビット毎に分割されたデータチャンクwtp:(t+1)p-1、t=0、1、・・・、(N/p)-1である。クロックサイクル毎にwtp:(t+1)p-1が入力され、N/pサイクルかけて全てのデータチャンクが入力された後、次のサイクルで長さkのバイナリシンドロームs’が出力される。
加算回路3026は、第1行列積回路3025の出力である長さkの第1の中間データと、第2行列積回路3028からの出力である長さkの第2の中間データとの要素同士の排他的論理和を計算し、第3の中間データをレジスタ3027へ出力する回路である。
レジスタ3027は、加算回路3026から出力される長さkの第3の中間データを次のクロックサイクルまで保持し、次のクロックサイクルで保持データを第4の中間データとして第2行列積回路と後段の処理ブロックへ出力する。
第2行列積回路3028は、レジスタ3027から出力された長さkの第4の中間データに対して、演算行列A´を乗算し、加算回路3026へ長さkの第2の中間データを出力する。
演算行列A´は、以下の式(2)である。
A´=TAT-1・・・(2)
A´=TAT-1・・・(2)
行列Tは、ガロア体(2k)から合成体(2mn)へのk行k列の基底変換行列である。行列Aは、k行k列のシフト行列であり、ガロア体(2k)上の原始元のp乗の元の乗算に相当する。行列T-1は、合成体(2mn)からガロア体(2k)への基底変換行列(行列Tの逆行列)である。
続いて、図10に示す符号長Nの2ビット訂正拡大BCH符号の復号アルゴリズムの疑似コードを用いて、第2の実施形態にかかる誤り訂正制御回路312の処理内容を説明する。なお、本実施形態の2ビット訂正拡大BCH符号は、ガロア体(2k)の原始元αの最小多項式と、原始元αの逆元α-1の最小多項式と、拡大パリティの生成多項式(x+1)の積により得られる生成多項式で定義されるものとする。
2ビット訂正拡大BCH符号の訂正回路では、3つのシンドロームを計算する。入力は、シンドローム計算で得られた3つのシンドロームs1、s2、scである。scは、単一パリティチェック(チェックサム)のシンドロームである。出力は、2つの誤り位置インデックスe1、e2∈{-1、0、1、2、・・・、N-1}と、誤り訂正処理をした際に1となる誤り訂正フラグfc∈{0、1}、誤り検出した際に1となる誤り検出フラグfd∈{0、1}である。なお、誤り訂正する際には必ず誤りを検出した状態であるため、fc=1のときには必ずfd=1である。
有効インデックスは、0~N-1であるため、インデックス-1は誤り無しや訂正不能な時に返す無効な返り値である。誤り訂正制御回路312は、エラーの有無や訂正可否はシンドロームs1、s2によって判定することができる。誤り訂正制御回路312は、s1、s2が共に0のときには、チェックサムrc以外の部分に誤りは無いのでシンドロームscの値に応じてチェックサムを訂正する(疑似コードの3行目から9行目)。
一方s1、s2のどちらか片方が0でもう一方が非ゼロの場合には、誤り訂正制御回路312は、3ビット以上の誤りが生じているため誤り訂正は不可能と判定する。つまり、誤り訂正制御回路312は、fc=0、fd=1として訂正はしない(疑似コードの10行目から17行目)。
rc以外で発生した誤りの訂正が可能になるのはs1、s2が共に非ゼロの値の時である(疑似コードの18行目以降)。疑似コードの19行目のinv(x)はxの逆元を返す関数で、u=inv(s1s2)が1のときにはrc以外での誤り数は1として処理する(疑似コードの20行目から27行目)。なお、誤り訂正制御回路312は、u=1のとき、inv(u)=1となることから、20行目の条件判定はuのかわりにs1s2で実行する。loc(x)はxから計算される誤り位置のインデックスを計算する位置変換演算である。疑似コードの29行目のTr(u)は合成体(2mn)の元uを二元体の元へ写像するトレース関数である。なお33行目のYはk行k列のバイナリ行列である。
誤り訂正制御回路312のハードウエアの構成としては、入力s1、s2,scに従いu、loc(s1)、loc(x1)、loc(x2)といった値を計算し、s1=0、s2=0、sc、u=1、Tr(u)の5ビットで出力値を選択するような順序回路が考えられる。s1、s2が共に非ゼロとならない場合には、疑似コードの18行目以降の計算は不要である。よって、SDRAMのように誤りの発生確率が非常に低いことが期待される場合には、誤り訂正制御回路312は、疑似コードの18行目以降の計算を実施するとき、s1、s2共に非ゼロのときのみ活性化するように実装することで平均消費電力を抑制できる。また、誤り訂正制御回路312は、誤り訂正のビット反転について、e1、e2それぞれのインデックスのみが1となる長さNのワンホットベクトルをそれぞれ生成し、それらを誤り訂正回路310へ入力されたバイナリデータ列wに加算(排他的論理和)することで、誤りを訂正することができる。
この技術と比較される比較例として、シンドローム計算と基底変換処理をそれぞれ別の回路で実装することが考えられる。比較例にかかるシンドローム計算回路の回路図を図11に示す。図11に示すように、比較例にかかるシンドローム計算回路は、第1行列積回路5211と、加算回路5212と、レジスタ5213と、第2行列積回路5214と、第3行列積回路5215とを有する。
第1行列積回路5211は、長さpのデータチャンクに対して、演算行列Bを乗算し、長さkの第1の中間データを加算回路5212へ出力する。演算行列Bは、k行p列の行列であり、パリティ検査行列の一部である。
加算回路5212は、第1行列積回路5211の出力である長さkの第1の中間データと、第2行列積回路5214からの出力である長さkの第2の中間データとの要素同士の排他的論理和を計算し、第3の中間データをレジスタ5213へ出力する回路である。
レジスタ5213は、加算回路5212から出力される長さkの第3の中間データを次のクロックサイクルまで保持し、次のクロックサイクルで保持データを第4の中間データとして第2行列積回路5214と後段の処理ブロックである第3行列積回路5215へ出力する。
第2行列積回路5214は、レジスタ5213から出力された長さkの第4の中間データに対して、k行k列のシフト行列Aを乗算し、加算回路5212へ長さkの第2の中間データを出力する。
なお、レジスタ5213が後段の処理ブロックへ出力するデータは、シンドロームsになる。このシンドロームsは、ガロア体(2k)表現のシンドロームである。シンドロームsに第3行列積回路5215が入力されると、第3行列積回路5215は、シンドロームsと基底変換行列との積を算出した結果であるシンドロームs´を出力する。このシンドロームs´は、合成体(2mn)表現のシンドロームである。
比較例にかかるシンドローム計算回路は、シンドローム計算と基底変換処理を別々の回路で実装していたが、本実施形態にかかるシンドローム計算回路311aでは図9に示したように2つの処理を同時に実施するため、高速かつ回路規模を削減することが可能になる。
続いて、図12に、符号長N=512の2ビット訂正拡大BCH符号のシンドローム計算回路を実装した際のXOR(排他的論理和)ゲート数の表を示し、図13に、同じく符号長N=512の2ビット訂正拡大BCH符号のシンドローム計算回路を実装した際のXORの段数の表を示す。
2ビット訂正BCH符号の訂正回路では、2つのシンドロームを計算するため,それぞれに対応する演算行列A1、A2、B1、B2が必要になる。また、演算行列A1、A2、B1、B2それぞれで得られたシンドロームを計算する基底変換回路Tも2つ必要になるので、回路実装時のXORゲート数は合計590ゲートとなる。
一方、本実施形態にかかるシンドローム計算回路311aでは、2つのシンドロームそれぞれに対応する演算行列A´1、A´2、B´1、B´2のXORゲート数の合計は574ゲートとなり、比較例にかかるシンドローム計算回路よりも少ない規模で実装できる。
また、図13に基づいて、回路の高速性に関わる回路中の最大のXOR段数(回路入力から回路出力までに回路中で通るXORゲートの数の最大値)を比較すると、比較例にかかるシンドローム計算回路が20ゲートである。これは、演算行列A1、A2、B1、B2の最大値16ゲートと、基底変換回路Tの4ゲートとを加算したものである。一方、本実施形態にかかるシンドローム計算回路311aでは、17ゲートとなるので、本実施形態にかかるシンドローム計算回路311aの方が、比較例にかかるシンドローム計算回路より少なくすることができる。このように、本実施形態にかかるシンドローム計算回路311aを構成することで、小規模かつ高速なシンドローム計算回路を実現することができる。
以上述べた説明では、シンドローム計算回路311aでは、第1行列積回路3025に加えて、加算回路3026と、レジスタ3027と、基底変換行列と、シフト行列と、合成体からガロア体への基底変換行列との3つの行列積の行列積演算を実施する第2行列積回路3028とを備える。
この場合、第2行列積回路3028において、シフト処理と、基底変換処理とをまとめて実施するので、高速かつ回路規模を削減することができる。
また、誤り訂正制御回路312は、シンドローム計算回路311aにより出力されたシンドロームsを用いて誤り位置を検出する。この場合、誤り訂正回路310は、シンドローム計算回路311で高速かつ回路規模を削減するので、誤り訂正回路310でも高速かつ回路規模を削減することができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
10 メモリコントローラ、11 制御部、12 データバッファ、13 メモリI/F、14 符号化/復号部、15 ホストI/F、16 内部バス、20 不揮発性メモリ、301 符号化部、302 復号部。
Claims (6)
- ガロア体から合成体への第1基底変換行列と、パリティ検査行列の少なくとも一部の第1演算行列との積から得られる第2演算行列の行列積演算を実行する第1行列積回路を含み、
誤り訂正符号化された入力信号が前記第1行列積回路に入力され、前記入力信号について、前記第2演算行列に基づいた行列積演算を実行した結果に基づくシンドロームを出力する、シンドローム計算回路。 - 前記第1演算行列は、前記パリティ検査行列である、請求項1に記載のシンドローム計算回路。
- 請求項1に記載のシンドローム計算回路と、
前記シンドローム計算回路により出力されたシンドロームを用いて誤り位置を検出する誤り訂正制御回路と、
を備える、誤り訂正回路。 - シンボルごとの加算処理を実行する加算回路と、
前記加算回路の出力を保持するレジスタと、
前記レジスタに保持されたデータに対して、前記第1基底変換行列と、ガロア体上の原始元の整数乗の元の乗算に相当するシフト行列と、合成体からガロア体への第2基底変換行列との3つの行列の積から得られる第3演算行列の行列積演算を実行し、実行した結果を前記加算回路へ出力する第2行列積回路と
をさらに備える、請求項1に記載のシンドローム計算回路。 - 請求項4に記載のシンドローム計算回路と、
前記シンドローム計算回路により出力されたシンドロームを用いて誤り位置を検出する、誤り訂正制御回路と、
を備える、誤り訂正回路。 - 不揮発性メモリと、
メモリインタフェース経由で前記不揮発性メモリからのデータ読み出しを実行する制御部と、シンドローム計算回路と誤り訂正制御回路とを有する誤り訂正回路とを含む、
メモリコントローラと、
を備え、
前記制御部は、前記不揮発性メモリからデータを読み出し、前記読み出されたデータに基づく入力データを前記シンドローム計算回路へ入力し、
前記シンドローム計算回路は、前記入力データに対して、ガロア体から合成体への第1基底変換行列と、パリティ検査行列である第1演算行列との積から得られる第2演算行列の行列積演算を実行し、前記行列積演算の実行結果に基づくシンドロームを出力し、
前記誤り訂正制御回路は、前記シンドローム計算回路から出力されたシンドロームを用いて誤り位置を検出して、前記入力データを誤り訂正し、
前記制御部は、前記入力データを誤り訂正したデータをホストへ送信する、メモリシステム。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021153863A JP2023045450A (ja) | 2021-09-22 | 2021-09-22 | シンドローム計算回路、誤り訂正回路およびメモリシステム |
US17/685,981 US11711100B2 (en) | 2021-09-22 | 2022-03-03 | Syndrome calculation for error detection and error correction |
US18/330,669 US20230318628A1 (en) | 2021-09-22 | 2023-06-07 | Syndrome calculation for error detection and error correction |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021153863A JP2023045450A (ja) | 2021-09-22 | 2021-09-22 | シンドローム計算回路、誤り訂正回路およびメモリシステム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2023045450A true JP2023045450A (ja) | 2023-04-03 |
Family
ID=85572425
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2021153863A Pending JP2023045450A (ja) | 2021-09-22 | 2021-09-22 | シンドローム計算回路、誤り訂正回路およびメモリシステム |
Country Status (2)
Country | Link |
---|---|
US (2) | US11711100B2 (ja) |
JP (1) | JP2023045450A (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2023137091A (ja) * | 2022-03-17 | 2023-09-29 | キオクシア株式会社 | メモリシステムおよびメモリ制御方法 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
BE890280A (fr) * | 1981-09-09 | 1982-03-09 | Belge Lampes Mat Electr Mble | Dispositif de codage et de decodage base sur un code de convolution |
NL8104342A (nl) * | 1981-09-21 | 1983-04-18 | Philips Nv | Rekenmachinesysteem, gebaseerd op een symboolkorrigerende kode met twee werkmodes. |
US7089276B2 (en) | 2002-10-18 | 2006-08-08 | Lockheed Martin Corp. | Modular Galois-field subfield-power integrated inverter-multiplier circuit for Galois-field division over GF(256) |
US8380777B2 (en) | 2007-06-30 | 2013-02-19 | Intel Corporation | Normal-basis to canonical-basis transformation for binary galois-fields GF(2m) |
US8453038B2 (en) | 2009-06-30 | 2013-05-28 | Apple Inc. | Chien search using multiple basis representation |
US8683293B2 (en) | 2009-12-16 | 2014-03-25 | Nvidia Corporation | Method and system for fast two bit error correction |
US8839069B2 (en) * | 2011-04-08 | 2014-09-16 | Micron Technology, Inc. | Encoding and decoding techniques using low-density parity check codes |
-
2021
- 2021-09-22 JP JP2021153863A patent/JP2023045450A/ja active Pending
-
2022
- 2022-03-03 US US17/685,981 patent/US11711100B2/en active Active
-
2023
- 2023-06-07 US US18/330,669 patent/US20230318628A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20230089702A1 (en) | 2023-03-23 |
US11711100B2 (en) | 2023-07-25 |
US20230318628A1 (en) | 2023-10-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5043562B2 (ja) | エラー訂正回路、その方法及び前記回路を備える半導体メモリ装置 | |
CN113032178B (zh) | 存储器控制器及快闪存储器的存取方法 | |
US8645789B2 (en) | Multi-phase ECC encoding using algebraic codes | |
JP2008165808A (ja) | 誤り訂正確率を減らすエラー訂正回路、その方法及び前記回路を備える半導体メモリ装置 | |
JP6540703B2 (ja) | メモリコントローラおよびメモリコントローラの制御方法 | |
KR20160090054A (ko) | 플래시 메모리 시스템 및 그의 동작 방법 | |
US11182240B2 (en) | Techniques to improve error correction using an XOR rebuild scheme of multiple codewords and prevent miscorrection from read reference voltage shifts | |
CN113064547B (zh) | 有局部顺序信息的校验矩阵的保护的数据存取方法及设备 | |
US11025281B2 (en) | Memory system | |
US20230318628A1 (en) | Syndrome calculation for error detection and error correction | |
US9960788B2 (en) | Memory controller, semiconductor memory device, and control method for semiconductor memory device | |
US10291258B2 (en) | Error correcting code for correcting single symbol errors and detecting double bit errors | |
JP7237674B2 (ja) | メモリシステム | |
JP2012050008A (ja) | 誤り検出訂正方法および半導体メモリ装置 | |
US10970166B2 (en) | Memory system and method of controlling non-volatile memory | |
US10133628B2 (en) | Apparatuses and methods for encoding using error protection codes | |
US20150128009A1 (en) | Memory system and memory controller | |
US11150813B2 (en) | Memory system | |
CN110908827A (zh) | 用于NAND Flash闪存纠错的并行BCH解码方法 | |
JP2021141369A (ja) | メモリシステム | |
US8819331B2 (en) | Memory system and memory controller | |
US20230299794A1 (en) | Memory system and control method of controlling nonvolatile memory | |
TWI551058B (zh) | 最小-總和演算法之低密度奇偶校驗碼解碼器及其解碼方法 | |
CN117632577A (zh) | 一种基于bch编码的快速ecc纠错电路 | |
JP2013201503A (ja) | チェンサーチ回路、復号器、記憶装置およびチェンサーチ方法 |