(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024080211
(43)【公開日】2024-06-13
(54)【発明の名称】演算回路、メモリシステムおよび制御方法
(51)【国際特許分類】
H03M 13/15 20060101AFI20240606BHJP
G06F 11/10 20060101ALI20240606BHJP
【FI】
H03M13/15
G06F11/10 648
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2022193213
(22)【出願日】2022-12-02
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】國分 直明
(72)【発明者】
【氏名】近藤 裕樹
【テーマコード(参考)】
5J065
【Fターム(参考)】
5J065AC03
5J065AD11
5J065AE02
5J065AF03
5J065AG01
5J065AG02
5J065AG04
5J065AH01
5J065AH03
5J065AH06
(57)【要約】
【課題】ガロア体の乗算を行うための回路規模の増加を抑制する。
【解決手段】演算回路は、ガロア体の元aおよび元bのAND演算の結果であるAND値を計算する。演算回路は、複数の相互に異なる(u,v)の組それぞれについて、AND値と、組ごとに異なる複数のテンソルをまとめた連結テンソルとに基づくXOR演算により、aの2
u乗とbの2
v乗との積であるa^(2
u)×b^(2
v)を計算する。
【選択図】
図2
【特許請求の範囲】
【請求項1】
ガロア体の元aおよび元bのAND演算の結果であるAND値を計算し、
複数の相互に異なる(u,v)の組それぞれについて、前記AND値と、前記組ごとに異なる複数のテンソルをまとめた連結テンソルとに基づくXOR演算により、aの2u乗とbの2v乗との積であるa^(2u)×b^(2v)を計算する、
演算回路。
【請求項2】
前記ガロア体は、要素数が2m(mは2以上の整数)であり、
前記ガロア体の元は、値が0または1であるm個の成分を含むm次元ベクトルにより表され、
前記m次元ベクトルの第i成分(iは0≦i≦m-1を満たす整数)に対する複数の前記テンソルそれぞれは、前記第i成分に対して定められるテンソルTiと、2u乗を表す線形演算Suと、2v乗を表す線形演算Svと、を含む以下の(1)式により表される、
(Sv)T×Ti×Su・・・(1)
請求項1に記載の演算回路。
【請求項3】
前記連結テンソルは、
前記m次元ベクトルのm個の成分に対応してm個定められ、
前記m次元ベクトルの前記第i成分に対応する前記連結テンソルは、前記(1)式により表される複数の前記テンソルをまとめたテンソルである、
請求項2に記載の演算回路。
【請求項4】
前記AND値は、前記元aのm個の成分と、前記元bのm個の成分と、のAND演算の結果であるm×m個の演算成分を含み、
複数の前記テンソルのそれぞれは、前記演算成分それぞれをXOR演算に用いるか否かを表すm×m個のテンソル成分を含み、
前記テンソル成分によりXOR演算に用いることが表された前記演算成分を用いてXOR演算を行い、a^(2u)×b^(2v)を計算する、
請求項2に記載の演算回路。
【請求項5】
前記連結テンソルは、
複数の前記テンソルのうち、j番目(jは0≦j≦J-1、Jは複数の前記テンソルの総数)の前記テンソルを1次元化したベクトルを第j行の行ベクトルとするテンソルである、
請求項1に記載の演算回路。
【請求項6】
前記連結テンソルは、
複数の前記テンソルのうち、j番目(jは0≦j≦J-1、Jは複数の前記テンソルの総数)の前記テンソルを1次元化したベクトルを第j行の行ベクトルとする変形前テンソルの2つ以上の行ベクトルのうち、2つ以上の対象列の値が1で共通する行ベクトルの前記対象列の値を0に変更し、前記変形前テンソルに前記対象列の値を1とした行ベクトルを追加したテンソルである、
請求項1に記載の演算回路。
【請求項7】
前記元aおよび前記元bは、同じ元cであり、
前記元cおよび前記元cのAND演算により前記AND値を計算し、
複数の相互に異なる(u,v)の組それぞれについて、前記AND値と前記連結テンソルとに基づくXOR演算により、cの2u乗とcの2v乗との積であるc^(2u)×c^(2v)を計算する、
請求項1に記載の演算回路。
【請求項8】
複数の前記テンソルは、ガロア体の原始多項式に対応するコンパニオン行列に基づいて決定される、
請求項1に記載の演算回路。
【請求項9】
誤り訂正符号で符号化されたデータを記憶する不揮発性メモリと、
請求項1に記載の演算回路を備えるメモリコントローラと、を備え、
前記メモリコントローラは、
前記不揮発性メモリから読み出された受信語を用いて、ガロア体の元である複数のシンドロームを計算し、
複数の前記シンドロームに含まれる第1シンドロームを元aとし、複数の前記シンドロームに含まれる第2シンドロームを元bとして、前記演算回路を用いてaの2u乗とbの2v乗との積であるa^(2u)×b^(2v)を計算し、
計算された積a^(2u)×b^(2v)を係数に含む誤り位置多項式を用いて、誤り位置を計算し、
計算された前記誤り位置の誤りを訂正する、
メモリシステム。
【請求項10】
不揮発性メモリを制御する制御方法であって、
誤り訂正符号で符号化されたデータを前記不揮発性メモリへ記憶し、
前記不揮発性メモリから前記データを受信語として読み出し、
前記不揮発性メモリから読み出された受信語を用いて、ガロア体の元である複数のシンドロームを計算し、
複数の前記シンドロームに含まれる第1シンドロームを元aとし、複数の前記シンドロームに含まれる第2シンドロームを元bとして、前記元aおよび前記元bのAND演算の結果であるAND値を計算し、
複数の相互に異なる(u,v)の組それぞれについて、前記AND値と、前記組ごとに異なる複数のテンソルをまとめた連結テンソルとに基づくXOR演算により、aの2u乗とbの2v乗との積であるa^(2u)×b^(2v)を計算し、
計算された積a^(2u)×b^(2v)を係数に含む誤り位置多項式を用いて、誤り位置を計算し、
誤り位置多項式を用いて、誤り位置を計算し、
計算された誤り位置の誤りを訂正する、
ことを含む制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、演算回路、メモリシステムおよび制御方法に関する。
【背景技術】
【0002】
メモリシステムでは、NAND型フラッシュメモリ等のメモリに記憶するデータを保護するために、誤り訂正符号化されたデータがメモリに記憶される。このため、メモリに記憶されたデータを読み出す際には、メモリから読み出された誤り訂正符号化されたデータ(受信語とも称される。)を復号して誤り訂正符号化される前のデータを復元する。
【0003】
誤り訂正符号に関する技術では、ガロア体(有限体)の乗算が行われる場合がある。例えば、誤り訂正符号の例であるBCH(Bose-Chaudhuri-Hocquenghem)符号の復号では、メモリから読み出された受信語(読み出し系列)からシンドロームが計算され、シンドロームから誤り位置多項式の係数が計算される。シンドロームはガロア体の要素である。このため、誤り位置多項式の係数を計算するときに、シンドロームの乗算、すなわち、ガロア体の乗算が行われる場合がある。誤り訂正可能なビット数(tビット、tは2以上の整数)が増加するに従い、必要なガロア体の乗算の個数が増加する。すなわち、乗算に用いられる演算回路(乗算器)の規模が増加する。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】米国特許第10,097,207号明細書
【発明の概要】
【発明が解決しようとする課題】
【0005】
本発明の実施形態は、ガロア体の乗算を行うための回路規模の増加を抑制することができる演算回路を提供することを目的とする。
【課題を解決するための手段】
【0006】
実施形態の演算回路は、ガロア体の元aおよび元bのAND演算の結果であるAND値を計算する。演算回路は、複数の相互に異なる(u,v)の組それぞれについて、AND値と、組ごとに異なる複数のテンソルをまとめた連結テンソルとに基づくXOR演算により、aの2u乗とbの2v乗との積であるa^(2u)×b^(2v)を計算する。
【図面の簡単な説明】
【0007】
【
図1】実施形態に係るメモリシステムのブロック図。
【
図3】シンドロームおよび誤り位置多項式の計算手順の概要を示す図。
【
図4】シンドロームと誤り位置多項式との関係の例を示す図。
【
図5】ガロア体GF(2
4)の元のベクトル表現の例を示す図。
【
図11】乗算を書き換える手順を説明するための図。
【
図12】連結テンソルの求め方の例を説明するための図。
【
図19】
図18の演算部によるXOR演算に対応する連結テンソルの例を示す図。
【発明を実施するための形態】
【0008】
以下に添付図面を参照して、この発明にかかる演算回路の好適な実施形態を詳細に説明する。以下では、誤り訂正符号の復号時にガロア体の乗算を行う演算回路を含むメモリシステムを例に説明する。演算回路を用いる構成はこの例に限られず、どのようなシステム(装置、機器)であってもよい。例えば、誤り位置を計算するときにガロア体の乗算を行うメモリシステム、および、暗号処理時にガロア体の乗算を行うシステムなどに対しても、以下に説明する演算回路を適用することができる。
【0009】
まず、本実施形態に係るメモリシステムについて、図面を参照して詳細に説明する。
図1は、本実施形態に係るメモリシステムの概略構成例を示すブロック図である。
図1に示すように、メモリシステム1は、メモリコントローラ10と不揮発性メモリ20とを備える。メモリシステム1は、ホスト30と接続可能であり、
図1ではホスト30と接続された状態が示されている。ホスト30は、例えば、パーソナルコンピュータ、携帯端末などの電子機器であってよい。
【0010】
不揮発性メモリ20は、データを不揮発に記憶する不揮発性メモリであり、例えば、NAND型フラッシュメモリ(以下、単にNANDメモリという)である。以下の説明では、不揮発性メモリ20としてNANDメモリが用いられた場合を例示するが、不揮発性メモリ20として3次元構造フラッシュメモリ、ReRAM(Resistive Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)等のNANDメモリ以外の記憶装置を用いることも可能である。また、不揮発性メモリ20が半導体メモリであることは必須ではなく、半導体メモリ以外の種々の記憶媒体に対して本実施形態を適用することも可能である。
【0011】
メモリシステム1は、いわゆるSSD(Solid State Drive)や、メモリコントローラ10と不揮発性メモリ20とが1つのパッケージとして構成されるメモリカード等、不揮発性メモリ20を備える種々のメモリシステムであってよい。
【0012】
メモリコントローラ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)がファームウエアを実行することによって実現されてもよいし、ハードウエアで実現されてもよい。
【0013】
ホストI/F15は、ホスト30との間のインタフェース規格に従った処理を実施し、ホスト30から受信した命令、書込み対象のユーザデータなどを内部バス16に出力する。また、ホストI/F15は、不揮発性メモリ20から読み出されて復元されたユーザデータ、制御部11からの応答などをホスト30へ送信する。
【0014】
メモリI/F13は、制御部11の指示に基づいて、不揮発性メモリ20への書込み処理を行う。また、メモリI/F13は、制御部11の指示に基づいて、不揮発性メモリ20からの読み出し処理を行う。
【0015】
制御部11は、メモリシステム1の各構成要素を統括的に制御する。制御部11は、ホスト30からホストI/F15経由で命令を受けた場合に、その命令に従った制御を行う。例えば、制御部11は、ホスト30からの命令に従って、不揮発性メモリ20へのユーザデータおよびパリティの書き込みをメモリI/F13へ指示する。また、制御部11は、ホスト30からの命令に従って、不揮発性メモリ20からのユーザデータおよびパリティの読み出しをメモリI/F13へ指示する。
【0016】
また、制御部11は、ホスト30から書込み要求を受信した場合、データバッファ12に蓄積されるユーザデータに対して、不揮発性メモリ20上の記憶領域(メモリ領域)を決定する。すなわち、制御部11は、ユーザデータの書込み先を管理する。ホスト30から受信したユーザデータの論理アドレスと該ユーザデータが記憶された不揮発性メモリ20上の記憶領域を示す物理アドレスとの対応はアドレス変換テーブルとして記憶される。
【0017】
また、制御部11は、ホスト30から読出し要求を受信した場合、読出し要求により指定された論理アドレスを上述のアドレス変換テーブルを用いて物理アドレスに変換し、該物理アドレスからの読み出しをメモリI/F13へ指示する。
【0018】
NANDメモリでは、一般に、ページと呼ばれるデータ単位で、書き込みおよび読み出しが行われ、ブロックと呼ばれるデータ単位で消去が行われる。本実施形態では、この同一のワード線に接続される複数のメモリセルをメモリセルグループと呼ぶ。メモリセルがシングルレベルセル(SLC:Single Level Cell)である場合は、1つのメモリセルグループが1ページに対応する。メモリセルがマルチレベルセル(MLC:Multiple Level Cell)である場合は、1つのメモリセルグループが複数ページに対応する。なお、本説明において、MLCには、TLC(Triple Level Cell)やQLC(Quad Level Cell)等が含まれる。また、各メモリセルはワード線に接続するとともにビット線にも接続される。従って、各メモリセルは、ワード線を識別するアドレスとビット線を識別するアドレスとで識別することが可能である。
【0019】
データバッファ12は、メモリコントローラ10がホスト30から受信したユーザデータを不揮発性メモリ20へ記憶するまでに一時記憶する。また、データバッファ12は、不揮発性メモリ20から読み出したユーザデータをホスト30へ送信するまでに一時記憶する。データバッファ12には、例えば、SRAM(Static Random Access Memory)やDRAM(Dynamic Random Access Memory)などの汎用メモリを用いることができる。なお、データバッファ12は、メモリコントローラ10に内蔵されずに、メモリコントローラ10の外部に搭載されてもよい。
【0020】
ホスト30から送信されるユーザデータは、内部バス16に転送されてデータバッファ12に一旦記憶される。符号化/復号部14は、不揮発性メモリ20に記憶されるユーザデータを符号化して符号語を生成する。また、符号化/復号部14は、不揮発性メモリ20から読み出された受信語を復号してユーザデータを復元する。そこで符号化/復号部14は、符号化部(Encoder)17と復号部(Decoder)18を備える。なお、符号化/復号部14により符号化されるデータには、ユーザデータ以外にも、メモリコントローラ10内部で用いる制御データ等が含まれてもよい。
【0021】
次に、本実施形態の書込み処理について説明する。制御部11は、不揮発性メモリ20への書込み時に、ユーザデータの符号化を符号化部17に指示する。その際、制御部11は、不揮発性メモリ20における符号語の記憶場所(記憶アドレス)を決定し、決定した記憶場所もメモリI/F13へ指示する。
【0022】
符号化部17は、制御部11からの指示に基づいて、データバッファ12上のユーザデータを符号化して符号語を生成する。符号化方式としては、例えば、BCH(Bose-Chaudhuri-Hocquenghem)符号、および、RS(Reed-Solomon)符号のような代数的符号を用いた符号化方式、並びに、これらの符号を行方向および列方向の成分符号として用いた符号化方式(積符号など)を採用することができる。メモリI/F13は、制御部11から指示された不揮発性メモリ20上の記憶場所へ符号語を記憶する制御を行う。以下では、tビット(tは2以上の整数)以下の誤りを訂正するBCH符号を用いる場合を例に説明する。
【0023】
次に、本実施形態の不揮発性メモリ20からの読出し時の処理について説明する。制御部11は、不揮発性メモリ20からの読出し時に、不揮発性メモリ20上のアドレスを指定してメモリI/F13へ読み出しを指示する。また、制御部11は、復号部18へ復号の開始を指示する。メモリI/F13は、制御部11の指示に従って、不揮発性メモリ20の指定されたアドレスから受信語を読み出し、読み出した受信語を復号部18に入力する。復号部18は、この不揮発性メモリ20から読み出された受信語を復号する。
【0024】
復号部18は、不揮発性メモリ20から読み出された受信語を復号する。復号部18は、例えばPGZ(Peterson Gorenstein Zierler)法を用いて誤り位置多項式の計算を実行する。PGZ法は、誤り位置多項式の係数σとシンドロームとの間に成り立つ連立方程式を、行列計算により解く手法である。
【0025】
図2は、本実施形態に係る復号部18の構成例を示すブロック図である。
図2に示すように、復号部18は、シンドローム計算部101と、誤り位置多項式計算部102と、誤り位置計算部103と、ビットフリップ部104と、を備えている。
【0026】
シンドローム計算部101は、不揮発性メモリ20から読み出された受信語(読み出し系列)を用いてシンドロームを計算する。シンドローム計算部101は、従来から用いられているどのような手法によりシンドロームを計算してもよい。すべてのシンドロームの値が0である場合、受信語に誤りがないと判断できるため、復号部18は以降の処理を実行せず、復号処理を終了することができる。
【0027】
誤り位置多項式計算部102は、シンドロームを用いてPGZ法により誤り位置多項式を計算する。誤り位置多項式の係数の一部は、シンドロームの加算および乗算により計算される。
【0028】
図3は、BCH符号の場合でのシンドロームおよび誤り位置多項式の計算手順の概要を示す図である。不揮発性メモリ20からは、符号長nビットの読み出し系列r
0,r
1,r
2,・・・,r
n-1が、受信語として読み出される。シンドローム計算部101は、これらの受信語を入力し、シンドロームS
1,S
3,・・・,S
2t-1を計算する。誤り位置多項式計算部102はシンドロームから、t次の誤り位置多項式の係数σ
0,σ
1,・・・,σ
t-1,σ
tを計算する。
図3に示すように、シンドローム、および、シンドロームを用いて計算される係数σは、ガロア体の元である。
【0029】
図4は、シンドロームと誤り位置多項式との関係の例を示す図である。なお
図4は、4ビット(t=4)以下の誤りを訂正するBCH符号を用いる場合の1次~4次の誤り位置多項式(1次多項式~4次多項式)の例を示す。2次多項式~4次多項式のいずれかに含まれる|M
2|、|M
3|、|M
4|、|M
5|は、それぞれ
図4の下部に示される式により計算される。
【0030】
1次多項式~4次多項式は、それぞれ誤り数が1個~4個の場合の誤り位置を計算するための式である。
図4の例では、1次多項式~4次多項式の各式の係数の計算に必要な乗算器の個数は、
図9や
図10で説明する簡単な計算で実現できる2乗を除くと、例えば、0個、1個、5個、および、21個となる。このように、誤り訂正可能なビット数tが増加するに従い、誤り位置多項式の係数を計算するための乗算器の数が増加する。
【0031】
そこで、本実施形態では、誤り位置多項式の係数の計算に用いられるシンドロームの乗算のうち少なくとも一部を共通に計算できるように最適化した演算回路(
図2の演算部110)が用いられる。これにより、ガロア体の乗算を行うための回路規模の増加を抑制することが可能となる。
【0032】
例えば、
図4では、係数に含まれる乗算301~304は、いずれもシンドロームS
1とS
3との乗算を含む。乗算311~312は、いずれもシンドロームS
1の乗算(S
1の2乗でないべき乗)を含む。乗算321~322は、いずれもシンドロームS
1とS
7との乗算を含む。乗算331~333は、いずれもシンドロームS
1とS
5との乗算を含む。
【0033】
演算部110は、このように共通の乗算を含む複数の乗算を効率的に計算するように構成される。以下では、シンドロームS1とS3との乗算を含む乗算301~304の組を計算するように演算部110を構成する場合を例に説明する。演算部110は、他の乗算の組を計算するように構成されてもよいし、2つ以上の乗算の組を計算するように構成されてもよい。
【0034】
図2に戻り、演算部110(演算回路の一例)についてさらに説明する。
図2に示すように、誤り位置多項式計算部102は、ガロア体の元の乗算を含む、ガロア体の元の演算を行う演算部110を備えている。また、演算部110は、AND計算部111と、XOR計算部112と、を備えている。
【0035】
AND計算部111は、ガロア体の元の乗算を行うためのAND演算を実行する。XOR計算部112は、ガロア体の元の乗算を行うためのXOR演算を実行する。AND計算部111およびXOR計算部112の詳細は後述する。
【0036】
なお、演算部110は、誤り位置多項式の係数の計算のために必要なシンドロームの乗算の少なくとも一部を実行する構成部である。演算部110で実行しないシンドロームの乗算は、例えば、誤り位置多項式計算部102により計算される。この場合、誤り位置多項式計算部102は、従来から用いられているどのような手法により係数(シンドロームの乗算を含む)を計算してもよい。
【0037】
誤り位置計算部103は、誤り位置多項式計算部102により計算された誤り位置多項式を用いて、誤り位置を計算する。誤り位置を計算する処理(探索処理)はどのような手法で実現されてもよいが、例えばチェンサーチを用いることができる。チェンサーチは、誤り位置多項式に順次値を代入し、誤り位置多項式の出力値が0となる値に基づいて誤り位置を探索する手法である。
【0038】
ビットフリップ部104は、探索処理により計算された誤り位置のビットを反転(ビットフリップ)させることにより誤り訂正を実行する。
【0039】
次に、演算部110(AND計算部111、XOR計算部112)の詳細について説明する。演算部110は、例えば以下のような手順を実行する。
(P1)ガロア体の要素数2mを定めるm、および、次数mの原始多項式p(x)を決定する。
(P2)原始多項式p(x)に対応するコンパニオン行列を求める。
(P3)コンパニオン行列を用いて、ガロア体の元の乗算に用いる複数のテンソルを求める。ガロア体の元をm次元ベクトルで表現した時、2つの元を乗算した出力である元もm次元ベクトルで表現される。テンソルは、m次元ベクトルで表現された出力の元の成分ごとに求められる。すなわち、入力が2つのベクトルで、出力が1つの値(ベクトルの1成分)を出力する関数であるテンソルが合計m個求められる。以下では、m次元ベクトルの第i成分(iは0≦i≦m-1を満たす整数)に対して定められるテンソルをTiと表す。テンソルTiは入力するベクトルの数が2つなので2階のテンソルと呼ばれることがある。またm個の2階のテンソル全体は3つの添え字で特徴づけられるため3階のテンソルと呼ばれることがある。
(P4)ガロア体の元の2乗を表す2階のテンソルSを求める。
(P5)演算部110が演算の対象とする乗算の組(例えば乗算301~304)について、各乗算を、共通に含まれる2つの引数であるm次元ベクトルの成分のAND演算と、テンソルTiおよびテンソルSで記述するテンソルと、により書き換える。書き換え後のテンソルは、乗算の組に含まれる乗算の個数分、求められる。乗算301~304の組では、4種類の乗算(S1
2S3、S1S3、S1
4S3、S1S3
2)を含むため、4個のテンソルが得られる。
(P6)得られた複数のテンソルをまとめたテンソル(以下、連結テンソル)を求める。
(P7)連結テンソルが表す複数のXOR演算のうち、共有化できるXOR演算を共有化(最適化)する。
(P8)共有化後の連結テンソルに従ったXOR演算を実行するように演算部110を構成する。
【0040】
以下、上記の各手順についてさらに説明する。
【0041】
(P1)に関して、ガロア体の定義について説明する。ガロア体は、要素数を定めるm∈{1,2,3・・・}と、次数mの原始多項式p(x)によって決定される。ガロア体は以下のような特徴を有する。
・1個のゼロ元0と、(2
m-1)個の非ゼロ元と、の合わせて2
m個の要素を持つ。
・原始多項式p(x)の根である原始元αのべき乗により、以下の(1)式のように、任意の非ゼロ元が表現できる。
【数1】
【0042】
符号長n=2m-1(mは2以上の整数)のBCH符号では、例えば、要素数が2m個のガロア体GF(2m)が用いられる。ガロア体GF(2m)の元は、mビットのベクトル(m次元ベクトル)により表すことができる。
【0043】
例えば、ガロア体GF(2
m)の任意の元a∈GF(2
m)は、以下の(2)式のように、原始元αに関する(m-1)次のGF(2)上の多項式で表現できる。なお、iは0≦i≦m-1を満たす整数である。
【数2】
【0044】
従って、元aは、以下の(3)式に示すように、GF(2)上の多項式の係数を成分とするGF(2)上のm次元ベクトルで表現できる。
【数3】
【0045】
例えば符号長n=2
10-1のBCH符号で用いられるガロア体GF(2
10)の元は、10ビットのベクトルにより表すことができる。また、符号長n=2
4-1のBCH符号で用いられるガロア体GF(2
4)の元は、4ビットのベクトルにより表すことができる。
図5は、m=4であり、原始多項式がp(x)=x
4+x+1で表されるガロア体GF(2
4)の元のベクトル表現の例を示す図である。
【0046】
例えば元0は、多項式0α0+0α1+0α2+0α3で表され、この多項式の係数を成分とする4次元ベクトル(0,0,0,0)で表される。原始元αは、原始多項式p(α)=α4+α+1=0を満たす、言い換えると、α4=α+1を満たすため、元α4は1+αに変形できる。従って、例えば元α4は、多項式1α0+1α1+0α2+0α3で表され、この多項式の係数を成分とする4次元ベクトル(1,1,0,0)で表される。
【0047】
また、ガロア体の元の加算は、2つのベクトルのビットごとのXORで表される。本実施形態では、ガロア体の元の乗算を、AND演算と、XOR演算と、を組み合わせた演算回路により実行する。
【0048】
(P1)では、まず、演算の対象とするガロア体の要素数を定めるmが決定される。mの値はどのように決定されてもよいが、例えば、適用する符号化方式、および、適用するメモリの種類などに応じて決定されてもよい。例えば、メモリシステム1が、符号長1000ビットのBCH符号を用いる場合、符号長より大きい要素数(210=1024>1000)を含むようにするため、mは10に決定される。ガロア体では、mの値ごとに、1つ以上の原始多項式が定められる。これらの原始多項式のうち、使用する1つの原始多項式が決定される。
【0049】
次に(P2)について説明する。原始多項式p(x)が決定されると、コンパニオン行列と呼ばれる行列が決定される。
図6は、コンパニオン行列の例を説明する図である。
【0050】
ガロア体の元aと原始元αとの乗算は、コンパニオン行列Cと元aを表すベクトルとの乗算で表現できる。原始元αとの乗算は、右シフトに相当する演算と、フィードバック(FB)に相当する演算と、に分けることができる。
図6内の回路は、このような右シフトとフィードバックとに対応する回路の例を示す。フィードバックは、右シフトによりあふれた項に対する処理と解釈することができる。コンパニオン行列Cも、右シフトに相当する列(1列から(m-1)列)と、フィードバックに相当する列(m列)と、に分けることができる。
【0051】
例えば、原始多項式がp(x)=x
4+x+1で表されるガロア体GF(2
4)でのαの乗算は、
図6の下部の式で示すようなコンパニオン行列Cと元aとの乗算で表すことができる。手順(P2)では、このようにして、決定された原始多項式に対応するコンパニオン行列が求められる。
【0052】
次に(P3)について説明する。(P3)では、コンパニオン行列を用いて、ガロア体の元の乗算に用いるm個のテンソルTiが求められる。m=10の場合、T0からT9の10個のテンソルが求められる。
【0053】
図7は、テンソルT
iの求め方の一例を示す図である。
図7に示すように、テンソルT
iは、行列C
0~C
m-1のi番目の行ベクトルを並べることにより求められる。なお、行列C
p(pは0≦p≦m-1を満たす整数)は、コンパニオン行列Cのp乗を意味する。
【0054】
また、
図7では、テンソルT
iと、ガロア体の元aおよび元bの乗算との関係を示す式の例も示されている。(a×b)
iは、元aおよび元bの乗算の結果を示すmビットのベクトルのうち、i番目のビットを表す。
図7に示すように、(a×b)
iは、元aを示すベクトルと、元bを示すベクトルと、テンソルT
iとの乗算により表すことができる。なお、元bの右上の記号「T」はベクトルや行列の転置を表す。また、(a×b)
iは、aのj番目(jは0≦j≦m-1を満たす整数)の成分a
jと、bのk番目(kは0≦k≦m-1を満たす整数)の成分b
kと、のAND演算の和の形式で表すことができる。
【0055】
図8は、m=4、原始多項式p(x)=x
4+x+1の場合のテンソルT
0の求め方の具体例を示す図である。まず、コンパニオン行列Cから、行列C
0~C
3が求められる。テンソルT
0は、これらの行列C
0~C
3それぞれの0行目を並べることにより求められる。このテンソルT
0を用いると、(a×b)
0は、a
0b
0+a
1b
3+a
2b
2+a
3b
1と表される。同様にして、テンソルT
1、T
2およびT
3を求めることができる。
【0056】
次に(P4)について説明する。ガロア体の元の2乗を表すテンソルSは、テンソルT
iから求めることができる。
図9は、テンソルSの求め方の一例を示す図である。
図9に示すように、テンソルSは、テンソルT
iの対角成分をi行の行ベクトルとすることにより求められる。
【0057】
また、
図9では、テンソルSと、ガロア体の元aの2乗(元aと元aとの乗算)との関係を示す式の例も示されている。
図9に示すように、元aの2乗(a×a)は、元aを示すベクトルと、テンソルSとの乗算により表すことができる。
【0058】
図10は、m=4、原始多項式p(x)=x
4+x+1の場合のテンソルSの求め方の具体例を示す図である。テンソルSは、テンソルT
0~T
3それぞれの対角成分を並べることにより求められる。このテンソルSを用いると、a
2(=a×a)は、ベクトル(a
0+a
2、a
2、a
1+a
3、a
3)と計算される。
【0059】
なお、対角成分のみを取り出すのは、主対角線について対称である成分は打ち消しあって0となるためである。例えば、テンソルT0に対応する(a×a)0は、a0a0+a2a2+a3a1+a1a3となる。GF(2)では、元aの2乗a2はaと等しく、同じ元aの加算(a+a)は0となる。例えば、a0a0、a2a2は、それぞれa0、a2となる。また、a3a1+a1a3は、同じ元の加算となるため、0となる。従って、a0a0+a2a2+a3a1+a1a3は、a0+a2と表される。
【0060】
次に(P5)について説明する。以下では、乗算301~304の組に含まれる乗算S
1S
3、S
1
2S
3、S
1
4S
3、S
1S
3
2を書き換える例を説明する。
図11は、乗算を書き換える手順を説明するための図である。本実施形態では、乗算する2つの値を引数という。例えば乗算S
1S
3は、引数S
1と引数S
3との乗算である。
【0061】
図11の中央に示すように、各乗算は、2つの引数の間にテンソルT
iを挟む乗算の形式で表すことができる。この形式では、同一のテンソルT
iが用いられるが、引数は相互に異なる。従って、例えば
図7の右の式に含まれるAND演算として、(S
1)
j(S
3)
k、(S
1
2)
j(S
3)
k、(S
1
4)
j(S
3)
k、(S
1)
j(S
3
2)
kの4種類のAND演算が必要となる。
【0062】
そこで、本実施形態では、
図11の中央に示す形式を、同じ引数を含み、テンソルが異なる形式に書き換える。書き換えには、以下の(4)式に示す式の変形を利用することができる。
【数4】
【0063】
このように、各乗算で用いるテンソルは、テンソルT
iと、2
u乗を表す線形演算S
uと、2
v乗を表す線形演算S
vと、を含む以下の(5)式により表される。
【数5】
【0064】
図11の例では、各乗算に対応するテンソルは以下のように求められる。
・S
1S
3:u=0、v=0であるため、(S
0)
T×T
i×S
0=T
i
・S
1
2S
3:u=1、v=0であるため、(S
0)
T×T
i×S
1=T
iS
・S
1
4S
3:u=2、v=0であるため、(S
0)
T×T
i×S
2=T
iS
2
・S
1S
3
2:u=0、v=1であるため、(S
1)
T×T
i×S
0=S
TT
i
【0065】
書き換え後の形式では、引数はS1およびS3の1種類となるため、(S1)j(S3)kの1種類のAND演算のみが必要となる。このため、AND演算のための回路の規模を削減可能となる。
【0066】
次に(P6)について説明する。各乗算に対して求められた複数のテンソルは、1つの連結テンソルにまとめられる。
図12は、連結テンソルの求め方の例を説明するための図である。
【0067】
例えば、連結テンソルは、複数のテンソルをそれぞれ1次元のベクトルに変換し、変換したベクトルを各行ベクトルとすることにより求められる。
図12では、テンソルを1次元ベクトルに変換する機能を「flatten」と表している。例えばテンソルT
0は、1次元ベクトル(1,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0)に変換することができる。
【0068】
なお、上記のように、テンソルTiは、ガロア体の元を表すm次元ベクトルの成分ごとに求められる。従って、
図11の例では、4種類の乗算それぞれについて4個(m=4)のテンソルが求められる。この場合、連結テンソルは、16個(4種類×4個)のテンソルを連結(連接)したテンソルとなる。
【0069】
m=10の場合は、連結テンソルは、40個(4種類×10個)のテンソルを連結したテンソルとなる。
図13は、m=10の場合の連結テンソルの例を示す図である。第(j+10k)列が、共通の引数によるAND演算である(S
1)
j(S
3)
kに対応する。値が1である列は、該当する行の乗算(
図13の例では4種類×10個)を得るための加算(XOR)に用いられる。値が0である列は、この加算に用いられない。例えば、連結テンソルの2行目は、乗算(S
1S
3)
1に対応する。そして、この乗算(S
1S
3)
1は、以下の(6)式に従う引数の加算(XOR)により計算される。
【数6】
【0070】
次に(P7)について説明する。(P7)は、連結テンソルにより定められる複数のXOR演算のうち共有化できる演算を共有化する手順である。これにより、XOR演算のための回路の規模を削減可能となる。
【0071】
図14は、XORの共有化の例を説明するための図である。
図14では、原始多項式p(x)=x
10+x
3+1の場合のコンパニオン行列Cの452乗(C
452)に相当するテンソルを用いて、共有化の例を説明する。例えば、元aと行列C
452との乗算の第0成分(α
452a)
0は、a
2+a
3+a
5+a
6+a
7+a
8と表され、第1成分(α
452a)
1は、a
0+a
3+a
4+a
6+a
7+a
8+a
9と表される。これらの2つの成分については、合計11個のXOR演算が必要となる。
【0072】
これらの2つの成分で共通する項を含む共有変数c=a3+a6+a7+a8が定義される。この共有変数を用いると、第0成分(α452a)0は、a2+a5+cと表され、第1成分(α452a)1は、a0+a4+a9+cと表される。この結果、必要となるXOR演算の個数は8個に削減される。
【0073】
XOR演算の共有化は、どのような手法で求められてもよいが、例えば、以下のような手法で求められる。
図15は、XOR演算の共有化手法の一例を示す図である。
図15では、説明を簡単にするため、
図14で取り上げたC
452に相当するテンソルで用いられるXOR演算を共有化したテンソルを生成する例を説明する。
【0074】
図15のテンソルでは、例えば0行目および1行目で、第3列、第6列、第7列および第8列に1が設定されている。これは、a
3+a
6+a
7+a
8に相当する加算(XOR)が、0行目および1行目で共通に必要となることを意味する。例えば、以下のような手順で、このXOR演算を共有化することができる。
・a
3+a
6+a
7+a
8を計算する行をテンソルの最下行に追加する。追加した行では、aa
3+a
6+
7+a
8に相当するXORのみを実行するように、a
3、a
6、a
7およびa
8に対応する第3列、第6列、第7列および第8列のみ、値が1に設定される。
・計算結果を配る列をテンソルの最も右側の列として追加する。追加した列では、0行目および1行目のみ、値が1に設定される。なお、0行目および1行目の第3列、第6列、第7列および第8列は、それぞれ値が0に変更される。
【0075】
共有化する前の連結テンソルを変形前テンソルとする。変形前テンソルは、手順(P6)で得られた複数のテンソルのうち、j番目(jは0≦j≦J-1、Jは複数のテンソルの総数)のテンソルを1次元化したベクトルを第j行の行ベクトルとするテンソルとして生成される。
【0076】
共有化後のテンソル(連結テンソル)は、例えば以下のような手順で生成される。
・変形前テンソルの2つ以上の行ベクトルのうち、2つ以上の列(以下、対象列という)の値が1で共通する行ベクトル(以下、対象行ベクトルという)の対象列の値を0に変更する。
・変形前テンソルに、対象列の値を1とし、他の列の値を0とした行ベクトルを追加する。
・変形前テンソルに、対象行ベクトルに相当する行の値を1とし、他の行の値を0とした列を追加する。
【0077】
本実施形態では、複数のテンソルを連結した連結テンソルを元に、XOR演算を共有化する。連結テンソルはより多くの行を含むため、共有化できるXOR演算が見つかる可能性を高めることができる。従って、XOR演算のための回路の規模をより効率的に削減できる。なお、(P7)の共有化を実行せず、変形前テンソルを連結テンソルとして使用するように構成されてもよい。
【0078】
次に(P8)について説明する。(P8)では、共有化後の連結テンソルに従ったXOR演算を実行するように演算部110が構成(設計)される。演算部110の構成は、従来から用いられているどのような手法により実行されてもよい。例えば、レジスタ・トランスファ・レベル(RTL)のハードウエア記述言語による回路設計を行うツールなどを用いた手法を適用することができる。ツールが、XOR演算を共有化する最適化の機能を備える場合は、このようなツールを用いて手順(P7)および(P8)が併せて実行されてもよい。
【0079】
以上のような手順により、演算部110が構成される。
図16は、演算部110(AND計算部111、XOR計算部112)の構成例を示す図である。
図16は、m=10の場合に乗算S
1S
3、S
1
2S
3、S
1
4S
3、S
1S
3
2を実行する演算部110の例である。
【0080】
AND計算部111は、ガロア体の元aおよび元bのAND演算の結果であるAND値を計算する。AND値は、元aのm個の成分と、元bのm個の成分と、のAND演算の結果であるm×m個の成分(以下、演算成分)を含む。
図16の例では、AND計算部111は、入力されるシンドロームS
1(元aの一例)およびS
3(元bの一例)の乗算(AND)である(S
1)
j(S
3)
k(AND値の一例)を計算する。各シンドロームは10次元ベクトルであるため、AND計算部111は、10×10=100回のAND演算を実行し、演算の結果である100個の演算成分を出力する。
【0081】
XOR計算部112は、複数の相互に異なる(u,v)の組それぞれについて、AND値と、組ごとに異なる複数のテンソルをまとめた連結テンソルとに基づくXOR演算により元aの2u乗と元bの2v乗との積であるa^(2u)×b^(2v)を計算する。
【0082】
複数のテンソルのそれぞれは、演算成分それぞれをXOR演算に用いるか否かを表すm×m個の成分(以下、テンソル成分)を含むと解釈することができる。例えば、テンソル成分1は、対応する演算成分をXOR演算に用いることを表し、テンソル成分0は、対応する演算成分をXOR演算に用いないことを表す。XOR計算部112は、テンソル成分によりXOR演算に用いることが表された演算成分、すなわち、テンソル成分1に対応する演算成分を用いてXOR演算を行い、a^(2u)×b^(2v)を計算する。
【0083】
図16の例では、元aおよび元bはシンドロームS
1およびS
3に相当する。また、4種類の乗算は、以下のような(u,v)の組、および、テンソルに対応する。
・S
1S
3:(u,v)=(0,0)、T
i
・S
1
2S
3:(u,v)=(1,0)、T
iS
・S
1
4S
3:(u,v)=(2,0)、T
iS
2
・S
1S
3
2:(u,v)=(0,1)、S
TT
i
【0084】
従って、
図16の例では、XOR計算部112は、AND計算部111により計算されるAND値と、4種類のテンソル(T
i、T
iS、T
iS
2、S
TT
i)を連結した連結テンソルとに基づくXOR演算により、4種類の乗算S
1S
3、S
1
2S
3、S
1
4S
3、S
1S
3
2を計算する。
【0085】
図16の下部には、AND計算部111およびXOR計算部112で必要となる演算数の例が示されている。例えばAND計算部111は、上記のように10×10=100回のAND演算が必要となる。XOR計算部112は、共有化後の連結テンソルを用いた場合、例えば486回のXOR演算が必要となる。
【0086】
図17は、本実施形態の手法を用いずに4種類の乗算S
1S
3、S
1
2S
3、S
1
4S
3、S
1S
3
2を計算する回路の例(以下、比較例)を示す図である。比較例は、
図11の中央に示したような、異なる4種類の引数を計算し、4種類のAND演算を実行する例に相当する。すなわち、比較例では、円形状の記号で示す4個の乗算器が用いられる。
【0087】
4個の乗算器は、100回のAND演算と、99回のXOR演算と、を実行する。SおよびS2は、引数を計算するための2乗および4乗を計算するための回路に相当する。2乗を計算する回路(S)は、例えば6回のXOR演算が必要となる。4乗を計算する回路(S2)は、例えば11回のXOR演算が必要となる。これらを合計すると、比較例では、400回のAND演算と、419回のXOR演算と、が必要となる。
【0088】
回路規模を比較する場合は、例えば、各演算(AND演算、XOR演算)に必要なトランジスタの数を考慮することが望ましい。トランジスタ数の比率を考慮して、例えばAND演算とXOR演算との回路規模の比率を6:10とすると、本実施形態の
図16のAND計算部111は、比較例内のAND演算のための回路と比較して75%の回路規模を削減できる。XOR計算部112は、比較例内のXOR演算のための回路と比較して16%の回路規模の増加となるが、演算部110全体では、比較例に対して約17%の回路規模の削減となる。
【0089】
図18は、演算部110(AND計算部111、XOR計算部112)の他の構成例を示す図である。
図18は、m=10の場合に乗算S
1
3、S
1
5、S
1
9を実行する演算部110の例である。
図19は、
図18の演算部110(XOR計算部112)によるXOR演算に対応する連結テンソルの例を示す図である。
【0090】
図18の演算部110は、乗算を計算する2つの元aと元bとが同じ元cである場合の例と解釈することができる。すなわち、AND計算部111は、ガロア体の元cおよび元cのAND演算の結果であるAND値を計算する。
図18の例では、AND計算部111は、入力されるシンドロームS
1(元cの一例)およびS
1(元cの一例)の乗算(AND)である(S
1)
j(S
1)
k(AND値の一例)を計算する。
【0091】
同じ元c(=S
1)を引数とする乗算であるため、j=kとなる組についての計算は不要であり、入力されるS
1をそのまま出力すればよい。また、jとkとを入れ替えたAND演算は同じ値となるため、いずれか一方のみの演算を実行すればよい。従って、
図18に示すAND計算部111では、45回(=
10C
2)のAND演算が必要となる。
【0092】
XOR計算部112は、複数の相互に異なる(u,v)の組それぞれについて、AND値と、組ごとに異なる複数のテンソルをまとめた連結テンソルとに基づくXOR演算により、元cの2u乗と元cの2v乗との積であるc^(2u)×c^(2v)を計算する。
【0093】
図18の例では、元cはシンドロームS
1に相当する。また、3種類の乗算は、以下のような(u,v)の組、および、テンソルに対応する。
・S
1
3:(u,v)=(0,1)、T
iS
・S
1
5:(u,v)=(0,2)、T
iS
2
・S
1
9:(u,v)=(0,3)、T
iS
3
【0094】
図18の例では、AND計算部111は、上記のように45回のAND演算が必要となる。XOR計算部112は、共有化後の連結テンソルを用いた場合、例えば323回のXOR演算が必要となる。
【0095】
図20は、
図18に対応する回路の比較例を示す図である。
図20の比較例では、300回のAND演算と、330回のXOR演算と、が必要となる。上記と同様にAND演算とXOR演算との回路規模の比率を6:10とすると、
図18のAND計算部111は、比較例内のAND演算のための回路と比較して85%の回路規模を削減できる。XOR計算部112は、比較例内のXOR演算のための回路と比較して同程度の回路規模となる。演算部110全体では、比較例に対して約31%の回路規模の削減となる。
【0096】
次に、メモリシステム1による復号処理の流れについて説明する。
図21は、本実施形態における復号処理の一例を示すフローチャートである。
【0097】
制御部11は、不揮発性メモリ20から、誤り訂正符号を読み出し、受信語を得る(ステップS101)。また、制御部11は、復号部18へ復号の開始を指示する。
【0098】
復号部18のシンドローム計算部101は、受信語からシンドロームを計算する(ステップS102)。復号部18は、計算されたすべてのシンドロームの値が0であるか否かを判定する(ステップS103)。
【0099】
すべてのシンドロームが0である場合(ステップS103:Yes)、受信語に誤りがないと判断できるため、復号部18は、復号処理を終了する。すべてのシンドロームが0でない場合(ステップS103:No)、誤り位置多項式計算部102は、PGZ法に従い、シンドロームを用いて誤り位置多項式を計算する(ステップS104)。このとき、誤り位置多項式の少なくとも一部の係数について、演算部110により、シンドロームの乗算が計算される。
【0100】
誤り位置計算部103は、計算された誤り位置多項式により、誤り位置を探索する(ステップS105)。ビットフリップ部104は、探索により求められた誤り位置のビットを反転(ビットフリップ)することにより誤りを訂正し(ステップS106)、復号処理を終了する。
【0101】
以上説明したとおり、本実施形態によれば、ガロア体の乗算を行うための回路規模の増加を抑制することができる。
【0102】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0103】
1 メモリシステム
10 メモリコントローラ
11 制御部
12 データバッファ
13 メモリI/F
14 符号化/復号部
15 ホストI/F
16 内部バス
17 符号化部
18 復号部
20 不揮発性メモリ
30 ホスト
101 シンドローム計算部
102 誤り位置多項式計算部
103 誤り位置計算部
104 ビットフリップ部
110 演算部
111 AND計算部
112 XOR計算部