(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024115662
(43)【公開日】2024-08-27
(54)【発明の名称】メモリシステムおよび制御方法
(51)【国際特許分類】
H03M 13/15 20060101AFI20240820BHJP
H03M 13/37 20060101ALI20240820BHJP
G06F 11/10 20060101ALI20240820BHJP
【FI】
H03M13/15
H03M13/37
G06F11/10 648
【審査請求】未請求
【請求項の数】6
【出願形態】OL
(21)【出願番号】P 2023021414
(22)【出願日】2023-02-15
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】近藤 裕樹
(72)【発明者】
【氏名】森永 孝介
【テーマコード(参考)】
5J065
【Fターム(参考)】
5J065AC03
5J065AD11
5J065AE02
5J065AF01
5J065AG01
5J065AG02
(57)【要約】
【課題】より簡易な構成により誤り訂正を実行する。
【解決手段】メモリシステムは、不揮発性メモリとメモリコントローラとを備える。不揮発性メモリは、n(nは3以上の整数)ビット以下の誤りを訂正する誤り訂正符号で符号化されたデータを記憶する。メモリコントローラは、不揮発性メモリから読み出した受信語を用いてシンドロームを計算し、シンドロームを用いて誤りのビット数を推定し、ビット数が2または3である場合、シンドロームに基づいて計算される第1値および第2値のうち一方である計算値を用いて、ビット数に対応する誤り位置多項式の変数に対する変数変換を実行し、第1値および第2値を用いて、変数変換に応じて誤り位置多項式を変換した変換多項式の根の計算を実行し、変換多項式の根に計算値を用いた変数逆変換を実行して誤り位置多項式の根を求め、求めた根に対応する誤り位置の誤りを訂正する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
n(nは3以上の整数)ビット以下の誤りを訂正する誤り訂正符号で符号化されたデータを記憶する不揮発性メモリと、
前記不揮発性メモリから受信語を読み出し、
読み出された前記受信語を用いてシンドロームを計算し、
前記シンドロームを用いて前記誤りのビット数を推定し、
前記ビット数が2または3である場合、前記シンドロームに基づいて計算される第1値および第2値のうち一方である計算値を用いて、前記ビット数に対応する誤り位置多項式の変数に対する変数変換を実行し、前記第1値および前記第2値を用いて、前記変数変換に応じて前記誤り位置多項式を変換した変換多項式の根の計算を実行し、
前記変換多項式の根に、前記計算値を用いた変数逆変換を実行して前記誤り位置多項式の根を求め、
前記誤り位置多項式の根に対応する誤り位置の誤りを訂正する、
メモリコントローラと、
を備えるメモリシステム。
【請求項2】
前記メモリコントローラは、
前記ビット数が2または3である場合、前記第1値および前記第2値を用いてキー情報を計算し、前記キー情報が取りうる複数の値と前記変換多項式の根とを対応づけた対応情報を用いて、計算された前記キー情報に対応する前記根を求める、
請求項1に記載のメモリシステム。
【請求項3】
前記メモリコントローラは、
ガロア体の原始元であるαの1乗、3乗、および、5乗に対応する3つのシンドロームs
1,s
3,s
5を計算し、
β=s
1
3+s
3を前記第1値として計算し、
γ=s
1
5+s
5を前記第2値として計算し、
γである前記第2値を前記計算値とし、
(1)式で表される値を前記キー情報としたときに、(2)式で表される前記変数変換と、(3)式で表される前記変換多項式の根の計算と、を実行する、
【数1】
【数2】
【数3】
請求項2に記載のメモリシステム。
【請求項4】
前記メモリコントローラは、
ガロア体の原始元であるαの1乗、3乗、および、5乗に対応する3つのシンドロームs
1,s
3,s
5を計算し、
β=s
1
3+s
3を前記第1値として計算し、
γ=s
1
5+s
5を前記第2値として計算し、
βである前記第1値を前記計算値とし、
(4)式で表される値を前記キー情報としたときに、(5)式で表される前記変数変換と、(6)式で表される前記変換多項式の根の計算と、を実行する、
【数4】
【数5】
【数6】
請求項2に記載のメモリシステム。
【請求項5】
前記メモリコントローラは、
ガロア体の原始元であるαの1乗、3乗、および、5乗に対応する3つのシンドロームs
1,s
3,s
5を計算し、
β=s
1
3+s
3を前記第1値として計算し、
γ=s
1
5+s
5を前記第2値として計算し、
γである前記第2値を前記計算値とし、
前記キー情報をβとしたときに、(7)式で表される前記変数変換と、(8)式で表される前記変換多項式の根の計算と、を実行する、
【数7】
【数8】
請求項2に記載のメモリシステム。
【請求項6】
不揮発性メモリを制御する制御方法であって、
n(nは3以上の整数)ビット以下の誤りを訂正する誤り訂正符号で符号化されたデータを前記不揮発性メモリに記憶し、
前記不揮発性メモリから受信語を読み出し、
読み出された前記受信語を用いてシンドロームを計算し、
前記シンドロームを用いて前記誤りのビット数を推定し、
前記ビット数が2または3である場合、前記シンドロームに基づいて計算される第1値および第2値のうち一方である計算値を用いて、前記ビット数に対応する誤り位置多項式の変数に対する変数変換を実行し、前記第1値および前記第2値を用いて、前記変数変換に応じて前記誤り位置多項式を変換した変換多項式の根の計算を実行し、
前記変換多項式の根に、前記計算値を用いた変数逆変換を実行して前記誤り位置多項式の根を求め、
前記誤り位置多項式の根に対応する誤り位置の誤りを訂正する、
ことを含む制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、メモリシステムおよび制御方法に関する。
【背景技術】
【0002】
メモリシステムでは、NAND型フラッシュメモリ等のメモリに記憶するデータを保護するために、誤り訂正符号化されたデータがメモリに記憶される。このため、メモリに記憶されたデータを読み出す際には、メモリから読み出された誤り訂正符号化されたデータ(受信語とも称される。)を復号して誤り訂正符号化される前のデータを復元する。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】国際公開第2001/084719号
【特許文献2】特開平7-231261号公報
【特許文献3】米国特許第9,362,953号明細書
【発明の概要】
【発明が解決しようとする課題】
【0004】
本発明の実施形態は、より簡易な構成により誤り訂正(復号)を実行することができるメモリシステムおよび制御方法を提供することを目的とする。
【課題を解決するための手段】
【0005】
実施形態のメモリシステムは、不揮発性メモリとメモリコントローラとを備える。不揮発性メモリは、n(nは3以上の整数)ビット以下の誤りを訂正する誤り訂正符号で符号化されたデータを記憶する。メモリコントローラは、不揮発性メモリから受信語を読み出し、受信語を用いてシンドロームを計算し、シンドロームを用いて誤りのビット数を推定し、ビット数が2または3である場合、シンドロームに基づいて計算される第1値および第2値のうち一方である計算値を用いて、ビット数に対応する誤り位置多項式の変数に対する変数変換を実行し、第1値および第2値を用いて、変数変換に応じて誤り位置多項式を変換した変換多項式の根の計算を実行し、変換多項式の根に計算値を用いた変数逆変換を実行して誤り位置多項式の根を求め、求めた根に対応する誤り位置の誤りを訂正する。
【図面の簡単な説明】
【0006】
【
図1】実施形態に係るメモリシステムのブロック図。
【
図4】実施形態における復号処理のフローチャート。
【発明を実施するための形態】
【0007】
以下に添付図面を参照して、この発明にかかるメモリシステムの好適な実施形態を詳細に説明する。
【0008】
(第1実施形態)
まず、本実施形態に係るメモリシステムについて、図面を参照して詳細に説明する。
図1は、本実施形態に係るメモリシステムの概略構成例を示すブロック図である。
図1に示すように、メモリシステム1は、メモリコントローラ10と不揮発性メモリ20とを備える。メモリシステム1は、ホスト30と接続可能であり、
図1ではホスト30と接続された状態が示されている。ホスト30は、例えば、パーソナルコンピュータ、携帯端末などの電子機器であってよい。
【0009】
不揮発性メモリ20は、データを不揮発に記憶する不揮発性メモリであり、例えば、NAND型フラッシュメモリ(以下、単にNANDメモリという)である。以下の説明では、不揮発性メモリ20としてNANDメモリが用いられた場合を例示するが、不揮発性メモリ20として3次元構造フラッシュメモリ、ReRAM(Resistive Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)等のNANDメモリ以外の記憶装置を用いることも可能である。また、不揮発性メモリ20が半導体メモリであることは必須ではなく、半導体メモリ以外の種々の記憶媒体に対して本実施形態を適用することも可能である。
【0010】
メモリシステム1は、いわゆるSSD(Solid State Drive)や、メモリコントローラ10と不揮発性メモリ20とが1つのパッケージとして構成されるメモリカード等、不揮発性メモリ20を備える種々のメモリシステムであってよい。
【0011】
メモリコントローラ10は、ホスト30からの書込み要求に従って不揮発性メモリ20への書込みを制御する。また、メモリコントローラ10は、ホスト30からの読出し要求に従って不揮発性メモリ20からの読み出しを制御する。メモリコントローラ10は、例えばSoC(System On a Chip)として構成される半導体集積回路である。メモリコントローラ10は、ホストI/F(ホストインタフェース)15、メモリI/F(メモリインタフェース)13、制御部11、符号化/復号部(コーデック)14およびデータバッファ12を備える。ホストI/F15、メモリI/F13、制御部11、符号化/復号部14およびデータバッファ12は、内部バス16で相互に接続されている。以下で説明するメモリコントローラ10の各構成要素の動作の一部または全部は、CPU(Central Processing Unit)がファームウエアを実行することによって実現されてもよいし、ハードウエアで実現されてもよい。
【0012】
ホストI/F15は、ホスト30との間のインタフェース規格に従った処理を実施し、ホスト30から受信した命令、書込み対象のユーザデータなどを内部バス16に出力する。また、ホストI/F15は、不揮発性メモリ20から読み出されて復元されたユーザデータ、制御部11からの応答などをホスト30へ送信する。
【0013】
メモリI/F13は、制御部11の指示に基づいて、不揮発性メモリ20への書込み処理を行う。また、メモリI/F13は、制御部11の指示に基づいて、不揮発性メモリ20からの読み出し処理を行う。
【0014】
制御部11は、メモリシステム1の各構成要素を統括的に制御する。制御部11は、ホスト30からホストI/F15経由で命令を受けた場合に、その命令に従った制御を行う。例えば、制御部11は、ホスト30からの命令に従って、不揮発性メモリ20へのユーザデータおよびパリティの書き込みをメモリI/F13へ指示する。また、制御部11は、ホスト30からの命令に従って、不揮発性メモリ20からのユーザデータおよびパリティの読み出しをメモリI/F13へ指示する。
【0015】
また、制御部11は、ホスト30から書込み要求を受信した場合、データバッファ12に蓄積されるユーザデータに対して、不揮発性メモリ20上の記憶領域(メモリ領域)を決定する。すなわち、制御部11は、ユーザデータの書込み先を管理する。ホスト30から受信したユーザデータの論理アドレスと該ユーザデータが記憶された不揮発性メモリ20上の記憶領域を示す物理アドレスとの対応はアドレス変換テーブルとして記憶される。
【0016】
また、制御部11は、ホスト30から読出し要求を受信した場合、読出し要求により指定された論理アドレスを上述のアドレス変換テーブルを用いて物理アドレスに変換し、該物理アドレスからの読み出しをメモリI/F13へ指示する。
【0017】
NANDメモリでは、一般に、ページと呼ばれるデータ単位で、書き込みおよび読み出しが行われ、ブロックと呼ばれるデータ単位で消去が行われる。本実施形態では、この同一のワード線に接続される複数のメモリセルをメモリセルグループと呼ぶ。メモリセルがシングルレベルセル(SLC:Single Level Cell)である場合は、1つのメモリセルグループが1ページに対応する。メモリセルがマルチレベルセル(MLC:Multiple Level Cell)である場合は、1つのメモリセルグループが複数ページに対応する。なお、本説明において、MLCには、TLC(Triple Level Cell)やQLC(Quad Level Cell)等が含まれる。また、各メモリセルはワード線に接続するとともにビット線にも接続される。従って、各メモリセルは、ワード線を識別するアドレスとビット線を識別するアドレスとで識別することが可能である。
【0018】
データバッファ12は、メモリコントローラ10がホスト30から受信したユーザデータを不揮発性メモリ20へ記憶するまでに一時記憶する。また、データバッファ12は、不揮発性メモリ20から読み出したユーザデータをホスト30へ送信するまでに一時記憶する。データバッファ12には、例えば、SRAM(Static Random Access Memory)やDRAM(Dynamic Random Access Memory)などの汎用メモリを用いることができる。なお、データバッファ12は、メモリコントローラ10に内蔵されずに、メモリコントローラ10の外部に搭載されてもよい。
【0019】
ホスト30から送信されるユーザデータは、内部バス16に転送されてデータバッファ12に一旦記憶される。符号化/復号部14は、不揮発性メモリ20に記憶されるユーザデータを符号化して符号語を生成する。また、符号化/復号部14は、不揮発性メモリ20から読み出された受信語を復号してユーザデータを復元する。そこで符号化/復号部14は、符号化部(Encoder)17と復号部(Decoder)18を備える。なお、符号化/復号部14により符号化されるデータには、ユーザデータ以外にも、メモリコントローラ10内部で用いる制御データ等が含まれてもよい。
【0020】
次に、本実施形態の書込み処理について説明する。制御部11は、不揮発性メモリ20への書込み時に、ユーザデータの符号化を符号化部17に指示する。その際、制御部11は、不揮発性メモリ20における符号語の記憶場所(記憶アドレス)を決定し、決定した記憶場所もメモリI/F13へ指示する。
【0021】
符号化部17は、制御部11からの指示に基づいて、データバッファ12上のユーザデータを符号化して符号語を生成する。符号化方式としては、例えば、BCH(Bose-Chaudhuri-Hocquenghem)符号、および、RS(Reed-Solomon)符号のような代数的符号を用いた符号化方式、並びに、これらの符号を行方向および列方向の成分符号として用いた符号化方式(積符号など)を採用することができる。メモリI/F13は、制御部11から指示された不揮発性メモリ20上の記憶場所へ符号語を記憶する制御を行う。以下では、3ビット以下の誤りを訂正するBCH符号を用いる場合を例に説明する。
【0022】
次に、本実施形態の不揮発性メモリ20からの読出し時の処理について説明する。制御部11は、不揮発性メモリ20からの読出し時に、不揮発性メモリ20上のアドレスを指定してメモリI/F13へ読み出しを指示する。また、制御部11は、復号部18へ復号の開始を指示する。メモリI/F13は、制御部11の指示に従って、不揮発性メモリ20の指定されたアドレスから受信語を読み出し、読み出した受信語を復号部18に入力する。復号部18は、この不揮発性メモリ20から読み出された受信語を復号する。
【0023】
復号部18は、不揮発性メモリ20から読み出された受信語を復号する。復号部18は、誤りのビット数(以下、誤り数)が2または3である場合の誤り位置多項式の根の計算を、より簡易な構成により実現する。
【0024】
図2は、本実施形態に係る復号部18の構成例を示すブロック図である。
図2は、復号部18をハードウエア回路で実現する場合の例である。
図2に示すように、復号部18は、シンドローム計算回路201と、演算回路202~205と、根計算回路100と、根計算回路210と、選択回路220、230と、誤り位置計算回路240と、ビットフリップ回路250と、を備えている。
【0025】
シンドローム計算回路201は、受信語r(x)を入力し、シンドロームを計算して出力する。例えばシンドローム計算回路201は、受信語をr(x):=c(x)+e(x)としたときに、si:=r(αi)により、シンドロームsiを計算する。c(x)は符号語、e(x)は誤りを表す。αは、GF(2m)の原始2m-1乗根を表す。3ビット以下の誤りを訂正するBCH符号を用いる場合は、シンドローム計算回路201は、受信語r(x)を入力し、シンドロームs1,s3,s5を出力する。シンドロームs1,s3,s5は、それぞれ、ガロア体GFの原始元αの1乗、3乗、および、5乗に対応するシンドロームに相当する。
【0026】
演算回路202~205は、それぞれ、以下の演算を実行する。
・演算回路202:シンドロームs1の3乗(冪演算の一例)を出力する。
・演算回路203:シンドロームs1の5乗(冪演算の一例)を出力する。
・演算回路204:演算回路202の出力値と、シンドロームs3と、を加算し、加算結果であるβを出力する。
・演算回路205:演算回路203の出力値と、シンドロームs5と、を加算し、加算結果であるγを出力する。
【0027】
なお、βおよびγは、シンドロームに基づいて計算される値(第1値、第2値)の一例である。以下に説明するように、第1実施形態では、βおよびγのうち一方であるγを計算値として用いて、誤り位置多項式の変数に対する変数変換が実行されるとともに、βおよびγの両方を用いて、誤り位置多項式を変換した変換多項式の根が計算される。なお、第2実施形態では、βおよびγのうち他方であるβを計算値として用いて変数変換を実行する例を説明する。
【0028】
根計算回路100は、誤り数が2または3のときに用いられる2次または3次の誤り位置多項式の根を計算する。例えば根計算回路100は、βおよびγを入力し、誤り位置多項式の根x1,x2,x3を出力する。根計算回路100の詳細は後述する。
【0029】
根計算回路210は、誤り数が0または1のときに用いられる0次または1次の誤り位置多項式の根を計算する。例えば根計算回路210は、シンドロームs1を入力し、誤り位置多項式の根として、シンドロームs1を出力する。
【0030】
なお、誤り数は、シンドロームの値を用いて以下のように推定することができる。誤り数と、シンドロームの値とは、以下のような関係を有する。
・誤り数が0または1のとき、s1
3=s3
・誤り数が0または1のとき、s1
5=s5
・誤り数が2または3のとき、s1
3≠s3
【0031】
この関係は、以下のように言い換えることができる。
・誤り数が0または1のとき、s1
3=s3かつs1
5=s5
・誤り数が2または3のとき、s1
3≠s3
【0032】
従って、(s1
3≠s3またはs1
5≠s5)かつ(s1
3=s3)のとき(すなわち、s1
3=s3かつs1
5≠s5のとき)、誤り数は4以上となる。また、誤り数が3以下と仮定すれば、(s1
3=s3)のとき、誤り数は0または1となる。
【0033】
ここで、β:=s1
3+s3、γ:=s1
5+s5とすると、β=0はs1
3=s3と等価であり、γ=0はs1
5=s5と等価である。従って、βおよびγを使うと、誤り数に関して次の関係が得られる。
・(β≠0またはγ≠0)かつ(β=0)のとき(すなわち、β=0かつγ≠0のとき)、誤り数は4以上
・誤り数が3以下と仮定すれば、(β=0)のとき、誤り数は0または1
【0034】
選択回路220は、誤り数に応じて、根計算回路100により出力された根、および、根計算回路210により出力された根のいずれかを選択して出力する。上記のように、例えばβ=0は、誤り数が0または1であることを意味する。このため、選択回路220は、β=0である場合に、根計算回路210により出力された根を選択して出力する。
【0035】
選択回路230は、誤り数に応じて、入力された根、および、訂正失敗を示す情報のいずれかを選択して出力する。上記のように、例えばβ=0かつγ≠0は、誤り数が4以上であることを意味する。このため、選択回路230は、β=0かつγ≠0である場合に、訂正失敗を示す情報を出力する。
【0036】
誤り位置計算回路240は、誤り位置多項式の根を入力し、誤り位置を出力する。例えば根計算回路100により出力された根x1,x2,x3が入力された場合、誤り位置計算回路240は、誤り位置i1,i2,i3を出力する。根計算回路210により出力された根であるシンドロームs1が入力された場合、誤り位置計算回路240は、誤り位置i1を出力する。
【0037】
ビットフリップ回路250は、受信語r(x)と、誤り位置計算回路240により出力された誤り位置と、を入力し、誤り位置のビットを反転した受信語を出力する。
【0038】
次に、根計算回路100の詳細について説明する。まず、誤り位置多項式について説明する。
【0039】
l次(lは0以上の整数)誤り位置多項式は、以下の(1)式により表される。例えば、l=0~3のときの誤り位置多項式、すなわち、0次~3次誤り位置多項式は、以下の(2)式~(5)式により表される。
【数1】
【数2】
【数3】
【数4】
【数5】
【0040】
0次および1次の誤り位置多項式は、以下に説明するように、まとめて根を求めることができる。以下では、0次および1次の誤り位置多項式の根をまとめて求める処理を0,1次誤り位置多項式の根計算という。同様に、2次および3次の誤り位置多項式は、まとめて根を求めることができる。以下では、2次および3次の誤り位置多項式の根をまとめて求める処理を2,3次誤り位置多項式の根計算という。
【0041】
まず、0,1次誤り位置多項式の根計算について説明する。誤り数が0のとき、s1
3=s3、s1=0、誤り数が1のとき、s1
5=s5、s1≠0である。従って、“σ(x)=x+s1として、σ(x)の根から0を除く”ことにより、0,1次誤り位置多項式の根計算を実行できる。これは以下のことから導出される。
・誤り数が0のとき、σ(x)の根はs1であり、またs1=0より、s1が除かれ、解なし
・誤り数が1のとき、σ(x)の根はs1であり、またs1≠0より、s1は除かれない
【0042】
次に、2,3次誤り位置多項式の根計算について説明する。誤り数が2のとき、s
1
3≠s
3、s
1
6+s
1s
5=s
1
3s
3+s
3
2、誤り数が3のとき、s
1
3≠s
3、s
1
6+s
1s
5≠s
1
3s
3+s
3
2である。従って、σ(x)が以下の(6)式で表されるものとして、“σ(x)の根から0を除く”ことにより、2,3次誤り位置多項式の根計算を実行できる。
【数6】
【0043】
これは以下のことから導出される。
・誤り数が2のとき、以下の(7)式より、σ(x)の根は、2次誤り位置多項式の根、および、0となる。ここで、(s
1
3+s
3)/s
1≠0より、2次誤り位置多項式の根は0を含まない。つまり、2次誤り位置多項式の根が除かれることはない。従って、σ(x)の根から0を除くことにより、2次誤り位置多項式の根が求められる。
・誤り数が3のとき、σ(x)の根は、3次誤り位置多項式の根となる。ここで、以下の(8)式より、3次誤り位置多項式の根は0を含まない。つまり、3次誤り位置多項式の根が除かれることはない。従って、σ(x)の根から0を除くことにより、3次誤り位置多項式の根が求められる。
【数7】
【数8】
【0044】
次に、(6)式で表されるσ(x)の根計算の手順について説明する。x=y+s
1で表される変数変換により変数xと変数yとが変換されるとすると、σ(x)は以下の(9)式により表される。
【数9】
【0045】
なお、(9)式は、x=y+s1の変数変換に応じて誤り位置多項式を変換した多項式に相当する。以下では、このように変数変換に応じて誤り位置多項式を変換した多項式を変換多項式という場合がある。
【0046】
ここで、β:=s
1
3+s
3、γ:=s
1
5+s
5とすると、σ(x)は以下の(10)式により表される。以下、(C1)γ=0のとき、および、(C2)γ≠0のときに分けて説明する。
【数10】
【0047】
(C1)γ=0のとき
以下の(11)式より、βをキー情報としてβの3乗根を返す対応情報(LUT:ルックアップテーブルなど)を用いることで、根y
1,y
2,y
3が求められる。LUTは、キー情報が取りうる複数の値と、変換多項式の根と、を対応づけた対応情報の一例であり、その他のどのような形式の対応情報が用いられてもよい。
【数11】
(C2)γ≠0のとき
以下の(12)式で表される変数変換により変数yと変数zとが変換されるとすると、以下の(13)式より、以下の(14)式で表される値をキー情報として、以下の(15)式で表される多項式の根を返すLUTを用いることで、根z
1,z
2,z
3が求められる。
【数12】
【数13】
【数14】
【数15】
【0048】
また、得られた根z1,z2,z3それぞれに対し、5√(γ)を乗じることにより、σ(x)の根y1,y2,y3が求められる。なお“n√()”は、括弧内の値のn乗根を表す。例えば、5√(γ)は、γの5乗根を表す。n=2の場合は単に“√()”と記載する場合がある。さらに、得られた根y1,y2,y3それぞれに対し、s1を加えることにより、σ(x)の根x1,x2,x3が求められる。
【0049】
なお、βの3乗根y2,y3は、βの3乗根y1を用いて、y2=y1ω、y3=y1ω2により求められてもよい。ただしωは1の3乗根である。
【0050】
また、σ(x)の根x3は、σ(x)の根x1、x2を用いて、x3=x1+x2+s1により求められてもよい。この場合、根y1、y2のみ、および、根z1、z2のみが求められればよい。
【0051】
(12)式に示すように、第1実施形態では、βおよびγのうち一方であるγのみを計算値として用いて変数変換が実行される。変数変換は、LUTのキー情報の個数を減らすために用いられると解釈することができる。例えば、(12)式の変数変換を用いることにより、(14)式で表される1つのキー情報を用いて、LUTにより根z1,z2,z3を求めることができる。
【0052】
1つのキー情報を用いるようにするための変数変換としては、(12)式以外の変数変換も考えられる。以下、(12)式以外の変数変換を用いる比較例について説明する。
【0053】
比較例では、以下の(16)式で表される変数変換により変数yと変数zとが変換され、以下の(17)式より、√(β
5/γ
3)を1つのキー情報として、以下の(18)式で表される多項式の根を返すLUTを用いることで、根z
1,z
2,z
3が求められる。
【数16】
【数17】
【数18】
【0054】
また、得られた根z1,z2,z3それぞれに対し、√(γ/β)を乗じることにより、σ(x)の根y1,y2,y3が求められる。さらに、得られた根y1,y2,y3それぞれに対し、s1を加えることにより、σ(x)の根x1,x2,x3が求められる。
【0055】
比較例では、以下の2つの逆元の計算が必要となる。
・キー情報√(β5/γ3)を計算するときに用いる1/γ
・根y1,y2,y3を求めるときに根z1,z2,z3に乗じられる√(γ/β)を計算するときに用いる1/β
【0056】
これに対して本実施形態では、(14)式で表されるキー情報の計算のために、γの(-3/5)乗の計算が必要となる(詳細は後述)。
【0057】
言い換えると、本実施形態では、2つの逆元の計算の代わりに(-3/5)乗の計算のみが必要となる。(-3/5)乗の計算は、逆元と同程度の回路規模を要する場合があるが、少なくとも本実施形態では、逆元計算に相当する計算を2回から1回に減らすことができる。
【0058】
根計算回路100は、以上のような2,3次誤り位置多項式の根計算を実行するように構成される。
図2の根計算回路100の詳細について説明する。根計算回路100は、根計算回路110、120と、選択回路131と、演算回路132~135と、を備えている。
【0059】
根計算回路110は、上記の(C1)γ=0のときの根の計算を行う。根計算回路110は、LUT111、および、演算回路112を備える。LUT111、および、演算回路112は、それぞれ、以下の演算を実行する。
・LUT111:βの3乗根である根y1を出力する。
・演算回路112:根y1にω(1の3乗根)を乗じ、乗算の結果である根y2を出力する。
【0060】
根計算回路120は、上記の(C2)γ≠0のときの根の計算を行う。根計算回路120は、演算回路121~123、LUT124、演算回路125~127を備える。演算回路121~123、LUT124、演算回路125~127は、それぞれ、以下の演算を実行する。
・演算回路121:γの(-3/5)乗を計算する。
・演算回路122:γの(-3/5)乗とγとを乗じ、乗算の結果であるγ/(5√(γ3))=5√(γ2)を出力する。
・演算回路123:γの(-3/5)乗とβとを乗じ、乗算の結果であるβ/(5√(γ3))を出力する。
・LUT124:β/(5√(γ3))をキー情報として、根z1,z2を出力する。
・演算回路125:5√(γ2)の1/2乗である5√(γ)を計算する。
・演算回路126:根z1と5√(γ)とを乗じ、乗算の結果である根y1を出力する。
・演算回路127:根z2と5√(γ)とを乗じ、乗算の結果である根y2を出力する。
【0061】
選択回路131は、γが0であるか否かに応じて、根計算回路110により計算された根y1、y2、および、根計算回路120により計算された根y1、y2のいずれかを選択して出力する。例えば選択回路131は、γ=0の場合、根計算回路110により計算された根y1、y2を選択し、γ≠0の場合、根計算回路120により計算された根y1、y2を選択する。
【0062】
演算回路132~135は、それぞれ、以下の演算を実行する。
・演算回路132:根y1にシンドロームs1を加算し、加算結果である根x1を出力する。
・演算回路133:根y2にシンドロームs1を加算し、加算結果である根x2を出力する。
・演算回路134:根x1に根x2を加算し、加算結果であるx1+x2を出力する。
・演算回路135:x1+x2にシンドロームs1を加算し、加算結果である根x3を出力する。
【0063】
なお、演算回路132~135による演算は、変換多項式の根y1、y2に対して、変数変換の逆の変換(変数逆変換)を実行し、誤り位置多項式の根x1、x2、x3を求める演算であると解釈することができる。
【0064】
ここで、比較例の回路の構成例について説明する。
図3は、比較例の回路の構成例を示す図である。比較例では、根計算回路120の構成が本実施形態と異なる。このため、
図3では、根計算回路120に対応する、比較例の根計算回路60が主に記載されている。以下、根計算回路60について説明する。
【0065】
根計算回路60は、演算回路61~65、LUT66、演算回路67~71を備える。演算回路61~65、LUT66、演算回路67~71は、それぞれ、以下の演算を実行する。
・演算回路61:γの逆元1/γを計算する(逆元計算回路)。
・演算回路62:逆元1/γの3乗である1/γ3を計算する。
・演算回路63:βの5乗であるβ5を計算する。
・演算回路64:1/γ3とβ5とを乗じ、乗算の結果であるβ5/γ3を出力する。
・演算回路65:β5/γ3の2乗根√(β5/γ3)を計算する。
・LUT66:√(β5/γ3)をキー情報として、根z1,z2を出力する。
・演算回路67:βの逆元1/βを計算する(逆元計算回路)。
・演算回路68:逆元1/βとγとを乗じ、乗算の結果であるγ/βを出力する。
・演算回路69:γ/βの2乗根√(γ/β)を計算する。
・演算回路70:根z1と√(γ/β)とを乗じ、乗算の結果である根y1を出力する。
・演算回路71:根z2と√(γ/β)とを乗じ、乗算の結果である根y2を出力する。
【0066】
このように、比較例では、逆元計算回路として2つの演算回路61、67が必要となる。これに対して本実施形態では、逆元計算回路と同程度の規模の計算回路として、(-3/5)乗を計算する演算回路121が1つ備えられればよい。逆元計算回路は他の演算回路と比較して回路規模が大きくなる場合がある。このような場合であっても、本実施形態によれば、回路規模の大きい回路の個数を減らすことができるため、復号部18の回路規模をより効率的に削減することが可能となる。
【0067】
復号部18がCPUおよびファームウエアにより実現される場合、ファームウエアは、2,3次誤り位置多項式の根計算のために、逆元計算と同程度の計算として1つの(-3/5)乗の計算を実行するように構成できる。すなわち、誤り訂正(復号)を実行するためのファームウエアを、より簡易な構成とすることができる。
【0068】
また、本実施形態では、βおよびγのうち一方であるγのみ変数変換に用いることにより、βおよびγのうち他方であるβに対して必要となる計算は、演算回路123による乗算1回のみとなる。従って、例えば、βに対して5乗(演算回路63)および乗算(演算回路64)が必要となる比較例より簡易な構成とすることができる。
【0069】
なお、本実施形態は、5乗根の存在が保証されるGF(2m)(mは4で割り切れない値)、すなわち、mが4で割り切れない場合に適用できる。
【0070】
次に、メモリシステム1による復号処理の流れについて説明する。
図4は、本実施形態における復号処理の一例を示すフローチャートである。
【0071】
制御部11は、不揮発性メモリ20から、誤り訂正符号を読み出し、受信語を得る(ステップS101)。また、制御部11は、復号部18へ復号の開始を指示する。
【0072】
復号部18のシンドローム計算回路201は、受信語からシンドロームを計算する(ステップS102)。
【0073】
次に、復号部18は、誤り数を推定する(ステップS103)。復号部18は、誤り数が3以下であるか否かを判定する(ステップS104)。誤り数が3より大きい場合(ステップS104:No)、復号部18は、復号失敗を通知し(ステップS110)、復号処理を終了する。
【0074】
誤り数が3以下である場合(ステップS104:Yes)、復号部18は、さらに誤り数が1以下であるか否かを判定する(ステップS105)。誤り数が1以下の場合(ステップS105:Yes)、復号部18は、0,1次誤り位置多項式の根計算を実行する(ステップS106)。誤り数が1以下でない場合(ステップS105:No)、復号部18は、2,3次誤り位置多項式の根計算を実行する(ステップS107)。
【0075】
2,3次誤り位置多項式の根計算を実行した場合、復号部18は、2,3次誤り位置多項式の根計算により根が得られたか否かを判定する(ステップS108)。
【0076】
2,3次誤り位置多項式については、β/(5√(γ3))の値に対して根が存在しない場合がある。このような場合、例えば、この値に相当するLUTのキー情報に対して、根が存在しないことを示す情報を対応づけるようにLUTが構成される。復号部18は、根が存在しないことを示す情報がLUTから得られた場合に、根が得られないと判定する。なお、0,1次誤り位置多項式については、シンドロームs1が根として必ず得られる。
【0077】
根が得られなかった場合(ステップS108:No)、復号部18は、復号失敗を通知し(ステップS110)、復号処理を終了する。
【0078】
根が得られた場合(ステップS108:Yes)、および、0,1次誤り位置多項式の根計算の後、復号部18は、根に対応する誤り位置の誤りを訂正し(ステップS109)、復号処理を終了する。
【0079】
なお復号部18は、例えばステップS102でシンドロームを計算した後に、すべてのシンドロームの値が0であるか否かを判定し、すべてのシンドロームが0である場合、復号処理を終了してもよい。すべてのシンドロームが0である場合、受信語に誤りがないと判断できるためである。
【0080】
これまでは、3ビット以下の誤りを訂正するBCH符号を用いる場合を例に説明したが、同様の手順は、n(nは3以上の整数)ビット以下の誤りを訂正するBCH符号を用いる構成にも適用できる。例えば5ビット以下の誤りを訂正するBCH符号を用いる場合、誤り数が0から3までの場合の復号に、上記の手順を適用できる。誤り数が4または5の場合の復号は、どのような手順が用いられてもよい。
【0081】
(第2実施形態)
第2実施形態では、βおよびγのうちβのみを計算値として用いた変数変換を実行する。第2実施形態のメモリシステムの全体構成は
図1と同様であるが、復号部の構成が第1実施形態と異なる。以下では、第2実施形態の復号部18-2の機能の詳細について説明する。
【0082】
図5は、第2実施形態に係る復号部18-2の構成例を示すブロック図である。
図5は、復号部18-2をハードウエア回路で実現する場合の例である。
図5に示すように、復号部18-2は、シンドローム計算回路201と、演算回路202~205と、根計算回路100-2と、根計算回路210と、選択回路220、230と、誤り位置計算回路240と、ビットフリップ回路250と、を備えている。
【0083】
第2実施形態では、根計算回路100-2が、根計算回路110と選択回路131とを備えないこと、および、根計算回路120-2の機能が、第1実施形態と異なっている。その他の構成は第1実施形態の根計算回路100と同様であるため、同一の符号を付し説明を省略する。
【0084】
なお、第2実施形態では、第1実施形態での(C1)および(C2)のような場合分けは不要となる。その結果、根計算回路110に相当する回路、および、当該回路の出力を切り分けるための選択回路131に相当する回路が不要となる。
【0085】
以下、場合分けが不要となる理由について説明する。第1実施形態の条件(C1)は、0による除算が生じないようにするために、γ=0の場合の計算(根計算回路110)を、γ≠0の場合の計算(根計算回路120)と分ける条件と解釈することができる。
【0086】
一方、第2実施形態で変数変換に用いるβは、上記のように、誤り数が0または1のときにはβ=0となる。すなわち、誤り数が2または3のときにはβ≠0となる。従って、誤り数が2または3のときに用いられる2次または3次の誤り位置多項式の根を計算する根計算回路100-2は、β≠0が満たされること、言い換えると、0(=β)による除算が生じないことを前提として構成することができる。すなわち、第2実施形態では、第1実施形態の(C1)および(C2)のような場合分けは不要となる。
【0087】
以下、第2実施形態での2,3次誤り位置多項式σ(x)の根計算について説明する。σ(x)は、第1実施形態と同様に(10)式により表される。第2実施形態では、以下の(19)式で表される変数変換により変数yと変数zとが変換されるとすると、以下の(20)式より、以下の(21)式で表される値をキー情報として、以下の(22)式で表される多項式の根を返すLUTを用いることで、根z
1,z
2,z
3が求められる。
【数19】
【数20】
【数21】
【数22】
【0088】
また、得られた根z1,z2,z3それぞれに対し、3√(β)を乗じることにより、σ(x)の根y1,y2,y3が求められる。さらに、得られた根y1,y2,y3それぞれに対し、s1を加えることにより、σ(x)の根x1,x2,x3が求められる。
【0089】
根計算回路100-2は、以上のような2,3次誤り位置多項式の根計算を実行するように構成される。
図5の根計算回路100-2の詳細について説明する。根計算回路100-2は、根計算回路120-2と、演算回路132~135と、を備えている。演算回路132~135の構成は第1実施形態(
図2)と同様であるため、同一の符号を付し説明を省略する。
【0090】
根計算回路120-2は、演算回路121-2~123-2、LUT124-2、演算回路125-2~127-2を備える。演算回路121-2~123-2、LUT124-2、演算回路125-2~127-2は、それぞれ、以下の演算を実行する。
・演算回路121-2:βの(-5/3)乗を計算する。
・演算回路122-2:βの2乗を計算する。
・演算回路123-2:βの(-5/3)乗とγとを乗じ、乗算の結果であるγ/(3√(β5))を出力する。
・LUT124-2:γ/(3√(β5))をキー情報として、根z1,z2を出力する。
・演算回路125-2:βの2乗(β2)とβの(-5/3)乗とを乗じ、乗算の結果であるβ2/(3√(β5))=3√(β)を出力する。
・演算回路126-2:根z1と3√(β)とを乗じ、乗算の結果である根y1を出力する。
・演算回路127-2:根z2と3√(β)とを乗じ、乗算の結果である根y2を出力する。
【0091】
本実施形態では、逆元計算回路と同程度の規模の計算回路として、(-5/3)乗を計算する演算回路121-2が1つ備えられればよい。また、本実施形態では、βおよびγのうち一方であるβのみ変数変換に用いることにより、βおよびγのうち他方であるγに対して必要となる計算は、演算回路123-2による乗算1回のみとなる。従って、2または3である場合の誤り位置多項式の根の計算を、より簡易な構成により実現することができる。
【0092】
なお、本実施形態は、3乗根の存在が保証されるGF(2m)(mは2で割り切れない値)、すなわち、mが2で割り切れない場合(mが奇数の場合)に適用できる。
【0093】
第2実施形態の復号処理の流れは第1実施形態の一例を示す
図4のフローチャートと同様であるため説明を省略する。
【0094】
以上説明したとおり、第1および第2実施形態によれば、より簡易な構成により誤り訂正(復号)を実行することができる。
【0095】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0096】
1 メモリシステム
10 メモリコントローラ
11 制御部
12 データバッファ
13 メモリI/F
14 符号化/復号部
15 ホストI/F
16 内部バス
17 符号化部
18、18-2 復号部
20 不揮発性メモリ
30 ホスト
100、100-2、210 根計算回路
201 シンドローム計算回路
220、230 選択回路
240 誤り位置計算回路
250 ビットフリップ回路